2026/10/10(土)adiaryを爆発的に改造した

adiaryを導入してからこれまで、ちまちま改修をしていたが根幹的な部分に手を入れるのが億劫で放置していた。

そこで今回その大半を一気にガッと直すことにした。理由は単純でOpus 5.5を使っていて十分な性能があり、ほぼハルシネーションを気にしなくていい次元に達したと感じたからだ。

Codexも使えるのでCodexでもいいっちゃいいのだが、Opus 5.5はGPT-5.6 Solより賢い気がしているのでこちらを使っている。GPT-6 Sol?あれはポンコツだと思う。

バグ修正

YoutubeのIDにハイフンがあると正しく出ない問題の修正

https://github.com/Lycolia/adiary-extends/commit/429e54b47a530f4354e45c050f8ad6f0da2fe5e3

以下の問題のパターンが表示できなかったためこれを出来るようにした。

問題ないパターン 問題のパターン
[&https://www.youtube.com/watch?v=xikYPB3QO_0&t=2145s] [&https://www.youtube.com/watch?v=n_D__CT5-H0&t=4279s]

数字リストが2桁になるとコードフェンスのネストが機能しなくなる問題を修正

https://github.com/Lycolia/adiary-extends/commit/5b90f22bb557871f44cbad33ca6b3429e368463c

インデントの処理を直した。元の処理は桁数が増えたことによるインデント幅の増分が取れなかったので、取れるようにして解決した。

修正前 修正後

リストにネストされたテーブルが表示されるようにした

https://github.com/Lycolia/adiary-extends/pull/75/changes/a476eab24cedf3520bdab61b0cf8ee7d76fbe5a6

次のような構文でテーブルが出るようにした。

- hoge
  |col1|col2|
  |----|----|
  |row1|row2|

`` foo ` bar ``が正しくコードスパンにならない問題の修正

https://github.com/Lycolia/adiary-extends/commit/6c95f8edea6e65f93b1a1a4d3917c7ed4bbd2d27

遭遇するたびに<code>で書いてた記憶があるが、しなくてよくなった。

修正前 修正後

チェックボックスリスト周りの抜本的な修正

https://github.com/Lycolia/adiary-extends/pull/75/changes/6dc02a3ffd6e835189d05eaffbc4dcf0a1fb9e16

チェックボックスに構文の文字がそのまま出る不具合や、リストマーカーが出る問題などがあったため、全体的に直している。そもそも使った記憶がなく、本家も使うことをろくに想定していないと思うため、対応する必要性は謎であるが、まぁ取り敢えずほら、構文としてあるし?みたいな?

修正前 修正後

リストで深い入れ子から浅い段へ戻るケースの一部が処理できていなかったのを修正

https://github.com/Lycolia/adiary-extends/commit/4ac398ed30adcd0a10304dc815985ec7af035da3

一部のケースで入れ子が深くならず、浅い段に復帰するときの深さで固定されているケースがあったため、それを直した。

具体的にはこれの最後の奴らが3段目のインデントに全て収束し、4段目のインデントが起きない問題があった。これはどうもケツに3段目がいるせいで、そこに引っ張られていたらしい?

- `-protocol_whitelist "tcp, udp, ..."`
  - カンマ区切りでプロトコルを指定することで、プロトコルを利用できるようになる
  - https://ffmpeg.org/ffmpeg-protocols.html#Protocol-Options
  - SDPファイルを用いてRTPストリームを受ける場合には `"file,udp,rtp"` を指定する
    - file
      - ローカルファイルへのアクセスプロトコル
      - <https://ffmpeg.org/ffmpeg-protocols.html#file>
    - udp
      - UDP
      - <https://ffmpeg.org/ffmpeg-protocols.html#udp>
    - rtp
      - RTP
      - <https://ffmpeg.org/ffmpeg-protocols.html#rtp>
    - なんでfileがいるのかは正直良くわかってない

機能改善

邪魔なヘルプの削除

https://github.com/Lycolia/adiary-extends/commit/196b8d75ecfc4001a192b7b83893f8987bb60f29

adiaryのヘルプはマウスオーバーで出るのだが、出たはいいもののどこかをクリックしないと消えないことがあり、しかも他のUIの手前に出てくるのもあり記事を書いててめちゃくちゃ邪魔だったので消した。

タグ入力をインクリメンタルサーチできるように修正

https://github.com/Lycolia/adiary-extends/commit/07516010985f18506b3b6fafb419fe3fd1d7ab4b

今回の目玉コンテンツその1!!!

タグを探すのが面倒だったので楽にできるようにした。うちは地獄のようにタグがあるので面倒で面倒でもうやってられなかった。そもそも何のタグがあって何のタグがないかもわからないし、限界だった。

変更前 変更後


多重拡張子のアップロードを許容するように変更

https://github.com/Lycolia/adiary-extends/commit/5e4b49f7f9f0a27f9531856aeed3048460da085b

今回の目玉コンテンツその2!!!

photo.edited.jpgのような名前を持つファイルがアップロードできるように対応した。多重拡張子になっているファイルをアップロードしようとしてエラーになった回数は計り知れない。

これまでは恐らくセキュリティ対策で規制がかかっておりhoge.php.jpgと言ったものがアップロードされたとき、Apacheの設定によっては不正にphpが実行される恐れがあった。で、そこを過度に恐れるあまりhoge.edited.jpgみたいなのも弾かれる状態になっていた。

今回はその対策として拡張子以外のピリオドをアンダースコアに改名してアップロードすることで対処している。hoge.edited.jpgならhoge_edited.jpgでアップロードされるみたいな。

記事中の画像からサムネイルを選べるようにした

https://github.com/Lycolia/adiary-extends/commit/1246e9b7fdd115e9cdb9f381a5d0c8bef1be07d5

今回の目玉コンテンツその3!!!

実はadiaryにはOGPを任意設定する機能がない。記事中を文字列検索してパターンにマッチしたものが自動でOGPに設定されるのが仕様だ。

そこで過去にv0.2.0で任意の画像をサムネイル(OGP)に設定可能にしたが、元々あったロジックを流用して実装した関係で、色々煩雑だった。これは特定のフォーマットで入力する必要があるのと、入力ミスで存在しないURLが埋め込まれることがあったためだ。

なので私は手打ちしたときは毎回OGPを手動確認してちゃんと出るか見ていた。しかしこれが面倒だった。なので今回は任意のOGPを選べつつ、入力ミスも起きないスーパーウルトラハッピー仕様にしたわけだ。

この機能の追加に当たり記事中の画像のみを選択対象にしたため、それ以外も設定できる脱出ハッチとして従前の手設定も一応残しているが、個人的に利用した実績がないため、使うことはない気もしている。

記事外の画像を入れる場合は、これまで通りの方法で指定して解決する。

記事に膨大な画像があると膨大に出るが、まぁ別にいいかと言うので放置することにした。

記事から画像が消えるとどうなるかについては試していないが、従前のままなら選択肢からは消えるものの、手設定欄に残っているはずである。動作確認はしていない。

記事のごみ箱と更新履歴機能を追加

https://github.com/Lycolia/adiary-extends/commit/3f5f203624e564015195dd18e2dabacf6955108d

今回の目玉コンテンツその4!!!

記事を誤って消したが戻したいとか、間違えて別の記事で上書きするなどのミスをしばしばしていたので、この対策として復旧できる機能を追加した。

特に過去記事からコピペして別の記事に移植する作業中に移植先と移植元を間違えるなどで頻発していたので、その対策。

履歴はPukiwikiを参考に既定では原則最終更新から3h経過で積むことにしている。ゴミ箱についても、消したけど戻したいということが年に一回くらい起きていたため、機能追加した。

通常の画像構文で<figure>にラップされるのをされないようにした

https://github.com/Lycolia/adiary-extends/pull/75/changes/61d287986ed812126f3b72b0482e2fb9a476ac90

基本的にはセマンティクス違反の解消。但し根絶はしておらず、条件次第で許容している。

今までは<img>の描画時に<figure>でラップしていたため、画像の多い記事は若干軽くなっているはず。

イメージとしてはこんな感じ。

- <figure>
    <a href="..."><img src="..."></a>
- </figure>

その他

その他Markdown周りとして、リポジトリの変更履歴などには書けていないが、恐らく細かい部分が色々改善したはず。正直実装面はClaude Opus 5.5に投げたため、どこまで変わったのかよく分かってない。

取り敢えず使っていない構文の切り捨てを指示したが、差分を見た感じ切り捨てられているかは謎である。まぁ別に使ってない構文だしどうでもいいのだが…。軽く見た感じのデグレはなさそうなのでヨシくらいで見ている。

Markdown処理に関するドキュメントとテストコードの追加もしたが中身は流し見程度しかレビューしていない。

あとがき

更新が多いためマイナーバージョンを12も上げている。そのうち10は一気に上げた。0.30.0->0.40.0->0.41.0->0.42.0みたいな。

Claudeの契約はProだが、今回の対応ではClaude Codeの週制限の25%しか使わなかった。やった規模感のわりに、全然余裕だなぁという感じ。作業時間としては動作確認とレビュー込みで5時間くらい。

この改造版はGitHubで公開しているものの、私以外が使うことは特段考慮していないため、使いやすいかどうかは謎である。少なくともテーマは完全に今表示しているものにロックインしており、他のテーマで使えるような作りにはしていない。

また今回の対応に当たり、古い記事を中心に構文の揺らぎがあったため以下の記事に対して構文の正規化を掛けている。このため、内容に本質的な変化はないがタイムスタンプの更新が入っている。

今回は数が多いのでこのように書いているが、普段から巡回で構文が壊れている記事を見かけたらひっそり直しているので、まぁよくあることではある。

現存している記事でadiary移行前からあるものは、モノによってはWordPress→Qiita→はてなブログ→WordPress→adiaryという過酷な移行をたどっているため構文が壊れていることはざらにある。何なら今回の対応ではてなフォトライフの参照構文を一つ見つけ消したくらいだ。