カテゴリ: Play Framework 更新日: 2026/03/20

Play FrameworkでのCookie(クッキー)の使い方を完全解説!Java初心者向け基本ガイド

Cookieの基本とPlay Frameworkでの扱い方
Cookieの基本とPlay Frameworkでの扱い方

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

生徒

「ウェブサイトを一度閉じても、設定したダークモードやログイン状態が残っているのはどういう仕組みなんですか?」

先生

「それは『Cookie(クッキー)』という仕組みを使っているからです。ブラウザ側に小さなデータを保存しておくことで、再訪問時にもその情報を読み取ることができるんですよ。」

生徒

「Play FrameworkでもJavaを使ってそのクッキーを操作できるんですか?」

先生

「もちろんです。Play Frameworkには、クッキーの発行や読み込みを直感的に行える便利な機能が備わっています。詳しく見ていきましょう!」

1. Cookie(クッキー)の基本概念

1. Cookie(クッキー)の基本概念
1. Cookie(クッキー)の基本概念

ウェブアプリケーションの世界において、クッキーは非常に重要な役割を果たしています。通常、インターネットの通信は一回ごとに完結する「ステートレス」な性質を持っています。つまり、サーバー側は「さっきアクセスしてきた人と、今アクセスしてきた人が同じ人かどうか」を判別することができません。これを解決するために、ユーザーのブラウザ(パソコンやスマホ)側に保存される小さなテキストデータがクッキーです。

クッキーには、名前(キー)と値(データ)のペアが含まれており、有効期限や保存される範囲なども設定できます。Play Framework(プレイフレームワーク)はこのクッキーを高度に活用しており、セッション管理もこのクッキーの仕組みの上で成り立っています。プログラミング初心者の皆さんは、まず「ブラウザに預ける小さなメモ帳」のようなものだとイメージしてください。

2. Play Frameworkでクッキーを新規発行する方法

2. Play Frameworkでクッキーを新規発行する方法
2. Play Frameworkでクッキーを新規発行する方法

Javaを用いたPlay Frameworkの開発では、コントローラーからレスポンスを返す際にクッキーを一緒に送ることができます。これには、withCookiesというメソッドを使用します。このメソッドの中に、新しく作成したクッキーの情報を詰め込むだけです。

例えば、ユーザーが選んだ「サイトの言語設定」をクッキーに保存する処理を考えてみましょう。以下のコードでは、"theme"という名前で"dark"という値を保存しています。クッキーを作成する際は、Http.Cookie.builderを使うのがモダンで推奨される書き方です。


import play.mvc.*;
import play.mvc.Http.Cookie;

public class CookieController extends Controller {
    public Result setCookie() {
        // "theme"という名前で"dark"という値をクッキーにセットします
        Cookie myCookie = Http.Cookie.builder("theme", "dark")
            .withMaxAge(java.time.Duration.ofDays(7)) // 1週間の有効期限
            .build();

        return ok("クッキーを保存しました!").withCookies(myCookie);
    }
}

このプログラムを実行すると、ユーザーのブラウザに「このサイトはダークモード設定だ」というメモが1週間保管されるようになります。非常にシンプルですが、これがパーソナライズされたウェブ体験の第一歩となります。

3. 保存されたクッキーの値を読み取る処理

3. 保存されたクッキーの値を読み取る処理
3. 保存されたクッキーの値を読み取る処理

クッキーを保存しただけでは意味がありません。次にユーザーがサイトにアクセスしたときに、その値を読み取って処理に活かす必要があります。Play Frameworkでは、リクエスト(Http.Request)から簡単にクッキーを取り出すことができます。

取得する際は、名前を指定して探します。もしクッキーが存在しない場合も考慮して、JavaのOptionalという型を使って安全に処理を記述します。これにより、クッキーがないときにプログラムが止まってしまうのを防ぐことができます。


public Result getCookie(Http.Request request) {
    // リクエストから"theme"という名前のクッキーを探します
    return request.cookie("theme")
        .map(c -> ok("現在のテーマ設定は: " + c.value()))
        .orElse(ok("テーマはまだ設定されていません。"));
}

現在のテーマ設定は: dark

もしクッキーがあればその値を表示し、なければ未設定であることを伝えます。このように、保存した値を賢く再利用することで、ユーザーにとって使いやすい親切なサイトが作れるようになります。

4. クッキーを削除してリセットする方法

4. クッキーを削除してリセットする方法
4. クッキーを削除してリセットする方法

不要になったクッキーは適切に削除する必要があります。例えば、設定をリセットしたい場合やログアウト時などです。実は、クッキーを削除するということは「有効期限を今すぐに切らす」ことと同義です。Play Frameworkでは、discardingCookieという非常に便利なメソッドが用意されています。

このメソッドに、削除したいクッキーの名前を渡すだけで、ブラウザからそのデータが消去されます。複数のクッキーを同時に削除したい場合は、カンマ区切りで複数の名前を指定することも可能です。以下のサンプルでは、先ほど設定したテーマ情報を消去しています。


public Result clearCookie() {
    // "theme"という名前のクッキーを削除(無効化)します
    return ok("テーマ設定を削除しました。")
        .discardingCookie("theme");
}

削除処理を行うことで、プライバシーの保護や不必要なデータの蓄積を防ぐことができます。ウェブ開発者として、データのライフサイクルを管理することは非常に大切なスキルです。

5. HTMLテンプレート内でクッキー情報を活用する

5. HTMLテンプレート内でクッキー情報を活用する
5. HTMLテンプレート内でクッキー情報を活用する

