SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Herokuでスタート! はじめてのPaaSアプリケーション開発

仕組みもわかる 初めてのHerokuアプリケーションづくり! Gitでのデプロイもさらりとこなす

Herokuでスタート! はじめてのPaaSアプリケーション開発 第2回


  • X ポスト
  • このエントリーをはてなブックマークに追加

Herokuにデプロイする

Herokuアプリケーションの作成

 ローカルでアプリケーションが動作することが確認できたら、次はいよいよHerokuにデプロイしてみます。 ローカルで起動中のサーバをCTRL+Cキーで終了して、コマンドラインからheroku createコマンドを実行します。

 heroku createコマンドの基本書式は以下のとおりです。

heroku create [APPNAME]

 [APPNAME]の部分は任意のアプリケーション名です。英子文字、数字、ハイフンの組み合わせで任意の名前を付けることができます。 ただし、この名前は 世界中のHerokuアプリケーション間でユニーク である必要があります。 筆者はこのアプリケーションを「codezine-sample」という名前でHerokuにデプロイしましたが、同じ名前は使うことができません。 皆さんが試す場合には、アプリケーション名を「codezine-sample-shunjikonishi」のようにさらにサフィックスを付けるなどして、ユニークにしてください。

 あるいは、アプリケーション名を省略して実行することもできます。この場合、Herokuが適当な名前を自動生成してくれます。

$ heroku create codezine-sample
Creating codezine-sample... done, stack is cedar
http://codezine-sample.herokuapp.com/ | git@heroku.com:codezine-sample.git
Git remote heroku added

 慣れてくるとheroku createの実行結果の出力にはほとんど注意を払わなくなると思いますが、初回なのでこの実行結果を読み解いてみます。 この出力には以下の情報が含まれています。

  • 「codezine-sample」というアプリケーションが作成され、そのstackは「cedar」であること
  • 「http://codezine-sample.herokuapp.com/」というURLが用意されたこと
  • 「git@heroku.com:codezine-sample.git」というgitリポジトリが用意されたこと
  • ローカルのgit remoteに「heroku」という参照名が追加されたこと

 stackについては後述のコラム「stackとは」を参照してください。

 git remoteにherokuという名前が追加されたとのことなので、まずはそれを確認してみましょう。

$ git remote -v
heroku  git@heroku.com:codezine-sample.git (fetch)
heroku  git@heroku.com:codezine-sample.git (push)
upstream    https://github.com/shunjikonishi/codezine-sample.git (fetch)
upstream    https://github.com/shunjikonishi/codezine-sample.git (push)

 先にはupstreamだけだったリモートリポジトリにherokuのリポジトリが追加されていることがわかります。

 次にhttpで用意されたURLにアクセスしてみます。Webブラウザで「http://<YOUR APPNAME>.herokuapp.com/」に直接アクセスするか、またはコマンドラインで、

heroku open

と実行することで、そのURLをデフォルトブラウザで開くことができます。

 ただし、現時点ではまだアプリケーションコードをHerokuにアップしていないので、次の図のようにWelcomeメッセージが表示されるだけのはずです。

アプリケーション作成直後の画面
アプリケーション作成直後の画面

 

デプロイ

 アプリケーションのデプロイで使用するのはgit pushコマンドです。

$ git push heroku master
Initializing repository, done.
Counting objects: 22, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (14/14), done.
Writing objects: 100% (22/22), 4.17 KiB | 0 bytes/s, done.
Total 22 (delta 1), reused 0 (delta 0)

-----> Java app detected
-----> Installing OpenJDK 1.7... done
-----> Installing Maven 3.0.3... done
-----> executing /app/tmp/cache/.maven/bin/mvn -B -Duser.home=/tmp/build_a0344968-2d9e-458b-b597-f98d463b5b6d -Dmaven.repo.local=/app/tmp/cache/.m2/repository  -DskipTests=true clean install
       [INFO] Scanning for projects...
...(中略)...
       [INFO] ------------------------------------------------------------------------
       [INFO] BUILD SUCCESS
       [INFO] ------------------------------------------------------------------------
       [INFO] Total time: 8.443s
       [INFO] Finished at: Mon Sep 22 09:13:20 UTC 2014
       [INFO] Final Memory: 19M/514M
       [INFO] ------------------------------------------------------------------------
-----> Discovering process types
       Procfile declares types -> web

-----> Compressing... done, 72.9MB
-----> Launching... done, v6
       http://codezine-sample.herokuapp.com/ deployed to Heroku
