作り手 は 道 具 を 通して 使 い 手 の 幸 せ を 願 い 、使 い 手 は 道 具 を 通して 作り手 の 幸 せ に 共 感 する 。
ISSN 2187-9664

Tukubai流
コマンド自作文化
TechLION再録

村井純

UNIXとインターネットだぁ！

山本裕介のTwitter APIで広がる

シェルスクリプトの世界茶筌匠 3代目 谷村弥三郎氏に訊く、技術者哲学

IT美女図鑑 つつみともよ

Artwork created by Koji Ishizuka. © 2012 Zie's Bank .Co,. LTD All rights reserved.

uspmag201212̲yorinuki̲cs55.indb 1

2012/12/21 2:47:14

From Editor
ノーム・チョムスキー。この方をご存じの方は少ないのではないでしょうか。科学技術賞などで賛辞されるものの、テレビなどではなかなか見られません。それもそのはず、ブッシュ政権時代のアメリカ政
府や、社会に浸透するメディアを痛烈に批判する文献を多く世に出しているからです。本質を突く彼の洞察力の源はどこにあるか、それは ” 言語の研究 ” なのです。言語学を研究し、社会の倫理・哲学の研究を経て、世界に広がる矛盾したロジックに嘆く。そして彼の言語学における研究は、情報処理の分野でも大きな功績を残しました。大岩先生の連載では、チョムスキーのお話から入ります。
TechLION 再録記事では、インターネットの父である村井純氏のトークライブの模様を収録しています。
村井先生はインターネット普及前の偉人達の数々の名言をトークライブ中に紹介されましたが、最後の質問者に対する答えが、まさに名言そのもの。エンジニアが涙する言葉とは。一方、ものづくりをする
上で大事なことも教えてくれます。
〜

人と社会に受け入れられてこそ〜

IT 美女図鑑に出てくださったつつみさんも、社会学を学ばれているそうではないですか。情報という道
具と、多様な人が瞬時につながる社会。受け手の気持ちと、どう関わるのか。今を生きる人には、一番重要な課題なのかもしれません。
特集では、コマンド自作文化というちょっとミステリアスなタイトル。コマンドというと一般的に ” そこにあるもの ” または ” すでにあるもの ” と想定される方が多いかと思います。しかし、本誌では、Open
usp Tukubai で ” 無いものは作れ ” という自立精神で作られたコマンドたちの生い立ち、すなわちコマン
ドを作るまでの過程を Tukubai 作者に取材しました。
今号のテーマの一つが「道具」です。身の回りにある「道具」、これを見る価値観に変化が生まれてくる
かもしれません。
USP MAGAZINE 編集部

Contents
特集

Tukubai 流コマンド自作文化 …………………………………………………………… 3

ユニケージエンジニアの作法

第5回………………………………………………………………………… ―会長 ……………………………………………………………

USP 友の会に 1 ページくれ ^H^H ください
今私たちは何を学ぶべきか
TechLION 再録
3 代目

第7回

大岩元

―

…………………………………………………………………… ―村井純 ―― Unix and me 〜 UNIX とインターネットだあ！ …………………………… 14

谷村弥三郎氏に訊く、技術者哲学………………………………………………………………… ―Twitter API で広がるシェルスクリプトの世界

山本裕介…………………………………………………… ―I T 美女図鑑 ―― つつみともよ …………………………………………………………………………………………… ―やわらかマッドサイエンティスツのプログラミング講座
うにっくすなやつら
漢の UNIX

第4回

第2回〜 データフローダイアグラム編 ……………

―………………………………………………………………………… ―…………………………………………………………………………………… ―後藤大地

中小企業手作り I T 化奮闘記
シェルスクリプト大喜利

長谷川猛

最終回

第5回

第7回

菅雄一

………………………………………………………………… ―……………………………………………………………………………… 18

Tech 数独……………………………………………………………………………………………………………………………

―

天地概況

奈須蛍路 ／ 編集後記 ……………………………………………………………………………………………………

―※ 薄字で記している記事は、よりぬき版には収録されておりません。また、本誌とは収録順序が若干異なります。

2

USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 2

2012/12/21 2:47:29

特集1

特集 ― 無いものは作れ Tukubai 流コマンド自作文化

無い物は作れTukubai ්ἅἰὅἛᐯ˺૨҄
USPマガジン編集部

各地で Open usp Tukubai を紹介すると、多くの人にとても興味を引かれることがある。
それは、Unix コマンドを自ら作っていくと言う習慣だ。
コマンドを作るということは、
他言語で考えれば
if や for 等の予約語を追加するようなものかもしれない。
そう考えると確かに興味深い。
だが、Unix の世界ではそれが当初のやり方だった。
コマンドを自作する文化。
この素晴らしさを、改めて伝えたい。

3

uspmag201212̲yorinuki̲cs55.indb 3

2012/12/21 2:47:29

第一章 共通部品でない、道具を作るということ
具が持ち合わせるべき三つの性質を記す。

Open usp Tukubai は、何のために生まれたか

一、単機能であって汎用性がある。
二、インターフェースが決まっているが、逆にそれさえ2012 年の今年、USP 研究所は Open usp Tukubai と名付

守っていれば他には一切の制約がない。

けた Unix シェル向け追加コマンドセット（通称 Tukubai コ

三、同じものを発明する気を起こさせない。

マンド）をリリースした。

更に付け加えるなら、「作ってみればあって当たり前の存

名称の一部となっている “Tukubai” は、このコマンドセッ

在」、「何処の誰もが使えるもの」などとも言いたいところだ。

トに付けた単なる名前ではない。オープンソースやオープン

これらの性質を満たしているものは、世の中の様々な分野にプラットフォームの「ソース」や「プラットフォーム」など

おいて、作業を効率的に熟すうえで必要不可欠なものに成りと同様に、ある一つの概念を指し示す用語なのだ。この「あ得る。勿論、ソフトウェアの世界においても例外ではない。

る一つの概念」を端的に言い表す用語というものが存在しな

身近にある道具と呼ばれるものを色々思い浮かべてもらいかったため、USP 研究所がコマンドセットのリリースに合わたい。それらがこの三つの性質を満たしているかどうか考えせて新たに定義したものなのである。

てみれば、ここで言わんとしている道具がどういうものであ本誌もこれまでこの語を度々用いてきたが、ここで改めて
Tukubai の意味を記すことにする。

Tukubai とはるかが見えてくるだろう。

身の回りにある例
例えば西洋料理を食す際に使うナイフやフォーク、スプー
ンの類。これは道具であろう。西洋料理を食す時は誰もが使Unix 哲学や “Software Tools”（B.W.Kernighan、
P.J.Plauger

うし、同種のものを発明する気も起らない。インターフェー

著）等の作法を忠実に受け継ぎ、進化させたシステム構スについて考えてみても、どれも片手で持って使うようにで築法。同音である蹲（蹲踞とも記す）という道具が用いきているし、皆棒状の形で大きさや重さ等も概ね揃えられてられる茶道の精神に通じるものがあることからこの名をいる。もし違っていたら、揃えるべく、きっと誰かが同じ類付けた。

のものを発明しているに違いない。

つ ま り Tukubai は 一 種 の 思 想 で あ り、 そ の 源 流 は、Unix を生み出した先人たちの哲学にある。そしてこの哲学を受け継ぎ、進化させ、USP 研究所なりに具現化したものが Open usp Tukubai なのだ。将来 Tukubai という語が一般化し、Tukubai の思想に基づいてある人 X
がコマンドセットをリリースするなら、それは Open X
Tukubai と呼ぶべき存在になるかもしれない。

一方で共通部品的な物とは、複数の道具をくっつけてみた
り、よくある道具の形をちょっとだけ変形してみたり、といった俗に言うアイデア商品の大部分のものではないだろうか。
それらは特定の作業には驚く程の利便性を発揮するが、汎用性が乏しいために歴史の一部となるほどには普及しない。そして似たようなものが再発明されたりもする。

従って Tukubai コマンドは、実はその表面的な姿（書式や仕様、種類）が重要なのではない。重要なのは、コ
マンドセット全体としてどんな役割を果たしているかである。そして Tukubai コマンドが果たすべき役割とは、
ソフトウェア開発における「道具」になることである。

「道具とは何か」を理解する
Tukubai が指し示す「道具」は、共通部品とは明確に区別される。では、共通部品ではない道具とは何なのか。まず道4“Software Tools” の邦訳版「ソフトウェア作法」（共立出版）。30 年以上発行され続けている名書である。

USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 4

2012/12/21 2:47:34

特集 ― 無いものは作れ Tukubai 流コマンド自作文化
ソフトウェアにおける例
そして、ソフトウェアにも道具的なものと共通部品的なものがある。ある程度汎用性があり、再利用可能なコードを集めたものとされるライブラリーは、その両方を持ち得る。

が既に決められていて汎用性は無く、インターフェースが決まっているかという性質に照らし合わせてみても当てはまり難い。これらはむしろユーティリティーと呼ぶべきものであろう。
このように Unix のコマンドにおいても、道具的なものと

例えば、Microsoft Visual C++ には通称 MFC と呼ばれるクユーティリティー・アプリケーション的なものがある。そしラスライブラリーがある。これは C++ による Windows プて、道具的と呼ぶべき Unix コマンドは、どれも共通した下

ログラミングを容易にするためのものであり、数百個ものク記の作法を概ね守っている。

ラスが用意されている。しかしそれらを全てを把握して使い◆ データのやりとりに標準入出力を使うこなしている人は恐らく少数だろう。その一方で、C 言語の◆ 入出力データをテキストデータとする

文字列変数の扱いづらさを補完する CString のように、MFC

道具は、組み合わせて使うことで真価が発揮される。従っを利用する人の大多数が利用するクラスもある。このようなて、組み合わせて使えるようにすべく、このような作法が生違いというのも、先に記した三つの性質の有無によるところ

まれたのではないだろうか。Unix において偉大な発明の一が大きい。

つであるパイプ（パイプライン）も、そのような背景から生ユーティリティー、アプリケーション

まれたに違いない。
そして Unix シェルやシェルスクリプトも上記の作法を守類似の用語に、ユーティリティー、アプリケーションといっ

るうえで実に適した仕様になっている。道具たるコマンドをたものがあるが、これらもここで言う道具とは違う。ユーティ

