Emacsで快適な研究環境を整えよう2~パッケージ導入&日本語入力編~

- Emacsで快適な研究環境を整えようシリーズ
    1. [導入編](https://qiita.com/Maizu/items/44b0498597937480ca0a)
    2. **パッケージ&日本語入力編** (今ここ)
    3. [YaTeX + RefTeX 編 *new!*](https://qiita.com/Maizu/items/7d8f420817dfeccf4477)

## はじめに
こんにちは。今回は第2弾になります。

今回はEmacsのパッケージマネージャの設定と、日本語入力環境の設定をしていきます。
パッケージマネージャはいろいろなものがありますが今回はEmacs24以降には標準で付いているpackage.elを扱います。package.elを使うことによってEmacs上でパッケージのインストールや削除などを行うことができます。

日本語入力に関しては特に設定しなくても日本語入力自体はできるのですが少々クセがあり使いづらいので、emacs-mozcを導入し扱い易くしていきます。

今回から前回よりも本格的に設定ファイルを書いていきます。
書く内容については簡単にですが適宜解説をいれています。
もし間違っているところがありましたらご指摘いただけると幸いです。

前回同様に検証にはUbuntu18.04, Emacs26.1を使用しています。

## package.el
package.elはEmacs24以降に標準搭載されているパッケージマネージャです。
Emacs上でパッケージのインストール/削除/アップデートなどのパッケージ管理が行えます。
### package.elの設定
何も設定しなくても使用できますが初期設定ではダウンロード先のリポジトリが少ないため、設定ファイルでリポジトリの追加を行います。
Emacsの設定ファイル(標準なら"~/.emacs.d/init.el"もしくは"~/.emacs")を開いて以下のように記述してください。

```emacs-lisp:init.el
;;; package.el
(require 'package)
;; MELPAを追加
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
;; MELPA-stableを追加
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/"))
;; Marmaladeを追加
(add-to-list 'package-archives  '("marmalade" . "https://marmalade-repo.org/packages/"))
;; Orgを追加
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
;; 初期化
(package-initialize)
```

設定ファイルは基本的にはEmacs Lispという言語を使って記述します。
Emacs Lispについての詳しい話は掘り下げると長くなってしまうのでまた別の機会にしたいと思います。
基本的には(関数名 引数1 引数2 ...)という形式で書けるのでとりあえずそれだけわかってれば、関数や変数を調べることでなんとなくやってることがわかるはずです。

セミコロンから始まる行はコメントです。設定のブロックの前に何に関する設定なのか書いておくと見やすくなります。
requireはパッケージを読み込む関数です。ここではpackage.elを読み込んでいます。
add-to-listはリストに要素を追加する関数です。第一引数に追加先のリスト、第二引数に追加したい要素を指定します。
package-archivesというリストに("リポジトリ名" . "URL")で構成されるコンスセルを追加することでリポジトリの追加ができます。コンスセルという新しい用語がでてきましたがとりあえず2つの値をもつデータ構造だと思っていただければ大丈夫だと思います。
package-initializeは初期化を行う関数です。
この処理をしないとpackage.elを使ってインストールしたパッケージ類を使用することができないので注意してください。

### Package.elの起動
設定ファイルがかけたらEmacsを起動して、`M-x package-list-packages`とコマンドを打ってください。
下図のような画面が表示されたと思います。

<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/4adea1e0-36db-a328-ec5a-67595af5008e.png" width=70%>

この画面からパッケージのインストールや削除を行うことができます。
主な操作方法は以下のとおりです。

**操作方法**

| キー | 動作                                 |
|:---------|:---------------------------|
| p/n      | カーソルを上/下に移動        |
| i        | カーソル行にインストールマークをつける |
| d        | カーソル行にデリートマークをつける |
| u        | カーソル行のマークを消す   |
| x        | 付けられたマークの処理を実行する |
| U        | Upgrade                                |
| r        | パッケージ一覧の更新         |
| ?        | カーソル行のパッケージの詳細を表示 |
| h        | ヘルプを表示                     |
                                             
インストール/削除を行う場合はカーソルをインストール/削除したいパッケージに合わせて`i`/`d`を押してマークを付け、`x`を押してインストールを実行します。
複数マークを付けてから実行すれば一気に処理することができます。

## emacs-mozc
次は日本語入力を整えましょう。
Emacs標準の日本語入力環境は"nn"と打つと"んn"となってしまったりと少々クセが強く、OSで設定されている日本語入力を使用すると入力を確定するまで文字が表示されず気持ちが悪かったので、私はemacs-mozcを使用しています。
MozcはGoogleが公開しているIMEで、emacs-mozcはMozcをEmacsで使用するためのパッケージです。

### emacs-mozcの導入
それでは早速導入していきましょう。
まずはemacs-mozc-binをインストールします。インストールにはapt-getを使用します。端末を開いて次のコマンドを実行します。

```bash
$ sudo apt-get install emacs-mozc-bin
```

無事インストールが終わったらEmacsを起動し`M-x package-list-packages`から
パッケージ管理画面を開きます。
パッケージ一覧からmozcを探し出し、インストールを行います。
このとき`C-s`(文字列の検索)を使うと早く見つけることができます。
インストールが終わったらそのまま設定ファイルを開いて以下の記述を加えます。
この際package.elによって自動で記述されている部分があると思うのでそこはいじらないようにしましょう。

```emacs-lisp:init.el
;;; mozc
(require 'mozc)                                 ; mozcの読み込み
(set-language-environment "Japanese")           ; 言語環境を"japanese"に
(setq default-input-method "japanese-mozc")     ; IMEをjapanes-mozcに
(prefer-coding-system 'utf-8)                   ; デフォルトの文字コードをUTF-8に
```

setqは第一引数の変数に第二引数の値をセットする関数でここではdefault-input-methodという変数に"japanese-mozc"という値をセットしています。
setqは他の設定でもよく見かけるので覚えておきましょう。


記述できたら設定ファイルを保存しEmacsを再起動することでemacs-mozcを使うことできるようになります。
日本語入力に切り替えるには`C-¥`を押します。
Emacsの画面左下にMozcと表示されれば切り替え成功です。また`C-¥`を入力すると英字モードに戻すことができます。

### キーバインドの変更
IMEの切り替えキーを変更したい場合は

```emacs-lisp:init.el
(global-set-key (kbd "C-j") 'toggle-input-method)
```

この"C-j"の部分を使用したいキーバインドに適宜変更して設定ファイルに加えてください。
global-set-keyはキーにコマンドを割り当てる関数でtoggle-input-methodというコマンドを"C-j"というキーに割り当てています。
記述ができたら記述した行の末尾にカーソルを合わせて`C-x C-e`を押して実行するか、再起動して指定したキーで切り替えられるか試してみましょう。切り替えられれば成功です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/2aefe76b-5360-423f-155d-b5d7d9c71b8e.gif" width=70%>
初期フォントは独特であり、違和感があります。
しかも句読点の位置が非常に高く気持ち悪いです。

### フォントの変更
書体が気に入らないだけならまだ我慢できるのですが句読点がほぼ真ん中の高さにあるのは気持ち悪くて耐えられません。この問題はフォントを変更することで回避することができます。
まずはインストールされているフォントを確認しましょう。

```bash
$ fc-list
```
端末で上記のコマンドを実行することでインストールされているフォントのリストが見れます。
数が多いと目的のものを探すの大変なのでgrepを使いましょう。

```bash
$ fc-list | grep Gothic
```
特にフォントにこだわりはないので参考にしたページが使っていたTakaoPGothicを使ってみます。もし上のコマンドで表示されたリストになければ、リストにあるものを使うか[こちら](https://wiki.ubuntulinux.jp/UbuntuTips/Desktop/InstallFont)を参考にフォントをインストールしてください。
フォントを選んだらEmacsの設定ファイルに次の記述を加えてください。

```emacs-lisp:init.el
(set-fontset-font t 'japanese-jisx0208 "TakaoPGothic")
```
"TakaoPGothic"の部分は使用するフォントに合わせて適宜変更してください。
Emacsを再起動し日本語のフォントが変わっていれば成功です。
<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/c45e54dc-ca81-6ec7-7f48-bfd1bf945cb5.gif" width=70%>
フォントの違和感は解消され、句読点も正しい位置に表示されるようになりました。

## おわりに
今回はpackage.elとemacs-mozcを扱いました。
package.elを使えばだいたいのパッケージが簡単にインストールが可能なのでぜひいろんなパッケージを試してみて自分に合うパッケージでEmacsをカスタマイズしていってください。
今回設定ファイルを編集するにあたり、当初の予定ではEmacs Lispの基礎について簡単に触れてから設定ファイルの解説をしようと思っていたのですがどこまで触れるのがいいのか良いバランスがわからず長くなってしまいそうだったので削りました。
Emacs Lispを主題とした記事はまたいつか書きたいと思います。


## 参考文献
- [package.el - Emacs JP](http://emacs-jp.github.io/packages/package-management/package-el.html)
- [Emacs:mozcで日本語入力](http://compress.hatenadiary.com/entry/2014/02/24/001932)
- [EmacsでMozcを使うための設定](http://ubiqlog.com/archives/8538)
- [ubuntuで動かすemacsの日本語フォントを調整する方法](http://asukiaaa.blogspot.com/2017/11/ubuntuemacs.html)