Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_G...

OPTiM
August 08, 2024

Go×LLMで新たなコード生成の可能性を探る / GolangDeveloperNight_Go×LLM

OPTiM

August 08, 2024
Tweet

More Decks by OPTiM

Other Decks in Technology

Transcript

  1. © 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM

    Corp. All rights reserved. 1 株式会社オプティム シニアエンジニア 今枝 Go x LLMで 新たなコード生成の可能性を探る
  2. © 2019-2024 OPTiM Corp. All rights reserved. 2 自己紹介 【入社年度】

    20年度入社 【現職】 株式会社 オプティム シニアエンジニア 【最近主な業務・経歴】 エンジニア歴: 5年目 (Go, TypeScript, Vue.js, NestJS, k8s, Terraform) 3/27リリースの新サービス OPTiM サスマネ 開発 【紹介】 バックエンド(Go, TypeScript)や、 たまにフロント・インフラの部分も触ったりしています。 学生時代は競プロ楽しんでいました。 今枝 いまえだ
  3. © 2019-2024 OPTiM Corp. All rights reserved. 3 アジェンダ 

    はじめに  Goのコード生成の選択肢  アプリ開発に関連する既存のGoのコード生成ツール  アプリ開発に関連するLLMコード生成ツール  LLMと従来のコード生成を掛け合わしたコード生成・課題について  まとめ
  4. © 2019-2024 OPTiM Corp. All rights reserved. 4 はじめに 話すこと

    ◼ 既存のコード生成ツールについて ◼ LLMと既存のコード生成ツールを活用したコード生成手法について  話さないこと ◼ LLMのモデルについて ◼ LLMの細かいプロンプトチューニングの話
  5. © 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
  6. © 2019-2024 OPTiM Corp. All rights reserved. 6 目的 説明・具体例

    開発効率の向上 例:) • ボイラープレートコードの削減 • APIクライアントの生成 • データベースアクセス層の生成 • モックオブジェクトの生成 • 設定ファイルからのコード生成 コード品質とセキュリティの向上 • 型安全性の向上 • バリデーションコードの生成 • エラー処理コードの生成 パフォーマンスの最適化 • パフォーマンスの最適化されたコードの生成 • Protocol Buffers のコード生成 保守性と拡張性の向上 • ドキュメント生成 • 依存性注入コードの生成 相互運用性と プラットフォーム互換性の向上 コード変換し、異なる言語やシステム間の連携を容易にする アプリのコード生成の目的
  7. © 2019-2024 OPTiM Corp. All rights reserved. 7 コード生成の種類 コード生成

    大規模言語モデルによる コード生成 それ以外のコード生成 定型句等の テンプレートコードを生成して 人がコードを追記 人やコード再生成を駆使し、 コードを追加・編集してコードを管理 生成したコードに手を加えず 人はコード生成ツールの バージョンのみを管理する
  8. © 2019-2024 OPTiM Corp. All rights reserved. 8 既存のコード生成とLLMコード生成を組み合わせて使う メリット

    既存のコード生成 : 大量の決まりきったコードを生成可能 LLMのコード生成 : 不確実なコードも生成可能 LLM x 既存のコード生成 組み合わせでより効率的なコード生成 デメリット LLMのコード生成 大量のコード生成の場合は、時間とコストが かかる 既存のコード生成 不確実なコードは生成不可能 組み合わせて使うことで効果を発揮できそう
  9. © 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM

    Corp. All rights reserved. 9 アプリ開発に関連する 既存のGoのコード生成ツール API Interface(REST, GRPC), Go Template
  10. © 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
  11. © 2019-2024 OPTiM Corp. All rights reserved. 11 Go自体がテンプレート記法をサポートし、コード生成等は行いやすい言語 gomplate

    ◼JSON 、YAMLをインプットとして利用できるGoのテンプレート レンダラーツール Goのテンプレート生成について 出典: https://pkg.go.dev/text/template 出典: https://docs.gomplate.ca/
  12. © 2019-2024 OPTiM Corp. All rights reserved. © 2019-2024 OPTiM

    Corp. All rights reserved. 12 アプリ開発に関連する LLMコード生成ツール
  13. © 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の言及も…
  14. © 2019-2024 OPTiM Corp. All rights reserved. 14 タスクやCLIに統合して行うLLMのツール https://github.com/plandex-ai/plandex

     plandex ◼ AI コーディング エージェントのOSS ◼ 指定したファイルのみをcontextとして実行可能 ◼ Modelを自由に選択可能
  15. © 2019-2024 OPTiM Corp. All rights reserved. 15 LLM x

    既存のコード生成の例 大規模言語モデルによる コード生成 既存のコード生成 OpenAPI Generator plandex Go template (gomplate)
  16. © 2019-2024 OPTiM Corp. All rights reserved. 16 既存のコード生成 OpenAPI

    Generator x gomplate でテンプレートコードを生成 OpenAPI Generator openapi.yml gomplate xxx.go.tmpl
  17. © 2019-2024 OPTiM Corp. All rights reserved. 17 指定したファイルを投入 

    Plandex load で自動生成したTODOコメント付きのgoのコードを指定  plandex ls で投入したContextを確認 xxxx xxxx xxxx.go
  18. © 2019-2024 OPTiM Corp. All rights reserved. 19 指定したファイルを投入 

    Plandex tell でTODOコメントを確認して生成コードと対応を確認  Plandex Diff で更新差分を確認 xxxx.go
  19. © 2019-2024 OPTiM Corp. All rights reserved. 20 指定したファイルを投入 plandex

    diff で更新差分を確認 求めているの正解コードと一致
  20. © 2019-2024 OPTiM Corp. All rights reserved. 21 よかった点 

    plandexが読み込むコードを事前にMakefile等で指定し、より効率的に自動化が可能  TODOコメント等をテンプレート生成ができるツールと組み合わせることで、 LLMと既存のコード生成の良さの良いとこどりができる  Copilot Chat 等のコード指定等の生成でも利用できるテクニックになっている
  21. © 2019-2024 OPTiM Corp. All rights reserved. 22 課題 

    LLMが意図しないコードを削除し、Diffが表示されてしまう ◼ プロンプトの調整次第では解決できるかも?  そもそもGo言語が言語仕様上コードが多く、Tokenを大量に消費しまう ◼ 昨今Contextサイズも大きくなってきているので、 より多くのContextを読み込むモデルに差し替えることで対応できるかも?  plandex がOpenAI等の API Keyが必要なため、チームメンバーに渡す方法を検討する必要あ り ◼ CI等のツールにAPI Keyを登録し、手動起動のJobでコミット等をしてしまう運用?
  22. © 2019-2024 OPTiM Corp. All rights reserved. 23 まとめ 

    生成AIのコード生成も大事ですが既存のGoの便利な自動生成は活用していきましょう。  LLMのツール(Goで記載された)としてplandex を紹介  生成AIのツールと既存のコード生成ツールや テンプレートから生成したコードを組み合わせて、より生産的な開発ライフを!!!