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
Emacs × LSP × Steep
Search
a_fujisaki
September 05, 2024
Technology
290
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Emacs × LSP × Steep
a_fujisaki
September 05, 2024
More Decks by a_fujisaki
See All by a_fujisaki
自作マクロと型生成
aki19035vc
0
57
rails newと同時に型を書く
aki19035vc
6
1.2k
“Rails × 型”での2年間を振り返る
aki19035vc
2
1.2k
rbs-inlineを使ってみた
aki19035vc
0
1k
MiniMagickの型を生成したい
aki19035vc
0
150
最近追加した型の紹介とその振り返り
aki19035vc
0
890
Other Decks in Technology
See All in Technology
QAエンジニア起点で進める、SmartHRにおける信頼性向上について
kaomi_wombat
1
120
Breaking the Seal: Static Deobfuscation of Compiled V8 JavaScript Bytecode Malware
hshrzd
0
660
【CEDEC2026】グラフィックスエンジニアのためのニューラルシェーディング入門
cygames
PRO
0
130
AIエージェントを前提としたプラットフォーム エンジニアリング:GKEで作るAgent-Ready Golden Path
legalontechnologies
PRO
2
220
システム思考で問題に対処する
yussak
0
210
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
230
AI時代の強いチームの作り方
yuukiyo
26
16k
モダンフロントエンド 開発研修
recruitengineers
PRO
4
560
【Google Cloud Next Tokyo'26】Gemini Enterprise と Oracle AI Database で実現する、業務データ活用を実現する AI エージェント実装
shisyu_gaku
0
230
AI駆動開発は個人技からチーム戦へ:組織でAIを使いこなすための実践設計
moongift
PRO
0
480
【CEDEC2026】専門性の高いデフォルメチームが挑んだ人材育成戦略 〜Cygames Academiaの企画から実施まで〜
cygames
PRO
0
530
AI ネイティブな組織に Gemini Enterprise Agent Platform がなぜ必要なのか
asei
1
190
Featured
See All Featured
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
1.1k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
660
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
119
120k
Ruling the World: When Life Gets Gamed
codingconduct
0
290
What's in a price? How to price your products and services
michaelherold
247
13k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
460
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
480
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.2k
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
590
Transcript
Emacs × LSP × Steep omotesando.rb#101 <2024-09-05> @aki19035vc
自己紹介 ❏ 藤崎 亮人 (a_fujisaki) ❏ @aki19035vc ❏ 所属: イタンジ株式会社
❏ バックエンドエンジニア ❏ 物件基盤の開発責任者 ❏ Rails × 型 の話が好き ❏ 学生の頃(2016年くらい)からEmacs使ってます
今日話すこと ❏ Emacs × LSP × Steep の話 ❏ EmacsでSteepを言語サーバとして使う時の困り事
❏ 言語サーバとしてのSteepの良いところ・物足りないところ ❏ 2日ほど業務で実際に使用した感想 ❏ 型が(ほぼ)100%入っており、steep checkに1分30秒くらいかかる ❏ ちょっとしたデモ $ rails stats +----------------------+--------+--------+---------+---------+-----+-------+ | Name | Lines | LOC | Classes | Methods | M/C | LOC/M | +----------------------+--------+--------+---------+---------+-----+-------+ | Controllers | 745 | 492 | 28 | 67 | 2 | 5 | | Jobs | 297 | 170 | 11 | 19 | 1 | 6 | | Models | 18131 | 12031 | 382 | 917 | 2 | 11 | | Libraries | 5634 | 4125 | 41 | 87 | 2 | 45 | | Libs | 397 | 225 | 6 | 22 | 3 | 8 | | Serializers | 4382 | 2998 | 164 | 204 | 1 | 12 | | Validators | 1671 | 846 | 163 | 55 | 0 | 13 | | Batches | 99 | 62 | 3 | 8 | 2 | 5 | | Usecases | 12167 | 8281 | 226 | 676 | 2 | 10 | +----------------------+--------+--------+---------+---------+-----+-------+ | Total | 43523 | 29230 | 1024 | 2055 | 2 | 12 | +----------------------+--------+--------+---------+---------+-----+-------+ Code LOC: 29230 Test LOC: 0 Code to Test Ratio: 1:0.0
用語の簡単な解説 ❏ Emacs ❏ 1970年代からあるテキストエディタ ❏ Emacs Lisp によって拡張できる ❏
Matzも使ってる ❏ LSPと言語サーバ ❏ Language Server Protocol => LSP ❏ コードの補完やシンタックスハイライト、エラーチェックなどの機能をエディタに提供する バックエンドプロセス ❏ Rubyだと Shopifyのruby-lsp や Solargraph が有名 ❏ Steep ❏ Rubyの型検査ツール ❏ 言語サーバとして使うこともできる
使用するバージョンとかライブラリとか ❏ Emacs: 29.2 ❏ LSPクライアントにはlsp-modeを使用 ❏ Eglotやlsp-bridgeについては未検証 ❏ Ruby:
3.3 ❏ Steep: 1.7.1
EmacsでSteepを言語サーバとして使うと、、、 ❏ 普通にやると上手くいかない ❏ lsp-mode付属のクライアントだと、ruby-lspやSolargraphといったメインとなる言語 サーバと同時に起動できない ❏ ruby-lspとSteepを頑張って同時起動できるようにしても、 ruby-lsp側の定義ジャンプ が使えなくなる
❏ Rubyファイルを開くとSteepが強制的に起動してしまう ❏ プロジェクトに Steepfileが存在しないとエラーになる ❏ ファイルを開くたびにエラーメッセージが表示されてしまう
EmacsでSteepを言語サーバとして使えるようにする ❏ 付属のクライアントを無効化し、自前でクライアントを作成・登録し直す ❏ 他の言語サーバと同時起動できるようにする ❏ 任意のディレクトリ以下のRubyファイルのみ有効化できるようにする ❏ メインの言語サーバはSolargraphを使う ❏
Steepと同時起動しても定義ジャンプが競合せず使える 何をしてるか気になる方は .emacs.d/init.elを見てください。 後日、lsp-modeに含まれるsteepのクライアントを拡張する PRは作る予定です。 https://github.com/aki19035vc/.emacs.d/blob/8bd3e263b4d21d3ac59a41f5bde9df165621a137/init.el#L458-L472
デモ: 定義ジャンプと型検査
言語サーバとしての Steep ❏ 良いところ ❏ 型があるオブジェクトに対する補完が完璧 ❏ 型定義へのジャンプができる ❏ 実装と型が一致しない部分が視覚的に分かりやすい
❏ 物足りないところ (※ あくまで自分の環境での話) ❏ rbsファイルが変更される度にsteep checkが走っていそうで、完了するまで激重 ❏ 型検査に時間がかかるようなアプリケーションを開発しているとつらい、、、 ❏ デフォルトだとプロセスが 9個立ち上げているようで、 CPUリソースが枯渇する ❏ rbsファイルを短時間で何度も変更すると型チェックが行われなくなってしまう ❏ 言語サーバを再起動するまで止まったまま
まとめ ❏ Emacs × LSP × Steep はちょっと頑張ればできる ❏ メソッド補完・リアルタイムな型検査による開発体験は素晴らしい
❏ 型検査に時間がかかるようなアプリケーションでは、Emacsが重たくなる → 総合的に見ると少しマイナス、、、 ❏ 今後の予定 ❏ 言語サーバ起動時にプロセス数を指定できそうなので、 Emascから起動する際に調整で きるようにして、プロセス数を抑える ❏ 型検査の実行頻度を減らせないか見てみる ❏ 敵情視察 (VS Code使ってみる)