支援対象地域:札幌、仙台、関東、愛知、関西、広島、福岡

  • TOP
  •   
  • コラム
  •   
  • コンパイルを解説します。【初心者】

■コンパイル(compile)とは

プログラミング言語で記述されたソフトウェアの設計図をソースコードと言います。これをコンピューターが実行可能な形式に変換する作業が「コンパイル」です。コンパイルとは一言で言うと「ソースコードをオブジェクトコードに変換すること」となります。また、コンパイルに必要なソフトウェアをコンパイラと言い、変換されたプログラミング言語はコンパイラ型言語と総称されます。コンパイルによって変換された、コンピュータが実行可能な形式はオブジェクトコード(機械語)と言います。

■なぜコンパイルが必要なのか

コンピュータ上で実行される命令はオブジェクトコード(機械語)ですが、人間には意味のわからない数字の羅列であり、機械語でプログラムを作成するのは困難です。逆を言えば、もちろんコンピュータも人間の言葉はわかりません。 コンパイルは通常、ソフトウェアを開発する上で必要な作業です。ソースコードはテキスト形式であるため、人間は読んで理解することができます。しかし、オブジェクトコードはコンピュータが理解できる2進数もしくはそれに準じた形式(バイナリ)になっているため、人間は普通理解できません。そのため、コンパイラを用いてソースコードを解析し変換したり、必要があれば外部のライブラリやオブジェクトコードを使って変換作業を行いコンピュータにソースコードを伝える必要があるのです。

~一般的にプログラムを作って動かすまでの簡単な流れ~

1、ソースコード(人間語)でプログラムを作成

2、ソースコードをオブジェクトコード(機械語)に変換(←これがコンパイル)

3、オブジェクトコードに従ってコンピュータが作業を実行

■逆コンパイル(decompire/デコンパイル)

コンパイラとは逆に、オブジェクトコードをソースコードに変換するソフトウェアを逆コンパイラまたはデコンパイラと言い、そのように変換する処理や作業を逆コンパイルと言います。通常、オブジェクトコードへの変換時に元のソースコードにあった変数名などが失われていることが多く、またソースコードは必ずしもその際に使用しているシステムと一対一に対応するわけではなく、完全に元のソースコードが再現されるわけではありません。そのため、著作権保護などの理由から、利用規定などで逆コンパイルを禁じているソフトウェアも存在します。またJavaで開発されたプログラムは逆コンパイルされやすい構造であることが知られており、逆コンパイル対策ソフトなども開発されています。プログラム開発時はこういった点も注意が必要です。

■コンパイラ型言語とインタープリタ型言語

コンパイルの作業は、ソースコードを開発時に一括して変換するものであり、変換時にはオブジェクトコードの実行は行われません。オブジェクトコードはプログラムの実行時に直接読み込まれます。これに対して、プログラムの実行時に逐一変換され実行されるタイプのプログラミング言語はインタープリタ型言語と呼ばれます。コンパイラ型言語はインタープリタ型言語に比べても実行速度が速いのが特徴です。

・コンパイラ型言語(compiler language)

プログラミング言語で記述されたソースコードを解釈し、コンピュータで実行可能なオブジェクトコードなどのコードに一括して変換するコンパイラを使用した言語です。言語の開発元が提供する公式の処理系や、広く普及している主要な処理系がコンパイラである場合を指します。変換後のコードを元に実行可能ファイルを作成してから実行されます。記述したコードを実行に移すまでに、手間や準備時間が必要になりますが、オブジェクトコードへの変換と実行が分離されるため、プログラムを少ない消費メモリで高速で実行でき、実行時にソースコードが不要(利用者へソースコードを提供しない)という特徴があります。

・インタープリタ型言語(interpretive language)

プログラミング言語で記述されたソースコードを解釈し、コンピュータで実行可能なオブジェクトコードに変換しながら同時に実行するソフトウェアを使用した言語です。言語の開発元が提供する公式の処理系や、あるいは主要な実行環境がインタプリタである場合を対象に指します。変換処理の分だけ、消費メモリ容量や実行速度は性能が落ちますが、ソースコードを与えるだけで即座に実行できるという特徴があります。

■リコンパイル(recompile/再コンパイル)

ソフトウェア開発の過程で、ソースコードから一度コンパイルしたものを、再びコンパイルし直すことを指します。 一度コンパイルをしてテストあるいは実行したりした後に、修正や新しい機能の追加などを行い、再度コンパイルが必要な場合に実施します。処理系によっては、リコンパイル時には更新された箇所だけを解析しなおして時間を短縮する機能を持っている場合もあります。

■条件付きコンパイル(conditional compilation)

プログラム中に特殊な記法を用いて範囲などを指定し、特定の条件下でのコンパイルを指示する手法で、条件付きコンパイルあるいは条件コンパイルといいます。 代表的な例として、デバッグコードの挿入と削除があります。プログラムを開発する際に、「あるループを通過しているか」「ある分岐のどちらを進んでいるか」などを確認するために、特別なコード(デバッグ用コード)を挿入する場合があります。これらはテスト段階の確認過程のひとつであり、完成したプログラムには必要がないので、条件付きコンパイルの機能を使って、あるオプションが指定してコンパイラが起動されたときのみ、それらのデバッグ用コードが有効になるようにプログラムしておきます。動作確認が終わり完成した時には、オプションを指定せずにコンパイルを実行すれば、デバッグ用コードはコンパイルされません。

■あとがき

ここでは「コンパイル」について解説しましたが、コンパイルはソフトウェア開発やシステム開発など、コンピュータに作業を指示するうえで避けられない工程のひとつになります。ある程度理解しておくことで作業効率などに影響するので、自身の利用環境に応じた内容を学習しましょう。プログラムを実施する際のコマンドプロンプトなどを難しいと思うかもしれませんが、徐々に慣れていくので構える必要はありません。それぞれの特性を理解し作業を進めることが、ミスや欠損を抑えるうえで重要になります。