WindowsTerminalとSixel

- このエントリーは、2024/12 - 2025/01 の個人的な技術情報エントリーです。
## 要約
### 古くて（これは事実）、新しい（？）技術、Sixelと、サーバ管理/ モニタリング, Terminal利用の技術メモ
#### Sixelとは：概要
- Sixel（シクセル）は、1980年代にDEC（Digital Equipment Corporation）が開発したグラフィック形式で、主にVTシリーズの端末（例: VT240、VT340）で画像を表示するために使用されました。
- 名前の由来は「six elements」（6つの要素）で、1バイトを6ビットのデータとして扱い、垂直方向に6ピクセルのブロックを描画する仕組みです。
- テキストベースの端末で画像を表示する手段として設計され、エスケープシーケンスを用いて端末に直接グラフィックデータを送信します。
- 現代では、レトロコンピューティングやターミナルエミュレータ（例: xterm、mlterm）で使われるニッチな技術として再注目されています。
- 特に、SSH経由でリモートホスト上の画像を表示するような用途で活用されることがあります。

#### Sixel：技術的なトピック
1. データ構造とエンコーディング
    - Sixelは、画像データを6ビット単位でエンコードし、ASCII文字（63〜126の範囲）として表現します。1列6ピクセルの縦長ブロックを定義し、水平方向に並べて画像を構築します。カラー対応もあり、VT340では最大16色のパレットをサポート。現代のlibsixelのようなライブラリでは、24ビットカラーに拡張されています。
1. エスケープシーケンス
    - Sixelデータの送信は、特定のエスケープシーケンス（例: \ePq で開始、\e\ で終了）で制御されます。これにより、端末がグラフィックモードに切り替わり、データを描画。制御コマンドで色や解像度を指定可能です。
1. パフォーマンスと最適化
    - 元のSixelは低解像度・低色数向けでしたが、最新の実装ではディザリングや量子化を活用し、高品質な画像を高速に描画。たとえば、400x300ピクセルの画像を17msで処理するライブラリも存在します。ただし、大量のデータを扱う場合、ターミナル側の処理速度がボトルネックになることもあります。
1. 応用とツール
    - 現代では、libsixelなどのライブラリがSixel変換を担い、w3m（ウェブブラウザ）やImageMagickと連携して画像表示を実現。ターミナルエミュレータでのリアルタイム描画や、tmux/screenとの互換性向上も技術的挑戦として挙げられます。

### 基本となるSixel環境の整備
- 2025年3月時点で、Windows TerminalはSixelグラフィック形式を正式にサポートしており、特にバージョン1.22（2024年8月プレビュー公開、2025年2月安定版リリース）以降で広く利用可能となっています。この機能は、ターミナル内に sixel ライブラリを用いて画像やグラフィックを表示することを可能年、データサイエンティストやエンジニアを中心に再び Sixel の利用が活発化しているようです。
- コミュニティからのフィードバックでは、Sixelサポートが追加されたことで、リモートサーバー上での作業効率が向上したとの声が多く、特にWSL2（Windows Subsystem for Linux）やSSH経由での利用が活発です。

1. Windows Terminalの確認
   - つぎような　バージョン1.22　以降となっていれば問題ありません。（もしなっていない倍は、最新化しましょう）
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3985899/5aada124-84eb-4aa2-8d5d-6c15203e8dd2.png)

1. Sixelアートのサンプルを次のURLあたりから取得、cat（CMD.exeなら TYPE） 出来るようにしておきます。
   - https://github.com/PhMajerus/ANSI-art
1. 展開したファイルを cat します。以降実行例です。表示できれば、Sixel対応したWindowsTerminalが確認できた状態です。
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3985899/c8213a4b-bf21-401e-a6ab-b07fcb61648b.png)
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3985899/68e8eafd-bd73-4fb7-b8b0-5cf41a2360f3.png)

1. 次に Msys2 を導入します。ここでは簡単に パッケージマネージャ scoop を使って導入します。scoop の導入は公式の次の2個のPowerShellコマンドで、導入可能です。
    - scoop 公式 :: `` https://scoop.sh/ ``
    - 導入のための2個のPowerShellコマンド
       ```PowerShell
         Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
         Invoke-RestMethod -Uri https://get.scoop.sh | Invoke-Expression
       ```
1. scoop の環境を整えます。aria2（ https://aria2.github.io , ) を導入します。
   - aria2の導入。
      ```Powershell
        scoop install aria2
      ```
1. 続いて、scoop を使って Msys2 を導入（libsixelライブラリのビルド環境を用意）します。導入は、コマンド1個です。
   - scoop をつかって Msys2 ( http://www.msys2.org ) を導入。
      ```Powershell
        scoop install msys2
      ```
      そこそののインストールログが確認できれば問題ありません。
   - インストールの最後に導入した aria2, msys2 のインストール状態を確認しておきます。
      ```Powershell
        scoop info aria2
        scoop info msys2
      ```
      こういったステータスが確認できれば、問題ないはずです。
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3985899/00fff3cd-9600-46ce-b176-07e84782962c.png)
  
1. msys2 の初期化を行います。かなり盛大な初期化ログが流れますが、しばらく待ちます。
1. libsixel（img2sixielコマンド）のビルドを行います。まずは、msys2 で、libsixelのリポジトリをCloneします。
   - `` git clone https://github.com/saitoha/libsixel ``
1. Cloneした、libsixwlのライブラリに入り、ビルドします。
   - ほぼ、*NIX/ MacOSと変わりません。
      ```
        cd libsixel
        ./configure
        make
        make install
        # インストールしたコマンドを確認する。
        ls ./converters/img2sixel.exe
        which img2sixel
      ```
1. コマンドで表示を確認します。
   - `` img2sixel.exe syui.png ```
   - 表示例
   - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3985899/2f4ddf88-16de-4e6e-b6fd-816fc61fac96.png)