はじめに
SwiftGenは、iOSアプリ開発においてリソース(画像、色、文字列など)を型安全に扱うためのツールです。この記事では、SwiftGenの基本的な使い方とセットアップ方法を解説します。
SwiftGenとは
SwiftGenは、プロジェクト内のリソース(画像、色、フォント、ローカライズされた文字列など)に対してSwiftコードを自動生成し、タイプセーフな使用を可能にするCLIツールです。これにより、以下のメリットが得られます:
- タイポによるエラーの防止
- 存在しないリソースの使用を防止
- コード補完の恩恵
セットアップ方法
1. SwiftGenのインストール
SwiftGenは複数の方法でインストールできますが、ここではCocoaPodsを使用する方法を紹介します。(CocoaPodsの導入方法についてはCocoaPods入門:iOSアプリ開発における依存関係管理ツールをご参照ください。)
Podfileに以下の行を追加します:
pod 'SwiftGen', '~> 6.0'
ターミナルで以下のコマンドを実行します:
pod install
2. 設定ファイルの作成
プロジェクトのルートディレクトリで以下のコマンドを実行し、設定ファイルを作成します。
./Pods/SwiftGen/bin/swiftgen config init
作成されたswiftgen.ymlファイルを編集します。以下は例です:
xcassets:
inputs:
- YourProject/Resources/Assets.xcassets
- YourProject/Resources/Colors.xcassets
outputs:
templateName: swift5
output: YourProject/Generated/Assets.swift
strings:
inputs: YourProject/Resources/Localizable.strings
outputs:
templateName: structured-swift5
output: YourProject/Generated/Strings.swift
fonts:
inputs: YourProject/Resources/Fonts
outputs:
templateName: swift5
output: YourProject/Generated/Fonts.swift
3. コード生成の自動化
ビルド時に自動的にSwiftGenを実行するために、以下の手順を行います:
- Xcodeでプロジェクトを開きます。
- ターゲットの「Build Phases」タブを開きます。
- 「+」ボタンをクリックし、「New Run Script Phase」を選択します。
- 以下のスクリプトを追加します:
$PODS_ROOT/SwiftGen/bin/swiftgen config run --config $SRCROOT/swiftgen.yml
使用例
SwiftGenを設定後、以下のように型安全にリソースにアクセスできます:
// 画像の使用
imageView.image = Asset.Assets.imgApple.image
// 色の使用
view.backgroundColor = Asset.Colors.backgroundColor.color
// ローカライズされた文字列の使用
label.text = L10n.sampleText1
// フォントの使用
label.font = FontFamily.ConcertOne.regular.font(size: 20)
おわりに
ここまでSwiftGenの使い方を説明してきましたが、メリット・デメリットの話を詳しく書いていなかったので最後に紹介したいと思います。SwiftGenを使う上でのメリット・デメリットは以下の通りです:
メリット
- コードジェネレートするリソースを選択可能で、必要なものだけに絞れる
- ビルドが不要なため、コード生成が高速
- 設定ファイル(swiftgen.yml)ベースで、チーム内で同じルールを共有しやすい
- 差分を見てコード生成するため、不要な再生成を避けられる
- 生成先や生成元のパス、リソースの選択など設定が柔軟
- スネークケースの文字列をキャメルケースに変換してくれる
デメリット
- R.Swiftと比べて導入がやや面倒
- 日本語のドキュメントや説明が少ない
- Xibファイルからのコード生成に対応していない
- 最初のコード生成時、生成ファイルを手動でXcodeに追加する必要がある
- SwiftUI環境でのLocalizationのオーバーライドに標準では対応していない
- 現状Sendableに対応していないため、警告が出る可能性がある
SwiftGenを使用することで、リソースへのアクセスが型安全になり、開発効率が向上します。大規模なプロジェクトほどその恩恵は大きくなると思います。ぜひ、自身のプロジェクトに導入して、より安全で効率的なiOS開発を目指しましょう!