Shell Programming as a Glue Language and Technology

USP
MAGAZINE

ISSN 2187-9664

Vol.0
400yenfor the sophisticated shell scripters
第１特集
シェルスクリプトで
第２特集

NoSQL

CUI 徹底活用仕事術！

Google カレンダーはもういらない？
シェルから Evernote

対談「小さな勇気で世界を変える」
アジャイル開発と UNIX の共通項とは

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

精神への原点回帰」「洗練された広範な技術」をテーマに発刊に寄せて 「UNIXプログラムの楽しさを伝える雑誌を目指します
日々進化し続ける社会環境。
私たちエンジニアは、常に技術についての選択を迫られている存在と言えます。
1994 年、マイク・ガンカーズ（X Window System 開発チームの一員）は、
以下の 9 つの至上命令に集約される「UNIX 哲学」を創出しました。
1. 小さいものは美しい。
2. 各プログラムが一つのことをうまくやるようにせよ。
3. できる限り原型（プロトタイプ）を作れ。
4. 効率よりも移植しやすさを選べ。
5. 単純なテキストファイルにデータを格納せよ。
6. ソフトウェアの効率をきみの優位さとして利用せよ。
7. 効率と移植性を高めるためにシェルスクリプトを利用せよ。
8. 束縛するインターフェースは作るな。
9. 全てのプログラムはフィルタとして振る舞うようにせよ。
これらの UNIX 哲学は、複雑化した現代社会において、物事の本質を貫き、シンプルに強く生きていくための指標として、多くの人々の支えとなっています。
シェル（shell）は、ユーザからの指示を受けて解釈し、OS の中核部分に伝達することで、プログラムの起動や制御などを行うプログラムです。
あらゆるプログラムは、シェルからの起動が可能であり、シェルスクリプトに処理の順番を記述することで、複数のプログラムを操ることができます。
シェルスクリプトは、平易で短く書けるためユーザとの親和性が高いのも特徴です。
様々な言語で書かれたプログラムを自由に操るシェルスクリプトの可能性は無限大といっても過言ではありません。
現代に生きる私たちが直面する多くの課題も、この強くて柔軟な「UNIX の精神」と「シェルプログラミングの技術」によって解決できるのではないか、と私たちは考えます。
USP MAGAZINE は UNIX 精神の原点に立ち返り、
シェルプログラミングをはじめとする広範な「洗練された」技術を紹介することで、エンジニアの皆さんに改めてテクノロジーの楽しさ、深さを伝える雑誌を目指します。

USP MAGAZINE 編集部

Contents USP MAGAZINE 2011 spring
シェルスクリプトで NoSQL… …………… 3
CUI 徹底活用仕事塾！………………………… 魁！サーバ自警塾！！……………………… ログファイルに日付を付けて管理する…… シェルスクリプト事始め…………………… RedStar2.0 をインストールしてみた。… … 対談「小さな勇気で世界を変える」………… 原色 Linux 美女図鑑………………………… 11※ 薄字で記載している記事は、よりぬき版には収録されておりません。

2

USP MAGAZINE vol.0

広告募集中

USP MAGAZINE は USP 友の会会員の定期購読、IT 系イベント・勉強会での販売を予定しております。
お問合せ先

mag@usptomonokai.jp

特集１
シェルスクリプトで NoSQL

特集１．

シェルスクリプトで NoSQL

丈夫か！？

装で大
そんな実

シェルスクリプトで

NoSQL

Text & Illust : リッチ・ミカン＠松浦リッチ研究所
http://richlab.org/

何でもできる SQL に満足できずに NoSQL
あなたはシステムエンジニア。お店、学校、病院といっスが注目されています。これは ``Not only SQL''(SQL だけたお客を相手に、在庫、成績、カルテなど、これまで様々

じゃない ) の略とされる、SQL 系とは全く異なるデータベー

なデータを管理するシステムを開発してきました。そんなス。とはいっても、NoSQL という名の標準規格があるわ

あなたはきっと、MySQL、PostgreSQL といった有名どこけではなく、SQL を使わないデータベースソフトウェアのろの RDBMS 型 ( 本記事では SQL 系と称します ) のデータ総称です。近頃 NoSQL と言うと、SQL 系データベースがベースソフトウェアを用意し、SQL 文を駆使したプログラ

苦手とする領域の一つである「超高速データ処理」や「大ムを書いてきたことでしょう。

量のリクエストを捌く」を実現するために開発されたデーでもあれって結構大変じゃないですか ? インストールとタベースを指す場合が多いのですが、本来の言葉の意味かか起動とか設定とか…。自分のプログラムを作り始める前

