EasyWine

**EasyWine**（イージー・ワイン）は「macOS で簡単に使える日本語が文字化けしない Wine」を目標に製作されていた Wine のラッパーアプリケーション。

MikuInstaller などのように GUI が用意されていないのは開発コストが趣味の範疇を超えるからということと作者が必要性を感じていないため。また、Windows用アプリケーションのバンドル化を実装しなかったのはソフトウェアのライセンスに疎いユーザがバンドル化したものを安易に頒布できるような形式にしたくなかったため。

2019年には 64-bit Windows アプリケーションに対応した EasyWine64.app がリリースされ、WINEPREFIX が 64-bit 用に `~/Library/Caches/Wine/prefixes/default64` に変更された。

2019年10月時点で Wine が macOS Catalina に対応しておらず（現在はCatalina対応）、新規ユーザの混乱が予想されたため2019年10月23日に頒布を無期限休止が告知されたが、翌月11月より  にて頒布を再開した。

## 歴史
EasyWine の前身として NXWine（**N**o **X**11 **Wine**）が存在した。NXWine では AppleScript を用いて Wine や Winetricks の機能を簡易的な GUI から呼び出せるようになっていたが、AppleScript の管理が手間であることとインターフェイスが中途半端になるため EasyWine では廃止された。作者は GUI について CrossOver for Mac との差別化として考えているため積極的に開発しようとは思っていない。

### バージョンとリリース頻度
EasyWine のバージョンはビルドされた日付である 8 桁の数字と Wine のバージョンで管理されているが、明確なバージョン管理は行われておらずコミット時の開発ログも適当に付けられている。新バージョンのリリースについては Wine のニューバージョンリリース時期や作者の気まぐれで決まるため不定期である。

以前は Wine の開発版（Wine Develop）を採用していたが、4.x 以降は動作が不安定であるため安定版（Wine Stable）を採用している。出来るだけ新しいものを取り入れるため Git の Stable ブランチが使用されている。

### Nihonshu との関係性
Nihonshu（にほんしゅ）とは EasyWine のベースであり、日本語環境用にカスタマイズされた Wine のバイナリ群である。Nihonshu と EasyWine に含まれているものはほぼ同じものだが EasyWine では Wine を呼び出すスクリプトにネイティブライブラリの自動登録処理が含まれている。初回起動時にネイティブライブラリのコピーや regsvr32 などの処理が入るため Nihonshu と比較すると初期設定に少し時間がかかる。

#### Nihonshu 製作の経緯
作者が Wine に触れ始めた頃、macOS の パッケージマネージャは未だ MacPorts か Fink しかなく、MacPorts を使用して Wine を導入していた。しかし、MacPorts の Wine は依存関係が非常に多く、バリアントで不要なライブラリを除外してビルド出来るようになってはいなかった。これはビルドにかかる時間を無視すれば大したことではないが、依存関係にある GStreamer がアプリケーションによって無限にエラーを吐き続け winegstreamer.dll を無効にしても回避できないという重大な問題があったためセルフビルドすることになった。その過程で都度レジストリを登録して日本語の設定をするのが面倒になったため Nihonshu を作り始めた。

## 仕様
EasyWine とそのベースである Nihonshu には日本語環境での動作を最適化するために下記のような工夫が成されている。ここでは根幹部分である Nihonshu について主に説明する。

### 代替フォントの自動設定
Nihonshu では MS UI Gothic 等を置き換えるための設定が自動的に行われる。この動作は Wine の呼び出し方法を変えることで拡張 INF が読み込まれなくなり適用しないようにすることもできる。
```shell-session
$ nihonshu explorer # 完全日本語向け設定適用
$ wine explorer     # 一部日本語向け設定適用
```
ただし、2019年8月版では拡張 INF だけではなくバイナリ自体に手が加えられているため `HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes` にある `MS Shell Dlg` など、一部の項目は値を変更しても元に戻るためユーザによるカスタマイズは無視される。

