BPStudy58 第1部...

31
Web 系系系系系系系 iPhone 系系系系系系 1 系系系系系系系系系系系

description

ゆめみ提供のiPhoneアプリ Nailbook (http://nailbook.jp)につきまして開発全般を通じて得たiPhoneアプリ開発ノウハウ を紹介します。関連リンクApp Store - ネイルブックhttp://itunes.apple.com/jp/app/nailbook/id432831907?mt=8ゆめ技:ゆめみスタッフブログhttp://yumewaza.yumemi.co.jp/ビープラウド著 Pythonプロフェッショナルプログラミングhttp://www.amazon.co.jp/Python%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0-%E3%83%93%E3%83%BC%E3%83%97%E3%83%A9%E3%82%A6%E3%83%89/dp/4798032948

Transcript of BPStudy58 第1部...

Page 1: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

Web 系エンジニアがiPhone アプリ開発を1 年続けてみて学んだこと

Page 2: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

自己紹介• 渡邉 将人• Twitter @nave_m• Facebook facebook.com/masato.nave

• ゆめみ で 働いているプログラマ• スマートフォン アプリ、 Web• C/C++, Objective-C , Python

2012

/6/2

9BP

Stud

y#58

2

Page 3: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

本日の内容• iPhone アプリ開発のノウハウ

• 継続開発

• エンジニア視点

• 今回の対象外• 細かい設計・実装• 企画・プロモーション

2012

/6/2

9BP

Stud

y#58

3

Page 4: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

発表の流れ1. iPhone アプリ Nailbook のご紹介

2. 開発前にすべきこと

3. リリース後にすること

4. バージョンアップを続ける上で

5. まとめ

2012

/6/2

9BP

Stud

y#58

4

Page 5: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

NAILBOOKのご紹介ネイルの写真を共有する iPhone アプリ

2012

/6/2

9BP

Stud

y#58

5

Page 6: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

Nailbook とは

• ネイル好きのための iPhone アプリ

• みんなのネイル写真を見る

• 自分のネイルを投稿する

• App Store http://itunes.apple.com/jp/app/nailbook/id432831907

• Web サイト http://nailbook.jp/

2012

/6/2

9BP

Stud

y#58

6

Page 7: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

ネイルの写真を見る・探す• 写真が豊富

• 検索機能• 色• デザイン• シーン• ハンド / フット• サロン / セルフ

2012

/6/2

9BP

Stud

y#58

7

Page 8: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

写真をお気に入り登録• かわいい ボタン• フィードバック• Facebook のいいね !

• ランキング • 過去 1 週間 集計• 実際にウケている

旬のネイルがわかる

2012

/6/2

9BP

Stud

y#58

8

Page 9: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

開発に関して• 使用言語• アプリ: Objective-C• サーバ: Python + Django

• プロジェクト開始時の PG 経験• iPhone アプリ: Web 中心(ネイティブはほぼ未経験)• Python : 3 か月くらい GAE さわったことがある程度• Django : 未経験

• 開発期間• 初期開発 2011/2 – 2011/4• 追加開発 2011/5 – 現在に至る ( 途中 1 ヶ月ほど別アプリ

も )

2012

/6/2

9BP

Stud

y#58

9

Page 10: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

主なバージョンアップ• 2011/2 開発着手• 2011/5 Ver.1.0 • 2011/7 Ver.1.4 写真の表示方法を変更• 2011/8 Ver.2.0 メニューを大幅に変更• 2011/10 Ver.2.3 Push 通知に対応• 2012/3 Ver.3.0 ユーザ検索• 2012/3 Ver.3.1 写真検索

• 累計 37 回のアップデート (1 ヶ月に 3 回のペース )

2012

/6/2

9BP

Stud

y#58

10

Page 11: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

開発前にすべきことApple のプラットフォームを理解する

2012

/6/2

9BP

Stud

y#58

11

Page 12: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

アプリが世に出るまで1. 開発者登録、アプリ公開用登録をする

2. アプリを開発する

3. 申請して Apple によるレビューを受ける

4. App Store に公開

2012

/6/2

9BP

Stud

y#58

12

Page 13: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

Apple によるレビュー• レビューを通らないと公開できない• バージョンアップにも毎回レビューが要る

• 「ガイドライン」と「レビュー担当者」が絶対

• レビュワーは米国にしかいないらしい

2012

/6/2

9BP

Stud

y#58

13

Page 14: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

却下される条件を知る• App Store Review Guideline• 閲覧に iOS Developer Program 登録が必要• 英語

• レビューで却下される条件は必読

• アプリ関係者全員で読んだほうがよい

2012

/6/2

9BP

Stud

y#58

14

Page 15: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

iOS 開発環境を知るどんな開発でも言語とフレームの理解は重要• Objective-C • 独特 ( 書式、メモリ管理 )

• iOS SDK• パターンさえを覚えてしまえば生産性は高い• Reference に従わないコードは Reject されます

• 例 ) ファイル保存のディレクトリ• App Store Review Guideline - 2. Functionality を読む

