カテゴリ: Swift 更新日: 2025/12/09

Swiftのprotocol(プロトコル)とは?初心者にもわかる基本と実装例

Swift プロトコル(protocol)の基本と実装例
Swift プロトコル(protocol)の基本と実装例

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

生徒

「Swiftのprotocolって何ですか?クラスとか構造体とは違うんですか?」

先生

「いい質問ですね。protocolは、簡単に言うと“やるべきことの約束”を定義する仕組みです。」

生徒

「約束?なんか抽象的で難しそう…」

先生

「大丈夫ですよ。たとえば“歌える”という機能を持った存在がいるとしましょう。動物でも人間でも、歌えるなら共通のprotocolを使えるんです。」

1. Swiftのprotocol(プロトコル)とは?

1. Swiftのprotocol(プロトコル)とは?
1. Swiftのprotocol(プロトコル)とは?

Swiftのprotocol(プロトコル)とは、「ある機能を持つことを約束する」ための型です。日本語では「規約」や「仕様」と訳されることもあります。

たとえば、「歩く」「走る」「歌う」といった機能を、クラスや構造体が持つべきだと指定するのがprotocolの役割です。これにより、コードを統一的に扱いやすくなります。

2. protocolの基本的な書き方

2. protocolの基本的な書き方
2. protocolの基本的な書き方

まずは、protocolの定義と、それを使うクラスの実装方法を見てみましょう。


protocol Singable {
    func sing()
}

class Person: Singable {
    func sing() {
        print("ラララ〜♪")
    }
}

この例では、Singableというプロトコルを作り、sing()というメソッドを定義しています。そしてPersonクラスがそれを実装しています。

3. プロトコルを使う意味は?

3. プロトコルを使う意味は?
3. プロトコルを使う意味は?

プロトコルを使うことで、「この型はこの機能を持っている」と明示的に示すことができます。

たとえば、いろいろな型(クラス・構造体)に共通の機能を持たせたいとき、プロトコルを使うと一貫したコードが書けます。

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

4. 構造体でも使えるSwiftのprotocol

4. 構造体でも使えるSwiftのprotocol
4. 構造体でも使えるSwiftのprotocol

Swiftの大きな特徴として、プロトコルはclass(クラス)だけでなく、struct(構造体)にも使えるという点があります。

次のコードは、構造体がプロトコルを実装する例です。


protocol Walkable {
    func walk()
}

struct Dog: Walkable {
    func walk() {
        print("テクテク歩くワン!")
    }
}

let dog = Dog()
dog.walk()

このように、Dog構造体でもプロトコルを使って機能を実装できます。

5. プロトコルを引数や配列に使う

5. プロトコルを引数や配列に使う
5. プロトコルを引数や配列に使う

プロトコルは、共通の機能を持ったオブジェクトをひとまとめに扱うときにも使えます。たとえば次のように書くと便利です。


protocol Drawable {
    func draw()
}

class Circle: Drawable {
    func draw() {
        print("円を描く")
    }
}

class Square: Drawable {
    func draw() {
        print("四角を描く")
    }
}

let shapes: [Drawable] = [Circle(), Square()]
for shape in shapes {
    shape.draw()
}

このコードでは、Drawableというプロトコルを使って、異なるクラスのインスタンス(CircleSquare)をDrawable型の配列にまとめています。

6. 複数のプロトコルを組み合わせて使う

6. 複数のプロトコルを組み合わせて使う
6. 複数のプロトコルを組み合わせて使う

Swiftでは、複数のプロトコルを同時に使うこともできます。次のようにコンマ区切りで記述します。


protocol Runnable {
    func run()
}

protocol Jumpable {
    func jump()
}

struct Athlete: Runnable, Jumpable {
    func run() {
        print("走る!")
    }

    func jump() {
        print("ジャンプ!")
    }
}

このようにして、1つの型が複数の機能を持っていることを明示できます。

7. protocolの命名のコツ

7. protocolの命名のコツ
7. protocolの命名のコツ

Swiftではプロトコルの名前をつけるとき、動作を表す言葉に「〜able」や「〜ing」をつけるのが一般的です。たとえば:

  • 歌う → Singable
  • 走る → Runnable
  • 描く → Drawable

これにより、そのプロトコルが何をするのか直感的に理解しやすくなります。

8. protocolはSwiftのオブジェクト指向でも重要な役割

8. protocolはSwiftのオブジェクト指向でも重要な役割
8. protocolはSwiftのオブジェクト指向でも重要な役割

Swiftのprotocolは、クラスや構造体の設計をシンプルにし、柔軟で再利用しやすいコードにするための重要な要素です。

クラス継承よりも柔軟に設計できるため、iOSアプリ開発でも頻繁に使われています。初心者の方も、まずはprotocolで「やるべきこと」を明確にする練習をすると、Swiftの理解が一気に深まります。

まとめ

まとめ
まとめ

