Skip to content

Sansan Builders Box 2019

   

Sansanの技術カンファレンスです。 2トラックのサイレントセッションで、受付時にレシーバーが配られました。 自分はサーバーレスが気になったので、トラック1の方に陣取りました。

https://sansan.connpass.com/event/138134/

14:30-15:00 【オープニング】 CTO 藤倉 成太、VP of Engineering 宍倉 功一

  • 社員数550人中、ものづくに理に関わっているのが220名
  • Sansanは何を目指しているのか
    • 世界中の名刺をすべてデジタル化
    • ビジネスパーソンの出会いのデータベース
  • この1年の振り返り
    • 新規事業への取り組み
      • いくつか立ち上げ中
    • グローバルへの取り組み
      • 海外エンジニアの採用
      • 海外展開を見据えて
      • 英語だけでも仕事がまわせる環境
  • これからの挑戦
    • 組織を強くしていく
      • 新規事業、事業の加速
      • 事業の成果にクリエイターが向き合う
      • 成果の出しやすい環境
      • 協働・変容
    • 研究のネタを議論する
      • R&Dが事業をリードする

15:10-15:35 「Sansanアーキテクチャ史」荒川 聖悟

  • sansanは12年間の歴史がある

  • C#

  • v1

    • WinForms(UI), BLL(busineslogic layer), DAL(DataAccessLayer)
    • DALはSQLを手作業で組み立てている
    • Pros: とにかくシンプル、画面と業務ロジックの結びつきが明確
    • Cons: 画面駆動アーキテクチャになりがち、各レイヤの責務が曖昧
  • v2

    • Service, DomainModel, Repository
    • DDDっぽい雰囲気
    • ORマッパーを自作した
      • リポジトリ層が超肥大化
    • 課題
      • リポジトリの肥大化によりサービス層の実装が困難に
      • 共通化の認識を共通化させることができなかった
      • FE固有のロジックが共通されたりしていた
      • パフォーマンスが出ない
        • クエリが多い&謎
    • 画面駆動からは脱却できた
  • V3

    • UI, App, Domain, Infra
    • UI層(WEB, API)にQueryServiceを置く(SELECT文のみ)
    • ORマッパーは使わず、SQLを直書きに変更
    • シンプルと共通化のバランスが取れている
    • 無駄な抽象化は避けている
    • 課題
      • モジュールの場所や実装の悩み
  • まとめ

    • 時代とともに流行のアーキテクチャは移り変わる
    • アーキテクチャの浸透は想像以上に難しい
    • プラットフォームとアプリケーションにあったアーキテクチャを選ぶ

15:40-16:05 「Eightのフロントエンド〜改善の歴史と今後の展望〜」青山 修平

  • バックエンドはRails
  • 2012/2 jQuery UI
  • 2013/4 Backbone.js + jQuery UI + CoffeeScript
  • 2015/12 React + Redux + ES6
  • 課題と改善
    • UI
      • モノリシックCSS
        • 影響範囲がわからず、ちょっとした修正ができなくなる
          • →CSSのコンポーネント化で解消
      • バラバラなスタイル、コンポーネント
        • 同じようなコンポーネントが微妙に違ってあちこちに点在
          • →スタイルガイドを作成して改善
      • 新スタイルガイド刷新中
        • デザイナを巻き込んですすめる
    • 煩雑な提携コード作成
      • OpenAPI(Swagger)採用
      • 194個
      • →swagger-client, normalizr を利用してコードを生成する

