GetMePower’s blog

とあるVimmerのブログ

pixiv冬インターン参加記

はじめに

先日、pixivインターンに参加したので、その旨をブログに書こうと思います。 本インターンシップは、自分にとって初めての就業型インターンシップであったことから、とても貴重になりました。

参加するまで

動機

日頃からピクシブ百科事典にはお世話になっていたことであったり、業務に実際に携わり、Webアプリケーションの骨幹であるバックエンドを体験することができると思い、応募しました。

応募方法等

自分はGitHub選考で応募しました。自信があったからとかそういうわけではなく、GitHub選考で駄目なら書類選考でも駄目だと思ったからです。 Vim scriptを書いているとpixivのインターンに受かるみたいですよ(要出典)

インターンシップで行ったこと

初めてPHPを書きました。 ピクシブ百科事典のコードがPHPで書かれており、それらの構造を疎結合にしていくことが今回の課題でした。 PHPはほぼ未経験でしたが、5日間(実質4日間)で合計12個のPull Requestを作成できたのはとても良かったです。

インターンでのKPT

f:id:GetMePower:20200302000951j:plain 一日目

f:id:GetMePower:20200302000814j:plain 二日目

f:id:GetMePower:20200302000635j:plain 三日目

インターンシップで得た知見

そもそもPHPについて

本コースではPHPを使って、ピクシブ百科事典のコードを改善していくことが目標のひとつなのですが、僕はPHPをまるで書いたことがありませんでした。(軽く予習はした) そのため、最初はわからないことだらけでとても不安でした。 また、PSRの概念であったり、phanを用いた静的解析など、PHPを用いた理想的な開発フローを本インターンシップで学ぶことができ、とても良かったです。 結果的に、PHPを通して、実際に運用されているピクシブ百科事典のバックエンド側を改良していくことができ、とても学びになるインターンシップでした。

speakerdeck.com

この記事を何度も見返して、PSRについて徹底的に自分の頭にインプットしました。 あと、PHPの公式リファレンスがとても見やすく、比較的早く馴染むことができたのはありがたかったです。 公式リファレンス、すごい...

初見のプロジェクトに、如何に早く馴染むか

日頃から自分はVimを日常的に使っており、CLI周りの操作は好きなのですが、日常的に使っているVim pluginが業務でもバリバリに活きているのを見て、とても嬉しかったです。

逆に、これらの操作だけでは足りていない部分を@tadsanから教わり、他人が作ったコード群に対して、いかに早く馴染んでいくかのテクニックを教わったのはとても参考になりました。

  • git grepでどこで特定の関数が呼ばれているかを一瞬で確認(gina.vimでやるととても便利)
  • できるだけプロジェクトルートから動かない
  • シェルの機能で、過去に打ったコマンドの履歴を素早くサーチ

まとめると...

  1. プロジェクトルートに移動
  2. fzfで目的のファイルに素早く移動 or defx.nvimでファイル、フォルダ作成
  3. lspで定義ジャンプ
  4. Gina grepで、定義された関数がどこで使われているかリストアップ
  5. file edit
  6. Gina.vimで add, commit, push!!!

みたいなフローを徹底することで、Vimから出ることなく、ピクシブ百科事典のありとあらゆるテキストファイルを支配することができました。(要出典) これにより(自分は)作業効率の向上であったり、初見のプロジェクトに早く馴染むことができました。 当たり前の事かもしれないですが、日常的な作業を効率的にこなしていくことは重要です。 (gina.vimはとても便利で、gitコマンドをginaから実行するために僕はVimを起動したりしてます)

コミュニケーションの重要性

日頃から時給0円のアルバイト(???)をしているのでよくGitHubを用いたチャットコミュニケーションはしているのですが、今回のケースは実際に現実で会話やペアプログラミングを通してコミュニケーションを取りながら開発をとっていきました。この違いの中で学んだのは、わからないことは、長く悩んでいるよりも、わからないことを言語化した上でメンターの方(@tadsan)に質問や議論を通して、開発を行っていくほうが、開発のスピードや、自分の理解のスピードも向上し、とても良いということです。実際に、お互いの理解を一致させるためにもコミュニケーションは重要です。そうしてチャットだけでなく、実際に議論しながら、ソフトウェアの完成を目指していくことはとても楽しかったです。

その他

勉強会参加

インターン最終日に、勉強会が開催されていたので、僕も混じってLTをさせていただきました。 pixivはVimの会社(???)と聞いていたので、Vimの内容でLTをするのはかなり緊張しましたが、楽しんでもらえたようでなりよりです。

pixiv tech conf参加

本来招待制であるカンファレンスに、縁あって参加させていただきました。 pixivが持っている、ソフトウェアに対する美学であったり、ユーザに理想的なソフトウェアを届けるために気をつけていることだったりを、本カンファレンスを通して知ることができて、とても良かったです!今後のエンジニアとしてのキャリアを歩んでいく上でとても参考になる発表でした!

Vimの話

今回のメンターの方である@tadsanとは、実はご縁あって、VimConf2019というカンファレンスのときに長時間お話させていただきました。 ということは、お互いテキストエディタが大好きということですよね? なのでもちろん、仕事外の時間はテキストエディタの話をたくさんしました。 このプラグインは実はEmacsが先で、Vim側がインスパイアされて移植されたとか、GNUの歴史とか、大変興味深い話ができてよかったです!

また、"Vim神.歩く:help" ことkanaさんと二度目の邂逅を果たし、たくさん雑談させていただきました。

kanaさんはOSSとしてたくさんのVimに関するソフトウェアを作られたのですが、 自分の参加しているプロジェクトで

これらのOSSが重宝されているので、とてもお世話になっています。 いくつか質問をしたり、僕の知らない歴史の話ができて、とても学びになりました。

ハトクラ

最終日にハトクラをしました。 とても楽しかったです! またしたいなぁ...

まとめ(無理やり)

このインターンで数々の黄金体験ができたと思います。 圧倒的進捗かつ圧倒的猛者に一歩近づけたかなと思います。 この調子で頑張っていきたいです。