19990317
お金のかからない開発と解析:Linux久保拓弥 (北大・地球環境) kubo@ees.hokudai.ac.jp(わからない語があったら 「てくにかる用語集」 などを参照してみてください)
ここではLinux というOS が
生態学の研究に
「どのように役に立ちそうか」
を簡単に説明する.
Linux とは何か?
Linux は現在(1999年3月) 世界で最も多く使われている
「無料」の
Unix 的なOS である.
実際に使っていても
筆者などには
その他のUnix 系OS と区別すらつかない
(じゃあ,
その`Unix' ってのは何?
という疑問だけど……
まぁ,30 年ほど前からいろいろなハードウェアで利用されている
堅牢だけど少し無愛想なOS だと思ってください).
Linux を
入手するには世界中あちこちにある大学や研究所などの
FTP server からダウンロードするか,
あるいは書籍や雑誌のオマケとして配布されている
インストール用CD-ROM を使えばよい.
また日本でもいくつかの会社が
「○○ Linux」といった商品名で
Linux インストール用CD-ROM を
パッケイジソフトウェアとして販売している.
これらは普通のパソコンショップや大学生協などで購入できる.
つまり,
ソフトウェア自体の対価は無料だけれど,
実際に手にいれようと思ったら通信回線費やメディア代その他ぐらいは
支払わなければならない.
ここでいう「無料」は
そういう意味だ.
ともあれ,
ソフトウェア製造会社が作成し販売しているプログラムに比べれば,
圧倒的に安価であることは間違いない.
なぜLinux や
そのOS 上で使用するさまざまなプログラム
(GNU プロダクツが多い)
は無料なのか?
もちろん,
これらが営利目的で作られていない,
というのも大きな理由のひとつだ.
しかしながら,それだけではない.
もっとも重要なのは,
そのソースコードがすべて公開されてしまっている
点にある.
そして
これは
われわれ学術研究者にとっても
(お役所書類ふうに言うなら)
「研究遂行上必要不可欠」
なのである.
ソースコードが公開されれば,
ソフトウェアの「秘密」がすべて暴露されていて
もはや隠すべきものがない.
だから,
ふつーの商用ソフトウェアのように,
「秘密」の独占によって
どこかの企業が金儲けをする,
という構図が成立しない.
そのおかげで,
われわれ利用者は「無料」でプログラムを入手できる.
また,
世界中の物好きたちがよってたかって
公開されたLinux の
「あら探し」をやって
問題点(バグ) の指摘を続けている.
それが反映されていって
ソフトウェアの品質はどんどん向上している.
さらに
われわれは学術研究を進めるために
計算機のプログラムを使っているのだから,
ソースコードがきちんと公開されている
ソフトウェアを用いるのは,
もちろん
その目的
(「再現可能」な知的生産とその共有)
に沿った
実に正当なふるまいなのである.
Linux は多くのハードウェア上で動作する.
Macintosh でLinux を使うこともできる.
これについては
加藤悦史さんが解説
してくださるので
そちらを参照していただきたい.
しかしながら,
とくに理由がないならば,
Linux を初めて動かそうとする人は
ハードウェアとして
PC を用いるのが無難だと思う.
現時点でもっとも多くLinux を動かしていている
プラットホームはIntel 系のCPU をもつ`PC'
(つまりWindows が動くようなアーキテクチャー)
なので,
関連情報が得やすいためだ.
Linux の利点? それは簡単にプログラムが作れて……
それではLinux というOS を生態学者が使うと,
どのような利点があるのだろうか.
ここでは
「プログラム開発が簡単にできる」
「作ったプログラムを簡単に『接続』できる」
この二つの特徴だけを紹介したい.
どれでもいいけれど
Linux のディストリビューションを
ひとつインストールしてみて驚くのは,
OS だけでなく多方面にわたる有用なプログラムが同時に
インストールされてしまうことである.
とくに「プログラム開発環境」の充実には目を見はるものがある.
C/C++ やFortran のコンパイラー
(gcc / g++ / g77 といったGNU のコンパイラーは
コンパイルする以外の様々な機能を持っている)
とそのディバッガー,
Make やRCS といった開発支援プログラム,
Perl やPython といったスクリプト言語,
中には
(いまの30代後半以上の人々が
「かの古き良き」と懐かしむ)
BASIC までインストールされてしまう
ディストリビューションまである.
Linux という開発環境における
プログラミングは「手軽」というほかない.
たとえばC++ で
「平方根を求めるプログラム」
を書いてみよう.
テキストエディターで,
……と記述して保存する (ファイル名はcalcsqrt.cc だとする). 次にシェルのコマンドラインからただ一行, g++ calcsqrt.cc -o calcroot……と入力すれば, ただちにコンパイルしてくれる. 上のプログラムに問題点があれば 「○行目にエラーがあります」と教えてくれる. 書き間違えなどがなければ calcroot という名の実行ファイルを新しく作る. それを動かすには「./calcroot」とだけ入力すればよい. % ./calcroot ### Square Root Calculator ### Input a real number = ? 7 Sqrt(7) = 2.64575……という出力が何とも安直に得られてしまう (一行目の% はシェルのプロンプトで…… えー,まぁわからない人はこれ以降も% は無視してください).
もっとも,
これぐらいの計算プログラムならPerl を使えば,
% perl -e 'print "\nInput a number = ? "; $_=<>; chomp; printf "Sqrt($_) = %g\n", sqrt;' Input a number = ? 7 Sqrt(7) = 2.64575……と, 一行で書けてしまう (perl ... sqrt;' まで一行になっている). 他にもいろいろなプログラミング言語が存在するのだけれど, つまりは利用者の 必要と嗜好に応じて 選べば良いのである. ……作ったプログラムをどんどん「接続」できる!
さて,
次の「ここが便利!! Linux (などUnix 的OS)」として
「プログラムの接続が容易」
について取り上げたい.
この特徴こそは
「Unix 的モノの考え方」
をよく体現している.
Linux には最初から多くのデーター処理用の
「単能プログラム」
がたくさんインストールされている.
その「単能」ぶりの一端を見ると
……
「表形式データーの指定した列だけ切り出す」
「指定した列に着目してソートする」
「ファイルの行にナンバーをつけて表示する」
「特定の文字列をみつけたら指定した文字列に変換する」
「二つのファイルを比較して違いを探す」
「ファイル中の同じ行の数を調べる」
……
ホントにこれだけしかできないのである.
孟嘗君の食客じゃあるまいし,
こんな連中がいくらそろっていても何の役にもたちそうにない.
しかしながら「パイプ」と呼ばれる‘魔法の糊’を使って,
こういう
「一芸プログラム」
あるいは自作のプログラムを
「くっつけて」いくと,
面倒な処理が意外と簡単にできてしまう.
たとえば
「毎木調査データーの樹木の本数を
種類別に数えて
本数の多い順に整列させる」
処理を考えてみよう.
データーはmaiboku.txt というテキストファイルに一行一本づつ
記されているとする.
ここで以下の一行の文字列を打ち込んでみると,
% cut -f6 maiboku.txt | sort | uniq -c | sort -nr 741 イヌブナ 605 ハクウンボク 600 サワシバ 566 アカシデ 546 オオモミジ ...... (以下略) ......……と, 簡単にできてしまった. 縦棒(|)が「パイプ」である. これが処理と処理をつないでいるのである. さてさて, この「一行プログラム」はどういう仕掛けになっているのか?
最初の
「cut -f6 maiboku.txt」
はデーターファイル`maiboku.txt' の
6列目
(ここに各個体の樹種名が記入されていた)
だけを切り出している.
次にそれを「sort」に渡すと,
無秩序に並んでいた樹種名が50音順
(正確には文字コード順)
にソートされる.
つまり元データーが
「b, d, d, a, c, b, a, d」
(コンマ(,) は改行と思ってください)
だったとすると,
sort によって
「a, a, b, b, c, d, d, d」
となってしまう.
次にこれをパイプを介して「uniq」に渡すと,
隣り合っている行の内容が同じだったらひとつにされる.
先の例で言うと
「a, a, b, b, c, d, d, d」
が
「a, b, c, d」
と変換されるのである.
このときにオプション「-c」をつけていると,
重複している行の数もついでに調べる.
つまり
「2 a, 2 b, 1 c, 3 d」
と出力してくれるのである.
最後にこれをもう一度sort に通すのだが,
このときはオプションとして「-nr」を指定している.
これは
「文字コードではなく数値の大小で並べ替えろ」
「大きい順に並べろ」
という意味である.
「2 a, 2 b, 1 c, 3 d」
という入力から
「3 d, 2 a, 2 b, 1 c」
という結果が得られる.
「調査地内の樹木の本数を種類別に数えて多い順に並べたい」
という目的は
かくのごとく「ただ一行のコマンド」にて達成されていたのである.
このようにLinux などUnix的なOS では
「ひとつひとつのプログラムは『単能』にしておく
(それゆえに汎用性を獲得しうる)」
「単能なプログラムを『結合』して複雑な処理を行う」
という明晰かつ経験にうらうちされた
原則に基づいてデーターが処理されていく.
これこそはUnix 的OS がこれまで30年近くにわたって
存続し,
今でもなお多くの分野で広く用いられている
理由のひとつに違いない.
調査地ごとにデーターフォーマットが異なる
生態学のデーター解析には,
変幻自在かつ融通無碍なUnix 的OS こそが
まさに最適な電算機環境といえるのではないだろうか.
|