0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

非エンジニアがAIだけでターミナルIDEを作った話 ——「Shelly」開発の背景と技術構成

0
Posted at

非エンジニアでもターミナルを使えるようにしたい。

そんな発想から、「自然言語で操作できるターミナル」を作ってみました。

はじめに

自分はエンジニアではありません。

小中学生にSTEAM教育を指導する傍ら、AIや開発ツールを日常的に使っています。そのなかで避けて通れないのが「ターミナル」でした。

触れるたびに感じる違和感がありました。

「これ、普通の人が使う前提で作られてないな」

その感覚が出発点です。


ターミナルの何が問題なのか

実際に使っていて感じた問題を整理するとこうなります。

問題 体感
コマンドを覚えないと何もできない 辞書を丸暗記しないと読めない言語みたい
ミスるとエラーが出る しかもエラーメッセージが分かりにくい
何が起きているか分からない 黒い画面に文字が流れるだけ

エラー(Error)とは、コンピュータが「うまくいかなかった理由」を出力するメッセージです。慣れれば手がかりになりますが、初見では暗号です。


なぜ難しいのか——構造の問題

スキル不足ではなく、インターフェースの設計思想がズレているのだと思っています。

  • 人間は 「言葉」 で考える
  • ターミナルは 「記号(コマンド)」 で動く

このギャップがある限り、非エンジニアにとってターミナルはずっと"習得コスト"を要求してきます。


解決の方向性

逆転の発想で考えました。

  • コマンドを覚えなくてもいい
  • 自然言語で操作できる
  • UIで状態が可視化される

ツールが人間に寄せてくれればいい。
AI時代ならそれが実現できるはず。


作ったもの——Shelly

「Shelly」は、自然言語で操作できるターミナルIDEです。

コマンドを知らなくても、日本語で指示するだけで動きます。

ユーザー: プロジェクトのフォルダを作って
Shelly:  → mkdir my-project && cd my-project を実行します

裏では通常のCLI(コマンドライン)が動いていますが、ユーザーはそれを意識する必要がありません。


技術構成

スタック

レイヤー 技術
フロントエンド React Native 0.81 / Expo 54 / TypeScript
スタイリング NativeWind(TailwindCSS 3)
状態管理 Zustand
パッケージ管理 pnpm 9.12
ビルド GitHub Actions → APK
実行環境 Termux(Android上のLinux環境)

接続アーキテクチャ

Shellyのターミナル接続は、用途別に3経路を使い分けています。

  • WebSocket + Node.js Bridge:チャットからコマンドを実行するメインルート
  • WebView + ttyd:完全なインタラクティブTTY。日本語入力もここで実現
  • Kotlin Native Module:バックグラウンドでのコマンド実行

AIマルチエージェントルーティング

@mention でAIを使い分けられます。

メンション エージェント
@claude Claude Code(永続セッション)
@gemini Gemini CLI
@groq Groq
@cerebras Cerebras
@local ローカルLLM(llama-server / Ollama)
@team 複数AIに並列実行、結果をマージ

@team は同じプロンプトを複数のAIに投げて、回答を横並びで比較できます。

プロセス管理

Android上で長時間プロセスを安定させることは難しく、自動リカバリの仕組みを実装しています。

  • Auto-Recovery:Termuxがクラッシュしたとき自動再起動を試みる。失敗時はTermuxアプリを開き、リカバリコマンドをクリップボードにコピー
  • Auto-Savepoint:AIの応答完了・ファイル変更コマンド実行・30秒アイドルをトリガーにgit commitを自動生成。ユーザーにGitの知識は不要
  • Undoボタン:チャットバブルごとにタップ1つで git revert

最大の差別化ポイント:クロスペインインテリジェンス

21650.jpg

Shellyの核心はここにあります。

CLIツールを使っていると、毎日これを繰り返します。

  1. ターミナルにエラーが出る
  2. コピーする
  3. チャットに切り替える
  4. ペーストする
  5. 回答を読む
  6. 修正コマンドをコピーする
  7. ターミナルに戻る
  8. ペーストして実行する

8ステップを、0ステップにするのがクロスペインインテリジェンスです。

「右のエラー直して」と言うだけで、AIが左のターミナル出力を読み取り、原因を説明し、実行可能なコマンドを提示します。実行は1タップ。

Samsung Galaxy Z Fold6のような折りたたみスマートフォンは、画面を広げると2ペイン表示ができます。左にAIチャット、右にターミナル。エラーが出ても、画面を切り替える必要すらありません。

技術的な仕組み

  • xterm.jsのバッファをポーリング(500ms)してターミナル出力をキャプチャ
  • ANSIエスケープコードを除去(lib/strip-ansi.ts
  • ホットバッファ(直近100行)+セッションバッファ(1000行・エラー優先)の二重構造
  • 「右のエラー直して」「ターミナルの出力を見て」などの日本語パターンを検知してAIコンテキストに自動注入

できること(v1.0)

機能 説明
自然言語でコマンド実行 「このパッケージをインストールして」→ コマンドに変換して実行
エラーの自動解説 ターミナル出力をAIが日本語で解説
環境セットアップ 「Node.jsの開発環境を作って」→ 一連の処理を自動化
Planモード 複数ステップの作業内容を実行前に確認
VoiceChain 音声入力でターミナルを操作
リアルタイム翻訳 CLIの英語出力を即時日本語化(Cerebras → Groq → ローカルLLM)
WebViewプレビュー AIが生成したHTMLをチャット内でプレビュー
Undoボタン チャットバブルから1タップで直前の変更を巻き戻し

v2.0以降で開発予定

  • GitHub連携(「GitHubに公開して」ワンタップフロー)
  • エージェント間並列タスク実行(@claude@gemini に別々の作業を同時依頼)

開発環境について

Shellyは、Shelly自身の上で開発されています。

開発環境はSamsung Galaxy Z Fold6 + Termux + Claude Codeです。PCは使っていません。自分でコードを書くことはなく、すべてAIとの会話で構築しました。コードベースはTypeScriptで10万行を超えています。

モバイルファーストの開発を突き詰めた結果、「ターミナルを誰でも使えるようにするツールを、そのツール自身で作る」という状況になっています。


設計上の決断:除外したもの

意図的に実装しなかった機能があります。

機能 理由
MCPプロトコル @mention ルーターで同じことができる。MCPのツール定義だけでコンテキストの40〜50%を消費するという報告もある
自律エージェントモード Shellyの思想(ユーザーが対話しながら作る)と逆行する
クラウド実行 「1台のスマホで完結する」という価値を壊す

ライセンス・OSS化について

GPL v3でOSSとして公開しています。

スターやフィードバック、IssueやPRを歓迎しています。

技術的なフィードバックも特に歓迎しています。ターミナル出力キャプチャの効率化(MutationObserver vs ポーリング)や、ActionBlockの安全チェック閾値など、知見のある方はぜひIssueで。


まとめ

ターミナルは本来もっと自由なものだと思っています。

  • コマンドを覚えなくていい
  • エラーに怯えなくていい
  • 誰でも使えるべき

「人間がツールに合わせる」ではなく、「ツールが人間に合わせる」 方向に進むべきだというのが、Shellyを作り続けている理由です。

非エンジニアが感じた限界のひとつひとつが、そのままエンジニアにとっても必要な機能になっていました。

AI時代に、ターミナルの敷居を下げる。
そのひとつの答えとして、Shellyを公開します。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?