Skip to content

iOS上で neoserver:// scheme リンクをワンクリックでターミナルを開く

1つの neoserver:// リンクをクリックするだけで、NeoServer が自動的に起動し、サーバーに接続して、ターミナルを好きな場所で開きます。 それは特定のマシン、特定の tmux セッション、あるいは特定のディレクトリかもしれません。

11 分で読めます

1つの neoserver:// リンクをクリックするだけで、NeoServer が自動的に起動し、サーバーに接続して、ターミナルを好きな場所で開きます。 それは特定のマシン、特定の tmux セッション、あるいは特定のディレクトリかもしれません。

Safari のブックマーク、メモ、デスクトップアイコン、Siri ショートカットに保存したり、AirDrop で同僚に送ったりしても、すべて機能します。


一、ターミナルリンクの書き方

すべてのターミナルリンクは次のような形式です:

neoserver://terminal?host=<server>&port=<port>&user=<user>&name=<terminal_memo>&tmuxName=<tmux_session>&zellijName=<zellij_session>&workdir=<directory>&command=<command>
パラメータ必須入力内容
host✅サーバーの IP またはドメイン。必須です。空欄だとリンクは無効になります。
port❌SSH ポート。指定しない場合はデフォルトの 22 になります。有効範囲は 1–65535 です。無効な値を入力するとリンクが無効になります。
user❌ログインユーザー名。指定しない場合はデフォルトの root になります。
name❌今回のターミナルのメモ名(表示用で、サーバーの照合には使用されません)。
tmuxName❌接続後、自動的にこの tmux セッションに入ります。
zellijName❌接続後、自動的にこの zellij セッションに入ります。
workdir❌接続後、自動的にこのリモートディレクトリに cd します。
command❌接続後、自動的に1つのコマンドを実行します(改行付き)。複数行は %0A で区切ります。

⚠️ 優先順位: tmuxName > zellijName > command > workdir。

  • tmuxName / zellijName と command は併用できません:セッション名を指定するとそのセッションにアタッチするだけで、command は無視されます(アタッチがターミナルの入力を占有するため、コマンドを注入できません)。
  • command は workdir と併用できます:まずディレクトリに cd し、それからコマンドを実行します。
  • tmuxName / zellijName / workdir の3つは依然として相互排他です。
  • name は純粋な表示名であるため、どれとも共存でき、上記のロジックには影響しません。

以下を参考に、自分用に書き換えてください:

# 最もシンプル:host のみ指定
neoserver://terminal?host=1.2.3.4

# ポートとユーザーを指定
neoserver://terminal?host=1.2.3.4&port=2222&user=deploy

# 接続して直接 main という tmux セッションに入る
neoserver://terminal?host=1.2.3.4&user=root&tmuxName=main

# 接続して直接 dev という zellij セッションに入る
neoserver://terminal?host=1.2.3.4&user=root&zellijName=dev

# 接続後、自動的にログディレクトリに cd する
neoserver://terminal?host=1.2.3.4&user=root&workdir=/var/log/nginx

# 今回のターミナルにメモ名をつける(リスト表示用、照合には無関係)
neoserver://terminal?host=1.2.3.4&user=root&name=本番サーバー

# 接続後、自動的に ls -la を実行(%20 = スペース)
neoserver://terminal?host=1.2.3.4&user=root&command=ls%20-la

# まず /var/log に cd し、それから tail -f syslog を実行
neoserver://terminal?host=1.2.3.4&user=root&workdir=/var/log&command=tail%20-f%20syslog

# 複数行のコマンド:まず cd /tmp を実行し、次に pwd を実行(%0A = 改行)
neoserver://terminal?host=1.2.3.4&user=root&command=cd%20%2Ftmp%0Apwd

二、接続後、ターミナルはどこで止まりますか?

これがターミナルリンクの最も便利な部分です。パラメータを変えることで、接続後にターミナルが開く場所が変わります:

指定したパラメータ接続後のターミナルの状態
host のみ(+オプションの port/user)通常のターミナルが開き、ユーザーのホームディレクトリで止まります
tmuxName=main自動的に main セッションに tmux attach し、前回離脱した画面に戻ります
zellijName=dev自動的に dev という zellij セッションに入ります
workdir=/var/log自動的に /var/log ディレクトリに cd します
command=ls -laターミナルの準備ができたら、自動的にこのコマンドを入力して実行します
workdir=/var/log&command=tail -f syslogまず /var/log に cd し、次に tail -f syslog を実行します

