mirror of https://github.com/vapor/docs.git
129 lines
3.9 KiB
Markdown
129 lines
3.9 KiB
Markdown
# コマンド {#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 "
|
||
``` |