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

会計 freee SDK の 開発プロセスとアーキテクチャ /freee biztechfrontier2020 miyake

miyake
February 05, 2020

会計 freee SDK の 開発プロセスとアーキテクチャ /freee biztechfrontier2020 miyake

Biz Tech Frontier 2020 のセッション資料です

miyake

February 05, 2020
Tweet

More Decks by miyake

Other Decks in Technology

Transcript

  1. About Me 三宅 和之 @kazuyukimiyake 株式会社ゼンアーキテクツ CTO Community Microsoft MVP(for

    Microsoft Azure) Vue.js-JP コアスタッフ TypeScript-jp コアスタッフ OSS freee SDK OSS メンテナー Smart Store OSS メンテナー 2
  2. Agenda 1. 会計freee SDKについて 2. 会計freee SDK のアーキテクチャ 3. 会計freee

    SDK の開発プロセス ※ 以降のページでは 「freee SDK」 と表現させていただきます 3
  3. SDK を利用すると SDK を利用しない場合 REST API の呼び出すコードを書く必要がある curl -X GET

    "https://api.freee.co.jp/api/1/reports/trial_pl?company_id=3316&fiscal_year=2019" -H "accept: application/json" -H "Authorization: Bearer abcdefghijklmnopqrstuvwxyz01234567890xxxxxxxxxxxxxxxxxxxxx" SDK を利用した場合(C#のケース) SDK のメソッドを実行するだけ(例: 試算表取得 GetTrialPlAsync ) var trialPl = await accountingClient.TrialBalance.GetTrialPlAsync(companyId, 2019); 9
  4. SDK の使い方 基本的な使い方 1. 言語別のパッケージマネージャから「公式 freee accounting SDK」を導入する 2. 認証情報を取得しアプリに設定する

    3. 利用したい API に対応するメソッドをライブラリから選択して実装するだけ ライブラリの導入 $ composer require freee/freee-accounting-sdk $ dotnet add package Freee.Accounting.Sdk --version 1.0.0 10
  5. Version 2.x を絶賛開発中! Open API 3.0 に完全準拠 Swagger 2.0 ベースのスキーマメンテナンスが不要に

    ソースコード生成を OpenAPI Generator に統一 言語ごとの生成検証やカスタマイズが不要に SDK リリースのリードタイム短縮化 CI/CD 導入による自動化により、API 更新からのリードタイムが短縮 v2.0.0-alpha としてプレリリース済み 12
  6. SDK のアーキテクチャ基本方針 1. freee API スキーマに準拠 2. 各言語の流儀にしたがう 3. SDK

    は OSS として GitHub に公開する 4. SDK は公式パッケージマネージャから配布する 5. 課題やノウハウは企業やコミュニティにフィードバックする 15
  7. 各言語の流儀に従う メソッドのシグニチャ(例: 事業所一覧の取得 GET: /api/1/companies ) C#: CompaniesIndexResponse GetCompanies ()

    Java: Observable<CompaniesIndexResponse> getCompanies() PHP: getCompanies() サンプル Web アプリの利用フレームワーク C#: ASP.NET Core MVC/WebAPI Java: Spring Boot PHP: Laravel 17
  8. SDK は OSS として GitHub にて公開 SDK ソース、サンプルコード、Issues、Pull Request、ガイドライン 特に

    PHP 版は活発にコントリビューターとのやりとりが行われている 18
  9. SDK リリースまでの道のり freee 社からSDK開発基本方針とベースとなる API スキーマを受領 GitHub 上に リポジトリを作成し、OSS として開発開始

    SDK ソースコードの生成方法検証(多くのトライ & エラーあり) Issue の明確化とフィードバック 関連するコミュニティへのコントリビュート v1.0 リリース v2.0 開発 ← イマココ 21
  10. OSS としての開発スタイルを徹底 各言語別のスペシャリストがコミッターとしてリード 言語間の全体整合性や freee 社との調整はメンテナーがとりまとめ ある言語で先行実装し、他の言語にフィードバックして効率化 1.0: C# を先行させ、Java

    と PHP に展開 2.0: Java を先行させ、他言語に展開 基本は Issue や PR でコミュニケーション 検証段階は Slack も併用 打ち合わせはほぼ不要(月1のテレカン程度) 23
  11. freee 社へのフィードバック freee 社 API スキーマへの Issue 登録 SDK 開発を通じて、人間の目では分かりにくい

    API の細かい仕様を調整 型に厳しい言語で SDK を開発したため、API 側の精度向上に貢献できた 25
  12. 外部へのコントリビュート Open API Generator への PR 発行 開発が遅れていた C# の

    OpenAPI Generator に多くの PR を発行し貢献 C# メンテナの shibayan が technical committee に招待された! 26
  13. freee SDK 開発で得られたこと API スキーマから複数言語のソースコードを生成するノウハウ 会計以外のアプリと freee の機能を融合できる可能性 企業 x

    エンジニア x コミュニティ の融合プロジェクト形式が とても良く機能すること freee の機能が豊富であることを API 仕様からあらためて実感! 28