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
180
Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_Go×LLM
optim
August 08, 2024
Tweet
Share
More Decks by optim
See All by optim
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
0
78
スプリントレビュー(バザー形式)とそれを支えるCI CD / sprint-review-bazaar-and-supporting-cicd
optim
0
300
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
optim
1
260
Metabaseを使ったコスト可視化とコスト最適化への道 / sre-cost-visualization
optim
0
600
新卒がアプリをEKSにデプロイした話 / sre-newcomer-deploy-app-to-eks
optim
1
290
Rustのイテレーター完全制覇 / domination-of-the-rust-iterators
optim
3
3k
JaSSTnano20210615
optim
0
1.3k
大規模IoTシステムにおけるキャパシティプランニングの実践 / capacity-planning-iot
optim
0
580
QA for Green Engineer
optim
0
700
Other Decks in Technology
See All in Technology
標準ライブラリの奥深アップデートを掘り下げよう!
logica0419
2
440
分野に潜むツールの紹介
pojiro
1
360
突撃! 隣のAmazon Bedrockユーザー 〜YouはどうしてAWSで?〜
minorun365
PRO
3
270
LandingZoneAccelerator と学ぶ 「スケーラブルで安全なマルチアカウントAWS環境」と 私たちにもできるベストプラクティス
maimyyym
1
120
Datadog を使ったプロダクトとクラウドの セキュリティモニタリング
mrtc0
0
610
なにもしてないのにNew Relicのデータ転送量が増えていたときに確認したこと
tk3fftk
2
150
[RSJ24] Object Retrieval in Large-Scale Indoor Environments Using Dense Text with a Multi-Modal Large Language Model
keio_smilab
PRO
1
240
Estrategias de escalabilidade para projetos web
jessilyneh
2
210
忙しい人のためのLangGraph概要まとめ
__ymgc__
1
120
waitany と waitall を作った話
mrkn
0
120
マーケットプレイス版Oracle WebCenter Content For OCI
oracle4engineer
PRO
2
170
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
9
41k
Featured
See All Featured
The Mythical Team-Month
searls
218
43k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
58k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
24
590
Dealing with People You Can't Stand - Big Design 2015
cassininazir
363
22k
Intergalactic Javascript Robots from Outer Space
tanoku
268
26k
Automating Front-end Workflow
addyosmani
1365
200k
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
The Illustrated Children's Guide to Kubernetes
chrisshort
47
48k
The Art of Programming - Codeland 2020
erikaheidi
48
13k
RailsConf 2023
tenderlove
27
800
How to Think Like a Performance Engineer
csswizardry
16
940
Facilitating Awesome Meetings
lara
49
5.9k
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