読者です 読者をやめる 読者になる 読者になる

Consumer Service Engineer MeetUp Vol.1 ~iOS編~の参加メモ

Consumer Service Engineer MeetUp Vol.1 ~iOS編~ - dots.

コンシューマ向けのWEBサービス(アプリ)の企画・開発・運営をしている会社によるエンジニア向けの講演、パネルディスカッション、懇親会を含めたMeetUpです!

に参加してきたのでメモを晒しておきます。
※その場で一気に書いてるので、誤字脱字はあるかも。

「禁断の開発話」 ヴァズ株式会社 清田氏

  • SnapDishについて
    • 料理好きのお料理SNS
    • 開発から含めると3年で、ユーザー数は50万
  • 開発環境について
    • vim&Xcodeのハイブリッド
    • Build settings
      • マクロでDEVとかSTGに切り替えてる
    • ARC&非ARCハイブリッド
      • ARCにしたいが本音。Storyboardに移行できれば願望がある
  • テストとデバッグ
    • InstrumentsのLeaksとAutomationを利用
    • CrittercismとCrashlytics
    • A/B Testing(androidでやってる)
  • 開発スタイル
    • Github-flowとGitflowを使い分け
    • RedmineとBacklogsを利用
    • メモはとりまくる
    • Scopeベース
      • KPIに直接関係ないUXや機能拡張の長めの開発
    • KPIベース
      • KPIがあるので、その施策をイシュー単位で潰していくパターン
  • リリースサイクル
    • KPIベース 1-2週間
    • Scopeベース 2-4週間
  • サポート
    • zendeskを使ってエンジニア当番制
  • 実際の開発
    • 構成署(設計画面)を元に開発
    • 紙を使って話し合い
  • パッケージ配信
    • Testfightを利用
  • アクセス解析
    • GA、スクリーンビューやイベントを多様
    • サーバーサイドのロギングも多様

「Wantedlyを支える技術と開発フロー」ウォンテッドリー株式会社 川崎氏

  • ウォンテッドリーのCTOで、社員第1号
  • 開発フロー紹介
  • プロトタイピング
  • 開発
    • iOS
      • フルネイティブでWebviewなし
      • 定番のCocoaPodsを活用
      • StoryboardとContainerを多用
    • APIサーバー側
      • Rails4でJSONAPIを用意
      • Webと同じコードベース
      • Webと同様にHerokuで運用
    • インフラ
      • AWSとかCloudFrontやS3、PostgreSQL使ってる(図なので、文字に書き起こすのはしんどい)
  • CocoaPodsで管理するライブラリも事前に決めている
  • コード管理
    • 初期はAPIサーバーとiOSのコードを単一のレポジトリ
      • PullRequestがひとつになる
      • レビューしやすい&mergeのタイミングがある
      • クライアントとサーバーの担当が分かれてないので、一つのほうが見やすい
    • リリース後にレポジトリ分割
      • アプリのAPIサーバーのリリースサイクルの違い
    • コーディングスタイルガイドをあわせる
  • テスト
    • Rails
      • Continuas Integration
      • werckerというCIサービス
      • masterは常にdeployしてる
    • iOS
      • ユーザーテストをしっかりやる
      • 本番と別にテスト用のQAサーバーを用意
      • BuildSettingでまとめ

UICollectionViewを使った商品一覧UIの改善(BUYMAアプリ) 株式会社エニグモ 大川氏

  • アプリコンセプト
    • 趣味のあった商品の出会い
    • 好きな商品を気軽にチェックできる
    • 旬な商品を把握できる
    • 商品をリアルに感じさせるUI(Webと同じだと仕方ないので)
  • リリースして、フィードバック
    • Twitterエゴサーチするとよい反応
    • アプリにフェードバック集める機能もある
    • 商品を揃えてるので、同じ絵が続くのでしんどい
    • 大きな画像を使ってるので、1つの商品しか見れない場合がある
    • その他画像が見にくいとか画像がなんとかとかとりあえず画像がだめという感じになった。
  • 改善
    • テーブルレイアウトとグリッドレイアウトの2パターンを用意
    • VITableViewとUIConllectionViewをのハイブリッド
    • content offsetを同期させて切り替えるようにする
  • 改善した結果
    • 問題はないが、アイテムがどこに行ったかという、キュー(手がかり)がない
    • 2つのViewを作りこむ必要があるのでちょっと…
  • その結果
    • UICollectionViewのCollectionViewLayoutを使って解決した(よくわからんかったがデモがすげぇわかりやすかった)
    • テーブルレイアウトとグリッドレイアウトをCollectionVeiwで切り替えるっぽい
  • その他
    • Reveal Appというアプリがとてもよい
      • レイアウト周りで使える
  • まとめ
    • APIとの戦いとりあえず、WWDCセッションビデオ見るのが重要
    • 困ったら基本に戻る/発送を変えてみる

