@ledsun blog

無味の味は佳境に入らざればすなわち知れず

My first grunt

grunt とは?

JavaScript開発でよく使うビルドツール。makeやrakeのJavaScript版です。 Grunt: The JavaScript Task Runnerにて公開されています。

どうやって使うの?

コマンドラインから操作します。Node.jsのパッケージマネージャ(npm)を使ってインストールします。

事前準備

Node.jsのインストール

Chocolatey

Chocolateyを入れてないなら、コマンドプロンプトで以下のコマンドを実行しましょう。

@powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%systemdrive%\chocolatey\bin

Node.js

続いて

cinst nodejs.install

ChocolateyでNode.jsをインストールするパッケージにはnodejsとnodejs.installがあります。 nodejsはNode.js本体のみインストールし、npm(node.jsのパッケージマネージャコマンド)をインストールしません。 nodejs.installを指定してください。

grunt-cliのインストール

npm install -g grunt-cli

コマンドプロンプトを管理者権限で起動していないと上手くいかないかもしれません。

動かしてみます

今回はgrunt-contribe-concatというgruntのプラグインを使用してファイルを結合します。

作業ディレクトリを作成

作業用ディレクトリを作成し、移動します。ここでは仮にgeorgesとしましょう。

mkdir georges
cd georges

packege.jsonの作成

package.jsonはnpm用のプロジェクト定義ファイルです。 Mavenのpom.xmlやbundlerのGemfileに相当します。

npm init 

を実行すると対話形式で作成できます。 今回はすべての問いにEnterのみで答えてデフォルトのファイルを作ります。

こんな感じです。

{
  "name": "georges",
  "version": "0.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "BSD-2-Clause"
}

インストール

プラグインをインストールします。

npm install grunt-contribe-concat

以下の警告が出ます。これらはプロジェクトの説明が不足しているため表示されています。gruntを動かすだけなら問題ありません。無視して進めます。

npm WARN package.json georges@0.0.0 No description
npm WARN package.json georges@0.0.0 No repository field.
npm WARN package.json georges@0.0.0 No README data

Gruntfile.jsを作成

Gruntの設定ファイルであるGruntfile.jsを作ります。

module.exports = function(grunt) {
    grunt.initConfig({
        concat: {
            dist: {
                src: ['ge.txt', 'or.txt', 'ges.txt'],
                dest: 'georges.txt',
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-concat');
};

initConfig の引数でタスクを指定します。 使用するプラグインをloadNpmTasksで読み込みます。

動かしてみる

作成したタスクを指定してgruntコマンドを実行します。

grunt concat

以下の表示が出れば成功です。

Running "concat:dist" (concat) task
File "georges.txt" created.

まだ結合する元ファイルが無いため作成されたgeorges.jsファイルは空です。

元ファイルを作成

結合元のファイルを用意します。UTF-8で作成しないと文字化けするので注意してください。

ge.txt

  _  ∩

or.txt

( ゚∀゚)彡 おっぱい!おっぱい!

ges.txt

 ⊂彡

もう一度実行

grunt concat

georges.txtの中身が次のようになっていれば成功です。

  _  ∩
( ゚∀゚)彡 おっぱい!おっぱい!
 ⊂彡

今回使用したファイル

今回使用したファイルはgithubに公開しています。

参考図書

WEB+DB PRESS Vol.77」に「Gruntでフロントエンド開発作業の自動化」という記事があります。

WEB+DB PRESS Vol.77