北斗の拳に学ぶ:winappsがもたらす開発環境の革命
北斗の拳の世界観になぞらえて、winappsを解説していきますね。
北斗の拳の世界では、強敵(とも)と戦うために、さまざまな技を駆使しますよね。ソフトウェア開発の世界でも、WindowsとLinuxという二つの異なるOSの間で、それぞれの強みを生かし、弱点を克服することが求められることがあります。
そんな世紀末(異なるOS間の互換性問題)を生き抜く救世主こそが、winappsです。
これは、Linux上で、まるでネイティブアプリのようにWindowsのアプリケーション(Word、Excel、PowerPoint、Adobe Photoshopなど)を動かせるようにするツールです。
かつては、WindowsアプリをLinuxで動かすには、Wineという別のツールを使い、設定を頑張って、それでも動かない、なんてことがしょっちゅうありました。しかし、winappsは、このWineをベースに、まるで一つのOSで動いているかのようにシームレスに連携させる魔法のような技(技術)なんです。
winappsのすごいところは、ただ動くだけではないんです。
秘孔その壱
ネイティブアプリのような一体感
Windowsアプリが、Linuxのアプリケーションメニューに表示され、アイコンをクリックするだけで起動します。まるでLinuxのアプリのように使えるんです。
秘孔その弐
デスクトップ環境との連携
GNOMEやKDEといったデスクトップ環境とシームレスに連携します。例えば、ファイルマネージャー(Nautilusなど)でWordファイル(.docx)をダブルクリックすれば、WindowsのWordが起動してファイルが開かれます。これは本当に便利!
秘孔その参
開発環境の統一
開発環境をLinuxに統一しつつも、Windowsでしか動かない特定のアプリケーション(例えば、特定のCADソフトや会計ソフト)を使わなければならない場合に非常に役立ちます。
winappsをLinuxに導入する手順は、秘孔を突くように、正確に順番を守ることが重要です。
Linux OS
Ubuntu 20.04以上、またはFedora 32以上を推奨。
Windows VM
Windows 10/11がインストールされた仮想マシン(VirtualBoxやKVM)が必要です。
Linuxのデスクトップ環境
GNOMEやKDE。
VirtualBoxをインストールし、Windows 10/11の仮想マシンを準備します。
# Ubuntuの場合
sudo apt-get install virtualbox
仮想マシンを作成したら、Guest Additionsをインストールして、ホストOS(Linux)とゲストOS(Windows)間の連携を強化しておきましょう。
GitHubからwinappsのソースコードをクローンします。
git clone https://github.com/winapps-org/winapps.git
cd winapps
~/.config/winapps/winapps.confという設定ファイルを作成します。
# サンプル設定ファイルをコピー
mkdir -p ~/.config/winapps
cp winapps.conf ~/.config/winapps/
この設定ファイルで、Windowsの仮想マシンの設定(ユーザー名やIPアドレスなど)を記述します。
# ~/.config/winapps/winapps.conf の編集例
# 仮想マシンのユーザー名
WINAPPS_USER="<Your-Windows-Username>"
# 仮想マシンのIPアドレス。DHCPの場合は`hostname`でもOK
WINAPPS_HOST="192.168.1.10"
# 仮想マシンの実行方法。デフォルトは`kvm`だが、VirtualBoxの場合は`vbox`に
WINAPPS_VIRT_TECH="vbox"
# VirtualBoxの場合、仮想マシンの名前を指定
WINAPPS_VBOX_VM="<Your-VM-Name>"
最後に、インストールスクリプトを実行します。
sudo ./installer.sh
このスクリプトが、WindowsアプリのショートカットをLinuxのアプリケーションメニューに自動で作成してくれます。
winappsはシェルスクリプトや設定ファイルが中心なので、直接的な「サンプルコード」というよりは、「設定ファイル例」が該当します。
例えば、~/.config/winapps/winapps.confに、特定のアプリケーションを追加したい場合、APP_LISTという項目に追記します。
# ~/.config/winapps/winapps.conf の一部
# デフォルトで有効なアプリケーション
APP_LIST="Photoshop,Illustrator,Acrobat,Word,Excel,Powerpoint,Access,Publisher,Outlook,Onenote,Visio,Project"
# 例えば、Windows版のChromeを使いたい場合
# Chromeを追加
APP_LIST="Photoshop,Illustrator,Acrobat,Word,Excel,Powerpoint,Access,Publisher,Outlook,Onenote,Visio,Project,Chrome"
これにより、LinuxのアプリケーションメニューにChromeが表示され、クリックするとWindowsのChromeが起動します。
このwinappsは、北斗の拳で言うところの「奥義」を、使いやすい「型」として提供してくれているようなものです。
IaC (Infrastructure as Code) の観点 このプロジェクトのスクリプトと設定ファイルは、IaCの考え方に近いです。仮想マシンやアプリケーションの設定をコードとして管理し、コマンド一つで環境を構築できます。これは、開発環境の再現性やチームでの共有に非常に重要です。
DevOpsの観点 LinuxベースのCI/CDパイプラインを構築しつつ、Windowsに依存するビルドツールやテストツールを統合する必要がある場合に、winappsのような仕組みが非常に役立ちます。
開発効率の向上 Linuxをメインに開発しつつも、Windowsでしか動かないレガシーなツールや、特定のベンダー製ツールを必要とする場合、デュアルブートや別のPCを用意する手間が省け、開発者の生産性を大きく向上させます。