M1チップ搭載Macにccat + enhancdを入れる

前置き

一ヶ月くらい前の話なんですが、最近新型Mac Miniを買いました。M1チップ搭載のやつです。もともと使ってたWindows機は10年くらい前のHPのワークステーションを中古で買ったもので、パーツを取り替えたりした後は特に問題もなく使っていたのですが、さすがに古くなってきて音もうるさいし思ったより消費電力も大きそうだったので買い替えを検討していたところ、AppleのM1チップがスゴいらしいぞという話を耳にして、10万かそこらでこの性能なら買い!と思ったので買ってしまいました。ほとんど衝動買いに近いです。

買ってみて思ったのは、デスクトップ環境で使うのであればWindowsMac OSも大して変わらないのではということです。仕事でMacbookを使うようになり、その使いやすさに驚き「Macめっちゃええやん、Windows(笑)」となっていたのですが、いざデスクトップ用Macを買ってみるとこれはこれで問題(というほどでもないですが、気に入らない点)がそこそこあって、期待していたほどの感動みたいなのはなかったです。Steamのゲームが動かないのは百も承知だったんですが、ロジクールのマウスのドライバがうまいこと動いてくれなかったのは困りました。Macが使いやすいというかMacbookが使いやすいんだなぁと再認識しました。

前置きが長くなりましたが、Mac OSで個人的には必須ツールとして使っているenhancdというツールがあって、M1 Mac特有のあれこれでインストールに苦労したので布教を兼ねて導入手順を買いておきます。

enhancdとは

ターミナルのディレクトリ移動を高速化&快適にするものです。詳しくは作者さんの記事を読んでいただければわかると思います。

qiita.com

はっきり言ってしまうとこれは神ツールです。Mac使いの人はターミナルをカスタマイズする方が多いと思うのですが、自分はめんどいのでこれ一本(と簡単なシェルスクリプト)でやっています。逆にいうとこれさえあればターミナルでの作業は特に問題なく行えると思います。知らない人はぜひ一度使ってみていただければという感じです。

余談ですが、Macに買い替えた最大の理由は上記プラグインの存在などもあり、Windowsコマンドラインが(cmderなどのツールを使っても)Macに比べ使いづらかった点があります。が、最近Windows Consoleとかいうのが出たりWSLが新しくなったりして、Windowsでもbashが使える!と思って導入してみたのですが、思っていた以上にWSLが意味不明な出来だったので別にそうでもなかったです。

導入方法

少し前からMacのターミナルはzshがデフォルトになっていますが、自分はbashを使っているので以下ではbashでの作業を想定しています。zshの場合は適宜読み替えていただければと思います。

homebrewを入れる

まず各種ライブラリ等を導入するのに必要なHomebewを入れます。公式サイトに乗っているインストールコマンドをターミナルに流すだけです。

macOS(またはLinux)用パッケージマネージャー — Homebrew

もしかしたらインストールに失敗するかもしれませんが、そのときは以下のような対応が必要になると思います。よくわかってないですが自分は一応設定しています。

qiita.com

インストール後、以下のように示されるのでecho~とeval~から始まるコマンドを忘れずに入力しておきます。

==> Next steps:
- Add Homebrew to your PATH in /Users/username/.zprofile:
    echo 'eval $(/opt/homebrew/bin/brew shellenv)' >> /Users/username/.zprofile
    eval $(/opt/homebrew/bin/brew shellenv)

またeval $(/opt/homebrew/bin/brew shellenv)のほうは後で必要になるのでメモっておきます。

ccatを入れる

enhancdのインストール過程でccatというツールが必要になるのですが、これをbrewコマンドで入れようとすると失敗します。表示されるコマンドをあれこれ試していると以下のようなエラーが出て止まります。

go: cannot find main module; see 'go help modules'

仕方がないので、ソースコードを直接ビルドします。

github.com

ここでGOPATHというものを通す必要があります。go言語全然知らないのであれなんですが、goは全ての作業ディレクトリを一つのディレクトリ(ワークスペース)以下に配置するのが基本らしく、それを用意する必要があります。

まず好きな場所にgo用のディレクトリを作ります。自分は/Users/username/goにしました。

ディレクトリを作成したら、.bash_profileに以下を追記します。

export GOPATH=/Users/username/go
export PATH=$GOPATH/bin:$PATH

source ~/.bash_profileを実行した後、echo $GOPATHで指定した場所が表示されることを確認しておきます。go env GOPATHでもいいです。

その後、以下のコマンドでccatをインストールします。

go get -u github.com/owenthereal/ccat

終わったらccatコマンドが認識されていることを確認します。

