2021年1月10日日曜日

lsp-mode と python-language-server と pipx

長く Emacs でプログラムを書いている。 最近は(?)時代遅れ扱いされがちな Emacs ではあるが、特に乗り換えたいというほどのものがなく、何となく使い続けている。 他の環境で使えるようになった良さげな機能があって食指が動いても、それ Emacs でもできるよ、と言われると、じゃあいいかとなる。

今回、導入してみたいのは python-language-server である。 LSP (language server protocol) 自体は、VS Code のためにか何か Microsoft が作ったものだそうだが、 プロトコルの規定なので結局それを Emacs だったり Vim だったりから使えるようにする人が現れて、事実上の標準になっている。 昔何か別のコード補完のパッケージを Emacs に入れたときは重すぎて使い物にならず、 いままで dabbrev 以外の補完は使ってこなかったのだが、これはどうだろうか。

導入に際して引っかかるのは、python-language-server のインストール先である。 だいたい、Python のプロジェクトは、少し前まで Python 2 と 3 を使うものが混在していたために必要に迫られて、 pipenv で環境を切り分けて依存から何から別々に持つ、という方針で扱ってきたので、 その方針でいくとプロジェクトごとかもしれない、と最初は考えた。 しかし、Emacs でこれを使う lsp-mode の設定はパスを一つ指定する必要があるようだ。 どうしよう、と、ここで1ヶ月は放置していたと思う。

そんなある日 pipx というものを知った。 Python で書いたコマンドを隔離した環境にインストールするという。 要するに1つのコマンド用に venv を切ってインストールしてパスを通す、みたいなことをコマンド一発でやってくれるというわけだ。 これだわ。

ということで、インストール方法は

  1. pipx をインストールする。たとえば mac なら brew install pipx でいける。
  2. pipx install python-language-server
  3. Emacs に lsp-mode を入れる。普通に package-list-packages から選択。
  4. .emacs (などの Emacs の設定ファイル)に、次のように書く
    ;;; lsp-mode (language server protocol)
    (use-package lsp-mode
      :hook
      (python-mode . lsp)
      :init
      (setq lsp-keymap-prefix "C-c l")
      :config
      (setq lsp-pyls-server-command (expand-file-name "~/.local/bin/pyls"))
      :commands lsp)
    

となる。 ちなみに ~/.local/bin が pipx がインストールしたコマンドのリンクをおいてくれるパス。

また今回も、Emacs で使えるなら移行しなくていいか、となるパターンのようだ。

2021年1月3日日曜日

2020年の読書

昨年の読書を振り返る。 2020年は通勤という読書時間がなくなったので、前年よりさらに読書冊数が減少した。 読書メーターの記録に依ればマンガも入れて100冊ぐらい。 以下、印象に残ったものをピックアップして紹介する。

新しく内田洋子という作家を知った。 立て続けに3冊読んだのが記憶にも残っている。 「イタリアからイタリアへ」「モンテレッジォ 小さな村の旅する本屋の物語」「もうひとつのモンテレッジォの物語」 題材はどれもイタリア。

科学的な本では、チャールズ・コケル「生命進化の物理法則」とスコット・アーロンソン「デモクリトスと量子計算」が印象に残った。 前者は、物理法則に従って最適な生命形態を探すと今ある生物の作りに落ち着くだろう、という主張が意外だった。 後者は、タイトルの訳が不思議な感じ("since Democritus" がなぜ"デモクリトスと"になるのやら)だが、計算量理論と物理学が量子力学を接点として繋がってくるわくわくする世界。

マンガは基本的に以前から読んでいる続き物を追っているだけだが、2020年は数年溜まっていた「OL進化論」がまとめて出たので5冊も読んだ。

※本のリンクはamazonアフィリエイトです。