【LLTVレポート】劇的ビフォーアフター、匠の技(後編)

システム統合にSOA? RDBMS? bashで十分!

2009/09/07

 毎年夏に開催される軽量プログラミング言語(LL:Lightweight Language)をテーマにした「LLイベント」。第7回目となる「LLTV」が、2009年8月29日に東京・中野で開催された。この記事ではプログラムの一部、「大改善!!劇的ビフォーアフター」をレポートする。前編では、Rubyによるfortuneコマンドの“増築”と、Firefox拡張によるslコマンドの実装というネタ系発表をレポートした。中編ではC言語にLisp風のマクロを取り入れ、lsコマンドのソースコードを約半分に削減する匠の技をレポートした。後編となる本記事では、売り場業務が滞りがちだった販売管理システムをbashコマンドで“建て直した”という劇的ビフォーアフターの発表をレポートする。

DBを捨ててテキストファイルに変換

tounaka.jpg パイプの匠、當仲寛哲氏

 「100万件ぐらいの検索なら、シェルだけでも1000分の数秒でできます」。こう豪語するのは「パイプの匠」として紹介されたUSP研究所の當仲寛哲氏だ。當仲氏らが改修した良品計画(無印良品)の情報システムは、一般的なPCにLinuxを搭載したシステムで、「シェルスクリプトだけで、バッチ処理、Web画面作成、運用監視などすべて行っている」という。

pipe.jpg 當仲氏らが手がける情報システムは、UNIXのパイプ処理をベースにしているという

 當仲氏らが改修に取り組む以前、無印良品の情報システムは、いくつか問題を抱えていた。商品検索、在庫確認、発注システム、社内電話帳など、個別システムがバラバラに存在したために、「顧客の商品の問い合わせに回答するために複数のシステムにまたがった作業が必要で、手間と時間がかかる」という状態で、店頭で顧客を待たせる結果になることが多かったという。

 當仲氏は、このシステムを、Linuxの標準コマンドと自作コマンド群、bashスクリプトで劇的に改善したという。

 まず、RDBに入っていたデータを「全部生データで吐き出せと、プレーンテキストに変えてしまった」(當仲氏)という。データベースは一切使わず、いわゆるマスターデータも含めてデータはすべてテキストファイル。「データベースと違って更新という概念がない。発生したデータはすべて残していく、大福帳方式」(當仲氏)。テキストファイルであるため、圧縮やバックアップにも特別な仕組みは不要だ。

コマンドを自作、パイプ処理でアプリ作成

 テキストとして記録したデータのカラムを足し合わせたり、最新のものを切り出したりといったテキスト処理だけで複雑な業務処理を行う。さまざまなテキストデータを加工、統合して、HTMLファイルまで作ってしまうという。それまでバラバラだったシステムも、「1画面で、すべての情報が見れたり、連携ができるようになった」(當仲氏)。

bash.jpg 作成するbashスクリプトは、コマンドを組み合わせた多段パイプ処理

 テキストの処理には標準コマンドのほか、「Linuxのコマンドでは足りないので、C、Java、Pythonで自作コマンドも作っている」(當仲氏)。例えば、フィールドのセレクト(self)、サムアップ(sm)、縦横変換(map)、桁揃え(keta)など自作コマンドやsed、awkを組み合わせ、「コマンドをパイプでつないで加工して、つなぐだけで最終的な形を作っている。長い場合にはパイプを30本ぐらい一気につなげて書くようなアプリもある」(當仲氏)という。bashのシェルスクリプトとして書かれたアプリのソースは、短く、読みやすい。データベースのようにスキーマがないため、項目の追加や変更も容易で、システムの改変や新規アプリの開発が機敏にできるのが特徴だという。「ユーザーのニーズを低コストであっという間に作れる」(當仲氏)。

 テキストファイルとはいえ膨大な商品点数を扱うため、1つのファイルに数十万行が含まれるケースもある。「(テキストファイルを検索したり書き換えたりすると)遅いんじゃないかと思われるかもしれませんが、最近のPCは非常に速いので、ファイルサイズが1GBぐらいあっても全件なめるのに10秒を切る」(當仲氏)。ソートも十分に高速で実用的という。

 當仲氏はデモンストレーションとして、26万レコードを含む商品データをgrepで検索しても、たかだか0.5秒で全文検索が終了することを示してみせた。さらに、商品名を1文字ずつ切り出して、それらの文字をファイル名に含むようにしてマスターファイルを分割。この分割したファイルを検索対象とすることによって100万点の商品検索であっても所要時間を1000分の1秒オーダーに縮めることが可能ということを実演してみせた。

grep01.jpg 26万行のマスターファイルをgrepしても0.5秒。26万行というと、そこそこのサイズに思えるが、実は68MBしかないし、今どきのPCは非常にパワフルなので検索やソート処理も楽々というわけだ
index.jpg 商品名の先頭文字別にマスターファイルを分割すれば、さらに検索は高速に

 サイロ化する業務システムの連携強化や統合といえば、「SOAやWebサービスによる疎結合」という話がITベンダの提案のお決まりコース。数十万点を超える商品データベースとなれば、もちろんRDBMSの出番だ。しかし、すべての企業の情報システムで、本当にそのような大げさな仕組みが必要なのだろうか? 當仲氏らの成功事例は、21世紀になった現在も、標準入出力とパイプ、小回りの利くコマンド群の組み合わせというUNIX設計哲学を踏襲したアプローチが通用する領域が、思いのほか広いことを示しているのかもしれない。

(@IT 西村賢)

情報をお寄せください:

Coding Edge フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

キャリアアップ

- PR -

注目のテーマ

ソリューションFLASH

「ITmedia マーケティング」新着記事

トランプ氏圧勝で気になる「TikTok禁止法」の行方
米大統領選で共和党のトランプ前大統領が勝利した。これにより、TikTokの米国での将来は...

インバウンド消費を左右する在日中国人の影響力
アライドアーキテクツは、独自に構築した在日中国人コミュニティーを対象に、在日中国人...

SEOは総合格闘技である――「SEOおたく」が語る普遍のマインド
SEOの最新情報を発信する「SEOおたく」の中の人として知られる著者が、SEO担当者が持つべ...