🚇

cmdw: ローカルマシンのコマンドをHTTP経由で外から実行できるようにする

2023/03/13に公開

こんな状況に簡易的に対応できるcmdwというコマンドを作りました。

  • 便利コマンドを作ったので試してみてほしい
  • しかし、そのコマンドは他の人が実行するのが難しい・面倒
  • そこで、自分のマシンにブラウザでアクセスしてもらって、そのコマンドを叩けるようにしたい
  • でも、コマンド側に変更を加えたくない

https://github.com/kentaro/cmdw

具体的なユースケース

先日「ChatWP: WordPressをAI化しておしゃべりする」に書いた通り、ChatWPというものを作りました。社内の人に「こんな感じ」というのを、実際触ってみて体験してほしいのですが、このコマンドを実行するのは以下の点で面倒です。

  • OpenAIのAPIキーを準備する必要がある
  • Pythonの実行環境を用意しなければならない
  • WordPressのインデックスを作る必要があり、時間がかかる
  • WordPressのユーザとしてAPIにアクセスできるようアカウントを発行してもらわないとならない

そこで、cmdwで自分のマシンにHTTP経由でアクセスして、コマンドを実行してもらうとよいでしょう。

こういうツールはすでにあるんじゃないかと思いますが、見つからなかったのとサクッと書けそうだったのとで、自作しました。

使い方

ChatpWPのケースをもとに説明します。ChatWP自体は、ローカルマシン上でちゃんと動かせる準備をしてある前提です。

以下のようにして、ChatWPのリポジトリに移動したあと、cmdwコマンドを実行します。

cd /path/to/chatwp
cmdw --command python --addr 0.0.0.0 --port 8082

すると、Webサーバが起動するので、http://localhost:8082へアクセスしてみましょう。フォームに引数を渡してsubmitすると、コマンドの出力結果が表示されます(コマンドの標準出力への出力が表示されます)。

外部からアクセスできるようにする

同一LAN内にいない人にも試してもらいたいことがあるかもしれません。外から繋げるよう、トンネルを掘りましょう。やり方はいろいろありますが、cloudflaredを使うのが簡単です。

Macの場合、homebrewで、以下の通りインストールできます。

brew install cloudflared

以下の通りcloudflaredを実行すると、先ほど起動したcmdwに、グローバルにアクセスできるようになります。URLが発行されるので、コマンドを実行してもらいたい人にシェアしてください(以下のコマンドの出力は、URL部分をマスクしています)。

cloudflared tunnel --url http://localhost:8082
2023-03-13T11:16:33Z INF Thank you for trying Cloudflare Tunnel. Doing so, without a Cloudflare account, is a quick way to experiment and try it out. However, be aware that these account-less Tunnels have no uptime guarantee. If you intend to use Tunnels in production you should use a pre-created named tunnel by following: https://developers.cloudflare.com/cloudflare-one/connections/connect-apps
2023-03-13T11:16:33Z INF Requesting new quick Tunnel on trycloudflare.com...
2023-03-13T11:16:34Z INF +--------------------------------------------------------------------------------------------+
2023-03-13T11:16:34Z INF |  Your quick Tunnel has been created! Visit it at (it may take some time to be reachable):  |
2023-03-13T11:16:34Z INF |  https://******************.trycloudflare.com                                     |
2023-03-13T11:16:34Z INF +--------------------------------------------------------------------------------------------+

この件は、以下のツイートで知りました。

https://twitter.com/wesbos/status/1634310926219333642

注意事項

cmdwは、信頼できる人々との間で、簡易的に使うためのコマンドです。当然ですが、誰からでもアクセスできる状況では使わないようにしましょう。

Discussion