Ruby,Python,PHP,JavaScriptでマルチプラットフォームなデスクトップアプリを簡単に作成する Appcelerator Titanium Desktop
古いエントリーなのですが、まだ時折検索エンジン経由?でいらっしゃる方がいるみたいなので追記
Titanium Desktopは今はTideSDKと変わってオープンソースプロジェクトになっています。
いいたい事を先に。
Ruby,Python,PHP,JavaScriptやってる人でデスクトップアプリ作成に興味ある人は
Appcelerator Titanium Desktop さわってみるといいと思います。OS X, Windows,Linuxとマルチプラットフォームなデスクトップアプリをhtml,JavaScript,Ruby,Python等の慣れ親しんだ技術で簡単に作成、公開することができます。
予想以上にブクマされてるみたいなので、Titanium Desktopの特徴を箇条書きですが追加しておきます。
- 一言で言えばJavaScriptで記述するAdobe AIRのようなRIAフレームワークです
- 基本html,css,javascriptで記述する
- JavaScriptなので、JQueryなどのリッチなライブラリを使い放題。(AIRで使う場合より使いやすい)
- WebKit,Gears等の機能を基盤技術として利用している
- OSネイティブの機能を呼び出すAPIが用意されている
- 開発環境はOS X,Windows,Linux向けが用意されている
- 同一のソースコードでWin,OS X,Linuxとマルチプラットフォームなデスクトップアプリを作成できる。
- Ruby,Python,PHPも使える。(MobileはJavaScriptだけです。)
ex.<script type="text/python">....</python>,<script type="text/php">....</php>,<script type="text/ruby" src="test.rb"/>,<?php ... ?>
- html5対応
- WebKitを基盤技術に使っているので、はじめからchromeやsafariでお馴染みのWeb Inspector*1でデバッグできる
- AIRのようなセキュリティサンドボックスはない(メリット、デメリットそれぞれありますね)
- OS X, Windows,Linuxとそれぞれのプラットフォーム向けのインストーラを作ってくれる。ex.OS Xはdmg,Winはmsi
- 作ったパッケージのインストール時にAIRのようにランタイムを必要としない(インストール時にごっそりつっこんでんだけど)
- krollというライブラリが変数やメソッドを変換して橋渡ししてくれる。これによりjavascriptとRuby,Python等を混ぜ込んで相互に使える。ex:JavaScript→Ruby,Python→JavaScript
- Drillbitというunit test frameworkが使えます。JSSpec testという感じです。
さて。
http://www.atmarkit.co.jp/fwcr/design/tool/titanium01/01.html
Appcelerator Titaniumをここのところ触ってたんですけど、タイムリーに記事になりましたね。
これは結構面白い技術ですよ。
このAppcelerator Titaniumは、簡単にいうと、HTML/CSS/JavaScriptといったWebの技術を使って、デスクトップアプリや、iPhone/Androidアプリを作成できる開発環境です。ちゃんとOSネイティブな機能をJavaScriptでよぶ事が出来ます。
記事に書いてあるMobileの方ですが、JavaScriptやhtmlで書いた同じソースコードからiPhone OS/Android向けのアプリを作成出来るというのは、iPhoneやAndroidの開発をしている方々にはかなり魅力があるのではないでしょうか?
で、みんな興味があると思うiPhone/Android開発に使うTitanium Mobileには私はあんまり興味がなかったり。
興味はないですませるのはあれなので、Mobileの方の今時点での国内情報源のリンクを張っておきます。
Titanium Mobileに興味のある方はお役立て下さい。
http://code.google.com/p/titanium-mobile-doc-ja/
http://d.hatena.ne.jp/donayama/searchdiary?word=*[Titanium]
私はデスクトップアプリを作るTitanium Desktopの方に注目しています。
私の今目指している物を作るのにはちょうどいいので。
Adobe AIR等と比較してみているのですが、中々いい技術だなと思っています。
前述したようにOS X, Windows,Linuxとマルチプラットフォームなデスクトップアプリをhtml,JavaScript,Ruby,Python等の技術で簡単に作成、公開することができます。
前置きはこれぐらいにして、Titanium Desktopについて実際にどんなものなのか説明していこうと思いますが、ちょっと長くなりそうなので別エントリーにします。
とりあえず書いてみた簡単なテストアプリのコードだけ張っておきますね。
なお、Windows環境で写経してRuby,Pythonのところで文字列を日本語に変更した場合、このままでは表示されませんのでご注意下さい。後で説明します。→日本語について書きました。
<html> <head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <script type="text/javascript" src="jquery-1.3.2.js" /> </head> <body> <div id="result"></div> <div id="output">Click!</div> <div> <button onclick="helloJS()">Hello Javascript!</button> <button onclick="helloPython()">Hello Python!</button> <button onclick="helloRuby()">Hello Ruby!</button> </div> <button onclick="readFile()">read file</button> <p /> <div id="stuff" style="border:1px solid #CDCDCD" /> <p /> <script> $(function(){ alert(Titanium.App.getURL()); }); function helloJS(){ $("#output").html("<p>hello javascript</p>"); } </script> <script type="text/python"> def helloPython(): document.getElementById('output').innerHTML = "Hello World from Titanium using Python" </script> <script type="text/ruby"> def helloRuby document.getElementById('output').innerHTML = "Hello World from Titanium using Ruby" end </script> <script> function readFile() { var contents; var filename = 'test.txt'; var userDir = Titanium.Filesystem.getUserDirectory(); var readFile = Titanium.Filesystem.getFile(userDir, filename); if(! readFile.exists()) { alert("File does not exist: " + readFile); return; } var readStream = Titanium.Filesystem.getFileStream(readFile); readStream.open(Titanium.Filesystem.MODE_READ); contents = readStream.read(); readStream.close(); var stuff = document.getElementById("stuff"); stuff.innerHTML = contents; } </script> </body> </html>
別エントリーにて説明したいと思いますが、これだけでも大体感じはつかめるんじゃないでしょうか?JavaScript+HTMLのコードの中にPythonとRubyのコードも入ってます。ネイティブな機能の呼び出しとして、ここではTitanium.FilesystemというAPIを使ってユーザーディレクトリのファイルの読み込みを行っています。
後は画面。デザイン全然してないんでちょっとそっけないですけど・・。
それにしても、JavaScriptの重要性がどんどん増しているなと感じますね。
*1:Fire FoxのFire Bugみたいなやつですね