AI搭載Rust製ターミナルWarpを使ってみた

# Warpとは

https://www.warp.dev/

Rust製のTerminal代替アプリ。現状、Macのみ対応となる。(Windows, Linuxは対応中)
軽くて、高速。そして、AIが搭載されている。個人利用/5人以下のチームの場合は、無料で使用可能。

# Warpの特徴

## Warp AI

Warp内で簡単に生成AIを使用することができる。
プロンプト入力時に`#`を入力すると使用できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/b583aaec-99c9-7adf-995d-fb95dfc170db.png)

## カスタマイズが楽

いちいちスクリプトを触らんなくても、設定で見た目のカスタマイズができる。
テーマやフォントもデフォルトで複数入っている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/b733965d-c0ed-766c-dea7-e65160d90e4f.png)

## 補完機能が優秀

ディレクトリ名などの補完機能はもちろん、`git push`した後にPRの作成画面をopenするコマンドまで予測してくれるのが、便利すぎる。

## Warp Drive

Warp Drive は、コマンドをワークフローとして安全に保存および共有できる機能。
以下のようによく使うコマンドをワークフローとして登録できる。(個人的にはあんまり使ってない)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/0f946323-d81b-c132-7b6b-a819ff6c037f.png)

# 使い方

## インストール

brewでインストールする。

```shell
brew install --cask warp
```

ダウンロードできたら、アプリを起動してサインアップする。


## アップデート

アップデートは、上に通知がくるので、それをクリックするだけで、アップデートができる。

![スクリーンショット 2024-02-02 10.03.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/9cb0d2f2-64b9-04b1-d592-2bb83efb951e.png)


## テーマ

settings > appearance > Themesでテーマを変えられる。
もしくは、`cmd+control+T` でテーマの変更ができる。

## カスタムテーマ

### 自分の画像から自動作成する

`cmd+control+T`から以下の左上の`+`を押すと、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/24a6e9e7-950b-d207-dcb6-c2a5329df083.png)

好きな写真を選択すると、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/5d4c054c-6982-295f-ba5b-efa9b58cb60f.png)

bgグラウンドカラーとテーマ名を変更するだけで独自のカスタムテーマを作成できる。

### Yamlで独自のカスタムテーマを作成する

https://docs.warp.dev/appearance/custom-themes

```shell-session
$ mkdir -p ~/.warp/themes/
$ cp ~/Downloads/sample_theme.yaml ~/.warp/themes/
```

:::note warn
warpに反映されるまで少々時間がかかるらしい
:::


```yaml:sample_theme.yml
accent: '#268bd2' # WarpのUIハイライトの色
background: '#002b36' # 背景色
details: darker # ライトカラーかダークカラーか
foreground: '#839496' # foregroundの色
terminal_colors: # ANSIエスケープシーケンス
  bright:
    black: '#002b36'
    blue: '#839496'
    cyan: '#93a1a1'
    green: '#586e75'
    magenta: '#6c71c4'
    red: '#cb4b16'
    white: '#fdf6e3'
    yellow: '#657b83'
  normal:
    black: '#073642'
    blue: '#268bd2'
    cyan: '#2aa198'
    green: '#859900'
    magenta: '#d33682'
    red: '#dc322f'
    white: '#eee8d5'
    yellow: '#b58900'
```


以下のサイトはterminalのrgbカラーを作成するツールである。

https://terminal.sexy/ 


先ほどのyamlファイルに以下を追記すると背景画像の設定や透過ができるようになる。

:::note warn
現状jpg形式しか対応していない
:::

```yaml:sample_theme.yml
############################################################### SEE BELOW
background_image:
  # 背景画像のパスの設定(jpgのみ)
  path: warp.jpg
  # 背景の透過率の設定
  opacity: 60
############################################################### SEE ABOVE
```

accentにグラデーションカラーを使用する場合は以下のようにすると、上から下にグラデーションになる。

```yaml:sample-theme.yml
accent:
  top: '#abcdef'
  bottom: '#fedcba'
```

また、横にグラデーションをかけることもできる。

```yaml:sample-theme.yml
accent:
   left: '#abcdef'
   right: '#fedcba'
```

背景のグラデーションは以下のようにする。

```yaml:sample-theme.yml
background:
  top: '#474747'
  bottom: '#ffffff'
```

様々なテーマのyamlファイルは以下のリポジトリに載っている。

https://github.com/warpdotdev/themes

## カスタムプロンプト

Warpには[Warp prompt](#warpprompt)と[Shell prompt](#shellprompt)の2つのプロンプトを選択できる。
`Settings > Appearance > Prompt`で選択できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/e5190d9e-dc78-271d-5fc8-5424a2514460.png)


### Warp prompt

Warp promptを使うとドラッグだけで簡単にプロンプトを設定できる。
gitのブランチなど表示させたいが、色などに特にこだわりがない場合はこちらがオススメ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/28bef6ab-75fa-c66e-5743-bb75ab377a08.png)

### Shell prompt

shell promptとは 環境変数`PS1`で定義されたプロンプトである。
以下の場合は`shell prompt`を使う。

* 他のTerminalと設定を統一したいとき
* よりプロンプトをカスタムしたいとき
* [Starship](https://starship.rs/ja-jp/)や[Oh My Zsh](https://ohmyz.sh/)

:::note warn
Warpの唯一の欠点なのだが、shell promptを使用して、純正のterminalで以下のようなプロンプトが表示されているとき、

```
~/workspace $ echo "abcd"
```

Warpでは、以下のようになぜか改行が入ってしまう問題がある。

```¥
~/workspace $
echo "abcd"
```

現在、以下のissueで対応中である。
[Prompt in one line](https://github.com/warpdotdev/Warp/issues/2304)
:::

## フォント

`Settings > Appearance > Text`で変更できる。
デフォルトで複数のフォントが入っている。個人的にオススメのフォントは **Hack**。
フォントの指定だけでなく、行間やフォントサイズの指定も可能。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/ecc2cf9b-94e1-f9e4-b8eb-e67e8d2c1019.png)

また、Macで使えるフォントがあれば、検知して選択できるようになる。

例えば、[NerdFonts](https://www.nerdfonts.com/)であれば、以下のようにbrewでダウンロードするだけで、Warpで使えるようになる。

```shell
brew tap homebrew/cask-fonts
brew install --cask {フォント名}
```

## カーソル

`Settings > Appearance > Cusor`でカーソルを点滅させるかどうかを設定できる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/1c3653cb-0afa-17c3-844d-23168259e843.png)

## 入力位置の指定

`Settings > Appearance > Input`で変更できる。

* Pin to the bottom (Warp default mode) : 一番下に固定する
* Start at the top (Classic mode) : 最初だけ一番上で、コマンドを叩くごとに下に行く(標準のTerminalと同じ)
* Pin to the top (Reverse mode) : 一番上に固定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/d7ae2c0a-bc2c-219d-42f1-37d518f52784.png)


## コマンドパレット

`cmd + p`でコマンドパレットが開く

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/156096/56681ab9-33e3-e230-34cf-e9cd32e822c4.png)

# おわりに

WindowsやLinuxの方やもっとカスタマイズをしたい人は 同じくRust製の [WezTerm](https://wezfurlong.org/wezterm/index.html)がおすすめです。