Cycode について
Cycode CLIは、シークレット、IaCの設定ミス、ソフトウェア構成上の脆弱性、静的解析の問題をリポジトリから検出します。ローカルスキャンや、Gitのコミット・プッシュに連動する検査を利用したい開発チーム向けです。
主な機能
- 01シークレット、IaC、SCA、SASTのスキャン
- 02リポジトリ、パス、履歴のスキャン
- 03コミット前・プッシュ前フック
- 04SBOMレポートの生成
- 05AI連携用MCPサーバー
活用シーン
- 01リリース前のリポジトリスキャン
- 02コミット前のステージ済み変更の確認
- 03プッシュ前のコミットスキャン
- 04SBOMレポートの生成
MCP 対応
CLIはCycodeのスキャン機能をAI連携に利用するMCPサーバーを起動できます。READMEには個別のツールの詳細は記載されていません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
5掲載時のツール一覧 · 2 週間前に更新
このツールにパラメーターはありません。
詳細
Cycode CLI ユーザーガイド
Cycode コマンドラインインターフェース(CLI)は、ローカルにインストールして、リポジトリ内のシークレット、Infrastructure as Code の設定ミス、ソフトウェアコンポジション解析の脆弱性、静的アプリケーションセキュリティテストの問題をスキャンできるアプリケーションです。
このガイドでは、インストールと使用方法の両方を説明します。
目次
- 前提条件
- インストール
- Cycode CLI コマンド
- 証明書とプロキシ
- MCP コマンド
- Platform コマンド
- AI ガードレール
- Scan コマンド
- Report コマンド
- Import コマンド
- スキャンログ
- 構文ヘルプ
前提条件
- Cycode CLI アプリケーションには、Python バージョン 3.10 以降が必要です。
- CLI で Cycode に認証するには、
cycode authコマンドを使用します。- または、サービスアカウントトークンと個人アクセストークンのページに記載されている手順に従って、Cycode のクライアント ID とクライアントシークレットキーを取得することもできます。これらのページには、各値の取得方法が記載されています。
インストール
以下のインストール手順は、Windows と UNIX / Linux の両方のオペレーティングシステムで使用できます。
メモ
以下の手順では、Python 関連のコマンドに
python3とpip3を使用することを想定しています。ただし、Python 環境の設定によっては、一部のシステムでpythonコマンドとpipコマンドを使用する場合があります。
Cycode CLI をインストールする
ローカルマシンに Cycode CLI アプリケーションをインストールするには、以下の手順を実行します。
-
コマンドラインまたはターミナルアプリケーションを開きます。
-
次のいずれかのコマンドを実行します。
-
PyPI からインストールするには:
pip3 install cycode -
Homebrew からインストールするには:
brew install cycode -
GitHub Releases からインストールするには、移動して、お使いのオペレーティングシステムとアーキテクチャに対応する実行ファイルをダウンロードし、次のコマンドを実行します。
cd /path/to/downloaded/cycode-cli chmod +x cycode ./cycode -
-
最後に、CLI を認証します。Cycode のクライアント ID と認証情報(クライアントシークレットまたは OIDC ID トークン)を設定する方法は3つあります。
- cycode auth(推奨)
- cycode configure
- 環境変数に追加する
Auth コマンドを使用する
メモ
これは、ローカルマシンを設定して Cycode CLI で認証するための推奨方法です。
-
ターミナルまたはコマンドラインのウィンドウに次のコマンドを入力します。
cycode auth -
ブラウザーウィンドウが表示され、Cycode へのログインを求められます(以下を参照)。
-
このページでログイン認証情報を入力してログインします。
-
最終的に以下のページが表示され、Cycode の認証に使用するビジネスグループを選択するよう求められます(該当する場合)。
メモ
Cycode CLI での認証には、これがデフォルトの方法として使用されます。
-
Allow ボタンをクリックして、選択したビジネスグループで Cycode CLI を認証します。
-
選択が正常に完了すると、次の画面が表示されます。
-
ブラウザーウィンドウを閉じると、ターミナルまたはコマンドラインの画面に次のように表示されます。
Successfully logged into cycode
Configure コマンドを使用する
メモ
Linux または Windows の環境変数を通じて Cycode Client ID と Client Secret をすでに設定している場合は、これらの認証情報がこの方法より優先されます。
-
ターミナル/コマンドラインウィンドウに次のコマンドを入力します。
cycode configure -
Cycode API URL の値を入力します(デフォルト値を使用する場合は空欄のままにできます)。
Cycode API URL [https://api.cycode.com]: https://api.onpremise.com -
Cycode APP URL の値を入力します(デフォルト値を使用する場合は空欄のままにできます)。
Cycode APP URL [https://app.cycode.com]: https://app.onpremise.com -
Cycode Client ID の値を入力します。
Cycode Client ID []: 7fe5346b-xxxx-xxxx-xxxx-55157625c72d -
Cycode Client Secret の値を入力します(OIDC ID トークンを使用する場合は省略します)。
Cycode Client Secret []: c1e24929-xxxx-xxxx-xxxx-8b08c1839a2e -
Cycode OIDC ID Token の値を入力します(任意)。
Cycode ID Token []: eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9... -
値が正常に入力されると、次のメッセージが表示されます。
Successfully configured CLI credentials!または
Successfully configured Cycode URLs!
ユーザーフォルダー内の .cycode フォルダーを開くと、認証情報が作成され、そのフォルダー内の credentials.yaml ファイルに保存されています。
URL はそのフォルダー内の config.yaml ファイルに保存されています。
環境変数に追加する
Unix/Linux の場合:
export CYCODE_CLIENT_ID={your Cycode ID}
および
export CYCODE_CLIENT_SECRET={your Cycode Secret Key}
組織で OIDC 認証を使用している場合は、代わりに(または追加で)ID トークンを指定できます。
export CYCODE_ID_TOKEN={your Cycode OIDC ID token}
Windows の場合
-
コントロールパネルから、システムメニューに移動します。
-
次に、「システムの詳細設定」をクリックします。
-
開いた「システムのプロパティ」ウィンドウで、「環境変数」ボタンをクリックします。
-
CYCODE_CLIENT_IDとCYCODE_CLIENT_SECRETの変数を作成し、それぞれ ID と Secret Key に対応する値を設定します。OIDC で認証する場合は、OIDC ID トークンの値を指定したCYCODE_ID_TOKENも追加します。
-
インストールを完了するには、
cycode.exeをパスに追加します。
Pre-Commit フックをインストールする
Cycode の pre-commit フックと pre-push フックは、ローカルリポジトリ内で設定できます。これにより、Cycode CLI アプリケーションが、コードをコードベースにコミットまたはプッシュする前に問題を自動的に検出します。
メモ
pre-commit フックと pre-push フックは、IaC スキャンでは利用できません。
pre-commit フックをインストールするには、次の手順を実行します。
Pre-Commit フックのインストール
-
pre-commit フレームワークをインストールします(Python 3.10 以降がインストールされている必要があります)。
pip3 install pre-commit -
設定するローカル Git リポジトリのトップディレクトリに移動します。
-
リポジトリのトップディレクトリに、次の内容を含む
.pre-commit-config.yamlという名前の新しい YAML ファイルを作成します(先頭の.も含めます)。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode stages: [pre-commit] -
作成したファイルをニーズに合わせて変更します。Secrets のスキャンを有効にするには、フック ID
cycodeを使用します。SCA スキャンを有効にするには、フック IDcycode-scaを使用します。SAST スキャンを有効にするには、フック IDcycode-sastを使用します。すべてのスキャンタイプを有効にする場合は、次の設定を使用します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode stages: [pre-commit] - id: cycode-sca stages: [pre-commit] - id: cycode-sast stages: [pre-commit] -
Cycode のフックをインストールします。
pre-commit installフックが正常にインストールされると、メッセージ
Pre-commit installed at .git/hooks/pre-commitが表示されます。 -
pre-commit フックを最新の状態に保ちます。
pre-commit autoupdate.pre-commit-config.yamlのrevが、Cycode CLI の最新の利用可能なバージョンに自動的に更新されます。
メモ
git commitコマンドの実行時にトリガーされます。 コミット対象としてステージングされたファイルのみがフックの対象になります。
Pre-Push フックのインストール
pre-commit フックに加えて、またはその代わりに pre-push フックをインストールするには、次の手順に従います。
-
.pre-commit-config.yamlファイルに pre-push フックを追加します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode-pre-push stages: [pre-push] -
pre-push フックをインストールします。
pre-commit install --hook-type pre-push -
pre-commit フックと pre-push フックの両方を使用するには、次のコマンドを実行します。
pre-commit install pre-commit install --hook-type pre-push
メモ
pre-push フックは
git pushコマンドの実行時にトリガーされ、プッシュ予定のコミットのみをスキャンします。
Cycode CLI コマンド
Cycode CLI アプリケーションで使用できるオプションとコマンドは次のとおりです。
| オプション | 説明 |
|---|---|
-v, --verbose | 詳細なログを表示します。 |
--no-progress-meter | 進行状況メーターを表示しません。 |
--no-update-notifier | CLI の更新を確認しません。 |
-o, --output [rich|text|json|table] | 出力形式を指定します。デフォルトは rich です。 |
--client-id TEXT | このスキャン実行に使用する Cycode クライアント ID を指定します。 |
--client-secret TEXT | このスキャン実行に使用する Cycode クライアントシークレットを指定します。 |
--id-token TEXT | このスキャン実行に使用する Cycode OIDC ID トークンを指定します。 |
--install-completion | 現在のシェルの補完機能をインストールします。 |
--show-completion [bash|zsh|fish|powershell|pwsh] | 指定したシェルの補完機能を表示します。コピーまたはインストールをカスタマイズできます。 |
-h, --help | 指定したコマンドのオプションを表示します。 |
| コマンド | 説明 |
|---|---|
| auth | CLI を Cycode アカウントに関連付けるため、このマシンを認証します。 |
| configure | CLI クライアントの認証を設定するための初期コマンドです。 |
| ignore | 特定の値、パス、またはルール ID を無視します。 |
| mcp | Cycode のスキャン機能との AI 統合を有効にするため、Model Context Protocol(MCP)サーバーを起動します。 |
| scan | コンテンツをスキャンし、Secrets/IaC/SCA/SAST の違反を検出します。実行するスキャンの種類(commit-history/path/repository など)を指定する必要があります。 |
| report | レポートを生成します。SBOM など、実行するレポートの種類を指定する必要があります。 |
| status | CLI のステータスを表示して終了します。 |
証明書とプロキシ
デフォルトでは、Cycode CLI は CLI に同梱されている CA バンドルを使用して HTTPS 接続を検証します。
組織で HTTPS トラフィックを検査するプロキシを使用している場合、または独自の CA を使用するオンプレミス環境の場合、次の 2 つの方法があります。
方法 1 — マシンにすでにインストールされている証明書を使用する。 CA がマシンの証明書ストアに登録されている場合(管理対象デバイスでは通常そうなっています)、次の設定を有効にします。
export CYCODE_CLI_ENABLE_TRUSTSTORE=1
CLI はその後、Windows の証明書ストア、macOS のキーチェーン、または Linux のシステム CA ディレクトリを使用して検証します。証明書のパスを設定する必要はありません。
重要
この設定は意図的にオプトイン方式になっています。マシンのストアを信頼することは、管理者や悪意のあるソフトウェアがインストールした証明書を含め、そのマシンに存在するすべてのルート証明書を信頼することを意味します。マシンの証明書ストアが信頼できると確認できている場合に有効にしてください。
方法 2 — CLI に CA バンドルファイルを指定する。 オプトインせずに使用できます。
| 環境変数 | 説明 |
|---|---|
REQUESTS_CA_BUNDLE | 信頼する CA バンドルファイル(.pem または .crt)のパスです。 |
CURL_CA_BUNDLE | REQUESTS_CA_BUNDLE の別名です。前者が設定されていない場合に使用されます。 |
2 つの方法は併用できます。CYCODE_CLI_ENABLE_TRUSTSTORE=1 を設定すると、REQUESTS_CA_BUNDLE の証明書はマシンのストアの代わりではなく、マシンのストアに加えて信頼されます。
ヒント
-vを指定して任意のコマンドを実行すると、どの信頼ソースが使用されているか確認できます。例:cycode -v status
注意事項:
- Windows では、
REQUESTS_CA_BUNDLEもCURL_CA_BUNDLEも設定されていない場合、CLI は従来からシステムの証明書ストアにフォールバックします。この動作に変更はありません。 - プロキシ自体は、標準の
HTTP_PROXY、HTTPS_PROXY、NO_PROXY環境変数で設定します。
MCP コマンド [EXPERIMENT]
Model Context Protocol(MCP)コマンドを使用すると、Cycode のスキャン機能を AI システムやアプリケーションに公開する MCP サーバーを起動できます。これにより、AI モデルは標準化されたプロトコルを介して Cycode CLI ツールを利用できます。
ヒント
最適な使い心地を得るには、
pip install cycodeまたはbrew install cycodeを使用して Cycode CLI をシステムにグローバルインストールし、cycode authで一度認証してください。グローバルインストールと認証が完了すれば、MCP 設定ファイルでCYCODE_CLIENT_IDとCYCODE_CLIENT_SECRET環境変数を設定する必要はありません。
MCP サーバーの起動
MCP サーバーを起動するには、次のコマンドを使用します。
cycode mcp
デフォルトでは、サーバーは stdio トランスポートを使用して起動します。これは、サブプロセスを起動できるローカル連携や AI アプリケーションに適しています。
使用可能なオプション
| オプション | 説明 |
|---|---|
-t, --transport | MCP サーバーのトランスポートタイプ:stdio、sse、または streamable-http(デフォルト:stdio) |
-H, --host | サーバーをバインドするホストアドレス(stdio 以外のトランスポートでのみ使用)(デフォルト:127.0.0.1) |
-p, --port | サーバーをバインドするポート番号(stdio 以外のトランスポートでのみ使用)(デフォルト:8000) |
--help | ヘルプメッセージと使用可能なオプションを表示します |
MCP ツール
MCP サーバーは、AI システムが使用できる以下のツールを提供します。
| ツール名 | 説明 |
|---|---|
cycode_secret_scan | ハードコードされたシークレットをスキャンします |
cycode_sca_scan | ソフトウェアコンポジション分析(SCA)を実行し、脆弱性とライセンスの問題をスキャンします |
cycode_iac_scan | Infrastructure as Code(IaC)の設定ミスをスキャンします |
cycode_sast_scan | 静的アプリケーションセキュリティテスト(SAST)を実行し、コード品質とセキュリティ上の欠陥をスキャンします |
cycode_status | Cycode CLI のバージョン、認証ステータス、設定情報を取得します |
各スキャンツールでは、相互に排他的な次の 2 つの入力モードを使用できます。
paths(推奨)— ディスク上に存在する 1 つ以上のファイルまたはディレクトリのパスを指定します。ディレクトリは再帰的にスキャンされます。Cycode エンジンがファイルの検出とフィルタリングを処理します。これは、コマンドラインからcycode scan -t <type> path ./srcを実行する場合と同様です。files(フォールバック)— ファイルパスをキー、ファイルの内容全体を文字列として値にする辞書を指定します。ファイルがディスク上にない場合(たとえば、まだ保存されていないメモリ上の編集内容)にのみ使用してください。
ヒント
可能な限り
pathsを使用してください。大きなファイル(package-lock.jsonなど)をインラインコンテンツとして渡すと、トークン制限を超えたり、AI クライアントの処理が遅くなったりすることがあります。pathsを使用すると、Cycode エンジンがファイルをディスクから直接読み込みます。
すべてのスキャンツールは、完全な "detections" 配列に加えて、人が読みやすい違反件数(例:"Cycode found 3 violations: 1 CRITICAL, 2 HIGH.")を含む "summary" フィールドを持つ JSON オブジェクトを返します。
使用例
基本的なコマンド例
デフォルト設定(stdio トランスポート)で MCP サーバーを起動します:
cycode mcp
stdio トランスポートを明示して MCP サーバーを起動します:
cycode mcp -t stdio
Server-Sent Events(SSE)トランスポートで MCP サーバーを起動します:
cycode mcp -t sse -p 8080
カスタムのホストとポートで、ストリーム可能な HTTP トランスポートを使用して MCP サーバーを起動します:
cycode mcp -t streamable-http -H 0.0.0.0 -p 9000
MCP トランスポートの種類について詳しくは、MCP Protocol Specification – Transportsをご覧ください。
設定例
Cursor/VS Code/Claude Desktop などで MCP を使用する(mcp.json)
メモ
Cycode の EU 環境では、環境変数に適切な
CYCODE_API_URLとCYCODE_APP_URLの値(例:https://api.eu.cycode.comとhttps://app.eu.cycode.com)が設定されていることを確認してください。
このガイドに従って、VS Code/GitHub Copilot で MCP サーバーを設定してください。settings.json には単独の mcpServers オブジェクトではなく、servers サブオブジェクトを含む mcp オブジェクトがあることに注意してください。
stdio トランスポート(直接実行)の場合:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
pipx でインストールした場合のstdio トランスポート:
{
"mcpServers": {
"cycode": {
"command": "pipx",
"args": ["run", "cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
uvx でインストールした場合のstdio トランスポート:
{
"mcpServers": {
"cycode": {
"command": "uvx",
"args": ["cycode", "mcp"],
"env": {
"CYCODE_CLIENT_ID": "your-cycode-id",
"CYCODE_CLIENT_SECRET": "your-cycode-secret-key",
"CYCODE_API_URL": "https://api.cycode.com",
"CYCODE_APP_URL": "https://app.cycode.com"
}
}
}
}
SSE トランスポート(Server-Sent Events)の場合:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
カスタムポートを使用する場合のSSE トランスポート:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8080/sse"
}
}
}
ストリーム可能な HTTP トランスポートの場合:
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/mcp"
}
}
}
MCP サーバーをバックグラウンドで実行する
SSE トランスポートの場合(先にサーバーを起動し、その後クライアントを設定します):
# Start the MCP server in the background
cycode mcp -t sse -p 8000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.1:8000/sse"
}
}
}
ストリーム可能な HTTP トランスポートの場合:
# Start the MCP server in the background
cycode mcp -t streamable-http -H 127.0.0.2 -p 9000 &
# Configure in mcp.json
{
"mcpServers": {
"cycode": {
"url": "http://127.0.0.2:9000/mcp"
}
}
}
高度な設定
タイムアウトとカスタム証明書(プロキシ環境)
MCP クライアントによって時間のかかるスキャンが途中で終了される場合は、ツール呼び出しのタイムアウトを延長してください。
| 環境変数 | 説明 |
|---|---|
MCP_TOOL_TIMEOUT | Claude や GitHub Copilot などの MCP クライアントが、ツール呼び出しの完了を待つ時間(秒)です。時間のかかるスキャンが完了前に打ち切られる場合は、この値を増やしてください。 |
企業プロキシの背後で使用する場合は、MCP サーバーの env ブロックに証明書変数を設定してください。設定方法については
証明書とプロキシを参照してください。マシンにすでにある証明書を使用するには
CYCODE_CLI_ENABLE_TRUSTSTORE=1 を設定するか、CA バンドルファイルを指すように
REQUESTS_CA_BUNDLE を設定します。
カスタム CA バンドルと長めのタイムアウトを設定した mcp.json の例:
{
"mcpServers": {
"cycode": {
"command": "cycode",
"args": ["mcp"],
"env": {
"REQUESTS_CA_BUNDLE": "/path/to/your/corporate-ca-bundle.pem",
"MCP_TOOL_TIMEOUT": "1800"
}
}
}
}
メモ
MCP サーバーを動作させるには、適切な Cycode CLI 認証が必要です。MCP サーバーの起動前に
cycode authで認証するか、認証情報を設定してください。
サブエージェント用ツールの事前承認(Claude Code)
Claude Code がバックグラウンドのサブエージェントに作業を委任するとき(たとえばスキャンを並行して実行する場合)、サブエージェントには対話型の権限確認プロンプトを表示できません。Cycode ツールが事前承認されていない場合、サブエージェントのコンテキストではスキャンがエラーなく失敗します。
サブエージェントを含むすべてのコンテキストで Cycode MCP ツールを使えるようにするには、Claude Code の設定(~/.claude/settings.json)にある allowedTools リストに追加します。
{
"allowedTools": [
"mcp__cycode__cycode_secret_scan",
"mcp__cycode__cycode_sca_scan",
"mcp__cycode__cycode_iac_scan",
"mcp__cycode__cycode_sast_scan",
"mcp__cycode__cycode_status"
]
}
追加すると、これらのツールの呼び出し時に Claude Code が承認を求めなくなり、サブエージェント内でも正常に動作します。
MCP のトラブルシューティング
MCP サーバーで問題が発生した場合は、デバッグログを有効にして、状況に関する詳細情報を取得できます。デバッグログを有効にする方法は 2 つあります。
-vまたは--verboseフラグを使用する:
cycode -v mcp
CYCODE_CLI_VERBOSE環境変数を使用する:
CYCODE_CLI_VERBOSE=1 cycode mcp
デバッグログには、次の詳細情報が表示されます。
- サーバーの起動と設定
- 接続の試行と状態
- ツールの実行と結果
- 発生したエラーや警告
この情報は、次のような場合に役立ちます。
- 接続の問題を診断する
- 特定のツールが動作しない理由を把握する
- 認証の問題を特定する
- トランスポート固有の問題をデバッグする
MCP の設定
Platform コマンド [BETA]
警告
platformコマンドはベータ版です。コマンド、引数、出力形式は Cycode API の仕様から動的に生成されるため、予告なくリリース間で変更される場合があります。現時点では、本番環境の自動化でこれらに依存しないでください。
cycode platform コマンドは、Cycode プラットフォームの読み取り API を CLI コマンドとして公開します。エンドポイントをリソース(例:projects、violations、workflows)ごとにグループ化し、各エンドポイントのパラメーターを型付き CLI 引数と --option フラグに変換します。
cycode platform projects list --page-size 50
cycode platform violations count
cycode platform workflows view <workflow-id>
OpenAPI 仕様は初回使用時に Cycode API から取得され、~/.cycode/openapi-spec.json に 24 時間キャッシュされます。無関係なコマンド(cycode scan、cycode status など)では取得は行われません。
メモ
cycode platformでコマンドを検出して実行するには、認証(cycode authまたはCYCODE_CLIENT_ID/CYCODE_CLIENT_SECRET環境変数)が必要です。それ以外の Cycode CLI コマンドは、認証なしで動作します。
コマンドの確認
コマンドは仕様から生成されるため、利用可能な機能を確認するには --help を参照してください。
cycode platform --help # list all resource groups
cycode platform projects --help # list actions on a resource
cycode platform projects list --help # list options/arguments for an action
Platform の使用例
# List projects with pagination
cycode platform projects list --page-size 25
# View a single project by ID
cycode platform projects view <project-id>
# Count violations across the tenant
cycode platform violations count
# Filter using query parameters (see `--help` for what each endpoint supports)
cycode platform violations list --severity CRITICAL
すべての出力はデフォルトで JSON です。必要に応じて jq に渡し、フィルタリングできます。
cycode platform projects list --page-size 100 | jq '.items[].name'
プラットフォームに関する注意事項と制限
- 現在は読み取り専用です。 このベータ版では
GETエンドポイントのみが公開されています。 - 仕様駆動です。 API に新しいエンドポイントを追加すると、次回キャッシュが更新されたときに自動的に反映されます。
- 仕様は同梱されていません。 インストール後(または24時間のキャッシュ期限が切れた後)に初めて
cycode platformを実行すると、ネットワーク経由でデータを取得します。接続が遅い場合、初回の呼び出しには数秒かかることがあります。それ以降は、キャッシュの期限が切れるまでほぼ瞬時に実行されます。 CYCODE_SPEC_CACHE_TTL=<seconds>でキャッシュの有効期間を上書きできます。
AI Guardrails [BETA]
AI Guardrails は、対応する AI コーディングエージェント(Claude Code、Cursor、Copilot、Codex)にフックをインストールし、 プロンプト、エージェントが読み取るファイル、MCP ツールの引数に含まれるシークレットを、モデルに渡される前にスキャンします。
AI Guardrails が収集するデータ
スキャンはサーバー側で行われるため、スキャン対象のコンテンツはマシンの外部に送信されます。プロンプトのテキスト、 エージェントが読み取るファイルの内容、MCP ツールの引数は、シークレットのチェックのために Cycode テナントに送信されます。
各イベントは、開発者とマシンに関するコンテキスト情報とともに報告されるため、検出結果を発生元のデバイスとユーザーに 紐付けられます。この情報には個人データが含まれる場合があります。
- デバイス識別子 — マシンのホスト名とハードウェアのシリアル番号。
- ユーザー識別子 — AI コーディングエージェントにサインインしているユーザーのメールアドレスと、ローカルの オペレーティングシステムのユーザー名。
- 環境の詳細 — オペレーティングシステムとバージョン、AI エージェント、そのバージョンと使用中のモデル、 エージェントの MCP 設定ファイルの内容、および有効になっているプラグイン。
ハードウェアのシリアル番号は、コマンドを実行したユーザーのみが読み取り可能なローカルの一時ファイルにキャッシュされるため、 フックを実行するたびにハードウェア情報を再取得することはありません。
このデータの収集が環境で許容されない場合は、ガードレールのフックをインストールしないでください
(cycode ai-guardrails uninstall で、すでにインストールされているフックを削除できます)。
スキャンコマンド
スキャンの実行
Cycode CLI アプリケーションには複数の種類のスキャンが用意されているため、用途に最適なオプションを選択できます。現在利用できるオプションとコマンドは以下のとおりです。
| オプション | 説明 |
|---|---|
-t, --scan-type [secret|iac|sca|sast] | 実行するスキャン(secret/iac/sca/sast)を指定します。デフォルトは secret です。 |
--show-secret BOOLEAN | シークレットをプレーンテキストで表示します。詳細については、シークレットの表示/非表示のセクションをご覧ください。 |
--soft-fail BOOLEAN | 失敗として扱わずにスキャンを実行し、常にエラー以外のステータスコードを返します。詳細については、ソフトフェイルのセクションをご覧ください。 |
--severity-threshold [INFO|LOW|MEDIUM|HIGH|CRITICAL] | 指定したレベル以上の違反のみを表示します。 |
--sca-scan | 実行する SCA スキャン(package-vulnerabilities/license-compliance/unmaintained-packages)を指定します。デフォルトではすべて実行します。 |
--monitor | 指定すると、スキャン結果が Cycode に記録されます。 |
--cycode-report | Cycode プラットフォーム上のスキャンレポートへのリンクを、コンソール出力に表示します。 |
--no-restore | 指定すると、Cycode は restore コマンドを実行しません。直接の依存関係のみをスキャンします! |
--stop-on-error | ファイルの収集または依存関係の復元に失敗した場合、失敗したファイルをスキップして続行するのではなく、スキャンを中止します。 |
--gradle-all-sub-projects | すべてのサブプロジェクトを対象に gradle restore コマンドを実行します。これは次の場所から実行してください。 |
--maven-settings-file | Maven 専用です。依存関係のスキャン時に、カスタムの settings.xml ファイルを使用できます。 |
--help | 指定したコマンドのオプションを表示します。 |
| コマンド | 説明 |
|---|---|
| commit-history | コミット履歴をスキャンするか、特定のコミット間の差分スキャンを実行します |
| path | コマンドで指定したパス内のファイルをスキャンします |
| pre-commit | まだコミットされていないコンテンツをスキャンします。フラグを使ったローカル差分スキャンにも対応しています(IDE 向け) |
| repository | Git リポジトリとその履歴をスキャンします |
オプション
深刻度オプション
スキャン結果を特定の深刻度以上に絞り込むには、スキャンコマンドに引数 --severity-threshold を追加します。
たとえば、次のコマンドでは、深刻度が Medium 以上のポリシー違反をリポジトリでスキャンします。
cycode scan --severity-threshold MEDIUM repository ~/home/git/codebase
モニターオプション
メモ
このオプションは SCA スキャンでのみ使用できます。
SCA タイプのスキャンで見つかった SCA ポリシーに関連付けられたスキャン結果を Cycode に送信するには、スキャンコマンドに引数 --monitor を追加します。
たとえば、次のコマンドでは、SCA ポリシー違反をリポジトリでスキャンし、その結果を Cycode プラットフォームに送信します。
cycode scan -t sca --monitor repository ~/home/git/codebase
Cycode レポートオプション
Cycode CLI を使用して実行するすべてのスキャンでは、レポートが自動的に生成され、その結果が Cycode に送信されます。これらの結果は、Cycode プラットフォーム内の該当するポリシー(リポジトリのスキャンの場合は SCA ポリシーなど)に関連付けられます。
スキャン完了後に、Cycode レポートの直接 URL を CLI の出力に表示するには、スキャンコマンドに引数 --cycode-report を追加します。
cycode scan --cycode-report repository ~/home/git/codebase
CLI のすべてのスキャン結果は、Cycode の CLI ログセクションに表示されます。コマンドに --cycode-report フラグを含めると、スキャン結果に続いて、該当するレポートへの直接リンクがターミナルに表示されます。
警告
このページを表示するには、Cycode で
ownerまたはadminのロールが必要です。

