VSCode機能拡張向けバッジサービスのリニューアル

# どんなサービス？
[VSMarketplaceBadge](https://vsmarketplacebadge.apphb.com/)
![vsmb.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54591/d20c627f-6703-12be-edf0-e9ff6952986a.png)

![](https://vsmarketplacebadges.dev/version/cssho.vscode-svgviewer.svg) ![](https://vsmarketplacebadges.dev/installs-short/cssho.vscode-svgviewer.svg) ![](https://vsmarketplacebadges.dev/downloads-short/cssho.vscode-svgviewer.svg) ![](https://vsmarketplacebadges.dev/rating/cssho.vscode-svgviewer.svg)

[Visual Studio Marketplaceからバージョンとインストール数を取得しバッジ表示 - Qiita](https://qiita.com/shoooo/items/415ae23f58e7bf39e068)

皆さんどこかで目にしているかもしれない[Visual Studio Marketplace](https://marketplace.visualstudio.com/)から機能拡張のインストール数やバージョン情報、レーティング情報を取得し、[Shields.io](https://shields.io/)経由でバッジを生成するサービス。(現在はShields.ioでもVisual Studio Marketplaceのサポートがされているが開発開始当時は未対応だった)

> VSCode機能拡張向けバッジサービス

といいつつVisual Studio Marketplaceから情報を拾っているので本家（？）Visual Studioの機能拡張でもバッジ生成できます:rolling_eyes:

[VS Code Extension Manager](https://github.com/microsoft/vscode-vsce)のコード中にも信頼されたSVGソースとしてドメインが登録されている。

https://github.com/microsoft/vscode-vsce/blob/392778b924f2c9221eb46aac5f6df5f4c0cda315/src/package.ts#L169

## なぜリニューアルするのか
リニューアル前のPaasが無料プランだからなのか高負荷になると最悪半日ほどつながらなくなることが発生。（落ちてるの気づいてなくてTwitterで報告受けて気づいて慌てて[Uptime Robot](https://uptimerobot.com/)設定した）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54591/96ad62fe-0e2a-8a2a-1458-7f82cc23723b.png)

あと.NET Core移行したかった。（VSCodeでも開発しやすくなる！）

## 何が変わったか
### 環境回り
- リニューアル前
  - [AppHarbor - .NET Cloud Platform as a Service](https://appharbor.com/)
  - ASP.NET (.NET Framework)
- リニューアル後
  - [Cloud Run  |  Google Cloud](https://cloud.google.com/run/?hl=ja)
  - ASP.NET Core (.NET Core) on Docker

今後また環境を変える時があってもサクッと行けるようにコンテナのホスティングで行けるところ中心に探した結果、料金やサービスの継続性を考慮しCloud Runに決定。

Google Cloud Platform Advent CalendarでもCloud Runの記事が出てますね。
[ローカルで作ったDockerコンテナをCloud Run で公開するまで - Qiita](https://qiita.com/aki36-an/items/7b88c1c922b309a2bfd7)

[Kamatera Express]
(https://www.kamatera.com/express/compute/)もコスパよさそうでちょっと迷った。

### ドメイン
vsmarketplacebadge.apphb.com
↓
vsmarketplacebadges.dev

ホスティング先変えるたびにドメイン変わるのめんどいのでdevドメイン購入 :tada:

### デプロイ

- リニューアル前
  1. GitHubにpush
  2. 1.に連動してAppHarbor上にデプロイ
- リニューアル後
  1. GitHubでリリース作成
  2. GitHub Actionsでビルド→GCPのContainer Registryに登録
      - [VSMarketplaceBadges/dockerimage.yml](https://github.com/cssho/VSMarketplaceBadges/blob/d665f3c8626007eb53222a8fb44d4c2f03bd5672/.github/workflows/dockerimage.yml)
  3. Cloud Runへデプロイ（バージョン切り替え）

GitHub Actions内でCloud Runへのデプロイまでやってしまうのもありかなと思っている。
AppEngineのようにバージョン毎にサブドメインが割り振られていて
1. デプロイ
2. 動作確認
3. トラフィック
ってできるとうれしいな。

### 削った機能
機能拡張毎にバッジが呼び出された回数のランキングを生成してたけどあんまり使われていなさそうだったので削除。
外部ログ管理サービス（[Loggly](https://www.loggly.com/)）に依存していて、こちらも無料枠ギリギリだったのも理由の一つ。

### キャッシュ
外部APIをいくつか利用しているのでレスポンスをキャッシュしている。AppHarborは無料のAddOnでRedisを利用できていたがCloud Runでは現時点で類似の機能が使えなさそうなので[Redis Labs](https://redislabs.com/)の無料プランをとりあえず採用。（$4のプランに移行するかも）VPC周りが整理されればCloud Memorystoreが選択肢になりそう。


## 移行作業
ドメインが変わるのでもちろん移行作業が必要になってくる。

- 旧ドメイン→新ドメインへリダイレクトするよう旧アプリケーションに手を入れる（12/11～）
- GitHubで旧ドメインを検索しかたっぱしから新ドメインに書き換えたPRを投げていく
  - 一ヶ月の運用費が固まってから

---
[個人開発 Advent Calendar](https://qiita.com/advent-calendar/2019/private-development)とも迷ったけどこちらに書かさせてもらいました。
VSCode機能拡張作成の際はどうぞご贔屓に。