インストール
npm i -g aozora
使い方
aozora
: 対話的インターフェイスで作品を探すaozora -r length
: ランダムな作品を表示する。length
を指定したら先頭(length)文字だけ表示aozora -a 著者名
: マッチする著者一覧を表示。一人だけの場合は、その人の作品一覧も表示。aozora -w 作品名
: マッチする作品一覧を表示。一件の場合は本文を表示。
オススメ利用法
aozora -r 1000 | pbcopy
で長文貼り付けできる
経緯
仕事でインターネット作ってるとテスト用に適当なデータを入力することがある。
「あああああ」とか「sdfafadf」とか。
極稀に、なんかミスってその内容が公開されてしまうことがある。 「ああああ」とかなら良いんだけど、ふざけててあまり宜しくない言葉を使ってたり、未公開情報が含まれてると大変。 でも人間は「ああああ」を200文字300文字も入力できるほど頭が良くないので、適当な長文を調達する手段が欲しい。
無料 長文 合法
といえば青空文庫だ。
調べてみると、青空文庫は作品一覧のcsvファイルをCC BY 2.1ライセンスで公開している。
これを利用すれば、作品タイトルや著者名などから青空文庫作品の検索ができる。
青空文庫の文章を引用すれば、長文に困る事はなくなるのでは? 多少オフェンシブな内容が含まれていても、昔の人による創作物だから許されるのでは? しかもターミナルで古典文学が読めるのでは!!
というわけで作った。
構成
利用したライブラリ | |
---|---|
csvパース | node-csv |
DB | Sqlite3 + Sequelize |
スクレイピング | axios + cheerio |
テーブル表示 | cli-table2 |
対話的インターフェイス | Inquirer.js |
CSVファイルはレポジトリに含めているんだけど、 postinstallでSqliteに突っ込んでる。
list_person_all.csvは構造が難しくて、この程度の規模なら全く正規化せずにLIKEしても大丈夫でしょって思ったけど、著者IDと作品IDで一意じゃなかったりするので、author
work
card
という3つのテーブルに分けた。 card
は図書カード(青空文庫における作品ページ)のこと。
テーブル表示が結構大変だった。 npmにはテーブル表示するためのパッケージがいくつもあるんだけど、殆どは日本語を表示すると崩れてしまう。 その中ではcli-table2が一番メンテされてそうで、既にCJK文字サポートのP-R出てたけど放置されてたので、それを引き継いだP-Rだしてマージしてもらった。
対話モードではInquirer.jsを使用。 ほんとはpercolとかpecoみたいなインターフェイスにしたかったけど、ムズそうなので定番で我慢した。
感想
CLIでもMVCっぽくなるんだなあ
まともな規模のCLIツールを作ったのは初めてだったんだけど、なんとなく普段触れているようなWebのMVCっぽい構成になった。 数年前のYAPC AsiaでゆーすけべーさんがWAF入門を教えていた時、最初にCLIツールから作っていたのを思い出した。 当時の僕はMVCという概念についてフンワリとしか知らず、ふーんそうなんだ、位にしか思っていなかったけど、 今回何も考えずにコードを整理していったら、いつも仕事で書いているような構成になっていった。
それほど許されない
小説、普通に差別語とかガンガン出てくるのでテスト用データに使うのには若干注意が必要だった