見出し画像

DMM GUILDに参加した話


はじめに

DMM GUILDというDMMさんが開催しているちょっと変わったインターンシップに参加していたので体験記を書いてみます。
最初に一言感想を言っておくと、すごく楽しかったし経験になりました。

DMM GUILDについて

DMM GUILDは珍しいクエスト型(ハッカソンという意味ではない)のインターンとなっていて、DMMが展開する数多くのサービスのIssueが100個以上たっていて、取りたいものを選択して解決していくというインターンになっています。
それだけでなく、ポイント制度により他のインターン生との競い合いがあります。このゲーム性も楽しい点がいくつかあったため後程触れます。
https://dmm-corp.com/recruit/intern/engineer/guild/

DMM / DMM GUILDの雰囲気について

インターンが始まって最初に言われた一言が「皆さんを社員として扱います」という一言でした。これはその通りで、タスクで詰まったときに社員さんとすぐにペアプロしよう!となって一緒に解決したり、何ならSlackも公開チャンネルは全てみられる状態なので部署によっては普段から使ってるチャンネルでのやりとりというパターンもありました。

今まで参加したサマーインターンは社員さんはあくまでメンターという扱いがほとんどだったため、本当に実務型インターンや就業している感覚で2週間働けるというのは面白かったです。

DMM GUILDのゲーム性について

さて、DMM GUILDのゲーム性が面白かったという話をしましたので簡単に説明していきます。

  • 具体的には以下のルールで運用されていました

  • チケットごとにポイントが割り振られている

  • 基本的に自分が進行できるチケットは一度に一つだけ

    • Review待ちになったら次のチケットに着手できる

これだと、他の人を助けず自分が得意なタスクを取るのが分かりやすい戦略になるのですが、ここでThanksポイントというものが登場します。

  • 一人最大10回まで、助けてもらった人にポイントをあげることができる

  • これは残っても自分のポイントには加算されない

つまり、難しいタスクをやってたりビルドが長い時の待ち時間で他の人の手助けをすることでポイントを稼ぐことが可能になります。
なので助けることが自分のポイントに繋がりますし、自然にインターン生の間での会話が増える効果もありましたし、凄い上手いシステムだなと思いました。

どんな仕事をしたか

Dev環境にminioを導入する

AWS S3の互換ストレージとしてminioがあります。minioはOSSで、Dockerでネットを介さずに使うことができるのですが、その現場ではDevでもS3につなぐ必要がありました。
そのため、DevではDockerコンテナを立ち上げてそこに画像を保存するようにするというようなタスクでした。
最初に選んだチケットだったため、簡単めなタスクを選んだのですんなり終わりました。

CircleCIの速度改善

こちらは割と難易度が高めに設定されていたのですが、方針が明確でキャッシュを保存して再利用するようにするというものだったのでminioのタスクと同様にすぐに終わりました。

閑話:方針転換

GUILD応募当初~実際にインターンが開始するまではバックエンドやインフラタスクをやるぞ!という気合を出していたのですが、いざ始まってみると

  • インフラ・バックエンドのチケットが少なく、後半にやることがなくなりそう

  • 自分よりインフラ・バックエンドが出来そうな人が多い

ということが判明し、前者は実際に後半で他の参加者の方もタスク選びに苦心している感じでした。
逆に一番チケットが多かったジャンルはAndroidアプリのタスクですが、参加者の中にモバイル経験者がいないので競合しません。
そこで、未経験だけどチャレンジしてみるか!!となりこれ以降のタスクは最後を除いて全てモバイルのチケットを取りました。最終日にも様々なポイントのタスクが残っていたため仕事に困らなかったのは大きかったです。

補足しておくと、今年がその傾向があったというだけで例年モバイルチケットに偏るということはないと思います。均等なことも、逆にインフラが多い年もあるでしょう。
私の代がモバイル多くてインフラ少なかったからやめよう、とは考えなくて大丈夫です。

DEV/STGなどの環境によってアイコンを変える

ということで、Kotlinの知識がなくても行けそう!ということでこちらのチケットを取ることに。
これはタイトル通りのチケットで、ライブラリを入れて対応するか、drawableを環境ごとに作成してアイコンを設定するようにするかといったところはAssigneeに委ねられてました。
そのため技術選定から始め、Androidのビルドで詰まったのでそこのヘルプをお願いしつつ何とか完了しました。
そもそもの前提知識が少ないので、ペアプロしながら基本的なところまで教えていただけたので、すごく勉強になりました。

Flutterプロジェクトでgradle(Groovy)をgradle.kts(Kotlin)に移行する

こちらがAndroidチケット2つ目になるのですが、なんとDMM GUILDのチケットの中では最高難易度に設定されている物です笑
先ほどもあった、Kotlinの知識がめちゃくちゃいるというわけではないかつ、ビルドシステムの更新をやれる機会は少ないので絶対面白いだろうなということで選択しました。
これは難易度通りかつ、自分が予想していたとおり面白いタスクでした。公式の移行ガイドやドキュメントをみつつ、100個ほどエラーをつぶしてる間に何となくGradleの動きが分かってきて面白かったです。
また、流石にGradle自体に詳しい人はあまりいないということでPullRequestは公式ドキュメントをとにかくたくさん引用するように指示されました。
一番時間がかかったし苦労したタスクでもありましたが、Gradleのことを知っておくとAndroidの開発を今後もしやるときに便利でしょうし何より達成感が一番高かったので取って良かったなと思っています。

