{"id":1400,"date":"2025-03-24T08:52:16","date_gmt":"2025-03-23T23:52:16","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1400"},"modified":"2025-03-24T08:52:16","modified_gmt":"2025-03-23T23:52:16","slug":"%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91rails-console%e3%81%a7%e9%96%8b%e7%99%ba%e5%8a%b9%e7%8e%87%e3%81%8c3%e5%80%8d%e3%81%ab%e3%81%aa%e3%82%8b12%e3%81%ae%e5%ae%9f%e8%b7%b5%e3%83%86%e3%82%af%e3%83%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1400","title":{"rendered":"\u4fdd\u5b58\u7248\u3011Rails Console\u3067\u958b\u767a\u52b9\u7387\u304c3\u500d\u306b\u306a\u308b12\u306e\u5b9f\u8df5\u30c6\u30af\u30cb\u30c3\u30af"},"content":{"rendered":"\n<div class=\"toc\"><br \/>\n<b>Warning<\/b>:  Undefined array key \"is_admin\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>116<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_category_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>121<\/b><br \/>\n<br \/>\n<b>Warning<\/b>:  Undefined array key \"is_top\" in <b>\/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/sango-theme\/library\/gutenberg\/dist\/classes\/Toc.php<\/b> on line <b>128<\/b><br \/>\n    <div id=\"toc_container\" class=\"sgb-toc--bullets js-smooth-scroll\" data-dialog-title=\"\u76ee\u6b21\">\n      <p class=\"toc_title\">\u76ee\u6b21 <\/p>\n      <ul class=\"toc_list\">  <li class=\"first\">    <a href=\"#i-0\">Rails Console\u3068\u306f\uff1f\u305d\u306e\u91cd\u8981\u6027\u3068\u57fa\u672c\u6982\u5ff5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u5bfe\u8a71\u7684\u306a\u958b\u767a\u74b0\u5883\u3068\u3057\u3066\u306eRails Console<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u306a\u305cRails Console\u304c\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u306e\u304b<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Rails Console\u306e\u8d77\u52d5\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u7570\u306a\u308b\u74b0\u5883\u3067\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u8d77\u52d5\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-5\">\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u306e\u6d3b\u7528\u8853<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-6\">\u958b\u767a\u52b9\u7387\u3092\u9ad8\u3081\u308bRails Console \u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-7\">\u30e2\u30c7\u30eb\u64cd\u4f5c\u3092\u52b9\u7387\u5316\u3059\u308b\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<\/a>      <\/li>      <li>        <a href=\"#i-8\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u5358\u306b\u3059\u308b\u30b3\u30de\u30f3\u30c9\u96c6<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-9\">\u8907\u96d1\u306a\u30ed\u30b8\u30c3\u30af\u306e\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-10\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u5b9f\u8df5<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-11\">\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u52b9\u7387\u7684\u306a\u89e3\u6790\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u3053\u3058\u958b\u3051\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\u30ec\u30fc\u30eb\u30b3\u30f3\u30bd\u30fc\u30eb\u5b9f\u8df5\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">\u672c\u756a\u74b0\u5883\u3067\u306e\u5b89\u5168\u306a\u5229\u7528\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u52d5\u4f5c\u78ba\u8a8d\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-17\">Rails Console\u3092\u3055\u3089\u306b\u5f37\u5316\u3059\u308b\u62e1\u5f35\u6a5f\u80fd\u3068Gem<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u958b\u767a\u52b9\u7387\u3092\u4e0a\u3052\u308b\u5fc5\u9808Gem<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-19\">\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u308b\u4f5c\u696d\u52b9\u7387\u306e\u5411\u4e0a<\/a>      <\/li>    <\/ul>  <\/li><\/ul>\n      <a href=\"#\" class=\"sgb-toc-button js-toc-button\" rel=\"nofollow\" data-open-dialog=\"true\"><i class=\"fa fa-list\"><\/i><span class=\"sgb-toc-button__text\">\u76ee\u6b21\u3078<\/span><\/a>\n    <\/div><\/div><h2 class=\"wp-block-heading\" id=\"i-0\">Rails Console\u3068\u306f\uff1f\u305d\u306e\u91cd\u8981\u6027\u3068\u57fa\u672c\u6982\u5ff5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u5bfe\u8a71\u7684\u306a\u958b\u767a\u74b0\u5883\u3068\u3057\u3066\u306eRails Console<\/h3>\n\n\n\n<p>Rails Console\u306f\u3001Ruby on Rails\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3068\u5bfe\u8a71\u7684\u306b\u3084\u308a\u53d6\u308a\u3067\u304d\u308b\u5f37\u529b\u306a\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3\u30c4\u30fc\u30eb\u3067\u3059\u3002\u6280\u8853\u7684\u306b\u306f\u3001IRB\uff08Interactive Ruby\uff09\u3092Rails\u306e\u74b0\u5883\u3067\u62e1\u5f35\u3057\u305fREPL\uff08Read-Eval-Print Loop\uff09\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u3066\u304a\u308a\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u30b3\u30fc\u30c9\u3092\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u3067\u5b9f\u884c\u3057\u3001\u7d50\u679c\u3092\u5373\u5ea7\u306b\u78ba\u8a8d\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u958b\u767a\u8005\u306f\u3001Rails Console\u3092\u901a\u3058\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u64cd\u4f5c\u3092\u76f4\u63a5\u5b9f\u884c\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30e2\u30c7\u30eb\u306eCRUD\u64cd\u4f5c<\/li>\n\n\n\n<li>\u30a2\u30bd\u30b7\u30a8\u30fc\u30b7\u30e7\u30f3\u306e\u52d5\u4f5c\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30e1\u30bd\u30c3\u30c9\u306e\u30c6\u30b9\u30c8\u3068\u691c\u8a3c<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30af\u30a8\u30ea\u306e\u5b9f\u9a13<\/li>\n\n\n\n<li>\u8907\u96d1\u306a\u30d3\u30b8\u30cd\u30b9\u30ed\u30b8\u30c3\u30af\u306e\u30c7\u30d0\u30c3\u30b0<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u306a\u305cRails Console\u304c\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u306e\u304b<\/h3>\n\n\n\n<p>Rails Console\u304c\u958b\u767a\u52b9\u7387\u3092\u5411\u4e0a\u3055\u305b\u308b\u4e3b\u306a\u7406\u7531\u306f\u3001\u4ee5\u4e0b\u306e3\u3064\u306e\u7279\u5fb4\u306b\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5373\u6642\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u52d5\u4f5c\u3092\u5373\u5ea7\u306b\u78ba\u8a8d\u3067\u304d\u308b<\/li>\n\n\n\n<li>\u5b9f\u9a13\u7684\u306a\u5b9f\u88c5\u306e\u30c6\u30b9\u30c8\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u306e\u539f\u56e0\u7279\u5b9a\u304c\u8fc5\u901f<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u74b0\u5883\u306e\u5b8c\u5168\u306a\u518d\u73fe<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u5168\u3066\u306e\u6a5f\u80fd\u306b\u30a2\u30af\u30bb\u30b9\u53ef\u80fd<\/li>\n\n\n\n<li>\u672c\u756a\u30c7\u30fc\u30bf\u3068\u540c\u3058\u74b0\u5883\u3067\u30c6\u30b9\u30c8\u53ef\u80fd<\/li>\n\n\n\n<li>\u8a2d\u5b9a\u3084gem\u306e\u5f71\u97ff\u3092\u5b9f\u74b0\u5883\u3067\u78ba\u8a8d\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u30b5\u30a4\u30af\u30eb\u306e\u77ed\u7e2e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u5909\u66f4\u306e\u5f71\u97ff\u3092\u5373\u5ea7\u306b\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u6642\u9593\u306e\u5927\u5e45\u306a\u524a\u6e1b<\/li>\n\n\n\n<li>\u5b9f\u88c5\u524d\u306e\u4eee\u8aac\u691c\u8a3c\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b7\u30fc\u30f3\u3067Rails Console\u304c\u6d3b\u8e8d\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e2\u30c7\u30eb\u306e\u52d5\u4f5c\u78ba\u8a8d\nuser = User.new(name: \"\u5c71\u7530\u592a\u90ce\", email: \"yamada@example.com\")\nuser.valid?  # \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u306e\u78ba\u8a8d\nuser.errors  # \u30a8\u30e9\u30fc\u5185\u5bb9\u306e\u78ba\u8a8d\n\n# \u8907\u96d1\u306a\u30af\u30a8\u30ea\u306e\u30c6\u30b9\u30c8\norders = Order.includes(:items)\n               .where(created_at: 1.month.ago..Time.current)\n               .group(:status)\n               .count<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Rails Console\u306f\u5358\u306a\u308b\u30c7\u30d0\u30c3\u30b0\u30c4\u30fc\u30eb\u3067\u306f\u306a\u304f\u3001\u958b\u767a\u5168\u4f53\u306e\u30ef\u30fc\u30af\u30d5\u30ed\u30fc\u3092\u6700\u9069\u5316\u3059\u308b\u91cd\u8981\u306a\u958b\u767a\u57fa\u76e4\u3068\u3057\u3066\u6a5f\u80fd\u3057\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3053\u306e\u5f37\u529b\u306a\u30c4\u30fc\u30eb\u306e\u5177\u4f53\u7684\u306a\u8d77\u52d5\u65b9\u6cd5\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Rails Console\u306e\u8d77\u52d5\u3068\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u7570\u306a\u308b\u74b0\u5883\u3067\u306e\u30b3\u30f3\u30bd\u30fc\u30eb\u8d77\u52d5\u65b9\u6cd5<\/h3>\n\n\n\n<p>Rails Console\u306f\u958b\u767a\u74b0\u5883\u306b\u5fdc\u3058\u3066\u7570\u306a\u308b\u8d77\u52d5\u65b9\u6cd5\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u306e\u74b0\u5883\u306b\u9069\u3057\u305f\u5f62\u3067\u5229\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u958b\u767a\u74b0\u5883\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\uff09\u3067\u306e\u8d77\u52d5\nrails console\n# \u307e\u305f\u306f\u7701\u7565\u5f62\nrails c\n\n# \u30c6\u30b9\u30c8\u74b0\u5883\u3067\u306e\u8d77\u52d5\nrails console -e test\n\n# \u672c\u756a\u74b0\u5883\u3067\u306e\u8d77\u52d5\nrails console -e production\n\n# \u7279\u5b9a\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u6307\u5b9a\u3057\u3066\u8d77\u52d5\nRAILS_DATABASE=secondary rails console<\/pre>\n\n\n\n<p>\u6ce8\u610f\u70b9\u3068\u3057\u3066\u3001\u672c\u756a\u74b0\u5883\u3067\u30b3\u30f3\u30bd\u30fc\u30eb\u3092\u8d77\u52d5\u3059\u308b\u969b\u306f\u3001\u5fc5\u305a<code>-e production<\/code>\u30aa\u30d7\u30b7\u30e7\u30f3\u3092\u660e\u793a\u7684\u306b\u6307\u5b9a\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u308c\u306b\u3088\u308a\u3001\u610f\u56f3\u3057\u306a\u3044\u74b0\u5883\u3067\u306e\u64cd\u4f5c\u3092\u9632\u3050\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u306e\u6d3b\u7528\u8853<\/h3>\n\n\n\n<p>\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u306f\u3001\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3078\u306e\u5909\u66f4\u3092\u81ea\u52d5\u7684\u306b\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3059\u308b\u5b89\u5168\u306a\u5b9f\u884c\u74b0\u5883\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u3067\u306e\u8d77\u52d5\nrails console --sandbox\n# \u307e\u305f\u306f\nrails c -s\n\n# \u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u3067\u3042\u308b\u3053\u3068\u306e\u78ba\u8a8d\nActiveRecord::Base.connection.transaction_open?  # =&gt; true\n\n# \u5168\u3066\u306e\u64cd\u4f5c\u306f\u81ea\u52d5\u7684\u306b\u30ed\u30fc\u30eb\u30d0\u30c3\u30af\u3055\u308c\u308b\nuser = User.create(name: \"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\")\n# \u30bb\u30c3\u30b7\u30e7\u30f3\u7d42\u4e86\u6642\u306b\u3053\u306e\u5909\u66f4\u306f\u7834\u68c4\u3055\u308c\u308b<\/pre>\n\n\n\n<p>\u30b5\u30f3\u30c9\u30dc\u30c3\u30af\u30b9\u30e2\u30fc\u30c9\u306e\u4e3b\u306a\u7528\u9014\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5371\u967a\u306a\u64cd\u4f5c\u306e\u4e8b\u524d\u78ba\u8a8d<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u66f4\u65b0\u30ed\u30b8\u30c3\u30af\u306e\u30c6\u30b9\u30c8<\/li>\n\n\n\n<li>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u52d5\u4f5c\u78ba\u8a8d<\/li>\n\n\n\n<li>\u672c\u756a\u30c7\u30fc\u30bf\u3092\u4f7f\u3063\u305f\u5b89\u5168\u306a\u691c\u8a3c<\/li>\n<\/ul>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u30b3\u30f3\u30bd\u30fc\u30eb\u64cd\u4f5c\u306eTips\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5c65\u6b74\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u4e0a\u4e0b\u30ad\u30fc\u3067\u904e\u53bb\u306e\u30b3\u30de\u30f3\u30c9\u3092\u547c\u3073\u51fa\u3057\n   # Ctrl + R\u3067\u5c65\u6b74\u691c\u7d22<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30de\u30eb\u30c1\u30e9\u30a4\u30f3\u5165\u529b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   User.where(active: true)\n       .includes(:posts)\n       .where('posts.created_at &gt; ?', 1.week.ago)\n   # \u81ea\u52d5\u7684\u306b\u30a4\u30f3\u30c7\u30f3\u30c8\u304c\u9069\u7528\u3055\u308c\u308b<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u51fa\u529b\u306e\u30af\u30ea\u30a2<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   clear  # \u307e\u305f\u306f Ctrl + L<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30bb\u30c3\u30b7\u30e7\u30f3\u306e\u7d42\u4e86<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   exit   # \u307e\u305f\u306f quit<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u62bc\u3055\u3048\u305f\u4e0a\u3067\u3001\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u6df1\u304f\u6398\u308a\u4e0b\u3052\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-6\">\u958b\u767a\u52b9\u7387\u3092\u9ad8\u3081\u308bRails Console \u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u30e2\u30c7\u30eb\u64cd\u4f5c\u3092\u52b9\u7387\u5316\u3059\u308b\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8<\/h3>\n\n\n\n<p>Rails Console\u306b\u306f\u3001\u958b\u767a\u52b9\u7387\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u591a\u304f\u306e\u30b7\u30e7\u30fc\u30c8\u30ab\u30c3\u30c8\u304c\u7528\u610f\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6700\u5f8c\u306b\u5b9f\u884c\u3057\u305f\u7d50\u679c\u3092\u53c2\u7167\n_  # =&gt; \u76f4\u524d\u306e\u5b9f\u884c\u7d50\u679c\n__ # =&gt; 2\u3064\u524d\u306e\u5b9f\u884c\u7d50\u679c\n\n# \u30e2\u30c7\u30eb\u306e\u6700\u65b0\u30ec\u30b3\u30fc\u30c9\u306b\u30a2\u30af\u30bb\u30b9\nuser = User.last\nuser.name = \"\u65b0\u3057\u3044\u540d\u524d\"\nuser.reload  # \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u304b\u3089\u518d\u8aad\u307f\u8fbc\u307f\n\n# find_by\u3092\u4f7f\u3063\u305f\u7c21\u6f54\u306a\u691c\u7d22\nUser.find_by_email(\"test@example.com\")  # \u52d5\u7684\u306afind_by<\/pre>\n\n\n\n<p>\u7279\u306b\u4fbf\u5229\u306a\u64cd\u4f5c\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8907\u6570\u6761\u4ef6\u3067\u306e\u691c\u7d22\u3092\u7c21\u6f54\u306b\u8a18\u8ff0\nUser.find_or_create_by(email: \"test@example.com\") do |u|\n  u.name = \"\u30c6\u30b9\u30c8\u30e6\u30fc\u30b6\u30fc\"\n  u.role = \"admin\"\nend\n\n# \u5c5e\u6027\u306e\u4e00\u62ec\u66f4\u65b0\nuser.update_columns(\n  login_count: user.login_count + 1,\n  last_login_at: Time.current\n)  # \u30b3\u30fc\u30eb\u30d0\u30c3\u30af\u3068\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u3092\u30b9\u30ad\u30c3\u30d7<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u7c21\u5358\u306b\u3059\u308b\u30b3\u30de\u30f3\u30c9\u96c6<\/h3>\n\n\n\n<p>\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u64cd\u4f5c\u3092\u52b9\u7387\u5316\u3059\u308b\u9ad8\u5ea6\u306a\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8907\u96d1\u306a\u30af\u30a8\u30ea\u306e\u7d50\u679c\u3092\u898b\u3084\u3059\u304f\u8868\u793a\npp User.group(:role).count\n# \u307e\u305f\u306f\nap User.group(:role).count  # awesome_print\u3092\u4f7f\u7528\n\n# \u7279\u5b9a\u306e\u6761\u4ef6\u306e\u30ec\u30b3\u30fc\u30c9\u3092\u691c\u7d22\nUser.where(\"email LIKE ?\", \"%@example.com\")\n    .select(:id, :name, :email)\n    .limit(5)\n    .map { |u| [u.id, u.email] }\n\n# \u95a2\u9023\u30c6\u30fc\u30d6\u30eb\u3092\u542b\u3080\u8907\u96d1\u306a\u691c\u7d22\nOrder.includes(:items)\n     .where(items: { status: 'shipped' })\n     .order(created_at: :desc)\n     .limit(10)\n     .to_sql  # \u751f\u6210\u3055\u308c\u308bSQL\u3092\u78ba\u8a8d<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">\u8907\u96d1\u306a\u30ed\u30b8\u30c3\u30af\u306e\u30c7\u30d0\u30c3\u30b0\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30c7\u30d0\u30c3\u30b0\u3092\u52b9\u7387\u5316\u3059\u308b\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u5909\u6570\u306e\u8a73\u7d30\u691c\u67fb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4e2d\u8eab\u3092\u8a73\u3057\u304f\u78ba\u8a8d\n   user = User.first\n   user.instance_variables  # \u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u5909\u6570\u306e\u4e00\u89a7\n   user.methods - Object.methods  # \u72ec\u81ea\u306e\u30e1\u30bd\u30c3\u30c9\u4e00\u89a7<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>SQL\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30af\u30a8\u30ea\u30ed\u30b0\u306e\u6709\u52b9\u5316\n   ActiveRecord::Base.logger = Logger.new(STDOUT)\n\n   # N+1\u554f\u984c\u306e\u691c\u51fa\u3068\u89e3\u6c7a\n   User.all.each { |u| puts u.posts.count }  # \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\n   User.includes(:posts).each { |u| puts u.posts.count }  # \u6700\u9069\u5316<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u9014\u4e2d\u7d50\u679c\u78ba\u8a8d<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   User.where(active: true)\n       .tap { |users| puts \"Active users: #{users.count}\" }\n       .where(\"created_at &gt; ?\", 1.week.ago)\n       .tap { |users| puts \"New active users: #{users.count}\" }<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u99c6\u4f7f\u3059\u308b\u3053\u3068\u3067\u3001\u958b\u767a\u4f5c\u696d\u306e\u52b9\u7387\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-10\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u3068\u30c7\u30d0\u30c3\u30b0\u306e\u5b9f\u8df5<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u52b9\u7387\u7684\u306a\u89e3\u6790\u65b9\u6cd5<\/h3>\n\n\n\n<p>Rails Console\u3067\u306e\u30a8\u30e9\u30fc\u89e3\u6790\u3092\u52b9\u7387\u7684\u306b\u884c\u3046\u305f\u3081\u306e\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30a8\u30e9\u30fc\u306e\u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u3092\u8a73\u7d30\u306b\u78ba\u8a8d\nbegin\n  User.find(0)  # \u5b58\u5728\u3057\u306a\u3044ID\u3092\u6307\u5b9a\nrescue =&gt; e\n  puts e.message  # \u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\n  puts e.backtrace.first(5)  # \u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u306e\u5148\u982d5\u884c\nend\n\n# ActiveRecord\u306e\u30a8\u30e9\u30fc\u8a73\u7d30\u3092\u78ba\u8a8d\nuser = User.new\nuser.save\nuser.errors.full_messages  # \u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3\u30a8\u30e9\u30fc\u306e\u8a73\u7d30\nuser.errors.details       # \u30a8\u30e9\u30fc\u306e\u6280\u8853\u7684\u306a\u8a73\u7d30<\/pre>\n\n\n\n<p>\u30a8\u30e9\u30fc\u89e3\u6790\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u6b63\u78ba\u306b\u8aad\u3080<\/li>\n\n\n\n<li>\u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u306e\u4e0a\u90e8\u304b\u3089\u9806\u306b\u78ba\u8a8d<\/li>\n\n\n\n<li>\u95a2\u9023\u3059\u308b\u30e2\u30c7\u30eb\u3084\u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\u3092\u78ba\u8a8d<\/li>\n\n\n\n<li>\u5b9f\u884c\u74b0\u5883\u3084\u4f9d\u5b58\u95a2\u4fc2\u3092\u691c\u8a3c<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u3053\u3058\u958b\u3051\u3092\u4f7f\u3063\u305f\u9ad8\u5ea6\u306a\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>binding.pry\u3092\u6d3b\u7528\u3057\u305f\u9ad8\u5ea6\u306a\u30c7\u30d0\u30c3\u30b0\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Gemfile\u306b\u8ffd\u52a0\n# gem 'pry-rails'\n\n# \u30b3\u30fc\u30c9\u306e\u9014\u4e2d\u3067\u5b9f\u884c\u3092\u505c\u6b62\ndef complex_calculation\n  x = 1\n  binding.pry  # \u3053\u3053\u3067\u5b9f\u884c\u304c\u505c\u6b62\n  y = x + 2\n  z = y * 3\nend\n\n# pry\u5185\u3067\u306e\u4fbf\u5229\u306a\u30b3\u30de\u30f3\u30c9\n# ls      # \u5229\u7528\u53ef\u80fd\u306a\u30e1\u30bd\u30c3\u30c9\u3068\u5909\u6570\u306e\u4e00\u89a7\n# cd obj  # \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4e2d\u306b\u5165\u308b\n# show-source method_name  # \u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\u3092\u8868\u793a<\/pre>\n\n\n\n<p>\u9ad8\u5ea6\u306a\u30c7\u30d0\u30c3\u30b0\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u884c\u6642\u9593\u3092\u8a08\u6e2c\nrequire 'benchmark'\n\nBenchmark.measure do\n  User.heavy_calculation\nend\n\n# \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u78ba\u8a8d\nbegin\n  require 'objspace'\n  ObjectSpace.count_objects\nend\n\n# \u7279\u5b9a\u306e\u30e1\u30bd\u30c3\u30c9\u306e\u547c\u3073\u51fa\u3057\u3092\u8ffd\u8de1\nTracePoint.new(:call) do |tp|\n  puts \"#{tp.defined_class}##{tp.method_id} called\"\nend.enable { User.find(1) }<\/pre>\n\n\n\n<p>\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u5b9f\u8df5\u4f8b\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>N+1\u30af\u30a8\u30ea\u306e\u691c\u51fa\u3068\u4fee\u6b63<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u554f\u984c\u306e\u3042\u308b\u30b3\u30fc\u30c9\n   Post.all.each do |post|\n     puts post.user.name  # N+1\u554f\u984c\u767a\u751f\n   end\n\n   # ActiveRecord\u306e\u30ed\u30b0\u3092\u6709\u52b9\u5316\u3057\u3066\u78ba\u8a8d\n   ActiveRecord::Base.logger = Logger.new(STDOUT)\n\n   # \u4fee\u6b63\u5f8c\u306e\u30b3\u30fc\u30c9\n   Post.includes(:user).each do |post|\n     puts post.user.name  # 1\u56de\u306e\u30af\u30a8\u30ea\u3067\u6e08\u3080\n   end<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u8abf\u67fb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5909\u5316\u3092\u89b3\u5bdf\n   before = GetProcessMem.new.mb\n   100.times { LargeObject.new }\n   after = GetProcessMem.new.mb\n   puts \"Memory increase: #{after - before} MB\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30c3\u30c9\u30ed\u30c3\u30af\u306e\u691c\u51fa<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u30ed\u30c3\u30af\u72b6\u614b\u3092\u78ba\u8a8d\n   ActiveRecord::Base.connection.execute(\n     \"SELECT * FROM pg_locks pl JOIN pg_stat_activity psa\n      ON pl.pid = psa.pid;\"\n   )<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u8907\u96d1\u306a\u554f\u984c\u3082\u52b9\u7387\u7684\u306b\u89e3\u6c7a\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u306e\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u30ec\u30fc\u30eb\u30b3\u30f3\u30bd\u30fc\u30eb\u5b9f\u8df5\u6d3b\u7528\u30d1\u30bf\u30fc\u30f3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u672c\u756a\u74b0\u5883\u3067\u306e\u5b89\u5168\u306a\u5229\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3067Rails Console\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u91cd\u8981\u306a\u5b89\u5168\u5bfe\u7b56\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u8aad\u307f\u53d6\u308a\u5c02\u7528\u30e2\u30fc\u30c9\u3067\u306e\u8d77\u52d5\nDISABLE_DATABASE_ENVIRONMENT_CHECK=1 rails console -e production --read-only\n\n# \u5b9f\u884c\u524d\u306e\u78ba\u8a8d\u30d7\u30ed\u30f3\u30d7\u30c8\u3092\u8868\u793a\ndef safe_update\n  print \"\u672c\u5f53\u306b\u5b9f\u884c\u3057\u307e\u3059\u304b\uff1f (yes\/no): \"\n  return unless STDIN.gets.chomp == 'yes'\n  yield if block_given?\nend\n\nsafe_update do\n  User.where(inactive: true).update_all(status: 'archived')\nend<\/pre>\n\n\n\n<p>\u672c\u756a\u74b0\u5883\u3067\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d0\u30c3\u30af\u30a2\u30c3\u30d7\u306e\u4e8b\u524d\u53d6\u5f97<\/li>\n\n\n\n<li>\u30c8\u30e9\u30f3\u30b6\u30af\u30b7\u30e7\u30f3\u306e\u9069\u5207\u306a\u4f7f\u7528<\/li>\n\n\n\n<li>\u5f71\u97ff\u7bc4\u56f2\u306e\u4e8b\u524d\u78ba\u8a8d<\/li>\n\n\n\n<li>\u5b9f\u884c\u30ed\u30b0\u306e\u4fdd\u5b58<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u52d5\u4f5c\u78ba\u8a8d\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u5927\u898f\u6a21\u306a\u30d0\u30c3\u30c1\u51e6\u7406\u3092\u5b89\u5168\u306b\u691c\u8a3c\u3059\u308b\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u6bb5\u968e\u7684\u306a\u5b9f\u884c\u3067\u5b89\u5168\u6027\u3092\u78ba\u4fdd\ndef batch_process(scope, batch_size: 1000)\n  scope.find_each(batch_size: batch_size) do |record|\n    begin\n      yield(record)\n    rescue =&gt; e\n      Rails.logger.error(\"Error processing #{record.id}: #{e.message}\")\n      next\n    end\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nbatch_process(User.inactive, batch_size: 500) do |user|\n  user.archive_data\n  puts \"Processed user #{user.id}\"\nend<\/pre>\n\n\n\n<p>\u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30d7\u30ed\u30b0\u30ec\u30b9\u8868\u793a\u4ed8\u304d\u306e\u51e6\u7406\ntotal = User.count\nprocessed = 0\n\nUser.find_each do |user|\n  user.recalculate_stats\n  processed += 1\n  puts \"Progress: #{(processed.to_f \/ total * 100).round(2)}%\" if processed % 100 == 0\nend\n\n# \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\nActiveRecord::Base.uncached do\n  User.select(:id, :email).find_each do |user|\n    # \u5fc5\u8981\u306a\u5c5e\u6027\u306e\u307f\u3092\u9078\u629e\u3057\u3066\u51e6\u7406\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u5411\u4e0a\u306e\u305f\u3081\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u5b9f\u884c\u901f\u5ea6\u3068\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u6700\u9069\u5316\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u30af\u30a8\u30ea\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u8a08\u6e2c\nrequire 'benchmark'\n\nBenchmark.bm do |x|\n  x.report(\"\u30aa\u30ea\u30b8\u30ca\u30eb\u30af\u30a8\u30ea:\") { User.where(status: 'active').to_a }\n  x.report(\"\u6700\u9069\u5316\u30af\u30a8\u30ea:\") { User.where(status: 'active').select(:id, :name).to_a }\nend\n\n# \u30a4\u30f3\u30c7\u30c3\u30af\u30b9\u306e\u52b9\u679c\u78ba\u8a8d\nUser.where(email: 'test@example.com').explain\n\n# N+1\u30af\u30a8\u30ea\u306e\u691c\u51fa\u3068\u4fee\u6b63\n# bullet gem\u3092\u4f7f\u7528\u3057\u305f\u78ba\u8a8d\nBullet.enable = true\nBullet.console = true<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6539\u5584\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30af\u30a8\u30ea\u306e\u6700\u9069\u5316<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # \u60aa\u3044\u4f8b\n   users = User.all.select { |u| u.orders.any? }\n\n   # \u826f\u3044\u4f8b\n   users = User.joins(:orders).distinct<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   # find_each\u3092\u4f7f\u7528\u3057\u305f\u6bb5\u968e\u7684\u306a\u51e6\u7406\n   User.find_each(batch_size: 100) do |user|\n     user.touch(:last_processed_at)\n   end<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">   Rails.cache.fetch(\"user_stats\", expires_in: 1.hour) do\n     User.calculate_complex_statistics\n   end<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u304b\u3064\u52b9\u7387\u7684\u306a\u904b\u7528\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3055\u3089\u306a\u308b\u6a5f\u80fd\u62e1\u5f35\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">Rails Console\u3092\u3055\u3089\u306b\u5f37\u5316\u3059\u308b\u62e1\u5f35\u6a5f\u80fd\u3068Gem<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u958b\u767a\u52b9\u7387\u3092\u4e0a\u3052\u308b\u5fc5\u9808Gem<\/h3>\n\n\n\n<p>Rails Console\u306e\u6a5f\u80fd\u3092\u5f37\u5316\u3059\u308b\u91cd\u8981\u306aGem\u3068\u305d\u306e\u6d3b\u7528\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>pry-rails<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Gemfile\u306b\u8ffd\u52a0\ngem 'pry-rails', group: :development\n\n# \u4e3b\u306a\u6a5f\u80fd\nshow-method User#name  # \u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\u3092\u8868\u793a\nshow-source User      # \u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\u3092\u8868\u793a\nls User.new          # \u5229\u7528\u53ef\u80fd\u306a\u30e1\u30bd\u30c3\u30c9\u4e00\u89a7<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>awesome_print<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Gemfile\u306b\u8ffd\u52a0\ngem 'awesome_print'\n\n# \u8a2d\u5b9a\u4f8b\uff08~\/.pryrc\uff09\nrequire 'awesome_print'\nAwesomePrint.pry!\n\n# \u4f7f\u7528\u4f8b\nap User.last\nap User.columns_hash<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>hirb<\/strong><\/li>\n<\/ol>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># Gemfile\u306b\u8ffd\u52a0\ngem 'hirb'\n\n# \u8a2d\u5b9a\u4f8b\uff08~\/.pryrc\uff09\nrequire 'hirb'\nHirb.enable\n\n# \u30c6\u30fc\u30d6\u30eb\u5f62\u5f0f\u3067\u8868\u793a\nUser.limit(5).to_a<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u306b\u3088\u308b\u4f5c\u696d\u52b9\u7387\u306e\u5411\u4e0a<\/h3>\n\n\n\n<p>Rails Console\u3092\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u3059\u308b\u52b9\u679c\u7684\u306a\u65b9\u6cd5\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># ~\/.irbrc \u307e\u305f\u306f ~\/.pryrc \u306b\u8ffd\u52a0\n# \u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30e1\u30bd\u30c3\u30c9\u306e\u5b9a\u7fa9\ndef time_it\n  start = Time.now\n  yield\n  puts \"\u5b9f\u884c\u6642\u9593: #{Time.now - start}\u79d2\"\nend\n\n# \u30d7\u30ed\u30f3\u30d7\u30c8\u306e\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\nif defined?(Rails)\n  IRB.conf[:PROMPT][:CUSTOM] = {\n    PROMPT_I: \"#{Rails.env}&gt; \",\n    PROMPT_N: \"#{Rails.env}&gt; \",\n    PROMPT_S: \"#{Rails.env}* \",\n    PROMPT_C: \"#{Rails.env}? \",\n    RETURN: \"=&gt; %s\\n\"\n  }\n  IRB.conf[:PROMPT_MODE] = :CUSTOM\nend\n\n# \u3088\u304f\u4f7f\u3046\u30e1\u30bd\u30c3\u30c9\u306e\u30a8\u30a4\u30ea\u30a2\u30b9\nclass Object\n  def l\n    reload!\n  end\nend<\/pre>\n\n\n\n<p>\u63a8\u5968\u3055\u308c\u308b\u8ffd\u52a0\u8a2d\u5b9a\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\"># \u5c65\u6b74\u306e\u6c38\u7d9a\u5316\nIRB.conf[:SAVE_HISTORY] = 10000\nIRB.conf[:HISTORY_FILE] = \"#{ENV['HOME']}\/.irb_history\"\n\n# \u81ea\u52d5\u88dc\u5b8c\u306e\u5f37\u5316\nrequire 'irb\/completion'\n\n# \u30a8\u30e9\u30fc\u767a\u751f\u6642\u306e\u30d0\u30c3\u30af\u30c8\u30ec\u30fc\u30b9\u5236\u9650\nIRB.conf[:BACK_TRACE_LIMIT] = 20<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306eGem\u3068\u8a2d\u5b9a\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001Rails Console\u306f\u3055\u3089\u306b\u30d1\u30ef\u30d5\u30eb\u306a\u958b\u767a\u30c4\u30fc\u30eb\u3068\u306a\u308a\u307e\u3059\u3002\u5b9f\u969b\u306e\u958b\u767a\u73fe\u5834\u3067\u306f\u3001\u3053\u308c\u3089\u306e\u6a5f\u80fd\u3092\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u3067\u3001\u6700\u5927\u9650\u306e\u52b9\u679c\u3092\u5f97\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warning: Undefined array key &#8220;is_admin&#8221; in \/home\/xs392991\/dexall.co.jp\/public_html\/articles\/wp-content\/themes\/ &#8230; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":{"0":"post-1400","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ruby","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1400","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1400"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1400\/revisions"}],"predecessor-version":[{"id":1401,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1400\/revisions\/1401"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1400"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1400"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1400"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}