• HOME
  • インタビュー
  • mrubyを採用したソフトウェアを広げた第一人者・松本亮介が、面倒を感じながらもC言語を愛する理由とは?

mrubyを採用したソフトウェアを広げた第一人者・松本亮介が、面倒を感じながらもC言語を愛する理由とは?

さくらインターネット研究所上級研究員、ペパボ研究所客員研究員、松本亮介事務所所長
松本亮介
2008年に現場の技術を知るため修士に行かずにホスティング系企業に就職したのち、2012年に異例の修士飛ばしで京都大学大学院の博士課程に入学。インターネット基盤技術の研究に取り組み、mod_mrubyやngx_mrubyなどのOSSを始めとした多数のOSSへの貢献や学術的成果を修める。2015年4月より2018年10月までGMOペパボ株式会社にてチーフエンジニアとしてプロダクトのアーキテクトやエンジニア組織のマネージメントに従事すると同時に、ペパボ研究所では主席研究員としてOS・Middleware・HTTPに関する研究、及び、事業で実践できるレベルまで作りこむことを目標に研究に従事。2018年11月より現職のさくらインターネット研究所で上級研究員を務める。第9回日本OSS奨励賞や2014年度情報処理学会山下記念研究賞など、その他受賞多数。2016年に情報処理学会IPSJ-ONEにおいて時流に乗る日本の若手トップ研究者19名に選出される。

世の中にはさまざまなプログラミング言語が存在します。そして、人によってはただならぬ愛着を持つ人も。そこで本企画では、このプログラミング言語にフォーカス。お気に入りのプログラミング言語のことを中心にマニアックに語っていただくとともに、日々どのように知識を獲得しているのかをお伺いします。記念すべき第1回にご登場いただくのは、mod_mrubyやngx_mrubyの開発で知られる松本亮介さんです。

Offers」は、時代の変化や環境にあわせてスキルを磨きたい、そんな人にぴったりのサービスです。「副業・複業」で、本業では経験できない、新しい環境/開発スタイルを経験しよう!

→「Offers」をもっと詳しくみる! かんたん60秒で副業を始めてみる

C言語は冗長なんだけど、なんか好き

さっそくですが、松本さんが好きなプログラミング言語を教えてください。

今はC言語をよく使うんですけど、C言語そのものが好きなのか、手に馴染んでいるから好きなのか、もはやわからない状況になっていますね。この状況を一般的に好きって言うでしょうけど。

ただ、僕にはそれほど言語へのこだわりがないんです。そもそも昔からプログラミング言語を網羅的に学習するのが苦手で。まず作りたいものがあって、次にどの言語がベストかを考えるようにしていました。

そうすると、C言語に初めて触れたのはいつだったんですか?

今、僕は36歳で、大学に入ってから書いているので15年ぐらい前ですね。

当時はWindows95が発売され、自宅でもようやくPCが買えるようになった時代でした。ただ、それから数年経って、購入したPCだとスペック的に満足いくものがなかったので、自作していたんです。そうすると買ったPCが余るんですよ。

だからサーバー代わりにしていたんですけど、いじろうとするとミドルウェアやソフトウェアがC言語で書かれていたので、自然と触れるようになりました。

ただ、けっこう不満に思うことも多かったです。RubyやPerlであれば3〜4行くらいでできるのに、C言語だと何十行も書かなきゃいけなくて(笑)。

なんでこんなに冗長なんだろう、と。

大学を卒業して社会人になる中でちょっとずつ見方も変わっていくんですけど、最初はそういう気持ちが大きかったです。ただ、シンプルでわかりやすかったんで、学ぶことで悩むことはありませんでした。

C言語に対する意識が変わった2つの瞬間

具体的にどういった見え方の変化があったのでしょうか?

大学卒業後にクラウドレンタルサーバーのホスティングをしている会社に入社したんですけど、ミドルウェアを拡張するためにC言語で書く機会が多くて。そのときにライブラリや関数が豊富にあって、組み合わせることで簡単にコードを書けることに気づいたんです。他のスクリプト言語と変わらないというか、うまくやれば短い行数で書くこともできるので、C言語は面倒だという印象からガラリと考えが変わりました。

しかもレベルの高い領域になると、人によっては内容をいじれないこともあって。それができると尊敬の眼差しを向けられるので、頑張ってできるようになりたいというモチベーションが湧いてきました。

あとはmruby(※組み込みシステム向けの軽量なRuby言語処理系)を使い出したときにも見え方が変わりました。mrubyってC言語で書かれたソフトウェアをRubyのコードでコントロールする、いわゆる組み込みスクリプト言語と呼ばれている使い方ができるんですね。mrubyのルールに従ってRubyを書いたり、mrubyに用意されている関数を使うと、イチからC言語で書かなくても動くわけです。

