好 き な こ と 、始 め る な ら 今 、手 を 動 か さ な く ち ゃ 。

USP
MAGAZINE

ISSN 2187-9664

2um0m13ers
500Yenfor the sophisticated shell scripters
特集 シェルスクリプト・ハンズオン

春爛漫シェル芸人撩乱
勉強会体験記、ほか
TechLION 再録

小飼弾

人生を変えたプログラム言語との出会い
新連載
すずきひろのぶの“スズラボ通信”シルネン・ブヤンジャルガルの“自立への挑戦、情報整理技術の開拓！”
五十川員申“メーカー達をつくってみた。
”

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

From Editor「こんな時間なのにまだ ( もう ) 明るいの !?」というほどに日も長くなり、気が付けば夏もすぐそこ。
しかし「もう明るい」と言っている人は、早起き派ですか？夜更かし派ですか？
（私は夜更かし派です……）
さて今回の USP MAGAZINE は、summer 号だというのにちょっと遅めの春の装い。
このページをめくるといきなり桜色のページが現れます。
TechLION レポートのページを見れば「出会い」という文字が飛び込んできます。
他にも 3D プリンターを初体験してみた人々の記事があったり、
モンゴルからやってきた新入社員のコラムがあったり……。
実は今回のテーマ、「始める」なのです。
今回、最もこだわったのはやはり特集記事「シェルスクリプトハンズオン」。
「なんかシェルスクリプトが最近スゴイらしい、という声は聞こえてくれど、
そのスゴイシェルスクリプトとやらを、どうやって始めれてみればよいのかわからない」
このところよく聞かれるようになったこんな声に、何とか答えたいと思って制作しました。

新年度が始まったばかりの頃は、覚えることもたくさんあるし、何かと忙しいもの。
そんな忙しさも一段落した今だからこそ、これらの記事を是非読んでいただきたいと思います。

USP MAGAZINE 編集部

Contents
特集

こんなに身近なシェルスクリプトハンズオン… ………………………………………… 3

新連載

シルネン・ブヤンジャルガルの自立への挑戦、情報整理技術の開拓… …………………………………… -IT 美女図鑑 ―― 私市智美… …………………………………………………………………………………………… 新連載

スズラボ通信すずきひろのぶ………………………………………………………………………………… -メーカーたちをつくってみた。五十川員申…………………………………………………………………………… 中小企業手作り IT 化奮戦記
漢の UNIX

第6回

菅雄一………………………………………………………………………… -第7回

後藤大地…………………………………………………………………………………………………… -増井雄一郎氏に訊く、技術者哲学……………………………………………………………………………… 36
ユニケージエンジニアの作法

第7回… ………………………………………………………………………… -

第2講

大野浩之

UNIX ネイティブの電子工作塾
今私たちは何を学ぶべきか
TechLION 再録

第9回

高嶋健人… ……………………………………………………… -大岩元… ……………………………………………………………………… -小飼弾が語る人生を変えたプログラム言語との出会い… …………………………………… -うにっくすなやつら

第3回

シェルスクリプト大喜利

長谷川猛…

第 9 回…

…………………………………………………………………………… -……………………………………………………………………………… 74

Tech 数独 … ……………………………………………………………………………………………………………………………… 天地概況 奈須蛍路 ／ 編集後記… ……………………………………………………………………………………………………… ※ 薄字の記事はよりぬき版には収録されていません。是非正式版をお求めください。

2

USP MAGAZINE 2013 spring

0niojeman-igc

helif
特集 destact

okoyetatperg

emahijom

こんなに身近な
atek

kwa

fles

pam

2ms

シェルスクリプト

ハンズオン

USP MAGAZINE 編集部

年度が変わって、まもなく 3 カ月が経過する。
新人は職場の空気に慣れると同時に現場の課題が気になる頃、上に立つ
ベテランは自分に足りないスキルが見えてくる時期ではなかろうか。
「業務上のさまざまな課題を解決したい」「基礎からシステム開発について学び直したい」――。
そうしたニーズに応えるべく本特集では、シェルスクリプトをこれから身に付けるビギナーから、初心に立ち返ろうというベテラン勢までオススメの「学びの場」をご紹介する。
１つ目が、楽しみながらシェルプログラミングの真髄に触れられる USP
友の会主催「シェル芸人養成講座」、２つ目が業務の改善や新事業の立ち上げを支援するユニケージ開発手法
を体系的に学べる USP 研究所主催の「ユニケージ開発手法教育講座」
である。どちらも実践的なカリキュラムだ。受講者の声を交えてナビゲー
トしよう。

PART1
芸は身をたすく

第4回春爛漫シェル芸人撩乱勉強会& 第２２回勝手に新歓定例会 体験記
四十路を迎えるフリー記者の K です。仕事明けに、新橋の駅ガード下で呑む一杯が何よりの楽しみ。ただ、昨今は、取材の下準備や記事の校正に追われ、ゆっくり盃を傾ける時間が減る一方。そんな中、あらゆる調査・計算・テキスト処理をコマンド入力一撃で終わらすシェル芸の存在を知りました。「これで、さっさと仕事を終わらせて呑みに行けるかも知れないぞ」と勇んで参加した、シェル芸人養成講座の様子をお伝えします。

日頃の腕試しを兼ねて実践的な問題に挑む
くろうと「 素 人、 玄 人、 ど っ ち も バ ラ ン ス よ く 勉 強 で きる――」「会社の新人さんにも、ぜひお声がけください！」という、こくちーずの文言に誘われて申し込んだ第 4 回シェル芸人養成講座。
ふだん、GUI 画面を相手のマウス操作が中心で、複雑な制御構文の使用や一般解の追求は逆効果 !?
1 問目は、与えられた HTML のソースコードから、index.cgi というワードを取り除く、という問題。
問題 1：肩ならし次のファイルから「index.cgi」を除去して出力してください。
――ただし、p=index.cgi は残すこと。

UNIX 系 OS のコマンドを叩いたり、シェルスクリプ$ cat 2.html

トを書いたりする機会に久しい筆者。今更ながら場違<a href="http://my.favorite.jk/index.cgi#jk"> 会 長

いではなかったか、とひるむ心を押し鎮め、受講受付を完了します。
「Linux 環境のあるノート PC（Macブログ </a><a href="http://index_cgi.com/index.cgi?p=index.cgi">aho</a>可）」を持参とあったので、Ubuntu を起動できるノー
ト PC を携えて着座します。

「p=index.cgi は 残 す 」 と い う こ と は、p=index.

シェル芸の目的は、「マウスも使わず、ソースコー

cgi の中に含まれる index.cgi まで、消してはダメとドも残さず、GUI ツールを立ち上げる間もなく、あらいうことか……。オーソドックスに、sed を使って、ゆる調査・計算・テキスト処理をコマンド入力一撃でindex.cgi を削除すると、一緒に p=index.cgi の中に終わらす」こと（シェル芸、という用語は最近、一般ある index.cgi まで消えてしまう……（ここまで 5 分名詞化しているとか）。USP 友の会が主催するこの勉

近く経過）
」

強会は今回が 4 回目。回を重ねるたびに受講者数は「できましたか？」増えてきました。

画面の前で硬直した姿を見かねて、隣の方（玄人さ

講師は、USP 友の会会長 上田隆一氏。この日は、ん）が優しく声をかけてくれます。「index.cgi ではな

Web 系をテーマにした全 9 問が出題され、1 問あたく、『/』を付けて『/index.cgi』を、『/』に置き換える、りの回答時間に約 15 分が割り当てられます。

と考えてみれば。そのあたりが、この問題の引っかけ「ふだん、仕事でまったく文書の文字列整形しない、です」と私に小声でアドバイス。
ついでに画面もチラッという初心者の方はいますか？」というので、恐る恐と見せてもらいました。

