ボイラープレートを削減するアタッチドメンバーマクロ
メンバーマクロでinit、CodingKeys、Equatable適合を自動生成します。
「ボイラープレートを削減するアタッチドメンバーマクロ」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
メンバーマクロの概要
アタッチドメンバーマクロは、装飾された型に新しいメンバー(プロパティ、メソッド、init)を直接生成します。
@AddID
struct User { var name: String }
// After expansion:
// struct User { var name: String; var id = UUID() }MemberMacroに準拠する
MemberMacroを実装し、新しいメンバーを表すDeclSyntaxの配列を返します。
import SwiftSyntaxMacros
struct AddIDMacro: MemberMacro {
static func expansion(
of node: AttributeSyntax,
providingMembersOf decl: some DeclGroupSyntax,
in context: some MacroExpansionContext
) throws -> [DeclSyntax] {
return ["var id = UUID()"]
}
}initを生成する
メンバーマクロは、必要に応じてカスタムイニシャライザーを生成し、メンバーワイズinitを置き換えられます。
// Macro expansion returns:
[
"init(name: String) { self.name = name; self.id = UUID() }"
]@Observableマクロの内部
Swift組み込みの@Observableはメンバーマクロを使用して、クラスに監視のための基盤を追加します。
@Observable
class Counter {
var count = 0
// macro adds: _$observationRegistrar, access(), withMutation()
}装飾された型を読み取る
declパラメーターを通して装飾された型のプロパティにアクセスし、コンテキストに応じたメンバーを生成します。
if let structDecl = decl.as(StructDeclSyntax.self) {
let members = structDecl.memberBlock.members
// iterate to inspect stored properties
}storedプロパティを抽出する
メンバーの一覧を、storedプロパティのパターンを持つ変数宣言に絞り込み、コード生成に利用します。
let storedProps = members.compactMap { member -> VariableDeclSyntax? in
guard let varDecl = member.decl.as(VariableDeclSyntax.self),
varDecl.bindingSpecifier.tokenKind == .keyword(.var)
else { return nil }
return varDecl
}メンバーからEquatableを生成する
@AutoEquatableマクロは、各storedプロパティを比較することで==を生成できます。
// Generated code:
static func == (lhs: User, rhs: User) -> Bool {
lhs.name == rhs.name && lhs.id == rhs.id
}メンバーマクロと準拠マクロを組み合わせる
メンバーの追加とプロトコル準拠の宣言を同時に行うために、MemberMacroとConformanceMacroを組み合わせることがよくあります。
struct AutoEquatableMacro: MemberMacro, ConformanceMacro { ... }属性の引数
マクロに引数を受け取らせ、生成するコードをカスタマイズできます。
@Clamped(range: 0...100)
var score: Int = 50
// macro reads range from attribute node and generates clamping accessorsマクロのエラー報告
マクロが誤って使用された場合は、MacroExpansionErrorをスローするか、診断情報を出力します。
guard decl.is(StructDeclSyntax.self) else {
throw MacroError.message("@AddID can only be applied to structs")
}ビルドパフォーマンス
展開はコンパイル時に行われるため、メンバーマクロによる実行時オーバーヘッドはゼロで、生成されたコードはキャッシュ可能です。
// All generated members are emitted as source code
// and compiled normally — no reflection at runtime理解度チェック
アタッチドメンバーマクロは、どのプロトコルに準拠する必要がありますか。
レッスンのまとめ
メンバーマクロ(MemberMacro)は、装飾する型にstoredプロパティ、computedプロパティ、イニシャライザーを生成します。型が既に持つメンバーを読み取り、コンテキストに応じたコードを生成します。ConformanceMacroと組み合わせると、プロトコル準拠も追加できます。
AI チューターと学ぶ Swift — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 122
- レッスン
- 409
よくある質問
「ボイラープレートを削減するアタッチドメンバーマクロ」レッスンは無料ですか?
はい。「ボイラープレートを削減するアタッチドメンバーマクロ」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「ボイラープレートを削減するアタッチドメンバーマクロ」で何を学びますか?
メンバーマクロでinit、CodingKeys、Equatable適合を自動生成します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ボイラープレートを削減するアタッチドメンバーマクロ」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- マクロの役割:フリースタンディングとアタッチド
- フリースタンディング式マクロの記述
- ボイラープレートを削減するアタッチドメンバーマクロ
- マクロのテストとデバッグ