その他
    ホーム 技術発信 DoRuby コマンドラインから英和/和英辞書を引く
    コマンドラインから英和/和英辞書を引く
     

    コマンドラインから英和/和英辞書を引く

    この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。


    こんにちは。いくたです。

    コードを書く上で気をつけるべき最も基礎的なこと…
    それは「スペルミス」です。

    一文字間違えると今まで動いていたスクリプトがうんともすんとも言わなくなる。
    ミスに気付かないと永遠に時間が取られる。
    そして何よりスペルミスは、めっちゃしょうもない

    スペルミスしちゃうのは英単語のせい…

    クラス名やメソッド名に使われている英単語の意味がわからないと、コードはただの英数字の羅列になってしまいます。
    コードを書きながら英単語の意味をすぐに調べられたらいいですよね。

    そこで、コマンドラインから英和・和英辞書を引けるようにしました。

    概要

    1. rubyスクリプトでオンライン英語辞書の weblio http://ejje.weblio.jp から検索結果を取ってきます
    2. 実行するときに検索キーワードを引数に渡すことでコマンドラインから検索できるようにします
    3. bashのエイリアスを設定して、libコマンドを作ります

    準備するもの

    • Ruby(ver 2.1.0)
    • gem: open-uri → URL先のデータを普通のファイルと同様に扱えます
    • gem: Nokogiri →  HTMLやXMLの構造を解析して特定の要素を抽出できます

    open-uri や Nokogiri の使い方については私が前々回書いた記事でWebスクレイピングについて書いたので割愛します。
    【前々回の記事】アニメ名探偵コナンの新一が出てる回だけを見たい

    weblioの検索結果を取ってくる

    weblioはhttp://ejje.weblio.jp/content/のURLの後ろに検索ワードをくっつけることで検索結果のURLとなります。

    (例) rubyの検索結果
      → http://ejje.weblio.jp/content/ruby

    このURLのページをnokogiriで分解して「主な意味」の項目をXpathで指定して取り出して表示します。

    エラーに対処する

    エラーが出ないようにコードを書くのは大切ですが、実行時に実行時に引数を入力しない・検索結果が存在しない等エラーの発生が予想されます。
    そうなった時にNoMethodError等を出さないようにあらかじめ逃げ道を作っておきます。
    エラーとなる原因をメッセージで表示することで、正しい使い方ができる手助けになります。

    例えば、スペルミスをして検索結果が無かった場合、「一致する見出し語は見つかりませんでした。」と表示しておけばスペルミスに気づくことができます。
    スペルが不安な単語を検索にかけることで、ミスに気づくことができますね。

    実装スクリプト

    引数をキーワードにweblioの検索結果を表示する

    # weblio.rb
    require 'open-uri'
    require 'nokogiri'
    
    LIB_URL='http://ejje.weblio.jp/content/'.freeze
    XPATH="//*[@id=\"summary\"]/div[2]/table/tbody/tr/td[2]".freeze
    
    # 引数を入れてなかったらメッセージを表示する
    if AVGV.empty?
      puts '検索ワードを入れてください。' 
      return
    end
    
    # 引数ARGVの検索ワードからURLにする
    # `shell script` など複数の単語を組み合わせることができるように'+'で結合しておく
    # => 'http://ejje.weblio.jp/content/shell+script'
    url = URI.encode(LIB_URL + ARGV.join('+'))
    
    # URLから検索結果ページを取ってくる
    html = open(url).read
    doc = Nokogiri::HTML.parse(html)
    # 検索結果の「主な意味」の項目を抜き出す
    result = doc.xpath(XPATH).text
    
    # resultが無かった場合メッセージを表示する
    if result.empty?
      puts '一致する見出し語は見つかりませんでした。'
    else
      # 結果を表示する
      puts result
    end
    

    bashのエイリアス設定

    # ~/.bash_profile
    alias lib='ruby ~/scripts/library_command/weblio.rb'
    

    使ってみよう!

    $ lib ルビー
    ruby
    
    $ lib apend
    一致する見出し語は見つかりませんでした。
    
    $ lib append
    (…に)添える、付加する
    
    $ lib
    検索ワードを入れてください。
    
    $ lib お腹すいた
    I'm hungry.、hungry
    
    

    これでスペルミスが少なくなりそうです!
    写し間違えなどを気をつけるのが第一ですけどね。

    それでは、今日はこの辺で。
    読んでいただき、ありがとうございました。