最近リファクタリングについて考える機会がありました。今回はリファクタリングを実施するタイミングについて、これまで経験したことを記事にしたいと思います。記事の流れとしては以下のように書きたいと思います。リファクタリングを行う理由リファクタリングを行うことで、内部構造を改善して理解や修正が簡単になります。この考えは長く開発をしている方はよく理解しているかと思います。私がこれまで経験した一番悪いケースを紹介すると「10年間リファクタリングをしていないため、重複箇所が多く影響調査に1週間かかる」というものでした。10年間というキーワードが出てきたことでお気づきかと思いますが、古いシステムです。PHPを使って作ったシステムで、フレームワークも当時のものを使っています。控えめに言ってやばいです。これが原因で上(社長等)から「もっと成果を上げろ」と言われます。成果を上げるためには重複箇所を修正しなければなりません。その修正が目に見えるような成果として出ないものなので、上がなかなか納得してくれません。説得するための資料を作成するという無駄に時間のかかる作業が必要になり、ベテランのエンジニアが転職していきます。最終的に、プロダクトを深く理解している人がいなくなり誰も触れないプログラムが出来上がりました。なってしまうと、要件定義から始めて作り直す方が良いかもしれません。長く製品を維持するためにリファクタリングが必要になってきます。リファクタリングのタイミングについて同じコードを2回書いた時に行う3度目の法則というものがあるのですが、私は2回目で修正を行うべきだと考えています。経験上、2度同じコードを書いたものは、また別の箇所で同じコードを書いてしまいます。3つ同じコードが書かれることで修正範囲が広くなってしまい、「修正しよう」という意思が萎えます。重複コードが量産され、作り終わって時間が出来たら直そうという考えに至ります。その未来はやって来ません。ならないように2度目で修正を行います。修正する際には機能追加や機能改善は行わないようにします。同時に進めてしまうと、結果の検証時に振る舞いが変わっていないかか確認しづらくなります。プログラムに手を加えた後で行うこれは多くのチームでやっていないことかと思います。これまで4つのチームで開発を行い全てでやっていませんでした。機能追加や機能改善、バグフィックス等を行ったあとに、リリース作業を行って終了というケースです。リリース前にリファクタリング期間を入れます。手を加えたコードに対して重複箇所をなくしたり、仕方がなく冗長な書き方をしている箇所にコメントを入れたり。デザインテンプレートを適用して、予想できる機能追加に対して手を打っておきます。これを行うことによって、製品の品質が維持・向上できます。リリース前に行うリリース後のリファクタリングには苦労します。利用者に影響が出ないように慎重に行う必要がありますし、万が一問題が出たら詫び石を配布しなければならないかもしれません。twitterで謝罪したり、原因調査等行わないとならないです。ならないように、リリース前に一度リファクタリングします。全体的な開発の流れリファクタリング期間を入れた際の大まかな開発の流れです。業務では(上からの圧力により)このような流れでできていないのですが、個人開発ではこのように進めています。がむしゃらに進むより速度は遅いですが、スムーズに進みます。イメージとしては3歩進んで1回休憩という感じです。休憩中に、もっと良い方法など考えます。歩き方が効率化されて、目的地まで疲れずに辿り着けます。僕はテレビを使って情報収集するのをやめました。僕は戻り値にOptionalを使用することに消極的です。githubはご存知でしょうか。プログラミングを勉強する場合どのように勉強すると良いか...2019-01-1360.DjangoBasicAppsという数年前のプロジェクトのBooksを読んでみるDjangoBasicAppsのリポジトリは↓です。属性付きセレクタを作成する関数を作った。»プロフィールid:miyaji-y26プログラミングに関する記事をメインで書いています。月別アーカイブ最新記事alembicで環境別にマイグレーションファイルを分割するFlaskで共通的なpath変数を検証する方法material-iconsをchrome拡張のcontent-scriptで使用する方法リファクタリングを行うタイミングについて属性付きセレクタを作成する関数を作った。はてなブログをはじめよう!miyaji-y26さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。