アクションガイド

生成

generate アクションは、ファイルの生成に使用されます。宛先パスを指定するには to キーが必要です。パスは、ユーザー定義コマンドが実行された場所に対する相対パスです。ファイルがすでに存在する場合、上書きされません。

ファイルの内容は、text キーを使用して定義されます。

次の例は、単純な generate アクションを示しています。

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

{{user-name}} および {{os-name}} 変数は、Handlebars テンプレートエンジンによって実際の値に置き換えられます。ユーザー定義コマンドに渡されるコマンドラインオプションは、テンプレートエンジンによって使用される変数として公開されます。

事前定義されたテンプレートエンジン変数の詳細については、"テンプレートエンジン" セクションを参照してください。

リテラル構文

YAML のリテラル構文を使用すると、複数行の文字列を表現したり、文字列内の書式設定や空白を保持したりできます。

リテラル構文は、改行とインデントを維持したいが、一部の特殊文字をスラッシュ文字でエスケープする必要がある場合に便利です。

次の例では、YAML のリテラル構文を使用します。

actions:
  - generate:
      to:  hello.txt
      text: |
        This is a multi-line
        string using the literal syntax.
        It preserves the line breaks
        and indentation exactly as written.
        \t This is a tab character.
        \n This is a newline character.
        \\ This is a backslash.
        \u2713 This is a Unicode character (checkmark symbol).

| 文字の後にインデントされたブロックを使用すると、文字列はリテラルとして扱われ、改行とインデントが保持されます。

外部ファイル

場合によっては、エスケープが必要なため、リテラル構文を使用してテキストを埋め込むことが困難な場合があります。JSON ファイル、正規表現、ファイルパスは、このような問題が発生する一般的な例です。さらに、アクションファイルとは別にテキストコンテンツを編集して、テキストエディターの構文強調表示機能や検証機能を使用することもできます。

このような場合に対処するには、from キーを使用して、テキストを生成するソースファイルを指定します。

次の例では、from キーを使用します。

actions:
  - generate:
      to:  hello.json
      from: json-template.json

to キーは、コマンドが実行されるディレクトリに対する相対キーです。

json-template.json ファイルは、コマンド .spring/commands/hello/create と同じディレクトリにあります。次のリストにその内容を示します。

{
  "operatingSystem": "{{os-name}}",
  "phoneNumbers": [
    {
      "type": "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type": "home",
      "number": "0123-4567-8910"
    }
  ]
}

入門例から spring hello create を実行すると、次のように hello.json というファイルが生成されます。

$ spring hello create
Generated /home/testing/rest-service/hello.json

$ cat hello.json
{
  "operatingSystem": "Linux",
  "phoneNumbers": [
    {
      "type": "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type": "home",
      "number": "0123-4567-8910"
    }
  ]
}

キー内の変数の置換

tofromtext キーで Handlebars テンプレート変数を使用することもできます。

次の例では、to キーで Handlebars テンプレート変数を使用します。

actions:
  - generate:
      to: src/main/java/{{root-package-dir}}/{{feature}}/{{capitalizeFirst feature}}Controller.java
      from: RestController.java

事前定義されたテンプレートエンジン変数の詳細については、"テンプレートエンジン" セクションを参照してください。

注入する

inject アクションは、ファイルにテキストを挿入するために使用されます。

テキストを挿入する場所を示すために、after: キーまたは before: キーのいずれかを定義する必要があります。

次のリストはサンプルファイルを示しています。

Hello there.
This is a test file.
We are going to insert before the line that has the word marker1
marker2

次のリストは、marker2 という単語を含む行の後に INJECTED AFTER を挿入する inject アクションを示しています。

actions:
  - inject:
      to: sample.txt
      text: "INJECTED AFTER"
      after: marker2

このアクションを実行した後のテキストファイルは次のとおりです。

Hello there.
This is a test file.
We are going to insert before the line that has the word marker1
marker2
INJECTED AFTER

次のリストは、marker1 という単語を含む行の前に INJECTED BEFORE を挿入する inject アクションを示しています。

actions:
  - inject:
      to: sample.txt
      text: "INJECTED BEFORE"
      before: marker1

このアクションを実行した後のテキストファイルは次のとおりです。

Hello there.
This is a test file.
INJECTED BEFORE
We are going to insert before the line that has the word marker1
marker2

幹部

exec アクションはシェルコマンドを実行します。

次のリストは、シェルコマンドを実行するための基本的な形式を示しています。

actions:
  - exec:
      command: mkdir {{tmp-dir}}/scratch

tmp-dir テンプレートエンジン変数はデフォルトで定義されており、java.io.tmpdir Java システムプロパティの値です。

出力のリダイレクト

TBD

Maven 依存関係の挿入

inject-maven-dependency アクションは、Maven 依存関係エントリを Maven pom.xml ファイルに挿入します。

text: フィールド内で Handlebars テンプレート変数と式を使用できます。

次の例は、Maven 依存関係を挿入するための基本的な構文を示しています。

actions:
  - inject-maven-dependency:
      text: |
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>

        <dependency>
          <groupId>com.h2database</groupId>
          <artifactId>h2</artifactId>
          <scope>runtime</scope>
        </dependency>

Maven 依存関係管理の挿入

inject-maven-dependency-management アクションは、Maven 依存関係管理エントリを Maven pom.xml ファイルに挿入します。

text: フィールド内で Handlebars テンプレート変数と式を使用できます。

次のリストは、Maven 依存関係を挿入するための基本的な構文を示しています。

actions:
  - inject-maven-dependency-management:
      text: |
        <dependency>
          <groupId>org.springframework.modulith</groupId>
          <artifactId>spring-modulith-bom</artifactId>
          <version>0.6.0.RELEASE</version>
          <scope>import</scope>
          <type>pom</type>
        </dependency>

Maven ビルドプラグインの挿入

inject-maven-build-plugin アクションは、Maven ビルドプラグインエントリを Maven pom.xml ファイルに挿入します。

text: フィールド内で Handlebars テンプレート変数と式を使用できます。

次の例は、Maven 依存関係を挿入するための基本的な構文を示しています。

actions:
  - inject-maven-build-plugin:
      text: |
        <plugin>
           <groupId>net.bytebuddy</groupId>
           <artifactId>byte-buddy-maven-plugin</artifactId>
           <version>1.14.4</version>
           <configuration>
             <classPathDiscovery>true</classPathDiscovery>
           </configuration>
           <executions>
             <execution>
               <goals>
                 <goal>transform-extended</goal>
               </goals>
             </execution>
           </executions>
         </plugin>

Maven リポジトリの挿入

inject-maven-repository アクションは、Maven リポジトリエントリを Maven pom.xml ファイルに挿入します。

text: フィールド内で Handlebars テンプレート変数と式を使用できます。

次の例は、Maven リポジトリを挿入するための基本的な構文を示しています。

actions:
  - inject-maven-repository:
      text: |
        <repository>
          <id>spring-snapshots</id>
          <url>https://repo.spring.io/snapshot</url>
        </repository>