Slide 1

Slide 1 text

開発環境の垣根 を超える Language Server Protocol 入門 @kashew_nuts

Slide 2

Slide 2 text

● @kashew_nuts (Kashun Yoshida) ● Software Developer ● BeProud Inc. ● Interest: Vim, PyCharm ● Like: Climbing, PokemonGO 2 お前誰よ?/whoami?

Slide 3

Slide 3 text

What's BeProud? ● https://www.beproud.jp ● 東京に本拠を置くPythonエンジニアリング会社 ○ connpass: エンジニアをつなぐIT勉強会支援プラットフォー ム ○ PyQ: Python学習用のオンラインプラットフォーム ● フルリモートワーキング (5days/week) 3

Slide 4

Slide 4 text

発表の動機/目的 1.

Slide 5

Slide 5 text

● どうしても好みのエディタを使いたい時があるが、そんなときでも定 番の開発ツールをいい感じに使いたい ● 新しいプログラミング言語を使うのに、言語専用のプラグインを探 すのは(楽しいけど)面倒 ● Language Serverを使うと開発ツールを統合して扱えるので知見 をまとめたい ● 特定のIDEだけに依存せず開発できるようにしておきたい 5 発表の動機/目的

Slide 6

Slide 6 text

● 最近LSP (Language Server Protocol) って聞くけど何?という人 ● 好みのエディタで快適な開発環境を実現したい人 ● 〇〇でいいじゃん、と思いつつも最近の開発環境事情を押さえて おきたい人 6 対象

Slide 7

Slide 7 text

● LSP (Language Server Protocol) とLanguage Serverとの違い がわかる ● LSPを活用できるようになる 7 今日の目標

Slide 8

Slide 8 text

● Language Server Protocol (LSP)とは何か ● PythonのLSP実装 ● LSPの導入方法 ● PythonのLanguage Serverと連携するツール ● LSPの未来と現状の課題 8 Agenda

Slide 9

Slide 9 text

LSP(Language Server Protocol)と は何か 2.

Slide 10

Slide 10 text

● LSP (Language Server Protocol) ○ 各プログラミング言語の情報をJSON-RPC (Remote Procedure Call) 経由で交換し、テキストエディタやIDEを拡張 するしくみ ○ 2015年にMicrosoftが公開した仕様 (現在バージョン3系) ● Language Server ○ 仕様をもとに言語開発ツールを統合したもの 10 LSP(Language Server Protocol)とは

Slide 11

Slide 11 text

● コード補完 ● 定義ジャンプ ● ドキュメントのホバー表示 ● フォーマット ● 参照先の検索 ● リネーム ● etc... 11 言語開発ツールが提供するもの

Slide 12

Slide 12 text

12 エディタと言語サーバー通信例

Slide 13

Slide 13 text

13 JSON-RPC例

Slide 14

Slide 14 text

LSP導入前と後 3.

Slide 15

Slide 15 text

15 LSP導入前 Python Golang Java TypeScript ... Vim Emacs VS Code Atom ... MxN: エディタx言語専用のプラグインが必要

Slide 16

Slide 16 text

16 LSP導入後 Python ✔ Golang ✔ Java ✔ TypeScript ✔ ... Vim ✔ Emacs ✔ VS Code ✔ Atom ✔ ... M+N: 言語サーバー+クライアントがあればOK

Slide 17

Slide 17 text

● ユーザ: 高品質な言語開発ツールの導入を簡潔化 ● 言語コミュニティ: 開発リソースをLanguage Serverに集中し、高 品質な言語開発ツールを作れる ● エディタ(プラグイン作成者): 言語ごとに行っていたコード補完や定 義参照などの実装をLanguage Server Clientで一括で行えるの で、リソースを集中できる 17 得られる恩恵

Slide 18

Slide 18 text

● Python, Golang, Bash, C/C++, C#, Java, Perl, Rubyなど有名な 約70言語のLanguage Serverがある ● YAML, HTML, CSS, Dockerfileといった設定ファイルやマーク アップ言語向けのLanguage Serverもある 18 対応する言語

Slide 19

Slide 19 text

PythonのLSP実装 4.

Slide 20

Slide 20 text

● palantir/python-language-server ○ pylsと略される ○ Python 100%, 広く使われるLanguage Server ● Microsoft/python-language-server ○ mpylsと表記されることも ○ C#:Python=7:3, 主にVS CodeのPython拡張で使用 20 PythonのLSP実装

Slide 21

Slide 21 text

LSP導入方法 5.

Slide 22

Slide 22 text

22 LSPを活用するために ❖ Language Server Client ➢ エディタプラグインとしてインストール ❖ Language Server ➢ 言語ごとにインストール

Slide 23

Slide 23 text

エディタごとにプラグインをインストール 23 Language Server Clientの準備 Vim vim-lsp, coc.nvim, LanguageClient-neovim, vim-lsc Emacs lsp-mode, eglot, emacs-lsp Atom atom-languageclient, acme-lsp Sublime Text lsp VS Code 各種言語プラグイン (Pythonなら vscode-python)

Slide 24

Slide 24 text

$ pip install python-language-server[all] 24 Language Serverの準備

Slide 25

Slide 25 text

25 コード補完

Slide 26

Slide 26 text

26 エラーチェック (Linter)

Slide 27

Slide 27 text

27 関数/メソッドシグネチャの照会

Slide 28

Slide 28 text

28 定義参照

Slide 29

Slide 29 text

29 ホバー (インフォチップ)

Slide 30

Slide 30 text

30 参照先検索

Slide 31

Slide 31 text

31 ドキュメントシンボル

Slide 32

Slide 32 text

32 コード整形 (Formatter)

Slide 33

Slide 33 text

● Jedi: コード補完、定義ジャンプ、ホバー表示、etc ● Rope: コード補完、リネーム ● Pyflakes, pycodestyle, McCabe: リンタ ● Autopep8, YAPF, Black, Isort: フォーマッタ ● mypy: 型チェッカー 33 pylsで扱う開発ツール群

Slide 34

Slide 34 text

LSPの未来と 現状の課題 6.

Slide 35

Slide 35 text

● 可能性は未知数 ● フルセットの機能を提供 or 個々に特化した機能を提供 ● LSPの仕様にまだないもの ○ Syntax highlighting ○ Run, Build, Test ○ Debug: Debug Adapter Protocol 35 LSPの未来

Slide 36

Slide 36 text

● Language Server Clientが群雄割拠でどれを使えばいいか迷う ○ Vimだと最近は coc.nvim が熱い ● Language Serverの実装によってWIPな機能がある ○ LSP使ってるから全て解決、ではない ● カラムの数え方が UTF-16 のコードポイント単位なので、マルチバ イト文字が入ると文字位置がずれる ○ なぜ UTF-8 で統一していない... Issue ○ UTF-16: 2バイトもしくは4バイト ○ UTF-8: 1〜6バイトの可変長 36 現状の課題

Slide 37

Slide 37 text

● Official page for Language Server Protocol ○ Microsoft公式 ○ プロトコルの詳細や機能の把握に ● Langserver.org ○ Sourcegraphが管理するコミュニティベースのまとめサイト ○ Language ServerやClientの対応状況の把握に 37 参考

Slide 38

Slide 38 text

Enjoy your Edit Life!! 38