予約語のような感覚で呼び出せ、組み合わせられる。時にはリティーは例えば、バックアップソフトとかテキストエディ“if [” などのように、予約語とコマンドが密接に結び付くこターといった物を指すが、単機能とは限らないし、インターともある。

フェースも様々だし、同様のものが様々作られる。アプリケー

こういった仕様は、Unix 発明者達の思想の表れであって、ションはさらに複合的な機能を有する物を指し、それ単体の「道具をもってして問題を解決するのが Unix シェル」という使用で大きな目的を達成できる。これらも勿論有用なものだ

ことを言わんとしているのではないだろうか。

が、単体では目的を達成できない代わりに組み合わせ次第で*1 vi は好みが別れそうだが、何らかのテキストエディターは使うだろう。

如何なる目的にも対応できる道具とは方向性の違うものだ。
道具とは何か、ご理解いただけただろうか。これが道具であるかどうかという上記の例は、明確な基準に基づいたものではないため、あまり心地良いものではないかもしれない。

える人が多くいるかどうかだ。多くの人が支持するからこそ

専門性

しかし確実に言えることは、三つの性質を満たしていると思

アプリケーション

物は道具になれる。逆に、それは見る立場によって判断が分かれ得るものであるから、特定の地域や時代、或いは特定のユーティリティー

分野でのみ道具として認知されるものもある。

（共通部品的なもの）

Unix における道具とはを果たすべく作られたものである。しかしそれ以前に、Unix
シェルに用意されている標準コマンドには、先に記した三つ（道具的なもの）

汎用性

既に述べたとおり、Tukubai コマンドは道具としての役割

ライブラリー

道具（ツール）の性質を満たす道具的なものが数多くある。
例えばテキストフィルターに分類される AWK, grep, sed,tr などは道具的であると言えるだろう。一方で、パスワー
ドを設定する passwd コマンドやテキストエディターである*1

道具に類する用語の整理。ユーティリティー、アプリケー
ションと呼ばれるものになるに従って、汎用的な用途か
ら専門的な用途へと変化する。ライブラリーは部品であるが、汎用的なものもあれば専門的なものもある。

vi といったコマンドは誰もが使うところであるが、使い方

5

uspmag201212̲yorinuki̲cs55.indb 5

2012/12/21 2:47:38

第二章 sm2 コマンドという道具の発明
道具になることを目指して作られた Open usp Tukubai。
それを構成している 49 のコマンド群。実際これらはどのよ
うにして生まれたのだろうか。そのうちの一つで、表の合計値を求める sm2 コマンドの生い立ちを取材した。

う仕様なんだ？知ってるコマンドで事足りるならそれで済ませといてくれればいいのに」と。
そう、コマンドを作る時には未来の開発者の姿を思い浮かべることが重要なのだ。
§ こんなのがあったらきっと便利だろうなー。

sm2 コマンドとは§ でも、いっぱい作っちゃったら不便だろうなー。

Open usp Tukubai の sm で始まるコマンドは sum-up とと。そんな葛藤の末、それでも「未来の開発者達も、これいう表計算の世界で頻出の操作を行うシリーズだ。sm2 のがあればきっと便利になるはず！」と思えたらなら作ればい

場合、例えば下記のように生徒の各教科のテスト成績表があい。

ると、これに基づいて生徒毎の合計を求めるなどという用途に用いられる。

§ 末永く使われますように。

そう心で祈りながら……。
๑५ྖ̩ͭ!!!‫!ࢊם‬86๑५ྖ̩ͭ!!!ତ‫!ڠ‬:9๑५ྖ̩ͭ!!!࣭ࢊ!85߃ࢺໍঊ̯ͭ!‫!ࢊם‬:6߃ࢺໍঊ̯ͭ!ତ‫!ڠ‬95߃ࢺໍঊ̯ͭ!࣭ࢊ!91ಎ५̯ࣝͭ!!!‫!ࢊם‬:4ಎ५̯ࣝͭ!!!ତ‫!ڠ‬83ಎ५̯ࣝͭ!!!࣭ࢊ!:8๑५ྖ̩ͭ!!!358߃ࢺໍঊ̯ͭ!36:ಎ५̯ࣝͭ!!!373

sm2：数値を縦（行）に合計
この例では第 1 フィールド（名前）が同じ行の第 3 フィールド（点数）合計
し、各個人の合計点を出している。

それではこの sm2 コマンドの進化の過程を見ていくこと「そんなコマンド本当に必要なの？」USP 社内では毎週、エンジニアたちが寄ってたかって未来に求められるコマ
ンドについて語り合う「コマンド研究会」と呼ばれる会議が開かれている。

にしよう。

１．未来の開発者を想像してみる
頻出の操作であるなら迷うことなく作ればいいじゃないか

２．作業指示の言葉をよく観察してみると思うだろう。いやいや、そこで冷静にならなくてはならない。「道具として本当に必要なものなのだろうか」と、考え作るからには末永く使われるものになれなければ迷惑だ。

るのだ。「既存コマンドをちょっと工夫して使えば無くてもだから使いやすい仕様を心掛ける。コマンドの場合、書式いいかも」、そう思えるかもしれないから。

が作業指示の写像になっていることが重要だという。ではあれば便利だろうと言ってコマンドを乱立させても、数が多いと覚えきれない。そういう宿命がある。すると、存在意
義の薄いもの、使用頻度の低いものからどんどん忘れ去られ

sm2 はそうなっているのか？
sm2 を作り始める前、表計算を行っていた作業現場では
次のようなセリフが飛び交っていたという。

*2

ていく。

USP 研究所にも、忘れ去られて今やハードディスクの肥や*3しとなっているコマンドが何百とあるという。 そうなってその表の 1 列目から 2 列目をキーにして 3 列目から 6 列目の合計を出して！

しまう未来が思い浮かぶなら、作るだけ無駄だ。無駄なだけだから sm2 は、この文章をほぼ過不足無く表現できるよ

でなく、そのコマンドの含まれるコードを読む未来の開発者*2 どの言語も予約語が数十〜百数十個程度に落ち着いている理由は、そういうところにあるのだろう。
*3 次章でいくつか紹介しよう。

が苦労することになる。「あれ、このコマンド……。どうい6

USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 6

2012/12/21 2:47:40

特集 ― 無いものは作れ Tukubai 流コマンド自作文化
うな書式にした。結果、決められた sm2 の書式がこうだ。
Vtbhf!;!tn3!\,dpvou^!=l2?!=l3?!=t2?!=t3?!=gjmf?
先のセリフをこの書式に当てはめればこうなる。
tn3!2!3!4!7!̷͈ນ

コマンド併用でいいじゃないか、という意見が出てくるのと同じことだ。
オプションもまた、付けるべきか付けざるべきか。或いは増やすぐらいなら別コマンドにすべきか。よく検討したい。
最後に、sm2 の書式に対して抱くであろう疑問について答えておこう。例えば「3 番目から 5 番目、それから 7 番目

オプションの “+count” を除けば、「合計を出す」という動の合計を出して」というように、k1 〜 k2 や s1 〜 s2 が不連

詞がコマンド名に、他の名詞が書式にピタリと当てはまって続な指示が与えられたらどうするのかというものだ。確かにいる。このように現場で頻繁に飛び交っている指示の写像に

sm2 の書式では表現できない。では改良を検討しているのなっていれば、覚え易いし、また頻繁ゆえ忘れ去られる可能かというと sm2 にその予定は無いらしい。この判断も現場性も少なく、道具として認知される存在に成り得る。

で飛び交うセリフに基づいている。そのような指示は稀だっ単純でも頻繁に飛び交う動詞なら作る
今、「動詞がコマンド名になっている」と述べたことに注目してもらいたい。
sm2 の話から少し外れるが、例え既存のコマンドのごくたのだ。そんなレアケースのために書式を複雑にしたら途端に使い辛くなる。もしそんな指示が来るなら self コマンド等と組み合わせ、列が連続するように予め入れ替えるべきだ。
こういったコマンドに持たせる機能のさじ加減を見極める上でも作業指示の観察は重要なのだ。

簡単な応用で実現できることであっても、敢えてコマンド化
した方がよい場合がある。それは、作業指示として頻繁に耳にする動詞があった場合だ。
例 え ば Tukubai コ マ ン ド に gyo と い う も の が あ る。 これは単にテキストの行数を求めるだけであり、“wc -l | awk'{print $1}'” とか “awk 'END{print NR}'” などとやれば簡単に求められる。それでもコマンド、つまり道具として成立したのは、「行数求めて」という指示（動詞）が現場で頻繁に飛び交っていたこと、そして gyo コマンドの仕様がピタリとその指示の写像になれていたからである。
このケースからも、言葉の観察がいかに大切かということがわかる。

オプションの扱い
sm2 には一つだけオプションがある。これは各々の合計を出すのに使った元の行が何行あったのかを併記するものだ。最初の成績表の場合、各生徒の受けた科目は三つだったので 3 という数字を返す。後続のコマンドで平均点を求めたいという場合に有効だ。

新機能が求められた時、新規コマンドで対応するか、追加オプションで対応するか。これも重要な議題だ。

しかし Tukubai 的には、どうしようもない場合でもなけ
ればオプションなど殆ど付けないという。オプションもコマ

３．始めは軽量言語（LL）で実装してみる

ンド同様、乱立させても覚えきれずに忘れ去られるからだ。
例えば有名な ls コマンドの -r オプションの働きを知ってOpen usp Tukubai の有償版（ビジネス版）のコマンドのいるだろうか？ファイルの表示順が通常なら文字コード昇順

殆どは C 言語で実装されているが、最初はどれも AWK やシェであるところを降順にするものだ。しかし、文字コード順でルスクリプトで作られたという。まだ定番の道具になるかわ

はなくて大文字小文字を区別しない（辞書的な）降順にしからず、廃れたり、試行錯誤によって仕様が変わる可能性もたければ……、結局 sort コマンドを併用するしかない。な考えれば、未来の開発者にとってもコマンドの動作が追いや

らばそんなマイナーなオプションなど用意せず始めから sort

すい言語を使うべきだ。

7

uspmag201212̲yorinuki̲cs55.indb 7

2012/12/21 2:47:42

こうして、sm2 も当初は AWK で実装された。残念ながら50 行程で書けてしまう。

AWK で書かれていた頃のバージョンは発掘できなかったが、全てがそうとは限らないが、優れた道具とは概してこのよ+count オプションをサポートしないごく簡易的なものならうに単純な構造をしているのだろう。もし何百行にも及ぶよ

リスト１のように直ぐに書き起こせてしまう。

うなものができてしまったら、それは単機能なものになって

sum-up という操作は表計算では頻出なので、実際 sm2

おらず、道具として洗練されていないのかもしれない。

は多用され、重宝される道具になっているのだが、こうして

４．C 言語への移植は、本当に必要とされてからリスト１．当時の sm2 を AWK で復元してみたもの*4

その後、sm2 コマンドは C 言語へと移植されていった。
2!$"!0vts0cjo0bxl!.g
3!
4!CFHJO!|
5!!!jg!)BSHD!=!5*6!!!!!fyju!27!!!l2>BSHW\2^
8!!!l3>BSHW\3^
9!!!t2>BSHW\4^:!!!t3>BSHW\5^21!!!jg!)l2!l3!t2!t3!!0\_1.:^0*22!!!!!fyju!223!!!jg!))l2!?!l3*!}}!)t2!?!t3**24!!!!!fyju!225!!!jg!))l2!=!2*!}}!)t2!=!2**
26!!!!!fyju!227!!!gjmf!>!)BSHW\6^!">!##*!@!BSHW\6^!;!#.#
28!!!wbmvf\1^>1
29!!!efmfuf!wbmvf\1^
2:!
31!!!jg!)hfumjof!=!gjmf*!|
32!!!!!lfz`pme!>!%l2
33!!!!!gps!)j>l2,2<!j=>l3<!j,,*34!!!!!!!lfz`pme!>!lfz`pme!#!#!%j35!!!!!gps!)j>t2<!j=>t3<!j,,*36!!!!!!!wbmvf\j^!,>!%j37!!!!!xijmf!)hfumjof!=!gjmf*!|
38!!!!!!!lfz!>!%l2
39!!!!!!!gps!)j>l2,2<!j=>l3<!j,,*3:!!!!!!!!!lfz!>!lfz!#!#!%j41!!!!!!!jg!)lfz!">!lfz`pme*!|42!!!!!!!!!qsjou`upubm)*
43!!!!!!!!!gps!)j!jo!wbmvf*
44!!!!!!!!!!!efmfuf!wbmvf\j^45!!!!!!!~
46!!!!!!!gps!)j>t2<!j=>t3<!j,,*47!!!!!!!!!wbmvf\j^!,>!%j48!!!!!!!lfz`pme!>!lfz
49!!!!!~
4:!!!~
51!
52!!!qsjou`upubm)*
53!~
54!
55!gvodujpo!qsjou`upubm)*!|56!!!qsjoug)#&t#-lfz`pme*
57!!!gps!)j>t2<!j=>t3<!j,,*58!!!!!qsjoug)#!&e#-!wbmvf\j^*59!!!qsjou!##
5:!~

