Bugリストから脱出しました

脱出してきました.12/12と12/13の土日2日間です.

ssl.pixiv.net

一度噂のpixivのオフィスに行ってみたいなーと思ってエントリーしてみたんですが, 実際は諸事情により既に11月にオフィスへ行っていたので2度目の来訪となりました.

選考

Github選考って要するにpixiv側で用意したリポジトリをフォークして修正してプルリクを投げるだけです. しかもこの選考用に用意されたリポジトリはびっくりするくらいダメダメなので大して深い知識とか必要はないです. 実際ぼくはエントリー翌日にオフィス来訪が決定したので一気にやる気をなくしてしまい, とりあえずあからさまにここらへん駄目だろって簡単な修正のみ投げてすぐやめてしまいました. そんなんでも通ったのでとりあえずプルリク投げればいいと思います.

ここら辺,インターン中にも「選考で何を見ているのか?」は話題にあがりました. 「このインターンでやる作業についていける最低限のスキルが有るかどうか」を確認するためだそうです. 最低限のスキルというのは「SSHでログインして」「git使って作業して」「プルリクが投げられるか」ということ. それ以外の部分(実際のコミットの内容だとか)はプラスにはなりこそすれマイナス要素にはならなかったらしいです. なるほどーという感じでした. 自分が選考を通った理由がわかった気がします.

ちなみにこの選考段階で人生で初めてPHPを触り,人生で初めてプルリクを投げました.
え? よくそんなんでお前参加したなって?
まぁなんとかなるでしょう.

駄目だったら選考で切られるだけです.

そしてこの通り.脱出してきたので駄目じゃなかったらしいです.

1日目

上記の通りさっさと課題をやめてしまったので,どれくらいの人がプルリクを投げていたのか把握していなかったのですが, 当日の参加者は12名でした.当日までにメールで回ってきた自己紹介シート(共有)には数人にしか書いていなかったので 参加者全員を把握した時には「おお,結構多いな」と思いました. ちなみにキーボードを持ち込んでる人は大体HHKBでした. 僕も自慢の改造キーボード持っていけばよかったですね.

軽く自己紹介を終えた後,作業に入る前の準備を行います. こちらにある通りインターン中は @catatsuy さんが用意してくださった環境に入って作業を行います.

inside.pixiv.net

READMEに従ってコマンドを打つだけでまったくコケることなく構築されていく様子はちょっと凄かったです. apt-getbrewpip を打つだけでコケる僕にとっては超技術でした.

「Bugリストからの脱出」ということでバグを潰していきます. インターン用に用意されたpixiv本体のスナップショットリポジトリをフォークして開発環境にクローンし, issueに貼られた内容からバグ箇所を推定し修正を行います. 修正コミットをまとめてissueに対してプルリクを出し,それが受理されれば晴れて脱出!ラベルが貼られます. (プルリク内容に問題がある場合は問題箇所が指摘されて再修正となります)

バグを直すとは聞いていたんですが,意図的に仕込まれたバグなどではなく ガチで12/11昼ごろ時点でpixiv本体に発生していた本物のバグの修正でした. しかも修正に取り組んでいる最中に仕様が変更されていくというリアルっぷり.
え,バグがバグじゃない? よしなに? え? え?

1日目の作業時刻のリミット後,皆でKPTをやりました. 言われた時は"KPT??? なにそれおいしいの??"状態だったんですが, まぁなんかよくあるアイデア出しの手法だろうと思って軽いノリでいっぱい書きました.

開発用サーバーにログインできるのはpixiv社内のネットワークからのみなので, 当然ホテルでの修正作業はできません.作業はできませんが,issueをみることはできました. 夕飯後から寝るまでの時間に暇を持て余していたのでちょっと明日どうしようか考えていました.

2日目

作業を続けます. PHPも何もよくわかってない自分にそうそう高難易度のissueは取り組めるとは思わなかったので, 簡単な奴をいっぱい取り組むことでちょっとでも開発コード慣れ & PHP慣れしてこうかなと考えていました.

作業中に仕様が変わるくらいなので,設定された難易度ではなく自分にとっての難易度で解いていきます. 他の人にとっては難しくても自分にとっては簡単だったり,その逆もあったりします. 後者は幸いな事に他の優秀な参加者の方が模範的なプルリクを投げてくれているのでそれを参考にして, 最後に投げればよさそうかなと思いました. 脱出数(issu解決数)を競うイベントだとこの戦略は他人の解答を見ているので完全にズルなんですが, 今回はそういう感じでもないし,折角勉強になる良い教材が転がってるんだから取り組もう的なスタンスでやってました.

2日目も作業時刻リミットを超えるとKPTを行います.ここで蓄えられた知見が来年には活かされることでしょう.

最終的には5個くらい脱出できたと思います. すいません4個だったかもしれないです. 完全に自力なのはもっと少ないです. ダメダメですね,精進します.

最後に振り返りです. pixiv側からの総評が行われます. それぞれのバグに関して,どういうバグだったのか解説と参加者のプルリクが紹介されます. バグに対するプルリクの中で最も早く脱出!ラベルが貼られたものが本番に取り込まれるそうです.

まさか採用されると思っていなかった

バグの中にはPHP関係ないものもあり,一番乗りで提出したので採用されたようです. 自分が素早く解ける簡単そうなのから順に解いていったのが功を奏したというところでしょう. もっと他の人が先に提出してるんだと思ってた & 採用基準が順番だと思ってなかったので衝撃でした.

インデントやスペースなど確認しない雑なコミットを度々投げてしまいましたが, しっかりと指摘してもらったうえに「プルリク作成前に確認する癖をつけるとよい」とアドバイスまで頂けました. emacsの設定サボって2回インデントの指摘を受けた時は冷や汗をかきました.

最終日ということで最後に懇親会がありましたが,新幹線の都合で泣く泣く早めに帰ることとなりました. あ,でもピザとビールは美味しくいただいてきました.

終えてみて

  • Githubの本来の使われ方を体験できた
  • 実際に稼働中のサービスに起こる大小様々なバグの多様性を見ることができた
  • 初めての経験ばかりだったけどやってみると意外となんとかなる