山崎屋の技術メモ

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

【Heroku】DB を使うアプリをデプロイ

f:id:yyama1556:20180430102044p:plain

以前の記事で、Heroku 上に空のアプリを作成し、Postgresql アドオンを追加する記事を書きました。

www.shookuro.com

今回はこの応用編として、DB を使うアプリをあらかじめローカル Eclipse で作成し、それを Heroku にデプロイする方法を書いておきたいと思います。

Heroku とは

このあたりのページが分かりやすくまとめられています。

【5分でわかる】herokuとは?概要や特徴をわかりやすく解説 | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト

要するに、無料で全世界に Web アプリを公開することができるプラットホームです。もちろんサービスが手厚い有料プランもあります。

作成した Web アプリについて

今回、Heroku にデプロイしようとしている Web アプリを紹介します。

西暦と和暦を相互に変換できるアプリケーションです。デザインセンスがなくてすみません。

f:id:yyama1556:20180430103851p:plain

DB で元号の開始日・終了日などを管理しています。

それではデプロイ

コマンドプロンプトを立ち上げて、「heroku login」を実行し、E-mail とパスワードを入力します。

次に cd コマンドでプロジェクトのフォルダに移動します。プロジェクトのフォルダは プロジェクトのプロパティ画面で確認することができます。下図の赤枠で表示されているフォルダです。
f:id:yyama1556:20180430105924p:plain


「heroku create reki-henkan」と入力し、プロジェクトを heroku に登録します。「reki-henkan」はアプリ名です。好きな名前を付けましょう。

C:\workspace\reki-henkan>heroku create reki-henkan
Creating ⬢ reki-henkan... done
https://reki-henkan.herokuapp.com/ | https://git.heroku.com/reki-henkan.git


PostgreSQL アドオンを追加するため「heroku addons:create heroku-postgresql:hobby-dev -a reki-henkan」と入力します。

C:\workspace\reki-henkan>heroku addons:create heroku-postgresql:hobby-dev -a reki-henkan
Creating heroku-postgresql:hobby-dev on reki-henkan... free
Database has been created and is available
 ! This database is empty. If upgrading, you can transfer
 ! data from another database with pg:copy
Created postgresql-cubed-39702 as DATABASE_URL
Use heroku addons:docs heroku-postgresql to view documentation


続いて postgresql にログインします。「heroku pg:psql -a reki-henkan」コマンドを使用します。

C:\workspace\reki-henkan>heroku pg:psql -a reki-henkan
--> Connecting to postgresql-cubed-39702
psql (9.5.3, サーバー 10.3 (Ubuntu 10.3-1.pgdg14.04+1))
注意: psql メジャーバージョン 9.5, サーバーバージョン 10.3.
         psql の機能の中で、動作しないものがあるかもしれません。
SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: オフ)
"help" でヘルプを表示します.


DDL を実行します。