8

次第に道具としの必要性が認知され、不可欠な存在となって、そこで初めてこのコマンドに対してスピードを求められるようになったからだ。
C 言語に移植後は、C 言語の鬼によって更なる高速化のための改良が続けられているという。高速化の作業に専念する
為にも、LL 版で仕様をきっちり固めておくべきであろう。

ソースファイルは大抵一つ
sm2 の C 言語版ソースファイルは、ライセンスの都合により残念ながら掲載できないが、ソースファイルは sm2.c*5の 1 つだけだ。 これは Tukubai コマンドの殆どに言えることである。もっとも、AWK 版ソースの規模を見れば自明だ
ろうし、同規模の Unix 標準コマンドの多くも一つだ。
一つなので Makeﬁle は不要。“cc -o sm2 sm2.c” などと書き、コンパイルが通るまで数秒待てば完成だ。
こんなあきれるほど簡単なコマンドやシェルスクリプト
によって、一部の大手企業の業務データが管理されている*6と聞かされたら唖然するに違いない。しかし、優れた「道具」とは、そんなことをも可能にしてしまうのだ。
*4 これが、ビジネス版の usp Tukubai として現在に至る。
*5 もちろん標準ライブラリー等をインクルードしてはいるが。
*6 通信や WebUI 周りが必要な箇所では、Apache 等の HTTP サーバーアプリケー
ションのお世話になるのだが。

USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 8

2012/12/21 2:47:46

特集 ― 無いものは作れ Tukubai 流コマンド自作文化

第三章 道具を夢見たコマンドたち
USP 研究所は、前時代を含めてこれまで 2000 個にも及ぶコマンドを作ってきたという。多い日は 1 日で 10 個作ったこともあったのだとか。しかしそれら大半のコマンドが淘汰されていったことは、今の Open usp Tukubai のコマンドの数を見れば容易に想像がつく。
「道具とは何たるか」などと偉そうなことを語っておきな

使い方と動作例?!fdip!#bb!cc!cc!cc!cc!cc2!dd#!}!zvojr
bb!cc!cc2!dd?!fdip!#bb!cc!cc!cc!dd!cc#!}!zvojr
bb!cc!dd!cc?

がらこれは一体どういうことか！とツッコミを入れたくなる
ところではあるが、そういう歴史があるからこそ道具の本質

スペース区切りで、同じ綴りの文字列が連続してるとそれを見極め、そして Tukubai の思想を確立させられたのだろう。

を一つに集約する。ただし、連続せずに出現したものに関し

そこでこの章では、そんな道具を夢見て生み出されながらては集約されない。このあたりの仕様は uniq コマンドと同淘汰されていったコマンドや、これから道具として活躍する
可能性を秘めたコマンドなど、いくつか紹介していこう。

その１．yuniq コマンド
uniq コマンドの横方向版「横 uniq」ということで登場したコマンドだ。その名のとおり、横方向に uniq がなされる。

様に作られている。

ソースコードリスト２に全体を掲載する。勿論 cc でコンパイル可能だ。

道具になれなかった理由とは
yuniq 無しに横方向 uniq をせよ、と言われたらどうやる

リスト２．yuniq.c（横ユニーク）…横方法に uniq 処理を行うコマンドのソースファイル
2!0+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+0
3!0+!zvojr/d!???!˟࡞ࢊๅ˵˱˪˥˭!!!!!!!!!!!!+0
4!0+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+0
5!0+!Vtbhf!;!zvojr!=!jogjmf!!!!!!!!!!!!!!!!!!!!+0
6!0+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!+0
7!0+!Xsjuufo!cz!O/Upvoblb!)vtc.mbc*!!!!!!!!!!!!+0
8!
9!$jodmvef!=tuejp/i?
:!$jodmvef!=tusjoh/i?
21!
22!$efgjof!CVGNBY!2135
23!dibs!SFDPSE\CVGNBY^-PVUCVG\CVGNBY^<
24!
25!wpje!usjn)*<
26!dibs!+feju)*<
27!
28!nbjo)jou!bshd-dibs!++bshw*
29!|
2:!GJMF!+gq<
31!
32!!!!!0+!වႁέ͹ͼσ͈৾ං!+0
33!!!!!jg)2!">!bshd*!!!|
34!!!!!!!jg)OVMM!>>!)gq!>!gpqfo)bshw\2^-#s#***!|
35!!!!!!!!!gqsjoug)tuefss-#Fssps!;!&t!έ͹ͼσ̦΂Ȝίΰ̵̧ͭ͘/]o#-bshw\2^*<36!!!!!!!!!fyju)2*<
37!!!!!!!~
38!!!!!~
39!!!!!fmtf!gq!>!tuejo<

3:!
41!!!!!0+!‫ڎ‬τ΋ȜΡੜၑ!+0
42!!!!!xijmf)OVMM!">!ghfut)SFDPSE-CVGNBY-gq**!!|
43!!!!!!!usjn)SFDPSE*<!!!!!!0+!ါCPGచॐ"!+0
44!!!!!!!!!!!tusdqz)PVUCVG-feju)SFDPSE**<
45!!!!!!!qsjoug)#&t]o#-PVUCVG*<
46!!!!!~
47!
48!!!!!0+!උ͙৾ͤ΀ρȜΙͿΛ·!+0
49!!!!!jg)"gfpg)gq*!}}!gfssps)gq**!|
4:!!!!!!!gqsjoug)tuefss-#Fssps!;!වႁέ͹ͼσඋ͙৾ͤ΀ρȜ/]o#*<51!!!!!!!fyju)2*<
52!!!!!~
53!
54!!!!!0+!ਞၭ!+0
55!!!!!fyju)1*<
56!~
57!
58!
59!0+!τ΋ȜΡ͈Όηͬ৾ͥ!+0
5:!wpje!usjn)dibs!+cvg*
61!|
62!
63!!!!!0+!࣐ྎ͈٨࣐໲লͬॉੰ!+0
64!!!!!jg)(]o(!>>!+)cvg,tusmfo)cvg*.2**!+)cvg,tusmfo)cvg*.2*!>!(]1(<65!
66!!!!!0+!࣐ྎ͈ߗฒͬॉੰ!+0
次ページへ続く→
9

uspmag201212̲yorinuki̲cs55.indb 9

2012/12/21 2:47:48

67!!!!!0+!ߗฒ̺̫̥ͣ̈́ͥΟȜΗ͈͒చ؊̦ຈါ"!+0
68!!!!!xijmf)(!(!>>!+)cvg,tusmfo)cvg*.2**!+)cvg,tusmfo)cvg*.2*!>!(]1(<
69!
6:!!!!!sfuvso<
71!~
72!
73!
74!0+!zvojr!ੜၑ࣐̠ͬ!+0!
75!dibs!+feju)dibs!+cvg*
76!|
77!dibs!xcvg\CVGNBY^-scvg\CVGNBY^<!0+!ါCPGచॐ"!+0
78!dibs!pme\211^-ofx\211^<
79!dibs!+q-+r-+s<
7:!
81!!!!!0+!ैުႀ֖͈੝‫!اܢ‬+0
82!!!!!q!>!xcvg<!tusdqz)q-cvg*<
83!!!!!s!>!scvg<!+s!>!(]1(<
84!!!!!+pme!>!+ofx!>!(]1(<85!
86!!!!!0+!‫ڎ‬έͻȜσΡͬ୨ͤ੄̳!+0

87!!!!!xijmf)OVMM!">!)r!>!tusupl)q-!#!#***!|
88!
89!!!!!!!0+!ஜࢃ͈έͻȜσΡ͈਋ള̱!+0
8:!!!!!!!!!!!tusdqz)pme-ofx*<
91!!!!!!!tusdqz)ofx-r*<
92!
93!!!!!!!0+!ஜ͈έͻȜσΡ͂։̞̹̈́̽̀ͣႲࠫ!+0
94!!!!!!!jg)OVMM!">!tusdnq)pme-ofx**!!!|
95!!!!!!!!!tusdbu)s-ofx*<!tusodbu)s-!#!#-2*<
96!!!!!!!~
97!
98!!!!!!!q!>!OVMM<
99!!!!!~
9:!
:1!!!!!0+!डࢃ͈ߗฒͬॉੰ̳ͥ!+0:2!!!!!+)s,tusmfo)s*.2*!>!(]1(<:3!
:4!!!!!sfuvso!s<:5!~

だろうか。Tukubai コマンドを使えば次のように書ける。

を 1（＝ある）または 0（＝なし）で返してくれる。一方?!fdip!vojṟ̹̞໲লႥ !}!ubss!}!vojr!}!zbss"-display" というオプションを付け、有無を調べたいファイ
ルリストを標準入力から渡せば、存在しないファイルがフィ

つまり、単語を一旦縦に並べてソートして、横に並べ直せ
ばいいというわけだ。
横方向 uniq の使用頻度がそう高くなかったために、ユニケージエンジニア達もこのコマンドを覚える機会なかった。 そ の う え、 た ま に 横 方 向 uniq が 必 要 に な っ た 時 もtarr → uniq → yarr の組み合わせで事足りてしまったためにいつしか忘れ去られてしまった。

その２．exist コマンド

ルタリングされ、存在するファイルのみなって標準出力される。（"-display2" オプションにすると動作が反転する）

ソースコード
残念ではあるが長いため割愛させていただく。しかしながら、中身は C 言語で書かれている。

道具になれなかった理由とはファイルの有無を確認したいなら、わざわざ新しいコマン
ド覚えて使わずともシェルスクリプトのファイル演算子（"-f"名前のとおり、ファイルの有無を返すコマンドだ。「それだけ？」と思うかもしれないがそれだけだ。ただし、標準出力から有無を調べたいファイルを一覧として受け取れるようなっている。

使い方と動作例?!fyjtu!0fud0sftpmw/dpog
2?!fyjtu!0fud0op`tvdi`gjmf
1?!fdip!#0fud0sftpmw/dpog#!!?!!gjmfmjtu/uyu?!fdip!#0fud0op`tvdi`gjmf#!??!gjmfmjtu/uyu?!fyjtu!.ejtqmbz!=!gjmfmjtu/uyu
0fud0sftpmw/dpog?

ファイル名を引数で直接指定すればそのファイルの有無

や "-e"）を使えばいいと誰でも想像が付く。それゆえに廃れていったのだろう。
「そんな未来が容易に想像できるにも関わらず、何故わざ
わざこんなコマンドを作るという愚行に及んだんだ！」そう思うかもしれない。しかし実は、擁護すべきある一つの意図があった。
複数あるファイルの有無確認を、シェルスクリプトや標準の Unix コマンドの範囲で行おうとするとループ構文が必要*7になる。 しかし、これはパイプで処理をこなす合理性を追求するユニケージ開発手法からすると避けたい手段だったのだ。ゆえに、このコマンドに関しては今でもこのために要・不要論が巻き起こるのだという。

*7 実は “xargs ls -1 2>/dev/null” などとやれば出来なくはないのだが、内部的にエラーが起こり、戻り値も 0 にはならない。従って最善の方法とは言い難いのだ。

10 USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 10

2012/12/21 2:47:49

特集 ― 無いものは作れ Tukubai 流コマンド自作文化
その３．seniq コマンド

