Ruby Hack Challenge Holiday #8 Ruby on Typesに参加した #cookpad_rhc
まとめ
最高
宣伝: ruby-signature AdventCalendar
勝手につくりました、年末お型付けチャンス
リモート参加枠大感謝
現地参加しようと思ってたけどリモート参加枠ができたのでめちゃくちゃ助かった。沖縄からだと結構大変なので。
リモート参加感想
ruby-jpのチャットでわいわいできて楽しかった ruby-jpのチャットで書いたやつ拾ってもらったりしたので個人的には全く不満なしです、映像も音声もよくきこえた(ノイズキャンセリングイヤホンの電池が切れかけなの忘れてて音声たまにブチブチ切れる感じになってしまったけど気づかなくて終わってからきづいた)
今回リモート参加で発表者のコンピュータとつないでもらえていたので、声もかなり聞き取りやすいし、スライドも完全に内容読めるし、発表者のところにいろいろ聞きにきた人の話とかも聞けたりして、実はかなりお得だったのではという感じがする
感想
なんかめちゃくちゃ質問があったり文法こっちのほうがよいのでは、みたいな話もちょいちょい出てきてライブ型付け、ライブ型付けデバッグもあり、つないでから2時間ぐらいぶっ続けでいろいろな話が出てくる濃い会になっていた気がする。 ついていけていたけど途中チャットとかしてるとついていけなくなった部分がなくはない感じ。(スライド表紙見てたけどSquare🎉)
発表聞きながらランタイムテスト周りの実装を読んでいたんだけど、TracePointでクラス定義が終わったタイミングで、定義されてるメソッドを乗っ取るテスト用のモジュールを生成してprependしていたりして、なかなかすごかった。 あとこのModuleをprependする方法以外にもRefinementsとして取り出して使える方法もあって、組み込みライブラリはこのRefinementsの方で書かれている。 なぜRefinementsなのかというと、Moduleをprependだとテストのコード以外の部分でもこのメソッド乗っ取りがきいてしまって無限ループ突入することがあるので、テストしてるコードの中だけで効かせるためにRefinementsを使っている。(かしこい)
無限ループ、どう伝えればいいかわからないけどたとえば String#to_s
をのっとると to_s
が呼ばれたよ、みたいなのを標準出力に出すために to_s
が呼ばれて無限ループするみたいなイメージ
他、gemのテストをそのまま型のテストに流用できる感じのなにかみたいな仕掛けが紹介されていたり、どんなテスティングフレームワークにも組み込みやすいように型のエラー起きてもログに出すだけにしてるとかいろいろなるほどポイントがあった。
bottom型の存在知らなかったけどあるのがわかった
インターフェイス、セットで定義する必要があるメソッドまとめるのにべんりそうな感じ(respond_toとmethod_missingとか)
rubyのバージョンごとに型定義わけるみたいな構文はなさそう
現在の標準添付ライブラリの型の状況はSpreadsheetにあるよう
Refinementsの型についても質問でていたけど難しそう、とのこと
uncheckedに関しては探索止めるために指示が必要そうな雰囲気を感じた(そこは多分プログラマー側で担保しないとだめそう)
Enumerable#inject enumerable.inject {|e1, e2| } があるのでuncheckedなるほどなあ って書いてたけど今読み返すと何がなるほどなのか自分でよくわからなくなった()
ruby-jpの方にチャットのログで結構書いてていずれ読めなくなるのでサルベージだれか。。。。たのんだ。。
やったこと
コントリビューションしやすそうなstdlibに型定義が足りてないメソッド一覧を出したりした
Object#itself
の型定義を足した
Integer#to_s
は引数を取る場合2〜36の整数しかうけとれないので、そういう型に直した。テスト用の仕組みがsingletonクラスが対応できない場合動かなかったのでとりあえず動くように直した。
ruby-signatureのシンタックスハイライト用のVisual Studio Code拡張の宣伝をした
ほかのひとの様子
pockeさんがsystemの型に挑戦していてめちゃくちゃオプション多くてチャレンジングだなと思った。
大量オプションメソッドだと結構厳しくなりそう(現実のアプリだととりあえず Hash[untyped, untyped]
していい気がする)
リテラル型のtrueとfalseがまだ実装されてなかったのをmtsmfmさんが実装してて面白かった vscode remote container で開発するときのべんりコンテナ設定とか共有されていてべんりそう(試したい) github.com
自分のgemに導入してる人などいてめちゃくちゃ参考になる
nil.to_i
出そうと思ったらかぶってしまったり
結構みんなツイートしてたので見るとよさそう(あとruby-jpの #rhc でももりあがってました)
現地会場、子が走り回ってる感じでよさそうだった、ささださんがカメラ越しに子あやしてて和んだ
今日できなかったこと
質問内容とディスカション内容みたいなのメモしておけばよかったなーという気持ちが若干あり
自分のライブラリをrubygemsで配布するgemに同梱して配布する、とか、それをSteepから使う、とかそのへんをためしてないので試したい あとそこらへんの、ライブラリに後づけするときの流れ・ライブラリをつくるときに最初から書く流れ
を体験しておきたいような気がする。stdlibの型付けに関しては一旦ついてしまえば自分で触ることはなさそうだし。
rubygemsで配布されてるgemに型がついている世界のためにはgem作者向けの書き方資料みたいなのがあるとべんりっぽいので、だ、だれか!!
と思ったけど書く場所がほしい気がしたのでAdventCalendarつくりました、型、つけてこ!
まとめ
最高の会
リモート枠最高