らすればそれに限ることはないはずです。つまり冒頭に示に一苦労。納品時、お客さんのところでまた一苦労。無事したような、SQL 系データベースが大掛かり過ぎると思え納品が完了しても忘れた頃に障害発生で呼び出され、そこてしまう領域をカバーするデータベースがあれば、それもでもデータベースをいじらねばならず、復旧させるのにまNoSQL でしょう。

た一苦労。
タ処理をおよそ何でもできるように作られていると思大成です。ゆえに複雑な要求仕様にも応えられる局面が多く、選んでおいて間違いは無いでしょう。しかし扱うのがそれなりに大変なのです。何でもできるがゆえ、個々の目的に応じてどう動かせばよいかを覚えるのが大変です。またその通りに準備するのも大変です。

すみません︑ 設定にてこずってまして …

います。データベースソフトウェアにおける一つの集

そろそろ終わるよね？

SQL 系データベースは、世の中で必要とされるデーDB

冒頭のような経験をお持ちの方なら言うまでも無く実感していただけるでしょうし、そうでなくてもデータ
ベース技術者の認定試験というものが存在するところから想像がつくと思います。一言で言うと、SQL 系デー
タベースは「何でもできるかわりに大掛かり」に思えるのです。
一方で、最近 NoSQL と呼ばれるタイプのデータベー
3

シェルスクリプト NoSQL!?
実 はシ ェ ル ス ク リ プトがそんな NoSQL になると言っコマンドでもできるのです。双方の表現方法を対比してみた ら、 想 像 で き ま す か？ 名 付 け て「 シ ェ ル ス ク リ プ ト

ると、表 1 のようにいろいろ当てはまることがわかります。

NoSQL」です。シェルスクリプトといえば UNIX 系 OS でバッ

こうしてコマンドを見回すだけでも SQL 系データベース

チ処理を行うのによく使われる簡易な言語であるわけですが持っている機能に相当するものがゴロゴロあります。しが、一体それのどこにデータベース管理機能があるというかしそれぞれ単独ではあまり役に立ちません。バッチ処理のでしょうか。

とパイプラインの仕組みを使ってこれらを纏め上げ、実用

実は SQL 臭かったコマンドたち

的な処理単位を作る存在こそがシェルスクリプトなのです。

置き換えだけじゃない

厳密に言うとシェルスクリプト自体がサポートしてるのではなく、その手足となって働くコマンド群を組み合わせ

ここまでの紹介内容だと単に SQL 文の置き換えのようにることで実現可能になります。例えば、一般的な UNIX 系

聞こえてしまうかもしれませんが、じつはそれだけではあOS(POSIX 準拠 ) が持っているコマンドで join というものがりません。SQL 文では記述しづらいデータ処理を簡単にこあります。これの man( マニュアル ) を見てみてください。

なせる場合もあります。
例えばとある博物館で、1 時間毎の入場者数を記録した> man join
man の冒頭で、Linux なら「二つのファイルを読み、フィーテーブルがあったとします。今これを元に、開館時からルドが共通な行を結合する」等と書いてあるでしょうし、の累計入場者数を求めたいという要望が来ました。さて、FreeBSD に至っては「リレーショナルデータベースの操作」

SQL 文ではどう記述しますか ? 難しいですよね。ところがとハッキリ書いてあります。つまり、join コマンドというシェルスクリプト NoSQL なら簡単です。入場者数が記録のは SQL 文で言うところの JOIN 句 ( 厳密には INNER JOIN)されているファイルを awk コマンドに掛け、awk コマンドをこなすコマンドなのです。じゃあ WHERE 句 ( 行の絞り

内で一行ごとに入場者数を累計していく一行プログラムを込み ) は？…grep コマンド、あるいは awk コマンドででき書けばよいのです。

ます。それなら ORDER BY 句 ( 行の並べ替え ) は？…ほら、

さらにもう一つの例としてこういうのはどうでしょう。

sort コマンド使えばいいじゃないですか。しかもパイプで…とある学校で運動会が催されました。閉会後、白組と赤uniq コマンドに繋げば GROUP BY 句 ( 重複行を 1 行にまと組に分かれての団体競技の結果を表にしました。まず白組

める ) ができてしまいますよ。

から、棒倒しの得点、玉入れの得点、くす玉割りの得点、

こんなふうに、SQL 文で表現できる処理の多くが UNIX

つな引きの得点、を 1 行ずつ書き、続けて赤組の得点を同様に記してあります。でも同じ競技の得点を表１． 各種 SQL 句の働きに相当する UNIX コマンド

比較したいので、得点を横に並べ、白組と赤やりたい事

SQL 文での表現

UNIX コマンドでの表現

組の 2 行にまとめたいと思いました（→図 1）。

内部結合

INNER JOIN

join, join1 , join2 等

さてどうしますか ? これもシェルスクリプト

外部結合＊ OUTER JOIN

join2 , loopj 等

NoSQL なら簡単です。ユニケージコマンド

グループ化

GROUP BY, DISTINCT

sort | uniq

( 後述 ) というオープンソースの独自コマン

ソート

ORDER BY

sort

ドセットの一つ “yarr” コマンドを使えば一発

行絞り込み

WHERE, HAVING

grep, awk 等

列選択

SELECT 句の直後

awk, cut, self , delf

表の行結合

UNION

cat で複数ファイルを指定

表の排他制御LOCK TABLE(S)lockfile(Linux の場合 ) 等

行追加

INSERT, SELECT INTO“>>”( 追記リダイレクト )行更新

UPDATE

sed 等の後に “>”

行削除

DELETE

grep -v 等の後に “>”いのです。SQL 文を使う場合、既存の句や関

行数数え

COUNT 関数wc, gyo

数 ( あるいはそれの組み合わせ ) でできるこ

各種演算・変換( 各種演算子・SQL 関数 ) sed, awk, tr, comma などなど

※ 右列で斜体表記のコマンドは、ユニケージコマンドという独自コマンドです。( 後述 )4

USP MAGAZINE vol.0

でできます。
「独自のコマンド作れば一発なのは当たり
前じゃないか !」と文句を言われてしまいそうですが、シェルスクリプト NoSQL の利点の一つはそこなのです。無いものは作ればいとしかできないと思いますが、シェルスクリ
プト NoSQL の場合、標準コマンドに自分の特集１

シェルスクリプトで NoSQL

図 1．つまりこういうこと（縦並び表の横並べ）望む処理をこなせるものが無かったとしても、C 言語なり

Perl なりを使って自分で作ってしまえるのです。

「ユニケージコマンド」とは何者 ?
説明を後回しにしてきたユニケージコマンドについてそろそろ紹介しておきましょう。

表２． 公開中のユニケージコマンド（評価版 ver. 0.1）
コマンド名
comma

機能
3 桁毎にコンマをつける

delf

指定された列を除いて表示する

divsen指定列を 1000 で割る

getfirst

1 行目を出力するに、便利に使えるようにすべく、POSIX 標準コマンドには

getlast

最終行を出力する

用意されていないテキスト処理コマンドを収録しているこ

gyo

行数をカウントする

han

仮名文字を半角にする

join0

INNER JOIN する①

join1

INNER JOIN する②

join2

RIGHT OUTER JOIN する

kasan

累計値を求める

keta

列インデント ( 桁揃え ) をする

loopj

FULL JOIN する (3 つでも 4 つでも可 )map

縦並びのデータを横並びにする①

SQL にあって標準コマンドに無い機能を補うものや逆に

ratio

全行に対する構成比を求める

SQL には無い機能を実現するもの、できなくはないものの

retu

列数をカウントするself指定された列を表示する

sm2

グループ化 (GROUP BY) して合計 (SUM) する①

sm4

グループ化 (GROUP BY) して合計 (SUM) する②

sm5

グループ化 (GROUP BY) して合計 (SUM) す
る③

tarr

横並びのデータを縦並びにする

tateyoko

表の列と行を総入れ替えする

up3

2 つ表を UNION してソートする

yarr

縦並びのデータを横並びにする②

初のセクションでは、各店舗の日毎の売り上げが入っていysum

列 ( ＝横方向 ) の総和を求める

るファイルから 2007/12/03 週の全店舗商品販売数を集計

zen

仮名文字を全角にする

ユニケージコマンドというのは、USP 研究所が作成している UNIX 系 OS 向け独自コマンドセットです。一番の特徴
は、シェルスクリプトによるデータベース管理をより手軽とです。現在そのうちの 26 コマンドがオープンソースとして一般に公開されており、個人の非営利利用であれば自由に利用・改変できるようになっています。

使い方はこんな感じ
まず、その 26 コマンドをさらっと紹介します（表２）。

