社内の新人エンジニアに1つだけAtomのキーバインドを教えるとしたら

最近[弊社](http://qiita.com/organizations/itpropartners)に入った新米エンジニアに、

**「Atomを入れたんですが、入れておいたほうがい初期設定やプラグインがあったら教えてください！」**

とSlackで突然聞かれたので、この記事を書いてみました。[^1]

[^1]: 一応補足しておくと、もともとの新人の質問の趣旨であるプラグインに関しては、Slack上でオススメを幾つか教えていますのでご安心ください :turkey: 

# 社内の新人エンジニアに1つだけAtomのキーバインドを教えるとしたら
みなさん、何にしますか？

あ、Atomはキーバインドいじれるので、MacでAtomを入れたてのデフォルト状態と仮定してください。

私は、これです。

# 全力で`cmd + p` ！！！

## `cmd + p`とは

いわゆる「**ファイル名を指定して開く**」になります。ツリービューのプロジェクトに登録されたファイルを検索して、ファイル名が入力した文字列に一致する(またはそれに近い）ファイル候補を表示し、`Enter`を押すと、候補の一番上にあるファイルをそのまま開けます。)
正確には、「fuzzy-finder」というビルトインのpackegeの機能になります。
<img width="720" alt="スクリーンショット 2017-02-25 23.44.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/48843/ee65b489-3576-b21d-0942-785ef0fce478.png">


Atomは**全文検索の速さが売り**なので、候補が出るのにほとんど待ち時間はありません。慣れてくると、

`my_repository/src/Model/Entity/user.php`
を開くのに、
`cmp+p` -> `uses.p`と入力 -> `ENTER` と入力して開く（ここまで1秒未満）

といった具合に、ホームポジションから手を離さず、1動作で目的のファイルを開く事が出来るようになります。


## `cmd + p`でファイルを切り替えるメリット

### (1)ツリービューから選んだり、タブをマウスで切り替えるよりも圧倒的に早い
コマンドベースのVimに根強い人気がある事からもわかるように[^2]、エディタ操作を効率的に行うためには
- できるだけホームポジションから離さない
- 操作する→画面を見る→また操作、と言うように、2行程以上必要な操作をできるだけ減らす

が基本になります。その基準に照らし合わせてみると、「**ツリービューからマウスやトラックパッドで目的のファイルを選択する**」という行為は

- そもそもキーボードから手を離さないといけない
- 「目的のファイルが画面外にある場合はスクロールする」「ディレクトリを(時には何階層も)開閉する」「目的のファイルを一覧から探す」など、目的のファイルにたどり着くまでに、画面表示を逐次確認しながらの操作が多い

というように、かなり**非効率な手段の組み合わせ**でできている事がわかります。

**「編集するファイルを切り替える」という動作をコーディング作業中にかなり頻繁に行う必要がある**のはプログラマなら自明だと思いますので、ここを短縮化する事が、トータルで見るとかなりの効率化につながるのが分かると思います。「ただ1つ教えるコマンド」に選んだのも、この**費用対効果の大きさ**が決め手です。

[^2]: 筆者はサーバー上のファイルを直接SSH操作するときだけVimを使うライトなVimmarです。ちなみにAtomもVimキーバインドで使っています。

### (2)ツリービューを表示しなくてもいいので画面が広く使える

`cmd+p`でのファイル変更に慣れてくると、ツリービューを常時表示する必要がなくなります。

<img width="1280" alt="スクリーンショット 2017-02-25 23.43.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/48843/cf2bda1e-743d-2ab7-8df2-0016bb75f5fa.png">

とくにノートパソコンで左右2ペイン表示で操作をしていると、エディタ部分の横幅がかなり狭くなってしまいが、ツリービューを消す事で、より画面いっぱいにソースコードを表示する事ができるようになります。

## 効率的にファイルを切り替えるためのコツ 

慣れるまでは大変だと思うので、いくつかポイントです。

### フレームワークの命名規則などを利用して、短い文字で確実に目的のファイルが開けるパターンを覚える

例えば、先ほどの

- `my_repository/src/Model/Entity/user.php` →　`cmp+p` -> `uses.p`と入力 -> `ENTER`

は、**CakePHP3では `テーブル名の単数系.php`という命名規則のファイルがEntityクラスしかない**事を利用しています。
同様に、

- `my_repository/src/Template/Users/index.ctp` →`cmp+p` -> `users ind`と入力 -> `ENTER`

というように、ディレクトリ名を組み合わせたり、複数のリポジトリが含まれている場合でも、

`your_repository/src/Model/Entity/user.php` -> `cmp+p` -> `yo user.p`と入力 -> `ENTER`

という感じで、ある程度コツをつかめば、サクサク目的のファイルを開く事ができます。

### 上手くいかなかったらおとなしくツリービューを開く
当然ながら万能ではないので、上手くいかないときはおとなしくツリービューで選択しましょう。 :sweat_smile: 
その際に、**ツリービューを開閉するコマンドを覚えておくと便利**です[^3]。


ツリービューの開閉はデフォルトでは`cmd + /`または`cmd + K->B`にバインドされていますが、プラグインのインストールの際などに他の操作に上書きされてしまっている事も多いので、`cmd+shift+p -> tree view toggle`と入力して、キーバインドを調べておくといいでしょう[^3]。

<img width="565" alt="スクリーンショット 2017-02-26 0.26.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/48843/c694a55a-1bee-6511-4331-ec84e637c4eb.png">

[^3]: ※この時点で「1つだけキーバインドを教える」というタイトルを自ら破っている事に筆者はまだ気づいていない

## 注意点

### `cmd + /` が使えない事がある
実際に`cmd + /`に設定されていても、`cmd + /`でツリービューが開けない事はかなり多いです。たいていの原因は、**`cmd+/`が、編集中の言語に応じたショートカットで「選択範囲をコメントアウト」にキーバインドされているため** です。というより、`cmd+/`はコメントアウト目的で使う人の方が多いと思うので、もう一つのコマンドである`cmd+k->b`か、自分で使いやすいキーバインドを設定すると良いでしょう。

### `.gitignore`されたファイルが検索対象外になる

さすがGithub製だけあって気が利いている・・・と思いきや、**バージョン管理ツール経由でインストールするライブラリは大抵`.gitignore`に含まれている事が多い**ため、フレームワークの内部コードやライブラリの実装を見たい場合は使えません。残念ではありますが、逆にライブラリのコードが含まれてしまうと候補となるファイルが膨大になるので、仕方ないですね・・・。

(なお、記事を書いている最中に、もしかしてfuzzy-finderの設定で変えられるかも・・・と思ったのですが、見つけられませんでした :sob: もし知っている方がいたらコメントください)


-----------------------

いかがだったでしょうか！ 新人のNさん、ぜひ`cmd+p`を活用してくださいね！


この記事は、[ITプロパートナーズ](http://qiita.com/organizations/itpropartners)の五藤がお送りしました。