エンジニアには 希 望 がある、哲 学 がある。G e e kでポジティブ な 面 白 い 仲 間 が いっぱ い。
ISSN 2187-9664

シェルスクリプトに何でもおまかせOpen usp Tukubai
シンプルレシピ
Part1・テキスト編
TechLION再録

まつもとゆきひろ
10年先も勝負できるプログラマーとは

清水浩先生に訊く、
技術者哲学
好評連載
原色美女図鑑 第4回 ともちゃ
後藤大地 漢のUNIX
大岩元 今私たちは何を学ぶべきか
シェルスクリプト大喜利 他

第5回

From Editor「〜に訊く、技術者哲学」と題したインタビュー連載を始めました。
今回インタビューに応じてくださったのは、“ 次世代の車 ” と呼ぶべき存在になる車を目指し、電気自動車を研究開発されている清水浩先生。インタビューの冒頭、「本物の技術者を追求したくて取材に参りました」と申し上げると「それは取材する相手を間違えましたね」と苦笑い。
確かにおっしゃる通りかもしれません。それは人々が心に思い描くだけの理想の人物像であって、「完璧な人間」同様、この世に実在しないのかもしれないと思いました。
しかしそのように思い描く人物像の片鱗を、実在の人物に感じる瞬間があります。普通の人とは比べ物にならない程の積極性や独創性があったり、巧いなーと感心してしまうような絶妙な技術センスを持っていたり、時にあっけにとられるほど楽観的だったり情熱的だったり……。今回私は、書店で出会った
清水先生の本の中にその片鱗を見ました。
素直に凄いと思う言動は勿論、一見常人離れして見える言動であっても、どれもその人が築いた技術者
哲学に基づき、確信的にやっているのだろう。そんな技術者哲学を色々な人から聞き、独自の哲学を確立していけば、誰しも本物の技術者に近づけるのではないだろうか。
新たに始めたこの連載にはそんな意図があります。TechLION 再録等の他の記事も、切り口は違えど、同じテーマを持っています。
日本の技術者がもっと幸せになればと、強く思います。

USP MAGAZINE 編集部

Contents
特集 1

シェルスクリプトに何でもおまかせ Open usp Tukubai シンプルレシピ Part1 … 3

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

第3回………………………………………………………………………… ―…………………………………………………………………… ―今私たちは何を学ぶべきか

第5回

大岩元

中小企業手作り I T 化奮闘記

第3回

菅雄一 ……………………………………………………………………

TechLION 再録―

まつもとゆきひろ ―― 10 年先も勝負できるプログラマーとは ……………………… 11

原色 Linux 美女図鑑 ―― 第 4 回 ともちゃ ……………………………………………………………………………… ―特集 2

清水浩先生に訊く、技術者哲学 ……………………………………………………… ―漢の UNIX

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

―

やわらかマッドサイエンティスツのプログラミング講座 〜 ジャクソン構造図編 ……………………… ―シェルスクリプト大喜利………………………………………………………………………………………… 15
Tech 数独 ……………………………………………………………………………………………………………………………… ―天地概況 奈須蛍路 ／ 編集後記 …………………………………………………………………………………………………… 19※ 薄字で記載している記事は、よりぬき晩には収録されておりません。また、本誌とは掲載順序が若干異なります。

2

USP MAGAZINE vol.5

特集1

シェルスクリプトに何でもおまかせOpen usp

TukubaiἉὅἩἽἾἉἦ

Part1・テキスト編
USP マガジン編集部

Tukubai、
それはシェルスクリプトの使い易さを加速させるコマンド群。
前号では、そのオープン版 “Open usp Tukubai”を紹介したが、やり残したことがあった。豊富なレシピの紹介である。
そこで今号と次号の二回に渡り、Tukubaiの、特に実際のコーディングスタイルが分かり易い
レシピを特集する。
「シェルスクリプトとは、僅かなコマンドの追加で、こんなにも応
用の効く言語になるのか!」と、
あなたはきっと驚くことだろう。

準備

Tukubaiを知り、そして始める。

レシピ1

帳票を作る。
レシピ2

ルービックキューブを作る。

੔๵ŕŶŬŶţŢŪ ͬ ౶ ͤ Ȃ ̷ ̱ ̀ ই ͛ ͥ ȃ

Tukubai は、シェルスクリプトをプログラ■ 事前に必要なもの

ム開発言語として本気で使うべく作られたコ

1. Python

マンド集だ。これを制作した USP 研究所はOpen 版である Open usp Tukubai のコマ

実際に、Tukubai を用いて様々な業務システ

ン ド は Python（2.4 以 上 の 2.x 系 用 ） で 出ムの開発や開発支援を行っている。

来ている。よって事前にインストールして2012 年 2 月、このうち使用頻度が高いもおこう。Python の導入についての詳細は、の中心に選ばれ、オープンソースとして公開

Python サイト（http://www.python.org/）や、された。それが Open usp Tukubai である。

シェルスクリプトで開発するのはなぜか■ なぜシェルスクリプト？

日本 Python ユーザ会さんのサイト（http://
www.python.jp/）を参照して欲しい。
2. Bash（本記事のレシピで必要）
この後に紹介するレシピのコードを実行するには Bash が必要である。Linux 以外の

写真１．Tukubai のポータルサイト“UEC”

意外に思うかもしれないが、シェルスク

Bash が導入されていない環境では導入してリプトは上手に使えば、C 言語並のハイパおくこと。その際、各コードの先頭にあるシ合、/home/USERNAME/tukubai/bin となる。

フォーマンスなプログラムを、C 言語より遥バン (#! /bin/bash) のパスは変更が必要だ。

尚、アンインストールしたい場合は make

かにラクに作れる。

■ Open usp Tukubai の導入

ヒミツは、Unix システムコールやライブ

Open usp Tukubai の ダ ウ ン ロ ー ド は

install の代わりに make deinstall とすればよい。

■ FreeBSD での導入は更に簡単！

ラリーの殆ど素の能力を、Unix シェル自身

Tukubai に 関 す る ポ ー タ ル サ イ ト で あ るやコマンド（cat, sed, awk, grep 等々……の「UEC」（usp engineers' community、https://FreeBSD では ports コレクションに Open

馴染みのもの）から直接使える点にある。

uec.usp-lab.com/、→写真１）にて可能であ

usp Tukubai が 登 録 さ れ て い る。 従 っ て、Unix システムコールやライブラリーはカーる。

Open usp Tukubai アーカイブファイルのダネルに直結しており、コンピューターの本気

このサイトの上部メニューから、

ウンロード作業も、事前の Python インストーの性能や堅牢性の恩恵に預かれるのだ。Unix→ “Tukubai”

ル作業も不要だ ( これらは自動的に行われ→ “Open usp Tukubai ダウンロード ”

る )。

シェルはいわばその上に被さる薄い皮。だから、使わない手はない。

と進むと、そこで最新版が公開されている。

■ なぜ Tukubai ？

wget や fetch コマンド等を使って取得した

しかし、実際の業務アプリケーションや

後、次のようにして解凍、およびインストー

Web アプリケーションを作ろうとすると、ルする。

そこで頻出する処理を簡単にやってくれるコ?!ubs!kyg!pqfo.vtq.vlvcbj.zzzznnee/ubs/c{3?!tvep!nblf!jotubmm

マンドがなかなか無い。一般的にシェルスク
リプトが開発言語として利用されない理由もここにある。そこを補うべく作られたものがTukubai というわけだ。

レンタルサーバー等、root 権限が与えられておらず、ホームディレクトリー等にイン

具体的には root になって下記のコマンドを打ち込むだけである。
$!de!0vts0qpsut0efwfm0pqfo.vtq.uvlvcbj$!nblf!jotubmm!dmfbo

記事中のプログラムは
UECサイトにてダウンロード可本特集では、Tukubai を使うと、どんなこストール先を変更したい場合、次のように

さあ、これで準備完了だ。この後紹介するとができて、それはどんなふうに書けるかとmake に与える LOCALBASE 変数でそのディレシピで、Tukubai の雰囲気を掴みとって欲いうことがわかるレシピを紹介しよう。

レクトリー指定できる。

しい。

Open usp Tukubai を
インストールする?!ubs!kyg!pqfo.vtq.vlvcbj.zzzznnee/ubs/c{3?!nblf!MPDBMCBTF>0ipnf0VTFSOBNF0uvlvcb
j!jotubmm

インストールは簡単。アーカイブをダウンロードして解凍し、make install するだけ。
だが、もう少し詳しく説明してみよう。

4

USP MAGAZINE vol.5

しかしながら、それらのレシピを手で打ち込むのは大変な作業だ。そこで、本記事で紹介したレシピのプログラム、及びサンプ
ルデータを、先程紹介したポータルサイト

この場合は、環境変数 $PATH に Tukubai
コマンドのパスを追加すること。上記例の場

UEC にてダウンロードできるようにしてある。是非併せて活用してもらいたい。

特集１― Open usp Tukubai シンプルレシピ Part1・テキスト編

τΏάˍನຘͬैͥȃ
問題

シェルスクリプトで業務システムを作れるというが、それならシェルスクリプトやTukubai を使って帳票を作ることはできるのか？できるなら例を見せてもらいたい。帳票というからには数値計算だけではなく、きちんとした見た目にレイアウトするところまで面倒を見てもらわないと困る。

解答
勿論できる。テキストファイル（スペース区
切り）の各種テーブルが用意されていれば *1、Tukubai コマンドを使って既存のリレーショ
ナルデータベース（RDB）でできるデータの加工は概ねできる。加工されたデータはテキ

File1．売上データ「URE」

File2．商品所属部門対応表「BUMON」

1112!1111118!31182312!228!9446!.256
1112!1111118!31182313!211!8932!.241
1112!1111118!31182314!214!7123!.226
1112!1111118!31182315!215!7452!.231
1112!1111118!31182316!213!7276!.246
1112!1111118!31182317!217!8312!.236
1112!1111118!31182318!219!7144!.226
1112!1111118!31182319!243!7217!.211!!!!!!!!!!!!!!!!!ȇ
!!!!!!!!!!!!!!!!!ȇ

1111118!112
1111128!112
1111132!1131111136!113
1111138!112
1111141!112
1111154!112
1111156!113
1111158!112!!!!!!!!!!!!!!!!!ȇ
!!!!!!!!!!!!!!!!!ȇ

Ⴅࢹ௮)ऒ̥ͣਜ਼ͅ*2/ഝ΋ȜΡ!3/੸຦΋ȜΡ!4/඾ັ
5/คତ!!!!!6/คષࣞ!!!!!7/౵֨ࣞႥࢹ௮)ऒ̥ͣਜ਼ͅ*2/੸຦΋ȜΡ!3/໐࿝΋ȜΡ

File3．部門名表「BNAME」

File4．店舗所在地域対応表「TENAREA」

112!࿤ऴ
113!‫ض‬໤
114!‫ݿ‬ٚ႒
115!ර႒
116!಺ྙၳ
117!‫ۋ‬໤̷͈ఈ
118!ༀ
119!გ໓႖௬
11:!‫م‬ঊ
121!֩ၳ
122!ਈ႒

1112!2114
1113!2116
1114!2114
1115!2118
1116!2113
1117!2116
1118!2114
1119!2116
111:!2114!!!!!!!!!!!!!!!!!ȇ
!!!!!!!!!!!!!!!!!ȇ

Ⴅࢹ௮)ऒ̥ͣਜ਼ͅ*2/໐࿝΋ȜΡ!3/໐࿝ྴႥࢹ௮)ऒ̥ͣਜ਼ͅ*2/੸຦΋ȜΡ!3/໐࿝΋ȜΡ

ストデータになっているため、引き続き、ス
ペース調整や罫線挿入を施すことで、レイア
ウトを整えることまでできる。

File5．地域名表「AREANAME」■ サンプルプログラム
全国のスーパーから集めた売上に関するデータテキストと、その他 4 つのマスター
データ（商品所属部門対応表、部門名表、店2112!ཤ٬ൽ
2113!൐ཤ
2114!‫۾‬൐
2115!ಎ໐
2116!߃‫ܪ‬
2117!ಎঅ࣭
2118!߇ਗ

数の帳票を作成してみる。
元データは次の通り、いずれもスペース区
切りのテキストデータである。

舗所在地域対応表、地域名表）テーブル群のテキストファイルを元データとし、ある一週間における、地域別・商品部門別の商品販売Ⴅࢹ௮)ऒ̥ͣਜ਼ͅ*2/౷֖΋ȜΡ!3/౷֖ྴ

*1 本レシピでは割愛するが、スペース区切りになっていない生データ ( 例えばログファイル等 ) をそのように加工するのも Tukubai で行っている。

リスト１．BUMONTREND：商品部門・地域別の売数推移の帳票を作成するプログラム
2! $"0cjo0ti!
3! $4! $!CVNPOUSFOE!;!໐࿝༆คତଔ֊)౷֖༆ඤ࿫ȫ5! $6! $!Vtbhf;!CVNPOUSFOE
7! $8! $!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*!0!Ebuf!;!23!Kvo/3123
9! $!Bssbohfe!cz!VTQ!NBHB[JOF)nbhAvtq.mbc/dpn*!0!Ebuf!;!23!Kvo/3123:!
21! $!་ତ͈೰݅
一時ファイルの置き場所定義
22! unq>unq
帳票での23! tubsu>31182314
対象期間定義24! foe>3118231:
25!
26! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
27! $!์คΟȜΗ͈ਬࠗ
28! $!!VSF!!!!!!2/ഝ΋ȜΡ!3/੸຦΋ȜΡ!4/඾ັ!5/คତ!6/คષࣞ!7/౵֨ࣞ
29! $!!CVNPO!!!!2/੸຦΋ȜΡ!3/໐࿝΋ȜΡ
2:! $!!UFOBSFB!!2/ഝ΋ȜΡ!3/΀ςͺ΋ȜΡ
31! $!!BSFBOBNF!2/΀ςͺ΋ȜΡ!3/΀ςͺྴ
32! $!!COBNF!!!!2/໐࿝΋ȜΡ!3/໐࿝ྴ
33! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

Tukubai を使ったコーディングの作法では、
いつ、誰が書いたのかを冒頭に記す。
（コード内容が分からない時の手がかりとなる）

変数を設定する場合は、なるべく冒頭で行う。

加工の対象となる元データ各々の列構造も、
コメントとして記しておく。

