文系プログラマによるTIPSブログ

文系プログラマ脳の私が開発現場で学んだ事やプログラミングのTIPSをまとめています。

私がAtomからSublime Textに戻った理由

テキストエディタの基礎部分となる、パフォーマンス面からatomとSublimeTextを比較して見た結果、Sublime Textに戻ったよ、というお話です。

f:id:treeapps:20150803021624p:plain

macのプログラマ御用達のテキストエディタと言えば、真っ先に挙がるのが「Atom」と「Sublime Text」ですね。

最近「atomスゲーよ!!」というブログ記事をチラホラ見るようになったので、私は去年から半年間、会社でプログラミング用途としてatomを使ってみました。その実体験を元に両者の真実を書いてみようと思います。

最近ではLight Tableなんかも出ましたが、今回はこの2つのテキストエディタに焦点を当ててみます。

※ 今回はGIFアニメ多めです

おさらい

Atom


分散バージョン管理システムGitのホスティングサービスを展開しているGithub社が開発して
いるテキストエディタです。

JavascriptエンジンV8を内蔵したり、gitとの親和性が高かったり、React.jsを使った高速な描画を試みたりしています。

Sublime Text


それなりに歴史があるようです。Atomがhtmlを利用した画面描画ですが、こちらはネイティブな描画です。

検証環境

この記事を書く前に約半年間、MacBook Air (13-inch, Mid 2011)で実際使って検証しています。この記事を書くにあたり、速度や動作のキャプチャ・検証を行った時の環境は、以下となります。

機種 iMac Retina (Late 2014)
CPU Intel Core i5 3.5 GHz
メモリ 32G (1600 MHz DDR3)
ストレージ 1TB Fusion Drive (SSD + IDE)
グラフィックス AMD Radeon R9 MX290X 2048MB

何が問題なのか

パフォーマンス


atomは遅い!遅すぎるんだよ!なんだよこの遅さは!


もうこれです。まず起動からして遅い。そして眠たくなるほど置換が遅い。更にV8を内蔵しているせいかメモリ消費量も多い。

atomによる一括置換の様子をGIFアニメで確認する

以下のテキストを1000行書いた状態で、

こんにちはテキストエディタさん。こんにちはテキストエディタさん。こんにちはテキストエディタさん。

ここから「テキストエディタ」→「text editor」と一括置換する様子をGIFアニメでご覧下さい。


いいですか?このGIFアニメ、止まってませんよ?ちゃんと動いてるのでよく見て下さいね?


f:id:treeapps:20150314115627g:plain


ぼくのatomちゃん壊れちゃったの?たった1000行の置換なんだけど・・・

Sublime Textによる一括置換の様子をGIFアニメで確認する

続いてSublime Textです。

f:id:treeapps:20150627142526g:plain


すまないやるお。置換速度が速すぎてGIFアニメが一瞬で終わってしまったよ。

コレですよコレ。私達が求めていた速度。置換にかかった時間はミリ秒単位でしかかかっていません。置換速度が遅い=大きなファイルが扱いにくい事に繋がるので、遅いと致命的です。

メモリ消費量

起動直後のメモリ消費量を見てみます。

atom

f:id:treeapps:20150314115052p:plain


あれ?起動直後だよね?ぼくのatomちゃん何か悪いデータでも食べちゃったのかな?

何故かいつも応答のないAtom Helper。起動直後に応答がないうえメモリ消費量が既にこの状態です。

このAtom HelperはChromeのChrome Helperと同じと思われ、こいつがモリモリメモリを蓄えていきます。朝出社して夜帰宅する時に見ると、このAtom Helperのメモリは大体600〜700Mになっています。

Sublime Text

f:id:treeapps:20150314140939p:plain


我々が求めているリソース消費はこれなのだよ。わかるかね?

大きめのファイルの読み込み速度


ここの「全国一括(12.2M)」のファイルを読み込んでみます。

atomの場合

f:id:treeapps:20150314130420p:plain


ぼくのatomちゃんは小食なんだね。2Mしか食べられないんだね。atomちゃんにとって2Mは特盛りだったんだね・・・ごめんね・・・

Sublime Textの場合

f:id:treeapps:20150627143955g:plain

少し待たされますが、中々の速度で12MByteのファイルをロードできました。

12Mのファイルを読み込んだ状態のメモリ状態を見てましょう。

f:id:treeapps:20150314132450p:plain


うむ。この速度でこのメモリ使用量。これならいけるぞ。

矩形選択

atomの場合

「sublime-style-column-selection」というパッケージをインストールして矩形選択してみます。
f:id:treeapps:20150314135212g:plain


「何これおかしくなーい?」

「マルチバイト意識してないんじゃないのー?」

「まじありえないんですけどー」

