ブログ

tTerm がブラウザーで使えるようになりました

これまで tTerm は Telegram の中にあり、チャットから直接サーバーにコマンドを送るものでした。今日、ブラウザーで動く本物のターミナル、tTerm Web を公開します。すべてのサーバーとコンピューターを 1 つのタブで扱え、コマンドはそれぞれ独立したブロックになり、デバイスに鍵を置く必要もありません。

これが tTerm Web です。左側にプロジェクトごとのマシン、上部にタブが並び、コマンドはそれぞれ独立したブロックになります。

ボットがあるのに、なぜブラウザーなのか

手元にスマートフォンしかないときは、ボットが便利です。サービスの再起動、ディスクの確認、インストーラーの質問への回答などです。ただ、腰を据えた作業には大きな画面が欲しくなります。タブを何枚も並べ、vim や htop を全画面で使い、昨日のコマンドを履歴からすぐに見つけたいものです。

そのために作ったのが tTerm Web です。ノートパソコン、タブレット、スマートフォンのどのブラウザーでも開け、作業に使うデバイスには何もインストールする必要がありません。

コマンドごとに独立したブロック

普通のターミナルでは、すべてが 1 本の流れにつながってしまい、どこで 1 つのコマンドが終わり、次のコマンドが始まったのかを目で探す必要があります。tTerm では、コマンドごとに独立したブロックになります。コマンド本体、出力、終了コード、時間、ディレクトリ、git のブランチがひとまとまりです。

ブロックは出力ごとコピーでき、折りたたんだり再実行したりもできます。コマンドの実行中は出力がリアルタイムで流れ、終了するとブロックは、選択やコピーのしやすいプレーンテキストに落ち着きます。

エディターのような入力行

画面の下には専用の入力行があります。Shift+Enter で改行でき、履歴にあるコマンドがグレーで候補表示され、Tab で補完できます。履歴は tTerm 側で保存しているので、どのデバイスでも同じ履歴を使えます。

入力行の上には、いまいる場所が表示されます:ディレクトリとブランチです。クリックして一覧から別のものを選ぶと、cd や git switch が通常のブロックとして実行されます。また、取り返しのつかない危険なコマンドの前には、tTerm がもう一度確認します。

vim、htop、sudo

全画面のプログラムはターミナル領域全体に開き、いつもどおりに動きます。sudo も同様です。ブロックが不要なら、クラシックモードもあります:見慣れた、ひと続きのターミナルです。

タブを閉じてもターミナルは閉じない

ターミナルはブラウザーではなく、tTerm のサーバー上で動いています。サーバーでのビルド中にノートパソコンを閉じても、ビルドは続き、出力も残ります。別のデバイスで tTerm を開けば、ターミナルはそのままそこにあります。

別々のプロジェクトのタブを並べて開け、各タブには P/web-01、A/api-prod のようにプロジェクトのコードが付きます。Cmd+K でコマンドパレットが開き、任意のターミナルへの移動、任意のマシンでの新しいターミナルの起動、アクションの実行ができます。

マシンの接続方法

Linux サーバーはコマンド 1 つで接続できます。マシンを追加するときに tTerm Web がそのコマンドを表示するので、サーバーで実行します:

$ curl -sSL https://connect.tterm.net/s/… | sudo sh

インストーラーはサーバーに tterm というユーザーを作成し、そのユーザーの authorized_keys に 1 行を追加し、/etc/sudoers.d 内の専用ファイルで sudo 権限を与えます。sshd_config には触れず、sshd の再起動もせず、ポートも開けません。数秒後には、サーバーが一覧に表示されます。

macOS や Linux のコンピューターは、小さなエージェントを介して接続します。エージェントはログイン中のユーザーの権限で動き、自分から tTerm のサーバーへ接続するので、受信ポートは不要で、コンピューターが NAT の内側にあっても構いません。エージェントはコマンド 1 つでアンインストールできます。

セキュリティ

tTerm はお使いのマシンに接続します。だからこそ、アクセス権を簡単に付与でき、同じくらい簡単に取り消せるように設計しました。

  • お使いの鍵は不要。tTerm は接続のたびに、あなたの名前が入った新しい SSH 証明書に署名します。証明書はそのサーバー 1 台でしか使えず、2 分後には無効になります。
  • 署名を分離。署名に使う鍵は、ネットワークにつながっていない別のプロセスにあります。メインのプログラムはこの鍵を読めず、署名を依頼できるだけです。署名はすべて記録されます。
  • 第三者を介さない。tTerm のサーバーは EU にあります。ページもターミナルもそこへ直接つながり、Cloudflare は DNS を担当しているだけで、コマンドを目にすることはありません。
  • 簡単に取り消せる。tTerm でサーバーを削除すると、tTerm は自身のアクセス権をそのサーバーから取り除きます。サーバーが応答しない場合は、サーバー上で同じことを行うためのコマンドを tTerm が表示します。インストーラーが設定したそれ以外のものを削除する方法は、スクリプトの冒頭に書かれています。
  • オープンソース。tTerm Web とエージェントは、AGPL-3.0 ライセンスのオープンソースです。インストールスクリプトは短いので、実行前に一読する価値があります。

料金

tTerm Web がベータ版のあいだは、どなたでも無料です。

501 人あたりのマシン数
24同時に開けるターミナル数
30出力付き履歴の保存日数

有料プランは今後導入する予定で、その際は十分前もってお知らせします。

ボットはどうなるのか

@tTermNetBot は今後も残り、引き続き使えます。手元にスマートフォンしかないときに、チャットから直接サーバーへコマンドを送れます。今のところ、ボットと Web アプリは別々に動いていて、マシンの一覧もそれぞれ別です。いずれ 1 つにまとめる予定です。

今後の予定

次に取り組む大きなテーマは、チームでの作業です。プロジェクト内の役割、コマンドの共有ログ、同僚のターミナルのライブ閲覧を予定しています。閲覧されている側には、誰が見ているかが常に表示されます。Windows のコンピューターにはまだ対応していませんが、いずれ対応する予定です。

tTerm Web を試す

メールアドレスでサインインします。コードが届き、それ以降は自分のデバイスなら短いコードだけで済みます。最初のサーバーは 1 分で接続できます。

無料で始める

ブログのほかの記事

すべての記事
すべての記事