Firebase CrashlyticsとSentryで悩んでみる

React Nativeで開発しているモバイルアプリのモニタリングをどうするかなってところで簡単に調べたのでまとめ。

選択肢としては概ねFirebase CrashlyticsとSentryの2種類。どちらもこれまでモバイルアプリを主戦場としてこなかった僕でも知ってるレベルの有名サービスだ。というわけで実際には同様のサービス、ソフトウェアが他にもあるのは知ってるけどこの二つのどちらにするかを考える。

さて、今回はモバイルアプリといってもReact Nativeで開発しているってのが選択の上で1つのポイントかと思われれる。

というわけで簡単に両者の特徴を。

Firebase Crashlytics

  • 皆さんご存知、Firebaseのエラーモニタリングサービス
  • ネイティブアプリだともはや定番って感じらしい
  • 一方でJSは公式にはサポートしておらず、ラッパーライブラリが必要だったりする。つまりreact-native-firebase使う
  • Firebase使ってる人ならすぐ使える
  • 料金はなんと無料だ。無料プランがあるとかではなく無料プランしかない
  • チーム内に経験者いない
  • Source Mapに未対応

Sentry

  • エラーモニタリングの専業サービス
  • JS、というかReact Nativeを公式にサポートしておりSDKも提供されている
  • もちろん新たに使うにはサインアップが必要
  • 料金は無料プランもあるが、Teamプランで$25/monthとかそのくらい。さらに上位のプランもある。
  • 無料のDeveloperプランとTeamプランで大きく違うのはトランザクション量と追加データ分を前払いできるか、あとは3rd party integrationとMetricsアラートあたり
  • Sentryでいうところのトランザクションってのがどういう単位なのかわからない
  • チーム内に経験者いる(というか2人いるうちの2人ともこちらしか使ったことない)
  • Source MapももちろんOK

どっち使うの?

ぶっちゃけた話、これと言った強い思いがないのも事実。

だからこそ、当初は普段Firebase使ってることもあってCrashlyticsにしようかなーとぼんやり思ってた程度。

だがしかし、無料なのは魅力的なものの公式ではReact Nativeをサポートしてなかったり、チーム内で誰も経験者いなかったりするので今回はひとまずSentryにしようかと考えている。

Sentry自体は定評あるサービスだし、ネガティブなのはTeamプランだとお金かかるくらいしか今のところわかってない。むしろ導入の観点では公式にサポートされていること、手順も用意されている上にその手順自体が簡易かつウィザードも用意されており非常に容易だ。

本当はもっと検討したいところだけどここにあまり時間かけたくもないのでひとまずみんな知ってるSentryを無料プランで入れて様子見して、致命的な問題が発生し、かつそれがCrashlyticsで解決できる場合のみCrashlyticsへと移行しよう。

キャパ不足が発生したらお金払う感じで💰

React Navigationで画面遷移時に再レンダリングする、しかも簡単に

ちょっと悩んだのでメモ。

まず、画面AとBがあってA→BにReact Navigationを使って遷移しているとする。 AにはとあるXという値が表示されていて、変更ボタンを押したらBに遷移してBでXをY変更したらAに戻ってくる、みたいな状況。 そして、Aに戻ってきたときに変更後の値であるYが表示されているってのがやりたかったこと。

ちなみに戻るにはReact NavigationのgoBack()を使おうとしていた。

実際にはこの値はstateなのでそのstateを更新してやればいいはず。今回はreduxを使ってるのでdispatchしてreducerあたりでstoreの値を更新しつつgoBack()するってのも可能かもしれない。 でもなんか面倒だなーと思って、もっと簡単にやる方法がないか調べた結果、こんな感じでできるようになりました。

ちなみにReactフックを使ってる感じです。

親、というか上記で言うところのAの画面に以下のような感じにすればいい。

  useEffect(() => {
    getData()

    const willFocusSubscription = navigation.addListener('focus', () => {
      getData()
    })

    return willFocusSubscription
  }, [])

