WOGO Tech blog
💻

未経験インターンが1年で3D生成パイプラインのシステム構築をした話

に公開

はじめに

  • 参加しているインターン先: 株式会社WOGO
  • 期間: 2024年10月 ~ 現在
  • 内容: 主にバックエンド開発とアルゴリズム担当

インターンを初めて1年間が経過し、自分の経験と技術的な学びを整理するのに良い機会だと思ったので、執筆します

自己紹介

現在、東京大学大学院工学系研究科に在籍しており(修士一年)、普段の研究ではざっくりとVLMを用いた研究をやっております。
インターンを始めたきっかけは、友人の紹介でした。学部4年の時にその友達から「学科の先輩が起業してて、そこで働いている研究室の先輩に誘われたからお前もどう?」と言われたのが最初です。当時エンジニアのインターンは未経験。プログラミング経験と言えば、研究や授業でPythonとC言語を触った程度でした。ただ元々エンジニアのインターンに参加してみたいという気持ちはありましたし、取り組んでいる事業が面白そうだったので、院試が終わるタイミングで本格的に稼働し始めました。

業務内容

主に担当したのは、複数の画像から3Dモデルを生成するシステムの開発です。この業務の特徴は、単なるWebサービスの開発にとどまらず、撮影を行う「筐体(ハードウェア)」と連携する必要がある点でした。そのため、バックエンド、フロントエンド、インフラ(AWS)、そして組み込みに近い制御領域まで、フルスタックに携わりました。

  • Backend: FastAPI(カメラ撮影サーバー), Django(システム全体サーバー)
  • Frontend: React
  • Infra/server: AWS
  • Hardware/Control: Python

    実際の撮影用の筐体
    特に苦戦し、かつ大きな学びがあった「バックエンド・組み込み領域」を中心に振り返ります。


筐体に設置しているカメラ(これが60個ついています)

バックエンド開発・組み込み領域

稼働を開始した当時、バックエンドについての知識はほぼなく、「HTTPのGETとPOSTの違いとは」「エンドポイント」「非同期処理、同期処理」など、基礎的なところも怪しい状態でした。「当時の自分はこんなことも知らなかったのか」と、今思います。

まず初めに、FastAPIを触りました。ただ、最初は既存のシステムに新しくエンドポイントを追加するというタスクだったと同時に、システム自体も比較的コンパクトだったので、既存のコードを見て内容を理解したり、APIについて勉強したりすることで、着々とスキルが上がっていると自分でも感じることができました。また、わからない処理内容などがあったら社員さんに積極的に聞くことも意識しました。いきなり質問しても快く丁寧に答えてくださりとても助かりました。

そこから2ヶ月ぐらい経った後、Djangoを触ることになります。そこで結構苦戦したのをよく覚えています。

当初つまずいた点

  • views.pyってエンドポイントのロジックを書くところなんだ!
  • プロジェクトの中に複数のアプリがある
  • serializers.pyの存在
  • マイグレーションとは
    などなど、、、

APIのエンドポイントの追加や、DBのカラム設定の変更・追加、プロジェクト全体の再構成など、バックエンド全体の様々な部分を担当しました。触り始めの時は本当に苦労しましたが、全体を広く触れたので統合的に理解がしやすく、開発がとても楽しく感じるようになりました。

また、目的に応じて最適なアプローチを取る必要があるからこそ、一つのプロジェクトで様々な技術スタックに触れることができました。


システムの全体図

例えば、モデル生成において必要なマスキング処理を非同期にするために、ローカルからAWS Lambda環境に移行する必要があり、AWSの主要サービスについても学んでいきました(上図の2,3)。また、AWS Batchについても扱いました(上図の13~15)
また、先方からの要求に対応して、生成アルゴリズムの大幅な変更を行うため、3Dオブジェクトの形式や、メッシュ構造、Pythonライブラリ(Open3D, trimesh)などについてもキャッチアップしました。(上図の7の中身)

非技術的なところ

プロジェクト全体に関わることができた

前章でも触れましたが、バックエンド、アルゴリズム、インフラといったプロジェクト全体の技術スタックを一通り触ることができる経験というのはやはり大事かなと思います。インターン先の体制として、2~3人で一つの案件を担当することが多く、インターン生にも重要な仕事を振ってくださる環境でした。その分、責任はどうしても大きくなってしまいますが、案件全体の理解がしやすく、とても仕事がしやすかったです。

たくさん質問する

この点はとても意識しました。もちろん自分で最初に関連するtechブログやドキュメントを読むことは大事ですが、プロジェクト固有の点も非常に多かったので、そういう場合は臆せず質問することを意識して、普段の業務に取り組んでいました。幸い、社員さんのみなさんがとても優しく、毎回丁寧に答えてくださったり、slackでのやりとりも非常に活発だったのでとても助かりました。

チームとして開発するというところ

進捗の細かな共有方法や、ドキュメントの残し方といった、チームでの開発における非常に重要な点についても学ぶことができました。こういった、将来社会人になった時に絶対に必要になるであろうスキルを今のうちに学べたことは、技術力以上に大きな財産であると感じています。

おわりに

バックエンドやその周辺の領域を中心に、WOGOで1年間経験してきたことをまとめました。現在、別の案件でフロントを本格的に触ることになりそうなので、そちらもとても楽しみです!
引き続き、フルスタックエンジニアを目指し精進していきたいと思います。
ありがとうございました!

WOGO Tech blog
WOGO Tech blog

Discussion