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 コードを生成 AI の力で手にいれる
Search
Kotaro Otaka
June 11, 2025
Programming
1
3.5k
統一感のある Go コードを生成 AI の力で手にいれる
The Go gopher was designed by Renée French.
https://gotalk.connpass.com/event/355423/
Kotaro Otaka
June 11, 2025
Tweet
Share
More Decks by Kotaro Otaka
See All by Kotaro Otaka
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
53
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
400
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
13
SQLBoiler がメンテナンスモードになりまして
otakakot
0
190
Wasm わからないけど Go で実装したいから入門する
otakakot
1
10k
cmp.Or に感動した
otakakot
3
870
net/http/httptest が推しです♡
otakakot
3
300
無料で楽しむ Go サーバー開発のススメ
otakakot
11
3.8k
Go のテストで失敗をマークする
otakakot
1
230
Other Decks in Programming
See All in Programming
Amazon Bedrock Knowledge Bases Hands-on
konny0311
0
150
Chart.jsで長い項目を表示するときのハマりどころ
yumechi
0
150
Honoを技術選定したAI要件定義プラットフォームAcsimでの意思決定
codenote
0
250
OSS開発者の憂鬱
yusukebe
12
5.5k
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
0
150
CSC509 Lecture 13
javiergs
PRO
0
260
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
460
CloudflareのSandbox SDKを試してみた
syumai
0
170
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
700
r2-image-worker
yusukebe
1
170
しっかり学ぶ java.lang.*
nagise
1
410
What's New in Web AI?
christianliebel
PRO
0
130
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
3.8k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
1.8k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Into the Great Unknown - MozCon
thekraken
40
2.2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
285
14k
Large-scale JavaScript Application Architecture
addyosmani
514
110k
Thoughts on Productivity
jonyablonski
73
4.9k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Raft: Consensus for Rubyists
vanstee
140
7.2k
The Language of Interfaces
destraynor
162
25k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8k
Transcript
The Go gopher was designed by Renée French. 統一感のある Go
コードを 生成 AI の力で手にいれる おーたかこーたろー / @otakakot 2025.06.11 Go Connect #7
Go コードに統一感をもたらすためには 静的解析は非常に強力な手段 #goconnect #goconnect
golangci-lint が活躍 #goconnect #goconnect https://github.com/golangci/golangci-lint
こんな経験ありませんか? #goconnect
#goconnect 対応箇所が多くて めんどくさい linter / formatter が 存在しない
こんな課題を解決するための 生成AIを使った取り組みをご紹介 #goconnect
Kotaro Otaka おーたかこーたろー / @otakakot #goconnect Web Engineer 新卒入社 Hello
Golang! Web Engineer @株式会社ビットキー 2020.04 2021.04 2022.11 Go言語推し
#goconnect 前提 https://github.com/features/copilot GitHub Copilot を活用
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect golangci-lint の指摘 直すのめんどくさいな
#goconnect そうだ!生成AIに直させよう! はい 直して
#goconnect golangci-lint v1.8.0 Long Length Liner 指定した文字数を 超えたら指摘 https://github.com/walle/lll
#goconnect サンプルコード
#goconnect golangci-lint を実行 このエラーメッセージを そのまま送信
#goconnect GitHub Copilot の回答
#goconnect GitHub Copilot の提案を適用
#goconnect ファイル単位での作業なので 時間がかかる トークンの消費も 多くなる
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect GitHub Copilot に修正コードを 書かせてみるのは?
#goconnect golangci-lint v1.8.0 Long Length Liner 指定した行数を 超えたら指摘 https://github.com/walle/lll
#goconnect 関数・メソッド & コメント 対応すべきは2パターン
#goconnect 関数・メソッド & コメント(before)
#goconnect 関数・メソッド & コメント(after) nolint:lll を付与 引数を改行
#goconnect GitHub Copilot に依頼 go/ast パッケージを使って
#goconnect 適応 → 修正を繰り返す はい 作って 直して
#goconnect ポイント コードは使い捨てと割り切る 完成度は8割程度でOK 複雑化をさけるためひとつの処理に集中
#goconnect そんなこんなで晴れて完成しましたが...
#goconnect すでに OSS ライブラリが存在
#goconnect golangci-lint v2.0.0 長い行を短縮 オプションで コメントにも対応 https://github.com/segmentio/golines
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect 独自の linter / formatter 欲しいな
#goconnect これも Copilot に書かせてみよう!
#goconnect 文字列リテラルを変換したい `` バッククォートを “” ダブルクォートに
#goconnect 一括置換では不可能 https://go.dev/ より抜粋
#goconnect GitHub Copilot に依頼 go/ast パッケージを使って
#goconnect 適応 → 修正を繰り返す はい 作って 直して
#goconnect サンプルコードだけだと精度が低い 実際に修正したいコードを使って試行錯誤 ポイント
#goconnect 独自の formatter の実装が可能に! ぱち ぱち ぱち
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect 毎回ゼロから作らせるの安定しないし 調整する時間もったいないな
#goconnect 以下のコードをテンプレート化 自動生成コード の除外 ファイルの フォーマット 対象ファイル or ディレクトリの指定 ファイルへの
書き込み vendor ディレクトリ の除外
#goconnect テンプレート化してみましたが ...
#goconnect すでにある仕組みだと気づきまして... ぴえん...
#goconnect https://pkg.go.dev/golang.org/x/tools/go/analysis
#goconnect https://engineering.mercari.com/blog/entry/2018-12-16-150000/
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect error のスコープ制限したいな
#goconnect before
#goconnect before err のスコープを限定できる
#goconnect after
#goconnect tenntenn さんが開発 静的解析ツールの スケルトンコード生成 初期化コードや テストコード https://github.com/gostaticanalysis/skeleton
#goconnect run 関数を修正させる
#goconnect 適応 → 修正を繰り返す はい 作って 直して
#goconnect 精度をあげる テストコード 増やして このパターンも 対応して はい
#goconnect error 変数の スコープを判定 if スコープに 閉じ込められるか指摘 よかったら 使ってみてね https://github.com/otakakot/errifscope
INDEX 01 生成AIに修正させる 02 対 golangci-lint を作ってみる 03 独自 formatter
を作ってみる 04 生成 AI のためにテンプレートを作る 05 独自 linter を作ってみる 06 まとめ
#goconnect まとめ 生成 AI に修正させるのではなく 自動修正コードを書かせよう!
おわり またどこかで お会いしましょう!