LoginSignup
12
11

More than 5 years have passed since last update.

Play 2.5に入門 ⑤Play関連の知識の幅を広げたい。

Last updated at Posted at 2016-04-29

Playコードの"歴史"に学ぶ

現行のバージョン2.5系は最近出たばかりだが、Play Frameworkは、10年近い歴史を持つ1。そのため、結構凄いプロダクトがplayで作られ公開されていたり、ためになるサンプル実装が作られていたりする。ここでは、Play関連の知識の幅を広げる意味で役立ちそうな、2つのソースコードを取り上げたい。

[1] BaasBox

BaasBoxは、Playで実装されたmBaaS(モバイル向けBaaS)であり、ニフティクラウドブログのオープンソースなmBaaS×9選でも取り上げられている。

サイトを訪問すると、月額課金でクラウド上のBaasBox を使える (の画面が用意されている2)ことが分かる。

スクリーンショット 2016-04-29 13.18.43.png

左はじに"FREE"という文字があるが、こちらは、ダウンロードして自らbaasboxを動かすユーザー向けのもの。ここから、ダウンロードして、baasboxを任意のサーバーで使い始めることができる。

動かしてみる。

github上から、baasboxを直接cloneして、動かすことが出来る。
https://github.com/baasbox/baasbox

注意点は、バージョンがplay 2.2.4に固定されていること。

まずは、公式サイトのダウンロードページの下の方から、play2.2.4のzipをダウンロードして解凍する必要がある。Play2.2系には以下の6つがあって、2.2.6でも動作するかもしれない。

play-2.2.6.zip  Nov 14 2014 107.7M
play-2.2.5.zip  Oct 07 2014 107.7M
play-2.2.4.zip  Jul 21 2014 107.7M
play-2.2.3.zip  May 1 2014  107.7M
play-2.2.2.zip  Mar 1 2014  107.7M
play-2.2.1.zip  Oct 31 2013 104.8M
play-2.2.0.zip  Sep 20 2013 105.5M

解凍後は、playコマンドを用いる(2.5系と異なり、Play2.2ではplayコマンドでplayを操作する)。コマンドの使い方自体は現バージョンとさほど変わらない3)。

ローカル環境で動作させることは簡単。
例えば、解凍したplay2.4.2フォルダのトップに移動して、以下のコマンドを打つだけで良い:

git clone https://github.com/baasbox/baasbox.git
cd baasbox
../play run

実行後のログインの仕方や他のサーバー向けのビルドは、githubページに書かれている。

これでlocal:9000でbaasboxが動作する。さすがに、商用でも提供されているだけのこともあり、baasboxのダッシュボードは本格的だ:

スクリーンショット 2016-04-29 13.35.45.png

気になったところ

① OrientDB

ダッシュボードで気になったのが、"OrientDB"という文字。こちらは、Neo4Jと同様にJVM上で動作するグラフデータベースらしい。

実際、appディレクトリ配下にmodelディレクトリは存在せず、DAOディレクトリのみが存在する。
試しに、app/com/baasbox/dao/UserDao.javaを見てみると、com.orientechnologies.orient.coreという名前空間からのインポートが多数行われている。

UserDao.java
package com.baasbox.dao;

import java.security.InvalidParameterException;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import org.apache.commons.lang3.exception.ExceptionUtils;

import com.baasbox.service.logging.BaasBoxLogger;
import com.baasbox.dao.exception.SqlInjectionException;
import com.baasbox.dao.exception.UserAlreadyExistsException;
import com.baasbox.db.DbHelper;
import com.baasbox.enumerations.DefaultRoles;
import com.baasbox.exception.OpenTransactionException;
import com.baasbox.exception.UserNotFoundException;
import com.baasbox.service.sociallogin.UserInfo;
import com.baasbox.service.storage.BaasBoxPrivateFields;
import com.baasbox.util.QueryParams;
import com.orientechnologies.orient.core.db.record.OIdentifiable;
import com.orientechnologies.orient.core.index.OIndex;
import com.orientechnologies.orient.core.metadata.security.ORole;
import com.orientechnologies.orient.core.metadata.security.OUser;
import com.orientechnologies.orient.core.metadata.security.OUser.STATUSES;
import com.orientechnologies.orient.core.record.impl.ODocument;
import com.tinkerpop.blueprints.impls.orient.OrientGraph;

public class UserDao extends NodeDao  {
...
}

実際に動作するグラフデータベースのコードとして学ぶ価値が有るのかもしれない。

②Swagger

REST APIのドキュメント生成ツールSwaggerも使われている。
SwaggerはJavaベースのツールで、開発チームがplay対応を進めてくれている模様。

参考 SwaggerをPlayに組み込んでAPIドキュメントの自動生成をする:
http://blog.share-wis.com/play-swagger

参考 Swaggerの全般的な資料:
http://www.slideshare.net/takurosasaki/swaggerapi

mBaaSにおけるSwaggerの使われどころには、興味がある。

[2] scalajs-spa-tutorialを試す

お次は、play+scala.jsでSPAアプリを作るチュートリアル。
https://github.com/ochrons/scalajs-spa-tutorial

 SPA(Single-page Application)とは、今後、クロスプラットフォームでブラウザ上での実行が容易という特性から、android/iOS向けのネイティブアプリを超える普及を見せるのではないかと期待されているHTML5+Javascriptアプリのこと。
参考 SPAがネイティブアプリをぶっ壊す:HTML5/Javascriptが変えるWebの未来

react.jsなどのモダンなJSフレームワークで開発されることが多いようだが、AltJSの異端児(?)のscalajsで開発することも出来る。Play Scalaを用いるならば、サーバーもクライアントもscalaで開発できるというわけだ。

もちろん、scalajsがバージョン1.0に達しておらずノウハウも蓄積されていない現時点では、この組み合わせでの実用的なアプリ開発は茨の道。ただ、Scala/Javaな技術者が、SPAを学ぶ教材とはなりうる。

幸い、コードについての丁寧な解説もgit bookとして公開されている。
http://ochrons.github.io/scalajs-spa-tutorial/

play2.5ベースで書かれており、すぐに動作させることができる。

感想

BaasBoxは、本格的なオープンソースであり、中身の実装も意欲的。ソースコードを追いかけながら、android/iOSとの組み合わせを試してみたい。

その他、github上には、いろいろなplayベースのアプリやチュートリアルがコミットされている。必要に応じ、それらをお試ししてみたいところ。


  1. ①で書いたように、10年近くの間、時々の新技術を次々と取り入れているため、バージョン毎のフレームワークの作りとコードの書き方がが結構異なる点は、混乱の元でもあるのだが。 

  2. 現状のBaasBoxには、いろいろとツッコミどころがありそうなため、mBaaSの即戦力として期待している人は注意。。もう少し試すことになったら、このあたりについて書くかも。 

  3. コマンド名が異なるため、play2.5とplay2.2の併存に問題はない。 

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11