こちらもオススメ!!

ハンドブック同人誌を同時購入すると
400円値引き!

コンパチブル・シェルスクリプティング

700円→300円

現在,カゴに 冊入っています


                  linkto_sitemap  
  menu_top   menu_aboutus   menu_coterie  
    menu_inquiry   menu_link   menu_blog
発行物紹介
 
発行物一覧

  ▼次回イベント情報

  ▼すべての発行物

  ▼ご注文方法

頒布中発行物

  速読とフラッシュ暗算…できる?

  シェルスクリプト人類のWebSocket

  先生、わかりません!

  トキデリ

  電車バス断ち 自転車生活を 1年8カ月 続けた結果

  File/Dir Hacks ver.1.0

  File/Dir Hacks ver.0.2

  コンパチブル・シェルスクリプティング

  初めてのPOSIX原理主義

  平成最後のフレンズかんそくたい

  そんなにあるのか チップスター図鑑

  ポプテピツイ

  フレンズかんそくたい

  ついったーちほーの最大瞬間風速

  Win/Mac/UNIX
すべてで20年動くプログラムはどう書くべきか

  あの紀文(ひと)は今、キッコーマン。(2版)

  鳥と太陽の紋章を受け継ぎし者たち

  すべてのUNIXで20年動くプログラムはどう書くべきか

  キッコーマンの
飛んでる豆乳
飲みたい紀文

  本当は身近な
うつ病のはなし

頒布終了発行物

  あの紀文(ひと)は今、
キッコーマン。

  Shell Script
ライトクックブック
2014-2016

  すべてのUNIXとWindowsで20年動くプログラムはどう書くべきか

  Shell Script
ライトクックブック
2014-2015

  ななか Inside Press vol.5

  リッチな
コンピューター入門

  リッチな
サーバー構築
VOLUME1 DS

  Shell Script
ライトクックブック

  笑顔になりたい

  Googol Mac
Like Racks 第1版

  リッチな
サーバー構築
VOLUME2

  できねPROmini
Chromium OSクラウドコンピューティング

  できねPRO
そろそろIPv6事始め

  できねPRO
快適データ通信

  TeX同人誌用
栄養補助食品
 
  カバー・タイトル
 
表紙:すべてのUNIXで20年動くプログラムはどう書くべきか

すべてのUNIXで20年動く
プログラムはどう書くべきか

デプロイ・保守に苦しむ エンジニア達へ贈るシェルスクリプトレシピ集

松浦智之 著,USP研究所 監修,C&R研究所 発行

2015年7月24日 初版発行

A5版 2色刷 256ページ
本体2,500円+税200円

ここで買えます現在,カゴに 冊入っています

Amazonでも注文受付Amazonで注文

目次を表示(別ウィンドウ)正誤表(2016/10/29更新)

▲トップに戻る


  本の内容
 

「速い」「簡単」でも,流行り廃りの激しいソフトはもう懲り懲り!

「高速です」「簡単です」とは主張する一方で,「どこの環境でも動きます」とか,ましてや「長年に渡って動き続けます」などと主張する言語やライブラリー,フレームワークはほどんど聞かない.それらがバージョンアップしたり廃れたりするたび,苦労を強いられてきた.

そんな苦労から解放してくれる言語とは,意外にも書き捨て言語と言われることの多いシェルスクリプトなのである.さらに意外に思うかもしれないが,シェルスクリプトでも実用的な速さのプログラムが書けるのである.ただしそれには,POSIX規格の遵守やUNIX哲学の実践が欠かせない.

本書では,プログラミング上よくある課題を,極力POSIXの範囲で,かつUNIX哲学的アプローチで解決しているシェルスクリプトを多数例示し,高い可搬性・可用性を持ちつつも実用的なプログラムを書く方法を紹介する.

本書でわかる,5つのこと

  1. 環境依存せず,長持ちするプログラムの書き方(環境依存を引き起こす落とし穴)
  2. 環境依存しない正規表現の書き方
  3. シェルスクリプトで処理を行うための,たくさんの小技(レシピ)
  4. シェルスクリプトも,意外と速くて機能も豊富という事実
  5. プログラム制作でも参考になる,UNIX哲学

本書の実用性を疑う人が見るべきデモ

