Opt Technologies Magazine

オプトテクノロジーズ 公式Webマガジン

オプトテクノロジーズのインターン事例紹介

alt

今夏もインターン募集をしているので、過去のインターン事例について改めて紹介してみようと思います。

あいさつ

こんにちは! オプトテクノロジーズ シニアエンジニアの @sisisin です。
弊社では新卒のインターンを定期的に募集しており、今夏も2020年卒向けのインターンを募集しております。
https://www.opt.ne.jp/creative/opttech_internship/

私は去年の夏のインターンでメンターとして関わったのですが、その立場からインターンではどんなことをしたのか、事例を紹介していこうと思います。

今年のインターン募集要項について

期間

連続する2週間〜1ヶ月で実施予定です。
開始日や期間については相談の上決めるので、応募者さんにとって参加しやすい日程にしてもらえます!

やること

過去のインターン同様、実際のプロダクト開発に携わってもらいます(過去の実績については後述)
実業務ならではの大きなコードベースと複数人での開発に携わることで、個人での開発では出来ない体験を得られます。
Web系のプロダクト開発の現場というものを肌で感じられるので、キャリアを考える一助になれるはずです。

過去のインターン事例紹介

選考フローについて

弊社インターンの選考フローでは面接だけでなく、技術課題も実施しています。
課題は元RedCoderのシニアエンジニア潮田が作成しており、その課題についての解説記事も公開しております。

http://tech-magazine.opt.ne.jp/entry/2017/12/25/182628

現場での作業

募集要項にある通り、実際のプロダクト開発に携わってもらいました。
今回紹介するのは、https://opt-technologies.jp/index.html#product に記載されている、ADPLANというプロダクトでのインターン事例になります。
ADPLANはWeb広告の効果測定サービスで、バックエンドはScala、フロントエンドはTypeScriptで書かれた大規模サービスです。

タイムスケジュール

一日のタイムスケジュールはこんな感じになります。

時間 作業
10:00 出社・作業開始
12:00~14:00前後 昼食(大体このうち1時間ぐらい)
14:00 作業再開
19:00 作業終了・ボドゲ会などの部活参加(任意)

今回は10:00~19:00で来てもらいましたが、時間については相談の上、調整出来ます。

初日

会社の事務的な説明をし、PCをお渡ししたら早速プロダクトに入ってもらいました。
PCはMacBookProを支給しました。事前に好みをヒアリングしてキーボード配列もインターン生に合わせたものにしております。

最初にプロダクトや開発フローの説明をして、ごく簡単なタスクを渡してPull requestを出してもらうまでを初日でやってもらいました。

二日目〜

二日目からは本格的な開発への参加となります。

2017夏のインターンでは、社内向け管理画面での代理店一覧画面作成のタスクをお願いしました。
社内の管理ユーザーが見るための画面で、広告代理店が広告運用をするための区分として存在する「代理店」を全アカウント分一覧表示する画面です。

画面イメージ 代理店一覧画面

画面の要件としては以下のようなものがありました。

  • 代理店を一覧で見れて、紐づくアカウント(= 広告主)が表示されている
  • 代理店が安全に削除できる

「安全に」というのがキモで、代理店はマスタデータになるためいろいろな場所から参照されている*1ため、どこからも参照されていないことを簡単に検証しにくいデータになっています。
例えば、とある代理店が作成・入稿した広告に関する計測・集計が既にされていた場合に、その代理店を削除してしまうと、「過去に計測された広告クリックのレコードから参照したい代理店IDがない」というような状況が発生してしまいます。
この機能は以上のような状況が発生しないように実装する必要がありました。

この時は、「安全に」を実現する方法は敢えて明確化しないでタスクとして渡し、インターン生の方でどうあるべきか?を考え、議論・検討する余地を残した状態で作業をお願いしました。
結果としてインターン生の方には、「どういうシーンで消したいというユースケースが発生するのか?」・「消したときのシステム的な影響範囲はどのぐらいか?」・「消すべきではない代理店が消えたときのリスクはどんな事が起こるか?」をヒアリング・調査してもらって実現方法の提案を出してもらい、リードエンジニアの人と相談の上仕様の決定までやってもらえました。

