Play2プラグインのインストールと使用と新規開発Scala+Play 2.0でWebアプリ開発入門(終)(1/3 ページ)

2.0からScalaに対応したWebアプリ開発の人気軽量フレームワーク「Play framework」について解説し、Webアプリの作り方を紹介する入門連載。最終回は、Playを使ったアプリケーションを拡張させる仕組み、プラグインの使い方および開発方法を紹介します。

» 2014年01月28日 18時00分 公開
[中村修太クラスメソッド株式会社]

 前回の記事「Play2+nginx/Akka/WebSocketで高速双方向通信」では、Play framework 2(以下、Play2)アプリとnginxの連携方法やAkka/WebSocketを使い、並列処理や双方向通信を行う方法を紹介しました。

 本連載の最終回となる今回は、Play2アプリを拡張させる仕組み、プラグインの使い方および開発方法を紹介します。

Play2プラグインとは

 Play2では、「プラグイン」(「モジュール」とも呼ばれます)という仕組みを利用して機能を拡張できます。プラグインを使うと、Play2アプリやPlayコンソールに対して機能追加が可能になります。

 Play2アプリをwar化するプラグインやGroovyをテンプレートエンジンとして使えるプラグインなど、さまざまなプラグインが公開されています。

 なお、こういったPlay2用のプラグインは、「Document:Play 2.0 Modules」「Play Modules」で探せます。

「Deadbolt」で試すPlay2プラグインのインストール

 では、Play2プラグインをどのようにすれば使えるのか解説しましょう。

 連載第7回の「Play 2.xからMySQLに接続してAnormでCRUD操作するには」では、Build.scalaのappDependencies(場合によってはplugins.sbt)に記述することで、MySQL用のJDBCドライバを追加しました。

 これと同じように、Play2のプラグインも追加できます。

 例えば、project/Build.scalaファイルに次のような記述をすれば、プラグインをインストールできます。プラグインを追加するには、play.Projectでリポジトリの追加と、appDependenciesでプラグインのバージョンを指定します。

  1. val appDependencies = Seq(
  2. "be.objectify" %% "deadbolt-scala" % "2.1-RC3"
  3. )
  4. val main = play.Project(appName, appVersion, appDependencies).settings(
  5. resolvers += Resolver.url("Objectify Play Repository", url("http://schaloner.github.com/releases/"))(Resolver.ivyStylePatterns),
  6. resolvers += Resolver.url("Objectify Play Repository - snapshots", url("http://schaloner.github.com/snapshots/"))(Resolver.ivyStylePatterns),
  7. resolvers += "typesafe" at "http://repo.typesafe.com/typesafe/repo"
  8. )

 ここでインストールしている「Deadbolt」というプラグインは、コントローラーのメソッドや、ビューにシンプルなAND/OR/NOT形式の文法でアクセス権限を定義し、認証の仕組みを実現できるプラグインです。

 Build.scalaに上記の記述をした後、Playコンソール上でplay reloadコマンドを実行しましょう。その後、dependenciesコマンドを実行すれば、プラグインをインストールできます。

「SecureSocial」でPlay2プラグインをカスタマイズして使ってみる

 実際にPlay2プラグインを使ってみましょう。ここでは、「SecureSocial」というOAuth/OAuth 2/独自認証に対応した認証のためのプラグインを使ってみます。

 このプラグインはいろいろなサービスを使って認証が行え、Twitter/Facebook/Google/LinkedIn/Instagramなどのアカウントを使えます。今回はこのプラグインを使い、Facebookを使った認証を実装してみましょう。

Facebookアプリの登録

 まずは今回の認証に使うためのFacebookアプリを「Facebook Developer」で作成しておきます。

 Facebook Developerのメニューからアプリ→新しいアプリを作成を選択し、Display Name/Namespace/カテゴリを入力してアプリを作成します。

 アプリを作成したら画面左のメニューから設定を選択し、「+Add Platform」ボタンを押します。Webサイトを選択し、サイトURLとMobile Site URLに「http://localhost:9000/」と入力します。

FacebookアプリのWebサイト設定

 登録したアプリのアプリケーションIDとシークレットキーは後で必要になるので覚えておきましょう。

