エディタ選びのポイント⁠ITエンジニア人生を左右するツールのいろは —⁠—Software Design 2025年3月号の特集記事を先行公開

Software Design 2025年3月号⁠2025年2月18日発売)の第1特集「コードエディタ大研究」の序章の記事を発売に先駆けて公開します。ぜひ本誌にて、この後に続く章もお読みください。

はじめに

みなさんはプログラマーでしょうか、それともマネージャでしょうか? ソフトウェア開発の会社であればテキストエディタは必需品のはずです。テキストファイルを開いたり、ログを確認し加工したり、プログラミングしたり、あらゆる場面でテキストエディタが登場します。

そして多くのプログラマーは、自分のお気に入りのテキストエディタを決めており、そのテキストエディタの設定や、バージョンアップなどに多くの時間を費やします。それほどまでに我々ITエンジニアにとってテキストエディタはなくてはならないものになっているのです。

本章では、テキストエディタの成り立ちと、テキストエディタの存在意義、そして世の中にたくさんあるテキストエディタがどのように進化しているのかについて解説します。具体的には、みなさんが使っているテキストエディタはどのようにして生まれ、今後どのように進化していくのか、そのあたりを解説します。

テキストエディタとは

そもそもテキストエディタとは何でしょうか。広義ではテキストエディタとはテキストファイルを編集するためのソフトウェアです。テキストファイルを作成したり、編集したり、保存したりできます。

テキストエディタには基本的に決まった機能があります。入力した文字を追加削除したり、クリップボードに選択したテキストを格納したり、クリップボードから取り出してテキストエディタに貼り付けたり、検索したり置換したりする機能です。

テキストエディタの歴史

テキストエディタはどのようにして誕生したのでしょうか。テキストエディタの誕生を正確にお伝えするにはまずタイプライタとラインエディタを紹介しなければなりません。

タイプライタ

コンピュータが誕生し普及しだした1950年ころ、プログラムやデータはパンチカード(穴あきのカード)や紙テープに記録されていました。キーパンチと呼ばれる機械により、手動で入力されていました。キーパンチの中にはタイプライタ状に印字するものもありました。そしてそのフォーマットには多くの種類が存在しました。

当然ですがパンチカードや紙テープは、修正をするためには打ち直しをしないといけませんでした。

ラインエディタ

1960年代になるとコンピュータ上で対話形式に実行するプログラムが登場し、コンピュータ上でデータを編集するためのソフトウェアとしてラインエディタが登場します。ラインエディタでは1行ごとにテキストを編集していました。テキストの編集はコマンドを入力して行います。たとえば図1のようにしてテキストを編集します。

図1 ラインエディタでの編集例
$ ed main.c
15                     ←(バイト数)
1,$l                   ←リスト表示
int main() {$
}$
2                      ←2行目に移動
}
i                      ←2行目に挿入
  puts("hello world");
^C                     ←CTRL-cで中断
?
1,$l
int main() {$
  puts("hello world");
}$
w                      ←保存
38                     ←(バイト数)
q                      ←終了

起動するとプロンプトが表示されます。このプロンプトにコマンドを入力して編集を行います。まずリストを表示するにはlを入力します。そして指定の行に移動するには数字を入力します。2行目であれば2です。

現在の行に対して編集を行う場合にはコマンドを入力します。たとえば削除であればd、挿入であればi、書き換えであればcです。iで挿入を行う場合にはCTRL-cで入力を終了できます。pを入力すると現在の行が表示されます。wで保存し、qで終了できます。

UNIX(Linux)を知っている方であれば「Vimのようだ」と思うかもしれません。そのとおり、Vimつまりviはもともと、ラインエディタだったものをビル・ジョイ氏がスクリーンエディタに移植したものであり、その名残としてラインエディタの体系は残っているのです[1]

Vimにはexというコマンドが付属しており、現在でもその操作を体験することができます。

スクリーンエディタ

端末の画面を制御するための機能が発展した1970年代になると、ラインエディタを改良したスクリーンエディタが登場します。このころに登場したのがviやEmacsといったテキストエディタです。viやEmacsの人気はとても根強く、この時代に誕生したものであるにもかかわらず、2025年になった今でもバージョンアップが行われ、多くのユーザーに使い続けられています。1970年代から1980年にかけては、viとEmacsという2大テキストエディタがデファクトスタンダードとなっており、とくにUNIXを扱うプログラマーであれば、ほぼ間違いなくviの基本操作を知っていたのです。

Vim

VimはBram Moolenaar氏がviのクローンであるstevieをベースに1988年から開発を始めたテキストエディタであり、現在も開発が続けられています。そのフォークであるNeovimをお使いの方もたくさんいると思います。

Emacs

