VisualStudioでC#＋ASP.NETでWEBサイトを作ってGitで管理する

#イントロ
この記事はプログラミング初心者向けにWEBサイトを作る方法を紹介します。

- 学生（中学生、高校生、大学生）でWEBサイト作ってみたい
- ITコンサルやっててプログラムを触って軽く理解を深めてみたい
- 建設業界だけどIoTとかあるしITの勉強をしたい
- WEB広告やってるけどフロントだけじゃなくてもっと深く理解したい
- Macは持ってなくてWindowsを使っている
 
みたいな感じの人対象です。

Googleで検索するとWEB開発の記事はMac＋Python＋AWSとかの記事が多いです。しかしPCはWindowsしか持ってないという人の向けに、この記事ではWindows＋VisualStudioを使ってC#でWEB開発をやっていきます。

この記事で
- WEBサイトを作って自分でプログラムを修正する
- プログラムの変更をGitで管理する
- 作成したソースコードをGitHubへ公開する

ことができるようになります。

普段はMacで開発してるけどWindowsで開発ってどうやるの？みたいな人も興味本位で読んでいただければ幸いです。VisualStudioは強力なIDEでコマンドライン無しで簡単に開発ができます。では早速作ってみましょう。


#環境の準備
VisualStudioをインストールします。
https://visualstudio.microsoft.com/ja/
![VS2017.png](https://qiita-image-store.s3.amazonaws.com/0/96483/24635e3f-cd84-d373-8dd8-9e2fd1b9c3a5.png)

このページのVisual Studio IDE のCommunity Editionをダウンロードしてインストールしましょう。ちなみに無料です！
（※無料で利用可能な範囲は公式で確認してください。個人使用、小規模企業なら無料なはずです）

インストールが終わったら起動してメニューバーのファイル→新規→プロジェクトを選択します。

![VS_Menu_File_New_Project.png](https://qiita-image-store.s3.amazonaws.com/0/96483/b79e6eda-4091-1886-a111-b9b71dc92c2d.png)

ダイアログが開きます。

![VS_Menu_File_New_Project_Window.png](https://qiita-image-store.s3.amazonaws.com/0/96483/99ca4ec9-0fb8-dc90-6100-3eb155f7fe49.png)

Webを選択しVisualC#→ASP.NET Core Web アプリケーションを選択します。適当に名前（私はWebSiteと入れてみました）を入れます。新しいGitレポジトリの作成にチェックを入れてOKを押すと次はこんな感じのが開きます。

![VS_Menu_File_New_Project_Window2.png](https://qiita-image-store.s3.amazonaws.com/0/96483/a480759a-60ac-758c-e55a-17abc096f474.png)


ゼロから理解するために「空」を選択しましょう。HTTPS用の構成にチェック、認証は認証無しでいきます。

これで作成完了です。F5を押してプログラムを実行してみましょう。メニューバーのボタンでも大丈夫です。（下図）
![VS_Menu_Debug_Start.png](https://qiita-image-store.s3.amazonaws.com/0/96483/ca755533-f623-95f8-fd69-72d4ef32bc05.png)

初めての実行の時は確か「HTTPSの証明書を信頼しますか？」みたいなメッセージが出ると思うので許可します。（※うろ覚えです。もしかしたら出ないかもしれません。）

ブラウザが立ち上がってHello World!と表示されます。
![WebPage1.png](https://qiita-image-store.s3.amazonaws.com/0/96483/aa5dfd0a-c88c-71d8-48f4-4f7a2f33df73.png)

実行しているプログラムを停止するには停止ボタンを押します。

![VS_Menu_Debug_Stop.png](https://qiita-image-store.s3.amazonaws.com/0/96483/3fcc6b54-9ff9-7c9a-baa2-5042554e9a70.png)

プログラムが停止しました。ブラウザを閉じても停止できます。


#プログラムを修正してみる

さてこれからソースコードを修正してみます。ソリューションエクスプローラーをクリックしてStartup.csファイルをダブルクリックします。Startup.csファイルの中身（テキストファイルです）が表示されます。これがプログラムファイルといわれるものです。

![VS_SolutionExplorer.png](https://qiita-image-store.s3.amazonaws.com/0/96483/38c231eb-ac58-21be-de41-4986d2d317a4.png)

```csharp
await context.Response.WriteAsync("Hello World!");
```

の部分を書き換えてみましょう。

```csharp
await context.Response.WriteAsync("Higty, Hello World!");
```

書き換えたらF5を押して実行します。

![WebPage2.png](https://qiita-image-store.s3.amazonaws.com/0/96483/795ad37a-7ec2-ce54-6149-6ee7305326c5.png)

文字が「Higty, Hello World!」に変わりましたね。これであなたは初めてC#のプログラムを修正したということになります。

#プログラムをデバッグする（ブレイクポイントの使い方）

次は現在時刻を表示させてみましょう。現在時刻はDateTime.Now.ToString("yyyy/MM/dd")と書くと取得できます。

```csharp
    app.Run(async (context) =>
    {
        var now = DateTime.Now.ToString("yyyy/MM/dd");
        await context.Response.WriteAsync("Higty, Hello World! " + now);
    });

```

こんな感じで書き直した後にVisualStudioの左端の灰色のところをクリックします。クリックすると茶色になります。
F5を押してプログラムを実行します。すると黄色になってプログラムの実行が一時停止します。
![VS_BreakPoint1.png](https://qiita-image-store.s3.amazonaws.com/0/96483/be82e94b-9d1c-4a53-f9c3-45643ccc4ce4.png)
変数nowにカーソルを合わせるとnowの値が表示されます。
![VS_BreakPoint2.png](https://qiita-image-store.s3.amazonaws.com/0/96483/59e7559b-7e0e-0b8c-d581-2b72445ede8a.png)

まだ値を代入していないのでnull（値が空）です。F10を押すとプログラムが1行だけ実行され、黄色いラインが1行下に進みます。

![VS_BreakPoint3.png](https://qiita-image-store.s3.amazonaws.com/0/96483/b39ba471-8ac6-9ff3-4f76-87510a5ce89f.png)

nowにカーソルを合わせると"2018/12/31"と表示され今日の日にちがセットされているのがわかります。
F5を押すと残りのプログラムが一気に実行されます。

![WebPage3.png](https://qiita-image-store.s3.amazonaws.com/0/96483/8f9b8d15-acce-3e4c-73b6-818078e93be4.png)

現在時刻が表示されました。

##ウォッチウィンドウを使ってみる
他にも画面下のウォッチウィンドウで変数の値を見ることもできます。名前のところにnowと入力すると値が見れるようになります。
![VS_WatchWindow.png](https://qiita-image-store.s3.amazonaws.com/0/96483/0c53ff41-9c9e-66e6-b808-c6ecda94163e.png)

今回は1つの変数だけですが、１つだけではなくいくつかの変数の値をまとめて見たいときはウォッチウィンドウが便利です。
#MVCパターンを使う形に変更する

WEBアプリの作り方の一つでMVCパターンというのがあります。ざっくり言うと

- M モデル。データを表します。ブログのタイトル、投稿時刻、本文とかそういう感じ。
- V ビュー。画面への表示部分のことを言います。
- C コントローラー。URLの管理とデータの取得、加工などを行います。

分けることで大規模プログラムでプログラムのメンテナンスがしやすくなります。保守性、堅牢性、可読性などがUPします。
MVCの役割分担は最初はだいたいで理解しておけば良いでしょう。


さてMVCパターンを使用する形にプログラムを変更していきます。まずはStartup.csファイルのコードを下のように変更します。

```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace WebSite
{
    public class Startup
    {
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            app.UseMvc();
        }
    }
}

```

これでMVCパターンを使う形になりました。services.AddMvc()とapp.UseMvc()がMVCを使うための変更箇所になります。

ソリューションエクスプローラーから右クリックでフォルダを追加しましょう。Controllers,Viewsフォルダを追加します。Viewsフォルダの下にHomeフォルダを追加します。
![VS_SolutionExplorer1.png](https://qiita-image-store.s3.amazonaws.com/0/96483/b2e611e0-a81f-9de3-b620-92df5b3e163c.png)

Controllersフォルダを右クリック→追加→クラスでクラスを追加します。ファイルの名前はHomeController.csにします。コードをこんな感じに書きます。

```csharp

using Microsoft.AspNetCore.Mvc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace WebSite.Controllers
{
    public class HomeController : Controller
    {
        [HttpGet("/")]
        public IActionResult Root()
        {
            return View();
        }
    }
}

```

[HttpGet("/")]の部分がURLを設定している部分になります。

次はViews/Homeフォルダにビューを追加します。Homeフォルダを右クリック→追加→新しい項目で下図のウィンドウが開きます。
![VS_RazorView_Add.png](https://qiita-image-store.s3.amazonaws.com/0/96483/a35f5384-04e9-4258-38d3-678ca77772db.png)

Web→Razorビューを選択し、名前にRoot.cshtmlと入力し追加ボタンを押します。ちなみにRazorビューファイルの拡張子は.cshtmlになります。Root.cshtmlファイルの中身を以下のように変更します。

```html
<div style="font-size:32px;color:#ff0000;">Hello World!</div>
```

F5を押して実行してみましょう。
![WebPage4.png](https://qiita-image-store.s3.amazonaws.com/0/96483/0ceabe1a-89fa-e356-c32d-f16ad253cf94.png)

文字の大きさが32pxで色が赤いHello World!が表示されました。
Root.cshtmlのHTMLをいろいろいじると見た目をいろいろ変えられます。自分でいろいろ変えてみましょう。


#変更をGitレポジトリに保存する
いい感じに変更できたらその変更したファイルを保存しましょう。チームエクスプローラー→変更からGitレポジトリに変更内容を保存できます。
![VS_TeamExplorer_Home.png](https://qiita-image-store.s3.amazonaws.com/0/96483/f3d203c3-6e3a-429d-5399-a7c806ed58f7.png)

コメントに変更内容を書いてどんな変更をしたか履歴に残すことができます。
![VS_TeamExplorer_Change.png](https://qiita-image-store.s3.amazonaws.com/0/96483/7c514326-5101-906f-0c8f-d30e56b64012.png)

会社でエクセルの履歴を残すときとか会社A様_課題管理表_2018_0101.xlsとかで保存してる人も多いのではないでしょうか。そういった変更管理をしてくれるのがGitレポジトリです。ドラクエの冒険の書みたいなものです。

履歴を見るにはブランチ→masterを右クリックでメニューが出てきます。
![VS_TeamExplorer_Branch_Menu.png](https://qiita-image-store.s3.amazonaws.com/0/96483/f5d8befd-3236-47a9-dccd-53bc577ef504.png)

履歴の表示をクリックするとこれまでの変更の履歴一覧が見れます。
![VS_Git_History.png](https://qiita-image-store.s3.amazonaws.com/0/96483/de68ec41-8807-d816-aa90-dea7a9150905.png)

変更をしていい感じになったらコミットする癖をつけておきましょう。PCがフリーズしたりしてせっかくの変更が無に帰すことを回避できます。

#GitHubにソースコードを公開する
作成したソースコードを公開しましょう。全体像はこんな感じです。
![PC_GitHub.png](https://qiita-image-store.s3.amazonaws.com/0/96483/893db948-6513-89b9-4709-49804c02d845.png)

自分のPCでVisualStudioでプログラムを作成しました。そしてその変更履歴をローカルのレポジトリへ保存するところまでやりました。この変更履歴をPushでGitHubへ送信して全世界へソースコードを公開して共有できます。

https://github.com でアカウントを取得します。登録が完了したら、RepositoryタブをクリックしNewボタンをクリックします。
![GitHub_Repository_Tab.png](https://qiita-image-store.s3.amazonaws.com/0/96483/dfc33e47-4c49-afba-699b-1f9c36ad0c49.png)

レポジトリの名前を入力します。私はWebSiteという名前にしてみました。
![GitHub_Repository_Add.png](https://qiita-image-store.s3.amazonaws.com/0/96483/f2045a8d-7e51-ec2b-989e-6198966b50bb.png)

URLをコピーします。
![GitHub_Repository_Setting.png](https://qiita-image-store.s3.amazonaws.com/0/96483/358f7e88-c98c-108e-9c78-fe06e74f0281.png)

VisualStudioのチームエクスプローラー→上部の家のアイコン→同期ボタンを押します。下図の画面が表示されます。
![VS_TeamExplorer_Sync_Menu.png](https://qiita-image-store.s3.amazonaws.com/0/96483/0ce13d75-043a-bb3a-f7e4-80c9ab09f059.png)

Gitレポジトリを発行ボタンを押し、先ほどコピーしたURLを張り付けます。
![VS_TeamExplorer_Sync_Menu1.png](https://qiita-image-store.s3.amazonaws.com/0/96483/346010cd-0020-8660-b61f-0d08cb0b8cd4.png)


公開ボタンを押します。ローカルの変更内容がGitHubへ送信されて公開されます。自分のレポジトリにアクセスしてみましょう。https://github.com/your_account_name/repository_name というURLのはずです。私のはhttps://github.com/higty/WebSite です。
![GitHub_Repository_WebSite.png](https://qiita-image-store.s3.amazonaws.com/0/96483/e781a7ac-74fc-66be-585c-37983254c01c.png)


これで全世界にあなたのソースコードが公開されました。



#まとめ
この記事で1ページだけあるWEBサイトをMVCで作れるようになりました。またGitでソースコードの履歴の管理もできるようになりました。また作成したソースコードを公開して見てもらうことができるようになりました。

次回は
- AzureへWEBサイトをデプロイする
- ドメインを設定する
 

辺りをやる予定です。良かったらフォローしてくださいね。


次回記事を公開しました。
[WEBアプリをAzureへデプロイして公開し独自ドメインを設定する](https://qiita.com/higty/items/995597cf055cf8e2f951)