カテゴリ: 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で追加することで、実装クラス側ではコードを書かずに共通の動作を使えるようになります。

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

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

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

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

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Swift UI層のProtocol設計では、UI層のProtocol設計をSwiftで扱うときの考え方を確認しました。Swiftは、書き方だけを覚えるよりも、Xcodeで動かしながら「どこで値が変わるのか」「失敗したときに何が起きるのか」を見たほうが理解しやすくなります。

つまずき防止:UI層のProtocol設計は、入力値、戻り値、Optionalの扱い、エラー時の表示、関数名や型名の読みやすさを意識すると理解しやすくなります。調べ直すときは、Swift、Xcode、Playground、iOSアプリ開発、型安全、サンプルコードを組み合わせると、目的に近い実装例を見つけやすいです。

小さく試す課題

  • UI層のProtocol設計で注目する場所として、入力値、戻り値、Optionalの扱い、エラー時の表示、関数名や型名の読みやすさを説明できる
  • サンプルの値を1つ変え、コンソール出力とエラーメッセージの変化を見る
  • Xcodeのエラー、警告、コンソール出力を読み、原因を1つ言葉にできる
  • Swift、Xcode、iOSアプリ開発の中で、この記事の知識を使う場面を想像できる

復習するときは、次のような短いコードを自分の環境で動かしてみましょう。記事のテーマに合わせて値や条件を変えると、Swiftの型安全、Optional、エラー処理、画面更新の見え方が少しずつ整理できます。

struct LearningStep {
    let title: String
    let completed: Bool
}

let steps = [
    LearningStep(title: "文法を確認する", completed: true),
    LearningStep(title: "サンプルを動かす", completed: false)
]

print(steps.filter { !$0.completed })

生徒

「UI層のProtocol設計は、どこを変えて試せばいいか分かると復習しやすいですね。」

先生

「はい。まずは小さく動かし、次に失敗するケースを1つ足してみましょう。Swiftは型やエラーがヒントを出してくれるので、結果を見ながら直す練習がそのまま実務力につながります。」

関連セミナーのご案内

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
TypeScript
TypeScriptのwhile文とは 初心者でもわかる繰り返し処理の基本と使い方を徹底解説
New2
Kotlin
Kotlinの制御構造まとめ!初心者が覚えるべきポイント
New3
Go言語
Go言語のスライスの容量(cap)と長さ(len)を理解しよう
New4
Kotlin
Kotlinとは何か?初心者向けにできること・特徴・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Go言語
Go言語のVSCode開発環境構築完全ガイド!初心者でもわかる拡張機能と設定方法
No.3
Java&Spring記事人気No3
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.4
Java&Spring記事人気No4
Kotlin
Kotlinの関数ドキュメンテーションコメント(KDoc)の書き方を徹底解説!初心者でもわかる丁寧なガイド
No.5
Java&Spring記事人気No5
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.6
Java&Spring記事人気No6
Kotlin
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Java&Spring記事人気No7
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう
No.8
Java&Spring記事人気No8
TypeScript
TypeScriptのif文とは何かを徹底解説初心者でもわかる条件分岐の基本構文と使い方

💻 作業効率アップに

ノートPCを縦置きしてデスクを広く。
省スペースで片づく定番スタンド

UGREEN 縦型スタンドをAmazonで見る

※ Amazon広告リンク