ソースコード
リスト３に全体を掲載する。珍しいことに C シェルで書由 来 は “select ﬁeld and uniq” だ と い う。 つ ま り、 今 のTukubai の self コマンド＋ uniq コマンドだというのだが。

使い方と動作例?!dbu!਩ྎ͈ထ೰/uyu
୶਩ྎ!ಱ༷!ু఺!໐‫ؚͬ‬௉ੰ
୶਩ྎ!ࡿࢃ!ু఺!EWE‫ۻ‬ર
୶਩ྎ!࿡‫!఺ু!ۼ‬ઘරΩȜΞͻȜ
ြ਩ྎ!ਞ඾!സඤ!๼੅‫܁‬੘ͤ
?!dbu!਩ྎ͈ထ೰/uyu!}!tfojr!2!4
୶਩ྎ!ಱ༷!ু఺!໐‫ؚͬ‬௉ੰ
ြ਩ྎ!ਞ඾!സඤ!๼੅‫܁‬੘ͤ
?
基本的な機能は uniq コマンド同様「行の集約」であるが、*8かれている。

このコマンドの意図
こんな特殊な働きをするコマンド、一体どんな用途を想定して作ったというのだろうか。それは、例えばこういう用途である。

銘柄 日付 時刻 株価という 4 フィールドから構成された株式チャート表がある。銘柄・日時毎に取引開始から終了まで 1 分
刻みで株価が記録されている。この表から各銘柄の毎日の始値を抽出してもらいたい。

上記の動作例の場合、最初の 3 行は引数で指定された第 1、第 3 フィールドがいずれも一致しているので（最初の行に）

この時、seniq 1 2 とすれば、銘柄・日付毎の始値を抽出

集約される。一方、4 行目は第 3 フィールドが一致しておらず、この行だけ集約されずに出力されたというわけだ。

*8 本誌はシェルスクリプトをメインに扱う雑誌でありながら、C シェルによるソースコードが登場するのは何とこれが初めてである！

リスト３．seniq…一部のフィールドだけを見て uniq 処理を行うコマンド（なんと C シェルで書かれている）
2!$"0cjo0dti!.fg
3!$
4!$!tfojr!???!ঐ೰έͻȜσΡ͈͙́vojrੜၑ࣐̠ͬȃ
5!$!!!!!!!!)tfojr!??!tfmfdu!gjfme!boe!vojr*
6!$
7!$!Vtbhf!;!tfojr!g2!g3!///!=!jogjmf!?!pvugjmf
8!$9!$!Xsjuufo!cz!O/Upvoblb!)vtq.mbc*:!
21!$ίυΓΑ͈̅̀৾ං
22!tfu!unq!>!%%
23!
24!$ैުΟͻτ·Πς͈୭೰
25!tfu!e!!!>!0unq
26!
27!$΋ζϋΡ੥৆͈ນা
28!jg)%$bshw!>>!1*!uifo29!!!fdip3!#Vtbhf!;!tfojr!g2!g3!///!=!jogjmf!?!pvugj
mf#
2:!!!fyju!2
31!foejg
32!
33!$වႁέ͹ͼσ͈൳೰
34!jg)"!.f!%bshw\%$bshw^*!uifo35!!!dbu!.!?!%e0%unq.12
36!!!tfu!gjmf!>!%e0%unq.12
37!!!tfu!ejg!!>!1
38!!!hpup!OFYU
39!foejg
3:!
41!tfu!n!>!2
42!xijmf)2*

43!jg)"!.f!%bshw\%n^*!uifo44!!!!!A!n!,,45!fmtf
46!!!tfu!gjmf!>!#%bshw\%n.%$bshw^#
47!!!A!ejg!!>!%$bshw!.!%n48!!!A!ejg!,,49!!!csfbl
4:!foejg
51!foe52!
53!OFYU;54!$έ͹ͼσ͈ంहΙͿΛ·
55!jg)"!.f!%gjmf*!uifo56!!!fdip3!#Fssps!;!%gjmf!έ͹ͼσ̵̦̜ͤͭ͘#57!!!fyju!2
58!foejg
59!
5:!A!o!>!%$bshw!.!%ejg
61!
62!$ΓΣȜ·༎ਬ̳ͬͥ˝˳˧Α·ςίΠ
63!dbu!==!GJO!?!%e0%unq.13
64!OS>>2!|!
65!!!b>#%bshw\2.%o^#<!o>tqmju)b-y-#!#*
66!!!n>2
67!!!gps)j>2<j=>o<j,,*!|
68!!!!!!!!!!!jg)y\j^0]00*!|
69!!!!!tubsu>usbotovncfs)tvctus)y\j^-2-joefy)y\j^-#0#*.2**
6:!!!!!mbtu!>usbotovncfs)tvctus)y\j^-joefy)y\j^-#0#*,2**71!!!!!gps)l>tubsu<l=>mbtu<l,,*!|!z\n,,^>l!~72!!!!!~
次ページへ続く→

11

uspmag201212̲yorinuki̲cs55.indb 11

2012/12/21 2:47:50

73!!!!!fmtf!!z\n,,^>usbotovncfs)y\j^*74!!!~
75!!!n..
76!!!psf>osf>]%1<!pme>ofx>nblfsfdpse)*
77!~
78!
79!|
7:!!!ofx>nblfsfdpse)*81!!!jg)pme!">!ofx*!!|!qsjou!psf<!pme>ofx<!psf>]%1!~
82!~
83!
84!FOE!|!jg)gmh>>2*!fyju<!qsjou!psf!~
85!
86!gvodujpo!nblfsfdpse)*!|87!!!t>##<!gps)j>2<j=>OG<j,,*!!|
88!!!!!gps)k>2<k=>n<k,,*!jg)j>>z\k^*!|!t>t!#!#!]%j<!
csfbl!~
89!!!!!~
8:!!!sfuvso!tvctus)t-3*

できるというわけだ。
このように、ある項目の先頭行だけを取り出してもらいた
いという需要はよくあることである。しかしながら、これを既存 Unix コマンドやその簡単な組み合わせで実現することは難しく、そうした経緯で生み出されたコマンドだったのだ。

道具になれなかった理由とは
seniq 自体は淘汰されたが、同様のものが “getﬁrst” という名前の Tukubai コマンドとなってリリースされた。
「名が体を表していない」ために名前が変えられたということだ。確かに getﬁrst という名の方が直感性に優れている。
そして、兄弟コマンドとして “getlast” もリリースされた。
また一致を確かめたいフィールドの指定方法も、個々に列挙するのではなく範囲指定に変更された。これは前章で述べ

91!~
92!
93!gvodujpo!usbotovncfs)r*!|
94!!!htvc)#OG#-OG-r*
95!!!qq>joefy)r-#.#*
96!!!jg)qq!">!1*!r>tvctus)r-2-qq.2*.tvctus)r-qq,2*
97!!!sfuvso!r,1
98!~
99!GJO
9:!
:1!$৘ष͈༎ਬ
:2!bxl!.g!%e0%unq.13!%gjmf:3!
:4!$֚শέ͹ͼσ͈ੰ‫ݲ‬:5!$sn!%e0%unq.+:6!
:7!$ୃુਞၭ
:8!fyju!1?!dbu!OjqqpoTfsjft3123/uyu
ల2୽!2ٝນ!඾ËÒ!1
ల2୽!2ٝၔ!‫!૽ݴ‬1
ల2୽!3ٝນ!඾ËÒ!1
ల2୽!3ٝၔ!‫!૽ݴ‬1!!!!!;
ల3୽!2ٝນ!඾ËÒ!1
ల3୽!2ٝၔ!‫!૽ݴ‬2!!!!!;!!!!!;
ల6୽!3ٝນ!‫!૽ݴ‬3
ల6୽!3ٝၔ!඾ËÒ!2
ల6୽!4ٝນ!‫!૽ݴ‬4
ల6୽!4ٝၔ!඾ËÒ!2!!!!!;!!!!!;
ల7୽!:ٝນ!඾ËÒ!1
ల7୽!:ٝၔ!‫!૽ݴ‬1?

た sm2 の書式の決まり方と同様の理由であろう。
この表から 1 戦毎のスコア合計を求めたい場合、sm3 がその４．sm3 コマンド
Tukubai コマンド一覧を見ると、sm2 の次が sm4、sm5になっており「sm1 や sm3 は何処へ行った !?」と思うことだろう。そう、それら欠番コマンドは道具になれずに淘汰されていったコマンドなのだ。
sm3 は、ソートせずに sum-up を行うコマンドであった。
これもソースファイルが長過ぎて掲載できないのだが、機あれば次のようにして一発で求めることができる。
?!tn4!2!2!4!4!5!5!OjqqpoTfsjft3123/uyu
ల2୽!‫!૽ݴ‬9
ల2୽!඾ËÒ!2
ల3୽!‫!૽ݴ‬2
ల3୽!඾ËÒ!1!!!!!;
ల7୽!‫!૽ݴ‬5
ల7୽!඾ËÒ!4?

能だけでも是非紹介しておきたい。

使い方と動作例
例えば 2012 年日本シリーズのスコアがイニング毎に記録されたファイル (NipponSeries2012.txt) があったとしよう。

現在リリースされている Tukubai コマンドの範囲でやる
なら、delf でイニングのフィールドを消し、更に試合番号とチーム名フィールドでソートしてから sm2 に掛ける必要がある。

12 USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 12

2012/12/21 2:47:52

特集 ― 無いものは作れ Tukubai 流コマンド自作文化?!efmg!3!OjqqpoTfsjft3123/uyu!}!tpsu!.l2-3!}!tn3!2!
3!4!4
ల2୽!‫!૽ݴ‬9
ల2୽!඾ËÒ!2
ల3୽!‫!૽ݴ‬2
ల3୽!඾ËÒ!1!!!!!;
ల7୽!‫!૽ݴ‬5
ల7୽!඾ËÒ!4?

道具になれなかった理由とはtxt) があったとする。
これを、第一フィールドを “yyyy/mm/dd” というフォー
マットに直したい旨を示した dayslash コマンドに与えると、年月日の間にスラッシュが入る。
?!dbu!cjsuiebzt/uyu
2:52191:!Bmgsfe`Wbjop`Bip
2:531212!Csjbo`Lfsojhibo
2:531917!Qfufs`Kbz`Xfjocfshfs?!ebztmbti!zzzz0nn0ee!2!cjsuiebzt/uyu
2:5201901:!Bmgsfe`Wbjop`Bip
2:53012012!Csjbo`Lfsojhibo
2:53019017!Qfufs`Kbz`Xfjocfshfs?

上記の代替例で示したとおり、簡単な記述で他のコマンドに置き換えられたからだ。このように単機能でないコマンド
はよほど頻繁に用いられない限り、淘汰される運命にある。
ちなみに、もう一つの欠番コマンドである sm1 について道具になれるかもしれない理由とは
確かに、YYYYMMDD 形式の年月日値にスラッシュを挿入

軽く紹介しておくと、これは横方向の sum-up を行うためのするだけなら AWK でだってできる。