次ページへ続く→5• 売上データを本流データとし、これを最初にパイプに流す
34! bxl!(%4?>(%tubsu(''%4=>(%foe(|qsjou~(!VSF!!!}（他のマスターデータは、あくまでこの本流に付加する支流データ）
35!kpjo2!lfz>3!CVNPO!!!!!!!!!!!!!!!!!!!!!!!!!!!}• 売上データのうち、処理対象期間を抽出する（≒ where 句）
36! tpsu!.l2-2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
37!kpjo2!lfz>2!UFOBSFB!!!!!!!!!!!!!!!!!!!!!!!!!}
店コードをキーにして、店舗所在地表と内部結合（≒ inner join 句）
38! $!\MBZPVU^!2/ഝ΋ȜΡ!3/΀ςͺ΋ȜΡ!4/੸຦΋ȜΡ!5;໐࿝΋ȜΡ!
39! $!!!!!!!!!!6/඾ັ!7/คତ!8/คષࣞ!9/౵֨ࣞ!!$「パイプのこの位置を流れているデータ
3:!tfmg!5!3!6!7!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
指定列のみ抽出する “SELect Field”（≒ select 句）の列構造はどうなっているか」について
41! $!\MBZPVU^!2/໐࿝΋ȜΡ!3/΀ςͺ΋ȜΡ!4/඾ັ!5/คତ
要所要所で記しておくとよい。
42! tpsu!.l2-4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}• 1 列目 ( 部門名 ) 〜 3 列目 ( 日数 ) までの列が完全に
43!tn3!2!4!5!5!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
同一の行について、それぞれ 4 列目 ( 売数 ) 〜 4 列
44! tpsu!.l3-3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}目 ( 同 ) を縦に合計する（≒ group by 句）
45!kpjo2!lfz>3!BSFBOBNF!!!!!!!!!!!!!!!!!!!!!!!!}• join 系 ,sm 系コマンドは、使用前にソートが必要
46! tpsu!.l2-2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
47!kpjo2!lfz>2!COBNF!!!!!!!!!!!!!!!!!!!!!!!!!!!}
48! $!\MBZPVU^!2/໐࿝΋ȜΡ!3/໐࿝ྴ!4/΀ςͺ΋ȜΡ!5/΀ςͺྴ!6/඾ັ!7/คତ
49! bxl!(|qsjou!%2#;#%3-%4#;#%5-%6-%7~(!!!!!!!!!}
4:! $!\MBZPVU^!2/໐࿝΋ȜΡ;໐࿝ྴ!3/΀ςͺ΋ȜΡ;΀ςͺྴ!4/඾ັ!5/คତ
3 列目 ( 日付 ) に基づき、その次の列との手前に曜日文字列を挿入（元データは一列増えることになる）
51!zpcj!.k!4!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
52! bxl!(|%4>%4#)#%5#*#<qsjou~(!!!!!!!!!!!!!!!!!}
指定列のみ削除する “DELete Field”（≒ select 句）
53!efmg!5!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
54! $!\MBZPVU^!2/໐࿝΋ȜΡ;໐࿝ྴ!3/΀ςͺ΋ȜΡ;΀ςͺྴ!4/඾ັ)ဟ඾*!5/คତ
55! $!nbq!;!໐࿝0΀ςͺౙպͅคତͬ඾ັ‫؍‬ജ‫!!!ٳ‬$縦並びの表を横に展開する。（後述）
56!nbq!ovn>3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
57! $!bxl!;!ΰΛΘȜ࣐ͬ࠮0඾)ဟ඾*͈ࠁͅ‫!!!ࢥح‬$58! bxl!(OS>>2|gps)j>4<j=>OG<j,,*|%j>tvctus)%j-6-3*#0#tvctus)%j-8*~<qsjou~
2 列目まで ( 部門コード , エリアコード ) をキーとし、
59! !!!!!OS?2|qsjou~(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
その次の列以降の値を横に加算。最終列の後ろに
5:! $!ztvn!;!‫!!!!!!!!!!!!!!!!!̳ͥحັࣣͬࠗۼܢ‬$付け足す。
61!ztvn!,i!ovn>3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}• sm2 の類似コマンド
62! $!tn5!;!໐࿝̮͈ࣣ࣐͂ࠗͬொව̳ͥ!!!!!!!!!!$• 1 列目 ( 部門名 ) 〜 1 列目 ( 同 ) をキーとして扱い、3 列目〜最終列 ( 各
63!tn5!,i!2!2!3!3!4!OG!!!!!!!!!!!!!!!!!!!!!!!!!}
曜日の売数 ) をそれぞれ縦に合計するのは同じだが、サブキーとして
64! bxl!(|jg)%30A0*|%3>#::::;஠࣭ࠗ#~<qsjou~(!!}
残したい列 ( 今回は 2 列目 ( 地域名 ) 〜 2 列目 ( 同 )) がある場合に使用。
65! $!bxl!;!ΰΛΘȜ࣐͈༎ਬ!!!!!!!!!!!!!!!!!!!!$
66! bxl!(OS>>2|%2>#໐࿝#<%3>#΀ςͺ#<%OG>#‫ࣣࠗۼܢ‬#<qsjou~
67! !!!!!OS?2|qsjou~(!!!!!!!!!!!!!!!!!!!!!!!!!!!}
可 読 性 向 上 の た め、3 列 目 以 降
68!dpnnb!,i!40OG!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}( 全 て 売 数 ) の 値 に カ ン マ を 振 る。
パイプの出口付近では、値69! $!bxl!;!໐࿝̮͂ͅࠓ஌
Ȫ‫؍‬ȫͬொව̳ͥ!!!!!!!!$(1000 ⇒ 1,000)の計算ではなく、見た目の6:! bxl!(CFHJO|l>tqsjoug)#&1229e#-1*<htvc)#1#-#>#-l*<~調整を行っている。
71! !!!!!OS=>3|qsjou<jg)OS>>2*|qsjou!l<htvc)#>#-#.#-l*<g>%2<~~
72! !!!!!OS?3|jg)%2">g*|g>%2<qsjou!l<~fmtf!jg)%2>>g*|g>%2<%2>#A#<~qsjou<~comma や keta といったコ
73! !!!!!FOE|qsjou!l<~(!!!!!!!!!!!!!!!!!!!!!!!!!}
全行通して同じ列が縦に並ぶように、各行の各列間スペースを調節する。
マンドは、整形用途に分類
74!lfub!.27!.23!21yOG.4!22!!!!!!!!!!!!!!!!!!!!!}される。
パイプの出力を一旦、
75! us!(A(!(!(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?!%unq.cpez
一時ファイルへ保存76!
77! $!ΰΛΘȜ̩ͬ̾ͥ
78! z2>%)fdip!%tubsu!}!dvu!.c!2.5*
79! n2>%)fdip!%tubsu!}!dvu!.c!6.7*
帳票の上につける書類のタイトルは、
7:! e2>%)fdip!%tubsu!}!dvu!.c!8.9*
先程のパイプとは別に作り、これもyobi コマンドは、標準入力のみならず、
81! x2>%)zpcj!.ek!%tubsu*
一時ファイルに保存
引数で加工元データを指定できる。
82! z3>%)fdip!%foe!}!dvu!.c!2.5*
83! n3>%)fdip!%foe!}!dvu!.c!6.7*
84! e3>%)fdip!%foe!}!dvu!.c!8.9*
85! x3>%)zpcj!.ek!%foe*
次ページへ続く→

Tukubai の名コマンドたち

その１―mapmap コマンドは縦並びのデータを横並びにしてくれる。しかしながら、この一言で表すのは難しい。下の図を見ながら動作を理解してもらいたい。
引数 num で数値 n を指定すると、1~n 列目までを縦 ( レコード )キーとし、n+1 列目を横 ( カラム ) キーとして表を作り、そこに
n+2 列目の値を拾って当てはめてくれる。主キー、サブキーと、キーが 2 階層あるようなデータの整理に活躍するコマンドなのである。

঑ഝB!!2Gคତ!!546352

map num=1

঑ഝB!!3Gคତ!!413225
঑ഝC!!2Gคତ!!4235:9+!!!!!2Gคତ!3Gคତ!4Gคତ঑ഝC!!3Gคତ!!332498

঑ഝB!546352!413225!371252

঑ഝC!!4Gคତ!!28:273

঑ഝC!4235:9!332498!28:273

USP MAGAZINE vol.5

その２―sm2 と sm4

sm2,sm4 の sm はサムアップの意であり、どちらも列合計を求める ( ＝縦に足す ) 計算をするためのものである。両者の違いは、主キーの他にサブキーを維持するか否かである。sm2 は維持しないためサブキー列を消し、列合計した行のみ出力する。一方 sm4 は、維持するため、列合計した行が増える形になる。

঑ഝB!!2Gคତ!!546352
঑ഝB!!3Gคତ!!413225

঑ഝB!!2Gคତ!!546352
sm4 1 1 2 2 3 3

঑ഝB!!4Gคତ!!371252

঑ഝC!!4Gคତ!!28:273
঑ഝB!!::85:7
঑ഝC!!824158

঑ഝB!!3Gคତ!!413225
঑ഝB!!4Gคତ!!371252

঑ഝC!!2Gคତ!!4235:9
঑ഝC!!3Gคତ!!332498

঑ഝB!!4Gคତ!!371252

6

Tukubai の名コマンドたち঑ഝB!!AAAAAA!!::85:7
sm2 1 1 3 3

঑ഝC!!2Gคତ!!4235:9
঑ഝC!!3Gคତ!!332498
঑ഝC!!4Gคତ!!28:273
঑ഝC!!AAAAAA!!824158

特集１― Open usp Tukubai シンプルレシピ Part1・テキスト編
86! dbu!==!FOE!?!%unq.ifbefs
87!
88! !!\!໐࿝༆คତଔ֊)΀ςͺඤ࿫*!^!!!!!!!!!!!!!!!!!!!!੄ႁ!;!%)ebuf*
Text1．標準出力に出された帳票データ「部門別売数推移（エリア別、2007」
89! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ξȜΎȜ!;!%VTFS 年 12 月３日〜 2007 年 12 月９日）
8:!
91! ȁਬࠗ‫!;!ۼܢ‬%|z2~ා%|n2~࠮%|e2~඾)%|x2~*!.!%|z3~ා%|n3~࠮%|e3~඾)%|x3~*
92!
93! FOE
94!
95! $!ΰΛΘȜ͂ΟȜΗ̵ࣣͬͩ̀੄ႁ
96! dbu!%unq.ifbefs!%unq.cpez
タイトルと表本体を順番に出力する。
97!
98! $!ਞၭ
作った一時ファイルを片付ける。
99! sn!.g!%unq.+
9:! fyju!1
最後に必ず exit 0 を書くのも Tukubai のコーディング作法である。

このシェルスクリプトによって次の帳票テキストデータが生成される。

!!\!໐࿝༆คତଔ֊)΀ςͺඤ࿫*!^!!!!!!!!!!!!!!!!!!!!੄ႁ!;!3123ා!!7࠮!23඾!‫غ‬ဟ඾!22;48;23!KTU!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ξȜΎȜ!;!vtqȁਬࠗ‫!;!ۼܢ‬3118ා23࠮14඾)࠮*!.!3118ා23࠮1:඾)඾*໐࿝!!!!!!!!!!!!!΀ςͺ!!!!!!!!23014)࠮*!!23015)‫!!*غ‬23016)କ*!!23017)࿐*!!23018)߄*!!23019)ാ*!!2301:)඾*!!!!‫ࣣࠗۼܢ‬>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
112;࿤ऴ!!!!!!!!!2112;ཤ٬ൽ!!!!!32:-171!!!!311-651!!!!299-811!!!!577-251!!!!878-351!!!!418-991!!!!367-371!!!3-516-931!!!!!!!!!!!!!!!!!2113;൐ཤ!!!!!!!912-631!!!!881-491!!!!887-371!!2-88:-191!!4-214-851!!2-517-931!!2-551-511!!21-189-311!!!!!!!!!!!!!!!!!2114;‫۾‬൐!!!!!2-619-793!!2-546-635!!2-638-773!!4-768-157!!7-262-439!!3-497-563!!3-469-538!!2:-136-232!!!!!!!!!!!!!!!!!2115;ಎ໐!!!!!!!:36-711!!!!:12-:11!!2-121-211!!3-468-931!!4-987-:71!!2-439-571!!2-512-591!!22-913-431!!!!!!!!!!!!!!!!!2116;߃‫!!!!!!!ܪ‬649-271!!!!639-951!!!!738-291!!2-58:-811!!3-442-171!!!!94:-471!!2-177-111!!!8-521-411!!!!!!!!!!!!!!!!!2117;ಎঅ࣭!!!!!8:4-191!!!!882-851!!!!768-531!!2-:59-571!!3-951-531!!2-513-571!!2-2:9-:31!!!:-723-611!!!!!!!!!!!!!!!!!2118;߇ਗ!!!!!2-133-891!!!!:7:-951!!!!:21-411!!3-565-291!!4-93:-251!!2-475-431!!2-586-:11!!23-137-571!!!!!!!!!!!!!!!!!::::;஠࣭ࠗ!!!6-919-993!!6-689-875!!6-7:8-733!25-253-537!33-9::-999!!:-146-863!!:-2:8-498!!83-471-832......................................................................................................................
113;‫ض‬໤!!!!!!!!!2112;ཤ٬ൽ!!!!!246-671!!!!287-511!!!!289-671!!!!58:-251!!!!869-771!!!!445-451!!!!256-191!!!3-318-851!!!!!!!!!!!!!!!!!2113;൐ཤ!!!!!!!756-671!!!!639-351!!!!783-111!!2-591-351!!3-211-991!!2-131-331!!!!::8-551!!!8-555-691!!!!!!!!!!!!!!!!!2114;‫۾‬൐!!!!!2-231-351!!2-3:3-531!!2-156-631!!4-226-971!!5-715-:71!!2-97:-271!!3-185-:91!!26-234-251!!!!!!!!!!!!!!!!!2115;ಎ໐!!!!!!!855-:51!!!!894-231!!!!842-971!!2-987-791!!3-:94-951!!2-159-671!!2-353-671!!!:-522-671!!!!!!!!!!!!!!!!!2116;߃‫!!!!!!!ܪ‬544-:31!!!!589-991!!!!555-371!!2-27:-711!!2-76:-471!!!!98:-:11!!!!87:-:11!!!6-946-931!!!!!!!!!!!!!!!!!2117;ಎঅ࣭!!!!!6:4-651!!!!751-671!!!!658-391!!2-831-611!!3-222-531!!!!989-691!!!!965-:71!!!8-457-951!!!!!!!!!!!!!!!!!2118;߇ਗ!!!!!!!849-751!!!!843-931!!!!864-191!!2-855-891!!3-897-271!!2-251-951!!2-3:5-:31!!!:-2:2-351!!!!!!!!!!!!!!!!!::::;஠࣭ࠗ!!!5-523-511!!5-743-551!!5-483-671!22-697-911!28-116-391!!8-282-711!!8-48:-951!!67-671-:31......................................................................................................................
114;‫ݿ‬ٚ႒!!!!!!!2112;ཤ٬ൽ!!!!!347-871!!!!345-171!!!!321-551!!!!56:-:51!!!!925-531!!!!413-191!!!!342-431!!!3-59:-131!!!!!!!!!!!!!!!!!2113;൐ཤ!!!!!!!964-591!!!!992-131!!!!866-511!!2-:56-511!!3-:82-331!!2-126-891!!2-31:-931!!!:-743-231!!!!!!!!!!!!!!!!!2114;‫۾‬൐!!!!!2-818-871!!2-895-431!!2-728-:91!!5-125-:31!!6-683-191!!3-679-:71!!3-748-931!!2:-:14-951!!!!!!!!!!!!!!!!!2115;ಎ໐!!!!!2-182-811!!!!:72-471!!2-232-271!!3-521-791!!4-88:-631!!2-655-471!!2-888-371!!23-777-151!!!!!!!!!!!!!!!!!2116;߃‫!!!!!!!ܪ‬72:-971!!!!718-951!!!!698-311!!2-695-311!!3-473-411!!2-146-751!!!!:83-451!!!8-87:-491!!!!!!!!!!!!!!!!!2117;ಎঅ࣭!!!!!893-751!!!!989-211!!!!81:-591!!2-:16-491!!4-155-211!!2-6:2-571!!2-461-891!!21-372-:51!!!!!!!!!!!!!!!!!2118;߇ਗ!!!!!2-137-471!!2-213-111!!!!::7-831!!3-753-631!!4-628-971!!2-629-391!!2-787-431!!23-591-171!!!!!!!!!!!!!!!!!::::;஠࣭ࠗ!!!7-3:9-671!!7-559-811!!6-::9-491!25-:74-151!33-172-611!!:-687-671!!:-966-771!!86-313-511
ȇȇ

