fc2ブログ
 
■プロフィール

クリエイトウェーブ

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

■最近の記事
■カテゴリー
■最近のコメント
■月別アーカイブ

■最近のトラックバック
■ブログ内検索

■RSSフィード
■リンク
FireBaseでソーシャルエンジン(ガチャゲー)を作る。どこまでコストを落とせるか
noteに今までのノウハウで
FireBaseでソーシャルエンジン(ガチャゲー)を作る。どこまでコストを落とせるか
を書いてみました。

ブログとNoteを使いわけるか、Noteに移行するか迷ってます。。
まあ、仕事に追われて書けない日も多いのですが、ちょっとした事とかはブログに残しておくと結構後で役に立つ事も多いので、メモ書きとかブログで、ガッツリした内容はnoteがいいのかもしれないですね。

カテゴリー:FireBase | TM(0) | CM(0)
あけましておめでとうございます。
2021年、あけましておめでとうございます。
CWの仕事始めは、1月5日からになります。

去年はコロナで大変な年でしたが、数年ぶりに社員も増えCW再活動開始の年でもありました。
社員増えても、ずっとテレワークなので、Zoom越しにしか顔をあわせてないのですが。。
今年は、更に飛躍を目指します。
新生CWとしてロゴも一新しました。
今年もどうぞ、よろしくお願いします。

logo縦Small



カテゴリー:雑記 | TM(0) | CM(0)
CoCoaPodのUpdateで四苦八苦
アプリにAdmobを入れようとしたのですが、いつのまにか
GoogleMobileAds-v5.3.0.unitypackageから
GoogleMobileAds-v5.4.0.unitypackage
にバージョンがあがってました。

まあ新バージョンがいいだろうと、最新のを入れて組込んでIOSのビルドをかけたら、Unityが書き出したXcodeプロジェクの中にCocoaPodでSDKを自動でXcodeに入れてくれる「xcworkspace」ファイルがないじゃありませんか・・・

もちろん通常の「xcodeproj」ファイルはあるんだけど、AdmobのSDKを入れて「xcworkspace」が出来てないとかあり得るのか?と嫌な予感がして、もう一回Unityで出してみました。
そしたら、Xcodeプロジェクトは出来上がるけど、Unityのコンソールには赤文字エラーで、CoCoaPodで追加できないみたいなエラーが起きてる。。。

なんてこったい・・・CoCoaPod使わなくても、昔のようにXcodeの中にFrameWork追加したり設定かえたりしたら動くんだろうけど、相当な時間コストをかけた苦労が待っているのは容易に想像が・・・・CoCoaPodは捨てられない。なんとかせねば!!と

ターミナルで、書き出されたXcodeプロジェクトのフォルダで
$ pod update
コマンドを打ってみました。

案の定GoogleMobileAdsが追加できないエラーが出てますが、内容をみると
CocoaPodのバージョンが1.8.4だよ 1.9.0にあげてみたいな メッセージが見える。
なるほど、GoogleMobileAdsの最新バージョンは、新しいバージョンのCoCoaPodじゃないと駄目なのだろうと想像できました。

とりあえずCoCoaPodのバージョンあげる方法しらべてターミナルでコマンド実行・・・
$ sudo gem update cocoapods
うまくいかない。エラーが起きます。

CoCoaPodがおかしくなった時の対処法は、ググれば結構みつかるのですが
CoCoaPodアンインストールしたりCoCoaPodの設定ファイルをいじったり・・・
そして再びCoCoaPodインストール

$ sudo gem install cocoapods
コマンド実行

そしたら
ERROR: Error installing cocoapods:
ERROR: Failed to build gem native extension.

エラーじゃあ!!
これはヤバいぞ!! ヤバすぎる!!
CoCoaPodアンインストールしてしまったのに、インストールできない。
FireBaseもよく使ってるのに、このままじゃIOSのビルドが出来ないぞ!!と青ざめる結果に。

そして色々ググって調べたら、同じ症状の人ばかり・・・
解決法は何人か書いてあるのですが、結局CoCoaPodの1.9をあきらめて、1.8.4を指定してインストールしたよというものばかりでした。
つまり、1.9.0からうまく入らないみたいです。

