「ビルド」という作業は何を指しているのか仕事で使える魔法のLAMP(6)

前回は公開鍵認証を使って安全かつ簡単にログインする方法を説明しました。これからはいよいよソフトウェア環境の構築に入ります。今回は「ビルド」という作業について解説します(編集部)

» 2011年05月23日 00時00分 公開
[山口晴広株式会社イメージズ・アンド・ワーズ]

オープンソースソフトウェアを使うには

 前回までの解説で、LAMP環境を構築するための基盤となるOSの準備まで説明しました。これからはその環境上で実際にLAMP環境を構築していきます。まずは、ソフトウェアのビルドについての基本的な知識を解説します。

 いわゆるLAMP環境は、オープンソースまたはフリーソフトウェア(以下FOSS)と呼ばれるソフトウェアで成り立っています。ソースコードが公開されていて、誰でもが自由に利用できるものです。

 開発元が公開、配布するソースコードは、そのままでは実行できません。ビルドコンパイルという作業をを経てインストールということになります。なお、ビルドとコンパイルという言葉は、同じ意味で使うこともありますが、正確には指し示す範囲が異なります。それはおいおい明らかにします。

 LAMPに限らず、FOSSのソースコードにはインストールの手順も付属していて、そこには大体の場合、次のように書いてあります。

$ ./configure
$ make
$ sudo make install

 それぞれ1行目から、設定、ビルド、インストールを実行するコマンドです。環境がきちんと整っていれば、確かにこれだけの手順でインストールが完了します。意外と簡単なものです。

 しかし、これで解決とばかりにここで立ち止まってしまうと、いずれ問題が起こるでしょう。たまたまうまくいっていただけで、別の環境ではビルドが失敗するかもしれません。デフォルトの設定を変えたいと思うこともあるでしょう。

 上記の手順の裏側で何が動いているのかを理解すれば、ビルド失敗などの事態にも確実に対処できるようになります。もちろんディストリビューションのパッケージを使えば、そういった知識なしでインストールしてすぐに使えるのも事実です。ですが、第1回でも述べた通り、本連載ではLAMP環境を構築することを目的としています。いろいろな環境、用途に合わせて環境を構築できるように、手順の裏側を詳しく紐解いていきたいと思います。

 まずはビルドといわれている作業、上記手順でいうとmakeコマンドで何が行われているのかを見ていきます。

コンパイラの準備

 ソースコードはテキストで記述されたプログラムです。これはコンパイルすることで実行可能な形式になります(図1)。PHP言語などはテキストのソースコードのまま実行できますが、LAMPを構成するソフトウェアはC言語やC++言語でプログラムを記述してあります。実行するには必ずコンパイルしなければなりません。

図1 テキストのソースコードを実行可能にするにはコンパイルが必要 図1 テキストのソースコードを実行可能にするにはコンパイルが必要

 コンパイルにはコンパイラというソフトウェアが必要になります。さまざまなプログラミング言語に対応したコンパイラがありますので、必要なものを選んでインストールします。

 Linux上で一般的に使われるコンパイラもFOSSです。これもソースコードからビルドできますが、パッケージを使うことにします。すべてのソフトウェアをビルドするのは面倒ですから、特に最新バージョンを使うまでもないもの、LAMPにあまり関係ないものなどは、パッケージを使って楽に済ませます。それに、コンパイラのビルドにもコンパイラが必要という、「鶏が先か卵が先か」的な問題があります(興味がある方は「コンパイラのブートストラップ問題」で検索してみてください)。

 LAMP環境の構築に必要なコンパイラは、C言語とC++言語に対応するものです。GNU Compiler Collection、略してGCCをインストールします。GCCはさまざまな言語に対応したコンパイラです。

 インストールするには次のコマンドを実行します。標準状態でインストール済みである可能性もありますが、その場合はコマンドを実行しても何もインストールせずに終了します。

$ sudo yum install gcc gcc-c++

コンパイラの動作を確認

 インストールが済んだら、試しにごく単純なC言語のプログラムをコンパイルして実行してみましょう。図2の内容でhello.cというファイルを作成します。「Hello, World!」と表示するだけのプログラムです。

#include <stdio.h>
 
main()
{
  printf("Hello, World!\n");
}
 
図2 hello.cの内容

 ソースコードをコンパイルするには、次のようにgccコマンドを使います。コンパイル結果となる実行ファイル名は、-oオプションで指定します。

$ gcc hello.c -o hello

 gccコマンドは、エラーが発生しない限り何も表示せずに終了します。ソースコードに間違いがなければ、helloというファイルができているはずです。これを実行してみましょう。

$ ./hello
Hello, World!

 LAMPなどのFOSSのソースコードを実行可能にするには、すべてこのようにしてコンパイルする必要があるのです。

複数ファイルから実行可能なファイルを作る

 この例は小さなプログラムですので1ファイルのソースコードでしたが、実際のFOSSを使うときは、1ファイルで済むことはありません。ソフトウェアの内部構造などに従って、複数のファイルに分割したものになります。

 複数のソースコードのファイルから構成される場合であっても、最終的な実行形式のファイルは1個です。複数のファイルをコンパイルするときは、最後にそれらをまとめ上げて実行可能な形式にするための、リンクという作業が必要になります(図3)。リンク前のコンパイル済みのファイルはオブジェクトファイルと呼びます。拡張子は.oです。

図3 複数のソースコードファイルからビルドしても、実行可能ファイルは1つ 図3 複数のソースコードファイルからビルドしても、実行可能ファイルは1つ

 このコンパイルからリンクという一連の流れが、ビルドです。リンクするプログラムはリンカといいます。これらの用語や流れはとても重要ですので、よく覚えておいてください。

 なお、ソースコードが1ファイルのときであっても、内部ではコンパイルとリンクが自動的に実行されています。オブジェクトファイルは一時ファイルとして扱われ、リンクが終わると消されているのです。つまり、コンパイルという言葉は、正確な意味では、オブジェクトファイルに変換することまでを指すのです。1ファイルの例ではリンクまで含めてコンパイルと言いましたが、これは広義な使い方ということになります。

 次回はリンカやmakeコマンドについて解説します。

著者紹介

株式会社イメージズ・アンド・ワーズ
代表取締役
山口晴広(やまぐち はるひろ)



「仕事で使える魔法のLAMP」バックナンバー

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。