31
効率的なアプリ開発の ベストプラクティス グリー株式会社 矢口裕也

効率的なアプリ開発のベストプラクティス

  • Upload
    yayugu

  • View
    19.861

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 効率的なアプリ開発のベストプラクティス

効率的なアプリ開発の ベストプラクティス

グリー株式会社 矢口裕也

Page 2: 効率的なアプリ開発のベストプラクティス

そういえば

一昨年の今頃に Conference with Developers があり

!去年の今頃に Conference with Developers 2 というイベントをやっていました。(主催させていただきました) !主催者毎回異なるのにiOSの土日イベントが一年おきペースになっていておもしろい

Page 3: 効率的なアプリ開発のベストプラクティス

そういえば2

iOS4.3~5の時代にPhoneGapみたいなライブラリの保守をしたトラウマあり UIWebViewはこわい

Page 4: 効率的なアプリ開発のベストプラクティス

iOS開発の醍醐味: 一つ一つの画面に注力して最高

のアプリを作っていく

Page 5: 効率的なアプリ開発のベストプラクティス

最高のUXを求めるとき

一つの画面をじっくり時間をかけて磨き上げていくことができる 標準パーツを再実装したり、独自UIをつくったり、美しいアニメーションをたくさん付けたり

Page 6: 効率的なアプリ開発のベストプラクティス

一方で

最高のUXを提供する必要のない箇所もある 設定画面とか、大人の事情で追加することになった機能とか(ex. 電子書籍アプリをつくっていたのになぜかFacebook的なタイムラインの投稿とコメントといいねできる機能を開発している…) そこまで楽しくないし、すばやく実装することが求められる

Page 7: 効率的なアプリ開発のベストプラクティス

そういうとき

なるべく早くつくってしまいたい =開発速度を上げたい !

品質は必要十分であればよい

Page 8: 効率的なアプリ開発のベストプラクティス

効率的に実装するにはどうしたらいいか

Page 9: 効率的なアプリ開発のベストプラクティス

大原則:やることを減らす

Page 10: 効率的なアプリ開発のベストプラクティス

大原則:やることを減らす

単純に作業量を減らすことができればスピードは上がる !

1. UIの実装コストを減らす

2. 通信の実装コストを減らす

Page 11: 効率的なアプリ開発のベストプラクティス

UIの実装コスト

昔に比べるとだいぶ楽になった

・端末の性能向上

・Auto Layout

・Storyboard

・Self Sizing Cell

Page 12: 効率的なアプリ開発のベストプラクティス

改善の余地

React.jsみたいなアプローチ(View の diff & patch)はよさそう ・ReactNativeに期待 ・小規模であれば自分でも作れる  (NSProgrammersのUITableView+Updatesのような)

Page 13: 効率的なアプリ開発のベストプラクティス

Demo

Page 14: 効率的なアプリ開発のベストプラクティス

通信の実装コスト

・ほぼ仕様に依存する ・仕様=だいたいの場合サーバー側が決める !

実装コストを減らすには?

Page 15: 効率的なアプリ開発のベストプラクティス

大原則:やることを減らす

Page 16: 効率的なアプリ開発のベストプラクティス

サーバーに処理を任せる

どちらでも行える処理であれば サーバー側でやってしまった方が 実装コストが低く修正も簡単になる

Page 17: 効率的なアプリ開発のベストプラクティス

API

共通化・RESTなどにとらわれない。

個々の(iOS, Android別)クライアントの各画面の都合、

ライブラリ(Mantle, JSONModel) の都合に合わせたjsonファイルを返してもらうこと

Page 18: 効率的なアプリ開発のベストプラクティス

State

・ダウンロード可能なアセットを持たない ・クライアント側でCacheを持たない(画像除く) ・クライアント側でローカルストアを利用しない。毎回サーバーから取得する

Page 19: 効率的なアプリ開発のベストプラクティス

右のような画面 ・お知らせ ・投稿&コメント

1RWLƓFDWLRQ

Post

&RPPHQW

Post

&RPPHQW

Page 20: 効率的なアプリ開発のベストプラクティス

例 API仕様画面の表示に必要なリソース一覧 ・api.hoge.com/timeline_notification.json

・api.hoge.com/posts.json

・api.hoge.com/comments.json

・hoge.foo-cdn.com/locales/ja.json (asset)

Page 21: 効率的なアプリ開発のベストプラクティス

例 API仕様 v2

・api.hoge.com/ios/timeline_top.json

・api.hoge.com/ios/timeline_more.json

・hoge.foo-cdn.com/locales/ja.json (asset)

!

comment, post, notificationを統合

Page 22: 効率的なアプリ開発のベストプラクティス

例 API仕様 v3

・api.hoge.com/ios/timeline_top.json

・api.hoge.com/ios/timeline_more.json

!

localeをサーバーで処理するように。

各JSONのResponseがあらかじめlocale適用済みに

Page 23: 効率的なアプリ開発のベストプラクティス

サーバー側仕様変更で問題になるもの・綺麗な RESTful API のサーバー ・レガシーサーバー

Page 24: 効率的なアプリ開発のベストプラクティス

綺麗な RESTful API サーバー

・汎用的なAPIであることを理由に特定画面に特化したAPIを断られることが多い

・原理主義的だとbatch requestの実装すら断られることがある

Page 25: 効率的なアプリ開発のベストプラクティス

レガシーサーバー

・触るのが怖い ・同じような処理をする新APIを実装した場合に、実装で共通部を抽出するなどでリファクタリングしようとするとデグレそうで怖い

Page 26: 効率的なアプリ開発のベストプラクティス

サーバー側をどう説得するか

・パフォーマンスの向上などメリットを説明 ・クライアントの大変さを訴える ・サーバー側も一部自分で書く

Page 27: 効率的なアプリ開発のベストプラクティス

メリットを説明

先ほどの例だと ・リクエスト数4→1となり表示が高速に ・アセット読み込みがなくなるため起動が高速化。離脱率下がる など

Page 28: 効率的なアプリ開発のベストプラクティス

サーバー側も一部自分で書く

・特にサーバー側エンジニア忙しくて手が回っていない場合に有効 ・強いマインドを持つことが大事

Page 29: 効率的なアプリ開発のベストプラクティス

それでもだめなら……

Page 30: 効率的なアプリ開発のベストプラクティス

中継サーバーをたてましょう

Client Proxyfor Client

REST Server

Legacy Server

Private Network

Client 開発者が書くPHPとかで

Page 31: 効率的なアプリ開発のベストプラクティス

まとめ

・UIまわりの実装はだいぶ楽になった ・通信周りはプロトコルをどう定義するかで工数がグッと変わる ・サーバーサイドとの協力関係が大切