機能 #83
完了
Redmine Glossaryプラグインをリファクタリングする
高橋 徹 さんがほぼ7年前に追加.
5年以上前に更新.
説明
Redminge GlossaryプラグインのRedmine 4.0(Rails 5.2)対応作業を通じて、今後のメインテナンスを良好にするにはリファクタリングが必要と強く感じた。
- Railsのリソース指向な構造に合わせる
- コントローラーのアクションがルーティングでresources/resourceを使うのに馴染まない
- newやeditのアクションの遷移が独特(new→create、edit→updateとなっていない)
- 命名を一貫させる
- glossaryとterm
- styleは表示設定に適する命名かどうか
- 役割分担が局所化されていない
- glossary_controllerが肥大化、term_categoryまで面倒みている
そこで、Redmine 4.0(Rails 5.2)対応を一応終えたバージョンをブランチ開始としてリファクタリングを実施する。
リファクタリングは多岐にわたるので、本チケットの子チケットに個別リファクタリングを設けることでタスク管理する。
リファクタリング作業のブランチは次とする。
refactoring/83
- 関連している 機能 #81: Redmine 4.0でglossary pluginを動くようにする を追加
- 関連している 機能 #75: Redmine Glossary プラグインを一から作成する を追加
- ステータス を 新規 から 進行中 に変更
- 進捗率 を 0 から 50 に変更
リファクタリング作業の主幹となるブランチを作成した。
redmine_glossary (support-redmine4=)$ git checkout -b refactoring/83
個別のリファクタリングは、この主幹となるブランチ(refactoring/83)からブランチする。
redmine_glossary (refactoring/83)$ git checkout -b refactoring/86
リファクタリングの試み(第1回)¶
結果:破綻
作業経緯:
まず、[#86]から着手することとし、モデルクラスのクラス名およびファイル名の変更、次にユニットテストを通すことを目標に修正を実施した。
データベースのテーブル名を変更するマイグレーションスクリプトを作成し、モデル内、ユニットテスト内、fixtureのクラス名を修正。
コントローラーの修正に入るところで、ルーティング設定、アクションの定義、などなどで修正範囲が拡大し破綻。
- リンクでは、コントローラー名を埋め込んでいるものが大半のため、コントローラー、ヘルパー、ビューの随所で文字列を変更しまくる必要あり。例をいくつか示す。
{:controller => 'glossary', :action => 'add_term_category', :project_id => @project.id }
- 部分ビューではパスを多用しているものが多いので、それらを変更しまくる必要あり。例をいくつか示す。
<%= render :partial => 'glossary/form', :locals => {:f => f} %>
アプローチを見直す必要がありそう。
- ステータス を 進行中 から フィードバック に変更
リファクタリング困難につき、本タスクは中止としました。
子チケットを終了させるため、いったんフィードバックにします。
- ステータス を フィードバック から 却下 に変更
- 進捗率 を 50 から 100 に変更
- 関連している 機能 #95: Redmine 4.xに対応するRedmine Glossaryプラグインを、旧バージョンのデータベースを引き継ぎ、且つコードをきれいに再構築する を追加
他の形式にエクスポート: Atom
PDF