なぜこの3つに分かれているのですか?

  • tmux / zellij セッション:ネットワーク切断、App の終了、別のスマートフォンへの切り替えをしても、セッションは維持され、プロセスは失われません。1台のサーバーの tmux セッションを同僚と共有すれば、2人が同じ画面に入って一緒にトラブルシューティングできます。
  • ディレクトリ:接続するたびに cd /opt/app/logs と打つくらいなら、リンクを使って直接そこに飛んだ方が良いでしょう。
  • コマンド:接続後に自動でコマンドを実行します。例えば、ログの取得、状態の確認、デプロイスクリプトの実行などです。workdir と組み合わせることもできます(まずディレクトリに入ってから実行)。

name は接続後の動作に影響しません。単に今回のターミナルを分かりやすい名前にするだけで、リストの中で見つけやすくします。


三、App 内でリンクをコピーする(手書き不要)

リンクの手書きはミスが起きやすいです。NeoServer は3箇所でワンクリックコピーが可能です。コピーした後は、どこにでも貼り付けられます。

1. 「このサーバー」のリンクをコピー

サーバータブ・サーバーリスト → いずれかのサーバーを左スワイプ → Copy Scheme Link

コピーされる内容:

neoserver://terminal?host=...&port=...&user=...

2. ターミナルのクイックモードでコピー

ターミナルタブ・サーバーリスト(クイックモード)→ いずれかのサーバーを長押し → Copy Scheme Link

3. 「このセッション」のリンクをコピー ⭐ 最も便利

ターミナルタブ・セッションリスト → いずれかのセッションを長押し → Copy Scheme Link

このリンクは「サーバーXのYセッションに接続する」という情報をパッケージ化します:

  • このセッションが tmux の場合 → 自動的に &tmuxName=... が付与されます
  • このセッションが zellij の場合 → 自動的に &zellijName=... が付与されます
  • 通常セッションの場合 → host/port/user のみです

コピーに成功すると Link Copied とポップアップ表示され、リンクがクリップボードに保存されます。

✏️ コピーされたリンクには host/port/user しか含まれません(セッションリンクにはさらに tmuxName または zellijName が含まれます)。 name(メモ)や command(自動実行コマンド)を追加したい場合は?手動でリンクの末尾に追加してください。App 内では現在この2つは生成されません。

💡 実行中の tmux セッションを長押ししてコピーし、同僚に送ってみてください。彼らが NeoServer で開くだけで、同じセッションに直接アタッチできます。2人が同じターミナル画面に入ることができます。


四、このリンクの開き方

neoserver:// は iOS のリンクプロトコルであり、リンクをクリックできる場所ならどこでも NeoServer を起動できます:

  • Safari:アドレスバーに貼り付けて Enter キーを押すか、ブックマークに保存してクリックします。
  • メモ / リマインダー:1つ保存して、クリックするだけで直接アクセスできます。
  • ショートカット:「URL を開く」アクションにリンクを入力 → Siri の音声、デスクトップアイコン、自動化に割り当て可能です。
  • AirDrop:2台の iPhone 間でリンクを送り合い、相手が開けばすぐに接続できます。
  • メール:リンクをテキストとして送信し、相手が Safari にコピーして開きます。

📱 実機で初めて neoserver:// をクリックすると、iOS が「NeoServer で開きますか?」と確認を求めます。承認すれば以降は表示されません。


五、3つの実践シナリオ

🏠 シナリオ 1:「本番 tmux への接続」をデスクトップアイコンにする

毎日本番サーバーの main tmux セッションに接続しなければならないとします。毎回 App を開き → サーバーを探し → 接続し → アタッチするより、アイコンにしてしまった方が良いでしょう:

  1. App でこのサーバーのリンクをコピーし、手動で &tmuxName=main を追加します;
  2. iOS の「ショートカット」を開き → 新規作成 → 「URL」アクションを追加して、このリンクを貼り付けます;
  3. 「URL を開く」アクションを追加します;
  4. 共有をタップ → ホーム画面に追加を選び、「本番サーバーへ接続」と名前をつけ、アイコンを選択します。

