QMLでNode.jsのモジュールをrequireできるライブラリを作ってる

  • 2
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

遅刻して申し訳ありません…

タイトルの通り、QML (Qt Quick) からNode.jsのモジュールをrequireできるライブラリ (いわばQML版Browserifyのようなもの)を開発しています。以前 RubyからQMLを使えるようにしたという記事 を書いたのですが、それと少し似ています。

https://github.com/seanchas116/qmlrequire

ただ今のところ実用レベルには達していないので、ここから書く内容はポエムになります…。

実は同じコンセプトのプロジェクトであるnode.qmlというのがあるのですが (こっちのほうが先です)、Nodeの機能を全部C++で実装するなどつらそうなので、自分でより軽量の実装を作ることにしました。

背景

npmのモジュールをQMLでも使いたい

npmというNode.jsのパッケージマネージャがありますが、最近では Browserify / webpack などを経由して、WebフロントエンドJSからも使われるようになりました。
結果的に、(サーバーサイド・Webフロントエンドなどの) 分野を問わず代表的なJavaScriptのパッケージマネージャになりつつあります。

QMLでも、サーバーサイド・WebフロントエンドのJSと同じように、npm経由でインストールしたNode.jsのモジュールを使えるようになれば、Qt Quickでの開発がもっと楽になるのではないか?と考えました。

ファイル操作などの汎用的な処理をJavaScriptで

Qt Quickを記述するQMLはとても便利で、やることさえ限られていればJavaScriptのみですべてのロジックを記述することができます。

しかし、QML上のJavaScriptは、ファイル操作などの処理をサポートしておらず、C++上のように汎用的な内容を実装することができません。

そんな時にNode.jsのfsモジュールや、npmに上がっている便利なライブラリを使えたら便利になりそうです。

やること

できなさそうなこと

  • NodeのC++アドオン対応 (NodeのV8 APIにおもいっきり依存しているのでそれをshimするのは無理そう…)
  • Nodeは対応しているけど、QMLのJSが対応していない言語機能に対応

目標 (一例)

もっといい記述方法も探しています。

ApplicationWindow {
    property var path
    Require on path { from: 'path' }
    title: path.join('foo/bar', 'baz')
}
この投稿は Qt Advent Calendar 201414日目の記事です。