Edited at

シェルスクリプトでスケジュールのフォーマットを作成する

More than 1 year has passed since last update.


環境

Mac:10.12.5

bash:3.2.57(1)-release


はじめに

現チームはプランナーが不足しています。企画書やキックオフ、レビュー会などの内容をもとに、エンジニアである私が仕様書やスケジュールの作成・更新を行っています。そのスケジュール作成についての改善内容になります。

できるだけ時間をかけず、かつ共有が簡単な方法を模索中なのですが、今は下記のように仕様書のスライドの最後にテキストで記載しています。

08/24 (木) 田中休み

 クライアント着手開始

08/25 (金)
 サーバー着手開始

==============================

08/28 (月)

08/29 (火)
 仮デザインリソース納品

08/30 (水)
 リザルトのapi結合

08/31 (木)
 UI表示のapi結合
 fixデザインリソース納品

09/01 (金) 鈴木休み・佐藤休み
 1回目レビュー

==============================

09/04 (月)
 2回目レビュー

09/05 (火)
 デバッガー依頼

09/06 (水)
 コードレビュー依頼

09/07 (木)
 developマージ
...

※全て仮名称です。

このテキストの日付けを指定週分吐き出すシェルスクリプトを作成したのでまとめておきます。


先にまとめ

# 引数チェック

if [ "$1" == "" ]; then
echo "引数に何週間分のスケジュールを作成するか指定してください\n例)sh createScheduleFormat.sh 5"
exit 1
fi

end=$(($1 * 7))
for (( i = 0; i <= $end; i++ )); do
# 曜日で判定する
case $(date -v +"$i"d "+%w") in
[1-5])
# 平日なら日付け表示
date -v +"$i"d "+%m/%d (%a)"
echo
;;
6)
# 日曜なら区切線を描画
echo "=============================="
echo
;;
esac
done

# sh createScheduleFormat.sh 2 の実行結果

# 今日から2週間分のフォーマットを作成する

08/24 (木)

08/25 (金)

==============================

08/28 (月)

08/29 (火)

08/30 (水)

08/31 (木)

09/01 (金)

==============================

09/04 (月)

09/05 (火)

09/06 (水)

09/07 (木)


解説


算術式展開には$((~~~))を使う(8/28 追記)

コメントに指摘をいただいたので修正しました!

end=$(expr "$1" \* 7)

 ↓
end=$(($1 * 7))

▽Qiita - シェルで変数のインクリメントに expr を使うと100倍遅い件

http://qiita.com/d_nishiyama85/items/a117d59a663cfcdea5e4

exprでないといけないといった場面は無さそうです。

普段互換性を意識するようなことは無いので、$((~~~))を使っていきます。


シェルスクリプト内の掛け算(もしexprを使った場合)

▽minus9d's diary - シェルスクリプトで掛け算

http://minus9d.hatenablog.com/entry/20120518/1337346365

もしexprで掛け算をする場合は * ではなく \* とします。

* で実行してシンタックスエラーとなってしまいました。

expr: syntax error


Macのdateで日付けをずらす

-v +"$i"dで指定日分日付けをずらしています。

▽Qiita - Macのdateコマンドで時間調整するやり方

http://qiita.com/hawaku/items/2f0a8454bbead2f070d2

Linuxと微妙に異なるのでググった挙動と違ってハマりました...。


さいごに

カレンダーを試したり(作成・更新に時間かかるし見てくれない)、redmineを試したり(エンジニア以外見てくれない)しましたが、今のとこ仕様書に付随したテキストが一番安定して運用出来ています。それでもこちらから定期的に提示しないと忘れられがちですが...。