onioncry について
OnionCry は、JavaScript と TypeScript のリポジトリでアーキテクチャ境界を検査するツールです。依存ルールを確認する開発者向けに、ファイル単位の診断や依存グラフ、エージェントやコードスキャン用の出力形式を提供します。
主な機能
- 01アーキテクチャルールに基づくファイル検査
- 02ファイル分類、インポート、違反内容の説明
- 03境界依存グラフの描画
- 04JSON、SARIF などの形式で出力
- 05ベースラインによる既存違反の追跡
活用シーン
- 01アーキテクチャ境界違反の検査
- 02特定ファイルの依存問題の診断
- 03プロジェクトの境界トポロジー確認
- 04既存リポジトリでの段階的な導入
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ marcioaltoe/ skills --skill onioncryインストール後、Claude Code で/onioncryを入力して読み込まれたか確認します。
詳細
OnionCry
JavaScript および TypeScript リポジトリのアーキテクチャ境界チェッカーとして OnionCry を使用します。決定論的な検証ツールとして扱い、対象のリポジトリから実行して出力を確認し、報告された境界の問題を解決するために必要最小限のアーキテクチャまたは設定の変更を行います。
このスキルでは、公開されている v0.1.0 のコマンド仕様を説明します。OnionCry リポジトリ内の .agents/skills/onioncry/ にある内容が正本であり、CLI の動作が変わるたびに更新する必要があります。
利用方法
対象プロジェクトで既に使われている方法を選びます。
bunx onioncry --help # ad-hoc, no install (npx works too)
bun add -d onioncry # per-project devDependency
cargo install onioncry # global binary from crates.io
npm パッケージは optionalDependencies を介して、マシンに一致するプラットフォーム用バイナリのみをインストールします。postinstall スクリプトはありません。
コマンド
すべてのサブコマンドで --help を使用できます。
| コマンド | 目的 | 主なフラグ |
|---|---|---|
check | 設定されたファイル全体をアーキテクチャルールに照らして確認する | --format pretty|json|sarif、--fail-on error|warning、--llm-mode、--tips、--files <PATH>...、--baseline <PATH>、--write-baseline、--no-baseline、--config |
explain <FILE> | 1 つのファイルの分類、インポート、違反内容を説明する | --format pretty|json、--tips、--config |
graph | 境界の依存関係グラフを表示する | --format mermaid|json、--config |
rules | 組み込みルールを一覧表示する | --format pretty|json |
schema | .onioncryrc JSON Schema を出力する | --write <PATH> |
init | 保守的な .onioncryrc.jsonc テンプレートを作成する | --force、--from-tsconfig [<PATH>] |
--files はレポートの対象を指定したファイルに絞ります。分析はプロジェクト全体を対象とします。
終了コード
終了コードの仕様は公開 API です。
0— 設定されたしきい値では問題なし(--fail-onのデフォルトはerrorのため、警告だけの場合は終了コード 0 になります)1—--fail-onのしきい値以上の違反があります2— 運用上のエラー(設定がない、使用方法が正しくないなど)。アーキテクチャ診断を解釈する前に修正してください
ワークフロー
- CLI が利用できることを確認します:
onioncry --help(またはbunx onioncry --help)。 - 対象のリポジトリに設定ファイルがない場合は、リポジトリのルートで
onioncry initを実行して作成します。チェックを実行する前に.onioncryrc.jsoncを確認してください。--forceは、既存の設定を上書きすることをユーザーが明示的に希望している場合にのみ使用します。パスエイリアスを使用する TypeScript プロジェクトでは、onioncry init --from-tsconfigを実行すると、確認用にcompilerOptions.pathsから aliases ブロックが生成されます。 onioncry checkを実行します。- エージェントが読み取りやすい出力には、
onioncry check --llm-modeまたはonioncry check --format jsonを使用してください。コードスキャンとの統合には--format sarifを使用します。 - 1 つのファイルを診断するには、
onioncry explain <file>を使用します(--format jsonまたは--tipsを追加できます)。境界のトポロジーを確認するには、onioncry graphを使用します。 - アーキテクチャ、インポート、パス、または設定を変更した後は、問題を検出した OnionCry コマンドを再実行します。
llm-mode レポート
check --llm-mode は、サマリーヘッダー(status、filesChecked、problemCount、errorCount、warningCount、groupCount)に続いて診断グループを出力します。各グループには rule、severity、message、why、tip、locations が含まれます。レポートの末尾には、バージョン付きのフッターが出力されます:
onioncry-llm-report v1 revision: <hash>
フッターはレポートが完全であることを示すマーカーとして扱ってください。フッターがない場合、レポートは途中で切り詰められています。フッターのバージョンは公開仕様です。
違反のベースライン(レガシーリポジトリへの OnionCry 導入)
ベースラインによって既存の負債を許容し、新たな違反は引き続き失敗として扱いながら、既知の違反をレビュー可能な成果物で追跡できます:
onioncry check --write-baseline # record current violations in .onioncry-baseline.json
onioncry check # consumes the baseline by default; only new debt fails
onioncry check --no-baseline # full, unfiltered architecture result
onioncry check --baseline <PATH> # use a baseline at a custom path
ベースラインの項目は rule + file + target でフィンガープリント化されます(行番号や列番号は含まれないため、通常の編集では項目が無効になりません)。古くなった項目、つまり現在の違反に一致しないベースライン項目がある場合は、--write-baseline を付けて再実行するよう促す、ブロックされない stderr 警告が出力されます。ベースラインファイルをコミットし、時間をかけて縮小してください(ラチェット)。新しい違反を黙らせるために増やしてはいけません。
設定
- OnionCry はまず
.onioncryrc.jsoncを検索し、次に.onioncryrc.jsonを検索します。JSONC のコメントは公開仕様です。 - エイリアスの解決は設定で明示してください。tsconfig からエイリアスを導出する方法としてサポートされているのは
init --from-tsconfigです。コミットする前に、生成されたブロックを確認してください。 - パッケージごとに境界ルールが異なるモノレポでは、パッケージごとの設定を使用してください。
- Bun/Turbo ワークスペースでは、OnionCry を呼び出すパッケージスクリプトを追加し、ワークスペースランナーを使ってルートから実行します:
{
"scripts": {
"onioncry": "bunx onioncry check --llm-mode"
}
}
修正方針
- 診断が実際のアーキテクチャ違反を指摘している場合は、コードの境界を修正します。
- ルールのスコープ、エイリアス、またはパッケージ境界に誤りがある場合にのみ、
.onioncryrc.jsoncを修正します。 - Oxlint、TypeScript、Biome、および汎用的なフォーマットの問題を OnionCry の修正対象に含めないでください。OnionCry が担当するのはアーキテクチャ境界のチェックであり、JavaScript や TypeScript のすべてのルールではありません。
- ルールを抑制するより、コードを意図した依存関係の方向へ移動することを優先します。
- 違反のベースライン登録より、違反の修正を優先してください。
--write-baselineは導入時に使用するものであり、新たな負債を埋もれさせるためのものではありません。
注意事項
- 存在しないファイルを含め、設定された対象範囲外のパスに対して
explainを実行すると、layer: unclassifiedと終了コード 0 が返されます。「unclassified」という結果を信頼する前に、パスを確認してください。 - 終了コード 0 は、検出結果がゼロであることを意味しません。デフォルトの
--fail-on errorでは警告があっても成功します。レポートのwarningCountを確認するか、警告も失敗として扱う必要がある場合は--fail-on warningを指定して実行してください。
開発時のチェック
OnionCry 自体を変更する場合は、OnionCry リポジトリでプロジェクトの検証コマンドを実行します:
make verify
Rust の作業範囲を絞る場合は、そのリポジトリで次のより対象を限定したチェックを使用します:
cargo fmt --all -- --check
cargo check
cargo clippy --all-targets --all-features -- -D warnings
cargo test