解説
こ の サ ン プ ル プ ロ グ ラ ム は、Tukubai をしまうことができる。途中通過するコマンド

ないかと言いたいのである。（紙にしたけれは、SQL の句を 1 つ 1 つ切り出したようなばこのテキストファイルをプリンターデバイ

コマンドが多くあるあたりがまた面白い。

スに送れば良いだけだ）

使って帳票を作るシェルスクリプトとしては

さて処理全体を 1 本のパイプに収めてしま

勿論、Oﬃce アプリ向け ( 例えば CSV 形式 )非常に典型的な姿をしている。最大の特長

うことには 1 つ大きなメリットがある。パにして取り込ませたり、HTML タグを付けては、何十段にも及ぶパイプの接続である。（途

イプを構成しているコマンドは全て同時起動装飾させたりも可能だ。しかし、そのために中いくつかコメントや AWK コードで遮られし、工場の流れ作業のような並列処理が自然

新たなコストを支払うこと鑑みれば、これでているものの）パイプ記号が綺麗に縦に並べと実現されることとなるからだ。

完成としてしまうことも十分ありなのではなられ、このシェルスクリプトにおいては実に■ プレーンテキストの帳票いだろうか。

25 段にも及ぶ。

■ 1 本のパイプがもたらす効果

帳 票 を 作 る と い う と、Oﬃce ア プ リ やこのように、レイアウトという帳票作りのHTML といった手段で表現することを考えが最終工程を簡単に済ませられるのも、テキス

Tukubai コマンドを使えば、このような長ちだが、このプレーンテキストの表を見て意トベースの手法をとっているメリットの一つ

いパイプ 1 本に元データを流し込むだけで外に様になっているようには感じないだろうと言えるだろう。

帳票（きちんと整形された姿）を完成させてか。これで事足りる場面が意外に多いのでは

7

τΏάˎ

σȜΫΛ·΅νȜήͬैͥȃ
ソドックスなもの）を作ってみた。

問題

解答

Tukubai はシェルスクリプトをデータベー

実際に科学技術計算にも利用しているのだ

つの行列に対応した 6 つの行列であると見ス言語化させるためだけのコマンドセットでが、そのような例は専門分野の知識から解説なせる。キューブを動かすと、その行列のうはないというが、それならもっと一般的な例

しなければならない。そこでここでは専門分

ちの一つで± 90°回転が発生し、それに伴っは無いのか。

野知識の解説が不要なゲームのレシピを紹介て隣接する 4 つの面に相当する行列の一部しよう。数学パズル的要素が強いゲームであ要素が、別の行列に移動する。

数理的な操作の様子が伺えるコードが見てルービックキューブは、立方体の一面が一みたい。例えば、何らかの科学技術計算を行っれば、数理的な操作も見え易いからだ。

ているプログラムであれば、それがわかりや■ サンプルプログラム

すいと思うのだが。

この動きを、シミュレートしようというものである。

そこでルービックキューブ（3 × 3 のオー

リスト２．rubik-cube : ルービックキューブプログラム（ファイル 1・メイン）
2!$"0cjo0cbti
3!$
4!$!ˏ̔ˏσȜΫΛ·΅νȜή
5!$!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*
6!$!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!6!Kvo/3123
7!$!Bssbohfe!cz!VTQ!NBHB[JOF)nbhAvtq.mbc/dpn*
8!$!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!7!Kvo/3123
9!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!˱
:!$!ၛ༷ఘ)˒࿂ఘȫ͈ജ‫ٳ‬଎Ɂ˨ˢˮ˞
21!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ˠ!
22!$!G;gpsf!C;cbdl!V;vq!E;epxo!S;sjhiu!M;mfgu
23!$
24!$!‫۾‬ତ̂ȇ࿂ˢͬশࠗٝͤ
Ȫֲ˕ˌഽٝഢȫ
25!$!‫۾‬ତˢȇ࿂ˢͬ฽শࠗٝͤ
Ȫऒ˕ˌഽٝഢȫ
26!
27!$!་ତ೰݅)֚শέ͹ͼσΩΑ0಍૗ΟȜΗ*28!unq>unq
29!G>aqsjoug!(]144\54nG]144\11n(a2:!V>aqsjoug!(]144\57nV]144\11n(aルービックキューブの面要
31!S>aqsjoug!(]144\52nS]144\11n(a素に色を付けるためのエス
32!C>aqsjoug!(]144\56nC]144\11n(aケープシーケンス定義
33!E>aqsjoug!(]144\55nE]144\11n(a34!M>aqsjoug!(]144\53nM]144\11n(a35!
36!$!‫۾‬ତ͈ͼϋ·σȜΡ
関数だけ別定義した下記の37!tpvsdf!svcjl.dvcf/gvod
プログラムリストをインク
38!
ルード

39! $!੝‫اܢ‬0ΏλΛέσ0൞̢ैͤ)ΏλΛέσ͈‫ݙ‬ௌैܱͬ჏*3:! joju!
41! sboe!%|2.>21~!3?!%unq.bot
42! bot>%)ubd!%unq.bot!}!zbss!.e!}!us!b.{B.[!B.[b.{*43!
ここで文字列を逆順 (abc → cba) に並べよ
44! $!ΊȜθ͈‫ٳ‬ই うとしている。これをやりたいなら、対象
45! o>2
文字列を一旦 tarr 等で縦並びにしておけば46! xijmf!usvf<!ep tac で縦の逆順にできるから。これを yarr
で横並びにすればよい。
47!
48! !!fdip!#!Gpsf!!!!Vq!!!!!!Sjhiu!!!Cbdl!!!!Epxo!!!!Mfgu#
49! !!fdip!#!.............................................#
4:! !!zdbu!.4!G!V!S!C!E!M!!!!!!!!!!!!!!!!!!!}
51! !!zdbu!0efw0ovmm!.!!!!!!!!!!!!!!!!!!!!!!}
52! !!tfe!.f!#t0G0%G0h<!t0V0%V0h<!t0S0%S0h#!]
53! !!!!!!.f!#t0C0%C0h<!t0E0%E0h<!t0M0%M0h#
54! !!fdip!#=.g!G.?!=.v!V.?!=.s!S.?!=.c!C.?!=.e!E.?!=.m!M.?#
55! !!fdip!.o!#%|bot~\%o^?!#• こ こ の F~L は キ ュ ー ブ
56! !!sfbe!.o!2!tds
各面の現在の要素の配列
57! !!fdip!!
状況を記憶するための一58! !!\!#%tds#!>!#r#!^!''!csfbl
時ファイル。
（3 × 3 行列）
59! !!fwbm!%|tds~!3?!0efw0ovmm• 各面の 3 × 3 の状況を5:! !!o>%))o,2**
横に並べて表示するため
61!
/dev/null と ycat す る こ と で に ycat を使っている。
62! epof
行頭にスペースを挿れている。
63!
キューブ 1 回操作につき 1 周の無 限 ル ー プ。 ① 現 在 状 況 表 示、
64! sn!G!C!V!E!S!M!%unq.+②操作指示待ち、③指示に基づ
65! fyju!1
く実際の操作、の繰り返し。

リスト３．rubik-cube.func : ルービックキューブプログラム（ファイル 2・関数定義）
2! $!SVCJL.DVCF!΀ϋΐϋ
3! $4! $!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*
5! $!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!6!Kvo/3123
6! $!Bssbohfe!cz!VTQ!NBHB[JOF)nbhAvtq.mbc/dpn*
7! $!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!7!Kvo/3123
8!
9! joju!)*!!!!$!૗̦ఁ̹̽΅νȜήͬΓΛΠ̳ͥ:! |21! !!gps!tvsg!jo!G!V!C!E!S!M<!ep
22! !!!!zft!#%tvsg#!}F F F ←というような内容の文字列
23! !!!!ifbe!.:!!!!!}F F F を作っている。最初 "F" を縦に24! !!!!zbss!.4!!!!!?!%tvsg F F F 9 個作り、yarr を使って横 3 列に広げて敷き詰めている。
25! !!epof
メインループで入力された 1 文字がこれら 12 通りの関数名の26! ~いずれかになっていた時、eval によりその関数が呼び出される。
27!
28! s!)*!!$!ˮ࿂)Sjhiu*͈˕ˌഽশࠗٝͤ
29! |

8

USP MAGAZINE vol.5

2:! !!tfmg!4!G!}!dbu!!!!!!!!!!!?!%unq.g
31! !!tfmg!4!V!}!ubd!!!!!!!!!!!?!%unq.v
32! !!tfmg!2!C!}!dbu!!!!!!!!!!!?!%unq.c
33! !!tfmg!2!E!}!ubd!!!!!!!!!!!?!%unq.e
34! !!efmg!4!G!}!zdbu!.!%unq.e!?!%unq.x<!nw!%unq.x!G!
35! !!efmg!4!V!}!zdbu!.!%unq.g!?!%unq.x<!nw!%unq.x!V
36! !!efmg!2!C!}!zdbu!%unq.v!.!?!%unq.x<!nw!%unq.x!C!
37! !!efmg!2!E!}!zdbu!%unq.c!.!?!%unq.x<!nw!%unq.x!E!
38! !!ubufzplp!S!}!tfmg!4!3!2!!?!%unq.x<!nw!%unq.x!S
39! ~ tateyoko は転置行列を求めるコマンド。でも何と直感的なネーミングなことか。( 但し日本人専用 )3:!
41! S!)*!!$!ˮ࿂)Sjhiu*͈˕ˌഽ฽শࠗٝͤ
取り出す列番号を42! |逆順に指定すれば、
43! !!tfmg!4!G!}!ubd!!!!!!!!!!!?!%unq.g
テーブルを左右反44! !!tfmg!4!V!}!dbu!!!!!!!!!!!?!%unq.v
転させられるとい45! !!tfmg!2!C!}!ubd!!!!!!!!!!!?!%unq.c
う self の応用例
46! !!tfmg!2!E!}!dbu!!!!!!!!!!!?!%unq.e
47! !!efmg!4!G!}!zdbu!.!%unq.v!?!%unq.x<!nw!%unq.x!G!
次ページへ続く→

特集１― Open usp Tukubai シンプルレシピ Part1・テキスト編
48!!!efmg!4!V!}!zdbu!.!%unq.c!?!%unq.x<!nw!%unq.x!V
49!!!efmg!2!C!}!zdbu!%unq.e!.!?!%unq.x<!nw!%unq.x!C!
4:!!!efmg!2!E!}!zdbu!%unq.g!.!?!%unq.x<!nw!%unq.x!E!
51!!!ubufzplp!S!}!ubd!!!!!!!!!?!%unq.x<!nw!%unq.x!S
52!~
53!
54!m!)*!!$!˨࿂)Mfgu*͈˕ˌഽশࠗٝͤ
55!|
56!!!tfmg!2!G!}!ubd!!!!!!!!!!!?!%unq.g
57!!!tfmg!2!V!}!dbu!!!!!!!!!!!?!%unq.v
58!!!tfmg!4!C!}!ubd!!!!!!!!!!!?!%unq.c
59!!!tfmg!4!E!}!dbu!!!!!!!!!!!?!%unq.e
5:!!!efmg!2!G!}!zdbu!%unq.v!.!?!%unq.x<!nw!%unq.x!G!
61!!!efmg!2!V!}!zdbu!%unq.c!.!?!%unq.x<!nw!%unq.x!V
62!!!efmg!4!C!}!zdbu!.!%unq.e!?!%unq.x<!nw!%unq.x!C!
63!!!efmg!4!E!}!zdbu!.!%unq.g!?!%unq.x<!nw!%unq.x!E!
64!!!ubufzplp!M!}!tfmg!4!3!2!!?!%unq.x<!nw!%unq.x!M
65!~
66!
67!M!)*!!$!˨࿂)Mfgu*͈˕ˌഽ฽শࠗٝͤ
68!|
69!!!tfmg!2!G!}!dbu!!!!!!!!!!!?!%unq.g
6:!!!tfmg!2!V!}!ubd!!!!!!!!!!!?!%unq.v
71!!!tfmg!4!C!}!dbu!!!!!!!!!!!?!%unq.c
72!!!tfmg!4!E!}!ubd!!!!!!!!!!!?!%unq.e
73!!!efmg!2!G!}!zdbu!%unq.e!.!?!%unq.x<!nw!%unq.x!G!
74!!!efmg!2!V!}!zdbu!%unq.g!.!?!%unq.x<!nw!%unq.x!V
75!!!efmg!4!C!}!zdbu!.!%unq.v!?!%unq.x<!nw!%unq.x!C!
76!!!efmg!4!E!}!zdbu!.!%unq.c!?!%unq.x<!nw!%unq.x!E!
77!!!ubufzplp!M!}!ubd!!!!!!!!!?!%unq.x<!nw!%unq.x!M
78!~
79!
7:!g!)*!!$!ˢ࿂)Gspou*͈˕ˌഽশࠗٝͤ
81!|
82!!!ubjm!.2!V!}!ubss!!!!!!!!!!!!!!?!%unq.v
83!!!tfmg!!2!S!}!zbss!!!!!!!!!!!!!!?!%unq.s
84!!!ubjm!.2!E!}!ubss!}!ubd!!!!!!!!?!%unq.e
85!!!tfmg!!4!M!}!zbss!}!tfmg!4!3!2!?!%unq.m!
86!!!dubjm!.2!V!}!dbu!.!%unq.m!!!!!?!%unq.x<!nw!%unq.x!V
87!!!efmg!2!S!!!}!zdbu!%unq.v!.!!!!?!%unq.x<!nw!%unq.x!S
88!!!dubjm!.2!E!}!dbu!.!%unq.s!!!!!?!%unq.x<!nw!%unq.x!E
89!!!efmg!4!M!!!}!zdbu!.!%unq.e!!!!?!%unq.x<!nw!%unq.x!M
8:!!!ubufzplp!G!}!tfmg!4!3!2!!!!!!!?!%unq.x<!nw!%unq.x!G
ctail は cut tail( 尻尾を切る ) の意味。
91!~
指定された行数だけ末行を削除する。
92!

Tukubai の名コマンドたち

その３―ycatycat は「横 cat」の意であり、cat の横バージョンである。cat で複数のファイルを指定すれば、先に指定されたファイルの最終行の下に次のファイ
ルを結合するが、ycat の場合、先に指定されたファイルの最右端の先に結合する。先のファイルの右端位置が各行バラバラであるなら適宜ス
ペースを追加して崩れないようにする。
更に ycat は、結合する際に結合面にスペースを挿れるようになっている（デフォルトは 1 文字）。もし挿れたくなければオプションとして -0 を指定すればよいし、もっと多くしたければ大きい数字を指定する。

Tukubai の名コマンドたち

