コンテンツにスキップ

Yeoman

初めてのYeoman (Grunt/Bowerとは)

初めてのYeoman というタイトルでこれまで2つのエントリを投稿しました。

ここであらためて Grunt と Bower について書いておきます。

特に技術的なことはないです。

Grunt とは

The JavaScript Task Runner

と公式サイトに書いてある。一言で言うと自動化、とも。

要するに予め決められたタスクをその通りに実行してくれるツールである。 (似たようなツールとして make や rake を使ったことがある)

そして js 界隈で話題のツールやプラグイン、フレームワークがどんどん移り変わって行くのと同様に Grunt も gulp にとって変わられると話題になっている。

しかしこれは自分でやりたいことを自動化したい場合の話であって、何か自分のやりたいことを他の人がやっていたら素直にその人の作ったタスクを使わせてもらえば良いわけである。

(そういう意味で他の人が作った設定に多少手を加えられるほどの理解はあると嬉しいかもしれないが、それは必要になったときで良い)

つまり Grunt でも gulp でも、自分がやりたいことを他の人が既にやっていればそれに乗っかれば良いし、他の人がまだやっていなければ、その時点で自分が一番書きやすい方法をつかって自動化すれば良い。

問題は自分にやりたいこと(自動化したいこと)があるかどうかであって、自分が自分以外の何者でもない以上、それはあるはずで、それに気づいてないとか、考え続けられないから僕はまだまだ三流以下ということなんですね。

Bower とは

フロントエンドのパッケージマネージャーで

  • cpan(perl)
  • gem(ruby)
  • Node.js(npm)

みたいなものだと理解している

使い方も対して変わらないですね

Yeoman

ここまで Yeoman を見てきて Yeoman の要は yo のように思える

使う側の立場では雛形(generator)を選んで yo を実行したらやりたいことは既に決まっている

作る側としては最終的にどんな雛形を作るかが問題である

ここで雛形のルール(設定)を Grunt で規定し、フロントエンドを Bower で規定することをルールとしたら雛形もまとめやすいよね、ということか

最後に

なんだか雑なエントリになってしまった。。。

まずは Yeoman の恩恵をもっと受けまくってみます

参照

初めてのYeoman (Grunt/Bowerを使ってみる)

以前のエントリ 初めてのYeoman (Yoを使った雛形作成)yo を使い generator-angular-fullstack の雛形を作りました。

今回はこのとき作った雛形を Grunt を使って実際に動かしてみたいと思います。

Gruntがどんなものかはとりあえず使ってみてからと言うことで。

Grunt のインストール

npm でインストールする

$ npm install -g grunt-cli

インストールされたことを確認

$ grunt --version
grunt-cli v0.1.13
grunt v0.4.5

OK.

Grunt / Bower の実行

インストールできたら早速 Grunt を実行してみる

今回は雛形作成時に生成された Gruntfile.js で規定されている serve タスクを実行する

$ grunt serve
Running "serve" task

Running "clean:server" (clean) task

Running "env:all" (env) task

Running "injector:sass" (injector) task
Missing option `template`, using `dest` as template instead
Injecting scss files (4 files)

Running "concurrent:server" (concurrent) task
    Warning: Running "sass:server" (sass) task
    Warning: 
    You need to have Ruby and Sass installed and in your PATH for this task to work.
    More info: https://github.com/gruntjs/grunt-contrib-sass
     Use --force to continue.

    Aborted due to warnings.
...

何やら怒られた

You need to have Ruby and Sass installed and in your PATH for this task to work.

ということだそうなので Sass をインストールする。

$ yum install rubygems
$ gem install sass

もう一度トライ

$ grunt serve
Running "serve" task

Running "clean:server" (clean) task

Running "env:all" (env) task

Running "injector:sass" (injector) task
Missing option `template`, using `dest` as template instead
Injecting scss files (4 files)
>> Nothing changed

Running "concurrent:server" (concurrent) task
    Warning: Error: File to import not found or unreadable: bootstrap-sass-official/vendor/assets/stylesheets/bootstrap.
           Load paths:
             /home/sojiro/yeoman/angular_fullstack/client/bower_components
             /home/sojiro/yeoman/angular_fullstack/client/app
             /home/sojiro/yeoman/angular_fullstack/client/components
            on line 4 of client/app/app.scss
      Use --trace for backtrace. Use --force to continue.

        Aborted due to warnings.
