Open1

tcl/tk/wishって何?git guiの裏側にある“知られざる世界”を覗いてみた

tech_mwtech_mw

gitはチーム開発×業務で毎日使っていたのですが、深く追求する事がなかったため不意に意図しない状況に陥ると都度調べてなんとか解決してきました

調べてすぐ解決できる程度であればまだしも中には複雑で状況が把握できず困った状況に覚えがあったため改めてShell操作(CLI)と SourceTreeで操作(GUI)でそれぞれgitの理解を深めようとしている。といった経緯があります

その中で意識した事がない tcl、tk、wishというキーワードに出会いました

備忘録としてメモします

環境

pc:MacBook Pro(2019, Intel)
os:macos Sequoia 15.5
git:2.49.0

macOSで git gui や wish を使おうとして遭遇したエラー

(git gui実行時)
git: 'gui' is not a git command. See 'git --help'.

(wish実行時)
/usr/bin/wish: line 2:  7096 Killed: 9 ...

解決手順

Homebrew で git gui、tcl/tk をインストール

macOS に標準で入っている tcl/tk(特に wish)は古く、macOSのバージョンによってはうまく動作しません。そこで、Homebrew を使って最新の git guiとtcl/tk を導入します

(git gui)
$ brew install git-gui

(wish)
$ brew install tcl-tk

$ git guiでツールが立ち上がります

wish ってそもそも何?

wish は「Windowing Shell」の略
tcl/tk で書かれたGUIスクリプトを実行するためのプログラムとの事
コマンドラインから wish を起動すると、% プロンプトが表示され、tclのコードを入力できます

$ wish
% 

ここに GUI を作るコードを直接書き込めば、即座にウィンドウ表示されるという軽量な仕組み

tcl / tk / wish をざっくり解説

名称 概要
tcl Tool Command Language。柔軟かつ簡潔なスクリプト言語
tk cl 用の GUI ツールキット。ボタンやウィンドウなどの部品を簡単に作れる
wish 「Windowing Shell」tcl + tk を組み合わせて GUI を実行するための実行環境

tclの作者は?

実際に GUI ボタンを作ってみる

wish を起動して、以下のコードを貼ってみます:

$ button .submit -text "git" -command {
    catch { exec git --version } results;
    puts $results
}
pack .submit

クリックすると git --version が実行され、ターミナルに表示されます:

git version 2.49.0