Vue.js入門 基礎から実践アプリケーション開発まで 
                    
                  
                  
                  - 川口和也,喜多啓介,野田陽平,手島拓也,片山真也 著
 - 定価
 - 3,718円(本体3,380円+税10%)
 - 発売日
 - 2018.9.22[在庫なし]
 - 判型
 - B5変形
 - 頁数
 - 480ページ
 - ISBN
 - 978-4-297-10091-9 978-4-297-10092-6
 
概要
Vue.jsを初歩から実践まで徹底的に解説。使いやすくかつ、プロダクションでも活躍するVue.jsをVue.jsコントリビューターの著者らが解説する一番わかりやすい入門書です。小規模な適用例やjQueryからの移行サンプルに加え、大規模開発を想定したアプリケーション開発も体験できます。Vue.jsはGitHubで2017年最も人気のあったJavaScriptフレームワークに選ばれるなど大注目の技術です。
こんな方にオススメ
- Vue.jsに興味のあるWebエンジニア
 - Vue.jsを本番で使いたいが課題があるエンジニア
 - Vue.jsを動かしてみたいWebデザイナー、コーダー
 
目次
1. プログレッシブフレームワークVue.js
- 1.1 現代のWebフロントエンド開発の複雑化
- 1.1.1 Webの誕生とWebベースシステムへの発展
 - 1.1.2 Ajaxの登場
 - 1.1.3 HTML5、Node.js、ES2015、React以降の世界
 - Column AltJSの登場
 - 1.1.4 現在の課題とVue.js
 
 - 1.2 Vue.jsの特徴
- 1.2.1 学習コストが低い
 - 1.2.2 コンポーネント指向によるUIの構造化
 - 1.2.3 リアクティブなデータバインディング
 
 - 1.3 Vue.jsの設計思想
- 1.3.1 フレームワークの複雑性
 - 1.3.2 要求の変化に追随できるフレームワーク
 
 - 1.4 プログレッシブフレームワークの解決する段階的な領域
- 1.4.1 宣言的レンダリング(Declarative Rendering)
 - 1.4.2 コンポーネントシステム(Component System)
 - 1.4.3 クライアントサイドルーティング(Client-side Routing)
 - 1.4.4 大規模向け状態管理(Large-scale State Management)
 - 1.4.5 ビルドシステム(Build System)
 - 1.4.6 クライアントサーバーデータ永続化(Client-server Data Persistence)
 
 - 1.5 Vue.jsを支える技術
- 1.5.1 コンポーネントシステム
 - 1.5.2 リアクティブシステム
 - Column リアクティブシステムの内側
 - 1.5.3 レンダリングシステム
 - Column Vue.jsの仮想DOMの処理の流れ
 
 - 1.6 Vue.jsのエコシステム
 - 1.7 Vue.jsのはじめの一歩
- Column JSFiddleで実践
 - Column Vue.jsのドキュメンテーション
 - Column Vue.jsコミュニティ
 - Column Vue.jsの対応ブラウザ
 
 
2. Vue.jsの基本
- 2.1 Vue.jsでUIを構築する際の考え方
- 2.1.1 旧来のUI構築の問題点
 - 2.1.2 Vue.jsのUI構築
 
 - 2.2 Vue.jsの導入
- Column Vue.jsの高度な環境構築
 
 - 2.3 Vueオブジェクト
- 2.3.1 コンストラクタ
 - Column MVVMパターン
 - 2.3.2 コンポーネント
 
 - 2.4 Vueインスタンスのマウント
- 2.4.1 Vueインスタンスの適用(el)
 - 2.4.2 メソッドによるマウント($mountメソッド)
 - Column Vue.jsを既存アプリケーションに導入する
 
 - 2.5 UIのデータ定義 (data)
- 2.5.1 Vueインスタンスの確認
 - 2.5.2 データの変更を検知する
 
 - 2.6 テンプレート構文
- 2.6.1 テキストへの展開
 - 2.6.2 属性値の展開
 - 2.6.3 JavaScript式の展開
 
 - 2.7 フィルタ(filters)
