SlideShare uma empresa Scribd logo
1 de 42
Sencha TouchでHTML5ア
   プリを作ってみる

        TWorks(大場 知悟)
    楽しいアプリ制作の会 代表
       http://blog.tworks.jp/
     http://tanoapp.tworks.jp/


    わんくま同盟 大阪勉強会 #47
自己紹介

• 大場知悟(Tomonori Ohba)
 – HN TWorks
 – TwitterID @tworks
• PFUという会社でSI/SEやってます
 – iOS/Android/WP/SL/WPF/ASP.NET/etc...
• コミュニティー
 – 新大阪アプリ開発初級~中級者向け勉強会
   楽しいアプリ制作の会 代表
 – Windows Phone Arch
   神戸地区スタッフ
          わんくま同盟 大阪勉強会 #47
PR

• Windows Phoneの本書きました!
 – はじめてのWindows Phone
   プログラミング
   工学社 共著
 – 通称「はじフォン」
 – よかったら買ってください。




       わんくま同盟 大阪勉強会 #47
アジェンダ

• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

        わんくま同盟 大阪勉強会 #47
概要
• JavaScriptのスマートフォンWebアプリ開
  発フレームワーク
 – iOS/Android向けWebアプリ作成
 – JQuery MobileはWebページ作成
• 母体はPC向けのExt JS
• タッチデバイスを前提としている
 – マルチタッチもサポート
• HTML5を活用
 – iOS/Androi向け = WebKit用

         わんくま同盟 大阪勉強会 #47
概要
• ライセンス
  – GNU GPL license v3または商用ライセンス
• GNU GPL license v3
  – ソースコードの開示義務がある
• 商用ライセンス
  – 99,500円/パック(パック=1開発者数)
  – 永年ライセンス
  – ソースコードの開示義務なし



          わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

        わんくま同盟 大阪勉強会 #47
Viewの種類
• フォーム
 – HTML5のフォーム




         わんくま同盟 大阪勉強会 #47
Viewの種類
• ネストList
 – リスト&ナビゲーション




        わんくま同盟 大阪勉強会 #47
Viewの種類
• カルーセル
 – コンテナの連続した切り替え




      わんくま同盟 大阪勉強会 #47
Viewの種類
• Map
  – HTML5 GEO APIに対応
  – GoogleMapsのEULAどうでしたっけ?(汗




        わんくま同盟 大阪勉強会 #47
Viewの種類
• Overlays
  – 入力・表示の補助




             わんくま同盟 大阪勉強会 #47
Viewの種類
• バッヂ表示可能なツールボタン




• タッチデバイス筆頭iOS、iOSの洗練され
  たUserInterfaceを<del>パクリ</del>活用
• タッチデバイスのUIを活用することで、
  タッチ操作できることを自然に表現


        わんくま同盟 大阪勉強会 #47
• Sencha Touchの 1.1紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

        わんくま同盟 大阪勉強会 #47
Viewの定義
• コンテナ(Panel)
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,
});




               わんくま同盟 大阪勉強会 #47
Viewの定義
• HTML
                               Hello, Wankuma!!
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,
   html:’Hello, Wankuma!!’
});




               わんくま同盟 大阪勉強会 #47
Viewの定義
• cls (css class)
                               Hello, Wankuma!!
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,
   html:’Hello, Pronama!!’,
   cls: 'title' //cssクラス名
});

– CSS定義が別途必要




               わんくま同盟 大阪勉強会 #47
Viewの定義
• items
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
                                         button1
   fullscreen: true,
   items: [{
       xtype: 'button',
       ui: 'normal',
       text: 'button1'
       }, {                              button2
       xtype: 'button',
       ui: 'normal',
       text: 'button2'
       }, {
       xtype: 'button',
       ui: 'normal',                     button3
       text: 'button3'
       }]
});



                       わんくま同盟 大阪勉強会 #47
Viewの定義
• dockedItems
Ext.setup({                                      top
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,
   dockedItems
   items: [{
      xtype: 'toolbar',
                                         left            rigiht
      dock: 'top',
      items: [{
        xtype: 'button',
         ui: 'normal',
         text: button2'
      }]
   }]                                           bottom
});

                  わんくま同盟 大阪勉強会 #47
Viewの定義
• layout : vbox
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,                     button1
   layout: 'vbox',
   items: [{
       xtype: 'button',
       ui: 'normal',
       text: button1'
       }, {                              button2
       xtype: 'button',
       ui: 'normal',
       text: button2'
       }, {
       xtype: 'button',
       ui: 'normal',                     button3
       text: button3'
       },
});


                       わんくま同盟 大阪勉強会 #47
Viewの定義
• layout : hvox
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({
   fullscreen: true,
   layout: 'hbox',
   items: [{
       xtype: 'button',
       ui: 'normal',
       text: button1'                button   button   button
       }, {                            1        2        3
       xtype: 'button',
       ui: 'normal',
       text: button2'
       }, {
       xtype: 'button',
       ui: 'normal',
       text: button3'
       },
});


                       わんくま同盟 大阪勉強会 #47
Viewの定義
• handler
Ext.setup({
 onReady: function() {
 var panel = new Ext.Panel({                button1
   fullscreen: true,
   items: [{
      xtype: 'button',
      ui: 'normal',
      text: button1',
      handler: function() {
        window.alert('hello!');
      }
   }]
})
}
});

                    わんくま同盟 大阪勉強会 #47
Viewの定義
•   レイアウトはBOXモデル
•   itemsに追加することで入れ子に
•   入れ子のBOXの位置、方向を調整
•   .htmlファイルにタグ書きません
•   htmlもcssもJavaScriptで書く
     – JavaScriptとデザイン要素が一緒に
       – これってどうなん?




          わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
データパッケージ
• Model/Store/Proxy
• Model
   – データスキームを定義する
   – DatabaseのTableに相当
Ext.regModel('Product', {
       fields: [
                 {name: 'name', type: 'string'},
                 {name: 'description', type: 'string'},
       {name: 'price', type: 'float'},
                 {name: 'image_url', type: 'string'},
                 {name: 'in_stock', type: 'boolean'}
                 ]
});

                    わんくま同盟 大阪勉強会 #47
データパッケージ
• Store/Proxy
    – Store=Model+Proxy
    – Proxy:データの実体の取得先/フォーマット
             ajax/rest/sessionstorege
store: new Ext.data.Store({
        model: 'Product',
        proxy: {
                 type: 'ajax', url : '/products.json', // products.xml
                 reader: {
                           type: 'json', // xml
                           root: 'products'
                 }
        }
}),

                      わんくま同盟 大阪勉強会 #47
データパッケージ
• products配列のイメージ
       – readerにより読み込まれ格納される
{ "products": [
              {"name": "Some Product", "price": 9.99, "image_url": "product1.jpg", "in_stock": true},
              {"name": "Another Product", "price": 7.50, "image_url": "product2.jpg", "in_stock": true},
              {"name": "A third product", "price": 2.35, "image_url": "product3.jpg", "in_stock": false},
              ...
]}



• sessionstorage / localstorage
       – WebStorageに永続化されるデータ
var Cart = new Ext.data.Store({
            model: 'Product',
            proxy: {
                         type: 'sessionstorage', // or localstorage
                         id : 'shoppingCart'
            }
            }
);




                                わんくま同盟 大阪勉強会 #47
データパッケージ
• getGroupString
     – データをグルーピング(インデックス化)
     – Functionで記述
getGroupString : function(record) {
     return record.get('name')[0]; //商品名の頭文字でグループ化
  },

• sorters
   – データの並び替え
   – 複合指定も可




              わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
アプリケーションの開発手順
• Demo:リストを表示するアプリケーション
 – どんなフレームワークでも手間がかかる
 – Sencha Touchでは、どのような感じになるか
 – コンタクトリスト(姓・名)、姓でグルーピング




       わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
初期設定
1. Sencha Touchライブラリをダウンロード
 http://extjs.co.jp/products/touch/download.php
2. 開発環境がセットアップ済みであることを確認
   HTML5対応ブラウザで開発可
3. 開発用およびリリース用のWebサーバーがセッ
   トアップ済みであることを確認
   Sencha Touchで完結するなら何でもよい
4. 開発するアプリに必要なHTMLモックとCSS
   ファイルの作成




            わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
HTMLの作成
• アプリケーションのJavaScriptファイル
  /CSSファイルをリンクしたHTML
<!DOCTYPE html> <html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ListSample</title >
              <!-- Ext Touch CSS -- >
              <link rel="stylesheet" href="../../resources/css/sencha-touch.css" type="text/css">
              <!-- アプリケーションCSS -- >
              <link rel="stylesheet" href="css/myapp.css" type="text/css">
              <!-- Ext Touch JS -- >
              <script type="text/javascript" src="../../sencha-touch-debug.js"> </script>
              <!-- アプリケーション JS -- >
              <script type="text/javascript" src="src/myapp.js"> </script>
</head>
              <body>
              <!-- body部には何も書かないこと、sencha touchが生成する -->
              </body>
</html>




                                わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリケーションJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
アプリケーションJavaScriptの作成
• Model
Ext.regModel(‘Contact', {
    fields: [
       {name:'firstName', type: 'string'},
       {name: 'lastName', type: 'string'},
       {name:'email', type:'string'}
    ]
});




               わんくま同盟 大阪勉強会 #47
アプリケーションJavaScriptの作成
• Store/Proxy/getGroupString
var store = new Ext.data.JsonStore({
    model : ‘Contact',
    sorters: [
           {property: 'lastName', direction: 'ASC'},
           {property: 'firstName', direction: 'ASC'}
       ],
    getGroupString : function(record) {
       return record.get('lastName')[0];
    },
    proxy : {
       type : 'ajax',
       url : ‘data/contacts.json',
       reader : {
          type : 'json',
          root : contacts',
          idProperty : 'email' // データの一意性を保証するプロパティー
       }
    },
    autoLoad : true
});

                 わんくま同盟 大阪勉強会 #47
アプリケーションJavaScriptの作成
• myapp.js
• V(List)とM(Store)の紐付け
var list = new Ext.List({
    store     : contactStore,
    itemTpl :'<div class="contact">
                       {firstName} {lastName}
               </div>',
    itemSelector : 'div.contact',
    singleSelect : true,
    grouped     : true,
    indexBar : true,
...
});

                わんくま同盟 大阪勉強会 #47
アプリケーションJavaScriptの作成
• myapp.js
• リストをタップしたときのイベント
list.on('itemtap', function(dataView, index, item, e){
         data = contactStore.getAt(index);
         alert(data.get('firstName') +
         ''+
         data.get('lastName'));
});




                   わんくま同盟 大阪勉強会 #47
• Sencha Touch 1.1の紹介
 – 概要
 – Viewの種類、定義
 – データパッケージ
• アプリケーションの開発手順
 – 初期設定
 – HTMLの作成
 – アプリJavaScriptの作成
 – デバッグ/リリース切り替え

         わんくま同盟 大阪勉強会 #47
デバッグ/リリース切り替え
• Sencha Touch.jsの差し替え
<!DOCTYPE html> <html> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ListSample</title >
            <!-- Ext Touch CSS -- >
            <link rel="stylesheet" href="../../resources/css/sencha-touch.css" type="text/css">
            <!-- アプリケーションCSS -- >
            <link rel="stylesheet" href="css/myapp.css" type="text/css">
            <!-- Ext Touch JS -- >
            <script type="text/javascript" src="../../sencha-touch.js"> </script>
            <!-- アプリケーション JS -- >
            <script type="text/javascript" src="src/myapp.js"> </script>
</head>
            <body>
            </body>
</html>




                           わんくま同盟 大阪勉強会 #47

Mais conteúdo relacionado

Semelhante a Sencha TouchでHTML5アプリを作ってみる

Sencha Touchをさわってみた
Sencha TouchをさわってみたSencha Touchをさわってみた
Sencha TouchをさわってみたTomonori Ohba
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識shigeya
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門伸男 伊藤
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)shigeya
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングKazuki Takai
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するTakahito Tejima
 
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会Jumpei Ogawa
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発Mitsuru Katoh
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門Sho A
 
Jetpack Library 事始め
Jetpack Library 事始めJetpack Library 事始め
Jetpack Library 事始めTomohiro Kaizu
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
はじめての人のためのDeep Learning
はじめての人のためのDeep Learningはじめての人のためのDeep Learning
はじめての人のためのDeep LearningTadaichiro Nakano
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptterurou
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようずOda Shinsuke
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~Akira Inoue
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」Yoshiki Shibukawa
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)Toru Furukawa
 

Semelhante a Sencha TouchでHTML5アプリを作ってみる (20)

