Skip to content

カスタムモード

VJSP は カスタムモード の作成をサポートしており、特定のタスクやワークフローに合わせて VJSP の動作をカスタマイズできます。カスタムモードには2種類あります:グローバルモード(すべてのプロジェクトで利用可能)と プロジェクト固有モード(現在のプロジェクト内でのみ有効)。

スティッキーモデル:ワークフロー効率の最適化

すべてのモード(カスタムモードを含む)には スティッキーモデル 機能が備わっています。これにより、VJSP は指定されたモード内で最後に使用したモデルを自動的に記憶・選択します。異なるタスクにそれぞれ好みのモデルを割り当てておくと、モード切り替え時に VJSP が自動的に適切なモデルに切り替えてくれるため、繰り返し手動で設定する必要がなくなります。

カスタムモードのコアバリュー

  • 専門的なカスタマイズ:「ドキュメントライター」、「テストエンジニア」、「リファクタリングエキスパート」など、特定のタスク向けに最適化されたモードを作成できます。

  • セキュリティ制御:モードの機密ファイルやコマンドへのアクセスを制限できます。たとえば、「コードレビュー モード」を読み取り専用に設定して、誤った変更を防ぐことができます。

  • 実験的検証:他のモードに影響を与えることなく、さまざまなプロンプトや設定の組み合わせを安全に試せます。

以下のセクションでは、カスタムモードの作成・管理に関する VJSP のインターフェースについて説明します。

カスタムモードのコア設定オプション

カスタムモードはいくつかのコア属性によって定義されます。これらの概念を理解することで、VJSP の動作を正確にカスタマイズできます。

UIフィールド / YAML 設定キー機能的説明
Slug (slug)モードの 一意な内部識別子。VJSP はこのフィールドを使ってモードを認識し、特にモード固有の指示ファイルとの関連付けに使用します。
Name (name)VJSP のユーザーインターフェースに表示される名前。読みやすく、明確に内容が伝わるようにしてください。
Description (description)モードの目的を示すユーザーフレンドリーな概要。モード選択画面に表示されます。簡潔に、モードの主な機能を強調してください。
Role Definition (roleDefinition)モードの コアとなる役割と専門性 を定義します。このテキストはシステムプロンプトの先頭に挿入され、このモードにおける VJSP の行動スタイルや能力を決定します。
Tool Groups (groups)モードが使用可能なツールグループおよびファイルアクセス権限を指定します。チェックされたツールカテゴリに対応します。
When to Use (whenToUse)(任意)VJSP の自動判断のためのガイダンスを提供します。特に自動モード選択やコーディネーターモードによるタスクオーケストレーションに有用です。
Custom Instructions (customInstructions)(任意)モード固有の追加的な行動ガイドライン。システムプロンプトの末尾に追加され、VJSP の動作をさらに微調整します。

モードのインポートとエクスポート

カスタムモードはテンプレートとして共有・バックアップ・管理できます。任意のモードとその関連ルールを、スタンドアロンで移植可能な YAML ファイルとしてエクスポートし、どのプロジェクトにもインポートできます。

主な特徴

  • 設定の共有:モードとそのルールを単一ファイルにバンドルし、チーム全体で簡単に共有できます。

  • 便利なバックアップ:カスタムモードの設定を失わないように保存できます。

  • プロジェクトテンプレート:異なるプロジェクトタイプ向けに標準化されたモードテンプレートを作成できます。

  • 柔軟な移行:モードをグローバル設定とプロジェクトレベル設定の間で簡単に移動できます。

  • 柔軟な Slug 変更:エクスポート済みファイル内のモードの slug を変更しても、ファイルパスを手動で更新する必要はありません。

ワークフロー

モードのエクスポート

  1. モード設定 パネルを開きます。
  2. エクスポート対象のモードを選択します。
  3. モードをエクスポート ボタンをクリックします。
  4. 保存場所を選択します。
  5. VJSP はモードの設定と関連ルールを YAML ファイルにパッケージ化します。