- Column フィルタの連結
 
 - 2.8 算出プロパティ(computed)
- 2.8.1 thisによる参照
 - 2.8.2 サンプルアプリケーションでの実装
 
 - 2.9 ディレクティブ
- 2.9.1 条件付きレンダリング(v-if/v-show)
 - 2.9.2 クラスとスタイルのバインディング
 - 2.9.3 リストレンダリング(v-for)
 - Column リストレンダリングパフォーマンス
 - 2.9.4 イベントハンドリング(v-on)
 - 2.9.5 フォーム入力バインディング(v-model)
 - Column 修飾子による動作の変更
 
 - 2.10 ライフサイクルフック
- 2.10.1 ライフサイクルフック一覧とフロー
 - 2.10.2 createdフック
 - 2.10.3 mountedフック
 - 2.10.4 beforeDestroyフック
 
 - 2.11 メソッド(methods)
- 2.11.1 イベントオブジェクト
 - Column 算出プロパティのキャッシュ機構
 - 2.11.2 サンプルでのメソッドの呼び出し
 
 
3. コンポーネントの基礎
- 3.1 コンポーネントとは何か
- 3.1.1 全てはUIコンポーネントから構成される
 - 3.1.2 コンポーネント化のメリットと注意点
 - 3.1.3 Vue.jsのコンポーネントシステム
 - Column Vue.jsのコンポーネントとWeb Components
 
 - 3.2 Vueコンポーネントの定義
- 3.2.1 グローバルコンポーネントの定義
 - 3.2.2 コンストラクタベースの定義
 - Column ReactのRender Props
 - 3.2.3 ローカルコンポーネントの定義
 - 3.2.4 テンプレートを構築するその他の手段
 - Column コンポーネントの命名規則について
 - 3.2.5 コンポーネントのライフサイクル
 - 3.2.6 コンポーネントのデータ
 - Column オブジェクトを指定した場合の警告
 
 - 3.3 コンポーネント間の通信
- 3.3.1 親コンポーネントから子コンポーネントへデータの伝播
 - 3.3.2 子コンポーネントから親コンポーネントへの通信
 - Column propsとイベントを用いない親子間のやりとり
 - Column 親子以外のコンポーネントでデータをやりとりする
 - Column 子から親のネイティブDOMイベントを取得したい場合 ― .native修飾子
 - Column propsの値に関して双方向バインディングを実現したい場合 ― .sync修飾子
 
 - 3.4 コンポーネントの設計
- 3.4.1 コンポーネントの分割方針
 - 3.4.2 コンポーネント自体の設計
 - Column Atomic Design
 - 3.4.3 スロットコンテンツを活かしたヘッダーコンポーネントの作成
 - 3.4.4 ログインフォームコンポーネントの作成
 - Column コンポーネント単位のテスト
 
 
4. Vue Routerを活用したアプリケーション開発
- 4.1 Vue Routerによるシングルページアプリケーション
- 4.1.1 シングルページアプリケーションとルーティング
 - 4.1.2 Vue Routerとは
 
 - 4.2 ルーティングの基礎
- 4.2.1 ルーターのインストール
 - 4.2.2 ルーティング設計
 
 - 4.3 実践的なルーティングのための機能
- 4.3.1 URLパラメーターの扱いとパターンマッチング
 - 4.3.2 名前付きルート
 - 4.3.3 router.pushを使った遷移
 - 4.3.4 フック関数
 
 - 4.4 サンプルアプリケーションの実装
- 4.4.1 リストページの実装
 - 4.4.2 APIによるデータ通信
 - 4.4.3 詳細ページの実装
 - 4.4.4 ユーザー登録ページの実装
 - 4.4.5 ログイン・ログアウトの実装
 - 4.4.6 サンプルアプリケーションの全体像
 
 - 4.5 Vue Routerの高度な機能
