1 of 30

go-gen-slice-accessors

作った話

v1.1

2024-11-08 Canary Beer Bash #1 @snamiki1212

2 of 30

About Me

Shun

Namiki

Meet

3 of 30

(注意書き)

エンジニア向けの発表です

4 of 30

日々の開発にて小さい

めんどくさい

がありませんか?

5 of 30

こういう時にGoだと、どうするか

6 of 30

古きよき for 文で回す

7 of 30

こういうのが欲しい

8 of 30

メソッドを毎回

作らないといけない。

9 of 30

めんどくさい

10 of 30

どう解決するか

はじまり

探す

ない

🤔

1. 楽に解決したい

2. 良さそうな

ライブラリを

探してみる

3. 今回のケースを

満たすものが

見つからない

4. じゃあどうする?

11 of 30

じゃあ

作るか

12 of 30

13 of 30

作ったもの

ある要素の配列を取得できるような仕組み

14 of 30

(注意書き)

ということは?

自分の好きなように作る!

仕事ではなく個人開発

個人の時間で、個人開発をした話です

つまり?

個人開発したものを使いたい時に使う

15 of 30

01

02

実装方針

code generation

Easy In & Out

Goらしいアプローチだと

これが良さそう

自分のライブラリに

ロックインさせたくない

16 of 30

  • input
    • ソースコード
  • output
    • アクセッサのメソッドを生成したコード

使い方(概要)

17 of 30

input (user.go)

使い方(概要)

18 of 30

generate

使い方(概要)

19 of 30

output

(user_gen.go)

使い方(概要)

20 of 30

usage

使い方(概要)

21 of 30

どうやって

実現してる?

22 of 30

内部ロジック

Point

  • AST のParser がコアロジック
  • Parserはこれが参考になるよ

23 of 30

試してみる

24 of 30

10個の要素を持つ構造体に実行

    • 生成されたコード96行
    • テストコード0行(不要)

go-gen-

slice-

accessors

25 of 30

これで

PRを出してみる

26 of 30

🎉🎉🎉Merge🎉🎉🎉

27 of 30

🎉 go-gen-slice-accessors を作った結果

  • Canary Cloud の本番環境で利用されてます�→めんどくさいがチョット楽になる�→(今後)FatController解消に使える

  • Canary Cloud のバックエンドの�day1のオンボーディングタスクになってます

28 of 30

(おまけ)ドッグフーディング大事

29 of 30

(おまけ)Easy Setup + Zero Package

・go:generate で Run(L2) だけでなく Install(L1) も入れておくと

どの環境でも go generate だけすればいいだけで便利

・package をプロジェクトに入れないのでロックインもしない

30 of 30

おわり

スターもらえると

嬉しいです