Deep-dive on the Next Gen Platform. Join the Webinar!

Skip Navigation
Show nav
Dev Center
  • Get Started
  • ドキュメント
  • Changelog
  • Search
  • Get Started
    • Node.js
    • Ruby on Rails
    • Ruby
    • Python
    • Java
    • PHP
    • Go
    • Scala
    • Clojure
    • .NET
  • ドキュメント
  • Changelog
  • More
    Additional Resources
    • Home
    • Elements
    • Products
    • Pricing
    • Careers
    • Help
    • Status
    • Events
    • Podcasts
    • Compliance Center
    Heroku Blog

    Heroku Blog

    Find out what's new with Heroku on our blog.

    Visit Blog
  • Log inorSign up
Hide categories

Categories

  • Heroku のアーキテクチャ
    • Dyno (アプリコンテナ)
      • Dyno Management
      • Dyno Concepts
      • Dyno Behavior
      • Dyno Reference
      • Dyno Troubleshooting
    • スタック (オペレーティングシステムイメージ)
    • ネットワーキングと DNS
    • プラットフォームポリシー
    • プラットフォームの原則
  • Developer Tools
    • コマンドライン
    • Heroku VS Code Extension
  • デプロイ
    • Git を使用したデプロイ
    • Docker によるデプロイ
    • デプロイ統合
  • 継続的デリバリーとインテグレーション
    • 継続的統合
  • 言語サポート
    • Node.js
      • Working with Node.js
      • Troubleshooting Node.js Apps
      • Node.js Behavior in Heroku
    • Ruby
      • Rails のサポート
      • Bundler の使用
      • Working with Ruby
      • Ruby Behavior in Heroku
      • Troubleshooting Ruby Apps
    • Python
      • Working with Python
      • Python でのバックグランドジョブ
      • Python Behavior in Heroku
      • Django の使用
    • Java
      • Java Behavior in Heroku
      • Working with Java
      • Maven の使用
      • Spring Boot の使用
      • Troubleshooting Java Apps
    • PHP
      • PHP Behavior in Heroku
      • Working with PHP
    • Go
      • Go の依存関係管理
    • Scala
    • Clojure
    • .NET
      • Working with .NET
  • データベースとデータ管理
    • Heroku Postgres
      • Postgres の基礎
      • Postgres スターターガイド
      • Postgres のパフォーマンス
      • Postgres のデータ転送と保持
      • Postgres の可用性
      • Postgres の特別なトピック
      • Migrating to Heroku Postgres
    • Heroku Data For Redis
    • Apache Kafka on Heroku
    • その他のデータストア
  • AI
    • Working with AI
  • モニタリングとメトリクス
    • ログ記録
  • アプリのパフォーマンス
  • アドオン
    • すべてのアドオン
  • 共同作業
  • セキュリティ
    • アプリのセキュリティ
    • ID と認証
      • シングルサインオン (SSO)
    • Private Space
      • インフラストラクチャネットワーキング
    • コンプライアンス
  • Heroku Enterprise
    • Enterprise Accounts
    • Enterprise Team
    • Heroku Connect (Salesforce 同期)
      • Heroku Connect の管理
      • Heroku Connect のリファレンス
      • Heroku Connect のトラブルシューティング
  • パターンとベストプラクティス
  • Heroku の拡張
    • Platform API
    • アプリの Webhook
    • Heroku Labs
    • アドオンのビルド
      • アドオン開発のタスク
      • アドオン API
      • アドオンのガイドラインと要件
    • CLI プラグインのビルド
    • 開発ビルドパック
    • Dev Center
  • アカウントと請求
  • トラブルシューティングとサポート
  • Salesforce とのインテグレーション
  • 言語サポート
  • Java
  • Working with Java
  • Heroku での Java セッション処理

Heroku での Java セッション処理

日本語 — Switch to English

この記事の英語版に更新があります。ご覧の翻訳には含まれていない変更点があるかもしれません。

最終更新日 2022年07月15日(金)

Table of Contents

  • Redis を使用してセッションを保存する理由
  • Tomcat Webapp Runner を使用したセッションの保存
  • Redisson を使用したセッションの保存
  • その他のオプション

HTTP はステートレスなプロトコルですが、ほとんどのアプリケーションでは、ログイン状態やショッピングカートの内容のような特定の情報を、リクエスト全体にわたって保持する必要があります。このような状態は通常、セッション​に保存されます。

セッションは、クライアント側で暗号化された HTTP Cookie に保存するか、サーバー側でさまざまな永続化メカニズムを使用して保存することができます。どちらのアプローチにも長所と短所がありますが、この記事では、Heroku 上の Java アプリケーションでサーバー側セッションを確実に処理する方法について説明します。この記事のすべての例では、ストレージメカニズムとして Redis​ を使用します。

Redis を使用してセッションを保存する理由

