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を経由して作成するサンプルアプリの詳細
- IntelliJ IDEA の メニューバーの 「File>New>Project ...」と選択していき、「Project ...」をクリックすると下記が面が表示されます。画面のように設定を変更し、「Next」をクリック。
- 依存関係を選択します。今回はシンプルなWeb Applicationにするので「Spring Web」だけを選択しています。また、Spring Bootのバージョンを2.4.6(SNAPSHOT)にします。
- 現在のディレクトリ構造は下記となっています。
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!"; } }
- 動作確認
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