15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VSCodeで快適に設定ファイルを書く

Last updated at Posted at 2019-02-21

はじめに

プログラムの動作を変えるのに設定ファイルを使っていますが、
機能の追加に伴ってフィールドが増え、階層が深くなり書くのがだんだんつらくなってきました。
あまりにつらいので編集時に補間、候補表示などがほしくなり実際できるとわかったので共有します。

まとめ

  • 前提として編集にはVSCodeを使う
  • VSCodeではJSON,YAMLなどにもSuggestionがだせる
  • JSON Schemaで独自の設定も定義できる

サンプルリポジトリはこちらです

suggestion.gif

設定方法

必要な設定ファイルは2つ

  1. 設定ファイルのフォーマットを定義したJSON Schemaファイル(サンプルの/docs/schemas/*.json)
  2. プロジェクト内でフォーマット定義と有効にするファイル名パターンの紐づけ/.vscode/settings.json

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も作っておくとその後の運用もより快適にできますね。

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?