Log.d("yt8492", blog)

Kotlinってかわいいよね…

DeNAのサマーインターンに参加しました

こんにちは、マヤミトです。 8/29, 30に開催されたDeNAさんのサマーインターンに参加させていただきました。(ブログ書くのが遅くなって申し訳ない…)

インターンの概要

クソアプリ伸びしろのあるアプリを期間内で最高のアプリに仕上げるという内容でした。去年も同じような感じだったそうです。

例年と違う点として、期間が2日間と短くなり、昨今のコロナ禍の事情でオンライン開催でした。

参加までの経緯

申し込み

去年のインターンの参加者のブログを読んでいて、面白そうだし今年もやるなら申し込むか〜という軽い気持ちでエントリーしました。

面接

エンジニア面接が2回ありました。1回目は今までやってきたことだったりKotlinに対する愛を語ったりしていたらいつの間にか終わっていたという感じでしたが、2回目はGMailのアプリを見ながらこのアプリがどのように作られているか想像して答えるという結構ハードな内容でした。自分が覚えている範囲だと

  • メール一覧画面のレイアウトの構成
  • メールを選択するとどのような処理が走るか
  • ツールバーがどのように実装されているか

これらを聞かれて(テンパりながら)答えた記憶があります。Androidアプリ開発の知識がかなり要求される面接でした。AndroidDeNAインターンに参加したい人は、一人でAndroidのネイティブアプリを作り切る経験と知識はあったほうがいいかもしれません。

キックオフイベント

インターンの1ヶ月前にキックオフイベントがオンラインであり、そこでチーム分けが発表されました。参加者20人を、

  • Android 1チーム
  • iOS 2チーム
  • Webフロント 2チーム

の5つに分け、それぞれクライアントサイドとサーバーサイドが2人ずつという構成でチーム分けが発表されました。

チーム分けの他には技術要件などが発表され、特にクライアントサイドは細かくライブラリなどの指定もありました。

チーム分け発表後のチーム懇親会でZoomを通してチームメンバーとの顔合わせをし、当日に向けてのやっていきを高めていました💪

インターン1週間前

DeNAからインターンに必要な物品が入ったダンボールが届きました。

f:id:yt8492:20200919005026j:plain:w500
インターンキット

自分はAndroidのチームなので例のクソアプリの入ったAndroid端末が届くと聞いていましたが、中を開けるとスマホ以外にも食料(レトルトのカレー、ハンバーグ、牛丼、うなぎ)やビール、おやつ、メッセージカードなどが入っていて驚きました(中身の写真撮り忘れた…😭)。特に驚いたのはメッセージカードで、インターン参加者ひとりひとりに向けて全員分を用意したそうで、愛を感じました。

インターン用のスマホが届いたことで、参加者で集まってお触り会をしました。見た目は普通のチャットアプリでしたが、

  • チャットアプリのくせにリアルタイムでチャットが更新されない
  • チャットルームやチャットの内容などのデータを全件取得しているような挙動をする(おそらくページネーションなどを一切していない)
  • 細かいUI/UXが悪い

など、なかなかのクソっぷり伸びしろをかなり感じました。チームメンバーで集まってHackMDに問題点や改善案を書き出して当日に備えるなどしていました。

インターン当日

いよいよ課題の詳細が発表されました。自分達インターン参加者はDeNAのエンジニアという設定を与えられ、以下のようなシチュエーションで課題に取り組むことになりました。

  • コロナ禍の中、DeNAはチャットアプリを新規事業で立ち上げた
  • このアプリは巣ごもり需要のなかで一定のユーザーを獲得したものの、突貫で作ったこともあり様々な問題が発生し、昨晩からメンテに入っている
  • もともとDeNAの別事業で働いてた4人のエンジニア(つまり参加者)は急遽この事業にアサインされ、メンテ作業に参加する
  • 明日夜にオンラインで開催される大型フェスのコミュニケーションツールとして採用されることが決定しており、このままだと予想される負荷に耐えることができない
  • 10000発言/秒、10万人同時接続に耐えられるように改修してほしい
  • UI/UXも改善してほしい

完全に「ヒエ〜〜〜〜〜」となりながらも2日間のインターンが始まりました、

なお、実際にDeNAではこのような状況はありえないらしいです。安心してください。

まずチームのZoomで話し合って問題点などを洗い出し、

  • ページネーションの実装(サーバー、クライアント共通)
  • ポーリングによるリアルタイム更新の実装(サーバー、クライアント共通)
  • 負荷対策
  • UI/UX改善

これらを中心に、「現状が満たしていない最低限のチャットアプリとしての機能を実装しつつ、フェスに向けて負荷対策などをする」という方向性で取り組むことになりました。

去年と課題はほぼ同じだったようですが、去年よりも期間が1日少ない中、Android側は

  • ページネーションの実装
  • ポーリングによるリアルタイム更新の実装
  • もともとなかったログアウト機能とアカウント情報画面の実装
  • AndroidらしいUI(BottomAppBarなど)に変更

これらを自分ともう一人のチームメイトの2人で実装していきました。もう一人のAndroidの方が大変優秀で、自分が苦手なUI/UXまわりの改善をかなりやっていただきました。自分はロジックまわりの改善をメインに担当し、いい感じで役割分担できたかなと思います。チャットのリアルタイム更新をなめらかに実装できなかったのが個人的に悔いが残った部分でした。もっと精進します……

サーバー側は惜しくも想定された負荷の対策までは間に合わなかったのですが、ページネーションやリアルタイム更新に必要なAPIをほぼバグなく実装してくださり、デモも問題なく動かせて非常によかったです。

結果発表では、Webフロントのチームが優勝でした。負荷対策とUI/UXの改善、フェス向けの機能改修などがバランス良くなされていました。

どのチームも課題の捉え方と改修の方向性に差があり、発表を聞いていて大変面白く、また参考になりました。

まとめ

非常に濃い2日間でした。残念ながら優勝は逃したものの、出来上がった成果物には自分達なりの個性が出ていたと思いますし、2日間でやれることはやった感があって満足でした。レベルの高い参加者やメンターの方々からエンジニアとして刺激を受けて、もっと精進しようという気持ちになりました。今回の経験を活かし、Androidエンジニアとしてさらなる高みを目指したいと思います。

最後に、参加者のみなさん、メンターのみなさん、そして一緒に頑張ったチームのみんな、ありがとうございました!