Emacs実践入門 振り返り、もしくは技術書を書きたい人へ。

この記事は、日本語入力を支える技術 振り返り、もしくは技術書を書きたい人へ - 射撃しつつ前転のオマージュです。まだ、そちらを読んでいない方は、大変面白いですのでぜひ一読をオススメします。

本を書いたきっかけ

これについては、Emacsで変わる人生もある。で書いたので割愛。
まぁ、友情パワー(アラシヤマ@パプワくん)です。

書くためにやって良かったこと。

Emacsを真っさらの状態から使いはじめる。

自分にとって本当に必要なEmacsの設定が改めて分かる。書く内容が大体つかめた。

執筆用メジャーモードを使った。

id:kiwanami さんが作った inao-mode.el を少しだけ編集したものを使った。僕が実際に使っていたのはこちら
まぁ、Emacsの本ですから、専用のメジャーモードを使うのは当然ですね :p)
最終的にはHTMLに出力する機能をつけたかったんだけど、そこまで作り込む暇がなかった。そんな人のために、Yappo さんのツールがあるのは一部では有名な話。 yappo/p5-Acme-Text-Inao · GitHub

字数確認に wc-mode.el を使った。


Emacsで文字数を確認する方法は色々とありますが、今回はwc-mode.elというモードラインに字数を表示してくれるマイナーモードを使いました。

(setq mode-line-position
      (append
       mode-line-position
       '((wc-mode
          (6 (:eval (format " %d文字%d行"
                            (- (point-max) 1)
                            ;; (count-words-region (point-min) (point-max))
                            (line-number-at-pos (point-max)))))
          nil))))

表示フォーマットは上記にように変更している。
これらを踏まえて、以下のような設定で利用していました。

;; inao-mode
(require 'inao-mode)
(add-hook 'inao-mode-hook
  (lambda ()
    (font-lock-add-keywords nil
     '(("^[ \ta-zA-Z;$\\(].\\{70\\}\\(.*\\)$" 1 font-lock-warning-face t)))))

(define-key inao-mode-map (kbd "C-c i i") 'inao-insert-image)
(define-key inao-mode-map (kbd "C-c i t") 'inao-insert-table)
(define-key inao-mode-map (kbd "C-c i l") 'inao-insert-list)

;; word count mode
(when (require 'wc-mode nil t)
  (add-hook 'simple-hatena-mode-hook 'wc-mode)
  (add-hook 'inao-mode-hook 'wc-mode))

ちなみに、追加している font-lock は日本語以外で始まる行(コード部分を意図しています)で70文字を超えたら、色を変えるという設定で、書籍ではコードが70文字を越すと改行しなければならないため、できる限り70文字に抑えなければなりません。
しかし、いちいち数えるのは面倒なので、色を変えて気付くようにしました。これは地味に便利です。本当は関数化(というかマイナーモード化)して、トグルで表示切り替えしたかったのですが、そこまでする時間がなくて、これで乗り切りました。

Git 管理したけど、入校データが sjis なのでちょっと微妙。

実際に Git で管理し始めたのは、最初に脱稿して、校正に入る段階からです。そこまでは Dropbox だけで管理していました。まぁ、僕の場合は大幅な変更とか特になかったので。
しかし、入校データが Shift_JIS だったので色々と面倒でした。Git ではなく、Bazaar にしていたら良かったかもと思ったのは内緒です(解決するのか知らないけど)。文字化け対策として、ページャーには lv を使用し、.git/config に以下の設定を記述。

[core]
	pager = lv -c -Is

greplgrep を利用し、Emacs に以下の設定を書いておくと幸せになれます。

;; grep
(when (executable-find "lgrep")
  (setq grep-command "lgrep -Au8 -Ia -n "))
単著で書いた。

これは僕の場合だと、共著する友達がいなかったからというのが正しい見方だと思うのだけれど、単著の方が満足できる/できない、その全てが自分の手に委ねられているので、僕は好みです。

失敗したこと。

検証時間の見積りが甘かった。

普段使ってるから大丈夫だと思ったら、実際、ぜんぜんそうではなかった。知らないことばかりだった。本書く人が、全部知ってると思ったら大間違いダゾ!!
雑誌の時は、検証するほど深く掘り下げていなかったのですが、インデントとか文字コードとかその他もろもろ、実際にどういった処理がされているのかを調べてみると、理解しているつもりがぜんぜんそんなことなくて、想定以上に時間を取られてしまった。

もっとレビューをしてもらう体制を整えるべきだった。

後半に入ると、マスタカさんが社内にいたので、レビューをしてもらったのですが、もっと早い段階で小まめに見てもらえば良かったです。

最後の方はかなり煮詰まった。

後半になると、内容も難しくなってきて、検証レベルがどんどん上がっていきました。
同じページ数でも、後半の方が倍くらい時間がかかってしまったので、人によりけりですが、ページ数だけで時間を見積るのは危険かもしれません。

失敗と言うほどではないが何とかしたほうが良かったこと。

検証用マシンを用意できたら良かった。

Emacsという内容上、実際に執筆・開発している環境をむやみに変更できない、というかしたくない(変更すると作業効率が落ちる)。なので、検証用・スクリーンショット用のマシンを用意しておけば良かった(ただし金がなかった)。

全体的に見てどうだったか。

締め切りを破ったせいなので自業自得なのだが、後半はかなり辛かった。それ以外の点は初めての書籍執筆としてはまぁまぁうまく行ったのではないか、と思いたい。
まったく同じ感想です。

売れ行き。

漫画家の友達がいるので、どの程度刷られるのか予想していたけど、僕の想定よりも初版は多かったです。しかしその分、世の中そんなにEmacs知ってる人いるのかよと思わずにはいられませんでした。
若い人に興味を持ってもらうのが一番だと思うので、地道に活動を続けていきたいと思います。
ジュンク堂池袋店のこのコンピュータ書がすごい!にランクインするのが僕の夢のひとつだったのですが、Amazon Books 上半期ランキングに入ってなかったので、どうやら難しそうですね。

嬉しかったこと。

偽はじめにで書きましたが、好きなシリーズから自分の本が入るのは格別の幸せ感があります。
例えば、白泉社花とゆめコミックスが好きで、漫画家を志した者が、花とゆめから出版できたら感激でしょう。僕も花とゆめから出したいです。
あと、何度も言いますけど、まつもとさんの本書に寄せて。鳥山明が好きな漫画家がコミックに鳥山明のイラストを寄せてもらったら、そりゃあ飛び跳ねるほど嬉しいでしょう。だって人間だもの。

他の人に本を書くことをすすめるか?。

文章を書くのが好きであれば、絶対オススメです。文章力が飛躍的にアップします。お陰で、メール書くのがとても早くなった気がします。
文章を書くのがあまり好きでなければ、本はオススメできないです。たぶん地獄です。
ひとつアドバイスがあるとしたら、毎日少しでもいいから書き進めることを習慣化するようにした方がいいです。溜まると、夏休みの宿題レベルではない絶望を味わうことになりますので。

その他。

自分は人に何かを伝えるのが本当に好きで、面白い漫画やアニメ、新しい製品、技術などなど、色々と周りの人に語っていました。
しかし、自分自身に核になるものはなく、漫画も小説も結局未だに書けていないけれど、自分では想像もしていなかった技術書という分野で初めて本を書き上げることができて、大きな自信になりました。
改めて、為せば成る 為さねば成らぬ何事もを実感したわけですが、これを契機にまた何か新しいことに挑戦していければと思っています。