gulpでFTPサーバにデプロイする

ひとりアドベントカレンダー4日目の記事です。

何番煎じかわかりませんが書きます。

FTPサーバに自動デプロイすること自体はやってるひとも多いと思いますが 実は私は毎回手動でやってました。 以前自動化したことはあるんですが、間違ってルートディレクトリに全部展開しちゃいまして。。しかも「ローカルに無いファイルがサーバにある場合は消す」って設定してしまったため、サーバのファイルがほとんど消えてしまいまして。。それ以来トラウマです。

が、毎回手動であげるのがさすがに辛くなってきたので 今回は勇気を振り絞ってがんばります。

セットアップ

いつものようにnpm init

npm init

いろいろ聞かれますが全部エンターキー押せばいいです。 あとから変えられるので。

次に gulpとftpのライブラリが必要なのでインストール

npm install gulp vinyl-ftp --save-dev

私の場合は「アドミンじゃないとダメ」て言われたのでsudo付けました。

以上でセットアップ完了

javascriptを書く

内容はこんな感じ

[gulpfile.js]

var gulp = require('gulp');
var ftp = require('vinyl-ftp');
var fs = require('fs');

// jsonファイルを詠み込む
// jsonの内容
// {
//   "host": "your.ftp.path.com",
//   "user": "xxxxxx",
//   "password": "yyyyyy",
//   "parallel": 5
// }
var loadJsonSync = function(filename) {
  return JSON.parse(fs.readFileSync(filename, 'utf8'));
};

gulp.task('deploy', function(){
  // FTP設定ファイル読み込み
  var ftpConfig = loadJsonSync(__dirname + '/ftpconfig.json');
  ftpConfig.log = console.log;// ロガーを加える

  // デプロイ先ディレクトリ
  var remoteDest = '/home/naosim/www/app/phaser_study';

  // デプロイ対象ファイル設定
  // !はデプロイされない
  var globs = [
    './**',
    '!./**/*.DS_Store',
    '!./gulpfile.js',
    '!./node_modules/**'
  ];

  var conn = ftp.create(ftpConfig);
  gulp.src(globs, {buffer: false, dot: true})
    .pipe(conn.newerOrDifferentSize(remoteDest))
    .pipe(conn.dest(remoteDest));
});

基本的に他のサイトからのコピペですが コード内にFTPサーバのアカウントとかパスワードとか書くと gitにコミットしづらくなるので、そこだけjsonファイルに外出ししました。

あとデプロイ先ディレクトリは必ず確認しましょう!死ぬよ。

あとglobsに書く

./**

/**

に書き間違えると死ねるかもよ。 怖くてやってないけど。

ちなみに外出しした設定ファイルはこれ。(上記スクリプト内にもコメントで入ってるけど) [ftpconfig.json]

{
  "host": "your.ftp.path.com",
  "user": "xxxxxx",
  "password": "yyyyyy",
  "parallel": 5
}

parallelはFTPサーバによって違うようなので適当に変えてください。

設定は以上です。

運命のデプロイ

このコマンドを打ちます。

node_modules/gulp/bin/gulp.js deploy

どりゃーーーーー!!! デプロイできたーーーーーーーー!!!! これでまたひとつ大人になった。