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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
53
rails newと同時に型を書く
aki19035vc
6
1.2k
“Rails × 型”での2年間を振り返る
aki19035vc
2
1.2k
rbs-inlineを使ってみた
aki19035vc
0
1k
MiniMagickの型を生成したい
aki19035vc
0
150
最近追加した型の紹介とその振り返り
aki19035vc
0
880
Other Decks in Technology
See All in Technology
Playwright × AI Agent でE2Eテストはどう変わるか AI駆動テストの可能性と実用検証の結果
taiga7543
1
440
Making sense of Google’s agentic dev tools
glaforge
1
290
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
280
kaonavi Tech Night#1
kaonavi
0
110
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.7k
企業でAWS Organizationsを動かすための組織設計の考え方
nrinetcom
PRO
1
110
AI時代のPlaywright活用(システムテストを自動化する ー 実行エンジンにPla ywrightを選んだ理由)
ynisqa1988
1
580
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
【Claude Code】鹿野さんに聞く 私の推しの並行開発環境 大公開 / claude-code-parallel-2026-07-15
tonkotsuboy_com
12
8.7k
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
OpenTelemetryにおけるGoのゼロコード・コンパイル時計装について #fukuokago
quiver
0
120
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.4k
Large-scale JavaScript Application Architecture
addyosmani
515
110k
Design in an AI World
tapps
1
260
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
770
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Building the Perfect Custom Keyboard
takai
2
810
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.3k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
How to train your dragon (web standard)
notwaldorf
97
6.7k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.2k
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使ってみる)