Class: VivlioStarter::CLI::Guards::VfmCheck

Inherits:
BaseCheck
  • Object
show all
Defined in:
lib/vivlio_starter/cli/guards/vfm_check.rb

Overview

VFM(Vivliostyle Flavored Markdown)の CLI が利用可能かを検証する。

なぜ node とは別に見るのか(2026-08-16 の実測):

`vfm` は Vivliostyle CLI に同梱されず、`@vivliostyle/vfm` を別途入れないと
PATH に現れない。node も vivliostyle も揃った環境で `vfm` だけ無い状態が普通に成立する。

なぜ 🔴 で止めるのか:

変換は `vfm foo.md > foo.html` とリダイレクトで行うため、コマンドが無いと
**0 バイトの HTML が作られる**。後続のステップはそれを正常な変換結果として読み、
本文が空のまま PDF まで組み上がる。著者に届くのは「白い本」で、原因が原稿にあると
誤解させる。変換の入口で止めるほうが静かに壊れた本より安い。

Instance Method Summary collapse

Constructor Details

#initialize(runner: Kernel) ⇒ VfmCheck

Returns a new instance of VfmCheck.

Parameters:

  • runner (#system) (defaults to: Kernel)

    テストで外部コマンド実行を差し替えるための DI



19
20
21
22
# File 'lib/vivlio_starter/cli/guards/vfm_check.rb', line 19

def initialize(runner: Kernel)
  @runner = runner
  super()
end

Instance Method Details

#validateObject



24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/vivlio_starter/cli/guards/vfm_check.rb', line 24

def validate
  return [] if @runner.system(Common::VFM_COMMAND, '--version', out: File::NULL, err: File::NULL)

  [error(
    'VFM が見つかりません(Markdown を HTML へ変換できません)',
    detail: [
      '対処: npm install -g @vivliostyle/vfm',
      '   (vs doctor --fix でもまとめて導入できます)',
      '注意: npm の `vfm` は同名の別パッケージです。@vivliostyle/vfm を指定してください'
    ]
  )]
end