【ITニュース解説】[Swift] custom flagsを利用してスキーマ毎に英/日アプリをビルドするcustom flags active compilation conditions
2025年09月13日に「Qiita」が公開したITニュース「[Swift] custom flagsを利用してスキーマ毎に英/日アプリをビルドするcustom flags active compilation conditions」について初心者にもわかりやすく解説しています。
ITニュース概要
Swiftアプリ開発で、日本語版と英語版など、アプリの種類ごとに異なる言語設定でアプリを作成する方法を解説。XcodeのCustom Flagsを使い、スキーマごとにコンパイル時の設定を変えることで、一つのプロジェクトから複数の言語版アプリを作成できる。
ITニュース解説
システムエンジニアを目指す初心者がアプリ開発の世界に足を踏み入れると、多種多様な課題に直面する。その一つに、リリースするアプリを特定の地域やユーザー層に合わせてカスタマイズしたいという要望がある。例えば、同じアプリでも日本向けには日本語版を、海外向けには英語版をリリースしたい場合や、特定の機能は日本でのみ提供し、海外版では含めたくないといった状況である。このような場合、単純にコードをコピーしてそれぞれを別々のプロジェクトとして管理する方法も考えられるが、それではコードの重複が多くなり、不具合修正や機能追加の際に、すべてのプロジェクトに同じ変更を適用する必要が生じ、管理が非常に複雑になるという問題がある。
ここで紹介するのは、このような課題を解決するための洗練された手法である。それは、Swift言語を用いたiOSアプリ開発において、Xcodeの「カスタムフラグ」と「アクティブコンパイル条件」を活用し、一つのプロジェクトから複数のバリエーションのアプリを効率的にビルドする方法である。
まず、「ビルド」という言葉について理解を深めよう。アプリ開発では、プログラミング言語で書かれたソースコードを、スマートフォンやコンピュータが実行できる形式に変換する作業が必要である。この変換作業を「ビルド」と呼び、このビルドが完了して初めて、ユーザーが利用できるアプリが完成する。ビルドの過程では、コードのコンパイル、リンク、リソースのパッケージ化など、様々な工程が行われる。
次に、「スキーマ」という概念がある。Xcodeでは、このビルドに関する設定をまとめたものを「スキーマ」と呼ぶ。例えば、開発中にデバッグしやすい設定でビルドするためのスキーマ、テストを行うためのスキーマ、そして App Store にリリースするための最終版をビルドするためのスキーマなど、目的に応じて複数のスキーマを作成し、切り替えて利用できる。これにより、ビルドの挙動を状況に合わせて柔軟に変更することが可能になる。
そして本題である「カスタムフラグ」である。これは、ビルドの際にコンパイラというプログラムに特定の情報や指示を与えるための「目印」のようなものである。Xcodeのビルド設定には、「Swift Compiler -Custom Flags」という項目があり、ここに任意の文字列を設定できる。この文字列が、コンパイラに渡されるカスタムフラグとなる。このカスタムフラグをスキーマごとに設定できる点が重要である。つまり、日本語版アプリ用のスキーマでは「JAPANESE_APP」というフラグを設定し、英語版アプリ用のスキーマでは何も設定しない、あるいは別のフラグを設定するといった運用が可能になる。
このカスタムフラグが真価を発揮するのが、「アクティブコンパイル条件」と組み合わせたときである。アクティブコンパイル条件とは、Swiftのソースコード内で特定の条件が満たされた場合にのみ、その部分のコードをコンパイルする、という制御を行う仕組みである。これは #if や #elseif、#endif といった特別なキーワードを使って記述する。例えば、以下のようにコードを書くことができる。
1#if JAPANESE_APP 2 // JAPANESE_APP フラグが設定されている場合にのみコンパイルされる日本語版向けのコード 3 let welcomeMessage = "ようこそ!" 4#else 5 // JAPANESE_APP フラグが設定されていない場合にのみコンパイルされる英語版向けのコード 6 let welcomeMessage = "Welcome!" 7#endif
この例では、日本語版アプリをビルドするためのスキーマで JAPANESE_APP というカスタムフラグが設定されていれば、welcomeMessage には「ようこそ!」が代入されるコードがコンパイルされる。一方で、英語版アプリをビルドするためのスキーマでは、JAPANESE_APP フラグが設定されていないため、welcomeMessage には「Welcome!」が代入されるコードがコンパイルされる。このように、一つのソースファイル内に異なるバージョンのコードを共存させながら、ビルド時に必要な部分だけを選んで最終的なアプリに含めることができるのである。
この手法の最大のメリットは、一つのプロジェクト、一つのソースコードベースで複数のアプリバリエーションを管理できる点にある。これにより、コードの重複を劇的に減らし、メンテナンスコストを大幅に削減できる。ある機能にバグが見つかった場合でも、修正は一箇所で行えば、すべてのバリエーションにその修正が適用される。また、新しい機能を追加する際も、必要に応じて条件分岐を追加するだけで済むため、開発効率も向上する。個人開発で複数のターゲット層に向けてアプリをリリースしたい場合だけでなく、企業開発においても、地域限定機能や、特定の顧客向けカスタマイズ版アプリなどを効率的に開発・管理するための重要な手法となる。
まとめると、Swiftのカスタムフラグとアクティブコンパイル条件は、アプリ開発において、単一のコードベースから複数の異なるアプリケーション(例えば多言語対応版や機能差のある版)を効率的に生成するための強力な仕組みである。スキーマを利用してビルド設定を切り替え、カスタムフラグをコンパイラに渡し、そのフラグに基づいてソースコード内の条件付きコンパイルを行うことで、コードの重複を避け、管理性を高めながら、多様なニーズに応えるアプリ開発が可能となる。システムエンジニアを目指す上では、このような効率的な開発手法を理解し、活用できる能力は非常に重要である。