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

モバイルアプリを含む法⼈向けサービスの開発体制や開発⼿法について / Mobile application development at corporate services such as Sansan

Sansan
November 07, 2019

モバイルアプリを含む法⼈向けサービスの開発体制や開発⼿法について / Mobile application development at corporate services such as Sansan

■イベント
公立はこだて未来大学での講演

■登壇概要
タイトル:
モバイルアプリを含む法⼈向けサービスの開発体制や開発⼿法について

登壇者:
Sansan事業部 プロダクト開発部 栗⼭ 徹

▼Sansan Builders Box
https://buildersbox.corp-sansan.com/

Sansan

November 07, 2019
Tweet

More Decks by Sansan

Other Decks in Technology

Transcript

  1. 2 栗⼭ 徹 (Toru Kuriyama) 公⽴はこだて未来⼤学 情報アーキテクチャ学科卒 (2004年⼊学) 北海道出⾝ 卒業研究は松原研究室、学部1・2年時の担任は三上先⽣

    iOS / Android / Rust / ⾃作OS / CTF @kotetu Sansan株式会社 Sansan事業部 プロダクト開発部 iOS アプリケーション開発チーム Lead Engineer kotetuco
  2. - 栗⼭ (iOSアプリエンジニア) から⾒たSansan事業におけるモバイルアプ リケーション開発について、俯瞰的に話をします。 - モバイルアプリケーションの役割 - 開発組織 -

    モバイルアプリ開発の特徴 - ⽇々取り組んでいる課題 - 技術的な話だけでなく、ビジネスやマネジメント観点の話も含みます 本⽇のテーマ 4
  3. - 1社⽬ (6年くらい) - 受託開発 (某⼤⼿SIerの受託開発がメイン) > Windows / Androidメイン、たまにiOSやLinux上で動くJavaアプリ

    > 社内Windows Serverの管理 - 2社⽬ (Sansan、3年半ちょっと) - ⼤部分をiOSアプリエンジニアとして過ごす - ⼀時的にAndroid開発も担当 これまでの仕事遍歴 7
  4. - ⼊社当初はEight事業部に所属 - 3ヶ⽉後にSansan事業部へ - 特命でR&Dへ2ヶ⽉間出向していたことも - 1年半後にiOS開発を主管することに (採⽤の仕事も任されはじめる) -

    3年⽬(今年)からLead Engineer (LE) に - LEとは - チームリーダー的な役割 (開発 + 進捗管理, メンバーアサイン) - QCD (Quality Cost Delivery)に責任を持つ⽴場 Sansanでの仕事遍歴 8
  5. - プロダクトの改善に活かすために追っている各種指標 - 利⽤率 - DAU (Daily Active User) -

    顧客満⾜度 - NPS® (Net Promoter Score) SansanのKPI (Key Performance Indicator) 14 「NPS®をプロダクト改善に活かす」から引⽤ https://buildersbox.corp-sansan.com/entry/2019/08/06/113748
  6. - 営業・エグゼクティブ層 (役員など) - Sansanの主要ユーザ層 - 名刺交換や名刺を活⽤する機会が圧倒的に多い - 情報システム部⾨ (システム管理者)

    - Sansanを含めた社内システムの管理者 - 上記以外の職種 (⼈事やエンジニアなど) - ⼈脈の管理など ユーザー企業の主要なステークホルダー 15
  7. - 新コンセプトをさらに体現していく - スマホアプリならではの機能の訴求 - 位置情報など - システム管理者のことを考える - 社員に社有スマホをもっと活⽤してほしいがセキュリティも⼤事

    - 端末の利⽤を制限したい (アクセスするIPアドレスやログイン保持期間の制限) - 社内で使っている認証システム(Active Directoryなど)との連携 プロダクトとしてのSansanスマホアプリの課題 21
  8. - 総勢100名以上 - プロダクトマネージャー (PM) - デザイナー - エンジニア(Web, モバイル,

    インフラ) - 展開中のプロダクト - Webアプリ - スキャナアプリ - スマホアプリ (iOS / Android) Sansan事業部プロダクト開発部 23
  9. - PM 1名 - デザイナー 2名 - エンジニア - iOS

    5名 (3名, 2名のチーム) - Android 6名 (3名, 3名のチーム) - サーバーサイド (スマホアプリ⽤Web API) 3名 Sansanスマホアプリ開発チーム 24
  10. - モバイルアプリをリリースためにはストアで所定の⼿続きが必要 - 開発終了後、即リリースとはならない - App Store (iOSのアプリストア) でアプリをリリースするためにはストア 審査が必要

    - App Store (iOSのアプリストア) の審査期間は1〜2⽇ - Google Play (Androidのアプリストア) でもついにストア審査が開始 - 審査に落ちたら再審査が必要 (複数回落ちることも) 1. ストア審査 32
  11. - 特定のOSバージョンでしか発⽣しない不具合がありうる - 表⽰崩れや最悪の場合クラッシュすることも - サポートOSバージョンで⼀通りテストを⾏う - Sansan iOSアプリの場合 -

    9⽉中旬まで:iOS10, iOS11, iOS12 - 9⽉中旬以降:iOS10, iOS11, iOS12, iOS13 - 1OSバージョンにつきテスト⼯数5⽇の場合、単純計算で15⽇ → 20⽇に 参考) モバイルアプリのテスト 35
  12. - プロダクトの性質を踏まえ、事業部全体を巻き込む - OSバージョンごとのアプリの利⽤⽐率を⾒て判断する - サポートを終了可能な⽐率の閾値について合意をとる - ⼗分な猶予期間を設ける - Sansanの場合は最低半年以上の期間を設定

    - 法⼈向けサービスの場合は社有スマホユーザを考慮する - 社有スマホは特定機種の⼀括購⼊ - サポートを切ることで社有スマホの買い替えが必要になるケースもある 古いOSバージョンのサポートを終了するために 36
  13. - iOS, Android 共に、UIデザインのガイドラインがある - iOS : Human Interface Guidelines

    - Android : Material Design - なぜUIデザインガイドラインがあるのか? - ストアアプリ間でUIの統⼀感が無いとユーザーにとって使い勝⼿が悪い - プラットフォーム(Apple, Google)にとってもデメリット - 時にはUIガイドラインの「型」をあえて外すようなデザインにすることも - メジャーなアプリで「型」から外れたUIのアプリは割とある 3. User Interface (UI) 37
  14. - UIガイドラインに対する正しい知識を持つ (エンジニア・デザイナー双⽅) - ガイドラインにはないUIが提⽰された場合 - 実現⽅式を検討する - ⼯数や実装難易度・メンテナンス性を考慮した上で場合によっては必要か どうか交渉する

    - UIガイドラインから逸脱するからと⾔って何でも突っぱねるのは良くない - ただしやる場合はピンポイントでやる UIに関するデザイナーとの調整での注意点 39
  15. - iOS / Android 両対応しているモバイルアプリが多い - 両プラットフォームに対応するための組織体制を考える必要がある - 両プラットフォームのシェアは⽇本とグローバルで異なる -

    必要な開発⼈員が変わってくる - モバイルアプリエンジニアは転職市場で枯渇状態 - 開発⼈員が不⾜する場合も - そもそも⼗分な開発⼈員を確保できる会社の⽅が少ないかも 4. マルチプラットフォーム対応 40
  16. - Flutter, React Native, Xamarinなど - 同じコードでマルチプラットフォーム対応アプリを開発できる - メリットはあるものの、将来のプロダクト展開を⾒据えた⾒極めが重要 -

    クロスプラットフォーム開発フレームワークが向く場合 - プラットフォームに依存する機能要件が少ない場合 - iOS / Android両⽅の開発リソースを確保できない場合 クロスプラットフォーム開発⽤フレームワーク 43
  17. - クラッシュ数が急増していないかチェック - 特にリリース直後は重要 - ストアの管理 - 紹介⽂やスクリーンショットの更新 - 特にApp

    Store (iOS)は多い - Push通知⽤の証明書更新 (1年毎に更新が必要) - ストアリリース⽤の証明書更新(1年毎に更新が必要) - Developer Programの更新 - 開発で使うサービスのアカウント管理 主な運⽤作業 45
  18. - 表⽰(UI)処理 - 通信処理 - (RESTful APIを使う場合は) JSONやXMLのパース処理 - アプリ内キャッシュ

    - Push通知 - カメラなどの各種センサーを使った処理 モバイルアプリの主な処理 48
  19. - メインスレッドはUIの描画を⾏うスレッドとして使われる(UIスレッド) - UIスレッドをブロックしないように気をつけなけばならない - AndroidではUIスレッドを⻑時間ブロックすると警告ダイアログが出る (ANR) - UIスレッド以外で描画処理を⾏うとアプリがクラッシュする -

    通信処理や重い処理はメインスレッドとは別スレッドで実⾏する - ⾮同期処理の考慮が必要 - プラットフォーム毎に⾮同期処理⽤フレームワークがある - Reactive Extension系のライブラリ(RxSwift, RxJava)を使うことも多い モバイルアプリとスレッド 49
  20. - チームの⼈数や習熟度 - 複数⼈で同⼀のコードベースを変更するのかどうか? - 使⽤する設計パターンに対する理解度 - プロダクトのライフサイクル - ⻑期的にメンテナンスしていくのかどうか?

    - 頻繁に機能追加するかどうか - 変化に強い作りにする必要があるかどうか? モバイルアプリの設計で考慮すべきポイント 書籍「iOSアプリ設計パターン⼊⾨」から⼀部引⽤ https://peaks.cc/books/iOS_architecture 52
  21. - GUIアーキテクチャ - UIの処理とシステム本来の関⼼ (ドメイン) との間のレイヤー分けを主題にし た設計パターン - システムアーキテクチャ -

    UI部分だけにとどまらない、システム全体を主題にした設計パターン - 画⾯遷移に関するアーキテクチャ 設計パターンの種類 書籍「iOSアプリ設計パターン⼊⾨」から⼀部引⽤ https://peaks.cc/books/iOS_architecture 53
  22. - MVC (Model – View – Controller) - MVP (Model

    – View – Presenter) - MVVM (Model – View – View Model) - Flux, Redux 主な設計パターン(GUIアーキテクチャ) 55 書籍「iOSアプリ設計パターン⼊⾨」から引⽤ https://peaks.cc/books/iOS_architecture
  23. - Layered Architecture - Hexagonal Architecture - Onion Architecture -

    Clean Architecture 主な設計パターン(システムアーキテクチャ) 56 書籍「iOSアプリ設計パターン⼊⾨」から引⽤ https://peaks.cc/books/iOS_architecture
  24. - 開発スピードの向上 - 設計の改善 - ⽇常業務の効率化や⾃動化 - 信頼性の向上 - ⾃動テストの充実とQAチームとの連携

    - 開発組織の拡⼤への対応 - 振り返りを軸としたチームビルディング活動 - ドキュメントやマニュアル類の充実 モバイルアプリチームが向き合っていること 59
  25. - GUIアーキテクチャ:MVC, MVP - システムアーキテクチャ:Layered Architecture (APIなどバックエンド処 理と表⽰処理間の責務を分割) - ビジネスロジックはC(Controller)側で実装するか共通処理クラスで処理

    - 共通処理クラスはstaticメソッドが多くテストを書くのが難しかった - CやV(View) にロジックが⼊り込んで肥⼤化したクラスも - 機能追加や変更に弱かった Sansan iOS アプリの設計 (これまで) 60
  26. - VIPER (View, Interactor, Presenter, Entity, Router) - GUIアーキテクチャ:MVP (or

    MVVM) - システムアーキテクチャ:Clean Architecture - 画⾯遷移アーキテクチャ:Router - 画⾯遷移処理をViewからRouterへ集約 - InteractorやEntityを導⼊して具体的なフレームワークに依存しない形に - フレームワークの変更に強くなる - テストを書きやすくする 現在⽬指している設計 61
  27. - ストア⽤アプリのビルドを⾃動化 - ヒューマンエラー防⽌の観点からも⾃動化の効果は⼤きい - CI/CD サービスを使う (SansanではBitriseというサービスを使っている) - コードレビューの効率化

    - Lint (ソースコード静的解析) の利⽤ - テスト⽤アプリの⾃動配信 - CI/CDでビルドしたテスト⽤アプリをアプリ配信サービスを使って配信 - Firebase App Distribution, DeployGateなど ⽇常業務の効率化や⾃動化 64
  28. - ビジネスロジックから順次対応している途上 - ⾃動テスト(テストケースを書くこと) の効能 - リファクタリングする際の品質の担保として機能 - 良い設計のコードはテストが書きやすい -

    テストを書くことでコードがキレイになる - QAチームによる結合テスト - 少ない開発リソースを効率的に使える - 専任のスタッフがテストすることにより⾼度なバグ検知が可能に ⾃動テストの拡充とQAチームとの連携 65
  29. - 定期的振り返りを⾏う - Sansanスマホアプリ開発チームは週1回振り返りを実施 - チームとしての改善施策を⽴てて、次の1週間で実施していく - 振り返りに使うフレームワーク - GKPT

    (Good Keep Problem Try) - YWT (Y:やったこと W:わかったこと T:次にやること) 振り返りを軸としたチームビルディング活動 66
  30. - ⼈数が増えると効率的な知識の共有が不可⽋ - 状況によってはiOS / Androidで開発着⼿時期がずれることも - 形式知 (ドキュメント) を有効活⽤する

    - 開発案件着⼿時に仕様をドキュメントに残す - メンバー受け⼊れの増加への対応 - 職種毎(モバイル、サーバーサイドなど)に受け⼊れ⼿順を整備する ドキュメントやマニュアル類の充実 68
  31. - ⾃分が関わっているビジネスの姿を知ること - ビジネスや組織規模に応じて常に体制はブラッシュアップされるべき - 法⼈向けサービスはエンドユーザだけでなくシステム管理者などのステークホ ルダーのことも考えないといけない - ⾃分が関わっている組織の姿を知ること -

    ⼈数や⼈員の傾向によって取るべき施策が変わってくる - モバイルアプリ開発特有の注意事項があること - ストアの存在やモバイル特有の技術課題があることを考慮して開発を進める 今⽇伝えたかったこと 70