【捜索生活向上②】コマンド一発で、膨大なチートシートへのアクセス・確認が可能な「cheat.sh」を試用

- 常日頃から捜索に身を捧げる技術者生活を、効率化かつ負担軽減かつ幸福化するために奮闘する記事第二弾。
- 「検索」より「捜索」という言葉を使うことで、純粋に自己の浸りだけを向上する生活。
- 今回は、コマンド一発で膨大なチートシートを呼び出すことができる「cheat.sh」を試用していくことにしよう。

## 概要
- Python製の、簡単に様々な言語やコマンドに対応したチートシートを確認できるコマンドツール。
- コマンドのみならず、ブラウザ上でも利用することができる。
- [公式サイト](https://cheat.sh/)
- [公式GitHub](https://github.com/chubin/cheat.sh)

## 特徴

### 多くの言語やコマンドに対応
- 下記のような様々な情報のチートシートに対応している。
    - 50個以上のプログラミング言語
    - MySQLやRedis等のデータベースシステム
    - 1000個以上のLinuxやUnixのコマンド

### 速度の速さ
- チートシートへのアクセスや応答の速度が速い。
- 公式によると、原則100ms以内で応答するらしい。

### 統一的な情報
- 世界標準のコミュニティ作成のリポジトリ等をチートシートとして、利用しているため、安全かつ実用性のある情報にアクセスすることができる。

### ブラウザでの利用
- コマンドのみならず、ブラウザから直接利用することができるため、様々な場面で利用できる。

### 専用のコマンドクライアント
- curlコマンド(データ通信系コマンド)での利用も可能だが、専用のコマンドクライアントをインストールして、利用することができる。
- クライアントをインストールするメリットは下記。
    - より簡潔な記述でのアクセス
    - zshやfish等にも対応したタブ補完モード
    - 履歴やクリップボードの管理
    - より対話的に利用できるシェルモード

### 各種エディタとの連携
- 拡張機能やプラグインを利用することで、ターミナルやブラウザを開かずに、エディタのみでの完結が可能。
- 主な対応エディタは下記。
    - Visual Studio Code
    - Vim
    - Emacs
    - IntelliJ IDEA


## 結果
- 下記、実際の画面

<img width="558" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/2d952e64-d36d-b7d1-3f2c-e8538bd156a9.png">

- 専用のコマンドクライアントで、より完結な記述

<img width="757" alt="test.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/a5e4bc62-71cd-bc6b-43f8-fc1e30635945.png">

- コマンドクライアントのシェルモードの利用で、更に便利な記述

<img width="528" alt="tesy.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/39171b9f-c05f-cbf2-6212-9b41173e3811.png">

- エディタと統合して、拡張機能で利用することも可能。

 ![test.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/336499/2c01cee3-2449-d718-7da5-b645367a9bcd.gif)

## 作業環境
- Mac OS X 10.13.4
- Homebrew 2.1.4
- Visual Studio Code

## インストール
- **コマンドクライアントを利用せず、curlコマンドを利用する場合は、インストール不要。**

### Mac
- ターミナルを開き、下記のコマンドをうち、**cheat.sh**のコマンドクライアントを導入する。

```bash
# cht.sh導入
$ curl https://cht.sh/:cht.sh | sudo tee /usr/local/bin/cht.sh

# 実行権限の設定
$ sudo chmod +x /usr/local/bin/cht.sh
```

- 必須ではないが、コマンドクライアントをより対話的に利用できる**シェルモード**がある。
- シェルモードを利用するには、下記のコマンドをうち、「rlwrap」というシェル設定ツールをインストールする必要がある。
    - **Homebrew未導入の場合、[こちらを参考](https://brew.sh/index_ja)にする。**

```bash
$ brew install rlwrap
```

### Windows
- Windowsから、cheat.shを利用する場合、[cht.exe](https://github.com/tpanj/cht.exe)というコマンドクライアントをインストールする必要がある。
- 下記のコマンドをうち、実行環境を構築する。
    - ※インストールの際には、**scoop**というWindowsのパッケージ管理ツールを先に導入して置く必要がある。
    - **※未導入の場合は、[こちらを参考](https://blog.satotaichi.info/scoop/)にscoopをインストール**

```
$ scoop install cht
```

- ※cht.exeは、下記以降での記述と異なるため、詳細な操作方法は[こちら](https://github.com/tpanj/cht.exe)

## 基本操作
- 各基本操作は下記。

|内容|curlコマンド|コマンドクライアント|
|:---:|:---:|:---:|
|ファーストページ確認|`curl cheat.sh/`|`cht.sh /`|
|対応言語やコマンド確認|curl cheat.sh/:list &#x7C; grep 言語|cht.sh /:list &#x7C; grep 言語|
|言語別の全チートシート確認|`curl cheat.sh/言語/:list`|`cht.sh 言語 :list`|
|言語別のHelloページ確認|`curl cheat.sh/言語/:hello`|`cht.sh 言語 hello`|
|言語別の基礎文法ページ確認|`curl cheat.sh/言語/:learn`|`cht.sh 言語 :learn`|
|言語やコマンド別のキーワード検索|`curl cheat.sh/言語/キーワード+キーワード2`<br>例 : `curl cheat.sh/言語/parse+json`<br>※curlでの複数キーワード指定は、「+」をつける必要がある。|`cht.sh 言語 キーワード キーワード2`<br>例 : `cht.sh js parse json`|
|強調(ハイライト)表示の無効化|`curl cheat.sh/言語/キーワード?T`|`cht.sh 言語 キーワード ?T`|
|コメントを除いた表示|`curl cheat.sh/言語/キーワード?Q`|`cht.sh 言語 キーワード ?Q`|
|テーマの確認|`curl cht.sh/:styles-demo`|`cht.sh :styles-demo`|
|テーマの設定|`curl cht.sh/言語/キーワード?style=テーマ`|`cht.sh :style=テーマ`|
|シェルモードの起動|不可|`cht.sh --shell`<br>表示 : `cht.sh>`|
|言語別のシェルモード起動|不可|`cht.sh --shell go`<br>表示 : `cht.sh/go>`|
|シェルモードでの操作|不可|`cht.sh>cd js`<br>`cht.sh/js>parse json`|

## エイリアス設定
- 適宜エイリアスを任意に設定しておくことで、短い記述で簡単にチートを呼び出せる。
- 基礎的なエイリアス設定は、下記。
    - 記述場所として、`~/.bashrc`を利用。

```:~/.bashrc
# 「cht 言語 キーワード」とかで呼び出すため。
alias cht='cht.sh /'
# 「chsh 言語」とかでシェルモードを起動するため
alias chsh='cht.sh --shell ' 
# 「hello 言語」とかで各言語のHelloページを表示するため
hello() {
 cht.sh $1 hello
}
# 「learn 言語」とかで各言語の学習ページを表示するため
learn() {
 cht.sh $1 hello
}
```

## エディタとの連携

### Visual Studio Code
- エディタからcheat.shのチートシートにアクセスするため、下記の拡張機能を導入する。
    - [Snippet](https://marketplace.visualstudio.com/items?itemName=vscode-snippet.Snippet)
    - 拡張機能の導入は、ショートカットで`Ctrl(cmd) + Shift + X`をクリックして、「Snippet」と検索して導入する。
- 導入後、各ファイル上で、`Ctrl(cmd) + Shift + P`をクリック。
- 表示される入力欄に**「Snippet: Find Inplace」**と入力して、Enterキーをクリック
- 表示される入力欄にキーワード(例 : hello)を入力して、Enterキーをクリック
- 内容がファイル上に挿入される。

### その他エディタ
- VimやEmacs、Sublime等のエディタでの導入は[こちらを参考](https://github.com/chubin/cheat.sh/blob/master/README.md#editors-integration)にする。

## まとめ
- 今回は、チートシートの呼び出しということで、「カンニングをしてしまった」という、なかなか除去できない経験による、こびりつき思考と戦いながら、記事を書く。
- 「簡単な記述での呼び出し」に魅力を感じて、基礎的なコマンドチートも連続で呼び出してしまう。
- 次回は、利用機会の増えたデータベース関連の捜索術を探していくことにしよう。

## 参考
- https://www.softantenna.com/wp/review/cheat-sh/  
→こちらの記事を参考にしました。大変お世話になりました。
- https://github.com/chubin/cheat.sh/blob/master/README.md  
→公式GitHubです。大変お世話になりました。
- https://githubja.com/chubin/cheat-sh  
→ドキュメントの日本語訳です。大変お世話になりました。