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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- result builderでミニDSLを構築する
- スコープ付きAPIと可読性のパターン
- UIフレームワークを使わない実践例