設定ファイルの一元管理 onecfg の紹介

はじめに

この資料は Rust 製のコマンドラインツール onecfg について紹介するものです。
Rust製の環境構築やツールのインストール方法については以下を参照してください

onecfg

1つの設定ファイルでJSON/YAML/TOMLなどのファイル生成
GitHub - clebert/onecfg-rust: One config file to generate them all.

使用方法

簡単に言うと、onecfg ファイル(例:onecfg.json) から各種の設定ファイつを自動生成するためのものでう。

% onecfg onecfg.json

生成するコンフィグファイルの形式を定義する

{
  "defines": {
    ".prettierrc.json": {"format": "json"}
  }
}

特定の設定ファイルにのみ適用されるパッチの宣言

{
  "patches": {
    ".prettierrc.json": [
      {"value": {"printWidth": 80}},
      {"value": {"singleQuote": true}}
    ]
  }
}

onecfgファイルの拡張(定義済みのonecfg-lib)の便利な利用を含む

{
  "extends": [
    "<https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-editorconfig.json>",
    "<https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-git.json>",
    "<https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-prettier.json>",
    "<https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-vscode.json>"
  ]
}

注:JSON Schemaを使用してonecfgファイルを検証したり、エディターでオートコンプリートを有効にすることができます。

設定ファイル

テキスト

{
  "defines": {
    "test.txt": {"format": "text"}
  },
  "patches": {
    "test.txt": [{"value": "foo"}, {"value": "bar"}]
  }
}
bar

JSON

{
  "defines": {
    "test.json": {"format": "json"}
  },
  "patches": {
    "test.json": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
  }
}
{
  "baz": "qux",
  "foo": "bar"
}

TOML

{
  "defines": {
    "test.toml": {"format": "toml"}
  },
  "patches": {
    "test.toml": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
  }
}
baz = "qux"
foo = "bar"

YAML

{
  "defines": {
    "test.yml": {"format": "yaml"}
  },
  "patches": {
    "test.yml": [{"value": {"foo": "bar"}}, {"value": {"baz": "qux"}}]
  }
}
baz: qux
foo: bar

ignorefile

{
  "defines": {
    ".testignore": {"format": "ignorefile"}
  },
  "patches": {
    ".testignore": [{"value": ["foo", "bar"]}, {"value": ["baz"]}]
  }
}
foo
bar
baz

onecfg-lib

EditorConfig

EditorConfigは、様々なエディタやIDEで同じプロジェクトに携わる複数の開発者が、一貫したコーディングスタイルを維持できるようにします。EditorConfigプロジェクトは、コーディングスタイルを定義するためのファイルフォーマットと、エディターがファイルフォーマットを読み込んで定義されたスタイルを遵守するためのテキストエディタプラグインのコレクションで構成されています。EditorConfigファイルは簡単に読むことができ、バージョン管理システムともうまく連動します。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-editorconfig.json"
  ]
}

ESLint

ESLint はコードを静的に解析し、問題を素早く見つけます。ほとんどのテキストエディタに組み込まれており、継続的インテグレーションパイプラインの一部としてESLintを実行することができます。
ECMAScriptのモジュールを対象としたルールで、CommonJSを禁止しています。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-editorconfig.json"
  ]
}
% NODE_OPTIONS=--experimental-vm-modules jest --silent
  • Node.js
    Node.jsは、オープンソースで、クロスプラットフォームなJavaScript実行環境です。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-node.json"
  ]
}

preact

同じモダンなAPIを持つReactの高速な3kB代替品
Reactとは異なり、PreactはTypeScriptとSWCの設定にパッチを当てる必要があります。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-preact.json"
  ]
}
  • npm 依存モジュール

Prettier

ほとんどのエディタに統合可能なコードフォーマッター

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-prettier.json"
  ]
}

Rust

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-prettier.json"
  ]
}

SWC

ES2022とECMAScriptモジュール用のコンフィグです。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-swc.json"
  ]
}

TypeScript

ES2022 と ECMAScript モジュールのための厳密な設定です。

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-typescript.json",
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-typescript-emit.json",
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-typescript-eslint.json"
  ]
}

Visual Studio Code

Microsoft社が公開している無料で使用できる高機能な絵ディア

  • onecfg

{
  "extends": [
    "https://raw.githubusercontent.com/clebert/onecfg-lib/main/lib/onecfg-vscode.json"
  ]
}

ドキュメント

  • onecfg のヘルプメッセージ

% onecfg --help
Usage: onecfg <FILE_PATH>

Arguments:
  <FILE_PATH>

Options:
  -h, --help     Print help
  -V, --version  Print version

ライセンス

onecfg および onecfg-lib は次のいずれかでライセンスが適用されます。
どちらを選ぶかは任意です。

この記事が気に入ったらサポートをしてみませんか?