本日、七月十七日は祇園祭山鉾巡行と神幸際です。今年から祭本来の姿に戻すという事で前祭(さきまつり)と後祭(あとまつり・七月二十四日巡行)に別れます。まわりが山鉾に囲まれているので、前祭の鉾立が始まる10日から後祭の巡行がある24日まで人が多くて外出するのも一苦労です。
さて、祇園祭の頃に完成予定のつもりで二月ごろからMaikugiという名前でエラーメールの解析モジュールをPerlで開発していまして、今日はそれについて少し書いてみます。
過去、現在、未来、全てのエラーメールを解析する
というタイトルでYAPC::Asia Tokyo 2014に応募していたのですが残念ながら落選してしまいした。
自然言語処理とメールに関するトークを一切採択しなかったこと。Tweetしてくださった方やBookmarkをつけてくださった方、ありがとうございました。主に電子メール関係の開発をしているのにまたもや落選とはトーク概要における僕の表現力が低いのか、メール関係の需要が少ないのか、あるいはその両方かというところではありますが、完成すらしてないのに応募するのもアレかなぁとは思っていました。
しかしながらMaikugiの開発は続行していますし、機会あらば何処かで話をしたいとも考えています。
Maikugi
"まいくぎ"と読む事になっています。元々は"Tonkachi(とんかち)"という名前で開発をしていたのですが、検索するとホームセンターが出てきたりして、検索した時に虚栄心が満たされるように検索結果がなるべく少ない名前に変えました、Hainekoの轍を踏まず、です。
かと言ってbounceHammerの後継として開発している以上、強引であってもある程度の連続性が存在する事を説明出来る名前でないとあかん、というのは意識していて、前半部分のMAIはMail Analyzing Interfaceの頭文字を、後半のKugiはbounceHammer=ハンマー=金槌から関連するものとして釘をとってきてくっつけました。
それ以外には、現在公開しているbounceHammerの名前空間がKanadzuchiなのですが、長すぎるのでもっと短く、という点も意識した命名です。
モジュールとして
今回はPerlモジュールとして開発しています。公開中のbounceHammerはモジュール+コマンドラインツール+WebUI+DBスキーマな感じで構成していて、サーバ管理者の立場としては configure, make, make installと少しの設定で稼働させられて便利である一方、開発者の立場としてはモジュールとして使いにくいものでした。
これは自分自身が既存のメール受信プログラムに解析機能を実装する際に始めて「面倒くさい」を実感して気がつきました。
なのでMaikugiはPerlモジュールとして開発しています。コマンドラインツールやWebUI等の周辺部分は実装予定はありません。必要なユーザは自分で好きなように実装してくださいという立場です。あるいは商業的見地から、それらの周辺部分を有償で提供するかも知れませんが未定です。
機能
JSONで出す
エラーメールの解析は段階的に行います。先ずメールをテキストとして読みだしてFrom行とヘッダと本文に分解、そして本文をバウンスそのものに関するエラー部分と個々の宛先アドレス毎のエラー部分、それと元のメール内容に分解します。
これらをbounceHammerが出力するのと近い形でのJSONで出力します。
まだ作っていないAPI
今回はモジュールとして開発しているので、これを使った何かを実装する場合は"use Maikugi;" のような記述をしますが、言語はPerlに限定されます。そこで、Perl以外の言語からも解析が実行出来るようにHainekoのそれと近い形でHTTPベースのAPIを提供しようかと考えていますが、未実装です。
実装進行中のMTAモジュール
エラーメールを解析するにあたっての精度となるのがMaikugi::MTA::*として実装される各MTA対応モジュールです。今のところ、OpenSMTPDを除くオープンソースの著名なMTAモジュール(Sendmail, Postfix, qmail, Exim, Courier)は実装済です。
次はGmail等の著名なWebメールの形式も解析出来るように、Maikugi::MTA::Gmailを実装予定ですが、最終的には商用MTAであるExchange Serverにも対応予定です。商用MTAモジュールはbounceHammerには含まれていませんが、Maikugiには含まれる事になります。
CPAN
完成したらCPANモジュールとして公開する予定ですので、cpanm Maikugiでインストール出来るようになる筈です、たぶん。
作っているもの・機能からすれば、Mail::*な名前空間にすべきかなぁとも思いましたが、BounceMail::ParserとかErrorMail::Analyzerとかかなり長くなる点、その名前空間で適切な短い名前が思いつかなかった点、新しく作られるモジュールの中には比較的自由な感じで名前空間を使っているものもある点、からTonkachiで始め、Maikugiとしました。
ある程度の形になってきたので、幼名を元服の時に改めるようなものです。
進捗
一週間で1個か2個のMTAモジュールを実装している段階なので、またYAPC::Asiaで採択された場合に間に合う工程で進めているので、遅くとも八月中には完成予定です。
githubで公開しているので動くには動きますが、まだ各種のMTA対応コードと著名なメールサービス対応コードが全部出来ていませんので、解析精度は低いですし、仕様が変わる可能性もあります。
ともかく、八月にはかなりの完成度に到達している予定ですので、YAPC::Asiaでの発表機会は得られませんでしたが、Kansai.pmかKyoto.pmで発表する機会が得られると良いなぁと思いつつエラーメール解析の世界標準を目指して開発は進行しています。
実装方新とか大幅な変更をすることにして、bouncehammer version 3は欠番、Version 4として名前をSisimai(シシマイ)に改め開発継続中です、八月十七日から。
返信削除https://github.com/azumakuniyuki/Sisimai