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

Swiftの関数のネストとスコープルールを完全解説!初心者にもわかる内部関数と変数の範囲

Swift 関数のネストとスコープルール
Swift 関数のネストとスコープルール

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

生徒

「Swiftで関数の中に関数を書くって聞いたんですが、そんなことできるんですか?」

先生

「はい、Swiftでは関数の中に別の関数を書くことができるんですよ。これをネスト関数といいます。」

生徒

「それってどんな時に使うんですか?変数の使える範囲とかも変わりますか?」

先生

「とても良いポイントですね。それではネストとスコープの基本から、ゆっくり解説していきましょう!」

1. Swiftで関数をネストできるとは?

1. Swiftで関数をネストできるとは?
1. Swiftで関数をネストできるとは?

Swiftでは、関数の中に別の関数を定義することができます。これを「ネスト関数(Nested Function)」と呼びます。つまり、関数の中に小さな関数を作ることができるんです。

ネスト関数は、外の関数の中でしか使えないので、外部から間違って呼ばれたりしないというメリットがあります。


func greetUser(name: String) {
    func makeMessage() -> String {
        return "こんにちは、\(name)さん!"
    }
    
    let message = makeMessage()
    print(message)
}

greetUser(name: "太郎")

こんにちは、太郎さん!

この例では、makeMessageという関数はgreetUserの中だけで使える関数です。

2. スコープとは?変数が使える範囲を知ろう

2. スコープとは?変数が使える範囲を知ろう
2. スコープとは?変数が使える範囲を知ろう

スコープ(Scope)とは、変数や定数が有効になる範囲のことです。Swiftでは、内側の関数から外側の変数にはアクセスできますが、外側から内側の変数にはアクセスできません。


func outerFunction() {
    let outerValue = "外の値"

    func innerFunction() {
        print(outerValue) // アクセス可能
    }

    innerFunction()
}

このように、内側の関数は、外側の変数を読み取ることができます。ですが、逆に外側の関数で内側の変数を使おうとすると、エラーになります。


func outerFunction() {
    func innerFunction() {
        let innerValue = "内の値"
    }

    print(innerValue) // エラー!定義されていない
}

3. なぜネスト関数を使うのか?

3. なぜネスト関数を使うのか?
3. なぜネスト関数を使うのか?

ネスト関数は、次のような目的で使います:

  • 関数の中だけで使いたい処理をまとめる
  • コードを整理して見やすくする
  • 外部からの誤った呼び出しを防ぐ

たとえば、エラーチェックや特定の変換処理など、小さな処理を内部関数にしておけば、関数の外に出す必要がなく、コードがスッキリします。

4. 入れ子にすることで安全性が上がる

4. 入れ子にすることで安全性が上がる
4. 入れ子にすることで安全性が上がる

関数をネストすることで、他の部分に影響を与えずに処理を閉じ込めることができます。これは、カプセル化といって、ソフトウェアの基本的な設計の考え方のひとつです。

たとえば、他の関数と名前がかぶってしまっても、ネスト関数であれば外に見えないため、安全です。

5. 複数のネストも可能!でも深くなりすぎないように

5. 複数のネストも可能!でも深くなりすぎないように
5. 複数のネストも可能!でも深くなりすぎないように

Swiftでは、関数の中に関数を何段階にも入れ子にできます。しかし、ネストが深くなりすぎると読みにくくなるので注意が必要です。


func outer() {
    func middle() {
        func inner() {
            print("いちばん内側の関数")
        }
        inner()
    }
    middle()
}
outer()

いちばん内側の関数

このような多重ネストも可能ですが、可読性(読みやすさ)を大切にしましょう。

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

6. 変数のスコープと名前の重なりに注意

6. 変数のスコープと名前の重なりに注意
6. 変数のスコープと名前の重なりに注意

スコープが重なる場所では、同じ名前の変数が使われると混乱のもとになります。


func testScope() {
    let value = "外側"

    func inner() {
        let value = "内側"
        print(value) // "内側"が優先される
    }

    inner()
    print(value) // "外側"
}

内側
外側

このように、内側の同名変数が優先されるのがSwiftのスコープルールです。わかりやすい名前をつけて、重ならないように意識しましょう。

カテゴリの一覧へ
新着記事
New1
Go言語
Swiftの配列(Array)の使い方を完全ガイド!初心者でもわかるデータのまとめ方
New2
Kotlin
Kotlinのキーワード一覧と使い方!初心者が知っておくべき予約語を解説
New3
Go言語
Go言語のスライスのcopy関数とスライス操作の基本テクニック
New4
Kotlin
Kotlinのコーディング規約(公式スタイルガイド)とは?読みやすいコードを書くための基本ルール
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でのDB接続情報を環境変数で管理する方法|初心者でも安全に設定
No.2
Java&Spring記事人気No2
Kotlin
KotlinのChannelでデータをやり取りする方法を完全ガイド!初心者にもわかる非同期通信の基本
No.3
Java&Spring記事人気No3
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.4
Java&Spring記事人気No4
Go言語
SwiftでJSONを扱う基本を完全ガイド!初心者でもわかるCodableの使い方
No.5
Java&Spring記事人気No5
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.6
Java&Spring記事人気No6
Kotlin
Kotlinのインストール方法まとめ!Windows・Mac・Linux別にステップ解説
No.7
Java&Spring記事人気No7
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方

💻 作業効率アップに

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

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

※ Amazon広告リンク