ここで、CoCoaPod1.8.4を入れて、AdmobのSDKも一つ前の5.3.0を入れるか
AdmobのSDKを5.4.0にして、なんとかCoCoaPodのバージョンをあげるか、
の2択を迫られてしまいました。

最新のが使えないの色々まずい気もするので、もう少し上げる努力をしようかと思ったのですが、ここからも一筋縄でいきませんでした。

CoCoaPodは、MacOS上で動いてるRubyでインストールする方法がよくみつかるのですがRubyじゃなく
$ brew instal cocoapods
でインストールしましょう

というのを見つけて、これならいけるのでは?とやってみたら
インストールはされるのですが、途中でエラーが発生してる。
とりあえず、今はCoCoaPod1.10.0なのは、わかりましたが、これは大丈夫なのか? と思ったらやっぱり駄目でした。

海外サイトでRubyのバージョンをあげればうまくいく可能性があるよ!というのをみつ方ので
$ brew uninstal cocoapods
を実行しRubyのUpdateへ

Rubyは2.6.5だったので、2.7にあげました。
これでうまくいくかと思いきや結果は同じ。

このあたりで、下げるか迷いましたが、CoCoaPod1.10.0はBrewなら成功してる人はいる。
もう一回Brewで挑戦。

やはり途中でエラーでうまくいかないのですが
----------------------------
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink bin/xcodeproj
Target /usr/local/bin/xcodeproj
already exists. You may want to remove it:
rm '/usr/local/bin/xcodeproj'

To force the link and overwrite all conflicting files:
brew link --overwrite cocoapods
----------------------------
とエラーメッセージが出ている。Google先生にかけてみたら
----------------------------
リンクを強制し、競合するすべてのファイルを上書きするには:
brew link --overwrite cocoapods
----------------------------
を実行しなさいと書いてあるじゃないですか・・

$ brew link --overwrite cocoapods
$ brew uninstall cocoapods
$ brew install cocoapods

実行でうまくいったあぁぁ。
ちゃんとメッセージは読まないと駄目ですね。。
とりあえず、数時間の戦いでした。

カテゴリー:Unity | TM(0) | CM(0)
FireStoreバックアップ
FireBaseにおいてFireStoreのバックアップを毎日動くように設定するのですが、すっかりやり方を忘れてる&前と微妙に違う気がするのでメモです。
※FireStoreのバックアップは、無料のSparkプランでは不可なので、従量制のBlazeプランにする必要があります。
もっともNode10 になってFunctionsも従量制のBlazeプランにしないと使えなくなってしまいましたが。。。

FireStoreの毎日の定期バックアップを行うには、GCPコンソールで、バックアップ用のバケットを制作し、そこに書き込む権限をもったサービスアカウントを作成します。
そしてFunctionsにバックアップのプログラムを書き、GCPコンソールにある「Cloud Scheduler」で毎日の定刻にそのFunctionsプログラムを叩くのです。

ただ実際にやってみると色々思考錯誤します。
まずは、GCPコンソールにいき、サービスアカウントを作ります。
GCPコンソールには、ブラウザで直接GCPコンソールに行っても良いですがFireBaseのコンソール画面の場合はプロジェクト概要の右にある設定ボタンを押し表示された中から「プロジェクトを設定」を選びます。

backup1.png

「サービスアカウント」を選択すると、表示されたページの右上に「サービス アカウント権限の管理」というリンクがあるので、そのリンク先に飛びましょう。
backUp2.png


GCPコンソールの「IAMと管理」の画面になってると思いますが
左側に並んでるメニューから「サービスアカウント」を選択し「+サービスアカウントを作成」を選択します。
IAM.png


アカウント名は「backup」としました。
サービスアカウント2


次にロールを割り当てます。
Cloud Datastore インポート / エクスポート管理者
Storage オブジェクト管理者
の2つを割り当てます。
サービスアカウント3

サービスアカウントが出来上がって一覧に表示されたら、作ったサービスアカウントの右側の「・」が縦に3つ並んでるボタンを押して鍵を作成を選びます。
鍵を作成

鍵は、P12形式かJson形式か選べますが、Json形式を選んでください。
鍵が作られ、ダウンロードされますので、ダウンロードされた鍵は、firebaseプロジェクトのfunctionsフォルダに格納します。

