Skip to content

リファクタリングの実施方法

概要

  • リファクタリングの基本的な実施方法を説明します。
  • ここを理解せずに、リファクタリングを行うと動かないコードになってしまう可能性があります。
  • 以下の内容を理解したうえで進めてください。

基本

  • リファクタリングの定義は以下のwikipediaに習います。

    python コンピュータプログラミングやソフトウェアデザインにおいて、コードリファクタリングとは、**外部の動作を変えずに、**既存のコンピュータコードの構造を再構築するプロセスです。リファクタリングは、ソフトウェアの設計、構造、または実装(非機能属性)を改善することを意図しています。コードの可読性の向上や複雑性の低減など、リファクタリングの潜在的な利点には、ソースコードの保守性の向上や、拡張性を高めるためのよりシンプルで、クリーンで、または表現力のある内部アーキテクチャやオブジェクトモデルの作成が含まれます。リファクタリングの別の潜在的な目標は、パフォーマンスの向上です。

具体的な内容「外部の動作を変えずに」

  • プログラムは基本的に何かしらのデータ(例えばDBのデータ、フォームの入力内容)をうけとってそれを処理して、結果を出力します。

    スクリーンショット 2023-03-06 12.45.06.png

    • 例えば、4というデータを受け取ったら、8というデータが返ってくる
    • 例えば、一定の形式のデータを受け取ったら、配列で戻ってくる
      • とかです。
    • 例えば「配列で戻ってくるところをjsonで戻ってくる形に変更」してしまうと、それを利用する全てのプログラムの修正が必要になります。そのため、リファクタリングの基本は、修正前後において外部に受け渡す値は一定であるというのが基本的なルールです。
    • 「何らかしらの処理」の部分が前者はぐちゃぐちゃで、後者がシンプルというイメージなのですが、両方共に最終的なアウトプットは同じです。でも中身をわかりやすく、シンプルにするというのがリファクタリングです。
    • 逆にアウトプットは異なる場合は、リファクタリングが失敗しています。

スクリーンショット 2023-03-06 13.09.03.png

  • これはテスト駆動開発の基本でもありますね。
    • 例えば、「1を渡した時に、10が返ってくるのが正しい」というテストコードが定義されているから、安心して中身をリファクタリングすることができます。

危険な例

  • 以下のような間違ったリファクタリングが行われることがあります。
    • URLを変更してしまう
      • URLがわかりづらいので、異なる名前に変更するケースです。
      • プライバシーポリシーのURLを変更したために、外部で申請していたURLが404エラーになってしまったためにリジェクトされるケースがありました。
    • APIの名前を変更してしまう
      • 恐らくAPIの名前をわかりやすくしたのだと思いますが、この場合もそのAPIをコールしているプログラムでエラーが発生してしまいました。
      • 名前的にはより正しくなったのかもしれませんが、「外部の動作を変えずに」というルールには反しています。
  • もちろんそういった外に出る値や名前を変更する場合もありますが、その場合はそこを利用している処理はないかを全て調べてから変更しないといけません。より注意が必要になりますね。