21世紀のターミナル「warp」のススメ

今回は21世紀のターミナルと謳われるターミナル「warp」を紹介します。


# warpとは

Rust言語製のターミナルです。
現在はmacOSのみ対応していますが、今後WindowsやLinuxにも対応するとのことです。

https://www.warp.dev/

## warpが開発された背景

なぜ今どきターミナル？と思われる方もいるかもしれませんが、warpの開発者いわく、

- コードエディターは（vscodeの登場などで）どんどん進化していっているが、一方でターミナルは1978年から大きな進化がないのが現状
- だからRustを使ってwarpでモダンなターミナルとして再開発をした

## warpの特徴

- 高速
- コードエディターのような使用感（コード補完ならぬコマンド補完など）
- コマンドがブロック単位になっており、コピペが楽
- 豊富なコマンドパレット

# warpのインストール

使わないことには特徴のスゴさが理解できないので、早速インストールしていきましょう。

## 動作確認環境

MacBook Pro (13-inch, M1, 2020) 
macOS Monterey 12.1

## インストール手順

インストールは公式サイトの「Download Now」を押下するか、Homebrewがインストール済みの場合は下記コマンドを叩くことで出来ます。 

```bash
brew install --cask warp
```

~~現状warpの規約上、使用開始前にGitHubでのSign upを求められるので、GitHubアカウントが必須です。~~
GitHub/Googleアカウント/メールアドレスでのSign upが必要です。

※GitHubでのSign upしか出来なかった頃のスクリーンショット

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/f8f13741-6dac-cdc9-9d76-95917415e276.png)

Sign upを終えるとwarpが使用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/6b268ad9-31d7-e579-79e7-68ae6d9d23d2.png)

# Command Paletteについて

cmd+pを押下すると、Command Paletteが開けます。
ここでは使用可能なショートカットキー一覧が確認できます。起動中はいつでも開けるのでショートカットどんなのがあるんだろう？、どんなんだったっけ？って思ったら開いてみましょう。

検索ボックスでキーワードを入力することで

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/813fb9ef-ca16-6364-429d-2ecba3b11a5c.png)

# Search Commandsについて

control+rを押下すると、Search Commandsが開けます。
ここでは以下の3項目が確認できます。

1. History Search
2. Workflows
3. A.I Command Search

## History Search

ここではwarp含めターミナルで入力した履歴が表示できます。かなり過去のものまで表示されるので便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/3a6ccbe4-87d3-e3ac-12a4-8ca1a186a078.png)

## Workflows

warpの目玉機能のその1。よく使われるコマンドについて、ユーザーがよく使うであろうコマンドを確認することが出来ます。

例えば、gitはこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/fdcc06dd-7a65-b625-b0ce-40e238c6b522.png)

npmの場合はこんな感じ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/f58c2b30-bfc3-29ab-513c-32e63faa5b79.png)

Workflows一覧はここのページで確認可能です。

https://www.commands.dev/

まだコマンドによっては数は多くない感は否めないので、今後の追加アップデートに期待です。


## A.I Command Search

warpの目玉機能のその2。AIによって「こんなことしたいけど、コマンドでどう打てばいいのかな…？」を叶えてくれる優れものです。
例えば、「temp」というフォルダを作るコマンドが知りたいなら「Make a folder called 'temp'」と入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/9a294c0c-f45f-ec35-8b77-6e745f8514cf.png)

すると、`mkdir temp`のコマンドが提案されて、cmd+EnterまたはInput Commandボタンを押下するとターミナルで貼り付けられます（実行まではされないのでご安心ください）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/bc9f0e5e-3872-b22d-3fbf-804fa7c0586a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/4ddc5d27-2db8-dda3-9876-45c84bbc3c90.png)

ちなみに日本語で入力しても問題なく使えるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/2f257906-5552-6585-2a26-46b1e74f24f2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/78b8d2c7-4710-5a99-95e9-fd640f1aa541.png)


ちなみに、OpenAIの規約に沿ってここで打ち込まれた内容は**全てデータ収集用に収集されている**ため、業務で使用される際はご注意ください。

https://docs.warp.dev/features/ai-command-search#privacy

# コマンド補完について

warpの目玉機能のその3。
例えば、`yarn`と打ってみましょう。

すると、入力履歴に沿って、`yarn -v`が使えることを教えてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/48b6c6d3-0373-463f-92af-cac8df3de69b.png)

また、現在のディレクトリのpackage.jsonが以下の内容だったとします。

```json:package.json
{
  ...
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "test": "jest",
    "test:watch": "jest --watch",
    "prepare": "husky install"
  },
}
```

それでは、warpの方に戻ってみましょう。ここでtabキーを入力します。

yarnで使える標準コマンド＆package.jsonで記載したnpm scriptsの一覧が一緒に表示されます。説明まで一緒に載せてくれるので便利です（今後オプションコマンドまで教えてくれるようになれば嬉しいなぁ）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/919803/6bd4cf8e-2992-c064-0c56-e3124c168925.png)

# 最後に

warpの特徴を一通り紹介したところで今回は以上です。
今まで標準のターミナルで満足していた方も、ぜひこの機会にwarpに移行してみるのもどうでしょうか？

紹介出来なかった箇所も多々あるので、気になる方は下記ページを見てみてください。

https://docs.warp.dev/

https://dev.classmethod.jp/articles/warp-terminal/