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

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

※ Amazon広告リンク

まとめ

まとめ
まとめ

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クラスの考え方をしっかり身につけておきましょう。」

関連セミナーのご案内

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

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

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

具体的な体験内容と環境

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

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

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

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

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

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

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

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

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

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

セミナー画像

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

関連記事:
カテゴリの一覧へ
新着記事
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
Go言語
Go言語で条件式を1行で書くコツ!三項演算子の代替と短縮記法
No.7
Java&Spring記事人気No7
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.8
Java&Spring記事人気No8
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説