「初めてのPOSIX原理主義」目次 - lpf.html はじめに    本書制作の経緯    本書が対象とする環境・ユーザー    サポート情報    おことわり 第1週 なぜ今、シェルスクリプト+POSIX原理主義なのか    1.1節 「バージョンアップ」「うご……」の衝撃       1.1.1項 Googleサジェストが既に物語っている       1.1.2項 短命ソフトウェアあるある       1.1.3項 最近のトピック       1.1.4項 ある程度は仕方がないが、最近度が過ぎる!    1.2節 POSIX原理主義とは何か       1.2.1項 UNIXとPOSIX       1.2.2項 なぜ今、POSIXなのか       1.2.3項 開発環境として見たPOSIX    1.3節 シェルスクリプト+POSIXで作る「ソフトウェアの保存食」       1.3.1項 POSIXの弱点を補完し、発展させたものがPOSIX原理主義       1.3.2項 既に5年動いているソフトウェア保存食 第2週 UNIXシェルを導入する    2.1節 様々なUNIXシェルの選択肢       2.1.1項 a.「macOSを使う」場合       2.1.2項 b.「その他UNIX系OSを使う」 場合       2.1.3項 c.「Windows 10のWSLを使う」 場合       2.1.4項 d.「Cygwinを使う」 場合       2.1.5項 e.「gnupackを使う」 場合       2.1.6項 f.「仮想マシンを使う」 場合       2.1.7項 g.「UNIX系外部ホストをリモートから使う」場合    2.2節 「リモートから使う」ために必要なアプリのインストール       2.2.1項 何が必要か       2.2.2項 1a. Atomのインストール・設定       2.2.3項 1b. サクラエディタのインストール・設定       2.2.4項 2a. 既存ターミナルからsshコマンドで繋ぐ場合       2.2.5項 2b. Tera Termのインストール・設定       2.2.6項 3b. WinSCPのインストール・設定    2.3節 追加コマンドセット``ShellShoccar''のインストール       2.3.1項 事前に必要なもの       2.3.2項 インストール方法 第3週 シェルスクリプト入門    3.1節 UNIXシェル環境を知る       3.1.1項 どこに何のファイルがある? -- Windowsとの対比       3.1.2項 【実習】UNIXのコマンドとは?    3.2節 【実習】シェルスクリプトの基礎の基礎       3.2.1項 【超重要】シェルスクリプトを書いて動かすまでの手順       3.2.2項 シェルスクリプトはコマンドと制御文で書く作文    3.3節 【実習】シェル・シェルスクリプトの練習問題       3.3.1項 設問1 解答       3.3.2項 設問2 解答       3.3.3項 設問3 解答 第4週 シェルスクリプトに慣れ親しむ    4.1節 小鳥男、お前は何者だ!       4.1.1項 基本スペック       4.1.2項 小鳥男の入手先・ライセンスなど       4.1.3項 恐るべき戦闘能力    4.2節 【実習】小鳥男をインストールし、使ってみる       4.2.1項 インストール手順       4.2.2項 動作確認       4.2.3項 コマンドリファレンス    4.3節 小鳥男の使い道を考える       4.3.1項 プログラミングという名の作文が、無限の機能を生み出す       4.3.2項 応用例 第5週 POSIX原理主義概論    5.1節 POSIX原理主義の成り立ち       5.1.1項 背景       5.1.2項 目的       5.1.3項 理論化 -- 三つのガイドライン    5.2節 【ガイドライン1】POSIX規格準拠 -- 元来のPOSIX原理主義       5.2.1項 方法       5.2.2項 【指摘1】シェルスクリプトは機能が貧弱である       5.2.3項 【実習・指摘2】シェルスクリプトは遅い    5.3節 【ガイドライン2】交換可能性担保 -- POSIX外の機能の利用条件       5.3.1項 【指摘3】POSIXのコマンドはネットに繋げない       5.3.2項 交換可能性とは       5.3.3項 どういう時に交換可能性担保が必要か       5.3.4項 交換可能性担保の具体例    5.4節 【ガイドライン3】W3C勧告準拠 -- Webアプリケーション開発ための拡張       5.4.1項 【指摘4】Webブラウザーでは、シェルスクリプトが使えない       5.4.2項 W3C勧告とは何か       5.4.3項 W3C勧告の具体例       5.4.4項 ライブラリーに依存すれば、戦乱に巻き込まれる    5.5節 まとめ -- 三つガイドラインの使い分け 第6週 ソフトウェアの方言と標準語    6.1節 ソフトウェアにおける「標準語」とは       6.1.1項 シェル・プログラミングへの不満       6.1.2項 「標準語」の誤解       6.1.3項 ソフトウェアの方言・標準語の具体例       6.1.4項 ソフトウェアにおける標準語のまとめ    6.2節 シェルスクリプトにおける標準語の概要       6.2.1項 方言を知ることが、標準語を使う近道       6.2.2項 方言が含まれる3つの領域    6.3節 シェルスクリプトの文法にある方言       6.3.1項 例1 -- ブレース展開       6.3.2項 例2 -- プロセス置換       6.3.3項 例3 -- 組み込み配列変数``PIPESTATUS''       6.3.4項 例4 -- 【実習】bashに配慮しなければならないケース    6.4節 コマンドの種類・動作にある方言       6.4.1項 存在そのものが方言(特定OSに独自)のコマンド       6.4.2項 方言が強いコマンド その1 -- date       6.4.3項 方言が強いコマンド その2 -- tr       6.4.4項 方言が強いコマンド その3 -- GNU版コマンド群       6.4.5項 【実習】挙動の異なるコマンド    6.5節 正規表現にある方言       6.5.1項 正規表現おさらい       6.5.2項 正規表現には3種類ある       6.5.3項 どのコマンドが、どの正規表現に対応しているか       6.5.4項 各正規表現の中身(メタ文字一覧)       6.5.5項 その他気を付ねばならないこと    6.6節 その他の方言に関する情報源 第7週 シェルスクリプトやコマンドにある奇妙さ    7.1節 シェルスクリプトを奇妙に見せる大きな理由       7.1.1項 【実習】よくある落とし穴を体験する       7.1.2項 シェルスクリプトは元々、言語ではなかった?    7.2節 世にも奇妙なシェルスクリプト       7.2.1項 条件判定に使う角括弧``\textrm {[} \textrm {]}''の正体は、コマンド       7.2.2項 変数代入式の等号の前後に空白文字を挿んではいけない       7.2.3項 特殊文字のエスケープ機能が招く混乱    7.3節 世にも奇妙なコマンドたち       7.3.1項 【実習】AWK配列変数の怪       7.3.2項 【実習】sortコマンドの奇妙な仕様    7.4節 奇妙な仕様にどう対処すればいいか 第8週 POSIX原理主義の真髄1 -- 教科書やソースコードに学ぶ    8.1節 今週のテーマ -- 日時計算を自作する       8.1.1項 日常時間とUNIX時間の相互変換    8.2節 UNIX時間への変換コマンドを自作       8.2.1項 既存のライブラリーはある公式を使っている       8.2.2項 【実習】UNIX時刻変換コマンドのコーディング    8.3節 UNIX時間からの逆変換コマンドを自作       8.3.1項 最後はソースコードを読み解く       8.3.2項 【実習】UNIX時刻逆変換コマンドのコーディング    8.4節 コマンド制作は難しいのか? 第9週 POSIX原理主義の真髄2 -- パイプを使いこなす    9.1節 今週のテーマ -- ストリーミング型プログラミングを身に付ける       9.1.1項 ストリーミング型プログラミングとは       9.1.2項 今日の目標 -- CSVデータを読み解く    9.2節 練習 -- ifconfigからIPv4アドレスを抽出       9.2.1項 ifconfigコマンド・ipコマンド       9.2.2項 各OSのifconfigコマンドの出力結果       9.2.3項 【実習】IPv4アドレス(localhost以外)をすべて抽出する       9.2.4項 ストリーミング型プログラミング 5つのポイント    9.3節 CSVパーサーを自作する       9.3.1項 CSVデータの仕様を確認する       9.3.2項 CSVデータ読み解き(パース)の定義       9.3.3項 【実習】CSVパーサーを作る    9.4節 まとめ       9.4.1項 XML・JSONパーサーも自作できる 第10週 POSIX原理主義の真髄3 -- POSIX的データ管理術    10.1節 今週のテーマ -- UNIXコマンドによるRDB的データ管理を習得する       10.1.1項 SQLとは?       10.1.2項 RDBMSは、データ管理術を知らないプログラマーのための発明品       10.1.3項 RDBMSの利用とUNIXによる自給自足、どちらがいいか    10.2節 UNIX流データ管理       10.2.1項 テーブルからファイルへ、SQL文からコマンドへ       10.2.2項 usp Tukubaiコマンドセット    10.3節 練習 -- /etc/passwdと/etc/groupのデータを加工する       10.3.1項 /etc/passwdファイルと/etc/groupファイル       10.3.2項 【実習】/etc/passwdと/etc/groupの雑多なデータ加工    10.4節 会員リストとブラックリストを元にホワイトリストを作る       10.4.1項 ホワイトリスト作成問題       10.4.2項 解答アルゴリズム作成方針       10.4.3項 【実習】UNIX流にホワイトリストを作ってみる    10.5節 UNIX流データ管理術に対する質疑応答       10.5.1項 質問 -- SQLのUPDATEやDELETE相当は、UNIX流だと効率が悪くないか?       10.5.2項 回答 -- 一般的に、テーブルよりファイルの粒度は小さくする       10.5.3項 データ更新に役立つTukubaiコマンド       10.5.4項 最適なデータ取り扱い方法を考えるのがデータベースにおける真のエンジニアリング    10.6節 まとめ 第11週 POSIX原理主義の真髄4 -- RFCに学ぶWebプログラム制作    11.1節 今週のテーマ -- Webの舞台裏を知り、Web関連コマンドを制作する    11.2節 Webブラウザーの内部をのぞく       11.2.1項 【実習】Webブラウザーの内部をのぞく       11.2.2項 【実習】HTTPのコマンドを手打ちして生のやり取りを観察する    11.3節 RFC文書       11.3.1項 404などの番号は何?       11.3.2項 RFCとは何か       11.3.3項 POSIX原理主義者にとってのRFC文書    11.4節 URLエンコーダーを自作する       11.4.1項 URLエンコードとは       11.4.2項 【実習】URLエンコーダーの制作    11.5節 Webアプリケーション制作のイントロダクション       11.5.1項 Webアプリケーション制作のためのコマンド群       11.5.2項 簡単なCGIスクリプトの例    11.6節 まとめ 第12週 POSIX原理主義的デバッグ\&{}バージョン管理    12.1節 シェルスクリプトのデバッグ概論       12.1.1項 1行書いては実行 -- そもそもバグを生まない       12.1.2項 shコマンドの``-vx''オプションで、実行ログを取る       12.1.3項 teeコマンドで、データ加工の途中経過を見る       12.1.4項 デバッグの課題プログラム    12.2節 実行ログによるデバッグ       12.2.1項 実行ログデバッギングの詳細       12.2.2項 【実習】実行ログを取ってデバッグをする       12.2.3項 実行ログは、普段から取り続け、管理に気を付けろ    12.3節 teeコマンドによるデバッグ       12.3.1項 teeコマンドデバッギングの詳細       12.3.2項 【実習】teeコマンドを挿んでデバッグをする    12.4節 POSIX原理主義的バージョン管理概論       12.4.1項 何を目指すのか       12.4.2項 現バージョンの保存(コミット相当)をどうやるか       12.4.3項 過去リビジョンの閲覧・比較・分析をどうやるか    12.5節 まとめ 第13週 実用的Webアプリケーション制作実習 第1週    13.1節 制作実習課題アプリ「郵便番号アプリ」について       13.1.1項 他に頼って簡単に済ますか、自分で作って長持ちさせるか       13.1.2項 郵便番号アプリとしての要求仕様       13.1.3項 アプリケーションの基本設計を考える       13.1.4項 早見表作成プログラムの詳細設計    13.2節 【実習】早見表作成プログラムのコーディング       13.2.1項 各種ディレクトリーの準備       13.2.2項 一般住所用の早見表作成プログラムの作成       13.2.3項 事業所用の早見表作成プログラムの作成       13.2.4項 リポジトリーへの保存 第14週 実用的Webアプリケーション制作実習 第2週    14.1節 制作実習課題アプリ「郵便番号アプリ」について(続き)       14.1.1項 先週のおさらい       14.1.2項 早見表検索プログラムの詳細設計 その1       14.1.3項 Ajaxとは何か       14.1.4項 早見表検索プログラムの詳細設計 その2    14.2節 【実習】早見表検索プログラムのコーディング       14.2.1項 郵便番号アプリ画面用HTMLの作成       14.2.2項 早見表検索プログラムの作成       14.2.3項 郵便番号アプリ画面操作プログラムの作成       14.2.4項 リポジトリーへの保存 第15週 バージョン管理実習と、講義のまとめ    15.1節 UNIXコマンドワンライナーによるリポジトリー閲覧       15.1.1項 POSIX原理主義的バージョン管理のおさらい       15.1.2項 【実習】制作実習アプリのリポジトリー閲覧・比較・分析    15.2節 まとめ       15.2.1項 各週の振り返り       15.2.2項 講義「初めてのPOSIX原理主義」に関する議論 あとがき