NEWS ABOUT Solution WORKS TEAM BLOG お問い合わせ JP EN

ファイルの同期を忘れた!?これだけやればもう完璧!避けては通れない「デプロイ」の基本をまとめました!

こんにちは。
やっと仕事に慣れてきた入社13週目のエンジニア大倉です。

今回のテーマは、「デプロイ」です。
WEBエンジニア、コーダーの方は、ほぼ毎日作業してるであろうあれです。

Amazonでは、1時間に1000回も頻繁に行われているようですね。

 

参考:Amazonは1時間に最大1000回もデプロイする。クラウドネイティブなデプロイとはどういうものか? AWS re:Invent基調講演(Day2 AM)

 

先日、先輩エンジニアからrsyncを教えてもらい。
こんな便利なコマンドがあったんだ!と感動し、もう一度勉強し直しました。

 

デプロイとは?

正式な名称は、デプロイメント(deployment)
ネットワークアプリケーションやWebサービスなどを、利用可能な状態に準備すること。
開発環境から検証環境に反映させたり、ソフトウェアのインストールなどをすることを指します。
今回は、ファイル・ディレクトリのアップロードに絞って扱わせていただきます。

それでは、webプログラマは避けて通れない”デプロイ”の基本的なやり方をまとめていきます。

まずは、ツールを使った操作からご紹介していきます。

 

【ツール】

●FTP/SCPクライアント

[windows]

FFFTP
WinSCP
FileZilla
Putty / SuperPutty

[mac]

Cyberduck
FireFTP
FileZilla
Transmit

[例:winSCP]

サーバ情報を書き込んで

左(ローカル)から、右(リモート)へ
ドラッグ&ドロップでアップロードできますね。

 

便利な機能でミラーリングというサーバのディレクトリとクライアントのディレクトリを同期する機能があります。
コマンド>ミラーリングアップローをクリック。もしくは、画面上で「ctrl」+「U」を同時に押します。
そして、ローカル、リモートのディレクトリと各種オプションを設定すると、実行できます。

 

●IDE

Eclipse
NetBeans
Aptana Studioなど

保存と同時に同期処理など豊富な機能が強みですね。
仕事では、windows 家では、macの僕にとっては、同じ環境で作業できるのは、助かります。

[例:NetBeans]

プロジェクト作成時にリモート接続設定を行い、手動、自動でアップロード設定をする感じですね。

 

●WEBオーサリングツール

Dreamweaverなどでもできるようですね。

参考:Dreamweaver Help / Dreamweaver の FTP 接続の設定をする

●デプロイ自動化ツール

Capistrano
Webistrano
Mina
Fabric
Cinnamon
git+Jenkins

最近、話題になることが多いですね。
gitなどのバージョン管理ツールでプッシュと同時にサーバに反映されるなど設定することができるようです。
これは、少しずつ案件でも使って行きたいです。

●WEBサービス

DeployButton

GitHub,Bitbucket,DropboxなどからHerokuや各種サーバへデプロイするためのWEBサービスです。

参考:各種サービスからのデプロイを一発で実現するボタンを作れる『Deploy Button』

 

【Linux コマンド】

●scp

SCP(Secure Copy)
ファイルを安全にサーバにコピーするコマンド
cpの感覚で利用でき、コピー先をリモートに選択出来ます。

例:

//リモートへコピー
scp コピーするファイル ユーザ名@リモートのホスト名:コピーしたいリモートのディレクトリ
scp index.php user@xxx.xxxx.xxx.xxx:/var/www/hoge

//ローカルへコピー
scp ユーザ名@リモートのホスト名:コピーしたいリモートのファイル コピーするディレクトリ
scp user@xxx.xxxx.xxx.xxx:/var/www/hoge/index.php C:\Users\hoge\

●ftp/sftp

ftp(file transfer program)
sftp(Secure file transfer program)
ファイル転送に用いる対話式のコマンドです。

例:

ftp xxx.xxx.xxx.xxx
もしくは、
sftp xxx.xxx.xxx.xxx
この後に、ユーザ名、パスワードが要求されます。

コマンド
get
get /var/www/html/hoge.php /Users/user/hoge.php //ローカルへコピー
put /Users/user/hoge.php /var/www/html/hoge.php //リモートへコピー

その他にも、Linuxコマンドで、ディレクトリ移動操作などもできます。
cd ./hoge //リモートディレクトリ移動
lcd ./hoge //ローカルディレクトリ移動
del /var/www/html/*.php  //ファイル削除
mkdir /var/www/html/hoge //ディレクトリ作成
rmdir /var/www/html/hoge //ディレクトリ削除
quit           //終了

【SFTPとSCPの違い】

SCPの特徴は、高速です。
SFTPの特徴は、高機能、高信頼性です。4GB以上のファイル送信、転送の中断や対話式も選択可能だったりします。

 

SCP,FTP/SFTPは、ファイルやディレクトリ毎のコピーとなります。
ファイルコピー忘れや不要な更新をすることもあります。

そこで、便利なのが

rsync

です。

●rsync

2つのディレクトリ同期処理を行うコマンド。
オプションの設定により、更新、追加ファイルのみコピーや
同期元で削除されたファイルやディレクトリをリモート先で削除することもできます。

例:
rsync オプション 同期元ディレクトリ 同期先ディレクトリ
rsync -avn /hoge/sendDir/ /foo/destDir

オプションをつけることによって、同期処理などを決めることができます。
-a :同期元のパーミッション、グループ情報などを保持して同期
-v :処理中ファイル名を表示
-n :実行動作だけを表示。実行していない動作を非表示。
-r :指定ディレクトリ下のディレクトリも一緒にバックアップ
-u :追加ファイルのみ同期

【まとめ】

ツールを使うGUI環境では、ファイルを見ながら操作できる安心感。
コマンドを使うCUI環境では、コマンド操作での作業性。
が特徴です。状況とそれぞれ手にあったものを選んでいってください。

今回まとめていて、gitなどのソースコード管理と連動して自動でデプロイしてくれることを知りました。
使いながら、また改めてまとめたいと思います。