る手を挙げるとほかにも、6 ～ 7 名ほどの仲間がいま$ cat 2.html | sed 's/\/index\.cgi/\//g'

す。私たちは、玄人、と呼ばれるベテランの方にサポートしてもらうことになりました。

4

USP MAGAZINE 2013 summer<a href="http://my.favorite.jk/#jk"> 会長のブログ </a><a href="http://index_cgi.com/?p=index.cgi">aho</a>特集― こんなに身近な、シェルスクリプトハンズオン
今回が初参加、という受講者の方は「シェルはシステムの運用業務で使うことが多いが、今日の出題はどれも面白かった。Web 上から店舗などのデー
タ一覧をダウンロードする場
面 で 使 え る か も 」 と の こ と。
ちなみに今日の正解率を尋ねると「7 ～ 8 割」。わが国とシェ
ルの未来は明るい。

さて、回答時間は終了。「これくらいだと、まだ玄折しも、この勉強会の少し前ごろから、世界は不穏な空気に包まれていた。我々にできることは何か……。

の過度な追求は、逆効果。頭の中でひねり過ぎて、簡人さんはうんちくを語れませんね」と講師。

単なパズルが解けなくなることもあるそうです。

正解を前方スクリーンに表示します。

処理結果を見ながらsed や grep で刈り取る$ cat 2.html | sed 's/index\.cgi//'<a href="http://my.favorite.jk/#jk"> 会長のブログ </a>

2 問目は、与えられた html ファイルの中から url<a href="http://index_cgi.com/?p=index.cgi">aho</a>

別解として、awk を使った方法

を抜き出す問題。そして 3 問目は、別に与えられた
html ファイルの中のタブを綺麗に整えて出力する問$ cat 2.html | awk '{sub(/index\.cgi/,"",$0);print}'<a href="http://my.favorite.jk/#jk"> 会長のブログ </a>

題です（p.7 参照）。
次第に、
解答例のパイプの数も増え、<a href="http://index_cgi.com/?p=index.cgi">aho</a>コマンドの列がどんどん長くなってきます。筆者はも「仮に 2 行目の p=index.cgi の中の、index.cgi も消

はや、講師が披露する解答手順をターミナル画面でナしたいのであれば、sed 's/index\.cgi//g'。awk の場合ゾるので精いっぱい。写経ならぬ、sh 経状態に、ひは、sub ではなく、gsub を使います」。sed の場合、とり突入です。

g を / の後ろに加えないと、最初にヒットした置換文「最終的な答えはワンライナーで出力するのが望ま

字列のみに、変換対象が絞られます。

しいのですが、迷った場合は慌てず、各コマンドの処

しかし――、もし、同一行中に「/index.cgi」が 2 つ以上

理結果を見ながら、一つひとつ進めてください」と講師。

含まれる問題が出たと仮定するならば、隣の玄人さんが教

すなわち、解答例は、パイプでつないだ一行のコマえてくれた方法のほうが、よりエレガントのような……。

ンド群ですが、問題を解く場合は、コマンドを一個一「目の前に出された問題を淡々と片付けることが個打ち込み、結果を表示させながら、解いていくのがシェル芸のポイント。類似問題でも使いまわしの利きベター。たとえば、2 問目ではおもむろに抜き出す文

そうな一般解を探そうとすると、かえってドツボにハ字列を含んだ各行に共通する適当なキーワード（例：マることがありますよ」と講師が注意を促します。

「href=」）を grep で抜き出します。これだけで、出力

シェル芸は、卑劣なミサイル攻撃を行う敵国のサイされる全行数がググッと減ります。その処理結果を眺

トを煩雑な仕事をまたたく間に撃退する最終兵器瞬間

めて、不要な文字列を sed と正規表現を組み合わせて、芸。その解法は必ずしも一通りではなく、解き方に個

空白や改行に置換していきます。そこからさらに、処人個人の好みも出ます。ただし、解法における汎用性

理結果を見て、キーワードを選び、grep で絞り込み、～お子様と一緒にお勉強！会場の協力で実現！～
9 カ月になる息子さんとご一緒に今回、勉強会に初参加のあしかさん。
今回の勉強会は、Linux 女子部のメールで知ったとか。
結婚を機にプログラマとして勤務していた会社を退職。
いまは子育てのかたわら、Java、Objective-C、
PHP を使った主に Web 構築の仕事を在宅でこなしているとか。
「今日は、子供を連れてきて大丈夫かな、と思ったけれ
ど、意外に温かい雰囲気でよかった」と、ほっと一安心。

女性エンジニアの多く
は、出産を機に職場を辞めてしまう人が、やはり多いそうです。けれど、子は親の背中を見て育つもの。コミュニティは働
くママと未来のエンジニアを応援しています !

お子さんを抱っこさせてもらい、満足げなスタッフ

5