1960年代後半にマサチューセッツ工科大学(MIT)でTECO(Text Editor and Corrector)が誕生し、それをベースにリチャード・ストールマン氏がEmacsの開発を始めました。当初はTECOのマクロを利用する形でした。Emacsもいろいろな派生物が誕生しましたが、現在は直系の子孫としてGNU Emacsの開発が続けられています。


スクリーンエディタは端末で動作するため、ssh(当時はrlogin)で接続したリモート端末上でテキストを編集することが可能です。そのため、サーバの設定ファイルを編集する目的でviはUNIXの標準テキストエディタとして扱われるようになりました。現在ではnanoを標準としているLinux OSもあります。Emacsは誕生後、数多くの機能が実装され、テキストエディタやIDEの域を超えて「環境」「OS」と表現する人さえいました。

なお端末向けのテキストエディタはキーボードだけで操作できるメリットもあります。

GUIテキストエディタ

1980年代になると先駆的なGUIシステム(XeroxやAppleなど)が誕生します。

1983年にはWindowsのメモ帳が、1990年代になるとmacOSのBBEditなどが誕生します。端末向けにはTurbo Pascalエディタもありました。Turbo Pascalエディタはテキストベースのプログラムではありましたが、メニューやダイアログやスクロールバーといったUIの部品が実装されており、もはやGUIと呼んでも遜色ない姿でした。

2000年代になるとTextMateやSublime Textが、そして2010年代になるとGitHub社によるAtomが誕生し一世を風靡します。Electronと呼ばれるHTML/CSSレンダラが使われており、リッチなUIを提供することができるようになりました。なおElectronは当時Atomを開発する部品として実装されており、Atom Shellと呼ばれていましたが、汎用製品として切り出され現在に至ります。

そして2020年代の最近では多くの開発者が使っている、MicrosoftによるVisual Studio Code(以下VS Code)が誕生します。VS CodeもElectronをベースにしています。

Sublime Textが誕生したころのテキストエディタにはプログラミングに特化した拡張性の高いものが多く、サードパーティが提供したプラグイン等により、テキストエディタ本来の機能をカスタマイズできる「拡張機能」が備わっていました。

