DRYな備忘録

Don't Repeat Yourself.

jsプロジェクトのメタファイルが多すぎてウザいのでchestというのを使ってみたメモ

メタファイルが多すぎる

TypeScriptに限った話ではないのだけれど、JavaScript関連のプロジェクトつくってるとパッケージ管理などを定義するメタファイルがトップディレクトリに散乱することになる。たとえば

ここの

  • bower.json
  • Gruntfile.coffee
  • testem.json

あたりがそれ

chestというのがあるっぽい

The easy metafile manager

とのこと

インストール

% npm install -g chest
% which chest
/Users/otiai10/.nvm/v0.11.9/bin/chest

つかってみる

% chest put bower.json
[?] Add bower.json to gitignore on the project root: Yes
% rm -rf bower_components
% git status
On branch freeze/try-chest
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   .gitignore
        deleted:    bower.json

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        .chest/

no changes added to commit (use "git add" and/or "git commit -a")
%

これでbower.jsonがchestの中にしまわれた状態。これを取り出して実行までしようと思ったら

% chest boost
stdout: bower showv#0.3                 cached https://github.com/otiai10/showv.git#0.3
bower showv#0.3               validate 0.3 against https://github.com/otiai10/showv.git#0.3
bower jquery#1.10.1             cached git://github.com/jquery/jquery.git#1.10.1
bower jquery#1.10.1           validate 1.10.1 against git://github.com/jquery/jquery.git#1.10.1
bower handlebars#1.0.0          cached git://github.com/components/handlebars.js.git#1.0.0
bower handlebars#1.0.0        validate 1.0.0 against git://github.com/components/handlebars.js.git#1.0.0
bower showv#0.3                install showv#0.3
bower handlebars#1.0.0         install handlebars#1.0.0
bower jquery#1.10.1            install jquery#1.10.1

showv#0.3 bower_components/showv

handlebars#1.0.0 bower_components/handlebars

jquery#1.10.1 bower_components/jquery

stderr: -----------------------------------------
Update available: 1.3.3 (current: 1.2.7)
Run npm update -g bower to update
-----------------------------------------

おお、いけてるぽ。

他にもしまってみる

% chest put testem.json
[?] Add testem.json to gitignore on the project root: Yes
% chest put Gruntfile.coffee
[?] Add Gruntfile.coffee to gitignore on the project root: Yes
% chest boost
File already exist: bower.json
stdout:
stderr:

アーハン

つまり

  • chest put すると.chestディレクトリ以下にしまわれる
  • chest openとかするとあるべき場所にシンボリックリンクが置かれる
  • chest boostすると、さらにbower installとかが走る

ということっぽい?

まとめ

結局こういう感じになりました

ちょっとハマったのは、Gruntfileとかをgit rm --cachedしなかったので、travisサーバでchest boostが実行されたときにalready existsかなんかでシンボリックリンク貼れてなかったりしました。

雑感

とりあえず使ってみた感

pic