FlareをFlutterだけじゃなくてJSでもFlareった話
FlareをFlutterだけじゃなくてJSでもFlareった話:
Diverse Advent Calendar 2018 19日目の記事です。
昨日は、 @clownfish さんの Reproを使いやらかしてしまった話 でした。
Diverseでは、失敗を糧に多くトライでさらに成長できる Fail Fast というバリューを掲げており、今年の反省をぜひ来年に活かしていきたいですね!
(※今回の記事は執筆時の12/12時点での内容になります。)
さて今回のお話ですが、先日 12/4 に行われた Flutter Live で、Flutterの大きなアップデートの発表がありましたが、その中のツール紹介で、 2dimentions社の Flare がありました。
Flareは、ブラウザ上でポチポチするだけで簡単にアニメーションが作成できる素晴らしいGUIツールです。
作成したアニメーションはflr形式のバイナリファイルをexportでき、そのファイルをflutter appに取り込み、packageを介して表示することができます。
そこでexportする際に、アニメーションを動かすプラットフォームを選択できる

「もしやWebフロントエンドでも使えるのでは?
」
そんな小さな好奇心から始まった、ブラウザでflrファイルを表示できるまでの奮闘記についてお話します。
まず、私は公式ページを確認したところ、
なんだーあるんじゃーん♪
期待に胸を踊らせリンク先のリポジトリへ。
早速READMEを読んでみると、
とのことで、早速 example.html をブラウザで確認!

これで再度トライ!



もう一度READMEをみてみると、
なるほど
ということで、




この
CanvasKitとは、先のREADMEにもあったとおり、Googleが開発してる2Dグラフィックライブラリ SKIA の一つです。1
目的のCanvasKitは、リポジトリの
以下、OSX(10.14.1)でのビルド手順です。
GNコマンドについては、こちらご覧ください。
Emscriptenは、C/C++言語から生成されるLLVMビットコードを入力に、JavaScriptに変換するコンパイラです。4
※ビルドに30分ほどかかります。
以上が成功すると、以下のディレクトリに2ファイルが生成されているのが確認できました。
第2章で作成したcanvaskitをFlare-JSのbuildディレクトリ配下に配置して、再度ブラウザ起動!




この
なので、
)





Flare-JSでブラウザでも表示できることが確認できました。Flareの公式で1.0.0のリンクがだされていましたが、CanvasKitも絶賛開発中でFlare-JSもそれに追従している?感じが見受けられ、現状まだ安定版ではないのかなと思いました。しかし、近い将来安定版出た際には、アニメーション実装の選択肢として検討してみてもいいかなと思いました!
明日は、 @giiiita さんのお話です!お楽しみに!ノシ
Diverse Advent Calendar 2018 19日目の記事です。
昨日は、 @clownfish さんの Reproを使いやらかしてしまった話 でした。
Diverseでは、失敗を糧に多くトライでさらに成長できる Fail Fast というバリューを掲げており、今年の反省をぜひ来年に活かしていきたいですね!
(※今回の記事は執筆時の12/12時点での内容になります。)
序章 ~Flareとの出会い~
さて今回のお話ですが、先日 12/4 に行われた Flutter Live で、Flutterの大きなアップデートの発表がありましたが、その中のツール紹介で、 2dimentions社の Flare がありました。Flareは、ブラウザ上でポチポチするだけで簡単にアニメーションが作成できる素晴らしいGUIツールです。
作成したアニメーションはflr形式のバイナリファイルをexportでき、そのファイルをflutter appに取り込み、packageを介して表示することができます。
そこでexportする際に、アニメーションを動かすプラットフォームを選択できる
Engine の項目で Web という選択肢を確認しました。「もしやWebフロントエンドでも使えるのでは?
そんな小さな好奇心から始まった、ブラウザでflrファイルを表示できるまでの奮闘記についてお話します。
第1章 ~SDKへの期待と挫折~
まず、私は公式ページを確認したところ、なんだーあるんじゃーん♪
期待に胸を踊らせリンク先のリポジトリへ。
早速READMEを読んでみると、
Usage要約すると、
Take a look at example/example.html and example/example.js for how to initialize and use a Flare animation.
example/example.html と example/example.js をみて参考にしてね!とのことで、早速 example.html をブラウザで確認!
gl-matrix.js は、package.json にあったのでコピーすればよさそう。Flare.min.js は、webpack.config.js があるので、ビルドすれば生成できそう。npm install npx webpack cp ./node_modules/gl-matrix/dist/gl-matrix.js ./build
ball.flj なるアニメーションファイルらしきものが、こちらで削除されてて、masterでは確認できませんでした。もう一度READMEをみてみると、
CanvasKit vs Canvas要約すると、
There are currently two branches: master with Canvas 2d context as the renderer and CanvasKit with SKIA via WebAssembly. Going forward the CanvasKit branch will become the active one as it supports more advanced rendering operations which Flare will soon require.
master ブランチは Canvas 2d context、CanvasKit ブランチはCanvasKitでレンダリングしてるけど、今後はCanvasKitが活発になるよ!なるほど
ということで、
canvaskit ブランチにチェックアウトして、ブラウザで再チャレンジ!この
canvaskit.js は、webpackにも記述がなく、参照されているbuild ディレクトリは .gitignore されてるため、別途生成する必要がでてきました。
第2章 ~CanvasKitのビルド~
CanvasKitとは、先のREADMEにもあったとおり、Googleが開発してる2Dグラフィックライブラリ SKIA の一つです。1目的のCanvasKitは、リポジトリの
experimental ディレクトリにあります。以下、OSX(10.14.1)でのビルド手順です。
1. GNコマンドのインストール2
GNコマンドについては、こちらご覧ください。python tools/git-sync-deps
2. Emscriptenのインストール3
Emscriptenは、C/C++言語から生成されるLLVMビットコードを入力に、JavaScriptに変換するコンパイラです。4※ビルドに30分ほどかかります。
# CMakeのインストール brew install cmake # Emscriptenのビルド git clone https://github.com/juj/emsdk.git cd emsdk ./emsdk install --build=Release sdk-incoming-64bit binaryen-master-64bit # 30分... ./emsdk activate --global --build=Release sdk-incoming-64bit binaryen-master-64bit # emsdkにパスを通す export EMSDK=/path/to/emsdk
3. CanvasKitのビルド
cd experimental/canvaskit make
skia
└── out
└── canvaskit_wasm
├── canvaskit.js
└── canvaskit.wasm
最終章 ~リベンジ~
第2章で作成したcanvaskitをFlare-JSのbuildディレクトリ配下に配置して、再度ブラウザ起動!この
setMatrix関数ですが、タイミングが悪く執筆時の数日前にちょうどCanvasKit側で変更があり、setMatrix関数が使えなくなっていました...なので、
setMatrixをconcatに書き換えて再度チャレンジ!(本家にPR出しました
完 ~まとめ~
Flare-JSでブラウザでも表示できることが確認できました。Flareの公式で1.0.0のリンクがだされていましたが、CanvasKitも絶賛開発中でFlare-JSもそれに追従している?感じが見受けられ、現状まだ安定版ではないのかなと思いました。しかし、近い将来安定版出た際には、アニメーション実装の選択肢として検討してみてもいいかなと思いました!明日は、 @giiiita さんのお話です!お楽しみに!ノシ
コメント
コメントを投稿