LoginSignup
4
3

More than 1 year has passed since last update.

シェルスクリプトでGUIアプリを作ってみた

Last updated at Posted at 2021-11-14

動機

Ubuntuで動くGUIツールが作りたかった
で、筆頭に上がったのが、シェルスクリプト。

掘り下げると..

ターミナルへのコマンドをクリック一発で投げられるツールが欲しかった
当然、GUIがほしく、かつ、Linuxで確実に動くものとしてシェルスクリプトが。
他にも、pythonとかあり、ほとんどのLinuxでは標準でインストールされていることが多いことは知っていたが、今後Ubuntuの仕様変更への対応を考えて、依存関係を極力少なくするためにシェルスクリプトを。

処理フロー

上記の処理フローの理由

入力値の受付のためだけにGUIを使いたいため。
上記のフローだと、INDEX画面で5つの入力のいずれかを行い、各所の入力受付画面に遷移し、終了以外はIMDEX画面に戻るが、
これだと、遷移しかなく、メインループ等の実装は必要がない。
また、そもそもシェルスクリプトでメインループの実装の話を聞いたことがない。
以上の理由により、終了以外はすべてINDEX画面に戻るループを組むだけの単純なフローに落ち着いた。

使用したGUIライブラリ

・YAD(Zenityフォークライブラリ)
主に、こちらを元に作成

そして、作ってみた。

コードはリンクにて。
※exec_cmdclick.shが実行ファイル
※アプリ説明はこちら

感想

・シェルスクリプトでGUIはメインループに相当する処理がなければさほど難しくない
・ここまでしなくとも、簡単なログアウトセッション程度は自作はさほど時間がかからない(自作Linuxを作る際、GUIアプリがなくとも、「仕込む」という選択肢が。)
・シェルスクリプトだと、異様にグローバル変数が増える(筆者の知識不足の可能性大)
シェルでウィンドウ最大化表示は止めたほうがいい(後述参考)

余談 〜 シェルでウィンドウ最大化表示は止めたほうがいい 〜

結論から言うと、すごく間延びした感じがしてしまう

理由

まず、下記が今回作成したアプリのINDEX画面

そして、下記のウィンドウ最大化画面を

これ、非常に余白の大きさが気になってしまう。
両方共それなりにあるが、後者の最大化画像の方が、余白が伸びていて、しつこさまで感じてしまう。
ログアウトセッションのように、Linuxのアプリには最大化しないものがある理由がわかった気がする。

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