そうすると、自分が作りたいソフトウェアのコードが簡単に書けるし、C言語で面倒なことはRubyに出して書いてしまえば楽になります。自分が言語に対するこだわりがあまりないことも相まって、mrubyはある種のC言語のフレームワークかのように扱えるんじゃないかと感じるようにありました。

言語の特性としてフレームワークや世界観が広がっていくところに魅力や驚き、発見を感じるということでしょうか?

そうですね。昔はC言語があってRubyやPerlがありました。そのプログラミング言語の世界でソフトウェアを書いたり、ものを作ったりする感覚だったんです。

でも今は、さまざまなプログラミング言語を繋げてトータルでソフトウェアを作るためのフレームワーク、いろんな領域を繋げるためのツールなんだと考えるようになりましたね。

このC言語への興味がC++やマクロ、Cを拡張した言語に向くより、C言語を突き詰めていく方向に向かったのはなぜだったのでしょうか?

C++にも興味はあったんですけど、ミドルウェアやシステムプログラミングをやる中で、僕の興味がOSやミドルウェアをコントロールしたいとか、どんなふうに実装したら高速で動くのかといったコンピュータサイエンスの領域に向いていったのが大きいですね。

OSに興味があるんだったらアセンブリ言語にいくんじゃないかみたいな話はよくされました。でも、それは道のりが長すぎて……。

松本さんがC言語に愛着を持つのはどんなところでしょうか?

OSの機能を直接コントロールできながらも、プログラミングらしさがあるのがすごくいいなと思っています。例えば、あるスレッドが動いている間に他のスレッドを作れないようにして、そのうえで権限を細かく変更できたり、スレッドの挙動を制御したりとか。自分が勉強したこととC言語の技術が重なった気がしました。

また、スレッドにどういうメモリの割り当てをするかによっても方法がいろいろあって。メモリリークを考慮しつつ一時的にメモリを確保するだけでいいなら、スタックで確保するだけで性能を高めることができます。

そうやってメモリの細かい制御やスレッド単位で権限や挙動を変えられたりできるのはC言語ならではかなと。もちろん、他のプログラミング言語はそういうことをするためのものではないというのもあるんですけど。

ただ、細かいことをやろうとするとC言語でやらないとやりにくいというところがあって。やや冗長なところはあるんですけど、自分の目的に対して一番扱いやすいんです。

そうやってC言語にハマったことが、mod_mrubyやngx_mrubyの開発につながっているのでしょうか。

おっしゃるとおりです。自分はApache拡張モジュールを書けるようになったけど、当時務めていた会社でそれができる人が他にいるかというと話は別で。それならば、もっと扱いやすい抽象化レイヤーを作って、PerlやRubyで書けるようにできれば解決できるのではないかと考えるようになったんです。

そのタイミングで、Matz(まつもとゆきひろ)さんがmrubyをリリースしたこともあって、一気に開発のモチベーションが高まりました。加えて、わからないことをTweetするとMatzさんが相談に乗ってくれたのも大きかったですね。当時は面識がない間柄だったからにも関わらず、親身になってくれたことで自分の理想を形にすることができました。

言語にこだわりはなかったけど、Rustはヤバいと思った

近年はRustなど新たなプログラミング言語もたくさん出てきていますが、そういったものに対してはどのような印象を持っているのでしょうか。

これまでプログラミング言語にこだわりはないとずっと言ってきたのですが、Rustはヤバいと思いましたね。C言語でネックだったのは、コンパイルが通っても正しく動作するとは限らないことでした。コードは書けるけど、レースコンディションやメモリ安全性のデバックにものすごく時間がかかる、みたいな。どの段階でバグが起きるか予想できないのでテストにも書きづらいですし。

そういったマルチスレッドやメモリ管理の問題が、Rustの世界では言語仕様の段階で解決されているんです。C言語でコンパイルが通ってもソフトウェアが動く保証はないですが、Rustはそういったことがほとんどない。さらに、C言語と互換性が高く、C言語のようにスレッドやOSの機能を直接細かいところまで操作できる仕様も魅了でした。だからこそ言語使用としては複雑なので勉強する必要がありますが、学習コストに見合ったスキルを手に入れられると思います。そこそこ複雑なマルチスレッドかつ非同期処理のサーバプログラムを書いた時にコンパイルさえ通れば一発で動作して性能も非常に高く、メモリリークも起きていないことを体験したときには、これはすごいと感動しました。

今後、松本さんが仮想領域でプログラミングする時はRustを使う予定なのでしょうか。

そうですね。実は C言語で作った資産をRustに移行できるんです。だから、今までC言語を使わないと組めなかったものも、Rustで対応できるんじゃないかなと思っています。

先人のまねをすることが松本流の上達術

