# コマンド {#commands} VaporのCommand APIを使用すると、カスタムコマンドライン関数を構築し、ターミナルと対話できます。これは、`serve`、`routes`、`migrate`などのVaporのデフォルトコマンドが構築されている基盤です。 ## デフォルトコマンド {#default-commands} `--help`オプションを使用して、Vaporのデフォルトコマンドについて詳しく学ぶことができます。 ```sh swift run App --help ``` 特定のコマンドに`--help`を使用すると、そのコマンドが受け入れる引数とオプションを確認できます。 ```sh swift run App serve --help ``` ### Xcode Xcodeでコマンドを実行するには、`App`スキームに引数を追加します。これを行うには、次の手順に従います: - `App`スキームを選択(再生/停止ボタンの右側) - 「Edit Scheme」をクリック - 「App」プロダクトを選択 - 「Arguments」タブを選択 - 「Arguments Passed On Launch」にコマンド名を追加(例:`serve`) ## カスタムコマンド {#custom-commands} `AsyncCommand`に準拠する型を作成することで、独自のコマンドを作成できます。 ```swift import Vapor struct HelloCommand: AsyncCommand { ... } ``` カスタムコマンドを`app.asyncCommands`に追加すると、`swift run`経由で利用可能になります。 ```swift app.asyncCommands.use(HelloCommand(), as: "hello") ``` `AsyncCommand`に準拠するには、`run`メソッドを実装する必要があります。これには`Signature`の宣言が必要です。また、デフォルトのヘルプテキストも提供する必要があります。 ```swift import Vapor struct HelloCommand: AsyncCommand { struct Signature: CommandSignature { } var help: String { "Says hello" } func run(using context: CommandContext, signature: Signature) async throws { context.console.print("Hello, world!") } } ``` このシンプルなコマンドの例には引数やオプションがないため、シグネチャは空のままにします。 提供されたコンテキストを介して現在のコンソールにアクセスできます。コンソールには、ユーザー入力のプロンプト、出力のフォーマットなど、多くの便利なメソッドがあります。 ```swift let name = context.console.ask("What is your \("name", color: .blue)?") context.console.print("Hello, \(name) 👋") ``` 次のコマンドを実行してコマンドをテストします: ```sh swift run App hello ``` ### Cowsay `@Argument`と`@Option`の使用例として、有名な[`cowsay`](https://en.wikipedia.org/wiki/Cowsay)コマンドの再現を見てみましょう。 ```swift import Vapor struct Cowsay: AsyncCommand { struct Signature: CommandSignature { @Argument(name: "message") var message: String @Option(name: "eyes", short: "e") var eyes: String? @Option(name: "tongue", short: "t") var tongue: String? } var help: String { "Generates ASCII picture of a cow with a message." } func run(using context: CommandContext, signature: Signature) async throws { let eyes = signature.eyes ?? "oo" let tongue = signature.tongue ?? " " let cow = #""" < $M > \ ^__^ \ ($E)\_______ (__)\ )\/\ $T ||----w | || || """#.replacingOccurrences(of: "$M", with: signature.message) .replacingOccurrences(of: "$E", with: eyes) .replacingOccurrences(of: "$T", with: tongue) context.console.print(cow) } } ``` これをアプリケーションに追加して実行してみてください。 ```swift app.asyncCommands.use(Cowsay(), as: "cowsay") ``` ```sh swift run App cowsay sup --eyes ^^ --tongue "U " ```