yumetodoの旅とプログラミングとかの記録

旅や登山の記録やプログラミング関連の話とかフリーソフト紹介とか

AviUtlのパッケージマネージャapmにContributeして感じた話

AviUtl Advent Calendar 2021

この記事はAviUtl Advent Calendar 2021 14日目の記事です。もうクリスマなんやが??? ・・・遅刻してすみません。

<<13日目 | AviUtlの質問のしかた - ePi || 14日目 | 前処理・中間処理で考える軽量化 - bakegaki >>

はじめに

動画編集ソフトとして有名であるAviUtlだが、それ単体でできることは少なく、数々のプラグインスクリプトを導入することとなる。これは面倒であり、数多く解説記事があるが、そういうものはパッケージ管理システムで解決されるべきではないか。ずーーーっとそう思ってきた。自分が好きなパッケージ管理システムといえばpacmanだ。ArchiLinuxで使われており、Windowsでもmsys2で用いられている。

しかしどうも人類はそこかしこで独自のパッケージ管理システムをフルスクラッチしがちな傾向にある。AviUtlもそうだ。そこで今回は最近登場したapmについて見ていく。

apm

halshusato.starfree.jp

https://github.com/hal-shu-sato/apm/raw/main/docs/images/tab1.png

https://github.com/hal-shu-sato/apm/raw/main/docs/images/tab2.png

パッケージ管理システムをAviUtlで組むときの課題

そもそもWindowsというただでさえパッケージ管理システムの恩恵に預りにくい環境で育った開発者たちが勝手気ままに様々な方法で公開している。OneDriveとかGoogle Driveといった自動化が難しい場所で平気で頒布されている。このへん、chocolateyもだいぶ苦戦している。

また再頒布を禁じているものもある。はては直リンク禁止とかいうものもある。どのようなライセンスにするかは当然にして作者の自由では有るが、この世界には自由ソフトウェアの啓蒙が行き届いていない。

またWindowsユーザーはCLIを解さない。Electronとかいう「全員ブラウザになろうぜ」とかいう狂気的理念をもつライブラリを用いてでもGUIを作らなければ使われない。

そんななかElectronでUIをつくりバージョン管理システムを外付けするのをやってのけているapmの開発陣に敬意を評したい。

apmが選んだ道

対象となるスクリプト/バイナリを再頒布することにすればシステムは簡単になる。実際過去にそういうのもあった。

www.nicovideo.jp

ただこういう方法は長続きしない。当然にしてファイルを頒布する環境の維持にはカネがかかる。容易にミラーサーバーを建てられるようなシステムを組まない限り他人の手を借りることも難しい。また再頒布を禁じているソフトウェアを対象にできない。

そこでなのかどうかはしらないが、apmでは1次配布元から拾ってこれるようなシステムとなっている。GoogleDriveやOneDriveといった安定しづらい一時配布元に対応するためか、ミラーの指定ができるデータ構造となっている。

データ構造: apm-data

apmはUIを司るapm本体とパッケージデータを管理するapm-dataに分離されている。

/dataにパッケージデータがある・・・のだがプラグインとかスクリプトはなぜかpackages_list.xmlにごった煮にされている。なぜ分けないのか、そこに痺れるあこがれる(ないです)。

contributeした

github.com

まずは自作のpluginを押し込みに行った。実はもっと高速化の余地があるプラグインなのだが、それはまたそのうちやる。

github.com

AviUtlでは盛んにplugin/scriptの引き継ぎが行われてきた。L-SMASH Worksはその典型例で、muken氏はほとんどAviUtlから手を引いてしまっているので、引き継がれ、enccc氏->HolyWu氏->Mr-Ojii氏と引き継がれた。パッケージ管理システムもこれに対応するべきだという課題を立てた結果、muken(VFR-maniac), HolyWu, Mr-Ojii, ぽっぷん氏の4種類のL-SMASH Worksが存在している。

github.com

L-SMASH Worksはffmepgに依存している。ffmpegは世界中のcontributerが次々と開発を行っているので、master追従すると日になんども更新が入ることになる。L-SMASH Works自体に更新がなくとも、どのcommitのffmepgを使うかで生成されるbinaryが変わる。Mr-Ojii氏は毎日ffmepgの最新を取ってきてビルドするというCIを組んでいるが、これはバージョン固定しようとしていたapmの構造と相性が良くなかった。そこで議論の結果インストール日ベースの管理ができるようになった。

感想

apmの存在はAviUtl界隈に次第に知られてきているが、「わざわざapm-dataにcontributeしに行くほどではないし・・・」という遠慮の精神がまだ強い様子が伺える。多くのユーザーに使われることで開発者側の心持ちも変わるであろうから、今後の啓蒙に期待したいし、自分もなんかしらの形で応援したい。