今 使 ってる 道 具 も 、今 やってる 仕 事 も 、み ん な 誰 か の も の づ くりによって 生 ま れ た 発 明 品 。
ISSN 2187-9664

USP
MAGAZINE

2u0tu1m2na
400Yenfor the sophisticated shell scripters
シェルスクリプトに何でもおまかせOpen usp Tukubai
シンプルレシピ Web編
デール・ダハティー氏に訊く、技術者哲学
TechLION再録

砂原秀樹

次の世代とともに進む未来
好評連載

原色Linux美女図鑑
菅雄一 中小企業手作りIT化奮戦記
新連載・長谷川猛 うにっくすなやつら
開催10年目 LL Decadeイベントレポート

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

USPMAG201209̲yorinuki̲cs55.indb 1

2012/10/12 17:32:57

From Editor
今年も秋がやってきました。読書の秋、スポーツの秋。多くの作物も収穫され、クリエイティブな季節ですね。
そんな秋にふさわしく、今回の USP MAGAZINE の裏テーマはものづくりです。
技術者哲学の記事でインタビューに伺ったのは、ものづくりコミュニティー雑誌「Make」発起人のデー
ル・ダハティー氏。オライリー・メディアの創業から UNIX 書の執筆、そして雑誌 Make の発行に至るま
で、バラエティー豊かなものづくりの精神が氏から伝わってきました。
一方で、今回の TechLION 再録記事に登場している砂原秀樹先生がまた、ものづくり精神あふれる方だったのです。日本のインターネットを作り、新しい学科を作り、そして今、次世代を担う人材を育てていらっ
しゃいます。
TechLION のトーク中、自らを「立ち上げ屋」と称していらっしゃいました。あのようにしてプロジェク
トを次々と成功させてきた秘訣はなんだろう……、その一つはトークにも滲み出ていました。それは見識と冗談を絶妙なバランス感覚で繰り出し、各界の人々と渡り合う能力なのでしょう。
だから今回の TechLION 記事。当時の先生の雰囲気や人柄がありのまま伝わるよう、普通の雑誌なら割愛されてしまうであろう冗談や口調を、普段にも増して残しました。
ものづくりに長ける人は仲間づくりも長けている。二つの記事を編集するなかで、そんな共通点が見えてきました。
秋と言うクリエイティブな季節、皆さんもスキルを磨くと共に勉強会などに参加し、仲間を増やしてみてはいかがでしょう。
USP MAGAZINE 編集部

Contents
特集 1

シェルスクリプトを本気で使い倒す Open usp Tukubai シンプルレシピ Part2 … 3

ユニケージエンジニアの作法
今私たちは何を学ぶべきか
TechLION 再録
新連載

第4回

第6回

…………………………………………………………………………… -大岩元……………………………………………………………………… -砂原秀樹 ―― 思えば遠くに来たもんだ。次の世代とともに進む未来 ………………… -うにっくすなやつら長谷川猛………………………………………………………………………… -原色 Linux 美女図鑑 ―― 第 5 回 西本恭子 ……………………………………………………………………………… 11

LL DECADE イベントレポート ………………………………………………………………………………… 12
漢の UNIX

第3回

後藤大地 ………………………………………………………………………………………… -やわらかマッドサイエンティスツのプログラミング講座 〜 ジャクソン構造図編 ………………………… -特集 2

デール・ダハティ氏に訊く、技術者哲学 …………………………………………… 16

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

第4回

第6回

菅雄一

…………………………………………………………………… -……………………………………………………………………………… 20

Tech 数独 ……………………………………………………………………………………………………………………………… 24
天地概況 奈須蛍路 ／ 編集後記 …………………………………………………………………………………………………… 25※ 薄字で記している記事は、よりぬき版には収録されておりません。また、本誌とは収録順序が若干異なります。

2

USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 2

2012/10/12 17:32:58

特集1

シェルスクリプトを本気で使い倒す

Open usp

TukubaiἉὅἩἽἾἉἦ

Part2・Web編
USP マガジン編集部
Tukubai、
それはシェルスクリプトをプログラミング開発言語として本気で使うためのコマンドセット。
「本気で使う」ということは、
決して無理矢理使うことではない。
実用的に使うことができるという意味である。
前回は帳票作成と数理演算への活用例を示した。
今回は Web アプリケーション開発への活用例を示そう。
レシピの中で紹介されているコードのいずれもが、簡潔な記述で収まっていることに驚くことだろう。
それこそが本気で使えることの証なのだ。

準備

ShellScriptで Web アプリ開発。
それもTukubai の得意技。

レシピ１

HTMLで書かれたデータを取り込む。

レシピ２

HTMLを動的に作成する。

レシピ３

AjaxでWebフォームの使い勝手をよくする。

オマケ

宝くじチェックアプリを使ってみる。

USPMAG201209̲yorinuki̲cs55.indb 3

2012/10/12 17:32:58

੔๵ΏͿσΑ·ςίΠ́ŘŦţͺίς‫ٳ‬อȃ̷ͦ͜ŕŶŬŶţŢŪ͈ංփܿȃ

Tukubai は、シェルスクリプトをプログラ

その粒度がよく考えられ、適切だからなのだ

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

が、短いコードは開発の迅速化に寄与する。

マンド集だ。
これは前号の本特集でも述べた。
しかし、Tukubai の説明をしている中でよく返される質問がある。
「なるほど、HTMLOpen usp Tukubai を
インストールするを担当する Java や Perl や Ruby 等と連携して使うのですよね？」というものだ。

インストールは簡単。アーカイブをダウンロードして解凍し、make install するだけ。

連携が可能か否かという意図かもしれず、前号を見てインストールしたという方も、そとりあえず「はい」と答えるが、Tukubai はの後更新された（本誌発行時点で 2012 年 8

そうやって連携させて使う目的で作られたも

月 2 日版）ため、最新版に更新してもらいのではないことをいつも必ず付け加えていたい。本号のレシピでは、そこで追加されたる。Tukubai の本来の使い方は Web インターコマンドも利用している。

作ってしまうやり方なのだ。
シェルスクリプトで Web 周りまで実装す写真１．Tukubai のポータルサイト“UEC”

ではインストール方法を詳しく見ていこう。

フェースも含めて丸ごとシェルスクリプトで■ 事前に必要なもの◎

