Posted by & filed under 未分類.

このエントリーをはてなブックマークに追加

ある日突然、思い出したんです。それはもう、突然。まるで雷にでも打たれたように。

そうだった!おれは子供のころ、小説家になりたかったんだ!って。
思い出してしまったものは仕方ない。なりたかったのだからなるために然るべき努力をしなくてはならないと。
やらない理由はいくらでもみつかるんですよ。文才ないから。無学無教養だから。もう歳だから。たいへんだから。忙しいから。恥ずかしいから。そもそも無理だから。
それに対してやる理由は一つだけ。「それがどうした、なりたいんだからやれ
と、いうことでですね。一念奮起しましてですね。今まで40年間生きてきて一回も小説なんて書いて完成させたことないのに、然るべき努力とやらをやった結果、まあそこそこある程度は世間様にお読みいただき奉れるギリくらいのものが出来上がったかなということで。まあ完全に空想から生まれた小説というのははじめて作るのには閾値が高かったので結果的に出来上がったのは小説ではなく体験記なんですが。それをウェブにアップしたわけですね。
そしたら当然。「なにこれすごい!面白い!君こそは未来のベストセラー小説家だ!書籍化決定!」って反響がすぐに来ると思うじゃないですか。ふつうは来ますよね。ところが来ない。ふつうじゃない。いくらまっても反響が来ない。書籍化どころか反響どころか、ページビューすらない。誰も読みに来ない。
「まあ、それもそうか」って思いまして。今まで本業のウェブでさえ一度も誰からも注目集めたことがないような人間が書く文章が、誰かに注目されるわけがないよなあって、そこはわきまえているタイプでして。それでも今までも見る人は見てくれるし、その中に必ずコアなファンが一人くらいはいてくれたので、その要領でウェブに文章を載っけて、じっと待っていたわけです。反響を、ページビューを。
情報をもうちょっと正確に言うと、実際はちょっとは反響はあったわけですけど。多少なりともコアなファンになってくれたりして、本当にありがたいことです。ふだんの制作活動でも人を集めたり反響を呼んだりというのは不得手なんですけど反対に少数の方にじっくり愛されることがおおく、そういう少数のファンをとても大切に思います。どんな形でも数を集めなければコンテンツじゃないといった今のところの風潮では自分のようなタイプは向かい風の強い状態ですけど、それでも地道に少数のファンの方々には応援していただいたり楽しんでいただけたりしたんですが、それでもやはり書籍化のオファーまでの道のりはほど遠い。
まあ、やるだけやったんで、あとは評価や結果はじっくり待つしかない。
で、待ちながら思ったんですけど、「あっこれ女子中学生といっしょだ」って気付いてしまったわけですよ。「君こそは未来のトップアイドルだ!」ってスカウトされるのを夢見て竹下通りを毎週何往復もする受け身の女子中学生とおれいっしょだなって思っちゃったんですよね。
だから、「女子中学生といっしょなのは格好悪いな」と思って、女子中学生からしてみると格好悪いよばわりされて失礼なのかもしれませんけど、実際格好悪いのだから仕方がない。おれが?女子中学生が?いやいや、どっちも格好悪くないけど、女子中学生といっしょのようなことしてる自分が。
そこで何が格好悪いか分析してみるとやはり夢見て行動してるくせに中途半端に受け身でいるのがいかんのだなと気付いたので、やっぱりそこは自分から行かないと。自費出版とかしないと。プログラマーになったのだって、誰に頼まれたわけでもなく独学で学んだプログラムを使ってゲーム作ってウェブにアップしたのがきっかけだったので、書籍だって自分で無理やりつくればいいんだって思ったわけです。
そこで自費出版っていくらかかるのか知らないけどとりあえず現金がいくらあるか確認しておこうと銀行の残高を見てみたんですが、最近のんびりしてたのもあって残高が少ない。少ないというかない。ないに限りなく近い。40過ぎた大の大人が、もうすぐ二人目の子が生まれるというのに限りなくゼロに近い預金残高。この残高で自費出版なんか行おうものなら今月のローンも支払えなくなって妻に怒られるので、自費出版はあきらめるしかないわけです。そこでピンときたんですが、「そうだ。自費出版が無理なんだったら電子書籍にして出版すればいいんじゃない?」と思いつきまして、そこからkindleダイレクト出版をやり始めたわけです。
そしたらいろいろとまあノウハウの連続だったので、これは記事にしなければと思い筆をとりました。それでは始めたいと思います。自力でkindleダイレクト出版をやった手法まとめです。

文章書きが苦手なプログラマーが電子書籍の執筆を行うと、プログラミング能力やマークアップの技術を活かして極限まで調整を行う、ふだんのデジタルコンテンツの制作とまったく同じだったというお話です。


このまえ、三歳になる姪がやってきて、こう言うんです。
「あきらちゃんとね!いっしょにあそんだの!」
ん?あきらちゃんって誰?男の子っぽい名前だけどちゃん付けだし、女の子なの?わからないです。
にっこり笑って相手してあげていると、こんどはこう言います。
「知ってる?りんごって木にできるんだよ!」
ちっちゃい子は、相手が何を知っているか、何を知らないか、をおもんばかる能力が低いですよね。
私もです。
私も、相手が何を知ってて何を知らないのか、おもんばかる能力が低いのです。ええ、三歳の姪っ子なみに。
だから人からよく言われます。
「お前の文章は、どうでもいいところの描写は長いくせに読者が知りたいところの説明は全然ない」と。
何が言いたいかといいますと、技術文章を書いても同じで、読む人が何を知っていて何を知らないのか、おもんばかる能力が著しく低いのでもしかしたら誰でも知っているような余計なところの説明は細かくて、読む人が知りたい重要な情報は説明がなかったりします。
これについては、「そもそもそういうもの」と思った上で読んでいただくのが、健康上いちばんいいかと考えています。どうぞよろしくお願いします。

そもそも電子書籍はHTMLで作れる。なのに最初につまずいたポイント

いきなり小見出しで結論を書いていますが、そうです。これだけです。これが全てです。
つまり何のことはない、電子書籍はHTMLで作れる、HTMLファイルを作成してamazonのダイレクト出版用コンソールにアップロードすれば電子書籍になる、おしまい、なのです。
ただ、このやり方には欠点があります。それは、あまりにも簡便すぎるということです。
なんでもそうですが、世の中にはだいたい2種類のやり方があります。簡単にできるやり方と難しいやり方です。
簡単にできるやり方はとっかかりにはいいのですが、凝ったことをしようと思うとかえって難しかったり手間がかかったり時間がかかったりします。
それに対して、簡単なやり方とは別に難しいやり方がわざわざ用意されている場合、いろいろと自分なりのやり方を工夫したい場合はこちらを選択したほうが結果的にいい場合が多いのです。amazonのダイレクト出版も後者のほうでした。なので、ちょっと難しくて手間のかかるやり方でやりました。
まずは、最初にどこでつまずいたか、説明していきます。
つまずいたポイントを並べているだけなので、読む人もわからなくて正解です。あとで正解の手法も書きます。

さいしょにつまずいたのは、「amazonの公式のヘルプが自分の理解の範疇を超えていたということ」です。amazonのページには充実したヘルプがあります。このヘルプがわかりにくかったと言いたいわけではありません。非常に充実してわかりやすいとてもいいヘルプです。ただ、わたしの理解力が追いつかなかったのです。私個人の能力のほうの問題です。普通の人はこのamazonのヘルプさえ読めばその日にでもダイレクト出版をはじめられることは間違いないでしょう。
わたしの理解力を超えてしまったポイントとしましては、html以外にもコンバートできるファイル形式が多くて、いろんな手法があり、例えばワードから電子書籍化する方法やpdfから電子書籍化する方法なども書かれており、自分のやりたい事を見つけるのに時間がかかったことです。
あとは、すべきことと望ましいことの区別がつきにくかったことなんですが、例えば目次ファイルの作成は必須なんですが、文中目次は推奨なんです。何のことかわからないでしょ?目次用にtoc.htmlもしくはtoc.xhtmlという外部ファイルの添付が必須なんですが、それとは別に本文の中に目次ページを入れるのは推奨であって必須ではないんです。こういうところのちょっとした表現の解釈につまずいて時間がかかってしまいました。
あとは、htmlから電子書籍にコンバートする方法もいくつかあって、一番簡単なのがウェブ上でamazonのダイレクト出版コンソールにログインしてhtmlをアップロードする方法なんですが、これだとアップロードさえすればあとはコンソールが自動的に電子書籍を作ってくれます。アップロードするファイルはhtmlでもいいし、htmlやその他画像などの外部ファイルを含んだzipファイルでもOKです(ほら、また同じ結果を導く手法がいくつかあるからややこしくなった……)。
ただ、この方法だと欠点があって、それは実際に電子書籍になったときの見た目を、いちいちアップロードしないと確認できないのです。後にも書きますが今回は一文字書き直すごとに確認作業を行うという、何百回何千回という作業が必要になることは必至だったので、なんとかローカルだけでコンバートできる方法を探っておく必要があります。
コンソールにアップロードする手法とは別に、ローカルでツールを使って自分で電子書籍にコンバートする方法もあるんですが、これもいくつか方法があって、とくにサードパーティ製の変換ツールを使うやり方などがよく紹介されているのですが、こちらのコンテンツ制作継続性が完全にそのツールの公開状況などに依存してしまうため、この方法は選べません。できるだけamazonの公式ツールのみでコンバートできる方法を選ばなければなりません。
課題はまだまだ山積みですが、現時点ではHTMLファイルを用意することだけははっきりしているので、まずはHTMLファイルの作成に取りかかります。

HTML + CSS で縦書きに

よくウェブの文章をそのまま電子出版したような本に見られるんですが、そういう場合、電子書籍でも横書きレイアウトだったりするんですよね。でも自分の本はせっかくなので縦書きで出版したい。
縦書き電子書籍で最低限のスタイルシート :: ひまつぶし雑記帖
縦書き出版に関してはこちらの記事を参考にさせていただきました。ありがとうございます!!

で、冒頭でもお話ししたように、わたしの文章ももとはウェブにアップしていた文章なので、それを縦書きに変換しなくてはいけないわけです。レイアウトそのものはCSSで縦書きになるのですが、英数字などが横に寝ているので、全部spanタグで囲って、縦書きに対応したCSSが効くようにマークアップし直す作業が必要になります。この作業を、次の章で説明するスクレイピングのときに同時に行うようにしました。

ウェブにある文章を取得して原稿化させる

文章そのものはすでにウェブ上にアップしてあるので、それをウェブスクレイピングの技術を使って再取得してきます。
スクレイピング技術を使うべきか手作業でやったほうがいいかは悩みました。ファイル数=ページとして換算して26ページ(=26ファイル)程度なので、手作業でできなくもないわけです。ただ、手作業でルーチンワークをオペレーションするよりはプログラミングしたほうが比べるまでもなく面白いので、プログラミングできそうなところは積極的にプログラムを介して作業を行いました。
言語はPythonを使い、開発環境はjupyter notebookを使いました。Pythonにはスクレイピングに便利なBeautifulsoupというライブラリがあるし、トライ&エラーを繰り返しながら作業を進めるには対話型インターフェースのプログラミング環境jupyter notebookが最適だと思ったからです。結果的にこの選択は正しく、最後まで複雑だった電子書籍化を大いに助けてくれましたが、一点だけ困った事がありました。それは、Beautifulsoupは確かにウェブ上にあるHTMLからデータを取得するのは強力に便利なんだけど、HTMLデーターからHTMLを加工してさらにHTMLとして出力するには少し貧弱だったのです。全く出来ない訳じゃないんですが、DOMからデーターにアクセスするのは簡単なのに対してデーターをDOMにするのには少しだけ手間や制約が増えるのです。この点だけちょっと困りました。

とにかく、まずはデーターを
ウェブ上にあるHTML -> Python + jupyter notebookでスクレイピング -> ローカルHTMLファイル
として手元に残すことにしました。
せっかくスクレイピングにスクリプトを通しているのだから、その際に

  • 段落の字下げ。具体的には上マージンが一文字の高さだけ落ちたスタイルを持つクラスのpタグを入れる。
  • 段落の一文字目が開きかぎ括弧なら、会話文なので字下げを行わない。
  • その他ウェブ上文章の改行と段落をある程度書籍用の段落になるように自動処理
  • 一人称などの表記ゆれの統一。「わたしたち」<-->「私達」、「俺」「おれ」「オレ」」などいろんなパターンの表記揺れを網羅して統一化させておく
  • 縦書きで読みやすいように数字は漢数字に変換しておく。
    • ただし、1980年が「千九百八十」とならないように、4桁の数字 + 「年」の文字の場合は「一九八〇」という変換ルールを先に適用させておく。
    • 「3DCG -> 三DCG」など、漢数字に変換されたらおかしい語句はあらかじめエスケープしておく。
  • 全角英数字を半角英数字に変換。ただし三点リーダーなど半角にされるとまずい文字はあらかじめエスケープしておく
  • 半角英数字を全て、縦に回転するようスタイル設定したクラスを持つspanタグで囲む。
  • エスケープしていた文字を元に戻す

などをプログラム上で処理しました。

いったんテストで電子書籍化

