はじめに
第1章 Vue.jsことはじめ
第2章 Vue.jsのはじめかた
第3章 Vue.jsの基本的な使い方
第4章 ToDoリストを作る
第5章 単一ファイルコンポーネント
第6章 Vuex
第7章 vue-router
おわりに
著者紹介
本書はJavaScriptのフロントエンドフレームワークVue.jsの入門書です。
Vue.jsに興味のある人や、初めて触るけどとっかかりがないという人を想定読者とし、Vue.jsの使い方とそのエコシステムについて学べるように本書は書かれています。ES2015のJavaScriptを書いたことがある人であれば容易に理解できます。
またVue.jsの詳しい機能や高度な使い方についての紹介が不十分だと感じられるかも知れません。そのような時には公式ドキュメントが不十分さを補ってあまりあるほどの情報量を提供してくれます。
本書を通じてVue.jsやその周辺技術について学んでいただければ幸いです。
第1章 Vue.jsことはじめ
Vue.jsがどのようなフレームワークなのか、そのエコシステムについて紹介します。
第2章 Vue.jsのはじめかた
Vue.jsの学習やプロジェクトをどう進めていけばよいかについて紹介します。
第3章 Vue.jsの基本的な使い方
Vue.jsのライフサイクルや機能について、よく使う項目を紹介します。
第4章 ToDoリストを作る
実際にVue.jsでToDoリストの作成をおこないます。
第5章 単一ファイルコンポーネント
Vue.jsの強力な機能の一つ、単一ファイルコンポーネントについて紹介します。
第6章 Vuex
状態管理を行うライブラリVuexについて紹介します。
第7章 vue-router
ルーティングのライブラリvue-routerについて紹介します。
おわりに
本書のまとめです。
本書の作成には多くの人に助けられました、特に家族には自宅での作業中あまり相手をしてあげることができず申し訳なく思っておりました。会社の同僚には忙しい中レビューをしていただき本当に助かりました。この場を借りて感謝を申し上げます。
Vue.jsの公式ガイドは、本書を執筆する上でとても参考にさせていただきました。ガイドの翻訳を行っているVue.js日本語ユーザグループの皆様にも深く御礼を申し上げます。
本書に記載されている会社名、製品名などは、一般に各社の登録商標または商標、商品名です。会社名、製品名については、本文中では©、®、™マークなどは表示していません。
本書に記載された内容は、情報の提供のみを目的としています。したがって、本書を用いた開発、製作、運用は、必ずご自身の責任と判断によって行ってください。これらの情報による開発、製作、運用の結果について、著者はいかなる責任も負いません。
本書籍は、技術系同人誌即売会「技術書典3」で頒布されたものを底本としています。
Vue.jsとは一体どのようなフレームワークなのでしょうか。この章ではフロントエンドフレームワークそのものについて触れつつ、Vue.jsとそのエコシステムについて説明します。
昨今のWebアプリケーション開発は、複雑化の一途をたどっています。以前はもっぱらjQueryを用いて動的なWebアプリケーションが構築されていましたが、jQueryで動的にDOMを操作すると思わぬ挙動をしてしまい、アプリケーションが壊れるという問題などを抱えていました。
例えば、ある要素にクラス名を用いてjQueryでイベントハンドラを登録し、そのクラス名をのちの変更で変えてしまったとします。するとそのイベント発火はクラス名に依存しているため、もう発火することがありません。しかもjQueryのイベントハンドラの登録はエラーにならないため、動かなくなったとしても何が原因で動かなくなったのかがわからなくなってしまいます。ビューと密接に結合したJavaScriptならではの問題点と言えるでしょう。
そこでjQueryに代わるビューを扱うフレームワークが多く誕生しました。初期はBackbone.jsやKnockout.jsが使われ、この分野が成熟して行くにつれAngular.jsやEmber.js、さらにJSフレームワークのパラダイムシフトのきっかけとなったReact.jsなど様々なフレームワークが生まれました。
さらに、最近はWebアプリケーションの体感スピードの改善のためにシングルページアプリケーションで構築しようという動きが顕著になっています。シングルページアプリケーションの構築をJSフレームワークなしで行うのは困難なため、最適なフレームワーク選びが求められています。
Vue.jsは、インタラクティブ性のあるユーザインタフェースを構築するためのフロントエンドフレームワークです。
Vue.jsはEvan You(https://github.com/yyx990803)さんの個人プロジェクトとして2013年に開発が開始され、2015年10月に1.0、2016年10月に2.0をリリース、現在(2018年3月)最新のバージョンは2.5.13となっています。Evanさんは現在フルタイムでVue.jsを開発しており、開発の支援も様々な企業や個人スポンサーから受けているため、ほぼ万全の体制でVue.jsの開発が出来ている状態と言えます。
Vue.jsの機能面での特徴としてはMVVM(Model-View-ViewModel)のソフトウェアアーキテクチャパターンの影響を受けていることと、Webコンポーネントのようにカスタム要素を作り出し、再利用可能なビューを構築できることです。
データバインディングによるリアクティブなビューの変更と、保守性の優れたカスタム要素の作成で、小規模なアプリケーションから大規模なアプリケーションまで幅広く対応出来るフレームワークとなっています。
Vue.jsの特徴として、Progressive Frameworkという概念にもとづいて開発されているということがあります。
Progressive FrameworkとはEvanさんが提唱した概念で、アプリケーションの要求に応じて使い方を変えていくことのできるフレームワークのことを指します1。
ある課題があったとき、それを解決するフレームワークがその課題に対して不十分だったり、逆にオーバースペックであった場合、フレームワークの複雑性に引きずられて余計なコストがかかってしまいます。また、アプリケーションは作って終わりではないため、ユーザーの要望によって機能拡張が行われます。フレームワークがその変化に対応できなければ、これもまたコストがかかります。
Progressive Frameworkであることが意識されたフレームワークは課題に対して適切な使い方を提示でき、規模が拡大したとしてもそれに応じて変化することが出来ます。
Vue.jsとそれを取り巻くエコシステムは、常に変化する課題に柔軟に対応することが出来るように作られています。ビュー層をデータバインディングでリアクティブに変化させるVue.js、シングルページアプリケーションを作成するためにフロントエンドでのルーティングを可能にするvue-router、コンポーネント間の状態管理をシンプルに解決するVuexなど、状況に応じたライブラリが用意されています。
Progressive Frameworkは、5つの技術的領域を段階的に解決していきます。
まずはじめに、リアクティブな仕組みを使ってフォームを作りデータを送る要求のみ満たすためにVue.jsを使うとします。これだけならばscriptタグでVue.jsを読み込み、HTMLに直接ディレクティブ(Vue.jsの為にタグに追加する属性)を書くだけで十分です。ここで解決された領域は「宣言的レンダリング」です。
次にformを再利用したいという要求が出てきたとき、Vue.jsのコンポーネントの機能を使用することで満たすことが出来ます。Webコンポーネントのようにカスタム要素を作成し、要求に応じて再利用するなどして解決された領域は「コンポーネントシステム」です。
これまでの要求はいわゆるWebサイトとしての要求でしたが、シングルページアプリケーションなどのより「Webアプリケーション」らしいものにしていきたいと考えたとき、vue-routerなどを使用してその要求を満たします。ここで解決された領域は「クライアントサイドルーティング」です。
さらにWebアプリケーションとして規模が大きくなってくると、状態管理をしっかりとやる必要が出てきます。そこではVuexを使用することで要求を満たすことが可能です。ここで解決された領域は「大規模向け状態管理」です。
ここまでWebアプリケーションとして開発していくと、Vue.jsのコンポーネントの機能だけではコードが見辛くなる事があると思います。そのときはコンポーネントごとに.vueファイルに分割し、各種バンドルツールに応じたVue.jsのpluginを利用することでファイルの分割とビルドの仕組みを構築することが出来ます。ここで解決された領域は「ビルドシステム」です。
以上のようにVue.jsとそれを取り巻くエコシステムは、簡単なWebページからWebアプリケーションまで様々な要求に対応することが可能です。主要なものはEvanさんにより公式なサポートが行われているため、連携も自然に出来るようになっておりエコシステム全体でProgressive Frameworkを体現しています。