目次
■エンジニアの軌跡
2018.04.13 2024.03.28 約7分
さまざまな企業で働くエンジニアとリレー形式で対談を行うDevRelay。vol.22は、クックパッド株式会社の丸山亮 (@h13i32maru) 氏 。クックパッドの投稿開発部部長を務める丸山氏は、GitHub の issueリーダーである「Jasper」や、JavaScript のドキュメントジェネレーターである「ESDoc」の開発者としても知られる敏腕エンジニアです。
会社ではマネジメント業務をしつつ、個人的にはソフトウェア開発や料理にいそしむ丸山氏。これまでのキャリアや業務外の活動に対する考え方、今後のビジョンについて伺いました。
idesaku:ブログを拝見させて頂いたのですが、丸山さんは三重県から東京に出てこられて、KLab で働かれるようになってから、初めて Web系の開発をやるようになったのですよね。それまでは、どういった技術に関わってこられたのでしょう。
h13i32maru:学生時代は高専の電子情報工学科にいました。僕は高専で初めてプログラミングに触れたのですが、あまり研究の意義など考えずに、ただ面白くて、ひたすらソフトを作っていました。
idesaku:その延長線上で、三重県のソフト開発をしている会社に就職されたのですね。
h13i32maru:はい。高専を卒業してから、三重にあるベンチャー企業に4年ほどいました。
idesaku:そちらでは、どんなお仕事をされていたのでしょう。
h13i32maru:シンクライアントシステム向けのソフト開発ですね。そのシステムはサーバ側が Windows で、クライアント側の Linux からリモートデスクトップサービスにアクセスするような仕組みだったのですが、主にそのクライアント部分を作っていました。
KNOPPIX を USBブートしてシンクライアントを立ち上げられるようにしたり、マシンによってはネットワークにつなぐのに無線LAN を使いたいケースもあるので Wi-Fiドライバを組み込んで動かせるようにしたり…って、これ、かなり大変でツラかった思い出なのですが(笑)、そんなことをやっていました。
idesaku:なるほど。かなり低レイヤを扱う仕事をされていたのですね。
h13i32maru:Kernel に手を入れるようなことまではしませんでしたが、今と比べれば低いレイヤを扱っていましたね。
idesaku:そこから、東京に出てこられて KLab へ就職されたのですね。そもそもの動機はなんだったのでしょう。
h13i32maru:以前から Web系の開発をやりたいという思いは強かったんですよ。そうすると三重では会社もなかなか見つからなくて、であれば東京に拠点を移して…という感じですね。
idesaku:今も昔も IT系の仕事は東京に集中していますからね…ところで、KLab では中途採用になると思うんですが、そうした会社に、これまで関連するキャリアを積んでこなかった人が入るのは大変だったのではないですか。
h13i32maru:転職する少し前から、自分で Webサービスを作って公開したり、Greasemonkey でジョークツール的なものを作ったりといったことはやっていました。
idesaku:どんなものを作られたのですか?
h13i32maru:Greasemonkey では「Twitter の見た目を Google の検索結果と同じデザインで表示するツール」とか作っていましたね。「会社で Twitter やっててもバレない!」という触れ込みで。
インフラ担当になる可能性もありましたが、そちらに興味が持てなかったので、どうしてもサービスに関わる部分をやりたいと希望を出して入れてもらいました。当時の KLab はゲームの会社というよりも、まだ受託の割合が大きかった時期で、ちょうど僕が入ったころが転換期でしたね。
idesaku:その後、現在いらっしゃるクックパッドに移られるわけですが、直接の動機は何だったのでしょう。
h13i32maru:自分の中では、自分自身もユーザーとして利用するようなサービスの開発にかかわりたいという思いが強くなったんです。料理は以前から好きでしたし、クックパッドも以前からユーザーとして使っていましたので、そこで働いてみたいという気持ちはありましたね。
idesaku:丸山さんは料理だけでなく(笑)、開発者向けのツールも多く作って公開しておられますよね。中でも GitHub の issueリーダーである「Jasper」は、非常に便利で私も購入して使わせてもらっています。
h13i32maru:ありがとうございます。
idesaku:Jasper を使うようになるまで、一般と Enterprise版の GitHub をまたいだマルチアカウントで、issue をまとめて追おうとすると、メールくらいしか方法がなかったんですよね。検索クエリを工夫して、最近自分が手がけた仕事に関係ありそうな issue をキャッチアップする、なんてことも簡単にできて、非常に役立ってくれています。
h13i32maru:Jasper を作ろうと思ったきっかけは、GitHub を採用している企業での「Issue が追いきれない」という問題を解決したかったというのがあります。
GitHub を使っていると、仕事の大部分が issue で動く感じになりますよね。規模が大きくなったり、複数のプロジェクトに関わっていたりすると、溢れかえる issue が追い切れなくなり、常に「見落とし」の不安にもつきまとわれます。それがかえって仕事の効率を落としている気がしたんです。それを何とか効率化したいと思って作りはじめました。
idesaku:ちなみに「売りきりで12米ドル」というライセンス価格は、どのようにして決めたのでしょう。
h13i32maru:そもそも有料にしたのは、会社での仕事とは別に、自分の力だけで「お金を稼ぐ」という経験をしてみたかったというのが大きいです。価格については、社内で何人かにアンケートをとったのですが、それで1,000円前後のところにボーダーがあることが分かって、そのあたりで決めました。
idesaku:最近だと、こうした有償ツールはサブスクリプションが主流のようなイメージもあるのですが、あえて「売り切り」にされたのには理由があるんでしょうか。
h13i32maru:継続的にお金を払い続けてもらうのはハードルが高いと思ったのが大きいですね。ユーザーに有料継続するモチベーションを与えるための機能強化なども必要でしょうし、それに見合うサポートもしなければいけない。個人でのソフト開発を副業にするつもりもありませんでしたし、そもそも、自分が作ったソフトをお金をいただいて使ってもらうということ自体が初めてでしたので、ハードルの低そうなほうを選んだという感じです。
idesaku:なるほど。丸山さん作のソフトと言えば、JavaScript 向けドキュメントジェネレーターの「ESDoc」も有名ですが、こちらのほうは OSS として公開しておられるのですよね。
h13i32maru:はいそうです。
idesaku:ソフト自体を開発されたこともスゴいと思うのですが、ESDoc では独自にホスティングサービスも提供されていますよね。そのあたりまで気を回して展開されているあたりに感心しました。
h13i32maru:ありがとうございます。ESDocは、僕がこれまでに作ったツールの中でも一番使われているんじゃないでしょうか。
最初はコードにドキュメントを書くところからスタートしているんですが、だんだんと、Markdown などで書かれた説明もドキュメントとして内包できたり、プラグインで機能拡張できたり、ドキュメントのカバレッジを測定できたりするようにして、ドキュメント作成まわりを包括的にサポートできるようにしていますね。
idesaku:ドキュメントのカバレッジを算出して表示する機能というのはユニークですよね。
h13i32maru:作った後でいろいろ調べてみたら、Ruby の YARD というドキュメンテーションツールでは、機能拡張で同じような機能が使えるようですが、ほかにはあまり聞きませんね。
idesaku:Jasper にしろ、ESDoc にしろ、個人の趣味でやっているような開発は、週末に作業をされるのですか。
h13i32maru:僕の開発スタイルは、「こういうものが作りたい」と思ったら、まずは頭の中で作り方を考えるんです。で、頭の中で十分に練り上げて「これ以上はコードを書かないと進まない」状態になったら、週末に一気に作るという感じですね。平日は、よほど気分が乗っているときじゃないと趣味のコードは書きません。
idesaku:たしか「Jasper」も最初のリリースは2~3日で作れたそうですが。
h13i32maru:ほかのものも、だいたい同じです。ESDoc は、最初 JSDoc という別のツールのプラグインとして構想したのですが、いろいろ調べる中で内部的な構造も分かってきたので、単独のツールにしてしまおうと決め、2~3日程度で一気にコアの部分を作りました。
idesaku:そうやって作ったツールを公開したり、販売したりすると、ユーザーからの反応があるわけですよね。
h13i32maru:はい。厳しい意見もありましたが、それほど無理な要求をしてくるユーザーさんはいないですね。
ESDoc については OSS なので、機能に関するリクエストというよりも「他のドキュメントツールと統合したほうがいいんじゃないか」とか、全部1人で作っているので「メンテナーを入れた方がいいんじゃないか」とか、熱心に提案してくれる人はいますね。
idesaku:たしかに使っているユーザーの立場だと、ツールの開発が継続的に行われるかどうかというのは重要なところなので、そういう要望は出てきますよね。
h13i32maru:ええ。僕も使う側であれば、そこを心配すると思うので、気持ちはよく分かります。
idesaku:でも、開発に関わる人を増やしたり、会社組織として運営したりということは考えておられないのですよね。
h13i32maru:そうすると目的からぶれてしまうのですよね。これらのソフト開発は、作るところから、使ってもらうまでの過程をひととおり自分で体験して理解したいという動機で始めています。
idesaku:なるほど。では、そうしたことを「自分でひととおり体験して理解したい」という思いはなぜ出てきたのでしょう。
h13i32maru:クックパッドでサービスを作るようになったことが大きいと思います。KLab では、事業部にはいたんですが、どちらかというと基盤に近い部分をやっていました。なので、何を作るかというのにはあまり関わっていなかったんですよ。
クックパッドで、そうした部分に「何を作るか」を考えるところから関わるようになって「サービスを作り、使ってもらうとはどういうことか」というのを、そのプロセスを含めて自分の中に持ちたいと思うようになった気がします。
idesaku:あと、特に Jasper に関する活動についてなのですが、自分でやるにあたって参考にした人やプロジェクトのようなものはあるのですか。というのも、このツールについては、非常にしっかりと広告宣伝的な活動をされている印象があるんですよ。Electron のブログにプロジェクトの進捗をアップしたりもされていますよね(参考リンク:Project of the Week: Jasper)。
h13i32maru:そうですね。
idesaku:普通、個人が趣味でやるプロジェクトに関しては、やったほうがいいにしても、あまりそういう宣伝のようなところまで気が回らないような気もするんです。もしかしたら、何かお手本のようなものがあったのではないかと思ったのですが。
h13i32maru:特に「これを参考にしました」というのはないですね。いろんなものの見よう見まねというか…。
idesaku:テキスト的なものを読んで勉強したというわけでもない。
h13i32maru:ええ。でも、実際にやってみて痛感したのですが「売り方」については、自己流だけだと難しいですね。
idesaku:それはどういう点ですか。
h13i32maru:自分なりにいろいろ考えて、宣伝の一環としてエンジニアが集まるイベントでクーポンを配布するようなこともやってはみたのですが、最終的に多くの人に「お金を払ってソフトを使ってもらう」ところまでもっていくのは非常に難しいと感じました。この部分については、一度、体系的に勉強してみたいですね。
本などを読んで勉強するにしても、一度、自分に経験があった方が理解が深くなると思うので、Jasper でのいろんな試みは有意義だったと思います。
idesaku:本業のクックパッドでは、最近マネジメント方面に注力されていますよね。理由としては「ひとりでできることには限界がある」と感じられたからということなのですが、それもクックパッドでサービス作りに携わるようになった中で生まれてきた思いなのですか。
h13i32maru:クックパッドでも、KLab でもそうですが、一緒に働くエンジニアの中には、僕よりも優秀な人がいっぱいいます。そういう人たちに協力してもらえれば、何かを作りたいとき、自分がコードを書くよりも、良いものが早くできるというのは事実です。
それならば、自分はコードを書くよりも、より価値を出せるところで仕事をしたい。一般的にエンジニアにはマネジメントをやりたがらない人が多いのですが、自分はマネジメントをやることにそれほど抵抗がないんです。
idesaku:そういえば、最近、「同僚にマネージャーとしての自分の評価をしてもらった」というのをブログで公開されていましたね。(参考リンク:一緒に働いているチームメンバーに評価してもらう)
面白いと思ったのは、自作したアンケートの項目を Creative Commons で公開していたことです。「読んで終わりじゃなくて、みんなもやろう」と、うまく焚き付けているというか。
h13i32maru:あれをやろうと思ったのは、以前に読んだ『ワーク・ルールズ!―君の生き方とリーダーシップを変える』という本の影響が大きいですね。Google の人事戦略についての本なのですが、その中で Google では、ああした方法でのマネージャー評価を定期的に行っているみたいなことが書かれていたんです。
自分も、いいやり方だと思ったし、あのような形でエントリとして公開しておけば、それに興味を持った人が自分にコンタクトしてくれて採用につながったり、自分のようにマネージャーをやっている多くの人にとっても、何か良い影響があったりするんじゃないかと思ったんですね。
idesaku:そういえば、「CodeLunch.fm」というポッドキャストもやっておられますよね。あれは、きちんと毎回、台本を用意してしゃべっているという感じなのでしょうか。
h13i32maru:
そうですね。台本と呼べるほどかっちりしたものはありませんが、ゲストの方と事前にトピックを決めておいて、それに沿って話しています。
idesaku:エンジニア向けのポッドキャストとしては、かなり早い時期に始めておられますよね。
h13i32maru:
あれは宮川達彦さんの「Rebuild」が始まって10回目くらいのときに「面白そうだから僕らもやってみよう」とエンジニア仲間とはじめたのが最初ですね。今ではエンジニアの Podcast っていっぱいありますけれど、Rebuild のフォロワーとしては早いタイミングだったと思います。
idesaku:Podcast にしても、Jasper のような「ソフトを開発して売る」という試みにしても、「やってみよう」と思ってからの行動力がすごいと思います。丸山さんは、わりと新しいことに挑戦するのが苦ではないほうなのですかね。
h13i32maru:また意外に思われるかもしれないのですが、どちらかというと「未知」のことに手を出すのは苦手なほうで「保守派」なほうだと自覚しているんですね。
例えばモノを作るときも、自分が良く知っているものでできるのであれば、ちょっと面倒くさくても泥臭くやってしまうほうです。僕は JavaScript を一番多く書いているのですが、gulp や Webpack みたいな周辺ツールは、どれもほぼ使ったことがないですね。
idesaku:そうなんですか。特に使わなくても困らないものなんですかね。
h13i32maru:自分はどちらかというと、それらのツールを使う必要があるライン上にいないことが多いんですよ。フロントエンドよりもサーバ側を扱うことが多くて、Node.js や Electron では、あまりそのあたりのツールのお世話になる必要性がなかったというか。別に意図的に避けてきたというわけでもないんですけれどね。
idesaku:では、Electron 慣れしている丸山さんが、最近になって同ジャンルの React Native に興味をもたれたのは珍しいことなのですね?
h13i32maru:同僚が React Native でプロトタイプを作っているのを見て、「良さそうだな」と思って自分でも試してみたら、実際すごく良かったんです。で、しばらく趣味の範囲でいじって評価してみて、仕事のほうにもバックポートした感じですね。現状、プロトタイプを素早く作成できるようなものを React Native で動かしています。
idesaku:仕事でも使っているのですね。クックパッドでは、そういう決定に関するエンジニアの裁量というのは大きいのですか。
h13i32maru:個人の裁量は大きいと思います。僕は今マネージャーをやっていますが、マネージャーが自分のチームの戦略やコンセプト、方針などを決めていって、それを実現するための技術選定や配信方法などについては、メンバーが各自考えてやってくれている感じです。
idesaku:会社や部門の戦略に合っていれば、使う技術や方法については自主的に決めやすい環境なのですね。
h13i32maru:会社の思想としても、社員に「自分で判断して、自分で走る」ことを求めていますね。で、それぞれの判断や行動を、事業戦略に合わせたり、ユーザーに提供する価値を高めたりできるように調整するというのが、マネージャーの仕事になります。
idesaku:クックパッドって、私から見ると非常に精鋭ぞろいの会社で、プロジェクト運営にしてもある程度いい形ができあがっているイメージがあります。丸山さんはそこに中途で入られて、マネージャーをされているわけですけれど、その立場で、今後ここを変えていきたいというようなビジョンはあるのでしょうか。
h13i32maru:何かを変えるというのは、ちょっとおこがましいのですが、自分がクックパッドでマネージャーをやるにあたっては「プロダクト」と「プロジェクト」と「ピープル(人)」という3つを、きちんと見られる、つまり「マネジメント」できるようになりたいという思いがあります。ですので、常にその視点から自分の仕事を設計することを意識するようにはしています。
idesaku:仕事にも、自主開発にも本当に精力的に取り組んでおられると思いますが、将来的な目標のようなものはありますか。例えば、いわゆる「勉強」や「経験」の域を超えて自分で作ってみたいものの構想などはお持ちなのでしょうか。
h13i32maru:個人として「作りたいもの」のイメージは常に持っていますね。僕の場合、Webサービスを作れるようになったのも、JavaScript を書けるようになったのも、すべて「こういったものを作りたい」という思いが始まりです。それがなくなってしまうと、僕の価値は下がってしまうので、その源泉が枯れてしまうのが一番恐いです。
idesaku:先ほど仕事については、「プロダクト」「プロジェクト」「ピープル」のマネジメントを意識しているということでしたが、自主開発については「プロダクトマネジメント」の部分に意識が集中するという感じですかね。
h13i32maru:そうですね。仕事でも、どちらかというと「プロジェクト」については、優秀な人が多く、方法論もある程度確立されているので、それほど厳しく管理しなくてもうまくまわります。仕事については「プロダクト」と「ピープル」のマネジメントに集中できる環境です。
idesaku:仕事でものを作るときのアイデアについても、ご自分で発想されることが多いのですか。
h13i32maru:いろいろですね。自分で出すこともあるし、チームのメンバーから出てくるものも多いです。
idesaku:その意味でも「ピープル」のマネジメントは重要ということですね。自主開発に関しても、他のエンジニアとの接点が増えることで、作りたいもののイメージが増やせたり、膨らませることができたり、という可能性はありませんかね。
h13i32maru:個人でやる開発については「やりたいようにやれる」ようにしておきたいので、誰かと一緒にアイデアを出したり、作りはじめたりというのは考えていませんね。もちろん、実際に使ってくれた人からのアイデアやフィードバックを反映するというケースはあるのですが。
仕事でも、自分のアイデアからプロトタイプをガッと作ってしまって、それを見てもらった上でチームのメンバーに発想してもらったり、改善してもらったりということが結構あるんですよ。何もないところからスタートするのは難しいので。
idesaku:アイデアを形にして見せられるというのは、開発者としての強みのひとつですよね。別にマネジメントをやっているからといって、エンジニアリング力を発揮してはダメなわけではありませんからね。
ちなみに個人で新しく作り始められている「Trickle」(参考リンク)は、今後育てていかれるのでしょうか。
h13i32maru:Trickle については、自分ではもう使っていて満足しているのですが、できればちょっと挑戦して、ある程度手を入れてストアに出すところまでやってみたいと思っています。
idesaku:今回も有料にされるのですか。
h13i32maru:今回については無料でやろうかなと。ただ、サーバに Google Cloud Platform を使っているのですが、利用料が Trickleだけで月に1万円くらいかかっているので、そのあたりを補えるくらいの収入はほしいなぁと思っていて…。
idesaku:あぁ、それは悩みどころですね。追加機能を有料で…というスタイルですかねぇ。
h13i32maru:
それもありますし、「広告モデル」については、まだ試したことがないので、今回はそれに挑戦してみることも考えています。
idesaku:今後も、そんなかんじで自主開発は続けられるのですね。
h13i32maru:自分で作りたいもののアイデアが出なくなったら終わりだと思っていますし、それは続けたいですね。ただ、現時点で「ESDoc」と「Jasper」があって、今作ろうとしているアプリなどもリリースすると、かなり大変にはなってくるんですよね。
idesaku:ですよね。その意味でも、他の人に開発に入ってもらったり、売却したりという道はないのかなと思ったんですが。
h13i32maru:あぁ、その意味では「完全に売り払う」というのは、考えたことがあります。Jasper なんかは、GitHub のエンジニアでも使ってくれている人がいるようですし、GitHub で買ってくれるといいんですけれどね(笑)。
idesaku:ちなみに、このインタビューではみなさんにお伺いしているのですが、将来的に独立して起業されたり、会社そのものを経営されたりといった方向に進むことは考えておられませんか。
h13i32maru:今はまったく考えていないです。クックパッドの料理に関する事業が好きですし、今のところ、それ以上に情熱を注げることというのはちょっと思いつかないですね。それに、周りのメンバーも優秀な人が多くて、一緒に働いていて楽しいですし。
idesaku:リレーインタビューということで、次にお話しを聞かせていただけそうな方をご紹介いただきたいのですが。
h13i32maru:会社の同僚の菊田遥平氏を紹介します。R&D に所属していて、主に機械学習周りを担当しています。
idesaku:機械学習をつかって、具体的にどのようなことをしている方なのでしょう?
h13i32maru:そうですね、例えば、クックパッドのアプリには「料理きろく」という、毎日の料理の写真を記録していける機能があるのですが、これの面白いところは、自分で投稿しなくていいという点なんですよ。普通にスマホのカメラで撮影すれば、撮った写真の中から料理の写真だけを見つけ出して、勝手に記録してくれます。この機能を彼を含めた R&D のチームで作っています。
いわゆるソフトウェアエンジニアというよりは、料理画像の判別モデルの初期設計をするとか、論文を書いて学会で発表するといった、研究寄りの仕事をしている人です。
idesaku:アカデミックな方面の方とお話しできる機会はあまりないので、楽しみです。今日はお時間をいただきありがとうございました!
※本記事の内容は掲載当時の情報であり、現在の情報とは異なる可能性がございます。