コンパイラとインタプリタの違いは?言語の違いを分かりやすく解説!

- 「コンパイラ」と「インタプリタ」とは何かを知りたい方!
- コンパイラ言語とインタプリタ言語とは何かを知りたい方!
- それぞれの言語の特徴やメリット・デメリットを知りたい方!
- それぞれの代表的な言語を知りたい方!

今回は、「コンパイラ言語」と「インタプリタ言語」についての解説記事になります。
これら二つは「プログラムをどう実行していくか?」という実行型についての言語の定義で、よく対比される関係にあります。
名称 | コードの実行方法 |
---|---|
コンパイラ言語 | 一度すべてのコードを機械語に翻訳してから実行する |
インタプリタ言語 | コードを一行一行機械語に翻訳して実行していく |
また、これらの言語には開発においてのメリットデメリットが存在します。
名称 | メリット | デメリット |
---|---|---|
コンパイラ言語 | 実行速度が速い | 実行するまでがめんどう |
インタプリタ言語 | コードの修正が楽 | 実行速度が遅い |
それでは詳しく解説していきます。


【前提】プログラミング言語をコンピュータは直接理解できない
まず前提として、プログラミング言語は人間が機械語を生成するために用いるツールです。
なので、これらのプログラミング言語で書かれたコードは、
人間にはある程度分かりやすくても、コンピュータには全く理解できない文字列なのです。
コンピュータが理解できるのは、「0」と「1」で書かれた「機械語」と呼ばれるものです。
プログラミング言語で書かれたコードも、最終的には機械語に翻訳されて実行されています。

最終的には機械語にしてあげないといけないんだね。
そして、今回の解説する「コンパイラ」と「インタプリタ」はどちらも、
「翻訳の役割を担うソフトウェア」です。
つまり、「コンパイラ」と「インタプリタ」は、
「プログラミング言語で書かれたプログラムを、コンピュータがそのまま実行できる機械語に翻訳するためのツール」
ということです。
これらどちらを使うかによって、コンパイラ言語、インタプリタ言語と呼ばれるのです。
余談ですが、「コンパイラ」「インタプリタ」とは別に、「アセンブラ」と呼ばれる翻訳機を使うプログラミング言語も存在します。
これが「アセンブリ言語」と呼ばれる言語です。

コンパイラ言語とインタプリタ言語の違い
コンパイラ言語とインタプリタ言語の違いは、プログラムの実行方法にあります。
コンパイラ言語は、プログラミング言語で書かれたコードを「コンパイル」という処理で実行可能な機械語に一括翻訳して、その機械語を実行することでプログラムを機能させます。
一方、インタプリタ言語は、プログラミング言語で書かれたコードを一行読んでは機械語に翻訳し実行、また一行読んでは翻訳し実行という逐次翻訳の手法を取ります。
名称 | コードの実行方法 |
---|---|
コンパイラ言語 | 一度すべてのコードを機械語に翻訳してから実行する |
インタプリタ言語 | コードを一行一行機械語に翻訳して実行していく |
どのタイミングで機械語に翻訳して実行するかというのが、この2つの言語を知るためのポイントになってきます。

コンパイラ言語の仕組み「一括翻訳型」
プログラミング言語で書かれたプログラム(ソースコード)を、コンピュータが直接的に実行できるコード(機械語)に全て翻訳してからプログラムを実行するプログラミング言語です。

こちらの例はC++という言語を使います。
#include <iostream>
using namespace std;
int factorial(int number)
{
int result = 1;
for (int i = 1; i <= number; i++)
result *= i;
return result;
}
int main()
{
cout << "Hello, World!!" << endl;
cout << "5の階乗=" << factorial(5) << endl;
}
このようなソースコードを一度コンパイラというものに通します。(このことをコンパイルと呼ぶ)
コンパイラとは、このソースコードを機械語に翻訳してくれるツールです。
コンパイルをすると、このようなファイルが生成されます。

このファイルこそ、コンパイラがソースコードから生成した機械語のプログラムなのです。
先ほどのソースコードの原型はなく、「0」「1」の羅列というコンピュータがそのまま実行可能なデータになっています。
(VisualStudioなどの総合開発環境に任せている場合でも、実はこのようなファイルが生成されています。)
このファイルを黒いコンソール画面などで実行すれば結果が返ってきます。
Hello, World!!
5の階乗=120
これがコンパイラ言語のプログラムの実行方法です。
- プログラムを作成する
- コンパイルする(機械語の実行可能ファイルが生成される)
- 実行可能ファイルを実行する
次は、インタプリタ言語を見ていきましょう。

インタプリタ言語の仕組み「逐次翻訳型」
プログラミング言語で書かれたプログラム(ソースコード)を、コンピュータが直接的に実行できるコード(機械語)に逐次翻訳しながらプログラムを実行していくプログラミング言語です。

