私は、専門技術習得のため、業務外でOSSの開発に携わっています。世界中のエンジニアで使われているプロジェクトの開発に携われたり、Googleなど有名企業のエンジニアからレビューを受けたりできることは、エンジニアの成長につながると思い、OSS開発を続けています。
私がコントリビュートしたプロジェクトは以下の通りです。
■Kubernetes
https://github.com/kubernetes/kubernetes/pull/115800
■Flutter
https://github.com/flutter/flutter/pull/116654
■scikit-learn
https://github.com/scikit-learn/scikit-learn/pull/25146
https://github.com/scikit-learn/scikit-learn/pull/25156
■Transformers
https://github.com/huggingface/transformers/pull/20084
■gatsby
https://github.com/gatsbyjs/gatsby/pull/37041
■Deno
https://github.com/denoland/deno/pull/16482
■Lighthouse (Chrome)
https://github.com/GoogleChrome/lighthouse/pull/14479
■Typescript-eslint
https://github.com/typescript-eslint/typescript-eslint/pull/5894
■Tauri
https://github.com/tauri-apps/tauri/pull/6025
以下が主なアドバイスになります!ぜひ参考になればと思います!
簡単なイシューを見つけるようにしてください(good first issueラベルがあるもの)
最初は、完了できる問題を見つける必要があります。そうしないと、問題に取り組むことができません。ご存じのとおり、あるプロジェクトを理解するには時間がかかるため、ロジックなどの難しいコードを実装する場合は、より多くの時間を費やす必要があります。
good first issueラベルがあるイシューに取り組むことをお勧めします。ただし、good first issueラベルがあるものは、すぐにアサインされます。イシューを見つける別の方法は、リポジトリごとに検索することです。時間もかかりますが、まだアサインされていないものが必ず見つかります。
プログラミング言語の選択肢を増やす
言語の選択を制限しないことも重要です。つまり、慣れていない言語のイシューを探すと選択肢が増えるということです。たとえば、私は Ruby に精通していますが、言語に関連する問題はほとんどありません。一方で、私は TypeScript があまり得意ではありませんが、上記のように、すでにいくつかの TypeScript のプロジェクトに貢献しています。
私の知る限り、フロントエンドの問題はロジックを必要とせず、通常は理解しやすいため、取り組むのが簡単です。さらに、フロントエンドの問題は、主に TypeScript と JavaScript で構成されており、言語の幅が少なく、ハードルが低いと思います。
コントリビューションガイドを読む
イシューを見つけたら、コントリビューションガイドを確認する必要があります。これは、各プロジェクトには特定のルールがあり、それに従う必要があるためです。ローカルでテストする方法、ブランチに名前を付ける方法などを注意深く確認してください。加えた変更をプッシュした後も、CIのテストをパスしているかなどに注意する必要があります。
よくコミュニケーションをとる
良好なコミュニケーションも重要なポイントです。周囲のサポートがない状態でイシューに取り組むため、OSS コミュニティに参加した直後に行き詰まってしまうことはよくあることです。レビュー担当者や問題を作成した人から、継続的または適切なサポートを受けられない可能性があります。このようなヘルプを受けるためには、参加したコミュニティがアクティブである必要があります。
結論
OSS コミュニティに参加することは、想像するほど難しくありません。皆さんも、多くのエンジニアが関わるプロジェクトでの実装を通じて、プログラミングスキルを磨いていけると思います。ここに書いたステップを踏んで、エンジニアスキルを伸ばしてください!
その他
本記事は、自分が書いた英語の記事を日本語に翻訳したものです。もしご興味あれば以下もご覧ください。