Shoeisha Technology Media

CodeZine(コードジン)

記事種別から探す

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

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

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2014/10/10 14:00

 前回は、HerokuアカウントのサインアップとHeorku Toolbeltのインストールを行い、Herokuを使用するための環境を整えました。今回はその環境を使用して、実際にHeroku上で動作するアプリケーションを作成し、動かしてみます。

目次

アプリケーションを準備する

 今回作成するのはJava Servletアプリケーションです。ServletコンテナにはHerokuの中の人が作成した「Webapp Runner」を使用します。

 Webapp Runnerは内部的にTomcatを起動するだけのランチャーアプリケーションです。Heroku上で動作させることを前提として作成されており、SessionのMemcached(またはRedis)への置き換えが簡単に行えるようになっています。

 素のTomcatをそのまま使用することもできるのですが、Heroku上でServletアプリケーションを動作させる場合、SessionのMemcached(またはRedis)への置き換えは絶対に必要なのでWebapp Runnerを使用することをお勧めします[1]

[1] Session置き換えの具体的な方法と、それが必要な理由は今後の連載中で詳細に説明します。

 Webapp RunnerはMavenでビルドして実行するタイプのServletコンテナです。新規でWebアプリケーションを作成する場合、本来ならMavenのプロジェクトスケルトンをベースにpom.xmlを記述していくのですが、今回は作成済みのHello worldアプリケーションをコピーして、それをベースにカスタマイズしていくことにします。

 今回作成するWebアプリケーションのベースとなるコードを、筆者のGiHubリポジトリ(https://github.com/shunjikonishi/codezine-sample)に置きました。まず、コマンドラインから以下のようにgit cloneコマンドを実行して、ローカルにリポジトリのクローンを作成してください。GitHubリポジトリ画面の右側にある「HTTPS clone URL」で[Copy to clipboard]ボタンをクリックすると、指定するURLをクリップボードにコピーできます。

$ git clone https://github.com/shunjikonishi/codezine-sample.git -o upstream
Cloning into 'codezine-sample'...
remote: Counting objects: 23, done.
remote: Total 23 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (23/23), done.
Checking connectivity... done.

 

「HTTPS clone URL」の[Copy to clipboard]ボタン
「HTTPS clone URL」の[Copy to clipboard]ボタン

 

 実行に成功するとカレントディレクトリに「codezine-sample」というディレクトリが作成され、そこにリポジトリの内容がコピーされます。

git clone

 git cloneは外部にあるリポジトリを複製するためのコマンドです。-oはリモートリポジトリの参照名を指定するオプションで、省略時には「origin」という参照名が使用されます。

 参照名はoriginのままでもよいのですが、gitでは慣習的に以下の名前が使用されることが多いので、ここではそれにならって「upstream」としています。

 

  • origin 自身の管理するマスターリポジトリ
  • upstream origin以外で自分以外の誰かが管理するマスターリポジトリが存在する場合に使用する参照名

 ここではローカルに複製したリポジトリをGitHubなどの外部リポジトリで管理するという内容は扱いませんが、その場合にはoriginという参照名を使用するとよいでしょう。

 

リポジトリの中身を確認する

 この時点でHerokuに関連する操作はまだ何も行われていませんが、Herokuとgitの関係を理解するために、まずは以下のコマンドを実行してみてください。

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

 git remoteはリモートリポジトリを管理するためのコマンドです。-vオプションを付けて実行することで、リモートリポジトリの詳細な一覧が表示されます。上記の実行結果からは、現時点ではcloneに使用したリポジトリ(upstream)のみが定義されていることがわかります。

 次にリポジトリ内のファイルを見ていきます。現時点でのファイル構成は以下のようになっているはずです。

現時点でのファイル構成
現時点でのファイル構成

 

 Mavenプロジェクトですのでpom.xmlがあり、Javaのソースファイルはsrc以下に次の3つがあらかじめ用意されています。

  • HelloServlet 単純なHello worldのServlet
  • TemplateEngine Mustacheをラップしたテンプレートエンジン
  • FileUtils ファイル読み書きなどのユーティリティクラス

 なお、TemplateEngineは今回使用しません。今後このアプリケーションを作り込んでいく際に使用します。

 .gitディレクトリと.gitignoreファイルはgit関連のファイルです。 .gitがgitリポジトリ本体で、.gitignoreにはgitでのバージョン管理対象外のファイルを記述します。

 README.mdはプロジェクトの説明書き。 run.sh/run.batはMac/Win用の実行ファイルです。

 Procfileとsystem.propertiesの2つはHerokuで使用するファイルですが、これらの説明は後で行います。

 

ローカルで動かしてみる

 Herokuを使う前にまずはこのプロジェクトをローカルでコンパイルして動かしてみます。 mvn packageでコンパイルしてrun.sh(Windowsの場合はrun.bat)で実行してみてください。

$ mvn package
[INFO] Scanning for projects...
...(中略)...
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.513 s
[INFO] Finished at: 2014-09-20T11:56:39+09:00
[INFO] Final Memory: 20M/91M
[INFO] ------------------------------------------------------------------------
$ ./run.sh
Adding Context  for target/heroku-sample
9 20, 2014 12:09:19 午後 org.apache.coyote.AbstractProtocol init
...(略)...

 Webブラウザで http://localhost:5000/ にアクセスすると、Hello worldの文字列が表示されます。


  • LINEで送る
  • このエントリーをはてなブックマークに追加

著者プロフィール

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

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

バックナンバー

連載:Herokuでスタート! はじめてのPaaSアプリケーション開発
All contents copyright © 2005-2018 Shoeisha Co., Ltd. All rights reserved. ver.1.5