LoginSignup
3
1

More than 5 years have passed since last update.

【個人開発】ターミナル上で動作するRedisクライアントを作成しました

Posted at

Screenshot from 2019-03-30 21-39-13.png

redis-termというnpmモジュールを作成しました。

開発にあたって使用したモジュールや背景等について書かせていただきます。

背景

  • 今までnpmモジュールを利用することはあったが、自作したことはなく、何か作りたいと考えていた。
  • Redisについて、過去に使用する経験があったが、十分に理解しているとはいえず、より理解を深めたいと考えていた。

使用方法

  • npmでインストールできます。
$ npm install -g redis-term
$ redis-term
  • 各要素間はtabキーで移動できます。
  • リスト内の項目については、上下キーまたはj, kで移動できます。

意識したこと

ターミナルで動作するという点を活かすため、可能な限りキーボードだけで操作できるようにすることを目標に開発しました。

実装した機能

コネクション管理

接続したことのあるサーバの一覧

Screenshot from 2019-03-31 05-17-19.png

コネクション情報の入力画面

Screenshot from 2019-03-31 05-18-08.png

コネクション情報は~/.cache/redis-term/connections.jsonに保存されます。

キーの管理

Screenshot from 2019-03-31 06-02-41.png

テーマ機能

dark

Screenshot from 2019-03-31 06-07-10.png

blue

Screenshot from 2019-03-31 06-08-45.png

darkとblueの2種類のテーマを用意しました。
設定は~/.config/redis-term/settings.jsonから変更できます。

~/.config/redis-term/settings.json
{
  "colortheme": "dark" // or "blue"
}

使用したモジュール

Redisクライアントです。
Promiseを標準でサポートしている点に魅力を感じたため採用しました。

blessedのfork版です。
UIの構築に利用しています。

blessed向けのReactレンダラ。

状態管理用です。
ディレクトリ構成は、Ducksre-ducksパターンを参考にさせていただきました。

ルーティングライブラリ。
MemoryRouterを使っています。

SSHクライアント/サーバライブラリです。
SSHトンネル接続をサポートするために使用しました。

パスワード管理のために使用しました。

テスト用です。

testdouble.jsは、JavaScript向けのモック/スタブライブラリです。
個人的にSinon.jsよりシンプルで使いやすい印象を受けました。

動作環境

HyperとUbuntu標準のターミナルで動作確認をしました。
MacとWindowsについては、手元に環境がないため確認できていません。
Node.jsについては、v8, v10, v11で動作確認しました。

課題

  • CIでテストの実行を自動化する。
  • テーマを増やす。
  • エディタの使い勝手をよくする。(JSONとか)
  • Hooks API対応

等...

大変だったこと等

  • UIの設計

個人的に経験の薄い分野であるため、使いやすいUIを考えながら開発していくことは想像以上に大変だった。

  • react-blessed及びblessedに関する情報が少なく、度々ソースコードを見る必要があり、大変だった。

  • やる気を持続させること。

最低でも毎日30分~1時間程度はコードを触るようにして、やる気の低下を避けるようにしました。

参考にさせていただいたプロジェクト

ターミナルで動作するデータベースクライアント。
UI等を参考にさせていただきました。

Electron製のRedisクライアントです。

3
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
3
1