• その他• 非同期通信、 タッチ処理、画面のコントローラなど

イベント駆動なアプローチがたくさん

2012

/6/2

9BP

Stud

y#58

15

Page 16: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

iOS Developer Library を読むアプリ全体、概念的な設計• iOS Human Interface Guidelines • iOS App Programming Guide

画面構成、 ある画面におけるイベント管理• View Controller Programming Guide for iOS• View Programming Guide for iOS

2012

/6/2

9BP

Stud

y#58

16

Page 17: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

サンプルをたくさん動かす• ドキュメントとサンプルを行ったり来たり

• 慣れてきたら 3rd Party ライブラリを使ってみる

• 困ったら StackOverflow

2012

/6/2

9BP

Stud

y#58

17

Page 18: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

リリース後にすること計画外のことばかり

2012

/6/2

9BP

Stud

y#58

18

Page 19: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

いざリリースしてみると計画外のことだらけ

• ライバルアプリの出現

• 新しい iOS で動かない

• AppStore のユーザ評価が荒れる

2012

/6/2

9BP

Stud

y#58

19

Page 20: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

AppStore のユーザ評価• 評価点数 ( 1☆ ~☆ 5) がダウンロードに影響• ☆1評価 をなんとかして回避したい• できれば ☆ 5 をつけてほしい

2012

/6/2

9BP

Stud

y#58

20

Page 21: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

エンジニアができること• 品質を高める

• バグをすぐに修正する

• よい評価を促す仕組みを作る

2012

/6/2

9BP

Stud

y#58

21

Page 22: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

品質を高めるiOS 開発ではメモリ管理に特に気をつける

• メモリの解放忘れ

• Nailbook では 画像関連のメモリ管理• カメラ撮影、画像の加工、大量のダウンロード

2012

/6/2

9BP

Stud

y#58

22

ゆめ技: Objective-C の Property の解放忘れを見つけるスクリプトBy @mokemokechickenhttp://yumewaza.yumemi.co.jp/2012/01/objectivecproperty.html

ゆめ技: iOS シミュレータでメモリ警告を定期的に発生させるBy @mokemokechickenhttp://yumewaza.yumemi.co.jp/2012/03/memorywarningsender_in_ios_simulatorios.html

Page 23: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

バグをすぐに修正する• 1 週間ごとに機能追加 Ver. を申請し、

バグ修正もそこに含めてしまう

• レビューで Reject されたら指摘事項を修正して、その間に作った機能もマージして最申請 → Git 大活躍

• 機能追加は可能な限り小分けにする→ チケット駆動開発

2012

/6/2

9BP

Stud

y#58

23ゆめ技: Git-Redmine: Git のコミットと Redmine を連携する。チケット駆動開発にも。By @coiledcoilhttp://yumewaza.yumemi.co.jp/2011/08/git-redmine-integration-using-rest-api-python.html

Page 24: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

奥の手: Expedited Review• 通常 1 週間ぐらいかかる Apple のレビューを即日で通してもらう• Apple のサイトから英語で申請• 本当に困ったときだけ使う

• 例 )外部インフラが障害で乗り換えが必要になった

2012

/6/2

9BP

Stud

y#58

24

Page 25: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

よい評価を促す仕組みを作る• アプリのお得意様にレビューしてほしい

• ある回数起動したら、依頼のダイアログを出す

2012

/6/2

9BP

Stud

y#58

25

Page 26: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

バージョンアップを続ける上で

2012

/6/2

9BP

Stud

y#58

26

Page 27: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

アプリバージョンが混在する• 古い Ver. のアプリを使い続けるユーザがいる• アプリと WebAPI との整合性をどうやって保つのか?

• 強制バージョンアップ• クライアントの混在を許す設計

2012

/6/2

9BP

Stud

y#58

27

Page 28: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

強制バージョンアップ• アプリ起動時に最新バージョンを問い合わせる

WebAPI を用意

• 現在のアプリよりも新しいものがあれば、AppStoreへ移動させるダイアログ表示

2012

/6/2

9BP

Stud

y#58

28

Page 29: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

クライアントの混在を許す• API のレスポンスボディ の拡張方法• JSON へ 新しい要素の追加は OK• 既存の要素の削除・改名は NG

• パース時にデフォルト値になってしまう

• レスポンスの仕様を大きく変える場合、 API を分ける• URI に Ver番号を入れる

• GET /1/app/action

2012

/6/2

9BP

Stud

y#58

29

Page 30: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

まとめ• Apple のルールを理解し、適応する

• 細かく、継続的に改善する• 開発言語に Python を使っているのなら

書籍 「 Python プロフェッショナルプログラミング」はぜひ読んでおきたい 

さりげなく重要• 技術英語 ( Reading )

2012

/6/2

9BP

Stud

y#58

30

Page 31: BPStudy58 第1部 Web系エンジニアがiPhoneアプリ開発を1年続けてみて学んだこと

2012

/6/2

9BP

Stud

y#58

31

ありがとうございました