やってみた

1文字から始めるOSS(Open-source software)コミット!

みなさん、こんにちは。
ササテンです。

「エンジニアの生命線はエディタとキーボードだ!」ということで、最近自宅のキーボードを新調しました。エディタはVim派ですが、ほぼ全てのIDEにVimプラグインを導入して、Vimmerライフを満喫しております。

さて、お気に入りのエディタとキーボードがあったとして、あなたは何を書きますか?
というわけで、今回はOSSにコミットしてみようというお話です。

プロダクトはOSSでできている

みなさんは、OSSを使ったことありますか?
OSSは、オープンソースソフトウェアの略称です。IT業界のエンジニアであれば、使用経験がない人の方が少ないでしょう。

Node Packaged Modules(JS)やCocoaPods(iOS)など、パッケージマネージャで入手するライブラリやパッケージから、ApacheやNginxのようなミドルウェアに至るまで、OSSは世の中にたくあんあります。

今や、OSSを組み合わせることで、コストをかけずにプロダクトを構築するのが当たり前の時代になりました。

しかし、ふと疑問に思ったことはありませんか?
なぜ我々は、高機能なOSSを無料で使うことができるのでしょうか。

OSSを取り巻く背景

OSSは、世界各国のコントリビューター(貢献者)によって開発されています。それらは、GO言語(Google)のように企業が主導して開発している場合もあれば、個人のコントリビューターによって進められている場合もあります。

OSS文化は、IT業界における最も大きな特徴の一つです。OSS文化によって技術の利用が促進されたことで、IT業界は飛躍的な発展を遂げました。

もちろん、私もOSSを愛用しています。
しかしながら、その利益を享受し続けるだけで良いのでしょうか。

エンジニアであれば、与えられたものを使うだけでなく、作ってみたくもなりますよね。

さあ、OSSにコミットしようぜ!

OSSにコミットする方法

さて、OSSにコミットすると決めたものの、どうすれば良いのでしょうか?

実は、OSSにコミットする方法は難しくありません。現在のOSS開発は、多くがGitHub上で進められています。つまり、Gitにコミットし、GitHubでプルリクエストを発行すれば良いのです。

良いプルリクエストであれば、実際に取り込まれ、OSSのソースコードに反映されます。

OSSに貢献するための敷居を下げる

上記では、OSSにコミットすることは難しくないと述べました。
しかしながら、 あなたはこのように思っていませんか?

・ OSSに貢献したいけれど、コードを修正するのは怖い
・ 技術力が高くないとコミットすることはできない
・ 流暢な英語でプルリクエスト(コミット内容)を解説をしなければならない

確かに、OSSにコミットすることは怖いイメージがあります。
私も同じように感じています。

しかし、このまま引き下がってしまっては、せっかくの意気込みが無駄に終わってしまいます。そこで私は、敷居を極力下げてOSSコントリビューターとしてデビューするための方法を考えました。

ここからは、私がOSSコミッターになるべく現在進行系で取り組んでいる事例を、実際に送信したプルリクエストを元にご紹介します。

デモやサンプルプログラムを修正する

多くのライブラリには、デモやサンプルプログラムが付属しています。なぜデモやサンプルプログラムの修正がオススメかといいますと、これらは実際に使われるライブラリ本体ではないからです。

つまり、最悪何か問題があったとしても、大きな問題には発展しづらいプログラムになります。そのため、OSSコントリビューターとしてデビューを果たしたい身としては、大幅に敷居が下がります。

下記は、私がSwifter(Swift用のTwitterライブラリ)のデモプログラムのエラーを修正したプルリクエストです。Swifterのデモプログラムは、当時Swiftのバージョンアップによってエラーが発生している状況でした。

・Swifter
https://github.com/mattdonnelly/Swifter/pull/64

内容そのものは、Swiftの仕様変更(Optional型)に対応するためにたった一文字「?」を追加しただけですが、これもささやかながら立派なOSS貢献です。

ドキュメントを翻訳する