reki-henkan::DATABASE=> CREATE TABLE gengo (
reki-henkan::DATABASE(>     id integer NOT NULL,
reki-henkan::DATABASE(>     gengo_name character varying(10),
reki-henkan::DATABASE(>     start_ymd date,
reki-henkan::DATABASE(>     end_ymd date,
reki-henkan::DATABASE(>     biko character varying(256)
reki-henkan::DATABASE(> );
CREATE TABLE
reki-henkan::DATABASE=> ALTER TABLE gengo OWNER TO postgres;
ERROR:  must be member of role "postgres"
reki-henkan::DATABASE=> ALTER TABLE ONLY gengo
reki-henkan::DATABASE->     ADD CONSTRAINT gengo_pkey PRIMARY KEY (id);
ALTER TABLE


データをインサートします。ひとつずつ INSERT 文を手で打ってもいいのですが、ここではあらかじめ、INSERT.txt というファイルに INSERT 文を作成したとします。ファイルの SQL を実行するのは、通常の PostgreSQL と同じです。

reki-henkan::DATABASE=> \i INSERT.txt
INSERT 0 1
INSERT 0 1
・
・
・


続いて、プロジェクトを Git 管理下に置き、コミットします。「git init」・「git add --all」・「git commit」コマンドを使用します。詳細は↓を参照してください。

C:\workspace\reki-henkan>git init
Initialized empty Git repository in C:/workspace/reki-henkan/.git/

C:\workspace\reki-henkan>git add --all

C:\workspace\reki-henkan>git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   .mvn/wrapper/maven-wrapper.jar
        new file:   .mvn/wrapper/maven-wrapper.properties
        new file:   INSERT.txt
        new file:   Todo
        new file:   mvnw
        new file:   mvnw.cmd
        new file:   pom.xml
        new file:   src/main/java/org/yyama/RekiHenkanApplication.java
        new file:   src/main/java/org/yyama/controller/RekiController.java
        new file:   src/main/java/org/yyama/domain/Gengo.java
        new file:   src/main/java/org/yyama/domain/OneGengo.java
        new file:   src/main/java/org/yyama/exception/GengoHenkanException.java
        new file:   src/main/java/org/yyama/form/RekiForm.java
        new file:   src/main/java/valid/group/ValidGroupSeiToWa.java
        new file:   src/main/java/valid/group/ValidGroupWaToSei.java
        new file:   src/main/resources/application.properties
        new file:   src/main/resources/static/images/arrow.png
        new file:   src/main/resources/static/images/arrowSub.png
        new file:   src/main/resources/static/images/banners/eyecatch1.jpg
        new file:   src/main/resources/static/images/banners/eyecatch2.jpg
        new file:   src/main/resources/static/images/banners/eyecatch3.jpg
        new file:   src/main/resources/static/images/banners/mainImg.jpg
        new file:   src/main/resources/static/images/banners/mainImg_bk.jpg
        new file:   src/main/resources/static/images/banners/sample.jpg
        new file:   src/main/resources/static/images/banners/sample2.jpg
        new file:   src/main/resources/static/images/sub1.png
        new file:   src/main/resources/static/images/subLast.png
        new file:   src/main/resources/static/js/css3-mediaqueries.js
        new file:   src/main/resources/static/js/html5.js
        new file:   src/main/resources/static/js/jquery1.4.4.min.js
        new file:   src/main/resources/static/js/script.js
        new file:   src/main/resources/static/style.css
        new file:   src/main/resources/static/style2.css
        new file:   src/main/resources/templates/index.html
        new file:   src/test/java/org/yyama/GengoTests_seiToWa.java
        new file:   src/test/java/org/yyama/GengoTests_waToSei.java
        new file:   src/test/java/org/yyama/RekiHenkanApplicationTests.java


C:\workspace\reki-henkan>git commit -m "reki-henkan"
[master (root-commit) 0576889] reki-henkan
 38 files changed, 3227 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 .mvn/wrapper/maven-wrapper.jar
 create mode 100644 .mvn/wrapper/maven-wrapper.properties
 create mode 100644 INSERT.txt
 create mode 100644 Todo
 create mode 100644 mvnw
 create mode 100644 mvnw.cmd
 create mode 100644 pom.xml
 create mode 100644 src/main/java/org/yyama/RekiHenkanApplication.java
 create mode 100644 src/main/java/org/yyama/controller/RekiController.java
 create mode 100644 src/main/java/org/yyama/domain/Gengo.java
 create mode 100644 src/main/java/org/yyama/domain/OneGengo.java
 create mode 100644 src/main/java/org/yyama/exception/GengoHenkanException.java
 create mode 100644 src/main/java/org/yyama/form/RekiForm.java
 create mode 100644 src/main/java/valid/group/ValidGroupSeiToWa.java
 create mode 100644 src/main/java/valid/group/ValidGroupWaToSei.java
 create mode 100644 src/main/resources/application.properties
 create mode 100644 src/main/resources/static/images/arrow.png
 create mode 100644 src/main/resources/static/images/arrowSub.png
 create mode 100644 src/main/resources/static/images/banners/eyecatch1.jpg
 create mode 100644 src/main/resources/static/images/banners/eyecatch2.jpg
 create mode 100644 src/main/resources/static/images/banners/eyecatch3.jpg
 create mode 100644 src/main/resources/static/images/banners/mainImg.jpg
 create mode 100644 src/main/resources/static/images/banners/mainImg_bk.jpg
 create mode 100644 src/main/resources/static/images/banners/sample.jpg
 create mode 100644 src/main/resources/static/images/banners/sample2.jpg
 create mode 100644 src/main/resources/static/images/sub1.png
 create mode 100644 src/main/resources/static/images/subLast.png
 create mode 100644 src/main/resources/static/js/css3-mediaqueries.js
 create mode 100644 src/main/resources/static/js/html5.js
 create mode 100644 src/main/resources/static/js/jquery1.4.4.min.js
 create mode 100644 src/main/resources/static/js/script.js
 create mode 100644 src/main/resources/static/style.css
 create mode 100644 src/main/resources/static/style2.css
 create mode 100644 src/main/resources/templates/index.html
 create mode 100644 src/test/java/org/yyama/GengoTests_seiToWa.java
 create mode 100644 src/test/java/org/yyama/GengoTests_waToSei.java
 create mode 100644 src/test/java/org/yyama/RekiHenkanApplicationTests.java


git のリモートに Heroku のリポジトリを設定して確認します。

C:\workspace\reki-henkan>heroku git:remote -a reki-henkan
set git remote heroku to https://git.heroku.com/reki-henkan.git

C:\workspace\reki-henkan>git remote -v
heroku  https://git.heroku.com/reki-henkan.git (fetch)
heroku  https://git.heroku.com/reki-henkan.git (push)


そして Heroku サーバに push します。

C:\workspace\reki-henkan>git push heroku master
Counting objects: 63, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (53/53), done.
Writing objects: 100% (63/63), 483.06 KiB | 0 bytes/s, done.
Total 63 (delta 1), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> Java app detected
remote: -----> Installing JDK 1.8... done
remote: -----> Executing: ./mvnw -DskipTests clean dependency:list install
remote:        /tmp/build_2a39cc4121acc71ea64808009bf39622
remote:        Downloading https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.2/apache-maven-3.5.2-bin.zip
remote:        .............................................................................................................................................................................................................................................................................................................................................................................................................................................................
remote:        Unzipping /tmp/build_2a39cc4121acc71ea64808009bf39622/.m2/wrapper/dists/apache-maven-3.5.2-bin/28qa8v9e2mq69covern8vmdkj0/apache-maven-3.5.2-bin.zip to /tmp/build_2a39cc4121acc71ea64808009bf39622/.m2/wrapper/dists/apache-maven-3.5.2-bin/28qa8v9e2mq69covern8vmdkj0
remote:        Set executable permissions for: /tmp/build_2a39cc4121acc71ea64808009bf39622/.m2/wrapper/dists/apache-maven-3.5.2-bin/28qa8v9e2mq69covern8vmdkj0/apache-maven-3.5.2/bin/mvn
remote:        [INFO] Scanning for projects...
remote:        [INFO] Downloading from central: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-parent/2.0.0.RELEASE/spring-boot-starter-parent-2.0.0.RELEASE.pom
remote:        [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/commons-io/commons-io/2.4/commons-io-2.4.jar (185 kB at 2.0 MB/s)
remote:        [INFO] Downloaded from central: https://repo.maven.apache.org/maven2/org/sonatype/sisu/sisu-guice/2.1.7/sisu-guice-2.1.7-noaop.jar (472 kB at 4.8 MB/s)

~~~ (略) ~~~

remote:        [INFO] Installing /tmp/build_2a39cc4121acc71ea64808009bf39622/pom.xml to /app/tmp/cache/.m2/repository/org/yyama/reki-henkan/1.0.0-SNAPSHOT/reki-henkan-1.0.0-SNAPSHOT.pom
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] BUILD SUCCESS
remote:        [INFO] ------------------------------------------------------------------------
remote:        [INFO] Total time: 58.871 s
remote:        [INFO] Finished at: 2018-05-01T04:10:24Z
remote:        [INFO] Final Memory: 42M/270M
remote:        [INFO] ------------------------------------------------------------------------
remote: -----> Discovering process types
remote:        Procfile declares types     -> (none)
remote:        Default types for buildpack -> web
remote:
remote: -----> Compressing...
remote:        Done: 69.7M
remote: -----> Launching...
remote:        Released v4
remote:        https://reki-henkan.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.
To https://git.heroku.com/reki-henkan.git
 * [new branch]      master -> master


ブラウザから https://reki-henkan.herokuapp.com/reki/ にアクセスすると、
f:id:yyama1556:20180501131718p:plain

無事、アプリが表示されました。

めでたし、めでたし。

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)

プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)

HerokuではじめるRailsプログラミング入門

HerokuではじめるRailsプログラミング入門

LINE BOTを作ろう!  Messaging APIを使ったチャットボットの基礎と利用例

LINE BOTを作ろう! Messaging APIを使ったチャットボットの基礎と利用例