Schema Form EditorJSON Schema から、YAML / JSON の編集フォームを自動で作る VS Code 拡張機能です。 CMS のような画面で、コードを書かない人でも設定ファイルを編集できます。
使い方1. スキーマを紐付ける(3通り。上が優先)
スキーマが未設定のファイルをフォームで開くと「スキーマを選択して紐付ける」ボタンが出ます。 押すと、ワークスペース内の JSON / YAML から選べて、A の書き方を自動で入れます。 相対パスの基準: A はそのファイルの場所、B・C はワークスペースのルート。 2. フォームで開く
フォームの右上の「テキストで開く」で、同じファイルを横にテキストで開けます。どちらで編集してももう片方に反映されます。 3. 非エンジニアに vscode.dev で使ってもらう
対応しているスキーマフォームの生成は react-jsonschema-form (RJSF) + MUI、検証は Ajv です。 対応範囲は基本的に RJSF に準じます。 動作確認済み(自動テストで確認):
RJSF の機能としては対応しているが、このプロジェクトのテストでは個別に確認していないもの: 見た目の調整:
|
| 操作 | 結果 |
|---|---|
| 既存の値を変える(文字・数値・チェック・選択) | その値の文字だけを差し替え。他の行は一字一句そのまま(コメント・引用符・インデント・[a, b] の書き方) |
| 項目の追加・削除、配列の増減 | 該当箇所を更新。ファイル全体を再出力するため、行末コメント前の余分な空白が1つに揃うことがあります。コメント自体、空行、引用符、インデント幅、- の位置は保たれます |
| 開いただけ | 何も書き込みません(スキーマの default を補完して表示しても、入力するまでファイルは変わらない) |
- 入力が止まって 0.4 秒後(
schemaForm.debounceMs)、またはフォーカスが外れたときにファイルへ反映 - 書き込み前に結果を再パースして確認し、意図と違う内容になる場合は書き込まずに警告します
- ファイルが構文エラーのとき、フォームは編集不可になります(テキストで直すと自動で復帰)
制約・注意点
- YAML の複数ドキュメント(
---区切り)、エイリアス(*a)を経由した値の編集はフォームから編集できません(警告が出ます。テキストで編集してください) - 検証エンジン(Ajv)がスキーマを関数にコンパイルするため、Webview の CSP に
'unsafe-eval'を含めています。読み込むスクリプトは拡張に同梱したものだけです http(s)://のスキーマは 信頼されたワークスペースでのみ取得します- スキーマ(および
$ref先)をエディタで開いて編集した場合は自動で再読込されます。ディスク上で変わった場合(git pullなど)は、ツールバーの「スキーマ再読込」を押してください - Red Hat 公式の YAML 拡張(
redhat.vscode-yaml)と併用すると、テキスト編集側でも補完・検証が効きます。同じ# yaml-language-server: $schema=の書き方を使うので、設定は共通です(ただし同拡張は JSON Schema draft-07 までの対応です)
開発
npm install
npm run typecheck # 型チェック
npm test # 単体・結合テスト(vscode API はモック)
npm run build # dist/ にバンドル(拡張ホスト + Webview)
npm run test:browser # ビルド済み Webview を実 Chrome で動かして検証(既定は /usr/bin/google-chrome。CHROME_PATH で変更可)
npm run web # 本物の VS Code Web(vscode.dev と同じ作り)に拡張を読み込んで ./examples/basic を開く
npm run web は VS Code の Web 版をダウンロードして Chromium を起動します。
examples/basic/ に動作確認用のスキーマ・YAML・JSON・設定が入っています。
構成:
src/core/ vscode に依存しない処理(差分・YAML/JSON の部分更新・glob・スキーマ紐付け・$ref 結合)
src/host/ 拡張ホスト側(スキーマ解決・書き込み・Webview との通信)
src/webview/ フォーム画面(React + RJSF + MUI)
test/ 単体 / 拡張ホストの結合 / ブラウザのテスト
公開
package.jsonのpublisherを自分の ID に変更(現在は仮のyour-publisher-id)。repositoryも追記npm run package→schema-form-editor-*.vsixnpx vsce publish(Marketplace)/npx ovsx publish(Open VSX)
.vsixを vscode.dev に直接インストールすることはできません(デスクトップ版の VS Code では「VSIX からのインストール」で試せます)。 vscode.dev で使うには、公開した拡張機能をインストールします。
ライセンス
MIT