トップ 最新

ただのにっき

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上に作られたプルリクエスト単位で自動的にそのインスタンスを作ってくれる超便利機能である。つまり:

  1. プルリクがくる
  2. 自動でCIが走る
  3. 自動で作られたレビュー用のアプリで動作チェックする
  4. プルリクをmasterにマージ
  5. 自動で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なので、これを入れ忘れるとうまく動かない。

*1 「OAuth::Unauthorized: 403 Forbidden」というメッセージを読んでどうしてそう考えたのか自分でも不思議である。よくあるんだけど。

*2 たとえば「hoge.herokuapp.com」のReview Appだと「hoge-pr-123.herokuapp.com」みたいにプルリクの番号が入る。正確にはhogeはPipelineの名前だけど。