dotfilesのススメ
dotfilesのススメ
はじめに
昨年12月に株式会社スタジアムに入社した二村です。
この記事では、私が整備したdotfilesについて紹介します。
dotfilesとは、主にUnix系OSで使用される設定ファイル群のことで、多くの場合ドット(.)で始まるファイル名を持ちます。
これらをGitで管理することで、新しいマシンでも素早く同じ環境を再現できるようになります。
私のdotfilesはfuyuz/dotfilesで公開しています。
dotfilesを作成した背景
転職を機に時間ができたので、これまで使っていた開発環境全体を見直す機会がありました。
dotfilesを整備することで、特に以下の点を改善したいと考えていました:
- 環境構築の効率化: 新しい職場のマシンセットアップを素早く行いたい
- 設定の一元管理: 複数のマシン間で設定を同期したい
- ツールの見直し: より生産性の高いツールへの移行
dotfilesの構成
私のdotfilesリポジトリは以下のコンポーネントで構成されています:
- シェル: sheldonプラグインマネージャーを使用したzsh
- ターミナル: WezTerm
- エディタ: Neovim
- ウィンドウ管理: yabai、skhd、borders
- プロンプト: Starship
- パッケージマネージャー: Homebrew
- バージョン管理: mise
- 開発ツール: git、docker、lazygitなど
- アプリケーション: Google Chrome、Arc、Obsidian、Slack
dotfilesの管理方法
私のdotfilesは以下の方針で管理しています:
- モジュール化: 各ツールごとにディレクトリを分け、それぞれに独自のセットアップスクリプトを用意
- シンボリックリンク: 設定ファイルは元のパスにシンボリックリンクを作成
- Homebrew Bundle: アプリケーションやCLIツールはBrewfileで一括管理
例えば、Neovimの設定は以下のように管理しています:
# nvim/setup.nvim.sh
#!/bin/sh
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
FILES=(init.lua)
CONFIG_DIR="$HOME/.config/nvim"
mkdir -p "$CONFIG_DIR"
for file in "${FILES[@]}"; do
SOURCE="$SCRIPT_DIR/$file"
TARGET="$CONFIG_DIR/$file"
ln -sf "$SOURCE" "$TARGET"
done
転職後の環境構築で役立ったこと
1. セットアップの自動化
新しい職場のMacを受け取った際、GitHubからdotfilesをクローンしてsetup.sh
を実行するだけで、必要なツールと設定が自動的にインストールされるようにしていました。
これにより、以下のような利点がありました:
git clone https://github.com/fuyuz/dotfiles
cd dotfiles
./setup.sh
- 短時間でセットアップ可能
- 手作業による設定ミスを防止できる
ただ実際にはmacが完全に初期状態での動作確認をしていなかったので、転職後にmacのセットアップをした際にはうまく動かないスクリプトがあり手直ししながら実行することになりました。
それでも一つ一つ調べるよりは早く実行できた点は利点だと感じています。
2. 一貫した開発体験
自宅と職場のマシンで全く同じ環境を維持できるため、コンテキストスイッチのコストが大幅に削減されました。
特にキーバインドやエディタの設定が同じなので、どこでも同じ操作感で作業できます。
3. 個人のMac初期化時の時間節約
個人のMacを初期化する際にも、同じdotfilesを使用することで、数時間かかっていた環境構築が30分程度で完了するようになりました。
利用しているツールと選定理由
新規導入したツール
1. mise(バージョンマネージャー)
複数の言語やツールのバージョン管理を統一的に行うことができるツールです。
特に異なるプロジェクト間でのバージョン切り替えが簡単で、設定ファイルによる自動切り替えも可能なため、開発環境の一貫性を保つのに役立っています。
2. zsh-abbr(コマンド短縮プラグイン)
シェル環境では、zsh-abbrプラグインを活用して、コマンドの入力効率を高めています。
abbrは「abbreviation(略語)」の略で、長いコマンドを短い文字列で展開できる機能です。
私の設定では、abbrとaliasを以下の用途で使い分けています:
-
alias: 既存コマンドを別のコマンドに置き換えたい場合に使用
alias ls='eza' # lsコマンドをezaに置き換え alias vim='nvim' # vimコマンドをneovimに置き換え alias cat='gat' # catコマンドをgatに置き換え alias top='btop' # topコマンドをbtopに置き換え
-
abbr: コマンドの拡張や短縮形として利用する場合に使用
abbr g='git' # gと入力するとgitに展開 abbr gp='git push' # gpと入力するとgit pushに展開 abbr l='ls -l' # lと入力するとls -lに展開 abbr la='ls -la' # laと入力するとls -laに展開
abbrの大きな利点は、コマンドが実行される前に展開されるため、履歴に展開後のコマンドが保存される点です。
これにより、後から履歴を検索する際に完全なコマンドを見つけることができます。
一方、aliasは履歴にはエイリアスのまま保存されます。
また、abbrはタイプした後にスペースを押すと展開されるため、展開前に内容を確認できる点も便利です。
特に複雑なGitコマンドやGitHubのCLIコマンドを短縮する際に重宝しています。
3. GitHub CLI(GitHubコマンドラインツール)
GitHubの操作をターミナルから直接行えるようにするコマンドラインツール「GitHub CLI」を新たに導入しました。
これにより、ブラウザを開くことなく、GitHub関連のタスクをターミナルから実行できるようになりました。
主な用途:
-
PRのチェックアウト:
gh co
でPRをローカル環境に簡単にチェックアウトできます -
PRの作成:
gh pr create
でターミナルから直接PRを作成できます -
PRのレビュー依頼の確認:
gh search prs --review-requested=@me --state=open
で自分宛てのレビュー依頼を確認できます
GitHub CLIの便利な特徴:
-
複数のGitHubアカウントにログイン可能:
gh auth login
コマンドで複数のGitHubアカウントを切り替えて使用できます - SSHの設定が不要: HTTPSベースの認証を使用するため、複雑なSSH鍵の設定をしなくても安全にGitHubと通信できます
Github CLI導入の最大のメリットは、lazygitと組み合わせることでターミナル上でシームレスにPRを作成できる点です。
移行したツール
1. yabai + skhd(ウィンドウマネージャー)
以前はRectangleを使用していましたが、より高度なタイル型ウィンドウ管理を求めてyabaiとskhdの組み合わせに移行しました。
Rectangleでも基本的なウィンドウ操作はできましたが、yabaiとskhdを使うことでキーボードだけでウィンドウの配置や移動ができるようになり、特に複数のディスプレイを使う場合に効果を発揮します。
また、skhdの設定では、option + 数字キーを使って頻繁に使うアプリケーションをすぐに起動できるようにしています。
例えば、option + 1でWezTerm(ターミナル)、option + 2でArc(ブラウザ)、option + 3でSlackを起動できます。
これによりマウスを使わずに素早くアプリケーションを切り替えることができます。
2. Starship(シェルプロンプト)
以前はoh-my-zshを使用していましたが、起動の遅さが気になっていたためStarshipに移行しました。
Starshipはより高速で、設定ファイルによる柔軟なカスタマイズが可能です。
3. lazygit(ターミナルベースのGitクライアント)
以前はtigを使用していましたが、より高度な機能を求めてlazygitに移行しました。
tigもlazygitも共にvim likeなキーバインドができる点は同じですが、lazygitの方がより高度なコマンドがそのままの状態で実行できる点が大きなメリットです。
これにより、マージやリベース、リセットなどの操作もgitコマンドなしで簡単に行えるようになりました。
4. Arc(ブラウザ)
以前はGoogle Chromeを使用していましたが、より効率的なタブ管理を求めてArcに移行しました。
Arcはプロジェクトごとにスペースを分けられる機能が便利で、サイドバーによるタブのグループ化や、コマンドパレットによる高速な操作が可能です。
これにより開発作業の効率が向上しました。
5. WezTerm(ターミナルエミュレータ)
以前はiTerm2を使用していましたが、より柔軟なカスタマイズを求めてWezTermに移行しました。
WezTermはLuaで設定を書けるため細かい調整が可能で、複数OSで同じ設定を使えるクロスプラットフォーム対応も魅力です。
さらに、公式ドキュメントが非常に丁寧に作られており、設定オプションの説明や具体的な使用例が豊富に記載されているため、カスタマイズが初めてでも取り組みやすい点も移行の決め手となりました。
継続して使用しているツール
1. Neovim(テキストエディタ)
長年使い続けているエディタで、今回の環境見直しでは kickstart.nvim をベースに設定ファイルを完全に書き直しました。
kickstart.nvimは、Neovimの基本的な設定と入れるとよいプラグインがあらかじめ構成されたスターターテンプレートです。
おわりに
dotfilesを整備することで、開発環境の構築・管理が格段に楽になりました。
特に転職時や新しいマシンのセットアップ時に、その効果を実感しています。
また、設定を見直す過程で新しいツールを発見したり、既存のツールの使い方を深く理解したりする機会にもなりました。
自分専用の開発環境を作り込むことは、日々のプログラミング作業をより快適にするだけでなく、長期的に見て大きな時間の節約になります。
ぜひ皆さんも自分だけのdotfilesを整備してみてください。
Discussion