OSS以外の方法でのコントリビューションの模索と実践記録と自己弁護

# はじめに

みなさ〜〜〜〜〜ん、コントリビューション、やってますか？

私は自分が技術にコントリビューションしています。そう自負しております。

「コントリビューション」という言葉から真っ先に思いつくのは、やはり、OSS活動だと思います。しかしながら、私はOSS活動というのをやっていません。自分のために自分でコードを書くことはありますが、業務以外で継続的にソフトウェアを開発しようとすると腰が重くなってしまいます。

OSS活動にどうもやる気が起きない人間の私は、OSS活動している知人を見ると、とても引け目を感じておりました。これは今も変わりません。

しかし、OSS活動をしていない私であっても、自分が技術にコントリビューションしているという自負を持っております。

本記事では、OSS活動以外でも、技術への貢献はできるということを伝えることを目的にしています。

# コントリビューションとは

自分が技術へのコントリビューションをできていないと思っている自分にとって、そもそもコントリビューションとはなんなのか、どう捉えているかの整理をするところから始めよう。

辞書的な意味としては、「ロングマン英和辞典」(2007, 株式会社 ピアソン･エデュケーション)を見ますと"contribution"は名詞として以下の4種の意味があります。

1. 貢献、寄付、助力
1. 寄付金、献金、出資金
1. 分担金、掛け金
1. 寄稿作品

技術へのコントリビューショを技術への貢献という括りで見ますと、OSS活動は明らかにその中の1つに属することになります。

一方で、技術を使う場面であるところの社内発表や部署の環境整備(CI/CDやドキュメント作りなど)は、技術への貢献とは言われないことが多いと思います。このことより、ある種の文脈において**幅広さや公共性**というのが求められることが想像できます。

コントリビューションには「寄付金」という意味も含まれています。GitHub Sponsorなどの寄付が技術への貢献と言われるかというと人によって意見が分かれるでしょう。技術に貢献しているコミュニティや人への貢献であり、寄付には間接的な印象があります。広義のコントリビューションとしては寄付も含めていいと思いますが、狭義においては**直接性**が要求されていると推測されます。

軽い記事の作成も、あまり技術への貢献と言われないかもしれません。公式ドキュメントを読めば書いてあることを、特定の課題や目的もなく、書こうと思ったモチベーションとなるような疑問点すら明らかにせず、ましてや配置すら変えずに、ただただ複製することをしても、プラスのものがないならば、貢献したとは言えないというのは明らかでしょう。ある種の**深さ**だったり**労力**だったりというのが求められているかもしれません。

網羅性が少ないですが、以上より、狭義の技術へのコントリビューションの特徴には少なくとも以下の3つが見出せました。 

- 幅広さや公共性
- 技術への直接性
- 深さや労力

OSS活動にはこれら3つ、公共性・直接性・労力が見出せます。このような献身的な姿勢や思想が背後にあるように自分は思っていて、それによって、OSS活動をしていない自分は引け目を感じていたのかもしれません。

# アカデミック方面でのコントリビューション

自分の特性を振り返ってみると、地道に思考を前に進めることが得意かつ好きであり、また、テキストを深く読み考察することを生業としていました。もともと論理学の哲学をやり、博士課程前期(修士)を修了するまでいったので当たり前なのかもしれませんが。

アカデミックから離れ、久しくテクストを深く読み込むことをやっていませんでしたが、2020年からは心機一転し、深く読み込んでいこうと思いました。

狙いとしては、自分のため、周囲へのアピールのため、世界のため、と3種類ありました。

- 自分の心の平安のため
- 周囲の人間の優秀さに肩を並べるために一角の知識をなすため
- 運よく誤植の修正に気づいたら作者は喜ぶし、誤植が直ると多くの人が助かるだろうから

そこで、これまで自分がやってきていない、けれど自分の得意分野に近く、深く学び、そして、多くの人に良い影響を与える書籍がないかと探し、大堀　淳(2001)「プログラミング言語Standard ML入門」を読むことにしました。学部と修士の時の再帰関数の勉強からか、OCamlがなぜか手に馴染むということもあり、ML系のSMLついて学習することにしました。

やってみると業務で使っているRustに近いところも感じたり、読んでみると意外な発見や誤植に気づきました。ちょうどその頃に大堀さんが解答例を公開し始めたので、解答例の誤りの指摘やコメントをしました。

2021年には同じく大堀さんの「コンパイラ ー 原理と構造」が出版されたので、読むことにしました。コンパイラの原理も学んだことがないし、コンパイラを作ったことがない自分にとってはかなりのハードな本でした。しかし、かなり面白い内容で、かつ、自分の理解や思考を試す内容で、誤りと思われる箇所の指摘の時には脳が汗をかく感じがしました。