例としてPythonの対話型インタプリタをあげましょう。
↓のように問いに対して1対1で答えが返ってきます。
>>> print ("Hello, World!!")
Hello, World!!
>>> def factorial(num) :
... result = 1
... for i in range(num):
... result *= i + 1
... return result
>>> print("5の階乗=" + str(factorial(5)))
5の階乗=120
このようにひとつコードを打って実行。
もうひとつコードを打って実行とできるのがインタプリタ言語の特徴です。
これがインタプリタ言語のプログラムの実行方法です。
- プログラムを作成する
- 実行する(一行一行機械語に翻訳されてその場で実行)
このようにコンパイラ言語とインタプリタ言語の違いは、「一括で全て機械語に翻訳するか」「一回一回機械語に翻訳して実行していくか」という点です。
この違いが、プログラミングにおいてどのような影響を及ぼすのでしょうか?
コンパイラ言語のメリットとデメリット
実行速度が速い
コンパイラ言語は、一度すべてのソースコードを機械語に直しておくため、インタプリタ言語に比べて実行速度が速いです。
わかりやすい例えでいうと、
- 日本語に翻訳された本を読むか
- 英語本を一行一行日本語に翻訳しながら読むか
この違いです。明らかに前者のほうが読むスピードは速いですよね。
実行速度が重要になる「科学技術計算のライブラリ」や「大規模システムの開発」などにはもってこいでしょう。
いちいちコンパイルが面倒くさい
プログラムを実行するために一回一回コンパイルが必要なため、プログラムを途中で確認することが面倒という点があげられます。
いきなりエラーが何か所にも出て大混乱!なんてこともあります。
インタプリタ言語のメリットとデメリット
プログラムをすぐに実行できる
インタプリタ言語は、プログラムを一行一行すぐに実行できるため、コンパイラ言語に比べプログラムの確認・修正が行いやすいです。
あのいちいちコンパイルする時間が省けるのは大きなメリットです。
サクッと開発ができる生産性が売りですね。
実行速度が比較的遅い
コンパイラ言語と違い、プログラムを実行するために一回一回機械語に翻訳するため、その時間分実行速度が遅くなります。
その結果、コンパイラ言語より実行速度が劣るという点があげられます。
ですが、今はそこまで差がないので、ゴリゴリに実行速度を出したい場合以外は気にしなくてもよいでしょう。

結局どっちがいいか?
コンパイラ言語とインタプリタ言語はどっちがいいかと聞かれたら私はこう答えます。
「状況によって変わる」
これがベストアンサーだと思います。
その理由は、コンパイラ言語のほうが活躍する分野もあれば、インタプリタ言語のほうが活躍する分野もあるからです。
例えば、高速なアルゴリズムを組んで処理をできるだけ速くしたいのならば、コンパイラ言語のほうが高速でいいと思いますし、小規模プロジェクトで開発スピードが命ならばインタプリタ言語のほうが生産性も高くていいと思います。
そんなこんなで、適する場面は変わってくるわけで、あなたがどの言語を学ぼうか迷っているならば、まず自分が何をやりたいかを見つけることが大切です。
その業界で多く使われている言語はそれなりの理由があります。そしたらコンパイラかインタプリタかなんて言うほど関係ありません。
実は「コンパイラ言語」と「インタプリタ言語」の定義は曖昧
実は、コンパイラ言語とインタプリタ言語という単語は便宜上このように呼ばれているだけであって、厳密には定義が存在しないといってもよいでしょう。
というのも、プログラミング言語によってはコンパイル方式でもインタプリタ方式でも実行することができるからです。
そしたら、「コンパイラ言語なの?」「インタプリタ言語なの?」ってなりますよね。
なので、主に使われる方式によって呼ばれ方が決まっているという解釈でよいかと思います。
解釈としては、以下のようになります。
コンパイラ言語:「主に」コンパイル方式の実行方法をとるプログラミング言語
インタプリタ言語:「主に」インタプリタ方式の実行方法をとるプログラミング言語
インタプリタ言語とコンパイラ言語の代表例
インタプリタ言語やコンパイラ言語の代表例としていくつかプログラミング言語を挙げてみます。
まずは、インタプリタ言語。
- Webサイト開発に欠かせない「JavaScript」
- 人工知能(AI)の分野に強い「Python」
- 日本人が開発したWeb系に強い「Ruby」
- 同じくWeb系に強い「PHP」
次は、コンパイラ言語。
- 業務システムやAndroidアプリ開発に使われる「Java」
- 3D/VR/Windowsなどに強い「C#」
- 歴史が長く実行速度がとても速い「C/C++」
- 処理速度の速いサーバーサイド言語「Go」
- 実行速度/並行性/安全性を兼ね備えた「Rust」

2020年の将来性抜群のプログラミング言語TOP3を紹介!


プログラミング言語は、新しい言語が生まれては使われなくなっていく、そんな移り変わりのあるものです。
初めてプログラミングを学びたいのであれば、できるだけこれからの需要が高い言語を選びたいですよね。
そんな、これからプログラミングを学んでみたいという方に、おすすめの記事です。
最新のプログラミング言語の人気ランキングを紹介!


人気の言語には、人気になる理由があります。
例えば、「〇〇が簡単にできる」「文法がきれいで使いやすい」などといった理由が挙げられるでしょう。
そういった特徴に焦点を当てて、人気ランキングを見ていきましょう!
学びたい言語に迷っている方にもおすすめの記事です!
プログラミングを効率的に学んで成功したいなら!


プログラミングを効率的に学ぶにはプログラミングスクールがおすすめです。
少しでもプログラミングスクールに興味があるなら「読まないと損」な記事です!
絶対に評判に騙されてはいけません。
最後に
「コンパイラ言語」と「インタプリタ言語」についてみてきましたが、どうでしょうか。
学習難易度はコンパイラ言語のほうが高いと思います。
私はC言語(コンパイラ言語)から学びましたが、コンパイルの際にエラーがいっぱいでて困ることが多々ありました。
それゆえに、多くのことを学べたんですけどね。
はじめにコンパイラ言語を学ぶのも全然いいと思います。
つまづいたときは、学習難易度が比較的低いインタプリタ言語に切り替えるのも手だと思います。
記事を書いて思ったのですが、いまはインタプリタやコンパイラなどと言って区別しなくてもいい時代だと私は思っています。
知っていて損はないですが、いろいろな開発環境があり気にしなくてもいいレベルにまでなってきました。

以上「コンパイラとインタプリタの違いは?言語の違いを分かりやすく解説!」でした!
