メンテナブルJavaScript
――読みやすく保守しやすいJavaScriptコードのための作法

[cover photo]
  • 2013年03月 発行
  • 256ページ
  • ISBN978-4-87311-610-5
  • フォーマット Print PDF
  • 原書: Maintainable JavaScript

オライリー・ジャパンで書籍を購入:
定価2,808円

Ebook Storeで電子版を購入:
価格2,246円

JavaScriptのカリスマ的ハッカーが、「読みやすくメンテナンス性の高いJavaScriptコード」という観点から書いた一冊。JavaScriptを知り尽くした著者が自らの開発経験を通して身に付けた、チームで開発する上で、誰もが読め、そしてメンテナンスしやすいコードを書くための規約、プログラミングプラクティス、環境についてのTipsをまとめたものです。多くのJavaScriptプログラマ、特にチームで開発を行い、効率の良い開発方法を模索している開発者にとって貴重な内容です。

関連書籍

JavaScript 第6版
JavaScript: The Good Parts
JavaScriptパターン
JavaScriptリファレンス 第6版
リーダブルコード

目次
はじめに
第I部 スタイルガイドライン

1章 基本フォーマット
    1.1 インデントのレベル
    1.2 文の終端
    1.3 1行の長さ
    1.4 改行
    1.5 空行
    1.6 命名
        1.6.1 変数と関数
        1.6.2 定数
        1.6.3 コンストラクタ
    1.7 リテラル値
        1.7.1 文字列
        1.7.2 数値
        1.7.3 null
        1.7.4 undefined
        1.7.5 オブジェクトリテラル
        1.7.6 配列リテラル

2章 コメント
    2.1 1行コメント
    2.2 複数行コメント
    2.3 コメントを使う
        2.3.1 難解なコードにコメントを付ける
        2.3.2 エラーになりそうな箇所にコメントする
        2.3.3 ブラウザ特有のハック
    2.4 ドキュメントコメント

3章 文と式
    3.1 波括弧を揃える
    3.2 ブロック文での空白
    3.3 switch文
        3.3.1 インデント
        3.3.2 caseから caseに続けられる
        3.3.3 default
    3.4 with文
    3.5 forループ
    3.6 for-inループ

4章 変数、関数、演算子
    4.1 変数の宣言
    4.2 関数の宣言
    4.3 関数呼び出しにおける空白
    4.4 即時関数呼び出し
        4.4.1 strictモード
    4.5 等価性
    4.6 eval(.)
    4.7 プリミティブラッパー型
第II部 プログラミング実践

5章 UI層での疎結合
    5.1 疎結合とは?
    5.2 CSSから JavaScriptを隔離する
    5.3 JavaScriptから CSSを隔離する
    5.4 HTMLから JavaScriptを隔離する
    5.5 JavaScriptから HTMLを隔離する
        5.5.1 代替案 1:サーバからロードする
        5.5.2 代替案 2:簡単なクライアントサイドのテンプレート
        5.5.3 代替案 3:複雑なクライアントサイドのテンプレート


6章 グローバル変数/関数を作らない
    6.1 グローバル変数 /関数の問題
        6.1.1 名前の衝突
        6.1.2 コードの壊れやすさ
        6.1.3 テストが難しくなる
    6.2 誤ってグローバル変数が作られる
        6.2.1 グローバル変数を避けるには
    6.3 1-グローバルのアプローチ
        6.3.1 名前空間
        6.3.2 モジュール
    6.4 0-グローバルのアプローチ

7章 イベント処理
    7.1 古典的な使い方
    7.2 ルール 1:アプリケーションロジックを切り離す
    7.3 ルール 2:イベントオブジェクトを引き回さない

8章 nullとの比較を避ける
    8.1 プリミティブ値の判定
    8.2 参照値の判定
        8.2.1 関数の判定
        8.2.2 配列の判定
    8.3 プロパティの判定

9章 設定データをコードから切り離す
    9.1 設定データとは?
    9.2 設定データを外出しする
    9.3 設定データを格納するには

10章 自前のエラーを投げる
    10.1 エラーの本質
    10.2 JavaScriptでエラーを投げる
    10.3 エラーを投げると何がいいのか
    10.4 いつエラーを投げればいいか
    10.5 try-catch文
        10.5.1 throwすべきか、それとも try-catchすべきか?
    10.6 エラーの型


11章 所有していないオブジェクトを変更しない
    11.1 何を所有しているか?
    11.2 規則
        11.2.1 メソッドをオーバーライドしない
        11.2.2 メソッドを新規追加しない
        11.2.3 既存メソッドを削除しない
    11.3 より良いアプローチ
        11.3.1 オブジェクトベース継承
        11.3.2 型ベースの継承
        11.3.3 Facadeパターン
    11.4 ポリフィルについて
    11.5 変更を妨げる

