前回の『ScalaのWebアプリケーションフレームワーク「Play Framework」入門~(1)環境構築とスタートアップアプリの作成』ではPlay2の環境構築方法とスタートアップアプリについて紹介しました。この環境を元にデータベース(以下、DB)にCRUD操作を行う簡単なWebアプリケーションを作る方法を、2回にわたってステップ・バイ・ステップで紹介していきます。作成するアプリケーションは「イベントの情報」を登録・検索・更新・削除する「イベント管理アプリ」です。
DBはすぐに使えるH2Database(以下、H2)を利用し、DBへのアクセスはSlickを利用することにします。事前準備としてライブラリのバージョンアップとDBスキーマの生成やH2とSlickを使うための設定を行った後、今回は「C:登録機能」を作成し、次回に「R:参照機能」、「U:更新機能」、「D:削除機能」を順に作成していきます。
開発前の準備
(1)ライブラリのバージョンアップ
執筆時点ではPlay2の最新バージョンは「2.3.0」なので、前回構築した環境をバージョン「2.3.0」で再構築しておくことにします。今回利用するライブラリのバージョンは次のとおりです。
ライブラリ | バージョン |
---|---|
Scala | 2.11.1 |
Play2 | 2.3.0 |
Slick | 2.1.0-M2 |
Bootstrap | 3.1.1 |
Play2は「2.3.0」から環境構築方法が少し変わります。前回記事で紹介したように、以前のバージョンでは「play new」などのPlayコマンドでアプリケーションの環境を構築しましたが、本バージョンからPlay2は「Typesafe Activator」とセットで提供されるようになりActivatorコマンドを利用することになります。基本的な流れは同じなので簡単に紹介します。
ダウンロードサイトからZipファイル「typesafe-activator-1.2.2-minimal.zip」をダウンロードし、任意のディレクトリに展開します。筆者は「C:\pleiades\activator\activator-1.2.2」としました。Activatorコマンドを利用できるように展開したディレクトリを環境変数の「Path」に追加しておきます。
アプリケーションの作成は「activator new <アプリケーション名> <テンプレート名>」で行います。Typesafe Activatorには100種類以上のテンプレートが提供されており、作成するアプリケーションによって最も適したテンプレートを選択することができます。提供されているテンプレートは「TYPESAFE ACTIVATOR/TEMPLATES」で参照でき、コントリビュートすることも可能です。また、「activator new」コマンドで対話型でアプリケーション名などを指定することや、「activator ui」コマンドを使用してWebブラウザからテンプレートの選択などを行いアプリケーションを作成することもできます。
今回は、ScalaでPlay2を用いたシンプルなアプリケーションを構築するため、「play-scala」というテンプレートを使用し、「activator new techApp play-scala」を実行します。プロキシ環境下で利用する場合は、ユーザディレクトリの「.activator」ディレクトリ配下に、次のような「activatorconfig.txt」を作成しておきましょう。
activatorconfig.txt(C:\Users\<ユーザ名>\.activator)
-Dhttp.proxyHost=<プロキシホスト名> -Dhttp.proxyPort=<プロキシポート番号> -Dhttp.nonProxyHosts="<プロキシ除外ホスト名>"
Eclipseプロジェクトへの変換は「activator eclipse」、アプリケーションの実行は「activator run」をプロジェクトディレクトリで実行します。「activator」を実行するとActivatorのコンソール画面が起動し、さらに「help」コマンドを実行することでコンソール上で実行可能なコマンドを確認することができます。
Play2に伴いScalaのバージョンも「2.11.1」にバージョンアップしました。前回記事ではEclipseに「2.10」向けのプラグイン「ScalaIDE for Eclipse」をインストールしましたので、以下のプラグインサイトを使用し、「2.11」版にアップデートしておきましょう。
(2)Slickライブラリの設定
Play2のビルドは「sbt」で行われますので、ライブラリを使用するにはsbtのビルドスクリプトに依存関係を定義する必要があります。Slickを利用するため、プロジェクト直下にある「build.sbt」を編集し、依存関係を定義します。DBアクセスライブラリとして、デフォルトでは「Anorm」が定義されていますのでSlick("com.typesafe.slick" %% "slick" % "<バージョン>")に変更しておきましょう。
build.sbt
name := """techApp""" version := "1.0-SNAPSHOT" lazy val root = (project in file(".")).enablePlugins(PlayScala) scalaVersion := "2.11.1" libraryDependencies ++= Seq( jdbc, "com.typesafe.slick" %% "slick" % "2.1.0-M2", cache, ws )
執筆時点のSlickの最新バージョンである「2.0.2」はScalaの「2.11」に対応しておりませんので、Latest Milestoneの「2.1.0-M2」を使用します。「libraryDependencies」にSlickへの依存設定を行いました。依存設定は「グループ名」%「アーティファクト名」%「リビジョン」の形式で設定します。「グループ名」%%「アーティファクト名」%「リビジョン」のように「グループ名」の後ろに「%」を2つ重ねるとアーティファクト名にScalaのバージョンが自動的に補完されます。今回使用しているScalaのバージョンは2.11.1なので、ダウンロードするSlickのアーティファクト名は「slick_2.11」です。sbtへのライブラリの設定が完了後、「activator」コマンドでコンソールを起動し、「eclipse source-with=true」を実行し、Eclipseのクラスパスファイル「.classpath」を再生成します。
(3)Eclipseプラグインのインストール
今回利用するH2の起動・停止を行うためにEclipseのプラグインである「DBLauncher」をインストールしておきます(直接コマンドから起動する場合や、異なるツールで行う場合は、本プラグインのインストールは必要はありません)。「ヘルプ」->「ソフトウェアのインストール」を選択し「インストール」ウィンドウを表示します。作業対象に「 http://eclipse.seasar.org/updates/3.2/」を入力し、表示された一覧から「DBLauncher」を選択します。「次へ」を押下し、流れに沿ってインストール作業を完了させてください。
次にEclipseからH2を利用するための設定を行います。H2のDBファイルを配備する任意のディレクトリを作成します。筆者はプロジェクト直下(techApp配下)に「data」というディレクトリを作成しました。続いて、プロジェクトのプロパティ(プロジェクトを右クリック->「プロパティ」を選択)からDBLauncherの設定をします。「H2データベースを使用」をチェックし、ベース・ディレクトリに先ほど作成したデータファイル配備用ディレクトリ(/techApp/data)を指定してください。
インストールが完了したら、プラグインが利用できることを確認しておきましょう。パッケージ・エクスプローラーでプロジェクトを右クリックすると「H2」というメニューが追加されていますので、「H2サーバの起動」を選択するとH2が起動されます(「H2サーバの停止」で停止することができます)。
(4)DBスキーマの作成
「イベント管理アプリ」で使用するDBスキーマを作成します。「イベント管理アプリ」で必要なテーブルは「EVENT」テーブルのみです。パッケージ・エクスプローラーでプロジェクトを右クリック、「H2」->「データベース・マネージャーの表示」の順に選択すると、Webブラウザ上でH2に対してSQLを実行することができます。以下のスクリプトを実行し「TECHAPP」スキーマと「EVENT」テーブルを作成しましょう。
DDLスクリプト
CREATE SCHEMA TECHAPP; CREATE TABLE TECHAPP.EVENT ( ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, EVENT_ID VARCHAR(100) NOT NULL, EVENT_NM VARCHAR(100) NOT NULL );
(5)DBへの接続設定
DBへの接続設定は「application.conf」に行います。「Database configuration」欄にDBへの設定がコメントアウトされていますので、有効にし以下のように設定してください。
application.conf(/conf)
# Database configuration # ~~~~~ # You can declare as many datasources as you want. # By convention, the default datasource is named `default` # db.default.driver=org.h2.Driver db.default.url="jdbc:h2:tcp://localhost:9092/demo;SCHEMA=TECHAPP" db.default.user=sa db.default.password=""
先ほど作成したH2の「TECHAPP」スキーマへ接続するように設定します。JDBCドライバーに「org.h2.Driver」、DB接続URLには「jdbc:h2:tcp://localhost:9092/demo;SCHEMA=TECHAPP」を指定し、ユーザは「sa」、パスワードは「なし」とします。