FC2ブログ
 
■プロフィール

クリエイトウェーブ

Author:クリエイトウェーブ
開発における、諸々を書いていきたいなと思っています。
mail : info@createwave.jp

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ
■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
Cloud FunctionsでPost通信
Cloud Functionsで外部通信の必要が出てきました。

予め断っておくと、FireBaseのCloud Functionsから外部へアクセスするには、従量制のBlazeプランにする必要があります。
無料のSparkプランや、有料のFlameプランでは使えないのでご注意を!
又Blazeプランでも、Sparkで間に合う範囲までの使い方だと、実質費用はかかりません。

Node.jsでは、どの方法が一般的なのだろうと思ってググったのですが
request(npm install request でnode_modulesへ追加)
request-promise(npm install request-promise でnode_modulesへ追加)
とか出てきて、実際便利です。

ただ、Cloud Functionsで既にrequestとかの命令や変数でアクセスしてる訳だし、requestとかインストールしなくても動くのかなと思いつつ、動かないのでnpm install requestしてしまって、失敗。

なんか今まで作ったプログラムが動かなくなってしまいました。(自分のやり方が悪いだけかもしれませんが・・。 それに入れたばっかの最初は動いてたんですよね)

仕方ないので、 firebase init で構築し直し。 他に方法ないのかなと思ったのですがありました。
まずはGet通信から。 Getは
const https = require('https'); を使い、https命令で行います。

こんな感じです。


こう書いてもいいようです。

次にPOST通信、 一般的なformのPost通信でuser_name という変数に値(この例ではadmin)を入れておくる場合は

こんな感じになります。

json形式で送る例は、割とよく出てくるのですが、普通にformで送りたかったので苦戦した。
'Content-Type':'application/json' を 'Content-Type': 'application/x-www-form-urlencoded' にするだけだし、こんなのすぐ分かれよって気もしますが、私は元々(というか今も)Webエンジニアではないので、こういうところは直ぐピンとこない。

結局海外サイトでヒントをみつけました。
json.stringify ならぬ、querystring.stringify ってのも出てきました。
これは一体なんだ! と思ったのですが、これはぐぐると直ぐ出てきます。

とりあえず無事Cloud FunctionsでPOST通信が出来るようになりました。

カテゴリー:FireBase | TM(0) | CM(0)
祝! FireStore正式版リリース
GoogleがFireStore正式版リリースを発表しました。
FireStoreはFireBase特有のサービスではなく、Google Cloud Platformのものですが、FireBase上でもベータの表示とれてるのかと思ってみたら
firestore.png
の表示が・・

Google先生で翻訳してみたら
---------------------------------------------------------------------
Cloud Firestoreはベータ版ではありません
Cloud Firestoreは現在一般提供されており、サービスレベル契約に含まれています。
---------------------------------------------------------------------
との事のようです。

Webのマニュアルページやら、未だベータマークついたままですが徐々に整理されていくでしょう。
現在開発中のものは、バリバリFireStore使っっていて、制御してるCloud Functionsもそれなりに規模が大きくなってきてるんですができればリリース前に正式版になってほしいなと思っていたので良かったです。

数日前にも書きましたが、もうMySQLやPHPじゃなくて、FireBaseのFireStoreとCloud Functionsで十分と思ってきてるので、今回の正式版リリースは朗報でした。
これからもガンガンFireStore使ってきます!!

カテゴリー:FireBase | TM(0) | CM(0)
FireBaseはPHPとMySQLの代替になるか
去年の4月から約9ヶ月FireBaseの研究&仕事をやってきました。

自分は、SNSゲーム(いわゆるガチャゲー)を担当するときは、PHP(フレームワークはCodeIgniter)とMySQLで仕組みを作ってきました。 

たまにあの作品はサーバープログラムはRubyらしいとか、あの有名な会社はパイソンでやってるとか聞きますが、ゲーム業界全体で考えれば、まだまだPHPとMySQLの組み合わせは多いと思われます。

これをFireBaseでやることは可能かという話・・・

結論先にいうと、もうFireBaseでいいのでは? と思ってきてます。
PHPにあたるサーバーサイドプログラムは、CloudFunction(言語はNodeJS)、MySQLにあたるDBはFireStore(RealTimeDB併用でもいいです)の組み合わせになるのですが、UnityでもWebアプリでも十分使いものになります。

それぞれFireBaseで作るメリットとデメリット考えると

●メリット
・とにかく環境構築が非常に楽
 gmailアカウント一つで、環境が作れます。サーバープログラム書いてデプロイして実行するだけ。

・サーバー環境構築どころかSSL通信やスケーリング含めたインフラ構築の必要がない(全部Google任せ) 
もちろんSSL代もかからない

・テスト環境は、ほぼ費用がかからない(有料版に切り替えても、本サービス開始にならないとまず無料枠を超えることはない)

・ログ書き出しの仕組みとかも便利(SNSゲームとかだと、ログ書き出しの仕組みはちゃんと考えないと、サーバーのHDパンクしてサーバー止まったりするのですが)そういうのも考えなくていい

・総合的に運用費用が非常に安い。
本運用でも通常のシステムより安いと思われる。(※海外で、すごい非効率な組み方してすごい費用になってしまったニュースもあったので、そこは気をつける点・・・)

