Slide 1

Slide 1 text

会計 freee SDK の 開発プロセスとアーキテクチャ Biz Tech Frontier 2020 Kazuyuki Miyake 1

Slide 2

Slide 2 text

About Me 三宅 和之 @kazuyukimiyake 株式会社ゼンアーキテクツ CTO Community Microsoft MVP(for Microsoft Azure) Vue.js-JP コアスタッフ TypeScript-jp コアスタッフ OSS freee SDK OSS メンテナー Smart Store OSS メンテナー 2

Slide 3

Slide 3 text

Agenda 1. 会計freee SDKについて 2. 会計freee SDK のアーキテクチャ 3. 会計freee SDK の開発プロセス ※ 以降のページでは 「freee SDK」 と表現させていただきます 3

Slide 4

Slide 4 text

会計freee SDK について 4

Slide 5

Slide 5 text

日本初の会計システム開発用SDK API エコノミーの推進、オープンプラットフォーム構想の一環として開発 公式発表資料 5

Slide 6

Slide 6 text

SDK リリース状況 2019年11月に正式リリース C#, Java, PHP 用をラインナップ V2 がまもなくリリース予定(OpenAPI 3.0 対応バージョン) 上記以外に、 JavaScript SDK が Beta 版として存在 6

Slide 7

Slide 7 text

SDK の位置づけ 公開されている freee API スキーマ を 使いやすく する 好みの開発環境 から 直接 freee API を操作できる 7

Slide 8

Slide 8 text

SDK の利用シーンとメリット 社内アプリ と統合し、独自機能から freee API を呼ぶことができる freee の アプリストア にアプリケーションを公開しやすくする 8

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

SDK の詳しい使い方は? GitHub に詳細な導入手順書とサンプルがあります! C#: https://github.com/freee/freee-accounting-sdk-csharp Java: https://github.com/freee/freee-accounting-sdk-java PHP: https://github.com/freee/freee-accounting-sdk-php 11

Slide 12

Slide 12 text

Version 2.x を絶賛開発中! Open API 3.0 に完全準拠 Swagger 2.0 ベースのスキーマメンテナンスが不要に ソースコード生成を OpenAPI Generator に統一 言語ごとの生成検証やカスタマイズが不要に SDK リリースのリードタイム短縮化 CI/CD 導入による自動化により、API 更新からのリードタイムが短縮 v2.0.0-alpha としてプレリリース済み 12

Slide 13

Slide 13 text

freee SDK のアーキテクチャ 13

Slide 14

Slide 14 text

freee SDK の全体構成 14

Slide 15

Slide 15 text

SDK のアーキテクチャ基本方針 1. freee API スキーマに準拠 2. 各言語の流儀にしたがう 3. SDK は OSS として GitHub に公開する 4. SDK は公式パッケージマネージャから配布する 5. 課題やノウハウは企業やコミュニティにフィードバックする 15

Slide 16

Slide 16 text

freee API スキーマに準拠 free API スキーマ: https://github.com/freee/freee-api-schema API と SDK で仕様に差異がない 16

Slide 17

Slide 17 text

各言語の流儀に従う メソッドのシグニチャ(例: 事業所一覧の取得 GET: /api/1/companies ) C#: CompaniesIndexResponse GetCompanies () Java: Observable getCompanies() PHP: getCompanies() サンプル Web アプリの利用フレームワーク C#: ASP.NET Core MVC/WebAPI Java: Spring Boot PHP: Laravel 17

Slide 18

Slide 18 text

SDK は OSS として GitHub にて公開 SDK ソース、サンプルコード、Issues、Pull Request、ガイドライン 特に PHP 版は活発にコントリビューターとのやりとりが行われている 18

Slide 19

Slide 19 text

SDK は公式パッケージマネージャから配布 freee SDK を開発ライブラリとしてスムーズに導入可能 各言語別のパッケージマネージャに対応 C#: NuGet Java: MVN Repository PHP: Composer 19

Slide 20

Slide 20 text

freee SDK の開発プロセス 20

Slide 21

Slide 21 text

SDK リリースまでの道のり freee 社からSDK開発基本方針とベースとなる API スキーマを受領 GitHub 上に リポジトリを作成し、OSS として開発開始 SDK ソースコードの生成方法検証(多くのトライ & エラーあり) Issue の明確化とフィードバック 関連するコミュニティへのコントリビュート v1.0 リリース v2.0 開発 ← イマココ 21

Slide 22

Slide 22 text

SDK の開発フロー 22

Slide 23

Slide 23 text

OSS としての開発スタイルを徹底 各言語別のスペシャリストがコミッターとしてリード 言語間の全体整合性や freee 社との調整はメンテナーがとりまとめ ある言語で先行実装し、他の言語にフィードバックして効率化 1.0: C# を先行させ、Java と PHP に展開 2.0: Java を先行させ、他言語に展開 基本は Issue や PR でコミュニケーション 検証段階は Slack も併用 打ち合わせはほぼ不要(月1のテレカン程度) 23

Slide 24

Slide 24 text

スペシャルチームの結成 各言語のスペシャリストとOSS開発経験者をコミッターとしてアサイン 24

Slide 25

Slide 25 text

freee 社へのフィードバック freee 社 API スキーマへの Issue 登録 SDK 開発を通じて、人間の目では分かりにくい API の細かい仕様を調整 型に厳しい言語で SDK を開発したため、API 側の精度向上に貢献できた 25

Slide 26

Slide 26 text

外部へのコントリビュート Open API Generator への PR 発行 開発が遅れていた C# の OpenAPI Generator に多くの PR を発行し貢献 C# メンテナの shibayan が technical committee に招待された! 26

Slide 27

Slide 27 text

OpenAPI Generator のサイトにロゴが掲載! 27

Slide 28

Slide 28 text

freee SDK 開発で得られたこと API スキーマから複数言語のソースコードを生成するノウハウ 会計以外のアプリと freee の機能を融合できる可能性 企業 x エンジニア x コミュニティ の融合プロジェクト形式が とても良く機能すること freee の機能が豊富であることを API 仕様からあらためて実感! 28

Slide 29

Slide 29 text

ご清聴ありがとうございました 29