0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

はじめてdotfilesを作成してみる。

Last updated at Posted at 2023-08-12

開発環境の設定を短縮できるdotfilesを作成したいと思い、いろいろ調べています。
今回は、dotfilesをとりあえず作ってみて、大まかな手順を記録していきます。

dotfilesを作成する流れ

GitHubで新しいリポジトリdotfilesを作成する

  1. Githubにログインしてマイページに進みrepositoriesメニューに進む
  2. Newボタンから、リポジトリ新規作成画面Create a new repositoryに進む
  3. Repository nameの箇所にdotfilesと入力する
  4. その他の設定は特にいじらなくてもOK(外部公開したくない場合はprivateを選択)
  5. Create repositoryボタンでリポジトリ作成完了

作成したdotfilesリポジトリをホームディレクトリ直下にgit cloneする

  1. Githubで作成したリポジトリdotfilesをGit管理するために、まずはcloneしてローカルに落としていきます。
  2. Githubで作成したdotfilesリポジトリの画面にて、Quick setup — if you’ve done this kind of thing beforeという項目にある、SSHボタンを選択します。
  3. おそらくgit@github.com~~から始まるユーザー名・リポジトリ名が記載されたコードが表示されるので、そのコードをコピーします。
  4. 次に、以下のコマンドを順番に実行することで自身のPCローカルリポジトリにcloneしてくることができます。
$ cd ~/ (もしくは cd だけでもOK)
$ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
$ cd dotfiles
$ git init

cd ~/ cloneしてくる場所はPCのホームディレクトリ直下です。
git clone はGithubからクローンするGitコマンドです。
※ クローンしたらcd dotfilesコマンドで対象のディレクトリdotofilesに移動します。
git init はGitコマンドの一つで、新たにリポジトリを作成するときに使います。
git initコマンドを実行すると、現在のディレクトリに.gitというディレクトリが作成され、その中にGitのリポジトリに必要なデータ構造が作られます。
※ つまり、git initを実行することで、このリポジトリがGit管理となることを意味します。

なお、git cloneをした段階で、以下のようなファイルが構成されました。

$ tree -aコマンドを実行

.
├── .DS_Store
└── .git
    ├── HEAD
    ├── config
    ├── description
    ├── hooks
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── fsmonitor-watchman.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── pre-merge-commit.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   ├── pre-receive.sample
    │   ├── prepare-commit-msg.sample
    │   ├── push-to-checkout.sample
    │   └── update.sample
    ├── info
    │   └── exclude
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── .DS_Store
        ├── heads
        └── tags

※ 今回、私の場合は、$ git initを実行した際、このような表示が出ました。

Reinitialized existing Git repository in /***/*****/dotfiles/.git/

リポジトリを再初期化したという意味のようで、ドキッとしましたが、特にファイルの中身が変わった様子ではなかったです。git cloneした時点で初期化は済んでいて、git initは今回は不要だったのかな、、、?

ともかく、これでdotfilesリポジトリをGit管理する下準備ができました。

dotfilesで管理するファイルを選ぶ

  • 本題である何の設定をdotfilesで管理するのか?ということですが、、、
  • 今回はzshのコマンド設定ファイル.zshrcを保存しましょう。
  • 現在保存されている場所はホームディレクトリ直下~/.zshrcとなっています。
【補足】Zshとは?
  • 「ズィーシェル」と読む(もしくは「ゼットシェル」?)。
  • ZshはUnixシェルの一つで、シェルスクリプトの実行やコマンドラインでの操作を可能にするツールである。
  • Bashと同様に広く使われているが、Zshはより高度な設定やカスタマイズが可能であったり、ユーザーフレンドリーな特性を持っている。
  • .zshrcファイルは、Zshの設定ファイルである。
  • Zshを使うときに自動的に読み込まれる。
  • パスの設定やエイリアスの定義、関数の定義など、Zshの動作をカスタマイズするコードを書くことが多い。
  • 保存されるパスは一般的にルートディレクトリ直下~/.zshrcであることが多い。
  • Mac OSでは隠しファイルなので、cmd + shift + .で隠しファイルを表示させないと閲覧・編集できない(FinderやVScodeなどでファイルを開く時)。

※ シェルやシェルスクリプトについては、こちらの記事でまとめています。

【補足】.zshrcに記述しているコード

一応、.zshrcにどんな設定がなされているかも確認しておきます。

~/.zshrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init - zsh)"
export PATH="$HOME/.nodenv/bin:$PATH"
eval "$(nodenv init -)"

