最近、仕事ではエンジニアが定常的に実行するスクリプトの改善に取り組んでいて、そこで気づいたことをブログにまとめることにした。
ここで言うスクリプトというのは、エンジニアが行う作業を効率化するために書かれたプログラムのことで、例えば、データのマイグレーションのためのスクリプトや、カスタマーサポートからの問い合わせを受けてたまに行う作業のためのスクリプトなんかがある。
手順書
本番環境に向けておこなう操作はすべて手順書を用意した方がいいと思っている。理由としては、
- 手順書をレビューしてもらうことで、誤った操作によるインシデントを回避できるため
- いつ誰がどのような作業をおこなったか記録に残るため
- プロセスを手順書に文書化することで、プロセス自体を改善しやすくなるため
- 作業の属人化を回避できるため
といったものが考えられる。さらに、定常的に発生する作業については、手順書をテンプレート化し、毎回同じフォーマットの手順書を使うことで効果が高まると思う。
手順書の内容
手順書の内容としては以下のような項目を含めるようにしている。
- 事前に準備しておくこと
- 具体的な作業手順
- 次の作業に進めるか判断するためのチェックポイント
- 想定されるエラーとそれに対する対処方法(つまり、トラブルシューティング)
手順書ドリブン
手順書ドリブンというのは、まず手順書を先に書き、そこからスクリプトに求められる要件を見定め、開発を始めることを言っている。ライブラリを書く際にREADMEドリブンで開発することがあるのだけど、それのスクリプト版とも言える。
上述したような内容を含む手順書を書くと、スクリプトを書く際に自ずとこういったことを意識するようになる。
- 事前に用意すべきデータのフォーマット
- ヒューマンエラーをおこしにくいコマンドラインインターフェイス
- チェックポイントを意識したログ出力
- 原因と対処方法を理解しやすいエラーメッセージ
- リトライ可能なエントリーポイントの設計とスクリプトの冪等性
逆に、手順書を書く前にスクリプトを書きはじめると、こういったポイントがどこかで抜けてしまいがちになる。
まとめ
本番環境で作業をおこなう前に手順書を用意するというのは、割とよく見られるエンジニアしぐさだと思うのだけど、そこからさらに「スクリプトより先に手順書を書く」というテクニックを加えるとコスパよく実用性の高いスクリプトを書けるようになるため、ぜひオススメしたい。