2018-06-14(木) [長年日記]
■ Twitterの仕様変更でHeroku Review Appsが使い物にならなくなった
今日、dependabotやtachikoma.ioが送りつけてきたプルリクを動作確認しながら淡々とやっつけていたら、あるWebアプリが動かない。ログにはmemcache(?)で認証(?)関係のメッセージが出ていたので、利用しているMemcacherサービスのトラブルかと思ったらそうではない*1。いろいろたどっていくとTwitter が OAuth 認証時 Callback URL をチェックするようになったみたいという記事をみつけた。これかぁぁぁ。Twitterからのアナウンスは1ヶ月前にあったということなので、まぁ知らずにほっといたおれが悪い。ちゃんと設定すれば問題ない(後述)。productionやstaging環境なら。
問題は、Heroku Review Appsである。
Heroku Review AppsとはHeroku Pipeline内の一機能で、GitHub上に作られたプルリクエスト単位で自動的にそのインスタンスを作ってくれる超便利機能である。つまり:
- プルリクがくる
- 自動でCIが走る
- 自動で作られたレビュー用のアプリで動作チェックする
- プルリクをmasterにマージ
- 自動でstaging環境にデプロイ
……みたいな流れを作れるので、ほんとこれなしで開発するなんて、いまではもう考えられないくらい。
で、そういう流れにTwitter OAuth認証を組み込んだアプリを入れてあると、今回の仕様変更が壁になる。今回の変更でTwitterはCallback URLsをホワイトリストとして厳密にマッチングをするようになったのだけど、Review Appは毎回URLが変わる*2ので、あらかじめ設定しておくことができない。つまりReview AppではTwitter認証が必要な機能をテストできない。
とりあえず今日のところはスマートな解決策が見つからない。動作チェックするたびにReview AppのURLをCallbackに設定するとか、そんなんやってられないしなぁ。もしくはいったんdevブランチへマージして、dev用のアプリ(URL固定)で動作チェックするようにフローを変更するか。でも内部的にはそういうルールを作れても、外部からきたプルリクはmaster宛だしなー。GitHubのDefault branchをdevにすれば運用できるとはいえ、面倒が増えることに変わりはない……。とりあえず小さいアプリで後者の策を試してみるか。
さきほど「ちゃんと設定すれば問題ない」と書いたが「ちゃんと」は自明ではない。tDiaryをHerokuで動かしてる人もいると思うが、ちょっと罠があるので注意が必要。
https://apps.twitter.com/ へアクセスして、認証に使っているアプリのページへ移動、Settingsタブを開く。その中のCallback URLsに適切なURLを指定しなくてはならないのだが、tDiaryの場合はこう(「hoge」部分は自分のサイトに合わせる):
https://hoge.herokuapp.com/update.rb/auth/twitter/callback
途中にはさまってる「update.rb」がポイント。tDiaryでは認証を要求してくるのはupdate.rbなので、これを入れ忘れるとうまく動かない。
sign in with Twitter を切った consumer token を review app で使えば回避できないかなあ。あれが有効になっているやつむけの変更で、あれを入れてると2回目以降にauthorizeページをスキップするってやつのはず。
そんな機能が! ちょっと勉強して試してみる。ただ(stagingじゃなくて)review appsにだけ特別な環境変数を指定するのがちょっと面倒かもしれん。
関係なかったっぽい >Sign in with Twitter
そもそも既存のkeyはどれもここのチェックなど入っていなかったよ。
まさに同じ状態を経験しました<(_ _)>
参考になる情報ありがとうございます!