OSSのドキュメントの多くは、英語によって記述されています。しかし、世の中にはそれらを翻訳した日本語ドキュメントがたくさんありますよね。それらは、一人の力によって翻訳されていることもあれば、有志によって翻訳されていることもあります。

翻訳ドキュメントは、我々日本人にとって非常にありがたい存在でありながら、実際にプログラムを書くわけではありませんので、貢献するための敷居は高くありません。

また、ライブラリ解説用のドキュメントの場合、主役はプログラムであり、特殊な英語が使われる場面は多くありません。エンジニアであれば理解できるような単語も多く使われており、辞書片手に翻訳すれば、コミットすることができます。

下記は、私がFuelPHPの翻訳に参加した時のプルリクエストです。日本語にローカライズするための翻訳プロジェクトでは、プルリクエストに日本語が使えるのも大きいですね。

・FuelPHP_docs_jp
https://github.com/NEKOGET/FuelPHP_docs_jp/pull/604

(実際に私が送信したプルリクエストは、旧バージョン用のFuelPHPドキュメントだったため、あまり役立たなかった感はありますが。。まあ、それはそれということで)

自分で書く

OSSに貢献する方法は、既にあるOSSにコミットするだけではありません。自分で新規にOSSを開発することもできます。例えば「Software Design 2017年10月号」には、世の中に貢献したいからVulsをOSSで開発したという記事が掲載されています。

自分で書いたライブラリであっても、GitHubにアップロードしたりNode Packaged Modules(JS)やCocoaPods(iOS)のようなパッケージマネージャに登録すれば、色々な人が使えるOSSライブラリになります。

取り込まれなかったり失敗しても気にしない

OSSにコミットしたとしても、それらがすべて採用されるとは限りません。バグがあれば取り込まれないですし、却下されることだってあります。

下記は、私がプルリクエストを送信したものの、採用されなかった例です。

・php-mime-mail-parser
https://github.com/php-mime-mail-parser/php-mime-mail-parser/pull/154

経緯としては、README.mdのプログラムをコピーして動かしてみたものの、エラーが発生したためサンプルプログラムを修正し、プルリクエストを発行しました。

プルリクエストは問題があり採用されませんでしたが、理由を優しく説明してくれましたので、むしろ感動しましたし、送信して良かったと思っています。

最後にひとつだけOSSコントリビューターとしてデビューするためのポイントをあげるならば、プルリクエストを歓迎しているOSSを選択するオススメします。例えばphp-mime-mail-parserでは、README.mdに「コントリビュートを歓迎します!」と記載されています。

Can I contribute?
Feel free to contribute!

https://github.com/php-mime-mail-parser/php-mime-mail-parser#can-i-contribute

README.mdには、コントリビュートする際の注意事項が書いてある場合もあります。マナーに沿ったプルリクエストを出すようにしましょう。

また、開発があまり活発でないOSSの場合、プルリクエストを出してもなかなか見てもらえないことがあります。特に個人で開発しているOSSの場合は、開発者が多忙でプルリクエストを処理できないことも往々にしてあります。気長に待ちましょう。

まとめ

「OSSを使うだけじゃなくて貢献もしたい!」という欲求を発端にして、私はささやかながらOSSコントリビューターとしての第一歩を踏み出す事ができました。

まだ、OSSのほんの一端にコミットしたにすぎません。しかし、このような積み重ねによってOSSはより良いものになっていくのです。

ぜひ、私と一緒にOSS貢献への第一歩を踏み出してみませんか?

次回はコウダインテより「何気によく使うSQL集」をお届けます。

引用元・出典
Software Design 2017年10月号

LINEで送る
Pocket

この記事を書いた人・プロフィール
ササテン
ニックネーム: ササテン

前職の会社が倒産したことを機に入社。初めて業務で使用した言語は Perlでした。Perl の精神である「There's More Than One Way To Do It.(やり方は何通りもある)」が気に入っていて、自由度の高いプログラミングスタイルが好きです。

趣味:ゲーム、将棋、麻雀