試験公開中

このエントリーをはてなブックマークに追加

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

KADOKAWA/アスキー・メディアワークス

2,600円+税

シェル芸を極めよ! 本書ではUNIXのシェルスクリプトを用いて実用的なアプリケーションを短時間に開発する手法を解説します。RDBMSを不要にする、シェルスクリプトの真の力をご覧下さい。

関連サイト

本書の関連ページが用意されています。

内容紹介

本書には、bashCMSの作り方を説明する表向きの狙いとは別に、裏の重要な狙いがあります。それは、「UNIX環境を使いこなし、何か役に立つものをすぐ作れるようになる」お手伝いをすることです。

UNIX自体、それだけで非常に優れたフレームワークです。世の中にはOSの上に乗っかる便利なミドルウェアやフレームワークがありますが、そういうものを動かそうとするときに、OSの操作に長けているとそれだけですんなり学習できます。それに、インストールするものがOSの何を補うものなのか、だいたい予想がつくようになります。そして、UNIX系OSの場合は特に、たいていのことが端末に文字を打ち込むことで済んでしまうため、慣れれば慣れるほど操作が早くなります。ですから、流行のものに飛びつく前に、端末やシェル、OSのオペレーションは押さえてほしい。そのような意図で書いていきます。

普通、端末の操作を扱う教科書なり本なりは地味なものになりがちです。本書ではウェブサイトというどちらかというと派手なものがお題ですので、楽しく読んでもらえると考えています。

そのような「裏の重要な狙い」を達成するために、次の2点については、こだわって書きます。単にウェブサイトを作るだけなのに、やたらクドクド書くことにします。

DBレスなシステムの作り方を紹介

本書では、RDBMSに頼らずにウェブサイトを作ります。DBを使わず、データをテキストで持っていると、何かと便利です。たとえば、PukiWikiやそのご先祖様は本書で扱うものと同様、テキストでページを持っていますが、私は昔自分で打ち込んだものをgrepで検索して読み返したりしています。Windowsでも、ファイルをクリックして読めたら楽でしょう。

この話、DBを使わないプログラマ、たとえばとても高速に動く機械の制御をプログラムしているような人には、「何言ってるの? 当たり前じゃないか」という答えが返ってきます。しかし私の長くいたSIer業界では、まずDBありきでものごとを考えます。特に社会人になってからプログラムを始めた人は、データハンドリングをDBでしかやったことがない人が結構います。雇う側に立てば、DBを使う以上、プログラマがSQLを書けないと話になりません。そのためSI業界では、とにかくシステムを組むときは一番最初にどのDBを使おうかという話になります。

個人的には、とにかくそういう話にはうんざりしています。特に小さいアプリケーションだと、ファイルにデータを出し入れしたほうが楽です。大きいシステムでも、ディレクトリを使ってファイルをうまく整理すればだいじょうぶということも、後述のユニケージ開発手法での実証例があります。

コマンド・シェルスクリプト・OS・ファイルシステムを使い倒す方法を紹介

本書では、シェルスクリプト(正確にはbashスクリプト)でプログラムを組んでいきます。ファイルを扱うなら実は一番手っ取り早いのはシェルスクリプトです。シェルやシェルスクリプトは、Macを含めUNIX系OSならばだれでも便利に使えるものなので、役に立つテクニックをちりばめながら説明していきます。ですから、ここに書いていることをひと通りマスターできたら、UNIX系OSの操作についても技術力がアップしていることは確実です。

普通のシェルスクリプトの本というのは、だいたいの場合、網羅的にコマンドを紹介しているものが多いのですが、本書の場合、ファイル操作の実践の連続になります。一部のコマンドがさまざまなオプションや使い方で頻繁に登場する一方、あまり使わないものは出てきません。超実践派のシェルスクリプト手引書としてもお使いください。

(「1.3 本書のねらい」より抜粋)

書誌情報

  • 著者: 上田隆一, 後藤大地
  • 発行日: (紙書籍版発行日: 2014-07-02)
  • 最終更新日: 2014-07-02
  • バージョン: 1.0.0
  • ページ数: 280ページ(PDF版換算)
  • 対応フォーマット: PDF, EPUB
  • 出版社: KADOKAWA/アスキー・メディアワークス

対象読者

シェルスクリプトやシェル芸に興味のある方、好きな方

著者について

上田隆一

