概要
業務において、今まで手動でDockerのバックアップとスイープを行っていたものを自動化しました。
その際に行った工程や使用した技術を記載します。それぞれの技術やコード等の解説は詳しくやりません。
当たり前な部分も多いかもしれませんが、年数が浅い人向けと、自分の忘備録のために書きました。
業務自動化を目的としたバッチ処理の実装などのヒントになれば幸いです。
以下の順で説明します。
- 設計
- 言語選定
- 環境構築
- 実装物
- 定期実行
- コードの保存・管理
- ドキュメント
1. 設計
まずは、どのようにして業務を自動化するかを考えます。
当然ですが、自動化するために投資する工数 < 自動化した後の削減された工数
でないと自動化のメリットがないため、それぞれ見積もって自動化するべきかどうか検討します。
その後、入力と出力をどう行うかなど、業務フローに沿った設計を行います。
今回は依頼されたタスクで内容も決まっていたので、この工程は特に自分ではやりませんでした。
Dockerの管理をしているサーバー管理者向けに、Dockerのバックアップと古いバックアップの削除(スイープ)を定期実行できるツールを実装します。
2. 言語選定
自動化の大まかな設計が定まったら、使用する技術の選定を行います。
言語選定は、言語の特性を理解して選ぶのが良いですが、個人の得意な言語でもさほど問題ないと思います。
今回はpythonとshellのどちらの言語を使うか迷いましたが、shellに決定しました。
理由は以下です。
- pythonがインストールされている必要がある。(環境によってはインストールされていない場合がある)
- Version管理がちょっと面倒。もし管理するならpyenvなどのバージョン管理ツールを使う必要がある。
shell
- shellはLinuxに標準でついている。
- 処理の内容的にShellの機能だけで充分。
使用エディタ
エディタは言語に応じて好きなものを使えばいいと思います。
CUIエディタは慣れておくとサーバー扱うときに役に立つかもしれないと思ったため、今回は以下を利用しました。
3. 環境構築
必要に応じて、実装に必要な環境構築を行います。
今回は以下の設定を行いました。使用OSはUbuntuです。
- Docker
- ネットワーク
4. 実装物
正直オープンソースとか見た方がコード綺麗なのでそれらを参考にするのをお勧めします。
https://github.com/mgmgmgmi/BackupDocker
https://github.com/mgmgmgmi/SweepDocker
細々したTips
- 今回使わなかったけど、コマンドライン入力はgetopt/getopts使うと便利かも。
- 引数のオプションで -h 等のオプションでヘルプを表示させてあげると親切そう。
- 圧縮形式はzipよりtar.gzがおすすめ。zipは権限のメタデータなどが保存されないけど、tar.gzは保存される。
- 変数名や関数名は分かりやすく。処理の目的と関数の内容を一致させる。
- 設定ファイルと処理実行のファイルを分ける。ツール利用者は設定ファイルのみ編集すれば良いようにする。
5. 定期実行
- cron
Linuxに標準でついているCUIの管理タスクスケジューラです。
Windowsのタスクスケジューラや、Jenkinsの下位互換のようなものです。
cronに実行ファイルを登録すると、その時間に毎回ファイルを実行してくれます。
6. コードの保存・管理
- Git
一人で実装を行う際もGitを使用することをお勧めします。
いろいろと試したいときに別のブランチ切ったり、失敗した際に巻き戻したりできます。
また、他人へ公開したり共有することが容易です。
7. ドキュメント
- Markdown
Markdownは記法(文章の書き方)の一つです。Qiitaの記事書くときに使うあれです。
gitのREADMEではMarkdownに対応しています。
他の人が見やすい&分かりやすいように概要や使い方を記載するのにおすすめです。
終わりに
以上、業務自動化のための一連の工程や使用した技術の紹介でした。
うまくまとまってない気もするので、アドバイスがあったら是非コメントください。
また、内容に間違いや不明な点があればご指摘ください。