プロンプト

プロンプト

プロンプトは、ユーザーの入力を受け付けるための対話型ターミナルウィジェットです。Aceプロンプトは、@poppinss/promptsパッケージによってサポートされており、次のプロンプトタイプをサポートしています。

  • 入力
  • リスト
  • パスワード
  • 確認
  • トグル
  • 選択
  • マルチ選択
  • オートコンプリート

Aceプロンプトは、テストを考慮して構築されています。テストを作成する際には、プロンプトをトラップしてプログラムで応答できます。

参考: Aceコマンドのテスト

プロンプトの表示

すべてのAceコマンドで利用可能なthis.promptプロパティを使用して、プロンプトを表示できます。

import { BaseCommand } from '@adonisjs/core/ace'
export default class GreetCommand extends BaseCommand {
async run() {
const modelName = await this.prompt.ask('モデル名を入力してください')
console.log(modelName)
}
}

プロンプトオプション

プロンプトで受け入れられるオプションのリストは次のとおりです。このテーブルを唯一の情報源として参照できます。

オプション 受け入れられるプロンプト 説明

default(文字列)

すべてのプロンプト

値が入力されなかった場合に使用するデフォルト値です。selectmultiselectautocompleteプロンプトの場合、値は選択肢の配列インデックスである必要があります。

name(文字列)

すべてのプロンプト

プロンプトのユニークな名前です。

hint(文字列)

すべてのプロンプト

プロンプトの横に表示するヒントテキストです。

result(関数)

すべてのプロンプト

プロンプトの戻り値を変換します。resultメソッドの入力値はプロンプトによって異なります。たとえば、multiselectプロンプトの値は選択された選択肢の配列になります。

{
result(value) {
return value.toUpperCase()
}
}

format(関数)

すべてのプロンプト

ユーザーが入力するときに入力値をライブでフォーマットします。フォーマットはCLIの出力にのみ適用され、戻り値には適用されません。

{
format(value) {
return value.toUpperCase()
}
}

validate(関数)

すべてのプロンプト

ユーザーの入力をバリデーションします。メソッドからtrueを返すとバリデーションが成功します。falseまたはエラーメッセージの文字列を返すと失敗と見なされます。

{
format(value) {
return value.length > 6
? true
: 'モデル名は6文字である必要があります'
}
}

limit(数値)

autocomplete

表示するオプションの数を制限します。残りのオプションを表示するにはスクロールする必要があります。

テキスト入力

prompt.askメソッドを使用して、テキスト入力を受け付けるためのプロンプトをレンダリングできます。メソッドは、最初のパラメータとしてプロンプトメッセージを受け入れ、2番目のパラメータとしてオプションオブジェクトを受け入れます。

await this.prompt.ask('モデル名を入力してください')
// 入力のバリデーション
await this.prompt.ask('モデル名を入力してください', {
validate(value) {
return value.length > 0
}
})
// デフォルト値
await this.prompt.ask('モデル名を入力してください', {
default: 'User'
})

マスクされた入力

名前の通り、マスクされた入力プロンプトはターミナルでユーザーの入力をマスクします。prompt.secureメソッドを使用してマスクされたプロンプトを表示できます。

メソッドは、最初のパラメータとしてプロンプトメッセージを受け入れ、2番目のパラメータとしてオプションオブジェクトを受け入れます。

await this.prompt.secure('アカウントのパスワードを入力してください')
await this.prompt.secure('アカウントのパスワードを入力してください', {
validate(value) {
return value.length < 6
? 'パスワードは6文字である必要があります'
: true
}
})

選択肢のリスト

prompt.choiceメソッドを使用して、単一の選択肢のリストを表示できます。メソッドは次のパラメータを受け入れます。

  1. プロンプトメッセージ。
  2. 選択肢の配列。
  3. オプションのオプションオブジェクト
await this.prompt.choice('パッケージマネージャーを選択してください', [
'npm',
'yarn',
'pnpm'
])

異なる表示値を指定するには、オプションをオブジェクトとして定義できます。nameプロパティがプロンプトの結果として返され、messageプロパティがターミナルに表示されます。

await this.prompt.choice('データベースドライバーを選択してください', [
{
name: 'sqlite',
message: 'SQLite'
},
{
name: 'mysql',
message: 'MySQL'
},
{
name: 'pg',
message: 'PostgreSQL'
}
])

マルチ選択の選択肢

prompt.multipleメソッドを使用して、選択肢リストで複数の選択を許可できます。パラメータはchoiceプロンプトと同じです。

await this.prompt.multiple('データベースドライバーを選択してください', [
{
name: 'sqlite',
message: 'SQLite'
},
{
name: 'mysql',
message: 'MySQL'
},
{
name: 'pg',
message: 'PostgreSQL'
}
])

アクションの確認

prompt.confirmメソッドを使用して、はい/いいえオプションを持つ確認プロンプトを表示できます。メソッドは、最初のパラメータとしてプロンプトメッセージを受け入れ、2番目のパラメータとしてオプションオブジェクトを受け入れます。

confirmプロンプトはブール値を返します。

const deleteFiles = await this.prompt.confirm(
'すべてのファイルを削除しますか?'
)
if (deleteFiles) {
}

はい/いいえオプションの表示値をカスタマイズするには、prompt.toggleメソッドを使用できます。

const deleteFiles = await this.prompt.toggle(
'すべてのファイルを削除しますか?',
['はい', 'いいえ']
)
if (deleteFiles) {
}

オートコンプリート

autocompleteプロンプトは、選択とマルチ選択のプロンプトの組み合わせですが、選択肢をフジー検索する機能があります。

const selectedCity = await this.prompt.autocomplete(
'都市を選択してください',
await getCitiesList()
)