Rubyアソシエーション開発助成金2019 メンター報告書

開発者: ITOYANAGI Sakura  
メンター: 前田 修吾

# プロジェクト概要

本プロジェクトは、Ruby 2.7で導入されたIRBの複数行編集機能の実装に利用
されているRelineのテストを主要な目的とし、仮想端末ライブラリなどを使用
して自動テストを実行するためのテスティングフレームワークを開発するもの
である。ただし、テスティングフレームワーク自体はRelineに特化したもので
はないため、他のTUIアプリケーションのテストでの利用も期待される。
仮想端末ライブラリlibtermのRubyバインディングと、それを利用したテステ
ィングフレームワークYamatanoorotiが主な開発成果である。

# 計画の達成状況

本プロジェクトの開発計画では、主に以下の2つの成果物の開発が計画されて
いた。

1. 仮想端末ライブラリlibtermのRubyバインディング
2. 端末テスティングフレームワーク

1はvterm gem、2はyamatanooroti gemとしてGitHub上で開発され、すでにリリ
ースされ、ユーザが利用できる状態になっている。

## vterm gem

libvtermのRubyバインディングとして実装され、端末の挙動をエミュレートし、
仮想端末画面上の指定された座標の文字や属性（前景色・背景色・文字装飾
など）を取得する機能が実装されている。

## yamatanooroti gem

vterm gemが利用できる環境とWindows向けに、指定したプログラムを実行し、
キー入力を行った上で、画面表示のassertionを行うことができる機能が実装
されている。

Windowsサポートについては、コマンドプロンプトを実行する形で実現されて
おり、ウィンドウ表示を伴わないモードはサポートされていない。

# メンターとして果たした役割

全体の方向性の確認、APIについての助言、パッケージングに関する細かい問
題点の指摘を行った。

# 今後の期待

現時点では画面全体のテキストを比較するassertion機能しか提供されていな
いため、文字の属性やカーソル位置などについてのassertion機能を追加して
ほしい。
また、Windowsサポートの強化や、最終報告書に挙げられているmacOSの例のよ
うに、問題が発生しやすい特定の端末エミュレータや端末マルチプレクサなど
のサポートも期待したい。

また、本プロジェクトの成果を利用することで、Reline自体の端末制御の効率
化など、IRB自体の改善につながることを希望する。

# まとめ

本プロジェクトの成果により、TUIアプリケーションをテストするための土台
となる部分が実装された。
また、Windowsサポートが実装されていることも大きな成果である。
Rubyおよびそのアプリケーションはさまざまなプラットフォームで利用され、
開発者自身がそのすべてで動作確認を行うことは困難なため、本プロジェクト
の成果とCIサービス等の活用により、品質の向上につながることを期待したい。