記述すると複雑になってしまうものを 1 コマンド化したもの、さらにコンマを打ったり (comma) 桁揃え (keta) をしたりといった表示を整えるコマンドが用意されています。
今回はさらに、このコマンドを作成した USP 研究所が実際の現場で使っているコードを見せてもらいました ( →次
ページのコード )。その特徴が現れている箇所をほんの少し紹介しましょう。
このコードは 3 つのセクションに分かれています。最ユニ ケ ー ジ コ マ ンドセット評価版 は U S P 出 版 か ら 頒 布 さ れ て い ま す 。 詳 し い 情 報 は こ ち ら か ら 。

http://www.usp-lab.com/pub/5

し て い る よ う で す。awk を 使 っ て
2007/12/03 週の行を抜き出し、さ# 変数の定義
dir=$HOME/REPORT/HANBAIらに self を使って商品コードと売れ

datd=$dir/DATA数の列を抜き出し、最後に商品毎のtmp=/tmp/$$

売れ数の合計を出しています (sm2の引数 "1 1 2 2" は 1 列目「商品コード」でグループ化して、2 列目「売数」# 集計期間start=20071203
end=20071209の合計を求めるという意味 )。これ
をテンポラリーファイルに書き出# 販売データの集計

し 3 つ目のセクションで使います。

######################################################

2 つ目のセクションでは、在庫デー#

URE

1. 店 2. 商品 3. 日付 4. 売数 5. 売上 6. 値引#$tmp-ure

1. 商品 2. 期間売数合計

タを同様に集計してやはりテンポラ

awk '$3>="'$start'"&&$3<="'$end'"{print}' $datd/URE|

リーファイルに書き出しています。

self 2 4|

そして 3 つ目でこれらを JOIN して

sm2 1 1 2 2> $tmp-ure

います。全ての JOIN で商品コードをキーにして、最初の loopj では売# 仕入データの集計######################################################

り上げ数と仕入数と在庫数を FULL

# 在庫データの集計

JOIN、 次 に 元 売 数 と INNER JOIN、######################################################

さらに商品名と INNER JOIN してい#ZAIKO. 日付 1. 店 2. 商品 3. 日付 4. 在庫#$tmp-zaiko 1. 商品 2. 最終日在庫数合計ます。このコードを通せば全店舗でどの商品がどれだけ仕入れられて売

self 2 4 $datd/ZAIKO.$end|

sm2 1 1 2 2> $tmp-zaiko

れたか一目瞭然、というわけだと思います。
筆者はコードの意味について一行
一行解説を受けたわけではないので# データの連結####################################################### $tmp-data : 1. 商品 2. 商品名 3. 原価 4. 売価 5. 売数 6. 仕入数 7. 在庫数
loopj num=1 $tmp-ure $tmp-sire $tmp-zaiko|

すが、ユニケージコマンドリファレ

join1 key=1 $datd/GENBAI|

ンスを見ながらちょっと眺めただけ

join1 key=1 $datd/NAME> $tmp-data

でわかってしまいました。そして、やっている事が実に SQL 臭いといいますか…。いや、そうはそういった文章を扱う仕事であるから、事務作業をシェではなくて、今まで SQL 文で表現していたものがこういう

ルスクリプトによるデータベースに置き換えることはごくふうにしてシェルスクリプト NoSQL でも容易に表現でき自然にできるとのことです。

てしまうということですね。

「紙書類の置き換え」が発想の原点

シェルスクリプトで数々のテキスト処理コマンドを駆使してデータベース相当の処理をするなら、データはテキス
トファイルで持たせなければならないわけですが、これはところでなぜこのような 26 コマンドが公開されるに至っ

紙の書類の置き換えという発想と相性がよく、互いに都合たのでしょうか。コマンドセット公開元である USP 研究所がよいと言えます。従ってテキスト処理コマンドを自作しに話を聞いてみると興味深い内容でしたので紹介します。

ていく方針になったそうですが、ここでコストという企業

これはデータベース NoSQL がどういう用途に向いている

ならではの発想が色濃く反映していくことになります。

のかにも繋がる話でもあります。
今回伺った話によれば、まず、シェルスクリプトでデー独特のラインナップになった理由

タベースを構築しようという発想の原点は「紙書類の置き先に紹介したユニケージコマンドを見て、筆者は二つ程換え」であるといいます。書類というのは基本的に文書 ( つ気になったことがあります。一つは名前です。日本語が名

まりテキスト ) であり、従って紙の書類はテキストファイ

前になっているコマンドが目立ちませんか。筆者は、オールで十分置き換えられるのだそうです。そして、事務作業

プンソースとして広く公開するなら英語に統一すべきじゃ

