試したいから、作る。ghq、goreの作者motemenの開発は「自分本位」で駆動する

次々とOSSを送り出す株式会社はてなのCTO、大坪弘尚さん。連続開発を支える、発想の源、そしてモチベーションをご本人に伺いました。

試したいから、作る。ghq、goreの作者motemenの開発は「自分本位」で駆動する

エンジニアにとっての強みとは何でしょうか。その答えはさまざまですが、「プロダクトを完成させるスピード」という要素は、“強み”の一つの指標と考えていいでしょう。

「エンジニアの会社」として見られることの多い株式会社はてなの中でも特に「作るスピードが早い」と一目置かれる人物がいます。CTOの大坪弘尚(おおつぼ・ひろなお/ 1@motemenさんです。

大坪さんはghqというツールを20代で公開し、コミュニティから高い評価を受けました。それにとどまらず、GoにおけるREPLを実現するツール、goreも続けてリリースし、GitHubで2000以上のスターを獲得しています。常にオープンソースソフトウェア(以下、OSS)を作り続け、2017年にブログで公表しているだけで8つのツールを個人で世に送り出しました。

シリアルアントレプレナーならぬ、シリアル開発者とも呼べる精力的なOSS開発の裏側には、どのようなモチベーションがあるのでしょうか。

OSSを開発するためには何が大切なのか。そもそもどうやってghqやgoreなどの人気ツールを発想したのか。CTOという立場にありながら常にツールを作り続ける大坪さんに、OSSに対する思いを聞いてみました。

自分のために、自分がユーザーであるツールを作る

2

大坪弘尚さん:2006年、アルバイトとして株式会社はてなに入社。はてなブログ、Mackerelなど同社の手がけるさまざまサービスにアプリケーションエンジニアとして関わる。2012年からはチーフエンジニアとしてエンジニアの採用、後進の育成なども担当。2016年より同社CTOに就任。

──まずは大坪さんのエンジニアとしてのキャリアを聞いてもよろしいでしょうか?

大坪 元々、プログラミングは小さい頃からしていたんですけど、大学に入った2004年くらいから本格的にプログラミングをやるようになりました。もっとも、最初はJavaScript で画面を操作して遊んでいるだけという感じでしたが。

それから、はてなの社員の人と出会ってアルバイトとして参加しました。はてなはPerlの会社なのでPerlでWebサービスを作り始めて、そのまま新卒で入社したんです。

3

Mackerel(マカレル)はWeb上でサーバ監視ができるSaaS型のサービス。はてなの注力サービスの一つ。

──はてなではどんな仕事をしてきたのですか?

大坪 周りから「ものを作るのが早い」と評価してもらって重宝された部分があって、『うごメモはてな(2013年サービス終了)』や『はてなブログ』、『Mackerel』などいろいろなチームで仕事をしましたね。

Mackerelではサービスディレクターをやらせてもらって、途中からチーフエンジニアという役職にもなり、組織を見る立場に変わっていきました。そのままサービスを作り続けてきたら、いつのまにか CTOになっていたという感じです。

──「作るのが早い」という評価の通り、ghqやgoreなどさまざまなツールをコンスタントに開発されていますが、開発の元にある発想はどこから来るのでしょか?

大坪 特別意識してることはないんですけど、「何か作りたいなー」っていうことを常に考えています。だから 不便を見つけたときは何かを作るチャンスなのかなと思っています。

「こういうものがあったらいいな」っていうニーズが仕事してるといっぱい出てくるし、ニーズに対する回答となる新しいものを作る、というタイミングは新しい技術をインプットするチャンスでもあります。「この問題にはこの新技術が使えるんじゃないか?」とか、課題が見えたときに「この技術をこう活用すれば解決ができるんじゃないか?」というイメージが湧いてくるんです。

逆に、新しい技術を知るとそれを使って何かを作りたいという欲求も生まれます。こうした二つの想いが開発を駆動しているイメージです。

──ghqというツールをなぜ作ろうと思ったのでしょうか?

大坪 OSSのライブラリで気になるものがあったらソースコードを読みたくなりますよね。でも、GitHubの情報をブラウザで読むのは効率が悪いので、手元にクローンするはずです。そのとき、従来は一時的なディレクトリにgit cloneしてたんですけど、もう一度同じソースコードを見ようとしたときに、どこのディレクトリにクローンしたのか分からなくなることが多かったんです。それらを統一するやり方が欲しかったのでghqを作ったんです。

こんな風に、基本的に僕のツールは自分で使うために作ったものを公開している感じなので、あんまり人に使ってもらおうとは考えていません。ただ「良いものができたよ」って周りに自慢したいから公開しているだけかもしれません(笑)。

gheとgoreはどんなツールか

ghqは、GitHubなどにあるソースをローカルにクローンする際に、ディレクトリを指定してリポジトリを管理しやすくなるツール。大坪さんのブログ『詩と創作・思索のひろば』の記事を参照。

ghq: リモートリポジトリのローカルクローンをシンプルに管理する - 詩と創作・思索のひろば

goreは、Go言語で対話的にコードを実行できるREPL環境を実現できるツール。スター数が2000を超え、Go言語の使用者にとって定番となっている。goreのリポジトリにある次の画像が参考になる。

4

──ghqを作る際に何か参考にしたOSSなどはあるのでしょうか?

大坪 cpanminusというツールに--look というオプションがあって、ダウンロードしたパッケージを展開してインストールする前のディレクトリに cdして移動する挙動があります。それを単純に真似してghq lookコマンドは作りました。

あとはやっぱりGoで書くのでGoのソースコードは読みましたね。go getコマンドのソースコードを読んだときにGit以外のバージョン管理ツールにも対応していて、それを真似しようと考えたんです。Mercurialは僕は全然使わないんですけど、機能としては面白いと思って作りましたね。

──ご自身のブログで「zshからGoに書き換えた」と書いてありましたが、なぜGoを選んだのでしょうか?

大坪 zshだと簡単にcdコマンドが使えるというのがメリットで、最初はzshで書いていたと記憶しています。けれどマシンを変えた際にインストールしていない状態になってしまったんです。改めてインストールするより、Goを試すネタが欲しかったので、Goで書き直してみたわけです。go getで簡単に配布できるし、言語としてシンプルな書き方ができるのがすごく良い。

もうひとつ、誰でも使えるようなツールにしたかった、といのが大きいです。ですから、配布のしやすさはすごく大事だと考えたんです。

昔、htmlcatという標準入力の内容をブラウザ表示させるプログラムをPerlで作ったんですけど、その後、Rubyで作られた似たような機能を持つwebtailというものが公開されて、そっちの方が有名になってしまった(笑)。

一枚スクリプトになっていないPerlのプログラムをインストールするより、RubyGemから一発でインストールできるプログラムの方が、一般的には使いやすいわけです。こうした経験があったから、「使われやすい形で配布しないとダメなんだ」というのは感じました。

5

htmlcatとは上の画像のようなログをブラウザで表示できるようにするツール。画像出典:大坪さんの旧ブログ

ただ、他の人が似たようなコンセプトでツールを作るのはすごく面白い。他の人が書いたソースを見ると、「こうすると便利なんだ」とか「こういうところがこの人は気になってるところなんだ」と気付けるので。

──zshからgoに書き換えたのは『OSSとしてソースを人に見せるため』という観点もあるのでしょうか?

大坪 人に見せることを第一に書いたことはありませんね。今のghqもいわゆる「オレオレコード」が結構ありますしね(笑)。自分のツールを作るときは新しく覚えた書き方を使っていくということを意識していて、人に見せることを第一に意識していたら何も完成しないと思うんです。

ただ、もちろん他の人でも「最低限使えるようにする」という考えは大事です。作った人の環境でしか使えないっていうのはもちろんダメで、README をちゃんと書く、といった求められる基本的な要素は充実させるよう心がけています。

──では、goreもghqと同じようにまずは「自分用のツール」として作ったのでしょうか?

大坪 goreはそもそもGoでのREPL環境がなかったので、あったら便利だなと思って作りました。すぐに別のツールが出てきて代替されるだろうなと思っていたのですが、意外と長生きしてますね(笑)。

goreもghqにも共通していえますが、「自分がそのツールのユーザーになりたい」と思えるものを作ってるのかなと思います。

──スター数が2000を超えているツールはなかなかないですよね。

大坪 今そんないっています? 2000超えているのか。すごいですね(笑)。

コツは「小さく作る」、そして「イチから作り直す」こと

6

──そういったツールを早く作るためのコツやモチベーションの保ち方などあるのでしょうか?

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く