20120118 titanium
20120118 titanium20120118 titanium
20120118 titanium
 
Sencha Touchをさわってみた
Sencha TouchをさわってみたSencha Touchをさわってみた
Sencha Touchをさわってみた
 
Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識Windows PowerShell 2.0 の基礎知識
Windows PowerShell 2.0 の基礎知識
 
T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門T69 c++cli ネイティブライブラリラッピング入門
T69 c++cli ネイティブライブラリラッピング入門
 
実践 NestJS
実践 NestJS実践 NestJS
実践 NestJS
 
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
Internet Explorer 9 の新機能「固定サイト」 (Pinned sites)
 
IT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティングIT Pro のための PowerShell スクリプティング
IT Pro のための PowerShell スクリプティング
 
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築するピクサー USD 入門 新たなコンテンツパイプラインを構築する
ピクサー USD 入門 新たなコンテンツパイプラインを構築する
 
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会
QML を用いた YouTube クライアントの作成 - 関東 Qt 勉強会
 
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
Jetpack Library 事始め
Jetpack Library 事始めJetpack Library 事始め
Jetpack Library 事始め
 
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ ~ Any browser. Any host. Any OS. Open Source. ~
 
はじめての人のためのDeep Learning
はじめての人のためのDeep Learningはじめての人のためのDeep Learning
はじめての人のためのDeep Learning
 
FIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScriptFIRST STEP to Haxe/JavaScript
FIRST STEP to Haxe/JavaScript
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
Selenium webdriver使ってみようず
Selenium webdriver使ってみようずSelenium webdriver使ってみようず
Selenium webdriver使ってみようず
 
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
TypeScript ファーストステップ (Rev.2) ~ Any browser. Any host. Any OS. Open Source. ~
 
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
ドキュメントを作りたくなってしまう魔法のツール「Sphinx」
 
おまえらこのライブラリ使ってないの? m9 (2013-07)
おまえらこのライブラリ使ってないの? m9	(2013-07)おまえらこのライブラリ使ってないの? m9	(2013-07)
おまえらこのライブラリ使ってないの? m9 (2013-07)
 

Mais de Tomonori Ohba

Android-Binding Before/After (Hokuriku,NET)
Android-Binding Before/After (Hokuriku,NET)Android-Binding Before/After (Hokuriku,NET)
Android-Binding Before/After (Hokuriku,NET)Tomonori Ohba
 
Android-Binding Before / After
Android-Binding Before / AfterAndroid-Binding Before / After
Android-Binding Before / AfterTomonori Ohba
 
Windows Store App HTTP通信を振り返る
Windows Store App HTTP通信を振り返るWindows Store App HTTP通信を振り返る
Windows Store App HTTP通信を振り返るTomonori Ohba
 
DelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルDelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルTomonori Ohba
 
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)Tomonori Ohba
 
楽しいアプリ制作の会 #12 Windows Phone 開発
楽しいアプリ制作の会 #12 Windows Phone 開発楽しいアプリ制作の会 #12 Windows Phone 開発
楽しいアプリ制作の会 #12 Windows Phone 開発Tomonori Ohba
 
WindowsPhone arch 神戸#1
WindowsPhone arch 神戸#1WindowsPhone arch 神戸#1
WindowsPhone arch 神戸#1Tomonori Ohba
 
わんくま大阪47 LT
わんくま大阪47 LTわんくま大阪47 LT
わんくま大阪47 LTTomonori Ohba
 
iOS/Android/WP7アプリ開発比較
iOS/Android/WP7アプリ開発比較iOS/Android/WP7アプリ開発比較
iOS/Android/WP7アプリ開発比較Tomonori Ohba
 
iOSの審査なんてくそくらえさ!
iOSの審査なんてくそくらえさ!iOSの審査なんてくそくらえさ!
iOSの審査なんてくそくらえさ!Tomonori Ohba
 

Mais de Tomonori Ohba (10)

Android-Binding Before/After (Hokuriku,NET)
Android-Binding Before/After (Hokuriku,NET)Android-Binding Before/After (Hokuriku,NET)
Android-Binding Before/After (Hokuriku,NET)
 
Android-Binding Before / After
Android-Binding Before / AfterAndroid-Binding Before / After
Android-Binding Before / After
 
Windows Store App HTTP通信を振り返る
Windows Store App HTTP通信を振り返るWindows Store App HTTP通信を振り返る
Windows Store App HTTP通信を振り返る
 
