カテゴリ: 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メソッドは他のファイルやモジュールからも呼び出せます。

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

Swift実践入門をAmazonで見る

※ Amazon広告リンク

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

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

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

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

Swiftのアクセス修飾子とは、変数や関数、クラスなどがプログラム内のどこからアクセスできるかを制限する仕組みで、初心者でも理解しやすく、コードを安全に保つのに役立ちます。
関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Go言語
Go言語プログラムの実行方法まとめ!VSCode・ターミナルでの実行手順を解説
New3
Swift
Swift意味とは?プログラミング言語・金融・鳥の違いを徹底解説
New4
Swift
Swift 戻り値の扱い方と複数戻り値の返し方|初心者でも分かる関数の基本
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.2
Java&Spring記事人気No2
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.3
Java&Spring記事人気No3
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Java&Spring記事人気No4
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.5
Java&Spring記事人気No5
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.6
Java&Spring記事人気No6
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.7
Java&Spring記事人気No7
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説