はじめに
個人開発でも業務開発でも、READMEの更新はつい後回しにしがちです。
機能追加をしたあとに、
- 起動方法が変わった
- 環境変数が増えた
- ディレクトリ構成が変わった
- セットアップ手順が古くなった
- テスト実行方法を書き忘れた
みたいなことがよくあります。
READMEは大事だと分かっているのですが、実装が終わると満足してしまい、更新を忘れます。
そこで今回は、Cursor CLIとVSCodeの tasks.json を使って、README更新をVSCodeのタスクとして実行できるようにしてみました。
やりたいこと
今回やりたいことはシンプルです。
VSCodeのコマンドパレットからタスクを実行すると、Cursor CLIが動いてREADMEを更新してくれる、という構成にします。
イメージは以下です。
VSCode tasks.json
↓
Tasks: Run Task
↓
Cursor CLI
↓
agent "READMEを更新して..." --model "モデル名" --print --force --trust
↓
README.md が更新される
毎回ターミナルに長いコマンドを打つのではなく、VSCodeのタスクとして登録しておくのがポイントです。
Cursor CLIでREADME更新を依頼する
まず、Cursor CLIでREADME更新を依頼するコマンドは以下のような形です。
agent "このプロジェクトの構成を確認し、README.mdを更新してください。セットアップ手順、起動方法、テスト実行方法、主要ディレクトリ構成を初心者にも分かるように整理してください。" --model claude-4.6-sonnet-medium-thinking --print --force --trust
このコマンドを毎回手で入力するのは少し面倒です。
特に、以下のようなオプションを毎回書くのが地味に手間です。
--model claude-4.6-sonnet-medium-thinking --print --force --trust
そこで、このコマンドを tasks.json に登録します。
tasks.jsonとは
tasks.json は、VSCodeで任意のコマンドをタスクとして登録できる設定ファイルです。
通常は、以下のような用途で使うことが多いと思います。
- ビルド
- テスト
- Lint
- npm scriptsの実行
- 任意のシェルコマンド実行
今回はこの仕組みを使って、Cursor CLIの実行をタスク化します。
.vscode/tasks.jsonを作成する
プロジェクト直下に .vscode/tasks.json を作成します。
ディレクトリ構成は以下のようなイメージです。
sample-project/
├── .vscode/
│ └── tasks.json
├── src/
├── package.json
└── README.md
README更新タスクを登録する
まずは一番シンプルな形で、README更新タスクを登録します。
{
"version": "2.0.0",
"tasks": [
{
"label": "[AI] READMEを更新",
"type": "shell",
"command": "agent",
"args": [
"このプロジェクトの構成を確認し、README.mdを更新してください。セットアップ手順、起動方法、テスト実行方法、主要ディレクトリ構成を初心者にも分かるように整理してください。",
"--model",
"claude-4.6-sonnet-medium-thinking",
"--print",
"--force",
"--trust"
],
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
}
]
}
これで、VSCodeからREADME更新タスクを実行できるようになります。
実行方法
VSCodeで以下を実行します。
Ctrl + Shift + P
コマンドパレットが開いたら、以下を選択します。
Tasks: Run Task
その後、登録したタスクを選択します。
[AI] READMEを更新
すると、VSCodeのターミナル上でCursor CLIが実行されます。
ただ、毎回コマンドパレットを開いてタスクを選択するのも少し手間です。
個人的には、VSCode拡張機能の Task Manager を入れておくと便利でした。
Task Managerを使うと、登録済みのタスクをサイドバーなどから確認し、クリックで実行できます。
今回のように、tasks.json にAI用のタスクを複数登録していく場合、
[AI] READMEを更新
[AI] git差分をレビュー
[AI] テスト観点を洗い出す
のようなタスクを一覧で見ながら実行できるので、コマンドパレットから毎回探すよりも使いやすいです。
VSCode標準の「Tasks: Run Task」でも十分使えますが、AI用タスクを日常的に使うなら、Task Managerのような拡張機能を入れておくと運用しやすくなると思います。
tasks.jsonの中身を見ていく
今回の設定を少し分解して見ていきます。
label
"label": "[AI] READMEを更新"
タスク一覧に表示される名前です。
コマンドパレットから実行するときに分かりやすい名前にしておくと便利です。
今回はAIを使うタスクだと分かるように [AI] を付けています。
type
"type": "shell"
シェルコマンドとして実行する指定です。
今回は agent コマンドを実行したいので、shell にしています。
command
"command": "agent"
実行するコマンドです。
Cursor CLIの agent コマンドを指定しています。
args
"args": [
"このプロジェクトの構成を確認し、README.mdを更新してください。セットアップ手順、起動方法、テスト実行方法、主要ディレクトリ構成を初心者にも分かるように整理してください。",
"--model",
"claude-4.6-sonnet-medium-thinking",
"--print",
"--force",
"--trust"
]
agent コマンドに渡す引数です。
実際には、以下のようなコマンドを実行しているイメージです。
agent "このプロジェクトの構成を確認し、README.mdを更新してください。セットアップ手順、起動方法、テスト実行方法、主要ディレクトリ構成を初心者にも分かるように整理してください。" --model claude-4.6-sonnet-medium-thinking --print --force --trust
長いコマンドを tasks.json に閉じ込められるので、毎回手入力しなくて済みます。
presentation
"presentation": {
"reveal": "always",
"panel": "new"
}
タスク実行時のターミナル表示に関する設定です。
reveal: "always" にすると、タスク実行時にターミナルを表示します。
Cursor CLIの実行結果を確認したいので、今回は常に表示する設定にしています。
panel: "new" にすると、毎回新しいターミナルパネルで実行されます。
前回の実行結果と混ざりにくいので、AI系のタスクでは見やすいです。
problemMatcher
"problemMatcher": []
problemMatcher は、ビルドエラーやLintエラーなどをVSCodeの「問題」パネルに紐づけるための設定です。
今回はREADME更新用のAIタスクなので、特に問題マッチャーは使いません。
そのため、空配列にしています。
プロンプトを少し改善する
最初のプロンプトでも動きますが、もう少し実用寄りにするなら、READMEに含めてほしい内容を明示したほうが安定します。
例えば、以下のようなプロンプトにします。
このプロジェクトの構成を確認し、README.mdを更新してください。
READMEには以下を含めてください。
- プロジェクト概要
- 使用技術
- セットアップ手順
- 起動方法
- テスト実行方法
- 主要ディレクトリ構成
- 環境変数が必要な場合はその説明
- 開発時の注意点
既存のREADME.mdがある場合は、内容を活かしつつ、古い情報や不足している情報を補完してください。
初心者がこのREADMEだけを見てローカルで起動できる状態を目指してください。
これを tasks.json に入れると、以下のようになります。
{
"version": "2.0.0",
"tasks": [
{
"label": "[AI] READMEを更新",
"type": "shell",
"command": "agent",
"args": [
"このプロジェクトの構成を確認し、README.mdを更新してください。\n\nREADMEには以下を含めてください。\n\n- プロジェクト概要\n- 使用技術\n- セットアップ手順\n- 起動方法\n- テスト実行方法\n- 主要ディレクトリ構成\n- 環境変数が必要な場合はその説明\n- 開発時の注意点\n\n既存のREADME.mdがある場合は、内容を活かしつつ、古い情報や不足している情報を補完してください。\n初心者がこのREADMEだけを見てローカルで起動できる状態を目指してください。",
"--model",
"claude-4.6-sonnet-medium-thinking",
"--print",
"--force",
"--trust"
],
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
}
]
}
これで、README更新時の観点を固定できます。
入力値を使って少し汎用化する
もう少し便利にするなら、inputs を使って実行時に値を入力できるようにします。
例えば、更新対象のファイル名や、READMEの詳しさを選べるようにします。
{
"version": "2.0.0",
"tasks": [
{
"label": "[AI] READMEを更新",
"type": "shell",
"command": "agent",
"args": [
"このプロジェクトの構成を確認し、${input:targetFile} を更新してください。\n\n更新方針: ${input:updateLevel}\n\n以下の観点を含めてください。\n\n- プロジェクト概要\n- 使用技術\n- セットアップ手順\n- 起動方法\n- テスト実行方法\n- 主要ディレクトリ構成\n- 環境変数が必要な場合はその説明\n- 開発時の注意点\n\n既存の内容はできるだけ活かしつつ、古い情報や不足している情報を補完してください。\n初心者がこのドキュメントだけを見てローカルで起動できる状態を目指してください。",
"--model",
"claude-4.6-sonnet-medium-thinking",
"--print",
"--force",
"--trust"
],
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
}
],
"inputs": [
{
"id": "targetFile",
"type": "promptString",
"description": "更新対象のファイルを入力してください",
"default": "README.md"
},
{
"id": "updateLevel",
"type": "pickString",
"description": "READMEの更新方針を選択してください",
"options": [
"簡潔に整理する",
"初心者向けに詳しく整理する",
"既存の内容を崩さず不足分だけ補完する"
],
"default": "初心者向けに詳しく整理する"
}
]
}
この設定にすると、タスク実行時に以下を入力・選択できます。
- 更新対象ファイル
- READMEの更新方針
例えば、以下のように使い分けられます。
README.md を初心者向けに詳しく整理する
または、
docs/setup.md を既存の内容を崩さず不足分だけ補完する
tasks.json だけでも、意外と柔軟にできます。
実際に使ってみて便利だった点
README更新の心理的ハードルが下がる
README更新は、地味に面倒です。
ただ、タスク化しておくと、
Tasks: Run Task
↓
[AI] READMEを更新
だけで実行できます。
「あとでREADME更新しよう」と思って忘れるより、実装後にすぐタスクを実行するほうが楽です。
プロンプトを毎回考えなくていい
READMEを更新するときに、毎回プロンプトを考える必要がありません。
あらかじめ tasks.json に観点を書いておけば、毎回同じ基準でREADMEを更新できます。
例えば、以下のような観点を固定できます。
- セットアップ手順
- 起動方法
- テスト実行方法
- ディレクトリ構成
- 環境変数
- 開発時の注意点
プロンプトの抜け漏れが減るのが良いです。
チームでも共有しやすい
.vscode/tasks.json をリポジトリに含めれば、チームメンバーも同じタスクを使えます。
README更新の観点をチームでそろえられるので、個人ごとにREADMEの書き方がバラバラになるのを少し防げます。
もちろん最終的なレビューは必要ですが、「最低限この観点は入れる」という土台を共有できるのは便利です。
注意点
AIの変更内容は必ず確認する
Cursor CLIでREADMEを更新したあとは、必ず差分を確認します。
git diff README.md
AIが生成した内容が必ず正しいとは限りません。
特に、以下のような点は人間が確認したほうがよいです。
- 実際には存在しないコマンドを書いていないか
- 環境変数名が間違っていないか
- 起動手順が実際に動くか
- ディレクトリ構成が現状と合っているか
- 古い情報が残っていないか
READMEはプロジェクトの入口になるので、AIに任せきりにせず、最後は人間が確認する前提で使うのがよいです。
--force と --trust は慎重に使う
今回の例では、以下のオプションを使っています。
--force --trust
確認を省略して処理を進めやすくなるため便利ですが、AIがファイルを変更する可能性がある場合は注意が必要です。
いきなり本番プロジェクトで使うのではなく、まずは検証用のリポジトリや影響の少ないプロジェクトで試すのがよいと思います。
機密情報を含めない
README更新のためにプロジェクト全体を確認させる場合、機密情報の扱いには注意が必要です。
例えば、以下のような情報を不用意に含めないようにします。
- APIキー
- パスワード
- 個人情報
- 社外秘の接続情報
- 本番環境の認証情報
業務で使う場合は、社内ルールや利用可能な範囲を確認したうえで使う必要があります。
Cursor CLIのオプションについて
今回使ったコマンドは以下です。
agent "プロンプト文字列" --model claude-4.6-sonnet-medium-thinking --print --force --trust
環境やCursor CLIのバージョンによっては、非対話実行で以下のように -p を使う形式の場合もあります。
agent -p "プロンプト文字列" --model claude-4.6-sonnet-medium-thinking
自分の環境で使えるオプションは、以下で確認しておくと安心です。
agent --help
他にも使えそうなタスク
今回はREADME更新を例にしましたが、同じ考え方で他のAI作業もタスク化できます。
例えば、以下のようなタスクです。
[AI] git差分をレビュー
[AI] テスト観点を洗い出す
[AI] エラー原因を調査
[AI] コメントを追加
[AI] リファクタリング方針を提案
例として、git差分レビュー用のタスクを書くなら以下のようになります。
{
"label": "[AI] git差分をレビュー",
"type": "shell",
"command": "agent",
"args": [
"現在のgit差分を確認し、バグ、セキュリティ、可読性、保守性、テスト不足の観点でレビューしてください。問題がある場合は、修正案も提示してください。",
"--model",
"claude-4.6-sonnet-medium-thinking",
"--print",
"--force",
"--trust"
],
"presentation": {
"reveal": "always",
"panel": "new"
},
"problemMatcher": []
}
README更新のような軽い作業から始めて、慣れてきたらレビューやテスト観点の洗い出しにも広げていくと良さそうです。
まとめ
README更新は大事ですが、毎回忘れがちです。
そこで、Cursor CLIとVSCodeの tasks.json を組み合わせて、README更新をタスク化してみました。
今回の構成は以下です。
VSCode tasks.json
↓
Tasks: Run Task
↓
Cursor CLI
↓
agent "READMEを更新して..." --model "モデル名" --print --force --trust
↓
README.md が更新される
tasks.json はビルドやテストだけでなく、AI作業を呼び出すランチャーとしても使えると感じました。
特によかったのは、以下の点です。
- 毎回Cursor CLIのコマンドを打たなくてよい
- README更新用のプロンプトを固定できる
- コマンドパレットから実行できる
- チームで同じタスクを共有しやすい
まずはREADME更新のような軽い作業をタスク化するだけでも、かなり便利です。
さらに複雑なことをやりたくなったら、Pythonなどでスクリプトを組むともっと便利になりそうです。
例えば、以下のような処理まで自動化できます。
- 入力ファイルの読み込み
- プロンプトの自動生成
- 生成結果の保存
- MarkdownからHTMLやdocxへの変換
- 実行ログの保存
- 複数タスクの連続実行
最初から大きな仕組みにせず、まずは tasks.json で小さく始めて、必要になったらスクリプト化するくらいがちょうどよさそうです。