CINXE.COM
SPAの人気記事 225件 - はてなブックマーク
<!DOCTYPE html> <html lang="ja" data-page-scope="EntrySearch" data-stable-request-url="https://b.hatena.ne.jp/q/SPA" data-device-type="PC" data-sentry-environment="production" data-sentry-sample-rate="0.1" data-entry-search-query="SPA" data-page-subtype="entrysearch" data-page-type="entrysearch" > <head> <!-- 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-5TDHQX'); </script> <!-- End Google Tag Manager --> <meta charset="UTF-8"> <title>SPAの人気記事 225件 - はてなブックマーク</title> <script src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/js/v4/bookmark.js" async></script> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/css/v4/pikaday.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/css/v4/triangle.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/css/v4/bookmark.css" /> <link type="text/css" rel="stylesheet" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/css/v4/bookmark.star.css" /> <link rel="canonical" href="https://b.hatena.ne.jp/q/SPA" /> <link rel="next" href="/q/SPA?date_range=5y&target=tag&sort=popular&users=3&page=2&safe=on"> <link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" /> <meta name="viewport" content="width=device-width"> <link rel="search" type="application/opensearchdescription+xml" title="はてなブックマーク検索" href="/opensearch.xml" /> <link rel="apple-touch-icon-precomposed" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/apple-touch-icon-precomposed.png" /> <link rel="mask-icon" href="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/safari-pinned-tab-icon.svg" color="#00A4DE" /> <meta name="msapplication-navbutton-color" content="#2C6EBD" /> <meta name="msapplication-task" content="name=はてなブックマーク; action-uri=/; icon-uri=https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/icons/bookmark.ico" /> <meta name="msapplication-task" content="name=マイブックマーク; action-uri=/my; icon-uri=https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/icons/my-bookmark.ico" /> <meta name="msapplication-task" content="name=お気に入りのブックマーク; action-uri=/my/favorite; icon-uri=https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/icons/favorite-bookmark.ico" /> <meta name="msapplication-task" content="name=人気エントリー; action-uri=/hotentry; icon-uri=https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/icons/hotentry.ico" /> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="referrer" content="origin"> <link rel="alternate" type="application/rss+xml" href="/q/SPA?sort=popular&safe=on&users=3&date_range=5y&mode=rss&target=tag" /> <script> function isMobile() { const html = document.documentElement; const deviceType = html.dataset.deviceType || ''; if (deviceType.length > 0) { return deviceType === 'MOBILE'; } else { const maxMobileWidth = 480; const windowWidth = window.innerWidth; return maxMobileWidth >= windowWidth; } } </script> </head> <body class="page-centerarticle page-entrysearch fixed-header"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-5TDHQX" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="link-app-banner js-dynamic-link-app-banner is-hidden"> <button class="link-app-banner-btn-close js-dynamic-link-app-banner-close-button"><span>close</span></button> <a class="link-app-banner-btn" href="https://hatenabookmark.page.link/app"> <div class="link-app-banner-btn-detail"> <div class="link-app-banner-icon"><img src="/images/v4/public/app/ic-ios.svg" alt="はてなブックマークアプリ"></div> <p class="link-app-banner-text">サクサク読めて、<br class="link-app-banner-text-newline">アプリ限定の機能も多数!</p> </div> <div class="link-app-banner-btn-open">アプリで開く</div> </a> </div> <header id="global-header" data-portal-static-origin="//cdn.www.st-hatena.com"> <div id="header" class="global-header-inner js-global-header-inner"> <h2 id="gh-logo"><a href="/" data-gtm-label="gh-blogo"><span>はてなブックマーク</span></a></h2> <div class="is-guest js-guest is-hidden"> <input id="gh-search-icon-check" type="checkbox" checked="checked" /> <label class="gh-search-icon" for="gh-search-icon-check" aria-label="検索を閉じる"><span>閉じる</span></label> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a href="/guide" data-gtm-label="gh-guest-guide">はてなブックマークって?</a></li> <li><a href="/guide/tools" data-gtm-label="gh-guest-tools">アプリ・拡張の紹介</a></li> <li><a href="https://www.hatena.ne.jp/register?location=https%3A%2F%2Fb.hatena.ne.jp%2F%3Fregistered_from%3Dglobal-header&via=201037" class="gh-guest-register" data-gtm-label="gh-guest-register">ユーザー登録</a></li> <li><a href="https://www.hatena.ne.jp/login?location=https%3A%2F%2Fb.hatena.ne.jp%2Fq%2FSPA" rel="nofollow" class="gh-guest-login" data-gtm-label="gh-guest-login">ログイン</a></li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </div> <noscript> <ul class="gh-service-menu"> <li><a href="https://www.hatena.ne.jp/logout?location=https%3A%2F%2Fb.hatena.ne.jp%2F">ログアウト</a></li> </ul> </noscript> <script type="text/x-template" id="template-menu-hatena-user"> <form class="gh-searchbox" method="get" action="/search_dwim" role="search"> <input value="" name="q" type="search" class="gh-inputtext" placeholder="キーワード・URLを検索" size="40" /> <input value="" type="submit" class="gh-search-button" /> </form> <ul class="gh-service-menu"> <li><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}"><img src="{{user_image_url}}" class="header-profile-icon" width="16" height="16" alt="{{username}}" /></a><a class="hotentry" data-gtm-label="gh-mypage" href="{{hotentry_url}}">マイページ</a></li> <li><a class="bookmark" data-gtm-label="gh-bookmark" href="{{bookmark_url}}">ブックマーク</a></li> <li><a class="unread_bookmark" data-gtm-label="gh-ril" href="{{bookmark_stock_url}}">あとで読む</a></li> <li><a class="add" data-gtm-label="gh-add" href="{{add_bookmark_url}}">追加</a></li> <li><a class="tools" data-gtm-label="gh-tools" href="/guide/tools">ツール</a></li> <li><a class="config" data-gtm-label="gh-config" href="/-/my/config/profile">設定</a></li> <li><a class="feedback" data-gtm-label="gh-feedback" href="/-/feedback/hatena_bookmark" target="_blank">フィードバック</a></li> <li id="header-username" class="gh-dropdown-services" data-gtm-label="gh-services" title="利用中のサービス" data-name="{{username}}"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/common/usermenu-wh.svg" alt="利用中のサービス" width="24" height="24" /> </span> <dl class="header-window" id="username-window"></dl> </li> <li id="header-notify" data-gtm-label="gh-notify" class="gh-dropdown-notify" title="あなたへのお知らせ"> <span class="header-dropdown gh-dropdown" tabindex="0"> <img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/common/notify-wh.svg" alt="あなたへのお知らせ" width="25" height="25" /> <span class="notify-count"></span> </span> <div id="notify-window" class="header-window header-notify"></div> </li> <li class="gh-hatena-logo"><a href="http://www.hatena.ne.jp/"><img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/logo/logo-global-white.svg" alt="Hatena" width="74px" height="13px"/></a></li> </ul> </script> </div> </header> <div id="info-header"><div id="info-header-message"></div><span></span></div> <div class="global-notification is-hidden js-global-notification"></div> <div id="container"> <div class="entrysearch-searchbox"> <form class="entrysearch-searchbox-body js-entrysearch-form" method="get"> <input value="SPA" type="text" class="entrysearch-searchbox-textInput js-entrysearch-form-text-input" size="40" aria-label="検索キーワードを入力"> <input value="tag" name="target" type="hidden"> <input value="popular" name="sort" type="hidden"> <input value="3" name="users" type="hidden"> <input value="on" name="safe" type="hidden"> <input value="検索" type="submit" class="entrysearch-searchbox-btn js-entrysearch-form-button" aria-label="検索"> </form> </div> <div class="centerarticle-wrapper"> <div class="left-container"> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">検索対象</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/SPA?sort=popular&safe=on&users=3&date_range=5y&target=all" >すべて</a></li> <li><a href="/q/SPA?target=tag&date_range=5y&users=3&safe=on&sort=popular" class="is-current">タグ</a></li> <li><a href="/q/SPA?sort=popular&safe=on&users=3&date_range=5y&target=title" >タイトル</a></li> <li><a href="/q/SPA?date_range=5y&target=text&sort=popular&users=3&safe=on" >本文</a></li> </ul> </div> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">並び順</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/SPA?target=tag&date_range=5y&safe=on&users=3&sort=recent" >新着</a></li> <li><a href="/q/SPA?date_range=5y&target=tag&sort=popular&users=3&safe=on" class="is-current">人気</a></li> </ul> </div> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">ブックマーク数</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/SPA?target=tag&date_range=5y&safe=on&users=1&sort=popular" >1 user</a></li> <li><a href="/q/SPA?safe=on&users=3&sort=popular&target=tag&date_range=5y" class="is-current">3 users</a></li> <li><a href="/q/SPA?date_range=5y&target=tag&sort=popular&users=50&safe=on" >50 users</a></li> <li><a href="/q/SPA?target=tag&date_range=5y&users=100&safe=on&sort=popular" >100 users</a></li> <li><a href="/q/SPA?sort=popular&users=500&safe=on&date_range=5y&target=tag" >500 users</a></li> </ul> </div> <div class="centerarticle-sidebar-menu js-safe-search-div is-hidden" title="セーフサーチはログイン時にのみoffにできます"> <h3 class="centerarticle-aside-title">セーフサーチ</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/SPA?safe=on&users=3&sort=popular&target=tag&date_range=5y" class="is-current">オン</a></li> <li><a href="/q/SPA?date_range=5y&target=tag&sort=popular&users=3&safe=off" >オフ</a></li> </ul> </div> <div class="centerarticle-sidebar-menu js-entrysearch-date"> <h3 class="centerarticle-aside-title">期間指定</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/SPA?date_range=all&target=tag&sort=popular&users=3&safe=on" >すべて</a></li> <li><a href="/q/SPA?users=3&safe=on&sort=popular&target=tag&date_range=w" >1週間</a></li> <li><a href="/q/SPA?target=tag&date_range=m&safe=on&users=3&sort=popular" >1ヶ月</a></li> <li><a href="/q/SPA?safe=on&users=3&sort=popular&target=tag&date_range=y" >1年</a></li> </ul> <form method="get" class="js-entrysearch-datepicker-form"> <input value="SPA" class="js-entrysearch-form-text-input" type="hidden"> <input value="tag" name="target" type="hidden"> <input value="popular" name="sort" type="hidden"> <input value="3" name="users" type="hidden"> <input value="on" name="safe" type="hidden"> <ul class="centerarticle-sub-navi"> <li><input class="js-entrysearch-datepicker-start entrysearch-searchbox-dateInput" value="" type="text" name="date_begin"> から</li> <li><input class="js-entrysearch-datepicker-end entrysearch-searchbox-dateInput" value="" type="text" name="date_end"> まで</li> <li><input value="検索" type="submit" class="entrysearch-searchbox-btn js-entrysearch-form-button"><li> </ul> </form> </div> </div> <div class="entrysearch-bar"> <p class="entrysearch-bar-results">1 - 40 件 / 225件</p> <div class="entrysearch-bar-inner"> <button class="entrysearch-filter-btn js-entrysearch-filter-btn">絞り込み</button> <a class="entrysearch-sort-btn" href="/q/SPA?date_range=5y&target=tag&sort=popular&users=3&safe=on">新着順</a> <a class="entrysearch-sort-btn is-current" href="/q/SPA?target=tag&date_range=5y&safe=on&users=3&sort=recent">人気順</a> </div> </div> <div class="entrysearch-filter js-entrysearch-filter is-hidden"> <div class="entrysearch-filter-header"> <h2 class="entrysearch-filter-title">絞り込み</h2> <button class="entrysearch-filter-close js-entrysearch-filter-close"></button> </div> <ul class="entrysearch-filter-list"> <li class="entrysearch-filter-item js-entrysearch-target-dropdown"> <h3 class="entrysearch-filter-item-head">検索対象</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-target"> <option value="all" >すべて</option> <option value="tag" selected>タグ</option> <option value="title" >タイトル</option> <option value="text" >本文</option> </select> </div> </li> <li class="entrysearch-filter-item"> <h3 class="entrysearch-filter-item-head">ブックマーク数</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-users"> <option value="1" >1 user</option> <option value="3" selected>3 users</option> <option value="50" >50 users</option> <option value="100" >100 users</option> <option value="500" >500 users</option> </select> </div> </li> <li class="entrysearch-filter-item"> <h3 class="entrysearch-filter-item-head">期間</h3> <div class="entrysearch-filter-item-value-wrapper"> <select class="entrysearch-filter-item-value js-entrysearch-filter-daterange"> <option value="all">すべて</option> <option value="w" >1週間</option> <option value="m" >1ヶ月</option> <option value="y" >1年</option> </select> </div> </li> <li class="entrysearch-filter-item js-safe-search-div is-hidden"> <h3 class="entrysearch-filter-item-head">セーフサーチ</h3> <div class="entrysearch-filter-checkbox"> <input type="checkbox" name="safesearch" id="safesearch" class="js-entryseach-safesearch" checked> <label class="entrysearch-filter-checkbox-label" for="safesearch"></label> </div> </li> </ul> <div class="entrysearch-filter-footer"> <button class="entrysearch-filter-search-btn styleguide-btn-primary js-entrysearch-filter-search-btn">検索する</button> <button class="entrysearch-filter-clear-btn styleguide-btn-text js-entrysearch-filter-clear-btn">条件をクリアする</button> </div> </div> <div class="search-container"> <h2 class="entrysearch-title"> <span class="entrysearch-word">SPAの検索結果</span><span class="entrysearch-result">1 - 40 件 / 225件</span> </h2> <div class="entrysearch-summary-text"> <span>SPA</span>に関するエントリは<span>225</span>件あります。 <span>web</span>、 <span>javascript</span>、 <span>開発</span> などが関連タグです。 人気エントリには <span>『「何で今まで知らなかったんだ」日帰り温泉・銭湯マップ「ゆる〜と」があまりにも便利すぎて温泉通いが捗りそう!』</span>などがあります。 </div> <div class="entrysearch-related-entries" data-gtm-inview-label="entry-search-recommend-header"> <h3 class="entrysearch-related-title">SPAの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://anond.hatelabo.jp/20250405220559" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif" alt="東京人に効く言葉「えっ、車持ってないの?」だと判明"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://anond.hatelabo.jp/20250405220559" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 東京人に効く言葉「えっ、車持ってないの?」だと判明 </a> </h4> <a href="/entry/s/anond.hatelabo.jp/20250405220559" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 466 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://togetter.com/li/2534838" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/682751bf557c5540c0867af590bd87c1036162de/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F0816a8635779f99e66203b4ea9ddb069-1200x630.jpeg" alt="NHKアニメ『アン・シャーリー』のアンが着ないはずのピンクの服を着ているなど「原作要素を無視してる」との声 翻訳家の松本侑子氏も矛盾を指摘"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://togetter.com/li/2534838" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> NHKアニメ『アン・シャーリー』のアンが着ないはずのピンクの服を着ているなど「原作要素を無視してる」との声 翻訳家の松本侑子氏も矛盾を指摘 </a> </h4> <a href="/entry/s/togetter.com/li/2534838" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 259 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://togetter.com/li/2534836" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2691bab5dd48a8e5ba271ac89dc9666428b8104c/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2Ffcf880eb0046c483112991295b8b59f4-1200x630.jpeg" alt="場所移動された自転車に駐車違反で罰金のQRを貼られている...と思ったら詐欺まがいの手口だった"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://togetter.com/li/2534836" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 場所移動された自転車に駐車違反で罰金のQRを貼られている...と思ったら詐欺まがいの手口だった </a> </h4> <a href="/entry/s/togetter.com/li/2534836" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 125 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://newsdig.tbs.co.jp/articles/-/1405475" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/ca6dd86135b256848f8359a278c8debc1094ef19/height=288;version=1;width=512/https%3A%2F%2Fnewsdig.ismcdn.jp%2Fmwimgs%2F5%2Fd%2F1200w%2Fimg_5d659b58f9b13b24c83e46f68701b80a172598.jpg" alt="“放置自転車”に一般市民が鍵を… ロック解除には自転車約5000円 バイクは3万円 取り締まりの新ビジネス | TBS NEWS DIG"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://newsdig.tbs.co.jp/articles/-/1405475" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> “放置自転車”に一般市民が鍵を… ロック解除には自転車約5000円 バイクは3万円 取り締まりの新ビジネス | TBS NEWS DIG </a> </h4> <a href="/entry/s/newsdig.tbs.co.jp/articles/-/1405475" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 76 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://courrier.jp/news/archives/395979/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/74558856230da145e2c42a21b6c0a19864d5a260/height=288;version=1;width=512/https%3A%2F%2Fcourrier.jp%2Fmedia%2F2025%2F04%2F27061024%2FGettyImages-1492782611-e1742991093105-1600x900.jpg" alt="英紙記者が考える「日本人の職人が世界のコンクールでなんでも優勝する理由」 | ピッツァからチーズ、洋菓子、紳士服まで"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://courrier.jp/news/archives/395979/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 英紙記者が考える「日本人の職人が世界のコンクールでなんでも優勝する理由」 | ピッツァからチーズ、洋菓子、紳士服まで </a> </h4> <a href="/entry/s/courrier.jp/news/archives/395979/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 150 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.sankei.com/article/20250405-HQVL536C4ZKDHMDGGDNSCA6UDM/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/24f36719213a5f2a56465f808e0cb037f9463f96/height=288;version=1;width=512/https%3A%2F%2Fwww.sankei.com%2Fresizer%2FHre8w9ZnOClUQirc51cFkGhd8eU%3D%2F1200x630%2Ffilters%3Afocal%282088x1135%3A2098x1145%29%3Aquality%2850%29%2Fcloudfront-ap-northeast-1.images.arcpublishing.com%2Fsankei%2F2BM7QI22PNOC3NE3XTTLONJAEI.jpg" alt="「どんだけ並ばせるねん!」 並ばない万博のはずが…入場まで1時間半 テストラン2日目"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.sankei.com/article/20250405-HQVL536C4ZKDHMDGGDNSCA6UDM/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 「どんだけ並ばせるねん!」 並ばない万博のはずが…入場まで1時間半 テストラン2日目 </a> </h4> <a href="/entry/s/www.sankei.com/article/20250405-HQVL536C4ZKDHMDGGDNSCA6UDM/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 88 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://togetter.com/li/2534675" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/75c48772f83e093a1f092f55f96ab31841e84726/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2Fd3cfee584fdc472e5a0864f68fea6319-1200x630.jpeg" alt="タイ人と日本人の死生観の違いが文化や社会にどう影響しているかについての話… 死を日常に織り込むタイと死をタブー化する日本、死をどう捉えるかで変わる生き方や社会"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://togetter.com/li/2534675" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> タイ人と日本人の死生観の違いが文化や社会にどう影響しているかについての話… 死を日常に織り込むタイと死をタブー化する日本、死をどう捉えるかで変わる生き方や社会 </a> </h4> <a href="/entry/s/togetter.com/li/2534675" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 195 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://news.yahoo.co.jp/articles/093150cf3d1b1a4119230404ca31a37280ba34dc" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/52f8f77be0b71733dfa6151b6527a13a0825760a/height=288;version=1;width=512/https%3A%2F%2Fs.yimg.jp%2Fimages%2Fnews-web%2Fall%2Fimages%2Fogp_default.png" alt="日本人の生活が苦しいのは社会保険料のせい…企業の賃上げを無効化する「ステルス増税」の中身(プレジデントオンライン) - Yahoo!ニュース"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://news.yahoo.co.jp/articles/093150cf3d1b1a4119230404ca31a37280ba34dc" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 日本人の生活が苦しいのは社会保険料のせい…企業の賃上げを無効化する「ステルス増税」の中身(プレジデントオンライン) - Yahoo!ニュース </a> </h4> <a href="/entry/s/news.yahoo.co.jp/articles/093150cf3d1b1a4119230404ca31a37280ba34dc" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 84 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://shueisha.online/articles/-/253588" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/3f077ed44f78671f670f88bfe046983e227a97eb/height=288;version=1;width=512/https%3A%2F%2Fshuon.ismcdn.jp%2Fmwimgs%2F3%2Ff%2F1200xm%2Fimg_3fa5769ec793dfc3b373ed9ae6838462728753.jpg" alt="「乗るならちゃんと買えや」JR中央線グリーン車に“タダ乗り客”続出でネット大荒れ…JR東日本の対応を聞いてみた | 集英社オンライン | ニュースを本気で噛み砕け"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://shueisha.online/articles/-/253588" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 「乗るならちゃんと買えや」JR中央線グリーン車に“タダ乗り客”続出でネット大荒れ…JR東日本の対応を聞いてみた | 集英社オンライン | ニュースを本気で噛み砕け </a> </h4> <a href="/entry/s/shueisha.online/articles/-/253588" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 49 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.megamouth.info/entry/2025/04/05/200532" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/1f0e79159188461b7936a3113ea03a88c4e51229/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F68f6c24cf5da0c2ad985aa9986345406442665bb%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fm.media-amazon.com%252Fimages%252FI%252F413xzQjKHmL._SL500_.jpg" alt="例えば、老母との喧嘩を警察に通報すること - megamouthの葬列"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.megamouth.info/entry/2025/04/05/200532" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-d-title"> 例えば、老母との喧嘩を警察に通報すること - megamouthの葬列 </a> </h4> <a href="/entry/s/www.megamouth.info/entry/2025/04/05/200532" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-d-users"> 30 users </a> </div> </li> </ul> </div> <ul class="entrysearch-articles"> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://togetter.com/li/1762133"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://togetter.com/li/1762133" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Ftogetter.com%2Fli%2F1762133" alt="">「何で今まで知らなかったんだ」日帰り温泉・銭湯マップ「ゆる〜と」があまりにも便利すぎて温泉通いが捗りそう! </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/togetter.com/li/1762133" class="js-keyboard-entry-page-openable" title="「何で今まで知らなかったんだ」日帰り温泉・銭湯マップ「ゆる〜と」があまりにも便利すぎて温泉通いが捗りそう! (1705 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1705 users </a> </span> </li> <li> <a href="/site/togetter.com/" title="『togetter.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> togetter.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2021/08/19</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">リンク yuru-to.net ゆる~と - 全国日帰り温泉・銭湯マップ ゆる~とは、全国の日帰り温泉・銭湯マップです。日帰り入浴可能な施設(日帰り温泉や銭湯、温泉宿、足湯など)が、15,000件以上登録されています。一番近い銭湯を探したり、温泉地マップを表示したり、料金などの条件で検索することができます。Googleに登録された100万件以上のクチコミと100万枚以上の写真にアクセスできます。 42 users 540</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/togetter" data-gtm-click-label="entry-search-result-item-tag">togetter</a></li> <li><a href="/q/web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">webサービス</a></li> <li><a href="/q/%E4%BE%BF%E5%88%A9" data-gtm-click-label="entry-search-result-item-tag">便利</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/%E9%8A%AD%E6%B9%AF" data-gtm-click-label="entry-search-result-item-tag">銭湯</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89" data-gtm-click-label="entry-search-result-item-tag">観光</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://togetter.com/li/1762133"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://togetter.com/li/1762133" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2f78b15a7f389d52f27215934d21426205417f9f/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F71efae2f5ea3207b724f8dfabdbd2f26-1200x630.jpeg" alt="「何で今まで知らなかったんだ」日帰り温泉・銭湯マップ「ゆる〜と」があまりにも便利すぎて温泉通いが捗りそう!" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://onsenzanmaiblog.com/boroi/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://onsenzanmaiblog.com/boroi/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fonsenzanmaiblog.com%2Fboroi%2F" alt="">【激安】ボロいい温泉宿→「食事はうまい&温泉は極上…オススメあり」 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/onsenzanmaiblog.com/boroi/" class="js-keyboard-entry-page-openable" title="【激安】ボロいい温泉宿→「食事はうまい&温泉は極上…オススメあり」 (1367 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1367 users </a> </span> </li> <li> <a href="/site/onsenzanmaiblog.com/" title="『onsenzanmaiblog.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> onsenzanmaiblog.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2023/09/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは、温泉オタクでKindle本「奇跡のかけ流し温泉」の著者KOUです。(プロフィール、X) 「温泉の質」にこだわりつつ旅をしていると、ものすごい魅力的な「ボロいい宿」に出会うのです。 「温泉の質」とは、掛け流しで鮮度が高く、消毒も循環もしていない温泉のこと。詳しくはKindle本「奇跡のかけ流し温泉」に。 そして「ボロいい宿=お食事はうまい!」というのが、法則。 もちろん「ボロい…」という言葉を使っているけど、「良い意味で!」です。 というわけで、魅力的な「ボロいい温泉宿」を集めてみました! *実はこの記事は、2023年に1日で40万人の方に読んでいただいたという伝説の記事でもあります。 » YouTube版も撮影しています</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%97%85%E9%A4%A8" data-gtm-click-label="entry-search-result-item-tag">旅館</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89" data-gtm-click-label="entry-search-result-item-tag">観光</a></li> <li><a href="/q/%E5%AE%BF" data-gtm-click-label="entry-search-result-item-tag">宿</a></li> <li><a href="/q/%E3%83%96%E3%83%AD%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">ブログ</a></li> <li><a href="/q/%E3%83%9B%E3%83%86%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ホテル</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://onsenzanmaiblog.com/boroi/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://onsenzanmaiblog.com/boroi/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/aca351bf504f8e447c2df985bdcdbf8b9622fad0/height=288;version=1;width=512/https%3A%2F%2Fonsenzanmaiblog.com%2Fwp-content%2Fuploads%2F2023%2F09%2FIMG_0233.jpeg" alt="【激安】ボロいい温泉宿→「食事はうまい&温泉は極上…オススメあり」" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.yamaonsen.com/entry/onsen_best_2021"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.yamaonsen.com/entry/onsen_best_2021" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.yamaonsen.com%2Fentry%2Fonsen_best_2021" alt="">【2食付き2万円以下】2021年に1人で泊まったコスパ最強の温泉宿ベスト10を今更ながら発表する - 温泉ブログ 山と温泉のきろく </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.yamaonsen.com/entry/onsen_best_2021" class="js-keyboard-entry-page-openable" title="【2食付き2万円以下】2021年に1人で泊まったコスパ最強の温泉宿ベスト10を今更ながら発表する - 温泉ブログ 山と温泉のきろく (1176 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1176 users </a> </span> </li> <li> <a href="/site/www.yamaonsen.com/" title="『www.yamaonsen.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.yamaonsen.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2022/11/02</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">1泊2食付き2万円以下の宿で、コスパ重視の総合ベスト10を選出した 2022年も終わりに近づくタイミングでの公開となり恐縮ですが、本稿は「2021年に泊まった温泉宿」の振り返り記事です。 2021年に泊まった宿の中から「2食付き2万円以下で1人で泊まれる」比較的リーズナブルな宿限定でご紹介しています。 先に公開済みの「2021年に泊まった温泉宿で「部屋」「風呂」「食事」が良かったおすすめ宿ランキングを発表する」では、2021年に泊まった宿の中で「部屋・建物」「風呂」「食事」の3項目について「突出して良かった宿」のベスト3をそれぞれ選定しました。 「食事」や「部屋」部門では特に、宿泊料金の高い宿が上位に入りやすい傾向がありますが、私自身、たまにいいお値段の宿に泊まることもあるとは言え、普段は1泊2食付きで1万円台で収まる宿を中心に宿泊しています。なので「すごく印象が良かったけど項目ごとのラン</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> <li><a href="/q/%E5%AE%BF" data-gtm-click-label="entry-search-result-item-tag">宿</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89" data-gtm-click-label="entry-search-result-item-tag">観光</a></li> <li><a href="/q/%E9%A3%9F" data-gtm-click-label="entry-search-result-item-tag">食</a></li> <li><a href="/q/%E3%83%9B%E3%83%86%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ホテル</a></li> <li><a href="/q/%E6%97%85%E9%A4%A8" data-gtm-click-label="entry-search-result-item-tag">旅館</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.yamaonsen.com/entry/onsen_best_2021"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.yamaonsen.com/entry/onsen_best_2021" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/c00317c6136fe59b478232de6a02a4664f537e7e/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fh%2Fhappydust%2F20211211%2F20211211150403.jpg" alt="【2食付き2万円以下】2021年に1人で泊まったコスパ最強の温泉宿ベスト10を今更ながら発表する - 温泉ブログ 山と温泉のきろく" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://techblog.recruit.co.jp/article-223/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://techblog.recruit.co.jp/article-223/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Ftechblog.recruit.co.jp%2Farticle-223%2F" alt="">リクルートテクノロジーズ エンジニアコース新人研修の内容を公開します!(2020年度版) | Recruit Tech Blog </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/techblog.recruit.co.jp/article-223/" class="js-keyboard-entry-page-openable" title="リクルートテクノロジーズ エンジニアコース新人研修の内容を公開します!(2020年度版) | Recruit Tech Blog (1113 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1113 users </a> </span> </li> <li> <a href="/site/techblog.recruit.co.jp/" title="『techblog.recruit.co.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> techblog.recruit.co.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/08/21</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは! リクルートテクノロジーズでセキュリティエンジニアとして活動している、藤原 巧です。 毎年恒例となっており、大きな反響をいただいている、エンジニアコースの新人研修の内容を紹介させていただきます。 研修の概要 リクルートテクノロジーズでは、新卒採用の新人向けに3ヶ月間の技術研修を行っています。この技術研修では大きく分けて2つのコースが設けられています。 1. プログラミングやWebサービスの構造の基礎を体系的に学び、その後一人につき、ひとつのスマホサイトを企画からリリースまで行うコース 2. 一定以上のプログラミングスキルと開発系経験がある新人に向けた、実際の開発で必要となる様々な技術要素をより深く学び、その後実際のサービスでチーム開発にてOJTを行うコース 今回公開するのは 2. で使用した資料です。 この技術研修は、そのほとんどの部分を内製で実施しています。 この研修の最大の</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E7%A0%94%E4%BF%AE" data-gtm-click-label="entry-search-result-item-tag">研修</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/engineer" data-gtm-click-label="entry-search-result-item-tag">engineer</a></li> <li><a href="/q/%E6%95%99%E8%82%B2" data-gtm-click-label="entry-search-result-item-tag">教育</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/%E5%AD%A6%E7%BF%92" data-gtm-click-label="entry-search-result-item-tag">学習</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://techblog.recruit.co.jp/article-223/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://techblog.recruit.co.jp/article-223/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6a1a70f9668c782c417841bc767051bab8703c33/height=288;version=1;width=512/https%3A%2F%2Ftechblog.recruit.co.jp%2Fassets%2Frtc%2Fthumbnail%2F8663.jpg" alt="リクルートテクノロジーズ エンジニアコース新人研修の内容を公開します!(2020年度版) | Recruit Tech Blog" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <div class="related-entry-wrapper"> <div class="entrysearch-related-entries" data-gtm-inview-label="entry-search-recommend-middle"> <h3 class="entrysearch-related-title">SPAの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://voluntas.ghost.io/why-mcp/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6d76e896b0ab6ca870e2c682860be6fffbc4e015/height=288;version=1;width=512/https%3A%2F%2Fstatic.ghost.org%2Fv5.0.0%2Fimages%2Fpublication-cover.jpg" alt="なぜ MCP なのか"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://voluntas.ghost.io/why-mcp/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> なぜ MCP なのか </a> </h4> <a href="/entry/s/voluntas.ghost.io/why-mcp/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 398 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://dev.classmethod.jp/articles/shuntaka-mcp-study/" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4a6ca28ed1b6ef46d0684df4d5d412022dec1438/height=288;version=1;width=512/https%3A%2F%2Fdevio2024-media.developers.io%2Fimage%2Fupload%2Fv1743821925%2Fuser-gen-eyecatch%2Fvzl0jn509mxykzxq6i8e.png" alt="Model Context Protocol(MCP)の基礎に関して、社内勉強会で使用したスライド資料を公開します! | DevelopersIO"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://dev.classmethod.jp/articles/shuntaka-mcp-study/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> Model Context Protocol(MCP)の基礎に関して、社内勉強会で使用したスライド資料を公開します! | DevelopersIO </a> </h4> <a href="/entry/s/dev.classmethod.jp/articles/shuntaka-mcp-study/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 365 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/ks0318/articles/4b201527b383fa" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/7051e767e37c09bcb15c0f1088b9d1c25f7953a7/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--RZl5iTEW--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AAI%2525E3%252582%252592%2525E7%252594%2525A8%2525E3%252581%252584%2525E3%252581%25259F%2525E9%252596%25258B%2525E7%252599%2525BA%2525E3%252581%2525AE%2525E5%25258A%2525B9%2525E7%25258E%252587%2525E3%252582%252592%2525E6%25259C%252580%2525E5%2525A4%2525A7%2525E5%25258C%252596%2525E3%252581%252595%2525E3%252581%25259B%2525E3%252582%25258B%2525E3%252581%25259F%2525E3%252582%252581%2525E3%252581%2525AB%2525E3%252582%252584%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E3%252581%252584%2525E3%252582%25258B%2525E3%252581%252593%2525E3%252581%2525A8%2525E3%252582%252592%2525E5%252585%2525A8%2525E9%252583%2525A8%2525E6%25259B%2525B8%2525E3%252581%25258F%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252581%252597%2525E3%252581%2525B0%2525E7%252594%2525B0%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzlhMWM5YWI5NTkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="AIを用いた開発の効率を最大化させるためにやっていることを全部書く"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/ks0318/articles/4b201527b383fa" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> AIを用いた開発の効率を最大化させるためにやっていることを全部書く </a> </h4> <a href="/entry/s/zenn.dev/ks0318/articles/4b201527b383fa" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 320 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://togetter.com/li/2534748" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/207d10d9b399236a73187864c1a1a38cc0152acd/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F4ee76c97477348856c792dccf86de45a-1200x630.jpeg" alt="20年程使っていたYahoo! JAPAN IDが突如何故か利用停止になりました→同様の体験談が多数寄せられる"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://togetter.com/li/2534748" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 20年程使っていたYahoo! JAPAN IDが突如何故か利用停止になりました→同様の体験談が多数寄せられる </a> </h4> <a href="/entry/s/togetter.com/li/2534748" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 227 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://speakerdeck.com/shuntaka/introduction-to-mcp" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/418db363d7031b9a6efe7782e6de9695c759f856/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F4d38ba718577441bb8c97392c3cdb0cd%2Fslide_0.jpg%3F34546593" alt="MCPに入門する/ Introduction to MCP"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://speakerdeck.com/shuntaka/introduction-to-mcp" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> MCPに入門する/ Introduction to MCP </a> </h4> <a href="/entry/s/speakerdeck.com/shuntaka/introduction-to-mcp" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 84 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://chatgpt-lab.com/n/nc30d0aff7ef7" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/98a6d7327bb41dd196d665998ecf6c9801ca1f69/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F182649323%2Frectangle_large_type_2_731e8425ca3066b80ef9ba966c4d59ab.png%3Ffit%3Dbounds%26quality%3D85%26width%3D1280" alt="【完全攻略】GPT-4o画像生成プロンプト実例集|ChatGPT研究所"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://chatgpt-lab.com/n/nc30d0aff7ef7" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 【完全攻略】GPT-4o画像生成プロンプト実例集|ChatGPT研究所 </a> </h4> <a href="/entry/s/chatgpt-lab.com/n/nc30d0aff7ef7" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 82 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://developersblog.dmm.com/entry/2025/04/04/110000" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/0664128af6c825bd8000c69e56acaa321ec35540/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F4814769e108b80961b892b62767d09653fe01dc7%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252FD%252FDMMTech%252F20250401%252F20250401104353.jpg" alt="DevinとClineをDMMで導入しました〜トライアルから見えた成果の共有〜 - DMM Developers Blog"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://developersblog.dmm.com/entry/2025/04/04/110000" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> DevinとClineをDMMで導入しました〜トライアルから見えた成果の共有〜 - DMM Developers Blog </a> </h4> <a href="/entry/s/developersblog.dmm.com/entry/2025/04/04/110000" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 159 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/kameoncloud/articles/acf36c112d737e" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/5b6461810d39b05a11afa1ae169ba035ce7f5c6b/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--UUJuUp0o--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252583%25258F%2525E3%252583%252583%2525E3%252582%2525B7%2525E3%252583%2525A5%2525E5%25258C%252596%2525E3%252581%2525A0%2525E3%252581%252591%2525E3%252581%2525A7%2525E3%252581%2525AF%2525E3%252582%252582%2525E3%252581%252586%2525E5%25258F%2525A4%2525E3%252581%252584%252520%2525E3%252582%2525BD%2525E3%252583%2525AB%2525E3%252583%252588%252526%2525E3%252583%25259A%2525E3%252583%252583%2525E3%252583%252591%2525E3%252583%2525BC%2525E3%252581%2525A8%2525E3%252581%252584%2525E3%252581%252586%2525E6%25258A%252580%2525E8%2525A1%252593%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Akameoncloud%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2MxY2ViMjdlZDcuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="ハッシュ化だけではもう古い ソルト&ペッパーという技術"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/kameoncloud/articles/acf36c112d737e" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> ハッシュ化だけではもう古い ソルト&ペッパーという技術 </a> </h4> <a href="/entry/s/zenn.dev/kameoncloud/articles/acf36c112d737e" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 94 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://speakerdeck.com/e869120/p-vs-np-in-90-minutes" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/60a80bfda8670867b399639556f78e38c9868a4e/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fc683532a614548d79d1ca4e11444bf8f%2Fslide_0.jpg%3F34554607" alt="90 分で学ぶ P 対 NP 問題"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://speakerdeck.com/e869120/p-vs-np-in-90-minutes" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 90 分で学ぶ P 対 NP 問題 </a> </h4> <a href="/entry/s/speakerdeck.com/e869120/p-vs-np-in-90-minutes" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 180 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.itmedia.co.jp/news/articles/2504/05/news061.html" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/f3150dde65b07c5faad631376b3833869afe794f/height=288;version=1;width=512/https%3A%2F%2Fimage.itmedia.co.jp%2Fnews%2Farticles%2F2504%2F05%2Fcover_news061.png" alt="ダイソーから“ジェネリックAirタグ” Apple「探す」対応 1100円"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.itmedia.co.jp/news/articles/2504/05/news061.html" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> ダイソーから“ジェネリックAirタグ” Apple「探す」対応 1100円 </a> </h4> <a href="/entry/s/www.itmedia.co.jp/news/articles/2504/05/news061.html" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 196 users </a> </div> </li> </ul> </div> </div> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/ak/articles/61d25099295372"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/ak/articles/61d25099295372" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fak%2Farticles%2F61d25099295372" alt="">Webページがブラウザに表示されるまでに何が起こるのか? </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/ak/articles/61d25099295372" class="js-keyboard-entry-page-openable" title="Webページがブラウザに表示されるまでに何が起こるのか? (1061 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 1061 users </a> </span> </li> <li> <a href="/site/zenn.dev/ak" title="『zenn.dev/ak』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/ak </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/04/14</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 上記で「127.0.0.1 localhost」とあるように、[IPアドレス] [ホスト名]というフォーマットで書かれます。 HOSTS.TXTが使われていた当時 ( 1970年代 ) では、わずか数百台のホストしかなかったので、ネット上の全てのホスト情報の記載が可能でした。 しかし、インターネットが普及していくにつれてHOSTS.TXTは肥大化していき、1983年には、ホスト数はおよそ数万台になりました。もはやHOSTS.TXTによる名前解決は不可能となったので、現在のようなDNS</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6" data-gtm-click-label="entry-search-result-item-tag">ブラウザ</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF" data-gtm-click-label="entry-search-result-item-tag">ネットワーク</a></li> <li><a href="/q/http" data-gtm-click-label="entry-search-result-item-tag">http</a></li> <li><a href="/q/browser" data-gtm-click-label="entry-search-result-item-tag">browser</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> <li><a href="/q/DNS" data-gtm-click-label="entry-search-result-item-tag">DNS</a></li> <li><a href="/q/network" data-gtm-click-label="entry-search-result-item-tag">network</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" data-gtm-click-label="entry-search-result-item-tag">web制作</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/ak/articles/61d25099295372"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/ak/articles/61d25099295372" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6dc5e6fada7b98e21df846ffd5cdb8bb31a57159/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--qYsKCLkh--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AWeb%2525E3%252583%25259A%2525E3%252583%2525BC%2525E3%252582%2525B8%2525E3%252581%25258C%2525E3%252583%252596%2525E3%252583%2525A9%2525E3%252582%2525A6%2525E3%252582%2525B6%2525E3%252581%2525AB%2525E8%2525A1%2525A8%2525E7%2525A4%2525BA%2525E3%252581%252595%2525E3%252582%25258C%2525E3%252582%25258B%2525E3%252581%2525BE%2525E3%252581%2525A7%2525E3%252581%2525AB%2525E4%2525BD%252595%2525E3%252581%25258C%2525E8%2525B5%2525B7%2525E3%252581%252593%2525E3%252582%25258B%2525E3%252581%2525AE%2525E3%252581%25258B%2525EF%2525BC%25259F%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Aaki%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2Q3YTNhNmZhNjkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Webページがブラウザに表示されるまでに何が起こるのか?" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://anond.hatelabo.jp/20241209125634"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://anond.hatelabo.jp/20241209125634" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fanond.hatelabo.jp%2F20241209125634" alt="">コワーキングスーパー銭湯ランキング(東京近郊) </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/anond.hatelabo.jp/20241209125634" class="js-keyboard-entry-page-openable" title="コワーキングスーパー銭湯ランキング(東京近郊) (943 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 943 users </a> </span> </li> <li> <a href="/site/anond.hatelabo.jp/" title="『anond.hatelabo.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> anond.hatelabo.jp </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2024/12/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">なんか、みんな自分の好きなジャンルのランキングつけてて楽しそうなので俺もやってみる。 会社がリモートになってから、がっつりサウナにハマって(今は身体考えてほどほどにしてる)、 銭湯で仕事するのがめちゃくちゃ楽しいと気づいてしまった。 あんまり出社しなくて良い&社外秘とかのセキュリティに関係がほぼない仕事ってのもあって、 今は週2くらいでは都内のどっかの銭湯で風呂入って仕事してる。 そんなわけで、俺の個人的なコワーキング銭湯ランキングをつけてみる。 ここに上がってないのでオススメあったら、マジで教えて欲しい。新しいところ開拓したい! 第5位 花景の湯(よみうりランド) よみうりランド併設の温浴施設。最近できたばっかりなのでめちゃくちゃ綺麗。 ここの売りは山に向かって広がる絶景の露天風呂。もうとにかく最高に気持ち良い。 露天風呂ランキングだったら、圧勝でここが一番。コワーキングスペースは横並び</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E5%A2%97%E7%94%B0" data-gtm-click-label="entry-search-result-item-tag">増田</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E9%8A%AD%E6%B9%AF" data-gtm-click-label="entry-search-result-item-tag">銭湯</a></li> <li><a href="/q/%E6%9D%B1%E4%BA%AC" data-gtm-click-label="entry-search-result-item-tag">東京</a></li> <li><a href="/q/%E4%BB%95%E4%BA%8B" data-gtm-click-label="entry-search-result-item-tag">仕事</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF" data-gtm-click-label="entry-search-result-item-tag">リモートワーク</a></li> <li><a href="/q/%E3%82%B5%E3%82%A6%E3%83%8A" data-gtm-click-label="entry-search-result-item-tag">サウナ</a></li> <li><a href="/q/%E3%83%A9%E3%83%B3%E3%82%AD%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">ランキング</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://anond.hatelabo.jp/20241209125634"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://anond.hatelabo.jp/20241209125634" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/b1638cdb5807a4788e4ba3c1109a984166e095fc/height=288;version=1;width=512/https%3A%2F%2Fanond.hatelabo.jp%2Fimages%2Fog-image-1500.gif" alt="コワーキングスーパー銭湯ランキング(東京近郊)" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/koduki/articles/0fe6cc5ada58e5600f75"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/koduki/articles/0fe6cc5ada58e5600f75" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fkoduki%2Farticles%2F0fe6cc5ada58e5600f75" alt="">レガシーおじさん、SPAを始めてみた。そして限界を知る </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/koduki/articles/0fe6cc5ada58e5600f75" class="js-keyboard-entry-page-openable" title="レガシーおじさん、SPAを始めてみた。そして限界を知る (848 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 848 users </a> </span> </li> <li> <a href="/site/zenn.dev/koduki" title="『zenn.dev/koduki』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/koduki </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/10/19</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに 最近、Webの記事を見てるとReactだVue.jsばかりが上がっていてJSPやERBの話をしてる人は誰もいません。jQueryの記事ももちろん見ない。 つまり、Webだけ見る限りではほとんどの人がSPAを使ってるように見えます。 私はWeb界隈には居るもののどちらかというとバックエンド寄り、もっというとそもそもWebとか関係ない領域を見る事が多いので、ちょっとキャッチアップを兼ねていくつかの個人プロダクトにVue.jsを採用してみました。 jQueryくらいで頭が止まってたので。サーバサイドもマイクロサービスでAPI化が進んでるのでフロントもそれに合った技術を選ばないとですしね。 というわけで、今回はその中で得た知見というか、従来型のサーバサイドでのWeb開発をしていた人の視点でVue.jsをキャッチアップする流れで書いていきたいと思います。 まあ最終的な結論は正直「これすごく</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/Vue" data-gtm-click-label="entry-search-result-item-tag">Vue</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/vue.js" data-gtm-click-label="entry-search-result-item-tag">vue.js</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/koduki/articles/0fe6cc5ada58e5600f75"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/koduki/articles/0fe6cc5ada58e5600f75" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9d7f563bd5dfd955e99387aa29a88d652be77a3e/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--tlFWYuF3--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252583%2525AC%2525E3%252582%2525AC%2525E3%252582%2525B7%2525E3%252583%2525BC%2525E3%252581%25258A%2525E3%252581%252598%2525E3%252581%252595%2525E3%252582%252593%2525E3%252580%252581SPA%2525E3%252582%252592%2525E5%2525A7%25258B%2525E3%252582%252581%2525E3%252581%2525A6%2525E3%252581%2525BF%2525E3%252581%25259F%2525E3%252580%252582%2525E3%252581%25259D%2525E3%252581%252597%2525E3%252581%2525A6%2525E9%252599%252590%2525E7%252595%25258C%2525E3%252582%252592%2525E7%25259F%2525A5%2525E3%252582%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Akoduki%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzM0NmExZDBlNTQuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="レガシーおじさん、SPAを始めてみた。そして限界を知る" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://yusukebe.com/posts/2022/wsh/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://yusukebe.com/posts/2022/wsh/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fyusukebe.com%2Fposts%2F2022%2Fwsh%2F" alt="">500点出す! - ゆーすけべー日記 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/yusukebe.com/posts/2022/wsh/" class="js-keyboard-entry-page-openable" title="500点出す! - ゆーすけべー日記 (681 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 681 users </a> </span> </li> <li> <a href="/site/yusukebe.com/" title="『yusukebe.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> yusukebe.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/11/21</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">「Web Speed Hackathon 2022」という「非常に重たいWebアプリをチューニングして、いかに高速にするかを競う競技」があります。 リモート参加で11月1日から27日まで開催されています。 ここで言う「高速」とはCore Web Vitalsのスコアが高いことを言い、Lighthouseのスコアをベースにした500点満点の争いです。 ISUCONのフロントエンド版ですね。 以前にも同じ課題で「学生向け」と「社内(サイバーエージェント)向け」が行われたらしく、まだ500点を出した人はいません。 そこで僕は「満点を出したい」と思い、初日から、いやむしろフライングしていたからその前から頑張ってきました。 そして、先日(17日)、ついに500点満点を出しました! たぶん、レギュレーションはクリアしている、はずです(もし違反してたらすいません…)。 自動で行われる「Visual Re</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/performance" data-gtm-click-label="entry-search-result-item-tag">performance</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">パフォーマンス</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/tuning" data-gtm-click-label="entry-search-result-item-tag">tuning</a></li> <li><a href="/q/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">チューニング</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://yusukebe.com/posts/2022/wsh/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://yusukebe.com/posts/2022/wsh/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/1878cce24b4e22e30dc75c294e1144aaeae169b2/height=288;version=1;width=512/https%3A%2F%2Fss.yusukebe.com%2Fc7d6efff487da476f1ef76da6afc54048dd14c4aeab9b7571c031ee3938c5f3a.png" alt="500点出す! - ゆーすけべー日記" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/Hiro-mi/items/18e00060a0f8654f49d6"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/Hiro-mi/items/18e00060a0f8654f49d6" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2FHiro-mi%2Fitems%2F18e00060a0f8654f49d6" alt="">SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/Hiro-mi/items/18e00060a0f8654f49d6" class="js-keyboard-entry-page-openable" title="SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita (649 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 649 users </a> </span> </li> <li> <a href="/site/qiita.com/Hiro-mi" title="『qiita.com/Hiro-mi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/Hiro-mi </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/04/24</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">SPAのログイン周りについて、「これがベストプラクティスだ!」という情報があまり見当たらないので、様々な可能性を模索してみました。 いろいろな状況が想定され、今回記載する内容に考慮の漏れや不備などがありましたら是非コメントでご指摘いただきたいです!特に「おすすめ度:○」と記載しているものに対しての批判をどしどしお待ちしております! この記事でおすすめしているものであっても、ご自身の責任で十分な検討・検証の上で選択されてください。 前提 想定しているAPIは、 ログイン外のAPIにはPOST/PUT/DELETEのものがなく、GETのみ GETのAPIにはDBを更新するなどの操作がない とし、そのためログイン外ではCSRFを考慮しなくてよい、 という前提で話を進めます。 また、XSSに関しては常に対策は必要なのですが(フレームワーク側が自動的にしてくれる部分もある)、認証周りに関係すること以</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E8%AA%8D%E8%A8%BC" data-gtm-click-label="entry-search-result-item-tag">認証</a></li> <li><a href="/q/JWT" data-gtm-click-label="entry-search-result-item-tag">JWT</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/Cookie" data-gtm-click-label="entry-search-result-item-tag">Cookie</a></li> <li><a href="/q/api" data-gtm-click-label="entry-search-result-item-tag">api</a></li> <li><a href="/q/CSRF" data-gtm-click-label="entry-search-result-item-tag">CSRF</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/Hiro-mi/items/18e00060a0f8654f49d6"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/Hiro-mi/items/18e00060a0f8654f49d6" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/597486a82b1a0bc1f10cf74d2e4640ff3ace0765/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fqiita-user-contents.imgix.net%252Fhttps%25253A%25252F%25252Fcdn.qiita.com%25252Fassets%25252Fpublic%25252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%253Fixlib%253Drb-4.0.0%2526w%253D1200%2526blend64%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMjM2NDcyJTJGcHJvZmlsZS1pbWFnZXMlMkYxNTg3NTU1OTAzP2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZmbT1wbmczMiZzPWZlZWZmYjRkYWM0YjdhOGUwMDI0ZmFiYzUxOWJjYjNl%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D6a8342f804c4b6d59bae42cfb9b40336%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9U1BBJUUzJTgxJUFFJUUzJTgzJUFEJUUzJTgyJUIwJUUzJTgyJUE0JUUzJTgzJUIzJUU4JUFBJThEJUU4JUE4JUJDJUUzJTgxJUFFJUUzJTgzJTk5JUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgzJTk3JUUzJTgzJUE5JUUzJTgyJUFGJUUzJTgzJTg2JUUzJTgyJUEzJUUzJTgyJUI5JUUzJTgxJThDJUUzJTgyJThGJUUzJTgxJThCJUUzJTgyJTg5JUUzJTgxJUFBJUUzJTgxJThCJUUzJTgxJUEzJUUzJTgxJTlGJUUzJTgxJUFFJUUzJTgxJUE3JUUzJTgyJThGJUUzJTgyJThBJUUzJTgxJUE4JUU3JUI2JUIyJUU3JUJFJTg1JUU3JTlBJTg0JUUzJTgxJUFCJUU3JUEwJTk0JUU3JUE5JUI2JUUzJTgxJTk3JUUzJTgxJUE2JUUzJTgxJUJGJUUzJTgxJTlGJUUzJTgwJTlDSldUJTIwb3IlMjBTZSVFMiU4MCVBNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPWUwYWY4YTUwMmU0NjU0OTZmYzQ1Y2QyZDE5NjYyNmQ3%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBIaXJvLW1pJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LXBhZD0wJnM9NmE1MDVhODdkYjMzOWY4NWQ1MmRhZDFlZjhkNzM3Yjc%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3D5a8b65cc9ff25a6f9c567e4231c44335" alt="SPAのログイン認証のベストプラクティスがわからなかったのでわりと網羅的に研究してみた〜JWT or Session どっち?〜 - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.docswell.com/s/ockeghem/K2PPNK-phpconf2022"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.docswell.com/s/ockeghem/K2PPNK-phpconf2022" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.docswell.com%2Fs%2Fockeghem%2FK2PPNK-phpconf2022" alt="">SPAセキュリティ超入門 | ドクセル </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.docswell.com/s/ockeghem/K2PPNK-phpconf2022" class="js-keyboard-entry-page-openable" title="SPAセキュリティ超入門 | ドクセル (607 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 607 users </a> </span> </li> <li> <a href="/site/www.docswell.com/" title="『www.docswell.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.docswell.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/09/24</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">スライド概要 SPA(Single Page Application)の普及が一層進んでおり、従来型のMPAを知らないウェブ開発者も生まれつつあるようです。SPA対応のフレームワークでは基本的な脆弱性については対策機能が用意されていますが、それにも関わらず、脆弱性診断等で基本的な脆弱性が指摘されるケースはむしろ増えつつあります。 本セッションでは、LaravelとReactで開発したアプリケーションをモデルとして、SQLインジェクション、クロスサイトスクリプティング、認可制御不備等の脆弱性の実例を紹介しながら、現実的な対策について紹介します。LaravelやReact以外のフレームワーク利用者にも役立つ説明を心がけます。 PHPカンファレンス2022での講演資料です。 PHPカンファレンスでの動画URL https://www.youtube.com/watch?v=jZ6sWyGxcCs</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/XSS" data-gtm-click-label="entry-search-result-item-tag">XSS</a></li> <li><a href="/q/Laravel" data-gtm-click-label="entry-search-result-item-tag">Laravel</a></li> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/JavaScript" data-gtm-click-label="entry-search-result-item-tag">JavaScript</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.docswell.com/s/ockeghem/K2PPNK-phpconf2022"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.docswell.com/s/ockeghem/K2PPNK-phpconf2022" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/5d229c211a751911552a15377515ee3185a4b091/height=288;version=1;width=512/https%3A%2F%2Fbcdn.docswell.com%2Fpage%2FDEYPZD19EM.jpg%3Fwidth%3D480" alt="SPAセキュリティ超入門 | ドクセル" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/monicle/articles/the-end-of-the-ajax-heyday"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/monicle/articles/the-end-of-the-ajax-heyday" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmonicle%2Farticles%2Fthe-end-of-the-ajax-heyday" alt="">Ajaxから始まった一つの時代の終わり </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/monicle/articles/the-end-of-the-ajax-heyday" class="js-keyboard-entry-page-openable" title="Ajaxから始まった一つの時代の終わり (568 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 568 users </a> </span> </li> <li> <a href="/site/zenn.dev/monicle" title="『zenn.dev/monicle』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/monicle </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/07/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">最近の流れを見ていての感想文なので、ideaとして投稿します。筆者のバックグラウンドとしては、Remixの商業記事を書いたり、App Routerの商業記事を書いたりしている人です。 さて、筆者は2022年の秋から、社内システムではありますがRemixをプロダクション運用しています。また、Next.jsのApp Routerについても、パラダイムとしてはRemixにインスパイアされた部分が多い[1]おかげで、順調にキャッチアップできています。 RemixとApp Routerは、ルーティングとデータフェッチを高度に統合しており、Progressively Enhanced SPA(PESPA)と呼ばれることもあるそうです。PESPAについては、次の記事が話題になりましたね。 このPESPAであるRemixを実運用する中で、フレームワークの手触りが近年触ってきたものと大きく違っている点があっ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/ajax" data-gtm-click-label="entry-search-result-item-tag">ajax</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/Next.js" data-gtm-click-label="entry-search-result-item-tag">Next.js</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/monicle/articles/the-end-of-the-ajax-heyday"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/monicle/articles/the-end-of-the-ajax-heyday" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/6ee4e415d53974ec81cea5586dbde9195b7c7007/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--tD9rR0G4--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AAjax%2525E3%252581%25258B%2525E3%252582%252589%2525E5%2525A7%25258B%2525E3%252581%2525BE%2525E3%252581%2525A3%2525E3%252581%25259F%2525E4%2525B8%252580%2525E3%252581%2525A4%2525E3%252581%2525AE%2525E6%252599%252582%2525E4%2525BB%2525A3%2525E3%252581%2525AE%2525E7%2525B5%252582%2525E3%252582%25258F%2525E3%252582%25258A%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_34%3ANkzn%252Cx_220%252Cy_108%2Fbo_3px_solid_rgb%3Ad6e3ed%252Cg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2NlMzk4MDdmM2QuanBlZw%3D%3D%252Cr_20%252Cw_90%252Cx_92%252Cy_102%2Fco_rgb%3A6e7b85%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_30%3A%2525E6%2525A0%2525AA%2525E5%2525BC%25258F%2525E4%2525BC%25259A%2525E7%2525A4%2525BE%2525E3%252583%2525A2%2525E3%252583%25258B%2525E3%252582%2525AF%2525E3%252583%2525AB%252Cx_220%252Cy_160%2Fbo_4px_solid_white%252Cg_south_west%252Ch_50%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2hpRkgxVktGMXZZOFk2eEtfZl9PVklHS2pEeWxkWG42MzVLU0VEZEE9czI1MC1j%252Cr_max%252Cw_50%252Cx_139%252Cy_84%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Ajaxから始まった一つの時代の終わり" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.slideshare.net/slideshow/phpconf2021spasecurity/250357376"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.slideshare.net/slideshow/phpconf2021spasecurity/250357376" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fphpconf2021spasecurity%2F250357376" alt="">SPAセキュリティ入門~PHP Conference Japan 2021 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.slideshare.net/slideshow/phpconf2021spasecurity/250357376" class="js-keyboard-entry-page-openable" title="SPAセキュリティ入門~PHP Conference Japan 2021 (557 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 557 users </a> </span> </li> <li> <a href="/site/www.slideshare.net/slideshow" title="『www.slideshare.net/slideshow』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.slideshare.net/slideshow </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/10/03</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">2. 徳丸浩の自己紹介 • 経歴 – 1985年 京セラ株式会社入社 – 1995年 京セラコミュニケーションシステム株式会社(KCCS)に出向・転籍 – 2008年 KCCS退職、HASHコンサルティング株式会社(現社名:EGセキュアソリューションズ株式会社)設立 • 経験したこと – 京セラ入社当時はCAD、計算幾何学、数値シミュレーションなどを担当 – その後、企業向けパッケージソフトの企画・開発・事業化を担当 – 1999年から、携帯電話向けインフラ、プラットフォームの企画・開発を担当 Webアプリケーションのセキュリティ問題に直面、研究、社内展開、寄稿などを開始 – 2004年にKCCS社内ベンチャーとしてWebアプリケーションセキュリティ事業を立ち上げ • 現在 – EGセキュアソリューションズ株式会社取締役CTO https://www.eg-secure.co.jp/ –</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/JWT" data-gtm-click-label="entry-search-result-item-tag">JWT</a></li> <li><a href="/q/php" data-gtm-click-label="entry-search-result-item-tag">php</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/%E5%BE%B3%E4%B8%B8" data-gtm-click-label="entry-search-result-item-tag">徳丸</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/CORS" data-gtm-click-label="entry-search-result-item-tag">CORS</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.slideshare.net/slideshow/phpconf2021spasecurity/250357376"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.slideshare.net/slideshow/phpconf2021spasecurity/250357376" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2c7edd1930e08fd482ec5be551f4fcf09adf1774/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fphpconf2021-211003053717-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds" alt="SPAセキュリティ入門~PHP Conference Japan 2021" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://scrapbox.io/shokai/%E3%80%8CSPA%E3%81%AE%E3%82%BF%E3%83%96%E6%B0%B8%E9%81%A0%E3%81%AB%E9%96%8B%E3%81%8D%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97%E5%95%8F%E9%A1%8C%E3%80%8D%E3%82%92%E6%9B%B4%E6%96%B0%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%9B%E3%81%9A%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://scrapbox.io/shokai/%E3%80%8CSPA%E3%81%AE%E3%82%BF%E3%83%96%E6%B0%B8%E9%81%A0%E3%81%AB%E9%96%8B%E3%81%8D%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97%E5%95%8F%E9%A1%8C%E3%80%8D%E3%82%92%E6%9B%B4%E6%96%B0%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%9B%E3%81%9A%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fscrapbox.io%2Fshokai%2F%25E3%2580%258CSPA%25E3%2581%25AE%25E3%2582%25BF%25E3%2583%2596%25E6%25B0%25B8%25E9%2581%25A0%25E3%2581%25AB%25E9%2596%258B%25E3%2581%258D%25E3%2581%25A3%25E3%2581%25B1%25E3%2581%25AA%25E3%2581%2597%25E5%2595%258F%25E9%25A1%258C%25E3%2580%258D%25E3%2582%2592%25E6%259B%25B4%25E6%2596%25B0%25E3%2583%259C%25E3%2582%25BF%25E3%2583%25B3%25E3%2582%2592%25E8%25A8%25AD%25E7%25BD%25AE%25E3%2581%259B%25E3%2581%259A%25E8%25A7%25A3%25E6%25B1%25BA%25E3%2581%2597%25E3%2581%259F" alt="">「SPAのタブ永遠に開きっぱなし問題」を更新ボタンを設置せず解決した - 橋本商会 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/scrapbox.io/shokai/%E3%80%8CSPA%E3%81%AE%E3%82%BF%E3%83%96%E6%B0%B8%E9%81%A0%E3%81%AB%E9%96%8B%E3%81%8D%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97%E5%95%8F%E9%A1%8C%E3%80%8D%E3%82%92%E6%9B%B4%E6%96%B0%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%9B%E3%81%9A%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F" class="js-keyboard-entry-page-openable" title="「SPAのタブ永遠に開きっぱなし問題」を更新ボタンを設置せず解決した - 橋本商会 (553 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 553 users </a> </span> </li> <li> <a href="/site/scrapbox.io/shokai/" title="『scrapbox.io/shokai』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> scrapbox.io/shokai </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/12/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは。強いUIはボタンを捨てるをスローガンにScrapboxを開発しています。shokaiですshokai.icon</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/ui" data-gtm-click-label="entry-search-result-item-tag">ui</a></li> <li><a href="/q/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6" data-gtm-click-label="entry-search-result-item-tag">ブラウザ</a></li> <li><a href="/q/cache" data-gtm-click-label="entry-search-result-item-tag">cache</a></li> <li><a href="/q/%E8%A8%AD%E8%A8%88" data-gtm-click-label="entry-search-result-item-tag">設計</a></li> <li><a href="/q/css" data-gtm-click-label="entry-search-result-item-tag">css</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://scrapbox.io/shokai/%E3%80%8CSPA%E3%81%AE%E3%82%BF%E3%83%96%E6%B0%B8%E9%81%A0%E3%81%AB%E9%96%8B%E3%81%8D%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97%E5%95%8F%E9%A1%8C%E3%80%8D%E3%82%92%E6%9B%B4%E6%96%B0%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%9B%E3%81%9A%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://scrapbox.io/shokai/%E3%80%8CSPA%E3%81%AE%E3%82%BF%E3%83%96%E6%B0%B8%E9%81%A0%E3%81%AB%E9%96%8B%E3%81%8D%E3%81%A3%E3%81%B1%E3%81%AA%E3%81%97%E5%95%8F%E9%A1%8C%E3%80%8D%E3%82%92%E6%9B%B4%E6%96%B0%E3%83%9C%E3%82%BF%E3%83%B3%E3%82%92%E8%A8%AD%E7%BD%AE%E3%81%9B%E3%81%9A%E8%A7%A3%E6%B1%BA%E3%81%97%E3%81%9F" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/ee4b6a64a14386eaea8fb14cb0df8079c752f423/height=288;version=1;width=512/https%3A%2F%2Fscrapbox.io%2Ffiles%2F639004dfc646610021fbec0b.png%3Ftype%3Dthumbnail" alt="「SPAのタブ永遠に開きっぱなし問題」を更新ボタンを設置せず解決した - 橋本商会" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://d.potato4d.me/entry/20201129-frontend-2020/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://d.potato4d.me/entry/20201129-frontend-2020/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fd.potato4d.me%2Fentry%2F20201129-frontend-2020%2F" alt="">2020年のフロントエンドエンジニアの技術スタックの一例 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/d.potato4d.me/entry/20201129-frontend-2020/" class="js-keyboard-entry-page-openable" title="2020年のフロントエンドエンジニアの技術スタックの一例 (553 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 553 users </a> </span> </li> <li> <a href="/site/d.potato4d.me/" title="『d.potato4d.me』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> d.potato4d.me </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/11/29</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">年の瀬なので、私自身が今年利用した技術をベースに技術スタックをまとめてみようと思います。 とはいえ Web Standard といった広い対象から、フレームワークやライブラリまで、粒度の違うものを全て言及するのは無理があるというもの。特に強く言及できるものは個別で説明しつつ、最後に利用する機会がなかったものも最後に記載する形で。 以下常体。 追記: マイナー企業のようなので一応書いておきますが、筆者は本業ではLINE株式会社という組織でいわゆるエンジニアリングマネージャーと言われるような業務とその採用に関わる仕事をしています。 利用した技術一覧 HTML/CSS/JS みたいなことを書いてるとキリがないので、独断と偏見で区分けして適宜漉いています。特に利用する機会が多かったものは太字でピックアップ。 Frontend Language/Platform TypeScript JavaScr</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/firebase" data-gtm-click-label="entry-search-result-item-tag">firebase</a></li> <li><a href="/q/node" data-gtm-click-label="entry-search-result-item-tag">node</a></li> <li><a href="/q/development" data-gtm-click-label="entry-search-result-item-tag">development</a></li> <li><a href="/q/cloud" data-gtm-click-label="entry-search-result-item-tag">cloud</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://d.potato4d.me/entry/20201129-frontend-2020/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://d.potato4d.me/entry/20201129-frontend-2020/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/f52b06c3d7f4fe330575799f00f2f094201a5dc4/height=288;version=1;width=512/https%3A%2F%2Fd.potato4d.me%2Fstatic%2Fopengraph.png" alt="2020年のフロントエンドエンジニアの技術スタックの一例" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.yamaonsen.com/entry/onsen_houhu2024"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.yamaonsen.com/entry/onsen_houhu2024" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.yamaonsen.com%2Fentry%2Fonsen_houhu2024" alt="">【すべて1人泊可能】2024年はここに泊まりたい!各都道府県から1軒ずつ、一番泊まりたい宿を選出した【全47軒】 - 温泉ブログ 山と温泉のきろく </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.yamaonsen.com/entry/onsen_houhu2024" class="js-keyboard-entry-page-openable" title="【すべて1人泊可能】2024年はここに泊まりたい!各都道府県から1軒ずつ、一番泊まりたい宿を選出した【全47軒】 - 温泉ブログ 山と温泉のきろく (542 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 542 users </a> </span> </li> <li> <a href="/site/www.yamaonsen.com/" title="『www.yamaonsen.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.yamaonsen.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2024/04/29</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">2024年も1人で、お湯が良くて食事もおいしい宿に泊まりたい 全国旅行支援などのコロナ禍にまつわる観光需要喚起施策も終了し、インバウンドも増加して、すっかりコロナ禍以前に戻ったような印象を受ける昨今。 大幅な割引きキャンペーンなどで観光需要が高まると、1人客の受け入れを止めてしまう宿が増える傾向にありますが、現在は「外国人観光客がものすごく多いエリア・宿」を避ければ、一人旅も比較的しやすい状況ではないかと思います。 そんな2024年も「1人で」泊まれる温泉宿に絞って、47都道府県から1軒ずつ、1番泊まりたい宿を選びました。 このリストはもともと私が「次の休みにどこに行こうかな?」と考えたときに、選択肢を絞りやすくするために作っているリストです。昨年もピックアップした47軒の宿の中から7軒の宿に実際に泊まりました。 私は食事は宿で食べたいタイプなので、今回も基本的に「1人でも2食付きで泊まれ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E5%AE%BF" data-gtm-click-label="entry-search-result-item-tag">宿</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/%E6%97%85%E9%A4%A8" data-gtm-click-label="entry-search-result-item-tag">旅館</a></li> <li><a href="/q/%E9%A3%9F" data-gtm-click-label="entry-search-result-item-tag">食</a></li> <li><a href="/q/%E8%A1%8C%E3%81%8D%E3%81%9F%E3%81%84" data-gtm-click-label="entry-search-result-item-tag">行きたい</a></li> <li><a href="/q/life" data-gtm-click-label="entry-search-result-item-tag">life</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.yamaonsen.com/entry/onsen_houhu2024"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.yamaonsen.com/entry/onsen_houhu2024" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/07f927b6a01dc3a55a489876eb4fa7baaceb84a0/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fde6c273053eec60f810583bb764400e4e9f7ce77%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fh%252Fhappydust%252F20240411%252F20240411131619.jpg" alt="【すべて1人泊可能】2024年はここに泊まりたい!各都道府県から1軒ずつ、一番泊まりたい宿を選出した【全47軒】 - 温泉ブログ 山と温泉のきろく" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.ms-ins.com/kurumamo/entry/23014"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.ms-ins.com/kurumamo/entry/23014" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.ms-ins.com%2Fkurumamo%2Fentry%2F23014" alt="">車で行きたい関東近郊の秘湯10選。2,500ヵ所以上の温泉を巡った秘湯探検家のおすすめ #くるまも - くるまも|三井住友海上 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.ms-ins.com/kurumamo/entry/23014" class="js-keyboard-entry-page-openable" title="車で行きたい関東近郊の秘湯10選。2,500ヵ所以上の温泉を巡った秘湯探検家のおすすめ #くるまも - くるまも|三井住友海上 (536 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 536 users </a> </span> </li> <li> <a href="/site/www.ms-ins.com/" title="『www.ms-ins.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.ms-ins.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2023/04/28</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめまして。秘湯探検家の渡辺裕美です。 私は会社員時代にハードワークで体調を崩したとき、「温泉」と「自然」に心身を癒やされました。それをきっかけに温泉にハマり、これまでに国内外の温泉2,500ヵ所以上を巡りました。 特に「秘湯」など自然豊かな場所にある温泉が好きで、現在でも月の半分は、関東近郊の未開の温泉探しや子どもとの秘湯巡りを車で楽しんでいます。 自然の中にある「温泉プール」付きの秘湯(北温泉)都内にあるスーパー銭湯も気軽で良いのですが、人が多過ぎたり、子ども同伴の場合は周りの目が気になってリラックスできなかったり……。 でも、「秘湯」ならそんな心配をせずに、静かに温泉を楽しめる場合が多いです。また、山・川など自然環境にも恵まれていることが多く、癒やし効果が倍増します。 そこで今回は、私がおすすめしたい「初心者向け関東近郊の秘湯」をご紹介します。東京から車で2~3時間走れば、個性的で</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> <li><a href="/q/%E8%A1%8C%E3%81%8D%E3%81%9F%E3%81%84" data-gtm-click-label="entry-search-result-item-tag">行きたい</a></li> <li><a href="/q/%E3%81%8A%E3%81%99%E3%81%99%E3%82%81%E3%82%B9%E3%83%9D%E3%83%83%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">おすすめスポット</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89" data-gtm-click-label="entry-search-result-item-tag">観光</a></li> <li><a href="/q/%E3%81%8A%E5%BD%B9%E7%AB%8B%E3%81%A1" data-gtm-click-label="entry-search-result-item-tag">お役立ち</a></li> <li><a href="/q/%E8%87%AA%E7%84%B6" data-gtm-click-label="entry-search-result-item-tag">自然</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.ms-ins.com/kurumamo/entry/23014"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.ms-ins.com/kurumamo/entry/23014" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e0709636c7df5465ad6a7aa1bb220a61c42c04d5/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fb1a2e2b9e96121b402a767920aeb6360582bc975%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fb%252Fblog-media%252F20230410%252F20230410102506.jpg" alt="車で行きたい関東近郊の秘湯10選。2,500ヵ所以上の温泉を巡った秘湯探検家のおすすめ #くるまも - くるまも|三井住友海上" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://mizumotok.hatenablog.jp/entry/2021/08/04/114431"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://mizumotok.hatenablog.jp/entry/2021/08/04/114431" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fmizumotok.hatenablog.jp%2Fentry%2F2021%2F08%2F04%2F114431" alt="">SPA認証トークンはlocalStorageでもCookieでもない、Auth0方式はいいねというお話 - @mizumotokのブログ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/mizumotok.hatenablog.jp/entry/2021/08/04/114431" class="js-keyboard-entry-page-openable" title="SPA認証トークンはlocalStorageでもCookieでもない、Auth0方式はいいねというお話 - @mizumotokのブログ (510 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 510 users </a> </span> </li> <li> <a href="/site/mizumotok.hatenablog.jp/" title="『mizumotok.hatenablog.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> mizumotok.hatenablog.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/03/28</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">SPA認証トークンをどこに保存するかは論争が絶えません。localStorageやCookieがよく使われますが、Auth0は違う方法を採用しています。この記事では、Auth0のトークン管理の方式を理解でき、トークン管理上のセキュリティへの理解を深めることができます。 SPAの認証トークンをどこに保存するか ブラウザでトークンを保存できる場所 保存場所の比較 メリット・デメリット Auth0のアプローチ トークンはインメモリに保存 OpenID Connect準拠とトークン取得のUI/UXの悪化回避を両立 Auth0のjsライブラリ ログイン アクセストークンの(再)取得 図解 ログイン アクセストークンの(再)取得 自サービス内の認証だけのもっと簡易な構成 ログイン IDトークン取得 まとめ SPAの認証トークンをどこに保存するか React やVueで認証付きSPA(Single Pa</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E8%AA%8D%E8%A8%BC" data-gtm-click-label="entry-search-result-item-tag">認証</a></li> <li><a href="/q/OAuth" data-gtm-click-label="entry-search-result-item-tag">OAuth</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/auth" data-gtm-click-label="entry-search-result-item-tag">auth</a></li> <li><a href="/q/OpenID" data-gtm-click-label="entry-search-result-item-tag">OpenID</a></li> <li><a href="/q/cookie" data-gtm-click-label="entry-search-result-item-tag">cookie</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://mizumotok.hatenablog.jp/entry/2021/08/04/114431"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://mizumotok.hatenablog.jp/entry/2021/08/04/114431" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/febac06516a5d4ae911706c9b72565a2f86a9d68/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F6412bed589b284b8b0b94c0382880de7ad0d6e4e%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fm%252Fmizumotok%252F20210804%252F20210804112029.jpg" alt="SPA認証トークンはlocalStorageでもCookieでもない、Auth0方式はいいねというお話 - @mizumotokのブログ" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://lealog.hateblo.jp/entry/2021/08/12/103111"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://lealog.hateblo.jp/entry/2021/08/12/103111" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Flealog.hateblo.jp%2Fentry%2F2021%2F08%2F12%2F103111" alt="">なんでもSPAにするんじゃねぇ!という主張のその先 - console.lealog(); </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/lealog.hateblo.jp/entry/2021/08/12/103111" class="js-keyboard-entry-page-openable" title="なんでもSPAにするんじゃねぇ!という主張のその先 - console.lealog(); (489 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 489 users </a> </span> </li> <li> <a href="/site/lealog.hateblo.jp/" title="『lealog.hateblo.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> lealog.hateblo.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/08/12</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Your shopping website is not an SPA. I repeat: your shopping website is not an SPA. Stop trying to sculpt David with a JS chainsaw and get yourself an HTML/CSS chisel.— Alex Russell (@slightlylate) 2021年8月10日 この主張、界隈(少なくとも自分の観測範囲)では割とよく見かけるし、なんか定期的に話題になるトピックなのかなーと。 まあ持論としてもコレには概ね同意しており、会社のスタンスとも相まって、常日頃からぼんやり考えてたりすることでもある。 で、そんな折にこのツイートを発見して、さらにそれに言及してる人々を見て、ふと自分でも現状を整理しておきたいなーという気持ちになったので筆を執った次第。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/MPA" data-gtm-click-label="entry-search-result-item-tag">MPA</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/SSR" data-gtm-click-label="entry-search-result-item-tag">SSR</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/jamstack" data-gtm-click-label="entry-search-result-item-tag">jamstack</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://lealog.hateblo.jp/entry/2021/08/12/103111"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://lealog.hateblo.jp/entry/2021/08/12/103111" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/39684e61cc0a88f2446083d325102771260c9681/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F13208692334729901128%2F26006613796431118%2F1628731871" alt="なんでもSPAにするんじゃねぇ!という主張のその先 - console.lealog();" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/sesere/articles/c3917db32777af"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/sesere/articles/c3917db32777af" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fsesere%2Farticles%2Fc3917db32777af" alt="">なぜ僕が「SPAはコストが高い」と考えているのか </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/sesere/articles/c3917db32777af" class="js-keyboard-entry-page-openable" title="なぜ僕が「SPAはコストが高い」と考えているのか (471 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 471 users </a> </span> </li> <li> <a href="/site/zenn.dev/sesere" title="『zenn.dev/sesere』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/sesere </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/03/30</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">どうもみなさんこんばんは ちょっと前に「個人開発者やスタートアップの初期からSPAで開発するのはコスト高いっすよね」みたいな事を書いたらフロントエンドエンジニアの皆様からバチバチに叩かれた僕です 彼らには彼らの考えがあるのでそれはどうでもいいのですが、どういう理由があってその発言をしたのか~と言う部分が気になっている方もいたようなので説明しておこうと思います ちなみに今でも全く意見は変わっておらず、この発言に同意できるかできないかは単純に視点の違い、規模の違い、スキルの違いだと思ってます 追記: もちろんSPAじゃないと実現できないようなサービスを作りたい場合はSPA一択ですし(インタラクティブにHPつくるサービスとか。でも世の中の95%くらいのサービスはそうじゃないと思います)、サイトの利用はログインした人にだけ提供するような業務系ツールなどはまた話が別です 前提の話 こういう記事ではコ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">サービス</a></li> <li><a href="/q/architecture" data-gtm-click-label="entry-search-result-item-tag">architecture</a></li> <li><a href="/q/%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" data-gtm-click-label="entry-search-result-item-tag">アーキテクチャ</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF" data-gtm-click-label="entry-search-result-item-tag">データ</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/sesere/articles/c3917db32777af"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/sesere/articles/c3917db32777af" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/cd2644dfc874a0c2afe25fecc93e86eda2f8f8d3/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--lL3fHnfb--%2Fco_rgb%3A222%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_37_bold%3Asesere%252Cx_203%252Cy_98%2Fc_fit%252Cco_rgb%3A222%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_70_bold%3A%2525E3%252581%2525AA%2525E3%252581%25259C%2525E5%252583%252595%2525E3%252581%25258C%2525E3%252580%25258CSPA%2525E3%252581%2525AF%2525E3%252582%2525B3%2525E3%252582%2525B9%2525E3%252583%252588%2525E3%252581%25258C%2525E9%2525AB%252598%2525E3%252581%252584%2525E3%252580%25258D%2525E3%252581%2525A8%2525E8%252580%252583%2525E3%252581%252588%2525E3%252581%2525A6%2525E3%252581%252584%2525E3%252582%25258B%2525E3%252581%2525AE%2525E3%252581%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9yZXMuY2xvdWRpbmFyeS5jb20vemVubi9pbWFnZS9mZXRjaC9zLS16SEJtWTY2Sy0tL2NfbGltaXQlMkNmX2F1dG8lMkNmbF9wcm9ncmVzc2l2ZSUyQ3FfYXV0byUyQ3dfNzAvaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzg4NjY3ZDcwMjMuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_72%2Fv1627274783%2Fdefault%2Fog-base_z4sxah.png" alt="なぜ僕が「SPAはコストが高い」と考えているのか" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://developer.hatenastaff.com/entry/2020/07/22/120000"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://developer.hatenastaff.com/entry/2020/07/22/120000" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdeveloper.hatenastaff.com%2Fentry%2F2020%2F07%2F22%2F120000" alt="">コーポレートサイトを誰にも気づかれず静的化したときの技術選択について - Hatena Developer Blog </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/developer.hatenastaff.com/entry/2020/07/22/120000" class="js-keyboard-entry-page-openable" title="コーポレートサイトを誰にも気づかれず静的化したときの技術選択について - Hatena Developer Blog (453 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 453 users </a> </span> </li> <li> <a href="/site/developer.hatenastaff.com/" title="『developer.hatenastaff.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> developer.hatenastaff.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/07/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは〜。チーフエンジニアのid:cockscombです。 最近、同僚のid:yashigani_wとともに、はてなのコーポレートサイトを静的サイトとして再構築しました。ちょっとした仕事ではありますが、経験によって得られた暗黙知を形式知へ昇華するため、ここに紹介します。 はてなのコーポレートサイトとは サイトを静的化するメリット どのようにサイトの静的化を進めたか 1. 静的ファイルをNext.jsで生成 2. 運用を自動化したい 3. ホスティングサービスを選択する 4. 動的なコンテンツを表示する リリースと振り返り ホスティングサービスに関する補足 はてなのコーポレートサイトとは 弊社のコーポレートサイトは一般的なそれと同様に、株式会社としての「はてな」に関心を持っていただいた方々とコミュニケーションするための窓口です。会社情報を提供したり、あるいはプレスリリースなどの情報を公開</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/Next.js" data-gtm-click-label="entry-search-result-item-tag">Next.js</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/%E9%9D%99%E7%9A%84%E3%82%B5%E3%82%A4%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">静的サイト</a></li> <li><a href="/q/%E3%81%AF%E3%81%A6%E3%81%AA" data-gtm-click-label="entry-search-result-item-tag">はてな</a></li> <li><a href="/q/aws" data-gtm-click-label="entry-search-result-item-tag">aws</a></li> <li><a href="/q/Amplify" data-gtm-click-label="entry-search-result-item-tag">Amplify</a></li> <li><a href="/q/%E9%81%8B%E7%94%A8" data-gtm-click-label="entry-search-result-item-tag">運用</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" data-gtm-click-label="entry-search-result-item-tag">web制作</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://developer.hatenastaff.com/entry/2020/07/22/120000"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://developer.hatenastaff.com/entry/2020/07/22/120000" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/f3b753d0bd14dfc9ab1ef2645e361520d5d75d37/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F542dc32ee2af214d0ddcd7a15823715b5eda0863%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fb%252Fblog-media%252F20200721%252F20200721013639.png" alt="コーポレートサイトを誰にも気づかれず静的化したときの技術選択について - Hatena Developer Blog" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.yamaonsen.com/entry/favorite_area"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.yamaonsen.com/entry/favorite_area" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.yamaonsen.com%2Fentry%2Ffavorite_area" alt="">私の好きな温泉地10選 気がつけば繰り返しおとずれていた大好きな温泉地 - 温泉ブログ 山と温泉のきろく </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.yamaonsen.com/entry/favorite_area" class="js-keyboard-entry-page-openable" title="私の好きな温泉地10選 気がつけば繰り返しおとずれていた大好きな温泉地 - 温泉ブログ 山と温泉のきろく (433 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 433 users </a> </span> </li> <li> <a href="/site/www.yamaonsen.com/" title="『www.yamaonsen.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.yamaonsen.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2021/11/25</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はてなブログ10周年特別お題「好きな◯◯10選」 あの温泉に行きたい!と心から思えた10箇所の温泉地 はてなブログ10周年特別お題に参加して何か書こうと思いたち、いくつかある特別お題の中で「好きな○○10選」について書くことにしました。 私は「温泉地」より「温泉宿」にこだわりがあるタイプなので、最初は「好きな温泉宿10選」で書こうと、宿を10軒選ぼうとしたのです。ですが、好きな宿が多すぎてどうがんばっても10軒に絞れません!23軒ぐらいから減らせない……。 ですがひとたび「温泉地」について考えてみると……ああ私、温泉地には別にこだわりはないと思っていたけれど、気がつくとあの温泉には何度も行ってるなあ。泊まった宿も、お気に入りの1軒だけというわけじゃなく、何度もおとずれて何軒もの宿に泊まってるわ。つまりこの温泉地が好きなんだよな、と気がつきました。 そんな「よく考えると大好きだった」温泉地を</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89" data-gtm-click-label="entry-search-result-item-tag">観光</a></li> <li><a href="/q/%E5%AE%BF" data-gtm-click-label="entry-search-result-item-tag">宿</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/%22%20%E6%97%85%22" data-gtm-click-label="entry-search-result-item-tag"> 旅</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.yamaonsen.com/entry/favorite_area"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.yamaonsen.com/entry/favorite_area" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/8dd17ee9716656ce4ef7e5bd835c21016da23f98/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Ff750c4348a01ac7b0f57c372cb47f0dc0f997413%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fh%252Fhappydust%252F20211124%252F20211124233400.jpg" alt="私の好きな温泉地10選 気がつけば繰り返しおとずれていた大好きな温泉地 - 温泉ブログ 山と温泉のきろく" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://moneyforward-dev.jp/entry/2020/09/15/jwt/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://moneyforward-dev.jp/entry/2020/09/15/jwt/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fmoneyforward-dev.jp%2Fentry%2F2020%2F09%2F15%2Fjwt%2F" alt="">攻撃して学ぶJWT【ハンズオンあり】 - Money Forward Developers Blog </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/moneyforward-dev.jp/entry/2020/09/15/jwt/" class="js-keyboard-entry-page-openable" title="攻撃して学ぶJWT【ハンズオンあり】 - Money Forward Developers Blog (421 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 421 users </a> </span> </li> <li> <a href="/site/moneyforward-dev.jp/" title="『moneyforward-dev.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> moneyforward-dev.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/09/15</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは。 マネーフォワードの新卒Railsエンジニア、きなこ と申します。 マネーフォワードX という組織で、日々プロダクトの開発に勤しんでおります😊 突然ですが皆さんは JWT という技術をご存知でしょうか? 私は趣味でCTFというセキュリティコンテストに出場するのですが、最近ホットだと感じるのがJWTに関連する攻撃です。 今年の1月に初めてJWTを題材にした問題に遭遇し、その後JWTの出題頻度が強まっていると感じ、社内に向けてJWTにまつわる攻撃を通して学ぶための記事を書いたところ、たくさんの反応をいただきました。 今回の記事はその内容を社外向けにアレンジし、ハンズオンを通して実際にJWTを改竄し、受け取るAPIを攻撃することでJWT自体を学べるようにしたものです。 本記事はJWTに興味があるWeb開発者を想定していますが、そうでない方も楽しんでいただけるようにハンズオンを用意し</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/JWT" data-gtm-click-label="entry-search-result-item-tag">JWT</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">アルゴリズム</a></li> <li><a href="/q/JSON" data-gtm-click-label="entry-search-result-item-tag">JSON</a></li> <li><a href="/q/algorithm" data-gtm-click-label="entry-search-result-item-tag">algorithm</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/Auth" data-gtm-click-label="entry-search-result-item-tag">Auth</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://moneyforward-dev.jp/entry/2020/09/15/jwt/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://moneyforward-dev.jp/entry/2020/09/15/jwt/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/3f2829221131de9028ceb7e917e42ac19697c7f2/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fc3e5f6bc6f818c06c4361f328022921b726f0e6f%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fm%252FmoneyforwardDev%252F20230119%252F20230119181554.png" alt="攻撃して学ぶJWT【ハンズオンあり】 - Money Forward Developers Blog" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://scgajge12.hatenablog.com/entry/jwt_security"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://scgajge12.hatenablog.com/entry/jwt_security" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fscgajge12.hatenablog.com%2Fentry%2Fjwt_security" alt="">セキュリティ視点からの JWT 入門 - blog of morioka12 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/scgajge12.hatenablog.com/entry/jwt_security" class="js-keyboard-entry-page-openable" title="セキュリティ視点からの JWT 入門 - blog of morioka12 (410 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 410 users </a> </span> </li> <li> <a href="/site/scgajge12.hatenablog.com/" title="『scgajge12.hatenablog.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> scgajge12.hatenablog.com </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/10</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは、ISC 1年 IPFactory 所属の morioka12 です。 この記事は IPFactory Advent Calendar 2020 の10日目の分になります。 IPFactory という技術サークルについては、こちらを参照ください。 本記事の最後に記載されている余談でも IPFactory の詳細を紹介しています。 はてなブログに投稿しました #はてなブログ IPFactory Advent Calendar 2020 の10日目の記事を書きました#JWT #security セキュリティ視点からの JWT 入門 - blog of morioka12https://t.co/g1MYe77hAF — morioka12 (@scgajge12) 2020年12月10日 普段は Web Security や Cloud Security 、バグバウンティなどを興味分</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/JWT" data-gtm-click-label="entry-search-result-item-tag">JWT</a></li> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/json" data-gtm-click-label="entry-search-result-item-tag">json</a></li> <li><a href="/q/%E8%AA%8D%E8%A8%BC" data-gtm-click-label="entry-search-result-item-tag">認証</a></li> <li><a href="/q/algorithm" data-gtm-click-label="entry-search-result-item-tag">algorithm</a></li> <li><a href="/q/%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">アルゴリズム</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/authentication" data-gtm-click-label="entry-search-result-item-tag">authentication</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://scgajge12.hatenablog.com/entry/jwt_security"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://scgajge12.hatenablog.com/entry/jwt_security" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/06a15c64ba0ceec233d86d71001ebb29a9dcbf5d/height=288;version=1;width=512/https%3A%2F%2Fcdn.blog.st-hatena.com%2Fimages%2Ftheme%2Fog-image-1500.png" alt="セキュリティ視点からの JWT 入門 - blog of morioka12" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://ohbarye.hatenablog.jp/entry/2021/01/22/admin-feature-architecture-patterns"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://ohbarye.hatenablog.jp/entry/2021/01/22/admin-feature-architecture-patterns" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fohbarye.hatenablog.jp%2Fentry%2F2021%2F01%2F22%2Fadmin-feature-architecture-patterns" alt="">バックエンド Web API に管理画面/管理機能を追加するアーキテクチャパターン - valid,invalid </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/ohbarye.hatenablog.jp/entry/2021/01/22/admin-feature-architecture-patterns" class="js-keyboard-entry-page-openable" title="バックエンド Web API に管理画面/管理機能を追加するアーキテクチャパターン - valid,invalid (389 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 389 users </a> </span> </li> <li> <a href="/site/ohbarye.hatenablog.jp/" title="『ohbarye.hatenablog.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> ohbarye.hatenablog.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/01/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">プレゼンテーションレイヤ、いわゆるフロントエンドがクライアントサイドで実装・実行されるアーキテクチャ (注 1) において、管理画面/管理機能をあとから追加する際にどのような実装パターンがあるのかを整理してみます。 注 1: Presentation Domain Separation の実践の中でも、物理的にプレゼンテーションロジックとドメインロジックを分離しているアーキテクチャです。 用語の整理 プレゼンテーションレイヤ 三層アーキテクチャにおける、システムの利用者へユーザインターフェイスを提供する層です。本記事では"フロントエンド"とほぼ同義で使います。 OSI 参照モデルの第六層ではないです。 バックエンド Web API とは プレゼンテーションを持たない Web API (HTTP プロトコルを用いてネットワーク越しに呼び出すアプリケーション) とします。 プレゼンテーションレ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/api" data-gtm-click-label="entry-search-result-item-tag">api</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" data-gtm-click-label="entry-search-result-item-tag">アーキテクチャ</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/architecture" data-gtm-click-label="entry-search-result-item-tag">architecture</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/development" data-gtm-click-label="entry-search-result-item-tag">development</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/backend" data-gtm-click-label="entry-search-result-item-tag">backend</a></li> <li><a href="/q/%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">ソフトウェアデザイン</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://ohbarye.hatenablog.jp/entry/2021/01/22/admin-feature-architecture-patterns"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://ohbarye.hatenablog.jp/entry/2021/01/22/admin-feature-architecture-patterns" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a66d1407bf1b7645ad2082357b5eeec53aade463/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2Fb7391d4d7519e1557da5089afbbcda98ad56e295%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fi.imgur.com%252F7OlX6ZD.png" alt="バックエンド Web API に管理画面/管理機能を追加するアーキテクチャパターン - valid,invalid" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/MasanobuAkiba/items/6f2e02eceaded9664b14"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/MasanobuAkiba/items/6f2e02eceaded9664b14" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2FMasanobuAkiba%2Fitems%2F6f2e02eceaded9664b14" alt="">Angular と Firebase で月間 3.5億PV になった PWA の収益性改善とコストカット - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/MasanobuAkiba/items/6f2e02eceaded9664b14" class="js-keyboard-entry-page-openable" title="Angular と Firebase で月間 3.5億PV になった PWA の収益性改善とコストカット - Qiita (377 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 377 users </a> </span> </li> <li> <a href="/site/qiita.com/MasanobuAkiba" title="『qiita.com/MasanobuAkiba』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/MasanobuAkiba </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">と、振り返ってみると毎年綺麗に 300% 成長でこれていますね。 (流石に来年はきついと思います^^; 今回は、そんな サービスを拡大する上で欠かせない収益の話 と 成長したからこそ表面化したコストの話 をまとめていきたいと思います。 収益の話 参照:https://jp.freepik.com PWA は稼げない 昨年の Advent Calendar にて、私はたいそう嘆いておりました(TДT) Web 側の広告は MPA(マルチページアプリ)を前提にしているものがほとんど Web 側では広告の表示を最適化できない(MPA 前提の規約上バックグラウンドで読み込んでおけない それに加えて、SPA のページ遷移が早すぎて広告が表示される前に通過してしまう アプリ側にはインタースティシャル広告やリワード広告といった単価の高い広告商材が豊富に存在する そういった要因から、PWA におけるページ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/PWA" data-gtm-click-label="entry-search-result-item-tag">PWA</a></li> <li><a href="/q/firebase" data-gtm-click-label="entry-search-result-item-tag">firebase</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E5%BA%83%E5%91%8A" data-gtm-click-label="entry-search-result-item-tag">広告</a></li> <li><a href="/q/angular" data-gtm-click-label="entry-search-result-item-tag">angular</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/ad" data-gtm-click-label="entry-search-result-item-tag">ad</a></li> <li><a href="/q/%E3%83%9E%E3%83%BC%E3%82%B1%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">マーケティング</a></li> <li><a href="/q/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF" data-gtm-click-label="entry-search-result-item-tag">ネットワーク</a></li> <li><a href="/q/Qiita" data-gtm-click-label="entry-search-result-item-tag">Qiita</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/MasanobuAkiba/items/6f2e02eceaded9664b14"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/MasanobuAkiba/items/6f2e02eceaded9664b14" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/974498c8225f64e358ce632c34a6c26329899e41/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-7940cd1c8db80a7ec40711d90f43539e.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9QW5ndWxhciUyMCVFMyU4MSVBOCUyMEZpcmViYXNlJTIwJUUzJTgxJUE3JUU2JTlDJTg4JUU5JTk2JTkzJTIwMy41JUU1JTg0JTg0UFYlMjAlRTMlODElQUIlRTMlODElQUElRTMlODElQTMlRTMlODElOUYlMjBQV0ElMjAlRTMlODElQUUlRTUlOEYlOEUlRTclOUIlOEElRTYlODAlQTclRTYlOTQlQjklRTUlOTYlODQlRTMlODElQTglRTMlODIlQjMlRTMlODIlQjklRTMlODMlODglRTMlODIlQUIlRTMlODMlODMlRTMlODMlODgmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTg1MTVmM2EzNTY3OGExNjZlODhhMTJjOGEzODg1MTcz%26mark-x%3D120%26mark-y%3D96%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9OTcyJnR4dD0lNDBNYXNhbm9idUFraWJhJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1hYTQ5ODAxYmJiYmEwNzY2ZTYyZjcyZDEyYmQ1MTVjMA%26blend-x%3D120%26blend-y%3D500%26blend-mode%3Dnormal%26s%3D92a32cffeaeff42fb343273f3757a8b9" alt="Angular と Firebase で月間 3.5億PV になった PWA の収益性改善とコストカット - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/mizchi/articles/spa-engineers-history"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mizchi/articles/spa-engineers-history" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Fmizchi%2Farticles%2Fspa-engineers-history" alt="">フロントエンドとSPA職人の目指したものの歴史と概略 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mizchi/articles/spa-engineers-history" class="js-keyboard-entry-page-openable" title="フロントエンドとSPA職人の目指したものの歴史と概略 (375 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 375 users </a> </span> </li> <li> <a href="/site/zenn.dev/mizchi" title="『zenn.dev/mizchi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mizchi </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/01/06</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">年末年始にフロントエンド論みたいな記事をいくつか見たが、僕ら古のSPA職人がやってきたフロントエンドという職域と目指していたものが失伝しかけている気がするので、ここに時代ごとに何を考えていたか、雑に書き殴る。 注意点として、 2004から始まるが、自分がプログラミングを始めたのが2010, 業務としてコードを書き始めたのが 2012 なので、解像度が高いのはそれ以降になる。 tl;dr 2004: 動き出す HTML 2011: 構造化のはじまり 2015: 贅沢品としてのSPAとコミュニティ分化 2017: 貧者のSPA 2019: 守破離としてのパフォーマンス 2004: 動きだす HTML AJAX の時代。要は XMLHTTPRequest で取得したコンテンツに応じて、動的書き換えをDOM書き換えを行うこと。今では名付けるほどでもない操作だが、HTMLが静的なものをやめたことは、</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/%E6%AD%B4%E5%8F%B2" data-gtm-click-label="entry-search-result-item-tag">歴史</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mizchi/articles/spa-engineers-history"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/mizchi/articles/spa-engineers-history" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/99f0ab6084843c4507af1ab6cfd6140f4fddebd4/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--3QokxAzb--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252583%252595%2525E3%252583%2525AD%2525E3%252583%2525B3%2525E3%252583%252588%2525E3%252582%2525A8%2525E3%252583%2525B3%2525E3%252583%252589%2525E3%252581%2525A8SPA%2525E8%252581%2525B7%2525E4%2525BA%2525BA%2525E3%252581%2525AE%2525E7%25259B%2525AE%2525E6%25258C%252587%2525E3%252581%252597%2525E3%252581%25259F%2525E3%252582%252582%2525E3%252581%2525AE%2525E3%252581%2525AE%2525E6%2525AD%2525B4%2525E5%25258F%2525B2%2525E3%252581%2525A8%2525E6%2525A6%252582%2525E7%252595%2525A5%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Amizchi%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2liclRHT052Z3d3ay1fNGxlcVk4TGNGSlNuX0FoWnpEWVlKaXJNcWc9czI1MC1j%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="フロントエンドとSPA職人の目指したものの歴史と概略" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.yamaonsen.com/entry/favorite_inn"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.yamaonsen.com/entry/favorite_inn" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.yamaonsen.com%2Fentry%2Ffavorite_inn" alt="">私の好きな温泉宿10選 絶対再訪したい!極上湯の宿を10軒選びました - 温泉ブログ 山と温泉のきろく </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.yamaonsen.com/entry/favorite_inn" class="js-keyboard-entry-page-openable" title="私の好きな温泉宿10選 絶対再訪したい!極上湯の宿を10軒選びました - 温泉ブログ 山と温泉のきろく (371 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 371 users </a> </span> </li> <li> <a href="/site/www.yamaonsen.com/" title="『www.yamaonsen.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.yamaonsen.com </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2021/12/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">「再訪したい度5点満点」をつけた宿の中でも特に好きな10軒 先日、はてなブログ10周年特別お題キャンペーンに参加して「好きな温泉地10選」という記事を公開しました。 「好きな○○10選」というお題から書いた記事でしたが、私は「温泉地」よりも「温泉宿」に思い入れがあるタイプなので、最初は「好きな温泉宿10選」で書こう!と思っていたのです。ところが、好きな宿が多すぎてなかなか10軒に絞ることができないまま時間が過ぎてしまい「温泉地を10箇所選ぶほうが楽じゃないか!」と気づいたので、温泉地10選の記事を書き上げて公開しました。 お題キャンペーンは終わってしまいましたが、悩み抜いた末に「温泉宿10選」もピックアップできたので、せっかくだから公開しよう!と思い、この記事を書いています。 単純に「好きな宿」ということで考えると、20軒ぐらいから減らすことができず難儀しましたが、この記事では「ブログ(山</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E6%B8%A9%E6%B3%89" data-gtm-click-label="entry-search-result-item-tag">温泉</a></li> <li><a href="/q/%E6%97%85%E8%A1%8C" data-gtm-click-label="entry-search-result-item-tag">旅行</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/travel" data-gtm-click-label="entry-search-result-item-tag">travel</a></li> <li><a href="/q/%E6%97%85" data-gtm-click-label="entry-search-result-item-tag">旅</a></li> <li><a href="/q/%E8%A6%B3%E5%85%89%E3%82%B9%E3%83%9D%E3%83%83%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">観光スポット</a></li> <li><a href="/q/%E3%81%BE%E3%81%A8%E3%82%81" data-gtm-click-label="entry-search-result-item-tag">まとめ</a></li> <li><a href="/q/%E5%AE%BF" data-gtm-click-label="entry-search-result-item-tag">宿</a></li> <li><a href="/q/%E6%97%85%E9%A4%A8" data-gtm-click-label="entry-search-result-item-tag">旅館</a></li> <li><a href="/q/%E8%A1%8C%E3%81%8D%E3%81%9F%E3%81%84" data-gtm-click-label="entry-search-result-item-tag">行きたい</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.yamaonsen.com/entry/favorite_inn"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.yamaonsen.com/entry/favorite_inn" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/67e346786a152338b4188af8adf5bbcbe92e3a6b/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fh%2Fhappydust%2F20211217%2F20211217193204.jpg" alt="私の好きな温泉宿10選 絶対再訪したい!極上湯の宿を10軒選びました - 温泉ブログ 山と温泉のきろく" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://scrapbox.io/fsubal/%E6%9C%AC%E5%BD%93%E3%81%AB%E5%80%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF_jQuery_%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A0%E3%81%A3%E3%81%9F"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://scrapbox.io/fsubal/%E6%9C%AC%E5%BD%93%E3%81%AB%E5%80%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF_jQuery_%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A0%E3%81%A3%E3%81%9F" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fscrapbox.io%2Ffsubal%2F%25E6%259C%25AC%25E5%25BD%2593%25E3%2581%25AB%25E5%2580%2592%25E3%2581%2599%25E3%2581%25B9%25E3%2581%258D%25E3%2581%25A0%25E3%2581%25A3%25E3%2581%259F%25E3%2581%25AE%25E3%2581%25AF_jQuery_%25E3%2581%25A7%25E3%2581%25AF%25E3%2581%25AA%25E3%2581%258F%25E3%2583%2586%25E3%2583%25B3%25E3%2583%2597%25E3%2583%25AC%25E3%2583%25BC%25E3%2583%2588%25E3%2582%25A8%25E3%2583%25B3%25E3%2582%25B8%25E3%2583%25B3%25E3%2581%25A0%25E3%2581%25A3%25E3%2581%259F" alt="">本当に倒すべきだったのは jQuery ではなくテンプレートエンジンだった - fsubal </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/scrapbox.io/fsubal/%E6%9C%AC%E5%BD%93%E3%81%AB%E5%80%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF_jQuery_%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A0%E3%81%A3%E3%81%9F" class="js-keyboard-entry-page-openable" title="本当に倒すべきだったのは jQuery ではなくテンプレートエンジンだった - fsubal (361 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 361 users </a> </span> </li> <li> <a href="/site/scrapbox.io/fsubal/" title="『scrapbox.io/fsubal』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> scrapbox.io/fsubal </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/06/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">そうはっきり言ったほうが良かった。いや言わなくても伝わる現場は良かったんだけど、伝わらないままごく一部だけをコンポーネントに移行、それ以外はただ生 DOM API に変えて終わり(あるいは他は jQuery のまま)みたいな「モダン化」で済ます余地を与えたのは発信の失敗だった……という10年代の振り返り。 テンプレートエンジンはなぜ倒された方が(…といって悪ければ、変わったほうが)良いのかは端的に指摘できて、それは初回レンダリングしか考慮してないからだということになる。 Web の UI には状態変化がつきもの(になったのは実は最近の話)だが、テンプレートエンジンは1回目のレンダリングだけを担当し、変化した後の2回目以降の見え方は JavaScript が担当するというパラダイムを構成する。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/jquery" data-gtm-click-label="entry-search-result-item-tag">jquery</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">テンプレート</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/techfeed" data-gtm-click-label="entry-search-result-item-tag">techfeed</a></li> <li><a href="/q/PG" data-gtm-click-label="entry-search-result-item-tag">PG</a></li> <li><a href="/q/develop" data-gtm-click-label="entry-search-result-item-tag">develop</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://scrapbox.io/fsubal/%E6%9C%AC%E5%BD%93%E3%81%AB%E5%80%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF_jQuery_%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A0%E3%81%A3%E3%81%9F"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://scrapbox.io/fsubal/%E6%9C%AC%E5%BD%93%E3%81%AB%E5%80%92%E3%81%99%E3%81%B9%E3%81%8D%E3%81%A0%E3%81%A3%E3%81%9F%E3%81%AE%E3%81%AF_jQuery_%E3%81%A7%E3%81%AF%E3%81%AA%E3%81%8F%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%B3%E3%81%A0%E3%81%A3%E3%81%9F" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/d777b269771fcdc3ceef7e29a87190beed3dbf63/height=288;version=1;width=512/https%3A%2F%2Fscrapbox.io%2Fassets%2Fimg%2Fcontent-logo.png" alt="本当に倒すべきだったのは jQuery ではなくテンプレートエンジンだった - fsubal" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://liginc.co.jp/529890"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://liginc.co.jp/529890" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fliginc.co.jp%2F529890" alt="">たった数分で環境構築が完了!TypeScriptでWebアプリケーション開発ができるフレームワーク「frourio」が本当に手軽だった。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/liginc.co.jp/529890" class="js-keyboard-entry-page-openable" title="たった数分で環境構築が完了!TypeScriptでWebアプリケーション開発ができるフレームワーク「frourio」が本当に手軽だった。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作 (355 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 355 users </a> </span> </li> <li> <a href="/site/liginc.co.jp/" title="『liginc.co.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> liginc.co.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/12/15</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">たった数分で環境構築が完了!TypeScriptでWebアプリケーション開発ができるフレームワーク「frourio」が本当に手軽だった。 こんにちは、エンジニアのづやです。 突然ですがエンジニアのみなさん、TypeScriptに触れた経験はありますか? TypeScriptはGitHubが毎年発表しているランキングで今年4位に急上昇したくらい、もっともアツいプログラム言語の1つです。 出典:https://octoverse.github.com/ しかし、いざ試してみようと思っても、 フレームワークは何を使えば良い? どうやって導入したら良い? など、意外とハードルって高くないですか? そこで「frourio(フルーリオ)」という画期的なフレームワークを見つけました。こういうのってある程度経験を積んだエンジニアでないと使いこなせない……というケースも多いですよね。 でもfrourioはそ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF" data-gtm-click-label="entry-search-result-item-tag">フレームワーク</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/%E7%92%B0%E5%A2%83" data-gtm-click-label="entry-search-result-item-tag">環境</a></li> <li><a href="/q/framework" data-gtm-click-label="entry-search-result-item-tag">framework</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/node.js" data-gtm-click-label="entry-search-result-item-tag">node.js</a></li> <li><a href="/q/server" data-gtm-click-label="entry-search-result-item-tag">server</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://liginc.co.jp/529890"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://liginc.co.jp/529890" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/47bec27ed829556e93d5c3f39641eabd0e61a3c7/height=288;version=1;width=512/https%3A%2F%2Fliginc.co.jp%2Fwp-content%2Fuploads%2F2020%2F12%2Fec_201120_e_OGP-1.png" alt="たった数分で環境構築が完了!TypeScriptでWebアプリケーション開発ができるフレームワーク「frourio」が本当に手軽だった。 | 株式会社LIG(リグ)|DX支援・システム開発・Web制作" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://zenn.dev/txxm/articles/f04b21949ddab3"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/txxm/articles/f04b21949ddab3" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fzenn.dev%2Ftxxm%2Farticles%2Ff04b21949ddab3" alt="">【レンダリング大全】CSR, SSR, SPA, MPA, PPRの意味、そもそもレンダリングとは【2025年始】 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/txxm/articles/f04b21949ddab3" class="js-keyboard-entry-page-openable" title="【レンダリング大全】CSR, SSR, SPA, MPA, PPRの意味、そもそもレンダリングとは【2025年始】 (351 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 351 users </a> </span> </li> <li> <a href="/site/zenn.dev/txxm" title="『zenn.dev/txxm』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/txxm </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2025/01/12</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに フロントエンド開発 においてレンダリングという言葉はさまざまな場面で登場します。さらに、Server-Side Rendering(SSR)のように「レンダリング」という言葉が名前に含まれているものを含め、Single-Page Application(SPA)など、レンダリングに関連した議論でよく使われる用語も数多く存在します。 そして、これらの用語の意味はフロントエンドの技術の進化に伴い、徐々にニュアンスが変化してきているように感じています。 他のエンジニアとこれらの用語について話す中で、「自分はそれをSSRとは呼ばない」「SPAにはいくつかの意味があるよね」といった意見を耳にし、人によって解釈が異なることを実感しました。 では SSR や SPAなどといった用語は今日どういった意味で使われているのでしょう。そもそも、「レンダリング」とはどういう意味なのでしょうか。SSR に</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/SSR" data-gtm-click-label="entry-search-result-item-tag">SSR</a></li> <li><a href="/q/rendering" data-gtm-click-label="entry-search-result-item-tag">rendering</a></li> <li><a href="/q/development" data-gtm-click-label="entry-search-result-item-tag">development</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/txxm/articles/f04b21949ddab3"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://zenn.dev/txxm/articles/f04b21949ddab3" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2a4d0bff6ec2f5fd8f58e78d2baa2b9e3e75ea39/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--pUwGNcRv--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E3%252580%252590%2525E3%252583%2525AC%2525E3%252583%2525B3%2525E3%252583%252580%2525E3%252583%2525AA%2525E3%252583%2525B3%2525E3%252582%2525B0%2525E5%2525A4%2525A7%2525E5%252585%2525A8%2525E3%252580%252591CSR%25252C%252520SSR%25252C%252520SPA%25252C%252520MPA%25252C%252520PPR%2525E3%252581%2525AE%2525E6%252584%25258F%2525E5%252591%2525B3%2525E3%252580%252581%2525E3%252581%25259D%2525E3%252582%252582%2525E3%252581%25259D%2525E3%252582%252582%2525E3%252583%2525AC%2525E3%252583%2525B3%2525E3%252583%252580%2525E3%252583%2525AA%2525E3%252583%2525B3%2525E3%252582%2525B0%2525E3%252581%2525A8%2525E3%252581%2525AF%2525E3%252580%2525902025%2525E5%2525B9%2525B4%2525E5%2525A7%25258B%2525E3%252580%252591%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252582%2525A8%2525E3%252583%252593%2525E3%252583%252595%2525E3%252583%2525A9%2525E3%252582%2525A4%2525E3%252581%2525AE%2525E9%252580%252586%2525E8%2525A5%2525B2%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzVlOWEyMzM1NmEuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="【レンダリング大全】CSR, SSR, SPA, MPA, PPRの意味、そもそもレンダリングとは【2025年始】" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://nikkan-spa.jp/1998201"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://nikkan-spa.jp/1998201" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fnikkan-spa.jp%2F1998201" alt="">巷のインドカレー屋が急増する“悲しい裏事情”。日本向けにローカライズされた魔改造ナンも | 日刊SPA! </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/nikkan-spa.jp/1998201" class="js-keyboard-entry-page-openable" title="巷のインドカレー屋が急増する“悲しい裏事情”。日本向けにローカライズされた魔改造ナンも | 日刊SPA! (344 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 344 users </a> </span> </li> <li> <a href="/site/nikkan-spa.jp/" title="『nikkan-spa.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> nikkan-spa.jp </a> </li> <li> <a href="/hotentry/life" data-gtm-click-label="entry-search-result-item-category">暮らし</a> </li> <li><span class="entry-contents-date">2024/05/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">そもそも、なぜインドカレー屋は日本中に存在するのか? 素朴な疑問の答えを徹底的に追求した1冊の本『カレー移民の謎 日本を制覇する「インネパ」』が話題を呼んでいる。著者の室橋裕和さんに話をうかがうと、そこにはインドカレー屋の知られざる裏事情と悲しい現実が見えてきた。 日本各地に存在するインドカレー店はネパール人が経営していることがほとんどだと、室橋さんの著書のなかにはあった。その理由は? 「もちろんインド人がやっているところもあるんですが、大半はネパール人です。ネパール人経営のインドカレー店は“インネパ”とも呼ばれ、日本のいたるところにあります。そもそもの理由は外食産業がネパール人の出稼ぎの手段になっていて、インドでコックとして働いてきたネパール人が、さらに大きなお金を稼ぐために日本へ渡ってくる動きが広がったのです」 とはいえ、日本にやって来るのも簡単な話ではない。店を出すのにも多額の資金が</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%AB%E3%83%AC%E3%83%BC" data-gtm-click-label="entry-search-result-item-tag">カレー</a></li> <li><a href="/q/%E3%82%A4%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">インド</a></li> <li><a href="/q/%E9%A3%9F" data-gtm-click-label="entry-search-result-item-tag">食</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%8D%E3%83%91%E3%83%BC%E3%83%AB" data-gtm-click-label="entry-search-result-item-tag">ネパール</a></li> <li><a href="/q/%E6%97%A5%E6%9C%AC" data-gtm-click-label="entry-search-result-item-tag">日本</a></li> <li><a href="/q/%E7%A7%BB%E6%B0%91" data-gtm-click-label="entry-search-result-item-tag">移民</a></li> <li><a href="/q/%E7%A4%BE%E4%BC%9A" data-gtm-click-label="entry-search-result-item-tag">社会</a></li> <li><a href="/q/curry" data-gtm-click-label="entry-search-result-item-tag">curry</a></li> <li><a href="/q/%E5%8A%B4%E5%83%8D" data-gtm-click-label="entry-search-result-item-tag">労働</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://nikkan-spa.jp/1998201"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://nikkan-spa.jp/1998201" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/f2976c23089253feebdc8c8276eff07f0691a560/height=288;version=1;width=512/https%3A%2F%2Fnikkan-spa.jp%2Fwp-content%2Fuploads%2F2024%2F05%2Fmakaizo-naan.jpg" alt="巷のインドカレー屋が急増する“悲しい裏事情”。日本向けにローカライズされた魔改造ナンも | 日刊SPA!" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.publickey1.jp/blog/23/webssrdenoisomorphic_javascriptuniversal_javascript.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.publickey1.jp/blog/23/webssrdenoisomorphic_javascriptuniversal_javascript.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.publickey1.jp%2Fblog%2F23%2Fwebssrdenoisomorphic_javascriptuniversal_javascript.html" alt="">Webの将来はサーバサイドレンダリング(SSR)に回帰していく。Denoが主張するIsomorphic JavaScript(もしくはUniversal JavaScript)とは何か? </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.publickey1.jp/blog/23/webssrdenoisomorphic_javascriptuniversal_javascript.html" class="js-keyboard-entry-page-openable" title="Webの将来はサーバサイドレンダリング(SSR)に回帰していく。Denoが主張するIsomorphic JavaScript(もしくはUniversal JavaScript)とは何か? (339 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 339 users </a> </span> </li> <li> <a href="/site/www.publickey1.jp/" title="『www.publickey1.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.publickey1.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2023/02/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Webの将来はサーバサイドレンダリング(SSR)に回帰していく。Denoが主張するIsomorphic JavaScript(もしくはUniversal JavaScript)とは何か? 静的なHTMLファイルをWebサーバが配信する仕組みから始まったWebは、サーバ側で動的にHTMLを生成するCGIの仕組みや、Webブラウザ上でJavaScriptを実行してインタラクティブな操作を実現するなどの仕組みを得たことでWebアプリケーション基盤へと発展しています。 現在、Webアプリケーションの仕組みとして代表的なものがSPA(Single Page Application)でしょう。 SPAはWebブラウザ上で多くの処理が行われるためユーザーの操作に対する反応が速く、インタラクティブ性の高い快適なWebアプリケーションを実現できる利点があります。 しかし、これからのWebはサーバサイドレンダ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/deno" data-gtm-click-label="entry-search-result-item-tag">deno</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/JavaScript%E3%83%A9%E3%83%B3%E3%82%BF%E3%82%A4%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">JavaScriptランタイム</a></li> <li><a href="/q/SSR" data-gtm-click-label="entry-search-result-item-tag">SSR</a></li> <li><a href="/q/Node.js" data-gtm-click-label="entry-search-result-item-tag">Node.js</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%82%B5%E3%83%BC%E3%83%90" data-gtm-click-label="entry-search-result-item-tag">サーバ</a></li> <li><a href="/q/techfeed" data-gtm-click-label="entry-search-result-item-tag">techfeed</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.publickey1.jp/blog/23/webssrdenoisomorphic_javascriptuniversal_javascript.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.publickey1.jp/blog/23/webssrdenoisomorphic_javascriptuniversal_javascript.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/901fb3bebdd09b291ffde091304bd7af083ae0bf/height=288;version=1;width=512/https%3A%2F%2Fwww.publickey1.jp%2F2023%2F1uUM3zku.jpg" alt="Webの将来はサーバサイドレンダリング(SSR)に回帰していく。Denoが主張するIsomorphic JavaScript(もしくはUniversal JavaScript)とは何か?" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://oida.dev/typescript-react-component-patterns/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://oida.dev/typescript-react-component-patterns/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Foida.dev%2Ftypescript-react-component-patterns%2F" alt="">TypeScript + React: Component patterns </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/oida.dev/typescript-react-component-patterns/" class="js-keyboard-entry-page-openable" title="TypeScript + React: Component patterns (335 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 335 users </a> </span> </li> <li> <a href="/site/oida.dev/" title="『oida.dev』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> oida.dev </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/07/30</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">This list is a collection of component patterns for React when working with TypeScript. See them as an extension to the TypeScript + React Guide that deals with overall concepts and types. This list has been heavily inspired by chantastic’s original React patterns list. Contrary to chantastic’s guide I use mainly modern-day React, so function components and – if necessary – hooks. I also focus exc</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/react.js" data-gtm-click-label="entry-search-result-item-tag">react.js</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/techfeed" data-gtm-click-label="entry-search-result-item-tag">techfeed</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://oida.dev/typescript-react-component-patterns/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://oida.dev/typescript-react-component-patterns/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2512fb81461d5c64e28f51aa8117d9c07e2671fe/height=288;version=1;width=512/https%3A%2F%2Foida.dev%2Fteasers%2Ftypescript-react-component-patterns.jpg" alt="TypeScript + React: Component patterns" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation/" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fazukiazusa.dev%2Fblog%2Fdo-not-compromise-html-functionality-in-your-web-front-end-implementation%2F" alt="">Web フロントエンドの実装において本来の機能を損なってはいけない </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation/" class="js-keyboard-entry-page-openable" title="Web フロントエンドの実装において本来の機能を損なってはいけない (312 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 312 users </a> </span> </li> <li> <a href="/site/azukiazusa.dev/" title="『azukiazusa.dev』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> azukiazusa.dev </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/12/25</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Web フロントエンドの実装において本来の機能を損なってはいけない データの取得・ルーティング・フォームの値の管理に至るまで JavaScript で制御するようになった結果、本来備わっていた機能を損なう形で実装されるような間違いが起きるケースも発生してしまいました。見た目上操作に不都合がないのですが、修飾キーが有効でなかったりと、とある要素が当然に持っているべき機能が失われていることがよくあります。 昨今の Web フロントエンドの開発においては、React や Vue.js などを利用した SPA を採用することが多くなりました。従来の MPA と比較して、リンククリック時やフォーム送信時にページリロードを挟まないので、高速な画面遷移を実現できるため、快適な操作を実現できます。 一方データの取得・ルーティング・フォームの値の管理に至るまで JavaScript で制御するようになった結</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/accessibility" data-gtm-click-label="entry-search-result-item-tag">accessibility</a></li> <li><a href="/q/%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B7%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">アクセシビリティ</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/HTML" data-gtm-click-label="entry-search-result-item-tag">HTML</a></li> <li><a href="/q/spa" data-gtm-click-label="entry-search-result-item-tag">spa</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation/"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://azukiazusa.dev/blog/do-not-compromise-html-functionality-in-your-web-front-end-implementation/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9460aa524de3b8636469642015d89f22de30c2fe/height=288;version=1;width=512/https%3A%2F%2Fazukiazusa.dev%2Fblog%2Fogp%2Fdo-not-compromise-html-functionality-in-your-web-front-end-implementation.png" alt="Web フロントエンドの実装において本来の機能を損なってはいけない" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://qiita.com/tsmd/items/0d07feb8e02cfa213cc4"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/tsmd/items/0d07feb8e02cfa213cc4" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fqiita.com%2Ftsmd%2Fitems%2F0d07feb8e02cfa213cc4" alt="">htmxとは何なのか? その背景にある思想について - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/tsmd/items/0d07feb8e02cfa213cc4" class="js-keyboard-entry-page-openable" title="htmxとは何なのか? その背景にある思想について - Qiita (307 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 307 users </a> </span> </li> <li> <a href="/site/qiita.com/tsmd" title="『qiita.com/tsmd』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/tsmd </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2024/01/23</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">このアンカータグはブラウザーに次のように指示します: ユーザーがこのリンクをクリックしたら、'/blog'にHTTP GETリクエストを発行し、レスポンスの内容をブラウザーのウィンドウに読み込みます。 これを踏まえて、次のようなHTMLの例を考えてみましょう: これはhtmxに次のように指示します: ユーザーがこのボタンをクリックしたら、'/clicked' にHTTP POSTリクエストを発行し、レスポンスの内容を使ってDOM内のid parent-div の要素を置き換える。 htmxは、ハイパーテキストとしてのHTMLの核となる考え方を拡張・一般化し、言語内で直接多くの可能性を開きます: アンカーやフォームだけでなく、どんな要素でもHTTPリクエストを発行できるようになります クリックやフォーム送信だけでなく、どのようなイベントでもリクエストをトリガーできるようになります GET や</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/htmx" data-gtm-click-label="entry-search-result-item-tag">htmx</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/html" data-gtm-click-label="entry-search-result-item-tag">html</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0" data-gtm-click-label="entry-search-result-item-tag">プログラミング</a></li> <li><a href="/q/%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" data-gtm-click-label="entry-search-result-item-tag">アーキテクチャ</a></li> <li><a href="/q/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/tsmd/items/0d07feb8e02cfa213cc4"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://qiita.com/tsmd/items/0d07feb8e02cfa213cc4" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/940060acdfbc0b59d42de0e549d00d108f977cd5/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9aHRteCVFMyU4MSVBOCVFMyU4MSVBRiVFNCVCRCU5NSVFMyU4MSVBQSVFMyU4MSVBRSVFMyU4MSU4QiVFRiVCQyU5RiUyMCVFMyU4MSU5RCVFMyU4MSVBRSVFOCU4MyU4QyVFNiU5OSVBRiVFMyU4MSVBQiVFMyU4MSU4MiVFMyU4MiU4QiVFNiU4MCU5RCVFNiU4MyVCMyVFMyU4MSVBQiVFMyU4MSVBNCVFMyU4MSU4NCVFMyU4MSVBNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9ODRkNWE0NDQ3MGFlYzc1YWY5YjBjYjUwZjg5ZDA2MGU%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB0c21kJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz1iMGUxMDk5ZjA0Yzg3YmU1NzNlODZjMGNlYmExZGY5Nw%26blend-x%3D142%26blend-y%3D436%26blend-mode%3Dnormal%26txt64%3DaW4g5qCq5byP5Lya56S-TElGVUxM%26txt-width%3D770%26txt-clip%3Dend%252Cellipsis%26txt-color%3D%25231E2121%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D36%26txt-x%3D156%26txt-y%3D536%26s%3D958b9cff6746f6b70dba83e5d07fa481" alt="htmxとは何なのか? その背景にある思想について - Qiita" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://www.publickey1.jp/blog/21/cloudflare_pagesjamwebcdn.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.publickey1.jp/blog/21/cloudflare_pagesjamwebcdn.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.publickey1.jp%2Fblog%2F21%2Fcloudflare_pagesjamwebcdn.html" alt="">「Cloudflare Pages」が正式版に。JAMスタックによる高速なWebサイトを構築、CDNに展開へ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.publickey1.jp/blog/21/cloudflare_pagesjamwebcdn.html" class="js-keyboard-entry-page-openable" title="「Cloudflare Pages」が正式版に。JAMスタックによる高速なWebサイトを構築、CDNに展開へ (305 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 305 users </a> </span> </li> <li> <a href="/site/www.publickey1.jp/" title="『www.publickey1.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.publickey1.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/04/14</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Cloudflareは、JAMスタックを用いてWebサイトを構築する新サービス「Cloudflare Pages」が正式版として提供開始されたことを発表しました。 JAMスタックによるWebサイトの構築とは JAMスタックとは、JavaScript、API、Markup Language(HTML)を主な構成要素としてWebサイトを構築する手法を指します。 WordPressに代表される多くのCMSでは、ユーザーからのリクエストに反応して動的にHTMLが生成されることで、動的なWebサイトを実現しています。この場合、HTMLの生成に一定の時間がかかるため高速なWebサイトの構築が容易ではないこと、サーバへの負荷によりスケーラブルなWebサイトの構築も容易でないことなどが課題です。 JAMスタックでは、HTMLの生成はWebサイトの生成時に行うことで、基本的には静的なWebサイトと同様の高速</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/cdn" data-gtm-click-label="entry-search-result-item-tag">cdn</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/cloudflare" data-gtm-click-label="entry-search-result-item-tag">cloudflare</a></li> <li><a href="/q/jamstack" data-gtm-click-label="entry-search-result-item-tag">jamstack</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/web%E5%88%B6%E4%BD%9C" data-gtm-click-label="entry-search-result-item-tag">web制作</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/publickey" data-gtm-click-label="entry-search-result-item-tag">publickey</a></li> <li><a href="/q/GitHub" data-gtm-click-label="entry-search-result-item-tag">GitHub</a></li> <li><a href="/q/web%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">webサービス</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.publickey1.jp/blog/21/cloudflare_pagesjamwebcdn.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://www.publickey1.jp/blog/21/cloudflare_pagesjamwebcdn.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/3d442a1bc3c462f8b2dc701800230b22d9a72780/height=288;version=1;width=512/https%3A%2F%2Fwww.publickey1.jp%2F2021%2Fcloudflarepages_ga01.gif" alt="「Cloudflare Pages」が正式版に。JAMスタックによる高速なWebサイトを構築、CDNに展開へ" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://speakerdeck.com/tmizuma/hurontoentoensiniafalsetamefalseawsakitekutiya"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/tmizuma/hurontoentoensiniafalsetamefalseawsakitekutiya" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fspeakerdeck.com%2Ftmizuma%2Fhurontoentoensiniafalsetamefalseawsakitekutiya" alt="">フロントエンドエンジニアのためのAWSアーキテクチャ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/tmizuma/hurontoentoensiniafalsetamefalseawsakitekutiya" class="js-keyboard-entry-page-openable" title="フロントエンドエンジニアのためのAWSアーキテクチャ (303 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 303 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/tmizuma" title="『speakerdeck.com/tmizuma』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/tmizuma </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2020/10/21</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Talked at "AWS Dev Day Online Japan" 2020.</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/aws" data-gtm-click-label="entry-search-result-item-tag">aws</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81%E3%83%A3" data-gtm-click-label="entry-search-result-item-tag">アーキテクチャ</a></li> <li><a href="/q/amazon" data-gtm-click-label="entry-search-result-item-tag">amazon</a></li> <li><a href="/q/slide" data-gtm-click-label="entry-search-result-item-tag">slide</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/Amplify" data-gtm-click-label="entry-search-result-item-tag">Amplify</a></li> <li><a href="/q/serverless" data-gtm-click-label="entry-search-result-item-tag">serverless</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/tmizuma/hurontoentoensiniafalsetamefalseawsakitekutiya"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://speakerdeck.com/tmizuma/hurontoentoensiniafalsetamefalseawsakitekutiya" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/36bb180642b4dc40fae78c04e3a1bb4a38dd59a8/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F3c4c0e5d90d74e548fdc3c7d39941487%2Fslide_0.jpg%3F16529552" alt="フロントエンドエンジニアのためのAWSアーキテクチャ" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://fortee.jp/phpcon-2021/proposal/2bcd3065-ef89-4b2d-96ec-bd5163257cef"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://fortee.jp/phpcon-2021/proposal/2bcd3065-ef89-4b2d-96ec-bd5163257cef" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Ffortee.jp%2Fphpcon-2021%2Fproposal%2F2bcd3065-ef89-4b2d-96ec-bd5163257cef" alt="">SPAセキュリティ入門 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/fortee.jp/phpcon-2021/proposal/2bcd3065-ef89-4b2d-96ec-bd5163257cef" class="js-keyboard-entry-page-openable" title="SPAセキュリティ入門 (302 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 302 users </a> </span> </li> <li> <a href="/site/fortee.jp/" title="『fortee.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> fortee.jp </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2021/09/08</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">シングルページアプリケーション(SPA)において、セッションIDやトークンの格納場所はCookieあるいはlocalStorageのいずれが良いのかなど、セキュリティ上の課題がネット上で議論されていますが、残念ながら間違った前提に基づくものが多いようです。このトークでは、SPAのセキュリティを構成する基礎技術を説明した後、著名なフレームワークな状況とエンジニアの技術理解の現状を踏まえ、SPAセキュリティの現実的な方法について説明します。 Discord Channel: #track1-8-spa-security</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3" data-gtm-click-label="entry-search-result-item-tag">セキュリティ</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/php" data-gtm-click-label="entry-search-result-item-tag">php</a></li> <li><a href="/q/%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">エンジニア</a></li> <li><a href="/q/Cookie" data-gtm-click-label="entry-search-result-item-tag">Cookie</a></li> <li><a href="/q/%E5%85%A5%E9%96%80" data-gtm-click-label="entry-search-result-item-tag">入門</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://fortee.jp/phpcon-2021/proposal/2bcd3065-ef89-4b2d-96ec-bd5163257cef"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://fortee.jp/phpcon-2021/proposal/2bcd3065-ef89-4b2d-96ec-bd5163257cef" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/207ce13d3cd292998989e64363b73357f96a9a1a/height=288;version=1;width=512/https%3A%2F%2Ffortee.jp%2Fphpcon-2021%2Fproposal%2Fog-image%2F2bcd3065-ef89-4b2d-96ec-bd5163257cef.png" alt="SPAセキュリティ入門" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://speakerdeck.com/keiya01/ririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/keiya01/ririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fspeakerdeck.com%2Fkeiya01%2Fririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u" alt="">リリースから5年、Webフロントエンドの経年劣化と向き合う </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/keiya01/ririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u" class="js-keyboard-entry-page-openable" title="リリースから5年、Webフロントエンドの経年劣化と向き合う (284 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 284 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/keiya01" title="『speakerdeck.com/keiya01』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/keiya01 </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/10/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">@herablog さん、@shunke07 さんと共に Muddy Web #3 で発表した資料です。 https://cyberagent.connpass.com/event/261115/ news.ameba.jpは5年前にデスクトップ版ではReact化、モバイル版ではAMP化が行われ…</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</a></li> <li><a href="/q/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/slide" data-gtm-click-label="entry-search-result-item-tag">slide</a></li> <li><a href="/q/%E6%8A%80%E8%A1%93" data-gtm-click-label="entry-search-result-item-tag">技術</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/keiya01/ririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://speakerdeck.com/keiya01/ririsukara5nian-webhurontoendonojing-nian-lie-hua-toxiang-kihe-u" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4bd167e6625d956bcd77c7f2e0ce1e840a03e3c2/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F89f5068d782846ca90c66f3dad48f5f8%2Fslide_0.jpg%3F22992335" alt="リリースから5年、Webフロントエンドの経年劣化と向き合う" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> <li class="bookmark-item js-user-bookmark-item js-keyboard-selectable-item"> <div class="centerarticle-entry is-image-entry-unit"> <div class="js-bookmark-stock-button is-hidden"> <button class="js-bookmark-stock-button-ready readlater-button" data-gtm-click-label="entry-search-result-item-stock-button" title="あとで読む" aria-label="あとで読む" tabindex="0" type="button" data-href="https://blog.jxck.io/entries/2022-04-22/navigation-api.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://blog.jxck.io/entries/2022-04-22/navigation-api.html" class="js-clickable-link js-keyboard-openable" target="_blank" rel="noopener" data-gtm-click-label="entry-search-result-item-title"> <img class="centerarticle-entry-favicon" src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fblog.jxck.io%2Fentries%2F2022-04-22%2Fnavigation-api.html" alt="">Navigation API による「JS での画面遷移」と SPA の改善 | blog.jxck.io </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/blog.jxck.io/entries/2022-04-22/navigation-api.html" class="js-keyboard-entry-page-openable" title="Navigation API による「JS での画面遷移」と SPA の改善 | blog.jxck.io (280 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 280 users </a> </span> </li> <li> <a href="/site/blog.jxck.io/" title="『blog.jxck.io』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> blog.jxck.io </a> </li> <li> <a href="/hotentry/it" data-gtm-click-label="entry-search-result-item-category">テクノロジー</a> </li> <li><span class="entry-contents-date">2022/04/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Intro 従来の History API を改善する Navigation API の仕様策定と実装が進んでいる。 これは、 History API の使いにくかった部分を補うだけではなく、「JS で画面遷移をする」という現状のミッシングピースに取り組み、 SPA が抱える多くの問題だけでなく MPA すら改善する可能性がある。 この API の目的と仕様を解説しつつ、実装のメモを残す。 画面遷移と SPA の軌跡 Web は HTML の取得と描画を繰り返す、画面遷移(Navigation)を前提としたアーキテクチャ(のちに SPA からの逆算で MPA と呼ばれる)が基本であり、ブラウザなどの実装もそれに最適化されている。 一方「アプリケーション」の設計手法をそのまま Web に持ち込んだ SPA は、この Navigation によってもたらされる UX の低下を防ぐ部分がある一方</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/SPA" data-gtm-click-label="entry-search-result-item-tag">SPA</a></li> <li><a href="/q/%E3%81%82%E3%81%A8%E3%81%A7%E8%AA%AD%E3%82%80" data-gtm-click-label="entry-search-result-item-tag">あとで読む</a></li> <li><a href="/q/api" data-gtm-click-label="entry-search-result-item-tag">api</a></li> <li><a href="/q/browser" data-gtm-click-label="entry-search-result-item-tag">browser</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</a></li> <li><a href="/q/web" data-gtm-click-label="entry-search-result-item-tag">web</a></li> <li><a href="/q/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6" data-gtm-click-label="entry-search-result-item-tag">ブラウザ</a></li> <li><a href="/q/%E3%83%95%E3%83%AD%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">フロントエンド</a></li> <li><a href="/q/API%E3%82%A8%E3%82%B3%E3%83%8E%E3%83%9F%E3%83%BC" data-gtm-click-label="entry-search-result-item-tag">APIエコノミー</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://blog.jxck.io/entries/2022-04-22/navigation-api.html"> <ul class="following-bookmarks js-following-bookmarks"></ul> <script type="text/x-template" id="template-following-bookmark"> <li> <a href="{{ anchor_path }}" class="following-bookmark-link" data-gtm-label="entry-info-followingBookmarks"> <img src="{{ profile_image_url }}" alt="{{ user_name }}" class="following-bookmark-icon"> </a> <span class="following-bookmark-popup"> <span class="following-bookmark-username">{{ user_name }}</span><span class="following-bookmark-timestamp">{{ created }}</span> <span class="following-bookmark-text"> {{ #comment }}<span class="following-bookmark-comment">{{ comment }}</span>{{ /comment }} <ul class="following-bookmark-tags">{{ #tags }}<li>{{ label }}</li>{{ /tags }}</ul> </span> </span> </li> </script> </div> </div> <div class="centerarticle-entry-image-wrapper"> <a href="https://blog.jxck.io/entries/2022-04-22/navigation-api.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/25f705929f7e98ea08f049f3c57b5de57a1b3ba0/height=288;version=1;width=512/https%3A%2F%2Fblog.jxck.io%2Fassets%2Fimg%2Fjxck.600x600.png" alt="Navigation API による「JS での画面遷移」と SPA の改善 | blog.jxck.io" data-gtm-click-label="entry-search-result-item-image"> </a> </div> </div> </div> </li> </ul> <div class="centerarticle-pager "> <span>1</span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=2" class="js-keyboard-openable">2</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=3" class="js-keyboard-openable">3</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=4" class="js-keyboard-openable">4</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=5" class="js-keyboard-openable">5</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=6" class="js-keyboard-openable">6</a></span> <span class="centerarticle-pager-next js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/SPA?page=2" class="js-keyboard-openable">次のページ</a></span> </div> </div> <ins id="entrysearch-ad-rectangle-middle-sp" class="entrylist-ad-sp-fluid for-sp"></ins> <div id="entrysearch-ad-rectangle-bottom-sp" class="touch-ad-rectangle"></div> </div> <div class="entry-wrapper"> <section class="entry-group"> <h2 class="entry-group-sectionTitle">新着記事</h2> <ul class="entry-group-list"> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/yuuka0.px.ebb.jp/?p=79" title="熊木章人 ぷーさん式トレンドフォロー手法トレードマニュアル輝 評判 口コミ" data-gtm-label="entry-recentEntriesInEntrySearch-title">熊木章人 ぷーさん式トレンドフォロー手法トレードマニュアル輝 評判 口コミ</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/yuuka0.px.ebb.jp/?p=79" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/yuuka0.px.ebb.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=http%3A%2F%2Fyuuka0.px.ebb.jp%2F%3Fp%3D79" alt="">yuuka0.px.ebb.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/news.goo.ne.jp/article/nikkangeinou/entertainment/f-et-tp0-250406-202504060000393.html" title="へずまりゅう、石破首相に“説教”「あなたが今やるべきことは…」「元迷惑系の自分でも分かる」" data-gtm-label="entry-recentEntriesInEntrySearch-title">へずまりゅう、石破首相に“説教”「あなたが今やるべきことは…」「元迷惑系の自分でも分かる」</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/news.goo.ne.jp/article/nikkangeinou/entertainment/f-et-tp0-250406-202504060000393.html" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/news.goo.ne.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fnews.goo.ne.jp%2Farticle%2Fnikkangeinou%2Fentertainment%2Ff-et-tp0-250406-202504060000393.html" alt="">news.goo.ne.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/news.yahoo.co.jp/articles/d7d01b9008e0bec290230b806e6359bd63c7463e" title="48人分の個人情報を紛失 民生委員に貸与の名簿 埼玉・春日部 書類整理の時に誤って廃棄か 市は対象者に説明し、謝罪(埼玉新聞) - Yahoo!ニュース" data-gtm-label="entry-recentEntriesInEntrySearch-title">48人分の個人情報を紛失 民生委員に貸与の名簿 埼玉・春日部 書類整理の時に誤って廃棄か 市は対象者に説明し、謝罪(埼玉新聞) - Yahoo!ニュース</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/news.yahoo.co.jp/articles/d7d01b9008e0bec290230b806e6359bd63c7463e" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/news.yahoo.co.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fnews.yahoo.co.jp%2Farticles%2Fd7d01b9008e0bec290230b806e6359bd63c7463e" alt="">news.yahoo.co.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/www.ne.jp/asahi/takeyama/a.a/" title="竹山建築設計事務所" data-gtm-label="entry-recentEntriesInEntrySearch-title">竹山建築設計事務所</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/www.ne.jp/asahi/takeyama/a.a/" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/www.ne.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.ne.jp%2Fasahi%2Ftakeyama%2Fa.a%2F" alt="">www.ne.jp</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/www.asahi.com/articles/AST434J3BT43TLVB002M.html" title="生活保護世帯の中学生らの氏名、市HPで確認可能に 熊本市がミス:朝日新聞" data-gtm-label="entry-recentEntriesInEntrySearch-title">生活保護世帯の中学生らの氏名、市HPで確認可能に 熊本市がミス:朝日新聞</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/www.asahi.com/articles/AST434J3BT43TLVB002M.html" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/www.asahi.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fwww.asahi.com%2Farticles%2FAST434J3BT43TLVB002M.html" alt="">www.asahi.com</a></span></p> </div> </div> </li> <li> <div class="entry-group-list-inner"> <div class="entry-group-text"> <h3 class="entry-group-title"><a href="/entry/s/bandai-hobby.net/item/01_5931/" title="HG 1/144 軍警ザク|バンダイ ホビーサイト" data-gtm-label="entry-recentEntriesInEntrySearch-title">HG 1/144 軍警ザク|バンダイ ホビーサイト</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/bandai-hobby.net/item/01_5931/" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/bandai-hobby.net/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fbandai-hobby.net%2Fitem%2F01_5931%2F" alt="">bandai-hobby.net</a></span></p> </div> </div> </li> </ul> </section> </div> </div> <div id="keyboard-shortcut-help" class="shortcut-help is-hidden"> <h3 class="shortcut-help-title">キーボードショートカット一覧</h3> <p><span class="shortcut-help-key">j</span>次のブックマーク</p> <p><span class="shortcut-help-key">k</span>前のブックマーク</p> <p><span class="shortcut-help-key">l</span>あとで読む</p> <p><span class="shortcut-help-key">e</span>コメント一覧を開く</p> <p><span class="shortcut-help-key">o</span>ページを開く</p> <button tyle="button" class="shortcut-help-close js-close-button">✕</button> </div> <script type="text/javascript"> // ---------------- dfp section ---------------- var valve = valve || []; if (isMobile()) { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_overlay_sp', sizes: [[320,80],[320,70],[320,50]], slotId: 'touch-footer-ad' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_rectangle_bottom_sp', sizes: [[300,250]], slotId: 'entrysearch-ad-rectangle-bottom-sp' }); v.sealDFPSlots(); }); } else { valve.push(function(v) { v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_sidebar_top_pc', sizes: [[300,250]], slotId: 'entrysearch-ad-sidebar-top' }); v.defineDFPSlot({ unit: '/4374287/bookmark_entrysearch_sidebar_bottom_pc', sizes: [[300,250]], slotId: 'entrysearch-ad-sidebar-bottom' }); v.sealDFPSlots(); }); } // ---------------- ydn section ---------------- if (isMobile()) { valve.push(function(v) { v.defineFluidSlot({ insId: 'entrysearch-ad-rectangle-middle-sp', yadsAdDs: '62199_242886' }); }); } </script> <script> var valve = window.valve || []; valve.push(function(v) { var pageKeyValues = {}; if (document.cookie.split(';').some(function(item) { return item.indexOf('202011_guest_status=register_incomplete') >= 0})) { pageKeyValues.bookmark_status = 'register_incomplete'; } v.config({ pageKeyValues: pageKeyValues, textSelector: ".entry-search-articles", content: { result: "ng" }, service: 'bookmark' }); }); </script> <script src="https://cdn.pool.st-hatena.com/valve/valve.js" async></script> <div class="footer"> <div class="footer-inner"> <div class="footer-inner-group footer-bookmark"> <h2 class="footer-title"><a href="/" data-gtm-label="footer-btop">はてなブックマーク</a></h2> <div class="footer-list-wrapper"> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/all" class="hotentry js-keyboard-openable" data-gtm-label="footerCategories-hotentry">総合</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/general" class="general js-keyboard-openable" data-gtm-label="footerCategories-general">一般</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/social" class="cat-social js-keyboard-openable" data-gtm-label="footerCategories-social">世の中</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/economics" class="cat-economics js-keyboard-openable" data-gtm-label="footerCategories-economics">政治と経済</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/life" class="cat-life js-keyboard-openable" data-gtm-label="footerCategories-life">暮らし</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/knowledge" class="cat-knowledge js-keyboard-openable" data-gtm-label="footerCategories-knowledge">学び</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/it" class="cat-it js-keyboard-openable" data-gtm-label="footerCategories-it">テクノロジー</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/entertainment" class="cat-entertainment js-keyboard-openable" data-gtm-label="footerCategories-entertainment">エンタメ</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/game" class="cat-game js-keyboard-openable" data-gtm-label="footerCategories-game">アニメとゲーム</a></li> <li class="footer-list-item js-keyboard-selectable-item"><a href="/hotentry/fun" class="cat-fun js-keyboard-openable" data-gtm-label="footerCategories-fun">おもしろ</a></li> </ul> <ul class="footer-list"> <li class="footer-list-item"><a href="/guide/tools">アプリ・拡張機能</a></li> <li class="footer-list-item"><a href="https://bookmark.hatenastaff.com/">開発ブログ</a></li> <li class="footer-list-item"><a href="/help/">ヘルプ</a></li> <li class="footer-list-item"><a href="https://hatena.zendesk.com/hc/ja/categories/900000153166">お問い合わせ</a></li> <li class="footer-list-item footer-list-item--sp"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--sp"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> <ul class="footer-list footer-list--pc"> <li class="footer-list-item footer-list-item--pc"><a href="/guide/guideline">ガイドライン</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/rule">利用規約</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/privacypolicy-ja">プライバシーポリシー</a></li> <li class="footer-list-item footer-list-item--pc"><a href="https://policies.hatena.ne.jp/cookie-policy">利用者情報の外部送信について</a></li> </ul> </div> </div> <div class="footer-inner-group footer-bookmark-sns"> <h2 class="footer-title">公式Twitter</h2> <div class="footer-bookmark-list"> <ul class="footer-list"> <li class="footer-list-item"><a href="https://twitter.com/HatenaBookmark" target="_blank" rel="noopener" data-gtm-click-label="footer-officialTwitter-name">公式アカウント</a></li> <li class="footer-list-item"><a href="https://twitter.com/hatebu" target="_blank" rel="noopener" data-gtm-click-label="footer-hotentryTwitter-name">ホットエントリー</a></li> </ul> </div> </div> <div class="footer-inner-group footer-hatena"> <h2 class="footer-title">はてなのサービス</h2> <ul class="footer-list"> <li class="footer-list-item"><a href="https://hatenablog.com/" data-gtm-label="footerServices-blog">はてなブログ</a></li> <li class="footer-list-item"><a href="https://hatenablog.com/guide/pro?plus_via=hatenabookmark_footer&utm_source=hatenabookmark&utm_medium=referral&utm_campaign=hatenabookmark_to_hatenablog_pro&utm_content=hatenabookmark_footer" data-gtm-label="footerServices-blog-pro">はてなブログPro</a></li> <li class="footer-list-item"><a href="https://q.hatena.ne.jp/" data-gtm-label="footerServices-question">人力検索はてな</a></li> <li class="footer-list-item"><a href="http://d.hatena.ne.jp/" data-gtm-label="footerServices-keyword">はてなブログ タグ</a></li> <li class="footer-list-item"><a href="http://hatenanews.com/" data-gtm-label="footerServices-hatenanews">はてなニュース</a></li> <li class="footer-list-item"><a href="https://soredoko.jp/" data-gtm-label="footerServices-soredoko">ソレドコ</a></li> </ul> </div> </div> <div class="footer-bottom"> <div class="footer-app"> <ul> <li class="footer-list-item"><a href="https://apps.apple.com/jp/app/hatenabukkumaku/id354976659?mt=8" target="_blank" rel="noopener" data-gtm-click-label="footer-app-ios"><img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/common/dl-button/appstore@2x.png" alt="App Storeからダウンロード"></a></li> <li class="footer-list-item"><a href="https://play.google.com/store/apps/details?id=com.hatena.android.bookmark&referrer=utm_source%3Dbookmark_sp%26utm_campaign%3Dbookmark_sp_user&hl=ja" target="_blank" rel="noopener" data-gtm-click-label="footer-app-android"><img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/common/dl-button/googleplay@2x.png" alt="Google Playで手に入れよう"></a></li> </ul> </div> <div class="copyright">Copyright © 2005-2025 <a href="http://www.hatena.ne.jp/">Hatena</a>. All Rights Reserved.</div> </div> </div> <div id="touch-footer-ad"></div> <div id="touch-footer-ad-placeholder"></div> <div class="modal-overlay"></div> <script type="text/javascript" src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/js/v4/bookmark.star.js" async></script> <div class="js-head-notify is-hidden">設定を変更しました<span class="js-head-notify-close-button">x</span></div> </body> </html>