DeNAには、Innovation Labo.という社内ラボ制度がある。これを利用して、BEP(ビッダーズ・EC・プラットフォーム)の社内ツールを、既存のJavaに替えてRuby on Railsでスピーディーに構築する手法を確立した。 BEPのプロセスリエンジニアリングプロジェクトをリードし、要件定義・企画といった上流工程から実際のコーディングまでなんでもこなす「サービスリード」の鏡のような存在であり、またシステムエンジニアとしてビッダーズというECサイトを保守し続けつつ、新しい技術の吸収にも積極的だ。
Rubyに興味を持ったのは3年ほど前です。自分は10年ずっとJavaでやってきて、Javaしか知らなかったんですけど、LL(ライトウェイト・プログラミング言語)がブームになってきて、そこでちょっと「この先、Javaだけじゃメシ食っていけないかも」とおもったんです。
何を勉強しようかと悩んで、けっきょくPerlとPythonとRubyを3つ一気に始めました。全部で同じプログラムを作って、見比べたりしてるうちに、最終的にRubyが書いてていちばんしっくり来る。いちばんJavaっぽい……というか、自分のなかでJavaの脳みそから移りやすかった。
1年くらい勉強してるうちに、Rubyでプログラミングするのがすごく楽しくて、なんとか仕事に使えないかと、日常業務でもRubyをこっそり使っては、ますます「これは良いんじゃないか」とおもうようになって、ぜひビッダーズでも使ってみたい。それで上司にずっと「Rubyだ!」とアピールしていたら、「(DeNA Innovation Lab.で)やってみたらどう?」ということになりました。
DeNA Innovation Lab.では1カ月間、社内で別フロアに個室をもらって、RubyがホントにDeNAで実際の業務で使えるのか。検証ですね。そのときはまだ「社内のシステムを変えなきゃ!」とはおもっていなくて、ビッダーズはJavaで昔ながらの作りかたをしていたのですが、そこをもっと速く、楽に作れるようにならないか、というのが一番強い理由です。
Labでは試しに、管理系のウェブで画面数が5つくらい小さな1機能を、Ruby on Railsで書き直してみました。実装自体は2〜3週間です。既存のJavaのサービスと同じものを移植して、お互いのコード行数や開発期間、パフォーマンスを比べてみたんですが、コードの行数は減って、作りやすいし、良いんですが、Railsですからパフォーマンスの面で不安があり、実際に出来たものを発表したときも微妙な反応でしたね(笑)。決してすぐに賛同が得られたわけじゃないんです。
ただ、Javaに比べて遅いとはいえ、実用に耐えられないほどではなく、想定の範囲内ではありました。運用システムですから秒間何十件という要件もありませんし、普通に使える。それで2009年に入ってからも、バックエンドの小案件はRailsでポロポロと作ってたんですね。
そんな中で、夏にビッダーズの広告システムの改善があり、今までの改修案件より大きいんだけど、思い切ってこれもRailsで作り替えることになりました。
広告のシステムはもう10年くらい使われていて、使われてない機能がコード上にいっぱいあったり、使ってるのか使ってないのかわからなくてもテストはしないといけなかったり、ソースコードがかなりひどい状態でした。とくに今回の業務改善では新しいデータ構造や概念を大幅に導入するので、既存のコードに手を加えるのは大変だ、というのは見えてたんです。
大変だったのは、JavaかRailsかより、むしろシステムの外の世界でしたね。部署によって「こうなると便利」が違っているので、どこを着地点にするかの調整です。最初は私と実際の業務担当者の2人で、営業や現場の運用者の話を聞き集めて、サービス要件をつくるところから始めました。
設計以降の工程は、大変じゃないということはありませんが、昔から広告のシステムはソースも調べていて、ほとんど頭の中に入っていたので。スケジュールはすごく大変でしたけど。既存のDBに入っていたデータが、移行後もこれからのデータと不整合無く扱えるようには苦心しました。
それから実装の指示をして、実装されたシステムの品質チェックやテスト、リリースまで、4〜5人のチームを率いて去年(2009年)1年やってきて、ようやく周りも「いいんじゃないか」とおもってくれているようです。
今では、ビッダーズについては、バックエンドはもうRailsでサクっと作っていこうという方向になっています。広告のシステムもどんどん改善して、フェーズ3や4をやっていますし、それ以外の部分もRailsで書き直しています。Rubyはシンプルに作れるし、自動テストが作りやすいのも良いですね。
同じチームの開発者も、去年いろいろRailsで開発して、いまはもうRubyは良いと言ってます。どうしても、これまで使ってきた言語のほうが良いとおもっちゃうんで、最初の抵抗は強いですよね。私自身すごく苦労したんです。最初は「Rubyなんて嫌いだ」とずっと思ってたんです。何をやっても「やっぱりJavaが一番だ」と思っていたのが、いつの間にかRubyのほうが好きになってた。
ポイントは、何だろうなあ……やっぱり最初って新しい言語のことをあまり理解できていないじゃないですか。根気よく新しい世界を理解することがポイントですよね。どっちも理解してから、どっちが好きかって判断をしてくれればいいんですけど。
3〜4年前から、Rubyの勉強と並行して、プライベートでもLinuxをいじってるんです。ノートPC買ってきてはLinuxに入れ替えたりして遊んでました。今後は、もっとLinuxに特化したアプリケーションをCで作ってみたいですね。ウェブアプリケーションじゃなくて、ウェブサーバーとかデータベースとかです。
去年からCを勉強しはじめて、とりあえずウェブサーバーを作ってます。いや、Apacheには満足してますけど(笑)、Apacheより速いものを作りたいのと、そういうネイティブなところを理解すれば、自分でもPassenger(Railsアプリケーションを実行するためのApacheモジュール)のようなものが作れるんじゃないかと。
ビッダーズ内でRailsのコードが増えているとはいえ、まだフロントに使うのは危険かな、というのはあります。アクセスの少ないところはぜんぜん問題ないと思いますが、商品画面のようにPVが多くて、速度を求められるところは止めたほうがいい。
だから、もうちょっとRailsを速くする方法も見つかるんじゃないかとおもって、勉強しているところです。
今はパワポとエクセルが主戦場になってますが、ほんとうは自分が作った要件を、自分で実装したいんですよ。自分がいちばん要件とか仕様を理解しているんだから、自分で作るのが一番いいですね。他人に伝えるための資料をいっぱい作って説明したりする時間も要らなくなりますし、自分で作っちゃえば(笑)。
やっぱり動くものを作るのって楽しいじゃないですか。でも実装ばっかりでも自分は満足しなくて、実装に至るまではこういうビジネスの目標があって、これこれこうだから実装するんだという全体を理解したうえで実装したいんです。「何でも屋さん」が目標ですね。
自分は何かサービスを立ち上げる、みたいなところにはまったく興味がなくて、何かをやりたい人に会って、要件を聞き出して、理解した上で「じゃあシステム面はバッチリ作るよ」みたいなところに興味がある。
それに、ビッダーズ大好き人間なんですよ。愛着もあるし、自分もショッピングに使っているし、周りにケータイのゲームをやってるひとはいないけど、ビッダーズなら送付先を実家にすれば親も喜んでくれるし(笑)。だから社内のほかのサービスへの興味もまったく無いわけではないんですが、当面はビッダーズですね。