はじめに
私が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_backend
1は、デフォルトでは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
メンバ変数。 ↩