産業技術大学院大学産業技術研究科情報アーキテクチャ専攻助教
1978年2月16日生。富山県小矢部市出身。ロボット工学の研究者として2004年から助手、2008年に助教として東京大学大学院工学系研究科精密機械工学専攻に勤務。学部4年時から自律ロボットの国際サッカー大会ロボカップに参戦。AIBOを使って画像処理や推論・行動決定アルゴリズムの研究や実装を行う。また、教科書Probabilistic ROBOTICSの翻訳等の業績を残す。2009年に有限会社ユニバーサル・シェル・プログラミング研究所に入社。企業システムの構築や社外教育プログラムの作成、講師を担当。2013年8月より現職。研究、プログラミング関連の執筆、UNIX系OSの講義等に従事している。本業の傍ら、シェルプログラミングコミュニティ「USP友の会」の会長として「UNIX的なもの」の伝道活動を行っている。
博士(工学)。http://blog.ueda.asia

後藤大地

オングス代表取締役/BSD コンサルティング取締役/FreeBSD committer
企業システムの要件定義、設計、開発、運用、保守からIT系ニュースの執筆、IT系雑誌や書籍の企画立案から執筆まで幅広く手がける。高いセキュリティが求められるネットワークシステムの構築、高い可用性が求められる企業システムの構築、アプライアンス向けのカスタマイズカーネルの開発から業務に特化したディストリビューションの構築、専用の組み込みデバイスの開発、ハードウェアとソフトウェアの双方の開発、システムの自動デプロイシステムの構築、ビッグデータの処理や研究開発におけるシステム開発まで、*BSD/Linux技術をフル活用した企業ユースのシステムを高いレベルで提供。

目次

まえがき

謝辞

プロローグ

第1章 はじめに

  • 1.1 経緯と対応、起こった問題
  • 1.2 シェルスクリプトで解決を図る
  • 1.3 本書のねらい
  • 1.4 対象となる読者・レベル
  • 1.5 本書の背景・周辺
  • 1.6 補足
  • 1.6.1 コードの公開と利用について
  • 1.6.2 「ロックイン」について
  • 1.6.3 本書の他に読んでおくとよい文献
  • 1.6.4 manも文献
  • 1.6.5 プロローグで言及されていたシェルスクリプト
  • 1.7 本書の構成

第2章 環境の準備

  • 2.1 構成の概要
  • 2.2 使うマシン(環境)選びと環境の設定
  • 2.2.1 ローカルマシン
  • 2.2.2 リモートマシン
  • 2.3 通信の諸設定
  • 2.3.1 鍵認証の設定
  • 2.3.2 リモートマシンにパスワードで入れなくする
  • 2.3.3 ポートの開閉を確認する
  • 2.4 ドメインの取得・ホスト名の設定
  • 2.5 コマンドまわりの整備
  • 2.5.1 bash
  • 2.5.2 awk/gawk
  • 2.5.3 sed
  • 2.5.4 Open usp Tukubaiのインストール
  • 2.5.5 その他、本書で使用するコマンドのインストール
  • 2.6 補足
  • 2.6.1 AWKの使い方
  • 2.6.2 sedの置換
  • 2.6.3 テキストエディタ、補完プラグイン
  • 2.6.4 bashのバージョン3と4の違い
  • 2.6.5 GNUのオプション使用、非標準なコマンドの使用、その他POSIXからの逸脱に対する立場