16:15-16:40 「GCP サーバーレス サービス × 少数チームで新たなデータ化サービスを立ち上げる」木田 悠一郎

  • 名刺の高精度なデータ化を支えるノウハウ
    • 機械の力と人の力を合わせる
  • GCPサーバーレスサービス紹介
    • GAE, CFirestore, CTasks, Sd, CStrage, CFunction
    • GAE: スケールアウト・デプロイが高速
    • FIrestore: NoSQLデータストア、オートスケーリング
    • Tasks: 処理を非同期で実行できるタスクキューサービス
    • Stackdriver: ロギング、エラー通知、モニタリングで使用
  • アーキテクチャ
    • 導入の背景
      • 運用負荷を下げたい
      • マルチクラウドを推進
      • チャレンジ
        • 本気で使ってみることで、メリデメを理解する
  • メリット・注意点・課題
    • アプリケーションのコードに集中できる
    • サーバー管理不要
    • コスト最適化
    • 限られたリソースでもスピード感を持って開発できる
    • GAE環境
      • 可能な限りスタンダード環境を使う(フレキシブル環境ではなく)
      • AWS環境とVPN接続したいとき
      • 特定のライブラリを使いたいとき
        • いまはCloudRunで代用できる
    • AppEngineファイアウォール
      • グローバルサービスがブロックされて住まう
    • FirestoreのDB設計
      • count関数はない
      • 分散カウンタを使う
  • 課題
    • 開発環境
      • Firestore: 1プロジェクトに1DB
      • Tasks: ローカルに向けられない
    • 動作確認
      • HerokuReview
    • 分析計クエリ
    • エラー通知
      • タイムラグ・カスタマイズ
  • Q&A
    • AWSとGCPのサーバーレスの違い
      • マネージド具合はCGPのほうが心地よい
      • GAEの使い勝手が良い

16:45-17:10 「新規事業の開発メンバーが1人→n人に増えるのを支えた技術」加藤 耕太

  • データ不正更新事件
    • id:1のデータを編集したあとにid:2を編集すると、意図せずid:1のデータも変更されてしまう
    • 3000件を目視確認
    • 問題が起きると、調査対応に莫大な工数がかかる
    • 安定したインフラで素早く動け(Facebookのモットーより)
  • 対策
    • コードフォーマッターの導入
      • 融通がきかないルールもそのうちなれる
      • リポジトリ一括フォーマットはマージのタイムングが難しいので、なるべく初期に導入する
    • CIの導入
      • Cloud Build
      • とりあえずビルドだけでもやっておくと安心
    • 静的型付け言語(Kotlin)への移行
      • 言語選定条件:GAEスタンダード第2世代のランタイム&静的型付け言語
      • Pythonからの段階的な移行
        • コアドメインの機能をKotlin化して切り出し
        • BFF部分を徐々に移行
    • テストを書きやすい環境づくり
      • コントローラーのテストを気軽に書きたい
      • テストクラスごとに異なるスキーマに接続して並列実行
        • CI環境ではコミットIDごとにスキーマを分ける(並列ビルド対策)
      • テストがあると安心してリファクタリングできる
    • GAEのデプロイ自動化
      • リリース作業に時間がかかる
      • トラフィック移行は手動で実行する
      • フレキシブル環境を自動デプロイする場合は要注意
        • トラフィックを受け取らなくてもデフォルト2インスタンスが起動し続ける

17:25-17:50 「プロダクトをどう磨いていくか」片芝 亮友

  • Eight Carrier Design
  • ダイレクトアプローチとリファラル両輪
  • 開発するにあたっての悩み
    • 自分が想定ユーザーではないので、何がほしいかわからない
    • ドメイン(人事部)知識が不可欠
    • 意思決定者が多層的で、どう価値が伝わるかわからない
    • 顧客によって重みが違う
  • シナリオ:価値、ストーリー
    • 営業
      • シナリオの言語化
      • 価値の検証
    • 事業進捗ミーティング
      • 事業的な優先度
      • 現場の閑職
      • 提案方法の変化
  • ユーザビリティ:
    • ユーザー会
      • 実際の使い方
      • 不具合・改善要望
    • 顧客の声アーカイブ
      • 営業時の違和感
      • 顧客からの要望
      • 喜びの声
    • 自部門採用
      • ユースケースの確認
      • 不具合・改善箇所の確認
  • どう整理するか
    • プロダクトレビュー
      • シナリオの精査
      • 施策・改善の優先度判断
  • まとめ
    • ビジネス側へ以下に近づくか:聴く、観る、やってみる
    • 定期的なサイクルを作り、習慣化する
    • 役割と主導を決め、巻き込む
    • プロダクトの洗練と合意形成を両立する