念の為IAM画面に行って、
Cloud Datastore インポート / エクスポート管理者
Storage オブジェクト管理者
の2つがついているのを確認します。

サービスアカウント4


次は、バックアップ保存先のバケットを作成します。
GCPコンソール左上の「ナビゲーションメニュー」を押します。

ナビゲーションメニュー

表示されたメニュー群から「ストレージ」を選択し、その中の「Storage」を選んだ中から「ブラウザ」を選びます。
ストレージメニュー

画面上部の「バケットを作成」を選びます。
バケット作成

バケットの名前は、
FirebaseのプロジェクトID-firestore-backup
としました。

ロケーションは、FireBaseのFireStoreで使ってるリージョンと同じにしなければなりません。
FireStoreを設定するときにリージョンを設定しますが、だいたいの場合は「asia-northeast1(東京)」を選択してる方が多いと思いますが、その場合はロケーションタイプは
「Resion」 にして 「asia-northeast1(東京)」か
「Multi-region」で「asia」を選ぶかになるようです。
ここを間違えると、バックアップは失敗します。私は 「Resion」 にして 「asia-northeast1(東京)」にしました。
ストレージクラスは、「Standard」にしました。
詳細設定は、省略で大丈夫です。
バケット作成2

Functionのプログラム(Node10)を準備します。

基本は上記ので動くと思いますが、10行目のJsonは、サービスアカウントで作成したfunctionフォルダに入れたjsonファイルを指定します。

38行目は、先程バケット作成したバケットを指定します。
FirebaseのプロジェクトID-firestore-backup で名前をつけたのであれば、そのままで大丈夫なハズ。
Functionをデプロイします。
デプロイ

次は、「Cloud Scheduler」です。
ストレージのバケットを作った時と同じ要領で「ナビゲーションメニュー」の中から「ツール」から「Cloud Scheduler」を選びます。
CloudScheduler.png

画面上部のジョブを作成を選びます。
ジョブを作成

ジョブの作成で名前をつけます。
任意の名前でいいと思いますが、「firestore-backup」としました。
CloudSchedulerPre.png

諸々せていしたのがこれ。
CloudSchedulerAfter.png

設定できたら、右側にある「今すぐ実行」ボタンを押して、実行されるかみてみます。
job2.png

成功と出ても、プログラムの実行が成功しただけでバックアップが成功してるか判らないので、ストレージのバケットを見て成功してるか確認しましょう。
backUp.png

後はバックアップの保管期限を決めます。画面上部のライフサイクルボタンを押します。
自分はバックアップは30日もあれば十分かなと思っているので設定します。
「オブジェクトを削除する」を選びます。
ライフサイクル

年齢を30日に設定して作成します。
年齢って最初わからなかったですが、、まあ言われてみれば年齢30日ですね。たしかに・・
ライフサイクル2

これでおわりです。

カテゴリー:FireBase | TM(0) | CM(0)
Functionsのログがおかしい
Firebaseの管理画面でサーバーログが見れてデバッグしやすいので、FireBaseのサーバープログラム(Functions)は、そこも気に入ってるのですが・・・

ここ最近サーバープログラム(FunctonsのNodeJS)が吐き出すログがおかしいなと思ってました。
console.logで吐き出されるサーバーログは物凄く見にくい・・・なんじゃ!こりゃ!
いったいどうしたんだと

そしたら、FunctionsがNode8からNode10になったせいらしい。
ログマニュアル

Node10からは、Console.logじゃなくlogger.logというものを使うそうです。

しかし、そうはいっても直すのも大変だぁ・・
このままConsole.logつかえないのかと思っていたら
require("firebase-functions/lib/logging/compat");

を追加すれば、console.logも今まで通り使えるよ! と書いてあるではないですか!!
よし! と思ってFunctionsに追加・・・

結果エラー・・・ モジュールがないからnpm installしてねとか出てきます。
どういうこっちゃと悩んでnode_modulesのパスをみたら

require('firebase-functions/lib/logger/compat');
が正解でした。
logging(誤り)
logger(正解)

実行してみます。
おぉ! 今までと同じ見やすいサーバーログになりました。

ありがちですが、公式マニュアルが間違ってるのは、毎度悩まされます。
人が作業してるのでしょうから仕方ない面もあると思いますが、はよ直して!!


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