🌊

Dockerでdotfilesのポータビリティーを高める開発環境構築

2021/04/09に公開

Dockerでdotfilesのポータビリティーを高める開発環境を作る

はじめに

最近dotfilesを作って生産性を向上させようと奮闘している。
今回は、dotfilesをビルド&スクラップしながら、クリーンに開発を進めポータビリティーを意識したdotfilesを作成するために、
dotfiles開発環境をより効率化していくためDockerを用いてクリーンな開発環境を構築したい。
なぜDockerを用いるとポータビリティーを意識できるかというと、一度環境設定をするスクリプトを同じ環境で走らせると、初期に設定するときには設定が反映されない作りになり、簡単な設定を書いていただけなのに気づかないうちにポータビリティーを失ってしまった経験から今回の記事でメモとして残しておく。

dotfilesについて

dotfilesとは、その名の通り、dot(.)から始まる設定を管理するリポジトリやファイルのことを表す。
Unix系OSで主に使われる設定ファイルという認識でも良いと思う。

CLIを使う上で覚えるコマンドや、構文が多くなっていくにつれて、コマンド、構文の補完を行ったりシンタックス(文法)をハイライトする設定を記述することが可能で、少し設定するだけでも生産性や効率背がグンとアップしていきます。

もちろん、このような設定はマニュアルでもできるのですが、環境が変わるたびに同じコマンドや設定ファイルを記述するのは逆に生産性が悪くなってしまいます。
また、せっかくdotfilesを作ってカスタマイズしても、別のシステムや環境で動かなければ意味がありません。

この問題を解決するためにDockerを用いて環境をクリアしながらdotfilesのカスタマイズ駆動開発を行うことで効率性アップを目指します。

dotfilesについては@yutkatさんの記事がとても参考になった[1]

Dockerとは

Dockerは、インフラ関係やDevOps界隈で注目されている技術の一つで、Docker社が開発している、コンテナ型の仮想環境を作成、配布、実行するためのプラットフォームです[2]

Dockerを用いることによって何が嬉しいのかというと、コード化された設定ファイルDockerfileを共有することで、どこでも誰でも同じ環境が作れることや、スクラップ&ビルドが容易にできることからdotfiles開発に関して理想的な環境を手に入れることができる。

環境

作業環境(macOS)

  • macOS Big Sur 11.1
  • Zsh
  • Docker version 20.10.5, build 55c4c88
  • Docker-compose version 1.28.5, build c4eb3a1f

開発環境(Docker)

  • Ubuntu 20.04.2 LTS
  • bash
  • zsh(installして使う)
  • Docker version 20.10.5, build 55c4c88
  • Docker-compose version 1.16.1, build 6d1ac21

Dockerのインストール

まず、今回は作業環境であるmacOSにDockerをインストールする。

以下にアクセスし、Download from Docker Hubから手順に沿ってインストールする。
https://docs.docker.com/docker-for-mac/install/

インストールできたらこのような画面が表示される、Skip tutorialをクリックすれば良い。

次にDockerの設定ファイルDockerfileを作成する。

任意の場所で以下を作成する

$ mkdir dotfiles-vm
$ cd dotfiles-vm
$ touch Dockerfile

Dockerfileには以下の設定を記述する。

Dockerfile
FROM ubuntu

ENV DEBIAN_FRONTEND=noninteractive
# timezone setting
RUN apt-get update && apt-get install -y tzdata
ENV TZ=Asia/Tokyo

RUN apt-get update \
    && apt-get install -y \
    curl \
    git \
    vim \
    zsh \
    sudo

# install docker-compose
RUN curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
RUN chmod +x /usr/local/bin/docker-compose

# install docker-ce
RUN yes | apt-get install apt-transport-https ca-certificates curl software-properties-common
RUN curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -
RUN yes | add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
RUN yes | apt-get update
RUN yes | apt-get install docker-ce

この設定ファイルには、
インタラクティブシェルの無効化、タイムゾーンの設定、基本的なコマンドインストール、dockerの補完を検証するためdockerにdockerコマンドのインストールもしている。

次にDockerのコンテナーをビルドする。

以下のコマンドを同じディレクトリパスで実行する。

$ docker build -t dotfiles-vm .

各種自動インストールが成功したら、次にコンテナーを起動する。
以下のコマンドを実行する。

$ docker run -it dotfiles-vm zsh

これで以下のようにコンテナー内のubuntuのzshが起動するはずだ

zshが起動したらあらかじめ作成等しているdotfilesをcloneしても良いし、新規作成しても良いだろう。

ちなみに、最小限の設定として、テンプレートとして使えるような構成のリポジトリを用意してみたので、これをcloneしてカスタマイズしても良いだろう。
https://github.com/Iovesophy/dotfiles-vm

Dockerコンテナーのシェルに入った状態で、以下のコマンドを実行するとcloneされる。

$ cd ~
$ git clone https://github.com/Iovesophy/dotfiles-vm.git

試しに設定スクリプトを走らせるには以下のコマンドで可能である。

$ cd dotfiles-vm
$ ./start_setting.sh
$ zsh

スクリプトを走らせると、プロンプトの見た目や、補完が効くようになるはずだ。

これでdotfilesの動作を試しながらカスタマイズ駆動開発が可能となった。
私もdotfilesを作成し始めたばかりなので、もっと勉強してカスタマイズをしていきたいと思います。

脚注
  1. 「ようこそdotfilesの世界へ」https://qiita.com/yutkat/items/c6c7584d9795799ee164#:~:text=dotfilesとは、ホームディレクトリ,が置かれている。 ↩︎

  2. 「Docker入門(第一回)~Dockerとは何か、何が良いのか~」https://knowledge.sakura.ad.jp/13265/ ↩︎

GitHubで編集を提案

Discussion