ピクシブ株式会社の春インターンに参加しました!

ピクシブ株式会社の春インターンに参加しました!

概要

PIXIV SPRING BOOT CAMP 2022の技術基盤(Webフレームワーク)に参加しました!

PIXIV SPRING BOOT CAMP2022 - ピクシブ株式会社

8日間でピクシブ百科事典フレームワークの改善アプリケーション機能のリファクタリングを行いました!
なんと、本物のピクシブ百科事典を触らせていただいております……

そして
この春 ピクシブで 圧倒的猛者になる
という言葉にふさわしく、たくさんの知見を得ました!

そしてそしてお断りですが、この記事はピクシブ株式会社より許可をいただいて作成しています。
ですがピクシブ株式会社の意見ではなく、あくまで私個人の感想です!!

最終発表の資料

いきなりですが公開許可を得ましたので、インターン最終日に発表したスライドをお見せします。
結局何したのってことが分かります。
※モバイル端末の方は全画面ビューにしていただくと見やすいです。
※文字が若干変化し、可読性に欠ける部分があります。ご了承ください……

8日間++を振り返る

~0日目

インターン自体は8日間だったのですが、事前課題といった形で1ヶ月もの間、メンターのtadsanより色々ご教授してもらいました!

素のPHPやPHPフレームワークのLaravelといった形で、元々PHPを使っていました。ですが、知らないことだらけで……
名前空間やオートロードのすごさ、PSRなどなどたくさん知りました。でも実際インターンで使うとなると理解不足を痛感するのはまた後のお話です。

さらに、pixivのノベルティグッズをいただきました!

オリジナルパーカー(表面にpixivのロゴ、裏面にpixiv INTERNSHIPの文字が描かれています)
ノベルティグッズ!

他にもrurudo先生とNagu先生のイラストが描かれたクリアファイルも同封されていました!
(著作権の都合で公開は控えます……)

1日目

1日目です。

まずガイダンスを受けて、環境構築を行いました。
そしてピクシブ百科事典のソースコードを拝見しました。

インターンでまず感動した点は、社員の方と同じGoogleアカウントを使わせていただけたことです。ニックネームがちゃんとメールアドレスに入っています!
8日間のインターンにも関わらず、本当にピクシブ株式会社の一員になったような感覚です。
「インターンは実は夢で就職してました」というオチでも疑わないレベル……

さらにデプロイ環境に感動です。
本番環境の前のテスト環境やその後のカナリヤリリース、Jenkinsによる管理、デプロイ全体の流れ、独自の工夫などなど……
個人開発ばかりやってた身としては「なんだこの洗礼された環境は……」といった感覚になりました。

ちなみにデプロイ環境に関しては
pixivのデプロイを支えるpploy
こちらのpixiv insideに書かれています!

そしてSlackには趣味について話せるzチャンネルというものがあるんです!
z-coffeeを始めとして、z-vrchatからz-yuriまで……好きなものを好きって言いやすい環境、本当に素敵だなと思います。

そしてなんと、初日から本番環境へのデプロイを体験しました……!
この日行ったこととしてはピクシブ百科事典の小さなリファクタリングですが、改修全体の流れを体験できました。
本物のピクシブ百科事典に私の書いたコードをデプロイする瞬間のドキドキや嬉しさは筆舌に尽くしがたいものがありました。

2日目

私が所属させていただいたpixiv事業本部webエンジニアリングチームの朝会に参加しました。
会社全体を通してニックネームで呼び合う文化となっていて感動です。
朝会では今日力を入れて取り組むことと、1つのお題の回答(好きな寿司のネタ、プチ嬉しかったことなど)を話します。最後に「いってらっしゃい」で朝会終了です。

2日目は遂にマイページのADR化に取り組み始めます。

ADRについてはこちらの記事を御覧ください!(ここでの説明は省かせていただきます……)
Action Domain Responder

