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が重宝されているので、とてもお世話になっています。 いくつか質問をしたり、僕の知らない歴史の話ができて、とても学びになりました。

ハトクラ

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

まとめ(無理やり)

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

VimConf 2019を終えて

VimConf 2019を終えて

こんにちは、IKです。

VimConf 2019が終わり、記事も多く出ています。自分も書こうと思います。

ただし、自分は登壇者側としてどう感じたかを書きたいと思います。

はじめに

僕はVimConf 2018が初めてのVimConfであり、今回で2回目の参加でした。 VimConf2018に参加した僕は、そこで多くの方からたくさんの刺激を受け、ツールとしてしか使っていなかったVimに対し、見方が大きく変わったイベントでした。

また、懇親会では、暗黒美無王ことShougoさんと話す機会をいただき、たくさんの刺激を受けました。中でも、OSSに対するコントリビューターが少ない話を聞き、衝撃を受けたことを今でも覚えています。

今回の僕の発表は、自分の経験を話すと共に、OSSに対するハードルを下げ、コントリビューターが増えることを願いながら発表しました。

発表前にしたこと

call for proposals提出

call for proposalsを提出するために意識したことは、自分が聴衆に何を伝えたいか、ということです。それを意識しながら、自分がVimを使い始めたきっかけから、提出当時までの経験 "2019-08-05 23:59 (JST)" までを書き、それを通して自分は

OSSに貢献することは怖いことではない。みんなで貢献して、より良いPluginをみんなで作っていこう!

と伝えたい、と書きました。

いろんな方にcall for proposalsをレビューしてもらいました。ありがとうございました。

スライド作成、発表練習

私は、今回の発表は聴きやすい、Lightning Talkのような発表を意識しました。できるだけ聴衆に自分の言いたいことを簡潔に、わかりやすく伝えるため、一枚のスライドの情報量をできるだけ減らし、起承転結がしっかりと成り立つような構成を意識して作りました。

ちなみに、これはVimConf 2017, 2018の登壇者である@lambdalisueさんの発表を意識しました。

https://www.youtube.com/watch?v=zkANQ9l7YDM

https://www.youtube.com/watch?v=J5BX1FXnKBw&list=PLx8bw5NQypsnlh5K5LZAaFvAdxfGpt2iq&index=8

(僕はこの発表にめちゃくちゃ刺激を受けました...!)

発表練習は、大学の大教室を借りて、放課後に練習をしました。 同時に大学の友人である@taken_0114に、スライドの写りやデザインをレビューしてもらいながらスライドデザインの修正を同時に行いました。

(めちゃくちゃお世話になりました...!)

最後の方で、patchを投げやすいリポジトリを紹介するために、予め準備をしておきました。具体的には以下の2つを紹介しました。

defx-iconsにpatchを投げやすいように、計画的にpatchを書きました。 具体的には、.mjsのファイルに.javascriptのiconを表示させるpatchを過去に書いておき、commit履歴を見ればだいたいどんなpatchを書けばいいか雰囲気でわかるようにしておきました。(発表の中では.tomlファイルにアイコンを追加するようなpatchを提案しました)

nerd-fontsを使っています

これらの準備に時間を書けて、できるだけ本番に緊張しないように準備して望みました。(それでもめちゃくちゃ緊張しましたが...)

発表してみて

発表前は、正直不安しかなかったです。自分は学生ですが、聴衆のみなさんの多くは社会人です。やはり人生に対する経験量も違い、僕の発表はみなさんにとって意義のあるものなのか、といつも自問自答していたことを今でも覚えています。

しかし、その不安は発表をしているうちになくなりました。発表しながら周りを見渡すと、自分の発表を頷きながら熱心に聞いてくれる方がいて、とても嬉しかったです。また、多くの方が僕の発表を楽しんで聞いてくれたことをtwitterから感じたときは、涙が出たことを覚えています。

自分が仕組んだリポジトリにもPull Requestが送られ、無事マージされたところを見たときはとても嬉しかったことを覚えています。ほぼ同時に二つの同じPRが作成されたことは予想外でしたがw

また、自分が意識した発表者である@lambdalisueさんにとても褒めてもらい、大変光栄に思いました。

最後に

この発表は決して一人では成功させることができませんでした。 僕の発表を事前にレビューしてくださった大学の友人、VimConfのスタッフの皆様、両親、僕が送ったPull Requestに真摯にレビューしてくれた方、そして僕の発表を聞いてくれた皆様、ありがとうございました。 おかげで僕は楽しんで発表することができました。

僕の発表を聞いて、OSSに対する見方が変わったり、OSSに貢献してみようと思う方がいれば嬉しいです。 実際に、参加者の方で、すでにpatchを投げてくれた方がいたりして、僕は光栄に思います。 また、発表した自分もpatchを投げ、知識をつけていきたいと思っています。 ゆくゆくは、Vim関連以外のソフトウェアに対しても挑戦していきたいです。

来年のVimConfも楽しみにしています。

:qa!

Reference

speakerdeck.com