MacのCLI環境の構築を自動化する

前回、IDEをやめてvim-lspと独自コマンドに移行したことを紹介しましたが、あれだけだと少し問題があります。

akaimo.hatenablog.jp

PCを買い替えたときやクリーンインストールをしたときなどに同じ環境を簡単に構築することができないともう一度構築することが面倒になってしまい、インストールするだけで使えるIDEでいいやとなってしまいます。

そこで今回はAnsibleを使ってCLI環境の構築を自動化したときに簡単に使えるように意識したポイントを紹介します。
Ansible自体の使い方は紹介しませんので別の記事を参照してください。

自動化したコードは以下のリポジトリで公開しています。

github.com

ポイント

以下のことを意識して自動化しました。

  • 詳細な手順が書かれたドキュメントを用意する
  • できるだけ実行するコマンドを少なくする
  • アップデートしやすくする
  • 別のOSでも動くようにする

1つずつ紹介していきます。

詳細な手順が書かれたドキュメントを用意する

いくら自動化していても、どのように実行すればいいか忘れてしまうと構築することができません。自動化した直後は覚えていても時間が経てばほぼ確実に忘れます。そのため自動化のキック方法をREADMEなどに書いておくべきです。

また、自動化に使っている依存ツール(今回であればAnsible)があればそれのインストール方法も書いておくと良いでしょう。その他にも前提条件があれば書いておきます。

READMEだけで構築が完了する粒度を意識します。

できるだけ実行するコマンドを少なくする

完全な自動化は難しいところもありますが、できる限り自動化して少ないコマンドで構築が終わるようにします。

このときにインストール対象に合わせていくつかのコマンドに分けることをオススメします。
これをやっておくことで構築するときに、そのとき必要なものだけインストールすることができます。
さらに、OSのアップデートなどで自動化が壊れたときにデバッグと修復が行いやすくなります。

アップデートしやすくする

構築後に新たな拡張をした場合、次に構築するときに追加した部分も反映されて欲しいです。そのためには自動化した部分を適宜アップデートする必要があります。
アップデートするときに手間がかかるような状態だと面倒になり放置してしまい、最終的にはアップデートする必要があることを忘れます。
これはもったいないのでアップデートしやすくしておきます。

具体的にやることとしては、

  • with_itemsで重複の排除と項目の列挙
  • 複数のタスクで読み込まれる項目は
    • include_varsで別ファイルから読み込む
    • registerで変数にする

を行いました。
これを行うと定義が見やすくなるだけでなく、実行ログに項目が表示されるようになるためエラーとなった項目を素早く見つけることができます。

また、各タスクにきちんとnameを定義しておくこともメンテナンス性の向上につながります。

別のOSでも動くようにする

インストールコマンドで各OSのパッケージマネージャを使うなど、OSごとに処理が分かれる部分がでてくると思います。
1つの環境でしか動かさないのであれば問題ありませんが、CLI環境はOSによる差を吸収しやすい部分ですし、サーバーにインストールする可能性も考慮するとどのOSでも構築できるようにしておくと便利だと思います。

OSによる分岐を行うには、タスクにwhenを追加しOSの判定をすれば良いです。
Macの場合はansible_os_family == 'Darwin'と書けば判定できます。

OSによる違いがたくさんある場合はOSごとにファイルを用意してincludeに対してwhenを使ってまとめて切り替えたりもできます。

おわりに

今回はCLI環境の構築を自動化するテクニックを紹介しました。
CLI環境は自分に一番合った設定にカスタマイズできる反面、インストーラーやインポート機能のようなものはなく、再度構築するのに時間がかかったり最悪の場合は再現できなくなってしまうリスクもあります。このようなことにならないためにも自動化をしておくことがオススメです。
自動化しておくことでサーバーで作業するときにも気軽に同じ環境を構築できパフォーマンスもあがります。