RBSをテストコードにするツールraapがrbsリポジトリで使われ始めた。
Introduce RaaP for testing of signature by ksss · Pull Request #1810 · ruby/rbs · GitHub
rbsのCIでraapを走らせている。 現状はSet classでしか使っていないが、これから範囲を広げていきたい。
経緯
raapを作っていたら、「これはRBS::UnitTestを自動化するツールだな」と思い始めてきた。
テストコードを手で書くより、自動で100パターン実行してくれた方が、管理するものが減って、人間の思い込みを排除した確認ができ、早く、変更にも強い。
もともとrbsリポジトリに置かれた記述されたRBSファイルに対するテスト("RBSの記述は正しいか"を確認するコード)は結構カバレッジが低い部分もあり、これを埋めたかった。
なのでraapをclass単位で実行して落ちたテストケースをコピペしてテストを足して型を直すという活動をやっていたが「もうこれはいっそraapをrbsリポジトリで使った方が早いのでは?」と思い始めた。
例えばSet classのRBSに対するテストはほとんど無に等しい状態で、実際型も正しくはなかったしメソッド名もtypoしてた。これを見つけたのもraapだ。
raapの完成度を上げ、十分使えそうになってきたのでrbsリポジトリに導入を提案した。
これから
まずはテストが不十分なところをraapで埋めつつ型を直していきたい。
あんまり厳密すぎても不便なだけになることもあるので、その辺のバランスを探りつつ、rbsにもraapにも還元していく流れを作っていきたい。
ゆくゆくはgem化されているスタンダードライブラリーでの使用も目論んでいる。
gem化されたスタンダードライブラリーはメンテナーが見ているわけだけど、メンテナーにRBS用のテストコードまで面倒見てもらうのは重い気がしているので、raapで自動化できたらいいんじゃない?と夢見ている。
さらにはユーザーライブラリーでの利用を広げるなど「型をテストにする」という切り口でどこまでいけるのか試してみたい。