コントローラー側だけでなく、HTMLを表示するためのScalaテンプレート内でもクッキーの情報を直接参照したいことがあります。例えば、クッキーに保存されたユーザーの好みに合わせて、CSSのクラスを切り替えるような場合です。

Play Frameworkのテンプレートエンジンでは、リクエストオブジェクトから直接クッキーにアクセスできます。これにより、Javaコードで値を渡す手間を省き、画面側で柔軟に表示を制御できます。以下のHTMLコード例は、クッキーの値によって背景色を変更するイメージです。


@* HTMLテンプレート内での記述 *@
@import play.mvc.Http.Request
@(implicit request: Request)

<div class="container mt-3">
    @request.cookie("theme").map { c =>
        <div class="p-3 mb-2 bg-dark text-white">
            現在の設定は「@c.value()」モードです。
        </div>
    }.orElse {
        <div class="p-3 mb-2 bg-light">
            設定がありません。
        </div>
    }
</div>

このように書くことで、サーバーサイドのロジックとフロントエンドの見た目をシームレスに連携させることができます。BootStrapのクラスと組み合わせれば、見た目も一気にプロらしくなりますね。

6. クッキーの有効期限とセキュリティ設定

6. クッキーの有効期限とセキュリティ設定
6. クッキーの有効期限とセキュリティ設定

クッキーを扱う際に絶対に忘れてはならないのが、セキュリティ面の設定です。クッキーはユーザーのブラウザに保存されるため、悪意のある攻撃者に盗まれるリスクが常にあります。これを防ぐために、Play Frameworkではいくつかの重要な設定項目をJavaから指定できます。

特に重要なのが「HttpOnly」と「Secure」という設定です。HttpOnlyを有効にすると、JavaScriptからクッキーを読み取ることができなくなり、クロスサイトスクリプティング(XSS)などの攻撃からデータを守ることができます。また、Secureを有効にすると、HTTPS通信のときだけクッキーが送信されるようになります。これらの設定を適切に行うことで、安全なウェブサイトが構築できます。


public Result secureCookie() {
    // セキュリティを高めたクッキーの設定例
    Cookie secureCookie = Http.Cookie.builder("secretId", "abc-123")
        .withHttpOnly(true)    // JavaScriptからのアクセスを禁止
        .withSecure(true)      // HTTPS通信のみ許可
        .withSameSite(Http.Cookie.SameSite.STRICT) // CSRF対策
        .build();

    return ok("安全なクッキーを発行しました").withCookies(secureCookie);
}

7. セッションとクッキーの使い分けのコツ

7. セッションとクッキーの使い分けのコツ
7. セッションとクッキーの使い分けのコツ

Play Frameworkを使っていると、「セッションに保存するのとクッキーに保存するのは何が違うの?」という疑問が湧くかもしれません。実は、Playのセッション機能自体もクッキーを利用して作られています。しかし、大きな違いは「署名(デジタル署名)」の有無にあります。

セッションに保存したデータは、Play Frameworkによって自動的に署名が施されるため、ユーザーが勝手に中身を書き換えることができません。一方、今回解説した生のクッキーは、ブラウザの設定などでユーザーが値を変更できてしまいます。そのため、「ログインユーザーID」のような重要な情報は必ずセッションに保存し、「画面のテーマ設定」や「表示言語」のような、仮に書き換えられてもシステムに重大な影響が出ない設定情報はクッキーに保存する、という使い分けが推奨されます。このバランスを理解することで、Javaプログラマーとしての設計能力が一段とアップするはずです。まずは基本の読み書きから練習して、クッキーの便利さを体験してみてくださいね。

カテゴリの一覧へ
新着記事
New1
Play Framework
Play FrameworkでのCookie(クッキー)の使い方を完全解説!Java初心者向け基本ガイド
New2
Jakarta EE
Jakarta EEのRESTアーキテクチャの基本原則を徹底解説!JAX-RSで学ぶRESTful Webサービス入門
New3
Play Framework
Play Frameworkでセッションを削除・クリアする方法を完全ガイド!ログアウト処理も解説
New4
Jakarta EE
Jakarta EE JAX-RSとは?RESTful Web Servicesを作るための基本と役割を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
Jakarta EE
Jakarta EEとSpringの比較|どちらを選ぶべきか?初心者向けに徹底解説!
No.2
Java&Spring記事人気No2
Jakarta EE
Jakarta EEのリリースサイクルとバージョンの進化をやさしく解説!
No.3
Java&Spring記事人気No3
Jakarta EE
Jakarta EEとJava EEの違いまとめ!初心者向けにやさしく比較解説
No.4
Java&Spring記事人気No4
Jakarta EE
Jakarta EEとは?Java EEからの移行の歴史をやさしく解説
No.5
Java&Spring記事人気No5
Play Framework
Play Frameworkとは?特徴と歴史を初心者向けにわかりやすく解説
No.6
Java&Spring記事人気No6
Jakarta EE
Jakarta EE WebSocketサーバーエンドポイントの作成方法を初心者向けに解説 リアルタイム通信アプリ開発入門
No.7
Java&Spring記事人気No7
Jakarta EE
Jakarta WebSocket APIの概要と利用メリットを徹底解説 リアルタイム通信を実現するJakarta EE入門
No.8
Java&Spring記事人気No8
Jakarta EE
Jakarta サーブレットのdoGetとdoPostの違いと使い分けを徹底解説!初心者でもわかるHTTPリクエスト処理