LV.1
EXP 0/1000
◀ 用語一覧
NO.14

💻 Copilot CLI

一言で

Copilot CLI は、ターミナルの中にいる Copilot。

基本は VS Code の Copilot と同じように、質問・計画・編集・実行を手伝う。ただし CLI ならではの機能と Harness があるので、ここから一緒に見ていく。

IDE から離れずに使う Copilot ではなく、シェルの作業文脈 の中で動く Copilot。

主要機能

ターミナル一枚に、フルスタックの AI 環境が乗る。

  • 複数ファイルの文脈把握:リポジトリ全体を一つのワークスペースとして扱う。
  • コード生成・編集:ターミナルから修正し、差分を確認して承認できる。
  • コマンド実行:ビルド・テスト・lint などを実行し、結果を読んで次に進む。
  • IDE を選ばない:VS Code、Vim、SSH 先など、ターミナルがあれば使える。
  • Skills / MCP 対応:必要な能力や外部ツールを追加できる。
  • 非対話実行:CI、cron、script から copilot -p "..." で実行できる。

CLI と VS Code Chat の違い

Copilot CLIVS Code Chat
UIとても軽い。ターミナル中心なので、コマンドを覚える必要があり、エディタ UI は最小限。一方で CLI をすぐ開けるので、folder、PowerPoint、Excel など手元の computer resource に対して作業しやすい。画面上で選択肢・設定・ファイル移動・inline diff・debugger を扱いやすい。
新機能の速さ/chronicle/fleet/share、Rubber Duck など、新しい実験が入りやすい。より安定志向。CLI で育った良いアイデアを取り込んでいくことが多い。
Sub-agentExplore、Task、Rubber Duck、Code Review など、built-in agent を多く持ち、native に起動できる。現時点では限定的だが、少しずつ追いついている。
Session management/context/compact/session などで、session を細かく制御しやすい。改善中だが、今は CLI ほど細かくはない。
Third-party agentCopilot CLI は Copilot の Harness 内で動く。Codex / Claude の Harness は使えず、使えるのはそれらの modelVS Code 内では、Copilot、Codex、Claude などの agent / extension を切り替えやすい。
Index主に greprg、workspace command などの terminal/search tool を使う。Blackbird など、エディタ側の richer index を使える。

強力なビルトインエージェント

Copilot CLI には、よくあるタスク向けの標準エージェントが用意されている。

エージェント説明
Exploreコードをメインの文脈に追加せず、素早くコードベースを分析し、コードについて質問できるようにする。
Taskテストやビルドなどのコマンドを実行し、成功時は短い要約、失敗時は完全な出力を返す。
General purposeすべてのツールと高度な推論が必要な複雑な複数ステップのタスクを、メイン会話とは別の文脈で処理する。
Code review本当に重要な問題だけを見つけることに集中してコード変更をレビューし、ノイズを最小化する。
Researchコードベース、関連リポジトリ、Web を横断して深く調査し、引用付きの詳細レポートを作成する。
Rubber duck複雑なタスクに対して建設的な批評役としてフィードバックを返す。Copilot CLI が自動的に使う。

Rubber Duck — クロスモデルレビュー

🦆 Experimental:メインモデルとは 異なるモデルファミリー が「セカンドオピニオン」として、計画・実装・テストの各段階で独立レビュー。

flowchart LR
  User([👤 開発者])
  Main["🧠 Main Model<br/>例: Claude"]
  Out["📝 計画 / 実装 / テスト"]
  Duck["🦆 Rubber Duck<br/>例: GPT-5.4"]
  Final([✅ 検証済み出力])
  User --> Main
  Main --> Out
  Out -->|"独立レビュー"| Duck
  Duck -->|"盲点 / 前提誤り"| Main
  Main --> Final

  classDef user fill:#0a1a14,stroke:#9bbc0f,color:#9bbc0f,stroke-width:2px
  classDef main fill:#0a0e27,stroke:#00f0ff,color:#00f0ff,stroke-width:2px
  classDef duck fill:#1a1500,stroke:#ffb000,color:#ffb000,stroke-width:2px
  classDef out fill:#1a0a2e,stroke:#ff2e88,color:#ff2e88,stroke-width:2px
  class User,Final user
  class Main main
  class Duck duck
  class Out out

なぜ効く? ── 同じモデルが自分の出力をチェックすると、同じ前提・同じ盲点 に引っかかる。別ファミリーのモデルなら、訓練データも価値観も違うので 見えていなかったロジックエラー を拾える。

その他の便利コマンド

CLI は slash command で、モデル・共有・実験機能・環境情報などをすぐ確認できる。

コマンド使いどころ
/help利用できるコマンドやショートカットを確認する。
/model使用するモデルを確認・切り替える。
/ideVS Code などの IDE と接続する。
/share現在のセッションを共有する。
/experimental実験的な機能を確認・有効化する。
/chronicleセッションの流れや作業履歴を確認する。
/taskbackground で動いている agent や task を確認する。
/ask作業を進める前に、質問として Copilot に相談する。
/envCLI が見ている環境情報を確認する。

非対話モード(プログラマティック実行)★

Copilot CLI は 対話セッションを開かずに 1 コマンドで実行 できる。copilot -p "..." でプロンプトを渡せばその場で 1 ターンだけ動いて exit する。

シェルスクリプト・cron・バッチファイルGitHub Actions から呼べるため、定型業務の自動化や PR の自動レビューなど「人がやらなくていい作業」を Copilot に任せられる。

🎯 「対話 UI で毎日同じことを聞いている」と感じたら、それは スクリプト化のサイン-pcron に乗せて寝てる間にやらせる。

基本の使い方

# プロンプトを直接渡す
copilot -p "Explain this file: ./complex.ts"

# パイプから流す
echo "Explain this file: ./complex.ts" | copilot
よく使うフラグ何をする
-p "..." / --prompt "..."プロンプトを渡して 1 ターンで終了
-s (silent)メタデータを抑制し 応答テキストのみ を stdout に出す(変数代入・パイプに最適)
--no-ask-userclarifying question を出さず、不明点があれば自分で判断して進む
--allow-tool='shell(npm:*), write'必要なツールだけ 許可(原則これ。--allow-all はサンドボックスのみ)
--allow-url=...取得を許可する URL を絞る
--model gpt-5.5モデルを固定して結果のブレを抑える
--share='./report.md'セッション全体を Markdown で保存
--share-gistセッションを Gist に上げる(EMU・data residency org は不可)

🔒 権限は最小に。CI で動かすなら --allow-tool でホワイトリスト指定が鉄則。--allow-all は危険なので使わない。 💰 1 コール = Copilot premium request を 1 つ消費。バッチで何百回叩く場合は Copilot Metrics ↗ で消費を見ておく。

業務効率化の具体例

ユースケースコマンド
📝 コミットメッセージ生成copilot -p 'Write a commit message for the staged changes' -s --allow-tool='shell(git:*)'
📚 README / JSDoc を一括生成copilot -p 'Generate JSDoc for all exported fns in src/api/' --allow-tool=write
🐛 lint エラーをまとめて修正copilot -p 'Fix all ESLint errors' --allow-tool='write, shell(npm:*), shell(npx:*)'
🧪 テスト未整備モジュールにテストを書くcopilot -p 'Write unit tests for src/utils/validators.ts' --allow-tool='write, shell(npm:*)'
🔍 PR の AI レビューcopilot -p '/review changes vs main. Focus on bugs & security' -s --allow-tool='shell(git:*)'
🔐 依存ライブラリの脆弱性監査copilot -p "Audit this project's deps for vulnerabilities" --allow-tool='shell(npm:*)' --share='./audit.md'
📰 リリースノート作成copilot -p 'Summarize commits since v1.2.0 as Japanese release notes' -s --allow-tool='shell(git:*)'
🌏 ドキュメントの翻訳for f in docs/en/*.md; do copilot -p "Translate $f to Japanese, preserve markdown" -s > "docs/ja/$(basename $f)"; done

シェルスクリプトでよく使うパターン

変数に取り込む

node_version=$(copilot -p 'What Node.js version does this project require? Number only.' -s)
echo "Required: $node_version"

条件分岐に使う

if copilot -p 'Does this project have TypeScript errors? Reply only YES or NO.' -s | grep -qi "no"; then
  echo "✅ Clean"
else
  echo "❌ Type errors detected" && exit 1
fi

複数ファイルを順に処理

for file in src/api/*.ts; do
  echo "--- Reviewing $file ---" | tee -a review.md
  copilot -p "Review $file for error handling issues" -s \
    --allow-tool='shell(git:*)' | tee -a review.md
done

GitHub Actions に乗せる

- name: Generate test coverage report
  env:
    COPILOT_GITHUB_TOKEN: ${{ secrets.COPILOT_PAT }}
  run: |
    copilot -p "Run the test suite and produce a coverage summary" \
      -s --allow-tool='shell(npm:*), write' --no-ask-user
  • 🔑 認証は環境変数 で渡す。優先順は COPILOT_GITHUB_TOKENGH_TOKENGITHUB_TOKEN
  • 🧾 PAT は fine-grained (v2)“Copilot Requests” 権限 を付ける(古い ghp_ 形式は不可)
  • 📦 cron / Jenkins / GitLab CI からも同じ要領で呼び出せる(認証だけ環境変数で渡す)

設計のコツ

  • 🎯 プロンプトは具体的に — ファイル名・関数名・期待する形式を明示。「Number only.」「Reply YES or NO.」のように 出力フォーマットも指定 すると後段でパースしやすい
  • 🛡️ 必要なツールだけ許可--allow-tool='shell(git:*), write' のように対象を絞る
  • 🔁 冪等性を意識 — Actions に乗せる場合、同じ入力で何度走っても安全な操作に限定する(commit/push は人間レビューを挟む)
  • 📊 ログを残す--share='./session.md' でセッション全体を保存しておくと、結果の根拠を後で追える
  • 🧩 対話モードで作って -p に移植 — まず interactive で動かしてプロンプトを煮詰め、固まったら -p でスクリプト化、が一番早い

📘 詳細: