昨日にひきつづきぽかぽかの晴れ模様ではあったものの大丈夫とはいいきれない一日でした.

昨晩は自然体でねむりにつくことをあきらめていつもより多めに魔法薬を飲み,にもかかわらずやっぱり 2 時ちかくまでかかってしまいました.いつもより深くねむれたような感覚はあったので多少ききめがあったと信じるほかありません.もちろん反動でねざめは悪く 10 時まえまでぐったりです.

つづくくつうもぜんぜんダメダメでかなりイヤになってきました.じゅうぶん複雑かつすでに動き出しているしくみに手を入れて掻き回さないといけないのですがほんとうにほんとうにやりたくない,やりたくなさすぎてぐだぐだしていたら気づけば今シーズンも終わりに近いし地味に窮地がつづいております.あとは直せば一瞬で直るどうでもいいところを一箇所直して,どうでもいい監視のしくみを一個考えたところではやくも魔力が枯渇してしまったのでしめやかに撤退しました.

全体としてはかなりまったり進行だったおかげでおひるのいちばんぽかぽかなじかんにおさんぽへいくことができたのはよかったです.歩いていたら特にみるべきところのないふつうの道路でたのしげに落ち葉を拾っているこどもがいて,あまりにも世界に対して興味シンシンなその行為にすこし衝撃をおぼえてしまいました.なるべく身の回りのどうでもよいことに目を向けているつもりだったのですが,めずらしい木の実など特別感のあるアイテムをたわむれに拾うことはあっても落ち葉というのはありふれすぎてもはや拾おうとするどころか存在そのものを気にもとめていないなかったです.しかしたしかに落ち葉をひろってもよいはずだ.くやしかったので近くの蔵と門がある城みたいな公園にいき,しばらくぐったりしてから非常用井戸のポンプを三回押して帰り道に油揚げを買いました.

あとは先日購入したノンカフェインのほうじ茶というのが届いたくらいでしょうか.ここしばらく冷え込みキビシイ夜にぴったりののみものを探していて,これなら夜でも安心して飲めると思い購入したものです.ふつうのほうじ茶にくらべるとすこしうまみが弱い気がしますががぶがぶ飲むぶんにはまったく気にならなないのでしばらくはこれで行こうと思います.晩はのこりものでしのごうと思ったらなぜかシンクで鶏ひき肉が解凍されていて,そういえばそぼろ丼を作ろうと準備していたのでした.視界から消えただけで完全に脳からも削除されていたことにショックをおぼえつつ少し濃い味付けのそぼろにして,一緒に作った卵そぼろと一緒にそぼろ丼として食べました.

食後にちょっとだけ魔力を高める修行をしていたらまあまあだるい罠をいくつか踏んでしまったのでそのメモも残しておきます.まずはこんな感じでごくふつうの Dockerfile 書いてビルドしたら

FROM golang:latest RUN apt-get update COPY . /go/src WORKDIR /go/src RUN go mod tidy CMD go run ./main.go

それはもうはちゃめちゃにエラーになってしまいました

W: GPG error: http://deb.debian.org/debian bookworm InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 NO_PUBKEY F8D2585B8783D481 E: The repository 'http://deb.debian.org/debian bookworm InRelease' is not signed. W: GPG error: http://deb.debian.org/debian bookworm-updates InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 0E98404D386FA1D9 NO_PUBKEY 6ED0E7B82643E131 E: The repository 'http://deb.debian.org/debian bookworm-updates InRelease' is not signed. W: GPG error: http://deb.debian.org/debian-security bookworm-security InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 54404762BBB6E853 NO_PUBKEY BDE6D2B9216EC7A8 E: The repository 'http://deb.debian.org/debian-security bookworm-security InRelease' is not signed. E: Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true' E: Sub-process returned an error code ERROR: Service 'app' failed to build: The command '/bin/sh -c apt-get update' returned a non-zero code: 100

どうやらパッケージを配布しているレポジトリの pubkey が期限切れになっているらしい(?).sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys {pub_key} で鍵更新しろと書いてあるサイトがたくさん出てきますが,すでに apt-key 自体が deprecated なので使えないしそもそも Dockerfile に書きたくない.いろいろためして結局ベースイメージを golang:bullseye に下げることで解決としました.逆になんで bookworm だとダメなのかはわからずじまいです.

なんにせよビルドは通ったので API にリクエスト送ったら今度はプロセスが立ち上がっていない,コンテナのログ読んでみるとなぜか起動直後に nil pointer dereference で死んでいる!そんな実装あったっけと思ったら influxdb の golang 用クライアントライブラリがダメではないがちょっと思っていたのとちがう挙動をしておりました.たとえば `localhost:8086`` に繋ぎたい場合以下のように書きます

client := influxdb2.NewClient("http://localhost:8086", "my-token") writeAPI := client.WriteAPIBlocking("my-org", "my-bucket")

ふつうですね.NewClient() のときになんらかの理由で DB と接続できないとつぎの writeAPIBlocking() をよびだすときに nil pointer dereference でしめやかに落ちる,これはまだわかる(この時点でいいから error 返せと思わなくもないですが).しかたがないので例外処理しようにも NewClient() はポインタ型を返さないので以下のような素朴な nil チェックができません

client := influxdb2.NewClient("http://localhost:8086", "my-token") if client == nil { log.Fatal("failed to connect to DB") }

さすがに DB へ繋げなかっただけで panic するのをなすすべなく見守るほかないのはひどすぎるのでなにかいいメソッドでも用意されていないかとみてみると client.Ready(context.Context) (bool, error) があるらしいのでこれを使えそう……と思ったらどうも返り値の型がヘンです.よく読んでみるとbool が返るのは v1 の API で,v2 からは client.Ping() を使えとのことでした.ドキュメント読まないのが悪いとはいえこの変更の意図はなんなんだ,後方互換性を破壊したいだけではないかといぶかしんでしまいます.最終的にはこのようになりました

if ok, err := db.Ping(context.Background()); !ok { log.Fatalf("failed to connect to db server: %s", err) }

ちなみにこれでも認証できたかどうかは取得できないらしい.あと繋げなかった直接の原因は .env に格納している DB のホストを "でくくっていたためでした.そうですか……

以上です.ってバカバカ,こんなことやってる場合じゃないじゃないっ!どうもありがとうございました