---
title: "リファクタリングとは？TDD・ペアプログラミングとの違いを整理【基本情報技術者試験】"
description: "リファクタリングを、外部から見た動作を変えずに内部構造を改善する活動として整理し、TDD・ペアプログラミング・プロトタイピングとの違いをFE試験向けにやさしく解説します。"
last_modified_at: "2026-08-16"
canonical_url: "https://stemtazoo.github.io/fe/refactoring/"
section: "fe"
---

## まず結論

リファクタリングとは、**外部から見た動作を変えずに、プログラムの内部構造を改善すること**です。

試験では、次の一文で切り分けると分かりやすいです。

> **動作はそのまま、中身を整理する → リファクタリング。**

似た用語は、目的で分けます。

```text
内部構造を整理する
→ リファクタリング

2人で1つのプログラムを書く
→ ペアプログラミング

テストを先に作る
→ テスト駆動開発（TDD）

試作品を早く作る
→ プロトタイピング
```

## 直感的な説明

リファクタリングは、部屋の模様替えではなく、**収納の整理**に近いイメージです。

部屋の外から見た使い方は変えません。

一方で、中では次のような改善を行います。

- 重複した処理をまとめる
- 長すぎる処理を分ける
- 分かりにくい変数名を直す
- 複雑な条件分岐を整理する
- クラスや関数の役割を見直す

つまり、利用者から見た機能は変えず、開発者にとって理解・修正しやすい形にします。

```text
外から見た機能
→ 変えない

内部のコード構造
→ 改善する
```

## 定義・仕組み

リファクタリング（Refactoring）は、既存のプログラムについて、**外部仕様や振る舞いを保ったまま内部構造を変更する活動**です。

主な目的は、次のようなものです。

- 可読性を高める
- 保守性を高める
- 重複を減らす
- 修正しやすくする
- 機能追加しやすい構造にする

### 具体例

例えば、同じ処理が複数の場所に繰り返し書かれている場合を考えます。

```text
同じ計算処理
→ Aの処理にも書く
→ Bの処理にも書く
→ Cの処理にも書く
```

これを共通の関数にまとめます。

```text
共通の関数を作る
↓
A・B・Cから呼び出す
```

利用者から見た結果は同じですが、コードは修正しやすくなります。

### アジャイル開発との関係

リファクタリングは、アジャイル開発、とくにXP（Extreme Programming）で重視されるプラクティスの一つです。

短いサイクルで機能を追加していくと、コードが複雑になりやすいため、継続的に内部構造を整えることが重要になります。

## 科目Aでどう出る？

科目Aでは、リファクタリングと似た開発活動を区別する問題として出題されます。

判断するときは、**何を変える活動なのか**に注目します。

| 問題文の手掛かり | 用語 |
|---|---|
| 外部仕様を変えず内部構造を改善する | リファクタリング |
| 2人のプログラマが協力して1つのコードを書く | ペアプログラミング |
| テストケースを先に作り、その後に実装する | テスト駆動開発（TDD） |
| 試作品を早期に作って利用者の意見を得る | プロトタイピング |

### リファクタリングを選ぶキーワード

```text
外部仕様を変えない
内部構造を変更する
保守性を高める
可読性を高める
重複コードを整理する
```

このような表現があれば、リファクタリングを考えます。

### 選択肢を切る順番

```text
2人で書く？
→ ペアプログラミング

テストを先に作る？
→ TDD

試作品で意見をもらう？
→ プロトタイピング

動作を変えず中身を整理する？
→ リファクタリング
```

## どんな場面で使う？

リファクタリングは、ソフトウェアを長く保守・改善していく場面で使います。

例えば、次のような状態です。

- 同じ処理が何か所にもある
- 関数が長く、役割が分かりにくい
- 変数名から意味が読み取りにくい
- 条件分岐が複雑になっている
- 機能追加のたびに多くの場所を修正する必要がある

このようなコードを整理することで、その後の修正や機能追加をしやすくします。

ただし、リファクタリングそのものは、新機能を追加する活動ではありません。

## よくある誤解・混同

### リファクタリングは新しい機能を追加すること

違います。

リファクタリングでは、外部から見た振る舞いを変えないことが前提です。

```text
新しい機能を追加する
→ 機能開発

今の機能を保ったまま内部を整理する
→ リファクタリング
```

### リファクタリングとペアプログラミングは同じ

違います。

ペアプログラミングは、2人のプログラマが協力して1つのプログラムを作る方法です。

```text
何人で書くか
→ ペアプログラミング

コードをどう整理するか
→ リファクタリング
```

### リファクタリングとTDDは同じ

違います。

TDD（Test Driven Development）は、テストを先に作り、そのテストを満たすコードを書いていく開発方法です。

```text
テストを先に作る
→ TDD

内部構造を改善する
→ リファクタリング
```

TDDの開発サイクルの中でリファクタリングを行うことはありますが、同じ意味ではありません。

### リファクタリングとプロトタイピングは同じ

違います。

プロトタイピングは、早い段階で試作品を作り、利用者から意見を得る方法です。

```text
利用者の要求を確認するため試作品を作る
→ プロトタイピング

既存コードの内部を整理する
→ リファクタリング
```

### コードを変更するなら動作も変わる

必ずしもそうではありません。

リファクタリングではコードそのものは変更しますが、利用者から見た結果や機能は変えません。

この「**コードは変えるが、振る舞いは変えない**」が重要な判断ポイントです。

## まとめ（試験直前用）

- リファクタリングは、外部仕様を変えずに内部構造を改善する活動
- 主な目的は、可読性・保守性を高めること
- 新機能を追加する活動ではない
- 2人でコードを書くのはペアプログラミング
- テストを先に作るのはTDD
- 試作品で利用者の意見を得るのはプロトタイピング
- 「動作はそのまま、中身を整理する」ならリファクタリング

```text
中身を整理
→ リファクタリング

2人で書く
→ ペアプログラミング

テストを先に書く
→ TDD

試作品を先に作る
→ プロトタイピング
```
