15
Nifty mBaaS & Monacaが 叶えるものぐさ男の夢(と、 苦闘の日々) 薄井 一樹@DMM.com Labo(予定)

Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

Embed Size (px)

Citation preview

Page 1: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

Nifty mBaaS & Monacaが叶えるものぐさ男の夢(と、

苦闘の日々)薄井 一樹@DMM.com Labo(予定)

Page 2: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

略歴• Nifty mBaaS & Monaca 歴半年

• 金融系システムエンジニア(ほぼ管理中心)

• つまらなくて自分探し

• Developers Summit 2015 でニフティクラウドのmobile backend を知る

• 面白い

Page 3: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

今回、やろうとしたこと• Altjs である opal でのmonaca/mbaas アプリ実装

• ruby系のライブラリをmonaca/opalで動かす

• enchant.js のゲームを monaca で動かす

• enchant.js を opal で書き換え実装

• monacaでアクション付きプッシュ通知を送るためのユーザプラグイン実装

Page 4: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

今回、できなかったこと• Altjs である opal でのmonaca/mbaas アプリ実装 → ▲アプリのjavascript api2.0化してから、と思ったらそちらに時間がかかってしまい、monaca/opalは成功したが、実際にopal-jqueryを動かせず目標のniftyサンプルアプリ書き換えができなかった

• ruby系のゲームライブラリをmonaca/opalで動かす→❌時間なし

• enchant.js のゲームを monaca で動かす→⭕これはできた

• enchant.js のゲームを monaca/opal で書き換え実装→❌時間なし

• monacaでアクション付きプッシュ通知を送るためのユーザプラグイン実装→❌プラグイン実装はできたが動作せず

• ほぼ、負け戦

Page 5: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

なので

• 今回は趣旨を変更し、前半は夢を、後半は戦いの記録について語ろうと思います。

• 夢のある報告ができなくてすみません。

Page 6: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

夢は子供と自分で作ったスマホのゲームやること(他にもあるけど)• 子供とスマートフォンでゲームとかしたい!

• モバイル開発→トレーニングとか受けてやってみたが面倒くさい

• iphone は objective C、Android は Java→面倒くさい

• Javaはともかく、objective C ってMacじゃないとできないの?→面倒くさい

• なんか、実装とかひとつの言語でできない?(ものぐさ)

Page 7: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

そこでMonaca• クロスプラットフォーム開発!

• 開発言語はjavascript、WebViewという技術でほぼWebシステムみたいなもん

• サーバサイドでコンパイル通してnativeアプリ作ってくれる、Web上のIDE

• すげえじゃん!

• でも、データは持てないよね、モバイルのフロント側だけでサーバないと色んなゲームはできない→サーバサイド作るの、面倒くさい

• JavaScriptだからnodeとか使えるけど、サーバサイドやりたくない!(ものぐさ)

Page 8: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

そこでNifty mBaaS• mBaaSなら、サーバサイドのDB実装は不要

• ID管理とかもやってくれる。facebook,twitter ID連携もできる。スマホのプッシュ通知とか、できる

• Monaca との親和性が高い。mBaaS登録したらapiキーとpassのみ取得してあまりなんもしなくてもmBaaS使える

• すげえじゃん!

• あーでも、JavaScript って、他の言語に慣れてると使いづらい。特に同期処理とか、関数入れ子になってわかりづらいし、でもやらないと

• AltJSとかあるけど、やっぱり書くならきれいなrubyで書きたい!(わがまま)

Facebook,ユーザコミュニティも盛り上げていきま

しょう

Page 9: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

Opal 使おう• AltJS の Opal は ruby でかける

• コンパイル後の JS は関数をよしなに扱ってくれるし、どうしてもrubyでできない場合はJavascriptも使えます。

• monacaで扱う時の注意点として、CDN版ではなくライブラリから持ってくる事とOpal.load して opal-parser を取り込む事。こうしないと<script type text/ruby>をrubyとして認識して動作してくれない

• では、いよいよゲームづくりに

• あーでもゲームって動いたりするの難しいよね、ライブラリとかないとね→面倒くさい

• なんか、いいゲームライブラリとか、ないすかね(ものぐさ)

ライブラリはCDNではなくダウンロードしてmonaca内に持ってくる、そして、opal-parserをOpal.loadする(他のサンプル

ではやってない)

Page 10: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

enchant.js 使おう• JavaScript動く、ということはjavascriptのライブラリが動くということ

• enchant.js が動く!

• D3.jsとかも動くんでしょうね!試してみたい