モードのインポート

  1. モード設定 パネルで モードをインポート をクリックします。
  2. インポートする YAML ファイルを選択します。
  3. インポート範囲を選択します:
    • プロジェクトレベル:現在のワークスペース内でのみ有効(.vjspmodes に保存)。
    • グローバルレベル:すべてのプロジェクトで有効(グローバル設定に保存)。

インポート時の Slug の変更

モードをエクスポートした後、YAML ファイル内の slug を編集してから再インポートできます:

  1. slug: original-mode でモードをエクスポートします。
  2. YAML ファイルを編集し、slugnew-mode に変更します。
  3. ファイルをインポートすると、システムは自動的にルールファイルのパスを新しい slug に合わせて更新します。

カスタムモードの作成と設定

カスタムモードを作成・設定する方法は以下の3つがあります:

方法1:AI支援による生成(推奨)

VJSP に直接指示を出して、基本的なカスタムモードを作成できます。例:

「DocumentationWriter」という名前の新規モードを作成し、読み取り専用アクセスと、Markdown ファイルへの書き込み権限のみを許可してください。

VJSP は必要な詳細情報を収集し、YAML 形式のモード設定を生成します。

方法2:プロンプトタブからの設定

  1. モード設定 タブを開きます:設定ボタンをクリックし、「モード設定」タブに移動します。
  2. 新しいモードを作成:モードタイトル横の「新規」ボタンをクリックします。
  3. 設定フィールドに入力: 名前、slug、保存場所、説明、ロール定義、使用シナリオ(任意)、ツールグループ、カスタム指示などのフィールドがあります。フォームを完了したら モードを作成 をクリックします。システムは自動的に設定を YAML 形式で保存します。

方法3:手動設定(YAML または JSON)

設定ファイルを直接編集してカスタムモードを作成・変更し、最大限のカスタマイズを実現できます。YAML(推奨)および JSON の両方の形式がサポートされています。

  • グローバルモードcustom_modes.yaml(推奨)または custom_modes.json を編集。
  • プロジェクトモード:プロジェクトルートの .vjspmodes ファイルを編集(YAML または JSON 対応)。

どちらのファイル形式も、複数のカスタムモードを 配列/リスト構造 で定義します。

YAML 設定フォーマット(推奨)

YAML は可読性、コメントサポート、クリーンな複数行構文のため、カスタムモードの定義に推 recommended されます。

YAML 例

yaml
customModes:
  - slug: docs-writer
    name: docs-writer
    description: A specialized mode for writing and editing technical documentation
    roleDefinition: You are a professional technical writer skilled at producing clear and well-structured documentation
    whenToUse: Ideal for writing and editing technical documentation
    customInstructions: Prioritize clarity and completeness when writing documentation
    groups:
      - read
      - - edit  # 第1要素:ツールタイプ
        - fileRegex: \.(md|mdx)$  # 第2要素:設定オブジェクト
          description: Only Markdown files allowed
      - browser
  - slug: another-mode
    name: Another Mode
    # ... 他の設定オプション

JSON 代替フォーマット

json
{
  "customModes": [
    {
      "slug": "docs-writer",
      "name": "docs-writer",
      "description": "A specialized mode for writing and editing technical documentation",
      "roleDefinition": "You are a professional technical writer skilled at producing clear and well-structured documentation",
      "whenToUse": "Ideal for writing and editing technical documentation",
      "customInstructions": "Prioritize clarity and completeness when writing documentation",
      "groups": [
        "read",
        ["edit", {"fileRegex": "\\.(md|mdx)$", "description": "Only Markdown files allowed"}],
        "browser"
      ]
    }
  ]
}

YAML/JSON 設定オプションの詳細