SecureSocialプラグインのインストール

 次に、project/Build.scalaに依存関係の記述をします。下記のように、SecureSocialプラグインのバージョンとリポジトリを設定しましょう。

  1. val appDependencies = Seq("securesocial" %% "securesocial" % "2.1.2")
  2. //Play2.2以降の場合:"securesocial" %% "securesocial" % "master-SNAPSHOT"
  3. val main = play.Project(appName, appVersion, appDependencies).settings(
  4. resolvers += Resolver.url("sbt-plugin-releases", new URL("http://repo.scala-sbt.org/scalasbt/sbt-plugin-releases/"))(Resolver.ivyStylePatterns)
  5. /*
  6. Play2.2以降の場合:
  7. resolvers += Resolver.url("sbt-plugin-snapshots",
  8. new URL("http://repo.scala-sbt.org/scalasbt/sbt-plugin-snapshots/"))(Resolver.ivyStylePatterns))
  9. */

 2014年1月現在、Play 2.1と2.2では設定する内容が違うので注意してください。現状Play 2.2に対応したSecuresocialプラグインは、masterスナップショットから取得します。

 ここまで記述したら、Playコンソールを起動してから設定ファイルを更新し、依存するライブラリをダウンロードしましょう。

$ play



[gyro] $ reload
[gyro] $ dependencies

設定ファイルの追加

 次に、conf/routesにSecuresocial用コントローラーの設定を追加します。

  1. # Login page
  2. GET /login securesocial.controllers.LoginPage.login
  3. GET /logout securesocial.controllers.LoginPage.logout
  4. # User Registration and password handling
  5. GET /signup securesocial.controllers.Registration.startSignUp
  6. POST /signup securesocial.controllers.Registration.handleStartSignUp
  7. GET /signup/:token securesocial.controllers.Registration.signUp(token)
  8. POST /signup/:token securesocial.controllers.Registration.handleSignUp(token)
  9. GET /reset securesocial.controllers.Registration.startResetPassword
  10. POST /reset securesocial.controllers.Registration.handleStartResetPassword
  11. GET /reset/:token securesocial.controllers.Registration.resetPassword(token)
  12. POST /reset/:token securesocial.controllers.Registration.handleResetPassword(token)
  13. GET /password securesocial.controllers.PasswordChange.page
  14. POST /password securesocial.controllers.PasswordChange.handlePasswordChange

 そして、「conf」ディレクトリに「play.plugins」という名前で新しいファイルを作成しましょう。そこでは下記のように、プラグインの実行優先度とクラスを指定します。

  1. 1500:com.typesafe.plugin.CommonsMailerPlugin
  2. 9994:securesocial.core.DefaultAuthenticatorStore
  3. 9995:securesocial.core.DefaultIdGenerator
  4. 9996:securesocial.core.providers.utils.DefaultPasswordValidator
  5. 9997:securesocial.controllers.DefaultTemplatesPlugin
  6. 9998:services.MyUserService ←この後に作成するクラス
  7. #ユーザー名とパスワードを入力させる通常のフォーム
  8. #9999:securesocial.core.providers.utils.BCryptPasswordHasher
  9. #10004:securesocial.core.providers.UsernamePasswordProvider
  10. 10001:securesocial.core.providers.FacebookProvider

 今回はFacebookアカウントを使って認証を行うので、FacebookProvider(優先順位は10001)を使います。

 このように、SecureSocialプラグインはモジュール式アーキテクチャとなっており、任意の組み込みプラグインを使えます。

 「SecureSocialの公式サイト」にあるように、TwitterProviderやGoogleProviderなど、主要なサービスに対応した認証用Providerがあります。

 なお、9998で指定しているクラスは、この後で作成するUserServiceクラスです。

 conf/application.confでは、SecureSocial用設定を記述する「conf」ファイルをincludeします。

include "securesocial.conf"

 confディレクトリにsecuresocial.confを下記内容で記述しましょう。smtpブロックはUsernamePasswordProviderを使う場合にパスワードリマインダで使う際の設定です。

  1. smtp {
  2. host=smtp.gmail.com
  3. #port=25
  4. ssl=true
  5. user="{ユーザー名}"
  6. password="{パスワード}"
  7. from="{メールアドレス}"
  8. }
  9. securesocial {
  10. onLoginGoTo=/
  11. onLogoutGoTo=/login
  12. ssl=false
  13. cookie {
  14. #name=id
  15. #path=/
  16. #domain=some_domain
  17. #httpOnly=true
  18. #idleTimeoutInMinutes=30
  19. #absoluteTimeoutInMinutes=720
  20. }
  21. facebook {
  22.   authorizationUrl="https://graph.facebook.com/oauth/authorize"
  23.   accessTokenUrl="https://graph.facebook.com/oauth/access_token"
  24.   clientId="{アプリケーションID}"
  25.   clientSecret="{シークレットキー}"
  26.   scope=email
  27. }
  28. }

 facebookブロックのclientIdとclientSecretに「Facebookアプリの登録」の章で確認した値を設定しておきます。

       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。