私の開発環境

この記事はソニックガーデン [ソニックガーデン 若手プログラマ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/sonicgarden-junior)の12日目の記事です。

## はじめに
ソニックガーデンには徒弟制度というものがあります。
わたしのような若手社員は弟子として親方の指導のもと業務に従事します。

https://kuranuki.sonicgarden.jp/archives/34363

ソニックガーデンの習わしとして弟子は親方の開発環境に揃えます。
ということで私はvimとRubyMineに入門しました🙌

## とりあえず
vimとはなんぞやという方でvimに興味がある方はvimtutorをやってみましょう！
ターミナルで`vimtutor`を実行すると開始できます。

## 最低限覚えておきたいコマンド
プログラミングを始めたての頃、`.zshrc`をvimで編集したことがあり戸惑いました。
戸惑っている方、下記を覚えておけばなんとかなります！

- `i`: インサートモード
    - こちらで入力できるようになります
- `esc`
    - エスケープを押すことで各モードから抜けることができます
- `:q!`: 保存しないでエディタを終了(escで抜けてから)
- `:wq`: 保存してエディタを終了(escで抜けてから)
- `h, j, k, l`
    - カーソルキーでも移動できますがこちらで移動できると便利です

## 個人的vimのメリット
- キーボードで操作を完結できる
- 開発中にタッチバッドやマウスを触る機会が減る
- `h,j,k,l`でのカーソルの移動に慣れるとカーソルキーで移動するよりも速い
- キーリピートの速度を上げるとvimでの開発体験がよくなります

https://qiita.com/risto24/items/35190fe3601681cf4915

## 個人的に便利だと感じたコマンド
### カーソルの移動
- h: 左、j: 下、k: 上、l: 右

### 置換
```ruby
 user.id
 user.name
 user.image
```
`:%s/user/current_user`とすると下記のように置換できます
```ruby
 current_user.id
 current_user.name
 current_user.image
```
- `:%s`
    - ファイル全体に反映
- `s`
    - 1行に反映
- `/gc`
    - 置換するかどうかを確認しながら置換できる
    - `Replace with current_user (y/n/a/q/l)?`
        - y(yes): １つずつ置換していく
        - n(no): 置換せず次の対象に移動する
        - a(all): 全て置換
        - q(quit): 置換せず終了
        - l(last): 1つ置換して終了
- `/g`
    - 1行に複数の置換対象がある場合、まとめて置換できる
    - :s/user/current_user/g
        ```ruby
            "#{user.id}: #{user.name}"
                        ⇩
            "#{current_user.id}: #{current_user.name}"
        ```

### ファイルの移動
| コマンド |  |
| ---- | ---- |
| shift + g | ファイルの一番下に移動 |
| gg | ファイルの一番上に移動 |
| shift + [ | 段落ごとに上へ移動 |
| shift + ] | 段落ごとに下へ移動 |

### インサートモード
- 文字を入力できるようになります

| コマンド |  |
| ---- | ---- |
| i | カーソルは前 |
| shift + i | 行の最初に移動してインサートモード |
| a | カーソルは後ろ |
| shift + a | 行の末尾に移動してインサートモード |
| o | 改行してインサートモード |
| shift + o | 上の行でインサートモード |


### 文字列検索
```ruby
 user.id
 user.name
 user.image
```
| コマンド |  |
| ---- | ---- |
| /user | nで次のuserに移動 / Nで前のuserに移動 |
| ?user | nで前のuserに移動 / Nで次のuserに移動 |


### コピー・ペースト・カット
| コマンド |  |
| ---- | ---- |
| yy or shift + y | コピー |
| p | 下の行にペースト |
| shift + p | 上の行にペースト |
| dd | カット |

## RubyMine
IdeaVimというプラグインを入れるとvimで開発できます！
RubyMineとvimに興味がある方はぜひ使ってみてはいかがでしょうか。
- 補完が便利！
![スクリーンショット 2024-12-08 21.21.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/50e3e99f-7196-3663-1112-4fbd7fdbd357.png)
今まで補完機能を利用したことがありませんでした。
サクサクかけて楽しいですね！

- `cotrol + command + ↑`を実行するとモデル、ビュー、コントローラーなどに移動できる

![スクリーンショット 2024-12-08 21.30.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/aa65ae31-02e4-a766-1b2b-6d16cb9742b4.png)

- rspecの設定
![スクリーンショット 2024-12-08 21.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/40e93506-689a-b40d-1cc6-da72bb7b0951.png)

    - 編集をクリック
    - 左上の`+`をクリック

    ![スクリーンショット 2024-12-08 21.46.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3842957/b8dcbc29-cf72-48ae-013e-bf28fa8c0e72.png)
    - スペックフォルダーを設定して適用すると右上の▶️ボタンでrspecを実行できるようになります！

## おわりに
最後までお読みいただきありがとうございました！
少しでもvimやRubyMineに興味を持っていただけていたら嬉しいです。
経験者の方、vimのおすすめコマンドやRubyMineの便利機能などぜひ教えていただきたいです！


[ソニックガーデン 若手プログラマ Advent Calendar 2024](https://qiita.com/advent-calendar/2024/sonicgarden-junior)の13日目は@bassarさんです。
お楽しみに！

## 参考リンク
https://pleiades.io/sites/willbrains.jp/keymap/pdf/shortcut_rubymine_mac.pdf