...

また怒られた

Warning: Error: File to import not found or unreadable: bootstrap-sass-official/vendor/assets/stylesheets/bootstrap.

今回のエラーはよくわからなかったので少し調べると、 Yeoman 三種の神器の三つ目、 Bower が必要らしいのでインストールする

$ npm install -g bower
$ bower -v
1.4.1

雛形作成時に bower.json が生成されているのでここに記述されているパッケージをインストール

$ bower install

そして再度実行

$ grunt serve
Running "serve" task

...

Running "open:server" (open) task
Warning: Command failed: /home/sojiro/yeoman/angular_fullstack/node_modules/open/vendor/xdg-open: line 584: xdg-mime: コマンドが見つかりません
xdg-open: no method available for opening 'http://localhost:9000'
 Use --force to continue.

Aborted due to warnings.

...

また怒られる

Warning: Command failed: /home/sojiro/yeoman/angular_fullstack/node_modules/open/vendor/xdg-open: line 584: xdg-mime: コマンドが見つかりません

xdg-open は引数に受け取ったものをよしなにアプリケーションを選択して開いてくれるコマンドらしい(未検証)

このコマンドが、指定されたオブジェクトを適切なアプリケーションで開くために mime タイプを取得するとき、 xdg-mime コマンドを使用するようである

今回は xdg-open URL とすることで指定したURL(localhost)をブラウザで開こうとしているようである

そもそもここで使っているサーバーはブラウザが入っていないリモートのサーバーなので、該当タスクをコメントアウトする。また、サーバーのURLもIPアドレスで指定するように設定ファイル(Gruntfile.js)を変更する。

$ vim Gruntfile.js
    grunt.task.run([
      'clean:server',
      'env:all',
      'injector:sass', 
      'concurrent:server',
      'injector',
      'wiredep',
      'autoprefixer',
      'express:dev',
      'wait',
//      'open',
      'watch'
    ]);
  });
    open: {
      server: {
        //url: 'http://localhost:<%= express.options.port %>'
        url: 'http://xx.xxx.xxx.xxx:<%= express.options.port %>'
      }
    },

そしてまたまた実行

$ grunt serve
Running "serve" task

...

Running "watch" task
Waiting...

動いた!!

雛形の動作確認

watch タスクまで問題なく進んだので早速ブラウザからアクセスしてみる

上記で Gruntfile.js に設定したアドレスにアクセスする。ポートは 9000番。

雛形アプリケーションのトップが表示された

{% img /images/angular_fullstack/top.png %}

Sign up 画面なども用意されている

{% img /images/angular_fullstack/sign_up.png %}

つづく

今回は何も考えずに Grunt と(はからずも)Bower を使ってみた。

それぞれがどのようなツールなのか次回はまとめてみたい。

参照

初めてのYeoman (yoを使った雛形作成)

前回 ‘Hubot –create’ は古い というエントリでYeomanを試してみたいと宣言したので試してみます。

Yeoman は以下の3要素で構成されているそうな

  • yo: 雛形作成ツール
  • Grunt: タスクランナー
  • Bower: フロントエンドパッケージマネージャ

今回は前回に引き続き yo を使ってみたいと思います。

前提としては yo をインストール済みであること。

$ npm install -g yo

また、 yo は npm のバージョン2.1.0以上が推奨なので必要に応じて npm もアップデートします。

npm update -g npm

generator-angular-fullstack を使ってみる

今回 yo で作成する雛形として generator-angular-fullstack を使ってみる

generator-angular-fullstack は MEAN なアプリケーションの雛形で、使い勝手が良いという噂

早速インストール

$ cd yeoman/angular_fullstack
$ npm install generator-angular-fullstack

インストールできたので実行してみる

$ yo angular-fullstack
     _-----_
    |       |
    |--(o)--|   .--------------------------.
   `---------´  |    Welcome to Yeoman,    |
    ( _´U`_ )   |   ladies and gentlemen!  |
    /___A___\   '__________________________'
     |  ~  |
   __'.___.'__
 ´   `  |° ´ Y `

