最近のJS&CSSアニメーションライブラリまとめ

最近のHTML5アニメーションについてのまとめです。

まとめを紹介する前にCSS3アニメーション vs JSアニメーションのパフォーマンスについての有名な海外の記事を紹介します。
<a href="http://davidwalsh.name/css-js-animation">http://davidwalsh.name/css-js-animation</a>

大雑把に内容を要約すると、以下のようなお話です。
- DOMを操作したJavaScript AnimationよりCSSの方が早い
- ただしCSSにも色々欠点がある(GPU負荷が大きい、ブラウザの対応とか)

結論: JavaScriptでアニメーションを最適化できるライブラリを使いましょう！

この記事で紹介されている最適化を施したJSライブラリは<a href="http://www.greensock.com/gsap-js/">GSAP</a>と<a href="http://velocityjs.org/">Velocity.js</a>です。大規模なアニメーションでない場合はVelocity.jsがおすすめのようです。


もちろん上記の他にも色々ライブラリは存在し、使用用途により最適なライブラリは変わってくると思います。

今回は、いくつか現状のJS&CSSアニメーションライブラリについて少しだけ調べてみて、所感を交えてざっとまとめてみました。


<section>
# Velocity.js
軽量なjquery animationの代替で、キャッシュによる最適化やhardwareアクセサレーターの使用等により高速化。jQueryに依存していますが、そこそこモバイルでも使用できる軽快さがありそうです。より高度なアニメーションを使うためのUI Packという拡張パッケージも存在します。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/julianshapiro/velocity">https://github.com/julianshapiro/velocity</a> |
| HP | <a href="http://velocityjs.org/">http://velocityjs.org/</a> |
| Demo | <a href="http://julian.com/research/velocity/demo.html">http://julian.com/research/velocity/demo.html</a>
| Size | 約8kb(ただし、jqueryの依存があるため、jquery 2.0 なら+81kb) |


所感: モバイル環境でそこそこの量（大規模過ぎず、小規模過ぎず）のアニメーションを動かす場合に、かなり使えるのではないかと思っています。個人的には<a href="http://zeptojs.com/">zepto.js</a>を使用して動けばさらに軽量で最高なんですが(今は残念ながら動いてなさそう)。
</section>

<section>
# CreateJS
HTML5リッチコンテンツ作成用。FlashのActionScriptの実装者が参加しているようで、ActionScriptライクな書き方ができるようです。
スイートとなっておりいくつかのライブラリを梱包しているようです。
<ul>
<li>EaselJS: HTML5環境でcanvas作成が簡単にできるようにするもの</li>
<li>TweenJS: 全ブラウザサポート、独立して動作するJSアニメーションライブラリ(約17kb)</li>
<li>SoundJS: その名の通りaudio関連のライブラリ</li>
<li>PreloadJS: scriptやリソースのロードに関するライブラリ</li>
</ul>

|||
|:-----------|:-----------|:-----------|
| HP | <a href="http://createjs.com/#!/CreateJS">http://createjs.com/#!/CreateJS</a> |
| Size | 約152kb |

所感: Adobeがスポンサーなので、FLASHデベロッパー向けのJSライブラリという印象。本格的に大規模なFlashアプリやゲームのようなものをJSで実現したい時に良さそう。ちなみにアニメーションのコアを提供するTweenJSは独立して動作するので、それだけで軽量ライブラリとして使えそう。
</section>

<section>
# famo.us
HTML5アプリケーションでネイティブアプリと同レベルの美しいエフェクトやアニメーションを提供するJavaScriptフレームワーク。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/famous/famous">https://github.com/famous/famous</a> |
| HP&Demo | <a href="https://famo.us/">https://famo.us/</a> |
| Size | JS 約178kb, CSS 約2kb |

所感: Webアプリだとは思わせないようなネイティブアプリ風のエフェクトを実現したい時に使えそう。大企業などが参画しているようで、そこそこオープンソースとして活発のように見えるので今後期待できそうな予感。
</section>


<section>
# Snap.svg
SVGライブラリ<a href="http://raphaeljs.com/">Raphaël</a>をmodernブラウザ向けにscratchで書き直したもの。
SVGオブジェクトを他のanimationライブラリと同様のJavaScriptによる操作で容易に アニメーションを実装できるようにしたライブラリ。このSnap.svgを通じてSVGを生成できるのはもちろんのことAdobe IllustratorやSketchで作ったSVGを非同期にロードして扱うことも可能。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/adobe-webplatform/Snap.svg">https://github.com/adobe-webplatform/Snap.svg</a> |
| HP | <a href="http://snapsvg.io/">http://snapsvg.io/</a> |
| Demo | <a href="http://snapsvg.io/demos/">http://snapsvg.io/demos/</a> |
| Size | 73kb |

