ncursesは、テキストベースのユーザーインターフェース(TUI)を開発するための
ライブラリで、画面描画を効率的に行うためのAPIを提供します。ターミナルに依存しない設計が特徴で、様々な環境で動作するTUIアプリケーションの開発を支援します。
ncursesの概要
ncursesは、もともと「new curses」の略であり、開発が停滞していた4.4BSD版のcursesの代替として登場しました。従来のcurses
ライブラリを使ったプログラムからの移植が容易であることが特徴です。しかし、古いcursesが実際のVT100などの端末を想定していたのに対し、ncursesは端末エミュレータでの利用も考慮しており、ターミナルサイズの変化にも柔軟に対応できるよう設計されています。
ncursesは、端末の情報を管理するためにterminfoまたはtermcapのいずれかを利用することができます。多くのcurses実装ではterminfoが採用されていますが、termcapもサポートされています。例外的な例として、mytinfoは両方をサポートしています。
プロジェクトリーダーはThomas Dickey氏が務めており、ncursesは
GNUプロジェクトの一部として開発が進められています。
ライセンスは、GNU GPLやLGPLではなく、MIT
ライセンスに類似した形態をとっています。これは、かつてフリー
ソフトウェア財団との間で交わされた著作権に関する合意に基づきますが、現在はフリー
ソフトウェア財団の
ソフトウェアであるため、将来的にはGPL
ライセンスとなる可能性も存在します。
ncursesの特徴
ncursesは、ターミナル環境でのテキスト描画を効率化するための様々な機能を提供します。
画面更新の最適化: 画面全体の再描画ではなく、変更された部分のみを更新することで、描画処理を高速化します。
ターミナル非依存: 様々なターミナルに対応し、アプリケーションが特定のターミナルに依存しないようにします。
リモート環境での利用: リモートシェルでの利用時にも、レイテンシを最小限に抑えるための工夫が凝らされています。
柔軟なウィンドウ管理: 複数のウィンドウを管理し、それぞれのウィンドウ内で独立した描画処理を行うことができます。
キー入力処理: 特殊キーやマウスイベントなどの入力を処理するための機能を提供します。
利用可能なツールキットと言語バインディング
ncursesは、C言語で記述されたライブラリですが、他のプログラミング言語でも利用できるように様々なツールキットや言語バインディングが提供されています。
ツールキット:
Development Kit for C++
言語バインディング:
Ada95
Common Lisp
JavaScript
PHP
Python
Ruby
ディストリビューションとパッケージ
ncursesは、多くのOSで標準的に利用できますが、Windows環境向けにはGnuWin32からパッケージが提供されています。
Ncurses package for Windows – GnuWin32
まとめ
ncursesは、テキストベースのユーザーインターフェースを開発するための強力なライブラリであり、様々な環境で利用できる柔軟性を提供します。C言語だけでなく、他のプログラミング言語でも利用できるため、幅広い開発者にとって便利なツールとなるでしょう。その豊富な機能と効率的な描画処理により、快適なTUIアプリケーションの開発を支援します。
参考情報
ncurses ホームページ
ncurses Programming HOWTO
Writing Programs with NCURSES by Eric S. Raymond and Zeyd M. Ben-Halim
ncurses FAQ by Thomas Dickey
A Hacker's Guide to NCURSES
*
Example programs with NCURSES