その努力のおかげか、「プログラミング言語Standard ML入門」については2021年に出版された改訂版の「プログラミング言語Standard ML入門（改訂版）」の謝辞への掲載、また、「コンパイラ ー 原理と構造」については[Webページの謝辞](https://atsushiohori.github.io/ja/texts/compiler/acknowledgments/)に掲載していただく運びになりました。

## 技術へのコントリビューションの条件を満たしているか

上述の通り、かなり頑張って、結果となるものが残せました。ところで、それは技術へのコントリビューションの条件を満たしているのでしょうか？

まずは、公共性についてです。書籍は明らかに公共性を有していますね。

次に、直接性。これは若干議論の余地があるかと思います。私の意見（自己弁護）でありますが、みんなが使うツールやライブラリを作ったり改善したりとは別に、みんなが使うテキストの作成や改善もまた貢献ではないかと私は思っております。実際、使っているツールのドキュメントに不備があると困りますし、網羅性や簡潔さがあると助かります。ましてや、技術を学ぶ上でのソースとなるものについてのツールとしてのテキストを改善することは、技術を使う方にとって明らかな助けとなります。

最後に深さや労力について、です。かなり深く読み込んだと自負しております。また、メールを介した指摘やコメントもかなり労力をかけたと思います(やっている時は全くそんな大変さを感じないのは不思議ですね)。文章も筆者のツイートによると、かなりの文字数になりました。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/FDDaioh?ref_src=twsrc%5Etfw">@FDDaioh</a> 大王 a.k.a. S.S.H.さま、励みになるコメントどうもありがとうございます。<br>また、申し上げました通り、初版第１刷を丁寧に隅々まで読んで下さり（20487文字に及ぶ）誤植等のご指摘本当にありがとうございました。おかげさまで、第2刷は、（多くの）誤植を一掃できたと思っております。</p>&mdash; 大堀 淳 (@AtsushiOhori) <a href="https://twitter.com/AtsushiOhori/status/1581580743989350400?ref_src=twsrc%5Etfw">October 16, 2022</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

以上より、私が仮に建てた技術へのコントリビューションへの3条件を満たしているかと思われます。

- 書籍という**公共性**
- 技術を学ぶ人のソースとなるものの改善という**直接性**
- テキストをよく読んで多くの文章を作った**深さと労力**

# おわりに

いかがでしたか？

今回は狭義のコントリビューションについて考察と、「自分はコントリビューションしているんだ。誰が何を言おうとコントリビューションしているんだ」と、自己弁護を行いました。

業務以外でソフトウェアを作るのが苦手な人でも、技術へのコントリビューションをする方法があり、例えばみんなが読むような本の誤植の指摘やコメントを行うといったものがあります、ということを本記事では書かせていただきました。また、あなたなりの技術へのコントリビューションを見つける助けになったのなら幸いです。

この世にある大半のものは完成をまだ迎えていません。商品やサービス、学問、教科書、これらはまだ途上にあります。さらに、歴史を振り返りますと我々の生活には知の前進が不可欠でした。知の前進や幸福のためにもコントリビューションをしていきましょう。

## おすすめの広義のコントリビューション

余談ですが、広義のコントリビューションとして私が実践していて、オススメのものを紹介します。

広義のコントリビューションで労力が少なく単純かつ即時性があってオススメなのは、やはり寄付ですね。直接性はないですが、間接的に技術に貢献できるGitHub Sponsorで寄付をやってみるのが良いと思います。私はやってます。

いつもお世話になっている人や、尊敬している方、もしくは、頑張ってほしい方に是非寄付をしましょう。

## 来年の抱負

さて、来年の抱負になりますが、EMとして狭義ではない広義のコントリビューションをより増やしていきたいです。技術よりですと、他の方への刺激があり、個人的に歯ごたえもある、計算機科学の哲学やOS周りについての学習をしていこうと思います。

## 補足

また余談。

書き終えてから気づいたのですが、弊社matsuri technologies株式会社では、いくつかのライブラリをPublicに公開していますし、自分も業務でOSS活動をしているのではなかろうか。(Goの`time.Time`のトラップを避けるための[date-go](https://github.com/matsuri-tech/date-go)やログに書き出したくないフィールドを明示するための[json-hidden-marshal](https://github.com/matsuri-tech/json-hidden-marshal)がある。)

業務で書いていると、OSS活動っぽさが減ってしまうのかもしれません。

# 参考文献


- 大堀　淳(2001)「プログラミング言語Standard ML入門」共立出版
- 大堀　淳(2021)「プログラミング言語Standard ML入門（改訂版）」共立出版
- 大堀　淳(2021)「コンパイラ ー 原理と構造」共立出版
- Geoffrey Leech 他(監修)(2007)「ロングマン英和辞典」桐原書店