新人エンジニアがやるべき攻めと守りの環境設定

## はじめに

どうもこんにちは。生息地は、二郎とサウナとエニタイム。
自称筋肉系エンジニアの豊田です。

入社して3ヶ月が経ちました。少しずつ社会人生活に慣れてきた今日この頃。
技術的にはまだまだですが、現場で学んだTipsをアウトプット・共有できればと思い今回この記事を書いてみました。

題して

「**新人エンジニアがやるべき攻めと守りの環境設定！！**」

題名だけだとなんのことやらって感じですね。
ここから攻めと守りとはなんじゃいというお話をしていければと思います。

## 攻めと守りとは
### 攻めとは効率化
「攻め = 効率化」の環境設定のことです。

主にエディタの拡張機能や、ショートカットキーといった作業効率化という視点でのお話になります。
新人エンジニアの皆さん、なんで先輩エンジニアはあんなに開発が早いんだと不思議に思ったことはありませんか？

経験の違いもあるかと思いますが、コーディングにおけるテクニックを知っていることも重要なポイントだと思います。

### 守りとはミス防止
「守り = ミス防止」の環境設定のことです。

主に本番環境とステージング環境の区別という視点でのお話になります。

先輩エンジニアの話を聞くと、新人時代に本番環境のDBを全削除・・・・・
とまではいかないまでも、必要なファイルを削除してしまったという話を聞くことがあります。

今後自分にも全然ありえることですね。ミスを防止するためのtipsを知っているだけで、安心して開発ができると思います！

Qiitaには本番環境でのやらかしちゃった集がまとめられているので、時間があるときに見てみると、とても勉強になります。

https://qiita.com/advent-calendar/2021/yarakashi-production


## 攻めの環境設定あれこれ

まずは僕が現場で学んだ「開発作業を効率化させるための環境設定あれこれ」をご紹介します。

### 拡張機能（VScode）

#### ◾[Material Icon Theme](https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme)

![material icon theme.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/b712119a-f17b-cbb2-a5a7-2b93865d4eff.png)


ファイル名やフォルダ名の横に言語のアイコンを表示してくれます。
大量にファイルがあっても、直感的に何の言語ファイルなのかが分かるようになります。


#### ◾[Rainbow CSV](https://marketplace.visualstudio.com/items?itemName=mechatroner.rainbow-csv)
![rainbow csv.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/b017b9a7-db33-8919-0056-828dce978410.png)


CSVファイルは通常データがカンマ区切りで続いていて、列ごとに揃っていないため見づらいです。
そんなときこの拡張機能を入れることで、列ごとに色分けしてくれます。
現場でデータ抽出などのタスクを行う際、この拡張機能のおかげでデータの確認が容易になりました！


#### ◾[Auto Rename Tag](https://marketplace.visualstudio.com/items?itemName=formulahendry.auto-rename-tag)

![Rename.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/0e6ae99f-d026-3069-0467-b518d830b722.gif)

開始タグと終了タグを同時に修正できます。
非常に便利です。

### alias（エイリアス）設定
alias（エイリアス）設定することで、煩雑なコマンドを自分の好きな文字列に置き換えることができます。
よく使うコマンドほど、エイリアスでキー打鍵数を短縮することによって作業効率がぐんぐん上がっていきます！

**設定方法**
Vimを使って.zshrc（.bashrc）にalias（エイリアス）を記述します
vimの使い方がわからない方は以下の記事をチェック！

https://qiita.com/marrontan619/items/dc99db67cf4c0a25a327


**alias（エイリアス）の書き方**

```
alias [省略コマンド] = ‘[実行コマンド]’
```
で設定することができます。

僕が現在設定しているaliasはこんな感じです。
```
# コマンド alias設定
alias gc='git checkout'
alias gb='git branch'
alias gs![iterm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/9c9b41f9-c3a9-e7fb-e9ef-6aad6ab2fc59.png)
='git status'
alias dp='docker ps'
alias dc='docker-compose'
alias ppr='pipenv python run'
alias s.z='source ~/.zshrc'
alias cp='cp -i'
alias mv='mv -i'
alias rm='rm -i'
```

正直設定していて、使っていないaliasもありますが、、、笑
慣れると結構楽になりますので、ぜひ設定してみてはいかがでしょうか。
何か他にもいいものがあれば教えてください！

## 守りの環境設定あれこれ

続いて「ミスを防ぐための環境設定あれこれ」をご紹介します。

### ターミナル背景色設定（iTerm2）
![スクリーンショット 2022-07-02 18.13.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/d41dce2f-7dc8-95fd-a98b-c92494216789.png)


