ターミナルで使えるファイラrangerを使ってみる

※本投稿は[TechCommit Advent Calendar 2019](https://qiita.com/advent-calendar/2019/tech-commit)の２日目の記事です。  
##はじめに
こんにちは、フリーランスでプログラマーをやってます [rattcv](https://twitter.com/rattcv) と申します。

僕は普段の開発では主にLinuxを使っていて、割とターミナルエミュレータに閉じこもって作業する事が多いんです。
CLI環境において、作業中のディレクトリ上で編集したいファイルを効率よく探す方法は色々あって、最近は「選択的インターフェイス」と呼ばれるジャンルの [peco](https://github.com/peco/peco) とか [fzf](https://github.com/junegunn/fzf) 等のツールをシェルと組み合わせて使いこなしている例を良く見かけますし、VimやEmacs等、エディタから使う検索プラグインにも色々と便利なものが揃っていますよね。
上記の様な便利なツール類を上げてる記事とかを見て「スゲー便利そうだなー」と思って試してはみるものの、中々手に馴染まず使うのをやめちゃうのが常だったりします。使いこなせたら凄い効率あがりそうなんですけどね笑

それで僕は普段どうしてるかというと、昔っからの慣れで [FDclone](https://hp.vector.co.jp/authors/VA012337/soft/fd/) というMS-DOS用のファイラ"FD"をUnix系OSに移植したファイラをよく使ってます。見た目はこんな感じですね。
![ran01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/9bdf6bf1-6c6e-96cc-d1d1-a6f129db3d3f.png)


これはとても手に馴染んでて、もうしょっちゅう `fd` `fd` って無意識に打っちゃう位多用してますね笑

他にCLIで使えるファイラに [Midnight Commander](https://midnight-commander.org/)っていうのがあります。良く海外のCLI環境のスクリーンショットでお目にかかりますよね。これは使った事がないので今インストールしてみました笑
![ran02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/b67320f6-ed31-3f07-5ad3-ca712e6ea0ee.png)


日本語化もされてて見た目からして使いやすそうな感じですね！時間があったら試してみたいです。

さて、かなり脱線しましたが、ここからが本題の "ranger" です。

##rangerのインストール
[ranger](https://github.com/ranger/ranger) っていうCLIファイラはpython製でとても高機能で、Vimキーバンドで使える上にVimの中にも組み込めるっていう話を聞いてて興味があったんで、今回試してみる事にしました。
トライする環境ですが、今この記事書いてるUbuntu Desktopでやろうと思ったんですが色々イジってるうちにrangerの一部機能が使えなくなっちゃったので、持ち歩き用のLinuxネットブックを使います。こんな感じです。

```
~% cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=17.04
DISTRIB_CODENAME=zesty
DISTRIB_DESCRIPTION="Ubuntu 17.04"
```

Ubuntuのリポジトリのrangerはバージョンが古いんですが、今は手っ取り早く試したいのでサクッと `apt` でインストールしちゃいます。

```
~% sudo apt-get install ranger ffmpegthumbnailer w3m-img xpdf highlight mediainfo atool
```

依存関係も含めてインストールされます。バージョンを確認してみます。

```
~% ranger --version
ranger version: ranger 1.8.1
Python version: 2.7.13 (default, Nov 23 2017, 22:12:08) [GCC 6.3.0]
```

初期設定の為、下記コマンドを打ちます。

```
~% ranger --copy-config=all
```

上記で `$HOME/.config/ranger` 配下にデフォルトの設定ファイルが作成されます。
設定ファイルを以下の様に編集します。


```$HOME/.config/ranger/rc.conf
set draw_borders true
```

```$HOME/.config/ranger/scope.sh
# Image preview for video, disabled by default.:
   video/*)
       ffmpegthumbnailer -i "$path" -o "$cached" -s 0 && exit 6 || exit 1;;

# PDF documents:
  pdf)
      try pdftoppm -jpeg -singlefile "$path" "$cached" && mv "$cached.jpg" "$cached" && exit 6 || exit 1;;
```

ここまでrangerを一度起動してみます。

```
~% ranger
```

このファイラの真骨頂はVimキーバインド(`H` `J` `K` `L`)でどんどんディレクトリに潜っていけて、最終的なファイル選択により一番右側にファイルのプレビューが表示可能な所だと思います。
上記設定によりテキストファイルはSyntaxHighlightがかかった状態で、PDFや各種画像ファイル、動画のサムネイルもプレビュー表示出来てしまいます。
![n5d8k-2pjbq.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/f027e28a-92f3-465f-5306-e2fedf062766.gif)

プレビュー表示から更に`L`押下で、当該ファイルを適切なアプリケーションで開く事ができます。なかなか優れものですよね。

##ファイルのアイコン表示を試してみる
僕はターミナルには [Cicaフォント](https://github.com/miiton/Cica) を使用する様に設定してますが、このフォントはアイコンフォントを包括しているのでranger上でもファイルにアイコン表示をする事が可能です。

上記のフォントをインストールした状態で、[ranger_devicons] (https://github.com/alexanderjeurissen/ranger_devicons) を導入します。

```
~% git clone https://github.com/alexanderjeurissen/ranger_devicons.git
~% cd ranger_devicons
~/ranger_devicons% make install
```

この状態でrangerを起動するとこんな感じになります。
![abc.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13048/4654952c-8d5b-2dbd-d6f9-357732bbb5ca.png)
結構イイ感じですよね。
他にもrangerには色々便利な設定がたくさんあるので、以下の参考サイトを参照してみて頂ければと思います。
[・ArchWiki - ranger](https://wiki.archlinux.jp/index.php/Ranger)
[・CLIファイルマネージャrangerの基本設定](https://qiita.com/ssh0/items/3d71da415953003d47d7)
[・Rangerを少し試した](http://blawat2015.no-ip.com/~mieki256/diary/20190321.html)

##他のOSでの使用について
MacOSでは `apt-get` の代わりにHomebrewを使って `brew` コマンドでUbuntuと同様にインストール出来ると思います（すいません、僕Mac持ってないんですが多分出来ます）。iTrem2の画像表示機能を使ってファイルプレビューする場合は、 `rc.conf` を

```
set preview_images_method iterm2
```

に修正すればイケる様です。


Windowsでは、Linuxディストリビューションが使えるWSLとターミナルエミュレータをインストールすればこちらも同様に使用可能です。

WSL&wslttyを導入する記事を[こちら](https://qiita.com/rattcv/items/cecbd0d20d1882989fc0)に書きましたので、参考にして頂ければと思います。
~~ただし、WSLではw3m-img(の画像表示用のツールであるw3mimgdisplay)が使えないので画像のプレビューが現状出来ないです。これは頑張れば出来る様になりそうな気がするので、成功しましたらお知らせします笑~~（※追記参照）

ではでは、是非是非CLIファイラーの世界で遊んでみてください！

##追記：Windowsでの画像プレビュー機能について

下記リンクのドキュメント上に「Mintty では現状 Sixel だけではなく iTerm2 互換の画像表示機能もサポートされている」との記述を発見しました。
https://github.com/mintty/mintty/wiki/Tips#image-support
故に MacOS の場合と同様、 `rc.conf` に

```
set preview_images_method iterm2
```
と記述する事でイメージファイルのプレビューが可能になります。
私は WSL2 で試しましたが、恐らく WSL1 / Cygwin / MSYS2 等、他の Windows 上の Mintty が使える環境でも画像表示が可能だと思います！