カテゴリ: Swift 更新日: 2025/10/28

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. プロトコルを使う意味は?

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

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

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の理解が一気に深まります。

カテゴリの一覧へ
新着記事
Go言語の関数でエラーハンドリングする基本的な方法
Go言語のスライス・マップ・配列をまとめて比較してみよう!初心者でもわかる使い分けの基本
Go言語の条件分岐の見やすい書き方を徹底解説!初心者でもわかるif文の使い方
Go言語とは何か?初心者向けに特徴・できること・インストール手順までやさしく解説
人気記事
No.1
Java&Spring記事人気No1
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.2
Java&Spring記事人気No2
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.3
Java&Spring記事人気No3
Kotlinのデータクラス(data class)とは?便利な特徴と使い方を初心者向けにやさしく解説!
No.4
Java&Spring記事人気No4
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応