GNUとは?
オープンソースに基づいた開発者であれば、GNUに頻繁に出会うでしょう。GNUはオペレーティングシステムで、その名前はハッカーの再帰的なトリック「GNU Is Not Unix(GNUはUnixではない)」に由来します。なぜこのような名前がつけられたのか少し理解しにくいかもしれませんが、過去においてUnixは最も優れたオペレーティングシステムでした。GNUコミュニティは誰もが使える自由なオペレーティングシステムを作ろうとしていましたが、それをUnixとほぼ互換性のある形で実現しようとしました。そのため、世界に違いを伝えるために「GNUはUnixではない」と名付けました。
なぜGNUは重要なのか?
GNUは柔軟なコンポーネント構造で設計されており、カーネルさえも差し替えることができます。現在、2つのカーネルがあります。それはLinuxとHurdです。そのため、Linuxカーネルを使用したGNUオペレーティングシステムを「GNU/Linux」と呼びます。これが一般的にLinuxオペレーティングシステムを指す場合です。
つまり、Linuxを使用しているとき、実際にはGNUを使用しているのです。Linuxカーネルに触れることはシステムレベルのプログラミングをしていない限りありません。Linuxデスクトップを使ってゲームをしたり、映画を見たり、Web開発をしている場合、実際に使っているのはGNUのアプリケーションやツールであり、Linuxカーネルは日常の作業からは遠い存在です。たとえRedHat、SUSE、UbuntuといったLinuxディストリビューションを使っていると思っていてもです。
GNUビルドシステムとは?
最も重要なのは、GNUが業界で唯一成功した製品環境向けのオープンソースオペレーティングシステムであることです。日々の仕事がオープンソースに基づいている場合、GNUビルドシステムについて学ぶ必要があります。たとえWindows/WSLやMacOSを使用していても、多くのWeb開発者向けのパッケージはGNUビルドシステムで構築されており、賢い人々はWindowsやMacOS上にシミュレーション環境を作成して、GNU/Linux環境がなくてもビルドできるようにしています。
GNUビルドシステムは、以下の3つのステップで簡単に理解できます:
configure
make
make install
完了!
configure
configureは、M4マクロ言語で記述されたconfigure.acスクリプトから生成されます。この言語は少し古いので、真剣に学びたい人は少ないですが、その構文は簡単なので、使い方を簡単に学べます。
多くの人がconfigureファイルを読もうとして困りますが、それはやめましょう。configureはconfigure.acから生成されるので、生成されたスクリプトは人間向けではなく、読めません。
もしconfigure.acを書いたり修正したりした場合は、aclocalコマンドを実行してconfigureを生成できます。
configureは、ビルドしたいプログラムのパラメータ(例:インストール先のパスを指定する--prefix)を設定するために使用されます。
Makefile
Makefileは、どのオペレーティングシステムでも一連のコマンドを自動的に実行するための最も互換性のある方法です。そのため、プロフェッショナルな開発者にとって学ぶ価値があります。Makefileの最も一般的な用途はソフトウェアのビルドですが、それだけではありません。
Makefileは手動で記述することも、configureから自動生成することもできます。そのため、通常、configureを最初に実行する必要があります。生成されたMakefileも読みづらいですが、GNUビルドシステムではMakefile.inやMakefile.amを確認することができます。これらは包括的なMakefileを生成するためのテンプレートです。
もちろん、自分で簡単なMakefile.inを作成し、configureに異なるケースに合わせたユーザー設定を生成させることもできます。これについてはこの記事では触れません。
make & make install
makeとmake installの両方は、Makefileによって処理されます。
通常、makeはプログラムをコンパイルし、make installはコンパイルされたファイルをインストールします。
なぜGNUビルドシステムは依然として有用なのか?
現在、CMakeのような多くのビルドシステムがあります。しかし、GNUビルドシステムは、すべての一般的なケースで最も安定しており互換性があります。特にプログラムを他のプラットフォームに移植したい場合に役立ちます。製品環境では、多年にわたり実証されたソリューションを使用したいと考えられています。そのため、基本的な知識を学ぶ価値があるのです。