![見出し画像](https://assets.st-note.com/production/uploads/images/96781385/rectangle_large_type_2_deab692553b2385821944abe7328bcfc.png?width=1200)
MGL週報 2023/01 #3
このエントリはゲーム開発用フレームワーク「MGL」の開発記録です.MGLは次のWebサイトにて無償で公開されています.
先週に続いてツール類の公開に向けた作業を行っており,地味な作業しかしていないので内容も地味です.本当はツールの内容についてあれこれ書きたかったのですが,色々と間に合いませんでした.
と言う訳で,今週行った地味な内容の報告です.
NuGetとvcpkg
公開予定のツールはいくつかの外部ライブラリを用いています.多くのUNIX系のOSではパッケージマネージャが広く浸透しているためコマンド1つで解決するのですが,Windowsのネイティブなビルドではその類のシステムを使用したことが無かったために苦戦していました.
試したのはNuGetとvcpkgで,採用したのは後者のvcpkgです.
利便性はVisual Studioに統合されているNuGetのほうが上だと感じたのですが,どうやらVisual Studioのバージョンが一致していないとトラブルが多発するようでした.手動で設定すれば直るという事は確認したものの,途中で面倒になってしまい結局断念.
一方,vcpkgはあらかじめ導入しておく手間があるものの,導入さえしてしまえば面倒な設定がほとんど不要になるのが好感触でした.特にトラブルもなく使えているので,当面はこちらを使用していく予定です.
ソースコードからビルドしたいという人にとっては導入の手間が増えてしまいますが,Windowsに関してはビルド済みのバイナリも用意する予定なので許容範囲ということにしてください.
メッセージの翻訳
それほど多くのメッセージを出力する訳では無いのですが,メッセージを日本語と英語に対応しました.日本語表示が可能な環境であれば,メッセージは日本語で表示されます.
何故これを対応する必要があったのかというと,メッセージデータはUTF-8で書かれており,Windowsのコマンドプロンプトでは文字コードが異なるために文字化けしてしまうからです.したがって,より厳密に言うと「設定言語が日本語,かつ文字コードがUTF-8」のコンソール環境で日本語が表示されるようになっています.
この辺の最も簡単な解決方法は全て英語で書いてしまうことなのですが,日本人である私が自分のために作ったツールが元なので,自然と日本語で書いていたのですよね.多言語対応はゲームの実装でいつも行っている事なので,どうせなら両方に対応しようという流れです.
ファイルパスの文字コード問題
地味に落とし穴だったのが,Windowsにおけるファイルパスの扱いです.
WindowsのファイルのパスはUTF-16で扱われています.私の作るツール類は基本的に文字列をUTF-8で扱うため,ファイル名やパスなどは一度変換してからAPIに渡す必要があります.
これに関しては元々把握していたので想定内でしたが,ツールが利用する外部ライブラリがこの辺の処理に対応していない事は想定していませんでした.
具体例を1つ挙げると,フォントレンダラのFreeTypeはファイルをオープンする際にシステムの標準的なfopen()を使用するとマニュアルに書かれています.一方,Windowsのfopen()はASCIIコードしか受け付けていません.このため,日本語を含むファイルパスを与えると,そのファイルを判別できずにオープン失敗となります.
解決策としては,その手のAPIにはファイルパスの指定の代わりにファイルポインタやメモリ上のデータを扱うものが用意されている事が多いため,そちらを利用します.先述のFreeTypeの例では,FT_New_Face()の代わりにFT_New_Memory_Face()を利用するといった具合です.
Windowsでは古くから,ファイルのパスに日本語を含めるなかれと言う言い伝えがありました.その理由のひとつがこの文字コードの問題によるものなのかもしれません.
ライセンスの確認
外部のライブラリを利用しているという事は,当然そのライブラリのライセンスにも従わなければなりません.ライセンスの内容にもよりますが,多くのオープンソースソフトウェアは権利表記を必須としています.
この作業の何が大変なのかというと,影響しているライセンスを全て洗い出さなければならないという事です.
例えばアプリケーションがライブラリA,B,Cの3つを利用しているとします.この場合,従わなければならないライセンスは3つだけなのかというと,実はそうとは限りません.A,B,Cのそれぞれが他のライブラリを使用している可能性があるためです.
ツールが小規模で依存ライブラリも多くはないのですが,この辺は抜けがあると意図せず権利侵害となってしまうため,念の為に慎重に調査を行っています.
その他
ツールを公開するまでに必要な残りの作業は……
Homebrew用のインストールスクリプトの準備
MGLで扱うためのエクステンションの準備
ドキュメントの作成
最も重たい作業はドキュメントの作成ですね.MGL本体もそうでしたが,ドキュメントの作成はものによっては実装そのものよりも時間がかかります.