自作英単語学習ツール: "Carvo2" の最近の様子

今年最初のエントリーです。

Perl入学式で学んだPerlの基礎知識を使って、自分に役立つツールをいくつか作っています。

昨年末の Advent Calendar でも、最後にひとつ紹介しました。

今日はそうした自作解題シリーズの第2回ということで、「Carvo2」を紹介します。
note103/Carvo2 · GitHub

来歴 / 新機能

と、言いながら、Carvoはすでに何度かこのブログでも扱っていまして、古い順にこんな感じで。

  1. 英単語学習ツール "Carvo" - 機能拡張&モジュール化してGitHubに公開しました - the code to rock
  2. 英単語学習ツール "Carvo" に得点加算機能を付けました - the code to rock
  3. Carvo2の作成 / Perl入学式 in YAPC::Asia2014 - the code to rock

ということなので、このツールだけで実はもう4回目の登場です。

にもかかわらず(というか)、また紹介したいと思った一番の理由は、「読み上げ機能」を付けたことにあります。

上の記事群では、どれもGIF動画でその様子を紹介していることからもわかるように、このツールはこれまで「無音」で使っていたのですが、やはり英単語の暗記ツールというなら「読み上げ」の機能がほしいなあ、とは前々から思っていました。

そんな時、増井俊之さんの『Perl書法』をパラパラと頭から眺めていたら、その方法がさらっと書かれていまして。

Perl書法 (ASCII SOFTWARE SCIENCE Language)

Perl書法 (ASCII SOFTWARE SCIENCE Language)

といっても、実に単純なことで、たとえば Hello World! と出力したいときに、

print "Hello World!\n";

と書くのと一緒に、

print `say Hello World!`;

と書いているだけ、みたいなことなのですが。

具体的なコードで言うと、たとえば Carvo.pm の268 - 270行あたりでそのように書いています。(2015/01/10時点)
https://github.com/note103/Carvo2/blob/master/lib/Carvo.pm#L268

Macでは、「say」とした後に読ませたい語句を入れると、それをMacが読み上げてくれるので、その機能に動いてもらっている感じです。

動画作成

さて、そのように新機能を実装し、自分が楽しむところまでは良かったのですが、英語を読み上げている本ツールの様子を、ネットの向こうの人たちにどう知らせるか? というのはちょっとした問題でした。

そこで、いろいろ探してみたところ、「Soundflower」というのが良さそうだったので、それとQuicktimeを組み合わせて撮ってみました。

Soundflowerの使い方や撮影方法については、以下が参考になりました。ありがとうございました。

マシンや環境によっては上手く動かなかったり、録音した音量がやけに小さかったりという問題があるようで、部分的にそれに陥りましたが、検索を重ねてなんとかなりました。(詳細は割愛)

動画

ということで、実際にツールを使っている様子はこちらです。(2分半ほど)


carvo: 2015-01-10-01-06 - YouTube

喋っているのは、Macで僕が読み上げ担当者として設定しているVickiという女性(たぶん)です。
男性の声だとAlexという人が良いですね。

ちなみに、Macで読み上げをさせる方法や、その種類(選択肢)については以下の記事がシンプル&必要十分でわかりやすいです。

疲れたときなど、これを片端から試して気持ちを落ち着けたりします。

使い方: 読み上げ関連

最初は、デフォルトでは読み上げないように設計していたのですが(いきなり音が出たら驚くユーザーもいるかと考えて)、自分では毎回必ず読ませるので、自分のためにデフォルトは「オン」にしました。

これも具体的なコードで言うと、Carvo.pm の11行目でそのように設定しています。
https://github.com/note103/Carvo2/blob/master/lib/Carvo.pm#L11

デフォルトでオフにしたい場合は、変数に代入する文字列を現状の on から off にしておく、という感じです。

our $voice_sw = 'off';

動画のデモには含めませんでしたが、「v」というコマンドを入れると、途中でもオン・オフを切り替えたり、声の種類を変更したりできるようになっています。(上記の Alex の声に切り替えたり)

