Mermaid で Azure アイコンを使ったアーキテクチャを書き隊 – クラウドを勉強し隊 の記事で記載している通り Mermaid で利用できる Azure アイコンがほとんどありません
そこで自分で用意してみました
ざっくり手順
- オリジナル アイコンの公開方法を確認
- npm アカウントの作成
- Azure アイコンの取得
- SVG を IconifyJSON へ変換
- 公開
- テスト
1. オリジナル アイコンの公開方法を確認
CDN からアイコンを取得する方法を利用します
Mermaid のドキュメントのサンプルでは以下のように記載されています
import mermaid from 'CDN/mermaid.esm.mjs';
mermaid.registerIconPacks([
{
name: 'logos',
loader: () =>
fetch('https://unpkg.com/@iconify-json/logos/icons.json').then((res) => res.json()),
},
]);
https://unpkg.com/ から取得していることがわかります
(Copilot いわく)UNPKG とは npm(Node Package Manager) で公開されているパッケージを CDN で配信するサービスだそうです
ということは自分で用意するオリジナル アイコンも npm で公開すれば使えるということです
npm を使った経験もほぼないですが、とりあえずやってみます
2. npm アカウントの作成
npm で公開するためにアカウントが必要だそうです
npm | Home からアカウントを作成します
3. Azure アイコンの取得
公開するためのアイコンを用意します
Azure のアイコンは Azure アイコン - Azure Architecture Center | Microsoft Learn から SVG ファイルがまとめられた zip ファイルでダウンロードすることができます
アイコンの利用条件を確認します
Microsoft は、これらのアイコンをアーキテクチャ ダイアグラム、トレーニング資料、またはドキュメントで使用することを許可しています。 マイクロソフトから明示的な許可がない限り、許可された使用目的でのみアイコンをコピー、配布、および表示することができます。 マイクロソフトはその他の権利をすべて留保します。
今回はアーキテクチャ図を作成するために利用します
また npm で公開することになりますが、アーキテクチャ図の作成に利用するためのアイコンとしての利用になります
上記の観点で利用条件に反しない認識です
ダウンロードした zip ファイルは解凍し、ファイル名を変更しておきます
変更前 | 変更後 |
---|---|
10061-icon-service-Virtual-Networks.svg | Virtual-Networks.svg |
ファイル名の変更には Windows用 PowerToys PowerRename ユーティリティ | Microsoft Learn を使って正規表現から一括変換しました
4. SVG を IconifyJSON へ変換
Mermaid で利用するアイコンは Iconfy から取ってきていました
ダウンロードした Azure アイコンも Iconfy で利用できる形式にする必要があります
Iconfy で利用できる形式は Iconify JSON Type です
SVG ファイルを IconfyJSON に変換する方法が Iconfy のサイトに記載されいます
- 単体の SVG ファイルを変換する方法
- ディレクトリ内の SVG ファイルを変換する方法
今回はディレクトリ内の SVG ファイルを変換する方法を利用します
Iconfy のドキュメントを確認すると TypeScript で書かれた Iconify Tools というライブラリを使うようです
Visual Studio で Blank TypeScript プロジェクトを作成します

Github Copilot にサンプルコードを説明してもらいながら、下記のように修正しました
サンプルでは実行結果をファイル出力していなかったので、ファイル出力するように修正しました
|
|
実行するためにライブラリが必要なので、npm でインストールしておきます
npm install @iconify/tools --save
ダウンロード、解凍、名前変更した Azure アイコンを TypeScript プロジェクトのフォルダに移動させておきます
その Azure アイコンのフォルダを対象に上記の TypeScript プロジェクトを実行します
実行結果は JSON ファイルに出力されます
今回実行したプロジェクトはこちらです GitHub - NakayamaKento/IconfyJSON
5. 公開
作成した JSON ファイルを npm で公開します
初めてのnpm パッケージ公開 #Linux - Qiita や 既に公開済みの Iconfy のアイコン パッケージを @iconify-json/logos - npm 参考にしました
README.md や package.json などを修正し、 npm publish ./
を実行し公開します
もし、公開した内容に不備があった場合は unpublish で取り消すことができますが、制約があるようなので注意が必要です
あの時の俺に言いたい。NPMにpublishしたら(ほぼ)消せないことを #JavaScript - Qiita
作成済みの npm パッケージはこちらです
6. テスト
テストをしてみます
細かい手順は Mermaid で Azure アイコンを使ったアーキテクチャを書き隊 – クラウドを勉強し隊 を見てもらうとして、こんな風に使うことができました
architecture-beta
group rg1(azure:resource-groups)[Resource Group]
group vnet1(azure:virtual-networks)[Virtual Network] in rg1
group subnet1(azure:subnet)[Subnet] in vnet1
service server(azure:virtual-machine)[Server] in subnet1
service storage(azure:storage-accounts)[Storage] in rg1
service nsg1(azure:network-security-groups)[NSG] in rg1
service database(azure:sql-database)[Database] in rg1
nsg1:L --> R:server{group}
まとめ
Mermaid で利用できる Azure アイコンがほとんどないので、自分で用意してみました
結果的には TypeScript を実行したり、npm で公開する必要がありました
npm で公開するのは初めてでしたが、意外と簡単にできました
自分自身でガンガン使っていきたいと思います
参考
- Architecture Diagrams Documentation (v11.1.0+) | Mermaid
- Iconify Design: All popular icon sets, one framework.
- UNPKG
- [npm]npm アカウントの作成〜開発環境でログインするまで | CodeLab
- Iconify JSON Type
- GitHub - NakayamaKento/AzureIcons
- @iconify-json/logos - npm
- あの時の俺に言いたい。NPMにpublishしたら(ほぼ)消せないことを #JavaScript - Qiita
- azureiconkento - npm
- GitHub - NakayamaKento/IconfyJSON
- Azure アイコン - Azure Architecture Center | Microsoft Learn