SlideShare a Scribd company logo
1 of 43
Download to read offline
Titanium CLI × Alloy
×
CoffeeScript × Jade
で作るiPhoneアプリのお話
Keitarou Oonishi
自己紹介
はじめてなもんで..
自己紹介
・Name : Keitarou Oonishi
・Job  : 専門学生 4月から東京でエンジニア
・Blog : http://www.absolute-keitarou.net/blog
・Twitter: @Dollhyn_kei
・Skill : 主にRuby・Titanium・PHP・Wordpress
      Ti歴は1年になりました。
初めてのスライドは最近の僕のおもちゃ「Titanium」について語ります。
アジェンダ
・Titanium
・Alloyフレームワーク
・CoffeeScript
・Jade
・Titanium CLI
っと、はじめに
はじめに
今回のスライドでは、インストールの手順とかは、触
れていません。
かといって、Titanium熟練者さんがみても、喜ぶスライ
ドでもないです。
『こんなアプリの作り方あんのか!』って興味を持っ
ていただければ幸いです。
あと、スライドはじめてだから期待しない!
アジェンダ
・Titanium
・Alloyフレームワーク
・CoffeeScript
・Jade
・Titanium CLI
Titaniumについて
・javascriptを使って、iOS,Androidのアプリを作れちゃう!!
・Obj-c、Javaなんか知らなくっても作れちゃう。
・jsのコードをObj-cやJavaのコードに変換して動かしているような、
イメージ(あくまで、イメージ)
・Obj-CやJavaでTitaniumモジュールをつくることができるので、可能
性は無限大でしょう∞
・基本的には『Titanium Studio』をインストールしたら開発できる
Titanium製のアプリ紹介
サイボウズ Live for iPhone
最近よく使ってます。
Titanium製のアプリ紹介
サイボウズ Live for iPhone
最近よく使ってます。
家計簿アプリの Zaim
Titanium製のアプリ紹介
サイボウズ Live for iPhone
最近よく使ってます。
家計簿アプリの Zaim
他にも調べたらたくさん!!
Titaniumのソース
var win =Ti.UI.createWindow({
	

 backgroundColor:'white'
});
var label =Ti.UI.createLabel();
label.text = "HelloTitanium";
label.addEventListener("click", function(e){
	

 alerts("Click");
});
win.add(label);
win.open();
ラベルを1つ表示して、
クリックしたらダイアログ出す!
みたいなソースはこんな感じ
Titaniumのソース
これだけでもObj-c・Javaと比べて簡単そう
Titaniumのソース
でも、後々大変になりますこれ。
Titaniumのソース
何が大変って、UI・レイアウト・処理(イベント)が全部
JSで書けてしまうのでソースコードがカオスになります
var win =Ti.UI.createWindow({
	

 backgroundColor:'white'
});
var label =Ti.UI.createLabel();
label.text = "HelloTitanium";
label.addEventListener("click", function(e){
	

 alerts("Click");
});
win.add(label);
win.open();
UIとレイアウト
UI
処理(イベント)
そこで、救世主
『Alloy』
アジェンダ
・Titanium
・Alloyフレームワーク
・CoffeeScript
・Jade
・Titanium CLI
Alloyについて
・Appcelerator公式のTitaniumフレームワーク
・RoRちっくなMVCフレームワーク
・コマンドからのファイル生成とかもできる!
・node.jsが必要!(バージョンによっては....)
フレームワーク構成
・assets/  画像とかぶちこむ
・controllers/ イベント書いたり、いろいろ
・views/   UIを書く
・models/ DB関係
・alloy.js 最初に読み込まれるファイル
・styles/   UIのレイアウトを書く
ビュー
<Alloy>
	

 <TabGroup>
	

 	

	

 	

 <Tab id="tab1" icon="KS_nav_views.png" title="Tab 1">
	

 	

 	

 <Window id="window1" title="Tab 1" backgroundColor="#fff">
	

 	

 	

 	

 <Label id="label1">Window1</Label>
	

 	

 	

 </Window>
	

 	

 </Tab>
	

 	

 <Tab id="tab2" icon="KS_nav_ui.png" title="Tab 2">
	

 	

 	

 <Window id="window2" title="Tab 2" backgroundColor="#fff">
	

 	

 	

 	

 <Label id="label2">Window2</Label>
	

 	

 	

 </Window>
	

 	

 </Tab>
	

 </TabGroup>
</Alloy>
ViewはXMLでゴリゴリ書いていく
スタイル
"#label1": {
	

 top:100,
	

 width:Ti.UI.SIZE,
	

 height:Ti.UI.SIZE,
	

 color: "#000"
},
"#label2": {
	

 top:200,
	

 width:Ti.UI.SIZE,
	

 height:Ti.UI.SIZE,
	

 color: "#000"
},
Styleはtssでセカセカ書いていく
cssみたいにかけちゃうのが素敵
玄人さんはSassとか使ってる方も
モデル
exports.definition = {
	

 config: {
	

 	

 "columns": {
	

 	

 	

 "item":"text",
	

 	

 	

 "done":"integer",
	

 	

 	

 "date_completed":"text"
	

 	

 },
	

 	

 "adapter": {
	

 	

 	

 "type": "sql",
	

 	

 	

 "collection_name": "todo"
	

 	

 }
	

 },
	

 extendModel : function(Model) {
_.extend(Model.prototype, {
validate : function(attrs) {
for (var key in attrs) {
var value = attrs[key];
if (value) {
if (key === "item") {
if (value.length <= 0) {
return 'Error: No item!';
}
}
if (key === "done") {
if (value.length <= 0) {
return 'Error: No completed flag!';
}
}
}
}
}
});
return Model;
},
extendCollection : function(Collection) {
_.extend(Collection.prototype, {
	

 comparator: function(todo) {
	

 	

 	

 	

 return todo.get('done');
	

 	

 	

 }
});
return Collection;
}
・Backbone.jsライク
・Sqliteが簡単に使える!
・generateで雛形もつくれる
コントローラー
function whereFunction(collection) {
	

 return !whereIndex ?
	

 	

 collection.models :
	

 	

 collection.where({ done: whereIndex === 1 ? 0 : 1 });	

}
// Perform transformations on each model as it is processed. Since
// these are only transformations for UI representation, we don't
// actually want to change the model. Instead, return an object
// that contains the fields you want to use in your bindings.The
// easiest way to do that is to clone the model and return its
// attributes with the toJSON() function.
function transformFunction(model) {
	

 var transform = model.toJSON();
	

 transform.item = '[' + transform.item + ']';
	

 return transform;
}
// open the "add item" window
function addToDoItem() {
	

 Alloy.createController("add").getView().open();
}
// Show task list based on selected status type
function showTasks(e) {
	

 if (typeof e.index !== 'undefined' && e.index !== null) {
	

 	

 whereIndex = e.index; //TabbedBar
	

 } else {
	

 	

 whereIndex = INDEXES[e.source.title]; // Android menu
	

 }
	

 todos.fetch();
}
・Controllerはjsでごりごり
更にTitaniumを楽しむ
更にTitaniumを楽しむ
・生のjsは書きたくない。短くしたいもん
更にTitaniumを楽しむ
・生のjsは書きたくない。短くしたいもん
・XMLも書きたくない。
更にTitaniumを楽しむ
・生のjsは書きたくない。短くしたいもん
・XMLも書きたくない。
・コマンドラインで作っていきたい!
更にTitaniumを楽しむ
・生のjsは書きたくない。短くしたいもん
・XMLも書きたくない。
・コマンドラインで作っていきたい!
・好きなエディタ使いたいよ∼
アジェンダ
・Titanium
・CoffeeScript
・Alloyフレームワーク
・Jade
・Titanium CLI
CoffeeScriptとは
・javascriptのソースコードを生成するためのスク
リプト言語
・見た目はPythonっぽくなる
・とにかくコードが短くなる。
・npm(nodejs)とかでインストールすると楽
構文的特徴
・functionのキーワードが -> に置き換えられる
・{}の代わりにインデントを使って構造を定義
・クロージャが書きやすい
・() も場合によっては省略できる
サンプル
# 位置情報の更新&ピンの表示
setUserLocation = (map) ->
	

 Titanium.Geolocation.purpose = '位置情報を取得します'
	

 Titanium.Geolocation.getCurrentPosition (e)->
	

 	

 if !e.success || e.error
	

 	

 	

 latitude = longitude = 0
	

 	

 	

 alert '位置情報が取得できませんでした'
	

 	

 else
	

 	

 	

 latitude = e.coords.latitude
	

 	

 	

 longitude = e.coords.longitude
	

 	

 	

 userPos =Titanium.Map.createAnnotation
	

 	

 	

 	

 latitude:latitude
	

 	

 	

 	

 longitude:longitude
	

 	

 	

 	

 title:"現在地"
	

 	

 	

 	

 animate:true
	

 	

 	

 map.removeAllAnnotations()
	

 	

 	

 map.addAnnotation userPos
	

 	

 	

 map.selectAnnotation userPos
	

 	

 	

 map.show()
	

 	

 	

 map.setLocation
	

 	

 	

 	

 latitude:latitude
	

 	

 	

 	

 longitude:longitude
	

 	

 	

 	

 latitudeDelta:0.01
	

 	

 	

 	

 longitudeDelta:0.01
とにかく書いてて気持ちぃ...
アジェンダ
・Titanium
・Jade
・Alloyフレームワーク
・CoffeeScript
・Titanium CLI
Jadeとは
・HTMLやXMLを生成するスクリプト言語
・Hamlのnode.js版!っでいいのかな?
・とにかくコードが短くなる。
・npm(nodejs)でインストールすると楽
サンプル
Alloy
	

 Window.container
	

 	

 Label#label Hello,World
これが
サンプル
Alloy
	

 Window.container
	

 	

 Label#label Hello,World
こうなる
<Alloy>
	

 <Window class="container">
	

 	

 <Label id="label">Hello,World</Label>
	

 </Window>
</Alloy>
うわっ短いっ
アジェンダ
・Titanium
・Titanium CLI
・Alloyフレームワーク
・CoffeeScript
・jade
疑問
・Titanium StudioじゃなくてSublime使いたい
・コマンドラインでアプリ作っていきたい
・コマンドラインでビルド回したい
疑問
・Titanium StudioじゃなくてSublime使いたい
・コマンドラインでアプリ作っていきたい
・コマンドラインでビルド回したい
全部できます!
Titanium CLI
・TitaniumはTitaniumコマンドを使ってアプリを作って
いったり、ビルドだってできます。
・また、Alloyコマンドもあり、MVCのジェネレートな
どを行うことができます。
・おまけにTitaniumさんは親切で対話的に実行するコ
マンドがほとんどです。
良く使うコマンド
#ログイン
titanium	
  login
#プロジェクトの作成
titanium	
  create
#Alloyフレームワークの適用
alloy	
  new
#コントローラー・ビュー・スタイルの追加
alloy	
  generate	
  controller	
  コントローラー名
#モデルの作成
alloy	
  generate	
  model	
  モデル名	
  sql	
  フィールド名:型	
  フィールド名:型	
  ………
#シミュレータで実行
titanium	
  build	
  -­‐p	
  ios
#実機ビルド
titanium	
  build	
  -­‐T	
  device	
  	
  -­‐-­‐platform	
  iphone
#リリースビルド
titanium	
  build	
  -­‐T	
  dist-­‐appstore	
  -­‐p	
  ios
最後に
っと以上。
Titanium CLI × Alloy × CoffeeScript × Jadeで作るiPhoneアプリのお話でした。
とにかく簡単・早く・楽しくアプリを作るとこができる
ので、みなさんも新しいおもちゃにどうですか?
以上、ご視聴ありがとうございました!!
Thank You!!!!!!

More Related Content

Similar to Titanium CLI × Alloy × CoffeeScript × Jade で作るiPhoneアプリのお話

GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackTakahiro Yoshimura
 
はじめてのAndroid開発
はじめてのAndroid開発はじめてのAndroid開発
はじめてのAndroid開発Katsumi Honda
 
I phoneアプリ入門 第4回
I phoneアプリ入門 第4回I phoneアプリ入門 第4回
I phoneアプリ入門 第4回Sachiko Kajishima
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumilab
 
2005 11 29_template_customize_seminer_04
2005 11 29_template_customize_seminer_042005 11 29_template_customize_seminer_04
2005 11 29_template_customize_seminer_04Tom Hayakawa
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium MobileNaoya Ito
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~ngi group.
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門Shumpei Shiraishi
 
Roslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインRoslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインFujio Kojima
 
KanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしKanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしMaehana Tsuyoshi
 
はじめてのAngular その1
はじめてのAngular その1はじめてのAngular その1
はじめてのAngular その1純一 榮枝
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1sunotora
 
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1 pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1 Takuma Morikawa
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテストushiboy
 
JavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIJavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIHajime Fujimoto
 
Titanium Development
Titanium DevelopmentTitanium Development
Titanium DevelopmentDaisuke Sugai
 

Similar to Titanium CLI × Alloy × CoffeeScript × Jade で作るiPhoneアプリのお話 (20)

GroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hackGroovyなAndroidテスト #atest_hack
GroovyなAndroidテスト #atest_hack
 
はじめてのAndroid開発
はじめてのAndroid開発はじめてのAndroid開発
はじめてのAndroid開発
 
20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
I phoneアプリ入門 第4回
I phoneアプリ入門 第4回I phoneアプリ入門 第4回
I phoneアプリ入門 第4回
 
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作るgumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
gumiStudy#5 JavaScript でネイティブiPhone/Androidアプリを作る
 
2005 11 29_template_customize_seminer_04
2005 11 29_template_customize_seminer_042005 11 29_template_customize_seminer_04
2005 11 29_template_customize_seminer_04
 
Teclab3
Teclab3Teclab3
Teclab3
 
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
 
素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~素敵なjavascript ~Firefox編 ~
素敵なjavascript ~Firefox編 ~
 
JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門JavaScript使いのためのTypeScript実践入門
JavaScript使いのためのTypeScript実践入門
 
Roslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドインRoslyn による Visual Studio のアドイン
Roslyn による Visual Studio のアドイン
 
KanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたしKanbanとTHETAとDK2とわたし
KanbanとTHETAとDK2とわたし
 
はじめてのAngular その1
はじめてのAngular その1はじめてのAngular その1
はじめてのAngular その1
 
Kotlinアンチパターン
KotlinアンチパターンKotlinアンチパターン
Kotlinアンチパターン
 
プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1プログラミングの基礎振り返りスライド1
プログラミングの基礎振り返りスライド1
 
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1 pairsでのAngularJS x TypeScript x e2e @めぐすた#1
pairsでのAngularJS x TypeScript x e2e @めぐすた#1
 
ゼロから始めたE2Eテスト
ゼロから始めたE2Eテストゼロから始めたE2Eテスト
ゼロから始めたE2Eテスト
 
JavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData APIJavaScriptテンプレートエンジンで活かすData API
JavaScriptテンプレートエンジンで活かすData API
 
About Titanium Mobile
About Titanium MobileAbout Titanium Mobile
About Titanium Mobile
 
Titanium Development
Titanium DevelopmentTitanium Development
Titanium Development
 

Recently uploaded

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 

Recently uploaded (7)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 

Titanium CLI × Alloy × CoffeeScript × Jade で作るiPhoneアプリのお話