環境改善の必要性〜真っ白な Terminal から tmux へ移行〜

この記事は [Akatsuki Advent Calendar 2018](https://adventar.org/calendars/2990) の14日目の記事です．
前回は [MySQL8.0 で起こる謎のデッドロックの条件を調べてみた](https://bluexxsun.qrunch.io/entries/S4AUPwoqwJNZ2Qhb) でした．
タイトルに tmux と入っているが，tmux の話がメインではない．
自分の環境に意図を持って tmux を導入した話である．

# はじめに
サーバーエンジニア１年生です．
題にある通り，結論デフォルトの terminal を使うのをやめて， tmux を使いはじめた．
18新卒として入社し，はじめてサーバーをいじり始めたが，最初は真っ白の Terminal で生きていけると思っていた．
業務を通してどこで限界を感じ，どういった過程で環境を整えることの大切さを学んだかをまとめた．
結論，**日々のタスクをこなすだけでなく，環境・業務改善に取り組んでいくべき**．

# 環境改善の必要性
### 主な業務内容
- 新規開発
- アプリ運用
- インフラ

主にSRE関連の仕事がメインになっている．
ただ，１年生なので行っている業務はしれている．
### 今までなぜやらなかったか
- そもそも環境を整備する必要性を感じていなかった．
- プロジェクトで働く前は，真面目にデフォルトの環境でいける！と思っていた．
- 業務時間は10割タスクの消化に使う．
    - 覚えて慣れるコストより現状のタスクを消化することが大事．

### 圧倒的な周りの開発速度
- 自分が20日かけてやったタスクを他の人はトラブルシューティングしながら2日で済ませる．
- １日一生懸命やっていたつもりだが，結果につながらないことが多々あった．

### ここで何かが違うと思い始めた．
- 最初は周りはなんでこんなに早いのだろうと思っていたが，だんだん自分と周りとの行動のギャップが見えてきた．
    - みんなそれぞれ使っているものが違う．
    - 自分の使いやすいようにカスタマイズして，効率化を測っている．
    - 無駄がない．

### サーバーエンジニアの実情
- 今いるプロジェクトの場合は現状５割くらいが開発でそれ以外がMTGやその他業務．
    - もちろん新卒ということもあるが．
- 当初１０割エンジニア業務で見積もりを立てていたので，タスクが終わる気配が一行になかった．
- 緊急の差し込みで１日潰れることもザラ
- 浮いた仕事の巻取り（職種問わず
- １日バッファを持たせたスケジュール管理が必要．
    - 初めはよくわからなくて苦戦した

### デフォルト環境での限界
- インフラの整備，新規の開発，運用，トラブル対応などの業務があるので幅広くツールを使う必要が出てきた．
- 画面が足りない．
- 無駄なコマンドを打ち続ける．
    - サーバーエンジニアは１日をコマンドラインと向き合って過ごすことになるので，ここに無駄があると影響が出るのは明らか．
- ほしい情報に行き着くために時間がかかる．
    - 手数が多い．
    - 大量のコード，ファイル

### 出てきた影響
環境改善を行わなかったが故に以下のような問題が起きてきた．
※もちろん知識面もあるが，一度覚えたことを実行する速度について．

- 何をやるにしても明確に他の人より時間がかかる
- １回の動作が仮に５秒だったとしても，１日に100回繰り返すと
    - ほしい情報に行き着くには更に時間が必要．
- ディスプレイを計3枚に増やしたがそれでもほしい情報が足りない．
    - 本来は十分すぎる環境
- 任せてもらった業務をスケジュール通りに終わらせることができない．
- 若気の至りで時間ですべてを解決しようとし始めた
    - 終わらないからもう少し時間をかけようと残り始めた．


# 環境改善への最初の一歩
### tmux の導入
- 最初の一歩としては違うかもしれない．
    - しかし，自分の体験を通して大きく変化があったことには間違えない．
- これは業務の先輩に入れたらいいよと教えていただいたので導入した！
    - 自分の思い通りの環境に整えていくことができる．
    - すべていきなりやる必要はなく自分のペースで少しずつ改善していくことができる．
    - どこまでやる必要があるというのがないので，好きなときに好きな様に変更していける．
- 忙しさに波のあるサーバーエンジニアにとっては，とてもおもしろい環境だなと思った．
    - ふとした空き時間にちょっと機能を追加したり．

### 物理的な空間を改善
- ディスプレイの増築
- 自分の気が散らない配置
    - 具体的には姿勢を良くするような配置
    - 眠くならない仕組み
    - 集中したいときにするルーティン
- 体調管理，クリエイティブ以外の部分をルーティン化

# 変化
### 環境を整えるのが楽しくなった
少しずつ，無駄なことが少なくなっていっている．
新しいものを取り入れることはストレスが多かったりする．
ただ，常に新しいものを取り入れ続けることによって，次何を捨てて何を取り入れるかを考えるのが楽しくなる．
今回でいうと，tmux を導入したので，カスタマイズをしつつも tmux より優れたツールがあったらすぐに乗り換えられようになスタンスに変化した．
現状に満足というか，今あるものに順応するのではなく，新しいものを探していく or 作り出していくスタンスに変化した気がする．

### 自分だけではなく，プロジェクトの問題も見えてきた
自分の速度は明確に遅いからどうやって改善していくかをずっと考えていたが，ふとしたタイミングで改善されていることに気がついた．それは今まで見えなかったものが見えてきたことである．
先輩たちがどういう意図を持って何が良くないのかよく議論する光景を見ていたが，現状で満足するタイプだったので，なぜ変更する必要があるのか，なんでその手法を取り入れたのかを考えるようになった．

### 弊害
便利なものに乗り換えるスタンスは身についたが，用法・用途を明確にしてから使う必要が出てきた．
Atom なども使っていて，とても便利だと思っていたが，いろいろな機能を取り入れる事によって，最近は検索に時間がかかったり，フリーズするようになってしまった．
また，新しく生まれた問題なので，これは新しいもの探して改善できるを探すチャンスである．

# おわりに
### かっこよさはもとめてない，効率よく開発したいだけ．
これはあくまで筆者の意見だが，かっこよさを求めて環境を変更するのではない．
現行の作業に不満を感じたときに環境を変更することを考慮したい．

### 導入して終わりではない．
明確に tmux を導入することで自分の業務の効率は少し改善された．
細かく区切って時間見積もりを行うが，なかなか時間どおりに終わらなかったものが終わるようになった．
もちろん，業務になれたということはあるが，環境を改善した結果である．
この浮いた時間を使って，さらに環境の改善を行っていきたい．
８対２で業務改善に当てられる仕組みを常に作り続けて，クリエイティブな時間に当てられる時間を捻出していきたい．
改善に時間を割かなくなったら腐敗の始まりだと思う．

筆者の好きな言葉で締めたい
> 千日の稽古を鍛とし，万日の稽古を錬とす


もし，同じような振り返りするする方がいて，すこしでも参考になったら幸いです．
あまり，技術的な内容ではなかったですが，技術を深めていく上でとても重要な項目だと思っています．

以上．