93! G!)*!!$!ˢ࿂)Gspou*͈˕ˌഽ฽শࠗٝͤ
94! |95! !!ubjm!.2!V!}!ubss!}!ubd!!!!!!!!?!%unq.v
96! !!tfmg!!2!S!}!zbss!!!!!!!!!!!!!!?!%unq.s
97! !!ubjm!.2!E!}!ubss!!!!!!!!!!!!!!?!%unq.e
98! !!tfmg!!4!M!}!zbss!}!tfmg!4!3!2!?!%unq.m
99! !!dubjm!.2!V!}!dbu!.!%unq.s!!!!!?!%unq.x<!nw!%unq.x!V
9:! !!efmg!2!S!!!}!zdbu!%unq.e!.!!!!?!%unq.x<!nw!%unq.x!S:1! !!dubjm!.2!E!}!dbu!.!%unq.m!!!!!?!%unq.x<!nw!%unq.x!E:2! !!efmg!4!M!!!}!zdbu!.!%unq.v!!!!?!%unq.x<!nw!%unq.x!M:3! !!ubufzplp!G!}!ubd!!!!!!!!!!!!!!?!%unq.x<!nw!%unq.x!G
:4! ~
:5!
:6! c!)*!!$!˞࿂)Cbdl*͈˕ˌഽশࠗٝͤ
:7! |:8! !!ifbe!.2!V!}!ubss!}!ubd!!!!!!!!?!%unq.v:9! !!tfmg!2!M!!}!zbss!}!tfmg!4!3!2!?!%unq.m::! !!ifbe!.2!E!}!ubss!!!!!!!!!!!!!!?!%unq.e
211! !!tfmg!4!S!!}!zbss!!!!!!!!!!!!!!?!%unq.s
212! !!ubjm!.o!,3!V!}!dbu!%unq.s!.!!!?!%unq.x<!nw!%unq.x!V
213! !!efmg!2!M!!!!!}!zdbu!%unq.v!.!!?!%unq.x<!nw!%unq.x!M
214! !!ubjm!.o!,3!E!}!dbu!%unq.m!.!!!?!%unq.x<!nw!%unq.x!E
215! !!efmg!4!S!!!!!}!zdbu!.!%unq.e!!?!%unq.x<!nw!%unq.x!S
216! !!ubufzplp!C!}!tfmg!4!3!2!!!!!!!?!%unq.x<!nw!%unq.x!C
217! ~
218!
219! C!)*!!$!˞࿂)Cbdl*͈˕ˌഽ฽শࠗٝͤ
21:! |
221! !!ifbe!.2!V!}!ubss!!!!!!!!!!!!!!?!%unq.v
222! !!tfmg!2!M!!}!zbss!}!tfmg!4!3!2!?!%unq.m
223! !!ifbe!.2!E!}!ubss!}!ubd!!!!!!!!?!%unq.e
224! !!tfmg!4!S!!}!zbss!!!!!!!!!!!!!!?!%unq.s
225! !!ubjm!.o!,3!V!}!dbu!%unq.m!.!!!?!%unq.x<!nw!%unq.x!V
226! !!efmg!2!M!!!!!}!zdbu!%unq.e!.!!?!%unq.x<!nw!%unq.x!M
227! !!ubjm!.o!,3!E!}!dbu!%unq.s!.!!!?!%unq.x<!nw!%unq.x!E
228! !!efmg!4!S!!!!!}!zdbu!.!%unq.v!!?!%unq.x<!nw!%unq.x!S
229! !!ubufzplp!C!}!ubd!!!!!!!!!!!!!!?!%unq.x<!nw!%unq.x!C
22:! ~
231!
232! v!)*!!$!˱࿂)voefs*͈˕ˌഽশࠗٝͤ
233! |
234! !!ifbe!.2!S!!!!!!!!!!!!!!!!!!!?!%unq.s
235! !!ifbe!.2!G!!!!!!!!!!!!!!!!!!!?!%unq.g
236! !!ifbe!.2!M!!!!!!!!!!!!!!!!!!!?!%unq.m
237! !!ifbe!.2!C!!!!!!!!!!!!!!!!!!!?!%unq.c
次ページへ続く→

b!!c!!d2!!3
4!!5!!6!!7

e!!fycat -3 ﬁle1 ﬁle2

g

ﬁle1

2!!3!!!!!!!!!b!!c!!d
4!!5!!6!!7!!!e!!f!!!!!!!!!!!!!gﬁle2

オプションで指定された横 3 文字分のスペース

ﬁle1 の右端を揃えるためのスペース

その４―tarr,yarr

tarr は「縦アレイ」、yarr は「横アレイ」の意。帳票作成向けの使い方もあるが、ここでは単純な列数調整コマンドとしての動きを紹介する。
両者共に一行あたりの列数を、オプションで指定された数に調整するためのコマンドであるが、tarr にはなるべく縦伸ばししようという性格が、
yarr にはなるべく横伸ばししようという性格が与えられており、それによって動作仕様が若干異なる。
一つはオプションで列数が指定されなかった際のデフォルト値。tarr は1 であり、無指定なら全要素を縦一列に並べる。一方 yarr は無限大。よって無指定なら全要素を横一行に並べる。もう一つは、改行コードの扱い。
tarr は縦伸ばししようとするので元データの改行コードを消さない。よってオプションで指定した列数に満たない行が途中でも生じ得る ( 右図 )。
一方 yarr は消すので、そのようなことはない。

b!c!d!eb!cb!c!d!eb!c!d!e!f!g

f

d!e

f

h!i!j!k!l!m

g!h!i!j!kf

g!h!i!j!kn

l!m!n!mg!hl!m!n!mtarr は元データの改行を保持する。
tarr -2

i!j
k
l!m
n!m

yarr -6

yarr は元データの改行を削除す
る。

tarr はオプションで指定した行数に満たない行が途中にも出ることがある。

9

238! !!ubjm!.o!,3!S!}!dbu!%unq.c!.!?!%unq.x<!nw!%unq.x!S
239! !!ubjm!.o!,3!G!}!dbu!%unq.s!.!?!%unq.x<!nw!%unq.x!G
23:! !!ubjm!.o!,3!M!}!dbu!%unq.g!.!?!%unq.x<!nw!%unq.x!M
241! !!ubjm!.o!,3!C!}!dbu!%unq.m!.!?!%unq.x<!nw!%unq.x!C
242! !!ubufzplp!V!}!tfmg!4!3!2!!!!!?!%unq.x<!nw!%unq.x!V
243! ~
244!
245! V!)*!!$!˱࿂)voefs*͈˕ˌഽ฽শࠗٝͤ
246! |
247! !!ifbe!.2!S!!!!!!!!!!!!!!!!!!!?!%unq.s
248! !!ifbe!.2!G!!!!!!!!!!!!!!!!!!!?!%unq.g
249! !!ifbe!.2!M!!!!!!!!!!!!!!!!!!!?!%unq.m
24:! !!ifbe!.2!C!!!!!!!!!!!!!!!!!!!?!%unq.c
251! !!ubjm!.o!,3!S!}!dbu!%unq.g!.!?!%unq.x<!nw!%unq.x!S
252! !!ubjm!.o!,3!G!}!dbu!%unq.m!.!?!%unq.x<!nw!%unq.x!G
253! !!ubjm!.o!,3!M!}!dbu!%unq.c!.!?!%unq.x<!nw!%unq.x!M
254! !!ubjm!.o!,3!C!}!dbu!%unq.s!.!?!%unq.x<!nw!%unq.x!C255! !!ubufzplp!V!}!ubd!!!!!!!!!!!!?!%unq.x<!nw!%unq.x!V
256! ~
257!
258! e!)*!!$!ˠ࿂)epxo*͈˕ˌഽশࠗٝͤ
259! |
25:! !!ubjm!.2!S!!!!!!!!!!!!!!!!!?!%unq.s
261! !!ubjm!.2!G!!!!!!!!!!!!!!!!!?!%unq.g
262! !!ubjm!.2!M!!!!!!!!!!!!!!!!!?!%unq.m
263! !!ubjm!.2!C!!!!!!!!!!!!!!!!!?!%unq.c
264! !!dubjm!.2!S!}!dbu!.!%unq.g!?!%unq.x<!nw!%unq.x!S
265! !!dubjm!.2!G!}!dbu!.!%unq.m!?!%unq.x<!nw!%unq.x!G

266! !!dubjm!.2!M!}!dbu!.!%unq.c!?!%unq.x<!nw!%unq.x!M
267! !!dubjm!.2!C!}!dbu!.!%unq.s!?!%unq.x<!nw!%unq.x!C
268! !!ubufzplp!E!}!tfmg!4!3!2!?!%unq.x<!nw!%unq.x!E
269! ~
26:!
271! E!)*!!$!ˠ࿂)epxo*͈˕ˌഽ฽শࠗٝͤ
272! |
273! !!ubjm!.2!S!!!!!!!!!!!!!!!!!?!%unq.s
274! !!ubjm!.2!G!!!!!!!!!!!!!!!!!?!%unq.g
275! !!ubjm!.2!M!!!!!!!!!!!!!!!!!?!%unq.m
276! !!ubjm!.2!C!!!!!!!!!!!!!!!!!?!%unq.c
277! !!dubjm!.2!S!}!dbu!.!%unq.c!?!%unq.x<!nw!%unq.x!S
278! !!dubjm!.2!G!}!dbu!.!%unq.s!?!%unq.x<!nw!%unq.x!G
279! !!dubjm!.2!M!}!dbu!.!%unq.g!?!%unq.x<!nw!%unq.x!M
27:! !!dubjm!.2!C!}!dbu!.!%unq.m!?!%unq.x<!nw!%unq.x!C
281! !!ubufzplp!E!}!ubd!!!!!!!!!!?!%unq.x<!nw!%unq.x!E
282! ~!
283!
284! $!ρϋΘθͅঐ೰ٝତ΅νȜήͬٝഢ̵̯ͥ
285! sboe!)*286! |
287! !!gvod>)g!G!c!C!v!V!e!E!s!S!m!M*
288! !!gps))j>1<!j=%2<!j,,**<!ep
289! !!!!qspd>%|gvod\%))%|SBOEPN~&23**^~!
28:! !!!!fdip!%qspd!2?'3!!!$!਀௽̧ͬ༗ం̳ͥ
291! !!!!fwbm!%qspd!!!!!!!!$!‫۾‬ତ͈৘࣐
292! !!epof
12 通りの回転関数名の配列を作り、それらをランダムに呼293! ~
び出すことでキューブの並びを崩している。

このシェルスクリプトを実行すると写真２のような画面になる。キューブの全 6 面が横
正面 (Fore) が反時計回りに 90°回転し、隣接する上面 (Up)、右面 (Right)、底面(Down)、左面 (Left) の一部要素が互いに移動する。

一列に表示される。左から、正面、上面、右面、背面、底面、左面の順番である。
そしてキー入力待ちになっているが、こ
こでそれぞれの頭文字（F,U,R,B,D,L）をタイ

上面 (Up) が時計回りに 90°回転し、隣接する正面 (Fore)、右面 (Right)、背面(Back)、左面 (Left) の一部要素が互いに移動する。

プするとその面が 90°回転する。ただし小文 字（f,u,r,b,d,l） の 時 は 時 計 回 り、 大 文 字（F,U,R,B,D,L）の時は反時計回りだ。回転す
れば勿論、隣接する他の４つの面の状態も変化する。ターミナルという制約上、立体的に背面 (Back) が反時計回りに 90°回転し、隣接する上面 (Up)、右面 (Right)、底面(Down)、左面 (Left) の一部要素が互いに移動する。

表示することが出来ず、イメージが掴めるま
での間大変なのだが、ちょっと遊んでみよう。
し か し 実 は、 入 力 プ ロ ン プ ト の と こ
ろ に 解 答 が 記 し て あ る（ 写 真 ２ で は“RldDLRLFFuB”）。よって、この通りにタイプすれば誰でも簡単に全色を揃えることができてしまうのだが……。
尚、終了したい時は “q” とタイプする。

解説

写真２．ルービックキューブプログラムの実行画面
先のレシピ解説において「Tukubai は SQLある。多くが単機能のコマンドとして切り出の句を一つ一つ切り出したようなコマンドがされているおかげで汎用性を兼ね備えるよう多い」と述べたわけだが、それが行列の操作になったのだ。

に多用されているとことが興味深い。これは人は情報を整理する時によく紙と鉛筆を使プログラムリスト（特に後者の 12 通りのつまり、データベース操作も行列操作も、数う。それと同様にしてコンピューターに対回転関数）を観察してみると、self や delf 等、

理的にはほぼ同じ概念の操作であるというこ

し、情報整理をテキストデータ・テキスト

帳票作成でも使用したコマンドが頻出していとを意味しているのではないだろうか。

ファイルで行わせようというのが Open usp

る。先のレシピでは使わなかったものの本レ

Tukubai は、シェルスクリプトをデータ

Tukubai をリリースした USP 研究所の提案

シピで登場した tarr や yarr というコマンド

ベース言語化するための拡張コマンドセット

であり、そのための要素技術が Tukubai をも帳票作成でよく使うコマンドである。

というわけではない、主張する理由はここに加えた UNIX コマンドセットと言えよう。

10 USP MAGAZINE vol.5

まつもとゆきひろ（Ruby アソシエーション理事長）が語る

10 年先も勝負できる
プログラマーとは6 回目を数える TechLION。
100 名を優に超えるであろう参加者・関係者が、東京・六本木のイベントスペース SuperDeluxe に集った。
第一部では、オブジェクト指向スクリプト言語「Ruby」の開発者、Matz こと
まつもとゆきひろ氏が登壇。
Ruby が全世界で愛用されるプログラミング言語になりえたのはなぜか。
コンピューターと Ruby の未来は。
プログラマーが食べていくためにすべきことは――これらの問いに持論を展開した。
お相手は、おなじみ法林浩之氏（日本 UNIX ユーザ会）に、今回から技術評論社の馮富久氏も MC に加わり対談を盛り上げた。
エンジニアである自らの経験に即した
まつもと氏のメッセージをお伝えしたい。
（聞き手：法林浩之、馮富久、まとめ：柏崎吉一）
法林：こんにちは、今日のゲストは Ruby の法林：ちなみにグルーヴノーツの広報のお姉

法林：つまり Ruby が、Perl、Python に並ん

パパ、まつもとゆきひろさんです。

さん、ドラ娘で有名なショウジユウコさん

だ！ PHP の人は、もらっていないの？

まつもと：こんにちは。本日はよろしくお願という方です（会場：おー）。そして、まつまつもと：もらっていないですね。

いします。

も と さ ん、FSF（Free Software foundation）

法林：じゃあ、PHP には、勝った（会場：笑）。

法林：あ、乾杯する指令を、忘れた。いまド

AWARD2011 での受賞！（会場：拍手）。おまつもと：ちなみに、なぜかこの賞をリーナ

リンクもってきますね（ビール到着）。では、

めでとうございます。

スはもらっていない。それはともかく、私

カンパーイ。いろいろおめでとうございます。

まつもと：ありがとうございます。FSF のは FSF の受賞時に、思わず涙が出そうにな

肩書き、増えましたね。

The Award for the Advancement of Free

りました。松江市名誉市民に選ばれた時と、

まつもと：Ruby Association は去年、一般財

Software という賞を最初にもらったのは、喜びの質がまったく違った。FSF の選考者

団法人になりました。それから、グルーヴノー

ラリー・ウォール。Perl の開発者ですね。そは Ruby やフリーソフトウェアが何であり、ツのチーフアーキテクトになりました。発表

れから、Python を作ったグイド・ヴァンロッ

コードとは何かを理解しています。そういうはちょうど昨日（4 月 11 日）です。

サムも受賞しています。

人達が「君はフリーソフトウェアで頑張って

11

いるね」と評価してくれた。ストールマンとあの頃、「Ruby を使えるレンタルサーバー

技術者の人達がムーアの法則を維持させよう

LISP について語る、なんて話は他の賞では一覧」といった記事があったと記憶していまと頑張ってきたから、過去 40 年少なくとも

絶対出てこない（笑）
。

す。
「さくらはインストールしないと使えな

予言通りになっている。永遠に続かなくて

IT 業界にとって10 年先は永遠の未来であるい」とか。ただ Ruby の根本的なところは今も、まだしばらくは当たり続けるかもしれな

も 10 年前と変わっていないんです。一方、い。eXtreme Programming という開発手法

まつもと：雑誌の連載がたまったので今度、我々を取り巻く IT インフラもそう。メールがあります。自分が書いたコードを他人にレ本を出します。「コードの世界」の続編でタや Web。ツイッターはないけどチャットはビューしてもらうと思わぬ発見や気付きを得

イトルは、「コードの未来」です。今日しゃあった。基本的な道具立ては揃っていた。そやすいという考え方ですが、未来予測についべるネタは、それに関係します。さて本日のう振り返ると、コンピューターの世界ではても常識に囚われず大胆に、eXtreme にや

お題は、「10 年先も勝負できるプログラマー

年々劇的な変化が減っているように思いまりましょう。

とは」。10 年先というと、IT 業界にとってはす。

ソフトウェア開発の主戦場が変わる予想とはいえ時々、不連続なイノベーションはは難しい。そこで、次のような前提を導入し起こります。1903 年にライト兄弟が動力付

まつもと：中学の時に手にした両面倍密度ます。「現在から未来への変化は連続的であきの有人飛行機を 300 ｍ飛ばした 3 年後にの 320KB フロッピーディスク。記憶できるる」「技術動向は歴史の中で比較的予測しやはもう世界の空を飛行機がガンガン飛んでい空間は無限に広く感じられ、「この一枚で一すい」「eXtreme に考える」です。

永遠の未来のような気がしませんか？

た。IT の世界でも、今から 5 年後に量子コ

生やっていけるかも」とさえ思った。でも、まず、「未来への変化は 連 続 的 で あ る 」。

ンピューターが登場すれば、今あるプログラ

今日 320GB のハードディスクは珍しくない。

10 年前を振り返ってみましょう。2002 年

ムが全部パーになるかもしれません（笑）。

30 年間で百万倍以上。メモリもさらに大容といえば、Ruby は Rails 以前です。Ruby on

でも今日の予測では、あくまで連続的な変化

量化しています。320GB の次世代フラッシュ

Rails が 発 表 さ れ た の が、2004 年。Rails をしか起きなかったと仮定します。

メモリが何年か先に出るかもしれない。主記
憶上にデータがいつまでも揮発せずに残って作ったデンマークの若者は、炎上していると

次に、「技術動向は歴史の中で比較的予測

ころにガソリン持って飛び込むような議論好しやすい」という前提について。気体分子一いて、フラットにアクセスできるとか。

きで、それによって Ruby は話題にはなりま個一個の動きは予測できなくても、全体とし

法林：ありえそうですね。

したが、当時誰もビジネスで使えると思ってての振る舞いは予想できる。しかし外乱の影

まつもと： CPU と DRAM の処理速度の差をなかった。
『開発生産性は Java の 10 倍なの

響を避けるために、閉じた空間での観察に限緩和するためキャッシュを持たせる構造が考か論争』があった。

定しなければ正確な予測が困難です。歴史や案され、プログラマーもそれを意識してコー

法林： その頃の LL イベントで、LL を仕事で人間社会も同じように、誰かが未来を予想でドを書いていた。しかし、ソフトウェアアー

使いたいか、とアンケートを尋ねると、ヘビー

きると、筋書きが変わってしまうため、正確

キテクチャが変われば不要になります。

プログラマーほど仕事で使えていないことがな予測は不可能になる。子供のころ読んだ

馮：プログラマーには大きな変革ですね。

分かった（会場：笑）。

SF にそう書いてあり、期待していた分、少まつもと：コンピューターは性能とネット

しがっかりした記憶があります。そもそも歴ワーク帯域の広さにおけるバランスの変化

史においては個人の影響は不可避で、徳川家

で、集中処理と分散処理を振り子のように行康が出てこないと歴史は進まない。ただ誰がき来します。オンライン処理、C/S システム、

いつ何をするかを前もって知るのは難しい。

サーバー同士をつないだ Web、クラウドがしかし、コンピューターを含む技術全体につできた。揺り戻しは 5 年くらいの割と短いス

いては、俯瞰すると 10 年先を予測できる可パンで起きる。帯域と性能のバランスの中で、能性がある。例えば、ムーアの法則です。

どういうデザインが最適かとプログラマーは

法林：半導体の集積密度は、2 年で倍になる考える必要があります。

というヤツですね。

同時に気になるのが、データの入り口がど

まつもと：発表されたのが 1965 年、東京オこになるのかということ。口にするのも気

リンピックの頃です。半導体でできた電子回

恥ずかしいんですけど、ビッグデータとい

馮：Ruby はレンタルサーバーでも、まだ浸路が微細化し、チップが小型化する。処理性

う Buzz ワードがありますね。ビッグデータ

透していなかったですよね。そもそもサー

能、記憶できる容量、ネットワーク帯域なは自動的に生まれてこない。どこかの生デー

バーに Ruby がプリインストールされてなども指数関数的に増える。自動車で、リッタ を 取 り 込 ん で あ る 種 の DB に 放 り 込 む。

かった。

ター走行距離 10km が 2 年後に 20km、さらHadoop で解析するデータをどこから取って

ま つ も と：Perl と PHP は あ っ た ん で す が。

に 2 年後に 40km なんてあり得ない。陰でくるのか。ユーザーの行動履歴などのログ、

12 USP MAGAZINE vol.5

車や家電で使われる組み込み系経由のデータ

ハードや I/O を隠蔽するレイヤーが必須。コです。分別のあるふりをしていると、いつしかもしれません。その辺りが今後のソフト

ンセントから得ている電力エネルギーがどこか頭ががんじがらめになってしまいます。

ウェア開発における主戦場の一つになっていで発電されたものかが利用者の目に見えない

法林：中学生コミッターには負けないとか（会くと思います。

ように、クラウドも抽象化されていくと思い場：笑）。

“70 万コア ” を使いこなす
プログラミング言語が必要ます。

まつもと：その彼も、もう中学卒業です（笑）。

10 年先も通用する
サイエンスを身につける

また、つい先日も「まつもとに負けない、勝

まつもと：メインストリーム PC の価格推移に比較して、マイクロコントローラが低価格

まつもと：僕の未来予測はだいたいこんな感

至るところで「大人げないまつもと」という化しています。これが組み込まれて、家電のじです。そういう中で、プログラマーが生きツッコミを頂きました（会場：笑）。

フリをしたコンピューターがどんどん出てい

延びるにはどうするか。「10 年先でも変わらますね。テレビ、音楽プレイヤーや電話、車ないであろう、重要なことを押える」のが大の形をしたコンピューターがある。開発言

切だと思います。たとえば、数学はあと 10

語はアセンブラではなくて高級言語。OS は年で反故になることはない。数千年前から続Linux。つまり、デバイスの PC 化です。小く、長い歴史があります。やっておいて損はさなコンピューターが低価格化し、そこで使ない。そう言いつつ僕は、数学が苦手なんでわれるソフトの割合が増えてくれば、高い開す。高校の時、10 段階評価で 1 をもらった

発生産性がいままで以上に必要とされます。

くらいですから。

法林：Ruby で書いています、とか。

法林：得意科目は何でしたか？

まつもと：Ruby の採用はまだないですが、

まつもと：国語と英語です。

今後使ってもらえるように頑張っています。

法林：やっぱり言語が得意なんだ。

法林：10 年前のレンタルサーバーみたいな

まつもと：でも、MIT でやった 2002 年の LL

感じですね。

では英語が喋れずひどい目に会った。

まつもと：PC のスパコン化にも注目です。

法林：僕も英語は苦手です。プロレス用語を

すでに 20 年前のスパコンと同程度の性能を除けば。

法林：ちゃんと実践しているんだ、自分の理もったノート PC が手元にあります。この調

まつもと：もう一つ押えておきたいのが、コ

論を（笑）
。

子で進むと 10 年後の電気屋さんで買えるコ

ンピューターサイエンスです。この分野は未

まつもと：分別云々と言っていますが、何でンピューターは、1024 コアになってもおか

成熟ながらここ何十年か続いているので、そも手を出せばいいという訳でもない。私の場しくない。神戸にあるスーパーコンピュー

れなりの歴史がある。この辺は押えた方がい合、いまさら言語以外の分野に首を突っ込ん

ター「京」は、8 万 CPU です。1CPU が 8 コ

いでしょう。数学にしてもコンピューターサ

でも仕方ない。とはいえ、プログラマーとしアなので、全部で 64 万コアくらい。その類

イエンスにしても、要するに「サイエンスでて振る舞う時は、皆さんぜひ大人げないプロ

推でいうと 10 年後のノート PC に 70 万コア

物事を考えよう」ということです。事実に基グラマーになりましょう。社会生活では別でくらい搭載される可能性がある。1024 コア

づいて、推論し、それを検証する。この考えすけど。

は笑い話ではありません。ただ、膨大なマ方は 10 年先も通用するでしょう。その時々

ルチ / メニーコア向けのプログラミング言語のテクノロジーのトレンドに適用すること

コンピューターをやらないうちの奥さんがの開発はこれからです。CPU1 個にやらせてで、地に足のついたエンジニアになれる。と『あなた、いつも機械に向かって』とボヤいいる仕事をいかに分散するか。4 コアの CPU

同時に、自分の持っているものに満足しないている。見た目はたしかにそうです。でも、であれば、コア 1 にこの仕事、コア 2 にあで、新しいものにチャレンジできる柔軟な精

誰かの書いた意見を読んだり、それに返事しの仕事……と割り振りできますが、数十万コ神を下支えしてくれます。

たり、時に議論したり、講演の準備をしたり。

アになると「この仕事は、13522 番目のコア

法林：年をとると、いろいろと億劫になりま

要するに人間相手の仕事をしている。

に」などキリがない。抽象化レベルがもう一すからね。

法林：機械相手ではなく。

段高くなる必要がある。Linux の内部では「コ

まつもと：苦手を克服するなら、得意な部分

まつもと：Ruby を設計する時も、ユーザー

ア ID は 84722 番」とかコア単位での指定がを伸ばした方がいい、という人もいます。そはどう感じるか、自分はどう感じるか、と機可能ですが、開発言語レベルでは人間が理解の辺のバランスは人それぞれだと思います。

械を通じて、人とやりとりしている。だが、できないと使い物にならない。また、ノード

狭い部分に突っ込んでいけるのも長所です。

奥さんには機械とやりとりしているようにし数がこれだけ膨大になるともはや人手によるかといって新しいトレンドを敬遠するのはどか見えない。リア充礼賛ではありません。そリソースの管理は不可能です。言語と同様に、うか。大人げない大人になろう、ということ

もそも私は非リア充の典型のような人間でつ」といったツイートに思わず熱くなったら、コミュニケーション能力も結構大事です。

13

す。よく結婚できたと思っている。しかし、

法林：僕は小学生の時に「法林は、人がやらえて頂きたい。

ある種のコミュニケーション能力、人とやりないことをやる人だ」と言われました。思い

法林：それでは最後に、質問を受け付けたい

とりしたり、誰かのことを考えたりするのは返すと、大人になってから JUS の活動とか、と思います。どうぞ。

面白い。人間的な活動に対する興味を持つこ

みんながやりたがらないことをやっている松浦（本誌編集長）：優れた OSS は世の中にとがプログラマーにとって重要かつ非常に有（会場：笑）。

数多く出ていますが、その中でユーザーが実

効な能力と思います。もし『コンピューター

際に使ってくれるレベルに到達しているソフをどう制御するしか関心がありません』みたトは限られています。OSS 開発者の多くは、いな感じだと、プログラマーとしての伸び代

どうやったら使ってもらえるかと悩んでいまが小さくなってしまうと思うんです。

す。Ruby は今や世界中で使われる OSS にな

普通の人が普通じゃない人になるりましたが、何が成功の要因だったと思いま
すか？

まつもと：これからは、個人の持っている評

まつもと：私もこう幾度も言われました。

価が重要になると思います。そもそもオープ『Ruby ？ ああ知っていますよ。使っていま

ンソース、フリーウェア、というのは名誉経

せんが』。もし、そこで開発をやめていれば済ですね。
「伽藍とバザール」を読まれた人

Ruby は終わっていたでしょう。でもやめなはご存知かもしれないけど、オープンソース

かった。Ruby って、愛され言語なんですよ。

の世界は、○○に勤めているから偉いとか、

まつもと：外部評価を高めることをこれかRuby を知っている人、イコール好きな人がその人の所属なんて通用しない。『まつもとら 10 年続けると、10 年後もプログラマー多い。好きだと言ってくれる人がいるので、という奴は、何とかというソフトウェアをとして食べていけると思います。私は 20 年

仕事を続けていたら人が増えてきた。95 年

作ったから、プログラミング能力があるに違Ruby やってきて、一度も嫌だと思ったことに一般公開してから 10 年間続けていた結果いない』と思われて、仕事を任せてもらえたはない。自分でいうのもなんですが、私は異がビジネスでの利用拡大でした。愛されるプり、チャンスをもらえたり、有利なポジショ

常なほどのプログラミング言語オタクです。

ロダクトを作って継続することが、成功の秘ンを得たり、といった場面に巡り合える。エ

好きでやっている。努力というより、継続的訣だと思います。僕自身はプロモーションを

ンジニア個人で勝負できる。俗っぽくいうな行動です。その源泉にあるのがモチベー

全然していません。

と「名声 w」。自分の考え、感じたことをブション。自分のモチベーションを 10 年、20

質問者 A：まつもとさんは、Ruby を全世界

ログやツイッターに書く中で、あの人は面白

年保てる人は、先々勝利できるのではないでの人に使ってほしいと思って作っていたのでい、と思われれば外部の評価が高まる。自分

しょうか。モチベーションの出どころは何か。

しょうか。それとも自分のために開発したのの作ったソフトウェアを公開すれば、『あの私の場合は、「楽しさ」です。ものすごく楽でしょうか。

人は、こういう Ruby ソフトウェアを作れるしい。なぜか。プログラミングに万能感があ

まつもと：僕は、色々な言語を使う中で、自人だ』と見てもらえる。積み重ねです。

るからです。

分が欲しい言語、使って満足のできる言語が法林：まつもとさんも長いですよね。

法林：そういうコンセプトが Ruby にも反映

欲しくて Ruby を作り始めました。

まつもと： Ruby は 20 年くらい。その前にされている。

法林：質問は尽きないですが、この辺で時間

emacs を 4 年ほど。ほかのも通算すると 30

まつもと：5 歳くらいの子供は万能感にあふが参りました。まつもとさん、本日はありが年弱くらいやっている。2001 年頃からは日れています。
「やればできるもん」と言う。

とうございました。

本や海外で年 20 回くらい講演していた。そ小学生くらいになると、少し挫折を知る。我まつもと：こちらこそ、ありがとうございまのおかげで、今のポジションに至っているが家に小学 2 年生の子供がいるのですが、周した。

と思っています。個人的な能力が人より 100

りの子供を見て段々と万能感が失われていく

倍優れているわけではない。天才プログラのが分かる（笑）
。しかし、プログラミング

マーだと思わない。でも、普通の人がとる普に年齢は関係ない。コンピューターを使ってVol.6 では後藤大地さんや、角俊和さん、閑歳孝子さん。

