カテゴリ: Kotlin 更新日: 2026/04/12

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は「どこからでも呼び出してよい」という合図です。Kotlinでは何も書かないと自動的にpublicになるため、基本は省略して構いません。外部に提供したいクラスや関数に向いています。


// クラスも関数も、書かなければ public
class Person(val name: String) {
    fun sayHello() {
        println("こんにちは、$name です")
    }
}

// トップレベル関数(ファイル直下)も同様に public
fun greetAll(names: List<String>) {
    names.forEach { println("ようこそ、$it さん") }
}

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

    greetAll(listOf("たろう", "はなこ"))
}

こんにちは、さくら です
ようこそ、たろう さん
ようこそ、はなこ さん

ポイントは「公開したい最小限だけをpublicにする」こと。内部実装は後で変えても、publicな入口(API)が守られていれば、他のコードに影響を与えにくくなります。ライブラリの入口や、画面から呼ばれるサービスなど、外から使われる前提の要素に使いましょう。

3. privateの使い方と特徴

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

privateは「この中だけで使う」ことを約束する可視性です。クラスの外やファイルの外に影響させたくない処理や値を隠すことで、うっかり誤用されるのを防ぎ、コードの読みやすさも保てます。まずはクラス内部での例から確認しましょう。


class Calculator {
    // 外から見せたくない一時データ
    private var lastResult: Int = 0

    // 外部に公開しない小さな部品(ヘルパー関数)
    private fun add(a: Int, b: Int): Int = a + b

    // こちらは公開する入口(API)
    fun showSum(a: Int, b: Int) {
        lastResult = add(a, b)
        println("合計は $lastResult")
    }

    // 直近の計算結果だけは読むことを許す
    fun result(): Int = lastResult
}

fun main() {
    val calc = Calculator()
    calc.showSum(5, 3)   // 合計は 8
    println(calc.result())
    // calc.add(5, 3)         // ← private のため呼べない(エラー)
    // println(calc.lastResult) // ← フィールドも非公開(エラー)
}

合計は 8
8

このように、外に見せるのは「使ってほしい入口」だけにして、内部の手順や一時データはprivateで隠します。設計を変えても外側の呼び出し方を壊しにくくなり、保守が楽になります。

もうひとつ覚えておきたいのが「ファイルレベルのprivate」です。ファイル直下に書いた関数や変数もprivateにでき、そのファイル内だけで使える部品として閉じ込められます。


// ---- Utility.kt ----
private fun normalize(name: String): String = name.trim()

fun greet(name: String) {
    // normalize は同じファイル内からだけ使える
    println("こんにちは、${normalize(name)} さん")
}

コツは「公開したい最小限だけを公開する」こと。迷ったらまずprivateにしておき、本当に必要になったら公開する、という順番で考えると安全です。

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を基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。

基礎からわかるKotlinをAmazonで見る

※ Amazon広告リンク

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

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

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

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

はい、Kotlinではpublic修飾子は省略可能です。特に何も書かなければ自動的にpublicとして扱われるため、明示的に書かなくてもプログラムは正常に動作します。

Kotlinのprivate修飾子を使うと何が隠れるのですか?

privateを使うと、その関数や変数、クラスは定義されたクラスやファイルの中だけで使えるようになります。他のクラスや外部からはアクセスできません。

Kotlinのinternal修飾子って具体的にどんなときに使うべきですか?

internal修飾子は、同じモジュール内だけで使わせたいクラスや関数に使います。アプリの機能ごとにモジュールが分かれている場合、そのモジュールの中だけで利用したいコードに指定するのが効果的です。
関連セミナーのご案内

【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分

「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。

本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。

具体的な体験内容と環境

【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。

【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。

この60分で得られる3つの体験

1. 自分のパソコンが「開発基地」に

プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。

2. プログラミングの「仕組み」がスッキリ

「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。

3. 「読みやすい」から「直せる」へ

Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。

※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。

セミナー画像

Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験

関連記事:
カテゴリの一覧へ
新着記事
New1
Swift
Swift 文字列 置換・検索の実用テクニック(replacing/contains)を初心者向けに解説
New2
Swift
Swift 文字列 切り出し・部分文字列(Substring)の扱い方を初心者向けに解説
New3
Swift
Swiftのクラスとは?初心者でもわかるオブジェクト指向の基本をやさしく解説
New4
Go言語
Go言語のpanicとrecoverの基本!エラーハンドリングの応用例
人気記事
No.1
Java&Spring記事人気No1
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.4
Java&Spring記事人気No4
Swift
Swift Xcode ArchiveとApp Store Connectへのアップロード完全ガイド!初心者でもわかる公開手順
No.5
Java&Spring記事人気No5
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.6
Java&Spring記事人気No6
Kotlin
Kotlinのメモリプロファイリングツールの使い方を完全解説!初心者でも理解できるメモリ使用量の調べ方
No.7
Java&Spring記事人気No7
Kotlin
KotlinのCI/CDツール活用入門!GitHub Actions・Jenkinsで自動ビルドと自動テストを始めよう
No.8
Java&Spring記事人気No8
Swift
Swift入門ガイド|基本構文と書き方をマスターしよう