VRMはどのバージョンを使うべき？

:::note info
結論から言えば、VRM は「最新版」ではなく、「今まで使っていて問題のなかったバージョン[^1]」を選ぶのが最適です。
:::



<!--
アドベントカレンダー２、埋まっていないのも寂しいなと思い遅れて登録しました。どうぞよろしくお願いします。

--

近年 Unity 向けのオープンソースなモノが増えている印象があります。

先日も CyberAgent ゲーム事業部が Unity 向けエフェクトシェーダーをオープンソースとしてリリースしました。

- [NOVA Shader: Particle System用多機能シェーダ](https://github.com/CyberAgentGameEntertainment/NovaShader/blob/main/README_JA.md)


それら「オープンソースは無償で高品質」という印象を与えるプロジェクトが多数存在する影響か、深く考えず最新版をインストールして躓いてしまう事例が見受けられます。


ここでは主にアバターを VRM フォーマットに書き出すことを目的としているユーザー向けの、ダウンロードする VRM（UniVRM）パッケージのバージョンを選ぶ際に知っておくべきことをまとめた記事です。
-->



コチラは、主にアバターを VRM フォーマットに書き出すことを目的としているユーザー向けです。



ダウンロードする VRM（UniVRM）パッケージのバージョンを選ぶ際には、近年のオープンソースソフトウェアについて知っておくべきことがあります。



# オープンソースには２種類ある

オープンソースのソフトウェアには大きく２つのパターンがあります。近年増えている「１」と、昔ながらの「２」です。

:::note info
VRM は「２」に該当するオープンソースソフトウェアです。
:::


<!--
https://qiita.com/sator_imaging/items/7d3de1a852082911dc7f
-->


## １）プロプライエタリからオープンソースへ

企業が有償ソフトウェアや自社アプリで使用していた内製ツール等を、オープンソースとして公開し開発を続けるパターンです。これらの多くは**バージョンナンバーが 1.0 以上**である場合が多いです。

それ以外では、課金型サービスを提供する企業の SDK 等が挙げられます。

最近の Unity 界隈だと、

- [UnityScreenNavigator: Library for screen transitions, tran...](https://github.com/Haruma-K/UnityScreenNavigator)
- [lilToon: Feature-rich shaders for avatars](https://github.com/lilxyzw/lilToon)


等でしょう。

課金型サービスのSDKであれば、Google、Amazon、Microsoft 等の提供するクラウドサービスです。


これらの特徴は、

- リリース当初から製品への組み込みに耐えうる。
    - 既に自社アプリ等に実装されており、多種多様なスマホで大多数のユーザーが問題なくプレイ出来ている。
    - 自社の課金型サービスを利用するユーザー（＝顧客）向けのSDKなので、多くのリソースを割いて開発を行っている。
        - ソフトウェアそのものの販売からクラウドサービスの利用量等による課金へと、その収益源を移した企業が提供している。
        - 従来の有償ソフトウェアと同等、またはそれ以上の開発体制で維持管理されている場合が多い。
- 基本的に**最新バージョンをインストールした方が良い**。

です。


これらのオープンソースソフトウェアの最新版は、古いバージョンより良くなっている場合が殆どです。



## ２）開発過程を公開しているソフトウェア

コチラは VRM が取っている手法です。開発過程が公開されており参加することも出来る、というものです。

開発過程をすべて公開する以外にも、Unity のように「Preview」「Experimental」として正式リリース前のバージョンを公開している場合があります。

特徴は、

- 最新版は「最新」である、というだけの状態。
    - あらたなバグがあるかもしれない。
    - 一方で特定の問題は解決しているかもしれない。
    - テストを行っていないわけではないが、「１）」に比べれば少ない。
        - というかあなたがテストをしてくれると期待されている。
- ユーザーは将来実装される（かもしれない）機能を試すことが出来る。
    - 細かな仕様は正式リリース時には変更される可能性がある。
- 開発側はより多くのプラットフォームやユーザーに試してもらうことで、問題の少ない枯れたソフトウェアにすることが期待できる。


等です。


この手法では、「A」を「B」にしてみた → 「B」に問題の報告があった → 「B」を「A」に戻したなど、行ってこいをすることもあります。

:::note info
これはオープンソースに限らずソフトウェア開発では起こり得ることですが、その過程がオープンではないので外部からは見えない部分です。
:::

「VRM（オープンソース）」ではその過程が見え、かつバージョンナンバーを振られてリリースも行われます。

これらのバージョンは「最新」であるという事を示すだけものであり、「１）オープンソース化」とは異なり、「最新版をインストールしたほうが良い」かどうかは「**インストールしてみないと分からない**」というものです。

:::note info
分からないからインストールして確認してみてほしい、ということで多くのユーザーに向けてリリースされている側面もあります。
:::



### オープンソースの良いところ

「１」に比べて「２」は注意を払う必要がありますが、オープンソースならではの良いところもあります。

販売されているソフトウェアであれば、問題の解決されたバージョンを使いたい場合、バージョンアップに伴い別の問題が起きるという副作用を受け入れなければならない場合があります。


その点、ソースコードが公開されているオープンソースソフトウェアであれば、最新版の機能の一部を古いバージョンにバックポートすることが出来るので、（手間はかかりますが）問題の修正部分だけをプロジェクトに取り込む、ということが可能です。


また、多くの人の目に触れているのでバグが少ない可能性も高いです。
（一方で OpenSSL の Heartbleed のような事例もありますが、、、）





# 「安定版」と「開発版」


オープンソースソフトウェアの話からは若干離れますが、ソフトウェアには「安定版」と「開発版」を明確に分けているものと、そうでないものがあります。


## 「安定版」と「開発版」を分けているソフトウェア

明確に分けているソフトウェアの代表例はウェブブラウザでしょう。

Chrome や Microsoft Edge 等は、数億（数十億？）人が使用している安定版と、ウェブ開発者等が使用する「Dev（毎週更新」「Canary（毎日更新」が存在します。


:::note info
数億人が使うソフトウェアに実験的な機能を実装して、なにか問題が起きたら大変ですからね。
:::


開発版で問題なし、バグなし、そもそもコレいる？ を乗り越えた機能が、安定版に組み込まれていきます。


## VRM は「安定版」と「開発版」を分けていない

VRM は「安定版」と「開発版」明確には分けていないソフトウェアです。

:::note info
VRM「v0.xx」は「v1.0（正式リリース）」に向けた「開発版」であり、「安定版」である v1.0 は存在しない、とも言えます。
:::


ソフトウェアの問題が修正される一方で、新たな機能、実験的な機能の追加も同時に行われています。

「実験的な機能を実装して、なにか問題が起きたら大変」ということが、「アバターを書き出したい」という目的とは全く関係のないところで起こり得る、ということですね。


<!--
現在の「VRM（v0.xx＝開発版）」は、そういった問題の発生を防ぐため、安定版の正式リリースに向けた開発をオープンソースで行っている状態です。
-->

<!--
ウェブブラウザのようにユーザーや開発者が多く存在する場合と異なり、これらを明確に分けてしまった場合、「VRM（開発版）」をインストールする人は減ってしまうでしょう。


それでは、「より多くのプラットフォームやユーザーに試してもらい、問題の少ない枯れたソフトウェアにすること」という目的を達成することは困難となります。
-->

<!--
v1.0（正式リリース）に向けた作業と、既存のバージョンを安定させる作業を、v0.xx に対して同時に行っている状態は妥当な判断と言えます。
-->



# おわりに

現在の VRM は「１）」を目指している過程です。正式リリース（v1）が行われるまでは、問題の修正と機能の追加ほか、様々な開発が同じタイミングで行われ、適用され、最新版が最適とは限らない状態が続きます。

また、「VRMというファイルフォーマット」を扱う機能と、「VRMを読み込み、アバターに対して各種操作を行う」という機能、それらを合わせたオープンソースソフトウェアなので、状況はさらに複雑です。


今現在 VRM アバターの書き出しにおいては、VRM は「最新版」ではなく、「今まで使っていて問題のなかったバージョン」を選ぶのが最適と言えます。



--


以上です。お疲れ様でした。



[^1]: VRMの書き出しに関してはバージョン 0.5～0.6 が安定 → https://vrm-c.github.io/UniVRM/ja/release/056/index.html