ククログ

株式会社クリアコード > ククログ > OSS開発に参加する方法

OSS開発に参加する方法

こんにちは。7月にクリアコードに入社した藤田です。

クリアコードでは「フリーソフトウェアで稼ぐ」という理念をもとに、さまざまな活動がオープンになっており、 OSS開発もその一環です。

私が所属するチームは、Fluentdという拡張性の高いOSSのログ収集ソフトウェアを扱っています。 クリアコードに入社するとともに、新たなOSSに挑戦しております。

そこで、この記事では私なりのOSSに参加する方法についてご紹介したいと思います。 この内容に沿って作業されると、すぐにPull Requestを作成することができるかと思います。 それを足がかりにより大きな課題へ挑戦してみてください。

クリアコードでOSS開発

私が所属しているFluentdチームは、Fluentdの導入支援や運営サポートなどの エンタープライズサポートをベースに、Fluentdをオープンに開発しています。

我々の活動は https://github.com/fluent にて公開されており、誰でも参加することができます。 Fluentd本体の開発は https://github.com/fluent/fluentd のレポジトリで行われております。 私がチームに参加してまもなく作成したPull Requestもそちらで確認できます。

なぜOSS開発に参加するのか

現在のプロダクト開発は、さまざまなOSSに依存しながら行われています。 Webアプリはもちろんモバイル端末向けのアプリも、アプリの特色にあわせて使い分けられているかと思います。 多くのプロダクトで利用されているOSSであれば、さまざまなケースを考慮されて開発されています。

多くの人によって支えられているOSSでも、実際に利用するときには不具合が発生することがあります。 不具合に遭遇した際に問題を報告するだけでなく、修正することもできるのがOSSの醍醐味だと思っています。

OSSに参加する方法

ここから私が新たなOSSに参加するときに行っていることを紹介します。 私がRubyのコミュニティにいるため、Rubyに関連する内容が多くなっております。

いきなり難しいことに挑戦せず、最初はごく簡単なことから始めて徐々にどのような開発が行われているかを 理解していきステップアップすると良いと思います。

1. OSSの選定

世の中にはソフトウェアのコードがGitHubやGitLab上で公開されています。 最初は普段使っているOSSを対象に、

  • ドキュメントの説明が分かりにくい、ドキュメントの通りに動かない
  • 不具合を見つけたかもしれない
  • 使いにくい箇所を直したい

というような点があるかどうかで、貢献するOSSを選ぶと良いと思います。

2. ドキュメントに従って環境構築する

OSSには環境構築手順が書かれたドキュメントが付属していたりします。 ドキュメントに従って環境構築ができ、サンプルコードを動かすことができるか試します。

OSごとに環境構築手順が異なっている場合があり、メンテナーの方が普段使っていないであろうOSで まれに環境構築に失敗する場合があります。

運悪く失敗した場合は、貢献のチャンスです! どのOSでどういった手順でコマンドを実行してエラーが発生したかを報告しましょう。 OSや使用したツールのバージョンなど細かな情報もあわせて報告すると、メンテナーが問題を解決しやすくなります。

3. ドキュメントのtypoを修正する

OSSによっては、READMEのほかにAPIリファレンスなどのドキュメントが用意されている場合もあります。

注意深くドキュメントが書かれていてもスペルミスが入ることがあります。 そのため貢献するOSSを決めた後は、私はまずスペルチェックを行うことが多いです。

私が普段使っているRubyMineはデフォルトでスペルチェックができるので、これを活用しています。 スペルチェックであればRuby以外のプロジェクトでも使用できるので、ドキュメントを修正するためにRubyMineを起動することも多いです。

4. 開発版のRubyでテストを実行する

安定版のRubyでCIが実行されていることが多いですが、開発版のRubyでもCIを実行しているOSSは少ない印象です。

これまでdefaultで提供されていたgemが、開発版Rubyでbundled gemへ移行することがあります。 その際に、開発版Rubyでテストを実行すると以下のようなwarningが見つかったりすることがあります。

warning: logger was loaded from the standard library, but will no longer be part of the default gems starting from Ruby 3.5.0.

このwarningはいずれ対応しないと動かなくなる可能性があります。 別のwarningやエラーが見つかることもあるかもしれません。 見つけた場合は貢献するチャンスです! 修正が難しい場合は、issue報告することで貢献するのも良いでしょう。

5. rubocop-performance を手元で動かしてみる

Rubyは表現力が高く同じことを複数の書き方ができますが、パフォーマンスが結構違うことがあります。 書き方の違いでどの様なパフォーマンス差が出るかは、有志が https://github.com/fastruby/fast-ruby にまとめていたりします。

内容をひとつずつチェックするのが大変なので、rubocop-performanceを手元で動かしてみることをお勧めします。 OSSの挙動を変えずにパフォーマンスを向上させることができるかもしれません。 手元の環境でrubocop-performanceを導入できたら、数分程度で問題点が見つかることがあります。

(rubocop-performanceはパフォーマンスに関するチェックを行うrubocopのプラグインです。rubocopはRubyのコードをチェックし問題点を指摘してくれるツールです。)

注意点として、

  • rubocop-performance には https://github.com/fastruby/fast-ruby の内容が一部取り込まれていますが、全てではないはずです
  • rubocop-performance がすでに導入されているプロジェクトでは効果はありません

私がこれで見つけたものは https://github.com/fluent/fluentd/pull/4588 です。

OSS Gate東京ワークショップ

クリアコードではOSS Gate東京ワークショップの開催も行っています。 そこでは、これまでOSS開発に関わったことのない方向けに「OSS開発に参加する最初の一歩の支援」をしています。

次回開催は9月21日(土)です。

https://oss-gate.doorkeeper.jp/events/176469

皆様の参加をお待ちしています!