Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
開発環境の垣根を超えるLanguage Server Protocol入門 / Introdu...
Search
Kashun Yoshida
May 18, 2019
Programming
1
3.3k
開発環境の垣根を超えるLanguage Server Protocol入門 / Introduction to Language Server Protocol beyond the boundaries of the development environment
PyCon Kyushu 2019
https://kyushu.pycon.jp/2019/
Kashun Yoshida
May 18, 2019
Tweet
Share
More Decks by Kashun Yoshida
See All by Kashun Yoshida
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
0
0
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
1
250
Djangoアプリケーション運用のリアル〜問題発生から可視化、最適化への道〜 / django-application-realities
kashewnuts
0
210
Django で始める PyCharm 入門
kashewnuts
0
38
Other Decks in Programming
See All in Programming
Software Architecture
hschwentner
6
2.1k
2024年のkintone API振り返りと2025年 / kintone API look back in 2024
tasshi
0
220
Grafana Cloudとソラカメ
devoc
0
170
責務と認知負荷を整える! 抽象レベルを意識した関心の分離
yahiru
0
170
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
10
3.6k
Unity Android XR入門
sakutama_11
0
160
Honoとフロントエンドの 型安全性について
yodaka
7
1.1k
Ruby on cygwin 2025-02
fd0
0
140
PHPカンファレンス名古屋2025 タスク分解の試行錯誤〜レビュー負荷を下げるために〜
soichi
1
180
DROBEの生成AI活用事例 with AWS
ippey
0
130
Writing documentation can be fun with plugin system
okuramasafumi
0
120
Amazon Q Developer Proで効率化するAPI開発入門
seike460
PRO
0
110
Featured
See All Featured
Raft: Consensus for Rubyists
vanstee
137
6.8k
It's Worth the Effort
3n
184
28k
Agile that works and the tools we love
rasmusluckow
328
21k
A better future with KSS
kneath
238
17k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
RailsConf 2023
tenderlove
29
1k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.5k
Speed Design
sergeychernyshev
27
790
Why Our Code Smells
bkeepers
PRO
336
57k
Transcript
開発環境の垣根 を超える Language Server Protocol 入門 @kashew_nuts
• @kashew_nuts (Kashun Yoshida) • Software Developer • BeProud Inc.
• Interest: Vim, PyCharm • Like: Climbing, PokemonGO 2 お前誰よ?/whoami?
What's BeProud? • https://www.beproud.jp • 東京に本拠を置くPythonエンジニアリング会社 ◦ connpass: エンジニアをつなぐIT勉強会支援プラットフォー ム
◦ PyQ: Python学習用のオンラインプラットフォーム • フルリモートワーキング (5days/week) 3
発表の動機/目的 1.
• どうしても好みのエディタを使いたい時があるが、そんなときでも定 番の開発ツールをいい感じに使いたい • 新しいプログラミング言語を使うのに、言語専用のプラグインを探 すのは(楽しいけど)面倒 • Language Serverを使うと開発ツールを統合して扱えるので知見 をまとめたい
• 特定のIDEだけに依存せず開発できるようにしておきたい 5 発表の動機/目的
• 最近LSP (Language Server Protocol) って聞くけど何?という人 • 好みのエディタで快適な開発環境を実現したい人 • 〇〇でいいじゃん、と思いつつも最近の開発環境事情を押さえて
おきたい人 6 対象
• LSP (Language Server Protocol) とLanguage Serverとの違い がわかる • LSPを活用できるようになる
7 今日の目標
• Language Server Protocol (LSP)とは何か • PythonのLSP実装 • LSPの導入方法 •
PythonのLanguage Serverと連携するツール • LSPの未来と現状の課題 8 Agenda
LSP(Language Server Protocol)と は何か 2.
• LSP (Language Server Protocol) ◦ 各プログラミング言語の情報をJSON-RPC (Remote Procedure Call)
経由で交換し、テキストエディタやIDEを拡張 するしくみ ◦ 2015年にMicrosoftが公開した仕様 (現在バージョン3系) • Language Server ◦ 仕様をもとに言語開発ツールを統合したもの 10 LSP(Language Server Protocol)とは
• コード補完 • 定義ジャンプ • ドキュメントのホバー表示 • フォーマット • 参照先の検索
• リネーム • etc... 11 言語開発ツールが提供するもの
12 エディタと言語サーバー通信例
13 JSON-RPC例
LSP導入前と後 3.
15 LSP導入前 Python Golang Java TypeScript ... Vim Emacs VS
Code Atom ... MxN: エディタx言語専用のプラグインが必要
16 LSP導入後 Python ✔ Golang ✔ Java ✔ TypeScript ✔
... Vim ✔ Emacs ✔ VS Code ✔ Atom ✔ ... M+N: 言語サーバー+クライアントがあればOK
• ユーザ: 高品質な言語開発ツールの導入を簡潔化 • 言語コミュニティ: 開発リソースをLanguage Serverに集中し、高 品質な言語開発ツールを作れる • エディタ(プラグイン作成者):
言語ごとに行っていたコード補完や定 義参照などの実装をLanguage Server Clientで一括で行えるの で、リソースを集中できる 17 得られる恩恵
• Python, Golang, Bash, C/C++, C#, Java, Perl, Rubyなど有名な 約70言語のLanguage
Serverがある • YAML, HTML, CSS, Dockerfileといった設定ファイルやマーク アップ言語向けのLanguage Serverもある 18 対応する言語
PythonのLSP実装 4.
• palantir/python-language-server ◦ pylsと略される ◦ Python 100%, 広く使われるLanguage Server •
Microsoft/python-language-server ◦ mpylsと表記されることも ◦ C#:Python=7:3, 主にVS CodeのPython拡張で使用 20 PythonのLSP実装
LSP導入方法 5.
22 LSPを活用するために ❖ Language Server Client ➢ エディタプラグインとしてインストール ❖ Language
Server ➢ 言語ごとにインストール
エディタごとにプラグインをインストール 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)
$ pip install python-language-server[all] 24 Language Serverの準備
25 コード補完
26 エラーチェック (Linter)
27 関数/メソッドシグネチャの照会
28 定義参照
29 ホバー (インフォチップ)
30 参照先検索
31 ドキュメントシンボル
32 コード整形 (Formatter)
• Jedi: コード補完、定義ジャンプ、ホバー表示、etc • Rope: コード補完、リネーム • Pyflakes, pycodestyle, McCabe:
リンタ • Autopep8, YAPF, Black, Isort: フォーマッタ • mypy: 型チェッカー 33 pylsで扱う開発ツール群
LSPの未来と 現状の課題 6.
• 可能性は未知数 • フルセットの機能を提供 or 個々に特化した機能を提供 • LSPの仕様にまだないもの ◦ Syntax
highlighting ◦ Run, Build, Test ◦ Debug: Debug Adapter Protocol 35 LSPの未来
• Language Server Clientが群雄割拠でどれを使えばいいか迷う ◦ Vimだと最近は coc.nvim が熱い • Language
Serverの実装によってWIPな機能がある ◦ LSP使ってるから全て解決、ではない • カラムの数え方が UTF-16 のコードポイント単位なので、マルチバ イト文字が入ると文字位置がずれる ◦ なぜ UTF-8 で統一していない... Issue ◦ UTF-16: 2バイトもしくは4バイト ◦ UTF-8: 1〜6バイトの可変長 36 現状の課題
• Official page for Language Server Protocol ◦ Microsoft公式 ◦
プロトコルの詳細や機能の把握に • Langserver.org ◦ Sourcegraphが管理するコミュニティベースのまとめサイト ◦ Language ServerやClientの対応状況の把握に 37 参考
Enjoy your Edit Life!! 38