# ホストと接続

## ホストエディタ

新しいホストを作るには **⌘N** を押し、既存のホストを編集するにはそれをタップ
します。エディタには 4 つのタブ — **接続**、**詳細**、**転送**、**スニペット** —
と **接続** バーがあります。iPhone では同じ 4 つのセクションがチップとして並び —
**接続**、**詳細**、**トンネル**、**スニペット** — 接続の入力欄とトンネルの規則は
保存をタップするまで保留されます（それ以外の編集は iPad と同じくすぐに反映され
ます）。エディタ自体はどちらのデバイスでも同じです。

接続タブには基本項目が並びます。**名前**、**アドレス**、**ポート**（1〜65535）、
**ユーザー**、**識別情報**（[キー](https://bambouville.com/docs/ja/keys/)ページのキー）、**パスワード** です。
ここで入力したパスワードはセッション限りで、実行中のセッションの間だけ保持され、
永続化されません。唯一の例外は、[近くのデバイスからのセットアップ](https://bambouville.com/docs/ja/nearby-setup/)
や[連係](https://bambouville.com/docs/ja/continuity/)で設定され、パスワードで認証するホストです。この場合、
新しいデバイスで一度入力したパスワードは、そのデバイスのキーチェーンにのみ
保存された資格情報として保持され、同期されることはありません。エディタから
あとで変更でき、保存すると、このデバイスのキーチェーンにあるパスワードが
置き換えられます。

![ホストエディタ。接続、詳細、転送、スニペットの 4 つのタブと、接続タブの入力欄、接続バーが表示されている。](https://bambouville.com/docs/assets/img/host-editor.png)

*上部に 4 つのタブ、どのタブでも下部に固定された接続バー。*


## トランスポート: SSH か mosh か

ホストごとに 1 つのトランスポートを選びます。

- **ssh** — SSH 接続は 1 本で、tmux のタブはメインセッション上に留まります。
- **mosh** — UDP 上の mosh ターミナル。mosh は Wi-Fi ↔ モバイル通信のローミングや
  スリープ／復帰をまたいでセッションを維持し、パケットロスの多い回線でも反応が
  軽く感じられます。ホストに `mosh-server` がインストールされている必要が
  あります。tmux のタブは 2 本目の SSH サイドチャネルを使います。本物の
  スクロールバックを含む詳しい話は [mosh のページ](https://bambouville.com/docs/ja/mosh/)にあります。

mosh の UDP トラフィックは踏み台を越えられません。[踏み台ホスト](#踏み台ホスト)
経由で mosh を使い、mosh サーバーに到達できない場合、Tessera はそのことを伝え
（「踏み台チェーン越しでは mosh に到達できません…」）、SSH で再接続します。

## 起動モード

- **自動 tmux** — ホストごとの tmux セッションにアタッチします（なければ作成
  します）。名前は `tessera-XXXXXXXX` という決まった形で、アプリを再インストール
  しても記憶されます。既定であり、接続が切れても影響がなくなるモードです。
- **名前付き tmux** — 自分で選んだ名前の tmux セッションにアタッチします。使えない
  文字を含む名前の場合は、自動生成された名前が使われます。
- **カスタム** — 起動コマンドをそのまま実行します。ssh では接続時にログインシェルへ
  そのまま送られ、mosh では `mosh-server new -- <command>` によって実行されます。

tmux モードで何ができるかは [tmux](https://bambouville.com/docs/ja/tmux/) を、起動モードとトンネルの関係は
[ポート転送](https://bambouville.com/docs/ja/port-forwarding/#mosh-と転送)を参照してください。

## 踏み台ホスト

保存済みのホストはどれも SSH の踏み台（ProxyJump）として使えます。ホストエディタで
選択してください。チェーンは入れ子になり — 踏み台ホスト自身の踏み台がチェーンを
延長します — エディタには出来上がった経路（「a → b → host」）が表示され、
チェーンが壊れている場合は警告が出ます。

- 各ホップは、それぞれの識別情報またはパスワードで個別に認証します。パスワードを
  使うホップには、エディタの踏み台ホストのセクションに **パスワード · \<ホップ名\>**
  の欄が現れ、その値は実行中のセッションの間だけ保持されます。すべてのホップに
  入力されるまで、接続は無効のままです。
- ホストキーの確認はホップごとに、踏み台から順に表示され、それぞれ検証対象の
  エンドポイントが示されます。
- チェーンが壊れている場合は安全側に倒れます。踏み台ホストが削除されていると、
  それに依存するホストはエディタで警告を出し、黙って直接つなぐのではなく接続を
  失敗させます。エラーには発生元のホップが示されます（「踏み台ホスト \<名前\>: …」）。
- [無料版](https://bambouville.com/docs/ja/unlimited-hosts/)では、別途保存した踏み台が保存済みホストの枠を 1 つ
  使います。

## 詳細タブ

- **OS ロゴ** — 接続時に自動検出されます。手動で設定することもできます（macos、
  ubuntu、debian、alpine、linux、raspbian）。
- **タグ** と **メモ** — 自分で整理するためのものです。
- **環境変数** — 1 行に 1 つの `KEY=value` を書きます。先頭の `export ` は省略可能
  で、指定しても取り除かれます。値はそのままリモートシェルに渡されるため、
  `$HOME`、`$(…)`、引用符は書いたとおりに機能します。
- **ターミナルの背景** — 全体の[背景](https://bambouville.com/docs/ja/appearance/)をホストごとに上書きします。

> 環境変数と起動スニペットは、tmux セッションが起動するときにしか実行されません。
> すでに tmux セッションが存在するホストでこれらを変更した場合は、変更を反映
> させるためにサーバー上でそのセッションを終了してください。

## スニペット

スニペットタブには **起動スニペット** があります。接続直後に送られるコマンドです
（上の tmux に関する注意はここにも当てはまります）。

## 接続が進まないとき

セッションが立ち上がる間、起動オーバーレイには現在の段階が表示されます —
**接続中**、tmux ホストではそのあと **tmux を起動中**（SSH）または
**tmux にアタッチ中**（mosh）、そして **ペインにアタッチ中** です。ある段階が
12 秒ほど進まないままだと、オーバーレイはどの段階で止まっているかを示し
（「まだ 接続中 — ハンドシェイクが完了していません。」）、回り続ける代わりに
抜け道を用意します。

- **ホストを編集** — アドレス、ポート、キーに問題があるときのために、ホスト
  エディタを開きます。
- **再試行** — 現在の試行を破棄して、最初から接続し直します。
- **戻る** — あきらめてホスト一覧に戻ります。止まった試行から抜けると接続は完全に
  切断され、サーバー側には何も残りません。

タイマーは段階ごとなので、遅くても進んでいる接続がこれに引っかかることは
ありません。tmux 自体が立ち上がらない場合 — インストールされていない、セッションを
開始できない、ホスト自身の dotfiles がログイン時にすでに tmux を起動している —
Tessera は決して応答しない tmux を待ち続けるのではなく、何が起きたかを正確に
伝えるバナーとともに素のシェルを表示します。

![接続中に止まった起動オーバーレイ。段階の見出しには「接続中」と表示され、その下に tmux のセッション名が続きます。警告行には「まだ 接続中 — ハンドシェイクが完了していません。」と出ていて、その下に「ホストを編集」「再試行」「戻る」のボタンが並んでいます。](https://bambouville.com/docs/assets/img/stall-notice.png)

*12 秒間まったく進まないとき — オーバーレイがどの段階かを示し、抜け道を用意します。*

## セッション

Tessera はどのホストに対しても、複数のセッションを同時に開いたままにできます。
自動 tmux のホストは 1 つだけ — ホストごとに tmux コントロールセッションが 1 つ
（名前付き tmux ではホストとセッション名ごとに 1 つ）— ですが、カスタムコマンドの
ホストは複数持てます（「名前 #2」「名前 #3」）。サイドバーの **アクティブ**
セクションにはすべてのセッションが「名前 (tmux)」「名前 (tmux: セッション名)」
「名前 #N」というラベルで並び、それぞれに切断ボタンが付いています。iPhone では
同じ一覧が **セッション** タブになります。

セッションの切り替えは、タップするか、**⌘⇧K** / **⌘⇧J** で隣に移動するか、
**⌘K** のクイック切り替えパレットを開いて行います。入力するとセッション
（新しい順）とエージェントが絞り込まれます — クエリの先頭に `@` を付けると
エージェントだけに絞られます。

## セッションの復元

**設定 → ターミナル → 起動 → 以前の接続** で、新しく起動したときの動作を
決めます。

- **確認** — 「以前の接続を再開」のシートを表示し、「常に再開」／「再開」／
  「今はしない」から選べます。
- **常に** — 確認なしで再接続します。
- **しない** — まっさらな状態で起動します。

iPhone では選択シートの代わりに **起動時に復元** のトグルが 1 つあるだけです。
復元できるのは、キー情報が揃っている保存済みホストのセッションだけです。

フォアグラウンドに戻ったときも仕組みは同じですが、より賢く動きます。Tessera は
何を再接続するか決める前に、開いている **すべての** セッションが状態を報告するのを
待ちます。そのため、複数のホストが同時に切断されても — あるいは mosh セッションが
遅れて切断を認めても — それぞれが再接続され、取り残されるものはありません。その間、
起動オーバーレイには残りの件数が表示されます（「+2 件のセッションが再接続中」）。
Tessera はあえて単一ウインドウです（iPad でのマルチシーンには対応しません）。
移動の手段は、サイドバーとパレット — [iPhone](https://bambouville.com/docs/ja/iphone/) ではタブバーと
スイッチャー — です。
