こんにちは,しまさん(@shimasan0x00)です.
私は高専に入ってすぐはWindows PCを使っていたはずなのですが,卒業していたときに手に持っていたのはMacbook Proでした.
大学に移ってからは演習で使うPCはLinuxだったし,研究室のPCはiMacなのでつい最近までWindowsは触ってませんでした.
ですが今年消費税が10%になるということで自宅環境で機械学習したいというのとGameしたいと思って自作Windows PCを組みました.

そこで久々にWindowsを触ることになります.
シェルがデフォルトでcmd.exe,PowerShellがあったのですがPowerShellの独特のエグミに体がついていけませんでした(好きな人もいると思いますがごめんなさい).
あと,WindowsとPythonの相性が微妙でウッてなりましたね.
結局心が折れてAnacondaを使い,cupyインストールしてhogehogeやってました.
AppleとNvidiaが仲良ければなぁなんて夢を見つつPowerShellを我慢して使ってたのですがどうも我慢してたのは自分が情弱だったからっぽい.
最近Mac側のシェルをzshからxonsh on zshに変更したときに色々調べたらどうもWindowsでxonsh on bashの構成がいけるらしい.
PowerShellの独特の表現から逃げれる&Macで使用しているxonshrcを使える…となればやるしかない!!
環境
- Windows10(ver.1809)
- Python 3.7.3(Anaconda)
スポンサーリンク
Anacondaのインストール
ここからインストーラをダウンロードして,指示に従うだけでokです.
Anacondaをインストールして使えるものについては過去記事を参照ください.

スポンサーリンク
xonshのインストール
Anacondaを使用している人は以下の2行を実行してしまえば終了です.
conda config --add channels conda-forge
conda install xonsh
xonsh環境の構築
まず,xonshに関してですがやはりばんくしさんのブログは非常に勉強になります.
xonshのAdvent Calenderもおすすめです(といってもこれもばんくしさんが作成していますが).今年もあるのかな?
Macだと現状こんな感じです.

xonshrc書くの面倒ならとりあえずばんくしさんのこの記事のrcをコピペするだけで超便利になります.
注意点
- タブ補完でエラーになる??
以下を追加すればいいらしい(けどWindowsってやっぱり地雷多くない??)
import _locale
_locale._getdefaultlocale = (lambda *args: ['ja_JP', 'utf_8'])
- 単純なlsコマンドだとエラーが出る
以下のようにls.exe
とすればいいみたい(ってやっぱりじら…)
aliases['ls'] = "ls.exe --color=auto"
- translate-shellをインストールするときにmakeコマンドがない
私の場合makeコマンドがなかったので上記サイトを参考にインストールしました.
translate-shellはGit Bashを管理者権限で立ち上げてからmakeコマンドでインストールしましょう.
- cursesがないと言われる
Windows用にライブラリが用意されているようです.
cursesをインポートしている部分を「windows-curse」に変えましょう.
スポンサーリンク
Git for Windowsのインストール
ここからDownloadして,インストールします.
日本語周りのことについて困ったらこのサイトを見ればよさそうです.
.bashrcの設定
xonshの設定が終わったら~/.bashrc
の末尾に
python -m xonsh
を追加してxonshが起動するようにすればOKです.
※私の環境だと「xonsh」コマンドを実行すると止まってしまうため「ipython」に書き換えて実行させてます.環境変数がうまくいってないのかもです.
とりあえず起動

このlsは先程のls.exe部分を記述していない場合です.color設定を追加する場合にls.exeじゃないといけないみたいですね.
さいごに
ようやくPoerShellから離脱することはできました.
でもどうせWindows固有のあれこれでUNIX系OSでは必要ない対処をしなくてはいけなかったりうまくいかなかったりするんだろうなと思います.
やはり石仮面と矢から逃れることはできないんでしょうね.
p.s.
日本語フォントがあれだったので書いたあとにRicty Diminishedに変えました.