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

新規事業におけるWebAPI開発をよしなにリードする方法

 新規事業におけるWebAPI開発をよしなにリードする方法

新規事業×WebAPI開発に立ち向かう話
よしなに
@shibadog39

shibadog1121

July 30, 2020
Tweet

More Decks by shibadog1121

Other Decks in Programming

Transcript

  1. Rails Engineer • [2019/01~] MedPeer • [2020/05~] kakari for Clinicのリードエンジニア

    • ミーハーです。梨泰院クラスにハマっています。 Takahisa Sakurai @shibadog39 shibadog39
  2. kakari for clinicの機能と提供価値 クリニックPR 待ち時間負担 二次感染リスク の削減 診療予約 双方向の繋がり (かかりつけ)の提

    供 双方向チャット 集患支援 アプリ・HP双方から時間帯予約 が出来る機能の提供 予約の変更や予約前日通知もア プリ経由で可能に クリニック受付と患者さんを双 方向で繋ぐチャット機能の提供 これまで電話で行っていた各種 問い合わせをチャットで効率化 これまでHPから行っていた情 報発信をより機動的に実施 PUSH通知を伴ったお知らせ配信 等で、確実に患者さんに情報を 届ける
  3. kakari for Clinicの構想 クリニック 薬局向けかかりつけ薬局化支援サービス「kakari」と連携し、 診療から服薬フォローまで一気通貫で支援する kakariを通じて医療体験を変える! • 診療予約 •

    双方向チャット • クリニックPR • オンライン診療 • 処方せん送信 • 双方向チャット • 服薬フォロー • オンライン服薬指導 薬局
  4. 新規事業 • 不確定事項が多く仕様の流動性が高い • 開発スケジュールがタイトになりがち • 自分にとっては初のリードエンジニアポジション • はじめましてのメンバーもいる WebAPI開発

    • 協働が前提 • 開発スピードが上がりにくい • 仕様変更コストが大きい フルリモート • コミュニケーションコスト増 • 心理的安全性の醸成難易度高 「よしな」の実現がハードモードな状況 この状況にいかに立ち向かったかの話
  5. 01 02 03 いい感じのAPI設計 いい感じの開発フロー いい感じのRails実装 -スタンダードを知る -巨人の肩に乗る 新規事業における WebAPI開発を

    よしなにリードする方法 -スキーマ駆動開発とは -明日からはじめるスキーマ駆動開発 -実践編:具体的な開発フロー -json serializer 選定 -言語の命名規則の壁を乗り越える
  6. 01 02 03 いい感じのAPI設計 いい感じのAPI開発フロー いい感じのRails実装 -スタンダードを知る -巨人の肩に乗る 新規事業における WebAPI開発を

    よしなにリードする方法 -スキーマ駆動開発とは -明日からはじめるスキーマ駆動開発 -実践編:具体的な開発フロー -json serializer 選定 -言語の命名規則の壁を乗り越える
  7. スタンダードを知る 01 いい感じのAPI設計 スタンダードを知る レスポンス設計 変更への柔軟性 エンドポイント 設計 RESTful リソースの命名

    リクエスト設計 API設計 XSRF JSONハイジャック セキュリティ関係のHTTPヘッダ セキュリティ 検索とクエリパラメータ ページングとクエリパラメータ クエリ/パスパラメータの違い フラットにするべきか 配列の返し方 日付のフォーマット エラーの表現 モバイル/SPAでの考え方の違い APIのバージョン管理
  8. 巨人の肩に乗る 01 いい感じのAPI設計 巨人の肩に乗る github twitter slack trello gmail https://docs.github

    .com/en/rest https://github.com /github/rest-api-de scription https://developer.t witter.com/en/docs https://api.slack.co m/methods https://github.com /slackapi/slack-api- specs https://developer.a tlassian.com/cloud/ trello/rest/api-grou p-actions/ https://developers. google.com/gmail/a pi/v1/reference 身近な巨人たちのAPI定義
  9. 巨人の肩に乗った例 01 いい感じのAPI設計 巨人の肩に乗る 仕様:リストの並び替えをドラッグアンドドロップで行うことができる 1: item_a 2: item_b 3:

    item_c 4: item_d 1: item_b 2: item_c 3: item_a 4: item_d e.g. item_aを移動 【まっさきに思いついた案】 item_aのidと並び替え後の番号(例の場合:3)をリクエストに送る その上で順番がずれ込むitemすべての順番を更新する
  10. 1: item_b (position: 131070.0) 2: item_c (position: 196605.0) 3: item_a

    (position: 229372.5) 4: item_d (position: 262140.0) 巨人の肩に乗った例 01 いい感じのAPI設計 巨人の肩に乗る 仕様:リストの並び替えをドラッグアンドドロップで行うことができる 1: item_a (position: 65535.0) 2: item_b (position: 131070.0) 3: item_c (position: 196605.0) 4: item_d (position: 262140.0) e.g. item_aを移動 item_aの新しいposition = (c_pos + d_pos)/2 【trelloはどうやっているか】 要素の位置を浮動小数点で表現することで解決 https://developer.atlassian.com/cloud/trello/rest/api-group-cards/#api-cards-id-put Ref: https://qiita.com/gypsy/items/7bd2a4aeb1b419ce8914
  11. 01 02 03 いい感じのAPI設計 いい感じの開発フロー いい感じのRails実装 -スタンダードを知る -巨人の肩に乗る 新規事業における WebAPI開発を

    よしなにリードする方法 -スキーマ駆動開発とは -明日からはじめるスキーマ駆動開発 -実践編:具体的な開発フロー -json serializer 選定 -言語の命名規則の壁を乗り越える
  12. 明日から始めるスキーマ駆動開発 01 OpenAPIを知る • 何なのか:スキーマを記述するフォーマット ◦ 公式 ◦ ぐぐると出てくる各社のテックブログ ◦

    (再掲) WEB+DB PRESS Vol.108 • 周辺ツール ◦ ドキュメント生成、コード生成、モックサーバー等 ◦ ここにまとまっている 02 いい感じの開発フロー 明日から始めるスキーマ駆動開発
  13. 明日から始めるスキーマ駆動開発 スキーマを頑張って書く • エンドポイント/リクエスト/レスポンスの定義をひたす ら書く • OpenAPI Specification ここを見ながらひたすらに •

    json/yamlが辛ければ周辺ツールを利用するのもあり ◦ e.g. Stoplight 02 02 いい感じの開発フロー 明日から始めるスキーマ駆動開発
  14. クライアントサイド サーバーサイド API定義を 一緒に決める リリース エンジニアによる 結合テスト QAテスト 実装 実装

    モックの提供 コードの自動生成 スキーマによる 単体テスト補強 02 いい感じの開発フロー 実践編:具体的な開発フロー 定義設計フェーズ 実装フェーズ テストフェーズ 実践編:具体的な開発フロー
  15. 実装フェーズ 02 いい感じの開発フロー 実践編:具体的な開発フロー 1.スキーマへのアクセス容易さ 2.コスパの高い形でモックを提供 重要なことは4つ 3.スキーマ通りの実装になっていることを 技術で担保 4.機能群の優先順位の認識を揃えること

    • API定義を簡単に参照できること • リクエスト • レスポンス • 並行して稼働するためにまずはモック を提供 • 機能群ごとに結合テスト実施のマイル ストーンを決める
  16. 2.コスパの高い形でモックを提供 02 いい感じの開発フロー 実践編:具体的な開発フロー A . mockサーバー立ち上げる • Toolがいくつかある ◦

    本家 openapi-generator ◦ Sprout ◦ Prism • スキーマ駆動開発ぽくてかっこいい • スキーマファイルに値を書いていくことになるので柔軟なことはそこまでで きない&スキーマファイルが冗長になっていく
  17. 2.コスパの高い形でモックを提供 02 いい感じの開発フロー 実践編:具体的な開発フロー C . クライアントサイドで準備 • クライアント側がスキーマをもとに勝手に準備する •

    欲しいデータをクライアント側が作成するので柔軟性はとても高い • スキーマ駆動の自動生成感はとても薄い • クライアントサイドのsnapshotテスト等でも使い回すとしたらクライアント 側で作成するのがコスパがよくなる
  18. 2.コスパの高い形でモックを提供 02 いい感じの開発フロー 実践編:具体的な開発フロー • もともとは「A . mockサーバー立ち上げる」方法をとっていたが、 今は「B .

    controllerにjsonべた書き」、「C . クライアントサイドで準備」 をメインで進めている ◦ ちょっとした調整がしたい場合が多いため ◦ クライアントサイドのsnapshotテストを考慮 • どの方法が適しているかは、チームで話し合って決めるのが良い • 個人的なおすすめは「B . controllerにjsonべた書き」
  19. 3.スキーマ通りの実装になっていることを 技術で担保 02 いい感じの開発フロー 実践編:具体的な開発フロー • リクエスト: スキーマからクライアントライブラリを自動生成 ◦ Web側の実装ではopenapi-generatorを利用してtypescriptのコードを

    自動生成して利用している • レスポンス: スキーマ通りかのバリデーションをrspecで実施 ◦ Committee / committee-rails を利用している • 詳細はぐぐるとたくさん出てくると思うので割愛
  20. テストフェーズ 02 いい感じの開発フロー 実践編:具体的な開発フロー • 結合テストに先んじてデザイン・UIレビューを実施する ◦ どうしてもサーバー側の実装が遅れてしまう事が多い。 ◦ mockによるクライアントサイドの実装が先に完了した場合は、デザイン・UI

    だけのテストと称して画面をディレクターにテストしてもらう ◦ デザイン系の指摘事項を先に上げてもらうことが可能 • 結合テストはサーバー・クライアントで一緒に行う ◦ 考慮もれを防ぐ
  21. 01 02 03 いい感じのAPI設計 いい感じの開発フロー いい感じのRails実装 -スタンダードを知る -巨人の肩に乗る 新規事業における WebAPI開発を

    よしなにリードする方法 -スキーマ駆動開発とは -明日からはじめるスキーマ駆動開発 -実践編:具体的な開発フロー -json serializer 選定 -言語の命名規則の壁を乗り越える
  22. json serializer選定 03 いい感じのRails実装 json serializer選定 • 絶対的正解はない印象 • kakari

    for clinicではjsonapi-serializer (fork of fast_jsonapi)を使用 • Kakariという前任のサービスでも利用していたことから ◦ 開発チームとの親和性が高いこと ◦ Serializerごとにテストを書くことができるtestability • 「JSON APIとサービス高速化」という大変興味深いテーマの話が自分の発表 の後すぐに聞けるのでお楽しみに!
  23. サーバーサイド • Ruby: snake_case 言語間の命名規則の壁を乗り越える 03 いい感じのRails実装 言語間の命名規則の壁を 乗り越える 不用意なバグが起こりがち

    はしわたしをいい感じにしたい!! • レスポンスのプロパティ名を snake_case→camelCaseに変換 • リクエストのプロパティ名を camelCase→snake_caseに変換 クライアントサイド • JavaScript: camelCase • kotlin: camelCase • swift: camelCase
  24. リクエストのプロパティ名を camelCase→snake_caseに変換 03 いい感じのRails実装 言語間の命名規則の壁を 乗り越える • ActionController::Parameters#deep_transform_keys!がRails 6.1でリリース 予定

    • 6.1リリース後はパッチを当てずとも params.deep_transform_keys!(&:underscore)のように対応可能になる予定 https://github.com/rails/rails/issues/39081
  25. 01 02 03 いい感じのAPI設計 いい感じの開発フロー いい感じのRails実装 -スタンダードを知る -巨人の肩に乗る 新規事業における WebAPI開発を

    よしなにリードする方法 -スキーマ駆動開発とは -明日からはじめるスキーマ駆動開発 -実践編:具体的な開発フロー -json serializer 選定 -言語の命名規則の壁を乗り越える
  26. CREDITS: This presentation template was created by Slidesgo, including icons

    by Flaticon, and infographics & images by Freepik. Thanks! Please keep this slide for attribution.