CINXE.COM
PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG
<!DOCTYPE html> <html lang="ja" data-admin-domain="//blog.hatena.ne.jp" data-admin-origin="https://blog.hatena.ne.jp" data-author="torana-tech" data-avail-langs="ja en" data-blog="torana-tech.hatenablog.com" data-blog-host="torana-tech.hatenablog.com" data-blog-is-public="1" data-blog-name="TORANA TECH BLOG" data-blog-owner="torana-tech" data-blog-show-ads="" data-blog-show-sleeping-ads="" data-blog-uri="https://tech.torana.co.jp/" data-blog-uuid="26006613563864813" data-blogs-uri-base="https://tech.torana.co.jp" data-brand="devblog" data-data-layer="{"hatenablog":{"admin":{},"analytics":{"brand_property_id":"","measurement_id":"","non_sampling_property_id":"","property_id":"","separated_property_id":"UA-29716941-18"},"blog":{"blog_id":"26006613563864813","content_seems_japanese":"true","disable_ads":"custom_domain","enable_ads":"false","enable_keyword_link":"true","entry_show_footer_related_entries":"true","force_pc_view":"false","is_public":"true","is_responsive_view":"false","is_sleeping":"true","lang":"ja","name":"TORANA TECH BLOG","owner_name":"torana-tech","uri":"https://tech.torana.co.jp/"},"brand":"devblog","page_id":"entry","permalink_entry":{"author_name":"watarukura","categories":"","character_count":2461,"date":"2021-09-29","entry_id":"13574176438016970079","first_category":"","hour":"14","title":"PHP\u306e\u30d1\u30c3\u30c1\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4e0a\u3052\u305f\u3089\u3072\u3069\u3044\u76ee\u306b\u3042\u3063\u305f\u8a71","uri":"https://tech.torana.co.jp/entry/2021/09/29/141642"},"pro":"pro","router_type":"blogs"}}" data-device="pc" data-dont-recommend-pro="false" data-global-domain="https://hatena.blog" data-globalheader-color="b" data-globalheader-type="pc" data-has-touch-view="1" data-help-url="https://help.hatenablog.com" data-page="entry" data-parts-domain="https://hatenablog-parts.com" data-plus-available="1" data-pro="true" data-router-type="blogs" data-sentry-dsn="https://03a33e4781a24cf2885099fed222b56d@sentry.io/1195218" data-sentry-environment="production" data-sentry-sample-rate="0.1" data-static-domain="https://cdn.blog.st-hatena.com" data-version="c85372bc899dec1e795892b094b326" data-initial-state="{}" > <head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# article: http://ogp.me/ns/article#"> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="robots" content="max-image-preview:large" /> <meta charset="utf-8"/> <meta http-equiv="X-UA-Compatible" content="IE=7; IE=9; IE=10; IE=11" /> <title>PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG</title> <link rel="canonical" href="https://tech.torana.co.jp/entry/2021/09/29/141642"/> <meta itemprop="name" content="PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG"/> <meta itemprop="image" content="https://cdn.image.st-hatena.com/image/scale/073047bae4ffecaa659cce2edcfdf5042d06fb2f/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwatarukura%2F20210929%2F20210929103126.png"/> <meta property="og:title" content="PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG"/> <meta property="og:type" content="article"/> <meta property="og:url" content="https://tech.torana.co.jp/entry/2021/09/29/141642"/> <meta property="og:image" content="https://cdn.image.st-hatena.com/image/scale/073047bae4ffecaa659cce2edcfdf5042d06fb2f/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwatarukura%2F20210929%2F20210929103126.png"/> <meta property="og:image:alt" content="PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG"/> <meta property="og:description" content="バックエンドエンジニアのクラシマです。 2021/08/25(水)に、本番サーバのPHPを7.4.21 -> 7.4.22にバージョンアップしました。 renovateでプルリクエストが作られるので、追っかけるだけです。 tech.torana.co.jp AMIは前日に作ってあり、当日はLaunchTemplateの向き先を変更するためにterraform applyして、AutoScalingGroupからインスタンスの更新をするだけ。 や~便利になったなぁ、なんて作業してたらSlackが大騒ぎに・・・ 大惨事の一コマ 切り戻し! 急いで切り戻し!と判断したのは良いものの、まさかPHPのバ…" /> <meta property="og:site_name" content="TORANA TECH BLOG"/> <meta property="article:published_time" content="2021-09-29T05:16:42Z" /> <meta name="twitter:card" content="summary_large_image" /> <meta name="twitter:image" content="https://cdn.image.st-hatena.com/image/scale/073047bae4ffecaa659cce2edcfdf5042d06fb2f/backend=imagemagick;version=1;width=1300/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwatarukura%2F20210929%2F20210929103126.png" /> <meta name="twitter:title" content="PHPのパッチバージョンを上げたらひどい目にあった話 - TORANA TECH BLOG" /> <meta name="twitter:description" content="バックエンドエンジニアのクラシマです。 2021/08/25(水)に、本番サーバのPHPを7.4.21 -> 7.4.22にバージョンアップしました。 renovateでプルリクエストが作られるので、追っかけるだけです。 tech.torana.co.jp AMIは前日に作ってあり、当日はLaunchTemplateの…" /> <meta name="twitter:app:name:iphone" content="はてなブログアプリ" /> <meta name="twitter:app:id:iphone" content="583299321" /> <meta name="twitter:app:url:iphone" content="hatenablog:///open?uri=https%3A%2F%2Ftech.torana.co.jp%2Fentry%2F2021%2F09%2F29%2F141642" /> <meta name="twitter:site" content="@toysub_" /> <meta name="description" content="バックエンドエンジニアのクラシマです。 2021/08/25(水)に、本番サーバのPHPを7.4.21 -> 7.4.22にバージョンアップしました。 renovateでプルリクエストが作られるので、追っかけるだけです。 tech.torana.co.jp AMIは前日に作ってあり、当日はLaunchTemplateの向き先を変更するためにterraform applyして、AutoScalingGroupからインスタンスの更新をするだけ。 や~便利になったなぁ、なんて作業してたらSlackが大騒ぎに・・・ 大惨事の一コマ 切り戻し! 急いで切り戻し!と判断したのは良いものの、まさかPHPのバ…" /> <script id="embed-gtm-data-layer-loader" data-data-layer-page-specific="{"hatenablog":{"blogs_permalink":{"is_author_pro":"true","is_blog_sleeping":"true","entry_afc_issued":"false","has_related_entries_with_elasticsearch":"true","blog_afc_issued":"false"}}}" > (function() { function loadDataLayer(elem, attrName) { if (!elem) { return {}; } var json = elem.getAttribute(attrName); if (!json) { return {}; } return JSON.parse(json); } var globalVariables = loadDataLayer( document.documentElement, 'data-data-layer' ); var pageSpecificVariables = loadDataLayer( document.getElementById('embed-gtm-data-layer-loader'), 'data-data-layer-page-specific' ); var variables = [globalVariables, pageSpecificVariables]; if (!window.dataLayer) { window.dataLayer = []; } for (var i = 0; i < variables.length; i++) { window.dataLayer.push(variables[i]); } })(); </script> <!-- Google Tag Manager --> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-P4CXTW');</script> <!-- End Google Tag Manager --> <link rel="shortcut icon" href="https://tech.torana.co.jp/icon/favicon"> <link rel="apple-touch-icon" href="https://tech.torana.co.jp/icon/touch"> <link rel="icon" sizes="192x192" href="https://tech.torana.co.jp/icon/link"> <link rel="alternate" type="application/atom+xml" title="Atom" href="https://tech.torana.co.jp/feed"/> <link rel="alternate" type="application/rss+xml" title="RSS2.0" href="https://tech.torana.co.jp/rss"/> <link rel="alternate" type="application/json+oembed" href="https://hatena.blog/oembed?url=https%3A%2F%2Ftech.torana.co.jp%2Fentry%2F2021%2F09%2F29%2F141642&format=json" title="oEmbed Profile of PHPのパッチバージョンを上げたらひどい目にあった話"/> <link rel="alternate" type="text/xml+oembed" href="https://hatena.blog/oembed?url=https%3A%2F%2Ftech.torana.co.jp%2Fentry%2F2021%2F09%2F29%2F141642&format=xml" title="oEmbed Profile of PHPのパッチバージョンを上げたらひどい目にあった話"/> <link rel="author" href="http://www.hatena.ne.jp/watarukura/"> <link rel="preload" href="https://cdn-ak.f.st-hatena.com/images/fotolife/m/m3m0r7/20220822/20220822145206.png" as="image"/> <link rel="stylesheet" type="text/css" href="https://cdn.blog.st-hatena.com/css/blog.css?version=c85372bc899dec1e795892b094b326"/> <link rel="stylesheet" type="text/css" href="https://usercss.blog.st-hatena.com/blog_style/26006613563864813/f3274205aa9a60647fefc9ff3605e5958b809a43"/> <script> </script> <style> div#google_afc_user, div.google-afc-user-container, div.google_afc_image, div.google_afc_blocklink { display: block !important; } </style> <script type="application/ld+json">{"@context":"http://schema.org","@type":"Article","dateModified":"2023-12-19T12:21:37+09:00","datePublished":"2021-09-29T14:16:42+09:00","headline":"PHPのパッチバージョンを上げたらひどい目にあった話","image":["https://cdn-ak.f.st-hatena.com/images/fotolife/w/watarukura/20210929/20210929103126.png"]}</script> </head> <body class="page-entry customized-background-image globalheader-ng-enabled"> <div id="globalheader-container" data-brand="hatenablog" > <iframe id="globalheader" height="37" frameborder="0" allowTransparency="true"></iframe> </div> <nav class=" blog-controlls "> <div class="blog-controlls-blog-icon"> <a href="https://tech.torana.co.jp/"> <img src="https://cdn.image.st-hatena.com/image/square/21f1d19c3f9d91986163c6f633c20790b5d8cc99/backend=imagemagick;height=128;version=1;width=128/https%3A%2F%2Fcdn.user.blog.st-hatena.com%2Fblog_custom_icon%2F153160813%2F1661143538645569" alt="TORANA TECH BLOG"/> </a> </div> <div class="blog-controlls-title"> <a href="https://tech.torana.co.jp/">TORANA TECH BLOG</a> </div> <a href="https://blog.hatena.ne.jp/torana-tech/torana-tech.hatenablog.com/subscribe?utm_campaign=subscribe_blog&utm_medium=button&utm_source=blogs_topright_button" class="blog-controlls-subscribe-btn test-blog-header-controlls-subscribe"> 読者になる </a> </nav> <div id="container"> <div id="container-inner"> <header id="blog-title" data-brand="hatenablog"> <div id="blog-title-inner" > <div id="blog-title-content"> <h1 id="title"><a href="https://tech.torana.co.jp/">TORANA TECH BLOG</a></h1> <h2 id="blog-description">株式会社トラーナのエンジニアチームの開発ブログ</h2> </div> </div> </header> <div id="top-box"> <div class="breadcrumb" data-test-id="breadcrumb"> <div class="breadcrumb-inner"> <a class="breadcrumb-link" href="https://tech.torana.co.jp/"><span>トップ</span></a> <span class="breadcrumb-gt">></span> <span class="breadcrumb-child"> <span>PHPのパッチバージョンを上げたらひどい目にあった話</span> </span> </div> </div> </div> <script type="application/ld+json" class="test-breadcrumb-json-ld"> {"@type":"BreadcrumbList","itemListElement":[{"item":{"@id":"https://tech.torana.co.jp/","name":"トップ"},"@type":"ListItem","position":1}],"@context":"http://schema.org"} </script> <div id="content" class="hfeed" > <div id="content-inner"> <div id="wrapper"> <div id="main"> <div id="main-inner"> <!-- google_ad_section_start --> <!-- rakuten_ad_target_begin --> <article class="entry hentry test-hentry js-entry-article date-first autopagerize_page_element chars-2800 words-100 mode-markdown entry-odd" id="entry-13574176438016970079" data-keyword-campaign="" data-uuid="13574176438016970079" data-publication-type="entry"> <div class="entry-inner"> <header class="entry-header"> <div class="date entry-date first"> <a href="https://tech.torana.co.jp/archive/2021/09/29" rel="nofollow"> <time datetime="2021-09-29T05:16:42Z" title="2021-09-29T05:16:42Z"> <span class="date-year">2021</span><span class="hyphen">-</span><span class="date-month">09</span><span class="hyphen">-</span><span class="date-day">29</span> </time> </a> </div> <h1 class="entry-title"> <a href="https://tech.torana.co.jp/entry/2021/09/29/141642" class="entry-title-link bookmark">PHPのパッチバージョンを上げたらひどい目にあった話</a> </h1> </header> <div class="entry-content hatenablog-entry"> <p>バックエンドエンジニアのクラシマです。</p> <p>2021/08/25(水)に、本番サーバの<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>を7.4.21 -> 7.4.22にバージョンアップしました。 renovateでプルリク<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%A8%A5%B9">エス</a>トが作られるので、追っかけるだけです。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Ftech.torana.co.jp%2Fentry%2F2021%2F07%2F16%2F110139" title="Renovate を取り入れて、バージョンアップを自動化しました - TORANA TECH BLOG" class="embed-card embed-blogcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 190px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://tech.torana.co.jp/entry/2021/07/16/110139">tech.torana.co.jp</a></cite></p> <p>AMIは前日に作ってあり、当日はLaunchTemplateの向き先を変更するためにterraform applyして、AutoScalingGroupから<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%A4%A5%F3%A5%B9%A5%BF%A5%F3%A5%B9">インスタンス</a>の更新をするだけ。</p> <p>や~便利になったなぁ、なんて作業してたらSlackが大騒ぎに・・・</p> <p><figure class="figure-image figure-image-fotolife" title="大惨事の一コマ"><span itemscope itemtype="http://schema.org/Photograph"><img src="https://cdn-ak.f.st-hatena.com/images/fotolife/w/watarukura/20210929/20210929103126.png" width="1200" height="84" loading="lazy" title="" class="hatena-fotolife" itemprop="image"></span><figcaption>大惨事の一コマ</figcaption></figure></p> <h2 id="切り戻し">切り戻し!</h2> <p>急いで切り戻し!と判断したのは良いものの、まさか<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>のバージョンアップ起因だとはその時は思いもよらず。</p> <p>当日deployしたアプリケーションや、Aurora <a class="keyword" href="https://d.hatena.ne.jp/keyword/MySQL">MySQL</a>の設定変更などを順次戻していきますが、一向に回復せず。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/stg">stg</a>環境でも動作が同じだったのですが、もう一台のpre-<a class="keyword" href="https://d.hatena.ne.jp/keyword/stg">stg</a>環境(featureブランチを適用しての動作確認用環境)では保存できることが判明。 AMIを変更したら戻った、というところから根本原因の調査を開始しました。</p> <p>(この間、約1.5h...)</p> <h2 id="原因調査">原因調査</h2> <p>本番・<a class="keyword" href="https://d.hatena.ne.jp/keyword/stg">stg</a>環境とpre-<a class="keyword" href="https://d.hatena.ne.jp/keyword/stg">stg</a>環境の差異を上げて、1つずつ検証していき、ようやく<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>のパッチバージョン起因と判明。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a> 7.4.22 + Swoole 4.6.7 から<a class="keyword" href="https://d.hatena.ne.jp/keyword/amazon">amazon</a>-<a class="keyword" href="https://d.hatena.ne.jp/keyword/sdk">sdk</a>-<a class="keyword" href="https://d.hatena.ne.jp/keyword/php">php</a>を呼び出すと遅い。 SQSへジョブキューを溜めているのですが、メッセージが保存されてから、なぜかレスポンスが返ってくるのに60秒かかる。 ALBの<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%BF%A5%A4%A5%E0%A5%A2%A5%A6%A5%C8">タイムアウト</a>をデフォルトの60秒で使っていたので、<a class="keyword" href="https://d.hatena.ne.jp/keyword/504%20Gateway%20Timeout">504 Gateway Timeout</a>、というわけです。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>のバージョンとSwooleのバージョンの組み合わせを変えたりと試してみたのですが、<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a> 7.4.21 + Swoole 4.6.7以外は遅くて実用に耐えないことがわかりました。</p> <h2 id="是正対応">是正対応</h2> <p>さて、困りました。EC2で動作しているアプリケーションの<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>のパッチバージョンを固定したい。</p> <p>現在は、PackerでAMIを作っており、remiを使用してPHP7.4を<a class="keyword" href="https://d.hatena.ne.jp/keyword/yum">yum</a> installしています。 マイナーバージョンまでは指定できるものの、パッチバージョンは指定できません。</p> <p>以下、3つの方法を試しました。</p> <ol> <li><a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>を<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%BD%A1%BC%A5%B9%A5%B3%A1%BC%A5%C9">ソースコード</a>からビルドする</li> <li>Dockerを使用する</li> <li>動いていたAMIを活かす</li> </ol> <p>1.はだいぶ苦労する道でした・・・。</p> <p>とりあえず<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>公式イメージを使っていた開発用のDockerイメージをAmazonLinux2に変更してビルド、動作するまで試してみます。 ローカルでテストを一回し、全部通ったらPackerでAMI作って動作確認。 めもりーさんが「ソースからビルドするのは簡単ですよ」って言うのでホイホイやってみたのですが、まぁ、うん、できますけど、うん...。 で。EC2起動して動かしてみたらどうも動作が遅い、どこに原因があるかわからない。期限として決めていた1週間が過ぎたので、とりあえずこの線はパスだな、と。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fzenn.dev%2Fmemory%2Farticles%2F43e0e2fb0c525a4aa025" title="PHP 8 をビルドする" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://zenn.dev/memory/articles/43e0e2fb0c525a4aa025">zenn.dev</a></cite></p> <p>2.では、まずFargate on ECSへの移行を考えました。</p> <p>影響範囲をコン<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%C8%A5%ED%A1%BC%A5%EB">トロール</a>しやすいバッチサーバから移行してみようとcronジョブとジョブキューを1つずつTaskに切り出して検証してみます。 動作に支障がなさそうでよしよし、と思っていたところ、EC2からの実行だと3時間で終わるcronジョブの1つが一向に終わらないことに気づきました。 AuroraMySQLからデータを取り出し、<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>で加工してElasticsearch Service(以下、ES)へ登録する、というものです。どうやら、ESへの書き込みが遅い。5倍くらい時間がかかる。</p> <p>Swooleは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>パラメータやulimitを変更しないとリソース不足で動かないので、その辺かと当たりをつけたのですが、Fargateからは<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%AB%A1%BC%A5%CD%A5%EB">カーネル</a>パラメータがいじれない。 諦めてEC2 on ECSで実行し、ネットワークモードをawsvpcからbridgeやhostに変更してみたもののコレでもダメ。 ECSの問題か、と既存のバッチサーバ用EC2にdockerをインストールしてdocker runしてもダメ。 <a class="keyword" href="https://d.hatena.ne.jp/keyword/AWS">AWS</a>サポートに相談してみたものの、「ECSの問題ではなさそうなので回答できませんね」と切り分けていただきました。無念。と、この対応には結局2週間かかりました。</p> <p>↓みなさまも+1していただけると<a class="keyword" href="https://d.hatena.ne.jp/keyword/AWS">AWS</a>さんがFargateでsysctlsをサポートしてくれるかも! <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Faws%2Fcontainers-roadmap%2Fissues%2F460%23issuecomment-918791111" title="[Fargate] [request]: Fargate sysctls support · Issue #460 · aws/containers-roadmap" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/aws/containers-roadmap/issues/460#issuecomment-918791111">github.com</a></cite></p> <p>で、3.です。</p> <p><a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a> 7.4.21 + Swoole 4.6.7が動作しているAMIを使って、Packerでアレコレ追加実装した部分をCodeDeployのinstallAfter<a class="keyword" href="https://d.hatena.ne.jp/keyword/%A5%B9%A5%AF%A5%EA%A5%D7%A5%C8">スクリプト</a>に移植します。</p> <p>具体的には、Cloudwatch-Agentのインストールなどです。 動作検証こそ面倒なものの、手堅く動きます。 問題は、<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>もSwooleもバージョンがどんどん進んでいくことです。セキュリティ面からも、追随しないことには不安があります。</p> <h2 id="恒久対応">恒久対応</h2> <p>しかし、もう大丈夫。めもりーさんがSwoole本体に上げたIssueがクローズされ、次のバージョンのSwooleへは反映されそうです。 当該コミットハッシュをcheckoutして検証してみましたが、<a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a> 7.4.21でも7.4.24(2021/09/29時点の最新)でも支障なく動作します。 <iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fgithub.com%2Fswoole%2Fswoole-src%2Fissues%2F4393" title="`curl_multi_select` did not complete or did timeout when calling curl functions 2 (or more) times on Guzzle or AWS-SDK. · Issue #4393 · swoole/swoole-src" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://github.com/swoole/swoole-src/issues/4393">github.com</a></cite></p> <p>ということで、1ヶ月かかった障害の恒久対応がようやく終わりそうでほっとしております。 <a class="keyword" href="https://d.hatena.ne.jp/keyword/PHP">PHP</a>のパッチバージョンを上げるのにもヒヤヒヤする仕事、一緒にやっていきたい方を募集中です。</p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.wantedly.com%2Fprojects%2F533124" title=" 知育玩具のサブスク|TypeScriptで開発するフロントエンジニア - 株式会社トラーナのWebエンジニアの採用 - Wantedly" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.wantedly.com/projects/533124">www.wantedly.com</a></cite></p> <p><iframe src="https://hatenablog-parts.com/embed?url=https%3A%2F%2Fwww.wantedly.com%2Fprojects%2F533131" title="知育玩具のサブスク|PHPを利用しモダンな開発をするバックエンドエンジニア - 株式会社トラーナのWebエンジニアの採用 - Wantedly" class="embed-card embed-webcard" scrolling="no" frameborder="0" style="display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;" loading="lazy"></iframe><cite class="hatena-citation"><a href="https://www.wantedly.com/projects/533131">www.wantedly.com</a></cite></p> </div> <footer class="entry-footer"> <div class="entry-tags-wrapper"> <div class="entry-tags"> </div> </div> <p class="entry-footer-section track-inview-by-gtm" data-gtm-track-json="{"area": "finish_reading"}"> <span class="author vcard"><span class="fn" data-load-nickname="1" data-user-name="watarukura" >watarukura</span></span> <span class="entry-footer-time"><a href="https://tech.torana.co.jp/entry/2021/09/29/141642"><time data-relative datetime="2021-09-29T05:16:42Z" title="2021-09-29T05:16:42Z" class="updated">2021-09-29 14:16</time></a></span> <span class=" entry-footer-subscribe " data-test-blog-controlls-subscribe> <a href="https://blog.hatena.ne.jp/torana-tech/torana-tech.hatenablog.com/subscribe?utm_source=blogs_entry_footer&utm_campaign=subscribe_blog&utm_medium=button"> 読者になる </a> </span> </p> <div class="hatena-star-container" data-hatena-star-container data-hatena-star-url="https://tech.torana.co.jp/entry/2021/09/29/141642" data-hatena-star-title="PHPのパッチバージョンを上げたらひどい目にあった話" data-hatena-star-variant="profile-icon" data-hatena-star-profile-url-template="https://blog.hatena.ne.jp/{username}/" ></div> <div class="social-buttons"> <div class="social-button-item"> <a href="https://b.hatena.ne.jp/entry/s/tech.torana.co.jp/entry/2021/09/29/141642" class="hatena-bookmark-button" data-hatena-bookmark-url="https://tech.torana.co.jp/entry/2021/09/29/141642" data-hatena-bookmark-layout="vertical-balloon" data-hatena-bookmark-lang="ja" title="この記事をはてなブックマークに追加"><img src="https://b.st-hatena.com/images/entry-button/button-only.gif" alt="この記事をはてなブックマークに追加" width="20" height="20" style="border: none;" /></a> </div> <div class="social-button-item"> <div class="fb-share-button" data-layout="box_count" data-href="https://tech.torana.co.jp/entry/2021/09/29/141642"></div> </div> <div class="social-button-item"> <a class="entry-share-button entry-share-button-twitter test-share-button-twitter" href="https://x.com/intent/tweet?text=PHP%E3%81%AE%E3%83%91%E3%83%83%E3%83%81%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%82%92%E4%B8%8A%E3%81%92%E3%81%9F%E3%82%89%E3%81%B2%E3%81%A9%E3%81%84%E7%9B%AE%E3%81%AB%E3%81%82%E3%81%A3%E3%81%9F%E8%A9%B1+-+TORANA+TECH+BLOG&url=https%3A%2F%2Ftech.torana.co.jp%2Fentry%2F2021%2F09%2F29%2F141642" title="X(Twitter)で投稿する" ></a> </div> </div> <div class="customized-footer"> <div class="entry-footer-modules" id="entry-footer-secondary-modules"> <div class="hatena-module hatena-module-related-entries" > <!-- Hatena-Epic-has-related-entries-with-elasticsearch:true --> <div class="hatena-module-title"> 関連記事 </div> <div class="hatena-module-body"> <ul class="related-entries hatena-urllist urllist-with-thumbnails"> <li class="urllist-item related-entries-item"> <div class="urllist-item-inner related-entries-item-inner"> <a class="urllist-image-link related-entries-image-link" href="https://tech.torana.co.jp/entry/2024/05/20/123000"> <img alt="Datadog APM with Swoole" src="https://cdn.image.st-hatena.com/image/square/64cacf72459779531d0a535cc67de663153d039f/backend=imagemagick;height=100;version=1;width=100/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwatarukura%2F20240518%2F20240518115541.png" class="urllist-image related-entries-image" title="Datadog APM with Swoole" width="100" height="100" loading="lazy"> </a> <div class="urllist-date-link related-entries-date-link"> <a href="https://tech.torana.co.jp/archive/2024/05/20" rel="nofollow"> <time datetime="2024-05-20T03:30:00Z" title="2024年5月20日"> 2024-05-20 </time> </a> </div> <a href="https://tech.torana.co.jp/entry/2024/05/20/123000" class="urllist-title-link related-entries-title-link urllist-title related-entries-title">Datadog APM with Swoole</a> <div class="urllist-entry-body related-entries-entry-body">SREのクラシマです。 さて、久々にSwooleの話を。 X(旧Twitter)…</div> </div> </li> <li class="urllist-item related-entries-item"> <div class="urllist-item-inner related-entries-item-inner"> <div class="urllist-date-link related-entries-date-link"> <a href="https://tech.torana.co.jp/archive/2024/01/12" rel="nofollow"> <time datetime="2024-01-12T03:30:00Z" title="2024年1月12日"> 2024-01-12 </time> </a> </div> <a href="https://tech.torana.co.jp/entry/2024/01/12/123000" class="urllist-title-link related-entries-title-link urllist-title related-entries-title">トラーナterraform今昔</a> <div class="urllist-entry-body related-entries-entry-body">SREのクラシマです。 トラーナに入社してから、terraformを触る…</div> </div> </li> <li class="urllist-item related-entries-item"> <div class="urllist-item-inner related-entries-item-inner"> <a class="urllist-image-link related-entries-image-link" href="https://tech.torana.co.jp/entry/2023/07/28/123000"> <img alt="DD_ENV、DD_SERVICE、DD_VERSIONを統一した話" src="https://cdn.image.st-hatena.com/image/square/a6118660607013fdbad2e8bd4384b8adbfd6585d/backend=imagemagick;height=100;version=1;width=100/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fw%2Fwatarukura%2F20230727%2F20230727180054.png" class="urllist-image related-entries-image" title="DD_ENV、DD_SERVICE、DD_VERSIONを統一した話" width="100" height="100" loading="lazy"> </a> <div class="urllist-date-link related-entries-date-link"> <a href="https://tech.torana.co.jp/archive/2023/07/28" rel="nofollow"> <time datetime="2023-07-28T03:30:00Z" title="2023年7月28日"> 2023-07-28 </time> </a> </div> <a href="https://tech.torana.co.jp/entry/2023/07/28/123000" class="urllist-title-link related-entries-title-link urllist-title related-entries-title">DD_ENV、DD_SERVICE、DD_VERSIONを統一した話</a> <div class="urllist-entry-body related-entries-entry-body">SREのクラシマです。 今回はDatadog用の設定を変更した話です。…</div> </div> </li> <li class="urllist-item related-entries-item"> <div class="urllist-item-inner related-entries-item-inner"> <div class="urllist-date-link related-entries-date-link"> <a href="https://tech.torana.co.jp/archive/2023/02/17" rel="nofollow"> <time datetime="2023-02-17T03:30:00Z" title="2023年2月17日"> 2023-02-17 </time> </a> </div> <a href="https://tech.torana.co.jp/entry/2023/02/17/123000" class="urllist-title-link related-entries-title-link urllist-title related-entries-title">Fargate移行再挑戦の記録</a> <div class="urllist-entry-body related-entries-entry-body">SREチームのクラシマです。(2022年4月にSREチームが発足、バッ…</div> </div> </li> <li class="urllist-item related-entries-item"> <div class="urllist-item-inner related-entries-item-inner"> <div class="urllist-date-link related-entries-date-link"> <a href="https://tech.torana.co.jp/archive/2021/05/17" rel="nofollow"> <time datetime="2021-05-17T05:58:11Z" title="2021年5月17日"> 2021-05-17 </time> </a> </div> <a href="https://tech.torana.co.jp/entry/2021/05/17/145811" class="urllist-title-link related-entries-title-link urllist-title related-entries-title">Laravel と swoole で安全にコルーチンを使用するには</a> <div class="urllist-entry-body related-entries-entry-body">みなさん、こんにちは!めもりー(@m3m0r7) です。 今回は弊社の…</div> </div> </li> </ul> </div> </div> </div> <div class="entry-footer-html"><script> // 投稿者名とか諸々消す document.querySelector('.entry-footer-section').remove(); </script></div> </div> </footer> </div> </article> <!-- rakuten_ad_target_end --> <!-- google_ad_section_end --> <div class="pager pager-permalink permalink"> <span class="pager-prev"> <a href="https://tech.torana.co.jp/entry/2021/10/04/173803" rel="prev"> <span class="pager-arrow">« </span> PHP カンファレンス 2021 へスポンサード … </a> </span> <span class="pager-next"> <a href="https://tech.torana.co.jp/entry/2021/07/16/110139" rel="next"> Renovate を取り入れて、バージョンアップ… <span class="pager-arrow"> »</span> </a> </span> </div> </div> </div> <aside id="box1"> <div id="box1-inner"> </div> </aside> </div><!-- #wrapper --> <aside id="box2"> <div id="box2-inner"> <div class="hatena-module hatena-module-search-box"> <div class="hatena-module-title"> 検索 </div> <div class="hatena-module-body"> <form class="search-form" role="search" action="https://tech.torana.co.jp/search" method="get"> <input type="text" name="q" class="search-module-input" value="" placeholder="記事を検索" required> <input type="submit" value="検索" class="search-module-button" /> </form> </div> </div> <div class="hatena-module hatena-module-entries-access-ranking" data-count="5" data-source="access" data-enable_customize_format="0" data-display_entry_image_size_width="100" data-display_entry_image_size_height="100" data-display_entry_category="0" data-display_entry_image="0" data-display_entry_image_size_width="100" data-display_entry_image_size_height="100" data-display_entry_body_length="0" data-display_entry_date="0" data-display_entry_title_length="20" data-restrict_entry_title_length="0" data-display_bookmark_count="0" > <div class="hatena-module-title"> 注目記事 </div> <div class="hatena-module-body"> </div> </div> <div class="hatena-module hatena-module-recent-entries "> <div class="hatena-module-title"> <a href="https://tech.torana.co.jp/archive"> 最新記事 </a> </div> <div class="hatena-module-body"> <ul class="recent-entries hatena-urllist "> <li class="urllist-item recent-entries-item"> <div class="urllist-item-inner recent-entries-item-inner"> <a href="https://tech.torana.co.jp/entry/2024/12/09/123000" class="urllist-title-link recent-entries-title-link urllist-title recent-entries-title">GitHub RunnerとBuildJet Runnerを切り替えながら使う</a> </div> </li> <li class="urllist-item recent-entries-item"> <div class="urllist-item-inner recent-entries-item-inner"> <a href="https://tech.torana.co.jp/entry/2024/11/12/123000" class="urllist-title-link recent-entries-title-link urllist-title recent-entries-title">aquaとlefthookでREADME.mdを簡素に保つ</a> </div> </li> <li class="urllist-item recent-entries-item"> <div class="urllist-item-inner recent-entries-item-inner"> <a href="https://tech.torana.co.jp/entry/2024/10/28/123000" class="urllist-title-link recent-entries-title-link urllist-title recent-entries-title">Amplifyのビルド開始・終了をSlack通知する</a> </div> </li> <li class="urllist-item recent-entries-item"> <div class="urllist-item-inner recent-entries-item-inner"> <a href="https://tech.torana.co.jp/entry/2024/08/08/123000" class="urllist-title-link recent-entries-title-link urllist-title recent-entries-title">terraform を GitHubActions で実行する際のお供 tfdir の紹介</a> </div> </li> <li class="urllist-item recent-entries-item"> <div class="urllist-item-inner recent-entries-item-inner"> <a href="https://tech.torana.co.jp/entry/2024/05/20/123000" class="urllist-title-link recent-entries-title-link urllist-title recent-entries-title">Datadog APM with Swoole</a> </div> </li> </ul> </div> </div> <div class="hatena-module hatena-module-archive" data-archive-type="default" data-archive-url="https://tech.torana.co.jp/archive"> <div class="hatena-module-title"> <a href="https://tech.torana.co.jp/archive">月別アーカイブ</a> </div> <div class="hatena-module-body"> <ul class="hatena-urllist"> <li class="archive-module-year archive-module-year-hidden" data-year="2024"> <div class="archive-module-button"> <span class="archive-module-hide-button">▼</span> <span class="archive-module-show-button">▶</span> </div> <a href="https://tech.torana.co.jp/archive/2024" class="archive-module-year-title archive-module-year-2024"> 2024 </a> <ul class="archive-module-months"> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/12" class="archive-module-month-title archive-module-month-2024-12"> 2024 / 12 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/11" class="archive-module-month-title archive-module-month-2024-11"> 2024 / 11 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/10" class="archive-module-month-title archive-module-month-2024-10"> 2024 / 10 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/08" class="archive-module-month-title archive-module-month-2024-8"> 2024 / 8 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/05" class="archive-module-month-title archive-module-month-2024-5"> 2024 / 5 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/03" class="archive-module-month-title archive-module-month-2024-3"> 2024 / 3 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2024/01" class="archive-module-month-title archive-module-month-2024-1"> 2024 / 1 </a> </li> </ul> </li> <li class="archive-module-year archive-module-year-hidden" data-year="2023"> <div class="archive-module-button"> <span class="archive-module-hide-button">▼</span> <span class="archive-module-show-button">▶</span> </div> <a href="https://tech.torana.co.jp/archive/2023" class="archive-module-year-title archive-module-year-2023"> 2023 </a> <ul class="archive-module-months"> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/12" class="archive-module-month-title archive-module-month-2023-12"> 2023 / 12 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/11" class="archive-module-month-title archive-module-month-2023-11"> 2023 / 11 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/10" class="archive-module-month-title archive-module-month-2023-10"> 2023 / 10 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/09" class="archive-module-month-title archive-module-month-2023-9"> 2023 / 9 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/08" class="archive-module-month-title archive-module-month-2023-8"> 2023 / 8 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/07" class="archive-module-month-title archive-module-month-2023-7"> 2023 / 7 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/06" class="archive-module-month-title archive-module-month-2023-6"> 2023 / 6 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/04" class="archive-module-month-title archive-module-month-2023-4"> 2023 / 4 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/02" class="archive-module-month-title archive-module-month-2023-2"> 2023 / 2 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2023/01" class="archive-module-month-title archive-module-month-2023-1"> 2023 / 1 </a> </li> </ul> </li> <li class="archive-module-year archive-module-year-hidden" data-year="2022"> <div class="archive-module-button"> <span class="archive-module-hide-button">▼</span> <span class="archive-module-show-button">▶</span> </div> <a href="https://tech.torana.co.jp/archive/2022" class="archive-module-year-title archive-module-year-2022"> 2022 </a> <ul class="archive-module-months"> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/11" class="archive-module-month-title archive-module-month-2022-11"> 2022 / 11 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/09" class="archive-module-month-title archive-module-month-2022-9"> 2022 / 9 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/08" class="archive-module-month-title archive-module-month-2022-8"> 2022 / 8 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/07" class="archive-module-month-title archive-module-month-2022-7"> 2022 / 7 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/06" class="archive-module-month-title archive-module-month-2022-6"> 2022 / 6 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/04" class="archive-module-month-title archive-module-month-2022-4"> 2022 / 4 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/03" class="archive-module-month-title archive-module-month-2022-3"> 2022 / 3 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2022/02" class="archive-module-month-title archive-module-month-2022-2"> 2022 / 2 </a> </li> </ul> </li> <li class="archive-module-year archive-module-year-hidden" data-year="2021"> <div class="archive-module-button"> <span class="archive-module-hide-button">▼</span> <span class="archive-module-show-button">▶</span> </div> <a href="https://tech.torana.co.jp/archive/2021" class="archive-module-year-title archive-module-year-2021"> 2021 </a> <ul class="archive-module-months"> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/12" class="archive-module-month-title archive-module-month-2021-12"> 2021 / 12 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/11" class="archive-module-month-title archive-module-month-2021-11"> 2021 / 11 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/10" class="archive-module-month-title archive-module-month-2021-10"> 2021 / 10 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/09" class="archive-module-month-title archive-module-month-2021-9"> 2021 / 9 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/07" class="archive-module-month-title archive-module-month-2021-7"> 2021 / 7 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/05" class="archive-module-month-title archive-module-month-2021-5"> 2021 / 5 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/04" class="archive-module-month-title archive-module-month-2021-4"> 2021 / 4 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/03" class="archive-module-month-title archive-module-month-2021-3"> 2021 / 3 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2021/01" class="archive-module-month-title archive-module-month-2021-1"> 2021 / 1 </a> </li> </ul> </li> <li class="archive-module-year archive-module-year-hidden" data-year="2020"> <div class="archive-module-button"> <span class="archive-module-hide-button">▼</span> <span class="archive-module-show-button">▶</span> </div> <a href="https://tech.torana.co.jp/archive/2020" class="archive-module-year-title archive-module-year-2020"> 2020 </a> <ul class="archive-module-months"> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/12" class="archive-module-month-title archive-module-month-2020-12"> 2020 / 12 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/09" class="archive-module-month-title archive-module-month-2020-9"> 2020 / 9 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/08" class="archive-module-month-title archive-module-month-2020-8"> 2020 / 8 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/07" class="archive-module-month-title archive-module-month-2020-7"> 2020 / 7 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/06" class="archive-module-month-title archive-module-month-2020-6"> 2020 / 6 </a> </li> <li class="archive-module-month"> <a href="https://tech.torana.co.jp/archive/2020/05" class="archive-module-month-title archive-module-month-2020-5"> 2020 / 5 </a> </li> </ul> </li> </ul> </div> </div> </div> </aside> </div> </div> </div> </div> <script async src="https://s.hatena.ne.jp/js/widget/star.js"></script> <script> if (typeof window.Hatena === 'undefined') { window.Hatena = {}; } if (!Hatena.hasOwnProperty('Star')) { Hatena.Star = { VERSION: 2, }; } </script> <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/ja_JP/sdk.js#xfbml=1&appId=719729204785177&version=v17.0"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script> <div class="quote-box"> <div class="tooltip-quote tooltip-quote-stock"> <i class="blogicon-quote" title="引用をストック"></i> </div> <div class="tooltip-quote tooltip-quote-tweet js-tooltip-quote-tweet"> <a class="js-tweet-quote" target="_blank" data-track-name="quote-tweet" data-track-once> <img src="https://cdn.blog.st-hatena.com/images/admin/quote/quote-x-icon.svg?version=c85372bc899dec1e795892b094b326" title="引用して投稿する" > </a> </div> </div> <div class="quote-stock-panel" id="quote-stock-message-box" style="position: absolute; z-index: 3000"> <div class="message-box" id="quote-stock-succeeded-message" style="display: none"> <p>引用をストックしました</p> <button class="btn btn-primary" id="quote-stock-show-editor-button" data-track-name="curation-quote-edit-button">ストック一覧を見る</button> <button class="btn quote-stock-close-message-button">閉じる</button> </div> <div class="message-box" id="quote-login-required-message" style="display: none"> <p>引用するにはまずログインしてください</p> <button class="btn btn-primary" id="quote-login-button">ログイン</button> <button class="btn quote-stock-close-message-button">閉じる</button> </div> <div class="error-box" id="quote-stock-failed-message" style="display: none"> <p>引用をストックできませんでした。再度お試しください</p> <button class="btn quote-stock-close-message-button">閉じる</button> </div> <div class="error-box" id="unstockable-quote-message-box" style="display: none; position: absolute; z-index: 3000;"> <p>限定公開記事のため引用できません。</p> </div> </div> <script type="x-underscore-template" id="js-requote-button-template"> <div class="requote-button js-requote-button"> <button class="requote-button-btn tipsy-top" title="引用する"><i class="blogicon-quote"></i></button> </div> </script> <div id="hidden-subscribe-button" style="display: none;"> <div class="hatena-follow-button-box btn-subscribe js-hatena-follow-button-box" > <a href="#" class="hatena-follow-button js-hatena-follow-button"> <span class="subscribing"> <span class="foreground">読者です</span> <span class="background">読者をやめる</span> </span> <span class="unsubscribing" data-track-name="profile-widget-subscribe-button" data-track-once> <span class="foreground">読者になる</span> <span class="background">読者になる</span> </span> </a> <div class="subscription-count-box js-subscription-count-box"> <i></i> <u></u> <span class="subscription-count js-subscription-count"> </span> </div> </div> </div> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> <script src="https://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script> <script type="text/javascript" src="https://cdn.blog.st-hatena.com/js/external/jquery.min.js?v=1.12.4&version=c85372bc899dec1e795892b094b326"></script> <script src="https://cdn.blog.st-hatena.com/js/texts-ja.js?version=c85372bc899dec1e795892b094b326"></script> <script id="vendors-js" data-env="production" src="https://cdn.blog.st-hatena.com/js/vendors.js?version=c85372bc899dec1e795892b094b326" crossorigin="anonymous"></script> <script id="hatenablog-js" data-env="production" src="https://cdn.blog.st-hatena.com/js/hatenablog.js?version=c85372bc899dec1e795892b094b326" crossorigin="anonymous" data-page-id="entry"></script> <script>Hatena.Diary.GlobalHeader.init()</script> </body> </html>