tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

【node.js】macにnodebrewでnode.jsのバージョン管理を行う爆速あんちょこ

はじめに

あたらしいmac環境を手に入れたので
nodebrewでnode.jsを管理する環境を作ります。

復習もかねての自分用あんちょこメモです

アジェンダ

  1. nodebrewとは
  2. node.jsの削除
  3. nodebrewのインストール
  4. nodebrewのsetup
  5. node.jsのインストール
  6. node.jsの切り替え

1. nodebrewとは

Node.js version manager.

https://github.com/hokaccha/nodebrew

公式サイトに書かれている説明です。

Node.jsを自分のマシン内でバージョン管理するためのToolです。

2. node.jsの削除

なにで入れたかによって違いますが、
nodebrewでのnode.js管理をする場合はそれ以外で入れたものは削除しておきます。

以下はhomebrewで入れた場合の削除例です

$ brew uninstall node

3. nodebrewのインストール

$ brew install nodebrew

4. nodebrewのsetup

nodebrew setupと打つだけです。

# setupを行う
# $HOME/.nodebrewが作られる
$ nodebrew setup
Fetching nodebrew...
Installed nodebrew in $HOME/.nodebrew

========================================
Export a path to nodebrew:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

# 確認
$ ls -ld .node*
drwxr-xr-x  9 tweeeety  tweeeety  288  6  6 21:32 .nodebrew

setupが終わると出力されるとおり、PATHの追加を忘れずに。

$ echo "export PATH=$HOME/.nodebrew/current/bin:$PATH" >> ~/.bashrc

5. node.jsのインストール

インストール可能versionの確認

インストール可能versionはnodebrew ls-remoteで確認できます

$ nodebrew ls-remote
v0.0.1    v0.0.2    v0.0.3    v0.0.4    v0.0.5    v0.0.6

v0.1.0    v0.1.1    v0.1.2    v0.1.3    v0.1.4    v0.1.5    v0.1.6    v0.1.7
v0.1.8    v0.1.9    v0.1.10   v0.1.11   v0.1.12   v0.1.13   v0.1.14   v0.1.15

~ 省略

io@v2.0.0 io@v2.0.1 io@v2.0.2 io@v2.1.0 io@v2.2.0 io@v2.2.1 io@v2.3.0 io@v2.3.1
io@v2.3.2 io@v2.3.3 io@v2.3.4 io@v2.4.0 io@v2.5.0

io@v3.0.0 io@v3.1.0 io@v3.2.0 io@v3.3.0 io@v3.3.1

node.jsのインストール

主に以下のコマンドでインストールします

  • nodebrew install [version]
    • 任意のversionをインストール
  • nodebrew install-binary stable
    • 安定版をインストール
  • nodebrew install-binary latest
    • 最新版をインストール
# 任意のバージョンをインストール
$ $ nodebrew install v5.12.0
Fetching: https://nodejs.org/dist/v5.12.0/node-v5.12.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

# 安定版をインストール
$ nodebrew install-binary stable
Fetching: https://nodejs.org/dist/v10.3.0/node-v10.3.0-darwin-x64.tar.gz
######################################################################## 100.0%
Installed successfully

6. node.jsの切り替え

nodebrew user [version]で指定して切り替えます。

# 利用可能バージョン確認
# currentが指定ないのでどれも選択していない
$ nodebrew list
v5.12.0
v10.3.0

current: none

# この状態ではnodeコマンドもない
$ node -v
-bash: node: command not found

# バージョンを指定
$ nodebrew use v5.12.0

# 指定したバージョンで利用可能になる
$ node -v
v5.12.0

$ npm -v
3.8.6

# listでも確認
$ nodebrew list
v5.12.0
v10.3.0

current: v5.12.0

おわり

さくっできて簡単\(^o^)/

【ruby】macでrbenv x bundlerでgemを管理するまでの爆速あんちょこ

はじめに

あたらしいmac環境を手に入れたので
rbenv x bundlerでgemを管理する環境を作ります。

復習もかねての自分用あんちょこメモです

あじぇんだ

  1. rbenvインストール
  2. rbenvでのrubyインストールと切り替え
  3. bundlerインストール
  4. gemのインストール

前提というほどではないですが、homebrewなどは使える状態を想定してます。

1. rbenvインストール

$ brew install rbenv

