dotfilesで独自の開発環境を構築しよう!

こんにちは!デバイスソフトウェア開発部の本間です。

突然ですが、ソフトウェア開発者の皆さんは Unix 系の開発環境で仕事をされたことはありますでしょうか?
私は新卒から今日に至るまで、Linux や Unix 系OSを開発環境・ターゲットとするソフトウェア開発に携わらせて頂きました。おかげ私は Unix 系環境のシンプルさ・強力さにすっかり夢中になってしまいました。今でも Linux を使って仕事をしていますが、それだけでもとても嬉しく思います。

この Unix 系環境で使用されるソフトウェアは、それぞれが設定ファイルを持っています。また、設定ファイル以外に開発効率化のための独自ユーティリティも作成することもあるでしょう。
それらの設定ファイルやユーティリティを集約し、自分だけの Unix 系開発環境を構築する手法が、今回ご紹介したい dotfiles です!

まず Unix 系とは?

別名で Unix ライクとも言います。Unix とは大昔に発明された OS です。
この Unix のソースコードを今日まで引き継いだ OS、または Unix の仕様や文化(POSIX規格)に従った OS や開発環境が Unix 系と呼ばれるようです。
(これ以上は説明できないので詳細は wiki 参照)

有名どころでは Linux, macOS, FreeBSD が挙げられるかと思います。
これらの OS は bash や zsh などのシェルでログイン・制御することができ、デスクトップ環境があればターミナルエミュレータも使用できます。

Windows はそれらとは全く別の趣向の OS ですが、Windows でも Unix ライクな環境(cygwin, WSL, 仮想マシン)を利用することができます。
cygwin は POSIX API、WSL1 は Linux システムコールをエミュレートする環境です。より高速で完全な環境が欲しい場合は仮想マシンに Unix 系OSをインストールすると良いでしょう。

とりあえず、何かしらのターミナルエミュレータを使って、シェルでログインできる環境は Unix ライクと言えるのではないでしょうか。
この Unix ライクな環境で動作するソフトウェア(bash, vim, git, etc…)の設定ファイルは、ファイル名が . (ドット) から始まる隠しファイルとなっているのが慣例です。それらの隠しファイルを集めたものが dotfiles と呼ばれています。

Hello, dotfiles!

前置きが長くなりました。それではデモとして私の dotfiles をご紹介したいと思います。
Github で公開しているので特別にお見せしましょう(スター0!)

まずは dotfiles のダウンロードとインストールを実演してみましょう。
Windows11 において、WSL1(Ubuntu 22)のクリーンインストール直後の環境へ dotfiles の各種設定ファイル・ユーティリティを展開してみます。

 
この動画では下記の操作を実行しています。

  1. インストール前の設定ファイル表示、vim 起動
  2. dotfiles を clone、インストール実行(install.sh)
  3. インストール後の設定ファイル表示、vim 起動

各ソフトウェアの設定ファイルは HOME 直下や ~/.config ディレクトリに配置されます。
インストール(install.sh)を実行する前後の違いに着目してみてください。

インストール前は、配置されている設定ファイルは .bashrc や .profile くらいです。~/.config にも vscode の設定ファイルしかありません。vim のカラースキームもデフォルトです。

それに対してインストール後は、HOME 直下には sh, bash, X11 の設定ファイル、~/.config には各ソフトウェアの設定ファイルが配置されています!
それらは全て dotfiles に集約された設定ファイルへのリンクとなっています。vim にも dotfiles の設定が反映されており、カラースキームが gruvbox になりました。

ちなみに ↓ は、この dotfiles で構築した私が普段使いしている開発環境です。
デスクトップ環境は i3wm、ターミナルエミュレータは urxvt、シェルは bash を愛用しています。

 

何が嬉しいの?

dotfiles を導入すると様々なメリットがあります。

独自の開発環境を作れる

一番のメリットは自分の資産として開発環境を作れることではないでしょうか。

