フロントエンドでも快適に使える！ Visual Studio Code のあれこれ

最近、わたしの周りで Atom や Sublime Text から
Visual Studio Code（以下、VSCode） に乗り換える方が増えて来ています。

調べてみると、割とフロントエンドでもいけてそうな感じだったので…
果たして本当にフロントエンドでも使いやすいエディタなのか？
を検証するために人柱となって、思い切ってインストールして使ってみることにしました。

## 特徴 ##
VSCode の特徴としてはこんな感じです。

- クロスプラットフォーム
- 軽量／高速
- デバッグ機能を内蔵
- 標準で多数の言語をサポート
- IntelliSense サポート
- Git 機能サポート
- 拡張機能による機能や操作性の向上
- タスク機能

日本語に対応していて、Atom よりもサクサク動くのでとても快適です。
愛用しているエディタのキーバインドを拡張機能としてインストールできるので
乗り換えも簡単に行うことができます！

例えば、わたしなんかは Atom を使っていたので
こちらをインストールすることで、ストレスなく乗り換えることができました。

[Atom Keymap - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings)

Atom と同様に複数行検索には対応しておらず…
これどうにかなりませんかね（汗）

## インストール ##
トップページから安定している Stable 版をダウンロードしてきます。

[Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)

Insiders 版は新機能やバグフィックスを先取りしたバージョンですが…
Stable 版よりも動作が不安定だったり、試験的に搭載された機能があったりするのでオススメしません！

VSCode を起動すると、タブ「ようこそ」（ウエルカムページ）が表示されます。
表示されない時はメニューバーより「ヘルプ」＞「ようこそ」をクリックすると表示されます！
ウェルカムページは VSCode が持っている各機能へ簡単にアクセスができます。

<img width="1440" alt="img_welcome01.png" src="https://qiita-image-store.s3.amazonaws.com/0/41801/c0f49ba3-04b4-3886-5e43-76f5054471d0.png">

画面左上にある項目「開始」には、編集を開始するためのリンクがあります。
その下にある項目「最近」には、最近使用したフォルダが表示されます。

項目「ヘルプ」にあるリンクをクリックすると、対応する VSCode ドキュメントや
Web ページがブラウザに表示されます。

画面右側には、項目「カスタマイズ」と「学ぶ」があって
拡張機能のインストールやコマンドパレット、画面説明、対話型のチュートリアルを表示することができます！

## 画面構成 ##

