プログラマのためのUbuntu WSL2編

Linuxは、狭義にはLinuxカーネル、広義にはそれをカーネルとして用いたオペレーティングシステムを指します。LinuxはUnix系オペレーティングシステム (OS) の1つと言えます。
UbuntuはLinuxディストリビューションの1つです。初心者からベテランまで、幅広く利用されています。
WSL2は、Windows上でLinuxを動作させるための実行環境です。
本記事では、WSL2で動作するUbuntu 22.04で、C言語やC#のプログラムを各種エディタで作成する方法を紹介します。

WSL2とWSLgとはなにか?

WSL2では、Windows上で完全なLinuxが動かせるようになり、できることが大幅に増えました。WSL2では、WindowsとLinuxを統合し、LinuxをWindowsと同じ使い勝手で利用することを目的に設計されています。WSL2では、あたかもWindowsにインストールされているソフトウェアの1つのように、Linux環境を利用できます。
WSLg(Windows Subsystem for Linux GUI)とは、Windows上でLinux GUIアプリケーションを実行するための仕組みです。WSLgでは、LinuxのGUIベースのアプリがWindows上でシームレスに動作します。ただし、現時点(2024年1月)のWSLgでは、Windows側の日本語IMEが利用できない制約があるため、WSL2に導入したLinuxディストリビューション側で日本語入力を対応させる必要があります。

WSLgを含むWSL2を使うための手順は、以下の記事で紹介しています。

以下の記事では、WSL2で動作するUbuntu 22.04環境を利用することを前提としています。

gccによるコンパイル環境の構築

端末を起動し、以下を実行します。

sudo apt update
sudo apt install -y build-essential

GeditでC言語を編集してみる

geditは、GNOMEデスクトップの標準テキストエディタです。ただし、WSL2からUbuntuを利用する場合は、geditをインストールする必要があります。geditは、通常のテキストエディタとしての機能に加え、複数のプログラミング言語に対応したハイライト表示、コードスニペットの追加など、プログラム開発者向けの機能も有しています。geditは、Windows、macOS、Unix系のOSで動作します。
geditの主な機能は以下の通りです。

  • シンタックス強調
  • 自動インデント
  • UTF-8を含む複数の文字コードへの対応
  • 複数の言語のスペルチェック
  • スニペット機能
  • プラグイン機構によるさまざまな機能拡張

geditは、GUIのタブを持っており、複数のファイルを同時に編集することができます。また、GVfsを使ったリモートファイルの編集、完全なアンドゥとリドゥ、検索と置換などにも対応しています。

geditはUbuntuのコマンドラインから、次のコマンドでインストールすることができます。

sudo snap install gedit

geditの起動は次のコマンドで行います。ここで”sample01.c”はC言語で編集するファイル名です。

gedit sample01.c

上のように、Windwosのデスクトップにgeditの画面が表示されます。
geditから次のコードを入力してみましょう。

#include <stdlib.h>

int main()
{
  system("/bin/cat /etc/lsb-release");
}

すると、エディタ上のコードはシンタックスハイライトされて表示されます。
コードの入力が終わったら、gedit上部の[Save]ボタンをクリックし、「sample01.c」を保存します。

C言語をコンパイルするには

コンパイラを含めたビルド環境一式をインストールします。

sudo apt install -y build-essential

そして次のコマンドでコンパイルし、作成したアプリを実行してみます。

gcc -o sample01 sample01.c
./sample01

下記のように、Ubuntuのバージョン情報が表示されれば成功です。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

Geditで日本語入力するには

ここで注意すべきことは、この時点ではgeditで日本語が入力できないことです。本理由は、冒頭にも述べましたが、Windows側の日本語IMEが利用できない制約があるためです。この問題を解決する方法の一つは、WSL2で動作するUbuntu側で日本語入力に対応した機能群をインストールすることです。ただし、この方法はあまり使い勝手が良いとは言えません。
日本語入力の問題を解決するもう一つの方法は、発想を変えてWindows版のgeditをダウンロードして使用する方法です。そうです。Win64版のgeditをインストールし、WSL側からそのバイナリを起動すれば、Windows側のIMEで日本語入力ができるのです。
以下でその検証をしてみます。

Windows版Geditをダウンロードするには

Windows 64bit版のgeditをこちらのリンクからダウンロードします。