該当部分のコードを読み解いていくと……と、その前に各種処理をミドルウェアに移行する必要性が出てきました。
これまでDispatcherにまとまった処理を切り離して責務を分割しつつ、PSR-7で定義されたHTTP message interfacesに必要な値をくっつける形です。
この機会にHTTPSへのリダイレクト処理もミドルウェア実装に切り替えます。

お昼は全社会議に参加しました。ラジオ体操から始まります。
全社会議実況用のSlackチャンネルが盛り上がります。
まるで動画配信サービスの生放送のように……
12時ぴったりに終わったことも感動です。

全社会議はピクシブ株式会社にちょこっと載っています!
環境を知る | ピクシブ株式会社

その後に社内ラジオなんてものがあるのです……粋ですね……

こちらも記事がありました……!
社内ラジオを1年間運営し続ける秘訣

午後はルーティング周りのミドルウェアへの切り出しを、メンターのtadsanさんに付きっきりでご教授してもらいながら実装しました。

3日目

ルーティング周りをミドルウェアに切り出す作業を引き続き行いました。
これがめちゃくちゃ大掛かりな作業で、しかも全リクエストが通るまさにフレームワークの根幹です。
ルートディスパッチハンドラで包んだものをルーティングミドルウェアで作ってリクエストにくっつけて次に渡すといった具合になりました。

PSR-15周りの理解不足が顕になりました……

4日目

ミドルウェア化したことにより、テストが書けるようになりました。
テストも一筋縄では行かないものです。
ルーティングミドルウェアのテストの疎結合化をメンターのtadsanさんにご教授いただきながら行いました。
最初に私が作っていたものは他所に依存しまくりの全然クリーンなものではなかったのだと気付かされます。
分かったつもりの恐ろしさを感じます……

抽象度の高い内容に苦しみながら、でも着実に進んでいる感覚がありました。

そして夜は社内勉強会にも参加しました。
データベースの話など大変興味深かったです……!

5日目

5日目は休日を挟んで、月曜日です。

MyPageのADR化とテストの作成を行いました。

そして、改めてGitの威力を知ります。
普段はGitHubDesktopで草を生やしている私ですが、CUI環境はエアプだったりします……
そんなCUIで行うgitコマンドには便利な機能がたくさんあるんです。

例えば

git commit --fixup コミット番号

このコマンドを使うと任意のコミットを修正、いわば過去改変ができます。

他にもrebaseコマンドを用いるなど、コミットログが綺麗になる工夫がなされているのだと知ります。
まさに職人の為せる技を伝授していただきました……

6日目

割と理解してきたと思い始めた6日目。

ルーティング周りのミドルウェア化をデプロイしたり、マイページのADR化のマージリクエストを修正したり……

そして本実装は行っていないですが、チェックリストAPIの再実装に関しての検討を行いました。
修正ではなく、新しく作り直す際の案ということで、これまで学んだ疎結合な設計を心掛けました!

さて、本日はPHPStanの登場です。
PHPStanはPHPを実行すること無く問題ないか確認できる静的解析ツールです。
私の認識としては型チェックしてくれたり、問題のあるコードを指摘してくれて便利!くらいの認識で使っていたのですが、なんとジェネリックスというものがあるんです。
これは型の変数的なもので、はえぇ……となりました。
超PHPerの為せる技といった世界ですが、クリーンなアーキテクチャになるにつれて、こういったことも重要になってくるのです。

ADR化では1ファイル1クラスとなるため、必然的にファイル数が増えます。
PHPDocがきちんと書かれているとエディターで補完が効いて、他のファイルを参照せずともコードを書きやすくできます。
PHPStanを用いると問題のある関数(文字列を代入しようとしているのにbooleanが来る可能性のある部分など)を見つけて指摘してくれるんです。便利……!

そして衝撃の事実に気づきます。 作成したMyPageのADR化実はADR”風味”でしかなかったことを終わり際に告げられます……
ご指摘いただいて「抽象に依存」するという点やDIする意味を再認識しました。

どんどん解像度が高くなっていきます……!

7日目