Bのほうは普通に戻りたいところでnavigation.goBack()するだけ。自分の場合は『変更しました』的なダイアログを出しているのでOKボタンのonPressに書いておいた。

これなにをやっているかというとつまりfocusがあたったら値を取得しなおしてるってだけ。

ComponentDidMountとかでやれそうな気もしたけど、そもそもクラスコンポーネント使ってなかったのとReact Navigationの画面遷移ってのは遷移元のコンポーネントがunmountされているわけではなく、上に重なっているだけのような感じなので無理なんじゃないかと思うけど試してない。

というわけでひとまず解決した。

2021年6月に買った本

2021年6月が終わったので6月に買った本(マンガと小説以外)を晒していきます。

インフラエンジニアの教科書

インフラエンジニアの教科書

  • 作者:佐野裕
  • シーアンドアール研究所
Amazon

これはちょうどKindle版が198円とか爆安になってたときに購入したやつ。よい復習になった。2もあるらしいので読んでみようかと思ってる。

6月上旬に買ってからしばらくして読み終わった本。Webサイトのプロジェクト全体像が把握できるので不慣れな人によい。

これは間違って買った本w いい本ないかなーと漁ってたらKindle版が半額になっていて。とはいえ買うつもりなかったのに間違って買ってしまった。

買うつもりなかったとはいえせっかく買ったので近いうちに読もうと思う。

わかりやすく平易な言葉で書かれてるのですらすら読めるし、とても良い復習になった。最後には機械学習についても簡単に書かれてる。数学のごく基本的な部分を知る・復習するにっはとてもいいと思いました。

この本をいいと言っているのを何回か見かけたので買ってみた。いわゆる自己啓発本

読み始めて数ページでなんとなく自分にはあわない感じがして止まったまま。気が向いたらまた読み進めよう

上でいいと言った「プログラマの数学」と同じ著者によるシリーズ。プログラマの数学が良かったのでこのシリーズも買ってみた。まだ読んでないけど。

このシリーズはどこから読んでもいいらしく、とりあえず微積からでしょーってことで微分の話を。

ところでこの著者の方には約20年くらい前にJavaデザインパターンの本でお世話になった。この本ですが見たことあるい人も多いのでは?

これは単純に趣味方面ですね。

キャンプが好きなんですが、最近ブッシュクラフトに興味が増してて。検定試験みたいなのもあるらしい。

これはジャケ買いならぬタイトル買いです。

なんか面白そうということで購入。でも未読。

最後、これも未読なんですがこの世の仕組みを物理で説明してくれるって面白そうかなって。

さらに僕は文系なんですが、そんな文系の人向けにってことなので易しい内容なのではないかと思って購入。

というわけで2021年6月は以上の9冊でした。

Monthly Serverless Update 202106

f:id:Keisuke69:20210701084133j:plain 2021年6月のサーバーレス関連まとめです。こちらのイベントで取り上げる内容です。

Monthly Serverless Update 2021/05 - connpass

依然としてAWS以外のクラウドにはまだ疎いのでその辺はご容赦ください。

Update 配信のアーカイブが以下で公開されていますのでぜひそちらもどうぞ

www.youtube.com

2021年6月のリリース

いつもどおりタイトルだけで内容がわかるようなものは特にコメントしていません。各クラウドのサービスは大体このあたりを中心に取り上げます。

AWS

今月はパッとした発表はなかった感じ。強いて言うならStepFunctionsのWorkflow Studioかな。

Amazon API Gateway は、REST API を使用した Express ワークフローの同期呼び出しをサポートするようになりました

  • StepFunctionsの同期ExpressワークフローをAPI Gatewayから呼び出せるようになった
  • あれ、これ先月も取り上げた気がするな…

AWS Lambda Extensions がすべての商用リージョンで一般的に利用可能に

AWS Amplify が、Amplify で生成された IAM ロールでの IAM アクセス許可の境界のサポートを発表

