トップ «前の日記(2014-06-26) 最新 次の日記(2014-07-04)» 編集

日々の破片

著作一覧

2014-06-29

_ ためになる本

例によってアスキーというかカドカワの鈴木さんからもらった本を読んだので紹介する。っていうか、最近、このての記録がやたらと多い気がするが、もらった本のうち、何冊かは(実はここに書いてないけどもっと山ほどもらっている)こりゃおもしろそうだとか、今まさに欲しい本だとかで読むし、読めば記録するんだからしょうがない。

で、シェルスクリプト高速開発手法入門だ。

おもしろかった。でも、これは弱ったな(本当に弱っているのではなく、なんか照れているような、そんなニュアンス)。時代の風をびゅんびゅん感じるぜ。

おれは、今、Insider.NETにASP.NETによる軽量業務アプリ開発っていうのを連載させてもらっているんだけど、以下の諸点において、著者と同じ空気を吸っているようだ。

・コマンドラインとエディターが楽。

・後付けのソフトウェアをできるだけ避けて箱をシンプルに保つ(ただし、本書の著者はMACが好きらしくHomebrewしている)。

・少ない(注しておくと、少ないのは領域だけだ。その領域内については相当知っている必要がある)共通的な知識でまかなう。

もちろん技術的諸要素は全然違うのだが(おれはWindowsだが、こちらはMACとUbuntu(かつ補助的にしかし技術的にOpenBSD+FreeBSDが入り込む)、おれはC#+PowerShell(つまりCLR)、JavaScriptだが、こちらはbash、GNUツールズ(gawk, gsed, ggrepなどなど)、JavaScript、おれはSQL ServerだがこちらはUFS系)、多分、それ以上に近いものがある。

で、この本を一言で片づけると、次のようになる。

1)今すぐ仕事の現場で使える本が読みたい→他の本を読むべし

2)コンピュータをまともに使う方法を知りたい→この本を読むべし

おそらく1)の人が、そういう要求を持っているということは、既に手遅れだ。おそらくその現場にはEclipseかVisual Studioがあるから、それの操作方法と、関連したフレームワークについて学習するほうが良い。しかし余裕があるのなら、その余裕を2)として、この本の読者となれる。

あと、少しレイヤーが変わるが、3)Unixコマンド(特にgrep、sedやawk)を覚えたいがマニュアル読むのかったるいから誰か使い方教えてな人は、これを読んで使われ方を見ると間違いなく参考になる。

書き方はいささか馴れ馴れしく押しつけがましいので、そういうのが嫌いなら避けたほうが良いかも知れないが、おそらく相当に意図的にやっていそうだ。これも雰囲気というかみんなが嫌いな『空気』の問題だが、Unixスタイル(ある意味ではハッカースタイル)のノリがある。

最初にテキストがある。テキストをコマンドを通すことで変形する(ccを通せば実行可能なプログラムになるし、nkfを通せばエンコーディングが変わるし、grepを通せば目当ての文が見つかる)。

次にパイプがある。プロセスがテキストを出力すると次のプロセスがそれを入力としてテキストを出力すると別のプロセスがそれを入力して……というのがうまいことキューされて並列に動作する。

少なくとも現在のコンピュータはUnix文化内だから、結局のところ、Unixスタイルが最低限身に着けておくべき作法(この用例では確実に「さほう」)なのだ。それが具体例つきで学べる本だ。最近だとあまり他に例がないんじゃないだろうか。その観点からは相当な価値がある。

全体は一緒に作ろうチュートリアル的な構成になっているのだが、書き方もあって、むしろ開発日誌(という読み物)っぽい。

まず、WordPressのデータの保持方法にうんざりし、ブラックボックス化されたプラットフォ-ム部を解析する面倒くささにうんざりし、なんでUnixをある程度わかっている俺様が、Unix上で動くソフトウェアをいじくるのにこんな無駄な苦労をしなければならないんだ? というモティベーションが説明される。せっかくUnixというテキスト処理のためのワークベンチを使っているのに何かが間違っている。

そもそもWebって、テキストベースのヘッダ変数とリクエストに対してテキストベースのレスポンスを返す仕組みじゃん。

ならば、シェルで十分以上だ。では諸君、戦争だ。と物語が始まる。

ただ、ばんすか原理主義的な雰囲気を漂わせながら、shではなくbashとか、whileやforを使うのは悪手、できるだけseqかxargsとパイプとか、こだわるところはこだわる。というか、forやwhile使わずにseqやxargsばかり使っているので見た目は関数型っぽい(というわけで実際にはシェルそのもののプログラミングというよりは、grep、awk、sed、seq、xargs、[の世界を効率よく組み合わせるためのシェルプログラミングだ。もちろんcurlやopensslも使うけど)。

最初はMacを使っている人のためのHomebrew導入講座で、続いてデータ構造の決定とディレクトリ、ファイル、日時操作のシェルプログラミング、続いてHTML吐きだしのための仕組みとシェルプログラミング(というか、grep、sed、awk)、さらにtimeを使って、何をどうするとどのくらい処理時間がかかるか、キャッシュ(memcachedとかじゃなくて、OSのファイルキャッシュ)のききによってどのくらい影響されるかどうすれば有効に使えるか、さらにTwitter APIをシェルで呼ぶ(OAuthのパラメータをnkf、oepnssl、awk、sedを駆使して作ってcurl)とかした後に、ログ解析のシェルプログラミング。

という物語(実際、読み物として読める――ただしsedのパラメータは除く)にはさまって、こう書いたほうが良いとか、こう書くのが素敵だとか、こういう書き方は汚いとか、このコマンドはこういう問題があるからこう避けろとか、たとえばsshを使ってリモート経由のパイプとかheadはパイプをbreakするからやばいのでawkで回避しろとか、というような項が入って来る。

さらに第二著者によるガチなBSD技術コラムが入る。これがまたおもしろい。

そんな具合に全体の雰囲気そのものがUnixスタイルっぽくて楽しい(たとえていうならば、先輩のコンピュータ談義を聞きながら教えてもらっているような感じだ。反面、最初に書いたようにちょっとはなにつくところもあるのだけど、こういうスタイルはある種の伝統芸のような気がする)。

フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門(上田隆一)

一言でいえばおもしろかった。知らなかったこともあって、そういう点は参考になった(xargsとか完全に覚えたっぽい)。(しかしおれはシェルプログラミングではWebアプリケーションは作らないだろうなとも確信したけど)


2003|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|04|05|06|07|08|09|10|

ジェズイットを見習え