CodeZine(コードジン)

特集ページ一覧

「アプリ開発あるある」を疑うことから始まった、API Clientコードの自動生成【デブスト2020】

【Session6】OpenAPI Generator による API Client コードの完全自動生成

  • LINEで送る
  • このエントリーをはてなブックマークに追加
2021/01/18 12:00

目次

「当たり前」の自動化に挑戦して見えたこと

 次に取り組んだのは、「自動化の手法の検討」である。修正箇所の連絡の自動化については、「GitHub Actionsというサービスを利用すると自動化できることがわかりました」と岡山さん。GitHub Actionsはさまざまなワークフローを自動化できるサービスである。

 一方で、クライアント側の修正の自動化をするために目星をつけたのが「OpenAPI Generator」である。OpenAPI Generatorはクライアントやサーバーのコードを、OpenAPIドキュメントから生成するツールである。「触ってみると、非常に便利なことがわかりました」と岡山さんは振り返る。今回は試さなかったが、OpenAPI Generatorを使うと、APIサーバー側のソースコードも生成できるという。

 自動化のフローは次のようになる。前提としてAPIの仕様書とソースコードをGitHubで管理する。その上でOpenAPIドキュメント形式のOpenAPIの仕様書を更新し、GitHub Actionsを使って、APIの更新通知を受信する。その後、API仕様書を読み取り、APIクライアントコードを生成する。コードの生成が終わったら、APIクライアントのGitリポジトリに対して、プルリクエストを作成する。

GitHub ActionsとOpenAPI Generatorによる自動化のイメージ
GitHub ActionsとOpenAPI Generatorによる自動化のイメージ

 このフローで実際に試したところ、期待通り、サーバー側の修正を行うと、自動でクライアント側のリポジトリにプルリクエストが作成されたという。

 実際のプロジェクトに導入していこうと考えたが、「課題は山積みだった」と岡山さん。課題の第一は、API仕様書がGit管理されていない場合があるということ。第二にGitHub Actionsの権限を持っていない場合があるということ。「お客さまのセキュリティの都合上、どうしてもこちらに権限を譲渡できないことがあります」(岡山さん)

 第三がOpenAPI Generatorには未対応な部分があること。「最近、AndroidアプリをRetrofitとCoroutine、Kotlinx Serializationの組み合わせで開発するのですが、現状はこの組み合わせでAPI Clientコードを自動生成できないという問題があります」(岡山さん)

 現在、プルリクエストが出されているので、次のバージョンからは自動生成ができるようになるのではと期待しているというが、新しいライブラリを使うときは、OpenAPI Generator側が対応するまで待つか、自分で対応するかという二択になってしまうという。

 このように課題はあるが、これからも「できるだけ自動化に取り組んでいく」と岡山さんは力強く語る。

 もちろん、自動化する上では、「大変だったこともたくさんあった」と言う。その取り組みの中で最も大切だと感じたことは、「前提を疑うこと」と岡山さんは言う。例えば今回の自動化に取り組んだのも、元々は「APIを変更したことと、その箇所をきちんと報告する」という、当たり前の流れで実行してほしいと思ったことがきっかけである。そして、さらにその当たり前の流れを、「本当にそれで良いのか」と疑ったからこそ、課題を発見し、考えて行動して自動化することにつながった。「もし前提を疑うことなく改善しようとしていたら、作業フローを見直して、新たな作業フローのドキュメントを作るという運用でカバーする残念な選択になっていたと思う」と吐露する。

 実はこの前提を疑うということは、ゆめみ社内のOJTチャンネルガイドラインにも記載されていることである。つまりゆめみ社員は普段から、「物事の前提を疑って考える」という姿勢が身に付いているのだ。岡山さんは最後にこう参加者に呼びかけ、セッションを締めた。

 「みなさんもぜひ、前提を疑うことを心がけて仕事をしてみてはいかがでしょうか」

お問い合わせ

 株式会社ゆめみ



  • LINEで送る
  • このエントリーをはてなブックマークに追加

あなたにオススメ

著者プロフィール

  • CodeZine編集部(コードジンヘンシュウブ)

    CodeZineは、株式会社翔泳社が運営するソフトウェア開発者向けのWebメディアです。「デベロッパーの成長と課題解決に貢献するメディア」をコンセプトに、現場で役立つ最新情報を日々お届けします。

バックナンバー

連載:【デブスト2020】セッションレポート
All contents copyright © 2005-2021 Shoeisha Co., Ltd. All rights reserved. ver.1.5