米GitHub、Ruby向けのリファクタリング支援ツール「Scientist 1.0」を発表

 米GitHubは2月3日、コードパスをリファクタリングするRubyライブラリ「Scientist 1.0」を公開した。重要なコードの書き直しと置き替えを安全かつ確実に行うことができるツールを目指すという。

 Scientistはコードのリファクタリングを行う際に利用するツール。最初のバージョンは2014年2月に公開された。

 数年前、GitHub内でアプリケーションにおいてアクセス制御のパーミッションコードなどの最も重要なシステムを書き換えるにあたって、作業を確実に行うために開発されたという。リファクタリングでは抽出レイヤを挿入する「Branch by Abstraction(BBA)」手法があるが、この手法では新しいシステムの振る舞いが置き替えたいシステムと同等かを確認できないという問題点を指摘している。一方で、テストについても、すべての可能性を網羅できないなど限界があるとしている。

 Scientistはこれらの課題から開発したもので、プロダクションのデータと振る舞いが正しいことを確認することを目指した。置き替えたいコード(「contorol」と呼ぶ)に対して「experiment」と呼ぶ軽量の抽出レイヤを作成し、experiment抽出レイヤに権限を渡す。書き直したコードは、実行時にexperimentが試す候補(「candidate」)として追加され、ランタイムでexperimentを呼び出すときにcontrolとcandidateの両方のコードバスが実行される。両方の結果を比較し、差異があればこれを記録する。実行時間の測定なども行う。これにより、低リスクで重要なコードの書き直しと置き替えを行うことができるとしている。

 Scientist 1.0はプロジェクトのWebサイトより入手できる。ライセンスはMIT License。

Scientist
https://github.com/github/scientist