Spring Bootで作成したアプリケーションをHerokuにデプロイする[Java][Heroku]

Spring Bootで作成したアプリケーションをHerokuにデプロイする[Java][Heroku]

Herokuとは

Heroku(ヘロク)は2007年創業のアメリカ合衆国の企業[1]。また、同社が開発と運営を行っているPaaS(Platform as a Service)の名称でもある[1]。2010年にはセールスフォース・ドットコムに買収された

via Wikipedia

wikipediaには他にも色々記載されていますが 今回の記事に一番近い解釈は アプリケーションを実行するための環境です。 以下が機能になります。 - 簡単なデプロイ - ホスティング - プラグインによるDB/キャッシュサーバ/その他ミドルウェアの利用 - プラグインの追加によるCI/CD - 多くの言語をサポートしています。

今回の開発環境

Windows10 Pro IntelliJ IDEA 2021.1 (Ultimate Edition)

前提

Gitインストールと初期設定済みであること
- Git DL
- WindowsのPath設定済みであること
HerokuCLI
- Heroku CLI DL
- WindowsのPath設定済みであること
Herokuのサービスにサインアップ済みであること
- Heroku sign up

作成するアプリが依存するライブラリなどの主なバージョン

主要素 項目 バージョン
言語 OpenJDK 8
FW SpringBoot 2.4.6
ビルドツール Gradle 6.8.3

手順

①Herokuにログイン

まずはじめにログインします。

Pathが通っている場合は、任意のディレクトリ。 C:\Program Files\Heroku\bin

Microsoft Windows [Version 10.0.19042.964]
(c) Microsoft Corporation. All rights reserved.

C:\Users\nyx>heroku login
 »   Warning: Our terms of service have changed: https://dashboard.heroku.com/terms-of-service
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/0b9f3c5d-103a-4271-91e0-85de0fdc381d?requestor=SFMyNTY.g2gDbQAAAAw2MC4xMTQuODIuNThuBgCGOBVSeQFiAAFRgA.frwzQ3iadLy_hiZ_ojUewt7PhVCkSredHjjb4pDjnnM
Logging in... done
Logged in as *********@gmail.com

C:\Users\nyx>

②SpringBootのサンプルアプリを作成します。

好きな方法で簡単なアプリを作成します。
いくつか方法があるので列挙していきます。
1. Spring Initializrでアプリを作成する。
2. ローカルでビルドツールを実行してアプリを作成する。Gradle,Mavenなど
3. IDEの機能を使って作成する。
今回は、3の方法でサンプルを作りました。
詳細は後述します。

③Gitのコマンドでローカルリポジトリを作成してコミットします。

作成したサンプルプロジェクトをgitで管理します。

#project folder
git init
git add .
git commit -m"first commit"

④Heroku CLI コマンドでHeroku上にアプリを作成する

heroku create

参考はこちら

⑤作成したアプリをHerokuにデプロイする。

# 自分が作成したアプリを管理しているブランチがmasterブランチなのでmasterを指定している。
git push heroku master

⑥デプロイできたことを確認する。

ブラウザでログに出力されたURLにアクセスして下記のように表示されたら成功です。

REFERENCE

Heroku公式チュートリアル
Heroku公式 Intoroduction
Heroku java support
Heroku CLI
https://github.com/rami2076/heroku_getting_start_v8

付録

IntelliJ IDEAを経由して作成するサンプルアプリの詳細

  1. IntelliJ IDEA の メニューバーの 「File>New>Project ...」と選択していき、「Project ...」をクリックすると下記が面が表示されます。画面のように設定を変更し、「Next」をクリック。
  2. 依存関係を選択します。今回はシンプルなWeb Applicationにするので「Spring Web」だけを選択しています。また、Spring Bootのバージョンを2.4.6(SNAPSHOT)にします。
  3. 現在のディレクトリ構造は下記となっています。
C:\Users\nyx\IdeaProjects\heroku_java8_get_start>tree
フォルダー パスの一覧:  ボリューム Windows
ボリューム シリアル番号は 3A86-E7F1 です
C:.
├─.gradle
│  ├─6.8.3
│  │  ├─fileChanges
│  │  ├─fileHashes
│  │  └─vcsMetadata-1
│  ├─buildOutputCleanup
│  ├─checksums
│  ├─configuration-cache
│  └─vcs-1
├─.idea
├─gradle
│  └─wrapper
└─src
    ├─main
    │  ├─java
    │  │  └─com
    │  │      └─nyx
    │  │          └─heroku_java8_get_start
    │  └─resources
    │      ├─static
    │      └─templates
    └─test
        └─java
            └─com
                └─nyx
                    └─heroku_java8_get_start

4. gitignoreの追加 gitignore.io 5. クラスファイルの追加

package com.nyx.heroku_java8_get_start;

import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Index Rest Controller
 */
@RestController
public class IndexRestController {

    /**
     * 最初のメッセージを返却する
     *
     * @return {@code "Hello World!"}
     */
    @GetMapping(path = "/", produces = MediaType.TEXT_PLAIN_VALUE)
    public String firstMessage() {
        return  "Hello World!";
    }

}
  1. 動作確認
http://localhost:8080/

実行結果

Herokuへのデプロイ実行時のターミナルの状態

  • デプロイ実行画面
