君!(そう、そこの君!)、オープンソースに参加しようよ


You (yes, you!) should contribute to open source - The Changelog - Open Source moves fast. Keep up.の翻訳記事です。勝手に翻訳してます*1。翻訳に間違い・アドバイスあればコメント頂けると嬉しいです。

君がこのブログを読んでるってことは、オープンソースに関心があるってことだよね。でも、もし君がまだオープンソースのプロジェクトに参加したことが無いのだとしたら、きっとそれに対して「敷居が高い」って感じてるんだろうね。以前僕は、Ruby 1.9.3 Documentation Challenge にインスパイアされて自分のブログに「Rubyにドキュメントを寄与する方法」なんて記事をポストしたことがある。すると、それに対して、いくつかこんな感じの反応をもらったりしたんだ。

@steveklabnik おお、こりゃすごい。やっと僕も協力することができるよ。こんな機会を与えてくれてありがとう!

このことから、僕は君が利用しているそのオープンソースのプロジェクトに関わっていくべきだと確信したんだ。全てのプロジェクトは人手が必要としている。小さなプロジェクトでは特にだ。

怖気づくことについて

もし、君が「まだ準備が出来ていない」という理由でまだオープンソースに参加していないなら、怖がることは無いよ! 「言うのは簡単」って?まあ、それはそうだけど、本当に君の準備は整っているだ。僕の友達が「僕がオープンソースに参加しない理由」というブログ記事をポストしてたし、他の多くの人たちも同じような感覚なんだろうなと思う。Greg Brown はそんな彼の心配ごとについていくつか答えを出しているが、僕が話したことのある人たちは、こんな3つの理由を挙げていた*2

  • 難しすぎる
  • 自分のスキルがまだ十分じゃない
  • そんな時間がない

それじゃあ、最後のヤツから一つづつ見ていこうか。そう、おそらく君はとても忙しい人生を送っている。僕は君個人のスケジュールは把握していない。だけど、週末に1時間や2時間そこらの時間の余裕はあるんじゃない?それだけあれば十分さ。多くのプロジェクトは数千もの小さなコミットで成り立っている。なにも大きな貢献をする必要はない。どんな小さな貢献でもそれは価値があることなんだ。

もし、君が君のコードの品質について心配しているんだったら、それを向上させるたった一つの方法がある。それは実践することだ。さあ、エディタを開いてパッチを送ろう。もし君のパッチが完全に正しいものじゃなかったときは、GitHubの上で議論することになるだろう。そうやってみんな学ぶんだ。たとえば、このプルリクエストを見てみよう。 Colin は最初、間違った URL にリンクしたパッチを送ってしまった。その後 wilkie はそれに対して言及し、Colin はそのコードを修正した。そして、僕が The Changelog へのポストを止めている間にこのソースはマージされた。こんなやりとりは、君が始めてパッチを提出する時にも多分起きるだろう。でも怖がらなくてもいいよ!そうやって、みんなお互いに学び合って来たんだから。

「難しすぎる」って言うのは、大抵「自分のスキルがまだ十分じゃない」から来ているんだよね。だけど、おそらくそれは、君がたくさんのルールで縛られた大きなプロジェクトに参加しようとしてるからじゃないかな。大きなプロジェクトではたくさんの貢献者を管理するため、決められた手続きが必要だ。コントリビューション・ガイドラインやコードカバレッジ、AUTHEORSとCHANGELOGファイルの更新とか... だけど、それが時に新入りにとって障壁となってしまうんだ。もしこれらの手続きが君を不安にさせているんだったら、提案がある。小さな事から始めよう!小さなプロジェクトは大抵そんなめんどくさい手続きとか必要としてないよ。それに、誰かをとても気分良くしてあげるということを体感できる。考えてみて、Python は日々たっくさんのパッチを受け取ってる。でも、もし君が小さなツールを書いて GitHub に上げたとして、そして、ある日突然メールを受け取るんだ。「おい、誰かが君のためパッチを書いたよ」ってね、それはとっても気分のいい事だって断言できるよ。

