こんにちは。計算創薬科学研究室の堀(D2)です。今日はdotfilesとPXE/Ansibleについて紹介します。 研究に直接関係はありませんが、日々の研究で使用すると便利だったりすると思います。

TL;DR

  • ユーザーレベルの環境設定にはdotfilesがよく使われる
  • dotfilesはラボサーバー・スパコン等で有効、すぐ作業に取り掛かれる
  • 計算ノードレベルの環境設定にはPXE/Ansibleがよく使われる
  • PXE/Ansibleの併用により、計算サーバーに新規導入または不具合が起こっても全消しした後に数コマンドで再設定が可能

ユーザーレベルの環境設定

一般的に研究室に配属されるとPCを支給されたり、学内や外部のスーパーコンピューターの利用を開始したりすると思います。

毎回同じ設定を手動でぽちぽちやったり、いろんなところからgit clonewgetしてツールを整備するといった作業を行うのは、面倒であり、計算機によって設定ミスがあったりする可能性があります。

そうした要望には古くから解決方法があり、dotfiles[1]という仕組みが存在します。

dotfilesというのは~/.vimrc~/.zshrcのような$HOME下にdot(.)で始まる設定ファイルのことを表します。

こうしたファイルをまとめて管理し、Git(GitHub, GitLabなど)に上げ、symbolic linkで$HOME$XDG_CONFIG_HOME下などに適切に配置し、git pullをすることで常に最新の同じ設定をしておくことが可能になります。

しかしdotfilesのような設定ファイルだけでは設定はできてもツールやバイナリなどがないと動かないので、dotfilesと合わせてbootstrapで必要なツールなどをinstallするスクリプトを置いておく人も多いです[2]。

このdotfilesとbootstrapスクリプトによって異なる計算機で同じ最新の設定を適用することが可能になり、研究室に配属された時や新しい環境に移った時などに素早く設定を完了し、素早く研究に取り掛かれることでしょう。

個人的なこだわり

dotfilesは盆栽だと思っています。

自分の設定を鍛えてカスタムしてというのを繰り返して、自分にとって心地の良いターミナルライフを送れると思います。

実際そのように捉えている方々も多いようです。[3] [4]

私は、普段はホストとしてmacOSを、リモートでLinuxを使っており、shellにzsh, editorにnvimvim(といっても普段はもうほぼClaude Code[5]とcodex[6]…), terminalにiTerm2, terminal multiplexerにtmux, appのwindow managerにaerospace, keyboard shortcutにHomerowを基本的に使っています。

他にも色々試してみて、今はこれで落ち着いていますが、また今後数ヶ月も経たない内に変わっている可能性もあります。

ポイントは以下の通りです。

  • なるべく古い計算機やスパコンでも動くように、shell scriptで管理し、symbolic linkやinstallを行う(chezmoi[7]などは使わない)
  • なるべくマウスへの移行が少なくなるようにする(オレオレkeybind, オレオレaliasの設定)
  • なるべく$HOME下ではなく、$XDG_CONFIG_HOME[8]下に配置する
  • ローカルの設定(APIキーなど)はGitHubに上げず別で置き、それ以外はPublicにする
  • Zsh/Vim/NeovimなどでPluginが使えなくても機能するようにする

そんな私の設定はdotfilesに置いています。

サンプル用にDockerコンテナも提供しているので、環境を汚さずに私のターミナル環境を体験することができます。(予告なく変更する可能性があります)

docker pull --platform linux/amd64 ghcr.io/th2ch-g/dotfiles:latest
docker run --platform linux/amd64 --rm -it ghcr.io/th2ch-g/dotfiles

計算ノードレベルの環境設定

サーバーでは自分以外にも他の人が使用するのでもちろんオレオレdotfilesで設定してはいけません。

それに毎回sshしてapt-getなどをチマチマ打っているのでは、計算ノードを多く所有している場合面倒です。

そこでよく使われるのが、PXE[9]とAnsible[10]です。

PXEはネットワーク経由でOSを起動・インストールするためのプロトコルで、Ansibleは複数のサーバーの設定を自動化するためのツールです。

PXEは専用のサーバーを立てればOS Imageを入れたUSBを差してポチポチ設定することもなく、3-10分程度でOSのインストールが可能になります。

Ansibleは複数のサーバーを一括して設定することが可能なので、YAMLにサーバーを追加するだけで設定を追加することが可能になります。

弊ラボでは研究室立ち上げ当初は計算サーバーも少なかったので手動でポチポチ設定していたのですが、去年から計算サーバーを多く調達し、設定が面倒になってきたのでPXE/Ansibleによる設定に移行しました。

おかげで、新しい計算サーバーを導入したら、その設定をYAMLに書きPXE/Ansibleの実行により30分程度でジョブの投入が可能になりました。

さらにサーバーになんらかの不調が起こった場合でもOSの全消しから設定までをほぼ自動で行えるようになりました。

他の研究室でもAnsibleを導入している例は多いようです。[11] [12] [13]

今はClaude Code[5]などがあるので、ポチポチ手動設定から移行するのはかなり簡単になっていると思います。

今後の展望

最近はClaude Code[5]やcodex[6]によるAI codingが流行っていますが、こうした設定もdotfiles化しており、この辺の設定や周辺ツールの設定をさらに強化したいと思っています。

またサーバーについては既にGrafana[14]/Prometheus[15]は導入しているのですが、OpenTelemetry[16]や複数ノードを使った分子動力学(MD)シミュレーションをするためのMPIの整備などをしたいと思っています。

dotfilesとPXE/Ansibleについて紹介しましたが、この方法がいいぞと思われる方は、ぜひ教えてください。


本記事は2026年4月の知見に基づいています。最新の情報は公式ドキュメントをご確認ください。

参考文献

  1. GitHub. “Unofficial guide to dotfiles on GitHub.” https://dotfiles.github.io/ 

  2. rossmacarthur. “dotfiles/bootstrap - A bootstrap script for setting up a new machine.” GitHub. https://github.com/rossmacarthur/dotfiles/tree/trunk/bootstrap 

  3. kinchiki. Qiita. https://qiita.com/kinchiki/items/57e9391128d07819c321 

  4. okamos. Qiita. https://qiita.com/okamos/items/7f5461814e8ed8916870 

  5. Anthropic. “Claude Code - The CLI for Claude.” https://claude.ai/code  2 3

  6. OpenAI. “Codex CLI - Lightweight coding agent that runs in your terminal.” GitHub. https://github.com/openai/codex  2

  7. twpayne. “chezmoi - Manage your dotfiles across multiple diverse machines, securely.” https://www.chezmoi.io/ 

  8. freedesktop.org. “XDG Base Directory Specification.” https://specifications.freedesktop.org/basedir-spec/latest/ 

  9. Wikipedia. “Preboot Execution Environment.” https://en.wikipedia.org/wiki/Preboot_Execution_Environment 

  10. Red Hat. “Ansible Documentation.” https://docs.ansible.com/ 

  11. 東京工業大学 GSIC 横田研究室. https://www.rio.gsic.titech.ac.jp/jp/computers/index.html 

  12. hiconyan. Qiita. https://qiita.com/hiconyan/items/ddf5d3e34a18a2028566 

  13. poyo. はてなブログ. https://poyo.hatenablog.jp/entry/2019/04/27/000000 

  14. Grafana Labs. “Grafana: The open observability platform.” https://grafana.com/ 

  15. Prometheus Authors. “Prometheus - Monitoring system & time series database.” https://prometheus.io/ 

  16. CNCF. “OpenTelemetry.” https://opentelemetry.io/