Vivliostyle の雛形を作ってくれる create book という npm のコマンドがあります。これで雛形を作ったものをリモートリポジトリで管理できる状態にするための最初の準備のメモです。
前提
以下はインストール済み
- Node.js
- Vivliostyle CLI
- create book
手元のバージョン:
- npm: 10.9.2
- vivliostyle
- cli: 9.2.0
- core: 2.32.1
OS は Ubuntu 24.04 だが、他の Linux ディストリビューションや Windows や Mac 等でも適当に読み替えれば多分大丈夫。
ターミナルを開いておき、作業ディレクトリに移動しておく。作業後その直下に Git リポジトリのディレクトリが配置される。
# 作業前 work
# 作業後 work/ └ myBook/ # Git リポジトリ
※work は空である必要はない。既存のファイルは省略。
手順
大まかな流れは以下。
create book で雛形作成
1. コマンドラインで以下を実行
npm create book myBook
2. いくつかのオプションの入力を求められるので、入力して Enter を押下。
- Description
→この本の簡単な説明文 (vivliostyle.config.js に記述される) - Auther name
→著者名 (vivliostyle.config.js に記述される) - Auther email
→著者のメールアドレス (vivliostyle.config.js に記述される) - License
→コードに与えるライセンス (リポジトリルートに配置される) - choose theme
→使う雛形を選択 (vivliostyle.config.js に記述される)
→作業ディレクトリ直下に myBook というディレクトリが作成される
3. ディレクトリ名を変更しておく
mv myBook myBookCreated
.gitignore を編集
1. 雛形のフォルダに移動し、.gitignore ファイルがあることを確認する*1。
cd myBookCreated ls .gitignore # .gitignore と表示されればOK
2. (1. でなかった場合) 以下コマンドでビルドする
vivliostyle build
→再度 ls コマンドで .gitignore ができたか確認する
3. (2. でもなかった場合) Node.gitignore の内容をコピーして配置する。
touch .gitignore # 空ファイル作成 vi .gitignore # 適当なエディタで開いて貼り付け+保存
4. .gitignore の末尾に以下を追加する
# vivliostyle .vivliostyle *.pdf *.epub
リモートリポジトリを clone
cd ../ git clone git@github.com:your-id/myBook.git # GitHub の例
→ディレクトリ構造は以下のようになっているはず。
work/ ├ myBook/ └ myBookCreated/
create book で作った中身を移す
1. myBookCreated 以下にある .git を消す (myBook の .git を上書きしないようにする)
cd myBookCreated rm -rf .git cd ../
2. myBookCreated の中身をごっそり myBook に移す
cp -r myBookCreated/. myBook
3. myBookCreated はもう不要なので削除
rm -rf myBookCreated # 間違えて myBook や他のものを消さないように!
→ファイルの編集は終了
おまけ
言語選択
私の環境では、最初の状態では句点の位置がずれていました。
vivliostyle.config.js 内の以下の行のコメントアウトを外せば解決しました。
// language: 'ja', // default to undefined.
VSCode で編集する場合
以下を tasks.json に設定しておくと、ビルドオプションから preview と build が実行できて便利。場所は repositoryRoot/.vscode/tasks.json
{ "version": "2.0.0", "tasks": [ { "label": "build", "type": "npm", "script": "build", "group": "build", "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared" }, "problemMatcher": [] }, { "label": "preview", "type": "npm", "script": "preview", "group": "build", "presentation": { "echo": true, "reveal": "always", "focus": false, "panel": "shared" }, "problemMatcher": [] } ] }