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
4.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
開発環境の垣根を超える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
More Decks by Kashun Yoshida
See All by Kashun Yoshida
サプライチェーン攻撃対策「層を重ねて落ちない壁」を10日間で組み上げた話 #TechLeadConf2026
kashewnuts
1
430
AIとペアプロして処理時間を97%削減した話 #pyconshizu
kashewnuts
1
400
企業がDjangoを使う際に、特にセキュリティで気をつけること
kashewnuts
1
220
Django Ninja による API 開発効率化とリプレースの実践
kashewnuts
1
2.2k
Django NinjaによるAPI開発の効率化とリプレースの実践
kashewnuts
2
1.4k
Djangoアプリケーション 運用のリアル 〜問題発生から可視化、最適化への道〜 #pyconshizu
kashewnuts
2
1.8k
Djangoアプリケーション運用のリアル〜問題発生から可視化、最適化への道〜 / django-application-realities
kashewnuts
1
280
Django で始める PyCharm 入門
kashewnuts
1
93
Other Decks in Programming
See All in Programming
Lemonade + Foundry Toolkit でお手軽アプリ開発
seosoft
1
310
関係性から理解する"同一性"の型用語たち
pvcresin
2
640
SPMマルチモジュールで テストカバレッジを取得する技法
yosshi4486
0
140
These Five Tricks Can Make Your Apps Greener, Cheaper, & Nicer
hollycummins
0
270
AIエージェントと協働するCLI開発 — BunとOpenClawで学んだこと
yoshikouki
1
240
セキュリティの専門家じゃなくてもできる。「セキュリティ意識」をアップデートして サプライチェーン攻撃への耐性を高めよう。
tk3fftk
5
630
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
140
肥大化するレガシーコードに立ち向かうためのインターフェース分離と依存の逆転 / JJUG CCC 2026 Spring
hirokunimaeta
0
500
Copilot CLI の継戦能力を高める コンテキスト管理
nozomutu
1
1.2k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
500
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
150
Claspは野良GASの夢をみるか
takter00
0
170
Featured
See All Featured
Agile that works and the tools we love
rasmusluckow
331
21k
Evolving SEO for Evolving Search Engines
ryanjones
0
210
How to make the Groovebox
asonas
2
2.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
260
Optimizing for Happiness
mojombo
378
71k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
1
240
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
820
We Have a Design System, Now What?
morganepeng
55
8.2k
RailsConf 2023
tenderlove
30
1.5k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
190
New Earth Scene 8
popppiees
3
2.3k
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