All Articles

DMM GUILDに参加して来て楽しかったよって記録

DMM本社 ※写真は出社している様子を思い浮かべた脳内のイメージです

9 月 7 日~ 9 月 18 日 DMM さんのインターンシップ DMM Guild に参加して来ました! 自分が実装したタスクを振り返っていきたいと思います。

[issue1] Go+lambda の API エンドポイントを生やす

Golang で何かしらコードが書きたいと思っていたかつ、面白そうだってたのでアサイン。アーキテクチャに DDD を採用しており、あっあの本でやった構造だ!と少し興奮気味に作業を開始しました。 何度か自分でも API を生やす実装はしてきたので、repository→infra→dto→usecase と詰まるところなくスムーズに実装できたと思います。テストがきちんと sql mock で書かれていたり、scheme spy を使用して ER 図がめちゃくちゃ見やすく可視化されていたり、docker コマンド一発で環境が整えられたりなどすごく開発体験が良かったです。今まで、AWS lambda を触ったことはなかったのですが、実装をしていく中で概要が掴めました。(呼ばれてから起動する仕組みが面白い…)

[issue2] DB の ER 図を自動で生成+ホスティング

一つ前のプロジェクトで scheme spy がすごく便利だと思った矢先に面白そうな issue があったので次はこちらにアサイン。AWS にあるデータベースに接続して schemespy で ER 図を静的ファイル(html etc…)に書き出して github pages でホスティングする。さらに、定期的に実行して最新に保つようにするが目的の設計でした!

db が private subnet にあるため踏み台の EC2 を経由して接続しなくてはいけなかったり、docker 内に scheme spy の環境を整えていたため、ローカルのデータベースに接続してテストするときにつまる(Docker 内から host に通信するときには host.docker.internal という DNS 名が用意されている)などの試行錯誤を重ねて実装方針を考えていきました。

ただ結果として Docker 内に環境を整えていたのですが Docker の外と通信をする(中の環境から ssh でポートフォワーディングをしなくてはならず鍵を整えたりするのがめんどくさ s) のが難しかったので circle ci の machine 上に直接 scheme spy を動作させる環境を整えて実装し完成させることができました。

ただ、このあと ci 内で git push origin master をしていた関係で土日の間中 ci を回し続けてしまったことは秘密です。ご迷惑をおかけしました。

[issue3] CSV データから sitemap 形式でデータを変換する cli ツールの作成。

CSV のデータを GoogleBot と言った検索クローラーに、クロールさせる URL の一覧を出すサイトマップを書き出す cli ツールを 1 から設計して作成しました。こちらもドメイン駆動を意識して、file の書き出す操作の抽象化を意識して完成させました! golang にも xml へ変換する encoding/xml がありますが、自分は text/template を使用して実装しました。csv を一行ずつよみこんで go の構造体に落とし込んでそれを書き出すという単純な処理でしたが、なかなか骨がいる実装でした。とくに設計部分のファイルの書き出しをどのように書くべきなのか?に非常に迷い、最終的にはモデルに基づいた XXXWriter みたいなインターフェースを定義してそれを xml で書き出すように実装することに方向性をきめました。I/O 処理なので普通にインターフェース噛ませずに書いてもよかったかもとおもいつつ、設計は場数を踏んで経験していきたいって思いました。

/cmd
/repository
/infra
/usecase
/model
go.mod
go.sum

ゼロから設計ははじめてでしたが、csv のモデルのデータをきちんとモデルに定義して見やすい構成になったのではないかと思います。こちらは事業領域が自分の興味のある領域だったのでとてもやる気が出ました(略)

[issue4] html ファイルタグを取り除く

上の cli を作成している最中に気がついたのですが csv の中に html タグが含まれているものがあったので文字列操作を用いて取り除くスクリプトを上の cli に取り入れました。
タグを xml 特有のエスケープ文字に変更する関数を作成して model に set する際にそのカラムに挿入する前に実行されるようにしました。

意識してたこと

自分で実装を考えてみて、つまったら躊躇わずエンジニアさんに相談する。 自分で実装方針を立ててみて、試行錯誤して実装してみる。 好きなこともやる、面白いと思ったタスクをとる。 駄洒落を思いついたら times にきちんと記入する

楽しかったこと

discord をつなぎながら作業してたのがめちゃくちゃ楽しかった。雑談しながら開発することによって脳内が整理することができて捗りました。声がでかいのでうるさかったかもしれ n つまったときは画面共有で他の人に気軽に質問できる環境が最高でした。 times 文化もインターン生内で広まっていてとてもよい雰囲気だなと感じていました。

また、DMM ギルドの性質上、issue ごとに様々な部署を横断してプロジェクトのコードを読むことができたのでとても楽しかったです!エンジニアさんも部署ごとの特性がでていました。

また issue のポイント制が作業の粒度や難易度感を感じることができて自分的にはとてもおもしろかったです。

今回から Thanks と呼ばれる周りの人を助けるともらえるポイントを獲得したので Thanks 賞をいただきました!焼肉代に使わせていただきたいと思います。

これで僕の夏休みの予定は全て終了です! 秋も頑張ります!