運用を簡単にする”次のステップ”

ある程度Linuxサーバを管理できるようになってきたら、”次の手抜き”ができないか模索を始めたい。Windowsサーバよりもさまざまな作業を簡単に自動化できるのが、Linuxサーバの良いところだ。自動化できれば、さらに作業の手間を減らすことができる。

その段階に入ったら「プログラミングする」ということを考え始めたい。特にOSの機能を操作するとなると、CまたはC++の利用を考えたいところだ。OSの機能の多くはC言語で利用できるように整えられているため、C言語でプログラミングできるようになると、選択肢の幅がぐぐっと広がっていくのである。

初めてプログラミングをするなら、シェルスクリプトのようなスクリプト言語やPythonといったプログラミング言語のほうがとっかかりとしてはわかりやすい。C言語やC++は挫折するユーザーが多いプログラミング言語でもあるので、ある程度ハードルが高い点は否めない。しかし、C/C++、特にLinuxの場合はC言語ができるとかなり有利になる。やるかやらないかは別として、今回はC言語のプログラミング環境をセットアップする方法を紹介しておこう。

C言語環境をセットアップ

Ubuntu 18.04 LTS

C言語を利用するには少なくともC言語コンパイラをインストールする必要がある。コンパイル作業をまとめておくためにmakeというビルドツールも使えるようにしておきたい。最低限、この2つのツールさえ用意しておけばかなり多くのことができるようになる。

しかし、こうしたツールはUbuntuにはデフォルトではインストールされていない。次のように使いたければインストールを行うようにメッセージが表示される。なお、「cc」というコマンドがC言語のコンパイラだ。

makeコマンドやccコマンドはデフォルトではインストールされていない

C言語コンパイラはC言語のソースコードを実行可能なバイナリファイルに変換する処理を行うツールのことで、C言語を使った開発の中心的な役割をこなす。ccという名前でインストールされていることが多い。C言語コンパイラの実装系はいくつか存在しているが、現在であれば「LLVM Clang」を選んでおけばよいと思う。アクティブに開発が進められている上に人気が高く、コンパイル時のエラーメッセージなどがわかりやすい。

makeには主に「GNU make」と「BSD make」の2種類がある。これはどちらも選んでもよいのだが、GNU makeとBSD makeとで書き方が異なるので混ぜると混乱すると思う。どちらかのみで統一した使い方をしたほうがよい。コマンドくらいしか作らないという場合には、GNU makeで十分だ。*BSDのカーネルやコマンドもビルドするということであれば、BSD makeを使ったほうがよいだろう。

パッケージ 内容 コマンド
clang LLVM Clang cc
make GNU make make
freebsd-buildutils FreeBSDビルドユーティリティ fmake

インストールすると次のようにコマンドが動作するようになる。

ccやmakeが動作するようになった環境

ちょっとしたソースコードを書いてコンパイルし、実行してみよう。まず、vimなどのエディタを使って次のように「welcome.c」というファイルを作成する。

初めてのC言語ソースコード「welcome.c」

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>

int
main(int argc, char *argv[])
{
    printf( "            .-/+oossssoo+/-." "\n"
        "        `:+ssssssssssssssssss+:`" "\n"
        "      -+ssssssssssssssssssyyssss+-" "\n"
        "    .ossssssssssssssssssdMMMNysssso." "\n"
        "   /ssssssssssshdmmNNmmyNMMMMhssssss/" "\n"
        "  +ssssssssshmydMMMMMMMNddddyssssssss+" "\n"
        " /sssssssshNMMMyhhyyyyhmNMMMNhssssssss/" "\n"
        ".ssssssssdMMMNhsssssssssshNMMMdssssssss." "\n"
        "+sssshhhyNMMNyssssssssssssyNMMMysssssss+" "\n"
        "ossyNMMMNyMMhsssssssssssssshmmmhssssssso" "\n"
        "ossyNMMMNyMMhsssssssssssssshmmmhssssssso" "\n"
        "+sssshhhyNMMNyssssssssssssyNMMMysssssss+" "\n"
        ".ssssssssdMMMNhsssssssssshNMMMdssssssss." "\n"
        " /sssssssshNMMMyhhyyyyhdNMMMNhssssssss/" "\n"
        "  +sssssssssdmydMMMMMMMMddddyssssssss+" "\n"
        "   /ssssssssssshdmNNNNmyNMMMMhssssss/" "\n"
        "    .ossssssssssssssssssdMMMNysssso." "\n"
        "      -+sssssssssssssssssyyyssss+-" "\n"
        "        `:+ssssssssssssssssss+:`" "\n"
        "            .-/+oossssoo+/-." "\n");
}

次に、「welcome.c」を作成したのと同じディレクトリで次のコマンドを実行する。

cc welcome.c -o welcome

これで、カレントディレクトリに「welcome」という実行ファイルが作成される。これは、そのまま実行できる。コンパイルと実行を実際に行うと次のようになる。

ソースコードのコンパイルと実行

これは「HelloWorld」と呼ばれる種類のプログラムで、プログラミング言語を初めて扱う際に作られることが多い「文字列(HelloWorld)を出力するプログラム」をちょっといじったものだ。

プログラムの作成で広がる世界

プログラムが作成できるようになると、OSの提供している機能をダイレクトに利用できるようになる。プログラムを作らない場合には目的とする処理ができるコマンドやユーティリティを探すことになるが、プログラムを作れるとそれを自前で用意できるようになる。

C言語で書くべきか、シェルスクリプトで書くべきか、既存のサードパーティ製ソフトウエアを使うべきかというのはケースバイケースなのだが、C言語で書くという選択肢が選べるようになると、これまで以上に対応できる範囲が広がりやすくなる。管理がそろそろマンネリ化してきたなとか、今よりもさらに自動化を進めたいと思い始めたら、ぜひC言語に一度、トライしてみていただきたい。