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.3k
統一感のある 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
SQLBoiler がメンテナンスモードになりまして
otakakot
0
130
Wasm わからないけど Go で実装したいから入門する
otakakot
1
9.6k
cmp.Or に感動した
otakakot
3
770
net/http/httptest が推しです♡
otakakot
3
250
無料で楽しむ Go サーバー開発のススメ
otakakot
11
3.5k
Go のテストで失敗をマークする
otakakot
1
200
Other Decks in Programming
See All in Programming
AI時代のドメイン駆動設計-DDD実践におけるAI活用のあり方 / ddd-in-ai-era
minodriven
21
7.9k
プロダクトという一杯を作る - プロダクトチームが味の責任を持つまでの煮込み奮闘記
hiliteeternal
0
460
Flutterと Vibe Coding で個人開発!
hyshu
1
250
Understanding Kotlin Multiplatform
l2hyunwoo
0
260
管你要 trace 什麼、bpftrace 用下去就對了 — COSCUP 2025
shunghsiyu
0
420
書き捨てではなく継続開発可能なコードをAIコーディングエージェントで書くために意識していること
shuyakinjo
1
280
なぜ今、Terraformの本を書いたのか? - 著者陣に聞く!『Terraformではじめる実践IaC』登壇資料
fufuhu
4
620
STUNMESH-go: Wireguard NAT穿隧工具的源起與介紹
tjjh89017
0
380
GitHub Copilotの全体像と活用のヒント AI駆動開発の最初の一歩
74th
7
2.9k
#QiitaBash TDDで(自分の)開発がどう変わったか
ryosukedtomita
1
370
可変性を制する設計: 構造と振る舞いから考える概念モデリングとその実装
a_suenami
10
1.8k
レガシープロジェクトで最大限AIの恩恵を受けられるようClaude Codeを利用する
tk1351
2
140
Featured
See All Featured
The Language of Interfaces
destraynor
160
25k
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Thoughts on Productivity
jonyablonski
69
4.8k
Statistics for Hackers
jakevdp
799
220k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.4k
RailsConf 2023
tenderlove
30
1.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
33
2.4k
Mobile First: as difficult as doing things right
swwweet
223
9.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Designing for humans not robots
tammielis
253
25k
Intergalactic Javascript Robots from Outer Space
tanoku
272
27k
Transcript
The Go gopher was designed by Renée French. 統一感のある Go
コードを 生成 AI の力で手にいれる おーたかこーたろー / @otakakot 2025.06.11 GoConnect #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 に修正させるのではなく 自動修正コードを書かせよう!
おわり またどこかで お会いしましょう!