アプリケーションを準備する
今回作成するのは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.
実行に成功するとカレントディレクトリに「codezine-sample」というディレクトリが作成され、そこにリポジトリの内容がコピーされます。
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の文字列が表示されます。