LoginSignup
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-14

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

タイトルの通り、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に上がっている便利なライブラリを使えたら便利になりそうです。

やること

できなさそうなこと

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

目標 (一例)

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

ApplicationWindow {
    property var path
    Require on path { from: 'path' }
    title: path.join('foo/bar', 'baz')
}

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
2