最新の安定バージョンについては、Spring Cli 0.9.0 を使用してください! |
ユーザー定義コマンドのガイド
ユーザー定義コマンドを使用すると、Spring CLI にカスタムコマンドを追加できます。ディレクトリ構造コマンドは、シェルに導入されるコマンドとサブコマンドを表します。
例: controller\new
のディレクトリ構造は、CLI ではコマンド controller new
に変換されます。
サブコマンドディレクトリにあるファイルは次のとおりです。
コマンドとその引数を説明する
command.yaml
という名前のファイル。コードまたは構成をプロジェクトに追加するために実行するアクションを記述する 1 つ以上のアクションファイル。
ユーザー定義コマンドは、次のコマンドを使用して CLI に登録します。
command add --from <repository-url>
そのリポジトリの内容が既存のプロジェクトにコピーされます。
例として、リポジトリ github.com/rd-1-2022/udc-spring-controller (英語) の内容を見てみましょう。
構造
すべてのユーザー定義コマンドのディレクトリ構造は、次のパスにあります。
.spring/commands
前述のユーザー定義コマンド controller new
の場合、コマンド記述ファイルとアクションファイルが配置される完全なディレクトリ構造は次のようになります。
.spring/commands/controller/new
このディレクトリ内では、* コマンドの動作とコマンドの引数を説明するファイル command.yaml
* このコマンドに対して実行するアクションを定義する 1 つ以上のアクションファイルを定義できます。
例: リポジトリ github.com/rd-1-2022/udc-spring-controller (英語) のディレクトリの内容は次のとおりです
.
├── README.adoc
└── .spring
└── commands
└── controller
└── new
├── command.yaml
├── create-controller.yaml
└── RestController.java
コマンドの説明
前述の controller new
コマンドの command.yaml
ファイルの内容は次のとおりです。
command:
description: Generate a new Spring Controller
options:
#
- name: feature
description: name of the feature package
dataType: string
defaultValue: person
inputType: text
required: true
このファイルには、コマンドの簡単な説明と一連のコマンドラインオプションが含まれています。
オプションの name
が必要です。デフォルトの dataType
は string
です
dataType
は int
、integer
、bool
、boolean
、double
、float
、long
、short
、string
にすることができます。
CLI には実行時にこれらのコマンドが組み込まれており、一般的なヘルプとコマンドヘルプを要求するときに表示されます。
$spring help
<output truncated>
User-defined Commands
controller new: Generate a new Spring Controller
および
$ spring help controller new
NAME
controller new - Generate a new Spring Controller
SYNOPSIS
controller new --feature String
OPTIONS
--feature String
name of the feature package
[Optional, default = person]
アクションファイル
アクションファイルは、GitHub アクションファイルと同様に構造化されています。
Acitons ファイルには任意の名前を付けることができ、CLI は .yaml
または .yml
のファイル拡張子を持つファイルを検索します。
特定のタスクを実行するために必要なだけアクションファイルを作成できます。アクションファイルの実行順序は深さ優先、アルファベット順です。
これは非常に簡単な例です
actions:
- generate:
to: hello.txt
text: Hello at {{now}} on {{os-name}}.
これにより、現在の作業ディレクトリにファイル hello.txt
が生成されます (存在しない場合)。テンプレートの内容にはケバブケースの変数名が含まれています。
変数 user-name
および os-name
は Java システムプロパティから取得され、テンプレートエンジンに自動的に登録されます。変数 now
は、コマンド実行時の new java.util.Date()
の値です。
Java コードを作成するためのより現実的な例として、リポジトリ github.com/rd-1-2022/udc-spring-controller (英語) 内の Controller.java
という名前のアクションファイルを以下に示します。feature
変数はコマンドオプションです。
コマンドファイル
command:
description: Generate a new Spring Controller
options:
#
- name: feature
description: name of the feature package
dataType: string
defaultValue: person
inputType: text
アクションファイル
actions:
- generate:
to: src/main/java/{{root-package-dir}}/{{feature}}/{{capitalizeFirst feature}}Controller.java
from: RestController.java
テンプレート化された Java ファイル
ファイル RestController.java
は、以下に示すテンプレート化されたテキストファイルです。
package {{root-package}}.{{feature}};
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class {{capitalizeFirst feature}}Controller {
@GetMapping("/{{feature}}")
public String greeting() {
return "Hello {{feature}}";
}
}
to:
フィールドは、生成されるファイルの場所を定義します。
生成するファイルがすでに存在する場合、generate
と同じレベルの追加フィールド overwrite:
が to:
フィールドの同じレベルに追加されない限り、そのファイルは上書きされません。
すべてのコマンドライン引数は、変数 (この場合は feature
オプション) としてテンプレートエンジンに渡されます。
便利な組み込み変数の 1 つは root-package-dir
です。これは、@SpringApplication
アノテーションを含むクラスが配置されるディレクトリです。
テンプレートエンジン
テンプレートエンジンは Handlebars [GitHub] (英語) です。いくつかの Handlebar ヘルパーがデフォルトで登録されています
前の例では、テンプレート変数 {{capitalizeFirst feature}}
は Handlebar ヘルパーの使用例です。
いくつかのシステム変数がデフォルトでテンプレートエンジンに公開されます。
System.getProperties()
は{{system-properties}}
で利用可能ですSystem.getenv()
は{{system-environment}}
で利用可能ですnew Date().toString()
で定義された現在時刻は、{{now}}
で使用できます。システムプロパティ
java.io.tmpdir
は{{tmp-dir}}
で使用できますシステムプロパティ
file.separator
は{{file-separator}}
で使用できますシステムプロパティ
os.name
は{{os-name}}
で使用できますシステムプロパティ
user.name
は{{user.name}}
で使用できます
Spring Boot メインアプリケーションクラスが存在する Java パッケージ名は、{{root-package}}
で使用できます。
Spring Boot メインアプリケーションクラスが存在するディレクトリは、{{root-package-dir}}
にあります。
Maven モデルはいくつかの変数を公開します。
{{artifact-id}}
{{artifact-version}}
{{artifact-path}}
{{project-name}}
{{project-descriptoin}}
{{maven-model}
- これはクラス org.apache.maven.model.Model (英語) です{{maven-properties}}
- これは、POM の<properties>
セクションの各エントリの値をキーとして持つ Java プロパティオブジェクトです。{{java-version}}
- これにより、java.version
という名前の POM で Maven プロパティが検索されます。値が1.8
の場合、値は8
に変換されます。
新しいユーザー定義コマンドの作成
簡単に始める方法は、次のコマンドを実行することです。
spring command new hello create
これにより、hello
という名前のユーザー定義コマンドと create
という名前のサブコマンドが作成されます。
spring command new --help
を実行すると、spring command new
のオプションの完全なセットを表示できます。出力を以下に示します。
$ spring command new --help
NAME
command new - Create a new user-defined command
SYNOPSIS
command new --commandName String --subCommandName String --path String --help
OPTIONS
--commandName String
The name of the user-defined command to create
[Optional, default = hello]
--subCommandName String
The name of the user-defined sub-command to create
[Optional, default = new]
--path String
Path to execute command in
[Optional]
--help or -h
help for command new
[Optional]
spring command new hello create
を実行すると、前述したように次のディレクトリ構造とファイルが生成されます。
.
├── README.adoc
└── .spring
└── commands
└── hello
└── create
├── command.yaml
└── hello.yaml
command.yaml
ファイルの内容を以下に示します。greeting
という名前のコマンドライン引数が 1 つ含まれています
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 # TEXT
そしてアクションファイル hello.yaml
を以下に示します。hello.txt
という名前のファイルが生成されます
actions:
- generate:
to: hello.txt
text: Hello {{greeting}} at {{now}} on {{os-name}}.
コマンド spring help
を実行すると、コマンドは見出し User-defined Commands
にリストされます。
...
User-defined Commands
hello create: Generate a new file with a hello message
コマンド spring hello create
を実行すると、次の内容のファイル hello.txt が生成されます。
Hello World at Mar 9, 2023 on Linux.
さらに学ぶ
セクションアクションガイドでは、プロジェクトにコードと構成を追加または変更するためにアクションファイルで使用できるすべてのオプションについて説明します。