---
title: "インタプリタ方式とコンパイル方式の違いとは？処理時間の比較計算【基本情報技術者試験】"
description: "インタプリタ方式とコンパイル方式の処理時間を、行数に比例する時間と固定オーバーヘッドに分けて式で比較し、どの時点でコンパイル方式が有利になるかをFE試験向けに解説します。"
last_modified_at: "2026-07-16"
canonical_url: "https://stemtazoo.github.io/fe/interpreter-compiler-processing-time/"
section: "fe"
---

## まず結論

インタプリタ方式とコンパイル方式の処理時間を比べる問題では、**行数に比例する時間**と**最初に1回だけ掛かる固定時間**を分けて式にします。

基本の考え方は次のとおりです。

```text
インタプリタ方式
= 1行当たりの実行時間 × 行数

コンパイル方式
= コンパイル時間
+ 実行時間
+ 固定オーバーヘッド
```

プログラムが短いときは、準備時間の少ないインタプリタ方式が有利です。

一方、プログラムが長くなると、実行の速いコンパイル方式が有利になります。

## 直感的な説明

インタプリタ方式は、文章を1行ずつ読みながら、その場で処理するイメージです。

```text
読み取る
→ 実行する
→ 次の行を読み取る
```

最初の準備は少ないですが、実行中も解釈を繰り返すため、行数が増えるほど時間が掛かります。

コンパイル方式は、最初にプログラム全体を実行可能な形へ変換してから動かすイメージです。

```text
最初にまとめて変換
→ 実行可能な形を作る
→ 高速に実行する
```

最初にコンパイル時間や起動時間が掛かりますが、実行部分は速くなります。

つまり、次のような関係です。

| 方式 | 最初の準備 | 実行時 |
|---|---|---|
| インタプリタ方式 | 少ない | 遅め |
| コンパイル方式 | 多い | 速め |

## 定義・仕組み

### インタプリタ方式

インタプリタ方式は、ソースプログラムを実行時に逐次解釈しながら処理する方式です。

一般に、次の特徴があります。

- すぐに実行を始めやすい
- 修正と確認を繰り返しやすい
- 実行のたびに解釈処理が必要
- 長い処理では時間が掛かりやすい

### コンパイル方式

コンパイル方式は、ソースプログラムを事前に機械語や中間コードなどへ変換し、その後に実行する方式です。

一般に、次の特徴があります。

- 実行前にコンパイルが必要
- コンパイル後の実行は速い
- 大きなプログラムや繰り返し実行で有利
- 起動やファイル入出力などの固定時間が掛かる場合がある

Javaでは、ソースコードをバイトコードへコンパイルし、JVM上で実行します。JVMはバイトコードを逐次解釈したり、JITコンパイラで機械語へ変換したりします。

基本情報技術者試験の計算問題では、問題文で示された「インタプリタ方式」と「コンパイル方式」の条件を、そのまま式へ置き換えることが重要です。

### 処理時間を式にする

プログラムの行数を、100行単位で `L` とします。

例えば、インタプリタ方式が100行当たり0.2秒なら、処理時間は次のとおりです。

```text
インタプリタ方式 = 0.2L
```

コンパイル方式について、次の条件があるとします。

- コンパイル時間：100行当たり0.1秒
- 実行時間：100行当たり0.003秒
- 固定オーバーヘッド：0.15秒

この場合は、

```text
コンパイル方式
= 0.1L + 0.003L + 0.15
= 0.103L + 0.15
```

です。

### 逆転する境界値を求める

二つの方式が同じ時間になる点を求めます。

```text
0.2L = 0.103L + 0.15
```

整理すると、

```text
0.097L = 0.15
L ≒ 1.546
```

`L` は100行単位なので、実際の行数は約154.6行です。

したがって、整数で考えると、**155行以上でコンパイル方式の方が短くなります**。