slug(一意識別子)

  • 目的:モードの一意な内部識別子。
  • フォーマット要件:正規表現 /^[a-zA-Z0-9-]+$/(英数字とハイフンのみ)に一致する必要があります。
  • 用途:モード固有のルールファイル/ディレクトリ名(例:.vjsp/rules-{slug}/)に内部的に使用されます。
  • 推奨:簡潔かつ意味のあるものにしてください。

:YAML → slug: docs-writer;JSON → "slug": "docs-writer"

name(表示名)

  • 目的:VJSP UI に表示される名前。
  • フォーマット:スペースや通常の大文字小文字の使い分けが可能です。

:YAML → name: DocumentationWriter;JSON → "name": "DocumentationWriter"

description(モード説明)

  • 目的:モード選択画面に表示される、ユーザーフレンドリーな簡潔な概要。
  • フォーマット:コア機能に焦点を当て、簡潔に記述。
  • UI 表示:再設計されたモード選択画面に表示されます。

:YAML → description: A specialized mode for writing and editing technical documentation;JSON → "description": "A specialized mode for writing and editing technical documentation"

roleDefinition(ロール定義)

  • 目的:モードの役割、専門性、行動スタイルを定義。
  • 配置:システムプロンプトの 先頭 に挿入されます。

複数行例(YAML)

yaml
roleDefinition: >-
  You are a senior test engineer proficient in:
  - Writing comprehensive test suites
  - Practicing Test-Driven Development (TDD)

1行例(JSON)

json
"roleDefinition": "You are a professional technical writer skilled at producing clear and well-structured documentation"

groups(ツールグループ)

  • 目的:アクセス可能なツールグループおよびファイルアクセス制限を定義する配列。

  • サポートグループread, edit, browser, command, mcp(マルチエージェント協調)。

  • 構造

    • 無制限アクセス:文字列を使用(例:"edit")。
    • 制限付きアクセス:2要素のタプルを使用:["tool-type", {config}]
  • edit のファイル制限

    • fileRegex:編集可能なファイルタイプを制御する正規表現文字列。
      • YAML:単一のバックスラッシュ(例:\.md$)。
      • JSON:バックスラッシュを二重にエスケープ(例:\\.md$)。
    • description:人間が読めるルール説明(任意)。

YAML 例

yaml
groups:
  - read
  - - edit
    - fileRegex: \.(js|ts)$
      description: JS/TS files only
  - command

JSON 例

json
"groups": [
  "read",
  ["edit", {"fileRegex": "\\.(js|ts)$", "description": "JS/TS files only"}],
  "command"
]

whenToUse(使用タイミング)(任意)

  • 目的:VJSP の自動化によるモード選択やタスクオーケストレーションをガイド。
  • フォーマット:理想的なシナリオを記述する文字列。
  • 可視性:UI には表示されず、内部で使用されます。

:YAML → whenToUse: Use this mode for Python code refactoring;JSON → "whenToUse": "Use this mode for Python code refactoring"

customInstructions(カスタム指示)(任意)

  • 目的:モードの追加的な行動ルール。
  • 配置:システムプロンプトの 末尾 に追加されます。

複数行例(YAML)

yaml
customInstructions: |-
  Follow these rules when writing tests:
  - Organize test cases using describe/it blocks
  - Use descriptive names for test cases

1行例(JSON)

json
"customInstructions": "Emphasize conceptual clarity and practical examples in documentation"

YAML フォーマットの利点

YAML は以下の理由からカスタムモードに推奨されます:

  • 高い可読性:インデントベースの階層構造が人間の読解習慣に合致。
  • コメントサポート# を使って説明ノートを追加可能。
  • 複数行文字列|(リテラルブロック)または >(折りたたみブロック)でクリーンな複数行テキストを記述。
  • 簡潔な構文:JSON よりも句読点が少なく、構文エラーが発生しにくい。
  • エディタサポート:主要なコードエディタで完全な構文ハイライトと検証が可能。

JSON も完全にサポートされていますが、UI や AI支援による新規モード作成ではデフォルトで YAML が使用されます。

