{"id":1546,"date":"2025-03-24T08:50:26","date_gmt":"2025-03-23T23:50:26","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1546"},"modified":"2025-03-24T08:50:26","modified_gmt":"2025-03-23T23:50:26","slug":"ruby%e5%85%a5%e9%96%802024%ef%bc%9a%e4%b8%96%e7%95%8c%e3%81%a7%e6%84%9b%e3%81%95%e3%82%8c%e3%82%8b%e8%a8%80%e8%aa%9e%e3%81%ae%e9%ad%85%e5%8a%9b%e3%81%a8%e7%bf%92%e5%be%97%e6%b3%95%e3%82%92%e5%ae%8c","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1546","title":{"rendered":"Ruby\u5165\u95802024\uff1a\u4e16\u754c\u3067\u611b\u3055\u308c\u308b\u8a00\u8a9e\u306e\u9b45\u529b\u3068\u7fd2\u5f97\u6cd5\u3092\u5b8c\u5168\u89e3\u8aac"},"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\">Ruby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3068\u306f\uff1a\u8a95\u751f\u304b\u3089\u73fe\u5728\u307e\u3067\u306e\u9032\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u65e5\u672c\u767a\u306e\u4e16\u754c\u6a19\u6e96\u8a00\u8a9e\u3068\u306a\u3063\u305f\u7406\u7531<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306e\u5e78\u305b\u3092\u8ffd\u6c42\u3059\u308b\u8a00\u8a9e\u8a2d\u8a08\u601d\u60f3<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">Ruby\u304c\u9078\u3070\u308c\u7d9a\u3051\u308b5\u3064\u306e\u6c7a\u5b9a\u7684\u306a\u7406\u7531<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u76f4\u611f\u7684\u3067\u8aad\u307f\u3084\u3059\u3044\u6587\u6cd5\u4f53\u7cfb<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u8c4a\u5bcc\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/a>      <\/li>      <li>        <a href=\"#i-6\">\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30b5\u30dd\u30fc\u30c8\u4f53\u5236<\/a>      <\/li>      <li>        <a href=\"#i-7\">\u9ad8\u3044\u751f\u7523\u6027\u3068\u4fdd\u5b88\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-8\">\u591a\u69d8\u306a\u958b\u767a\u73fe\u5834\u3067\u306e\u63a1\u7528\u5b9f\u7e3e<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-9\">Ruby\u7fd2\u5f97\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-10\">\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u672a\u7d4c\u9a13\u304b\u3089Rubyist\u306b\u306a\u308b\u307e\u3067\u306e\u9053\u306e\u308a<\/a>      <\/li>      <li>        <a href=\"#i-11\">\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3068\u305d\u306e\u6d3b\u7528\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-12\">\u3064\u307e\u305a\u304d\u3084\u3059\u3044\u30dd\u30a4\u30f3\u30c8\u3068\u89e3\u6c7a\u7b56<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-13\">\u5b9f\u8df5\u3067\u6d3b\u304d\u308bRuby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u7279\u5fb4<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-14\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u3088\u308b\u67d4\u8edf\u306a\u62e1\u5f35\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u5b9f\u52d9\u3067\u5f79\u7acb\u3064\u30a4\u30c7\u30a3\u30aa\u30e0\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-17\">\u5b9f\u8df5\u3067\u6d3b\u304d\u308bRuby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u7279\u5fb4<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9f\u88c5\u65b9\u6cd5<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u3088\u308b\u67d4\u8edf\u306a\u62e1\u5f35\u6027<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u5b9f\u52d9\u3067\u5f79\u7acb\u3064\u30a4\u30c7\u30a3\u30aa\u30e0\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/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\">Ruby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3068\u306f\uff1a\u8a95\u751f\u304b\u3089\u73fe\u5728\u307e\u3067\u306e\u9032\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u65e5\u672c\u767a\u306e\u4e16\u754c\u6a19\u6e96\u8a00\u8a9e\u3068\u306a\u3063\u305f\u7406\u7531<\/h3>\n\n\n\n<p>1995\u5e74\u3001\u307e\u3064\u3082\u3068\u3086\u304d\u3072\u308d\uff08\u901a\u79f0Matz\uff09\u306b\u3088\u3063\u3066\u8a95\u751f\u3057\u305fRuby\u306f\u3001\u65e5\u672c\u767a\u306e\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3068\u3057\u3066\u4e16\u754c\u7684\u306a\u6210\u529f\u3092\u53ce\u3081\u307e\u3057\u305f\u3002\u305d\u306e\u80cc\u666f\u306b\u306f\u4ee5\u4e0b\u306e\u9769\u65b0\u7684\u306a\u7279\u5fb4\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u30b7\u30f3\u30d7\u30eb\u3055\u3068\u8868\u73fe\u529b\u306e\u4e21\u7acb<\/strong><\/li>\n\n\n\n<li>\u82f1\u8a9e\u306b\u8fd1\u3044\u81ea\u7136\u306a\u6587\u6cd5\u69cb\u9020<\/li>\n\n\n\n<li>\u6700\u5c0f\u9650\u306e\u30b3\u30fc\u30c9\u3067\u6700\u5927\u9650\u306e\u6a5f\u80fd\u3092\u5b9f\u73fe<\/li>\n\n\n\n<li>\u8907\u96d1\u306a\u51e6\u7406\u3082\u76f4\u611f\u7684\u306b\u8a18\u8ff0\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u30aa\u30fc\u30d7\u30f3\u30bd\u30fc\u30b9\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u529b<\/strong><\/li>\n\n\n\n<li>\u65e9\u671f\u304b\u3089\u306e\u30b0\u30ed\u30fc\u30d0\u30eb\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u5f62\u6210<\/li>\n\n\n\n<li>GitHub\u7b49\u3067\u306e\u30a2\u30af\u30c6\u30a3\u30d6\u306a\u958b\u767a\u8ca2\u732e<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u591a\u8a00\u8a9e\u5bfe\u5fdc<\/li>\n<\/ul>\n\n\n\n<p>\u7279\u306b\u30012004\u5e74\u306b\u767b\u5834\u3057\u305fRuby on Rails\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u3001Ruby\u306e\u4e16\u754c\u7684\u666e\u53ca\u306e\u6c7a\u5b9a\u7684\u306a\u8ee2\u63db\u70b9\u3068\u306a\u308a\u307e\u3057\u305f\u3002Twitter\u3084GitHub\u306a\u3069\u306e\u8457\u540d\u30b5\u30fc\u30d3\u30b9\u3067\u306e\u63a1\u7528\u5b9f\u7e3e\u304c\u3001Ruby\u306e\u4fe1\u983c\u6027\u3068\u5b9f\u7528\u6027\u3092\u8a3c\u660e\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306e\u5e78\u305b\u3092\u8ffd\u6c42\u3059\u308b\u8a00\u8a9e\u8a2d\u8a08\u601d\u60f3<\/h3>\n\n\n\n<p>Ruby\u306e\u6839\u5e79\u3092\u6210\u3059\u300c\u30d7\u30ed\u30b0\u30e9\u30de\u30fc\u306e\u5e78\u305b\u300d\u3068\u3044\u3046\u8a2d\u8a08\u601d\u60f3\u306f\u3001\u4ee5\u4e0b\u306e\u539f\u5247\u3068\u3057\u3066\u5177\u73fe\u5316\u3055\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e00\u8cab\u6027\u306e\u3042\u308b\u6587\u6cd5\u8a2d\u8a08<\/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=\"\">   # \u5168\u3066\u304c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\n   5.times { puts \"Hello\" }  # \u6570\u5024\u3067\u3082\u30e1\u30bd\u30c3\u30c9\u304c\u547c\u3079\u308b\n   [1, 2, 3].each { |n| puts n }  # \u914d\u5217\u306e\u64cd\u4f5c\u3082\u76f4\u611f\u7684<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u8c4a\u5bcc\u306a\u8868\u73fe\u65b9\u6cd5<\/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=\"\">   # \u540c\u3058\u51e6\u7406\u3092\u8907\u6570\u306e\u65b9\u6cd5\u3067\u66f8\u3051\u308b\n   # \u6761\u4ef6\u5206\u5c90\u306e\u4f8b\n   status = if age &gt;= 18\n             \"adult\"\n           else\n             \"minor\"\n           end\n\n   # \u307e\u305f\u306f\n   status = age &gt;= 18 ? \"adult\" : \"minor\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u958b\u767a\u8005\u8996\u70b9\u306e\u6a5f\u80fd<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5f37\u529b\u306a\u4f8b\u5916\u51e6\u7406\u6a5f\u80fd<\/li>\n\n\n\n<li>\u67d4\u8edf\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u6a5f\u80fd<\/li>\n\n\n\n<li>\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ul>\n\n\n\n<p>\u73fe\u5728\u306eRuby 3\u7cfb\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u9032\u5316\u304c\u9042\u3052\u3089\u308c\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-ef6338bb-ca9f-436f-a845-24625c501838\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u5fb4<\/th><th>\u8a73\u7d30<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u578b\u30b7\u30b9\u30c6\u30e0<\/td><td>RBS\uff08Ruby Signature\uff09\u306e\u5c0e\u5165<\/td><td>\u5927\u898f\u6a21\u958b\u767a\u3067\u306e\u5b89\u5168\u6027\u5411\u4e0a<\/td><\/tr><tr><td>\u4e26\u5217\u51e6\u7406<\/td><td>Ractor\u306e\u5b9f\u88c5<\/td><td>\u30de\u30eb\u30c1\u30b3\u30a2\u6d3b\u7528\u306e\u52b9\u7387\u5316<\/td><\/tr><tr><td>JIT<\/td><td>MJIT\/YJIT\u306e\u6539\u5584<\/td><td>\u5b9f\u884c\u901f\u5ea6\u306e\u5927\u5e45\u306a\u5411\u4e0a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>Ruby\u306f\u3001\u5358\u306a\u308b\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u8a00\u8a9e\u3092\u8d85\u3048\u3066\u3001\u300c\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u3092\u697d\u3057\u3080\u300d\u3068\u3044\u3046\u6587\u5316\u3092\u5275\u9020\u3057\u307e\u3057\u305f\u3002\u3053\u306e\u601d\u60f3\u306f\u3001\u4e16\u754c\u4e2d\u306e\u958b\u767a\u8005\u306b\u652f\u6301\u3055\u308c\u7d9a\u3051\u3066\u3044\u308b\u7406\u7531\u306e\u4e00\u3064\u3068\u306a\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u6700\u65b0\u306eRuby 3.3\u3067\u306f\u3001\u5f93\u6765\u306e\u7279\u5fb4\u3092\u7dad\u6301\u3057\u306a\u304c\u3089\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3068\u958b\u767a\u8005\u4f53\u9a13\u306e\u66f4\u306a\u308b\u5411\u4e0a\u304c\u56f3\u3089\u308c\u3066\u3044\u307e\u3059\u3002\u7279\u306b\u3001YJIT\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u6539\u5584\u306b\u3088\u308a\u3001\u5b9f\u884c\u901f\u5ea6\u304c\u5927\u5e45\u306b\u5411\u4e0a\u3057\u3001\u5927\u898f\u6a21\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u306b\u304a\u3051\u308b\u5b9f\u7528\u6027\u304c\u4e00\u5c64\u9ad8\u307e\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">Ruby\u304c\u9078\u3070\u308c\u7d9a\u3051\u308b5\u3064\u306e\u6c7a\u5b9a\u7684\u306a\u7406\u7531<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u76f4\u611f\u7684\u3067\u8aad\u307f\u3084\u3059\u3044\u6587\u6cd5\u4f53\u7cfb<\/h3>\n\n\n\n<p>Ruby\u306e\u6700\u5927\u306e\u7279\u5fb4\u306f\u3001\u82f1\u8a9e\u306b\u8fd1\u3044\u81ea\u7136\u306a\u6587\u6cd5\u69cb\u9020\u3067\u3059\u3002\u4ee5\u4e0b\u306e\u30b3\u30fc\u30c9\u4f8b\u3092\u898b\u3066\u307f\u307e\u3057\u3087\u3046\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=\"\"># \u914d\u5217\u306e\u64cd\u4f5c\u4f8b\nfruits = ['apple', 'banana', 'orange']\nfruits.each do |fruit|\n  puts \"I love #{fruit}!\"\nend\n\n# \u30e1\u30bd\u30c3\u30c9\u5b9a\u7fa9\u306e\u4f8b\ndef greet(name)\n  return \"Hello, #{name}!\" if name\n  \"Hello, stranger!\"\nend\n\n# \u6761\u4ef6\u5206\u5c90\u306e\u4f8b\nage = 25\nstatus = case age\n         when 0..12 then \"child\"\n         when 13..19 then \"teenager\"\n         else \"adult\"\n         end<\/pre>\n\n\n\n<p>\u3053\u306e\u3088\u3046\u306b\u3001Ruby\u306e\u30b3\u30fc\u30c9\u306f\u300c\u8aad\u3080\u300d\u3053\u3068\u3092\u91cd\u8996\u3057\u305f\u8a2d\u8a08\u3068\u306a\u3063\u3066\u304a\u308a\u3001\u307e\u308b\u3067\u82f1\u6587\u3092\u8aad\u3080\u3088\u3046\u306a\u611f\u899a\u3067\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7406\u89e3\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u8c4a\u5bcc\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u3068\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af<\/h3>\n\n\n\n<p>RubyGems\u3092\u901a\u3058\u3066\u63d0\u4f9b\u3055\u308c\u308b\u8c4a\u5bcc\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\uff08Gem\uff09\u306f\u3001\u958b\u767a\u52b9\u7387\u3092\u5927\u304d\u304f\u5411\u4e0a\u3055\u305b\u307e\u3059\uff1a<\/p>\n\n\n<div id=\"id-58bf2f8b-c7a6-4bfa-b496-dae6cb8b7f81\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30ab\u30c6\u30b4\u30ea<\/th><th>\u4e3b\u8981\u306aGem<\/th><th>\u7528\u9014<\/th><\/tr><\/thead><tbody><tr><td>Web\u958b\u767a<\/td><td>Rails, Sinatra<\/td><td>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u69cb\u7bc9<\/td><\/tr><tr><td>\u30c6\u30b9\u30c8<\/td><td>RSpec, Minitest<\/td><td>\u81ea\u52d5\u30c6\u30b9\u30c8<\/td><\/tr><tr><td>\u30c7\u30d0\u30c3\u30b0<\/td><td>pry, byebug<\/td><td>\u30c7\u30d0\u30c3\u30b0\u652f\u63f4<\/td><\/tr><tr><td>API\u958b\u767a<\/td><td>grape, jbuilder<\/td><td>API\u30b5\u30fc\u30d0\u30fc\u69cb\u7bc9<\/td><\/tr><tr><td>\u8a8d\u8a3c\u30fb\u8a8d\u53ef<\/td><td>devise, cancancan<\/td><td>\u30e6\u30fc\u30b6\u30fc\u7ba1\u7406<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30b5\u30dd\u30fc\u30c8\u4f53\u5236<\/h3>\n\n\n\n<p>Ruby\u306e\u5f37\u307f\u306e\u4e00\u3064\u306f\u3001\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306e\u5b58\u5728\u3067\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u6280\u8853\u30ab\u30f3\u30d5\u30a1\u30ec\u30f3\u30b9\uff08RubyKaigi, RubyConf\uff09<\/li>\n\n\n\n<li>\u5145\u5b9f\u3057\u305f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff08Ruby-Doc.org, Rails Guides\uff09<\/li>\n\n\n\n<li>Stack Overflow\u306a\u3069\u3067\u306e\u8fc5\u901f\u306a\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u4e16\u754c\u4e2d\u306eRubyist\u306b\u3088\u308b\u7d99\u7d9a\u7684\u306a\u6539\u5584\u63d0\u6848<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-7\">\u9ad8\u3044\u751f\u7523\u6027\u3068\u4fdd\u5b88\u6027<\/h3>\n\n\n\n<p>Ruby\u306e\u8a2d\u8a08\u601d\u60f3\u306f\u3001\u958b\u767a\u52b9\u7387\u3068\u4fdd\u5b88\u6027\u306e\u5411\u4e0a\u306b\u76f4\u7d50\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=\"\"># DRY\uff08Don't Repeat Yourself\uff09\u306e\u4f8b\nmodule Loggable\n  def log(message)\n    puts \"[#{Time.now}] #{message}\"\n  end\nend\n\nclass UserService\n  include Loggable\n\n  def create_user(name)\n    log(\"Creating user: #{name}\")\n    # \u30e6\u30fc\u30b6\u30fc\u4f5c\u6210\u306e\u30ed\u30b8\u30c3\u30af\n  end\nend\n\n# \u30a8\u30ec\u30ac\u30f3\u30c8\u306a\u4f8b\u5916\u51e6\u7406\ndef process_data(data)\n  raise ArgumentError, \"\u30c7\u30fc\u30bf\u304c\u7a7a\u3067\u3059\" if data.nil?\n\n  begin\n    # \u30c7\u30fc\u30bf\u51e6\u7406\u30ed\u30b8\u30c3\u30af\n  rescue StandardError =&gt; e\n    log(\"\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f: #{e.message}\")\n    nil\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">\u591a\u69d8\u306a\u958b\u767a\u73fe\u5834\u3067\u306e\u63a1\u7528\u5b9f\u7e3e<\/h3>\n\n\n\n<p>Ruby\u306f\u3001\u69d8\u3005\u306a\u5206\u91ce\u3067\u5b9f\u7e3e\u3092\u6b8b\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Web\u30b5\u30fc\u30d3\u30b9\u958b\u767a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Airbnb<\/li>\n\n\n\n<li>GitHub<\/li>\n\n\n\n<li>Shopify<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b7\u30b9\u30c6\u30e0\u30c4\u30fc\u30eb\u958b\u767a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Chef\uff08\u69cb\u6210\u7ba1\u7406\uff09<\/li>\n\n\n\n<li>Fluentd\uff08\u30ed\u30b0\u53ce\u96c6\uff09<\/li>\n\n\n\n<li>Vagrant\uff08\u4eee\u60f3\u74b0\u5883\u7ba1\u7406\uff09<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u5206\u6790\u30fb\u6a5f\u68b0\u5b66\u7fd2<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6a5f\u68b0\u5b66\u7fd2\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u7d71\u5408<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u51e6\u7406\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u69cb\u7bc9<\/li>\n\n\n\n<li>\u30d3\u30b8\u30cd\u30b9\u30a4\u30f3\u30c6\u30ea\u30b8\u30a7\u30f3\u30b9\u30c4\u30fc\u30eb<\/li>\n<\/ul>\n\n\n\n<p>\u7279\u306b\u3001\u30b9\u30bf\u30fc\u30c8\u30a2\u30c3\u30d7\u4f01\u696d\u304b\u3089\u30a8\u30f3\u30bf\u30fc\u30d7\u30e9\u30a4\u30ba\u307e\u3067\u3001\u5e45\u5e83\u3044\u898f\u6a21\u306e\u4f01\u696d\u3067Ruby\u304c\u63a1\u7528\u3055\u308c\u3066\u3044\u308b\u7406\u7531\u3068\u3057\u3066\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8fc5\u901f\u306a\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u958b\u767a\u304c\u53ef\u80fd<\/li>\n\n\n\n<li>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u78ba\u4fdd\u304c\u5bb9\u6613<\/li>\n\n\n\n<li>\u4fdd\u5b88\u30fb\u904b\u7528\u30b3\u30b9\u30c8\u306e\u6700\u9069\u5316<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u4eba\u6750\u5e02\u5834<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u306b\u3088\u308a\u3001Ruby\u306f2024\u5e74\u73fe\u5728\u3082\u591a\u304f\u306e\u958b\u767a\u73fe\u5834\u3067\u91cd\u8981\u306a\u9078\u629e\u80a2\u3068\u3057\u3066\u4f4d\u7f6e\u3065\u3051\u3089\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-9\">Ruby\u7fd2\u5f97\u306e\u30ed\u30fc\u30c9\u30de\u30c3\u30d7<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u672a\u7d4c\u9a13\u304b\u3089Rubyist\u306b\u306a\u308b\u307e\u3067\u306e\u9053\u306e\u308a<\/h3>\n\n\n\n<p>\u521d\u5fc3\u8005\u304cRuby\u3092\u7fd2\u5f97\u3059\u308b\u305f\u3081\u306e\u6bb5\u968e\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<p><strong>\u7b2c1\u6bb5\u968e\uff1a\u57fa\u790e\u56fa\u3081\uff081-2\u30f6\u6708\uff09<\/strong><\/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\u521d\u306b\u5b66\u3076\u3079\u304d\u57fa\u672c\u6982\u5ff5\nputs \"Hello, World!\"  # \u57fa\u672c\u7684\u306a\u51fa\u529b\nname = \"Alice\"        # \u5909\u6570\u306e\u4f7f\u7528\nage = 25             # \u6570\u5024\u306e\u6271\u3044\n\n# \u57fa\u672c\u7684\u306a\u5236\u5fa1\u69cb\u9020\nif age &gt;= 18\n  puts \"#{name} is an adult\"\nelse\n  puts \"#{name} is a minor\"\nend\n\n# \u914d\u5217\u306e\u57fa\u672c\u64cd\u4f5c\nnumbers = [1, 2, 3, 4, 5]\nnumbers.each do |n|\n  puts n * 2\nend<\/pre>\n\n\n\n<p><strong>\u7b2c2\u6bb5\u968e\uff1a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u7406\u89e3\uff082-3\u30f6\u6708\uff09<\/strong><\/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\u30e9\u30b9\u3068\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u57fa\u672c\nclass Person\n  def initialize(name, age)\n    @name = name\n    @age = age\n  end\n\n  def greet\n    \"Hello, I'm #{@name}!\"\n  end\nend\n\n# \u7d99\u627f\u306e\u57fa\u672c\nclass Student &lt; Person\n  def study\n    \"#{@name} is studying Ruby\"\n  end\nend<\/pre>\n\n\n\n<p><strong>\u7b2c3\u6bb5\u968e\uff1a\u5b9f\u8df5\u7684\u30b9\u30ad\u30eb\uff083-4\u30f6\u6708\uff09<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gem\u306e\u4f7f\u7528\u65b9\u6cd5<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u66f8\u304d\u65b9<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30b0\u6280\u8853<\/li>\n\n\n\n<li>Git\u64cd\u4f5c<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u52b9\u7387\u7684\u306a\u5b66\u7fd2\u30ea\u30bd\u30fc\u30b9\u3068\u305d\u306e\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p><strong>\u30aa\u30f3\u30e9\u30a4\u30f3\u5b66\u7fd2\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/strong><\/p>\n\n\n<div id=\"id-e3822b36-48f4-48f6-896d-38780c59be7f\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0<\/th><th>\u7279\u5fb4<\/th><th>\u63a8\u5968\u5b66\u7fd2\u671f\u9593<\/th><\/tr><\/thead><tbody><tr><td>Ruby\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/td><td>\u57fa\u672c\u6587\u6cd5\u3068\u6a5f\u80fd\u306e\u8a73\u7d30\u306a\u89e3\u8aac<\/td><td>\u5e38\u6642\u53c2\u7167<\/td><\/tr><tr><td>Progate<\/td><td>\u30a4\u30f3\u30bf\u30e9\u30af\u30c6\u30a3\u30d6\u306a\u57fa\u790e\u5b66\u7fd2<\/td><td>1-2\u9031\u9593<\/td><\/tr><tr><td>Ruby Koans<\/td><td>\u30c6\u30b9\u30c8\u99c6\u52d5\u3067\u306e\u5b66\u7fd2<\/td><td>2-3\u9031\u9593<\/td><\/tr><tr><td>exercism.io<\/td><td>\u5b9f\u8df5\u7684\u306a\u8ab2\u984c\u89e3\u6c7a<\/td><td>1-2\u30f6\u6708<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p><strong>\u66f8\u7c4d\u306b\u3088\u308b\u30b9\u30ad\u30eb\u30a2\u30c3\u30d7<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5165\u9580\u30ec\u30d9\u30eb<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u300c\u30d7\u30ed\u3092\u76ee\u6307\u3059\u4eba\u306e\u305f\u3081\u306eRuby\u5165\u9580\u300d<\/li>\n\n\n\n<li>\u300c\u305f\u306e\u3057\u3044Ruby\u300d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e2d\u7d1a\u30ec\u30d9\u30eb<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u300c\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0Ruby\u300d<\/li>\n\n\n\n<li>\u300cEffective Ruby\u300d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4e0a\u7d1a\u30ec\u30d9\u30eb<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u300cRuby Under a Microscope\u300d<\/li>\n\n\n\n<li>\u300cThe Well-Grounded Rubyist\u300d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u3064\u307e\u305a\u304d\u3084\u3059\u3044\u30dd\u30a4\u30f3\u30c8\u3068\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30b9\u30b3\u30fc\u30d7\u306e\u7406\u89e3<\/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=\"\"># \u3088\u304f\u3042\u308b\u6df7\u4e71\u30dd\u30a4\u30f3\u30c8\nx = 10\n5.times do |i|\n  x = i  # \u30d6\u30ed\u30c3\u30af\u5185\u3067\u306e\u30b9\u30b3\u30fc\u30d7\n  y = i  # \u30d6\u30ed\u30c3\u30af\u5185\u3067\u306e\u65b0\u3057\u3044\u5909\u6570\nend\nputs x  # =&gt; 4\nputs y  # =&gt; NameError<\/pre>\n\n\n\n<p>\u89e3\u6c7a\u7b56\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5909\u6570\u306e\u30b9\u30b3\u30fc\u30d7\u3092\u56f3\u793a\u3057\u3066\u6574\u7406<\/li>\n\n\n\n<li>\u30d7\u30ed\u30b0\u30e9\u30e0\u5b9f\u884c\u306e\u6d41\u308c\u3092\u7d19\u306b\u66f8\u3044\u3066\u78ba\u8a8d<\/li>\n\n\n\n<li>irb\uff08\u5bfe\u8a71\u578b\u5b9f\u884c\u74b0\u5883\uff09\u3067\u52d5\u4f5c\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u306e\u8003\u3048\u65b9<\/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=\"\"># \u521d\u5fc3\u8005\u304c\u3064\u307e\u305a\u304d\u3084\u3059\u3044\u8a2d\u8a08\nclass User\n  # \u5168\u3066\u306e\u51e6\u7406\u30921\u3064\u306e\u30af\u30e9\u30b9\u306b\u8a70\u3081\u8fbc\u3093\u3067\u3057\u307e\u3046\n  def do_everything\n    # \u80a5\u5927\u5316\u3057\u305f\u30e1\u30bd\u30c3\u30c9\n  end\nend\n\n# \u6539\u5584\u5f8c\u306e\u8a2d\u8a08\nclass User\n  def initialize(name)\n    @name = name\n  end\n\n  def profile\n    UserProfile.new(@name).display\n  end\nend\n\nclass UserProfile\n  # \u8cac\u52d9\u306e\u5206\u96e2\nend<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u8aad\u307f\u65b9<\/li>\n\n\n\n<li>\u30c7\u30d0\u30c3\u30ac\u30fc\u306e\u4f7f\u7528\u65b9\u6cd5<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u306e\u66f8\u304d\u65b9<\/li>\n<\/ul>\n\n\n\n<p>\u514b\u670d\u306e\u305f\u3081\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u306f\u5b66\u7fd2\u306e\u6a5f\u4f1a\u3068\u3057\u3066\u6349\u3048\u308b<\/li>\n\n\n\n<li>\u540c\u3058\u30a8\u30e9\u30fc\u3092\u7e70\u308a\u8fd4\u3057\u518d\u73fe\u3057\u3066\u7406\u89e3\u3092\u6df1\u3081\u308b<\/li>\n\n\n\n<li>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u8cea\u554f\u3059\u308b\u969b\u306f\u5177\u4f53\u7684\u306a\u60c5\u5831\u3092\u63d0\u4f9b<\/li>\n<\/ul>\n\n\n\n<p>\u5b66\u7fd2\u3092\u7d99\u7d9a\u7684\u306b\u9032\u3081\u308b\u305f\u3081\u306eTIPS\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6bce\u65e5\u5c11\u3057\u305a\u3064\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u7fd2\u6163\u3092\u3064\u3051\u308b<\/li>\n\n\n\n<li>\u500b\u4eba\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u6301\u3064<\/li>\n\n\n\n<li>\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u53c2\u52a0\u3059\u308b<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u3092\u53d7\u3051\u308b\u6a5f\u4f1a\u3092\u4f5c\u308b<\/li>\n\n\n\n<li>\u6280\u8853\u30d6\u30ed\u30b0\u3092\u66f8\u3044\u3066\u77e5\u8b58\u3092\u6574\u7406\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30b9\u30c6\u30c3\u30d7\u3092\u7740\u5b9f\u306b\u9032\u3081\u308b\u3053\u3068\u3067\u3001\u78ba\u5b9f\u306bRuby\u306e\u30b9\u30ad\u30eb\u3092\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-13\">\u5b9f\u8df5\u3067\u6d3b\u304d\u308bRuby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u7279\u5fb4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>Ruby\u306b\u304a\u3051\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u3001\u5b9f\u52d9\u3067\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u3092\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\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=\"\"># \u5b9f\u8df5\u7684\u306a\u30af\u30e9\u30b9\u8a2d\u8a08\u306e\u4f8b\nclass Product\n  attr_reader :id, :name, :price\n\n  def initialize(id, name, price)\n    @id = id\n    @name = name\n    @price = price\n  end\n\n  # \u5024\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n  def price_with_tax\n    TaxCalculator.new(price).calculate\n  end\n\n  # \u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u306e\u6d3b\u7528\n  def display(formatter)\n    formatter.format(self)\n  end\nend\n\n# \u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u3092\u9069\u7528\u3057\u305f\u8a2d\u8a08\nclass TaxCalculator\n  TAX_RATE = 0.10\n\n  def initialize(price)\n    @price = price\n  end\n\n  def calculate\n    (@price * (1 + TAX_RATE)).round\n  end\nend\n\n# Strategy \u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u4f8b\nclass JSONFormatter\n  def format(product)\n    {\n      id: product.id,\n      name: product.name,\n      price: product.price_with_tax\n    }.to_json\n  end\nend\n\nclass HTMLFormatter\n  def format(product)\n    \"&lt;div class='product'&gt;\n      &lt;h2&gt;#{product.name}&lt;\/h2&gt;\n      &lt;p&gt;\u4fa1\u683c: #{product.price_with_tax}\u5186&lt;\/p&gt;\n    &lt;\/div&gt;\"\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u3088\u308b\u67d4\u8edf\u306a\u62e1\u5f35\u6027<\/h3>\n\n\n\n<p>Ruby\u306e\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\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=\"\"># \u52d5\u7684\u306a\u30e1\u30bd\u30c3\u30c9\u5b9a\u7fa9\nmodule Validatable\n  def self.included(base)\n    base.extend(ClassMethods)\n  end\n\n  module ClassMethods\n    def validate_presence_of(*attributes)\n      attributes.each do |attribute|\n        define_method(\"validate_#{attribute}\") do\n          value = send(attribute)\n          raise \"#{attribute} cannot be blank\" if value.nil? || value.empty?\n        end\n      end\n    end\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nclass User\n  include Validatable\n\n  attr_accessor :name, :email\n  validate_presence_of :name, :email\n\n  def save\n    validate_name\n    validate_email\n    # \u4fdd\u5b58\u51e6\u7406\n  end\nend\n\n# Method Missing \u3092\u6d3b\u7528\u3057\u305f\u52d5\u7684\u51e6\u7406\nclass DataStore\n  def initialize\n    @data = {}\n  end\n\n  def method_missing(method_name, *args)\n    if method_name.to_s =~ \/^find_by_(.+)$\/\n      find_by_attribute($1, args.first)\n    else\n      super\n    end\n  end\n\n  private\n\n  def find_by_attribute(attribute, value)\n    @data.select { |item| item[attribute.to_sym] == value }\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u5b9f\u52d9\u3067\u5f79\u7acb\u3064\u30a4\u30c7\u30a3\u30aa\u30e0\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u7684\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u51e6\u7406<\/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=\"\"># \u914d\u5217\u51e6\u7406\u306e\u6700\u9069\u5316\nusers = User.all\n\n# \u975e\u52b9\u7387\u306a\u5b9f\u88c5\nactive_users = []\nusers.each do |user|\n  active_users &lt;&lt; user if user.active?\nend\n\n# \u52b9\u7387\u7684\u306a\u5b9f\u88c5\nactive_users = users.select(&amp;:active?)\n\n# \u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u6d3b\u7528\nresult = users\n  .select(&amp;:active?)\n  .map(&amp;:name)\n  .join(\", \")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5<\/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=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\nclass Product\n  def self.featured_products\n    Rails.cache.fetch(\"featured_products\", expires_in: 1.hour) do\n      where(featured: true).to_a\n    end\n  end\nend\n\n# \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316\nclass BulkProcessor\n  def process_items(items)\n    items.each_slice(1000) do |batch|\n      process_batch(batch)\n    end\n  end\n\n  private\n\n  def process_batch(batch)\n    ActiveRecord::Base.transaction do\n      batch.each { |item| item.process }\n    end\n  end\nend<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u306e\u5b9f\u8df5<\/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=\"\"># RSpec\u3092\u4f7f\u7528\u3057\u305f\u30c6\u30b9\u30c8\u306e\u4f8b\nRSpec.describe Order do\n  describe \"#total_amount\" do\n    let(:order) { build(:order) }\n\n    context \"\u5546\u54c1\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\" do\n      before do\n        create(:order_item, order: order, price: 1000, quantity: 2)\n        create(:order_item, order: order, price: 500, quantity: 1)\n      end\n\n      it \"\u5408\u8a08\u91d1\u984d\u304c\u6b63\u3057\u304f\u8a08\u7b97\u3055\u308c\u308b\" do\n        expect(order.total_amount).to eq(2500)\n      end\n    end\n  end\nend<\/pre>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n<div id=\"id-91b84ed9-f445-48ad-a33d-a05079f1ddf4\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89b3\u70b9<\/th><th>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u8a2d\u8a08<\/td><td>SOLID\u539f\u5247\u306e\u9069\u7528<\/td><td>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/td><\/tr><tr><td>\u547d\u540d<\/td><td>\u660e\u78ba\u3067\u610f\u56f3\u306e\u4f1d\u308f\u308b\u547d\u540d<\/td><td>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/td><\/tr><tr><td>\u30c6\u30b9\u30c8<\/td><td>\u30ab\u30d0\u30ec\u30c3\u30b8\u3068\u54c1\u8cea\u306e\u4e21\u7acb<\/td><td>\u5b89\u5b9a\u6027\u306e\u78ba\u4fdd<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/td><td>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/td><\/tr><tr><td>\u30c7\u30d0\u30c3\u30b0<\/td><td>\u30ed\u30b0\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5145\u5b9f<\/td><td>\u904b\u7528\u6027\u306e\u5411\u4e0a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u3068\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u306aRuby\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u5b9f\u8df5\u3067\u6d3b\u304d\u308bRuby\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u7279\u5fb4<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306e\u5b9f\u88c5\u65b9\u6cd5<\/h3>\n\n\n\n<p>Ruby\u306b\u304a\u3051\u308b\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u6307\u5411\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306f\u3001\u5b9f\u52d9\u3067\u306e\u53ef\u8aad\u6027\u3068\u4fdd\u5b88\u6027\u3092\u91cd\u8996\u3057\u305f\u5b9f\u88c5\u304c\u53ef\u80fd\u3067\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=\"\"># \u5b9f\u8df5\u7684\u306a\u30af\u30e9\u30b9\u8a2d\u8a08\u306e\u4f8b\nclass Product\n  attr_reader :id, :name, :price\n\n  def initialize(id, name, price)\n    @id = id\n    @name = name\n    @price = price\n  end\n\n  # \u5024\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\n  def price_with_tax\n    TaxCalculator.new(price).calculate\n  end\n\n  # \u30dd\u30ea\u30e2\u30fc\u30d5\u30a3\u30ba\u30e0\u306e\u6d3b\u7528\n  def display(formatter)\n    formatter.format(self)\n  end\nend\n\n# \u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u3092\u9069\u7528\u3057\u305f\u8a2d\u8a08\nclass TaxCalculator\n  TAX_RATE = 0.10\n\n  def initialize(price)\n    @price = price\n  end\n\n  def calculate\n    (@price * (1 + TAX_RATE)).round\n  end\nend\n\n# Strategy \u30d1\u30bf\u30fc\u30f3\u306e\u5b9f\u88c5\u4f8b\nclass JSONFormatter\n  def format(product)\n    {\n      id: product.id,\n      name: product.name,\n      price: product.price_with_tax\n    }.to_json\n  end\nend\n\nclass HTMLFormatter\n  def format(product)\n    \"&lt;div class='product'&gt;\n      &lt;h2&gt;#{product.name}&lt;\/h2&gt;\n      &lt;p&gt;\u4fa1\u683c: #{product.price_with_tax}\u5186&lt;\/p&gt;\n    &lt;\/div&gt;\"\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u306b\u3088\u308b\u67d4\u8edf\u306a\u62e1\u5f35\u6027<\/h3>\n\n\n\n<p>Ruby\u306e\u30e1\u30bf\u30d7\u30ed\u30b0\u30e9\u30df\u30f3\u30b0\u6a5f\u80fd\u3092\u6d3b\u7528\u3057\u305f\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\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=\"\"># \u52d5\u7684\u306a\u30e1\u30bd\u30c3\u30c9\u5b9a\u7fa9\nmodule Validatable\n  def self.included(base)\n    base.extend(ClassMethods)\n  end\n\n  module ClassMethods\n    def validate_presence_of(*attributes)\n      attributes.each do |attribute|\n        define_method(\"validate_#{attribute}\") do\n          value = send(attribute)\n          raise \"#{attribute} cannot be blank\" if value.nil? || value.empty?\n        end\n      end\n    end\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nclass User\n  include Validatable\n\n  attr_accessor :name, :email\n  validate_presence_of :name, :email\n\n  def save\n    validate_name\n    validate_email\n    # \u4fdd\u5b58\u51e6\u7406\n  end\nend\n\n# Method Missing \u3092\u6d3b\u7528\u3057\u305f\u52d5\u7684\u51e6\u7406\nclass DataStore\n  def initialize\n    @data = {}\n  end\n\n  def method_missing(method_name, *args)\n    if method_name.to_s =~ \/^find_by_(.+)$\/\n      find_by_attribute($1, args.first)\n    else\n      super\n    end\n  end\n\n  private\n\n  def find_by_attribute(attribute, value)\n    @data.select { |item| item[attribute.to_sym] == value }\n  end\nend<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u5b9f\u52d9\u3067\u5f79\u7acb\u3064\u30a4\u30c7\u30a3\u30aa\u30e0\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52b9\u7387\u7684\u306a\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u51e6\u7406<\/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=\"\"># \u914d\u5217\u51e6\u7406\u306e\u6700\u9069\u5316\nusers = User.all\n\n# \u975e\u52b9\u7387\u306a\u5b9f\u88c5\nactive_users = []\nusers.each do |user|\n  active_users &lt;&lt; user if user.active?\nend\n\n# \u52b9\u7387\u7684\u306a\u5b9f\u88c5\nactive_users = users.select(&amp;:active?)\n\n# \u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u6d3b\u7528\nresult = users\n  .select(&amp;:active?)\n  .map(&amp;:name)\n  .join(\", \")<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u8003\u616e\u3057\u305f\u5b9f\u88c5<\/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=\"\"># \u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528\nclass Product\n  def self.featured_products\n    Rails.cache.fetch(\"featured_products\", expires_in: 1.hour) do\n      where(featured: true).to_a\n    end\n  end\nend\n\n# \u30d0\u30c3\u30c1\u51e6\u7406\u306e\u6700\u9069\u5316\nclass BulkProcessor\n  def process_items(items)\n    items.each_slice(1000) do |batch|\n      process_batch(batch)\n    end\n  end\n\n  private\n\n  def process_batch(batch)\n    ActiveRecord::Base.transaction do\n      batch.each { |item| item.process }\n    end\n  end\nend<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u306e\u5b9f\u8df5<\/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=\"\"># RSpec\u3092\u4f7f\u7528\u3057\u305f\u30c6\u30b9\u30c8\u306e\u4f8b\nRSpec.describe Order do\n  describe \"#total_amount\" do\n    let(:order) { build(:order) }\n\n    context \"\u5546\u54c1\u304c\u5b58\u5728\u3059\u308b\u5834\u5408\" do\n      before do\n        create(:order_item, order: order, price: 1000, quantity: 2)\n        create(:order_item, order: order, price: 500, quantity: 1)\n      end\n\n      it \"\u5408\u8a08\u91d1\u984d\u304c\u6b63\u3057\u304f\u8a08\u7b97\u3055\u308c\u308b\" do\n        expect(order.total_amount).to eq(2500)\n      end\n    end\n  end\nend<\/pre>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u91cd\u8981\u306a\u30dd\u30a4\u30f3\u30c8\uff1a<\/p>\n\n\n<div id=\"id-752bf1bb-e92c-4bb5-bc08-2e4d2b1c0c71\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u89b3\u70b9<\/th><th>\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/th><th>\u30e1\u30ea\u30c3\u30c8<\/th><\/tr><\/thead><tbody><tr><td>\u8a2d\u8a08<\/td><td>SOLID\u539f\u5247\u306e\u9069\u7528<\/td><td>\u4fdd\u5b88\u6027\u306e\u5411\u4e0a<\/td><\/tr><tr><td>\u547d\u540d<\/td><td>\u660e\u78ba\u3067\u610f\u56f3\u306e\u4f1d\u308f\u308b\u547d\u540d<\/td><td>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u5411\u4e0a<\/td><\/tr><tr><td>\u30c6\u30b9\u30c8<\/td><td>\u30ab\u30d0\u30ec\u30c3\u30b8\u3068\u54c1\u8cea\u306e\u4e21\u7acb<\/td><td>\u5b89\u5b9a\u6027\u306e\u78ba\u4fdd<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u9069\u5207\u306a\u30ad\u30e3\u30c3\u30b7\u30e5\u306e\u6d3b\u7528<\/td><td>\u30b9\u30b1\u30fc\u30e9\u30d3\u30ea\u30c6\u30a3\u306e\u5411\u4e0a<\/td><\/tr><tr><td>\u30c7\u30d0\u30c3\u30b0<\/td><td>\u30ed\u30b0\u3068\u30e2\u30cb\u30bf\u30ea\u30f3\u30b0\u306e\u5145\u5b9f<\/td><td>\u904b\u7528\u6027\u306e\u5411\u4e0a<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<p>\u3053\u308c\u3089\u306e\u7279\u5fb4\u3068\u5b9f\u8df5\u7684\u306a\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u9ad8\u54c1\u8cea\u306aRuby\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u304c\u53ef\u80fd\u3068\u306a\u308a\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-1546","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\/1546","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=1546"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1546\/revisions"}],"predecessor-version":[{"id":1547,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1546\/revisions\/1547"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}