DelphiでWin/Macクロスコンパイル
DelphiでWin/MacクロスコンパイルDelphiでWin/Macクロスコンパイル
DelphiでWin/Macクロスコンパイル
 
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
スマートフォン勉強会関西#16(iOS,Android,WP7マルチタッチ)
 
楽しいアプリ制作の会 #12 Windows Phone 開発
楽しいアプリ制作の会 #12 Windows Phone 開発楽しいアプリ制作の会 #12 Windows Phone 開発
楽しいアプリ制作の会 #12 Windows Phone 開発
 
WindowsPhone arch 神戸#1
WindowsPhone arch 神戸#1WindowsPhone arch 神戸#1
WindowsPhone arch 神戸#1
 
わんくま大阪47 LT
わんくま大阪47 LTわんくま大阪47 LT
わんくま大阪47 LT
 
iOS/Android/WP7アプリ開発比較
iOS/Android/WP7アプリ開発比較iOS/Android/WP7アプリ開発比較
iOS/Android/WP7アプリ開発比較
 
iOSの審査なんてくそくらえさ!
iOSの審査なんてくそくらえさ!iOSの審査なんてくそくらえさ!
iOSの審査なんてくそくらえさ!
 

Sencha TouchでHTML5アプリを作ってみる

  • 1. Sencha TouchでHTML5ア プリを作ってみる TWorks(大場 知悟) 楽しいアプリ制作の会 代表 http://blog.tworks.jp/ http://tanoapp.tworks.jp/ わんくま同盟 大阪勉強会 #47
  • 2. 自己紹介 • 大場知悟(Tomonori Ohba) – HN TWorks – TwitterID @tworks • PFUという会社でSI/SEやってます – iOS/Android/WP/SL/WPF/ASP.NET/etc... • コミュニティー – 新大阪アプリ開発初級~中級者向け勉強会 楽しいアプリ制作の会 代表 – Windows Phone Arch 神戸地区スタッフ わんくま同盟 大阪勉強会 #47
  • 3. PR • Windows Phoneの本書きました! – はじめてのWindows Phone プログラミング 工学社 共著 – 通称「はじフォン」 – よかったら買ってください。 わんくま同盟 大阪勉強会 #47
  • 4. アジェンダ • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 5. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 6. 概要 • JavaScriptのスマートフォンWebアプリ開 発フレームワーク – iOS/Android向けWebアプリ作成 – JQuery MobileはWebページ作成 • 母体はPC向けのExt JS • タッチデバイスを前提としている – マルチタッチもサポート • HTML5を活用 – iOS/Androi向け = WebKit用 わんくま同盟 大阪勉強会 #47
  • 7. 概要 • ライセンス – GNU GPL license v3または商用ライセンス • GNU GPL license v3 – ソースコードの開示義務がある • 商用ライセンス – 99,500円/パック(パック=1開発者数) – 永年ライセンス – ソースコードの開示義務なし わんくま同盟 大阪勉強会 #47
  • 8. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 9. Viewの種類 • フォーム – HTML5のフォーム わんくま同盟 大阪勉強会 #47
  • 10. Viewの種類 • ネストList – リスト&ナビゲーション わんくま同盟 大阪勉強会 #47
  • 11. Viewの種類 • カルーセル – コンテナの連続した切り替え わんくま同盟 大阪勉強会 #47
  • 12. Viewの種類 • Map – HTML5 GEO APIに対応 – GoogleMapsのEULAどうでしたっけ?(汗 わんくま同盟 大阪勉強会 #47
  • 13. Viewの種類 • Overlays – 入力・表示の補助 わんくま同盟 大阪勉強会 #47
  • 14. Viewの種類 • バッヂ表示可能なツールボタン • タッチデバイス筆頭iOS、iOSの洗練され たUserInterfaceを<del>パクリ</del>活用 • タッチデバイスのUIを活用することで、 タッチ操作できることを自然に表現 わんくま同盟 大阪勉強会 #47
  • 15. • Sencha Touchの 1.1紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 16. Viewの定義 • コンテナ(Panel) Ext.setup({ onReady: function() { var panel = new Ext.Panel({ fullscreen: true, }); わんくま同盟 大阪勉強会 #47
  • 17. Viewの定義 • HTML Hello, Wankuma!! Ext.setup({ onReady: function() { var panel = new Ext.Panel({ fullscreen: true, html:’Hello, Wankuma!!’ }); わんくま同盟 大阪勉強会 #47
  • 18. Viewの定義 • cls (css class) Hello, Wankuma!! Ext.setup({ onReady: function() { var panel = new Ext.Panel({ fullscreen: true, html:’Hello, Pronama!!’, cls: 'title' //cssクラス名 }); – CSS定義が別途必要 わんくま同盟 大阪勉強会 #47
  • 19. Viewの定義 • items Ext.setup({ onReady: function() { var panel = new Ext.Panel({ button1 fullscreen: true, items: [{ xtype: 'button', ui: 'normal', text: 'button1' }, { button2 xtype: 'button', ui: 'normal', text: 'button2' }, { xtype: 'button', ui: 'normal', button3 text: 'button3' }] }); わんくま同盟 大阪勉強会 #47
  • 20. Viewの定義 • dockedItems Ext.setup({ top onReady: function() { var panel = new Ext.Panel({ fullscreen: true, dockedItems items: [{ xtype: 'toolbar', left rigiht dock: 'top', items: [{ xtype: 'button', ui: 'normal', text: button2' }] }] bottom }); わんくま同盟 大阪勉強会 #47
  • 21. Viewの定義 • layout : vbox Ext.setup({ onReady: function() { var panel = new Ext.Panel({ fullscreen: true, button1 layout: 'vbox', items: [{ xtype: 'button', ui: 'normal', text: button1' }, { button2 xtype: 'button', ui: 'normal', text: button2' }, { xtype: 'button', ui: 'normal', button3 text: button3' }, }); わんくま同盟 大阪勉強会 #47
  • 22. Viewの定義 • layout : hvox Ext.setup({ onReady: function() { var panel = new Ext.Panel({ fullscreen: true, layout: 'hbox', items: [{ xtype: 'button', ui: 'normal', text: button1' button button button }, { 1 2 3 xtype: 'button', ui: 'normal', text: button2' }, { xtype: 'button', ui: 'normal', text: button3' }, }); わんくま同盟 大阪勉強会 #47
  • 23. Viewの定義 • handler Ext.setup({ onReady: function() { var panel = new Ext.Panel({ button1 fullscreen: true, items: [{ xtype: 'button', ui: 'normal', text: button1', handler: function() { window.alert('hello!'); } }] }) } }); わんくま同盟 大阪勉強会 #47
  • 24. Viewの定義 • レイアウトはBOXモデル • itemsに追加することで入れ子に • 入れ子のBOXの位置、方向を調整 • .htmlファイルにタグ書きません • htmlもcssもJavaScriptで書く – JavaScriptとデザイン要素が一緒に – これってどうなん? わんくま同盟 大阪勉強会 #47
  • 25. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 26. データパッケージ • Model/Store/Proxy • Model – データスキームを定義する – DatabaseのTableに相当 Ext.regModel('Product', { fields: [ {name: 'name', type: 'string'}, {name: 'description', type: 'string'}, {name: 'price', type: 'float'}, {name: 'image_url', type: 'string'}, {name: 'in_stock', type: 'boolean'} ] }); わんくま同盟 大阪勉強会 #47
  • 27. データパッケージ • Store/Proxy – Store=Model+Proxy – Proxy:データの実体の取得先/フォーマット ajax/rest/sessionstorege store: new Ext.data.Store({ model: 'Product', proxy: { type: 'ajax', url : '/products.json', // products.xml reader: { type: 'json', // xml root: 'products' } } }), わんくま同盟 大阪勉強会 #47
  • 28. データパッケージ • products配列のイメージ – readerにより読み込まれ格納される { "products": [ {"name": "Some Product", "price": 9.99, "image_url": "product1.jpg", "in_stock": true}, {"name": "Another Product", "price": 7.50, "image_url": "product2.jpg", "in_stock": true}, {"name": "A third product", "price": 2.35, "image_url": "product3.jpg", "in_stock": false}, ... ]} • sessionstorage / localstorage – WebStorageに永続化されるデータ var Cart = new Ext.data.Store({ model: 'Product', proxy: { type: 'sessionstorage', // or localstorage id : 'shoppingCart' } } ); わんくま同盟 大阪勉強会 #47
  • 29. データパッケージ • getGroupString – データをグルーピング(インデックス化) – Functionで記述 getGroupString : function(record) { return record.get('name')[0]; //商品名の頭文字でグループ化 }, • sorters – データの並び替え – 複合指定も可 わんくま同盟 大阪勉強会 #47
  • 30. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 31. アプリケーションの開発手順 • Demo:リストを表示するアプリケーション – どんなフレームワークでも手間がかかる – Sencha Touchでは、どのような感じになるか – コンタクトリスト(姓・名)、姓でグルーピング わんくま同盟 大阪勉強会 #47
  • 32. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 33. 初期設定 1. Sencha Touchライブラリをダウンロード http://extjs.co.jp/products/touch/download.php 2. 開発環境がセットアップ済みであることを確認 HTML5対応ブラウザで開発可 3. 開発用およびリリース用のWebサーバーがセッ トアップ済みであることを確認 Sencha Touchで完結するなら何でもよい 4. 開発するアプリに必要なHTMLモックとCSS ファイルの作成 わんくま同盟 大阪勉強会 #47
  • 34. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 35. HTMLの作成 • アプリケーションのJavaScriptファイル /CSSファイルをリンクしたHTML <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ListSample</title > <!-- Ext Touch CSS -- > <link rel="stylesheet" href="../../resources/css/sencha-touch.css" type="text/css"> <!-- アプリケーションCSS -- > <link rel="stylesheet" href="css/myapp.css" type="text/css"> <!-- Ext Touch JS -- > <script type="text/javascript" src="../../sencha-touch-debug.js"> </script> <!-- アプリケーション JS -- > <script type="text/javascript" src="src/myapp.js"> </script> </head> <body> <!-- body部には何も書かないこと、sencha touchが生成する --> </body> </html> わんくま同盟 大阪勉強会 #47
  • 36. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリケーションJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 37. アプリケーションJavaScriptの作成 • Model Ext.regModel(‘Contact', { fields: [ {name:'firstName', type: 'string'}, {name: 'lastName', type: 'string'}, {name:'email', type:'string'} ] }); わんくま同盟 大阪勉強会 #47
  • 38. アプリケーションJavaScriptの作成 • Store/Proxy/getGroupString var store = new Ext.data.JsonStore({ model : ‘Contact', sorters: [ {property: 'lastName', direction: 'ASC'}, {property: 'firstName', direction: 'ASC'} ], getGroupString : function(record) { return record.get('lastName')[0]; }, proxy : { type : 'ajax', url : ‘data/contacts.json', reader : { type : 'json', root : contacts', idProperty : 'email' // データの一意性を保証するプロパティー } }, autoLoad : true }); わんくま同盟 大阪勉強会 #47
  • 39. アプリケーションJavaScriptの作成 • myapp.js • V(List)とM(Store)の紐付け var list = new Ext.List({ store : contactStore, itemTpl :'<div class="contact"> {firstName} {lastName} </div>', itemSelector : 'div.contact', singleSelect : true, grouped : true, indexBar : true, ... }); わんくま同盟 大阪勉強会 #47
  • 40. アプリケーションJavaScriptの作成 • myapp.js • リストをタップしたときのイベント list.on('itemtap', function(dataView, index, item, e){ data = contactStore.getAt(index); alert(data.get('firstName') + ''+ data.get('lastName')); }); わんくま同盟 大阪勉強会 #47
  • 41. • Sencha Touch 1.1の紹介 – 概要 – Viewの種類、定義 – データパッケージ • アプリケーションの開発手順 – 初期設定 – HTMLの作成 – アプリJavaScriptの作成 – デバッグ/リリース切り替え わんくま同盟 大阪勉強会 #47
  • 42. デバッグ/リリース切り替え • Sencha Touch.jsの差し替え <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ListSample</title > <!-- Ext Touch CSS -- > <link rel="stylesheet" href="../../resources/css/sencha-touch.css" type="text/css"> <!-- アプリケーションCSS -- > <link rel="stylesheet" href="css/myapp.css" type="text/css"> <!-- Ext Touch JS -- > <script type="text/javascript" src="../../sencha-touch.js"> </script> <!-- アプリケーション JS -- > <script type="text/javascript" src="src/myapp.js"> </script> </head> <body> </body> </html> わんくま同盟 大阪勉強会 #47