THINKING MEGANE

[Ruby] ThorでWebAPIサービスを立ち上げるGem"トールハンマー"をつくった

コマンドラインツールをつくって、もっと多くのひとに気軽に利用してもらいたいとき、Webアプリとして作りなおすのが面倒だなーと思うことがあります。

コマンドラインツールをそのままWebアプリとして使えるようにする仕組みが欲しくて、そんな Gem、ThorHammerトールハンマーをつくりました。

Thorって?

Thor(トール、ソー、雷神)はRubyでコマンドラインツールをかんたんにつくるためのGemです。

ThorHammerって?

ThorHammerはThorでつくったCLIをWebAPIにするGemです。

マイティー・ソーが武器のハンマーをつかって、雷を広げて攻撃するように、ThorでつくったCLI機能をWebに広げるGemです。※1

Thor Hammer

どう使うの?

ThorHammerは、RailsアプリとしてWebAPIを公開します。

インストール

Railsのプロジェクトを作成して、Gemfileに以下を追記します。

gem 'thor_hammer'
gem 'Your Thor CLI' # WebAPIとして公開するThorのCLI

あとはbundle installでOKです。

ジェネレータ

ThorHammerは、WebAPIを作成するためのジェネレータを提供します。

$ rails g thor_hammer:api ThorCliのクラス名 公開APIのパス

引数に指定する値は以下を参考にしてください。

ThorCliのクラス名

第一引数は、Thor CLI の起点となるクラス名を指定します。 起点となるクラス名は、Thor を継承したクラスとして作成されているはずです。 また、モジュール名も必要になります。

以下のような Thor CLI の場合、SampleThorCli::Runnerを指定します。

module SampleThorCli
  class Runner < Thor
    # 中略
  end
end

公開APIのパス

第二引数は、WebAPIの公開時のパスを指定します。 省略時は、第一引数をunderscoreしたものが適用されます。

  • 省略時

rails g thor_hammer:api SampleThorCli::Runner => http://hostname/sample_thor_cli/runner

  • 指定時

rails g thor_hammer:api SampleThorCli::Runner api => http://hostname/api

アクセス

以上で、あなたのThor CLI がWebAPIとして公開する準備が整いました。 rails serverでRailsアプリを起動し、アクセスしてください。

$ curl http://hostname/api/subcommand/arg1,arg2

CLIとして利用した場合と同じ結果をそのまま取得することができます。(JSON, XML形式への対応は今後予定)

subcommand

サブコマンドは、あなたのThor CLIのサブコマンドを指定します。

arg1,arg2

サブコマンドに引数があれば、指定することができます。 引数が複数の場合は、,を間に挟んで指定します。

今はThor限定ですが、Rakeタスクなんかもできるようにして、CIと組み合わせると面白くなるかも。

※1. はい、もちろん後付けです。

このエントリーをはてなブックマークに追加