概要
PhantomはExpoを使って、毎週リリースされる安全で高性能な暗号ウォレットを構築しています。大規模な専任モバイルチームに依存するのではなく、基盤を保守するプラットフォームチームと、モバイル体験に直接貢献する複数のプロダクトチームという構成を採り、Expoのアーキテクチャとエコシステムがそのモデルを可能にしています。
チーム構造とワークフロー
- モバイルアプリは
React NativeとExpoでモノレポに含まれており、ブラウザ拡張など他のプロダクトと並存し、重要なビジネスロジックやUIを共有しています。
- 専任の巨大なモバイルチームはなく、モバイル基盤は経験豊富な
React Nativeエンジニア数名がいるプラットフォームチームが維持管理しています。
- 機能開発は社内のフルスタックなプロダクトエンジニアが担当し、横断的でオープンなカルチャによってほぼ全員がモバイルに貢献できます。
「React Nativeのバックグラウンドを持つエンジニアは多くないが、ほぼ全員がモバイルアプリに貢献できる。それは我々が作った基盤とExpoの力の証拠だ。」
— Jakub Adamczyk, Software Engineer at Phantom
スタック(主な採用技術)
Expo SDK
React Query, TypeScript, Signalium(オープンソースのsignalsベースのステート管理ライブラリ)
FlashList(高性能リスト表示用)
- Expoモジュール(
Secure Store、WebBrowser、カスタムモジュール/プラグインなど)
- モノレポ構成で、他プラットフォームとロジックやUIを共有
Expo Dev Clientの導入
Expo Dev Clientを導入することでExpo Goの制限を超え、カスタムネイティブモジュールを有効化しつつ、エンジニア間で一貫したシンプルな開発ワークフローを維持しています。
EASを使った週次リリースワークフロー
PhantomはCI/CDの中核にEAS(EAS Build/EAS Submit)を置いています。
ワークフローの要点:
- エンジニアはPRを開き、
GitHub ActionsからEAS Buildをトリガー
- 開発用デバイス向けのdev clientビルドは週次で作成され、専用のSlackチャンネルにリンクとQRコード付きで投稿され、簡単にインストールできる
- 本番リリースは週次のペースで、
EAS Submit経由でビルドを提出
- エンドツーエンドテストには
Maestroを使用
テスト高速化の工夫:
EAS UpdateとExpo Fingerprintを組み合わせ、E2Eテスト用のビルドは必要なときだけ作るようにしている
「サンドボックス環境にEAS Updateで更新をプッシュすることで、60分のテスト実行時間から約15分を削ることができた。テストの反復速度にとって大きな勝利だ。」
— Dan Tamas, Software Engineer at Phantom
開発者向けツールとWallet SDK
Phantomは自社アプリの構築にとどまらず、他の開発者が自分のExpo/React Nativeアプリに暗号機能を統合できるようにするWallet SDKを公開しました。これにより、セキュアでユーザーフレンドリーな暗号機能を簡単に組み込めるようになり、Phantomは自社製品を超えて暗号の普及を加速しています。
また、Embedded Wallet製品のためにExpoを他の暗号アプリに持ち込むSDKや、Solana Mobile Wallet Adapterをサポートするネイティブモジュール、セキュリティのためのカスタムWebViewパッチなども開発しています。
なぜ暗号アプリはExpoで構築されるか
- 今日、ほとんどのモバイル暗号ウォレットは
Expo + React Nativeで作られています。
- このスタックは数百万人のユーザーを支えつつ、高いUX基準を維持できるようにスケールします。
鍵となる制約:
- セキュリティが最重要
- エンジニアチームはしばしばスリムで機敏
- クロスプラットフォームでの一貫性が必須
Expoはこれらの制約に合致します。Phantomは軽量で迅速に動きながら、セキュアで高速、見た目も優れたプロダクトを提供できています。必要に応じてネイティブコードも利用しており、細部の正確さを担保するためにカスタムWebViewパッチやネイティブモジュールを作成しています。Expo Dev ClientとEASによって、どのエンジニアでも貢献しやすい、速くて安全なセットアップが実現されています。
「かつては“速く始めたいならExpoを使え、だが後でejectして純粋なReactNativeに移行せよ”と言っていた。今はもう: Expoを使え。以上だ。」
— Dan Tamas, Software Engineer at Phantom
他チームへのアドバイス
Phantomのチームは横断的に動き、エンジニアは所有権を持ち自立して素早く動くことが期待されています。
「この会社はプロダクトマネージャーの指示で動くのではなく、エンジニアによって運営されている。」
— Dan Tamas, Software Engineer at Phantom
始めるチームへの具体的なアドバイス:
- エコシステムを活用する: Expoモジュール、dev clients、インフラは本番運用に耐えうる
Expo Modules APIを使う: 日常的にネイティブコードに触れずに出荷でき、プロダクトに集中できる
- シンプルに保つ: Phantomのセットアップはエキゾチックではなく、実用的で効率的
結論
Phantomは巨大なチームや深いネイティブ専門知識がなくても、世界有数の暗号ウォレットを作れることを示しています。彼らは速く動き、セキュリティを維持し、Expoで毎週出荷しています。