- 4.5.1 RouterインスタンスとRouteオブジェクト
 - 4.5.2 ネストしたルーティング
 - 4.5.3 リダイレクト・エイリアス
 - 4.5.4 履歴の管理
 - Column Vue Routerを使った大規模なアプリケーションの実装
 - Column Vue RouterとReact Router
 
 
5. Vue.jsの高度な機能
- 5.1 トランジションアニメーション
- 5.1.1 transitionラッパーコンポーネント
 - 5.1.2 トランジションクラス
 - 5.1.3 fadeトランジションの実装
 - Column Vue Routerのトランジション
 - Column カスタムトランジションクラス
 - 5.1.4 JavaScriptフック
 
 - 5.2 スロット
- 5.2.1 単一スロット
 - 5.2.2 名前付きスロット
 - 5.2.3 スロットのスコープ
 
 - 5.3 カスタムディレクティブ
- Column コンポーネントやミックスインとの違い
 - 5.3.1 作成するカスタムディレクティブの定義
 - 5.3.2 ディレクティブ定義オブジェクト
 - 5.3.3 フック関数の引数
 - 5.3.4 image-fallbackディレクティブの機能追加
 - Column DOM操作を行うライブラリをラップする
 
 - 5.4 描画関数
- 5.4.1 描画関数を用いないと書きづらい例
 - 5.4.2 描画関数による効率化
 - 5.4.3 createElement関数
 - Column h関数
 - Column JSX
 
 - 5.5 ミックスイン
- 5.5.1 ミックスインで機能を再利用する
 - 5.5.2 グローバルミックスイン
 - Column ミックスインの命名規則
 
 
6. 単一ファイルコンポーネントによる開発
- 6.1 ツールのインストール
- 6.1.1 Vue CLI
 
 - 6.2 単一ファイルコンポーネントとは
 - 6.3 単一ファイルコンポーネントの仕様
- 6.3.1 <template>ブロック
 - 6.3.2 <script>ブロック
 - 6.3.3 <style>ブロック
 
 - 6.4 単一ファイルコンポーネントのビルド
 - 6.5 単一ファイルコンポーネントの動作を体験する
- 6.5.1 動作を押さえる
 
 - 6.6 単一ファイルコンポーネントの機能
- 6.6.1 外部ファイルのインポート
 - 6.6.2 スコープ付きCSS
 - Column スコープ付きCSSのメリット
 - 6.6.3 CSSモジュール
 - 6.6.4 他言語実装のサポート
 - Column カスタムブロック
 - Column カスタムブロックの定義
 
 
7. Vuexによるデータフローの設計・状態管理
- 7.1 複雑な状態管理
 - 7.2 データフローの設計
- 7.2.1 信頼できる唯一の情報源(Single Source of Truth)
 - 7.2.2 「状態の取得・更新」のカプセル化
 - 7.2.3 単方向データフロー
 
 - 7.3 Vuexによる状態管理
- 7.3.1 Vuexのインストール
 
 - 7.4 Vuexのコンセプト
- 7.4.1 ストア
 - 7.4.2 ステート
 - 7.4.3 ゲッター
 - 7.4.4 ミューテーション
 - 7.4.5 アクション
 
 - 7.5 タスク管理アプリケーションの状態管理
- 7.5.1 アプリケーションの仕様と準備
 - 7.5.2 タスクの一覧表示
 - 7.5.3 タスクの新規作成と完了
 - 7.5.4 ラベル機能の実装
 - 7.5.5 ラベルのフィルタリング
 - 7.5.6 ローカルストレージへの保存と復元
 - 7.5.7 Vuexによるアプリケーションの考察
 
 - 7.6 ストアのモジュール分割
- 7.6.1 namespacedオプションによる名前空間
 
 - 7.7 VuexストアとVueコンポーネント間の通信
- 7.7.1 コンポーネントからストアにアクセスする
 - 7.7.2 ストアにアクセスするコンポーネントを必要最小限にする
 
 - 7.8 VuexとVue Routerの連携
 
