Macユーザにこそ使って欲しいEmacs。せめてキーバインドだけでも覚えていって！生産性上がるから！ほんとですって！

# はじめに🤡
みなさん、普段エディタって何使ってます？メモ取ったり、プログラミングしたり、ドキュメント書いたり、ほぼ、常にエディタって使いますよね。でも一方で、一つのエディタでなんでもやる、っていう時代でもないと思うんですよね。そもそも、Web上でやる作業も増えてきているし、2023年にエディタの話すること自体、どうなの？っていう意見もあるとはおもいます。

#### が、しかし！

それでもEmacsをちょっとだけでも使ってみて欲しいと思っています。まずは、なんでやー？っていう話をしていきます笑😂

## macOSでは基本、Emacsキーバインドが使える🔥
歴史的な経緯により、macOSはデフォルトでEmacsキーバインドが使えます。

### macOSで使えるEmacsキーバインド

普段使っているのは以下くらいです！これをカラダに叩き込むと生産性が上がります笑。

| キー | 挙動 | 
| -- | ----- |
| `Ctrl` + `f` | カーソルを1文字右に進める |
| `Ctrl` + `b` | カーソルを1文字左に進める |
| `Ctrl` + `n` | カーソルを1行下に進める |
| `Ctrl` + `p` | カーソルを1行上に進める |
| `Ctrl` + `a` | カーソルをその行の先頭に進める |
| `Ctrl` + `e` | カーソルをその行の末尾に進める |
| `Ctrl` + `o` | カーソル直後に行を追加 |
| `Ctrl` + `k` | カーソル以降、行末までをカット |
| `Ctrl` + `y` | `Ctrl` + `k`でカットした内容をペースト(ヤンク） |

それ以外にもキーバインドたくさんありますが、普段使わないようなものも多いので全部書く、みたいなことはしません。他のキーバインドが気になる方はEmacsを使ってみましょう笑。

### 歴史的な経緯ってなんや？

今のmacOSは、もともとSteve JobsがAppleから追放された時に作った[NeXT](https://ja.wikipedia.org/wiki/NeXT)って会社で作っていたワークステーションに搭載されていた[NeXTSTEP](https://ja.wikipedia.org/wiki/NEXTSTEP)というOSを源流としています。詳しくはリンク先を読んでもらえればと思うのですが、このNeXTSTEPというOSにEmacsキーバインドが組み込まれていたんですね。なので、今でもmacOS上では上記キーバインドが使えるというわけです。ちなみに、Appleでは[Objective-C](https://ja.wikipedia.org/wiki/Objective-C)を公式開発言語の一つとして位置付けていますが、これも元々はNeXTSTEPをObjective-Cで開発していたから、という経緯です。面白いですね。

### 使えるアプリ・使えないアプリ

[Cocoa](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/CocoaFundamentals/WhatIsCocoa/WhatIsCocoa.html)というアプリケーション構築用のフレームワークを利用しているアプリであればデフォルトでEmacsキーバインドが使えます。また、Webブラウザでもキーバインドは動作するため、ほぼ全てのアプリで使える、と思ってよさそうです。以下のような仕組みを使って構築されているアプリではキーバインドは動きません。

* 一部のMicrosoft製品🧟‍♂️
Word、PowerPoint、ExcelなどのOffice365製品は全滅です😭。MS製品を愛用している方はこのキーバインドに慣れてしまうと、すごくストレスになるのでこのキーバインドの導入は止めておいた方が良いかもしれません笑。私は事実、これらの製品を利用するのがめちゃくちゃストレスになってます。

* [Adobe AIR](https://ja.wikipedia.org/wiki/Adobe_AIR)で作られているアプリ
今はWeb版のみ提供になったので違うのですが、昔、日本郵政で提供されている[はがきデザインキット](https://design-kit.jp/)などが該当します。

* [JavaFX](https://openjfx.io/)などで作られているアプリ
業務系アプリとかで使われることがあるのでしょうか？私は過去に出会ったことがないです。

## キーバインドドリブンEmacs導入を試みる😂

このキーバインドは非常に強力なのですが、普段使いしないとなかなか体に馴染みません。なので、何かの作業をEmacs上でやる、みたいな感じで導入してみるのがオススメです！Emacsの世界では難解な用語もたくさん出てくるので、以下では出来るだけわかりやすい言葉を使ってお伝えしていきます。

### イメージを持つ
Emacsはカスタマイズ性が非常に高いので、そこが逆に苦痛になる可能性はあります。デフォルト状態だと使いづらい部分があるのも事実ですし、カスタマイズしていくと愛着が湧いてくるので各自ご自身に合わせて自由に触ってみるのが良いと思います😇

ちなみに、初期状態だと起動直後はこんな感じのUIです。
![Screenshot 2023-12-23 at 17.03.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/0869a0ed-7286-0020-4996-8c8bbcf81fcd.png)

私の現在の環境だと起動直後はこんな感じのUIです。
![Screenshot 2023-12-23 at 17.05.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/c3536cc8-ff8c-d5ad-f7a9-9a6351e2c3d5.png)

だいぶ違いますよね。私はシンプルな方が好きなのでこんな感じですが、どこまでもカスタマイズできます笑。UIのカスタマイズ方法などは今回は主目的ではないので割愛しますが、ニーズがあればそれに特化した記事を書くかもしれません。

### 導入
[2020年代のEmacs入門](https://emacs-jp.github.io/tips/emacs-in-2020)というページがあります！Emacsは残念ながらユーザ数が少ないので😭まとまった初心者向けの日本語ドキュメント、みたいなものがそこまでいっぱいはない雰囲気で、そこが参入障壁になっているような気がしているのですが、このドキュメントはすごくよくまとまってますし、最新のトレンドにも踏み込んだコンテンツになっていますのでコレをまずは読んで導入してみてください。Emacsは本当に沼なので、なんでもできてしまいます。少しづつ出来ることを見つける、みたいなスタンスでいるとゆとりを持てます。

#### インストール
Macであれば以下で一発です。上記の記事にもありますが、できればGUI版を使った方が良いです。

```shell
brew install emacs --cask
```

#### 導入したら試してみること

##### Tutorial
まずはチュートリアルをやりましょう。起動直後の画面からチュートリアルに進むことが出来ます。私も遠い昔、やりました。コレを何回かやると手が馴染んできます。

##### 電卓として使う
電卓として使うのは本当に便利です。OS付属の電卓を使うのも、Excelなどを使うのもいいとは思うのですが、電卓アプリだとポチポチボタン推して計算すると思うので、再現性がないですよね。REPLでやるのもいいと思いますが、コレも再現性ないし。ExcelとかSpread使ってやるのも、その都度ファイル増えるし、私は電卓は基本、Emacsです。

例えば、100円のリンゴ5個と、200円の桃を8個買った時の消費税込みの金額を出す、みたいな計算であれば以下のように書けます。

```lisp
(* (+
    (* 100 5)
    (* 200 8))
   1.1)
```

Emacsでは `*scratch*` というバッファがあり、ここではEmacs Lispをすぐに実行することができます。Lispコードを書いて、 `Ctrl` + `j` を押すとそのコードが実行(評価)されます。こんな感じ。
![Screenshot 2023-12-23 at 18.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/3a2f1eda-a5f9-3982-3d2d-79b11dc3de5a.png)

地味ですが、REPLや電卓アプリと違ってその場でどんどん微調整しながらエディタ上で計算ができるので、かなり便利ですよ。なお、ここで登場した意味不明なコードについては後ほど少しだけ説明します。

##### パッケージマネージャの導入

EmacsではVSCodeなどと同じように色々な機能をプラグイン的にどんどん追加していき、機能を強化していきます。なので、まずはパッケージマネージャを導入する必要があります。そこさえクリアできれば、あとは使いたいパッケージを見つけて導入・カスタマイズする、というのが基本的な導入後の流れになります。パッケージマネージャの導入に関しては前述の[2020年代のEmacs入門](https://emacs-jp.github.io/tips/emacs-in-2020)にしっかりとした記載がありますので、そちらをご確認なさってください。

### 難しいことはちょっとづつやっていく

何度も言いますが、Emacsを使うと本当にいろんなことがEmacs上で完結できます。いきなりいろんなことを目指すとぐちゃぐちゃになってしまうので、少しづつ取り組んでいくことをお勧めします。例えば、私の使い方の一部をお伝えします。ここはイメージをお伝えすることが目的のため、導入の手順等は割愛します。

#### ChatGPTを統合
ChatGPTに関しては私は現時点ではEmacsをフロントエンドに使っています。色々な統合の方法がありますが、私は[Emacs OpenAI](https://github.com/emacs-openai)というものを使っています。

![Screenshot 2023-12-23 at 18.28.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/5318176d-3c5f-2a68-d91c-ad0286499e28.png)

#### GitHub Copilotを統合
GitHub Copilotももちろん、Emacs上で利用できます。

![Screenshot 2023-12-23 at 18.46.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/31a5d12c-2d1b-866e-b5a5-0c6b9b0be8ad.png)

#### コードを評価しながらメモをとる！
どんな言語にも対応できる[Jupyter Notebook](https://docs.jupyter.org/en/latest/start/index.html)といえばいいのでしょうか。

![Screenshot 2023-12-23 at 18.58.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/271670/ba04f4a9-15b7-aec5-57dc-e2c7de38aa49.png)

そのほかにもまだまだお伝えしたい機能はあるのですが、無限に出てくるのでこの辺りでやめておきます笑。

### [Emacs Lisp](https://emacsdocs.org/docs/elisp/Emacs-Lisp)
[Emacs Lisp](https://emacsdocs.org/docs/elisp/Emacs-Lisp)が出てきましたね。これは勉強が必要なのですが電卓に使う程度であれば簡単に覚えられます。ポイントは以下の2つだけです。

* [前置記法(ポーランド記法)](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%BC%E3%83%A9%E3%83%B3%E3%83%89%E8%A8%98%E6%B3%95)
* [S式](https://ja.wikipedia.org/wiki/S%E5%BC%8F)

例えば、`1+2` をelispで表現すると以下のようになります。

```lisp
(+ 1 2)
```

いくつもネストできますので、先ほどの問題は以下のように書ける、ということです。
> 100円のリンゴ5個と、200円の桃を8個買った時の消費税込みの金額を出す

```lisp
(* (+
    (* 100 5)
    (* 200 8))
   1.1)
```
ちなみに、Lispでは改行に関するルールはありませんので、1行で以下のように書いても良いです。

```lisp
(* (+ (* 100 5) (* 200 8)) 1.1)
```

Emacsは設定ファイルもほぼ全てelispで書くことになりますので、使っていくうちにある程度はわかるようになるはずです。

## 終わりに✨

私も必要に応じてエディタは使い分けています。VSCodeも使うし、(ほんの少しだけ)Vimも使います。XCodeを使うこともありますし、JetBrains製品も使います。ですので、どこか特定のエディタで全てを担う！みたいな気負いはありません笑。エディタを変えると気分が変わったりもするので、週末に試してみる、くらいの感覚で始めてみるのはいかがでしょう。

楽しいEmacs沼の世界でお待ちしております笑。

## おまけ👀

言うの忘れてました。Emacsを使うと左手の小指を酷使することになります。もし、US配列のキーボードなどをお使いの場合、`caps lock` と `control` を入れ替えると小指の負担が減って幸せになります。お試しください！