Ruby
capistrano

Capistranoの動作確認をローカルで行う方法

はじめに

私がCapistranoの動作確認をローカルで行うために、使っている方法を紹介します。

以下のライブラリのバージョンで、このやり方が上手く行くことを確認しました:

  • Capistrano: v3.6〜v3.10
  • SSHKit: v1.11〜v1.15

やり方

①下のようなCapistranoの設定ファイルを用意します。パスはconfig/deploy/local.rbとします。

config/deploy/local.rb
set :deploy_to, "/path/to/app"
set :sshkit_backend, SSHKit::Backend::Local
server 'localhost'

cap local deployを実行します。

以上で、ローカルマシン上の/path/to/appにアプリケーションがデプロイ(コピー)されます。

サンプルコード

動作する完全なサンプルの例としては、 https://github.com/progrhyme/tutorials/tree/master/capistrano をご覧ください。

解説

※この解説は以下のバージョンのコードを前提とします:

  • Capistrano v3.10.1
  • SSHKit v1.15.1

SSHKitのDSLである#as, #with, #execute, #captureといったメソッドは抽象クラスSSHKit::Backend::Abstractで実装されています。
同じくSSHKitのDSLである#upload!, #download!等については、これを継承した具象クラスで実装するものとされています。

上のconfig/deploy/local.rbで設定した:sshkit_backend1は、デフォルトではSSHKit::Backend::Netsshに設定されます。
これは、capistrano/setup.rbから実行されるCapistrano::Configuraton#configure_backendによります。

SSHKit::Backend::Netsshは、net-sshを利用してリモートホストにSSH接続するバックエンドです。

この:sshkit_backendを明示的にSSHKit::Backend::Localに設定することで、通常リモートホストにSSH接続する操作をローカルマシン上で行うことができるようになります。

終わりに

私自身、Capistranoのプラグイン開発時や設定編集時にこの方法を利用してきました。

ただし、この方法で確認できるのはリモートとの通信を伴わない範囲なので、その辺りに影響するような変更や開発を行う際は、別の動作確認が必要と考えます。

リモートとの通信に関係しない部分の変更・開発時には、有用な動作確認方法だと思います。

参考

脚注


  1. 正確には、SSHKitのクラス変数@@configが示すSSHKit::Configurationインスタンスの@backendメンバ変数。