1. sawa-zen

    No comment

    sawa-zen
Changes in body
Source | HTML | Preview
@@ -1,61 +1,63 @@
プロジェクトでGulpを使用したい場合、グローバルには`gulp-cli`、プロジェクトローカルには`gulp`を入れなければならず、以下の2つのコマンドを打つことになります。
```bash
$ npm install gulp-cli -g
$ npm install gulp --save-dev
```
ここにおじさんは疑問をいだいてしまいました。
## __グローバルにインストールしてしまっていいのか?__ :confounded:
そうです。__問題は`npm install gulp-cli -g`です。__先のやり方はGulp公式が推奨している方法であり、「gulp入門」と検索すれば同じ方法を紹介している記事が多くヒットするので一般的な方法であるのは間違いないです。しかし、__この方法はタブーを犯しています。__
### __何がタブーなのか?__ :hushed:
__`-g`を使ってインストールするnpmモジュールは個々のプロジェクトが依存することの無い疎な状態であるべき__だと私は考えます。もっと具体的に言うと、ローカルモジュールの実行の為にグローバルモジュールを実行するのは問題であると言えます。これはnpmモジュール全てに言えると思います。
### __どういった問題が起こるか?__ :fearful:
`gulp-cli`をグローバルにインストールしてしまうと、__同じプロジェクトでも開発者によって`gulp-cli`のバージョンが違う場合が考えられます。__`gulp-cli`は複数のバージョンに対応できる作りになっているものの、本当に大きな仕様変更が無いとは言い切れません。そうなれば今まで正常に動作していたプロジェクトも動かくなりかねません。
## __じゃあどうしたらいいのよ?__ :cold_sweat:
__`gulp-cli`のインストールをやめましょう。__`gulp-cli`の主な機能は`node_modules`配下の`gulp`コマンドへパスを通すことです。そんなことはわざわざ`gulp-cli`を経由せずとも、もともと__npm-scriptsが同じ事をしてくれてるじゃあありませんか。__
```js:gulpfile.js
var gulp = require('gulp');
gulp.task('hoge', function() {
console.info('ほげほげ!!');
});
```
例えば、こんな`gulpfile.js`があったとしたら、
```json:package.json
{
"scripts": {
"hoge": "gulp hoge"
}
}
```
こんな感じでnpm-scriptsを追加すれば、`gulpfile.js`に書いた`hoge`タスクを実行できます。
```bash
$ npm run hoge
// => "ほげほげ!!"
```
これでプロジェクトが__グローバルを犯すことのない疎な構造が出来上がりました!__やったね:bow:
+npm-scriptsに関しての詳しい使い方については「<a href="https://ics.media/entry/12226" target="_blank">Node.jsユーザーなら押さえておきたいnpm-scriptsのタスク実行方法まとめ</a>」で解説しているのでご参考ください。
+
どうしても`gulp-cli`の機能が使いたいという場合はグローバルじゃなくプロジェクトローカルにインストールすべきです。こんな風に。
```bash
$ npm install gulp-cli --save-dev
```
## 最後に :speech_balloon:
とは言ったものの少数派の意見なのでGulpの公式に屈服せざるおえない状況の方が多いと思います。是非皆さんのプライベートなプロジェクトなんかで試してみてください。