えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

ReadableWidgetsの紹介 (技育展2022)

みなさん、こんにちは!

今回、私は「簡易GUI設計支援ライブラリ ReadableWidgets」という作品名で「開発・スキル支援」部門に作品を出しています。

技育展とは、株式会社サポーターズが主催する学生向け技術ピッチコンテストです。今年は、事前審査を通過した15テーマ・全180作品(チーム)の作品が展示・発表されます。

人数・規模も然る事ながら提出・提案される作品のクオリティも非常に高いものが見られるため、学生登壇の場としては国内最大規模と言っても差し支えないでしょう。


選考を通った学生は、2週間の仕上げ期間を経て3分間のLTに臨みます。

優秀な発表・展示には賞金もあるそうで、総額600万円❗️

一般審査枠もあるそうです。ぜひ以下のリンクから詳細を確認してみてください。

talent.supporterz.jp


私は昨年登壇していたので、今年は(やる気的にも)どうしようかなーと思っていたのですが、

「参加賞 1万円/チーム」というのはやはり大きいのか、あるいは寂しがり屋なのか、いつの間にか作品を応募していました。


私は特に発表が苦手なので、失敗する前にあらかじめ内容を頭に入れてもらおうと思います。

ここには載せていないものもあるので、ぜひプレゼン資料をご覧いただければと思います。


ReadableWidgetsの紹介

ここから本題、ReadableWidgetsの紹介を行います。

ReadableWidgetsはGUI開発ツールですが、どちらかといえば、組み込み・IoT向けのGUI設計ツールになります。


GUI作成って手間かかりますよね?(簡単なものほど)

みなさんは、GUI作成にどれくらいの手間をかけていますか?

GUI前提(Webアプリとかスマホアプリ)であればともかく、元々便利ツール的に作っていたものだと意外とハードルは高いと思います。


「せっかくだし」…や「軽く」…なんて言われても実際は、軽いどころではなく時間がかかるものです。

そのため、他の人に使ってもらうにはGUI化したいけどできない…ということがしばしばあります。


そこで、流用しやすく修正・変更が効きやすいGUIの設計図があると素早く開発が進むのではないでしょうか?

私は、YAMLによるGUI表現があってもいいのではないかと考え、このツールを作成しました。


YAMLとは、タブとハイフンでキーと内容を表記するテキスト形式で、人間でも読みやすい形式に落とし込んであります。

ほとんどの言語で解読ライブラリが開発されているのも特徴です。


ReadableWidgetsでは、そのYAMLファイルをライブラリに通すことで初期化時点で自動的にGUIを生成します。

ライブラリ内では、解読したウィジェットの定義をキーと一緒に辞書型に格納し、GUIを構成していきます。

これで、初期化時点で既に完成されたGUIを実現します。


GUIへ機能を追加

しかしながら、生成されたGUIにはまだ機能が伴っていないため、先ほど生成された辞書を元に機能を追加していきます。

生成された辞書はクラスオブジェクトと同様に扱うことができ、これでボタン押下時の挙動やテキスト設定などが可能になります。


この機能により、初期化時点で完成されたGUIを提示することができるため、わずか20行程度でも「一応動く」GUIアプリが完成します。

このくらい短くできれば、本体のプログラムを読みにくくすることなく手軽に開発・流用できるのではないかと考えています。


中間表現としての活用の模索

また、現在、GUI自体の設計ツールについても言語の壁を越えられるYAMLならではの活用法を模索しています。

ここでは、DrawioからYAMLを生成してGUIに反映しています。

これなら、(私のような)デザインセンス皆無な人でもスムーズに開発ができそうです。


インストール手順

ここまで聴いたみなさんは、おそらく「使ってみたい!!!」と思ったでしょう(?)

ReadableWidgetsはGitHubから入手可能です。

github.com

以下にインストール用コマンドを示します。PySide2が動くPythonが必要です。

git clone https://github.com/Ar-Ray-code/ReadableWidgets
python –m pip install –v ReadableWidgets/PySide2/

Raspberry Pi OSの場合は、aptでPySide2を入手する必要があります。


まとめ

読みやすく汎用的なフォーマットでGUIデザインができれば、開発速度も格段に上がりそうです。

このライブラリはあまりGUI開発を行わない人を対象にしていますが、さまざまなライブラリのパーサーとして機能し、ちょっとしたシステムの別プラットフォームへの移植ができるようにしたらいいなーとか思っています。

例:高機能Linuxコンピュータ→軽量LinuxLinuxコンピュータ→Arduino GFXライブラリ


まだまだ実用というには使いづらい状態なので、サポートいただけるとありがたいです🙏🙏🙏


その他リンク

前身となったライブラリ(PyamlQt)

zenn.dev