Swift Macros vs Sourcery 比較

Swift 5.9+のネイティブなコンパイル時マクロ

VS
Sourcery

外部Swiftコード生成ツール(Stencilベース)

8 分で読了iOS

スコア比較

グラフを読み込み中...

詳細スコア

詳細スコア: Swift Macros Sourcery — カテゴリー別10点満点のスコア
カテゴリーSwift MacrosSourcery
パフォーマンス
9/10
7/10
学習のしやすさ
7/10
8/10
エコシステム
8/10
8/10
コミュニティ
8/10
9/10
求人市場
8/10
6/10
将来性
10/10
6/10

長所と短所

Swift Macros

長所

  • Swiftコンパイラにネイティブ統合 — 完璧な連携
  • 型安全 — 構文エラーをコンパイル時に検出
  • IDEサポート(Xcodeの自動補完、ナビゲーション)
  • @Observable、@Query、#Previewなどの組み込みマクロ
  • SwiftUI、SwiftData、Testingフレームワークで広く採用
  • 非同期処理・スレッドともに安全
  • プラットフォームを問わない(iOS、macOS、Linux)
  • 将来性がある — Appleが公式に推進

短所

  • Swift 5.9+限定(Xcode 15+が必要)
  • 学習曲線があり、SwiftSyntax APIの知識が必要
  • デバッグが難しい — マクロ展開を確認するには#expandを使用する必要がある
  • ビルド時間が増加する(初回ビルド時)

最適な用途

新規のSwift 5.9+プロジェクトSwiftUI、SwiftDataプロジェクトライブラリ/フレームワークの開発者型安全なDSLの構築Apple公式パターン(Testingフレームワーク)

Sourcery

長所

  • Swift 5.0+に対応(古いプロジェクトでも利用可能)
  • 外部ビルドフェーズで実行 — ランタイムには影響しない
  • Stencilテンプレート — 直感的に扱える
  • AutoMockable、AutoLenses、AutoEquatableといった組み込みアノテーション
  • Xcodeに統合(ビルドフェーズスクリプト)
  • コミュニティテンプレートが豊富
  • 生成コードをgitにコミットでき、内容を検査可能
  • モック生成に対する充実したサポート

短所

  • 外部依存(Swift Macrosはネイティブ)
  • ビルドフェーズが追加され、よりクリーンな統合はできない
  • 生成ファイルがリポジトリに含まれ、レビュー時のノイズになる
  • Swiftの型システムに関する制約がある(マクロより弱い)

最適な用途

レガシーなSwiftプロジェクト(5.0〜5.8)大規模なモック生成(テストスイート)チーム横断的なボイラープレート削減特定の生成パターン(Lens、Equatableなど)移行前のブリッジ的用途

コード比較

Swift Macros
@freestanding(expression)
public macro Color(_ hex: String) -> Color = #externalMacro(
    module: "MyMacros",
    type: "ColorFromHexMacro"
)

// 使用例:
let primary = #Color("#4A90E2")
// コンパイル時に展開 → UIColor(red: 0.29, green: 0.56, ...)
Sourcery
// Sourceryアノテーション
// sourcery: AutoMockable
protocol UserService {
    func fetchUser(id: String) async throws -> User
    func updateUser(_ user: User) async throws
}

// 生成される(自動) — MockUserService.generated.swift:
// class MockUserService: UserService { ... }

結論

新規のSwift 5.9+プロジェクトでは → Macrosが事実上の必須選択(ネイティブかつ将来性がある)。レガシー(5.0〜5.8)では → Sourceryが現実的な選択肢。移行戦略としては、Sourceryを段階的に廃止しMacrosへ移行するのが望ましいでしょう。2027年にはSourceryの利用はニッチになると予想されます。

無料相談を受ける
FAQ

よくある質問

はい、Macrosをメインに、Sourceryをモック生成用途でハイブリッドに使うことは可能です。ただし理想的には単一ツールに絞ることが望ましいです。

関連ブログ記事

すべての記事を見る
すべての比較