特集・集中企画

AI・言語サーバー対応やさらなる高速化、堅牢性強化へ ~「EmEditor」の進化は止まらない!

開発者 江村豊氏が語る最強テキストエディター「EmEditor」の未来

「EmEditor」

 PCに慣れたユーザーにとって欠かせないツールであるテキストエディターの中でも、「EmEditor」は、速度の速さや機能の豊富さで多くのユーザーに支持されているソフトの1つだ。「窓の杜」編集部でも愛用者が多い。

 EmEditorの開発者であるエムソフトの江村豊氏は、日本出身の個人開発者で商業的に成功を収めている数少ない一人といえる。特に江村氏がこだわるパフォーマンスについては、動作と起動の速さから、CSVやログファイルといった大容量テキストデータの処理のパフォーマンスまで、プロフェッショナルなユーザーから高い評価を受けている。

 その江村氏に、最近の「EmEditor」の開発トピックや高速化で活躍するテクニックの話をお伺いした。インタビューしたのは、2023年2月、「EmEditor」v22.2が最新版の時期。

 「EmEditor」といえば、大容量ファイルへの対応や高速性へのこだわりをイメージする人も多いと思うが、そうしたこだわりの一方、江村氏が最近の機能強化で「特に重要性が高かった」と感じたのは、v22.1で追加したクラッシュレポートの送信機能なのだという。

 そこで今回は、最近のバージョンアップでも続く高速化への飽くなき挑戦や大容量ファイルを余裕で扱える秘密を前編で、高い安定性を維持するための取り組みや、JavaScript対応の改善やGitへの対応。さらには、AIを含めた将来の機能改良についての計画を後編としてお届けしたい。

 後編となる今回は、クラッシュレポートの送信機能を付けたことで「EmEditor」の安定性がいかに向上したか、というポイントや、「EmEditor」 v22.1においてマクロのJavaScriptエンジンとして「V8」に対応したこと、「EmEditor」の今後などについての話だ。

江村豊氏

マクロのJavaScriptエンジンでV8に対応

――「EmEditor」の最近の変更としては、マクロがv22.1でJavaScriptエンジン「V8」に対応しましたね。

[江村氏]はい。これまでJScriptをベースとしていましたが、JavaScriptもバージョンアップで機能が増えていて、それらの機能がJScriptでは使えません。そこでオープンソースとして公開されているV8のコードを見てみましたが、簡単に流用できるものでもなく、またマクロ機能のためだけにそれほど時間をかけるわけにもいかず、難しかったという事情がありました。

 そうしたときに、「秀丸エディタ」さんが「WebView2」を利用してV8に対応されたという記事を見て、私も試してみたら、簡単にV8が使えたという経緯です。

 ただし、「WebView2」では機能に制限があります。「WebView2」はJavaScriptだけのものではないので、正しくエラーを検出できません。「try~catch」文などを使ってエラーを検出しようとしても、うまくいかないことがあります。また、遅いのと、ローカルファイルの削除などの処理ができないといった制限もあります。そのため、「EmEditor」のV8対応はまだ不完全だと思っています。

――ちなみに、なぜ遅いのでしょうか?

[江村氏]「WebView2」自体の遅さもありますし、非同期で結果が返ってくるのを待っているのも遅い原因です。ただ、それだけでなく「WebView2」のスクリプトに関する実装には、まだ不完全なところがあると考えています。

――JScriptはV8に置き換えていく方向でしょうか?

[江村氏]いえ、いまのところJScriptはなくさない考えです。ローカルなファイルを扱うといった、V8では使えない機能もあります。JScriptはJScriptで生き残ると思っています。

JavaScriptエンジンとしてV8を使用する設定

クラッシュレポート送信機能により不具合対応が大幅に向上

――v22.2のリリースのときには、最近のバージョンでクラッシュレポート機能を改善した結果として、「EmEditor」の信頼性と頑強性を向上したと書かれていました。どのぐらいの効果があったのでしょうか?

[江村氏]以前は障害が起きたときに、クラッシュが発生したことを知らせるメッセージボックスが表示され、そこに表示されたディレクトリにあるレポートファイルをユーザーが自分で探して送信する形でした。面倒なのであまり送っていただけず、多くても週に1~2件でした。

 そこでv22.1から、「EmEditor」からレポートをメール送信する機能を付けました。これがうまくいって、多いときでは1日に30件もレポートをいただけるようになりました。同じ問題のレポートが複数いただいていれば不具合だなとわかります。さらに、レポートを解析するマクロを作って、ソースコード内で落ちている場所を特定できるようになり、かなり早く対応できるようになりました。

 おかげで、最近では機能追加より不具合修正により時間を使うようになりました。その結果、v22.2は不具合修正が中心で、安定性が向上しています。使っていただいている皆様に喜んでいただけていると思います。

江村氏に届いたクラッシュレポートのメールの例

――「EmEditor」以外の理由で「EmEditor」が落ちる場合もあると思います。たとえば、IMEに起因する原因で、「EmEditor」終了時に異常終了する場合があることが報告されていましたね。そのほかにもそうした問題などがわかったりするのでしょうか。

