Mapsを活用する郵便番号検索システムです。サーバ・サイドのプログラミング言語はJavaとPHPのうち、好きな方を選んで読み進められるようになっています。ウェブアプリを構築できるようになると、こんどはそれを公開したくなるわけですが、本書の想定読者には学生も入っているので、「まずサーバを用意して・・・」のようなコストのかかる方法ではなく、基本無料の公開方法が必要です。Fogが今年いっぱいでサービスを終了し、AppFogに移行するらしいので、それにあわせてAppFogを試します。Fogでは、無料では機能が不十分なMySQLを避けてSQLiteを使いましたが、AppFogのMySQLは容量が100MBあるので、郵便番号検索のためには十分です(逆にSQLiteは使えなくなりました。使えれば、移植作業は楽だったのですが)。Pricing)作業は以下の通りです。Desktopで動作を確認しました。AppFogのアカウントを作る。コマンドラインツールをインストールする。アプリを作成し、そこにMySQLサービスを追加、バインドする(ここ、かなり説明を端折っています)。データベースを準備する。tunnel指示に従うとmysqlコマンドで接続できるようになります。mysqldumpでデータベースをバックアップしておいて、以下のようなコマンドで復元します。ソースコードをアップロードする。{アプリ名}AppFogの流儀にあわせて、MySQLに接続する部分のコードを次のように書き換えておく必要があります(PHPのバージョンが比較的新しいので、接続時に文字コードを設定できます)。$pass);実行結果は下のようになります。Fogは2012年12月にサービスを終了するそうなので、後継サービスであるAppFogを試しました。Mapsを活用する郵便番号検索システムです。サーバ・サイドのプログラミング言語はJavaとPHPのうち、好きな方を選んで読み進められるようになっています。作成したウェブアプリを公開する方法は人によってさまざまでしょうが、PaaSの無料プランを使うのは魅力的な選択肢です。Javaで作成したウェブアプリをHerokuというPaaSの上で動かす方法を以前紹介しました。FogというPaaSの上で動かす方法を紹介します。Fogを使い始めるときに1回だけやればOKです)。詳しくは、Jumpstartsあたりを参照してください。FogではMySQLが使えますが、そのアクセス方法は、拙著で説明したのとは少し違っています。データベースへの接続情報は、環境変数に格納されているので、それを参照しながら接続します。参考までに、データベースに接続するためのコードを書くと、次のようになります。149に掲載されているコードと比較してください。utf8'));しかし、ここではこのコードは使いません。郵便番号データベースを構築するのが面倒だからです。拙著で紹介したように、テーブルを作成して郵便番号データのCSVファイルをインポートすれば郵便番号データベースを構築できるのですが、郵便番号データベースのためのCSVファイルは比較的大きいため、phpMyAdminでインポートしようとするとタイムアウトしてしまうのです。無料で利用できるデータベースサイズが5MBというのもいまいちです。Herokuのときもそうでしたが、無料の範囲内で遊ぼうとすると、データベース周りがいろいろ面倒です。done」として拡張子.csvを付けて、一つずつインポートすれば回避できますが、とても面倒です(Railsに行くのはここではがまんしましょう)。こんなところで苦労するのはいやなので、Herokuの場合と同様に、SQLiteを組み込んで使うことにします。ローカルでの実験のために、PHPからSQLiteを使えるようにしておきましょう。restartデータベースファイル(mydb.sqlite)の作り方はHerokuの場合と同じなので省略します(完成したファイルはここにあります)。このファイルを、zips.phpと同じディレクトリに保存します(接続時にパスを指定するなら、別のディレクトリでもかまいません)。zips.php内のデータベースに接続する部分を次のように修正します。PDO('sqlite:mydb.sqlite');Ajaxによって1文字入力するごとに検索結果を更新するようにしたものは、拙著の中では割愛しましたが(Java版とほとんど同じため)、サポートサイトでは掲載しているので参考にしてください。実行結果は下のようになります。第2版』では、PHPとJavaでウェブアプリを作る方法を解説しています。作ったウェブアプリを公開しようとするとき、PHPのウェブアプリはたいていのレンタルサーバで動くのでいいのですが、Javaのウェブアプリはほとんどのレンタルサーバでは動かないので、自分のサーバを持っていない場合はいろいろ面倒でした。クラウド(IaaS)やVPSの普及によって、Javaのウェブアプリを公開するための経済的なハードルは下がりましたが、「レンタルサーバにファイルをコピーするだけでOK」というPHPに比べると、IaaSやVPSでの「サーバに各種サーバソフトウェアをインストールして・・・」という技術的ハードルはあまり下がりませんでした。最近(と言うほどでもありませんか)、HerokuのようなJavaも使えるクラウド(PaaS)の登場によって、Javaのウェブアプリを公開するための技術的ハードルも、ずいぶん下がってきたような気がします。いうわけで、拙著のJavaのウェブアプリを、できるだけ少ない作業で、クレジットカードを使わずにHerokuに移植する方法を紹介します。作業が必要な理由は以下の通りです。3までを済ませてから先に進んでください。MavenMavenは、記事「『Webアプリケーション構築入門』のウェブアプリをMavenで管理する方法」のように導入できます。Langを追加しておきましょう(この記事の最後に掲載したpom.xmlを参考に)。追記:無料で使えるデータベースには、サイズや行数の制限があるので、郵便番号検索システムのためには別の方法(例:SQLiteを組み込む)を検討した方がいいでしょう。PostgreSQLへの対応は、以前書いた「『Webアプリケーション構築入門』の郵便番号検索でPostgreSQLを使う方法(Javaの場合)」という記事で半分終わっています。JDBCを使えるようにし、データベースへの接続方法をHerokuにあわせれば完了です。Mavenを使っているので、MySQLの場合と同様に、pom.xmlに以下のように記述すればJDBCが使えるようになります。拙著8.2.2項のように、ライブラリを手動で導入する必要はありません。password);組み込みコンテナ拙著では、ウェブアプリのコンテナとしてGlassFishを使っていますが、Herokuでは、組み込みのTomcatやJettyを使います。Runnerを使いましょう。maven-dependency-pluginの部分を次のように書き換えます。</executions></plugin>コンソールで次のように入力し、ビルドします。NetBeans上で、プロジェクト名を右クリック→「構築」としてもかまいません。PostgreSQLのデータベースを「mydb」、パスワードを「pass」と仮定しています。packageローカルでの動作確認ローカルでの動作確認は次のように行います。3.1.2」等にある停止ボタンをクリックして、NetBeans上のGlassFishは止めておきます(あるいはGlassFishとは別のポートを指定する)。JSPがある場合は、JREのjavaではなく、JDKのjavaで実行しなければなりません(PATHの設定を変えるのが正しい方法です)。target/*.warhttp://localhost:8080/HelloServletのようなURLで、ウェブアプリにアクセス出来れば完成です。NetBeansで実行するときもこのコードが動くようにするためには、上記の環境設定(DATABASE_URL)のもと、次のようにしてNetBeansを起動するといいでしょう(NetBeansのバージョンに依存します)。次のような内容でウェブプロセスを定義するファイルProcfileを、pom.xmlがあるディレクトリに作ります。target/*.warGitリポジトリを作成し、プロジェクトをインポートします(NetBeans上で、チーム→Git→初期化、チーム→Git→コミットとしてもかまいません)。deploy"Herokuのアプリを作ります。好きな名前NetBeansで作業する場合は、このときに表示されるGitリポジトリの場所、「git@heroku.com:名前.git」のような文字列が必要になります(Herokuのウェブサイトで確認できるので、記録する必要はありません)。Herokuにプッシュします(NetBeansで、Git→リモート→プッシュとしてもかまいません。Gitリポジトリの場所を指定してください。このあたり、説明が雑で申し訳ないです)。master次のような表示になれば成功です。open」とするとブラウザが起動するので、ウェブアプリが正しく動作することを確認してください。logs」でログを確認するといいでしょう。ps」で確認できます。今の例では、次のような結果になるはずです。web=1」などとしてプロセスを起動してください。Herokuで作成したはずの非公開鍵ファイル(~/.ssh/id_rsa)を指定してください。最後に、この記事のために作成したpom.xmlを掲載しておきます。inquisitor拙著『Webアプリケーション構築入門』では、NetBeansやEclipseといったIDEの上でウェブアプリを開発する方法を紹介しています。IDEを使うので、ビルドプロセスは自動化されているわけですが、必要なライブラリの導入は手動ですし、機械的なテストは導入してもいません(紙面の限られた入門書であるため)。このあたりの欠点を補うためには、いろんなことを学ばなければなりませんが、ビルドやテスト、依存関係管理などを自動化するツールであるMavenを導入することは、その第一歩としてふさわしいものでしょう。ここでは拙著のウェブアプリをMavenで管理する方法を紹介します。NetBeansで新しいプロジェクト(Maven→Webアプリケーション)を作成し、Mavenのためのファイルpom.xmlの、<dependencies>から</dependencies>の間に、以下の要素を追記します。ドライバの追加」に代わるものです。この記述があれば、ライブラリを追加する作業は不要になります。必要な作業はこれだけです。あとは本書の通りにサーブレットやJSPを作ってください。