To git@heroku.com:codezine-sample.git
 * [new branch]      master -> master

 

 先にgit remoteでherokuというリポジトリが登録されていることを確認しましたが、このリポジトリのmasterブランチにアプリケーションコードをpushすることで、それがコンパイルされHerokuアプリケーションとしてリリースされるわけです。

 ブラウザに戻って再度「http://<YOUR APPNAME>.herokuapp.com/」にアクセスしてみてください。今度はローカルで実行した時と同様にHello worldが表示されます。

 当たり前ですが、このURLは世界中のどこからでもWebブラウザさえあればアクセスすることができます。 つまり、あなたの作ったアプリケーションが世界中に公開/発信されたということです。

 サーバなどのハードウェアは一切購入していませんし、それどころかHeroku社に対しても1円もお金を支払ってはいません。 数年前には考えられなかったことですが、HerokuなどのPaaSの台頭によって、このように費用ゼロからアプリケーションを公開できることになったことは、エンジニアにとっては大きな恩恵です。

 

stackとは

 stackとは、Herokuアプリケーションが実行される土台となるコンテナのことです。 現在はUbuntu 10.04をベースとする「cedar」がデフォルトで使用されており、β版としてUbuntu 14.04をベースとする「cedar-14」も提供されています。 過去には「bamboo」というDebianベースのstackもありましたが、時代の流れとともに廃棄されました。

 Ubuntu 10.04のサポート期間は2015年4月で終了します。そのため、時間の問題でcedar-14がデフォルトとなり、cedarも非推奨(新規作成時に選択不能)になると思われます。ただし、cedarが新規作成時に選択不可になったとしても、それ以前にcedarで作成したアプリケーションは以降もcedar上で動作し、自動的にcedar-14に切り替わることはありません(もちろん手動で切り替えることはできます)。

 実際のところは、C言語で作成したlibファイルを自力でHerokuに組み込むような場合を除き、stackの違いはそれほど大きな意味を持ちませんが、cedarは1年以内にベースOSのサポートが切れることが分かっているので、次のようにして明示的にcedar-14を使用するのも良いと思います。

heroku create -s cedar-14 MyApp

 

コード修正してまたデプロイする

 ここまで自分で書いたコードがまだ1行もないので、少しコード修正してみることにします。

 src/main/java/jp/codezine/sample/heroku/web/HelloServlet.java

をエディタで開いてみてください。これは「Hello world」を出力するだけのごく単純で伝統的なServletです。 コード内にHello worldを出力している部分があるので、その部分を皆さんの名前などに変更して保存してください。

protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
    res.getWriter().print("Hello Shunji!");
}

 修正したら一度ローカルでコンパイルして動作確認をしてみます。

$ mvn package
$ ./run.sh

 変更が反映されていることを確認したら、次は修正内容をgitリポジトリに反映します。

$ git status
$ git add .
$
$ git status
$ git commit -m "Modify message."
$
$ git status

 gitに慣れていない人も多いかもしれませんので、上のコマンドサンプルではリポジトリ操作のコマンドの前後にリポジトリの状態を表示する「git status」コマンドを挟んでいます。

 git statusの出力内容は省略しているので、それぞれのコマンドでリポジトリの状態がどのように変化するかを確認してください。 git status以外のコマンドを簡単に説明すると以下のとおりです。

git add
・引数のファイルをコミット対象リストに追加する。
・引数を「.」とした場合はカレントディレクトリ以下の変更のあるファイルすべてが対象となる。

git commit
・コミット対象リストのファイルをリポジトリに反映する。
・-mはコミットメッセージの指定。

 

 修正内容をgitリポジトリにコミットしたら、再度その内容をherokuに送信します。

$ git push heroku master

 コンパイルが終わったら、再度HerokuアプリケーションのURLにアクセスしてみてください。 今行った修正が反映されているはずです。

 ここまでの流れを整理すると以下のようになります。

  1. コード修正
  2. ローカルでのコンパイルと動作確認
  3. 修正のgitリポジトリへの反映(git commit)
  4. 修正のHerokuへの反映(git push)

 あとはこのサイクルを繰り返すことで、Herokuアプリケーションを開発することができます。

次のページ
Herokuの仕組みを詳細に解説してみる

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Herokuでスタート! はじめてのPaaSアプリケーション開発連載記事一覧

もっと読む

この記事の著者

小西 俊司(コニシ シュンジ)

株式会社Giveryに所属するエンジニア。CODEプロジェクトというエンジニアの成長を促進するプラットフォーム開発のテックリード。Herokuも使った新しいプロダクトを今秋リリース予定。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8187 2014/12/17 20:52

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング