Home

Sessions

Timetable

Floor Guide

Staff

English

AIと静的解析を組み合わせたコード生成の仕組みをつくる

Room B : B4-S

Go言語を使ったプロジェクトにおいて、開発生産性を上げていくためにコード生成の仕組みに取り組んでいる組織は少なくないと思います。実際に、例えばREST APIであればswaggerなどのスキーマファイルからoapi-codegen[1]などを使用してGoのhttpハンドラー周りのコードを生成したり、DBのスキーマ定義をもとにxo[2]などを使用してGoのDB操作周りのコードを生成するケースをよく見ることがあります。また、より簡易的にはgotests[3]などを使用して、スニペットのようにGoのテストの枠組みを生成するケースもあると思います。 しかし、静的解析だけによるコード生成は基本的には何らかの決まりきったルールによってのみコードが生成されていくモノだと考えています。 今回の発表では、jennifer[4]を用いたAST構築による静的解析ベースのコード生成をまずは出発点として、そこに大規模言語モデルのような機械学習を活用し、より柔軟性を持たせた形でのコード生成の仕組みを作ろうと思います。 そうすることで、usecaseやentityといった事業ドメインに近くほとんどのケースでコード生成を適用できないような領域に対しても、少しずつコード生成が適用されていく様子をお伝えできたらと考えています。また、ルールベースでは生成することが難しい、ユニットテストにおけるテストケース自体についてもコード生成がどこまで適用出来るのかをお伝えすることができたらと思います。 また、そういったコード生成の仕組みをどのように普段の開発プロジェクトに投入して行って、チームとしての開発生産性を高めているかという話にも触れようと考えています。 jenniferやGoのコードの静的解析の中身や仕組み自体についてはこの発表ではあまり触れず、そちらについては既に素晴らしい発表等[5]があるので参照していただく形にして、 この発表では 1. 静的解析を使ったコード生成のおさらい (20%) 2. AI/機械学習を使ったコード生成の方法・仕組みと、実際にどこまで適用できるのか (60%) 3. 実際の開発プロジェクトに投入する上で、工夫している点(20%) のような構成にして、静的解析のみによるコードの生成から一歩進んだ部分に焦点を当てたものにすることで、この発表内で収まるものと考えています。 大規模言語モデル周りの技術がまさに日進月歩なため、発表時点までに実装内容の方針が変更されることが想定されますが、現段階ではGPTモデルに対して既存の実装をもとにAPIを通して生成したいコードを複数パターン要求し、それを開発者が適宜選択しつつ、エラーを修正したり細かい調整をするようなやり方がプロジェクトに適切にフィットしていると感じています。 [1] https://github.com/deepmap/oapi-codegen [2] https://github.com/xo/xo [3] https://github.com/cweill/gotests [4] https://github.com/dave/jennifer [5] GoConference 2022 であれば https://gocon.jp/2022spring/ja/sessions/b8-shttps://gocon.jp/2022spring/ja/sessions/b3-lなど

Short Talk(20min)
稲田 修也

稲田 修也

Supreme System, Midas Capital

Supreme Systemという会社で開発責任者をやっています 普段はGoや機械学習周りのコードを書いたり社内のGopher教育を行なっています 全体の開発生産性に対して責任を負っている部分もあるので、この辺りの知見共有も好きです

ツイート
gopher conductorgopher drummergopher trumpetergopher pom pomgopher flower blue