カテゴリ: Swift 更新日: 2026/03/02

Swiftの拡張機能(ExtensionとProtocol)を徹底解説!UI層のProtocol設計とViewModel・Repositoryの接点

Swift UI層のProtocol設計|ViewModel, Repositoryとの接点
Swift UI層のProtocol設計|ViewModel, Repositoryとの接点

先生と生徒の会話形式で理解しよう

生徒

「先生、SwiftでExtensionとかProtocolってよく聞きますけど、どうやってUIの設計に関係してくるんですか?」

先生

「いい質問ですね。Extensionは既存のクラスや構造体に機能を追加する仕組みで、Protocolは“ルールブック”のようなものです。UI層では特に、ViewとViewModel、Repositoryのやり取りを整理するために使いますよ。」

生徒

「ルールブック?ちょっとイメージがわかないです。」

先生

「例えばゲームをするときに“ボールを投げる”“キャッチする”というルールがあるとしますよね。Protocolはまさにそのルールで、誰が遊ぶか(ViewModelやRepository)が違っても、ルールを守って遊べるわけです。」

1. SwiftのExtensionとは?

1. SwiftのExtensionとは?
1. SwiftのExtensionとは?

SwiftのExtension(拡張機能)は、すでに存在しているクラスや構造体、列挙型などに、新しいメソッドやプロパティを追加できる仕組みです。元々の定義を書き換える必要がないため、安全にコードを拡張できます。

例えば、文字列に便利な機能を追加したいときに使います。


extension String {
    var isNotEmpty: Bool {
        return !self.isEmpty
    }
}

let name = "Swift"
print(name.isNotEmpty) // true

このように、Extensionを使うとコードが読みやすくなり、再利用性も上がります。

2. SwiftのProtocolとは?

2. SwiftのProtocolとは?
2. SwiftのProtocolとは?

Protocol(プロトコル)とは、いわば「設計図」や「契約書」のようなものです。どんなメソッドやプロパティを持つかを決めるだけで、中身は書きません。そのため、複数のクラスや構造体が同じルールを守って実装できます。


protocol Animal {
    func makeSound()
}

class Dog: Animal {
    func makeSound() {
        print("ワンワン")
    }
}

class Cat: Animal {
    func makeSound() {
        print("ニャー")
    }
}

ワンワン
ニャー

このように、Protocolを使うと「異なるクラスでも同じルールで振る舞う」ことができます。これが大規模アプリ開発では特に役立ちます。

3. UI層のProtocol設計とは?

3. UI層のProtocol設計とは?
3. UI層のProtocol設計とは?

SwiftUIやUIKitでアプリを作るとき、UI(画面部分)とビジネスロジック(処理部分)を分ける設計が重要です。ここでProtocolが役立ちます。

例えば、ViewModelはUIに表示するデータを用意する役割を持ち、RepositoryはデータベースやAPIから情報を取得する役割を持ちます。このとき、ViewModelとRepositoryのやり取りをProtocolで定義しておくと、柔軟でテストしやすい設計になります。

4. ViewModelとRepositoryをProtocolでつなぐ例

4. ViewModelとRepositoryをProtocolでつなぐ例
4. ViewModelとRepositoryをProtocolでつなぐ例

ここでは簡単な例として、ユーザー名を取得して画面に表示するケースを考えましょう。


protocol UserRepository {
    func fetchUserName() -> String
}

class APIUserRepository: UserRepository {
    func fetchUserName() -> String {
        return "山田太郎"
    }
}

class UserViewModel {
    private let repository: UserRepository
    
    init(repository: UserRepository) {
        self.repository = repository
    }
    
    func getUserName() -> String {
        return repository.fetchUserName()
    }
}

このように設計すると、UserViewModelUserRepositoryというルールにだけ依存するので、後から別のRepositoryに差し替えることが簡単になります。例えば、テスト用のダミーRepositoryを作ることも可能です。

5. ExtensionとProtocolを組み合わせる

5. ExtensionとProtocolを組み合わせる
5. ExtensionとProtocolを組み合わせる

さらにExtensionとProtocolを組み合わせると、共通の処理をまとめて書けるようになります。


protocol Greeting {
    func sayHello()
}

extension Greeting {
    func sayHello() {
        print("こんにちは!")
    }
}

class Person: Greeting {}
let p = Person()
p.sayHello() // こんにちは!

このように、Protocolにデフォルト実装をExtensionで追加することで、実装クラス側ではコードを書かずに共通の動作を使えるようになります。

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

6. UI層での実際の利用イメージ

6. UI層での実際の利用イメージ
6. UI層での実際の利用イメージ

実際のUI層では、ViewはViewModelを通じてデータを受け取り、その裏でRepositoryが動きます。Protocolを利用することで、UI層は「どのRepositoryが裏にあるか」を意識せずにデータを使えます。

これはまるで、コンビニでおにぎりを買うときに「どの工場で作られたか」を知らなくても食べられるのと同じです。UIはRepositoryの実装に依存せず、決められたProtocolを通じてやり取りするだけで済みます。

関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
New2
Swift
Swiftの拡張機能(ExtensionとProtocol)を徹底解説!UI層のProtocol設計とViewModel・Repositoryの接点
New3
Go言語
Go言語で文字列をJSONに含めるときのエスケープ処理を初心者向けに解説
New4
Go言語
SwiftのStringで文字列を切り出す方法を完全ガイド!初心者でもわかる部分文字列操作
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Kotlinのsettings.gradleファイルを完全解説!初心者でもわかるプロジェクト設定の基本
No.2
Java&Spring記事人気No2
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
No.3
Java&Spring記事人気No3
Go言語
Go言語のSQLインジェクション対策を完全解説!初心者でも安全なデータベース操作がわかる
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.6
Java&Spring記事人気No6
Kotlin
KotlinのRoomで複雑なクエリを使いこなす!初心者でもわかる応用テクニック
No.7
Java&Spring記事人気No7
Go言語
Swiftの文字列操作を完全ガイド!初心者でもわかるStringの基本
No.8
Java&Spring記事人気No8
Swift
Swiftの高階関数map・filter・reduceを完全解説!初心者でもわかる配列操作の基本