ウェブ上にあるHTMLを、ローカルで縦書きHTMLとして取得できたので、ここらでいったん電子書籍化してみます。
公式で用意されているツールのダウンロードページの中ごろから「KindleGen」というツールをダウンロードしてローカル縦書きHTMLファイルをkindle電子書籍化させてみます。

結果。
うまくいかない。
mobiファイルという、kindle電子書籍ファイルが出来るところまではうまくいって、Kindle Previewerというツールでも開けるんだけど、日本語の縦書き文章なので日本語は右から左に書かれてあるのに、ページ送りは左から右になってしまいます。つまり表示がバグってる。
これには数日いろいろ悩みました。amazonのヘルプでは、kindleGenにhtmlファイルを指定すればmobiファイルにジェネレートできると書いてあって、確かにその通りなのですが、その結果表示がバグるわけです。これ以上の方法を足したり引いたりできないだけに、ものすごく悩みました。
結果的には、opfという電子書籍定義ファイルを用意して、そのファイルをkindleGenに指定すればうまくいきました。このことを導き出すのに数日かかりました。
そのopfファイルの作成方法もちゃんとしっかりしたドキュメントがあります。
こんなしっかりしたリファレンスがあるにはあるんですが、ねえ……。
なぜぱっとしないテンションなのかは、リンク先をみていただくとわかると思います。
確かにしっかりしたドキュメントです。これ読めば正確にopfファイルを作成できて、epubを作る事が出来ます。ただ、すごく時間かかりました。
最終的には、

<spine page-progression-direction="rtl" toc="ncx">

この箇所を適切にページ送りを右から左と指定してやることで解決できました。

編集はDreamweaverで。しかしここで致命的な問題発生

さて、無事に手元にあるHTMLファイルを電子書籍化できることがわかったので、あとは編集&推敲&加筆&修正を進めていくのみです。HTMLファイルなので、Dreamweaverで作業すればよかろうと簡単に考えていました。ほかのテキストエディタも最初は候補にあがったのですが、文章を書いているときは頭からできるだけマークアップタグのことを考えたくなかったのです。だからといってせっかくマークアップされている文章構造がめちゃくちゃになるのも避けたいわけで、だからデザインビューを使ってタグに触れることなく文章を編集できるDreamweaverがいいだろうと考えていたわけです。ところが大誤算だったことがありました。それは、文章を入力中は、HTMLファイルを扱っていると思っていた以上に文章構造のマークアップを意識してしまうということでした。たとえDreamweaverのデザインビューでも。

困った……。どうしよう……。
ここでわたしはふたつの選択肢を迫られました。それは、

  1. スクレイピングシステムは既にあるのだから、ウェブ上で編集して再取得して電子書籍化すればいい
  2. ローカルHTMLファイルでの編集をあきらめる

です。
1番の、「ウェブ上で編集して再取得して電子書籍化すればいい」は、絶対に嫌でした。なぜなら、この方法だとウェブにある文章と電子書籍の文章が完全に一致するからです。電子書籍の文章は、ウェブの文章から比べて専用に加筆修正したかったのです。文章を買ってくれた人にむけた出来る限りの品質を求めたかったのです。書籍として売ってある文章を買ってくれたお客さんに、「やっぱ無料で公開されてある文章とは違うな」という品質の違いを感じて欲しかったのです。
なので、2番の「ローカルHTMLファイルでの編集をあきらめる」を選びました。
え?
電子書籍はウェブにない文章を付け足したいのに、編集を諦める?矛盾してないかですって?
矛盾していません。「編集をあきらめた」のではなく、「ローカルHTMLファイルでの編集をあきらめた」のです。
HTMLファイルではなく、ほかの方法をとります。
全て最初からやり直しです。

Markdownで再出発

今までの作業成果物を全て捨てて、最初からやり直しました。
まず行ったのはウェブ上にある文章のMarkdown化です。この方針転換によって、確かに今までの成果物は全て無駄になりましたが「正しい文章構造を維持しつつ、意識せずとも文章の執筆に専念できる」ことが可能になりました。作品のクオリティをぐっと上げることが出来たのです。
さらに、章の入れ替えや章まるごとの加筆を可能にするため、章ごとに連番ファイル化させて管理しました。
あとはMarkdownファイルを順番にHTML化させて連結してひとつのファイルを生成して、電子書籍化までをPythonで行います。
せっかくPythonを使っているので、文章を形態素解析して単語の出現頻度を調べ、適切な見出しを生成できないかも試しました。
結果は、できるにはできたんですがあまり思ったようには面白くならないため、結局は見出しは自分で考えなおしました。興味を引く意外性のあるタイトルなんかを狙って、Yahoo!ニュースの見出しからも単語を引っ張ってきて混ぜてみるみたいなことも試しましたが、まだまだこの分野は人間がやったほうが上みたいです。