また、実装面でもScalikeJDBCというライブラリのQueryDSLという機能で複雑なリレーションを持ったSQLを表現する必要があるという手応えのある内容になり、技術顧問のがくぞ(@gakuzzzz)さんにも助言をもらいつつ実装を進めてもらう事になりました。

また、作業的には画面を1から作る内容だったので、サーバサイドとフロントエンドをインターン生とメンターである自分で分担して着手し、どういうインターフェースで値をやり取りするか相談したり、双方作り終えたタイミングで動作確認したりと言った作業お互い協力しながら進めるといった、複数人開発ならではの作業をしていきました。

最終的に、インターン期間内に現場のエンジニアとの共同作業やプロダクトオーナーやエンジニアと設計の検討をしながらもきちんと画面を完成させ、プロダクトオーナーへお披露目してリリースまで至ることができました。 メンター的に考えていたインターン生に体験してもらいたい事は一通りやりきってもらえたな、という気持ちでした。

お披露目の図(イメージ)
お披露目の図

開発以外のことでは、社内勉強会や開発部全体定例といったオプトテクノロジーズでのイベントに参加してもらったりもして、オプトテクノロジーズがどういうことを普段やっているのかを見てもらったりしました。

最終日〜

最終日にはお疲れ様会ということでオプトテクノロジーズのメンバーにも声をかけて皆で焼き肉にいきました!
予定していたタスクも終えられ、無事にインターンを終えられそうで胸を撫で下ろした記憶があります。

(二次会まで行って、インターン生の方がバスに乗り遅れそうになるというトラブルもあったのは肝を冷やしましたが(笑)

その後

2017夏に来てもらったインターン生の方には、プロダクトの状況と本人の希望を加味した上で、アルバイトにお誘いしました。
住まいがオフィスに通えないところなので、基本的にフルリモートの週2で勤務してもらっていて、インターンのときと同じプロダクトで引き続き開発をしてもらってます。
頼れる戦力の一人になってくれていて、助かっています。
声をかけてみて良かったなという気持ちですね。

振り返ってみて

当初の目論んでいた、現場での実際の開発タスクを実装・設計・リリースまでの流れをやってもらうことや、メンバーの一員として他のメンバーと協業して開発を達成するということを体験してもらえたので良かったです。
自分がメンターやる上で、「インターン生には自律的に考え、ぶつかった課題を自分の力で解決へ進めていく(質問はもちろんOKだが、最終的に作業の完了に責任を持ってもらう)」ということをしてもらおうと考えて挑みましたが、今回のインターン生はそれに充分に応えてくれたのがメンターをしていてすごく楽しかったです。
なにより一緒に仕事をしていて気持ちよくやれたと感じられました。

インターン生の方からも、以下のような感想をもらっています

右も左もわからなかった私に対して丁寧にプロダクト及び周辺技術に対して教えてくださったこともあって割と小気味よく進められてたと思います。
実際のプロダクトのコードを読み解きながら、どうしたらうまくいきそうかを考え、ブラッシュアップしてもらうという流れはすごくありがたく、楽しかったです。
任されたタスクも、正直最初これは無理だなぁと感じましたが、色んな人の助けを借りつつなんとか達成できてよかったと感じました。

2017夏のインターンはオプトテクノロジーズにとって初のインターンの上、メンターとしては自分がトップバッターだったのですが、つつがなく終えられたし、この結果を後続の方に引き継いで今も続けられているので良い結果になりました。

おわりのあいさつ

ということで、オプトテクノロジーズのインターン事例紹介でした。
記事を読んでインターンが気になったという学生さんは、是非こちらの応募フォームへどうぞ!
https://www.opt.ne.jp/creative/opttech_internship/

*1:マスタを保持するRDBの他にも、集計結果をためているRedshiftからも参照されている