READYFOR Tech Blog

READYFOR のエンジニアブログ

"RBS generation framework using Rack architecture"の予習記事

システム基盤部の栗原です。

RubyKaigi2022楽しみですね。READYFORからは、私栗原から発表させていただくことになりました。

https://rubykaigi.org/2022/presentations/_ksss_.html

今回は皆様によりトークを楽しんでいただく為に、予習となる要素を集めました。

何を話すのか

orthosesというライブラリーを作ったので使って下さい!というお願いをします。 orthosesは簡単に言うと、RBSの自動生成ツールです。

github.com

抱えている課題感

私は型を使った開発で得られる体験に魅せられています。コードを書いたその瞬間にバグに気づいて修正したり、複雑なロジックでもどの変数でどのオブジェクトが得られるのかエディタで確認しながら開発できるの最高だと思いませんか?

Rubyでもそれ、できるんです!!!

しかしながら、開発体験の現状と理想に多くのギャップを感じており、その課題の1つをなんとかするべく、プロダクトを開発した。というお話をします。

ロジックモデル

トークではロジックモデルをプログラミングプロジェクトにも当てはめてみることに挑戦しています。 私は、ロジックモデルは書籍"未来を実装する"で紹介されているのを読んで知りました。 この手法は、たどり着きたい最終目標を「インパクト」とし、インパクトへたどり着くためにはどのような成果や結果が必要なのか分解していく手法です。

参考文系

秋田県能代市による図での説明

https://www.city.noshiro.lg.jp/up/files/www/city/sogo-keikaku/1st-torikumi/h24/archives/118031download.pdf

"未来を実装する"は弊社技術トップのお勧め書籍でもあり、社内でも読まれています。

www.wantedly.com

RBSとRBIのツールチェインでの位置づけ

Rubyの型は大きく2つのエコシステムがあり、文法も違えば考え方も違っています。

ざっくり言えば、RBSは公式(matz)に認められているのですが、後発でツールチェインが未熟です。 RBIというかsorbetは先発で大企業がゴリゴリに開発を進めているのでツールチェインが充実しています。

完全に対比しているわけではないが、強いて言うならこの辺のポジションの話

型ファイルとは

Rubyのコードとは別に型情報だけ書き出したファイルのことを指します。*1 TypeScriptでいう.d.tsファイルみたいなやつです。Cでいうと.hファイルでしょうか。 RBSではRubyのコードには直接型を書くことはせず、型ファイルを別に用意する方式をとっています。 この場合のメリットは、これまでの書き味や読み味を保ったままにできること、既存資産を活用できることが考えられます。 ちなみにRBIではRubyコードに直接書くことも、分けて書くこともできます。より直感的で漸進的な型付けできることがメリットです。

Rackアーキテクチャー

本プロダクトではRackの中でもミドルウェアスタックのアーキテクチャーを流用しています。 シンプルなクラスをネストして繋げてcallで発火するモデルで、その形からオニオンアーキテクチャーとも呼ばれています。

このアーキテクチャーの概念的な元ネタはPythonのWSGIです。 なので正確にはWSGIアーキテクチャーになるのかもしれませんが、"Rackアーキテクチャー"のほうがRubyプログラマーに馴染みがあるだろうと思ってこう呼んでます。

https://ja.wikipedia.org/wiki/Web_Server_Gateway_Interface

https://docs.pylonsproject.org/ より。この画像もスライドで使えばよかった

TracePoint

本プロダクトではTracePointというRuby組み込みクラスの名前がよく出てきます。 なかなかアプリケーションコードで使われることは少ないかと思われますが、「特定のメソッドがどこからどの引数で呼ばれているのか、プログラムで取得したい」のように、Rubyのコードにモンキーパッチ無しでフックを仕掛けておくことができる便利な機能です。デバッグツールでよく使われていますが、今回ジェネレーター用途でも使ってみたらうまくいったよという話をします。

https://docs.ruby-lang.org/ja/latest/class/TracePoint.html

余談

Orthoses(装具)

この名前には「世の中には"装具"というものがあるんですよ」というステルスマーケティング効果も兼ねているので、これを期に知っていただければ幸いです。

甲賀

小説や漫画などでは「コウ」が有名ですが、地元では「コウ」と呼ばれています🥷。

甲賀忍法帖 - Wikipedia

甲賀流 - Wikipedia

しゃべりかた

トークでの喋り方はAWS JAPAN社長の長崎忠雄さんの話し方が好きで、堂々としていて聞き取りやすいので、「私もこんなふうに話せたら!」と参考にさせていただきました。

www.youtube.com

謝辞

「みんなが何を知りたいか分からないー💦」とSlackに書いたら社のエンジニアから様々な意見を頂きこの記事を書くことができました。ありがとうございます。

READYFORではOSS活動を推奨しているので、本プロダクトを作ることも後押ししていただきました。

ちょうど大変良い記事が出たところなのでチェックしてみて下さい。 READYFORのOSSポリシーを公開しました - READYFOR Tech Blog

おわりに

以上が予習キーワードとなります。RubyKaigi楽しんでいきましょう!

Happy Hacking!

*1:あくまで私のスライド上