掲題の問題を解決するために作成した gongo/emacs-ikku という一句抽出 Emacs Lisp と、これを利用した flycheck-ikku
を紹介します。
経緯
報告書やポエムを書く時に Emacs をお使いの皆様は、やはり普段から自身の言葉にさりげなく一句を含ませていることだと思います。日本の文化に触れること、とても良いと考えております。その気持ちを忘れずに今後ともよろしくお願い致します。
ですが毎回そういうわけにもいきません。報告書に情緒的意味を持たせるつもりもなく、只々あるがままを伝えるつもりだった。ただそれだけですが、難解な日本語を書くとなるとやはり意図せず紛れ込んでしまいます。そしてチェックをした上司からこう言われるわけです。
「これ一句じゃん」
俺はそんなことをチェックして欲しいわけじゃない。あるがままを伝え、それをチェックして欲しいだけなのに、つい一句が紛れ込んでしまった所為で話があらぬ方向へ。俺が求めるレビューじゃない。一句だ。一句が紛れ込んでいるのがいけないんだ。
ならば機械的にチェックしよう。
解決方法
Emacs には Flycheck というシンタックスチェッカーがあります。Vim でいう Syntastic
みたいなものでしょうか。簡単に述べると、ファイル保存時 1 にそのファイルをチェックし、例えば php-mode
であれば PSR-2 に沿った書き方をしているか、go-mode
であればコンパイルできる状態かどうか、などなど。人の意思に干渉されない部分を機械的にチェックしてくれる便利な Emacs Lisp です。
話を前項に戻すと
一句が紛れ込んでいるのがいけないんだ。
自身が意図せず書き込んでしまった「一句」を 機械的 にチェックできれば、そしてそれを教えてくれれば、事前に一句をただの現代語に変換し、スムーズなレビュワーへのバトンタッチが可能なのではないか。
emacs-ikku
flycheck で一句を判断する前段階として、まずは gongo/emacs-ikku を作成しました。
(require 'ikku)
(let ((song (ikku/find "ああ古池や蛙飛び込む水の音ああ")))
(ikku:song-to-string song)) ;; => "古池や 蛙飛び込む 水の音"
詳しい使い方は README やソースコード、参考リンクをご参照下さい。
flycheck-ikku
emacs-ikku
を flycheck プラグインとして呼び出せるように emacs-ikku/flycheck-ikku.el を作成しました。
デモ
flycheck-mode
が有効の時に
M-x flycheck-select-checker RET ikku-checker
を実行すると、現在開いているバッファから一句を探し出し、その部分をハイライトします。
(setq flycheck-highlighting-mode 'columns)
とかしておくと、一句の始まりの一語にハイライトされます 2
もし全ての major-mode でこのチェッカーを発動したい場合は下記を実行していただければ。
(add-to-list 'flycheck-checkers 'ikku-checker)
ちなみに今回デモとして使った文章は 感謝駆動開発 TDD (Thanks Driven Development) のものです。4年前にも既に一句を紛れ込ませていたと考えると、感慨深いものがあります。
SPECIAL THANKS
emacs-ikku
の中を読んでいただければわかると思いますが r7kamura/ikku のほとんどを Emacs Lisp にコンバートしただけのものとなっております。圧倒的感謝。いつまでもついていきます! 3
補足: flycheck チェッカーを作ってはみたものの
他の flycheck ファミリーを見ると、ほぼ外部コマンドに投げたり非同期実行しています 4。
現状の flycheck-ikku
は同期実行なので、もしかしたらテキスト量が増えるとそれだけ固まる可能性があります。いつか非同期にします。多分しません。
まとめ
無意識に一句詠んでいきましょう。
おわりに
わたしは一句紛れてても気にしないので多分使いません。