iTerm2では、ホスト毎にターミナルの背景色を変更することができます。
この設定のメリットは、**自分が今本番環境とステージング環境、ローカル環境のどこにいるか簡単にわかる**ということです。

筆者は信号機と同じように、

本番環境　→　危険だ、ミスは許されないぞ　→　**赤色**
ステージング環境　→　まぁ左右見れば許そう　→　**黄色**
ローカル環境　→　**デフォルト**

というように設定しています。
（実際のホスト名は載せられないので、個人PCにdockerで臨時のサーバー作りました。）

こうすることで今は本番環境だから、ステージング環境だから気をつけなきゃという意識になりますよね。


設定手順は以下の通りです。

1. 切替用のProfileを作成
2. 実行処理を記述

詳しく見ていきます。


#### ◾設定手順①：切替用のProfileを作成

iTerm2 > Preferences > Profiles
にて切替用のターミナルProfileを作成

Colorsタブから好きな色を設定してください。
Foreground　→　文字色
Background　→　背景色

![iterm2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710265/e8039720-826b-c49c-7134-a57d03c973b5.png)


#### ◾設定手順②：実行処理を記述

SSH先毎にProfileを変更する処理を記述

zshを利用している方は、.zshrcに、
bashを利用している方は、.bashrcに、
vim等を使って以下の処理を記述してください。

```
# ssh先毎に背景色を変更

function ssh_set_bgcolor() {
 case $1 in
   # ①ssh root@127.0.0.1 の時、背景色変更
   root@127.0.0.1 ) echo -e "\033]1337;SetProfile=production\a" ;;
   # ②ssh root@localhost の時、背景色変更
   root@localhost ) echo -e "\033]1337;SetProfile=staging\a" ;;
esac
 # Ctrl+Cを押下時、背景色を元に戻す
 trap "echo -e '\033]1337;SetProfile=Default\a'" 2
 # exitされた時、背景色を元に戻す
 trap "echo -e '\033]1337;SetProfile=Default\a'" EXIT
 ssh $@
}

alias ssh='ssh_set_bgcolor'

```
最終行のaliasは攻めの設定でも出てきましたね。
基本的に自分用に変えるところは①と②の`root＠〇〇`の部分のみです！

最後に記述した設定を反映させるために、以下コマンドを実行

```
source ~/.zshrc
````
これでSSH先毎に背景色が変更されます。
もし変わらないという方は、iTerm2を再起動してみてください！


### 手順書をコピー&ペースト

基本的に重要な操作は、手順書が作成されていると思います。

コマンドは自分で打たず、コピー&ペーストすること。
わざわざ自分で入力して、タイポの可能性を増やす必要はありません。

その重要性が感じられるQiita記事を発見しました。

https://qiita.com/coatly/items/e49c0c3cf63da306404b

半角スペースだけで、こんなことが起こるなんて・・・
本番環境では自分でコマンドなんて打てたもんじゃありませんね。


### コマンドを復唱しながら指差し確認
急に原始的な内容になりますが、とても重要なことです。

エンジニア歴10年以上の上司に聞いたところ、コマンドを唱えながらの指差し確認は必ず行っているとのこと。

新人の私たちがしないわけにはいかないですよね。

ターミナルの背景色設定が信号機の色なら
これは渡る前の安全確認「右見て左見て右見て」ですね。


### 最小限の権限で作業する

権限を制限することで、リスクを最小化することができると思います。
実際に私はまだ本番環境での管理者権限（sudo）はいただいておりません。
危機管理が根付いていない新人に全権限を渡すと、何するかわからないので当然ですよね笑

ReadOnlyのDBを使う、IAMポリシー権限設定を行うなど、方法は色々あります。

IAM でのセキュリティベストプラクティスにも、
「最小限の特権を認める」との記載がされています。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/best-practices.html#grant-least-privilege

ここは新人、ベテラン関係なく考慮するべき内容だと言えます。


## まとめ

今回は新人エンジニア目線での攻めと守りの環境設定をご紹介しました。
攻めの環境設定に関しては、覚えれば覚えるほど作業効率は上がるため、これからもどんどん吸収していこうと思います！

守りの環境設定に関しては、新人のうちから危機意識を持っておくことが重要だなと感じます。

私の現場では、基本的な操作はドキュメントにまとめられており、Git上でのCI/CDによる自動化や、本番環境でのファイル操作はツールで行えるなど、ミスが起きづらい環境になっています。
先代に感謝しなくてはなりません。
ただそこに甘えていると、違う現場に行った時に大事件を起こす気しかしないので気を引き締めていきます。

他にもこんなことやっているよという方がいましたら、コメントいただけますと幸いです。