VS Codeで使われている機能の多くは、TextMateやSublime Textがベースとなっています。たとえばVS Codeでシンタックスを定義するものとしてtmLanguageという拡張子のファイルを扱うことがありますが、これはTextMateが由来です(tmはTextMateの略⁠⁠。またVS CodeでHTML等をプレビューし、そのファイルを更新するとプレビューが自動でリロードしますが、これは「LiveReload」と呼ばれておりSublime Textの実装がベースとなっています。そしてHTMLの要素名を使った式からHTMLを展開して入力するEmmet(旧ZenCoding)もSublime Textから誕生しました。さらにモダンなテキストエディタの多くに搭載されているLanguage Serverという機能は、Vimで開発されていたOmniSharpというプラグインがベースとなっています。

このように、テキストエディタで使われている技術は、互いに取り込まれブラッシュアップされて、より良いものとして後世に引き継がれてきたのです。

テキストエディタに必要な機能

ここまではテキストエディタの歴史についてお話ししましたが、テキストエディタの機能について解説していきます。テキストエディタとはいったいどのようなソフトウェアなのでしょうか。一般的なテキストエディタに備わっている機能を表1に示します。

表1 一般的なテキストエディタの機能
機能名 説明
ファイル読み込み ストレージからテキストファイルを読み込む。
ファイル書き込み ストレージへテキストファイルの内容を書き込む。
カーソル移動 編集したい位置にキャレットを移動する。
検索 指定のテキストを編集中のテキストの中から検索する。
置換 編集中のテキストの一部のテキストを別のテキストに置換する。
ジャンプ 指定行に移動する。

これらの機能は、ラインエディタにもWindowsのメモ帳にも備わっています。つまり、どちらもテキストエディタとして必要十分な機能を持っていると説明できます。

また一部のテキストエディタには表2のような機能も備わっています。

表2 一部のテキストエディタが備えている機能
機能名 説明
印刷 編集中のテキストを印刷。
設定 テキストエディタの各種機能を変更。
複数バッファ編集 テキストエディタの中で複数のテキストファイルを編集。
折り返し 画面の右端でテキストを折り返し表示。
シンタックスハイライト キーワードに色を付けて表示する。

一部のテキストエディタでは、実装されていないものもあります。プログラマーが扱うテキストエディタはプログラミング言語を扱うため、多くのプログラマーはシンタックスハイライトが実装されたテキストエディタを使います。

現代のテキストエディタに問われる機能

一般的にはテキストエディタは、文章を書くためのソフトウェアです。テキストエディタの中でもプログラミングに特化したものをコードエディタと呼ぶこともあります。

プログラミングに特化したテキストエディタには、通常表3のような機能が備わっています。

表3 プログラミング特化テキストエディタの機能例
機能名 説明
補完 カーソル位置のコンテキストに合わせて候補を選択し入力する。
エラー表示 各プログラミング言語での正当性を確認し間違いを表示する。
定義位置ジャンプ カーソル位置にある変数や関数や型の定義位置へジャンプする。
呼び出し元表示 カーソル位置にある関数を呼び出している箇所を一覧表示する。
アクション実行 カーソル位置のコンテキストに合わせて独自のアクションを実行する。
折り畳み表示 指定の範囲や関数の中身などを折り畳み表示する。
整形 各プログラミング言語の標準的なフォーマットに合わせ整形する。
シンボル一覧 編集中のテキストの中に存在する変数や関数といったシンボルを一覧表示する。
補足表示 カーソル位置にある変数や関数や型の補足情報をツールチップ等で表示する。
リネーム カーソル位置にある変数や関数や型を別の名前に一括変更する。

これらの機能が備わっているものはIDEと呼ばれることがありますが、本稿では「IDEの機能を持つテキストエディタ」として紹介しています。

Language Server Protocol

近年、プログラマー向けテキストエディタの多くで標準機能となっているのが、Language Server Protocol(LSP)です。

LSPとは、プログラミング言語に対する編集の支援機能をテキストエディタやIDEに付与するためのデータ形式や編集手順、通信手順などを定めたプロトコルを指します図2⁠。

図2 LSPのイメージ
図2

LSPはプロトコルです。LSPの仕様に従って実装されたクライアントと、これまた仕様に従ったサーバを追加インストールするだけで、そのプログラミング言語の入力支援機能が使える拡張機能が特徴的です。

各種テキストエディタの対応状況

各テキストエディタでのLSPの対応状況を簡単に説明します。

VS Code

LSPが初めに搭載されたのがVS Codeです。現在もLSPの仕様のメインストリーム実装の役割となっています。最近では多くのプログラミング言語の開発チームがLanguage ServerやVS Code向けの拡張も一緒に開発していることが多く、VS Codeユーザーはただただ待っていれば言語拡張が後から降ってくる状況になっています。一番簡単にLSPを扱えるテキストエディタと言って良いでしょう。

Vim

VimではLSPのクライアントもプラグインで開発されています。ですのでクライアントの実装としては複数の開発者が作成した複数のプロダクトが存在します。ユーザーは気に入ったプラグインを選ぶことができます。その中でも有名なプラグインがvim-lspです。

vim-lspを使っているユーザーに限りますが、vim-lsp-settingsという筆者が開発しているプラグインを使うことで、VS Codeと似たようなインストール方法を使うことができます。またNeovimには標準でLSPが実装されており、プラグインを追加することなくLSPを扱うことができます。nvim-lspconfigやmason.nvimといったプラグインを使うことでvim-lsp-settingsのようなLanguage Serverのインストール機能を追加できます。

Emacs

Emacsにもlsp-modeやeglotというクライアント実装が複数存在します。現在はeglotがEmacs本体に取り込まれており、拡張機能を追加することなくLSPを利用できるようになりました。

テキストエディタ選び

現代では選ぶのに困るほど、たくさんのテキストエディタが存在します。ITエンジニアは情報収集をしながら自分にマッチしたテキストエディタを見つける必要があります。さて、みなさんはテキストエディタを選ぶときにどのような要素に注目するでしょうか。

  • 見た目
  • 拡張性
  • 独自機能

そのほか、安定性や、互換性なども考慮に含める方もいると思います。

見た目

テキストエディタの見た目は軽視されがちですが、実はとても大事なのです。プログラマーは1日に何時間もコードエディタを凝視し、何時間もタイピングし続けます。

なるべくなら、見やすいデザインのものであるべきです。カラーテーマを変更できるテキストエディタであれば、いろいろ試して自分にマッチするものを設定しておくと良いでしょう。有名なところとしてはsolarizedというカラーテーマは、いろいろなテキストエディタで用意されており、もしsolarizedが気に入るのであれば、テキストエディタを使い分ける際に同じ見た目で扱うことができます。

拡張性

近代のプログラマーはいろいろなプログラミング言語を扱います。C、C++、Go、Rust、Python、Ruby、などなど。またJSONやXMLやTOML等の設定ファイルも扱います。

モダンなテキストエディタでは、プラグイン機構などを使い、アドオンという形で対応シンタックスを増やすことができるものもあります。

プラグインは通常、プログラミング言語や、設定ファイルフォーマット単位に配布されており、モダンなテキストエディタでは、たとえばC++向けの拡張プラグインをインストールするだけで、シンタックス定義によりキーワードのハイライトがされるだけでなく、LSPのクライアントさらにはLanguage Serverも一緒にインストールされ、C++の入力補完や定義位置ジャンプがサポートされるようになっています。

モダンなテキストエディタでは、こういったプラグインをボタン1つでインストールすることができるようになっており、初心者の方でも簡単にプログラミングができるようになっています。

独自機能

さて、見た目や拡張性は、各テキストエディタにより手法が異なるものの提供される機能はおおよそ同じようなものであることが想像できると思います。

残るはそのテキストエディタの特異性となるわけですが、そこにこそ、そのテキストエディタの持つ味が存在します。

たとえばVimであれば、vi特有のテキスト操作が特徴的です。マーク、ヤンク、ペースト、ビジュアル選択、テキストオブジェクトなど、ほかのテキストエディタには存在しない独特な概念があります。

またEmacsであれば、エディタそのものをカスタマイズできる拡張性が特異点です。Emacsのレンダリングシステムを自作することもできます。テキストやフォントだけでなく、画像の読み込みなども行うことができます。

そしてVS CodeはレンダリングエンジンがElectronベースであるため、画像の表示はもちろんJavaScriptを使った高度なアニメーションも実装可能です。またVS Codeはローカルにインストールしたものではなくブラウザベースで動作するものも実装されており、GitHub上ではブラウザだけでGit操作からテキストエディタによる編集までを行えるようになっています。


『Software Design 2025年3月号』「コードエディタ大研究」の特集ではいくつかのエディタを紹介していますが、そのうちのVS CodeとVim、Emacsの3つの中から選ぶ際のポイントをお伝えします。

高度なビジュアルを求めるのであれば、VS Codeが良いでしょう。またsshでログインした先の端末で使いたいといった要件であれば、VimやEmacsが良いでしょう。エディタを極限までカスタマイズしたいのであればEmacsが良いでしょう。そして起動の速さや高速な編集を身につけたいのであれば(学習曲線は高くなりますが)Vimを選ぶのが良いでしょう。

そして現在では、VS Codeを意識したテキストエディタも登場しています表4⁠。

表4 VS Codeを意識したテキストエディタの例
名前 説明 URL
Cursor AIによる強力な編集を提供するテキストエディタ https://www.cursor.com/
Lapce 軽さを追い求めるパワフルテキストエディタ https://lap.dev/lapce/
Zed AI搭載の次世代テキストエディタ https://zed.dev/
Replit AI搭載オンラインエディタ https://replit.com/
Helix LSP搭載CLIテキストエディタ https://helix-editor.com/

それぞれに特異点があり、どの部分を優先として選ぶかはみなさん次第です。

流行の推移

モダンなテキストエディタで実装されている機能にも、いくらか流行が見られるようになりました。そのいくつかを紹介します。

Vim拡張

Vimの操作は独特です。慣れるまでに苦労しますがいったん身につけてしまうとそれなしには生きていけなくなります。そのため、Vimをこよなく愛するVS Codeユーザー向けにVim拡張が提供されており、Vim風の操作性を得ることができます。昔Vimを使っていたVS Codeユーザーの多くがVim拡張をインストールしています。またEmacsにもEvilという拡張が存在し、EmacsでVimの操作性を得ることもできます。

端末

モダンなテキストエディタには端末機能が実装されています。プログラミングをしていると、コードの編集後にシェルからコマンドを実行し、設定を反映したり、コンパイルしたり、デプロイしたりすることがあると思います。そういったシーンではテキストエディタに内蔵された端末機能が便利です。

テキストエディタに端末(ターミナル)機能を付けたのは、Emacsであったと言われていますが、VS Codeもバージョン1.2(2016年6月)で端末機能を実装しました。そして続いてVimもバージョン8.0.1376(2017年5月)で端末機能を実装しました[2]

AI機能

VS CodeにはMicrosoftが提供するCopilotというAI拡張が用意されています。Copilotをインストールして有効にすると、ユーザーが途中まで入力したテキストをAIが推測し、必要なテキストを自動で補ってくれるようになります。

CopilotはVim向けにも用意されており(GitHub社提供⁠⁠、VS CodeのCopilotと同じ機能を得られます。またEmacs向けにはサードパーティ拡張としてcopilot.elがあり、同じくVS CodeのCopilotと同じ機能を得られます。

このように、もともとはいずれかのテキストエディタの独自の機能であったものが、次第にほかのテキストエディタに移植され、互いに刺激しあってより良く成長しているのです。

テキストエディタを選定する際の尺度として、今後そのテキストエディタがほかのテキストエディタの機能を取り込んでいくだけのパワーがあるのかを見定めておくのもよいでしょう。

まとめ

ITエンジニアの必需品「テキストエディタ」の誕生の歴史や基本機能の説明、テキストエディタを選定するときのポイント等を解説しました。みなさんが今後、人生を共にすると言っても良いであろう「テキストエディタ」を選定する際の、尺度として本記事がお役に立てたならばうれしいです。

ぜひご自分にマッチした最良のテキストエディタを見つけてください。

おすすめ記事

記事・ニュース一覧