export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
  1. このコードはrbenv(Rubyのバージョン管理ツール)nodenv(Node.jsのバージョン管理ツール)pyenv(Pythonのバージョン管理ツール)をセットアップするための設定を行っている。
  2. export PATH="$HOME/.rbenv/bin:$PATH" : rbenvのバイナリがあるディレクトリをPATH環境変数に追加している。これにより、どのディレクトリからでもrbenvコマンドを使えるようになる。
  3. eval "$(rbenv init -)" では、rbenvを初期化し、シェルrbenvの設定を読み込ませるためのコマンドだ。
  4. export PATH="$HOME/.nodenv/bin:$PATH" これは、nodenvのバイナリがあるディレクトリをPATH環境変数に追加している。これにより、どのディレクトリからでもnodenvコマンドを使えるようになる。
  5. eval "$(nodenv init -)" これは、nodenvを初期化し、シェルnodenvの設定を読み込ませるためのコマンドである。
  6. export PYENV_ROOT="$HOME/.pyenv"export PATH="$PYENV_ROOT/bin:$PATH" これは、pyenvのルートディレクトリバイナリがあるをディレクトリをPATH境環変数に追加している。これにより、どのディレクトリからでもpyenvコマンドを使えるようになる。
  7. eval "$(pyenv init --path)"eval "$(pyenv init -)" これは、pyenvを初期化し、シェルpyenvの設定を読み込ませるためのコマンドである。

dotfilesに管理したいファイルを保存する

dotfilesで管理するファイルを決めたら、実際にファイルを移動させていきます。

  1. mvコマンド.zshrcdotfilesにコピーする(念の為、移動ではなくコピーにして、元のファイルも残しておくことにしました。正しいかどうかは正直わからないですが、、、)。
$ mv ~/.zshrc ~/dotfiles/.zshrc

もう一度、tree -aコマンドで確認してみましょう。

.
├── .DS_Store
├── .git

(中略)

│       ├── heads
│       └── tags
+ └── .zshrc  # dotfilesに設定ファイルをコピーできました。

元の場所(パス)ににシンボリックリンクを作成する。

  • シンボリックリンクは、Windowsで言うところのショートカットのことです。
  • lnコマンドは、ディレクトリやファイルへのリンクを登録するコマンドです。
  • オプションで-sを指定することでシンボリックリンクを作成します。
$ ln -s ~/dotfiles/.zshrc ~/.zshrc

スクリーンショット 2023-08-11 18.18.25.jpg

  • シンボリックリンクがうまく出来ると、このようにファイルのアイコンに矢印が出来ます。

Git管理しなくて良いファイルを.gitignoreに指定する

  • 自分の場合、Mac環境を使っているので、DS_storeをGitのコミット対象から除外したいです。
  • そのため、dotfilesディレクトリに新しく.gitignoreファイルを作成します。
$ touch .gitignore
  • 作成した.gitignoreファイルにコミット対象から除外したいファイルを記述します。
# macOS
.DS_Store
  • git statusで確認すると、DS_Storeが変更差分から外れました。これでひとまずOKとします。
$ git status

Untracked files
  (use "git add <file>..." to include in what will be committed)
-   .DS_Store(コミット対象から外れた)
	.gitignore
	.zshrc

コミット 〜 プッシュを実施

  • ひとまずこれで、コミットし、Githubのリポジトリにプッシュしていきます。
$ git add .
$ git commit -m "initial commit"
$ git push
  • これで、dotfilesをGit管理にすることができました。
  • あとは、PC環境が変わった際などに、git cloneし、シンボリックリンクを作成すればOKということになります。

【補足】 make -Cコマンドについて

$ make -C ~/dotfiles
  • make -C ~/dotfilesというコマンドは、~/dotfilesディレクトリに移動してからmakeコマンドを実行するという意味である。
  • この-Cオプションは、指定したディレクトリでMakefileを探し、そのディレクトリでmakeコマンドを実行する機能を持っている。
  • だから、~/dotfilesディレクトリにMakefileが存在する場合、そのMakefileに書かれたタスクが実行される。
  • $ make -C ~/dotfilesコマンドは必ずしも実行する必要はない。
  • このコマンドは、~/dotfilesディレクトリ内のMakefileに書かれたタスクを実行するもの。
  • なので、Makefileが存在しない場合や、Makefileを使わずにdotfilesを設定したい場合はこのコマンドを使わなくても大丈夫です。

参考サイト

ようこそdotfilesの世界へという記事を投稿された@yutkat 様のdotfilesは、非常に参考になるかと思います。

また、@rainbartown 様の記事で紹介されていたdotfilesも参考になるので、ぜひご覧ください。

dotfilesを作成する手順について、細かく解説されているこちらの記事も参考になりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?