カテゴリ: Kotlin 更新日: 2025/12/01

Kotlinの可視性修飾子を完全ガイド!public・private・internalの意味と使い分けを初心者向けに解説

Kotlinの可視性修飾子(public・private・internal)の意味と使い分け
Kotlinの可視性修飾子(public・private・internal)の意味と使い分け

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

生徒

「Kotlinでよく見るpublicとかprivateって何ですか?書かなくても動くこともあるし、混乱してます…」

先生

「それは“可視性修飾子”といって、コードの中で何がどこから見えるかをコントロールするためのものなんです。」

生徒

「なるほど。じゃあどうやって使い分ければいいんですか?」

先生

「それでは、Kotlinのpublicprivateinternalの使い方と違いについて、順番に学んでいきましょう!」

1. 可視性修飾子とは?

1. 可視性修飾子とは?
1. 可視性修飾子とは?

Kotlinでプログラムを書くとき、「どこからそのクラスや関数が見えるのか」を決める仕組みがあります。それが可視性修飾子(Visibility Modifiers)です。

小さなサンプルで考えると分かりやすいです。もし、すべての情報が丸見えになってしまうと、外部から勝手に使われたり、名前がかぶったりして混乱の原因になります。

そこで「公開するもの」と「隠すもの」を選べるようにして、必要な場所だけに見えるようにするのが可視性修飾子の役割です。


class Box {
    val publicData = "だれでも見えるよ"      // public扱い
    private val secret = "ないしょ"          // クラスの外からは見えない
}

このように、同じクラスの中でも「見えるもの」と「見えないもの」を分けられます。特にプログラムが大きくなるほど、この考え方がとても大切になります。

Kotlinでよく使う可視性修飾子は次の3つです:

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

「公開したい場所だけに見せる」。たったこれだけで、コードはぐっと安全で読みやすくなります。

2. publicの使い方と特徴

2. publicの使い方と特徴
2. publicの使い方と特徴

publicは「誰からでも見えてOK!」という意味です。

実はKotlinでは、publicは省略可能で、何も書かないと自動的にpublicになります。


public class Person(val name: String) {
    public fun sayHello() {
        println("こんにちは、$nameです")
    }
}

fun main() {
    val p = Person("さくら")
    p.sayHello()
}

こんにちは、さくらです

このように、他の場所から自由に呼び出せるのがpublicです。

3. privateの使い方と特徴

3. privateの使い方と特徴
3. privateの使い方と特徴

privateは「自分だけで使いたい」関数や変数に使います。外からは見えなくなります。

クラスの内部だけで動かしたい処理をprivateにしておくことで、誤って他の場所から使われるのを防げます。


class Calculator {
    private fun add(a: Int, b: Int): Int {
        return a + b
    }

    fun showSum() {
        println(add(5, 3))
    }
}

fun main() {
    val calc = Calculator()
    calc.showSum()
    // calc.add(5, 3) はエラーになります
}

8

add()関数はprivateなので、Calculatorの外からは見えません。

4. internalの使い方と特徴

4. internalの使い方と特徴
4. internalの使い方と特徴

internalは「同じモジュール内なら見えてOK!」という意味です。

モジュールとは、アプリを構成する部品のようなもので、プロジェクトが分かれている場合に「その中だけで使える」範囲を決めるのがinternalです。


internal class InternalClass {
    fun message() {
        println("このクラスはモジュール内で使えます")
    }
}

たとえば、Androidアプリで「ひとつの機能を作るモジュール」などがある場合、internalで外部との境界を作ることができます。

5. それぞれの可視性修飾子の比較まとめ

5. それぞれの可視性修飾子の比較まとめ
5. それぞれの可視性修飾子の比較まとめ

Kotlinのpublicprivateinternalの違いを一覧で見てみましょう。

修飾子 アクセスできる範囲 用途
public どこからでも 広く使ってほしい機能
private クラスまたはファイル内 内部でのみ使いたい処理
internal 同じモジュール内 モジュール内で共有したい処理

6. クラスだけでなく関数や変数にも使える!

6. クラスだけでなく関数や変数にも使える!
6. クラスだけでなく関数や変数にも使える!

可視性修飾子は、クラスだけでなく、関数・変数・プロパティなど、さまざまな場所に使えます。


class Sample {
    private val secret = "ひみつ"

    fun showSecret() {
        println(secret)
    }
}

