🐳

実録! k8sに自作のライブラリが採用されるとどうなるか

2022/12/09に公開

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がきました。

Pull Requestのスクリーンショット

要約すると「k8sで使われてるから、k8sのバグハントの一環でバグが無いかチェックしたよ。バグは無かったけどリファクタリングしといたよ」みたいなことを言っています。
k8sで使われていることも知らず、なんか定期的にスターが付くなぁ、くらいの気持ちだったので、びっくりでした。

リファクタリングの内容はとくに問題なさそうなので、すぐにマージしました。

たくさんcloneされるようになった

Go言語のライブラリの特徴として、大きなプロジェクトで採用されると、依存関係の取得のためにリポジトリのclone回数がすごいことになる、というものがあります。
そのため、heredocは1日に1000回程度cloneされているようです。

GitHubのInsights > Trafficのclone回数の様子

Go Modulesがくる前はもっと多かったような気もします。

色々なところで使われるようになった

GitHubのUsed Byの表記を信じるなら7700個以上のリポジトリで利用されているようです。

GitHubのUsed Byの様子

また、pkg.go.devのImported Byによるとv2とそれ以前で合わせて1500以上のパッケージからimportされているみたいです。

有名どころでは、MercariのdatastoreやGitHubのCLIでも使われているみたいです。

思ったよりも大御所で使われているみたいです。
すごいですね。

なんかREADMEに「Used By なんちゃら」みたいな感じでk8sとかメルカリ、GitHubのロゴを並べられたらかっこいいなと思っているのですが、勝手にやっていいのでしょうか?
多分マズいと思うし、そこまでやる気もないし、それでお金を集めたいみたいなモチベーションがあるわけでもないので、多分READMEは適当なままです。

GitHubのスターが増えた

7年かけて地道にスターが増えていき、先日スターが100を越えました。

今は1増えて101になっています

みなさんもスターお願いします。頼む!

むすびに

タイトルのわりに別にお金持ちになったり、すごい会社からオファーが来たりしているわけではないのでがっかりした人もいるかもしれません。
OSSなんてそんなもんです。

明日のwhywaita Advent Calendarは@hinananohaさんみたいです。
よろしくお願いします。

最後まで見ていただきありがとうございました。

脚注
  1. 消していいのであれば消したいですが、どこかで使われているか分からないのでうかつに消せなくなっています。dot パッケージも同じような状態です。 ↩︎

  2. このライブラリを作ったときにQiitaで記事を書いた気がするので、そこから見つけたのかもしれません。ただ、その記事は一度Qiitaのアカウントを消したときに一緒に消えてしまったので、実際のところは確かではありません。 ↩︎

Discussion