『Software Design 2025年3月号』
はじめに
みなさんはプログラマーでしょうか、それともマネージャでしょうか? ソフトウェア開発の会社であればテキストエディタは必需品のはずです。テキストファイルを開いたり、ログを確認し加工したり、プログラミングしたり、あらゆる場面でテキストエディタが登場します。
そして多くのプログラマーは、自分のお気に入りのテキストエディタを決めており、そのテキストエディタの設定や、バージョンアップなどに多くの時間を費やします。それほどまでに我々ITエンジニアにとってテキストエディタはなくてはならないものになっているのです。
本章では、テキストエディタの成り立ちと、テキストエディタの存在意義、そして世の中にたくさんあるテキストエディタがどのように進化しているのかについて解説します。具体的には、みなさんが使っているテキストエディタはどのようにして生まれ、今後どのように進化していくのか、そのあたりを解説します。
テキストエディタとは
そもそもテキストエディタとは何でしょうか。広義ではテキストエディタとはテキストファイルを編集するためのソフトウェアです。テキストファイルを作成したり、編集したり、保存したりできます。
テキストエディタには基本的に決まった機能があります。入力した文字を追加削除したり、クリップボードに選択したテキストを格納したり、クリップボードから取り出してテキストエディタに貼り付けたり、検索したり置換したりする機能です。
テキストエディタの歴史
テキストエディタはどのようにして誕生したのでしょうか。テキストエディタの誕生を正確にお伝えするにはまずタイプライタとラインエディタを紹介しなければなりません。
タイプライタ
コンピュータが誕生し普及しだした1950年ころ、プログラムやデータはパンチカード
当然ですがパンチカードや紙テープは、修正をするためには打ち直しをしないといけませんでした。
ラインエディタ
1960年代になるとコンピュータ上で対話形式に実行するプログラムが登場し、コンピュータ上でデータを編集するためのソフトウェアとしてラインエディタが登場します。ラインエディタでは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
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年代後半にマサチューセッツ工科大学
スクリーンエディタは端末で動作するため、ssh
なお端末向けのテキストエディタはキーボードだけで操作できるメリットもあります。
GUIテキストエディタ
1980年代になると先駆的なGUIシステム
1983年にはWindowsのメモ帳が、1990年代になるとmacOSのBBEditなどが誕生します。端末向けにはTurbo Pascalエディタもありました。Turbo Pascalエディタはテキストベースのプログラムではありましたが、メニューやダイアログやスクロールバーといったUIの部品が実装されており、もはやGUIと呼んでも遜色ない姿でした。
2000年代になるとTextMateやSublime Textが、そして2010年代になるとGitHub社によるAtomが誕生し一世を風靡します。Electronと呼ばれるHTML/
そして2020年代の最近では多くの開発者が使っている、MicrosoftによるVisual Studio Code
Sublime Textが誕生したころのテキストエディタにはプログラミングに特化した拡張性の高いものが多く、サードパーティが提供したプラグイン等により、テキストエディタ本来の機能をカスタマイズできる
VS Codeで使われている機能の多くは、TextMateやSublime Textがベースとなっています。たとえばVS Codeでシンタックスを定義するものとしてtmLanguageという拡張子のファイルを扱うことがありますが、これはTextMateが由来です
このように、テキストエディタで使われている技術は、互いに取り込まれブラッシュアップされて、より良いものとして後世に引き継がれてきたのです。
テキストエディタに必要な機能
ここまではテキストエディタの歴史についてお話ししましたが、テキストエディタの機能について解説していきます。テキストエディタとはいったいどのようなソフトウェアなのでしょうか。一般的なテキストエディタに備わっている機能を表1に示します。
機能名 | 説明 |
---|---|
ファイル読み込み | ストレージからテキストファイルを読み込む。 |
ファイル書き込み | ストレージへテキストファイルの内容を書き込む。 |
カーソル移動 | 編集したい位置にキャレットを移動する。 |
検索 | 指定のテキストを編集中のテキストの中から検索する。 |
置換 | 編集中のテキストの一部のテキストを別のテキストに置換する。 |
ジャンプ | 指定行に移動する。 |
これらの機能は、ラインエディタにもWindowsのメモ帳にも備わっています。つまり、どちらもテキストエディタとして必要十分な機能を持っていると説明できます。
また一部のテキストエディタには表2のような機能も備わっています。
機能名 | 説明 |
---|---|
印刷 | 編集中のテキストを印刷。 |
設定 | テキストエディタの各種機能を変更。 |
複数バッファ編集 | テキストエディタの中で複数のテキストファイルを編集。 |
折り返し | 画面の右端でテキストを折り返し表示。 |
シンタックスハイライト | キーワードに色を付けて表示する。 |
一部のテキストエディタでは、実装されていないものもあります。プログラマーが扱うテキストエディタはプログラミング言語を扱うため、多くのプログラマーはシンタックスハイライトが実装されたテキストエディタを使います。
現代のテキストエディタに問われる機能
一般的にはテキストエディタは、文章を書くためのソフトウェアです。テキストエディタの中でもプログラミングに特化したものをコードエディタと呼ぶこともあります。
プログラミングに特化したテキストエディタには、通常表3のような機能が備わっています。
機能名 | 説明 |
---|---|
補完 | カーソル位置のコンテキストに合わせて候補を選択し入力する。 |
エラー表示 | 各プログラミング言語での正当性を確認し間違いを表示する。 |
定義位置ジャンプ | カーソル位置にある変数や関数や型の定義位置へジャンプする。 |
呼び出し元表示 | カーソル位置にある関数を呼び出している箇所を一覧表示する。 |
アクション実行 | カーソル位置のコンテキストに合わせて独自のアクションを実行する。 |
折り畳み表示 | 指定の範囲や関数の中身などを折り畳み表示する。 |
整形 | 各プログラミング言語の標準的なフォーマットに合わせ整形する。 |
シンボル一覧 | 編集中のテキストの中に存在する変数や関数といったシンボルを一覧表示する。 |
補足表示 | カーソル位置にある変数や関数や型の補足情報をツールチップ等で表示する。 |
リネーム | カーソル位置にある変数や関数や型を別の名前に一括変更する。 |
これらの機能が備わっているものはIDEと呼ばれることがありますが、本稿では
Language Server Protocol
近年、プログラマー向けテキストエディタの多くで標準機能となっているのが、Language Server Protocol
LSPとは、プログラミング言語に対する編集の支援機能をテキストエディタやIDEに付与するためのデータ形式や編集手順、通信手順などを定めたプロトコルを指します

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.
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が良いでしょう。またsshでログインした先の端末で使いたいといった要件であれば、VimやEmacsが良いでしょう。エディタを極限までカスタマイズしたいのであればEmacsが良いでしょう。そして起動の速さや高速な編集を身につけたいのであれば
そして現在では、VS Codeを意識したテキストエディタも登場しています
名前 | 説明 | URL |
---|---|---|
Cursor | AIによる強力な編集を提供するテキストエディタ | https:// |
Lapce | 軽さを追い求めるパワフルテキストエディタ | https:// |
Zed | AI搭載の次世代テキストエディタ | https:// |
Replit | AI搭載オンラインエディタ | https:// |
Helix | LSP搭載CLIテキストエディタ | https:// |
それぞれに特異点があり、どの部分を優先として選ぶかはみなさん次第です。
流行の推移
モダンなテキストエディタで実装されている機能にも、いくらか流行が見られるようになりました。そのいくつかを紹介します。
Vim拡張
Vimの操作は独特です。慣れるまでに苦労しますがいったん身につけてしまうとそれなしには生きていけなくなります。そのため、Vimをこよなく愛するVS Codeユーザー向けにVim拡張が提供されており、Vim風の操作性を得ることができます。昔Vimを使っていたVS Codeユーザーの多くがVim拡張をインストールしています。またEmacsにもEvilという拡張が存在し、EmacsでVimの操作性を得ることもできます。
端末
モダンなテキストエディタには端末機能が実装されています。プログラミングをしていると、コードの編集後にシェルからコマンドを実行し、設定を反映したり、コンパイルしたり、デプロイしたりすることがあると思います。そういったシーンではテキストエディタに内蔵された端末機能が便利です。
テキストエディタに端末
AI機能
VS CodeにはMicrosoftが提供するCopilotというAI拡張が用意されています。Copilotをインストールして有効にすると、ユーザーが途中まで入力したテキストをAIが推測し、必要なテキストを自動で補ってくれるようになります。
CopilotはVim向けにも用意されており
このように、もともとはいずれかのテキストエディタの独自の機能であったものが、次第にほかのテキストエディタに移植され、互いに刺激しあってより良く成長しているのです。
テキストエディタを選定する際の尺度として、今後そのテキストエディタがほかのテキストエディタの機能を取り込んでいくだけのパワーがあるのかを見定めておくのもよいでしょう。
まとめ
ITエンジニアの必需品
ぜひご自分にマッチした最良のテキストエディタを見つけてください。