👨‍💻

RevenueCat hackathonに参加して、起きた問題と教訓について

2024/09/19に公開

初めに

今回Revenue catとMelting hackが主催するハッカソンに出場しました。

私はハッカソンに出るのが初めてだったのですごく緊張しましたが、結論私のチーム「Artizans」は1位を取ることができました。

【サブスク機能持ちのiOSアプリを作ってストアにshipする】
というのが今回のテーマでして、自分はiOSを触ったことがないのでフロントエンドの支援が全然できないというのが難しかった理由です。

メンバーは

  • リーダー・PdM・デザインアシスタント
  • iOSエンジニア
  • インフラ・バックエンド(僕)
  • インフラ・バックエンド
  • デザイナー
  • フロントエンドエンジニア (今回はiOSだったのでトイルやアイデア、デザインを主にやってくれました)
    です。グローバルチームだったので僕以外は外国人でした。
    ところで今回のハッカソンはチームメンバー1人につき2万円の開発資金が出るということで僕たちは12万円の開発資金を得ました。(その資金は最終的にAWSやiOSデベロッパーライセンス、デザイナーのスポット雇用やCoCo壱のカレー代になります。)

作ったもの

東京には街にブレンドしている隠れギャラリー(画廊)がたくさんあります。それらは少し見つけるのが難しいです。そこで、そのギャラリーについて教えてあげる+ギャラリー巡礼の旅をサポートしてあげるアプリを作ろうということになりました。
特に初心者はアートに対するハードルが高く、理解も難しいというところでそのハードルをどのように感じさせずにアートに触れてもらえるかを考えました。
そこで、好みの色やテクスチャ、音をユーザーの好みに合わせて選んでいただき、それをベースにギャラリーをおすすめするというアプリを作ることにしました。

ハッカソンで直面した課題と解決策

1. デザイナー不在による初期開発の遅れ

課題

プロジェクト開始直後の4-5日間、デザイナーがスウェーデンに滞在しており、チームと協働できない状況でした。

対応策

  1. リーダーによるワイヤーフレームの作成
    wireframe
    図1: プロジェクトリーダーが作成したワイヤーフレーム

  2. 並行開発の実施

    • フロントエンドチーム:デザインに依存しない部分の開発を先行
    • バックエンドチーム:必要なエンドポイントの開発に着手
  3. 外部デザイナーの緊急招集

    • チームメンバーの人脈を活用し、フリーランスのデザイナーに依頼

学んだこと

  • 予期せぬ事態に備え、柔軟な開発計画を立てることの重要性
  • チーム内の多様なスキルセットと人脈の価値

2. バックエンド開発における試行錯誤

Part 1: 最初のアプローチとその課題

採用した技術スタック

  • 言語: Rust
  • フレームワーク: Actix-web
  • インフラ: AWS (ECR, ECS Fargate)

実装の流れ

  1. Actix-webを使用したAPIサーバーの構築
  2. GitHub Actionsを利用したCI/CDパイプラインの構築
    • Rustコードのビルド
    • ECRへのDockerイメージのプッシュ
    • ECS Fargateへのデプロイ

直面した問題

実装後、この構成がFargateのサーバーレスという特性を活かしきれていないことが判明しました。Actix-webが常時リスニング状態を維持するため、実質的に通常のサーバーと同様の動作となり、コスト面で非効率でした。

Part 2: アーキテクチャの再設計

新たな技術スタック

  • 言語: Rust (変更なし)
  • フレームワーク: cargo-lambda
  • インフラ: AWS Lambda, API Gateway

改善点

  1. サーバーレスアーキテクチャの本格採用
    • 各エンドポイントを個別のLambda関数として実装
  2. コスト効率の向上
    • リクエスト数に応じた柔軟なスケーリングが可能に

インフラ構成

infra_ER
図2: 改善後のインフラ構成図 (VPCやサブネットの詳細は省略)

学んだこと

  • サーバーレスアーキテクチャの適切な活用方法
  • 初期設計の重要性と、必要に応じた大胆な方針転換の価値

3. チーム間コミュニケーションの課題

直面した問題

フロントエンドとバックエンドの開発チームが分かれていたため、効果的なコミュニケーションを取ることに苦労しました。

改善のためのアイデア

  1. 定期的な全体ミーティングの実施
    • 進捗共有と課題の早期発見
  2. 共通のドキュメンテーションツールの活用
    • API仕様書やデータモデルの共有
  3. ペアプロセッションの導入
    • 相互理解の促進

教訓

  • チーム間の壁を取り払うための積極的な取り組みの重要性
  • 技術的な課題だけでなく、人的要因にも注目することの大切さ

まとめ

今回のハッカソンでは、予期せぬ人員配置の問題やアーキテクチャの再設計など、多くの課題に直面しました。しかし、これらの経験を通じて、チームの適応力と問題解決能力が大きく向上しました。

今後のプロジェクトでは、以下の点に特に注意を払っていきたいと考えています:

  1. 柔軟な初期計画の立案
  2. 技術選定時の長期的視点の重要性
  3. チーム間コミュニケーションの継続的な改善

これらの学びを活かし、より効率的で革新的なプロジェクト運営を目指していきます。

Discussion