Webで使えるmrubyシステムプログラミング入門 / 近藤宇智朗

久しぶりの読書感想です。どうやら読書感想はブクログとかも含めて4年ぶりぐらいっぽくて、ここ数年の読書しなさが表れています。

本書はmrubyとシステムプログラミングの発展に大きく貢献する良書であると確信します。

本書ではmrubyを利用していますが、そもそものLinux環境でのエンジニアリングについての基礎知識が多く解説されています。mrubyについて学びたい人にとってもシステムプログラミングは良い題材ですし、システムプログラミングを利用したい人にとってもmrubyが助けになるかもしれません。 特筆すべきは丁寧さです。本書の謝辞にもある通り、ハンズオンのための資料を下地にしているため、まるで筆者が隣についていてくれているかのような錯覚を覚えます。本当に一歩一歩丁寧に解説されているため、mrubyやシステムプログラミングに障壁を感じている方でも、安心して一歩づつ学んでいくことが出来るように配慮されています。私は独学でシステムプログラミングを学びましたが、本書によって知識の解像度がグッと上がりました。

mrubyと私

さて、私はかつてmrubyの開発に参加していたことがあります。内容は小さい重箱の隅をつつくようなものばかりで、数だけは無駄に自身があります。 ここ数年はその情熱のほとんどを家族とスプラトゥーン2に費やしたため、しばらくmrubyからは足が遠のき、せいぜい自身が作ったライブラリのメンテナンスを続けていたぐらいでした。

システムプログラミングと私

私がシステムプログラミングに興味を持ったきっかけは、まさにmrubyからだったのです。mrubyを触ってみて、当時大部分の機能がなかったので早い者勝ちとばかりにksss/mruby-signalksss/mruby-file-statを作り始めました。作ってしまったからには中途半端なことはできないと、Linuxプログラミングインタフェースを読みながらライブラリーを作っていたのを記憶しています。今思うとシステムプログラミング初心者があたかも標準であるかのようなライブラリーを作るのは、周りから見たら大変おこがましかったでしょう。無知ゆえの突っ走りです。そんな突っ走りの甲斐あってか、Linuxプログラミングインタフェースを読み終えた時、プログラマーとして一皮剥けたなと思ったことを覚えています。

著者と私

私が著者のudzuraさんに初めて出会ったのは、故spicelife社時代に著者がオフィスにちらっと遊びに来てくれたときのことでした。私は著者のことは知っていましたが、著者にとっては無名の私のことなぞ知る由もないだろうと、同僚と著者が楽しく談笑しているのを横で眺めていた事を覚えています。 その後は、仙台で行われたRubyKaigi2018で行われた How happy they became with H2O/mruby, and the future of HTTP - RubyKaigi 2018 というセッションの後でも出会いました。セッションの話者@i110さんも著者も私はフォローしていたので、これは顔を覚えてもらいつつスプラトゥーンの話をするチャンスと思っていたら、@i110さんと著者とで真面目なmruby談義が始まったので、ふざけようとしていた自分を猛省し身を引いた次第です。 その後、すごくたまたま著者と4リグマをご一緒させてももらったことがあります。もちろんスプラの話しかしていません。

そんなある日、DMで突然著者から連絡が来ました。「ksss/mruby-file-statを本の中で名前を出してもよいか?」というものでした。私は快諾して、この本の発売をまだかまだかと待ちわびていました。

ようやく本の感想に入るわけですけども

mrubyといえば「組み込み向け」と謳われていますが、では「組み込み」とは何なのか。本書では、組み込みとは、ハードウェア組み込みと、アプリケーション組み込みとで大別されると書かれており、私の中のぼんやりとした理解がくっきり鮮明になりました。本書では特にアプリケーション組み込みについて書かれています。mrubyと聞いてハードウェア組み込みをイメージする方も多いと思われるので、本書タイトルの「Webで使える」にアプリケーション組み込みの本であってハードウェア組み込みの本ではないということを表しているようにも思えます。

"CRubyを書くことができる人は、ほとんど学習なしでmrubyを書き始めることができると考えられます"

