memorandums

日々の作業ログです。

ディレクトリ配下のファイル変更を検知して自動的にコミットしたい

3年生を対象としたWebアプリ開発の演習を担当しているんですが、演習中にどういう感じに課題に取り組んでいるのか知りたくなります。

演習でEclipseを使っていたときには、こんな↓ツールを作ったことがありましたが、AWS Cloud9ではムリです。。。

Eclipseのローカルヒストリーを用いた持ち帰り課題の取り組み状況分析ツール, 研究報告コンピュータと教育(CE), 2018-CE-143(26) 1-6, 2018年2月

ファイルの編集履歴を保存するツールが世の中にないかな。。。と探したのですが見つかりませんでした。論文もなさげ(あるかもしれませんが。。。)

で、どーするか?

手軽なところではバージョン管理ツールを使えばいいじゃんと思いつきます。誰でも思いつくかと思います。まぁ、本来の目的ではないのですが、変更履歴情報を漏れなく記録してくれるはずなので利用しない手はありません。

バージョン管理ツールといえばgit。

でも、学生さんにコードを変更したらgit commitを実行してね。。。というのはムリがあります。

じゃ、自動的に定期的に実行させればいいじゃん。。。と思いつきます。

while true ; do git add . ; git commit -m "." ; sleep 10 ; done

コミットするものがなければリポジトリは更新されませんので、とりあえず動かしておけばいいでしょう。

でも、ちょっとダサダサなので。。。ファイルの更新があったときだけgit commitさせるようにしたくなります。

調べると、Linuxにはinotify-toolsというツールがあるらしく、あるファイル・あるディレクトリ以下のファイルの変更を検知して何かさせることができるようです。これは使わない手はありません。導入はsudo yum install inotify-toolsでいけます。

とりあえず試行錯誤した結果、以下のコマンドにしてみました。悪くはないと思います。gitディレクトリの中で以下のコマンドを叩きます。

inotifywait -e close_write -m . | while read ; do git add . ; git commit -m “.” ; done

あと、AWS Cloud9は使わないマカーな子もいるようなので、Macでのコマンドも調べてみました。fswatchというツールがあるらしい。これも導入はbrew install fswatchでいけます。

fswatch -o . -e "\\.git.*" | while read ; do git add . ; git commit -m "." ; done

とりあえず、これで記録してもらってgitリポジトリディレクトリごと提出してもらおうと思います。Githubなんかにpushしてリンクを送ってもらうって方がスマートですけどね。。。それは後期にやります。

リポジトリファイルの分析ツールも作らないといけないな。。。急いでやろう。