Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

エンジニア戦記 〜小さなチーム、大きな未来〜

28,048 views

Published on

2015/02/15の iOS オールスター勉強会の発表資料です。

Published in: Engineering
  • Hello! High Quality And Affordable Essays For You. Starting at $4.99 per page - Check our website! https://vk.cc/82gJD2
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

エンジニア戦記 〜小さなチーム、大きな未来〜

  1. 1. Copyright © Classmethod, Inc.
  2. 2. 平井祐樹 29 2011/2 Classmethod入社 iOS 開発歴2年半 blog http://dev.classmethod.jp/author/hirai-yuki
  3. 3. Copyright © Classmethod, Inc. って何の会社?クラスメソッド
  4. 4. Copyright © Classmethod, Inc. Solutions AWSコンサルティング Amazonクラウドに特化したサービス提供 iOSアプリ開発 iOS/Android ネイティブアプリケーション開発
  5. 5. Copyright © Classmethod, Inc. Developers.IO
  6. 6. Copyright © Classmethod, Inc. Developers.IO 月間平均 80 万PV
  7. 7. Copyright © Classmethod, Inc. こんな感じでしょ?
  8. 8. Copyright © Classmethod, Inc.
  9. 9. Copyright © Classmethod, Inc. こんな感じです。
  10. 10. 注:テーブルのお札はおもちゃです
  11. 11. Copyright © Classmethod, Inc. プロジェクト登場人物 デザイナー プロダクトオーナー Web API担当者 iOS エンジニア
  12. 12. Copyright © Classmethod, Inc. 今日のお話 Web API担当者iOS エンジニア
  13. 13. Copyright © Classmethod, Inc. 今日のお話 Web API との付き合い方 Web API 担当者ヲ攻略セヨ
  14. 14. Copyright © Classmethod, Inc. 突然ですが…
  15. 15. Copyright © Classmethod, Inc. プロジェクトに 参加してもらいます
  16. 16. Copyright © Classmethod, Inc. イメージしてみてください
  17. 17. Copyright © Classmethod, Inc. 今あなたはとあるプロジェクトの iOSエンジニアとしてアサインさ れました。 その一方で、 サーバーサイドエンジニアが WebAPIの実装をしています。
  18. 18. Copyright © Classmethod, Inc. Web API 完成 ?
  19. 19. Copyright © Classmethod, Inc. iOSの実装を進めていたあなたは と、日頃の戦いに疲れきっている のにも関わらずちょっと元気がで ます。 「よし!これで結合できるぞ!」
  20. 20. Copyright © Classmethod, Inc. おもむろに仕様書に目を通すと
  21. 21. Copyright © Classmethod, Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  22. 22. Copyright © Classmethod, Inc. あなたは気づいてしまいます。
  23. 23. Copyright © Classmethod, Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  24. 24. Copyright © Classmethod, Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } } HTTPステータスコードで 表してくれればいいのに!
  25. 25. Copyright © Classmethod, Inc. このままだと…
  26. 26. Copyright © Classmethod, Inc. AFHTTPRequestOperationManager *manager; [manager GET:@"http://xxx.com/possts" parameters:nil success:^(...) { // 成功時の処理 } failure:^(...) { // 失敗時の処理 }]; エラーが発生しても こっち
  27. 27. Copyright © Classmethod, Inc. さらに
  28. 28. Copyright © Classmethod, Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } }
  29. 29. Copyright © Classmethod, Inc. { "header": { "status": "success", "message": "..." }, "response": { "topics": [{ "topic_id": 123, "topic_title": "...", "topic_content": "...", "category_id": 456, "category_name": "..." }] } } いらないのに
  30. 30. Copyright © Classmethod, Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger topicIdentifier; @property (nonatomic) NSString *topicTitle; @property (nonatomic) NSString *topicContent; @end 格好悪いなぁ
  31. 31. Copyright © Classmethod, Inc. あなたは Web API 担当者に こう提案します。
  32. 32. Copyright © Classmethod, Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category_id": 456, "category_name": "..." }] }
  33. 33. Copyright © Classmethod, Inc. Web API 担当者は内心こう思います。
  34. 34. Copyright © Classmethod, Inc. (ったく、めんどくせぇな・・・)
  35. 35. Copyright © Classmethod, Inc. そんな空気を感じてもあなたは 動じず提案を続けました。
  36. 36. Copyright © Classmethod, Inc. すると、新しいAPIを手に入れる ことができました! これで実装への悪影響を回避する ことができますね。
  37. 37. Copyright © Classmethod, Inc. 一安心もつかの間・・・
  38. 38. Copyright © Classmethod, Inc. おもむろに仕様書に目を通すと
  39. 39. Copyright © Classmethod, Inc. { "categories": [{ "id": 456, "name": "..." }] }
  40. 40. Copyright © Classmethod, Inc. また あなたは気づいてしまいます。
  41. 41. Copyright © Classmethod, Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category_id": 456, "category_name": "..." }] } { "categories": [{ "id": 456, "name": "..." }] }
  42. 42. Copyright © Classmethod, Inc. このままだと…
  43. 43. Copyright © Classmethod, Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger identifer; @property (nonatomic) NSString *title; @property (nonatomic) NSString *content; @property (nonatomic) NSInteger categoryIdentifier; @property (nonatomic) NSInteger categoryName; @end @interface CLMCategory : NSObject @property (nonatomic) NSInteger identifier; @property (nonatomic) NSInteger name; @end しっくりこない・・・
  44. 44. Copyright © Classmethod, Inc. あなたは Web API 担当者に こう提案します。
  45. 45. Copyright © Classmethod, Inc. { "topics": [{ "id": 123, "title": "...", "content": "...", "category": { "id": 456, "name": "..." } }] }
  46. 46. Copyright © Classmethod, Inc. @interface CLMTopic : NSObject @property (nonatomic) NSInteger identifer; @property (nonatomic) NSString *title; @property (nonatomic) NSString *content; @property (nonatomic) CLMCategory *category; @end @interface CLMCategory : NSObject @property (nonatomic) NSInteger identifier; @property (nonatomic) NSInteger name; @end
  47. 47. Copyright © Classmethod, Inc. Web API 担当者は内心こう思います。
  48. 48. Copyright © Classmethod, Inc. (ああーーあーあーー)
  49. 49. Copyright © Classmethod, Inc. 変な空気を感じながらも あなたは提案を続けました。
  50. 50. Copyright © Classmethod, Inc. すると、また新しいAPIを手に入 れることができました! これでまた実装への悪影響を回避 することができますね。
  51. 51. Copyright © Classmethod, Inc. 一安心もつかの間・・・
  52. 52. Copyright © Classmethod, Inc. おもむろに仕様書に目を通すと
  53. 53. Copyright © Classmethod, Inc. 目的 エンドポイント トピック一覧取得 https://api.xxx.com/v1/topics/ カテゴリー一覧取得 https://api.xxx.com/v1/categories/ おすすめ商品取得 https://api.xxx.com/v1/products/recommend ユーザー情報取得 https://api.example.com/v1/user/
  54. 54. Copyright © Classmethod, Inc. またまた あなたは気づいてしまいます。
  55. 55. Copyright © Classmethod, Inc. ホーム画面 カテゴリー一覧取得API おすすめ商品一覧API ユーザー情報取得API トピック一覧取得API
  56. 56. Copyright © Classmethod, Inc. ホーム画面 カテゴリー一覧取得API おすすめ商品一覧API ユーザー情報取得API トピック一覧取得API 1画面表示するのに 何個API叩きゃいいんだ!?
  57. 57. Copyright © Classmethod, Inc. あなたは Web API 担当者に こう提案します。
  58. 58. Copyright © Classmethod, Inc. 1 Screen, 1 API call
  59. 59. Copyright © Classmethod, Inc. 1 Screen, 1 API call
  60. 60. Copyright © Classmethod, Inc. 1 Screen, 1 API call
  61. 61. Copyright © Classmethod, Inc. Web API 担当者は言いました。
  62. 62. Copyright © Classmethod, Inc. 「Ha?」
  63. 63. Copyright © Classmethod, Inc. あなたは続けます
  64. 64. Copyright © Classmethod, Inc. 1画面を表示するのに、何度も異なるAPIにアクセ スしなければならず、非効率ですし、画面を表示す るまでに時間もかかってしまい、ユーザーを待たせ てしまいます。これは良いユーザー体験とはいえま せん。何度もAPIへのアクセスを繰り返すことは、 速度の問題だけでなく、データの一部だけが表示さ れてしまうといった問題を引き起こす可能性もあり ます。したがってとにかくホーム画面で表示する情 報を1つに詰め込んだ "ホーム画面専用" APIを作 成し、それに1回アクセスするだけですべての情報 が取得できた方が確実に利便性が高いです。 詳しくは "Web API The Good Parts" をご覧ください。
  65. 65. Copyright © Classmethod, Inc. 「・・・なるほどですね」
  66. 66. Copyright © Classmethod, Inc. なるほどですね!
  67. 67. Copyright © Classmethod, Inc. その言葉を聞いてあなたは 実装に戻りました。
  68. 68. Copyright © Classmethod, Inc. すると、またまた新しいAPIを手 に入れることができました! これでまたまた実装への悪影響を 回避することができますね。
  69. 69. Copyright © Classmethod, Inc. こうして、 プロジェクトは順調に進み無事納 品することができたのでした。
  70. 70. Copyright © Classmethod, Inc.
  71. 71. Copyright © Classmethod, Inc. まとめ • Web API の知識は必須! • Web API The Good Parts を読もう! • 文句を言うのは簡単、改善案を提案 できる力を!

×