ものだったという。これは先程の seniq コマンドと同様の運?!bxl!(|qsjou!tvctus)%2-2-5*!#0#!tvctus)%2-6-3*!#0#!
tvctus)%2-8-3*-!%3~(!cjsuiebzt/uyu
2:5201901:!Bmgsfe`Wbjop`Bip
2:53012012!Csjbo`Lfsojhibo
2:53019017!Qfufs`Kbz`Xfjocfshfs?

命を辿り、ysum（横サム）コマンドとなって現在に至る。

その５．dayslash コマンド
これは淘汰されたコマンドではなく、将来 Tukubai コマ

それでもこのコマンドが有力視されているのはこのようにンドへ追加すべき候補として現在有力視されているものだ。

して日付フォーマットを変更したいという需要が多く、その8 桁の年月日文字列（YYYYMMDD）を与えると年と月と度にこのような長い AWK の記述を強いられるのが苦痛だか

日の間にスラッシュ（/）を挿入するというものだという。

らだという。
しかし、そういう思いでこれまでいくつものコマンドが作

使い方と動作例

り出され、消えていった。果たしてこのコマンドは、そんな

例えば第 1 フィールドに年月日、第 2 フィールドにその日が誕生日である人の名前が書いてあるファイル (birthdays.

淘汰の波を乗り越え、将来 Tukubai コマンドに追加されることになるのか、注目してみたい。

コマンドは、臆さず作れ。大人気ない大人にならぬ為に
今でこそ道具の何たるかを語っている USP 研究所も実は、
こんなふうにして色々と知られざるコマンドを作っていた。

とて同じであり、コマンド自作によるシステム構築法である
Tukubai もまた然りである。

機能として洗練されていなかったり、或いはソースコード

様々な言語でプログラミングを慣れ親しむのと全く同じよの書かれ方として洗練されていなかったり……。そんなものうにして、Tukubai にも慣れ親しんでもらいたい。即ち、「コを公開するのは恥ずかしいとも言われたが、お願いして今回

マンド自作」を特別視せず気軽に始めてもらいたい。これこ

それらを敢えて公開してもらった。編集部としては、コマン

そが、真に Unix を使いこなすということなのだから。

ド自作の文化を広めるには必要なことだと考えたからだ。

最初はそれで、不恰好なものが出来ることだろう。しかし当たり前のことだが、初めから洗練された道具など誰にも気にすることなど全く無い。手を動かさなければ、いつまで作れない。茶道で用いる茶筌も、一人前に作れるまでに 10たっても大人気ないコードを生みだすプログラマーを卒業す

年以上かかるという（→ 24 ページ記事）。プログラミング

ることはできないのだ。

13

uspmag201212̲yorinuki̲cs55.indb 13

2012/12/21 2:47:53

村井純（慶應義塾大学環境情報学部教授）が語る

Unix and me〜 UNIX とインターネットだぁ！
TechLION vol.10 第 1 部にお招きしたのは、日本が誇る「インターネットの父」、村井純氏。
大学時代、UNIX の思想である“ オープン・プラットフォーム ” に衝撃を受けた経験が、大学間を結ぶインターネット立ち上げの原点にあった。
UNIX への愛情、
インターネットの将来像、
米国で刺激を受けた研究者たちのユニークな生き方。
縦横無尽のトークに湧いた濃密な 1 時間を、
本稿はダイジェストでお伝えする。
（聞き手：法林浩之、馮富久、まとめ：柏崎吉一）

馮：法林さん、机の上のプレートは何でしょる節がないですが、嬉しいですね。先日、沖くださいました。村井純先生、どうぞ。

うか。

縄で受賞者挨拶をやりました。英語版のプレ

村井：どうも、こんばんは。

法林：先日、「第 11 回 北東アジア OSS 推進

ゼン資料を用意して臨んだのですが、ビデオ

法林：僕が JUS に参加した頃、村井先生がフォーラム」にて「日中韓 OSS アワード特に雄姿を納めなかったのが心残りです。

会長だったようです。ところで先生、もうか別貢献賞」を受賞した際に頂いた楯です。日馮：じゃあ、今日も資料は英語で。

なり飲まれましたか。

中韓への貢献というと、せいぜい餃子の王将

法林：勘弁して下さい（笑）
。馮さんが応援村井：（手に持ったビール瓶を覗いて）まだで食べたとか、麻雀やった程度しか思い当たしている読売ジャイアンツもアジアチャンピ

1cm くらいです。改めて乾杯（会場：かんぱー

オンになったし、おめでたいこと続きです。

い）。僕は昔、「ミスター・インターネット」っ

さて、今日の TechLION はなんと、Ustreamて言われたんだけど、法林さんは、「ミスター・

で中継します。前々回の TechLION の第一部

UNIX」と言われていたよね。

では砂原秀樹先生をお招きしましたよね。本法林：いや、お恥ずかしい。

日も JUS のすごい大先輩が TechLION に来て

村井：そういえば先日、USP 研究所の人に会っ

20 USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 20

2012/12/21 2:47:55

た時もさ、嬉しかったね。こんな連中がまだ

村井：ラジオ放送が市場を確立する前は、商いるんだ！って。実は、私もそれで食べてい業化の成功を予測した人は少なかった。広告コンピュータと本格的に関わり始めたのましてね。某バージョンの BSD なんて、カー

収入のビジネスモデルも後から気付けばなん

は、慶応の工学部で 3 年生の時だった。あネルのコードを、目をつぶって vi できまし

ていうことないけど、着想に至るまでは人のる先生から「OS のソースを書け」という仕たよ（会場：笑）。何行目に何書いているか持つ発想力って、この程度のものなんだよね。

事を割り振られた。Ustream で言っちゃってとか、頭の中にあって。夜中に、割り込みがじゃあ、これはどうかな。

いいのか分からないけれど、要はリバースエ

入る夢でハッと目が覚めてね。寝ている間に法林：「640K はすべての人にとって未来永劫、

ンジニアリングですよ（会場：笑）

デバッグしちゃう。

充分なメモリーだ」。これ言ったの誰だろう

法林：いきなり大学での研究がそれですか

法林：その村井先生が、どうして、インター（会場：笑）（笑）

ネットを作ることになったのでしょうか。

村井：1981 年、ビルゲイツ。

村井：はじめは、まるで訳がわからない。当が卒論の骨子だった。

村井：色々な資料を持ってきたけど、昔話の時使っていたのが、PDP-11/10 というマシン

前に、まず現在のインターネットを取り巻くで し た。PDP-11 に は、 最 初 RSX-11 と い う

状況を聞いてほしい。

OS が載っていたんだけど、挙動を見ている

最初はインターネットもラジオも相手にされない

うちに、OS というものが次第にわかってき村井：来年 1 月にスイスで恒例のダボス会

メモリを示す 16 個のスイッチがあって、ピ議が開かれます。そこで議論するアジェンダ

ピピと光る。紙テープがあって、それを読みをまとめるための会合が今月、ドバイで開か込ませて「走れ！」「おー、動いた」というた。16 ビット区切りでデータを書いていく。

れた。世界中から集まる CEO や大統領に向法林：本気で言ったのかな？

感じでね。要するにビットパターンを見て、けて専門家が、アジェンダを書くんだけど、

村井：セールストークだろうね。インターネッ

マニュアル読んでいくと、インストラクショ

俺に与えられたお題は、「Future of Internet」

トの世界でも、「70Mbps の LTE が出たから、ンパターンがバレバレなんですよ。でも、あだった。インターネットにおける来年の課題

もう光ファイバーのアクセス回線は要らない

んまりやんないほうがいいですよ、リバース

は、突き詰めると、ITU（国際電気通信連合）

ですよ」なんて言う輩がいる。嘘つけですよエンジニアリング（会場：爆笑）がインターネットを持っていくかどうかなん（会場：笑）だよ。要は、インターネットを国や電話会社

法林：これは凄いですね。
「電子メールよ、

きて、C で書かれた UNIX が出てくると全然が奪うのか、それともみんなのモノにしてお

さようなら。FAX よ、こんにちは」違う状況になってきた。

それでも、OS がわかって C 言語が理解でけるのか、という勝負だよね。

村井：それはね、俺が 1986 年ごろ、電子メー

つまり、OS というのは、その頃、あくま

法林：インターネットの初期から変わっていルネットワーク (JUNET）を作り始めて少し

で H/W ベンダーがマシンを動かすために付ない構図のようですね。

有名人になっていた頃に、ガツンと食らった属で作ったもの。それに対して、7th Edition

村井：ただ誤解してほしくないけど、俺は電一言だったね。

や 4BSD といった UNIX は、ハードウェアと「OS のソースを書け」が研究テーマの大学時代はまったく切り離されてリリースされていしろ、インターネットにとって電話はインフラなので、すごく大事です。そもそも、最初

村井：その話をする前に、75 年ごろ、学生取っているわけですよ。

の頃のインターネットは、コミュニケーショ

時代の話を少しします。コンピュータとの出とはいえ、H/W ベンダーがマシンに合わ

ンの手段としては、
まだまだ不十分だったし、

会いがなければインターネットは作れなかっせ て ベ ス ト チ ュ ー ン し た OS に 比 べ れ ば、

陽の目を見ると思われていなかった。（スクた。でも、俺はもともとコンピュータが嫌い

UNIX を載せたマシンは軒並み遅いわけ。だ

リーンを指して）これ、何のことを言っていだった。高校時代、コンピュータ使っている

けど、ユーザーは自由になれる。問題はそるか知っている？

連中と言えば、おおむね計算や数学が好き。

こ、つまり、UNIX はプラットフォームをオー

馮：「相手が特定されないメッセージにお金

だいたいメインフレームは偉そうだよ。中心

を払うはずがない」とありますね。なんだろにドーンと鎮座して、周りに人が群がって端話会社と喧嘩するつもりはまったくない。むう。

末を操作する。俺はそれを見て本来、立場が村井：（会場から、『ラジオ！』の声）そう、逆だろうと思った。人間が真ん中、その周り正解。1920 年代、
ラジオ放送が始まった頃に、に色々な用途のデータやソフトウェアを搭載

こう言われたんだよね。

したコンピュータがあるべき。そうなると自馮：広告で稼ぐビジネスモデルがまだなかっ然にコンピュータをつなぐ必要が出てくる。

た頃ですね。

何らかのネットワークが不可欠である。これる。これは、OS 部分を H/W ベンダーから乗っ21

uspmag201212̲yorinuki̲cs55.indb 21

2012/12/21 2:47:57

プンにしたということです。ベンダー側に首根っこを押さえられるのではなく、「ユーザーサイドで何を作りたいのか？」を選択できる
自由が手に入る。新しいモノを創造できる標
準的な H/W とのインターフェース。OS の中で、UNIX が一番好きだったのは、オープン・プラットフォームだったからです。

口説くべき相手を考えるようになった一言
村井：それで、この 7th Edition には、UUCP（UNIX 同士をつなぐ通信プロトコル）が埋め込まれていた。
84 年頃、時代はまだ、電話にコンピュー
ターをつなぐのがイリーガルで、モデムもいた。北大から九大まで結んで全国制覇、とたら OK」となった。岩波書店ってアカデミッ

500 万円くらいした。こっそりこれ（UUCP

いう具合でね。だから関係者の間では既に「俺クな雰囲気があるから（会場：笑）。89 年以を使ったコンピューター接続。やがて JUNET

が電子メールだ」くらいのちょっとした有名

降、そこに設備を置かせてもらい、大学間をと呼ばれるもの）の研究をしていた。「村井人になっていた。

つないでいった。

先生がやっているの、何ですか？」との問い

法林：まさに「ミスター電子メール」（笑）

法林：理由がようやくわかりました。

に「研究だ」と答えつつね。

村井：電子メールもあの頃は命がけですよ。

村井：ところで去年、バークレイで、「グロー

悪いことをしようと思ったら……いけね、ところがその勤め先（東大）のセンター長でバルインターネットはどこから来たか」とい新しいことをやろうと思ったら大学ですよ後藤英一先生という偉い人がいたんだが、あうテーマの話をした。『それは、ココ（バー（会場：笑）。企業には儲かってもらわないとる日「村井君、ちょっときて」と呼び出され、クレイ）だよ、4.2BSD からだよ』と言ってさ。

困る。リスクを取れる、特に社会を変えるよ

部屋にあった新しい FAX を見せられながら、俺も 4.1BSD あたりの頃から、BSD を作ってうな挑戦をできるのが大学だと俺は思う。と「電子メールよ、さようなら、FAX よこんにち

た CSRG の連中と一緒に研究をやっていた。

いうわけで、企業の人は新しいことをやるなは」と言われた。FAX なんてとっくにどこにこの 4.2BSD に DARPA の TCP/IP が実装されらば大学にお金を払ってください（会場：笑）

でもあったのに先生には珍しかったんです。

て、間違いなくここからインターネットが本

ただし、情報処理学会で JUNET の説明をし電子メールはキーボードから一生懸命文字

格的に広まった。それまで世界の研究機関にたら、「電子メールは重要だと思うけど、村を打つ必要があるけど、FAX は手で書けば文広まっていた 4.1BSD を 4.2 にバージョンアッ

井、それは、地下でやれ」と。当時いた東工

字がそのまま送れる。ショックだったね。
「俺

プすると TCP/IP が動き出す。黙ってもイン大でも「研究として認めません」の一点張り。

が認められているのは一部の世界だけだ。こターネットにつながっちゃうわけ。

なぜ認めてくれないか」と尋ねたら、「東大の人を満足させていない」。マーケットとしでやってないから」と言われた。へー、そうて捉えた時、口説くべき相手は誰だろうと考なんだと思って、折よく声をかけてくれた東えるようになった。ソフトウェアって、いい大にすぐ移った（笑）。だからコンピューター

ものを書くから認められるのではなくて、人を専用線でつなぐ WIDE プロジェクトは東大と社会に受け入れられるから認められる。そで始めたんです。

のことに気付いたのは、この時だね。

東 大 へ 行 っ た そ の 頃（1986 年 ） に は、JUNET はすでに 100 組織くらいをつないで

こ の 時、 バ ン・ ジ ェ イ コ ブ ソ ン と い う

IPv6 の普及に必要なのは4.2BSD のムーブメント
村 井：WIDE を や っ て い た 80 年 代 の 後 半、専用線を使って大学などを結ぶ際に、ハブ

仲 間 が、 通 信 パ ケ ッ ト の 経 路 を 暴 き 出 す（IX）が必要になった。そこで岩波書店に協traceroute っていうけしからんツールを発明

力してもらったんだよ。

してこれが大流行。そしたら世界中のあちこ

法林：そう言えば、岩波書店に NOC があっ

ちで落ちるネットワークが続出。どうやらたと聞いたことがあります。

4.2BSD が抱える ICMP（TTL）処理のバグに

村井：東大と民間企業をつなぐなんてとんであったということがわかったんだよね。つまもないと言われたんだけど、「岩波書店だっり、当時みんな、その 4.2BSD のソースコー

22 USP MAGAZINE 2013 winteruspmag201212̲yorinuki̲cs55.indb 22

2012/12/21 2:48:00

ドを読んで自分の環境用の実装を作っていとめ役・vi,csh 作者）、カーク・マキュージッ

そろそろ、時間だね。これで俺の学生時代たということ。リファレンスコードである

ク（UFS 等開発者）、エリック・オールマン

から、2002 年くらいまでの話をしたけど。

4.2BSD の作法を忠実に守っていたことの裏（sendmail 作者）などは、そうですね。

質問者 A：入社以来、IPv6 をずっとやって返しだった。

馮：みんな名の通っている人ですね。

います。ヒューマンセントリックと言われま後で、IPv6 の仕様を作った時、これを爆

村井：UUNET を作ったリック・アダムスとすが、どうご覧になりますか。

発的に普及させるためには 4.2BSD の TCP/IP

も仲はいい。彼も UNIX マニアで、相当悪い

村井：いろんなことがありましたが、まずアと同じことが起こらなければならないと気付

奴だけど（笑）

ドレス空間は可変長にするのが本来、正しい。

いた。でもそう思った 92 年頃、CSRG にい

デニス・リッチーは UNIX のファイルの抽

どれだけノード増えるか分からないんだか

た仲間たちは、実質的に残ってなかった。

象化に貢献したことで知られる。ただ彼が、ら。でも、IPv6 決めるとき、アドレスは固

みんなインターネット・ビジネスにかかりき

パリティビットをフラグに使っていたのを見定長になった。理由は、世界中のプログラマり。
「BSD に関わっていた研究者で、まだ大て、俺は、「日本語には 16 ビット必要なんだ」

が泣くから。可変長にすると、プログラマが学に居る人」は世界中見回しても、俺だけなと思わず言った。

わずかだけどそれだけ作業に手を取られる。

んだよ（笑） みんな大金持ちで俺一人が貧法林：漢字表記のためですね。

ただ、それは一番大事なことだったとおもう。

乏、
そんな感じだった。じゃあどうしようか、

村井：ベル研でこの話をした後、1 年後くらプログラマを見て、意思決定をした。ソフトといってやり始めたのが、やがて KAME に

いにまた呼ばれていったらまだその研究をしウェアの開発者がいなければ、インターネッ

なって IPv6 のリファレンスになっていった。

ていた。画面を見ると漢字が出ている。
「他

トは持たない、それが最後の決め手だった。

いまなお続くCSRG 時代の交友の研究はどうしたんだ」とデニスに言ったら

質問者 B：村井先生、またご登場いただけま「ずっとこれだけやっていた」。すごい研究所

すか？

村井：その後も、CSRG にいた仲間とは、交だよね。「だから、ベル研って、ノーベル賞

村井：いつでも（会場：大拍手）

流が続いています。ビル・ジョイ（BSD ま

受賞者を出すんだ」って思った。

法林・馮：本日は本当に有難うございました。

第 2 部「IT サファリパーク」もゲストのトークに会場が沸く
大いに盛り上がった TechLION
第 1 部「獅子王たちの夕べ」の熱
気そのままに、第 2 部「IT サファリパーク」がスタート。高野直子
さん、片山暁雄さん、増井雄一郎
さんによるトークが繰り広げられた。

販売ブースも大盛況！

第 2 部からは村井先生はコメンテータとして参加。ここでも名言の数々が。

てっくんからのお知らせ
サインをGET する人も。

① TechLION の次回予告は裏表紙を見てね♪
② 地方遠征もあるよ♪
③詳細は WEBサイトをみてね♪（スタッフのブログも頻繁に更新されているよ）

http://techlion.jp/

恒例の、出演者同士の記念写真で、ファイティングポーズ !!
左から）馮さん、片山さん、村井先生、高野さん、増井さん、法林さん。

2013 年もエンジニアが集う！

23

uspmag201212̲yorinuki̲cs55.indb 23

2012/12/21 2:48:03ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔ

シェルスクリプト大喜利 第六回₻₏₷₏₻ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔংٛȇȸ̽͂͜଑̩ȹ༎ਬಿȆ͙̥ͭ

ٝ
ల্

₻₏₷₏₻

ΏͿσΑ·ςίΠఱ‫ܔ‬၌

皆様こんにちは、はじめまして。三か月のご無沙汰、シェ

とって不可欠な awk や sed 等は OK です。JM にもあり

ルスクリプト大喜利（略して sh 大喜利）のコーナーです。

ますし。でも、よっぽど面白ければ、なきにしもあらず？

冬到来、アタクシのギャグにピッタリな寒い季節になりࡼȂġOpen usp Tukubai(iuuq;00vfd/vtq.mbc/dpn0) も使用 OK ！

ましたよ。……年明けにテックライオンやるんだってねぇ。

但し、それなりに見応えないと採用はキビシいですよ〜。

テックら行っテックラぁｲｵﾝ！……シェル使った大喜利やる

ルールもおさらいしたところで、それじゃ始めましょう。

んだってね。よし、投稿任シェルです !!

ུ๔‫ٳ‬ই

ほーら、寒くなってきたでしょ。まるで大○商会の CM
みたいじゃないか。部屋を暖めても無駄無駄ぁ！さて、͈ࣽɃల֚࿚Ʉ́‫૽ة‬උ৪̦‫̥̹̞̽̀̽ܦ‬な。（あ、ウソウソ！帰らないで

Ĳ ȡ ů Ȫů ͉֨ତ́ঐ೰ȫ ͈ুடତ͈ಎͅంह̳ͥ ȸۖ஠ତȹ

〜！！）ͬ஠̀‫ͥ͛ݥ‬ΏͿσΑ·ςίΠͬ੥̞̩̺̯̞̀ȃ

極寒の話はこのへんにして……、めげずに残ってくれたホ

前回の「幸運数」に続き、整数数列繋がりで今度は「完全数」

ントは心暖かな読者の皆さんのために、それでは本コーナーのというわけですよ。自分自身を除く約数の総和が自分自身とシステムをご説明！

同じ値になるってヤツなんですけどね。

ΏͿσΑ·ςίΠఱ‫ܔ‬၌͉͂ΏͿσΑ·ςίΠఱ‫ܔ‬၌අခ͈σȜσ֚Ȃġsh 大喜利はクイズやテストではありませぬ。なので決まった答えというものはないのです。あえて言うなら面
白いスクリプトが正解！
ඵȂġ面白いスクリプトとは例えば、こんなもの。

幸運数同様、これまた投稿数が一番多かったんです。もしかして、皆さん整数とか数列好きだったりしますか？それじゃ解答いってみましょう。

ɝˏˎˍˑˍ˒̯͈ٜͭ൞
2!$"!0cjo0ti
3!bxl!(CFHJO|gps)y>2<y=>(%2(<y,,*|gps)z>2<z=y<z,,*|qsjou!y-z-y&z~~~(!}!hsfq!(!1%(!}!tn3!2!2!3!3!}!bxl!
(%2>>%3|qsjou!%2~(
お、Tukubai コマンド使ってますな！いつも投稿ありがͼȂġ人が考えつかない意外性があると う ご ざ い ま す。 ひ ょ っ と す る と、Open usp Tukubai のυȂġ美しい or 芸術的 or 記述がシンプル・短い or 高速

Github リポジトリにシェルスクリプト版 Tukubai を pull リΧȂġアイデア・こだわりが光る

クエストしてる方かな？？？

ΣȂġネタになるようなバカバカしさ、くだらなさがある

さてと。この解答はオーソドックスに解いてるね。最初などなど、ただし最後のは段位強制返還の恐れありよ。:-)に AWK で総当たりに剰余を求め、それが 0 だったら約数だ२Ȃġスクリプト動作環境は Linux とします。そして、特に断りから次の grep でフィルタリング。次に sm2 で数ごとに約数

な き 場 合 は、Linux JM(iuuq;00mjovykn/tpvsdfgpshf/kq0)の総和を出して、最後にそれが元の数と等しいものだけ表示に記載されているコマンド及び機能のみ使用可能としまする……と。いいね、sm2 コマンドの使い道も示してくれ

す。これは多くの人が楽しめるようにするためなのです。

てありがとう。しかも今回の投稿の中で最速だったのだ。途（但し JM に載っているので、ń ΏͿσࠏ͈́ٝ൞͜ ŐŌ Ȋ）

中で経由させている Open 版の usp Tukubai コマンドは中身অȂġsh 大 喜 利 は シ ェ ル ス ク リ プ ト を 披 露 す る 場 な の で、őŦųŭ ͞ œŶţźȂ őźŵũŰů ͉̈́̓ঀ̻̽͝Θιです。そもそも JM にも載っていません。逆にシェルスクリプトに

Python なのにね。やるなぁ。
よし、֚౲਎ဓ。前回は二段まで授与してるからこれで三段ね。

MAGAZINE 2013013
3 winterwin er50 USP MAGAZIN

uspmag201212̲yorinuki̲cs55.indb 50

2012/12/21 2:48:08

徹底仕
仕事術！
C U I 徹底仕事術！
ΏͿσΑ·ςίΠఱ‫ܔ‬၌ɝŦŮŢŴŢŬŢ ̯͈ٜͭ൞
2!$"0cjo0cbti
3!bxlmjlf)*!|!mpdbm!`1<!xijmf!sfbe!`1<!ep!fwbm!#%2!''!%3#<!epof!~
4!
5!ovntvn)*!|!mpdbm!o>1<!bxlmjlf!;!())o!,>!`1**(<!fdi
p!%o<!~
6!
7!hsfq`ejwt`pg)*!|!bxlmjlf!#))%2!&!`1!>>!1**#!(fdip!
%`1(<!~
8!
9!ejwt`tvn)*!|!tfr!%))%2!0!3**!}!hsfq`ejwt`pg!%2!}!ovntvn<!~:!
21!tfr!%2!}!bxlmjlf!(\!%)ejwt`tvn!%`1*!>!%`1!^(!(fdip!
%`1(には感心したのですよ。なぜなら、検証対象数 X とそれの約数 Y の組み合わせを作るために他の投稿者が皆ループ文（for や while）を使っているのに、使ってないんですよ！
Bash の echo 拡張オプションとブレース展開を使ってうまいことやって、結果ループ文なし。そしてペンネーム通りにあとは AWK の連携プレイ。添付コメントは特に無しで不言実行ってことか！それもカッコいいね。
投稿で唯一ループ文使わなかったところに敬意を表して
२౲਎ဓ！現在四段だ。
◇◇◇

それでは第二問へ行きます。URL エンコードの話なんですが、スマートな投稿と力技な投稿があって面白い！

添付のコメントによると、ループや条件分岐をなるべくɃలඵ࿚Ʉ

使わないようするため、シェル関数を定義しそこに相当の処ဓ̢̹ͣͦ໲লႥͬ Ŗœō ΀ϋ΋ȜΡ ĩœŇńĴĺĹķĪ ̳ͥΏͿ理を詰め込んだそうです。

σΑ·ςίΠͬै̩̺̯̞̽̀ȃ ࿔აঀ̞̞͈͉̽̀ ōŪůŶŹġ

というわけで、Bash を活用した投稿がきたぞ。殆ど BashŋŎ ͅश̞̽̀ͥ΋ζϋΡ͂ ŕŶŬŶţŢŪ ΋ζϋΡ̺̫̳́͢ȃの機能で済ませているわりに、確かにループや条件分岐の構文も殆ど無しにしているのがいいね。まぁ、そうすると欲がURL エンコードというのは、Web ブラウザのアドレス入出るもので seq さえ使わなければ Bash で閉じたスクリプト

力欄でよく見かける、パーセント記号 "%" やプラス記号 "+"になっていたのに、なんて思ってしまうが、そうなるとさす等が入ったアレを生成するフィルターのことですね。

がに本格的にループ構文が必要になってしまうからね。
ありがとー、֚౲਎ဓしてこれで三段だ。

URL デコーダーについては、Tukubai コマンドの登場した
今、難しいことはありません。cgi-name コマンドというのɝŌ ̯͈ٜͭ൞

がこれをやってくれます。もちろん使わなくてもわりと簡単

2!$"0cjo0ti
3!tfr!2!%2!}]
4!xijmf!sfbe!o<!ep
5!!!!!tfr!.g!#%o!&h#!2!%)bxl!.w!O>%o!(CFHJO|qsjou!jou)O++)203**~(*
6!epof!}]7!bxl!(%2&%3>>1|qsjou!%1-!%20%3~(!}]
8!bxl!.w!O>%2!(%3>>%4|b\%2^,>%3~|b\%2^,>)%3,%4*~FOE|gps)j>2<j=>O<j,,*|jg)b\j^>>3+j*qsjou!j~~(にできそうです。何せプラス記号と %xx のキャラクターコー

こちらの投稿にも添付のコメントがあって、実は並列化に挑戦していたとのこと。時間切れで残念ながら投稿には至らなかったそうですが、̷ͦ‫ྙޟ‬૬̞です！
さて、肝心の投稿コード。約数の総和を求めるアルゴリ
ズムがアタクシの想像してなかったものなので感心した！１から int(√n) までの商を求めれば約数の総和が計算できるのか。なるほどね！ただルートの計算に処理時間を要している
ようで最速には至らなかったのだが。（そこは競ってない？）
でも面白いからඵ౲਎ဓ。これで三段だ。

ɝ൐‫ ނ‬ŢŸŬŦų ̯͈ٜͭ൞
2!$"!0cjo0cbti
3!fwbm!fdip!.of!|2//%2~]]!|2//%2~]]]]o!}!bxl!(%2&%3>>1(!}!bxl!(%2>>%3|qsjou!%2-u<u>1~!%2?%3|u,>%3~(!}!
bxl!(%2>>%3|qsjou!%2~(
第一問で最後に紹介する投稿。アタクシねぇ、この投稿

ドを元に戻せばいいのですから。ところがエンコーダーはちと厄介。変換対象の記号が多数ありますからね。
果たしてどんな解答が寄せられたのでしょうか。

ɝŵůŢŻŶŬŢ ̯͈ٜͭ൞
2!$"!0cjo0ti
3!fyqpsu!MD`BMM>D
4!bxl!(
5!CFHJO|
6!!!gps)j>1<j=367<j,,*7!!!!!dis3btd\tqsjoug)#&d#-j*^>tqsjoug)#&&&y#-j*<
8!!!dis3btd\#!#^>#,#<
9!!!gps)j>59<j=68<j,,*:!!!!!efmfuf!dis3btd\tqsjoug)#&d#-j*^<21!!!gps)j>76<j=:2<j,,*22!!!!!efmfuf!dis3btd\tqsjoug)#&d#-j*^<23!!!gps)j>:8<j=234<j,,*24!!!!!efmfuf!dis3btd\tqsjoug)#&d#-j*^<25!!!efmfuf!dis3btd\#.#^<
26!!!efmfuf!dis3btd\#/#^<
27!!!efmfuf!dis3btd\#`#^<
28!!!efmfuf!dis3btd\##^<
29!!!PST>##<
2:!~
31!|
32!!!gps)j>2<j=>mfohui)%1*<j,,*|33!!!!!m>tvctus)%1-j-2*<
34!!!!!qsjou!)m!jo!dis3btd*!@!dis3btd\m^!;!m<51
5
1

