思ってることってこんなもんだよ
設定の管理 - Yeomanジェネレータの作成

何かを作りたい際に、ゼロから自分で作っていくのは、単純に大変な作業です。何か土台的なものがあって、自分でやりたいことだけを追記していければ、それに越したことはありません。

Yeoman は、さまざまな土台を作ってくれるツールです。 yo というコマンドを打ち込んでプロジェクトの雛形を作成した経験のある方は多いと思いますが、まさに yo が Yeroman です。 yo generator-name と打ち込むことで、ジェネレータが呼び出され、対話形式でいくつかの質問に答えるだけで、土台となるファイル群を生成させることが可能です。

そのジェネレータは、自作することも可能です。僕も、とあるジェネレータを自分で作ってみたくなりました。Yeoman のウェブサイトには、じぇねれーたのつくりかたはが複数ページに渡って説明されています。勉強の意味も兼ねて、日本語訳を作ってみました。

今回は、 Managing configuration です。


ユーザー設定オプションを保存してサブジェネレータ間で共有することは一般的な作業です。たとえば、言語(ユーザーはCoffeeScriptを使用しますか?)、スタイルオプション(スペースまたはタブでインデント)などの設定を共有するのが一般的です。

これらの設定は、Yeoman Storage API を通じて .yo-rc.json ファイルに保存できます。このAPIは、 generator.config オブジェクトを通してアクセス可能です。

あなたが使うであろう一般的な方法をここで紹介します。

メソッド

this.config.save()

このメソッドは、設定を .yo-rc.json ファイルに書き込みます。ファイルがまだ存在しない場合は、 save メソッドによって作成されます。

.yo-rc.json ファイルは、プロジェクトのルートも決定します。そのため、ストレージを何にも使用していなくても、:app ジェネレータ内で save を常に呼び出すことがベストプラクティスと考えられます。

また、設定オプションを set するたびに save メソッドが自動的に呼び出されることにも注意してください。そのため、通常は明示的に呼び出す必要はありません。

this.config.set()

set は、キーとそれに関連付けられた値、または複数のキー/値のオブジェクトハッシュを取ります。

値は、JSONシリアライズ可能(String、Number、または非再帰的オブジェクト)でなければならないことに注意してください。

this.config.get()

getString キーをパラメータとして取り、関連する値を返します。

this.config.getAll()

利用可能な全設定のオブジェクトを返します。

返されたオブジェクトは、参照ではなく値で渡されます。つまり、設定ストアを更新するために set メソッドを使用する必要があります。

this.config.delete()

キーを削除します。

this.config.defaults()

デフォルト値として使用するオプションのハッシュを受け入れます。キーと値のペアがすでに存在する場合、値は変更されません。キーが見つからない場合は追加されます。

.yo-rc.json 構造

.yo-rc.json ファイルは、複数のジェネレーターからの設定オブジェクトが格納されているJSONファイルです。ジェネレータ間で名前の競合が発生しないように、各ジェネレータ設定には名前空間があります。

これは、各ジェネレータ設定がサンドボックス化され、サブジェネレータ間でのみ共有できることも意味します。 storage APIを使用して異なるジェネレータ間で設定を共有することはできません。呼び出し中にオプションと引数を使用して、異なるジェネレータ間でデータを共有します。

.yo-rc.json ファイルの内部は次のようになります。

{
  "generator-backbone": {
    "requirejs": true,
    "coffee": true
  },
  "generator-gruntfile": {
    "compass": false
  }
}

構造はあなたのエンドユーザにとってかなり包括的です。つまり、すべてのオプションにプロンプトを使用するのが無意味な場合は、このファイル内に詳細設定を保存し、そのファイルを直接編集するように上級ユーザーに依頼することをお勧めします。