Angular + C# + TypeScript の Visual Studio 環境を一つテンプレ的に持っておく。


# 概要
Angular + C# + TypeScript の環境をVisual Studio で作成して、
最強の開発環境を作りたい、と思いまして、海外のサイトを参考にVSで簡単なものを作りました。
なぜAngularか、というのは、TypeScriptを使いたいから。なぜTSなのか、というのは、強力な型付けと、
静的分析が良いから、です。そして、最強の開発環境で、Visual Studio のパワーを発揮させる、というのが究極の目的です。

手順のもととなるサイト：　http://csharp-video-tutorials.blogspot.com/2017/06/angular-2-tutorial-for-beginners_12.html　

＜やりたいことイメージ図＞
![VS](https://media.giphy.com/media/4QFBnhixlCn0gUiS8Z/giphy.gif)




# やったこと

### インストール系

- [Visual Studio 2017 Community](https://visualstudio.microsoft.com/ja/)
    - 落とし方はいろいろありますが、 MSDN の無料版、DevEssentials に入会してから以下のサイトに行きました。　http://my.visualstudio.com
- Node インストール　[ダウンロードサイト](https://nodejs.org/en/download/)
- TypeScript SDK for Visual Studio 2017 [ダウンロードサイト](https://www.microsoft.com/en-us/download/confirmation.aspx?id=55258)
- github.com/angular/quickstart [githubサイト](https://github.com/angular/quickstart)
- VS のパスの設定$(PATH)を上に持っていく

>In Visual Studio click on Tools - Options.
In the "Options" window, expand "Projects and Solutions" and select "External Web Tools"
In the right pane, move the global $(PATH) entry to be above the internal path $(DevEnvDir) entries. This tells Visual Studio to look for external tools (like npm) in the global path before the internal path.
Click "OK" to close the "Options" window and then restart Visual Stduio for the changes to take effect

 ![](https://1.bp.blogspot.com/-r34mmVFyt5M/WR3-wzXTYjI/AAAAAAAAk_c/kO5p5O30eMA3Rfe78xj-o1INY5PkG9kRwCLcB/s1600/visual%2Bstudio%2Bexternal%2Bweb%2Btools.png) 

### テンプレ作成
- Visual Studio 2017 で、まずは空のプロジェクトを作成
    - Web　⇒　Visual C#　⇒　ASP Net MVC　⇒　空のぺーじ（SPAなどは選ばない）
- 
- AngularのQuickStartのZipファイルのなかから、以下の４つを、VSのソリューションにコピー
    - src folder and it's contents
    - bs-config.json
    - package.json
    - tslint.json
- コピーするとこうなる
    - ![vs](https://4.bp.blogspot.com/-gWkYqStfw7s/WR4BoCyR3HI/AAAAAAAAk_o/xEJ-ruLFJ-o8kXCXHL49NailCLkka9CHgCLcB/s1600/visual%2Bstudio%2B2015%2Bangular%2B2%2Bsetup.png)

- Package.json を右クリックし、リストアする。

![package.json](https://2.bp.blogspot.com/-6mgN4W2VbZw/WR4DI5cER5I/AAAAAAAAk_w/WbrS3YxWLBUAg8EeROeU_sFFPbtF9g0PgCLcB/s1600/installing%2Bangular%2B2%2Bin%2Bvisual%2Bstudio.png)

> Restore the required packages. 
In the "Solution Explorer" right click on "package.json" file and select "Restore Packages" from the context menu. This takes a few minutes to load all the modules. You can see the status in "Visual Studio Output" window. After the restoration is complete, you will see a message "Installing Packages Complete". To see all the installed node modules, click on "Show all Files" icon in Solution Explorer. DO NOT include "node_modules" folder in the project.

### パスをいじる。

まず今のままだと、/src/の下にもろもろある状態なので、パスがずれてしまっています。
試しに、ビルドしてみると、以下の通りエラーとなる。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/f4bafb53-c812-3236-6591-bbb45bbb2f67.png)




#### src/index.html

![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/0d113a9d-fa16-46ab-0aaa-5d89a200a57c.png)

上記のパスを以下の通りに直す（４か所）

```html
  <head>
    <title>Angular QuickStart</title>
    <base href="/src/">
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="styles.css">

    <!-- Polyfill(s) for older browsers -->
    <script src="/node_modules/core-js/client/shim.min.js"></script>

    <script src="/node_modules/zone.js/dist/zone.js"></script>
    <script src="/node_modules/systemjs/dist/system.src.js"></script>

    <script src="systemjs.config.js"></script>
    <script>
      System.import('main.js').catch(function(err){ console.error(err); });
    </script>
  </head>
```

#### src/systemjs.config.js


![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/f6bcfbfc-403c-aed8-b9f1-d752c0b4c762.png)


上記のパスを以下の通りに直す（１か所,　"/" いれるだけ）

```js
(function (global) {
  System.config({
    paths: {
      // paths serve as alias
      'npm:': '/node_modules/'
    },
```
 

直りました。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/0e311c94-8d08-8400-a29e-deb2277ce62e.png)


### この通り、TypeScriptで、開発ができます。

ファイル： src/app\app.component.ts

```js
import { Component } from '@angular/core';

@Component({
  selector: 'my-app',
  template: `<h1>Hello {{name}}</h1>`,
})
export class AppComponent  { name = 'Angular!!'; }
```


![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/27cb4c00-b2d0-7252-0f34-263625f489ca.png)


![image.png](https://qiita-image-store.s3.amazonaws.com/0/60530/5203817b-73a4-7d7e-9412-237a899cf3cd.png)

TypeScriptは、ブラウザがそのまま理解できないので、ビルドしないと修正が反映されないため、
「tsconfig.json」に、ComplieOnSave を入れて、保存の時にCompileしてもらうように一行追加。

追加するのもこの通り、Visual Studio のインテリセンスが書いてくれるので、らくちんです。

![VS](https://media.giphy.com/media/dCCyLnJ07AZisa84JW/giphy.gif)



モジュール追加したときのimport もアシストしてくれます。

![VS](https://media.giphy.com/media/4QFBnhixlCn0gUiS8Z/giphy.gif)


これで、コードが多少大きくなっても、開発が効率的に行うことができます。