SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Developers CAREER Boost セッションレポート(PR)

あなたの仕事を楽にする「スキーマ駆動開発」とは?──自動化ツールも導入してさらに楽に

【A-3】Schema As Codeで実現する最速のスキーマ駆動開発

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

コードとしてスキーマを記述し、DB設計も自動化

 土田氏は以上3点の問題を解決する方法を探し、米Meta Platforms(Facebook)が開発したオープンソース・ソフトウェア「ent」を見つけ出した。entでは、API定義(スキーマ)をOpenAPIファイルではなく、Go言語のソースコードの形で記述する(Schema As Code)。YAMLやJSONに比べれば、開発者にとって読みやすい形式で記述できるわけだ。entにはさらにスキーマ・ファイルからデータベースのテーブルなどを自動的に作成する機能も持つ。データベースのテーブルを作成することなく、APIの設計に取りかかることができるのだ。

 そしてentは各種自動生成機能も充実している。まず、Go言語で記述したスキーマ・ファイルから、OpenAPI形式のファイルを生成できる。OpenAPI向けのツールを使いたいときに役立つ機能だ。そして、Go言語に限った話になってしまうが、スキーマからクライアントがデータベースにアクセスする際に使用するORマッパーも生成する。

entを導入すると、データベース設計の自動化や、ORマッパーの自動生成などの機能を利用できる
entを導入すると、データベース設計の自動化や、ORマッパーの自動生成などの機能を利用できる

 この結果、entを使用すると定義(スキーマ)と実装のずれが一切無い状態で開発を進めることができる。土田氏は「とにかくスキーマが最優先という形で開発を進めることができる」とメリットを強調する。

 entを使用する場合、まずサーバー側の開発者がGo言語でスキーマを記述し、クライアント側など開発チーム全員にファイルをレビューしてもらい、合意が取れたらデータベース・テーブルを自動的に作成するという流れになる。データベースに変更があれば、それも反映させてくれる。さらに、OpenAPIファイルや、ORマッパー、CRUDコードも自動的に生成するので、スキーマで定義した内容と実装がずれるという事態が発生しにくい。

 実際に開発でentを使用してきている土田氏は、使ってみて感じたメリットとして、手作業が減るので工数を大幅に削減できるという点を真っ先に挙げた。さらに、スキーマをコードで記述するため、読みやすくレビューもやりやすいともいう。そして、公式ドキュメントが分かりやすいという利点も挙げた。

 一方で気になる点も挙げた。まず、開発の途中から導入するのは難しそうだということ。すでにデータベースの設計ができていて、稼働しているような場合は、データベースのテーブル設計からGo言語のスキーマに変換する作業が発生するからだ。

 続いて、多機能なツールであり、あまりに頼りすぎると簡単にロックインしてしまいそうだという点を挙げた。土田氏は「ここで紹介したentの機能はごく一部。紹介できていない機能がたくさんある」と言い、entを導入するならentに依存しすぎることなく、部分的に採用するのが良いかもしれないと導入を考える開発者にアドバイスを送った。さらに、ORマッパーの自動生成機能について「Go言語のコードだけでなく、他の言語のコードも生成できるようになると良い」とした。

 さらに土田氏は、「entの対抗馬となりそう」だというソフトウェア「Prisma」を紹介した。Prismaでは、「schema.prisma」という名称のファイルに独自フォーマットでスキーマを記述する形を採る。スキーマからのデータベース・テーブルの自動作成や、ORマッパー生成といった機能も持っている。ただし、ORマッパーはJavaScript/TypeScriptのコードで出力する。OpenAPIファイルを出力する機能はないが、その点については「schema.prismaファイル一つですべてを済ませてしまおうという思想があるからではないか」と土田氏は推測している。

 土田氏はentやPrismaといったツールについて「この種のツールはまだ成長段階にあり、この先どうなるかは分からない。ロックインしないように上手く活用して開発を進められれば良いのでは」と語り、講演を締めくくった。

関連リンク

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
Developers CAREER Boost セッションレポート連載記事一覧

もっと読む

この記事の著者

笹田 仁(ササダ ヒトシ)

 フリーランスのライター、編集者。IT、特にソフトウェア開発の話が好きです。 趣味はドラムを叩くこと。コロナ騒ぎでリハーサルスタジオに入りにくくなり、ちょこちょこと楽器を買うことでストレスを解消していたら、いつの間にか置き場所に困るほどになってしまいました。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

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

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

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/17115 2023/01/23 12:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング