38
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VirtualDOMAdvent Calendar 2014

Day 10

今からVirtual DOMを勉強します!

Last updated at Posted at 2014-12-09

VirtualDOM Advent Calendar 2014 - Qiitaの10日目です。

はじめに

この記事は、これからVirtual DOMを始める人やVirtual DOMに興味があるけれど触ったことがない人のための記事です。まず、Virtual DOMとは何なのかについて述べて、なぜVirtual DOMが必要なのかについて考察してみます。そして、少しだけReactに触ってみましょう。

私はVirtual DOMについて詳しくありません。もしかすると間違ったことを記事に書いてしまうかもしれません。もし誤りに気付きましたら、指摘していただけれると助かります。また、コメントも励みになります。気軽にコメントしていただければと思います。

Virtual DOMとは?

まずはどういうものなのか知りたいですよね?公式な定義ではありませんが、Virtual DOMとは__DOMを作るために必要な情報を持っているオブジェクト__です。

Virtual DOMを勉強し始めたとき、私は「誰かがブラウザの仕組みを解読して、全く新しいアプローチによってDOMを作っているのだ」と勘違いをしていました。そういうことではありません。

Virtual DOMは__DOMを作るために必要な情報を持っているオブジェクト__です。Reactなどのフレームワークのことは一旦忘れてみて下さい。Virtual DOMは理解できないほど難しい概念ではありません。

なぜVirtual DOM?

なぜ__DOMを作るために必要な情報を持っているオブジェクト__が必要なのでしょうか?ちょっと視点を変えます。データバインディングという視点からVirtual DOMを眺めてみます。

念のため、データバインディングについておさらいします。データバインディングとは__モデルの更新に伴いビューを更新する仕組みのこと、または、ビューの更新に伴いモデルを更新する仕組みのこと__です。

Virtual DOMの必要性とデータバインディングとにどのような関係があるのでしょうか?一見して関係などないように見えますが、データバインディングという視点からVirtual DOMを眺めることでVirtual DOMの必要性を確認することができます。

簡単のために、クライアントサイドにおけるモデルをJavaScriptのオブジェクト、__クライアントサイドにおけるビューをDOM__とします。そうすると、Virtual DOMがモデルでありながら、ビューでもあるように見えます。つまり、Virtual DOMはデータバインディングの仕組みを持っているように見えます。

あまり詳しくはないのですが、データバインディングの仕組みを持つフレームワークの一つであるBackbone.jsなどでは、モデルオブジェクトのデータが変更されたときにイベントを発火し、ビューオブジェクトでそのイベントを検知し、ビューオブジェクトでDOMを操作してデータバインディングを実現していると思います。

一方、Virtual DOMをベースとしたフレームワークは、Virtual DOMの変更に伴い、__直接DOMを操作することなく__DOMが変更されます。言い換えると、モデルの変更に伴い、__直接DOMを操作することなく__ビューが変更されます。つまり、Virtual DOMをベースとしたフレームワークはデータバインディングの仕組みを持っています。なおかつ、__直接DOMを操作することなく__データバインディングの仕組みを実現しています。Virtual DOMとデータバインディングとの関係が見えてきました。

例えば、Reactを見てみると、Reactにはデータバインディングの仕組みがあります。__直接DOMを操作することなく__データバインディングを実現しています。(この記事内で一番大切なところですが、私が理解できているか怪しいところでもあります。。。)

他にもVirtual DOMが必要であることを納得させる要素があると思いますが、__直接DOMを操作することなく__データバインディングを実現できるからVirtual DOMが必要なんじゃないかなと思います。

ReactでVirtual DOMを試してみよう

ここまで抽象的なことばかりでちょっと辛いですよね。どんな感じなのかReactで確認してみましょう。

index.htmlだけ用意しました。src/app.jsは上記リンク先で調達できます。buildディレクトリ下のファイルはパッケージマネージャで調達できます。そして、cpコマンドなどでbuildディレクトリ下にコピーします。

index.html
<!DOCTYPE html>
<html>
  <head>
    <script src="build/react.js"></script>
    <script src="build/JSXTransformer.js"></script>
  </head>
  <body>
    <div id="content"></div>
    <script type="text/jsx" src="src/app.js"></script>
  </body>
</html>

念のため、パッケージマネージャでbuildディレクトリ下のファイルを調達する方法も紹介しておきます。次のコマンドで調達できます。

$ npm install bower -g
$ bower install react

まとめ

Virtual DOMとは何なのか、なぜVirtual DOMが必要なのかについて書きました。この記事で紹介したことに目新しいことはないかもしれません。細々とあれやこれやとインターネットで検索して、何が分からないのか分からない感じで、私がよく分からないと思うことにフォーカスしてまとめたものになります。

参照URL

38
44
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
44

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?