今更Emacsで使っているパッケージを晒してみる

今年は実家のほうも暖かくて、いつもより初雪が二週間ほど遅かったらしいですが、そういう時に限って、実家に帰る辺りにドカ雪になって雪寄せする羽目になるので若干帰省時の天候が心配です。

そんな私事はさておいて、オープンストリーム アドベントカレンダーの3日目です。他の方々は概ねweb系の話ですが、私はあえて別の道をいこうかと思います。

## なんでEmacs? ##
Emacs使ってます、と言うと、たまーにこう聞かれます。大抵はﾌｰﾝで終わりますが・・・。

使い始めて8年くらいになりますが、当時ちょうどLinuxをメイン環境に据えて、さて何か開発環境を・・・としたとき、EclipseとかIntelliJとかまだ（多分）なかったので、そうなるとほぼEmacs/Vimのいずれかを選択する形にならざるを得ませんでした。

で、そこでLispってなんかカッコイイ、というなんだかなぁな理由からEmacsを選択し、今に至ります。

ただ、私は別段エディタ戦争とか宗教戦争はどうでもいい派です。便利なら使えばいいし、便利じゃなければ使わなければいい、という。

まぁ自分語りはもうどうでもいいので、さっさとパッケージを晒していきましょう。

## Emacsのバージョンとパッケージマネージャ ##

まずは現在利用しているEmacsのバージョンとパッケージマネージャです。

- Emacs 24.5 on Gentoo
- 前（まだBazzarだった時）は頻繁にHeadをビルドして日常使うということをしてましたが、改心してディストリから提供されてるものを使ってます。

