Help us understand the problem. What is going on with this article?

init.elから設定を追い出してパッケージ化しよう

More than 5 years have passed since last update.

init.elの自慢ではないですが, 設定をパッケージから追い出すことについて述べていきたいと思います.

私は以前設定ファイルに自作のユーティリティ関数やら各種色(face)の設定を書いていましたが, 最近それらの多くはパッケージとして独立させています. 主に使っているのは以下の 2つです.

editutilは移動系, 削除系などの編集系のコマンドから構成されます. 同リポジトリの helm-editutilは helm関連の独自ユーティリティを集めたものです.

syohex-themeは名前がこっ恥ずかしいですが, 自分独自のテーマです. ほとんど reverse-themeと一緒ですが, その中で気に入らなかった部分の変更, 対応faceの追加を行っています.

パッケージ化することのメリット

  1. たくさん書いても気にならない
  2. テストしやすい
  3. インストールしやすい
  4. init.elの見通しがよくなる

init.elが長くなってくると短くしたいと感じることがあります. 特に他の人の行数を聞いて自分おがあまりに多いと「私のinit.el長すぎ!!」となってしまいます. しかしパッケージとして独立させておくとその気持ちが薄れて躊躇なく機能を追加することができます(私だけかもしれないですが...). 私は Emacsの魅力はプログラムを書いて簡単に拡張できることと考えています. なんでガンガン拡張するのが正しいあり方だと思っています. なんで気兼ねなくガンガン増やすためにも init.elからそのような設定を追い出し, パッケージするのがいいと考えます.

dotfilesリポジトリでもテストできないことはないですが, やはり独立していた方がテストをしやすいです.

後述するようにパッケージとして定義しておけば Caskファイルや el-getの設定に 1行足すだけでそれをインストールすることができます. また依存パッケージのインストール, 遅延ロードといった利点も活かすことができます.

init.elが設定中心になり見通しがよくなります(私はそう感じます).

パッケージとしてインストール

Caskや el-getを使えば, MELPAや Marmalade等に登録していなくても簡単にパッケージとしてインストールすることができます(hpackage.elだけでもできないことはありませんが, 若干面倒くさいです). 以下に Cask, el-getそれぞれについて示します.

Cask

(depends-on "editutil" :git "https://github.com/syohex/emacs-editutil.git")

el-get

(el-get-bundle syohex/emacs-editutil :name editutil)

自分独自のテーマを作る

MELPA等を見てもらえれば様々なテーマがあることがわかります. 私も 100種類以上作成しています(主に colorthemeの移植ですが). それだけ様々なテーマがあっても完全に自分に合うものというのはめったにありません. この faceが気にくわない, あの faceが気にくわないなどの不満が出てきます. そのような場合は設定ファイルで細々変更するのではなく, それを forkして自分好みの設定にカスタマイズしてみるのがいいと思います. もちろん 1から書いてみるというのもありかと思います.

おわりに

init.elから設定を追い出しパッケージ化することのメリット及び方法について示しました. 興味を持った方は一度試してみていただければと思います.

明日は @kai2nenobu さんです.

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away