管理するデータをローカルファイルとして、とくに実行されるソフトウエアと同じディレクトリの下に保存する、古典的なアプリケーションがある。 このデータは普通なんらかの構造化されたファイルになっているが、これを git などでバージョン管理することを考える
とくにそのアプリのコードがスクリプト言語で直接実行される場合は、コードとデータを同じリポジトリにして、 区別せずにバージョン管理することが(良いかどうかは別として)できるだろう
ソフトウエア自体が、「自身のリポジトリにコミットを積む」という機能を持っていてもよい
flowchart LR
subgraph repository
direction RL
code --commit--> data
data --use--> code
end
さらに、これをローカルではなく GitHub(など)の上にホストされたリポジトリで行うことを考える。 こうすると、もうソフトウエアをどこか固定のマシンで動かす必要はない
GitHub Actions でソフトウエア(= コードとデータ)の配置を自動化することで、アプリが書き換えたデータを再反映するループができる。 もうコードと実行されるアプリケーションが同じものでなくても(ビルドが必要でも)構わない
flowchart LR
subgraph runtime env
app --use--> data
end
subgraph git repository
code
rdata[data]
end
app --commit--> rdata
code --publish--> app
rdata --publish--> data
これによって少しおもしろいことが起きていると思う:
- データを保持する機能はあるが独立したデータベースはない
- コードの変更も、データの更新も、データのマイグレーションも同じように実行環境に反映される
- リポジトリ内のデータだけでなくコードの側を書き換えても別によいわけで、間接的な自己書き換えみたいなことができる
- publish されるまでのタイムラグをカバーする仕組みが必要