プログラミング基礎概念

コンパイラ こんぱいら

ソースコード機械語プログラミング言語インタープリタビルド実行ファイル
コンパイラって何?

簡単に言うとこんな感じ!

人間が書いたプログラムのコード(英語っぽい文章)を、コンピューターが直接理解できる「0と1の命令」に丸ごと翻訳してくれる翻訳機だよ!一度全部翻訳してから動かすのがポイントなんだ。


コンパイラとは

コンパイラ(Compiler)とは、人間が読み書きできるプログラミング言語で書かれたソースコードを、コンピューターが直接実行できる機械語(マシンコード) に変換するプログラムのことです。たとえばC言語Java、C++などで書いたコードは、そのままではCPUが解釈できないため、コンパイラによる変換が必要です。

コンパイラの大きな特徴は、ソースコード全体を一括して変換してから実行するという点にあります。翻訳が完了すると「実行ファイル(.exe など)」が生成され、以後はソースコードなしで繰り返し高速に動かせます。料理に例えるなら、レシピ(ソースコード)を見ながらその場で調理するのではなく、先にレシピを完全な調理マニュアルに翻訳しておき、マニュアルだけで何度でも同じ料理を作れる状態にする、というイメージです。

コンパイラはソフトウェア開発の根幹を支える技術であり、実行速度の高さや配布の容易さから、業務システム・組み込み機器・ゲームエンジンなど幅広い分野で使われています。


コンパイラの仕組み・変換の流れ

コンパイラは内部でいくつかのフェーズ(段階)を経てソースコードを機械語に変換します。

フェーズ名称やっていること
1字句解析(Lexical Analysis)コードを単語(トークン)に分解する
2構文解析(Syntax Analysis)文法ルールに従って構造ツリーを作る
3意味解析(Semantic Analysis)型の不一致など意味的なエラーを検出する
4中間コード生成特定のCPUに依存しない中間表現に変換する
5最適化処理を速く・軽くするようにコードを整える
6コード生成対象CPUの機械語(バイナリ)を出力する

覚え方:「字構意中最コー」

句→文→味→間→適化→コード生成、で「じこいちゅうさいコー」と覚えると順番が頭に入りやすいですよ。

コンパイル型言語の代表例

言語主な用途
C / C++OS・組み込み・ゲームエンジン
Java(JVMバイトコード)業務システム・Android
Goクラウド・バックエンドAPI
Rustシステムプログラミング・WebAssembly
SwiftiOS / macOSアプリ

歴史と背景

  • 1940年代後半:コンピューターのプログラムはすべて機械語やアセンブリ言語(機械語に近い低レベル言語)で書く必要があり、専門家でも非常に困難だった。
  • 1952年:Grace Hopper(グレース・ホッパー)が世界初のコンパイラ「A-0」を開発。「人間の言葉に近い言語でプログラムを書けるはずだ」という発想が出発点。
  • 1957年:IBMがFORTRAN向けコンパイラを実用化。科学技術計算の生産性が劇的に向上し、コンパイラの有用性が広く認められる。
  • 1960〜70年代:COBOL、ALGOL、Cなど多様な言語とともにコンパイラ技術が急発展。
  • 1986年:コンパイラ理論の教科書「ドラゴンブック」(Aho・Sethi・Ullman著)が登場し、理論が体系化される。
  • 1990年代〜:GCC(GNU Compiler Collection)の普及でオープンソースのコンパイラが一般化。
  • 2000年代〜:LLVMアーキテクチャが登場し、複数言語・複数CPUに対応できるモジュール型コンパイラ基盤が主流に。

コンパイラ vs インタープリタ vs JIT

コンパイラと混同されやすいのがインタープリタ(Interpreter)です。インタープリタはソースコードを1行ずつ読み込みながらその場で実行します。さらに両者の中間的な存在としてJITコンパイラ(Just-In-Time Compiler)もあります。

コンパイラ・インタープリタ・JITの比較 コンパイラ (事前に全部翻訳) ソースコード コンパイル(一括) 実行ファイル ✅ 実行速度が速い ✅ 配布が容易 ❌ 修正→再コンパイル必要 インタープリタ (その場で1行ずつ実行) ソースコード 1行ずつ解釈・実行 すぐに結果が出る ✅ 修正してすぐ試せる ✅ 環境依存しにくい ❌ 実行速度が遅め JITコンパイラ (実行中に機械語へ翻訳) バイトコード 実行時にコンパイル 高速実行 ✅ 速度と柔軟性を両立 ✅ Java・V8(JS)などで採用 ❌ 起動時のウォームアップが必要

代表的な言語の分類

方式代表言語特徴
コンパイラ型C、C++、Go、Rust高速・事前変換必要
インタープリタ型PythonRubyPHP手軽・開発速度重視
JIT(中間コード+実行時コンパイル)Java、C#JavaScript(V8)両者の長所を取り入れた現代的方式

発注・選定で知っておきたいポイント

ITシステムを発注する立場から見ると、コンパイラの特性は開発コスト・保守性・実行性能に直結します。

  • C/C++など静的コンパイル型:処理が速く組み込み機器や高頻度取引(HFT)システムに向くが、開発に時間がかかる。
  • JavaやC#(JIT型):業務システムに広く使われ、保守性とパフォーマンスのバランスが良い。
  • PythonやRuby(インタープリタ型):プロトタイプや分析ツール開発が速いが、大量トランザクション処理には不向きな場合がある。

「開発スピードを重視したい」「大量アクセスに耐える性能が必要」などの要件をベンダーと話し合う際に、使用言語=コンパイル方式の背景として理解しておくと、提案内容の妥当性を判断しやすくなります。


関連用語