Slide 1

Slide 1 text

Go 1.24 tool directiveは何を変えるのか miyamo2 powered by Marp rnd195/my-marp-themes/beam

Slide 2

Slide 2 text

Career Java 1y?m Python 1y Go 1y6m AWS 2y6m OSS activities gofiber/fiber cockroachdb/cockroach miyamo2/dynmgrm etc... Social @miyamo2 @miyamo2 @miyamo2 自己紹介

Slide 3

Slide 3 text

皆さんは何もしていないのにCIが壊れた経験はないでしょうか? はじめに

Slide 4

Slide 4 text

はじめに

Slide 5

Slide 5 text

1. mockgen のバージョンを指定していない 2. 自動生成後 元と差分があったら exit 1 なぜ壊れたのか

Slide 6

Slide 6 text

Go 1.23まで -> tools.go gqlgen のガイドでも言及されているTips https://gqlgen.com/getting-started/#set-up-project Go 1.24から -> tool directive go.modの新機能 go.modで開発用ツールを管理する

Slide 7

Slide 7 text

ツールのブランクimport ビルド制約によってside-effectの抑制 go.modで開発用ツールを管理する - Go 1.23まで

Slide 8

Slide 8 text

go.mod内でtool directiveの宣言 go.modで開発用ツールを管理する - Go 1.24から

Slide 9

Slide 9 text

1. 実行方法 2. 配布する際の依存関係 なにが違うの?

Slide 10

Slide 10 text

go installが不要になる tools.go を使用している場合も CI環境、各開発者のローカル etcで バージョンを固定するには go install を実行する必要があった なにが違うの? - 実行方法

Slide 11

Slide 11 text

go tool コマンド経由で実行 なにが違うの? - 実行方法

Slide 12

Slide 12 text

ライブラリ自身の依存関係はどちらも変わらない なにが違うの? - 配布する際の依存関係

Slide 13

Slide 13 text

そのライブラリに依存するパッケージにはtool directive由来の依存関係を引き連れない なにが違うの? - 配布する際の依存関係

Slide 14

Slide 14 text

1. GOBINを汚染せずに開発用ツールのバージョンを固定できる 2. ライブラリ利用者の依存関係に影響を与えずに済む まとめ

Slide 15

Slide 15 text

Managing dependencies - The Go Programming Language https://tip.golang.org/doc/modules/managing-dependencies Go 1.24: tool directive由来の依存関係はパッケージ配布時に 引き連れなくて済むらしい https://zenn.dev/comsize_press/articles/2f0fdd5390aa20 GitHub - miyamo2/go1-24-tool-directive: playground playground. Contribute to miyamo2/go1-24-tool-directive development by creating an account on GitHub. https://github.com/miyamo2/go1-24-tool-directive 参考