
こんにちは!代表取締役 兼 AIサービス開発室の鈴木生雄です。
前回の記事では、In-App Purchaseによるアプリ内課金を紹介しました。今回は、システム構成の話の締めくくりとして「オブザーバビリティ」を取り上げます。App Storeで公開した後のアプリをどうやって見守るのか、Shoelogに導入したSentryというサービスとあわせて紹介します。
連載第1回でも触れたとおり、この領域は今回の開発で私が特に気を遣ったところです。機能を作って公開したら終わり、ではなく、公開してからが本番。そういう思いで取り組んだ部分なので、少し熱を込めてお話しします。
公開後のアプリは「見えない」
開発中のアプリであれば、開発者はIDEであるXcodeのデバッガーやコンソールを使用して、不具合の発生箇所を確認できます。手元で動いているのですから、何が起きているかは隅々まで観察できます。
一方、App Storeで公開したアプリは、多数の利用者の端末上で動作します。開発者が利用者の端末を直接操作して不具合を再現できるとは限りません。また、端末の機種、OSのバージョン、通信状態、入力内容などの違いによって、開発環境では発生しなかった問題が発生することもあります。
つまり、公開した瞬間から、アプリは開発者にとって「見えない場所」で動き始めるのです。利用者から「なんかアプリが落ちるんだけど」と言われても、手元で再現できなければ調査のしようがありません。そもそも、多くの利用者は不具合に遭遇しても報告などしてくれず、黙ってアプリを削除するだけです。
このため公開後のモバイルアプリには、アプリの外部から内部の状態を把握できるようにする、オブザーバビリティ(可観測性)の仕組みが必要となります。こうした問題意識に基づき、Shoelogでは、Sentryをオブザーバビリティ基盤として導入しました。
Sentryとは
Sentryは、アプリで発生したクラッシュやエラーを収集し、発生回数、端末環境、スタックトレースおよび付加情報を管理画面上で確認できる、オブザーバビリティを提供するサービスの一つです。
ShoelogではSentry SDKをアプリへ組み込み、クラッシュ、処理エラー、パフォーマンス情報およびエラー発生時の画面状態を収集しています。収集した情報は、Sentryのダッシュボード等の管理画面で確認できます。

利用者の端末で何か問題が起きれば、その情報が自動的にSentryへ送られ、私はダッシュボードを開くだけで状況を把握できます。「見えない場所」で動くアプリに、目と耳を付けてやるイメージです。
ただ入れるだけでは足りない:エラーに文脈を持たせる
SDKを組み込めばクラッシュは自動で収集されますが、それだけでは「どこで落ちたか」は分かっても「何をしていて落ちたか」までは分かりません。そこでShoelogでは、エラーに文脈を持たせるための工夫を2つ入れています。
1つ目は、操作名と対象データの明示です。Shoelogアプリは、ログイン、靴の登録、着用記録の保存、写真のアップロード、課金処理およびSupabaseへの問い合わせなど、主要な処理で発生したエラーを、操作名や対象データの識別子を明示して送信します。そうすることによって、たとえば同じ通信エラーであっても、どの機能の実行中に発生したかを絞り込めます。
2つ目は、パンくずリスト(Breadcrumbs)です。エラー発生前にどの画面や処理を経由したかをBreadcrumbsとして記録し、再現手順の推定に役立てています。

不具合調査で一番苦労するのは、再現手順の特定です。「この画面を開いて、これを操作した後にエラーが起きた」という足取りが残っていれば、手元で再現させて原因を突き止めるまでの時間が大きく短縮できます。
趣味アプリでも、監視は「おもてなし」
ここまでお読みいただいて、「個人の趣味アプリに、そこまでやる?」と思われた方もいるかもしれません。
しかし、立場を変えてみてください。利用者にとっては、そのアプリが趣味の産物か企業の製品かは関係ありません。大切な記録を預けているアプリが不具合だらけで、しかも一向に直らないとしたら、使い続けてはもらえないでしょう。不具合の報告を待つのではなく、こちらから先回りして気づき、直す。オブザーバビリティは、利用者への「おもてなし」の仕組みでもあると私は考えています。
また、当社が業務で手掛けるシステム開発においても、「作って納めて終わり」ではなく「運用し続けられる仕組みまで含めて設計する」ことの重要性は年々増しています。趣味アプリとはいえ、公開・運用まで一人で経験してみたことで、この点を改めて実感できたのは大きな収穫でした。
次回予告
さて、システム構成の話は今回で一区切りです。次回からはいよいよ本連載の本丸、「コーディングエージェントを組み込んだ開発方法」に入ります。まず前編として、Xcodeに搭載されたAgents機能、ClaudeとCodexの使い分け、画面デザインに使ったClaude Designなど、開発を支えた道具立てを紹介する予定です。お楽しみに!
