diary

I like Hatena Star with a text selection.

2025-12-09

土曜日はピアノのレッスンだった。

ここ最近はずっとガーネットの練習をしている。前回のレッスンでは、先生が偶然金曜ロードショー時をかける少女をテレビで見たようで、そこでガーネットを聞くことが出来たという話をしてくれた。またそこからFirst Takeのガーネットまで探して何度も見ていただいたようで、今弾いている楽譜のアドバイスをもらうことも出来た。偶然曲に出会う機会があって聞いてもらえてとても良かった。

このレッスンの後から自分でもFirst Takeのガーネットを見返してピアノに反映できないか考えていた。これがあって、より一層理解が深まった気がする。

特に、先生から2番サビ後の間奏でオクターブ上げるアドバイスをもらえたのは良かった。やっぱりここオクターブ上げて繰り返したほうがしっくりくる。ライブで聞き慣れているのもあると思うけれど。

2025-12-04

elin.pocke.me

Elinキャラクタービューワーを色々いじっていた。

Elin は EA と Nightly という2本のブランチが走っているのだけど、今まではキャラクタービューワーではEAにしか対応していなかった。それをNightlyに対応するようにしたのが一番大きな変更。

これを実装するにあたって、今までCloudflare Pagesでホスティングしていたのを、Vercelに載せ替えた。 なぜそんなことをする必要があったかというと、Cloudflare Pagesのファイル数制限に引っかかったため。

Cloudflare Pagesは静的Webアプリをホスティングするためのプラットフォームなのだけど、1つのアプリに対して20,000ファイルしかファイルを置くことができない制約がある。 20,000ファイルというと結構寛大な制限に見えるのだけど、キャラクタービューワーが使っているNext.jsでは1つのhtmlに対してたくさんのメタファイルを生成する。

$ ls out/ja/EA/charas/adv_ivory/
'__next.$d$lang.$d$version.charas.$d$id.__PAGE__.txt'  '__next.$d$lang.$d$version.txt'   __next._head.txt    index.html
'__next.$d$lang.$d$version.charas.$d$id.txt'           '__next.$d$lang.txt'              __next._index.txt   index.txt
'__next.$d$lang.$d$version.charas.txt'                  __next._full.txt                 __next._tree.txt

今まではそれでもなんとかなっていたのだけど、EAとNightlyの2本に対応したことでファイル数が約2倍になり、この制限を超えてしまった。HTMLのページ数自体は2800件程度でまだまだ余裕があるのだけどねえ。

これを回避するために、最初はCloudflare Workersへの移行を試した。同じCloudflareのサービスだけど、Workersの方はNext.jsのサーバープロセスをホスティングしてくれる。こちらだとファイル数制限がないので(静的Webアプリではなくなるものの)動くのではないかと思って試してみた。 10万req/day まで無料であり、現状のリクエスト数が直近30日で平均3770req/dayなのでしばらくは無料でいけるだろうとの見込み。

これも実際にデプロイする直前まではいけたのだけど、デプロイログを見るとエラーが出ていた。どうやらCloudflare Workersの無料枠だと、1つのアプリは圧縮後で3MB以下に抑える必要があるが、それを超えていた。正確な数値は覚えていないけれど3~4MBだったと思う。

SSGするページ数を減らせばなんとかなるかなあと考えたりしていたのだけど、試しに最小限のデータでビルドしてみても(多少減ったものの)3MBを超えていて、どうやらNext.jsなどのライブラリ自体のコードがそもそもデカくて厳しそうだった。

ということでCloudflareは諦めて、別サービスでホスティングすることにした。どうやらVercelはこれらの制約がない(or 現実的なゆるさ)ようなので、Vercelに移し替えることにした。基本的にSSGをメインで動かしているので、コードの変更はほとんどなかった。Cloudflare Workers移行のために昨日のうちにDNSTTLを小さくしておいて正解だった。

Cloudflare Pages / Workers はNext.jsをホスティングするのに向いていないのでは……という気持ちになっている。まあSSGしているページ数が多すぎるのが問題とも言える。

Nightly対応の実装自体は昨日のうちに終わっていたのだけど、デプロイで手間取って今日1日かかってしまった。 実装もまあまあ大変で、今まで必要なかったバージョン情報をアプリケーション内で全体的に引き回す必要があって、大きな変更になった。ただ面倒なことは全部Claude Codeさんがやってくれたので、気分的には割と楽だった。

ここ数日はゲームをやっている時間よりもゲームのためにコードを書いている時間のほうが長い。

2025-12-03

北斗の拳 世紀末ドラマ撮影伝 の新刊が出ていたので読んだ。読んでいなかったのは7巻と8巻。 めちゃくちゃおもしろい。また北斗の拳を読み直したいな……。

北斗の拳が漫画ではなくドラマとして作られていたら、というifを書いたスピンオフ作品。ひたすらハチャメチャで好き。北斗の拳を読んだことある人はぜひ読んでほしいし、読んだことない人は北斗の拳を読んでこっちも読んでほしい。(たぶん)原作の順番をなぞって話が進んでいくので、原作を全部読まなくてもこっちは読める。


先週からストレッチに通っている。とりあえず今月は毎週通う予定。

ランニングの時に左膝が痛くなってしまうのをなんとかしたく通い始めた。整形外科に以前行ったら「筋トレとストレッチだね」と言われたので、その対応。

どうやらお尻と腿の筋肉が特に硬いらしく、頑張って伸ばしてもらっている。結構痛い。

ストレッチだけじゃなく、ランニングのフォームを見てもらうのもどっかでやったほうがいいだろうなあと思っている。