$ rbenv -v
rbenv 1.1.1

PATHの追加

~/.bashrcあたりに以下を追加します

export PATH="$HOME/.rbenv/shims:$PATH"

if type rbenv >/dev/null 2>&1; then
  # ${HOME}/.rbenvが作られる
  eval "$(rbenv init -)"and to continue
fi

2. rbenvでのrubyインストールと切り替え

任意のversionをインストール

# 初期状態
$ rbenv versions
* system (set by /usr/local/var/rbenv/version)

# インストール可能versionの表示
$ rbenv install --list
Available versions:
  1.8.5-p52
  1.8.5-p113
  1.8.5-p114
  1.8.5-p115
  1.8.5-p231

~ 省略 ~

  rbx-3.99
  rbx-3.100
  ree-1.8.7-2011.03
  ree-1.8.7-2011.12
  ree-1.8.7-2012.01
  ree-1.8.7-2012.02
  topaz-dev

# リストの中から任意のversionをインストール
$ rben install 2.4.4

# いくつかインストールしてから確認
$  rbenv versions
* system (set by /Users/tweeeety/hoge/.ruby-version)
  2.4.0
  2.4.2
  2.4.4

versionの切り替え

切り替えには主に以下の方法を使う

  • rbenv global [バージョン]
    • ~/.rbenv/version に書き込まれる
  • rbenv local [バージョン]
    • ~/[rbenb localしたディレクトリ]/.ruby-version

実際にやるとこんなん

# rubyのversion確認
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-darwin17]

# このときのrbenv versions
$ rbenv versions
* system (set by /Users/tweeeety/hoge/.ruby-version)
  2.4.0
  2.4.2
  2.4.4

# 切り替え
$ rbenv local 2.4.4

# rubyのversion確認
$ ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-darwin17]

# このときのrbenv versions
$ rbenv versions
  system
  2.4.0
  2.4.2
* 2.4.4 (set by /Users/tweeeety/hoge/.ruby-version)

3. bundlerインストール

bundler自体もgemです。
bundlerだけはグローバルにインストールします。

インストール

$ gem install bundler

$ which bundle
/Users/tweeeety/.rbenv/shims/bundle

設定

# 
$ bundler init

# Gemfileができる
$ ls
Gemfile

# 中身はこんなん
$ cat Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails"

4. gemのインストール

Gemfileに記載されたgemをインストール

$ bundle install --path vendor/bundle

おわり

特にはまることもないのでさくっといけます\(^o^)/

【git】gitコマンドで毎回"Enter passphrase for key ~"と聞かれる - ssh-add

はじめに

久しぶりに新PCに環境を作っていると
git cloneで毎回パスワードを聞かれるようになりました。

$ git clone git@github.com:tweeeety/hoge.git
Cloning into 'hoge'...
Enter passphrase for key '/Users/tweeeety/.ssh/id_rsa_github':

初歩的な事だけど何度か忘れてるのでそんな自分のためにメモ

前提

前提として他の設定はうまくいってます

  • githubsshのkey設定などは済んでる
  • ~/.ssh配下のpermissionなども正しい

解決

# git cloneで毎回パスワード聞かれる
$ git clone git@github.com:tweeeety/hoge.git
Cloning into 'hoge'...
Enter passphrase for key '/Users/tweeeety/.ssh/id_rsa_github':

# ssh-addする
$ ssh-add ~/.ssh/id_rsa_github
Enter passphrase for /Users/tweeeety/.ssh/id_rsa_github_my:
Identity added: /Users/tweeeety/.ssh/id_rsa_github_my (/Users/tweeeety/.ssh/id_rsa_github_my)

# 再度git cloneする
$ git clone git@github.com:tweeeety/hoge.git
loning into 'hoge'...
remote: Counting objects: 17, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 17 (delta 2), reused 17 (delta 2), pack-reused 0
Receiving objects: 100% (17/17), done.
Resolving deltas: 100% (2/2), done.

おわり

すごく初歩的だけどたまに環境構築しなおしたりするとハマりますね

【gulp】run-sequenceでtaskを並列/直列(同期的)にする挙動を確認する

はじめに

gulpは長い事つかってますが、 フロントの方が入れてくれた環境を基に使っているのでゼロから学んだ経験は乏しいです。 (自分はサーバサイド)

