ROMANCE DAWN for the new world

Microsoft Azure を中心とした技術情報を書いています。

Azure Static Web Apps に Team Blog Hub をデプロイする

ハイアリングやマーケティングのために会社の技術ブログを作りたい話はよくありますが、なかなか継続しないというか、記事を書くモチベーションが上がりません。
社内エンジニアのなかには個人の技術ブログを書いているメンバーはいるので、それぞれのブログを集約するサイトがあればいいのではと考えていたところ、次の記事を見つけました。
zenn.dev
これは良さそうだと感じたので、Team Blog Hub を紹介しつつ、Azure Static Web Apps にデプロイしてみました。

Team Blog Hub とは

上記のブログで紹介されている Team Blog Hub は、ブログの RSS の URL を登録することで、メンバーの投稿を一覧にまとめて表示できます。
Next.js で作成されたシンプルなサイトで、配色やロゴなどのデザインも変更しやすそうです。

github.com

Next.js アプリの構成を変更する

このリポジトリを Fork して、Azure Static Web Apps に必要な構成に変更します。
静的サイトとしてビルドしたいので、package.json に next export を追記しました。

{
  "scripts": {
    "dev": "next dev",
    "build": "run-s build:posts build:next",
    "build:posts": "ts-node --project tsconfig.builder.json ./src/builder/posts.ts",
    "build:next": "next build && next export",
    "start": "next start"
  },
}

次に、staticwebapp.config.json を追加し、404 のカスタムエラーページの構成を定義します。

{
  "responseOverrides": {
    "404": {
      "rewrite": "/404.html",
      "statusCode": 200
    }
  }
}

Next.js アプリの構成変更は、これで完了です。

Azure Static Web Apps にデプロイする

Azure Static Web Apps は、公式ドキュメントの記載通り、GitHub のリポジトリを指定して作成すればよいです。

docs.microsoft.com

GitHub Actions のパイプラインも自動作成されるので、素早く Azure Static Web Apps にデプロイできます。

f:id:TonyTonyKun:20210830190552p:plain

実際の運用では、最新の投稿を取得するために Schedule トリガーで同じパイプラインを定期実行させるようにします。

Dynamic Rooting を使っていると 404 エラーが発生してしまう

Azure Static Web Apps にデプロイされたサイトの Member のアイコンをクリックした際に、404 エラーで画面遷移に失敗していました。

f:id:TonyTonyKun:20210830191304p:plain

404 エラーの原因は、Next.js の Dynamic Rooting を使っていることで、staticwebapp.config.json にルーティングの構成を定義する必要があります。
渡辺さんの記事が大変参考になりました。

qiita.com

私自身の Next.js 力が足りないこともあり、Member ページ毎にハードコーディングしていますが、動的にルーティング構成を定義したほうがいいです。

{
  "routes": [
      {
          "route": "/members/CatNose",
          "rewrite": "/members/CatNose"
      },
      {
        "route": "/members/John Doe",
        "rewrite": "/members/John%20Doe"
      }
  ]
}

この対応で解決できますが、アーキテクチャ的になぜ 404 エラーが発生するのか原因が気になっています。
ローカルの環境で Azure Static Web Apps CLI を使ってエミュレートしても 404 エラーは発生しないので、現象の発見が遅れてしまいがちです。

まとめ

Azure Static Web Apps に Team Blog Hub という Next.js で作られたサイトをデプロイしてみました。
デプロイ自体は簡単にできますが、Dynamic Rooting の 404 エラーにハマりました。とはいえ、Azure Static Web Apps はとても便利なサービスなので、活用していきたいと思います。

Team Blog Hub は、会社やチームの技術ブログを集約する Hub のようなサイトを作りたいときには、ぴったりのサイトでお勧めです。

Visual Studio 2022 for Mac Private Preview を試してみた

先月、Visual Studio 2022 for Mac の Private Preview が発表されました。ダウンロードするには申請が必要となり、リクエストが多いようで現在は新規申請を受け付けていない状況ですが、先日サインアップされた連絡が来たので試してみました。
devblogs.microsoft.com
まだ実際に試すことができる人は限られていると思いますので、ファーストインプレッションを共有することにしました。ちなみに、軽く触った結果のスクリーンショットをペタペタと貼っただけなので、あまり内容はありません。

インストール

早速インストールを行います。VS 本体は 908MB となっており、コンポーネントは .NET Core(291MB)のみ選択しました。

f:id:TonyTonyKun:20210822103528p:plain

コンポーネントのダウンロードとインストールが完了するまで待ちます。

f:id:TonyTonyKun:20210822103559p:plain

今回の環境には Xcode が入っていなかったので、インストールを要求されました。

f:id:TonyTonyKun:20210822103635p:plain

インストール完了後、VS を起動してみます。必須ではありませんが、Microsoft  アカウントの入力を要求されます。

f:id:TonyTonyKun:20210822103720p:plain

次に、キーボード ショートカットの種類を選択することができました。これは今まではなかった機能だと思います。デフォルトの Visual Studio for Mac を選択しました。

f:id:TonyTonyKun:20210822103758p:plain

ここまでが初回起動時に表示される画面で、次回以降はこのような画面から操作することになります。

f:id:TonyTonyKun:20210822103822p:plain

私がインストールしたバージョンは、17.0 Preview でした。

f:id:TonyTonyKun:20210822104110p:plain
docs.microsoft.com

ASP.NET Core

新しいプロジェクトを作成してみます。ASP.NET Core の API を選択しました。

f:id:TonyTonyKun:20210822103951p:plain

選択できる Target Framework は、.NET Core 3.1 と .NET 6.0 の2つでした。

f:id:TonyTonyKun:20210822104008p:plain

Version Control として、.gitignore を追加することができます。

f:id:TonyTonyKun:20210822111628p:plain

お馴染みの WeatherForecastController が作成され、コードを書いてデバッグ実行するなどのひと通りの操作ができました。

f:id:TonyTonyKun:20210822104028p:plain

Azure へのデプロイ

Windows 版と同様に、VS から Azure App Service にデプロイすることができます。

f:id:TonyTonyKun:20210822104333p:plain

新しくリソースを作成する以外にも、既存のリソースを選択することもできます。

f:id:TonyTonyKun:20210822104349p:plain

Azure Functions

今度は、Azure Functions の新しいプロジェクトを作成してみます。開発言語は C# しか選択できませんでした。
ひと通りのトリガーを選択できる感じですが、HTTP トリガーを作成してみます。

f:id:TonyTonyKun:20210822104425p:plain

Azure Functions を実行する際に使うストレージについては、ローカルの Azurite もしくは Azure の Storage Account を使います。今回は Azure に Storage Account を作成して動作確認しました。HTTP トリガーの以外に Queue トリガーも確認しましたが、問題なく動作しました。

f:id:TonyTonyKun:20210822105145p:plain

Azurite については、時間を見つけて確認してみたいと思います。
docs.microsoft.com

デバッグ実行した際に、Windows 版ではコマンドプロンプト画面が別ウインドウで起動しますが、Mac 版では VS 内部に統合されていました。

f:id:TonyTonyKun:20210822104456p:plain

まとめ

Mac 版の VS が初めてリリースされた5年前にも試してみましたが、当時と比較するとだいぶ使えるレベルに洗練されてきた感じです。
gooner.hateblo.jp

VS を Mac で使うシナリオとしては、ASP.NET Core アプリよりは Azure Functions の方が多いかなと思っています。現状では VS Code + Azure Functions Core Tools の組み合わせには劣ってしまうので、今後の進化に期待したいとフィードバックしておきました。

江戸風鈴の音色で涼を楽しむ

8月になり夏本番の暑さが続きますが、いかがお過ごしでしょうか?
江戸川区には江戸風鈴の製造所、篠原風鈴本舗があります。自宅から自転車ですぐの場所にあるので、風鈴の音色に涼を求め、篠原風鈴本舗に行ってきました。

江戸風鈴とは

昔の東京すなわち江戸で、江戸時代から同じ製法で作り続けているガラス風鈴を篠原風鈴本舗の二代目儀治さんが「江戸風鈴」と名付けたそうです。
江戸風鈴は篠原風鈴のブランド名で、一個一個が手作りなので同じ形・同じ柄でもそれぞれ異なる音がします。
製造所は、篠原風鈴本舗と篠原まるよし風鈴の2カ所だけとのことです。
www.edofurin.com
ちなみに、鬼滅の刃に登場する煉獄家の風鈴は、江戸風鈴だそうです。劇中で流れた風鈴の音色は、江戸風鈴を用いて実際に収録したらしい。
www.ufotable.co.jp

篠原風鈴本舗

工場兼店舗となっているので、風鈴の販売や製作体験も行っています。

f:id:TonyTonyKun:20210802145902j:plain

小丸という、江戸風鈴のもっとも基本的な形です。特選小丸は、通常の小丸に比べ使用している絵具・色数などが多く絵柄に手が込んでいるものです。
音を良くするために鳴り口の部分をわざとギザギザに仕上げ、ひとつひとつ職人が手作業絵付けを行っているそうです。

f:id:TonyTonyKun:20210802145922j:plain

縁起物のひょうたんの形をした江戸風鈴もありました。

f:id:TonyTonyKun:20210802145939j:plain

アニメ鬼滅の刃の2周年記念企画の江戸風鈴もありました(非売品)。

f:id:TonyTonyKun:20210802150134j:plain

五匹の金魚が描かれた絵柄の特選小丸を購入しました。

f:id:TonyTonyKun:20210803103345j:plain

江戸風鈴の音色で涼を味わいつつ、暑い夏を涼しく過ごしたいと思います。江戸川区は遠いよって人向けに、オンラインショップでも販売しているようです。
shinoharafurinhonpo.stores.jp