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 で Web 以外の Java dyno を実行する

Heroku で Web 以外の Java dyno を実行する

日本語 — Switch to English

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

最終更新日 2019年12月16日(月)

Table of Contents

  • 前提条件
  • サンプルアプリケーション
  • ローカルでの実行
  • Heroku にデプロイする
  • Procfile の作成
  • Heroku にデプロイする
  • ワーカープロセスのスケーリング
  • One-off dyno
  • ジョブのスケジューリング

一部のアプリケーションでは、ロジックを複数のコンポーネントに分割することでメリットが得られます。

  1. エンドユーザーによって消費される Web プロセス
  2. バックグラウンドタスクと管理タスクを実行する 1 つ以上の Web 以外のプロセス

Web 以外のプロセスは、以下のいずれかです。

  1. Worker​ dyno で長時間実行され、(データベース上の、またはメッセージキューからの) イベントを待機しているプロセス
  2. One-off dyno​ で実行され、コマンドラインから、または Heroku Scheduler​ などのサービスから手動で呼び出すことができるコマンド

前提条件

  • Java の基本的な知識 (インストールされている JVM および Maven のバージョンなど)
  • Git の基本的な知識 (インストールされている Git のバージョンなど)

サンプルアプリケーション

One-off とワーカーの各プロセスタイプの例を示す単純なアプリは、2 つの単純な Java クラスと 1 つのビルドファイルとして作成できます。

sampleapp/
  pom.xml
  src/
    main/
      java/
        OneOffProcess.java
        WorkerProcess.java

src/main/java/OneOffProcess.java

public class OneOffProcess
{
    public static void main(String[] args)
    {
        System.out.println("OneOffProcess executed.");
    }
}

src/main/java/WorkerProcess.java

public class WorkerProcess
{
    public static void main(String[] args)
    {
        while(true) {
            try {
                Thread.sleep(1000);
            } catch(InterruptedException e) {}

            System.out.println("Worker process woke up");
        }
    }
}

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>herokujavasample</artifactId>
  <version>1.0-SNAPSHOT</version>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
          <artifactId>appassembler-maven-plugin</artifactId>
          <version>1.1.1</version>
          <configuration>
            <assembleDirectory>target</assembleDirectory>
            <programs>
                <program>
                    <mainClass>WorkerProcess</mainClass>
                    <name>worker</name>
                </program>
                <program>
                    <mainClass>OneOffProcess</mainClass>
                    <name>oneoff</name>
                </program>
            </programs>
          </configuration>
          <executions>
              <execution>
                  <phase>package</phase><goals><goal>assemble</goal></goals>
              </execution>
          </executions>
      </plugin>
    </plugins>
  </build>

</project>

アプリアセンブラプラグインにより、アプリケーションを開始するための便利な起動スクリプトが生成されます。1 つの pom.xml​ で複数の Web、ワーカー、または管理プロセスを定義できます。

GitHub​ からこのプロジェクトを複製できます。

ローカルでの実行

アプリケーションをビルドするには、次を実行します。

$ mvn package

次のようにしてワーカーを実行します。

$ sh target/bin/worker
Worker process woke up
Worker process woke up
Worker process woke up
...

(Windows では target\bin\worker.bat​ を使用します。)次のようにして One-off プロセスを実行します。

$ sh target/bin/oneoff
OneOffProcess executed.

これで、Heroku にデプロイする準備ができました。

Heroku にデプロイする

Procfile の作成

アプリケーションを実行する方法を、プロジェクトルートの Procfile​ で宣言します。次の内容でこのファイルを作成します。

worker: sh target/bin/worker

One-off dyno で実行するコマンドを Procfile に追加する必要はありません。One-off dyno のメカニズムでは、One-off dyno を起動するときにコマンドを指定します。

Heroku にデプロイする

変更を Git にコミットします。

$ git init
$ git add .
$ git commit -m "Ready to deploy"

アプリを作成します。