第3章 文章管理の仕組みを作る

  • 3.1 データの整理の前に頭を整理する
  • 3.1.1 コンテンツの種類と置き方の方針
  • 3.1.2 コンテンツ以外のものをどう置くか
  • 3.2 データ構造を作る
  • 3.2.1 ディレクトリを作る
  • 3.2.2 ファイルを置く
  • 3.2.3 ファイルの置き方についてひとこと
  • 3.3 便利コマンドを作る・使う(その1)
  • 3.3.1 記事の新規作成
  • 3.3.2 日記記事のコミット
  • 3.3.3 リモートに記事を送る
  • 3.4 便利コマンドを作る・使う(その2)
  • 3.4.1 変更履歴をとっておきたい? 自分で作らないでGitを使いましょう
  • 3.4.2 リンク切れチェッカーを作る
  • 3.4.3 大きな画像を縮小して掲載する
  • 3.5 補足
  • 3.5.1 他言語とのコードの量と質の違いに関する考察
  • 3.5.2 date(1)
  • 3.5.3 dirname(1), basename(1)
  • 3.5.4 [とtest(1)、終了ステータス、PIPESTATUS
  • 3.5.5 &&と||
  • 3.5.6 rsync(1)
  • 3.5.7 bashの関数
  • 3.5.8 grepのオプション
  • 3.5.9 処理が正常でも終了ステータスが「正常」にならない場合
  • 3.5.10 awk -F
  • 3.5.11 while
  • 3.5.12 if, for, case
  • 3.5.13 軽量マークアップ言語を使う
  • 3.5.14 identifyでExif情報を見る

第4章 ウェブサイトを作る

  • 4.1 Apacheを設定してCGIシェルスクリプトを動かす
  • 4.1.1 最初のCGIシェルスクリプト
  • 4.1.2 Apacheを設定する
  • 4.1.3 動作確認は端末で!
  • 4.2 記事の表示
  • 4.3 ログを記録する
  • 4.4 記事の選択機能をつける
  • 4.5 パスを書き換える
  • 4.6 前後の日記記事に移動できるようにする
  • 4.6.1 端末上でプログラムを考える
  • 4.6.2 mojihameでリストをHTMLにはめ込む
  • 4.7 記事の属性を埋め込む
  • 4.8 体裁を整える
  • 4.9 ナビゲーション機能を強化する
  • 4.9.1 Ajaxを使う準備1 ——Ajaxとは
  • 4.9.2 Ajaxを使う準備2 ——材料を準備
  • 4.9.3 Ajaxを使う準備3 ——開通
  • 4.9.4 最新記事のリストを作る
  • 4.9.5 カテゴリを押したときのリスト機能をつける
  • 4.9.6 検索機能をつける
  • 4.9.7 ページビューカウンタをつける
  • 4.10 プレビュー機能をつける
  • 4.11 処理時間を計測してみましょう
  • 4.11.1 準備
  • 4.11.2 多くのファイルをリストする処理時間
  • 4.11.3 ファイルキャッシュが利かないとどうなるか
  • 4.11.4 記事数に応じて作りを変え、負荷を下げる
  • 4.12 補足
  • 4.12.1 xargs(1)
  • 4.12.2 open(1)
  • 4.12.3 time(1)
  • 4.12.4 timeの結果をファイルに書き出す方法
  • 4.12.5 ssh(1)のパイプラインでの使い方
  • 4.12.6 POSTの受け方

第5章 ウェブサイトを外部とつなぐ

  • 5.1 タイトルに記事名を入れる
  • 5.2 RSSを作成する
  • 5.3 ソーシャルボタン・広告を表示する
  • 5.4 シェルスクリプトでTwitterに記事のタイトルとURLをツイート
  • 5.4.1 Twitterにアプリケーションを登録
  • 5.4.2 コマンドを作る
  • 5.4.3 バッチシェルスクリプトを作る
  • 5.5 トラックバック機能をつける
  • 5.5.1 トラックバックの受付
  • 5.5.2 トラックバックの送信

第6章 シェル芸でログの集計

  • 6.1 logrotateの設定
  • 6.2 ログを眺める
  • 6.2.1 フォーマットの確認
  • 6.2.2 邪悪なログを作って検証
  • 6.3 日付の変換
  • 6.4 主要な指標を端末で取得
  • 6.4.1 ヒット数(簡単な処理)
  • 6.4.2 ページ数(DBのようにJOINでデータ抽出)
  • 6.4.3 訪問数(AWKで行またぎの処理)
  • 6.4.4 その他、いろいろなものを集計してみる
  • 6.5 もっと凝った出力を作る
  • 6.5.1 週ごとの集計
  • 6.5.2 度数分布を出力してみる
  • 6.5.3 クロス集計してみる
  • 6.6 補足
  • 6.6.1 本章で出てきたTukubaiコマンドの使い方
  • 6.6.2 シグナルとtrap(1)
  • 6.6.3 意地でも中間ファイルにデータを残したくない貴方へ
  • 6.6.4 大きなファイルをソートするときは-sオプション

第7章 おわりに

付録A WordPress(MySQL)からデータを抜き取る

  • A.1 mysqlコマンドを使う
  • A.2 SQLではなくてシェルスクリプトでデータを整理
  • A.3 画像等を記事ディレクトリに放り込む
  • A.4 htmlファイルのリンクを修正
  • A.5 カテゴリを抜き出す
  • A.6 記事ディレクトリに時刻を入れる
  • A.7 アップロードと確認

参考文献

著者紹介

索引

Home 書籍一覧 フルスクラッチから1日でCMSを作る シェルスクリプト高速開発手法入門 ▲ ページトップへ戻る