[Warp] workflowを作ってみる

2022.04.19

Introduction

先日、次世代terminal、Warpについての記事を書きました。
ここでworkflowについても少し説明しているのですが、
試しにつくってみたのでその紹介をします。

workflow of Warp

Warpが持つ機能のworkflowは、Warp内で任意のコマンドを実行して共有するための機能です。
複数コマンドをまとめたりパラメータ化でき、検索や共有も可能です。
workflowはyaml形式で決められた場所においておけば簡単に使えます。

ここに詳細がありますが、
workflowには、ローカルworkflowとプロジェクトworkflowの2種類があります。
ローカルのほうは自分だけが使用できるworkflowで、
特定の場所にworkflow用の定義ファイルを
置けば使用できます。
プロジェクトのほうは特定のGitリポジトリに関連付けられ、
そのリポジトリをcloneした人は誰でも使用できます。
※今回ためすのはローカルworkflow

workflowの定義はシンプルです。
例えば、↓のyamlはechoで文字列を2回出力するworkflowです。

---
name: Greet
command: "echo {{message}},taro!\necho {{message}}, hanako!"
tags:
  - echo
description: "Greetings to taro and hanako."
arguments:
  - name: message
    description: Message
    default_value: ~
author: nakamura shuta
author_url: "https://dev.classmethod.jp/author/syuta/"
shells: []

commandパラメータに実行したいコマンドを記述します。
複数ある場合は\nで区切ってコマンドをつなげます。

↑のyamlを~/.warp/workflowsにコピーすれば使えます。
control + Shift + R (Rは少し長押し)で、
workflowメニューにアクセスできます。

create scp workflow

ではもう1つworkflowを作ってみましょう。
scpで複数のhostからファイルを取得するworkflowを作成してみます。

まずはworkflowのファイルを置くためのディレクトリを作成。

% mkdir -p ~/.warp/workflows

次にyaml形式でworkflowの定義を記述します。
定義ファイルの書き方はこちら
ここではmy-workflow.yamlという名前で↓のように定義しました。

---
name: Get files via scp
command: "scp cm@host1:{{remote_file_path}} host1_{{local_file_name}}\nscp cm@host2:{{remote_file_path}} host2{{local_file_name}}\nscp cm@host3:{{remote_file_path}} host13_{{local_file_name}}"
tags:
  - git
description: "Get file from multiple hosts via scp."
arguments:
  - name: remote_file_path
    description: The name of the remote file path
    default_value: ~
  - name: local_file_name
    description: The name of the local file name
    default_value: ~
author: nakamura shuta
author_url: "https://dev.classmethod.jp/author/syuta/"
shells: []

ここではscpコマンドを3つ繋げて記述し、
host1/host2/host3から指定したファイルを取得します。
※パラメータは {{hogehoge}} という形式で設定可能

yamlファイルをコピーします。
これでWarpからworkflowが使えます。

% cp ./my-workflow.yaml ~/.warp/workflows

ではworkflowを呼び出してみましょう。
control + Shift + R を押します。

My Workflowsのところを選択するか、
キーワード(scpとか)を入力すると、
さきほど作成したワークフローが表示されます。
workflowを選択したらShift + TABでパラメータを選択しながら
ファイルパスと取得ファイルの名前を指定します。

実行すると各コマンドの結果がブロック毎に出力されます。

Summary

シェルをわざわざかくほどでもないけど、
いちいち実行するのが面倒な処理とかはworkflowがちょうどよいかもしれません。
ここにはお手本になりそうなworkflowの定義があるので
参考にしてみてください。