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

Staiinlessの紹介

 Staiinlessの紹介

Avatar for karasu

karasu

June 01, 2025
Tweet

More Decks by karasu

Other Decks in Technology

Transcript

  1. AI API開発: よくある形 • REST API: 4原則を守って開発されたAPI ▪ 統一インターフェース •

    統一的に決められたルールに則る(GET, PUT, POST, DELETE) ▪ アドレス可能性 • URIを通してリソースを一意的に表現できること ▪ 接続性 • 別のリソースへの遷移が可能である ▪ ステートレス性 • 状態を保持せず、各APIごとに独立している • 例 ◦ GET example.com/users => usersの一覧を取得する ◦ POST example.com/users => usersのリソースを新規作成する ◦ PUT(PATCH) example.com/users/1 => usersでid = 1のリソースを更新する ◦ DELETE eample.com/users/1 => usersでid=1のリソースを削除する • ユースケース ◦ サーバ・クライアントが密( APIはinternalで公開しない = 利用者側が限定される) ◦ クライアントとAPI開発が同じチーム
  2. AI API開発: よくある形 • GraphQL ◦ APIに対してクエリ言語を提供することで必要なリソースを得ることができる ▪ REST APIと違い(極端に言えば)1つのリソースで1つのURLでOK

    • そこにクエリする(usersのidとtitleの一覧ください、みたいな) ◦ 柔軟性がありクライアント側で必要な項目やリソースを選択可能 ◦ 専用のGraphQLサーバ・専用のクライアントを用意する ▪ サーバは同時にアグリゲーションの役割をこれ一つで果たす • BFFやユニバーサルBFFという位置づけとも見れる ◦ REST APIと違いセキュリティをちゃんと考える必要あり • 例 ◦
  3. AI スキーマ駆動開発 • 殆どの場合、APIの定義書を作る = それが正となる ◦ 例: OpenAPI •

    定義書をベースにAPIやクライアントの型など、雛形の生成を行いそれを用いてクライアン トやAPIのロジックを作り込んでいく ◦ 雛形が統一的に生成できるので、実装の漏れが発生しにくい ◦ => これをスキーマ駆動開発という • OpenAPIだと専用のジェネレータで、定義書のjsonやyamlからいい感じにやってくれる ◦ openapi-generator(多言語対応) ◦ openapi-ts(TypeScript特化) • 例 ◦ フロントエンド ▪ TypeScriptとfetch(or Axios)でクライアントを生成 ◦ バックエンド ▪ Golangで各エンドポイント、リクエスト・レスポンスの型(struct)を生成 ▪ PythonとFastAPIで...
  4. AI 多言語対応させるのは大変 • 作る以外にもやることは多い ◦ バージョン管理(タグとか) ◦ staging→productionリリース(それ必要??) ▪ CD/CI環境

    ▪ 配布方法(pythonならpip install ….とか) ◦ 専用の開発環境 ◦ などなど。。。。 • 多言語に対応する場合、それだけ用意・保守していかないといけなくなる ◦ APIとして外部への提供を行っているサービスならなおさら ◦ 注力すべきなのはドメイン、それ以外に開発コストを割くのはもったいない => stainlessを使ってちょっと楽しましょう
  5. AI Stainless • API仕様(OpenAPIなど)を元にして、高品質なSDKを自動生成するサービス ◦ 元Stripe(決済サービス)の方が立ち上げた • 利用企業 ◦ CloudFlare

    ◦ Open AI : openai-python はこれで作っている ▪ 他、いろんな企業が使っていて実績も多そう • イメージ •
  6. AI 特徴 特徴 内容 自動コード生成 OpenAPI等、複数言語のSDKを自動生成 メンテナンス性 コードがクリーンに保たれ、手動メンテのコストが削減 強力な型サポート 厳格な型定義を自動で生成

    CI/CD統合 GitHub ActionsなどのCIと連携して、API更新時に自動で SDKをリリース可能 バージョニング管理 APIバージョン別にSDKを分けて出力可能 手動追加 手動で独自のコードも追加できる
  7. AI 良かった点 • 言語独自仕様によるギャップの吸収 ◦ 例: GO言語ではゼロ値という値を与えず初期化するとデフォルト値が入る ▪ bool: false

    ▪ int: 0 ▪ string: “”(空文字) ◦ boolであれば、falseを実際セットしたのかセットせず初期化されたのか不明 ▪ これを検知できる仕組みが必要 • パッケージ管理システムも対応 ◦ pyplやnpmパッケージのpublishまで行ってくれるのは便利 ◦
  8. AI 惜しいなという点 • 完全にプライベートにするのはできない? ◦ stagingで作成されるSDKのリポジトリがstainless-sdksというorganization ◦ Stainless側に管理されている可能性 ◦ 気になる人や企業は気になってしまうかも

    • Open APIのdocだけでできると思ったら、違った ◦ stainless-configという専用の設定ファイル(yaml)が必要 ◦ doc読んで、stainless独自の設定になれる必要あり ▪ 充実してるので読み込んでいけばそこまで難しくなさそう