17:55-18:20 「チームづくりから組織づくりへ〜事業成長に立ち向かうEMの戦略と戦術」谷内 真裕

  • 背景
    • いまは想像以上に挑戦的なフェーズ
  • 開発組織の今まで
    • 機能ドメイン別チーム体制
      • PM, Designer, TL, Engineer
      • 機能ドメインの知識理解を深める
      • 機能ドメイン担当を明確化
      • 事業拡大のスピードに追いつけなくなってきた
        • 全体の優先度順に開発できない
        • 全体に影響する技術的に意思決定が困難
    • 目的別チーム体制
      • データドリブン
      • 解約率と利用率の相関仮説→利用率(KPI)を追う
      • 機能ドメインに関わらず数値を追う
      • Engineering ManagerがUnitをマネージする
      • 想像以上に複雑で強大なものと戦うことに
        • 利用率の分解が困難で手応えを感じられず
        • 顧客の担当者を巻き込む戦いと言える
        • EMとはなんだろう
          • 多すぎる変数(技術・組織・人)
          • 雲を掴むような日々
  • 開発組織のこれから
    • 10倍にスケールする組織へ
      • 慣れ親しんだやり方を捨て、変化を恐れず挑戦していく
    • 体制の再構築
      • 開発グループをプロダクトの粒度に
      • 開発チームはエンジニアだけで構成
      • PM&Designersは開発グループをまたいで連携
    • 開発プロセスの再構築
      • バックログメンテ(PM)
    • プロダクトマネジメント
      • プロダクトバックログ一本化
      • 短期・中期・長期目線でプロダクトを育てる
      • バックログアイテムをシャープにする
        • ソリューションレビューを通ってから開発着手
      • PdMはプロダクトに与える価値に責任を持つ
    • プロジェクトマネジメント
      • プロジェクトマネジメントの対象となるルールを決める
        • 小さなものや機能改善は対象外にする
      • PdMはプロジェクトマネジメントもする
    • 組織マネジメント
      • 組織デザイングループの立ち上げ
        • 組織戦略を立て、戦術の実行と調整を行う部門内人事
        • 部内の育成・評価・環境・採用
      • 育成・評価
        • キャリアマネージャー制度
          • チーム横断で担当がつく
          • 育成の主担当を明確化
    • 数字に向き合う
      • プロダクト
        • APM, NPS, データ分析基盤
      • 組織
        • 部で育成。評価制度を作り、数字での運用を試みる
        • 部で背採用計画を建てる
  • 事業と組織の成長に立ち向かうために
    • リーダーとメンバーの心理的柔軟性
      • Unlearn(学びほぐし)
      • 心理的柔軟性が ちーmの成果を後押しする
      • 思考と間表を分けて受け入れる
      • 今にフォーカスする
  • この組織、故障かな?とおもったら
    • 群盲象を評す
      • 責任が異なるので見え方と関心が番うだけ
      • 知ろうとする行動自体が組織を良くする
    • ハンロンの剃刀
      • 意図せず伝わっていないことがほとんど
      • 伝達ができていないだけ
  • 学んだこと
    • 自分とうまく付き合う
    • 最大の関心事は人それぞれ
    • 一人で頑張ってはいけない

18:30-18:55 【クロージング】 「明日の当たり前を作る」CPO 大津 裕史

  • 消費者に、何がほしいかを聞いてそれを与えるだけではいけない 完成する頃には、彼らは新しいものを欲しがる(Steve Jobs)
  • 顧客の要望の先を作る
  • 明日の当たり前を作る
  • 2種類のワクワク
    • どこでもドア
      • 強烈で分かりやすい
      • 明日が遠い
    • ショートカットキー
      • 適度でわかる人にはわかる
      • 明日が近い

19:00-20:30 【懇親会】 Builders Night

感想

  • 合意形成、役割間の連携が大事である
  • お互いに同じ方向を向いて、決めながらすすめる