git push で自動反映

Glitch でアプリケーションを作成するとそのプロジェクトはノンベアな Git リポジトリとして作られます。その為、上手いことやればgit push後に更新内容を即反映させれます。

ローカルマシンの準備

まずはgit pushできるようにする必要があります。

Glitch でアプリケーションを作った後の下部メニューにある Tools から確認できます。この URL がgit push先になります。

その URL がhttps://...@api.glitch.com/git/<アプリ名>のような場合、

git clone https://...@api.glitch.com/git/<アプリ名> --origin glitch
# リモート名を glitch としてクローンする

で持ってくるか、既存のプロジェクトの場合はglitchというリモート URL 情報を追記します。

git remote add glitch https://...@api.glitch.com/git/<アプリ名>

これでgit push glitch <branch>git pushコマンドは叩けるようになりました。

Glitch 側の準備

こちらは2つの準備が必要です。

  1. ローカルからgit pushできるように
  2. アプリ更新されるように

ローカルから git push できるように

今の状態ではまだ Glitch へgit pushできません。上記でも書いたとおりノンベアなリポジトリだからです。ちなみんこれは Glitch 上でmasterにいる場合masterへはgit pushできないことを意味します。

ですが、この制約は解除することが可能です。これには Glitch 側のコンソールに入りプロジェクトディレクトリの中で git config --add receive.denyCurrentBranch ignoreを実行します。
これでローカルからここへgit pushできるようになりました。

制約解除については、複数人で開発しているような場合に、履歴が狂わないようとの制約ですが、目的は単にアプリケーションを最新の状態にすることだけであって、コードの管理ではない為(それは GitHub などで行う)この制約は無くしても大丈夫だと考えます。

アプリ更新されるように

git pushされた後コードは更新されるはずですが、まだ完全ではありません。Glitch ではアプリケーションの更新にはターミナルでrefreshというコマンドを叩く必要があります。

この解決には Git フックのサーバーサイドフックであるpost-receiveフックを使います。これはgit pushされコードの更新などされた後に実行されるフックです。
Glitch ターミナルから.git/hooks/post-receiveファイルを以下のように書き換えます。

#!/bin/sh

cd /app;
git --git-dir=.git reset --hard
refresh

これは、

  1. /appディレクトリ(リポジトリ)へ移動
  2. 何故か差分があるので最新コードにリセット
  3. refreshでアプリケーション更新

を行います。

最後にこのファイルへ実行権限を渡しておきます。

chmod +x .git/hooks/post-receive

確認

うまく設定できれば、適当にgit push glitch ...後に一連のフローでアプリケーションが更新されるはずです。