Ruby Hack Challenge Holiday #8 Ruby on Typesに参加した #cookpad_rhc

まとめ

最高

宣伝: ruby-signature AdventCalendar

勝手につくりました、年末お型付けチャンス

adventar.org

リモート参加枠大感謝

現地参加しようと思ってたけどリモート参加枠ができたのでめちゃくちゃ助かった。沖縄からだと結構大変なので。

リモート参加感想

ruby-jpのチャットでわいわいできて楽しかった ruby-jpのチャットで書いたやつ拾ってもらったりしたので個人的には全く不満なしです、映像も音声もよくきこえた(ノイズキャンセリングイヤホンの電池が切れかけなの忘れてて音声たまにブチブチ切れる感じになってしまったけど気づかなくて終わってからきづいた)

今回リモート参加で発表者のコンピュータとつないでもらえていたので、声もかなり聞き取りやすいし、スライドも完全に内容読めるし、発表者のところにいろいろ聞きにきた人の話とかも聞けたりして、実はかなりお得だったのではという感じがする

感想

なんかめちゃくちゃ質問があったり文法こっちのほうがよいのでは、みたいな話もちょいちょい出てきてライブ型付け、ライブ型付けデバッグもあり、つないでから2時間ぐらいぶっ続けでいろいろな話が出てくる濃い会になっていた気がする。 ついていけていたけど途中チャットとかしてるとついていけなくなった部分がなくはない感じ。(スライド表紙見てたけどSquare🎉)

speakerdeck.com

発表聞きながらランタイムテスト周りの実装を読んでいたんだけど、TracePointでクラス定義が終わったタイミングで、定義されてるメソッドを乗っ取るテスト用のモジュールを生成してprependしていたりして、なかなかすごかった。 あとこのModuleをprependする方法以外にもRefinementsとして取り出して使える方法もあって、組み込みライブラリはこのRefinementsの方で書かれている。 なぜRefinementsなのかというと、Moduleをprependだとテストのコード以外の部分でもこのメソッド乗っ取りがきいてしまって無限ループ突入することがあるので、テストしてるコードの中だけで効かせるためにRefinementsを使っている。(かしこい)

無限ループ、どう伝えればいいかわからないけどたとえば String#to_s をのっとると to_s が呼ばれたよ、みたいなのを標準出力に出すために to_s が呼ばれて無限ループするみたいなイメージ

他、gemのテストをそのまま型のテストに流用できる感じのなにかみたいな仕掛けが紹介されていたり、どんなテスティングフレームワークにも組み込みやすいように型のエラー起きてもログに出すだけにしてるとかいろいろなるほどポイントがあった。

bottom型の存在知らなかったけどあるのがわかった

en.wikipedia.org

インターフェイス、セットで定義する必要があるメソッドまとめるのにべんりそうな感じ(respond_toとmethod_missingとか)

rubyのバージョンごとに型定義わけるみたいな構文はなさそう

現在の標準添付ライブラリの型の状況はSpreadsheetにあるよう

docs.google.com

Refinementsの型についても質問でていたけど難しそう、とのこと

uncheckedに関しては探索止めるために指示が必要そうな雰囲気を感じた(そこは多分プログラマー側で担保しないとだめそう)

Enumerable#inject enumerable.inject {|e1, e2| } があるのでuncheckedなるほどなあ って書いてたけど今読み返すと何がなるほどなのか自分でよくわからなくなった()

ruby-jpの方にチャットのログで結構書いてていずれ読めなくなるのでサルベージだれか。。。。たのんだ。。

やったこと

コントリビューションしやすそうなstdlibに型定義が足りてないメソッド一覧を出したりした

gist.github.com

Object#itself の型定義を足した

github.com

Integer#to_s は引数を取る場合2〜36の整数しかうけとれないので、そういう型に直した。テスト用の仕組みがsingletonクラスが対応できない場合動かなかったのでとりあえず動くように直した。

github.com

ruby-signatureのシンタックスハイライト用のVisual Studio Code拡張の宣伝をした

marketplace.visualstudio.com

ほかのひとの様子

pockeさんがsystemの型に挑戦していてめちゃくちゃオプション多くてチャレンジングだなと思った。

大量オプションメソッドだと結構厳しくなりそう(現実のアプリだととりあえず Hash[untyped, untyped] していい気がする)

リテラル型のtrueとfalseがまだ実装されてなかったのをmtsmfmさんが実装してて面白かった vscode remote container で開発するときのべんりコンテナ設定とか共有されていてべんりそう(試したい) github.com

自分のgemに導入してる人などいてめちゃくちゃ参考になる

github.com

nil.to_i 出そうと思ったらかぶってしまったり

github.com

結構みんなツイートしてたので見るとよさそう(あとruby-jpの #rhc でももりあがってました)

mobile.twitter.com

現地会場、子が走り回ってる感じでよさそうだった、ささださんがカメラ越しに子あやしてて和んだ

今日できなかったこと

質問内容とディスカション内容みたいなのメモしておけばよかったなーという気持ちが若干あり

自分のライブラリをrubygemsで配布するgemに同梱して配布する、とか、それをSteepから使う、とかそのへんをためしてないので試したい あとそこらへんの、ライブラリに後づけするときの流れ・ライブラリをつくるときに最初から書く流れ

を体験しておきたいような気がする。stdlibの型付けに関しては一旦ついてしまえば自分で触ることはなさそうだし。

rubygemsで配布されてるgemに型がついている世界のためにはgem作者向けの書き方資料みたいなのがあるとべんりっぽいので、だ、だれか!!

と思ったけど書く場所がほしい気がしたのでAdventCalendarつくりました、型、つけてこ!

adventar.org

まとめ

最高の会

リモート枠最高

いいなと思ったらKyashでお金を下さい
20191128011151
GitHubスポンサーも受け付けています
https://github.com/sponsors/hanachin/