EPUBからのPDF生成用としてVivliostyle CLIを導入した

2023/12/13

 EPUB制作時の校正用PDF生成目的でVivliostyle Viewerをローカルマシン内にサーバ起動する形で使ってきたのですが(参考)、先日ブラウザからのPDF出力で白紙ページが大量に入ってしまうChromeのバグを踏んでしまい、いい機会だったのでVivliostyle開発者の村上(@MurakamiShinyu)さんに助言をいただいて、上記参考先のコードを書いたときにはまだ無かったローカル環境向けのVivliostyle CLIに切り替えましたのでメモを残しておきます。環境はmacOS13.6です。

Vivliostyle CLIの環境構築

 まず、node.jsを入れます(参考)。homebrewは入っていることが前提です。ターミナルで

これだけ。

でnodeのバージョンが表示されればOKです。

 次にVivliostyle CLIを入れます。同じくターミナルで

これだけです。

Perl経由で自動化

 これを従来同様にPerlで実行できるようにしたのが以下のコード。

 ノンブル表示、見開き指定などのための追加CSSは –style オプションを使って外部ファイルを読み込む形としました。その方が修正もしやすいし(追加CSSの参考例はVivliostyle CLIのオンラインマニュアル内にある)。「vivliostyle preview」を指定しているので、Chromiumブラウザが起動してページが表示されます。あとはこれまで通り印刷ウィンドウでPDFを保存を選択して出力するだけです。だいぶ簡単になりましたね。
 なお、その後Chrome側でバグが修正されたとのことなので今は古い方のスクリプトでも問題なくPDF生成はできるようです。

(2023.12.14)



Epubcheckのバージョンアップで仕様が変わったことについて

2023/07/13

 EPUBをリリースする前には必ずW3Cの公的なチェッカーであるEpubcheckに通してエラー等が出ていないかを確認する必要がありますが、そのEpubcheckに制作サイドとしては結構重要な変更があったようなので書いておきます。

OPFのManifestに記述されていないファイルがパッケージに入っていてもエラーにならなくなった

 どうもEpubcheckのバージョンが4.2.6から5.0.0に上がる際にかなり重要な変更があったようです。具体的には4.2.6まではEPUB内のManifestに記述されていないファイルがパッケージ内にあることは許容されておらず、エラー扱いになっていましたが、5.0.0ではエラーにならなくなりました

https://github.com/w3c/epubcheck/releases のEpubcheck v5.0.0のFeaturesにある

report as a usage when no reference were found to manifest items (09244a4), closes #1452
report as usage container resources not listed in manifest (f81b423)

が関連するらしいとのこと。

 まあ5.0.0以降でもEpubcheckの実行時に-uオプションを付けることでファイルの混入をチェックすることはできるようなのですが、扱いとして「エラーではない」ことになったということです。

Epubcheckの出してくるアラートの区分

 ここであらためてEpubcheckの出すメッセージの種類を確認しておきます。以下の4種類の分類があるようです。

・Fatal Error(致命的エラー)
・Error(エラー)
・Warnings(警告)
・Usage(利用法情報)

 このうち、Fatal ErrorおよびErrorは修正しないと流通が許されない種類のもので、Warningsは警告程度のニュアンスなので流通させること自体は問題ないはずですが、電子取次の規約を理由に修正を求められることはあるようです。まあ「非推奨」くらいの意味合いかと思いますので新規にデータを作る際には直した方が無難ではあるでしょう。Usageは単なる内部データの状況のレポートなので出ていても問題は無いはずです。とは言え今回のポイントである意図しないファイルがEPUBパッケージ内に入ったまま流通してしまうことはもちろん良くはないので、管理面でチェックしておきたくはあります。
 また、Fatal Error/Error/Warningsは「標準エラー出力」でアラートを出しているようですが、Usageは「標準出力」扱いなので、ターミナル等でepubcheckを直に使う分には問題ないですが、外部言語等でアラートの内容を取得している場合には「2>&1」のような指定を追加してメッセージをマージする必要があるようです。

-uオプションで混入自体は検出できるが・・・

 さて前述したように、

