IDE以外でフロントエンド開発したい
きっかけ
- UIがごちゃごちゃしてると気が散る
- ショートカットを駆使して爆速開発したい
- 見えている機能はGUI上で触ってしまうので、ショートカットを一向に覚えられない
- 必要に迫られない限り覚えようとしない、己の怠惰さが原因
- 見えている機能はGUI上で触ってしまうので、ショートカットを一向に覚えられない
- 道具をカスタマイズして自分の身体に馴染ませる過程を楽しみたい
- マウス使うのめんどうくさくなってきた
思想
- 1つのことだけをうまくやる(do one thing, and do it well)
- 忍び寄る機能主義 (creeping featurism)に抵抗したい
Vim
どういうエディタ
テキスト入力をするためにモードを切り替える必要があるやつ。
検索・置換などを行うコマンドラインモードや、テキストを選択するだけのビジュアルモードなど、さまざまなモードがあり、やりたいことによって切り替えながら使う。
コマンドが多くて覚えられない問題
vimtutorというチュートリアルが存在している。
Vimがインストールされているのであれば、ターミナル上で vimtutor
とコマンドを打つだけで立ち上がるそう。
vimtutorで速習Vim
カスタマイズ方法
Vim scriptという独自のスクリプト言語で行う。JavaScriptっぽい。while文やif文なども使用できる。
後続にVim9 scriptというスクリプト言語がある。Vim scriptよりも分かりやすい構文、処理速度向上を図ったもの。型チェックも存在する。
参考
Neovim
どういうエディタ
Vimから派生したエディタ。Vimにモダンな機能や拡張性を取り入れたもの。
カスタマイズ方法
Vim Scriptのほか、Luaというスクリプト言語が使える。
参考
-
Neovimでのフロントエンド開発環境 2022
- IDEライクなカスタマイズ
- VimからNeovimに移行して感じたこと
Emacs
どういうエディタ
the advanced, extensible, customizable, self-documenting editor(高度で、拡張可能で、カスタマイズ可能で、自己文書化可能なエディタ)[1]
??
カスタマイズ方法
Emacs Lispで行う。Lispの方言。Elispと書かれたりする。
参考
使わないと良さが分からない、スルメみたいなエディタなのでは…という印象。
EmacsよりもOrg-modeについてを熱く語る記事をよく目にした。EmacsってOrg-modeのフロントエンドなのかな、とさえ思えてくる。
LogSeq的なアウトライナーみたい。
そういえば
定義元へのジャンプや、入力補完ってとっても便利。どんなプログラミング言語でもプラグインさえ入れちゃえば、素敵な感じにやってくれる。
でも、それってどういう仕組で動いているの?
LSP (Language Server Protocol)
昔々、プログラム言語のサポートは各エディタ・IDEごとに実装していた。でも、それってツール開発者が各言語に詳しくなければいけないわけで…とても大変。
そこで、VSCodeの開発元・Microsoftが、Language Serverというプロトコルを定義した。
これにより、IDE・エディタ側は、LSPに対応するクライアントを開発するだけで良くなった。
プログラミング言語側もLanguage Serverを開発すれば、どのIDE・エディタでも便利な機能を提供できる。
あたらしい言語を触ってみよう、と思ったとき、まずVSCodeに言語の名前がついた拡張機能を入れることがある。あれは言語サーバーを導入していたのね。
たとえば、クライアントがエディタ上の変数名にカーソルをホバーしたときの流れ(ざっくり)
- エディタが「この変数の定義教えて」と言語サーバーにリクエストする
- 言語サーバー側がなんやかんや
- 言語サーバーが変数の定義を返す
暇があったら読む、思ったよりも沼深い世界だった。
とりあえずEmacsで環境整えてみよう
環境
Ubuntu 22.04 (WSL)
ターミナルエミュレータ
Alacritty
Emacsの環境を整える
インストール
Ubuntu 22.04 (WSL) に Emacs 29.01 をインストール
上記手順でインストール。ちょっと時間がかかる。
apt install
だと古いバージョンしか入れられないので、自分でビルドしてインストールするとよいらしい。
起動
emacs
で起動。別窓が開くのが嫌な場合は-nw
オプションをつければターミナル上で起動してくれる。
EmacsのLSPクライアント
- lsp-mode
- 多機能で、EmacsをIDEのように扱えるようになる
- eglot
- シンプル
- Emacs 29であれば標準パッケージとして存在
参考
- eglot
- Emacs で LSP を活用してみる
-
Eglot for JavaScript
- Denoとnode.jsで言語サーバーを使い分ける話があった
- lsp-mode
Emacsの気になるところ
- カーソルの移動がラグいときがある
- 50000字程度のテキストファイルを開くとちょっと遅い
- PCのスペックはそんなに悪くないと思うんだけれど…
Emacsのいいところ
- Org-mode、magitなど、独特なツール群が存在している
重いの嫌なのと、too muchすぎる気がしたのでEmacsはやめよう。
Neovimの環境を整える
インストール
上記手順でインストール。
起動
nvim
設定ファイル
$HOME/.config/nvim/lua
配下にinit.lua
を作成すれば読んでくれる。
一応動作確認
print('Hello World!')
と書いて保存。次にNeovimを開くとき、下の方に Hello World! と表示されているはず。
Neovimのプラグインマネージャ
Neovimの標準機能だとプラグインの追加、削除しかできない。
起動タイミングの設定、アップデートなど、そういったことをやるにはプラグインマネージャが必要とのこと。
最初からNeovimを触るのだったら、設定はLuaで書けるといいなあ。なのでlazy.nvimを入れていく。
lazy.nvimのインストール
の手順を実行。
参考
NeovimのLSPクライアント
- coc.nvim
- 最初から多機能
- builtin lsp
- nvim lsp とも
- Neovim 0.5から標準で入っている
- 最初はシンプル、あとで色々足すスタイル
coc.nvimを使うならVSCodeでいいじゃん、という気持ちになったので、builtin lspのほうを使うことにする。