6

USP MAGAZINE vol.0

特集１

シェルスクリプトで NoSQL

ないかと感じましたので理由を質問してみました。すると

も質問してみましたが、理由はやはりコストから来ている「日本人であるお客様や自分たちにとってわかり易くするこそうです。頻繁に行われるデータ処理で、標準コマンドでとが大切。その方がプログラミングやメンテナンスが早くの記述が面倒臭いものに対してはあえて自作コマンドを作簡単に行える」という回答でした。本記事の序盤で「SQL成するのだそうです。冷静に考えると、最後に例示した wc

は大掛かりな…」と述べましたが、大掛かりさを取り除く

も行数以外に余計なスペースやファイル名が併記されます。

上で一つ合理的な判断だと思います。ちなみに、逆に日本

これらを取り除くのにいちいち awk '{print $1}' をなどと後語ではないコマンドも混在している理由も尋ねてみました

述しなければならない手間を考えると…、うーん納得です。

が、それは「日本語にするとかえって長ったらしくなるから」

このようにして、開発や保守に掛かるコストを強く意識ということで、実用性とのバランスでそのようになったのし、業務の現場で求められるシステムという命題に応えるでしょう。

べく作り出したものが、ユニケージコマンドであり、あのもう一つは機能です。ユニケージコマンドを使わずとも、ような独特のナリやラインナップになったのだそうです。

標準コマンドで書ける処理がいろいろあります。ratio( 累大掛かりな SQL 系データベースの代わりを担うための選択計を求める ) は awk でできることを既に示しましたし、肢としてシェルスクリプト NoSQL を利用しようと考える

self( 指定列を取り出す ) や delf( 指定列を除く ) 等は awk やなら、実用性本位で生まれたこのコマンドセットはとても

cut コマンドでできます。最たる例は gyo( 行数を数える )有用だと思います。

で、こんなもの wc コマンドでできます。この点について

そんな実装で大丈夫か ? ― パフォーマンス
ここまでシェルスクリプト NoSQL の機能的な話をしてきましたが、パフォーマンスは大丈夫なのでしょうか。シェところですが、誌面の都合もありますので 1 競技 2 種目としました。テストは次のようにして実施しました。

ルスクリプトは ( ついでに言うと中で頻繁に利用している●準備●

awk コマンドも ) コンパイル要らずのインタプリタ型言語

1. SQL の INTEGER 型 で 表 現 可 能 範 囲 (-2147483648 ～で、しかもデータの実態はテキストファイル。いくら手軽

2147483647) で乱数を awk 等で 100 万個作ります。こな手法とはいえ、使い物になるスピードが出るのかと疑いの時、値の重複があるようにします。これはグループ

たくなります。どこからともなく言われそうです。「そんな化作業もベンチマーク内容に含ませるためです。どの実装で大丈夫か？」と。そこで、簡単ではあるもののベン程度重複させるのがよいかについては様々意見がある

チマークテストをしてみました。

でしょうが、今回のテストでは 2% ほどを重複させてみベンチマーク結果は意外なものに【比較対象】ました。
2. SQL 系データベースでは、INTEGER 型カラム 1 つからなるテーブルと、VARCHAR(11) 型カラム 1 つからなる

広く利用されている SQL 系データベースと比較するのがテーブルを用意し、それぞれに対してこの乱数列 100

わかりやすいと思いますので、MySQL および PostgreSQL

万個をインポートします。そしてインポート後にはどと比較することにしました。バージョンはそれぞれ 5.5.8、

ちらのカラムにもインデックスを作成し、PostgreSQL

9.0.2、どちらも執筆時の最新版です。それぞれ同じホス

では念のため VACUUM も実施しておきます。一方シェトにデフォルトインストールしました。対するシェスクリ

ルスクリプト NoSQL では、1 行 1 乱数のテキストファ

プト NoSQL は、そのホストに入っている /bin/sh をはじイルとして置いておきます。これで準備完了です。

めとするコマンド群とします。もう少し具体的に記しますと、ホスト OS は FreeBSD 8.1-RELEASE で、sort コマンドも GNU 版ではなく BSD 版にしてあります。これは筆者がFreeBSD 使いであり、たまたま手近にこのような環境があっただけです。

【比較内容】
本来なら様々なメニューを用意して徹底的に比較したい7

SH-NoSQL が10秒でわかる

