ピクシブサマーインターン2018に参加してきた

「圧倒的猛者になれる」らしいピクシブのサマーインターンに行ってきました。(GitHubをペタッ+面接で合格になったので皆さんもGitHubにもっと色々Pushしていきましょう。)

pixiv SUMMER BOOT CAMP 2018 - ピクシブ株式会社 採用サイト

会社の場所

良いルート

理想ルート

方向音痴の辿るルート

方向音痴の辿るルート

迷うと30分以上かかる。 逆に進んだことに気づいて引き返したはずなのに、なんで左に曲がってるんだ・・・?

教訓: 逆さまの逆さまは正しい道とは限らない

やったこと

いくつかコースがあったのですが、私は「pixivWEBコース」として参加しました。

PC版のpixivは現在TypeScript+React+ReduxのSPA構成に移行中。最近デザインが変わったなーと思うページはSPAに切り替えが終わったページかもしれません。

今回のインターンではそのSPA化の一部を実際に行いました。本番環境のマージまでは行き着かなかったのですが、完成後は結構UXがよくなりそうだと思っています。

1日目

インターン生にはリッチにiMacが貸し出され、自由に使わせてもらえました。(ネットワークや権限分離はきちんと行われています。) Macには慣れていたのですが、MagicMouseは初めて。BetterTouchToolで設定を5日間いじり続けたものの、まだまだカスタマイズの余地がありそう・・・。

さて、初日の課題として、CSS1行の修正で終わる修正を行いました。これだけのことですが、以下のような手順が必要になるわけです。

  1. gitレポジトリをclone
  2. 修正してcommit
  3. 開発サーバーにrsyncしてyarnでビルド
  4. ブラウザで動作を確認
  5. Push
  6. PullRequestを作成
  7. コードレビューを受ける
  8. 本番環境にマージ

規模が大きいだけにフルビルドにはそれなりに時間がかかるのですが、特に大きな問題もなくマージまで到達できました。実際に本番で動いてくれるととても嬉しい。

全社会議

水曜日に社員全員が集まって行う会議に参加。各サービスの売り上げや開発状況などが猛スピードで確認できます。巨大企業では全社集会を週1でなんて不可能でしょうから、ピクシブならではかもしれません。各サービスの相乗効果や連携を上げて行くためにはかなり効率的かなと思いました。

2日目〜4日目 ひたすら書くべし

デザイナさんとすり合わせ

issueを立てた上で、エンジニアさん+デザイナさん+僕でデザインの話し合いをしました。

ピクシブではデザイナのみでデザインを決めるのではなく、エンジニアと話し合ってサービスを作り上げています。当初デザイン案がいくつか上がっており、自分でもこちらがいいかなーと考えたのですが、デザイナさんの最終案と結構違う部分がありました。話し合ううちに、検討すべき点が明らかになったり、最終的には「なぜこうするのか」の意図を納得して開発にとりかかれました。個人ではなかなかデザイナの方と話し合う機会がないので、非常に良い経験となりました。

つらかったこと

良かったことは最後にまとめて

リポジトリが巨大

サービスの規模が大きいだけあって、リポジトリも巨大です。リポジトリを分割しない方針となっているため今回の担当外のソースも入っており、どこに何があるのかわかってくるまでは大変でした。わかってしまえば特に問題はなさそう。

リポジトリが分割されていない理由は社員さんのスライドを参照↓

「ふつうのPHP」がpixivになるまで #phpkansai / 黒點 さん - ニコナレ

動けばいいわけじゃない

趣味なら動けばいいや!と適当なコードでコミットしちゃえばいいのですが、これは本番プロダクト。バグをなくすのはもちろん、速度やメモリ効率も考えるべきですし、今後を見据えた設計が必要です。

一応動くけど、明らかに不自然だぞ・・・?というコードを生み出して、リファクタリングに苦労したりしました・・・

TypeScript+React+Redux

ワシ「近頃のWebは複雑でいかん。ワシの若い頃はWebなんぞ適当にHTMLとCSSとJavaScriptを書いて、適当にFTPでアップすれば終わったもんじゃ・・・(IE6の記憶を消しながら)」

現代のWebは正直非常に複雑です。npmやyarnでパッケージ管理し、型検査をくぐり抜け、コンパイルし、、、。スクリプト言語はコンパイル不要で簡単とはなんだったのか。とは言っても、大規模なWebサービスをサーバーサイドやjQueryでガリガリ書いて行くのは結局辛いので、入門編さえくぐり抜ければこちらの体制の方が楽になっていくはずです。

そして、私が無知なだけで「Reduxはこのコマンドを叩けば一発!」「TypeScriptはこのプラグインを入れれば苦労するところなんてない!」みたいな魔法のOSSの存在をインターン中に知ることを夢見ていましたが、銀の弾丸などない

現実はTypeScript+React+Reduxはちゃんと勉強あるのみ!

5日目

スライドを作って、数十名の前で今回のインターン報告をしました。(自分は最近LTしてないので思ったよりテンパってしまった) 他のインターンの人も各々成果を上げていました。他の人のを見ていると色々やって見たくなります。

短い間でしたが、最後の打ち上げまで非常に楽しかったです!

良かったこと

質問しやすかった

メンターの方含め、実際にそのプロダクトを書いてる島に入って作業していたので、わからないことをすぐ聞けました。煮詰まってると話しかけてくれたりして、集中も切らさずいい感じに作業できました。

本番の仕事にまじれた

他のインターンだと、インターン用の課題が与えられることが多かったのですが、今回はかなり社員の方にまざって開発しました。社員の方が仕事をしてる島の中でプログラム書いたり、ミーティングに参加したり。実際に働いている様子をよくしれて良かったです。

コミュニケーション

水曜日の全社会議はもちろん、チームごとのミーティングやKPTなどを積極的に行っていて、かなり仲良く仕事してるなぁという印象でした。Slackも絵文字充実。

金曜日にもLT会や手巻き寿司パーティ(+有志によるアニメ鑑賞会)などで盛り上がったり。終始楽しい職場でした。

お茶が無限に湧く

暖かいコーヒーや緑茶のほか、ペットボトルの水やお茶が飲み放題。ペットボトルなら会議などで持ち歩く時もこぼす心配がないのでとても便利。飲み物中毒の私的には非常にありがたい制度でした。

ランチが美味しい

プクシブの周りのお店で色々ご馳走になりました!ご飯の写真は貼るのが面倒なので略!IT系だと多いですが、昼休みが決まってないので空いてる時間に行けるのが楽でいいですね。

まとめ

5日間、非常に楽しいインターンでした。社内の様子としても働きやすそうだなぁと感じました。

Webに銀の弾丸がないという世界の真理に気づき、圧倒的に猛者になれました。あとは地道にReact頑張るだけ!