カテゴリ: Kotlin 更新日: 2025/11/27

Kotlinのsealedクラスとは?when式と組み合わせて使う方法を初心者向けに解説!

Kotlinのsealedクラスとは?when式と組み合わせた活用例
Kotlinのsealedクラスとは?when式と組み合わせた活用例

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

生徒

「Kotlinで『sealedクラス』って出てきたんですが、どういう意味ですか?」

先生

「sealed(シールド)クラスは、あるグループのクラスを限定して、when式で安全に使えるようにする特別なクラスです。」

生徒

「限定するってどういうことですか? 普通のクラスと何が違うんですか?」

先生

「sealedクラスを使うと、そのクラスを継承できるクラスを決められるんです。だから、安全に分岐処理ができるんですよ。初心者向けにわかりやすく説明していきましょう!」

1. sealedクラスとは?Kotlinでの意味と特徴

1. sealedクラスとは?Kotlinでの意味と特徴
1. sealedクラスとは?Kotlinでの意味と特徴

Kotlinのsealedクラスは、特定のクラスをまとめてグループ化し、その中だけで使うように制限する仕組みです。sealedは「封印された、閉じられた」という意味で、継承できるクラスを限定できるのが特徴です。

これにより、when式でその種類をすべてチェックでき、予期しないクラスの混入を防ぐことができます。

2. sealedクラスの基本的な書き方

2. sealedクラスの基本的な書き方
2. sealedクラスの基本的な書き方

まずは、Kotlinでのsealedクラスの定義方法を見てみましょう。以下は、交通信号を表すsealedクラスの例です。


sealed class TrafficSignal

class Red : TrafficSignal()
class Yellow : TrafficSignal()
class Green : TrafficSignal()

sealed class TrafficSignalでベースとなる親クラスを作り、そのあとにRedYellowなどのサブクラスを定義します。

3. sealedクラスとwhen式の組み合わせ

3. sealedクラスとwhen式の組み合わせ
3. sealedクラスとwhen式の組み合わせ

sealedクラスの最大の利点は、when式と組み合わせたときに、すべてのパターンを網羅的にチェックできることです。以下のように使います。


fun showSignalMeaning(signal: TrafficSignal) {
    when (signal) {
        is Red -> println("止まれ")
        is Yellow -> println("注意して進め")
        is Green -> println("進んでOK")
    }
}

このようにすれば、elseを書かなくても、すべての種類を漏れなく処理できます。

4. 実行例:sealedクラスを使ってみよう

4. 実行例:sealedクラスを使ってみよう
4. 実行例:sealedクラスを使ってみよう

fun main() {
    val signal: TrafficSignal = Green()
    showSignalMeaning(signal)
}

進んでOK

このように、sealedクラスとwhen式を使えば、クラスの種類ごとに安全に処理を分けることができます。

5. sealedクラスの活用シーンは?

5. sealedクラスの活用シーンは?
5. sealedクラスの活用シーンは?

Kotlinのsealedクラスは、次のような場面でよく使われます。

  • 状態管理(例:アプリの画面ステータスやAPIの結果)
  • 限定された入力パターン(例:操作イベントや通知の種類)
  • 複数の型をまとめて扱いたいとき

例えば、ログイン画面の状態が「未入力」「ログイン中」「エラー」「完了」など決まっている場合、それぞれをsealedクラスで定義すれば、間違った状態を排除でき、バグを防ぎやすくなります

6. sealedクラスとopenクラスの違いは?初心者向けに解説

6. sealedクラスとopenクラスの違いは?初心者向けに解説
6. sealedクラスとopenクラスの違いは?初心者向けに解説

Kotlinでは、通常のクラスはopenにしないと継承できません。しかし、sealedクラスは継承前提のクラスです。

ただし、sealedクラスを継承できるのは同じファイル内だけです。これが最大の制約であり、安全性の理由でもあります。

