見出し画像

電通デジタル就業型インターンの参加記録(2021年2月期エンジニアコース 渋谷)

自己紹介

はじめまして、電通デジタルのインターンに参加した渋谷(id: sivchari)です。
普段はGo言語でツールやAPIを作成しています。

- レイヤードアーキテクチャのスケルトンツール
- 構造体からddlを生成するツール
- 静的解析でキャパシティ0のスライスをチェックするツール

またOSSへのコントリビュートなどを最近頑張り始めています。

現在大学3年生で、学校ではフランス語を学んでいます。
プログラミングは大学の学問とは別に個人的に学習し始めました。

僕が情報系とは全く縁のないフランス語という専攻からエンジニアになることを決めた理由は2つあります

1つ目はプログラミングをすることがただただ楽しかったということです。

極めて単純な理由ですが、僕にとって自分の想像したものを自分の手で形作ることができるプログラムという物がとても魅力的でした。他にも完成した時の達成感や、毎日何時間もコードを書いていても苦ではないことからも自分に向いている職業なのだろうと考えました。

2つ目にプログラムと文学に共通項を見出したことです。

少し話はそれますが、小説などの文学を読む楽しさは、行間や文脈を読み取り解釈していくことだと僕は考えています。そして、プログラミングも自分以外のエンジニアが書いたコードをコンテキスト(文脈)から読み取って、適切だと考えうる実装をしていきます。

さらに踏み込むと、文学では作家が自分の描きたい世界を紙に文字を綴ることで表現するように、エンジニアはエディターにコードを書くことで、個人や企業が表現したい世界をwebの世界に作り上げるということです。そして小説と異なりエンジニア、ひいてはプログラミングという世界では自分が作り上げた成果物を披露する場所に限りがありません。

上記の理由から、僕は未踏の領域であったエンジニアを目指すようになりました。

開始前の技術スペック

電通デジタルのインターンに参加する前の僕の技術スペックです。

【フロント】
- React (reduxとhooksでなんとなくかける感じ)
- TypeScript (立ち位置的に微妙ですがこちらに記載します)

【バックエンド】
- Golang, PHP, Python, Rust, Nim
- RDBMS/NoSQL
- MySQL, PostgreSQL, MongoDB, Redis

【インフラ】
- AWS (EC2 VPC ELB lambda etc...), VPS, Docker, docker-compose, CircleCI, GitHub Actions

インターンの詳細

インターンで行った内容や使用した技術について紹介します。

就業型インターン

学生の参加するインターンにはワークショップ形式で与えられた課題をクリアしていく形式と、実際のプロダクトに関わる就業型のインターンの2種類があるかと思います。

電通デジタルのインターンでは後者の就業型のインターンでした。下記で、僕が電通デジタルへのインターンを志望してから、実際に業務を始めるまでの話を詳しく説明します。

志望動機

サポーターズという就職活動のサービスがあり、サポーターズが主催する「逆求人」というイベントに参加し、電通デジタルの社員の方と面談させていただいたことがきっかけです。

実際に人事の方と何度かお話しさせていただく中で、手厚いサポートをしていただいたことと、数多くの提携企業やユーザーを抱える企業が、どのように情報を扱い業務を行っているかに強い関心が生まれたため、参加させていただきました。

配属先

社内業務を改善するプロダクトの開発チームに配属されました。

使用した技術

バックエンドの開発では、以下の技術を使用しました。

- Golang + gRPCのAPI開発とmock テスト
- Dockerを利用したコンテナ運用とデバッグ
- gRPC、gRPC Gatewayの概念の理解

業務内容

今回行った業務内容は、現在Pythonで動いている内製ツールのプロダクトコードをGolang + gRPCに置き換えるというものでした。 業務に取り組む前に、なぜ置き換える必要があるのかという話であったり、置き換えを容易に行えるような設計がされている部分を見ることができて、保守性や拡張性ということを体験できました。

gRPCについては実際に利用したことはありませんでしたが、事前にハンズオンをしていただけたことや疑問に丁寧に答えていただけたため、特に抵抗なく理解できました。

開発はスクラムで行われており、スプリントを1週間として、頻繁なコミュニケーションや方向性の相違なく集中して開発を行う仕組みが整っていました。

1日の進め方

インターンの業務時間は09:30~17:30でした。就業型ということもあり、実際に社員の方と同じタイムスケジュールで業務を行います。 実際の1日のスケジュールを紹介します。

09:30~12:00 午前業務

メンターの方と1日の業務確認を行う日もあれば、人事の方と面談を行う日もあります。

この時間は困っていることを質問することも、軽い雑談をすることもできます。例えば、僕の場合はテストコードを書いていく上での考え方というプロダクトに関連するものから、就職までにどのような勉強をするかといった将来に関わることなど、幅広い内容について話しました。

