先日、会社ブログでこんな記事を書きました。
記事冒頭にも書かれているとおり、最近の私は社内プロダクトの OSS 化を推進する活動をしています。
昔から仕事の技術や成果はプライベートにも導入するようにしているので、個人プロジェクトにも取り入れ始めました。
1. Community Standards にできるだけ従った
Community Standards はプライベートリポジトリの Insights タブから辿れます。
例: https://github.com/masutaka/github-nippou/community
GitHub は彼らが作った「オープンソースガイドライン 」を、奨励される Community Standards(コミュニティ基準)だと定義しており、以下のチェックリストの完了を促しています。
🔗 パブリックリポジトリのコミュニティプロフィールについて - GitHub Docs
- Description
- README
- Code of conduct
- Contributing
- License
- Security policy
- Issue templates
- Pull request template
README.md や LICENSE.md は普通に作っていましたが、活発でもない個人プロジェクトで CODE_OF_CONDUCT.md, CONTRIBUTING.md, SECURITY.md をどこまで真面目に作るかは悩みどころです。
2. 利用パッケージのライセンスを継続的に監視した
FOSSA という、利用パッケージのライセンスを継続的に監視する SaaS を導入し、ささやかなバッジを付けました。バッジのリンク先は、誰でも閲覧できる FOSSA のダッシュボードになっています。
例: https://github.com/masutaka/github-nippou/tree/v4.2.31
FOSSA は無料プランだと、ライセンスの問題を表面化する依存の深さが 5 までという制限はありますが、取りあえず導入して概要を把握することが出来ます。
3. Private vulnerability reporting を有効にした
GitHub にはセキュリティの脆弱性を、パブリックリポジトリの所有者や管理者に非公開で報告できる Private vulnerability reporting という仕組みがあります。
🔗 セキュリティの脆弱性を非公開で報告する - GitHub Docs
Settings タブの Code security から、Private vulnerability reporting
を有効にすると、Security タブの Advisories に New draft security advisory
というボタンが現れ、ユーザーは非公開で報告できます。
SECURITY.md から誘導するケースが多いようなので、そのようにしました。
例: https://github.com/masutaka/github-nippou/blob/v4.2.31/SECURITY.md
参考: リポジトリ セキュリティ アドバイザリについて - GitHub Docs
4. GitHub Advanced Security を有効にした
GitHub には Advanced Security (GHAS) という、追加のセキュリティ機能があります。
🔗 GitHub Advanced Security について - GitHub Docs
- Code scanning
- CodeQL CLI
- Secret scanning
- カスタム自動トリアージ ルール
- 依存関係の確認
このうち、Code scanning と Secret scanning について、有効にしました。
Code scanning
Settings タブの Code security から、Code scanning
を設定すると、デフォルトではプッシュ単位やスケジュールで CodeQL を実行し、セキュリティの脆弱性とコーディングエラーを見つけることができます。
参考: コード スキャンについて - GitHub Docs
デフォルトだと、関係のないファイルのプッシュでも実行され、CI で常に待ちが発生するため、それを避ける reusable workflow route06/actions/.github/workflows/codeql.yml を使っています。
使用例:
Secret scanning
Settings タブの Code security から、Secret scanning(シークレット スキャン)
と Push protection(プッシュ保護)
を有効化しました。
🔗 シークレット スキャンについて - GitHub Docs
シークレット スキャンは、API キー、パスワード、トークン、その他のシークレットなどの機密情報がリポジトリに誤って含まれることを検出して防止するセキュリティ機能です。シークレット スキャンを有効にすると、リポジトリ内のコミットをスキャンして既知のタイプのシークレットを検出し、検出時にリポジトリ管理者に警告します。
コミットされた後にシークレットを検出する secret scanning とは異なり、プッシュ保護は、プッシュ プロセス中にコードでシークレットを事前にスキャンし、何かが検出された場合はプッシュをブロックします。
まとめ
会社での OSS 関連の取り組みを、個人プロジェクトにも取り入れ始めました。
個人プロジェクトで特に Community Standards にしっかり取り組む必要はないかもしれませんが、逆にオーバーに取り組めるのも個人プロジェクトの醍醐味です(?)
以上、近況も兼ねた OSS 関連の取り組みの紹介でした。