読者の皆様へ: 皆様のご要望にお応えするべく、ノイズを削減する機能セットを開発しました。皆様が関心をお持ちのトピックを、EメールとWeb通知で受け取ることができます。新機能をぜひお試しください。
Docker CLIを不満に感じたLiran Tal氏が、Docklyというオープンソースの代替品を開発した。ビジュアルターミナルインターフェースを駆使して、すべてのDockerコンテナをコマンドラインから管理および監視できるようになる。Docklyを使ってコンソール経由でDockerを操作する方法について詳しく知るために、InfoQはTal氏に、Docklyの開発経験とターミナルベースのアプリケーション開発について聞くことにした。
一般的なDocker CLIのワークフローでは、システムのコンテナをリストアップし、作業対象とするコンテナの名称あるいはIDを確認した上で、コマンドを発行してコンテナを起動する必要がある。一方Docklyでは、システムに存在するすべてのコンテナがリストされるので、コンテナの開始や停止、削除、検査をひとつのウィンドウで行なうことができる。
DocklyはNode.jsで記述されたオープンソースソフトウェアで、NPM経由でインストールされて、Linux、iOS、Windowsシステム上で動作する。
InfoQ: Docklyを開発しようと思ったきっかけは何でしたか?
Liran Tal: 数年前、コンテナをそれまでよりも積極的に使って仕事を始めた頃、ターミナルを使った作業が好きなのですが、Docker CLIツールでの作業が同じことの繰り返しで面倒だと感じたのです。コンテナの一覧を表示しても、名称が長かったり、端末のウィンドウが小さかったりして、うまく表示してくれません。特定のコンテナやイメージに対してコマンドを実行する場合には、まずコンテナの名称あるいはIDを確認した上で、別のコマンドなどを実行する必要があります。
その時に、Web UIを使用するためにブラウザにマルチタスクするようなコンテキスト切り替えを必要とせずにコンテナを操作する、もっとうまい方法が必要だと思ったのです。
InfoQ: Docklyの開発で大変だったことは何ですか?
Tal: さまざまなウィジェットや情報のレイアウトと配置、画面上の領域確保が難しくて、結果的に何度もやり直すことになりました。
Node.jsエンジンの違いによる互換性も問題でした。Docklyを採用する可能性のあるOpsチームでは、OSの提供するチャネルをパッケージ管理に利用しているため、Node.js 4でDocklyを実行しようとすると壁に突き当たります。Docklyの実行には、バージョン8LTSなど最新バージョンのNode.jsが必要なのです。
InfoQ: 今後追加したい機能や拡張はありますか?
Tal: コンテナリストやコンテナ名が長い場合、目的のコンテナを見つけるまでスクロールする必要があるかも知れないので、タイプアヘッド式のインタラクティブな自動補完がコンテナリストにあれば便利だと、以前から思っていました。
少し前にMatan Avneri氏が、サービスの表示機能などでプロジェクトに素晴らしい貢献をしてくれたことも述べておきたいと思います。Docker swarmクラスタを使用している場合には、とても便利です。
InfoQ: 現時点での限界や不足部分としては、どのようなものがありますか?
Tal: 高度なユースケースとしては、swarmクラスタの管理やサービス状態の可視性といった面での向上が面白そうだと思っています。サービスの動作状況や状態を一目で確認することができれば便利でしょう。
厳密な意味では機能面での制限ではありませんが、テストスイートを提供できていないことがずっと気にかかっています。ユニットテストや統合テストを実現するのは難しくありませんが、画面全体の対話フローは大変です。エンドツーエンド(E2E)テストは検討中ですが、ターミナル操作はまだ手が付いていません。それだけで、まったく新しいオープンソースプロジェクトが立ち上げられることは間違いないでしょう。
InfoQ: Docklyにコントリビュートしたいと思った場合は、どこから始めるのがよいでしょうか?
Tal: あれば便利そうなテーマをいくつか提供していますが、ユーザインターフェースからコンテナに対して可能なコマンドやコントロールを追加したり、あるいはターミナルUI全体でコードコンポーネントやウィジェットの再利用性を向上するためのコードベースのリファクタリングなど、まったく違うテーマに関するユーザからのコントリビューションのマージも行っています。
InfoQ: 先日のJSHeroesでターミナル用の開発について講演されていましたが、自身でコンソールベースのツールを開発しようとしている人に対して、何かアドバイスすることはありますか?
Tal: コマンドラインツールを開発する人にまず言いたいのは、生産性や使いやすさを最適化することによって開発者エクスペリエンスに十分な注意を払ってほしい、ということです。すべてのエンドユーザが高度な操作を行なう訳ではないことを忘れないでください。それとは反対に、コマンドラインアプリを製品として扱う場合は、優れたデフォルトと優れたユーザエクスペリエンスを考えざるを得ませんし、ユーザもアプリが“役に立つ”かどうかで評価します。
これらの概念の中には、Web開発に非常に近いものがあります。例えばツールが処理中でビジーならば、スピナやプログレスバーなどの形でユーザにそれを示すようにしてください。あるいは、何か予期せぬことが起きた場合は、不可解ではない、妥当なメッセージをユーザに示すようにしましょう。
この記事を評価
- 編集者評
- 編集長アクション