リファクタリング&ログ基盤の整備
「モノタロウ」の開発チームが次に取り組んだのはリファクタリングやログ基盤の整備である。リファクタリングの施策としては、大規模フロントエンドのクリーンアーキテクチャ化に挑んだ。
クリーンアーキテクチャとは、ソフトウェアを開発するときに、ソフトウェアの要素の依存関係が複雑化しないよう、階層化して分離する設計思想だ。上図のように、ソフトウェアの要素を機能によって何層かの円上に配置して、要素間の直接的な依存関係は、外側から内側向きだけになるよう設計する。双方向の依存がなくなることで、外側の要素を取り替えたり変更したりしても、内側に影響が及ばなくなる。例えば、青の層を独自フレームワーク、緑の層をフレームワーク用アダプター、赤や黄色の層を業務ロジックとすると、フレームワークと業務ロジックが分離されているために、アダプターを差し替えることで、別のフレームワークへの載せ替えが容易になっているのだ。では、この施策により、どのような結果が得られたのだろうか。
「ソースコードが3000行ほどでユニットテストがない機能に対し、クリーンアーキテクチャ化を行いました。その結果、もともと3000行だったものが1万5000行に増えています。増加したコードの半分はテストコードです。他に増えたのは、図の緑の層にあたるアダプター部分。この結果、テスタビリティやポータビリティがかなり上がりました。今後、独自フレームワークへの依存からも脱却しやすくなるでしょう」
ログ基盤の整備についても金谷氏は解説。「モノタロウ」のWebサイトを支えるシステムは、毎日膨大な量のログを出力しており、その収集・集計には多くの労力が必要となる。システムによっては、1日あたり1億4300万行のログを生成する。grepコマンドのような伝統的なツールでの集計や調査は難しい。複数サーバーをまたぐリクエストの追跡も困難だ。
理想の状態は「ログが1カ所に集まっていること」「鮮度の高いデータを高速検索できること」「ログ同士の関連付けがあること」である。これを実現するため、BigQueryを活用したログ基盤を構築した。
新しいログ基盤の基本的な流れは以下の通りだ。BigQueryの持つ圧倒的なスケーラビリティによって、リアルタイムの各種ログ検索が可能になる。
- FluentdでログをS3などにアップロード
- AWS・GCPのマネージドサービスでログ加工
- BigQueryにログ保存
ログ同士の関連付けも、「AkamaiでリクエストIDを発行」「Upstreamへのリクエスト時に同一IDを渡す」「BigQueryにリクエストIDも保存」という流れで実現している。
「ログ基盤の整備を行ったことで、モダナイゼーション前後のデグレーション確認やレスポンス速度比較、各種APIの利用状況の調査、さらにはコールセンターからの問い合わせに対応したお客さまの行動履歴調査などが非常に容易になりました」
さらに今後は、新しいECプラットフォームへの移行も予定されている。既存のECプラットフォームをモダナイゼーションした結果、保守性や運用性、ポータビリティが向上した。これをベースに、新プラットフォームへの移行準備が整ったのだ。各システム間を疎結合にし、GCPベースのリアルタイムデータ基盤を構築していく予定だという。
「システムをどうモダナイゼーションするか?」は、多くの企業が思い悩むテーマである。15年以上の歴史を持つ「モノタロウ」の事例は、そうした課題に対する「解」として、参考になる良質なノウハウにあふれていた。
お問い合わせ
株式会社MonotaRO