のように-uオプションを指定すればmanifestに記述されていないファイルの混入をチェックすることはできます。ただし、電書協ガイドのテンプレートに入っているstyle-check.cssに関連するレポートもたくさんUSAGE扱いで出てきてしまいます。これはEpubcheckの機能での選別はできそうにないので、USAGE扱いの中の特定のメッセージだけを出したければ後からフィルタリングするしかないことにはなります。まあstyle-check.css自体、内容確認の際にだけ有効にして使うためのものですので消しても実害はないはずですが、電子取次の内部チェッカーで引っかかって戻ってくる可能性が無いとも言えないのでできればそのままにしておきたいところです。

Epubcheckのアラートをフィルタリングして必要なものだけ出すようにしてみる

 ということでちょっとコードを書いてみました。

 ぐらいの感じでしょうか。ターミナルで

 の形で指定すれば使えます。

 これを取り込んだ「EPUB3トータルデータチェッカー2.5.0」こちらからダウンロードできます。

(2023.7.13)



ChatGPT3.5でのスクリプティングを試してみた

2023/04/12

 話題の生成系AI、OpenAIのChatGPTでのスクリプトコード作成を遅ればせながら簡単に試してみました。2023年4月現在、無料で使えるのはChatGPT3.5ですのでそちらでのテストになります。なお、Bing Chatはまだ順番待ち状態なので素のChatGPTです。試した言語はAppleScriptとPerlになります。

AppleScript

 まずAppleScriptです。DTP作業で多用する処理を試しました。

・Photoshopの画像のカラーモードをグレースケールに

 結果:×
概要:「convert mode」ではなく「change mode to」にしないとエラーになる。

・Photoshopの画像の解像度を350dpiに

 結果:×
概要:「set resolution to」ではなく「resize image resolution」にしないとエラーになる。

・InDesignドキュメント内のJIS X 0213外の文字だけを赤くする

 結果:×
概要:文法がおかしいらしくスクリプトエディタでの保存自体ができない。JIS X 0213外の文字の判別式もこんなに短いわけがない。

Perl

 次にPerlのテストです。なお何も指定せずにコードを生成させたら内部文字列UTF-16のコードを出してきたので内部文字列UTF-8を指定して再生成しました。条件をちゃんと指定するのは大事ですね。また、動作チェック時に「use utf8;」の指定を書き足しています。

・与えられた文字列内にJIS X 0213外の文字が含まれているかどうかのチェック

 結果:×
概要:JIS X 0213はラテンアルファベットを含んでいるので(参考)、説明自体がおかしい。まあJIS規格は著作物扱いのはずなのでここですんなり出てきてしまったらむしろ問題かもしれない。

・与えられた文字列内にcp932の機種依存文字が含まれているかどうかのチェック

 結果:×
概要:判定ルーチン自体は正しいように見えるのだが、判定のリストがおかしいらしくよく問題になる丸数字やローマ数字が引っかからない。そこを書き換えられれば実用範囲か。

・与えられた文字列内にUnicodeのBMP(基本多言語面)外の文字が含まれているかどうかのチェック

 結果:○
概要:これは問題なかった。


 どうもChatGPT3.5の時点では、AppleScriptのような比較的マイナーな言語やJIS X 0213など日本のローカル規格の学習は足りていないのかもしれません。文法自体はパーツとしては使えそうに見えるのでその辺を割り切って使うなら許容範囲でしょうか。つまり元々コードが書ける人が時短目的で使うのなら有用かもしれないですね。いずれバージョンが進めば今回問題になったような「学習が足りない」ことが原因の間違いは減っていきそうですが、「AIにどういった問いを与えるのか」はおそらく相当先まで人間が考えるしかないので、そこをやれる人が効率化のために使うツールという位置づけになるのかなと思った次第です。

(2023.4.12)



プロフィール
Jun Tajima

こちらにて、電子書籍&Web制作を担当しています。
このブログは、EPUB3をはじめとした電子書籍制作担当オペレータからの、「電子書籍の制作時にたとえばこんな問題が出てきていますよ」的な「現地レポート」です。少しでも早い段階で快適な電子書籍閲覧・制作環境が整うことを願って、現場からの声を発信していこうと目論んでおります。

当ブログ内の記事・資料は、私の所属しております組織の許諾を得て掲載していますが、内容は私個人の見解に基づくものであり、所属する組織の見解を代表するものではありません。また、本ブログの情報・ツールを利用したことにより、直接的あるいは間接的に損害や債務が発生した場合でも、私および私の所属する組織は一切の責任を負いかねます。