日本語の読みがなを返す Gem を作った
日本語の読みがなを返す Gem である rubyfuri
(ルビふり) を作った。
Yahoo!デベロッパーネットワーク の テキスト解析:ルビ振り を利用している。
使い方
YOUR APP ID
はデベロッパーネットワークで取得できるアプリケーション ID.
rubyfuri = Rubyfuri::Client.new('YOUR APP ID') rubyfuri.furu('大きな空') #=> 'おおきなそら' rubyfuri.furu(['広い', '日光', '時計']) #=> ['ひろい', 'にっこう', 'とけい']
作った理由
はてなインターンの前半課題に id:SWIMATH2 さんが ルビふりAPI を利用していたのを思い出して、自分も使ってみた。
この API, ただ読みがなを返してくれるわけじゃなくて以下のように形態素っぽい形にして返してくる(形態素ではない)。
<resultset xmlns="urn:yahoo:jp:jlp:FuriganaService" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="urn:yahoo:jp:jlp:FuriganaService http://jlp.yahooapis.jp/FuriganaService/V1/furigana.xsd"> <result> <wordlist> <word> <surface> 青い </surface> <furigana> あおい </furigana> <roman> aoi </roman> <subwordlist> <subword> <surface> 青 </surface> <furigana> あお </furigana> <roman> ao </roman> </subword> <subword> <surface> い </surface> <furigana> い </furigana> <roman> i </roman> </subword> </subwordlist> </word> <word> <surface> 空 </surface> <furigana> そら </furigana> <roman> sora </roman> </word> </wordlist> </result> </resultset>
で、パースするのに一手間かかって面倒だったので Gem を作った。
便利なところ
rubyfuri
には、実際に API とやり取りするより簡略化されているのともうひとつメリットがある。配列を与えた時、各要素をまとめて一回のリクエストで処理しているため、API 使用回数の節約、また愚直にひとつの文字列につき 1 リクエストを直列に送るよりも高速化される。
学び
ちゃんとテストを書こう、と思って作り始めた Gem なんだけど、このエントリを書いているときにテストあんまり書けてない。
それでも RSpec でいくつかテストを書いての学び。describe
節で対象メソッドを記述して、その下に subject
でテストする処理を書く。で、その下に context
節を作ると DRY な感じで良く書ける。
describe '#furu' do subject do instance.furu(text) end context '文字列が空の場合' do let(:text) do '' end it '~~~~' do # ~~~~ end context '配列が与えられた場合' do let(:text) do ['今日は', '雲が', '青い'] end it '=====' do # ============ end end end end
まとめ
API ラッパー作った。