はじめに
Claude CodeやGemini CLIなどのAIのコーディングツールを使う際、複数のセッションを継続的に扱えるようにZellijを導入しました。しかし、セッション名を毎回入力するのは面倒で、特にセッション名の補完が効かないのが辛いと感じていました。
# セッション一覧を見る
zellij ls
# セッションにアタッチする
zellij attach session-name
# 新しいセッションを作る
zellij -s new-session
そこで、Inkを使って直感的なセッション管理ツールzeを作りました。
この記事では、zeの紹介と共に、CLIアプリケーション開発を革新するInkの魅力についてもお伝えします。
作ったもの
zeは、Zellijのセッション管理を簡単にするCLIツールです。
インストール方法
npm install -g ze-cli
インストール後、ターミナルでze
と入力するだけで使えます。
使い方
基本的な使い方
# zeを起動
ze
- ↑↓ or j/k: セッションを選択
- Enter: セッションにアタッチ
- 文字入力: インクリメンタル検索
- Tab: 新規セッション作成(レイアウト選択付き)
- Ctrl+D: セッション削除
- Esc: 終了
Inkについて
最初はfzfなどを駆使してbashで作ることも検討しましたが、Inkを触っておこうと思いInkを使うことにしました。
Inkは、ReactをCLIアプリケーション開発に持ち込むライブラリです。Webアプリケーション開発で培ったReactの知識を、そのままターミナルアプリケーション開発に活用できます。
Inkを選んだ理由:
- Reactの知識をそのまま活かせる
- 状態管理が直感的(useState、useEffectが使える)
- UIコンポーネントの再利用が簡単
- TypeScriptで型安全
実際にzeでの利用方法を紹介します。fzfライクな検索機能を実装しました。
useInput((input, key) => {
if (input && !key.ctrl && !key.meta) {
setSearchQuery(prev => prev + input);
}
// Backspaceで文字削除
if (key.backspace) {
setSearchQuery(prev => prev.slice(0, -1));
}
});
const filteredItems = items.filter(item =>
item.label.toLowerCase().includes(searchQuery.toLowerCase())
);
このようにReactに近い形でCLIツールが実装可能になりました。
まとめ
zeは、Zellijのセッション管理に簡単にします。コマンドを覚えたりセッション名を打たずにすみます。 またzeの開発を通じて、Inkを利用してインタラクティブなCLIアプリケーションを作る楽しさを実感しました。
リンク
- GitHub: github.com/yudppp/ze
- npm: ze-cli