つよつよターミナルエミュレータ「tabby Terminal」、使ってみませんか？

## はじめに
はじめまして！
[ディップ株式会社](https://www.dip-net.co.jp/)にて11月より24新卒内定者インターンとしてインフラエンジニア見習いをしている者です。
こちらは[ディップ株式会社 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/dip-dev)の24日目の記事となります！
メリークリスマスイヴ！

インターンにて私は現在、依頼に基づきAWSリソースをTerraform、Ansible等を利用し構築しています。
それぞれの作業を構築用EC2へSSHでログインし行っているため、ターミナルエミュレータをほぼ常に利用しています。
WindowsPCでのターミナルエミュレータとして弊社では基本的にTera Termを利用している方が殆どである状況です。むしろ、それがデファクトスタンダードであると思っています。
私は個人的に学業などで利用しているターミナルエミュレータがあり、メンターさん→課長へお話ししたところ、社用PCでの利用許可をいただく事ができ、ありがたく高効率で開発できる環境を手に入れられました。

本記事では、そんなどうしても業務内で使いたかった多機能なターミナルエミュレータ、「**tabby Terminal**」について紹介していきたいと思っております。

## tabby Terminalの概要
tabby Terminalはドイツの[Eugeny](https://github.com/Eugeny)氏という方が開発されている、オープンソースソフトウェアです。
[MITライセンス](https://github.com/Eugeny/tabby?tab=MIT-1-ov-file#readme)にて配布されているため、著作権表記のもと改変、再頒布、商用利用が可能です。(スゴい！！)
以下Webサイト(英語)にて機能が解説されています。

https://tabby.sh/

以下がGitHubリポジトリです。(日本語Readme.mdあり)

https://github.com/Eugeny/tabby

インストールは下記ページから、自身のOSに合わせたものをダウンロードしてください。

https://github.com/Eugeny/tabby/releases

## tabby Terminalの特徴(機能面)
#### :flag_jp:日本語対応
OSSであるため有志の方が行った日本語翻訳がマージされており、外国の方が作成したアプリケーションとしては珍しく、日本語に**完全対応**しています。
![スクリーンショット (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/f923f25e-b4e3-0f52-a3e0-59f8ad5b3f91.png)


#### :package:マルチOS対応
**Windows**(.exe)/**Mac**(.dmg)/**Linux**[Redhat系(**.rpm**),Debian系(**.deb**),**pacman**]のOS向けに提供されており、GUI環境であれば基本的にどのOSでも利用できます。
インストーラだけでなく、ポータブル版(.zip/.tar.gz)も用意されているため、インストール無しで利用することも可能なところが魅力ですね！

#### :globe_with_meridians:マルチプロトコル/ソフトウェア対応
ターミナルといえば、WindowsユーザであればSSH/Telnetやシリアル接続ならTera Term、コマンド プロンプト/Windows PowershellならWindows Terminal、GitならGit Bashとターミナルエミュレータを分けて利用される方が多いと思いますが、tabbyは**これ1つで全て接続できます**。
**CMD/PS/SSH/Telnet/シリアル接続/Git/WSL/Docker/Rawソケットなど**、CLIで利用するアプリケーションやプロトコルは自由に使えます。
指定ディレクトリで実行したり、管理者として実行したり、実行時に変数を加えたり、何でもござれです。
私はL2/L3ネットワークを専攻しており、Cisco Systemsのルータ、スイッチをシリアル接続してネットワーク構築を行う機会が多かったため、シリアル接続が可能な点は非常にありがたかったです。

#### :left_right_arrow:タブ化/マルチペイン
名前の通り、1つのウィンドウで複数のターミナルをタブ化して表示されます。
加えて、マルチペイン表示に対応しているので、1つの開いたタブで複数のターミナルを表示、操作できます。
プロトコルやアプリケーションが異なっても表示できるため、非常に利用しやすいです。
LinuxのSSH接続のみであればtmuxで十分ですが、**アプリケーション、接続先を跨いで同時表示できるのは非常に便利**だと感じています。Windows Terminalでも類似の機能はありますが、圧倒的にこちらの方が扱いやすいです。
![スクリーンショット (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/d4fdad84-2892-40c5-c2af-c627c49e5422.png)

#### :file_folder:プロファイル化
先ほど説明したタブ化やプロファイル自体はWindows Terminalなどにも搭載されている機能ですが、tabbyではマルチプロトコル/ソフト対応を最大限活かせるもので、**細かい設定値まで**保存して以下のように一覧表示されたものから1クリックで接続できます。
![スクリーンショット (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/e6688d2a-96f9-7e3f-e010-96c8271384a2.png)
デフォルトで大まかなソフトウェア/プロトコルの接続プロファイルが用意されており。それを自由な設定値で複製し利用することもできます。

### :100:SSH接続設定の自由度
個人的にはこれが一番の魅力です。
SSH接続のプロファイルは、全ての接続先で個別のパスワードや秘密鍵が登録でき、プロファイルから接続先をクリックするだけで**認証まで自動で行ってくれます**。
![スクリーンショット (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/9f6e49d3-e698-5d30-e5d3-000357009cf8.png)
↑の画像のように、自由な設定ができるほか、セキュリティ対策上パスワードを保存することが難しければ保存せず自分で入力してログインすることも可能です。

また、こちらも代えがたい最高にイカした機能ですが、**ジャンプサーバ機能**が利用可能です。
弊社ではSSH接続にて作業を行う上で、情報セキュリティ上の理由で指定された踏み台サーバへ接続の上、そこから作業対象のサーバへ接続する必要があるのですが、上記の自動認証機能と併用すると、1クリックで踏み台サーバ→作業サーバへ両方のサーバの認証や踏み台サーバログイン後のSSHコマンドも含め、**一切キーボードに触れずにログインできます**。
踏み台サーバへ接続するプロファイルを登録し、対象サーバへ踏み台サーバをジャンプサーバとしてSSH接続するプロファイルを↓のような形で作成するだけで接続可能です。
![スクリーンショット (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/47f7bb4a-b315-d3ee-39c0-08c30ca17da2.png)

また、ポートフォワーディングも可能です。
私は利用する機会があまりありませんが、こちらも多くのニーズに応えることができそうです。
![スクリーンショット (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/0f69fc7b-1fb7-9c7b-a575-cc4f1377ed0a.png)

その他Keep-Aliveの設定や暗号化アルゴリズムの指定、ログインスクリプトの登録などが可能です。

#### :envelope_with_arrow:統合SFTPクライアント
SSH接続を行うだけで、tabbyの右上[SFTP]ボタンをクリックすると、リモートエクスプローラが表示され、ファイルをクリックすればダウンロード、[アップロード]ボタンをクリックすればアップロードの操作が**コマンドレス**で行えます。この統合SFTPクライアントが利用できるのははSSHクライアントPCとの接続に限定されますが、それでも非常に便利です。
![スクリーンショット (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/42bc193b-d75c-589b-ca4a-0199f4570e06.png)


#### その他
・:hotsprings:ホットキー
tabby内部で行うほぼすべての操作をホットキーを設定しショートカットできます。
![スクリーンショット (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/b050a934-8364-c935-7770-99703be0f18f.png)

・:page_with_curl:ログ出力
「プラグイン」タブからsave-outputプラグインをインストールし、「save-output」タブに出力先ディレクトリを指定してターミナル内でコンテキストメニュー(右クリック)から[Save output to file...]をクリックするとターミナルログを出力できます。（ターミナル起動時に自動で出力する設定も可能です）
![スクリーンショット (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/46005fca-eca9-f5d9-fee7-0e3441241d14.png)

操作性についての調整は設定の**端末**からも可能です。
他にも設定出来たり、インストールできるプラグインがありますが、詳細はぜひインストールしてお確かめください！

## tabby Terminalの特徴(デザイン面)
なんと、これだけ機能があるうえ、UIデザインやそのカスタマイズ性も**超一級品**です！！！
UIにこだわりの強い私みたいな人、ぜひこのセクションもお読み下さい。

#### :capital_abcd:フォント、表示設定
Tera Termより大幅に自由にフォントを設定できます。
Windows Terminalとほぼ同等のカスタマイズ性でしょう。
(Macの利用経験に乏しいため、Macのターミナルエミュレータ事情には疎いですが、プリインストールのターミナルよりはカスタマイズ性が高いのではないでしょうか？)
私は[HackGen](https://github.com/yuru7/HackGen)というフォントをターミナルエミュレータに利用しています。(半角3:全角5のNerd Font対応版のHackGen35 Regular NFです)すごく読みやすくスタイリッシュなフォントなのでこちらもぜひお試しください！
行間やコントラスト比なども含めて外観を設定できます。
（どうやら自分でCSSを書いて設定する事も可能なようです）
![スクリーンショット (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/51e1d000-4aab-df37-712a-05955e180bff.png)

### :paintbrush:テーマ
初めてインストールした時、衝撃を受けましたが、インストールしてすぐの時点で**数えきれないぐらいの種類の多さ**のテーマから自由にターミナルの配色をカスタマイズできます。
<iframe width="560" height="315" src="https://www.youtube.com/embed/PmAawTbiV8A" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>
本当とんでもない量ですし、全部良いので選びきれない。。。。！
私はシックで落ち着いた目に優しい、でもハッキリ読めるテーマが好きなので、以下のテーマが良いと感じました。

・Galaxy 

![スクリーンショット (39).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/685a3836-d81c-ee10-b4cc-2ed8d919ef46.png)

・**Night Owl**

![スクリーンショット (40).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/0697d3ed-0b02-491c-316b-923c3d91ee3e.png)

・OceanicMaterial

![スクリーンショット (44).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/9cfe1f37-bc58-100f-2ce4-ba2fe3448d41.png)

・Solarized Dark Higher Contrast

![スクリーンショット (45).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/8d7ffbec-c04f-739d-00f6-1614adffadda.png)

この中でも私は普段Night Owlを利用しています。

#### :eyes:・ウィンドウ
ウィンドウの表示についても調整が可能です。
UIの間隔や**透明度**、タブやウィンドウの挙動の調整もできます。
**アクリル風ウィンドウ**オプションをオンにすれば、↓のようにぼかしのかかった半透明ウィンドウにすることも可能です。
![スクリーンショット (117).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3013039/5ab281dd-5fb6-c77a-6535-2959ce570c39.png)
## デメリット
かなりよくできたターミナルエミュレータだと感じますが、デメリットも存在します。
##### ・重い
高機能すぎて、ちょっと動作が重いです。。。
というのも、スペックを選ぶ、という意味で、私はi5-8260U/RAM8GBとRyzen7 4700U/RAM16GBのPCを所有していますが、前者は多少起動に時間を要し、RAMに余裕が少ないときはSSHの接続を開始するのも少し遅いように感じる場面があります。後者ではある程度軽快に動作してくれますが、大量にタブを開くとそれでも多少動作に遅延を感じます。
エンジニアの方々が利用するようなスペックの最近のPCであれば、あまり心配は無いのではないかと思います。
##### ・ターミナルログにタイムスタンプが埋め込められない
Save Outputプラグインで保存できるターミナルログですが、タイムスタンプが埋め込めないため、作業時間における作業内容、結果のリンクがしづらいです。長いエラーが複数回に渡ったときなどは解析に少し手間が生じます。
##### ・アップデートが手動
アップデートがあるかどうかはアプリケーション内で確認できるのですが、アップデートを行うには自身でGitHubリポジトリにアクセスし、最新リリースのインストーラを入手しなければならないのは惜しいポイントだなと感じます。
好きで使っているので私は手間に感じませんが、アプリケーション内でダウンロードまで行ってくれると嬉しいな、と感じます。

などの点がデメリットとして挙げられると思います。

## 最後に
かなり親切で見やすいUIなので操作方法については触れませんでしたが、非常に操作性も高く、どなたでも利用できると思いますので、とりあえずインストールして試してみてください！
これだけ宣伝のような形でお伝えしてきましたが、開発者の方々とは全く関係なく、ただこのソフトウェアが好きな1ユーザの立場として紹介させていただきました！
私自身も全ての機能や操作を知り尽くしている訳ではございませんので、ぜひご自身でもお試し頂いて良し悪しを判断してくださればと思います。
長い記事となってしまいましたが、最後までお読みいただきありがとうございました！