ロール
ロールは、ユーザー定義のコマンド全体で変数を整理して再利用する方法を提供します。
デフォルトでは、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
という名前のファイルがルートプロジェクトディレクトリに作成されます。