search
LoginSignup
2

More than 5 years have passed since last update.

posted at

updated at

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

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

タイトルの通り、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
What you can do with signing up
2