こんにちは、notch_manです。とある講義のメンターをやっていて色々思うところがあったので、今日は簡単に自動デプロイを実現する方法を紹介したいと思います。

デプロイって難しそう

デプロイって皆さんに聞くと大体こんなワードが返ってきます(私の観測範囲)。

GitHub Actionsでいろいろ書くんでしょ?難しそう

CircleCIで自動デプロイはやったことありますが、個人だとお金がかかるし…

友人にプロが居るのでいつも丸投げです

確かに、複雑なデプロイや環境毎に変数値が変わるなどの事情があればこれらのサービスを使った方がいろいろな事が出来ます。ただ、デプロイってそんな難しいものなのでしょうか?ここでデプロイという単語を辞書で見てみましょう。

デプロイとは、配備する、配置する、展開する、配置につく、などの意味を持つ英単語。ITの分野では開発したソフトウェアを実際の運用環境に配置・展開して実用に供することを指す場合が多い。(出典:https://e-words.jp/w/デプロイ.html

これらをまとめると、みなさんが難しいと思う自動デプロイはたった3つの条件を満たせばどんな方法で実現しても良いことが分かります。

  1. 何かを実行したらソースコード・成果物が所定の位置に配置される
  2. 所定の位置に配置されたソースコード・成果物が実用的な動作をする
  3. それらがなるべく人の手を介さずに処理される

というわけで、これらを満たすとても簡単なデプロイスクリプトを実装してみます。

rsyncで始める自動デプロイ

初心者がデプロイ組むときにサーバーのURLとかいろいろ考えるの難しいですよね?でも、そんな状態でも大体”公開鍵認証”でSSHは通じているはずです。となれば、この経路を使ってファイルを置くことが出来そうですね。というわけで、SSH経由で自動デプロイをしてみましょう。これを実現する方法にrsyncというものがあります。rsyncは差分ファイル転送を行なうツールになっています。差分ファイル転送を雑に説明すると、あるファイルに更新があった場合に別のサーバーなどの対応するファイルと変更を同期する機能のことです。rsyncについてはこちらのサイト がとても参考になります。

では、rsyncを使ってデプロイスクリプト(deploy.sh)を書いてみましょう。

rsync -r -a <転送したいファイルを含んだフォルダ>/* <remote server>:<配置したいディレクトリ>

さらに~/ssh/configを編集して鍵情報などを登録しておきます。

Host <remote server>
  HostName <ip address or server name>
  User example
  IdentityFile ~/.ssh/example_key
  ServerAliveInterval 60

以上でデプロイスクリプトの完成です。あとはbash [deploy.sh](http://deploy.sh) を実行すればデプロイが走ります。

まとめ

自動デプロイとか一見すると難しいワードですが、以下を満たせば手段は何でも良いです。

  1. 何かを実行したらソースコード・成果物が所定の位置に配置される
  2. 所定の位置に配置されたソースコード・成果物が実用的な動作をする
  3. それらがなるべく人の手を介さずに処理される

特に講義で頻繁にデプロイをする方々はぜひ参考にしてみてください。最後になりますが、技術で解決出来る事はさっさと技術で解決して本質にしっかり向き合っていきましょう!