Android開発業務中に使用するショートカット集と周辺のアレコレ

## はじめに

この記事はAndroid開発業務中に頻繁に使用しているショートカットのチートシートになります。
社内勉強会で１時間kotlinの話ではなくショートカットで作業効率化する方法、という題材でプレゼンするという稀有すぎる機会をいただいて、その際に自作のショートカット集まで作ったので、どこかで公開しようということになりました。
社内勉強会用にラフに書いたチートシートを流用しているので読みづらかったらすみません :bow: 
`Android`のAdvent calendarの題材にふさわしいのか悩みましたが、効率的にアウトプットするノウハウとして捉えていただければと思います。

## この記事の読み方

- まず**この記事にLGTMとストック**してください
- バーっと流し見して、「へーこんなのあるんだー」と思ってください。
- 普段の作業で「あ、こんなショートカットあったな」と思い返してください
    - その時に改めてこの記事を読むか調べ直すかをしてショートカットを覚えてください。
- そして**この記事にLGTMとストック**してください
- **絶対に読み込まないでください**。　飽きてショートカットを覚える気力がなくなってしまいます。
- 最後に**この記事にLGTMとストック**してください

<details><summary>前段 - ショートカットばっかり勉強する人の ~~思考~~ 言い訳 (記事の本題じゃないので見たい人は見て) </summary>
開発業務に関わらず、PCを使用して効率よくアウトプットするためには、`早く操作する(手数を増やす)` か `少ない操作で多くの情報をアウトプットする(１手あたりの情報量を増やす)`必要があります。
[こちら](https://www.slideshare.net/serverworks/emacs-110634270)の記述を借りると、
![スクリーンショット 2021-12-01 14.50.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/4631c41b-88af-3e28-f0fa-1b5309702a62.png)
アウトプット効率のボトルネックとなっているのがキー操作で、キー操作の改善はアウトプット効率の向上に大きく影響するといえます。
特に十字キーやesc, fnキーのようにキーボードの端にあってホームポジションから離れるキー操作や、マウス操作を減らすと効率が上がるわけです。
</details>

## コマンド集

### 共通

アプリに限らず多くの場面で使えます

#### カーソル移動

| コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- |
| ctrl + n | 下(次の行)に移動 | **N**ext line | ☆☆☆ |
| ctrl + p | 上(前の行)に移動 | **P**revious line | ☆☆☆ |
| ctrl + b | 1つ後ろに移動 | **B**ackward | ☆   |
| ctrl + f | 1つ前に移動 | **F**orward | ☆   |
| ctrl + a | 行の先頭に移動 | line he**A**d | ☆☆☆ |
| ctrl + e | 行の最後に移動 | line **E**nd | ☆☆☆ |
| ctrl + v | １画面分下へ |     |     |
| opt + v | １画面分上へ |     |     |

<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/bad0cf4d-2aa8-943d-b6f6-bcc727b509e5.png"/>


`ctrl + n` と `ctrl + p`は特にいろんな場面で使えます
([以前の記事](https://qiita.com/s-kamada/items/8369b28d6d634c472c9f#np%E3%81%8C%E4%BD%BF%E3%81%88%E3%82%8B%E5%A0%B4%E6%89%80)参照)

- Chrome 検索候補の上下
- IDEの上下行への移動、変換候補の上下移動
- ターミナルのコマンド履歴

(Android Studioでもいけます)
<img width=400 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/111f994f-d373-f634-648e-c9d3165410e8.gif"/>


#### 文字編集、変換

| コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- |
| ctrl + d | カーソルの次の文字を削除 | **D**elete | ☆☆ カーソル移動と組み合わせると強い |
| ctrl + k | カーソル~行末まで削除 | **K**ill line | ☆ たまに |
| ctrl + y | `ctrl + k`で削除した文字を貼り付け | **Y**ank |     |
| ctrl + t | カーソルの左右にある文字を入れ替え | **T**ranspose | ☆ typoした時にたまに使う |
| ctrl + k | カタカナ変換 |     | ☆☆ カタカナ語を誤変換 -> 打ち直しをする時とか。スペース連打するよりよほど早い |
| ctrl + j | ひらがな変換 |     |     |
| ctrl + l | 全角英数字変換 |     |     |
| ctrl + ; | 半角英数字に変換 |     | ☆☆☆ かなモードで英単語を入力しちゃった時にこれで一発 |

#### その他

いろんなアプリで多くの場合共通して使える機能。新しいアプリをインストールしたらとりあえず押してみて欲しい

| コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- |
| cmd + , | 今使用してるアプリの「設定」を開く |     | ☆どんなアプリでも大体使える、たまに`cmd + .`だったり |
| cmd + tab | アプリ切り替え |     | ☆☆☆「アプリを使った順」に並んでいるため、連続でやると最後2つのアプリを行ったり来たりできる |
| cmd + 1~9 | **タブ等切り替え** |     | ☆☆☆ブラウザのタブのように「並んでいるもの」は使えることが多い。slackはWorkspace切り替え、ASは色々な機能のwindowに飛べる |
| cmd + (shift) + tab | 隣のタブ等に移動 |     | ブラウザのタブのように「並んでいるもの」は使えることが多い。 |

**タブ等切り替え**
特にブラウザのタブの場合、`cmd+1~8`は`左から1~8番目`、`cmd+9`は`一番右のタブ`になることが多い。
そのため、**`左から8つと一番右のタブ`に最近よく使うタブを置くようになる**

### Android studio

**※ コマンドを個別に設定できるので、ここの記載と違う可能性も高いです。こういうコマンドがあるんだなー程度に。**
**※ `Preferences(cmd + ,) > Keymap`から自分でカスタマイズできるので、「この操作がスパッとできれば良いのになぁ」と思った人はいじってみて。**

| コマンド名 | コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- | --- |
| Annotate | shift + cmd + @ | その行を最後に変更した人がわかる |     | ☆ もともとXcodeでこの機能を多用していたので、Androidやる時にショートカットを同じにした |
| Open... | opt + shift + cmd + o | 他のプロジェクトを開く | **O**pen | ☆ optionとshiftとcommandを押して...ではなく、**下側にある特殊キーを全部押してo**と覚えてます。自分で設定したキーバインドが覚えれないから手をつけられない人は、**`「自分でカスタマイズするキーは全部cmd opt shift全部押したものにする」`** と決め事を作るのもアリ。 |
| Type Info | ctrl + shift + p | その変数の型を確認する |     | あまり使わないが、型推論がある言語のコーディングする場合必須の機能。 |
| Rename... | shift + F6 | その変数/定数/関数の名前を変える |     | ☆☆  |
| Run | ctrl + r | ビルド | **R**un | ☆☆  |
| Debug | ctrl + d | デバッグ実行 | **D**ebug | ☆☆  |
| Duplicate Line or Selection | cmd + d | **D**uplicate |     | ☆ 複数の変数を作りたい時に |
| Move Line Up/Down | opt + ↑/↓ | その行を上/下に移動 |     | ☆ リファクタの時などに |
| Start New Line | shift + Enter | 行中にいても改行する |     | ☆☆「行中にいても」が強い |
| Complete Current Statement | shift + cmd + Enter | 括弧などを補完する |     | 便利だけど意外と使わない |
| Split Right | ctrl + x, 3 | 左右２枠にする |     | ☆☆ **デフォルトだとコマンド当てられてないので、やりたい人は要設定。** emacsキーバインドを基にした割り当てです。 |
| Split Down | ctrl + x, 2 | 上下２枠にする |     | やりたい人は要設定。 |
| Unsplit | ctrl + x, 1 | 窓分けをやめて1枠にする |     | やりたい人は要設定。 |
| Goto Next/Previous splitter | opt + (shift) + tab | 分けた窓の先/前に移動 |     | やりたい人は要設定。 |

### slack

| コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- |
| cmd + / | コマンド一覧 |     |     |
| cmd + ←/→ | さっき開いたチャンネルに戻る/進む |     | ☆☆ ブラウザの戻る/進むと同じ感覚。 |
| cmd + . | 横ペイン(スレッドとか表示するところ)を開く/閉じる |     | ☆ たまに動作しないので注意 |
| cmd + 1~9 | ワークスペース移動 |     | ☆☆☆ cmdを長押しすると何番を押せばどこに移動するか分かる |
| cmd + k | 検索窓を開く |     | ☆☆☆ 検索窓で未読メッセージのあるチャンネルにすぐ飛べるのが便利 |
| esc | そのチャンネルを既読にする |     | ☆☆ たまに未読フラグが消えないことがあるのでその時に使う |
| cmd + u | ファイルをアップする |     | ☆ 以前はファイルウィンドウを直接開けたから便利だった。今は1ステップ操作が多くなっているがクリックよりは早い |
| 自分のメッセージにカーソル合わせて `e` | メッセージ編集 |     | ☆☆☆ メッセージ送ったあとに何回か推敲するタイプなので多用します |
| メッセージにカーソル合わせて `t` | スレッド表示 |     | ☆☆☆ |
| cmd + shift + ¥ | 最後のメッセージorマウスオーバーしてるメッセージにリアクションする |     | ☆ たまに動作しないので注意 |

学生時代のslackのワークスペース、エンジニア仲間が集まるワークスペース、会社のワークスペースなど増えてくると毎朝の未読消化が大変になってくるので、

```
- 一番上のワークスペース開いて(cmd + 1)
- 未読チャンネルに飛びながら未読消化して(cmd + k、Enter、Esc、cmd + k...)
- 2番目のワークスペース開いて(cmd + 2)
- 未読チャンネルに飛びながら未読消化して(cmd + k、Enter、Esc、cmd + k...)
- ３番目のワークスペース開いて(cmd + 3)
- 未読チャンネルに飛びながら未読消化して(cmd + k、Enter、Esc、cmd + k...)
```

...という具合に未読消化をキーボードで完結させてます。今は[全未読](https://slack.com/intl/ja-jp/help/articles/226410907-%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E6%9C%AA%E8%AA%AD%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B#u26410u35501u12513u12483u12475u12540u12472u12434u30906u35469u12377u12427)の機能があるので正直そっちの方が早いんですが...

### ターミナル、alias

| コマンド | 効果  | 覚え方 | 愛用度 |
| --- | --- | --- | --- |
| `$ !(コマンドナンバー)` | その番号のコマンドを実行する |     | ☆ historyコマンドと組み合わせて |
| `$ !!` | 1回前と同じコマンドを実行する |     |     |
| cmd + w | 1単語まるまる消す |     | ☆☆ 超長いコマンドの編集時に |
| opt + ←/→ | 1単語移動 |     | ☆☆ ターミナルに限らず他でも使える場面は多い |
| cmd + r | 過去コマンドのインクリメンタルサーチ |     | 最近は使わないが便利。 |
| cmd + c | コマンド強制ストップ |     | ☆ 間違えた時に |

### google calender

| コマンド | 効果  | 覚え方 | どうなるか |
| --- | --- | --- | --- |
| 1 or d | 1日表示 | **1 D**ay | ![スクリーンショット 2021-12-01 15.29.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/1d0515a4-bafa-0e96-a414-697bdfab010b.png) |
| x   | 4日表示 |     | ![スクリーンショット 2021-12-01 15.29.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/a5457033-2c4e-6de4-e797-50646de4a3de.png) |
| w   | 1週間表示 | **W**eek | ![スクリーンショット 2021-12-01 15.29.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/46ef8de5-2243-0cb4-5a26-f8c8144b96fd.png) |
| m   | 1ヶ月表示 | **M**onth | ![スクリーンショット 2021-12-01 15.29.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/1db7340e-13b4-26a0-5ed5-26c09055c292.png)|
| y   | 1年表示 | **Y**ear | ![スクリーンショット 2021-12-01 15.29.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/f909b0ed-3e31-7d7b-af0e-765abe979600.png) |
| t   | 今日に飛ぶ | **T**oday | ☆☆ 使う |
| a   | 予定一覧 |     | 使わん |
| n   | 次の年/月/週/日へ進む | **N**ext | ☆  |
| p   | 前の年/月/週/日へ進む | **P**revious | ☆  |

## ref

https://support.apple.com/ja-jp/HT201236
https://developer.android.com/studio/intro/keyboard-shortcuts?hl=ja
https://support.google.com/chrome/answer/157179?hl=ja&co=GENIE.Platform%3DDesktop
https://slack.com/intl/ja-jp/help/articles/201374536-Slack-%E3%81%AE%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%82%B7%E3%83%A7%E3%83%BC%E3%83%88%E3%82%AB%E3%83%83%E3%83%88
https://support.google.com/calendar/answer/37034?hl=ja

## 余談

- optionキーを押すといろんな記号が一発で打ち込める。この機能も多分↑の名残
    (覚えられるわけがないし、覚えなくていい)

<img width=300 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/20a5562b-ee03-e40c-578a-f32d521f87b0.png"/>

    
- slackの絵文字も覚えると楽だったり
    

|     |     |
| --- | --- |
| 🙋‍♀️ | `:woman-raising-hand:` |
| 🙇‍♀️ | `:woman-bowing:` `:bow:` |
| 🙆‍♀️ | `:woman-gesturing-ok:` |
| 🙏  | `:pray:`(祈る) |
| 👀  | `:eyes:` |
| 🤔  | `:thinking-face` |
| 😇  | `:innocent:`(無垢な=天使？) |
| 💦  | `:sweat_drops:` |
| 🥺  | `:pien:` |
| 😢  | `:cry:` |
| 😭  | `:sob:`(しゃくり上げながらすすり泣く、cryより大胆) |
| 😄  | `:smile:` |
| 🤤  | `:drooling:`(「ジュルリ」する顔) |
| 👍  | `:+1:` |
| 🙄  | `face_with_rolling_eyes:`(ぐる目顔、`:rolling`まで打ったら出てくる) |


#### キーボードビューワー

画面右上の四角「あ」クリック \> キーボードビューワを表示

> 反応したキーが可視化されるので、キーボードの調子がおかしい時に開いて動作確認してみましょう。
> 画面右上のあをクリック \> キーボードビューアを表示から出せます。

<img width=200 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203273/64f8c407-e85a-7291-494e-3d522abbbbdc.png"/>