mythfinder

⚙️

はじめてのRust: CLIツール

きっかけ

ロシア語を勉強する学生が必ずといっていいほどお世話になるものがひとつあり、東京外国語大学のロシア語辞書がそれだ。このインターネット時代、そのへんを探せばオンライン単語帳くらいごまんとありそうなものだが、ロシア語に関してはあんまりない。というかこれしか有用なのがない。ゆえに誰もが(たぶん)使っている。紙の辞書? 研究社露和辞典をどうぞ。1

さてこの辞書、学外で使わせていただいているという立場上本来なら文句をつけるのも筋違いなわけだが、不満がないわけではない。ちょっとアクセスしてもらえばわかるだろう。Enterキーで検索ができないとか、ゼロ年代インターネットっぽい要素配置とか、SSL未対応とか(これはもうどうしようもない)、それもそのはず、ページ最下部に煌めく "2005" の文字。マジで?

包み隠さずにいうと、ユーザー体験があまりよろしくない。とはいえ、なにか高度なインターフェースが必要なたぐいのものでもない。私としては、ささっとコマンドラインから単語が検索できて、結果が綺麗に表示されればそれで構わない。ちょうどなにか CLI ツールを作りたいと思っていたこともあり、これを題材にできないか考えてみた。

しかしこの辞書、APIが公開されているわけもなく、適当にJSONかなにかでデータを引っ張ってくることはできない。そこでURLを見てみる。単語 "русский" を検索した結果のURLが以下だ。

http://cblle.tufs.ac.jp/dic/ru/v_search_list.php?serchTxt=%D1%80%D1%83%D1%81%D1%81%D0%BA%D0%B8%D0%B9&searchWayID=4&serch_button=%E3%80%80%E6%A4%9C%E7%B4%A2%E3%80%80

文字をデコードして必須要素を並べると以下のようになる。

http://cblle.tufs.ac.jp/dic/ru/v_search_list.php?serchTxt=русский&searchWayID=4

だいぶわかりやすいクエリパラメータが見えてくる。少なくとも「検索したい単語」serchTxt(原文ママ)と「検索方法」searchWayIDから URL を生成して問い合わせれば、望んだ単語の検索結果は取得できそうだ。

あとは取得したHTMLを適当にパースしてターミナルに出力すればよく、この程度の作業ならどんな言語でも実装できる。そういうわけでRustで書いた。

中身

GitHub - haxibami/ruslovo-tufs: A command-line helper tool for searching online Russian dictionary A command-line helper tool for searching online Russian dictionary - haxibami/ruslovo-tufs github.com
GitHub - haxibami/ruslovo-tufs: A command-line helper tool for searching online Russian dictionary

なお、以下のクレートを切り貼りしたようなものなので、とくに付け加えることはない。

使ったクレート

できたもの

検索結果の一例
検索結果の一例

感想

Rust自体というよりも、パッケージマネージャのCargoがおそろしく便利だった。ライブラリを引っ張ってくるのに手間がかからないので、初心者にも参入しやすい。こういうツールを軽く作るにはかなり良いかもしれない。

脚注

  1. 定価8580円(2022/02/11 調べ)