目次
■エンジニアの軌跡
2016.01.19 2024.03.28 約5分
さまざまな企業で働くエンジニアとリレー形式で対談を行うDevRelay。第2回のゲストは「Qiita株式会社」の竹馬氏(@mizchi)氏にスポットを当て、「面白い」仕事の呼び寄せ方を伺います。
idesaku:今回は、前回のfreee山本さんからのご紹介で、Qiita株式会社(旧Increments株式会社)の竹馬(mizchi)さんにお話しを伺います。
mizchi:よろしくお願いします。
idesaku:最初にお伺いしたいんですが、なぜネット上でのお名前が「mizchi」なんでしょう?
mizchi:本名が「竹馬光太郎(ちくば こうたろう)」なので、最初は名前の1文字目の「光」にちなんで「miz」と名乗っていたんですが、これが結構かぶるんですよ。で、苗字の「竹(ちく)」から「chi」をつけて、「mizchi」を使うようになったという感じです。…特に面白くないんであんまり言っていないのですが。
idesaku:山本さんとはどこで知り合われたんですか?
mizchi:大学受験に入ったのが2008年なのですが、そのころ梅田望夫さんの「ウェブ進化論」や「ウェブ時代をゆく」という著書が話題になっていて、そのなかで「Twitterというサービスで新しいコミュニケーションの形が生まれる」みたいなことが言われていたんですね。それで自分も始めてみたんですが、当時のTwitterには、昔ながらの濃いインターネットコミュニティの人たちが大勢いて、そのなかに山本さんもいたんです。当時まだ日本人が少なかったコミュニティの中で、山本さんとは同じ年齢と言うこともあって、話をするようになったんです。
idesaku:では、Incrementsに入られたのは、どのような経緯だったんでしょうか。
mizchi:大学を卒業した後、最初はゲーム会社に1年半ほどいて、次に前職の教育サービス系の会社に入りました。前職を辞めた理由はいろいろあるんですが、僕自身が興味を持っている技術を仕事として使える会社で働きたいという気持ちが大きかったです。
僕自身、フロントエンドの技術に対して強い思い入れがあったのですが、前職ではその分野でできることがなくなってしまったんですね。フロントエンドで、中でもエッジなことを仕事としてやっていきたいとなると、そういう技術が必要とされる会社でないと難しい。
そう考えていたところ、「Increments」は所属しているエンジニアもスゴいし、会社としても勢いがあるという印象を持ったので、僕のほうから声をかけました。
idesaku:竹馬さんが参加されたときには、もう「Qiita」は始まっていたんですよね。
mizchi:はい。僕が入ることになったきっかけは、当時なかったWindows版の「Kobito」を作るという案件でした。以前から興味を持っていた「Electron」(当時は「Atom-Shell」と呼ばれていました)を使えば、Windows版も作れるんじゃないかという話をしていて、それを僕がやることになったんです。
idesaku:では、入ってからは、ずっとKobito for Windowsに関わっているわけですね。
mizchi:最初はそれが中心だったんですが、最近はQiita本体も触っています。今のところリファクタリングが中心で、新機能の追加なんかには携わっていないのですが。
idesaku:前回お話しを伺った山本さんは、freeeに入社早々、かなり激しい調子で製品に使われている技術に大ナタを振るった、というお話しをされていたんですが、竹馬さんもそんな感じだったんでしょうか。
mizchi:…そうしたいところもありますけどね(笑)。Qiitaのコードベースは、2012年以降、徐々に継ぎ足しながら拡大してきています。それに伴って、特に僕が関心を持っているフロントエンドは技術の陳腐化が非常に早いこともあって、僕から見て、その、「つらさ」というか、を感じるところが出てきてはいます。
ただ、Qiita自体は現時点でも非常に価値が高いサービスであり、多少つらい部分があったとしても、十分に動いています。動いているものを作り直すのには、それなりに大きな理由と、相当なエネルギーが必要なんですね。ですので、現状では負債だと認識した部分から段階的にリファクタリングで対応するようにしています。
idesaku:たしか、Kobito for Windowsでは、Electronの上にReactを乗せているんですよね。Reactについては、竹馬さんが日本での第一人者のようなイメージもあるんですが、現在も引き続きReact愛は継続中ですか。
mizchi:継続中です。あまり表には出ていないんですが、実はQiitaのリファクタリングにも使っているんですよ。Reactは、既にリリースから1年以上生き残っていますし、今後も長く使える技術になるだろうと思っています。
idesaku:Reactの最初のリリースは2013年でしたね。
mizchi:2014年の段階では、海外の「Hacker News」あたりでReactが非常に盛り上がっているにも関わらず、日本ではあまり注目されていなかったんですよね。それを盛り上げたいと思って、ブログやQiitaでReactに関する記事を量産していました。
idesaku:2014年末の「なぜ仮想DOMという概念が俺達の魂を震えさせるのか」という記事は非常に注目され、議論も呼びましたよね。山本さんは「炎上芸人のmizchiさん」みたいな言い方もされていたんですが(笑)、意図的に「煽る」ような書き方をされていたりする部分はありますか。
mizchi:それはあります。僕の場合、煽って盛り上げる動機は「その技術を僕自身が使いたいから」なんです。大げさに表現するなら、世間のWebサービスのフロントエンドが、古くさい技術をベースにしたものばかりだ、という状況は、自分がこの世界でやっていくにあたって、良くないことなんです。
この先、どこかで自分がエッジな技術を提案したときに、それが受け入れられる土壌やコミュニティを作っておきたい。そのために、自分が良いと思った技術を煽って盛り上げるようなことは意図的にやっていますね。
idesaku:英語圏で新しく出てきた技術に対して、日本語で読める情報をコミュニティにどんどん提供して盛り上げていくという活動には価値があると思います。Reactのように、新しい思想を持っているものについてはなおさら。
mizchi:Webのフロントエンド界隈は玉石混交の状態が続いています。新しい物が次々と出てくるけれど、本当に使えて、残っていくものは一握りです。その中からどれかを選んでプロダクトを作り、継続的にメンテナンスできる状況を作ろうとすると、その技術が使えるものか、そうでないかを、早い段階でかぎ分けるセンスが必要になります。僕は、その能力については自信があるんです。
idesaku:選択眼は大切ですよね。私も以前SIerで仕事をしていたころは、当時はWebアプリケーションフレームワークというものが登場してまだ日が浅かったこともあって、どのフレームワークを選ぶべきか、テンプレートエンジンはどうしよう、みたいなことに毎回悩まされていました。現在のJSの世界も、それと同じような状況にあるようです。
mizchi:JSの世界では、エコシステムというか、下回りは整ってきたんですが、それを使うコミュニティ側の文化のようなものが整っていないと思っています。
JSのライブラリを書く人って、さまざまな言語のバックグラウンドを持っているんですね。Rubyをやっていた人はRubyっぽい書き方をしますし、C#をやっていた人はC#っぽい作法で書いてしまうんです。
その結果、お互いの共通認識が定まらない。ついでに言うと新しいエコシステムの中では、特にプログラミングマニアのような人たちの声が大きくなりがちで、それが百家争鳴の状況になっている一因ではないかと思っています。
idesaku:JSの新たなエコシステムの中で、いろんな言語の思想や作法がシノギを削っている…という状況なわけですか。面白いですね。竹馬さんとしては、そうした状況の刈り込みの意味も込めつつ、自分が目をつけた技術をアピールする記事を出していたりするわけですよね。
先ほど「自分のために煽る」というお話しをされていましたが、そうした記事を書くことに、エンジニアとしてのセルフブランディングとしての意味合いはあるんでしょうか。
mizchi:ないわけではないと思います。僕は大学時代にサークルでフリーペーパーを作っていたり、「はてな」でホットエントリー入りする記事はどうやれば書けるか、みたいなことを楽しんでやっていたんですね。いわゆる「はてな村」での「言葉の殴り合い」みたいなことも大好きでした。
「はてなブックマーク」も7年以上見続けて、どういう記事を人は求めているのか、自分が書いたことに対してどんな反応があるのかといったことは、ずっと研究していましたね。
idesaku:ネットでの「言葉の殴り合い」が、エンジニアとしての自分に影響を与えることってあるんですか。
mizchi:僕の場合、記事を書くときには、まず自分で何度も読み返して、想定される反論への対応までを盛り込んだ上で公開するようにしているんです。ただ、そうやって公開したとしても、自分が想定していなかったリアクションがあるわけです。もしその内容が、正当なものだったら「勉強になります」みたいな感じで感謝します。
idesaku:想定される反論を意識しながらの情報発信というのは、エンジニアにとって自分のスキルを上げていくためにも、いいやり方かもしれませんね。
mizchi:こういうのは得手不得手がありますから、ほかのエンジニアに自分のやり方を勧めることはしません。ただ、僕の場合は、対面で話すよりは、文章で書くほうが思いを表現しやすいんで、得意なやり方でやっているといった感じです。…まぁ、インタビューを受けておいて、そういうこと言うのもなんなのですが(笑)。
idesaku:ブログに考えをまとめていくほかに、竹馬さんが、エンジニアとしてのスキルアップのために意識してやっていることはありますか。
mizchi:そうですね、これは昔から趣味でやっていることでもあるのですが、新しいフレームワークや環境を見つけると、とりあえずそれを使ってゲームを作ることにしています。
idesaku:ゲームも作っているのですか。
竹馬:僕が最初に「プログラミングで何かをつくりたい」と思ったのは大学4年のころでしたが、そのときにまずやろうと思ったのが「Webアプリ」を作ることと「ゲーム」を作ることでした。ただ、僕の場合、両方を同時にやろうとしてしまったんです。
idesaku:大変だったでしょう。
mizchi:大変でした。2011年ごろに、当時まだ未成熟だったWebSocketとCanvasを使ってゲームを作ろうとしていたわけですから、かなり苦労しました。周辺のいろんな技術要素も揃っていませんでしたし。
そうした状況でシューティングやMMOのようなゲームを作ろうと思うと、おのずとJSフロントエンドの限界を酷使しなければならず、そのためにエッジを攻め続けることを強いられます。でも、それが僕には楽しかったんです。
idesaku:おおー、楽しいと。
mizchi:「誰もできていないことが、今、俺にはできているんじゃないか」という感じがして楽しいんです。そういう理由で、例えばReactを見つけた時も、SVGと物理エンジンを組み合わせて、差分描画で弾幕シューティングのようなものを作ったんですよ。「初見でムチャをする」というのが、このところの定番になっています。
idesaku:あれはReactの性能を知る上で、分かりやすいデモでした。
mizchi:ゲームプログラムというのは、基本的に複雑性が高くて、コード量もどんどん増えていくという性質を持っています。それを抑えるための秩序を手に入れるために、ReactにはFluxという設計思想があって…という感じで、割とすんなりと入っていけました。その点では、ゲームを作ってよかったと思っています。
idesaku:エッジな技術で難度の高い実装に立ち向かうためには、海外からの積極的な情報収集も欠かせませんよね。
mizchi:実は僕、あまり英語が得意なほうではないんですよ。
idesaku:それは意外です。
mizchi:ですので、先ほど挙げた「Hacker News」や、JS版のHacker Newsのような「Echo JS」といったサイトで、まずは見出しを中心に目を通すようにしています。「最近、この単語が見出しによく出ているのに、自分は手を付けていないな」と感じた時に、きちんと調べ出すといった感じですね。
idesaku:そこまできたら、後は英文をバリバリ読みながらいじっていくという感じですか。
mizchi:まぁ、説明文よりも、動いているコードのほうが雄弁ですので、軽くQuick Startを見て、既存のどんな技術と組み合わせられるかを考え、デモを作って、GitHubで公開して、満足するといった感じでしょうか。
idesaku:竹馬さんには、エンジニアとしてのキャリアにおける目標というか、ロールモデルのような方はいらっしゃるんですか?
mizchi:具体的に挙げられる目標は、正直なところないですね。それは、僕がフロントエンドをやっていて、そのフロントエンドの概念が新しすぎるから、というのが理由のひとつです。さらに、僕がエッジな技術ばかりを攻めているために、周囲に似たようなキャリアをたどってきた人がいないというのもあります。
idesaku:むしろ竹馬さん自身が、後進に対するロールモデル的な役割を担っていくことになるのかもしれないですね。既に、そうなりつつあるような気もしますし。
mizchi:もし、そうなれているのであれば、それは自分が今、それなりにコストをかけて取り組んでいるからでしょう。例えば、何か新しいライブラリが出たときには、資料を読むだけでなく、実際に手を動かして試していますし、ニュース記事などの関連情報も読み込んだ上で、善し悪しを判断するようにしています。
今は、それができているんですが、もし将来的に自分にそれができなくなったら、別の方に引き継いでやって
idesaku:これまでそういうことをやってきて、「読みが外れた」ということはないですか。例えば、最近CoffeeScriptに別れを告げたようですが。
mizchi:CoffeeScriptは、今でも非常に好きな言語です。ただ、「エッジを攻める」ということを信条にしている以上、JSそのものの進化にCoffeeScriptが追いつけなくなったということが自分の中で明らかになった段階で、捨てざるを得なかったというのが正直なところです。
例えば ECMAScriptの「async/await」の仕様が決まって、実際に自分でも書いてみたら、コードもシンプルになって素晴らしいと思ったんですよ。ただ、これが将来的にCoffeeScriptにやってくるかどうかと考えたら、リポジトリなどをウォッチしている感覚として、それは望めないなと感じてしまったんです。
恐らく、今後も新しくて良い仕様が次々とJSに実装されていくでしょうが、それらについても同じ事が言えるだろうなと。
idesaku:やはりこれからは「ECMAScript 2015」なんでしょうかね。
竹馬:それが、これからのJSのスタンダードになるのは間違いないです。ただ、その周辺の領域にある「絶対にJSを書きたくない」という需要に対しては、AltJSのような存在が役に立つ場面は引き続きあると思っています。例えば「Scala.js」ってご存じですか?
idesaku:どういうものなんですか?
mizchi:文字どおり、ScalaをJSにコンパイルするというものです。ネタみたいに聞こえるかもしれませんが、出来は非常にいいんですよ。Scalaとフロントエンドを橋渡しするエンジニアがいて、その人が必死に支える橋の上を、Scalaのスゴい人たちがコードを大量に流していく、そんな体制を作ることができれば相当なパワーを発揮できるはずなんですが…そこまでできる会社って、たぶんあまり多くないですよね。でも、そういうものに対する需要は残ると思うんです。
idesaku:竹馬さん自身は、今後もフロントエンド道を突き詰めていくというスタンスなんですね。
mizchi:しばらくは、フロントエンドを楽しんで続けていると思います。
idesaku:まさに今、盛り上がっている分野でもありますしね。
mizchi:僕としては「盛り上がっている」というより「荒れている」状況だと思っています。まだ、淘汰が進んでいるとも思えないので。正直なところ未来がどうなっているかも分からないですよね。もちろん、自分として「これが生き残るだろう」と思っているものはあります。
今やれることは、自分が「イケる」と思っているものを盛り上げて、「ヤバい」と思うものには「やめてくれ」と発言していくような、うるさいオジさん的な役回りなのかなぁとも思います。
idesaku:であれば、当面はブログも辞められませんね。
mizchi:ただ、日本国内向けにだけやっていても、らちが明かないという思いもあるんですよね。海外に行きたいというわけではないのですが、どうにかして世界的な影響力を持てるようになりたいなぁと最近思うようになりました。
idesaku:英語で殴り合えるようにならないといけませんね。
竹馬:そうなんですよ。少しずつやろうとはしているんですが、英語は書くのが難しくて。できれば、共通言語である「コード」で殴り合いたいですよね。
idesaku:ぜひオススメの「この人の話聞きたいなぁ」という方をご紹介いただけますか?
mizchi:僕としては藤村大介さん(@ffu_)にお願いしたいなと思います。前職の上司というのもあるんですが、Web界隈にいながらWebに対してすごく皮肉っぽい目線を持ってるというか、矛盾してるんだけど、だからこそ成り立ってるみたいなおもしろい人なので。
idesaku:私も藤村さんとは一緒に仕事したことがありますが、本当に優秀な方ですよね。皮肉っぽい目線、というのも、なんとなくわかります(笑)。では次回は藤村さんのインタビューをお届けしたいと思います。今日は長い時間、楽しいお話をありがとうございました!
※本記事の内容は掲載当時の情報であり、現在の情報とは異なる可能性がございます。