- 更新日: 2020年10月15日
- 公開日: 2020年10月13日
コンパイラとインタプリタとは?現役エンジニアが分かりやすく解説
プログラミング学習をしている方の中には、「コンパイラ」や「インタプリタ」という言葉を聞いたことがある人もいるかもしれません。そこで、今回はコンパイラとインタプリタについて、以下の内容で分かりやすく解説していきます。
①コンパイラとインタプリタとは?
②コンパイラとインタプリタの違いとは
③コンパイラとインタプリタのメリット・デメリット
④コンパイラ型言語とインタプリタ型言語の例
コンパイラとインタプリタについて理解しておけば、プログラミング言語が動く仕組みについても学べるので、ぜひ本記事を参考にしてください。
- コンパイラとは
- コンパイラとインタプリタの違い
- コンパイラは翻訳家
- インタプリタは同時通訳者
- コンパイラのメリット・デメリット
- コンパイラのメリット プログラムの実行速度が早い
- コンパイラのデメリット① プログラム実行に手間がかかる
- コンパイラのデメリット② エラーを見つけにくい
- インタプリタのメリット・デメリット
- インタプリタのメリット① プログラムをすぐに実行できる
- インタプリタのメリット② エラーを見つけやすい
- インタプリタのデメリット 実行速度が遅い
- コンパイラ・インタプリタの特徴のまとめ
- コンパイラ型言語の例
- コンパイラ型言語の例① Go
- コンパイラ型言語の例② Java
- コンパイラ型言語の例③ C言語
- インタプリタ型言語の例
- インタプリタ型言語の例① Ruby
- インタプリタ型言語の例② Javascript
- インタプリタ型言語の例③ Python
- まとめ
コンパイラとは
まずはコンパイラについて解説していきます。コンパイラを簡単に説明すると「人間が理解できる言葉をコンピュータが理解できる言葉に翻訳するもの」となります。
人間が理解できる言葉とは、下画像のようなHTMLやCSS、Rubyなどのソースコードを指します。
画像:ソースコード(人間が理解できる言葉)
このソースコードを処理するのはコンピュータです。しかしこのソースコードは人間が理解するための言語なので、コンピュータは理解できず処理ができません。
そのためソースコードをコンピュータが理解できる言葉に変換する必要があります。このような言葉を「バイナリコード」と呼んでいます。
バイナリコードとは「0」と「1」だけで構成された数字の羅列を指します。例えば「CODECAMP」という文字は、バイナリコードに変換すると「01000011 01001111 01000100 01000101 01000011 01000001 01001101 01010000」になります。
このように人間が理解できるソースコードをバイナリコードに変換するのが「コンパイラ」や「インタプリタ」と呼ばれるものなのです。
ちなみに「バイナリ変換・逆変換」のサイトを使えば、テキストからバイナリコードに変換できるのでぜひ参考にしてください。
出典:バイナリ変換・逆変換
コンパイラとインタプリタの違い
ここまででコンパイラとインタプリタはソースコードをコンピュータが理解できるバイナリコードに変換するものだと説明してきました。実はコンパイラとインタプリタでバイナリコードへの変換方法が異なります。
コンパイラは翻訳家
まずはコンパイラの特徴について解説していきます。 コンパイラはソースコードの全てをまとめてバイナリコードに翻訳します。
例えるならば、英語で書かれた本を全てまとめて日本語に翻訳する「翻訳家」のような役割です。この特徴はプログラミング用語で「一括翻訳型(いっかつほんやくがた)」と呼ばれています。
下図のようなコードをまとめてバイナリコードに翻訳するような流れです。
画像:コンパイラの処理例
インタプリタは同時通訳者
コンパイラが翻訳家だとしたら、インタプリタは同時通訳者と言えます。なぜならインタプリタはソースコードを1行ずつバイナリコードに翻訳するという特徴があるからです。
この特徴を逐次翻訳型(ちくじほんやくがた)と呼びます。下図コードを1行ずつ順番に翻訳していくような流れです。
画像:インタプリタの処理例
コンパイラとインタプリタはバイナリコードに変換する働きは同じでも、その方法が異なります。次の章ではこの方法によって、どのようなメリット・デメリットが生まれるのかについて解説していきます。
コンパイラのメリット・デメリット
まずはコンパイラのメリットとデメリットについて説明していきます。
コンパイラのメリット プログラムの実行速度が早い
コンパイラのメリットとしてプログラムを実行する速度が速いことが挙げられます。コンパイラがソースコードを訳す際にまとめて、バイナリコードに変換するため実行速度に時間がかかりません。
これは英語の本を日本語に訳して読むという行動に例えると分かりやすいでしょう。インタプリタは、英語の文章を1行1行翻訳して読むので時間がかかります。
一方コンパイラは英語の本の内容を全て日本語に訳してから読み進めるので、インタプリタに比べて本を読むスピードは早くなります。
コンパイラのデメリット① プログラム実行に手間がかかる
実行速度が早いというメリットもあれば、デメリットもあります。 コンパイル(バイナリコードへ翻訳)をしてからプログラムを実行する必要があるため、手間と時間がかかる点です。
例えば、ソースコード①というものがあり、そのプログラムを実行したいとします。
コンパイラの場合、ソースコード①をコンパイルして、バイナリコードに変換されたファイル①を作成し、そのファイルを使ってプログラムを実行します。
◻︎コンパイラの処理の流れ
ソースコード① → コンパイル → ファイル① → プログラム実行
このような処理の流れをしているので、コンパイラはプログラムを実行するまでの手間がかかります。
コンパイラのデメリット② エラーを見つけにくい
2つ目のデメリットとして、デバッグする際にエラーを見つけにくいことが挙げられます。デバッグとはプログラムの中のエラー箇所を見つけて修正する作業を指します。
コンパイラはソースコードをまとめて翻訳するので、コード内で誤記がありエラーが起きても処理が途中で止まることはありません。そのためどこでエラーが起きたのか見つけにくいというデメリットがあります。
インタプリタのメリット・デメリット
次にインタプリタのメリットとデメリットについて解説していきます。コンパイラのメリットとデメリットの逆だと考えればOKです。
インタプリタのメリット① プログラムをすぐに実行できる
2つ目のメリットしてはプログラムをすぐに実行できる点です。コンパイラのように全てのコードをまとめて実行するのではなく1行ずつ行うので、プログラムの動作をすぐに確かめられます。
プログラミングにおいて、自分が期待した値が返ってくるかその都度確認する作業は非常に大切です。
インタプリタのメリット② エラーを見つけやすい
インタプリタのメリットとしてデバッグする際にエラーを見つけやすいことが挙げられます。これはコンパイラとは違いソースコードを1行1行翻訳するという特徴があるためです。
コンパイラのように「すべてのソースコードを翻訳するまでエラーが出ない」ということはありません。
インタプリタはコードに文法ミスや誤字があるとプログラムがストップするようになっています。そのためエラー箇所の特定がしやすくデバッグしやすいのが特徴です。
インタプリタのデメリット 実行速度が遅い
コンパイラのメリットの項目で説明しましたが、インタプリタはプログラミングの実行速度が遅いというデメリットを持ちます。これはソースコードを一行ずつ訳しながらプログラムを実行していくためです。
コンパイラ・インタプリタの特徴のまとめ
ここまで説明してきたコンパイラとインタプリタのメリット・デメリットを表でまとめておきました。どちらかが優れているという訳ではなく、使用される場面によって向き不向きがあることを理解しておきましょう。
次の章ではどのプログラミング言語がコンパイラ型もしくはインタプリタ型に当てはまるかを簡単に解説していきます。皆さんが学んでいる言語についてより理解が深まるかと思いますので、ぜひ参考にしてみてくださいね。
コンパイラ型言語の例
プログラミング言語はコンパイラ言語とインタプリタ言語に分類されます。
コンパイラ型言語の例① Go
1つ目の例として挙げられるのがGo言語です。
GoはGoogleが2009年に作った比較的新しい言語で近年人気が高まっています。プログラミング言語の人気度を調査しているTIOBEによれば、『2020年のプログラミング言語ランキング』では14位にランクインしており、近年人気が高まっていることが分かります。
また公式ページも充実しており、A Tour of Goと呼ばれるチュートリアルサイトで使い方を覚えることができます。
まだまだ日本語での情報は少ないですが、今後参考書や解説記事が増えていき、プログラミング初心者が学びやすい言語になっていくでしょう。
コンパイラ型言語の例② Java
2つ目の例としてJavaが挙げられます。
プログラミング言語によっては、Macでしか動かせないなどの制限がかかる場合もありますが、JavaはWindowsやOSなど様々なマシンで動かせる点がメリットです。Webアプリケーションやスマートフォンアプリなど幅広い用途で使用されています。
また先程紹介したTIOBEのランキングでC言語に続き2位にランクインしており、需要が高い言語です。
コンパイラ型言語の例③ C言語
C言語もコンパイラ型言語となります。TIOBEのランキングでも1位にランクインしており、非常に人気が高いです。
またC言語は1990年頃に開発された深い歴史を持ったプログラミング言語で、その他の言語に影響を与えてきました。特に今人気のPHPやPythonなどインタプリタ型言語にもC言語の概念が反映されています。
C言語が使用されているものとして、企業のコストや社員情報の管理を行うソフトウェアが例として挙げられます。またゲーム開発でも使用されており、非常に汎用性の高い言語であると言えます。
インタプリタ型言語の例
インタプリタ型言語の例① Ruby
次にインタプリタ言語の例を紹介していきます。
1つ目がRubyです。Rubyは日本人のまつもとゆきひろ氏によって開発された言語で、分かりやすいコードで書けるので、プログラミング初心者にもオススメの言語です。
オブジェクト指向という概念で書かれた言語のため、保守性や可読性に優れた言語とも言えます。またRuby on Railsというフレームワークを使えば短期間で効率的に、TwitterやInstagramなどのWebアプリケーションを開発できます。
特にベンチャー企業など割と新しい企業でRubyは採用されています。
インタプリタ型言語の例② Javascript
2つ目の例としてJavascriptが挙げられます。JavaScriptはクライアントサイドの言語で、サーバーから受け取ったデータをブラウザで処理するために使われるものを指します。
Vue.jsやReactなどのフレームワークの登場により、Javascriptの人気が高まっています。これらのフレームワークがSPA(エスピーエー)を可能にすることが理由です。
SPAとは、Single Page Applicationの略で、ページの遷移がなく、1つのページでコンテンツを切り替えることができるアプリケーションを指します。
これまでのWebサイトやWebアプリケーションは、ボタンを押して次のページに行く際に画面が一瞬白くなったり、ローディングに時間がかかることが問題でした。
しかしSPAの技術を使うことにより滑らかな画面の切り替えが可能になるため、非常にユーザーが使いやすいWebサービスを作成することができます。例えばGoogle MapもSPAの技術が使われています。
インタプリタ型言語の例③ Python
3つ目の例としてPythonが挙げられます。Pythonとは1991年にオランダ人のグイド・ヴァンロッサム氏によって開発されたプログラミング言語で、機械学習やデータの分析ができるため近年非常に人気が高まっています。
PythonもRubyなどと同じくオブジェクト指向で書かれた言語で、プログラミング初心者でも習得しやすいのが特徴です。
Django(ジャンゴ)というフレームワークを使えば、管理画面やユーザー認証システムを備えたWebアプリケーションを作成することも可能です。またWeb上の情報を自動で取得するWebスクレイピングや画像認識などもPythonを使うと実現できます。
\Webサイト担当者としてのスキルが身に付く/
まとめ
ここまでコンパイラとインタプリタについて解説してきました。本記事で解説したことを理解しておくことで、より皆さんが学んでいる言語について理解が深まるかと思います。
- この記事を書いた人
- ヤマモト