Swiftのprotocol(プロトコル)は、クラスや構造体に「どのような機能を持つべきか」をあらかじめ示すための仕組みであり、柔軟な設計を可能にする大切な概念です。記事全体を振り返ると、プロトコルは単なる“決まりごと”ではなく、複数の型に共通のふるまいを与えることで、コードの見通しを良くし、再利用性や拡張性を高める重要な役割を果たしていることがわかります。特にSwiftの場合、struct(構造体)にもプロトコルを適用できる点は非常に魅力的で、柔軟な型設計を実現しやすくなっています。プロトコルを使いこなせるようになると、iOSアプリ開発で頻繁に登場するデリゲートパターンや画面同士の連携処理などにも自然と対応できるようになり、コード全体の構造も整い、メンテナンスしやすいアプリ設計が可能になります。 また、プロトコルを利用した配列操作や引数としての利用、複数のプロトコルの組み合わせなど、記事で紹介されている活用方法を振り返ると、プロトコルは単なる“型”ではなく、Swiftにおける多様な場面で利用できる非常に強力な考え方であることが理解できます。さまざまなクラスや構造体に共通機能を持たせたいとき、継承ではなくプロトコルを使うことで機能の整理がしやすくなり、複雑な処理でも柔軟に対応できます。特に動作を組み合わせるときに直感的でわかりやすく、アプリの設計全体が整理されていきます。Swiftの言語仕様におけるプロトコル中心の設計思想にも触れながら、プロトコルがアプリ開発においてどれほど価値があるかを自然に実感できたのではないでしょうか。 さらに、プロトコルの名前の付け方や実装のコツを理解すると、コードの意味がより明確になり、後から見たときの読みやすさも大きく向上します。「〜able」「〜ing」などの語尾で動作を示す命名方法は、初心者でもすぐに取り入れられる実践的な技法であり、プロトコルが担う役割を直感的に理解しやすくします。こうした命名の工夫により、プロトコルは単なる規約を超え、チーム開発でも大いに役立つ重要な設計要素となります。実際のSwift開発では、プロトコルは画面間通信、UIイベント処理、データ管理など幅広い場面で登場するため、早い段階でその考え方に慣れておくことで、より洗練されたアプリを作れるようになります。

サンプルプログラムでプロトコルの役割を再確認

下記は、記事の内容を踏まえ、プロトコルを使って複数の型に共通動作を与える例をさらに発展させたサンプルコードです。異なるクラスや構造体が同じプロトコルを採用することで、統一的に扱えることを改めて確認できます。


// 複数の動作をまとめて表現するプロトコル
protocol Performer {
    func act()
    func speak()
}

// クラスによる実装例
class Actor: Performer {
    func act() {
        print("劇で演じる")
    }
    func speak() {
        print("セリフを話す")
    }
}

// 構造体による実装例
struct Narrator: Performer {
    func act() {
        print("身振りで説明する")
    }
    func speak() {
        print("物語を語る")
    }
}

// 共通の配列で扱う例
let performers: [Performer] = [Actor(), Narrator()]
for p in performers {
    p.act()
    p.speak()
}

このサンプルでは、クラスと構造体の両方がPerformerプロトコルを採用し、それぞれが独自の動作を実装しています。プロトコルを用いることで、複数の異なる型をまとめて扱えるようになるため、アプリ全体の構造がシンプルになり、拡張にも対応しやすくなります。Swiftではこのようなプロトコル中心の設計が当たり前のように活用されているため、実践の中で繰り返し触れて理解を深めることが大切です。

先生と生徒の振り返り会話

生徒

「プロトコルって、クラスや構造体に“必要な機能を持たせる”ためのすごく便利な仕組みなんですね!」

先生

「そうです。プロトコルを理解すると、Swiftの設計がぐっと楽になりますし、複数の型をうまく統一して扱えるようになるんですよ。」

生徒

「クラスでも構造体でも共通の機能を使えるのが便利ですね。配列にまとめて処理できるのも、すごく使い道が多そうです!」

先生

「ええ、その通りです。プロトコルはSwift開発の核とも言える要素なので、ぜひどんどん練習してみてください。」

生徒

「今日の内容をしっかり復習して、実際のアプリづくりにも活かしていきます!」

カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
New2
Go言語
Go言語のクロージャとは?関数内関数の活用例と仕組み
New3
Swift
Swiftでエラー原因を可視化!ログとトレースのベストプラクティスを初心者向けに解説
New4
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.2
Java&Spring記事人気No2
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Kotlinのビルド設定エラーと解決法まとめ!初心者向けGradleトラブル対処ガイド
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Kotlin
Kotlinでテキスト表示・編集!初心者でもわかるTextViewとEditTextの使い方
No.7
Java&Spring記事人気No7
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.8
Java&Spring記事人気No8
Kotlin
Kotlin DSLとGroovy DSLの違いをやさしく解説!初心者でもわかるGradleスクリプトの使い分け

💻 作業効率アップに

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

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

※ Amazon広告リンク