ディレクトリのclearやbuildを行うためにrun-sequenceを使っています。

ふとした動機でこれの挙動をちゃんと確認したくなったので
そんなときの自分メモ

f:id:tweeeety:20180531172527p:plain

アジェンダ

  1. run-sequenceとは
  2. run-sequenceの使い方
  3. run-sequenceのrunSequenceで直列指定の挙動を確認

1. run-sequenceとは

説明は公式からの引用です

Runs a sequence of gulp tasks in the specified order.
This function is designed to solve the situation where you have defined run-order,
but choose not to or cannot use dependencies.
 
https://www.npmjs.com/package/run-sequence

指定された順序で一連のタスクを実行する君ということですね。

gulp4.0

公式サイトからの引用です。

これは、同様にタスクの依存関係を定義するためのサポートを持つ必要がある、
gulp 4.0のリリースまでの一時的な解決策であることを意図していました。
 
https://www.npmjs.com/package/run-sequence

公式サイトPlease Noteに記載がありますが、
gulp4.0ではgulp.seriesgulp.parallelという機能で同様の事ができるらしいです。

ちなみに、gulp4.0のchangelogには記載があります。

2. run-sequenceの使い方

インストール

$ npm install --save-dev run-sequence

使い方

公式からの引用です。
https://www.npmjs.com/package/run-sequence#usage

var gulp = require('gulp');
var runSequence = require('run-sequence');
var del = require('del');
var fs = require('fs');
 
// This will run in this order:
// * build-clean
// * build-scripts and build-styles in parallel
// * build-html
// * Finally call the callback function
gulp.task('build', function(callback) {
  runSequence('build-clean',
              ['build-scripts', 'build-styles'],
              'build-html',
              callback);
});
 
// configure build-clean, build-scripts, build-styles, build-html as you wish,
// but make sure they either return a stream or promise, or handle the callback
// Example:
 
gulp.task('build-clean', function() {
    // Return the Promise from del()
    return del([BUILD_DIRECTORY]);
//  ^^^^^^
//   This is the key here, to make sure asynchronous tasks are done!
});
 
gulp.task('build-scripts', function() {
    // Return the stream from gulp
    return gulp.src(SCRIPTS_SRC).pipe(...)...
//  ^^^^^^
//   This is the key here, to make sure tasks run to completion!
});
 
gulp.task('callback-example', function(callback) {
    // Use the callback in the async function
    fs.readFile('...', function(err, file) {
        console.log(file);
        callback();
//      ^^^^^^^^^^
//       This is what lets gulp know this task is complete!
    });
});

ポイント

上記のコードでいうと、ポイントは以下です。

  runSequence('build-clean',
              ['build-scripts', 'build-styles'],
              'build-html',
              callback);
  • runSequenceに記載した順に直列で実行される
  • 各タスクはreturnするか、callback()を呼び出す必要がある

3. run-sequenceのrunSequenceで直列指定の挙動を確認

まず、非同期な処理想定としてsetTimeoutを使って確認してみます。

runSequenceを使うパターンを以下のようなパターンで確認します。

  • 3.0. runSequence使った場合の期待する挙動
  • 3.1. runSequence使わなかった場合
  • 3.2. runSequencee使ったがcallback呼ばなかった場合
  • 3.3. runSequencee使ってcallbackを入れたがおしい場合
  • 3.4. runSequencee使って意図通りの指定をした場合

3.0. runSequencee使った場合の期待する挙動

まずは期待する挙動です。
以下のようにtaskを定義したとします。

f:id:tweeeety:20180531164424p:plain

この時、呼ばれる順番を以下のように期待したという前提ですすめます。
f:id:tweeeety:20180531164445p:plain

3.1. runSequence使わなかった場合

runSequenceを使わなかった場合の挙動を確認します。

コード
var gulp = require('gulp');                                                                                                                                                                                                                                

gulp.task('task', ['task-1', 'task-2', 'task-3']);

gulp.task('task-1', function() {
  console.log('called task-1');
});

gulp.task('task-2', ['task-2-1', 'task-2-2']);

gulp.task('task-2-1', function() {
  console.log('called task-2-1');

  // 5秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-1_subtask");
  }, 5000);
});

gulp.task('task-2-2', function() {
  console.log('called task-2-2');

  // 3秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-2_subtask");
  }, 3000);
});

