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
480
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
77
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
1
550
スプリントレビュー(バザー形式)とそれを支えるCI CD / sprint-review-bazaar-and-supporting-cicd
optim
0
620
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
optim
1
340
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
第3回Snowflake女子会_LT登壇資料(合成データ)_Taro_CCCMK
tarotaro0129
0
190
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
MLOps の現場から
asei
6
640
終了の危機にあった15年続くWebサービスを全力で存続させる - phpcon2024
yositosi
10
7.9k
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
170
NilAway による静的解析で「10 億ドル」を節約する #kyotogo / Kyoto Go 56th
ytaka23
3
380
生成AIのガバナンスの全体像と現実解
fnifni
1
190
AI時代のデータセンターネットワーク
lycorptech_jp
PRO
1
280
TSKaigi 2024 の登壇から広がったコミュニティ活動について
tsukuha
0
160
Fanstaの1年を大解剖! 一人SREはどこまでできるのか!?
syossan27
2
170
Wantedly での Datadog 活用事例
bgpat
1
440
非機能品質を作り込むための実践アーキテクチャ
knih
5
1.3k
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
427
64k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Scaling GitHub
holman
458
140k
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Documentation Writing (for coders)
carmenintech
66
4.5k
Automating Front-end Workflow
addyosmani
1366
200k
We Have a Design System, Now What?
morganepeng
51
7.3k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Done Done
chrislema
181
16k
Code Reviewing Like a Champion
maltzj
520
39k
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