Slide 1

Slide 1 text

1 © Bitkey Inc. え、 dep ってもう使わないの!? Go に帰ってきた人のキャッチアップ Masatoshi Tsushima Bitkey, Inc.

Slide 2

Slide 2 text

2 © Bitkey Inc. Masatoshi Tsushima 津島 雅俊 2004 ソフトウェア開発との出会い Webサイトや携帯アプリを作って遊んでいました 2018秋 Bitkeyに参画 当初は主にGoでサーバサイドを開発 2019秋 ファームウェアを開発 デバイスのファームウェアの内製化や新規製品の 開発 2024夏 リプレース案件の立ち上げ 社内の各地に点在する重複機能をGo&Flutterでサ ブシステムに抽出 2022夏 Individual contributor (?) Android/iOS/Flutter、デバイスQA用アプリ、社 内仕様の標準化、Makefile職人、CIおじさん

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

ソフトウェアの領域を超えて リアルとデジタルの「分断」を解消する 「分断」は、リアルでもデジタル上でも存在します。だからこそ、 私たちはソフトウェアの領域にはとまりません。ハードウェアも同 時に開発‧共創することで、デジタルで解決されていないリアルの 体験も含めて、シームレスな体験を実現します。

Slide 5

Slide 5 text

5 © Bitkey Inc. Masatoshi Tsushima 津島 雅俊 2004 ソフトウェア開発との出会い Webサイトや携帯アプリを作って遊んでいました 2018秋 Bitkeyに参画 当初は主にGoでサーバサイドを開発 2019秋 ファームウェアを開発 デバイスのファームウェアの内製化や新規製品の 開発 2024夏 リプレース案件の立ち上げ 社内の各地に点在する重複機能をGo&Flutterでサ ブシステムに抽出 2022夏 Individual contributor (?) Android/iOS/Flutter、デバイスQA用アプリ、社 内仕様の標準化、Makefile職人、CIおじさん 約5年

Slide 6

Slide 6 text

6 6 © Bitkey Inc. さて、久々のGoか…

Slide 7

Slide 7 text

7 7

Slide 8

Slide 8 text

8 8

Slide 9

Slide 9 text

9 9 © Bitkey Inc. という人のための “再”入門Go言語 (令和最新版)

Slide 10

Slide 10 text

10 10 © Bitkey Inc. 学び直したやつ & 使ってみた感想

Slide 11

Slide 11 text

11 11 © Bitkey Inc. Outline 1. 依存の管理 dep → go mod 2. API仕様 go-swagger → ogen 3. データベース gorm→sqlc, pq → pgx 4. ログ logrus/zap/zerolog → slog 5. テスト testing → testify, gomock → uber/gomock 6. エラー errors.Is, errors.As +おまけ

Slide 12

Slide 12 text

12 © Bitkey Inc. 依存の管理 dep → go mod

Slide 13

Slide 13 text

13 13 © Bitkey Inc. 感想: もうgoだけで良いんですね! dep → go mod ● よかった!ありがとう! ● go mod init example.com/hello で初期化 ● go get github.com/org/repo で追加 ● go mod tidy で整理 昔はgodep, glide, depってのがあってな…

Slide 14

Slide 14 text

14 © Bitkey Inc. API仕様 go-swagger → ogen

Slide 15

Slide 15 text

15 15 © Bitkey Inc. 感想: 新しいOpenAPIが使える go-swagger → ogen ● v3 のツールが揃ってる ● Redocly CLIが便利 ○ preview/lint/split GraphQL, gRPCもチラ見はした

Slide 16

Slide 16 text

16 © Bitkey Inc. データベース gorm→sqlc, pq → pgx/stdlib

Slide 17

Slide 17 text

17 17 © Bitkey Inc. 感想: そんなに大きくは変わってないかな gorm → sqlc ● gorm v2もあるけどSQL中心の方が好み pq → pgx/stdlib ● 新しく始めるならpgxかな ● とはいえ他と組み合わせるならstdlibが楽 ○ AlloyDB, Cloud SQL, OpenTelemetry go-migrateは健在っすね

Slide 18

Slide 18 text

18 © Bitkey Inc. ログ logrus/zap/zerolog → slog

Slide 19

Slide 19 text

19 19 © Bitkey Inc. 感想: 速さ競ってた気がするけどもうええでしょう logrus/zap/zerolog → slog ● 標準ライブラリにいる! ● zap/zerologは相変わらず速そうだけど Cloud Loggingとの統合に集中します

Slide 20

Slide 20 text

20 © Bitkey Inc. テスト testing → testify, gomock → uber/gomock

Slide 21

Slide 21 text

21 21 © Bitkey Inc. 感想: Copilot便利ですね testing → testify ● 男は黙ってtesting…じゃなくてもええか gomock → uber/gomock ● golangでメンテしなくなったのか でもCopilotには言わないと生成済みmock使ってくれない

Slide 22

Slide 22 text

22 © Bitkey Inc. エラー

Slide 23

Slide 23 text

23 23 © Bitkey Inc. 感想: wrapね… errors.Is ● なるほど errors.As ● まだちょっと使いこなす自信無いかも ● switch err.(type)できないのちょっと不満

Slide 24

Slide 24 text

24 © Bitkey Inc. まとめ

Slide 25

Slide 25 text

25 25 © Bitkey Inc. 昔ほどハッスルしてない…! ● 標準に落ち着いた ○ 依存の管理は go mod ○ ログは slog ● 他も身構えるほど変わってない ● 言語の新機能 ○ ジェネリクスが欲しい場面にまだ出会ってない ○ イテレータはちょっとあるかも Goよりドメインそのものとかクラウドの使い方に時間使えてる気がする

Slide 26

Slide 26 text

26 © Bitkey Inc. おまけ

Slide 27

Slide 27 text

27 27 © Bitkey Inc. go generate → Makefile 参考: Makefileで必要なファイルだけgo generateするレシピ 必要な再生成だけ行いたい OGEN := go run github.com/ogen-go/ogen/cmd/ogen OGEN_COMPONENTS := $(wildcard openapi/components/*/*.yaml) OGEN_TARGET := internal/api/ogen/oas_server_gen.go ogen: $(OGEN_TARGET) clean-ogen: rm -rf $(dir $(OGEN_TARGET))* internal/api/ogen/oas_server_gen.go: spec/config.yaml spec/api.yaml $(OGEN_COMPONENTS) $(OGEN) -package ogen -target internal/api -config spec/config.yaml -clean spec/api.yaml

Slide 28

Slide 28 text

28 28 © Bitkey Inc. go generate → Makefile 参考: Is there a smarter alternative to "watch make"? Watch したい watch: while true; do $(MAKE) -j4 -q || $(MAKE) -j4; sleep 1; done

Slide 29

Slide 29 text

29 29 © Bitkey Inc. End of File