SlideShare a Scribd company logo
中規模なアプリ開発苦労話




                                                  photo by Alan Bell
                    http://www.flickr.com/photos/belalan/213282261/
13年1月25日金曜日
自己紹介
                                        photo by poluz!
                     http://www.flickr.com/photos/poluz
13年1月25日金曜日
小山田 浩(@h5y1m141)




                                     JavaScript
         エンジニアではありませんが       (JScript,Titanium Mobileな
         趣味でTitaniumいじってます         ど)経験2年程度
                              ※最近はCoffeeScript好き

13年1月25日金曜日
Agenda
              • これから話すこと
               • 今作ってるアプリを簡単に紹介
               • 自分の中の設計方針
              • 今日話さないこと
               • ソースコードの細かい解説
                ※気になる方はLT終了後お声がけ下さい


13年1月25日金曜日
今作ってるアプリ
                                        Photo By fotologic
                    http://www.flickr.com/photos/fotologic/
13年1月25日金曜日
Qiitaのビューワーアプリ




13年1月25日金曜日
中規模ってどの程度?




                                        photo by Laurie Pink
                    http://www.flickr.com/photos/laurie_pink/
13年1月25日金曜日
あくまで自分の中で中規模
                 という話です
     •   人生初のコード1000行超
         ※現在1334行

         •    underscore.js、moment.js
              等のライブラリとjasmineのテ
              ストコードは除いた数値

     •   MVC的にファイルを分割

         •    分割方法、ファイルのネーミン
              グに現在悩んでる




13年1月25日金曜日
アプリの構成要素:主要なUI
     mainTable
                                        configTable




                              configWindow
                                            webView
     menuTable



                 mainWindow



                              WebViewWindow
13年1月25日金曜日
TableViewは使い回してる
                  mainTable   ローカルにキャッシュ




                                投稿情報
                                投稿情報
                                 投稿情報
                                 投稿情報




     mainWindow




