Ubuntuでローカルの開発環境を構築する(2024年5月)

2024-05-07

Ubuntuでローカルの開発環境を構築する(2024年5月)Cloud and Build, Inc.

#目次

#はじめに

Ubuntu 24.04 LTSがリリースされました。今回は、このバージョンを使ってローカルの開発環境を構築します。

#なぜUbuntu 24.04 LTSをPCにインストールして使うのか

一番は、評価目的であること。

Ubuntu 24.04 LTSはリリースされて間もないので、利用してみて問題なさそうかどうかを確認するために使ってみることにしました。
以前は、Ubuntu 22.04 LTSを直接PCにインストールして使っていましたが、最近までWSL2のUbuntuで開発を進めていたのですが、後述のその他の開発環境での課題感で記述している通りいくつか課題があるため、また直接PCにインストールする方式に戻そうと思いました。

#その他の開発環境での課題感

Ubuntu以外でも下記の開発環境を検討しました。

#WSL2のUbuntu 24.04 LTS

WSL2は、Windowsと合わせて使うことができるで、重宝します。いくつかWindowsでしか動かないアプリを使う機会があり、その場合、デュアルブートだとLinuxをシャットダウンしてからWindowsを起動する必要がありますが、WSL2を使うと、LinuxとWindowsを同時に使うことができます。

WSL2は、完全なLinuxと言われていますが、主にネットワーク周りに課題を感じます。

こちらの記事を参考にさせていただきました。

これはDocker Desktopの挙動とも絡むのですが、host.docker.internalがWindowsホストを指すので、WSL2のホストにアクセスしようとするとWSL2のIPを取得してマッピングしてあげる必要があります。他には、Windowsホストに転送してから更にnetshを利用してWSL2のホストに転送する方法もあります。
あるいは、Containerを起動するとき、--network hostを指定することで解決できることがあります。

あまりコンテナからホストにアクセスすること自体が少ないのであまり気になりませんが、たまにあると困ります。

WSL2からVPN(tailsclae)経由でSSHアクセスする際に、接続できずタイムアウトする問題がしばしば見られました。
こちらのissue
にも同様の問題が報告されています。

MTUを調整することで解決できるようですが、WSLを再起動するたびにもどってしまい、面倒でした。

こちらによると
/etc/wsl.confの設定でsystemdを使うことで解決できるようです。

全般的にWSL2のネットワーク周りは、少しややこしいです。
そして、ネットワークをデバッグするのは難しいので、直接PCにインストールすることができれば、それにこしたことはないです。

#Macbook Air(Apple Silicon)

Macで開発することもありますが、こちらも課題がありました。

toolのバイナリがarm64に対応していないことがたまにあります。数年前は何度か直面していましたが、最近は少なくなりました。

Docker imageについても同様のことが言えます。ただし、Docker Desktop for Macは、Intel系のイメージを使うことができるので、回避できます。

grep,soxなどのコマンドのオプションや挙動がLinuxとは違うことがあります。CI/CDのパイプラインでもだいたいUbuntuを使いますが、Macで開発していると、たまに挙動が違っていて、デバッグが難しいことがあります。

普段デプロイする先がLinux amd64環境のことが多いので、できればローカル開発環境とデプロイ先の環境は同じにしたいと思っています。

そのため上記の理由からMacを積極的には開発目的では使わなくなりました。
もちろん、iOSアプリの開発や、Macアプリの開発などはMacを使わざるを得ないですが、そうでなければ、Ubuntuを使うことが多いです。

#GitHub Codespaces

GitHub Codespacesに限らず、クラウド開発環境(Google CloudのCloud Workstations, Coderなど)は、お金が許せば使いたいという感じです。チームで開発するときも全く同じ環境を共有できるので便利ですね。これは、VSCodeを使っていたらdevcontainerでも良いかもしれません。

ただ、クラウド開発環境は、Webアプリの開発など用途は限られそうです。GPUが使えれば、機械学習の開発環境としても使えるかもしれません。
スマホアプリの開発なんかだと、あまり使えるイメージがないです。

#インストール

インストールに関する手順はこちらでは端折りますが、USBメモリにUbuntu 24.04 LTSのISOを書き込んで、PCに挿してインストールしました。

#セットアップ

セットアップは手動で行います。以前、自動化したいと思い、Ansibleでセットアップスクリプトを書いたこともありますが、最近はmiseでほぼすべてのToolをインストールできるのと大した量でもなく機会も少ないので、Ansibleのようなツールは使わなくなりました。

sudoして使うものや、後のmiseでpythonをインストールするので、その依存関係に関するものなどは、aptでインストールしておきます。

sudo apt update
sudo apt install -y \
    make build-essential wget curl git tmux vim \
    openssh-server openssh-client \
    ibus-mozc mozc-utils-gui \
    sox \
    inetutils-traceroute \
    libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev llvm xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev \
    unzip

dotfilesを管理しているgit repoがあるので、そこから.gitconfig, .ssh/config, .bashrcなどの設定ファイルをコピーまたはシンボリックリンクを作成します。

~/.tool-versionsを配置して、miseを使ってインストールします。
mise i -yだけで下記が一括でインストールできてとても便利です。

golang          1.22
nodejs          22
bun             1.1
python          3.10
rust            1.77
kubectl         1.28.3 
krew            0.4.4
kubectx         0.9
k9s             0.27
k3d             5.6.3
helm            3.14
helmfile        0.164.0
sops  		    3.8.1
age             1.1.1
kustomize       5.3
protoc          25.2
jq              1.7.1
github-cli      2.48.0 
starship        latest
cloud-sql-proxy latest
air             latest
gcloud          latest

ここまでのセットアップには、だいたい1時間ほどかかりました。やることは少ないですが、インストールするものが多いので時間がかかります。

#日本語入力

aptを使って、ibus-mozcをインストールしていますが、英語キーボードなど使っている場合はショートカットなどを設定しておく必要があります。

参考:Ubuntu20.04のMozcでかな切り替えをCtrl+Spaceにする

#使用感

Ubuntu 22.04 LTSと比べて、使用感はあまり変わらず使えます。
1度、ウインドウが固まることがありましたが、ログアウトして再ログインしたら直りました。概ね安定していると思います。

#まとめ

今回は、最新のUbuntu 24.04 LTSを使ってローカルの開発環境を構築しました。WSL2やMacbook Air(Apple Silicon)など他の開発環境と比べても、特に問題なく使えています。
普段からdotfilesで設定や、miseでツールを管理しておくと、セットアップもそれほど時間がかからずミスも防げるので、開発環境を移行をしたいときに便利ですね。