0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AsciiDocの図・表に章番号付きキャプションを付けるVS Code拡張を作りました

0
Posted at

動機

AsciiDocで技術文書を書いていると、

  • 図1-1
  • 図1-2
  • 表2-1

のような章番号付きキャプションを付けたいことがあります。

Asciidoctorにはキャプション番号の機能がありますが、章ごとに番号をリセットしたり、「図1-1」「表2-3」のような形式で表示したりするには工夫が必要でした。

そこで Asciidoctor Numbered Captions を開発しました。

できること

例えば次のようなAsciiDocを書きます。

= Sample Document

== はじめに

.システム構成
image::system.png[]

.設定一覧
|===
|項目 |値

|Mode
|Auto
|===

プレビューでは次のように表示されます。

図1-1 システム構成

表1-1 設定一覧

さらに章が変わると、自動的に

図2-1
表2-1

となり、章単位で番号がリセットされます。

特徴

この拡張には次のような特徴があります。

  • VS CodeのAsciiDocプレビューでそのまま利用可能
  • Asciidoctor.js Extensionとして実装
  • Asciidoctor.js 4に対応
  • JavaScriptのみで実装
  • 図・表・例・リストなどキャプションを持つブロックに対応

この拡張が生まれた経緯

実は、この拡張には少し裏話があります。

以前のAsciidoctor VS Code拡張では、外部から独自のAsciidoctor Extensionを追加する仕組みがありませんでした。

私は「VS Code拡張を改造しなくても、外部拡張としてAsciidoctor Extensionを登録できる仕組みがあると、多くの拡張をコミュニティで開発できるようになる」と考え、Extension Registration API を提案しました。

コミュニティで議論を重ねた結果、このAPIは正式に採用されました。

そして、そのAPIを活用した実践例として開発したのが Asciidoctor Numbered Captions です。

OSSへの提案が実際の機能となり、その上で動く拡張機能まで公開できたことは、開発者として非常に嬉しい経験でした。

実装について

実装はAsciidoctor.jsのTreeProcessorを利用しています。

処理内容は比較的シンプルで、

  1. 現在の章番号を取得
  2. ブロック種別ごとにカウンターを管理
  3. キャプションを書き換える

という流れです。

Asciidoctor.js 4ではExtension APIも整理され、JavaScriptだけでも拡張を書きやすくなったと感じました。

これからAsciidoctor Extensionを書いてみたい方にとっても、参考になるサンプルになれば嬉しいです。

今後

今回作成したのは「章番号付きキャプション」という比較的小さな機能ですが、新しいExtension Registration APIによって、今後はさらにさまざまな拡張が実現できるようになります。

例えば、

  • 独自マクロ
  • 独自ブロック
  • 独自インラインマクロ
  • ドキュメント変換
  • プレビュー専用の機能追加

なども、VS Code本体を変更することなく実装できます。

今回の拡張が、そのようなAsciidoctor拡張開発の第一歩になれば嬉しく思います。

おわりに

今回の開発では、自分が提案したAPIを使って拡張機能を実装・公開するところまで実現できました。

OSSでは「利用者」として参加するだけでなく、「もっとこうしたら便利になる」という提案が、コミュニティの議論を経て実際の機能になることがあります。

今回の経験は、その面白さを改めて実感する機会になりました。

AsciiDocを使っている方、Asciidoctor.jsで拡張を書いてみたい方は、ぜひ試してみてください。

IssueやPull Requestも歓迎です!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?