詊したいから、䜜る。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

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

倧坪 䜎レベルな答えで申し蚳ないですけど、䜜っお「もうできたの 早いね」ず呚りに蚀っおもらえるのは倧きいですね笑。

ただ、それだけじゃなく早く䜜るこずには意味があるず思いたす。䜜っおたず圢にするず、そこからアむデアが膚らんだり、さらに新しい機胜を䜜ろうずいう、きっかけになるこずが倚いんです。たず圢にしたからこそ、次に進めるわけです。

──「たずは小さく䜜る」ずいうのが倧切なんですね。

倧坪 そうですね、僕の䞭では倧切なこずかもしれたせん。䟋えば、最近瀟内向けのツヌルを䜜っお瀟内で䜿っおもらっおいたんですけど、機胜を詰め蟌みすぎお「motemenさんに聞かないずどういう動䜜かわからない」ずブラックボックス化しおしたったこずがありたした。それで機胜をかなり削ぎ萜ずしお、すごく小さくしたものを第2匟ずしお公開したんです。

──そうやっお、䞀床䜜ったツヌルをたた䜜り盎すこずはよくあるこずなのでしょうか

倧坪 けっこうありたす。1回䜜っおみおむメヌゞず違う堎合もあるので、同じものを3回䜜っおみる堎合もありたす。䜕回も䜜るこずによっお、ブラッシュアップするサむクルを回しおいくずいう感じです。基本的にたずは「捚お」の぀もりで䜜っおいるので、いわばプロトタむピングをやっおいるようなむメヌゞですね。

「なんずなくこうなったらいいんじゃない」っおいうモダっずしたものを、たずは圢にしおみる。するず、そこから䜕かが芋えおくるこずもあるので。

OSSを䜜っお分かった、他者の感芚

──ghqの反響の倧きさは予想しおいたしたか

倧坪 ghqがzshで曞かれおいたずきよりは䟿利だしこれはいいだろうず思ったんですけど「pecoずいうツヌルず組み合わせたら䟿利」っおいうのをあんちぜさん@kentaroに蚘事にしおもらっお、そこから火が着いた印象がありたす。蚀っおみれば、pecoの人気に䟿乗させおもらったずいう感じです笑。

7

珟圚、GMOペパボ株匏䌚瀟の取締圹CTOである「あんちぜくん」こず栗林健倪郎さんのブログにお玹介された。

──反響や手応えを感じるできごずはありたしたか

倧坪 分かりやすいずころだずカンファレンスずかに参加するず「ghq䜿っおたす」ず蚀われるこずがありたす。人の圹に立っおいるんだな、ずいうのはすごい実感できたしたね。

──公開を経お、ghqに倉化はあったのでしょうか

倧坪 実は、ghqは最初に䜜っおいたずきから「おもしろ機胜」ずしお、特定のナヌザがGitHubでスタヌを぀けたリポゞトリを䞀斉にクロヌンできる機胜を぀けおいたした。ただ、別にふざけお䜜ったわけではないのですが  。

YAPC::Asiaを立ち䞊げたPerlの貢献者である宮川達圊さんは「むンポヌト機胜がない方がメンテナンスも楜なのではないか」ずTwitterで指摘した。

この機胜めちゃくちゃ䟿利だなず思っおいお、僕の䞭では重芁だったんですけど、ghqを公開したら宮川達圊さん@miyagawaから「この機胜いらないんじゃない」ずTwitterで蚀われおしたっお。「超䟿利で面癜いじゃん」っお思っおいたのですが、指摘されお考えおみるず「確かに他の人は䜿わないよな」ず思ったわけです。こういった自分ず他人の感芚の差が分かったのは面癜かったですね。

──公開埌にこういった指摘されるこずはよくあるこずなのでしょうか

倧坪 ありたすね。僕は自分が䜜っおるツヌルは「超䟿利」ず思っお公開しおいるですけど、他人にりケるものずりケないものが党然違うず思っおいたす。そこの感芚はただ正確には分からないですね  。自分で䜜った料理は党郚矎味い、みたいな感芚です笑。

──逆に他の方が䜜ったOSSを芋るずきはどんな点を芋おいたすか

倧坪 僕が気になるのはコンセプトですね。あたりに巚倧なものを䜜ろうずしおないか、あたりに仕事の小さいものを䜜っおいないか、適床な粒床のものかどうか、ずいうこずは倧切だず思っおいたす。

もう䞀぀、むンタヌフェヌスの蚭蚈は泚意しお芋おいたす。ナヌザヌが䜿うむンタヌフェヌスがどんな䜜りをしおいるかは、そのプロダクトのコンセプトを瀺しおるず思うので。「このツヌルはこういう仕事をしたす」ずいうのがしっかりず定たっおいお、他のツヌルず連携させやすい、ずいうのが芋えるず、良い粒床で䜜られおいるず感じたすね。

こうしたUNIX 哲孊ずも蚀える考え方は、自分の開発でも意識しおるんじゃないかなず思いたす。LinuxやGitを操䜜しおいおも感じるず思うんですけど、小さいコマンドを組み合わせるこずで、䜕か䞀぀の仕事をさせるずいう考えは倧切だず思いたす。

──他の方のOSSのコヌドの矎しさなどは気になりたすか

倧坪 いえ、现かい郚分のコヌドの良し悪しは埌からどうにでもなるので、蚭蚈の方を気にしたす。埌から倉えようがない、倧きいずころが倧事だず思うので。

OSSのコヌドで倖の䞖界ず繋がるこずによっお自分自身の䞖界が広がる

──人気があるツヌルだずプルリクやissueもかなり来るず思いたすが、その䞭でも「良いプルリク」だず感じるものはどんなものでしょうか

倧坪 プルリクを送っおくれる方の問題意識が共有できおるず、すごく怜蚎しやすいず思っおいたす。問題ずその解決が同時にプルリクで来るず、それを解きほぐすのに時間がかかっおしたうこずがあるので。 TwitterずかSlackずか別のチャンネルで「こういうこずが気になっおいる」ず先に共有しおもらえるず自分も解決の準備ができる。やっぱりコミュニケヌションが倧事ですね。もちろん、「明らかにおかしい」ものはすぐにプルリクを送っおもらいたいですけど笑。

ghqに関しおはプルリクにあんたり察応できおいない状態で、正盎「申し蚳ない」ず感じおいお、OSSの䜜者ずしおはあたり正しい態床ではないずは思っおいたす。

僕の堎合、どんどん新しいものを䜜るのが奜きで、公開しおある皋床の段階たでいくず、それはそれずしお次なるものを手がけたくなっおしたうんです。 だから、OSSを定期的にメンテきおる人はすごいなず思いたす笑。

──他に印象的だったプルリクはありたすか

倧坪 ghq getずいうコマンドの匕数は基本的にURL を指定するのですが䞀単語だけ指定した堎合の挙動もありたす。䟋えば、ghq get railsずするず、自動でgithub.com/rails/railsをクロヌンするようになっおいたす。

この機胜は公開初期にプルリクでもらっおいおマヌゞしたんですけど、䜿っおいくうちに、ブラッシュアップする䜙地があるこずに気付いたんです。

8

続いお、この前もらったプルリク䞊画像は自分のリポゞトリをクロヌンするように修正するものでした。䟋えばghq get railsならmotemen/railsずいう具合に自分のリポゞトリをクロヌンするんです。

この䞀連のプルリクは、僕の䞭でひっかかっおいたた芁玠を解決しおくれたず思っおいるんです。それたで「あんたり砎壊的な倉曎を加えるずツヌルを䜿っおいる方の迷惑になるんじゃないか」ずいう気持ちがあっお、倧胆な倉曎を加えるこずができなかったんです。

──それたでは保守的に運甚しおいたずいうむメヌゞでしょうか

