SlideShare a Scribd company logo
Grunt入門 
1
アジェンダ 
• 1. Gruntとは 
• 2. Node.jsのインストール 
• 3. Gruntのインストール 
• 4. プラグインのインストール 
• 5. Gruntfile.jsの設定 
• 6. Grunt vs gulp 
2
Gruntとは 
3 
• http://gruntjs.com/ 
• Web開発でよく行う操作を自動化するツール 
(タスクランナー) 
• よく行う操作の例 
• ファイルの結合 
• minify化 
• altJS等のファイル保存時のコンパイル処理等
Node.jsのインストール 
• Gruntを使うためにはNode.jsの環境が必要 
• Node.jsのバージョンを管理するツールを使って 
インストールすると便利(nvm, nodebrew 等) 
4 
• 今回はnvmを使う 
• https://github.com/creationix/nvm
Node.jsのインストール 
• インストールまでのざっとした流れ 
1. $git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 
—tags` (nvmがダウンロードされる) 
5 
2. ~/.bashrc or ~/.zshrcに以下を記述 
$ source ~/.nvm/nvm.sh 
3. ~/.bashrc or ~/.zshrcの読み込み 
$ . ~/.bashrc or . ~/.zshrc 
4. nvm install 0.10 (0.10系の最新がインストールされる) 
5. ~/.nvmrcファイルを作りその中に使うnodeのバージョンを記述(v.0.10.32がある前提) 
v0.10.32
Node.jsのインストール 
• インストールまでのざっとした流れ(続き) 
6 
6. ~/.bashrc or ~/.zshrcに以下を記述 
source ~/.nvm/nvm.sh # nodeを使うおまじない 
nvm run -v # nvmrcに記述した内容を読み取って使用するnodeのバージョンを決定 
if npm -v >/dev/null 2>&1; then 
. <(npm completion) # npmのTAB補完を強化 
fi 
———————— 
~/.bashrcのみ 
# nvmのTAB補完を強化 
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
Node.jsのインストール 
• 以上1~6までの一連の流れを終えればnode, npm 
コマンドが使えるようになっているはず! 
※npm とはNode Package Manager の略でNode で作られたパッケージモジ 
ュールを管理するためのツール 
(参考: http://tmlife.net/programming/javascript/nodejs-package-manager-npm-usag. 
7 
html)
Gruntのインストール 
• gruntを使うためにはgrunt-cliとgruntが必要。 
• grunt-cliとgruntの違いは以下のページが参考にな 
るかも。 
http://js.studio-kingdom. 
com/grunt/doc/getting_started 
8
Gruntのインストール 
• http://gruntjs.com/getting-started 
• $ npm install -g grunt-cli 
※-gオプションをつけるとグローバル(どこからでも使えるモジュール)、-gが 
無いとローカル(プロジェクト直下でないと使えないモジュール)にインストー 
ルされる 
9
プラグインのインストール 
• まず最初に以下のコマンドでpackage.jsonを作成 
する。(package.jsonの説明は後ほど) 
$ npm init 
• 色々聞かれるがとりあえず全部エンターでOK。 
10
プラグインのインストール 
• package.jsonの役割 
• プロジェクトに依存しているモジュール(ライブラリ)の管理 
• phpでいうcomposer 
• rubyでいうbundler 
• jsだと他にもbowerというものがあるが、違いはクライアントサイドが 
bower, サーバーサイドがnpmくらいの理解で良いと思う。 
• 本番/テスト実行時のスクリプトを記述しておける。 
• プロジェクトのパッケージ情報の記述 
11
プラグインのインストール 
• プロジェクトでgruntを走らせるのに必要なもの 
をインストールする。 
以下は今回のサンプルで使うものをインストールしている 
$npm install --save-dev grunt grunt-contrib-concat grunt-contrib-uglify grunt-contrib- 
watch 
※--save-devオプションをつけるとpackage.jsonにプロジェクトに依存するモ 
ジュール情報をインストールと一緒に追記してくれる。 
12
プラグインのインストール 
• プロジェクトローカルにインストールしたモジュ 
ール(node_modules)は基本的にバージョン管理か 
ら外す。 
(package.jsonで依存モジュールを記述しているた 
め。) 
• package.jsonに追記された依存モジュールは以下 
のコマンドでインストールされる。 
$npm install 
13
プラグインのインストール 
• 今回インストールしたgrunt-contrib-○○系 
• grunt公式のプラグイン 
• その他にもgruntのプラグインはかなりの量があ 
る。(2014/10/22現在で3745個) 
http://gruntjs.com/plugins 
14
プラグインのインストール 
• 今回インストールしたプラグインの説明 
• grunt-contrib-concat : 複数ファイルの連結 
• grunt-contrib-uglify : ファイルのminify化 
• grunt-contrib-watch : ファイル監視(保存時に何かしらの処理を行う等) 
15
Gruntfile.jsの設定 
• Gruntfile.jsにはgruntで自動化したい処理(タスク) 
を記述していく。 
• http://gruntjs.com/getting-started 
上記ページのAn example Gruntfileを参考 
16
Gruntfile.jsの設定 
• 今回のサンプルコード 
https://github.com/duyoji/lt_grunt/blob/master/Gru 
ntfile.js 
17
Gruntfile.jsの設定 
• initConfig : タスク内容を記述 
• loadNpmTasks : gruntプラグインの読み込み 
• registerTask : タスクの登録 
18
Gruntfile.jsの設定 
• initConfig 
• githubのレポジトリに各プラグイン毎にタスクの書き方やオ 
プションなどが書かれているのでそちらを参考にする。 
• https://github.com/gruntjs/grunt-contrib-concat 
• https://github.com/gruntjs/grunt-contrib-uglify 
• https://github.com/gruntjs/grunt-contrib-watch 
19
Gruntfile.jsの設定 
• registerTask 
• default : gruntコマンドに引数を渡さなかったと 
きに実行されるタスクを記述 
• 引数あり: 引数と同じ名前のタスクが実行され 
る。 
今回のサンプルコードを例にすると以下のコマンドを実行するとconcatタ 
スクが呼ばれあとに、uglifyタスクが実行される。 
$ grunt build 
20
Gruntfile.jsの設定 
デモ 
https://github.com/duyoji/lt_grunt 
21
Grunt vs gulp 
• gulpとは 
• Gruntと同じタスクランナー 
• Gruntの後に作られた。 
• 以下を参考にすると良いかも。 
• http://lxyuma.hatenablog.com/entry/2014/05/25/162218 
• http://markdalgleish.github.io/presentation-build-wars-gulp-vs-grunt 
22
Grunt vs gulp 
• Gruntとの比較 
• メリット 
• 複雑なtaskも管理し易く、simpleで、使うのが簡単 
• 一時fileのdisk書き込みが無いので早くて能率的 
• simpleで期待通り動くようにPluginのGuidelineがある 
• APIが小さく学習時間かからない 
• デメリット 
• プラグインの数が少ない(gruntと比較して) 
• grunt : 3745個, gulp : 779個(どちらも2014/10/22現在) 
23
終わり 
24

More Related Content

What's hot

Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築
kamiyam .
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
 
早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]
Masayuki Maekawa
 
Gruntの罪と罰
Gruntの罪と罰Gruntの罪と罰
Gruntの罪と罰
kamiyam .
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Hiroyuki Kusu
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
CloudFoundryこと始め
CloudFoundryこと始めCloudFoundryこと始め
CloudFoundryこと始め
Naoto TAKAHASHI
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
Nobuhiro Nakashima
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
Hikari Fukasawa
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
Kazuto Kusama
 
Nodeについて
NodeについてNodeについて
Nodeについて
Natsuki Yamanaka
 
僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)
Yuta Nakano
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725
Masafumi Noguchi
 
月刊ライトニングトーク 2014/05 atom-shell を試してみた
月刊ライトニングトーク 2014/05 atom-shell を試してみた月刊ライトニングトーク 2014/05 atom-shell を試してみた
月刊ライトニングトーク 2014/05 atom-shell を試してみたSeiya Konno
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chef
Yukihiko SAWANOBORI
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Masafumi Noguchi
 

What's hot (20)

Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築Grunt.jsを使った Expressの開発環境構築
Grunt.jsを使った Expressの開発環境構築
 
Node.js Tutorial at Hiroshima
Node.js Tutorial at HiroshimaNode.js Tutorial at Hiroshima
Node.js Tutorial at Hiroshima
 
早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]早く家へ帰るための
Grunt入門
[+gulp紹介]
早く家へ帰るための
Grunt入門
[+gulp紹介]
 
Gruntの罪と罰
Gruntの罪と罰Gruntの罪と罰
Gruntの罪と罰
 
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
 
Node.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないときNode.js を選ぶとき 選ばないとき
Node.js を選ぶとき 選ばないとき
 
Node.js入門
Node.js入門Node.js入門
Node.js入門
 
CloudFoundryこと始め
CloudFoundryこと始めCloudFoundryこと始め
CloudFoundryこと始め
 
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js基礎の基礎 - Miyazaki.js vol.2
 
Node.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャーNode.jsでブラウザメッセンジャー
Node.jsでブラウザメッセンジャー
 
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudyPHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
PHP7を実際に動かしてみた@第96回PHP勉強会 #phpstudy
 
Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践Cloudn PaaSチームのChatOps実践
Cloudn PaaSチームのChatOps実践
 
Nodeについて
NodeについてNodeについて
Nodeについて
 
20131012 nodejs
20131012 nodejs20131012 nodejs
20131012 nodejs
 
僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)僕の考えた最強の開発環境(笑)
僕の考えた最強の開発環境(笑)
 
MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725MasterCloud Docker Hands-on 20170725
MasterCloud Docker Hands-on 20170725
 
月刊ライトニングトーク 2014/05 atom-shell を試してみた
月刊ライトニングトーク 2014/05 atom-shell を試してみた月刊ライトニングトーク 2014/05 atom-shell を試してみた
月刊ライトニングトーク 2014/05 atom-shell を試してみた
 
コンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chefコンテナ事例 CircleCI, Cucumber-Chef
コンテナ事例 CircleCI, Cucumber-Chef
 
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]Alibaba Cloud で Docker を動かしてみよう [Hands-on]
Alibaba Cloud で Docker を動かしてみよう [Hands-on]
 
20150523
 20150523 20150523
20150523
 

Similar to Grunt入門

今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeomantomo_masakura
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
npsg
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
KLab株式会社
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Shogo Kawahara
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
Db2 Warehouse Spark利用ガイド チュートリアル編
Db2 Warehouse Spark利用ガイド チュートリアル編Db2 Warehouse Spark利用ガイド チュートリアル編
Db2 Warehouse Spark利用ガイド チュートリアル編
IBM Analytics Japan
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
Yu Nobuoka
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
maebashi
 
Vue
VueVue
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929hiro345
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む2bo 2bo
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
ManaMurakami1
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
Tanaka Yuichi
 
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみたFuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみたtoshihirock
 
後期第二回ネットワークチーム講座資料
後期第二回ネットワークチーム講座資料後期第二回ネットワークチーム講座資料
後期第二回ネットワークチーム講座資料
densan_teacher
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
Tetsuo Yamabe
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計maebashi
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo LinuxについてTakuto Matsuu
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境
Tatsuya Sakai
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
 

Similar to Grunt入門 (20)

今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman今流行りのウェブアプリ開発環境Yeoman
今流行りのウェブアプリ開発環境Yeoman
 
ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!LL言語でもHudsonを使おう!
LL言語でもHudsonを使おう!
 
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
Db2 Warehouse Spark利用ガイド チュートリアル編
Db2 Warehouse Spark利用ガイド チュートリアル編Db2 Warehouse Spark利用ガイド チュートリアル編
Db2 Warehouse Spark利用ガイド チュートリアル編
 
はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入はてなにおける継続的デプロイメントの現状と Docker の導入
はてなにおける継続的デプロイメントの現状と Docker の導入
 
Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例Dockerの仕組みとIIJ社内での利用例
Dockerの仕組みとIIJ社内での利用例
 
Vue
VueVue
Vue
 
Nseg20120929
Nseg20120929Nseg20120929
Nseg20120929
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
「NVIDIA プロファイラを用いたPyTorch学習最適化手法のご紹介(修正版)」
 
Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!Gruntでjava script前作業の自動化!
Gruntでjava script前作業の自動化!
 
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみたFuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
FuelPHPのscaffoldで作成した画面をdotcloudにデプロイしてみた
 
後期第二回ネットワークチーム講座資料
後期第二回ネットワークチーム講座資料後期第二回ネットワークチーム講座資料
後期第二回ネットワークチーム講座資料
 
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
GMO プライベート DMP 開発で 取り組んできた DevOps と今後の展望
 
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
Fluentdでログを集めてGlusterFSに保存してMapReduceで集計
 
今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて今最もアツイdistribution Gentoo Linuxについて
今最もアツイdistribution Gentoo Linuxについて
 
AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境AzureDevOpsで作るHoloLensアプリCI環境
AzureDevOpsで作るHoloLensアプリCI環境
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 

Grunt入門