gulp.task('task-3', function() {
  console.log('called task-3');

  // 1秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-3_subtask");
  }, 1000);

});

gulp.task('default', ['task-normal']);

このコードは以下に置きました。
https://github.com/tweeeety/gulp-task-order/blob/master/task_normal/gulpfile.js

実行してみる

このまま実行すると、*_subtaskが非同期に最後にまとめて呼ばれます。

$ gulp task
[16:39:10] Using gulpfile ~/gulp-task-order/task_normal/gulpfile.js
[16:39:10] Starting 'task-1'...
called task-1
[16:39:10] Finished 'task-1' after 104 μs
[16:39:10] Starting 'task-2-1'...
called task-2-1
[16:39:10] Finished 'task-2-1' after 592 μs
[16:39:10] Starting 'task-2-2'...
called task-2-2
[16:39:10] Finished 'task-2-2' after 558 μs
[16:39:10] Starting 'task-2'...
[16:39:10] Finished 'task-2' after 2 μs
[16:39:10] Starting 'task-3'...
called task-3
[16:39:10] Finished 'task-3' after 38 μs
[16:39:10] Starting 'task'...
[16:39:10] Finished 'task' after 1.78 μs
  called task-3_subtask
  called task-2-2_subtask
  called task-2-1_subtask
結果

以下のような順で呼ばれています

f:id:tweeeety:20180531164537p:plain

ポイント
  • *_subtaskたちが非同期にすべて最後に呼ばれている
  • 順番もtask-3-1_subtask, task-2-2_subtask, task-2-1_subtaskというように期待した逆の順に呼ばれている

3.2. runSequence使ったがcallback呼ばなかった場合

runSequenceは使ったが、callbackを呼ばなかった場合の挙動を確認します。
一番よくありがちなパターンでしょうか。

コード
var gulp = require('gulp');
var runSequence = require('run-sequence');

gulp.task('task', function(callback) {
  runSequence('task-1', 'task-2', 'task-3', callback);
});
                                                                                                                                                                                                                                                           
gulp.task('task-1', function() {
  console.log('called task-1');
});

gulp.task('task-2', ['task-2-1', 'task-2-2']);

gulp.task('task-2-1', function() {
  console.log('called task-2-1');

  // 5秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-1_subtask");
  }, 5000);
});

gulp.task('task-2-2', function() {
  console.log('called task-2-2');

  // 3秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-2_subtask");
  }, 3000);
});

gulp.task('task-3', function() {
  console.log('called task-3');

  // 1秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-3_subtask");
  }, 1000);

});

gulp.task('default', ['task-sync-fail-1']);

このコードは以下に置きました。
https://github.com/tweeeety/gulp-task-order/blob/master/task_sync_fail_1/gulpfile.js

実行してみる

runSequenceを使ったものの、
3.1. runSequence使わなかった場合 とまったく同じ結果で非同期なままです。

$ gulp task
[17:02:17] Using gulpfile ~/gulp-task-order/task_sync_fail_1/gulpfile.js
[17:02:17] Starting 'task'...
[17:02:17] Starting 'task-1'...
called task-1
[17:02:17] Finished 'task-1' after 102 μs
[17:02:17] Starting 'task-2-1'...
called task-2-1
[17:02:17] Finished 'task-2-1' after 967 μs
[17:02:17] Starting 'task-2-2'...
called task-2-2
[17:02:17] Finished 'task-2-2' after 901 μs
[17:02:17] Starting 'task-2'...
[17:02:17] Finished 'task-2' after 2.05 μs
[17:02:17] Starting 'task-3'...
called task-3
[17:02:17] Finished 'task-3' after 40 μs
[17:02:17] Finished 'task' after 5.69 ms
  called task-3_subtask
  called task-2-2_subtask
  called task-2-1_subtask
結果

以下のような順で呼ばれています

f:id:tweeeety:20180531170801p:plain

ポイント
  • 3.1. runSequence使わなかった場合 とまったく同じ

3.3. runSequencee使ってcallbackを入れたがおしい場合

runSequenceeを使ってcallbackも入れたがネストが考慮されてない場合の挙動を確認してみます。

コード
var gulp = require('gulp');
var runSequence = require('run-sequence');

gulp.task('task', function(callback) {                                                                                                                                                                                                                     
  runSequence('task-1', 'task-2', 'task-3', callback);
});