Out of the box I create an AngularJS app with an Express server.

# Client

? What would you like to write scripts with? JavaScript
? What would you like to write markup with? HTML
? What would you like to write stylesheets with? Sass
? What Angular router would you like to use? uiRouter
? Would you like to include Bootstrap? Yes
? Would you like to include UI Bootstrap? Yes

# Server

? Would you like to use mongoDB with Mongoose for data modeling? Yes
? Would you scaffold out an authentication boilerplate? Yes
? Would you like to include additional oAuth strategies? Google, Facebook, Twitter
? Would you like to use socket.io? Yes

雛形作成を実行するといくつかインタラクティブに聞かれるので答える

今回は基本的に Yes と答えてみた

実行が終わると雛形ができていた

$ ls
Gruntfile.js  bower.json  client  e2e  karma.conf.js  node_modules  package.json  protractor.conf.js  server

つづく

次回は grunt を使って実際にアプリケーションを動かしてみる

参照

'hubot --create' は古い

このブログで過去に何度かHubotについて書いたときに、新しいbotを作るときのコマンドは hubot --create bot_name だったのですが、このコマンドが非推奨になったようなのでメモ。

hubot --create が使えない

新しいbotを作ろうとして hubot --create コマンドを打つと以下のように怒られた

$ hubot --create test_bot
'hubot --create' is deprecated. Use the yeoman generator instead:
    npm install -g yo generator-hubot
    mkdir -p test_bot
    yo hubot
See https://github.com/github/hubot/blob/master/docs/README.md for more details on getting started.

ところがseeとなっているREADMEファイルは存在しない模様...

yo と generator-hubot とは何か

よくわからないが yogenerator-hubot をインストールしろと言われているのはわかるので調べてみる

yo と generator-xxx

yoはYeomanというGoole社が開発した統合開発ツール群に属するツールの一つで、「雛形作成ツール」であるらしい

そしてその雛形は "generator-xxx" という形でさまざま用意されており、そのHubot版が generator-hubot と言う訳である

つまり上記エラーメッセージは

  • 雛形作成ツールである yo と、Hubotの雛形である generator-hubot をインストールし
  • 新規ディレクトリ上で yo を実行してHubotの雛形を作るべし

ということのようである

yo と generator-hubot のインストール

指定された通り以下のようにインストールする

$ npm install -g yo generator-hubot

(余談:私の場合はNode.jsのインストールされたpathとnpmのrootが違っていたため少々上手くいかなかった。エラーメッセージは素直によく読むべきだ。。。)

yo の実行

インストールが成功したら、新しいbotのディレクトリを作ってそこで yo を実行する

$ mkdir test_bot
$ cd test_bot
$ yo hubot  # これは generator-hubot の雛形を作る、という意味

yo hubot を実行するとHubotのAAが表示され、いくつかのやり取りが立ち上がる

$ yo hubot
                     _____________________________  
                    /                             \ 
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             / 
 ======= |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|                            

? Owner: sojiro
? Bot name: slack-test-bot
? Description: Slack Bot test
? Bot adapter: (campfire) slack
? Bot adapter: slack
   create bin/hubot
   create bin/hubot.cmd
   create Procfile
   create README.md
   create external-scripts.json
   create hubot-scripts.json
   create .gitignore
   create package.json
   create scripts/example.coffee
   create .editorconfig
                     _____________________________  
 _____              /                             \ 
 \    \             |   Self-replication process   |
 |    |    _____    |          complete...         |
 |__\\|   /_____\   \     Good luck with that.    / 
   |//+  |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|      
...
...

各項目それぞれデフォルト値が設定されており、なにも入力せずEnterを押していくとその通りになる

今回はSlack用のbotだったので Bot adapter: の欄で slack と入力した

他にも用途に合わせてadapterが用意されているようである

この yo 実行により、Hubotの雛形が作成され、 hubot --create と同様にセットアップが完了する

なおかつadapterを予め設定できる分、セットアップが楽になっている

最後に

今回はHubotに絡んで偶発的に yo を知りましたが、かなり便利そうなのでYeoman含めて今後も使ってみたいところです

参照