要約
nodejsを使った開発環境でバージョン管理じゃなくて単なるバックアップとしてソースコードを管理する方法を検討しました。
※この記事の対象読者:
nodejsのプロジェクトでタスク管理にgulpを利用している人で、バージョン管理以外でバックアップとしてソースコード管理をしたい人
問題点
- node_modulesとか.gitとかdistとかを同期したくない
- 主要なクラウドサービス(Dropbox, GoogleDrive, iCloud)は特定のファイル・ディレクトリを同期から除外するための設定が若干めんどくさい、または存在しない。
解決方法
- gulpを利用してビルドのたびにバックアップディレクトリにソースファイルをコピーする。
- 基本的にプロジェクト全体をバックアップするが、gulpの設定で特定のディレクトリはコピーの対象から外す。
背景
昨日SSDが逝きました。
リモートリポジトリにはまだpushしてなかったコード達がお亡くなりになりました。
バージョン管理とバックアップは別物なんだなぁ
みつを
本当にありがとうございました。
(主にMacを使ってるので)昔はTimeMachineでバックアップを取ってたのですが、NASが壊れたのを機にそのまま放置してしました・・・。
自前でバックアップとるのはもう嫌なので、手軽にクラウドでバックアップを取る方法を調べて検討したのでメモします。
本当はもっと賢い方法があるのでしょうが、わからないので誰かご存じでしたら教えていただけると助かります・・・。
従来手法?
Dropbox
.gitignoreっ的なもので制御
dbignoreというOSSがあるけどMacしか対応してない(多分)。
(たまにWindowsも使うんじゃ・・・T^T)
http://konolige.com/dbignore/
公式も「たくさん要望あるけどまだ作れてござらん」っておっしゃってる?
https://www.dropboxforum.com/t5/Files-folders/Exclude-specific-folder-names-with-Smart-Sync/td-p/289837
GUIで制御
selective syncという設定をすることで、ディレクトリを一つ一つ同期するかしないかを選択できる?らしいけど、これやるとローカルからディレクトリが消されるので開発できないorz。重たいファイルを特定のデバイスにダウンロードさせないための機能っぽい。
https://help.dropbox.com/installs-integrations/sync-uploads/selective-sync-overview
GoogleDrive
GUIで制御
drop boxと同じでローカルから削除されるっぽい(未検証)
https://support.google.com/drive/forum/AAAAOxCWsTozRU34aolkdo/?hl=en&gpf=%23!topic%2Fdrive%2FzRU34aolkdo
iCloud
ファイル名で制御
ファイル末尾に.nosync または.tmpをつける。
これは仮にできたとしても、やりたくないので未検証・・・
https://discussions.apple.com/thread/8137146
OneDrive
ない
「OneDriveの思想はOneDriveの中身すべてを同期させることやぞ」
「特定のディレクトリを除外する機能を作るとしてもNot Right Nowだ」とのこと(2015年)
従来手法のまとめ
クロスプラットフォームで簡単に開発中のものをバックアップするような主要なクラウドサービスはない(多分。ほんとか?)。
提案手法
Gulp(v4)でビルドするたびにどっかにコピーする。
下準備
バックアップディレクトリの定義
(1人/1つの開発マシンしかないならこれをやらずにgulpfile.jsにパスをべた書きでOK。)
mac/linuxだったら単にterminalで、windowsだったらgitbashで下記を.bashrcとかに追記
※gulp
https://gulpjs.com/
EXPORT backup_directory="/backup/directory"
gulpfile.jsに設定を追加
var gulp = require('gulp');
var path = require("path");
gulp.task('backup:src', function () {
return gulp.src([
'./**', //コピーしたいファイルのパス
'!./node_modules/**', //除外したいパス(先頭に!をつける)
'!./dist/**', //同上
'!./.git' //同上
])
.pipe(gulp.dest(process.env.backup_directory+'/'+path.basename(__dirname)));
//back_updirectory/projectname配下にバックアップ
});
gulp.task('default', gulp.series(
//ほかのタスク:コンパイルとかデプロイとか
'backup:src',
//...
)
);
タスクを実行
npx gulp
結果
Mac死んでるからWindowsで検証してる・・・orz
結論
gulpを使えば、ビルドの度に手軽にソースコードをDropboxにバックアップでき、node_modulesなどは除外できました。多分他のクラウドサービスも同じように実行できると思います。
まとめと感想
初めてQiita記事を書いてみました。
間違いなどあれば、ご指摘いただけると助かります。
本当に簡単にソースコードバックアップできるサービスないのかな。。。
Javaとか他の開発環境には適用できないし、いっそすべての言語のプロジェクトをGulpでタスク管理するか・・・。と思ったけどそれは違う気がする。