DMM Sprint 2025 Go に行ってきました!
DMM Sprint 2025 Goに行ってきました!
はじめに
こんにちは!27卒の大学院生です。2025年8月4日から8日にかけて開催されたDMM SprintのGoコースに参加してきました。今日はその体験記を書いていこうと思います。
以下2024年の参加者の方の記事です!こちらも併せて読んでいただくとより解像度高くインターンの様子が分かるかと思います。!
正直、予想をはるかに上回る濃密な5日間でした。事前には「ライブラリを学んで演習問題を解いて終わりかな?」と思っていましたが、実際は非常に実践的で歯応えのあるプログラムで、Goの基礎だけでなく実践的なアーキテクチャの部分まで学ぶことができました!
参加前の背景
まず、私の参加前の状況を整理しておきます
プログラミング経験
- 2024年夏頃(一年前)にHTML/CSSからWeb開発を学び始める
- 同年11月ごろからTypeScriptを学習開始
- Next.jsでフルスタック的に個人開発を進めていた
- 案件でFastAPIを扱うようになり、バックエンドについての基本的な知識はあった
Goに関しては
- A Tour of Goでちょっと学んだ程度
- がっつり実装したことは一度もない状態
だんだん志向がバックエンド寄りになってきていたので、「サーバーサイドエンジニアを目指している」「Go言語は未経験だけどチャレンジしたい」という募集要項にピッタリだと思って応募しました。
5日間のカリキュラム詳細
1日目:Go言語の基礎固め
事前学習としてA tour of goであらかた基礎文法は押さえておけというアナウンスがあったため、早速ライブラリを扱うところからのスタートでした。
io、encoding、generics、2次元スライス、テストについての座学と軽い演習からスタートしました。初日からチームでの交流があり、個人的には各々で黙々と作業するんだろうなと思っていたので、「いい意味での裏切り」がここから始まった感じがしました。
2日目:実践開発とライブコーディング
午前中はnet/httpライブラリについての説明と軽い演習、その後チームごとに自由にAPIを開発を行いました。私たちのチームは「おみくじAPI」を作成し、チームでワイワイ楽しく開発ができました。
午後は「dmmquest.go」と題して、座学で学んだライブラリに関する演習問題+メンターオリジナル問題に挑戦しました。約2時間、解けるところまで解くという形式で実践的なコーディング力を鍛えました。
そして、この日の最後に行われたライブコーディングが、今回のインターンで最も印象的な体験でした。現役のDMMエンジニアの方が、メインの課題である「yatter」(TwitterライクなアプリケーションでDMMの新卒研修で使われる)にユーザー取得機能を実装する様子を見せてくださいました。(後述)
3日目〜4日目:yatter開発への挑戦
2日目のライブコーディングの続きから始まり、本格的にyatter開発に着手しました。yatterはchi(HTTPルーター)とsqlx(DBライブラリ)を使用し、オニオンアーキテクチャで設計されていました。
自分は多少オニオンアーキテクチャの記事などを読んで、ざっくりとした理解はしていたものの、本格的に触るのは初めての経験で、初めはすごく苦戦しました。
5日目:総仕上げとDMM本社訪問
最終日は六本木のDMM本社でオフライン開催。残りのyatter開発や、ライブコーディング、オフィス見学、そしてDMMビアバッシュと盛りだくさんの一日でした。
DMM名物?のジャングルも行きました!!観光地すぎた、、、
実装したもの
Yatterについて、約3日の演習期間で以下4つの機能を実装し、それぞれでUI層、ユースケース層、ドメイン層、インフラ層の全レイヤーを書きました。
-
ユーザー情報の取得
-
yweetの投稿
-
yweetの取得
-
タイムラインの取得
技術的な学び
ライブコーディングについて
今回自分にとって特に刺激的だったのが現役エンジニアによるライブコーディングです。オニオンアーキテクチャ実装時の思考プロセスだけでなく、VScodeに関する細かいtipsまで丁寧に教えてくださり、とても有意義なものでした。
思考、実装の工夫
-
オニオンアーキテクチャで開発する上での思考の流れ(どの層から書くのか?など)
-
一旦自然言語で処理を書いてから実装に落とし込む、実装中の脳の負担を減らす工夫
-
地道なデバッグ作業の重要性(メンターの方も初見での実装で、おそらくトラブルだったかと思いますが、リアルな開発現場の空気感を見られて嬉しかったです!)
VSCodeのTips
-
Option+Cmd+上下でカーソルを増やせる
-
メソッドや変数に対してCmd+クリックで呼び出し元や参照先へ潜れる
オニオンアーキテクチャについて
これまでNext.jsでの開発で、「多少疎結合は意識しとくか、、」というモチベーションでのシンプルな3層アーキテクチャしか触ってこなかった私にとって、オニオンアーキテクチャは大きな挑戦でした。
特に、個人的な理解の壁になっていた疑問点の一つに
「ユースケース層とインフラ層が両方ともドメイン層に依存するなら、インフラで取得したDBの情報をどうユースケース層に伝えるんだ??」
というものがありました。
この疑問は、ドメイン層にインターフェースを定義し、ユースケース層ではそれを使用(依存)し、インフラ層では具体的な処理を実装するという依存関係の逆転原理で解決されることを、実際のコードを通じて理解しました。特に、「具体的な処理の実装」が「依存」に相当するという視点が自分にとって新しいものでした。
CQRSについて
自分は最初、既存のユーザー登録処理(更新系)に使われている、userIDからuserを見つけるメソッド(登録処理では衝突のチェックに使用する)を参照系でも流用しよういました。正直、「ラッキーこれ使えるじゃん!」と思ってしまっていましたが、2日目のライブコーディング中の説明でCQRS(Command Query Responsibility Segregation)の概念を知りました。
参照系と更新系を分離することで、トランザクション管理やキャッシュ管理に様々な恩恵があるという点は非常に勉強になりました。
N+1問題への対処
タイムライン機能の実装では、N+1問題を意識した設計を学びました。具体的には、yweetテーブルとuserテーブルをuser_idでJOINすることで、効率的なデータ取得を実現しました。
テーブル設計の歴史
興味深かったのは、中間テーブルの設計変遷です。昨年のカリキュラムでは「Image」という名前で、yweetの添付以外でも使われていたため中間テーブルが必要でした。しかし今年度から、大幅な見直しがあった関係上、そのテーブル名は「attachments」となり、多対1の関係になったことで不要になりました。(ドキュメント上には中間テーブルが残っていた)。
一見不要そうな実装に、歴史的な理由があるという発見は、実際の開発現場ならではの事象だと思い、面白かったです。
サポート体制
オンライン開催の4日間は、常時3人以上のメンターが質問部屋に常駐しており、質問すると問題の解決だけでなく、関連する知識や躓きそうなポイントまで丁寧に教えてくださいました。技術的に間違っていること以外は何も否定されず、学びやすい雰囲気が印象的でした。
最終日のオフラインでは、メンターの方々が積極的に声をかけてくださり、「学生を全力でサポートするぞ」という熱意がひしひしと伝わってきました。リリースした製品のスケーリングの話など、実務で役立つ知識も惜しみなく共有していただきました。
また、他の参加者(全16名)も積極的に質問しており、Discordを使って技術的な質問の共有や、つまづいたポイントの相談、終わった後の雑談など、質問しやすい雰囲気が自然と形成されていました。個人的に。常に誰かがDiscordの質問部屋にいたのは健全でありがたい空気だと感じていました。
DMMビアバッシュでの交流
最終日の夜は、DMMで月一で開かれるビアバッシュに参加しました。アーキテクチャから機械学習まで幅広いテーマのLTを聴き、その後インターン生や社員との交流タイムがありました。
別で開催されていたAndroidのインターン生も参加しており、学生交流の輪が広がりました。
DMMの楽しく、真面目に仕事をする雰囲気を肌で感じることができました。
参加を終えて
具体的なコード実装の背後に、抽象的なレイヤーでの「システム設計」があるバックエンド開発に、改めて魅力を感じた5日間でした。DMMは温かい職場でありながら個人の能力も高く、素晴らしい環境だと感じました。
現在は、インターンで学んだことをさらに深めるため、DDD本読むか!!と考えています。また、Goとオニオンアーキテクチャを使った個人プロジェクトにも挑戦したいです。
これから参加する人へ
DMM Sprintは、Go言語だけでなく、アーキテクチャ設計や個人開発では踏み込めない領域まで体系的に学べる貴重な機会です。
特にこんな人におすすめ:
-
サーバーサイドエンジニアを目指している人
-
Go言語は未経験だけどチャレンジしたい人
-
体系的にアーキテクチャを学んでみたい人
-
実際のプロの開発プロセスを見てみたい人
プログラミングの基礎経験があれば十分参加できますし、何より「深く学びたい」、「なりふり構わず質問する!」というような姿勢が一番大切だと思います。
まとめ
DMM Sprint Goコースは、期待をはるかに上回る濃密で充実したインターンでした。Go言語の基礎からオニオンアーキテクチャ、CQRS、N+1問題の解決まで、幅広く深く学ぶことができました。
そして何より、メンターの方々の技術力と人間性、DMMという会社の魅力を肌で感じることができたのが最大の収穫です。バックエンドエンジニアを目指している学生の皆さんには、ぜひ挑戦していただきたいと思います!
Discussion