実行

このセクションでは、インタラクティブモードで動作するように Spring Shell をセットアップする方法について説明します。

インタラクションモード

バージョン 2.1.x では、対話モードと非対話モードを区別する組み込みサポートが導入されました。これにより、カスタマイズを必要とせずにシェルを単純なコマンドラインツールとして簡単に使用できます。

現在、コマンドラインからシェルを起動または実行するときにコマンドラインオプションが渡されると、対話モードに入ります。これは、シェルアプリケーションがネイティブサポートでコンパイルされている場合に特にうまく機能します。

一部のコマンドは、対話モードで実行したり、(逆に) 非対話モードで実行したりすると、有用な意味を持たない場合があります。例: 組み込みの exit コマンドは、対話モードを終了するために使用されるため、非対話モードでは意味がありません。

@ShellMethod アノテーションには interactionMode と呼ばれるフィールドがあり、特定のコマンドがいつ使用可能になるかをシェルに通知するために使用できます。

シェルランナー

ShellApplicationRunner は、Boot の ApplicationArguments が渡されるメインインターフェースであり、そのデフォルトの実装によって、どの ShellRunner を使用するかが選択されます。ShellApplicationRunner は 1 つしか存在できませんが、何らかの理由で必要に応じて再定義できます。

ShellRunner 実装は 3 つ存在し、それぞれ InteractiveShellRunnerNonInteractiveShellRunnerScriptShellRunner と呼ばれます。デフォルトでは NonInteractiveShellRunner のみが有効になっています。有効状態は、それぞれ spring.shell.interactive.enabledspring.shell.noninteractive.enabledspring.shell.script.enabled プロパティを使用して変更できます。

たとえば、インタラクティブランナーとスクリプトランナーを有効にするには、次のプロパティを使用します。

spring:
  shell:
    interactive:
      enabled: true
    script:
      enabled: true
3.2.x までのバージョンではすべてのランナーがデフォルトで有効になっていましたが、3.3.x 以降では NonInteractiveShellRunner のみがデフォルトで有効になっています。

3.3.x から始まる ShellRunner インターフェースには、新しいメソッドがあります。

default boolean run(String[] args) throws Exception {
  return false;
}
これは今後のメイン API となり、Boot の ApplicationArguments を使用する他の既存のメソッドは非推奨となり、将来削除される予定です。