Slide 1

Slide 1 text

© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM Corp. All rights reserved. 1 株式会社オプティム シニアエンジニア 今枝 Go x LLMで 新たなコード生成の可能性を探る

Slide 2

Slide 2 text

© 2019-2024 OPTiM Corp. All rights reserved. 2 自己紹介 【入社年度】 20年度入社 【現職】 株式会社 オプティム シニアエンジニア 【最近主な業務・経歴】 エンジニア歴: 5年目 (Go, TypeScript, Vue.js, NestJS, k8s, Terraform) 3/27リリースの新サービス OPTiM サスマネ 開発 【紹介】 バックエンド(Go, TypeScript)や、 たまにフロント・インフラの部分も触ったりしています。 学生時代は競プロ楽しんでいました。 今枝 いまえだ

Slide 3

Slide 3 text

© 2019-2024 OPTiM Corp. All rights reserved. 3 アジェンダ  はじめに  Goのコード生成の選択肢  アプリ開発に関連する既存のGoのコード生成ツール  アプリ開発に関連するLLMコード生成ツール  LLMと従来のコード生成を掛け合わしたコード生成・課題について  まとめ

Slide 4

Slide 4 text

© 2019-2024 OPTiM Corp. All rights reserved. 4 はじめに 話すこと ◼ 既存のコード生成ツールについて ◼ LLMと既存のコード生成ツールを活用したコード生成手法について  話さないこと ◼ LLMのモデルについて ◼ LLMの細かいプロンプトチューニングの話

Slide 5

Slide 5 text

© 2019-2024 OPTiM Corp. All rights reserved. 5  世はコード生成時代? コード生成時代? The Go Blog Generating code (2014) 普遍的な計算の性質、チューリング完全とは、 コンピュータプログラムがコンピュータプログラムを書けるということです。 これは非常に強力な概念であり、頻繁に起こっているにもかかわらず、それほどに評価されていません。 (Go Generateの紹介のblog https://go.dev/blog/generate ) 2024年では 「生成AI登場でプログラマーは「大量失業」時代へ…」 等の記事・ブログも出てくるほどコードを生成する時代に Thoughtworksが発表している技術トレンドがまとめられた Technology Radar 2024 4月版でもGitHub CopilotがTrial状態に (TRIAL: プロジェクトでリスクを管理できればやる価値はある。) 出典: https://www.thoughtworks.com/radar

Slide 6

Slide 6 text

© 2019-2024 OPTiM Corp. All rights reserved. 6 目的 説明・具体例 開発効率の向上 例:) • ボイラープレートコードの削減 • APIクライアントの生成 • データベースアクセス層の生成 • モックオブジェクトの生成 • 設定ファイルからのコード生成 コード品質とセキュリティの向上 • 型安全性の向上 • バリデーションコードの生成 • エラー処理コードの生成 パフォーマンスの最適化 • パフォーマンスの最適化されたコードの生成 • Protocol Buffers のコード生成 保守性と拡張性の向上 • ドキュメント生成 • 依存性注入コードの生成 相互運用性と プラットフォーム互換性の向上 コード変換し、異なる言語やシステム間の連携を容易にする アプリのコード生成の目的

Slide 7

Slide 7 text

© 2019-2024 OPTiM Corp. All rights reserved. 7 コード生成の種類 コード生成 大規模言語モデルによる コード生成 それ以外のコード生成 定型句等の テンプレートコードを生成して 人がコードを追記 人やコード再生成を駆使し、 コードを追加・編集してコードを管理 生成したコードに手を加えず 人はコード生成ツールの バージョンのみを管理する

Slide 8

Slide 8 text

© 2019-2024 OPTiM Corp. All rights reserved. 8 既存のコード生成とLLMコード生成を組み合わせて使う メリット 既存のコード生成 : 大量の決まりきったコードを生成可能 LLMのコード生成 : 不確実なコードも生成可能 LLM x 既存のコード生成 組み合わせでより効率的なコード生成 デメリット LLMのコード生成 大量のコード生成の場合は、時間とコストが かかる 既存のコード生成 不確実なコードは生成不可能 組み合わせて使うことで効果を発揮できそう

Slide 9

Slide 9 text

© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM Corp. All rights reserved. 9 アプリ開発に関連する 既存のGoのコード生成ツール API Interface(REST, GRPC), Go Template

Slide 10

Slide 10 text

© 2019-2024 OPTiM Corp. All rights reserved. 10  bufbuild/buf ◼ Protocol Buffers からGRPC用のサーバー・クライアントのモデル等を生成 openapi-generator ◼ OpenAPIのコードから複数言語のサーバー・クライアントのモデル・実装を生成 oapi-codegen (Go専用) ◼OpenAPI 仕様を Go 言語のコードの サーバー・APIクライアント・HTTPのモデル実装を生成するCLI &ライブラリ API Interface

Slide 11

Slide 11 text

© 2019-2024 OPTiM Corp. All rights reserved. 11 Go自体がテンプレート記法をサポートし、コード生成等は行いやすい言語 gomplate ◼JSON 、YAMLをインプットとして利用できるGoのテンプレート レンダラーツール Goのテンプレート生成について 出典: https://pkg.go.dev/text/template 出典: https://docs.gomplate.ca/

Slide 12

Slide 12 text

© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM Corp. All rights reserved. 12 アプリ開発に関連する LLMコード生成ツール

Slide 13

Slide 13 text

© 2019-2024 OPTiM Corp. All rights reserved. 13  GitHub Copilot  Cursor Gemini Code Assist ◼Project IDX β版 (2024年5月14日) エディタに統合されたコード支援 出典: https://github.com/features/copilot/ コードの補完, コードの解説やコードレビューも担当可能 必要なコンテキストや、細かく補完を効かせながら開発 ただ、可能であれば、テンプレート作業にも組み込んで活用したい!! 55%コーディングが早くなる というGitHub Copilotの言及も…

Slide 14

Slide 14 text

© 2019-2024 OPTiM Corp. All rights reserved. 14 タスクやCLIに統合して行うLLMのツール https://github.com/plandex-ai/plandex  plandex ◼ AI コーディング エージェントのOSS ◼ 指定したファイルのみをcontextとして実行可能 ◼ Modelを自由に選択可能

Slide 15

Slide 15 text

© 2019-2024 OPTiM Corp. All rights reserved. 15 LLM x 既存のコード生成の例 大規模言語モデルによる コード生成 既存のコード生成 OpenAPI Generator plandex Go template (gomplate)

Slide 16

Slide 16 text

© 2019-2024 OPTiM Corp. All rights reserved. 16 既存のコード生成 OpenAPI Generator x gomplate でテンプレートコードを生成 OpenAPI Generator openapi.yml gomplate xxx.go.tmpl

Slide 17

Slide 17 text

© 2019-2024 OPTiM Corp. All rights reserved. 17 指定したファイルを投入  Plandex load で自動生成したTODOコメント付きのgoのコードを指定  plandex ls で投入したContextを確認 xxxx xxxx xxxx.go

Slide 18

Slide 18 text

© 2019-2024 OPTiM Corp. All rights reserved. 18 テンプレートから自動生成したコードを用意 テンプレートからTODOコメントが付与されたContextとして投入したコード

Slide 19

Slide 19 text

© 2019-2024 OPTiM Corp. All rights reserved. 19 指定したファイルを投入  Plandex tell でTODOコメントを確認して生成コードと対応を確認  Plandex Diff で更新差分を確認 xxxx.go

Slide 20

Slide 20 text

© 2019-2024 OPTiM Corp. All rights reserved. 20 指定したファイルを投入 plandex diff で更新差分を確認 求めているの正解コードと一致

Slide 21

Slide 21 text

© 2019-2024 OPTiM Corp. All rights reserved. 21 よかった点  plandexが読み込むコードを事前にMakefile等で指定し、より効率的に自動化が可能  TODOコメント等をテンプレート生成ができるツールと組み合わせることで、 LLMと既存のコード生成の良さの良いとこどりができる  Copilot Chat 等のコード指定等の生成でも利用できるテクニックになっている

Slide 22

Slide 22 text

© 2019-2024 OPTiM Corp. All rights reserved. 22 課題  LLMが意図しないコードを削除し、Diffが表示されてしまう ◼ プロンプトの調整次第では解決できるかも?  そもそもGo言語が言語仕様上コードが多く、Tokenを大量に消費しまう ◼ 昨今Contextサイズも大きくなってきているので、 より多くのContextを読み込むモデルに差し替えることで対応できるかも?  plandex がOpenAI等の API Keyが必要なため、チームメンバーに渡す方法を検討する必要あ り ◼ CI等のツールにAPI Keyを登録し、手動起動のJobでコミット等をしてしまう運用?

Slide 23

Slide 23 text

© 2019-2024 OPTiM Corp. All rights reserved. 23 まとめ  生成AIのコード生成も大事ですが既存のGoの便利な自動生成は活用していきましょう。  LLMのツール(Goで記載された)としてplandex を紹介  生成AIのツールと既存のコード生成ツールや テンプレートから生成したコードを組み合わせて、より生産的な開発ライフを!!!

Slide 24

Slide 24 text

© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM Corp. All rights reserved. 24