Google App Engine/Java デプロイの動作について調べてみた

Google App Engine/Javaプロジェクトのデプロイ(本番環境への展開)にはGoogle Plugin For Eclipseを使用していますが、デプロイというのが何をしているのか全く分からなかったため、一部ではありますが調べてみることにしました。

 

どうしてデプロイについて調べるつもりになったかというと、プロジェクトにJUnitの導入を検討したことから始まります。Google Developersの「Local Unit Testing for Java」によれば

avoid deploying JUnit and other testing packages with your application.

と、どうやら「JUnitとテスト関連のファイルをデプロイするな」と言っているようです。するなと言われても特定のファイルをデプロイしないってのはどうしたらいいのかがわからず、困ってしまいました。もしや設定画面からデプロイ対象外ファイルを選択するような項目があるのでは、と探してみましたがそういった項目はありませんでした。

 

そこで、そもそもGoogle Plugin For Eclipseが何をしているかを調べるために「Using the Google Plugin for Eclipse」を見てみると、以下のことがわかってきました。

  • Google Plugin For Eclipseは、プロジェクトのビルド時に/srcディレクトリの中身をコンパイルして/war/WEB-INF/classesディレクトリに格納する。(ちなみに、/war/WEB-INF/classesはEclipse上では表示されないが、ワークスペースを直接開くと見える。)
  • Google Plugin For Eclipseは、デプロイ時には/warディレクトリの中身を本番環境にアップする。

これらから、JUnitとテスト関連のファイルを/srcディレクトリ内に置かず、別ディレクトリに分離しておけば本番環境へのデプロイはされないのだろうと考えられます。

何故/war/WEB-INF/classesがEclipse上から見えなかったのかはわかりませんが、このディレクトリが表示されないことで今までコンパイル済みのファイルが目に触れる機会がなく、Eclipseやプラグインは一体何をビルドしデプロイしているのか、が理解し辛かったように思います。

 

調べていて薄々感じましたが、どうやらこれはGoogle App Engineの仕様というよりは一般的なWebアプリケーション全般?に共通する内容なのかも、とも思っています。今までにWebアプリを管理した経験がほとんどなくGoogle App Engine/Javaが初めてと言ってもいい状況なので、どこまでがGoogle App Engineの仕様で、どこまでがWebアプリ全般の仕様なのか切り分けが難しいことがあります。

便利なツールが増え、表面的な理解のままサービスを利用することもできるようになっていますがやはり基礎の理解も必要だな、と感じています。