エアークローゼットを支えるシステムの10年とこれから
みなさまこんにちは!エアークローゼットでCTOを務めております、辻です。
2015年のサービス開始から、早いもので10年が経ちました。立ち上げ当初から想定を大きく超える反響をいただき、多くのお客様にご利用いただけるサービスへと成長しました。この急成長を支え続けてきたシステムも、ビジネスと共に大きく進化を遂げています。
本日は、この10年間の技術的な歩みを振り返りながら、私たちがどのように「循環型物流」という独自のビジネスモデルを支えるシステムを進化させてきたか、そして今後どこへ向かおうとしているのかをお話しさせていただきます。
循環型ビジネスがもたらした独自の技術課題
エアークローゼットのビジネスモデルは、一般的なECサイトとは根本的に異なります。商品を売って終わりではなく、「レンタル→返却→クリーニング→再度レンタル」という循環が生まれます。この循環型物流は、既存のECプラットフォームでは実現できない、独自のシステム開発が必要でした。
個品管理という特殊性
通常のECでは商品をSKU単位で管理すれば十分ですが、私たちは同じ商品でも「この特定の一着」がいま誰の手元にあり、どういう状態なのかを追跡する必要があります。倉庫にあるのか、配送中なのか、お客様の手元にあるのか、返送中なのか、クリーニング中なのか。一着一着に固有のIDを振り、その状態遷移を管理することが、システムの根幹となりました。
複雑な業務フローの実装
さらに、単なる物流システムではなく、プロのスタイリストがお客様一人ひとりの好みや体型、利用シーンに合わせてコーディネートを選ぶという、ファッションビジネスならではの要素も組み込む必要がありました。スタイリングのロジック、在庫の引き当て、配送の最適化など、すべてが密接に連携する必要があります。
10年間の技術的な進化の軌跡
第1期(2015-2017):爆発的成長との戦い
2015年のサービス開始は、今でも忘れられない衝撃的な体験でした。当初は外部開発によるRailsシステムでスタートしましたが、想定を大きく超える2万5千人もの登録があり、システムは完全にダウン。このピンチを機に、わずか10日間でシステムを作り直すことを決断しました。
そして最初の1年で、Node.jsベースの内製システムへと完全に移行。この時点では、顧客向けシステム、社内向け管理システム、倉庫連携や月額課金など裏でスケジュール実行されるバッチシステムという一般的な構成でした。当時はNode.jsもまだ新しい技術で、エンタープライズでの採用事例も限られていましたが、リアルタイムな在庫管理や注文処理に、JavaScriptの非同期処理が適していると判断しました。結果として、この選択は正解でした。
第2期(2018-2020):戦略なき細分化への挑戦と反省
ビジネスの急成長に伴い、既存の責務分割をさらに細かく分けていく時期でした。社内向け管理システムからスタイリングシステムを独立させ、バッチシステムから倉庫連携システムを分離し、アイテム管理システムも独立したアプリケーションとして切り出しました。
しかし、この分割には一貫性がありませんでした。一部のシステムは独自のデータベースを持ち、一部のシステムは共通のデータベースを使い続けるという、中途半端な状態になってしまったのです。当時は「システムは責務で分けることが大事」と考えていましたが、将来的な構想が甘いまま進めてしまい、アーキテクチャ全体の統一性を失ってしまいました。
今振り返ると、分割しなくてもよかったもの、むしろ分割したことで複雑性が増してしまったものも多々あります。この時期の経験から学んだのは、「分割すること自体が目的になってはいけない」ということ、そして「アーキテクチャには一貫性が必要」ということでした。
第3期(2021-2023):理想のアーキテクチャを求めて
細分化されたシステムが10を超えるアプリケーションになると、一貫性のない構成の問題が顕在化しました。独自データベースを持つシステムと共通データベースを使うシステムが混在し、データの整合性をどう保つのか、トランザクションの境界をどこに置くのか、といった根本的な問題に直面しました。
さらに、サービス間の同期的なAPI呼び出しにより、一つの障害が連鎖的に波及する。過度な分割により、かえって運用の複雑性が増してしまう。アーキテクチャの一貫性がないため、新しいエンジニアが全体像を理解するのも困難になっていました。
これらの問題に直面し、私たちは根本的な解決策を模索しました。そして2022年頃、「イベント駆動アーキテクチャこそが理想のシステムである」という結論に至りました。(この考えに至った詳細は2022年の記事でも紹介しています)
イベント駆動では、各システムが自律的に動作し、必要な情報はイベントを通じて非同期に連携します。これにより、システム間の依存関係を最小限に抑え、障害の影響範囲を限定できる。過去の失敗から学んだ教訓を活かし、より堅牢で柔軟なアーキテクチャへの移行を開始しました。
第4期(2024-2025):イベント駆動への挑戦と成果
従来のAPI駆動では、注文システムが倉庫システムに直接「発送を指示」していましたが、イベント駆動では注文システムは「注文が入った」というイベントを発火するだけ。倉庫システムはそのイベントを観測して、自律的に処理を行います。
この変更により、システム間の疎結合を実現し、障害の影響範囲を限定できるようになりました。また、新しいサービスの追加も容易になり、ビジネスの柔軟性が大幅に向上しました。
実際、2024年にはこのイベント駆動基盤を活用して、ドレスレンタルサービス「airCloset Dress」をわずか3ヶ月でローンチすることができました。従来の開発手法と比べて約20%のリソースで、会員登録、カート、注文、アイテム管理、倉庫連携など、レンタルサービスに必要な全機能を実装できたのです。これは、共通基盤がイベント駆動で疎結合に設計されていたからこそ実現できた成果でした。(詳細はこちらの記事で紹介しています)
技術選択に対する考え方
「最強のアーキテクチャは存在しない」
10年間のシステム開発を通じて学んだ最も重要なことは、「最強のアーキテクチャは存在しない」ということです。サービスの特性、チームの能力、ビジネスの要求によって、最適なアーキテクチャは変わります。
私たちの場合、循環型物流という特殊なビジネスモデルに合わせて、システムも進化させる必要がありました。世の中のベストプラクティスをそのまま適用するのではなく、自分たちのビジネスに最適な形にカスタマイズすることが重要です。
システムは現実世界に寄せる
もう一つの重要な学びは、「システムは現実の動きに寄せた方が実用性や弾力性に優れる」ということです。組織構造とシステム構造を一致させることで、各チームが自律的に動けるようになり、開発速度も向上しました。
例えば、スタイリングチームが新しい機能を追加したいとき、他のチームの承認を待つ必要がなくなりました。各サービスが独立しているため、自分たちのペースで開発を進められます。
技術トレンドとの向き合い方
技術の世界は日々進化しています。新しいフレームワーク、新しいアーキテクチャパターン、新しいツール。すべてを追いかけることは不可能ですし、その必要もありません。
重要なのは、自分たちのビジネスにとって本当に価値のある技術を見極めることです。例えば、イベント駆動アーキテクチャへの移行は、単に流行っているからではなく、私たちの抱える課題を解決するために必要だったから採用しました。
Node.jsと共に歩んだ10年
なぜNode.jsを選んだのか
2015年のサービス立ち上げ時は外部開発のRailsシステムでしたが、最初の1年で内製のNode.jsシステムへと移行しました。当時、Node.jsはまだ新しい技術で、多くの企業がJavaやRubyを選ぶ中、なぜ私たちはNode.jsへの移行を決断したのか。
最大の理由は、非同期処理のパラダイムが循環型物流に適していたからです。在庫の状態がリアルタイムに変化し、複数の処理が並行して走る私たちのシステムには、Node.jsのイベントループモデルが最適でした。
Node.jsの進化と共に
この10年間で、Node.jsも大きく進化しました。Callbackベースの処理からPromise、そしてasync/awaitへ。この進化により、コードの可読性は飛躍的に向上し、保守性も高まりました。
私たちも、Node.jsの進化に合わせてコードベースを改善してきました。レガシーなコードを少しずつモダンな書き方に置き換え、より保守しやすいシステムへと進化させています。
パフォーマンスチューニングの重要性
Node.jsは適切に使えば高いパフォーマンスを発揮しますが、使い方を間違えると逆に足を引っ張ることもあります。例えば、同期的な処理を大量に実行したり、メモリリークを起こしたりすると、システム全体のパフォーマンスが低下します。
私たちは、定期的にパフォーマンス分析を行い、ボトルネックを特定して改善しています。ストリーム処理の活用、適切なキャッシング、データベースクエリの最適化など、地道な改善の積み重ねが、今の安定したシステムを支えています。
組織とアーキテクチャの共進化
エンジニアリング文化の醸成
技術的な進化を支えるのは、結局は人です。私たちは、エンジニアが主体的に技術選択を行い、失敗を恐れずにチャレンジできる文化を大切にしています。
定期的な技術勉強会、アドベントカレンダーへの参加など、学びの文化が根付いています。この文化があるからこそ、10年間継続的に進化し続けることができました。
今後の展望:次の10年に向けて
イベント駆動アーキテクチャの完全移行
現在、私たちは段階的にイベント駆動アーキテクチャへの移行を進めています。これは単なる技術的な変更ではなく、ビジネスの柔軟性を高めるための戦略的な選択です。
イベント駆動により、新しいサービスの追加が容易になり、既存サービスへの影響を最小限に抑えることができます。また、障害時の影響範囲を限定し、システム全体の可用性を向上させることができます。
マルチサービスプラットフォームへの進化
エアークローゼットは、洋服のレンタルだけでなく、ライフスタイル全般をサポートするプラットフォームへと進化しています。そのため、各システムコンポーネントは、他のサービスでも再利用可能な形で設計されています。
認証基盤、決済システム、物流システムなど、コアとなるコンポーネントを共通化し、新しいサービスを素早く立ち上げられる体制を整えています。
AIとの共創:バイブコーディング時代への適応
2024年から、私たちはAI技術を積極的に活用し始めました。全エンジニアへのClaude Code Max導入により、開発生産性が飛躍的に向上しています。GitHubの研究によると、AI活用によりコーディング速度が55%向上するという結果も出ており、私たちもその恩恵を実感しています。
しかし、AIはあくまでツールです。重要なのは、AIを使って何を実現するか。生成AI時代において、エンジニアに求められるのは、コードを書く能力だけでなく、要件定義や設計といった上流工程のスキル、そしてAIが生成したコードを理解し修正できる能力です。(この考え方については別の記事でも詳しく述べています)
フルスタックエンジニアリングの推進
私たちは創業以来、技術領域で役割を分けないことを大切にしてきました。この「フルスタックエンジニアリング」の思想は、AI時代においてこそ真価を発揮すると確信しています。
AIによって個々のタスクは高速化されましたが、チーム間の連携コストは変わりません。むしろ、開発速度が上がったことで、連携の頻度が増加し、全体のボトルネックになるケースが増えています。フルスタックエンジニアは、システム全体を理解しているため、AIを「指揮者」として活用し、どの部分をAIに任せ、どこで人間の判断が必要かを適切に判断できます。
実際、airCloset Dressの開発でも、フルスタックエンジニアがシステム全体を理解し、責務を分けて効率的に開発を進められたからこそ、短期間でのローンチが可能でした。専門分業していたら、各チーム間の調整だけで倍以上の時間がかかっていたでしょう。
コミュニケーション重視の開発文化
バイブコーディング時代だからこそ、私たちはリアルタイムコミュニケーションの価値を重視しています。AIがコーディングを担うことで、エンジニアの役割は「How(どう実装するか)」から「Why(なぜ作るのか)」と「What(何を作るのか)」へシフトしています。
そして、WhyとWhatを深めるためには、密なコミュニケーションが不可欠です。「ちょっといい?」の一言で始まる相談、ホワイトボードの前での議論、廊下での雑談から生まれるアイデア。これらの価値は、リモートでは完全に再現できません。
私たちは全員ニックネーム制度、週次の全社会議、半期ごとの合宿など、コミュニケーションを円滑にする仕組みを整えています。AIと人間の最適な協働モデルは、技術と人間性の両方を大切にすることで実現すると考えています。
技術コミュニティへの貢献
10年間の経験を、技術コミュニティに還元していきます。オープンソースへの貢献、アドベントカレンダーへの参加など、私たちが得た知見を広く共有することで、技術コミュニティの発展に寄与したいと考えています。
おわりに:循環型ビジネスが創る技術の未来
エアークローゼットの10年は、ビジネスと技術が共に進化し続けた10年でした。循環型物流という前例のないビジネスモデルが、私たちに技術的なチャレンジをもたらし、その解決を通じて独自のシステムアーキテクチャが生まれました。
「最強のアーキテクチャは存在しない」「システムは現実世界に寄せる」という考え方は、この10年間の経験から得た確信です。技術のための技術ではなく、ビジネスを成功させるための技術。それが私たちの目指すところです。
これからも私たちは、技術の進化を恐れず、常に最適な選択を模索し続けます。イベント駆動アーキテクチャへの移行は、次の10年に向けた大きな一歩です。
最後に、この10年間を支えてくださったすべての方々に感謝を申し上げます。そして、新たなチャレンジに一緒に取り組んでくれるエンジニアの皆さまを、心よりお待ちしています。興味を持っていただけた方は、ぜひエンジニア採用サイト「エアクロクエスト」をご覧ください。
技術の力で、ファッションの新しい楽しみ方を創造する。その挑戦は、まだ始まったばかりです。
Discussion