読者です 読者をやめる 読者になる 読者になる

しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

Azure Logic Apps で日本語が化ける問題について調べてみた

一度でも Azure Logic Apps を使ったことがある人なら、日本語を使うと文字化けすることを知っているかと思います。地味に長く続いている問題で、プレビューリリース後から今まで直っていません。

あの有名な縄神様も、日本語というかマルチバイト文字の扱いで悩んでいるのが現状です。

てすとぶろぐ: Azure LogicApps で ApiApps を使うまで

噂によると Logic Apps の GA が比較的近いということなので、Azure 界の抱かれたい男 No.1 とフィードバックをしているのですが、直る気配が全くありません。困ったもんです。

今日、久し振りに確認しても直ってなかったので、もうちょっと原因を調べることにしました。

ちなみに Logic Apps の仕組みは大ざっぱに説明すると、以下のようになってると思います。

  • Logic Apps ランタイム
  • Gateway サービス
  • API Apps (TwitterConnector など)

ランタイム部分は Azure が持っていて、それ以外は App Service 上に展開される仕組みです。

なので、Gateway と API Apps のログを取れば、どのタイミングで文字化けが発生しているのか、確認することが出来るようになっているわけです。Gateway も API Apps なので、簡単にログを出力できます。

f:id:shiba-yan:20160126011602p:plain

ポータルから API Apps として動いている App Service を確認出来れば、後は Web Apps と同じなのでログの設定を行ったり、Kudu を使ってイベントログを見たりと自由自在です。

それはさておき、実際に Gateway の IIS ログを少し拾ってきました。

2016-01-25 10:51:34 SAMPLELOGICAPPR*** GET /api/tokens tokenName=Twitter&api-version=2015-01-14&X-ARR-LOG-ID=3c80547c-baf1-428a-8f2b-99d5e193c4e2 443 - 40.74.134.125 ApiAppsRuntimeSDK ARRAffinity=48b183d493e1728b039a4454cb702d45a8c1e0264d9fd4e5e621d2781502640b - ***.azurewebsites.net 200 0 0 887 2276 234
2016-01-25 10:51:34 SAMPLELOGICAPPR*** POST /api/consent/sign/TwitterConnector api-version=2015-01-14&X-ARR-LOG-ID=883c8121-7b7f-41b8-bb92-5a02afbf6ec1 443 - 40.74.134.125 - - - ***.azurewebsites.net 200 0 0 485 2253 31
2016-01-25 10:51:34 SAMPLELOGICAPPR*** POST /api/service/invoke/TwitterConnector/PostTweet api-version=2015-01-14&X-ARR-LOG-ID=18d5b1a4-d6c2-4280-afb4-245aa2f73580 443 - 40.74.141.235 - - - ***.azurewebsites.net 403 0 0 1532 2526 8930

これだけでは POST されたデータが分かりませんが、失敗したリクエストのログ (FREB) を組み合わせることで、どのようなデータが POST されたのか確認することが出来ます。

GENERAL_REQUEST_ENTITY にバッファリングされたデータが出力されていることが分かります。

f:id:shiba-yan:20160126012938p:plain

JSON なのに URL エンコードが必要なのかというのはとりあえず置いておいて、Logic Apps のランタイムから Gateway に送信されたタイミングでは、正しく URL エンコードされた状態で渡されていました。

Logic Apps ランタイムは問題なかったので、次は TwitterConnector の IIS ログを書き出して確認します。

2016-01-25 16:26:04 TWITTERCONNECTOR*** POST /statuses/update TweetText=%25u7e04%25u795e%25u69d8&X-ARR-LOG-ID=def59ebf-82e2-43c4-86f5-890f8ce094e9 443 - 40.74.134.125 EMA-Gateway - - ***.azurewebsites.net 403 0 0 1260 1379 5303

TweetText を見ると、URL エンコードはされていますが \u を使ったエスケープに変わっていました。どうやら Gateway に問題があることは確定のようです。

Gateway は Site Extensions として実装されているので、Visual Studio を使ったリモートデバッグも行えますが、ソースコードが無いとどうしようもないので、結局のところは中の人待ちになります。

TwitterConnector はサーバーエクスプローラーからリモートデバッグを簡単に行えますが、Gateway は上の記事と同じ方法を使ってアタッチする必要があります。

使う機会はほぼ無いと思いますが、SCM 側へのアタッチは WebJob も対象に出来るので便利です。

追記

この記事を公開したところ、Logic Apps 公式アカウントから回答を貰いました。

チームは異なっていますが、帝国兵さんも聞いてくださったとのことで、同じく回答をいただきました。本当に感謝しかありません。

今回、文字化けの原因となっている Gateway が新しいアーキテクチャでは削除されるので、現在の Gateway に起因する問題は発生しなくなるということのようです。

アップデートは next few weeks とのことなので、アップデートを待ちたいと思います。

更に追記

Logic Apps の PM から、直接 Twitter で日本語の返事を貰いました。実際に Logic Apps から Twitter Connector を使って日本語をツイートしてくれたようです。

文字化けは無事に修正されたようなので、後はデプロイを待つばかりという感じです。