実は最初から、Markdown化させる計画はたててたのですが、すでにHTMLとしてマークアップされてウェブに存在するものをまたMarkdownさせるのは冗長に感じたので最初は避けていました。それでも最終的に全ての作業をやり直してでもMarkdownにしておいてとてもよかったと思います。編集中は電子書籍へのコンバート回数がもの凄く多くなります。実際に縦書きで表示して通して読みながら確認していく作業が必要になるので、それこそ一文字変更するごとにコンバートすることになります。なのできちんと電子書籍として売りに出されるまでのコンバート回数は何百回や何千回では収まりません。ここをしっかりプログラムで自動化することが、書籍の品質を上げる鍵になりました。
もともとウェブにアップした時点で、ゆくゆくは書籍化を考えていたのでふつうのウェブの文章よりは書籍用の文章への変換の親和性が高かったのですが、それでもやはりウェブの文章と書籍の文章はフォーマットが全然ちがいます。この差を埋めることも、書籍の品質を上げるために何度もコンバートし直すきっかけになりました。
あと、最終的な表示を縦書きにすることによって、必要になってくる独自のMarkdown記法なんかもいろいろ自由に開発しました。これを実現させるためにもコンバーターを自前で作っておいてとても意義がありました。

余談ですが、というかまだ計画中の段階で告知するほどでもないのですが、Markdownからの電子書籍化への執筆作業があまりにも捗ったので、Swiftを勉強して専用エディタを作ろうと計画中です。
機能としては章ごとに管理できて、Markdownで書けて、そのまま文章構造を保ったままepubに書き出せるMac用アプリが作れたらいいなと。
自分の本が売れたらぜひともSwiftの書籍代にあてたいです(笑)。

そういえばhtmlから編集のメインをMarkdownに変更する際に、ほかにinDesignを使用する案も考えたのですが、文章構造を考えながら執筆できるという点でMarkdownの利点に及ばずinDesignは却下しました。

というわけで電子書籍完成!感動!しかしまだ問題が!

というわけで、あとは出来たmobiファイルをamazonのコンソールからアップロードして、然るべき情報を入力して、審査に通れば晴れて電子書籍出版完了です!感激!ウェブサイト制作やゲーム制作とおなじく、自分の作ったものが最終的に形になるって感動です。
しかしここでも問題が発生しました。それは、iOS端末では読めないということです。
amazonの販売ページでも「利用可能な端末」にiPhoneとiPadだけがリストに入っていません。
せっかく販売開始までこぎ着けたのにこれでは、まだ人に勧められずに困り果てました。さすがにもう解決方法がわからず、amazonのサポートにメールを送ってみたのですが、amazonnのサポートさんからはすぐに返事が返ってきました!
その返事によると、iOS用のデーターは変換に時間がかかるからしばらく待てとのこと。
言うことを聞いて、しばらく待っていたら3時間ほどたってiOSでも読めるようになりました!

昔、HTMLを覚えてマイクロソフトペイントでちょっとずつ描いた自分の絵をアニメーションGIFにして公開したときと、はじめてFlashをさわったとき、強く感じた「今までそれなりの人手や資本が必要だった制作から公開までのプロセスが、ひとりだけで完結できるなんて!」という可能性を、何十年も超えて同じような感動を味わいました。
知識と技術さえあれば、ひとりの人間だけでも何でもそれなりにできるデジタルの世界は素晴らしいと思います。

実際に販売された処女作はこちら。

もし、機会や興味ありましたら、ぜひとも手にとって読んでいただけたらとてもうれしいです。
ちょうど読み放題プランのKindle Unlimitedも始まったことですし、該当者は無料(正確には無料と言うよりKindle Unlimitedの料金以外の追加料金無し)で読むことが出来ます。
その際に、わたしからひとつわがままなお願いがあります。もし面白いと思っていただいたら、よろしかったら感想をいただくと、とてもうれしいです。amazonのレビューをどうぞよろしくお願いします。

わたしも販売にいたるまで、数々の先人がネットに上げていただいてる情報に助けられました。こんどはわたしがお返しする番です。
この文章が、自分の知識や技術を活かしてKindle自主出版を目指している人の少しでもヒントになれば幸いです。

このエントリーをはてなブックマークに追加