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

水産業ドメイン可視化と実装のコツ〜釣って捌いて食べてみる〜

 水産業ドメイン可視化と実装のコツ〜釣って捌いて食べてみる〜

水産業の流通を変えるスタートアップとして、
未知の業務(ドメイン)を理解し、一つの共通理解として抽象化したモデルを作り、プロダクト内に実装し、運用してきました。
その中で見えてきたコツ、考え方を共有できればと思います。

Sankyo Toshio

April 27, 2023
Tweet

More Decks by Sankyo Toshio

Other Decks in Technology

Transcript

  1. 水産業ドメイン可視化と実装のコツ
    〜釣って捌いて食べてみる〜
    株式会社ウーオ PM 三京俊雄

    View full-size slide

  2. 自己紹介
    三京俊雄(さんきょう としお)/ 3to_day
    2020年にウーオに2人目のエンジニアとして入社
    現在はPM兼エンジニア
    (PM:8割, エンジニアリング:2割)
    UUUOで魚の捌き方習得中
    最近はサワラにハマっている

    View full-size slide

  3. 本日お話しすること
    水産業の流通を変えるスタートアップとして、
    未知の業務(ドメイン)を理解し、一つの共通理解として抽象化したモデルを作
    り、プロダクト内に実装し、運用してきました。
    その中で見えてきたコツ、考え方を共有できればと思います。

    View full-size slide

  4. アジェンダ
    ● UUUOとは(何をしているか)
    ● UUUOのプロダクトチームの特徴
    ● 水産業ドメインの一例
    ● ドメイン可視化と実装のコツ
    1. ドメインをモデルにするときのポイント(釣りにでかける)
    2. モデルを実装にするポイント(さばく)
    3. 作ったモデルをワークさせる(食べてみる)
    ● まとめとこれから

    View full-size slide

  5. UUUOとは(何をしているか)

    View full-size slide

  6. UUUOプロダクトチームの特徴

    View full-size slide

  7. ● バックエンド、フロントエンド、インフラの境界が薄い
    ○ インフラはほぼバックエンドで兼任
    ● ユーザーヒアリングを重視して検証サイクルを素早く回す
    ● 施策ごとにオーナーを立てて推進
    UUUOプロダクトチームの特徴
    FrontEnd BackEnd
    UUUO
    Infra
    atohama
    海外
    飲食店
    買付依頼 決済
    全体最適
    ログイン
    産地

    View full-size slide

  8. ● バックエンド
    ○ Ruby on Rails
    ○ Heroku
    ○ Postgres
    ○ Firebase
    ○ GCP
    ○ Sentry
    ○ Terraform
    ● フロントエンド
    ○ Flutter Mobile
    ○ Flutter Web
    ○ React
    環境周りなど

    View full-size slide

  9. 水産業のドメインの一例
    水産物流の例

    View full-size slide

  10. A: 市場間を定期で運行している市場便で輸送され、その後スーパーに配送されます
    ○ 卸売市場間をつなぐ物流網のこと
    ○ 大ロット一括輸送のためコストが抑えられる
    ○ 穴あき発泡(氷が溶けて水びだしにならないよう)を積載可能
    水産業のドメインの一例
    水産物流の例
    Q: 産地から食卓に並ぶまでどうやって輸送されている?

    View full-size slide

  11. 一般的な個人配送型物流の場合
    水産業のドメインの一例
    水産物流の例
    1000円
    A地点 B地点
    配送センター
    運送会社は同じ

    View full-size slide

  12. 市場便の場合
    水産業のドメインの一例
    水産物流の例
    380円
    産地 宇都宮市場
    豊洲市場
    350円
    A運送会社 B or C or D運送会社
    宛先市場によっては運送会社が
    変わる
    豊洲の中では3社
    => ウーオで請求と管理を巻き取りたい
    足立市場
    大宮市場

    View full-size slide

  13. Before
    産地-取引先間で送料を持つ
    ● 取引先増えるごとに送料設定をする
    必要があり手間
    ● 産地、取引先増えるたびにレコード爆増
    ● 宛先データを送料内で管理
    ● 一方、物流のステータスは個別で管理する
    必要もあり、小回りは効く
    水産業のドメインの一例
    水産物流の例
    送料データ

    View full-size slide

  14. After
    産地-市場間で送料を持つ
    + 組織間物流関係の定義
    ● 取引先が増えるごとに送料設定をする
    必要がなくなる
    ● 組織間物流関係でブラックリスト方式
    ホワイトリスト方式を実現
    ● 宛先データの自動作成
    水産業のドメインの一例
    水産物流の例
    ホワイトリスト&ブラックリストの管理

    View full-size slide

  15. ドメイン可視化と実装のコツ

    View full-size slide

  16. ドメイン可視化と実装のコツ〜釣って捌いて食べてみる〜
    1. ドメインを理解する
    (釣りにでかける)

    View full-size slide

  17. ● ドメインエキスパートを見つける。(社内にいる)
    ○ スプレッドシートで管理されていることが多い
    ● 解像度をあげる/絵を描けるぐらいになる
    1. ドメインを理解する
    (釣りにでかける)

    View full-size slide

  18. ドメインエキスパートを見つける。(社内にいると良い。いるはず)
    ● スプレッドシートで管理されていることが多い
    ● ひたすらヒアリングして、管理されている内容を叩き込む
    ● 場合によってはスプレッドシートの運用のままの方が、いいこともある
    ○ 変更頻度が多い、ルールが定まっていないケースなど
    1. ドメインを理解する
    (釣りにでかける)

    View full-size slide

  19. 解像度をあげる
    ● 現地に行く(or 行ってもらって話を聞く)
    1. ドメインを理解する
    (釣りにでかける)

    View full-size slide

  20. 絵を描けるぐらいになる
    ● 関係者とタイムスケジュールまで
    イメージを持てるように
    理解する
    1. ドメインを理解する
    (釣りにでかける)

    View full-size slide

  21. ドメイン可視化と実装のコツ
    2. ドメインをモデル&実装にする
    (さばく)

    View full-size slide

  22. ● 言語化していく(ユビキタス言語)
    ● 既存の運用を考慮して落とし所を探る
    2. ドメインをモデルに落とし込む
    (さばく)

    View full-size slide

  23. 言語化していく(ユビキタス言語)
    2. ドメインをモデルに落とし込む
    (さばく)
    380円
    産地 宇都宮市場
    豊洲市場
    350円
    A運送 B or C or D運送会社
    直便 中継便
    気付会社

    View full-size slide

  24. 言語化していく(ユビキタス言語)
    ● 「〇〇が ~~を△△する」という定義を作って、ドメインエキスパート、関係者に合意をとる
    ● 例外パターンが結構出てくるので、実際の事例を交えてイレギュラーケースがないかをしっかり確認
    ○ リアルな名称で聞くことが大事
    2. ドメインをモデルに落とし込む
    (さばく)
    モデルとして定義できそうなものを抽出

    View full-size slide

  25. 言語化していく(ユビキタス言語化)
    ● ja.ymlにユビキタス言語を定義(rspecで必須化して定義漏れ防止)
    2. ドメインをモデルに落とし込む
    (さばく)

    View full-size slide

  26. 既存の運用を考慮して落とし所を探る
    ● セールス/CSのリソースを考慮する
    ○ 一括移行できるのか、少しずつ移行するのか
    ● 無理ない設計にして最初から作りすぎない
    ● UXも考慮する
    ○ 継続的に管理できるように
    2. ドメインをモデルに落とし込む
    (さばく)
    デザイナー/CSと話して管理画面の運用を決める

    View full-size slide

  27. ドメイン可視化と実装のコツ
    3. 実際に運用して改善する(食べてみる)

    View full-size slide

  28. 3. 実際に運用して改善する(食べてみる)
    ● 本当にやりたかったことができているかを確認
    ● 入力されたデータを活用していくことを考慮していく
    ● UXをヒアリングし、改善する(味付けを改善)
    定義されたモデルを活用していく
    (宛先印刷の例)
    Before
    After

    View full-size slide

  29. まとめとこれから

    View full-size slide

  30. ドメイン可視化と実装のコツ
    ● ドメインを理解する(釣りにでかける)
    ○ ドメインエキスパートを見つける。(社内にいる)
    ○ 解像度をあげる/絵を描く
    ● ドメインをモデルに落とし込む(さばく)
    ○ 言語化していく(ユビキタス言語)
    ○ 既存の運用を考慮して落とし所を探る
    ● 実際に運用して改善する(食べてみる)
    ○ 本当にやりたかったことができているかを確認
    まとめとこれから

    View full-size slide

  31. 課題
    ● Active Recordにドメインロジック書きがち
    ● Fat Modelになりがち
    ありがち? まずはPORO(Plain Old Ruby Object)で切り出していきたい
    まとめとこれから
    購入
    出品
    価格計算
    ロジック
    価格計算
    ロジック
    類似ロジック

    View full-size slide

  32. ギョ清聴ありがとうございました!!
    水産業の裏側をともにハックしていきたい
    メンバーを募集しております!

    View full-size slide