Ansibleによるvim環境構築
はじめに
最近個人で使っている Mac mini のバックアップを取り、OSXをクリーンインストールする機会がありました。
これを機に開発周りのOSXでの環境構築をほぼ自動化できるようAnsibleのplaybookを作成し、brewやbrew-caskを用いてCLI及びデスクトップアプリケーションのインストールを自動化しました。プロビジョニングの際に用いたplaybookは下記レポジトリに公開してあります。
最近vim界隈ではNeoBundle作者の@ShougoMatsuさんによる新しいパッケージマネージャーDein.vimが発表され、作者もそちらに移行するようアナウンスしているようなので、Dein.vimによるpluginの管理を vars/main.yml
配下で一元管理する機能をもったroleを作成し、vimの環境構築もansibleで管理するようにしてみました。
本記事ではこの中のvimの環境構築用のroleを中心に見ていきます。
尚、このplaybookを作成するにあたって、brew, brew-caskまわりのrole作成には
HomebrewとAnsibleでMacの開発環境構築を自動化する
に大変お世話になりました。ありがとうございます。
roleの解説
ansibleのvimロール配下ディレクトリ構成です
└── vim ├── tasks │ └── main.yml ├── templates │ └── .vimrc.j2 └── vars └── main.yml
まず、tasks/main.yml
を見てみます
tasks/main.yml
--- - name: dein.vim file directory file: path={{ dein_vim_dest }} state=directory - name: clone dein.vim repo git: repo=https://github.com/Shougo/dein.vim.git dest={{ dein_vim_dest }} - name: generate .vimrc with plugins template: src=.vimrc.j2 dest=~/.vimrc when: vim_plugins
l2. dein.vim file directory
dein.vimのインストールされるディレクトリを作成します。このなかの dein_vim_dest
は vars/main.yml
で定義される定数です。
l5. clone dein.vim repo
dein.vimのレポジトリから先ほど作成したディレクトリにgit cloneしてきます
l8. generate .vimrc with plugins
vim_plugins
定数(これも vars/main.yml
で定義される定数)と templates/.vimrc.j2
にもとづいて、インストールされるプラグインのリストが記述された .vimrc
がホームディレクトリ配下に作成されます。
続いて templates/.vimrc.j2
の dein.vim プラグインインストールに関わる部分を見てみます。
templates/.vimrc.j2
" Required: set runtimepath^={{ dein_vim_dest }} " Required: call dein#begin(expand('{{ dein_vim_dest }}')) " Let dein manage dein " Required: call dein#add('Shougo/dein.vim') " Add or remove your plugins here: {% for plugin in vim_plugins %} {% if plugin.revision is defined %} call dein#add('{{ plugin.name }}', { 'rev': '{{ plugin.revision }}' }) {% else %} call dein#add('{{ plugin.name | default(plugin) }}') {% endif %} {% endfor %} " Required: call dein#end() " Required: filetype plugin indent on " If you want to install not installed plugins on startup. if dein#check_install() call dein#install() endif
キモとなる部分は l12~l18の部分で、jinja2テンプレートによって vars/main.yml
内の vim_plugins
定数に宣言されるリストが dein.vim のプラグインをインストールする以下の様な記述に書き換えられます
call dein#add('Shougo/neosnippet.vim') call dein#add('Shougo/neosnippet-snippets') call dein#add('Shougo/vimshell', { 'rev': 3787e5 })
vimを起動するときにpluginのチェックが行われ、インストールされていないプラグインがあればdein.vimによってインストールされます。
vars/main.yml
dein_vim_dest: ~/Sources/Provision/Github/DeinVim vim_plugins: - Shougo/neosnippet.vim - Shougo/neosnippet-snippets - { name: Shougo/vimshell, revision: 3787e5 } - scrooloose/nerdtree
このファイルではタスク実行時に参照される定数を宣言します。
dein_vim_dest
: これは dein.vim のインストール先のディレクトリを表しますvim_plugins
: dein.vim によってインストールするpluginのリストを表します。revisionでバージョン指定も可能です。
まとめ
vim環境を構築するためのroleは以上になります。私はあまり肥大化した.vimrcを管理したくない派なのですが、vim_pluginsにインストールしたいパッケージを追加するだけでいいので目にも優しく、大変助かっています。