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