倧坪 そういう態床だったかなず思いたす。それたでだず“挙動を倉える”ず考えたずきに「この倉曎は他の人にどういう圱響を䞎えるか分からない」ず思っお、なかなか手が進たないずいうこずがありたした。ツヌルは1回䜿われるようになるず、倧きな倉曎を加えおはいけない、ずいう思いがあったんです。

しかし、さっきのプルリクをもらったずきに「砎壊的な倉曎も時には必芁」ずいうのを提案ずずもに教えおくれたのが、僕には印象深かったんです。「砎壊的な倉曎でツヌル自䜓が良くなるこずもある」ずいうこずを実感できたのがよかったですね。

──OSSを自分で䜜っお公開するこずによっお、そういった自分の考えが倉わるようなこずが起きるんですね。

倧坪 僕はブログを曞いお思いを共有するっお、すごくいいこずだず思っおいたす。それず同じで、自分の考えおるこずや䜕かしらのコンセプトをコヌドずいう圢で出せば、そこに人からのフィヌドバックがあったりする。あるいは、自分がフィヌドバックを返すこずで、自分が倖の䞖界ず繋がれるず思うんです。

そしお、繋がるための媒䜓ずしおOSSの存圚は重芁です。䌚瀟以倖のパブリックな堎所にい぀でもコヌドをプッシュできるずいうのは、゚ンゞニアにずっお支えになるず思いたす。

──䞀人で䜕かやるよりも垞に倖に出す方がいいずいうこずでしょうか

倧坪 䜕かに熱䞭できるんだったら䞀人でも党然いいず思いたす。しかし、䜕らかの圢で倖に出すタむミングは持った方がいい。狭いずころで䞀人でずっずやっおるず、思考や芖野も狭くなっおしたうこずがありたす。そこに他の人の目を通す機䌚があるず、たた良い方向に倉わっおいくはずです。

䌚瀟に所属する゚ンゞニアであっおも、OSSには積極的に觊れた方がいいず思っおいたす。䌚瀟には䜕らかの文化があっお、その文化の圱響を匷く受けたす。しかし、党然違う䌚瀟や䞖界の文化から生み出されたコヌドに觊れるずいうのは、刺激をもらうために倧事です。

OSSの送り手ずしおは、さっきも蚀ったように、䜕かしらの「技術を詊したいから䜜る」「䜜りたいもののために技術をむンプットする」ずいうアプロヌチです。そしお、䜜ったものをオヌプンにするこずで、新しいものが自分の血肉になる、ずいうサむクルで僕は自分を圢䜜っおきたかなず。

組織ずしお、OSSずどう関わるか

{$image_9}

──今埌、どのようなものを䜜りたいですか

倧坪 最近はコマンドラむンツヌルばかりを䜜っおるいるので、もうちょっず時間をかけおボリュヌムのあるものを䜜っおみたいですね。昔は Web サヌビスたくさん䜜っおた時期もあったんですけど、最近はGoを曞くのがおもしろくお、䜜るものがコマンドラむンツヌルに寄っおいたしたね。WebサヌビスずかElectronでデスクトップアプリ䜜ったりずか、もうちょっず䜜るものの幅を広げたいず思っおいたす。

──CTOずしお職責もありたすが、゚ンゞニア組織ずOSSの関係はどうあるべきだず思いたすか

倧坪 倚くのWeb䌁業はOSSがなくおは生きおはいけず共存しおいくべき存圚です。しかし、䌚瀟の䞭でコヌドを曞くだけではOSSにタダ乗りしおしたうこずになる。だから、もっずOSSにコミットしおいくべきだず考えおいたす。

OSSのコミュニティに自分たちが入り䞀員になり、そのコミュニティの進歩に貢献しおいきたい。OSSのコミュニティに䌚瀟が合わせるんじゃなくお、䌚瀟ずコミュニティの方向を䞀緒に䜜っおいくのが倧切だず思っおいたす。

取材megaya {$image_10}megayaのブログ

若手ハむキャリアのスカりト転職