問題 7：データの収集
本日の最高気温をワンライナーで出力してください。（yahoo や tenki.jp などから）解き方の例：
まずは、curl で、yahoo の天気情報のページをダウンロード。大量に表示された HTML のソースコード中から、
grep を使って「最高」という文字を拾い出す。この段階で、最高気温に関係する数字を含む対象の行数が、一気に 3行程度に絞り込まれる。
$ curl http://weather.yahoo.co.jp/weather/jp/13/4410.html 2> /dev/null | grep 最高<meta name="description" content=" 今日・明日の天気と風と波、明日までの 6 時間ごとの降水確率と最高・最低気温を見られます。"><td><small><font color="#ff3300"> 最高気温（℃）[ 前日差 ]<br>16 [ -3 ]</font></small></td><td><small><font color="#ff3300"> 最高気温（℃）[ 前日差 ]<br>16 [ 0 ]</font></small></td>
処理結果を眺めつつ、tail と head で、不要な文字列をサクサク刈り込んでいく。
$ curl http://weather.yahoo.co.jp/weather/jp/13/4410.html 2> /dev/null | grep 最高 | tail -n 2 | head -n 1
<td><small><font color="#ff3300"> 最高気温（℃）[ 前日差 ]<br>16 [ -3 ]</font></small></td>
sed と正規表現を使って、文頭から、最高気温を表わす数字（この場合、16）の手前の改行タグまでを、空白に置換。
$ curl http://weather.yahoo.co.jp/weather/jp/13/4410.html 2> /dev/null | grep 最高 | tail -n 2 | head -n 1 | sed's/.*<br>//'16 [ -3 ]</font></small></td>
さらに、16 の後ろにある『 [ 』以下も、正規表現を使って、空白に置き換えると、必要な文字列だけが残る。そして、パイプで、つながったワンライナーのコマンド群ができあがる（コマンドの書き方は、ダウンロードする HTML や文字列整形の方法によって変わってくるので、あくまで参考とお考えください）。
$ curl http://weather.yahoo.co.jp/weather/jp/13/4410.html 2> /dev/null | grep 最高 | tail -n 2 | head -n 1 | s
ed 's/.*<br>//' | sed 's/\[.*$//'
16

最高気温を表す数字だけが残った結果を見て、sed で刈る……。最終的にパイプでつな

プロードを行う様子を、ログを見ながら勉強します。

がれた解答例のようなコマンドが並び、標準出力に抜

第 8 問では、画像のダウンロード。

き取りたい url や文言が抽出されています。

そして、9 問目はその応用を踏まえて、本日の集大黙々と文字列を刈り続けるうちに、不思議と雑念も払われます。sh 経の効果でしょうか。
4 問目と 7 問目（上のコラム）は、curl を使って実成となる Web サイトのクローリングがお題です。
筆者は石になっていましたが、会場の皆さんは粛々と解いています。yahoo のページを対象にする場合、際にあるインターネット上の HTML ファイルをダウ

下記のような解答が提示されました。

ンロードし、そこから必要とする文字列を抜き出す問$ curl http://www.yahoo.co.jp | sed 's/href="/\n&/g' | g

題でした。

正解は一つと限らず講師を唸らせる解法もrep ^href= | sed 's/[^"]*"//' | sed 's/".*$//' | awk '/^http/{print $0}!/^http/{print "http://www.yahoo.co.jp/" $0}' | xargs wget

一方、wget に再帰ダウンロードのオプション -r を

第 6 問は、curl や wget を使ってサーバーにデータを付 け た wget -r送る問題。xargs を使って、無慈悲な攻撃データのアッを使えば、より

問題 9：クローリング
どこかのサイトのトップページにあるリンク先のリス
トを作って、リストのページや画像等をダウンロード
してください。
――相対パスにも対応しましょう。
――できたら再帰的にクローリング

6

USP MAGAZINE 2013 summer

短く同等の処理を実行可能という別解も披露されました。
それについて 会 場 か ら

サーバーにデータを送る際、xargs で複数プロ
セスに分割処理。ログ（画面上）で挙動を観察（第 6 問）

特集― こんなに身近な、シェルスクリプトハンズオン
は「JPEG 画像だけを階層別に収集するのであれば、見を交わしたり、和気あいあいの雰囲気でした。

wget -r -A JPG http:// ～、と記述すればいいよ」と、とはいえ、いろいろな正規表現やコマンドのオプ指定した拡張子のデータだけを収集する方法や、「逆ションを知っていると、より手際よく問題を処理し、に、wget -r -R [ 拡張子 ] とすれば、特定の拡張子以外

楽しめたはず。次回告知を見て、予習しておくとよいを取り放題」といった、オプションを駆使した、高度でしょう。

な解法が提示され、講師を唸らせる一コマもありました。

まずは目の前の課題に集中し、処理結果を見ながら、手を動かす。

さて、勉強会の 3 時間は、あっという間でした。困った時は受講者同士、お互いのやり方を参考にしたり意

第4回シェル芸人養成講座出題リスト※本文で紹介した問題以外を掲載

問題2：urlのリスティング
次のファイルを作って、urlを抜き出してください。
【ヒント】処理結果を見つつ、sedとgrepで不要な文字列を切り取る。

$ cat 1.html<a href="http://www.aho.com">
アホどっと混む</a><a href="#top">トップへ</a><a href="http://www.jk.jp">"JK"</a>問題3：整形
インデントの汚いhtmlを整形してください。
――1行にtdを1個にすること【ヒント】sedを使って改行やインデン
トを要所に挿入。

この日は一般的なプログラム言語とちょっと違う
シェル芸の真髄を、少し垣間見た気がしました。
問題5：数値参照の変換
次のような数値参照、実体参照文字列を読めるように変換してください。
$ cat numref【ヒント】Unicode文字を変換するコマンドは何？

&#25105;&#12293;&#12399;&#12471;&#12455;&#12523;&#33464;&#2015
4;&#12384;&#12290;

問題6：ポスト
http://www.usptomo.com/TOMONOKAI_CMS/CGI/hoge.cgiに、ポストでデータを#!/bin/bash -xv
送りつけてください。

$ cat 3.html<table>こんなCGIスクリプト→

echo "Content-type: text/html"
echo ""<tr><td>a</td><td>b</td><td>c</td></tr><table>【ヒント】使うコマンドは、
curlやwget。telnetもアリ？

echo あなたのポストしたデータはdd bs=$CONTENT_LENGTH
echo ""
echo です。

問題4：webページの切り取り
yahooのトップページからトピックスの見出しを抽出しましょう。
【ヒント】ファイルのダウンロードはcurl。htmlソースコードを見て、トピックス見出しを引っ張り出すキーワードをどれにするか。
解答例は、以下のURLに掲載しています。
http://www.slideshare.net/ryuichiueda/20130406-18763665

問題8：画像をダウンロード
yahooのニュースページ http://headlines.yahoo.co.jp/hl等々
から、ウェブページに掲載されている画像を集めてください。
【ヒント】まずは、htmlソースコードの中からイメージ（JPGやGIFなど）に紐づいているキーワードを、コマンドと正規表現と組み合わせて、じっくり引っ張り出す。

懇親会 [#!/beer/bash] はLTで盛り上がる！

第1～3回の問題および解答例はこちら
第1回 シェルスクリプト（Open usp Tukubai）
でいろいろやってみよう！
http://www.slideshare.net/ryuichiueda/201210
27-hbstudy38
第2回 第2回チキチキ！ シェル芸人養成講座
http://www.slideshare.net/ryuichiueda/uspstu
dy20121208-15547842
第3回 シェル芸爆破デスマッチ勉強会
http://www.slideshare.net/ryuichiueda/201302
16-16574641

懇親会は、乾杯の音頭の後に、参加者による交流会。さらに、有志による飛び入り LT も行われました。
今回は、新規事業の立ち上げ支援などを展開する VOYAGE GROUP の渋谷オフィスをお借りしました。
電源や無線 LAN 環境も含めて、たいへんお世話になりました。また、今回も USP 友の会有志により、
Ustream による中継が行われました（スタッフの皆さま、ご協力有難うございました）。

次回勉強会のお知らせ

勉強会当日、別フロアのイベント（リリカルハッカソン）に参加していた方が BeerBash に突如来訪し、動揺する講師。

今 回、 参 加 に 先 だ っ て、 持 参 の ノ ー ト PC に Open usp Tukubai を イ ン ス ト ー ル し ま し た が、
Tukubai コマンドを利用する問題は出題されず。未整形の文字列を処理する問題が中心だったためですが、今後のシェル芸人養成講座では、Tukubai コマンドが威力を発揮する整形文字列処理の問
題が出るかも。Open usp Tukubai をぜひ、インストールして、会場に足を運んでみてください。
（インストール方法は、下記URLをご覧ください。または、USP MAGAZINE前号vol.8 P.15にも掲載
しています）https://uec.usp-lab.com/TUKUBAI/CGI/TUKUBAI.CGI?POMPA=INSTALL
次回は、6月22日（土）
開催予定です（変更の場合がありますので、詳しくは USP 友の会 HP を検索の上、お確かめください）。

7

PART2目からウロコが落ちた

ユニケージ開発手法
教育講座レポート
はじめまして、今年の 4 月から USP 研究所で、お仕事見習い中の H です。
いまは業務系システム開発・運用について猛勉強中。やはり基礎が大事ですよね、ということで、ユニケージ開発手法教育講座を受講しています。
この講座を一通り受ければ、業務で使われるバッチ処理システムやウェブ
アプリを開発・運用するために必要なスキルが身につきます。各コースを受講された皆さんの声を交えつつ、本講座の全体像、自分にあったコースを選択するポイントをお伝えします。

ユニケージ開発手法を体系的に学べる「ユニケージ開発手法教育講座」（以下、教育講座）とは、USP 研究所が開催するエンジニア向けの講座のことです。ユニケージエンジニアとしての知識量、そして問題解決能力を高めることができます。
そもそも、ユニケージ開発手法とはどういうものでしょうか。下段にまとめました（囲み記事参照）

発の手法を身につけたい」という業務部門のユーザーさんや情報システム部門の担当者さん、または従来とは視点の異なるユニケージ開発手法をもとに顧客のシステム開発・運用を支援したい、という SI 企業のエ
ンジニアさんなどです。
教育講座では、コマンドの基礎やシェルスクリプ
トの書き方を学ぶほか、システム開発の起点となる
実データの整理や配置の仕方を学びます。
「Windows
や Mac の Office ツールしか使ったことがないのだけ

シェルスクリプトは、UNIX とともに誕生したスク

れど」という人でも、大丈夫です。S1、S2 講座では、

リプト言語です。そのシェルスクリプトをベースにし前提となる UNIX の基礎やエディター（Vim）の操作

たユニケージ開発手法で作られたシステムは、高額な方法も一から身につけられます。

ハードウェアや高度な専門知識を要する DBMS といっ

ユニケージ開発手法においてシェルスクリプトの作

たミドルウェアを基本的に使いません。また、現場の成に使うコマンドは UNIX 標準のものもありますが、社員を主体としたシステムの開発・運用・保守が可能

ユニケージ標準コマンド（usp Tukubai）を利用するです。
「システムを納品して終わり」ではなく、現場ことで、開発生産性および日々の業務効率が高まりまのユーザーがニーズに合わせて自らの手で拡張発展、す。ユニケージ開発手法では伝票などの実データをも

メンテナンスしていくことを前提にしています。

とにアプリケーションを開発していきますが、データ

これまで教育講座を受講されたのは、「業務を知っているけれども、現場の課題解決に資するシステム開ユニケージ開発手法とは本誌でもたびたび紹介してきたユニケージ開発手法とは、Linuxに代表される UNIX 系 OS とテキスト、シェルスクリプトを組み合わせ、「やすく・はやく・やわらかく」情報システムを構築できるソフトウェア開発手法である。その主な特徴は次の通りだ。
• UNIX 系 OS のベーシックな機能を利用• データベースに RDB ではなく、テキストファイルを使う• データの制御、操作は SQL の代わりに、UNIX 系 OS の性能を引き出すコマンドやシェルスクリプトを使う• データ構造は、いわゆるキー・バリュー型データストアの考え方• メンテナンス性の高い見通しのよい業務システムを開発できる• 柔軟なセキュリティポリシーに対応

8

USP MAGAZINE 2013 summer

を取り扱う際に各種コマンドが威力を発揮します。これらのコマンドは、K1 で学ぶことができます。

演習を中心とする
濃密なカリキュラム
全講座は 1 日もしくは 2 日間のカリキュラムが組
まれています。実際に、K1 の講座を一例に、教室の様子をご紹介しましょう（p.9 上

囲み記事）
。PC や

受講用のテキストは、すべて講師側で用意しているので、受講者は基本的に「手ぶら」で OK です。大事なのは、実際に手を動かして、操作に慣れること。シェ特集― こんなに身近な、シェルスクリプトハンズオン
教育講座を受講した受講生Hの一日◆時間割 （「K1」コマンド学習編）
1 日目
10:00

2 日目
コマンド実習２

はじめに

①

11:30
13:00

AWKの使い方②sort と uniq

コマンド実習１

head, tail, ctail,gyo, retu, self, delf

17:30

メモ①

sm2, sm4, sm5,
ysum, kasan, ratio,
join0, join1, join2,
loopj

③

すごいねぇ !

講座テキストが配布される

講座の初めに、こんなテキストが配られます。
目次から 2 日にわたる講座の内容がわかるのですが、ページ数は 181。こんなにたくさん覚えられるのかなぁと最初不安でしたが、あとあと自習や、コマンドリファレンスと技能検定にして使えるように考慮されてい合格するために、るそうです。
必死でやってます！

メモ② 何でもできる AWKの実力を知る

コマンド実習３

講師がテキストの例を実際に入力し、実行結果を画面で見せてくれました。AWK 一つで
実に様々な処理ができることを理解しました。でも for や if 文が出てくると処理は一気に複雑化。講師曰く「最初 にAWK で 苦 労$ cat hoge | awk '$1<="20110303"{print $1,$2,$4}'
しておくと、後で 20110302 バナナ 4
Tukubaiコ マ ン ド 20110302 リンゴ 5の 有 難 み が わ か 20110303 バナナ 9ります」とのこと。 20110303 ナシ 3

getﬁrst, getlast,
up3, tarr, yarr,map, tateyoko

コマンド実習４

marume, divsen,
comma, keta,
grep と正規表現 ,tr, sed

メモ③ 列の合計値が簡単に出せる sm コマンドを学ぶ

2 日目は最初に sm2, sm4, sm5 を学習。表計算でよくある各列の合計を求めるコマンドでした。AWK でもできることは 1 日目の実習で想像できていましたが、sm シリーズだと簡単にできてしまいます。
UNIX にはこの手のコマンドがあり$ cat URE.IMO
ませんけど、COBOL や RPG にあっ
001 さつまいも 20110405 32 1600
た sum up みたいなものですね。
001 さつまいも 20110406 24 1200

コマンド実習５han, zen,
mojihame, keycut,
その他コマンド④※ 紫色の文字はUSP研究所がリリースしたTukubaiコマンドです。

tateyoko コマンド～「Ｋ１」コマンド学習編の場合

001 さつまいも 20110407 49 2450
002 じゃがいも 20110405 102 5100
002 じゃがいも 20110406 98 4900
002 じゃがいも 20110407 121 6050

$ cat URE.IMO | sm2 1 2 4 5001 さつまいも 105 5250
002 じゃがいも 321 16050

メモ④ mojihame コマンドで、<table> の中身などがとても簡単に作れることを知る

HTML で <tr> ～ </tr> の部分について一行だけ書いておいたテンプレートを用意しておき、このmojihame コマンドを使ってデータを与えれば、データの行数分の <tr> ～ </tr> が、値の入った状態で複製されます。これは HTML 画面作りへの応用でとても重宝する気がして、真っ先に覚えてしまいました。
リンゴ 40 円 3 個
キウイ 78 円 5 個
バナナ 98 円 2 房
トマト 50 円 1 個
レタス 220 円 1 玉
パセリ 100 円 2 袋＋:<table border="1"><!-- MOJIHAME --><tr><td>%1</td><td>%2</td><td>%3</td></tr><!-- MOJIHAME --></table>:mojihame

ルスクリプトの書き方に関する手順（お作法）は K2

テムの処理結果を Web 上に表示するまで体験できた。

で学びます。

わかりやすかった」という感想をよく耳にします。

ユニケージ開発手法は、従来型の開発手法と異なり、データを起点に、集計や分析、出力などの処理を行う業務で使う実データを起点にアジャイルなアプリ開発

アプリを作ります。K3 では、K1、K2 で学んだ知識をユニケージ開発手法で取り扱う実データは、日々業

基に Ajax を使った本格的な Web アプリケーションの務でやりとりされる帳票データなどです。それをもと作成を学びます。K3 は 2 日間に分かれ、初日は郵便にマスタデータを作ります。ただし、原本となる生番号から住所を検索するアプリを作成。2 日目は、架データをいきなり使うのではなく、テキストファイル

空のスーパーマーケットを想定し、販売情報参照アプ

上でコマンドによって処理しやすいように文字列を整

リを実際に作ってみるという内容です。皆さん、業務形します。このような下準備をして、コマンドでいつで類似の帳票類やシステムを利用しているだけに熱心でも処理できる状態になったデータ群が、L4 またはに受講されています。K3 受講者の方からは、「CGI を

POMPA データといわれます（コマンドとオプション、

本格的に使いつつ、ユニケージ開発手法で作ったシス

ファイル名などを入力し、ポン、と実行キーを押すと業務の中でやりとりされる各種伝票に記載される実9あなたが最初に受ける講座はこれ！

START

教育講座フローチャート

Yes

No

UNIX 系 OS の基礎から学びたいS1
grep,sed,awk
などの
コマンドを
使いこなせる

ユニケージ
開発手法を
使って
システムを
作りたい

vi（Vim) を使い慣れている

自身で POSTを使ったウェブ
システムを
作れる

S2

K1
K1 を
受講した

K2
Tukubai
コマンドを
知っている

ユニケージ
開発手法で
作った
システムを
運用管理したい

ユニケージ
開発手法で
プロジェクトを統括し、組織内に人材を育てたい

Ajax を使った
ウェブ帳票・
商品検索・売上ランキングなど
Web アプリケーションを作りたいK1,K2,K4 を
すべて
受講した

受講目的を
いちど
USP 研究所に
ご相談
ください

K2 を
受講した

ユニケージ開発
手法に従ったAjax 用、CGI 用の
USPコマンドを使いこなせる

ユニケージに適した
ハードウェアやネットワークの設定を学習した

K3

K4

K5

K6

K7

パッと処理結果が出る、という意味）。K4 では、このでは、プロジェクトマネジメントにおける人材育成やようなユニケージ開発手法におけるデータ構造やデー

プロジェクト推進のコツを学べます。

タモデリングを学ぶことが出来ます。さらに、K5 では、教育講座の開催場所は、主に、USP 研究所本社のあユニケージ開発手法に適したシステム環境（ハード、る東京・西新橋にある会場です。過去には大阪と沖縄

ソフト、ネットワークなど）を学習します。K6 ではで、出張形式の教育講座も開催されました。大阪では、運用管理を行う上でのポイント、具体的にはログデー

業務システム開発の内製化に取り組む大手百貨店の社タを活用したエラー分析や運用監視アプリケーション員の方を中心に、講座が開催されました。

の作成方法などを勉強できます。今後開講予定の K7

10 USP MAGAZINE 2013 summer

さて、
私（筆者 H）もこの数カ月間で、いろいろなコー特集― こんなに身近な、シェルスクリプトハンズオン
教育講座ラインナップ
名称

S1
Win/Mac ユーザーも一からわかる

ユニケージのためのUNIX 入門編

S2
Web アプリの基礎を総ざらい

ユニケージのための
Web 入門編

K1
データを操る
コマンドの遣い手

コマンド学習編

K2

大量データもサクサクさばくシェルスクリプト学習編（バッチ処理）K3

シェルスクリプト学習編

会社の帳票システムを （ウェブアプリケーション処理）
Web 化できるK4
実データのマネジメント
におけるコツユニケージアーキテクチャ編

K5
最適な動作環境をつくる

ユニケージ開発環境
セットアップ編

K6
セキュリティや保守も万全

システム運用・管理編

K7
継続的な組織作りのポイント

プロジェクトマネジメント
・人材育成編

内容・習得事項

ユニケージでデータを加工するために必要な前提知識を学びます。
内容：UNIX 系 OS の生い立ちや考え方、ファイルやディレクト 1
リ、コマンドの操作、エディタ（Vim）の実習。

ユニケージ開発手法で Web アプリケーションを構築するために必要な前提知識を学びます。
内容（解説と簡単な実習）：HTML、JavaScript、CGI

2

ユニケージ開発手法において使用頻度の高いコマンド（特にgrep,sed,awk）、USP コマンドを学習します。

2

ユニケージ開発手法で用いる bash の文法、ユニケージ開発手
2法にしたがったバッチシェルスクリプトの書き方を学習します。

ユニケージ開発手法にしたがった web アプリケーションの開発
方法、Ajax 用、CGI 用 USP コマンドを学習します。

ユニケージ開発手法でソフトウェア開発するためのコンピュータの導入、OS のインストール、サーバ・ネットワーク環境の整備方法を具体的に学習します。

ユニケージ開発手法のシステム開発の進め方を学習します。ユニケージ開発手法に適した人員配置、要件定義方法、アジャイ
ル的な開発方法、テスト方法、「床屋方式」や「一休方式」などの独特の方法を学びます。

スだけをピンポイントに受講することもできます。

さん一人ひとりにピッタリの講座がわかるフロー
チャートを作成しました（上図）。参考にしてみてくださいネ！

1

ユニケージ開発手法のシステム監視方法、運用監視、障害復旧、
セキュリティー、アクセスコントロール、バージョン管理、ソ 1
フトウェアの保守を学びます。

のニーズや、お持ちのスキルによって、必要なコーらない」というご質問があるのも確か。そこで皆2

ユニケージ開発手法の標準的なシステム構成を学びます。ハード
ウェア配置、データの整理方法、ソフトウェアの起動スケジュー
1
リングと連携、エラー処理や障害対応、セキュリティーについて、
ユニケージ開発手法の考え方・作法と共に具体的に学習します。

スを受講してきました。ただ、教育講座は皆さん「でも、どの教育講座を選べばよいのか、わか

日数

講師

1

「ユニケージ開発手法の目的は、業務上の課題を解決するということ。たとえば、
業務効率を上げる、コンピュー
タ画面に向かう時間は最小限にしてお客様と接する時間を増やす、新たな業務を立ち上げるなどがあります。
そのために業務知識のある現場の方自らがシステム開発・運用・保守を行うことが可能になっています」

教育講座のご案内

教育講座の最新スケジュールや、申込みなど、より詳しい情報は Web
サイトをご覧ください。
USP 教育11

36 USP MAGAZINE 2013 summerお料理写真共有アプリ「ミイル」

37

マインドマップ
ブームスタート

ブログ

WordPressは2003年
ちゆ12歳
テキストサイト

侍魂

Web

Web日記
FriendSter
SNS

mixi
2004年
Facebook

携帯

PHP4

Pukiwiki

i-mode

1999年から2000年から写メ J-Phone
i-shot
WinXP

2002年

PC
iMac

OSX 10.2
初代

Linux Zaurus

Windows版発売

デバイス
iPod

HiSEC, Inc
私

伽藍とバザール
PukiWiki
オープンソースのチーム構築
経営者

いままで10年

後でもできる
早いうちに決断できたことはプラス
オープンソース活動での知名度
雑誌への執筆Linux系企業のエバンジェリスト

個人でも

講演、講師

経営者か技術者か

エンジニア

会社を畳んでフリーに

Ruby歴は長かった@masuidrive
Ruby on Rails

10分Rails

分かりやすさ重視

記事執筆

主に初心者向け

Railsについて色々ブログを書く
キャリアは20年

36歳

DG PingKing.jp

Yuichiro MASUI

ブログ経由で仕事
NIFTY aboutme.jp
技術英語

風呂グラマー
英会話学校

Railsなどエッジの技術は英語

週1程度じゃ覚えられない
家庭内通訳

食べ物ソーシャル
Hello!

mill
iOS

FrogApps, Inc.

パスポート取得

どこでも生きていける
エンジニアを目指して英語ができない

プレゼンで何言ってるか分からない

RailsConf 2006参加のため初渡米
仕事

Android

スライドの単語を追って行く
日本と技術力の差は感じない

数日居るとなんとなーく雰囲気が分かる

CTO

妻意見

Titanium Mobile
習うぐらいない行っちゃえ

Ex-Appcelerati
エバンジェリスト

渡米
PukiWiki
中島との出会い
10分で分かるRails
プロダクト
BigCanvas PhotoShare

勉強苦手だしメール送った
何もプランを立てずにBigCanvas起業

渡米のタイミングでiPhone SDK公開

iPhoneビジネスの難しさ
BCをクローズ
英語で仕事が厳しい

IKEA hacker

要望やパッチを送付

Open source

iOSDevCamp

外部モジュールの公開
会社はコミットしてきた人を中心にoffer

Titanium Mobile
Appcelerator

英語より技術力

job offer
Interview

GitHubのフォロー数
すべてを失っても仕事ができる
始めから考慮する

手離れ

メンテ仕事を受けない

飽きることを考慮する

自分はどうなりたいのか

ブログ

公開する

好きな事をして行きたい

オープンソース
自分に合う組織

自分が受け入れられる場所を探す

移り変わって行く
自分が主体に

自分の人生をコントロールする

手を動かす

プログラムは一人で完結できる

Rubyの力をMobileに
海外での活動の下地作り
未完成のモジュール

海外向けポートフォリオ
node-mysql
目先

MobiRuby

これから10年

JSConf EUで紹介

自己の証明

言葉よりコード
PukiWikiから10年

オープンソースのチーム構築

英語でチーム構築

更にニッチになっても大丈夫な様に幅を広げる

世界を変える

技術
仕事ができる領域

デバイス
Web以外
関数型言語

言語

英語

地域

日系スーパー

自分を変える
自分に合う世界を探す

38 USP MAGAZINE 2013 summer

PhotoShare

39

40 USP MAGAZINE 2013 summer

41ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔ₻₏₷₏₻ɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔȊɐȊɔংٛȇȸ̽͂͜଑̩ȹ༎ਬಿȆ͙̥ͭ

ٝ
ల߇

₻₏₷₏₻

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

皆様こんにちは。今月もシェルスクリプト大喜利（略ルスクリプトにとって不可欠な awk や sed 等はして sh 大喜利）のコーナーがやってまいりました。

OK です。JM にもありますし。でも、よっぽど面

六月です。カタツムリやアジサイの花をよく見かけ

白ければ、Perl とかもなきにしもあらず？？

る季節ですが、カタツムリをアジサイに置くと逃げてしࡼȂġOpen usp Tukubai(iuuq;00vfd/vtq.mbc/dpn0) もまうとか……。実はアジサイには「ヒドラシアノシド A」

使用 OK ！但し、使う意義がそれなりに感じられ( シアン化合物 ) という毒があるんですって。へぇ〜。

ないと採用はキビシいですよ〜。

この話の֚ఘ̭̦̓ΏͿσΑ·ςίΠ͂‫͈̜ͥ߸۾‬か？

ルールもおさらいしたところで、さあ始めましょう !

……̵̜ͤͭ̽͘Ȋトリビアってヤツですよ。
だってほら、ུ๔‫ٳ‬ই

この大喜利だってトリビアみたいなもんじゃないですか。
全く実用性を求めてないわけですから。
ではどういうコーɃల֚࿚Ʉ

ナーか？というわけで、まずは本コーナーのご説明！

Ĳ ȡ ů Ȫů ͉֨ତ́ঐ೰ȫ ͈ুடତ͈ಎͅంह̳ͥ ȸΓΏͿσΑ·ςίΠఱ‫ܔ‬၌͉͂ΏͿσΑ·ςίΠఱ‫ܔ‬၌අခ͈σȜσ·ΏȜளତȹͬ஠̀‫ͥ͛ݥ‬ΏͿσΑ·ςίΠͬ੥̞̩̺̯̞̀ȃ

整数数列のお題の 4 回目。お題作りがちょっと安易すぎませんか？とツッコまれそうですが、だってこのお題にすると投稿集まるんですもーん !

֚Ȃġsh 大喜利はクイズやテストではありませぬ。なの

それでセクシー素数というのは互いの差が 6 であで決まった答えというものはないのです。あえてる素数ペアなわけですが、
早速投稿見ていきましょう。

言うなら面白いスクリプトが正解！

ɝŢũŴŰŬŢŪ ̯͈ٜͭ൞

ඵȂġ面白いスクリプトとは、例えばこんなもの。
ͼȂġ人が考えつかない意外性があるυȂġ美しい、芸術的、記述がシンプル、高速、など
ΧȂġアイデア・こだわりが光るΣȂġネタになるバカバカしさ、くだらなさがあるなど。でも最後のは段位強制返還の恐れありよ。:-)
२Ȃġス ク リ プ ト 動 作 環 境 は Linux と し、 基 本 的 にLinux JM(iuuq;00mjovykn/tpvsdfgpshf/kq0) に 記載されているコマンド及び機能のみ使用可能とします。これは多くの人が楽しめるようにするためなのです。（JM にあるので、C シェル系での解答
も OK ！̜͂ ŬŴũȂ ŻŴũ ͜ ŐŌ ̱̱̹͘ͅ）2!$"0cjo0ti
3!bxl!.w!o>%2!(
4!CFHJO!|
5!!!tqmju)##-q*
6!!!gps!)j>3<j=>o<j,,*7!!!!!jg!)jt`q)j*!''!jt`q)j.7**!|qsjou!j.7-!j~
8!~
9!gvodujpo!jt`q)o*!|:!!!jg!)o=3*!|sfuvso!1~21!!!gps!)k>1<k=mfohui)q*<k,,*!|
22!!!!!jg!)o>>q\k^*!|sfuvso!2~23!!!!!fmtf!jg!)o&q\k^>>1*!|sfuvso!1~24!!!~
25!!!q\mfohui)q*^>o
26!!!sfuvso!2
27!~(

一人目の解答は、AWK 一撃解法ですな。素数かどঅȂġsh 大喜利はシェルスクリプトを披露する場なのうかを判定する関数を作り、差が６の二数を同時に判で、őŦųŭ ͞ œŶţźȂ őźŵũŰů ͉̈́̓ঀ̻̽͝Θι

定して両方とも素数だったら表示するようですね。

です。そもそも JM にも載っていません。逆にシェ

教科書通りの解答といったところかな、੝౲਎ဓ。

MAGA INE 2013
MAGAZIN013
3 summer
74 USP MAGAZINE

Ogiri9.indd 74

2013/06/17 6:49:11

徹底仕事術！
仕事術！
C U I 徹底仕ΏͿσΑ·ςίΠఱ‫ܔ‬၌ɝ෎͝Ȋ̤ಋȊ̯͈ٜͭ൞

Ƀలඵ࿚Ʉ

2!$"0cjo0ti
3!gps!o!jo!%)tfr!2!%2*<ep!gbdups!%o<epof!}!bxl!(OG>>3|qsjou!%2~(!}!tfe!(t0;00(!}!bxl!(|qsjou!%2-%2,7~(!}!tpsu!.l2-2!?!r2/%%/unq
4!dbu!r2/%%/unq!}!tpsu!.l3-3!}!kpjo2!lfz>3!r2/%%/unq!}!tpsu!.l2o-2!}!ubjm!,3!}!efmg!45!sn!r2/%%/unq

投稿者コメント「primes コマンドは JM に収録さŉŕŎō Ξ΅ΑΠͬဓ̢ͥ͂Ȃ ΗΈ͈ΜςȜͬ༐̳ΏͿσΑ·ςίΠͬ੥̞̩̺̯̞̀ȃ\੄ႁ႕^!=iunm?=cpezm?!!!!!!!!!!!!!!!!!!iunm!!!!!!!!!ઢ̞୊αΑΠ4!!!!!!!!!!!!!!!!!!!!cpez!!!!!!!!!=pm?=mj?ઢ=0mj?=mj?x=0mj?!!!!!!!!!!pm!!!!!!!!!=mj?͉͉ͩ=0mj?=0pm?=0cpez?!ɨ!!!!!!!mj!!!!!!!!!=0iunm?!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!mj!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!mj

れておらず factor コマンドで素数作りました。そしこのコーナーはトリビアみたいなものと申しましたて 2 列目に +6 した値を追記して、それをキーにしてけど、このお題に関してはちょっと実用性あるかもし

自分自身と join1 コマンドで結合して…( 略 )」というれませんね。まぁ、閉じタグ無しのもの (<br/> など )ことで Tukubai を使ってくれました。ありがとう！

無しだとか、属性も無しだとか、ということでお題をなるほどね、ウマい join1 の使い方だ！更に primes
コマンドが無い事にも配慮してくれて、よし！これは二段……といきたかったんだけど、残念！੝౲਎ဓ。
いやぁ〜これねぇ、ホント残念。何が起こったかというと、熱ゃ！お茶！さんが投稿してくれた時点では
確かに primes コマンドは JM にはなかったんだけど、2013 年 4 月に JM に追加されたのですよ！ Ŵũ ఱ‫ܔ‬၌ঃષ̯̥͈͘ఱ෨၄だ。というわけで primes を使って短く書いた方がむしろ模範解答ということになってしまいました。しかし今回 primes を使って投稿してくれた方々は、果たして知っていたのだろうか！？

ɝŌ ̯͈ٜͭ൞
2!$"0cjo0ti
3!
4!qsjnft!2!%))%2!.!6**!}]
5!bxl!(|qsjoug!#&e!#-!%2<!tztufn)#qsjnft!#!%2,7!#!#%2,8*<!qsjoug!#]o#~(!}]
6!bxl!(OG>>3|qsjou~(

簡単にしてはいますが……。
これも結構解答にバリエーションがありましたよ。
そして、意表を突く解答が一つ……( 苦笑 )ɝŵůŢŻŶŬŢ ̯͈ٜͭ൞
2!$"0cjo0ti
3!dbu!ubshfu/iunm!}
4!tfe!(t0=0]
5!=0h(!!!!!!!!!!!!}
6!tfe!(t0?0?]
7!0h(!!!!!!!!!!!!!}
8!bxl!(
9!CFHJO!|joefou>##<~:!%10_=]00!|joefou>tvctus)joefou-2-mfohui)joefou*.3*<ofyu<~
21!%10_=0!|qsjou!joefou!tvctus)%1-3-mfohui)%1*.3*<
joefou>joefou!#!!#<ofyu<~(「タグ 1 個で 1 つの行にしてしまえばあとは awk
で処理できることに気が付きました」とコメントが付いていました。sed と AWK の合わせ技ですね。AWKで処理するのに都合がいいように予め sed でテキス

コ メ ン ト に よ る と「Linux JM に bsd-games のトを置換しておくという……。実は今回、投稿された

primes が入っていたので、ありがたく使わせていた

解答はこの sed&AWK のパターンと sed だけのパター

だきました」とのことで、しっかり確認とってます。

ンに分かれました。一つを除いてね。

うむ、よくぞ確認してくれた！エラい！さすが常連

うん、sed&AWK な解答は正攻法だね、分かり易いさんだ。よしඵ౲਎ဓ。これで六段ですな。

し。ただ大喜利的には普通かな。というわけで֚౲਎ɝźźŢŮŢŰŬŢ ̯͈ٜͭ൞

ဓ。これで三段だ。

2!$"0cjo0ti
3!qsjnft!3!%|2;.3~!}!bxl!(|jg)%2.7!jo!q*|qsjou!%2.7-%2~q\%2^>2~(ɝŌ ̯͈ٜͭ൞

これは今回一番シンプルな解答でした。そして最速。
うーん、これも primes 使ってるね。まぁ後ろのAWK は、配列にどんどん素数が溜まっていくので大きい数を求める時ほど遅くはなるだろうけど、記述のシンプルさは気に入った！よしඵ౲਎ဓ。
◇◇

さて、第二問いってみよう。

◇

2!$"0cjo0ti
3!
4!dbu!%2!}
5!tfe!.f!(0_\_=^+%0e<!t0\_=^+=])\_?^\_?^+]*?\_=^+0]2]
6!0h(!}
7!tfe!.f!(0_\!!!!!^+%0e(!}
8!bxl!(CFHJO|m>1~|jg!)%1!!0_]00*!|m..~!fmtf!|qsjou!m-!%2<!m,,~~(!}
9!bxl!(|gps)j>1<!j=%2+3<!j,,*!|qsjoug!#!#~!qsjou!
%3~(

はい、1 問目に続き投稿ありがとうございます。こ75
75

Ogiri9.indd 75

2013/06/17 6:49:12

ちらも sed&AWK 解法ですね。ただ、投稿者によってఴηΑ̦̜̱ͤ̀͘Ȃ まんまとツッコミを入れられてし使い方が微妙に異なるところが興味深いですなぁ。

まいましたよ。

というわけで、こちらも֚౲਎ဓ。これで七段だ！

一 行 野 郎 な gori.sh さ ん の 解 答 は、 一 番 最 後 にさて今度は、もう一つのパターン、「sed だけ解法」

s/bodyl/body/ という置換が入っています。前ページの投稿者を紹介していきましょう。

のこのお題の「出力例」をよーく見てください。ほらɝઐᚧඵ჊̯͈ٜͭ൞

「</bodyl>」と typo してるでしょ。まさか解答をもっ2!$"0cjo0ti
3!tfe!.o!(;B4!%|
5!t0\\;tqbdf;^^+00h<t0])=\_?^]|2-]~?]*0]
6!]20h<q
7!~
8!O<t0]o0!0h<c!B(!}9!tfe!.o!(0_=]0\_?^]|2-]~?0|:!h<t0!!00<i<e
21!~
22!0_=\_?^]|2-]~?0|
23!H<t0=])\_?^+]*?/+]o])/+]*0]3]20q<h<t0%0!!0<i24!~(てしてツッコミ喰らうとはねぇ。
一本とられましたよ。
うーん、参った！でも tr -d '\n ' とやれば yarr コマ
ンド要らないしー、それにこのコードだと出力結果の最後に余計な空行が付くしー、などとツッコミ返して、֚౲਎ဓしかしないもんね！でも八段、ぐぬぬ……。
◇◇◇

お待ちかねの第三問。また変り種のお題ですよ。
Ƀల२࿚Ʉΰϋ̈́ྴஜ͈έ͹ͼσ̦੄ြ̀ક̳͈ͅߎႻ̱̹̭̜͂ͤ͘

一人目の解答ですが、sed2 段構えとのことです。

̵̥ͭȉ̷̭́ ȶ̷ͭ̈́ྴஜ͈έ͹ͼσैͭ̈́͢ȡȷ ͂এͩ

前半の sed は一行一タグ化を行うもの、後半の sed̵ͥέ͹ͼσྴ͈έ͹ͼσͬैͥΏͿσΑ·ςίΠͬ੥̞̩̺̀

は階層に応じたインデントをつけてお題が求める形に̯̞ȃ ̷͈έ͹ͼσྴ̦̠̱̓̀ΰϋ͈̥ၑဇ͜ഞ̢̀ȤȤȃするものですね。

古参の UNIX ユーザーならきっとありますよね、消いやー、sed って中のコマンドが全て 1 文字だからせないファイルで困ったという思い出が。脳内に格納

全体的に眺めると呪文のようだよね。よし、ඵ౲਎ဓ。

されている .history ファイルの中からその忌わしきコ

これで五段。

マンド行を grep して投稿するだけです。簡単でしょ？

ɝŴŦť ඤ ŬŦų ̯͈ٜͭ൞

……ってそれが難しいか。でも三つ解答来ましたよ。

2!$"0cjo0ti
3!o>(]
4!(
5!tfe!(t0=0(#%o#(=0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
6!tfe!(t0?0?(#%o#(0h(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
7!tfe!.o!(0_=0q(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
8!tfe!(t0=]0])//+]*?0.0(!!!!!!!!!!!!!!!!!!!!!!!!!!}
9!tfe!(t0=])//+]*?0,]20(!!!!!!!!!!!!!!!!!!!!!!!!!!}:!tfe!.o!(y<H<t0]o00<t0,.00<q<t0\\;bmovn;^^+%00<y(}21!tfe!(t0_,00(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!}
22!tfe!.o!(0\\;bmovn;^^0q(!!!!!!!!!!!!!!!!!!!!!!!!!}
23!tfe!(t0,0!!0h(ɝͼΗυȜ̯͈ٜͭ൞
2!$ti̹͉͘cbtì̱̥ͣͅχϋρͼ΢Ȝ́৘࣐
3!b>(effq(<c>%)bxl!(CFHJO|PST>##<c>#(%b(#<qsjou!c<gps)j>2<j=>2::<j,,*|qsjou!#0#!c~~(*<j>1<xijmf!\!%j!
.mu!2111!^<ep!nlejs!.q!%c<k>%@<de!%c<k>%))k,%@**<j>%))j,2**<fdip!%j<\!%k!.of!1!^!''!csfbl<epof<j>1<xijmf!\!%j!.mu!311!^<ep!nlejs!%b<k>%@<de!%b<k>%))k,%@**<j>%))j,2**<fdip!%j<\!%k!.of!1!^!''!csfbl<
epof

投稿者コメント「ディレクトリの深さの限界に挑戦！途中でエラー出ますがとにかく最後まで実行させ二人目。おぉ来ましたね、この方！第七回の大喜利ましょう。パスが長すぎて特に bash では消すのに一では sed を 62 個もパイプで繋ぐという変態的回答を苦労すると思いますぜ」と、いうことで৘࣐̳ͥાࣣ

送ってきたんですよ。あれは参りましたが、今回もま͉ুࡨୣහ́Ȋた sed づくしですな。

おぉ、これは……。消す時、変なエラーが出て苦労

工程が細かく分かれているので、sed を一個目まで、するし、おまけに bash だとプロンプト表示がいちい二個目まで……と実行していくと変化の様子が見えてち重くなるぞ！うん、確かに「そんなファイル作んな

面白いね。これもඵ౲਎ဓ。これで五段だ。

よ〜」だな、こりゃ。֚౲਎ဓ。これで二段ね。

ɝŨŰųŪįŴũ ̯͈ٜͭ൞

ɝńķŉĹŐĸ Ȫ·΀ϋȫ ̯͈ٜͭ൞

2!zbss!}!us!.e!]!!}!tfe!(t0=])\0b.{B.[^+]*?\_=^+0]2]o0h(!}!bxl!(|jg)0_]00*|t>tvctus)t-2-m.>3*~fmtf|q
sjou!t%1<t>t#!!#<m,>3~~(!}!tfe!(t0cpezm0cpez0(

2!upvdi!aqsjoug!(]488(aadmfbsa

これが、意表を突く解答です。৘͉̤̭͈ఴ͉ͅ੄

コメント「これは私がイタズラ目的で書いたコードで、実質的に FreeBSD 専用です。9.0 以降の /bin/sh

MAGA INE 2013
MAGAZIN013
3 summer
76 USP MAGAZINE

Ogiri9.indd 76

2013/06/17 6:49:13

徹底仕事術！
仕事術！
C U I 徹底仕ΏͿσΑ·ςίΠఱ‫ܔ‬၌でタブキーを押してコマンド補完した場合や、ports

する「スミス数」を列挙するシェルスクリプトをから jls コマンドをインストールして使うと、clear コ

書いてください。

マンドのエスケープシーケンスが効いて画面が消去さඵȂġ3D プリンタの記事がありましたね。UNIX の各種れます。最初の printf は、ファイルがキャラクターコー

フィルタコマンドも 3D 対応にしなくっちゃ！

ド順でなるべく最後に表示されるようにするための工図のような 3 行 3夫で、イタズラに念を入れます」とのことです。

列のファイル ( 横の⁬⁪hoge.3ͼΗΒρ̯̹̲̩ͦͭ̈́̀͝ͺ΢Η̦̱̹͈̥Ȋ……と最文字、例えば 1,2,3

初にツッコミを入れておきたいが、確かにこれはイジの間には半角スが悪いねぇ。FreeBSD9 の /bin/sh でこのファイルのペースが１つ入っ

置かれているディレクトリに移動して、[v][i][ ][タブている ) が 3 つで構成されたデータがあります。

キー ] とかタイプすると画面消えるし。

これに x-z 平面方向や y-z 平面方向でコマンドを「そんなファイル作んなよ！」と思うけど、消すの⁫

hoge.2hoge.1

作用させたいとなったら、予め x-z 平面や y-z 平

は難しくないね。touch と書いてあるところを、rm

面で 90°
単位の回転ができればよさそうです。

に変えるだけで消せるじゃない。まぁ勿論、こんなヘ

そこで、今回は x-z 平面で 90°、180°、270°回転ンなファイル名になっていることを知らなきゃ消せなさせられるシェルスクリプトを書いてください。3いけどね。よし、これも֚౲਎ဓするぞ。現在二段。

つはバラバラのシェルスクリプトで構いません。

そして最後。……やれやれ、またヘンなのが来まし（90°回転時、回転後の hoge.1 は１行目から順にたよ。いや、ヘンな解答はこの大喜利ではむしろ歓迎“b!B!2”、“d D 4”、“g G 7” となれば正解とします）
२Ȃġrev コマンドって知ってますか？与えられたテキなんですけどね。

ɝŨŰųŪįŴũ ̯͈ٜͭ൞

ストの各行内で、文字の左右の位置を入れ替える

2!dvsm!iuuq;00xxx/lbokjkjufo/ofu0kjufo0zpnj17/iunm!
}!jdpow!.g!Tijgu`KJT!.u!VUG.9!}!tfe!.o!(0je>#z75::#0-0l92680q(!}!tfe!(t0\!.^0]o0h(!!}!tfe!(0_%0e(!
}!ubjm!.o!,3!}!ybsht!upvdi

