しかし Pull Request 上に現れるチェックは、よい形でチームの前に立ちはだかります。それも毎営業日。この Action は、ウェブのスキャナーとまったく同じ検出ルールをコミットごとに実行します — 自前の runner の中で。だから未公開のコードは、常に自分たちのマシンに留まります。
ここははっきり書く価値があります。セキュリティスキャナーをめぐる会話の多くが、まさにこの反論で止まるからです。
201 個の検出ルールを持つエンジンが runner へダウンロードされ、そこで実行されます。SaferICO へ返るのは深刻度ごとの件数と、ファイル名と行番号を伴うルール番号の一覧だけです — コードも、ソースを引用してしまう証拠文字列も、決して含まれません。テストスイートが送信リクエストの本文を走査し、直前にスキャンしたソースの断片が含まれていないことを確認します。
リポジトリが非公開で、まだ監査を受けていないチームにとって、「未公開のコントラクトを他社の API へ貼ってください」は会話が終わる場所です。自前の runner で走らせることは、その反論に反論するのではなく、消し去ることです。
現実のコードベースでは、エンジンが必要とする時間はそれをはるかに超えます。GitHub の runner はコアを 1 つ丸ごと使え、時間の上限もありません。だからコミット上で走るスキャンは縮小版ではなく、完全なスキャンです。
runner は実行のたびに現在のバージョンのエンジンを取得します。1 年前に固定したワークフローでも、今日受け取るのは今日の検出ルールです。
任意の最後のステップで SARIF をアップロードすると、指摘が GitHub の Security タブに現れ、diff にインラインで表示されます — 開発者が実際に読む場所です。
.github/workflows/ にファイルが 1 つ。runner は依存関係のツリーを一切引き込みません。自分の依存物をパイプラインへ持ち込むセキュリティツールは、自らの主張と矛盾しています。
ツール本体(スキャナー、各ダッシュボード、SAFI ワークスペース)のインターフェースは現時点では英語です。これらのページは、その中に入る前にすべてを日本語で説明するためにあります。
エンジンが報告する深刻度は、重大、高、中、低、情報です。既定は「高以上で失敗」です。
既存の指摘を片づけている段階ではしきい値を下げ、きれいになってから上げてください。
誰も通れない関門は 1 週間のうちに誰かが切ります — そして切られたチェックは、何も守りません。
検出ルール自体は /sfi-engine.js で公開されており、そこに隠すものはありません。
ここで販売しているのは、ライセンス、履歴、ビルドを止めるかどうかを決めるポリシー、そして組織全体の見取り図です。
.github/workflows/ にファイルを 1 つ。checkout し、sfi-ci.mjs を取得して実行し、必要なら SARIF をアップロードする。
アカウントの API キータブでキーを作り、リポジトリの secrets に追加してください。runner 自体は、実行する前に読み切れる 1 ファイルです: https://saferico.com/sfi-ci.mjs
設定した深刻度以上の指摘があればビルドは失敗します。プロセスの終了コードで実現しているので、何かを追加で解析する必要はありません。
同じ runner は、push の前に手元で確かめるために npx saferico scan ./contracts としてローカルでも実行できます。
コントラクトアドレスを貼り付ければ、リスクを取る前にオーナー権限、流動性、売却シミュレーションの結果が分かります。1 回ごとに少額の手数料がかかり、金額は署名の前に表示されます — どのプランでも、加入後は無制限に含まれます。