OpenSSF Scorecard / ソースコードの守り方

Code-Review
変更が第三者にレビューされているか

最近のコミットが、作成者以外の目を通って入ったかを見るチェックです。1人で開発しているプロジェクトは構造的に点が上がらないため、低いことがそのまま品質の低さを意味するわけではありません。

何を見るチェックか

Scorecard は、直近のコミット(既定では最新30件程度)をさかのぼって、 それぞれが作成者以外のレビューを経て入ったかを確認します。

レビューされたとみなされるのは、たとえば次の場合です。

  • Pull Request 経由でマージされ、作成者以外が承認している
  • Gerrit などのレビュー基盤の記録が残っている
  • コミットメッセージにレビュー済みの記録がある

作成者本人が承認した Pull Request は、レビューとして数えられません。

レビューを経たコミットの割合がそのまま点になるので、 「ときどき直接コミットしている」プロジェクトは中間の点になります。

点が低いと何を意味するか

点が低いということは、変更が誰の目も通らずに入っている、という意味です。

これがリスクになるのは、次のような場合です。

  • メンテナーのアカウントが乗っ取られたとき、誰も気づかないまま悪意のあるコードが入る
  • 単純な間違いが、そのままリリースまで届く
  • 意図しない依存の追加や、権限の広い設定変更が見過ごされる

サプライチェーンの事故として実際に報告されているものの中には、 乗っ取られたアカウントから、レビューを経ずに小さな変更が入ったという形のものがあります。 このチェックはその経路を見ています。

一方、これは「コードの品質が低い」を意味しません。 テストが十分にあり、CI が厳格なら、レビューが無くても品質は保てます。

誤解しやすい点

1人で開発しているプロジェクトは、原理的に点が上がりません。

これが最大の注意点です。世の中で広く使われているライブラリの中には、 作者1人で長年きちんと保守されているものが多数あります。 そうしたプロジェクトでは、レビューする第三者が存在しないので、 このチェックは必然的に低くなります。品質とは別の話です。

他に、低く出やすいケース。

  • 自動更新ボットの PR を自分でマージしている。 Dependabot の PR を作者が承認してマージする形は、 「作成者以外の承認」の条件を満たさないことがあります。
  • GitHub 以外のレビュー基盤を使っている。 記録の形式が異なると拾えません。
  • squash マージで履歴が1つにまとまり、PR との紐付けが読めない。

Contributors の数と合わせて読むのが正しい使い方です。 1人プロジェクトだと分かっていれば、この点の低さは想定どおりということになります。

採用する側が確認すべきこと

  1. Contributors と一緒に見る。 関わっている人数が1人なら、この点が低いのは当然です。 人数がいるのに低い場合は、運用として直接コミットが行われている可能性があります。

  2. コミット履歴を実際に開く。 Merge pull request が並んでいるか、直接コミットが積まれているかを見ます。

  3. テストと CI の状況を合わせて見る。 レビューが無くても、CI-Tests が機能していれば、 壊れた変更はマージ前に止まります。

  4. 1人プロジェクトなら、その1人が止まったときのことを考える。 レビューの有無より、そのライブラリが更新されなくなったときに 自分たちが困るかのほうが実務的な論点です。 フォークして自前で保守できる規模かどうかを見ておくと安心です。

メンテナーなら何を改善できるか

複数人いる場合

  • Pull Request を必須にし、承認1人以上を設定する → Branch-Protection
  • 小さな変更でも直接コミットせず、PR を通す運用に揃える

1人で開発している場合

無理に点を上げる必要はありません。 このチェックは第三者の存在を前提にしており、1人では構造的に満たせません。

代わりに、次のことが実質的な効果を持ちます。

  • 自分でも PR を通す。 レビューにはならなくても、CI が必ず走る経路になります。
  • CI を厚くする。 テスト・型検査・静的解析を通す。 人の目の代わりを、機械にある程度させられます。 → CI-Tests / SAST
  • README に開発体制を書く。 「作者1人で保守しています」と書いてあれば、 採用する側は Code-Review の低さを正しく解釈できます。

あわせて読む