blog.euxn.me

Windows 上でのUnix 開発環境 2017年版

2017-12-01 Fri.

まえおき

この記事は FUJITSU Advent Calendar 2017 の 1 日目です。FUJITSU グループ会社勤務の @euxn23 です。

PC メーカー系勤務だと支給マシンが Windows ということがあるかと思います。

こういうときに一般的なのは VM を作成して SSH クライアントから接続すると思いますが、それではクリップボードや日本語文字列周りの不具合に遭遇することがあります。

それらを解決するために Windows 上で Unix 環境を快適に使う方法をいくつか試したので、それを書き記します。

求める条件

  • クリップボードが Unix 内と共通化されている
  • GUI でファイルが操作できる
  • まともなターミナルが使える
  • 日本語表示の問題が発生しない

現状の問題点

  • rlogin 等の ssh クライアントから ssh した場合、tmux 等で日本語の挙動がおかしくなる問題
  • VM との共有フォルダの場合、Windows のファイル path 長制限に引っかかりライブラリのインストール等が落ちたり、シンボリックリンクが貼れなかったりする問題

方法

1. Bash on Windows から X11 サーバに転送する

Windows 10 の場合はこれで解決です。

VcXsrv 等の X11 サーバを Windows に入れ、Bash 側で export DISPLAY=localhost:0.0 を指定すれば使えます。

簡単に試す場合は $ xeyes 等でできます。

VcXsrv で起動したターミナルの場合、vim や tmux を含め、クリップボードも Windows 側と共有されるため非常に便利です。

また、日本語の問題も発生していないように見えます。

2. SSH の X11 Forwarding 機能を使用してホストの X11 サーバに転送する

Windows 10 以外の場合は、多分これが良いです。

X11 サーバと busybox ベースの Unix シェルを内臓した MobaXTerm が良いです。

SSH コマンドも入っているため、 $ ssh -X オプションを使用して手元に X11 Forwarding できます。

ファイラーやエディタも Windows 側の X サーバで操作すれことで、まるでローカルにあるファイルのように操作することができます。

こちらも上記同様、Windows 由来の日本語の問題は発生しないように見えます。(Linux 側の日本語設定はしなければなりませんが)

まとめ

Windows 側に X11 サーバを立てるのが良さそうです。


Other Works
2024-12-01 Sun.
OpenAPI Spec を出力できる DSL、TypeSpec の実践例
- ドワンゴ教育サービス開発者ブログ

2024-11-16 Sat.
型付き API リクエストを実現するいくつかの手法とその選択
- TSKaigi Kansai 2024

2024-09-10 Tue.
corepack が標準同梱じゃなくなる未来、 mise でパッケージマネージャを管理する
- Zenn

2024-09-10 Tue.
言語環境の管理は *env や *vm を超えて、 mise へ
- Zenn

2024-06-28 Fri.
TypeSpec を使い倒してる
- Kyoto.js 22

2024-05-11 Sat.
Powerfully Typed TypeScript
- TSKaigi 2024

2024-05-10 Fri.
pnpm の node_modules を探検して理解しよう
- ドワンゴ教育サービス開発者ブログ

2024-03-17 Sun.
neverthrow で局所的に Result 型を使い、 try-catch より安全に記述する
- Zenn

2023-12-20 Wed.
レガシーブラウザ向けのビルドオプションを剪定する
- ドワンゴ教育サービス開発者ブログ

2023-05-26 Fri.
Next.js で dynamic import を使い Client だけで動かす Component を実現する
- Zenn

2023-05-02 Tue.
Node.js でファイル名から拡張子を取り除く/取り出すために path.parse を使う
- Zenn

2023-02-27 Mon.
WSL2 で外部からアクセス可能にするために bridge mode を有効にする
- Zenn

2023-01-26 Thu.
init.vim & dein から init.lua & lazy.nvim へ、シンプル設定で移行した
- Zenn

2023-01-13 Fri.
kindle の本をブクログ形式の csv でエクスポートする@2023初春
- Zenn

2023-01-10 Tue.
自宅サーバの移設に際して docker から nerdctl に移行した
- Zenn

2023-01-10 Tue.
自宅サーバを rootless に移行した際のトラブル対応
- Zenn

2021-11-11 Thu.
並列実行した Promise で throw されても全てハンドルしたいときの方法(allSettled, finally, etc...)
- Zenn