実録! k8sに自作のライブラリが採用されるとどうなるか
whywaita Advent Calendar 2022の9日目の記事になります。
昨日はkadokuseiさんの「2022年に買ったゲーミングデバイス」だったみたいです。
自分はなんかいい感じのディスプレイが欲しいと常々思っています。
今回の話
何か面白い身の上話があるわけではないので、前々から機会があったら話そうと考えていた、自作のライブラリがk8s (Kubernetes) で採用されているという話をしたいと思います。
whywaitaさんに会ったときはReDoSの話でもすればいいと言われた気がするのですが、そっちは別で書こいたので、そのうち公開されます。
heredoc
heredocというGo言語のライブラリがあります。
作者は@makenowjustです。
高校生の頃に一晩で作りました。なんで作ったのかはあまり覚えていません。
与えられた文字列のインデントを削除することで、ソースコード中に改行を含む文字列をいい感じに書くことができるライブラリです。
使用例は次のようになります (READMEより)。
package main
import (
"fmt"
"github.com/MakeNowJust/heredoc/v2"
)
func main() {
fmt.Println(heredoc.Doc(`
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna
aliqua. Ut enim ad minim veniam, ...
`))
// Output:
// Lorem ipsum dolor sit amet, consectetur adipisicing elit,
// sed do eiusmod tempor incididunt ut labore et dolore magna
// aliqua. Ut enim ad minim veniam, ...
//
}
heredoc.Doc
がこのライブラリが提供している関数で、これに渡された文字列のインデントや先頭・末尾の空白・改行が削除されます。
単にインデントが削除されるだけでなく、先頭・末尾の空白もいい感じに削除してくれるのがポイントです。
MITライセンスです。
基本的な機能はこの heredoc.Doc
しかありません。
他にも一応、heredoc.Docf
という fmt.Sprintf
と組み合わせた関数があったりしますが、おまけみたいなものです。[1]
k8sでの採用
さて、どういうことかheredocはk8s (Kubernetes) の内部で採用されています。
実際、k8sの go.mod
を見ると、次のような1行があります。
github.com/MakeNowJust/heredoc v1.0.0 // indirect
また、実際に import
されているのはこの辺りのようです。
kubectl
のサブコマンドの説明文のインデントを取り除くのに使われているみたいです。
なんか想定と使い方が違いますが、そういうこともあるのでしょう。
一体どこから見つけてきたんだ…[2]。
k8sに採用されて起こったこと
ここからはk8sに採用された結果起こったことを紹介していきたいと思います。
Pull Requestが来た
そもそもKubernetesに採用されていたことを知ったきっかけなのですが、こんなPull Requestがきました。
要約すると「k8sで使われてるから、k8sのバグハントの一環でバグが無いかチェックしたよ。バグは無かったけどリファクタリングしといたよ」みたいなことを言っています。
k8sで使われていることも知らず、なんか定期的にスターが付くなぁ、くらいの気持ちだったので、びっくりでした。
リファクタリングの内容はとくに問題なさそうなので、すぐにマージしました。
たくさんcloneされるようになった
Go言語のライブラリの特徴として、大きなプロジェクトで採用されると、依存関係の取得のためにリポジトリのclone回数がすごいことになる、というものがあります。
そのため、heredocは1日に1000回程度cloneされているようです。
Go Modulesがくる前はもっと多かったような気もします。
色々なところで使われるようになった
GitHubのUsed Byの表記を信じるなら7700個以上のリポジトリで利用されているようです。
また、pkg.go.devのImported Byによるとv2とそれ以前で合わせて1500以上のパッケージからimport
されているみたいです。
- https://pkg.go.dev/github.com/MakeNowJust/heredoc?tab=importedby
- https://pkg.go.dev/github.com/MakeNowJust/heredoc/v2?tab=importedby
有名どころでは、MercariのdatastoreやGitHubのCLIでも使われているみたいです。
思ったよりも大御所で使われているみたいです。
すごいですね。
なんかREADMEに「Used By なんちゃら」みたいな感じでk8sとかメルカリ、GitHubのロゴを並べられたらかっこいいなと思っているのですが、勝手にやっていいのでしょうか?
多分マズいと思うし、そこまでやる気もないし、それでお金を集めたいみたいなモチベーションがあるわけでもないので、多分READMEは適当なままです。
GitHubのスターが増えた
7年かけて地道にスターが増えていき、先日スターが100を越えました。
今は1増えて101になっています。
みなさんもスターお願いします。頼む!
むすびに
タイトルのわりに別にお金持ちになったり、すごい会社からオファーが来たりしているわけではないのでがっかりした人もいるかもしれません。
OSSなんてそんなもんです。
明日のwhywaita Advent Calendarは@hinananohaさんみたいです。
よろしくお願いします。
最後まで見ていただきありがとうございました。
Discussion