記事一覧に戻る

なぜ薬剤師がSSHクライアントを開発したのか — SSH Term誕生の裏側

この記事は「モバイルSSH完全ガイド」のクラスター記事です。モバイルSSHの全体像はガイドをご覧ください。

きっかけは薬局のサーバー管理だった

私は普段、調剤薬局で薬剤師として働いています。同時にソフトウェアエンジニアとして、薬局向けのWebサービスやモバイルアプリを個人開発しています。

複数の薬局で動いているサーバーの管理は、基本的にSSHで行います。在庫管理システムのログ確認、設定変更、障害対応——これらの作業は、薬局の営業時間外に自宅PCからSSHで行うのが日常でした。

問題は、薬局にいるときにサーバートラブルが起きた場合です。

PCは手元にない。でもサーバーは止まっている。手元にあるのはスマホだけ。「スマホからSSHでサーバーに入って対応できれば」と思い、Android向けのSSHクライアントを探し始めました。それが2024年のことです。


日本語入力の壁にぶつかる

いくつかのSSHクライアントを試しました。JuiceSSH、Termius、ConnectBot、Termux——どれもSSH接続自体はできます。しかし、日本語入力の段階で全滅でした。

私がスマホからSSHで行いたかった作業には、日本語が必要な場面が多くありました。

  • 設定ファイルに日本語のコメントを書く
  • gitのコミットメッセージを日本語で入力する
  • Claude Codeに日本語で指示を出す

しかし、どのアプリでも日本語を入力しようとすると、変換がバグる、文字が化ける、カーソルが飛ぶ。まともに使える状態ではありませんでした。

なぜSSHアプリで日本語が使えないのか

原因を調査して分かったのは、ターミナルエミュレータとIME(日本語入力メソッド)の根本的な設計の違いです。

ターミナルエミュレータは、キーボードからの入力を1バイトずつリアルタイムにサーバーへ送信します。一方、日本語のIMEには「未確定(Composing)」という中間状態があります。ひらがなを入力し、変換候補を選び、確定する——この一連のプロセスをターミナルが正しく処理できないのが問題の根本でした。

ほとんどのSSHクライアントは、IMEのComposingイベントをそのまま通常のキー入力として解釈してしまいます。その結果、変換途中の文字がサーバーに送信され、文字化けやカーソルジャンプが発生するのです。


JuiceSSH終了という転機

2025年12月、Android SSHクライアントの定番だったJuiceSSHがGoogle Playから削除されました。2021年以降アップデートが完全に停止し、Android 15ではクラッシュが多発していました。

JuiceSSHは、日本語入力こそ完璧ではなかったものの、直感的なUIと手頃な価格で多くのユーザーに支持されていたアプリです。その消滅は、Android SSHクライアント市場に大きな空白を生みました。

この空白を埋めるアプリが必要だと感じました。しかも、JuiceSSHが解決できなかった日本語入力の問題を根本的に解決したアプリが。


IMEモードという解決策

日本語入力問題を解決するために考えたアプローチは、ターミナルとIMEを分離することでした。

従来のSSHクライアントは、ターミナルビュー上で直接IMEを動かそうとします。これがComposingイベントの誤処理を引き起こします。

SSH Termでは、IMEモードという別のレイヤーを設けました。

  1. IMEモードに切り替えると、通常のテキスト入力フィールドが表示される
  2. ユーザーはスマホ標準のキーボード(フリック、GBoard等)で日本語を自由に入力・変換・確定
  3. 確定後のテキストをまとめてターミナルに送信

この設計により、IMEとターミナルの相性問題を設計レベルで完全に回避しました。フリック入力でもGBoardでも、普段使っているキーボードでそのまま日本語が打てます。

技術的には単純なアイデアですが、実装には細かなチューニングが必要でした。改行の扱い、特殊文字のエスケープ、複数行入力時の挙動など、ターミナルとの橋渡しで考慮すべきエッジケースは多岐にわたります。


薬剤師として作ったからこそ

SSH Termの機能は、私自身の実務経験から生まれたものが多いです。

バックグラウンド接続維持

薬局で調剤中にサーバー障害の通知が来る。SSHで接続して状況を確認し、一旦スマホを置いて調剤に戻る。数分後にまたスマホを見たら——SSHが切れている。

この「アプリを切り替えたら接続が切れる」問題は、Android/iOSのバックグラウンド制限が原因です。SSH Termではフォアグラウンドサービスとwake lockを活用し、バックグラウンドでも接続を維持する設計にしました。

SFTPファイルブラウザ

Claude Codeがファイルを生成した後、その中身を確認したい。しかしターミナル上でcatlessを使ってファイルを読むのは、スマホの小さな画面では厳しい。

SFTPブラウザを内蔵することで、リモートファイルをスマホのファイラー感覚で閲覧できるようにしました。

アシストバー

スマホのソフトウェアキーボードにはCtrlキーがありません。tmuxのプレフィックスキーCtrl+Bも、Claude Codeの中断Ctrl+Cも打てない。

画面下部にアシストバーを配置し、頻繁に使う特殊キーをワンタップで入力できるようにしました。どのキーを配置するかは、自分が実際にSSH作業中に「これが打てたら…」と感じたものをそのまま採用しています。


買い切り800円にした理由

SSH Termの価格は800円の買い切りです。サブスクリプションではありません。

Termiusは本格的に使うにはPro版(月額$10 = 年額$120)が必要です。これは優れたアプリに対する正当な価格設定ですが、「SSHクライアントに毎月課金し続ける」ことに抵抗を感じるユーザーは少なくありません。

私自身がそうでした。SSHクライアントは日常的に使うツールだからこそ、一度買えばずっと使える安心感が大事だと考えています。

800円は缶コーヒー2本分。一度購入すれば全機能が使え、追加課金なし。この価格設定は、自分がユーザーとして「これなら迷わず買う」と感じる金額を基準にしました。


これから

SSH Termは、まだ完璧ではありません。クロスデバイス同期はありませんし、AIオートコンプリートのような先進的な機能もまだ搭載していません。

しかし、日本語入力が確実に動く接続が切れにくい買い切りで全機能使えるという基本的な価値は、これからも変わりません。

薬局の現場で、通勤の電車の中で、カフェのテーブルで——スマホからサーバーを操作する人たちの小さな「困った」を、ひとつずつ解決していくアプリでありたいと思っています。

SSH Term をGoogle Playでダウンロード SSH Term をApp Storeでダウンロード


関連記事