SE(たぶん)の雑感記

一応SEやっている筆者の思ったことを書き連ねます。会計学もやってたので、両方を生かした記事を書きたいと考えています。 でもテーマが定まってない感がすごい。

学習のためにAzureを使い始めた

こんにちは。

以前からやりたくてもできていなかったことの一つに、アプリ(サイト?)開発があります。また、現在の業務ではAWSとかDockerとかいっぱい使います。

ある程度自動化されている部分はあるものの、仕組みを知っておく必要はありますし、そもそもWebの知識全般が欠けている部分を自覚しています。

そこで、Microsoft Azureを自分で使って、いろいろ勉強してみよう!と思い立ちました。

やろうとしていること

GitHubの指定リポジトリにマージしたら、自動的にビルドが実行され、リリースまで行われる環境を作成し、楽にサイト公開できるようにしようとしました。よくあるやつです。

f:id:hiroronn:20190518165755p:plain
イメージ図

これを作ろうとした背景として、現在の業務でここまでの整備ができていないため、概念を掴むための練習です。Azureだとすごく楽だときいていたので、どのぐらい楽か見てみたい気持ちもありました。

なお、サイト自体は、DBにすら接続しない適当なものを用意しました。動けばいいだけです。

使用した言語等

こんな感じです。

種類 バージョン等
言語 C#
開発環境 Visual Studio 2019 Community Edition
バージョン ASP.NET MVC Core2.2
ライブラリ .NET Standard 2.0

プロジェクト構成

f:id:hiroronn:20190518174029p:plain

分かりづらくて申し訳ないです。

ルートとなるのは、Webのプロジェクト(ASP.NET Core MVC)です。また、先にAPI用のプロジェクトも作成しており、そちらもルートになりえます。

Azure pipelinesを使う

以下が公式サイトです。

azure.microsoft.com

Start Pipelines free with GitHubGitHubから無料で始める)

とある通り、GitHubを使用していたら、そこからわりと簡単に始められます。

やってみた

詳細手順を残し忘れるというへまをやらかしました。ただ、GitHubへのWebhookでの接続は、書いてある通りにやっていけば大丈夫かと思います。

DevOpsで指定される権限を、GitHubでちゃんと設定すれば動くはずです。

ビルドが通らない

ただ、Webhookでのソース取得まではうまくいきましたが、ビルドに失敗しました。最終的にはNuGet restoreというジョブで以下のエラーが出ました。

Errors in D:\a\1\s\test\DataRelation.Domain.Test\DataRelation.Domain.Test.csproj
    Project DataRelation.Domain is not compatible with netcoreapp2.2 (.NETCoreApp,Version=v2.2). Project DataRelation.Domain supports: netstandard2.0 (.NETStandard,Version=v2.0)
    One or more projects are incompatible with .NETCoreApp,Version=v2.2.)
##[error]Packages failed to restore
##[section]Finishing: NuGet restore

DataRelation.Domainというのは、.NET Standardを指定して作成したのクラスライブラリ*1なのですが、それがビルドできないよ、と言われます。

これを修正するには、以下の二点必要でした。

  • .NET Standardを参照するために、.NET Core SDK 2.2を取得する
  • NuGet restoreの前にUse NuGetを入れる

f:id:hiroronn:20190518173632p:plain
成功例

上記のような構成にすると通ります。

リリースもうまくいかない

##[error]Error: More than one package matched with specified pattern: D:\a\r1\a\**\*.zip. Please restrain the search pattern.

こんなエラーでした。そんなファイル無いよ、と言われます。これはおそらく、いきなり二つのルートプロジェクトが存在する状態で作業を始めたから、複数ファイルが見つかったか、フォルダ構成が違ったかどちらかだろうと思いました。

そこで、リリース構成の中にあるフォルダ指定を変えたらうまくいきました。

f:id:hiroronn:20190518174820p:plain

感想

簡単です。本当に。単純なものなら、ガイドに従うと作成できます。上記のように、多少躓きましたが…

ビルドやリリースの構成は、yamlで編集できるみたいです。

docs.microsoft.com

プルリク発行時にテストするとか、そういうのもPipelinesから操作できそうです。

今は何しているのか

目下、サイト(アプリ?)としての機能を持たせるために、軽くソースを書いているのと、環境構築のためにAzureの以下のサービスを追加しました。

そして、これらを利用するように、ソースを書いている最中です。

サイトの公開は当面行えません。あしからず。

おわりに

自力でサーバー構築しなくてよいのは、本当に楽です。以前なら自分でいろいろやらないといけませんでしたが、だいたい自動でやってくれます。ほんのちょっとお金はかかりますが、今のところ無料試用版のクレジットが1000円減ったぐらいです。

最近は、空いた時間をだいたいこのためのプログラミングと調べものに費やしています。やはり目の前にものがあると、自分で動かしてみようと思うものですね。試用期間中は使い倒して、必要ならその後も使おうと思っています。

ではでは。

*1:.NET Coreと.NET Standardについて。https://msdn.microsoft.com/ja-jp/magazine/mt842506.aspx