豪鬼メモ

一瞬千撃

ポップアップ英和辞書のChrome拡張機能

WiktionaryWordNetから作った真にフリーな英和辞書を、Chromeブラウザのポップアップ辞書として利用できるように、拡張機能を作った。これをインストールすると、任意のWebページ内の任意の言葉を選択すると、その意味を辞書で調べて、結果がポップアップとして表示される。FacebookでもTwitterでもCNNでもどこでも使えて便利だ。未知の英単語やフレーズを見つけても、わざわざ辞書検索ページに移動することなく、意味を知ることができる。集中力を切らさないで英文を読み進められるという利点は非常に大きい。
f:id:fridaynight:20210413023611p:plain


Chrome拡張のインストール方法を説明する。メニュー等は英語版設定に基づいて説明するが、日本語設定の場合には適宜読み替えられたい。まず、このZIPアーカイブをダウンロードし、展開する。Chromeのアドレスバーに、chrome://extensions と入力して機能拡張の管理画面に行く。画面右上の方に「Developer Mode」というトグルスイッチがあるので、それをオンにして開発用の機能が使えるようにする。画面左上の方にある「Load unpacked」というボタンを選ぶとファイル選択画面になるので、先ほど展開したアーカイブディレクトリを選択する。これでインストールは完了だ。
f:id:fridaynight:20210413024600p:plain

アドレスバーの右にあるパズルのピースのようなアイコンが機能拡張の管理メニューである。それをクリックすると、「English-Japanese Union Dictionary」というのが加わっているはずだ。それの横にある虫ピンマークを押すと、アドレスバーの横に辞書用のアイコンが出てくる。また、その虫ピンのさらに右にある点々のアイコンをクリックすると「This can Read and Change Site Data」というサブメニューがあり、その中の「On All Sites」を選択する。これで機能拡張が現在のページの情報が見られるようになる。Chromeウェブストアに登録した機能拡張ならば、このあたりの煩雑なセキュリティ設定は不要になるのだが、今は仕方ない。

アドレスバーの右に出てくる「EJ」というボタンを押すと設定用のメニューが出る。検索窓があるのでそこに適当な語を入れて検索すると辞書検索の結果が出る。ページ遷移をせずに任意の語が調べられるので、便利な機能だ。とはいえ、それは単なるオマケ機能である。検索窓の右にある「ポップアップ検索」の設定が重要だ。「有効」にした場合、全てのページでポップアップ機能が利用できるようになる。無効にした場合、ポップアップは出なくなる。機能拡張自体の有効無効を切り替える必要はない。設定用メニューは「Ctrl+Shift+L」(MacならCmd+Shift+L)というショートカットでも出したり消したりできる。
f:id:fridaynight:20210416152743p:plain

長い英文を読んでいて、ある程度の頻度でポップアップ辞書を使う場合には、該当フレーズを選択しただけで検索できる方が便利だ。しかし、たまにしか使わないという人には、該当フレーズを選択した上で、右クリック等でコンテキストメニューから呼び出せる方が便利かもしれない。よって、ポップアップ検索が無効の場合でも、コンテキストメニューから「Popup Dictionary」を選ぶとポップアップ辞書が出るようになっている。コンテキストメニューの代わりに「Ctrl+Shift+K」(MacならCmd+Shift+K)というショートカットキーを使っても良い。
f:id:fridaynight:20210413171007p:plain


とにかく英文を読んでみてほしい。わからない単語やフレーズを即座に調べられるというのは本当に便利だ。Weblioポップアップ英和辞典とか、同じ機能を提供する機能拡張はそれなりに世にあるっぽいし、MacOSの組込み辞書も同じように使える。一方で、この統合辞書は、英英辞典であるWordNetWiktionaryがベースになっているところがポイントだ。だいたいの意味を掴むために日本語訳も表示されるが、詳細な意味を把握するにはやはり英文の語義説明を読むのがわかりやすい。ある英単語やフレーズの意味は文脈によって変わるので、和訳語の羅列よりも英文による語義説明を読むべきなのだ。語義説明が日本語だと英語での思考が中断されてしまうが、平易な英文であればそれがない。逐次訳で意味が把握できるような場合は日本語訳を見て終わりにしてよいし、ちゃんと理解したい場合は語義説明も読める。つまり、日本語訳の簡潔さと英英辞典の詳細さの良いとこ取りというわけだ。その語のより詳細な意味が知りたくなったら、見出しのリンクをクリックするとよい。そうすると用例や屈折形や類語なども表示される辞書検索結果に飛ぶことができる。ポップアップを消す際には、右上のバツボタンを押すか、ポップアップ以外の箇所をクリックすればよい。
f:id:fridaynight:20210413024202p:plain

