Slide 1

Slide 1 text

Fukuoka.go#20 George Yoshida GopherのMakefile愛は どこからきているのか教えてほしい

Slide 2

Slide 2 text

⾃⼰紹介 2 ● 名前 ○ よしだ じょうじ ● 福岡歴 ○ 去年の9⽉から(関⻄→関東→󰎲→福岡) ● 普段の業務 ○ クラスメソッド(株)AWS事業本部ソリューションアーキテクト ● 会社ブログ ○ https://dev.classmethod.jp/author/quiver/ ● プログラミング ○ SWEではないです ○ ⺟国語:Python ○ Goスキルレベル:Hello Worldをコピペで動かせる程度 ● X ○ @vevnica

Slide 3

Slide 3 text

GoのCIってどういう構成が⼀般的なのか GitHubをのぞいてみた 課題 3

Slide 4

Slide 4 text

GopherはMakefileを愛しすぎ 結論 4

Slide 5

Slide 5 text

Terraform 5 https://github.com/hashicorp/terraform/blob/main/.github/workflows/checks.yml

Slide 6

Slide 6 text

Terraform 6 https://github.com/hashicorp/terraform/blob/main/Makefile Makefile

Slide 7

Slide 7 text

Mobi(Docker) 7 https://github.com/moby/moby/blob/master/Makefile Makefile

Slide 8

Slide 8 text

Kubernetes 8 https://github.com/kubernetes/kubernetes/blob/master/build/root/Makefile Makefile

Slide 9

Slide 9 text

⼩規模プロジェクトはどうなんだろう?

Slide 10

Slide 10 text

goccy/go-json 10 https://github.com/goccy/go-json/blob/master/Makefile Makefile

Slide 11

Slide 11 text

Ecspresso(AWSのコンテナサービス(ECS)のデプロイツール) 11 https://github.com/kayac/ecspresso/blob/v2/Makefile Makefile

Slide 12

Slide 12 text

@fujiwaraさん作のGoテンプレート 12 https://github.com/fujiwara/go-template/blob/main/Makefile Makefile

Slide 13

Slide 13 text

mattn/go-sqlite3 13 https://github.com/mattn/go-sqlite3/ ● GitHub Star : 8k ● Makefileや対応するモノは⾒当たらず ● 弘法筆を選ばず

Slide 14

Slide 14 text

Gophers ♥ Makefile

Slide 15

Slide 15 text

Make(Makefile)とは

Slide 16

Slide 16 text

Make(Makefile)の⽣い⽴ち 16 ● 1976年 Bell Labs発祥 ● Bell Labs = UNIXの発祥地 ● 作者は Stuart Feldman ● 2003年にMakeの作者としてACM Software System Award受賞 ○ Stuart Feldman is the creator of the Unix program make which he authored while working at Bell Labs. Make was the first program of its kind to automate the compilation and installation of computer programs on Unix-like systems. ○ https://www.facesofopensource.com/stuart-feldman/ ● 当時としては画期的 ○ It began with an elaborate idea of a dependency analyzer, boiled down to something much simpler, and turned into Make that weekend. Use of tools that were still wet was part of the culture. Makefiles were text files, not magically encoded binaries, because that was the Unix ethos: printable, debuggable, understandable stuff. ○ Stuart Feldman, The Art of Unix Programming, Eric S. Raymond 2003

Slide 17

Slide 17 text

Goの⽣い⽴ち 17 ● ⾔語設計者 = UNIX⽂化圏 ○ Robert Griesemer ○ Rob Pike(ex. Bell Labs) ○ Ken Thompson(ex. Bell Labs) ● FAQから ○ Robert Griesemer, Rob Pike and Ken Thompson started sketching the goals for a new language on the white board on September 21, 2007. ○ https://go.dev/doc/faq

Slide 18

Slide 18 text

Makefile/JSON/YAMLを並べる 18 JSON(c.a. 2000) YAML(c.a. 2000) # Variables CC = gcc TARGET = app .PHONY: all clean # Default target all: $(TARGET) $(TARGET): main.o $(CC) -o $(TARGET) main.o main.o: main.c $(CC) -c main.c clean: rm -f *.o $(TARGET) Makefile(1976) { "key": "val", "num": 123, "arr": [ 1, 2, 3 ], "bool": true } key: val num: 123 arr: - 1 - 2 - 3 bool: true キモカワ?構⽂

Slide 19

Slide 19 text

世間の声を聞いてみた

Slide 20

Slide 20 text

Makefileでまだまだいけるぞ派 20 https://future-architect.github.io/articles/20231012a/ https://techblog.kayac.com/make-as-task-runner

Slide 21

Slide 21 text

Makefileしんどい派 21 https://qiita.com/schrosis/items/12b4361c528819d13901 https://engineer.retty.me/entry/2021/12/15/161644

Slide 22

Slide 22 text

現場でMakeを使っている⼈ ✋

Slide 23

Slide 23 text

Go開発現場でタスクランナーを どう運⽤していますか? 技術選定とか課題とか教えて下さい

Slide 24

Slide 24 text

追記: 会場のみなさんの声

Slide 25

Slide 25 text

ほぼすべてがGNU Make派 25 ● https://www.gnu.org/software/make/ ● Makeなら元から⼊っているし ● そもそも検討したこともなかった ● みんな使っているし

Slide 26

Slide 26 text

Task x 1名 26 ● https://taskfile.dev/ ● Go製 ● YAMLで定義

Slide 27

Slide 27 text

Just x 1名 27 ● https://just.systems/ ● Rust製 ● Makeっぽい構⽂(インスパイア系) ● ⾃分の周りでは使われている

Slide 28

Slide 28 text

Ninja x 1名(技術選定のみ) 28 ● https://ninja-build.org/ ● C++製 ● Makeっぽい ● Chromiumの開発体験から⽣まれた ○ https://neugierig.org/software/chromium/notes/2011/02/ninja.html

Slide 29

Slide 29 text

kati(Ninjaついでに) 29 ● https://github.com/google/kati ● C++製 ● Makeクローン ● Androidの開発体験から⽣まれた ○ https://shinh.hatenablog.com/entry/2015/09/24/005803

Slide 30

Slide 30 text

雑感 30 ● Gopherの価値観的に ○ UNIX系ツールチェインと⽣きる ○ ごちゃごちゃしたものは作らない ○ シンプルイズベスト

Slide 31

Slide 31 text

No content