コンパイラとは?コードを翻訳してくれる裏側のしくみをやさしく解説

プログラミングを学び始めると、よく聞く言葉「コンパイラ」。

「ビルドするときに動くらしいけど、結局なに?」と思ったことはありませんか?

この記事では、コンパイラとは何かを初心者にも分かるようにやさしく解説します。


コンパイラとは?

コンパイラ(compiler)とは、プログラミング言語で書かれたソースコードを、 コンピュータが理解できる機械語(バイナリコード)に翻訳するソフトウェアです。

つまり、

  • 人間が理解できるソースコード → コンピュータが理解できる命令(0と1)
  • 翻訳作業を自動で行うのがコンパイラ

ということです。


コンパイルの流れを理解しよう

コンパイルの内部処理は次のような流れで進みます。

  1. 字句解析(Lexical Analysis):ソースコードを「単語」に分ける
  2. 構文解析(Syntax Analysis):文法として正しいかをチェック
  3. 最適化(Optimization):処理を効率化する
  4. コード生成(Code Generation):機械語に変換する

この過程でエラーが出ることもあり、「コンパイルエラー」として表示されます。


インタプリタとの違い

よく混同されるのが「インタプリタ」です。 こちらは、コードを1行ずつ実行しながら翻訳する仕組みです。

種類仕組み代表的な言語特徴
コンパイラ型事前に全体を機械語に翻訳してから実行C, C#, Java など・ビルドに時間がかかる場合があるが実行が速い
・エラーが事前に分かる
インタプリタ型1行ずつ翻訳しながら実行Python, JavaScript など・手軽、動作が柔軟だが遅め

どちらも「コードを翻訳して実行する」という点は同じですが、 コンパイルのタイミングとスピードに違いがあります。


実際にコンパイルしてみよう

ここではJavaを実際にコンパイルしてみた結果を紹介します。


// Hello.java
public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello Compiler!");
  }
}

コンパイルコマンドを実行します。

javac Hello.java

javapを使用する事でバイトコードの中身を実際に見ることもできます。

javap -c Hello.class

javapの結果は以下の様に出力され、人がバイトコードより見やすくなりました。


Compiled from "Hello.java"
public class Hello {
  public Hello();
    Code:
         0: aload_0
         1: invokespecial #1                  // Method java/lang/Object."<init>":()V
         4: return

  public static void main(java.lang.String[]);
    Code:
         0: getstatic     #7                  // Field java/lang/System.out:Ljava/io/PrintStream;
         3: ldc           #13                 // String Hello Compiler!
         5: invokevirtual #15                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
         8: return
}

このように、コンパイラはコードを一度バイトコードに翻訳し、 JVM(Java仮想マシン)がそれを実行します。


コンパイラを使う場面と身近な例

コンパイラは、普段あなたが何気なく使っているツールの裏で動いています。

  • VSCodeやEclipseの「ビルド」ボタンを押した瞬間に実行
  • Android Studioでアプリを作るときもJavaやKotlinをコンパイル

つまり、「プログラムを実行する」=「コンパイラが働いている」と言っても過言ではありません。


まとめ:コンパイラはコードの“翻訳者”

  • コンパイラは、人間が書いたコードを機械語に翻訳するソフトウェア。
  • 字句解析・構文解析・最適化・コード生成の流れで変換される。
  • インタプリタとは翻訳のタイミングが違う。

コメント

タイトルとURLをコピーしました