Sublime Textの場合

f:id:treeapps:20150627144341g:plain


1byte・マルチバイトを混在させてみたが、空気読んで選択されてるな

asciiコードの表示

ASCIIコード表

これらの文字をエディタで見てみましょう。
f:id:treeapps:20150627144824p:plain
4個程試しに書き込み、両エディタで開いてみた結果です。


SublimeTextの方は何もしなくても視覚的に見えるが、Atomは「Show Invisibles」の設定をオンにしてこの結果だ。設定が間違ってるのか?パッケージ入れないといけないのか? コレガワカラナイ

ファイルの自動保存

atomの場合


Atomちゃんが強制終了した!うわ・・・・書きかけのテキストが全部水の泡に・・・ぼくの時間かえして

Sublime Textの場合


SublimeTextはファイルを保存しない状態でアプリを終了しても、なんと次回起動時にその内容が完全に復元されるぞ。意図せずSublimeTextが強制終了しても安心安全設計なのだ。

「ファイルを保存しますか?」

atomの場合

f:id:treeapps:20150606054457p:plain


ちょっとPC再起動したいからエディタ終了したいんだけど、未保存文章が20個くらいあるんだよなあ・・・これ全部一時保存するの億劫だ・・・

Sublime Textの場合


Sublime Textは自動保存機能があるおかげで「保存しますか?」が表示されないぞ。だから未保存文章が20個あろうとCommand + qで即座にエディタを終了できて、次回起動時に全部復元されるから手間はかからないぞ。

バージョンアップ時の警告

atomの場合

f:id:treeapps:20150606060629p:plain


バージョンアップしたらなんか警告出た。エディタの自動バージョンアップonにしてるから、しょっちゅう動かないパッケージが出てくるんだよ

Sublime Textの場合


Sublime Textではまだバージョンアップ時のパッケージが動かない問題を見た事無いが、動かない詳細が表示されるのは親切だな。しかし本当にバージョンアップ頻度高いから、atomはこの辺で結構悩まされそうだ

雑感

いかがでしたでしょうか。atomを煽っていくスタイルで記事を書いてみました。本当は新登場のatomに期待を寄せていて、個人的に頑張って欲しいと私は思っているのですが、たったこれだけしか見ていないのに残念な部分がこれだけ見つかるのですが、世間ではatomワッショイ記事で溢れかえっています。atomをワッショイしてる人はレビュー記事書くためにほんの数分使っただけで記事書いてない?と疑いたくなります。私は実際半年間お仕事でSublimeTextと併用して比較しながら使って、こういう結論になっています。atomに関しては「具体的にどの部分が残念か」を伝えられていない記事は信憑性に欠けるのではないかと私は思っています。


これだけdisっといてなんですが、Sublime Textにも致命的な弱点はあって、マルチバイトの文字の検索が上手くいかない問題があります。
f:id:treeapps:20150627145156g:plain
検索窓でタイプして確定しようとEnterキーを押下すると、テキストが消えてしまい、検索できずに終了してしまいます。しかし事前に検索ワードをコピーしておいて、貼り付けると検索する事ができます。(コメントで回避策を書いて頂きましたが、実はそれは知っていて、代わりに副作用が起きる事も知っているので導入していません)

Sublime Text唯一の弱点はこれですね。ここさえなんとかなれば、個人的にmacで最も実用的なエディタになると思います。

atomについては非常に残念です。React.jsを搭載して速くなったと思ったのですが、ご覧の有り様です。確かにatomはgitとの親和性が高かったりdeveloper toolを内蔵していて使い勝手が良かったりしますが、テキストエディタの土台となるファイルの読み込み、置換というシンプルな処理自体がこれでは、gitとの連携等の便利機能まで台無しになってしまいます。


Atomのように機能をパッケージに頼る形態だと、先ほどの矩形選択のように、品質の悪いパッケージがどうしても出てきてしまいます。そして、全く同じ機能のパッケージを複数の人がバラバラの品質で作ってしまい、結局どれが最良のパッケージなのか解らず、ユーザを混乱させてしまいますね。他にも、矩形選択パッケージのように、このパッケージは日本語だと上手く機能してくれないが、あのパッケージは日本語も大丈夫、等、言語によってそのパッケージが使える・使えない、等も出てきますね。現状既にパッケージに品質がバラついているので、今後はもっと沢山同じ機能を持つパッケージが増え、更にユーザを困らせる事でしょう。


atomが今のSublime Textのパフォーマンスが出るようになったら起こして。話はそれからだよ。


ああ・・・・いつになるか解らないが、起こすと約束するよ・・・

こんな状態でもatomに期待している人は多いと思うので、マジでatomには頑張って欲しいです。

正式リリースされたので比較してみた!