![img_ui01.png](https://qiita-image-store.s3.amazonaws.com/0/41801/b442c6f6-d58b-87d8-1940-794e89f617d4.png)

### アクティビティーバー ###
サイドバーに表示する要素を選択したり、サイドバーの表示／非表示を切り替えるために使用します。
VSCode のアップデートがリリースされたり、拡張機能がアップデートしたりすると通知が表示されます。

### サイドバー ###

ファイルを操作するための「エクスプローラー」やプロジェクトにあるファイル内の検索を行う「検索」など…
何かしらの処理を行うための要素が表示され、これを「ビュー」と呼びます。

例えば、アクティビティーバーでアイコン「エクスプローラー」をクリックすると
サイドバーには「エクスプローラー」ビューが表示されます。

### エディタ ####

作業を行うための主要な要素です。
レイアウトは最大三つまで分割することができます！

デフォルトでミニマップがついています。
プレビューエディタの仕様は Atom と同じです。

### パネル ###

問題、出力、デバックコンソール、ターミナルを表示します。

#### 問題 ####

エラーを表示します。
エラーについては、こんな感じでエクスプローラービューにも表示されます。

![img_error01.png](https://qiita-image-store.s3.amazonaws.com/0/41801/e76d2c5e-cfdf-8569-745a-f58d08bd3aed.png)


#### 出力 ####
タスクを実行した時のログを表示します。

#### デバックコンソール ####
デバッグした時のログを表示します。

#### ターミナル ####
文字通りターミナルです。
「エクスプローラー」ビューにプロジェクトを開いている状態であれば
その場所まで cd した状態でターミナルを開始することができます。

#### ステータスバー ####

左側には、Git 関連の情報、デバッグ実行時のエラーや警告などが表示されます。
右側には、編集中のファイルにおけるカーソル位置、その文字コードと改行コードの種類
ファイルの種類、VSCode のレスポンスを入力する画面を開くアイコン、通知アイコンを表示します。

通知では、エラーを表示するに止まらず
作業をしている途中で便利な拡張機能をリアルタイムで提案してくれます。

例えば、タスクマネージャーで Nunjucks を使っている場合は、ファイルを選択したタイミングで
.njk 拡張子を元にこちらの拡張機能を提案してくれました。

[Nunjucks - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ronnidc.nunjucks)


## ショートカット ##

- サイドバー
- クイックオープン
- コマンドパレット
- パネル
- ユーザー設定
- キーボードショートカット
- 配色テーマ

### サイドバー ###

・エクスプローラー（Explorer）
[Command] + [Shift] + [E]

・検索（Find）
[Command] + [Shift] + [F]

・ソース管理（Git）
[Control] + [Shift] + [G]

・デバッグ（Debug）
[Command] + [Shift] + [D]

・拡張機能（eXtension）
[Command] + [Shift] + [X]

### クイックオープン ###

[Command] + [P]

ファイルを検索して直接開くことができます。

### コマンドパレット ###

[Command] + [Shift] + [P] or [F1]

コマンドを検索して実行できます！
入力する最初の文字によって動作が変わります。

コマンド：「>」
行移動：「:」

### パネル ###

・問題
[Command] + [Shift] + [M]

・出力
[Command] + [Shift] + [U]

・デバッグコンソール
[Command] + [Shift] + [Y]

・ターミナル
[Control] + [Shift] + [@]

### ユーザー設定 ###

[Command] + [,]

### キーボードショートカット ###

[Command] + [K] [Command] + [S]

### 配色テーマ ###

[Command] + [K] [Command] + [T]


## カスタマイズ ##

- ユーザー設定
- ワークスペース設定
- キーボードショートカット
- スニペット
- 拡張機能（エクステンション）
- 配色テーマ
- ファイルアイコンのテーマ

### ユーザー設定 ###

ユーザーごとの設定を行うことができます。

メニューより、「Code」＞「基本設定」＞「設定」をクリックする
もしくは
 [command] + [,]

<img width="1153" alt="img_setting01.png" src="https://qiita-image-store.s3.amazonaws.com/0/41801/c37f0951-8833-7712-6ac0-7827bda51cfb.png">

左側にあるタブ「規定の設定」はデフォルトの設定になります。ここは基本的にいじりません。
右側にあるタブ「ユーザー設定」でデフォルトの設定に対してユーザーの設定を上書きをします。

### ワークスペース設定 ###
フォルダ／マルチルートワークスペースごとに固有の設定を行うことができます。

メニューより、「Code」＞「基本設定」＞「設定」をクリック
もしくは
[command] + [,]

### キーボードショートカット ###

ショートカットの設定を行うことができます。

メニューより、「基本設定」＞「キーボード ショートカット」をクリック
もしくは
[command] + [K] [command] + [S]

![img_keyboard01.png](https://qiita-image-store.s3.amazonaws.com/0/41801/c4fc9921-4546-9247-c899-12d18c61df39.png)

項目をマウスオーバーすると左側に表示されるアイコン（ボタン）をクリックして編集しましょう！
keybindings.json ファイルを直接編集することもできますが…
キーボードショートカットエディタを使ったほうがミスが少ないと思います。

ただし、条件やキーコンビネーションを設定する場合は、keybindings.json を編集する必要があります。
そして… キーバインドの削除は json からしかできないようです。

[Remove a keyboard shortcut from VSCode - Stack Overflow](https://stackoverflow.com/questions/43184034/remove-a-keyboard-shortcut-from-vs-code?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)

### 拡張機能 ###

好みの拡張機能を探してきてインストールすることができます。

アクティビティーバーより、アイコン「拡張機能」をクリック
もしくは
[command] + [shift] + [X]

<img width="260" alt="img_extension01.png" src="https://qiita-image-store.s3.amazonaws.com/0/41801/c48c6d16-1031-8e07-6ccb-942de244a528.png">

ウィンドウやエディタの構文ハイライト、配色を変更できるテーマ、アイコンテーマの拡張機能など…
自分の好きなテキストエディタと同じ使い勝手にできる、かつさらに便利にできる拡張機能が
豊富に揃っています。

拡張機能を編集したら、ウィンドウの再読み込みが必要です。

配色を変更できるテーマをインストールするには
拡張機能の検索ボックスに「category:themes」を入力してインストールします。
配色テーマより、インストールしてきたテーマを有効化します。

メニューより、「Code」＞「基本設定」＞「配色テーマ」でテーマを有効化
もしくは
[command] + [K] [command] + [T] でテーマを有効化する

## おすすめ拡張機能 ##

自分のパソコンにインストールされているアプリケーションを元におすすめしてくれます（すげー！）。
拡張機能の検索バーから探すこともできますが、サイトからも検索することができます。

[Extensions for Visual Studio family of products | Visual Studio Marketplace](https://marketplace.visualstudio.com/vscode)

### デフォルトで既にあるもの ###

- UI の日本語化
- ミニマップ
- スクロールに検索で抽出された文字を表示
- スクロールに git の diff を表示
- スクロールに 選択した行をハイライト
- ファイルパスの自動補完
- カラーコードのカラーを視覚化
- option を押しながらリンクをクリックすると…リンク先がブラウザで開けちゃう
- Emmet
- スニペット

だがしかし… Emmet は、略語展開以外はキーバインドが規定で設定されてないので
自分でカスタマイズが必要です。

[Command] + [K] [Command] + [S] でキーボードショートカットを開いて
検索ボックスに「Emmet」と入力して、必要なものにショートカットの割り当てを行いましょう！


### Atom Keymap ###

Atom のショートカットを割り当てることができます。
こちらはウェルカムページで VSCode から提案してもらった拡張機能です。

[Atom Keymap - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ms-vscode.atom-keybindings)

### zenkaku ###

全角スペースだけを ■ で表示してくれます。

[zenkaku - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=mosapride.zenkaku)


### Trailing Spaces ###

行末の半角スペースを強調、削除してくれます。

[Trailing Spaces - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=shardulm94.trailing-spaces)

### EvilInspector ###

行末の全角スペースを強調してくれます。

[EvilInspector - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=saikou9901.evilinspector)


### Auto Complete Tag ###

HTML タグを自動的に補完してくれます。

[Auto Complete Tag - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-complete-tag)

上記は Auto Rename Tag と Auto Close Tag を含んだ拡張機能です。

[Auto Rename Tag - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag)

[Auto Close Tag - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-close-tag)

### Nunjucks ###

Nunjucks ファイルを補完してくれるようになります。

[Nunjucks - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=ronnidc.nunjucks)

### CSS Peek ###
HTML の class, id から元の CSS を確認・編集できます。

[CSS Peek - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=pranaygp.vscode-css-peek)

#### ショートカット ####
・Peek：cssファイルをインラインで読み込んですぐにすばやく編集
[Ctrl] + [Shift] + [F12]

・Go To：cssファイルに直接ジャンプするか、新しいエディタで開く
[F12]

・Hover：シンボルの上にカーソルを置いて定義を表示する
[Ctrl] + hover

### File Peek ###
Typescript および Javascript のコードの編集を拡張できます。

[File Peek - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=abierbaum.vscode-file-peek)

### Markdown All in One ###
マークダウンのありとあらゆるものを自動的に補完してくれます。

[Markdown All in One - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one)

#### ショートカット ####

・プレビューを開く
[Command] + [K] [V]

### Markdown Checkbox ###

Markdown で TODO リストを作成できます。
細かいタスクをテキストで箇条書きで管理している場合にとても便利です。

[Markdown Checkbox - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=PKief.markdown-checkbox)

#### ショートカット ####

・チェックボックスを作成
[Command] + [Shift] + [C]

・チェックボックスを ON/OFF
[Command] + [Shift] + [Enter]

### Paste Image ###

クリップボードにコピーしている画像を Markdown へ貼り付けができます。
設定で画像の保存先やファイル名のフォーマットなどを指定できます。

[Paste Image - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=mushan.vscode-paste-image)

### EditorConfig for VSCode ###

EditorConfig を設定することができます。

[EditorConfig for VSCode - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig)

### Material Icon Theme ###

割と広い範囲でカバーできているアイコンセットです。

[Material Icon Theme - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme)

#### 設定方法 ####
１）コマンドパレット（Ctrl + Shift + P）で「file icon」を入力します。
２）一覧から設定したいアイコンを選択します。

### Project Manager  ###

プロジェクトを登録して素早く開くことができます。

[Project Manager - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=alefragnani.project-manager)

#### 使い方 ####
１）コマンドパレットの表示（[Ctrl] + [Shift] + [P]）します。
２）「project manager」を入力中に候補が表示される。
３）矢印キーでおこないたいものまで移動し実行します。

### Prettier - Code formatter ###
JavaScript / TypeScript / CSS を自動的に整形してくれます。

[Prettier - Code formatter - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode)

#### 注意点 ####
HookyQR.beautify や taichi.react-beautify をインストールしている場合は競合する可能性があるようです。
設定ファイルの優先順位このような感じです。

「Prettier の設定ファイル」＞「.editorconfig」＞「Prettierのデフォルトの設定ファイル」

#### 使い方 ####
１）Prettier の設定ファイルを用意します。
２）整形したいドキュメント開くか、またはソースを選択します。
３）コマンドパレット（[Command] + [Shift] + [P]）で整形します。

### Git History ###

ツリー表示や差分表示など履歴をわかりやすく表示してくれます。
ブランチやコミット間の差分の比較ができたりします。

[Git History - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory)

#### 使い方 ####

コマンドパレット（[Command] + [Shift] + [P]）で任意のコマンドを選択します。

- Gitの履歴を表示する（git log）（git.viewHistory）
- ファイルの履歴を表示する（git.viewFileHistory）
- ライン履歴を表示する（git.viewLineHistory）

その他、必要なコマンドは VSCode のキーバインドから設定できます。


### TODO Highlight ###

ファイルに記載している TODO を出力に一覧で表示してくれます。
該当する記述へのジャンプは後述の Mark Jump にお任せします。

[TODO Highlight - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=wayou.vscode-todo-highlight)


### Mark Jump ###

エクスプローラーに「Mark Jump」が表示され、TODO を一覧で表示してくれます。
一覧から任意の項目をクリックすると、該当箇所にジャンプしてくれます。

[Mark Jump - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=spywhere.mark-jump)

#### ショートカット ####

・プロジェクト内の全てのマークにジャンプする
[Command] + [Ctrl] + [P]

・全てのマークにジャンプする
[Command] + [Ctrl] + [M]

・現在のエディタ内で全てのセクションマークにジャンプする
[Command] + [Ctrl] + [S]

・全ての TODO にジャンプする
[Command] + [Ctrl] + [T]

・全ての NOTE にジャンプする
[Command] + [Ctrl] + [N]

・前のマークにジャンプする
[Command] + [Ctrl] + [,]

・前のマークにジャンプする
[Command] + [Ctrl] + [.]

### Bookmarks ###

ブックマークを作成することができます。

[Bookmarks - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=alefragnani.Bookmarks)

#### ショートカット ####
・ブックマークを追加 & 削除する
[Command] + [Option] + [K]

### Indentation Level Movement ###

同じインデント先へジャンプすることができます。

[Indentation Level Movement - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=kaiwood.indentation-level-movement)

#### ショートカット ####
・インデントレベルで垂直に上へ移動する
[Option] + [Up]

・インデントレベルで垂直に下へ移動する
[Option] + [Down]

・インデントレベルで垂直に上へ選択する
[Option] + [Shift] + [Up]

・インデントレベルで垂直に下へ選択する
[Option] + [Shift] + [Down]

### Code Outline ###

「エクスプローラー」ビューにアウトラインを表示してくれます。

[Code Outline - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=patrys.vscode-code-outline)

アウトラインをクリックすると該当の行に飛んでくれる優れものです！
HTML、JavaScript、Markdown 等… いろんな言語に対応しています。
ただし、Nunjucks には対応しておらず＞＜

Markdown のアウトラインは拡張機能「Markdown All in One」にも搭載されているので
「エクスプローラー」ビューにアウトラインの表示が2つになります。

Markdown のアウトラインに限っては、拡張機能「Code Outline」よりも
「Markdown All in One」の方が見やすいと思います。
Markdown だけ除外したいのですが、やり方がわからず… orz

どうしても煩雑に見えて仕方がないということであれば
拡張機能「Markdown All in One」のアウトライン表示をオフにする形で
ユーザー設定にてこちらを追記してあげましょう。

```
"markdown.extension.showExplorer": false
```

### Settings Sync ###
Gist を使って設定をバックアップすることができます。

[Settings Sync - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=Shan.code-settings-sync)


#### ショートカット ####
・設定をアップロードする
[Shift] + [Option] + [U]

・設定をダウンロードする
[Shift] + [Option] + [D]

#### 使い方 ####

プラグインのページを参考に設定します。
エディタの設定を複数の環境で共有したい場合は
アクセストークンを発行の際にメモをしておくことをオススメします。

こんな感じになります。

[Visual Studio Code Settings Sync Gist](https://gist.github.com/usako1124/d101eae9b5b9568bec85f46095106312)

### Regex Previewer ###

正規表現をプレビューすることができます。

[Regex Previewer - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=chrmarti.regex)

#### ショートカット ####
・正規表現のライブをオン & オフする
[Command] + [Option] + [M]

#### 注意点 ####

使用する前にエディタの言語設定をサポートされている言語に変更する必要があります。

### Extension Leaderboard ###

人気の拡張機能を見つけやすくします。

[Extension Leaderboard - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=formulahendry.extension-leaderboard)

#### ショートカット ####
・ボードを開く
[Control] + [Option] + [L]

### sftp ###

SFTP を同期することができます。

[sftp - Visual Studio Marketplace](https://marketplace.visualstudio.com/items?itemName=liximomo.sftp)

#### 使い方 ####

１）[Command] + [Shift] + [P] でコマンドパレットを開きます。
２）コマンドパレットに「sftp」と入力して config ファイルを作成します。

```
{
    "protocol": "sftp",
    "host": "hoge.com",
    "username": "data",
    "privateKeyPath": "/Users/usako/.ssh/data@hoge.com.pem",
    "port": 2922,
    "remotePath": "/home/data/httpdocs/usako/sftp_test",
    "uploadOnSave": true,
    "syncMode": "update",
    "ignore": [
        "**/.vscode/**",
        "**/.git/**",
        "**/.DS_Store"
    ]
}
```

プロパティ「uploadOnSave」の値を「true」にすることで
常に同期されている状態になっています。

プロパティ「syncMode」の値を「update」にすることで
サーバーとローカルにある同一ファイルのみ同期してくれるようになります。

注意したいのが… コマンド「SFTP: Sync To Remote」 を実行してしまうと
ローカル側のデータがサーバー側に反映されます。

サーバー側のデータが最新である場合は
予めコマンド「SFTP: Sync To Local」を実行するようにしましょう。

これにより、間違えてサーバー側をローカル側のデータで上書きしたり
データが吹っ飛んだりするのを防ぎます。

[Visual Studio Code: SFTPでファイルを同期する | しびら](http://yamada.daiji.ro/blog/?p=1112)

## さいごに ##

この記事を書き始めてから3ヶ月ほど経っているのですが…
今のところはなんの不便もなく、むしろ快適すぎて
長く使っていた Sublime Text や Atom にはもう戻れない…

もっとこうあれば使いやすいのに…というものは
デフォルト機能や拡張機能を調べればいくらでも情報が出てきます。

日々更新されている Visual Studio Marketplace の拡張機能は
新たな発見と出会いがあって、見に行くだけでもとっても楽しいです。

ながーーーーくなりましたが…
一人でも多くの方が VSCode に興味を持っていただけると嬉しいです！

## 参考 ##
- [Visual Studio Code - Code Editing. Redefined](https://code.visualstudio.com/)
- [Visual Studio Codeの使い方、基本の「キ」：特集：Visual Studio Code早分かりガイド - ＠IT](http://www.atmarkit.co.jp/ait/articles/1507/10/news028.html)
- [Visual Studio Codeチートシート - Qiita](https://qiita.com/buchiya4th/items/c2da23d82059a07e744d)
- [Visual Studio Code チートシート - Qiita](https://qiita.com/aoinu/items/681f932ce0b162cd9520)
- [VSCode の便利なショートカットキー - Qiita](https://qiita.com/12345/items/64f4372fbca041e949d0)
- [VSCodeの拡張機能 おすすめ(8/14更新) - Qiita](https://qiita.com/EbXpJ6bp/items/4b87a092a3d6a0ecf595)
- [Remove a keyboard shortcut from VSCode - Stack Overflow](https://stackoverflow.com/questions/43184034/remove-a-keyboard-shortcut-from-vs-code?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa)
- [Visual Studio Code: SFTPでファイルを同期する | しびら](http://yamada.daiji.ro/blog/?p=1112)