開発環境を晒す 2025

by Takanori Maehara on 31st December 2025

この記事では 2025 年の棚卸しとして今年の自分の開発環境を紹介します.(注:12月31日までWIP)

計算機たち

主に以下の計算機たちからなります.

サーバ

全体構成

Mini PC 4台を dev, pve1, pve2, pve3 と呼びます.いずれにも Proxmox がインストールされており,次のような役割を担っています.

基本的に dev サーバ上の仮想マシン (以下簡単のためこれも dev サーバと呼びます) に接続して作業をし,作ったプログラムを手元の Kubernetes クラスタにデプロイして実行します.手元で収まらない計算(機械学習モデルの学習や大規模データ処理)は AWS に投げています.

これ以外にも NAS があり,長期間保存が必要となるものはそちらに保存していますが,この記事では省略します.

ネットワーク

ISP が CGNAT を導入しているため,外部から自宅サーバに自然に接続することができません.そのため以下の2つの方法でサーバを公開しています.

  1. AWS Lightsail (Bastion Server) + Tailscale for SSH
  2. Cloudflare Access for HTTPS

HTTPS で公開できるものは Cloudflare Access を使って公開しています.SSH でアクセスするために AWS Lightsail の最も安い IPv4 インスタンスを Bastion サーバとし,Tailscale を使って自宅クラスタに接続しています.Cloudflare Tunnel や直接 Tailscale を使うのが別案ですが,外出先でクライアントにソフトウェアをインストールできない場面があるためこうしています.

Kubernetes クラスタ

上述の通り,あまり重くない単発処理とか常時実行し続けたいもの(ウェブアプリ,APIなど)を Kubernetes Cluster で実行しています.ノードを気軽に追加削除したかったので Cluster API を用いて半自動化をしています.

Management Cluster

pve1 上に VM (2 vCPU, 4GB RAM) を立ち上げて k3s を実行しています.cluster-api, capmox, talos-provider による標準的な構成です.

Workload Cluster

pve1, pve2, pve3 上に 3x Control Planes (2 vCPU, 4GB RAM, 100GB disk) と 3x Workers (10 vCPU, 20GB RAM, 700GB) が走っています.

アプリケーションたち

Kubernetes 上では個人用の便利ツール (growi, aria2, firefox, ...) から開発系まで幅広く実行しています.開発に関わるものとしては

があります.Gitea などのバージョン管理システムは self-host しておらず,外部のもの (GitLab) を利用しています.これは自宅 Kubernetes クラスタ上にあまり大事なものを置きたくない(勉強用として気軽に破壊できるようにしておきたい)ためです.同じ理由でデータベースもアプリケーション毎に用意するものに限定することで「データベースサーバ」としては振る舞わないようにしています.重要なデータは S3, R2, NAS のいずれかに保存しています.コンテナレジストリは自宅環境にデプロイするもののイメージ用で,AWS などを援用する場合は dockerhub や ECR などの適当な外部サービスを使っています.

dev サーバ

クライアントから ssh して作業するためのマシンです.Ubuntu が走っています.カスタマイズは控えめなので特に面白いものはありません.よく使うツールは以下のとおりです.

zsh: 手元のクライアント (Mac) に合わせるために zsh を使っています.zshrc は概ね環境変数の設定だけで特別な alias はほとんどありません.唯一晒して面白そうなのは以下だと思います.

function cd_up() {
  case $1 in
    *[!0-9]*)
      cd $( pwd | sed -r "s|(.*/$1[^/]*/).*|\1|" )
      ;;
    *)
      cd $(printf "%0.0s../" $(seq 1 $1));
    ;;
  esac
}
alias 'cd..'='cd_up'

例えば ~/abc/def/ghi において cd.. ab とすると ~/abc に cd できます.

neovim: パッケージマネージャとして lazy を使い,mason で LSP を設定しています.ただそれ以外には特別なことはしていません.

mise: 可能な限りツールを mise 経由で導入するようにしています.

duckdb: 上述の通りデータベースを self-host しない方針なので,重要なデータは直接 S3 などに保存しています.それらを効率的に扱うためのツールとして duckdb を常用しています.

Claude Code: 常用するようになりました.コーディング支援・開発環境設定・Kubernetes クラスタ操作など,多くの作業を Claude Code に依存しています.

OpenCommit: Git のコミットメッセージはほぼ AI まかせです.コミット粒度は AI が要約を作れるくらいにすることを心がけています.

主に使っているプログラム言語は Rust, Python, TypeScript です.

クライアント

本体

先述の通り基本的に作業は開発サーバに SSH して行うので,手元のマシンは扱いやすいものならなんでもいいです.軽くて電池持ちがよいので MacBookAir を使っています.

ソフトウェアたち

狭義の開発に使っているのは iTerm2+tmux, VSCode くらいですが,広義の開発という意味では日常的に使うもの全てが該当します.

VSCode: ある程度長いプログラムを書くときに使います.特に Rust を書くときはコード補完がほぼ必須だと思っています.

iTerm2 + tmux: ターミナルで繋ぐときの選択肢です.色々「モダン」なターミナルを試しましたが,結局安定性と tmux とのインテグレーションの UX のため iTerm2 に戻ってきました.

Vivaldi: ブラウザです.昨年は Zen を使っていましたが,Chromium ベースでないと動かないページが複数あって困ったので結局 Chromium ベースに戻ってきました.複数のブラウザ間でブックマークを共有したいという要求があり floccus でブックマークを管理しています.

Raycast: ローンチャです.Command + Space の drop-in replacement であり,今のところクリップボード履歴,ウインドウ位置調整,スリープ抑止くらいしか使っていません.