Ktlintの静的解析のエラーを出来る限り解消する

せっかくだし多少はKotlinのプロダクトコード触れたいよね!ということで静的解析のエラーをつぶしていくことに。
こちらは特に触れることはありません。
ここからはラスト2日だったので、確実に終わるタスクを選んでいきました。

Kotlinプロジェクトにdetektを導入する

このタスクは確かラスト6時間くらいのタイミングだったので本当に設定だけで終わるしとるか!みたいな感じでした。
未経験のAndroidタスクに振り切ると決めた時点で総ポイント自体は気にしていなかったのですが、どうせなら他にも出来そうなタスクとってみたいよねと…

Streamlitのリファクタリング(という名の機能追加)

こちらはラスト5時間くらいでとったのですが、すぐ終わると思いきや割と終了条件が多く、間に合いませんでした。

  • 非プログラマにもわかりやすい機能を増やす

  • AIの出力テキストをコピーできるようにする

  • 一回のクエリで終了してしまい、コンテキストを維持して会話ができないため、コンテキストを維持できるようにする

  • UIが崩れるところがあるので修正する

  • リアルタイムでAIの出力を表示するようにする

これを全部5時間でやるのはOpenAI APIをまともにさわったことがないので流石に厳しく、途中で終了しました(泣)

結果

3つも賞をいただきました!ありがたい!!


正直上位ランカーに入ったのは自分でもびっくりです。
振り返ってみればAndroidを取りに行ったこと自体は自分の中でもチャレンジだったのですが、他のメンバーもモバイル未経験者しかいないという状況だったので、どんな難易度のタスクでも取り放題で、後半までタスクに困らなかったというのは大きかったと思います。
実際2週間目は、フロントエンドとバックエンドのタスクはほぼほぼ枯渇していて、テストコードを書くかモバイルに行くかという2択になっていました。

感想

まず、ペアプロや質問にすぐに対応してくれた各事業部の方にお礼をしたいです。本当にありがとうございました。

未経験だけどモバイルに突撃しました!はいろんな人に驚かれまして、インパクトも残せたし、いきなりプロダクトコードに触れるという凄く貴重な体験をさせていただきました。
ほぼ初めて触れたKotlinやFlutterはこれをきっかけに色々出来るようになっていきたいなと思っています。
2週間を通じて本当に密度の高い体験ができたかなと感じています。

ここからは本当に個人が感じたことを書くので信憑性20%くらいで書いてください。

スプリント外のタスクが多い

これは人によっては良いかもしれないし、悪いかもしれません。
スクラムでいうところの、顧客の価値になりずらいが、技術的にいつか負債になりそうというチケットが多い印象を受けました。
これは一見すると悪い印象を受けるのですが、GUILDの「いろいろな事業部のチケットをこなしていく」というルールの前提が入ると話が変わってきます。

  • 1日、下手したら数時間で事業部が変わるので新規機能を実装してもFBを貰うまでいかない

  • 技術負債の解消はターゲットがその事業部の社員さんになるので、PRにすごく喜んでくれてモチベーションになる

という点が凄く良かったなと思っています。
逆に、一つのプロダクトにコミットしてFBまでユーザーからもらいたい!みたいな人にとってはあまり合わないかもしれません。
自分にとっては、色々な事業部のプロダクションコードが見れて、未経験な技術に複数チャレンジできるというのが凄く面白くあっている環境でした。

対等な関係

いい意味で上下関係が在りませんでしたし、「学生だから」みたいな発言が一切ないというのが凄く印象的でした。
PRのレビューについても社員の方の同等の扱いだったと思います。実際に運営されているプロダクトに携わりたいという方には良いインターンなのではないでしょうか。

戦略は柔軟に、目標は複数立てておくと良い

どんなチケットが多いか、あるいは少ないかはインターン初日までわかりません。「俺はこれしかやりたくないんだ!」みたいな人よりは「いろいろちょっとだけ興味があってプロダクションコードに触りたい!」という人の方が向いている気がします。
これが出来ないとやる気が0%になるというのであれば、それが確実にできるコースに行くべきです。
状況に応じて柔軟にやり方を変えれる方のほうが楽しめると思いますし、様々な経験が得られると思います。目標を複数というのも似たような話で、目標を立てたとしても、そもそも目標が達成できる条件になっているかはインターンが始まってからでないとわかりません。
複数立てておいて、8割達成できたらめちゃくちゃ頑張った!!くらいに考えておいた方がモチベーションも保ちやすいと思います。
たとえば私の場合、

  • いろいろな事業部のタスクをとる

  • 未経験のタスクを取る

  • 一日1タスク(努力目標)

みたいな形の目標をいくつか立てていました。

最後に

兎に角いろいろな経験が出来て楽しかった!という一言に尽きます。サポートしていただいたDMMの方々、改めてありがとうございました。

このブログを読んでDMM GUILDに興味を持つ方々が一人でもいたら幸いです。

この記事が気に入ったらサポートをしてみませんか?