「かいぶん」しょを作った話

noteに『回文になる単語リスト』を公開しました。

note.com

作ったきっかけ

謎解きや、謎作成が好きな妻がほしいって言ったので。

コード類

gist.github.com

Denoで書いています。

処理は割と普通のことしか書いてないので、解説はしません。(見返したらObject.keysでeachすればSetいらんかったなーとか思っています)

ローカルでも動かしたい場合、以下の手順で実行できる気がします。

  1. Denoをローカルに入れる
  2. 豚辞書のファイルをDL
  3. buta014.dicと同じ階層に移動
  4. deno run --allow-read=./buta014.dic --allow-write=./*word.txt https://gist.githubusercontent.com/h-kono-it/990c866c869123cecdab1ef923071d3d/raw/901d460af01d62d61c656b62b08d35fcf76d9c67/index.ts

こんな感じでお手軽に他人にも使ってもらえるのもDenoの魅力ですね。(ファイルのread/write権限めっちゃ怖いけど)

Denoの新しいバージョン(1.46~)だとdeno -R=./buta014.dic -W=./*word.txt https://gist.githubusercontent.com/h-kono-it/990c866c869123cecdab1ef923071d3d/raw/901d460af01d62d61c656b62b08d35fcf76d9c67/index.tsでよくなるみたいですね。

deno run=>deno, --allow-read=>-R, --allow-write=>-W

詳細はいつものリリースまとめのブログに書かれていますのでこちら、ご覧ください。

toranoana-lab.hatenablog.com

なぜDenoで書いたか

単純にShell Scriptは書きなれていないので、他の言語でさっとコマンドラインツール書ける環境がDenoだったというだけです。それ以上でも以下でもないんですが、それが大事というか、それがめっちゃ便利です。

普段Webサービスのエンジニアリングしているので、TypeScriptには馴染みがあるし、ファイルI/Oもすぐできるし、良い意味で例外に対して厳しくないというのも魅力です。(Javaでも同じような処理は書けるんですが、外部ファイル読むと例外関係を明示的に書かないといけないのが、個人でテキトーに書くには若干面倒)

豚辞書ってなに?

この回文のリストの元になった辞書は「豚辞書」と呼ばれるものです。

ぶたさんという方が公開されている(公開していた)クロスワード用の辞書です。
クロスワード用なので、「ゃゅょ」などが「やゆよ」で書かれています。

この辞書を使ったWebサービスもちょこちょこあり、有名なのは以下のサイトです。

https://shiwehi.com/tools/wordsearch/

「はがきモード」とか面白くないですか?

まとめ

みんなもDenoで便利ツール作ってGistで公開しよう!!!