2/bin/shダイ(ビンシュダイ) #1●テスト●
3. グループ化して昇順ソートさせ、画面に結果が表示され始めるまで ( され終わるまでではない ) の時間を計測します。具体的には各々のコンソールで次のコマンドを実施します。
◆ MySQL および PostgreSQLSELECT num FROM tbl GROUP BY num ORDER BY num ASC;
◆シェルスクリプト NoSQL( 数値扱いの場合 )cat tlb.txt | sort -k 1n,1 | uniq > /dev/null◆シェルスクリプト NoSQL( 文字列扱いの場合 )cat tlb.txt | sort | uniq > /dev/null
計測の仕方を詳しく示しておきます。MySQL の場合はmysql コマンドが標準で表示する結果、PostgreSQL の場
合は psql コマンド内で \timing という設定を行うことで表示される結果、シェルスクリプトの場合は結果を /dev/nullに捨てるまでの動作を time コマンドで計測した結果としました。

【テスト結果と考察】
OS による実行時間のゆらぎの影響を抑えるため、それ彼は伝説のＳＱＬハンマーと鋼鉄の鎧を身につけ、万全の態勢で戦闘に臨んだ。

え、

ぞれ 5 回実施して平均値で比較したのですが、結果はこうなりました ( 表３)。
どうですか、意外にもシェルスクリプト NoSQL の圧勝です。なかなかやりますね。今回の比較では、乱数列を数値扱いする種目、乱数列を文字列扱いする種目、という 2種目を用意したわけですが、SQL 系は数値扱いの方が速く、しかし、
ＳＱＬハンマーは重かった…

逆にシェルスクリプト NoSQL は文字列扱いの方が速いという結果が出ました。SQL 系は、数値をコンピューター的により扱い易い数値として格納できるから数値扱いの方が速いのでしょう。一方シェルスクリプト NoSQL では文字列のまま格納していますから、数値ソート時は内部で数値に変換するという処理を挟むこととなり、結果として数値

彼は、。

扱いの方が遅くなってしまったのでしょう。それでも 2 位に 2 倍以上の差をつけていることには目を見張るものがあります。
それにしてもシェルスクリプト NoSQL が 1 位になった

ＳＨ(主)は言っている、
ここで死ぬ運命ではないと…

表３．ベンチマーク結果

実装

つづく
8

USP MAGAZINE vol.0

100万行グループ化ソート所要時間（数値扱い）（文字扱い）

MySQL

22.98 秒

24.98 秒

PostgreSQL

9.56 秒

14.49 秒

4.39 秒

3.97 秒シェルスクリプト
NoSQL※ 5 回の平均値。また、コマンド入力から表示開始直前までの所要時間です。

特集１

シェルスクリプトで NoSQL

パイプライン “|” を使ったコマンドを記述すると…

コマンドプロセスは同時に生成される。

流れ作業的に、各コマンドがこの時 CPU がマルチコアならば、各コ並列実行され、全体の処理速

アに割り当てられる。

度が上がる！

理由はどこにあるのでしょうか。それはシェススクリプト

なければなりません。そのようなプログラムを作るのは少々の低水準性にあると思います。この記事の冒頭で SQL 系

手間です。ところがシェルスクリプト NoSQL はこの恩恵

データベースは「何でもできる代わりに大掛かり」と述べを簡単に受けられてしまいます。なぜなら、awk して sort

ましたが、「何でも」を実現するために何重ものレイヤーのして uniq して…というように、既に細かな粒度でプロセス上で動いていると考えられます。つまり、関数やライブラが分かれているからです。

リー・モジュールを何重にも呼ぶことで「何でも」を実現

awk して sort して uniq して…というように多段の処理しているのです。これに対しシェルスクリプトを使ってデーをさせる際は “|”( パイプ , パイプライン ) で繋ぎますね。こ

タベースを実現する場合、SQL 系ほど完璧な「何でも」をれは、最初のプロセスが生まれて、処理終わったら次のプ

追求せずに awk や sort いった原始的なコマンドで実現してロセスに生まれ変わって…、という動作ではありません。

おり、レイヤーが薄いおかげで高速性がもたらされているパイプで繋がれた全てのプロセスが同時に生まれ、各自デーのでしょう。

タが流れて来次第処理をするのです。まさに工場の流れ作

マルチコア CPU で鬼に金棒
シェルスクリプト NoSQL の強みは実はもう一つあります。それは、マルチプロセッシングによる恩恵です。
CPU は 4,5 年くらい前から、クロック数を上げるのでは業、つまりパイプラインなのです。だからコア数 ( もしくはプロセッサ数 ) が増えれば、これらの各プロセスが綺麗に分散して配置され易くなるというわけです。元々細かい粒度でプロセスが分かれていることにより得られる恩恵なのです。