松本さん自身、多くの知識や技術の習得をされてきたと思います。最後に、新しいプログラム言語を学ぶ初心者にアドバイスをお願いできますでしょうか。

これは自分の中でバイアスがあるので、誰でもうまく成長するかはわからないのですが、自分が確実に成長できた方法は模倣することでした。

GitHubやLinuxのカーネルのソースもそうですけど、有名プログラマーやいろんな人が書いたソースコードが集まってるんですね。

それを検索してまねする、と。

そうですね。先人たちが苦労して書いてくれたソースコードを参考にすることで成長できました。だから、書いて公開してくれてる人には敬意を持っています。

だから、まねしたものを自分が書いたかのようにするのは絶対にしてはいけないなと思います。誰のどこをまねしたか、それをいろんなところに書いておけば、コードを公開している人たちのモチベーションにもなる。

多くのプログラマーはまねしてほしくないとは思ってないと思うんですよ。むしろ、自分のソースコードをまねして使ってもらって、そこに感謝のコメントを書いているだけでも公開している人は救われます。

一方、まねをする人も悪いことをしてるわけじゃなくて、いいソースコードを参考にして書いたことを明示すると、オープンソースのいいサイクルが回ると思うんですよ。僕自身、いろんな発信をすることで繋がった人たちもたくさんいますし、まねをしているうちにどんどん自分らしいコードが書けるようになりましたから。

まずはコードをまねして、できればコードを書いた人に伝わるように感謝を残すことが、プログラミングを学ぶうえで大事だと思います。

インタビュー:大谷旅人
執筆:讃岐勇哉
編集:村上広大

Offers」は、時代の変化や環境にあわせてスキルを磨きたい、そんな人にぴったりのサービスです。

いくつもの転職媒体を使って、企業を探し回るのはもう終わり。「副業」から始まる新しい働き方を実現します!

本業では経験できない、新しい環境/開発スタイルを経験しよう!



この記事をシェア

関連記事

【Unity&バックエンド採用】Offersコンシェルジュを活用し、VPoE業務に集中できた恩恵とは

幼児や小学生の家庭学習の必要性が求められている今、企業や団体がICTを活用した学習コンテンツの開発に注目している。ファンタムスティックは子ども用の学習アプリやデジタル教育コンテンツの開発に強みを...

転職前提の複業オファーで、2ヶ月後に正社員へ!未来のCTOを採用した注目スタートアップの採用術

スニーカー市場は熱狂的なファンも多く、一次流通・二次流通ともに毎年拡大を続けている。そのような市場の中、スニダンことスニーカーダンク(SNKRDUNK)は市場の拡大を追い風に成長し続けてきたが、...

『実践TypeScript』の著者・吉井健文が考えるTypeScriptの魅力と可能性

世の中にはさまざまなプログラミング言語が存在します。そして、人によってはただならぬ愛着を持つ人も。そこで本企画では、このプログラミング言語にフォーカス。お気に入りのプログラミング言語のことをマニ...

ヤフーが実践するギグワーク活用がこれからの新しい採用手法に!?リモート環境で求められる人材とはーこれからの「強い組織の作り方」CEOセッションー

新型コロナウイルスで、働き方改革やデジタル・トランスフォーメーションの流れが急激に加速し、採用・育成・マネジメントの状況は大きく変化しています。 株式会社overflow、株式会社zenkig...


副業・フリーランス

プログラミング

デザイン

インタビュー

【Unity&バックエンド採用】Offersコンシェルジュを活用し、VPoE業務に集中できた恩恵とは

幼児や小学生の家庭学習の必要性が求められている今、企業や団体がICTを活用した学習コンテンツの開発に注目している。ファンタムスティックは子ども用の学習アプリやデジタル教育コンテンツの開発に強みを...

転職前提の複業オファーで、2ヶ月後に正社員へ!未来のCTOを採用した注目スタートアップの採用術

スニーカー市場は熱狂的なファンも多く、一次流通・二次流通ともに毎年拡大を続けている。そのような市場の中、スニダンことスニーカーダンク(SNKRDUNK)は市場の拡大を追い風に成長し続けてきたが、...

『実践TypeScript』の著者・吉井健文が考えるTypeScriptの魅力と可能性

世の中にはさまざまなプログラミング言語が存在します。そして、人によってはただならぬ愛着を持つ人も。そこで本企画では、このプログラミング言語にフォーカス。お気に入りのプログラミング言語のことをマニ...

ヤフーが実践するギグワーク活用がこれからの新しい採用手法に!?リモート環境で求められる人材とはーこれからの「強い組織の作り方」CEOセッションー

新型コロナウイルスで、働き方改革やデジタル・トランスフォーメーションの流れが急激に加速し、採用・育成・マネジメントの状況は大きく変化しています。 株式会社overflow、株式会社zenkig...

お金

採用・組織

グルメ