コマンドです。例えば 12345 という行があったら、この解答には curl とか iconv とか Linux JM 外のコ
マンド含まれてますが、まぁネタとして面白いので掲載しました。でも段位進呈はナシですからね。ましてや gori.sh さん、八段だし。

54321 が出てきます。でもコレ、何につかえばいいのでしょう？是非ウマい使い道を提案してくだ
さい、シェルスクリプトで。

ൎࣂ͈̱̥̹
お題への解答は、お名前（ペンネーム）、解答した

さて、投稿者コメントですが「オンライン漢和辞典

いお題番号、解答スクリプト、簡単な補足の四点セッ

サイトから、『へん』と読む字を探し出し、それをファトで下記の宛先へ。
一人何問でも何個でも解答可！尚、

イル名にします。これは間違いなくヘンなファイルで

次回締め切りは˔࠮ˎ˒඾ Ȫ࠮ȫ ࡿஜ ı শとします。

す。異論は認めません。シェルスクリプト自体は普通。

しかもその間は何度でも解答の修正を受け付けます。

curl してゴミ掃除して touch するだけです」とのこと。
̤̞̤̞Ȋ̷͉ͦȶΰϋ̈́έ͹ͼσȷ͈փྙ̸̦֑̠ȜȊと、
一応リアクションするけど、うーむそう来たのね……。
◇◇◇

