【初心者必見】コンパイラとは?インタプリタとの違いも解説

コンパイラについて調べたけどよく分からない
コンパイラとインタプリタの違いって何?

プログラミングを学習している方の中には、このように感じている方も多いのではないでしょうか?普段プログラミング時にコンパイラについて意識する機会が少なく、どういう意味や使われ方をしているのか、イメージしづらい方も多いでしょう。

そこで、今回はコンパイラについて、以下の内容で分かりやすく解説していきます。

  • コンパイラとは
  • インタプリタとコンパイラの違いとは
  • インタプリタとコンパイラのメリット
  • インタプリタとコンパイラ言語の例

この記事を読むことで、プログラミング言語に関する理解も深まりますので、ぜひ参考にしてみてくださいね。

コンパイラとは

そもそも、コンパイラとは何でしょうか?コンパイラについて簡単に説明すると「人間が分かるコードをコンピュータが理解できるように翻訳するもの」となります。もう少し詳しく解説していきます。

まず人間が分かるコードとは、下図のようなプログラムが記述されたソースコードを指します。

画像:ソースコードの例

しかしこのソースコードのままでは、コンピュータがプログラムを処理することができません。なぜなら、コンピュータはバイナリコードと呼ばれる言語しか理解できないからです。

バイナリコードとは、0と1だけで構成された数字の羅列。例えば「SAMURAI」というアルファベットのままではコンピュータが理解できないので、バイナリコードに変換する必要があります。では「SAMURAI」という文字を変換するとどうなるかと言うと、「01010011 01000001 01001101 01010101 01010010 01000001 01001001」のようになるのです。

このように人間が分かる文字をコンピュータが分かるように変換しているのが、コンパイラです。ちなみに他の文字がどのようにバイナリ変換されるか知りたい方は「バイナリ変換・逆変換」のサイトをぜひ確認してみてくださいね。

引用元:バイナリ変換・逆変換 https://rakko.tools/tools/74/

コンパイラとインタプリタの違い

次に、コンパイラとインタプリタの違いについて説明していきます。コンパイラとインタプリタは役割が似ているのでよく比較されるので、ここで理解しておきましょう。

コンパイラは一括翻訳(いっかつほんやく)型

まずは、コンパイラの特徴について解説していきます。先程、コンパイラは人間が分かるソースコードをコンピュータが分かるバイナリコードに翻訳するものだと説明しました。

コンパイラは、ソースコードの全てをまとめて翻訳していきます。役割としては、英語で書かれた本を全てまとめて日本語に翻訳する翻訳家のようなもの。この特徴は一括翻訳型と呼ばれ、下図のように赤枠部分のコードをまとめてバイナリコードに翻訳するような流れになります。

画像:コンパイラの処理

インタプリタは逐次翻訳(ちくじほんやく)型

次に、インタプリタの特徴について解説していきます。コンパイラが翻訳家だとしたら、インタプリタは同時通訳者。インタプリタは、ソースコードを1行1行バイナリコードに翻訳するという特徴があります。この特徴は逐次翻訳型と呼ばれ、下図の赤枠部分を順番に翻訳していくような流れになります。

画像:インタプリタの処理

このようにコンパイラとインタプリタはバイナリコードに翻訳する役割は同じでも、訳し方が異なるということが理解できるでしょう。

コンパイラのメリット・デメリット

次に、コンパイラのメリットとデメリットについて説明していきます。

コンパイラのメリット

実行速度が速い

コンパイラの1番のメリットは、プログラムを実行する速度が速いことです。これは、コンパイラがソースコードをまとめてバイナリコードに訳してからプログラムを実行することが理由。

これは英語の本を日本語に訳して読むという行動に例えると分かりやすいです。インタプリタは、英語の本を1行1行翻訳して読むので時間がかかります。一方コンパイラは英語の本の内容を全て日本語に訳してから読み進めるので、インタプリタに比べて本を読むスピードは早くなります。

コンパイラのデメリット

デバッグしにくい

コンパイラのデメリットは、デバッグがしにくいこと。デバッグとは、プログラムの中のエラー箇所を見つけ修正する作業のことを指します。

コンパイラはソースコードをまとめて翻訳するので、途中でエラーがあっても処理が止まることはありません。そのためどこでエラーが起きているか見つけにくいというデメリットがあります。

実行に手間がかかる

プログラムを実行するにはまずコンパイルをする必要があるので、手間と時間がかかることもデメリットとして挙げられます。インタプリタ型と比べて、プログラムを実行するまでの手順が増えてしまうのです。

インタプリタのメリット・デメリット

