potatotips #36の発表資料です https://potatotips.connpass.com/event/46832/
サーバサイドエンジニアと効率よく開発するためにやっていること⼤庭 慎⼀郎iOSエンジニア / メルカリ2017/1/13 potatotips #361
View Slide
⾃⼰紹介2⼤庭 慎⼀郎 ooba / bricklifeiOSエンジニア / 株式会社メルカリ-メルカリJP版の⽴ち上げ-メルカリUS版の⽴ち上げ-メルカリ アッテの⽴ち上げ-メルカリUK版の⽴ち上げ ← いまここ
メルカリの状況
メルカリのエンジニアの数4クライアントサイド(iOS)• 今⽉で7⼈になりました!サーバサイド• 60⼈くらい?? 正直何⼈いるかわからない…圧倒的にサーバサイドのほうが多い• サーバサイドエンジニアが開発しやすい環境がよい
開発拠点5! "#
3拠点ある問題点6エンジニアは各拠点に点在している• JPが⼀番多い各拠点間の時差が7〜9時間ある• 業務時間内でお互いに起きている時間が少ないやりとりの往復に時間がかかりすぎる• なるべく往復を少なくしたい
効率的な開発のために
効率的に開発するためにやっていること81. ⼿元ですぐにアプリを実⾏できる環境2. 開発者向け機能の拡充3. LLDB Pluginの活⽤4. Charlesの活⽤
⼿元ですぐにアプリを実⾏できるように
サーバサイドにアプリを使ってもらう⽅法101. DeployGateやTestFlightによる配布2. リポジトリからビルド
アプリの配布11開発環境アプリはDeployGateで配布• Enterprise• パスワード付きの匿名配布本番環境アプリはTestFlightも使う• プッシュ通知の確認などはTestFlight必須
リポジトリからビルド12チェックアウトしたらすぐに実⾏できる• CocoaPodsやCarthageをいれなくても、リポジトリをチェックアウトしてXcodeで開けばすぐに実⾏できる• git submodule or バイナリ or コードまるごと• CIも早くなったり
開発者向け機能
本番環境アプリと開発環境アプリ14本番環境アプリと開発環境アプリの違い• APIサーバなどの向き先• アイコンとデザイン• 開発者向け機能
本番環境アプリと開発環境アプリ15
開発者向けメニュー16開発版だけに⼊っている• 本体を振ると出てくるできること• サーバの切り替え• 内部状態の確認• 状態のリセットなど
開発者向けメニュー17
実装の仕⽅18#ifdef DEBUG- (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event{if (motion == UIEventSubtypeMotionShake) {// ։ൃऀ͚ϝχϡʔͷදࣔ}}#endif
LLDB Pluginの活⽤
LLDB Pluginによる出⼒整形20LLDB Pluginとは• デバッガに独⾃コマンドを作れる仕組みどう使っているか• APIのレスポンスが期待しているものと違うときなどに、サーバサイドエンジニアに通信内容を伝えるために使う
よく使っているLLDB Plugin その121NSArrayやNSDictionayをJSON⽂字列として出⼒
よく使っているLLDB Plugin その222NSURLRequestのインスタンスをcurlコマンドとして出⼒
jsonコマンドのコード23https://gist.github.com/bricklife/1f6bff179cf5bda5b99638afc25b248a
curlコマンドのコード24https://gist.github.com/bricklife/080533e6855c7aef2319baeac60d2b8e
LLDB Pluginの作り⽅25iOSエンジニアのための LLDB Plugin ⼊⾨http://dealforest.hatenablog.com/entry/2016/09/02/043048ポイント• Pythonで書く必要があるがPythonの知識はいらない• 実⾏部分はSwiftやObjective-Cで書ける
Charlesの活⽤
Charlesとは27• みんな⼤好きネットワークプロキシ・デバッグアプリ• HTTPS対応!
Charlesの実⾏画⾯28
Charlesでよくやること29ネットワーク通信の監視• ブレイクポイントも貼れるリクエストやレスポンスのダンプ• 正確な内容を知りたいときにレスポンスの書き換え• ⼀部を書き換えたり全部を差し替えたり• API側がまだ新仕様に対応していないときに
Thanks!