-
-
Notifications
You must be signed in to change notification settings - Fork 29
Description
概要
templates/basic-ja として basic テンプレートの日本語版を作成しましたが、現状では vivliostyle create コマンドの対話的なテンプレート選択肢に含まれていないため、ユーザーが直接選ぶことができません。basic-ja を正式なテンプレートとして登録し、vivliostyle create および npm create book の両方から利用可能にするアップデートが必要です。
現状
templates/ディレクトリにはminimal、basic、basic-jaの3つが存在する- ただし
src/constants.tsのTEMPLATE_SETTINGSにはminimalとbasicの2つしか登録されていない - そのため
vivliostyle create実行時の対話型選択肢にbasic-jaが表示されない --template ./templates/basic-jaのようにローカルパス指定すれば利用可能だが、正規の選択肢としては使えないcreate-book(npm 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_SETTINGS に basic-ja をエントリとして追加し、テンプレート選択時に直接選べるようにする。
- メリット: 実装がシンプル。今後他の言語版テンプレートを追加する場合も同じパターンで対応可能
- デメリット: テンプレート選択肢が増える
変更が必要なファイル
どちらの方針でも以下の変更が必要:
src/constants.ts—TEMPLATE_SETTINGSにbasic-jaエントリを追加(方針B)、または言語とテンプレートのマッピングを追加(方針A)src/core/create.ts— 方針Aの場合、テンプレート解決ロジックに言語による分岐を追加。方針Bの場合は変更不要templates/README.md—basic-jaテンプレートの説明を追加tests/create.test.ts— 新テンプレート選択に関するテストの追加
create-book(npm create book)はメインCLIの src/commands/create.ts をそのまま呼び出しているため、上記の変更により npm create book 経由での利用にも自動的に対応される。ただし、動作確認は vivliostyle create と npm create book の両方で行うこと。
多言語テンプレート対応をする場合の検討事項
なお、ja 以外の言語版テンプレート(例:basic-zh、basic-ko)を追加する場合、以下の課題が生じる。
-
テンプレートの命名規則 — 現在は
basic-jaという命名だが、言語版が増える場合、basic-{言語コード}を正式な規則として定めておく必要がある。 -
選択肢の増加への対応 — 方針Bでは言語版が増えるたびに
TEMPLATE_SETTINGSのリストが長くなる(例:basic、basic-ja、basic-zh、basic-ko…)。5言語以上になると選択肢が煩雑になるため、結局は方針Aのような言語選択とテンプレート選択を連動させる仕組みが必要になる可能性がある -
テンプレート内容の同期 — 各言語版テンプレートは
basicの全ファイルを翻訳したコピーであるため、basicの内容が更新された場合、すべての言語版を追従させる必要がある。 -
該当言語のテンプレートがない場合のフォールバック — 方針Aの場合、ユーザーが
ja以外の言語(例:fr)を選び、basic-frが存在しなければ、英語版のbasicにフォールバックする挙動が必要になる。このとき、フォールバックが発生したことをユーザーに通知すべきかどうかも検討が必要