はじめに
プログラムの動作を変えるのに設定ファイルを使っていますが、
機能の追加に伴ってフィールドが増え、階層が深くなり書くのがだんだんつらくなってきました。
あまりにつらいので編集時に補間、候補表示などがほしくなり実際できるとわかったので共有します。
まとめ
- 前提として編集にはVSCodeを使う
- VSCodeではJSON,YAMLなどにもSuggestionがだせる
- JSON Schemaで独自の設定も定義できる
設定方法
必要な設定ファイルは2つ
- 設定ファイルのフォーマットを定義した
JSON Schema
ファイル(サンプルの/docs/schemas/*.json
) - プロジェクト内でフォーマット定義と有効にするファイル名パターンの紐づけ
/.vscode/settings.json
JSON Schemaの書き方については割愛する
- Understanding JSON Schemaなどを参考にしてください
settings.json
については以下にサンプルを示します。
yamlの場合はExtension redhat.vscode-yaml が必要です。
スキーマと設定ファイルの紐づけはJSONとYAMLで若干異なりますが、基本的には1 Schemaファイルに対してn個のglobパタンを指定できます。
Schema設定についてはローカル、あるいはリモート(http)で指定ができるので一般的なフォーマットの場合はJSON Schema Storeから探すのがよさそうです。
{
"yaml.format.enable": true,
"yaml.completion": true,
"yaml.validate": true,
"yaml.hover": true,
"yaml.schemas": {
"./docs/schemas/dbconfig.json": [
"*dbconfig.yaml",
"*dbconfig.yml"
],
"./docs/schemas/dbsconfig.json": [
"*dbsconfig.yaml",
"*dbsconfig.yml"
],
},
"json.schemas": [
{
"fileMatch": [
"*dbconfig.json"
],
"url": "./docs/schemas/dbconfig.json"
},
{
"fileMatch": [
"*dbsconfig.json"
],
"url": "./docs/schemas/dbsconfig.json"
}
]
}
ファイルの配置について
現在のところ特定のプロジェクト内で使うパターンが主なので各リポジトリ単位でdocs/schemas
以下に置いて使うやり方をとっています。
もしも共通の物が増えてきたならリポジトリにまとめるなどを検討してもよさそうです。
感想
初めは自分でLanguageServer書かなきゃいけないのか...?などと身構えていたのですが、JSON,YAMLともに外から設定が渡せる設計でした。素晴らしい設計で感謝しかない。
設定に関してドキュメントを書くのはもちろん大切ですがJSON Schemaも作っておくとその後の運用もより快適にできますね。