爆速で成長していた、ベンチャー企業ピクシブ
面接の時の話はこちら=>ピクシブに入るときの話
そんな訳で、ピクシブでアルバイトとして働くこととなった私は、初出勤の日を迎えた。
(↑ピクシブのユニークなオフィス)
ほぼ何も分からず始まった開発
プログラミングスキルはほぼ無く、やることも決まっていなかった私は、早速開発の統括をしていたCTOの青木さんからの指示を仰いだ。
私「青木さん、何をすれば良いですか?」
青木さん「そうだね〜とりあえずこれのモバイル版を作って欲しいな〜」
私「分かりました!(分かってない)」
青木さん「Subversionのアカウント発行しとくから、まずは環境作ってみて〜」
私「はい!(分かってない)」
青木さん「かみぽ〜溝部君のアカウント作ってあげて〜」
kamipoさん「はい」
こんな感じで、話は進んでいった。
そして、私は早速困った。
「Subversionって何だろう??」
開発経験のない私は、開発時に一般的に使用されるツールの事も全く知らなかった。
ググっても、『オープンソースのバージョン管理システム』という謎の説明しか出てこず、使い方もサッパリ分からず、目的も分からなかった。
(バージョン管理システムとは、プログラミングした成果物を適切に保存する仕組みの事でした。)
とりあえず分からなかったので、適当に資料を読み、何とかして、先に進んだ。その作業の繰り返しだった。
「環境構築・・・とりあえず適当にやってみよう!」
こちらも良く分からないまま適当に進めようとする・・・・
が!
ある時点で、全く分からない問題へぶち当たる。肝心のサーバー・データベースへの接続の仕方が全く分からなかったのだ。Unixサーバー系の知識が根本的に欠如していた為、何をすれば良いか分からないし、何が分かってないかも分からないという、どうしようもない状態だった。
「とりあえず困った・・・が、誰に聞けばいいんだろう・・・」
「みんな・・黙々とキーボードに向かって忙しそう・・・」
「そもそも俺は何も役に立ってないのにこの時間、お金をもらっても良いのだろうか・・」
という風に、負の思考ループにハマリながら、暗澹たる気持ちになっていた。
「でも、何としても少しは役に立たなければ・・・ノーバリューだ!」
「とりあえずさっき青木さんが言ってたkamipoさんに聞いてみよう!」
kamipoさんとの出会い
そういう訳で、勇気を出してkamipoさんに聞いてみた。kamipoさんはピクシブの中では珍しく金髪でメガネをかけており、なおかつ『デスノートのL座り』っぽい感じで椅子に座りながら、キーボードを黙々と叩いていた。
「珍しい座り方をしている・・・けど凄いデキる感じの人だ・・」
と思いながら、勇気を出してkamipoさんに質問してみた。
「kamipoさん、お忙しいところすみません、少しお尋ねしても宜しいでしょうか・・・?」
「ええよ〜」
「・・・すいません、全体的に分からないです・・・」
「・・・」
「・・・とりあえずPCのとこ行こか」
と、そこで私は衝撃を受けた。
kamipoさんのPCの画面が、とてもカラフルでめちゃくちゃカッコ良かったからだ。
『kamipoさんのコンソール(イメージ)』
『私のコンソール(当時)』
俺もこんなコンソールを使いたい・・・!!格好いい・・!!マトリックスみたい・・!!
このとき、そう強く思ったのをよく思っている。
私の席につくと、kamipoさんはおもむろにキーボードを叩き始め
「カタカタカタ・・・」
「(アカン・・Ctrlキーの位置が違う・・)」
と言いつつ、作業を始めてくれた。作業自体は20分程で終わり、私のPCからテスト環境で作業出来る仕組みが直ぐに整った。
「すみません、あとでコマンドの意味を知りたいので、全てメモさせて頂けませんか?」
「あ〜.bash_historyに全部残っとるで」
「ありがとうございます!!」
と、少し素っ気無いながらも、今後の復習に必要な事も、しっかり教えてくれた。
コンソールを格好良くしたい!
せっかくなので私は、kamipoさんが席を立とうとしたとき、どうしても気になった事を質問してみた。
「すみませんkamipoさん・・・、最後にもう1つだけ・・」
「ん?」
「・・どうやったらそんなにコンソールがカラーで格好良くなるんですか??」
「ああ〜・・ちょっと待ってや」
「(カタカタカタ・・)」
「これでええで」
「うおー!カラフルになった!ありがとうございます!!」
と、すぐにカラフルにしてくれた。僅か数十分で私のPCは、必要な事が大体出来るようになり、なおかつとてもカラフルになってやる気が出る環境になったのだった。
コマンドの履歴から学習する
そしてそれから、私の勉強時間が始まった。
kamipoさんが打ってくれたコマンドの履歴は、私にとって宝の山だった。
「なるほど!こんなコマンドがあるのか!」
「こんな書き方があったのか〜〜」
「ngrep -W byline ...特定のポートの通信内容を確認したい時はこうやればいいのか・・」
kamipoさんが短時間で行った事には、データベースとの通信の仕方、サーバーとの同期の取り方、通信エラーの原因の切り分け方などが含まれており、これらは基本的な技術として欠かせない物だった。
これらの復習をすることは、問題集の答えを見ながら勉強するようで、非常に効率が良かったのだ。
kamipoさんのお陰で私は短期間で、最低限の基礎知識を一気に増強する事が出来たのだった。
その後、どうしても分からない事があるとき、特に根本的に解決策が思い付かない問題があるときは、かみぽさんに聞くようになった。
深夜から明け方にかけての貴重なレッスン
アルバイトとして入社して暫くは、全く何も貢献出来ない、実力がない自分がイヤで仕方なかったので、出来る限り夜遅くまで残って、ひたすら勉強も兼ねて作業を進めていた。
終電を逃す事もしばしばあり、そういう時はこれは良いキッカケだと思いそのままひたすら作業を続けることも良くあった。
そして大体そういう時はkamipoさんもオフィスで深夜まで作業をしていた。
深夜2時ぐらいだと他の人はおらず、質問がしやすかったので、ちょくちょくkamipoさんに日頃から気になっていた疑問を聞いてみたりしていた。
「かみぽさん、前から思っていたのですが、なぜここはこのような設計になっているのですか?」
「これはな、色々な理由があるねんけど、主に歴史的経緯からと脆弱性対策やねん。」
「これがこうやと、このケースのとき問題になるやろ?だからここをこうして・・・」
「なるほど・・・」
kamipoさんは、私にも分かるように噛み砕いて、本質的に重要な部分を論理的にきちんと説明してくれた。
kamipoさんはそういう時、根幹となる部分の説明を実際にコードを走らせたり、コマンドを実行したりして説明してくれる事が多かったので、実践的で非常に勉強になった。(コマンドはメモしてあとで意味を調べ、コードは後でもう一度自分で書いて、意味を再確認していた。)
これらのお陰で私はどんどん出来る事が広がっていった。
また、特に当時使用していたプログラミング言語の『php』という言語の仕様に関わるような質問をしたときは
「phpで、こういう事をしたいのですが、どういう書き方が一番良いのでしょうか・・?」
「あ〜、その書き方はイケてない。それはphp4.0系やとその書き方しか出来へんけど、5.0系からは変わったんやで。」
「だからこんな感じで書くとベストやねん」
「ちなみに、perlだとここはこういう書き方が出来て、この括弧は省略、しかもこのケースやとここはこう省略してこう書けるねん」
と、次々に私が知らない知識を教えて下さった。今まで自分は何も知らなかったんだと改めて自覚すると共に、本物のエンジニアというのはこういう方々なんだろうな〜と実感していた。
エンジニア力を底上げする文化と指導
kamipoさんは、私がコミット(書き上げたソースコードを皆に共有すること)をすると、そのコミットの内容をたまに読んで下さっていたようだった。(と言うか全員の全コミットを読んでいた可能性もある)
そして有難いことに、たまに良くない所を指摘してくれた。
「溝部君、あのな・・・」
「はい!」
「溝部君は、コミットの粒度が大きいねん」
「はい! と言いますと・・」
「コミットは、なるべく細かい単位で、何をしたかが分かる明確なコミットメッセージと共にやって欲しいねん」
「あとで読んだ時、コードの変更が何を意図していたか分からんやろ?」
と、エンジニアとしては当たり前の事で、かつ本では中々学びにくいような事を沢山教えてくれた。
「溝部君、このクエリやけど、これはなんでこう書いた?」
「order by RAND()の代わりに使った、これですか?これだと大体0.5~1秒以内に終わるので・・」
「1秒かかるクエリは遅いんや。あと、これだとスケールせえへんやろ?まずexplainを叩いてみ。ここでUsing filesortとか出てたらこのケースではアカン。」
「はい・・なるほど・・」
「まずクエリを高速に出来へんか考えてみる。どうしてもダメならKVSを使う。こういうクエリは書く前に相談してや」
また、セキュリティに関してもkamipoさんは非常に卓越した知識を持っており、Webアプリケーション開発で必要最低限備えておくべき脆弱性に関しても、私に沢山教えてくれた。
「溝部君、ちょっとええか?」
「はい!何でしょうか!」
「溝部君の作った所、脆弱性があるねん」
「え!すみません・・一応気を付けたんですが・・」
「HTTPのResponse headerのcontent-typeを適切に指定していない場合、仮にResponseをjsonで返したとしてもブラウザの仕様によってはXSSになるねん」
「なるほど・・・気を付けます!ちなみに、他に気を付けておいた方が良い脆弱性はありますか?」
「Web系ではSQL Injection, CSRF, セッションハイジャックぐらいに気を付けておけば、とりあえずはええで」
「了解です!!」
と、ある事柄に対して助言をくれた時は、それに付随して周辺知識を必ず教えてくれたので、私はどんどん色々な事を知ることが出来た。
本番のサーバーを落としたときは・・
私の失敗で、何度かモバイルの本番のサーバーを落としてしまったことがある。
「やばい、ユーザーからお問い合わせメールが1秒間に10通ぐらい来てる・・・」
「絶対俺の変更のせいだ・・・でも原因が分からない・・・しかも、元に戻したはずなのに元に戻ってない・・・」
「どうしよう、出来れば内緒で黙って直したい・・・・怒られる・・」
「けど、流石にこれは直せなかったら大きな問題になる・・・」
そもそもテスト環境できちんとテストをしていなかった私が完全に悪いのだが、事はすでに起こしてしまった後だ。こういう時はまず、インフラのリーダーをしていた店本さん、そしてkamipoさんに相談するのだった。
「kamipoさん・・すみません・・」
「お・・なんかユーザーからめっちゃメール着とるけど、これ溝部君?」
「(あ、バレてる・・)すみません・・・ここの修正でこうして、元に戻したつもりなんですが、戻ってないみたいで・・」
「ちょっと待っとき。」
「はい・・・」
「(カタカタカタ・・・)」
「とりあえず直ったで」
「早!!ありがとうございました!!すみません・・!!今度から気を付けます!」
「そうしてや〜」
と、大体の場合は、私が問題を起こしてしまった事はすでに気付いてた。
そして即効で原因を調べて、直してくれるのだった。
常々、これほど頼りになる人々はいない・・!と思っていた。
(ちなみに、私は隠してもどうせバレてるので、隠そうと思うことは無くなった)
最後の授業。最後のコミット。 - 卒業の日
そんなこんなで、私はピクシブを通じて基本的なWebシステムの開発技術と、正しいエンジニアの在り方というモノを学ぶことが出来た。
ピクシブには凄まじく優秀なエンジニアな方々が沢山集まっており、もちろんkamipoさんからだけでなく、多くの人から本当に広く深く、あらゆる事を教わった。
そうして2年間、沢山の事を学びつつみっちり働き、私はピクシブ卒業の日を迎えた。
私は、それまでの人生、特別に継続的に何かに打ち込んだ経験という物はほぼなかった。
特に他人と協力し、共通の目標に向かって何かを達成するために、ひたすら努力するという経験は一度もなかった。
しかしこの2年間、ピクシブでの開発は常に本気で、出来る限り自分のベストを意識し、やれる限りやると言う姿勢でやってきた。多くの人に迷惑を掛けながら、このサービスをもっと良くしたい、もっともっと上達したい!という気持ちでずーーっとやってきた。
そうして迎えた卒業の日、それが今日で終わりだと思うと、感慨深いものがあった。そうして自分の最後の仕事をきちんとやり遂げようとしていた。
しかし、まだまだ勿論ヒヨッコで、一部の場所の修正に手こずっていた。
「く〜・・・コピペコードが散乱してて、コードが全然見渡せない・・・」
「ここまでコピペされてるなら、俺もとりあえずコピペするしかない気もするが・・・それだと動かない・・・」
「時間があまりない・・早く完成させないと・・・」
そんなとき、私が苦戦している間に、たまたまkamipoさんが近くにいて、アドバイスをくれた。
「溝部君、今どこ触ってる?」
「ここをこう直そうとしてます・・」
「見せてみ?多分ここがこうなってるから、こうちゃうん?」
「ああー、なるほどー!!」
「あと、ここはこう書いたほうがええで」
「確かに!!」
と、相変わらず非常に適切に、助けてくれた。
でも、この日は普段と、どこか違う感じがした。
いつもならkamipoさんは、必要な事を私に指摘した後は、すぐに自分の席に戻るのだった。
「(カタカタカタ・・・)」
「・・・・」
「(あれ、kamipoさんが珍しく席に戻らない・・)」
「(カタカタカタ・・)」
と、そのままkamipoさんは、隣の席で自分のノートパソコンをいじりつつ、なぜか私の隣にずっと居た。
「あとちょっとで終わりそう・・!」
「溝部君、そこはこうや。」
「あ、はい・・」
「(いつもよりちょっと厳しい気がする・・・・?)」
「そうや。そっちの方がこういう理由でいいやろ?」
「はい!そうですね!ありがとうございます!」
「あとここもこうや。」
「はい!」
と、なぜかいつもに増して厳しく、私の作業を隣で適宜見つつ、kamipoさんは自分の作業を続けていた。
とは言っても、私は特に気にせず、自分の最後の仕事を進めており、そうして何とか時間通りにほぼ完成させる事が出来た。
最後のコミット。そして・・
作業が全て終わり、私は2年前は全く分からなかったバージョン管理システム、『Subversion』に最後のコミットを行おうとしていた。
「コミットメッセージは・・こんな感じかな・・・」
「溝部君、そのコミットメッセージはこう書くべきや。なぜならこれが後で分かったほうが後々良いからや。」
「なるほど!了解です!じゃあこれでコミットしますね!」
と、私は2年間一所懸命に働いたピクシブで、最後のコミットを行った。
そしてその時、kamipoさんが私に一言、言った。
「溝部君、これが最後のコミットやな。」
「はい・・そうなっちゃいましたね。。」
「・・・このコミットは良い。ええで。」
「・・・!!」
「今までのコミットで一番良い。」
「溝部君の今までのコミットは、色々ツッコミどころ満載やったけど、このコミットには1つも文句がない。」
「最高のコミットや。」
「kamipoさん・・!!」
「自信持ってええで!」
と、言ってくれた。
kamipoさんは、私の最後のコミットが一番良いものになるように、その日だけはずっと隣で作業しながら、私が書くコードを見ててくれたのだった。
そして必要があれば適宜指摘をし、最後の最後まで私に『良いコードの書き方』を教えてくれたのだった。
kamipoさんが最後まで付き添ってコードを見てくれたお陰で、私は最後のコミットを、今までで最高のコミットに仕上げることが出来たのだった。
あとがき
これで私の、ピクシブでのkamipoさんの話は終わりだ。
ピクシブが無ければ。そしてもしもkamipoさんがそこにいなければ、今の自分は絶対に無かっただろう。
『1ヶ月で、1年分成長出来る』
確か当時、ピクシブはアルバイトの募集でそのような見出しを掲げていたが、紛れも無い真実だったと思う。
24年間、何も考えずに生きて、何もやってこなかった分、ピクシブでの24ヶ月で24年分成長する事が出来て、何とか今の自分がここにいる気がする。
ピクシブでの経験は他にも色々あるので、それはまた別の機会に・・・・
(あ、今は新卒採用時期なので、ピクシブの説明会に参加してみると絶対面白いと思います!)
最後に、ピクシブで卒業の時にもらった色紙の、kamipoさんからのメッセージを貼ってこのストーリーを終わりにしようと思う。
書いてますよ!かみぽさん!