Mechvibes は、メカニカル キーボード サウンドをシミュレートするためのオープンソース GUI プログラムで、私がここ 3 ~ 4 年使用しているプログラムです。しかし、Linux に切り替えてから、動作しなくなりました (Wayland のセキュリティ問題)。このプログラムは基本的にキーボード入力をリッスンし、キーが押されるたびにキーボード音を再生します。さらに、MechVibes は Electron.js で構築されているため、メモリを大量に消費します (150 MB)。私が構築した CLI のメモリ使用量は約 6 MB のみです。
そうは言っても、私は Go や Linux (および CLI ツール) の世界についてはまったくの初心者です。 Windows から Linux に切り替えて以来、ターミナルを使って多くのことを達成しようとしていることに気づきました。それがきっかけで、NeoVim を試してみることにしました。これは私の心を驚かせ、端末に対する見方を変えました。
GoVibes は 100% NeoVim を使用して開発されていることをご存知ですか??♂️
Go は Javascript/フロントエンドの世界から来た C のような単純さで知られていますが、私はそれに苦労しました。私は主に 2 つの理由からそう考えています。1 つは、私はプログラミングを本当に知りません (フレームワーク (React) しか知りません。そして、過去 2 年間、暗記した定型コードを書いてきました。)。次に、Go は私の第二言語であり、Web/JS 開発のせいで新しい言語を選択するのが難しくなりました。そのため、Go を学ぶことは私にとってパラダイムシフトのようなもので、自分の不十分さやスキルの問題の多くが明らかになりました。それは、GoVibes のコードベースをチェックすると明らかです。
標準の CLI ツール基準を完全には満たしていませんが、私はこれを CLI ツールと呼んでいます。これは Linux 専用で (Fedora と、Arch を使用している友人のマシンでテスト済みです!)、手動でコンパイルする必要があります。その上、コードはひどいです。
Rust で書かれた同様の CLI ツール、Rustyvibes があります。試してみましたが、Wayland のセキュリティ問題のため、Fedora Linux では失敗しました。また、キーボードのサウンドフレーバーを変更したい場合は、CLI プログラムを強制終了する必要がありました。私はフロントエンドの世界の出身なので、きれいな UI に偏っていて、CLI ツールでも同じエクスペリエンスを望んでいました。そこで、これらの問題を正確に強調するために、GoVibes を構築しました。
プログラムの核心はシンプルです。別のチャネルで実行されている連続ループがあり、キーボード入力イベントの受信を待機します。入力イベントに基づいて、プログラムはオーディオ ファイルのセクションを再生します。どの部分を再生するかは、別の config.json ファイルで定義されます。システム内に複数の入力デバイスが存在できるようになりました。したがって、プログラムには利用可能な入力デバイスもすべてリストされており、どのチャンネルを聞くかを選択できます。 Linux は初めてなので、興味深いと思ったのは、デバイスをオブジェクトのようなファイルとして扱うことです。したがって、デバイスをマウントするには、それをディレクトリとして開くだけで済みました。
file, err := os.Open("/dev/input/event2")
開発時間のほとんどは、GoVibes をインタラクティブで見た目も美しくすることに費やされました。おそらく、その労力をクロスプラットフォームで機能させることに費やしたほうがよかったかもしれませんが、繰り返しになりますが、私はその唯一のユーザーなので、それは問題ではありません。とにかく、Golang で対話型 CLI(TUI) ツールを構築するためのライブラリである BubbleTea を見つけました。図書館には確かに学習曲線がありました。すべてのことがどのように結びついているのかを理解するのに 1 週間かかりました。また、事前に構築されたコンポーネント (バブル) も多数あるため、非常に簡単に、美しくユーザーフレンドリーな TUI を構築できます。
全体的には、良い学習経験でした。
以上が初めての CLI ツールを Go で構築の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。