通の行動が、継続していく中で外部の評価に

在りし日の万能感を取り戻せます。モチベー

ブログや写真などの情報は、WEB サイトにありますのでつながり、「普通じゃない人」になれる。普ションが高まり、楽しくなって、継続してい覗いてみてください。そして、可能であればライブにも通じゃないのがよいのかどうか、という意見るうちに、ひとかどの人物になれる日が来る

是非遊びに来てください。とても楽しいですよ・・・。

もありますが、私は普通じゃない方がいいとかもしれない。IT というのは、ソフトがない（TechLION 事務局スタッフより）思う。小学一年生の時、担任の先生から「どと動かない。プログラマーの皆さんは世界をうしてあなたは他の子と同じことが出来ない

変える力を持っている。プログラミングは、の？」と叱られたことがあります。

世界改革の源泉です。ぜひ皆さんに世界を変14 USP MAGAZINE vol.5

TechLION はメインゲストの他にも、とても魅力的なゲストをお呼びしています。

http://techlion.jp/

徹底仕事術！
仕事術！
C U I 徹底仕ΏͿσΑ·ςίΠఱ‫ܔ‬၌

シェルスクリプト大喜利

₻
₏
₷
₏
₻

ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔΏͿσΑ·ςίΠఱ‫ܔ‬၌ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔংٛȇȸ̽͂͜଑̩ȹ༎ਬಿȆ͙̥ͭ

皆様こんにちは、はじめまして。3 か月のご無沙汰、シェ
ルスクリプト大喜利（略して sh 大喜利）のコーナーのお時

₻
₏
₷
₏
₻

ల
ࡼ
ٝ

も使用 OK としました。ただし、それなりに美しく書かれていないと採用はキビシいですよ〜。

間です。
あたくし司会進行役のもっと吹く編集長みかんです。

ུ๔‫ٳ‬ই

他ページでは結構脂っこいなこと言ってたりして「人格の使い分け大丈夫？」とかひやかされとりますが、大丈夫。あぁɃల֚࿚Ʉ……この変態力作コード、絶対;ΏΏ̥͂࡞̞̦̈́ͣ੥̞̀͢

ŧŰŭť ̞̠͂Ȃ ঐ೰໲লତͅో̱̹ͣ٨࣐̳ͥ΋ζϋΡȃ ̭̭̱̹ͦ̈́ȃ と、投稿作品を見てると自動的にこの人格に変わࡉ̀͏͂এ̞̱̹͘ȃりますから。いゃいゃ、読者参加コーナー面白いわ。

ȶŧŰŭť ΋ζϋΡ́੸͂ဒͤͬ‫̥̞̈́̈́ͦͣ͛ݥ‬ȉȷということで、まずは本コーナーのシステムをご説明！

ΏͿσΑ·ςίΠఱ‫ܔ‬၌͉͂ΏͿσΑ·ςίΠఱ‫ܔ‬၌අခ͈σȜσ̞̠̫͂ͩ́Ȃ ĳ ͈̾֨ତͬ਋̫৾ͤȂ ŧŰŭť ΋ζϋΡͬঀ̽̀੸͂ဒͤͬ‫ͥ͛ݥ‬Α·ςίΠͬ੥̞̩̺̯̞̀ȃ
こんなコマンドがあるのをアタクシ前回初めて知りまして。なので、まだこのコマンドにどんな実用性があるのか想像できず、「割り算の商と余りを求めるのに使えるかな？」

֚Ȃġsh 大喜利はクイズやテストではありませぬ。なので決とか馬鹿馬鹿しいこと思いついたんです。それで大喜利のおまった答えというものはないのです。あえて言うなら面

題にしてみたんですが、投稿者の皆さん。こんな馬鹿馬鹿し

白いスクリプトが正解！

い問題に付き合ってくれてありがとうございます、ホント。

ඵȂġ面白いスクリプトとは例えば、こんなもの。
ͼȂġ人が考えつかない意外性があるυȂġ美しい or 芸術的 or 記述がシンプル・短い or 高速ΧȂġアイデア・こだわりが光るɝŨŰųŪįŴũ ̯͈ͭٝ൞
2!$"0cjo0cbti
3!tfr!.t.!1!%2}us!.e!1.:}gpme!.x%3}bxl!(FOE|c>)m>mfohui*">(%3(<qsjou!OS.c-c+m~(
添付コメントによれば、文字数を極力削る方針で書いたΣȂġネタになるようなバカバカしさ、くだらなさがある

そうで、AWK の length 関数は AWK で唯一カッコを省けるなどなど、ただし最後のは段位強制返還の恐れありよ。:-)ということを本誌前号で知ってそこも削るこだわり様。

२Ȃġスクリプト動作環境は Linux とします。そして、特に断り

んー、本誌を見て勉強したってところがエラい。（←贔屓）な き 場 合 は、Linux JM(iuuq;00mjovykn/tpvsdfgpshf/kq0)

よし、ඵ౲਎ဓしちゃおう！これで四段だ。

に記載されているコマンド及び機能のみ使用可能としまɝŦŮŢŴŢŬŢ ̯͈ͭٝ൞

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

অȂġsh 大 喜 利 は シ ェ ル ス ク リ プ ト を 披 露 す る 場 な の で、

2!$"0cjo0ti
3!qsjoug!#&1%2t]o#!}!gpme!.x!%3!}!tfe!#]%t0/+0fdip!.o!
('(}xd!.d0f<t0%30]]
4!10#!}!tfe!.o!(%"><%q(!}!ubjm!.o!3őŦųŭ ͞ œŶţźȂ őźŵũŰů ͉̈́̓ঀ̻̽͝Θιです。そも「GNU sed じゃないとだめかも」ということで、確かにそそも JM にも載っていません。逆にシェルスクリプトにの通りですよ。でも、注目すべきは AWK を使ってないとこ

とって不可欠な awk や sed 等は OK です。JM にもありろ。この問題、AWK を使えば簡単だろーなーと思ってたので、ますし。でも、よっぽど面白ければ、なきにしもあらず？

AWK を使わない回答を実は待ってたのですよ。

（但し JM に載っているので、ń ΏͿσࠏ͈́ٝ൞͜ ŐŌ Ȋ）

ルールもおさらいしたところで、それじゃイッてみよう。
ࡼȂġ今 回 か ら Open usp Tukubai(iuuq;00vfd/vtq.mbc/dpn0)

エラい ! さてはアタクシの心を読んでウシシとかいいながらコードを書いていたな ! よし、これもඵ౲਎ဓ。

15ɝஃ֔ġု̯͈֚ͭٝ൞

う〜〜〜ん、一緒に添付してくれたサンプルデータだと確かに正常なんだけど……。8 文字 ( 恐らくタブ文字数 ) 以

2!$"0cjo0cbti
3!
4!jg!\!%$!.of!3!^<!uifo5!!!!!fdip!#̭͈ΏͿσΑ·ςίΠ͉ˎ͈̾֨ତͬ৾ͤ͘
̳ȃ#6!!!!!fdip!#ˍ͈̾͛֨ତ͉చય͈ତ̳́#7!!!!!fdip!#ˎ͈̾͛֨ତ͉‫ͥڬ‬ତ̳́#
8!!!!!fyju
9!gj:!gps!j!jo!adbu!0efw0vsboepn}us!.de!#\;bmovn;^#}ifbe!
.d!%2}gpme!.x!%3a21!ep!
22!!!!!BNBSJ>afdip!.o!%j}xd!.na
23!!!!!jg!\!%|BNBSJ~!.fr!%3!^<uifo!
24!!!!!!!!!MJOF>afyqs!%|MJOF~!,!2a25!!!!!!!!!BNBSJ>1
26!!!!!gj
27!epof28!fdip!#ࠗॳࠫ‫!;!ض‬#%|2~#!0!#%|3~#!>!#%|MJOF~#!///!
ဒͤ#%|BNBSJ~

大抵の場合動きます。Copyright に対する Copyleft の如く、う 〜 ん、 他 の 投 稿 と 比 べ る と 行 数 は 長 い ん で す け ど、

rs に対する ls ですね」ということで、何と ls を無理矢理使っ

AWK を使っていないということで確かにこれも密かに求めていたコードになってるのです。
シェルプログラミングの達人目指して頑張ってもらいた
いなという応援も兼ねて、੝౲਎ဓ。
◇◇◇

上の長さのデータを食わせると動かないのが残念なところ。
おしい！……でも、サービスして֚౲਎ဓ。これで三段だ。

