遅刻して申し訳ありません…
タイトルの通り、QML (Qt Quick) からNode.jsのモジュールをrequireできるライブラリ (いわばQML版Browserifyのようなもの)を開発しています。以前 RubyからQMLを使えるようにしたという記事 を書いたのですが、それと少し似ています。
ただ今のところ実用レベルには達していないので、ここから書く内容はポエムになります…。
実は同じコンセプトのプロジェクトである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に上がっている便利なライブラリを使えたら便利になりそうです。
やること
- いわゆるCommonJSスタイルの
require
の実装 - Node.js コアモジュールのshim (互換機能)を用意する
できなさそうなこと
- NodeのC++アドオン対応 (NodeのV8 APIにおもいっきり依存しているのでそれをshimするのは無理そう…)
- Nodeは対応しているけど、QMLのJSが対応していない言語機能に対応
目標 (一例)
もっといい記述方法も探しています。
ApplicationWindow {
property var path
Require on path { from: 'path' }
title: path.join('foo/bar', 'baz')
}