Tech Sketch Bucket of Technical Chips by TIS Inc.

Scala/Play2でWebアプリケーション開発~(1)環境構築&デフォルトアプリの解説

Pocket

最近の関数型言語ブームの中で高い生産性と高い品質を兼ね備えた言語であると注目を浴びているのが 「Scala」 です。今回は、このScalaのWebアプリケーションフレームワークである 「Play Framework」 (以下、Play2)について紹介します。

「Scala」はTwitterやLinkedInなどのサービスで利用されており、昨年は日本で初めてScalaに特化した大規模なカンファレンスが開かれたり、様々な情報媒体で取り上げられたりと、ここ1,2年で急激に人気が高まっているのではないでしょうか。

Play2はJVM上で動作し、これまでのJavaで開発するエンタープライズアプリケーションで多く採用されたサーブレットやJSPを使用せず、独自のMVCモデルのアーキテクチャを持っており、スケールアウトしやすい構造になっています。
また、開発者にもフレンドリーだと言われるPlay2がどのようなものかをご紹介します。第1回目は環境構築とデフォルトアプリケーションを紹介し、次回以降は簡単なCRUDアプリケーションの開発方法や、Webアプリケーション、特にエンタープライズアプリケーションの開発における実践的なTipsを紹介していく予定です。

準備に必要なのはJavaとPlayとIDEだけです。IDEとしてはEclipseを使った開発方法を紹介することにします。
マシンスペックによってはレスポンスの遅さは否めませんが、今後改善されていくことを期待して、今回は無償で使えるEclipseを選択しました。

Play2のインストール

インストールするソフトウェアとバージョンは以下の通りです。OSはWindows7を使用します。

ソフトウェアバージョン等
Play22.2.1
Java1.7.0_25
EclipsePleiades All in One 4.3.1/32bit/Full Edition(Java版)

 
「Eclipse」→「Java」→「Play2」の順にインストールします。

(1) Eclipseのインストール

今回はEclipseの日本語化パッケージである「Pleiades All in One」を使用します。執筆時点での最新バージョンである4.3(Kepler)のJava版「Full Edition」を使用することにします。
下記サイトからダウンロードし、任意のディレクトリへ展開します。筆者は「C:\pleiades」となるよう展開しました。
Pleiades - Eclipse プラグイン日本語化プラグイン

(2) Javaのインストール

JavaはJDK6以上が必要ですので、(1)でインストールしたPleiadesに同梱されているJava7を使用することにします。「C:\pleiades\java\7\bin」をパスに追加するだけでOKです。

(3) Play2のインストール

執筆時点での最新バージョン2.2.1を使用しまます。Play2のインストールは、 ダウンロードサイト から取得し任意のディレクトリに展開するだけでOKです。別途Scalaをインストールする必要もありません。
筆者は「C:\pleiades\play\2.2.1」となるよう展開しました。こちらもパスに設定後、「 play 」コマンドが利用できることを確認しておきましょう。

cmd-play.bmp

これだけでPlay2を利用することが出来ます。

プロキシの設定

お使いのインターネット環境がプロキシ経由の場合はプロキシの設定が必要です。「build.bat」に記述されているjavaコマンドに以下のオプションを追加しておきましょう。

build.bat (C:\pleiades\play\2.2.1\framework)

Play2のバージョンを変更する際に毎回追加するのが面倒だという場合は、「 HTTP_PROXY=http://<プロキシホスト名>:<プロキシポート番号> 」を環境変数に追加するだけでもOKです。

Webアプリケーションの作成

では、Webアプリケーションを作成してみましょう。

(1) play new

以下のように「 play new 」コマンドにアプリケーション名を指定し、任意のディレクトリで実行して下さい。コマンドを実行したディレクトリ下にアプリケーションが作成されます。

今回は「C:\pleiades\work」ディレクトリに、「techApp」という名前のアプリケーションを作成します。

cmd-playnew1.bmp

アプリケーション名を確認されますが、このままでOKなのでEnterを押下します。

cmd-playnew2.bmp

ScalaかJavaか、どちらのアプリケーションを作りたいかと聞かれます。「Scala application」を作成しますので「1」を入力し、Enterを押下します。

cmd-playnew3.bmp

以上で、Scalaアプリケーションのテンプレートが作成されました。
作成されたアプリケーションは次のような構成になっています。

(2) play run

早速、動かしてみましょう。
作成したアプリケーションディレクトリ(techApp)へ移動し、「 play run 」コマンドを発行します。

cmd-playrun1.bmp

「Server started」というログが出力されたら起動完了です。

cmd-playrun2.bmp

コンソールに出力されているとおり、9000ポートで起動していますので、以下のURLにアクセスして下さい。

http://localhost:9000/

デフォルトアプリケーションを起動することが出来ました。

welcometoplay.bmp

コマンドプロンプトから「Ctrl+D」を押下するとアプリケーションが停止します。

cmd-ctrld.bmp

Eclipseへのインポート

ソースコードを編集していく前に、作成したアプリケーションをEclipseに取り込んでおきましょう。アプリケーションをEclipseプロジェクトに変換した後に、Eclipseにインポートします。インポート前にEclipseのプラグインをインストールしておきます。

(1) Eclipseプロジェクトへの変換