午前の業務では日によって、スクラム開発におけるSprint Planningと呼ばれる会議にも参加しました。Sprint Planningとは、スプリントでの進捗や次のスプリントで行う内容を決めていく会議です。1つ1つの機能に対してしっかりと会話をしており、当然のことながら個人開発では味わえない念密なすり合わせに参加することができたのはこのインターンで1番貴重な体験だったと思います。

お昼休憩は12:00~14:00時の中で好きな時間に1時間自由に取るという形式だったので、キリがいいところまで進めることなども行いやすい印象でした。

13:00 ~ 17:30 午後業務

午後は都度質問があれば、通話を繋ぎながらPull Request(PR)レビューをしていただいたり、置き換えるAPIの開発を行ったりしました。

午前で行われたSprint Planningとは別に、Retrospectiveと呼ばれる会議にも参加させていただきました。Retrospectiveでは1週間の業務について、KPTフレームワークをアレンジしたものを利用して行います。Google Jamboardで下記の画像のように行います。

画像1

こちらも1週間に1回のため、Sprint Planningと同日に行いました。またスクラム開発ということもあり、毎日の最後にはDaily Scrumという進捗共有会がありここでも必要であれば、機能についての若干のすり合わせを行います。

よかった点1: Pull Request(PR)レビュー

個人開発などで体験できないものの1つがPull Request(PR)レビューかと思います。

僕がPull Request(PR)を出すほど、メンターさんにも業務があるはずなのに、どんどんレビューしていただけるため、頭が上がりません。ありがとうございます🙇‍♂️

よかった点2: 質問への回答がとても丁寧

業務の質問があれば、すぐに答えていただけて進捗を出しやすい環境が整っている印象です。また今後勉強していくといい内容や考え方含めて、とても話しやすくメンターの方とインターンするのは楽しいと誰でもなります。本当に楽しかったです🐱

よかった点3: 業務中に突如訪れたOSS貢献のチャンス

実際に業務を進めていく中で、利用したいライブラリがあったことからHomebrewでインストールしたところ、バージョンが0.0.0-devという明らかに開発中のバージョンでインストールされてしまうというアクシデントが生じました。既存プロダクトとバージョンを統一するため、バージョンを固定してインストールをし直したり、ライブラリのバージョンを探してみても上記のアクシデントが改善されないままでいました。

そこでライブラリの更新履歴を見に行ったところ、直近で変更が加わっていました。この更新履歴から原因を特定していくと、HomebrewのFormulaに問題がありそうだということがわかりました。しかし僕自身の見落としの可能性もあるため、他の要因も調べてみても他の要因が見つからず、issueをあげてみると予想通り問題がありました。実際にあげたissueが下記の画像です。

画像2

この経験から原因の発見や裏付けとなる証拠の取り方など、今後のOSS活動でも開発でも活用できる知見をたくさん学べました。また上記のissueに関しては次の日にはすでに修正されており、Homebrewの開発の盛り上がりを感じ取ることができました。何よりも自分の指摘が世の中のエンジニアのために取り込まれたという事実に形容し難い、感慨深い気持ちがこみ上げました。

画像3

こうだったら嬉しい

今後参加する学生が、もしかしたらつまづいたり、不満に思うかもという点を説明します。

バックエンドのアーキテクチャについて

バックエンドのアーキテクチャはクリーンアーキテクチャを簡略化したような設計が行われています。僕自身はアーキテクチャがとても好きなこともあり、特に影響なく業務に取り組むことができました。

しかし、アーキテクチャにあまり関心がない方や気にせず開発してきた方にとっては、なぜこのような設計なのか、簡略化している理由について、依存関係についてなどを理解しない限り、開発の進捗で出しにくいように思いました。

逆に僕のように関心を持っている方が参加すると、各層の責務の考え方などを開発するプロジェクトベースで話すことができるため、とても楽しいと思います。

コードを書いている時間について

前述の「1日の進め方」でも説明したように電通デジタルの開発手法はスクラム開発です。スクラム開発では関連するイベントや打ち合わせが頻繁に生じるので、勤務時間のすべてをコーディングに費やすことはできませんでした。そのため、どんどんコードを書いて進捗を出し続けるという期待値でいる方は、多少の空回りが生じる可能性があります。

しかしスクラム開発について理解し始めると、コードを書く時間が減っているのではなく、無駄にコードを書く時間がなくなっただけという逆説的な理解が絶対にできるはずです。それでも上記のような期待値通りでないと嫌という方にとっては、相性が悪いかなというように思います。

まとめ

今回のインターンにあたって当初からサポートし続けてくれた井上さん、インターン生の僕を暖かく受け入れてくれたメンターの石原さんと関本さんをはじめとする開発部のみなさまのおかげで、とても充実した内容となりました。特に関本さんは業務やそれ以外のことについてもとても色々なことをお話しできて感謝しかありません。

インターン初日に河内さんに「何か持ち帰れるものを見つけて帰ってください」とお声がけいただきましたが、この言葉に対しては、100%達成しましたと言うことができます。

最後までお読みいただきありがとうございました。