hitode909の日記

以前はプログラミング日記でしたが、今は子育て日記です

全自動リファクタリング君

長年の技術的負債で,あるネームスペース以下には,このオブジェクトを渡さず,このオブジェクトのフィールドの一部だけを渡したい,みたいな話があった.コンテキストオブジェクト全部渡すと,そのメソッドが何に依存しているか分からないので,必要な分だけ渡すべきで,最近は必要な分だけもらってるけど,昔書いた分は全部もらってて,混在しててきびしい状況だった.
静的解析して安全に置き換えられることを確認して,ソースコードの定義と呼び出し元を書き換えて,変更箇所のテストが通ったらcommitしてpushする,テスト失敗したら人間を呼ぶ,みたいなスクリプトを書いた.午前中にスクリプト書いて,午後に動かして,263コミット,280ファイル書き換えて無事リファクタリング成功した.すごい.
すごいけど,最初から型さえあればIDEからちまちまリファクタリングできたはずなので,2014年にこういう技術を開発してるのはつらい気もする.
最初は,リファクタリングツールの一機能として公開できるかと思ってたけど,書き換えたいアプリケーションにべったりした実装なので公開できない感じだった.残念.PPI使えばできることが分かったのでみんなこういうの作ればいいと思う.

http://www.flickr.com/photos/12093421@N07/2928872508
photo by Javier Piragauta

追記

置換もPPIでやっていて、シグニチャ変えるのはtoken一個ずつ見てset_contentしてsaveとか、呼び出し元をまとめて書き換えるのはApp::PRTのReplaceTokenコマンドとか、そんな感じです。