### 言語および地域設定の日本語化
Wine は `LC_*` 環境変数や  `LANG` 環境変数で言語の切り替えができるが、これらに `ja_JP.UTF-8` を設定したとしても完全に日本語化はされない（地域や表示言語は日本語になるが根幹の言語は English のままである）。Nihonshu にはこの部分を日本語にするためのパッチが当たっているため一部の Windows アプリケーションで採用されている「日本語版 Windows 認証」をパスできるようになっている。

Homebrew 版 Wine との差別化として gettext による翻訳がされていない一部のインターフェイス（例えば『マイ コンピュータ』）が英語のままだが Nihonshu ではきちんと翻訳された状態で表示されるようになっている。

### メニューバーの自動非表示・表示の仕様に関する変更
Nihonshu ではプログラムの起動時に macOS のメニューバーが自動的に非表示になる仕様になっていた。これは作者が使用していた MacBook Air (11-inch) のディスプレイ解像度が1366x768で、1280x720のゲームなどをウィンドウモードで起動すると縦の解像度が足りず画面下が切れてしまうために実装されていた。後期型ではシンボリックリンクの差し替えを行うことによりユーザが表示・非表示を自由に選択することができるようになっていた。しかし、フル HD ディスプレイの普及や一部のユーザの不満を理由に最終的にこの機能は廃止された。

### 同梱されている和文フォントに関する変更
Nihonshu には和文フォントとしていくつかのフォントが同梱されていた。一時期は macOS に標準インストールされているヒラギノ系での代替を行っていたが macOS のアップデートによりフォント名が変わり、将来性が確保できないと判断して再度和文フォントを同梱するようになった。

なお、採用するフォントについては次のテストを行って判断している。

* アンチエイリアス無効で綺麗かどうか（ビットマップを含んでいるかどうか）
* アンチエイリアス有効で綺麗かどうか
* 上記2種類の状態でレイアウトの崩れは起きないかどうか
* ライセンスに問題はないか

まず候補としたのは IPAモナーフォント だが、アンチエイリアス有効時のデザインが美しくなかった（また、ジオシティーズの閉鎖によって昨今は入手が困難になった）。次点で さざなみフォント が候補に上がり、採用していた時期もあった（ビットマップで RPG ツクール 2000 系のゲームでの可読性が高い）。最終的には後述する時代の流れでアンチエイリアスを有効にすることになったため、Ubuntu で実績のあった VLゴシック が採用されている。

ちなみに macOS に標準インストールされている Osaka は少々特殊で Wine 環境の一部で適用されないことがあるため候補外としている。

### フォントのアンチエイリアスに関する変更
EasyWine の前身である NXWine からフォントのアンチエイリアスは無効になっており、ビットマップが含まれるフォントをメインで採用していた。これは作者がビットマップフォントが好きであるからということと、文字サイズの変化によるレイアウト崩れを出来るだけ抑制するためだった（Windows XP 時代は非アンチエイリアスが主流だったためアンチエイリアスの場合に表示が溢れる恐れがあった）。また、リリース当時は『ib』や『青鬼』といった RPG ツクール 2000 系のゲームが流行っており、これらのゲームはアンチエイリアスが有効になっているとゲーム内でのテキストが非常に見づらいという問題があったためユーザのニーズにも合わせてアンチエイリアス無効をデフォルトにしていた。

その後、ゲーム以外のアプリケーションを動かそうとするユーザが増え、「フォントが汚い」という声が増えてきたためアンチエイリアス有効をデフォルトにすることにした。なお、この「フォントが汚い」には2種類考えられ、ビットマップフォントと macOS の PDF レベルのアンチエイリアスとの差による「汚い」と、ビットマップを持たないアウトラインフォントに対してアンチエイリアス無効を設定した「汚い」がある。ユーザがどちらのことを指して「汚い」と言っていたのかは知らないが、EasyWine ではビットマップを含むフォントを採用していたため恐らく前者のことであると思われる。

