adiary置き換え計画始動から連なる、Lyndbaum v4.40アップデートの続き。
バージョンが0.2上がり、今回は主に個人的な困りごとを大きく改善した。ちゃんとやることが減っているためアップデート速度は落ちている。
文字数が過大になるとChromiumでMS-IMEがまともに動かなくなる問題の修正
Chromiumで<textarea>に8万字くらい入れた状態で、そのもっとも下の行で変換を行おうとした場合、MS-IMEがまともに動かなくなる問題があった。これを改善し、まともな速度になるようにした。
この問題はFirefoxでは起きないことを確認していたが、私はMS Edgeをブラウザにしているため対応した。対応としてはCodeMirror 6を入れることで対応した。40万字入れても安定しており、全文コピペも行える。CodeMirror 6は表示された領域以外をレンダリングから外しているらしく重くならないらしい。Opus 5.5からの受け売りなので本当かどうかは知らないが、軽くなったのは間違いがない。
これによって旅行記などの記事にある長大記事を一々VSCodeで書いて移植しなくてよくなったので、移植ミスが減ることが期待できる。
このこととは関係ないがChromium系はIMEに関する挙動が全般的におかしいと思っているのでどうにかなってほしい思いがある。例えばVSCodeで適当な文字列を選択した状態で何か入力すると既存の入力が崩壊する。これはGoogle IMEでも確か起きる。
エディタ上での構文強調に対応
上の問題解決にCodeMirror 6を使ったので、そのついでに対応した。CodeMirror 6はObsidianやTyporaなどに採用されているとされている、構文表示と構文強調を両立するためのライブラリなので、ついでに構文の強調もできるようにした。
最低限の対応しかしてないのでそこまでリッチではないが、少し見栄えが良くなった。Lyndbaumで利用しているSatsuki記法もハイライトされるようにしてある。
WYISIWYGにすることも考えたのだが、これはやめることにした。理由は考えることがあまりにも多すぎるからだ。
例えば出来のいいNotionでさえバレットリストを数値リストに変換するには面倒なメニュー操作が必要だし、MilkDownでは表や画像を一括選択して消すなどの操作がそのままではやりづらく、選択範囲もわかりづらい。Altテキストやファイル名だけ差し替えるのも困難だ。
WYSIWYGを保ったままテキストのように扱うというのは、かなり困難なので今回は見送ることにした。複雑であるより単純であるほうが使い勝手はいいだろうという判断だ。ギークはNotionが好きだと思うが、一般人はまず使いこなせないのも、そういうことだと思っている。
検索ウィジェットに検索タイプを非表示にするオプションを追加
デザイナで検索タイプの選択を非表示にできるようにした。
検索字はワードを叩いてエンターしたいので、ここでわざわざラジオを選択したくなかった。
選択は検索結果の画面で可能なので、そっちでするように倒したが、ここもLyndbaumテーマでは手入れして選択の手間を減らしている。
変更前はプルダウンメニューを開いて選択する必要があったが、変更後はトグルボタンを選択するだけでワンアクション減っている。UX向上!
検索画面のファセット検索で親タグだけ出すようにした
変更前はすべてのタグが羅列されていて探すのが大変だったが、変更後は親タグから選ぶのでマシになった。タグのインクリメンタルサーチもあると便利な気はするのだがUIをどうすればいいかが思いつかなかったので、一旦はこの形で止めている。
そもそもタグが無数にあるこのサイトが悪いと言われたら、それはそうな気はする。でも、adiaryの使い方としては理にかなっているというか、個人的にはてなダイアリーはPukiwikiの親戚だと思ってるので、あるべき姿なきはしている。
セキュリティ対応
- 検索時のクエリパラメーターの
c(ctype)の値をエスケープせずに画面に出していたのを直した - タグの無害化で、実体参照で書いたjavascript:が機能してしまう不具合の修正
- メール送信のエラーを画面に出さず、エラーログに書くようにした
- DBの行と設定のファイルを、書き終えてから置き換えるようにした
- ファイルに出してる途中でOSが落ちたりするとファイルが壊れるため
あとがき
Lyndbaumの目標をどうするかを定めておらず、開発にブレができる懸念があったので一旦何をするためにやっているのかを考えることにした。
adiaryは「The "adiary" is high performance CMS」だったが、Lyndbaumは「The ultimate personal use lightweight self-hosted CMS for Japanese」にしようと思った。長いな。
端的に言うと日本語向けの軽量セルフホスト型CMSという感じ。Markdownと10万字オーダーの長文に対応し、ファセット検索や全文検索、バックリンクに対応し記事を探しやすく、高速に動作し、レンタルサーバーでも動く個人用のCMSみたいなところを目指したい。強欲だ。
旅行記や小説のような長大文章を書くに不自由せず、Wikiのような使い方もできる。将来的にはギャラリーサイトやWebサイトの作成(WordPressのように文字通りのCMS)ができるようにしたいところだが、風呂敷をどこまで広げるかはまだ考え切れていないが、まぁあくまで自分用で、使いたい人がいれば使ってね的なスタンスでぼちぼちやっていければと思っている。
そういえばバージョンの桁を増やしてMajor.Minor.Patch-Brach形式にしようと考えたのだが、バージョンを考えるコストが面倒なのと打つのが面倒なので、これは辞めることにした。桁が足りなくなったらx.yyのyyをyyyにすれば回避できるだろうということで、もし問題になったらその時に考えることにした。