この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。
本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。
姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。
≫ 目次に戻る config.yaml
は原稿の設定ファイルです。
YAML形式は、人間が読みやすい形で設定を書くためのファイル形式です。仕様を知らなくても、読んだり書き換えたりするだけなら誰でも簡単におこなえます。1から書くには、仕様を知っている必要があります。
YAMLの公式サイトを示しておきます。このサイトはYAML形式で表記されています。
The Official YAML Web Site
https://yaml.org/
YAMLの読み方を簡単に説明します。各行の#
以降はコメント(プログラムに無視される部分)になります。
連想配列(キーと値のペアが連なるデータ)は、「キー: 値
」で書きます。複数のデータをまとめて書くときは「{キー: 値, キー: 値}
」のようにも書けます。
リスト(複数の値を持つデータ)は、各行の先頭を「-
、半角スペース、値」で書くか、「[値, 値]
」のように書きます。
これらのキーや値はクォーテーションで囲っても囲わなくてもよいです。
1# キーと値
2キー1: 値1
3
4キー2:
5 値2
6
7# 連想配列とリスト
8連想配列1:
9 {キー1: 値1, キー2: 値2}
10
11リスト1:
12 - 値1
13 - 値2
14
15リスト2: [値1, 値2]
16
17# クォーテーションで囲う
18"リスト3":
19 ['値1', "値2"]
それでは解説に進みましょう。ここでは、まずはサンプルとしてconfig.yaml
の全体を示します。そのあと、各部の説明をおこないます。
1# 出力先ディレクトリー
2outputDir: ../02_epub
3
4# 出力名
5# 出力先ディレクトリーに「出力名のディレクトリー」と「出力名.epub」ファイルが作られる。
6outputName: py-md-epub
7
8# カバー画像
9coverPath: cover.jpg
10
11# カバー画像の横幅と高さ
12coverWidth: 1785
13coverHeight: 2560
14
15# 複製ディレクトリ
16# 使用していないファイルは、なるべく含めない。
17# 画像ファイルは、KDP用にjpgファイルのみにする。
18sendDirs:
19 - {src: css, dst: css}
20 - {src: image, dst: image}
21
22# 追加複製ディレクトリ/ファイル
23# 追加で複製するディレクトリやファイル。
24sendEx:
25 - {src: css2/add.css, dst: css}
26# - {src: css2/vertical.css, dst: css}
27
28# テンプレートHTML名
29# 「template-v.xhtml」は縦書き用、「template-h.xhtml」は横書き用。
30# 縦書きにした時の変更箇所。
31# 「pageProgressionDirection」(ページ送り方向)を「rtl」に。
32# 「sendEx」(複製追加)で「css2/vertical.css」を「css」に。
33templatePath:
34# template-v.xhtml
35 template-h.xhtml
36
37# ------------------------------
38# 電書情報
39
40# タイトル
41title: PythonでMarkdownからEPUBをつくろう
42
43# 著者
44author: 柳井 政和
45
46# 概要
47description: プログラムでテキストファイルから電子書籍を作成する本です。
48
49# 日時
50dateISO: '2025-02-07T00:00:00Z'
51
52# 言語
53lang: ja
54
55# ページ送り方向
56# ltr (左から右、横書き用), rtl (右から左、縦書き用), default
57pageProgressionDirection:
58# rtl
59 ltr
60
61# ユニークID
62# Webブラウザーのコンソールで「crypto.randomUUID()」を実行して作る。
63# あるいはPythonのREPLで「import uuid; uuid.uuid1()」を実行して作る。
64uid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
65
66# ------------------------------
67# 自動生成目次用
68
69# 表紙タイトル
70coverTitle: 表紙
71
72# 目次タイトル
73tocTitle: 目次
74
75# 目次ページ挿入テキスト前
76tocPreBody: |
77
78# 目次ページ挿入テキスト後
79tocPostBody: |
80
81# レベル先頭文字(レベル1,レベル2、…)
82tocLevelHead:
83 - ""
84 - "- "
85
86# ------------------------------
87# XHTML化するファイル
88# リストの順番にEPUBを構成する。
89docs:
90 - {src: d_000_前書き.md, dst: d_000.xhtml}
91 - {src: d_802_宣伝.md, dst: d_802.xhtml}
92 - {src: d_900_奥付.md, dst: d_900.xhtml}
EPUBファイルを出力するディレクトリーを指定します。ここでは1つ上のディレクトリー内の、02_epub
ディレクトリーに出力します。
また、出力ファイル名を指定します。
# 出力先ディレクトリー
outputDir: ../02_epub
# 出力名
outputName: py-md-epub
ファイル構造は、次のようになります。
01_md/
config.yaml
.md
ファイル02_epub/
epub/
…… 作成途中のEPUBの中身py-md-epub.epub
…… 完成したEPUBファイルカバー画像のパスです。カバー画像の横幅と高さは、実際のファイルに合わせます。
# カバー画像
coverPath: cover.jpg
# カバー画像の横幅と高さ
coverWidth: 1785
coverHeight: 2560
ファイル構造は、次のようになります。
01_md/
config.yaml
cover.jpg
EPUBのディレクトリーに複製するディレクトリーの設定です。
src
は転送元で、dst
は転送先です。
また、追加で複製するディレクトリーやファイルの設定もあります。追加複製の設定は、細かな制御をしたいときに用います。こちらは、転送先のディレクトリー内にファイルやディレクトリーを送ります。
# 複製ディレクトリ
sendDirs:
- {src: css, dst: css}
- {src: image, dst: image}
# 追加複製ディレクトリ/ファイル
sendEx:
- {src: css2/add.css, dst: css}
ここでは、css
とimage
ディレクトリーを複製します。また、追加でcss2/add.css
とcss2/code.css
を複製します。
ファイル構造は、次のようになります。
01_md/
…… 複製元config.yaml
css/
main.css
css2/
add.css
image/
02_epub/
epub/
item/
xhtml/
…… 複製先css/
main.css
add.css
image/
XHTMLファイルを作る際に、テンプレートにするファイルを選びます。私は横書き用のtemplate-h.xhtml
と、縦書き用のtemplate-v.xhtml
を用意しています。違いは読み込むCSSファイルの種類です。
他にもいくつかテンプレートを用意してもよいでしょう。
# テンプレートHTML名
templatePath:
# template-v.xhtml
template-h.xhtml
どのファイルを利用するかは、#
(コメント)で切り替えられるようにしています。
タイトルや著者といった電子書籍の情報です。適宜書き換えます。
この情報は主にitem/content.opf
の<metadata>
の場所で利用します。また、ページ送り方向の設定は<spine>
の場所で利用します。
# タイトル
title: PythonでMarkdownからEPUBをつくろう
# 著者
author: 柳井 政和
# 概要
description: プログラムでテキストファイルから電子書籍を作成する本です。
# 日時
dateISO: '2025-01-31T00:00:00Z'
# 言語
lang: ja
# ページ送り方向
pageProgressionDirection:
# rtl
ltr
言語は重要です。AmazonのKDPにファイルを登録するとき、Amazon側で選んだ言語と、ここで指定した言語が異なるとエラーが出ます。
日本語の場合はja
で、英語の場合はen
です。
ページ送り方向は、横書き用にページを左から右に進むか(ltr
)、縦書き用に右から左に進むか(rtl
)を設定します。
この設定をしたからといって、電子書籍が自動で縦書きになるわけではありません。縦書きにするにはXHTMLファイルから読み込むCSSで、文字の向きを設定する必要があります。
電子書籍には、他とは被らないユニークなIDを設定する必要があります。
# ユニークID
uid: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
ここでは、PythonのREPLを利用してUUIDを生成して利用しましょう。python
コマンドを引数なしで実行したあと、import uuid; uuid.uuid1()
を入力して実行します。
python
>>> import uuid; uuid.uuid1()
XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
XX~XX
の部分には、英数字でランダムな値が入ります。
自動生成目次に使う名前などを設定します。
# 表紙タイトル
coverTitle: 表紙
# 目次タイトル
tocTitle: 目次
# 目次ページ挿入テキスト前
tocPreBody: |
# 目次ページ挿入テキスト後
tocPostBody: |
# レベル先頭文字(レベル1,レベル2、…)
tocLevelHead:
- ""
- "- "
表紙のタイトルとして「表紙」、目次のタイトルとして「目次」を設定しています。英語の本を作るときには英語に書き換えます。
目次ページ挿入テキスト前/後は、目次の前後に挿入するテキストです。HTMLタグなどで自由に内容を書けます。
レベル先頭文字は、目次を生成するときに、見出しの階層の先頭に付け加える文字です。ここではレベル1の見出しの先頭に加えるのは空文字(なし)で、レベル2の見出しの先頭に加えるのは「-
」という記号にしています。
本の中身にする.md
ファイルを指定します。
# XHTML化するファイル
docs:
- {src: d_000_前書き.md, dst: d_000.xhtml}
︙
- {src: d_802_宣伝.md, dst: d_802.xhtml}
- {src: d_900_奥付.md, dst: d_900.xhtml}
左側の名前が読み込むファイル名(拡張子は.md
)、右側の名前が出力するファイル名(拡張子は.xhtml
)です。
出力するファイル名は英数字にします。リーダー側でどんなエラーが発生するのか分からないので日本語は避けた方がよいです。
この連載は、『PythonでMarkdownからEPUBをつくろう』を一部抜粋して編集したものです。
本編には、全てのソースコードや、生成する原稿のサンプルが付属しています。ぜひ、こちらもご購入ください。
姉妹版の『PythonとPygameで作る レトロ風RPG 全コード』もあります。