この頃には FreeType の描画品質も非常によくなっていたため一般的な Windows アプリケーションを使うユーザからの不満はなかったが一部のゲームユーザからはやはり不満の声が上がっていた。しかし、Wine ではアプリケーションごとにネイティブライブラリの設定は変更できてもフォントのアンチエイリアスを切り替える機能がなかったためゲームユーザ向けの設定は断念した。

なお、2019年8月版ではアンチエイリアスのパラメータにパッチを当てており、一般的な Wine よりも macOS のレンダリングに近くなるようにしている。

### 多重起動に関する変更
現行版では Windows アプリケーションが多重起動出来るようになっているが、プロセスの多重起動による WINEPREFIX への悪影響を懸念して暫くその機能を無効にしていた。

### 64-bit Windows アプリケーションの対応に関する変更
Wine が 64-bit Windows アプリケーションに対応してからも Nihonshu は暫く対応を見送ってきた。現状の Catalina 問題からもわかるように 64-bit のコードだけでビルドした Wine（Wine のフォーラムでは「Pure 64 bit Wine」と呼んでいるユーザがいる）はまともに動かない。WineHQ のビルドガイドにも記載されているが、64-bit Windows アプリケーションに対応させるためには 32-bit と 64-bit 両方のコードをビルドする必要がある（macOS ではこれを ユニバーサルバイナリ と呼んでいる）。これは Wine だけでなく依存関係のライブラリも含めての話であり、単純にビルドに必要な時間がこれまでの2倍以上必要になる。また、ソフトウェアによってユニバーサルバイナリの作り方も異なりビルド自体の難易度が高くなるためテストにも時間が必要だった。これらの事情から対応を見送っていたが、徐々に「64-bit アプリケーションに対応して欲しい」という声が増えてきたため2019年5月版で対応した。

### 同梱されている依存ライブラリ
Nihonshu には下記のライブラリが含まれているため XQuartz のインストールが不要である（X11 のサポートも有効にしてビルドされているためレジストリエディタで設定を変更することで X11 モードで使うことも出来る）。なお、本家 WineHQ バイナリにはこれらのライブラリが含まれていないため XQuartz もしくは自前のライブラリが必要になっている。バージョンによってこれらのライブラリの種類に変動があったが最終的に下記のものに落ち着いている。Gstreamer 系はオーディオやビデオの再生時に winegstreamer.dll がエラーを起こすことが多々あり、ネイティブの quartz.dll と比較したところ後者の方が安定していることが多かったため敢えて外している。

* **[[FreeType]]**
* **[[Libpng]]**
*libjpeg-turbo
* LibTIFF
* Little CMS

Nihonshu および EasyWine に含まれるライブラリはビルド時に依存ライブラリの呼び出しを絶対パスから相対パスに変更しているため、例えば EasyWine64.app は基本的にどこに置いても実行することができる。ただし、ディスクイメージ上での起動は動作が著しく重くなるため推奨しない。
```shell-session
$ otool -L /Applications/EasyWine64.app/Contents/Resources/wine/lib/libwine.dylib # EasyWine
/Applications/EasyWine64.app/Contents/Resources/wine/lib/libwine.dylib:
	@rpath/libwine.1.dylib (compatibility version 1.0.0, current version 1.0.0)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.64.0)
	/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 775.19.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.50.2)
$ otool -L /usr/local/lib/libwine.dylib # Homebrew
/usr/local/lib/libwine.dylib:
	/usr/local/opt/wine/lib/libwine.1.dylib (compatibility version 1.0.0, current version 1.0.0)
	/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1349.98.0)
	/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 775.20.0)
	/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.60.2)
```


## EasyWine の基本的な使い方
アプリケーションを単体で実行した場合は『Wine エクスプローラ』が起動するようになっているのでそこから実行ファイルを選択するか、Finder から実行ファイルを EasyWine で開くようにすればよい。Wine エクスプローラを使わせようとするのは作者的に「これが一番 Wine と Windows のファイルシステムを理解するのに向いているから」という意図がある。