fun main() {
    val s = Sample()
    s.showSecret()
    // s.secret は見えないのでエラーになります
}

ひみつ

外部から見られたくない情報をprivateにして守ることで、安全なコードになります。

7. なぜ可視性修飾子が大切なの?

7. なぜ可視性修飾子が大切なの?
7. なぜ可視性修飾子が大切なの?

すべてpublicにしてしまうと、誰でも好き勝手にそのコードを呼び出せてしまい、バグやトラブルの元になります。

必要なものだけを公開し、それ以外はprivateinternalで隠すことで、安全でわかりやすいプログラムが書けるようになります。

「見せるもの」と「隠すもの」を意識することは、プログラミングでとても大事な考え方です。

まとめ

まとめ
まとめ

Kotlinにおける「可視性修飾子」は、クラスや関数、変数が「どの範囲からアクセスできるか」を明確にするための重要な機能です。この記事では、Kotlinでよく使われる3つの可視性修飾子である publicprivateinternal を中心に、それぞれの役割や違い、実践的な使い方について詳しく解説しました。

まずpublicは、特に指定がなければ自動的に適用されるデフォルトの修飾子で、他のクラスやモジュールからも自由にアクセスできる公開状態です。共有ライブラリや、どこからでも使いたい関数に適しています。

一方、privateはクラス内やファイル内のみにアクセスを制限するため、外部に触れてほしくないデータやロジックを隠すのに役立ちます。たとえば、計算処理や内部状態を管理する変数などに使うと安全性が高まります。

そしてinternalは、モジュール単位での可視性を制御します。複数の機能に分割されたプロジェクト構成において、特定のモジュール内だけで共有したいコードに対して使うことで、他モジュールからの不要なアクセスを防げます。

可視性修飾子は、ただの構文的なキーワードではなく、「このコードは誰に見せたいのか」「どこまで使わせたいのか」という設計の意図を表す手段です。Kotlinの可視性制御を適切に使いこなすことで、チーム開発でもバグの予防や保守性の向上につながります。

また、Kotlinではクラスだけでなく、関数、プロパティ、ローカル変数にも可視性修飾子をつけることができるため、きめ細やかなアクセス制御が可能です。とくに、変数をprivateにしつつ、外部から読み取り専用でアクセスさせたい場合は、getterのみpublicにするなどの柔軟な設計も可能です。

実際の開発では、まずすべてprivateから始めて、必要に応じてinternalpublicに切り替えていく「最小公開の原則」を守ると、コードの安全性と拡張性がぐっと高まります。

参考:Kotlinでの可視性修飾子の基本構文


public class MyClass {
    private val hiddenValue = 10
    internal fun internalMethod() { println("内部モジュールだけで使う") }
    public fun show() { println("これはどこからでも使える") }
}

Kotlinの可視性修飾子は、Androidアプリ開発やサーバーサイド開発でも頻繁に使われる基礎文法です。適切に活用することで、より安全で読みやすいコードを書くことができます。とくに初心者のうちは、privateをしっかり使って「隠す設計」に慣れることが、良い習慣になります。

可視性修飾子の設計は、小さなコードでも、大きなプロジェクトでも品質に大きな差を生むポイントです。この機会にしっかり理解しておきましょう。

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

生徒

「やっとpublicprivateの違いがわかってきました。今までは何となく書いてました…」

先生

「それは良かったです!可視性修飾子をしっかり使い分けることは、品質の高いコードを書くためにとても大切ですよ。」

生徒

internalの使いどころは少し難しそうですね。どんなときに使えばいいんですか?」

先生

「たとえば、Androidアプリでモジュールごとに機能を分けている場合など、他のモジュールには見せたくないけど、同じモジュール内では共有したい処理にinternalを使うといいですね。」

生徒

「なるほど。じゃあ、基本はprivateで隠しておいて、必要に応じてinternalpublicにすればいいんですね!」

先生

「その通りです!“最小限だけ見せる”という意識を持つだけで、ぐっと安全で保守しやすいコードになりますよ。」

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

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

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

Kotlinのpublic修飾子は省略しても問題ないのですか?

はい、Kotlinではpublic修飾子は省略可能です。特に何も書かなければ自動的にpublicとして扱われるため、明示的に書かなくてもプログラムは正常に動作します。
関連記事:
カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.3
Kotlin・Go・Swift記事の人気No3
Swift入門ガイド|基本構文と書き方をマスターしよう
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