gulp.task('task-1', function() {
  console.log('called task-1');
});

gulp.task('task-2', ['task-2-1', 'task-2-2']);

gulp.task('task-2-1', function(callback) {
  console.log('called task-2-1');

  // 5秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-1_subtask");
    callback();
  }, 5000);
});

gulp.task('task-2-2', function(callback) {
  console.log('called task-2-2');

  // 3秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-2_subtask");
    callback();
  }, 3000);
});

gulp.task('task-3', function(callback) {
  console.log('called task-3');

  // 1秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-3_subtask");
    callback();
  }, 1000);

});

gulp.task('default', ['task-sync-fail-2']);

このコードは以下に置きました。
https://github.com/tweeeety/gulp-task-order/blob/master/task_sync_fail_2/gulpfile.js

実行してみる

よく見ないとわかりずらいですが、
task-2-2_subtasktask-2-1_subtaksあたりが意図した通りになっていません。

$ gulp task
[17:13:16] Using gulpfile ~/gulp-task-order/task_sync_fail_2/gulpfile.js
[17:13:16] Starting 'task'...
[17:13:16] Starting 'task-1'...
called task-1
[17:13:16] Finished 'task-1' after 163 μs
[17:13:16] Starting 'task-2-1'...
called task-2-1
[17:13:16] Starting 'task-2-2'...
called task-2-2
  called task-2-2_subtask
[17:13:19] Finished 'task-2-2' after 3 s
  called task-2-1_subtask
[17:13:21] Finished 'task-2-1' after 5 s
[17:13:21] Starting 'task-2'...
[17:13:21] Finished 'task-2' after 4.19 μs
[17:13:21] Starting 'task-3'...
called task-3
  called task-3_subtask
[17:13:22] Finished 'task-3' after 1 s
[17:13:22] Finished 'task' after 6.01 s
結果

以下のような順で呼ばれています
f:id:tweeeety:20180531172026p:plain

ポイント
  • task2とtask3の*_subtaskは、それぞれの中で呼ばれるようになった
  • ただし、task2内のtask-2-2_subtask、task-2-1_subtaksの順番は非同期のまま

3.4. runSequencee使って意図通りの指定をした場合

最後に意図通りの使い方の確認です。

コード
var gulp = require('gulp');
var runSequence = require('run-sequence');

gulp.task('task', function(callback) {
  runSequence('task-1', 'task-2', 'task-3', callback);
});

gulp.task('task-1', function() {
  console.log('called task-1');
});

gulp.task('task-2', function(callback){                                                                                                                                                                                                                    
  runSequence('task-2-1', 'task-2-2', callback);
});

gulp.task('task-2-1', function(callback) {
  console.log('called task-2-1');

  // 5秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-1_subtask");
    callback();
  }, 5000);
});

gulp.task('task-2-2', function(callback) {
  console.log('called task-2-2');

  // 3秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-2-2_subtask");
    callback();
  }, 3000);
});

gulp.task('task-3', function(callback) {
  console.log('called task-3');

  // 1秒間かかるタスク
  setTimeout(function(){
    console.log("\tcalled task-3_subtask");
    callback();
  }, 1000);

});

gulp.task('default', ['task-sync']);

このコードは以下に置きました。
https://github.com/tweeeety/gulp-task-order/blob/master/task_sync/gulpfile.js

実行してみる

意図どおりになりました!

$ gulp task
[17:21:37] Using gulpfile ~/gulp-task-order/task_sync/gulpfile.js
[17:21:37] Starting 'task'...
[17:21:37] Starting 'task-1'...
called task-1
[17:21:37] Finished 'task-1' after 102 μs
[17:21:37] Starting 'task-2'...
[17:21:37] Starting 'task-2-1'...
called task-2-1
  called task-2-1_subtask
[17:21:42] Finished 'task-2-1' after 5 s
[17:21:42] Starting 'task-2-2'...
called task-2-2
  called task-2-2_subtask
[17:21:45] Finished 'task-2-2' after 3 s
[17:21:45] Finished 'task-2' after 8.01 s
[17:21:45] Starting 'task-3'...
called task-3
  called task-3_subtask
[17:21:46] Finished 'task-3' after 1 s
[17:21:46] Finished 'task' after 9.01 s
結果

