Ubuntuでローカルの開発環境を構築する(2024年5月)
2024-05-07
#目次
#はじめに
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
と言われていますが、主にネットワーク周りに課題を感じます。
- container networkからWSL2 Hostにアクセスすること
こちらの記事を参考にさせていただきました。
これはDocker Desktopの挙動とも絡むのですが、host.docker.internal
がWindowsホストを指すので、WSL2のホストにアクセスしようとするとWSL2のIPを取得してマッピングしてあげる必要があります。他には、Windowsホストに転送してから更にnetshを利用してWSL2のホストに転送する方法もあります。
あるいは、Containerを起動するとき、--network host
を指定することで解決できることがあります。
あまりコンテナからホストにアクセスすること自体が少ないのであまり気になりませんが、たまにあると困ります。
- MTUの問題
WSL2からVPN(tailsclae)経由でSSHアクセスする際に、接続できずタイムアウトする問題がしばしば見られました。
こちらのissue
にも同様の問題が報告されています。
MTUを調整することで解決できるようですが、WSLを再起動するたびにもどってしまい、面倒でした。
こちらによると
/etc/wsl.conf
の設定でsystemdを使うことで解決できるようです。
全般的にWSL2のネットワーク周りは、少しややこしいです。
そして、ネットワークをデバッグするのは難しいので、直接PCにインストールすることができれば、それにこしたことはないです。
#Macbook Air(Apple Silicon)
Macで開発することもありますが、こちらも課題がありました。
- toolのバイナリがarm64に対応していないことがある
toolのバイナリがarm64に対応していないことがたまにあります。数年前は何度か直面していましたが、最近は少なくなりました。
- Docker imageのarm64問題
Docker imageについても同様のことが言えます。ただし、Docker Desktop for Macは、Intel系のイメージを使うことができるので、回避できます。
- commandの違い
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のようなツールは使わなくなりました。
-
Chrome
公式からdebファイルをダウンロードしてインストールします。
-
VSCode
公式からdebファイルをダウンロードしてインストールします。
-
Docker
公式の手順に従ってインストールします。
-
apt
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
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
-
etc
以下、お気に入りのツールなどをインストールしています。
-
shellの履歴を検索するツールで、
history | grep
コマンドを打つよりも便利です。 -
シェルプロンプトをカスタマイズするツールです。
シェルプロンプトににnodejsやgoのバージョンや、gitのブランチ名などを表示できます。 -
starshipで使うフォントです。
-
VPNツールです。自宅のPCとクラウド上のVMを繋げたりすることに使っています。
-
ここまでのセットアップには、だいたい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でツールを管理しておくと、セットアップもそれほど時間がかからずミスも防げるので、開発環境を移行をしたいときに便利ですね。