2025-11-30

エイティエイトを2でわって を2巻まで読んだ。良かった。何度かTwitterで見かけていて読もう読もうと思って後回しになっていた。

ハノンを練習しなきゃなあという気にさせられた。しばらく前までは練習していたのだけど、あまりにおもしろくなくてやめてしまっていた。

「エイティエイトを2でわって」というタイトル、めちゃくちゃセンスあって好き。とてもかっこよくていい…。

2025-11-28

物語 ベルギーの歴史 ヨーロッパの十字路 を読み終わった。

とてもおもしろい本だった。ベルギーについて全然知らなかったのだけど、言語の違う地域で大きく2つに分かれることや、国王が大きな役割を持っていることなどを知れてよかった。

2025-11-25

週末はElinの同人オンリーイベントだった。

同人イベントというのに今までほぼ参加したことがなかった(一応1回だけ冬コミに午後フラっと行ったことはあったけど)。せっかくならサークル参加しようと思って、Elinをプログラム解析の視点から解説する本を1冊書いて参加した。

1冊ぐらい売れればいいかなと思っていたら、最終的には11冊も売れたので嬉しい。1冊100円だし金銭的には大したことないのだけど、コミュニティを感じられたのが良かった。

また来年もあるっぽいので、少なくとも一般参加はしたいなあ。


Elinのコードを眺めていて、「死体を鞭で叩いて出た卵を孵すと通常つかない属性がついたチキンが手に入る」という挙動を見つけた。いかにもElinらしいカオスな説明文だと思う。


ElinのDiscordコミュニティでダンジョン飯の話をひたすらしているのを眺めていて、確かにこのゲームはダンジョン飯と感覚が近いところがあるかもなあと思って面白かった。 狂気とか凝った設定とか近いものを感じる。


久しぶりにヒトカラに行っていた。

ピアノのレッスンで今練習している曲がそろそろ合格を貰えそうなので、次の曲を何にするか考えていた。 ここ最近の2曲は奥華子さんのピアノ弾き語り楽譜集から曲を選んで、それをメロディを右手で弾く形にアレンジして弾いている。次はせっかくだから弾き語りの楽譜をそのまま弾いてみたいなと思って、どの曲が歌いやすいか楽譜集にある曲をいくらか試しに歌っていた。

何曲か歌った結果、次に練習する曲は「透明傘」にしようかなと思う。

open.spotify.com

歌った曲の中で、比較的歌いやすかった気がする。今回のライブツアーで多く歌ってた曲というのもある。ライブでの歌いだしがため息が出そうなほどきれいな声で本当に良かった。自分がきれいに歌えるかは別として。

open.spotify.com

「恋」はカラオケで歌っていて自分のリズムで歌えたらめっちゃいいなと思ったのだけど、音域が無理すぎて無理だった。ライブでめっちゃ溜める感じで歌っているから、カラオケより弾き語りで歌えたら楽しそうなのだけど。

カラオケに行く前は、ライブでほぼ確実にやる「変わらないもの」を練習しようかなと思っていたけど、歌いやすさで透明傘に軍配が上がった。

全体として、奥華子さんの曲はどれも自分にとって歌いづらい曲が多いなと再認識した。ささきいさおとか水樹奈々とか歌いやすい。

2025-11-22

pictsquare.net

Elinのオンライン同人イベントにサークル参加している。

これのために同人誌を1冊書いた。同人誌書くの初めて。

内容はゲームの解析入門本。攻略サイトを作る中で知った内容を本にした。

github.com

本の内容と組版環境はこのリポジトリで公開している。技術的な内容を少し。

本のテキストはmarkdownで書いている。そしてそれをmd2reviewを使ってRe:VIEWの記法に変換し、Re:VIEWでPDFにしている。

md2review がいくつか自分の用途でうまく動かなかったので、パッチを当てている。https://github.com/pocke/elin-books/blob/a07e589cd7b2775d70db8d569a0798147b2e47d9/how_to_read_csv/md2review_patch.rb

1つは//から始まるRe:VIEWのコマンドをmarkdownに書いたとき、それをmarkdownとして解釈しようとしてうまく動いていないところがあった。基本的にはmarkdownのplain textとしてRe:VIEWまで渡っていくので問題ないのだけど、//tsize[|latex|20,90,40]のようなテーブルサイズを指定するコマンドが、リンクと解釈されてうまく動いていなかった。そのため、コマンドをpreprocessでエスケープして、postprocessで書き戻すようにしている。

また、markdownではテーブルに|を使うのだけど、テーブルの中で|をテキストとして使いたい場合は\|のようにエスケープできる(少なくともGFMではそう)。しかしmd2reviewが使っているredcarpetではパイプのエスケープが出来ないようで、バックスラッシュをつけていてもテーブルとして解釈されてしまう。 そのため\|エスケープと書き戻しをしている。

他に脚注も手を入れている。Re:VIEWでは基本的には脚注の参照先がテキスト末尾にあっても、脚注の参照があるページに脚注のテキストが表示されてくれる。ただし脚注がテーブルやコラム内にあるとこれがうまく動かず、本の末尾に脚注が移動してしまう。 これは脚注の参照先を参照があるページの近くに置いておけば問題がない。しかしmd2reviewだとmarkdownの途中に脚注の参照先を書いていても、強制的にテキストの一番最後にまとめて脚注が書き出されてしまう。おそらくredcarpetの仕様。 これに対処するため、md2reviewがRe:VIEWの記法に変換したあと、@<fn>のあとに最初に空行が表れたところに//footnoteを移動させるようにした。