ダズルではOSSへのコントリビュートも積極的に行っています。
GitHub for Unityについて、弊社エンジニアの@shienaのコードがマージされたものが2017/08/25にv0.18-alpha
としてリリースされました。
GitHub for Unityは、3Dゲーム開発環境UnityへGitHubリポジトリの管理機能を追加する拡張機能です。
GitHubからの反応
GitHub公式でも謝辞のツイートを頂戴しました!
GitHub for Unity 0.18-alpha is now available. Special thanks to @shiena for adding support for non-ascii characters! https://t.co/34195Flybs
— GitHub (@github) 2017年8月24日
プレゼントもいただきました!
対応した内容
- Historyタブのコミットログの非ASCII文字の文字化けの修正
動機
@shienaがUnityの情報についてキャッチアップを行っていた際にGitHub for Unityを見つけ検証したところ、以下のような文字化けに遭遇しました。
その不備が普及の妨げになることがもったいないと考えた@shienaが、これを修正することはできないかと考えたことが発端でした。
原因
UnityはMonoをフォークしたC#を利用しており、その中に外部コマンドの出力を非同期に読み込む以下のメソッドがあります。
Process.OutputDataReceived
Process.ErrorDataReceived
上記メソッドの中で、byte配列からStringを生成する際Encoding.Default.GetString
で処理しています。
そのためOSで定義されたデフォルトのエンコード、つまりWindowsならSJIS、OSXならASCII以外の文字が化けてしまっていました。
対応
- 問題のあった非同期処理を同期処理に置き換えた。
結果、非ASCII文字も正常に表示されるようになりました。
実は非同期処理自体は残す形のアプローチで進めていたため最終的に採用されたコードはさほど多くはなくなってしまいましたが、Issueをあげ問題解決のためにやりとりを重ねたことを大事に見てくださったように思います。
実際のやりとりについては以下をご覧ください。
- https://github.com/github-for-unity/Unity/pull/136
※これ以外にもDMなどのやりとりを多々重ねたようです。
補足
UnityのC#から外部プロセスを実行してその結果を文字エンコードして読み込みたい場合はOutputDataReceived
を使うと文字が化けるので、以下のコードを参考にすると良いです。
最後に
ダズルでは技術方針を定めており、そのうちの一つとして「オープンソース活動」があります。
オープンソース文化、エンジニア文化に敬意を持ち、自社独自のフレームワークなどに固執せずオープンソースのプロダクトを積極的に利用しています。
ダズルでは今後も様々なOSSへのコントリビュートを積極的に行っていきます。