基本の「き」

GitHubオープンソースプロジェクトに参加するとき、多くのプロジェクトが取り入れているとても基本的なワークフローがあるんだ。それはこの3つステップ:フォーク(fork),コミット(commit),プルリクエスト(pull request)だ。

GitHubでのフォークはとても簡単。どれかのプロジェクトページにある「フォーク」ボタンをクリックするだけ。じゃあ、ためしに Ruby でやってみよう。 プロジェクトのページはここだよ。「フォーク」ボタンが右上に見えるよね。こんな感じで:

これをクリックすると、"hardcore forking action" とかなんとかメッセージが表示されるだろ、そしたら、フォーク完了さ。これは君だけのフォーク版プロジェクトで、君の GitHub のページにに現れるはずだよ。たとえば、ここに僕がフォークした Ruby がある。そのページにある URL で以下のようにクローンを作ることができるよ。*3

$ git clone git@github.com:steveklabnik/ruby.git

これを実行すると'ruby'ってディレクトリが作られて全てのコードがそこに格納される。次に、本家リポジトリの変更を追っかけるためのリモート追跡ブランチをを作ろう。

$ cd ruby
$ git remote add upstream https://github.com/ruby/ruby.git
$ git fetch upstream

これで、いつでも rebase で Ruby 本家リポジトリの変更を取り込むことが可能になったよ。

$ git rebase upstream/master

ココでちょっとした注意:ruby はまだ svn と git の両方を使ってる、そのため、master ブランチのことをtrunk と名付けている。もし君が rubyリポジトリに対してこれと同じことするときには、 git rebase upstream/trunk としなくちゃいけない。

これでクローンができたので、君は君の作業をすることができるようになった。僕は 機能ブランチ*4 で作業するのが好みだ。それはナイスでクリーンだし2つのフィーチャー(機能)を並行して進めることもできるしね。

$ git checkout -b feature/super-cool-feature
$ vim something
$ git add something
$ git commit -m "Fixed something in something"

もし、君の問題を解決したコミットができたら、それらを GitHub にプッシュしよう:

$ git push origin feature/super-cool-feature

そして、「プルリクエスト」ボタンをクリックしよう:

君のブランチを選択し、説明の内容を君が書きたいように変更したら準備OK。プロジェクトのメンテナはそれに目を通すだろう、そして、もしかしたら議論があってそこで終わり、かもしれないし、すぐさま受け入れてくれるかもしれない。

どのプロジェクトに参加すべきか?

プロジェクトに参加するときに一番良いのは、君が普段使っているプロジェクトに参加する事だよ。そうしたほうが、君も君自身の努力の成果を享受することができる。それに、そのプロジェクトについてよく知っていることがモチベーションにも繋がるし、きっと楽なはずだ。

もし、普段君が利用しているプロジェクトがどうなってるか良く知らない、または知りたくない、というなら、次の選択肢は、新しいソフトウェアを探すことだ! The Changelog(訳注:このサイトのこと) を逐次チェックして面白そうなプロジェクトを見つけよう。そして1〜2週間それを使ってみて、それから参加するかどうか決めたららいい。

僕らは一緒だ

この記事が君を勇気づけ、奮い立たせる助けになったらいいな、と思っている。どんな小さなパッチでも価値があるので、ぜひ、スケジュールに空きがあったらプロジェクトを選んでどんな小さなことでもいいから貢献してみてよ。気が付くつと夢中になってるかもよ。

*1:ネットに公開したあと本人に連絡してみるつもり。なんか文句言われたら(たぶん言わないと思うけど)公開中止するつもり

*2:訳注:原文では"two basic reasons"となってるのは間違い?

*3:訳注:自分のページに表示されるURLに読み替えてね

*4:訳注:トピック・ブランチとも呼んだりする。1つのテーマについて1つのブランチを切って作業するやりかた