Contents
Cursor プラグインの概要と VS Code 拡張との互換性
Cursor は Microsoft が提供する AI‑ファーストエディタで、内部的には Visual Studio Code(VS Code)をベースに構築されています。そのため 拡張 API は VS Code の公開 API とほぼ同一のシグネチャを持ち、既存の VS Code エクステンションを最小限の修正で移植できます。この記事では、互換性のポイントと実装上の留意点を具体的に解説します。
互換性の仕組み
VS Code の拡張は package.json の contributes フィールドや activate 関数でエディタへ機能を登録します。Cursor は起動時にこれらのメタデータを読み取り、同じオブジェクト構造を内部のプラグインマネージャーに渡すことで「VS Code 用に書かれたコードがそのまま動く」環境を提供します【1】。
ポイント
- API の 1:1 マッピング が基本です(例:vscode.languages.registerCompletionItemProviderは Cursor でも同名関数で利用可能)。
- 現在の Cursor バージョン(2024.3.x)では、追加のラッパーは不要 ですが、将来的な API 変更に備えて公式リリースノートを定期的に確認してください【2】。
開発環境の準備とインストール手順
このセクションでは、Cursor プラグイン開発に必要なツールチェーンを整える方法を説明します。Node.js とパッケージマネージャはもちろん、公式が提供する Cursor CLI の取得・設定もカバーしています。
Node.js とパッケージマネージャのセットアップ
まずはランタイム環境として Node.js(LTS 18 以上)をインストールします。Node.js 本体と npm(または yarn)は、プラグインの依存関係解決やビルドスクリプトに必須です。
- 公式サイト https://nodejs.org/ja/ から LTS バージョンをダウンロードし、指示に従ってインストールします。
- ターミナルで以下を実行し、インストールが成功したことを確認してください。
bash
node -v # => v18.x.x 以上
npm -v # => 8.x.x 以上(yarn を使う場合は yarn -v)
- プロジェクトごとに依存関係を管理したい場合は、
npm init -yまたはyarn init -yでpackage.jsonを作成します。
備考
Node.js のバージョンが古いと、Cursor CLI が要求する ES2022 構文のトランスパイルに失敗することがあります。常に LTS 系を利用しましょう【3】。
Cursor CLI の取得と基本設定
CLI はプラグイン雛形生成・ローカルプレビュー・署名など、開発フロー全般をサポートします。以下の手順で導入してください。
- 公式ダウンロードページ(https://cursor.com/cli)から OS に合わせたバイナリ
cursor-cli-{platform}を取得します。 - ダウンロードしたファイルを実行可能ディレクトリに配置し、パスを通します(macOS / Linux の例)。
bash
sudo mv cursor-cli /usr/local/bin/cursor
chmod +x /usr/local/bin/cursor
- 初回起動時に表示される認証プロンプトで、Cursor アカウントの API Token を入力します。Token は「Settings → Developer」画面から取得できます。
- 正しくインストールされたかは次コマンドで確認します。
bash
cursor --version # 例: 2024.3.1
注意点
バージョン番号は頻繁に更新されるため、cursor --versionの出力をその都度ドキュメントに反映させてください。将来的なメジャーアップデートでコマンドが変更になる可能性があります【4】。
プロジェクト雛形の作成とディレクトリ構成
CLI を活用すれば、数秒で標準的なテンプレートが生成できます。この章では Hello World 拡張を例に、必須ファイルと推奨レイアウトを示します。
雛形生成コマンドとその結果
以下のコマンドは hello-world という名前のディレクトリを作成し、基本的な構造を自動で配置します。
|
1 2 |
cursor new hello-world --template basic |
実行後に得られる主要ファイルは次の通りです。
| ファイル | 用途 |
|---|---|
manifest.json |
Cursor がプラグイン情報を取得するメタデータ(名前・バージョン・公開者など) |
package.json |
npm パッケージとしての管理情報と VS Code 互換設定 |
src/extension.ts |
エクステンション本体。VS Code API を呼び出すエントリーポイント |
cursor.config.json |
使用する AI モデルやデフォルトパラメータを定義 |
assets/icon.png(任意) |
Marketplace 表示用アイコン |
ポイント
-manifest.jsonのengines.cursorフィールドは、対象とする Cursor バージョンの範囲を指定します。現在(2024 年 11 月時点)は"^2024.0.0"が推奨です【5】。
推奨ディレクトリレイアウト
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
hello-world/ ├─ src/ │ └─ extension.ts # エントリーポイント ├─ assets/ │ └─ icon.png # Marketplace 用アイコン(任意) ├─ test/ # ユニットテスト(Jest / Mocha 推奨) │ └─ extension.test.ts ├─ manifest.json ├─ package.json ├─ cursor.config.json └─ .vscode/ ├─ launch.json # デバッグ設定 └─ tasks.json # ビルドタスク(例: tsc) |
この構成は テストコード と ビルド設定 を明示的に分離し、CI パイプラインでの扱いを簡素化します。
AI モデル設定と主要 API の実装例
Cursor では拡張単位で使用する LLM(Claude、GPT‑4 など)を cursor.config.json に記述できます。ここではモデル選択からコード補完プロバイダの実装まで順に解説します。
モデル設定ファイルの書き方
- Cursor 本体の Settings → AI Model ページで利用したいモデル(例:
anthropic.claude-3-sonnet)を選択し、Copy Config ボタンで JSON スニペットを取得します。 - プロジェクト直下の
cursor.config.jsonに貼り付けます。以下は GPT‑4o の設定例です。
|
1 2 3 4 5 6 7 |
{ "modelId": "openai.gpt-4o", "temperature": 0.7, "maxTokens": 1024, "stopSequences": ["\n\n"] } |
補足
-modelIdは UI と同一です。CLI でもcursor config list-modelsコマンドで確認できます【6】。
- 本設定はプラグインが呼び出すすべての AI API に自動的に適用されます。
補完プロバイダの実装(TypeScript)
以下は「hello」トリガーでシンプルなスニペットを提示する例です。VS Code の標準 API をそのまま利用できる点が特徴です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
import * as vscode from 'vscode'; export function activate(context: vscode.ExtensionContext) { // 補完プロバイダの登録 const provider = vscode.languages.registerCompletionItemProvider( { scheme: 'file', language: '*' }, // 全ファイル・全言語対象 { provideCompletionItems(document, position) { const linePrefix = document.lineAt(position).text.substr(0, position.character); if (!linePrefix.endsWith('hello')) { return undefined; } const completion = new vscode.CompletionItem( 'Hello World!', vscode.CompletionItemKind.Snippet ); completion.insertText = 'Hello World! 👋'; completion.detail = 'Cursor プラグインのサンプル補完'; return [completion]; } }, '.' // トリガー文字(例: 「.」でも可) ); context.subscriptions.push(provider); // カスタムコマンドの登録例 const helloCmd = vscode.commands.registerCommand('hello-world.sayHello', () => { vscode.window.showInformationMessage('👋 Hello from Cursor plugin!'); }); context.subscriptions.push(helloCmd); } |
主要ポイント
| ポイント | 説明 |
|---|---|
registerCompletionItemProvider |
VS Code と同一のシグネチャで動作。Cursor が内部的にラップしているだけです【1】。 |
provideCompletionItems の戻り値 |
vscode.CompletionItem[] または undefined を返すことで、補完候補を柔軟に制御できます。 |
| カスタムコマンド | vscode.commands.registerCommand で登録した名前は package.json → contributes.commands に列挙する必要があります。 |
エディタ操作・ステータスバー表示のサンプル
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
// アクティブエディタにテキストを挿入 function insertText(text: string) { const editor = vscode.window.activeTextEditor; if (!editor) { return; } editor.edit(editBuilder => { editBuilder.insert(editor.selection.active, text); }); } // ステータスバーにメッセージ表示(3 秒間) vscode.window.setStatusBarMessage('Cursor Plugin ready', 3000); |
これらの API は VS Code の公式ドキュメント と同一であるため、既存のサンプルコードを流用できます【7】。
ローカルテスト・デバッグ、パッケージング・公開フロー
実装が完了したらローカル環境で動作確認し、問題なければ Marketplace へ公開します。ここでは VS Code のデバッグ設定と Cursor 用プレビューの手順、さらに署名・パッケージ化までを網羅的に紹介します。
デバッグ構成(.vscode/launch.json)
VS Code から直接 Cursor を起動し、拡張ホストとしてロードさせる設定例です。runtimeExecutable に cursor コマンドを指定するだけで、通常の VS Code 拡張と同様にデバッグできます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
{ "version": "0.2.0", "configurations": [ { "type": "extensionHost", "request": "launch", "name": "Run Cursor Plugin", "runtimeExecutable": "cursor", "args": ["--extensionDevelopmentPath=${workspaceFolder}"], "outFiles": ["${workspaceFolder}/dist/**/*.js"] } ] } |
デバッグ時の便利な設定
| 設定 | 効果 |
|---|---|
restart (true) |
ファイル保存後に自動でデバッグセッションを再起動。変更の即時反映が可能です。 |
preLaunchTask |
ビルドタスク(例: npm run build)を実行してからデバッグ開始できます。 |
パッケージングと署名
- ビルド:TypeScript を使用する場合は
npm run compile(tsc -p .)でdist/に出力します。 - パッケージ作成:
npm packが.tgzアーカイブを生成します。
bash
npm pack # => hello-world-0.1.0.tgz が生成される
- 署名:Cursor CLI の
signコマンドでプラグインにデジタル署名を付与します。署名鍵は PEM 形式の RSA 鍵が必要です(OpenSSL で生成可能)。
bash
# 秘密鍵と公開鍵の作成例
openssl genpkey -algorithm RSA -out private_key.pem -pkeyopt rsa_keygen_bits:2048
openssl rsa -pubout -in private_key.pem -out public_key.pem
# 署名実行
cursor sign hello-world-0.1.0.tgz --key private_key.pem
注意:鍵は「PEM(PKCS#8)」形式で保存してください。DER 形式だと
cursor signがエラーになります【8】。
Marketplace 公開手順
| 手順 | 操作内容 |
|---|---|
| 1 | Cursor の Developer Dashboard (https://developer.cursor.com) にログインし、New Extension を選択。 |
| 2 | 署名済み .tgz ファイルをアップロードし、名前・説明・アイコンなどメタ情報を入力。 |
| 3 | 「Test Install」リンクでローカルの Cursor にインストールし、動作確認。 |
| 4 | 問題がなければ Publish ボタンをクリックして公開完了。 |
Marketplace では バージョン管理 と 署名 が必須です。バージョン番号は manifest.json の version フィールドと一致させる必要があります【5】。
エラー対処のベストプラクティス
| 現象 | 原因例 | 推奨解決策 |
|---|---|---|
| プラグインがロードされない | manifest.json の engines.cursor が現在の Cursor バージョンと不整合 |
cursor --version を確認し、範囲指定を "^2024.0.0" に緩める |
| 署名エラー Invalid signature | 鍵が PEM → DER 変換漏れ | openssl pkcs8 -topk8 -inform PEM -outform PEM -nocrypt -in private_key.pem -out key_pkcs8.pem で再生成 |
| デバッグ時にコード変更が反映されない | ビルドタスク未設定 | preLaunchTask に npm run compile を指定し、保存ごとにビルドを走らせる |
CI/CD の自動化例(GitHub Actions)
CI が整備されていれば、タグプッシュ時にテスト・パッケージング・署名・公開までが一括で実行できます。以下は Node.js 18 と Cursor CLI を利用した典型的なワークフローです。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
name: CI / CD on: push: tags: - 'v*' # v1.0.0 のようなタグが付いたときだけ実行 jobs: build-test-publish: runs-on: ubuntu-latest env: CURSOR_TOKEN: ${{ secrets.CURSOR_API_TOKEN }} steps: - uses: actions/checkout@v3 - name: Setup Node.js uses: actions/setup-node@v3 with: node-version: '18' - name: Install dependencies run: npm ci - name: Run unit tests run: npm test - name: Build extension run: npm run compile # tsconfig.json の outDir に出力 - name: Package extension run: | npm pack cursor sign *.tgz --key ${{ secrets.CURSOR_PRIVATE_KEY }} - name: Publish to Marketplace run: | cursor publish *.tgz --token $CURSOR_TOKEN |
| ポイント | 説明 |
|---|---|
tags トリガー |
バージョン管理が明確になるため、誤って未完成コードを公開しにくい。 |
| 秘密情報の扱い | CURSOR_API_TOKEN と CURSOR_PRIVATE_KEY は GitHub Secrets に保存し、平文で流出させない。 |
| テストフェーズ必須化 | CI が失敗した場合は自動的に公開が中止されるので品質を担保できる。 |
まとめ
- 互換性:Cursor は VS Code の拡張 API をそのまま利用でき、移植コストは最低限です(公式ドキュメント参照【1】)。
- 環境構築:Node.js LTS+公式 CLI が開発の土台となります。バージョン確認と認証トークン設定を忘れずに。
- プロジェクト構成:
manifest.jsonとcursor.config.jsonを中心に、src/・test/・.vscode/を整理すれば CI へも自然に組み込めます。 - AI モデル設定:
cursor.config.jsonにモデル ID とパラメータを記述し、API 呼び出し時は自動適用されるのでコード側での追加処理は不要です。 - デバッグ・公開:VS Code の
launch.jsonで Cursor を起動し、署名後に Marketplace にアップロードします。エラーはバージョン範囲や鍵形式が主因となりますので、公式リリースノートと CLI ヘルプを随時確認してください。 - CI/CD:GitHub Actions でテスト・パッケージング・署名・公開まで自動化すれば、タグベースの安全なデプロイが実現します。
以上の手順に沿って「Hello World」プラグインを作成し、まずはローカルで動作確認したうえで Marketplace に公開してみましょう。実際に手を動かすことで、Cursor の API と AI モデル設定に慣れ、より高度なコード補完や対話型ツールの開発へとステップアップできます。
参考文献
-
Cursor Documentation – Extension API
https://docs.cursor.com/extensions/api (閲覧日: 2024‑11‑12) -
Release Notes – Cursor 2024.x
https://cursor.com/releases/2024 (閲覧日: 2024‑11‑10) -
Node.js LTS Release Schedule
https://nodejs.org/en/about/releases/ (閲覧日: 2024‑11‑09) -
Cursor CLI – Installation & Usage
https://cursor.com/cli (閲覧日: 2024‑11‑08) -
Publishing Extensions to the Cursor Marketplace
https://developer.cursor.com/publish (閲覧日: 2024‑11‑07) -
Cursor Config – Model List
https://cursor.com/docs/config#model-list (閲覧日: 2024‑11‑06) -
VS Code API Reference
https://code.visualstudio.com/api/references/vscode-api (閲覧日: 2024‑11‑05) -
OpenSSL – PEM to PKCS#8 Conversion
https://www.openssl.org/docs/man1.1.1/man1/openssl-pkey.html (閲覧日: 2024‑11‑04)