無事意図通りに呼ばれるようになりました。 f:id:tweeeety:20180531172423p:plain

サンプル

一応サンプルをおいておきました。
npm installすればそれぞれ試せます。

参考

おわり

使い方や説明を見てわかることもありますが、
実際に確認するのって大切ですよね\(^o^)/

【gulp】gulpのtaskを任意のタイミングで中断(kill)する - process.exit

はじめに

さまざまな時にgulpのタスクを終了させたい事があります。
そんなときのメモ

process.exitを使う

process.exitを使う事でgulp taskを中断できます

たとえば以下のように使います。

  • gulpfile.js
var gulp = require('gulp');

gulp.task('task', ['task1', 'task2', 'task-kill', 'task3']);

gulp.task('task1', function() {
  console.log('i am task1!!');
});

gulp.task('task2', function() {
  console.log('i am task2!!');
});

gulp.task('task-kill', function() {
  console.log("before kill task");

  process.exit(0);

  console.log("after kill task");                                                                                                                                                                                                                                          
});

gulp.task('task3', function() {
  console.log('i am task3!!');
});
  • 出力
$ gulp task
[16:42:45] Using gulpfile ~/gulp-task-kill/gulpfile.js
[16:42:45] Starting 'task1'...
i am task1!!
[16:42:45] Finished 'task1' after 147 μs
[16:42:45] Starting 'task2'...
i am task2!!
[16:42:45] Finished 'task2' after 56 μs
[16:42:45] Starting 'task-kill'...
before kill task

サンプル

https://github.com/tweeeety/gulp-task-kill

おわり

正常終了じゃないときは、exitに1を指定しましょう!\(^o^)/

【gulp】gulp taskをファイルに分割 - require-dir

はじめに

gulpは長い事つかってますが、 フロントの方が入れてくれた環境を基に使っているのでゼロから学んだ経験は乏しいです。 (自分はサーバサイド)

改めてゼロから設定していると、
gulpfile.jsのtaskが肥大化してわかりにくくなるのでファイルを分けたくなる事があります。

そんなときの自分メモ

f:id:tweeeety:20180524215025p:plain

アジェンダ

  1. ファイルに分けるには
  2. requireDirインストール
  3. requireDir使ってみる

1. ファイルに分けるには

requireDirというNode helperを使います。
https://www.npmjs.com/package/require-dir

2. requireDirインストール

# サラからならgulpも
$ npm install --save-dev gulp

# require-dirインストール
$ npm install --save-dev require-dir

3. requireDir使ってみる

構成

例ですが、以下のようなtasksディレクトリ以下に分割したtaskをおきます

$ tree
.
├── gulpfile.js
├── package.json
└── tasks
    ├── task1.js
    ├── task2.js.bk
    └── task3.js
gulpfile.js

gulpfile.jsの中身は以下のように書くだけです。

var dir = require( 'require-dir' );
dir( './tasks', { recurse: true } );

tasksディレクトリ配下に書いたtaskを実行してくれます

実行
$ gulp task1
[15:42:30] Using gulpfile ~/gulp-task-divide/gulpfile.js
[15:42:30] Starting 'task1'...
i am task1!!
[15:42:30] Finished 'task1' after 129 μs

$ gulp task2
[15:42:32] Using gulpfile ~/gulp-task-divide/gulpfile.js
[15:42:32] Starting 'task2'...
i am task2!!
[15:42:32] Finished 'task2' after 135 μs

$ gulp task3
[15:42:34] Using gulpfile ~/gulp-task-divide/gulpfile.js
[15:42:34] Starting 'task3'...
i am task3!!
[15:42:34] Finished 'task3' after 120 μs

サンプル

github.com

おわり

require-dirですっきり\(^o^)/

【git】.gitignoreで反映されないとき - git rm --cached

はじめに

.gitignoreの反映方法をいつも忘れるので自分用メモ
本当に毎回忘れる...

f:id:tweeeety:20180529162907p:plain

git rm --cachedでキャッシュを消す

# .gitignore編集
$ vi .gitignore
---- vi ----
sample.txt
------------

# キャッシュを消す
$ git rm --cached sample.txt

# pushする
$ git add .gitignore
$ git commit -m 'add .gitignore'
$ git push origin master

おわり

これ本当に毎回忘れるーーーーーーー\(^o^)/
覚えておく必要もないけど...