DUICUO

オープンソースプロジェクトを見つけてすぐに始める方法

興味のあるオープンソースプロジェクトを見つける方法

最初のステップは、オープンソースを作成する目的を明確にすることです。

  • コミュニティの専門家のコードを参照してスキルを向上させましょう。
  • 履歴書を充実させ、面接の成功率を高めましょう

もっと実際的に言えば、特定のプロジェクトのコミッター/PMC になることです。

  • 私はただ共有することを楽しんでいます。オープンソースが大好きで、オープンソースが世界を変えると信じています💪。

最初の 3 つのタイプはすべて同じ目標、つまり自分自身を向上し、それに伴う利益を得ること、最後のタイプは純粋に情熱から生まれるものであると私は考えています。

個人的には、私は両方に少し当てはまります。ほとんどの人は最初の 3 つのカテゴリの目標を持っていると思うので、まずはそれに冷水をかけなければならないかもしれません。

多くの場合、オープンソース プロジェクトに慣れてから最初の PR を送信し、それをマージするまでにかかる時間は、予想よりもはるかに長くなることがあります。

特に、プロジェクトがより大規模で専門的であればあるほど(あなたもこのようなよく知られたプロジェクトに参加したいと思うでしょう)。

なぜなら、ほとんどのオープンソース コミュニティは、インスタント メッセージの迅速なフィードバックとは異なり、非同期通信を実行し、多くのレビュー担当者が異なるタイム ゾーンに存在しているからです。

ですから、最初から現実的な期待を持つべきです。私がプロジェクトにすごくクールな機能を提出したからといって、すぐにレビューされてマージされ、コミット権限が与えられるなどと期待しないでください。

さらに、Pulsar、Golang、Kafka など、多くのオープンソース プロジェクトは単一の企業によって主導されています。外部コミュニティからの新規参入者に対してあまり配慮が見られない場合があり、PR が何ヶ月も放置されて対応されないことも珍しくありません。

したがって、最初にプロジェクトを選択するときは、次の選択基準を使用することをお勧めします。

  • 日常生活で使用し、慣れているプロジェクトを選択するようにしてください。
  • 最近更新され、メンテナンスされたプロジェクトがあります。
  • コミュニティは新参者を十分に受け入れ、寛容ですか?
  • この情報は、GitHub の問題または、help、want、または contribution のタグが付けられたプル リクエストで見つかります。
  • これらの問題/PR の最近のアクティビティ時間をチェックして、貢献者が新規かどうかを確認します。
  • 包括度の高いプロジェクトでは、上記の情報が非常に活発に作用することが多いです。
  • プロジェクトの主なメンテナーは複数の企業に所属しており、十分にアクティブですか?

写真

写真

先ほど述べた基準に最も適合すると思われるプロジェクトをいくつか紹介します。

  • https://github.com/open-telemetry/opentelemetry-java-instrumentation/issues/7195
  • https://github.com/apache/pulsar-client-go/issues?q=is%3Aopen+label%3Atype%2Ffeature+sort%3Aupdated-desc
  • https://github.com/apache/hertzbeat/

オープンソースプロジェクトをすぐに始める方法

貢献したいプロジェクトを見つけたが、まだよく知らない場合は、次の手順を試してすぐに始めることができます。

ユニットテスト

まず最初にユニットテストです。ユニットテストは新しいオープンソースプロジェクトを始めるのに最適な方法ですが、重要なのは既存のユニットテストを見るのではなく、独自のユニットテストを作成することです✍️。

ユニットテストを書いたことがある人なら誰でも、90%以上のカバレッジを達成するには、記述するコードのすべての行を理解する必要があることをご存知でしょう。場合によっては、コードの作成中に不要なコードが見つかることもあり、ビジネスロジックを再検討するのに役立ちます。

したがって、ユニットテストを書くことは確かにプロジェクトに慣れるための迅速な方法ですが、これは単純なロジックを持つプロジェクトにのみ適しています。複雑なビジネスロジックを持つプロジェクトの場合は、公式に推奨されている機能の1つを簡単に実行することをお勧めします。

パルサーを例に挙げましょう

Apache Pulsarを例に挙げましょう。まずはメッセージプロデューサーとコンシューマーのデモを実行してみましょう。正常に実行されたら、既存のクライアントユニットテストコードを確認し、アサーションをいくつか変更してみてください。この時点で、期待値がなぜそのように定義されているのかがわかるでしょう。 [https://github.com/apache/pulsar/blob/631b13ad23d7e48c6e82d38f97c23d129062cb7c/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java#L1077](https://github.com/apache/pulsar/blob/631b13ad23d7e48c6e82d38f97c23d129062cb7c/pulsar-broker/src/test/java/org/apache/pulsar/client/impl/BrokerClientIntegrationTest.java#L1077)

写真

写真

例えば、ここでコンシューマーがサブスクリプションを2回キャンセルすると、例外がスローされます。この時点で、ソースコード内で例外に基づいて接続状態を判断する条件を見つけることができます。

これは、クライアントが登録解除すると接続状態が変更されることを示しています。

ヘルツビート

当時私がどのようにユニット テストに貢献したかを確認するために、Apache HertzBeat を例に挙げてみましょう。

写真

公式のアーキテクチャ図によると、HertzBeat はコレクターを使用してターゲットに直接接続し、データを収集します。

たとえば、Redis クライアントを使用して監視データを取得し、それを独自の時系列データベースに保存して表示することができます。

したがって、このデータ収集プロセスはコアロジックであり、そのインターフェース定義を見ることができます。

写真

インターフェースは全部で 3 つだけです。

  • 収集インターフェイスは、メトリック セクションで収集されるターゲット情報 (アドレス、ポートなど) を定義します。
  • データ収集後、データはその後の保存のためにビルダーに書き込まれます。
  • preCheck: 事前にいくつかのパラメータチェックを実行します。
  • supportProtocol: 対応するコレクターを見つけるために使用される、定義されたプロトコル タイプを返します。

写真

次に、異なるメトリックを収集するために、異なる実装クラスが割り当てられます。

ここではRedisCommonCollectImplを例に挙げます。メインのユニットテストロジックは、Redisクライアントの戻りデータをシミュレートし、Collectコード内の異なる処理ロジックを確認することです。実際には、様々な分岐や例外状況をカバーすることを目的としています。

最後に、収集されたデータが期待値と一致するかどうかをアサートします。コアロジックの抜粋を以下に示します。

写真

どのような結果が返されるべきかについては、一部のコレクターではコードコメントでこれを指定する場合があります。ただし、Redis では指定しません。

ただし、方法はあります。コードをローカルで実行し、管理コンソールにアクセスして組み込みの監視テンプレートを表示することができます。

写真

ここで監視するフィールドを定義するため、コード内で予想される戻り値を事前に生成できます。

写真

具体的な単体テスト コードは、次の場所にあります: https://github.com/apache/hertzbeat/blob/master/collector/src/test/java/org/apache/hertzbeat/collector/collect/redis/RedisClusterCollectImplTest.java#L46

要約

確立されたオープンソース コミュニティに参加する際に覚えておくべきことの 1 つは、貢献者向けドキュメントを注意深く読むことです。

多くの場合、コードのビルド方法、コードスタイルガイドライン、コミットガイドラインが明確に説明されています。これらが明確化されると、提出されたPRがコミュニティに受け入れられる可能性が高まります。

統合テストとe2eテストに関するコンテンツは今後も更新していきます。