Skip to main content
大きな変更に着手する前に、まず Issue を作成してください。このページでは、開発環境のセットアップとプロジェクトの規約を説明します。詳細なガイドは、ソースリポジトリの CONTRIBUTING.md を参照してください。

実装前に提案する

CC Safety Net のスコープは明確です。コーディングエージェントによる、データ損失につながる意図しない誤操作を防ぐことに絞っています。汎用のセキュリティ強化ツールや攻撃防止ツールではありません。新しい検出ルール、コマンドの分類、アーキテクチャの変更、設定項目を実装する前に、Issue を作成して方針を相談してください。誤字の修正や、対処方法が明らかな小さなバグ修正は、そのままプルリクエストを送って構いません。

開発環境をセットアップする

  • Bun 1.4.0:ビルドとテストに必須のランタイムで、サポートされる唯一のパッケージマネージャーです(インストールガイド)。package.jsonpackageManager で固定しています。
  • Node.js 18 以降:ビルド成果物を実行するためのランタイムです。公開されている CLI やプラグインの実行に Bun は不要です。
  • Claude Code または OpenCode:プラグインをローカルで読み込んで動作を確認する場合にのみ必要です。プロジェクトのビルドやテストスイートの実行には不要です。
bun run check が唯一のゲートです。Biome の lint と format、TypeScript の型チェック、knip によるデッドコード検出、jscpd による重複検出、カバレッジ付きのテストスイート、カバレッジしきい値チェックを、この順に実行します。変更が一段落したら、個別のサブコマンドではなく、このコマンドを実行してください。プルリクエストを作成する前に、エラーなく完了することを確認してください。 作業中は、個別のコマンドも使えます。

ローカルプラグインをテストする

ビルドしてからローカルのプラグインを読み込むと、実際のブロックを試せます。
  • Claude Code:インストール済みの safety-net プラグインを無効にして Claude Code を終了し、リポジトリのルートで claude --plugin-dir . を実行します。
  • OpenCode~/.config/opencode/opencode.jsonplugin[] 配列を、ビルド済みの file://.../cc-safety-net/dist/index.js に向けます。競合を避けるため npm の cc-safety-net の項目を削除し、OpenCode を再起動します。/status を実行し、プラグイン名が dist と表示されることを確認します。
安全な除外専用 pathspec を使って、既知のブロックが働くことを確認します。git checkout -- ':(exclude,top)**' はブロックされなければなりません。保護が有効になっていない場合も、この pathspec はファイルを 1 つも選択しません。

コード規約に従う

スタイルガイド

  • 本当に組み合わせや再利用が必要な場合を除き、コードは 1 つの関数にまとめます。
  • trycatchany 型、else 節は避け、早期 return を使います。
  • for ループより配列メソッド(flatMapfiltermap)を優先します。filter には型ガードを使い、後続処理でも型推論が効くようにします。
  • let より const を優先し、再代入ではなく三項演算子か早期 return を使います。
  • 1 回しか使わない値は名前を付けずにインライン化し、不要な分割代入は避けます。

スコープを厳守する

このプロジェクトでは、過剰設計を避けてください。要求を満たす最小の変更を実装します。それ以上を追加する場合は、その追加で防げる具体的な失敗を示してください。チェックには、実際に反証できる条件が必要です。実データがない段階で、スキーマ、バリデーター、レジストリ、ハーネスを作らないでください。プロセスは、コードで強制する前に文書化してください。

Knip

knip.tsignoreIssues に項目を追加してはいけません。knip が未使用の export を報告した場合は、根本原因を修正します。本当に不要なコードは削除するか export を外し、テスト専用の export には /** @internal */ の JSDoc コメントを付けます(knip は --production モードで動作するため、テストファイルは対象外です)。barrel ファイルからは未使用の名前を削除します。

プルリクエストを準備する

  • コードが上記の規約に従っている。
  • bun run check がエラーなく完了する。
  • 新しいルールにテストを追加し、カバレッジが 90% 以上である。
  • 対応するエージェント(Codex、Claude Code、Gemini CLI、GitHub Copilot CLI、Kimi Code、Pi など)を 1 つ以上使い、ローカルで動作を確認している。全 13 種類はインストールページに記載しています。
  • 必要に応じてドキュメント(README.mdAGENTS.md)を更新している。
  • package.json のバージョンを変更していない。
バージョンの更新とリリースはメンテナーのみが行います。package.jsonplugin.json のバージョンを直接変更しないでください。

開発の支援を得る

  • bunx cc-safety-net doctor でセットアップを確認できます。
  • bunx cc-safety-net explain "<command>" を使うと、コマンドがどう解析されるかを段階ごとに確認できます。
  • アーキテクチャと規約はソースリポジトリの CLAUDE.md または AGENTS.md を参照し、コードをレビューする前に REVIEW.md を読んでください。
  • 実装パターンは src/analyzer/ の既存コードを、テスト用ユーティリティは tests/helpers.ts を参照してください。
  • バグの報告や機能の要望は Issue を作成してください。
最終更新日 2026年8月31日