Skip to content

vivliostyle create コマンドで日本語テンプレート(basic-ja)を選択できるようにする #762

@ogwata

Description

@ogwata

概要

templates/basic-ja として basic テンプレートの日本語版を作成しましたが、現状では vivliostyle create コマンドの対話的なテンプレート選択肢に含まれていないため、ユーザーが直接選ぶことができません。basic-ja を正式なテンプレートとして登録し、vivliostyle create および npm create book の両方から利用可能にするアップデートが必要です。

現状

  • templates/ ディレクトリには minimalbasicbasic-ja の3つが存在する
  • ただし src/constants.tsTEMPLATE_SETTINGS には minimalbasic の2つしか登録されていない
  • そのため vivliostyle create 実行時の対話型選択肢に basic-ja が表示されない
  • --template ./templates/basic-ja のようにローカルパス指定すれば利用可能だが、正規の選択肢としては使えない
  • create-booknpm create book)はメインCLIの @vivliostyle/cli/commands/create に処理を委譲しているため、メインCLI側の対応がそのまま create-book にも反映される

実装方針

以下の2つのアプローチが考えられる。

方針A:言語選択に応じてテンプレートを自動切替

vivliostyle create の対話フローでは、テンプレートを選ぶ前にユーザーに言語(language)を尋ねている。basic テンプレート選択時に、言語として ja が選ばれていれば自動的に basic-ja を使用する。

  • メリット: ユーザー体験がシンプル。テンプレート選択肢が増えない
  • デメリット: 他言語のテンプレートを追加するたびに分岐ロジックが複雑になる。また非対話モード(--template basic --language ja)でも自動切替が働くかの確認が必要

方針B:テンプレート選択肢に basic-ja を明示的に追加

TEMPLATE_SETTINGSbasic-ja をエントリとして追加し、テンプレート選択時に直接選べるようにする。

  • メリット: 実装がシンプル。今後他の言語版テンプレートを追加する場合も同じパターンで対応可能
  • デメリット: テンプレート選択肢が増える

変更が必要なファイル

どちらの方針でも以下の変更が必要:

  1. src/constants.tsTEMPLATE_SETTINGSbasic-ja エントリを追加(方針B)、または言語とテンプレートのマッピングを追加(方針A)
  2. src/core/create.ts — 方針Aの場合、テンプレート解決ロジックに言語による分岐を追加。方針Bの場合は変更不要
  3. templates/README.mdbasic-ja テンプレートの説明を追加
  4. tests/create.test.ts — 新テンプレート選択に関するテストの追加

create-booknpm create book)はメインCLIの src/commands/create.ts をそのまま呼び出しているため、上記の変更により npm create book 経由での利用にも自動的に対応される。ただし、動作確認は vivliostyle createnpm create book の両方で行うこと。

多言語テンプレート対応をする場合の検討事項

なお、ja 以外の言語版テンプレート(例:basic-zhbasic-ko)を追加する場合、以下の課題が生じる。

  1. テンプレートの命名規則 — 現在は basic-ja という命名だが、言語版が増える場合、basic-{言語コード} を正式な規則として定めておく必要がある。

  2. 選択肢の増加への対応 — 方針Bでは言語版が増えるたびに TEMPLATE_SETTINGS のリストが長くなる(例:basicbasic-jabasic-zhbasic-ko…)。5言語以上になると選択肢が煩雑になるため、結局は方針Aのような言語選択とテンプレート選択を連動させる仕組みが必要になる可能性がある

  3. テンプレート内容の同期 — 各言語版テンプレートは basic の全ファイルを翻訳したコピーであるため、basic の内容が更新された場合、すべての言語版を追従させる必要がある。

  4. 該当言語のテンプレートがない場合のフォールバック — 方針Aの場合、ユーザーが ja 以外の言語(例:fr)を選び、basic-fr が存在しなければ、英語版の basic にフォールバックする挙動が必要になる。このとき、フォールバックが発生したことをユーザーに通知すべきかどうかも検討が必要

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions