こんにちは!日々のコーディング、本当にお疲れ様です。
突然ですが、皆さん、最近話題のAI特化型エディタ「Cursor」はもう触ってみましたか?
「VS Codeの操作感そのままに、AIがコードをごりごり書いてくれる優れもの」という印象を持っている方が多いかもしれませんが、実はCursorの真骨頂は、複数ファイルを同時に自由自在に書き換える最強の機能『Composer(Ctrl + I または Cmd + I)』にあります。
画面に向かって「この仕様でリモートAPI連携のモジュールを作って」と指示するあの体験は、一度味わうと普通の開発には戻れなくなるほどの魔力を持っていますよね。
さて、ここで優秀なエンジニアであるあなたなら、こう思うはずです。
「この神機能、わざわざマウスやキーボードでGUIをポチポチ叩かなくても、ターミナル(CLI)から直接ぶん投げられたら、夜間のバッチ処理や定型タスクの自動化が捗るのに……!」 と。
ネットを検索しても「マニュアル通りのGUI操作」ばかりが出てきて物足りなさを感じているあなたのために、今回はCursorのComposerをCLIから非公式に、しかし極めて実用的にハックし、自動化スクリプトやMakefileに組み込む上級者向けフローを、優しく丁寧に紐解いていきます。
これをマスターすれば、あなたの開発自動化パイプラインは一段上のステージへと駆け上がりますよ。ぜひ最後までついてきてくださいね!
—
1. CursorとComposerの「本質」を理解する
まずは、これから私たちが操ろうとする「Cursor」と「Composer」が、内部でどう動いているのかの解像度を上げておきましょう。
Cursorの本質は、スタンドアロンのAIエディタではありません。「VS Codeのオープンソース版(Code – OSS)をフォークし、そのエディタの全イベントとAST(抽象構文木)構造、ワークスペースのコンテキストを、自社の強力なLLMオーケストレーション層にリアルタイムで流し込んでいる特異なプロダクト」です。
そしてComposerは、単なるチャットボット(Copilot Chatのようなもの)とは一線を画します。
- 複数のファイルパスを同時に認識する
- 変更差分(Diff)を各ファイルに対してトランザクション的に適用する
- エラーが発生した際に自分でコンパイルエラーを検知して修正を試みる
この強力な機能は通常、ElectronベースのGUIウィンドウ上で動くチャットUIを介してトリガーされます。しかし、開発者であれば「これをシェルスクリプトからAPIやCLI経由で叩きたい」と考えるのはごく自然な欲求です。
公式にはまだ完全なパブリックCLI APIとして公開されていませんが、Cursor(VS Codeベース)のアーキテクチャと、OSのプロセス制御を組み合わせることで、「CLIからのタスク投入・バックグラウンド実行」を完全にハックすることが可能です。
—
2. 基礎セットアップ:CLIからCursorを正確に制御するための準備
まずは、OSのターミナルからCursorの内部コマンドを自由に取り扱える状態を作ります。
コマンドラインツールの有効化
Cursorがインストールされている前提で、まずはターミナルから `cursor` コマンドがグローバルに引けることを確認してください。もし引けない場合は、CursorのGUI画面で `Cmd + Shift + P`(Windowsは `Ctrl + Shift + P`)を押し、以下を実行します。
> コマンドパレットでの実行:
> `Shell Command: Install ‘cursor’ command in PATH`
これで、ターミナルから `cursor .` のように叩くだけで、現在のディレクトリをプロジェクトとしてCursorで開けるようになります。
—
3. 核心:CLIからComposerタスクを非同期・バックグラウンドで操る仕組み
ここからが本題です。
「GUIを開かずに、CLIからComposerに指示を与えてコードを自動生成させる」ためには、Cursorのウィンドウ制御と、ワークスペース内のプロンプト管理の自動化を組み合わせます。
今回は、実務で最も汎用性が高いアプローチとして、「特定のMarkdownファイルにタスクを自動記述し、それをトリガーにしてCursor(Composer)をヘッドレス、あるいは自動操作に近い形でバックグラウンド稼働させる仕組み」の構築法を解説します。
ステップ1: タスク定義用プロンプトテンプレートの作成
プロジェクトのルートディレクトリに `.cursor/tasks/` というディレクトリを掘り、自動化したい指示を流し込むためのテンプレートを用意します。
ファイルパス: `.cursor/tasks/auto-feature.template.md`
[AUTOMATED TASK] 以下の仕様に基づきコードを自動生成してください
対象要件
- タスクID: {{TASK_ID}}
- 概要: {{TASK_DESCRIPTION}}
実行制約
- 既存のテストケースを絶対に破壊しないこと
- プレースホルダーではなく、プロダクションクオリティのコードを書くこと
解説: このファイルに自動化スクリプトから「今夜中に実装してほしいタスクの内容」を動的に流し込みます。
ステップ2: バックグラウンド実行を制御するシェルスクリプト
次に、ターミナルからこのタスクファイルを生成し、Cursorを起動してComposerのワークフローに載せるための自動化シェルスクリプトを書きます。
ファイルパス: `scripts/run-composer-task.sh`
!/bin/bash
エラーが発生した時点でスクリプトを即座に停止(安全性の確保)
set -e
引数のチェック
if [ -z “$1” ]; then
echo “エラー: タスクの説明を引数に指定してください。”
echo “使用例: ./scripts/run-composer-task.sh ‘ユーザー認証APIのエンドポイントを追加する'”
exit 1
fi
TASK_DESC=”$1″
TASK_ID=$(date +%Y%m%d_%H%M%S)
TARGET_FILE=”.cursor/tasks/active_task.md”
echo “==> [1/3] タスクファイルを生成しています (ID: $TASK_ID)…”
テンプレートを元に、実際のタスクファイルを生成する
cat << EOF > “$TARGET_FILE”
[AUTOMATED TASK] 以下の仕様に基づきコードを自動生成してください
対象要件
- タスクID: $TASK_ID
- 概要: $TASK_DESC
実行制約
- 既存のテストケースを絶対に破壊しないこと
- プレースホルダーではなく、プロダクションクオリティのコードを書くこと
EOF
echo “==> [2/3] Cursorを対象ワークスペースで起動します…”
現在のディレクトリをCursorで開きつつ、アクティブタスクを読み込ませる
cursor . &
プロセスが立ち上がるまで少し待機(OSの負荷を考慮)
sleep 3
echo “==> [3/3] バックグラウンドプロセス連携が完了しました。”
echo “💡 ヒント: Cursor上で Cmd + I (Composer) を開き、@active_task.md を指して実行を指示してください。”
echo “(※OSの自動化ツール AppleScript / xdotool を併用すれば、このキーストロークすら完全に自動化できます)”
—
4. Makefileと組み合わせて「深夜のバッチ自動生成」を完結させる
上記のスクリプト単体でも強力ですが、これをプロジェクトの `Makefile` に組み込むことで、チーム開発全体のCI/CDや定型作業の自動化パイプラインに組み込むことができます。
ファイルパス: `Makefile`
.PHONY: help ai-task
デフォルトで実行されるヘルプタスク
help:
@echo “利用可能なコマンド:”
@echo ” make ai-task DESC=’実装したい内容’ : CursorのComposerタスクをセットアップします”
AIによるコード生成タスクのトリガー
ai-task:
@if [ “$(DESC)” = “” ]; then \
echo “エラー: DESC変数が必要です。”; \
echo “例: make ai-task DESC=’ログイン画面のバリデーション追加'”; \
exit 1; \
fi
@bash scripts/run-composer-task.sh “$(DESC)”
実際の実行ログ
ターミナルから以下のように叩くだけで、一連のコンテキスト準備が自動で行われます。
$ make ai-task DESC=”ユーザーの最終ログイン日時を記録するミドルウェアの実装”
==> [1/3] タスクファイルを生成しています (ID: 20260330_021500)…
==> [2/3] Cursorを対象ワークスペースで起動します…
==> [3/3] バックグラウンドプロセス連携が完了しました。
💡 ヒント: Cursor上で Cmd + I (Composer) を開き、@active_task.md を指して実行を指示してください。
—
5. さらに先へ:完全自動化(Headless)に向けたアーキテクチャの思考
「おいおい、最後のキーストローク(Composerの実行ボタンを押すところ)は人間がやるのかよ」と思いましたか?
鋭いですね。完全なヘッドレス(画面なし)でLLMにコードを書かせるアプローチとしては、CursorのGUIを無理やり操作するのではなく、裏で動いている言語モデルのAPIを直接叩く方法(AiderやClineなどのCLIファーストなAIコーディングエージェント)が適しています。
しかし、「Cursorの強力なコードベースインデックス(RAG)と、人間が普段使っているエディタ環境のコンテキストをそのまま利用したい」という実務上の要請において、今回紹介した「CLIでタスク定義を自動生成し、Cursorを立ち上げてComposerのインプットを準備する」というハイブリッド手法は、誤動作(ハルシネーションによる意図しない全ファイル書き換え)を防ぐための最高の「安全弁(ヒューマン・イン・ザ・ループ)」としても機能します。
AIが暴走して勝手にデプロイまでやってしまう事故を防ぎつつ、面倒なファイル作成やコンテキストの記述を一瞬で終わらせる。この絶妙なバランスこそが、現場のシニアエンジニアが愛用する実用的な自動化哲学です。
—
まとめ
今回は、Cursorの『Composer』をCLIから操り、バックグラウンドでのタスク準備とMakefile連携による自動化の裏側を解説しました。
- Cursorの本質は強力なコンテキストを持つVS Codeフォークであること
- CLIスクリプトを駆使して、タスクの指示書(Markdown)を動的生成するフロー
- Makefileと組み合わせて、開発フローにシームレスにAIタスクを組み込む方法
これをマスターすれば、毎日の面倒な定型コードのボイラープレート作成や、仕様書からの初期実装起こしが劇的に楽になりますよ。ぜひ、あなたのプロジェクトでも試してみてくださいね。
明日の開発が、少しでもワクワクするものになりますように。それではまた!