TSKaigi

トーク

ts-morphで、人間も編集できるコード生成を実現しよう!
セッション
ts-morphで、人間も編集できるコード生成を実現しよう!
DAY2 / 14:00 〜 14:30トグルルーム

概要

/* This file is auto generated. Do not edit manually */

というコメントに見覚えのある方は多いのではないでしょうか。

このセッションでは、自動生成したコードと、プログラマが書いたコードを両立させるアプローチについて説明します。

背景と内容

昨今、OpenAPIなどのスキーマファイルからコードを生成するアプローチはポピュラーなものとなっています。

しかし、クラスを使ったアプローチをするフレームワーク・言語と違い、私が業務で利用している Fastify は生成したコードを人の手で編集したい要求があります。

// ここのテンプレート部分は自動生成したい
server.post("/hoge", hogeSchema, async (req) => { 
  // 関数呼び出しの中身は、自分で実装したい & 次生成した場合に消えたら困る。
   someLogic(req.body.id)
})

1つのファイルの中で、「自動生成したいコード」と「人の手で編集しコード生成時にも消してほしくないコード」が入り混じることになります。これは、従来のトップダウンなコード生成では実現が難しく、現状の実装を解析し、必要な部分だけ再生成する戦略が必要です。

今回は、この解析部分と自動生成部分にts-morphを利用し、自動生成と手動編集を両立させる方法を扱います。

対象

  • コード生成に興味がある方
  • ASTに触れてみたい方
  • Fastify・Expressなどを利用したバックエンド開発を効率化したい方
池奥裕太/@yuta-ike

池奥裕太/@yuta-ike

エムスリー株式会社 / デジスマチーム / ソフトウェアエンジニア

2024年にエムスリー株式会社に新卒入社。デジスマ診療のプロダクト開発や、新規サービスのバックエンド・インフラを担当。TSKaigiスタッフ。好きなエディタはFigmaです。 2024年度 未踏クリエイター。

https://zenn.dev/yuta_ike
XGitHub