[江村氏]IMEの問題はあいかわらずありますし、グラフィックドライバーで問題が起きている場合もあるだろうと推測しています。クラッシュレポートに含まれるスタックトレースで、IMEやグラフィックドライバーで落ちていることがわかることがありますから。

 稀にですが、CPUの不具合ではないかと思われる事案もありますね。AVX2に対応するCPUの型番なのにAVX2命令で落ちていたり、AVX-512に対応しているはずなのにAVX-512命令で落ちたりする場合があります。そのお客様は、「Firefox」などほかの一部のアプリでも落ちていたとのことでした。そこで、起動時にAVX-512命令を実行してみて、エラーが出たら以後AVX-512命令を使わないようにダウングレードする、という予防策も入れました。

――ちなみにその問題は、特定の型番で起こるものでしょうか、それとも特定の個体で起こるものでしょうか。

[江村氏]おそらく個体の問題で、製造の問題だと思います。

 クラッシュレポートを見ると、いろいろな原因で落ちていることがわかり、大変勉強になります。先ほどお話したように、メモリの割り当てで落ちることも多い。しかも、何Gバイトというならまだしも、たった128Mバイトを割り当てようとして落ちたり。

 お客様の中には、巨大ファイルで落ちるという方もいました。ページングファイルのサイズを手動にしても落ち、ページングファイルのサイズを40Gバイトにしても落ちて、100Gバイトにしてようやく落ちなくなったこともありました。

プラグインで「Git」に対応、「EmEditor」の開発でも「Git」と自動テストが活躍

――最近では開発者のデファクトスタンダートなっているバージョン管理ツールの「Git」にも対応していますね。

[江村氏]はい。今後、コードエディターの機能も充実させていきたくて、その1つとして、「Git」に対応するプラグインを開発しました。「Visual Studio Code」でも「Git」の機能が入っていますね。

 「EmEditor」では、弊社スタッフで私の長男である誠が「Git」に詳しいので、プラグインを開発しています。当初は「Gitプラグイン」という名称にしていたのですが、「Git」という名前をプログラムの名称に使うのを避けて、「コミットリストプラグイン」という名前にしています。

 コミットリストプラグインでは、「Git」の基本機能をひととおり使えます。また、次のバージョンでは、ブランチを変更したときに自動的にスタッシュ(変更の退避)を実行する機能も実装していて、これは「Visual Studio」の機能を参考にしました。

――「EmEditor」の開発にも「Git」を使っているのでしょうか?

[江村氏]はい。さらに、Azure DevOps上の「Git」リポジトリから、3つのパイプラインを用意して自動テストなども走らせています。「daily_test」パイプラインでは大きなテストを夜中に実行します。「test」プランチでは、コミットするたびなどにテストを実行します。「build」ブランチでは、ビルドを実行します。

 誠は自動化が好きなのでこうした仕組みを作って、バグの修正やテスト、リリースなど、かなり自動化しています。かつては手でやっていたので、バージョン番号を間違えたりもしていました(苦笑)。自動化でかなり効率化できましたし、細かいミスも減っています。

 Webサイトの更新も自動化しています。たとえばダウンロードリンクは、リリースごとの変更が不要で、最新版がダウンロードされるようになっています。もちろん、過去のバージョンは「以前のバージョン」に入ります。

「EmEditor」開発で使っているAzure DevOpsのパイプライン

Free版で使える機能を拡大

――v21.2から、以前はProfessional版でしか使えなかった多くの機能をFree版でも使えるようにしていますね。どのような意図でしょうか?

[江村氏]これは、無料のエディターが増えていることによります。v21.2では多くのオプションをFree版で使えるようにしました。v21.3では、Free版でも、巨大ファイルの中身をすべてメモリに入れずに扱えるようにしました。

 特に、「Windows Store」などで、Free版を使って機能が少ないということで低評価をつけられるお客様がいらっしゃいました。「Windows Store」では評価が表示されるので、スコア1が1人いると平均値が下がってしまいます。そこで、Free版でもしっかり使えるようにしようと思いました。

 個人として使っていただくにはFree版でいいと考えています。会社や組織にはFree版はご遠慮いただいていて、そちらのほうで収入を確保しています。特に、企業や組織で使うような、CSVなどのデータ関連の機能は有料版のみとさせていただき、それで棲み分けることにしました。

言語サーバー対応など、これからも機能強化と高速化を続ける

――最後に、「EmEditor」の今後の強化予定などについて教えてください。

[江村氏]プログラミングで使われる言語サーバー(LSP:Language Server Protocol)への対応は考えています。言語サーバーは、ソースコードを解析した情報をエディターやIDEに提供して、シンタックスハイライトや自動補完、定義の検索、コードのフォーマットなどに使えるようにする仕組みです。「Visual Studio」などでは対応しています。

 「EmEditor」でもすでに開発を始めています。リリースするときには、言語サーバーも含めてパッケージ化しようと思っています。要望もありますし、対応することによってコードエディターとして充実させるつもりです。

 そのほか構想としては、AIによるサジェスト機能や、校正機能、翻訳機能なども考えてはいます。AI対応というのは、かなりセールスポイントとなるので、やってみたいですね。

 あとは、まだまだ高速化のためのアイデアはいろいろあります。たとえば、まだUTF-8にしていない場所もあるので、すべてUTF-8にすれば速くなるのではないかと思っています。Windowsで表示するときだけUTF-16に変換するわけです。

 もう一つ、「EmEditor」の比較機能が充実していることもあって、「保存する前に、保存する前と後の状態を比較したい」という要望もあります。ちょっと「Git」と似ていますね。こうしたことも考えています。

――ありがとうございました。

[制作協力:Emurasoft, Inc.]