カテゴリ: Swift 更新日: 2026/01/14

Swiftのアクセス修飾子を徹底解説!初心者でも理解できるpublic・private・internalの使い方

Swift アクセス修飾子(public, private, internal)の解説
Swift アクセス修飾子(public, private, internal)の解説

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

生徒

「Swiftのクラスでpublicとかprivateって見かけるけど、これは何の意味ですか?」

先生

「それはアクセス修飾子と呼ばれるもので、プログラムの中で、どこから使えるかを決めるルールなんです。」

生徒

「じゃあ、どこから見えるかってことですか?ちょっとイメージが湧かないかも…」

先生

「大丈夫です。家のドアやカギに例えて、ゆっくり説明していきましょう!」

1. アクセス修飾子とは?

1. アクセス修飾子とは?
1. アクセス修飾子とは?

Swiftのアクセス修飾子は、変数や関数、クラスなどが「どこから使えるか」を制御するための機能です。家にたとえると、「玄関のドアは誰でも通れるけど、自分の部屋には家族しか入れない」といった感じです。

アクセス修飾子を正しく使うことで、プログラムの中で「他の人に見せたくない部分」や「安心して使ってもらいたい部分」を分けて、安全で管理しやすいコードを書くことができます。

2. Swiftのアクセス修飾子の種類

2. Swiftのアクセス修飾子の種類
2. Swiftのアクセス修飾子の種類

Swiftには、主に3つのアクセス修飾子があります。

  • public(パブリック):どこからでも使える
  • internal(インターナル):同じモジュール(アプリの中)からだけ使える
  • private(プライベート):同じファイルや同じクラスの中だけで使える

それぞれの違いを具体的に見ていきましょう。

3. public:誰でも使える玄関

3. public:誰でも使える玄関
3. public:誰でも使える玄関

publicは、まるで家の玄関のようなものです。誰でもアクセスできる場所なので、外部のコードからでもその関数や変数を使うことができます。

ライブラリや他のアプリからも使ってもらいたいときに使います。


public class Greeting {
    public func sayHello() {
        print("こんにちは!")
    }
}

このように書くと、GreetingクラスやsayHelloメソッドは他のファイルやモジュールからも呼び出せます。

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

4. internal:家族だけが使えるリビング

4. internal:家族だけが使えるリビング
4. internal:家族だけが使えるリビング

internalは、デフォルト(何も書かないとき)のアクセスレベルで、同じアプリ内であれば自由に使えます。ただし、他のモジュール(別のライブラリなど)からは見えません。

たとえば、アプリの中だけで完結する機能に使うことが多いです。


class Calculator {
    func add(a: Int, b: Int) -> Int {
        return a + b
    }
}

このコードはinternalと同じ扱いになり、他のファイルからでも使えますが、アプリの外からは使えません。

5. private:自分の部屋だけの秘密

5. private:自分の部屋だけの秘密
5. private:自分の部屋だけの秘密

privateは、同じクラスや構造体の中でしか使えません。まさに「自分の部屋」みたいなもので、外から触られたくないデータや処理に使います。


class BankAccount {
    private var balance: Int = 0

    func deposit(amount: Int) {
        balance += amount
    }

    func showBalance() -> Int {
        return balance
    }
}

ここではbalanceprivateなので、外部から直接アクセスできません。これは、お金を安全に守るための「鍵付き金庫」のようなものです。

6. それぞれの違いを比較してみよう

6. それぞれの違いを比較してみよう
6. それぞれの違いを比較してみよう

以下の表は、それぞれのアクセス修飾子の違いを簡単にまとめたものです。

アクセス修飾子 アクセスできる範囲 よく使う場面
public どこからでも ライブラリや他のモジュールに公開したいとき
internal 同じモジュール内 アプリ内で完結する機能
private 同じ型・同じファイル内 外部から触られたくないデータ

7. アクセス修飾子を使う理由

7. アクセス修飾子を使う理由
7. アクセス修飾子を使う理由

アクセス修飾子を使うと、プログラムがより安全整理された設計になります。たとえば、銀行のシステムでお金の残高に誰でもアクセスできたら困りますよね?

そのため、「ここは触ってもいい場所」「ここは外から触っちゃダメ」という線引きをするのが、アクセス修飾子の役割なんです。

8. Swiftにおけるアクセス修飾子の注意点

8. Swiftにおけるアクセス修飾子の注意点
8. Swiftにおけるアクセス修飾子の注意点
  • デフォルトはinternal:何も書かないとinternalになります。
  • ネストした型には別の修飾子も必要:クラスの中にクラスを定義するようなときは、アクセスレベルを明確にする必要があります。
  • 見せたいところだけpublicにする:全部をpublicにすると危険なので、必要なところだけ公開しましょう。

9. 練習問題:アクセス修飾子を使ってみよう

9. 練習問題:アクセス修飾子を使ってみよう
9. 練習問題:アクセス修飾子を使ってみよう

最後に、実際にアクセス修飾子を使ってみる練習として、以下のクラスを書いてみましょう。


class SecretNote {
    private var secret: String = "これは秘密です"

    func read() -> String {
        return secret
    }
}

このコードでは、secretprivateなので、read()メソッドを通さないと内容を見ることができません。

まとめ

まとめ
まとめ