Python（2.4 以降の 2.x 系列）?!ubs!kyg!pqfo.vtq.vlvcbj.zzzznnee/ubs/c{3?!nblf!MPDBMCBTF>0ipnf0VTFSOBNF0uvlvcb
j!jotubmm

るなどというと、笑い話に聞こえて受け入れOpen 版である Open usp Tukubai のコマ

難いかもしれない。だが、それを実用レベル

ン ド は Python（2.4 以 上 の 2.x 系 用 ） で 出にまで引き上げる存在こそが Tukubai なの来ている。よって事前にインストールしてこの場合は、環境変数 $PATH に Tukubaiだ。本特集の最後では流行りの Ajax まで扱っ

おこう。Python の導入についての詳細は、コマンドのパスを追加すること。上記例の場ているが、冒頭に述べた「開発言語としてのPython サイト（http://www.python.org/）や、

合、/home/USERNAME/tukubai/bin となる。

本気っぷり」をとくとご覧いただきたい。

シェルスクリプトを使うのは意地ではない、実用的だから

日本 Python ユーザ会さんのサイト（http://

尚、 ア ン イ ン ス ト ー ル す る 場 合 は makewww.python.jp/）を参照して欲しい。

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

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

Open usp Tukubai の ダ ウ ン ロ ー ド はFreeBSD では ports コレクションに Open

もう一つ、よく受ける質問として「できるTukubai に 関 す る ポ ー タ ル サ イ ト で あ る

usp Tukubai が 登 録 さ れ て い る。 従 っ て、のはわかりますけど、実用的じゃないですよ「UEC」（usp engineers' community、https://

Open usp Tukubai アーカイブファイルのダね？」というのがある。そんなことはない。

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

ウンロード作業も、事前の Python インストー

理由として、次の二つを挙げたい。

このサイトの上部メニューから、■ MVC の全てをシェルで発想できる→ “Tukubai”

Web アプリ開発でよく用いられる概念で→ “Open usp Tukubai ダウンロード ”

MVC(Model: デ ー タ ア ク セ ス、View : 表 示、と進むと、そこで最新版が公開されている。

Controller:UI からの入力 ) というものがある。

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

Tukubai を用いた開発ならば、これら全てを後、次のようにして解凍、およびインストー

馴染み深いシェルスクリプト一つで発想するルする。

ことができる。これは、開発環境をコンパク?!ubs!kyg!pqfo.vtq.vlvcbj.zzzznnee/ubs/c{3?!tvep!nblf!jotubmm

トにし、かつ見通しをよくすることにもなる。

■ コードの短さが、開発を迅速化

ル作業も不要だ ( 自動的に行われる )。
具体的には root になって下記のコマンドを打ち込むだけである。
$!de!0vts0qpsut0efwfm0pqfo.vtq.uvlvcbj$!nblf!jotubmm!dmfbo

記事中のプログラムは
UECサイトにてダウンロード可これで準備完了。シェルスクリプトによる

MVC という発想が生まれた理由の一つは、

レンタルサーバー等、root 権限が与えら

アプリの構造をこの 3 つに分離して部品化れておらず、ホームディレクトリー等にイン

前回同様、掲載レシピのプログラム、及びし、開発を迅速化することにあったはずだ。

ストール先を変更したい場合、次のように

サンプルデータを、先程紹介したポータルサ

本特集で出てくるコード見て欲しい。短いmake に与える LOCALBASE 変数でそのディ

イト UEC にてダウンロードできるようにしレクトリー指定できる。

てある。是非併せて活用してもらいたい。

のだ。Unix・Tukubai のコマンドが持つ機能や

4

Web アプリの作られ方をとくと見て欲しい。

USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 4

2012/10/12 17:33:00

特集１― Open usp Tukubai シンプルレシピ Part2・Web 編

τΏάˍŉŕŎō ́੥̥̹ͦΟȜΗࣺ͚ͬ৾ͤȃ問題

みずほ銀行の宝くじ公式ページに載っている当せん番号一覧を表にして保存したい。
ただ元データは HTML になっていてタグがいっぱいついている。これを外し、プレー
ンテキストの表にできないだろうか。

解答
まず cURL(curl コマンド ) の力を借りる。
これで目的の URL から生の HTML テキストを得られる。あとはこれを、sed や AWK 等
を使って地道に整形していけば完成だ。
整形のコツは、一旦 HTML テキストの中にある改行を全部取り去って、必要なタグの■ サンプルプログラム
宝くじの公式ページ（写真１）内の「ジャンボ宝くじ」の当せん番号を収集するプログ
ラムを作成した（リスト１）。ただし当せん
番号案内のトップは各抽せん回へのリンクになっており、実際の番号はそのリンク先にあったため、トップページでリンクを収集した後、さらに各々のページへアクセスし、当
せん番号を収集している。
宝くじには「前後賞」や「組違い賞」といった変則的なデータがあるので、それらについてもきちんと展開するようにしてある。最終的に第一フィールドから、抽せん日、宝くじ
名、等、賞金、組、番号というテキスト表デー

画面１．宝くじ公式ページ＠みずほ銀行（2012 年 9 月現在）

当せん番号一覧の記載されいるページについても同様の方法で︑タグをパースしている

タ（LOTTERY̲DAT）にした。

2! $"0cjo0ti
3! $4! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
5! $!MPUUFSZ/EC!൚̹̹̞ͤ̈́ͣฃ̠̱̥̞̈́ȃ༯̩̲ΟȜΗαȜΑȊȊ
6! $!ȪTIFMM̞̠͂Οͻτ·Πςͬै଼̱Ȃ̷͈‫ͅئ‬෻౾̱̩̺̯̞̀ȫ7! $8! $!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*!0!Ebuf!;!24!Bvh/3123
9! $!Bssfohfe!cz!VTQ!NBHB[JOF)nbhAvbq.mbc/dpn*!0!Ebuf!;!19!Tfq/3123:! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
21!
sed コマンドで改行への置換を綺
22! $!ΏͿσ་ତ͈ΓΛΠ
麗に書くため、シェル変数に改行
23! ipnfejs>%)qxe*<!ipnfejs>%|ipnfejs&0+~
をセットしている
24! qpne>%ipnfejs0QPNQB
BSD 系 OS に は tac コ マ ン ド
25! upq>#iuuq;00xxx/nj{vipcbol/dp/kq#が無いが、相当の機能はある
26! MG>%)qsjoug!(]]]123`(*<MG>%|MG&`~
ためエイリアス定義している
27!
curl コマンド
28! $!ubd΋ζϋΡ͈೰݅)+CTE͈͙*（指定 URL の HTML デー
29! \!.o!#%)vobnf!}!hsfq!CTE*#!^!''!bmjbt!ubd>(ubjm!.s(
タを標準出力に流す）2:!
31! $!2/‫̜͉ͦ͂͜ة‬Ȃ༯̩̲൚̵ͭΟȜΗαȜΑ)Ξ΅ΑΠນ*̩̳ͬ̾ͤ͘
32! $!༯̩̲࢖৆βȜΐܱ̯̞ͦ̀ͥͅΐλϋδ༯̩̲͈֚။ͬ৾ͤ੄̳
33! dvsm!.t!%|upq~0ublbsblvkj0utvkzp0kvncp0joefy/iunm!!!!!!!!!!!!!}
34! $!ຈါ̈́ߊ‫=)࣐͈ۼ‬ubcmf?ȡ=0ubcmf?ͬಒ੄!!!!!!!!!!!!!!!!!!!!!!$
まず sed を使い、今回必要な <table>~</table> 区間のみを抽出
35! tfe!.o!(0=ubcmf0-0=]0ubcmf?0q(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
36! $!֚౞٨࣐΋ȜΡͬ஠໐৾ͤ‫!!!!!!!!!!!!!!!!!!!!!!!!̠̱̀̽͘ݲ‬$37! us!.e!(]o(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}HTML 内の改行を一旦全消去
38! $!=b?ΗΈ͈ੜၑ;!ςϋ·VSM͂ςϋ·໲লႥ̺̫า̧੄̳!!!!!!!!!!$
39! tfe!(t"=b!\_?^+isfg>#])\_#^+]*#\_?^+?])\_=^+]*=0b?"]2!]3"h(!!!}
3:! $!=ui?ΗΈͬ=ue?͂൳൝ͅե̠̹͛Ȃ౾۟!!!!!!!!!!!!!!!!!!!!!!!!!$<td>~</td> はタグを外し
41! tfe!(t"=ui"=ue"h<t"=0ui"=0ue"h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
先頭にプレフィックス "@" を
42! $!=us?ΗΈ̦੄̷̧̹͈̀ͣ਀ஜͅ٨࣐΋ȜΡͬொව!!!!!!!!!!!!!!$
付けている
43! tfe!(t0=us0(#%MG#(=us0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
44! $!=ue?ΗΈ̦੄̧̹̀ͣΗΈͬ‫̱ٸ‬-֣#A#ͬັ̫-ஜࢃͅ٨࣐ͬொව!$45! tfe!(t"=ue\_?^+?])\_=^+]*=0ue?"(#%MG#(A]2(#%MG#("h(!!!!!!!!!!!}
46! $!=ue?ΗΈါள͉ΑβȜΑߊ୨ͤ-=us?ΗΈ͉́٨࣐̱-Ξ΅ΑΠນͅ$
47! bxl!(0_=us0|jg)ujnf?1*|qsjou!##~fmtf|qsjoug)#!#*~ujnf,,~!!!!!!]
48! !!!!!0_A0!!|qsjoug)#&t!#-%1*~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]
49! !!!!!FOE!!!|qsjou!##~(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
4:! $!=ue?ΗΈါள͈̠̻Ȃߗ̺̹͈̽ͬ͜!#`#!ͅ་̳۟ͥ!!!!!!!!!!!!$
51! tfe!(t0!A!0!`!0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}<td>~</td> の中が空だった場合への対処
52! $!=ue?ΗΈါளͅັ̫̞̹֣̀#A#ͬۖ஠ͅੰ‫!!!!!!!!!!!!!!!!!!!ݲ‬$（"̲" としている）
53! us!.e!(A(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
54! $!ΞȜήσ͈ࣜ࿒ྴ)ࡓ=ui?ါள*͈࣐ͬ৾ͤੰ̩!!!!!!!!!!!!!!!!!!$
55! ubjm!.o!,3!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!} 日付フォーマット
56! $!#zzzzාn࠮e඾#ɨ#zzzznnee#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$ 変換 (YYYYMMDD)
57! tfe!(t0_])\1.:^+]*ා])\1.:^+]*࠮])\1.:^+]*඾0]2-1]3-1]40(!!!!!}
58! tfe!(t0_])\1.:^+]*-1+])\1.:^\1.:^]*-1+])\1.:^\1.:^]*0]2]3]40(!}
59! $!ಒ̵ͭ඾Ȃ˱ˮ˨Ȃ༯̩̲ྴͬਜ਼๔৾ͤͅ੄̱Ȃ!!!!!!!!!!!!!!!!!!!$..
5:! xijmf!sfbe!ebz!vsm!obnf<!ep!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$
61! !!$!൚̵ͭ๔࣢ͬ಺͓ͥ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$
62! !!dvsm!.t!%|upq~%|vsm~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
63! !!$!୶೾͂൳အͅȂIUNMಎ͈ΞȜήσါளͬΞ΅ΑΠນͅ་۟!!!!!!!!!$
64! !!tfe!.o!(0=ubcmf0-0=]0ubcmf?0q(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
65! !!us!.e!(]o(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
66! !!tfe!(t"=ui"=ue"h<t"=0ui"=0ue"h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
67! !!tfe!(t0=us0(#%MG#(=us0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
68! !!tfe!(t"=ue\_?^+?])\_=^+]*=0ue?"(#%MG#(A]2(#%MG#("h(!!!!!!!!!!!}
69! !!bxl!(0_=us0|jg)ujnf?1*|qsjou!##~fmtf|qsjoug)#!#*~ujnf,,~!!!!!!]
6:! !!!!!!!0_A0!!|qsjoug)#&t!#-%1*~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]
71! !!!!!!!FOE!!!|qsjou!##~(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
72! !!tfe!(t0!A!0!`!0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
73! !!us!.e!(A(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
74! !!$!'fntq<!̈́ͥ໲লႥͬ‫͚܄‬ાࣣ̦̜͈ͥ́΋ͼΜͬߗฒͅ་۟!!!!!$
75! !!tfe!(t0'fntq<0!0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
76! !!$!ˍ൝ஜࢃર͈̹͈͛τ΋ȜΡ೏‫!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ح‬$77! !!ubd!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}

一旦改行を全消去後︑必要なタグにだけ付け︑コマンドでタグに応じた処理をしている
AWK

前（または前後）にだけ改行を入れることだ。

リスト１．LOTTERY.DB：「ジャンボ宝くじ」当せん番号案内一覧を収集するプログラム

次ページへ続く→

5

USPMAG201209̲yorinuki̲cs55.indb 5

2012/10/12 17:33:01

解説
実はこのプログラムには Tukubai コマン
ドが一つも出てこないのだが、Web アプリ
開発で HTML や XML のパースは欠かせぬ話ということで取り上げた。
大抵の言語では DOM や SAX を使うところ、
シェルスクリプトなら sed や AWK、tr といったテキストフィルターコマンドだけで軽くこなすこともできる。

■ 改行を入れ直す
シェルスクリプトで HTML や XML のタグをパースするコツは、改行を一旦全部除去してから必要なところにだけ再び挿入することである。

前後賞や組違い賞 の 行 が あ っ た ら ︑
番号と金額を適宜 直 し た 行 を 複 製 す る

このシェルスクリプトによって Text1 のよ
うな当せん番号テーブルデータが生成される。

78! !!bxl!(|jg)%2>>#2൝͈ஜࢃર#*|t>%2<n>%3~!!!!!!!!!!!!!!!!!!!!!!!!]
79! !!!!!!!!fmtf!jg)%2>>#2൝#*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]
7:! !!!!!!!!!!|qsjou<qsjou!t-n-%4-%5,2#๔#<qsjou!t-n-%4-%5.2#๔#~!!!]
81! !!!!!!!!fmtf!qsjou!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!~(!}
82! !!$!ˍ൝ழ֑̞ર͈̹͈͛τ΋ȜΡ೏‫!!!!!!!!!!!!!!!!!!!!!!!!!!!!ح‬$83! !!bxl!(|jg)%2>>#2൝͈ழ֑̞ર#*|t>%2<n>%3~!!!!!!!!!!!!!!!!!!!!!!]
84! !!!!!!!!fmtf!jg)%2>>#2൝#*|qsjou<qsjou!t-n-#‫ڎ‬ழ‫ވ‬೒#-%5~!!!!!!!]
85! !!!!!!!!fmtf!qsjou~(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
86! !!bxl!(OG>>5(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
87! !!tpsu!.o!.l2-2!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
88! !!bxl!(|qsjou!#(%ebz(!(%obnf(#-%1~(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!<
89! $!MPUUFSZ`EBU!2;ಒ̵ͭ඾!3;༯̩̲ྴ!4;൝!5;ર߄!6;ழ!7;๔࣢!!!$..
8:! epof!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!?!%qpne0MPUUFSZ`EBU
91!
92! $!3/ಒ̵ͭ඾஖఼͈ΡυΛίΘ;ϋςΑΠ୆଼ဥͅȂͼϋΟΛ·Αͬैͥ
93! tfmg!3!%qpne0MPUUFSZ`EBU!!!!!!!!!!!!}
これらのデータは、
94! vojr!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
レシピ２で動的 HTML の生成に利用する
95! $!LJOE`MJTU!!!2;ͼϋΟΛ·Α!3;༯̩̲ྴ
96! bxl!(|qsjoug)#&13e!&t]o#-!OS-!%2*~(!?!%qpne0LJOE`MJTU
97!
98! $!4/ழ๔࣢஖఼͈ΡυΛίΘ;ϋςΑΠ୆଼ဥͅȂͼϋΟΛ·Αͬैͥ
99! tfr!::!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
9:! bxl!(|qsjoug)#&13e]o#-%2*~(!!!!!!!!!}:1! $!HSPVQ`MJTU!!2;ͼϋΟΛ·Α!3;ழ
:2! tfmg!2!2!!!!!!!!!!!!!!!!!!!!!!!!!!!!?!%qpne0HSPVQ`MJTU:3!
:4! fyju!1

例えば HTML には <table> というタグがある。言うまでも無くこれは HTML 上でテー

<td> に 関 し て も、<td> 〜 </td> と い う

通るのは日常茶飯事。なんと執筆時点 (2012

ブルを表現するためのタグである。この中に単位で単独行にしておけば、やはり "<td" 始

年 9 月 ) で、みずほ銀行のジャンボ宝くじ当は <tr> や <td> といった行、列を示すタグ

まりの行を一つの列であると認識して、値をせん番号案内トップページの HTML データがある。このテキストから行、列を正しく認収集できる。

も少々間違っている。抽せん回一覧ページで、識してテーブルの中身を取り出すにはどうすればよいか。

この時 <td> から </td> の間に改行がある

抽せん日の <td> が </th> で閉じられている。

と都合が悪いので、最初に予め取り去っておDOM や SAX といった外部のパーサーに

ま ず sed で <tr> の 前 後 に 改 行 を 入 れ、

くというわけだ。幸い HTML は、<br /> を頼っていた場合、こういうデータの処理で苦<tr> を 単 独 行 に し て お け ば よ い。 そ の 後改行として扱っているから問題にならない。

労するかもしれないが、こちらは自前で作っAWK で "<tr" 始まり行を読み込んだ時に、新■ 不正な HTML でもへっちゃらているので、さほど悩むこともなく対応してしいレコードに移ったと認識できるからだ。

HTML ともなれば、タグの間違いがまかりしまえるというわけだ。

Text1．LOTTERY.DB が収集した、ジャンボ宝くじの当せん番号一覧テーブルデータ
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝!3111ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!231413๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝!3111ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!24:413๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝!3111ྔ‫!׫‬ழ‫ئ‬2ΉΗ2ழ!212321๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝!3111ྔ‫!׫‬ழ‫ئ‬2ΉΗ3ழ!247:46๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝!3111ྔ‫!׫‬ழ‫ئ‬2ΉΗ9ழ!257675๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!231412๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!231414๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!24:412๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ1ழ!24:414๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ2ழ!21231:๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ2ழ!212322๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ3ழ!247:45๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ3ழ!247:47๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ9ழ!257674๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!2൝͈ஜࢃર!21ྔ‫!׫‬ழ‫ئ‬2ΉΗ9ழ!257676๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!3൝!2ྔ‫ئ!׫‬4ΉΗ!982๔
31231918!ల736ٝ஠࣭ুহ༯̩̲
Ȫ3111ྔ΍ζȜȫ!4൝!411‫ئ!׫‬2ΉΗ!6๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!΍ζȜΨΉȜΏοϋર!21ྔ‫ئ!׫‬5ΉΗ!2322๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!2൝!5‫!׫ؙ‬52ழ!216726๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!2൝͈ஜࢃર!6111ྔ‫!׫‬52ழ!216725๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!2൝͈ஜࢃર!6111ྔ‫!׫‬52ழ!216727๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!2൝͈ழ֑̞ર!21ྔ‫ڎ!׫‬ழ‫ވ‬೒!216726๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!3൝!611ྔ‫!׫‬79ழ!296679๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!3൝!611ྔ‫!׫‬88ழ!273779๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!4൝!211ྔ‫ڎ!׫‬ழ‫ވ‬೒!29::95๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!5൝!2ྔ‫ئ!׫‬4ΉΗ!657๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!6൝!4111‫ئ!׫‬3ΉΗ!47๔
31231918!ల735ٝ஠࣭ুহ༯̩̲
Ȫ΍ζȜΐλϋδȫ!7൝!411‫ئ!׫‬2ΉΗ!6๔
31231723!ల732ٝ஠࣭ুহ༯̩̲
ȪΡςȜθ21)˰ˡ˪*ȫ!2൝!21ྔ‫ئ!׫‬4ΉΗ!595๔ȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȁȇ

6

USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 6

2012/10/12 17:33:02

特集１― Open usp Tukubai シンプルレシピ Part2・Web 編τΏά ĳŉŕŎō ͬ൲എͅै଼̳ͥȃ
問題

解答

先程収集した当せん番号のデータに基

例 え ば Web 掲 示 板 で あ れ ば 送 信 さ れ たづき、これをブラウザで照会できるよう、

メッセージに応じた HTML を生成する。こHTML 入力フォームを作りたい。

文字列を埋め込んでおく。このテンプレート
HTML と表データを mojihame に掛けると、データがハメ込まれた HTML になるというわけである。

のようにして動的に HTML を生成したいこ

従って、動的に HTML を作りたい CGI スク

ただ、抽せん回はドロップダウンメニューとは多々ある。そこで Tukubai にも、このよ

リプト内にこの mojihame を仕込めばよい。

で選択できるようにしたい（手で打つのは面

うな使い道を想定したコマンド “mojihame”■ サンプルプログラム

倒だ）
。そこで、
先程の当せん番号データファ( 文字ハメ ) が用意されている。

イルから動的に選択肢（<option> タグ）を生成して欲しい。

宝くじの Web フォームを生成するサンプ

まずテンプレートとなる HTML を作ってルは、テンプレート HTML( リスト２) と CGIおく。そこには mojihame が反応するマクロスクリプト ( リスト３) の 2 ファイルから成る。

リスト２．LOTTERY.HTML : 宝くじ当せんチェック Web フォーム・テンプレート
2! ="EPDUZQF!IUNM!QVCMJD!#.00X4D00EUE!IUNM!5/12!Usbotjujpo
bm00FO#!#iuuq;00xxx/x4/psh0US0iunm50mpptf/eue#?
3! ="..!IUNM̞̠͂ejsfdupszै଼ࢃȂ̷͈‫ͅئ‬෻౾͈̭͂!..?
4! =iunm?
5!
6! =ifbe?
7!
8! =nfub!iuuq.frvjw>#Dpoufou.Uzqf#!dpoufou>#ufyu0iunm<!dib
stfu>VUG.9#!0?
9! =nfub!iuuq.frvjw>#Dpoufou.Tdsjqu.Uzqf#!dpoufou>#ufyu0kb
wbtdsjqu#!0?
:! =nfub!iuuq.frvjw>#Dpoufou.Tuzmf.Uzqf#!dpoufou>#ufyu0dtt#!0?
21!
22! =ujumf?Pqfo!vtq!Uvlvcbj!༯̩̲൚̵ͭΙͿΛ·=0ujumf?
23!
24! =tuzmf!uzqf>#ufyu0dtt#?
25! !!+!|qbeejoh;1qy<~!0+!efgbvmu͈qbeejohͬ஠̀1ͅ!+0
26! !!ue/lpnplv!|gpou.tj{f;26qy<!ufyu.bmjho;sjhiu<~
27! =0tuzmf?
28!
Ajax ではお決まりのXMLHttpRequest ラッパー
29! =tdsjqu!uzqf>#ufyu0kbwbtdsjqu#?
（レシピ３で利用）
2:! !!gvodujpo!hfuYNMIuuqSfrvftu)*|
31! !!!!jg)"xjoepx/BdujwfYPckfdu*!|!00GG-Dspnf-JF9చ؊
32! !!!!!!sfuvso!ofx!YNMIuuqSfrvftu)*<
33! !!!!~
34! !!!!usz|!!!!!!!!!!!!!!!!!!!!!!!!00JF8చ؊
35! !!!!!!sfuvso!ofx!BdujwfYPckfdu)#Ntynm3/YNMIUUQ#*<
36! !!!!~
37! !!!!dbudi)f*|!!!!!!!!!!!!!!!!!!!00JF7చ؊
38! !!!!!!sfuvso!ofx!BdujwfYPckfdu)#Njdsptpgu/YNMIUUQ#*<
39! !!!!~
3:! !!~
41! !!gvodujpo!HfuPvuqvu)*|
42! !!!!wbs!iuuqSfr!>!hfuYNMIuuqSfrvftu)*<
43! !!!!iuuqSfr/pqfo)#QPTU#-#MPUUFSZ/BKBY#-usvf*<
44! !!!!iuuqSfr/tfuSfrvftuIfbefs)
45! !!!!(Dpoufou.Uzqf(-(bqqmjdbujpo0y.xxx.gpsn.vsmfodpefe(
46! !!!!*<
47! !!!!iuuqSfr/posfbeztubufdibohf!>!gvodujpo)*|48! !!!!!!jg)iuuqSfr/sfbezTubuf!">!5!!!}}
49! !!!!!!!!!iuuqSfr/tubuvt!!!!!">!311!!*!sfuvso<
4:! !!!!!!epdvnfou/hfuFmfnfouCzJe)(pvuqvu(*/joofsIUNM
51! !!!!!!!!>!iuuqSfr/sftqpotfUfyu<
52! !!!!~
Ajax のリクエスト送受信関数
53! !!!!iuuqSfr/tfoe)tfoeBKBY)**< （レシピ３で利用）
54! !!~
55! !!00!BKBY͈௣૞ૂ༭͈ै଼
56! !!gvodujpo!tfoeBKBY)*|

57! !!!!wbs!ebub!>!#OVNCFS>#!,
58! !!!!!!epdvnfou/hfuFmfnfouCzJe)#ovncfs#*/wbmvf!,!#'#<
59! !!!!ebub!!!!!>!ebub!,!#HSPVQ>#!,
5:! !!!!!!epdvnfou/hfuFmfnfouCzJe)#hspvq#*/wbmvf!,!#'#<
61! !!!!ebub!!!!!>!ebub!,!#LJOE>#!,
62! !!!!!!epdvnfou/hfuFmfnfouCzJe)#ljoe#*/wbmvf<
63! !!!!sfuvso!ebub<
64! !!~
65! =0tdsjqu?
66!
67! =0ifbe?
68!
69! =cpez!pompbe>#HfuPvuqvu)*<#?
6:!
71! =gpsn!obnf>#JOQVU`GPSN#!je>#JOQVU`GPSN#!tuzmf>#xjeui;91
1qy<!ifjhiu;711qy<#0?
72!
73! =ejw?
74!
75! =ubcmf!tuzmf>#xjeui;911qy<!ifjhiu;61qy<!ufyu.bmjho;dfou
fs<!cpsefs;4qy!tpmje!$111111<#?
76! !!=us?
77! !!!!=ue!tuzmf>#xjeui;211qy<!cpsefs;tpmje!2qy<#!0?
78! !!!!!!=tuspoh?VTQ=0tuspoh?
79! !!!!=0ue?
7:! !!!!=ue!tuzmf>#gpou.tj{f;33qy#?
81! !!!!!!=tuspoh?Uvlvcbj!༯̩̲൚̵ͭΙͿΛ·=0tuspoh?
82! !!!!=0ue?
83! !!=0us?
84! =0ubcmf?
85!
86! =cs!0?
87!
88! =ubcmf!tuzmf>#xjeui;911qy<!ifjhiu;231qy<#!0?
89! !!=us?
8:! !!!!=ue!dmbtt>#lpnplv#!tuzmf>#xjeui;471qy<#?
91! !!!!!!๔࣢˒ࠥ
92! !!!!=0ue?
93! !!!!=ue!tuzmf>#xjeui;511qy<!ufyu.bmjho;mfgu<#?
94! !!!!!!=joqvu!uzqf>#ufyu#!obnf>#ovncfs#!je>#ovncfs#
95! !!!!!!tuzmf>#xjeui;261qy<#!polfzvq>#HfuPvuqvu)*<#96! !!!!!!wbmvf>##!0?
97! !!!!=0ue?
98! !!=0us?
99! !!=us?
9:! !!!!=ue!dmbtt>#lpnplv#!tuzmf>#xjeui;471qy<#?ழ=0ue?
:1! !!!!=ue!tuzmf>#xjeui;511qy<!ufyu.bmjho;mfgu<#?
:2! !!!!!!=tfmfdu!obnf>#hspvq#!je>#hspvq#:3! !!!!!!tuzmf>#xjeui;261qy<#

次ページへ続く→

7

USPMAG201209̲yorinuki̲cs55.indb 7

2012/10/12 17:33:03

:4! !!!!!!podibohf>#HfuPvuqvu)*<#!0?
:5! !!!!!!!!=pqujpo!wbmvf>#11#!0?஖఼̱̀‫=̞̯ئ‬0pqujpo?
:6! ="..!$$$HSPVQ`MJTU$$$!..?
:7! !!!!!!!!=pqujpo!wbmvf>#&2#!0?&3=0pqujpo?
:8! ="..!$$$HSPVQ`MJTU$$$!..?
:9! !!!!!!=0tfmfdu?
::! !!!!=0ue?
mojihame コマンド用のマクロ文字列
211! !!=0us?
この区間が表データの行数分複製される212! !!=us?
213! !!!!=ue!dmbtt>#lpnplv#!tuzmf>#xjeui;471qy<#?
214! !!!!!!༯̩̲ਅ႒
215! !!!!=0ue?
216! !!!!=ue!tuzmf>#xjeui;511qy<!ufyu.bmjho;mfgu<#?
217! !!!!!!=tfmfdu!obnf>#ljoe#!je>#ljoe#
218! !!!!!!!tuzmf>#xjeui;461qy<#!podibohf>#HfuPvuqvu)*<#!0?
219! !!!!!!!!=pqujpo!wbmvf>#11#!0?஖఼̱̀‫=̞̯ئ‬0pqujpo?
21:! ="..!$$$LJOE`MJTU$$$!..?
221! !!!!!!!!=pqujpo!wbmvf>#&2#!0?&3=0pqujpo?
222! ="..!$$$LJOE`MJTU$$$!..?
223! !!!!!!=0tfmfdu?
224! !!!!=0ue?
225! !!=0us?
226! =0ubcmf?
227!
228! =0ejw?

229!
22:! =cs!0?
231!
232! =mbcfm!gps>#pvuqvu#?൚̵ͭ‫خ‬ෝ଻ȇ=0mbcfm?=cs!0?
233!
234! =ejw!je>#pvuqvu#?
235! ="..!$$$PVUQVU$$$!..?
236! !!=ufyubsfb!dpmt>#:8#!spxt>#21#?
237! ="..!$$$GJMFIBNF$$$!..? 可能性のある当せん番号一覧文字列がこの行に挿入される
238! !!=0ufyubsfb?
239! !!=ubcmf!tuzmf>#xjeui;911qy<#? （リスト４、レシピ３）
23:! !!!!=us?
241! !!!!!!=ue!tuzmf>#gpou.tj{f;29qy<!ufyu.bmjho;sjhiu<#?
242! !!!!!!!!ર߄ȁȁ$$$BNPVOU$$$
243! !!!!!!=0ue?
可能性のある賞金額の最高値に244! !!!!=0us?
置換される（リスト４、レシピ３）
245! !!=0ubcmf?
246! ="..!$$$PVUQVU$$$!..?
247! =0ejw?
248!
249! =0gpsn?
リスト４にて、この区間 ("OUTPUT") が24:!
抽出され、Ajax のレスポンスとして使われる
251! =0cpez?
（レシピ３）
252!
253! =0iunm?

リスト３．LOTTERY.CGI : 宝くじ当せんチェッカー Web フォーム・CGI スクリプト
2!$"0cjo0ti
29!ipnfejs>%)qxe*<!ipnfejs>%|ipnfejs&0+~
3!$
2:!iune>%ipnfejs0IUNM
4!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
31!qpne>%ipnfejs0QPNQB
5!$!MPUUFSZ/DHJ!൚̵ͭ๔࣢ΙͿΛ·͈IUNMέ΁Ȝθͬু൲୆଼
32!
33!$!ΰΛΘȜ͈੄ႁ6!$!)DHJ̞̠͂ejsfdupszै଼ࢃȂ̷͈‫ͅئ‬෻౾̱̩̺̯̞̀*7!$
34!dbu!==!IUUQ`IFBEFS
8!$!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*
35!Dpoufou.uzqf;!ufyu0iunm
組番号ドロップダウンリストを生成
9!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!8!Tfq/3123
36!
（リスト２の 95~97 行目を置換）:!$!Bssfohfe!cz!VTQ!NBHB[JOF)nbhAvbq.mbc/dpn*
37!IUUQ`IFBEFS
21!$!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!Ebuf!;!9!Tfq/3123
38!
39!$!ΡυΛίΘ;ϋςΑΠ)ழ๔࣢-ಒ̵͈ͭٝ3̥ਫ਼*ͬ
22!$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
23!
3:!$!͉ࣺ͙̦͛̈́ͣȂIUNMུఘͬ੄ႁ
41!dbu!%iune0MPUUFSZ/IUNM!!!!!!!!!!!!!!!!!!!!!!!}
24!$!۪‫ޏ‬་ତ͈ΓΛΠ
25!fyqpsu!QBUI>%QBUI;0ipnf0VTFSOBNF0uvlvcbj0cjo
42! npkjibnf!.e`!.mHSPVQ`MJTU!.!%qpne0HSPVQ`MJTU!}
26!fyqpsu!MBOH>kb`KQ/VUG.9
43! npkjibnf!.e`!.mLJOE`MJTU!!.!%qpne0LJOE`MJTU
27!
Tukubai コマンドを /usr/bin や /usr/local/bin 等 44!
抽せん回ドロップダウンリストを生成
28!$!ΏͿσ་ତ͈ΓΛΠ の標準的な場所に置いてない場合はここで設定 45!fyju!1 （リスト２の 109~111 行目を置換）

解説
HTML テ ン プ レ ー ト は そ こ そ こ あ る が、CGI スクリプトは短く、実質 14 行である。
Tukubai を使えばシェルスクリプトでもこんなに簡単に動的 HTML を生成させられる。
（生成された Web 画面はレシピ３参照）■ ループ文不要、スッキリ書ける
HTML テ ン プ レ ー ト の 95 〜 97 行 と 109〜 111 行が mojihame 用のマクロ文字列だ。

Tukubai の名コマンドたち

mojihame と ﬁlehame

Tukubai にはレシピ 2 で出てきた mojihame と、レシピ 3 で出てくる ﬁlehame の 2 種類の “ ハメ ”
コマンドがある。どちらもテンプレートとなるテキストファイルに、別のテキストデータをハメ込
むものなのだが、両者は一体何が違うのだろうか。
先に ﬁlehame から説明すると、こちらは単純に文字列をハメ込む。スペースや改行を含んでいてもそのままで、文章をハメ込むのに向いている。一方 mojihame は、スペース区切りの表データをハメ込む。だから HTML テーブルの <tr>~</tr> をレコード数に応じて動的に生成できたりする。
ﬁlehame :mojihame :=i2?କຯज!ࣽ඾͈‫׋‬ସ=0i2?

=ubcmf?

=q?

=dbqujpo?କຯज!ࣽ඾͈‫׋‬ସ=0dbqujpo?

="..!GJMFIBNF!..?

="..!NPKJIBNF!..?

=0q?

=us?=ue?&2=0ue?=ue?&3=0ue?=0us?
="..!NPKJIBNF!..?

一行に 2 フィールドあるデータをこの HTML

=0ubcmf?

テンプレートと共に mojihame に掛けると各行の n 番目のフィールドが %n にハメ込

=i2?କຯज!ࣽ඾͈‫׋‬ସ=0i2?

=ubcmf?

まれ、それが行数分だけ繰り返される。

=q?

=dbqujpo?କຯज!ࣽ඾͈‫׋‬ସ=0dbqujpo?

ࣽ඾͈̜̹͉̈́‫ܨ׋‬डࣞ"""=cs!0?

=us?=ue?௙ࣣ‫=׋‬0ue?=ue?ɚɚɚɚɚ=0ue?=0us?

අͅ߄‫̦׋‬ड̳ࣞ́ȃ=cs!0?

=us?=ue?ॽম‫=׋‬0ue?=ue?ɚɚɚɚ=0ue?=0us?

ρΛ΅ȜͺͼΞθ͉୤"=us?=ue?߄‫=׋‬0ue?=ue?ɚɚɚɚɚ=0ue?=0us?

=0q?

=us?=ue?ρΛ΅Ȝ΃ρȜ=0ue?=ue?୤=0ue?=0us?

結果として、<option> タグ行が自動生成されることとなる。mojihame のおかげでCGI スクリプト内にはループ文を書かなくて=0ubcmf?

済むため、スッキリしたソースコードになる。

8

USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 8

2012/10/12 17:33:03

特集１― Open usp Tukubai シンプルレシピ Part2・Web 編τΏά Ĵł ū Ţ Ź ́ Ř Ŧ ţέ ΁ Ȝ θ ͈ ঀ ̞ ੳ ਀ ͬ ࢜ ષ ̯ ̵ ͥ ȃ
問題

当せん番号をチェックする時というのは、一桁照合するごとに「このくじにはまだ当せん可能性が残っているか !?」で盛り上がれる。
だ か ら、 せ っ か く Web フ ォ ー ム を 作 るな ら Ajax 等 を 使 っ て 一 桁 入 力 す る ご と にチェックしに行くようにしてもらいたい。

解答
こんなこともあろうかと、先のレシピ２でに掲載した HTML テンプレート（リスト２）
は Ajax 仕様で作ってある。
さて、Ajax の場合を含め、サーバー側ス
クリプトの最初の仕事はブラウザからの CGI
変数を受け取ることだ。これは定番作業であるため、Tukubai にはこれをこなすコマンド“cgi-name” が用意されている。
受け取ったら照合処理を済ませ、結果をブラウザに返す。Ajax の場合は HTML を最初から作り直すのではなく、ブラウザ側で一部を書き換えてもらうための情報を渡すわけだ
が、Tukubai 流にこなすなら部分的な HTML
テキストを作って返す。

■ サンプルプログラム
レシピ２に掲載したテンプレート
HTML( リスト２) と右記の CGI スクリプト ( リスト４) の 2 つセットでこのレシピのサンプ
ルプログラムになっている。
CGI 変数で渡ってきたくじ番号の部分文字列
を元に、その時点で可能性のある「抽せん回＋
当せん番号」一覧や、最高金額を返している。

解説シ ェ ル ス ク リ プ ト や Tukubai に よ る CGI処理の特徴を 2 つ述べておきたい。

■ シェルスクリプトでの CGI 変数取得
CGI 変 数 は、GET メ ソ ッ ド 時 は 環 境 変 数“QUERY̲STRING” に、POST メソッド時は標
準入力に詰められて送られてくる。従ってシェルスクリプトで CGI 変数を取得するには、これらを見ればよいということになる。

リスト４．LOTTERY.AJAX : 当せん番号チェックプログラム（Ajax 版）
2! $"0cjo0ti
3! $4! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
5! $!MPUUFSZ/BKBY!൚̵ͭ๔࣢ΙͿΛ·΀ϋΐϋ,BkbyͼϋΗȜέͿȜΑ
6! $!ȪDHJ̞̠͂Οͻτ·Πςͬै଼̱Ȃ̷͈‫ͅئ‬෻౾̱̩̺̯̞̀ȫ7! $8! $!Xsjuufo!cz!O/Upvoblb)upvoblbAvtq.mbc/dpn*!0!Ebuf!;!8!Tfq/3123
9! $!Bssfohfe!cz!VTQ!NBHB[JOF)nbhAvbq.mbc/dpn*!0!Ebuf!;!9!Tfq/3123:! $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
21!
22! $!۪‫ޏ‬་ତ͈ΓΛΠ
23! fyqpsu!QBUI>%QBUI;0ipnf0VTFSOBNF0uvlvcbj0cjo
24! fyqpsu!MBOH>kb`KQ/VUG.9
Tukubai コマンドを /usr/bin や /usr/local/bin 等
25!
の標準的な場所に置いてない場合はここで設定
26! $!ΏͿσ་ତ͈ΓΛΠ
27! ipnfejs>%)qxe*<!ipnfejs>%|ipnfejs&0+~ しなければならない
理由は、Web サーバーが動作しているユーザー
28! iune>%ipnfejs0IUNM
ID は標準以外のパスが通っていないから
29! qpne>%ipnfejs0QPNQB
2:! ljoe`mjtu>%qpne0LJOE`MJTU
31! mpuufsz`ebu>%qpne0MPUUFSZ`EBU
一次ファイルのプレフィップスに自分のプロセ
32! unq>0unq0%%
ス ID を付けることで、不特定多数が同時に実行した場合に起こる競合を回避している
33!
34! $!ˬ˫˯˰ιΕΛΡ͈́ΟȜΗ͈਋̫৾ͤ
POST メソッドの場合、CGI 変数は標準入力
35! ee!ct>%DPOUFOU`MFOHUI!!!}から渡ってくる。そのため dd コマンドで取36! dhj.obnf!.e`!.j`!!!!!!!!?!%unq.obnf
得する。この時、CONTENT̲LENGTH を参照
37!
すると何バイト読み取ればよいかわかる
38! $!๔࣢ȂழȂ༯̩̲ਅ႒Ȃྴઠ͈৾ං
39! ovncfs>%)obnfsfbe!OVNCFS!%unq.obnf*
cgi-name コマンドを通したこのファイル
3:! hspvq>%)obnfsfbe!HSPVQ!%unq.obnf*には、ブラウザから渡ってきた CGI 変数が41! ljoe>%)obnfsfbe!LJOE!%unq.obnf*
URL エンコードを解かれ、変数名と値の 242!
列から成るテキスト表が格納される
43! $!IUUQΰΛΘȜ͈੄ႁ
44! dbu!==!IUUQ`IFBEFS
nameread コマンドを使うと、45! Dpoufou.uzqf;!ufyu0iunm
目的の CGI 変数が簡単に取り46!
出せる47! IUUQ`IFBEFS
48!
49! $!)b*‫͜ة‬஖̫ͭ́̈́ͦ͊‫੄͜ة‬ႁ̱̞̈́
4:! jg!\!%ovncfs!>!#`#!.b!%hspvq!>!#11#!!.b!%ljoe!>!#11#!^<!uifo
51!
52! !!tfe!.o!(0PVUQVU0-0PVUQVU0q(!%iune0MPUUFSZ/IUNM!}
53! !!tfe!(t0$$$BNPVOU$$$00h(!!!!!!!!!!!!!!!!!!!!!!!!}
54! !!gjmfibnf!.mGJMFIBNF!.!0efw0ovmm
55!
56! $!)c*‫̥ة‬஖̧̞ͭ́ͥ͂
57! fmtf
58!
59! !!\!%ovncfs!>!#`#!^!''!ovncfs>##
5:! !!\!%hspvq!>!#11#!^!''!hspvq>##
61! !!mpuufsz`obnf>%)obnfsfbe!%ljoe!%ljoe`mjtu*
62!
63! !!$>>>>>!๔࣢ΙͿΛ·!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
64! !!$!වႁ୶൮๔࣢͂൚̵ͭ‫ࠥ˴ئ‬๔࣢͈ζΛΙϋΈ࣐̠ͬȃ)๔࣢͉˒ࠥ*65! !!$.....
66! !!$!2;ಒ̵ͭ඾!3;༯̩̲ྴ!4;൝!5;ર߄!6;ழ!7;๔࣢
67! !!dbu!%mpuufsz`ebu!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
68! !!$!වႁ୶൮๔࣢͂൚̵ͭ๔࣢ͬ˒ࠥͅΩΟͻϋΈ̳ͥ!!!!!!!!!!!!!$
69! !!bxl!(|qsjou!%1-#YYYYYY#jou)%7*-(%ovncfs(#YYYYYY#~(!!!!!!!!!!!}
6:! !!bxl!(|%8>tvctus)%8-mfohui)%8*.6-7*<%9>tvctus)%9-2-7*<qsjou~(!}71! !!$!୶൮̥ࠥͣତলͬdifdl-༌༷̦˴̜̞͉ͥၰ༷̦൳̲໲ল̺͂PL!$
72! !!bxl!(|gps)j>2<j=>7<j,,*|di2>tvctus)%8-j-2*<di3>tvctus)%9-j-2*<
73! !!!!!!jg)")di2>>#Y#}}di3>>#Y#}}di2>>di3**|ofyu~~<qsjou~(!!!!!!!}
74! !!efmg!8!9!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
75! !!$>>>>>!ழΙͿΛ·!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$
76! !!$!‫ئ‬YΉΗ!̺͂˫˧!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$
77! !!$.....!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!$

次ページへ続く→

9

USPMAG201209̲yorinuki̲cs55.indb 9

2012/10/12 17:33:04

例えば Tukubai で POST メソッドから受け取るなら、リスト４の 24 行目のように、dd
コ マ ン ド か ら 環 境 変 数 CONTENT̲LENGTHの分だけデータを受け取り、cgi-name コマ
ンドに流す。これで、URL デコードと受け取った変数を名前と値から成るテキスト表ができるので、これを適宜処理すればよい。

■ Tukubai 流の Ajax データ生成
Ajax と い う と、 そ の 語 源 か ら ブ ラ ウ ザに は XML で 結 果 を 返 す こ と が 多 い。 だ がTukubai 流にやるならそうではなくて部分的な HTML テキストを作り、これを返す。これ
ならブラウザは、innerHTML メソッドを使って返された文字列を流し込むだけで済む。なるべくシェルスクリプトを使い、JavaScriptのコード量は抑えるという方針である。
リスト４の 90 行目〜を見てもらいたい。
元のテンプレート HTML から部分的に抜き出し、そこに結果をハメ込んでいる。こうして、部分的な HTML テキストを生成している。

78! !!$!2/YYழ!0!3/ழ‫ئ‬2ΉΗYழ!0!4/‫ڎ‬ழ‫ވ‬೒!0!5/‫ئ‬YΉΗ!!!!!!!!!!!$
79! !!MBOH>D!bxl!(|jg)%60_‫\ئ‬1.:^ΉΗ%0*|qsjou<!ofyu~!!!!!!!!!!!!!]
7:! !!$!වႁழ͂൚̵ͭழͬˎࠥͅΩΟͻϋΈ̳ͥ!!!!!!!!!!!!!!!!!!!!!$
81! !!!!!!fmtf!jg)%60‫ڎ‬ழ‫ވ‬೒0*|tus>#YY#~!!!!!!!!!!!!!!!!!!!!!!!!!]
82! !!!!!!fmtf!jg)%60ழ‫ئ‬2ΉΗ0*|tus>#Y#tvctus)%6-25-2*~!!!!!!!!!!]
83! !!!!!!fmtf!jg)%60\1.:^\1.:^ழ0*|tus>tvctus)%6-2-3*~<!!!!!!!!!!]
84! !!!!!!hsq>(%hspvq(#YY#<!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!]
85! !!$!୶൮̥ࠥͣତলͬdifdl-༌༷̦˴̜̞͉ͥၰ༷̦൳̲໲ল̺͂PL!$
86! !!!!!!gps)j>2<j=>3<j,,*|di2>tvctus)tus-j-2*<di3>tvctus)hsq-j-2*<
87! !!!!!!jg)")di2>>#Y#}}di3>>#Y#}}di2>>di3**|ofyu~~<qsjou~(!!!!!!!}
88! !!$>>>>>!༯̩̲ྴΙͿΛ·!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>$
89! !!bxl!(%30(%mpuufsz`obnf(0|qsjou~(!!!!!!!!!!!!!!!!?!%unq.sftvmu
8:!
91! !!$!>>>>>!൚̵ͭडࣞ߄‫ڣ‬τ΋ȜΡͬ‫>>>>>>>>>>>>>>>>>>>>>>>!ͥ͛ݥ‬92! !!hsfq!.F!#\1.:/^+‫׫ؙ‬#!%unq.sftvmu!}
93! !!tpsu!.os!.l5-5!!!!!!!!!!!!!!!!!!!!?!%unq.xpsl
94! !!hsfq!.F!#\1.:^+ྔ‫׫‬#!!%unq.sftvmu!}
95! !!tpsu!.os!.l5-5!!!!!!!!!!!!!!!!!!!??!%unq.xpsl
96! !!hsfq!.F!#\1.:^+‫׫‬#!!!!%unq.sftvmu!}
97! !!hsfq!.wF!#+ྔ‫׫‬#!!!!!!!!!!!!!!!!!!}
リスト３の "OUTPUT" で98! !!tpsu!.os!.l5-5!!!!!!!!!!!!!!!!!!!??!%unq.xpsl
囲まれた区間（124~135 行目）
99!
のみを取り出す
9:! !!$>>>>>!έ͹ͼσΧι!>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>:1! !!tfe!.o!(0PVUQVU0-0PVUQVU0q(!%iune0MPUUFSZ/IUNM!!!!!!!!!!!!!!!}:2! !!tfe!(t0$$$BNPVOU$$$0(%)ifbe!.2!%unq.xpsl!}!tfmg!5*(0h(!!!!!!!}:3! !!gjmfibnf!.mGJMFIBNF!.!%unq.sftvmu
リスト３の 131 行目にある ###AMOUNT### を:4!
最大賞金額に置換する:5! gj:6!
リスト３の 126 行目（"FILEHAME" のある行）を:7! sn!.g!%unq.+
可能性のある当せん番号一覧に置換する:8! fyju!1̤̫͘ ༯ ̩ ̲ ൚ ̵ ͭ Ι Ϳ Λ · ͺ ί ς ͬ ঀ ̽ ̀ ͙ ͥȃ Ȫ Ο ί υ ͼ ι ϋ Π ȫ
せっかく作ったのだから実際に動かしてみよう。まず設置手順を記す。

設置（デプロイ）手順■ １．Tukubai インストール■ ３．リスト３, ４にパスを設定
両リストの冒頭に環境変数 PATH を設定し打ち込みを進めるたび、絞り込まれ、だんている箇所がある。Tukubai を root で入れだんと賞金額は減っていくことだろう。でも、ていない場合は、ここに Tukubai コマンド

運よく 2 億円のまま組番号まで入れ終えたとへのパスを記述しなければならない。

しようじゃないか。そうしたら最後に「とこ■ ４．cron 設定

ろでそのくじ、いつ抽せんされたくじ？」とこ れ 無 し に は 始 ま ら な い。root 権 限 の

LOTTERY.DB を cron 等で定期的実行させ与えられていないレンタルサーバーにイるようにする。或いは定期的に手動実行する。

ン ス ト ー ル す る 場 合 は、make install 時 に■ ５．Web サーバーの設定

LOCALBASE 変数の設定が必要になるだろう。

表示されていく。

手順２で置いた CGI と Ajax ファイルが実

手順は 3 ページを参照のこと。

行できるよう、設定ファイル（.htaccess や■ ２．リスト１〜４の配置

httpd.conf 等）を設定する。

いう質問に答えるべく、抽せん回を選ぼう。
その結果、表示が消えたアナタ！おめでとう、ハズレだ！でも「ちくしょー！この回にこのくじを買っていれば億万長者だったのにー！」という悔しさを自慢できるぞ。
これが、このアプリの正しい使い方なのだ。

下記の位置関係でファイルを置く。HTML
ファイル以外は全て実行権限を付けておく。

お待ちかねの「あそびかた」

尚、ファイルは全部大文字にする。これはユニケージ開発手法における作法である。
/0!!DHJ0!!!MPUUFSZ/DHJ!!!)৘࣐ࡀࡠັ‫*ح‬!!!!!!!!!!!MPUUFSBZ/BKBY!)৘࣐ࡀࡠັ‫*ح‬

さあ、ジャンボ宝くじを買ってきて抽せん日が過ぎたらこのソフトでチェックしよう！
ブラウザで LOTTERY.CGI を開いたらくじ!!!!IUNM0!!MPUUFSSZ/IUNM

番号→組番号と、まぁあせらず入力していっ!!!!QPNQB0て欲しい。すると、可能性のある当せん番号!!!!TIFMM0!MPUUFSZ/EC!!!!)৘࣐ࡀࡠັ‫*ح‬と貰える可能性のある最高賞金額が画面下に̹̽͞Ȃ ĳ‫̲ͭ͝׫ؙ‬ȊȊġȤȤͭȉ‫̦ؠ‬ฃ̹͈͉̽΍ζȜΐλϋδ̺̦̈́ͭȤȤȂ̭ȤȤ̭͉ͦȂ ͜ ̱ ̥ ̱ ̀ Ρδϋ ̈́ ͭ ̲ ͝

10 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 10

2012/10/12 17:33:05

笑顔が素敵な恭子さん。

Linux
ࡔ૗

๼੫଎‫ۻ‬

可愛らしい上、とても勉強熱心な方だと聞いて、取材に伺いました。
それもそのはず、西本さんのお仕事は Linux 〜 AIX のサポート。
生半可な知識量では毎日の業務をこなせません。
話を聞いていると、彼女の瞳に惹きこまれます。
ひとつひとつ丁寧に仕事をしているのだろうな、と思わせるような真剣な眼差しです。その反面、ふと彼女の手を見てみると素敵なネイルアートが。
バリバリ障害対応している傍ら、女の子らしい色使いのファッションと愛嬌

第５回
西本恭子さ
西本恭子さんのある笑顔で職場も同時に癒しているのでしょう。

Proﬁle西本恭子さん

TwitterID：kyoko̲0310
Q）Linux との出会いを教えてください。
A）会社に入って配属された部署が、Linux（RedHat）のサポートの部隊でした。
プログラミングですが、高専で C 言語や VB などの基礎を勉強しました。
しかし、学業でプログラミングを学んでいたときは、自分が触っていたパソコンに入っている OS が Linux だとか意識した記
憶がないくらい、初心者だったと思います。
どの OS の環境でやっているかもわかっていなかったんです。今考えると、一方的に学ぶような場所では、技術に興味が沸かなかったんですよね。「勉強したい」と思い始めたのは仕事で問題を解決しなければならない状況になってからです。
Q）実践でたくさん学ばれたのですね。Linux の好きなところは？
A）オープンソースなところ。（笑）商用 Unix と比べると、ネットにある情報量が圧倒的に多いんです。
インターネットで調査できるのは大きな魅力です。あと、自分でソースコードを見て調べられる。CUI なところも好きです。
トラブルがあったとき、Windows では自分で解決するのが難しくて・・・。Linux は公開されているのでサポートしやすい！
Windows のトラブルシューティングは業務外なので良かったです。ネットで解決情報、なかなか探せないですからね。
Q）マイクロソフト社にはまだお世話になっていない西本さん、これから Linux とどうやって付き合っていきますか？
A）仕事や勉強の基礎となっているので、このまま続けると思います。
入社して７年目の今は、IBM の商用 Unix である「AIX」のサポートのお仕事をしています。AIX で問題が起きた時に Linux でも起きるか調べますね。根本的なところは一緒なので、Linux が解決の糸口となることがあります。そう思うと、Linux を社会人になってから学んだ経験が私の基礎になっていますね。
サポート業務のエンジニアは AIX と Linux を出来るように、会社が検定試験受験などを色々と支援してくれます。勉強しやす
い環境で会社に感謝しています。
Q）勉強を応援してくれる会社は心強いですね。先輩と後輩の関係はどうやって保っていますか？
A）悩まずコミュニケーションしています、おしゃべりして問題解決。（笑）
自分もよくしゃべるほうですが、先輩もよくしゃべるので、よく雑談していますよ。
上下関係をあまり気にせず、積極的にご飯食べにいったりしていますね。とくに親会社の先輩にはサポート対応のエスカレーション先（※）ということもあっていろいろ教えてもらえるので、よく飲みにいったりしています。頻繁にコミュニケーション取ることで、いろいろと助けてもらうんです。（満面の笑顔、そんな印象でした）※ 簡単に解決できない問題を、一次受けから二次受けへというように、エスカレータ形式で問題分析・解決部署をレベルアップさせること。

きらりん☆

高専出身の恭子さん。もともと理系で容姿に恵まれ多彩だけれど勉強に対する努力は忘れない。
そんな彼女のつぶやきは「先輩に助けられた」「○ー○○がやさしい」とか、感謝の言葉が多いような気がします。ハートが良い上、こんな素敵な笑顔がかわいらしいのだから、周りの人達は自然と彼女に手を差し伸べるのだろうな、とちょっと年増なおねえさん編集担当は思うわけです。よしよし。

本コーナーでは自薦・他薦を問わず（そして、Linux に限らず？）Tech 好きな女子を大募集しています。スーパーエンジニアだけではなく、これから Linux を勉強しようとしている
向学心のある女性でも大歓迎です。本誌を通してエンジニア友達作り、恭子さんのように交流の幅を広げてみませんか？

詳しくは mag@usp-lab.com

までご連絡ください☆

23

USPMAG201209̲yorinuki̲cs55.indb 23

2012/10/12 17:33:06

LL DECADEͼαϋΠτεȜΠ2012 ා 8 ࠮ 4 ඾ɗ߆जήυΛ΍θ

Perl、PHP、Python、Ruby、JavaScript――。
テキスト処理や Web アプリケーション開発などに不可欠な、コンパイル要らずの軽量言語、Lightweight Language。
近年は、業務システム領域において C や Java に劣らぬ存在感を示すほか、また
モバイル系のゲーム、家電などの組み込みシステムから、かつてスパコンで行われていたようなシミュレーション、科学技術計算領域まで、その用途に拡がりを見せています。LL を支持するプログラマもこの 10 年で増えました。
こうした LL の盛り上げに一役買っているのが、今年で開催 10 年目を迎える
Lightweight Language イベント。
ちなみに、LL の源流を遡るとシェルにぶつかる、ということで、本誌もこのイベントを応援しています。2012 年 8 月 4 日、銀座ブロッサムホール（東京）において開催された第 10 回記念の LL イベントでは、LL 魂を持つ各言語界の雄、総勢 20 名以上が登壇し、熱のこもったトークを繰り広げました。一日の様子を振り返ります。

ؕᛦᜒ๫
言語を取り巻くエコシステムに興味がある。互いに刺激し、足りないところを補っている関係が面白いからインスパイアされたもの。その Plack がい具合に食べ頃になっている（笑）。早過ぎ

さらに、言語の種類や海を越えて、様々なプ

るよりちょっと遅れて参加するくらいでちょ

ログラマにフォークされています。「例えば、うどいい。ただし、他の言語のコードをフォー

ケーションフレームワーク

Rails4.0 のクするときは、“ コピペのミス ” に注意」とと Web サーバーをつなぐ

開発をして

自らの失敗談を語り、会場の笑いを誘う一幕

インターフェース PSGI の仕様作成、それを

いる人たち

も。

実装した Plack の開発で知られる宮川さん。

を 見 る と、

Perl を中心に多くの言語にアンテナを張り続

かつて僕らけていますが、この数年、仕事や趣味で主にが歩いた道 "You don't need someone's permission

宮川達彦さん乱 立 す る Web ア プ リ

ところで、いろいろな言語に関わることで視野が広がったという宮川さん。
to write code" と宮川さん

Python、最近は Ruby を使う機会が多いそう

を同じよう

です。
「Ruby はオブジェクト指向が付け足しに辿っている既視感を覚えます」。

「カンファレンスに参加すると、肩書きなどではなく、『コアのあのコードを書いたミ
ヤガワ』という感じで声をかけてくれる。プではなく、綺麗にまとめられている。手錠をCPAN のようなリポジトリは誰か一人で完ログラマにとってコードは、自分自身。リポ

はめられていない感じでプログラミングでき結することはありえません。
「これ、スゲー

ジトリはその時々に自分が考えていたことやるのがいい」と宮川さん。
「ただし、僕はプな」と思うコードを互いにどんどんフォーク

興味を持っていたことを示すタイムライン

ログラミン

し、
その過程で言語が互いに洗練されていく。

のようなもの。転職した際も、CPAN の URL

グ言語そのそれこそがオープンソースの醍醐味、と語るが履歴書代わりになった」と打ち明けます。

ものが好き

宮川さん。
「その意味で、GitHub はとてもア

来場者に「LL イベントのような、異なるというよりナーキー。プログラミングを民主化した」と

言語間のプ

も、各言語

そのインパクトの大きさを指摘します。

ログラマの「言語のコミュニティはいろんな仲間が参

交流には積

エコシステムのほうに興味があります。相補

加する鍋パーティと似ています。あまり早く極的に参加的に発展する関係性が面白い」。

着いてもすぐ食べられない。手伝わされるこされることともある。ところが少し遅れていくと、うまをおすすめ プログラマにとってコードは名刺代わりが織りなす

名前のつけ方に個性が出る

PSGI や Plack の 着 想 も、Python や Ruby

24 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 24

2012/10/12 17:33:06

LL DECADE ͼαϋΠτεȜΠします」と呼びかけた宮川さん。いま注目していることは何か、という講演後の公開質問に「僕は面白い仕事をしたい。LL はその可能性を拡げてくれます」と答えました。

Language Update Decade
Perl、PHP、Python、そして Ruby という 4 つの LL における近年の状況を、各言語界を代表する強者が語る
セッション。今回の顔触れと席順は 2003 年に開催された LL Saturday の再現です。司会も当時と同じ法林さん。4 大言語のエキスパートが語る、この 10 年間の変化、そして未来の姿とは。

2GTN

関する Perl のコンセプトは 10 年後もおそら

どれだけ仕様が変わるだろうとむやみに心配く引き継がれているでしょう。Perl プログラ

せずとも、プログラムの開発に専念すること

小飼弾さん

ができるはずです。

Perl はこの十年で、新機ところで、LL 全体を見渡せば、「サーバー

能がいろいろと追加されてサイドでも動く JavaScript と、その他大勢」

います。しかし、これまで書いたコードを動という観があります。しかし、JS には CPAN

かせるように気を遣っているのが Perl のよに相当するリポジトリがない。お世辞にもいところ。当たり前に聞こえるかもしれないですが、他の LL では必ずしも、過去のコー

シェルフレンドリーとは言い難い。Perl はや機能が拡充する Perl5 を中心に解説

はりよい選択肢ではないかと思います。

ドがそのまま動くとは限りません。互換性に

マは他の言語を扱うのと違い、これから先、

2*2誕生から 10 周年を迎え、それを機に、東京

作者自身が、PHP は歯ブラシのようなもの、だけでなく、関西、北海道でも PHP カンファと評しています。毎日、当たり前に動いて、

廣川類さん

レンスが開催され、賑わいを見せました。

身近で役立つ自然な言語、それが PHP です。

PHP が ブ レ ー ク し た の

この 10 年を振り返ると色々ありましたが、は、バージョン 4 からです。

PHP 作者であるラスマス自身によるバージョ2006 年頃でも半数以上のユーザーが、PHP4.

ン 6 のキャンセル、という出来事が心に残っx を使い続けていました。2004 年 7 月に発ています。言語の開発というのは一筋縄では表されたバージョン 5 からは、SOAP、Web

いかないなと思いました。ところで、プログ

サービス、DB の強化など、オブジェクト指

ラミング言語には色々ありますが、大事な向の深化が図られました。2005 年に PHP がのは、きちんと使いこなせることです。PHP

2[VJQP
柴田淳さん
今 か ら 10 年 前、 日 本 で受け継がれる PHP 作者のコンセプトが実装されています。しかし、利用者の層外なことに、ノンプログラマにも Python がは著しく拡大しました。Linux のインストー

利用されています。安価な PC サーバーを使っ

ラー、デスクトップは Python で作られていて並列計算をこなす科学技術計算用途もそのます。DropBox や YouTube もそうです。意ひとつ。日本の気象庁でも使われています。

は Python を 使 っ て い る 人

Python が他の LL と一線を画す点は、ライブが少なく、プログラマの間では珍獣扱いでし

ラリが充実していること、そして言語の仕組た。ただ欧米では注目度が高く、Google でみや使い方がシンプルであること。Python

使われていることも話題になりました。とはプログラマはこの先 10 年も食べていけるの

いえ、この 10 年、Python 自体はあまり変ではないかと思っています。

わっていません。2003 年にリリースされたバージョンにはすでに今見ても遜色ない機能

用途が拡がる Python

25

USPMAG201209̲yorinuki̲cs55.indb 25

2012/10/12 17:33:10

4WD[

わったのは、2004 年に発表された Ruby on

イムで給料をもらえる Ruby プログラマが増

Rails からです。当時、Java と Ruby のどちえました。なぜ、Rails や Ruby が広まった

まつもとゆきひろさん

か。うまく言葉にしがたいのですが、使っていて気持ちがいいからだと思います。一般2003 年 の LL Saturday にに LL は道具もしくは黒子で表には出てきま

出させてもらった時、Ruby のバージョンはせん。しかし、Ruby ユーザーは他の LL ユー

1.8 でした。2007 年に、コアを大幅に置き換

ザーにはないほど言語に対する愛情を示しまえた Ruby1.9 を出しましたが、いまだに多す。色々なコミュニティのシンボルになってくのプログラマが、1.8 を使っています。当まもなく誕生から 20 年いる。まもなく Ruby も誕生から 20 年です。

時は、Perl や PHP など「P」で始まる言語がらの生産性が高いか、といった議論もありそれを機に、Ruby2.0 を出そうかなと思って優勢で、Ruby は肩身が狭かった。流れが変ました。それから 10 年近くが経ち、フルタいます。

ȗȭǰȩȟȳǰᚕᛖϼྸኒǛᐯ˺ƠƯЎƔƬƨƜƱ
next Perl5 プログラミング言語 Tora 開発者の Tokuhiro Matsuno さん、「Perl6 の実装にはまだコレというものがない。処理も遅い。とはいえ Perl5 の使い勝手はシンプルではない。自分なりに理想を追求して、Perl5 から 0.5 くらいアップした言語を作った。こうした取り組み
を通じて Perl5 や Perl6 の開発に貢献できれば」と発言。一方、@Constellation さんは、ECMA
Script の次期バージョン（ES.next）について言及。「ES.next エンジンは仕様に忠実な実装と、処理の高速化を目指しています。ECMA Scriptの未来は明るい！」と語り、JSX を開発した @kazuho さんは、「モバイル向けのゲームの開発にあたって高速化、デバッグ品質の向上、ソー

スコードの見やすさが求められている。JSX ではより速く安全で簡単な JavaScript を目標に掲
げ、今後はライブラリの拡充を図りたい」と展望を述べました。
組み込み向けの mRuby を開発中のまつもと
ゆきひろさんは、「cRuby ではできない領域に拡げていきたい。太陽光発電の管理システム
や、消費電力の見える VPN ルーターなどのア
イデアや実装例も少しずつ現れている。正式には 2013 年の発表をご期待ください」と意気込みを披露しました。
Perl6 の仕様と動向について解説を行った司会の竹迫良範さんには来場者から「自身で言語を開発しないの？」という質問が飛ぶワンシー
ンもありました。

̸ƨƪƷዒዓႎ hogehoge Ƹ‫ڼ‬ǇƬƨƹƔǓƩᲛটᚃ˟ȬȝȸȈ

アプリケーションの品質改善や納期短縮に向けて各社が取り組む継続的インテグレーション（CI）の現状とは。

LL イベント本編の勢いそのままに始まった懇親会。ここではスポンサー企業などに

Jenkins をはじめとする各種 CI ツールを活用したさまざ
まなテスト事例が披露されました。

よる Lightning Talks が行われました！

「出版社のシステムでビルドされた原稿をテストする際に Jenkins を活用」cactusman さん（BeProud.inc、
日本 Jenkins ユーザ会）、「LL はダックタイピングを活用することで、いろ
いろなモックを作れる」太田健一郎
さん（TDD 研究会、
Android テ ス ト部）、「JsTestDriverを使い、各種実ブ
ラウザにおける
JS テ ス ト を 効 率化している」@kyo̲ago さん（KAYAC）、「社内を巻き込
む工夫を行ったと
こ ろ、 テ ス ト コ ー
ドを書かないメン
バーが激減した」
高 倉 利 明 @TrinityT
さ ん（ 株 式 会 社 ア
ピリッツ）
、
「テス
ト に 限 ら ず、 日 々のタスクをスクリ
プトで自動化するのが重要」きょんさん、「許可を取らずに始め、成果を出してから上司に見せる、そして楽し
むことが CI 浸透のコツ」山城裕 @yamashiro さん。
皆さん、いろんな工夫を重ねているんですね！

どろくさい言語と LL のイイトコ取りをしたという東北大学電子通信研究所が、開発中の SML# について講演。
PHP カンファレンスは、9 月 15 日に大田区産業プラザで開催。9 月 14~16 日は、札幌 Ruby 会議。9 月は LL
絡みのイベントが目白押し。

LT のトリを務めたのは、USP 友の会。Tukubai ハン
ズオン、bash 勉強会、IT パパママ部、ペアプロ合コンなどの企画で積極的に来場者を勧誘。

26 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 26

2012/10/12 17:33:13

LL DECADE ͼαϋΠτεȜΠLightning Talks ᳸  Ў᧓ɟஜѨ᝟᳸
ゆーすけべーさん

角谷信太郎さん川崎有亮さん

人物写真と、宮川達
彦さんの手にする「紫色の何か」を合成して表示する Perl プログラム「miyagawanaize」そのバージョン 2 が公開。0.5 秒おきに写真を読み込み、アニメーション化。その奇妙な動きに会場は大爆笑。

日本 Ruby の会で理事を務める角谷さん。
「 僕 は Geek にはなれない。でも、そうした人を集めてイベントを 10
年やってきました。チャレンジし続けるには、いつも一歩上のレベルに噛みつくぐらいがちょうどいいと思います」と話しました。

シリコンバレーではプログラマの人件費が高騰し、クラウド
ソーシングが流行。この時代を生き抜くために必要なのは、流暢な英語？ 基盤的なソフトを作る技術？。
いや「紫色の何か」ということで、画面の青系色を緩和する目に優しいプログラムを公開。

庄司嘉織さん

法林浩之さんLLNOC チーム

ブラウザのリロード
はムダ、ということで処理を自動化する
スクリプトを CoﬀeeScript で自作した庄司さん。最後は、山城裕 @yamashiro さんの彼女募集。そっちが本
題か？

スピーカーとして初めて参戦の法林
さ ん。 本 家 米 国 の
LL は 2 年で終了。なぜ、日本では LL が 10 年続いたのか。
イベント名を工夫し、リングの上でやったり、トーナ
メントをやったり。これからの 10 年にも大いに期待しています。

空気や水のように使え る、 無 線 LAN 環
境を会場内に構築してくれたネットワー
ク部隊。今回も約 300 人の来場者が利用したそうです。
これまでのイベントで蓄積したノウハウやエピソードを報告。

yuroyoro さん

ただただしさん

高橋征義さん株式会社スケール
アウトで広告配信を手がけているyuroyoro さんは、音声にフォーカスした話。最後は、自作の音声認識ツールに「バルス！」と呼びかけ、PCをシャットダウン。見事時間内に講演を終了。

Ruby で ブ ロ グ ツ ー
ル tDiary を 開 発 して き た た だ さ ん。
「Ruby のバージョンを意識することなく使える。初期のユーザーを置いてけぼりにせず、新機能を追加してきた。25 年使えるものにしたいから後 14 年は続ける」と宣言。

LL に は、 初 期 の 頃からスタッフとして関わり、その足取りを見てきた高橋さん。「学校のような場所。イベント
慣れしていなくても足を運びやすい。プログラマならば言語を問わず大歓迎」。この日は、自身が会長を務める日本 Ruby の会についてもアピール。

竹迫良範さん
司会を進める郷
田まり子さんと、
ドラ娘のショウ
ジユウコさん
最後の LT を飾ったのは竹迫さん。サーバーサイド JS が注目される中で、JIT コンパイラの脆弱性を指摘。JITSpray 攻撃を実演すると、悪意あるコードがおなじみの爆弾アプリ（無料）を起動し、会場は大爆笑。

もはや LL の風物詩となったドラの音が会場いっぱいに鳴り
響けば拍手喝采！
ロビーで展示した書籍見本やグッズがあたる抽選会のボール投げLL イベントの盛り上がりは、業界における LL の浸透と軌を一にします。
まつもとゆきひろさんが指摘されていました。「どの言語の技術がいいとか悪いという話ではなく、言語を使って何かを変えていこうと、人々をドライブする熱意こそが、世界を動かすのではないか」。
大切なのは、言語の壁を越えた、参加者同士の交流。互いの言語をリスペクトし、刺激し合うこと。LL の世界はグローバルです。
LL イベント、次の 10 年が始まります。

27

USPMAG201209̲yorinuki̲cs55.indb 27

2012/10/12 17:33:15

特集２

ΟȜσ Ȇ ΘΧΞͻঙͅଆ̩ȂΟܿ੅৪ഓ‫ڠ‬私たちは単なる
消費者（Consumer）ではない。
誰もが世界を変える力を持った創造者（Maker）だ。
「Hacks」や「クックブック」シリーズで知られるオラ
イリー・メディア（OʼReilly Media, Inc）創設者の一人、
デール・ダハティ氏が、2012 年 6 月、来日した。
目的は日本の Maker が繰り広げるムーブメントの視察と、Maker 達との交流だ。
「Maker（メイカー）」とは、デール氏曰く、「文化の創造者」。道具を駆使し、世界を探索（ハッキング）する人。単なる消費者ではなく、作る喜びを知っている人。
世の中を楽しませ、社会を変える人。
「皆さん一人ひとりが Maker です」とデール氏は語る。
その言葉に込めたデール氏の思い。そして、ソフトウェ
アエンジニアを含めたこれからの時代を担う Maker に必要なものとは何か。
（聞き手：松浦智之、まとめ：柏崎吉一）――プログラミングやシステム運用管理などを教えていただけますか。

した。私たちが UNIX に注目したのは、これで UNIX を学ぶ人は誰しも一度、オライリー・

もともと、私とティムは、文学少年でした。

を使えば出版社を作れると考えたからです。

メディアの本を手にしたことがあると思いま

いつか自分たちの手で出版社を作りたいといUNIX 上で、書籍や雑誌における文字組みやす。その一つ、「sed&awk プログラミング」

う夢を抱いていたのです。

図版のレイアウトデザインを行い、誌面の入の著者であるデールさんが、ティム・オライ

テクニカルライターとして仕事をこなす

稿データを作る。後は、レーザープリンターリー氏とともに発行人を務める、
オライリー・

ようになっていた 80 年代、私たちの業界になどで印刷し、製本すれば自分たちの手で本メディアを立ち上げた経緯や書籍執筆の動機

もコンピュータ革命の波が押し寄せていまや雑誌を作れると考えました。

28 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 28

2012/10/12 17:33:18

特集 2

ΟȜσ Ȇ ΘΧΞͻঙͅଆ̩Ȃ ܿ੅৪ഓ‫ڠ‬Ο事）。「Make」 で 取 り 上 げ て い る の は、 世が契機となって米国の Maker を動かす。自そうです。ただし、私たちはエンジニアの中をハッキングする人々です。Maker とら考える個人がネットワークでつながり、作ではなく、テクニカルライターなのでコン

Hacker は ほ と ん ど 同 じ 意 味 だ と 私 は 思 いり方などの情報をシェアし、コラボレーショ

ピュータの知識はほとんど持ち合わせていまます。Maker のほうがその指し示す範囲がンする。新しいものづくりの形態です。ガイ

せんでした。しかし、勉強すれば何とかなる、

Hacker より、広いだけです。

ガーカウンターはあくまで一例ですが、Web

自分たちもきっと使いこなせると楽観的に考――「Make」初の日本版（2006 年 8 月発行）

上に発表されたある作品がボーダレスに次々えていました。そして勉強の過程で身に付けでは、「ビデオデッキを改造して猫の給餌機と他の Maker を刺激し、Maker の一大ムーたことを逐一記録しておき、それをもとにを作る」という記事があり、実際に動く作品

ブメントとして世界各地に波及していくこと

テーマを絞った UNIX ユーザー向けのハンドのメカニズムなどを紹介していますね。

があります。

――DTP の草分けだったのですね。

ブックを作成しよう。最初はそんなノリだっ取り上げる作品には実用的なものもありまそうした Maker 達が年に一度、一堂に会すが、一見しただけで、何のために使うものする場があります。Maker Faire です（P.39「なければ作る」。これはオライリーの創かよく分からないものも多々あります。とは囲み記事）。

業時からの企業精神です。取扱説明書やシェ

いえ世相を見事に反映し、風刺が利いている――どんなイベントなのでしょうか。

ルのマニュアルと首っ引きになって、プログ

ものが少なくありません。儲けや名誉のため

ラムをいくつも作りました。そんな風にしてではなく、内から込み上げてくる創造したい

原稿をまとめ、刷り上がった本一冊の値段はという欲求に突き動かされてできあがった作

たしか 5 ドルでした。ニューヨークで開催

品がほとんどだと思います。

たのです。

Maker 達のお祭りです。作品を会場一杯に展示します。
ち な み に 米 国 に は、Renaissance Faire という、ヨーロッパの中世時代の人々の格好をされた UNIX EXPO でそれを完売し、手にし最近、私が興味を持った作品は、米国人がして楽しむコスプレ・イベントがあるのです

たお金で、ティムと私は、ブロードウェイで自作したガイガーカウンターです。昨年の福が、Maker Faire もそれと同じで、まったく観劇した思い出があります。

島第一原子力発電所の事故をきっかけに、自堅苦しいイベントではありません。子供も大アマチュアたちの創造性に強く共感

分の身の回りにあるものを組み合わせて自作人も楽しめます。ぜひ一度足を運んでみてくしたと聞いています。私がこの作品に興味をださい。人生観が変わりますよ。

――「作る」ということに興味を持ったのは持った理由は、Maker 同士が築いた、海を超

今年 5 月にベイエリアで開催された 7 回

その時からですか。

えたネットワークにあります。日本の出来事

目 の Maker Faire で は、2 日 間 で の べ 11 万

はっきりいつ、とは言えませんが、私は次第に、本の制作に限らず、『“ 何かを作る ” という行為の楽しさ・充足感は、特別な人達だ
けが独り占めするような感情であってはならない』と思うようになりました。作り手は特Maker Faire〜 Maker 達の作品が一堂に会するお祭り〜
今年で 7 年目を迎える Maker Faire は、これまでサンフランシスコ・ベイエリアを中心に、デトロイト、
ニューヨークなどでも開催されてきた。これと並行して日本では 2012 年 11 月に、
第 8 回目となる「Maker
Faire Tokyo」が開催される予定（第 1 〜 7 回までは「Maker：Tokyo Meeting」という呼称だった）。米国
で始まった Maker Faire のムーブメントは、日本を含む世界 60 カ所に飛び火している。

権的な存在ではない。作る喜びは誰しも味わえる。私たち一人ひとりが Maker であると思うに至ったのです。
「ある人が Maker かどうか」を見分ける
簡単な方法があります。その人の目の輝きです。何かの製作に没頭している時、人はたいてい生き生きしています。ではなぜ、一心不乱に作業しているのか。
回りの人に見せたい、
笑わせてみたい。心の中から湧き上がってくる、抗しがたい衝動のようなものがモチベーションだと思います。私たちがオライリー・
メディアを立ち上げた時もそんな感じでした。
そういった Maker たちを数多く取材しているうちに、オライリー・メディアは「Make」という雑誌を生み出しました（P.40 囲み記（写真は Maker Faire BayArea2012 のハイライトから抜粋
http://makerfaire.com/bayarea/2012/index.html）

29

USPMAG201209̲yorinuki̲cs55.indb 29

2012/10/12 17:33:21

Makeだったと思います。

〜ジャンル不問の DIY 雑誌〜
英語版は 2005 年から通巻 31 号が発売。それを翻訳した日本版は 2006 年 8 月の創刊から 2011 年 4 月まで通算 11 号が発売されている。

活動を行っていました。かつては専門家し体は木製でした。よく見ると、欠けているキー

か、あるいはお金持ちにしか使えなかった技があります。完璧ではない。しかし作り手術が、ほぼ誰でも使える。技術の民主化が起の情熱がひしひしと伝わる一品です。Maker

きているのです。道具へのアクセス権についFaire の会場では、この “Apple Ⅰ ” を彷彿さては、プロとアマの差がほとんどありませ

せる作品をよく目にします。外観はエレガンん。学校や家の中が小さな工場になりえます。

トではないけれども、内に秘めた可能性を感

Maker space（P.41 囲み記事）というのは、じさせる。Maker Faire に出展されている今

そうした道具や材料を一式揃えて、子供たち

日の作品が少しずつ改良され、30 年後にはが遊べるようにした工房です。

“Apple Ⅰ ” から “iPad” に至るような大変身を遂げているかもしれません。

専門業者に頼らずとも、個人の力でいつの間にかこんなものまで作れる時代になったのか、ということを見せつけている雑誌です。本物の宇宙へ送る人工ツールをごく当たり前に使って研究や製作

彼らが最初につくった Apple Ⅰ。その筐でも、仮に道具が手に入らない場合でも、悲観する必要はありません。ないものは工夫

そういう作品を見ながら、「一体どこからして編み出せばいいのです。それがコストのこういうアイデアが湧いてくるのか」と、作削減につながることもあります。こういう発

り手の思いを想像するのはとても楽しいもの

想の仕方こそが、Maker 精神です。大事なのです。

は、ツールセットではなく、マインドセット。

日本人も参加しています。北村満さんが展

ツールでもなんでも作ろうという情熱と遊び示された自作のプラネタリウムは感動しまし心があれば、たいていの困難を乗り越えられた。私がドームの中に入ると、映画「スターます。

衛星まで作ってやがります。国家が莫大な予算を投ウォーズ」の何シーンかを影絵で即興表現し

DIY（Do It Yourself）の意味するのは、決じて作ってるのを尻目にですよ！今や必要なのは金てくれたのです。Maker Faire は、アートとして孤独、独りぼっち、ではありません。最技術の橋渡しをするクロスカルチャーの場だ

初はたとえ一人で作ったとしても、成果を他と思いました。

の人に見てもらう。するとアイデアを付加しツールセットより大事なのはマインドセットてくれたり、改良してくれたりする仲間がだじゃない。才能を無駄遣いして神と呼ばれる存在になってやるという情熱くらいなものですよ。（松浦）人が集まりました。すごい熱気でした。
「この世界は、僕たちとさほど能力的に変わらない人たちの手で作られている」。こう――7 年前の Maker Fair と比べて、何か大言ったのは、スティーブ・ジョブズです。コ

きく変化した点はありますか。

んだん増えていきます。
オープンソースソフトウェアは、そのようにしてコミュニティの中で日々進化していま

ンピュータは世界を変える、彼はそう確信しアイデアを形にするための「道具」がいますよね。同じように、3D プリンターや卓上て、スティーブ・ウォズニアックと同様に大ほど入手しやすい時代は過去になかったで工作機械といったハードウェアも日々改良が学を中退し、マニアが集まるカリフォルニア

しょうね。PC にしてもそうです。立体加工

重ねられているのです。

のホームブリュー・コンピュータ・クラブにを行うためのレーザーカッター、小型の 3D

顔を出すようになります。そこでコンピュー

プリンターしかり。

改良を重ねて世の中が変わる

タ開発に残りの一生を捧げると誓った。そ先日、ジョージア工科大学の技術系研究室――デールさんは、2011 年にホワイトハウのクラブはきっと Maker Faire のようなものを訪ねましたが、やはり学生たちがこれらのスから「Champion of Change（変革の旗手）」という表彰を受けましたね。
実のところ私は、官僚や教育関係者などのおエラい人々から褒められることにあまり関

デール・ダハティ（Dale Dougherty）

心がないのです。そうした多くの大人は、内●オライリー・メディア創業者の的衝動に駆られて世の中を探索する Maker

一人。
「sed&awk」の執筆者。雑誌「Make」の編集者・発行人。現在、オ ラ イ リ ー・ メ デ ィ ア の Maker
Media 部 門 を 率 い る 統 括 マ ネ ー
ジャーである。1993 年に、世界初となる商用 Web サイトを立ち上げた人物としても知られる（同サイトは 1995 年に AOL に売却）。

ではなく、消費者あるいは何かの目的のために道具を使う利用者に留まっていることが多いからです。
時々、大学などに招かれて講義することがありますが、そこで私にとって本当に興味あるのは、学生達の目の輝きです。学生と話を

30 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 30

2012/10/12 17:33:22

特集 2

ΟȜσ Ȇ ΘΧΞͻঙͅଆ̩Ȃ ܿ੅৪ഓ‫ڠ‬Οます。

していると、思いもよらない奇抜なアイデア

日本にもすごい技術を持ったエキスパートが飛び出してきます。失敗を恐れずにチャレがたくさんいますね。しかし、そういう方々―― デ ー ル さ ん の い う Maker 精 神 を USP

ンジする姿勢を見るのが私は大好きなのでの多くはホームページどころかメールアドレ

MAMGZINE も見習って、さらに今後も活動す。

スさえ持っていない。その人の腕前を必要しの輪を拡げていきたいと思います。今日は本当に有難うございました。

そもそもこの社会全体が、発明や改良の連ているのに、すぐに見つけることができませ続によって作られています。最初からこのん。そこで、こうした能力を持った人がどこように出来上がっているわけではありませにいるかすぐに探せる人材マップを作れないん。また、誰か一人の手によって作られたわ

かというアイデアを、城一裕さん（情報科学

けでもない。誰かが作ったものを後の世代が芸術大学院大学講師）らと相談しています。

ちょっとずつ改良していくだけです。完成はコミュニティやエリアをつなぎ直す取り組み

永遠にありえません。

になりそうです。

物心ついたばかりの子供の目に飛び込んでくる世界は、あたかも “ すでに出来上がった――Maker が社会を大きく変える時が来ているのでしょうか。

完成品 ” のように見えますが、よく見ると改そうですね。ただ、分野によっては長期的

善・改良の余地がたくさんある。完璧なものな視点が必要です。というのも、いろいろななどないのです。そして、それを改良するの規制やルールに縛られている大人たちの考えは私たち自身です。その事実に気が付くと、方は、なかなか簡単には変わらないからです。

人生が変わり始めます。Maker になるのです。

既存の社会を相手に真正面から変革を訴えて――エンジニアなどのプロフェッショナル

も頑なに阻まれてしまいます。でも、そういが、アマチュアの精神を持ち続けるにはどう

う時は、横から入るという手があります。

すればよいでしょうか。

Maker space〜各国に広がる子供のための「出前工房」〜
雑誌「Make」と Otherlab が連携して展開するワーク
ショップ・プロジェクト。衣服の製作や木工などに必要な道具や材料を置いたスペースを設置し、子供たちに「作る」という体験を通じて、ものづくりやサイエンスに興味を持ってもらうのが狙いだ。参加費や材料費などは基本的に無料。米国の DARPA などが資金面で活動を援助している。
http://makerspace.com/

例えば、学校の生徒たちにものづくりを経プロフェッショナルは、自らの腕を磨きつ験させたい、といっても「レーザーカッター

つ、アマチュアのアイデアを寛大に受け入れを購入する予算がない」と一蹴されることがること、そしてアマチュアを育てていくこと

よくあります。しかし、学校の脇にある空スが大切です。アマチュアが犯す “ 質の高い勘ペースなどをちょっと拝借し、野菜を育て始違い ” は、時にイノベーションの源泉となりめてみる。最初は誰も見向きもしない。しかます。アマチュアは、秩序をよい方に乱す存し、そこにニンジンなどが芽吹いてくると、を引用している。

在なのです。プロは、そのようなアイデアを学校の生徒たちが興味を持って覗きにくる。

１）Interest in interdisciplinary projects

ビジネスに取り入れるため、プロジェクト

みんな自分が口にするものがどこから来るの学術的な専門分野や組織の枠組みを超えた人々との出チームの中に、アマチュアを数名参加させる

か興味があるからです。そのうち先生も覗きとよいでしょう。

に来る。そうやって気付くとみんなを巻き込独創的なアイデアを持つ人達には、町工場んでいる。道具や場所があるに超したことはなどで働くベテランエンジニア、伝統的な技ないですが、何かも最初から用意する必要な能を持っているエキスパートが含まれます。

どないのです。

What is a maker?
Maker とは何か。それを分かりやすく示したものが、下記リストである。Maker に共通する 5 つの行動原則を示したものだ。Maker ムーブメントに参画する有志が考案したものだが、デール氏は好んでしばしばこれ

会いを楽しもう。クロスボーダーの交流が新たな刺激や気付きを生むからだ。
２）Desire to visualize and understand physical world
テクノロジーや情報を消費するだけでなく、自ら作り、参加せよ。作ることを通じて現実世界を可視化すれば、世の中をいっそう深く理解できる。
３）A mindset of playfulness

こうした人達にも私は光を当てたいのです。

道具よりはるかに重要なのは、マインドをどれだけ優れた力量を持っているか、本人は育てることです。そして正面突破をせず、横セットより大事なのは、マインドセット。ないものはあまり気付いていない。周囲もこうしたエキから入ってしまう。許可を求めず、小さく作れ。

スパートにあまり敬意を払わない。米国でス始めてしまう。Maker ムーブメントもそう４）Share in open source communities.

ターリングエンジンという動力機関を再現しいう風にして拡がっています。こうしたコ

いつもオープンであれ。どんな研究開発でも、研究所、ている Maker のグループがあります。そこ

ミュニティの中で育った子供達は、単なるを成し遂げられない。異なるアングルから眺めた時にに参加するシニア層のエンジニアは、スーツ

Consumer ではなく、Maker として育ってい発見がある。

を着て働くお父さん世代が、子供たちから頼きます。社会を改善できる人に自然となれる

５）Sense that world can be improved, problems can

まれても直せない類の機械の知識や製造技術のです。子供たちが、消費者ではなく、文化を持っている。世代を超えた交流が新しい価の創造者である、と当たり前に思える社会が値を生み出すことがあります。

来たときに私は、世界が変わると確信していシリアスになり過ぎない。遊び心を忘れない。ツール

企業、大学のなかに留まっていては、ブレークスルー

be solved, and things can be changed.
自分を信じろ。スティーブ・ジョブズのように「世界は自分達の手でよりよく変えられる」「問題解決できる」という楽観的なモノの見方こそ最大の武器だ。

31

USPMAG201209̲yorinuki̲cs55.indb 31

2012/10/12 17:33:23ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔ

シェルスクリプト大喜利 第六回

皆様こんにちは、はじめまして。三か月のご無沙汰、シェ
ルスクリプト大喜利（略して sh 大喜利）のコーナーです。
ちょっと皆さん、聞いてくださいよ！このシェルスクリ₻₏₷₏₻ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔংٛȇȸ̽͂͜଑̩ȹ༎ਬಿȆ͙̥ͭ

ٝ
ల჋

₻₏₷₏₻

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

まった答えというものはないのです。あえて言うなら面
白いスクリプトが正解！
ඵȂġ面白いスクリプトとは例えば、こんなもの。

プト大喜利のコーナーの第四回で募集したちんじゅうちゃんͼȂġ人が考えつかない意外性がある

マウスパッド。本当につくっちゃったんですよ。↓

υȂġ美しい or 芸術的 or 記述がシンプル・短い or 高速ΧȂġアイデア・こだわりが光るΣȂġネタになるようなバカバカしさ、くだらなさがあるなどなど、ただし最後のは段位強制返還の恐れありよ。:-)
२Ȃġスクリプト動作環境は Linux とします。そして、特に断りな き 場 合 は、Linux JM(iuuq;00mjovykn/tpvsdfgpshf/kq0)に記載されているコマンド及び機能のみ使用可能とします。これは多くの人が楽しめるようにするためなのです。
（但し JM に載っているので、ń ΏͿσࠏ͈́ٝ൞͜ ŐŌ Ȋ）
অȂġsh 大 喜 利 は シ ェ ル ス ク リ プ ト を 披 露 す る 場 な の で、őŦųŭ ͞ œŶţźȂ őźŵũŰů ͉̈́̓ঀ̻̽͝Θιです。そもそも JM にも載っていません。逆にシェルスクリプトにとって不可欠な awk や sed 等は OK です。JM にもあり

マウスパッドを使う GUI 派な人に向けて、ちんじゅちゃますし。でも、よっぽど面白ければ、なきにしもあらず？

んが CUI 文化の素晴らしさを教育するというお節介極まり

ルールもおさらいしたところで、それじゃイッてみよう。

ないマウスパッド。しかし、‫̹͈ͤ৾͛֗ͅޗ‬ષ̬̞̀ͥ ŴŭࡼȂġOpen usp Tukubai(iuuq;00vfd/vtq.mbc/dpn0) も使用 OK ！

΋ζϋΡΥΗ͉Ȃ ۴૤͈ ňŖŊ ෩͂̽̀ͅȂ ̩͢փྙ̦̥̞ͩͣ̈́

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

̞̠͂΂Ι̦ȤȤȃ ダメじゃん！

ུ๔‫ٳ‬ই

でも逆に、我々 CUI 派には大ウケで、8 月にコ○ケで頒布したら大半の方がニヤリとしてくれました。良いような悪いɃల֚࿚Ʉ

ような……。でもまたこういう企画やりたいもんですなぁ。

ȶࢨ‫׋‬ତȷ ͂ࡤ͊ͦͥুடତ̦̜̳ͤ͘ȃ Ĳıı ո‫׋ࢨ͈ئ‬TechLION や OSC などのイベント入手できますよ。

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

周囲に CUI 文化の素晴らしさを説きたい人がいたら、こっそりマウスパッドをコレにすり替えちゃいましょう。

皆さん知ってました？幸運数って数学的な定義があるってことを。ラッキー 7 ってのも何となく 7 なのではなくて、

えーではそろそろ、本コーナーのシステムをご説明します！

数学的に 7 が幸運数だからみたいですよ。知らなかった方は

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

詳しくは Wikipedia 等で調べてもらうことにして、そうやっΏͿσΑ·ςίΠఱ‫ܔ‬၌අခ͈σȜσ֚Ȃġsh 大喜利はクイズやテストではありませぬ。なので決て数学的に定義されているアルゴリズムをシェルスクリプトで実装してもらうのがこのお題というわけです。
投稿数で判断すると、このお題が今回の一番人気でした。個性豊かな解答が来とります。さてさて早速見ていきましょう。

012
2 autumn
aut mnMAGAZINE 201246 USP MAGAZINUSPMAG201209̲yorinuki̲cs55.indb 46

2012/10/12 17:33:24

徹底仕
仕事術！
C U I 徹底仕事術！
ΏͿσΑ·ςίΠఱ‫ܔ‬၌ɝŌ ̯͈ٜͭ൞
2!$"0cjo0ti
3!jg!\!%$!.mf!2!^<!uifo4!!!!!O>%|2;.211~
5!!!!!tfr!2!%O!}!/0MvdlzOvncfs/ti!%O!2!3!}!us!(]o(!(!(
6!!!!!fdip
7!!!!!sn!MvdlzOvncfs/\1.:^+
8!fmjg!\!%2!.mu!%4!^<!uifo9!!!!!fyfd!dbu:!fmtf21!!!!!O>%))%2.%20%4**<!M>%))%3,2**
22!!!!!j>2<!k>2
23!!!!!xijmf!sfbe!mjof<!ep
24!!!!!!!!!jg!\!%j!.fr!%4!^<!uifo25!!!!!!!!!!!!!j>2
26!!!!!!!!!fmtf
27!!!!!!!!!!!!!jg!\!%k!.fr!%M!^<!uifo28!!!!!!!!!!!!!!!!!N>%mjof
29!!!!!!!!!!!!!gj
2:!!!!!!!!!!!!!fdip!%mjof<!j>%))%j,2**<!k>%))%k,2**
31!!!!!!!!!gj
32!!!!!epof!?!MvdlzOvncfs/%%
33!!!!!/0MvdlzOvncfs/ti!%O!%M!%N!=!MvdlzOvncfs/%%
34!gj
自身を再帰的に呼び出しているのでこのスクリプトはLuckyNumber.sh という名前にしてください。
K さんは 2 つ投稿してくれたのですが、私の独断と偏見でAWK を使ってないこちらを採用しました。添付コメントによれば、データを 2 回走査しなくてよい方法を思いつかず悩んだそうなのですが、アルゴリズム上多分 2 回走査は必
要なんじゃないかと思いますよ。
さて、このコード。再帰呼び出しで実装してるのが他の投稿に無くてちょっと面白い。֚౲਎ဓ！これで二段だ。