• なら、アクション付きプッシュ通知とかもできんの・・・あれ、これはできないんだ。mBaaSは設定はできるけど、使えるのはiOSネイティブ開発のみ→面倒くさい

• アクション付きプッシュ通知もMonacaでやりたい!(夢)→できませんでした

『戦略シミュレーションゲームの作り方』より https://www.shoeisha.co.jp/book/detail/9784798137841 ライブラリのPath変更くらいでしたが しっかりmonacaデバッガでも動きました!! (メモリ食い過ぎたのかクラッシュもしましたが)

Page 11: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

ものぐさ おしまい• これだけ面倒くさいを繰り返したのに、monaca/nifty mbaasでなんとかなってきました。

• できなかったこともあるので、夢が叶うまではあともう少し!

• これからもアシアルさんniftyさんには私のリクエスト(ものぐさ)に応えてほしいと思います。

Page 12: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

引き続き苦闘篇

• 失敗談、および疑問点などの羅列です

Page 13: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

monacaでアクション付きプッシュ通知を送るためのユーザプラグイン実装やってみた(失敗)• 作業を始めた時、久しぶりのpush通知用mbaasがアクセスがなかったため消えていた。mbaasとmonacaとプッシュ環境整えるだけで一手間かかる(自分のミス)

• プラグインはネイティブ開発な上cordova/phonegapの知識も多少必要で、自前で実装は難しく、探してきたライブラリはプラグインとしてはインストールできるものの、そのままでは使えなかった

• 必要な部分を切り出してプラグイン実装は上手くいくが、ncmb のjavascriptのデバイストークン周りでプラグインは動いてもプッシュ通知の受け取りができない模様

• そもそもユーザプラグイン、プッシュ通知共にデバッグがしづらい。ちょっとしたテストでもやはり実機確認が必要なので、10回の試行に2時間以上・・・この場合、itune経由よりdistributionでメールからインストールする方法がおすすめ

• また、なぜかコメント(英語)があるだけでjavascriptが動かない謎の事象も勃発し、時間がどんどんながれていく・・・

• ならば、ncmb の iosのライブラリをプラグイン化したらどうか!という事に着手し始めた時には既にタイムオーバー

必要な部分だけ抽出してプラグインは実装できた

まだ動かない事が分かったが時間がなくなった

Page 14: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

nifty mbaas のJavaScriptSDKに引っかかる(失敗)• JavaScript の Opal 化をする際、比較対象は最新がいいと思い、サンプルアプリを javascript SDK 2.0 対応をしてから、 Opal と比較しようと思ったが、これが甘かった

• SDK記載が統一されメソッドチェーンとなったのは、処理順がみやすくなるのと同期的な処理ができる(特にPromiseチェーンは重要)のはかなり助かる

• 一つ不思議なのは、DataStore オブジェクトだけ、更新時サブセットとインスタンスを生成しており、Userや他のオブジェクトは更新時にインスタンスは1度生成。

• ここで引っかかったが、クリアした後、クエリでサブセットとインスタンスを生成しようとし、そこで再度エラーが出てハマる。DataStoreに対するクエリはサブセットで実行する??それならインスタンス生成後もクエリは実行できておかしくない気もするのだが??

• そもそもthenやerrorでも、上手く拾えないエラーがあり、monacaのデバッグは、デバッガを使ったとしても発見はかなり遅くなる

• 途中でOrigin is not allowed by Access-Control-Allow-Originも発生し結局タイムオーバー

Page 15: Nifty mBaaS & Monacaが叶えるもぐさ男の夢(と、苦闘の日々)

monaca の opal 対応に引っかかる(失敗)

• enchant.js は上手くいったが、Opal は癖がある

• Opal で入手できる情報は大体が rails 周りからの情報、つまりはrubyユーザ主体の情報、 javascript 主体の情報ではないため monacaでは勝手が違う感じがする

• Opal.load をする事で本来 opal-parser は javascript として動作をするが、この手順は rails 側では不要な模様(先行してloadされている?)

• opal 、opal-parser は rails でもjavascript でも使えるようになっているように整備されているようだが、opal-jquery はそもそも ruby で jquery を使えるようにするという趣旨に見えるので、情報が少なく、 opal-jquery そのものの使い方はあったが、使えないという情報は少なかった

• 簡単に進むと思い、一つ一つクリアーしていったら時間がなくなってしまった。なにかあっても、 Opal はそのままアクサングラーブ「``」で囲むとjavascriptで直接実行できるから必要以上にこだわる必要はなかったかもしれない

$(function())を Document.readyに変

えたかった