Azure DevOps Tips - Visual Studioで新規作成したソリューションをAzure Reposで管理する

#概要
ソース管理やCI/CDのために、Microsoftが提供するサービス「Azure DevOps」を使うにあたって、
Visual Studioで作成したソリューションをAzure Reposで管理する手順の備忘録。

Visual Studioのどこのメニューをどう操作して、
ソースコードをAzure Reposに格納するのか、
初期手順などがパっと見当たらなかったんですよね・・・。

今回はVisual Studioで新規作成したソリューションをAzure Reposで管理するための、
Visual Studio側のとりあえずの手順をまとめてます。


#Azure DevOps、Azure Reposについて
Microsoft社のページはこちら
・[Azure DevOps](https://azure.microsoft.com/ja-jp/services/devops/)
・[Azure Repos](https://azure.microsoft.com/ja-jp/services/devops/repos/)

Docsページリンク（英語）
・[Azure DevOps documentation](https://docs.microsoft.com/ja-jp/azure/devops/?view=azure-devops)
・[Azure Repos Documentation](https://docs.microsoft.com/ja-jp/azure/devops/repos/?view=azure-devops)

@ymasaoka さんの記事
[Microsoft Learn モジュール 概観 - Azure DevOpsを始める](https://qiita.com/ymasaoka/items/1bd33dff277c1d7486af)


#やりたかったこと
Visual Studioで作成した新規ソリューションをAzure Reposで管理する


#事前準備
Azure DevOps側の準備を行います。

[Azure DevOps](https://azure.microsoft.com/ja-jp/services/devops/)のページの「無料で始める」をクリックして、
Microsoftアカウントでログインします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9a280072-3d28-d616-c3c0-fc4fe6b2c4ec.png)

以下のような画面が表示されたら、「Continue」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/83c3323c-4e23-eb71-49ab-f0d0bb0188e7.png)

Azure DevOpsサービスのメイン画面が表示されます。
「Project name」に適当な名前を入力し、「Create project」をクリックしてください。
※ここでいうプロジェクトは、Visual Studioで言うところのプロジェクトではないのでご注意を。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/9a52198e-300d-f486-d9be-bf0213571b3e.png)

プロジェクトの作成が完了すると、以下のような画面が表示されます。
これで一旦準備完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/d9c84c90-b048-e878-ce2d-66ba0ffb2cb6.png)


#手順
リポジトリをローカルにクローンした後に、ソリューションを新規作成します。
その後、作成されたファイルをローカルリポジトリにコミットし、最後にAzure DevOpsにプッシュします。

①Visual Studioを起動し、「リポジトリのクローン」を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/0786decf-1dab-253d-b538-fb63871744a4.png)

②以下の画面で、「Azure DevOps」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/0c1b383f-c54d-9933-4294-d59532e1c12a.png)

③以下のような画面が表示されます。
　１番上のプルダウンメニューが、Azure DevOpsを使うMicrosoftアカウントになっていることを確認してください。
　※表示されていなければ、プルダウンメニューの一番下にある「アカウントの追加」をクリックしてください。
　事前準備で作成したDevOpsのプロジェクトのリポジトリを選択し、一番下の「クローン」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/7b72cb43-37b3-1e11-1724-d850766620cc.png)

④クローンが完了すると、Visual Studioの「チームエクスプローラ」が表示されます。
　※表示されない場合は、メニューの［表示］⇒［チームエクスプローラ］を選択してください。
　ソリューション枠にある「新規作成」をクリックしてください。そうすると、ソリューションの新規作成ウィザードが起動します。
　作成したいソリューション／プロジェクトをウィザードに沿って選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/1f20b61b-1ba9-c2b9-fd38-fe531e1d249f.png)

※ソリューション作成時に、「HRESULTからの例外:0x80041FE4」が表示された場合は、
　一度Visual Studioを再起動してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/13c734bc-4cb9-45b4-cca8-980d415cefe7.png)


⑤ソリューションが作成できたら、追加されたファイルを（ローカルリポジトリに）コミットします。
　チームエクスプローラタブを表示し、「変更」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/b7bb9f50-bb2c-5cf8-8494-5528af0c7503.png)

　コミットコメントを記入して、「すべてをコミット」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/94b233ac-fb90-af52-4e81-e52f76893021.png)

⑥次はAzure DevOpsにプッシュします。
　チームエクスプローラタブを表示し、「同期」をクリックします。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/758a1199-3e82-7851-870b-ce5ca203dcdf.png)

　以下のような画面が表示されるので、「プッシュ」をクリックします。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/6d565215-67ff-319a-6711-8cc2bf7dd85b.png)

　Azure Reposにちゃんとアップされたか確認してみます。
　Azure DevOpsサービスの左側メニューで、Reposの「Files」を選択してください。
　プッシュされたファイル（今回は新規作成したソリューション全部）が登録されているはずです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146789/ccf1e4f6-361a-7ffe-e895-103da9542c27.png)


#余談
ローカルのリポジトリ作成等も自動で行われるし、
Visual Studioの画面上で全てできるので
gitのコマンドに慣れていない人にとっては楽に操作できていいですね。


普通にソリューションを新規作成した後に、Azure Reposに追加する手順もあるのですが、
それはまた別の機会に。