読者です 読者をやめる 読者になる 読者になる

恥知らずのウェブエンジニア -web engineer, shameless

これは一歩を踏み出すことができない者たちのブログ

golangでcrontabからドキュメントを作成するコマンドラインツール crondocを作った

golang cron go言語

javadoc,phpdoc的にcrontabからドキュメントを生成するツール
crondocをgolangでつくってみました

きっかけ

いくつかのサーバーの設定、ミドルウェア変更することになり、
影響範囲を確認していたのですが、サーバーごとにcronの運用が統一されていなかったのでcronまわり影響範囲を確認するのに時間がかかってしまいました

そこでcronの運用フローを統一する過程でcronの簡単なドキュメントを作成したくなりました

その際、javadoc,phpdocのcron版みたいのがないか探してみたのですが、ないようなのでせっかくなので自作してみました

crondocの機能

ざっくり下記のような機能で作ってみました

  • 標準入力、ファイル指定でcrontabからドキュメントを出力
  • 改行までをひとグループとしてドキュメント出力
  • ドキュメントを出力はmarkdowm形式
  • @authorなどのタグ付ができる

出力例

現状下記のようなcrontabの場合はこんな感じです

  • crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# @title monday.sh
# @author hoge
# @param env[dev|stg|prod]
# start every monday
0 10 * * 1 sh /home/hoge/happy_monday.sh prod

↓↓↓

Environment variable

- SHELL=/bin/bash
- PATH=/sbin:/bin:/usr/sbin:/usr/bin
- MAILTO=root,hoge@mail.co.jp
- HOME=/

monday.sh

  • Author : hoge
  • param : env[dev|stg|prod]
  • start every monday
min hour day month day week command
0 10 * * Mon `sh /home/hoge/happy_monday.sh prod`

使い方

ソースはこちら
github.com


バイナリを落としてきて、下記のようにすればドキュメントが出力されるはずです

$ crodoc /etc/crontab
$ crontab -l | crodoc -s

まとめ

cron周りはあまり触る回数、人も多くなく属人化しやすい箇所なのでフロー、ドキュメント共有して見える化していければ


せっかく作るならコマンドっぽくしたいってだけでgolangで作ってみたのですが、
わからないこと多く時間かかったし、全然golang的な書き方できてないがいい経験になった。今後も継続!



感謝致します


f:id:ogataka50:20160219114823j:plain