LoginSignup
11
2

More than 5 years have passed since last update.

C++で書いたクラスをemscriptenを経由してVue.jsで利用する

Last updated at Posted at 2016-12-30

この記事は @janus_wel さんの emscripten でドメイン層に型と速度を持ち込む触発されたロマンを感じた筆者が、C++で書かれたクラスをemscriptenを通してVue.jsにバインドしてみた記事です。「なぜそもそもそんなこと面倒なことを?」と思われた方がいたら、元記事の「コンセプト」や「経緯」の部分を読んでもらえればと思います。「要するにロマンです」です。

概要

リポジトリ: edwardkenfox/vue-emscripten-todo
デモ: vue-emscripten-todo

  • TodoクラスはC++で実装
    • 最近趣味でC++触り始めていたので自分で書いても良かったんですが、Todo.cppやビルド用のスクリプトは元の実装を拝借しました
  • AppコンポーネントおよびTodoコンポーネントをVueで実装
    • Appコンポーネント(コンテナ)は複数のTodoコンポーネントを持つ
    • Todoコンポーネント(Vue)はTodoクラス(C++だったやつ)のインスタンスを持ち、Todoのドメイン知識はTodoクラスのインスタンスが管理する

ややこしいですね。でもロマンがあるからいいんです。

課題

TodoオブジェクトをVue.jsから利用する際に、Todoクラスが持ってるプロパティがリアクティブにならない(!)

  • emscriptenを通して出力されたTodo.jsファイルの中身を見ていないのでなんとも言えないですが、Change Detection Caveats に書かれている内容に該当するんじゃないかと推測
  • this.$set(todo, 'isDone', Boolean)もうまくいかず

まとめ

  • C++で書いたクラスのプロパティがリアクティブにならない点は要調査
    • これが出来ないとそもとも全く使いものにならないw
  • emscriptenやWebAssemblyなどの技術は、ブラウザゲームや3Dレンダリングが主な目的として利用されるだろうと想定していましたが、こういう感じでカジュアルに取り込むことができるなら、Webアプリケーションが利用することも出来なくはない、という印象でした

    • とはいえ、1KBのcppファイルが500KBのjsファイルになる時点で全然カジュアルではない

11
2
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
11
2