Upgrade to Pro — share decks privately, control downloads, hide ads and more …

サーバサイドエンジニアと効率よく開発するためにやっていること

 サーバサイドエンジニアと効率よく開発するためにやっていること

potatotips #36の発表資料です
https://potatotips.connpass.com/event/46832/

Shinichiro Oba

January 13, 2017
Tweet

More Decks by Shinichiro Oba

Other Decks in Programming

Transcript

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

    View Slide

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

    View Slide

  3. メルカリの状況

    View Slide

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

    View Slide

  5. 開発拠点
    5
    ! "
    #

    View Slide

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

    View Slide

  7. 効率的な開発のために

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  13. 開発者向け機能

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  17. 開発者向けメニュー
    17

    View Slide

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

    View Slide

  19. LLDB Pluginの活⽤

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. Charlesの活⽤

    View Slide

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

    View Slide

  28. Charlesの実⾏画⾯
    28

    View Slide

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

    View Slide

  30. Thanks!

    View Slide