Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_G...
Search
OPTiM
August 08, 2024
Technology
0
380
Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_Go×LLM
OPTiM
August 08, 2024
Tweet
Share
More Decks by OPTiM
See All by OPTiM
Nuxt3マイグレーションについて / nuxt_migration
optim
0
100
挑戦を楽しむ!保守運用の管理課題への取り組み
optim
0
68
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
1
490
スプリントレビュー(バザー形式)とそれを支えるCI CD / sprint-review-bazaar-and-supporting-cicd
optim
0
550
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
optim
1
320
Metabaseを使ったコスト可視化とコスト最適化への道 / sre-cost-visualization
optim
0
670
新卒がアプリをEKSにデプロイした話 / sre-newcomer-deploy-app-to-eks
optim
1
330
Rustのイテレーター完全制覇 / domination-of-the-rust-iterators
optim
3
3.1k
大規模IoTシステムにおけるキャパシティプランニングの実践 / capacity-planning-iot
optim
0
620
Other Decks in Technology
See All in Technology
【Startup CTO of the Year 2024 / Audience Award】アセンド取締役CTO 丹羽健
niwatakeru
0
1.3k
Lexical Analysis
shigashiyama
1
150
OCI Security サービス 概要
oracle4engineer
PRO
0
6.5k
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
480
ノーコードデータ分析ツールで体験する時系列データ分析超入門
negi111111
0
410
10XにおけるData Contractの導入について: Data Contract事例共有会
10xinc
6
650
OTelCol_TailSampling_and_SpanMetrics
gumamon
1
180
AWS Lambda のトラブルシュートをしていて思うこと
kazzpapa3
2
180
Can We Measure Developer Productivity?
ewolff
1
150
Flutterによる 効率的なAndroid・iOS・Webアプリケーション開発の事例
recruitengineers
PRO
0
110
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
AGIについてChatGPTに聞いてみた
blueb
0
130
Featured
See All Featured
Fashionably flexible responsive web design (full day workshop)
malarkey
405
65k
Speed Design
sergeychernyshev
25
620
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
126
18k
It's Worth the Effort
3n
183
27k
Building Applications with DynamoDB
mza
90
6.1k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Designing on Purpose - Digital PM Summit 2013
jponch
115
7k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
720
Visualization
eitanlees
145
15k
4 Signs Your Business is Dying
shpigford
180
21k
A designer walks into a library…
pauljervisheath
204
24k
Keith and Marios Guide to Fast Websites
keithpitt
409
22k
Transcript
© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM
Corp. All rights reserved. 1 株式会社オプティム シニアエンジニア 今枝 Go x LLMで 新たなコード生成の可能性を探る
© 2019-2024 OPTiM Corp. All rights reserved. 2 自己紹介 【入社年度】
20年度入社 【現職】 株式会社 オプティム シニアエンジニア 【最近主な業務・経歴】 エンジニア歴: 5年目 (Go, TypeScript, Vue.js, NestJS, k8s, Terraform) 3/27リリースの新サービス OPTiM サスマネ 開発 【紹介】 バックエンド(Go, TypeScript)や、 たまにフロント・インフラの部分も触ったりしています。 学生時代は競プロ楽しんでいました。 今枝 いまえだ
© 2019-2024 OPTiM Corp. All rights reserved. 3 アジェンダ
はじめに Goのコード生成の選択肢 アプリ開発に関連する既存のGoのコード生成ツール アプリ開発に関連するLLMコード生成ツール LLMと従来のコード生成を掛け合わしたコード生成・課題について まとめ
© 2019-2024 OPTiM Corp. All rights reserved. 4 はじめに 話すこと
◼ 既存のコード生成ツールについて ◼ LLMと既存のコード生成ツールを活用したコード生成手法について 話さないこと ◼ LLMのモデルについて ◼ LLMの細かいプロンプトチューニングの話
© 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
© 2019-2024 OPTiM Corp. All rights reserved. 6 目的 説明・具体例
開発効率の向上 例:) • ボイラープレートコードの削減 • APIクライアントの生成 • データベースアクセス層の生成 • モックオブジェクトの生成 • 設定ファイルからのコード生成 コード品質とセキュリティの向上 • 型安全性の向上 • バリデーションコードの生成 • エラー処理コードの生成 パフォーマンスの最適化 • パフォーマンスの最適化されたコードの生成 • Protocol Buffers のコード生成 保守性と拡張性の向上 • ドキュメント生成 • 依存性注入コードの生成 相互運用性と プラットフォーム互換性の向上 コード変換し、異なる言語やシステム間の連携を容易にする アプリのコード生成の目的
© 2019-2024 OPTiM Corp. All rights reserved. 7 コード生成の種類 コード生成
大規模言語モデルによる コード生成 それ以外のコード生成 定型句等の テンプレートコードを生成して 人がコードを追記 人やコード再生成を駆使し、 コードを追加・編集してコードを管理 生成したコードに手を加えず 人はコード生成ツールの バージョンのみを管理する
© 2019-2024 OPTiM Corp. All rights reserved. 8 既存のコード生成とLLMコード生成を組み合わせて使う メリット
既存のコード生成 : 大量の決まりきったコードを生成可能 LLMのコード生成 : 不確実なコードも生成可能 LLM x 既存のコード生成 組み合わせでより効率的なコード生成 デメリット LLMのコード生成 大量のコード生成の場合は、時間とコストが かかる 既存のコード生成 不確実なコードは生成不可能 組み合わせて使うことで効果を発揮できそう
© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM
Corp. All rights reserved. 9 アプリ開発に関連する 既存のGoのコード生成ツール API Interface(REST, GRPC), Go Template
© 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
© 2019-2024 OPTiM Corp. All rights reserved. 11 Go自体がテンプレート記法をサポートし、コード生成等は行いやすい言語 gomplate
◼JSON 、YAMLをインプットとして利用できるGoのテンプレート レンダラーツール Goのテンプレート生成について 出典: https://pkg.go.dev/text/template 出典: https://docs.gomplate.ca/
© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM
Corp. All rights reserved. 12 アプリ開発に関連する LLMコード生成ツール
© 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の言及も…
© 2019-2024 OPTiM Corp. All rights reserved. 14 タスクやCLIに統合して行うLLMのツール https://github.com/plandex-ai/plandex
plandex ◼ AI コーディング エージェントのOSS ◼ 指定したファイルのみをcontextとして実行可能 ◼ Modelを自由に選択可能
© 2019-2024 OPTiM Corp. All rights reserved. 15 LLM x
既存のコード生成の例 大規模言語モデルによる コード生成 既存のコード生成 OpenAPI Generator plandex Go template (gomplate)
© 2019-2024 OPTiM Corp. All rights reserved. 16 既存のコード生成 OpenAPI
Generator x gomplate でテンプレートコードを生成 OpenAPI Generator openapi.yml gomplate xxx.go.tmpl
© 2019-2024 OPTiM Corp. All rights reserved. 17 指定したファイルを投入
Plandex load で自動生成したTODOコメント付きのgoのコードを指定 plandex ls で投入したContextを確認 xxxx xxxx xxxx.go
© 2019-2024 OPTiM Corp. All rights reserved. 18 テンプレートから自動生成したコードを用意 テンプレートからTODOコメントが付与されたContextとして投入したコード
© 2019-2024 OPTiM Corp. All rights reserved. 19 指定したファイルを投入
Plandex tell でTODOコメントを確認して生成コードと対応を確認 Plandex Diff で更新差分を確認 xxxx.go
© 2019-2024 OPTiM Corp. All rights reserved. 20 指定したファイルを投入 plandex
diff で更新差分を確認 求めているの正解コードと一致
© 2019-2024 OPTiM Corp. All rights reserved. 21 よかった点
plandexが読み込むコードを事前にMakefile等で指定し、より効率的に自動化が可能 TODOコメント等をテンプレート生成ができるツールと組み合わせることで、 LLMと既存のコード生成の良さの良いとこどりができる Copilot Chat 等のコード指定等の生成でも利用できるテクニックになっている
© 2019-2024 OPTiM Corp. All rights reserved. 22 課題
LLMが意図しないコードを削除し、Diffが表示されてしまう ◼ プロンプトの調整次第では解決できるかも? そもそもGo言語が言語仕様上コードが多く、Tokenを大量に消費しまう ◼ 昨今Contextサイズも大きくなってきているので、 より多くのContextを読み込むモデルに差し替えることで対応できるかも? plandex がOpenAI等の API Keyが必要なため、チームメンバーに渡す方法を検討する必要あ り ◼ CI等のツールにAPI Keyを登録し、手動起動のJobでコミット等をしてしまう運用?
© 2019-2024 OPTiM Corp. All rights reserved. 23 まとめ
生成AIのコード生成も大事ですが既存のGoの便利な自動生成は活用していきましょう。 LLMのツール(Goで記載された)としてplandex を紹介 生成AIのツールと既存のコード生成ツールや テンプレートから生成したコードを組み合わせて、より生産的な開発ライフを!!!
© 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM
Corp. All rights reserved. 24