TOP > プログラマ2.0日報 > プログラミング文章読本~Unixismと私

あすなろBlogger

facebookに投稿 このエントリーを含むはてなブックマーク このエントリーを含むはてなブックマーク このエントリーをはてなブックマークに追加 この記事をクリップ! livedoorclip ユーザー数 BuzzurlにブックマークBuzzurlにブックマーク この記事をtweetする

プログラミング文章読本~Unixismと私

2008.06.02

これは最初から書こう、と思ってたことではなくて、偶然最近、私の「書法」について同僚が「Unix風(Unixism)だよね...」と感想を漏らしたことからネタにしよう、というものです。とはいえ「プログラマ文章読本」のテーマである、「読みやすく、理解しやすいプログラムのためのTips」というテーマともマッチする話なので、この枠で紹介するのが適切でしょう。

というのは、私が仕事を始めたのはMS-DOSでしたけども、本当にプログラミングのあれこれについて、深く理解した...と思うのは、やはり Linux でいろいろと書くようになってからです。ですから「UNIXならではのプログラミングの習慣」というのが身に染みついていて、それを特に意識せずに今でも仕事で実践しているのですが、これを同僚たちが見てある意味「感心して」いたみたいなのです。じゃあ、どういう習慣かというと、

  1. 1. 設定ファイルには、「どんなオプションが設定でき、そのオプションでどんな値を取ることができるのか」をきっちり記述したコメントが大量に入っている。

というのがまず1番目の Unixism です。Unix は「テキスト文化」が徹底していますので、

設定ファイルは昔からテキストであり、どう設定するか懇切丁寧に記述したコメントが入っている

というのがアタリマエでした。ですから、私もその調子で設定ファイルに細かくコメントを書くことを、自然に憶えて実践していたわけです。これ自分で言うのも何ですが、自分で書いたプログラムでも「何が設定可能か」の詳細は忘れちゃうもので、コメントが入っていたら思い出すきっかけが出来ます。ましてや他人さんが「設定しよう」という時にこれがあるのとないのとでは大違いです....「あ、設定ファイルのコメントを見て設定してね!」の一言で済んでしまいました!

  1. 2. コマンドラインから使うツールの場合、何も引数を指定しなくて起動したら、どういう引数が可能かを示す Usage が表示される。

....これは Unix の多くのコマンドで(結果的に)実装されているやり方です。勿論、引数が何もなければ「標準入力から読んで、標準出力にデフォルトオプションで出す」という動作が正確なのですが、どうだとしても「引数なし」で起動したときに「取り返しのつかない更新動作は絶対しない」というのが暗黙の絶対ルールとしてあります。ですから、一般に「Unix コマンドが何をするのか正確に判らなければ、とりあえず引数なしで叩いてみる」というのは安全なのです(例外がないとは言いませんがね)。

勿論、多くのコマンドで(意図的に)実装されているのは、

-h または --help オプションで「どんなオプションが使えるか」を表示する usage を出す

です。とはいえ、現実的には「存在しないオプション(-で始まる)が与えられた時も usage を出す」で実装されることが多いですから、仕様は実は逆で「-h, --help を特別にハンドルするコードはなく、デフォルトの usage 表示に落ちる」というかたちで書かれていることも多いでしょう。

私はこれも実践しています。ですから、引数なしで実際の処理は走らずに、usage を表示します。まったく Unix 流です。

.....とはいえ、この2つの Unixism で具体的に記述される内容は、この「プログラミング文章読本」の趣旨から言うと、完全に「仕様」であり、ですから私は実はそのプログラムを書き始める時に、実際には「設定ファイルから」「Usage から」書き出しているくらいのものです。やはり「プログラムが何をするのか」はあらかじめ「書いてある」ほうがずっと処理をイメージしやすいのです。勿論、プログラムを書きながら、「新しいオプションを入れよう」「意外な制限があるので、その旨をコメントしておこう」と、設定ファイルや Usage に手を入れながらプログラムが書かれていくことになります....

ですから、設定ファイルや Usage はけっして「事後的に作るもの」ではなくて、プログラムを書きながら一緒に作っていくものなのです....仕事ですとプログラミングと言っても「Unix の文化」は直接に関係しない、のが一般的ですが、こういう「好影響を与える側面」というのはあるのです。奥が深い、でしょ!

ちなみにここでは主題と外れるので、特に言わなかった3点目の Unixism は、「プログラムは必ずリターンステータスを返す。正常終了なら 0、エラーならば 1」です。Java だったら、プログラムの最後で System.exit(0) で終わりましょう。Unix パイプラインで使えるようになるかもしれませんよ。

投稿者 : 杉浦 こずえ | 投稿日時 : 2008.06.02 09:35

あすなろBLOGのトラックバック・コメントは承認制になっています。
すぐにブログに反映されませんので、ご了承ください。

トラックバックURL


コメントの送信








カレンダー

<< 2008年06月 >>

1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

最新のエントリー

最新のトラックバック

最新のコメント

Tag

バックナンバー