uspmag201212̲yorinuki̲cs55.indb 51

2012/12/21 2:48:10

35!!!~
36!~(
添付のコメントは「いろいろ考えたあげく、正攻法です。
捻りがきいてなくてすみません」とのことです。いえいえ、
参加してくれただけでありがたいですよ。
というわけで普通に解くとこんな感じですな。੝౲਎ဓ。

ɝŴŦť ඤ ŬŦų ̯͈ͭٝ൞
2!$"!0cjo0ti
3!tfe!(t0!0,0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
4!tfe!(t0&0&360h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
5!tfe!(t0#0&330h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
6!tfe!(t0$0&340h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
7!tfe!(t0]%0&350h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
8!tfe!(t0'0&370h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
9!tfe!#t0(0&380h#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}:!tfe!(t0)0&390h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
21!tfe!(t0*0&3:0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
22!tfe!(t0]+0&3b0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
23!tfe!(t0,0&3c0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
24!tfe!(t0-0&3d0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
25!tfe!(t"0"&3g"h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
26!tfe!(t0;0&4b0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
27!tfe!(t0<0&4c0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
28!tfe!(t0=0&4d0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
29!tfe!(t0>0&4e0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
2:!tfe!(t0?0&4f0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
31!tfe!(t0@0&4g0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
32!tfe!(t0]\0&6c0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
33!tfe!(t0]\0&6d0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
34!tfe!(t0]]0&6d0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
35!tfe!(t0]^0&6e0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
36!tfe!(t0]_0&6f0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
37!tfe!(t0a0&710h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
38!tfe!(t0|0&7c0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
39!tfe!(t0}0&7d0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
3:!tfe!(t0~0&7e0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
41!tfe!.o!(m(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
42!tfe!(t0])]]\1.8^\1.8^\1.8^]*0]43!]2]
44!0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
45!tfe!.o!(0/0q(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
46!tfe!(0_]]0z0123456780BCDEFGHI0(!!!!!!!!!!!!!!!!!}
47!tfe!(0_]]0t0B01110h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
48!tfe!(0_]]0t0C01120h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
49!tfe!(0_]]0t0D01210h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
4:!tfe!(0_]]0t0E01220h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
51!tfe!(0_]]0t0F02110h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
52!tfe!(0_]]0t0G02120h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
53!tfe!(0_]]0t0H02210h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
54!tfe!(0_]]0t0I02220h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
55!tfe!(0_]]0t0]]1])\12^]|5]~]*0]]]2!0(!!!!!!!!!!!!}
56!tfe!(0_]]0t011110B0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
57!tfe!(0_]]0t011120C0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
58!tfe!(0_]]0t011210D0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
59!tfe!(0_]]0t011220E0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
5:!tfe!(0_]]0t012110F0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
61!tfe!(0_]]0t012120G0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
62!tfe!(0_]]0t012210H0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
63!tfe!(0_]]0t012220I0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
64!tfe!(0_]]0t021110J0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
65!tfe!(0_]]0t021120K0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}

