僕はただFabricで定数が使いたかっただけ


先日の記事に引き続き、リモートでシェルスクリプトを実行するのに、今回はFabricを使う話。

FabricについてはFabricをちょっと試してみた話からたまに複数台のサーバーにオペレーションをしたい時に使うようになった。サクッと使うのにとても便利だ。

今回はリモートサーバーにあるシェルスクリプトをFabricで実行する際に、引数を予めfabfileに書いておきたい場合の記述方法を書いておく。
単純にググってみてもなんだかenvの話ばかりであんまりそれっぽいのが出てこず、ちょいと悩んでしまったので。

例えば、下記のようなシェルスクリプトがあったとする。

#!/bin/bash

echo $1 $2

ここの$1と$2をfabfileのタスクで、下記のように書いても良い場合はそれで良いと思う。

def testshell():
  run("/bin/bash test.sh HOGE POYO")

ただ、HOGEとPOYOを別のタスクでも使いまわしたいなぁ〜ってことも無きにしもあらずだと思う。
そんな場合は、定数として切り出したいよねとは誰しもが考えると思う。
前述の通り、最初はenvのことばかりでちょっと違うやんって思ってたけど、公式サイトを見直して5回目くらいにちゃんと書かれていた。
結局はenvとおなじなのだけど、下記のように記述することができる。

VAR1=HOGE

def testshell():
  run("/bin/bash test.sh %s" % VAR1 )

また、複数書くときは、括弧で閉じてカンマ区切りで連続してかけばOKだった。

VAR1=HOGE
VAR2=POYO

def testshell():
  run("/bin/bash test.sh %s %s" % (VAR1, VAR2))

これであらかじめ設定しておいた定数を使い回しできるようになった。
また一つFabricが便利だと思った。