1988.05 はじめての LISP

わーくすてーしょんのあるくらし (17)

1988-05 大橋克洋

< 1988.04 レーザプリンタの世界 | 1988.06 これがワークステーションだ >

ライフワークのひとつとしての電子カルテを C 言語を使って数年 越しで開発してきた。その主な機能はテキストエデイターだが、薬 剤名などのユーザ辞書を用いた入力、テキスト内指定部分の書き込 み禁止、その他種々の診療支援機能などを持たねばならない。

最近 Emacs (UNIX で使われる高機能テキストエデイター) を使うようになってから「LISPで書き直し Emacs 環 境の中で使えるようにするほうが正解でないかと思うようになった」 と以前ここに書いた。

良いと思ったことはすぐ実行するほうで、早速 LISP に挑戦する ことにした。いざとりかかってみると、LISP に関する本はいくつか 書店で手に入るが、いずれも総論的なことばかりで、実際に使おう とするとあまり参考になる本は多くない。その上 Emacs の中で使わ れているLISP は、かなり方言があるようである。

今まで BASIC, Pascal, C と色々な言語を独習してきたが、まず 最初にやってみることは同じで、画面に "Hello world !!" と表示 させること。次に何かキーボードから入力してそれを内部で加工し 、再び画面に表示させることからはじまる。ところが LISP ではそ れすらどうやったらよいのかわからない。要するにその辺のことを 書いたマニュアルがなかったというのが正しい。

結局プログラムを書き始める糸口になったのは、実際にそれで書 かれたアプリケーションのソースを読むことであった。ありがたい ことに GNU Emacs には C で書かれた Emacs そのもののソースの他 に、LISP で書かれた拡張部分のソースが沢山ついてきている。これ を読みながら、少しずつ LISP を操ることができるようになってき た。

○ Emacs 環境の LISP

が、少しずつ動かせるようになってみると大変ラクチンである。 なぜかというと、たとえばファイルを開くには(find-file"file-na me") とすればよいだけで、C のように事細かに指示を与える必要は ない。文字列の検索も (search-forward"strings") などとするだけ でよい。これは勿論それらのルーチンがすでに Emacs のツールとし て提供されているためである。

アプリケーションを書いていて、こんな機能が欲しいと思ったと き、Emacs 環境ではヘルプ機能で捜すことができる。たとえば行を 扱うコマンドが欲しければ line という単語でコマンドを捜すと、 簡単な機能説明の添えられたものが表示される。

これだけでわかりにくければ LISP のソースが入っているデイレ クトリーへ行って grep でそのコマンド名の入った行を捜し、実際 の使い方をみればよい。

いつものことで、ひとりよがりで書いていてお分かりにならない 方も多いと思うので、ここでちょっと説明を補足しておくと、GNU Emacs とは豊富な機能を持ったテキストエデイターで、それ自体 C 言語で書かれているが、同時に LISP インタープリタを内蔵してい て LISP のプログラム(LISP では式という)を load して、あたかも Emacs に備わったコマンドのように使うことができる。

これを上手に使うと Emacs を自分の好きな仕様に改造できるどこ ろか Emacs の機能を利用しながらエデイター以外のアプリケーショ ンを作ることまで可能である。

○ 開発期間の短縮

話を元に戻すと、こんなことをしながら今まで長いことかかって 書いてきた電子カルテシステムの基本部分を、LISP を勉強しはじめ て約2週間で書いてしまった。もっとも今まで一番時間のかかってき たのは、この世にまだ存在しない「電子カルテ」なるもののコンセ プトを試行錯誤で作ることだったので、概念さえでき上がっていれ ば後はそれほど大変ではないという面もある。

また「電子カルテ」はワープロ機能をその基本とするが、Emacs は十分すぎるほど豊富にその機能を持っていることも大きい。何し ろ今まで開発してきた電子カルテ C 言語バージョンは vi (UNIX で よく使われるテキストエデイター)と同じ使い心地を持ったエデイタ ー本体の作成から始まったのだから、、、

どの言語を使う場合でもそうだが、おそらく今書いている LISP のソースも、後で読み返せばきっと LISP らしからぬ文章に違いな い。BASIC のような Pascal, Pascal のような C のソースを後で読 み返して苦笑いしたことを思い出す。

○ 言語は何を使おうと同じ

しかし何はともあれ、結局はアルゴリズムが問題で、どんな言語 を使おうとたいした違いはない。ただし開発環境が整っているかど うかは大きく、この点では UNIX と C 言語の組み合わせはかなり良 いといえるだろう(Emacs と LISP の組み合わせも悪くないが、ま だ debugger がうまく使いこなせないので、その辺についてはコメ ントできない)。

とはいえ、個人的好みもあるが COBOL でのアプリケーション開発 は願い下げたい。何せあの長ったらしい文字列を打ち込まなければ ならないだけでウンザリするし(もっとも、これは Emacs のような エデイターを使うことにより、かなり楽をできるはずだが)、C の ように細かい操作が自由自在にできないし、言語自体の拡張性に乏 しいのが致命的である。

最初は楽だった LISP での電子カルテ開発も次第に内容が複雑に なるに従って、さすがに簡潔ではなくなってきた。まだまだわが腕 の未熟なる故であろう。とにかくプログラムを書くには頭を整理し 、簡潔に書くことが何より大切である。

○ ソフト開発のソフトが欲しい

最近思うのだが、世界の優秀なソフトウエアのほとんどがたった 一人、あるいはそれに近い人数の天才的な人物によって作られてい る例が多いことに気づく。しかも彼らがどのようにそれを作ったか というと、作るときは徹夜をしてでも一気に作ってしまう例が多い ようである。

これを考えるに、本格的ソフトウエアの開発に際してはその内容 を頭の中に展開しておく必要があるのではないかと思う。人間の能 力には自ずと限界があるから、天才といえども徹夜をしてでもこれ が消えないうちに一気に作ってしまう必要があるのであろう。 このようなことから考えると、まだまだコンピュータの能力は低 いと思う。

現状ではコンピュータソフトウエアの開発は頭脳労働ではなく、 まさに肉体労働に他ならない。このような肉体労働を軽減するため にこそコンピュータがあるのではないだろうか。コンピュータソフ トウエアの作成こそ、まずコンピュータに任せたい仕事である。こ のようなことを考えながら、自分の日常の道具として電子カルテシ ステムの開発を進めている。

< 1988.04 レーザプリンタの世界 | 1988.06 これがワークステーションだ >