YAML フォーマットへの移行

グローバルモード

以下の条件がすべて満たされると、custom_modes.json は自動的に custom_modes.yaml に移行されます:

  • VJSP 起動時、
  • custom_modes.json が存在し、
  • custom_modes.yaml存在しない 場合。

元の JSON ファイルはロールバック用に保持されます。

プロジェクトモード(.vjspmodes ファイル)

  • 起動時に自動移行は行われません。
  • VJSP は YAML および JSON の .vjspmodes ファイルの両方を読み取ります。
  • UI から JSON ファイルを編集すると、YAML に変換されます。
  • 手動で変換したい場合は、VJSP にフォーマットのリファクタリングを依頼できます。

ファイル/ディレクトリによるモード固有指示の設定

ワークスペース内の専用ファイルまたはディレクトリを使用してモード指示を管理し、バージョン管理や標準化された設定を実現できます。

推奨:ディレクトリベース(/.vjsp/rules-{mode-slug}/

plaintext
.
├── .vjsp/
│   └── rules-docs-writer/  # 例:slug が "docs-writer" の場合
│       ├── 01-style-guide.md
│       └── 02-formatting.txt
└── ...(その他のプロジェクトファイル)

代替:単一ファイル(.vjsprules-{mode-slug}

plaintext
.
├── .vjsprules-docs-writer  # 例:slug が "docs-writer" の場合
└── ...(その他のプロジェクトファイル)

ルールディレクトリのスコープ

  • グローバルモード~/.vjsp/rules-{slug}/ に保存
  • プロジェクトモード{workspace}/.vjsp/rules-{slug}/ に保存

優先順位ルール:ディレクトリ設定とファイル設定の両方が存在する場合、ディレクトリが優先されます。ディレクトリ内のファイルはアルファベット順に再帰的に読み込まれ、連結されます。

設定優先順位ルール

モード設定の優先順位(高→低):

  1. プロジェクトレベルのモード設定
  2. グローバルレベルのモード設定
  3. デフォルトモード設定

重要.vjspmodes ファイルとグローバル設定に 同じ slug を持つモード が存在する場合、プロジェクトレベルの設定がグローバル設定のすべてのプロパティを完全に上書きします

デフォルトモードの上書き

組み込みの VJSP モードと同じ slug を持つカスタムモードを作成すると、それを上書きできます。

グローバル上書き例

yaml
customModes:
  - slug: code  # 組み込みの "Code" モードと一致
    name: CodeGlobal
    roleDefinition: You are a software engineer operating under global constraints
    whenToUse: Use this globally overridden code mode for JS/TS development
    customInstructions: Focus exclusively on JS/TS development tasks
    groups:
      - read
      - - edit
        - fileRegex: \.(js|ts)$
          description: JS/TS files only

プロジェクト固有の上書き例

yaml
customModes:
  - slug: code  # 組み込みの "Code" モードと一致
    name: CodeProject
    roleDefinition: You are a software engineer tailored to this project’s needs
    whenToUse: Use this project-specific code mode for Python development
    customInstructions: Code must strictly follow PEP8 and include type annotations
    groups:
      - read
      - - edit
        - fileRegex: \.py$
          description: Python files only
      - command

カスタムモードの正規表現ガイド

正規表現(fileRegex)を使うことで、ファイル編集権限を きめ細かく制御 できます。

💡 ヒント

VJSP に正規表現を生成させましょう

複雑な正規表現を手動で書く必要はありません。VJSP に依頼するだけ:

JavaScript ファイルにマッチしつつ、テストファイルを除外する正規表現を生成してください

生成後、フォーマットに応じてエスケープ文字を調整してください:YAML では単一バックスラッシュ、JSON では二重バックスラッシュ。

fileRegex の基本ルール

  • JSON エスケープ:バックスラッシュは二重にエスケープする必要があります(例:\\.md$)。
  • YAML エスケープ:クォートされていない文字列では単一バックスラッシュを使用(例:\.md$)。
  • パスマッチング:正規表現はワークスペースルートからの相対パス全体にマッチします。
  • 大文字小文字の区別:デフォルトで大文字小文字を区別します。
  • 検証:無効な正規表現は「Invalid Regular Expression Mode」エラーを引き起こします。

よく使う正規表現例

YAML 表記JSON 表記マッチ対象除外対象
\.md$"\\.md$"readme.md, docs/guide.mdscript.js, readme.md.bak
^src/.*"^src/.*"src/app.js, src/components/button.tsxlib/utils.js, test/src/mock.js
\.(css|scss)$"\\.(css|scss)$"styles.css, theme.scssstyles.less, styles.css.map
docs/.*\.md$"docs/.*\\.md$"docs/guide.md, docs/api/reference.mdguide.md, src/docs/notes.md
^(?!.*(test|spec))\.(js|ts)$"^(?!.*(test|spec))\\.(js|ts)$"app.js, utils.tsapp.test.js, utils.spec.js

正規表現構文リファレンス

  • \.: リテラルドット(YAML: \.;JSON: \\.
  • $: 文字列の末尾
  • ^: 文字列の先頭
  • .*: 改行以外の任意の文字、0回以上
  • (a|b): a または b にマッチ
  • (?!...): 否定先読み(マッチを除外)

エラー処理

モードが fileRegex にマッチしないファイルの編集を試みると、VJSP は FileRestrictionError をスローします。このエラーには以下が含まれます:

  • モード名
  • 許可されたファイルパターン
  • ルールの説明(指定されている場合)
  • 試行されたファイルパス
  • ブロックされたツールタイプ

設定例

基本的な「ドキュメントライター」モード(YAML)

yaml
customModes:
  - slug: docs-writer
    name: 📝 Documentation Writer
    description: Specialized in writing and editing technical documentation
    roleDefinition: You are a professional technical writer skilled at producing clear and well-structured documentation
    groups:
      - read
      - - edit
        - fileRegex: \.md$
          description: Markdown files only
    customInstructions: Emphasize clarity and practical examples in documentation

ファイル制限付きの「テストエンジニア」モード(YAML)

yaml
customModes:
  - slug: test-engineer
    name: 🧪 Test Engineer
    description: Focused on writing and maintaining test suites
    roleDefinition: You are a quality-focused test engineer
    whenToUse: For writing test cases, debugging failures, and improving coverage
    groups:
      - read
      - - edit
        - fileRegex: \.(test|spec)\.(js|ts)$
          description: Test files only
      - command

「セキュリティレビュー」モード(YAML)

yaml
customModes:
  - slug: security-review
    name: 🔒 Security Reviewer
    description: Read-only code security analysis and vulnerability assessment
    roleDefinition: You are a security expert specializing in code vulnerability detection
    whenToUse: For security reviews and vulnerability assessments
    customInstructions: |-
      Focus on these risk areas:
      - Input validation flaws
      - Authentication/authorization vulnerabilities
      - Data leakage risks
      - Injection attack vectors
    groups:
      - read
      - browser

トラブルシューティング

よくある問題

  • モードが表示されない:モード作成またはインポート後に IDE ウィンドウを再起動してください。
  • 無効な正規表現:設定前にオンライン正規表現チェッカーで検証してください。
  • 優先順位の混乱同じ slug を持つプロジェクトモードはグローバルモードを完全に上書きする ことを覚えておいてください。
  • YAML 構文エラー:スペース(タブではない)でインデントし、構文を検証してください。

YAML 設定のヒント

  • インデントが重要:YAML は階層を定義するためにスペースを使用します。
  • キーと値のフォーマット:キーの後にコロンとスペースが必要(例:slug: my-mode)。
  • リスト項目:ハイフンとスペースで開始(例:- read)。
  • 検証:オンライン YAML バリデーターまたはエディタ統合ツールを使用してください。