カテゴリ: Swift 更新日: 2025/11/23

Swift extension入門|既存型に安全に機能追加する方法

Swift extension入門|既存型に安全に機能追加する方法
Swift extension入門|既存型に安全に機能追加する方法

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

生徒

「Swiftで自分が作ったクラスじゃなくても、あとから新しい機能を足せるんですか?」

先生

「はい、Swiftにはextension(拡張)という仕組みがあり、既存の型に安全に新しい機能を追加できます。」

生徒

「なるほど!それって便利そうですね。でもどうやって使うんですか?」

先生

「それでは、Swift extensionの基本から具体例まで順番に見ていきましょう。」

1. Swift extensionとは?

1. Swift extensionとは?
1. Swift extensionとは?

Swiftのextensionは、既に存在している型に対して、新しいメソッドやプロパティを追加できる仕組みです。例えば、StringIntなど、Appleが提供している標準の型にも拡張ができます。これは「既存の型をカスタマイズする方法」と考えるとわかりやすいでしょう。

プログラミング未経験の方には少し難しく聞こえるかもしれませんが、例えるなら「既に持っているノートに、新しいしおりや目次を貼り付けるイメージ」です。本の中身を直接書き換えるわけではなく、後から便利な追加機能を貼り足して使いやすくしている感じです。

2. どうしてextensionを使うのか?

2. どうしてextensionを使うのか?
2. どうしてextensionを使うのか?

Swift extensionを使う理由は、既存コードを壊さずに機能を追加できるからです。もし「標準ライブラリを直接編集」しようとすれば危険ですし、他の人のコードにも影響を与えてしまいます。しかし、extensionなら安全に新しい機能を加えられます。

例えば「数値を2乗する機能がほしい」と思ったとき、毎回計算式を書くのは面倒ですよね。そのときにInt型に「square」という計算メソッドを追加すれば、簡単に再利用できます。

3. Swift extensionの基本的な書き方

3. Swift extensionの基本的な書き方
3. Swift extensionの基本的な書き方

Swiftでextensionを書くときは、以下のような構文を使います。


extension 型名 {
    // 追加したいメソッドやプロパティを書く
}

これにより、新しい便利な機能を組み込めます。

4. 実際のコード例(Int型を拡張する)

4. 実際のコード例(Int型を拡張する)
4. 実際のコード例(Int型を拡張する)

次の例では、整数型Intに「2乗を計算するメソッド」を追加しています。


extension Int {
    func square() -> Int {
        return self * self
    }
}

// 使用例
let number = 5
print(number.square()) // 25と出力される

25

このように書くことで、Int型に元からあったかのようにsquare()が使えるようになります。

5. String型を拡張してみよう

5. String型を拡張してみよう
5. String型を拡張してみよう

文字列型Stringにも拡張を加えられます。例えば「文字列が空かどうか」を簡単にチェックするメソッドを追加してみましょう。


extension String {
    func isEmptyOrWhitespace() -> Bool {
        return self.trimmingCharacters(in: .whitespaces).isEmpty
    }
}

// 使用例
let text1 = "   "
let text2 = "Swift"

print(text1.isEmptyOrWhitespace()) // true
print(text2.isEmptyOrWhitespace()) // false

true
false

標準のisEmptyだけでは「空白文字だけ」の場合に対応できませんが、拡張することで柔軟に判定できるようになります。

6. extensionで計算プロパティを追加する

6. extensionで計算プロパティを追加する
6. extensionで計算プロパティを追加する

extensionでは、メソッドだけでなく「計算プロパティ」も追加できます。計算プロパティとは、値を保持するのではなく、計算した結果を返すプロパティです。


extension Int {
    var isEven: Bool {
        return self % 2 == 0
    }
}

// 使用例
let number1 = 4
let number2 = 7

print(number1.isEven) // true
print(number2.isEven) // false

true
false

このように.isEvenを呼ぶだけで「偶数かどうか」がすぐに分かります。プログラムの可読性も高まり、再利用性も向上します。

7. extensionとProtocolの組み合わせ

7. extensionとProtocolの組み合わせ
7. extensionとProtocolの組み合わせ

Swiftでは、extensionprotocol(プロトコル)を組み合わせることで、さらに強力な設計が可能になります。プロトコルは「機能の約束事」を定義する仕組みで、拡張と一緒に使うと「共通の処理をまとめて提供する」ことができます。

例えば、文字を説明文として返すプロトコルを定義し、拡張でデフォルト実装を与えると便利です。


protocol Describable {
    func describe() -> String
}

extension Describable {
    func describe() -> String {
        return "これは説明文です。"
    }
}

struct User: Describable {
    let name: String
}

let user = User(name: "Taro")
print(user.describe()) // これは説明文です。

これは説明文です。

このようにプロトコルと拡張を組み合わせることで、コードの再利用がさらに進みます。

8. extensionを使うときの注意点

8. extensionを使うときの注意点
8. extensionを使うときの注意点

extensionは便利ですが、注意点もあります。

  • ストアドプロパティ(実際に値を保持する変数)は追加できません。追加できるのは「計算プロパティ」と「メソッド」だけです。
  • 既存のメソッドを上書きすることはできません。新しい機能を追加するだけです。
  • 使いすぎると可読性が下がる場合もあるので、整理して使うことが大切です。
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