Sougen Blog

iPad / iPhone 向け SSH ターミナル「basho」を作った

iosswiftssh

iPad や iPhone からサーバーに SSH 接続して作業をする際、これまでいくつか既存のアプリ(moshi や Terminus など)を試してきましたが、どうしても解消できない不満がありました。

それは「外部キーボードを接続した際に、日本語 IME が正しく動作しない」「Apple の音声入力が使えない」という点です。

claude などの AI エージェントを使うときに、外部キーボードが実質的に使えないのは大きなストレスでした。

そこで、これらの不満を完全に解消する、自分にとって理想的な SSH ターミナルエミュレータをイチから作ることにしました。それが basho です。

basho とは?

basho は、iPad / iPhone 用に Swift で開発された SSH ターミナルエミュレータです。

名前の由来は、「bash」や「sh」といったシェルのアイデンティティを込めた「芭蕉」と、SSH で繋ぐ先の「場所」、そして「奥の細道」の旅にかけています。また、既存の SSH クライアントである「moshi(mosh)」へのアンチテーゼ的なネーミングでもあります。ちなみに、アプリアイコンは芭蕉の葉っぱをモチーフにしています。

こだわったポイントと主な機能

1. 完璧な日本語入力体験

最大の開発動機であった「日本語入力の不具合」を解消するため、iOS の標準的なテキスト入力基盤である UITextInput をベースに UI を構築しました。これにより、外部ハードウェアキーボードを接続していても、macOS や通常の iOS アプリと全く同じ感覚で日本語 IME(変換・確定・変換窓の適切な位置表示)が動作します。もちろん Apple の音声入力もシームレスに使えます。

2. 厳密な等幅フォント「Sarasa Term J」の同梱

ターミナルでの表示崩れを防ぐため、全角文字が半角文字の厳密に 2 倍の幅を持つ「Sarasa Term J(更紗ゴシック)」を同梱し、デフォルトフォントとして採用しています。

3. 強固な基盤技術

4. モバイルに最適化された UX

アーキテクチャ

プラットフォーム非依存のコア部分(TerminalCore, TerminalSession)と、プラットフォーム固有の UI 部分(iOS 用の BashoPad, Mac 用の BashoMac)を明確に分離した設計になっています。コアのロジックは Mac 側で SPM(Swift Package Manager)を使って高速にテスト(swift test)できるようにし、iOS アプリは xcodegen を使ってプロジェクトファイルを生成しています。

インストール方法(AltStore / SideStore)

Apple にお布施していないので、App Store では配信していません。興味のある方は、ご自身の Apple ID を使って AltStore や SideStore 経由でサイドロードすることでインストール可能です。

インストールやソースの追加は、以下の専用ページ(sougen.dev 非公式ストア)からワンタップで行えます。

https://altstore.sougen.dev/

まとめ

自分自身の「ここが使いにくい」という強いペインから生まれたアプリですが、SwiftUI や swift-nio-ssh などのモダンな技術スタックを組み合わせることで、非常に満足のいくターミナル環境を iPad 上に構築することができました。

これからは basho を使って、出先でも快適なリモート開発ライフを送りたいと思います。