FANCOMI Ad-Tech Blog

株式会社ファンコミュニケーションズ nend・新規事業のエンジニア・技術ブログ

ミニDSP構築インターンに参加してみた

インターンに参加したs_kakimotoです。最終日のタスクとしてブログ執筆が設定されていましたので記入します。
検閲により削除されないよう注意しながら書きたいと思います。

概要

  • 株式会社ファンコミュニケーションズさんのインターンに参加した
  • 開催地は東京オフィス
  • 5日間
  • いくつかコースがあるが自分はミニDSP構築コース的なものに参加した
  • 有給

自己紹介

アルバイトで生のPHPを書く生活を2年ほどしていたこともありこのコースとなりました。
サポーターズさん主催のマッチングイベントにて社員の長田さんとお話をさせていただき、そこで伺ったインターンに参加という流れです。

タスクについて、やったこと

お給料がでると聞いていたのでガッツリスキルを求められるかと身構えていましたが、このコースで実際渡されたタスクは既存業務に影響を与える訳ではなく、むしろ新人研修的な印象を受ける内容でした。
5日間の課題として渡されたものは以下のような要件を満たしたDSP(APIサービス)と呼ばれるものの実装です。

  • PHPをベースに使う(最終的に1/3ぐらいはJSで書いたけど)
  • POSTリクエストを受けてJSONレスポンスを返す
  • 3つのAPIエンドポイントを用意して、それらに処理を実装する
  • それぞれのリクエストとレスポンスは指定されたJSON形式でログとして保存する、保存先は自由
  • レスポンス時にMLと呼ばれる別サービスで導出された広告価格決定処理を行う、このMLとメインAPIは疎結合にして、ホストを分ける
  • 目標レスポンス時間100ms以内

DSPが何かということについては各自ggってください。
レスポンス100msの性能要件で泣きをみることになるのですが、それは後述します。

使った技術

PHP

後述するDockerで諸々を担保しました。ちなみに7.3をベースイメージに使いましたが、実業務で生きてるサービスのPHPバージョンは自主規制*1らしいです。つらい。

Laravel

唯一使ったことがあったPHPフレームワークなので用いました。ルーティングとかDB接続やマイグレーション/シーディングを楽にしたいな〜と思って脳死で選んだのですが、ローカルで動かしたらレスポンス1000ms(10倍)とかかかって泣きました。デプロイ環境では多少ましになったものの150msぐらいかかってました。
クエリ発行の効率が悪いだろうなーと思いつつ完成重視で実装してしまったのが原因です。

Docker

正直よくわかってないまま使うことに決めたのですが、ちょうどいい機会だと思って普通に使えるレベルにできるよう勉強しました。
デプロイ先とローカルとでいい感じにサービス立ち上げようとするならポートフォワードとか概要を覚えておくとよかったです。
一番技術面で成長できた分野と思います。Docker最高!🐳🐳🐳

Express / Node.js

正直よくわか(略)
MLとして使うことにしたJSフレームワークです。なるべく楽にAPIをぶち上げたかったので選んでみました。ぶっちゃけここがボトルネックの可能性も否めないのですが、デプロイ先環境のログをみたら0.4msとか書いてて禿げそうになりました。ほんまか?

MySQL

脳死で選んだ。遅いっぽい。というかメンターさんにはNoSQL使わないとスピード出せないっす的なこと聞きました。

Nginx

PHP(Laravel)を動かすWebサーバーとして使いました。普段Laravel使うときは php artisan serveとかApacheとか使うんですが参考にしたページでNginx使ってたのでそのまま使いました。Nginx.configをなんとなく把握できてよかったです。
ちなみにちょっと前までンギンクスって読んでました。

Makefile

バイト先で先輩社員が「docker-compose upとかbuildとかrun php bashとか打つの長いからエイリアスみたいなの用意したで!」って経緯で知ったので作ってみました。ローカル開発時は大変便利だったのですがデプロイ先AWSではコマンドが用意されてなくて直打ちしてたのでつらかったです。

