こんにちは、kotaです。前回のblogを書いた時期はまだ冬で外も寒かったのですが、次に何を書こうか考えているうちに、あっという間に春も中頃になっていました。
考えた時間と記事のクオリティは比例しないのですが、今回はfabtoolsとcuisineを使ってみた感想を書いてみたいと思います。
まずFabricって何?
簡単に説明すると、Python製のデプロイツールです。リモートのサーバに対してssh経由でpythonの関数を実行できます。
過去にもFabricについての記事があるので、今回は簡単な説明で終わりにします。
fabtoolsとかcuisineって何?
fabtoolsやcuisineはFabricをサポートするライブラリです。Fabricだけだと複雑になる処理もfabtoolsやcuisineを使うとわかりやすく書くことができます。
fabtoolsやcuisineを使った場合と使わない場合の例を紹介します。
mercurialのリポジトリをcloneする処理
- fabricだけの場合
from fabric.api import cd, run from fabric.contrib.files import exists def hg_clone(dir, repo='aaa'): run('mkdir -p ' + dir) if not exists(dir + '/' + repo): with cd(dir): cmd = 'hg clone https://bitbucket.org/itkobo_z/' + repo run(cmd, warn_only=True)
- fabtoolsとcuisineを使う場合
from fabric.api import cd from fabtools import mercurial from cuisine import dir_ensure, dir_exists def hg_clone(dir, repo='aaa'): dir_ensure(dir) if not dir_exists(dir + '/' + repo): with cd(dir): url = 'https://bitbucket.org/itkobo_z/' + repo mercurial.clone(url)
あまりいい例ではないので間違い探しみたいですが、この例だとfabtoolsを使うことでhgコマンドを直接書く必要がなくなります。
cuisineを使うことでmkdirコマンドを書かなくても良くなっていますが、dir_ensureはディレクトリがなければ作成、あれば何もしないという判断まで含んでいます。このようにcuisineを使う一番のポイントは_ensureメソッドを使うことで冪等性があるコードが書き易くなる点だと思います。
また、fabtoolsには他にもfabtools.apache, fabtools.cron, fabtools.git, fabtools.mysqlなどのモジュールがあり、それらを使うことでコマンドを直接書かなくてもよくなります。
cuisineにもpackage_ensureやupstart_ensureなどの_ensureメソッドがあるのでそれらを使うとFabricがわかりやすくかけると思います。
使ってみた感想は?
fabtoolsやcuisineを使ってみた感想は、すでにFabricを使っていれば新しく覚えることもほとんどないので、すぐに使えていいなあという感じです。
とは言っても、既に動いているFabricをこれらのパッケージを使って書き直すほどではないかな、という気もするので、新しく書く処理があれば使いたいなと思います。
最後に、それぞれのドキュメントを紹介します。
fabtools: http://fabtools.readthedocs.io/
cuisine: https://github.com/sebastien/cuisine