blog

DeNAのエンジニアが考えていることや、担当しているサービスについて情報発信しています

2022.04.07 インターンレポート

文系学生エンジニアが体感!DeNAのエンジニアリングの考え方

by 濱野 夢斗

#python #vue.js #hr #internship

自己紹介

3月30日時点、インターンでHR(ヒューマンリソース)本部に設けられた開発部署に所属している濱野です。
HR本部に設けられた開発部署とはエンジニアリングとデータサイエンスを組み合わせ人材の最適配置によって事業の成功を助けるグループです。

私はその中でも社内ジョブボードであるOpenQuestを作っています。
このツールの機能を開発しながらインターンで得た知見についてシェアしたいと思います。
読んでくださった皆様が少しでも参考になればと思います。

OpenQuestについて

OpenQuestとは社内の募集ポジションの情報が掲載されており、社員が閲覧して興味のあるポジションの話を聞きに行き、マッチングすると異動をするようなツールです。
使っている言語は

バックエンド

  • Python(Flask)

フロントエンド

  • Vue.js

となっております。

インターンに至った経緯

就活でDeNAを受けており、内定をいただきました。
自分は文系出身でエンジニアリングの基礎や仕組みの部分を卒業までに経験を積みたいと思いインターンをしようと決めていました。
自分はそれまでチーム開発の経験もほぼ無かったです。
個人開発でPC向けのデスクトップアプリを作ったくらいでJavaScriptとNode.jsしかほぼ触ったことがなかったです。

なのでインターン前に人事の方にフロントエンドもバックエンドも両方触れるところが良いと希望しました。
さらにアーキテクチャの設計にも携わりたいなど結構わがままなことを言ってしまいました。
そこでちょうどいい部署があるということで紹介していただいたのがHR本部に設けられた開発部署です。

結果としてフロントエンドもバックエンドも触ることができ、DBにどう保存するかなどのアーキテクチャに関わる部分にも携わることができました。
またユーザー体験の考え方やどのようなプロダクトにしていくかなどエンジニアリング以外にも勉強になり、有意義な半年間でした。

半年間の業務の全体像

約半年間実際どのような機能を作っていたのかを書いていきます。

  • SlackにデイリーでMAUをフィードするようにする
  • 新規募集タイトルとURLをSlackに表示
  • 必要以上に表示領域を使っていた部分を一部表示と全表示を切り替える形でのUI改善
  • インクリメンタルサーチ時のキーイベントの衝突解消
  • リマインドメールの送付
  • ポジションに画像を追加できる機能
  • トランザクション管理
  • マッチングを増やすための新機能作成(DB設計から)

インターンが進むにつれて携わる範囲が増えていきました。
最初の方はユーザーから見えない機能やフロントエンドかバックエンドどちらかが多かったです。
インターンが進むにつれて、だんだんとフロントエンドとバックエンド両方通貫して作ることが増えました。
最後はエンドポイントやDB設計から関わらせてもらいデータの流れ全般を作ることができました。

加えてSlackやメール等他のサービスと関連してコードを書くこともできました。
また社内ツールですがユーザー(社員)にとってベストな体験は何かを実際に使ってもらいながら変更する経験はとても勉強になりました。
安全性やコードの可読性、トランザクションなど個人開発ではケアしきれていなかった部分の考え方や実装を行えたのは会社でのインターンならではだったと思います。

実際の業務の一日

業務時間は10:00〜18:00(休憩一時間)で週2回働いていました。
実際の1日のスケジュールとしてはこんな感じです。

1day schedule

週に何回働くかや何時間働くかは自分で最初に希望が出せたので、大学生活との両立もできました。
元々振り返りの時間などはなかったのですが、業務を振り返り次の週よりよく業務進行できるように追加しました。
かなり試行錯誤しながら最終的にはこのような形に落ち着きました。

ペアプログラミングという一人がコードを書いているところをもう一人が見て、意見やアドバイスをする時間がありました。
ペアプログラミングというものをやったことがなかったので最初はプログラミングしているところを見られるのが少し恥ずかしかったです。
しかし一番学びが大きいポイントでもありました。
自分が当たり前だと思っていたことももっと良い方法があったり、他の人のプログラミングを見てどういう思考で考えているかを知ることができるのでとても有意義な時間が過ごせました。

午後会はいつも楽しく、毎回気分転換や自分の知らないフィールドの新たな知識を得られる良い場所でした。
読書会も開催されており、自分が紹介した本や卒業論文も読んでくださり、感想をシェアできて嬉しかったです。
またタスクはチケットで管理されており、やる事は誰かに聞かずとも常に確認できるようになっていました。  

インターンを通しての学び

サービスを作る上での考え方の変化

DeNAのエンジニアの方はなぜこうするべきなのかというところに必ずロジックがあるので一つ一つの話し合いが非常に勉強になりました。
特にメンターの方にはプログラミングやコンピュータサイエンスそして、ツールのことまで優しく教えていただき本当に頭が上がりません、、
自分は個人開発の経験しかなかったので動けばいいや精神でやってしまっているところがあり、そこが最初かなり苦労しました。
ただ、インターンを進めてペアプログラミング等を通してセキュリティーやコードの保全性を考えてプログラミング出来るように段々となっていきました。
今自分の半年前のコードを見ると目がクラクラします(笑)。

またできるようになったことも増えていきました。
最初はVSCodeのショートカットや便利なプラグインなどを教えてもらい、開発の前段階を整えるところからでした。
そこからPostmanやDB管理ツールのTablePlusといったツールを使いつつエンドポイントの開発や、テーブル設計そしてテスト駆動式の開発など様々な経験をしました。
テスト駆動式の開発ではテストを作るのが大変でしたが、テストが通った時はとても嬉しかったのはいい思い出です。

コーディングでの変化

実際の自分のコードを書く作業に落とし込んでも変化がありました。
これは私のインターン中にあった失敗から来ております。
画像の保存機能そして保存した画像をSlackに送る機能を作っていました。
サイトで見たコードサンプルとSlackの設定や画像の変換、保存方法が違い、コードを修正して結局SlackAPIの公式のサイトを見ながらコードを書いていきました。
そしたらかなりの時間がかかってしまったということがありました。

この経験から自分たちの前提条件を踏まえてどのような流れにした方が良いのか考えてコードを書くことで保全性も上がり、結果的に早くなると思いました。

以下のような順序でやっていたものが、、、

  1. やりたい機能
  2. その機能を作っているコードを探す(Qiita等)
  3. コピペをして改修

安全性の面でもコードの可読性の部分でもコピペよりも書いた方が良いと思い、以下のような順序に変わっていきました。

  1. やりたい機能
  2. 設計を考える(データの流れ)
  3. コードを書く(同じプロダクトで同じようなことを行っている場合はその部分を参照)
  4. わからないところはなるべく公式HPを見る(VueやFlask)

安全性や動作の速度などが求められる現場でのチーム開発ならではの学びがたくさんありました。
チームでの開発ならではのコードレビューや意見交換など他の人の意見を聞くということは自分の能力を高める意味やコードの理解に非常に有効だということが分かりました。
今後個人開発するときもペアプログラミングやコードレビューを行いたいと思います。
またコーディングの際も設計を考えるところからしっかりやるようにしたいです。
このような考え方を学べたこの半年間は非常に有意義でインターンをやってよかったです。
この記事がインターンに興味のある方の一歩踏み込む手助けになれば幸いです。

最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。

recruit

DeNAでは、失敗を恐れず常に挑戦し続けるエンジニアを募集しています。