Visual Studio CodeでJavascriptの開発環境を構築する

# 概要

Visual Studio CodeでJavascript(Node.js)の開発環境を構築したメモです。


**環境**

* Windows7 (64bit)
* Visual Studio Code 0.10.1
* Node.js v4.2.2

**参考**

* [Visual Studio Code] (https://code.visualstudio.com/)
* [TSD] (http://definitelytyped.org/tsd/)
* [DefinitelyTyped/tsd - Github] (https://github.com/DefinitelyTyped/tsd)
* [ESLint Rules] (http://eslint.org/docs/rules/)
* [How to Import Intellisense files into vsCode (Visual Studio Code)] (http://stackoverflow.com/questions/29975036/how-to-import-intellisense-files-into-vscode-visual-studio-code)
* [Visual Studio Code for Node.js Development] (http://eladnava.com/visual-studio-code-nodejs-development/)


## 準備

### Visual Studio Code

[Visual Studio Code] (https://code.visualstudio.com/)よりインストーラをダウンロードしてインストールします。

#### 設定

Visual Studio Codeを起動しメニューバーの"File" → "Preferences" → "User Settings"を選択します。
今回は下記の内容で`settings.json`を作成しました。

```js:settings.json
// Place your settings in this file to overwrite the default settings
{
  "editor.fontFamily": "'Migu 1M'",
  "editor.renderWhitespace": true,
  "editor.tabSize": 2,
  "editor.insertSpaces": true
}
```

設定の意味は

* editor.fontFamily : 使用するフォントに`Migu 1M`を指定します。
* editor.renderWhitespace : `true`で半角スペース、タブを描画します。
* editor.tabSize : インデントのサイズを2に指定します。
* editor.insertSpaces : `true`でインデントに半角スペースを使用します。


#### eslint extension

Visual Studio Codeでeslintを使用するにはeslintパッケージの他に、Visual Studio Codeのeslint extensionが必要です。

Visual Studio Code上で<kbd>F1</kbd>を押してコマンドパレットを表示し、入力欄に"ext install"と入力して<kbd>ENTER</kbd>を押します。

![e01.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c5ab46fc-ecab-d554-b607-e84f41199dd1.png)

extensionの一覧が表示されます。

![e02.png](https://qiita-image-store.s3.amazonaws.com/0/22772/bd9dd6fd-78d2-407a-33a2-85c5d7fd48dc.png)

続いて"eslint"と入力するとeslintが表示されるので選択してインストールします。

![e03.png](https://qiita-image-store.s3.amazonaws.com/0/22772/82b3ba7b-eb2e-4b97-7579-6dd7bdcb25da.png)

インストールが成功したらVisual Studio Codeを再起動します。

![e04.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d6b527fb-a486-b1f3-8309-96e0f4f60a8c.png)


### tsd

コード補完にtsd(TypeScriptの型定義ファイル)を使用するのでtsdをインストールします。

```bat:install
> npm install tsd -g
```

```bat:version
> tsd --version

>> tsd 0.6.5
```

### eslint

構文チェックにeslintを使用します。(Visual Studio Codeはデフォルトで組み込み構文チェック機能があるので必須ではありません。)

```bat:install
> npm install eslint -g
```

```bat:version
> eslint -v
v1.9.0
```


## プロジェクトの作成

プロジェクトディレクトリを作成します。

```bat
> mkdir demo
> cd demo
```

```bat
> npm init --yes
```


### プロジェクトの設定

Visual Studio Codeのメニューから"File" → "Open Folder..."を選択し、上記で作成したプロジェクトディレクトリを開きます。
プロジェクトのルートディレクトリに下記の内容で`jsconfig.json`ファイルを作成します。

```json:jsconfig.json
{
  "compilerOptions": {
    "target": "ES6",
    "module": "commonjs"
  }
}
```

* target : ECMAScriptのバージョンをES3、ES5、ES6より選べます。
* module : 外部モジュールのコンパイル形式をcommonjs、amd、system、umdより選べます。モジュールにnpmを使用する場合はcommonjsを選択します。


### パッケージのインストール

デモプログラムで使用する下記のパッケージをインストールします。

**moment**

```bat
> npm install moment --save
```

**lodash**

```bash
> npm install lodash --save
```

### TypeScript Definitionのインストール

インストールしたnpmパッケージのTypeScript Definition File(型定義ファイル)をインストールします。このファイルをインストールすることでコード補完を利用することができます。
利用したいパッケージの型定義ファイルがあるか[TSD TypeScript Definition manager for DefinitelyTyped] (http://definitelytyped.org/tsd/)で調べることができます。

**node**

```bat
> tsd install node --save

 - node / node

>> running install..

>> written 1 file:

    - node/node.d.ts
```

**moment**

```bat
> tsd install moment --save

 - moment    / moment
   -> moment > moment-node

>> running install..

>> written 2 files:

    - moment/moment-node.d.ts
    - moment/moment.d.ts
```

**lodash**

```bat
> tsd install lodash --save

 - lodash / lodash

>> running install..

>> written 1 file:

    - lodash/lodash.d.ts
```

インストールするとtypingsディレクトリに下記のファイルが作成されます。

* typings/tsd.d.ts
* typings/lodash/lodash.d.ts
* typings/moment/moment.d.ts
* typings/moment/moment-node.d.ts
* typings/node/node.d.ts

`tsd.d.ts`ファイルにはインストールしたTypeScript Definition fileが記録されます。

```ts:tsd.d.ts
/// <reference path="node/node.d.ts" />
/// <reference path="moment/moment-node.d.ts" />
/// <reference path="moment/moment.d.ts" />
/// <reference path="lodash/lodash.d.ts" />
```


### eslintの設定

デフォルトで組み込みの構文チェックが有効になっていますが、eslintを使用するように変更します。

#### .eslintrcを作成

プロジェクトディレクトリで下記のコマンドを実行して構文チェックのルールを作成します。

```bat
> eslint --init
? What style of indentation do you use? Spaces
? What quotes do you use for strings? Double
? What line endings do you use? Windows
? Do you require semicolons? Yes
? Are you using ECMAScript 6 features? Yes
? Where will your code run? Node, Browser
? Do you use JSX? No
? What format do you want your config file to be in? JSON
Successfully created .eslintrc file in D:\dev\node_workspace\demo
```

一部修正を加えて下記のファイルを作成しました。

```text:.eslintrc
{
    "rules": {
        "indent": [2, 2],
        "quotes": [2, "double"],
        "linebreak-style": [2, "windows"],
        "semi": [2, "always"],
        "no-console": [1],
        "no-var": [2]
    },
    "env": {
        "es6": true,
        "node": true,
        "browser": true
    },
    "extends": "eslint:recommended"
}
```

#### settings.jsonを編集

Visual Studio Codeのメニューから"File" → "Preferences" → "Workspace Settings"を選択します。
settings.jsonに下記の2行を追加してeslintを有効化します。

```js
// Place your settings in this file to overwrite default and user settings.
{
  "eslint.enable": true,
  "javascript.validate.enable": false
}
```

* eslint.enable : `true`でeslintを有効化します。
* javascript.validate.enable : `false`で組み込みの構文チェック機能を無効化します。


### 機能の確認

Visual Studio Codeのコード補完やコード編集機能を確認しました。なおdebug ~~やgitとの連携もできるようですが今回~~ は割愛します。
(gitとの連携について補足しました。)

#### 画面構成

![v01.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c6aeb3ac-bdaf-e7d1-ff8c-8e4c2a0170f5.png)

**View Bar**

View Barのアイコンをクリックすること(またはショートカットキー)でViewを切り替えます。Viewには下記の種類があります。

* Explore : Exploreビューではプロジェクトのディレクトリやファイルを一覧表示します。
* Search : Searchビューではプロジェクトの中から指定したキーワードでファイルを検索します。
* Git : Gitビューでは変更されたファイルを表示したり、いくつかのGitコマンドを実行することができます。
* Debug : Debugビューではデバッグの実行とデバッグ情報を表示します。


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

<kbd>F1</kbd>を押すとコマンドパレットを開きます。ここにキーワードを入力すると関連するコマンドの絞込みが行えます。

![e18.png](https://qiita-image-store.s3.amazonaws.com/0/22772/830113e7-00b4-8e1f-70da-0a518e0fa7a1.png)

`?`を入力するとヘルプを表示します。

![e19.png](https://qiita-image-store.s3.amazonaws.com/0/22772/61642c2b-ceff-953d-60ce-48c8f21ac12f.png)


#### コード補完

ファイルの先頭に下記の行を追加するとインストールした型定義ファイルを使用してコード補完ができるようになります。

```js
/// <reference path="typings/tsd.d.ts" />
```

下図の例はNode.jsのコード補完です。

![e10.png](https://qiita-image-store.s3.amazonaws.com/0/22772/df29ff0d-811c-adf9-b46e-28bb521e974a.png)

![e11.png](https://qiita-image-store.s3.amazonaws.com/0/22772/dc9f16ea-d38a-f0fc-1872-343521209473.png)

インストールしたmomentパッケージのコード補完もできます。

![e06.png](https://qiita-image-store.s3.amazonaws.com/0/22772/e41aa1cc-fed5-46a3-3037-7d0dda3920f7.png)


#### 名前の一括置換

変数名や関数名など一括置換したい名前をフォーカスし(カーソルを合わせます)、

![e07.png](https://qiita-image-store.s3.amazonaws.com/0/22772/72746cc2-802b-344e-73ca-92723460c0f0.png)

<kbd>F2</kbd>を押して新しい名前を入力します。

![e08.png](https://qiita-image-store.s3.amazonaws.com/0/22772/ad3cd198-4568-47f4-e2f4-4b2ba22f41e0.png)

![e09.png](https://qiita-image-store.s3.amazonaws.com/0/22772/554c11d9-7d70-21a2-9d1e-0ddf3a87c4a6.png)


#### 定義元へジャンプ

変数名や関数名をフォーカスした状態で<kbd>F12</kbd>を押す（または<kbd>Ctrl</kbd>を押しながらクリックする)と、定義元へジャンプします。


#### 参照元の一覧

変数名や関数名をフォーカスした状態で<kbd>Shift + F12</kbd>を押すと、それを参照しているコードを確認でき<kbd>↑</kbd>、<kbd>↓</kbd>で移動することができます。

![e13.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c5c20f88-5df4-03cd-ad64-2fa47240b83e.png)

![e12.png](https://qiita-image-store.s3.amazonaws.com/0/22772/6a74ceec-1e45-ee89-9cb6-f42639490251.png)


#### lint

この例では構文チェックにeslintを使用しています。
`.eslintrc`で設定したルールが適用されエラー箇所には赤い下線（警告は緑の下線)が表示されます。そこへマウスカーソルを合わせると内容を確認することができます。

下図は5行目の`var`にマウスカーソルを合わせた状態です。

![e17.png](https://qiita-image-store.s3.amazonaws.com/0/22772/531421bc-e3cb-25c3-9f4d-4435a1daccc0.png)

また、コマンドパレットを開き、`!`を入力すると発生しているエラーや警告を一覧で確認することができます。

![e20.png](https://qiita-image-store.s3.amazonaws.com/0/22772/86366087-d40f-0c49-e96d-5103c92db3f4.png)


#### 改行コードの変更

<kbd>F1</kbd>でコマンドパレットを開いて"change"と入力し、表示された候補から"Change End of Line Sequence"を選択します。

![e05.png](https://qiita-image-store.s3.amazonaws.com/0/22772/a23b3f32-3114-8ed3-b82d-f402be6f727a.png)

![e14.png](https://qiita-image-store.s3.amazonaws.com/0/22772/afee5e89-0856-13b5-5a8c-5a0a3c4cd6a0.png)

あるいは、エディターの右下に表示されている改行コードのマークをクリックすると変えることができます。

![e15.png](https://qiita-image-store.s3.amazonaws.com/0/22772/43b9bec1-c428-58dd-7fb0-4c598054025d.png)


#### Git

クライアントにGitがインストールされていればVisual Studio Code上でリポジトリの作成や変更したファイルのaddやcommitが行えます。

まだプロジェクトがGitリポジトリ化されていない場合、Gitメニューの"Initial git repository"ボタンをクリックすると`.git`ディレクトリが作成されプロジェクトがgitリポジトリ化されます。

![e21.png](https://qiita-image-store.s3.amazonaws.com/0/22772/adc7c9f3-8642-0f2f-29f6-dabb29be7475.png)

CHANGESの右側にある+マークをクリックすると一覧表示されているファイルを全てステージングエリアに追加します。
個別に追加したい場合はそれぞれのファイルの右側にある+マークをクリックします。(下図では見えませんがカーソルをファイル名に合わせるとマークが表示されます。)

![e22.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c0baac8e-e096-a88d-f39b-cdabd9af2126.png)

add後

![e23.png](https://qiita-image-store.s3.amazonaws.com/0/22772/b5e1e2ed-3192-79cc-8c56-29844d117b0b.png)

ステージングエリアのファイルをコミットするにはコミットメッセージを入力し、GITの右側にあるチェックマークをクリックします。

![e24.png](https://qiita-image-store.s3.amazonaws.com/0/22772/78205b02-ed99-4089-6f25-4ed2460b617a.png)

Git管理下のファイルを編集すると行頭に青い線が表示されます。
(この例では7行目と11行目です。)

![e25.png](https://qiita-image-store.s3.amazonaws.com/0/22772/a2a55e65-a817-05e6-6f1b-4971a423fe14.png)

Gitメニューの変更されたファイルをクリックするとdiffが表示されます。

![e26.png](https://qiita-image-store.s3.amazonaws.com/0/22772/73de4e9b-ed8e-56e6-9195-1fcfe6d9cb1d.png)


#### キーバインド

よく使いそうなキーバインドをピックアップしました。
すべての設定はVisual Studio Codeのメニューから"File" → "Preferences" → "Keyboard Shortcuts"で確認できます。

|key                           |description                        |
|:-----------------------------|:----------------------------------|
|<kbd>F1</kbd>                 |コマンドパレットを表示               |
|<kbd>F2</kbd>                 |フォーカスしている変数や関数の名前を一括変更    |
|<kbd>Alt + Shift + F</kbd>    |コードフォーマット                  |
|<kbd>Alt + ←</kbd>            |戻る |
|<kbd>Alt + →</kbd>            |進む |
|<kbd>Ctrl + P</kbd>           |最近開いたファイルの一覧を表示        |
|<kbd>Shift + F12</kbd>        |フォーカスしている変数や関数の参照元を表示      |
|<kbd>Ctrl + Alt + ↑</kbd>     |マルチカーソル                      |
|<kbd>Ctrl + Alt + ↓</kbd>     |マルチカーソル                      |
|<kbd>Ctrl + \</kbd>           |ウィンドウの分割                    |
|<kbd>Ctrl + /</kbd>           |現在行をコメントアウト               |