Webページ内の英単語をダブルクリックするとその語が選択されるのはご存知だろう。なので、単語をダブルクリックすると検索できるという使用感になる。もちろん、複数語からなるフレーズでも、普通にドラッグして範囲選択すれば検索することができる。屈折にもきちんと対応している。例えば、過去形である「ran」を選択しても原形の「run」がきちんと検索できる。「saw」(名詞sawか動詞seeの過去形か)のように曖昧な場合には、両方が表示される。「working」や「aged」みたいに分子が見出語として独立した場合も、独立した語だけでなく派生元も同時に表示してくれるのが便利だ。スペルミスがあった場合にも、曖昧検索により、もっとも近い見出し語を検索してくれる。さらに、英和辞書と言いながら、日本語でも検索できる。日本語が選択された場合、和英辞書として、訳語を対象にした検索が行われる。

検索結果の表示内容にもそこそこ拘った。見出し語と発音記号と訳語という三大要素が最初に来るのは当然だが、その他には、品詞と語義説明のみを表示するようにした。英文読解を進める際に必要な情報は基本的にはそれだけだからだ。用例や屈折形や派生語などの深い情報は、英作文や精読の際には有用かもしれないが、日常使いには不要だ。不要な情報が目に入ると疲れるので、できるだけ簡素な表示を心がけている。そして、WordNetの語義説明をWiktionaryの語義説明よりも先にしたのも良い。WordNetの方が説明量が安定しているので、思考リズムを崩さないからだ。Wiktionaryは単語の言い換えで終わっていたり、逆にやたら長い説明が来たりするのでちと疲れる。ほとんどの場合で、語義説明の最初の項目かその次の項目くらいに目を通せば意味が把握できるだろう。そして、全体のレイアウトや色使いも、見やすく疲れないことを追求したものになっている。他にも、入力フォーム内の語句を選択してもポップアップが出ないようにするとか、画面端でポップアップを出す際にはみ出さないように位置を調整したりとか、該当件数によって結果の表示形式を微妙に変えていたりとか、地味な工夫をたくさんしている。

ということで、「俺が考えた最強のポップアップ辞書」として、欲しい機能は全部入れた。WordNetWiktionaryのカバー率は市販の辞書にも引けを取らないし、語義説明の豊富さは市販のものを上回っていることもあるので、なかなか使えるものになっていると思う。


なお、Chrome拡張機能をインストールしなくても、Webサイトの管理者であれば、自分のページにポップアップ辞書機能を追加することができる。対象のページに、以下のように、外部JavaScriptと外部CSSの読み込みと、ページロード時の関数呼び出しを仕掛ければよいだけだ。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="https://dbmx.net/dict/union_dict_pane.css">
<script src="https://dbmx.net/dict/union_dict_pane.js"></script>
</head>
<body onload="union_dict_activate()">
<h1>Hello World</h1>
<p>When Johnny comes marching home again, we'll give him a hearty welcome.</p>
</body>
</html>

f:id:fridaynight:20210413023753p:plain

Chrome拡張機能は今回初めて作ってみたが、とても簡単で面白い。対象ページの加工処理は上述の外部ファイルで既に作ってあるので、あとはディレクトリに入れて、ちょっとした起動スクリプトを書いて、適当にマニフェストファイルとかいうのを書けば完成だ。つまり、普通のWebアプリを書くための要素技術さえ持っていれば、すぐにでもChrome拡張機能が作れる。意外に簡単だとは聞いていたが、確かに簡単だった。Chromeストアに登録する手順の方がむしろ面倒そうだ。そもそもやらないけど。

ちなみに、iframeで分割されたページでも、この拡張機能スクリプトは全てのフレームで読み込まれるので問題なく動作する。よって、基本的には全てのサイトで動作するはずだ。例外は、onmouseupイベントが伝搬しないようにするスクリプトが仕掛けられている場合と、セキュリティ設定で特定のサイトで拡張機能によるスクリプト挿入が禁止されている場合だ。特定のサイトでだけ有効にしたり無効にしたりといった機能はこの拡張機能自体には備えられていないが、Chromeの機能で、サイトごとに拡張機能の有効無効を切り替えられるので、必要であればそれを使うと良いだろう。


知らない単語があっても辞書を引かずに文脈で意味を把握する能力は大事だ。しかし、その能力は英文を多読していれば身に付くので、辞書を引いたとしても損なわれるわけではない。辞書を引いて損なわれるのは、その作業にかかる時間だけだ。よって、辞書を一瞬で引くことができ、またその内容を一瞥して把握してすぐに本文に戻れるのなら、辞書を引くことのデメリットはない。むしろ、未知語の洪水に脅かされずに地道に英文を征服していく喜びがある。

比較的に単純な実装なので、興味があればソースを覗いてみてほしい。不具合や改善案について報告いただいても幸いだ。