Slide 1

Slide 1 text

OSS貢献を気軽にしたい 2022/07/06 Let’s Go Talk #1 5分LT

Slide 2

Slide 2 text

自己紹介 - aboyです - コネヒト株式会社 - 最近はママリの検索を最高にする仕事をしてます - あと最近GoをさわっていてTech VisionのGo戦略を推進中

Slide 3

Slide 3 text

モチベーション - 普段お世話になっているOSSに貢献したい - Goさわりたてなので簡単なことから始めたい

Slide 4

Slide 4 text

Go Report Cardっていうのがあるぞ - https://goreportcard.com/ - Go製プロジェクトのREADMEによくあるこのバッヂ - 指定したプロジェクトに静的解析をかけてスコア化してくれる

Slide 5

Slide 5 text

Go Report Cardを使ってOSS貢献を始める - gocycloとlicense以外は、どう修正したらいいかがわかりやすい - Go初学者でもPRを送りやすい - misspellだって、あってもいいことは何も無いので、立派な貢献 - 少なくとも見つけたらそのままにしない gorilla/schemaのmisspellの例

Slide 6

Slide 6 text

👏 ※ gorillaのメンテナ事情(切実)https://github.com/gorilla/mux/issues/659

Slide 7

Slide 7 text

他の人の背中も押したいぞ - OSS貢献したいけど、ハードルや面倒さを感じてる人の背中を押したい - 入口がmisspellの修正でも、成功体験からさらにGoに興味を持ってくれると嬉しい - 自分たちがお世話になっているOSSへ貢献するという行動を当たり前にできると嬉しい - 仕組み化したい - ある程度は仕組み化して自動化や横展開できると嬉しい

Slide 8

Slide 8 text

ツールをつくった(ってる) - https://github.com/YuyaAbo/gontribute - Go Report CardはCLIが提供されてる - https://github.com/gojp/goreportcard/tree/master/cmd/goreportcard-cli - 自分たちのプロジェクトのgo.modに書かれているrequireに対してCLIを適用 すればやりたいことできそう

Slide 9

Slide 9 text

デモ

Slide 10

Slide 10 text

実装 1. GitHub APIをつかって指定リポジトリのgo.modを取得する 2. go.modをパースする(後述) 3. requireに対してGitHub APIをつかってアーカイブリンクを取得する 4. アーカイブリンクからzipをダウンロードする 5. zipを展開 6. 展開先のディレクトリでGo Report Card CLIを実行 7. 展開したディレクトリを削除 8. 3~7を繰り返す

Slide 11

Slide 11 text

go.modのパース - 準標準パッケージmod/modfileで可能 - https://pkg.go.dev/golang.org/x/mod/modfile fc, _, _, err := client.Repositories.GetContents(ctx, owner, repo, "go.mod", nil) if err != nil { log.Fatalln(err) } s, err := fc.GetContent() if err != nil { log.Fatalln(err) } f, err := modfile.Parse("go.mod", []byte(s), nil) if err != nil { log.Fatalln(err) }

Slide 12

Slide 12 text

あとは愚直オブ愚直 - exec.Commandでコマンド実行 - ↓こんな感じ b, err := exec.Command("zipinfo", "-1", zipFileName).Output() if err != nil { log.Println(err) return } dirName := strings.Split(string(b), "/")[0] if err = exec.Command("unzip", "-o", zipFileName).Run(); err != nil { log.Println(err) return }

Slide 13

Slide 13 text

まとめ - 自分たちが使っているOSSに気軽に貢献したい、する人を増やしたい - Go Report Cardを使えば比較的簡単な貢献チャンスに気づける - Go Report Card CLIを使って仕組み化するようなツールを作ってみた - 引き続きいい感じに作っていくぞ!

Slide 14

Slide 14 text

fin