2006年の発売当時に紙書籍で購入し、最近PDFで買い直してKindleに突っ込んでいた
エンジニアのための時間管理術を
読み直していて、自動化について記載されていたので自戒をこめてまとめておく。
古い本ですが、エンジニア(特にインフラエンジニア)の時間管理術に関しては今でもこれが一番かと思います。
自動化の目的
- 自分の仕事を減らす。作業時間の短縮や勝手に処理が実行される。
- 他の人に作業を委任する。委任出来るようにする。
自動化すべきものと自動化すべきでないもの
- 一度だけ行う単純な作業は自動化すべきでない。(自動化することのほうが時間がかかる)
- 一度だけ行う難しい作業は自動化すべき。(作業の記録を残すことができる。再びその作業に出会うときに役に立つ。一度あったことは再びあることが多い)
- 頻繁に行う単純な作業は自動化すべき。(自動化の効果が最も高い。自動化に投資した時間はすぐに報われる)
- 頻繁に行う難しい作業は自動化すべきでない。(無理をして行き詰まる作業が含まれるため、問題解決の時間と資金を補充すべき)
まとめるの下記のようになる。(本書から図引用)
自動化によってもたらされるメリット
- 再現性(何かを何度でも一貫した方法で行える)
- 自動化によって、めったに行わない複雑な作業を覚えておかずに済む(本書の例ではMacのhdiutilコマンド)
- スケーラビリティ(サーバが10台だろうが10000台だろうが同じ手続きを利用出来る)
- ミスの可能性を排除
自動化へのステップ
- 手動で行う(すべての手順を洗い出し、wikiにまとめたり、入力したコマンドを記録しておく)
- 各手順をコードにする(手順をコマンドラインで実行出来るものや簡単なプログラムで実行できるものに変換。動作検証もここで行う)
- 手順を1つにまとめる(各手順をまとめて1つの大きなスクリプトにまとめる。1つずつの手順をテストをしながらスクリプトを結合していく)
- 全体をテストする(上記手順で作成していれば、一発でうまくいくはず)
2006年に発売された本なので、makeを利用した自動化が紹介されているんですが、 今はrubyのRakeを使ったりして自動化するのがいいのかなーと。
久々に読み返すと、普段実践しているつもりでも、 全然出来て無いなーと思うことと新しい発見もあったりして良いですね。 日頃何となくやっている自動化への手順と意識を見直そうと思いました。