自身の開発環境を保存するdotfilesについて学んでいます。
まだ初心者なので間違っている部分もあるかと思いますが、ざっくりと、dotfilesがどんなものなのか、どんなメリットがあるか、また、dotfilesで管理するファイルにはどんなものがあり、それぞれどんな役割なのかを調べました。
プログラミング初学者の方、dotfilesについてまずは知りたいという方向けの内容です。
dotfilesって何?
- 設定ファイルを管理するリポジトリのことである。
- Unix系OSにおいて、設定ファイルが
.
(ドット)から始まる隠しファイルに保存されていることが名前の由来となっている。 - シェル、エディタ、アプリケーションなど、さまざまな開発環境の設定をバージョン管理するのが目的。
- 主に、Githubリポジトリにアップロードすることで、バージョン管理する。
- 買い替えや転職など、使用するPCが変わった際に、dotfilesを活用することで、環境構築の時間を大幅に短縮することが可能となる。
dotfilesに関わるワード
シェル
- shell(シェル)とは、ユーザーとコンピュータのOSを繋ぐためのプログラム。
- シェルは、OSの中核を成すKernel(カーネル)とのやり取りを行う。
- 例えば、ユーザーがコマンドを入力すると、シェルがそのコマンドを受け取り、カーネルに指令を送る。受け取ったカーネルがそれに応じたアクションを、シェルに返し、シェルがユーザーに処理結果を送り、表示させる。
- シェルの設定をdotfilesに保存したりする。
- 主要なシェルとして
bash
、zsh
、fish
の3つが挙げられる。
カーネル
- Kernel(カーネル)は、コンピュータのOSにおける基本機能を担う中核的なプログラムのこと。
- ハードディスク(HDD)、メモリといったコンピュータの資源を管理する役割がある。
- アプリケーションとハードウェアの架け橋といった表現もできる。
シェルスクリプト
- シェルスクリプトは、OSを操作するためのスクリプト言語のことである。
- シェル上で実行することができる。
- 一般的にはLinuxなどの、UNIX系OSのシェルで実行するスクリプト言語である。
エディタ
文章を記述したり編集したりするツールのこと。プログラミングで使うエディタの例としては、Microsoft社が提供するVSCode
であったり、Vim
(ターミナルからコマンドを打ち込むことで利用できるCLIテキストエディタ)などがある。
CLI
CLI (Command Line Interface:コマンドラインインターフェース)の略称。MacのターミナルやWindowsのコマンドプロントなどがCLIの例である。pwd
とかls
とかcd
などはCLIコマンドとしてよく使われるコマンドである。CLIの同義語としてCUI(キャラクターユーザーインターフェース)がある。CLIはCUIどちらでも同じで、英語圏ではCLIで使われることが多いらしい。対義語として、マウスを使って画面上で直感的な操作を実現する技術をGUI(Graphical User Interface:グラフィカルユーザーインターフェース)と呼ぶ。
バージョン管理
- ファイルの編集日時、編集者、場所といった変更履歴の情報を記録すること。
- 主な例としてGitを使ったバージョン管理がある。
- dotfilesをGithubリポジトリにアップすることで、環境構築の設定を、状況に応じて修正していくことができる。
SSH(~/.ssh)
- Secure Shell(セキュアシェル)の略称の通信プロトコルである。
- SSHは公開鍵暗号を利用し、共通鍵を暗号化して鍵交換を実施する。
- FTPなどの従来の通信プロトコルに比べて、セキュリティの観点から推奨されてきている。
- パスとしては
~/.ssh
に保存されることが多い(Linux OS、Mac OSの場合)。 - sshファイルは秘密情報なので、dotfilesで管理してはいけない。
AWSファイル(.aws)
- AWS共有認証情報ファイルのこと。
- ユーザーのキーが暗号化された形式で保存されている。
- ユーザーのホームフォルダ(Windowsの場合は
C:\Users\username\.
に、aws
やLinux
の場合は~/.aws
) に配置される。 - ssh同様、秘密情報なので、dotfilesで管理してはいけない。
シンボリックリンク
- 元のファイルがあるパスは別のところだが、別の場所から参照できるようにする仕組み。
- Windowsで言うところのデスクトップに作成するファイルの
ショートカット
のこと。 - UNIX系OSでは
シンボリックリンク
の名称で語られる。 - Mac OSでは
エイリアス
と呼ぶこともある。
引用:参考:AWS 認証情報の使用|AWSユーザーガイド
dotfilesで管理するさまざまな設定
- シェルの設定(~/.bashrc, ~/.zshrc, ~/.config/fish, etc)
- エディタの設定(~/.vimrc, ~/.emacs.el, ~/.config/Code/User, etc)
- ターミナルの設定(~/.config/alacritty, etc)
- CLIツールの設定(~/.tmux.conf, ~/.gdbinit, etc)
- アプリの設定(~/.i3, ~/.autokey, etc)
- gitの設定(~/.gitignore_global, etc)
dotfilesで管理しないほうがよいファイル
こちら、参考サイトのほうが分かりやすいので引用させていただきます。
常に自動で更新されるファイル(履歴やキャッシュ等)
.bash_history .zsh_history .zcompcache .zcompdump .viminfo .emacs.d/history 等
バックアップファイル
*~ *.swp 等
環境に大きく依存する設定(参考: Tips)
環境変数 PATH や LD_LIBRARY_PATH 等に明らかに環境固有の場所を追加するとき
CUDAの設定
認証情報が入っているディレクトリ
は絶対にdotfilesにて管理しない
こと
.ssh, .aws等
dotfilesで管理するファイルに関するワード
シェルの種類
- シェルの種類には、いくつかある。
-
sh
bash
ksh
csh
tcsh
zsh
などがある。 -
sh
が有名なシェルである。
bash
- シェルの設定ファイルの一種である。
-
sh
をパワーアップしたシェルである。 - Bourne Again Shellの略称である。(覚えなくても良い。)
~/.bashrc
- シェルの設定ファイルの一種である。
- bashを起動した際に読み込まれる設定ファイルのことである。
-
rc
はRun Commands
を意味する。 -
~/.bashrc
は、ホームディレクトリ直下にある。 - コマンド
cd
で移動するホームディレクトリ直下にある隠しファイルである。 - コマンド
ls -a
を叩くと隠しファイルが確認できる。
~/.zsh
-
rc
は前述の通りrun commands
なので、zshというシェルを実行するコマンドのことである。 -
「ズィーシェル」
と読むっぽい。(「ゼットシェル」でも良いのかな?) - zshの設定ファイルにもいくつか種類がある。
-
.zshrc
.zshenv
.zprofile
.zlogin
など。zshにも種類がある。 - 基本は
.zshrc
を使えば良いっぽい。
fish
- bashやshなどのように、シェルの一種である。
-
friendly interactive shell
の略称である。 - GUIで、カラーテーマやプロンプトの設定が簡単にできるのが特徴。
- パスは
.config/fish/config.fish
のファイルに記述する。
vimrc
- テキストエディタ
Vim
を設定するファイル。 - パスは
~/.vimrc
に保存される。 - デフォルト状態から使いやすいようにカスタマイズできる。
Emacs
- UNIX系OSでよく利用されるテキストエディタである。
- 作成したスクリプトは「.el」の拡張子ファイルに保存できる。
- ルートディレクトリ直下だと
~/.emacs.el
になる。
Alacritty
-
Alacritty
はRust
で書かれたGPUをレンダリングに使う高速なターミナルエミュレータ(端末エミュレータ)
である。 - 読み方は「アラクリッティ」でよさそう?
-
Alacritty
はyaml
で環境設定を行う。 - GUIは用意されていない。
-
~/.config/alacritty
に保存する。
tmux
-
tmux
は、CLIツールの設定のことである。 -
Terminal MUltipleXer(ターミナルマルチプレクサ)
の略称である。 -
~/.tmux.conf
ファイルで tmux の挙動をカスタマイズする。 -
Linux 系のターミナル画面を複数のセッション、ウィンドウ、ペインに分割して利用することができます。
引用:とほほのtmux入門
autokey
-
autokey
はキーバインドを設定できるようにするソフトウェアである。 - ※キーバインド設定とは、キーを押した時の機能を割り当てることである。
- Linuxでは利用できないカーソル移動などのショートカットを実現するなど、操作性を向上させる意味で導入する価値がある。
~/.gitignore
-
gitignore
や、gitignore_global
は、Git管理の対象から外したりといった設定を記述するファイル。 - 常に無視したいファイルをここに記述することにより、Gitの管理下から外すことができる。
- コミットの対象から外れるので、Githubリポジトリに誤ってプッシュしてしまい、履歴が残ってしまうことがなくなる。
- 例えば
.DS_Store
ファイルは、WindowsとMacで必要・不要が分かれるため、環境によっては邪魔になってくる。なので、.gitignoreに記述することでGit管理の対象外にしたりする。
参考サイト