💻 プログラミング言語の基礎：コンパイラ言語とインタプリタ言語の違いを徹底解説 

## はじめに
こんにちは！日系SlerでGCPの設計や開発を担当しているKanamiと申します。
皆さんはプログラミング言語ってそもそも何なの？と聞かれたら答えられるでしょうか？プログラミング言語は、コンピュータに命令を伝えるための「言葉」のようなものです。
そして、このプログラミング言語には、大きく分けて2つの種類があることを知っていましたか？それが「コンパイラ言語」と「インタプリタ言語」です！
この記事では、プログラミング初心者の方でも理解できるように、これらの言語の違いや特徴、そしてそれぞれのメリット・デメリットについて、詳しく解説していきます！

## 対象読者
- プログラミング初心者の方
- プログラミング学習やアプリケーション開発を始めているけどイマイチ仕組みが分かっていない方

私自身、最近個人開発でアプリを作ってみたい！と思い手を付け始めているもの、普段の業務ではサーバやネットワークの設計や構築が中心でアプリケーション周りについては全く詳しくありません。
pythonの基礎も学んだのですが、深くまで理解できていないせいか、基本的な部分でつまづいてしまったり、概念が理解できなかったりすることがあります。それは根本的にコンピューターの仕組みを理解していないことが原因ではないかと考えたため、まずは言語の基礎を理解することにしました。

## プログラミング言語の種類：コンパイラ言語とインタプリタ言語 

プログラミング言語は、コンピュータが理解できる形にどのように変換されるかによって、大きく2つの種類に分けられます。

1.  **コンパイラ言語 ⚙️**
2.  **インタプリタ言語 📜**

それぞれ、詳しく見ていきましょう。

### 1. コンパイラ言語：機械語への翻訳と実行 ⚙️

コンパイラ言語は、書いたプログラムをコンピュータが直接理解できる「機械語」🤖に変換（コンパイル）してから実行する言語です。代表的なコンパイラ言語には、C、C++などがあります。

#### コンパイラ言語の仕組み 

1.  **プログラム作成:** まず、人間がCやC++などの言語でプログラムを書きます。
2.  **コンパイル:** 次に、「コンパイラ」という特別なプログラムが、書かれたプログラムを機械語に変換します。🛠️ この変換作業を「コンパイル」と言います。コンパイルされた結果として生成されるのは、コンピュータが直接実行できるファイル（実行ファイル、例えばWindowsでは`.exe`ファイル）です。
3.  **実行:** 生成された実行ファイルを直接実行します。
この時、コンパイル時に機械語に変換されているため、高速に処理が実行されます。💨

#### アセンブリ言語 

コンパイラ言語と密接な関係にあるのが、「アセンブリ言語」です。アセンブリ言語は、機械語とほぼ一対一で対応する言語で、より直接的にハードウェアを制御することができます。しかし、アセンブリ言語は機械語に近いため、人間には理解しづらく、高度な知識が必要になります。

#### メリット 

*   **処理が速い:** コンパイル時に機械語に変換されるため、実行時には変換処理を必要とせず、高速に実行できます。⚡

#### デメリット 

*   **CPU依存:** 機械語はCPU（コンピュータの頭脳🧠）の種類によって異なるため、コンパイルされたプログラムは、特定のCPUでしか実行できません。 例えば、Windowsパソコンでコンパイルしたプログラムは、Macパソコンでは動かないことが多いです。これは「アーキテクチャ」の違いによるものです。 

    **アーキテクチャとは:** CPUの種類や構造のこと。例えば、Intel、ARM、x64、x32など、様々な種類があります。 

### 2. インタプリタ言語：実行時に一行ずつ翻訳 

インタプリタ言語は、書かれたプログラムを、実行時に一行ずつ機械語に翻訳しながら実行する言語です。代表的なインタプリタ言語には、Python、JavaScript（Node.js）、Rubyなどがあります。

#### インタプリタ言語の仕組み 

1.  **プログラム作成:** まず、Pythonなどのインタプリタ言語でプログラムを書きます。✍️
2.  **インタプリタによる実行:** 次に、「インタプリタ」という特別なプログラムが、書かれたプログラムを一行ずつ読み込み、その場で機械語に翻訳しながら実行します。📖➡️🤖

#### メリット 

*   **CPU非依存:** プログラムを実行する時に、インタプリタがその場で機械語に翻訳するため、CPUの種類が異なっても、同じプログラムを実行できます。 

#### デメリット 

*   **処理が遅い:** 実行時に毎回翻訳処理を行うため、コンパイラ言語に比べて処理が遅くなる傾向があります。

:::note info
**実行処理時間の違いについて**💡

スクリプト言語は、各スクリプトファイル(例：print文)などの処理をその都度コンパイルする必要があり、その分CPUを実行する必要があるため処理が遅くなります。
逆に、コンパイラ言語ではexeファイルの実行処理のみになるため、CPU実行回数も一度になり、処理が速くなります。
![mermaid-diagram-2025-01-25-175028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636793/0f63eb9f-bdb9-f252-ba48-b0003eb36af7.png)
:::

## まとめ：コンパイラ言語とインタプリタ言語の違い 📝

| 特徴              | コンパイラ言語                                       | インタプリタ言語                                           |
| :----------------- | :-------------------------------------------------- | :------------------------------------------------------- |
| 変換方法           | コンパイル時に機械語に変換 ⚙️                                 | 実行時に一行ずつ機械語に翻訳 📜                                    |
| 実行速度            | 高速 🚀                                                  | 低速 🐢                                                       |
| CPU依存性           | CPUの種類に依存する（アーキテクチャ依存） 🏢                                    | CPUの種類に依存しない 🌐                                          |
| 代表的な言語        | C, C++, Go, Rustなど ⚙️                                         | Python, JavaScript, Ruby, PHPなど 📜                               |
| 開発のしやすさ       | 開発に手間がかかる場合がある 🛠️                                     | 比較的開発しやすい ✍️                                           |
| 実行ファイルの有無   | コンパイル後に実行ファイルができる 📁                              | 実行ファイルはできない 🚫                                      |

## その他の重要な用語 

*   **コンパイル:** 人間が書いたプログラムを機械語に変換すること。 
*   **バイナリ:** 0と1の羅列で表現されたデータのこと。コンピュータはバイナリ形式のデータしか理解できません。 コンパイラ言語をコンパイルしたときに生成される実行ファイルもバイナリファイルの一種です。
*   **実行ファイル:** コンパイルされたプログラムを実行するためのファイル。Windowsでは`.exe`ファイル、Macでは実行可能なファイルなどがあります。 

## おわりに 🏁

この記事では、コンパイラ言語とインタプリタ言語の違いについて、初心者の方にも分かりやすく解説しました。それぞれの言語には、メリットとデメリットがあり、どのような目的でプログラムを作るかによって、最適な言語は異なります。

この知識が、プログラミング学習の第一歩となることを願っています。
今後もプログラミング初心者向けに記事を書いていこうと思うので、いいねやフォローしてくださると励みになります😊