誰にも伝わらないとは思いますが、私は本書のこの記述にひどく感銘を受けました。なぜなら、こう言われることこそが、私がmrubyで活動していた原動力だったからです。重箱の隅をつつくようなPRをmrubyや周辺ライブラリーに送らせていただいたものの多くは、このCRubyとの互換性を意識したものでした。「CRubyとmrubyは同じように書けば同じように動く。なんならドキュメントはCRubyを参照すればいい。」こういう世界を目指していたので、もちろん私が行った活動なんて微々たるものですけども、こう言ってもらえれるようにmrubyがなって嬉しい気持ちでいっぱいです。

解説の丁寧さ

本書のウリはこの解説の丁寧さにあると私は考えます。例えば、mrubyをbuildするだけのステップであっても、build中に何が起こっているのか、何が実行されて何が生成されて何に使われるのかまで丁寧に解説されています。私なら「rakeしたらbuildできますね」ぐらいで終わってしまうところを数ページ使って、このログはmgemをダウンロードしていて、このログはbuildしていて、このログはアーカイブを作成していて……と細かく解説しています。そしてこのbuild工程は見かけは地味ですがmrubyを理解する上で大変重要になってくる部分なのです。 このように、本当に大切なことを飛ばさず丁寧に一歩一歩読者の隣に立って解説してくれるのが、本書最大の魅力です。 また、ワザとバグを仕込んで、このバグを修正していく過程で知識を学んでいくスタイルも見られます。この方が知識は小出しで覚えられるし、なにより実際にコードを書きながら知識を得ていくステップに即しており現実的です。

「なぜ」の深堀り

本書のもう一つの魅力は「なぜmrubyなのか」「なぜシステムプログラミングなのか」といった「なぜ」にもしっかりと解説が入っている点です。この「なぜ」に答えがあるので、学習する上で重要な納得感が補われており、学習効率を高めています。ここまでしっかりケアしているのは、著者の豊富な経験のなせる技でしょう。 勝手ながら著者について調べさせていただいたところ、パーフェクトRubyとパーフェクトRuby on Railsの著者の内の一人でもありますし、 「GMOペパボは、憧れの会社だったんです」近藤宇智朗(GMOペパボ株式会社)~Forkwellエンジニア成分研究所 - Forkwell Press によると研修の経験も豊富でいらっしゃいます。

さらに、「なぜ」だけでなく「もし」にもケアが入っています。「もしここがうまく行かなかったら、これが原因かもしれないので調べてみてください」のような記述も多数みられ、著者の学ぼうとする人への配慮がみられて素敵です。

ksss/mruby-file-stat

本書ではCRubyのFile::Statclassを実装していく過程をハンズオンで学べる章がありますが、File::Statclassの先行事例としてksss/mruby-file-statを紹介いただいています(アピール)。本プロダクトのGitHubのTraficページによりますと、一日に100〜200回cloneされているので、私が作ったものにしては過ぎたプロダクトとなっております。 本書ではmtimeにusecまで対応している記述があり、「そういえばksss/mruby-file-statはどうしてたっけな?」と思って見てみるとusecに対応しておらず、秒単位までしか取得できていないことに気がつきました。その後、あわててusec対応を済ませました。本書のおかげでksss/mruby-file-statもクオリティが上がり、早速mruby界隈への影響を与えていると言っていいでしょう。本当にありがとうございます。

レビュー

本当に細かなところですが、僭越ながら若干の指摘をさせていただきます。もちろん深い理由があったり、話を簡単にするためにわざと現在のように記述しているのかもしれませんが御容赦ください。

  • __main__ methodを呼ぶ仕様が、mrubyの仕様なのかmruby-templateの仕様なのかが分かりにくかったです。
  • mruby-dir-globは一応あります。
  • File.open(...).readより、File.read(...)の方がfd的に良いのでは。
  • Apacheの問題なので難しいところですが、Requestオブジェクトにap_set_content_typeするとResponseのcontent_typeが変わるので、Requestの話なんだかResponseの話なんだかで混乱しました。

読んだだけじゃ、まだ半分

本書はハンズオン形式になっています。つまりこの本は、実際に手を動かして自分の経験として身につけることで、本の真の知識が読者の血肉として身につくようになっています。 私もまだ一通り読んだだけなので、実際に手を動かしながら本書の内容を学んでいこうと思います。

不安はありません。本書には常に著者が隣に立って教えてくれるのですから。