Help us understand the problem. What is going on with this article?

エディタ遍歴とLSP

僕が初めてソースコードというものを触ったのは小学生か中学生の時でした。それから現在までプライベートでコードを書いたり、仕事をしたりという中で使用しているエディタは変化してきました。今まではあまり「これだ」というものに巡り会えていなかったのですが、Language Server Protocol (以下LSP) の出現により、最近ようやく手に馴染むエディタが定まりつつあります。そこでエディタ遍歴を振り返りつつLSPについても少し触れたいと思います。

初めてのコード

僕が初めてコードを書いたのは、初心者向けのパソコン雑誌の後ろの方に書かれていた"ホームページ"作成入門の記事でした。そこにはWindowsのメモ帳を開き、何やら英語っぽいものを記述して .htm という名前をつけて保存するということが書かれていました。ちなみにその時のソースコートはこんな感じだったと思います。今では見ることのないタグが並んでいますが、人によっては懐かしいのではないでしょうか。

<html>
  <head>
    <title>ようこそ!</title>
  </head>
  <body bgcolor="pink">
    <center>
      <font size="7">ようこそ!</font>
      <br>
      <br>
      <marquee>
        ここは<font color="darkgreen"><b>〇〇〇〇</b></font>のホームページです!
      </marquee>
      <br>
      <br>
      <i>メニュー</i>
      <table border="5" style="text-align: center;">
        <tr>
          <td><a href="#">日記</a></td>
          <td rowspan="4"><img src="" alt="トップ画像" width="150px" height="150px"></td>
        </tr>
        <tr>
          <td><a href="#">イラスト</a></td>
        </tr>
        <tr>
          <td><s>掲示板</s> (工事中)</td>
        </tr>
        <tr>
          <td><a href="#">リンク集</a></td>
        </tr>
      </table>
      <br>
      <br>
      <hr>
      <small>Copyright © 20xx ○○○○ All Rights Reserved.</small>
    </center>
  </body>
</html>

初めて書いたソースコードであったと同時に、僕が初めてテキストエディタに触れたときでした。ただのメモ帳に書かれた文字の羅列がホームページになったという体験が、プログラミングの仕事に就こうと思った最初のきっかけです。実際に動くコードはこちら。懐かしいですね。

空白期間

中学生くらいでソースコードを書くことを覚えましたが、高校に入ると部活が忙しく、大学でも文系に進学したのでほとんどソースコードを触ることがありませんでした。少しだけJavaScriptを書くのにDreamweaverは触りましたが、なにか書くときは主にメモ帳で書いていたのでシンタックスハイライトのあるエディタは逆に使いにくかった記憶があります。

IDE入門

新卒で入った会社の新人研修でJavaを学ぶときに初めてIDEであるEclipseを触りました。そこでIDEによる開発を知り、しばらくはIDEを使っていました。この頃はIDEが便利というよりはIDEが必須だと考えていました。

IDEでの開発

ゲーム会社でPythonを書くようになりますが、IDEに慣れていたためEclipseにPyDevプラグインを入れて開発していました。新しいMacを使い始めたのをきっかけに、ここ最近はPyCharmを使っていました。PythonのようなLLでもIDEを使っている理由は、最初の設定が楽だからです。とくにPyCharmのように言語に特化したIDEでは、自動補完やメソッド定義へのジャンプなど、特に設定せずに使えます。

テキストエディタの併用

開発はIDEですが、ちょっとしたテキストの編集はテキストエディタを使用していました。Windowsではメモ帳、MacではCotEditorを使っていました。それが一番慣れているキーバインドを使用できたからです。

Vim入門

そのうち少しだけVimも触るようになりました。はじめは git commit のときはデフォルトでVimが起動するので仕方なく使っていた程度でした。前職のCTOの下で働いているときに、彼がVimを便利そうに使っていて、その憧れもありMarkdownやYamlなどちょっとしたファイルの編集や、ちょっとPythonの修正するときにVimを使うようになりました。

途中、Emacsも経由しましたが常用エディタにするのは挫折しました。でもMacを使う上ではEmacsのキーバインドは練習してよかったと思ってます。

Vimでの開発

IDEでの開発は便利なのですが、ちょっとコードを書きたいだけなのにわざわざプロジェクトを作らなければいけなかったり、違う言語を書くときにそのためのIDEをインストールしたりというのが面倒になってきました。

そこでVimでの開発を行っていこうと考えました。段々と手に馴染むようにはなってきたのですが、Vimでの開発もIDEと同様に言語に合わせてプラグインを探してvimrcに変更を加えて…というのはどうしても必要でした。特にPythonを書くときには pythonbrew virtualenv pyenv venv などで仮想環境を作ることが多いし、Python2とPython3の違いによって動かないプラグインがあったりと、一つ一つ解決するのも面倒でした。Windowsも使い始めて、Windows Subsystem for Linux を使っていると特に設定が面倒になりました。その面倒さから、メインで開発する環境はIDEと行ったり来たりしていました。

迷走

Vimのキーバインドに慣れて、手に馴染んでいたのですが、Pythonを書くときには色々設定が面倒だったので、PyCharmにVimキーバインドのプラグインを入れて開発することが多かったと思います。そこから手に馴染み、設定の楽なエディタを探してAtomや Visual Studio Code なども触りましたが、結局 PyCharm + Vimプラグイン が無難な選択肢でした。

Language Server Protocol との出会い

VimConf2018に参加したときに Language Server Protocol (以下LSP) という言葉を知りました。

Language Server Protocol とは

あまり詳しくはないので詳細についてはその他の記事に譲ります。

多くのIDEでは、定義ジャンプ・自動補完・エラー分析…などさまざまな機能を提供していると思います。これまでそれらの機能を実現するためには、各言語に合わせてプラグインを作成するなど、IDE側が対応する必要がありました。

LSPは簡単に言うと、言語側がサーバーを起動し、共通のプロトコルを提供することで定義ジャンプや自動補完などの機能を実現する仕組みです(…と理解しています)。LSPのない世界で完全に言語対応しようとすると、エディタやIDEの数✕言語の数の開発を行わなければなりません。しかし、エディタやIDE側がLSPにさえ対応すれば、LSPに対応している言語をサポートできるようになります。

VimとLSPを使った開発

LSPを知った頃はあまり情報もなく、「こんなものもあるのか」くらいの感想でしたが、VimConf2019に参加した際に去年以上にLSPが盛り上がっていたので重い腰を上げてVimに導入することにしました。

導入したプラグイン

vimrcの設定

Python用の設定やマッピングは「Pythonの補完環境をjedi-vimからvim-lspに移行した話」を参考にしました。

Language Server 導入

LSPを利用するためにその言語用の Language Server をインストールします。現在対応しているのはこちら。
https://microsoft.github.io/language-server-protocol/implementors/servers/

Pythonの場合はpipでインストールできます

pip install python-language-server

これで pyls というサーバーが実行できるようになるので、vim-lspを使ってPythonによる開発をする準備ができました。なお、 venvpyenv-virtualenv 、グローバルなPython環境で試してみましたが今の所それぞれの環境で問題なく動いています。

動き

lsp.gif

VimとLSPを使った開発の感想

補完や定義先の参照が早い

vim-lspや、その周辺のプラグインが優秀なので、補完や定義先の参照がとにかく早いです。言語特化のIDEと変わりない速さで動作します。IDEを立ち上げるような大きなプロジェクトじゃなくても、とくに設定もせずにこの速さでこれらの機能が使えることに感動すら覚えました。

vimrcがスッキリ

今までpyenv対応やPython2用・3用の設定、あるいは他の言語の設定などでvimrcが膨らんでいましたが、それらはvim-lspの設定を入れ、各言語用のサーバーを走らせれば良いのでvimrcは少しスッキリしました。

エンドゲームか?

今までのエディタをまとめてみると↓の用になりました。
この他にもPL/SQLやPowerbuilderというパッケージの言語? Excel VBA などの開発も行っていましたがもはや何を使っていたか覚えていません。

Name Plugin / (Remarks) Language OS Type
1 メモ帳 HTML, CSS, JavaScript Windows Text Editor
2 Dreamweaver HTML, CSS, JavaScript Windows Text Editor
3 Eclipse Java Windows IDE
4 NetBeans Java Windows IDE
5 RDE Ruby Windows IDE
6 Flash Builder ? ActionScript Windows IDE ?
7 Processing ? Processing Windows IDE ?
8 Arduino ? Arduino ? Windows IDE ?
9 Eclipse ADT Plugin Java (Android) Windows IDE
10 Eclipse PHP Windows IDE
11 Eclipse PyDev Python Mac OS X IDE
12 Aptana Studio PyDev Python Mac OS X IDE
13 Eclipse Lua Development Tools Lua Mac OS X IDE
14 Emacs (挫折) いろいろ Mac OS X Text Editor
15 LiteIDE Go Mac OS X IDE
16 RStudio R Mac OS X IDE
17 Gogland (Goland ではなく) Go Mac OS X IDE
18 Vim jedi-vim, vim-go など いろいろ Mac OS X Text Editor
19 Android Studio Kotlin (Android) Mac OS X IDE
20 PyCharm Python Mac OS X, Ubuntu, Windows IDE
21 Atom (迷走) Python Mac OS X, Ubuntu, Windows Text Editor
22 Visual Studio Code (迷走) Python Mac OS X, Ubuntu, Windows Text Editor
23 Vim vim-lsp いろいろ Mac OS X, Ubuntu, Windows Text Editor

いろいろ使ってきた中でそれぞれにいいところや不満があったのですが、今の所VimとLSPの組み合わせではストレスになるような不満はありません。もう少し手に馴染むような設定はできると思いますが、もしかしたらエディタ探しは一旦エンドゲームと言えるのかもしれません。

余談

いろいろ書きましたが、僕はIDE推奨派で、特にプログラミング初学者にはIDEが良いと考えています。理由は設定が楽だし、マウスも使えるのでプログラミング以外のことに時間を使うことが無いためです。すごい人の中には簡素なエディタを使っている人もいますしIDEを使っている人もいます。高価なキーボードじゃないと開発できない人もいるしMacの薄いキーボードで十分な人もいます。道具にこだわるかこだわらないかはスキルと相関がないと思っています。自分の使いやすい道具を使えばいいので、VimでなければとかEmacsでなければ…というのは気にしなくてもいいと思います。もちろんかっこいいからVimを使うというのは良いと思います。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away