はじめに
こんにちは!
DMM.go 運営の國分竜二(@_ryuji_cre8ive)です。 普段は、オンラインサロン開発部のアーキテクトチームとして既存機能の改修や新しいアーキテクチャへのリプレースなどを行っています。
2024 年 12 月 11 日(水)、DMM 主催の技術勉強会「DMM meetup #40」を開催しました。 今回は初の試みとして、Go 言語の勉強会「DMM.go」とフロントエンドの勉強会「Think! FrontEnd」の 2 トラック制で実施しました。
本記事では、「DMM.go #9 - Go 言語で開発する DMM プロダクト -」のトラックについて、開催レポートをお届けします。
イベント詳細は、以下のリンクから確認できます。
また、Think! FrontEnd のイベント詳細は、以下のリンクから確認できます。
当日の様子
ノベルティの写真
登壇中の写真
登壇内容
清川航一: 「Go プロダクトにおけるテスト改善の軌跡」
清川航一(DMM ポイントクラブグループ - web チーム)の Short Session での登壇です。
Go プロダクトにおけるテスト改善の軌跡とあるように 3 つの具体的な改善の紹介でした。
- ゴールデンテストの導入
- モックの引数検証
- 過剰なテーブル駆動をやめる
今後の展開としてカバレッジは高いが検証が甘い部分について可視化できるような仕組みづくりを行っていきたいと話されていました。
テストはいつの時代も長くなったり工数が思ったよりかかってしまったりなどがありますが、ライブラリやモックをうまく用いて効率的にテストを行っていきたいですね。
登壇スライド:Go プロダクトにおけるテスト改善の軌跡
登石拓磨: 「突然発生した Flaky Test との戦い」
登石拓磨(基盤開発グループ)の LT での登壇です。
Flaky Test が発生してしまった原因を紐解いてそれに対して goroutine や channel を用いて解決策を見出していました。
開発の初期段階では気づかなかったりするものの、プロダクトが成長してくると同時にこういったバグも顕著になってくるいい例だと思いました。
自分はまだ Flaky Test が発現したことがないのですが、発現した際にはこのような解決アプローチを取りたいと思いました。
登壇スライド:突然発生した Flaky Test との戦い
菊地ひなた: 「新卒が解説する DMM の検索 proxy-API の解体書」
菊地ひなた(データ基盤開発部 - ML 基盤チーム)の LT での登壇です。
登壇内容は、DMM の検索 proxy-api と、Goa を導入して、API を開発していることについてです。
検索 proxy-api の開発には、工数を抑えつつ施策の追加・安定稼働を担保しなければいけないという要件がありました。
Goa には「API 定義書・Client・Server・ドキュメント」を自動生成する機能があり上記の要件を満たせるため、今回採用されたようです。
Go でウェブフレームワークというと私は echo を選択しがちですが、工数を抑えつつ、サクッと API を作成したいなどの要件がある場合は Goa が選択肢に入ってくるのだと勉強になりました。
登壇スライド:新卒が解説する DMM の検索 proxy-API の解体書
佐藤啓樹: 「GitHub Actions で Go のテストを並列実行しカバレッジレポートを作る」
佐藤啓樹(DMM ポイントクラブグループ - web チーム)の LT での登壇です。
弊社では CircleCI を用いて CI を実行する場合が多いのですが、CircleCI から Github Actions に乗り換えた際にテスト時間が 5 倍近くに伸びてしまったことに対する原因調査及び解決について発表されていました。
DMM には Tech Vision があり、これは開発者が日々の開発において大切にすべき 4 つの指標です:
- AGILITY: おそれず俊敏に動く組織をつくる
- ATTRACTIVE: 妥協せず魅力的なサービスをつくる
- SCIENTIFIC: 論理的な思考で事業をつくる
- MOTIVATIVE: 意欲的に成長する自分をつくる
今回の取り組みは、「制約を言い訳にせず、創造的な解決策を追求する」という姿勢で、まさに DMM の Tech Vision の実践例といえます。
登壇スライド:GitHub Actions で Go のテストを並列実行しカバレッジレポートを作る
渋谷瑞穂: 「Mermaid x AST x 生成 AI = コードとドキュメントの完全同期への道」
渋谷瑞穂(データ基盤開発部 - インテグレーションチーム)の LT での登壇です。
実際のコードから LLM を使用してドキュメントを自動生成することによってビジネスロジックを可視化するという登壇内容でした。
ドキュメントは作成してもいずれ更新されなくなってしまい放置されてしまう場合があるかと思います。
そのような状態を防ぐため、ドキュメントを AI で自動作成・更新させることで、常に最新に保つのは面白い試みだと思いました。
また、DMM.go#7 で発表していた N9tE9 さんの 「単体テストのスケルトンコードを自動生成するツールを作った/機能拡張している話」 を参考にしてロジックを考えたそうです。
登壇スライド:Mermaid x AST x 生成 AI = コードとドキュメントの完全同期への道
小林将太: 「PHP から Go へのマイグレーション」
小林将太(マーケティングテクノロジー部)の Short Session での登壇です。
DMM アフィリエイトという PHP で作成されたサービスを Go へリプレースする際の取り組みについて発表していただきました。
「ライブラリ選定や PHPer に対してどう負荷を減らして Go へリプレースするか」という考えが細かく練られており、もともと PHP を触っていた人ならではの視点が新しい発見になりました。
登壇スライド:PHP から Go へのマイグレーション
懇親会
全発表の終了後には、軽食とドリンクを用意し、懇親会を開催しました。
懇親会では、参加者同士はもちろん、DMM 社員と参加者との交流が行われました。
DMM 社員との交流では、登壇者への発表内容の深掘りや、DMM 社内の Go 言語の取り組みについてなどの話題が飛び交っていました。
発表自体は別々で行いましたが、懇親会では 2 つのイベントの参加者と合同で実施したため、とても盛り上がる懇親会になりました。
まとめ
本記事では、2024 年 12 月 11 日(水曜日)に開催された DMM.go #9 について紹介しました。
今回は、「Go 言語で開発する DMM プロダクト」をサブタイトルとし、登壇内容を実際に行われた開発に焦点を当てました。
次回のサブタイトルは、DMM.go #9 のアンケート結果を参考に決めていきたいと考えています。
そのため、候補としては以下の通りです。
候補のリスト
- DMM のプロダクトで Go を採用した事例
- DMM 社員が行った Go での個人開発
- DMM 社員が行った OSS へのコントリビューション
- Go の特定の機能やパッケージの深掘り
- Go + ソフトウェアアーキテクチャ
- Go のバージョンアップ
- Go を使ったサービスの CI/CD
- Go 特有のパフォーマンス
アンケート結果
終わりに
DMM.com では、Go 言語を使って開発しているエンジニアを募集しています。
ご興味のある方は、以下の URL からご応募ください。