数ある開発ツールを使いこなすには長い年月が必要です。色々嵌りながら設定ファイルを書くこともあるかと思います。そして働く現場が変わった時など、新しく環境構築する際に、前の環境の記憶を掘り起こしながら再度設定ファイルを書く羽目になります(この時にまた嵌る)

しかし、dotfiles があることで、頑張って構築した環境をその場だけのものにせず、自分の資産として蓄積していくことができます。それを継続していけば、dotfiles 内に自分にとって最適な開発環境を作ることできるのです。

簡単に開発環境を再現できる

先の dotfiles の実演で示したように、スクリプト1つ実行するだけで環境を導入できました。
様々なケースを考慮する必要はありますが、凝ったインストーラを作成すれば、新しい環境でもすぐに自分の使いやすい環境へ変えることができます。

設定の変更内容をチェックできる

私は設定ファイルの編集に良い思い出がありません。

(もとの設定値に戻したいけど忘れた!)
(どの設定ファイルを変えたっけ?)
(手当たり次第変更しすぎてどこがおかしいのか分からない!)

このような苦い経験は無いでしょうか?
だから人は設定ファイルを変更する前にいちいちバックアップを取るのです。

しかしその問題、ユーザスコープの設定については dotfiles で解決できます!(ただし dotfiles を VCS で管理する必要があり)
試しに git の設定ファイルを編集してみましょう。

 
この動画では下記の操作を実行しています。
  gitconfig を変更 → 変更内容確認 (diff) → 変更取り消し (checkout) 

私の dotfiles は git で管理しています。さらにインストールした設定ファイルは dotfiles へのリンクとしています。その為、設定ファイルの変更点は dotfiles 内での diff ですぐに分かるのです!
変更点に誤りがあった場合は、checkout すれば変更を取り消すことができます。

設定変更を履歴管理できる

設定ファイルは数多くあり、書いた内容はよく忘れるものです。時間が経った後に見返して「何故こう書いたんだ?」と思うことが良くあります。

しかし、VCS で dotfiles を管理していれば変更履歴を記録することができます。変更をコミットする度に、変更内容をコメントでちゃんと記録していけば、理由を思い出す手助けになるのではないでしょうか。
ちなみに私は ↓ のように履歴管理しています。

 

dotfiles の作り方

ここまでメリットを紹介しておいて何ですが、他人の dotfiles を真似て作り始めるのが一番だと思います。dotfiles 内のディレクトリ構成やインストーラの実装方法は、本当に人それぞれなのです。インターネットには数多くの dotfiles が公開されていますので、スターの多いリポジトリを探して参考にすると良いでしょう。
私は ↓ のリポジトリに影響を受けて作り始めました。

また、Qiita などのブログでも dotfiles についての記事は数多く充実しており、そちらも参考になるかと思います。

なお、dotfiles のインストール方法については、私の主観ですがざっくり下記の方式があるように見受けられます。

  • cp コマンドで上書きする
  • ln コマンドで地道にリンクを張る
  • GNU Stow で自動でリンクを張る

私は GNU Stow を活用した3つ目の方式でインストーラを実装しています。各ソフトウェア毎の設定ファイルや関連ユーティリティはパッケージとして管理しており、インストール時は Stow でそれらのパッケージへのリンクを HOME 直下に自動で展開します。
詳細は ソースコード をご確認ください。

おわりに

dotfiles はノウハウを蓄積・共有していける素晴らしい文化だと思います。さらに世界中のギーク達の dotfiles に触れることで、自身の技術的な視野を広げることができます。私もそんなギーク達に一歩でも追いつくためにスキルアップを目指している最中です。
皆さんも是非 dotfiles を導入し独自の開発環境を作ってみてはいかがでしょうか?

また、エコモットでは一緒にモノづくりをしていく仲間を随時募集しています。弊社に少しでも興味がある方はぜひ下記の採用ページをご覧ください!
それでは皆さん、快適な UNIX ライフを!