ɝ൐‫ ނ‬ŢŸŬŦų ̯͈ٜͭ൞
2!$"!0cjo0ti
3!bxl!#CFHJO|gps)j>2<j=>211<j,,*|qsjou!j~~#!?!mo
4!j>3
5!o>%)bxl!#OS>>%j|qsjou<fyju~#!mo*
6!xijmf!\!.o!#%o#!^<!ep
7!!!!!bxl!#OS&%o">1#!mo!?!mo2
8!!!!!o>%)bxl!#OS>>%j|qsjou<fyju~#!mo2*
9!!!!!j>%))j,2**:!!!!!bxl!#2#!mo2!?!mo
21!epof22!bxl!#2#!mo
AWK に拘って、呼び出している外部コマンドを AWK だ
けにしたとのことです。なるほど……。
その拘りが素晴らしい。コードもそつなく書けてるし。

6!c>amt!}!tfe!.o!#%|b~q#a
7!xijmf!\!.o!#%c#!^<!ep
8!!!mt!}!tfe!.o!#%|c~%|c~q#!}!ybsht!sn!.g9!!!c>amt!}!tfe!.o!#%|b~q#a:!!!b>%))b,2**
21!epof22!mt!}!tfe!(t0_1+00(
sed に拘って AWK を一切使わず組んだとのことです。また、テキストファイルではなくファイルシステムを使っているところも拘りです、と添付コメントに書いてありました。
うーん、面白い。sed とファイルシステムを使いこなして
るねー、sed は一部 GNU 拡張な使い方してるけど。最初の1 〜 100 の値をブレース展開で作ってるのもいいね。よし、
これはඵ౲਎ဓしちゃおうか。……だけど今紹介したこの二人、̱͜͞൳֚૽໤͈͉̈́́ȉȉȉコードが似てるしペンネー
ムも。言ってくれればまとめて三段にしてもいいからね。
そして、Tukubai 使った解答は来ないのかーと、思っていたら一つ採用しようか悩む解答が来ましたよ。（結局採用）

ɝˏˍˎˑˍ˒̯͈ٜͭ൞
2!$"!0cjo0ti
3!
4!tfr!2!211!?!ovn
5!tufq>3
6!wbm>%)zbss!ovn!}!tfmg!%tufq*
7!xijmf!\!%)hzp!ovn*!.hf!%wbm!^<!ep
8!!!dbu!ovn!!!!!}
9!!!zbss!.%wbm!!}:!!!bxl!(nbyog=>OG|nbyog>OG<qsjou<ofyu<~|tus>##<efm>##<gps)j>2<j=>OG<j,,*|tus>tus!tqsjoug)#&t&t#-efm-%
j*<efm>GT<~gps)<j=>nbyog<j,,*|tus>tus!tqsjoug)#&t&
t#-efm-#+#*<~qsjou!tus<~(!}
21!!!efmg!%wbm!!!}22!!!ubss!!!!!!!!}
23!!!hsfq!.w!(+(!?!unq.ovn
24!!!wbm>%)zbss!unq.ovn!}!tfmg!%tufq*
25!!!tufq>%))tufq,2**
26!!!nw!unq.ovn!ovn
27!epof28!fyfd!dbu!ovn
Tukubai らしく、綺麗にパイプで繋いでるなーと思ったら途中にごちゃごちゃした AWK が……。これが残念です。
しかし投稿者コメントによると、「delf コマンドは列数が揃っていないと正しく動かず、やむを得ず列数を揃えるための awk を入れました」とのことで本人も残念がってました。
うーむ、これは仕様ですね。tateyoko コマンドもそうなのですが、列数が揃ってないものはエラーとして弾きます。