ɝŢŠŴũŪŮŢ ̯͈ͭٝ൞
2!$"!0cjo0ti
3!nlejs!0unq0mfgu
4!om!}!ifbe!.o!%))%2+%3**!}!bxl!(|qsjoug)#0unq0mfgu0"&16e"&t]o#-%2-%3*~(!}!ybsht!upvdi
5!x>amt!.2!}!bxl!(|m>mfohui)%1*<n>)m?n*@m;n~OS&(%3(>>1|n>)m?n*@m;n<x,>n,3<n>1~FOE|jg)n?1*x,>n,3<qsjou!x.
2~(a6!mt!.x!%x!.D!0unq0mfgu!}!fyqboe!}!tfe!.f!(t0_"\1.:^]|6]~"00(!.f!(t0!!"\1.:^]|6]~"0!!0h(
7!sn!.sg!0unq0mfgu
添付コメント「ls コマンドの動きがそれですよということだったので、ls（bash 版オンリー）にやらせてみました。

た解答が届きましたよ。
いやぁ、そう来たか……。敢えて狙ったんだろうけど、すっ
ごく無理矢理感が伝わってくるぞ（Copyright のくだりもね）。ls ってファイルになっているものしか表示しないから同名のファイルを作って、さらに ls はソートをかけるから

今日は make 祭りが控えてるので、はい次のお題行きます。

ファイル名の手前に番号を振ることでソートを回避けてるしɃలඵ࿚Ʉ……。意地でも ls にやらせようと、よくもまあここまで執ུধஜ࣢́ ųŴ ̞̠͂΋ζϋΡ੄̧̱̹̀͘ȃ ̭́ͦ͜ īŃŔŅ念を燃やしたものだねぇ。グレイト！२౲਎ဓだ！！

අခ͈΋ζϋΡ̳́ȃ ̷̭́ ųŴ ΋ζϋΡ௖൚຦ै̩̺̯̞̽̀ȃɝ̯̞̹͘ೱ࣭̯͈ͭٝ൞

̹̺̱Ȃ ষ͈۰օॽအ̱̳͂͘ȃ

2!$"!0cjo0ti
3!ifbe!.%))%2+%3**!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
4!bxl!(|qsjou~FOE|gps)j>OS<j&(%2(?1<j,,*qsjou#A#~(!}
5!zbss!.%2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
6!ubufzplp!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
7!tfe!(t0!A%0!!0(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
8!lfubȆġ ΗȜη΢σ͈ਸ‫؍‬΍ͼΒ͈ু൲࠿੄͉̱̩̞̈́̀͢Ȇġ ΟȜΗ͉ດ੔වႁ̥͈͙ͣ਋̫৾ͥȆġ Įŵ ΂ίΏοϋঐ೰শ͈൲ै ĩ ࣐͂Ⴅͬഢ౾ Ī ̳͂ͥȆġ ֨ତ͉ ųŰŸŴ ͂ ŤŰŭŴȂ ĳ ͈̾ତ౵̺̫ͬຈ̴࿙̢ͥ
前回の大喜利では Linux にあって *BSD には無い tac コマ

待ってました。Tukubai コマンドを使った投稿ですね。あンド相当の汎用品を作ってもらいましたが、今回は逆です。

りがとうございます。「Tukubai 使ってみました。tateyoko

それでこの rs コマンドというのはどういう動きをするものを使うんだろうなというとこまでは容易に想像つきましたかというと ls コマンドで説明すると分かり易いですよ。ls

が、後が結構難しかったです。こんな感じでよろしいでしょでファイルを表示すると、アルファベット順にソートされうか」とのコメントが付いてましたが、はい、結構です。

た後、それが左の列から縦に並びますな。ファイルが 9 個、

慣れない中、使ってくれてありがとう。指定された行数

それが横に 3 列に表示されると、左の列に最初の 1~3 番目、×列数になるように元データの行数を揃えて、yarr で行列化

中央列に 4~6 番目、右の列に 7~9 番目に並ぶというアレをした後で tatetoko 使って転置。最後に keta で表示を揃える

やってもらいたいわけです。簡易仕様で。( ソートも無しで )というわけね。バーティカルバー（パイプ記号、"|"）を縦ɝŦŮŢŴŢŬŢ ̯͈ͭٝ൞

に並べる独特の記述にもしてくれていて完璧だ。初 Tukubai

2!$"0cjo0ti
3!tfe!#2t0_0qbtuf!=)fdip!(0<%2%2|O<t0]]
4!0(*!=)fdip!(0~#!}!tfe!#]%t0]%0(*0#!}!cbti

採用作品でもあるし、記念にඵ౲਎ဓしよう。

2 問続けての採用。そしてこちらも「GNU sed じゃないとだめかも」とのことで、その通りでした。
ol.5
5MAGAZINE vol.5
16 USP MAGAZIN

◇

◇

◇

さてさて、次は make のお題。力作と予想の斜め上を行く作品と、̤࿩௵͈ै຦̦ఉତ届きましたよ。

徹底仕事術！
仕事術！
C U I 徹底仕ΏͿσΑ·ςίΠఱ‫ܔ‬၌Ƀల२࿚ɄŮŢŬŦ ΋ζϋΡ́ ȶຽ೒̷̭̱͇ͭ̈́͂Ȝ͢ȷ ̞̠̻͂̽͂͡་
̹ͩ̽ঀ̞༷ͬ๢Ⴚ̱̩̺̯̞̀ȃ ŃŔŅġ ŮŢŬŦ ́͜ ňŏŖġŮŢŬŦ ́͜ ŐŌȃ

さあさあ、Maker の皆様、おまちどうさまでした。本日一番のお楽しみ、make コマンドのお時間がやってきました。
シェルスクリプトで何でもこなすという熱狂的シェルス
クリプティストがいるのと同様に、世の中には make コマン
ドで何でもこなすという熱狂的メイカーがいるのです。例えばシェルスクリプトだと “&” を使ったり、或いはパイプを繋げたりして並列処理をさせられますが、make コマンドには-j オプションというのがあって、コイツをうまく使えばやっぱり並列処理ができるなど、全然負けず劣らずなのです。
ではまず、お約束というヤツからいきましょうかね。

ɝŇĮūŰź ̯ͭȂ ̯̞̹͘ೱ࣭̯ͭȂ ŵŠŬŢŸŢŪ ̯ͭȂ̠͙͇̭̯ͭȂ ťŰŴŭŰŷ ̯͈ͭٝ൞
?!nblf!mpwf
nblf;!epo(u!lopx!ipx!up!nblf!mpwf/!Tupq?!nblf!mpwf
Opu!xbs/
これは BSD 版 make コマンドの挙動ですね。このジョークの意味を理解するにはまず、make love の意味を知っておく必要があるわけですが、各自‫ם‬გৃങ́಺͓̤̩̀͢Ȝͅ。
それで引数に示されたターゲットが定義されていない場
合、BSD make は基本的に “don't know how to make ~” ってエラーメッセージを出すわけですが、そこに出てくる makelove という熟語を見て「ウブなヤツめ」とほくそ笑むのがお約束。ところが最近のバージョンで、それに対抗して “Notwar.” とか返してくるわけです。“Make love, Not war.” についても検索すれば意味わかります。
というわけで投稿ありがとう。来ると思ってたよ！！しかもこんなに多数。有名なネタだから‫֚ুڎ‬౲̺̫਎ဓね。
よってさいたま帝国さんが三段、他の皆さん初段ね。
次は力作いってみましょう。

ɝŌ ̯͈ͭٝ൞
Nblfgjmf;
2!QT3QEG@>!!!!qt3qeg25
3!
4!JOQVUTJ[F@>!B5
5!NFEJBTJ[F@>!B4
6!QPTUFSTJ[F@>!!!!B1
7!QPTUFS@>!!!!qptufs!.w!.j%|JOQVUTJ[F~!.n%|NFEJBTJ[F~!.q%|QPTUFSTJ[F~!.p
8!$#.p#!pqujpo!tipvme!cf!mpdbufe!bu!uif!ubjm/
9!
:!UHJG@>!!uhjg!.b5!.qsjou!.fqt!.sfrdpmps!.pof`gjmf`qfs`qbhf!.qbhf
21!$#.qbhf#!pqujpo!tipvme!cf!mpdbufe!bu!uif!ubjm/
22!
23!$=gjmf!obnf?.=qbhf!ovncfs?=m!gps!Mbshf!Gpsnbu!Qsjo
ufs?/qeg
24!UBSHFUT3>!!!qptufs.2/qeg!qptufs.3/qeg
25!UBSHFUT@>!!!%|UBSHFUT3~!qptufs.2m/qeg!qptufs.3m/qeg
26!
27!UNQNBLFGJMF@>!!!Nblfgjmf/unq
28!
29!bmm;2:!!!!!.Asn!%|UNQNBLFGJMF~
31!!!!!Afdip!#/TVGGJYFT;!!!/qeg!m/qeg!/qt!/fqt#!?!%|U
NQNBLFGJMF~
32!!!!!Afdip!??!%|UNQNBLFGJMF~
33!!!!!Afdip!#/fqtm/qeg;#!??!%|UNQNBLFGJMF~
34!!!!!Afdip!#!%|QT3QEG~!]%%|/JNQTSD~!]%%|/UBSHFU~#!?
?!%|UNQNBLFGJMF~
35!!!!!Afdip!??!%|UNQNBLFGJMF~
36!!!!!Afdip!#/qt/qeg;#!??!%|UNQNBLFGJMF~
37!!!!!Afdip!#!%|QT3QEG~!]%%|/JNQTSD~!]%%|/UBSHFU~#!?
?!%|UNQNBLFGJMF~
38!!!!!Afdip!??!%|UNQNBLFGJMF~
39!!!!!Afdip!#/fqt/qt;#!??!%|UNQNBLFGJMF~
3:!!!!!Afdip!#!%|QPTUFS~!]%%|/UBSHFU~!]%%|/JNQTSD~#!?
?!%|UNQNBLFGJMF~
41!!!!!Afdip!??!%|UNQNBLFGJMF~
42!!!!!Afdip!#bmm;!%|UBSHFUT~#!??!%|UNQNBLFGJMF~
43!!!!!Afdip!??!%|UNQNBLFGJMF~
44!/gps!j!jo!%|UBSHFUT3~
45!!!!!Afdip!#%|j;D0qeg0fqt0~;!%|j;D0.\2.:^\1.:^+/qeg
0/pck0~#!??!%|UNQNBLFGJMF~
46!!!!!Afdip!#!%|UHJG~!%|j;D0/+.)\2.:^\1.:^+*/qeg0]20~!]%%|/BMMTSD~#!]
47!!!!!!!!!??!%|UNQNBLFGJMF~
48!!!!!Afdip!??!%|UNQNBLFGJMF~
49!/foegps
4:!!!!!nblf!.g!Nblfgjmf/unq
51!$!!!.Asn!%|UNQNBLFGJMF~
52!
53!dmfbo;
54!!!!!.Asn!+/fqt!+/qt!+/qeg!%|UNQNBLFGJMF~
qptufs/pck;
2!&UHJG!5/2/56.RQM
3!tubuf)1-48-211/111-1-1-1-27-2-:-2-2-1-1-2-1-2-1-(Dpvsjfs(-1-91751-1-1-1-21-1-1-2-2-1-27-1-1-3-3-2-22167-25:8-2-1-3991-1*/
4!&
5!&!A)$*%Ifbefs%
6!&!&X&
7!&
8!voju)#2!qjyfm0qjyfm#*/
9!dpmps`jogp)22-76646-1-\:!!!!!#nbhfoub#-!76646-!1-!76646-!76646-!1-!76646-!2
21!!!!!#sfe#-!76646-!1-!1-!76646-!1-!1-!222!!!!!#hsffo#-!1-!76646-!1-!1-!76646-!1-!223!!!!!#cmvf#-!1-!1-!76646-!1-!1-!76646-!224!!!!!#zfmmpx#-!76646-!76646-!1-!76646-!76646-!1-!225!!!!!#qjol#-!76646-!5:455-!63282-!76646-!5:455-!632
82-!226!!!!!#dzbo#-!1-!76646-!76646-!1-!76646-!76646-!227!!!!!#DbefuCmvf#-!35526-!51717-!52231-!35526-!51717

17

-!52231-!228!!!!!#xijuf#-!76646-!76646-!76646-!76646-!76646-!76
646-!229!!!!!#cmbdl#-!1-!1-!1-!1-!1-!1-!22:!!!!!#EbslTmbufHsbz#-!2318:-!31414-!31414-!2318:-!3
1414-!31414-!2
31!^*/
32!tdsjqu`gsbd)#1/7#*/
33!gh`ch`dpmpst)(cmbdl(-(xijuf(*/
34!epou`sffodpef)#GGEjohcftut;[bqgEjohcbut#*/
35!pcktibepx`jogp)($d1d1d1(-3-3*/
36!qbhf)2-##-2-((*/
37!cpy)(cmbdl(-((-75-75-495-431-1-2-2-1-1-1-1-1-1-(2(-1-\
38!^*/
39!qbhf)3-##-2-((*/
3:!pwbm)(cmbdl(-((-75-75-495-431-1-2-2-2-1-1-1-1-1-(2(-1-\
41!^*/

が」とのことですよ。
いやぁ〜、よくやるねぇ……。途中途中で吐き出される
Makeﬁle を眺めると、printf を作る printf を作る printf……
になっていてこれが 1 つの make を通るたびに外れていくという動きになってるな。その馬鹿馬鹿しさに敬意を表して֚
౲਎ဓ。これで二段だ。
◇◇◇というところで本日の大喜利はこれにてお開き！読者の皆さん、投稿してくれた皆さん、ありがとうございました。

ൎࣂఱ༡ਬȊȊ
ষ͈̤ٝఴ

動作には tgif、poster コマンド、Ghostscript が必要。そ֚Ȃġ「幸運数」と呼ばれる自然数があります。100 以下の幸運の環境で上記 2 つのファイルを置いて make するとトンボや数を全て求めるシェルスクリプトを書いてください。答

図形の描かれた PDF が 3 種類できます。

えを出すのが早いか、または見応えあるソースコードで。

一発ネタというわけではなく、Makeﬁle の文法を巧く活ඵȂġ9 行 9 列、各列がスペースで区切られた九九のテキスト用した実用的なものなのだけど、力作だったので採用。コメ表ファイルがあります。この表を標準入力から読み込み、ントによればもっとエレガントに書きたかったとのことなんx 行目 y 列目にあるセルを含めてその下のセル全てを、だけど、make を使うこと自体が結構エレガントだ。ありが上に z 行詰めるシェルスクリプトを書いてください。

੝౲਎ဓ。そのうち、make VS. Bash とかやりたいねぇ。
とう、

その際、詰めたことでできた空セルは "@" としてくださɝ̧̯͈͂ͭٝ͠൞

い。尚、x,y,z はこのシェルスクリプトの引数として渡っ

Nblfgjmf;
2!dbu;
3!!!Abxl!(CFHJO|PST>##~!|qsjoug)##*<!qsjou!%1<!qsjoug)#]o#*~(
4!
5!dbu_3;
6!!!Aqsjoug!#nblf;]o#7!!!Abxl!(CFHJO|PST>##~!|qsjoug)#]uAqsjoug!]##*<!qsj
ou!%1<!qsjoug)#]245o]#]o#*~(8!
9!dbu_4;:!!!Aqsjoug!#nblf;]o#21!!!Aqsjoug!#]uAqsjoug!]#nblf;]245o]#]o#
22!!!Abxl!(CFHJO|PST>##~!|qsjoug)#]uAqsjoug!]#]245uAq
sjoug!]245]##*<!qsjou!%1<!qsjoug)#]245245o]245]#]245o]#]o#*~(てくることが約束された整数とし、かつ値の範囲も 1 ≦ঀ̷̞༷͈2)dbu֚౲*;?!dbu!iphf!}!nblf!dbuঀ̷̞༷͈3)dbuඵ౲*;?!dbu!iphf!}!nblf!dbu_3!}!nblf!.g!.
ঀ̷̞༷͈4)dbu२౲*;?!dbu!iphf!}!nblf!dbu_4!}!nblf!.g!.!}!nblf!.g!.
これはまた一発ネタですよ。添付コメントによれば「make
コマンド自体も標準入力を Makeﬁle として受け取れるので、

x,y ≦ 9、0 ≦ z ＜ x であることは保証されているとします。
२Ȃġcat コマンドの作者が遺言を残しました。
「私の人生における最大の後悔は、dog コマンドを作り忘れてしまったことだ。あぁ誰か作ってくれぇー。ガクッ」
さぁ、一体どんなコマンド？

ൎࣂ͈̱̥̹
お題への回答は、お名前（ペンネーム）、回答したいお題
番号、回答スクリプト、簡単な補足の四点セットで下記の宛先へ！一人何問でも何個でも回答可です。尚、次回締め切りは ˕࠮ˏ඾ Ȫ࠮ȫ ࡿஜ ı শとします。しかもその間は何度でも回答の修正を受け付けます。

̤ఴ̱̱̓̓͜௣̩̺̯̽̀Ȝ̞
それからお題も大募集。考えてくれた方にも段位を授与します。自分で出題して回答するのも、今のところ可！

ൎࣂ୶Makeﬁle を作る Makeﬁle を作る Makeﬁle……、というのをどちらも投稿先は、nbhAvtq.mbc/dpn です。ஜٝ

多段化しました。やっていることは単なる cat です。ただし̥ͣͺΡτΑ̦ఢ̳ͩ̽̀͘んでご注意！締切前にこの記事をダブルクォーテーションを含むテキストは処理できません

見てしまった皆さん、自慢の奥義をここに披露してください。

ol.5
5MAGAZINE vol.5
18 USP MAGAZINℶ ۷ ↊ ⅵ ⅘ ℸ ‫ۯ‬⅖ ⅴ Ⅿ ߃ ‵ ⅛ ২ დ ⇅എ ଡ଼ ⅳ ⅇ ℽ
⁁ ₛ ๞ ༷ ⅜ ⅔ ↰⅌ ௶ ↼ ਹ ະ ⅴ ၑ ⅁ಎ ‫ ث‬ⅼ „ম ℹ ⅶ ⅵ
୶
‡
⅓
↶
‵
⅁
⅜
⅔ ౵ ೲ
⅘ ࣽ ⅻ ฽ ⅇ ⇅ ඾ ℸ ⅅ ⅔ ါ ‫ خ‬Ⅻ ৪ ⅛ ഛ
႕ ⅳ ⅗
฽
⅕
ℹ
ℽ
⅁
ັ ྚ ⅜ ⅗ ࠧ ⅇ ⅛ ུܳ చ „ ⅻ
⅕ ଲ ⅓ ℺ ⅋ ۜ ℹ ⅸ ა Ⅿ
౷
” ℻
ⅳ
ၠ
ⅅ ⅘ Ⅿ ఱ
ॽ
⅕ „ ୣ ⅛ြ ܿ ↳ⅅ ຈ ࣐ ဥ „ Ⅻ
⅓ ం ࢃ ୨ ” ℺ ຾ ⅳ
↏ ⅗ ࣽ ⅘ උ ‫ٽ‬ⅅ ൚ ⅎ ‫ ڥ‬඾ ࣣ੅ⅻ
⅜ हু ௖ ષ ⅗ ⅍ ⅈ↎ॲ ℵྫℴ ৪ ‫ޙ‬℻ ⅋ ← ⅴ ⅲ
↫ ⅅ ⅘ ⅔ ໦ చℽ ࣉ ⅕ ⁎ ⅴ ⅰⅅ ⁂ ℶ ↖ ⅛ ℶ শ ྴ ℿࣞ ⅇ↼∹⅍ ⅔ ⅎ ℷ ࠐ ⇅ ” Ŋ ⅵ ⅛ ₉⇅ Ⅻ ℵ „ ⅛ ‫ ‡ ⅔ ‶ ⅓ ا‬஖ ⅕ Ⅿ
⅕‵ⅎ ࡓ⅃ ⅓ फ ⅗ ܿ ŕ ༷ ‫ ٯ‬₉← ⅇ ບ ड ࣉ ⅅ ℵ ↄ ⅇ ஖ ਀ ⅅ ⁁
⁁
℺
⅕
ⅾ
⅃
ℵ
” „ ‫ث‬ℷ ” ℻ ⁌
⅛ ⁁ ੅ ⅜•
⅍ ค ⅍ ‫ „ ↘ א‬ℵ⅁ ণ ⅓ ૖ ٛ ఉ ⅼ
↎ ু ⅻ ੝ ⅘ ቗ Ⅻ ⇅ „ ਀ ⅛ℵ ⅜ ජ⅋ ⅶ ⅾ ު ⇀ℵ
⅜ ૞ ࢡ ⅇ ↰ ࠫ ⅘ ←
ℶ
↞
২
↘
↖
⅛ ܿ ଌ
⅛
⇀ ൲ ං ૽ ැ
⅕ ത Ⅻ ⅜‫ ⅗ ض‬ⅾ ℶ ⅓ ⇀ ≍ ₊
ↀ ৬ ⅍
℺ „ ‡
ⅇ ࠐ ⅛ ⅔↡
⇅ ⅜ ⅵ ↾ ⅔ ℵ
‡
ₛ ⅻ ळ
⇅
এ ℹ
⅜ ੅ ᪟
ࣣ
⁋
⅍
⅕
ⅳ
ঙ
ⅇ
„ ‫א‬
⅔ ⅂ ‶ ⅔
২ ު ℵ ⅛ ঵ ໦
⅕ ࠏ Ⴙ
ℵ
↧ ⅛
↌
ၑ
⅘
”
„
⅘
”
⅋
⅕
ܳ
⅛ ‫ ٮ‬ℶ ၑ ⁁
⇅
Ⅻ
⅜
ே
ం
⇅
എ ௨ ⅔ •⅁
ೄ
ఱ ⅛ ম ٜ ⅓ ‫ا‬ଲⅇ඾ ⅆ ૞ ⅗ ≍ ↘ ဥ ॿ‶”
⅔ ࠫ ‫׋‬ℵ ঙ ऎ ⅘ ⁁
ਤ ࡣ ႕ ⅻ ࣐ ⅅ
௖
„
ැ
⅛
ॲ
⅍
ⅅ ℹ
ↄ
⅁
℺
৬ ങ ⅜ ං ൲ ⅓
⅖ ⅻ ⅛ ⅇ ‫⅑ ⅓ א‬
⅜ ೒ ⅻ ” ⅜ ൥ ٛ ℸ ⁌ℵ
⅕ ঊ ⅔
੫ ⅔ ૽ ⅷల৬ ઀ Ⅿ ⅕ ‫ خ‬ⅶ ၅ ⇀ Ķı ఴ ຦ ઀ এ ါ ႁ੄ ↄ ⅜ ⅘ ߿ ℵ ⅜ ှ ఱ ֚”℺ ⅜ ₛ ℹ
⅕ ↎
ⅅ ෭ ‶ ⅅ߿ ோ ℵℶ ෝ ‫℺ ۍ‬
↫
‫ד‬
⅑ ⅁ Ⅼ
⅍
ⅉ
⇀
ℵ
५
⅗
ஜ
‫ڬ‬
⅘ ↼ ℹ ⅴ ⅕ „ ⅁ ⁎
⅗
৬ ℻
৬
୽ ࣢
Ⅿ
ⅷ ‡
⅛ ஜ ‵
ൽ ْ ૶ ⇅ ⅅ ” ࡞ࢩ ँ ⅶ ” ↇ
႕ ⅵ ⅁ ” ⅁
⅔ ⅻ ஆ
⅛
⅘
↼
⅋
૽
‵
℺
⅕
থ
࣏
ⅴ
ℵ
ⅅ ← ⅶ
ⅻ
⅋
℺
⅔ ⅃ ௞ ⅗อℴ ෠ ⅛ ⃸Ⅻ ু ℺ ૽ ” ₛ ” ນ ۖ ” ⅅ ⅔ ऱ ℵ ⅶ ↶⃸ ↾ྫ ‫ ً ” ږ‬ⅵ ྦྷ Ĳ ń଼ ܿ ⅍ ”
١ ⅍ ⅛
⅜ ఞ
࣯
ń ↧
⇅ ⅶ ఘ ࢃ Ⅿ ↴
૞
ŗ
ⅆ
෫
ℽ
‶ ⅛
ⅅ ”
ဥ
⃸
ŗ २ ⅵ ⅻ ⅘ ࠝ ←ⅅ ౦ ⅗ ⅕ ୆ ĺ ‶↊ ń ⁁”⅍ ⅑ ੅ „ ੫ ⅛ ഐ ྚ ⁂
⅓
Ĵ
࣭
℺
‵
⅛
ນ ⅜ ੅ ↵୆ ৬ ‫ڰ‬⅔ ଲ⅍⅋ ଻ ໚ ⅃ ༘
ℵ ⅛ ℵ
⅔ ௡ ֠ ຽ ⅛ ⅅ
৖ ‶ ྦྷ ⅇ ⅖ ‫ ⅜ ز‬ŗ ⅍ ⅔ ⅘ ଈ
ⅻ Ķ ౪
⅍ ‫ڰ‬
⅜ ⅶ Ⅿ ⅰ୆ා
௢ ⅘ ৬ ય ℶ Ⅿ ۲ ⅻ ⅛ ⅇ ĵĹ Ⅼ ⅔ ۰ ” ” Ⴙ ⅕ ೒ ⅔ ٛ ⅻ ⅻࡉ⅁ ୨ ࡉ ⅜ „ ා ⅂ Ⅿ ౙ ५ ⃷ ⅻ ຳ ৬ ⅇ ২ ་ ఱ ⅍ ” ໤ⅅ ഴ ⅕ ಭ ⅔
ⅅ
ਤ
⅓
„
ఱ
℻
⅗
ō
ິ
ⅴ
൪ ા
⅕ ⁄
⅛
ࠐ ධ ࢊ
໣ ⅕ ↠ ⅘ ࣞ ⅔ ৖℺
ⅻ ฼ ⅍ ⅻ ℷ ⅘↘ ‫׋‬⅀ ” ⅴ ⅗ ℶ ‫ ئ‬ⅻ ‵ ਤड ⅁Ⅻ ⅴ „ ⅷ ັ ਭ ⅛
ད Ĵı ௢ ઺ ‫ ݣ ⅎ ڣ‬ⅵ ‫ א ރ‬໣ ℴ
ⅶ ←
ٝ ↨
ℶ
հ
ⅴ
ഢ
ⅇ
ࣕ
⇀
৪
⅛
ⅅ
ఱ
ℵ
⅔
ⅇ
”
⅘
ↄ ⅅ ⅉ
ⅵ ⅾ „ ” ྴ Ⅻ ℿ ⅽ ‵⅛ ؊ ཐ ⅔ Ⅿ ⇀ ⅓ ⅓ ℽ ⅋ ࿒ ‫ ث‬ⅵ ⅜ ‫ ٸ‬Ⅻଲ ৬ ⅅ ⅓ ↨ ቦྴ ⇅ⅳ℻
ু ℷ ‫ٺ‬઺ պ Ⅿ ķı ℵ ⅛ ޮ ⅗ ম ‵ ⅔ ⅇ
↎ ⅛ ඾ ‫ ⅍ ⅖ ٮ‬ค ↾ ઢ„
൲ ⅵ ⅻ ⅵ ৬ ௢ ୆ ↄ ⅔ ‫ ಼ ੸ ه‬ⅻ ਑ ૽‡ ઁ ུ ⅛ ⅁ „ ⅶ ⅛ ‶‶”‵ ⇅⅜ ⅵ ℽ ⅕ ℵ ಎ ⅘ ℹ ଻ ܿ℻ ↠ ↎ ⅅະ ↆ ℹ ↾ ட
⁁ ⅛ ⁎ ⅓‹„ ⅔ എ ⅃ ঌ ⅍ ܿ ည ⅓ ℹ Ⅿ ⅸ ” ੅ ഔ ĳ ℺‫⅛ ޙ‬ℹ ֚ ⇅ အ ‫ ٸ‬ಠ
Ⅿ
ℵ
উ
ຈ
এ
ⅳ ৹ ℵ ຈ ” ೲ ෯ ୆
⅛⅔ ⅓ ા Ⅾ ੅ ℵ
ℿ ⅑ ↭
໐
ႁ Ⅻ
ଲ ସ ℵ ါ ⅅ ࣽ ℺ ⅎ എ Ⅻ อ ୲ ৪ ‶ ட
⅛ ⅕ ↼ ₛ ࿨ ৪ဒ എ ※ ⅶⅅ ‫ܞ‬֚ ⅅ ⇅ ⅗
‫ ٮ‬ⅻ ࣺ ⅗ ⁄ ” ਋ ℿ
↭
⅘
⅕
ॷ
⅘
⅍
↠
⅘
⅘
Ⅻ
଻
֥
ℶ
Ⅼ
⅑ ⅓
⇀
ⅻ ۹ ⅘ ‫ ܥ‬ℹ জ ℿ ୆ ࣣ „ ⅃ ⅃ Ⅿ ບ ⅘ ໦ ਑ ⃸⅕ ” ‡ ࠗ
ń ⅅ
” ↫
ⅶ ⅶ ා
⅗
ෝ
℻
ْ
ࢡ
ව
ⅅ
⁇
ో
‫ث‬
‫ۿ‬
ၑ ૞ ”
„
ⅲ ໤ ါ ŗ ⅍„ഢ ” ⅵ ⅻ ܿ ⅛ ⅵ Ⅼ
⅓ ࣉ₉₿ ⅘ ۬ ‡Ⅻැ ৹ ⅇ ‫ ℺ ܙ‬ⅵ ⅻ ໦ ‶ „‫ ؍‬औ ↾ℸ ℷ⅃ ඾ ⅁ อ ੅ ৾ ⅁ ੄ എⅴ ་ ௮ ஠ ଢ଼ ⅕ ‫ݠ‬࿨ ⅻ ⅁ ౯ ” ₊ⅉ ₛ ⅕ ‫ܞ‬ⅴ ⅕ ⅃ ⅔ ℺ ৪ࠁⅇ ॄ
⅓ ୟ ⅛ ⅔ എ ழ ℺ ⅶ ” ౙ ⅻ „ ⅘ ⅸ
⅘ Ⅻ ⅛
↭ ⅗
എ
↊
Ⅿ ⅴ ⅜ ⅓ ⅅ ⅵ
૞ℵ
⅗ ℻ ⅘ Ⅼ ໦ ⅍ ૽ ⅗
ၛ ⅕ ↼ ⅘ ⇀ ⅇଲ ှ য ” ” ॉ ୆ ೾ ੍
ޭ
ℿ
ℵ
Ⅾ
↏
ⅵ
Ⅿ
࡭
⅓ ⅍ ↶ ४ ⁉ ℿ۬ₛ ⅵ ‫ٮ‬‵ℼ Ⅻⅵ എ ⅲ ↝ ⅶ ⅜ ℹ
ⅶ ⅴ ℺ ‫ ↆ ح‬ℵ
⅛ এ ֚ ଻ ࣣ ന ࢃ ၂ ⅶ ⅛
⅕ ⅘ ℶ ↍ ⅓ ” ⅴ ⅛
Ք ආ
ℴ
⅗
⅝
↡
Ⅻ
⅘
ⅆ
ℵ
⅜
↞
ℶ
⅍
এ
”
⅕
ℵ ࣣ
ࢡ Ⅿ
⅗ ⅇ ↽ ›
ⅳ ‡
ࢨ ࡉ
↼ ‶ ৡ
⁁ ୆ ഔ ⅾ⇅ ⅓ ၑ ⅇ ” ↑ ࣺ ਔ
⅘ ‵ ⅅ ↝ ‫ু ز‬
⅍ ⅵ ‡
℻
ℵ ⅑
⅓
⅛
↽
Ⅼ
„
Ⅾ
Ⅿ എ
Ⅿ ๼ ⅍ ↍ ⅔ ২
⅔ ⅗ ⅛ ↔ ↗
ℵ ⅓ ೲ ⅔
ⅰ ⅘ ⅔ ཙ ‡ ⅕
ⅾ↎ⅅ
Ⅻ ⅁ ↘ ⅅⅇ ℸ ⅽ ↽ ‡℺ ؊ ⅜ ࡏ ⅘ ଲ സ ℵ ࣣ ⇅ ⅇ ྴ
⁄ ⇅ ⅔
⁍
⅋
ⅇ
⁉
„ ⅇ ⇅
‫ ٮ‬ٛ ₊ ၑ ⅕ „ ⅻ
ຈ
ℶ
ℷ
ℸ
⅗
↜ ‡ ⅕
⅓
↭
⁋
Ⅵ
„ ”

2012
Summer

編集長

松浦智之

編集

鎌田広子

ライター

柏崎吉一

青井大地

制作協力

USP 友の会

表紙デザイン石塚幸治（ジーズバンク）

発行人

當仲寛哲

発行元 （有）USP 研究所
定価 400 円（本体価格 381 円）

ご意見・ご感想・投稿はこちら

mag@usp-lab.com（技術的なお問合せには対応しかねますのでご了承ください）次号予告

USP Magazine info
USPMagazine の細かい情報が定期的にアップアップデートされています。
「イイね」ボタンぽち！ ----->>USP
MAGAZINE
vol.5

USPMagazine

編集後記
・東京スカイツリーが開業しましたね。「粋」と「雅」を毎夜交互にライトアップしてますが、雅の日の江戸紫
色の照明は、見てるとタワーの北側にしか当ててないようなのですよ。なので錦糸町側からは全然江戸紫に見えないのです。何故そうしているんでしょうねぇ？（編集長 松浦）
・3 月末に開催された BSD カンファレンスでのお話。 vol.4 から始めた「Tech 数独」がカンファレンスに来ていた外人さんに人気でした。30 分ぐらいあーでもないこーでもない、って夢中に解いていたのを覚えています。
言葉関係ないのだ！と、コーナー作った後に意外な効果を知りました。しかし、外人さんでも「日本語ができる」
方が 2 名ほど、USP Magazine 買って行ってくれたのです。嬉しかったです。（鎌田）・今号から編集に本格的に参加しました。今まで外側から眺めるだけだった UNIX/Linux/ シェルスクリプトの世
界にどっぷり浸かっています。いろいろな文化の違いに驚きつつ、思想に共感し、そして志の高さに敬意を表し、どんどん深みへはまり始めています。（青井）・伊豆・網代にある洋上の釣り堀に立ち寄った。網の中を泳ぐ鯛と小ぶりのアジ。所詮釣り堀と高を括っていたが、アジの動きが予想以上に素早い。こちらを嘲笑うように餌のオキアミだけ持っていかれる。鯛は釣れるのになぜ？
忍耐力の尽きる頃にやっとかかり始めた。手を焼く方が燃えるが、コツをつかむまではしんどい。なんでもそうだ（ライター 柏崎）2012 年 9 月発行予定です。

・ Tukubai レシピ

Web 編

・ TechLION 再録 砂原秀樹教授
・ デール・ダハティ（O'Reilly
Media 創始者）に訊く技術者
哲学・ 後藤大地・ ほか

漢の UNIX

好評連載陣

内容は変更になる場合があります。

19

USP MAGAZINE vol.5 summer

イベント予告ŕŉŖœŔŅłŚġĳķġŋŖōŚ

ŕŦŤũōŊŐŏġŷŰŭįĹġ

̳͉̈́ͣģ̇͌́ ŕłōŌġōŊŗņ
/% ඥ௎ීʂŴᬖ݈ʁ
6CNM)WGUVUᕲ߷ჇɟᲢƑƾƠǜᲣŴ‫ޛ‬ஜᘽʼŴ᭗೛Ⴧࡻ6JWTUFC[ 5VCTV ᳸%NQUG 2NCEGρஜங 5WRGT&GNWZG
6KEMGVЭ٥Ǔȷʖኖų όŴ࢘ଐ  όᲢȉȪȳǯᡂᲣɼ͵ᲴȦȋȐȸǵȫȷǷǧȫȷȗȭǰȩȟȳǰᄂᆮ৑ųңឃᲴ২ᘐᚸᛯᅈŴǪȩǤȪȸǸȣȑȳŴǵȠȩǤȕǡǯȈȪȸࢸੲᲴଐஜ 70+: ȦȸǶ˟Ŵ'/<'41ŴǭȣȪǢȇǶǤȳǻȳǿȸžǨȳǸȋǢ 6[RGſ

TechLION vol.8

ŖŔő࿻͈ٛġ֥ٛ༡ਬಎ
ΏͿσ̦́̾̈́ͥܿ੅͈ႊȊ̜͈̈́ͭ́ͤ͜ΈσȜ΋ηνΣΞͻ
約 350 名の会員が定例会や勉強会で活発に交流をしています。

મ̱̩͉ũŵŵűĻİİŸŸŸįŶŴűŵŰŮŰůŰŬŢŪįūűȁͅͺ·ΓΑȊ@usptomo

USP 友の会ŖŔőġŎłňłśŊŏņġΨΛ·΢ϋΨȜġࢡບอคಎ Ģ
vol.0

vol.1

vol.2

vol.3

vol.4

言語。OS 深層から様々な言語・アプリの話まで、さらには技術の先にいるエンジニア達にもスポットを当てます。目指すは、シェルスクリプトとエンジニア達の地位向上！

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

USP 出版

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

USP MAGAZINE は、
世界初のシェルスクリプト技術情報誌。でもご存知のとおり、シェルスクリプトはグルー

自炊不要

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

ŖŏŊřİōŪůŶŹİ ΏͿσΑ·ςίΠ͈‫خ‬ෝ଻ͬޭࡠ́͘೏‫̳̱͘ݥ‬Ȋ