postfixnotation.org - blog

公開: 2025年11月1日 最終更新: 2025年11月1日 永続リンク

依存パッケージのデバッグとバグ修正、モンゴル文字

最近、モンゴル文字に関心があります。

ᠮᠣᠩᠭᠣᠯ

モンゴル文字による「モンゴル」(なんと、縦書きなのだ!)

モンゴル文字を表示するためにNoto Sans Mongolianというフォントを使っているのですが、絶賛開発中なので開発版を使いたいです。しかし、現時点での開発版はビルドに失敗しています。

では、最近のNoto Sans Mongolianの更新がビルドの失敗の原因なのかというと、どうやらそうではないらしく、リリース版のタグでのビルドも失敗するようです。つまり、依存パッケージの破壊的変更がビルドの失敗の原因なようです。エラーメッセージ内のスタックトレースを辿ることで、エラーの直接の原因と発生した箇所が分かります。

ところで、エラーは依存パッケージ内で発生しています。更に、複数の依存パッケージに問題があるようです。どうやって依存パッケージのデバッグ及びバグ修正をするのでしょうか。素朴に各依存パッケージの問題と思わしき箇所を修正して、それぞれのパッケージにパッチを送っても、受理されるまでに時間がかかる可能性がありますし、仮に受け入れられても、プロジェクトの動作確認はできていないので、プロジェクトのプログラムが正しく動作するようになる保証はありません。もし正しく動作しなければ、依存パッケージの修正、パッチ送付、受理待ちの一連の手順を繰り返すことになり、修正と動作確認の反復に多くの時間がかかりますし、パッチが受理されなければ、動作確認ができなくなってしまいます。

もちろん、丁寧なやり方もあるのでしょうが、今回は大雑把に行きますよ。Noto Sans MongolianはPythonプロジェクトで、venvを使って依存パッケージをインストールしているため、依存パッケージはプロジェクトローカルにインストールされます。これを利用しましょう。つまり、venv環境にインストールした依存パッケージを直接編集してしまいます。venv環境はプロジェクトローカルなため、依存パッケージを直接編集しても、他のプロジェクトやユーザーローカル環境には影響しません。

そういうわけで、次のような手順で作業を進めてみましょう。

  1. スタックトレースを辿り、エラーが発生している依存パッケージを特定する。
  2. エラーが発生している依存パッケージにデバッガを仕掛ける。つまり、venv環境にインストールされた依存パッケージを「直接」編集して、組み込み関数breakpointの呼び出しを追記する。
  3. エラーが発生したプログラムを実行してデバッガを起動する。ここで、デバッガを使用するために、プログラムが端末装置(tty)にアクセスできるようにしておく必要があることに注意。
  4. デバッガが起動したら、ステップ実行しつつ、目ぼしい変数や式の値を片端から確認して記録する。
  5. 値が怪しい変数や式を見つけたら、その値を利用している箇所を追跡する。
  6. バグらしき箇所を発見したら、依存パッケージを「直接」修正して、プロジェクトのプログラムを実行して動作を確認する。
  7. 修正内容が正しいようであれば、依存パッケージに修正パッチを送る。

上記の手順で作業した結果、依存パッケージ側の対応を待つことなく、依存パッケージの修正パッチを作成することができました。作成したパッチは送付及び受理済みです(これこれ)。

デジタル環境上におけるモンゴル文字のサポートはまだ十分とは言えないので、できる範囲で良くしていきたいです。