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
890
Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_Go×LLM
OPTiM
August 08, 2024
Tweet
Share
More Decks by OPTiM
See All by OPTiM
IoT機器の一括デバイスプロビジョニングと遠隔操作の技術 / 20250424-iot-aoki
optim
0
36
ClineにNext.jsのプロジェクト改善をお願いしてみた / 20250321_reacttokyo_LT
optim
2
1.9k
k8s(EKS)でマルチテナントプラットフォームを運用する際のコスト按分の実装 / 250124_LT_SRE
optim
0
49
MDMサービスの巨大さと特殊さに負けない開発体制と品質プロセス / technight250218
optim
0
110
Nuxt3マイグレーションについて / nuxt_migration
optim
1
220
挑戦を楽しむ!保守運用の管理課題への取り組み
optim
0
150
開発生産性を始める前に開発チームができること / optim-improve-development-productivity.pdf
optim
1
900
スプリントレビュー(バザー形式)とそれを支えるCI CD / sprint-review-bazaar-and-supporting-cicd
optim
0
970
Vue.jsを用いて数万の農地データ情報を数秒で表示させるまでのカイゼンの軌跡
optim
1
470
Other Decks in Technology
See All in Technology
Oracle Audit Vault and Database Firewall 20 概要
oracle4engineer
PRO
3
1.7k
Amplifyとゼロからはじめた AIコーディング 成果と展望
mkdev10
1
380
Uniadex__公開版_20250617-AIxIoTビジネス共創ラボ_ツナガルチカラ_.pdf
iotcomjpadmin
0
150
初めてのAzure FunctionsをClaude Codeで作ってみた / My first Azure Functions using Claude Code
hideakiaoyagi
1
200
エンジニア向け技術スタック情報
kauche
1
120
LinkX_GitHubを基点にした_AI時代のプロジェクトマネジメント.pdf
iotcomjpadmin
0
160
Agentic Workflowという選択肢を考える
tkikuchi1002
1
430
AWS Summit Japan 2025 Community Stage - App workflow automation by AWS Step Functions
matsuihidetoshi
1
170
AWS CDK 実践的アプローチ N選 / aws-cdk-practical-approaches
gotok365
5
580
OpenHands🤲にContributeしてみた
kotauchisunsun
1
320
Claude Code Actionを使ったコード品質改善の取り組み
potix2
PRO
6
1.9k
登壇ネタの見つけ方 / How to find talk topics
pinkumohikan
3
330
Featured
See All Featured
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Building Adaptive Systems
keathley
43
2.6k
Stop Working from a Prison Cell
hatefulcrawdad
270
20k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
31
1.2k
Being A Developer After 40
akosma
90
590k
Rails Girls Zürich Keynote
gr2m
94
14k
RailsConf 2023
tenderlove
30
1.1k
Why You Should Never Use an ORM
jnunemaker
PRO
56
9.4k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
228
22k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Facilitating Awesome Meetings
lara
54
6.4k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
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