[gedit-x86_64-3.20.1.msi]をクリックするとダウンロードが始まります。ダウンロードしたインストーラをエクスプローラからダブルクリックして実行します。

ライセンスの承諾画面で「I accept …」にチェックし、[Next]。

インストールされる場所は、後ほど必要になるのでメモしておくことをお勧めします。
[Next]。

[Install]をクリック。

[Finish]をクリック。

スタートメニューをクリックし、検索窓に”ged”と入力すると、検索結果候補にgeditが表示されるので、クリックして起動します。

起動できることを確認できたので、右上の[x]をクリックしてgeditを終了します。
ここで、WSL2側からWindowsバイナリのgeditを起動します。
geditはデフォルトでは以下の場所にあります。インストール時に保存場所を変更した場合は、適宜読み換えてください。

"C:\Program Files\gedit\bin\gedit.exe"

WSL2側からWindowsのCドライブを参照して、geditを起動します。

/mnt/c/Program\ Files/gedit/bin/gedit.exe sample01.c

上の図では、C言語のコードの冒頭部分に、日本語のコメントを加えたところです。[Save]クリック後に、次のコマンドでコンパイルし、実行してみます。

gcc -o sample01 sample01.c
./sample01

前回同様、下記のようにUbuntuのバージョン情報が表示されれば成功です。

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=22.04
DISTRIB_CODENAME=jammy
DISTRIB_DESCRIPTION="Ubuntu 22.04.3 LTS"

gedit.exeのあるディレクトリを環境変数”PATH”に追加すると、起動が楽になります。この際は、WSL2側にインストールしたgeditが起動されないようにアンインストールしておく必要があります。WSL2側のgeditが起動されないようにするためです。

nanoを使ってC#に挑戦してみる

まず、C#をインストールします。

sudo apt install -y mono-devel

今度はnanoというエディタを使ってみます。nanoはGUIを持たない、CUIベースのエディタです。リモートログインして作業するなど、GUIが使用できない環境でも使用できる利点があります。

nano sample02.cs

以下のコードを入力します。

using System;
using System.IO;
using System.Text;

class FileRead1 {
  static void Main() {

    StreamReader sr = new StreamReader(
                            "/etc/lsb-release");
    string text = sr.ReadToEnd();
    sr.Close();

    Console.Write(text);
  }
}

Ctrl+Oで”sample02.cs”という名称でファイルに書き込みます。次にCtrl+Xで終了します。nanoを終了したら、コンパイルします。

mcs sample02.cs

コンパイルが完了すると、”sample02.exe”というファイルが生成されています。”sample02.exe”を実行してみてください。

./sample02.exe

先ほどのC言語のプログラムと同じ、Ubuntuのバージョン情報が出力されます。

Visual Studio CodeをWSLで使用するには

最後に、人気のVisual Studio Code(code)をWSLgで使用する際のTipsを掲載します。

Visual Studio Code を使用する際は、Windows 側に Visual Studio Code をインストールするのが推奨されているようです。WSL2上のUbuntuにインストールしたcode起動時に、以下のメッセージが表示されます。

To use Visual Studio Code with the Windows Subsystem for Linux, please install Visual Studio Code in Windows and uninstall the Linux version in WSL. You can then use the `code` command in a WSL terminal just as you would in a normal command prompt.

WSL2が実行されているターミナルから、Windwos側にインストールされているcodeのEXEを起動せよと言っているようです。その際、競合しないようにWSL2つまりUbuntuにインストールしたcodeをアンインストールすることを勧めています。
どうしても、Linux側にインストールしたい場合は、以下のコマンドを実行することにより、インストールすることができます。

sudo snap install --classic code
code

Visual Studio CodeをWSL2側にインストールすることが推奨されていない理由のひとつは、推測ですが、WSLgがWindowsのIMEに対応していないことにあると筆者は考えています。現時点においては、コードの中やコメントでふんだんに日本語を使いたい場合はどうしても、Windows側にインストールして使ったほうが便利そうです。
また、Codeを軽快に使いたければ、仮想化技術で動作するWSL2側よりもWindows側のほうが効率が良いかもしれません。

おわりに

Linuxの世界はWSLgの活用で、Windows側のアプリを活用シーンが増えていると言えそうです。今後も注目したいと思います。