1年で150個のPull Requestを出した話。あるいはOSSに継続的にコントリビュートするということについて

なんかエモいこと書きたくなったので書きます。

# はじめに

[Crystal](https://crystal-lang.org)というRubyライクなプログラミング言語のコンパイラに、1年間(2016/12/26〜2017/12/25)で150個のPull Requestを出しました。

<img width=600 alt="GitHubの検索結果のスクショ" src="https://qiita-image-store.s3.amazonaws.com/0/68263/2987bc9b-59cb-b22d-2099-a5f3282a2fd7.png">

<https://github.com/search?p=1&q=author%3AMakeNowJust+type%3Apr+repo%3Acrystal-lang%2Fcrystal+created%3A2016-12-26..2017-12-25&type=Issues&utf8=✓>

今年は閏年ではなかったので`365 / 150 = 2.43333...`、というわけで3日に1回以上のペースでPull Requestを出したことになります。
随分とたくさんのPull Requestを出したものです。

また、150個のうちマージされたものは106個でした。

<https://github.com/search?q=author%3AMakeNowJust+type%3Apr+repo%3Acrystal-lang%2Fcrystal+created%3A2016-12-26..2017-12-25+is%3Amerged&type=Issues&utf8=✓>

こうした活動の中で感じたことを適当に書いていきたいと思います。

# 継続的にOSSにコントリビュートするために

継続的にOSSにコントリビュートするためには、どうしたらいいのでしょうか？
様々な意見があると思いますが、ボクから言えることは一つだけです。

  - 息苦しくないようにする。

これに限ります。

さて、息苦しいとはどういうことでしょうか？

基本的にプログラマという生き物は、コードを書き続けなければ死んでしまいます。[^1]
マグロのようですね。
これは、コードを書くことによって生かされていると言うこともできます。
プログラマのメンタルは、コードを書くことによって支えられているわけです。

[^1]: 単に自分がおかしいだけかもしれません。

しかし、OSSというのはOpen Source Softwareのことであって、コードそのものではありません。
単にSoftwareの周辺としてプログラム、ひいてはコードが存在しているだけです。
コードの他にOSSの周囲にあるものとしては、それを支えるコミュニティやエコシステムなどが上げられます。
つまり、OSSに関わっていくということはそれらの周辺の環境に足を突っ込んでいくことに他なりません。

ここで話を戻します。
プログラマはコードを書き続けなければ死んでしまう生き物なのです。
そして、コミュニティなどに関わっている時間は、コードを書く手を止めなければいけません。

これは非常に困ったことです。
プログラマがコードを書き続けるマグロであるなら、コードを書くのを止めるのは息を止めることに等しいのですから。

息苦しいとは、このような状態のことを指します。
言い換えるなら、ボクはコードを書き続けたいのです。
ですが、OSSに関わっていく以上はコードを書く以外のことも必須であるようにも思えます。

この問題をどのような工夫で解決していくのか。
それがこの記事の主題になります。

## コードを語る人間になる

一つ目は「コードを語る人間になる」という工夫です。

Crystalは開発に関わるチャットなどは基本的に英語でされるのですが、ボクはあまり英語が得意ではありません。
2年くらい前に「英語よりもCrystalの方がよっぽど得意だ」みたいなことを言った記憶があります。[^2]
英語の文章を書くことは非常に疲れます。
本当に疲れます。
こうした事態は避けねばなりません。

[^2]: ソースは忘れました。GitHubのIssueかPRのコメントだと思うので誰か探しておいてください。

重要なことは、人にも依るかと思いますが、英語よりもコードの方が書く方が簡単だということです。
特にアルゴリズムを説明する際などは、苦労して英語で書くよりもコードで語った方が明確に相手に伝えるようになります。
モノにもよりますが、OSSのコミュニティは基本的にはプログラマの集団です。
なので、よっぽどのことがなければコードは伝わるはずです。

このように、コミュニケーションの方法としてコードを書くことができるということを覚えておきましょう。
すると、厄介だったコミュニケーションもコーディングに変えることができるのです。

Pull Requestを作るときのコメントもタイトルで自明な場合を除いて、「こういうコードが動くようになったよ "This code works now."」という一文と共にコード例を示すことで、非常に親切なものになります。

## 面倒なことはやらないようにする

二つ目は「面倒なことはやらないようにする」です。

OSSへの関わり方として、例えばStack OverflowでそのOSSの質問に積極的に答える、などもあります。
ですが、Stack Overflowだと英語で書く必要があったり、日本語の質問サイトにしてもサイト毎の暗黙のローカルルールがあったりして非常に面倒です。

そうした面倒なことに敢えて関わっていく必要はありません。
GitHubなどでPull Requestを出してコントリビュートするだけがOSSへの貢献の仕方ではありませんが、それも確かにOSSへの貢献なのです。

プログラマはコードが書ける生き物なのです。
コードを書きましょう。

コミュニティの運営が好きな人に運営を任せて、QAサイトで回答するのが好きな人に回答させておけばいいのです[^3]。

[^3]: とかくに人が足りないプロジェクトであればその限りではありません。が、幸いCrystalに関してはボク以外に優秀な人がコミュニティを回したり色々やっているので、ボクは安心してパッチを送り続けられています。

## コードを書くのに必要の無い情報をシャットアウトする

三つ目は「コードを書くのに必要の無い情報をシャットアウトする」です。

さっきからボクはコミュニケーション嫌いな引きニートを演じているわけなのですが、どうしてもコミュニケーションを取らなければいけない場は存在します。
その判断の基準として、それがコードを書くのに必要か、を考える必要があります。

例えば英語ネイティブの人たちがジョークを言いあっている場に、敢えて突っ込んでいく道理はないでしょう。
そういうときは大人しく傍観していればいいのです。

また、コードを書くのにあまり役に立たない情報として、GitHubのリアクションがあります。
コメントの下に:+1:とか:smile:とかついているあれです。
:+1:や:smile:は既読程度の意味はあると思うのですが、:-1:や:confused:には本当に価値がありません。

普通、:-1:や:confused:を押す背景には何かそのコメントに対して不満があるのだと思います。
それならばリアクションを押すのではなく、その不満を述べればいいのです。

また、Pull Requestをマージするかどうかの基準にリアクションを使うことができる、という意見があるかもしれません。
悪いことは言いません。落ち着いてGitHubにはレビューの機能があることを思い出してください。

そういうわけで、個人的にはリアクションはGitHubでもっとも失敗した機能だと思っています。
なので、リアクションは基本的には表示しないようにしています。
気にしないとはいえ、:-1:が付けられると精神衛生上良くないので‥‥。
具体的には、github.comに対するユーザーCSSに次のようなものを書いています。

```css
.comment-reactions.has-reactions {
    opacity: 0;
    height: 0.25em;
}

.comment-reactions.has-reactions:hover {
    opacity: 1;
    height: auto;
}
```

これで、コメントの下の方にカーソルを持っていたとき以外にリアクションが表示されなくなります。

# 最後に

無駄に大きい主語で色々書きましたが、基本的にはボクの話なのであまり真に受けない方がいいです。
特にリアクションに対する考えはかなり極端なものです。
いや、GitHubは早くリアクションを廃止してくれないかな‥‥。

また、改めて振り返ってみると、自分が言いたかったのは二つ目のところに書いた、次のことだけだったのではないかという気もします。

> GitHubなどでPull Requestを出してコントリビュートするだけがOSSへの貢献の仕方ではありませんが、それも確かにOSSへの貢献なのです。
>
> プログラマはコードが書ける生き物なのです。
> コードを書きましょう。
>
> コミュニティの運営が好きな人に運営を任せて、QAサイトで回答するのが好きな人に回答させておけばいいのです。

餅屋は餅を搗いて、竿竹屋は竿だけ売りましょう。桶屋は勝手に儲けていればいいのです。
そんなことを言いたかっただけなのかもしれません。

CrystalのAdvent Calendarの最終日だというのに、全くCrystalについて触れていない記事でごめんなさい。
でも多分、世界で一番GitHubでCrystalにコントリビュートしたと思うので許してほしいです。

それと年末なので来年の抱負でも。鬼が笑いそうですが。
来年はCrystalでお金を稼ぎたいです。
めっちゃコントリビュートしてるのにまったくお金になりません。
どうかしてる。

そんなこんなで、最後まで目を通していただきありがとうございました。

Happy Christmas! (1時間遅れじゃん‥‥)