ENECHANGE Developer Blog

ENECHANGE開発者ブログ

絵文字を使用すると GitHub Actions と AWS Elastic Beanstalk に罠が待ち受けている(いた)

こんにちは。ENECHANGEのgamenechangeです。伝説のゲーム moon がついにSwitchで配信開始されましたが、未だにその事実が信じられずにいます*1

さて今回は、絵文字を使用したことにより、GitHub ActionsAWS Elastic Beanstalk(eb) で罠にはまった話をしたいと思います。

GitHub Actions

GitHub Actions は、GitHub が提供する CI サービスです。現時点ではまだベータ版ですが、2019年11月13日に正式リリースされる予定になっています。

現時点ではキャッシュが使えなかったりローカル実行環境が実質無かったりするため、実案件投入にはいくつかの障壁がありますが、限定的な利用ならば大きな問題は起きていません。

しかしながら、10月2日(水)の夕方にその事件は起きました。

何もしていないのに、急に GitHub の当該リポジトリのほぼ全てのページが 500 になりました。GitHub Actions のページはもちろん、プルリクエストのページやコミット履歴のページを見ようとすると 500 になります。そしてプルリクエストを出そうとしても 500 エラーになりました。

f:id:gamenechange:20191010183528p:plain

当初はよくある一時的なエラーであり、翌日になっていれば直っているだろうと思い、その日はそのまま帰りました。ところが次の日になってもエラーは直っておらず、すぐさまサポートに連絡をしました。

f:id:gamenechange:20191010183547p:plain

「GitHub のサポートから来る返信は早い」ということを風のうわさで聞いておりましたので、この時点でもそこまで深刻なものとは考えていませんでした。しかし、その日の昼を過ぎても、夜になっても一向に復旧しません。その頃になると業務にも影響が出始めました。それでも次の日になっていれば直っているだろうと思い、その日もそのまま帰りました。

そして10/4(金)の朝に出社したところ、やはりまだ直っていませんでした。すぐさま GitHub のサポートに催促のメールを送りました。同じような状況に陥っている人は世界中見渡してみても見当たらず*2GitHub Status のページにも記載はありませんでした。

その後しばらく情報を探っていたところ、PyPA のメンバーの一人である Pradyun Gedam さんが まったく同じ現象についてツイートをしていました。このツイートを見つけたとき、「ああ、僕だけではなかったのだな」と複雑な感情ながら少し安心してしまいました。

とはいえ障害自体は一向に直る気配がなく、結論から言えばその日も夜まで直りませんでした。仕方がないので席を並べて一緒のモニタを見ながらローカルでレビューし、ローカルでマージをして当日をしのぎました。

10/5(土)の夜に転機が訪れました。GitHub のスタッフであるMike Coutermarshさん障害を修正をした旨をツイートされたのです。ツイートによると、今回の障害は GitHub Actions の設定内容に絵文字が入っている場合に起きるとのことでした。これには心当たりがありました。以下のような内容を GitHub Actions の設定ファイルに書いていたのです。

f:id:gamenechange:20191010183615p:plain

はたして、月曜に出社したときには問題なく GitHub の機能が復旧していました。絵文字を使用したことにより、(はまらなくてもいい)罠にはまった3日間でした*3

AWS Elastic Beanstalk

AWS Elastic Beanstalk(eb) は Rails などの Webアプリケーション のデプロイを容易に行えるようにしてくれるサービスです。ここにも絵文字の罠が潜んでいました。

その結論は単純です。「デプロイをする際の HEAD のコミットメッセージに絵文字が含まれていると、以下のようなメッセージが出てデプロイに失敗する」です。

$ git commit -m "😭"
[dev-enechange ed238a2] 😭
 1 file changed, 1 insertion(+), 1 deletion(-)
$ eb deploy hogehoge
 Creating application version archive "app-ed23-191010_112837".
 Uploading hogehoge/app-ed23-191010_112837.zip to S3. This may take a while.
 Upload Complete.
 ERROR: InvalidParameterValueError - Invalid unicode xml character in CreateApplicationVersionMessage.Description at index 0

InvalidParameterValueError - Invalid unicode xml character とありますので、絵文字が原因であることはすぐに気づきます。ただ、ebの場合は解決方法としては「絵文字を使わない」ことしか現状ではありません。

Gitmoji という流儀

「そもそもCIの設定ファイルやコミットメッセージに絵文字を使わない」ようにすれば上記の問題は起こりません。ただ、Gitmoji と呼ばれる、「コミットメッセージに絵文字を使うことで表現力を高めよう」とする流儀もあります。僕はこの流儀には一理あると思っており、絵文字を使うことを頭から否定することはないだろうと考えています。

結論

絵文字を使うことで表現やコミュニケーションが豊かになるのは確かであり、それにより生産性が上がることがあるという事実は見逃せません。GitHub Actions の件は極端な例だとは思いますが、サービスの利用に問題が起き得る場合のデメリットを踏まえた上で表現方法をリッチにしていくことは好ましいことだと思います。

また、開発者の立場からは、絵文字が使用された場合にクリティカルな障害を起こさないように気をつける必要があるでしょう。

ENECHANGE株式会社は絵文字好きなエンジニアを募集しています

ENECHANGE株式会社では、絵文字💪をふんだんに使って開発効率を高めてくれるエンジニアを募集しています。詳しくは 採用情報 のページをご覧下さい。

*1:気になる方はぜひ「moon 伝説」で検索してみてください

*2:もちろん社内でも見当たらない

*3:初日は平静を装っていましたが、3日目にはさすがに無茶苦茶焦っていました