dyno​ のステートレスな性質と、水平方向に dyno をスケーリングする必要性に照らして、Heroku では、ファイルベースのセッションストレージおよびインメモリストレージは推奨されていません。ファイルストレージとインメモリストレージのどちらでも、セッションデータは再起動時に失われ、dyno 間で共有できません。さらに、セッションを dyno にローカル保存した場合、ユーザーからの次のリクエストが別の​ dyno に届き、そこにはセッション情報が存在しないという状況に陥る可能性があります。

Redis インスタンスは、dyno の再起動をまたいでデータを永続化し、複数の dyno 間で共有できるため、セッションを保存するための優れたソリューションです。次のように実行して、Redis インスタンスをアプリに追加できます。

$ heroku addons:create heroku-redis

これにより、アプリで REDIS_URL​ の環境設定が行われ、この記事で説明する手順で使用する準備が整います。または、Heroku のサードパーティ Redis アドオン​のいずれかを使用することもできます。

Tomcat Webapp Runner を使用したセッションの保存

Heroku 推奨のサーブレットコンテナの Tomcat Webapp Runner​ には、Redis または Memcached を使用したセッションストレージのサポートが組み込まれています。これを Heroku Data for Redis アドオンと共に使用するには、--session-store redis​ オプションを次のように Procfile​ に追加することによって Webapp Runner JAR ファイルに渡します。

web: java -jar target/dependency/webapp-runner.jar --session-store redis target/myapp.war

あるいは、heroku war:deploy​ または mvn heroku:deploy-war​ コマンドを使用している (そのため Procfile​ が存在しない) 場合は、次のように実行して環境設定としてこのオプションを設定できます。

$ heroku config:set WEBAPP_RUNNER_OPTS="--session-store redis"

Webapp Runner は、アドオンによって提供された REDIS_URL​ 環境変数を検出し、それを使用してアプリケーションの HTTP セッションの保存を開始します。

Redisson を使用したセッションの保存

Webapp Runner を使用していない場合、Redis 用の高性能 Java クライアントとして人気が高い Redisson​ などのライブラリが必要です。これは、セッションストレージなどのさまざまな目的に使用できます。

Redisson では、Tomcat​ および Spring​ 用のアダプターを提供しています。その他のサーバーやフレームワークの場合は、Redisson API を直接使用する必要があります。

いずれの場合も、次のように、Java コードで org.redisson.config.Config​ オブジェクトを作成する必要があります。

String redisUriString = System.getenv("REDIS_URL");

URI redisUri = URI.create(redisUriString);

Config config = new Config();
SingleServerConfig serverConfig = config.useSingleServer()
          .setAddress(redisUriString)
          .setConnectionPoolSize(10)
          .setConnectionMinimumIdleSize(10)
          .setTimeout(5000);

if (redisUri.getUserInfo() != null) {
  serverConfig.setPassword(redisUri.getUserInfo().substring(redisUri.getUserInfo().indexOf(":")+1));
}

次に、Config​ オブジェクトを使用して新しい RedissonClient​ インスタンスを作成できます。

RedissonClient redisson = Redisson.create(config);

Spring または Spring Boot を使用している場合は、Redisson のドキュメント​で説明されているように、@EnableRedissonHttpSession​ アノテーションも必要です。

クライアントでオブジェクトを保存する方法は、フレームワークまたはサーバーの動作方式によって異なります。多数の例と一般的なパターンが Redisson のドキュメントで紹介されています​。

その他のオプション

Redis と Memcached の両方でセッションストアを構築するためのクライアントとライブラリは、ほかにも多数存在します。これらには、次のものが含まれます。

  • Jedis​: Java Redis クライアント
  • XMemcached​: Java Memcached クライアント

Memcachier のアドオンプロバイダー向けドキュメント​でも Memcached への接続例を確認できます。

関連カテゴリー

  • Working with Java
Webapp Runner を使用した Tomcat ベースの Java Web アプリケーションのデプロイ Heroku で Web 以外の Java dyno を実行する

Information & Support

  • Getting Started
  • Documentation
  • Changelog
  • Compliance Center
  • Training & Education
  • Blog
  • Support Channels
  • Status

Language Reference

  • Node.js
  • Ruby
  • Java
  • PHP
  • Python
  • Go
  • Scala
  • Clojure
  • .NET

Other Resources

  • Careers
  • Elements
  • Products
  • Pricing
  • RSS
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku Blog
    • Heroku News Blog
    • Heroku Engineering Blog
  • Twitter
    • Dev Center Articles
    • Dev Center Changelog
    • Heroku
    • Heroku Status
  • Github
  • LinkedIn
  • © 2025 Salesforce, Inc. All rights reserved. Various trademarks held by their respective owners. Salesforce Tower, 415 Mission Street, 3rd Floor, San Francisco, CA 94105, United States
  • heroku.com
  • Legal
  • Terms of Service
  • Privacy Information
  • Responsible Disclosure
  • Trust
  • Contact
  • Cookie Preferences
  • Your Privacy Choices