FTPしか使えないレンタルサーバーでの案件でGitを入れようとするとき、ソースの管理って結構大変だったりします。なので、git pushしたときに自動でFTPすると、非常に便利でした。
- Gitフックを仕込むgrunt-githooksについて紹介するよ – Qiita [キータ]
- [ツール/エディタ]grunt-ftpushを使って変更されたファイルをFTPで自動でアップロードする | Wood-Roots.blog
このgrunt-githooksと、grunt-ftpushを使ってこんなGruntfileを作ります。
module.exports = (grunt) -> grunt.loadNpmTasks "grunt-ftpush" grunt.loadNpmTasks "grunt-githooks" grunt.initConfig ftpush: { build: { auth: { host: 'example.com', port: 21, authKey: 'pass' }, src: '', dest: '/path/to/dir', exclusions: ['.*','node_modules/*','.sass-cache/'] keep: [], simple: true, useList: false } } githooks: { options: { dest: '.git/hooks', hashbang: '#!/bin/bash', template: './node_modules/grunt-githooks/templates/shell.hb', startMarker: '## GRUNT-GRUNTHOOKS START', endMarker: '## GRUNT-GRUNTHOOKS END' }, setup: { 'pre-push': 'deploy' } } grunt.registerTask 'deploy', ["ftpush"]
これを設定したら、以下のコマンドを実行します。
$ grunt githooks
これで.git/hooks/pre-pushが作成され、pushしたときにgrunt deployが実行されるようになります。grunt deployにこのコードだとFTPしか設定してありませんが、サーバーにアップロードする前にCSSやJSのコンパイル・結合・圧縮などを実行するとより、使い勝手がいいと思います。
例:https://github.com/torounit/torounit2015/blob/master/Gruntfile.coffee
サーバーによってはftpushではなく、grunt-rsync等を使ったほうが良い場合も多いですが基本はこんな感じで、push時にサーバーと同期を取る事ができます。
やっぱりいろいろ自動化しておくと便利で良いですね。ファイルの同期は手動でやるとだいたいろくな事が無いので、自動化の威力がいろいろ感じられて良いかなと思います。
note
- gitにsourcetreeを使う場合、環境変数が読まれないので、command not found: grunt とか言われる場合があります。その場合、githooksのテンプレートをいじって、bashrcとかをexportすると良い感じになります。