山崎屋の技術メモ

IT業界で働く中でテクノロジーを愛するSIerのシステムエンジニア👨‍💻 | AndroidとWebアプリの二刀流🧙‍♂️ | コードの裏にあるストーリーを綴るブログ執筆者✍️ | 日々進化するデジタル世界で学び続ける探究者🚀 | #TechLover #CodeArtisan、気になること、メモしておきたいことを書いていきます。

Spring boot で作ったアプリを Heroku にデプロイして全世界に公開

以前、Heroku にユーザ登録した記事を書きました。
www.shookuro.com


では、実際に Spring boot で作成した Web アプリを Heroku にデプロイして公開してみたいと思います。

アプリは "Hello! Spring Boot!!" という文字列を表示するだけの簡単なものです。
作り方は以前の記事を参考にしてください。
yyama1556.hateblo.jp

では、さっそくやってみます。

Git 管理下に置く

まず、Git の設定。

コマンドプロンプトでプロジェクトのルートフォルダに移動し、[ git init ]で ソースを GIT で管理させます。

そのあと [ git add --all ]で git のインデックスに登録。

その後、[ git commit -m "web app" ] のようにコミットします。

コマンドの入出力の例です。

C:\Users\yyama>cd C:\workspace\demo

C:\workspace\demo>git init
Initialized empty Git repository in C:/workspace/demo/.git/

C:\workspace\demo>git add --all

C:\workspace\demo>git commit -m "web app"
[master (root-commit) e2d7aaa] web app
 10 files changed, 486 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .mvn/wrapper/maven-wrapper.jar
 create mode 100644 .mvn/wrapper/maven-wrapper.properties
 create mode 100644 mvnw
 create mode 100644 mvnw.cmd
 create mode 100644 pom.xml
 create mode 100644 src/main/java/org/yyama/demo/DemoApplication.java
 create mode 100644 src/main/java/org/yyama/demo/DemoController.java
 create mode 100644 src/main/resources/application.properties
 create mode 100644 src/test/java/org/yyama/demo/DemoApplicationTests.java

Heroku のセットアップ

では、Heroku のほうのセットアップに移ります。

[ heroku create ] と入力し、Heroku 側でアプリケーションを受け入れられるようにします。出力にあるように[ https://fast-taiga-15372.herokuapp.com/ ]がこのアプリへの URL になります。

C:\workspace\demo>heroku create
Creating app... done, fast-taiga-15372
https://fast-taiga-15372.herokuapp.com/ | https://git.heroku.com/fast-taiga-15372.git

この時点で Heroku の自分のダッシュボードには、アプリが表示されるようになります。

続いてコマンドプロンプトで [ git push heroku master ]と入力すると、ずらずらとログが吐かれてビルドとデプロイが行われます。

C:\workspace\demo>git push heroku master
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (26/26), 46.71 KiB | 0 bytes/s, done.
Total 26 (delta 0), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Java app detected
remote: -----> Installing OpenJDK 1.8... done
remote: -----> Executing: ./mvnw -DskipTests clean dependency:list install
remote:        /tmp/build_a5c941b997d2cd319183cfbb0da9e662
remote:        Downloading https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip
remote:        ..................................................................................................................................................................................................................................................................................................................................................................................................................................................
remote:        Unzipping /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv/apache-maven-3.5.0-bin.zip to /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv
remote:        Set executable permissions for: /tmp/build_a5c941b997d2cd319183cfbb0da9e662/.m2/wrapper/dists/apache-maven-3.5.0-bin/6ps54u5pnnbbpr6ds9rppcc7iv/apache-maven-3.5.0/bin/mvn
remote:        [INFO] Scanning for projects...

~~~ (略) ~~~

remote:        [INFO] ------------------------------------------------------------------------
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote:        Done: 60.7M
remote: -----> Launching...
remote:        Released v3
remote:        https://fast-taiga-15372.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/fast-taiga-15372.git
 * [new branch]      master -> master

では、[ https://fast-taiga-15372.herokuapp.com/ ]にアクセスしてみます。


Heroku 向けの設定なども非常に簡単でした。
これでアプリが全世界に公開できました。

エラーが出た場合

git push すると heroku 側でビルドが自動で行われますが、次のようなエラーが出ることがあります。

remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] BUILD FAILURE
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] Total time:  2.002 s
remote:        [INFO] Finished at: 2022-04-29T06:02:06Z
remote:        [INFO] ------------------------------------------------------------------------
remote:        [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project master-mainte: Fatal error compiling: invalid target release: 11 -> [Help 1]
remote:        [ERROR]
remote:        [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
remote:        [ERROR] Re-run Maven using the -X switch to enable full debug logging.
remote:        [ERROR]
remote:        [ERROR] For more information about the errors and possible solutions, please read the following articles:
remote:        [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
remote:
remote:  !     ERROR: Failed to build app with Maven
remote:        We're sorry this build is failing! If you can't find the issue in application code,
remote:        please submit a ticket so we can help: https://help.heroku.com/
remote:
remote:  !     Push rejected, failed to compile Java app.
remote:
remote:  !     Push failed
remote: Verifying deploy...
remote:
remote: !       Push rejected to master-mainte-template.
remote:
To https://git.heroku.com/master-mainte-template.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/master-mainte-template.git'

原因はよくわかっていませんが、私の場合テキストファイル「system.properties」をプロジェクトのルートディレクトリに作成することで解決しました。
ファイルの内容は以下のようにしました。

java.runtime.version=11

参考
アクティベーションHeroku の Java サポート | Heroku Dev Center
java - Fatal error compiling: invalid target release: 11 during pushing to heroku - Stack Overflow

アプリ名の変更

最後にアプリ名を変更してみましょう。

コマンドプロンプトで、「heroku rename アプリ名」と入力します。するとアプリの名前や アプリの URL、および Heroku の git リモートアドレスが自動で変更できます。ここではアプリ名は「hello-heroku-yyama」としました。これでアプリの URL は
https://hello-heroku-yyama.herokuapp.com/ に変更されました。しばらく置いておくのでアクセスしてみてください。


アプリ名はグローバルで一意な必要があるみたいで、誰かがすでに使用している場合「Name is already taken」と怒られます。

次回は Heroku の PostgreSql を使用してみます。
【Heroku Postgresql】アドオンを追加し、テーブル操作を行う - 山崎屋の技術メモ

今日はここまで。でわ。