【プログラミング入門者向け】コンパイラ型言語とは?現役エンジニアが用語解説
コンパイラ言語とは何かについて、TechAcademyのメンター(現役エンジニア)が実際のコードを使用してプログラミング入門者向けに解説します。用語がなかなか理解できない方へ向けて解説します。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
コンパイラ言語とは何かについて、TechAcademyのメンター(現役エンジニア)がプログラミング入門者向けに解説します。
なお本記事は、TechAcademyのオンラインブートキャンプの内容をもとにしています。
今回は、プログラミングに関する内容だね!
どういう内容でしょうか?
コンパイラ言語について詳しく説明していくね!
お願いします!
目次
コンパイラ型言語とは?
パソコンのソフトウェアやスマートフォンのアプリなどのことを「プログラム」と呼びます。プログラムは「プログラミング言語」というもので作成します。
言語といっても日本語や英語のような自然言語ではなく、一定のルールに基づいて書き方などを決めている人工的な言語です。
プログラミング言語は英語をベースにしているものが多く、例えば以下は「Java」というプログラミング言語の記述例です。
System.out.print("Hello!");
プログラミング言語が分からなくても、なんとなく「print」という単語から印刷や表示などを行うことが想像できますね。
このように人間が見て理解できるプログラミング言語で書いた文章を「ソースコード」と呼びます。
このソースコードをコンピューターが実行できるように翻訳したものが「プログラム」です。
実はコンピューターは人間とは違い、数字しか理解できません。
プログラミング言語はあくまで人間がソースコードを書くための言語であり、ソースコードをプログラムとして実行するにはコンピューターが理解できる数字の羅列に「翻訳」する必要があるのです。
プログラミング言語は翻訳の方法により2種類に分けられます。
- コンパイラ型言語:一度に全てのソースコードを翻訳してからプログラムを実行する言語
- インタプリタ型言語:少しずつソースコードを翻訳しながらプログラムを実行する言語
一度に全てのソースコードをコンパイル翻訳してからプログラムを実行する言語、それがコンパイラ型言語です。
コンパイラ型言語のプログラムを実行するまでの流れは以下のようになります。
- 人間がプログラミング言語でソースコードを書きます。
- ソースコードをコンピュータが理解できる数値の羅列に翻訳します。この翻訳のことを「コンパイル」と呼びます。
- コンパイルしたファイルはソースコードとは別に作成されます。このファイルのことを「実行可能ファイル」や「モジュール」などと呼びます。
- 実行可能ファイルを実行します。
私たちが普段目にするパソコンのソフトウェアやスマートフォンのアプリは、この「実行可能ファイル」のことを指しています。
コンパイラ型言語のメリット/デメリット
ソースコードを記述してプログラムを作成するまでの一連の作業を「開発」と呼びます。
現在のソフトウェアやアプリは複雑なものが多く、開発作業も複数のエンジニアで何ヶ月もかけて行うことが一般的です。
コンパイラ型言語はその特徴から大規模な開発に向いている言語です。
ここで具体的にメリットとデメリットを確認していきましょう。
コンパイラ型言語のメリット
コンパイラ型言語のメリットは「一度に全てのソースコードを翻訳してからプログラムを実行する」点にあります。
ソースコードの間違いを早い段階で検出できる
ソースコードをプログラムに翻訳する「コンパイル」では、ソースコードに間違いが無いかエラーチェックもいっしょに行います。
これは間違いを残したままプログラムを実行してコンピューターが異常な動きをするのを防ぐためです。
残してしまった間違いを「バグ」といいます。開発作業はソースコードを書くだけでなくテストなど多くの工程を経ますので、バグは早い段階で検出できたほうが効率的です。
プログラムの実行速度がインタプリタ型言語と比較して高速
一度に全てのソースコードを翻訳してからプログラムを実行するため、プログラムを実行する速度は逐一翻訳しながら実行するインタプリタ型言語と比較して高速になります。
よって実行速度が求められる場面にコンパイラ型言語は向いていると言えるでしょう。
身近なところでは動きの早いゲームアプリやリアルタイムに結果が分かる画像加工アプリ、大規模な例としては企業の基幹系システムなどが向いている例としてあげられます。
コンパイラ型言語のデメリット
コンパイラ型言語の特徴である「一度に全てのソースコードを翻訳してからプログラムを実行する」がデメリットになる場合もあります。
すぐに実行を開始できない
一度に全てのソースコードを翻訳してからプログラムを実行するため、それが終わるまでは実行を待つ必要があります。
ただしこれは主に開発作業中におけるデメリットです。
開発作業中は何回もソースコードの作成と実行(テスト)を繰り返すため、僅かな時間ですがコンパイルを待つ必要があります。
実際に私たちがダウンロードして利用するアプリは、すでにコンパイルが済んでいる実行可能ファイルですので、ソースコードの翻訳を待つ必要はありません。
やや難易度の高い言語が多い
ほとんどのコンパイラ型言語は、開発を始める際にコンパイルを行って実行するための「開発環境」を構築する必要があります。
開発環境の構築とは開発に必要なソフトウェアをパソコンなどにインストールすることを指しますが、初学者にとっては開発に必要なソフトウェアが何なのか分からない場合も多く、学習を始める際のハードルとなる場合があります。さらに、OS(オペレーティングシステム。
パソコンならWindowsやMac、Linuxなど。
スマートフォンならAndroidやiOSなどの種類を指す)の種類により実行できる実行可能ファイルは異なります。
よってコンパイルもそれぞれのターゲットに対して行う必要があるのも難易度を高める一因となっています。
それに対してインタプリタ型言語の代表である「JavaScript」はブラウザで実行できるため開発の構築も容易です。
なお後述しますがJava言語のようにどこでも実行できるように設計されたプログラミング言語もあります。
またコンパイラ型言語は大規模な開発を想定しているものが多く、ソースコードを機能単位に分割して作るような機能が充実しています。
またコンパイル(ソースコードを実行可能ファイルに翻訳すること)の際に記述内容が明確になるよう、厳密な書き方が求められます。
はじめからこれらの機能をフル活用して開発を行う必要は無いのですが、若干の取っ掛かりづらさはあります。
コンパイラ型言語の代表的な種類と特徴
それでは次に、代表的なコンパイラ型言語の種類と特徴を見ていくことにしましょう。
Java
コンパイラ型言語の代表格と言えばJavaです。「ジャヴァ」と読みます。
似た名前のプログラミング言語に「JavaScript」というものがありますが全くの別物です。
特徴
Javaはアメリカのサン・マイクロシステムズ社によって1996年に発表された歴史のあるプログラミング言語です。
現在はアメリカのオラクル社が権利を保有しています。
Javaの開発当初からのポリシーとして「Write once, run anywhere」があります。
これは一度書いたソースコードはどこでも実行できるということを意味します。
前述の通り実行可能ファイルはOSの種類により異なりますが、Javaは「Java Virtual Machine(JVM)」という仕組みを取り入れることで、基本的に同じソースコードがどこでも動くような環境を用意しました。
Javaは早い段階から大規模開発に向いた機能を取り入れて来たため、企業の基幹系システムなどに幅広く使われていることも特徴です。
特に金融機関の基幹系システムにはほぼ100%採用されていると言っていいでしょう。
歴史がありいわば「枯れたプログラミング言語」であるためとても安定しているため、この流れは今後も継続されるものと想定できます。
実際にシステム開発の案件数も多く、システム開発会社の新入社員研修でも広く取り入れられているプログラミング言語です。
プログラミングを職業とするのであれば覚えておくと非常にメリットがあると言えるでしょう。
最新のバージョンは2019年9月にリリースされたJava SE 13です。
なお学習にあたっては問題ありませんが、商用利用のライセンス体系が変更になっているため、会社で利用する場合にはオラクル社のホームページで確認しておくといいでしょう。
開発に使われた代表的なサービス
前述の通りJavaは広く多くのデバイスで利用されています。
- 多くの企業の基幹系システム:多くの企業では請求処理や営業管理などの基幹系システムを利用しています。これらのシステムはブラウザから利用する場合も多いでしょう。ユーザーが直接接するWebページの開発をフロントエンドと呼び、サービスを提供するサーバーと呼ばれるコンピュータ内部で動作するプログラムをバックエンドと呼びます。Javaはこの「バックエンド」で幅広く活用されています。
- Androidアプリ:AndroidアプリもJavaで開発されてきました。現在の主流は「Kotlin」というプログラミング言語ですが、KotlinはJavaと100%の互換性があり、実行もJVM上で行われます。
- 組込みシステム:IoT機器などの組込みシステム用にもJavaは広く活用されています。組込みシステム用のJavaは「組み込みJava」と呼ばれ、ほとんどのカーナビやBlu-rayプレーヤーなどに使用されています。
C#
C#は主にWindowsで使われているコンパイラ型言語です。
特徴
C#はアメリカのマイクロソフト社によって開発されました。
「シーシャープ」と読みます。2000年に発表された、こちらも歴史のあるプログラミング言語です。
C#は当時の「C++」といったプログラミング言語の使いづらい部分を改良し、モダンに扱えるようにしたプログラミング言語です。
マイクロソフトの基盤ソフトウェア(フレームワーク)である「.NET Framework」上で動作するように設計されています。
C#は言語的にC++をベースとしており、C言語の記述に慣れた人であれば容易に習得できる言語です。
C言語は大学のカリキュラムで採用されていることも多く、コンパイラ型言語の中では比較的容易に取り組めると言っていいでしょう。
開発に使われた代表的なサービス
- マイクロソフト社の多くのサービス:C#はマイクロソフト社の多くのサービスで利用されています。具体的な例としてはビデオチャットソフトウェアである「skype」やポータルサイトの「MSN」のバックエンドなどがC#で開発されています。なおC#でWeb系のバックエンドの開発を行うには「ASP.NET」というフレームワークを使用します。キーワードとして覚えておくといいでしょう。
- ゲームの開発:ゲームの開発で高いシェアを誇る「Unity」で使えるプログラミング言語の1つがC#です。
- スマートフォンアプリの開発:シェアとしては少ないのですが、AndroidやiOSなどのスマートフォンアプリの開発にも使用できる環境が用意されています。
C言語
C言語は元祖コンパイラ型言語と呼べるプログラミング言語です。
特徴
C言語は1972年にアメリカのAT&T社のベル研究所でデニス・リッチーとブライアン・W・カーニハンによって開発されました。
「シー言語」と読みます。ほとんどは略して「シー」と呼ぶ場合が多いでしょう。
C言語は現在のほぼすべてのプログラミングの源流となっている記念碑的なプログラミング言語です。
手続き型(ソースコードが書いた順番に上から実行される)や制御構文(繰り返しや条件分岐)などの基本機能はC言語から広く使われるようになったと言っていいでしょう。
非常に歴史のあるプログラミング言語ですが、現在も使用されバージョンアップが行われています。
C言語の実行可能ファイルは各OSごとに最適化されたものであるため、実行時に必要なCPUやメモリ量が少なくコンパイラ型言語の中でも高速に動作するものの1つです。
現在はC言語の機能拡張版である「C++」の方が一般的に使用されています(ここではまとめてC言語と表記しています)。
開発に使われた代表的なサービス
- 教育:C言語は非常にシンプルで分かりやすい言語構造であるため、大学のカリキュラムなどで広く使われています。C言語=古い、というイメージがあるかもしれませんが、シンプルだからこそ初めて学ぶプログラミング言語に向いているということから採用されています。
- 組込みシステム:Javaが登場する前は組込みシステムは「アセンブラ」と呼ばれるプログラミング言語かC言語で開発されていました。C言語はこれまで開発されてきたソフトウェア資源なども充実しているため、現在でも開発に多く利用されています(シビアな場面ではアセンブラも用いられています)。
- OSやライブラリ:WindowsやMacOS、LinuxなどのOSはC++で開発されています。またプログラミング言語で使用する部品(ライブラリ)の多くもC++で開発されています。例えばインタプリタ型言語の代表である「Python」はAI関係の開発に強みを持っていますが、実行速度が遅いというインタプリタ型言語特有の弱点があります。しかしPythonで使用されるAI関係のライブラリの多くはC++で開発されているため、結果的にインタプリタ型言語とコンパイラ型言語の特徴をうまく生かした環境となっていると言えます。
スクリプト言語との違い
スクリプト言語とは、比較的簡単に書けるプログラミング言語を総称して呼ばれているものです。
代表的なプログラミング言語としては JavaScript や Python などがあります。ほとんどのスクリプト言語はインタプリタ型言語であり「すぐに実行できる」、「簡単で覚えやすい」といった特徴を持ちます。
逆に「実行速度が遅い」、「(容易さを優先するために)大規模開発に向かない場合がある」といった弱点もあります。
これはどちらかに優劣があるということではありません。
それぞれの言語の特徴を生かし、適材適所に使い分けを行うといいでしょう。
具体的にはWebアプリケーションであれば、Webページ側(フロントエンド)はすぐに実行できることが求められるためインタプリタ型言語の JavaScript を採用し、バックエンド側は実行速度が求められるため、Java を採用する、といった使い分けになります。
まとめ
この記事ではコンパイラ型言語について確認してきました。
なお、プログラミング言語の全体的なトレンドとしては型推論や関数型プログラミングなど、より開発をシンプルにする機能の取り込みが進んでおり、コンパイラ型言語/インタプリタ型言語ともに進化し続けています。
ほとんどのプログラミング言語は開発環境も無償で構築することができるため、お気に入りのプログラミング言語を選んで学習にチャレンジしてみるといいでしょう。
筆者プロフィール
太田和樹(おおたかずき)
ITベンチャー企業のPM兼エンジニア 普段は主に、Web系アプリケーション開発のプロジェクトマネージャーとプログラミング講師を行っている。守備範囲はフロントエンド、モバイル、サーバサイド、データサイエンティストと幅広い。その幅広い知見を生かして、複数の領域を組み合わせた新しい提案をするのが得意。 開発実績:画像認識技術を活用した駐車場混雑状況把握(実証実験)、音声認識を活用したヘルプデスク支援システム、Pepperを遠隔操作するアプリの開発、大規模基幹系システムの開発・導入マネジメント。 地方在住。仕事のほとんどをリモートオフィスで行う。通勤で消耗する代わりに趣味のDIYや家庭菜園、家族との時間を楽しんでいる。 |
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
TechAcademyでは、初心者でも東京のIT企業へエンジニアとして転職を目指せるオンラインブートキャンプを開催しています。
現役エンジニアとキャリアカウンセラーが学習から転職までサポートします。
また、現役エンジニアから学べる無料体験や、キャリア相談ができる無料カウンセリングも実施しているので、ぜひ参加してみてください。