Play Frameworkの最新版2.1.1で遊んでみた

Play Framework(以下Play)は、JavaとScalaの両言語に対応した、Ruby on Rails(以下Rails)ライクなMVC型フレームワークです。両言語ともJVM上で動作するので、Scala側からJavaライブラリを利用することもできますし、その逆も可能です。

最新版2.1.1が出たようなので、Ubuntuローカル環境で試してみました。

スポンサーリンク

JDKのセットアップから新規プロジェクトの作成まで

Ubunuの場合、デフォルトでは、JDK (Java Development Kit) はインストールされていません。そこで、次の一連のコマンドを実行して、先ずはJVM環境を準備します。

sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java7-installer

続いて、公式サイトのダウンロードコーナーから最新版のPlay Frameworkをダウンロード。このzipファイルを任意の場所に展開します。例えば、/home/hogeに展開する場合は次のようになります。

unzip play-2.1.1.zip -d /home/hoge
 

指定した場所にplay-2.1.1というフォルダができますので、ホームディレクトリの.bashrcや.profile (Ubuntuの場合はこちら) にコマンドパスを通します。

echo "export JAVA_HOME=/usr/lib/jvm/java-7-oracle" >> .profile
echo "export PATH=$PATH:/var/private/play-2.1.1" >> .profile

ここで、いったんログアウト(Ubuntuの場合)して、再ログイン後、新規プロジェクトを作成。

play new MyApps
 
PlayNewProject01

プロジェクト名の再確認。問題なければ、エンターキーを押します。

PlayNewProject02

最後に、使用する言語をScalaにするかJavaにするかを選択します。今回はJavaを選択したいので、2と入力してエンターキーを押します。

ビルトインサーバーの起動

新規作成したプロジェクト内(今回の場合だと/home/hoge/play-2.1.0/MyAppsフォルダ)で、次のコマンドを実行するとビルトインサーバーが立ち上がります。

play run
 

ブラウザからhttp://localhost:9000にアクセスして、こんな画面が表示されたら、取り敢えずインストールは成功です。

PlayWelcome

この辺りは、Railsでrails serverコマンドを実行して、http://localhost:3000にアクセスするのとまったく同じです。Playの場合、はじめてプロジェクトを立ち上げるとき、中間言語へのコンパイル時間がかかってしまいますが、これは初回のみ。以後、ソースコードを変更してブラウザで再読み込みをすれば、Play側が自動でコンパイルしてくれます。

なお、このPlayのビルトインサーバーは、開発用途だけでなく、本番環境でも使えるほど高速(自分でテストしたわけではないが)といわれています。ビルトインサーバーが使用するポート番号はデフォルトで9000ですが、次のコマンドでポート番号を変更(今回の場合は9800へ変更)することも可能です。

play ”run 9800”
 

データベースの設定

Playには、デフォルトでDB「H2」というデータベースが用意されています。これは、メモリ上で動作するデータベースで、特に設定しなくても動作してくれます。ただし、DB「H2」は、記録のすべてをメモリ上に保持するので、PCをシャットダウンすると内容が消えてしまいます。

そこで、conf/application.conf内に記述されているデータベースの基本設定を書き換えておきます。36行目辺りにある次の2行のうち、2行目にあるmemをfileと書き換えると、シャットダウン後もファイル内に記録が残るようになります。

db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play"

なお、お試し段階や開発初期の段階では、DB「H2」でも事足りるかもしれませんが、本番環境に移行するまでには、本格的なデータベースを用意しなければならなくなります。例えば、MySQLを利用したいときは、上記2行をコメントアウト又は削除して、application.conf内に次の2行を追加します。

db.default.driver=com.mysql.jdbc.Driver
db.default.url=”mysql://[ユーザー名]:[パスワード]@[サーバー名]/[データベース名]?characterEncoding=UTF8"

上記のapplication.confファイルの設定を弄る前に、MySQLのアカウントを作っておく必要があります。例えば、サーバー名がlocalhost、データベース名がplayDB、ユーザー名がhoge、パスワードがhogehoge123だとしたら、上記2行目は次のようになります。

db.default.url=”mysql://hoge:hogehoge123@localhost/playDB?characterEncoding=UTF8"

次に、project/Build.scalaファイル中のに、「”mysql” % “mysql-connector-java” % “5.1.24”」という1行を追記(6行目がそれ)します。

val appDependencies = Seq (
// Add your project dependencies here,
javaCore,
javaJdbc,
javaEbean,
”mysql” % "mysql-connector-java” % ”5.1.24”
)

ビルトインサーバーを再起動すれば、MySQLドライバーを自動でインストールしてくれます。つまり、このBuild.scalaファイルがRailsでいうGemファイルの役割を担っているということになります。

テンプレートエンジン用言語としてのScala

実は、以前、これからはScalaだって人に勧められて、Playをインストールして遊ぼうとしたことがありましたが、結局、何もしないまま、ハードディスクの肥やしで終わらせてしまったという苦い思い出があります。

当時は、言語にJavaを選択すると、テンプレートエンジン用言語としてGroovyが使われていて、何だか中途半端な感じ(それならGrailsでいいやという感じ)がして、試してみようという気になれませんでした。しかし、バージョン2.0以降は、Groovyに代わってScalaがテンプレートエンジン用言語となり、好奇心をそそられています。

Scalaは、オブジェクト指向言語と関数型言語の特徴を統合したというマルチパラダイム言語と呼ばれています。壮大な仕様の言語なので、本来は、それなりの学習コストは覚悟しておかなければならないのですが、PlayでJavaを選択した場合、Scalaはあくまでもテンプレートエンジン用言語なので、ユーザーがScalaを完璧にマスターする必要はありません。

テンプレートエンジンについては、好みの問題もあるでしょうし、新しい言語なんて覚えたくないという人もいるでしょう。そういう人には、プラグインを使ってJavaでお馴染みのVelocityなどに変更するという方法もあります。但し、このプラグイン、たぶんまだバージョン2.1には対応していないと思います。

Javaプログラマもそうでない人もとにかく遊んでみよう

いずれにしても、Playという名称のとおり、何かと遊べるフレームワークであるのことは間違いないようです。お仕事のプログラム言語という印象の強いJavaのフレームワークのなかにあって、Railsライクな遊び心があるフレームワークというのは貴重な存在かもしれません。それに、PlayがJSPやサーブレットを必要としないフルスタックのフレームワークだという点も見逃せません。

ただ、バージョンアップのたびに、結構簡単に後方互換性を捨ててしまう傾向があるので、仕事で使う場合はどうなのかなという点や、どちらかというとJavaよりScalaに重点を置いているところは、javaプログラマにとっては微妙なところかもしれません。

それでも、こうした気になる点を補って余りある魅力がPlayにはあります。かえって非Javaプログラマが使うと、いろいろと新しい発見があるかもしれません。遊びのなかから新しいアイデアが生まれるというのことはよくある話です。

【追 記】20140727
Play Frameworkのバージョン2.3.0以降を使用する際は、この記事中のplayコマンドをactivatorコマンドに読み替えてください。詳細については、「ActivatorベースになったPlay Framework 2.3.1のセットアップ」というタイトルで記事をご参照ください。

タイトルとURLをコピーしました