本記事は Mina Pêcheux さんが執筆しました
TL;DR: Codemagic と Oculus CLI ツールを使って、Unity VR アプリの Oculus Store への公開を自動化できます。
VR Unity アプリの作成は、本当にいけてます…。が、開発段階で簡単に友人と共有するにはどうしたらいいのでしょうか?
以前の記事で、なぜUnity プロジェクトのビルドと公開の自動化が興味深く有用なのか、特に、素敵なベータテスターから継続的にフィードバックを得たい場合について述べました。それを示すために、「Slash’n’crack」という Android のモバイルゲームを例に挙げました。
多くの開発プロジェクトは似たようなものですが、いくつかのケースで違いがあります。先日、去年のクリスマスに買った VR ヘッドセット「Oculus Quest 2」で遊んでいたら、沸々と以下のような考えが芽生え始めました。「どうやったら自分で VR アプリを作れるんだろう…」、また、「どうすれば、開発者仲間とそれらを共有できるのか」…そう、まさに、「Slash’n’crack」ゲームでやったように! そんな風に考えた結果、1 つの考えが生まれ、独自のプロジェクトに発展していきました。
Unity は最近、XR(eXtended reality、仮想現実、拡張現実、複合現実を含む用語)機能を多く統合し、様々なタイプの VR ヘッドセット用の小さなプロトタイプゲームを作ることがとても簡単になりました。このエンジンを使えば、例えば Oculus のセットに対応した簡単な VR プロトタイプをすぐにセットアップできるようになりました。
そこで、今回も別の基本的なアーケードゲームとして、物体を破壊するものを作りました。ただし、こちらは 360° の部屋の中で、入ってくるターゲットに向かって撃つことになります。私の新作プロトタイプゲーム「Ico-pop」のデモをご紹介します!
プロジェクト自体をご覧になりたい場合は、無料でこちらの GitHub で公開しています 🚀
Android アプリと同様、VR アプリの共有は、特に開発段階においては、時には少々面倒なことがあります。ありがたいことに、**Codemagic**とOculus CLI ツール の予備知識の一部を再利用して、私の小さなゲームのような Unity VR プロジェクトのビルドと Oculus Store へのリリースを自動化できることを発見しました。
そこで、今回は、以下についてご説明いたします:
- Codemagic を使用して私の Unity VR アプリを構築する方法
- Ico-pop のテスター数名と Oculus アプリをセットアップする方法
- Codemagic からビルドを新しい Oculus のリリースとして自動的に公開する方法
飛び込む準備はよろしいですか? では、まいりましょう!:)
Oculus の配信自動化について一言
開発者として、私たちは様々な公開ツールを使用し、ワークフローを自動化するためのAPIや簡単に呼び出せる URL を持っていることに慣れています(例えば、Microsoft Partner Center、Google Play、Apple App Store が提供するものなど)。
しかし、実は Oculus Store では、そのような気軽に使えるツールは見つかっていないのです (何かご存知の方がいらっしゃいましたら、教えてください)
しかし、幸いなことに、自動化のための解決策は実はあります。例えば、Oculus を所有する Meta は、[Oculus コマンドライン(CLI)ツールのセット] (https://developer.oculus.com/resources/publish-reference-platform-command-line-utility/) をリリースしました。これを使うと、ダッシュボードや UI のボタンをわざわざたくさんクリックしに行かずに、プログラムでいくつかアクションを実行できるようになります。この CLI ユーティリティは、アプリの現在のビルドに関する情報の取得、新しいビルドの作成、特定のバージョンのダウンロードなどを簡単にできます。Codemagic とともに、この CLI ユーティリティは、クラウドで Oculus アプリをビルドして配布するために頼りになるツールセットを提供してくれます。
パート 1:Oculus 用 VR アプリをビルドするための Unity プロジェクトの設定
Unity 公式ドキュメントを見ればすぐにわかることですが、Unity で VR アプリを作るということは、実は Android 用にコンパイルしてパッケージを作るということです。そのため、Android 用にビルドするためのプロジェクトを準備する必要がありますが、プロジェクトの設定が Oculus 配布に適しているかどうかも確認する必要があります。
気をつけてください。Unity の Android ビルドに共通する設定があっても、Oculus 特有の要件や制限もあります!
ビルドターゲットの選択
もし、あなたのプロジェクトがまだ Android 用にビルドするように設定されていない場合は、まずこれを変更する必要があります。このステップは簡単です。「ファイル」>「ビルド設定」パネルで、**ビルドターゲットとして「Android」を選択し、「プラットフォームの切り替え」をクリックします。
プロジェクトの再コンパイルが必要なため、しばらく時間がかかるかもしれませんが、完了すると、下部のボタンが「Build」と表示されているのが確認できます。
その間に、ビルドに必要なシーンをすべてこのリストに追加したことを確認します。ビルド開始時に Unity からアクセスできるのは、このリストだけです。 ;)
また、すでに他のビルドプラットフォーム用に XR を設定している場合、「編集(Edit)」 > 「プロジェクトの設定(Project Settings)」ウィンドウで、設定を再更新し、正しい XR 管理プラグインを選び直す必要がある場合があります。これは、「XR プラグイン管理(Plug-in Management)」タブに移動して、Android オプションを設定して行います:
正しいプロジェクト設定の選択
ここからが面白いんです! 「プレイヤータブの「編集」>「プロジェクト設定」に移動すると、調整できる設定項目がかなりあることがお分かりになると思います。
Oculus ドキュメントと Codemagic の Android 公開用のドキュメント(Codemagic docs for Android publishing)によると(.apk
パッケージを作るので、.aab
\関連のオプションは無視するとしても)、以下の 3 つを設定する必要があります:
- 「その他の設定(Other Settings)」ブロックで、**最小 API レベル(Minimum API Level)とターゲット API レベル(Target API Level)**が Android 10.0 (API Level 29)以下に設定されていることを確認してください。これは、Oculus アプリに必要です。
- また、「スクリプトバックエンド(Scripting Backend)“を「IL2CPP」に設定します。
- 次に、一番下の「公開設定(Publishing Settings)」ブロックで、「カスタムベースの Gradle テンプレート(Custom Base Gradle Template)」のトグルにチェックを入れます。
このオプションを有効にすると、プロジェクト内のアセット/プラグイン/Android(Assets/Plugins/Android)
フォルダにbaseProjectTemplate.gradle
という新しいファイルが自動的に作成されます。では、このファイルを開いて、次の内容をそこにコピーしてください:
// GENERATED BY UNITY. REMOVE THIS COMMENT TO PREVENT OVERWRITING WHEN EXPORTING AGAIN
allprojects {
buildscript {
repositories {**ARTIFACTORYREPOSITORY**
google()
mavenCentral()
}
dependencies {
// If you are changing the Android Gradle Plugin version, make sure it is compatible with the Gradle version preinstalled with Unity
// See which Gradle version is preinstalled with Unity here https://docs.unity3d.com/Manual/android-gradle-overview.html
// See official Gradle and Android Gradle Plugin compatibility table here https://developer.android.com/studio/releases/gradle-plugin#updating-gradle
// To specify a custom Gradle version in Unity, go do "Preferences > External Tools", uncheck "Gradle Installed with Unity (recommended)" and specify a path to a custom Gradle version
classpath 'com.android.tools.build:gradle:4.0.1'
**BUILD_SCRIPT_DEPS**
}
}
repositories {**ARTIFACTORYREPOSITORY**
google()
mavenCentral()
flatDir {
dirs "${project(':unityLibrary').projectDir}/libs"
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
アプリを保護するためのキーストアファイルの作成
最後に、リリース時に Oculus のチェックをすべてクリアできるよう、アプリの安全性をもう少し高めたいと考えています。これを行うには、キーストア認証情報ファイルを作成します。このタイプのファイルは、[こちら](https://developer.android.com/training/articles/keystore]で説明されているように、コンテナに暗号化キーを保存する安全な方法です。
新しいキーストアファイルを生成するには、**keytool
ユーティリティ**を使用します。これは、Java と一緒に提供されているので、ほとんどの場合、すでにお使いのコンピューターにあるはずです。しかし、念のためお持ちでない場合、こちらの短い記事でインストール方法を説明していますので、ご覧ください。
以下のオプションをつけて keytool
を呼び出すと、素敵な新しいキーストアファイルが入手できます (<
and >
記号間の部分を調整するのを忘れないでください)。
keytool -genkey -v -keystore <keystore_name>.keystore -alias <alias_name> -keyalg RSA -keysize 2048 -validity 10000
このコマンドを実行すると、2、3 個の質問に答えるように促されます。ここで、いくつかのパスワードやその他の設定を選ぶ必要があります。特に、これらの「パスワード」は、実際には、お持ちの暗号鍵ペアの秘密鍵と公開鍵です。細かい設定は必要ありませんが、ツールに渡した「キーストアパスワード」と「キーパスワード」は、私たちの Codemagic アプリのセットアップですぐに必要になるので、必ず覚えておいてください。
重要な注意事項:これらのキーストアの認証情報は、Git リポジトリに絶対にコミットしてはいけません。 間違って追加してしまわないように、
.gitignore
に追加しておきましょう! Unity プロジェクトで正しい.gitignore
を設定する方法については、こちらの記事でご説明しております。
パート 2:Codemagic による VR アプリビルドの自動化
すでに Codemagic のワークフローに慣れている方は、どうぞOculus アプリのセットアップに関するパート 3 へ直接ジャンプしてください!
**重要な注意事項:**Codemagic で Unity アプリをデプロイするには、Pro または Plus Unity ライセンスがご必要です!
過去記事で詳しくご説明いたしましたが、**Codemagic**は CI/CD ツールで、本当に使いやすく、拡張性が高く、あらゆる種類のプロジェクトを素早く構築できます。React Native、Flutter、Android、iOS…さらにもちろん、Unity も! 素晴らしいことに、専用のビルドマシンを使用しているため、ご希望のターゲットプラットフォームを選択することも可能です。これにより、Android の.apk
成果物を簡単に作成できます。
Codemagic を Unity プロジェクトで使用するために必要なことは、Git でプロジェクトをバージョン管理し、そこから Codemagic アプリを作成できるようにすることです。
Unity プロジェクトをGit プロバイダー(GitHub、GitLab、Bitbucket など)に追加したら、Codemagic アカウントにログインして、ダッシュボードに移動します。新しいアプリを追加し、適切な Git プロバイダーを選択し、ソースコードを取得したいレポを選択することができるようになります。
次に、2 つのファイルをプロジェクトに追加します:
Build.cs
スクリプト。これは、Codemagic のワークフローで、コマンドラインからプロジェクトを実行し、自動的にビルドするためのものです(これは、「ビルド設定」パネルを開いて「ビルド」ボタンをクリックするのと同じことです)。codemagic.yaml
設定ファイル。これは、Git リポジトリのルートにあり、使用する作業環境と、ビルドや追加のデプロイ段階用のさまざまなステップを定義します。
Build.cs
ファイルは、Editor/
フォルダ内のアセットフォルダに置きます。
using System.Linq;
using System;
using UnityEditor;
using UnityEngine;
public static class BuildScript
{
[MenuItem("Build/Build Android")]
public static void BuildAndroid()
{
PlayerSettings.Android.useCustomKeystore = true;
EditorUserBuildSettings.buildAppBundle = false;
// Set bundle version. NEW_BUILD_NUMBER environment variable is set in the codemagic.yaml
var versionIsSet = int.TryParse(Environment.GetEnvironmentVariable("NEW_BUILD_NUMBER"), out int version);
if (versionIsSet)
{
Debug.Log($"Bundle version code set to {version}");
PlayerSettings.Android.bundleVersionCode = version;
}
else
{
Debug.Log("Bundle version not provided");
}
// Set keystore name
string keystoreName = Environment.GetEnvironmentVariable("CM_KEYSTORE_PATH");
if (!String.IsNullOrEmpty(keystoreName))
{
Debug.Log($"Setting path to keystore: {keystoreName}");
PlayerSettings.Android.keystoreName = keystoreName;
}
else
{
Debug.Log("Keystore name not provided");
}
// Set keystore password
string keystorePass = Environment.GetEnvironmentVariable("CM_KEYSTORE_PASSWORD");
if (!String.IsNullOrEmpty(keystorePass))
{
Debug.Log("Setting keystore password");
PlayerSettings.Android.keystorePass = keystorePass;
}
else
{
Debug.Log("Keystore password not provided");
}
// Set keystore alias name
string keyaliasName = Environment.GetEnvironmentVariable("CM_KEY_ALIAS");
if (!String.IsNullOrEmpty(keyaliasName))
{
Debug.Log("Setting keystore alias");
PlayerSettings.Android.keyaliasName = keyaliasName;
}
else
{
Debug.Log("Keystore alias not provided");
}
// Set keystore password
string keyaliasPass = Environment.GetEnvironmentVariable("CM_KEY_PASSWORD");
if (!String.IsNullOrEmpty(keyaliasPass))
{
Debug.Log("Setting keystore alias password");
PlayerSettings.Android.keyaliasPass = keyaliasPass;
}
else
{
Debug.Log("Keystore alias password not provided");
}
BuildPlayerOptions buildPlayerOptions = new BuildPlayerOptions();
buildPlayerOptions.locationPathName = "android/android.apk";
buildPlayerOptions.target = BuildTarget.Android;
buildPlayerOptions.options = BuildOptions.None;
buildPlayerOptions.scenes = GetScenes();
Debug.Log("Building Android");
BuildPipeline.BuildPlayer(buildPlayerOptions);
Debug.Log("Built Android");
}
private static string[] GetScenes()
{
return (from scene in EditorBuildSettings.scenes where scene.enabled select scene.path).ToArray();
}
}
このファイルでは、環境変数を 2、3 個取得し、ビルドオプションを設定します。次に、ビルド設定からシーンのリストを取得し、android.apk
成果物を作成します。
これらの環境変数は、私たちのアプリ用に Codemagic のインターフェイスで定義されています。一方で、それらはなぜ必要なのでしょうか? そうですね、今回の Unity プロジェクトを Codemagic で構築するために、Codemagic のコンピューターをしばらく「お借り」することになりました。ですので、たとえビルトインや事前インストールされたツールがあったとしても、私たち自身の作業環境に合わせて適切にセットアップする必要があるのですが、これは env vars のおかげで可能になりました。
環境変数を設定するには、Codemagic アプリのダッシュボードで、「環境変数(Environment variables)」タブに移動し、キーバリューペアをいくつか定義する必要があります。私たちは 8 つの変数を設定したいと思います:
UNITY_SERIAL
UNITY_PASSWORD
UNITY_USERNAME
CM_KEYSTORE
CM_KEYSTORE_PATH
CM_KEY_ALIAS
CM_KEYSTORE_PASSWORD
CM_KEY_PASSWORD
最初の 3 つは「unity」グループに、残りの 5 つは「keystore_credentials」グループに追加する必要があります(これを行うには、「変数グループ(Variable group)」列にグループ名を入力し始めるだけで作成でき、すでに存在する場合はドロップダウンリストから選択します)。
UNITY_SERIAL
、UNITY_USERNAME
、UNITY_PASSWORD
は、あなたご自身の Unity アカウントの認証情報です。残りの変数は、先ほど作成したキーストアファイルに関連するものです。CM_KEY_ALIAS
、CM_KEY_PASSWORD
、CM_KEYSTORE_PASSWORD
は、キーストアファイルを作成する際に設定した各種オプションです。
CM_KEYSTORE_PATH
は keystore.keystore
に設定する必要があります。
最後に、CM_KEYSTORE
はキーストアファイルの実際の内容で、base64 でエンコードされたものです。
最終的にはこんな感じになります:
すべて準備ができたので、あとは Git リポジトリに**codemagic.yaml
ファイルをコミット**するだけです。Codemagic Mac マシンでのビルドの例は次のとおりです:
workflows:
unity-android-workflow:
name: Unity Android Workflow
max_build_duration: 120
environment:
groups:
- unity # <-- (Includes UNITY_SERIAL, UNITY_USERNAME, UNITY_PASSWORD)
- keystore_credentials # <-- (Includes CM_KEYSTORE, CM_KEYSTORE_PASSWORD, CM_KEY_PASSWORD, CM_KEY_ALIAS)
vars:
UNITY_BIN: /Applications/Unity/Hub/Editor/2020.3.28f1/Unity.app/Contents/MacOS/Unity
BUILD_SCRIPT: BuildAndroid
PACKAGE_NAME: 'com.minapecheux.Icopop'
scripts:
- name: Activate Unity License
script: |
$UNITY_BIN -batchmode -quit -logFile -serial ${UNITY_SERIAL?} -username ${UNITY_USERNAME?} -password ${UNITY_PASSWORD?}
- name: Set up keystore
script: echo $CM_KEYSTORE | base64 --decode > $CM_BUILD_DIR/keystore.keystore
- name: Build Unity app
script: |
$UNITY_BIN -batchmode -quit -logFile -projectPath . -executeMethod BuildScript.$BUILD_SCRIPT -nographics -buildTarget Android
artifacts:
- android/*.apk
publishing:
scripts:
- name: Deactivate License
script: $UNITY_BIN -batchmode -quit -returnlicense -nographics
**重要な注意事項:**Oculus CLI ツールは Windows か Mac でのみ利用可能です。また、Linux サポートはまだロードマップにはないようです。つまり、Oculus アプリのビルドとリリースを自動化したい場合は、この 2 つの OS のどちらかに限定されることになります。;)
environment
ブロックでは、先ほど定義した env var グループを再注入して、スクリプトやコマンドの中で 8 つの変数にアクセスできるようにしています。次に、コマンドラインから Unity を呼び出し、ビルドロジック(Build.cs
ファイル)を使用して Android パッケージを作成するだけです。
ビルドコマンドで-buildTarget Android
オプションを指定するのは非常に重要です。そうしないと、Unity が XR や VR 関連のアセットを集めるのに苦労しそうです!
これで、Unity VR アプリの最初の Codemagic ビルドを試すことができるようになりました。右上の「新規ビルドを開始(Start new build)」ボタンをクリックし、Git ブランチかタグを選択して、ワークフローを開始するだけです!
数分後、ワークフローが終了し、.apk
成果物が生成されたことが確認できます:
この.apk
パッケージは、Oculus で自動的に配布したいものです…ですがその前に、Oculus アプリ自身をセットアップする必要があります。それにより、そこに接続し、Codemagic のワークフローから直接新しいビルドをアップロードできるようになります!
パート 3:Oculus アプリのセットアップ
アプリの作成
あなた独自の VR Oculus アプリを作って共有するには、Oculus 開発者プログラムにサインアップする必要があります。参加するには、単にあなたの Oculus アカウントか Facebook アカウントと接続するだけです。すると、開発者用ダッシュボードに直接移動し、あなたの既存の全アプリリストを取得したり、新しいアプリを作成したりできます。
例えば、私は「IcoPop」アプリを作成し、そのダッシュボードでアプリ情報の概要を把握できるようになりました。
ユーザーにアプリを配布するには、それを利用可能なさまざまなリリースチャンネルに登録する必要があります。また、開発用の Oculus CLI ツールを使ってアプリのデプロイを自動化したいので、テストリリースチャネル、つまり、RC、BETA、ALPHA チャネルのいずれかを使用する必要があります。Oculus のドキュメントによると、アプリは最初 ALPHA チャネルに入り、その後チャネルを選択し、ご希望の場合チャネルの公開もできます。
ここではALPHA チャネルを選びますので、まず、このチャネルにテスターをいくつか追加します。チャネルをクリックして「ユーザー」タブを開き、購読したいさまざまなテスターのメールアドレスを入力するだけでオッケーです。なお、テスターは Oculus に登録されている必要があります。そうでなければ、エラーを投げます。
注意:有効な Oculus アカウントを持っているユーザーのメールのみを追加できます!
購読者が招待を受け入れると、チャネルユーザーにリストアップされます。チャネル全体のダッシュボードでは、ユーザー数が増加したことも確認できます:
Oculus アプリの認証情報を取得
最後のステップは、Oculus CLI ツールを使用して、Codemagic ワークフローからビルドをアップロードできるように、アプリに関するいくつかの情報を取得することです。具体的には、アプリ ID と、CLI が代理で動作するためのトークン認証情報を取得する必要があります。
これらの情報はすべて、アプリの「API」タブで確認できます。
まず、アプリ IDを取得します。次に、アクセストークンを取得します。
CLI ツールで認証を行うには、実際には 2 つ方法があります:
- アプリの主管者であれば、アプリの秘密で
- ベーシックな消費者であれば、生成されたユーザートークンで
ここでは、私のアプリの秘密を使用します。ユーザートークンを使用したい場合は、「トークンの生成(Generate Token)」ボタンをクリックして、トークンをコピーしてください。
パート 4:Codemagic のワークフローの設定を終了する
Oculus アプリ ID とアプリの秘密(またはユーザートークン)を手に入れたので、ついに Oculus「ALPHA」チャネルへの.apk
成果物の配布を自動化できます。すべて、CLI ツールと Codemagic ワークフローを使用して行えます。
そのために、まず、2 つの新しい環境変数を「oculus」グループの Codemagic アプリに追加する必要があります:
注意:Oculus アプリにユーザートークンを使用している場合、もちろん
OCULUS_APP_SECRET
変数をOCULUS_USER_TOKEN
変数で置き換えることができます。
その後、この env グループと最終的な指示をcodemagic.yaml
設定ファイルのpublishing
ブロックに追加するだけです:
- まず、Oculus CLI ツールをインストールします。こちらのドキュメントの説明をご覧ください。本記事の公開時では、Codemagic のコンピューターに事前インストールされていません。
- 次に、このツールを使って、私たちのアプリ用の新規 Oculus ビルドとして、
.apk
ファイルをアップロードします。
workflows:
unity-android-workflow:
name: Unity Android Workflow
max_build_duration: 120
environment:
groups:
...
- oculus # <-- (Includes OCULUS_APP_ID, OCULUS_APP_SECRET)
vars:
...
OCULUS_RELEASE_CHANNEL: ALPHA # should be a test channel, not "store" (= Production)
scripts: ...
artifacts: ...
publishing:
scripts:
- name: Deactivate License
script: $UNITY_BIN -batchmode -quit -returnlicense -nographics
- name: Install Oculus CLI tools
script: |
wget -O ovr-platform-util "https://www.oculus.com/download_app/?id=1462426033810370&access_token=OC%7C1462426033810370%7C"
chmod +x ./ovr-platform-util
- name: Publish app on a Oculus test release channel
script: |
./ovr-platform-util upload-quest-build --app_id $OCULUS_APP_ID --app_secret $OCULUS_APP_SECRET --apk android/android.apk --channel $OCULUS_RELEASE_CHANNEL
注意:ユーザートークンを使っている場合は、最後のコマンドを以下に置き換える必要があります:
./ovr-platform-util upload-quest-build --app_id $OCULUS_APP_ID --token $OCULUS_USER_TOKEN --apk android/android.apk --channel $OCULUS_RELEASE_CHANNEL
このpublishing
ブロックは、scripts
の後に自動的に実行されるので、先ほど作成した.apk
成果物を取得し、新しいビルドアップロードとして Oculus アプリに送信することが可能になります。
この新しいワークフローを実行すると、Oculus アプリの「ALPHA」チャネルに新しいリリースがあるはずです! :)
このビルドをクリックすると、さらに詳細な情報、特に、すべての設定とバージョンの詳細なリストが表示されるようにもなっています。
あるいは、チャネルへのリリース時に実行されたテストを再確認できます。
ユーザー側では、あなたの購読者はすべて、ヘッドセットの装着時に、彼らの Oculus ライブラリであなたのアプリの最新のビルドを自動的に取得します。:)
また、アプリの詳細を少し閲覧することもできます。ここで、あなたの最高の宣伝文句を作り、あなたの製品をよりよく宣伝するために風景画像をいくつか追加したくなるのではないでしょうか。あなたのアプリのメタデータを変更する方法についての詳細については、Oculus ドキュメントを確認してください!
結論
VR アプリを作るのは確かに楽しいのですが、開発段階で友人や開発者仲間と共有するのは少し面倒なこともあります。しかし、Codemagic や Oculus CLI ツールのような素晴らしいツールのおかげで、自動化された CI/CD ワークフローを設定し、Unity VR プロジェクトをビルドして、ご希望のOculus Store リリースチャンネル**に配布できます。これらすべてが、ボタンを 1 つクリックするだけで!
このチュートリアルをお楽しみいただけましたら幸いです。また、もちろん、私に Unity チュートリアルを作ってほしい他の DevOps トピックについてのアイデアがございましたら、お気軽にお伝えください! Codemagic の Slack、Medium、Twitterで私を見つけることができます。
また、「Ico-pop」プロジェクトの全貌は、こちらの GitHub でご覧いただけます。
Mina Pêcheux さんは、フリーランスのフルスタックウェブ&ゲーム開発者です。また、コンピューターグラフィックス、音楽、データサイエンスなどにも情熱を注いでいます! 自らブログも運営されています。あるいは、Twitterで Mina さんを見つけることもできます。