← ishizakahiroshi.com
ツール紹介 2026-09-23

オフラインで動く Markdown エディタ、上へ戻すと押し戻されるスクロールを直しました(v0.4.2)

夜のデスクに置かれたノート PC の画面が、左にソース、右にプレビューと 2 つに分かれているヘッダー画像

ネット接続不要、単一の HTML ファイルだけで動く Markdown エディタ/ビューア offline-md-editor-viewer の v0.4.2 を出しました。ソースとプレビューを並べて連動スクロールさせていると、文書の先頭へ戻る途中で、あと少しのところで止まって押し戻されることがありました。原因は見出しの数え方のずれと、スクロールの跳ね返りの 2 つでした。0.4.2 は GitHub Releases、npm、Microsoft Store のすべてで公開済みです。

note で読む → GitHub リポジトリ → Microsoft Store →

押し戻されていた原因は 2 つ重なっていた

連動スクロールは、ソースとプレビューの見出しを組にして位置を合わせています。ところがソース側の見出しの数え方が Markdown の解析結果と食い違っていて、組がずれていました。

もう 1 つは跳ね返りです。片方をスクロールするともう片方も動き、その動きがまた元の側へ伝わって押し戻していました。鏡を向かい合わせに置いたような状態です。

直し方は 3 つです。見出しは解析結果から取る。連動で書いたスクロール位置が跳ね返ってきたら、値を見て捨てる。片方が先頭か末尾に着いたら、もう片方も先頭か末尾へ合わせる。

押し戻されていた仕組みと 3 つの直し方の図。見出しの組がずれる、跳ね返りが往復する、先頭の手前で止まる、の 3 つに、直し方を 1 つずつ当てている

起きていたことは 3 つ。直し方も、それぞれに 1 つずつ当てています。

向かい合った 2 枚の文書パネルが互いを押し合い、間のスクロール帯が先頭の少し手前で止まっているイラスト

左右の画面がお互いを押し返していたのが、今回の不具合の正体でした。

文字化けする前に、止まるようになった

Shift_JIS、EUC-JP、ISO-2022-JP で保存するとき、その文字コードで表せない文字(絵文字や、波ダッシュの など)が入っていると確認を出すようにしました。以前は黙って ? に置き換わっていて、開き直して初めて気づく状態でした。キャンセルすれば、ファイルは変わりません。

文字コードを選んで保存するときの、以前といまの違いの図。以前は黙って ? に置き換わり、いまは確認を出してキャンセルできる

以前は黙って ? に置き換わるだけでした。いまは確認が出ます。

記事に書いたこと

note 版には、アプリ全体を見直す監査で出た指摘 13 件のうち目に見える直しと、セキュリティ側の変更も書いています。プレビューのリンクを中クリックしたときの扱い、相対パスの .md を引数に起動したときのフォルダの認可、デスクトップ版のファイル操作が使うパス、Microsoft Store 用の CI の 4 点です。

窓の形をしたアプリのキャラクターが、虫眼鏡で点検されているイラスト。背後にチェック印が並んでいる

アプリ全体を端から見直して、指摘を 1 件ずつ直していきました。

壁の小さな穴に当て布を当てて塞いでいるイラスト。外側で鎖の輪が待っている

外部リンクを無効にしていても、中クリックだけがすり抜けていました。