なくコア数を増やす方法で性能を上げるようになってきま

先の比較はシングルプロセッサー PC 上で行いましたが、した。とはいってもこの恩恵を受けるには、スレッドやプ

最近の 6 コア CPU を搭載した PC 上で比較したらどういう

ロセス数を増やして並列処理するようなプログラミングでことになるのか、興味深いところです。

賢く使おう、シェルスクリプト NoSQL
しかしシェルスクリプト NoSQL がこの比較で最速だっないようシングルプロセッサー PC で実施したりと配慮はたことについて、「単に有利な種目を選んだだけでしょ」としたつもりですが、確かに苦手とする種目が思いつかないいう指摘もあることでしょう。一応 SQL 組にはインデック

わけでもありません。

スを持たせたり、またシェルスクリプトの強みが発揮され

例えば、SQL で言う UPDATE( レコードのサイズが変わ9SH-NoSQL が10秒でわかる/bin/shダイ(ビンシュダイ) #2

る場合 ) や DELETE は苦手なはずです。シェルスクリプト

SH-NoSQL が10秒でわかる#1

NoSQL はデータをテキストファイルで持っていますから、/bin/shダイ(ビンシュダイ)UPDATE や DELETE が行われるとファイルを途中から以降
全部書き直さなければならないことになります。よって、ファイルが大きかったりそれらの要求が頻繁であったりするほど不利になるであろうことは想像に難しくありません。

UPDATE と DELETE 操作の考え方
UPDATE と DELETE、データベースにとってどちらも重要な機能です。では、前述の指摘に基づいて、シェルスク
リプト NoSQL は大して使えない (= スケーラビリティーの低い ) データベースという評価になってしまうのでしょうか。いえいえ、そんなことはありません。前述の指摘では、
UPDATE と DELETE の表面的な操作を真似て、本質的な働きを見ていないことに問題があるだけです。
この問題を解決するためのアプローチは色々考えられますが、例えばシェルスクリプト NoSQL の原点が「紙書類の置き換え」にあることに基づいて考えてみましょう。
もし UPDATE や DELETE に相当する作業が紙の上で正直

彼は反省し、
ビキニアーマーにＳＨ刀(手刀)という超軽量装備に着替え、戦闘に臨んだ。

に行われていたとすれば、修正が必要な箇所から後ろを一

彼は

旦全部消して書き直さなければならないことになります。
伝説のＳＱＬハンマーと鋼鉄の鎧を身につけ、でも実際はそんなこと殆どしません。せいぜい書き直した
万全の態勢で戦闘に臨んだ。

い箇所を含むページをバインダーから取り除き、直したページを挿し込むくらいでしょう。一冊作り直すという非効率な作業は通常求められないはずです。そう考えれば、デー

しかし、
ＳＱＬハンマーはきます。あとはファイルシステムという階層管理が得意な
重かった…
タを多くのファイルに分散して持たせればよいことに気づシステム ( これも一種の NoSQL データベースと言える ?)をうまく組み合わせれば、上手に管理できるはずです。

このように考えれば、シェルスクリプト NoSQL が苦手

身軽になり、素早さを手に入れた彼は、あっさり敵を倒した。
何ということだ！！

とする処理は実際それほど存在しないはずなのです。もし動作が重いと感じるようであれば、紙書類でやる場合を思い浮かべながらデータの持たせ方を考え直すべきなのです。

そもそも NoSQL は適材適所に…
ＳＨ(主)は言っている、
ここで死ぬ運命ではないと…

万能な SQL 系が既にある中で、あえて次々生まれてきた
NoSQL。ある意味 SQL 系の万能さを犠牲にして特性を持たせています。ですからその特性を理解し、的確な使い方、かつ適材適所な使い道を考えることは必然と言えます。シェ
ルスクリプト NoSQL とて例外ではないでしょう。
しかし「シェルスクリプト NoSQL の特性は一体何なの

めでたし
めでたし

か？」これを理解すれば、適材適所な用途が当初の想像をは驚くことでしょう。

10

USP MAGAZINE vol.0

つづく

遥かに超えて次から次へと見つかることに、きっとあなたLinux 好きの女子と Linux の素敵な関係を紹介するこのコーナー。第１回目となる今回は、Linux

原色

Linux
美女図鑑

第１回
Manami さん（Linux 女子部）

