Spacemacsのコーディング環境構築編:Python、REPL、自動補完、文法補完

まえがき

パスワードジェネレータを作成するにあたってコーディングを強力にサポートしてくれる機能が必要になった。コード入力やPythonの文法やPEPに準拠したコーディングするための各補完機能に加えてライブコーディングなどの他の機能についても使ってみたので解説してみる。

また、デバッグに必須のブレークポイントを実装するためのDAPレイヤーについては別の記事でどうぞ。

変更履歴

2020/05/16:新規追加

この記事の環境

バージョン: Python 3.8.1

パッケージ:

IDE: Spacemacs 0.300.0 develop-branch (emacs 26.3)

環境構築: pipenv, pyenv

OS: macOS 10.15.4

Spacemacsでの開発環境に必要な機能

まずSpacemacs本体についてだが、マスターブランチではなくデベロップブランチのものを使用することにした。理由としては「テスト環境構築編」をみてもらいたいが、簡単にいうとマスターブランチのものは機能がまだ限定されているので使いたい機能が使えなかったから、である。

ちなみにデベロップブランチは以下のコマンドでクローンできる。

git clone -b develop https://github.com/syl20bnr/spacemacs ~/.emacs.d

今回取り上げるのは次の機能である(正直よく分からないものもある):

  • pythonレイヤー: README.html
    • 2つのバックエンドを選べる:anaconda(default), lsp(2つの実装から選べる)
    • Auto-Compeletion: lspまたはauto-compeletionレイヤーによるもの
    • Code-Navigation: 具体的に何か分からない・・・笑
    • Documentation Lookup: 関数やメソッドの説明が見えるやつDocstring
    • Test Runners: 単体テストができるやつnose.elとpytestがある
    • Virtual Environments: 仮想環境をサポートpyenvを使用
    • semantic mode enable: おそらく「ソースコード解析機能」のこと
    • PEP8準拠のフォーマット:YAPF or black
    • PEP8チェック:PEP8の文法チェック。flakeor pylint
    • 使用されていないimport文を教えてくれる:autoflake
    • ソースコードブロック間を%で行き来できる:使ってない。evil-matchit
    • import文をソートしてくれる:isort
    • 抜け落ちているimport文を修正してくれる:importmagic
    • Pythonパッケージを管理できる:使ってない。pippel
    • DAPモードを使用した対話型デバッガ:dap

環境構築1:pipで必要なパッケージをインストールする

インストールするもの:

Pythonレイヤーのデフォルトモードである「anaconda-mode」はエラーを吐くことがあるので以下の条件でインストールする。

pip install --upgrade "jedi>=0.13.0" "json-rpc>=1.8.1" "service_factory>=0.1.5"

そのほかをインストール

pip install flake8 autoflake importmagic isort epc yapf futures ipython python-language-server

仮想環境はお好みで。Pythonレイヤーとしてサポートしているのは:

  • pyenv
  • pyvenv
  • pipenv

環境構築2:.spacemacsにデバッグ用のレイヤーを追加

デバッグについて詳しいことはこちらの記事でどうぞ。

  • lsp
  • dap

その他のイケてるレイヤー

  • org
  • major-modes
  • git
  • github

.spacemacs全文はこちらに載せておきます。

Spacemacsで困ったときは

Spacemacsをいじっていると色々な場面で困ることがる。そんな時に問題を解決するべく、あなたとSpacemacsの関係性をセグメント分してみた。

これを見てあなたに何が足りないのか、何の問題なのか探し出して欲しい。

  1. SpacemacsはほとんどEmacs。
    • Emacs-Lispでできている。
    • Emacsとあなたの間に入ってEmacsを使いやすくしてくれるもの
    • 他のソフトウェア、モジュールを呼び出して使える
  2. SpacemacsはコミュニティドリブンのOSS。
    • masterブランチはできることが少ないけど安定している
    • developブランチはできることが多いけど開発途中
    • 英語だけどコミュニティが結構助けてくれる
  3. 3つの層があるので、この何処かに問題がある
    1. あなた .spacemacsか.emacs.d/init.elに問題あり
      1. Spacemacs本体 開発者がバグを入れちゃう、コミットが漏れる
      2. Spacemacsのレイヤー
        1. Emacs本体
        2. 各パッケージ
        3. その他のソフトウェア、モジュール
  4. 言語モジュール。Pythonだとisortとか。

こんな感じで全体を俯瞰してみるとより早く解決できるかもしれない。言語系のレイヤーなどは、例えばPythonなら今ままで上げてきたように様々なパッケージが入っていることを前提としているし、入っていなくてもある程度動くといったものもある。

何かを新しくして問題が発生することもあるので、ある程度環境が完成したら安易にアップデートするのはやめたほうがいいだろう。

ライブコーディングって何?

Spacemacsでライブコーディングができる。そんな記事をみつけて、コマンドを打ってみたけれど何が何だかわからない。

意味を調べてみると、「その場でコーディングする行為の総称」だとか。その場とこの場の違いがわからないが、とにかく「コーディングをやって見せるもの」らしい。

ライブコーディングで演奏できるとかなんとからしいけど、とにかく私の結論としては「私にはいらない機能」ということ。

むすび

Spacemacsでの開発環境を構築するには、言語系のレイヤーとテスト、デバッグ用のレイヤーを入れればほぼ完成する。その他、evernoteやfirefoxなど他のアプリとの連携や、GitやGithubも使えるだろうし、好みのものを入れればいい。

ただ入れすぎると動作や起動に時間がかかるので自分なりの最小構成を見つけるといいと思う。

コメントする