pry-parsecom作りました
最近お仕事でParseを使っています。parse.comはいわゆるBaaSで、多言語のライブラリやブラウザから使える管理ツールも揃ってて手っ取り早く動くものを公開したいときにはとても便利なんですが*1、運用でデータストアをどうこうしたいときは基本ブラウザ上でデータブラウザを使うしかありません。もしくは、APIを利用して独自のツールを作るか。
まぁデータブラウザもものすごく悪いという感じでもないですが、可能であればコマンドラインで操作したい。rails consoleみたいに。もしくはpry-rails。
ということで作りました。
http://github.com/technohippy/pry-parsecom
$ pry-parsecom [1] pry(main)> login-parse Email for parse.com: andyjpn@gmail.com Password for parse.com: logged in [2] pry(main)> show-applications Email for parse.com: andyjpn@gmail.com Password for parse.com: Name | Using ================ FakeApp | FakeApp2 | (cached at: 2013-11-18 13:59:48 +0900)
起動してログインするとアプリの一覧が見られます。
[3] pry(main)> use-application FakeApp The current app is FakeApp. [4] pry(main)> show-classes Name | Class ===================== Comment | Comment Post | Post _User | Parse::User (cached at: 2013-11-18 13:59:48 +0900) [5] pry(main)> show-schema Post Name | Type ============================ author | pointer<_User> body | string comments | relation<Comment> (cached at: 2013-11-18 13:59:48 +0900)
使用するアプリを選択すればクラスの一覧や、クラスのスキーマも確認できます。
[6] pry(main)> posts = Post.find :all => [--- __type: Post author: __type: Pointer className: _User objectId: ZybBXQEIjI body: Hello comments: <Ralations> ...snip... [7] pry(main)> posts[0].body = 'World' => "World" [8] pry(main)> posts[0].save
use-applicationコマンド実行時にParseのクラスに対応するRubyクラスを定義するので、手間いらずで検索や新規作成・更新・削除いろいろできます。Parseオブジェクトの操作は、合わせて自作したparsecomライブラリを使ってます。
http://github.com/technohippy/parsecom
game_score = GameScore.find_by_id 'Ed1nuqPvcm' game_score.score = 73453 game_score.save
ParseのREST APIを使ってできることは、特殊なのを除いてだいたいできるはず。
game_scores = GameScore.find :where => proc { subquery = subquery_for :Team subquery.where {column(:winPct).gt(0.5)} subquery.key = 'city' column(:hometown).select(subquery) }
使いやすいかどうかは別にして、サブクエリも発行できるライブラリは他にあんまりなさそう。
seans_score = GameScore.new 'score' => 1337, 'playerName' => 'Sean Plott' zerocools_score = GameScore.new 'score' => 1338, 'playerName' => 'ZeroCool' Parse.batch do seans_score.save zerocools_score.save end
バッチリクエストも割と簡単。
[9] pry(main)> logout-parse logged out [10] pry(main)> exit
APIキーをローカルに保存するので、気になる人は終了前にログアウトしておいた方がいいかもしれません。
$ gem install pry-parsecom
で使えるようになります。軽い用途にはわりと便利に使えると思うのでよろしければどうぞ。
http://github.com/technohippy/pry-parsecom
*1:実際にプロダクションで使うととてもとても面倒くさいですが、それはまた別の話