女子部を主催する Manami さんが登場です。カメラや着物が好きで活動的な Manami さんですが、実は LPIC レベル 3 試験の認定者！ Linux の
実力も折り紙付きです。そんな Manami さんにLinux の出会いと、これからの目標について伺いました！（編集部）

ProfileTwitterID : @mana_cat
Blog http://mana-cat.blogspot.com/
Facebook http://facebook.com/manami.fukunaga

Ｑ）Linux との出会いを教えてくださいＡ）19 歳のとき、個人 Web サイトを立ち上げたのがきっかけです。
19 歳の頃、個人 Web サイトを立ち上げたのがきっかけで、Linux と出会いました。当時は Blog という言葉もなかった時代で、CMS をいじって試行錯誤しながらケータイ向けのサイトを作っていましたね。因みに、なんでケータイ向けサイトかとい
うと、周りの友だちが PC を持っていなくて、ケータイからじゃないと見れなかったからです ( 笑 )Q) 普段は Linux とどう付き合っていますか？
A) 仕事で EC サイトの運用を担当！
大学卒業を機に熊本から上京し、お仕事でご縁があって大手 EC サイトの運用を担当することになりました。そのとき、Linux のほか、Solaris、FreeBSD とも出会うことができました。なので、いまはお仕事で Linux と深く関わってるかなと思います。自宅では、おうちサーバとして Fedora を使っています。あと Linux じゃないけど、Solaris (SPARC) のワークステー
ションもあって、検証機として使ってます。

Q)Linux のどこが好き？
A) 初心者でも使いやすい。仲間が多いのも魅力。
Linux の良いところは、どんな人でもとっつきやすいところ。初心者が挫折しにくく、馴染み易いことは大事ですよね。
あと、周りに Linux 使っている人が多くて仲間もできやすいし、関連書籍も多く、セミナーや勉強会も充実していて、な
おかつ LPIC などの認定資格がありスキルアップしやすい環境だと思います。こういったLinux を取り巻く活発的な環境が、私は好きです！

Q) これから、Linux とどう付き合っていきたい？
A) みんなの「やる気」を応援したい！
Linux を使っている女性は、とても勉強熱心なんです！ Linux 女子部を立ち上げたときも、向上心の高い Linux 女子が多いことから、自然とミュニティ設立にまで至りました。私はみんなの「やる気」を応援していきたいと思います。これからいろんなイベントをコミュ
ニティで提案していき、Linux 女子が楽しくお仕事できるようなキッカケになればいいな、と思っています。今後の Linux 女子部の活動にご期待ください！！
有楽町のカフェでお会いした Manami さんは、とてもやわらかい印象で、Linux 女
子部に、男女問わずたくさんの人が集まる理由が分かる気がしました。これからも活発な活動を予定している Linux 女子部公式ホームページは、
http://sites.google.com/site/linuxjoshi/ です。
11

UNIX/Linux/ シェルスクリプトの可能性を極限まで追求します！
【入会特典】
・入会時「ちんじゅうちゃん」グッズプレゼント。
・エンジニアの好奇心を刺激する内容満載「USP MAGAZINE」が年４回お手元に届きます。
＜今後の特集予定＞

USP 友の会
マスコットキャラクター
「ちんじゅうちゃん」

シェルスクリプトで Hadoop、言語対抗コマンドバトル・ロワイヤル
Android で CUI!?、運用監視もシェルで実装
お願い！最新技術ランキング……等々
・各種イベント開催時に会員向けサービス（割引）予定。
【入会希望の方は】・USP 友の会ホームページの申込フォームより入会をお申込いただいた上、
年会費 2,000 円を所定の銀行口座にお振込みください。

編集・発行人 鹿野恵子 発行・発売 USP 友の会 〒 105-0003 東京都港区西新橋 3-4-2 SS ビル 3 階
有限会社ユニバーサル・シェル・プログラミング研究所内     電話 03-3432-1174

USP友の会
会員募集中

USP MAGAZINE vol.0

シェルでつながる技術の輪！
なんでもありのグルーコミュニティ

詳しくはにアクセス！
＜イベント予告＞TechLION
本物のコンピュータ技術とは何か？
TechLION は「本物」とエンジニアを結ぶトークライブ。
IT という名の荒野を生き残る秘訣がここにある。

2011/03/31 Thursday
OPEN18:30/START19:30@Shinjyuku Naked Loftcharge 1,500yen(adv)

出演： 宮原徹、法林浩之、上田隆一、他

ローソンチケットまたはネイキッドロフトのウェブサイトにてチケット好評発売中！！

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

http://usptomonokai.jp