今日もひたすら GitHub-to-Qiita の実装周りのことをやっていた。
https://github.com/noraworld/github-to-qiita ⇱
今日は主にエラーハンドリングと README の記載をしていた。
昨日、動いたといっていたが、それは前の実装(Webhook 側の処理)のほうでうまくいっていただけみたいだった。
そちら側を無効にして、GitHub Actions で動作確認をしたら、動かなかった。
ステータスは OK になっているが、動いていないので、まずはエラーハンドリングをした。エラークラスを作って、変数やメソッドの返り値が想定外の値になっていたらエラーを出すようにした。
そしたら、どこで失敗しているのかがわかった。Qiita の API が 403 を返していた。
エラーハンドリングをする前は特に例外も吐かれずに次の処理に進んでしまっていたために OK になっていた。
それはともかく、なぜ 403 を返すのだろうか。ネットで調べても大した記事は出てこなかった。
トークンが間違っている場合は 401 だからそれは関係ない。環境変数も想定通りセットされていることを確認済み。
しかも、ローカルではうまく動作している。GitHub Actions 経由だと 403 になる。
トークンの制限がかかってしまっているのかと思い、ローカルと同じトークンをセットしても結果は同じ。
うーん、明らかにおかしい。というか、嫌な予感がしてきた。
同じコード、同じ環境変数、同じトークンなのに、環境によって動いたり動かなかったりする…… このようなことが起こる原因として考えられるのは、IP アドレスで制限をかけられている、という可能性が高い。
もしかしたら GitHub Actions では外部 API を叩くのに特別な設定がいるのかも、とかも思ったのだが、調べてみた限り、そのような記述は見当たらなかった。
もし Qiita 側で IP アドレス制限をかけているのが原因だとすると、もうこちら側ではなす術がない。せっかくここまで実装してきたのに諦めるしかないのか……。
一応、Qiita に問い合わせてみた。今日は日曜日なので回答が来るのは明日以降になるだろう。
IP アドレスが原因ではないことを祈りたいが、もうそれが原因な気がしてならない。
まあ、サーバレスで実装するとこういう問題が起こるかもしれないという良い教訓にはなったかな。
今後、Twitter のツイートや Slack の投稿を を Webhook で取る実装をサーバレスでやろうと考えているのだが、選ぶプラットフォームによっては同じ問題が起こるかもしれないし。
というか、今日 Qiita のアクセストークン一覧を見たら Publishment via GitHub
という名前のトークンがあるのを発見してしまった。
Beta 版と書かれていたのだが、もしかして Qiita 公式で GitHub リポジトリとの連携をサポートし始めていたりするのか……?
だとしたらいよいよ、ここ数日で作っていた GitHub-to-Qiita は何のためだったんだ……。まあ、楽に Qiita とも共有できるようになるんだったら嬉しいけどね。けどね。