よし੝౲਎ဓだ！

Tukubai では不正なデータは、それも受け入れられるようにɝŴŦť ඤ ŬŦų ̯͈ٜͭ൞

コマンドがいちいち配慮せず、容赦なく弾きます。そうする

2!$"!0cjo0cbti
3!sn!.sg!mo<!nlejs!mo<!de!mo
4!fdip!1|1//:~|1//:~!}!tfe!(t011102110(!}!ybsht!upv
di
5!b>3

事でコマンドをシンプルに設計するという思想だそうです。
必要なら前段階で整形しなさいと。確かに一理あります。
ということで、これは仕様なんだけどもよくぞ Tukubaiを使ってくれた。ありがとう、੝౲਎ဓ。

47
4
7

USPMAG201209̲yorinuki̲cs55.indb 47

2012/10/12 17:33:26

長かったですけど、次のお題行きます。
Ƀలඵ࿚Ʉĺ ࣐ ĺ ႥȂ ‫ڎ‬Ⴅ̦ΑβȜΑߊ୨͈߇߇͈Ξ΅ΑΠນέ͹ͼσ̦̜̳ͤ͘ȃ ̭͈ນͬດ੔੄ႁ̥ͣඋ͙Ȃ Ź ࣐࿒Ȃ ź Ⴅ࿒̜ͥͅΓσͬ‫͛܄‬Ȃ ̷͈‫͈ئ‬Γσ஠̀ͬȂ ષͅ Ż ࣐‫ͥ͛ݑ‬ΏͿσ
Α·ςίΠͬ੥̞̩̺̯̞̀ȃ ̹̺̱ষ͈ॽအ̱̳͂͘ȃȆġ ‫ߗ̧̹̭̹́́͂͛ݑ‬Γσ͈౵͉ ģŁģ ̞̠͂໲ল̳ͥͅȃȆġ ŹĭźĭŻ ͈౵͉஠̀΋ζϋΡ֨ତ́ള̩͈̳̽̀ͥ͂ͥ͜ȃȆġ Ĳ Ʌ Źĭź Ʌ ĺ ̤͍͢Ȃ ı Ʌ Ż Ƀ Ź ͉ΙͿΛ·ະါ̳͂ͥȃ

