青空文庫組版プログラムを OS X で使う

青空文庫では、いわゆる「青空文庫形式」で作られたテキストファイルをサイトで公開されているような HTML に変換するプログラムを公式に公開しています。ここでは、組版案内 http://kumihan.aozora.gr.jp/ のページから入手できるプログラムを OS X (10.10 Yosemite)で使うための手順をまとめておきます。

なぜ?

組版プログラムで実際に html への変換を行なってみることによって、望まれる形式で入力できているか(たとえば、外字注記、ルビの掛り受け、字下げ等がちゃんとできているか)を検証してみることができます。

OS X で組版のプログラムを使うには、上記 URL に示されていない問題があります:

の2つです。いろいろな解決法が考えられますが、できるだけ汎用性の高いものを考えてみました。バージョンの差異はシンボリックリンクで、文字コードの違いにはエンコーディング変換のパイプ処理で対応します。

1. 組版ツールを展開しインストールする

ダウンロードのページからツールを入手し、展開します。以下では、「書類」のフォルダに txt2xhtml というフォルダを作り、そこに t2hs.rb が置かれていると仮定します。「ツール全部入り」が便利です。

2. OS X のターミナルで以下の準備作業を行なう

ruby1.9 -> ruby のシンボリックリンクを作ります。

sudo  ln  -s  /usr/bin/ruby  /usr/bin/ruby1.9

なぜ?

組版案内の ruby スクリプトは /usr/bin/ruby1.9 というディレクトリにバージョン 1.9 の ruby があることを前提としていますが、 OS X 10.10 では 2.0 の ruby が入った /usr/bin/ruby しかないので、それに対処しています。

上記のように OS X 側でシンボリックリンクを作って対処するかわりに、スクリプトの冒頭に #! /usr/bin/ruby1.9 と書かれたところから 1.9 を消して動かすこともできると思います。

3. 組版ツールの毎回の起動は以下のように行なう

以下の $1、$2 の部分には、入力ファイル名と出力ファイル名をそれぞれパス入りで指定してください。

ruby  ~/Documents/txt2xhtml/t2hs.rb  $1  $2  |  iconv  -f  SJIS  -t  UTF8

ruby ~/Documents/txt2xhtml/t2hs.rb $1 $2 の部分が通常の t2hs.rb の起動方法、それに続く | iconv -f SJIS -t UTF8 の部分が、エラー出力の文字化け回避のためのパイプ処理です。

なぜ?

後半部分がなくても、動くことは動きます。ただ、テキストファイルの不備で変換ができなかった場合、エラーメッセージがシフト JIS で出力されているので、文字化けしてしまいます。

ターミナルをシフト JIS 設定で起動すればいいのですが、そうすると、なぜか半角チルダ( ~ )が入力できなくなってしまいます。

また、上記のように OS 側でパイプ処理をするかわりに、スクリプトの5行目あたりに、STDOUT.set_encoding( Encoding.locale_charmap, "UTF-8" ) という行を書き込んでおいても、文字化けを回避することができると思います。(私は ruby について詳しく知っているわけではないので、間違っていたらすみません。)

具体的な例として、aaa.txt というテキストファイルが「書類」フォルダに置かれていて、t2hs.rb をインストールした時に作られた output/username フォルダに bbb.html という html ファイルを出力する場合はこうタイプします。(全体で1行。改行されているように見えるのは、自動的な折り返しです。)

ruby  ~/Documents/txt2xhtml/t2hs.rb  ~/Documents/aaa.txt  ~/Documents/txt2xhtml/output/username/bbb.html  |  iconv  -f  SJIS  -t  UTF8

以上で、青空文庫の組版プログラム t2hs.rb を OS X のターミナル上で使えるようになりました。コマンドライン入力を少し簡単にするための方法を次に紹介します。

4. 起動の簡略化のためのシェルスクリプトを作る

4.1. シェルスクリプトの中身

t2hs.rb までのパス名やパイプ処理はいつも同じなので、以下のようなスクリプトを作っておけば、コマンドラインの入力を少し簡略化することができます。("bash" の後に改行を入れます。)

#!/bin/bash
ruby  ~/Documents/txt2xhtml/t2hs.rb  $1  $2  |  iconv  -f  SJIS  -t  UTF8

この2行をふつうのエディタで作って、任意のファイル名を付けます。以下の説明ではファイル名を kumihan.sh としたことを想定しています。

kumihan.sh ファイルはターミナルのホームディレクトリ(ターミナルを起動した時にシェルが示しているディレクトリ。たぶんユーザーのルートディレクトリ、つまり = ~/ )に置いておくと便利だと思います。

$1 は入力パス名+テキストファイル名、$2 は出力パス名+htmlファイル名をt2hs.rb に渡す変数です。もし、入力と出力に使うディレクトリがいつも同じなら、その部分もスクリプトに書き込んでおくことができます。例えば、上記 3 で仮定したパスをいつも使うのであれば、こう書いておきます。(上のスクリプトと同様、"bash" の後に改行を入れます。)

#!/bin/bash
ruby  ~/Documents/txt2xhtml/t2hs.rb  ~/Documents/$1  ~/Documents/txt2xhtml/output/username/$2  |  iconv  -f  SJIS  -t  UTF8

4.2. kumihan.sh スクリプトを実行可能に指定する

ターミナルで、kumihan.sh ファイルが存在するディレクトリで

chmod  +x  kumihan.sh

としてパーミッションの変更を行ないます。

4.3. スクリプトの毎回の起動

ターミナルのカレントディレクトリ上で aaa.txt から bbb.html を生成する場合、あるいは、上の二つ目のシェルスクリプトのように常に入出力先を決め打ちにしている場合は、コマンドラインで以下のようにタイプします。もし、カレントディレクトリ以外の位置にあるファイルを操作するのであれば、パスを補ってください。

./kumihan.sh    aaa.txt    bbb.html

ここでは、カレントディレクトリ(= ./)にスクリプトが置いてあることを想定しています。

コマンドライン入力簡略化のためのシェルスクリプトに関する説明はこれで終わりです。

5. 気がついたこと

OS X 環境で t2hs.rb を実行した場合、テキストファイルの末尾に改行が入っていないと、他の行の改行コードが正常でも、以下のエラーメッセージが表示されるようです。

エラー(1452行目):改行コードを、「CR+LF」にあらためてください.
処理を停止します

作成:2015年1月30日

このページは青空文庫の公式な文書ではありません。お問い合わせは個人あてにお願いいたします。