この記事は、 NTT Communications Advent Calendar 2024 4日目の記事です。
はじめに
この記事はコミュニケーション&アプリケーションサービス部でビジネスdアプリを開発している木村、立木、富田、西谷の共同執筆です。
今回は、NTTコミュニケーションズで提供するモバイルアプリ、「ビジネスdアプリ」のアーキテクチャに焦点を当て、サーバレスサービスをどのように活用しているかを2回にわたって紹介します。
この記事(前編)では、開発背景やサーバレスサービスを活用したアーキテクチャの概要を中心に解説します。後編では、具体的な運用やCI/CDの仕組みに焦点を当てる予定です。
なお、本記事の内容は2024年8月2日にGoogle Cloud Next Tokyo '24で発表した講演をベースに再構築したものです。講演資料はこちら
目次
ビジネスdアプリとは?
「ビジネスdアプリ」は、ドコモのビジネスユーザーを主な対象としたポータルアプリです。
仕事中・プライベートどちらにも使えるお得な特典や、経営層向け・従業員向けに、最新ニュースやオリジナルコンテンツを提供し、業界ごとに役立つ情報をスムーズに取得できます。
また、NTTコミュニケーションズが提供する業務効率化につながるサービス(ビジネスdシリーズ)の無料プラン/無料版をアプリ上で簡単に申し込みができ、本格導入を検討できる仕組みを実現しています。
ビジネスdアプリでは、AndroidとiOSの両方に対応し、どのデバイスでも統一された操作感を提供しています。
これらの機能を、わずか3か月で構築するために工夫したアーキテクチャの詳細をこれからご紹介します。
内製開発の工夫
ビジネスdアプリは、社員を中心としたスクラムでの内製開発となっています。
そこで、主に以下の3つの工夫を取り入れました。
- 開発言語の統一
- 機能で担当割り
- サーバレスサービスの導入
開発言語の統一
全ての層を以下の通りJavaScript系の技術で統一しました。
- フロントエンド: React.js、Vue.js
- バックエンド: Node.js
- モバイルアプリ: React Native
これにより、フロントエンド、バックエンド、モバイルアプリのコードベースを統一し、開発チームの誰もがどの機能も開発できるようにしました。この統一性により、スムーズなコミュニケーションと短期間での開発を進めることができます。 また、React Nativeを採用した理由として、1つのソースからiOS/Androidのアプリを一度に開発できるということもあります。
機能で担当割り
チームメンバーに対して機能単位の担当を割り当て、フロントエンドからバックエンド、モバイルアプリまで同じ担当が一貫して同じ機能の開発をするようにしました(例:ユーザー認証やプッシュ通知など)。これにより、各メンバーがシステム全体を理解しやすくなり、コミュニケーションコストを大幅に減らすことができました。
また、属人化を防ぐため、各種ローテーション、ドキュメント化、API化するなどして全体で共有する工夫を行なっています。
サーバレスサービスの導入
短期間の構築であったため、基本的に開発者はプログラム開発に集中する環境を整える必要がありました。「ビジネスdアプリ」では、その解決策として、Google Cloudのサーバレスサービス、フルマネージメントサービスを全面的に採用し、サーバーの構築や運用にかかる手間を最小限に抑えました。
たとえば、Google App Engine(以下、App Engine)やCloud Firestore(以下、Firestore)を使うことで、オートスケールに対応できます。
ここからはサーバレスサービスの導入について解説します。
サーバレスのメリット
「ビジネスdアプリ」では、Google Cloudのサーバレスサービスを最大限に活用しました。特にメリットを感じたのは以下の4点です。
構築作業の軽減
冗長化やスケーリング設定など、従来なら時間がかかる作業を簡易にできます。たとえばデータベースだと、FirestoreやCloud Spanner(以下、Spanner)を使うことで冗長化やスケーリングなどの対応が不要になり、プログラムに集中できました。運用監視の簡略化
Google Cloudが提供するサーバレスサービスは障害が発生しても自動復旧します。また、Google Cloudが提供するモニタリング機能を活用することで、監視に関わる開発を減らすことができました。EOL(End of Life)検討が不要
他社が多数導入しているサーバレスサービスを採用することで、Google Cloudによる長期的なサービス提供が期待でき、ライフサイクル管理の負担を軽減しました。セキュリティ対策の簡易化
サーバレスサービスのセキュリティ確保はGoogle Cloudが対応しているため、IAMなどの権限管理を適切に行う必要はありますが、システム全体のセキュリティ対策の検討が簡易化できます。
サーバレスサービスを使用する上での工夫
サーバレスサービスには多くのメリットがありますが、注意すべき点もいくつか存在します。これらの点に対して、私たちのチームが工夫した点を紹介します。
デプロイ作業の自動化
サーバレスサービスのデプロイは容易ですが、それでも人手で繰り返しのデプロイを行うと稼働がかかります。そのため、GitHub Actionsを活用したCI/CDパイプラインを構築し、デプロイ作業を完全に自動化しました。エンドツーエンド監視
Google Cloudの障害はGoogle Cloud Service Healthで確認できますが、掲載されるより前に障害が発生している場合があります。そのため、サーバレスサービスの障害の早期検知のためにユーザー操作を疑似することで監視する、エンドツーエンドの監視を定期的に自動実行しています。これにより、ユーザー体験に影響を与える問題を素早く検出し、対応可能にしました。リリースノートの定期的な確認
サーバレスサービスは頻繁にアップデートされます。破壊的なアップデートはもちろん、新機能によって今よりやりやすくなるという場合もあるため、リリースノートを定期的に確認しサービス変更時に迅速に対応する必要があります。セキュリティ監視の実施
セキュリティ対策は基本的にGoogle Cloudが行なっているとはいえ、システム全体のセキュリティを確保するために、ログのチェックなどは開発者が定期的に確認する必要があります。そこで、Cloud Loggingを活用してアラート通知を設定し、問題が発生した際にすぐ対応できる仕組みを整えています。サーバレスサービスに関する学習
サーバレスサービスはWebで公開されている情報が基本的に少ないため、Google Cloudが提供している研修を受講したり、Google Cloudに関する資格取得を社員の目標とすることで、チームメンバー全員が一定の技術水準を確保できるようにしています。
アーキテクチャの概要
本アプリのアーキテクチャでは、以下の技術スタックを採用し、シンプルかつ拡張性のある設計を目指しました。
コンピューティング
通常時の処理はApp Engineを採用し、一時的に高負荷な処理が必要になる場合にはCloud Runを採用しました。
App Engine:Google Cloudが提供する完全マネージド型のサーバレスプラットフォーム。
Cloud Run:コンテナ化されたアプリケーションをデプロイし、オンデマンドでスケーリングを行うサーバレスサービス。利用したリソース分だけ課金されるため、コスト効率も高く、負荷が急増する場面でも柔軟に対応可能です。
ストレージ
- Cloud Storage:オブジェクトストレージとして大容量データの保存をサポートするサービス。本アプリでは、画像、動画、その他の静的ファイルを管理しています。
データ管理
複雑なクエリを必要としない部分にはFirestoreを、複雑なクエリが求められる部分にはSpannerを採用し、それぞれの特性を活かしたデータ管理を実現しました。
Firestore:NoSQLのリアルタイムデータベースで、高速な読み書き性能と高いスケーラビリティを備えています。
Spanner:分散型リレーショナルデータベース(RDBMS)で、グローバル規模の一貫性と高可用性を備えています。
行動分析
Google Analytics:ユーザーの行動データを収集・分析するツール。本アプリでは、クリックイベント等を集計しています。
BigQuery:大規模データを分析するGoogle Cloudのデータウェアハウス。Google AnalyticsからBigQueryにログをシンクさせることで、ユーザーの操作履歴やイベントデータの詳細を分析しています。
それぞれの詳細および説明を割愛した機能については後編で解説しますのでお楽しみに。
終わりに
今回の記事では、ビジネスdアプリの紹介やアーキテクチャの概要、サーバーレスアーキテクチャのメリットについて紹介しました。
2月ごろに公開予定の後編の記事では、大規模なトラフィックを処理するためのアーキテクチャや、行動データ収集に関するアーキテクチャについて、より細かく解説する予定です。
また、現在ビジネスdアプリの開発チームでは、生成AIを活用した開発効率化を検討しております。具体的には、コード生成やテストの自動化、ログ分析の効率化といった分野での応用を検討しており、生成AIを導入することで、開発スピードの向上やチームの負担軽減を目指しています。
まだ模索中の取り組みではありますが、良い成果が得られれば、そちらも後日実際の効果や導入プロセスの詳細をブログ記事として皆さまにお伝えしたいと考えています!
そんなビジネスdアプリは11月29日に新しくタスク管理と社内報の機能をリリースしました!
どちらも基本的なタスク管理(ToDo管理)機能や社内報の機能(グループ内のお知らせ配信・権限設定など)が含まれており、追加の申し込みなしで無料で使うことができます。
その他にも、お得なクーポンや中小企業向けのニュースコンテンツもあるので、もし興味があれば以下のリンク・QRコードからダウンロードしてみてください! ダウンロードリンク
ちなみにタスク管理機能・社内報機能の開発においても、開発の上での改善(デプロイ自動化など)を継続的に実施しているため、機会があれば別記事で紹介できればと思っています。
それでは、明日の記事もお楽しみに!