もう明日で終わりだ……となった7日目。全社会議が楽しみでした。

昨日のルーティング周りの不具合分を修正しました。コミットの流れにも慣れてきました。

午後はお茶会に参加しました。
社内でのティータイムなんてNEW GAME!というアニメの世界にしか存在しないものだと思っていたので、存在自体にまず感動です。
お茶会では社員の方にピクシブに入るに至った人生の経緯をお聞きしたり、会社に入って一番よかったと思ったことをお聞きしたりして、とっても良い話がたくさん聞けました。

お茶会についても記事が……!
リモートお茶会やってます

(記事の貼り付け多くてステルスマーケティングみたいになっていますが、個人的にやってるだけです!!)

夕方はインターン生の最終発表を拝見し、私自身も明日に備えスライド資料作りを進めました。

8日目

最終日です。

webエンジニアリングチームの定例会議に参加させていただきました!!
当たり前のことなのですが、めちゃくちゃすごい方々とご一緒しているのだと痛感させられました...…
割れ窓ガチャだったり、チームについての役割の再任のあれこれなど、エンジニアリングだけでなくチームやお仕事の運用方法もすごいなと感じました。

そして、スライド作成を終えて、最終発表を行いました。
Slackのインターン実況スレッドで温かい言葉をたくさんいただいて、メンターさんやVP of Enginnering、CTOの方からもありがたいお言葉をいただいて、胸が熱くなります。

人事の方と面談の後、最後にwebエンジニアリングチームの方と少しお話して終わりました。
非常に名残惜しいです……

お気持ち

インターンはフルリモートでの開催でした。
ですが、感動の毎日でした!!
技術的な部分はさることながら会社の雰囲気もです!

そしてインターン生へのちょっとした気遣いがたくさんあり、とっても充実したインターンでした。
内部の情報を惜しげもなく見せていただけたり……言葉にできないほどありがたい経験です。

日常のSlackでのコミュニケーションや全社会議の雰囲気など、とっても素敵でした。
デプロイや全体の環境もすごくて……これが大規模サービスか……!となりました。
そして社員の方々がピクシブのサービスを好きであることが、ひしひしと伝わってきました。

ポジショントーク無しで、めちゃくちゃ就職したい……って思える雰囲気でした……………

技術的な側面

教わった技術の知見は、正直まだ吸収しきれていないです。
どんな型をセットしてもオーバーフローしちゃうほどたくさんのことを知りました。

クリーンなコードの良さを知りました。
これを理解するのは並大抵のことではないと個人的に思います……
そもそも普通に生きてきたらイージーなコードに行っちゃいますし、生きてるサービスを触らせてもらえることなんてそうそうありません。

git周りの便利な技やPHPの仕様などなど、本当にたくさんのことを知っただけでなく
アーキテクチャの設計思想抽象に依存するといった抽象的な部分を理解できたことは何物にも代えがたいです。

「すぐ役に立つことは、すぐ役に立たなくなる」という言葉があります。

これは教養の大切さを示す言葉としてよく使われますが、上記の話はまさにこれです。
抽象に依存するといった部分は、個人開発やちょっとしたwebサイトでは真価を発揮しにくいんです……
でもすごく大事な概念で、すぐに役立つかは分からないのですが、これを理解できたのはものすごく大きな成長です。
パット見だと分かりにくいのですが……私、成長してるんです……

言語の枠すらも超えた見識を得られました。
こんなの他じゃ手に入らないです……

そしてそれらの知見を元に、実際に生きているサービスへ変更を加えられたことは非常に嬉しいものです。
ピクシブ百科事典のすべてのリクエストが私の書いたコードを通るなんて、非常に感慨深いものです。

終わりに

初めてのインターンでした!
そして、ずっと憧れていたピクシブ株式会社です!

慣れないことで緊張したり、抽象度の高い内容の理解に苦戦しながらも、とっても楽しい8日間でした。

tadsanピクシブ株式会社の皆様、ありがとうございました!!