$ heroku create
Creating empty-fire-9222... done, stack is heroku-18
http://empty-fire-9222.herokuapp.com/ | git@heroku.com:empty-fire-9222.git
Git remote heroku added

コードをデプロイします。

$ git push heroku master
Counting objects: 66, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (31/31), done.
Writing objects: 100% (66/66), 15.74 KiB, done.
Total 66 (delta 10), reused 30 (delta 9)

-----> Heroku receiving push
-----> Java app detected
-----> Installing Maven 3.0.3..... done
-----> executing /app/tmp/repo.git/.cache/.Maven/bin/mvn -B -Duser.home=/tmp/build_14lc6nws0m7oc -Dmaven.repo.local=/app/tmp/repo.git/.cache/.m2/repository -DskipTests=true clean install
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] Building herokujavaworker 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.513s
[INFO] Finished at: Mon Nov 28 15:44:32 UTC 2011
[INFO] Final Memory: 12M/490M
[INFO] ------------------------------------------------------------------------
-----> Discovering process types
       Procfile declares types -> worker
-----> Compiled slug size is 12K
-----> Launching... done, v5
   http://empty-fire-9222.herokuapp.com deployed to Heroku

ワーカープロセスのスケーリング

ここで、次のようなコマンドを使用して Worker dyno を開始およびスケーリングできます。

$ heroku ps:scale worker=1
Scaling worker processes... done, now running 1

複数の dyno にワーカーをスケーリングすることで、リスナーを増やすことができ、それによって、より多くのメッセージを同時に消費および処理できるようになります。Worker dyno のログを確認するには、次のコマンドを使用できます。

$ heroku logs --tail
2011-12-14T00:52:26+00:00 heroku[slugc]: Slug compilation started
2011-12-14T00:52:54+00:00 heroku[web.1]: State changed from created to down
2011-12-14T00:52:55+00:00 heroku[slugc]: Slug compilation finished
2011-12-14T00:53:17+00:00 heroku[worker.1]: State changed from created to starting
2011-12-14T00:53:17+00:00 heroku[api]: Scale to worker=1 by jesper@heroku.com
2011-12-14T00:53:17+00:00 heroku[worker.1]: Starting process with command `sh target/bin/worker`
2011-12-14T00:53:18+00:00 heroku[worker.1]: State changed from starting to up
2011-12-14T00:53:19+00:00 app[worker.1]: Worker process woke up
2011-12-14T00:53:20+00:00 app[worker.1]: Worker process woke up
2011-12-14T00:53:21+00:00 app[worker.1]: Worker process woke up

One-off dyno

プロセスが、必要に応じて手動で実行したいコマンドである場合、One-off dyno を使用してそのように実行できます。 One-off dyno を開始してコマンドを実行するには、次のように heroku run​ コマンドを使用します。

$ heroku run "sh target/bin/oneoff"
Running sh target/bin/oneoff attached to terminal... up, run.1
OneOffProcess executed.

ジョブのスケジューリング

一定の間隔または頻度に基づいてジョブを実行する必要があるアプリケーションでは、Scheduler アドオン​を使用するか、Quartz​ などのライブラリを使用してカスタムクロックプロセス​を定義することができます。

スケジュールされたジョブとワーカー

One-off プロセスのスケジューリングは、キャッシュのクリアや、メールで送信されるレポートの作成トリガーなどの管理タスクを実行するのに適した方法です。これらの種類のイベントは頻繁に発生するものではなく、スケールアップやスケールダウンの必要がありません。

ワーカープロセスは、フロントエンド Web プロセスまたは他のワーカープロセスによってキューに入れられている作業の処理に適しています。アプリへのトラフィックに応じてワークロードが変わる場合があり、ワーカー数をスケールアップすることで、より多くの作業を並列で実行できます。10 分未満の間隔でイベントを処理する必要があるだけの場合にも、ワーカープロセスを使用できます。

関連カテゴリー

  • Working with Java
Webapp Runner を使用した Tomcat ベースの Java Web アプリケーションのデプロイ Java プロセスのウォームアップ

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