以下に違いをまとめます:

  • openクラス:他のファイルでも継承可能。どこからでも継承される可能性がある。
  • sealedクラス:同じファイル内だけ継承OK。予測可能な型だけを扱える

7. Kotlin初心者が覚えておきたいsealedクラスのポイント

7. Kotlin初心者が覚えておきたいsealedクラスのポイント
7. Kotlin初心者が覚えておきたいsealedクラスのポイント

sealedクラスを学ぶうえで、以下の点を覚えておくと役立ちます:

  • sealedクラスは「限定された継承」をするクラス
  • when式で使うとelseが不要になり、読みやすく安全
  • アプリの状態や固定のイベントを表すときに便利

sealedクラスは、一見すると難しそうに見えますが、実際には「決まった選択肢しかないものを、正しく使いたいとき」にぴったりの機能です。

まとめ

まとめ
まとめ

Kotlinのsealedクラスは、「決められた種類だけが存在する」ことを保証できる、とても便利な仕組みです。特に、when式と組み合わせることで、安全かつ明確に処理を分けられるのが大きな特徴です。これは、複数の状態や種類を扱う場面で、ミスを減らしやすく、読みやすく、保守しやすいコードを書けることにつながります。

たとえば、交通信号のように「赤・黄・青」の3つだけが存在する状況で、それ以外のものが入り込まないようにするには、sealedクラスが最適です。sealedクラスを使えば、定義したクラス以外は継承できないため、想定外の種類が出てくる心配がありません。

また、when式との相性がとてもよく、elseを省略してもエラーにならず、すべての種類を網羅できるようになっている点も魅力です。これにより、「抜け漏れ」をコンパイル時にチェックできるため、実行時のバグを防ぐことにもつながります。

sealedクラスは、アプリケーションの状態管理や、イベントの種類分け、APIのレスポンスを分けるときなど、多くの場面で活躍します。さらに、sealedクラスを使ったコードは、「今どんな状態か」「何が起きているか」を表すのに非常に向いていて、可読性も高くなります。

以下は、簡単なチャットアプリの状態をsealedクラスで表したサンプルコードです。複雑な条件でも、このように状態を明確に分けることができます。


sealed class ChatState
class Connecting : ChatState()
class Connected(val userName: String) : ChatState()
class Disconnected(val reason: String) : ChatState()

fun showChatStatus(state: ChatState) {
    when (state) {
        is Connecting -> println("接続中です…")
        is Connected -> println("${state.userName} さんが接続しました。")
        is Disconnected -> println("切断されました:${state.reason}")
    }
}

fun main() {
    val currentState: ChatState = Connected("さくら")
    showChatStatus(currentState)
}


さくら さんが接続しました。

このように、sealedクラスはただの型の定義にとどまらず、アプリのロジックを明確に整理する道具としてとても役立ちます。特に初心者の方は、最初に「クラスの種類を限定する」考え方を理解しておくことで、Kotlinらしい設計や記述に自然と慣れていくことができます。

今回の記事で、sealedクラスの定義方法、when式との組み合わせ、活用場面などをひと通り学ぶことができました。最初は少し概念が難しく感じるかもしれませんが、身近な例で考えてみると理解しやすくなります。実際にコードを書きながら、sealedクラスを使った状態分岐のメリットを体感してみてください。

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

生徒

「sealedクラスって、クラスの種類を決めてしまえるんですね。最初はなんとなく難しそうでしたけど、例を見ると使いやすそうです!」

先生

「そうなんです。決まった状態やパターンだけを扱いたいときに、とても相性がいいんですよ。when式との組み合わせも覚えておくと便利です。」

生徒

「たしかに、elseがいらないって安心ですね。どの種類があるかコードを見ればすぐ分かるのも良いです。」

先生

「その通りです。将来もっと複雑なアプリを作るときにも、状態を整理しやすくなりますよ。今のうちにsealedクラスの考え方をしっかり身につけておきましょう。」

関連記事:
カテゴリの一覧へ
新着記事
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のオプショナル型とは?初心者でもわかる使い方とアンラップの基礎