4!z>%35!{>%46!tfmg!20OG!?!%%.lvlv
7!dbu!%%.lvlv!}!tfmg!%z!}!tfe!%))%y!.!%{**-%))%y!.!2**e!}!zdbu!%%.lvlv!.!}!ifbe!.o!%)):!.!%{**!}!tfmg!%z!
OG!}!tpsu!}!dkpjo3!.eA!lfz>%z!.!%%.lvlv!}!efmg!%z!}!
lfub
8!sn!%%.lvlv
はい、Tukubai リリース元、USP の中の人からの投稿です。
コメント「tukubai 使用で awk 封印。がんばってパイプ一本にまとめてみました」、ということです。

Excel なんかでもよくありますよね。指定した場所のセル

さすが中の人、短くまとまってるな。なるほど、加工対を消して 1 セル分上に詰めたり、あるいは一つ増やしたい

象の行だけ取り出して切り詰め、インデックス付けて、元のから 1 セル分下にずらすとか……。そうやって行を跨いだ

データと JOIN するのか。お手本ありがとう。֚౲਎ဓ！えー

操作っていうのはテキスト処理としては面倒なはず！と思っと……これで五段。順調に段位を重ねてますな。

てお題にしたわけです。
寄せられた解答はどれも Tukubai を使ってます。やはり