所感: やはりSVGはcanvasと違ってvectorなので、screen sizeに依存しない描画パフォーマンスが期待できそう。また、デザイナーさんにtoolを使って作ってもらったSVGをそのままアニメーションさせたい時に効果的。
</section>


<section>
# Movie.js
超軽量、内部的にCSSを使用したライブラリ。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/visionmedia/move.js/">https://github.com/visionmedia/move.js/</a> |
| Demo | <a href="http://visionmedia.github.io/move.js/">http://visionmedia.github.io/move.js/</a> |
| Size | 約16kb |

所感: とてもシンプルで、学習コストも低そう。いくつかのオブジェクトを単に移動させるようなシンプルなアニメーションのみの場合に使えそう。
</section>

<section>
# Bonsai
見栄えの良いgraphやアニメーションを簡単に実現できるライブラリ。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/uxebu/bonsai">https://github.com/uxebu/bonsai</a> |
| Demo | <a href="http://demos.bonsaijs.org">http://demos.bonsaijs.org</a> |
| Size | 約139kb |

所感: サンプルやドキュメントも割と充実しているので、少し派手なエフェクトを実装したい場合、お手軽に試せそう。
</section>

<section>
# jAction
日本の会社が運営しているHTML5ゲーム向けライブラリ。FlashゲームのようなものをJSで作成する際のフレームワークを提供しています。

|||
|:-----------|:-----------|:-----------|
| HP | <a href="http://jaction.info/">http://jaction.info/</a> |
| Size | 約28kb |

所感: Flashゲームのようなものを作りたい時に良さそう。チュートリアルなども充実していて、プラグインなどの仕組みもあるみたい。
</section>

<section>
# CollieJS
HTML5を利用し、アニメーションとゲームを作るためのJavaScriptライブラリーです。キャンバスとDOMを利用し、各デバイスに最適化されたパフォーマンスを提供できるライブラリのようです。

|||
|:-----------|:-----------|:-----------|
| HP | <a href="http://jindo.dev.naver.com/collie/">http://jindo.dev.naver.com/collie/</a> |
| Size | 約102kb |

所感: モバイルデバイスにも最適化されているようなので、モバイル向けに簡単なゲームなど多くのアニメーションを必要とする場合に使ってみたいなぁ。
</section>

<section>
# magic
JS無しでCSSのみで実現するCSSアニメーションライブラリ。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/miniMAC/magic">https://github.com/miniMAC/magic</a> |
| HP | <a href="http://www.minimamente.com/magic-css3-animations-by-minimac/">http://www.minimamente.com/magic-css3-animations-by-minimac/</a> |
| Demo | <a href="http://www.minimamente.com/example/magic_animations/">http://www.minimamente.com/example/magic_animations/</a> |
| Size | 約78kb (minimized cssファイル) |

所感: JSを使うのは煩わしい、CSSだけ読み込んでhtmlにクラスを当てればアニメーション＆エフェクトのできあがり、というお手軽感で人気がありそうなライブラリ。デモサイトを見ていても、CSSだけでこんなにできるんだなぁと驚いた。
</section>


<section>
# animate.css
magicと同じくCSSのみのライブラリです。軽量で簡単なエフェクトを提供しています。

|||
|:-----------|:-----------|:-----------|
| GitHub | <a href="https://github.com/daneden/animate.css">https://github.com/daneden/animate.css</a> |
| HP | <a href="http://daneden.github.io/animate.css/">http://daneden.github.io/animate.css/</a> |
| Size | 約55kb |

所感: アニメーションというよりはエフェクトという印象。magicより機能は少ないように見えますが、軽量なので簡易エフェクトをCSSだけで実装したい時にとても便利そう。
</section>

<hr>

以上！
今回の記事ではざっと調べたライブラリを紹介しただけなので、それぞれのライブラリの持つ思想の差異だとか、実際に使ってみたアニメーションの比較などはできませんでした。
次回はどれかのライブラリをより詳しく掘り下げた記事を書ければいいなと思います。

他にも最近アツいライブラリをご存知でしたらまとめに追記いたしますのでお知らせください。