CINXE.COM

ORMの人気記事 233件 - はてなブックマーク

<!DOCTYPE html> <html lang="ja" data-page-scope="EntrySearch" data-stable-request-url="https://b.hatena.ne.jp/q/ORM" data-device-type="PC" data-sentry-environment="production" data-sentry-sample-rate="0.1" data-entry-search-query="ORM" 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>ORMの人気記事 233件 - はてなブックマーク</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/ORM" /> <link rel="next" href="/q/ORM?users=3&amp;sort=popular&amp;page=2&amp;date_range=5y&amp;safe=on&amp;target=tag"> <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/ORM?target=tag&amp;safe=on&amp;mode=rss&amp;date_range=5y&amp;sort=popular&amp;users=3" /> <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&amp;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%2FORM" 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="ORM" 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/ORM?date_range=5y&amp;safe=on&amp;target=all&amp;users=3&amp;sort=popular" >すべて</a></li> <li><a href="/q/ORM?target=tag&amp;safe=on&amp;date_range=5y&amp;users=3&amp;sort=popular" class="is-current">タグ</a></li> <li><a href="/q/ORM?date_range=5y&amp;target=title&amp;safe=on&amp;users=3&amp;sort=popular" >タイトル</a></li> <li><a href="/q/ORM?safe=on&amp;target=text&amp;date_range=5y&amp;sort=popular&amp;users=3" >本文</a></li> </ul> </div> <div class="centerarticle-sidebar-menu"> <h3 class="centerarticle-aside-title">並び順</h3> <ul class="centerarticle-sub-navi"> <li><a href="/q/ORM?target=tag&amp;safe=on&amp;date_range=5y&amp;sort=recent&amp;users=3" >新着</a></li> <li><a href="/q/ORM?users=3&amp;sort=popular&amp;date_range=5y&amp;safe=on&amp;target=tag" 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/ORM?users=1&amp;sort=popular&amp;date_range=5y&amp;safe=on&amp;target=tag" >1 user</a></li> <li><a href="/q/ORM?date_range=5y&amp;target=tag&amp;safe=on&amp;sort=popular&amp;users=3" class="is-current">3 users</a></li> <li><a href="/q/ORM?safe=on&amp;target=tag&amp;date_range=5y&amp;sort=popular&amp;users=50" >50 users</a></li> <li><a href="/q/ORM?date_range=5y&amp;safe=on&amp;target=tag&amp;users=100&amp;sort=popular" >100 users</a></li> <li><a href="/q/ORM?users=500&amp;sort=popular&amp;target=tag&amp;safe=on&amp;date_range=5y" >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/ORM?date_range=5y&amp;safe=on&amp;target=tag&amp;sort=popular&amp;users=3" class="is-current">オン</a></li> <li><a href="/q/ORM?users=3&amp;sort=popular&amp;target=tag&amp;safe=off&amp;date_range=5y" >オフ</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/ORM?sort=popular&amp;users=3&amp;safe=on&amp;target=tag&amp;date_range=all" >すべて</a></li> <li><a href="/q/ORM?date_range=w&amp;target=tag&amp;safe=on&amp;users=3&amp;sort=popular" >1週間</a></li> <li><a href="/q/ORM?users=3&amp;sort=popular&amp;safe=on&amp;target=tag&amp;date_range=m" >1ヶ月</a></li> <li><a href="/q/ORM?sort=popular&amp;users=3&amp;target=tag&amp;safe=on&amp;date_range=y" >1年</a></li> </ul> <form method="get" class="js-entrysearch-datepicker-form"> <input value="ORM" 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 件 / 233件</p> <div class="entrysearch-bar-inner"> <button class="entrysearch-filter-btn js-entrysearch-filter-btn">絞り込み</button> <a class="entrysearch-sort-btn" href="/q/ORM?sort=popular&amp;users=3&amp;safe=on&amp;target=tag&amp;date_range=5y">新着順</a> <a class="entrysearch-sort-btn is-current" href="/q/ORM?users=3&amp;sort=recent&amp;target=tag&amp;safe=on&amp;date_range=5y">人気順</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">ORMの検索結果</span><span class="entrysearch-result">1 - 40 件 / 233件</span> </h2> <div class="entrysearch-summary-text"> <span>ORM</span>に関するエントリは<span>233</span>件あります。 <span>開発</span>、 <span>TypeScript</span>、 <span>golang</span> などが関連タグです。 人気エントリには <span>『Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応』</span>などがあります。 </div> <div class="entrysearch-related-entries" data-gtm-inview-label="entry-search-recommend-header"> <h3 class="entrysearch-related-title">ORMの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.prisma.io/blog/from-rust-to-typescript-a-new-chapter-for-prisma-orm" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/2ff63f982dc2716c29eab46a4944c9d8c8c94165/height=288;version=1;width=512/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fp2zxqf70%2Fproduction%2Fded124ddfa8412b0d678ab94a9804127188fde00-1266x711.png" alt="From Rust to TypeScript: A New Chapter for Prisma ORM"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.prisma.io/blog/from-rust-to-typescript-a-new-chapter-for-prisma-orm" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> From Rust to TypeScript: A New Chapter for Prisma ORM </a> </h4> <a href="/entry/s/www.prisma.io/blog/from-rust-to-typescript-a-new-chapter-for-prisma-orm" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 22 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a669538c9b8b57d352cb2c1f7c8b02e71147dd1b/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F428c524394ebfe76441491dca374f7085f0309e0%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fk%252Fkaminashi-developer%252F20250124%252F20250124181151.jpg" alt="Go の ORM はどのようにして AUTO INCREMENT で採番された値を取得しているのか? - MySQL 編 - カミナシ エンジニアブログ"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> Go の ORM はどのようにして AUTO INCREMENT で採番された値を取得しているのか? - MySQL 編 - カミナシ エンジニアブログ </a> </h4> <a href="/entry/s/kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 95 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.prisma.io/blog/prisma-orm-manifesto" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/eb54f75b62fa7e242e2c6ca56eb1ea4e959219ad/height=288;version=1;width=512/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fp2zxqf70%2Fproduction%2F0b66108483565f432dc3f83253879dc12818ab99-1266x711.png" alt="Prisma ORM Manifesto: Clarity and Collaboration"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.prisma.io/blog/prisma-orm-manifesto" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> Prisma ORM Manifesto: Clarity and Collaboration </a> </h4> <a href="/entry/s/www.prisma.io/blog/prisma-orm-manifesto" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 27 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/senken/articles/vscode-sqlsurge" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/f5fdd4697c14676d24ce64e1fe001d5d40bc1d2b/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--bqOiL8f5--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AORM%2525E3%252581%2525AA%2525E3%252582%252593%2525E3%252581%2525A6%2525E3%252581%252584%2525E3%252582%252589%2525E3%252581%2525AA%2525E3%252581%252584%2525EF%2525BC%25259F%2525EF%2525BC%252581%2525E7%252594%25259FSQL%2525E3%252582%2525AF%2525E3%252582%2525A8%2525E3%252583%2525AA%2525E9%252596%25258B%2525E7%252599%2525BA%2525E3%252582%252592%2525E8%2525B6%252585%2525E7%2525B5%2525B6%2525E6%2525A5%2525BD%2525E3%252581%2525AB%2525E3%252581%252599%2525E3%252582%25258BVSCode%2525E6%25258B%2525A1%2525E5%2525BC%2525B5%2525E3%252582%252592%2525E4%2525BD%25259C%2525E3%252581%2525A3%2525E3%252581%25259F%252520%25255BTS%25252BRust%25252BWASM%25255D%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3ASENKEN%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2Q3ZTQyODM5Y2UuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="ORMなんていらない?!生SQLクエリ開発を超絶楽にするVSCode拡張を作った [TS+Rust+WASM]"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/senken/articles/vscode-sqlsurge" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> ORMなんていらない?!生SQLクエリ開発を超絶楽にするVSCode拡張を作った [TS+Rust+WASM] </a> </h4> <a href="/entry/s/zenn.dev/senken/articles/vscode-sqlsurge" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 108 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://blog-dry.com/entry/2024/11/04/001421" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/7356380d6f90bb36a0b6f90769151cbf47e2be23/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F8599973812298536260%2F6802418398301230066%2F1730696389" alt="tokioから発表された新しいORM「toasty」を触ってみる - Don&#39;t Repeat Yourself"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://blog-dry.com/entry/2024/11/04/001421" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> tokioから発表された新しいORM「toasty」を触ってみる - Don&#39;t Repeat Yourself </a> </h4> <a href="/entry/s/blog-dry.com/entry/2024/11/04/001421" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 37 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://tokio.rs/blog/2024-10-23-announcing-toasty" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://b.st-hatena.com/1b3c3aaeeb3650284f153f8a5a507d736736a15d/images/v4/public/common/noimage.png" alt="Announcing Toasty, an async ORM for Rust | Tokio - An asynchronous Rust runtime"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://tokio.rs/blog/2024-10-23-announcing-toasty" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> Announcing Toasty, an async ORM for Rust | Tokio - An asynchronous Rust runtime </a> </h4> <a href="/entry/s/tokio.rs/blog/2024-10-23-announcing-toasty" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 16 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://speakerdeck.com/hoto17296/orm-toxiang-kihe-u" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/164cea8c8f20437fc560bc146132c8b6603697a6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F1a5ab32cb1eb4fa38725b8292b0c6b06%2Fslide_0.jpg%3F31915411" alt="ORM と向き合う"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://speakerdeck.com/hoto17296/orm-toxiang-kihe-u" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> ORM と向き合う </a> </h4> <a href="/entry/s/speakerdeck.com/hoto17296/orm-toxiang-kihe-u" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 136 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://www.prisma.io/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/870e2a16b0b3a5a3d0bfc7973af92725bd5aeec7/height=288;version=1;width=512/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fp2zxqf70%2Fproduction%2F6212889ff7d56ad41636c0f7938159b1fd740651-1688x948.png" alt="Announcing TypedSQL: Make your raw SQL queries type-safe with Prisma ORM"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://www.prisma.io/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> Announcing TypedSQL: Make your raw SQL queries type-safe with Prisma ORM </a> </h4> <a href="/entry/s/www.prisma.io/blog/announcing-typedsql-make-your-raw-sql-queries-type-safe-with-prisma-orm" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 51 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/randd_inc/articles/b8e009b74863ab" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/59a8585ca52e63cc331d491dbfb6a2ceb8e4d78f/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--ICZl384k--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E6%25259C%252580%2525E5%2525BC%2525B7%2525E3%252581%2525AE%2525E3%252582%2525AF%2525E3%252582%2525A8%2525E3%252583%2525AA%2525E3%252583%252593%2525E3%252583%2525AB%2525E3%252583%252580%2525E3%252580%25258Ckysely%2525E3%252580%25258D%2525E3%252581%2525AE%2525E7%2525B4%2525B9%2525E4%2525BB%25258B%252520~%2525E8%252596%252584%2525E3%252581%252584ORM%2525E3%252582%252592%2525E6%25258E%2525A2%2525E3%252581%252597%2525E3%252581%2525A6~%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_34%3ADaiki-Hatada%252Cx_220%252Cy_108%2Fbo_3px_solid_rgb%3Ad6e3ed%252Cg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzQxZTNhMjllZmMuanBlZw%3D%3D%252Cr_20%252Cw_90%252Cx_92%252Cy_102%2Fco_rgb%3A6e7b85%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_30%3AR%252526D%2525E3%252583%252586%2525E3%252583%252583%2525E3%252582%2525AF%2525E3%252583%252596%2525E3%252583%2525AD%2525E3%252582%2525B0%252Cx_220%252Cy_160%2Fbo_4px_solid_white%252Cg_south_west%252Ch_50%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2lKYURnclJlemVSd3hTZmNsOUlSMFBaZFpYSlVIRlhyNUhjT1FpNFE9czk2LWM%3D%252Cr_max%252Cw_50%252Cx_139%252Cy_84%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="最強のクエリビルダ「kysely」の紹介 ~薄いORMを探して~"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/randd_inc/articles/b8e009b74863ab" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> 最強のクエリビルダ「kysely」の紹介 ~薄いORMを探して~ </a> </h4> <a href="/entry/s/zenn.dev/randd_inc/articles/b8e009b74863ab" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 36 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" class="entrysearch-related-image" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-image"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e01e01d37d8382a10d67c94078a00e06a8c428f6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7c6c5ab6613343eeb15a2124bba68e3a%2Fslide_0.jpg%3F30043160" alt="Prisma ORMを2年運用して培ったノウハウを共有する"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-header-a-title"> Prisma ORMを2年運用して培ったノウハウを共有する </a> </h4> <a href="/entry/s/speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-header-a-users"> 165 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://www.publickey1.jp/blog/21/googleormsqlsqlcommenterrailsspringdjango.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.publickey1.jp/blog/21/googleormsqlsqlcommenterrailsspringdjango.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%2Fgoogleormsqlsqlcommenterrailsspringdjango.html" alt="">Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.publickey1.jp/blog/21/googleormsqlsqlcommenterrailsspringdjango.html" class="js-keyboard-entry-page-openable" title="Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応 (619 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 619 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/02/03</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応 SQL文を直接書かなくとも、自動的にSQL文を生成、実行してくれるORM(Object-Relational Mapper)は、プログラミングを容易にしてくれる技術としてRailsやHibernate、Springなどさまざまなフレームワークなどで活用されています。 一方で、ORMが生成するSQL文はときに複雑に、あるいは非効率なものとなり、データベース処理の遅さにつながることもあります。 このとき、SQL文の生成と実行を明示的にコードとして記述する必要がないというORMの特徴が、なぜデータベース処理が遅くなったのか、どのようなSQL文が生成され、そのどこに原因があるのか、といった調査を難しくている面があり</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/sql" data-gtm-click-label="entry-search-result-item-tag">sql</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/google" data-gtm-click-label="entry-search-result-item-tag">google</a></li> <li><a href="/q/DB" data-gtm-click-label="entry-search-result-item-tag">DB</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">データベース</a></li> <li><a href="/q/orm" data-gtm-click-label="entry-search-result-item-tag">orm</a></li> <li><a href="/q/performance" data-gtm-click-label="entry-search-result-item-tag">performance</a></li> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</a></li> <li><a href="/q/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> <li><a href="/q/%E3%83%84%E3%83%BC%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://www.publickey1.jp/blog/21/googleormsqlsqlcommenterrailsspringdjango.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/googleormsqlsqlcommenterrailsspringdjango.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/8c26ac9cc11fe64249c9912b50839c28c31c3472/height=288;version=1;width=512/https%3A%2F%2Fwww.publickey1.jp%2F2021%2Fsqlcommenter01.gif" alt="Google、ORMが生成するSQLが遅いときの調査を容易にする「sqlcommenter」をオープンソースで公開。Rails、Spring、Djangoなど主要なフレームワークに対応" 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/mpyw/articles/ce7d09eb6d8117"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mpyw/articles/ce7d09eb6d8117" 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%2Fmpyw%2Farticles%2Fce7d09eb6d8117" alt="">5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mpyw/articles/ce7d09eb6d8117" class="js-keyboard-entry-page-openable" title="5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ (539 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 539 users </a> </span> </li> <li> <a href="/site/zenn.dev/mpyw" title="『zenn.dev/mpyw』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mpyw </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/24</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">この記事は Laravel Advent Calendar 2020 - Qiita 最終日の記事です。 TL;DR DDD や &quot;真の&quot; クリーンアーキテクチャは, Web 業界における大抵の現場ではオーバースペックだし,導入しても全員がついてこれるとは限らない app/UseCases ディレクトリだけ切って,ドメインごとに単一責務なクラスを置くと使いやすいよ ActiveRecord 指向のフレームワークで Repository パターンを無理に導入すると死ぬので, UseCase で Eloquent Model の機能を使うことを恐れるな はじめに Zenn では初投稿です。日本の Laravel コミュニティではもうお馴染みのようで実はあまり顔を出していない(?) @mpyw と申します。オンラインサロンの火付け役となった Synapse が最初の仕事でしたが,就職後すぐ会社が</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/laravel" data-gtm-click-label="entry-search-result-item-tag">laravel</a></li> <li><a href="/q/php" data-gtm-click-label="entry-search-result-item-tag">php</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/DDD" data-gtm-click-label="entry-search-result-item-tag">DDD</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/%E8%A8%AD%E8%A8%88" 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%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%A2%E3%83%BC%E3%82%AD%E3%83%86%E3%82%AF%E3%83%81" data-gtm-click-label="entry-search-result-item-tag">クリーンアーキテクチ</a></li> <li><a href="/q/CleanArchitecture" data-gtm-click-label="entry-search-result-item-tag">CleanArchitecture</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mpyw/articles/ce7d09eb6d8117"> <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/mpyw/articles/ce7d09eb6d8117" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/834295b59d0179c35943fea21e0d3018904e82b3/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--Jmqf5W4B--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A5%2525E5%2525B9%2525B4%2525E9%252596%252593%252520Laravel%252520%2525E3%252582%252592%2525E4%2525BD%2525BF%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E8%2525BE%2525BF%2525E3%252582%25258A%2525E7%25259D%252580%2525E3%252581%252584%2525E3%252581%25259F%2525EF%2525BC%25258C%2525E5%252585%2525A8%2525E7%252584%2525B6%2525E9%2525A0%252591%2525E5%2525BC%2525B5%2525E3%252582%252589%2525E3%252581%2525AA%2525E3%252581%252584%2525E3%252580%25258C%2525E3%252581%2525AA%2525E3%252582%252593%2525E3%252581%2525A1%2525E3%252582%252583%2525E3%252581%2525A3%2525E3%252581%2525A6%2525E3%252582%2525AF%2525E3%252583%2525AA%2525E3%252583%2525BC%2525E3%252583%2525B3%2525E3%252582%2525A2%2525E3%252583%2525BC%2525E3%252582%2525AD%2525E3%252583%252586%2525E3%252582%2525AF%2525E3%252583%252581%2525E3%252583%2525A3%2525E3%252580%25258D%2525E3%252581%2525A8%2525E3%252581%252584%2525E3%252581%252586%2525E8%252590%2525BD%2525E3%252581%2525A8%2525E3%252581%252597%2525E3%252581%2525A9%2525E3%252581%252593%2525E3%252582%25258D%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Ampyw%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzk0ZWM3OGU4NDYuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="5年間 Laravel を使って辿り着いた,全然頑張らない「なんちゃってクリーンアーキテクチャ」という落としどころ" 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/mizchi/hurontoendoling-yu-wozai-ding-yi-suru"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/mizchi/hurontoendoling-yu-wozai-ding-yi-suru" 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%2Fmizchi%2Fhurontoendoling-yu-wozai-ding-yi-suru" alt="">「フロントエンド領域」を再定義する </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/mizchi/hurontoendoling-yu-wozai-ding-yi-suru" class="js-keyboard-entry-page-openable" title="「フロントエンド領域」を再定義する (519 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 519 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/mizchi" title="『speakerdeck.com/mizchi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/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">2020/11/09</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Frontend Study #1 訂正: 最後のzennの記事のリンク先は、正しくは https://zenn.dev/mizchi/articles/c638f1b3b0cd239d3eea です</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/frontend" data-gtm-click-label="entry-search-result-item-tag">frontend</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/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/%E9%96%8B%E7%99%BA" 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/node.js" data-gtm-click-label="entry-search-result-item-tag">node.js</a></li> <li><a href="/q/mizchi" data-gtm-click-label="entry-search-result-item-tag">mizchi</a></li> <li><a href="/q/node" data-gtm-click-label="entry-search-result-item-tag">node</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/mizchi/hurontoendoling-yu-wozai-ding-yi-suru"> <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/mizchi/hurontoendoling-yu-wozai-ding-yi-suru" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e13ef7d8bea84de5cba9d47e14995ea12b17ad32/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fe8f0726858b44472b9761ecd802f973c%2Fslide_0.jpg%3F16673626" 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://cero-t.hatenadiary.jp/entry/2020/08/12/220853"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://cero-t.hatenadiary.jp/entry/2020/08/12/220853" 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%2Fcero-t.hatenadiary.jp%2Fentry%2F2020%2F08%2F12%2F220853" alt="">100万件ぐらいのレコードを扱ったらOOMEが出た話。 - 谷本 心 in せろ部屋 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/cero-t.hatenadiary.jp/entry/2020/08/12/220853" class="js-keyboard-entry-page-openable" title="100万件ぐらいのレコードを扱ったらOOMEが出た話。 - 谷本 心 in せろ部屋 (510 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 510 users </a> </span> </li> <li> <a href="/site/cero-t.hatenadiary.jp/" title="『cero-t.hatenadiary.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> cero-t.hatenadiary.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/12</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">要約 技術的な話だけ教えて、という方のために先に結論だけ書いておきますと、PostgreSQLはクエリを実行した時点で全レコードの情報を一気に読んできてヒープを埋めてしまう場合がある、ということ話です。 たとえば、ResultSet#nextメソッドを使いながら処理を回すようなコードを書いて、少ないヒープでも処理できるようにするのは常套手段だと思いますが、そういうコードを書いていても一気にヒープを消費してしまうことがあるのです。詳しくはこのドキュメントを見てください。 https://jdbc.postgresql.org/documentation/head/query.html#query-with-cursor ことの発端 ちょっと仕事でJava + jOOQ + PostgreSQLで、DBのデータを集計するようなバッチ処理を書いてまして、もちろん俺様の書いたコードにバグなんてある</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/postgresql" data-gtm-click-label="entry-search-result-item-tag">postgresql</a></li> <li><a href="/q/java" data-gtm-click-label="entry-search-result-item-tag">java</a></li> <li><a href="/q/db" data-gtm-click-label="entry-search-result-item-tag">db</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/jdbc" data-gtm-click-label="entry-search-result-item-tag">jdbc</a></li> <li><a href="/q/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> <li><a href="/q/spring" data-gtm-click-label="entry-search-result-item-tag">spring</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/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%86%E3%82%A3%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://cero-t.hatenadiary.jp/entry/2020/08/12/220853"> <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://cero-t.hatenadiary.jp/entry/2020/08/12/220853" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a733b366a5a7e1564e59ea61adffb052e7c53be9/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F9ce79a5e5b53e8c315571363bfe1cab224e3a32d%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fc%252Fcero-t%252F20200812%252F20200812214730.png" alt="100万件ぐらいのレコードを扱ったらOOMEが出た話。 - 谷本 心 in せろ部屋" 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">ORMの関連エントリー</h3> <ul class="entrysearch-related-list"> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://japan.zdnet.com/article/35231357/" 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/d1ac530519ef068098fa74782321a3be843241d5/height=288;version=1;width=512/https%3A%2F%2Fjapan.zdnet.com%2Fstorage%2F2025%2F04%2F04%2F02d3525b9c315f4f08d36331110af142%2Fgoogles-notebooklm-ai-can-now-find-the-right-sources-for-your-project-all-on-its-own_1280.jpg" alt="グーグルの「NotebookLM」、情報源の自動収集が可能に"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://japan.zdnet.com/article/35231357/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> グーグルの「NotebookLM」、情報源の自動収集が可能に </a> </h4> <a href="/entry/s/japan.zdnet.com/article/35231357/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 313 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://posfie.com/@blackstaragent/p/K1UEdth" 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/07b73398aa7b7279cf6b6a52f56cacd5bbee954b/height=288;version=1;width=512/https%3A%2F%2Fs.tgstc.com%2Fogp3%2F037665277907d812da8ac78c80c27100-1200x630.jpeg" alt="AIのClineで3Dソフトの「Blender」を操って、3Dモデリングが可能に。特にGemini 2.5 Proが上手→「これはやばい」「AIで3Dモデルが作れるようになるなんて」"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://posfie.com/@blackstaragent/p/K1UEdth" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> AIのClineで3Dソフトの「Blender」を操って、3Dモデリングが可能に。特にGemini 2.5 Proが上手→「これはやばい」「AIで3Dモデルが作れるようになるなんて」 </a> </h4> <a href="/entry/s/posfie.com/@blackstaragent/p/K1UEdth" 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://note.com/kokushing/n/n115ad60e0ead" 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/a7bd42b0723c4553db7e0b9940bb054772f35f1a/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F182039783%2Frectangle_large_type_2_84e61721611e42dc983dd4a334ffd131.png%3Ffit%3Dbounds%26quality%3D85%26width%3D1280" alt="ローカルLLMは次世代エロゲの夢を見るか|黒神"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://note.com/kokushing/n/n115ad60e0ead" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> ローカルLLMは次世代エロゲの夢を見るか|黒神 </a> </h4> <a href="/entry/s/note.com/kokushing/n/n115ad60e0ead" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 75 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://note.com/google_gemini/n/n4e77355194db" 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/0250eaece43318c84e8e585c1a361454fed4a6ae/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F182419773%2Frectangle_large_type_2_32a36b844cf7a17966e4b718ad2926fe.png%3Ffit%3Dbounds%26quality%3D85%26width%3D1280" alt="今日からできる!スプレッドシート × Gemini の連携術で、スマートなデータ活用|Gemini - Google の AI"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://note.com/google_gemini/n/n4e77355194db" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 今日からできる!スプレッドシート × Gemini の連携術で、スマートなデータ活用|Gemini - Google の AI </a> </h4> <a href="/entry/s/note.com/google_gemini/n/n4e77355194db" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 108 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/smartround_dev/articles/02af1058e9f80f" 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/1618b541d7fc925cd02a90d881b6e8168c4a249b/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--CnTKU_iM--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E7%2525B0%2525A1%2525E6%252598%252593%2525E3%252581%2525AA%2525E8%252587%2525AA%2525E4%2525BD%25259CMCP%2525E3%252582%2525B5%2525E3%252583%2525BC%2525E3%252583%252590%2525E3%252583%2525BC%2525E3%252582%252592%2525E3%252581%25258A%2525E8%2525A9%2525A6%2525E3%252581%252597%2525E3%252581%2525A7%2525E5%2525AE%25259F%2525E8%2525A3%252585%2525E3%252581%252599%2525E3%252582%25258B%2525E6%252596%2525B9%2525E6%2525B3%252595%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_34%3Amwatanabe%252Cx_220%252Cy_108%2Fbo_3px_solid_rgb%3Ad6e3ed%252Cg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2EyZGQyNWFiZDUuanBlZw%3D%3D%252Cr_20%252Cw_90%252Cx_92%252Cy_102%2Fco_rgb%3A6e7b85%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_30%3A%2525E3%252582%2525B9%2525E3%252583%25259E%2525E3%252583%2525BC%2525E3%252583%252588%2525E3%252583%2525A9%2525E3%252582%2525A6%2525E3%252583%2525B3%2525E3%252583%252589%252520%2525E3%252583%252586%2525E3%252583%252583%2525E3%252582%2525AF%2525E3%252583%252596%2525E3%252583%2525AD%2525E3%252582%2525B0%252Cx_220%252Cy_160%2Fbo_4px_solid_white%252Cg_south_west%252Ch_50%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzU2ZTVmOTk5YTUuanBlZw%3D%3D%252Cr_max%252Cw_50%252Cx_139%252Cy_84%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="簡易な自作MCPサーバーをお試しで実装する方法"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/smartround_dev/articles/02af1058e9f80f" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 簡易な自作MCPサーバーをお試しで実装する方法 </a> </h4> <a href="/entry/s/zenn.dev/smartround_dev/articles/02af1058e9f80f" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 118 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/acntechjp/articles/e8e54ee201f77e" 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/b68311d1414468cab2d82ba8927f385d0788cbfb/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--lsOlbDwn--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ATypeScript%25252FReact%25252FNext.js%2525E3%252581%25258A%2525E3%252581%252599%2525E3%252581%252599%2525E3%252582%252581%2525E5%2525AD%2525A6%2525E7%2525BF%252592%2525E8%2525B3%252587%2525E6%252596%252599%2525E3%252581%2525AE%2525E3%252581%252594%2525E7%2525B4%2525B9%2525E4%2525BB%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_34%3AYuuichi%252520Eguchi%252Cx_220%252Cy_108%2Fbo_3px_solid_rgb%3Ad6e3ed%252Cg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2U2ZDA4MDY5ODcuanBlZw%3D%3D%252Cr_20%252Cw_90%252Cx_92%252Cy_102%2Fg_south_west%252Ch_34%252Cl_default%3Aog-publication-pro-mark-xcosax%252Cw_34%252Cx_217%252Cy_158%2Fco_rgb%3A6e7b85%252Cg_south_west%252Cl_text%3Anotosansjp-medium.otf_30%3AAccenture%252520Japan%252520%252528%2525E6%25259C%252589%2525E5%2525BF%252597%252529%252Cx_255%252Cy_160%2Fbo_4px_solid_white%252Cg_south_west%252Ch_50%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2E3Y2NiYzY2YjIuanBlZw%3D%3D%252Cr_max%252Cw_50%252Cx_139%252Cy_84%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="TypeScript/React/Next.jsおすすめ学習資料のご紹介"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/acntechjp/articles/e8e54ee201f77e" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> TypeScript/React/Next.jsおすすめ学習資料のご紹介 </a> </h4> <a href="/entry/s/zenn.dev/acntechjp/articles/e8e54ee201f77e" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 79 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://github.blog/news-insights/product-news/github-copilot-agent-mode-activated/" 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/8dc28b372fa9fa21b5be9cf9d1fd62678da34cd2/height=288;version=1;width=512/https%3A%2F%2Fgithub.blog%2Fwp-content%2Fuploads%2F2025%2F04%2FBlogHeader_Bento_004.png" alt="Vibe coding with GitHub Copilot: Agent mode and MCP support rolling out to all VS Code users"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://github.blog/news-insights/product-news/github-copilot-agent-mode-activated/" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> Vibe coding with GitHub Copilot: Agent mode and MCP support rolling out to all VS Code users </a> </h4> <a href="/entry/s/github.blog/news-insights/product-news/github-copilot-agent-mode-activated/" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 26 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://anond.hatelabo.jp/20250404152704" 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/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/20250404152704" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> ほう、また『大学って意味あるん?』て話かいな。ええやん、ちょっとだけ.. </a> </h4> <a href="/entry/s/anond.hatelabo.jp/20250404152704" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 255 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://pc.watch.impress.co.jp/docs/column/ubuntu/2004458.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/353b3cac30c7dffd80cb80f95fc0a3a913cae45e/height=288;version=1;width=512/https%3A%2F%2Fpc.watch.impress.co.jp%2Fimg%2Fpcw%2Flist%2F2004%2F458%2F000.png" alt="【Ubuntu日和】 【第72回】Windows上でシームレスにLinuxを動かせる! WSLで改めてUbuntuに入門しよう"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://pc.watch.impress.co.jp/docs/column/ubuntu/2004458.html" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> 【Ubuntu日和】 【第72回】Windows上でシームレスにLinuxを動かせる! WSLで改めてUbuntuに入門しよう </a> </h4> <a href="/entry/s/pc.watch.impress.co.jp/docs/column/ubuntu/2004458.html" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 20 users </a> </div> </li> <li class="entrysearch-related-listitem"> <div class="entrysearch-related-entry"> <a href="https://zenn.dev/kimuson/articles/claude_crew_introduction" 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/edace296e39097e1cd7d044f2d2bba03b21d7f06/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--5fOMu3bI--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AClaude%252520Desktop%252520%2525E3%252581%2525AB%2525E3%252581%25258A%2525E3%252581%252591%2525E3%252582%25258B%2525E3%252582%2525B3%2525E3%252583%2525BC%2525E3%252583%252587%2525E3%252582%2525A3%2525E3%252583%2525B3%2525E3%252582%2525B0%2525E3%252582%2525A8%2525E3%252583%2525BC%2525E3%252582%2525B8%2525E3%252582%2525A7%2525E3%252583%2525B3%2525E3%252583%252588%2525E6%252580%2525A7%2525E8%252583%2525BD%2525E3%252582%252592%2525E6%25258B%2525A1%2525E5%2525BC%2525B5%2525E3%252581%252599%2525E3%252582%25258B%2525E3%252580%25258CClaude%252520Crew%2525E3%252580%25258D%2525E3%252581%2525AE%2525E7%2525B4%2525B9%2525E4%2525BB%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3A%2525E3%252581%25258D%2525E3%252582%252580%2525E3%252581%25259D%2525E3%252582%252593%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2I1NWE1MzY5MWUuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Claude Desktop におけるコーディングエージェント性能を拡張する「Claude Crew」の紹介"> </a> <h4 class="entrysearch-related-entry-title"> <a href="https://zenn.dev/kimuson/articles/claude_crew_introduction" target="_blank" rel="noopener" data-gtm-click-label="entry-search-recommend-middle-title"> Claude Desktop におけるコーディングエージェント性能を拡張する「Claude Crew」の紹介 </a> </h4> <a href="/entry/s/zenn.dev/kimuson/articles/claude_crew_introduction" class="entrysearch-related-users" data-gtm-click-label="entry-search-recommend-middle-users"> 18 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://speakerdeck.com/yasaichi/architecture-decision-for-the-next-10-years-at-pixta"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/yasaichi/architecture-decision-for-the-next-10-years-at-pixta" 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%2Fyasaichi%2Farchitecture-decision-for-the-next-10-years-at-pixta" alt="">Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/yasaichi/architecture-decision-for-the-next-10-years-at-pixta" class="js-keyboard-entry-page-openable" title="Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA (382 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 382 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/yasaichi" title="『speakerdeck.com/yasaichi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/yasaichi </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/16</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">September 15, 2021 @ iCARE Dev Meetup #25</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</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/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/architecture" data-gtm-click-label="entry-search-result-item-tag">architecture</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%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/GraphQL" data-gtm-click-label="entry-search-result-item-tag">GraphQL</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</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/ActiveRecord" data-gtm-click-label="entry-search-result-item-tag">ActiveRecord</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/yasaichi/architecture-decision-for-the-next-10-years-at-pixta"> <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/yasaichi/architecture-decision-for-the-next-10-years-at-pixta" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/4453f6cfe636b04ebd190604653aeec90d7108aa/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fc8556affd0f3401388af6d664d320c42%2Fslide_0.jpg%3F19034361" alt="Active Recordから考える次の10年を見据えた技術選定 / Architecture decision for the next 10 years at PIXTA" 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/keroxp/Gorm%E3%81%8C%E6%9C%AC%E7%95%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%95%B0%E5%84%84%E4%BB%B6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B6%88%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://scrapbox.io/keroxp/Gorm%E3%81%8C%E6%9C%AC%E7%95%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%95%B0%E5%84%84%E4%BB%B6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B6%88%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1" 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%2Fkeroxp%2FGorm%25E3%2581%258C%25E6%259C%25AC%25E7%2595%25AA%25E3%2583%2586%25E3%2583%25BC%25E3%2583%2596%25E3%2583%25AB%25E3%2581%25AE%25E6%2595%25B0%25E5%2584%2584%25E4%25BB%25B6%25E3%2581%25AE%25E3%2583%2587%25E3%2583%25BC%25E3%2582%25BF%25E3%2582%2592%25E6%25B6%2588%25E3%2581%259D%25E3%2581%2586%25E3%2581%25A8%25E3%2581%2597%25E3%2581%259F%25E8%25A9%25B1" alt="">Gormが本番テーブルの数億件のデータを消そうとした話 - keroxpのScrapbox </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/scrapbox.io/keroxp/Gorm%E3%81%8C%E6%9C%AC%E7%95%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%95%B0%E5%84%84%E4%BB%B6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B6%88%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1" class="js-keyboard-entry-page-openable" title="Gormが本番テーブルの数億件のデータを消そうとした話 - keroxpのScrapbox (370 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 370 users </a> </span> </li> <li> <a href="/site/scrapbox.io/keroxp/" title="『scrapbox.io/keroxp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> scrapbox.io/keroxp </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/05/06</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">MySQLの場合、--safe-updatesオプションを利用することでこういった不慮のUPDATE/DELETEを防げるようです</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/DB" data-gtm-click-label="entry-search-result-item-tag">DB</a></li> <li><a href="/q/Gorm" data-gtm-click-label="entry-search-result-item-tag">Gorm</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%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">データベース</a></li> <li><a href="/q/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA" data-gtm-click-label="entry-search-result-item-tag">ライブラリ</a></li> <li><a href="/q/MySQL" data-gtm-click-label="entry-search-result-item-tag">MySQL</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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://scrapbox.io/keroxp/Gorm%E3%81%8C%E6%9C%AC%E7%95%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%95%B0%E5%84%84%E4%BB%B6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B6%88%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1"> <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/keroxp/Gorm%E3%81%8C%E6%9C%AC%E7%95%AA%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E3%81%AE%E6%95%B0%E5%84%84%E4%BB%B6%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E6%B6%88%E3%81%9D%E3%81%86%E3%81%A8%E3%81%97%E3%81%9F%E8%A9%B1" 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="Gormが本番テーブルの数億件のデータを消そうとした話 - keroxpのScrapbox" 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 "> <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.fsa.go.jp/policy/bgin/ResearchPaper_qunie_ja.pdf"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.fsa.go.jp/policy/bgin/ResearchPaper_qunie_ja.pdf" 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.fsa.go.jp%2Fpolicy%2Fbgin%2FResearchPaper_qunie_ja.pdf" alt="">分散型金融システムのトラストチェーンにおける 技術リスクに関する研究 研究結果報告書 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.fsa.go.jp/policy/bgin/ResearchPaper_qunie_ja.pdf" class="js-keyboard-entry-page-openable" title="分散型金融システムのトラストチェーンにおける 技術リスクに関する研究 研究結果報告書 (341 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 341 users </a> </span> </li> <li> <a href="/site/www.fsa.go.jp/" title="『www.fsa.go.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.fsa.go.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/06/18</span></li> </ul> </div> <div class="centerarticle-entry-contents "> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary"></p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3" 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/blockchain" data-gtm-click-label="entry-search-result-item-tag">blockchain</a></li> <li><a href="/q/%E9%87%91%E8%9E%8D" 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/finance" data-gtm-click-label="entry-search-result-item-tag">finance</a></li> <li><a href="/q/%E7%A0%94%E7%A9%B6" data-gtm-click-label="entry-search-result-item-tag">研究</a></li> <li><a href="/q/%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8" data-gtm-click-label="entry-search-result-item-tag">仮想通貨</a></li> <li><a href="/q/Web3.0" data-gtm-click-label="entry-search-result-item-tag">Web3.0</a></li> <li><a href="/q/%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" 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.fsa.go.jp/policy/bgin/ResearchPaper_qunie_ja.pdf"> <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> </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://sizu.me/laiso/posts/65vvszbdie37"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://sizu.me/laiso/posts/65vvszbdie37" 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%2Fsizu.me%2Flaiso%2Fposts%2F65vvszbdie37" alt="">「Rails vs Node.js」を観た|laiso </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/sizu.me/laiso/posts/65vvszbdie37" class="js-keyboard-entry-page-openable" title="「Rails vs Node.js」を観た|laiso (289 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 289 users </a> </span> </li> <li> <a href="/site/sizu.me/" title="『sizu.me』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> sizu.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">2024/10/10</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">このYouTubeライブはフロントエンドの最適化を専門にするmizchiさんがCloudflare Meet-up Tokyoで行った同タイトルのプレゼンを、RustやRDBの実装に詳しいkoba789さんを話し相手に語っていくというものだ。背景としては2人ともチーム開発の現場でのRailsが活発に利用されていた時期にウェブ開発を経験し、現在はNode.jsのサーバーサイドも実践している。 ライブは3時間半という長時間におよび、スライド外の周辺情報や持論や余談など多岐に渡るので、すでにこのプレゼンに触れた人でもさらに深掘りできるようなコンテンツになっている。 全体を大まかに1時間ごとの3パートに区切って視聴するとわかりやすい。前半はRailsからNext.jsに辿り着くまでのウェブ開発の変遷。ORMの話は主に後半戦で。最後の1時間はアフタートークになっている。 内容としてはRailsアプリ</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</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/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</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/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/node" data-gtm-click-label="entry-search-result-item-tag">node</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</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%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/NodeJS" data-gtm-click-label="entry-search-result-item-tag">NodeJS</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://sizu.me/laiso/posts/65vvszbdie37"> <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://sizu.me/laiso/posts/65vvszbdie37" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/14231ae4d6d7e389de11c0c524358f66bf09742b/height=288;version=1;width=512/https%3A%2F%2Fstatic.sizu.me%2Fapi%2Fog-image%2F2445628bdfdc%3FavatarUrl%3Dhttps%253A%252F%252Fr2.sizu.me%252Fusers%252F111%252Favatar.png%253Fv%253D1706609408235%26theme%3Duser%26username%3Dlaiso" alt="「Rails vs Node.js」を観た|laiso" 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://kumagi.hatenablog.com/entry/imaginary-nft"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://kumagi.hatenablog.com/entry/imaginary-nft" 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%2Fkumagi.hatenablog.com%2Fentry%2Fimaginary-nft" alt="">Re: 空想のNFTと現実のNFT - Software Transactional Memo </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/kumagi.hatenablog.com/entry/imaginary-nft" class="js-keyboard-entry-page-openable" title="Re: 空想のNFTと現実のNFT - Software Transactional Memo (267 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 267 users </a> </span> </li> <li> <a href="/site/kumagi.hatenablog.com/" title="『kumagi.hatenablog.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> kumagi.hatenablog.com </a> </li> <li> <a href="/hotentry/economics" data-gtm-click-label="entry-search-result-item-category">政治と経済</a> </li> <li><span class="entry-contents-date">2022/02/14</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">前回の記事に長文で反論が付いていたので興味深く拝読した。 sasakill.substack.com 書いた人はSmartnews社のVice Presidentのようで、予想外のところまで記事がリーチしたのは少し驚いている。 メタバースはNFTの使い途の一部でしかなく、Web3によって完璧な非中央集権的な社会が実現するなんてこともない。 僕の記事では「メタバースにNFTは不要」と言ったのに「NFTにメタバースは不要」というような受け取られ方をしているあたりは少し気になるが、彼が論点に挙げたいのはメタバースでもWeb3でもなくNFT単体であるようだ。そのつもりで僕の意見をまとめる。 私の考えでは「ノーコストでコピーが可能」という議論の土台にそもそも穴がある。 繰り返すがコピーはやはりノーコストである。この記事の読者が自身のデバイスに僕の記事を表示させるまでのコピーに掛かった電気代・通信費の</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/NFT" data-gtm-click-label="entry-search-result-item-tag">NFT</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%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">ブロックチェーン</a></li> <li><a href="/q/%E3%83%A1%E3%82%BF%E3%83%90%E3%83%BC%E3%82%B9" data-gtm-click-label="entry-search-result-item-tag">メタバース</a></li> <li><a href="/q/blockchain" data-gtm-click-label="entry-search-result-item-tag">blockchain</a></li> <li><a href="/q/%E4%BB%AE%E6%83%B3%E9%80%9A%E8%B2%A8" 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%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2" data-gtm-click-label="entry-search-result-item-tag">ソフトウェア</a></li> <li><a href="/q/tech" data-gtm-click-label="entry-search-result-item-tag">tech</a></li> <li><a href="/q/technology" data-gtm-click-label="entry-search-result-item-tag">technology</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://kumagi.hatenablog.com/entry/imaginary-nft"> <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://kumagi.hatenablog.com/entry/imaginary-nft" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/56f682b00636967716a916b5ecf1e8f35e1c1ed8/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F13208692334729899703%2F13574176438063280990%2F1644804168" alt="Re: 空想のNFTと現実のNFT - Software Transactional Memo" 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://president.jp/articles/-/63967"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://president.jp/articles/-/63967" 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%2Fpresident.jp%2Farticles%2F-%2F63967" alt="">「上司はムダな存在でしかない」と思っていたが…管理職を全廃したグーグルがたった1年で元に戻した理由 人は「完全に自由」になると不安になる </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/president.jp/articles/-/63967" class="js-keyboard-entry-page-openable" title="「上司はムダな存在でしかない」と思っていたが…管理職を全廃したグーグルがたった1年で元に戻した理由 人は「完全に自由」になると不安になる (253 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 253 users </a> </span> </li> <li> <a href="/site/president.jp/" title="『president.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> president.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/12/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">「Web3」は巨大企業の独占支配を変えられるのか 大手IT企業による「支配と隷従」に対抗しようという動きが、二〇二〇年代になって活発になってきた。それが「Web3(ウェブ3)」と呼ばれるムーブメントである。ウェブ3はインターネットがふたたび「支配と隷従」へと回帰してきていることに対して、「自由」へと揺り戻そうという思想を持っている。 ウェブ3について、できるだけわかりやすく説明していこう。ウェブ3は、ビットコインで有名な技術、ブロックチェーンを中心に考えられている新たなインターネットである。 ブロックチェーンというのは、ごく単純化して説明すると、「あらゆる取引が記録されている台帳」である。そしてこの台帳は、GAFAMのようなビッグテックが独占所有しているのではない。ビッグテックのサーバーに保存されているのではない。そうではなく、インターネットで相互につながった無数のコンピューターに、同時に</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E7%B5%84%E7%B9%94" 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/google" data-gtm-click-label="entry-search-result-item-tag">google</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/%E4%BC%81%E6%A5%AD" data-gtm-click-label="entry-search-result-item-tag">企業</a></li> <li><a href="/q/%E3%83%9E%E3%83%8D%E3%82%B8%E3%83%A1%E3%83%B3%E3%83%88" data-gtm-click-label="entry-search-result-item-tag">マネジメント</a></li> <li><a href="/q/work" data-gtm-click-label="entry-search-result-item-tag">work</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://president.jp/articles/-/63967"> <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://president.jp/articles/-/63967" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/01a4b707e115f268d9e9eb0821fa4eb4200b4f29/height=288;version=1;width=512/https%3A%2F%2Fpresident.ismcdn.jp%2Fmwimgs%2Fd%2Fa%2F1200wm%2Fimg_daf8657559756883e7e84b573368fbf91024703.jpg" alt="「上司はムダな存在でしかない」と思っていたが…管理職を全廃したグーグルがたった1年で元に戻した理由 人は「完全に自由」になると不安になる" 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/katsumanarisawa/articles/3e053fe3627b5b"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/katsumanarisawa/articles/3e053fe3627b5b" 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%2Fkatsumanarisawa%2Farticles%2F3e053fe3627b5b" alt="">TypeScriptでWebサービス開発(Apollo Server/Prisma/Next.js etc...) </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/katsumanarisawa/articles/3e053fe3627b5b" class="js-keyboard-entry-page-openable" title="TypeScriptでWebサービス開発(Apollo Server/Prisma/Next.js etc...) (247 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 247 users </a> </span> </li> <li> <a href="/site/zenn.dev/katsumanarisawa" title="『zenn.dev/katsumanarisawa』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/katsumanarisawa </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/14</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">最近開発しているBtoB SaaSサービスの技術スタックを、RailsからNode.jsに移行した。 これにより、フロントエンドもバックエンドも全てをTypeScriptで統一することができた。 特にNode.jsのWebバックエンドの構成について、まだまだ世の中に知見が少ない気がしているので記事にしておく。 Webバックエンド - Node.js(TypeScript) Nexus/Apollo Server (Webサーバー) GraphQLサーバーとして、Apollo ServerのコードファーストなアプローチでのラッパーであるNexusを使っている。 Railsからの移行を決断できたのも、Apollo ServerとPrismaにより、外部との通信が型付きで、かつ開発体験よく書けるようになたから、というのが大きくある。 数年前の段階だと、素のexpressを使ってWebサーバーを立</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/GraphQL" data-gtm-click-label="entry-search-result-item-tag">GraphQL</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/node" data-gtm-click-label="entry-search-result-item-tag">node</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/Prisma" data-gtm-click-label="entry-search-result-item-tag">Prisma</a></li> <li><a href="/q/React" data-gtm-click-label="entry-search-result-item-tag">React</a></li> <li><a href="/q/Next" data-gtm-click-label="entry-search-result-item-tag">Next</a></li> <li><a href="/q/Apollo" data-gtm-click-label="entry-search-result-item-tag">Apollo</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/katsumanarisawa/articles/3e053fe3627b5b"> <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/katsumanarisawa/articles/3e053fe3627b5b" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/ab84e189a2ba7175b498cd70d91112c9967183ed/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--Ugs-6-xm--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ATypeScript%2525E3%252581%2525A7Web%2525E3%252582%2525B5%2525E3%252583%2525BC%2525E3%252583%252593%2525E3%252582%2525B9%2525E9%252596%25258B%2525E7%252599%2525BA%2525EF%2525BC%252588Apollo%252520Server%25252FPrisma%25252FNext.js%252520etc...%252529%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3AKatsuma%252520Narisawa%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2dGd2NYR1FfN2V4bjdjdjY0OVh1cXBJMUZtcFF5ejQ1aTNIbE81Z3c9czI1MC1j%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="TypeScriptでWebサービス開発(Apollo Server/Prisma/Next.js etc...)" 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/kanasugi/articles/a082bd39c5bdf2"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/kanasugi/articles/a082bd39c5bdf2" 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%2Fkanasugi%2Farticles%2Fa082bd39c5bdf2" alt="">Prisma: Node.js &amp; TypeScript向けの完璧なORM </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/kanasugi/articles/a082bd39c5bdf2" class="js-keyboard-entry-page-openable" title="Prisma: Node.js &amp; TypeScript向けの完璧なORM (239 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 239 users </a> </span> </li> <li> <a href="/site/zenn.dev/kanasugi" title="『zenn.dev/kanasugi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/kanasugi </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/25</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">本記事は、@nikolasburk氏による「The Complete ORM for Node.js &amp; TypeScript」(2021年4月21日公開)の日本語翻訳を、著者の許可を得て掲載しているものです。今後Prismaの公式ブログの日本語翻訳の許可をいただいたので、このアカウントで継続して翻訳していきます。※画像やリンクは公式のBlogからお借りしています。 Prismaは、Node.jsとTypeScriptのための次世代ORMです。2年以上の開発期間を経て、すべてのPrismaツールが製品化の準備が整ったことをお伝えできることに興奮しています! コンテンツ オブジェクト-リレーショナルマッピングの新しいパラダイム あらゆるスタックに対応するPrisma ミッションクリティカルなアプリケーションでの運用に対応 オープンソースを超えて お手伝いできることは? Prismaを始めよう</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/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/Prisma" data-gtm-click-label="entry-search-result-item-tag">Prisma</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/Node.js" data-gtm-click-label="entry-search-result-item-tag">Node.js</a></li> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/node" data-gtm-click-label="entry-search-result-item-tag">node</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" 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%84%E3%83%BC%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://zenn.dev/kanasugi/articles/a082bd39c5bdf2"> <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/kanasugi/articles/a082bd39c5bdf2" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/14e25aefd6d6f54c7d04ac2b81453f386d0bf0bf/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--VW_pzA83--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3APrisma%25253A%252520Node.js%252520%252526%252520TypeScript%2525E5%252590%252591%2525E3%252581%252591%2525E3%252581%2525AE%2525E5%2525AE%25258C%2525E7%252592%2525A7%2525E3%252581%2525AAORM%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3AKanasugi%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2QzMGY4Y2Q4ZjguanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Prisma: Node.js &amp; TypeScript向けの完璧なORM" 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/yasaichi/directions-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/yasaichi/directions-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record" 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%2Fyasaichi%2Fdirections-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record" alt="">Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/yasaichi/directions-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record" class="js-keyboard-entry-page-openable" title="Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record (230 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 230 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/yasaichi" title="『speakerdeck.com/yasaichi』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/yasaichi </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/29</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">January 29, 2021 @ 銀座Rails #29</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</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/ruby" data-gtm-click-label="entry-search-result-item-tag">ruby</a></li> <li><a href="/q/architecture" data-gtm-click-label="entry-search-result-item-tag">architecture</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/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/ActiveRecord" data-gtm-click-label="entry-search-result-item-tag">ActiveRecord</a></li> <li><a href="/q/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">ドメイン</a></li> <li><a href="/q/Slide" data-gtm-click-label="entry-search-result-item-tag">Slide</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/yasaichi/directions-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record"> <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/yasaichi/directions-for-the-next-generation-of-ruby-on-rails-from-the-viewpoint-of-its-active-record" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a8884eba9c9a1897f09451286b8ae90b4f050bca/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Ff8074ebe4b854da793835d856d9cb331%2Fslide_0.jpg%3F17253534" alt="Active Recordから考える次世代のRuby on Railsの方向性 / Directions for the next generation of Ruby on Rails: From the viewpoint of its Active Record" 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/qsona/architecture-decision-for-the-next-n-years-at-studysapuri"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/qsona/architecture-decision-for-the-next-n-years-at-studysapuri" 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%2Fqsona%2Farchitecture-decision-for-the-next-n-years-at-studysapuri" alt="">GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/qsona/architecture-decision-for-the-next-n-years-at-studysapuri" class="js-keyboard-entry-page-openable" title="GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri (218 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 218 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/qsona" title="『speakerdeck.com/qsona』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/qsona </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/11/27</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">JSConf JP 2021 で登壇した資料です #jsconfjp #jsconfjp_b Links: [Active Recordから考える次の10年を見据えた技術選定](https://speakerdeck.com/yasaichi/architecture-decision-for-…</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/GraphQL" data-gtm-click-label="entry-search-result-item-tag">GraphQL</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</a></li> <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/architecture" data-gtm-click-label="entry-search-result-item-tag">architecture</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/DataBase" data-gtm-click-label="entry-search-result-item-tag">DataBase</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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/qsona/architecture-decision-for-the-next-n-years-at-studysapuri"> <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/qsona/architecture-decision-for-the-next-n-years-at-studysapuri" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/0553dc53293408ec79b2c5a02b6d3275c77e762a/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F80effab591774e19aef91fedfcb7f2b9%2Fslide_0.jpg%3F19673293" alt="GraphQL と Prisma から考える次のN年を見据えた技術選定 / Architecture decision for the next N years at StudySapuri" 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/jun1s/items/519e5c10ff6100b63352"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/jun1s/items/519e5c10ff6100b63352" 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%2Fjun1s%2Fitems%2F519e5c10ff6100b63352" alt="">オブジェクト指向は業務システムで本当に不要なのか? - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/jun1s/items/519e5c10ff6100b63352" class="js-keyboard-entry-page-openable" title="オブジェクト指向は業務システムで本当に不要なのか? - Qiita (218 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 218 users </a> </span> </li> <li> <a href="/site/qiita.com/jun1s" title="『qiita.com/jun1s』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/jun1s </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/02/12</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 主旨 以前はシステムの状態をオブジェクト指向でカプセル化し、オブジェクト同士の通信でシステムの制御をしようとしていた しかし、Webアプリケーションのように状態をメモリ上に保持し続けるのが難しい環境が増えると、上記のことがやりにくくなった(ORMのインピーダンスミスマッチの影響が大きくなった) 現在では、システム全体の状態を管理するためにオブジェクト指向を用いるシーンは減っているが、要所要所でシステムを抽象化する道具の一つとして用いるシーンはあり、適材適所で使い続ければ良い はじめに 一時期あれだけもてはやされた「オブジェクト指向」です</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91" 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%A8%AD%E8%A8%88" 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%B7%E3%82%B9%E3%83%86%E3%83%A0" 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> <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/jun1s/items/519e5c10ff6100b63352"> <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/jun1s/items/519e5c10ff6100b63352" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/84ca3202cc890501aeb0209bb08f2204c6dc5701/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%253DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMjA3MDM4JTJGcHJvZmlsZS1pbWFnZXMlMkYxNjI2Njk0MjA3P2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZmbT1wbmczMiZzPTc4M2U1OGE4NzkwZDExZmM2NTQ5NmQwMDkzODUyZTUx%2526blend-x%253D120%2526blend-y%253D467%2526blend-w%253D82%2526blend-h%253D82%2526blend-mode%253Dnormal%2526s%253D5c89ee75fb40dfa45a0531dd0c6f3d98%3Fixlib%3Drb-4.0.0%26w%3D1200%26fm%3Djpg%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUUzJTgyJUFBJUUzJTgzJTk2JUUzJTgyJUI4JUUzJTgyJUE3JUUzJTgyJUFGJUUzJTgzJTg4JUU2JThDJTg3JUU1JTkwJTkxJUUzJTgxJUFGJUU2JUE1JUFEJUU1JThCJTk5JUUzJTgyJUI3JUUzJTgyJUI5JUUzJTgzJTg2JUUzJTgzJUEwJUUzJTgxJUE3JUU2JTlDJUFDJUU1JUJEJTkzJUUzJTgxJUFCJUU0JUI4JThEJUU4JUE2JTgxJUUzJTgxJUFBJUUzJTgxJUFFJUUzJTgxJThCJUVGJUJDJTlGJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9YTE5YjQ4NDI5NWRjYTljN2VhNDU0MWFjOTg1MTFmNzM%26mark-x%3D120%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBqdW4xcyZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTczMjVlNTIwZmUzNGVmOWRhYTkxZDkyODBkNDIzZTlk%26blend-x%3D242%26blend-y%3D480%26blend-w%3D838%26blend-h%3D46%26blend-fit%3Dcrop%26blend-crop%3Dleft%252Cbottom%26blend-mode%3Dnormal%26s%3Dbba7ca48f40b16abc29574540e82c4c8" alt="オブジェクト指向は業務システムで本当に不要なのか? - 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/tockn/articles/0e6eac6220e072"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/tockn/articles/0e6eac6220e072" 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%2Ftockn%2Farticles%2F0e6eac6220e072" alt="">生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/tockn/articles/0e6eac6220e072" class="js-keyboard-entry-page-openable" title="生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」 (217 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 217 users </a> </span> </li> <li> <a href="/site/zenn.dev/tockn" title="『zenn.dev/tockn』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/tockn </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/08/28</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">生SQLを扱う $queryRaw TypeScript向けのORMライブラリとしてPrismaがあります。Prismaは直感的で型安全なAPIを提供し、TypeScript向けのORMとしては第一に名前が上がることが多いライブラリです。 しかしそんな人気なPrismaでも、裏側では少しクセのあるSQLが発行されていたり、欲しいSQLがPrismaのAPIでは実現できない場合があります。 そういった場合のために $queryRaw というメソッドが用意されており、これを使うことで生SQLを書いてその結果を受け取ることができました。他のORMにもよくある機能です。 例えば以下のように実装することができます。 const users = await prisma.$queryRaw` SELECT id, name FROM &quot;Users&quot; WHERE id = ${userID} `; co</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/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</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/%E6%9C%AA%E5%88%86%E9%A1%9E" data-gtm-click-label="entry-search-result-item-tag">未分類</a></li> <li><a href="/q/db" data-gtm-click-label="entry-search-result-item-tag">db</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/tockn/articles/0e6eac6220e072"> <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/tockn/articles/0e6eac6220e072" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/63259f39849cf8cc8de40747088a9be7a0c5fc4a/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--SJodKuel--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3A%2525E7%252594%25259FSQL%2525E3%252581%2525AB%2525E5%25259E%25258B%2525E3%252582%252592%2525E6%252589%25258B%2525E6%25259B%2525B8%2525E3%252581%25258D%2525E3%252581%252599%2525E3%252582%25258B%2525E6%252599%252582%2525E4%2525BB%2525A3%2525E3%252581%2525AF%2525E7%2525B5%252582%2525E3%252582%25258F%2525E3%252582%25258A%2525EF%2525BC%25259FPrisma%2525E3%252581%2525AE%2525E6%252596%2525B0%2525E6%2525A9%25259F%2525E8%252583%2525BD%2525E3%252580%25258CTypedSQL%2525E3%252580%25258D%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Atockn%252520%25257C%252520Cloudbase%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzcwMzc2NjgwYTkuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="生SQLに型を手書きする時代は終わり?Prismaの新機能「TypedSQL」" 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://tech.andpad.co.jp/entry/2022/02/18/140000"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://tech.andpad.co.jp/entry/2022/02/18/140000" 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%2Ftech.andpad.co.jp%2Fentry%2F2022%2F02%2F18%2F140000" alt="">Gormにおける「仕様通り」なSQLインジェクションの恐れのある実装についての注意喚起 - ANDPAD Tech Blog </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/tech.andpad.co.jp/entry/2022/02/18/140000" class="js-keyboard-entry-page-openable" title="Gormにおける「仕様通り」なSQLインジェクションの恐れのある実装についての注意喚起 - ANDPAD Tech Blog (197 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 197 users </a> </span> </li> <li> <a href="/site/tech.andpad.co.jp/" title="『tech.andpad.co.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> tech.andpad.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">2022/02/18</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">ANDPADボードチームの原田(tomtwinkle)です。 Node.jsの mysqljs/mysql の仕様に起因するSQLインジェクションが話題に上がっていたので、それGolangのORMであるGormでも同じような「仕様」があるよ! という注意喚起の意味も込めて筆を執りました。 ※ 2022/02/21追記 コードレビューを自動化して指摘してもらう記事を公開しました! tech.andpad.co.jp Node.jsのMySQLパッケージにおけるエスケープ処理だけでは防げない「隠れた」SQLインジェクション | 株式会社Flatt Security TL;DR GormのQuery Conditions関数に関する危険な仕様 対策 締め TL;DR GormのConditions関数(Find, First, Delete...)を使用する際、第2引数の値にStringを引き渡</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</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/gorm" data-gtm-click-label="entry-search-result-item-tag">gorm</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/SQL%E3%82%A4%E3%83%B3%E3%82%B8%E3%82%A7%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">SQLインジェクション</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/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" 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://tech.andpad.co.jp/entry/2022/02/18/140000"> <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://tech.andpad.co.jp/entry/2022/02/18/140000" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/1987299a3ee1f44f2b8c947832030c967dd1a102/height=288;version=1;width=512/https%3A%2F%2Fogimage.blog.st-hatena.com%2F10257846132670914347%2F13574176438064454745%2F1645799661" alt="Gormにおける「仕様通り」なSQLインジェクションの恐れのある実装についての注意喚起 - ANDPAD Tech 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://zenn.dev/seihmd/articles/0283137fcfb6a2a925d1"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/seihmd/articles/0283137fcfb6a2a925d1" 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%2Fseihmd%2Farticles%2F0283137fcfb6a2a925d1" alt="">DDDとORMのEntityを混同しないための考え方 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/seihmd/articles/0283137fcfb6a2a925d1" class="js-keyboard-entry-page-openable" title="DDDとORMのEntityを混同しないための考え方 (178 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 178 users </a> </span> </li> <li> <a href="/site/zenn.dev/seihmd" title="『zenn.dev/seihmd』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/seihmd </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/17</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">2つの ”Entity” ある種の ORM では RDB のテーブルスキーマモデルとなるクラスのことをEntityと呼んでいます。例えば PHP のDoctrineや TypeScript のTypeORMなどがそうです。 そういった ORM を採用したプロジェクトで DDD に取り組むとき困るのが用語の衝突です。ORM の Entity は RDB のための定義を含むため当然 DDD の Entity とは異なるのですが、なにぶん同じ名前なので混同してしまいがちです。 本記事では両者を混同せず扱うための考え方をまとめます。 Entity の定義 まずは定義から確認します。 DDD での定義 エヴァンス本の日本語訳から引用します。 主として同一性によって定義されるオブジェクトはエンティティと呼ばれる Eric Evans. エリック・エヴァンスのドメイン駆動設計 (Japanese Edi</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/DDD" data-gtm-click-label="entry-search-result-item-tag">DDD</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</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/db" data-gtm-click-label="entry-search-result-item-tag">db</a></li> <li><a href="/q/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" data-gtm-click-label="entry-search-result-item-tag">ドメイン</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/%E9%96%8B%E7%99%BA" data-gtm-click-label="entry-search-result-item-tag">開発</a></li> <li><a href="/q/tech" data-gtm-click-label="entry-search-result-item-tag">tech</a></li> <li><a href="/q/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%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://zenn.dev/seihmd/articles/0283137fcfb6a2a925d1"> <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/seihmd/articles/0283137fcfb6a2a925d1" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e2710a35b809049084fe3718226db49b364b1087/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--0LKQPmSR--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ADDD%2525E3%252581%2525A8ORM%2525E3%252581%2525AEEntity%2525E3%252582%252592%2525E6%2525B7%2525B7%2525E5%252590%25258C%2525E3%252581%252597%2525E3%252581%2525AA%2525E3%252581%252584%2525E3%252581%25259F%2525E3%252582%252581%2525E3%252581%2525AE%2525E8%252580%252583%2525E3%252581%252588%2525E6%252596%2525B9%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Aseihmd%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2Q4NTBhODRjMWYuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="DDDとORMのEntityを混同しないための考え方" 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/TsJazz27Sumin/items/da1907073d0fadacbdb0"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://qiita.com/TsJazz27Sumin/items/da1907073d0fadacbdb0" 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%2FTsJazz27Sumin%2Fitems%2Fda1907073d0fadacbdb0" alt="">Goで開発していたが、途中でPythonに切り替えた件を振り返る。 - Qiita </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/qiita.com/TsJazz27Sumin/items/da1907073d0fadacbdb0" class="js-keyboard-entry-page-openable" title="Goで開発していたが、途中でPythonに切り替えた件を振り返る。 - Qiita (177 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 177 users </a> </span> </li> <li> <a href="/site/qiita.com/TsJazz27Sumin" title="『qiita.com/TsJazz27Sumin』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> qiita.com/TsJazz27Sumin </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/01</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">イントロダクション 目下、開発中のプロダクトなので詳しいことは書けないのですが、いろいろと気付きの多い出来事だったので、 少し自分自信の振り返りも兼ねて、投稿してみたいと思います。 これは、決してGoよりPythonのほうが優れているとかそういった話ではないです。 今回、自分は開発者というよりプロジェクトマネージャー(以降、PM)という立場になります。 Goの採用 当社のコア技術はPythonなのですが、今回、開発にあたってGoを採用していました。 主な採用理由としては、「プロトコルとしてgRPCを採用するにあたって、gRPCとの組み合わせ事例が多い」からでした。 gRPCの採用理由は、「同時に企画されていた別プロダクト(Python)との連携が想定されており、異なるプログラミング言語間でも型を維持したままデータ交換が可能」なことからでした。 当初は、プロダクトのリリース時期も未定でプロト</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/python" data-gtm-click-label="entry-search-result-item-tag">python</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/golang" data-gtm-click-label="entry-search-result-item-tag">golang</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/Go%E8%A8%80%E8%AA%9E" data-gtm-click-label="entry-search-result-item-tag">Go言語</a></li> <li><a href="/q/qiita" data-gtm-click-label="entry-search-result-item-tag">qiita</a></li> <li><a href="/q/gRPC" data-gtm-click-label="entry-search-result-item-tag">gRPC</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://qiita.com/TsJazz27Sumin/items/da1907073d0fadacbdb0"> <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/TsJazz27Sumin/items/da1907073d0fadacbdb0" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/7e8a4f1588379e2ab80e3f37ec94d7f8c78e46a4/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-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9R28lRTMlODElQTclRTklOTYlOEIlRTclOTklQkElRTMlODElOTclRTMlODElQTYlRTMlODElODQlRTMlODElOUYlRTMlODElOEMlRTMlODAlODElRTklODAlOTQlRTQlQjglQUQlRTMlODElQTdQeXRob24lRTMlODElQUIlRTUlODglODclRTMlODIlOEElRTYlOUIlQkYlRTMlODElODglRTMlODElOUYlRTQlQkIlQjYlRTMlODIlOTIlRTYlOEMlQUYlRTMlODIlOEElRTglQkYlOTQlRTMlODIlOEIlRTMlODAlODImdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZzPTFmMGIzNTE1MjkxNmI0ZjhjZmY1ZDM2MGRlNWMxNTIw%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDBUc0phenoyN1N1bWluJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0zOTcxMTQ5MzdmN2VmNTk2MDNhM2RjMjViZjhkOWEwMA%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3Dc536bb86bed1e70488d9327e7625455e" alt="Goで開発していたが、途中でPythonに切り替えた件を振り返る。 - 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://speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" 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%2Ftockn%2Fprisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" alt="">Prisma ORMを2年運用して培ったノウハウを共有する </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" class="js-keyboard-entry-page-openable" title="Prisma ORMを2年運用して培ったノウハウを共有する (165 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 165 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/tockn" title="『speakerdeck.com/tockn』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/tockn </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/05/11</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">TSKaigi 2024 ref: https://tskaigi.org/talks/tockn</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/Prisma" data-gtm-click-label="entry-search-result-item-tag">Prisma</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/typescript" data-gtm-click-label="entry-search-result-item-tag">typescript</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</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/slide" data-gtm-click-label="entry-search-result-item-tag">slide</a></li> <li><a href="/q/DB" data-gtm-click-label="entry-search-result-item-tag">DB</a></li> <li><a href="/q/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru"> <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/tockn/prisma-ormwo2nian-yun-yong-sitepei-tutanouhauwogong-you-suru" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e01e01d37d8382a10d67c94078a00e06a8c428f6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F7c6c5ab6613343eeb15a2124bba68e3a%2Fslide_0.jpg%3F30043160" alt="Prisma ORMを2年運用して培ったノウハウを共有する" 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://songmu.jp/riji/entry/2021-02-03-go-sql-embed-comment.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://songmu.jp/riji/entry/2021-02-03-go-sql-embed-comment.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%2Fsongmu.jp%2Friji%2Fentry%2F2021-02-03-go-sql-embed-comment.html" alt="">GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/songmu.jp/riji/entry/2021-02-03-go-sql-embed-comment.html" class="js-keyboard-entry-page-openable" title="GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々 (163 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 163 users </a> </span> </li> <li> <a href="/site/songmu.jp/" title="『songmu.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> songmu.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/02/03</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">アプリケーションが発行するSQLにコメントが埋め込めると便利です。例えば、 /* path/to/logic.go:334 */ SELECT ... のようにSQLに発行元の情報をコメントとして埋め込んでからExecすれば、DB側のログ(general log等)にも記録されるため、SREやDREサイドからも、負荷の高いSQLがアプリケーションのどこから発行されているかが分かりやすくなります。 Goには github.com/shogo82148/go-sql-proxy という、SQL実行をトレースし、フック処理を差し込める便利なライブラリがありますが、今回それにpull requestを送って、SQL実行前にクエリの書き換えができるようにしました。 https://github.com/shogo82148/go-sql-proxy/pull/61 https://github.co</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/sql" data-gtm-click-label="entry-search-result-item-tag">sql</a></li> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</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/github" data-gtm-click-label="entry-search-result-item-tag">github</a></li> <li><a href="/q/debug" data-gtm-click-label="entry-search-result-item-tag">debug</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/proxy" data-gtm-click-label="entry-search-result-item-tag">proxy</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/performance" data-gtm-click-label="entry-search-result-item-tag">performance</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://songmu.jp/riji/entry/2021-02-03-go-sql-embed-comment.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://songmu.jp/riji/entry/2021-02-03-go-sql-embed-comment.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/44fc27d71b62444cac921d824d82f54b46f499e2/height=288;version=1;width=512/https%3A%2F%2Fsongmu.jp%2Friji%2Fstatic%2Fimg%2Fsongmu-ogp.jpg" alt="GoでSQLにトレーシングコメントを埋め込んで実行する | おそらくはそれさえも平凡な日々" 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/cbe81299e145491676f8"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mizchi/articles/cbe81299e145491676f8" 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%2Fcbe81299e145491676f8" alt="">blitz-js prisma rails 倒し方 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mizchi/articles/cbe81299e145491676f8" class="js-keyboard-entry-page-openable" title="blitz-js prisma rails 倒し方 (161 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 161 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">2020/09/28</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">この記事の内容 blitz-js が生まれた背景 prisma の紹介 blitz で簡単なブログを作ってみる blitz を vercel にデプロイしてみる tldr blitz-js は next.js + prisma で rails を再現しようとしているフレームワーク Prisma ORM それ自体が良い。blitz の理解のためにも、まず Prisma を学べ blitz-js 自体はまだ α 品質だけど、今から注目しておく価値はある。デファクトになるかは不明。思想は継承されそう。 はじめに next.js はとても良いフレームワークだが、永続層を持たない。なのでフロントエンドとフロントサーバーに閉じている。 永続層、つまり DB を持たないので、初学者や流行りのプログラミングスクールの教材に選ばれない。また、JavaScript の学習資料が散らばっている。 要は Rail</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/blitz" data-gtm-click-label="entry-search-result-item-tag">blitz</a></li> <li><a href="/q/react" data-gtm-click-label="entry-search-result-item-tag">react</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/rails" data-gtm-click-label="entry-search-result-item-tag">rails</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</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/typescript" data-gtm-click-label="entry-search-result-item-tag">typescript</a></li> <li><a href="/q/Next.js" data-gtm-click-label="entry-search-result-item-tag">Next.js</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</a></li> <li><a href="/q/node.js" data-gtm-click-label="entry-search-result-item-tag">node.js</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mizchi/articles/cbe81299e145491676f8"> <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/cbe81299e145491676f8" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/3ba39141a2422a44ab2f6d74f84083702e0562ab/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--8JjSa1HO--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3Ablitz-js%252520prisma%252520rails%252520%2525E5%252580%252592%2525E3%252581%252597%2525E6%252596%2525B9%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="blitz-js prisma rails 倒し方" 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://vercel.com/guides/nextjs-prisma-postgres"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://vercel.com/guides/nextjs-prisma-postgres" 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%2Fvercel.com%2Fguides%2Fnextjs-prisma-postgres" alt="">How to Build a Fullstack App with Next.js, Prisma, &amp; PostgreSQL </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/vercel.com/guides/nextjs-prisma-postgres" class="js-keyboard-entry-page-openable" title="How to Build a Fullstack App with Next.js, Prisma, &amp; PostgreSQL (156 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 156 users </a> </span> </li> <li> <a href="/site/vercel.com/" title="『vercel.com』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> vercel.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">2021/01/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">How to Build a Fullstack App with Next.js, Prisma, and Vercel Postgres Prisma is a next-generation ORM that can be used to access a database in Node.js and TypeScript applications. In this guide, you&#39;ll learn how to implement a sample fullstack blogging application using the following technologies: Next.js as the React frameworkNext.js API Routes for server-side API routes as the backendPrisma as</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/Vercel" data-gtm-click-label="entry-search-result-item-tag">Vercel</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</a></li> <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/nextjs" data-gtm-click-label="entry-search-result-item-tag">nextjs</a></li> <li><a href="/q/postgresql" data-gtm-click-label="entry-search-result-item-tag">postgresql</a></li> <li><a href="/q/js" data-gtm-click-label="entry-search-result-item-tag">js</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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://vercel.com/guides/nextjs-prisma-postgres"> <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://vercel.com/guides/nextjs-prisma-postgres" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/991bdf2eefe05c39afae8cd370ab2d322f346fb9/height=288;version=1;width=512/https%3A%2F%2Fvercel.com%2Fapi%2Fdynamic-og%3Ftitle%3DHow%2520to%2520Build%2520a%2520Fullstack%2520App%2520with%2520Next.js%252C%2520Prisma%252C%2520and%2520Vercel%2520Postgres" alt="How to Build a Fullstack App with Next.js, Prisma, &amp; PostgreSQL" 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/eringiv3/books/a85174531fd56a"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/eringiv3/books/a85174531fd56a" 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%2Feringiv3%2Fbooks%2Fa85174531fd56a" alt="">Apollo ServerとPrismaではじめるGraphQL API開発入門 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/eringiv3/books/a85174531fd56a" class="js-keyboard-entry-page-openable" title="Apollo ServerとPrismaではじめるGraphQL API開発入門 (153 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 153 users </a> </span> </li> <li> <a href="/site/zenn.dev/eringiv3" title="『zenn.dev/eringiv3』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/eringiv3 </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/21</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">この本では、TypeScriptで型安全にGraphQLサーバーを構築する方法をハンズオン形式で学習することができます。 Todoアプリの開発を通して、GraphQLスキーマの扱いやCLIツールの設定方法、TypeScriptのORMであるPrismaの基本的な使用方法、CI/CDパイプラインの構築によるマイグレーションの自動化などを体験します。 GraphQLサーバー実装の素振りをしておきたい方や、フロントエンドからGraphQL APIを使用したことはあるけど自分でAPIを実装したことはないようなバックエンドの開発初心者の方に向けた内容となっております。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/GraphQL" data-gtm-click-label="entry-search-result-item-tag">GraphQL</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/typescript" data-gtm-click-label="entry-search-result-item-tag">typescript</a></li> <li><a href="/q/api" data-gtm-click-label="entry-search-result-item-tag">api</a></li> <li><a href="/q/%E5%AD%A6%E7%BF%92" data-gtm-click-label="entry-search-result-item-tag">学習</a></li> <li><a href="/q/ci" data-gtm-click-label="entry-search-result-item-tag">ci</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://zenn.dev/eringiv3/books/a85174531fd56a"> <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/eringiv3/books/a85174531fd56a" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/5cf3beb44b00b828d8beea5f33f758649f2304e4/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--2BFbdGWQ--%2Fg_center%252Ch_280%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYm9va19jb3Zlci80ZmZmNDlhOGExLmpwZw%3D%3D%252Cw_200%2Fv1627283836%2Fdefault%2Fog-base-book_yz4z02.jpg" alt="Apollo ServerとPrismaではじめるGraphQL API開発入門" 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/naohiro.fujie/identra-verified-id"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.slideshare.net/naohiro.fujie/identra-verified-id" 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%2Fnaohiro.fujie%2Fidentra-verified-id" alt="">今なら間に合う分散型IDとEntra Verified ID </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.slideshare.net/naohiro.fujie/identra-verified-id" class="js-keyboard-entry-page-openable" title="今なら間に合う分散型IDとEntra Verified ID (136 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 136 users </a> </span> </li> <li> <a href="/site/www.slideshare.net/naohiro.fujie" title="『www.slideshare.net/naohiro.fujie』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.slideshare.net/naohiro.fujie </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/07/01</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">6/30のOffice365勉強会のEntra Verified ID特集の資料です。 分散型ID、Entra Verified IDの解説をしています。Read less</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/%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%88%86%E6%95%A3%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0" data-gtm-click-label="entry-search-result-item-tag">分散システム</a></li> <li><a href="/q/id" data-gtm-click-label="entry-search-result-item-tag">id</a></li> <li><a href="/q/identity" data-gtm-click-label="entry-search-result-item-tag">identity</a></li> <li><a href="/q/security" data-gtm-click-label="entry-search-result-item-tag">security</a></li> <li><a href="/q/%E5%9E%8B" data-gtm-click-label="entry-search-result-item-tag">型</a></li> <li><a href="/q/microsoft" data-gtm-click-label="entry-search-result-item-tag">microsoft</a></li> <li><a href="/q/blockchain" data-gtm-click-label="entry-search-result-item-tag">blockchain</a></li> <li><a href="/q/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%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://www.slideshare.net/naohiro.fujie/identra-verified-id"> <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/naohiro.fujie/identra-verified-id" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/685e2af2708164e4338f7935244a41a7ac3d1e91/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fentraverifiedidfujiepub-220630135739-f79437df-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds" alt="今なら間に合う分散型IDとEntra Verified ID" 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/hoto17296/orm-toxiang-kihe-u"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/hoto17296/orm-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%2Fhoto17296%2Form-toxiang-kihe-u" alt="">ORM と向き合う </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/hoto17296/orm-toxiang-kihe-u" class="js-keyboard-entry-page-openable" title="ORM と向き合う (136 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 136 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/hoto17296" title="『speakerdeck.com/hoto17296』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/hoto17296 </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/09/28</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">PyCon JP 2024 ※ 資料中で絵文字を使用したら SpeakerDeck アップロード時になんか変なことになってしまいましたが気にしないでください</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/python" data-gtm-click-label="entry-search-result-item-tag">python</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/db" data-gtm-click-label="entry-search-result-item-tag">db</a></li> <li><a href="/q/orm" data-gtm-click-label="entry-search-result-item-tag">orm</a></li> <li><a href="/q/sql" data-gtm-click-label="entry-search-result-item-tag">sql</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%9C%AA%E5%88%86%E9%A1%9E" data-gtm-click-label="entry-search-result-item-tag">未分類</a></li> <li><a href="/q/IT" data-gtm-click-label="entry-search-result-item-tag">IT</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://speakerdeck.com/hoto17296/orm-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/hoto17296/orm-toxiang-kihe-u" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/164cea8c8f20437fc560bc146132c8b6603697a6/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2F1a5ab32cb1eb4fa38725b8292b0c6b06%2Fslide_0.jpg%3F31915411" alt="ORM と向き合う" 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/1c35fdcc77065c02f631"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mizchi/articles/1c35fdcc77065c02f631" 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%2F1c35fdcc77065c02f631" alt="">Next.js から Prisma ORM を利用する </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mizchi/articles/1c35fdcc77065c02f631" class="js-keyboard-entry-page-openable" title="Next.js から Prisma ORM を利用する (108 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 108 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">2020/12/22</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Next.js に Prisma ORM を導入する方法について解説します。 Next.js プロジェクトの雛形を作成 $ mkdir hello-next-app &amp;&amp; cd hello-next-app $ npm init -y $ npm install next react react-dom --save $ npm install typescript @types/node @types/react --save-dev $ code src/index.tsx</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/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</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/TypeScript" data-gtm-click-label="entry-search-result-item-tag">TypeScript</a></li> <li><a href="/q/nextjs" data-gtm-click-label="entry-search-result-item-tag">nextjs</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/mizchi/articles/1c35fdcc77065c02f631"> <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/1c35fdcc77065c02f631" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/33b7e55ed621f3122b731d7a7c2273a85e97f7be/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--FA0483VS--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ANext.js%252520%2525E3%252581%25258B%2525E3%252582%252589%252520Prisma%252520ORM%252520%2525E3%252582%252592%2525E5%252588%2525A9%2525E7%252594%2525A8%2525E3%252581%252599%2525E3%252582%25258B%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="Next.js から Prisma ORM を利用する" 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://future-architect.github.io/articles/20210804a/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://future-architect.github.io/articles/20210804a/" 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%2Ffuture-architect.github.io%2Farticles%2F20210804a%2F" alt="">SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/future-architect.github.io/articles/20210804a/" class="js-keyboard-entry-page-openable" title="SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ (104 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 104 users </a> </span> </li> <li> <a href="/site/future-architect.github.io/" title="『future-architect.github.io』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> future-architect.github.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">2021/08/04</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">TIGの辻です。GoのORマッパー連載8日目です。本記事では sqlc を紹介します。早速ですが、結論から行きましょう。 sqlc まとめ SQLファイルからデータベースにアクセスできる型安全なGoのコードを生成するライブラリ 構造体のモデルの手書き実装不要 複数テーブルをJOINしたときのマッパー実装不要 生成されるコードは不要なリフレクションなし SQLをがんがん書きたい、でも面倒なマッパー構造体は書きたくない、という開発者にとっては大きな味方になります。 sqlc の紹介 sqlc はSQLファイルからGoのアプリケーションコードを生成するライブラリです。2020/2に v1.0.0 をリリースし、着々とスターを伸ばしています。2021/08現在は v1.8.0 をリリースしています。本資料で生成しているコードも v1.8.0 を用いています。 https://star-histor</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/sql" data-gtm-click-label="entry-search-result-item-tag">sql</a></li> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/db" data-gtm-click-label="entry-search-result-item-tag">db</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%9E%8B" data-gtm-click-label="entry-search-result-item-tag">型</a></li> <li><a href="/q/%E3%82%B3%E3%83%BC%E3%83%89" data-gtm-click-label="entry-search-result-item-tag">コード</a></li> <li><a href="/q/Database" data-gtm-click-label="entry-search-result-item-tag">Database</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://future-architect.github.io/articles/20210804a/"> <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://future-architect.github.io/articles/20210804a/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/214ae7b8159c2f412dcc933dcd5e266c852babb6/height=288;version=1;width=512/https%3A%2F%2Ffuture-architect.github.io%2Fimages%2F20210804a%2Fsqlc.png" alt="SQLファイルから型安全なコードを生成するsqlc | フューチャー技術ブログ" 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/mattn/articles/893f28eff96129"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mattn/articles/893f28eff96129" 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%2Fmattn%2Farticles%2F893f28eff96129" alt="">Go の入力バリデーションパッケージ ozzo-validation を試した。 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mattn/articles/893f28eff96129" class="js-keyboard-entry-page-openable" title="Go の入力バリデーションパッケージ ozzo-validation を試した。 (104 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 104 users </a> </span> </li> <li> <a href="/site/zenn.dev/mattn" title="『zenn.dev/mattn』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mattn </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/11/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに Go のウェブアプリで使う入力バリデーションに関して、ozzo-validation を検討した。 これまでのバリデーション 普段、仕事では labstack/echo という Go のウェブフレームワークを使う事が多いのだけど、バリデーションに関しては labstack/echo のサンプルに合わせて go-playground/validator を使ってきた。 go-playground/validator は機能も豊富で(一応)痒い所に手は届くのだけど、struct にタグを付けて判定させないといけない。これが実に煩わしい。以前 labstack/echo を使ったサンプルを書いたので、それを見て欲しい。 // Comment is a struct to hold unit of request and response. type Comment struct { I</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/validation" data-gtm-click-label="entry-search-result-item-tag">validation</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/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/JSON" data-gtm-click-label="entry-search-result-item-tag">JSON</a></li> <li><a href="/q/DB" data-gtm-click-label="entry-search-result-item-tag">DB</a></li> <li><a href="/q/dev" data-gtm-click-label="entry-search-result-item-tag">dev</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mattn/articles/893f28eff96129"> <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/mattn/articles/893f28eff96129" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/887687144d7155b02a0b4f2e75d679517a41e6e9/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--PE5hmHvW--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AGo%252520%2525E3%252581%2525AE%2525E5%252585%2525A5%2525E5%25258A%25259B%2525E3%252583%252590%2525E3%252583%2525AA%2525E3%252583%252587%2525E3%252583%2525BC%2525E3%252582%2525B7%2525E3%252583%2525A7%2525E3%252583%2525B3%2525E3%252583%252591%2525E3%252583%252583%2525E3%252582%2525B1%2525E3%252583%2525BC%2525E3%252582%2525B8%252520ozzo-validation%252520%2525E3%252582%252592%2525E8%2525A9%2525A6%2525E3%252581%252597%2525E3%252581%25259F%2525E3%252580%252582%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Amattn%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2IwYjA3ZWIzODAuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Go の入力バリデーションパッケージ ozzo-validation を試した。" 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/mattn/articles/1c4eb193d81a3a"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mattn/articles/1c4eb193d81a3a" 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%2Fmattn%2Farticles%2F1c4eb193d81a3a" alt="">Go と prisma と lit-html と ky で作るモダンな TODO アプリ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mattn/articles/1c4eb193d81a3a" class="js-keyboard-entry-page-openable" title="Go と prisma と lit-html と ky で作るモダンな TODO アプリ (100 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 100 users </a> </span> </li> <li> <a href="/site/zenn.dev/mattn" title="『zenn.dev/mattn』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/mattn </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/03/15</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに 以前から Go の ORM (Object Relational Mapping) 選定の為に、そこそこ時間を使っています。現状は gorp を使っていますが、満足している訳ではありません。 そんな中で見つけた prisma を試すべく、バックエンドに Go と prisma を使った TODO アプリを作ってみる事にしました。 prisma とは prisma (Next-generation ORM for Node.js and TypeScript)は簡単に言うと 自動生成された型付きのクライアントが付いている マイグレーションが出来る モデル定義から CRUD やインデックスを自動生成できる PostgreSQL, MySQL, SQLite3 等をサポート Prisma Studio という GUI が付いている というモダンな ORM です。Nuxt と TypeS</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</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/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/app" data-gtm-click-label="entry-search-result-item-tag">app</a></li> <li><a href="/q/html" data-gtm-click-label="entry-search-result-item-tag">html</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mattn/articles/1c4eb193d81a3a"> <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/mattn/articles/1c4eb193d81a3a" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/8be32d08c25c1022a57ee670bb0702d24132d957/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--zW-o-1W8--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3AGo%252520%2525E3%252581%2525A8%252520prisma%252520%2525E3%252581%2525A8%252520lit-html%252520%2525E3%252581%2525A8%252520ky%252520%2525E3%252581%2525A7%2525E4%2525BD%25259C%2525E3%252582%25258B%2525E3%252583%2525A2%2525E3%252583%252580%2525E3%252583%2525B3%2525E3%252581%2525AA%252520TODO%252520%2525E3%252582%2525A2%2525E3%252583%252597%2525E3%252583%2525AA%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Amattn%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyL2IwYjA3ZWIzODAuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="Go と prisma と lit-html と ky で作るモダンな TODO アプリ" 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/calloc134/articles/4a8c1af0eb5aae"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/calloc134/articles/4a8c1af0eb5aae" 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%2Fcalloc134%2Farticles%2F4a8c1af0eb5aae" alt="">SQLに対するバックエンドのアプローチ比較、そしてSafeQLの紹介 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/calloc134/articles/4a8c1af0eb5aae" class="js-keyboard-entry-page-openable" title="SQLに対するバックエンドのアプローチ比較、そしてSafeQLの紹介 (99 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 99 users </a> </span> </li> <li> <a href="/site/zenn.dev/calloc134" title="『zenn.dev/calloc134』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> zenn.dev/calloc134 </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/08/31</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">はじめに こんにちは。calloc134 です。 バックエンド開発において、DB にデータを保存することはよくあることです。 DB と接続してデータのやり取りを行う必要がありますが、皆さんはどのようにしてデータを取得していますか? ORM やクエリビルダを利用したり、逆に SQL を記述してコード生成を行ったりと、様々な方法があります。 今回はこれらのアプローチについて比較し、比較的斬新な方針を取っているものとして SafeQL を紹介します。 注意点 ここでは、TypeScript のバックエンド開発と、そこで利用されるライブラリを前提として話を進めます。 Go や Python など他の言語での利用方法については、別途調査が必要です。 SQL に対するアプローチ まず、SQL に対するアプローチには大きく分けて 2 つの方法があります。 それぞれのライブラリの使い方を、簡単に見ていきま</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</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/typescript" data-gtm-click-label="entry-search-result-item-tag">typescript</a></li> <li><a href="/q/%E8%B3%87%E6%96%99" data-gtm-click-label="entry-search-result-item-tag">資料</a></li> <li><a href="/q/%E6%AF%94%E8%BC%83" data-gtm-click-label="entry-search-result-item-tag">比較</a></li> <li><a href="/q/%E6%9C%AA%E5%88%86%E9%A1%9E" 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/calloc134/articles/4a8c1af0eb5aae"> <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/calloc134/articles/4a8c1af0eb5aae" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/7dcafbf5be9c08b9345464730643567e30f59772/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--eR23Knbr--%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ASQL%2525E3%252581%2525AB%2525E5%2525AF%2525BE%2525E3%252581%252599%2525E3%252582%25258B%2525E3%252583%252590%2525E3%252583%252583%2525E3%252582%2525AF%2525E3%252582%2525A8%2525E3%252583%2525B3%2525E3%252583%252589%2525E3%252581%2525AE%2525E3%252582%2525A2%2525E3%252583%252597%2525E3%252583%2525AD%2525E3%252583%2525BC%2525E3%252583%252581%2525E6%2525AF%252594%2525E8%2525BC%252583%2525E3%252580%252581%2525E3%252581%25259D%2525E3%252581%252597%2525E3%252581%2525A6SafeQL%2525E3%252581%2525AE%2525E7%2525B4%2525B9%2525E4%2525BB%25258B%252Cw_1010%252Cx_90%252Cy_100%2Fg_south_west%252Cl_text%3Anotosansjp-medium.otf_37%3Acalloc134%252Cx_203%252Cy_121%2Fg_south_west%252Ch_90%252Cl_fetch%3AaHR0cHM6Ly9zdG9yYWdlLmdvb2dsZWFwaXMuY29tL3plbm4tdXNlci11cGxvYWQvYXZhdGFyLzM0MGU4NGU1YjEuanBlZw%3D%3D%252Cr_max%252Cw_90%252Cx_87%252Cy_95%2Fv1627283836%2Fdefault%2Fog-base-w1200-v2.png" alt="SQLに対するバックエンドのアプローチ比較、そしてSafeQLの紹介" 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://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" 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%2Fkaminashi-developer.hatenablog.jp%2Fentry%2F2025%2F01%2F27%2F080000" alt="">Go の ORM はどのようにして AUTO INCREMENT で採番された値を取得しているのか? - MySQL 編 - カミナシ エンジニアブログ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" class="js-keyboard-entry-page-openable" title="Go の ORM はどのようにして AUTO INCREMENT で採番された値を取得しているのか? - MySQL 編 - カミナシ エンジニアブログ (95 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 95 users </a> </span> </li> <li> <a href="/site/kaminashi-developer.hatenablog.jp/" title="『kaminashi-developer.hatenablog.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> kaminashi-developer.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">2025/01/27</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">こんにちは。カミナシで「カミナシレポート」の開発を担当しているソフトウェアエンジニアの佐藤です。 カミナシレポートのバックエンドは Go で開発しており、データベースには Amazon Aurora MySQL を使用しています。また、データベースアクセスには ORM ライブラリの GORM を採用しています。 ほとんどのテーブルでは、プライマリキー(ID列)に AUTO INCREMENT を利用しています。これらのテーブルに GORM の Create メソッドなどを使って新しいレコードを挿入すると、AUTO INCREMENT で採番された値が自動的に対応する Struct のフィールドに反映されます。 AUTO INCREMENT による値の採番は MySQL 側で実行されているため、Go 側の Struct のフィールドに反映させるためには、Go アプリケーション側が何らかの方法</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/mysql" data-gtm-click-label="entry-search-result-item-tag">mysql</a></li> <li><a href="/q/go" data-gtm-click-label="entry-search-result-item-tag">go</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</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/DB" data-gtm-click-label="entry-search-result-item-tag">DB</a></li> <li><a href="/q/gorm" data-gtm-click-label="entry-search-result-item-tag">gorm</a></li> <li><a href="/q/golang" data-gtm-click-label="entry-search-result-item-tag">golang</a></li> <li><a href="/q/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000"> <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://kaminashi-developer.hatenablog.jp/entry/2025/01/27/080000" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a669538c9b8b57d352cb2c1f7c8b02e71147dd1b/height=288;version=1;width=512/https%3A%2F%2Fcdn.image.st-hatena.com%2Fimage%2Fscale%2F428c524394ebfe76441491dca374f7085f0309e0%2Fbackend%3Dimagemagick%3Bversion%3D1%3Bwidth%3D1300%2Fhttps%253A%252F%252Fcdn-ak.f.st-hatena.com%252Fimages%252Ffotolife%252Fk%252Fkaminashi-developer%252F20250124%252F20250124181151.jpg" alt="Go の ORM はどのようにして AUTO INCREMENT で採番された値を取得しているのか? - MySQL 編 - カミナシ エンジニアブログ" 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/fullstack-remix-d1-boilerplate"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://zenn.dev/mizchi/articles/fullstack-remix-d1-boilerplate" 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%2Ffullstack-remix-d1-boilerplate" alt="">Cloudflare Workers を活かしきるスタックを考えた(remix+d1 on pages-functions) + 残タスク </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/zenn.dev/mizchi/articles/fullstack-remix-d1-boilerplate" class="js-keyboard-entry-page-openable" title="Cloudflare Workers を活かしきるスタックを考えた(remix+d1 on pages-functions) + 残タスク (94 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 94 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/05/07</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Cloudflare Workers を活かしきるスタックを考えた(remix+d1 on pages-functions) + 残タスク このスクラップ で試行錯誤していたまとめ。 最終形はここにアップロードした。 docs の下に、このリポジトリを生成した手順、セットアップ方法、リリース方法を書いてある。 (remix-validated-form や vitest のテストの追加でもうちょっといじるとは思う) なぜ cloudflare-workers + d1 のポテンシャルは最強で、近い未来、開発者|個人開発者の銀の弾丸になると思っているのだが、それを活かす開発スタックが知られていない(要出典)。この記事では GW の間に自分で周辺ライブラリを使い倒しながら選定していった。 2021年 は Fullstack Next.js 元年なので、有望な Next.js 系フレームワークを</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/cloudflare" data-gtm-click-label="entry-search-result-item-tag">cloudflare</a></li> <li><a href="/q/remix" data-gtm-click-label="entry-search-result-item-tag">remix</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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://zenn.dev/mizchi/articles/fullstack-remix-d1-boilerplate"> <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/fullstack-remix-d1-boilerplate" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/ad9c5afc480b7bb516e8059659d6773dc0c938b9/height=288;version=1;width=512/https%3A%2F%2Fres.cloudinary.com%2Fzenn%2Fimage%2Fupload%2Fs--5Zp3Sx2---%2Fc_fit%252Cg_north_west%252Cl_text%3Anotosansjp-medium.otf_55%3ACloudflare%252520Workers%252520%2525E3%252582%252592%2525E6%2525B4%2525BB%2525E3%252581%25258B%2525E3%252581%252597%2525E3%252581%25258D%2525E3%252582%25258B%2525E3%252582%2525B9%2525E3%252582%2525BF%2525E3%252583%252583%2525E3%252582%2525AF%2525E3%252582%252592%2525E8%252580%252583%2525E3%252581%252588%2525E3%252581%25259F%252528remix%25252Bd1%252520on%252520pages-funct...%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="Cloudflare Workers を活かしきるスタックを考えた(remix+d1 on pages-functions) + 残タスク" 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://coinpost.jp/?p=403861"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://coinpost.jp/?p=403861" 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%2Fcoinpost.jp%2F%3Fp%3D403861" alt="">デジタル庁のWeb3研究会、独自のDAO設立へ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/coinpost.jp/?p=403861" class="js-keyboard-entry-page-openable" title="デジタル庁のWeb3研究会、独自のDAO設立へ (91 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 91 users </a> </span> </li> <li> <a href="/site/coinpost.jp/" title="『coinpost.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> coinpost.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/11/03</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">行政がDAOを設立へ デジタル庁は2日、第5回のWeb3.0研究会にて独自のDAO(分散型自律組織)を設立する方針を明らかにした。実際にDAOに参加することで「課題や可能性を認識」していく。 1時間半に及んだ会合では、Web3に関連する暗号資産(仮想通貨)、DeFi(分散 型金融)、NFT(非代替性トークン)、DAO(分散型自律組織)、メタバース(仮想現実)などのメリットとリスク、および問題点について議論。「Web3.0の未来像」をベースに、その実現に向けて現行制度に向き合い、どのように変えていくのかを検討するアプローチを取るべきとの提案があった。 特に、第一回から法的位置付けの不明確性が指摘されてきたDAOについては、実際に研究会のメンバーがDAOを設立することで調査と分析を実施。これにより、DAOに法人格を付与する法制措置の「便益と課題を検討」していく予定だ。 また、DAO具体的施策と</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/web3" data-gtm-click-label="entry-search-result-item-tag">web3</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/NFT" data-gtm-click-label="entry-search-result-item-tag">NFT</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/%E6%94%BF%E6%B2%BB" data-gtm-click-label="entry-search-result-item-tag">政治</a></li> <li><a href="/q/-" data-gtm-click-label="entry-search-result-item-tag">-</a></li> <li><a href="/q/%E7%A0%94%E7%A9%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://coinpost.jp/?p=403861"> <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://coinpost.jp/?p=403861" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/9187733527908231ddddbffd889c1bab09ece124/height=288;version=1;width=512/https%3A%2F%2Fcoinpost.jp%2Fwp-content%2Fuploads%2F2022%2F11%2Fdao_web3.01.jpg" alt="デジタル庁のWeb3研究会、独自のDAO設立へ" 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/dnskimo/phpdehazimerucqrstupoiyatu"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://speakerdeck.com/dnskimo/phpdehazimerucqrstupoiyatu" 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%2Fdnskimo%2Fphpdehazimerucqrstupoiyatu" alt="">PHPではじめるCQRSっぽいやつ </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/speakerdeck.com/dnskimo/phpdehazimerucqrstupoiyatu" class="js-keyboard-entry-page-openable" title="PHPではじめるCQRSっぽいやつ (88 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 88 users </a> </span> </li> <li> <a href="/site/speakerdeck.com/dnskimo" title="『speakerdeck.com/dnskimo』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> speakerdeck.com/dnskimo </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/03/27</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">PHPerKaigi2021のアンカンファレンスで使ったものです。 PHPカンファレンス仙台2019の再演です。</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/php" data-gtm-click-label="entry-search-result-item-tag">php</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/CQRS" data-gtm-click-label="entry-search-result-item-tag">CQRS</a></li> <li><a href="/q/%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3" 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/programming" data-gtm-click-label="entry-search-result-item-tag">programming</a></li> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://speakerdeck.com/dnskimo/phpdehazimerucqrstupoiyatu"> <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/dnskimo/phpdehazimerucqrstupoiyatu" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/d2285b1a818f6d1498df8f8b1bf3de8ab6c2adc7/height=288;version=1;width=512/https%3A%2F%2Ffiles.speakerdeck.com%2Fpresentations%2Fcef69bbc31dd41d9a7628fe1578f52c0%2Fslide_0.jpg%3F17718690" alt="PHPではじめるCQRSっぽいやつ" 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://courrier.jp/columns/276881/"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://courrier.jp/columns/276881/" 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%2Fcourrier.jp%2Fcolumns%2F276881%2F" alt="">「分散型」のWeb3が分散ではなく“中央集権”を加速させてしまう理由 | スコット・ギャロウェイ「デジタル経済の先にあるもの」 </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/courrier.jp/columns/276881/" class="js-keyboard-entry-page-openable" title="「分散型」のWeb3が分散ではなく“中央集権”を加速させてしまう理由 | スコット・ギャロウェイ「デジタル経済の先にあるもの」 (74 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 74 users </a> </span> </li> <li> <a href="/site/courrier.jp/" title="『courrier.jp』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> courrier.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/01/30</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">スコット・ギャロウェイ「デジタル経済の先にあるもの」 「分散型」のWeb3が分散ではなく“中央集権”を加速させてしまう理由 まさかTwitterを去りしジャックに、これほど感謝する日が来ようとは。進歩の鍵は「上流階級の裏切り者」が握っているものだ。軍産複合体に警鐘を鳴らす将軍しかり、嘘つきの経営陣を告発するプロダクトマネージャーしかり。そして、シリコンバレーの白人の掟──互いに批判せず、世界を救うという崇高な使命にケチをつけない──を破るテックリーダーもまたしかり。 ジャック・ドーシーは剣を抜き、支配力を結集して分散化の見込みから利益を得ようとたくらむ同業者に狙いを定めた。単刀直入にいうと、「Web3」に非難を浴びせたのだ。 あなたは「web3」の所有者にはなれない。 所有するのはベンチャーキャピタルと、彼らのリミテッドパートナーだ。彼らのインセンティブを逃れることは決してできない。Web</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/Web3" data-gtm-click-label="entry-search-result-item-tag">Web3</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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://courrier.jp/columns/276881/"> <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://courrier.jp/columns/276881/" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/23db64585ab8102c0683213342349961f7854ce9/height=288;version=1;width=512/https%3A%2F%2Fcourrier.jp%2Fmedia%2F2022%2F01%2F29081904%2FScott-Galloway_EC5.jpg" alt="「分散型」のWeb3が分散ではなく“中央集権”を加速させてしまう理由 | スコット・ギャロウェイ「デジタル経済の先にあるもの」" 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://aish.dev/misc/orm_n1problem.html"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://aish.dev/misc/orm_n1problem.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%2Faish.dev%2Fmisc%2Form_n1problem.html" alt="">N+1問題におけるORMの重たさについて - Atsuo Ishimoto&#39;s blog </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/aish.dev/misc/orm_n1problem.html" class="js-keyboard-entry-page-openable" title="N+1問題におけるORMの重たさについて - Atsuo Ishimoto&#39;s blog (70 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 70 users </a> </span> </li> <li> <a href="/site/aish.dev/" title="『aish.dev』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> aish.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/11/27</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">tl;dr¶ボトルネックはちゃんと測定して把握しないとダメだよ。 N+1問題¶DjangoやRailsなど、ORMを利用するWebフレームワークなどの開発では、よく 「N+1問題」 というのが話題になります。ORMでは、あるモデルが参照している別のモデルを参照するとその時点でSQLが発行されてしまうため、気が付かないうちにパフォーマンスが低下する場合がある、というやつですね。 Django¶例えば、Djangoで次のようなモデルがあったとき、 class Table1(models.Model): text = models</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/performance" data-gtm-click-label="entry-search-result-item-tag">performance</a></li> <li><a href="/q/Rails" data-gtm-click-label="entry-search-result-item-tag">Rails</a></li> <li><a href="/q/Django" data-gtm-click-label="entry-search-result-item-tag">Django</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/DB" data-gtm-click-label="entry-search-result-item-tag">DB</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/python" data-gtm-click-label="entry-search-result-item-tag">python</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" 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://aish.dev/misc/orm_n1problem.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://aish.dev/misc/orm_n1problem.html" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/e0d8ac2cfccff8f2beeb7ad122467da0fc535f2c/height=288;version=1;width=512/https%3A%2F%2Faish.dev%2Fstatic%2Faish%2Fimg%2Ffavicon-128x128.png" alt="N+1問題におけるORMの重たさについて - Atsuo Ishimoto&#39;s 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.prisma.io/nextjs"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://www.prisma.io/nextjs" 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.prisma.io%2Fnextjs" alt="">Next.js Database with Prisma | Next-Generation ORM for SQL Databases </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/www.prisma.io/nextjs" class="js-keyboard-entry-page-openable" title="Next.js Database with Prisma | Next-Generation ORM for SQL Databases (67 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 67 users </a> </span> </li> <li> <a href="/site/www.prisma.io/" title="『www.prisma.io』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> www.prisma.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">2020/10/25</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">Next.js blurs the lines between client and server. It supports pre-rendering pages at build time (SSG) or request time (SSR). Prisma is the perfect companion if you need to work with a database in a Next.js app. You can decide whether to access your database with Prisma at build time (getStaticProps), at request time (getServersideProps), using API routes, or by entirely separating the backend out</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/Next.js" data-gtm-click-label="entry-search-result-item-tag">Next.js</a></li> <li><a href="/q/prisma" data-gtm-click-label="entry-search-result-item-tag">prisma</a></li> <li><a href="/q/javascript" data-gtm-click-label="entry-search-result-item-tag">javascript</a></li> <li><a href="/q/ORM" data-gtm-click-label="entry-search-result-item-tag">ORM</a></li> <li><a href="/q/SQL" data-gtm-click-label="entry-search-result-item-tag">SQL</a></li> <li><a href="/q/%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9" 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/database" data-gtm-click-label="entry-search-result-item-tag">database</a></li> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://www.prisma.io/nextjs"> <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.prisma.io/nextjs" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/c286d65ee489253150fc32fce3d1d1f05acef23c/height=288;version=1;width=512/https%3A%2F%2Fcdn.sanity.io%2Fimages%2Fp2zxqf70%2Fproduction%2F4a1804a0f5588e2673b26e1416a6ae745204148f-900x473.png" alt="Next.js Database with Prisma | Next-Generation ORM for SQL Databases" 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://note.com/shinkinjo/n/nbdcc0f6f3acb"><span>あとで読む</span> </button> </div> <div class="centerarticle-entry-header"> <h3 class="centerarticle-entry-title"> <a href="https://note.com/shinkinjo/n/nbdcc0f6f3acb" 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%2Fnote.com%2Fshinkinjo%2Fn%2Fnbdcc0f6f3acb" alt="">【DAOとは何か徹底解説】私達は企業の労働者からDAOへの貢献者へ、メタバース時代の働き方はトークンエコノミーと共にある|shinichiro kinjo </a> </h3> <ul class="centerarticle-entry-data"> <li> <span class="centerarticle-users"> <a href="/entry/s/note.com/shinkinjo/n/nbdcc0f6f3acb" class="js-keyboard-entry-page-openable" title="【DAOとは何か徹底解説】私達は企業の労働者からDAOへの貢献者へ、メタバース時代の働き方はトークンエコノミーと共にある|shinichiro kinjo (63 ブックマーク)" data-gtm-click-label="entry-search-result-item-users"> 63 users </a> </span> </li> <li> <a href="/site/note.com/shinkinjo" title="『note.com/shinkinjo』の新着エントリー" data-gtm-click-label="entry-search-result-item-site-search-url"> note.com/shinkinjo </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/01/10</span></li> </ul> </div> <div class="centerarticle-entry-contents has-image"> <div class="centerarticle-entry-item"> <p class="centerarticle-entry-summary">web3に関してのトレンドを振り返ると、2020年はDeFi、2021年はNFTとクリプトゲームの年になりましたが、2022年はDAOがより大きく注目されると言われています。 This post English ver👇🏻 DAOは「Decentralized Autonomous Organization」の略であり、日本語では自律分散型組織と訳されます。それだけ聞いても「?」という感じですが(僕もそうでしたw)、簡単にいうと社長のいない会社のようなものです。 株主、経営陣、役員などのような管理者がいなくても、ミッション実現に向かってメンバーが自ら自律的に価値提供をして、事業を推し進めていく組織のことをDAOと言います(この組織(Organization)の部分はCommunityやCompanyとも言い換えることができDACと呼ばれることもあります)。 上司やリーダーいなくてもその</p> <ul class="entrysearch-entry-tags"> <li><a href="/q/DAO" data-gtm-click-label="entry-search-result-item-tag">DAO</a></li> <li><a href="/q/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%83%81%E3%82%A7%E3%83%BC%E3%83%B3" 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> </ul> <div class="following-bookmarks-container js-following-bookmarks-container" data-entry-url="https://note.com/shinkinjo/n/nbdcc0f6f3acb"> <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://note.com/shinkinjo/n/nbdcc0f6f3acb" class="centerarticle-entry-image" target="_blank" rel="noopener"> <img src="https://cdn-ak-scissors.b.st-hatena.com/image/square/a560424fbf265fdebb576fd859c395079fcddf1b/height=288;version=1;width=512/https%3A%2F%2Fassets.st-note.com%2Fproduction%2Fuploads%2Fimages%2F69560536%2Frectangle_large_type_2_11fa6d0ac36a461f3810c3039e258d4a.png%3Ffit%3Dbounds%26quality%3D85%26width%3D1280" alt="【DAOとは何か徹底解説】私達は企業の労働者からDAOへの貢献者へ、メタバース時代の働き方はトークンエコノミーと共にある|shinichiro kinjo" 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/ORM?page=2" class="js-keyboard-openable">2</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/ORM?page=3" class="js-keyboard-openable">3</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/ORM?page=4" class="js-keyboard-openable">4</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/ORM?page=5" class="js-keyboard-openable">5</a></span> <span class="js-keyboard-selectable-item"><a href="https://b.hatena.ne.jp/q/ORM?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/ORM?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/s/oishi-coffee-life.hatenadiary.com/entry/2025/04/05/103000" title="コーヒーの抽出量と味の関係のヒントになる動画を見つけました - おいしいコーヒー生活" data-gtm-label="entry-recentEntriesInEntrySearch-title">コーヒーの抽出量と味の関係のヒントになる動画を見つけました - おいしいコーヒー生活</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/oishi-coffee-life.hatenadiary.com/entry/2025/04/05/103000" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/oishi-coffee-life.hatenadiary.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Foishi-coffee-life.hatenadiary.com%2Fentry%2F2025%2F04%2F05%2F103000" alt="">oishi-coffee-life.hatenadiary.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/anond.hatelabo.jp/20250322015544" title="日本の歴史上、男が男らしく強かったことなどない 常に男は弱く情けなく、.." data-gtm-label="entry-recentEntriesInEntrySearch-title">日本の歴史上、男が男らしく強かったことなどない 常に男は弱く情けなく、..</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/anond.hatelabo.jp/20250322015544" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/anond.hatelabo.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fanond.hatelabo.jp%2F20250322015544" alt="">anond.hatelabo.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/yama5600.tokyo/archives/9551602.html" title="https://yama5600.tokyo/archives/9551602.html" data-gtm-label="entry-recentEntriesInEntrySearch-title">https://yama5600.tokyo/archives/9551602.html</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/yama5600.tokyo/archives/9551602.html" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/yama5600.tokyo/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fyama5600.tokyo%2Farchives%2F9551602.html" alt="">yama5600.tokyo</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/forbesjapan.com/articles/detail/78299" title="ウクライナ軍によるロシアの大砲破壊が加速 1日で122門の損害報告も | Forbes JAPAN 公式サイト(フォーブス ジャパン)" data-gtm-label="entry-recentEntriesInEntrySearch-title">ウクライナ軍によるロシアの大砲破壊が加速 1日で122門の損害報告も | Forbes JAPAN 公式サイト(フォーブス ジャパン)</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/forbesjapan.com/articles/detail/78299" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/forbesjapan.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fforbesjapan.com%2Farticles%2Fdetail%2F78299" alt="">forbesjapan.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/dream012504.hatenadiary.jp/entry/2025/04/05/111120" title="太宰府市 B級グルメ らーめん おいげん(福岡県太宰府市宰府1-10-32) - 食いしん坊 会社員のB級グルメ日記" data-gtm-label="entry-recentEntriesInEntrySearch-title">太宰府市 B級グルメ らーめん おいげん(福岡県太宰府市宰府1-10-32) - 食いしん坊 会社員のB級グルメ日記</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/dream012504.hatenadiary.jp/entry/2025/04/05/111120" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/dream012504.hatenadiary.jp/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fdream012504.hatenadiary.jp%2Fentry%2F2025%2F04%2F05%2F111120" alt="">dream012504.hatenadiary.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/step-up-reality.com/20250405-2/" title="売れない理由は言葉じゃない?人が動く「エネルギー」の秘密" data-gtm-label="entry-recentEntriesInEntrySearch-title">売れない理由は言葉じゃない?人が動く「エネルギー」の秘密</a></h3> <p class="entry-group-meta"><span class="entry-group-users"><a href="/entry/s/step-up-reality.com/20250405-2/" data-gtm-label="entry-recentEntriesInEntrySearch-users">1 user</a></span><span class="entry-group-domain"><a href="/site/step-up-reality.com/" data-gtm-label="entry-recentEntriesInEntrySearch-domain"><img src="https://cdn-ak2.favicon.st-hatena.com/64?url=https%3A%2F%2Fstep-up-reality.com%2F20250405-2%2F" alt="">step-up-reality.com</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&amp;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 &copy; 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>

Pages: 1 2 3 4 5 6 7 8 9 10