Make Desktop Apps
with
TideSDK + Ruby
I am
松本 拓也
@upinetree
http://slid.es/upinetree/tidesdk-and-ruby
Niigata.rb
よい響きですね
Niigata.rb
today's topic
例えば
Rubyで便利なスクリプトを作ったとして
自分だけで使う分には
黒い画面があれば十分ですよね
でも、それを誰かに配ろうとして
ちょっとしたGUI付きのアプリを
作りたくなったことありませんか
TideSDK
- デスクトップアプリを作るためのツールキット
- クロスプラットフォーム(Win, Mac, Linux)
- HTML5, CSS3, Javascriptで書く(WebKit)
- Ruby, Python, PHPが使用可
http://www.tidesdk.org
というわけで
試しにこんなの作りました
How it works
- window.onload時、Rubyに処理をお願いする
- Ruby上でmechanizeにログインしてもらう
- ログイン後、発行されたURLをJavascriptが受け取る
- iframeに読み込む
こんなかんじで
簡単にHTMLやJavascriptと
Rubyを連携させられます
http://github.com/upinetree/kancolle-launcher
index.html
<script type="text/ruby" src="ruby/agent.rb"></script>
<iframe id="game_frame" name='game_frame'></iframe>
<script type="text/javascript">
window.onload = function()
{
var game_frame = document.getElementById('game_frame');
game_frame.src = fetch_game_uri();
}
</script>
ほんとうは
全画面表示機能も実装したかった
でも、swfを受け取るには面倒な壁が…
なんか良い知恵ないですか
-
アプリ側からの取得はセキュリティ的にむり
(同一ドメインポリシー) - APIトークン取得する必要がある
- mechanizeはJavascript動かさない
苦労話
内蔵Rubyのバージョン
win, osx -> 1.8.7
linux -> 1.9.3
- クロスプラットフォームだったら、1.8基準か…
- 既存資産やgemが利用できなくなるケース有
- いちばんつらい
内蔵Rubyのアーキテクチャ
32bit(i386)でビルドされているっぽい
たとえば、macのSnowLeopardは64bit
nokogiri使うときにmach-oエラー起きる
nokogiri.bundleファイルが64bitになっちゃうので
対策
sudo env ARCHFLAGS='-arch i386' bundle install
Gemの使い方
- ドキュメントなかった
- パッケージ化するのでSDK所定フォルダにbundleする
bundle install --path Resource/ruby/gems
- require先のgemsフォルダを登録
require 'rubygems' Gem.use_paths(File.join(Ti.App.getHome, 'Resources/ruby/gems/ruby/1.8')) require 'mechanize'
GemのOSによる参照先の違い
OSX: KancolleLauncher.app/Contents/Resources/ruby/gems/ruby/1.8/gems
Win: KancolleLauncher/Resources/ruby/gems/ruby/1.8/gems
※Linuxは試してません
OSごとにフォルダ構成が異なる
なので、こうすると
File.expand_path(File.dirname(__FILE__))
こうなる
OSX: KancolleLauncher.app/Contents/MacOS
Win: KancolleLauncher
相対パスが変わるので、require先が一意に追加できない
だからTideSDKのAPIを使う
require 'rubygems'
Gem.use_paths(File.join(Ti.App.getHome, 'Resources/ruby/gems/ruby/1.8'))
require 'mechanize'
他にもAPIいっぱいあるけど
まだ使いこなせてない
そんなこんなで
やったことの割に予想外に時間かかりました
でも一回躓いておけばあとは大丈夫
次期バージョンが近日公開らしいですよ
http://www.tidekit.com/
今度はモバイルアプリにも対応するとか
Ruby周り強化されているといいなあ
まとめ
- TideSDKっていうのがあるよ
- Ruby使えるよ。1.8.7だけど
- Ruby道には罠があるよ
-
艦これたのしいよ
おしまい
TideSDK + Rubyでデスクトップアプリ作る
By Takuya Matsumoto
TideSDK + Rubyでデスクトップアプリ作る
- 5,798