次にインタプリタのメリットとデメリットについて解説していきます。

インタプリタのメリット

デバッグしやすい

インタプリタのメリットは、デバッグしやすいことが挙げられます。これはコンパイラとは違いソースコードを1行1行翻訳するという特徴があるからです。

コンパイラのように全てのソースコードを翻訳するまでエラーが出ないということはなく、コードに文法ミスや誤字があるとプログラムがストップするようになっています。(下図参照)

画像:エラー参考例

そのためエラー箇所の特定がしやすく、デバッグしやすいのが特徴です。

プログラムをすぐに実行できる

2つ目のメリットは、プログラムをすぐに実行できる点。コンパイラのように全てのコードをまとめて実行するのではなく1行ずつ行うので、プログラムの動作をすぐに確かめられます

例えば下図のようにコマンドプロンプト(ターミナル)上で「Board.all」と実行したとします。これはユーザーが投稿した記事の一覧情報という意味になります。実行すると、2つ目の赤枠のようにユーザー情報や記事のタイトルなどあらゆる情報を取得できます。

画像:コマンドプロンプト(ターミナル)実行画面

プログラミングにおいて、自分が期待した値が返ってくるか、その都度確認する作業は非常に大切です。

インタプリタのデメリット

実行速度が遅い

コンパイラのメリットの項目で説明しましたが、インタプリタはプログラミングの実行速度が遅いというデメリットを持ちます。これは、ソースコードを1行1行訳しながらプログラムを実行していくことが理由です。

代表的なコンパイラ言語とインタプリタ言語

プログラミング言語は、コンパイラ言語とインタプリタ言語に分類されます。ここからはコンパイラとインタプリタの特徴を持った代表的な言語について、それぞれ解説していきます。

コンパイラ言語

Java

コンパイラ言語として挙げられる代表的な言語が、Java。Javaの特徴は、WindowsやOSなど様々なマシンで動かせる点です。またJavaを使うと、Webアプリケーションに限らずスマートフォンアプリなど幅広い用途で使えるのが特徴です。

Go

2つ目は、GoというGoogleが2009年に作った比較的新しい言語です。TIOBEの「2020年のプログラミング言語ランキング」では12位にランクインしており、歴史が浅いながらも近年人気が高まっています。

また公式ページには「A Tour of Go」と呼ばれるチュートリアルサイトが用意されており、実際にコーディングを行いながら使い方を覚えられるので、プログラミング初心者にもおすすめの言語となります。

インタプリタ言語

次に、インタプリタ言語の例を紹介していきます。

Ruby

Rubyは日本人のまつもとゆきひろ氏によって開発された言語で、コードが分かりやすく、プログラミング初心者でも習得しやすいのが特徴です。またRuby on Railsというフレームワークを使えば、短期間で効率的にWebアプリケーションを開発できるので、多くの企業でも採用されています。

Javascript

2つ目の例として挙げられるのは、Javascript。JavaScriptはクライアントサイドの言語で、サーバーから受け取ったデータをブラウザで処理するために使われるものを指します。

最近ではReactなどのSPAを可能にするフレームワークの登場で、JavaScriptは人気の言語となっています。SPAとは、Single Page Applicationの略で、ページの遷移がなく、1つのページでコンテンツを切り替えることができるアプリケーションを指します。

まとめ

ここまでコンパイラとインタプリタについて解説してきました。

  • コンピュータはバイナリコードしか理解できない
  • コンパイラは実行速度が速いが、デバッグしにくい
  • インタプリタはデバッグしやすいが、実行速度が遅い

この記事を読むことで、コンパイラについての理解が深まったのではないでしょうか?また、コンパイラとインタプリタのメリットやデメリットについても理解できたでしょう。

最後に本記事をまとめておきますので、ぜひ参考にしてみてくださいね。

あなただけの学習プランでプログラミングを最短習得



プログラミング学んで今の生活を変えたい
でも、何から始めればいいか分からない
どうすれば効率よくプログラミングを学べるの?
プログラミングに対して、このような悩みはありませんか?

プログラミングを最短距離で学ぶには、目的にあわせた最適な学習プランが必要です。しかし、目的にあわせて最適な学習プランを立てるのは、なかなか難しいですよね。

このような悩みをなくすため、侍エンジニアではあなたの目的に合わせたオーダーメイドのカリキュラムを提供しています。まずは無料カウンセリングであなたの目的をお聞かせください。

「あなたにとって最適なカリキュラムはなにか」プロのコンサルタントがお答えいたします。

無料体験レッスンを予約する

書いた人

侍エンジニア編集部

侍エンジニアは「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら