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
500
Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_Go×LLM
OPTiM
August 08, 2024
Tweet
Share
More Decks by OPTiM
See All by OPTiM
Nuxt3マイグレーションについて / nuxt_migration
optim
1
120
挑戦を楽しむ!保守運用の管理課題への取り組み
optim
0
80
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
1
560
スプリントレビュー(バザー形式)とそれを支えるCI CD / sprint-review-bazaar-and-supporting-cicd
optim
0
630
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
optim
1
350
Metabaseを使ったコスト可視化とコスト最適化への道 / sre-cost-visualization
optim
0
690
新卒がアプリをEKSにデプロイした話 / sre-newcomer-deploy-app-to-eks
optim
1
340
Rustのイテレーター完全制覇 / domination-of-the-rust-iterators
optim
3
3.2k
大規模IoTシステムにおけるキャパシティプランニングの実践 / capacity-planning-iot
optim
0
640
Other Decks in Technology
See All in Technology
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.9k
日本版とグローバル版のモバイルアプリ統合の開発の裏側と今後の展望
miichan
1
140
20241218_今年はSLI/SLOの導入を頑張ってました!
zepprix
0
100
1等無人航空機操縦士一発試験 合格までの道のり ドローンミートアップ@大阪 2024/12/18
excdinc
0
180
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
39
16k
[JAWS-UG新潟#20] re:Invent2024 -CloudOperationsアップデートについて-
shintaro_fukatsu
0
120
PHP ユーザのための OpenTelemetry 入門 / phpcon2024-opentelemetry
shin1x1
3
1.4k
新機能VPCリソースエンドポイント機能検証から得られた考察
duelist2020jp
0
230
社内イベント管理システムを1週間でAKSからACAに移行した話し
shingo_kawahara
0
200
React Routerで実現する型安全なSPAルーティング
sansantech
PRO
2
280
能動的ドメイン名ライフサイクル管理のすゝめ / Practice on Active Domain Name Lifecycle Management
nttcom
0
240
小学3年生夏休みの自由研究「夏休みに Copilot で遊んでみた」
taichinakamura
0
180
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Documentation Writing (for coders)
carmenintech
67
4.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.1k
Side Projects
sachag
452
42k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
6.9k
YesSQL, Process and Tooling at Scale
rocio
169
14k
Keith and Marios Guide to Fast Websites
keithpitt
410
22k
Embracing the Ebb and Flow
colly
84
4.5k
[RailsConf 2023] Rails as a piece of cake
palkan
53
5.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
47
5.1k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.2k
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