66!tfe!(0_]]0t021210L0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
67!tfe!(0_]]0t021220M0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
68!tfe!(0_]]0t022110N0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
69!tfe!(0_]]0t022120O0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
6:!tfe!(0_]]0t022210P0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
71!tfe!(0_]]0t022220Q0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
72!tfe!(0_]]0z0BCDEFGHIJKLMNOPQ0123456789:bcdefg0(!}
73!tfe!(0_]]0t0]]])\1.:b.g^]*!])\1.:b.g^]*0&]2]30(!}
74!tfe!(;mjof<O<%"c!mjof<t0]o00h(!!!!!!!!!!!!!!!!!!}
75!tfe!(t0]%%00(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
76!tfe!(t0]%0&1e&1b0(
無駄に長い！！いくらなんでも真面目にと解いてここまで長くはならんでしょう。添付のコメントによれば「メニーコア時代。長いけどきっとこれが有利になります」とのことで、̤Ȃ ̤̟Ȥって感じですかねぇ。
ただこれだと 16 進数の英字が大文字になって厳密にはちょっと違うけどまあいいか。֚౲਎ဓ、これで三段かな。

ɝŦŮŢŴŢŬŢ ̯͈ٜͭ൞
2!$"0cjo0cbti
3!fdip!.f!%)fdip!.o!#%2#!}!pe!.Bo!.uy2!.w!.x:::::!}!
us!]!!&!}!tfe!t0&310,0h!}
4!tfe!(t0&])3\ef^]}4\1.:^]}5\_1^]}6\1.:bg^]}7\_1^]}8\1.:^]*0]]y]20h(*
今の投稿から一転して、おー！これは短い。添付のコメントは「第 3 のビールに浸ってるので省略」とのこと。はい、
ありがとうございます。（‥;）
うーん、アイデアがいいね！厄介なエンコードは一旦全部してしまってから、必要無い文字だけデコードして戻すことで、こんなに短くでるのか。
スバラシイ！！ඵ౲਎ဓ！これで折り返しの五段だ。
◇◇◇

さあ、最後の問題いってみよう。
Ƀల२࿚ɄģŢģ ̞̠͂Ξ΅ΑΠέ͹ͼσ̦̜̳ͤ͘ȃ ̭͈ಎ૸ْͬ࿂ͅນা
༹̳༷ͥ ĩ ֚๔۰ౙ͈͉̈́‫ ̩ͣޔ‬ŤŢŵġ ŢĪ ͬȂ ̞̞ͧͧ‫̢ޗ‬̩̺̯̞̀ȃ ତ́ੳ໅̳̱ͥ͜͢ȃ ೇ༹̱̞༷ͬ๢Ⴚ̱̀ੳ
໅̳̱ͥ͜͢ȃ
このお題、今日のメインイベントに据えていたんですけ
ど……、あれれ？数で勝負する投稿がありませんでした。
ちょっと残念。やっぱり数列問題の方が面白い？？

ɝͼΗυȜ̯͈ͭٝ൞
Ȇ!ifbe!.o!2955785518481:662726!bȆ!ubjm!.o!2955785518481:662726!bȆ!dvu!.d!2.2955785518481:662726!bȆ!gpme!.x!:334483147965886918!b「上下右に切るコマンドに抗って切られないようにしました。でも 3 番目はメモリ不足で力尽きるでしょう」とのこと。
なんだこの数字は？と思って調べたら、最初の 3 つは符号無し 64 ビットの最大値、最後のは同じく符号ありでの最大MAGAZINEMAGA
INE 2013
013
3 winterwin er52 USP MAGAZIN

uspmag201212̲yorinuki̲cs55.indb 52

2012/12/21 2:48:11

徹底仕
仕事術！
C U I 徹底仕事術！
ΏͿσΑ·ςίΠఱ‫ܔ‬၌
値でした。へー、これが head、tail、cut、fold の最大値なんだ。
マメ知識として面白いね。よし、੝య਎ဓ！

たものですね。
しかし！ダメなのがいっぱいあるじゃないか。self の 2 番ɝ‫׺‬ඵ࣢̯͈ͭٝ൞

目、それから tateyoko、
juni、rank の解答、これらは半角スペー

Ȇ!om!b!}!bxl!(|tvc)0_\\;cmbol;^^+\1.:^,\\;cmbol;^^0-##-%1*<qsjou~(Ȇ!om!b!}!tfe!(t0_\\;cmbol;^^+\1.:^]|2-]~\\;cmbol;^^00(
Ȇ!om!b!}!vojr!}!tfe!(t0_\\;cmbol;^^+\1.:^]|2-]~\\;cmb
ol;^^00(
Ȇ!om!b!}!tpsu!}!vojr!}!tfe!(t0_\\;cmbol;^^+\1.:^]|2-]~\\;cmbol;^^00(

スが 2 個以上連続している場合、1 個になっちゃうぞ。でもまだまだ普及してないから難しいよね。懲りずに使ってね。
誤答もあるけど Tukubai 利用に感謝して、੝౲਎ဓ！
◇これにて本日の大喜利はお開き！読者の皆さん、投稿しൎࣂఱ༡ਬȊȊ

たら、行番号の入っちゃう nl で開き、後で行番号を消せばも uniq しても変わらないよねということで地味に数稼ぎました」とのこと。

◇てくれた皆さん、今回もまたありがとうございました。

コメント「愚かにも cat を rm して使えなくなってしまっいいんじゃないかと。ついでに行番号があるなら sort して

◇

ষ͈̤ٝఴ
֚Ȃġ1 〜 n（n は引数で指定）までに存在する今度は「累乗数」

うーん確かにちょっと面白い。だが、cat が使えない時のを列挙するプログラムを書いてください。速さを追求し回避策というコンセプトだったら「はじめから後ろの AWK

た解答、または Tukubai を使う等して ( 使わなくても可 )や sed 単独で事足りるぞ！」というツッコミを入れたくなっコードの美しさや面白さを追求した解答を待ってます。

ちゃうぞ。いや、もちろんそういう趣旨のお題じゃないからඵȂġ本誌 38 ページ、
「やわらかマッドサイエンティスツ」のいいんだけど。
ありがとう！֚౲਎ဓ。これで三段だね。

記事にあるリスト５（同一行内文字ソート）。Perl で書かれてて、大喜利司会のアタクシとしてはシェルスクリプɝłŕŎĶĴ ̯͈ٜͭ൞

ト版が欲しいなと思いました。というわけでこれをシェȆ!xsjuf!axipbnja!=!b
Ȇ!xbmm!bȆ!tibs!b!}!tfe!.o!(0_Y0t0_Y00q(
Ȇ!ejgg!b!0efw0ovmm!}!ubjm!.o!,3!}!tfe!(t0_//00(
Ȇ!ejgg4!0efw0ovmm!0efw0ovmm!b!}!ubjm!.o!,6!}!tfe!(t0_//00(

ルスクリプトで書いてください。面白いのがいいなー。
२Ȃġfor や while を一切使わずに、九九の表を書いてください。
01*01=01

01*02=02

01*03=03 …… 01*09=09

02*01=02

02*02=04

02*03=06 …… 02*09=18

雑多に思いついたものの寄せ集めたそうです。ペンネー
ムからするとネットワーク屋さんなんでしょうかねぇ。
さて、最初の 2 つは本文の手前にメッセージが付くのでどうかと思うんだけどまあ面白いね。最後の diﬀ* もよく考えてくれたと思う。でも特に目を引いたのは 3 番目だね！これ、：
09*01=09

09*02=18

09*03=27 …… 09*09=81

といった感じです。（今回の投稿もヒントになるね！）

ൎࣂ͈̱̥̹

見慣れないコマンドだなぁと思ったら、何と ōŪůŶŹġ ŋŎ ͅ

お題への回答は、お名前（ペンネーム）、回答したいお題͉‫̥ͅږ‬श̞͈̽̀ͥͅड߃͈ ńŦůŵŐŔ ͉ͅਓ჏̯̞ͦ̀̈́

番号、回答スクリプト、簡単な補足の四点セットで下記の宛みたいだ。よくこんなコマンド見つけたもんだ！

先へ！一人何問でも何個でも回答可です。尚、次回締め切り

珍しいコマンド探してくれたんでඵ౲਎ဓしちゃおう。

ɝńķŉĹŐĸ Ȫ·΀ϋȫ ̯͈ٜͭ൞
Ȇ!kpjo1!lfz>2!b!bȆ!dkpjo1!lfz>2!b!bȆ!tfmg!1!bȆ!tfmg!2!OG!bȆ!ubufzplp!b!}!ubufzplp
Ȇ!gjmfibnf!.mIPHF!b!0efw0ovmm
Ȇ!kvoj!b!}!efmg!2
Ȇ!sbol!b!}!efmg!2Ȇ!zdbu!b
Ȇ!udbu!bȆ!vq4!lfz>2!b!0efw0ovmm
C6H8O7（クエン）さんの投稿は Open usp Tukubai を使っは ˎ࠮ ĳķ ඾ Ȫ࠮ȫ ࡿஜ ı শとします。しかもその間は何度でも回答の修正を受け付けます。

̤ఴ̱̱̓̓͜௣̩̺̯̽̀Ȝ̞
お題の投稿も大募集。こっちは締め切りなしでずーっと
募集してます。そして、考えてくれた方にも段位を授与します。自分で出題して回答するのも、OK ！

ൎࣂ୶
どちらも投稿先は、nbhAvtq.mbc/dpn です。面白ければ（ワリと）何でもあり！じゃんじゃん投稿待ってます !

53
53

uspmag201212̲yorinuki̲cs55.indb 53

2012/12/21 2:48:12

ŕłōŌġōŊŗņ

USP MAGAZINE 2013 winter Vol.7

ŘņŅŏņŔŅłŚġĲķġŋłŏŖłœŚ

ŕŦŤũōŊŐŏġŷŰŭįĲĲ
Ĳ࠮୆͈ͦ͘΂ȜίϋΕȜΑ̈́΀ϋΐΣͺ̹̻/% ඥ௎ීʂŴᬖ݈ʁų
6CNM)WGUVUܷҾ࣋Ŵࡠ߷᫏Ŵ቟௎ദଢŴ߷߃ஊʰŴᆖᓶᬐྸᲭ9GFPGUFC[
5VCTV ᳸%NQUGᲢʖ‫ܭ‬Უ

2NCEGρஜங 5WRGT&GNWZG

6KEMGVЭ٥Ǔȷʖኖų όŴ࢘ଐ  όᲢȉȪȳǯᡂᲣɼ͵ᲴȦȋȐȸǵȫȷǷǧȫȷȗȭǰȩȟȳǰᄂᆮ৑ųңឃᲴ২ᘐᚸᛯᅈŴǪȩǤȪȸŴ.2+,CRCPŴȌȸȩȜŴǯȩǦȉȯȸǯǹŴ˂ࢸੲᲴଐஜ 70+: ȦȸǶ˟Ŵ'/<'41ŴǭȣȪǢȇǶǤȳǻȳǿȸžǨȳǸȋǢ 6[RGſ

TechLION

ƓǋƠǖǨȳǸȋǢȈȸǯȩǤȖųž6GEJ.+10ᲢƯƬƘǒƍƓǜᲣſųᛇኬƸ 9'$ ưᲛ

発行人 當仲寛哲
発行・発売 有限会社ユニバーサル・シェル・プログラミング研究所〒105-0003 東京都港区西新橋 3-4-2 SS ビル 3 階 電話 03-3432-1174 発行日 2012 年 12 月 20 日

ŖŔő ࿻͈ٛȁ֥ٛ༡ਬಎ
シェルでつながる技術の輪！基礎から、プロのライブコーディング・ライブまで、いろいろやっています。おもいっきり真面目に、時に面白く、心から楽しめます。
WEB 会費は無料です。勉強会や定例会の参加費は営利目的ではない為、良心的です。

ŖŏŊřİōŪůŶŹİ ΏͿσΑ·ςίΠ͈‫خ‬ෝ଻ͬޭࡠ́͘೏‫̳̱͘ݥ‬Ȋમ̱̩͉ũŵŵűĻİİŸŸŸįŶŴűŵŰŮŰůŰŬŢŪįūűġġͅͺ·ΓΑȊ
約 400 名の会員が定例会や勉強会で活発に交流をしています。

@usptomo

USP 友の会ŖŔőġŎłňłśŊŏņġΨΛ·΢ϋΨȜġࢡບอคಎ Ģ
vol.0 2011 springvol.1 2011 summer vol.2 2011 autumn vol.3 2012 winter
ごめん

ごめん

なさい

なさい

なさい

なさい

在庫終了

在庫終了

在庫終了

在庫終了

です。

です。

です。

です。

vol.5 2012 summer vol.6 2012 autumn

ごめん

USP MAGAZINE は、
世界初のシェルスクリプト技術情報誌。
でもご存知のとおり、シェルスクリプトはグルー言語。
OS 深層から様々な言語・アプリの話まで、さらには技術の先にいるエンジニア達にもスポットを当てます。
目指すは、シェルスクリプト力とエンジニア達の地位向上！

自炊不要

定期購読又はバックナンバーをお申込みいただくと、PDF 版が無料で手に入ります。
ご購入、お申込みはこちらから⇒

uspmag201212̲yorinuki̲cs55.indb 56

USP 出版

定価 400 円（本体価格 381 円）

ごめんvol.4 2012 spring

2012/12/21 2:48:13