#Playコードの"歴史"に学ぶ
現行のバージョン2.5系は最近出たばかりだが、Play Frameworkは、10年近い歴史を持つ1。そのため、結構凄いプロダクトがplayで作られ公開されていたり、ためになるサンプル実装が作られていたりする。ここでは、Play関連の知識の幅を広げる意味で役立ちそうな、2つのソースコードを取り上げたい。
[1] BaasBox
BaasBoxは、Playで実装されたmBaaS(モバイル向けBaaS)であり、ニフティクラウドブログのオープンソースなmBaaS×9選でも取り上げられている。
サイトを訪問すると、月額課金でクラウド上のBaasBox を使える *(の画面が用意されている2)*ことが分かる。
左はじに"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のダッシュボードは本格的だ:
##気になったところ
###① OrientDB
ダッシュボードで気になったのが、"OrientDB"という文字。こちらは、Neo4Jと同様にJVM上で動作するグラフデータベースらしい。
実際、appディレクトリ配下にmodelディレクトリは存在せず、DAOディレクトリのみが存在する。
試しに、app/com/baasbox/dao/UserDao.javaを見てみると、com.orientechnologies.orient.coreという名前空間からのインポートが多数行われている。
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ベースのアプリやチュートリアルがコミットされている。必要に応じ、それらをお試ししてみたいところ。