飯塚 直 著
CoffeeScriptとは、最近のWeb/スマートデバイス開発に欠かせないJavaScriptに対して、より少ないコード記述で同等の機能を実現できる簡易言語です。コンパイルすることによってネイティブなJavaScriptに変換されるため、実行速度、既存資産との連携など、JavaScriptと遜色なく利用できます。元来JavaScriptの記述は冗長になりがちなため、CoffeeScriptが開発効率向上を求める開発者たちの間で注目されています。
本書では、環境構築からはじめ、基礎的・応用的な文法やプログラミングテクニック、ライブラリの活用やテスト・デバッグ、さらにはnode.jsやブラウザ向け開発のベストプラクティスまで、CoffeeScriptを用いた開発のノウハウを豊富なソースコードとともに解説します。
第1章CoffeeScriptの概要
1-1 CoffeeScriptとは/ CoffeeScriptが登場する前/ CoffeeScriptの登場と広まり
CoffeeScriptとJavaScriptの違い
どんなときCoffeeScriptを使えばいいか
1-2 CoffeeScriptの開発環境/ Node.jsのインストール
CoffeeScriptのインストール
1-3 プログラムの実行/ coffeeコマンドでプログラムを実行する
スクリプトをファイルに書いて実行する
JavaScriptにコンパイルする
エディタ向けプラグイン/ Node.jsのAPIドキュメント
[Note]コマンドプロンプトの操作
第2章基礎的な文法
2-1 文法の基本/ CoffeeScriptの基本形
2-2 関数/引数を取る関数
デフォルト引数/名前付き関数と無名関数
無名関数に続けて引数を指定する
2-3 文字列/変数展開/複数行に分けて書く
ヒアドキュメント
2-4 コメント/コメントをコンパイル後にも残す
2-5 配列
2-6 オブジェクト
予約語の自動クォート
2-7 変数のスコープ
2-8 条件分岐/ if/else
unless / while
until / loop
switch
条件分岐のある関数の戻り値
2-9 ループ・繰返し/配列に対するループ
要素をスキップする
オブジェクトに対する繰返し
条件分岐を式として使う
ループの応用
2-10 演算子/比較は常に厳密
連鎖比較
2-11 例外処理
[Note]本書のソースコード
[Note]セミコロンの使いどころ
第3章応用的な文法
3-1 レンジ/レンジの基礎知識
配列を部分的に切り出す/配列を部分的に入れ替える
末端までのレンジ
3-2 関数にthisを束縛する/ thisの値はどのように決まるのか
thisを束縛して関数を作る
3-3 存在演算子/変数や関数が存在するか調べる
条件付き代入
2つの値のいずれかを選択する
3-4 引数の扱い/引数を配列で受け取る可変長引数
配列の展開
3-5 クロージャ/クロージャの基礎知識
CoffeeScriptでクロージャを実現する
プライベート変数を作る
3-6 分割代入/分割代入の基礎知識
分割代入の応用
3-7 CoffeeScriptの便利なテクニック/複数行にわたる正規表現/ JavaScriptの埋込み
不要な戻り値を抑制する
3-8 グローバル変数を作る/ JavaScriptにおけるグローバル変数
方法1 グローバルオブジェクトに追加する
方法2 コンパイル時に-bオプションを付ける
3-9 CakeとCakefileでビルド環境を作る/ CakeとCakefile /タスクを作る
オプションを指定する
ほかのタスクを呼び出す
第4章クラスを作る
4-1 クラスとは何か/クラスの基礎知識/ JavaScriptにおけるクラス
CoffeeScriptにおけるクラス
4-2 クラスの定義/クラスとインスタンスの作成
プロパティの参照のされ方
メソッドの作成
コンストラクタ
4-3 クラスの継承/継承により新しいクラスを作成する
親クラスのメソッドを呼び出す
引数をインスタンスのプロパティとしてセットする
4-4 プロパティ作成のテクニック/静的なプロパティ/ライベートなプロパティを作る
[Note]prototypeアクセスの利点と欠点
第5章ライブラリを使って開発を楽にする
5-1 Underscore.jsの準備/ Underscore.jsの読込み/ライセンス
5-2 コレクション用の関数/ each
filter / all / any
pluck / max
min / sortBy / shuffle
5-3 配列用の関数/ flatten / without / uniq
range
5-4 関数用の関数/ memoize
5-5 オブジェクト用の関数/ keys / values / clone
extend
5-6 文字列用の関数/ escape / template
5-7 非同期処理のフロー制御/ Node.jsでの読込み/ブラウザでの読込み
使い方
JavaScriptライブラリとの協調
第6章テストとデバッグ、開発のヒント
6-1 テストの基礎知識/ソフトウェアにおけるテスト/ テストはどのようなプログラムに必要か
テスト駆動開発とビヘイビア駆動開発
6-2 テスト環境の準備/ブラウザでの準備
Node.jsでの準備
テスト用にMakefileを作る/ Mochaのレポーター
6-3 テストを書く/基本的なMochaのテストの書き方
MochaのBDD/TDDインタフェース/記述したテストの確認
BDD/TDDインタフェースの比較
よいテストを書くには
6-4 デバッガの使用/ Node.js環境で使えるデバッガ
ブラウザ環境で使えるデバッガ
6-5 ドキュメントの生成/ドキュメントを書く
ドキュメントを生成する
よいドキュメントを書くには/ Markdownでスタイルを付ける
6-6 ベンチマーク
ブラウザでの準備
Node.jsでの準備/ Benchmark.jsの使い方
最速の方法を探す
Web上でベンチマークテストを行う
6-7 よくあるエラーやミス/ ReferenceError / TypeError
RangeError: Maximum call stack size exceeded
深すぎる再帰呼出しによるエラーへの対処
ブラウザのハングアップ
[Note]node-inspectorをバックグラウンドで実行する
第7章Node.js向け開発のベストプラクティス
7-1 イベント駆動型のプログラムをきれいに作る
EventEmitter
EventEmitter2
0MQ
AMQP
7-2 Node.jsのモジュールシステム/ Node.jsとブラウザの両方に対応したライブラリを作る
exportsとmodule.exportsの違い
7-3 URLからコンテンツを取得する
7-4 コマンドラインプログラムの開発
入力プロンプトを表示する
194 7-5 ヘッドレスブラウザ/ PhantomJSのインストール
CasperJSのインストール
CasperJSの使い方
CasperJSの主なAPI
7-6 Webアプリケーションの開発/インストール
ファイル構造
クエリストリングを受け取る
POSTデータを受け取る/静的ファイル/そのほかのメソッド
テンプレートエンジンEco
レスポンスを圧縮する/静的ファイルをブラウザにキャッシュさせる
独自のエラーページを用意する
7-7 データベースへのアクセス/ O/Rマッピング/ Sequelizeのインストール
SQLiteに直接アクセスする
MySQLにアクセスする
Redisにアクセスする
7-8 ログ出力/ winstonのインストール/ winstonの使い方
出力オプション
レベル一覧
7-9 マルチプロセス化/子プロセスを起動してメッセージをやりとりする
複数の子プロセスを同じポートで待機させる
7-10 エラー処理
7-11 デーモン化/ foreverのインストール/ foreverの使い方
7-12 開発から本番運用に至るまで/バージョン管理/バグトラッカー/負荷テスト
負荷の原因を調査する
デプロイツール/モニタリング
keepalived
7-13 プロファイラ
7-14 npmパッケージの開発
package.jsonで記述可能なパラメータ
7-15 ライブラリの探し方
[Note](参考)「Too many open files」エラーが出たら
[Note]O/Rマッパー
[Note]スケールアウトとスケールアップ
[Note]Semantic Versioning
第8章ウザ向け開発のベストプラクティス
8-1 JSONを扱う
json2.jsの使い方/ JSONを見やすく表示する
8-2 jQuery /スマートフォン向けのjQuery代替ライブラリ
8-3 HTML5を土台を利用して作る/ HTML5 Boilerplateの使い方/ Google Chrome Frame
8-4 UIのライブラリ/ Twitter Bootstrap
jQuery UI
8-5 HTML5やCSS3のサポート状況を判別する/ Modernizrの使い方
条件によって読み込むスクリプトを変える/サポートされていないAPIを補完する
8-6 Ajaxコンテンツのルーティング/ Sammy.jsの使い方
AjaxコンテンツをGoogleの検索結果に出す
ブラウザの履歴を操作する
8-7 DOMの準備完了を待つ
JavaScriptとCSSの最適な読込み順序
スクリプトローダーで高速に読み込む
8-8 パフォーマンス向上のためのテクニック/リクエスト数を減らす/ JavaScriptやCSSを外部ファイル化する/ CSSスプライト
パーツのロードを遅らせる/画像のサイズを削減する
8-9 検索エンジンのコントロール/ robots.txtの記述方法
サイトの貢献者情報を提供する
最適化チェックツール
8-10 外部JavaScriptの文字コード
8-11 複数のファイルに分ける
8-12 JavaScriptを最適化する
UglifyJSのインストール/ JavaScriptファイルを最適化する
8-13 JavaScriptファイルの結合
8-14 ライブラリをCDNからロードする
8-15 ブラウザでのテストを自動化する/ Selenium
Watir
8-16 プロファイラを使う/ボトルネックを見つける
メモリリークを見つける
8-17 古いInternet Explorerでの検証
8-18 クライアント側のエラーログを収集する
8-19 ユーザーの行動解析ツールの設置/プライバシーポリシーの明記
8-20 複雑なテンプレートの使用
8-21 WebSocketをクロスブラウザで使う/ Socket.IOのインストール(サーバ側)/ Socket.IOの使い方(サーバ側)
Socket.IOの使い方(クライアント側)
APIサーバの実装例
再接続パラメータの設定
本番環境での推奨設定
8-22 KnockoutでUIの表示を動的に変更する/ Knockoutの使い方
ライブラリの読込み/モデルからビューへの反映
ビューからモデルへの反映
computed observableの作成
ボタンクリックでアクションを実行する
値の変更通知を受ける
8-23 CoffeeScriptをブラウザで直接実行する/ text/coffeescriptの使い方
8-24 CSSのトレンド
CompassでSass開発をさらに便利にする
[Note]
付属データはこちら
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
アニー さん
2013-07-05
今のところ使う予定はないかなぁ?とは思いながら読んでみた。最低限の質問に答えられるぐらいにはなったかな。
らき さん
2012-10-28
そもそもあんまりCoffeeScriptやりたいわけじゃないのでアレだけど、本でざっと把握できるようになってるのはやっぱいい。
のぶ さん
2012-07-07
本書を誰にでもお勧めするかどうかは疑問符です。分厚い割に扱われてる話題にまとまりがない印象があるのと、Webのどこかに掲載された記事の再利用が多いので、割高感はあります。でもCoffeeScript(以下CS)自体は面白いアプローチの言語で、JavaScriptの困った点を払拭してくれ、これならプログラム書けそうな気にさせてくれる、お勧め言語の1つです。で本書がCSを主題にした最初の和書なので、ともかく何か始めてみようと思う初学者(でかつWebで勉強するコツを持ってない人)はまずは座右に置いてみましょう。