8. 中規模・大規模向けのアプリケーション開発① 開発環境のセットアップ
- 8.1 Vue.jsのプロジェクト構築の特徴
- 8.1.1 Vue.jsで本格的な開発をするための心構え
 
 - 8.2 本章で作成するアプリケーション
- 8.2.1 アプリケーション仕様概要
 - 8.2.2 アプリケーションアーキテクチャ
 - Column バックエンドの設計
 
 - 8.3 アプリケーションの開発環境構築
- 8.3.1 開発環境構築をサポートするVue CLI
 - 8.3.2 JavaScriptの環境構築とVue CLI
 - Column vue init について
 
 - 8.4 Vue CLIによる開発環境の構築
- 8.4.1 アプリケーションプロジェクトの作成
 - 8.4.2 プロジェクト構造
 - 8.4.3 タスクコマンド
 - 8.4.4 アプリケーションの起動確認
 - 8.4.5 アプリケーションの環境変数
 
 - 8.5 アプリケーションのビルド
- 8.5.1 アセット処理
 - 8.5.2 リントツール
 
 - 8.6 テスト環境
- 8.6.1 単体テスト
 - 8.6.2 E2Eテスト
 
 - 8.7 フロントエンド・バックエンド連携
- 8.7.1 APIのプロキシ
 - 8.7.2 バックエンドとのインテグレーション
 
 - 8.8 さらなる開発環境の強化
- 8.8.1 Vue.jsコーディング環境の構築
 - 8.8.2 Vue.js公式ESLintプラグインの導入
 - 8.8.3 デバッグとプロファイリングの環境構築
 - 8.8.4 バックエンドAPIサーバーの環境構築
 - 8.8.5 状態管理ライブラリの導入
 - 8.8.6 HTTPクライアントライブラリの導入
 - 8.8.7 単体テストユーティリティの導入
 - 8.8.8 E2Eテストのコマンド登録
 
 
9. 中規模・大規模向けのアプリケーション開発② 設計
- 9.1 コンポーネント設計
- 9.1.1 Atomic Designによるコンポーネントの抽出
 - 9.1.2 Atoms
 - 9.1.3 Molecules
 - 9.1.4 Organisms
 - 9.1.5 Templates
 
 - 9.2 単一ファイルコンポーネント化
- 9.2.1 ディレクトリの構造化と各ファイルの配置
 - 9.2.2 コンポーネントのAPI
 - 9.2.3 KbnButtonコンポーネントのAPI
 
 - 9.3 状態モデリングとデータフローの設計
- 9.3.1 状態モデリング
 - 9.3.2 データフロー
 - 9.3.3 データフロー周りの雛形コードのセットアップ
 - 9.3.4 アクションの雛形
 
 - 9.4 ルーティング設計
- 9.4.1 ルートフロー
 - 9.4.2 ルート定義
 
 
10. 中規模・大規模向けのアプリケーション開発③ 実装
- 10.1 開発方針の整理
- 10.1.1 アプリケーションの実装に入る前に
 
 - 10.2 コンポーネントの実装
- 10.2.1 KbnButtonコンポーネント
 - 10.2.2 KbnLoginFormコンポーネント
 - 10.2.3 KbnLoginViewコンポーネント
 
 - 10.3 データフローの実装
- 10.3.1 loginアクションハンドラ
 - 10.3.2 AUTH_LOGINミューテーションハンドラ
 - 10.3.3 Auth APIモジュール
 
 - 10.4 ルーティングの実装
- 10.4.1 beforeEachガードフックを活用したナビゲーションガード
 
 - 10.5 開発サーバーとデバッグ
- 10.5.1 開発サーバーによる開発
 - 10.5.2 Vue DevToolsによるデバッグ
 
 - 10.6 E2Eテスト
- 10.6.1 E2Eテストの実装
 - 10.6.2 テストの実行
 
 - 10.7 アプリケーションのエラーハンドリング
- 10.7.1 子コンポーネントのエラーハンドリング
 - 10.7.2 グローバルなエラーハンドリング
 
 - 10.8 ビルドとデプロイ