◇

◇

◇

おまちどうさま。今回のおバカお題、第三問行きましょう。

こういうシーンこそ Tukubai の得意分野というわけですな。

Ƀల२࿚ɄɝĴĳĲĶĲķ ̯͈ٜͭ൞ŤŢŵ ΋ζϋΡ͈ै৪̦֒࡞ͬॼ̱̱̹͘ȃ

2!$"!0cjo0ti
3!
4!tvc>((
5!j>2
6!xijmf!\!%j!.mu!%))%2.%4**!^<ep
7!!!tvc>#%tvc!]]%j#8!!!j>%))j,2**
9!epof:!xijmf!\!%j!.mf!%)):.%4**!^<ep
21!!!tvc>#%tvc!]]%))%j,%4**#
22!!!j>%))j,2**
23!epof24!xijmf!\!%j!.mf!:!^<ep25!!!tvc>#%tvc!A#
26!!!j>%))j,2**
27!epof28!tvc>%|tvc$!~
29!
2:!ubufzplp!}
31!tfe!%3(t0])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*!
]|2-]~])\_!^]|2-]~]*!]|2-]~])\_!^]|2-]~]*0(#%tvc#(
0(!}
32!ubufzplp!}
33!lfubȶজ͈૽୆̤̫ͥͅडఱ͈ࢃ٣͉Ȃ ťŰŨ ΋ζϋΡͬैͤདྷͦ

