


本題に入る前に、私たちが当たり前に使っている「コマンドラインツール」とは何かについて簡単に説明しましょう。
コマンドラインツールとは、グラフィカルな画面(GUI)ではなく、コマンドラインインターフェース(CUI)で命令(コマンド)を与えて実行するプログラムのことです。
コマンドラインツールの多くは、1970年代にベル研究所で生まれたUnixと共に発展しました。その背景には「Unix哲学」と呼ばれる、シンプルで強力な設計思想があります。
・一つのことをうまくやれ(Do one thing and do it well)
・ツールは協調して動くように作れ(Make tools work well together)
この哲学のもと、一つの巨大な万能プログラムを作るのではなく、ファイルを一覧表示する(ls)、テキストを検索する(grep)といった単一の機能に特化した小さなツールが数多く生み出されました。
そして、それらの出力をパイプ(|)で繋ぎ合わせることで、小さなツールを組み合わせて複雑なタスクをこなす、という文化が花開いたのです。grepやawkも、そのようなUnix哲学から生まれた、強力なツールの一つです。

テキストデータを処理するために使われるコマンドラインツールといえば、「grep」「sed」「awk」が代表的ですよね。実はこの3つのコマンドラインツールには、それぞれ異なる名前の由来があるのです。それぞれの由来を紹介していきます。
情シス業務でも強力な武器の一つ、grep。この名前は、何かの単語の略には見えません。それもそのはず、この名前はエディタUnixの標準的なテキストエディタ「ed」のコマンドに由来しています。
grepはedの3つのコマンドから構成されています。
g:Global(ファイル全体)
re:Regular Expression(正規表現)
p:Print(表示)
つまり、grepはテキストエディタedにおいて、「ファイル全体から、正規表現に一致する行を探し、それを表示せよ」という3つの操作を行うためのコマンドをつなげたものだったのです。
これは、grepの生みの親であるケン・トンプソンが、仲間のエンジニアから、テキストファイルから特定のパターンを抜き出すツールが欲しいと頼まれ、edエディタのこのg/re/p機能を切り出して、単体のコマンドとして提供したのが始まりでした。私たちが使っているgrepは、それ自体がファイル全体から、正規表現で検索して表示させるという命令文だったのです。
sedは、テキストを行単位で読み込み、編集して出力するコマンドラインツールです。主にテキストの置換や行の削除といった編集を行うために利用されます。
sedの名前の由来は、ずばりStream EDitorです。Stream EDitorとは、Unixの標準エディタedの編集機能を、対話的な操作なしで、データの流れ(ストリーム)に対して1行ずつ実行するために作られたツールのことです。つまり、ファイル全体を開かずに、流れてくるデータを1行ずつ処理して、結果を返すという機能こそがsedの本質であることがわかります。
awkはテキストの加工・集計に欠かせない万能なコマンドラインツールです。
awkの名前の由来はgrep、sedとはだいぶ毛色が異なります。awkは、なんと開発者3名のイニシャルを取ったものなのです。開発者とは、Alfred Aho(アルフレッド・エイホ)、Peter Weinberger(ピーター・ワインバーガー)、Brian Kernighan(ブライアン・カーニハン)の3名です。
彼らはベル研究所のスターエンジニアであり、特にカーニハン氏は、かの有名なプログラミング言語「C言語」の解説書の著者としても知られています。awkの開発には、こうした言語開発の権威たちが関わっていたのです。

コマンド名の中には、現代では使われなくなった技術の記憶を留めているものもあります。代表的なものとして、tarとpingの名前の由来を紹介します。
tarは、サーバー上の複数のファイルやディレクトリを一つにまとめる際に使われる、一般的なコマンドです。
このコマンドの名前の由来は、Tape ARchiver(テープアーカイバ)です。
tarが生まれた当初、コンピュータの主要な外部記憶装置は、ハードディスクやSSDではなく磁気テープでした。tarの本来の役割は、複数のファイルをまとめて磁気テープにバックアップすることだったのです。
私たちが今でもよく使う.tar.gzという拡張子は、tarで複数のファイルを1つにまとめ、そのファイルをgz(gzip)で圧縮する、という2段階の処理が行われたことを示しています。磁気テープが主流でなくなった現代でも、tarというコマンドラインツールが、ファイルをまとめるという役割で生き続けている、まさにITの生きた歴史と言えるコマンドです。
サーバーに接続できない……そんな時、情シスが最初に入力するコマンドがpingです。このシンプルなツールにも、面白い由来があります。
pingの名前の由来は、潜水艦が敵を探すために発する「ピン!」というソナー音のオノマトペです。開発者のマイク・ムース氏は、ネットワークの向こう側にいるホストが生存しているかどうかを調べるこのツールの動作を、潜水艦のソナー音になぞらえました。
しかし、あまりにも使いやすい機能だったため、後に技術者たちの間でPacket InterNet Groper(パケットでインターネットを探るもの)という、ユーモラスな後付けの略語も生まれました。サーバーの生存確認という有名なコマンドラインツールの名前が、技術用語ではなくオノマトペだったというのは、なんとも味わい深い話です。
いかがでしたか?普段、何気なく打ち込んでいるコマンドラインツールの名前には、開発者の設計思想や、そのツールが生まれた時代の技術的な背景が込められています。
名前の由来を知ることは、コマンドの本質的な役割を理解することにも繋がります。たまにはコンソールから顔を上げ、普段何気なく使っているコマンドの名前の由来を調べてみるのもよい息抜きになるのではないでしょうか。

木曜日の夕方に仕事で疲れた脳みそをリフレッシュしたいとき、一人でゆっくりしたい夜、ちょっとした空き時間に、気軽に「つまめる」ソースコードの話題をお届けします。
まるで隠れ家バーでマスターが語るウンチクのように、普段は見過ごしがちなコードの奥深さや、思わず「へぇ〜!」と唸るようなユニークなアイデア、クスッと笑える小ネタを、ソースコードの世界を熟知した「情シスのじかん」がご紹介します。
コードを書くのが大好きなエンジニアさんも、ソースコードはちょっと苦手…という情シス部門の方も、この特集を読めば、きっとソースコードの新たな一面を発見できるはず。
業務効率化のヒントになるTipsや、セキュリティ対策に役立つ情報も盛りだくさん。
さあ、あなたも「おつまみとしてのソースコード」で、技術の世界をもっと身近に、もっと楽しく感じてみませんか?
本特集はこちら30秒で理解!フォローして『1日1記事』インプットしよう!