「シェルスクリプトで,しかもPOSIX原理主義でマトモなアプリなんて作れるわけないだろ.寝言は寝て言え!」と思っている人は次のアプリ(デモ)を見てもらいたい.

  • Ajaxで時計を更新するデモ
  • HTTPセッション管理をするデモ
    • シェルスクリプトで実装したCookieを駆使
  • 郵便番号から住所を引くデモ
    • 日本郵便が提供しているCSVデータをシェルスクリプトでパース
    • データは全部で約14万レコードだが,果たして何秒で答えを出すか?
  • 東京メトロ車両位置情報表示プログラム「メトロパイパー」
    • Web APIからJSONで渡ってくる車両位置情報をパース
    • HTMLをプログラムから分離,Webデザイナーとの協業を実現
  • 侵略型ショッピングカート「シェルショッカー1号男」
    • このサイト自体がデモサイト(たとえばここ
    • PayPal Web APIを叩き,オンライン決済が可能
    • よそのCMSやサイトをショッピングカート化することも可能(→
    • スライドも参照

実用性はいかがだろうか.本書の中でももちろん紹介&解説.

▲トップに戻る


  同人誌版と商業版
 

なんと、同人誌版も頒布継続!!

本書は、同人誌として作ってきた「ShellScriptライトクックブック2014」が元になっています.本来ならば商業本に発行に伴って同人誌版は販売を終了するとろですが,出版社の粋な計らいで販売継続できることになりました.

その大きな理由の一つは,本書で紹介しているプログラムを実演するためです.本書ではシェルスクリプト製のショッピングカートを紹介していますが,同人誌版はそのショッピングカートで通信販売しています.つまり,本書(商業版)の内容に実用性があることを実証するためにこその販売継続なのです.

C&R研究所さんスバラシい!ありがとうございます。

でも同人誌版とは完成度が違う!

そうなると,果たして商業版が存在する必要があるのかと戸惑うかもしれません.しかし,ハッキリ言って完成度が全然違います.同人作家としては自分の実力不足を痛感して少し悔しいところですが,さすがそれでメシを喰っている方々の本気には敵いません.

同人誌版との5つの違い

  1. 誤字、表記揺れに対するプロ編集者からの厳しいツッコミ
  2. 素人のTeX組みでは敵わないプロ編集者による組版
  3. しかも2色刷りで圧倒的に見やすい
  4. 書き下ろしコラム付き(7本)
  5. トドメの索引付き

同人誌版を購入済という方も,一度書店で眺めて判断する価値は大いにあります.

▲トップに戻る


  正誤情報
 

発行後に見つかった訂正情報について報告します.ご購入いただいた皆様にはご迷惑をお掛けして申し訳ございませんが.下記の正誤情報をご覧ください.

25ページ,表2.2「置換前文字列のメタ文字一覧」内,2つ目の「\{n\}」

  メタ文字 意味
\{n\}
【繰返し指定子】直前に記述した文字がn文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせようとする。
\{n,\}
【繰返し指定子】直前に記述した文字がn文字以上連続していることを指定し、後続の繰返し指定子よりも優先して可能な限り最大数マッチさせようとする。

26ページ,表2.2「〜ブラケット内側」内,メタ文字「[」,「\x」,「\\」

これらには,表に記述されたような特記事項はありませんでした.無視してください.「[」にも「\」にも特別な意味はなく,素直に普通の文字として解釈されます.

33ページ,2つ目のコンソール「■GNU版AWKでも文字列〜」内

$ awk 'BEGIN{print "010"*1}'
10
$ echo 010 | awk 'BEGIN{print $1*1}'
10
$
$ awk 'BEGIN{print "010"*1}'
10
$ echo 010 | awk '{print $1*1}'
10
$

58ページ,「■改行コードへの置換をキレイに書く」リスト内

# --- sedにおいて改行コードを意味する文字列の入った変数を作っておく ---
LF=$(printf '\\n_')
LF=${LF%_}
# --- sedにおいて改行コードを意味する文字列の入った変数を作っておく ---
LF=$(printf '\\\n_')
LF=${LF%_}

69ページ,「■元のパーミッションとACLを維持〜」リスト内6行目

	  [^-]*) echo "Not a regular file" 1>&2;exit 1;;
	  [!-]*) echo "Not a regular file" 1>&2;exit 1;;

87ページ,1つ目のコンソール「■ダミーの会員リスト〜」内

$ dd if=/dev/urandom bs=1 count=20000 2>dev/null |
> od -A n -t x2 -v                               |
$ dd if=/dev/urandom bs=1 count=20000 2>/dev/null |
> od -A n -t x2 -v                                |

102ページ,「■UNIX時間から日常の時間〜」リスト内下から7行目

  D = days_from_epoch - days_on_Jan1st_from_epoch + 1;
  D = days_from_epoch - days_on_Jan1st_from_epoch[Y] + 1;

158,161ページ,「■前述のフォームから送られてきた〜」リスト内8-9行目

fullname=$(nameread fullname $tmp-cgivars)
email=$(nameread email $tmp-cgivars)
fullname=$(nameread fullname $Tmp-cgivars)
email=$(nameread email $Tmp-cgivars)

172ページ,コンソール

$ cat mail2.txt | while read -r line; do
>   case "$line" in
>     '') echo
>         cat | base64
>         ;;
>      *) printf '%s\n' "$line"
>         ;;
>   esac
> done
$ 
$ CR=$(printf '\r')
$ cat mail2.txt | while read -r line; do
>   case "$line" in
>     '') echo
>         cat                             |
>         sed '/[^'"$CR"']$/s/$/'"$CR"'/' |
>         sed '/^$/s/$/'"$CR"'/'          |
>         base64
>         ;;
>      *) printf '%s\n' "$line"
>         ;;
>   esac
> done
$ 
これは,base64コマンドに流し込む前にメール本文の改行コードをCR+LFに変換する作業が抜けていたことが判明したために追加したものです.

173ページ,「■「ハロー、email!」をエンコード」コンソール内1行目

白抜きのコメント「←改行コードが入らないように-nオプションを付ける」は不要です.

187ページ,「■掲示板の投稿者名〜」リスト内11-12行目

name=$(nameread name $tmp-cookievars)
email=$(nameread email $tmp-cookievars)
name=$(nameread name $Tmp-cookievars)
email=$(nameread email $Tmp-cookievars)

他にも判明した場合には随時報告致します.

▲トップに戻る


  その他情報
 

クレジット

This book is the 14th work of the Rich Laboratories.
Copyright © 2015 Tomoyuki Matsuura (Matsura Rich Laboratories), All rights reserved.

▲トップに戻る

 
 
nearly_valid_html401
[Powered by FreeBSD]
Powered by Apache
     
 
Copyright © 2007 Matsura Rich Laboratories, All rights reserverd.