Skip to content

feat: [WIP] migrate remark ecosystem from v8 to v13+#227

Open
akabekobeko wants to merge 1 commit intomainfrom
feat/migrate-remark
Open

feat: [WIP] migrate remark ecosystem from v8 to v13+#227
akabekobeko wants to merge 1 commit intomainfrom
feat/migrate-remark

Conversation

@akabekobeko
Copy link
Copy Markdown
Member

Migrate the entire remark/unified/rehype pipeline from remark-parse 8 (legacy tokenizer API) to remark-parse 11+ (micromark-based). This includes updating all plugins to the new APIs, replacing deprecated packages, and updating test expectations for new parser behavior.

Key changes:

  • unified 9→11, remark-parse 8→11, mdast-util-to-hast 11→13
  • Replace remark-attr with custom md-attr-parser transformer
  • Replace remark-shortcodes with custom [[toc]] transformer
  • Replace remark-footnotes with remark-gfm + custom inline footnote transformer
  • Update all handlers to v13 State API (state.all/state.patch)
  • Fix hastscript v9 property interpretation in document.ts
  • Fix refractor v4 Root node extraction in code.ts
  • Add image attribute support to attr plugin
  • Update footnote Pandoc transformer selectors for v13 format
  • Remove defs.test.ts (tested obsolete Parser.prototype API)
  • Update test expectations for remark 13+ behavior changes

Migrate the entire remark/unified/rehype pipeline from remark-parse 8
(legacy tokenizer API) to remark-parse 11+ (micromark-based). This
includes updating all plugins to the new APIs, replacing deprecated
packages, and updating test expectations for new parser behavior.

Key changes:
- unified 9→11, remark-parse 8→11, mdast-util-to-hast 11→13
- Replace remark-attr with custom md-attr-parser transformer
- Replace remark-shortcodes with custom [[toc]] transformer
- Replace remark-footnotes with remark-gfm + custom inline footnote transformer
- Update all handlers to v13 State API (state.all/state.patch)
- Fix hastscript v9 property interpretation in document.ts
- Fix refractor v4 Root node extraction in code.ts
- Add image attribute support to attr plugin
- Update footnote Pandoc transformer selectors for v13 format
- Remove defs.test.ts (tested obsolete Parser.prototype API)
- Update test expectations for remark 13+ behavior changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@akabekobeko akabekobeko self-assigned this Feb 9, 2026
@akabekobeko
Copy link
Copy Markdown
Member Author

memo:
以下のプロンプトを Claude Code に指定して、最新 remark 移行を試してみました。

このプロジェクトで利用している remark-parse と関連パッケージを最新に更新してください
- 現在の remark-parse 8 から 9 以降へは破壊的な変更に対応する必要があります
- 破壊的な変更の対応と最新の仕様は https://github.com/remarkjs/remark を参考にしてください
- 破壊的な変更に対応のうえ、現在のユニットテストをすべてパスさせてください
- remark 系以外のパッケージも remark 対応に必要ならば更新してください

これをベースによりよい対応がないか試してゆく予定です。

@u1f992
Copy link
Copy Markdown
Member

u1f992 commented Feb 10, 2026

@akabekobeko じつは

  • remark-attrのmicromarkベースのリブート版 https://github.com/u1f992/remark-attribute
  • sectionizeのmicromark実装(まだテストが通っていない)
  • rubyのmicromark実装(まだテストが通っていない)

を作っています。これらを@vivliostyle/の一部として公開してもらってVFMで使えればいいなと思っていたのですが、Claudeだけで移行できてしまいそうでしょうか?

@akabekobeko
Copy link
Copy Markdown
Member Author

@u1f992

これらを@vivliostyle/の一部として公開してもらってVFMで使えればいいなと思っていたのですが、Claudeだけで移行できてしまいそうでしょうか?

Claude Code 的にはガードレールとして具体的な仕様やテストがあると、かなりの精度で整合をとってくれます。そのため本 PR にテストなどの commit をのせるか、コメントに記載いただければ私の方で試してみます!

なお各構文を npm として個別公開した場合は、そちらへの移行も検討します。

@u1f992
Copy link
Copy Markdown
Member

u1f992 commented Feb 10, 2026

@akabekobeko
やっつけですみませんがとりあえずテストは通るようにしてアップロードしました。これらも結局Claude Codeによるところが大きいですが、micromarkの調査から行なっているので、精度はそれなりに高いものと思います。使っていただけるならリリースまでには整理します。

  • remark-attribute - 以前のremark-attrのwooorm氏のコメントの通り、remark-directiveのattribute記法パーサーを流用した実装です。
  • remark-sectionize - フォーク元になくVFMで追加したセクションを解除する記法は、トークンの扱いを変えるので、micromarkのレイヤーで扱うのが順当です。これに合わせて全体を書き直しています。
  • remark-ruby - 特筆すべきところはありません。動作に互換性があるプラグインです。

これらはいずれも、wooorm氏による公式のプラグインと同じ3層(micromark-extension-*/mdast-util-*/remark-*)で構成してモノレポにしています。今後万が一wooorm氏が大きなアーキテクチャ変更を行った際に、移行ガイドに従いやすくしたいと思っているためです。個々のパッケージはできるだけミニマムにしているつもりですが、まとめるには多い依存関係がそれぞれにあります。

ですので、npmに、@vivliostyle/micromark-extension-{attribute,sectionize,ruby}/@vivliostyle/mdast-util-{attribute,sectionize,ruby}/@vivliostyle/remark-{attribute,sectionize,ruby}は公開させていただきたいです。

リポジトリとしては以下のどちらかの形がよいと思います。

  1. Vivliostyle organizationに現在のremark-attribute/remark-sectionize/remark-rubyリポジトリを置く。当座のメンテナは引き受けるつもりです
  2. VFMをモノレポにして9パッケージ+VFMを含める

いかがでしょうか?

@akabekobeko
Copy link
Copy Markdown
Member Author

@u1f992
提案ありがとうございます!

リポジトリとしては以下のどちらかの形がよいと思います。

の案では以下がよさそうですね!

VFMをモノレポにして9パッケージ+VFMを含める

モノレポとした場合、npm publish 運用も検討が必要そうです。これはこれで Issue と PR を分けた方がよいですね。

@u1f992
Copy link
Copy Markdown
Member

u1f992 commented Feb 11, 2026

@akabekobeko でしたら、とりあえずVFM 1パッケージのみのモノレポ化を進めていただいて、そこにパッケージを足すPRを出すのでレビューしていただき、揃ったら移行を始めるという感じでいかがでしょうか!

整理進めた結果3×3パッケージは細かく分けすぎで、@vivliostyle/remark-{attribute,sectionize,ruby}の3パッケージにまとめて、micromarkプラグインとmdastユーティリティとremarkプラグインをまとめてエクスポートしようと考えています。

@akabekobeko
Copy link
Copy Markdown
Member Author

@u1f992

りあえずVFM 1パッケージのみのモノレポ化を進めていただいて、そこにパッケージを足すPRを出すのでレビューしていただき、揃ったら移行を始めるという感じでいかがでしょうか!

よさそうですね!
本 PR は WIP of WIP な位置付けなのと、作業方針としてモノレポは remark と無関係に進められるので別建てで取り組んでみます。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants