emacsにelpyを導入する


# Table of Contents

1.  [はじめに](#orgc6070a6)
2.  [emacsの嫌いなところ](#org85eb6ff)
3.  [elpyとは](#org95f68a5)
4.  [elpyの導入](#org4db3c00)
    1.  [melpaリポジトリの追加](#orgd8a887d)
    2.  [パッケージを読み込む](#org4d233fb)
    3.  [パッケージをactivateする](#orga71c8b8)
    4.  [pipでインストールするパッケージを持ってくる](#orgfddbff4)
    5.  [確認する](#org68d0e96)
5.  [終わりに](#org1905831)



<a id="orgc6070a6"></a>

# はじめに

私は以前、elpyの導入に失敗しています。elpyはemacsをPythonの統合環境(IDE)化するパッケージです。

原因がよくわかりませんが、どう頑張っても動かなかったのです。3日くらい試行錯誤して断念しました。実力も無いのにemacsを使うのが悪いという話もありますが、指が慣れてしまっているので他の環境には移れないのです。

最近Pythonに再入門してから、普通のエディタとしてemacsを使ってPythonのコードを書いてきました。IDEの自動補完機能を使う同僚を横目で見て、いつもうらやましく思っていました。そこで、一念発起して、再度elpyの導入にチャレンジしました。

この記事は[Real Pythonの導入記事](https://realpython.com/emacs-the-best-python-editor/)を <del>丸写し</del> 参考にしています。

この記事は私のブログ https://achiwa912.github.io/ にも載せました。

<a id="org85eb6ff"></a>

# emacsの嫌いなところ

いきなりですが、emacsの嫌いなところです。emacs使いはいろいろな意味で上級者が多いです。初級者向けの導入記事はあまり無いか、あっても高度すぎて理解できないことがよくあります。

設定ファイルの.emacs.d/init.elを書き換える時はいつも緊張します。導入記事のアドバイスの通り書いているはずなのに、意味不明のエラーをたくさん吐いて、emacsが使い物にならなくなるのです。

emacs使いはきっと <del>マゾ</del> 辛いことが好きなんだと思います。

そんな訳で、emacsではいろいろな冒険ができないところが嫌いです。現状維持圧力を感じます。この10年でした冒険と言えば、org-modeを使い始めたことと、今回のelpy導入くらいです。


<a id="org95f68a5"></a>

# elpyとは

話を戻して、elpyについてです。elpyはEmacs Python Development Environmentのことで、次のようなPythonのIDE機能を提供します。

-   自動インデント(これは標準のpython-modeにもある)
-   シンタックスハイライト
-   自動補完
-   シンタックスチェック
-   Python REPL統合
-   仮想環境サポート

更に、elpyと連動して動くパッケージを入れると、あなたのemacsがそのへんのIDEに負けない立派なIDEに変身します。


<a id="org4db3c00"></a>

# elpyの導入


<a id="orgd8a887d"></a>

## melpaリポジトリの追加

早速ですが、例のinit.elを編集します。
elpyはmelpaとかいうemacsのパッケージリポジトリから持ってくるため、emacsがmelpaを見に行くようにしなくてはいけません。この部分の私の設定は次のようになっています。

    (require 'package)
    (setq package-archives
           '(("gnu" . "http://elpa.gnu.org/packages/")
    	("melpa" . "http://melpa.org/packages/")
    	("org" . "http://orgmode.org/elpa/")))
    (package-initialize)
    (when (not package-archive-contents)
      (package-refresh-contents))

大事なのはこの部分です。

    ("melpa" . "http://melpa.org/packages/")


<a id="org4d233fb"></a>

## パッケージを読み込む

次は、melpa他から必要なパッケージを持ってきます。
このやり方はReal Pythonからいただいてきたのですが、なかなか良いです。
まずmyPackagesとして必要なパッケージを定義しておいて、その後インストールされていなかったらインストールまで自動でやってくれます。

    (defvar myPackages
      '(better-defaults
        elpy
        flycheck          ;; On the fly syntax checking
        py-autopep8       ;; Run autopep8 on save
        blacken           ;; Black formatting on save
        material-theme
        )
      )
    (mapc #'(lambda (package)
    	  (unless (package-installed-p package)
    	    (package-install package)))
          myPackages)

elpyの他にいろいろなパッケージを読んでいますが、簡単に説明します。

-   better-defaults - emacsのデフォルト設定でいまいちなところを改善してくれるようです。今のところ、何が変わったのかわかりませんが、なんとなく入れておきます。
-   flycheck - オンザフライで文法チェックをしてくれます
-   py-autopep8 - セーブ時にpep8準拠チェックをして勝手に修正してくれます
-   blacken - セーブ時にBlackのフォーマットチェックをして勝手に修正してくれます
-   material-theme - このテーマはなかなかいい感じだったので、これまで使っていたものから乗り換えました


<a id="orga71c8b8"></a>

## パッケージをactivateする

そして、パッケージを有効化します。
こちらもReal Pythonから念仏のように写経しただけですが、うまく動いてくれたようです。なお、ここでは一気に全て入れていますが、エラーが出るとどこが悪いのかわからなくなるので、少しずつ動かしながら足していくのがよいと思います。

    (load-theme 'material t)
    
    ;; elpy
    (elpy-enable)
    (setq elpy-rpc-virtualenv-path 'current)
    
    ;; Flycheck
    (when (require 'flycheck nil t)
      (setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
      (add-hook 'elpy-mode-hook 'flycheck-mode))
    
    ;; autopep8
    (require 'py-autopep8)
    (add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)

1カ所注意があります。私は人気のvirtualenvではなくてvenvを使っているので、最初出ていたエラーメッセージに従って、次のようにしました。もし副作用があったらごめんなさい。

    (setq elpy-rpc-virtualenv-path 'current)

そしてこれをしたことで、~/.local/binを環境変数PATHに入れるよう言われたので、~/.zshrc(macOSです)を修正しました。

    export PATH="$HOME/.local/bin:$PYENV_ROOT/bin:$PATH"


<a id="orgfddbff4"></a>

## pipでインストールするパッケージを持ってくる

melpaから持ってこられないパッケージをpipを使って持ってきます。

    pip3 install jedi flake8 autopep8 yapf black

こんな感じだったと思います。実際は一つずつインストールしたので、historyを見て書きました。


<a id="org68d0e96"></a>


## 確認する

pythonの.pyファイルを開いてM-x elpy-configと入れ、リターンキーを押します。
![elpy-config.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678675/d6cad40c-ce17-8406-0aa9-bcc1915450d4.png)



今回はうまくいきました。持ってきたパッケージは一通り認識されていました。


<a id="org1905831"></a>

# 終わりに

上でも挙げた[Real Pythonの導入記事](https://realpython.com/emacs-the-best-python-editor/)はemacsの説明から始まるので、うっかり見落とすところでしたが、さんざん検索した中で一番役に立った記事でした。初級者向けのemacs記事は少ないのでありがたいです。Real Pythonさん、どうもありがとうございます。