Go や Node.js でターミナルのサイズを取得する

コマンドラインツールを作っていて、実行されているターミナルの幅や行数を知りたいなと思う時があったので調べた。

Go 言語での方法

Go 言語では terminal というパッケージを使うと取得できる。

$ go version
go version go1.19 darwin/amd64

# 適当にモジュール (プロジェクト) を作る → go.mod が生成される
$ go mod init my-module

# terminal パッケージをインストールする → go.mod に追記され go.sum が生成される
$ go get golang.org/x/crypto/ssh/terminal

以下のように呼び出して利用できる。

package main

import (
  "fmt"
  "os"
  "syscall"
  "golang.org/x/crypto/ssh/terminal"
)

func main() {
  var width int
  var height int
  var err error
  width, height, err = terminal.GetSize(syscall.Stdin)
  
  if err != nil {
    fmt.Printf("Error : %+v", err)
    os.Exit(1)
  }
  
  fmt.Printf("Width  : %d\n", width)
  fmt.Printf("Height : %d\n", height)
}

実行してみる。

$ go run ./main.go
Width  : 72
Height : 17

取れた。

Node.js での方法

Node.js はもっと簡単というか、process.stdout から取得できる。

console.log('Width  : ', process.stdout.columns);
console.log('Height : ', process.stdout.rows);
// `process.stderr` にも同じプロパティがある

コレだけで OK。

以上。