0Pricing
Swift Academy · レッスン

UIフレームワークを使わない実践例

UIなしで実用的な小さなDSLを作成します。設定ファイル、シンプルなクエリビルダー、テキスト/Markdown生成器、 @resultBuilder を使った検証パイプラインを扱います。

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

UI以外のResult Builder

UI以外にも、さまざまな用途に便利なDSLを構築できます。ここでは設定、クエリ、テキスト、検証のビルダーを作成します。それぞれを小さく、目的を絞ったものにしてください。

設定ビルダー

設定ビルダーは、単純なタプルを辞書に集めます。呼び出し側のコードが整い、確認しやすくなります。

@resultBuilder
struct ConfigBuilder {
    static func buildBlock(_ parts: (String,String)...) -> [String:String] {
        var dict: [String:String] = [:]
        for (k,v) in parts { dict[k] = v }
        return dict
    }
}
func config(@ConfigBuilder _ body: () -> [String:String]) -> [String:String] { body() }

// Use it:
let cfg = config {
    ("ENV", "debug")
    ("API_URL", "https://api.example.com")
    ("RETRY", "3")
}
print(cfg["API_URL"] ?? "missing")

クエリビルダー

クエリビルダーは句をANDで連結します。ビルダーのフックを使ってif/elseとループをサポートします。

struct Where { let clauses: [String] }
@resultBuilder
struct WhereBuilder {
    static func buildBlock(_ parts: String...) -> Where { Where(clauses: parts) }
    static func buildArray(_ parts: [String]) -> Where { Where(clauses: parts) }
    static func buildEither(first: Where) -> Where { first }
    static func buildEither(second: Where) -> Where { second }
}
func whereClauses(@WhereBuilder _ body: () -> Where) -> Where { body() }

func select(_ table: String, where w: Where) -> String {
    let filter = w.clauses.isEmpty ? "" : " WHERE " + w.clauses.joined(separator: " AND ")
    return "SELECT * FROM \(table)\(filter);"
}

// Use:
let isProd = false
let q = select("users", where: whereClauses {
    "age > 18"
    if isProd { "status = 'active'" } else { "status <> 'deleted'" }
})
print(q)

テキスト/Markdownビルダー

テキストビルダーは1つのStringを生成します。h2やbulletのようなヘルパーによって、ブロックを読みやすく保てます。

@resultBuilder
struct TextBuilder {
    static func buildBlock(_ parts: String...) -> String { parts.joined(separator: "\n") }
    static func buildEither(first: String) -> String { first }
    static func buildEither(second: String) -> String { second }
    static func buildArray(_ parts: [String]) -> String { parts.joined(separator: "\n") }
}
func md(@TextBuilder _ body: () -> String) -> String { body() }

func h2(_ s: String) -> String { "## " + s }
func bullet(_ s: String) -> String { "- " + s }

let doc = md {
    h2("Release Notes")
    bullet("Faster build")
    bullet("Smaller binary")
}
print(doc)

検証ビルダー

検証ルールを集めてから、パイプラインとして実行します。ブロックは宣言的なまま保たれ、実行は後で行われます。

struct ValidationResult { let ok: Bool; let messages: [String] }

typealias Rule = (String) -> String?   // nil = OK; otherwise error message

@resultBuilder
struct RulesBuilder {
    static func buildBlock(_ parts: Rule...) -> [Rule] { parts }
    static func buildArray(_ parts: [[Rule]]) -> [Rule] { parts.flatMap { $0 } }
}
func rules(@RulesBuilder _ body: () -> [Rule]) -> [Rule] { body() }

func validate(_ input: String, with rules: [Rule]) -> ValidationResult {
    var msgs: [String] = []
    for r in rules { if let m = r(input) { msgs.append(m) } }
    return ValidationResult(ok: msgs.isEmpty, messages: msgs)
}

// Use:
let rs = rules {
    { $0.isEmpty ? "Must not be empty" : nil }
    { $0.count < 3 ? "Too short" : nil }
}
let out = validate("hi", with: rs)
print(out.ok, out.messages)

設計のヒント

ヒント:

  • まずはbuildBlockから始め、必要な場合だけeither/arrayを追加してください。
  • 生成する型はシンプルにしてください: String、配列、小さな構造体。
  • DSLごとにエントリー関数を1つ用意してください(例: config、md)。
  • 許可される文とエスケープ規則をドキュメント化してください。

UI以外でのビルダーの使用例

確認問題: ビルダーのUI以外での適切な用途を1つ選んでください:

まとめ

まとめ: Result Builder は構造化された入力(設定、クエリ、テキスト、検証)で特に力を発揮します。最小限で、読みやすく、適切なスコープに限定されたものにしてください。

よくある質問

「UIフレームワークを使わない実践例」レッスンは無料ですか?

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

「UIフレームワークを使わない実践例」で何を学びますか?

UIなしで実用的な小さなDSLを作成します。設定ファイル、シンプルなクエリビルダー、テキスト/Markdown生成器、 @resultBuilder を使った検証パイプラインを扱います。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「UIフレームワークを使わない実践例」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. result builderでミニDSLを構築する
  2. スコープ付きAPIと可読性のパターン
  3. UIフレームワークを使わない実践例
← Swift Academyに戻る