いらにか 2023/03/12 03:57

【Mes】進捗とか【久しぶり】

いらにかです。

Mesの進捗について、前回の記事からだいぶ経ってしまいました。

【近況報告】MeSの進捗【Ver0.3開発中】

Twitterでは進捗をちょこちょこと小出しにツイートしたりしてましたが、振り返りも兼ねてVer0.3の頃からどうなったのかまとめます。


まず、C#でコアライブラリを書き直した

Ver0.3の頃はコアライブラリはRustで実装されていました。
実験的要素を含めて色々な理由で初期はRustを採用していましたが、Ver0.5を書いている途中でC#に書き直す方針転換しました。

理由はいくつかありますが、PowerShellで扱いやすいようにしたいという欲求が一番の理由でした。
C#ならクラスライブラリをdllとして吐き出すだけで、PowerShellからインポートして各種クラスを手軽に使える。
CLI(というかコマンドレット)を実装するときにC#なら簡単にできる。
WindowsアプリはMicrosoft Store経由で簡単にアップデート機構を組み込める。

とまぁ、色々な理由でC#で書き直すことにしました。
Ver0.5の移植はすぐ終わりましたが、その後にコアライブラリの大枠の設計変更は発生してそこに時間が少し取られました。

現在のコアライブラリはMesBuilderというビルダーを経由して、テキストを様々に加工できるようになっています。
このMesBuilderは基本的にフラットレイヤー(糖衣構文)→パースレイヤー(解析)という順序でMesのデータを生成するのですが、このレイヤーの分離が非常に重要な存在です。
フラットレイヤーはMesの表現力を高めるためのレイヤーで、例えば以下のような置換処理をやっていたりします。

太郎「これはサンプルのセリフだ」
↓(変換後)
@太郎
これはサンプルのセリフだ

要はパースレイヤーで解析可能な形に変換してくれます。
こうすることで、パースレイヤーはシンプルな文を処理することだけに専念できるためチューニングがしやすくなりました。

現在策定を勧めているMes言語のVer1.0仕様では、指定した範囲に特定のデコレータを一括付与する以下のような構文があります。

(@太郎){{
これはサンプルのセリフだ

こんなふうに囲った範囲のテキスト各行にデコレータを付与するぞ
}}
↓(変換後)
@太郎
これはサンプルのセリフだ

@太郎
こんなふうに囲った範囲のテキスト各行にデコレータを付与するぞ

言語の機能拡張はほぼフラットレイヤーで実装できるので、パースレイヤーに複雑性を持ち込ませない作りになり、機能拡張とメンテナンスがとてもしやすくなりました。
そして、パースレイヤーは拡張メソッドで追加記述できるので独自のオレオレ変換機能を作ったりしやすくなっています。
いずれ自分が欲しい機能をユーザが独自実装して、利便性が高いものならPull Request送ってもらってコアライブラリに組み込んだりしやすいようになっています。
(まだ最新のC#版コアライブラリは一般公開していないので、まだ先の話ですが)


MesToolsというWindowsアプリをストアで限定公開始めました

一部の関係者だけにMesToolsというWindowsアプリを試験提供し始めました。

まだまだ開発途中なので一般公開できるレベルではないですが、開発しながらMicrosoftストア経由でアップデート運用していく実験も兼ねて先行公開しています。

現状だと実験的なエディタとデータの変換処理(CSV等)のみですが、一応こんな感じのエクセルにデータを貼り付けて台本が生成できたりします。


ゆくゆくセリフのデータ等をクリップスタジオに簡単に流し込めるように整備したり、ボイスドラマや漫画向けの台本テンプレを用意したりする予定です。



Mesの言語仕様の整理とドキュメントのメンテナンス

実は実験的な機能実装などもあるので、ドキュメントよりもコアライブラリのほうが仕様を先行している現状があります。

https://docs.google.com/document/d/12EHzhasXu9RgVpwRYsbSNeKxrcPz_hFJHPN8WPXpfKo/edit?usp=sharing

ただ、ドキュメントは仕様を詳細に作っているので、Mesの記述をパッと覚えるのには不向きかなと思いました。
現在策定を進めているver1.2が終わったら、下記をブラッシュアップしたようなクイックスタートガイド例文を作ろうと考えています。


== 場面1     //==でシーンが区切られる


@ニカ		//@はキャラ名を指す
$駅前の音	//$は音響コメントを指す
!正面		//!はサウンドポジションを指す
#待たされた感じで言う	//#は汎用コメント(ト書き)
&00:00:05.000 --> 00:00:10.039	//&は字幕用のタイミング情報(WebVTT推奨)
あ、キタキタ。女の子二人を待たせるなんて、失礼だぞ。  //セリフ


@花子
!正面
そういうニカちゃんも、ついさっき来たばかりじゃないですか。


@ニカ
$少し離れてヒソヒソ声になる
こういう時は待たせた弱みに漬け込んで、ランチを奢らせるのがだな…


@花子
前回もそうやって奢らせてたじゃないですか。今日はだめです。
#ちょっと叱る感じで(デコレーターは後置もOK)


@花子
それにしても久しぶりですね。この三人で会うのは何年ぶりでしたっけ?


@ニカ
確か、最後に会ったのは富山に海鮮丼食べに行ったときだから、二年ぶりだね。

終わりに

MesToolsがもう少し機能豊富になって安定したら一般公開する予定です。
基本的には有償公開になると思いますが、MicrosoftStoreは無料トライアル期間みたいなものが設定できるので購入前にお試しできるようになるはずです。

もし要望とかなにかあればこの記事にコメントか、TwitterのDMで連絡ください。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

記事を検索