以降、デスクトップでこのアイコンをタップするだけで、NeoServer が自動的に接続し、main セッションに入ります。すべての操作が不要になります。

🎙️ シナリオ 2:音声で接続する

上記のショートカットを Siri に登録し、「Hey Siri、本番サーバーに接続して」というフレーズを設定します。話しかければスマートフォンが自動的に接続します。

🤝 シナリオ 3:セッションを同僚に共有する

  1. ターミナル・セッションリスト → このセッションを長押し → Copy Scheme Link;
  2. 同僚に送ります(AirDrop / WeChat など何でも構いません);
  3. 相手が NeoServer で開く → 自動的に同じ tmux セッションにアタッチします。

(前提:相手の iPhone にある NeoServer のサーバーライブラリも、同じホストに接続できる必要があります。)

🖥️ シナリオ 4:デスクトップアイコンでワンクリックコマンド実行

毎日特定のマシンのコンテナ状態を確認したいが、接続するたびに手動で docker ps と打ちたくない場合:

  1. サーバーのリンクをコピーし、手動で &command=docker%20ps を追加します;
  2. シナリオ 1 のようにデスクトップアイコンを作成し、「コンテナ状態」と名前をつけます。

以降、アイコンをタップする → NeoServer が接続する → 自動的に docker ps を実行し、結果が直接ターミナルに表示されます。


六、ターミナルリンクのよくある質問

Q: リンクをクリックしたのに、間違ったサーバーに接続されました? A: NeoServer は host(+ 入力されていれば port + 入力されていれば user)でサーバーを検索します。もしライブラリに host が同じサーバーが2台ある場合、最初に一致したものに接続されます。port や user を入力することで正確に区別できます。

Q: ライブラリにこのサーバーがない場合、リンクをクリックするとどうなりますか? A: 「新規サーバー」ページは表示されなくなりました。 現在はリンク内の host/port/user を使って、その場で一時ターミナルを開きます:

  • 資格情報のない認証を優先的に試みます(Tailscale SSH など、接続自体が身元を証明しているシナリオに適しています);
  • サーバーがパスワードを要求する場合、NeoServer の既存のパスワード / keyboard-interactive 認証にフォールバックします;
  • 一時サーバーはサーバーライブラリに保存されず、閉じると解放されます;
  • ただし、「最近のセッション」にパスワードや秘密鍵を含まないスナップショットが残り、App の再起動後にタップすれば再接続できます。

元のリンクに含まれる name / tmuxName / zellijName / workdir / command は通常通り機能します。

Q: リンクに直接パスワードを含めて、毎回入力する手間を省けますか? A: できません。 これはセキュリティ上の制限です。リンクにパスワードが含まれることはありません。手動で password=xxx を追加しても無視されます。パスワードは App 内のキーチェーンのみを経由します。

Q: name の用途は何ですか? A: 今回のターミナルのメモ名に過ぎず、リストの中で見分けやすくするためのものです。サーバーの照合には関係しません。host が同じで name が異なるリンクを2つ開いても、接続されるのは同じサーバーです。

Q: command にセキュリティリスクはありますか? A: 少しありますので、理解しておく必要があります。command は接続後に**自動的に実行(改行付き)**されます。どんな App や Web ページでも neoserver://...&command=... を発行できるため、出所不明で command を含むリンクはクリックしないでください。iOS が初回に「NeoServer で開きますか?」と確認するのが唯一のストッパーとなります。また、パスワードが必要なサーバーに対してはパスワードを渡すことができず、通常の認証にフォールバックするだけです。

Q: 中国語やスペースを含むディレクトリを workdir に指定できますか? A: できます。そのまま書いてください(例:workdir=/home/me/my logs)。特殊文字は App が自動的に処理します。最も確実な方法は手書きではなく、App でコピーすることです。

Q: クリックしても反応がありません? A: ① neoserver:// で始まっていることを確認してください;② 初回は「NeoServer で開く」の確認ダイアログが表示されます;③ host が空欄になっていないか確認してください;④ App がフォアグラウンドになくても問題ありません。自動的に起動します。

Q: Android / Windows で開けますか? A: できません。neoserver:// は NeoServer がインストールされている iPhone / iPad でのみ認識されます。

試してみませんか?

NeoServer · SSH, Mosh, Docker & SFTP client for iPhone, iPad and Mac

App Store で無料