漢字にルビ(ふりがな)を付けちゃうぞ。
- HTML
- テキスト文書
- マークダウン
- 漢字を学び始めた人
- 教育関係者、出版社
- ルビ付きHTMLを迫られて悩むエンジニア
ルビ族以外もどうぞ!
-
<ruby><rb>蝙蝠</rb><rt>こうもり</rt></ruby>
-
蝙蝠(こうもり)
-
<ruby class="学年3 学年1"><rb>落下</rb><rt>らっか</rt></ruby>
-
ルビ指定: 自動のルビが不味いときは指定
猫の一撃(ネコパーンチ)
-
学年指定: 自動ルビ化の範囲を小学3年以降とか常用漢字以外などに
猫が蝙蝠(こうもり)を食べるの?
-
CSSセレクタ: ルビ化の範囲を絞り込み
div.クラス>p
-
ルビの粒度
お気(き)に入(い)り
orお気に入(きにい)り
orお気に入り(おきにいり)
-
カタカナルビ
アリスはそう呟(ツブヤ)いた。
-
その他、括弧の変更やrp要素の使用など
なんとかしてgit
とnpm
コマンドの環境を入れたあと、こうする。
# 任意のディレクトリで、ダウンロード
git clone https://github.com/big-stream/rubygana.git
# インストール(依存ライブラリのダウンロード)
cd rubygana/
npm install --global
# もうrubyganaコマンドが使えるぞ
rubygana --help
- 日本語解析: kuromoji.js
- マークダウンのタグ化: marked
- HTML解析: cheerio
MIT License
© 2018 ころん:すとりーむ
rubygana [オプション...] [ファイル]
一つのファイル指定か標準入力が必要で、結果はすべて標準出力。
echo '猫と蝙蝠' | rubygana
# 出力
猫(ねこ)と蝙蝠(こうもり)
ルビ化の際、kuromoji.jsのビルドに1、2秒かかります。
-
rubygana [-HKCy] [-g 学年] [-G 粒度] [-s セレクタ] [-n 除外セレクタ] [-N 除外要素] [-c [CSS]] [-T タイトル] [--ruby-size [フォント倍率]] [--ruby [フレーズ:]単語:ルビ] [--ruby-re 正規表現:単語:ルビ] [ファイル]
-
rubygana [-tKC] [-b 括弧] [-g 学年] [-G 粒度] [--ruby [フレーズ:]単語:ルビ] [--ruby-re 正規表現:単語:ルビ] [ファイル]
-
rubygana -a [-y] [クラス頭語] [-c [CSS]] [--switch] [-s セレクタ] [-n 除外セレクタ] [ファイル]
-
rubygana -m [-c [CSS]] [-T タイトル] [-L 見出し] [ファイル]
-
rubygana -w [-c [CSS]] [-T タイトル] [-L 見出し] [ファイル]
その他オプション(引数なし):
-A, --sample-text サンプルテキスト出力
-B, --sample-html サンプルHTML出力
-M, --sample-md サンプルマークダウン出力
-d, --debug デバッグ用
-h, --help ヘルプ
--readme-md 詳細ヘルプ(このマークダウン)
--readme-html 詳細ヘルプ(HTML)
-v, --verbose デバッグ情報を増やす
-V, --version バージョン情報
-い, --依存 依存ライブラリ確認
-ら, --ライセンス ライセンス情報
-☺ , --感謝
HTML扱いしてルビ化。冒頭にDOCTYPEやxml宣言があれば自動判別のため、省略可。
# DOCTYPEやxml宣言がないのにHTML扱いしたい場合
echo '蝙蝠なの?' | rubygana -H --only-body
# 出力
<ruby><rb>蝙蝠</rb><rt>こうもり</rt></ruby>なの?
テキスト扱いしてルビ化。
# DOCTYPEやxml宣言あるのにテキスト扱いしたい場合
echo '<!DOCTYPE html><html><body>蝙蝠なの?</body></html>' | rubygana -t
# 出力
<!DOCTYPE html><html><body>蝙蝠(こうもり)なの?</body></html>
漢字の学習学年をruby要素のクラス名に付加。すでにruby要素があるHTMLに対してこの動作だけを行い、新たなルビ化はしない。学年別に色分けしたいとか。
デフォルト: 学年
# 「落」は3年生、「下」は1年生なので
echo '落下' | rubygana -H | rubygana -a --only-body
# 出力
<ruby class="学年3 学年1"><rb>落下</rb><rt>らっか</rt></ruby>
# 中学生以降は「学年7」、常用漢字以外の漢字は「学年8」
ルビ化はせず、単にマークダウンをHTML5文書に変換。h1要素になるものをタイトル(title要素)にする。変更は--headline
と--title
ルビ化はせず、単にテキスト文書をHTML5文書に変換。テキストは行ごとにp要素に入れ(空行は対象外)、冒頭の行を見出し(h1要素)とタイトル(title要素)にする。変更は--headline
と--title
練習用サンプルとして、ルビのない下記3行テキストを標準出力。
不思議の国のアリス
「猫が蝙蝠を食べるの? 蝙蝠が猫を食うの?」
アリスは白ウサギの穴に落下しながら呟いた。すると突然…
練習用サンプルとして、ルビのないHTMLを標準出力。
練習用サンプルとして、ルビのないマークダウンを標準出力。
ルビを指定したいなら。フレーズ(改行なし)で、フレーズ内の単語のみに作用。複数回使用可。マッチした単語には--grade
など自動ルビ用オプションの影響なし。フレーズに:が含まれるなら代わりに--ruby-comma
を使用。
# 自動のルビが不味いときや、工夫したいときに使う。
echo '反復横飛びの無限反復' | rubygana -r '無限反復:反復:ループ'
# 出力
反復(はんぷく)横(よこ)飛(と)びの無限(むげん)反復(ループ)
# --rubyはいくつも使用できるが、同じフレーズ・単語は先のものが優先
echo 猫と蝙蝠 | rubygana -r '猫:cat' -r '猫:きゃっと' -r '蝙蝠:bat'
# 出力
猫(cat)と蝙蝠(bat)
# --htmlでも
echo '猫の一撃をくらった' | rubygana --html -r '猫の一撃:ネコパーンチ' --only-body
# 出力
<ruby><rb>猫の一撃</rb><rt>ネコパーンチ</rt></ruby>をくらった
--ruby
の代わりに使う。違う点は引数が,区切り。
echo 'ねえ、:コマンドって知ってる?' | rubygana --ruby-comma ':,コロン'
# 出力
ねえ、:(コロン)コマンドって知(し)ってる?
正規表現(改行なし、:を使わないこと)を用いたルビ指定。マッチした表現中の単語のみに作用。複数回使用可。マッチした単語には--grade
など自動ルビ用オプションの影響なし。正規表現はJavaScriptのRegExpで評価。
echo '1行2行、一行は四行も空行にした' | rubygana --ruby-re '[0-9四]行:行:ぎょう' --ruby '空行:くうぎょう'
# 出力
1行(ぎょう)2行(ぎょう)、一行(いっこう)は四(よん)行(ぎょう)も空行(くうぎょう)にした
# マッチした表現に単語が複数回現れる場合、一つ目にのみルビが付く
echo '激怒激怒' | rubygana --ruby-re '(激怒)+:激怒:プンプン'
# 出力
激怒(プンプン)激怒(げきど)
# 先読み表現なども使える
echo '激怒プンプン丸が激怒' | rubygana --ruby-re '激怒(?=プンプン丸):激怒:げきおこ'
# 出力
激怒(げきおこ)プンプン丸(まる)が激怒(げきど)
この学年までの漢字はルビ化しない。0-7を指定。2なら3年生以降の、6なら中学校(常用漢字の残り)以降の、7で常用漢字以外の漢字をルビ化。
デフォルト: 0
# 常用漢字以外だけルビ化なら7
rubygana --sample-text | rubygana -g 7
# 出力
不思議の国のアリス
「猫が蝙蝠(こうもり)を食べるの? 蝙蝠(こうもり)が猫を食うの?」
アリスは白ウサギの穴に落下しながら呟(つぶや)いた。すると突然…
学年の判断は、文科省学年別漢字配当表、文化庁常用漢字表による。
かな交じり単語のルビの振り方の調整。0-2を指定。例えば「お気に入り」は1単語であり、
0=> お気(き)に入(い)り
1=> お気に入(きにい)り
2=> お気に入り(おきにいり)
デフォルト: 0
echo 'お気に入り' | rubygana --html -G 2 --only-body
# 出力
<ruby><rb>お気に入り</rb><rt>おきにいり</rt></ruby>
括弧を変更したいなら。例 '[]'
デフォルト: ()
# 指定文字が奇数個なら、左側に一つ多く配分
echo '蝙蝠' | rubygana -b '(=)'
# 出力
蝙蝠(=こうもり)
カタカナのルビに(デフォルトはひらがな)
echo 'アリスはそう呟いた。すると突然…' | rubygana --katakana
=> アリスはそう呟(ツブヤ)いた。すると突然(トツゼン)…
セレクタと除外セレクタはcheerioによる。
body要素の中身だけ出力(bodyタグ含まず)(--comment
は出力)。以下例でも多用。
この要素の子孫をルビ化。これに該当した要素(のうち)そのものを--not-selector
なら除外できるが、--ng-elements
では除外できない。
例: #id, p.クラス, ol>li:nth-child(1)
デフォルト: body
# ol要素直下の1番目li要素と、文クラスのp要素だけルビ化
rubygana --sample-html | rubygana -s 'ol>li:nth-child(1), p.文'
# 「要素>*」にすると、要素直下の漢字は対象にならない
echo '<p>猫と<span>蝙蝠</span></p>' | rubygana --html -s 'p>*' --only-body
# 出力
<p>猫と<span><ruby><rb>蝙蝠</rb><rt>こうもり</rt></ruby></span></p>
-s
そのものから除外(子孫を除外するのではない)。-s
のデフォルトはbodyなので、-s
と一緒に使う。
例: li.クラス
デフォルト(-h
の時): ruby,script,style,code,pre,samp,blockquote
デフォルト(-a
の時): 空
# p要素をルビ化したいが、そのうち無視クラスを除外したいとき
echo '<p class="無視">猫</p><p>蝙蝠</p>' | rubygana --html -s 'p' -n '.無視' --only-body
# 出力
<p class="無視">猫</p><p><ruby><rb>蝙蝠</rb><rt>こうもり</rt></ruby></p>
# 該当した`-s`そのもの(と子孫)を除外できるが、該当しなかった`-s`の子孫は除外できない
echo '<div><p>猫</p></div><p>蝙蝠</p>' | rubygana --html -s 'body>*' -n 'p' --only-body
# 出力
<div><p><ruby><rb>猫</rb><rt>ねこ</rt></ruby></p></div><p>蝙蝠</p>
-s
の子孫から除外する要素を|
区切りで。-s
そのものから除外するには、--not-selector
デフォルト: ruby|script|style|code|pre|samp|blockquote
# 絶対に除外したい要素で使う。(最低限scriptとstyleは除外推奨)
echo '<p>猫と<a>蝙蝠</a></p>' | rubygana --html -N 'a' --only-body
# 出力
<p><ruby><rb>猫</rb><rt>ねこ</rt></ruby>と<a>蝙蝠</a></p>
head要素末尾にstyle要素追加。そのCSSを指定。引数省略で下記デフォルトCSS。
--html
のとき、ルビのフォントサイズ(漢字に対する倍率)を0.5(又は--ruby-size)倍に。ruby>rp,ruby>rt{font-size:0.5em;}
--add-class
のとき、常用漢字以外の漢字のルビの色をDarkRedに。ruby[class$="8"]>rt{color:DarkRed;}
--text-html
と--md-html
のとき、空(のstyle要素)
head要素末尾に下記style要素追加。ルビのフォントサイズ(漢字に対する倍率): 0.1-2.0(デフォルト0.5)
ruby>rp,ruby>rt{font-size:倍率em;}
rp要素(ルビ非対応ブラウザのための括弧書き)を使用する。
echo 猫なの? | rubygana -H --use-rp --only-body
# 出力
<ruby><rb>猫</rb><rp>(</rp><rt>ねこ</rt><rp>)</rp></ruby>なの?
title要素の内容。
h1要素の内容。--text-html
と--md-html
で使う。
ページトップにルビの学年スイッチを追加。漢字の学習学年ごとにルビをオン・オフ可能。
rubyganaコマンド実行に関するコメントを末尾に追加。
--html
のとき: body要素末尾に改行と下記4行挿入。スタイルがdisplay:none
のため、ソースからなら確認できるコメント。
<!-- この文書のルビ振りは下記コマンド(rubygana VERSION)を用いました。 -->
<pre style="display:none;"><code>
ここに実際に実行したコマンドオプション・引数が入る
</code></pre>
--text
のとき: 文書末尾に改行と下記2行追記。
# この文書のルビ振りは下記コマンド(rubygana VERSION)を用いました。
# ここに実際に実行したコマンドオプション・引数が入る
開発用オプション。kuromojiによる解析詳細(形態素)などが確認できる。-dd
でオプション引数の確認だけして終了。
開発用オプション。debug情報を増やす。
# ダウンロードし、ルビ化し、firefoxで開く
page='ja.wikipedia.org/wiki/不思議の国のアリス'; wget --page-requisites --convert-links "https://$page" && rubygana $page > $page.ruby.html; firefox $page.ruby.html &
# 入力の文字コードはUTF-8のみ受付:
# 違うならiconvコマンドなどで変換してから
cat shift-jis.txt | iconv -f 'shift-jis' -t 'utf8' | rubygana
# (標準出力の文字コードは端末の設定で変更)
# サンプルテキストを出力し、それをHTML化し、次にh1だけカタカナでルビ振りし、そしてp要素を2年生超でルビ振りし、
# そして学年クラス名を付加して中学生以上常用漢字ルビは青色で常用漢字以外ルビは赤色スタイルにして、
# それをalice.htmlとして保存し、それをFirefoxで開く。
rubygana -A | rubygana -w | rubygana -HKs 'h1' | rubygana -s 'p' -g 2 | rubygana -ac 'ruby[class$="7"]>rt{color:blue;}ruby[class$="8"]>rt{color:red;}' > alice.html; firefox alice.html &