Slide 1

Slide 1 text

RubyとQML/Qt Quickで デスクトップアプリを 書けるようにした ! 2014-09-21

Slide 2

Slide 2 text

" seanchas_t # seanchas116 大学生 (10月から休学予定 Ruby歴は2年くらい “しゃなはす”と読みます

Slide 3

Slide 3 text

Qt Quick Qtの一部 QMLという専用言語で UIを記述するフレームワーク Ruby Rubyで スクリプトとして ロジックを記述する 組み合わせて デスクトップアプリを書けるようにする!!

Slide 4

Slide 4 text

ruby-qml https://github.com/seanchas116/ruby-qml $ gem install qml

Slide 5

Slide 5 text

デスクトップアプリ?

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

どうやって書くの?

Slide 9

Slide 9 text

require 'qml' ! QML.run do |app| app.load_path 'main.qml' end Ruby import QtQuick 2.2 import QtQuick.Controls 1.1 ! ApplicationWindow { visible: true width: 200 height: 100 title: "Hello, world!" } QML

Slide 10

Slide 10 text

class ClickMe include QML::Access register_to_qml ! property :text, 'Click me' def on_clicked puts 'clicked' self.text = 'Clicked!!' end end Ruby ApplicationWindow { visible: true Button { text: clickMe.text onClicked: { clickMe.on_clicked() } } ClickMe { id: clickMe } } QML

Slide 11

Slide 11 text

item.value # => 10 item.poyo Ruby Item { property var value: 10 function poyo() { console.log("poyo") } } QML

Slide 12

Slide 12 text

item.value # => 10 item.poyo Ruby class Foo : public QObject { Q_OBJECT Q_PROPERTY( int value MEMBER m_value) int m_value = 10; public: Q_INVOKABLE void poyo() { qDebug() << "poyo"; } }; C++

Slide 13

Slide 13 text

開発した理由

Slide 14

Slide 14 text

QMLの特徴 UIの記述に特化した言語 ! 宣言的記法 プロパティバインディング オブジェクトのプロパティ同士のデータバインド …

Slide 15

Slide 15 text

QMLの特徴 QMLでビュー (UI) を記述 C++でロジックを記述 イベントとデータバインドでつなげる いわゆるMVVMパターン UIとロジックを分離できる (最近では当たり前?)

Slide 16

Slide 16 text

QMLの開発スタイル QMLでビュー (UI) を記述 C++でロジックを記述 ◯◯で書きたくない? (◯◯: 任意の好きな言語) QMLは動的言語なので バインディングが比較的作りやすい

Slide 17

Slide 17 text

QMLの開発スタイル QMLでビュー (UI) を記述 C++でロジックを記述 Go go-qml https://github.com/go-qml/qml

Slide 18

Slide 18 text

QMLの開発スタイル QMLでビュー (UI) を記述 C++でロジックを記述 Ruby ruby-qml 今回作った!!

Slide 19

Slide 19 text

せっかくRubyをつかうので… Rubyらしいライブラリにしたい プロパティなどのクラスマクロ ブロック … DSL、メタプログラミングを通して QMLの世界観をRubyに違和感なく持ってくるのを 心がけた

Slide 20

Slide 20 text

考えられそうなユースケース

Slide 21

Slide 21 text

RubyとQMLのみで C++を書かず楽にデスクトップアプリを作る Ruby コード QML ビュー ruby-qmlアプリ

Slide 22

Slide 22 text

C++・QMLなどをラップ Rubyはグルー言語 Ruby コード ruby-qmlアプリ C++/Qt コード QML ビュー 他の 機能

Slide 23

Slide 23 text

これから

Slide 24

Slide 24 text

Windows対応 ! モバイル対応 (with mruby?)