「Web APIを利用するiOSアプリのテスト技法株式会社はてな 加藤氏

  • id:cockscomb
  • webAPI
    • JSON
    • RESTまたはApp専用
    • APIバージョン
  • 何をテストするか
    • 期待通りのHTTPRequestが発行される
    • URL(ホストやパス、クエリ)、Http method,header,body
    • 様々なHttpResponseに対するふるまい
  • OHHTTpStubs
    • HTTPの通信をstubする
    • NSURLProtocolを利用している
  • NLTHTTPStubServer
    • アプリの内部でサーバーを動かす
    • CocoaHTTPServerを利用
    • http://localhost:12345 がデフォルト
    • 実際のサーバーのように振る舞う
    • HTTP bodyの様子を見ることができる
    • エラーは発生させられない(ネットワークエラーとか無理)
    • HTTP requestは一部使えない
  • テストのメリット
    • 自由なHTTPresponceが作れる
    • 実際にサーバーにrequestしなくいてよい
    • サーバーサイドの実装を待つ必要がない
    • サーバーサイドの変更を事前に試せる
    • いきなり壊れるのを防げる

「アンサーのグロースハックと開発手法」株式会社nanapi 小島氏

  • Twitter:kozyty
  • アンサーについて
    • 今、8人で開発
    • 限りなくフラットなチーム
  • アンサーの場合
    • 極力MTGを減らす
    • その代わり、MTGは全員参加
    • あさかい、ゆうかいはタスク進捗確認・情報共有
    • チャットでも直接ガンガン
    • 議事録やメモはQittaなどでシェア
  • ユーザーテスト
    • UIscopeを利用
    • 少しリテラシー高めだが、サービス初期はやるべき
    • 気になった結果だけを付箋なのどに書き出す
    • PMF(PdoductMarketFit)の向上に役立てる
  • 開発初期について
    • ユーザーヒアリング
    • 社内アルバイトスタッフさんに強力してもらう
  • PMFを40%以上獲得するために
    • Nの要素はあるか(スケーラブルポイント)
    • ブレないためにもステータスメントの共有必須
    • スケーラブルポイントがあるかどうかを念頭に
    • ROIドリブンで要件プライオリティを決める
    • PDCAサイクルを絶対に回す
  • マネジメント対応版のアプリ
    • 運用に便利な機能を備えたアプリを提供
    • 複アカ機能
    • 接続環境の選択
    • KPI見れるとか
  • 開発環境
    • DebugとReleaseのみ
    • TestFlightを利用
    • JenkinsなどのCIによる配布はやめた
  • 監視・解析
    • kibana3でログ監視
    • elasticsearch
    • NewRelic
    • 非エンジニアも見る見る
  • グロースハックやってる?
    • ミッション
    • 細かな改善の積み重ねでユーザー体験を最大化していく
    • ダイアログ表示、開発フロー、
  • 分析
    • 実行する前でもある程度わかる
    • 分析結果によっては仮説を変更する必要がある
    • 1%の改善に気づくための監視・解析環境は必須条件
  • 削除人ボランティア募集
    • 楽しく安全に使ってもらうために
    • ガイドラインに沿わない投稿を監視
    • 削除人というロイヤリティを得るだけ
    • 募集したところ、かなりの数の応募があった
  • 失敗体験は?
    • 打率的には2割ぐらい
  • まとめ
    • 小さなことをコツコツと
    • プレないステータスメントの共有
    • ROI観点でのプライオリティの設定
    • 最小単位での検証を行う
    • 神速PDCA

「グロースハックにおけるiOSアプリのリリースサイクル最適化について」株式会社マインドパレット 小林氏

  • Twitter:yuji_nano
  • Snapeeeという女性向け写真サービス
  • 改善サイクルの高速化
  • iOSアプリにたちはだかる問題
    • 申請から通過まで時間がかかる
    • リジェクトされることがある
  • iOSAndroidで異なる仮設検証を行う
    • 同じことをやるのは非効率
    • それぞれ効果があったものだけを移植する
  • WebViewを使う
    • メリット
      • アプリの申請なしでも仮設検証が回せる
    • デメリット
      • 初期実装が結構たいへん
      • 専任の開発が必要なことが多い
  • デバッグ用の機能を作りこんで、テストを効率化する
    • 設定変更だけでデバッグできるようにする(デバッグルームと呼んでる)
      • 国コード、言語コードの切り替え
      • 接続先のサーバー切り替え
      • チュートリアルを何度も表示
      • 自動ログインの無効化
      • アプリバージョン切り替え
    • エラーの内容をフィードバックできるようにする
    • ギブアップ宣言の導入
      • つづけても意味無いような仮説検証は早めに見切る
      • 仕組み化することで、「効果がないことに薄々きづいてるけどやめられない」ことをなくす
    • がっつりテストする前に申請する
      • 開発した箇所を中心にひと通りテスト
      • Testflightでチームメンバーに配信
      • 申請出す
      • ここでガッツリテスト
      • 申請OK
  • 毎週申請することに意味がある?
    • 細かなアップデートを目的にしてはいけない
      • アップデートのこういそのものによる一時的なアクティブ増は長続きしない
    • 勇気を出して、手を動かすのをやめましょう
      • 最低限作りこむと中途半端に作りこむは違う
  • Garbage in garbage out
  • 意識しよう
    • グロースハックは何を目的にしているのか
    • 正解に早くたどり着くため
  • まとめ
    • リリースサイクルの正解はない

まとめ