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