Slide 1

Slide 1 text

サーバサイドエンジニアと 効率よく開発するために やっていること ⼤庭 慎⼀郎 iOSエンジニア / メルカリ 2017/1/13 potatotips #36 1

Slide 2

Slide 2 text

⾃⼰紹介 2 ⼤庭 慎⼀郎 ooba / bricklife iOSエンジニア / 株式会社メルカリ -メルカリJP版の⽴ち上げ -メルカリUS版の⽴ち上げ -メルカリ アッテの⽴ち上げ -メルカリUK版の⽴ち上げ ← いまここ

Slide 3

Slide 3 text

メルカリの状況

Slide 4

Slide 4 text

メルカリのエンジニアの数 4 クライアントサイド(iOS) • 今⽉で7⼈になりました! サーバサイド • 60⼈くらい?? 正直何⼈いるかわからない… 圧倒的にサーバサイドのほうが多い • サーバサイドエンジニアが開発しやすい環境がよい

Slide 5

Slide 5 text

開発拠点 5 ! " #

Slide 6

Slide 6 text

3拠点ある問題点 6 エンジニアは各拠点に点在している • JPが⼀番多い 各拠点間の時差が7〜9時間ある • 業務時間内でお互いに起きている時間が少ない やりとりの往復に時間がかかりすぎる • なるべく往復を少なくしたい

Slide 7

Slide 7 text

効率的な開発のために

Slide 8

Slide 8 text

効率的に開発するためにやっていること 8 1. ⼿元ですぐにアプリを実⾏できる環境 2. 開発者向け機能の拡充 3. LLDB Pluginの活⽤ 4. Charlesの活⽤

Slide 9

Slide 9 text

⼿元ですぐにアプリ を実⾏できるように

Slide 10

Slide 10 text

サーバサイドにアプリを使ってもらう⽅法 10 1. DeployGateやTestFlightによる配布 2. リポジトリからビルド

Slide 11

Slide 11 text

アプリの配布 11 開発環境アプリはDeployGateで配布 • Enterprise • パスワード付きの匿名配布 本番環境アプリはTestFlightも使う • プッシュ通知の確認などはTestFlight必須

Slide 12

Slide 12 text

リポジトリからビルド 12 チェックアウトしたらすぐに実⾏できる • CocoaPodsやCarthageをいれなくても、リポジトリを チェックアウトしてXcodeで開けばすぐに実⾏できる • git submodule or バイナリ or コードまるごと • CIも早くなったり

Slide 13

Slide 13 text

開発者向け機能

Slide 14

Slide 14 text

本番環境アプリと開発環境アプリ 14 本番環境アプリと開発環境アプリの違い • APIサーバなどの向き先 • アイコンとデザイン • 開発者向け機能

Slide 15

Slide 15 text

本番環境アプリと開発環境アプリ 15

Slide 16

Slide 16 text

開発者向けメニュー 16 開発版だけに⼊っている • 本体を振ると出てくる できること • サーバの切り替え • 内部状態の確認 • 状態のリセットなど

Slide 17

Slide 17 text

開発者向けメニュー 17

Slide 18

Slide 18 text

実装の仕⽅ 18 #ifdef DEBUG - (void)motionBegan:(UIEventSubtype)motion withEvent:(UIEvent *)event { if (motion == UIEventSubtypeMotionShake) { // ։ൃऀ޲͚ϝχϡʔͷදࣔ } } #endif

Slide 19

Slide 19 text

LLDB Pluginの活⽤

Slide 20

Slide 20 text

LLDB Pluginによる出⼒整形 20 LLDB Pluginとは • デバッガに独⾃コマンドを作れる仕組み どう使っているか • APIのレスポンスが期待しているものと違うときなどに、 サーバサイドエンジニアに通信内容を伝えるために使う

Slide 21

Slide 21 text

よく使っているLLDB Plugin その1 21 NSArrayやNSDictionayをJSON⽂字列と して出⼒

Slide 22

Slide 22 text

よく使っているLLDB Plugin その2 22 NSURLRequestのインスタンスをcurlコマ ンドとして出⼒

Slide 23

Slide 23 text

jsonコマンドのコード 23 https://gist.github.com/bricklife/1f6bff179cf5bda5b99638afc25b248a

Slide 24

Slide 24 text

curlコマンドのコード 24 https://gist.github.com/bricklife/080533e6855c7aef2319baeac60d2b8e

Slide 25

Slide 25 text

LLDB Pluginの作り⽅ 25 iOSエンジニアのための LLDB Plugin ⼊⾨ http://dealforest.hatenablog.com/entry/ 2016/09/02/043048 ポイント • Pythonで書く必要があるがPythonの知識はいらない • 実⾏部分はSwiftやObjective-Cで書ける

Slide 26

Slide 26 text

Charlesの活⽤

Slide 27

Slide 27 text

Charlesとは 27 • みんな⼤好きネットワークプロキシ・デバッグアプリ • HTTPS対応!

Slide 28

Slide 28 text

Charlesの実⾏画⾯ 28

Slide 29

Slide 29 text

Charlesでよくやること 29 ネットワーク通信の監視 • ブレイクポイントも貼れる リクエストやレスポンスのダンプ • 正確な内容を知りたいときに レスポンスの書き換え • ⼀部を書き換えたり全部を差し替えたり • API側がまだ新仕様に対応していないときに

Slide 30

Slide 30 text

Thanks!