レポートページは次のような画面です。

パッケージの脆弱性オプション
メモ
このオプションは SCA スキャンでのみ使用できます。
ローカルリポジトリ内の特定のパッケージの脆弱性をスキャンするには、-t sca または --scan-type sca オプションの後に引数 --sca-scan package-vulnerabilities を追加します。
前の例で、パッケージの脆弱性のみを SCA スキャンする場合は、次のコマンドを実行します。
cycode scan -t sca --sca-scan package-vulnerabilities repository ~/home/git/codebase
ライセンスコンプライアンスオプション
メモ
このオプションは SCA スキャンでのみ使用できます。
ローカルリポジトリの特定のブランチをスキャンするには、引数 --sca-scan license-compliance の後に、スキャンするブランチ名を指定します。
前の例で、dev という名前のブランチのみをスキャンする場合は、次のコマンドを実行します。
cycode scan -t sca --sca-scan license-compliance repository ~/home/git/codebase -b dev
メンテナンスされていないパッケージのオプション
メモ
このオプションは SCA スキャンでのみ使用できます。
メンテナンスされていないパッケージ(OpenSSF Scorecard の Maintained チェックのスコアが低く、最近のコミットやイシューのアクティビティがほとんど、またはまったくないパッケージ)のみをスキャンするには、-t sca または --scan-type sca オプションの後に引数 --sca-scan unmaintained-packages を追加します。
メモ
メンテナンスされていないパッケージをレポートするかどうかは、組織のポリシーによって制御されます。このオプションはスキャンでレポートする対象を絞り込むものであり、テナントで無効になっているポリシーを有効にすることはできません。
前の例で、メンテナンスされていないパッケージのみを SCA スキャンする場合は、次のコマンドを実行します。
cycode scan -t sca --sca-scan unmaintained-packages repository ~/home/git/codebase
ロックファイル復元オプション
メモ
このオプションは SCA スキャンでのみ使用できます。
SCA スキャンを実行すると、Cycode CLI は、検出した各対応マニフェストファイルの依存関係ロックファイルを自動的に復元(生成)しようとします。これにより、マニフェストに直接記載された依存関係だけでなく、推移的依存関係もスキャンできます。この手順を省略して直接依存関係のみをスキャンするには、--no-restore フラグを使用します。
次のエコシステムでは、ロックファイルの自動復元に対応しています。
| エコシステム | マニフェストファイル | 生成されるロックファイル | 実行されるツール(ロックファイルがない場合) |
|---|---|---|---|
| npm | package.json | package-lock.json | npm install --package-lock-only --ignore-scripts --no-audit |
| Yarn | package.json | yarn.lock | yarn install --ignore-scripts |
| pnpm | package.json | pnpm-lock.yaml | pnpm install --ignore-scripts |
| Deno | deno.json / deno.jsonc | deno.lock | (既存のロックファイルのみ読み込み) |
| Go | go.mod | go.mod.graph | go list -m -json all + go mod graph |
| Maven | pom.xml | bcde.mvndeps | mvn dependency:tree |
| Gradle | build.gradle / build.gradle.kts | gradle-dependencies-generated.txt | gradle dependencies -q --console plain |
| SBT | build.sbt | build.sbt.lock | sbt dependencyLockWrite |
| NuGet | *.csproj | packages.lock.json | dotnet restore --use-lock-file |
| Ruby | Gemfile | Gemfile.lock | bundle --quiet |
| Poetry | pyproject.toml | poetry.lock | poetry lock |
| pip | pyproject.toml / requirements.txt | pylock.toml | pip lock . / pip lock -r requirements.txt -o pylock.toml |
| Pipenv | Pipfile | Pipfile.lock | pipenv lock |
| PHP Composer | composer.json | composer.lock | composer update --no-cache --no-install --no-scripts --ignore-platform-reqs |
マニフェストと同じ場所にロックファイルがすでにある場合、Cycode はインストールコマンドを実行せず、そのファイルを直接読み込みます。
SBT の前提条件: sbt-dependency-lock プラグインをインストールする必要があります。project/plugins.sbt に次の行を追加してください。
addSbtPlugin("software.purpledragon" % "sbt-dependency-lock" % "1.5.1")
エラー時に停止するオプション
デフォルトでは、ファイルを読み込めない場合(権限エラーなど)や、SCA スキャン中に依存関係ロックファイルを生成できない場合でも、Cycode はスキャンを続行します。失敗した項目は警告とともにスキップされ、残りのファイルのスキャンが続行されます。
この動作を変更するには、--stop-on-error を使用します。最初のエラーが発生した時点でスキャンは直ちに中止され、エラーが報告されます。
cycode scan -t sca --stop-on-error path ~/home/git/codebase
これは、エラーが表面化せず、不完全なスキャン結果が出力される可能性がある CI パイプラインで役立ちます。--stop-on-error が発動した場合は、根本的な問題を修正するか、SCA の復元エラーであれば --no-restore を追加してロックファイルの生成を省略し、直接依存関係のみをスキャンできます。
--stop-on-error を使用すると、CLI は終了コードによってスキャンエラーとポリシー違反を区別します。
| 終了コード | 意味 |
|---|---|
0 | 違反なしでスキャンが完了しました |
1 | スキャンが完了し、違反が見つかりました |
2 | エラーによりスキャンが中止されました(--stop-on-error が設定されている場合のみ) |
リポジトリのスキャン
リポジトリのスキャンでは、ローカルリポジトリ全体を調べ、公開されているシークレットや安全でない設定を検出します。この包括的なスキャンでは、リポジトリの現在の状態とコミット履歴のすべてを調査します。リポジトリ内で現在公開されているシークレットだけでなく、以前に削除されたシークレットも検出します。
リポジトリ全体をスキャンするには、次のコマンドを実行します。
cycode scan repository {{path}}
たとえば、~/home/git/codebase に保存されているリポジトリをスキャンする場合は、次のコマンドを実行します。
cycode scan repository ~/home/git/codebase
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 |
|---|---|
-b, --branch TEXT | スキャンするブランチ。指定しない場合はデフォルトブランチをスキャンします |
ブランチオプション
ローカルリポジトリの特定のブランチをスキャンするには、引数 -b(または --branch)の後に、スキャンするブランチ名を指定します。
先ほどの例で、dev という名前のブランチだけをスキャンする場合は、次のコマンドを実行します。
cycode scan repository ~/home/git/codebase -b dev
パスのスキャン
パスのスキャンでは、GIT リポジトリだけに限定せず、特定のローカルディレクトリとその中のすべての内容を調べます。
ディレクトリをスキャンするには、次のコマンドを実行します。
cycode scan path {{path}}
たとえば、~/home/git/codebase にあるディレクトリをスキャンする場合は、次のコマンドを実行します。
cycode scan path ~/home/git/codebase
Terraform プランのスキャン
Cycode CLI は Terraform プランのスキャンに対応しています(Terraform 0.12 以降に対応)。
Terraform プランファイルは JSON 形式(拡張子が .json)である必要があります。
設定ファイルしかない場合は、次の手順でプランを生成できます。
-
Terraform の設定ファイルを含む作業ディレクトリを初期化します。
terraform init -
Terraform の実行プランを作成し、バイナリ出力を保存します。
terraform plan -out={tfplan_output} -
バイナリ出力ファイルを、読み取り可能な JSON に変換します。
terraform show -json {tfplan_output} > {tfplan}.json -
Cycode CLI で
{tfplan}.jsonをスキャンします。cycode scan -t iac path ~/PATH/TO/YOUR/{tfplan}.json
コミット履歴のスキャン
メモ
コミット履歴のスキャンは IaC スキャンでは使用できません。
コミット履歴のスキャンコマンドには、次の 2 つの主な機能があります。
- 全履歴のスキャン:リポジトリの履歴にあるすべてのコミットを分析します
- 差分のスキャン:特定のコミット間の変更のみをスキャンします
シークレットのスキャンでは、リポジトリの履歴にあるすべてのコミットを分析できます。シークレットは、導入された後に削除されていても、漏洩または公開されている可能性があるためです。SCA および SAST のスキャンでは、コミット履歴コマンドはコミット間の差分や変更のスキャンに重点を置いています。そのため、プルリクエストのレビューや段階的なスキャンに最適です。
コミット履歴のスキャンでは、Git リポジトリのコミット履歴を調べます。包括的な履歴分析にも、特定の変更を対象とした差分スキャンにも使用できます。
コミット履歴をスキャンするには、次のコマンドを実行します。
cycode scan commit-history {{path}}
たとえば、~/home/git/codebase に保存されているリポジトリのコミット履歴をスキャンする場合は、次のコマンドを実行します。
cycode scan commit-history ~/home/git/codebase
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 |
|---|---|
-r, --commit-range TEXT | この git リポジトリのコミット範囲をスキャンします。デフォルトでは、cycode はすべてのコミット履歴をスキャンします(例:HEAD~1) |
コミット範囲オプション(差分スキャン)
コミット範囲オプションを使うと、差分スキャンを実行できます。リポジトリの履歴全体ではなく、特定のコミット間の変更のみをスキャンします。 特に、次の用途に便利です。
- プルリクエストの検証:PR で追加された変更のみをスキャンします
- インクリメンタルな CI/CD スキャン:コードベース全体ではなく、最近の変更に絞ってスキャンします
- フィーチャーブランチのレビュー:変更を main/master ブランチと比較します
- パフォーマンスの最適化:対象を関連する変更に限定することで、スキャンを高速化します
コミット範囲の構文
--commit-range(-r)オプションでは、標準的な Git のリビジョン構文を使用できます。
| 構文 | 説明 | 例 |
|---|---|---|
commit1..commit2 | commit1 から commit2 までの変更 | abc123..def456 |
commit1...commit2 | commit1 にはなく、commit2 にある変更 | main...feature-branch |
commit | commit から HEAD までの変更 | HEAD~1 |
branch1..branch2 | branch1 から branch2 までの変更 | main..feature-branch |
差分スキャンの例
直近のコミットの変更をスキャンします:
cycode scan commit-history -r HEAD~1 ~/home/git/codebase
特定の 2 つのコミット間の変更をスキャンします:
cycode scan commit-history -r abc123..def456 ~/home/git/codebase
main と比較して、フィーチャーブランチの変更をスキャンします:
cycode scan commit-history -r main..HEAD ~/home/git/codebase
main とフィーチャーブランチ間の変更をスキャンします:
cycode scan commit-history -r main..feature-branch ~/home/git/codebase
直近 3 件のコミットのすべての変更をスキャンします:
cycode scan commit-history -r HEAD~3..HEAD ~/home/git/codebase
ヒント
CI/CD パイプラインでは、
${{ github.event.pull_request.base.sha }}..${{ github.sha }}(GitHub Actions)や$CI_MERGE_REQUEST_TARGET_BRANCH_SHA..$CI_COMMIT_SHA(GitLab CI)などの環境変数を使用して、PR/MR の変更のみをスキャンできます。
コミット前スキャン
コミット前スキャンは、リポジトリに変更をコミットする前に問題を自動で検出します。このスキャンを手動で実行する必要はありません。このガイドの「インストール」セクションの手順に従って、コミット前フックを設定してください。
コミット前フックをインストールした後、特定のコミットでスキャンをスキップしたい場合があります。その場合は、次のように git コマンドに追加すると、1 回のコミットでスキャンをスキップできます。
SKIP=cycode git commit -m <your commit message>`
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 |
|---|---|
-b, --base-ref TEXT | 差分比較の対象とする Git ref(コミット、ブランチ、またはタグ)。デフォルトは HEAD で、コミット前フックの動作と一致します |
--include-unstaged | ステージング済みの変更だけでなく、追跡対象ファイルの未ステージ変更もスキャンします。デフォルトでは無効です |
--path PATH | 差分スキャンの対象を絞り込む任意のパス。複数指定できます。デフォルトでは作業ディレクトリ全体が対象です |
ローカル差分スキャン(IDE 連携)
--base-ref と --include-unstaged を使うと、pre-commit を汎用的なローカル差分スキャンとして利用できます。任意のコミット(デフォルトは HEAD)と現在の作業ディレクトリを比較し、まだステージングされていない編集内容も含めてスキャンします。これは、Git フックのフローではなく、作業中に継続的かつリアルタイムにフィードバックを得る必要がある IDE プラグインやその他のツールを対象としています。--include-unstaged と組み合わせると、--path を使って IDE のスキャン対象を、エディターで現在開いているファイルだけに絞り込めます。
メモ
ローカル差分スキャン(これらのフラグを使用する場合)は、IaC スキャンでは利用できません。
直近のコミットと比較して、現在変更されているすべての内容(ステージング済み+未ステージ)をスキャンします:
cycode scan pre-commit --include-unstaged
特定のコミットまたはブランチと比較して変更をスキャンします:
cycode scan pre-commit --include-unstaged --base-ref main
特定のファイルのみをスキャンします(例:IDE で現在開いているファイル):
cycode scan pre-commit --include-unstaged --path src/app.py
プッシュ前スキャン
プッシュ前スキャンは、変更をリモートリポジトリにプッシュする前に問題を自動で特定します。このフックはクライアント側で実行され、プッシュしようとしているコミットのみをスキャンするため、問題がリモートリポジトリに到達する前に効率よく検出できます。
メモ
IaC スキャンではプッシュ前フックを利用できません。
プッシュ前フックは pre-commit フレームワークと連携し、git push 操作の前に実行されるよう設定できます。
プッシュ前フックのインストール
pre-commit フレームワークを使用してプッシュ前フックを設定するには、次の手順に従います。
-
pre-commit フレームワークをインストールします(まだインストールされていない場合)。
pip3 install pre-commit -
.pre-commit-config.yamlファイルを作成または更新し、プッシュ前フックを追加します。repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode-pre-push stages: [pre-push] -
複数のスキャンタイプを使用する場合は、次の設定を使用します。
repos: - repo: https://github.com/cycodehq/cycode-cli rev: v3.25.0 hooks: - id: cycode-pre-push # Secrets scan stages: [pre-push] - id: cycode-sca-pre-push # SCA scan stages: [pre-push] - id: cycode-sast-pre-push # SAST scan stages: [pre-push] -
プッシュ前フックをインストールします。
pre-commit install --hook-type pre-pushインストールに成功すると、
Pre-push installed at .git/hooks/pre-pushというメッセージが表示されます。 -
プッシュ前フックを最新の状態に保ちます。
pre-commit autoupdate
プッシュ前スキャンの仕組み
フックはプッシュ対象の各コミットを一度に 1 つずつスキャンするため、あるコミットで追加され、後続のコミットで削除されたシークレットも検出されます。pre-commit フレームワーク経由でインストールした場合、プッシュ対象の範囲はフレームワークから取得されます。既存のブランチではリモートブランチ以降の新しいコミット、新しいブランチではまだリモートにないコミット(空のリモートへのプッシュではすべてのコミット)が対象です。手書きの .git/hooks/pre-push から実行する場合は、範囲を git のフック入力から読み取り、新しいブランチはデフォルトブランチとのマージベースからスキャンします(以下を参照)。
タグ、ブランチの削除、すでに最新の状態のプッシュなど、スキャン対象がないプッシュはスキャンせずに通過します。プッシュ対象を特定できない場合は、何もせずに通過するのではなく、失敗してプッシュをブロックします。
Cycode のプッシュ前フックでは、always_run: true と pass_filenames: false が設定されています。スキャン対象はファイルの一覧ではなく、プッシュされるコミットだからです。always_run がないと、プッシュ対象のコミットに変更されたファイルがない場合、pre-commit フレームワークはフックをスキップします。たとえば、あるコミットで追加され、次のコミットで削除されたシークレットがこれに該当します。pass_filenames: false がないと、フレームワークはスキャンで使用されない変更ファイル名を渡します。また、大量のファイルを含むプッシュでは、それらを複数のバッチに分割し、バッチごとにフルスキャンを実行します。フックを自分で定義する場合(たとえば repo: local フックとして定義する場合)は、両方のオプションを設定してください。
デフォルトブランチの自動検出
手書きのフックから実行する場合、プッシュ前スキャンは次の優先順位でマージベースの計算に使用するデフォルトブランチを検出します。
- 環境変数:
CYCODE_DEFAULT_BRANCH— 手動で上書きできます。 - Git のリモート HEAD:
git symbolic-ref refs/remotes/origin/HEADを使用して、実際のリモートのデフォルトブランチを検出します。 - Git のリモート情報:symbolic-ref が失敗した場合は、
git remote show originにフォールバックします。 - 固定のフォールバック値:一般的なデフォルトブランチ名(origin/main、origin/master、main、master)を使用します。
カスタムのデフォルトブランチを設定する:
export CYCODE_DEFAULT_BRANCH=origin/develop
この自動検出により、リポジトリが main、master、develop、その他のどのデフォルトブランチ名を使用していても、プッシュ前フックが正しく動作します。
プッシュ前スキャンをスキップする
特定のプッシュ操作でプッシュ前スキャンをスキップするには、次を使用します。
SKIP=cycode-pre-push git push
または、すべてのプッシュ前フックをスキップするには、次を使用します。
git push --no-verify
ヒント
プッシュ前フックは
git pushコマンドで実行され、プッシュしようとしているコミットのみをスキャンするため、リポジトリ全体をスキャンするより効率的です。
スキャン対象からパスを除外する
.cycodeignore ファイルを使用して、Cycode CLI でスキャン対象から除外するファイルやディレクトリを指定できます。
.gitignore ファイルと同じように機能します。これにより、関連するコードにスキャン対象を絞り、特定のパスがローカルで違反として検出されるのを防げます。
仕組み
- 作業フォルダーに
.cycodeignoreという名前のファイルを作成します。 .gitignoreと同じパターンを使用して、除外するファイルとディレクトリを一覧にします。- cycode scan コマンドを実行するディレクトリに、このファイルを配置します。
警告
- 無効なファイル:
.cycodeignoreファイルに構文エラーがある場合、CLI スキャンは失敗し、エラーが返されます。- パスの無視と違反の無視:このファイルはパスを除外するためのものです。特定の違反を無視する CLI の機能(たとえば、--ignore-violation フラグを使用する方法)とは異なります。
対応スキャナー
- SAST
- IaC(近日公開)
- SCA(近日公開)
スキャン結果
各スキャンが完了すると、問題が見つかったかどうかを示すメッセージが表示されます。
問題が見つからなかった場合、スキャンは次の成功メッセージで終了します。
Good job! No issues were found!!! 👏👏👏
問題が見つかった場合は、代わりに完了時に違反カードが表示されます。この場合は、結果メッセージで強調表示された特定の行について、該当するファイルを確認してください。問題を解決するために必要な変更を加え、スキャンを再度実行します。
シークレットの表示/非表示
以下の例では、cli サブフォルダーにある secret_test ファイルでシークレットが見つかりました。メッセージの後半にはシークレットが記載されている特定の行が表示されます。この例では、googleApiKey に割り当てられた値が該当します。
例では、シークレットの大部分をアスタリスクに置き換えて、実際の値を隠していることに注目してください。スキャンではデフォルトでシークレットが隠されますが、必要に応じてこの機能を無効にし、シークレット全体を表示できます(スキャン結果を表示するマシンが、覗き見から十分に保護されていることを前提とします)。
シークレットのマスキングを無効にするには、すべての種類のスキャンで --show-secret 引数を追加します。
次の例では、シークレットが見つかった場合に全体を表示するオプションを有効にして、cli サブディレクトリに対してパススキャンを実行します。
cycode scan --show-secret path ./cli
この場合、結果はマスキングされずに表示されます。
ソフトフェイル
通常、CLI はスキャン結果に問題が見つかった場合に終了コード 1 を返します。CI/CD の設定によっては、全体的な失敗につながることが一般的です。これを避けたい場合は、ソフトフェイル機能を使用できます。
すべての種類のスキャンで --soft-fail オプションを追加すると、結果が見つかったかどうかにかかわらず、終了コードは強制的に 0 になります。
スキャン結果の例
シークレットの結果例
╭─────────────────────────────────────────────────────────────── Hardcoded generic-password is used ───────────────────────────────────────────────────────────────╮
│ Violation 12 of 12 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 34 }; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/test/s │ │ 35 │ │
│ │ ecurity/profile-test.js │ │ 36 var sutUserName = "user1"; │ │
│ │ Secret SHA b4ea3116d868b7c982ee6812cce61727856b │ │ ❱ 37 var sutUserPassword = "Us*****23"; │ │
│ │ 802b3063cd5aebe7d796988552e0 │ │ 38 │ │
│ │ Rule ID 68b6a876-4890-4e62-9531-0e687223579f │ │ 39 chrome.setDefaultService(service); │ │
│ ╰────────────────────────────────────────────────────╯ │ 40 │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ A generic secret or password is an authentication token used to access a computer or application and is assigned to a password variable. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
IaC の結果例
╭──────────── Enable Content Encoding through the attribute 'MinimumCompressionSize'. This value should be greater than -1 and smaller than 10485760. ─────────────╮
│ Violation 45 of 110 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 20 BinaryMediaTypes: │ │
│ │ In file ...ads-copy/iac/cft/api-gateway/ap │ │ 21 - !Ref binaryMediaType1 │ │
│ │ i-gateway-rest-api/deploy.yml │ │ 22 - !Ref binaryMediaType2 │ │
│ │ IaC Provider CloudFormation │ │ ❱ 23 MinimumCompressionSize: -1 │ │
│ │ Rule ID 33c4b90c-3270-4337-a075-d3109c141b │ │ 24 EndpointConfiguration: │ │
│ │ 53 │ │ 25 Types: │ │
│ ╰────────────────────────────────────────────────────╯ │ 26 - EDGE │ │
│ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ This policy validates the proper configuration of content encoding in AWS API Gateway. Specifically, the policy checks for the attribute │ │
│ │ 'minimum_compression_size' in API Gateway REST APIs. Correct configuration of this attribute is important for enabling content encoding of API responses for │ │
│ │ improved API performance and reduced payload sizes. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SCA の結果例
╭─────────────────────────────────────────────────────── [CVE-2019-10795] Prototype Pollution in undefsafe ────────────────────────────────────────────────────────╮
│ Violation 172 of 195 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 26758 "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", │ │
│ │ In file /Users/cycodemacuser/Node │ │ 26759 "dev": true │ │
│ │ Goat/package-lock.json │ │ 26760 }, │ │
│ │ CVEs CVE-2019-10795 │ │ ❱ 26761 "undefsafe": { │ │
│ │ Package undefsafe │ │ 26762 "version": "2.0.2", │ │
│ │ Version 2.0.2 │ │ 26763 "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.2.tgz", │ │
│ │ First patched version Not fixed │ │ 26764 "integrity": "sha1-Il9rngM3Zj4Njnz9aG/Cg2zKznY=", │ │
│ │ Dependency path nodemon 1.19.1 -> │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ undefsafe 2.0.2 │ │
│ │ Rule ID 9c6a8911-e071-4616-86db-4 │ │
│ │ 943f2e1df81 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ undefsafe before 2.0.3 is vulnerable to Prototype Pollution. The 'a' function could be tricked into adding or modifying properties of Object.prototype using │ │
│ │ a __proto__ payload. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
SAST の結果例
╭───────────────────────────────────────────── [CWE-208: Observable Timing Discrepancy] Observable Timing Discrepancy ─────────────────────────────────────────────╮
│ Violation 24 of 49 │
│ ╭─ 🔍 Details ───────────────────────────────────────╮ ╭─ 💻 Code Snippet ─────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Severity 🟠 MEDIUM │ │ 173 " including numbers, lowercase and uppercase letters."; │ │
│ │ In file /Users/cycodemacuser/NodeGoat/app │ │ 174 return false; │ │
│ │ /routes/session.js │ │ 175 } │ │
│ │ CWE CWE-208 │ │ ❱ 176 if (password !== verify) { │ │
│ │ Subcategory Security │ │ 177 errors.verifyError = "Password must match"; │ │
│ │ Language js │ │ 178 return false; │ │
│ │ Security Tool Bearer (Powered by Cycode) │ │ 179 } │ │
│ │ Rule ID 19fbca07-a8e7-4fa6-92ac-a36d15509 │ ╰───────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
│ │ fa9 │ │
│ ╰────────────────────────────────────────────────────╯ │
│ ╭─ 📝 Summary ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │
│ │ Observable Timing Discrepancy occurs when the time it takes for certain operations to complete can be measured and observed by attackers. This vulnerability │ │
│ │ is particularly concerning when operations involve sensitive information, such as password checks or secret comparisons. If attackers can analyze how long │ │
│ │ these operations take, they might be able to deduce confidential details, putting your data at risk. │ │
│ ╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯ │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
会社独自の修正ガイドライン
会社が Cycode ポータルの該当ポリシーで独自の修正ガイドラインを設定している場合、追加した修正ガイドラインが記載された「会社のガイドライン」フィールドが表示されます。会社のガイドラインを追加していない場合、このフィールドは CLI ツールに表示されません。
スキャン結果の無視
特定のシークレット値、特定の SHA512 値、特定のパス、特定の Cycode シークレットルール ID および IaC ルール ID を無視するルールを追加できます。これにより、これらの値についてスキャンでアラートが発生しなくなります。無視ルールはローカルの ./.cycode/config.yaml ファイルに記述され、保存されます。
警告
無視する値、パス、ポリシーを追加する際は、スキャンで真陽性を検出できるよう、慎重に検討してください。
cycode ignore コマンドで使用できるオプションは次のとおりです。
| オプション | 説明 |
|---|---|
--by-value TEXT | シークレットのスキャン時に特定の値を無視します。詳しくは、シークレット値を無視するをご覧ください。 |
--by-sha TEXT | シークレットのスキャン時に、文字列の特定の SHA512 表現を無視します。詳しくは、シークレット SHA 値を無視するをご覧ください。 |
--by-path TEXT | 特定のパスをスキャン対象から除外します。スキャンタイプを指定する必要があります。詳しくは、パスを無視するをご覧ください。 |
--by-rule TEXT | 特定のシークレットルール ID/IaC ルール ID/SCA ルール ID のスキャンを無視します。詳しくは、シークレットまたは IaC ルールを無視するをご覧ください。 |
--by-package TEXT | SCA スキャンの実行時に、特定のパッケージバージョンのスキャンを無視します。想定される形式は name@version です。詳しくは、パッケージを無視するをご覧ください。 |
--by-cve TEXT | SCA スキャンの実行時に、特定の CVE のスキャンを無視します。想定される形式は CVE-YYYY-NNN です。 |
-t, --scan-type [secret|iac|sca|sast] | 実行するスキャン(secret/iac/sca/sast)を指定します。デフォルト値は secret です。 |
-g, --global | 無視ルールを追加し、グローバルの .cycode 設定ファイルを更新します。 |
シークレット値を無視する
特定のシークレット値を無視するには、--by-value フラグを使用します。これにより、指定したシークレット値は今後のすべてのスキャンで無視されます。シークレット値を無視対象に追加するには、次のコマンドを使用します。
cycode ignore --by-value {{secret-value}}
このセクションの冒頭の例で、特定のシークレット値を無視するコマンドは次のとおりです。
cycode ignore --by-value h3110w0r1d!@#$350
上記の例では、h3110w0r1d!@#$350 の値を、マスクされていないシークレット値に置き換えてください。スキャン結果でシークレット値を確認する方法については、Cycode のスキャンオプションをご覧ください。
シークレット SHA 値を無視する
特定のシークレット SHA 値を無視するには、--by-sha フラグを使用します。これにより、指定したシークレット SHA 値は今後のすべてのスキャンで無視されます。シークレット SHA 値を無視対象に追加するには、次のコマンドを使用します。
cycode ignore --by-sha {{secret-sha-value}}
このセクションの冒頭の例で、特定のシークレット SHA 値を無視するコマンドは次のとおりです。
cycode ignore --by-sha a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
上記の例では、a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0 の値を、ご自身のシークレット SHA 値に置き換えてください。
パスを無視する
シークレット、IaC、または SCA スキャンで特定のパスを無視するには、--by-path フラグを -t, --scan-type フラグと組み合わせて使用します(スキャンタイプを指定する必要があります)。指定したパスは、今後のすべての該当スキャンで無視されます。次のコマンドを使用して、無視するパスを追加します。
cycode ignore -t {{scan-type}} --by-path {{path}}
このセクションの冒頭の例で、シークレットの特定のパスを無視するコマンドは次のとおりです。
cycode ignore -t secret --by-path ~/home/my-repo/config
上記の例の ~/home/my-repo/config の値を、ご自身のパスの値に置き換えてください。
このセクションの冒頭の例で、IaC スキャンから特定のパスを無視するコマンドは次のとおりです。
cycode ignore -t iac --by-path ~/home/my-repo/config
上記の例の ~/home/my-repo/config の値を、ご自身のパスの値に置き換えてください。
このセクションの冒頭の例で、SCA スキャンから特定のパスを無視するコマンドは次のとおりです。
cycode ignore -t sca --by-path ~/home/my-repo/config
上記の例の ~/home/my-repo/config の値を、ご自身のパスの値に置き換えてください。
シークレット、IaC、SCA、または SAST のルールを無視する
特定のシークレット、IaC、SCA、または SAST のルールを無視するには、--by-rule フラグを -t, --scan-type フラグと組み合わせて使用します(スキャンタイプを指定する必要があります)。指定したルール ID の値は、今後のすべてのスキャンで無視されます。次のコマンドを使用して、無視するルール ID の値を追加します。
cycode ignore -t {{scan-type}} --by-rule {{rule-ID}}
このセクションの冒頭の例で、特定のシークレットルール ID を無視するコマンドは次のとおりです。
cycode ignore -t secret --by-rule ce3a4de0-9dfc-448b-a004-c538cf8b4710
上記の例の ce3a4de0-9dfc-448b-a004-c538cf8b4710 の値を、無視するルール ID に置き換えてください。
このセクションの冒頭の例で、特定の IaC ルール ID を無視するコマンドは次のとおりです。
cycode ignore -t iac --by-rule bdaa88e2-5e7c-46ff-ac2a-29721418c59c
上記の例の bdaa88e2-5e7c-46ff-ac2a-29721418c59c の値を、無視するルール ID に置き換えてください。
このセクションの冒頭の例で、特定の SCA ルール ID を無視するコマンドは次のとおりです。
cycode ignore -t sca --by-rule dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b
上記の例の dc21bc6b-9f4f-46fb-9f92-e4327ea03f6b の値を、無視するルール ID に置き換えてください。
パッケージを無視する
メモ
このオプションは SCA スキャンでのみ使用できます。
SCA スキャンで特定のパッケージを無視するには、--by-package フラグを -t, --scan-type フラグと組み合わせて使用します(スキャンタイプは sca を指定する必要があります)。{{package_name}}@{{package_version}} の形式で指定したパッケージは、今後のすべてのスキャンで無視されます。次のコマンドを使用して、無視するパッケージとバージョンを追加します。
cycode ignore --scan-type sca --by-package {{package_name}}@{{package_version}}
または
cycode ignore -t sca --by-package {{package_name}}@{{package_version}}
以下の例で、特定の SCA パッケージを無視するコマンドは次のとおりです。
cycode ignore --scan-type sca --by-package [email protected]
上記の例の pyyaml をパッケージ名に、5.3.1 を無視するパッケージのバージョンに置き換えてください。
設定ファイルで無視する
適用された無視ルールは、config.yaml という設定ファイルに保存されます。
このファイルは、開発者間で簡単に共有したり、リモート Git にコミットしたりできます。
これらのファイルは常に .cycode フォルダー内にあります。
このフォルダー名はドット(.)で始まるため、表示するには隠しファイルを表示する設定を有効にしてください。
設定ファイルのパス
デフォルトでは、すべての cycode ignore コマンドは、CLI を実行した現在のディレクトリに無視ルールを保存します。
例:/Users/name/projects/backend から無視 CLI コマンドを実行すると、/Users/name/projects/backend/.cycode に config.yaml が作成されます。
➜ backend pwd
/Users/name/projects/backend
➜ backend cycode ignore --by-value test-value
➜ backend tree -a
.
└── .cycode
└── config.yaml
2 directories, 1 file
2 つ目の方法は、無視ルールをグローバル設定ファイルに保存することです。
グローバル設定ファイルのパスは ~/.cycode/config.yaml です。
ここで ~ はユーザーのホームディレクトリを意味し、たとえば macOS では /Users/name です。
グローバル領域への保存は、cycode ignore コマンドの -g フラグを使って実行できます。
例:cycode ignore -g --by-value test-value。
適切な作業ディレクトリ
.cycode フォルダーを配置する場所と CLI を実行する場所を一致させることが非常に重要です。
CI/CD(GitHub Actions、Jenkins など)のような異なる環境で作業するときは、必ず再確認してください。
.cycode フォルダーをリポジトリのルートにコミットできます。この場合、CLI スキャンはリポジトリのルートから実行する必要があります。要件に合わない場合は、.cycode フォルダーを一時的に任意の場所へコピーし、そのフォルダーから CLI スキャンを実行できます。
設定内の無視ルールの構造
設定ファイルを読み取ったり、CLI を使わずに変更したりできるように、CLI が無視ルールをどのように保存するかを理解しておくことが重要です。
YAML の基本構造:
exclusions:
{scanTypeName}:
{ignoringType}:
- someIgnoringValue1
- someIgnoringValue2
scanTypeName に指定できる値:iac、sca、sast、secret。
ignoringType に指定できる値:paths、values、rules、packages、shas、cves。
警告
「値による無視」の値はプレーンテキストでは保存されません! CLI は値の sha256 ハッシュを保存します。 設定ファイルを手動で変更する場合は、文字列のハッシュを指定してください。
実際の config.yaml の例:
exclusions:
iac:
rules:
- bdaa88e2-5e7c-46ff-ac2a-29721418c59c
sca:
packages:
- [email protected]
secret:
paths:
- /Users/name/projects/build
rules:
- ce3a4de0-9dfc-448b-a004-c538cf8b4710
shas:
- a44081db3296c84b82d12a35c446a3cba19411dddfa0380134c75f7b3973bff0
values:
- a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3
- 60303ae22b998861bce3b28f33eec1be758a213c86c93c076dbe9f558c11c752
レポートコマンド
SBOM レポートの生成
ソフトウェア部品表(SBOM)は、アプリケーションの開発と提供に関わるすべての構成コンポーネントとソフトウェア依存関係の一覧です。 このコマンドを使用すると、ローカルプロジェクトまたはリポジトリ URI の SBOM レポートを作成できます。
このコマンドでは、次のオプションを使用できます。
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-f, --format [spdx-2.2|spdx-2.3|cyclonedx-1.4] | SBOM 形式 | はい | |
-o, --output-format [JSON] | 出力ファイル形式を指定します | いいえ | json |
--output-file PATH | 出力ファイル | いいえ | 現在のディレクトリに保存される自動生成ファイル名 |
--include-vulnerabilities | 脆弱性を含めます | いいえ | False |
--include-dev-dependencies | 開発用依存関係を含めます | いいえ | False |
このコマンドでは、次のコマンドを使用できます。
| コマンド | 説明 |
|---|---|
path | コマンドで指定したパスの SBOM レポートを生成します |
repository-url | コマンドで指定したリポジトリ URI の SBOM レポートを生成します |
リポジトリ
リポジトリ URI の SBOM レポートを作成するには、次を実行します:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> repository_url <repository url>
例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies repository_url https://github.com/cycodehq/cycode-cli.git
ローカルプロジェクト
パスの SBOM レポートを作成するには、次を実行します:
cycode report sbom --format <sbom format> --include-vulnerabilities --include-dev-dependencies --output-file </path/to/file> path </path/to/project>
例:
cycode report sbom --format spdx-2.3 --include-vulnerabilities --include-dev-dependencies path /path/to/local/project
path サブコマンドでは、次の追加オプションを使用できます:
| オプション | 説明 |
|---|---|
--no-restore | ロックファイルの復元をスキップし、直接依存関係のみをスキャンします。詳細については、ロック復元オプションを参照してください。 |
--gradle-all-sub-projects | すべてのサブプロジェクトに対して Gradle の復元コマンドを実行します(複数プロジェクトの Gradle ビルドのルートから使用してください)。 |
--maven-settings-file | Maven のみ。依存関係ツリーの構築時に、カスタムの settings.xml ファイルを使用できます。 |
インポートコマンド
SBOM のインポート
ソフトウェア部品表(SBOM)は、アプリケーションの開発と提供に関わるすべての構成要素とソフトウェア依存関係の一覧です。 このコマンドを使用すると、ファイルシステムから Cycode に SBOM ファイルをインポートできます。
このコマンドでは、次のオプションを使用できます:
| オプション | 説明 | 必須 | デフォルト |
|---|---|---|---|
-n, --name TEXT | SBOM の表示名 | はい | |
-v, --vendor TEXT | SBOM を提供した組織の名前 | はい | |
-l, --label TEXT | SBOM にラベルを付けます | いいえ | |
-o, --owner TEXT | この SBOM の連絡窓口となる Cycode ユーザーのメールアドレス | いいえ | |
-b, --business-impact [High | Medium | Low] | ビジネスへの影響 | いいえ | Medium |
例:
cycode import sbom --name example-sbom --vendor cycode -label tag1 -label tag2 --owner [email protected] /path/to/local/project
スキャンログ
すべての CLI スキャンは Cycode に記録されます。ログは Settings > CLI Logs で確認できます。
構文ヘルプ
任意のコマンドにいつでも --help 引数を追加すると、利用可能なオプションとその構文を表示するヘルプメッセージを確認できます。
一般的なヘルプを表示するには、次のコマンドを入力します。
cycode --help
スキャンのオプションを表示するには、次のコマンドを入力します。
cycode scan --help
特定の種類のスキャンで利用可能なオプションを表示するには、次のコマンドを入力します。
cycode scan {{option}} --help
たとえば、パススキャンで利用可能なオプションを表示するには、次のコマンドを入力します。
cycode scan path --help
ignore スキャン機能で利用可能なオプションを表示するには、次のコマンドを使用します。
cycode ignore --help
レポートで利用可能なオプションを表示するには、次のコマンドを使用します。
cycode report --help
特定の種類のレポートで利用可能なオプションを表示するには、次のコマンドを入力します。
cycode scan {{option}} --help
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。