公式の出題範囲やシラバスは、[IPA：基本情報技術者試験](https://www.ipa.go.jp/shiken/kubun/fe.html)から確認できます。

## 科目Aでどう出る？

科目Aでは、次のような条件が与えられます。

- 100行当たりの実行時間
- 100行当たりのコンパイル時間
- 固定オーバーヘッド
- どちらの方式が速くなるか
- 何行以上で逆転するか

解く順番は次のとおりです。

```text
1. 行数の単位を確認する
2. インタプリタ方式の式を作る
3. コンパイル方式の式を作る
4. 固定時間を加える
5. 二つの式を等しくする
6. 元の行数単位へ戻す
7. 「何行以上」なら切り上げる
```

### 判断用の表

| 問題文の表現 | 式での扱い |
|---|---|
| 100行当たり0.2秒 | `0.2L` |
| 行数に比例する | 係数に `L` を掛ける |
| 行数に関係なく0.15秒 | `+0.15` |
| コンパイル時間を含む | コンパイル時間も合計する |
| 何行以上 | 境界値を整数へ切り上げる |

## どんな場面で使う？

この考え方は、二つの処理方式の**固定費と変動費の比較**に使えます。

例えば、次のような場面です。

- インタプリタ方式とコンパイル方式の比較
- 手作業と自動化の所要時間比較
- 初期設定が必要な装置と不要な装置の比較
- バッチ処理と逐次処理の比較
- キャッシュ作成前後の処理時間比較

考え方は共通しています。

```text
方式A = 変動時間だけ
方式B = 固定時間 + 小さい変動時間
```

処理量が少ないうちは方式Aが有利でも、処理量が増えると方式Bが逆転することがあります。

## よくある誤解・混同

### 誤解1：コンパイル時間を無視する

問題文に「コンパイル時間も含む」とある場合は、必ず式へ加えます。

```text
実行時間だけ
→ 不十分

コンパイル時間 + 実行時間
→ 正しい
```

### 誤解2：固定オーバーヘッドにも行数を掛ける

行数に関係なく毎回0.15秒掛かるなら、

```text
+0.15
```

です。

```text
0.15L
```

ではありません。

### 誤解3：100行単位をそのまま行数だと考える

`L = 1.55` は1.55行ではありません。

`L` が100行単位なら、

```text
1.55 × 100 = 155行
```

です。

### 誤解4：境界値を四捨五入する

「何行以上で短くなるか」を問われた場合、境界値を超える最小の整数が必要です。

例えば154.6行なら、答えは155行です。

### 誤解5：コンパイル方式は必ず速い

短いプログラムでは、コンパイル時間や起動時間の影響が大きく、インタプリタ方式の方が短い場合があります。

```text
短いプログラム
→ インタプリタ方式が有利なことがある

長いプログラム
→ コンパイル方式が有利になりやすい
```

### インタプリタ・コンパイラ・JITの違い

| 用語 | 処理の特徴 |
|---|---|
| インタプリタ | 実行時に逐次解釈する |
| コンパイラ | 実行前にまとめて変換する |
| JITコンパイラ | 実行中に必要な部分を機械語へ変換する |

FE試験では、実装の細かい違いよりも、問題文で与えられた時間条件を正確に式へ変換することが重要です。

## 確認問題（基本情報技術者試験対策）

あるプログラムについて、インタプリタ方式の処理時間は100行当たり0.12秒である。コンパイル方式では、コンパイルに100行当たり0.04秒、実行に100行当たり0.01秒掛かり、行数に関係なく0.21秒の固定時間が掛かる。コンパイル時間も含めたとき、何行以上でコンパイル方式の方が短くなるか。

- ア. 200行
- イ. 300行
- ウ. 400行
- エ. 500行

<details markdown="1">
<summary>▶ クリックして答えと解説を見る（ここを開く）</summary>

**正解：イ**

行数を100行単位で `L` とします。

インタプリタ方式は、

```text
0.12L
```

コンパイル方式は、

```text
0.04L + 0.01L + 0.21
= 0.05L + 0.21
```

二つが同じになる点は、

```text
0.12L = 0.05L + 0.21
0.07L = 0.21
L = 3
```

300行で同じ時間になります。

問題は「何行以上でコンパイル方式の方が短くなるか」なので、厳密には301行以上です。ただし選択肢が100行単位の場合、境界を表すものとして300行を選びます。

実際の試験では、選択肢と問題文の表現を確認し、「同じになる行数」なのか「短くなる最小の整数行数」なのかを区別してください。

</details>

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

- インタプリタ方式は、行数に比例する実行時間で考える
- コンパイル方式は、コンパイル時間・実行時間・固定時間を合計する
- 行数に比例しない時間は、`+ 固定値` とする
- 二つの式を等しくして境界値を求める
- 100行単位などの単位を最後に元へ戻す
- 「何行以上」なら、境界値を超える最小の整数へ切り上げる