Amazon DynamoDB Accelerator (DAX) がアプリケーションと DAX クラスター間、および DAX クラスター内の複数のノード間の転送データの暗号化をサポート

新機能 – AWS Step Functions ワークフロースタジオ – ステートマシンを構築するためのローコードのビジュアルツール | Amazon Web Services ブログ

  • 最初のワークフロー作りの敷居を下げるという意味ではとても良さげ
  • それよりも「ローコード」というワーディングでメッセージし始めたのが個人的には趣深い
  • そういう意味ではサーバーレス、というかLambdaはグルーコード、インテグレーションコードを減らすってのがウリの一つでもあるので「ローコード」と言えるのかもしれない…

AWS SAM が AWS Lambda 向けの機械学習 (ML) 推論テンプレートを提供

AWS Lambda now supports SASL/PLAIN authentication for functions triggered from self-managed Apache Kafka

  • SASL = Simple Authentication and Security Layer
  • プロトコルに認証機能や暗号化を提供するレイヤのことで最近利用してるものが増えてきてる模様(Postfixとか)
  • その中でもPLAINてのは文字通り認証情報を平文でやり取りするものらしい
  • で、今回の発表は自前Kafkaからのトリガーでそれをサポートするよってことらしい

GCP

GCPもあまり大した発表なし。GCPは5月に大規模イベントがあったのも影響しているかもしれない。

Setting request timeout  |  Cloud Run Documentation  |  Google Cloud

Using WebSockets  |  Cloud Run Documentation  |  Google Cloud

Using HTTP/2  |  Cloud Run Documentation  |  Google Cloud

Using gRPC  |  Cloud Run Documentation  |  Google Cloud

  • Web Socket / HTTP2/ gRPC streaminのサポートがGA

The Ruby Runtime  |  Cloud Functions Documentation  |  Google Cloud

  • Rubyの2.6と2.7をサポート

The Firebase Blog: Expanding Crashlytics Support for Apple Platforms

  • Apple SiliconとRosetta 2をサポート
  • つまり、iOSアプリはもちろん、Rosetta2で実行されるx86 macOS アプリとARM macOSアプリがサポートされる
  • あとはパフォーマンス改善も

Azure

Azureも6月はパッとしない。ていうかクラウドベンダーのサーバーレス全般がパッとしない印象。Azureも確か5月に大きなイベントがあった影響かも知れないけど。

Public preview: Identity-based connections in Azure Functions with latest Azure SDK triggers and bindings | Azure の更新情報 | Microsoft Azure

General availability: Azure API Management Premium tier price reduction for incremental purchased units | Azure の更新情報 | Microsoft Azure

  • このリリースで初めて知ったけどAzureのAPI Managementっていくつかのプランに分かれてるのか
  • それぞれサポートされる機能に差分があるみたい
  • 一番ビックリしたのは下から2番めのプラン以上は課金が時間単位ということ

Open source API portal now generally availabile | Azure の更新情報 | Microsoft Azure

その他

Next.js 11, Next.js Live and more: A recap of Next.js Conf Special Edition – Vercel

  • Next.js 11が発表された。Script componentとかが新しいところ
  • Next.js Liveというリアルタイムコラボレーションが可能なプラットフォームも発表(プレビューリリース)

$102M to Continue Building the Next Web, Together – Vercel

  • 去年春の2100万ドル、冬の4000万ドルに続いて今回は1億2000万ドルを調達
  • 日本のポジションもオープンしてるし狙い目かも知れない

Deno Deploy Beta 1 | Deno Blog

  • 最初のベータリリースであるBeta 1をリリース
  • 今後も機能を追加しつつベータリリースを繰り返し、最終的にGAは2021年Q4を狙ってるとのこと

その他ブログなど