これにて本日の大喜利はお開き！読者の皆さん、投稿してくれた皆さん、今回もありがとうございました。

ൎࣂఱ༡ਬ
ষ͈̤ٝఴ

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

ൎࣂ୶
どちらも投稿先は、

です。面

白ければ
（ワリと）
何でもあり！じゃんじゃん投稿待ってます !

֚Ȃġ1 〜 n（n は引数で指定）までの自然数の中に存在

77
7
7

Ogiri9.indd 77

2013/06/17 6:49:13

TALK LIVETechLION vol.13
たなか く にひろMC : 法林浩之、馮富久
TalkGuests : 田中邦弘、紫竹佑騎、田中和紀、ほか

201３.７.２３ Tuesday

Place : 六本木 SuperDeluxe
Start 19:30 ～ Close 22:00（予定） Ticket : 前売り・予約 2700 円、当日 3200 円（1ドリンク込）

主催：ユニバーサル・シェル・プログラミング研究所

協賛：技術評論社、オライリー、ハートビーツ、クラウドワークス、他

後援：日本 UNIX ユーザ会、EMZERO、キャリアデザインセンター「エンジニア Type」

おもしろエンジニアトークライブ 「TechLION（てっくらいおん）」 詳細は WEB で！

TechLION

会員募集中

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

UNIX/Linux/ シェルスクリプトの可能性を極限まで追求します！
詳しくはhttp://www.usptomo.com にアクセス！
約 400 名の会員が定例会や勉強会で活発に交流をしています。

@usptomo

USP 友の会

USP MAGAZINE バックナンバー 好評発売中 !
vol.0 2011 spring~vol.4 2012 spring

vol.5 2012 summer vol.6 2012 autumn vol.7 2013 wintervol.8 2013 spring

なさい
在庫終了
です。

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

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

USP 出版

定価 500 円（本体価格 476 円）

ごめん

自炊不要

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

USP 友の会

USP MAGAZINE 2013 summer Vol.9

T U E S DAY 23 J U LY