日中とおしてどんよりとした曇り空で気温もそれほどあがらず、やることもないのでぐったり過ごしたおやすみいつかめでした。

昨晩はせっかく 22 時ごろにはねむりへむけた手順を終えていたのにべちょべちょの状態で二日分のボルゴウをかくのに難儀してしまい、結局入眠はいつもと変わらず 2 時前です。ねむりもあさくなんどか中途覚醒を挟んでしまいましたが、おやすみ気分でねばりにねばってなんとか 9 時半くらいまでは寝ることができました。いつも起きるのに苦労しているくせにおやすみになるととたんに寝ていられなくなるのはまったくふしぎなものです。

起きてからはだれもいない食卓でもそもそ朝ごはんを食べ、まんがをよんだりしてみたもののどうもしっくりこなかったのでなんとか魔力を練ってボルゴウのビルドできない問題に立ち向かうべく端末を開きます。デプロイの履歴を見てみると失敗の原因はふたつあって、ビルドが vercel の制限時間内に終わっていないこと、そしてもう一つはビルドプロセスそのものが OOM で落とされていることのようです。原因はなんとなく推測がついて、でかい画像をそのままベタベタ貼っているせいでビルドキャッシュの上限に引っかかりキャッシュが無効化され、結果として毎回ゼロから記事数分の静的ページを生成しているためでしょう。なんにせよまず画像を小さくしないことにははじまらないので、以下のコマンドで過去の画像をまとめてリサイズしました。

find -E {path} -type file -size +1M -regex '.*[0-9]{8}_.*.png' | xargs -I {image} convert -geometry 30% {image} {image}

未来のじぶんのためにメモしておくとまず find、いうまでもないですが-regex で正規表現を使えます。ただし正規表現マッチの場合はファイル名だけでなくパス全体でのマッチとなるので先頭に .* などを入れる必要があるのと、回数指定 {n}-E オプションで拡張正規表現を有効にするか \{\} のようなエスケープが必要になるらしい。後者の挙動については調べても GNU 版の -regextypeしか出てこず最終的に man を読みにいくはめになりました。sed とか grep みたいな基本的なコマンドのよく使うオプションが BSD 版だと微妙に違うのはほんとうにだるいといつも思います。-size オプションでファイルサイズによるフィルタも追加しています。

あとはマッチしたファイルそれぞれにたいして imagemagick の convert で画像サイズを 30%にするだけです。imagemagick を入れるのにまず xcode のアップデートからはじまり brew そのもののアップデートや依存パッケージのビルドなどまで挟まってありえない時間がかかりましたが最終的に動いたのでよしとしましょう。-quality オプションで圧縮することもできそうですが、PNG のままだと効果が薄かったのともともとがでかすぎたのでリサイズしておきました。

ということであんまり関係ないところでしばしば時間をとられてしまいましたが、2.9GB くらいあった(やばすぎる)のが最終的に 300MB くらいになりビルドも 3 分程度で終わるようになったのでひとまずはなんとかなったといえましょう。毎回このワンライナーを流すのもだるいので変更を push するまえに以下のようなスクリプトを動かして圧縮するようにしたらおわりです:

"comp": "git diff --name-only | xargs -I {path} find -E {path} -size +1M -regex '.*[0-9]{8}_.*.png' | xargs -I {image} convert -geometry 30% {image} {image}",

ログを見るとちゃんとビルドキャッシュも生成されていそうです。とはいえ 1GB の上限に対してすでに 700MB くらいになっているので早晩また同じ問題に遭遇するかもしれません。これはもう作りが悪いというほかないので圧縮で延命している間にもっとよい方法を考えておきます。結局 SSG がスケールしないカスやということになる気がしていますがはたしてどうでしょうか。以下はありがとうリストです:

ついでに放置していたこまごまとした問題に手を入れたら飽きたのでおさんぽにでかけます。今日は近所にある沼のまわりをぐるりと一周するコースで、ドウダンツツジやハナミズキといった木々がいっせいに花をつけていたのにくわえ地元の小学生たちがしらべ学習でもしたのか樹名板がついているものもあっておもしろく歩くことができました。しかしだいぶまえに大規模な整備がされて以来ぜんぜんメンテナンスしていないのか道がどんどんわるくなっていて、街歩き用のスニーカーでは膝にダメージがきてしまったのがなさけないです。

あとはなにもなく、お抹茶をたてて盛岡みやげらしい和菓子を食べ晩はのこりものを中心にげんきドリンクをたっぷり飲み、食後にはティラミスやあんこ玉もしっかり食べとおやすみらしい食生活でした。

以上です。どうもありがとうございました