いそしぎ忘備録
Article

開発サーバーをセットアップしました

DevContainerからmiseに移行し、開発サーバーを復活させた話。遠隔開発と薄い依存管理の両立を目指す。

devservertailscalefedora

はじめに

昔は今と同じように開発サーバーがあったんですが、最近では主たる開発環境はメインマシンに統一されていました。DevContainerのおかげで環境が統一できていたからです。
しかし、これには一つ大きな問題がありました。学校からの遠隔開発がやりづらくなったんです。
無論、環境が統一されているのだから学校からでも開発はできました。しかし、学校に持って行っているノートPCはメモリが16GBしかなく、アカウント管理の都合上ChromeとFirefoxが同時に起動しており、ここでVSCode、WSL2など動かそうものなら、あっという間にメモリが枯渇してしまうのです。

加えて、DevContainerはDocker前提の技術です。私のメインマシンはFedoraですので、Podmanを使用しております。最近改善されたとはいえ、Rootless Podman環境との互換性は芳しくない。それに、メインプロセスのAIエージェントがプロジェクトを跨いで作業するのに、完全分離は不便だというのもありました。
そんな中、miseという比較的薄い依存関係管理ツールに切り替えたことを契機に、開発サーバーを復活させようと思い立った訳です。

マシン情報

今回セットアップしたマシンのスペックはこんな感じです:

  • 機種: NEC PC-MJ29MLZDG
  • CPU: Intel(R) Core(TM) i5-3470S CPU @ 2.90GHz
  • SSD: CSSD-S6B480CG3VX 447.1G
  • メモリ: 8GB×2 + 2GB×2
  • OS: Fedora 44

このマシンは、廃棄される予定だったところを譲り受けた、私にとって初めてのデスクトップマシンです。スペックは決して高くありませんが、それゆえに愛着があります。

サービス

OpenCode Server

systemdによりOpenCodeのWebモードが自動起動するように設定しました。これで、マシンが起動すればすぐに開発環境が利用できるようになります。また、先述の通りコンテナで開発環境が分離されているわけではないので、作業スペースを切り替えるだけで依存関係も自動で切り替わる良い開発環境を得られます。

Cockpit

FedoraにはCockpitという便利なWebベースの管理ツールがデフォルトでインストールされています。これを使うと、ブラウザからマシンの管理が可能になります。特に、コマンドの遠隔実行を気軽に実行できる点が気に入っています。

Tailscale

Tailscaleはとても便利なVPNです。これがないと学校からのアクセスができません。
動的なGlobal IPしか持たないマシンであっても、アドレス交換1を適宜行うことによって接続できます。
Tailscale運営はアドレス交換だけやればいいのですから通信コストをほぼ支払う必要がありません。おそらくそのコスト構造の恩恵で、個人は無料で利用できます。
難しいことを考えなくてよいので、本当にありがたいことです。 OpenCodeとCockpitはデフォルトではhttpですから、TailscaleのようなE2E暗号化されたVPNがなければこれらを外部から使うことはできないのです。それでは恩恵が半減してしまいます。
このサーバーの縁の下の力持ちでもあります2

おわりに

miseは便利な反面、OSを巻き込んだ依存関係の解決を行わざるを得ない状況に陥ることがあります。ですから開発環境可搬性は結構あいまいです。
それでも、セットアップの便利さなどを鑑みれば実用的です。友人のNixマニアには「Nixを使えばもっと便利になるのに」と日々言われているので、そのうち導入するかもしれません3しNixOSに移行するかもしれません。

Footnotes

  1. 実際にはそれに付随するNAT超え等ネゴシエーションをやっています

  2. 余裕があるならhttps対応しましょう

  3. Fedoraは最新版の44からNixが簡単に導入できます。