Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】[Swift] AdMob を SwiftUI のみでデザインして実装する

2025年10月05日に「Qiita」が公開したITニュース「[Swift] AdMob を SwiftUI のみでデザインして実装する」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

SwiftのAdMobは公式でUIKitしかサポートしないため、筆者はSwiftUIのみでAdMobをデザイン・実装する方法を独自に探求し、実現した。この記事は、システムエンジニア初心者向けに、その具体的な手順と知見をわかりやすく解説する。

ITニュース解説

この解説記事では、Swiftというプログラミング言語と、それを用いて作られたアプリのUI(ユーザーインターフェース)構築に利用されるSwiftUI、そしてアプリに広告を表示して収益を得るためのAdMobというサービスに焦点を当てる。特に、AdMobの公式ツールがSwiftUIに対応していない状況で、どのようにすればSwiftUIのアプリにAdMobの広告を組み込めるのか、その技術的な工夫について解説する。

まず、SwiftUIとは何か。これはAppleが提供する、iPhoneやiPad、Macなどのアプリの画面デザイン(UI)を効率的に作るための新しい技術である。コードがシンプルで、変更が画面にすぐに反映されるため、開発者にとって非常に扱いやすい特徴がある。一方、AdMobはGoogleが提供する、アプリ内にバナー広告や動画広告などを表示し、それによってアプリ開発者が収益を得るための仕組みだ。多くの人気アプリでこのAdMobが利用されている。

問題は、AdMobをアプリに組み込むための公式ツール(SDK)が、SwiftUIよりも古いUI構築技術であるUIKitにしか対応していない点にある。UIKitはSwiftUIよりも歴史が長く、より低レベルな制御が可能だが、コードが複雑になりやすい。SwiftUIを使いたい開発者にとっては、この「SwiftUIとAdMobの隔たり」が大きな課題となる。この記事は、この隔たりを乗り越え、SwiftUIのアプリでAdMobの広告を表示させるための具体的な方法を示すものだ。

その解決策の中心となるのが、「UIViewControllerRepresentable」というSwiftUIの機能である。これは、SwiftUIの画面の中に、UIKitで作られた画面部品(ビューコントローラ)を組み込むための「橋渡し役」のようなものだと考えると良い。AdMobのSDKはUIKitのビューコントローラとして広告を表示するため、このUIViewControllerRepresentableを使って、AdMobの広告ビューをSwiftUIの世界に取り込むことができる。

記事では、AdMobの広告機能をSwiftUIの仕組みに自然に統合するためのいくつかの工夫が紹介されている。一つは、広告を表示するビューを「ViewModifier」として作成する方法だ。ViewModifierはSwiftUIの機能で、既存のビューに対して特定の振る舞いや見た目を追加するためのものだ。広告表示ロジックをViewModifierとして実装することで、任意のSwiftUIビューに簡単に広告機能を追加できるようになる。例えば、画面下部に常にバナー広告を表示したい場合、該当のビューにそのViewModifierを適用するだけで、広告が表示されるようになる。

また、広告の読み込みや表示に関するイベント(広告の準備ができた、表示に失敗した、広告がクリックされたなど)を処理するために、「デリゲート」という仕組みを利用する。AdMobのSDKは、これらのイベントが発生した際に、事前に登録しておいたデリゲートオブジェクトの特定のメソッドを呼び出す。このデリゲートの役割を担うクラスをSwiftUIの世界でどう管理するかが重要になる。記事では、環境変数(EnvironmentObject)や依存性の注入(Dependency Injection, DI)といった設計パターンを活用し、これらのデリゲートをアプリ全体で効率的に管理する方法が示唆されている。

依存性の注入とは、あるオブジェクトが他のオブジェクトを必要とする場合に、その必要なオブジェクトを外部から「注入」して渡す設計手法だ。これにより、各オブジェクトが自分自身で必要なものを探しに行く手間が省け、コードの再利用性やテストのしやすさが向上する。広告のデリゲートや広告読み込みサービスといった、複数の場所からアクセスされる可能性のある機能に対して、このDIを適用することで、コードの構造を整理し、変更に強いアプリを作ることができる。

さらに、記事ではMVP(Model-View-Presenter)という設計パターンも適用していることが示唆されている。MVPは、アプリの表示部分(View)、データ部分(Model)、そして表示とデータを連携させるロジック部分(Presenter)を明確に分けることで、コードの保守性やテスト容易性を高める目的がある。広告の表示に関わるロジックをPresenterに集約することで、広告表示のルールや状態管理がしやすくなる。例えば、ネットワークの状態によって広告の表示を切り替える、特定の条件で広告をリロードするといった複雑な処理も、MVPパターンを用いることで整理しやすくなる。

具体的な広告の種類として、バナー広告、ネイティブ広告、インタースティシャル広告、リワード広告などがAdMobには存在する。バナー広告は画面の上下に表示される帯状の広告、ネイティブ広告はアプリのデザインに溶け込むように表示される広告だ。インタースティシャル広告は、画面遷移時などに全画面で表示される広告、リワード広告は、動画視聴などの対価としてアプリ内アイテムなどが得られる広告である。これらの広告をSwiftUIで扱う際も、基本的なアプローチは変わらない。UIViewControllerRepresentableを通じてUIKitの広告ビューをSwiftUIに取り込み、ViewModifierやデリゲート、DI、MVPといった設計手法を活用して、それぞれの広告表示ロジックを実装していくことになる。

記事が伝えたい核となるメッセージは、公式にサポートされていないからといって諦めるのではなく、既存の技術(UIKit)と新しい技術(SwiftUI)の間に橋渡しをする仕組み(UIViewControllerRepresentable)を理解し、さらにコードを整理し保守しやすくするための設計パターン(DI、MVP、ViewModifier)を組み合わせることで、複雑な課題も解決できるという点だ。システムエンジニアを目指す上で、このような異なる技術間の連携や、コード品質を高めるための設計思想は非常に重要となる。この実例は、単に広告を実装する方法だけでなく、より汎用的なソフトウェア開発の課題解決アプローチを示している。

関連コンテンツ