13年1月25日金曜日
画面遷移のロジックはシンプル


                            moveToConfigWindow: () ->
                                configMenu = require("ui/configMenu")
                                menu = new configMenu()
                                configWindow = new win()
                                configWindow.title = "アカウント情報"
                                configWindow.backButtonTitle = '戻る'
                                configWindow.add menu
                                return tab.open(configWindow)




                               configWindow


                            moveToWebViewWindow: () ->


               mainWindow
                                actionBtn = Ti.UI.createButton
                                  systemButton: Titanium.UI.iPhone.SystemButton.ACTION

                                actionBtn.addEventListener('click',()->
                                  # 省略
                                webview.show()
                                webWindow.rightNavButton = actionBtn
                                return tab.open(webWindow)


                             WebViewWindow
13年1月25日金曜日
TableViewの入れ替え&書き換えとか
           スパゲッティコードになりそう・・

              左上ナビボタン:click   menuTable:click



                               QiitaAPIを利用する独自モ
                               デル定義しておりそれを呼
                 mainTableス            び出す
                 ライドと半透
                               1.該当のURLエンドポイントアクセス
                    明化         2.アイテム取得出来たらローカルにキャッシュ
                               3.QiitaAPIのリクエストヘッダーに次ページの
                               URL情報含まれているので取り出しておく




13年1月25日金曜日
自分の中の設計方針


              ・1メソッド1画面程度にする
              ・ 先人の知恵を活用してスパゲッ
              ティコード化を防ぐ




                                             photo by aagius
                         http://www.flickr.com/photos/aagius/
13年1月25日金曜日
mainTableスライドと半透明化処理で
                    Stateパターン
   class defaultState                                          class slideState
     constructor: () ->                                          constructor: () ->
                                                                    
     sayState: () ->                                             sayState: () ->
       return "STATE: 標準状態"                                        return "STATE: スライド状態"
     moveBackward: () ->                                           
                                                                 moveBackward: () ->
       # return new defaultState()                                 Ti.App.Properties.setBool("stateMainTableSlide",false)
     moveForward: () ->                                            mainTable.touchEnabled = true
       Ti.API.info "ACTION: スライド開始"                                
       Ti.App.Properties.setBool("stateMainTableSlide",true)       mainTable.setOpacity(1.0)
       mainTable.touchEnabled = false                              mainTable.animate({
       mainTable.animate({                                           duration:200
         duration:200                                                left:0
         left:160                                                  },()->
       }, ()->                                                       # Ti.API.info "アニメーション終了"
         mainTable.setOpacity(0.5)                                 
       )                                                           )
       return new slideState()                                     return new defaultState()
   module.exports = defaultState                                   
                                                                 moveForward: () ->
                                                                   Ti.API.info "この状態では何もしない"
                                                                       
                                                               module.exports = slideState




13年1月25日金曜日
menuTableの各項目をクリック後の
                 処理はCommandパターン

                        getMyStocksCommand()

                        1.qiita.getMyStocks()実行
                        2.次ページのURL情報が後々必要
                        になるためTi.App.Properties
                        で格納
                        3. ActivityIndicatorの制御
                        4.その他・・

                        getFollowingTagsCommand(tags)

                        ※まだ実装してないけど上記と似
                        たような処理になる予定


13年1月25日金曜日
GitHub上にコードありますので気に
               なる方はご覧くださいー




13年1月25日金曜日
ご清聴ありがとうご
                ざいました


13年1月25日金曜日

More Related Content

PDF
introduction to Marionette.js (jscafe14)
PDF
iPhoneアプリ開発入門(1)ボタンと画像
PDF
公式page改ざんで学ぶjQuery入門 (jscafe7)
PPTX
Magento meet up Tokyo#1 for Design
PPT
Will going to
PPT
Using Newspapers articles as reading material what, why and how said elkaoukaji
PPT
folklor
PDF
1.1. Intro Whoareus
introduction to Marionette.js (jscafe14)
iPhoneアプリ開発入門(1)ボタンと画像
公式page改ざんで学ぶjQuery入門 (jscafe7)
Magento meet up Tokyo#1 for Design
Will going to
Using Newspapers articles as reading material what, why and how said elkaoukaji
folklor
1.1. Intro Whoareus

Viewers also liked (17)

DOCX
Lagna calculator ( mystic scripts )
PPTX
Weekly update 2
PDF
Interakcja na ekrania media
PDF
ASI 2007 European Radio Symposium - Furlanetto - How auditing radio campaigns...
 
PPTX
From Semantic Grid To Knowledge Service
PDF
10 they overcame by the blood (part 1) slideshow
PPTX
Presentació AENTEG
PPT
Prague
ODP
Screen printing on tees in miami
PPS
Morning
DOCX
ISOLA MENU' aggiornato a gennaio 2012.docx
PPT
Start prezentac lan
PPTX
The History of the Horror Genre
PPTX
Financial Burden of Pediatric Cancer for Patients and their Families
PPTX
Kosteikko infoa 2012
PPTX
Italy National PBoXes 10-11
PPT
香港六合彩
Lagna calculator ( mystic scripts )
Weekly update 2
Interakcja na ekrania media
ASI 2007 European Radio Symposium - Furlanetto - How auditing radio campaigns...
 
From Semantic Grid To Knowledge Service
10 they overcame by the blood (part 1) slideshow
Presentació AENTEG
Prague
Screen printing on tees in miami
Morning
ISOLA MENU' aggiornato a gennaio 2012.docx
Start prezentac lan
The History of the Horror Genre
Financial Burden of Pediatric Cancer for Patients and their Families
Kosteikko infoa 2012
Italy National PBoXes 10-11
香港六合彩
Ad

Similar to 20130125 titanium meetupvol5 (20)

PDF
20130412 titanium meetupvol7
PPT
20130924 Picomon CRH勉強会
PPTX
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
PDF
Titanium勉強会
PPT
mobylet ケータイサイト30分クッキング
PDF
Road to UI Library
PDF
I phoneアプリ入門 第3回
PDF
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
PDF
Sugarcubeをはじめよう
PDF
jQuery Mobile 最新情報 & Tips
PDF
Jqm20120210
PDF
datetime.datetime.now()をモックしたい.pdf
PDF
scala+liftで遊ぼう
KEY
EC-CUBEプラグイン講義
PDF
Introduction for Browser Side MVC
KEY
Titanium実装最初の一歩.
PPTX
Java fx勉強会lt 第8回
PDF
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
PDF
Miyazaki.js vol.2
PDF
DevSap20130921
20130412 titanium meetupvol7
20130924 Picomon CRH勉強会
Webアプリのシナリオテスト自動化を運用に乗せるまでの10のステップ
Titanium勉強会
mobylet ケータイサイト30分クッキング
Road to UI Library
I phoneアプリ入門 第3回
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
Sugarcubeをはじめよう
jQuery Mobile 最新情報 & Tips
Jqm20120210
datetime.datetime.now()をモックしたい.pdf
scala+liftで遊ぼう
EC-CUBEプラグイン講義
Introduction for Browser Side MVC
Titanium実装最初の一歩.
Java fx勉強会lt 第8回
JavaScript + CSS3を活用して スマートフォンサイト/アプリに 動きを付けてみよう
Miyazaki.js vol.2
DevSap20130921
Ad

More from Hiroshi Oyamada (20)

PDF
2016 02-25-crawler-study-01
PDF
2016 02-09-co-edo lt
PDF
2015 12-19-ruby rails
PDF
2015 07-04-ruby rails
PDF
育児を支える技術〜クローラーとかスクレイピング
PDF
日々の面倒をプログラミングで解決!【入門編】
PDF
2014 05-17-titanium hamamatsuvol3
PDF
20140319 titanium meetupvol17
PDF
2014 02-19-titanium meetupvol16
PDF
TitaniumMeetUpVol13
PDF
20130910 titanium meetupvol11
PDF
勉強会主催者のための勉強会
PDF
20130613 titanium meetupvol9
PDF
2013 06-11-craft beerfanlt
PDF
2013 06-05-web-career-talk-at-coedo
PDF
2013 02-28-bussiness-plan-about-titanium
PDF
20130126 titanium新年会
PDF
2012 12-17-titanium meetupvol4
PDF
Sinatraアプリをherokuにアップ
PDF
Sinatraでwebアプリケーション開発を学ぶ
2016 02-25-crawler-study-01
2016 02-09-co-edo lt
2015 12-19-ruby rails
2015 07-04-ruby rails
育児を支える技術〜クローラーとかスクレイピング
日々の面倒をプログラミングで解決!【入門編】
2014 05-17-titanium hamamatsuvol3
20140319 titanium meetupvol17
2014 02-19-titanium meetupvol16
TitaniumMeetUpVol13
20130910 titanium meetupvol11
勉強会主催者のための勉強会
20130613 titanium meetupvol9
2013 06-11-craft beerfanlt
2013 06-05-web-career-talk-at-coedo
2013 02-28-bussiness-plan-about-titanium
20130126 titanium新年会
2012 12-17-titanium meetupvol4
Sinatraアプリをherokuにアップ
Sinatraでwebアプリケーション開発を学ぶ

20130125 titanium meetupvol5

  • 1. 中規模なアプリ開発苦労話 photo by Alan Bell http://www.flickr.com/photos/belalan/213282261/ 13年1月25日金曜日
  • 2. 自己紹介 photo by poluz! http://www.flickr.com/photos/poluz 13年1月25日金曜日
  • 3. 小山田 浩(@h5y1m141) JavaScript エンジニアではありませんが (JScript,Titanium Mobileな 趣味でTitaniumいじってます ど)経験2年程度 ※最近はCoffeeScript好き 13年1月25日金曜日
  • 4. Agenda • これから話すこと • 今作ってるアプリを簡単に紹介 • 自分の中の設計方針 • 今日話さないこと • ソースコードの細かい解説 ※気になる方はLT終了後お声がけ下さい 13年1月25日金曜日
  • 5. 今作ってるアプリ Photo By fotologic http://www.flickr.com/photos/fotologic/ 13年1月25日金曜日
  • 7. 中規模ってどの程度? photo by Laurie Pink http://www.flickr.com/photos/laurie_pink/ 13年1月25日金曜日
  • 8. あくまで自分の中で中規模 という話です • 人生初のコード1000行超 ※現在1334行 • underscore.js、moment.js 等のライブラリとjasmineのテ ストコードは除いた数値 • MVC的にファイルを分割 • 分割方法、ファイルのネーミン グに現在悩んでる 13年1月25日金曜日
  • 9. アプリの構成要素:主要なUI mainTable configTable configWindow webView menuTable mainWindow WebViewWindow 13年1月25日金曜日
  • 10. TableViewは使い回してる mainTable ローカルにキャッシュ 投稿情報 投稿情報 投稿情報 投稿情報 mainWindow 13年1月25日金曜日
  • 11. 画面遷移のロジックはシンプル moveToConfigWindow: () ->     configMenu = require("ui/configMenu")     menu = new configMenu()     configWindow = new win()     configWindow.title = "アカウント情報"     configWindow.backButtonTitle = '戻る'     configWindow.add menu     return tab.open(configWindow) configWindow moveToWebViewWindow: () -> mainWindow     actionBtn = Ti.UI.createButton       systemButton: Titanium.UI.iPhone.SystemButton.ACTION     actionBtn.addEventListener('click',()-> # 省略     webview.show()     webWindow.rightNavButton = actionBtn     return tab.open(webWindow) WebViewWindow 13年1月25日金曜日
  • 12. TableViewの入れ替え&書き換えとか スパゲッティコードになりそう・・ 左上ナビボタン:click menuTable:click QiitaAPIを利用する独自モ デル定義しておりそれを呼 mainTableス び出す ライドと半透 1.該当のURLエンドポイントアクセス 明化 2.アイテム取得出来たらローカルにキャッシュ 3.QiitaAPIのリクエストヘッダーに次ページの URL情報含まれているので取り出しておく 13年1月25日金曜日
  • 13. 自分の中の設計方針 ・1メソッド1画面程度にする ・ 先人の知恵を活用してスパゲッ ティコード化を防ぐ photo by aagius http://www.flickr.com/photos/aagius/ 13年1月25日金曜日
  • 14. mainTableスライドと半透明化処理で Stateパターン class defaultState class slideState   constructor: () ->   constructor: () ->              sayState: () ->   sayState: () ->     return "STATE: 標準状態"     return "STATE: スライド状態"   moveBackward: () ->        moveBackward: () ->     # return new defaultState()     Ti.App.Properties.setBool("stateMainTableSlide",false)   moveForward: () ->     mainTable.touchEnabled = true     Ti.API.info "ACTION: スライド開始"          Ti.App.Properties.setBool("stateMainTableSlide",true)     mainTable.setOpacity(1.0)     mainTable.touchEnabled = false     mainTable.animate({     mainTable.animate({       duration:200       duration:200       left:0       left:160     },()->     }, ()->       # Ti.API.info "アニメーション終了"       mainTable.setOpacity(0.5)          )         )     return new slideState()     return new defaultState() module.exports = defaultState        moveForward: () ->     Ti.API.info "この状態では何もしない"          module.exports = slideState 13年1月25日金曜日
  • 15. menuTableの各項目をクリック後の 処理はCommandパターン getMyStocksCommand() 1.qiita.getMyStocks()実行 2.次ページのURL情報が後々必要 になるためTi.App.Properties で格納 3. ActivityIndicatorの制御 4.その他・・ getFollowingTagsCommand(tags) ※まだ実装してないけど上記と似 たような処理になる予定 13年1月25日金曜日
  • 16. GitHub上にコードありますので気に なる方はご覧くださいー 13年1月25日金曜日
  • 17. ご清聴ありがとうご ざいました 13年1月25日金曜日