- 10.8.1 アプリケーションのビルド
 - 10.8.2 アプリケーションのデプロイ
 - Column Vue.jsのバックエンド
 
 - 10.9 パフォーマンス測定・改善
- 10.9.1 パフォーマンス測定の設定方法
 - 10.9.2 測定できる処理
 - 10.9.3 レンダリングパフォーマンスの向上
 - Column Vue CLIの対話的な選択時の注意点
 - Column テンプレートコンパイラのオプションを利用する
 
 
Appendix A jQueryからの移行
- A.1 移行の判断
 - A.2 jQueryで実装していた機能のVue.jsによる実装
- A.2.1 イベントリスナー
 - A.2.2 表示の切り替え
 - A.2.3 要素の挿入・削除
 - A.2.4 属性値の変更
 - A.2.5 クラスの変更
 - A.2.6 スタイルの変更
 - A.2.7 フォーム(ユーザー入力)
 
 
Appendix B 開発ツール
- B.1 Storybook
- B.1.1 開発プロジェクトに導入する
 - B.1.2 Storybookを動作させる
 - B.1.3 ストーリーを実装する
 - B.1.4 Storybookを公開する
 
 - B.2 静的型付き言語
- B.2.1 TypeScript
 - B.2.2 TypeScriptの記述例
 - B.2.3 セットアップ
 - Column TypeScriptコンパイラ
 - B.2.4 コンポーネントの実装
 - Column 単一ファイルコンポーネント用の設定
 - B.2.5 エディタ
 - B.2.6 ライブラリの型定義
 - Column TypeScriptの型定義がないとき
 - Column Vue.jsとFlow
 
 
Appendix C Nuxt.js
- C.1 Nuxt.jsとは
 - C.2 Nuxt.jsの特徴
- C.2.1 サーバーサイドレンダリングのサポート
 - Column サーバーサイドレンダリング環境の構築
 - Column サーバーサイドレンダリングの必要性
 - C.2.2 すぐに開発着手できる開発環境と拡張性の提供
 - C.2.3 静的なHTMLファイル生成のサポート
 
 - C.3 Nuxt.jsをはじめる
 - C.4 Nuxt.jsで静的サイトを作成する
- C.4.1 画面仕様
 - C.4.2 ルーティングを追加する
 - C.4.3 グローバルナビゲーションのコンポーネントを追加する
 - C.4.4 レイアウトにグローバルナビゲーションを追加する
 - C.4.5 開発サーバーで動作確認する
 - C.4.6 静的なHTMLファイルにビルドする
 - Column Nuxt.jsにおけるサーバーサイドレンダリング
 
 
プロフィール
川口和也
Vue.jsコアチームメンバ。オープンソースソフトウェア活動に関わりながら、日本のVue.js日本ユーザーグループの代表であり、コミュニティの運営活動をしている。i18n Enthusiast(エンスージアスト:熱狂者)でもある。Webフロントエンド技術以外に、関心のあるWebAssemblyなどの最新Web技術動向も追いかけている。フルタイムオープンソースソフトウェア開発者としての活動を模索中。本書では、1章、6章、8章、9章、10章、Appendix B、Appendix Cを執筆。本書内容全般を監修。
喜多啓介
LINE株式会社にて、JavaScriptを中心にクライアントサイドの実装を担当。Vue.jsの柔軟性に注目し、業務・趣味を問わず活用している。本書では2章、5章、Appendix Aを執筆。
野田陽平
IBMにて電子情報開示関連のソフトウェア開発にQA及びフロントエンドエンジニアとして約5年間携わる。その後株式会社プレイドに入社し、CX(顧客体験)プラットフォームKARTEの開発を行う。本書では3章を執筆。
GitHub:positiveflat
Twitter:@positiveflat
手島拓也
IBMやLINEにて主にWeb製品開発を約7年間担当。その後、共同創業者兼CTOとしてUPSTAYを設立、事業譲渡を経験。現在はエンジニア向けの事務所GAO GAO Asiaを設立し代表を務める。本書では4章を執筆。