• トップ
  • ブログ一覧
  • AnsibleでMacの環境構築をしてみた
  • AnsibleでMacの環境構築をしてみた

    たむけん(エンジニア)たむけん(エンジニア)
    2019.06.19

    IT技術

    AnsibleでMacの環境構築をしたい!

    北村 北村さん

    (株)ライトコードの北村です!

    過去にAnsibleでMacの環境構築するネタをネットで拝見してまして、いつかやってみたいな~!と思ってました。

    この度、会社からMac支給される運びとなり、これはビックウェーブに乗るしかないなと思い、ついに、機会が来たのでやってみます!

    ハードル上げちゃうとあれなんで、よく使うツールが数コマンドで使えるようになれば良いなぁ、と

    Ansible(アンシブル)とは?

    Ansibleとは、構成管理ツールの1つで、主にサーバ構築に使われます。

    (インフラ屋さんがよく使う認識)

    「使うと何が嬉しいのか」を簡単に言うと『冪等性(べきとうせい)の担保』

    そのため、複数台のサーバを同じ構成で設定する場合とか便利です。

    類似ツールとしてChef、Puppetと言うのがあります。

    しかし、Ansibleは、yaml形式で設定を記述することから、記述内容を読める人が多く、かつ学習コストが低いというメリットがあります。

    (Chef、Puppetは、独自形式に設定を記載)

    Macを新調する度、Ansible使えば、ばっちりツールが使えるようにセットアップされる(はずです!)

    北村 北村先生
    『冪等性の担保』とは、何度やっても結果が同じ、要は設定通りにサーバ構築されることです!

    Macにインストールしたいツールたちはこちら

    CLI

    1. zsh
    2. git
    3. wget
    4. vim
    5. tree
    6. openssl

    GUI

    1. alfred
    2. iterm2
    3. Google日本語入力
    4. ブラウザ(chrome、firefox)
    5. エディタ(vscode、CotEditor)
    6. vagrant
    7. virtualbox
    8. slack
    9. postman
    10. teamsql
    11. フォント(ricty-diminished)

    必要ソフトのインストール

    まずは、必要なソフトをインストールしていきます。

    Xcode

    素直にAppStoreから。重たいんですよね。。。

    Homebrew

    準備/インストールをしていきます。

    1kitamuranoMacBook-Pro:setup tamken$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
    2
    3==> This script will install:
    4/usr/local/bin/brew
    5(中略)
    6
    7Press RETURN to continue or any other key to abort
    8# む。素直にリターンキーを押す
    9
    10==> /usr/bin/sudo /bin/mkdir -p /usr/local/bin /usr/local/etc /usr/local/include /usr/local/lib /usr/local/sbin /usr/local/share /usr/local/var /usr/local/opt /usr/local/share/zsh /usr/local/share/zsh/site-functions /usr/local/var/homebrew /usr/local/var/homebrew/linked /usr/local/Cellar /usr/local/Caskroom /usr/local/Homebrew /usr/local/Frameworks
    11Password:
    12# む。素直にパスワードを入力する
    13
    14(中略)
    15==> Installation successful!
    16
    17==> Homebrew has enabled anonymous aggregate formulae and cask analytics.
    18Read the analytics documentation (and how to opt-out) here:
    19  https://docs.brew.sh/Analytics
    20
    21==> Homebrew is run entirely by unpaid volunteers. Please consider donating:
    22  https://github.com/Homebrew/brew#donations
    23==> Next steps:
    24- Run `brew help` to get started
    25- Further documentation: 
    26    https://docs.brew.sh

    インストール完了!

    いちお確認

    1kitamuranoMacBook-Pro:setup tamken$ brew -v
    2Homebrew 2.0.4
    3Homebrew/homebrew-core (git revision 07d6; last commit 2019-03-12)

    OKです!(バージョン古いですね。ご愛嬌)

    Ansible

    いれたてのHomebrewでインストールしていきます。

    1# 検索してみる
    2kitamuranoMacBook-Pro:setup tamken$ brew search ansible
    3==> Formulae
    4ansible                                                ansible-lint                                           ansible@2.0
    5ansible-cmdb                                           ansible@1.9                                            terraform-provisioner-ansible
    6
    7==> Casks
    8homebrew/cask/ansible-dk

    いろいろ出てきたけど「ansible」をインストール

    1kitamuranoMacBook-Pro:setup tamken$ brew install ansible
    2Updating Homebrew...
    3==> Auto-updated Homebrew!
    4Updated 1 tap (homebrew/core).
    5(中略)

    インストール開始!

    1(中略)
    2==> Installing dependencies for ansible: libyaml, openssl, gdbm, readline, sqlite, xz and python
    3(中略)
    4==> Pouring openssl-1.0.2q.mojave.bottle.tar.gz
    5==> Caveats
    6(中略)
    7🍺  /usr/local/Cellar/openssl/1.0.2q: 1,794 files, 12.1MB
    8==> Installing ansible dependency: gdbm
    9==> Downloading https://homebrew.bintray.com/bottles/gdbm-1.18.1.mojave.bottle.1.tar.gz
    1011######################################################################## 100.0%

    あ゛。

    openssl、はansibleの依存関連でインストールされる模様。

    なのでplaybook(のvars)に、opensslの指定は不要ですね。

    (でも、記載があっても影響無いからそのままにしとく)

    1kitamuranoMacBook-Pro:setup tamken$ ansible --version
    2ansible 2.7.8
    3(中略)

    インストール完了です!

    playbook等設定ファイルの作成

    続いて、playbook等のAnsibleの設定ファイルを作成します。

    playbookは、平たくいえば構築手順を定義したファイルでyaml形式で記述します。

    Ansibleはこのファイルを元に環境を構築していくみたいですね。

    ファイル構成

    以下な感じでいきます。

    1- setup
    2    - inventory
    3    - setup.yml
    4    - roles
    5        - homebrew
    6            - tasks
    7                - main.yml
    8            - vars
    9                - main.yml
    10        - homebrew_cask
    11            - tasks
    12                - main.yml
    13            - vars
    14                - main.yml

    インベントリ

    環境構築対象サーバの情報を記載。自分相手なのでlocalhostを指定します。
    (~/setup/inventory)

    1[localhost]
    2127.0.0.1

    setup.yml

    playbook。

    エントリポイントです。

    (~/setup/setup.yml)

    1---
    2# file ~/setup/setup.yml
    3- name: mac setup
    4  hosts: localhost
    5  connection: local
    6  # sudo実行有無(しないのでno)
    7  become: no
    8  # 対象サーバの情報収集(しないのでno)
    9  gather_facts: no
    10  # タスクの呼び出し
    11  roles:
    12    - homebrew
    13    - homebrew_cask

    roles/homebrew

    CLIツールのインストール設定を記載

    1. /tasks/main.yml … タスク
    2. /vars/main.yml … 変数(ここにインストールしたいツールを定義)

    (./setup/roles/homebrew/tasks/main.yml)

    1---
    2# file: ~/setup/roles/homebrew/tasks/main.yml
    3
    4- block:
    5
    6  - name: homebrew update/upgrade
    7    homebrew:
    8      update_homebrew: true
    9      upgrade_all: yes
    10
    11  - name: homebrew tap
    12    homebrew_tap:
    13      name: "{{ item }}"
    14      state: present
    15    with_items: "{{ taps }}"
    16
    17  - name: homebrew install
    18    homebrew:
    19      name: "{{ item.name }}"
    20      state: "{{ item.state }}"
    21    with_items: "{{ packages }}"
    22
    23  tags:
    24    - homebrew

    (./setup/roles/homebrew/vars/main.yml)

    1---
    2# file: ~/setup/roles/homebrew/vars/main.yml
    3
    4taps:
    5  - homebrew/cask
    6  - homebrew/cask-versions
    7  - homebrew/cask-fonts
    8  - homebrew/core
    9
    10packages:
    11  - { name: zsh, state: present }
    12  - { name: git, state: present }
    13  - { name: wget, state: present }
    14  - { name: vim, state: present }
    15  - { name: tree, state: present }
    16  - { name: openssl, state: present }

    roles/homebrew_cask

    GUIツールのインストール設定を記載

    1. /tasks/main.yml … タスク
    2. /vars/main.yml … 変数(ここにインストールしたいツールを定義)

    (./setup/roles/homebrew_cask/tasks/main.yml)

    1---
    2# file: ~/setup/roles/homebrew_cask/tasks/main.yml
    3
    4- block:
    5
    6  - name: homebrew cask install
    7    environment:
    8      HOMEBREW_CASK_OPTS: --appdir=/Applications
    9    homebrew_cask:
    10      name: "{{ item.name }}"
    11      state: "{{ item.state }}"
    12    with_items: "{{ packages }}"
    13
    14  tags:
    15    - homebrew_cask

    (./setup/roles/homebrew_cask/vars/main.yml)

    1---
    2# file: ~/setup/roles/homebrew_cask/vars/main.yml
    3
    4packages:
    5  - { name: alfred, state: present }
    6  - { name: iterm2, state: present }
    7  - { name: google-japanese-ime, state: present }
    8  - { name: google-chrome, state: present }
    9  - { name: firegox, state: present }
    10  - { name: visual-studio-code, state: present }
    11  - { name: coteditor, state: present }
    12  - { name: vagrant, state: present }
    13  - { name: virtualbox, state: present }
    14  - { name: slack, state: present }
    15  - { name: postman, state: present }
    16  - { name: teamsql, state: present }
    17  - { name: font-ricty-diminished, state: present }

    playbookの実行

    準備完了、setupディレクトリへ移動し以下実行します。

    1# setupディレクトリへ移動
    2$ cd ~/setup
    3# 構文チェック(一応)
    4$ ansible-playbook --syntax-check setup.yml -i inventory
    5# playbook実行
    6$ ansible-playbook setup.yml -i inventory

    ansible実行

    機は熟しました。

    ついに、ansible実行します。

    構文チェック

    まずは、構文チェックまで。

    1# ディレクトリ移動
    2kitamuranoMacBook-Pro:setup tamken$ cd ~/setup
    3
    4# 構文チェック
    5kitamuranoMacBook-Pro:setup tamken$ ansible-playbook --syntax-check setup.yml -i inventory
    6
    7playbook: setup.yml

    む。

    なにも出ない(分かりづらいですが、何も出なければ構文エラーは無い模様)。

    続いて本番

    1itamuranoMacBook-Pro:setup tamken$ ansible-playbook setup.yml -i inventory 
    2
    3PLAY [mac setup] ****************************************************************************************************************************************************
    4
    5TASK [homebrew : homebrew update/upgrade] ***************************************************************************************************************************
    6changed: [127.0.0.1]
    7(中略)
    8
    9TAP

    CLI群

    1TASK [homebrew : homebrew install] **********************************************************************************************************************************
    2changed: [127.0.0.1] => (item={'name': 'zsh', 'state': 'present'})
    3changed: [127.0.0.1] => (item={'name': 'git', 'state': 'present'})
    4changed: [127.0.0.1] => (item={'name': 'wget', 'state': 'present'})
    5changed: [127.0.0.1] => (item={'name': 'vim', 'state': 'present'})
    6changed: [127.0.0.1] => (item={'name': 'tree', 'state': 'present'})
    7ok: [127.0.0.1] => (item={'name': 'openssl', 'state': 'present'})
    8# opensslはインストール済なので「ok」でok

    GUI群

    1TASK [homebrew_cask : homebrew cask install] ************************************************************************************************************************
    2changed: [127.0.0.1] => (item={'name': 'alfred', 'state': 'present'})
    3changed: [127.0.0.1] => (item={'name': 'iterm2', 'state': 'present'})
    4Password:
    5# む。パスワード聞かれる(おとなしく入力)
    6changed: [127.0.0.1] => (item={'name': 'google-japanese-ime', 'state': 'present'})
    7changed: [127.0.0.1] => (item={'name': 'google-chrome', 'state': 'present'})
    8changed: [127.0.0.1] => (item={'name': 'firefox', 'state': 'present'})
    9changed: [127.0.0.1] => (item={'name': 'visual-studio-code', 'state': 'present'})
    10changed: [127.0.0.1] => (item={'name': 'coteditor', 'state': 'present'})
    11changed: [127.0.0.1] => (item={'name': 'vagrant', 'state': 'present'})
    12# いい感じ
    13
    14
    15failed: [127.0.0.1] (item={'name': 'virtualbox', 'state': 'present'}) => {"changed": false, "item": {"name": "virtualbox", "state": "present"}, "msg": "Updating Homebrew...
    16# あら
    17
    18changed: [127.0.0.1] => (item={'name': 'slack', 'state': 'present'})
    19changed: [127.0.0.1] => (item={'name': 'postman', 'state': 'present'})
    20changed: [127.0.0.1] => (item={'name': 'teamsql', 'state': 'present'})
    21changed: [127.0.0.1] => (item={'name': 'font-ricty-diminished', 'state': 'present'})
    22to retry, use: --limit @/Users/tamken/setup/setup.retry
    23
    24PLAY RECAP **********************************************************************************************************************************************************
    25
    26127.0.0.1 : ok=3 changed=3 unreachable=0 failed=1

    virtualboxが失敗、以外はOKな模様。

    (ちなみに上記実行後のbrew list)

    1# CLI
    2kitamuranoMacBook-Pro:setup tamken$ brew list
    3ansible		git		libyaml		openssl		perl		ruby		vim		zsh
    4gdbm		libidn2		lua		pcre		python		sqlite		wget
    5gettext		libunistring	ncurses		pcre2		readline	tree		xz
    6
    7# GUI
    8kitamuranoMacBook-Pro:setup tamken$ brew cask list
    9alfred firefox google-chrome iterm2 slack vagrant
    10coteditor font-ricty-diminished google-japanese-ime postman teamsql visual-studio-code

    virtualboxはカーネルを書き換えるため警告がでるとのこと。

    [システム環境設定]>[セキュリティとプライバシー]の[一般]タブを選択 → 右下の「許可」ボタン(「Oracle〜のシステムソフトウェアの読み込みがブロックされました。」が表示されている箇所)
    を押す必要がある模様。

    許可して、もう一回ansible実行。

    1kitamuranoMacBook-Pro:setup tamken$ ansible-playbook --syntax-check setup.yml -i inventory 
    2(中略)
    3Password:
    4# パスワード聞かれる
    5changed: [127.0.0.1] => (item={'name': 'virtualbox', 'state': 'present'})
    6(中略)
    7PLAY RECAP **********************************************************************************************************************************************************
    8127.0.0.1                  : ok=4    changed=1    unreachable=0    failed=0

    はい、エラーなし。

    1kitamuranoMacBook-Pro:setup tamken$ brew cask list
    2alfred                 coteditor              font-ricty-diminished  google-japanese-ime    postman                teamsql                virtualbox
    3cheatsheet             firefox                google-chrome          iterm2                 slack                  vagrant                visual-studio-code

    virtualbox入った!

    以上で、ansibleでMacの環境構築できました!(インストールしたソフトを起動して確認)

    オススメ本

    Ansible実践ガイド
    Ansible実践ガイド

     

    さいごに

    ansible化するメリットは、Mac変更する際にソフト何入れればいーのか一々旧マシン調べなくて良いのと、ちまちまコマンド打たなくて良いの2点に尽きるかと思いました。

    (playbook等をバージョン管理等しているのが前提)

    機会あれば、ぜひansibleでMacの環境構築してみてください!

    こちらの記事もオススメ!

    featureImg2020.07.17ライトコード的「やってみた!」シリーズ「やってみた!」を集めました!(株)ライトコードが今まで作ってきた「やってみた!」記事を集めてみました!※作成日が新し...

    featureImg2020.07.27IT・コンピューターの歴史特集IT・コンピューターの歴史をまとめていきたいと思います!弊社ブログにある記事のみで構成しているため、まだ「未完成状態」...

    featureImg2020.08.04エンジニアの働き方 特集社員としての働き方社員としてのエンジニアの働き方とは?ライトコードのエンジニアはどんな働き方をしてるのか、まとめたいと...

    北村 北村先生
    上で実行したplaybookをGithubに上げてみましたのでご参考までに
    https://github.com/tamken/mac-brew-ansible

    【追記】
    teamsqlオワコンでしたorz。かわりにdbeaver入れました。

    たむけん(エンジニア)

    たむけん(エンジニア)

    おすすめ記事