また、Carvo2では単語(見出し語)以外に「例文」も出力できるようにしていますが、この例文まで読ませると、けっこう待ち時間が長くなって、だるくなってしまいがちだったので、デフォルトでは例文の読み上げはスキップして、読ませたい時にはそちらのモードを選択できる、という風にしました。
動画でいうと、1:20あたりで「lo」(long)と入力しており、これが例文を読ませるモードへの切り替えコマンドです。

元に戻したいとき(例文を読ませないようにする)には、「sh」(short)と入力します。

使い方: 間違えた単語のリスト化機能

以前に紹介した「Worg」同様、自分で毎日使っているので、日々「もっとこうした方が良くなる」ということが出てきます。

最近のそうした「自分リクエスト&自分対応」で付け加えたのが、「回答ミスした単語を覚えておいて、それだけをリピートできる」という機能です。

上の動画でいうと、1:40ぐらいで「f」(fail)というコマンドを入力していますが、それです。
これまた全くどこにも説明がないので(今はじめて書いた)、そのうちきちんとします。

ちなみに、元に戻るには「b」(back)でOKです。
このとき、fail list モードに入る前の状況を覚えておいて、その続きからスタートできるようにしたので、自分がんばったな、という感じです。

とはいえ、この fail list モードや上記の「lo/sh」スイッチ、また「v」による音声切り替えやオン/オフなどの諸機能については、用法はおろか、存在じたいに関する説明すらツール上に無いため(READMEにも)、そのうちきちんとドキュメントを書きます。

その他

「Carvo」の読み方について書いていませんでしたが、「カルボ」でも「カーヴォ」でも何でも大丈夫です。

ぼくは20代の終わりから30代の初めにかけて、近所の個人経営のイタリアンレストランでアルバイトをしていましたが、そこの名物のひとつであったカルボナーラの厨房での略称が「カルボ」だったので、その影響があるかもしれません。

単語練習用のカードはJSONファイルで作っていますが、GitHubに上げている物にはそれぞれ30語程度ずつしか入れていません。
例文もあるので、「試すには少なすぎる」というほどでもないとは思いますが、実際にはやっぱり、数百語あったほうが面白いかな、とも思います。

ぼくが手元で使っているカードは3種類あって、それぞれ100〜300個ぐらいの単語が入っており、週に数回、参考書を見たり、普段拾っておいた単語を調べたりながら、少しずつ数を足しています。

よって、もし手元でこれを使いたいという人がいたら、各自でカード内の単語を増やした方がいいのかもしれないですが、一方、それはそれで結構ホネというか、やや徒労感があるので、できれば今後のTodoとして、出題カードの作成については、もっと効率的でプログラマブルな(自分で一語一語足していくのではない)方法を探したいとも思っています。

暗記カードを自作することはもちろん、それ自体で勉強になるでしょうし、ちょっと遊ぶためぐらいなら、そのシステムでもいいかもしれませんが、本当に勉強に繋げたい、と思ったらやっぱり問題はきちんとしたものの方がいい気もしますし。

※ちなみに、自分の暗記カードをそのまま公開していないのは、転載元の参考書に配慮してのことです。

次回予告

前回、自作ツールの Worg を紹介した時には、

僕が作ったものの中でも1, 2を争う「自分でよく使っているツール」です。

と書きましたが、最近は Worg 以上にこの Carvo2 を(少なくとも1日1度は)使っているので、現状では「最も自分で使っている自作ツール」と言えます。

この他にも自作ツールで使っているものがもう少しあって、それは超ちっちゃい、ちょっとした一つのことをやるためだけの、限られた目的をもったわずか数行のPerlスクリプトですが、地味にだいぶ役立ってもいるので(実際に必要になるのは年に数回だけど、たまたまここ何日かの仕事で使ったという)、次の機会ではそれを紹介したいと思っています。