パッケージマネージャは[https://github.com/cask/cask](Cask)を利用しています。パッケージマネージャとしては、

1. .emacs.dにぶちまけ
2. auto-install.el
3. el-get
4. package.el
5. Cask <- 今ここ

という遍歴を辿ってます。実際には auto-install.el より前に install-elisp.el も使ってました。

## Caskでインストールしているパッケージ一覧 ##
つい最近整理しましたが、かなり入ってます。

```elisp
;; The_silver_server での検索用＋バッファ横断検索用の拡張。
(depends-on "ag")
(depends-on "wgrep-ag")
(depends-on "swoop")
(depends-on "all-ext")

;; 色々なところで使ったり自分で使ったりするユーティリティ
(depends-on "f")
(depends-on "s")

;; 保存したら自動でバイトコンパイルを走らせる
(depends-on "auto-async-byte-compile")

;; ertでのテスト用
(depends-on "ert-expectations")

;; （個人的な）メイン言語OCamlの編集用。Merlin便利。
(depends-on "tuareg")
(depends-on "caml")
(depends-on "merlin")

;; Typescriptも個人的に書くので。typescript.el自体は .emacs.d/conf/site-lisp という
;; ディレクトリに入ってます
(depends-on "tss")

;; JavaScript用。最近はES2015ばっかり書いてます。
(depends-on "js2-mode")
(depends-on "js2-refactor")

;; 自動補完用。手放せません。
(depends-on "auto-complete")
(depends-on "fuzzy")
(depends-on "popup")
(depends-on "pos-tip")

;; 言わずと知れたhelm。入れてる拡張自体はかなり限定してます。
(depends-on "helm")
(depends-on "helm-ls-git")
(depends-on "helm-c-yasnippet")
(depends-on "helm-ag")

;; ずーっとつかってる拡張です。俺前何開いたっけ？っていうのが思い出せない時に便利です
(depends-on "recentf-ext")

;; undo/redo関連
(depends-on "undo-tree")
(depends-on "redo+")

;; Emacs lisp 編集用。この拡張はマジ便利。
(depends-on "eldoc-extension")

;; キーバインド関連のユーティリティ。ただし最近はあんまり使ってません
(depends-on "key-chord")
(depends-on "smartrep")

;; 一時バッファをポップアップ的な感じに表示してくれる。これはこれで便利。
(depends-on "popwin")

;; VimのPowerlineにあこがれて・・・
(depends-on "powerline")

;; 2画面ファイラです。仕事でも二画面ファイラばっか使っててこれはこれで手放せません。
(depends-on "sunrise-commander" :git "https://github.com/escherdragon/sunrise-commander.git")

;; Evil。基本的に常に有効にしてます。使ったことない人はマジで一度体験すると世界が変わります。
(depends-on "evil")

;; Evilプラグインで個人的に最重要。
(depends-on "evil-leader")
(depends-on "evil-numbers")
(depends-on "evil-easymotion")

;; cl-lib的な関数をハイライトしてくれます。昔は必要だったけど今はcl-*というプレフィックスがついたのであまり問題ないです
(depends-on "highlight")
(depends-on "highlight-cl")

;; Bookmark
(depends-on "bm")

;; 主にGit。
(depends-on "magit")
(depends-on "git-gutter")

;; snippet
(depends-on "yasnippet")

;; zsh的な補完を行うための。あまり目立たないけどこれはこれで便利
(depends-on "zlc")

;; 仕事ではScss、趣味ではStylus。
(depends-on "stylus-mode")
(depends-on "scss-mode")
(depends-on "sws-mode")

;; Golangもたまに書くので。
(depends-on "go-mode")
(depends-on "go-eldoc")

;; markdownもよく書くので。
(depends-on "markdown-mode")

;; メインマシンで使ってるWMがAwesomeWMなのでこれがないとコンフィグが・・・
(depends-on "lua-mode")

;; Scalaも仕事で書くので。IntelliJ使えとか言わない。
(depends-on "scala-mode2")
(depends-on "ensime")

;; haskellもたまに書くので。ただ、OCamlに出会ってからはほとんど書かなくなりました
(depends-on "haskell-mode")

;; OCamlのFFIを書いている時のスタイル用。
(depends-on "google-c-style")

;; rubyもたまに書くので。仕事でも。
(depends-on "ruby-mode")
(depends-on "ruby-end")

;; 最近機械学習関連で出番が増えてるPython。
(depends-on "python-mode")

;; HTML/Yaml編集。設定ファイル系統はYAMLが多いのでそれなりに使います
(depends-on "web-mode")
(depends-on "yaml-mode")

;; テーマはSolarizedです。
(depends-on "color-theme-solarized")

;; shellから実行ファイル類のPath環境変数を受け渡すための拡張。
(depends-on "exec-path-from-shell")

;; ESLintとか流すため。これがあると効率が違います。
(depends-on "flycheck")

;; org-modeで始めるポモドーロテクニック。
(depends-on "org-pomodoro")
```

これ以外にも、.emacs.d/confに入れてあるパッケージとしては以下。

- auto-save-buffers-enhanced.el
- sdic
 - 英辞郎を引くのに必須。これがないとマジ困る。
- typescript.el

手動で管理するのは結構めんどくさいので、基本的にはCask経由です。こいつらが残ってるのはインストールがめんどくさいとかそもそもMelpaになかったとかなので、もしそっちにあればこれも移そうかと思ってます。

大体で数えてますが、90近くのパッケージが入ってます。これに近い数を昔は.emacs.dにぶちまけてたかと思うと、よくやってたなーって思いますね。

## 肝心の設定は？ ##
パッケージとその紹介だけでそれなりになってしまったので、またいつかネタが無ければ・・・。

変わったことはやってませんが、部屋＝Linux、仕事場＝Windows、実家＝Mac という三環境で動いてくれないと色々困るので、そのへんはそれなりに色々やっています。

今回出したパッケージの中で、どれか一つでも興味があれば入れてみてください。全体的にオススメ出来るパッケージだと思います。

明日12/4は miyatayさんのAmazon SNSを使ってGCM経由でプッシュ通知 です。今日とは違うちゃんと濃い内容になってます。