crontabファイルからドキュメントを生成する試み
コマンドの定時実行をするときにお世話になるcrontabの設定ファイルから、ジョブの実行時刻や頻度をドキュメンテーションするツール@piyoppi/cron2docsを作ってみました。
※まだ絶賛開発中です。十分に検証できていないこと、および今後仕様が変更されるかもしれないことをご容赦ください。
構造
以下のようなモジュールで構成されています(図をクリックで拡大)。
crontabファイルから実行日時を取得し、かつ何らかの方法でコメントを生成してJSON形式のドキュメントを出力する cron2json-docs-generatorモジュールを中心に構成されています。
cron2json-docs-generator はJavaScriptオブジェクト形式でドキュメントを出力するので、これを見やすいフォーマットに変換する周辺モジュール(たとえばMarkdown形式に変換する docs-display-table)を自由に実装することができます。
コメントの抽出
cron2json-docs-generatorモジュールは、crontabファイルを入力に受け取り、スケジュール情報をパースしてJSON形式に変換します。 また、crontabファイルに記述されている定時実行コマンドからコメント(タイトルと概要説明)を抽出し、スケジュール情報と対応させます。 コメント生成器として、以下のモジュールを用意しました。
ファイルからコメントを抽出するモジュール (comment-generator-file)
実行ファイルがスクリプト形式の場合、そのスクリプトには以下のようなコメントが書いてあるとします。 スクリプトのコメントを抽出して利用できれば、コードとドキュメントが近いところに配置され、コードの変更に伴ってドキュメントが更新されることを期待できそうです。
#!/bin/bash
#
# クリーンアップタスク
#
# テンポラリディレクトリにある1日前に作成したファイルを削除します。
#
... スクリプトが続く ...
comment-generator-file モジュールは、実行ファイルからコメントを抽出してドキュメントとします。
まずは、 filename-extractor モジュールを使って、実行コマンドからファイルパスを抽出します。 このモジュールは、ファイルパスのリストの中からコマンドに一致するファイルパスを返却します。
抽出したファイルパスを用いて、 comment-extractor モジュールでファイルの中身からコメントを抽出します。 たとえばシェルスクリプトの場合は comment-generator-file モジュールが comment-extractor-sh モジュールにファイルの中身を渡し、以下のように処理します。
- ファイルのはじめのコメントの1行目をタイトルとする
- ファイルのはじめのコメントの2行目以降を概要とする
先に示したスクリプトの場合、以下のように抽出されます。
- タイトル:クリーンアップタスク
- 概要:テンポラリディレクトリにある1日前に作成したファイルを削除します。
いまのところ、PHPファイル用のモジュールとシェルスクリプト用のモジュールを用意しています。 言語別の comment-extractor モジュールと filename-extractor を実装することで、より多くの実行コマンド形式やスクリプトのフォーマットに対応できます。