先程に続きありがとうございます。
いやぁ、これまた途中にゴニョゴニョした行があるけどアイデアは面白い。やりにくい特定列の行詰めを回避するた
めに tateyoko で表を一時的に転置し、特定行の列詰めにしてしまっている。そこで sed を活用しているというわけか。
これはいいね。֚౲਎ဓ！さっきのと合わせて二段だ。

ɝŨŰųŪįŴũ ̯͈ͭٝ൞
2!$"0cjo0cbti
3!y>%2̱̹̭̺̀̽͂͘ȃ ̛̜Ȃ ౗̥ै̩̽̀ͦȃ ΄·̽ȷ̛̯Ȋ֚ఘ̓ͭ̈́΋ζϋΡ ŀै৪ͬੳ਀ͅफ़̳̈́Ȋとツッコミ入れられそうですが、そこはご愛嬌。飽くまでお遊びですから〜。というわけでこれは、dog コマンドがもし実在していたらどんなコマンドかというのをシェルスクリプトで表現してもらうお題です。
力作来ましたよ。まず、その力作を紹介しましょう。

ɝŁţŴťũŢŤŬ ̯͈ͭٝ൞
2!$"0cjo0ti
3!
4!dvsm>#.t!.p!.#
5!xhfu>#.r!.P!.#
6!mzoy>#.tpvsdf#
7!
8!$!hfu!dpnnboe!obnf!boe!qbui
9!gps!j!jo!xhfu!dvsm!mzoy:!ep
21!!!gps!k!jo!0cjo!0vts0cjo!0vts0mpdbm0cjo!0pqu0cjo!0
pqu0mpdbm0cjo
22!!!ep
23!!!!!jg!\!.y!%|k~0%|j~!^24!!!!!uifo25!!!!!!!dpnnboe>#%|k~0%|j~!afwbm!fdip!(%(%|j~a#
26!!!!!!!csfbl!327!!!!!gj
28!!!epof
29!epof2:!
31!$!bsht
32!xijmf!\!%|2~!">!##!^
33!ep
34!!!dbtf!%|2~!jo
35!!!!!..!*
36!!!!!!!tijgu

012
2 autumn
aut mnMAGAZINEMAGA
INE 2012
48 USP MAGAZINUSPMAG201209̲yorinuki̲cs55.indb 48

2012/10/12 17:33:27

徹底仕
仕事術！
C U I 徹底仕事術！
ΏͿσΑ·ςίΠఱ‫ܔ‬၌
37!!!!!!!csfbl
38!!!!!!!<<
39!!!!!.+!*
3:!!!!!!!pqu>#%|pqu~!%2#41!!!!!!!<<
42!!!!!+!!*
43!!!!!!!csfbl
44!!!!!!!<<
45!!!ftbd
46!!!tijgu
47!epof48!
49!gps!j!jo!%+
4:!ep
51!!!jg!fyqs!%|j~!;!#iuuqt+;00#!?!0efw0ovmm
52!!!uifo53!!!!!jg!\!.o!#%|dpnnboe~#!^54!!!!!uifo55!!!!!!!%|dpnnboe~!%|j~!}!dbu!%|pqu~56!!!!!fmtf
57!!!!!!!fdip!#%|1$$+0~;!dboopu!hfu!sfnpuf!gjmf;!%|j~#!2?'358!!!!!gj
59!!!fmjg!fyqs!%|j~!;!#guq+;00#!?!0efw0ovmm
5:!!!uifo61!!!!!dbtf!%|dpnnboe~!jo
62!!!!!!!+xhfu+}+dvsm+!*
63!!!!!!!!!%|dpnnboe~!%|j~!}!dbu!%|pqu~64!!!!!!!!!<<
65!!!!!!!+!*
66!!!!!!!!!fdip!#%|1$$+0~;!dboopu!hfu!sfnpuf!gjmf;!%|j~#!2?'3
67!!!!!!!!!<<
68!!!!!ftbd
69!!!fmtf
6:!!!!!dbu!%|pqu~!%|j~71!!!gj
72!epof

さてさて、これは一体何なのか？添えられていたコメン
トを読んでみると……「cat が concaticate の略なら、dog
はきっと pseudograph（＝ウソ文書）の略なはずです。なので引数文字列を元にウソ文書を吐きます。笑ってください」とのことです。
これは……、100% くだらない文章を吐くことで有名な̷̠̭ιȜ΃Ȝ̲̞̥̈́͝Ȋアタクシもこのサイト好きだけどね。それで、どのメーカーを使ってるのかと思ったら「週刊誌メーカー」かい！東○ポもびっくりゴシップ記事というわけね。
֚౲਎ဓ。これで二段だ。
うそこメーカーさんにも感謝しつつ、◇◇◇というところで本日の大喜利はこれにてお開き！読者の皆さん、投稿してくれた皆さん、ありがとうございました。

ൎࣂఱ༡ਬȊȊ
ষ͈̤ٝఴ֚Ȃġ1 〜 n（n は引数で指定）までに存在する「完全数」を列挙するプログラムを書いてください。速さを追求した解答、または Tukubai を使う等して ( 使わなくても可 ) コー
ドの美しさや面白さを追求した解答を待ってます。
ඵȂġURL エンコーダー（URL 化できるよう一部の文字を %xxにするアレ）を作ってください。勿論 Perl とかそーいうのはナシですよ。使っていいのは Bash,AWK,sed,tr 等、Linux JM に載っているシェルとコマンドだけです。
२Ȃġ“a” という名のテキストファイルがあります。a の内容を

これ力作なのです！誌面が残り少なくて載せられないのが表示するやり方 ( 一番簡単なのは cat a でしょう ) を沢山

残念ですが、man ドキュメントまで添えられていたのです。

列挙してください。列挙する数で勝負するのでも、珍し

それでどういうコマンドかというと、cat はファイルを表示するのみだったところを、これは http/https/ftp にまで拡張しているんですね。more を拡張して less が作られたよういやり方を列挙して勝負するのでも OK。

ൎࣂ͈̱̥̹

に、cat を拡張する方向で dog を作ったというわけですね。

お題への回答は、お名前（ペンネーム）、回答したいお題

man まで作る芸の細かさに感服した！その man を紹介で番号、回答スクリプト、簡単な補足の四点セットで下記の宛きなくてすまない。でもその努力はちゃんと段位に反映させ先へ！一人何問でも何個でも回答可です。尚、次回締め切りてもらうよ。ということで、ඵ౲਎ဓ！これで四段だ！

は ĲĲ ࠮ ĳķ ඾ Ȫ࠮ȫ ࡿஜ ı শとします。しかもその間はɝ‫׺‬ඵ࣢̯͈ٜͭ൞

何度でも回答の修正を受け付けます。

