AtomからVSCodeに乗り換えたので使ってる拡張パッケージを対応表にしてみた

年末年始にAtomの使ってるプラグインを列挙して棚卸しをしたけども、ちょっと前のMSのGitHubの買収を機に食わず嫌いしてたVSCodeを使ってみた。
ただし使うにあたってはAtomで使ってる環境と同程度のことができてくれないとダメなので調べてみた。
結果から言って今はVSCodeに乗り換えてしまった。せっかくなので使ってるAtomとVSCodeの拡張パッケージをそれぞれ対応する表にしてみた。ちなみにもともと「俺のAtomは環境だ」と笑い話的に言っていたのでややAtom寄りの表になってるのはご容赦いただきたい。
使用感比較
拡張パッケージ表に行くまえに使用感を比較した所感。100%満足はしてないもののパフォーマンスの恩恵が大きく、なんとかAtomでできたことを損なうことなくVSCodeでも許容できるレベルにもっていけたのが乗り換えの決め手。
UI
ほとんどどちらも同じような感じで差異は大きくない。ただ、プロジェクト内から文字列検索したときの結果表示がAtomのほうがエディタ部に表示されるのでわかりやすい。VSCodeだとエクスプローラー部分に表示されるのが小さくてみづらい。
またキーバインドの設定はAtomイベントが発火したのか表示できるけど、VSCodeは表示する機構がないで、コンフリクトしてるキーバインドのデバッグが非常にしづらい。
見た目のカスタマイズ
見ためのカスタマイズは完全にAtomのほうが柔軟。これはDevToolsを開けるうえ、設定のLESSファイルを自由に編集できる。ということは変更したい箇所のセレクタにCSSを書いてあげることで如何様にもなる。
一方VSCodeは全てではないものの主要箇所はできて、まあ必要十分かな、という感じではある。個人的にはツリービュー(エクスプローラー)の文字サイズや行の高さなどはカスタムしたいけどできないのがもどかしい。
パフォーマンス
よくAtomは遅いと言われるけど、うん、まあ否定できない。それでも一応速くはなったんだけど。あとログファイルみたいに大きなファイルを開くとビーチボールがぐるぐるしてどうしようもなくなることがある。
VSCodeは最初の表示は速い。ウィンドウの起動はちょっとかかるけどAtomに比べたら軽い。またファイル表示はキビキビ開く。ただし、これはどうもLinterやシンタックスハイライトなんかは開いた後でやってるような感じ。まず表示を優先する、みたいな挙動っぽい。大きなファイルは大きすぎたときはまず警告出してくれるので助かる。
さて、以下に拡張機能を列挙していくんだけど、自分で探す場合の注意としてはVSCodeのパッケージは検索すると同名のものが出てきたりする。同名のものをフォークして上げただけ、みたいな感じっぽいけどインストールの際はちょっと注意したい。
また、見つからなかったものは[-]とかって書いてあるけど、単に検索力が足りなかったり別のパッケージの一部にその代替機能が含まれてたりする可能性はあるのでご注意されたし。
選択系、変換、入力補助(エディタ操作)
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| 矩形選択 | SublimeText的な矩形選択。見たままの四角の範囲を選択可能。 | Sublime-Style-Column-Selection | - |
| 選択範囲を段階ごとに広げる | 選択範囲を文字、単語、クォートや括弧で囲んだ要素、と順々に大きくできる。 | expand-region | expand-region |
| キャレット列のハイライト | - | highlight-column | - |
| キャレット行のハイライト | - | highlight-line | ビルトイン |
| 選択した文字列のハイライト | 選択してるものと同じ文字列をハイライト。 | highlight-selected | - |
| ブラケットハイライト | 対応するブラケットをハイライト | ビルトイン | - |
| ブラケットカラーハイライト | 対応するブラケットごとに色をかえてわかりやすく表示 | bracket-colorizer | Bracket Pair Colorizer |
| 文字ケースの相互変換 | キャメルケースとスネークケースだけでなく、ケバブケースもドット記法なども幅広く対応してるのでうれしい。 | change-case | change-case |
| クォーテーションマークを相互に変換 | シングルクォートとダブルクォートのトグルだけでなく、設定でバッククォートも対応できる。 | toggle-quotes | Toggle Quotes |
| 二元的要素のトグル変換 | true/falseなどをトグルで変換。設定で対応文字列をカスタマイズ可能。 | toggler | toggler |
| タブ-スペース変換 | インデントのタブorスペースをトグル変換。 | tabs-to-spaces | ビルトイン |
| セミコロンやカンマ付与 | 今キャレットがどの列にあろうとも現在の行末にセミコロンとカンマをつける。キーバインドで設定すると捗る。 | trailing-semicolon | toggle semicolon |
| 行末スペース制御 | 行末のスペースを目立たせたり自動で削除したり。Atomはスタイルをカスタムすると良い感じ | trailing-spaces | Trailing Spaces |
| 全角スペース制御 | 全角スペースを強調表示。Atomはスタイルをカスタムすると良い感じ。 | show-ideographic-space | EvilInspector |
| 制御文字の制御 | BackSpaceなど制御文字を削除するフォーマッタ。不意に紛れこむと思わぬバグを起こすのでありがたい。 | - | Remove backspace control character |
| 連番の数字を挿入 | 複数行にわたって一括で連番生成。 | sequential-number | vscode-input-sequence |
| 選択した複数行をソート | 選択した範囲に含まれる複数行をアルファベット順や逆順などでソート | lines | Sort lines |
| カラーコードの部分だけカラー表示 | カラーコードになってる文字列の背景色をその色で表示。CSSとか書くときに便利。StylusやSassの変数も対応してるので重宝する。 | pigments | Color Highlight |
| 正規表現補助 | 正規表現をビジュアルで表示してくれる。 | regex-railroad-diagram | Regex Railroad Diagrams |
| Path入力補完 | Path入力補完、でもたまに邪魔なときがある気がする。 | autocomplete-paths | Path Intellisense |
| 列のフォーマッタ | オブジェクトの定義とか、連続して変数に値を入れるとき、=や:をセパレータとして左右のインデントが揃うようにしてくれるフォーマッタ。言語別のものもある。 | aligner | Better Align |
| インデントフォーマット | ネストした要素のインデントをうまいこと整形してくれるフォーマッタ。JSONとかも良い感じにやってくれたり。けっこういろいろ対応してる。 | atom-beautify | Beautify |
| 高機能マルチカーソル | デフォルトより高機能なマルチカーソル。キーバインドがバッティングしやすいので要カスタム。 | multi-cursor-plus | - |
| キャレットの行移動補助 | 設定した行数文だけキャレットを一気に移動する。Emacsのページ送り的な送り用途として使える。 | line-jumper | line-jumper |
ファイル、タブ、ペイン操作系
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| ペイン自動最大化 | 複数Paneで分割してる時にアクティブなペインを自動的にほぼ最大化する。フォーカスしたペインを自動的に最大化したりもできる。 | hey-pane | - |
| ツリービューのフィルタ | ツリービューで表示しているファイルをインクリメンタルに絞り込む。 | tree-view-filter | - |
| タブの規制 | 最大タブ数の設定制御。設定数を越えると古いタブから自動的に閉じて入れ変わる挙動になる。設定でピン止めしたファイルや、未コミットファイル除外したりもできる。たくさんファイル開きすぎてわかんなくなっちゃうので。 | zentabs | - |
| メソッド定義などのツリー表示 | 定義されたメソッド、変数などをサイドドロワーにツリー表示 | symbols-tree-view | ビルトイン |
| TODOコメントの抽出 | プロジェクト内に存在するTODOやNOTEなどのコメントを抽出して表示。 | todo-show | Todo Tree |
| GHQ連携 | CLIリポジトリ管理ツールghqの管理下にあるプロジェクトのショートカット。全てのプロジェクトがGit管理されていれば、プロジェクトマネージャーはこれだけで十分だと思う。 | douglas | vscode-ghq |
| 変更ファイルの強調 | ツリービュー(エクスプローラー)上でGitステータス▽による色分け表示する。追加ファイルや変更したファイルとかが視覚的にわかりやすいし、未コミットのファイルもみつけやすい。 | tree-view-git-status | ビルトイン |
| ファイルエンコーディング判別 | エンコーディングの自動判別。 | auto-encoding | ビルトイン |
| ファイルエンコーディング変換 | マルチバイトのファイルをutf-8に変換。 | convert-to-utf8 | - |
| FuzzyGrepファイル検索 | プロジェクト内をag的なfuzzyGrepしてファイル表示。 | atom-fuzzy-grep | - |
| ディレクトリごとのファイル操作 | ディレクトリごとに絞り込みでファイルを開ける、フルキーボードで階層ごとに掘っていく場合に便利。 | advanced-open-file | - |
| Expose風タブ操作 | 開いてるタブをmacのexpose的に表示、切り替えできるやつ。 | expose | - |
HyperClick系
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| HyperClick | コード中のいろんな要素がクリッカブルになる。キーバインドにも対応していて対象の文字列にキャレットがあるときはキー操作でも動作する。**-hyperclick系のアドオンとかで拡張可能。言語特化のアドオンは後述の言語別のところで。 | hyperclick | - |
| HyperClickのURL対応 | URLをクリッカブルにしてデフォルトブラウザで開けるようになる。 | hyperlink-hyperclick | ビルトイン |
ミニマップ
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Minimap | サイドドロワーにコード全体をざっと単純化して見わたせるようなやつを表示。他のパッケージで拡張可能。 | minimap | ビルトイン |
| Minimap選択文字列ハイライト | Minimap内で選択した文字を全てハイライト。 | minimap-highlight-selected | select highlight in minimap |
| Minimapを自動で隠す | ミニマップをスクロールしてないとき以外は自動的に非表示 | minimap-autohider | - |
| Mimimap内検索文字列ハイライト | ミニマップ内で検索文字列を全てハイライト。 | minimap-find-and-replace | ビルトイン |
| Minimapカラーコード表示 | ミニマップ内でカラーコード部分をカラー表示。 | minimap-pigments | - |
その他、機能拡張
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| 多人数同時編集 | 他の人とつなげて同時にシェアしながらコーディングできる。モブプロ、ペアプロなどでものすごい活躍する。 | teletype | VS Live Share |
| Atomキーマップコンフィグ | Atomでデフォルトのキーマップに一括で変更する | ビルトイン | Atom Keymap |
| コーディングフォーマットの統一 | EditorConfigの対応。プロジェクトルートに.editorconfigという設定ファイルを置いて制御。 | editorconfig | EditorConfig for VS Code |
| 設定の共有、同期 | GitHubGist経由でエディタの設定、インストールしているアドオン情報を複数端末で同期する。 | sync-settings | Settings Sync |
| ノートテイキング | 検索しやすいノートシステムをエディタに組み込み、メモやスニペットなどの一元管理を自分のカスタマイズしたエディタで編集できるのは強み。Atom版はnotational-velocityライクでかなり使いやすい。 | atom-notes | VSNotes |
| ブラウザ連携 | 同名のGoogleChrome拡張をブラウザに入れることで、ブラウザで開いてるページのテキストエリアを同期的にエディタで編集できるようになる。例えばPull RequestなどMarkdown対応のテキストエリアをエディタで編集できるのはかなり便利。 | atomic-chrome | GhostText |
| ターミナル | エディタ内でターミナルを動作させる | platformio-ide-terminal | ビルトイン |
| CSVエディタ | エディタからCSVを表計算アプリケーションのように表示、編集できる | tablr | Excel Viewer |
| 拡張パッケージ管理 | パッケージにアップデートがあったら自動でアップデートする。ちょいちょい自分で確認しなくていいので楽。 | auto-update-packages | ビルトイン |
| ファイルアイコン | ツリービュー(エクスプローラー)やタブにファイルのアイコンを表示して視認性を上げる。VSCodeでは各種テーマでさらにカスタム可能。 | file-icons | ビルトイン |
| ファイルタイプの判別補助 | 自動で判別されるファイルタイプのルールをカスタマイズを楽にする。 | file-types | - |
| 差分表示、補助 | Paneで分割してDiff表示、見やすい。しかも保存してない状態でもDiffとれるので、長大な文字列とか大きめなオブジェクトを一時的に比較するときも重宝する。 | split-diff | Partial Diff |
| コードプリプロセス | プリプロセッサ言語から元言語へ変換。 | preview | - |
| ステータスアイコン | ステータスバーに状況表示アイコンをプラス。確かAtom用のLinterと一緒に入ってくるはず。 | busy-signal | - |
| ウィンドウタイトルのカスタマイズ | Atomのウィンドウに表示されるタイトルのルールを変更できるようになる。上手く好きなようにファイル名の表示とかにカスタマイズすると地味に便利。 | custom-title | - |
| 定義元にジャンプ | メソッドの定義元にジャンプできるようになる。 | goto-definition | - |
| ステータスバーにファイル名表示 | 現在開いているファイル名とファイルパスをステータスバーに表示 | ビルトイン | Active File In StatusBar |
Linter系(Atomのみ)
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Linter | Linter機能。各言語用のPackageを別途追加が必要。各言語用のLintは後述。 | linter | - |
| Linter表示 | Linter表示用UI。たぶんLinter入れると入ってくるはず。 | linter-ui-default | - |
各言語とか用途とか別
Git
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Git総合サポート | Git周りのこといろいろ | - | GitLens — Git supercharged |
| Git履歴表示 | Git logビューア | git-log | Git History |
| Git変更内容アイコン | AtomにビルトインのステータスバーにGitのファイル変更状況アイコンを表示する | - | Git Indicators |
| gitignoreサポート | gitignore用のシンタックスハイライト | - | gitignore |
| Gist | GitHubのGistを編集したりアップロードしたり、挿入したり。Gist系はいくつかあったけどこれが一番使いやすかった。 | gist | - |
| Git Blame表示 | 行ごとにGitで変更した人を表示する。 | git-blame | GitLens — Git supercharged |
| Git操作ショートカット | よく使うGit操作をAtomから直でできる、Atomのコマンド補完が効くので便利、基本的なgit操作はこれだけでいける。ビルトインのものでも十分だがあると便利 | git-plus | - |
| コンフリクトのサポート | Gitでmergeしようとしてコンフリクトしたときの編集サポート。 | merge-conflicts | ビルトイン |
| ホスティングサービス対応 | GitHubなどのホスティングサービスを開いたり、プルリクエストページを開いたりできる。GitHubだけでなくBitbucketなど他のサービスにも対応しててうれしい | - | Open in GitHub, Bitbucket, Gitlab, VisualStudio.com |
Markdown
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Markdown表示の拡張 | デフォルトのMarkdownプレビューより高機能なプレビュー、TOCやプレゼンモードもあったりする。目次機能もあったり、いろいろと便利。 | markdown-preview-enhanced | Markdown Preview Enhanced |
| 入力補助 | Markdownの全般的な入力補助。とりあえず入れてる。 | markdown-writer | Markdown All in One |
| 目次自動生成 | 編集中のMarkdownの目次を自動生成 | Markdown TOC | Markdown All in One |
| テーブル記法補助 | Markdownのテーブル記法編集補助、うまいこと縦のカラム表示を整えてくれる。 | markdown-table-editor | Markdown All in One |
| テーブル記法補助2 | 別のMarkdownのテーブル記法編集補助 | Markdown Table Formatter | Markdown All in One |
| Markdown目次機能 | ドロワーやエクスプローラーに編集中のMarkdownの目次をページ内リンク付きで表示。 | document-outline | ビルトイン |
| タスク記法のトグル | Markdownのチェックボックス記法のチェック状態のトグル変換。そんなに使わないけどいちいちキャレットを移動するのが面倒なので。 | toggle-markdown-task | Markdown Checkboxes |
| フォーマッタ | 番号付きリスト記法の番号振りなおしなど、フォーマッタ。 | tidy-markdown | - |
| シンタックスハイライト | Atomデフォルトのものより高機能なハイライタ。 | language-markdown | - |
| TextLint | 特に日本語に強い自然言語用のLinter、textlintをAtomで使えるように。Markdown以外でも効く。 | linter-textlint | vscode-textlint |
JSON
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| シンタックスハイライト(階層) | JSONファイルを階層によってカラーリングを変えて視認性を上げる。 | atom-json-color | - |
| フォーマッタ | JSONファイルの整形フォーマッタ。 | pretty-json | JSON Tools |
| Linter | JSON用のLinterアドオン。 | linter-jsonlint | - |
| ソート | JSONオブジェクトをアルファベット順などでソートできる。 | - | Sort JSON objects |
Ruby
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| 総合サポート | - | Ruby | Ruby |
| Hamlサポート | haml用の言語ファイル。 | language-haml | Ruby Haml |
| Slimサポート | Slim用の言語ファイル。 | language-slim | Slim |
| Rspecサポート | Rspec(Rubyのテストフレームワーク)用の言語ファイル。 | language-rspec | rspec-snippets |
| Rablサポート | Rabl(RubyOnRails用のJSONやxmlに特化したテンプレートサポートGem)用の言語ファイル。 | language-rabl | - |
| Linter(RuboCop) | Rubocop用のLinterアドオン。 | linter-rubocop | ruby-rubocop |
| Linter(erb) | erb用Linter | linter-erb | - |
| Linter(Haml) | Haml用Linter | linter-haml | - |
| Linter(Slim) | Slim用Linter | linter-slim | - |
| 入力補完 | Ruby用の入力補完。別途Solagraph Gemのインストールが必要。 | autocomplete-ruby | Ruby Solargraph |
| 自動修正 | Rubocopルールに従って自動修正。 | rubocop-auto-correct | - |
| フォーマッタ | Ruby用フォーマッタのrufoをエディタから実行。JSのprettier用のプラグインのほうが主流になりそうな感じ。 | rufo-atom | rufo (Ruby formatter) |
| Railsサポート | - | - | Ruby on Rails |
| Railsパーシャルビューサポート | Railsのパーシャルビューの自動補完 | autocomplete-rails-partial | - |
| Rspecファイルを開く | 現在開いてるファイルに対応したRspecのファイルを開く。 | rails-open-rspec | - |
| Rspecの実行 | エディタからRspecをrun。 | rspec | Rails Run Specs |
| ブロック文法の補助 | do,if,begenとendなどの対になるブロック要素をハイライト。 | ruby-block | - |
| i18nサポート | Railsのi18n用のAutocompleteとHyperClickアドオンのセット | rails-i18n-plus | - |
| Rails補助 | Rails用のスニペット集。 | rails-snippets | Ruby on Rails |
| Rails補助(ファイル) | Model,View,Controllerなど対応するファイル同士を素早く開けるようにする。 | rails-transporter | - |
JavaScript系(Node.jsやメタ言語、フレームワーク含む)
ちなみにPrettier系入れずにプロジェクトにESlintと統合するeslint-plugin-pretteirを使って統合している。
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| TypeScriptサポート | TypeScriptの言語ファイルか補完や便利機能まで、IDE的サポート。 | atom-typescript | ビルトイン |
| Vue.jsサポート | Vue.js用の言語ファイル。 | language-vue | Vetur |
| Vuc.js入力補完 | Vue.js用Autocompleteアドオン。 | vue2-autocomplete | Vetur |
| ESlint | JavaScript用のLinterであるEslintサポート、prettierと連携も可。 | linter-eslint | ESLint |
| JS用HyperClick | JavaScript用のHyperClickアドオン。 | js-hyperclick | - |
| Vue.js用HyperClickアドオン | Vue.js用HyperClickアドオン。 | vue-hyperclick | - |
| Jestサポート | JS用テストフレームワークJestのサポート | - | Jest |
HTML系(メタ言語含む)
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Pugサポート | - | language-pug | Pug (Jade) snippets |
| HTML用Linter | HTML用Linterアドオン。 | linter-htmlhint | - |
| Pug用Linter | Pug用Linterアドオン。 | linter-pug | - |
| HTMLタグ補完 | HTMLの閉じタグのショートカットと補完。Pugで書けばいらないんだけどね。 | tag | Auto Close Tag |
| Emmetサポート | html,css(プリプロセッサ含む)の強力なスニペット集。 | emmet | ビルトイン |
| インデント記法サポート | Jade(pug)やStylus,Sassのインデントベース記法の環境で、現在のキャレットの位置がどの要素のネスト中なのかツールチップで表示。 | indent-tooltip | - |
CSS系(メタ言語含む)
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Stylusサポート | Stylus用の言語ファイルとスニペット集。 | Stylus | language-stylus |
| Stylus自動補完 | Stylus用のAutocompleteアドオン。 | autocomplete-css-with-stylus-support | - |
| Stylusフォーマッタ | Stylus用フォーマッタSupremacyサポート、かなり柔軟な設定が可能。 | - | Manta’s Stylus Supremacy |
| Stylus用Linter | Stylus用のLinterアドオン。 | linter-stylint | Stylint |
| CSS用Linter | CSS用のLinterアドオン。 | linter-stylelint | stylelint |
| Sass用Linter | SCSS(SASS含む)のLinterアドオン。 | linter-scss-lint | Sass Lint |
PUML
UMLをテキストから表現したもの。
細かいレイアウトは難しいもののテキストならGit管理もできるし素早くかけるので覚えてよかった。
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| PlantUMLサポート | PlantUMLの言語ファイル | language-plantuml | PlantUML |
| PlantUMLビューア | PlantUML用のUMLを表示 | plantuml-viewer | PlantUML |
その他の言語系
| 概要 | 詳細 | Atom Package | VSCode Package |
|---|---|---|---|
| Apache | Apacheのコンフィグ用 | language-apache | Apache Conf |
| nginx | nginxのコンフィグ用 | language-nginx | nginx.conf |
| Lisp | Lispサポート | language-lisp | Lisp |
| envファイル | 環境変数を設定するenvファイルのシンタックスハイライト | DotENV | - |
おしまいに
VSCodeに乗り換えたものの、今もAtomは好きだし、なんとなくVSCodeは好きになれない。もしかしたらあるイベントで好きでAtom使ってるところにかなり無理にVSCodeを勧められた経験からかもしれない(やれ補完がどうとか。それはVSCodeの機能ではなくLanguage Serverだ)
Web上でもVSCode推しみたいのを良く見る。しかもAtomを貶めてまで。エディタは宗派で戦争になるためそういう推し方は好きじゃないんだよなぁ。あ、あれだインド行ったとき、自分の旅の一部としてとても楽しかったけど、インド推ししてる日本人の方々をどうも好きになれなかった感じと似ている。
なんにせよどんなエディタを使おうにもこういう拡張が充実してきてみんなが平和に好きなエディタを心地良く使う世の中がいいよね。