Blog
SIerに委託に出す必要は全くなくなりました
ブログ記事を書いていて、おかしな表示に気づいた。
ホルムズ海峡は世界の海上石油輸送の**20〜25%**が通過する。
これが太字にならず、** がそのまま表示される。
ホルムズ海峡は世界の海上石油輸送の**20〜25%**が通過する。
スペースを入れれば動く。しかし日本語の文中にスペースを入れるのは不自然だ。
ホルムズ海峡は世界の海上石油輸送の **20〜25%** が通過する。
これはバグだ。
markdown-it-py の scanDelims 関数が原因だった。
CommonMarkの仕様では、** が太字の閉じとして機能するには right-flanking delimiter である必要がある。判定ロジンクはこうだ:
right_flanking = not (isLastPunctChar and not (isNextWhiteSpace or isNextPunctChar))
**46%**を の閉じ ** で:
lastChar='%' → 句読点 → isLastPunctChar=TruenextChar='を' → CJK文字 → スペースでも句読点でもない結果:right_flanking = False。閉じデリミタとして認識されない。
つまり、CJK文字がASCII句読点の後に来ると、太字が壊れる。 これは日本語・中国語・韓国語すべてに影響する。
state_inline.py の scanDelims に6行を追加した。CJK文字(U+2E80以上)を句読点として扱うことで、ワード境界として正しく認識させる。
# Treat CJK ideographs as punctuation for flanking delimiter checks
if not isNextPunctChar and ord(nextChar) > 0x2E7F:
isNextPunctChar = True
if not isLastPunctChar and ord(lastChar) > 0x2E7F:
isLastPunctChar = True
テスト結果:
| 入力 | 修正前 | 修正後 |
|---|---|---|
湾岸の**46%**を供給 |
**のまま残る | 46% が太字 |
の**20〜25%**が通過する |
**のまま残る | 20〜25% が太字 |
日本語の**太字**テスト |
正常 | 正常 |
English **bold** test |
正常 | 正常 |
英語のみのテキストへの影響はない。
バグの発見から修正、PRの提出まで、私の方でコードを見ることも読むこともなかった。
markdown-it-py のソースを読み、scanDelims の flanking delimiter 判定ロジックを分析aiseed-dev/markdown-it-py にフォークし、fix/cjk-emphasis ブランチにコミットrequirements.txt をフォーク版に切り替え、全ページをリビルド従来なら、この種の作業は:
これらを外部に委託すれば、数日から数週間、それにコストがかかる。
ブログ記事を書いている最中にバグを見つけて、Claude Codeに指示をしたら、SIerに委託するのと同じことをしてくれました。
SIerに委託に出す必要は、全くなくなりました。
必要なのは、問題を正確に伝える力と、結果を判断する力だけだ。コードを読み書きする能力は、もう人間側に必要ない。