LoginSignup
8
1

四年後の君へ...〜AnsibleでMacの環境構築を自動化してみた〜

Last updated at Posted at 2023-12-17

概要

この記事は # ミライトデザイン Advent Calendar 2023 16日目の記事です。(@hirodragon さんが間に合わなかったので代わりに書いてます笑 楽しみにしていた方は19日までお待ちください🙏)

昨日は @Nyokki さんの記事でした。

DBパーティショニングは勉強した時に知識としてはありますが、実際の業務で扱ったことがなかったのでとても参考になりました!いつか仕事で使ってみたいです。

さて、今日の記事のネタですが私のメインPCを MacBook Pro (13-inch, 2018, Thunderbolt 3ポートx 4) から MacBook Pro (14インチ, M3, Nov 2023) に乗り換えました。

前のPCは4年前に買ったので次は4年後に新しいのを買うのだろうということで4年後の私へ環境構築の自動化をクリスマスプレゼントにしたいと思います🎄

本当は書きたい記事がありましたが、思った以上に壮大になってしまったので来年に持ち越します。(そのため緊急で記事を書いています)

あと1週間前のたくまくんのネタとモロ被ってます。

ソースコード

新しいMacはこれからう使い始めるので本記事の執筆時点のコミットを v1.0.0 とタグ付けしておきました。

参考にしてもらって構わないですが、私のための環境なので不要なツールとか削ってお使いください🙏

dotfiles について

今回の主題じゃないので説明は軽く済ませます。
.zshrc.gitconfig などのファイルを dotfiles の名称のリポジトリ名で管理する慣習(?)があります。

色んな人の dotfiles を参考にして世界に一つだけの dotfiles を作ってみてください!

ただ、いきなり全部入れても使いこなせないので、慣れたら少しずつ増やしていくのが良いと思いますネ

ansible について

RedHat社が開発しています。
プロビジョニング、構成管理、アプリケーションのデプロイメント、オーケストレーション、その他多くのITプロセスを自動化するツールです。

AnsibleではPlaybookというYAML形式のファイルに一連のタスクを管理していきます。

ansible-mac 構成

.
├── inventory.ini # 環境毎で書き換えるファイル
├── inventory.ini.example
├── playbook.yml
├── requirements.yml
└── roles
   ├── homebrew
   │  └── tasks
   │     └── main.yml
   ├── homebrew_cask
   │  └── tasks
   │     └── main.yml
   └── mac_app_store
      └── tasks
         └── main.yml

dotfiles 構成

.
├── .config
│  └── starship.toml
├── .gitconfig
└── .zshrc
  • dotfiles のGitHubリポジトリは事前に作成しておく必要があります。

事前準備

  • Xcode CLIのインストール
  • Homebrewのインストール
  • GitHub SSH 接続 設定済み
  • dotfiles リポジトリは準備済み
$ xcode-select --install
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

$ brew -v
Homebrew 4.1.25

$ ssh -T github.com
Hi ucan-lab! You've successfully authenticated, but GitHub does not provide shell access.

実行手順

$ cd ansible-mac

ansible-mac を fork でも new repository でもいいのでリポジトリ作って、git clone してください。

inventory.ini ファイルを作成する

$ cp inventory.ini.example inventory.ini

ansible_become_userdotfiles_repo_local_destination を設定してください。

[all:vars]
ansible_become=true
ansible_become_user=your_mac_user_name
dotfiles_repo_local_destination=/path/to/dotfiles

dotfiles のパスはどこでも大丈夫です。
また、なければcloneされるのでなくてもいいです。

dotfiles ディレクトリが存在する場合は、git commit されてないとエラーになるので作業中のファイルは置かないようにしてください。

Ansible Galaxy からロールをインストールする
Ansible Galaxy は他の人が作ったロールを検索、ダウンロード、共有できる無料のサービスです。

$ ansible-galaxy install -r requirements.yml
  • dotfiles のロールを使いたかったのでここでインストールしています。
$ ansible-playbook playbook.yml -i inventory.ini -K
  • -i で inventory ファイルを指定
  • -K でユーザーパスワードを入力する
    • (インストール途中でパスワード入力を求められないという理解で良いか?)

ansible-playbook コマンドで playbook.yml に書かれたタスクが順次実行されます。
エラーが出なければMacの環境構築完了です。

補足

環境構築時にインストールしたツール類をご紹介します。

Homebrew ツール紹介

  • asdf
    • バージョン管理ツール(Node, Ruby等々)
  • bat
    • cat コマンドの代替でハイライトして表示してくれる
  • direnv
    • ディレクトリ毎に環境変数を読み込む
  • eza
    • ls コマンドの代替でハイライトして表示してくれる
  • fd
    • find コマンドの代替で高速かつ直感的にファイル検索できる
  • gh
    • GitHub CLI
  • git
    • Git
  • git-delta
    • diff コマンドの代替ツール
    • git diff, git show, git blame などの差分が見やすくなります。
  • go-task
    • タスクランナー・ビルドツールです
    • Taskfile.yml YAML形式でシンプルにビルドタスクを記述できます。
  • helix
    • テキストエディタ
  • jq
    • JSON を整形したり検索したりすることができます。
  • lazygit
    • GitのTUIツールです。
  • mas
    • Mac App Store 用のCLIツールです。
    • Homebrewで管理されていないアプリをインストールできます。
  • ripgrep
    • grep の代替で、デフォルトで .gitignore に書かれたファイルを除外してくれたり便利
  • starship
    • クロスシェルプロンプトツール
  • trash-cli
    • rm の代替で誤って削除した時に元に戻せる
  • zoxide
    • cd の代替で絶対パスや相対パスを指定せず、ディレクトリ名の一部だけで利用頻度の高いパスへパパっと移動できる
  • zsh
    • macOS Catalina以降はデフォルトシェルがbashからzshに変更されている
  • zsh-autocomplete
    • zshのリアルタイム先行入力自動補完ツール
  • koki-develop/docker-tags
    • Docker Hubに登録されているDockerイメージのタグ一覧を取得するコマンド
    • 公式にコマンドが用意されていないので重宝しています

Homebrew Cask ツール紹介

Mac App Store ツール紹介

  • Xcode
    • iOS開発する人は必須
  • LINE
    • 友達いる人は必須

感想

Ansibleを初めて使いましたが、
コマンド1回叩けばあとは待つだけで良いのでとても便利でした。
Xcodeなどダウンロード時間かかるものとかもまとめてインストールできるのは嬉しいです。

Macのシステム設定もAnsibleから設定できるそうですが、なぜか反映されなかったので一旦保留にしてます。

8
1
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
8
1