参考:

Golang 1.11でGO111MODULE=onの状態でグローバルにgo getできない時の対処法 - Qiita
Go のワークスペースの考え方 (GOPATH) | まくまくHugo/Goノート

enhancdのインストール、.bash_profileの編集

いよいよenhancdをインストールします。といっても基本はシェルスクリプトなのでダウンロードしてパスを通すだけです。

github.com

cd ~
git clone https://github.com/b4b4r07/enhancd
chflags hidden enhancd #任意
echo "source ~/enhancd/init.sh"  >> ~/.bash_profile
source ~/.bash_profile

で、色々やっているとなぜかbrewコマンドとかgoコマンドなどが認識されなくなったりします。理由はよくわからないんですが、Homebrewインストール時に表示されるeval $(/opt/homebrew/bin/brew shellenv)を再度実行すると直ったので、これも.bash_profileに追記しておきます。

最終的には.bash_profileの内容は以下のようになっていると思います。

export GOPATH=/Users/nomurashunta/go
export PATH=$GOPATH/bin:$PATH
eval $(/opt/homebrew/bin/brew shellenv)
source ~/enhancd/init.sh

これで作業は完了です。 cd -と入力して移動先ディレクトリの候補一覧が表示されることを確認します。

追記:Linux(WSL)編

上でMac購入がどうたら書いたんですが、実は購入後半年もしないうちに売却してしまいました。理由は自分が普段使っているアプリのMac版(Clip Studio PaintやUnityなど)の挙動が、どうも自分が想定していた以上にWindowsのものと異なっており、いくら慣れが必要と言ってもその違和感を抱えたまま使い続けることは難しいなと思ったからです。特に前者はWindows版に比べるとMac向けアプリの性質上かは知りませんが、これじゃない感がすごく強い上、根本的な問題として最新のドライバーを入れているにも関わらず使っているペンタブレットの書き味みたいなのがWindowsと大きく異なったため、実質的にこれが決定打となりました。加えて言うとロジクールのマウスのドライバーが使えなかったのも理由として大きかったです。

ともかく、売ったお金でWindows機を買い替え(中身自体は据え置き)、これを機にWindowsでの開発環境を整えるかという事で、手始めにWSLをもう少し触ってみるかということで、それならやはりenhancdはどうしても欲しいということで、WSLのLinuxに導入してみたメモを残します。

Linuxにenhancdを導入する

上述の通りenhancd本体はシェルスクリプトなので、Macではhomebrewで入れていたfzyとccatを導入できれば動くはずです。 まずgoを入れ、上に書いた通りの方法で直接ccatをインストールします。。

www.virment.com

続いてfzyを直接コンパイルして使えるようにします。そのまま入れようとするとmakeとgccが足りないと怒られるので入れておきます。WSLの問題かはわかりませんが、sudo apt-get updateを実行しないと404みたいなエラーが出るので更新必須です。

sudo apt-get update
sudo apt-get install make
sudo apt-get install gcc

これが終わったらfzyのリポジトリからソースをダウンロードし、コンパイルします。

git clone https://github.com/jhawthorn/fzy.git
cd fzy
sudo make
sudo make install

fzyコマンドが認識されているのを確認したら、あとはenhancdを入れるだけです。

cd ~
git clone https://github.com/b4b4r07/enhancd
chflags hidden enhancd #任意
echo "source ~/enhancd/init.sh"  >> ~/.bash_profile
source ~/.bash_profile

cd -でフォルダの一覧が表示されることを確認します。

ちなみに自分はmacを使う場合enhancdでターミナル上からディレクトリを移動し、GUI操作が必要な時はopenコマンドで開くのが基本なのですが、WSL上でのopenコマンドはexplorer.exeに相当します。いちいち打つのは面倒なので適当にエイリアスなど設定しておくとよいと思います。

alias open='explorer.exe $@'

が、残念なことにexplorer.exeは完全ではなく、例えば以下のコマンドでホームディレクトリを開こうとすると、なぜかドキュメントフォルダが開きます。存在しないディレクトリを指定しても同じくドキュメントが開きます。

explorer.exe ~/

あと気付いたのですが細かい点として、cd cとするとcドライブ直下(/mnt/c)に移動できるのですが、VS CodeCLIツールでファイルを開くcodeコマンドを実行する際、/mnt/c以外のディレクトリにいるときにcode ~/aaa.txtとした場合は/Ubuntu-20.04/home/username/aaa.txtが開くにも関わらず、/mnt/cにいるときにcode ~/aaa.txtとするとc:/home/username/aaa.txtが開きます。よくわかりません‥‥。