OAuth2 のよくあるフローを何回も書きたくない #Go - 詩と創作・思索のひろばgolang.org/x みたいに、独立させるまでもないけど再利用したいパッケージを go-nuts レポジトリにまとめるのいいな。真似しようかな(名前もかわいい) - ono_matope のブックマーク / はてなブックマークgolang.org/x みたいに、独立させるまでもないけど再利用したいパッケージを go-nuts レポジトリにまとめるのいいな。真似しようかな(名前もかわいい)
2022/06/06 12:04
そうなんです! Go は中央的なパッケージリポジトリがないので、新しいパッケージを作る心理的コストは他の言語に較べてかなり低い。とはいえ GitHub にリポジトリを増やすのも、CI 周りだとか、バージョニングであるとか、脳内ネームスペースの管理だとかで負担がゼロなわけではない。そういうわけで、共通化したくなったコードを気軽に置く場所として motemen/go-nuts というリポジトリを作り、そこにパッケージを放り込むことにしている。
このやり方は go4.org を真似している。どこで見たんだったかは忘れてしまったけど、たぶんこういった微妙なスキマを埋めるライブラリを探していたときに見つけたんだと思う。
README には
- single repo. go4 is a single repo. That means things can be changed and rearranged globally atomically with ease and confidence.
- no backwards compatibility. go4 makes no backwards compatibility promises. If you want to use go4, vendor it. And next time you update your vendor tree, update to the latest API if things in go4 changed. The plan is to eventually provide tools to make this easier.
- forward progress because we have no backwards compatibility, it's always okay to change things to make things better. That also means the bar for contributions is lower. We don't have to get the API 100% correct in the first commit.
とあって著名なエンジニアがこれをやってるので勇気づけられる。
Go には
A little copying is better than a little dependency.
という格言がある ように、少しのコピペなら許容する文化なので普段もコピペしているが、何度も繰り返してコピペに我慢できなくなったときに切り出す。「あのコードどこに書いたっけ……」となる前に、一種のスニペット集に登録しているようなものとも言える。あと仕事で使いたくなったときとかね。
何度かコピペを繰り返したころには、どんなインタフェースに抽象化したらいいか分かっていることも多い。逆に早い段階でやっちゃうと微妙であとから使わないこともある。
go-nuts という命名は、golang-nuts という雑多なトピックを取り扱う ML から取ったんじゃなかかったかなー。最初は Go と nuts の関係がわかってなかったんだけど、Gophers love nuts.
とのことでなるほど可愛らしいね、と思った覚え。