作成したアプリケーションをEclipseプロジェクトに変換します。
play eclipse 」コマンドでEcipseプロジェクトへの変換することが出来ますが、今回はソースコードを合わせて取得するためPlayコンソールから「 eclipse with-source=true 」を実行します。「 with-source=true 」を付与することで、実行ライブラリだけでなくソースコードを取得し、Eclipse用にパスを設定してくれます。
ただし、かなり時間がかかりますので、お急ぎの場合は「 with-source=true 」オプションは付けずに進めて下さい。Ecilpseへインポート後に再度同コマンドを実行し、Eclipseでリフレッシュを実行することで、ソースコードへのパスを再設定することが出来ます。

play 」コマンドでPlayコンソールを起動します。

cmd-play2.bmp

Playコンソールから「 eclipse with-source=true 」を実行します。

cmd-eclipse.bmp  
Eclipseプロジェクトに必要な以下のファイルが作成されました。

  • .classpath
  • .project
  • .settings

(2) プラグインのインストール

Eclipseを起動し、プロジェクトのインポートの前にScala開発用のプラグイン「ScalaIDE for Eclipse」をインストールしておきましょう。初回起動はEclipseインストールディレクトリ(C:\pleiades\eclipse)の「 eclipse.exe -clean.cmd 」ショートカットから起動します。
「ScalaIDE for Eclipse」はツールバーから「ヘルプ」->「新規ソフトウェアのインストール」を選択し、インストールウィンドウでプラグインサイトのURLを指定して下さい。
URL「ScalaIDE for Eclipse」 のサイトで確認できます。今回はバージョン3.0.1の「Eclipse 3.8/4.2 (Juno) and Eclipse 4.3 (Kepler)」版を使用しますので、以下のURLを指定しました。

http://download.scala-ide.org/sdk/e38/scala210/stable/site

eclipse-scalaide.bmp

インストールが完了したら、再起動を促されます。

(3) Eclipseへのインポート

再起動が完了したら、作成したアプリケーションをインポートします。
また、Eclipseのデフォルト設定ではJava6を使用するようになっていますので、Java7を使用するように変更しておきます。「ウィンドウ」->「設定」から「インストール済みのJRE」と「コンパイラー準拠レベル」の設定を変更します。

「ScalaIDE for Eclipse」プラグインのインストールにより、以下の様な「Scala」パースペクティブが利用できるようになりました。

eclipseplay.bmp

Play2デフォルトアプリ解説

開発環境が整いましたので、Playのデフォルトアプリがどのように動いているか確認しておきましょう。

(1) アプリケーションの流れ

Play2はMVCモデルに則り、「Model」・「View」・「Controller」に加え「routes」と呼ばれる設定ファイルにより構成されます。
以下の図のように「routes」がリクエストURLを「Controller」にマッピングし、呼び出された「Controller」が「View」のテンプレートを表示します。デフォルトアプリでは「Model」は使用しません。

play-flow.bmp

(2) ソースコードの解説

順にソースコードを見て行きましょう。
アプリケーションがアクセス可能なURLはすべて「routes」に定義しています。

・routes (/conf)

「/」のGETリクエストを受けると「controllers.Application.index」が呼び出されます。
controllersパッケージ内にあるApplicationオブジェクトのindexメソッドです。

・[Controller] Application.scala (/app/controllers)

indexメソッドは「Ok()」でHTTPステータスコード「200 OK」を返します。
応答するHTMLは「views.html」パッケージの「index」オブジェクトによって、テンプレート「index.scala.html」※から生成されます。
※テンプレートを「xxx.html.index」の形式で作成しておくと、コンパイル時に「view.html」パッケージ配下に「xxx」オブジェクトが生成されます。

・[View] index.scala.html (/app/views)

「@(message: String)」でindexメソッドから「"Your new application is ready."」というString型のメッセージを変数「message」に受け取ります。「@main(main.scala.html)」と「@play20.welcome(play20/welcome.scala.html※)」を呼び出しています。
※「play20/welcome.scala.html」はPlayのライブラリ(play_2.10.jar)に含まれます。

・[View] main.scala.html (/app/views)

「@(title: String)(content: Html)」で「index.scala.html」から「"Welcome to Play"」というString型のタイトルを変数「title」に、「@play20.welcome(message)」というHTMLコンテントを変数「content」に受け取り、上記のようなHTMLを構成しています。

タグ内で参照しているファイルは「public」フォルダに配置されています。

  • CSS
    • /public/stylesheets/main.css
  • 画像
    • /public/images/favicon.png
  • JavaScript
    • /public/javascript/jquery-1.9.0.min.js

titleとbody部は「index.scala.html」から受け取った「"Welcome to Play"」と「@play20.welcome(message)」をそれぞれ出力しています。

(3) メッセージのカスタマイズ

試しにHTMLのtitleとwelcomeページのメッセージを変更してみましょう。
titleは「index.scala.html」でmain呼び出し時の引数として設定しています。

・[View] index.scala.html (/app/views)

上記の通りmain()の引数を「"ようこそPlayへ"」と修正しました。

welcomeページのメッセージは「Application.scala」で設定しています。

・[View] Application.scala (/app/views)

上記の通りindex()の引数を「"新しいアプリケーションが準備出来ました。"」と修正しました。

もう一度アプリケーションにアクセスするとタイトルとメッセージが日本語化されましたね。
Eclipseの「workspace」配下にプロジェクトをインポートした場合は、インポート先フォルダで「 play run 」コマンドを実行する必要がありますので、注意して下さい。
変更がうまく反映されない場合は、「 play clean 」コマンドを実行後に再確認してみましょう。

welcometoplay-j.bmp  
Play2のデフォルトアプリの流れがわかったところで、次回は今回作った環境をベースに簡単なCRUDアプリケーション作っていきます。

エンジニア採用中!私たちと一緒に働いてみませんか?