はじめに
今回から「玩式草子」( がんしきそうし)というタイトルで連載を始めることになりましたPlamo Linuxのまとめ役の こじまみつひろ と申します。
このサイトでは、過去に「ソースコード・リテラシーのススメ」 というタイトルで、各種ドキュメントやソースコードの読み方について紹介するような記事を連載をしたことがありますが、今回は多少趣きを変えて、Linuxやオープンソースソフトウェア(OSS)の面白さや楽しみ方を、より読み物風に語ってみたいと思います。
今回は最初なので、やや「そもそも論」的になりますが、私の考えるLinuxの面白さについて考えてみます。
Slackware 3.xを元に、日本語やノートPCにより適した環境を作るためにPlamo Linuxという名でディストリビューションの開発を始めて10年以上の年月が経ちました。本来飽きっぽい性格の私が、1つのプロジェクトをこれだけ長く続けることができたのは、メンテナとして協力してくれる仲間たちやユーザとして支援してくれる人たちのおかげであることは言うまでもありませんが、私にとってLinuxを使うことが「面白く」て「楽しい」ことが最大の理由のように感じます。
なぜLinuxを使うことが「面白く」て「楽しい」のか、一方、Windowsを使う時にはなぜ「窮屈さ」や「息苦しさ」を感じるのか、そこにはWindowsとLinuxのソフトウェアに対する考え方の違いがあるでしょう。
最近ではGNOMEやKDEといった統合デスクトップ環境が充実し、LinuxでもWindowsと同じように、GUI環境からほとんどの作業ができるようになりましたが、Linuxやその元となったUnixでは「ソフトウェア・ツールズ(Software Tools) 」という考え方が基本になっています。「 ソフトウェア・ツールズ」の考え方では、多数の機能をもった大きなソフトウェアではなく、1つの仕事をうまくこなす小さなソフトウェアを組み合わせて、複雑で大きな処理を実現しようとします。
この思想を実現するために、UNIXはsed やcut 、sort といった一つの機能に特化したツールを多数生み出し、それらはGNUプロジェクトによる再実装を経て、Linuxにも受け継がれています。
一方、Windows用で代表される最近のアプリケーションソフトウェアでは、あらゆる機能を詰め込んだ1つの大きなソフトウェアで全ての処理を実施しようとします。そのため、それぞれのアプリケーション・ソフトウェアの規模は大きくなりますし、アプリケーションソフトウェアごとに独自の操作方法を習得する必要があります。
GUIとソフトウェア・ツールズ
両者の違いをデータファイルの操作法で見てみることにしましょう。ある程度大規模なデータの例として、郵便事業株式会社が提供している郵便番号データのうち、大口事業所に個別の番号が割り当てられている「大口事業所個別番号データ」 を操作してみます。
この日本全国の大口事業所の郵便番号データから、今、私が住んでいる兵庫県三木市に割り当てられている大口事業所とその郵便番号を取り出してみましょう。
まず、アプリケーション・ソフトウェアを使う例として、OpenOffice.org 3.1を使ってみます。OpenOffice.org の場合、CSV形式のデータを指定して開くと、自動的に変換ダイアログが表示され、文字コード(Shift_JIS)を指定してやればOpenOffice/Calcに読み込まれます。
このファイルには2万行を超えるデータが含まれているので読み込みにしばらく待たされた後、表示される巨大な表をスクロールして必要な部分を探します。
必要な部分をマウスで選択してコピーし、別のシートに貼り付けます
事業所名と郵便番号のみを残して、残りの欄を削除して必要なデータにします。
これら一連の操作はキーボードを使わずにマウス操作のみで可能なので、キーボードに不慣れな人でも必要なデータを入手することは可能でしょう。
一方、ソフトウェア・ツールズを使うとこのような手順になるでしょう。
まず、grep コマンドで「三木市」のデータを抽出します。
% grep '三木市' jigyosyo.csv
%
おや、見つかりませんでした。元のデータでは文字コードがShift-JISになっていることを忘れていたので、まず、文字コードを変換してやりましょう。
% nkf -e jigyosyo.csv | grep '三木市'
28215,"ミキシヤクシヨ","三木市役所","兵庫県","三木市","上の丸町","10-30","6730492","67304","三木",0,0,0
28215,"セイカツキヨウドウクミアイ コ-プコウベ","生活協同組合 コープこうべ","兵庫県","三木市","志染町青山","7丁目1-4","6730592","67305","三木",0,0,0
28215,"ミキシヤクシヨ ヨカワシシヨ","三木市役所 吉川支所","兵庫県","三木市","吉川町吉安","246","6731192","67311","渡瀬",0,0,0
%
今度はデータが見つかりました。この中から必要な欄を取り出すにはcut コマンドで十分でしょう。それぞれの行の欄を数えると、事業所名は4つめ、新しい7ケタの郵便番号は8つめなので、以下のコマンドを実行しました。
% nkf -e jigyosyo.csv | grep '三木市' | cut -f3,8 -d','
"三木市役所","6730492"
"生活協同組合 コープこうべ","6730592"
"三木市役所 吉川支所","6731192"
後半の grep と cut を組み合わせた部分はgawk を使えばこうも書けるかな。
% nkf -e jigyosyo.csv | gawk 'BEGIN{FS=","}/三木市/{print $3,$8}'
"三木市役所","6730492"
"生活協同組合 コープこうべ","6730592"
"三木市役所 吉川支所","6731192"
OpenOffice.org/Calcのような表計算ソフトでは、画面上で操作対象のデータを直接見ながらマウスで必要な部分を切り出すというわかりやすい処理でしたが、ソフトウェア・ツールズでは、それぞれのコマンドの意味やオプションを知り、それらをどう組み合わせて必要な処理を実現するかを考えなければいけませんし、キーボードからコマンドを入力する手間もかかります。
しかしながら、表計算ソフトならば別の市のデータを抜き出す際にも同じだけのマウス操作を繰替えさなければいけないのに対し、ソフトウェア・ツールズを用いたコマンドラインからの入力ならば、コマンドの一部を書きかえるだけですみますし、シェルの補完機能を使えばキーボード入力も最小限で済みます。
たとえば神戸市のデータを探すならば「三木市」の部分を「神戸市」に替えるだけですし、元のコマンドは(シェルの設定によりますが)ctrl+P や ctrl+↑ で呼び出せるので、必要な部分のみを書き替えることも容易です。
% nkf -e jigyosyo.csv | gawk 'BEGIN{FS=","}/神戸市/{print $3,$8}'
"甲南学園" "6588501"
"神戸薬科大学" "6588558"
"生活協同組合 コープこうべ" "6588555"
"東灘区役所" "6588570"
...
シェルの繰り返し機能と組み合わせば、複数のデータをそれぞれのファイルに分割して格納するということも一気にできます。
% for i in 札幌市 大阪市 沖縄市 ; do
% nkf -e jigyosyo.csv | grep "$i" | cut -f3,8 -d',' > $i.dat
% done
% ls -l *.dat
-rw-r--r-- 1 kojima users 276 7月 28日 13:28 沖縄市.dat
-rw-r--r-- 1 kojima users 15209 7月 28日 13:28 札幌市.dat
-rw-r--r-- 1 kojima users 15614 7月 28日 13:28 大阪市.dat
この例から、私がGUIベースのアプリケーションソフトウェアを使う際に感じる「息苦しさ」や「窮屈さ」の意味を感じてもらえるでしょうか?
Linux/UNIXの面白さ
GUIベースのアプリケーションソフトウェアはWYSWYG(What You See is What You Get)を合言葉に、「 書類」や「フォルダ(紙はさみ) 」といった日常生活で目にする品物をメタファーに用いて、初心者でも直感的な操作で処理が行えるように設計されています。その結果、どんなにコンピュータに詳しい人でも、初心者と同じようにマウスをクリック、クリックする操作を毎回強いられることになりました。
それに対し、ソフトウェア・ツールズでは、それぞれのコマンドに習熟するまではヘルプメッセージやマニュアルを引き引き、見よう見まねで苦労する必要がありますが、一度それらのコマンドに習熟できればアイデア次第で応用範囲はいくらでも広がっていきます。このアイデアを生み出す際の思考こそ、個別の処理を抽象化・汎用化していく、「 プログラミング」の過程に他なりません。
自分が行いたい処理を整理して、必要な手順を考え、それを実現するためのコマンドを組み合わせてうまく動いた時の面白さ、一筋縄ではいかない問題を苦労して考えたあげく、ちょっと視点を変えてみればあっけないほど簡単に解けた時の驚きとうれしさ、そういう経験が私にとってコンピュータを使う面白さに他なりません。
その意味で、私にとってのUNIXは、ユーザが自らのスキルを磨き、成長することを求めているOSであり、その機能を個人のPCで自由に使えるようにしてくれたLinuxは、まさにユーザを育ててくれるOSなのです。
最近では、LinuxでもGUI環境を積極的に採用する方向に進みつつあるようですが、個人的には「GUIでしか操作できないLinux」というのは悪夢のようなものなので、Plamo LinuxではGUI環境のおいしいところはいただきつつ、従来同様のソフトウェア・ツールズを活用できるような環境を維持したいと考えています。
Windowsのようなメーカ製のOSの場合、ユーザがどのような意向を持っていてもメーカが決めた方針に逆らうことはできません。しかし、GNUプロジェクトが切り開き、Linuxが完成した、フリーソフトウェアのみを用いたOS環境ならば、ユーザが自由に、自分の趣向に応じたシステムを構築することが可能なのです。
ここがLinuxの面白さのもう1つの源泉なのですが、このあたりはまた回を改めて語ることにしましょう。