AWS

AWSを公開テスト用に用意してもらいました。
中入って操作するのは問題なかったのですが思った以上に何も入ってなかったのでDocker使っててよかった〜ってなりました。Docker最高!🐳🐳🐳

Git / GitHub

一応privateにしてねって言われたのであんまりガチガチに環境変数保存しないようにとか意識しなくても良さそうでしたが、最低限clone, commit, push, pullはできる方がいいよね〜って感じの空気感でした。
他のコースはもっとプルリク駆動してるっぽい声が聞こえてきましたが。
インターン終わった後も継続して使ったりしてしっかり覚えようね!(戒め)

性能要件について

LaravelをDockerで立ち上げてNginxでサービスするんですが、普通にめっちゃ時間かかるのでつらかったです。隣のI君は生PHPの実行でサービスしてたんですが、そっちはAWS環境に乗せて40msとか出てるらしくて無力感というのを味わいました。
正直令和時代にレスポンススピードとか意識して開発することないやろとか思っていたのでいい刺激になりました。

つらかったこと

  • 初日からになりますがMacの操作がわからなくてつらかった。

- Macのターミナル見辛い
- 日本語の変換がトリッキー

  • GitとかVScodeの設定を完璧に普段と同じにできなくてつらかった。

- 貸与PCなので仕方ないです。

  • 普段のノリでノートPC担いで出社して、一切使わず持ち帰る生活でつらかった。

- 特に不要とも書いていなかった気がするので持ってきたが1.2kgの筋トレをするだけになった

主にMacが悪い買おうか割と迷ってます

その他

オフィス環境について

青山学院の近くにオフィスがあるんですが、まさか2拠点あると思ってなくてメールの「ここにきてください!(地図のリンク)」の指す場所とそのメールの署名欄に書いてる本社ビルの住所も建物名もズレてるな〜と思いながら初日は本社に向かいました。
もうお分かりかもしれませんが地図リンクが正しくて、そっちでみなさんをお待たせしてしまいました。初日から遅刻をやらかすという悪い例です。
主に作業するフロアはバスケットコートを横に2面あるかないかぐらいの広さで、それが2フロアと本社のビルという感じでした。
休憩スペースがまあまあ広くて、デロンギのエスプレッソマシンとか給茶機とか、あとモンエナ170円の自販機とか無人コンビニの小さいやつみたいなのがあります。無人コンビニは小腹空いた時とかにちょうどいい感じの品揃え+冷凍食品とかカップ麺とかもあるので外出たくない時も食事できるな〜って感じです。

デスクについて

案内されたデスクにはMacBookPro15”が置いてて貸与されました。キーボードがペチペチじゃない一つ前の型のなので神でした。その他23”の外部モニターも使えましたし、デスクは驚きの電動昇降でした(!)  これが””””人権””””なのか。。。?

日本酒会

なぜかインターン期間中、終業後に日本酒を持ち寄って休憩スペースで飲むという集まりがあって、
なぜか気づいたらご相伴にあずかっていて、
なぜか日本酒もワインもおつまみも、あと机の上にあった(苦手なはずの)ウイスキーや芋焼酎まで口に入れていて、
なぜか終わって気づいたら二次会のチャーハンの食券をいただいて食べてました。ごちそうさまです。

今後インターン生で日本酒会に興味があるひとはご注意ください。

まとめ

初めてのインターンでしたが、最初の課題説明で大体の構成をイメージできる難易度感とタスク量で、無事作りきることができてよかったです。
タスクの難易度については各コースやチームによって変わると思いますが、その辺りは他の参加者の記事を参照してもらえると嬉しいです。
大企業(規模的に)に新卒で入ることについては消極的だったのですが、こういう働き方や空気感の大企業もあるんだな〜と知ることができました。
技術的にもDockerやAWS、Expressなど触ったことの少ない技術も使ってフィードバックを得ながら開発できたのでとてもよかったです。

ありがとうございました!

*1:載せ替えようと頑張っていらっしゃるみたいです