2!$"!0cjo0ti
3!
4!vsm>#iuuq;00vtplpnblfs/dpn0xfflmz0@b>Nblfs'pp>%2#
5!dvsm!.t!#%vsm#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
6!olg!.x!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
7!tfe!.o!(0_=ejw!dmbtt>#nbhb`dpqz#?0-0_=]0ejw?0q(!}
8!tfe!(t0=\_?^]|2-]~?00h(
この解答、curl とか nkf とか使ってるんですけど࿂ฒ̞̥̤ఴ̱̱̓̓͜௣̩̺̯̽̀Ȝ̞
それからお題も大募集。考えてくれた方にも段位を授与します。自分で出題して回答するのも、今のところ可！

ൎࣂ୶ͣ‫̳̱͘ݺ‬ȃ curl、nkf コマンドが無い方は是非インストール

どちらも投稿先は、nbhAvtq.mbc/dpn です。面白

してお楽しみ下さい。あと、
端末表示は UTF-8 にして下さい。

ければ（ワリと）何でもありなので、どしどし投稿待ってます !

49
4
9

USPMAG201209̲yorinuki̲cs55.indb 49

2012/10/12 17:33:27

2 1

8 7
9 2
TECH
TECH4
5
7 6 9
1
4 3
3
4
1
2
6

数独

数独（Number Place Puzzle：ナンプレ）は、クロスワード
パズルのように、行列の中にある空マスを、正しい数字で埋めていくクイズです。

数独クイズ作者：gori.sh

3 4 8 9 1
5 4 2 3 1 9 692
15 1 9 2 393
1
4 2 8 1 5 6 3
8 9 7 3 1

第3回
こんにちは、レイコです。
秋の夜長も Tech な数独よ！

遊び方（１）使ってよい数字は、1 から始まる自然数。
自然数。
最も大きい数字は、一行（一列、一つのサブブロック）に入れられる上限値です。
例えば、「9 × 9」マスのパズルであれば、使ってよい数字は「1」から「9」までです。
（２）一つの行に、各数字は一度しか使えません。
（３）同じ列、同じサブブロックのマスを埋める際も、各数字は一度しか使えません。

前回の解答
9 7 8
2 4 5
1 3 6
8 5 7
3 6 1
4 9 2
7 8 3
5 1 9
6 2 4

4 1
6 8
7 2
9 4
5 7
3 6
2 5
8 3
1 9

5
3
9
2
8
1
4
6
7

2
1
8
6
4
5
9
7
3

6 3
7 9
4 5
3 1
9 2
8 7
1 6
2 4
5 8

「数独 (SUDOKU)」はニコリの登録商標です。

ß᳏᳍᳊ȞǬǸȳƴ࠼ԓ᠍ƤǇƤǜƔᲹàǭȣȳȚȸȳᲛ  ᅸ

CFXGTVKUGOGPVECORCKIPè௒ƕ٥ǓЏǕƨǒƝǊǜƳƞƍᲛᅸᓶҾƷ୿ඡȖȃǯǿȯȸƞǜƴ᳏᳍᳊ȞǬǸȳ‫ݦ‬ဇȩȃǯƕЈஹƨƬƯ !
おいしいネタ満載の技術マガジンである本誌は、各地で大人気です !!
今回、来月号のみの広告掲載特別価格をご用意しました。これを機会に、本誌に広告を載せてみませんか ?

USP
MAGAZINE

裏表紙 1頁
通常価格 20 万円

Ĳı ྔ‫׫‬ȊĩĶıɓ ŰŧŧĪ

B5 1/3頁‫ܤ‬ƢƗƯƝǊǜƳƞƍŵ

通常価格 5 万円

B5 1頁
通常価格 10 万円

Ĺ ྔ‫׫‬ȊĴ ྔ‫׫‬Ȋ
詳細はお問い合わせください。
⇒ mag@usp-lab.com

50 USP MAGAZINE 2012 autumn

USPMAG201209̲yorinuki̲cs55.indb 50

2012/10/12 17:33:28

autumn

編集

鎌田広子

青井大地

當仲寛哲

発行元 （有）USP 研究所

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

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

mag@usp-lab.com（技術的なお問合せには対応しかねますのでご了承ください）ඵ₝₝֚ා߇࠮֚֚඾”ༀ࣭⅛೒ઠ‵↚↞⅕↝↷↽⁋↞⅛ಎ⅔↭↼ⅾ↦↎‡⅛૟‫ٺ‬൝”⅋⅛

⅗⅖၌༒଻⅜ࠗⅴ౶ⅶⅫⅉⅼ„૽ₛ⅜⅁⅛↷↽⁋

༷֚⅔੝Ⅾ⅓࣐ℽાਫ਼ⅰℸഝ⅛အঊ℺໦ℹⅵ

ੀ⅜৘ष⅘⅜ྫၑ⅔ⅅ⅍„ⅅℹⅅ↣⁋↞⅜஼༷⅛

อ‫ܞ‬ⅅⅫⅇ„⅁ⅶⅫ⅔⅜ഌచⅇⅵ஼༷⅛൳শ߳

߳মႁ⅜஠ཞ℺๩ྟⅎℹⅳ⅁⅋௖ࡽဲগႁⅻ

ളⅅ⅓℻Ⅻⅅ⅍„⅋ⅶ⅜ࢃ⅘‵ↇ↼⇅↟↓⇀‶⅕‵ଶℵⅎⅷ”⅁ℶℵℶ⅛ࡉⅶ⅍ⅳⅾⅾⅎⅷ‶⅕਀

۟ⅻ௯ ૺⅅⅫⅅ⅍„ ܑ ުⅯ⅁ⅶⅻ‫ ڰ‬ဥ” ࢵⅻठ ٛ⅃ⅉ” ౶૽⅕⅛↽ⅽ↾↖ⅾ↶⅗߃ ‫࢐ ޙ‬‫⅗⅕ޙ‬ⅴⅫⅅ⅍„૧ⅅℵ੄ٛℵⅻ୆Ⅼ”‫ݰ‬࿻

ⅈ”↽ⅽ↾↖ⅾ↶⅛‫ৢିמ‬૯ⅻࡉⅵ⅁⅕⅜๊֚

⅓℻Ⅻⅅ⅍„⅁ⅶ⅘ߎ࡞ⅻ೮ⅇ૽Ⅿఉℽ”๭‫ٺ‬

ఴⅻٜࠨ⅔℻ⅈ⅘⅋⅛‫ڰ‬ဥ⅛ાⅻบอഎ⅘ࢩ⅀ↇ‡ↇ↾⅜ↇ‡ↇ↾ⅽ‡← ←↞↽‡↞↩⁍‡‪ⅻ

੭ₛ⅘ྟℹ⅘↣⁋↞⅔࢐ၠⅻࠗ⁁⅓ℵⅫⅇ„Ⅿⅅ

⅗ℵ࣭℺ఉℽంहⅅⅫⅇ„⅋ⅼ⅗࣭⅔Ⅿ૽ₛ⅜

༷֚”ྚⅎⅾ⇅↖‡↣⁋↞ⅻুဇ⅘၌ဥ⅔℻

ࡀႁ৪ⅰ↜⇀↽←↞℺‫ૂྟܥ‬༭⅘૘ⅶⅵ‫ࡏܓ‬Ⅿ

⅘४‫ح‬ⅇⅵ„
ैު֥⅕ⅅ⅓ⅈ⁁⅕࡛ા୽ႁ⅔ℴⅴ⅍ℵ„‫ٸ‬໐࿨֥”۬औ ”
ࡺ࿚⅕ⅅ⅓‫؍⅘ْࠗڎ‬౯എ‹ಠ৪↭⇀↫⁇‡↾₊⅗ⅇℿℵⅆ›ⅅ„ℴℴ”⅖ℶⅰⅳজ⅜‫૽ݰ‬႒⅗⅛ℹⅯ‧‧„

ૺⅫ⅗ℵⅎⅷℶ⅗‼„๩ྟ⅛‫ވ‬ခ⁁⅓ྛႁഎⅎ๩‫ܐ‬བ⅗⅛ℹⅯⅅⅶⅫⅉⅼ„⅔Ⅿ৘ष⅜ಎₛ৪ⅰ‫ݴ‬ఱ঩ུ‫ྫ⅜⅔ز‬ℽ”৘⅜๊֚૽⅛৿

ⅇⅵड‫ޑ‬डࢃ⅛೷ࢯସႁ⅜”ඊव৪ⅰࡀႁಃ⅃ⅶⅵ⅛⅔ⅇ„ⅇⅵ⅕ଲ‫ٮ‬໹გ⅛৘࡛⅘చ

ٟℹⅳইⅫⅵૂ ༭ ‫ ވ‬ခ⅕௖ ࡽ ၑ ٜ⅘ⅲⅴࢹ

⅁⅛૧ⅅℵુ ে℺↭↼ⅾ↦↎‡⅕ℵℶ‫ ٽ‬ැ⅛෫

ℽ‵๩ྟ⅗⅖ྫℵℹⅳհ஠⅔հ૤‶⅗⅛⅔ⅇ„

⅑Ⅻⅴ‵৿๩݅ྩ⅘ⅲⅵհ஠⅔հ૤‶⅔⅜⅗

এ ே⅘ℴⅵ⅛⅔⅜⅗ℵℹ”⅕জ⅜ே ௨ⅅⅫⅇ„

చ ၛⅇⅵ⅛ⅎ⅕ℵℶ‫ ږ‬૞℺ၰ↌‡↩←⅛आ ུ

ૂ༭ⅻ࢖‫ٳ‬ⅇⅵ‶„౶ⅳ⅗ℵম℺‫ູޔ‬ⅻ୆Ⅼ‵ ఈ ৪ⅻၑ ٜⅇⅵև⅘ૂ ༭ⅻං” ু ໦⅛℺‫ܢ‬ఞ⅃ⅶⅫⅇ ৘࣐⅜Ⅻⅎྫၑℹ₍‪„๊֚‫ٳ‬༶⅜‫੅ܿ⅘ܡ‬എ⅘⅜‫خ‬ෝ⅘⅗ⅴ”‫ڰ‬ဥ℺ඊ୸ⅇⅵܿ੅ ※‫ିמ‬ℹⅳ⅛౷ષ۬ণ‪⅛

Ⅻⅇ„ℹ⅑⅓ୌঙ℺জ⅘࿚ℶ⅍”֚໐⅛ࡀႁ৪߳ম‫ྟܥ‬ⅻཕℽ⅁⅕⅔ྫփྙ‫⅃ا‬ⅉⅵႁ℺ℴⅴⅾ⇅↖⇁‡‶⅘”↥ⅾ↏⁌⁋ↆ⅃ⅶ⅍ඵ‫⅛ܥ‬ၫ‫ݖ‬℺‫ܡ‬ం⅛ඁྴ৽݅⅛ℒℍℒ⅘యⅸⅴଲ‫৽⅛ٮ‬

ࡤ⅝ⅶ⅍”↖⇁‡⅛༲ٟ౷തⅻီℹષߗℹⅳज़⁁⅘⅜ྫၑ⅔߳ম‫⅔ྟܥ‬ⅅ⅍„ⅅℹⅅজ⅜⅁⅛শ

৪ⅻఉତ୆ⅼ⅔ℵⅫⅇ„ⅅℹⅅজ⅛֣ય⅔⅜৘

⅁ⅶⅳ⅛↚‡↾⅜↭↼ⅾ↦↎‡⅛૟‫⅕ٺ‬ℵℶఱ࿚⅘ଽহ⅛ા⅘Ⅿ‫ڐ‬ⅴⅻⅬⅉ⅓ℵⅫⅇ„

ৢ૯ⅻࡉⅉ⅍փ଎⅘஠ℽ↪⇅⅕ြⅈ”Ⅽⅅⅷ႖ष⅘⅜ၰ২⅕Ⅿ⅁⅛࿚ఴⅻٜࠨⅇⅵ‫ྫ℺ܨ‬ℵⅲℶ
⅘ࡉℷⅫⅇ„Ⅽⅅⅷ↭↼ⅾ↦↎‡⅕ℵℶ‫ٽ‬ැ⅛෫ٟ↽↽‡←„↽ⅽ↾↖ⅾ↶‫ד‬௨⅔⅁⅋ྫℵⅯ⅛⅛”‵ↇↇ‡ↇ↾℺ज़ⅴಡⅮ⅍ৢ૯⅔⅜⅗ℽ”↽ⅽ↾↖ⅾ⅁⅋℺ၰ৪⅛૯⅛࿒എℹ⅕⅃ℷএℷ⅓℻Ⅻⅇ„ⅅↇ‡ↇ↾⅛‫ד‬௨೹‫↼↭⅜ރ‬ⅾ↦↎‡⅛࿚ఴ⅕၌

ℴⅵ༷֚⅔”஠૽႒℺↜⇀⅛ུ‫ݶ‬౷ⅻౝⅅࡀ

༒଻⅕ℹⅳॷ๛ၰაⅻ‫⅁ܳ℻ے‬ⅇম⅘⅗ⅴⅫⅇ„ ↶‫ד‬௨ⅻ೹‫ރ‬ⅅ⅍ⅳ⅖ℶ⅗ⅵ⅔ⅅ⁄ℶ„֚໐⅛↼⇅↟↓⇀‶⅛⅋⅛ࢃⅻࡉⅵম℺⅔℻Ⅻⅅ⅍„ⅅℹ

⅋ⅶℹⅳତා”‫଼ݢ‬ಿⅅ⅍࠿॑↌‡↩←⅛

୶֚ఘ⅖ℶ⅗ⅵ₍‶⅕এℶⅎℿ⅔ⅅ⅍„

୽ࢃ௽ℽ↜⇀⅘‵ଲ‫்ܮ‬ₛ⅘↊↿⅔⅜”⅁⅛

↣⁋↞⅔Ⅿ࣎ߗৢ૯೹‫⅜←↩‡↌ރ‬Ⅻⅎంहⅉ⅍‫ৢିמ‬૯⅕এⅸⅶⅵⅯ⅛⅔ⅅ⅍„൚শⅾ⇅↖‡ঙ ⅽ←ↄ‡₊ŎŔࡓ໗২ಿ‪℺֚ཿ⅛ৢ૯ⅻ” ၠ⅕⅗ⅴ” ૽ ႒⅛߇ ૽⅘֚ ૽℺၌ ဥⅇⅵેⅶ⅓ℵ⅍ⅳ⅕↜⇀⅘‫ູޔ‬ⅅⅫⅅ⅍„ତ඾ࢃ”ୌ߃ා⅔⅜৘ྴ৽݅⅛ℒℍℒ”↫⁉ⅾ←↬⁋ↆ（ジーズバンク）↽←ↆ⅘ℴⅵਅ⅛‫ࢅژ‬ⅻ‫ޑ‬ℵⅳⅶⅵম⅘⅗ⅴⅫⅇ„

ႁ⅛ಎଥⅻ۬ণⅅ१ⅅ⅓ⅅⅫℶⅰⅯⅅⅶⅫⅉⅼ„

発行人

石塚幸治
表紙デザイン

柏崎吉一
ライター૯℺ਤ૽۬ণ⅛↣⁋↞ષ⅘ࠇश⅃ⅶ⅍⅛⅔ⅇ„

松浦智之

৘ष”ِ℺‫ື⅜ز‬౬℺ۙ⅃ⅶ⅍ઁₛↂ⁋↊՛ℵ

好評連載陣

・ ほか

納涼船吉報

・ USP 友の会

村井純教授
・ TechLION 再録

編集長‫℺ܥ‬ఘ൚⅍ⅴⅅ༲ٟⅅⅫⅅ⅍„জ⅜ઁⅅஜ⅘

( vol.6 )ŎŊŕ⅘ℴⅵဥ࠯⅔໇ℵ⅓ℸⅴ”Ⅿⅅ඾೾℺ⅈഛ౷‫∺ޙٽ‬₉₉ •ජଌ᪟Ⴙ•2012

ْ௨⅔ⅅ⅍„૽⅘ⅲ⁁⅓⅜౹ⅈℹⅅℵ⅕ۜⅆⅵৢ

・ ○○に訊く技術者哲学

・ 今私たちは何を学ぶべきか

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

・同人作家からスタートし、私が最初に作ったのはオライリーのオマージュ本だった。でも内容は完全オリジナ
ル、表紙イラストも自分で描いた。そんなことしてきた私が活動 10 年目にしてそこの創業者に会うことにな
ろうとは！本を見せたら「ワーォ !」と嬉しい一言、Maker 魂が伝わったはずだ。でも側にいらした社長さんから「弁護士に相談します」とコワいジョークが！（松浦）・Turing さんのイラストを描こうと思って、写真から緻密に描写しようと思ったんですけど、描いてみると普通に整った顔なので面白くない。
（禿おじさんなどは描いてて楽しい）なので髪型に特徴を持たせて愛嬌ある感
じにしてみました。モジリアーニみたいに、変顔でイラスト芸術を追及してみようかなぁ。
（鎌田）
・紙の上にペンとインクで描く、写真を撮る、コンピューター上で作図してレイアウトする、キーボードから文章やプログラムコードを打つ……どの作業も、自分の魂を投影する作業。魂を成長させることと、それを思うように投影する能力を身につけること。「ものづくり」に必要なのは、終わりのない精進！（青井）・盆休みに宮城県石巻市内の宿に一泊した。夜、近くの居酒屋に入ると多くの客で賑わっていた。市街は活気を取り戻しつつあるようだった。波にさらわれた海辺や、学校の校庭には街から集められたガレキがいまも山積みである。この一年半、立て直しに費やした労苦は想像もつかない。せめて体験を語り継ごう。そして地元で獲れた旨い魚と酒をじっくり味わおう。（ライター 柏崎＠エクリュ）

・ Tukubai on FreeBSD

編集後記

2012 年 12 月発行予定です。
USP マガジン FB
USPMagazine の細かい情報が定期的にアップアップデートされています。
訂正のおわびもこちらから ----->>

USP 友の会
制作協力

2012/10/12 17:33:29

USPMAG201209̲yorinuki̲cs55.indb 51

ĳĲ

次号予告

USP Magazine info

USP
MAGAZINE

51

ŕłōŌġōŊŗņ

USP MAGAZINE 2012 autumn (Vol.6) よりぬき版ŇœŊŅłŚġĲķġŏŐŗņŎŃņœ

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

͚̞̲ͣͭ͟
/% ඥ௎ීʂŴᬖ݈ʁų6CNM)WGUVǄƔʩฏɶ(TKFC[ 2NCEGρஜங 5WRGT&GNWZG
5VCTV ᳸%NQUGᲢʖ‫ܭ‬Უ 6KEMGVЭ٥Ǔȷʖኖų όŴ࢘ଐ  όᲢȉȪȳǯᡂᲣɼ͵ᲴȦȋȐȸǵȫȷǷǧȫȷȗȭǰȩȟȳǰᄂᆮ৑ųңឃᲴ২ᘐᚸᛯᅈŴ.2+,CRCPŴȌȸȩȜŴ˂ࢸੲᲴଐஜ 70+: ȦȸǶ˟Ŵ'/<'41ŴǭȣȪǢȇǶǤȳǻȳǿȸžǨȳǸȋǢ 6[RGſૼज़ᙾƷ২ᘐȈȸǯȩǤȖž6GEJ.+10ᲢƯƬƘǒƍƓǜᲣſųᛇኬƸ 9'$ ưᲛTechLION サイトはこちら♪＞

TechLION vol.10

http://techlion.jp

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

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

Facebook もやってるよ♪＞

USP 友の会ŖŔőġŎłňłśŊŏņġව਀༹༷͉ȉ
vol.0

2011 springvol.1 2011 summer

ごめん
なさい
在庫終了
です。

自炊不要

vol.2 2011 autumn

vol.3

2012 wintervol.4

2012 spring

vol.5 2012 summer

ごめん
なさい
在庫終了
です。

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

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

ũŵŵűĻİİŸŸŸįŶŴűŵŰŮŰůŰŬŢŪįūűġġͅͺ·ΓΑȊ

大手書店でも売ってるよ♪＞ http://www.usp-lab.com/pub.store.html
定期購読申込はこちら♪＞ http://www.usp-lab.com/pub.order.html

USPMAG201209̲yorinuki̲cs55.indb 38

2012/10/12 17:33:29