C言語の安全性監査を自動化するツール「CSAF」
- ダウンロード商品¥ 4,980




# C言語の安全性監査を自動化するツール「CSAF」v1.1 **コードレビューで見落としがちな安全性リスクを、コマンド一発で検出。** MISRA準拠チェック・リスク分類・HTMLレポート生成まで、ローカル完結で動作します。 > 現役フリーランスCエンジニアが、現場の課題から作りました。 > 商用静的解析ツール(数十万円〜)の基本機能を、手の届く価格で。 --- ## こんな悩みありませんか? - コードレビューで安全性チェックが**属人的**になっている。レビュアーによって指摘のバラつきが大きい - MISRA準拠の確認を**目視**でやっていて、毎回時間がかかる - 修正したはずの指摘が**本当に改善されたのか**、定量的に追えない - 大規模コードベース(数万行〜)で**影響範囲の把握**に自信が持てない もし一つでも当てはまるなら、CSAFが役に立ちます。 --- ## CSAFが解決すること ### libclangによる正確なAST解析 ソースコードをテキストとして眺めるのではなく、**Clangの構文木(AST)を直接解析**します。 正規表現ベースのツールでは見逃すパターンも、ASTレベルで正確に検出します。 MISRA違反検出だけでなく、**仕様書との照合チェックもAST解析ベース**で行います。 コメント中の偶然の一致や記述スタイルの違いに惑わされません。 ### MISRA違反の自動検出 以下のルールを自動チェックします: | ルール | 内容 | リスクレベル | |--------|------|:----------:| | NULL_CHECK | ポインタのNULLチェック漏れ | A(致命的) | | UNINIT_VAR | 未初期化変数の使用 | A(致命的) | | ARRAY_BOUND | 配列境界チェック漏れ | A(致命的) | | UNSAFE_CAST | 危険な型キャスト | B(重要) | | RECURSION | 再帰関数の使用 | B(重要) | | GOTO | goto文の使用 | C(軽微) | v1.1では、NULLチェックの検出パターンを大幅に強化しました: - `if (p == NULL)` / `if (p != NULL)` — 従来の比較演算子 - `if (!p)` — 論理否定パターン - `p ? *p : -1` — **3項演算子内のガードも正しく認識** ### リスクA/B/Cの自動分類 指摘ごとに**関数の依存グラフ**を分析し、影響範囲に基づいてリスクレベルを自動分類します。 呼び出し頻度が高く下流に多くの関数がある箇所は自動的にリスクAに格上げされます。 ### 監査差分の比較 「前回の監査」と「今回の監査」を比較し、**改善された指摘・未修正の指摘・新規の指摘**を一覧表示。 修正の進捗を定量的に管理できます。 ### 仕様書との照合チェック Markdown形式の仕様書を用意すれば、**コードが仕様通りに実装されているか**を自動検証。 「NULLチェック必須」「戻り値は0か1のみ」といった仕様条件をパターンマッチで検査します。 ### 見やすいHTMLレポート - 危険度分布(A/B/C) - 指摘一覧(ID・ルール・ファイル・関数・リスク・メッセージ) - ファイル別統計 - 改善/未改善の推移 これらをHTMLレポートとして出力。チーム共有やレビュー資料にそのまま使えます。 ### 高速キャッシュ機構(v1.1 新機能) ファイルの更新日時(mtime)ベースのキャッシュを内蔵。**変更のないファイルはAST解析を完全スキップ**します。 150KLOC(約1,500ファイル)規模のコードベースでも、日々の監査は数秒で完了します。 --- ## 使い方 ### 基本の安全性監査 ```bash csaf init --repo ./src csaf audit --mode SAFETY --repo ./src csaf report --id A001 --format html ``` これだけで、`./src` 以下のCコードを解析し、HTMLレポートが生成されます。 ### 仕様準拠チェック ```bash csaf audit --mode SPEC --repo ./src --spec ./specs/init_system.md ``` 仕様書に記載された条件(NULLチェック必須、戻り値の制約など)との乖離を検出します。 ### 監査の差分比較 ```bash csaf audit --mode SAFETY --repo ./src # 修正前(A001) # ... コードを修正 ... csaf audit --mode SAFETY --repo ./src # 修正後(A002) csaf compare --base A001 --target A002 ``` 修正前後でどの指摘が解消され、どの指摘が残っているかを一目で確認できます。 --- ## 動作環境 - **OS**: Windows 10/11、macOS、Linux - **Python**: 3.11以上 - **必須ライブラリ**: libclang、networkx、Jinja2(自動インストールされます) - **APIキー**: 不要(すべてローカルで完結します) - **解析対象**: Cソースコード(.c / .h ファイル) --- ## 含まれるもの(zipの中身) ``` csaf-v1.1/ csaf/ # メインソースコード core/ # AST解析・MISRA検出・リスク分類エンジン storage/ # キャッシュ・監査結果管理 report/ # HTMLレポート生成 cli/ # CLIエントリーポイント models.py # データモデル定義 tests/ # テストコード(116件)・テスト用Cコードサンプル docs/ # ドキュメント pyproject.toml # パッケージ設定 setup.bat # Windowsセットアップ(ダブルクリック) setup.sh # macOS/Linuxセットアップ README.md # 使い方ガイド ``` --- ## セットアップ手順 ### Windows 1. zipファイルを解凍する 2. `setup.bat` をダブルクリック 3. セットアップが自動で完了する(Python 3.11+が必要です) 4. コマンドプロンプトで `csaf --help` を実行して動作確認 ### macOS / Linux ```bash unzip csaf-v1.1.zip cd csaf-v1.1 chmod +x setup.sh ./setup.sh csaf --help ``` 手動でセットアップする場合: ```bash python -m venv .venv source .venv/bin/activate # Windowsの場合: .venv\Scripts\activate pip install -e . csaf --help ``` --- ## 価格・注意事項 - **価格**: ¥4,980(ソースコード一式 + セットアップガイド) - **利用範囲**: 個人利用限定。社内チーム(5名以上)での利用は別途ご相談ください - **再配布**: 禁止(購入者本人のみ利用可能) - **APIキー**: 不要。すべてローカルで完結します - **サポート**: GitHubのIssues、またはメールにて対応 > 参考:商用の静的解析ツール(PC-lint, Polyspace, Coverityなど)は年間数十万円〜。 > CSAFは買い切り¥4,980で、ソースコード付き。自分のルールも追加できます。 ※ 返金について:デジタルコンテンツのため、ダウンロード後の返金は原則お受けしておりません。 --- ## FAQ ### Q. libclangのインストールが必要ですか? A. `pip install -e .` で自動的にインストールされます。別途Clangをインストールする必要はありません。Pythonバインディング(libclang)がPyPIから取得されます。 ### Q. 解析対象のコードはどこかに送信されますか? A. いいえ。CSAFは**完全にローカルで動作**します。外部APIへの通信は一切行いません。ソースコードが外部に漏れる心配はありません。 ### Q. 既存のCI/CDパイプラインに組み込めますか? A. はい。CLIツールとして動作するため、GitHub ActionsやJenkinsなどのCI/CDに組み込めます。`csaf audit` コマンドの終了コードでリスクA検出時に失敗させる、といった運用が可能です。 ### Q. 対応していないMISRAルールを追加できますか? A. ソースコードが含まれているため、`csaf/core/misra_engine.py` にルールを追加することで拡張可能です。各ルールは独立した検出関数として実装されており、新規ルールの追加が容易な設計になっています。 ### Q. 大規模コードベースでも速度は大丈夫ですか? A. v1.1でmtimeベースのキャッシュを実装しました。初回は全ファイルを解析しますが、2回目以降は変更があったファイルのみを再解析します。150KLOC規模でも日常の監査は数秒で完了します。 ### Q. テストはどのくらいありますか? A. 116件の自動テスト(ユニットテスト + E2Eテスト)が全てパスしています。ソースコードに含まれているので、ご自身で `pytest tests/ -v` で確認できます。



