はじめに
この本について
第1章 Opal入門
第2章 Opal応用編
第3章 実践Opal
第4章 WebSocketを使って共同編集する
第5章 Opalの活用事例
あとがき
2017年9月、RubyKaigi2017というカンファレンスが広島で行われました。私はRubyKaigi2017で、「dRuby on Browser」というトークをしました。dRubyはRubyの分散オブジェクトのライブラリで、Rubyの動的な特性を活かしてインタフェースの記述を必要としない、というすばらしい特徴を持っています。私はdRubyはほんとうにすばらしいと思うので、最近自分が“はまっている”Opalにいい感じに応用できないかなと思い、ブラウザで動くdRubyの実装をOpalで作りました。
RubyKaigiには実は2015年と2016年にもトークしていて、いずれもOpalの話題でお話しました。それぞれ「Writing web application in Ruby」、「Isomorphic web programming in Ruby」というタイトルです。いずれも主に私自身で作ったgem(ライブラリ)を紹介したものです。これらのライブラリについては3章「実践Opal」で解説します。
私がRubyKaigiでトークするようになったのは、当時同僚だったRubyKaigiのチーフオーガナイザーの@amatsudaさんから『女性の登壇者が少ないので登壇してほしい』と言われたことが始まりでした。(念のため書いておきますが、それはシード枠があった訳ではなく正規の枠でCFPを出してほしいという意味でした。)
何か話をしてほしいと言われても、RubyKaigiで話すネタなど当然なかったわけです(特に当時は転職しばかりでRubyistになって1年くらいだったのです)。またOpalは触ったことすらなく、名前くらいは知っていたという状況でしたが、何かネタを作らなければならないということで、当時ちょうどReactがブームになっていたのでVirtual DOMの実装をOpalで作りはじめました。まさにRubyKaigiで発表するためというモチベーションで始めた開発でした。(Kaigi駆動開発なんて呼んでいます。)
そのときは趣味のプログラムを書くためにOpalを使うという話をしていました。あれから3年、RubyKaigiではお馴染みのOpalトークということで安定のポジションを得ることができました。そろそろ趣味のプログラムではなく、実用的なツールとしてOpalが使われると良いな、と思うようになってきました。
……しかし3年間の活動の甲斐もなく、Opal自体はいまだにマイナーな存在のままです。
そこで、少しずつですがOpalを使ってもらえるようにする活動を開始しました。そのひとつとしてQiitaのアドベントカレンダーにOpalの記事を書きました。もっと沢山のひとに記事を寄稿してもらえるといいなって思ったのですが、実際には記事を書いたのは私と@yharaさんだけでした。とはいえ、このこと自体はOpalの現状をまとめる良い機会だったと思います。
そういうわけでアドベントカレンダーのために大量に書いた記事がありましたので、2017年10月の技術書典3の開催を機に書籍にまとめようということで書いたのが本書です。技術書典にて同人誌として産声を上げた本書ですが、この度、インプレスR&Dから技術書典シリーズの1冊として商業版が出版される運びとなりました。3年間のKaigi駆動開発で蓄積されたノウハウと成果を集大成としてこの本に込めました。お楽しみにいただいて、出来ればOpalを実際に使ってもらえるようになったらうれしいなと思います。
謝辞
この本を執筆することができたのはひとえにRubyKaigiに誘ってくださり、その後もRubyやオープンソースなどの技術面でいろいろな相談に乗ってくださった、松田明さんのおかげでした。またRubyを愛する仲間として、いつも共に切磋琢磨してきたAsakusa.rbの仲間達やRubyistのみなさんからも多くの刺激をもらいました。同じOpalファンとしてアドベントカレンダーにも投稿してくださり、この本にも寄稿をいただいたyharaさんには感謝の気持ちでいっぱいです。この本を書くきっかけとなったのは技術書典でした。技術書典スタッフのみなさんの働きがなければ、あのような素晴らしいイベントはなし得なかったでしょう。そして、商業出版にあたり、この本を選んでくださったインプレスR&Dの山城敬さんの存在は欠かせません。このように多くのひとたちに支えられて、この本を出版できることに感謝を捧げます。最後に、つねに精神的な支えとなっている家族に感謝の気持ちを表します。
ソースコードとサポート
本書に掲載されたソースコードと、正誤表などのサポートは以下のURLを参照ください。
https://github.com/youchan/pragmatic-opal-sample-codes
表記関係について
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
免責事項
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
底本について
本書籍は、技術系同人誌即売会「技術書典3」で頒布されたものを底本としています。
この本の対象読者はRubyに限らずプログラミングを嗜むみなさんです。ただし、Webに関する技術的なバックボーンはあったほうが良いでしょう。つまりWebプログラマということになります。(あまり知らなくても、深くつっこんだ話題はないので安心してください。)
またRubyに関して、コマンドなどの扱いは注意深く書いたつもりですが、Rubyそのものの文法や標準ライブラリについては説明を省いています。これについてはリファレンスマニュアルや他の情報で補ってください。
なによりも、Webアプリケーションをつくりたい!とか、Opalってなんだろう?つかってみたい!といった、そういった興味、好奇心が必要でしょう。
この本の構成は以下のようになっています。
1章「Opal入門」
はじめてOpalを触るプログラマに向けた導入部です。インストールからWebアプリケーション開発をはじめる準備までを扱っています。
2章「Opal応用編」
本格的なWebアプリケーションの開発の前に、OpalからJavaScriptのAPIの呼び出し方からgemのつくりかたまで学びます。
3章「実践Opal」
実際にWebアプリケーション開発を行います。作るのは簡単なTODOリストのようなものでとても実用的なものではありませんが、OpalをつかったWebアプリケーション開発の基礎を学びます。
4章「Opalの活用事例」
筆者が作ったプレゼンテーションツール「Gibier」と、「ICFPCビジュアライザ」を紹介します。「ICFPCビジュアライザ」については、@yharaさんに寄稿いただきました。