Slide 1

Slide 1 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. 個人開発アプリにスキーマ 駆動開発を取り入れた話 虎の穴ラボ株式会社 浜田拓実 (sheltie) 2022 秋の終わりまでにチャレンジしたことLT会 11/30

Slide 2

Slide 2 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. 自己紹介
 浜田 拓実(ハマダ タクミ)
 
 
 ● 2022/06 入社
 ● 虎の穴ラボ 通販コスト削減チーム エンジニア 
 Goを使い始めた理由
 ● シンプルな構文でコードがガリガリ書ける(気がする) 
 ● エイリアスや省略した書き方が少ない(気がする) 
 今季の推しアニメ
 ● SHY ● 16bitセンセーション

Slide 3

Slide 3 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ・スキーマ駆動開発とは
 ・スキーマ駆動開発を取り入れた理由
 ・実際にやってみる
  ・OpenAPIでAPI仕様書を作成
  ・ツールを利用してGo言語のファイルを出力
  ・プログラムの修正
 ・まとめ
 アジェンダ


Slide 4

Slide 4 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. スキーマ駆動開発とは 2022

Slide 5

Slide 5 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. スキーマ駆動開発とは
 スキーマ駆動開発(Schema-Driven Development)は、ソフトウェア開発のアプ ローチの一つです。通常、データの構造や形式が事前に定義されたスキーマ に基づいています。これにより、開発者はデータの構造や型を明示的に定義 し、それに基づいてコードを構築します。
 By ChatGPT 
 先にAPIのパラメータやDBのテーブル構造を決めておき、その設 計に沿ってプログラムを作成する開発手法のこと


Slide 6

Slide 6 text

Copyright (C) 2021 Toranoana Inc. All Rights Reserved. スキーマ駆動開発を 取り入れた理由 6 2022

Slide 7

Slide 7 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. スキーマ駆動開発を取り入れた理由
 ・設計と実装を一元管理したい
  個人開発のため、思いついたらそのまま実装(設計書は書かない)
  ➡自分でどんなAPIを作ったのか思い出せない
  ➡APIのパラメータを忘れた
  ➡APIのメソッドも忘れた(POSTだっけ? PUTだっけ?)
 設計書は必要だ!


Slide 8

Slide 8 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. スキーマ駆動開発を取り入れた理由
 ・設計書の管理はどうするか?
  スプレッドシート
  ➡設計と実装がずれる自信がある!
 
  GoDocに書く
  ➡出力されるフォーマットがAPI向きではない


Slide 9

Slide 9 text

Copyright (C) 2021 Toranoana Inc. All Rights Reserved. 実際にやってみる 9 2022

Slide 10

Slide 10 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. OpenAPIでAPI仕様書を作成
 ・エディタを整備
 VSCodeに以下2つの拡張機能を導入


Slide 11

Slide 11 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. OpenAPIでAPI仕様書を作成
 ・エディタを整備


Slide 12

Slide 12 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ツールを利用してGo言語のファイルを出力
 ・作成したOpenAPI仕様書からGoのプログラムを出力  今回は「oapi-codegen」を利用します  ➡変換後のファイルが1つなので、管理が楽そう  ➡main関数はすでに作成済みなので、   ジェネレーターから出力されなくて良い


Slide 13

Slide 13 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ツールを利用してGo言語のファイルを出力
 ・oapi-codegenの利用方法 導入 go install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@latest 変換 oapi-codegen -package petstore petstore-expanded.yaml > petstore.gen.go

Slide 14

Slide 14 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ツールを利用してGo言語のファイルを出力
 ・oapi-codegenの利用方法(自分の場合) oapi-codegen -package generated -generate types,server,spec ./openapi.yaml > ./openapi.go 以下のコードのみ出力 ・APIパラメータの構造体 ・サーバーサイドのAPI定義の利用(Echoのルーター定義など)

Slide 15

Slide 15 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ツールを利用してGo言語のファイルを出力


Slide 16

Slide 16 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. プログラムの修正
 ・生成されたコードに合わせて既存のプログラムを修正  ➡独自に定義していた構造体を削除   この修正に合わせて、構造体利用箇所も修正  ➡生成されたハンドラーの実装(次で紹介)  ➡Echoのルーティングを削除   生成されたコードのルーティングを利用するように修正(次で紹介)

Slide 17

Slide 17 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. プログラムの修正
 ハンドラーの実装
 ハンドラーの登録


Slide 18

Slide 18 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. 動作確認


Slide 19

Slide 19 text

Copyright (C) 2021 Toranoana Inc. All Rights Reserved. まとめ 19 2022

Slide 20

Slide 20 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. まとめ
 ・スキーマ駆動開発を取り入れて
  ➡APIの設計と実装が一元管理できるようになった!
  ➡APIの設計書が出来た!
 ・注意事項
 APIを修正するときはyamlファイル修正、
 その後ジェネレータでソース出力する
 出力されたファイルを修正しないように注意!!!

Slide 21

Slide 21 text

Copyright (C) 2020 Toranoana Inc. All Rights Reserved. ご静聴ありがとうございました 2022