pecoで各プロジェクトのルートディレクトリを検索して、簡単に動作させるやつ


管理の面倒臭さと散らばってゆくファイルたち

Git
Vagrant
Docker
Gulp
Grunt
Chef
Guard
.
.
.

DevOpsやタスクランナーなどがフロントエンドやバックエンドエンジニアの中で流行っている昨今、いろんな場所にいろんなプロジェクトディレクトリが散らばってて管理に困ってませんか?

ぼくもそのひとりです。
いちいちそれぞれのプロジェクトのパスを覚えるのも面倒。。。

なので、この辺を参考にさせていただき、特定のファイルを検索して、各アプリの動作に簡単にアクセスするpeco。
http://d.hatena.ne.jp/syohex/20140729/1406648636
http://qiita.com/yungsang/items/e10ca283a1ceeaa845db

peco, peco, peco...

セットアップ

@yungsangさんのpeco-find-cdを少し拡張しつつちょっと変更して、関数内でpecoを二回使ってサービスを操作できるようにしました。

peco-find-cd-rev
peco-find-cd-rev() {
  local FILENAME="$1"
  local MAXDEPTH="${2:-5}"

  if [ -z "$FILENAME" ] ; then
    echo "Usage: peco-find-cd <FILENAME> [<MAXDEPTH>]" >&2
    return 1
  fi

  local DIR=$(find ~ -maxdepth ${MAXDEPTH} -name ${FILENAME} | peco | head -n 1)

  _action() {
    if [ ${FILENAME} = Vagrantfile ]; then
      pushd "$DIR"
      vagrant $(printf "up\nresume\nreload\nprovision\nssh\nshare\nstatus\nhalt\nsuspend\ndestroy"| peco --prompt='Action>')

    elif [ ${FILENAME} = Dockerfile ]; then
      pushd "$DIR"
      docker $(printf "start\nps\nimages\npause\nunpause\nstop\nrestart\nattach\nbuild\ncommit\ncp\ndiff\nevents\nexport\nhistory\nimport\ninfo\ninspect\nkill\nload\nlogin\nlogout\nlogs\nport\npull\npush\nrm\nrmi\nrun\nsave\nsearch\ntag\ntop\nwait"| peco --prompt='Action>')

    elif [ ${FILENAME} = gulpfile ]; then
      pushd "$DIR"
      $(printf "gulp\ngulp server\ngulp clean"| peco --prompt='Action>')

    elif [ ${FILENAME} = Guardfile ]; then
      pushd "$DIR"
      guard $(printf "start\nlist\nnotifiers\nshow"| peco --prompt='Action>')

    else [ -n "${FILENAME}" ];
      pushd "$DIR"
    fi
  }

  if [ -n "$DIR" ] ; then
    DIR=${DIR%/*}
    _action
  fi
}

使いかた

普通のpeco-find-cdとしても使えますが、特定のファイルを指定するとアクションを表示します。
現状は
peco-find-cd-rev Vagrantfile
peco-find-cd-rev Dockerfile
peco-find-cd-rev gulpfile
peco-find-cd-rev Guardfile
のコマンドに対応しています。
後は好きにエイリアス設定してください。

問題

Gitはコマンドが多すぎたのでまだ書いてません。必要に迫られたら書こうと思います。
ただあると楽なのは目に見えている。
これこそ「最初大変、後々楽」する典型ですね。
怠惰・短気・傲慢...

Dockerは普段使わないので、アクションの順番は適当かつ、そのままでは使えないコマンドもいくつか。。。
Dockerだけ、もう一段pecoをかませる必要がありそうです。
たぶん誰かやっていただけることでしょう。

あとはアクションをそれぞれのhelpから引っ張ってこれるようにしたら楽そう。
ソース自体のリファクタリングもできそうなのでどなたか。。。

オプションを付けると今のカレントディレクトリに戻ってくるようにしたかったですが、オプションの設定の仕方まで調べられなかったです。。。
あわせて誰か教えていただけると嬉しいです:)

随時更新予定です。

最近はpecoが流行り過ぎて、皆さんお辞儀ばっかしてますね〜