
はじめに
こんにちは!
DMM.go 運営の西本賢司(@overknj)です。 普段は、EC開発部としてDMM通販のモダナイズを行っています。
2025 年 9 月 17 日(水)、DMM 主催の Go 言語勉強会「DMM.go #11」を開催しました。
今回は「新卒が語るGo」をテーマに勉強会を行いました。
GC の内部挙動、Task を用いた開発手法、パッケージの変更検知の仕組み、sync.Cond の使い所などを扱い、Go の理解を深める内容となりました。
イベント詳細は、以下のリンクから確認できます。 https://dmm.connpass.com/event/363839dmm.connpass.com
当日の様子

登壇内容
「Green Tea GCを見てみる」
伊藤晋梧(DMMGAMES / プラットフォーム技術開発本部 - 決済チーム)の登壇です。
Go 1.25 から試験導入されている GC「Green Tea GC」を題材に、既存 GC の仕組みと課題、Green Tea GC が狙う改善点を解説していただきました。
主な内容
既存 GC の仕組み
既存の GC は、プログラムの実行と並行して動作する Concurrent GC と、Mark & Sweep を採用しています。Mark フェーズでは tri-color marking(白・灰・黒の 3 色で到達可能性を分類)を行い、到達しなかったオブジェクトは Sweep フェーズで回収します。
従来方式の課題
オブジェクト単位スキャンではメモリ局所性を活かしづらく、キャッシュミスや CPU 負荷につながる点が課題として紹介されました。
Green Tea GC の変更点
Mark & Sweep の枠組みは維持しつつ、スキャン単位をスパン(メモリブロック)に寄せることで局所性改善を狙うアプローチです。
- Go 1.25.0 以降で
GOEXPERIMENT=greenteagcにより試せる(Go 1.26.0 では、この環境変数はオプトアウトされ、デフォルトで有効になっています。) - 計測は進行中だが、改善報告もある
普段の開発では意識する機会が少ないGo のランタイムに興味を持つきっかけとしても面白い内容でした。

「脱・シェル芸!Taskで始めるイマドキ? Go開発」
ageha734(PF 開発本部 - 認可チーム)の登壇です。
Makefile の“つらみ”を起点に、Go 製タスクランナー Task(Taskfile) の特徴と、導入して得られた開発体験を紹介していただきました。
主な内容
Makefile の課題と Task の立ち位置
プロジェクトが育つほど Makefile が肥大化・属人化しやすい点を共有し、代替・補完の選択肢として Task を紹介していただきました。
Task の特徴
YAML で宣言的に書けて読みやすく、Windows/Mac/Linux で動作する点が紹介されました。
便利な機能と運用 Tips
aliases/preconditions/statusによる“防御力”の高いタスク設計- watch による変更検知と差分スキップで開発体験を向上
- 全面移行が不安なら Makefile から呼び出す共存も有効
日々の開発で積み上がりがちな「ちょっとした不便」を見直すきっかけになり、チームの開発体験改善にも繋げやすい内容でした。

「Airパッケージの深掘り〜変更検知の仕組み〜」
大野直哉(メディア基盤開発部)の登壇です。
ライブリロードツール Air の内部実装を追い、特に「変更検知」がどう動いているかを深掘りして解説していただきました。
主な内容
Air がやっていること
Air は「変更検知 → ビルド → プロセス再起動」を自動化し、変更の反映をスムーズにします。
変更検知の流れ
watcher が別のgoroutine でファイルを監視し、変更を検知するとchannel で通知してreload が走る構造です。
watcher の種類
- Event Watcher:OS のイベント通知(Linux なら inotify 等)で検知(デフォルト)
- Polling Watcher:一定周期でメタデータ(更新時刻・サイズ)を比較して検知
普段何気なく使っているツールの裏側を理解でき、トラブルシューティングやツール選定の視点を増やせる内容でした。

「sync.Condの使い所についてチャネルと比較して考えてみる」
na2na(PF 開発本部 - 認可チーム)の登壇です。
sync.Cond とチャネルの違いを整理し、Kubernetes のclient-go(DeltaFIFO)を例に「なぜsync.Cond が選ばれているのか」を解説していただきました。
主な内容
sync.Cond とは
条件が満たされるまでgoroutine を効率よく待機させる仕組みで、Mutex などのロックとセットで使います。
チャネルとの違い
チャネルは「データの受け渡し」が主目的で、sync.Cond は「共有状態の変化(通知)」が主目的、という関心事の違いを整理していただきました。
DeltaFIFO での利用
キューが空ならWait()、追加側は Broadcast() で通知する構造になっており、「ロックで守る共有状態+待機/通知」を自然に実装できるため sync.Cond が適している、という説明でした。
並行処理の使い分けを見直すきっかけになり、「なぜその実装なのか」をコードから読み解く面白さが詰まった発表でした。

懇親会
全発表の終了後には、軽食とドリンクを用意し、懇親会を開催しました。
懇親会では、参加者同士はもちろん、DMM社員と参加者との交流が行われました。
特に今回は「新卒が語るGo」というテーマだったため、新卒エンジニアの登壇者を中心に発表内容の深掘りやGo 言語の内部実装、今後の方向性について活発な議論が交わされました。

まとめ

本記事では、2025 年 9 月 17 日(水)に開催された DMM.go #11 について紹介しました。
今回は「新卒が語るGo」をテーマに、Green Tea GC、Task、Air、sync.Cond など、Go の内部や開発体験に踏み込んだ内容を扱いました。
どの発表も実装や仕組みの背景まで丁寧に掘り下げており、Go の理解を深める知見が共有されました。
今後のご案内
今後の DMM.go の開催情報や詳細については、connpass にて随時ご案内いたします。
終わりに
DMM.com では、Go 言語を使って開発しているエンジニアを募集しています。
ご興味のある方は、以下の URL からご応募ください。