Salesforce Functionsがベータ公開、Salesforceプラットフォームでサーバレスを提供 - Publickey

  • Salesforce Functionsという独自のFunctionサービスを提供。データに対して処理する感じだろうけど相性良さそう
  • 対応言語はNode.js/JavaScriptJava、Apex。ApexってのがSalesforceらしい
  • FunctionsだけでなくてPostgreSQL、Redis、kafkaのマネージドサービスも提供されるということでSaaSだけでなくPaaSの性格も強めてきたのかな

CircleCI + Serverless でコンテナ環境を AWS Lambda に自動デプロイ - Qiita

  • Lambdaでコンテナイメージ使うとき用にCircleCIでイメージビルドしてECRへ登録

【開催報告&全資料まとめ&録画公開】Amplify Meetup #03 | Amazon Web Services ブログ

[AWS CDK] API Gatewayのログ出力を有効にしてCloudWatch Logsでログを確認してみた | DevelopersIO

  • API Gatewayのログ出力周りの設定に関してCDKのサンプルコードがある
  • CDKで細かいことやろうとするとサンプルとか少ないのでこういう細かいサンプルは助かる人多いよね

AWS LambdaのJava 8ランタイムがAmazon Correttoへ。OpenJDKから移行するとAWSが発表 - Publickey

  • 移行したくない人向けにOpenJDKを使い続ける設定も用意される模様

AWS ALB vs API Gateway cost

  • APIのエンドポイントをAPI Gatewayで提供する場合とALBで提供する場合のコスト比較
  • HTTPエンドポイントをAPI GatewayではなくてALBで提供することを検討した人もいるのでは?
  • 個人的にはシンプルに提供するならばALBも全然ありだと思ってる
  • ちなみに自分も少し考えている

CloudFront FunctionsはLambda@Edgeより安い。それ本当?! | DevelopersIO

  • CloudFront FunctionとLambda@Edgeのコスト比較
  • このシナリオでは予想外にLambda@Edgeのほうがやすかった模様

Datadog APMで実現するサーバーレスアーキテクチャの分散トレーシング - ZOZO Technologies TECH BLOG

  • ZOZOさんによるDatadog APMを使った分散トレーシング環境の事例
  • 対象システムはAWSみたいなので、その場合にX-Rayと比較してどうなのか気になるところ

Serverless FrameworkがLambda用コンテナを自動でECRにデプロイできるようになってた件

  • Serverless FrameworkがLambda用コンテナをビルドしてECRにプッシュまでするだと!?

Step FunctionsからLambda関数を実行する書き方2つの違い | DevelopersIO

  • 2種類のASLの書き方に関して、違いとか
  • 書き方によってコールバックタスクが書ける/書けないとか引数の渡し方などに違いが

【Node.js/Next.js】Cloud Runで動作する軽量なDockerを構築してみた

  • 非常に軽量なイメージであるDistrolessとマルチステージビルドで軽量化

SAM+TerraformでLambdaの管理を楽にする | DevelopersIO

Jamstackを検討する - ゆーすけべー日記

もしかして App Runner 上 Next.js の SSR で直接 DynamoDB 呼べますか?

  • SSRをやるのにApp Runnerいいよね
  • App RunnerからDynamoDBも(当然)つながる

CloudFront FunctionsでIP制限を試してみた | DevelopersIO

【小ネタ】Lambda関数に画像データを渡す | DevelopersIO

  • base64エンコードしてpayloadに直接入れるて渡すやつ
  • payloadのサイズは最大6MBで、base64エンコードすると少し容量が増えるのでそれ以下ならありかと
  • Lambda FunctionでデコードすることになるけどそのCPU利用が気になるケースはあるのだろうか?

Cloud Runをコマンドやスクリプトを実行するサーバレスジョブ基盤として使う

  • 小さいバッチをCloudRunで

Next.jsとmicroCMSでカップラーメン食べた回数カウンターを作る

  • Next.jsの環境をLambda@EdgeとS3でやってる
©Keisuke Nishitani, 2020   プライバシーポリシー