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.7k
統一感のある 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
PostgreSQL を使った快適な go test 環境を求めて
otakakot
0
580
Go で作った CLI ツールにバージョンを埋め込みたい
otakakot
0
200
組込みだけじゃない!TinyGo で始める無料クラウド開発入門
otakakot
2
520
組込みだけじゃない! TinyGo で始める無料クラウド開発入門
otakakot
1
110
SQLBoiler がメンテナンスモードになりまして
otakakot
0
310
Wasm わからないけど Go で実装したいから入門する
otakakot
1
10k
cmp.Or に感動した
otakakot
3
1k
net/http/httptest が推しです♡
otakakot
3
380
無料で楽しむ Go サーバー開発のススメ
otakakot
11
4.2k
Other Decks in Programming
See All in Programming
どんと来い、データベース信頼性エンジニアリング / Introduction to DBRE
nnaka2992
1
320
今からFlash開発できるわけないじゃん、ムリムリ! (※ムリじゃなかった!?)
arkw
0
130
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
260
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
AIに任せる範囲を安全に広げるためにやっていること
fukucheee
0
150
AI活用のコスパを最大化する方法
ochtum
0
260
存在論的プログラミング: 時間と存在を記述する
koriym
3
290
社内規程RAGの精度を73.3% → 100%に改善した話
oharu121
13
8.2k
ふつうの Rubyist、ちいさなデバイス、大きな一年
bash0c7
0
1.1k
我々はなぜ「層」を分けるのか〜「関心の分離」と「抽象化」で手に入れる変更に強いシンプルな設計〜 #phperkaigi / PHPerKaigi 2026
shogogg
2
140
Java 21/25 Virtual Threads 소개
debop
0
200
Symfony + NelmioApiDocBundle を使った スキーマ駆動開発 / Schema Driven Development with NelmioApiDocBundle
okashoi
0
200
Featured
See All Featured
Designing for humans not robots
tammielis
254
26k
How to Ace a Technical Interview
jacobian
281
24k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
250
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
91
Deep Space Network (abreviated)
tonyrice
0
93
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
480
AI: The stuff that nobody shows you
jnunemaker
PRO
3
460
Building AI with AI
inesmontani
PRO
1
810
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
75
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
410
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
990
Leading Effective Engineering Teams in the AI Era
addyosmani
9
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 に修正させるのではなく 自動修正コードを書かせよう!
おわり またどこかで お会いしましょう!