すぐにできる!いいことがある!Emacsからメールを送ろう - よーしパパ、バグレポ送っちゃうゾ

設定の鬼だとか、設定が複雑すぎるとかマニアックすぎるとか言われている俺だが、今日はぐーんとレベルを落として、誰でもできるEmacs記事を書くことにする。Emacsを普及させるためにはユーザ目線になることが大切だからだ。

さて、今回はEmacsからメールを送る方法を教えよう。「そんなのやってるよ」、「当たり前だろ」という声が聞こえてそうだが、ブラウザバックはちょっと待ってくれ。意外に知られてないメリットがあるんだから。

Emacsには、裸の状態(emacs -Q)でもメールを送ることができる。ふつうにメールを送信するだけならば、Mew等のメールEmacs Lispをインストールする必要はない。標準状態でその機能があるからだ。

では、その設定を示そう。メールアドレス、名前、SMTPサーバ、メール送信関数をそれぞれ設定している。上3行は各自設定してね。

(setq user-mail-address "your@mail.address")
(setq user-full-name "Your Full Name")
(setq smtpmail-smtp-server "your.smtp.server.jp")
(setq mail-user-agent 'message-user-agent)
(setq message-send-mail-function 'message-smtpmail-send-it)

そして、C-x mを押すとメール送信画面になる。
http://www.rubyist.net/~rubikitch/archive/sendmail-1.png

あとは、宛先、件名、本文を入力して、C-c C-cで送信っと! メール送信をとりやめるにはC-c C-kだ。試しに自分宛にメールを送るとすぐにメールが届くはずだ。

Mewを使ってメールを送信する

ちなみにMewを使う場合はこう設定する。後の操作方法は全く同じだ。

(setq user-mail-address "your@mail.address")
(setq user-full-name "Your Full Name")
(setq mew-smtp-server "your.smtp.server.jp")
(require 'mew)
(setq mail-user-agent 'mew-user-agent)
(define-mail-user-agent
  'mew-user-agent
  'mew-user-agent-compose
  'mew-draft-send-message
  'mew-draft-kill
  'mew-send-hook)

バグレポを送る

Emacsからメールを送る設定を適切にしていると、いいことがある。なかったらタイトル詐欺だもんね(笑)

実はEmacs Lispの作者にバグレポを送る機能がEmacs標準で用意されているのだ。この機能を知っているEmacs使いはおそらく100人に一人もいないかもしれない。というのは、この機能が使われているEmacs Lispがほとんどないからだ。
reporter-submit-bug-report 関数がそれである。引数に、作者のメールアドレス、Emacs Lispプログラム名、ダンプする変数名のリスト、(フック2つは無視してよい)、書き出しを取る。引数を適切に設定してreporter-submit-bug-report関数を呼び出すコマンドを作成してしまえば、スムーズに作者とコンタクトが取れるようになる。

以下の式を評価してくれ。自分自身にバグレポを送るテストだ。

  (reporter-submit-bug-report user-mail-address "bug-report-test"
                              '(auto-mode-alist load-path) nil nil
                              "動かねえぞ!"))

すると、こんな感じに書き出しと変数のダンプが載った状態でメールが用意される。あとは、症状を具体的に記述してC-c C-cを押せばバグレポ完了だ。

http://www.rubyist.net/~rubikitch/archive/reporter-submit-bug-report.png

この機能は使わないとお互いに損である。通常はバグを報告する場合、以下のようなやりとりになる。

ユーザ「〜が動かないんだけど」
作者  「変数〜を見せてくれ」
ユーザ「はい。〜です」
作者  「ああ、これですか。バグなので直しました。」

しかし、reporter-submit-bug-reportを使えば、真ん中2つ*1のメールのやり取りがなくなる。作者が予め設定している変数リストによって、ユーザは自動的に必要十分な情報を提供することになる。その結果、コミュニケーションがスムーズに進む。

ユーザは手作業で変数の値を報告する手間を省ける。そして、作者もテストケースを手作業で作る必要がなくなる。setqなのでC-x C-eを評価してしまえばすぐに不具合を再現できる。

その結果、お互いの時間を節約できるのだ!忙しい現代社会において、お互いの時間は尊重しあわないといけない。

ユーザのあなたがやることは、メール送信の設定を適切に行うだけだ!どう、いいことあったでしょ?

俺もこの機能について詳しく知らなかったので、さっそく導入してみることにする。Emacs Lisp開発者は、是非とも導入してみよう。

*1:id:mongrelPさん指摘どうも。