楽天の創業したころの、開発に関するエピソードを教えてください。
楽天の創業期というのは、GoogleやFacebookと違ってギークな人がプログラムを書いて立ち上げたわけではありません。三木谷さんが、『初めてのSQL』っていう本を買ってきて、協同創業者の本城さんに対して、「お前これ読め」って(笑)。そういうところでプログラミグを全くやったことがない人が1から始めた、という経緯がありました。そもそも1996年で商用のISPが始まったとかそういう状態だったので、ウェブのインターフェイスを開発する技術っていうのはあまりなかったです。
当時そういった状態だったので、誰もプログラムを教えてくれる人がいなかったです。ですので、家庭教師みたいな形で当時ニチメンデータシステム、今はテクマトリックスという会社の人が、駆け出しのスタートアップに教えてくれるような形でした。
本城さんと私と家庭教師がいて、それで書き始める、といった感じでした。ですので、すごく牧歌的な感じですよね。最初は手元にあるサーバーで開発して、その後でちゃんとしたデータセンターに移設するわけですが、移設の時にはシャットダウンして電源抜いて、タクシーで運んで、そのあと手で組み立てる、というようなことをやっていました(笑)。
そのあと本番にローンチした後も、店舗から電話がかかってきて、「動きがおかしいです」と電話が来ると、その間に「あ、おかしいですね。今修正しました」といった形で本番環境のソースコードを直接書き換えて、ある意味フランクに修正する、そういう世界でした。
–テスト環境はなかったのですか?
最初はテスト環境はなかったです。実際に環境が構築されるようになったのは、創業期の初期の頃、第二、三のエンジニアが入ってきて、そろそろ作ったほうが良いよね、ということでできるようになりました。
家庭教師がついた状態でやっていたかと思いますが、当時プログラミングに関する知識や経験はどの程度のレベルでしたか?
基礎はありましたが、職業プログラマとはかけ離れたレベルでした。ただ、それだけではもちろん実務上やっていけるわけではないので、サービスの正式ローンチ前には凄腕プログラマが数名入社してまともなプロダクトに仕上げていきました。
エンジニアリングに向いている、向いていないの判断基準はありますか?
良い言葉でいえば探求心がある人、悪く言えば細かい人ですね。お客様に何を提供するか、お客様のことをイメージしながら、細かいこだわりを持てるかどうか。細かいこだわりを持てるから、技術を身に着けようというモチベーションが湧くわけで、そもそもやはりコードを書いて動けばいいやという人はあまり向かないです。
一般論から行くと難しいですが、たとえば、インターネットの世界って、作ったページがしっかりと表示されているかどうかかわからないじゃないですか。なので、ちゃんとお客様のところでページが表示されているか、相手がパソコンで見ているのか、携帯で見ているのか。はたまた、たまにWiiで見ている人もいるので、お客様がどういう情報を送ってくれていて、我々のシステムがコンマ何秒で返していているのか。
どういう方法でレンダリングされているのか、それに対して適切な情報を返すのはどういうロジックでどういうコードを書いていけばいいのか。そういった事をトータルで考えて、最適な技術を選ぼうという人ではないとやっていくのはなかなか難しいと思います。
美しいロジックや、細部に至るまでこだわりが持てる人。また、お客様を意識できなくてはいけないので、人に興味がない人はいいエンジニアにはなれないと思います。結局いいものをお客様に届けるかどうかなので。
そういう神は細部に宿るではないですが、結局使っている人のイメージができるかどうかという想像力ではないでしょうか?技術はそれに従って勉強すればよいので、解決できない問題をどういう技術によって解決するか、そのモチベーションが大事だと思います。そのツールをたくさん持っている人がすごいエンジニアというわけで、そのツールをどれだけ短期間でそろえられるか。短期間でそろえるためにはモチベーションが大事ですからね。
とにかくオープンマインドでお客さんにこれを提供するのでこれを解決するのだと、手段を問わない人の方が強いと思うし、いいエンジニアだと思います。
–会社の規模が拡大してくると、やはりサーバーサイドエンジニア、アプリケーションエンジニアなどどちらかだけを見ていて、どこか一か所、仕事上やっている、という人も多いと思うのですが、それを伸ばす機会を得ようと思ったら、どうしていけばよいのですかね。
専門領域が幅広くなくても、結局それをお客様に価値を提供しているどこかのパイプラインを自分が担っているだけなので、全部に対して興味があることが大事だと思います。
例えばサーバーサイドのエンジニアも、安定して稼働していればいいや、ではなくて、どれだけApacheなりなんなりプロセスが食うメモリをどれだけ少なくして、どれだけ速く返すか、どれだけ無駄なものを読み込まないかとかをしっかりと考えるようにした方がいいのではないでしょうか。
サーバーを安定運用すればよいというモチベーションではなく、どれだけお客様にいい形で答えを返していけたらよいか。そのような気持ちで新しい技術にチャレンジすると、勉強する意欲がわいてくると思います。
分野が違っていてもつながってくることだとは思いますね。例えば、この間楽天スーパーセールがあったわけですが、あの時も買い物の流通が上がって喜ぶエンジニアがいれば、買い物のトラフィックが上がって喜ぶエンジニアもいて、確かに自分の専門領域によって、ちょっと見ている部分は違うのですが、お客様に使われているということには共通しているので、やっぱりお客様に価値を提供しているというのが一番大事だと思いますけどね。
–こういうことをやっているといいエンジニアだな、と思うことはありますか?
やはり難題に対して、何とかポジティブに回答を見つけようとする人はいいエンジニアだと思います。そこはわからない、領域外なので、と自分の中で線を引いてしまう人は正直な話、あまりいいエンジニアではないかなと感じています。
例えわからなくても、あの人なら知っているとか、人に頼ってでもとにかく相手に対して何かの価値を提供しようとしている人は素晴らしいと思います。
–知らない人を見つけてきて、その人にポイントを絞って聞く、というのは経営者っぽい気がしますね。
正直な話、1人で全部を把握するのは無理だと思います。広すぎて。ただ、やはりここからここまでは、サーバー周りでやったほうがいいだとか、この言語じゃない方がいいとか、そういうことエンジニアは大体わかるので、最もよい答えを出せる人でチームを組んでいくのが大事だと思います。
–サーバーサイドで何とかするのか、アプリケーションで解決するのか、どちらでよせるかという。
そうですね。クライアントのメモリやCPUが十分であればサーバーサイドで処理するよりもクライアントに任せた方がいいケースもあるし、反対の場合もある。大事なのはコンピューターの根っこをちゃんと理解していることだと思います。
結局、そうすると餅は餅屋で、OS、チューニングをできる人を探したうえで他は別の手段で考えて、という風にしていくことができます。知識をこうネットワーク化して答えを出せる人がいいエンジニアだと思う。
NTTから、なぜ楽天に入ろうと思われたのですか?
NTTの内定が決まった後で、アルバイトとして楽天立ち上げの手伝いをしていました。ですのでNTT入社前にベンチャーのダイナミズムを経験してしまったわけです。
楽天に入った理由としては、私は先が見えるとつまらなくなるからですね。NTTはとても安定した会社ですので、自分の10年くらい先のキャリアがとてもよくわかります。それがつまらないと考えてしまって。それがきっかけで楽天へ移りました。
楽天に居続ける理由は、ずっと先が見えないからですね。よく人には、ここで働くのは、ジェットコースターのようですよ、と伝えています。がたがた上がっていって、一気に落ちて、どちらに振られるかわからない、それが毎日続く感じ。大変っちゃ大変だけど刺激にはあふれる会社ですよね。
常に予想外のことが起こる。わからないのが楽しいのですよね。50、60代になったらそういう風に言っているかわからないですが、少なくとも20、30代は先が見えないほうが楽しいので。
–当時楽天のアルバイトにはどのように誘われたのですか?
本城さんと当時友達で、バイトしない?と話された事がきっかけです。当時楽天はスタートアップ時期で、スタートアップは常日頃、注目されないし、大変だし、友達に声をかけるほか手伝ってくれる人を見つけられないですからね。
だから名刺もっていっても何も信用してもらえない。本当に転職する、といったときは、やめておけと止められるし。まあスタートアップってそんなものですよね。
とはいってもそもそも自分でビジネスをやろうと思っていたので。だからいい勉強になるか。どうせつぶれるかもしれないし。と思って入りました。成功するとは全く思ってなかった(笑)。そもそもインターネット自体が怪しい時代でした。
会社の規模が大きくなると、仕事の仕方と内容が変わってくると思いますが、メリット、デメリットを楽天の過程を踏まえて教えていただけますか?
そうですね。小さいとすごくいいのは、一人がやれる裁量、フレキシビリティーが高いので、楽しいしやりがいもあります。ただ、問題が一つあって、勉強ができないですね。例えば、5人~10人で、同じ会社を10年やると、みんなお互いの人間関係に飽きる。固定化された環境で10年やると、本当に冷え切った関係になるので、刺激がなくなるのですよね。気づき、学びが減ってしまいます。
やはり人間って、成長する生き物なので、時間とともに新しい刺激、新しい学びをいろいろな人から影響受けて大きくなっていくと思っています。だから、人が多いということは本当にいろいろな人と仕事ができて学ぶ場も得られるので、圧倒的に楽しいし、自分自身の成長のスピードが上がります。
だから小さいがいいか大きいがいいかはあまり問題ではないと思っていて、継続的に人や環境が流動的か、どんどん成長していっているか、自分が刺激を受けられる学べる人がいるかという点がはるかに重要で、例え1,000人でも、1,000人固定した10年であればつまらないと思います。
自分が刺激を受ける対象が多いことが重要で、人数の多い会社はそれができる可能性が高い。さらに言うならば、色んな人がいるほうが、その刺激を受ける可能性が高い。
–新しいことをやろう、その時にこういった技術が必要で、新しい人が入れ代わり立ち代わり来ていたとしたら、刺激を受けたり、新しい技術に挑戦しようと思ったり、となると思うのですが、そうでない場合、例えば運用保守であれば、これという仕事が決まっていて、周りにいる人も同じであれば、わざわざ小難しいような新しいことをやってみよう、ということにはならないかもしれないですね。
運用もいくらでも改善することがあると思います。個人的には運用大好きなので。無限に実例をあげられますよ。運用だろうが新規開発だろうが、新しい技術をどんどん試すことはできるし。
ポイントは、人間もコンピューターも全く同じように成長する。より効率がよくていいものができるチャンスは無限にあって、そのチャンスを掴み取れる、自分が掴み取れるパワーがあるほうが大事だと思います。
例えばSSDに詳しい同僚とかもいて、型番毎の違いについて1時間でも平気で語ってくれる。とても勉強になります。もうめちゃくちゃオタクなので、そういう仲間が得られるのは大きな規模じゃないとなかなか難しい。たまに小さな会社でもスーパーな人がいて、その人から学べることがあるけれども、その人がいなくなったり、その人の知識に自分が追いついたりすると、そこで終わってしまう。常に新しいことを学べる環境というのはとても大事だと思います。
–創業当初の段階の楽天で、もう少しすごい人に囲まれていれば周りにすごい人がいたかもしれないのになってジレンマを感じたことはなかったのですか?
幸いなことに私には師匠がいたのでそうはならなかったですね。
–どのような形で教えてもらっていたのですか?
横で見ているだけです(笑)。モデルにするというか。基本的にベンチャーなので仕事の指示もなければ、手順もないし。初めて入った時に自分が何をすればよいのか全くわからなくて、誰も教えてくれないし、自分で仕事を探さないといけないので、横からモニターを見させてもらって覚えるしかない。以上!みたいな(笑)
あとは質問力でしょうね。自分がわからないことを素直に教えてもらえることとか、相手に気を遣いながら聞けることかと思いますね。
–そういったすごい方が集まっていたというのは、可能性を感じたから集まってきたのですかね?
三木谷さんのエネルギーだと思います。協同創業者の本城は三木谷さんに惚れて会社をスタートしました。それに触発された私は、いつか勉強になるかもしれないから、とノリで行きました(笑)。私が紹介したエンジニアの人たちも、何か面白そうだからいいか、と思ったらしい。ノリと勢いと、縁と運と偶然。そういう気がします。
例えば三木谷さんがエクセル上の数字にしか興味がないような人だったら私が紹介した人も居つかなかったかもしれないです。三木谷さん自身はプログラマーではないけれども、理解しようとするし、一緒に面白いことをやろうよと、オーラや雰囲気を出す人だったので、この人と一緒に働いでみたいと思わせることがあったのでしょうね。
さっきの最初のプログラミングの話のところに戻るのですが、楽天のRMS作っていて、店舗の看板をかっこいいものにしたい、ということがあったのですね。当時はその画像の加工ソフトとかもあまりなかったので、テキストで打ってフォントを選んだら、自動的にバナーが出来上がるようなものが作れないかと三木谷さんに聞かれました。
できる、とは思うのですが、そのためにはプログラミング言語を覚えないとダメでしょうね。と言ったら、三木谷さんに「行くぞ!」と言われて車に乗せられて、当時のオフィスの神谷町から丸の内に行って、どの本買えばいい?と言われて、ここら辺の本ですよ、といったらそのあたりにあったC言語の本を全部買って帰って、次の日会社行ったら「半分読んだ」と言ったりとか。
「わかった!俺がやらないほうがいいから他にできる人探してきてくれ!」と言われたのですけれども、三木谷さん実際にいくつかコードは自分で書いていて、今でも社長室に飾ってあるものがあります。入力をするとお金のフォーマットにして返してくれるっていうC言語を自分で書いた、それをちゃんとコンパイルして本番のシステムで動いていました。
そういう人だから、一緒に働こうと思える、すごい人がここで働いてみようと思えるような環境があったと思います。
もし自分が20代の前半の学生だったら何をしていきたいと思うか、エンジニア就活の学生に対して一言お願いします。
私は40代前半なのですが、昔に比べれば今ほど恵まれた環境は考えられなくて、何だって作れるじゃないですか。今はスマホにカメラなどのデバイスもあって容易に使えますし、Wearable Deviceなどもたくさん出ているし。
とにかくありとあらゆる新しいことができるものが出ているので、何だってやりたいことができる。今はマネジメントしているのでできないですが、とにかく狂ったようにものを作り続けたいと思いますね。当時私はテニスをずっとやっていたので、LeapMotion使ってもしくはKinectでもいいですが、うまい人の行動、スイングをとって、自分のスイングをとって、ちゃんと解析したうえで何が違うのかを機械で出したいと思っていて、それはいまだにやろうと思っていますね。
なので学生の皆さんは、自分のやりたいことをプロダクト化するような挑戦をしてみる事が大切なのではないでしょうか。