以前の記事で、Heroku 上に空のアプリを作成し、Postgresql アドオンを追加する記事を書きました。
今回はこの応用編として、DB を使うアプリをあらかじめローカル Eclipse で作成し、それを Heroku にデプロイする方法を書いておきたいと思います。
Heroku とは
このあたりのページが分かりやすくまとめられています。
【5分でわかる】herokuとは?概要や特徴をわかりやすく解説 | 侍エンジニア塾ブログ | プログラミング入門者向け学習情報サイト
要するに、無料で全世界に Web アプリを公開することができるプラットホームです。もちろんサービスが手厚い有料プランもあります。
作成した Web アプリについて
今回、Heroku にデプロイしようとしている Web アプリを紹介します。
西暦と和暦を相互に変換できるアプリケーションです。デザインセンスがなくてすみません。
DB で元号の開始日・終了日などを管理しています。
それではデプロイ
コマンドプロンプトを立ち上げて、「heroku login」を実行し、E-mail とパスワードを入力します。
次に cd コマンドでプロジェクトのフォルダに移動します。プロジェクトのフォルダは プロジェクトのプロパティ画面で確認することができます。下図の赤枠で表示されているフォルダです。
「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/ にアクセスすると、
無事、アプリが表示されました。
めでたし、めでたし。
プロフェッショナルのための 実践Heroku入門 プラットフォーム・クラウドを活用したアプリケーション開発と運用 (書籍)
- 作者: 相澤歩,arton,鳥井雪,織田敬子
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/09/19
- メディア: 大型本
- この商品を含むブログ (3件) を見る
- 作者: 掌田津耶乃,相澤歩
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/03/15
- メディア: 大型本
- クリック: 7回
- この商品を含むブログ (4件) を見る
LINE BOTを作ろう! Messaging APIを使ったチャットボットの基礎と利用例
- 作者: 立花翔
- 出版社/メーカー: 翔泳社
- 発売日: 2017/05/12
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る