M1チップ搭載Macにccat + enhancdを入れる
前置き
一ヶ月くらい前の話なんですが、最近新型Mac Miniを買いました。M1チップ搭載のやつです。もともと使ってたWindows機は10年くらい前のHPのワークステーションを中古で買ったもので、パーツを取り替えたりした後は特に問題もなく使っていたのですが、さすがに古くなってきて音もうるさいし思ったより消費電力も大きそうだったので買い替えを検討していたところ、AppleのM1チップがスゴいらしいぞという話を耳にして、10万かそこらでこの性能なら買い!と思ったので買ってしまいました。ほとんど衝動買いに近いです。
買ってみて思ったのは、デスクトップ環境で使うのであればWindowsもMac OSも大して変わらないのではということです。仕事でMacbookを使うようになり、その使いやすさに驚き「Macめっちゃええやん、Windows(笑)」となっていたのですが、いざデスクトップ用Macを買ってみるとこれはこれで問題(というほどでもないですが、気に入らない点)がそこそこあって、期待していたほどの感動みたいなのはなかったです。Steamのゲームが動かないのは百も承知だったんですが、ロジクールのマウスのドライバがうまいこと動いてくれなかったのは困りました。Macが使いやすいというかMacbookが使いやすいんだなぁと再認識しました。
前置きが長くなりましたが、Mac OSで個人的には必須ツールとして使っているenhancdというツールがあって、M1 Mac特有のあれこれでインストールに苦労したので布教を兼ねて導入手順を買いておきます。
enhancdとは
ターミナルのディレクトリ移動を高速化&快適にするものです。詳しくは作者さんの記事を読んでいただければわかると思います。
はっきり言ってしまうとこれは神ツールです。Mac使いの人はターミナルをカスタマイズする方が多いと思うのですが、自分はめんどいのでこれ一本(と簡単なシェルスクリプト)でやっています。逆にいうとこれさえあればターミナルでの作業は特に問題なく行えると思います。知らない人はぜひ一度使ってみていただければという感じです。
余談ですが、Macに買い替えた最大の理由は上記プラグインの存在などもあり、Windowsのコマンドラインが(cmderなどのツールを使っても)Macに比べ使いづらかった点があります。が、最近Windows Consoleとかいうのが出たりWSLが新しくなったりして、Windowsでもbashが使える!と思って導入してみたのですが、思っていた以上にWSLが意味不明な出来だったので別にそうでもなかったです。
導入方法
少し前からMacのターミナルはzshがデフォルトになっていますが、自分はbashを使っているので以下ではbashでの作業を想定しています。zshの場合は適宜読み替えていただければと思います。
homebrewを入れる
まず各種ライブラリ等を導入するのに必要なHomebewを入れます。公式サイトに乗っているインストールコマンドをターミナルに流すだけです。
macOS(またはLinux)用パッケージマネージャー — Homebrew
もしかしたらインストールに失敗するかもしれませんが、そのときは以下のような対応が必要になると思います。よくわかってないですが自分は一応設定しています。
インストール後、以下のように示されるので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'
仕方がないので、ソースコードを直接ビルドします。
ここで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をインストールします。といっても基本はシェルスクリプトなのでダウンロードしてパスを通すだけです。
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をインストールします。。
続いて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 CodeのCLIツールでファイルを開くcode
コマンドを実行する際、/mnt/c
以外のディレクトリにいるときにcode ~/aaa.txt
とした場合は/Ubuntu-20.04/home/username/aaa.txt
が開くにも関わらず、/mnt/c
にいるときにcode ~/aaa.txt
とするとc:/home/username/aaa.txt
が開きます。よくわかりません‥‥。