Upgrade to Pro — share decks privately, control downloads, hide ads and more …

OSS貢献を気軽にしたい Let's Go Talk #1

aboy
July 06, 2022

OSS貢献を気軽にしたい Let's Go Talk #1

Let's Go Talk #1でのLT資料です

aboy

July 06, 2022
Tweet

More Decks by aboy

Other Decks in Programming

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. 実装
    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を繰り返す

    View full-size slide

  10. 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)
    }

    View full-size slide

  11. あとは愚直オブ愚直
    - 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
    }

    View full-size slide

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

    View full-size slide