Microsoft Windows [Version 10.0.19042.964]
(c) Microsoft Corporation. All rights reserved.

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   .gitignore
        new file:   build.gradle
        new file:   gradle/wrapper/gradle-wrapper.jar
        new file:   gradle/wrapper/gradle-wrapper.properties
        new file:   gradlew
        new file:   gradlew.bat
        new file:   settings.gradle
        new file:   src/main/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplication.java
        new file:   src/main/java/com/nyx/heroku_java8_get_start/IndexRestController.java
        new file:   src/main/resources/application.properties
        new file:   src/test/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplicationTests.java


C:\Users\nyx\IdeaProjects\heroku_java8_get_start>heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/35e5c2b9-66ec-43e9-a665-1aab6ea3b21e?requestor=SFMyNTY.g2gDbQAAAAw2MC4xMTQuODIuNThuBgCXfRlSeQFiAAFRgA.9v7aHnbs9ezqvPQIQpwPzTqJwUWgwe6XSkV261ritZY
Logging in... done
Logged in as *********@gmail.com

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git branch -a

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git branch

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>
C:\Users\nyx\IdeaProjects\heroku_java8_get_start>
C:\Users\nyx\IdeaProjects\heroku_java8_get_start>
C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git status
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   .gitignore
        new file:   build.gradle
        new file:   gradle/wrapper/gradle-wrapper.jar
        new file:   gradle/wrapper/gradle-wrapper.properties
        new file:   gradlew
        new file:   gradlew.bat
        new file:   settings.gradle
        new file:   src/main/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplication.java
        new file:   src/main/java/com/nyx/heroku_java8_get_start/IndexRestController.java
        new file:   src/main/resources/application.properties
        new file:   src/test/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplicationTests.java


C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git commit -m"add:first commit."
[master (root-commit) 86a803b] add:first commit.
 11 files changed, 397 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 build.gradle
 create mode 100644 gradle/wrapper/gradle-wrapper.jar
 create mode 100644 gradle/wrapper/gradle-wrapper.properties
 create mode 100644 gradlew
 create mode 100644 gradlew.bat
 create mode 100644 settings.gradle
 create mode 100644 src/main/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplication.java
 create mode 100644 src/main/java/com/nyx/heroku_java8_get_start/IndexRestController.java
 create mode 100644 src/main/resources/application.properties
 create mode 100644 src/test/java/com/nyx/heroku_java8_get_start/HerokuJava8GetStartApplicationTests.java

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git status
On branch master
nothing to commit, working tree clean

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git branch
* master

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>heroku login
heroku: Press any key to open up the browser to login or q to exit:
Opening browser to https://cli-auth.heroku.com/auth/cli/browser/b74c0c51-b57e-409d-91ec-f246db68c152?requestor=SFMyNTY.g2gDbQAAAAw2MC4xMTQuODIuNThuBgB4bhtSeQFiAAFRgA.g1afhoARe7TWuD-J0rz82oycjF-3s3zFL4G6dDfQ7j0
Logging in... done
Logged in as *********@gmail.com

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>heroku create
Creating app... done, ⬢ sample-userland-******
https://sample-userland-******.herokuapp.com/ | https://git.heroku.com/sample-userland-******.git

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git branch -a
* master

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git remote -v
heroku  https://git.heroku.com/sample-userland-******.git (fetch)
heroku  https://git.heroku.com/sample-userland-******.git (push)

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git status
On branch master
nothing to commit, working tree clean

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>git push heroku master
Enumerating objects: 27, done.
Counting objects: 100% (27/27), done.
Delta compression using up to 4 threads
Compressing objects: 100% (18/18), done.
Writing objects: 100% (27/27), 57.95 KiB | 6.44 MiB/s, done.
Total 27 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Building on the Heroku-20 stack
remote: -----> Determining which buildpack to use for this app
remote: -----> Gradle app detected
remote: -----> Spring Boot detected
remote: -----> Installing JDK 1.8... done
remote: -----> Building Gradle app...
remote: -----> executing ./gradlew build -x check
remote:        ./gradlew: 39: cd: can't cd to "./
remote:        Downloading https://services.gradle.org/distributions/gradle-6.8.3-bin.zip
remote:        ..........10%..........20%..........30%...........40%..........50%..........60%..........70%...........80%..........90%..........100%
remote:        To honour the JVM settings for this build a single-use Daemon process will be forked. See https://docs.gradle.org/6.8.3/userguide/gradle_daemon.html#sec:disabling_the_daemon.
remote:        Daemon will be stopped at the end of the build
remote:        > Task :compileJava
remote:        > Task :processResources
remote:        > Task :classes
remote:        > Task :bootJarMainClassName
remote:        > Task :bootJar
remote:        > Task :jar SKIPPED
remote:        > Task :assemble
remote:        > Task :build
remote:
remote:        BUILD SUCCESSFUL in 37s
remote:        4 actionable tasks: 4 executed
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote:        Done: 66.4M
remote: -----> Launching...
remote:        Released v3
remote:        https://sample-userland-******.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/sample-userland-******.git
 * [new branch]      master -> master

C:\Users\nyx\IdeaProjects\heroku_java8_get_start>

動作確認画面 - ログに記載されたデプロイ先のURLをコピーしてブラウザからアクセスして動作確認を実施 https://git.heroku.com/sample-userland-******

Heroku CLIインストール時の問題

  • インストール時に下記のようなメッセージが出た場合、Pathの設定に失敗した可能性があります。
  • デフォルトは下記ディレクトリなので環境設定からパスの追加を行ってください。
    C:\Program Files\Heroku\bin