Kentaro Kuribayashi's blog

Software Engineering, Management, Books, and Daily Journal.

façadeでGitのようなサブコマンドをディスパッチする

Gitには、git fooと実行すると、$PATH内のgit-fooを実行するというサブコマンドの機能がある。そのため、その規約に則りさえすれば、Gitのサブコマンドをいろんな言語で書けるというメリットがある。それを簡単に実現するために、façadeというごく単純なライブラリを書いた。

使い方

これを使うと以下のように書くだけで、コマンド名がyour-commandだったとして、your-command foo bar bazと実行すると、your-command-foo bar bazという呼び出しに変わる。

package main

import (
    "github.com/pepabo/facade"
)

func main() {
    facade.Run()
}

なぜ作ったか

ある目的に利用するツール群があるとして(たとえばEC2を操作するような各種コマンド群)、以下のような問題を解消するためである。

  1. ひとつの言語に限らず、実装する人々が得意な言語によって、それらのツールを書きたい
  2. しかし、それらがフラットな名前でだらだらーっとあると、見た目に悪い感じがする
  3. また、どのツールでも使うような、たとえば色付けされたロギングだとかそういうのを提供する際に、各コマンドでいちいち実装していると統一感がなくてよくない

そのため、入り口 = dispatcherのみを提供するライブラリとしてfaçadeを作った。これにより、統一的な名前、機能を提供できるようになった。