---
title: "リバースエンジニアリング（Reverse Engineering）とは？フォワードエンジニアリングとの違い【基本情報技術者試験】"
description: "リバースエンジニアリングを、既存システムや本稼働中のデータベースから定義情報を読み取り、E-R図などの設計情報を生成する手法として整理し、フォワードエンジニアリング、コンカレントエンジニアリング、ソーシャルエンジニアリングとの違いをFE試験向けに解説します。"
last_modified_at: "2026-07-25"
canonical_url: "https://stemtazoo.github.io/fe/reverse-engineering/"
section: "fe"
---

## まず結論

リバースエンジニアリング（Reverse Engineering）とは、**既存のシステムや完成済みのソフトウェアから、内部構造や設計情報を読み取る手法**です。

英語の `reverse` は「逆向き」という意味です。  
そのため、Reverse Engineering は **完成したものから、設計へ逆向きにたどること** と考えると分かりやすいです。

基本情報技術者試験では、次のように切り分けます。

```text
Reverse Engineering   ：既存システム → 設計情報
Forward Engineering   ：設計情報 → システム
Concurrent Engineering：工程を同時並行で進める
Social Engineering    ：人の心理を突いて情報を得る
```

「本稼働中のデータベースの定義情報から、E-R図などの設計書を生成する」と出たら、**リバースエンジニアリング（Reverse Engineering）** と判断します。

## 直感的な説明

通常の開発では、先に設計書を作り、その設計に基づいてシステムを作ります。

```text
設計書
→ システム
```

これは前向きの流れです。

一方、リバースエンジニアリング（Reverse Engineering）では、すでに動いているシステムやデータベースから、設計情報を読み取ります。

```text
既存システム
→ 定義情報を読み取る
→ E-R図や設計書を作る
```

つまり、流れが逆向きです。

たとえば、古いシステムに設計書が残っていない場合でも、データベースのテーブル定義や関連を調べれば、E-R図を作れることがあります。

このように、**作られたものから設計を復元する** のがリバースエンジニアリングです。

## 定義・仕組み

リバースエンジニアリング（Reverse Engineering）は、既存の成果物を解析して、仕様・設計・構造などを明らかにする手法です。

データベース分野では、例えば次のような情報を読み取ります。

| 読み取る情報 | 設計書で表せる内容 |
|---|---|
| テーブル定義 | エンティティ |
| カラム定義 | 属性 |
| 主キー | 一意に識別する項目 |
| 外部キー | テーブル間の関連 |
| 制約 | データのルール |

これらをもとに、E-R図などの設計情報を生成します。

```text
本稼働中のデータベース
→ テーブル定義・キー・関連を読む
→ E-R図を生成する
```

E-R図は、データベース内のデータ同士の関係を表す図です。

そのため、データベースの定義情報からE-R図を作る、という説明はリバースエンジニアリングの典型です。

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html) から確認できます。リバースエンジニアリングは、データベース設計やソフトウェア保守の考え方と関係します。

## 科目Aでどう出る？

科目Aでは、説明文から該当する「〜エンジニアリング」を選ぶ形で出題されやすいです。

選択肢を切るときは、英語の意味を見ると判断しやすくなります。

| 用語 | 英語の直感 | 判断ポイント |
|---|---|---|
| リバースエンジニアリング（Reverse Engineering） | reverse = 逆向き | 既存システムから設計情報を取り出す |
| フォワードエンジニアリング（Forward Engineering） | forward = 前向き | 設計情報から新しいシステムを作る |
| コンカレントエンジニアリング（Concurrent Engineering） | concurrent = 同時並行 | 設計・製造・テストなどを並行して進める |
| ソーシャルエンジニアリング（Social Engineering） | social = 人・社会 | 人の心理や不注意を突いて情報を得る |

例えば、次のように、

```text
本稼働中のデータベースシステムの定義情報から、
E-R図などで表現した設計書を生成する
```

という説明なら、すでにあるデータベースから設計書へ戻っています。

```text
既存DB → 設計書
```

なので、Reverse Engineering です。

## どんな場面で使う？


データベースやシステム保守の文脈で、次のような状況を読むときに役立ちます。

- 古いシステムの設計書が不足している
- 本稼働中のデータベースからテーブル関係を整理する
- 既存システムを調査して、改修や移行に備える
- E-R図を作り直して、データ構造を把握する

このときは、作業の向きを確認します。

```text
設計書からシステムを作る → Forward Engineering
既存システムから設計を読み取る → Reverse Engineering
```

作業の向きが分かれば、選択肢をかなり切りやすくなります。

## よくある誤解・混同

一番混同しやすいのは、リバースエンジニアリング（Reverse Engineering）とフォワードエンジニアリング（Forward Engineering）です。

| 混同しやすい組み合わせ | 違い |
|---|---|
| Reverse Engineering と Forward Engineering | Reverseは既存システムから設計へ、Forwardは設計からシステムへ |
| Reverse Engineering と Concurrent Engineering | Reverseは解析、Concurrentは同時並行開発 |
| Reverse Engineering と Social Engineering | Reverseは技術的な解析、Socialは人をだまして情報を得る |

特に、ソーシャルエンジニアリング（Social Engineering）はセキュリティ分野の用語です。

```text
人の心理や不注意を利用して、パスワードなどを不正に得る
```

という説明なら、Social Engineering です。

一方、データベースの定義情報やE-R図が出る場合は、技術的に設計情報を読み取る話です。

```text
既存DB → E-R図
```

なので、Reverse Engineering と判断します。

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

- リバースエンジニアリング（Reverse Engineering）は、既存システムから **設計情報を読み取る** 手法
- `reverse` は「逆向き」なので、完成品から設計へ戻るイメージ
- フォワードエンジニアリング（Forward Engineering）は、設計情報からシステムを作る
- コンカレントエンジニアリング（Concurrent Engineering）は、工程を同時並行で進める
- ソーシャルエンジニアリング（Social Engineering）は、人の心理や不注意を突いて情報を得る
