はじめに
限りなく制約の無い新しいメタバースを作っています。
名前をInflaton(インフラトン)といいます。
現在は鋭意開発中で、まだリリースはされていません。
詳しくはこちらのマガジンをご覧ください。
もし興味を持って頂けたら、応援よろしくお願いいたします。
さて、このInflatonが無事誕生した暁には、APIを通じて様々な外部サービスと自分のメタバースワールドを連携することができます。
そこで今回はmicroCMSと連携することでどの様なことができるのか検討していきたいと思います。
メタバース部分はUnity製ですので、今回はmicroCMSとUnityを連携させていきます。
microCMS
microCMSは名前の通りCMSです。ただし、デフォルトのフロントエンドを持たず、APIでブログやバナーの内容を返すという仕組みです。
なので、色々なサービスと連携できます。
無料で始めることができます。
フロントエンドはありませんが、管理画面は存在しますので、コンテンツの作成や諸々の管理は簡単に行うことができます。
ユースケース1 Unityによる超リッチなブログフロントエンド
もしInflatonの試みが成功して、誰でも自分のメタバースを運営できる様になった未来では、3DCG表現やAIアバター等の超リッチコンテンツによるブログというものが普及するかもしれません。
コンテンツの差し替えの度にUnityアプリを再ビルドするのは現実的な運用ではありませんので、microCMSによってコンテンツだけ更新できる仕組みがあればとても便利です。
以下はmicroCMSからブログコンテンツを取得して3D空間に表示するサンプルです。
using Cysharp.Threading.Tasks;
using TMPro;
using UnityEngine;
[System.Serializable]
public class BlogContent
{
public string title;
public string content;
}
[System.Serializable]
public class BlogsResponse
{
public BlogContent[] contents;
}
public class MicroCMS : MonoBehaviour
{
[SerializeField]
private string apiEndpoint = "";
[SerializeField]
private string apiKey = "";
[SerializeField]
private TMP_Text title;
[SerializeField]
private TMP_Text content;
// Start is called once before the first execution of Update after the MonoBehaviour is created
void Start()
{
UseUniTaskFetchBlogs(apiEndpoint, apiKey).Forget();
}
// Update is called once per frame
void Update()
{
}
async UniTask UseUniTaskFetchBlogs(string url, string apiKey)
{
using (var request = new UnityEngine.Networking.UnityWebRequest(url, "GET"))
{
request.downloadHandler = new UnityEngine.Networking.DownloadHandlerBuffer();
request.SetRequestHeader("X-MICROCMS-API-KEY", apiKey);
await request.SendWebRequest();
if (request.result == UnityEngine.Networking.UnityWebRequest.Result.ConnectionError ||
request.result == UnityEngine.Networking.UnityWebRequest.Result.ProtocolError)
{
Debug.LogError("Error: " + request.error);
}
else
{
Debug.Log("Response: " + request.downloadHandler.text);
// パース
var blogsResponse = JsonUtility.FromJson<BlogsResponse>(request.downloadHandler.text);
// 各記事のタイトルとコンテンツを出力
if (blogsResponse != null && blogsResponse.contents != null && 0 < blogsResponse.contents.Length)
{
var blog = blogsResponse.contents[0];
if (title) {
title.text = blog.title;
}
if (content) {
content.text = blog.content;
}
}
}
}
}
}
UniTaskを使用しています。
ApiEndpoint、ApiKeyおよびテキストを表示するTextMeshPro TextはInspectorで設定します。
今回はごく簡単なサンプルのため、ブログコンテンツのhtmlタグは解析していません。
※ Unityで日本語を表示するにはあらかじめフォントを準備しておく必要があります。
参考 https://zenn.dev/kametani256/articles/63c083ab318136
このサンプルでは単純にmicroCMSからテキストを取得して表示しました。
自分のメタバースワールドでお知らせだけ更新したい、などの用途で使えそうです。
また、今回は作りこむ時間がありませんでしたが、例えばmicroCMSで登録した原稿を、3DCG空間にいるAIアバターに喋らせたり、テキストの内容から動的にメタバース空間を生成する様な仕組みも実現できそうです。
使い方次第で無限に夢が膨らみます。
ユースケース2 Addressablesの配信が可能か?
microCMSではファイルの配信をすることもできます。
そこでAddressablesを配信することで、テキストコンテンツだけでは無く、3DCGのアセットをそのまま配信できるのか試してみました。
これは現実の運用を考えると特に費用面で最適解ではないと思われますが、microCMSでAddressablesの配信ができるのかどうか気になったので検証してみます。
microCMSでファイルを配信するにはTeam以上のプランに登録する必要があります。
microCMSでのデータ転送量についてはマニュアルをご確認ください。
プランをTeam(無料期間があります)に変更して早速APIを定義してみました。
試しに以下の様なフィールドの種類にファイルを指定したAPIを作成してみました。
これで返却される値は以下の様になります。
{
"createdAt": "2025-12-24T21:53:22.017Z",
"updatedAt": "2025-12-24T21:53:36.510Z",
"publishedAt": "2025-12-24T21:53:36.510Z",
"revisedAt": "2025-12-24T21:53:36.510Z",
"assetId": {
"url": "https://files.microcms-assets.io/assets/xxx/yyy/filename",
"fileSize": 2922
}
}
ファイルそのものが返却されるのではなく、ファイルのダウンロードURLが返ってきます。
urlのxxx/yyyという部分はアカウント?やファイルによって変わってきてしまいます。
これだとAddressablesを読み込むときに都合が悪く、今回の検証ではmicroCMSでAddressablesを配信するのは難しそうという結論になりました。
テキストや画像等のコンテンツとAddressablesの管理がmicroCMSで完結すると簡単かな? というモチベーションで検証してみましたが、普通にmicroCMSではコンテンツの管理を行ってAddressablesの配信はオーソドックスにストレージサービスを使用した方が良さそうです。
まとめ
今回はメタバース(Unity)とmicroCMSの連携で何ができるのか検証してみました。
ユースケース1が超汎用的なため、そこまで沢山のユースケースは思いつきませんでしたが、
実際に試してみると、思いの他簡単に連携できることがわかりました。
この仕組みを使って、後はフロント側の作りこみ次第で色々と面白いことが出来そうです。
恐らくゲームのお知らせ画面等をmicroCMSで更新している様な事例は沢山あると思いますが、
例えば、既存のブログサービスで様々なテンプレートが用意されている様に、
Unityの様な3DCGコンテンツで作成されたブログテンプレートというのがあったら面白いですね。
そういった事例はまだ少ないのではないでしょうか。
microCMS、今後も使えそうな所でどんどん利用させて頂こうと思います。


