ロール

ロールは、ユーザー定義のコマンド全体で変数を整理して再利用する方法を提供します。

デフォルトでは、Spring CLI には常に使用可能な名前のないロールが含まれています。特定のロールが指定されていない場合、コマンドはデフォルトのロールを使用します。

ロールをさらにカスタマイズして区別するには、ロールを特定の名前に関連付けます。これらの名前付きロールは、.spring/commands ディレクトリの隣にある .spring/roles ディレクトリ内に YAML ファイルとして保存されます。

ロールを使用すると、Handlebars を使用してアクションファイル内でアクセスできる変数を定義できるため、コマンド間でデータを共有できます。

さらに、ロールを使用してコマンドラインオプションの値を指定できます。コマンドラインオプションに値が指定されておらず、コマンドオプションと同じ名前のロール変数が存在する場合、コマンドはその特定のオプションのロール変数の値を自動的に使用します。

ファイル構造

ロールごとに、対応するファイルが .spring/roles/vars ディレクトリに作成されます。例: qa および prod ロールがある場合、ディレクトリは次のようになります。

$ tree .spring/roles/vars -lr
.spring/roles/vars
├── vars.yml
├── vars-qa.yml
└── vars-prod.yml

vars.yml ファイルはデフォルトのロールに使用されます。

この構造は、プロファイル固有の Spring アプリケーション構成ファイルの使用と同様のパターンに従います。ただし、ロール変数は、ファイル以外の他の場所 (環境変数など) から値を取得するなど、Spring プロファイルと同じ動作を示しません。

クイックスタート

このクイックスタートでは、デフォルトのロールに変数を追加し、ファイルの生成時にその値を使用する方法を示します。

まず、ロール変数 "greeting" の値を "Mondo" に設定します。

$ spring role set --key greeting --value Mondo
Key-value pair added to the default role

キーと値のペアは、ルートプロジェクトディレクトリの ./spring/roles/vars/vars.yml ファイルに保存されます。

変数の値を取得するには、次のコマンドを使用します。

$ spring role get --key greeting
Mondo

次に、別のロール変数を作成します。

$ spring role set --key language --value Italian
Key-value pair added to the default role

これで、これらの変数をユーザー定義のコマンドに組み込むことができます。hello say という名前のユーザー定義コマンドを作成します。

$ spring command new --command-name hello --sub-command-name say
Created user defined command /home/mark/testing-spring-cli/roles/myapp/.spring/commands/hello/say

.spring/commands/hello/say ディレクトリ内に、次の内容を含む command.yaml という名前のファイルがあります。

command:
  description: Generate a new file with a hello message
  options:
    #
    - name: greeting
      description: who or what to say hello to
      dataType: string
      defaultValue: World
      inputType: text

コマンドラインオプション名は greeting であり、作成したロール変数の名前と一致することに注意してください。

.spring/commands/hello/say ディレクトリ内には、次の内容を含む hello.yaml という名前のアクションファイルがあります。

actions:
  - generate:
      to: hello.txt
      text: Hello {{greeting}} on {{os-name}}.

次に、ファイルを更新して以下を含めます。

actions:
  - generate:
      to: hello.txt
      text: Hello {{greeting}} on {{os-name}}. {{#if language}} {{language}} {{/if}}

greeting コマンドラインオプションを渡さずにコマンドを実行すると、greeting の値は、デフォルト値 World を使用する代わりに、同じ名前のロール変数から取得されます。

さらに、ロール変数言語を定義したため、その存在をテストし、その値を出力に含めることができます。言語はコマンドラインオプションではないことに注意してください。次のコマンド (出力とともに表示) はこれを実行します。

$ spring hello say
Using Role variable instead of default command line option for key = greeting , value = Mondo from the default role
Generated /home/mark/testing-spring-cli/roles/myapp/hello.txt

生成されたファイルには次のものが含まれます。

Hello Mondo on Linux.  Italian

{{greeting}} の値は、コマンドラインオプションとして提供されていないため、ロール変数から取得されます。

{{language}} 変数はコマンドラインオプションではありませんでしたが、Handlebars 式で使用できます。

これで、生成されたファイルを削除できます。対話型シェルで . ! rm hello.txt を実行し、greeting コマンドラインオプションを渡します。

$ spring hello say --greeting amico

生成されたファイルには次のものが含まれます。

Hello amico on Linux.  Italian

変数を設定しています

ロール変数の値を設定するには、spring role set コマンドを使用します。

spring role set --key greeting --value Mondo

必要に応じて、--role オプションを使用してロールを指定できます。

変数の取得

ロール変数の値を取得するには、次のコマンドを使用します。

spring role get --key greeting

必要に応じて、--role オプションを使用してロールを指定できます。

これにより、Handlebars テンプレートを使用するアクションファイル内でロール変数の挨拶にアクセスできるようになります。例については、「クイックスタート」セクションを参照してください。

role 変数は、ユーザー定義のコマンドオプション名と照合するためにも使用されます。値がコマンドラインオプションとして明示的に指定されていない場合は、role 変数の値が使用されます。

対話型シェルを使用しているときに、特別なコマンド . ! を使用して、ロール変数を含むファイルの完全な内容を表示することもできます。

spring:>. ! cat .spring/roles/vars/vars.yml
greeting: mondo

ロールの追加

ロールを追加するには、次のコマンドを使用します。

spring role add qa

このコマンドは、qa という名前のロールを作成します。

./spring/roles/vars/vars-qa.yml という名前のファイルがルートプロジェクトディレクトリに作成されます。

ロールのリスト

使用可能なロールを一覧表示するには、次のコマンドを使用します。

spring role list

このコマンドは、ロールのリストを表示します。

┌────┐
│Name│
├────┤
│qa  │
└────┘

ロールの削除

ロールを削除するには、次のコマンドを使用します。

spring role remove qa

このコマンドは、qa という名前のロールを削除します。