EasyWine では Wine を呼び出すスクリプトに対して下記のように環境変数を設定している。Wine では 64-bit と 32-bit の WINEPREFIX は共存出来ないため別名のディレクトリに構築されるようになっている。32-bit の WINEPREFIX から 64-bit の WINEPREFIX に Windows アプリケーションを移行する場合は単にファイルをコピーするか、Windows アプリケーションを再インストールする必要がある。32-bit のままで使用したい場合は後述の『32-bit 専用モードでの起動方法』を参照。

**<code>~/Library/Caches</code> 以下のディレクトリは不要ファイル削除系のアプリを使うと削除されるため WINEPREFIX の損失に注意しなければならない。**これは Wine が不要になった際にユーザが WINEPREFIX や Mono、Gecko といったファイルをまとめて削除しやすいようにするための措置である。また、一般的な WINEPREFIX である `~/.wine` を使用していない理由はコマンドラインユーザのための措置である。

### 32-bit 専用モードでの起動方法
`EasyWine64.app` は名前を `EasyWine.app`（正確には `EasyWine64.app` 以外の名前）に変えることで 32-bit 専用モードとして動作する。

### プロセスの強制終了
Wine アプリケーションが応答しなくなった場合はアクティビティモニタよりもターミナルで終了させた方が早いことがある。
```shell-session
$ killall wineserver wine-preloader   # 32-bit の場合
$ killall wineserver wine64-preloader # 64-bit の場合
```


### ターミナルからの利用
下記のファイルからなどから Wine を起動することが出来る。`wine` は一般的な Wine と同じものであり、`nihonshu` は拡張 INF などによる設定などのカスタマイズなどが含まれている。これらのファイルをターミナルから利用することでデバッグメッセージを確認することが出来るし、ディレクトリの内容を `/usr/local/bin` などにコピーして利用することも出来る。

* `EasyWine64.app/Contents/Resources/wine/bin/wine`
* `EasyWine64.app/Contents/Resources/wine/bin/nihonshu`

### Winetricks を使う場合

EasyWine にはビルド時点での最新の Winetricks が同梱されており、コマンドラインからのみ利用することができる（あなたの macOS に Zenity がインストールされている場合、Winetricks はそれを呼び出すかもしれない）。EasyWine 環境に対してライブラリやフォントをインストールする場合はいくつかの環境変数の設定が必要になる。以下はシステムのアプリケーションディレクトリにインストールされている EasyWine64.app で .NET Framework 4.5 をインストールする場合の例である。なお、先頭の `$` はシェルのプロンプトであるため実際には入力する必要はない。


```shell-session
$ export PATH=/Applications/EasyWine64.app/Contents/Resources/wine/bin:$PATH
$ export WINEPREFIX=$HOME/Library/Caches/Wine/prefixes/default64
$ winetricks dotnet45
```


Winetricks だけを更新したい場合はファイルを差し替えるだけでよい。


```shell-session
$ curl -O https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
$ chmod +x winetricks
$ mv winetricks /Applications/EasyWine64.app/Contents/Resources/wine/bin/winetricks
```


## 裏話

### Wine の起動ダイアログが途中から変わった理由
検証の際に作者が Nihonshu 版 Wine と Homebrew 版 Wine と MacPorts 版 Wine を使うので違いがわかりやすいようにしたかったから。

### 「Naver まとめ」がメインページになっている理由
Naver まとめでは各項目を「パーツ」として管理しているためコンテンツの差し替えが簡単であり、ページ内コンテンツの並べ替え等が発生した場合にもドラッグで項目が移動できるのでメンテナンスが楽だからということと、PV 数に応じて誰にも迷惑をかけずに広告費が入るから。インセンティブは Wine 系同人誌の制作費と Wine プロジェクトの支援のために使われる。

## 脚注

## 関連項目

* Wine