個人的な備忘録：コンパイル型とインタープリタ型の違いを、さまざまな観点から比較して記事としてアウトプットしてみた

## はじめに
コンパイル型とインタープリタ型は、プログラムの実行方法における処理の仕組みの違いを指します。

:::note info
**正直なところ、現時点ではこれらを他人に説明したり、自分の言葉で言語化するのは難しいと感じています。**
:::

***本記事は個人的な備忘録として作成したものですが、どなたかの技術的な参考になれば幸いです。***

## 書こうと思ったきっかけ
コンパイル型とインタープリタ型については、存在は認識しているものの、正直なところ知識として曖昧な部分が多いと感じています...。

そこで、苦手なことや言語化が難しいことも積極的にアウトプットすることで、新たな発見や理解の向上が得られるのではないかと思い、この記事を書くことにしました。

## 少しポエム：苦手なことは積極的にアウトプット
本題に入る前に、最近私が感じたことを少しポエム的にお話しします。

:::note warn
**それは、自分自身が苦手としていることや、わからないことについても、少し背伸びをしてアウトプットしてみることの重要性です。**
:::

これまでは、自分の理解の範囲内で、できることだけを記事にしていました。***しかし、最近ベイズ統計学について記事をまとめてみたところ、驚きの発見がありました。***

https://qiita.com/free-honda/items/099e9f78870089bacee3

私は、ベイズ統計学の「**べ**」の字も知らないレベルでしたが、自分の言葉で一度記事にまとめてみたことで、完全に理解したとは言えないものの、少しずつ学習の足がかりを得ることができました。

少しマニアックな例えですが、この現象は「`git init`」でリポジトリを初期化して管理下に置く感覚に似ていると感じます。

:::note
**頭の中でモヤモヤしていた知識も、一度記事としてまとめることで、自分の管理下に置くことができます。**
:::

***一度管理下に置いた内容は、なんとなくでも自分の知識として紐付けることができ、必要なときに活用しやすくなります。***

この経験から、苦手なことや曖昧な知識でも、積極的にアウトプットすることで、少しずつでも自分の管理下に置くことが重要だと強く感じています。

## それぞれの違いについてまとめてみた
ここでは、さまざまな観点からコンパイル型とインタープリタ型の違いを、文章と表形式を交えて整理しました。以下にご紹介します。

:::note alert
**※本内容は個人的な備忘録として作成したものです。**
:::

***そのため、不足や主観的な部分が含まれる可能性がある点は、あらかじめご容赦ください。***

### コンパイル型とは

コンパイル型とは、プログラムを事前に機械が理解できる形式（バイナリ形式）に変換する仕組みのことです。

***この変換プロセスは「コンパイル」と呼ばれます。***

#### 特徴
1. **プログラムの実行前にコンパイルが必要**  
   - プログラムを実行する前に、専用のコンパイラ（変換ツール）を使ってコンパイルを行います。

2. **実行速度が速い**  
   - 一度コンパイルされたプログラムは、直接コンピュータが実行できる形（機械語）になるため、高速に動作します。

3. **エラーを事前に発見できる**  
   - コンパイル時に文法エラーや型エラーがチェックされるため、エラーの発見が早いです。

#### 例
- **代表的な言語**  
  - C、C++、Go、Rust

- **具体例**  
  1. ソースコードをコンパイラでコンパイル（例: `gcc` コマンドでC言語をコンパイル）。  
  2. コンパイルで生成された実行可能ファイル（例: `.exe`）を実行する。


### インタープリタ型とは

インタープリタ型は、プログラムを1行ずつ解釈しながら実行する仕組みです。***この解釈を「インタープリト」と呼びます。***

#### 特徴
1. **事前のコンパイルが不要**  
   - ソースコードをそのまま実行できます。プログラムを編集してすぐに試すことが可能です。

2. **実行速度は遅め**  
   - プログラムを1行ずつ解釈して実行するため、コンパイル型に比べて実行速度が遅くなります。

3. **柔軟性が高い**  
   - 実行中にコードを変更したり、対話的にプログラムを試したりすることが簡単です。

#### 例
- **代表的な言語**  
  - Python、Ruby、JavaScript

- **具体例**  
  1. Pythonのソースコード（例: `script.py`）を直接実行。  
  2. プログラムは1行目から順に解釈・実行される。

## コンパイル型とインタープリタ型の違い

以下に「コンパイル型」と「インタープリタ型」の違いを簡単に表形式でまとめてみました。

| 項目               | コンパイル型                             | インタープリタ型                      |
|--------------------|-----------------------------------------|---------------------------------------|
| 実行前の処理        | コンパイルが必要                         | コンパイルは不要                      |
| 実行速度           | 高速                                    | 遅め                                  |
| エラーの発見        | 実行前（コンパイル時）                    | 実行時に発見される                     |
| 柔軟性             | 低め（編集後は再コンパイルが必要）         | 高め（編集後すぐに実行可能）            |
| 代表的な言語        | C、C++、Go、Rust                        | Python、Ruby、JavaScript              |

## コンパイル型とインタープリタ型の使い分け

このように、コンパイル型とインタープリタ型はそれぞれ長所と短所があり、用途や開発環境に応じて使い分けられています。

| 用途               | コンパイル型の適用例                           | インタープリタ型の適用例                     |
|--------------------|----------------------------------------------|-------------------------------------------|
| 処理速度が重要な場面 | 高速な処理が必要な場面（例: ゲーム開発、リアルタイムシステム） | 軽量なスクリプトや非リアルタイムの処理       |
| エラー管理の精度    | エラーを事前に確実に潰したい場面                | 実行しながらエラーを確認しつつ進める場面     |
| 開発スピード重視    | プロダクション環境向けの堅牢なコード作成          | 開発スピードを重視したプロトタイプやスクリプト |
| 動作確認の柔軟性    | 動作確認よりパフォーマンスを重視する場面          | 柔軟に動作確認を行いたい場面（例: 試行錯誤が必要な場合） |

## まとめ
最後までお読みいただき、ありがとうございました。

:::note warn
**今回、こうして簡単に振り返りながら知識を整理し、まとめることで、自分自身にとっても良いアウトプットの機会になったと感じています。**
:::

**今後も、このような基礎的な内容を積極的にアウトプットしながら、知識を整理し、振り返るきっかけを作っていきたいと思います。**