Visual Studio Code へのエディタ移行

四半世紀の間、使い続けてきた emacs 系エディタから VS Code に移行しようかと思う。

  • 第1の理由 ... Visual Studio の代替
  • 第2の理由 ... コーディング支援 (のシーン限定での利用可能性)
    • JavaScript などたまにしか書かない動的型付け言語は、短いコードであれど、慣れた emacs 系エディタで書くよりも、コード補完やシンタックスハイライトがある VS Code の方が便利で速い、という事実に改めて気づいた。
    • よく書く静的型付け言語 (C#) では、基本 API が頭に入っており、思考やタイピングがコード補完よりも圧倒的に速いため、コーディングの妨げにしかならない支援 (... か?) をする IDE を嫌っていた。が、文脈 (言語) 別にカスタマイズすればよいわけで、シンプル・エディタ至上原理主義を卒業してよいのかもと思うようになった。
  • 第3の理由 ... emacs を代替するエディタ機能
    • emacs 系エディタでよく使う機能が何か棚卸してみたところ、後述する1機能を除けば、以下の通りだった。これらはすべて VS Code でもできる。むしろ 2 - 5 については emacs ではショートカットキーに続けてコマンドをタイプしなければならないところを、VS Code ではショートカットキーだけにできそう。
      • 1. undo (取消) / redo (やり直し)
      • 2. search-forward (逐次検索) / query-replace (逐次置換)
      • 3. copy-rectangle (矩形選択コピー) / yank-rectangle (矩形貼り付け)
      • 4. replace-regexp (正規表現置換)
      • 5. change-buffer-encoding (エンコーディング変換)
      • 6. シェル呼び出し / コンパイル
  • 第4の理由 ... 前方互換性と入手容易性
    • write once, run anywhere というか accustomed once, utilize anywhere の予感がする。VS Code は次世代のデファクトスタンダードになってきたし、OS を選ばず、さらに Windows から WSL に対しても使える。Visual Studio やお気に入りの emacs 系エディタをよその環境にインストールしてくれとリクエストしても却下されがちだが、VS Code はそのハードルが低くなりそう。この点と第3の理由から、emacs キーバインド拡張機能を入れずに、素の VS Code キーアサインに慣れておくのもよいかもと思うまでになった。
    • VS Code の出現でシェアが下がった emacs の利用継続にリスクを感じたことに端を発し、メンテナンスが止まってかなり立つ xyzzy*1 を常用している現状をどうにかする必要があると考えた。
  • 第5の理由 ... 利用サービス/アプリのオフライン・オンライン間統合
    • 第4の理由の延長線上にある欲求として、利用するサービス / アプリがオフライン・オンライン間で分離することを許容せず、統合したい、という思いがある。同じ作業をするときは、ローカルでもクラウドでも、同じサービスを同じ設定で使いたい。VS Code は近いうちに Web サービスにもなりそうであるため、期待している。その背景にあるものは次のとおり。
    • 出張や旅行で海外に出てもコンピュータ環境が脆弱にならないように、長いこと軽量かつ高性能なモバイル PC を使い続けてきた*2 が、最近はスマホタブレットにモバイル PC に ... と高性能 CPU と大容量ストレージをいくつも保持するのが経済的にバカらしいと思うようになってきた*3。そこでここ2年くらいは VPN + RDP を活用する前提で、ハイエンド・デスクトップ PC + ミドルクラス軽量 2 in 1 端末 + ローエンド・スマホ、に収斂させる方向で環境整備しようとしている。2 in 1 端末は軽量・安価・必要以上にパワフルでないことが重要で、テキスト編集、VPN + RDP、スマホ用途 (Web ブラウズ、SNS、メッセ、動画視聴) ができればよい。という状況で、出先でちょっとテキスト編集するときにはオフラインローカルで、本格的に使いたいときには自宅サーバにつなぐかクラウドサービスで、でもスペックの違うそれぞれ環境に固有のサービスではなく、同じものを同じ設定で使うという Chrome Book 的な活用コンセプト*4 をパワフルでない 2 in 1 端末で実現できたら理想だと考えている。そのためには軽量で anywhere 的な (でもいざとなったらヘビーな使い方もできる) エディタが必要になる。
    • 環境整備のもう1つの系譜としてタスク / メモ管理がある。こちらも四半世紀の間、付箋紙アプリ → FitzNote → DropBoxEvernoteOneNoteGoogle Keep と試してきて、最近 Notion *5 に乗り換え / 一本化することにした。同じ作業をするのにローカルとクラウドで道具や操作を泣き別れさせたくないという欲求は強い。


右サイドバーにコード・ナビゲータが表示されるとか、Jupyter と併用するときになんとなく UI が似ている*6 とか、VS Code 移行によるメリットはその他にも多数ある。

一方で、どうしても解消できないデメリットが1つだけあり、それこそが本格移行をいままで渋っていた理由でもある。それは emacs のようなタブストップ&ラインインデント*7 が効かないこと。emacs 以外のエディタは、なぜかタブキーをタブ入力か複数スペース入力にしか設定できない。これは諦めて新スタンダードに合わせる必要があるか ...

*1:Windows 上で動く emacs ライクな軽量テキストエディタ。2014 年 4 月を最後にメンテナンスが止まっている。

*2:Dynabook SS → Libretto 50 → VAIO type-p → VAIO Duo 11 → ... その後、小型モバイル PC は当たりに恵まれず ... をネット黎明期から海外に持ち歩いているモバイラーである。

*3:ひどい時には、会社 PC + 個人 PC + 会社スマホ + 個人スマホ + 個人タブレットで合計 5kg 程度をハンドキャリーすることがあり、重量の観点でもバカらしかった。

*4:Chrome Book はコンセプト的には「軽量、安価、でもオフィスワークできる」だが、実際には WAN 回線がないモデルが大多数だし、野暮ったくて重量があるため、持ち歩くには実用的ではない。B5 サイズ弱、タイプカバー付きで 650g 前後、Geekbench 5 (64bit MultiCore) スコア 2500 ~ 3000、LTE あり、USB Type-C OTG + DP Alternate mode あり、 5 万円程度が理想。現時点でこのコンセプトを最も体現しているのは Chrome OS ではないが Huawei Mate Pad 10 になる。

*5:コードと結果とメモを混在させて記述・記録できる Jupyter のように外部ソースと自分のアイディアを取り混ぜて簡単に記述できるのが Notion の利点。

*6:VS Code と Jupyter の使い分け・棲み分けを考えなければならない。

*7:文脈から決まる、各行におけるインデント位置にカーソルとコード先頭をジャンプさせること。どこにいてもあるべきインデントに整形してくれるため、うっかりスペースを打ったりしてもタブを押せば戻せるし、うっかりタブを打っても何も起こらない。オフサイドルールの Python には必須の機能ではないかと思うのだが、なぜか emacs 以外に実装しているエディタがないように見受けられる。