見出し画像

Go+Fyneで作ったデスクトップアプリを新WSL上で動かしてみる


こんにちは、株式会社SHIFT、自動化エンジニアの水谷です。
今回の記事はGoでのプログラミングではなく、どちらかと言うと時事ネタのようなものになります。

ご存じの方もいらっしゃると思いますが、少し前にWindowsの最新バージョン "Windows 11" がリリースされ、それに伴いWSL(Windows Subsystem for Linux)も新しいバージョンがMicrosoft Storeでプレビュー公開されました(2021年10月時点)。

この新しいWSLの大きな特徴の1つが、Linuxのコマンドやコマンドラインアプリだけでなく、LinuxのGUIアプリもWindows上で動かしてしまおうという、WSLgのサポートです。

WSLが登場したときに、「Windows上で本物のUbuntuが動く」というだけで驚いたものですが、ついにWindows上でシームレスにLinuxのGUIアプリまで動くことになってしまったのです! これはWindowsのターニングポイントの1つとして挙げられる出来事ではないかな、と個人的には思いましたので、今回の記事ではそのWSLgをインストールして、少し前の記事でGo+Fyneで作ったマンデルブロー集合描画のGUIアプリをWSL上のUbuntuで動かしてみたいと思います。

新WSLのインストール

先ほども書きましたが、新しいWSLは、Windows 11用として、現在プレビュー公開されています。Windows 11がインストールされているPCから、Microsoft Storeを開き、"WSL"のキーワードなどで検索すると見つけることができますね。アプリ名は「Windows Subsystem for Linux Preview」です。

画像1

上のスクリーンショットはインストール後のものですが、未インストールの場合は「インストール」(あるいは「Install」)ボタンのワンクリックでインストールができます。

※使用したPCには、以前のバージョンのWSL2がインストールされている状態でしたが、特に問題なくインストールできました。

試しにX11-appsを入れてみる

Microsoft StoreからUbuntu 20.04を新たにインストールして、さっそくWSLgを試してみたいと思います。

まずは、X11のデモ的なアプリが入っている"X11-apps"を入れてみて、有名な(?)"xeyes"などが動作するか見てみましょう。

> sudo apt install -y x11-apps

インストールが終ったら、xeyesとxcalcを実行してみます。

> xeyes &
> xcalc &
画像2

なんともあっさり起動してしまい拍子が抜けてしまいますw

WSLgのプレビュー版が出回った時には、これを動作させるだけでもとても多くの作業が必要で、「ちょっと手が出せないな」と思っていたのですが、この新しいWSLならほぼ何もせずにGUIアプリが動いてしまいます(少しトラブルがあった方が記事的には面白いのにw)。

Firefoxもインストールしてみる

続いて、Firefoxも試してみました。

> sudo apt install -y firefox

インストールはあっさり完了し、起動して見ると……。

画像3

ターミナルにいろいろメッセージは出たりはしますが、動いています。

ただ、https://www.shiftinc.jp を開いてみると、下のように文字化けしています。

画像4

これは単に日本語のフォントが入っていないだけなので、"Takaoフォント"を、下のようにインストールしてみます。

> sudo apt install -y 'fonts-takao-*'

これで、SHIFTのホームページもこのように表示されました。

画像5

まだ動画の再生には足りないものがあるようですが、とりあえずここまでにします。

※Chromeもチャレンジしたのですが、インストールは成功したものの、起動後数秒でフリーズしてしまいました。原因は不明です。

Go+Fyneで作ったアプリをWSLで動かす

それではGoで作ったGUIアプリはどうでしょうか? この記事で作ったアプリで試してみます。

Goのバージョン1.16をインストールして、Windows上で作ったアプリをディレクトリごとUbuntuのホームディレクトリにコピーし、おもむろにビルドを実行してみます。

もしかしたら、そのままビルドも通ってしまうのでは……、とちょっと期待したのですが、残念ながらビルドエラーが発生しました(なぜかここでちょっと喜ぶw)。

それもそのはず、libx11-devなどX11関連のヘッダーファイルやライブラリを1つもインストールしていないので、当然の結果と言えるでしょう。

もぐらたたき的に、エラーが出るたびに必要なパッケージをインストールしていき、結果的には下のように合計7つのパッケージをインストールするとビルドが通ることが分かりました。

> sudo apt install -y libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libgl1-mesa-dev libxxf86vm-dev

で、実行して見ると……、期待通りに動作しました!

画像6


Windows用にビルドしたアプリと並べて表示すると、このようになります。

画像7


同じソースコードから、別のOS用にアプリがビルドされ、それが同じマシンの同じデスクトップ上に並んで動作している姿は、なんとも不思議なものですね。

Windowsは元々から複数の「サブシステム」を組み合わせて構成されたハイブリッドカーネルのOSです(「Windowsは」と書くと誤解を招く可能性があるので、「Windows NT系OSは」とした方がよいですね)。古くからサブシステムの1つとしてPOSIXが動いていたり、Interixなんてのもあったりして、WindowsにはLinux系のコマンドが使えるような工夫が昔からありました。そして、ついにはLinuxのGUIアプリがシームレスに動いてしまうようになったのです。

もう少ししたら今度はWindows上でAndroidアプリも(エミュレーターではなく)サブシステムで動く、という話も出てきていますね。なんともすごい世界になってきたな、などと思ったりもしますが、四半世紀前からこんな将来を見据えてモノリシックでもなくマイクロでもない、絶妙な設計のハイブリッドカーネルでWindows NTを設計した(←かなり個人的な妄想です)カトラーはやっぱりすごい!(すごい!) と古参Microsoftファンの1人としては思ってしまったりしますw

ま、何はともあれこれでWindowsとUbuntuの両対応アプリの開発もより手軽にできるようになりますね!

――――――――――――――――――――――――――――――――――

執筆者プロフィール:水谷 裕一
大手外資系IT企業で15年間テストエンジニアとして、多数のプロジェクトでテストの自動化作業を経験。その後画像処理系ベンチャーを経てSHIFTに自動化エンジニアとして入社。
SHIFTでは、テストの自動化案件を2件こなした後、株式会社リアルグローブ・オートメーティッド(RGA)に出向中。RGAでは副社長という立場でありながら、エンジニアとしてAnsibleやOpenshiftに関する案件も担当。また、Ansibleの社内教育や、外部セミナー講師も行っている。
最近の趣味は電動キックボードでの散歩。

★ 過去記事をまとめたマガジン「SHIFTエンジニアが学びながら解説するGo言語」もご参照ください。

お問合せはお気軽に
https://service.shiftinc.jp/contact/

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/