コマンドフラグ

コマンドフラグ

フラグは、ハイフン2つ(--)またはハイフン1つ(-)(フラグのエイリアスとして知られる)で指定される名前付きパラメータです。フラグは任意の順序で指定できます。

フラグはクラスのプロパティとして定義し、@flagsデコレータを使用してデコレートする必要があります。次の例では、resourcesingularのフラグを定義し、両方がブール値を表します。

import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.boolean()
declare resource: boolean
@flags.boolean()
declare singular: boolean
}

フラグの種類

Aceでは、次のいずれかのタイプのフラグを定義できます。

ブールフラグ

ブールフラグは、@flags.booleanデコレータを使用して定義されます。フラグを指定すると、その値がtrueに設定されます。それ以外の場合、フラグの値はundefinedです。

make:controller --resource
# this.resource === true
make:controller
# this.resource === undefined
make:controller --no-resource
# this.resource === false

最後の例では、ブールフラグは--no-接頭辞で否定することができることを示しています。

デフォルトでは、否定されたオプションはヘルプ出力に表示されません。ただし、showNegatedVariantInHelpオプションを使用して有効にすることもできます。

export default class MakeControllerCommand extends BaseCommands {
@flags.boolean({
showNegatedVariantInHelp: true,
})
declare resource: boolean
}

文字列フラグ

文字列フラグは、フラグ名の後に値を受け入れます。@flags.stringメソッドを使用して文字列フラグを定義できます。

import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.string()
declare model: string
}
make:controller --model user
# this.model = 'user'

フラグの値にスペースや特殊文字が含まれる場合は、引用符""で囲む必要があります。

make:controller --model blog user
# this.model = 'blog'
make:controller --model "blog user"
# this.model = 'blog user'

フラグが指定されているが値が提供されていない場合(フラグがオプションの場合でも)、エラーが表示されます。

make:controller
# できます!オプションのフラグは指定されていません
make:controller --model
# エラー!値が不足しています

数値フラグ

数値フラグの解析は文字列フラグと似ています。ただし、値が有効な数値であることを検証します。

@flags.numberデコレータを使用して数値フラグを作成できます。

import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeUserCommand extends BaseCommands {
@flags.number()
declare score: number
}

配列フラグ

配列フラグは、コマンドを実行する際にフラグを複数回使用できるようにします。@flags.arrayメソッドを使用して配列フラグを定義できます。

import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeUserCommand extends BaseCommands {
@flags.array()
declare groups: string[]
}
make:user --groups=admin --groups=moderators --groups=creators
# this.groups = ['admin', 'moderators', 'creators']

フラグ名と説明

デフォルトでは、フラグ名はクラスのプロパティ名のダッシュケース表記です。ただし、flagNameオプションを使用してカスタム名を定義できます。

@flags.boolean({
flagName: 'server'
})
declare startServer: boolean

フラグの説明はヘルプ画面に表示されます。descriptionオプションを使用して定義できます。

@flags.boolean({
flagName: 'server',
description: 'アプリケーションサーバーを起動します'
})
declare startServer: boolean

フラグのエイリアス

エイリアスは、単一のハイフン(-)を使用して指定されるフラグの省略名です。エイリアスは1文字である必要があります。

@flags.boolean({
aliases: ['r']
})
declare resource: boolean
@flags.boolean({
aliases: ['s']
})
declare singular: boolean

フラグのエイリアスは、コマンドを実行する際に組み合わせることができます。

make:controller -rs
# 以下と同じです
make:controller --resource --singular

デフォルト値

defaultオプションを使用してフラグのデフォルト値を定義できます。デフォルト値は、フラグが指定されていないか値がない場合に使用されます。

@flags.boolean({
default: true,
})
declare startServer: boolean
@flags.string({
default: 'sqlite',
})
declare connection: string

フラグ値の処理

parseメソッドを使用すると、フラグの値をクラスのプロパティとして定義する前に処理できます。

@flags.string({
parse (value) {
return value ? connections[value] : value
}
})
declare connection: string

すべてのフラグへのアクセス

this.parsed.flagsプロパティを使用すると、コマンドを実行する際に指定されたすべてのフラグにアクセスできます。フラグプロパティはキーと値のペアのオブジェクトです。

import { BaseCommand, flags } from '@adonisjs/core/ace'
export default class MakeControllerCommand extends BaseCommands {
@flags.boolean()
declare resource: boolean
@flags.boolean()
declare singular: boolean
async run() {
console.log(this.parsed.flags)
/**
* コマンドに指定されたが
* コマンドで受け入れられなかったフラグの名前
*/
console.log(this.parsed.unknownFlags)
}
}