------------------------------- -- 概説 Ruby Refactoring Browser 大林一平(ohai@kmc.gr.jp) -- この内容は http://www.kmc.gr.jp/~ohai/ rrb-kansai.html に置く予定です -- 発表の内容 -- STOP W 1. 自己紹介 2. リファクタリングとは何か 3. RubyRefactoringBrowserの概要 4. できること 5. その他 6. まとめ -- 1. 自己紹介 -- 大林一平 KMC(京大マイコンクラブ)部員 4月から京都大学理学研究科 数学数理解析専攻数学系 D1 -- Ruby Refactoring Browser Ruby/SDL SDLSKK RRSE -- 2. リファクタリングとは? -- 外部から見たときのふるまいを 保ちつつ、理解や修正が簡単に なるように、ソフトウェアの 内部構造を変化させること。 -- 一連のリファクタリングを 行なって、外部からの見た目の 変更なしに、ソフトウェアを 再構築すること。 -- 理解や修正を簡単にするため ↓ 機能追加ではない -- ふるまいを保つ ↓ デグレートを防ぐ -- STOP W * 設計の向上 * 理解を容易に * バグを発見しやすく -- 小さな定型的リファクタリングを 組合せて大きな変更 -- 定型的リファクタリング -- STOP W * 変数名/メソッド名の変更 * メソッドの切り出し * メソッドの移動 -- ユニットテスト -- より詳しくは マーチン・ファウラー著 「リファクタリング」 ピアソン・エデュケーション -- 3. RubyRefactoringBrowserの概要 -- 定型的処理は自動化 -- リファクタリングも自動化 -- リファクタリングツール -- Smalltalk 用が最初らしい -- Javaなど -- Ruby用 Ruby Refactoring Browser http://www.kmc.gr.jp/proj/rrb/ -- 可能なリファクタリング -- STOP W * ローカル変数名の変更 * グローバル変数名の変更 * インスタンス変数名の変更 * クラス変数名の変更 * メソッド名の変更 -- STOP W * コード片をメソッドとして 切り出し * メソッドの親子間での移動 * 共通スーパークラスの作成 -- インターフェース -- STOP W * Emacs * Vim * コマンドライン * xyzzy http://mzp.breeze.jp/ * freeride http://freeride.rubyforge.org/ -- Emacsでのデモ Rename local variable Extract method -- Vimでのデモ -- 注意点 -- 適当な構文解析 Extract Methodで注意 -- STOP W if __FILE__ == $0 : end -- リファクタリングされる ファイルの範囲 -- Rubyist Magazineの記事 http://jp.rubyist.net/ magazine/ ?0010-RubyRefactoringBrowser -- 5. その他 -- Ruby Refactoring Browser の組みこみ -- 置換やカットアンドペーストツール の一種とみなせる -- 開発環境から簡単に使える ようにしないと使い難い -- ここでは詳しく解説しません -- 解説記事 http://jp.rubyist.net/ magazine/ ?0011-RubyRefactoringBrowser -- Rubyで書かれている -- 適当なプロセス間通信 手段を使ってRubyを動かす -- RDT? -- 今後の課題 -- より正確な変換 attr_* -- ドキュメントの拡充 -- 新たなリファクタリングの追加 Remove? Inlining method? -- Ruby Refactoring Browser の裏側 -- 80-20の法則 -- パーサ -- ripper改 -- 構文木の作成 -- 制御構文等は無視 -- 識別子の位置と種類だけ 持っている -- 6. まとめ -- 名前の変更 メソッドの抽出 -- これだけできれば結構快適です -- 参考資料, URLなど -- STOP W * http://www.kmc.gr.jp/proj/rrb/ メーリングリスト、チュートリアル * http://rubyforge.org/projects/ rrb/ BTS, 英語メーリングリストなど * Rubyist Magazineの記事 -- 御静聴ありがとうございました