Swift Academy · レッスン

Swiftスクリプト(swift shebang)とコマンドラインツール

shebang 付きで実行可能なSwiftスクリプトを作成し、 CommandLine.arguments を読み取り、ヘルプを表示して、適切なステータスコードで終了します。

レッスン 1/38 ステップ

「Swiftスクリプト(swift shebang)とコマンドラインツール」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全3レッスンが含まれています。

Swiftスクリプトを使う理由

Swiftはスクリプト言語として利用できます。shebangを使ってファイルを直接実行し、CommandLine.argumentsを解析し、自動化のためにステータスコードで終了します。

Shebangの基本

1行目に#!/usr/bin/env swiftを追加し、ファイルを実行可能にして、シェルスクリプトと同じように実行します。

// First line (shebang) when saved to a file:
// #!/usr/bin/env swift
// Then mark file executable: chmod +x tool.swift
// Run directly: ./tool.swift

print("Hello from a Swift script!")

引数の解析

入力値を読み取るにはCommandLine.argumentsを使います。必要なパラメーターが不足している場合は、短いUsageメッセージを表示してください。

// Parse arguments: CommandLine.arguments[0] is the script path.
let args = CommandLine.arguments.dropFirst()  // ignore script name
if args.isEmpty {
    print("Usage: greet.swift <name>")
} else {
    let name = args[args.startIndex]
    print("Hello, \\(name)!")
}

小さなオプション

依存関係なしで小さなフラグを実装します。ヘルプは明確にしてください:--help、--times N、--shout。

// Very small options parser: --shout and --times
struct Options {
    var shout = false
    var times = 1
    var rest: [String] = []
}

func parse(_ raw: ArraySlice<String>) -> Options {
    var o = Options()
    var it = raw.makeIterator()
    while let token = it.next() {
        switch token {
        case "--help", "-h":
            print("Usage: echo.swift [--shout] [--times N] <text>")
            exit(0)
        case "--shout":
            o.shout = true
        case "--times":
            if let nStr = it.next(), let n = Int(nStr), n > 0 { o.times = n }
        default:
            o.rest.append(token)
        }
    }
    return o
}

let options = parse(CommandLine.arguments.dropFirst())
let text = options.rest.joined(separator: " ").isEmpty ? "echo" : options.rest.joined(separator: " ")
let output = options.shout ? text.uppercased() : text
for _ in 0..<options.times { print(output) }

終了ステータス

成功時にはexit(0)を使い、失敗時には0以外の値を使います。シェルパイプラインのために、エラーはstderrに出力してください。

import Foundation

enum CLIError: Error { case invalidInput }

func validateNumber(_ s: String) throws -> Int {
    guard let n = Int(s) else { throw CLIError.invalidInput }
    return n
}

let args2 = CommandLine.arguments.dropFirst()
do {
    guard let first = args2.first else {
        print("Usage: num.swift <int>"); exit(64) // EX_USAGE
    }
    let n = try validateNumber(first)
    print("ok:", n)
    exit(0)
} catch {
    fputs("error: \\(error)\\n", stderr)
    exit(1)
}

コンパイルと配布

配布用にはswiftcでコンパイルしてバイナリを作成します。大規模なCLIではSwiftPMに移行し、swift runを使います。

// You can compile a single-file tool:
// swiftc tool.swift -o tool
// ./tool --help
print("Tip: use swiftc to build a tiny binary; for multi-file CLIs prefer SwiftPM (swift package init).")

Shebangの目的

確認問題:shebangによって何が可能になりますか?

まとめ

まとめ:shebangを追加し、CommandLine.argumentsを読み取り、Usageを表示して、適切な終了コードで終了します。swiftcでコンパイルするか、大きなツールではSwiftPMに移行してください。

無料で開始

AI チューターと学ぶ Swift — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
122
レッスン
409

よくある質問

「Swiftスクリプト(swift shebang)とコマンドラインツール」レッスンは無料ですか?

はい。「Swiftスクリプト(swift shebang)とコマンドラインツール」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全3レッスンが含まれています。

「Swiftスクリプト(swift shebang)とコマンドラインツール」で何を学びますか?

shebang 付きで実行可能なSwiftスクリプトを作成し、 CommandLine.arguments を読み取り、ヘルプを表示して、適切なステータスコードで終了します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。

「Swiftスクリプト(swift shebang)とコマンドラインツール」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. Swiftスクリプト(swift shebang)とコマンドラインツール
  2. C/Obj-C相互運用の概要(iOS固有の内容なし)
  3. SPMでバイナリをパッケージ化する
← Swift Academyに戻る