●デメリット
・良くも悪くも独特
 PHPとMySQLで作っておけば、契約してたクラウド会社がサービスやめても、他のクラウドサービスに乗り換えるだけですがFireBaseはGoogleはサービス辞めるとやりようがないです。。。。
 ただCloudFunctionやFireStoreは、FireBaseというよりGoogleCloudPlatformの仕組みで、サービスが終わるとかは、まずないと思われますが。。。

・エンジニアを探しにくい
 上記の独特にも繋がることですが、普通にサーバーエンジニア募集した場合、PHPやRuby経験者は来ると思いますが、
 NodeJSは中々見つからないでしょう・・
 未だNodeJSはFireBase以外でも使われてる訳で可能性もありますが、DBのほうはMySQL経験者と違ってFireStoreは、Google特有と思われます。

・言語がNodeJS(JavaScript)である(これは、人によりけりで絶対ではありませんが)
 JavaScriptは、プロトタイプ言語といって他言語(だいたいの場合クラス言語)とちがって良くも悪くも癖がつよいです。
 プログラマーでも、JavaScripだけは苦手というプログラマーは意外に多いのです。
 私は、JavaScriptは得意ですが、好きか?と聞かれるとNoと言ってしまいますw・・・

 ちなみにjavascript苦手な人の為にTypeScript(コンパイル結果がjavaScriptになるクラス言語)環境も準備されてます。
 クラス言語しかやったことない人は、TypeScriptのほうがやりやすいでしょう。
 まだベータですが、パイソンでも書けるようになったようです。

FireStoreはまだベータ扱いになってる面はありますが、有料版サービスにも入ってますし、既に実用サービスでも使われてる会社様もあります。
Cronスケジュールや、バックアップの仕組みなども整って先が楽しみなサービスです。
一昨年後半にベータに入ってるので、そろそろベータが取れるのではないかと思っているのですが、やっぱりベータマーク取れたほうが気持ちはいいですよね。

SNSゲームは、ある意味行き詰まってる面がありますが、こういった新しいシステムを導入して、かかる費用や運営効率など見直す時期に来てるのかもしれません。

カテゴリー:FireBase | TM(0) | CM(0)
cloud functionsでFireStore上の複数のドキュメントを読みこむ
あるコレクションに、ドキュメンとが複数あってscoreってフィールドに得点が、userIDってフィールド
にユーザーIDが並んでるとします。
仮にスコア100点の人をクエリで抽出して、抽出した該当userID使って、他の基本情報が書き込んである
コレクションからuserIDを使って、複数人のデータを抽出したい場合どうするんだと、ここ数日悩んで
おりました。
それこそ、10人だったり、100人だったりの可能性もある訳で・・・・

const ref = admin.fireStore.collection('コレクション名');
ref.where("score", "=", 100).get()
.then(querySnapshot => {
   for(let i= 0; i < querySnapshot.docs.length; i++)
   {
      const userId = querySnapshot.docs[i].data().userId;
      // ここでそれぞれDB読み込み?
   }
})
.catch(error => {
   console.log("DBの読み込みに失敗しました");
});

ってな感じで、async/await 使ったほうが良さそうとか思い デフォのV6エンジンだと使えないとかで
cloud functions上では、未だベータのNodeJSをV8エンジンにしてみたり
思考錯誤の連続・・・ 
でも、こういう場合の複数読み込みの命令はforeStoreに準備されてるようです。

その命令とは、
admin.fireStore.getAll

まず、クエリで、スコア100点の該当者を

ってな感じで書いておいて次の処理。
階層深くなると読みにくいので、私の場合、const me = this; で実行してるオブジェクトを参照させて
次のメソッドを呼び出してます。

jsは、こうでもしないとthisのスコープが、変化しまくるのでメソッドが特定出来ないので・・・・
me って変数は、DirectorのLingoで使ってた名残でなんとかく・・(懐かしい

次の処理は

という感じになります。

admin.fireStore.getAll が何故かマニュアルにも見当たらないし、英語音痴な私が海外のサイトとか
見てようやくここまでたどり着きました・・・数日かかった。

「...refArray」の「...」ってなに? と思ったらSpread構文というものらしい。知らなかった


カテゴリー:FireBase | TM(0) | CM(0)
setAutoPaddingの書き方が変わっていた
前にCloud FunctionとUnityで暗号通信やろうとして
Node.jsとUnityで暗号通信
を載せたのですが、そのとき引っかかったのがパディングの設定。
パディングの設定をしなければ、うまくいかなかったのですが、今回仕事で実装しようとしたら・・・あれれれれ

自分はCloud Function(NodeJS)をプログラムするときは、IDEはintellijを使ってるのですが
decipher.setAutoPadding(auto_padding =false);
auto_paddingの部分が赤文字になってるぞ。。。。。   まさかintellijのような超優秀なIDEがミスするわけないし。。。 と思ってたらやっぱり駄目だった・・・

decipher.setAutoPadding(false);
と書くのが正解になったようです・・・
まあ仕様が変わる事はよくあるし、今回の書き方のほうがしっくりくるけど・・・
まあ宿命ですね・・ ちょっとだけ苦戦しました。


カテゴリー:FireBase | TM(0) | CM(0)
次のページ

FC2Ad