12章 ブラウザ判定
    12.1 ユーザエージェント判定
    12.2 特徴検出
    12.3 特徴推定を避ける
    12.4 ブラウザ推定を避ける
    12.5 何を使うべきか?
第III部 自動化

13章 ファイルとディレクトリの構成
    13.1 ベストプラクティス
    13.2 基本的配置

14章 Ant
    14.1 インストール
    14.2 ビルドファイル
    14.3 ビルドを実行する
    14.4 ターゲットの依存関係
    14.5 プロパティ
    14.6 Buildr

15章 バリデーション
    15.1 ファイルを探す
    15.2 タスク
    15.3 ターゲットを改良する
    15.4 その他の改善項目
    15.5 Buildrタスク

16章 ファイルの連結
    16.1 タスク
    16.2 行末
    16.3 ヘッダとフッタ
    16.4 ファイルの焼き上げ

17章 ミニファイと圧縮
    17.1 ミニファイ
        17.1.1 YUI.Compressorを使ったミニファイ
        17.1.2 Closure.Compilerを使ったミニファイ
        17.1.3 UglifyJSを使ったミニファイ
    17.2 圧縮
        17.2.1 実行時圧縮
        17.2.2 ビルド時圧縮

18章 ドキュメンテーション
    18.1 JSDoc.Toolkit
    18.2 YUI.Doc

19章 自動テスト
    19.1 YUI.Test.Selenium.Driver
        19.1.1 Seleniumサーバを設定する
        19.1.2 YUI.Test.Selenium.Driverを設定する
        19.1.3 YUI.Test.Selenium.Driverを使う
        19.1.4 Antターゲット
    19.2 Yeti
    19.3 PhantomJS
        19.3.1 インストールと使い方
        19.3.2 Antターゲット
    19.4 JsTestDriver
        19.4.1 インストールと使い方
        19.4.2 Antターゲット

20章 統合する
    20.1 ミッシングピース
    20.2 ビルドを計画する
        20.2.1 開発ビルド
        20.2.2 統合ビルド
        20.2.3 リリースビルド
    20.3 CIシステムを使う
        20.3.1 Jenkins
        20.3.2 その他の CIシステム

付録 A JavaScriptスタイルガイド
    A.1 インデント
    A.2 行の長さ
    A.3 プリミティブのリテラル
    A.4 演算子の間隔
    A.5 括弧の間隔
    A.6 オブジェクトリテラル
    A.7 コメント
        A.7.1 1行コメント
        A.7.2 複数行コメント
        A.7.3 コメントのアノテーション
    A.8 変数の宣言
    A.9 関数の宣言
    A.10 命名
    A.11 strictモード
    A.12 代入
    A.13 等号演算子
    A.14 三項演算子
    A.15 文
        A.15.1 簡単な文
        A.15.2 return文
        A.15.3 複文
        A.15.4 if文
        A.15.5 for文
        A.15.6 while文
        A.15.7 do文
        A.15.8 switch文
        A.15.9 try文
    A.16 空白
    A.17 避けるべき事柄

付録 B JavaScriptツール
    B.1 ビルドツール
    B.2 ドキュメンテーション作成ツール
    B.3 Lintツール
    B.4 ミニファイツール
    B.5 テストツール
索引

ここで紹介する正誤表には、書籍発行後に気づいた誤植や更新された情報を掲載しています。以下のリストに記載の年月は、正誤表を作成し、増刷書籍を印刷した月です。お手持ちの書籍では、すでに修正が施されている場合がありますので、書籍最終ページの奥付でお手持ちの書籍の刷版、刷り年月日をご確認の上、ご利用ください。

メンテナブルJavaScript第1刷正誤表

2013年5月9日更新

位置
p.7
下から
6行目
ロンのどちらである点です。 ロンのどちらである点です。
p.22
下から
17行目
// Bad: コードとコメントの間に余白がない
var result = something + somethingElse;      // somethingElseはnullにならない
// Bad: コードとコメントの間に余白がない
var result = something + somethingElse; // somethingElseはnullにならない
p.119
下から
4行目
element.className += " " + className; this.element.className += " " + className;

Feedback

皆さんのご意見をお聞かせください。ご購入いただいた書籍やオライリー・ジャパンへのご感想やご意見、ご提案などをお聞かせください。より良い書籍づくりやサービス改良のための参考にさせていただきます。
[feedbackページへ]