はじめに
私がCapistranoの動作確認をローカルで行うために、使っている方法を紹介します。
以下のライブラリのバージョンで、このやり方が上手く行くことを確認しました:
- Capistrano: v3.6〜v3.10
- SSHKit: v1.11〜v1.15
やり方
①下のようなCapistranoの設定ファイルを用意します。パスは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のプラグイン開発時や設定編集時にこの方法を利用してきました。
ただし、この方法で確認できるのはリモートとの通信を伴わない範囲なので、その辺りに影響するような変更や開発を行う際は、別の動作確認が必要と考えます。
リモートとの通信に関係しない部分の変更・開発時には、有用な動作確認方法だと思います。
参考
- https://github.com/capistrano/capistrano
- https://github.com/capistrano/sshkit
- https://capistranorb.com/
脚注
-
正確には、SSHKitのクラス変数
@@configが示すSSHKit::Configurationインスタンスの@backendメンバ変数。 ↩