Swiftのアクセス修飾子について学んできた内容を振り返ると、publicinternalprivateといった三つのアクセスレベルには、それぞれ明確な役割があり、プログラムの安全性や設計の分かりやすさを高めるために重要な役割を果たしていることがよく分かります。特にSwiftでは、デフォルトがinternalであることや、publicを必要以上に使いすぎると意図しない箇所からデータを変更される可能性があるため、慎重に使用する必要があります。また、privateはクラス内部だけで扱うべきデータをしっかり守ってくれるため、安全なコードを書くうえで欠かせない要素の一つです。

アクセス修飾子を理解するということは、「どこから使っていいのか」「どこから触ってはいけないのか」という線引きを明確にするということです。これはアプリが大きくなればなるほど重要で、どのファイルがどのデータを扱うのかを整理し、後から読む人も迷わず理解できるコードにつながります。特にチーム開発においては、アクセス修飾子を適切に設定することで、思わぬバグの発生を防ぎつつ、コード全体の品質を安定させることができます。

また、アクセス修飾子はただ「見える」「見えない」を決めるだけではなく、Swiftの構造や型システムと深く関係しています。クラス・構造体・プロパティ・メソッドに対して適切なレベルを設定することで、意図を正しく伝える設計ができ、アプリの安全性と拡張性がぐっと高まります。特に、銀行口座の例のように「外部から直接書き換えられるべきではない情報」はprivateで守ることで、安心して機能を提供できる形になります。このように、アクセス修飾子はSwiftの重要な柱の一つであり、理解すればより堅牢なアプリを作る基礎が身につきます。

以下では、今回学んだ内容をまとめるために、アクセス修飾子を使い分けた簡単なサンプルコードを紹介します。クラス内部の守る部分と公開する部分をどのように分けて設計するかが分かりやすい例になっています。

アクセス修飾子のまとめサンプルコード


public class UserManager {
    private var userName: String = "ゲスト"

    public init() {}

    public func updateName(to newName: String) {
        userName = newName
    }

    public func showName() -> String {
        return "現在のユーザー名は「\(userName)」です"
    }
}

class InternalLogger {
    func log(message: String) {
        print("ログ:\(message)")
    }
}

private class SecretBox {
    private var code: String = "ひみつのコード"

    func reveal() -> String {
        return code
    }
}

let manager = UserManager()
manager.updateName(to: "たろう")
print(manager.showName())

let logger = InternalLogger()
logger.log(message: "ユーザー名を更新しました")

let box = SecretBox()
print(box.reveal())

このコードでは、UserManagerpublicとして公開され、外部から利用できる構造になっています。ユーザー名を保持するuserNameprivateになっているため、外部から直接書き換えることはできません。これはデータを安全に管理するための重要な工夫です。一方、InternalLoggerはモジュール内で扱うだけのクラスとしてinternalのまま設計されており、アプリ内部で完結する処理に適しています。そして、SecretBoxは完全に内部の処理だけで完結する秘密のデータを扱うため、クラス自体がprivateです。

こうした設計を通して、Swiftのアクセス修飾子が果たす役割をより深く理解できます。適切なアクセスレベルを設定することで、外部から不必要な操作を防ぎ、バグを未然に防げる設計が可能になります。アプリの規模が大きくなるほど、この考え方の重要性は高まり、整理された安全なコードを書くための力となります。また、アクセス修飾子はSwiftの学習の中でも比較的早い段階で習得するべき項目であり、クラスや構造体、関数の設計に広く関わってきます。

実際にアクセス修飾子を使いながら練習することで、コードの整理の仕方が自然と身につきます。特に、公開するべき部分だけをpublicにし、それ以外はinternalprivateで閉じるという考え方ができるようになれば、Swiftの設計力は大きく向上します。今回の内容を参考に、ぜひ自分でもクラスの設計を試してみてください。

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

生徒:「アクセス修飾子って、ただ見えるかどうかを決めるだけのものだと思ってましたけど、設計にも関わってくるんですね!」

先生:「その通りです。安全に使ってもらう部分と、守りたい部分を分けることで、プログラムの質が大きく変わりますよ。」

生徒:「特にprivateの役割が分かりました。守るべきデータを閉じ込めるって大事なんですね。」

先生:「とても良い理解です。アクセス修飾子を使いこなせると、Swiftの設計力が一段上がりますよ。」

生徒:「今日のサンプルコードも参考になりました!自分でも書いてみます。」

先生:「ぜひ挑戦してください。実際に手を動かすことで、アクセス修飾子の違いがもっとはっきり分かってきますよ。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

Swiftのアクセス修飾子とは何ですか?初心者にもわかりますか?

Swiftのアクセス修飾子とは、変数や関数、クラスなどがプログラム内のどこからアクセスできるかを制限する仕組みで、初心者でも理解しやすく、コードを安全に保つのに役立ちます。
カテゴリの一覧へ
新着記事
New1
Go言語
Go言語の短絡評価(ショートサーキット)を使った条件式の工夫をやさしく解説!初心者でも理解できる基本知識
New2
Go言語
Go言語の構造体の初期化パターンとコンストラクタ的関数の書き方を徹底解説!初心者でもわかる基本と実用例
New3
Kotlin
Kotlinの例外処理とキャンセルの連携を完全ガイド!初心者でもわかるCoroutineExceptionHandlerの使い方
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
Kotlin
Kotlin DSLとGroovy DSLの違いをやさしく解説!初心者でもわかるGradleスクリプトの使い分け
No.8
Java&Spring記事人気No8
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方

💻 作業効率アップに

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

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

※ Amazon広告リンク