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
3.8k
1
Share
統一感のある Go コードを生成 AI の力で手にいれる
The Go gopher was designed by Renée French.
https://gotalk.connpass.com/event/355423/
Kotaro Otaka
June 11, 2025
More Decks by Kotaro Otaka
See All by Kotaro Otaka
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
650
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
200
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
540
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
120
SQLBoiler がメンテナンスモードになりまして
otakakot
0
320
Wasm わからないけど Go で実装したいから入門する
otakakot
1
10k
cmp.Or に感動した
otakakot
3
1k
net/http/httptest が推しです♡
otakakot
3
390
無料で楽しむ Go サーバー開発のススメ
otakakot
11
4.2k
Other Decks in Programming
See All in Programming
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
190
アーキテクチャモダナイゼーションとは何か
nwiizo
17
4.4k
Radical Imagining - LIFT 2025-2027 Policy Agenda
lift1998
0
250
Geminiをパートナーに神社DXシステムを個人開発した話(いなめぐDX 開発振り返り)
fujiba
0
140
AI時代の脳疲弊と向き合う ~言語学としてのPHP~
sakuraikotone
1
1.8k
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
220
へんな働き方
yusukebe
6
2.9k
安いハードウェアでVulkan
fadis
1
920
Laravel Nightwatchの裏側 - Laravel公式Observabilityツールを支える設計と実装
avosalmon
1
320
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
310
一度始めたらやめられない開発効率向上術 / Findy あなたのdotfilesを教えて!
k0kubun
4
2.8k
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
Featured
See All Featured
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
170
How to build a perfect <img>
jonoalderson
1
5.3k
Site-Speed That Sticks
csswizardry
13
1.1k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
200
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
The Organizational Zoo: Understanding Human Behavior Agility Through Metaphoric Constructive Conversations (based on the works of Arthur Shelley, Ph.D)
kimpetersen
PRO
0
300
Documentation Writing (for coders)
carmenintech
77
5.3k
Designing Experiences People Love
moore
143
24k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
170
The Curse of the Amulet
leimatthew05
1
11k
How to Think Like a Performance Engineer
csswizardry
28
2.5k
The untapped power of vector embeddings
frankvandijk
2
1.7k
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 に修正させるのではなく 自動修正コードを書かせよう!
おわり またどこかで お会いしましょう!