{"id":1304,"date":"2025-03-24T08:52:23","date_gmt":"2025-03-23T23:52:23","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1304"},"modified":"2025-03-24T08:52:23","modified_gmt":"2025-03-23T23:52:23","slug":"%e3%80%90%e4%bf%9d%e5%ad%98%e7%89%88%e3%80%91ruby%e3%81%aejoin%e3%83%a1%e3%82%bd%e3%83%83%e3%83%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bc%9a%e9%85%8d%e5%88%97%e7%b5%90%e5%90%88%e3%81%ae","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1304","title":{"rendered":"\u3010\u4fdd\u5b58\u7248\u3011Ruby\u306ejoin\u30e1\u30bd\u30c3\u30c9\u5b8c\u5168\u30ac\u30a4\u30c9\uff1a\u914d\u5217\u7d50\u5408\u306e\u57fa\u790e\u304b\u3089\u5b9f\u8df5\u7684\u6d3b\u7528\u307e\u30677\u3064\u306e\u4f7f\u3044\u65b9"},"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\">join\u30e1\u30bd\u30c3\u30c9\u3068\u306f\uff1aRuby\u3067\u914d\u5217\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3059\u308b\u57fa\u672c\u6a5f\u80fd<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">\u914d\u5217\u306e\u8981\u7d20\u3092\u9023\u7d50\u3057\u3066\u6587\u5b57\u5217\u3092\u4f5c\u308b\u6a19\u6e96\u7684\u306a\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-2\">join\u30e1\u30bd\u30c3\u30c9\u304c\u89e3\u6c7a\u3059\u308b\u958b\u767a\u4e0a\u306e\u8ab2\u984c<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-3\">join\u30e1\u30bd\u30c3\u30c9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-4\">\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u914d\u5217\u3092\u7d50\u5408\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-5\">\u30ab\u30b9\u30bf\u30e0\u533a\u5207\u308a\u6587\u5b57\u3092\u6307\u5b9a\u3057\u3066\u7d50\u5408\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-6\">\u7a7a\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u9023\u7d50\u3059\u308b\u6d3b\u7528\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-7\">join\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u30d1\u30bf\u30fc\u30f37\u9078<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-8\">CSV\u30c7\u30fc\u30bf\u306e\u884c\u3092\u751f\u6210\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-9\">URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u69cb\u7bc9\u306b\u6d3b\u7528\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-10\">HTML\u30bf\u30b0\u306e\u5c5e\u6027\u3092\u52d5\u7684\u306b\u751f\u6210\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-11\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u7d44\u307f\u7acb\u3066\u3092\u52b9\u7387\u5316\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-12\">SQL\u6587\u306e\u52d5\u7684\u751f\u6210\u3067\u6d3b\u7528\u3059\u308b<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u30c6\u30ad\u30b9\u30c8\u751f\u6210\u306b\u4f7f\u7528\u3059\u308b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-14\">\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u6a19\u6e96\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u4f5c\u6210<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-15\">join\u30e1\u30bd\u30c3\u30c9\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-16\">\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-17\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u308b\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-18\">join\u30e1\u30bd\u30c3\u30c9\u3068\u95a2\u9023\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u3044\u5206\u3051<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-19\">to_s\u3068join\u306e\u9055\u3044\u3068\u9069\u5207\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">concat\u3001+\u6f14\u7b97\u5b50\u3068\u306e\u6bd4\u8f03\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-21\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">nil\u5024\u3084\u7570\u306a\u308b\u578b\u304c\u542b\u307e\u308c\u308b\u5834\u5408\u306e\u5bfe\u51e6\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-23\">\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u95a2\u9023\u306e\u554f\u984c\u89e3\u6c7a\u65b9\u6cd5<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-24\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076join\u30e1\u30bd\u30c3\u30c9\u306e\u5fdc\u7528<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-25\">Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u6d3b\u7528\u4f8b<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-26\">\u30c7\u30fc\u30bf\u51e6\u7406\u30d0\u30c3\u30c1\u3067\u306e\u5b9f\u88c5\u4f8b<\/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\">join\u30e1\u30bd\u30c3\u30c9\u3068\u306f\uff1aRuby\u3067\u914d\u5217\u3092\u6587\u5b57\u5217\u306b\u5909\u63db\u3059\u308b\u57fa\u672c\u6a5f\u80fd<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">\u914d\u5217\u306e\u8981\u7d20\u3092\u9023\u7d50\u3057\u3066\u6587\u5b57\u5217\u3092\u4f5c\u308b\u6a19\u6e96\u7684\u306a\u65b9\u6cd5<\/h3>\n\n\n\n<p>Ruby\u306ejoin\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u914d\u5217\u306e\u8981\u7d20\u30921\u3064\u306e\u6587\u5b57\u5217\u306b\u7d50\u5408\u3059\u308b\u5f37\u529b\u306a\u7d44\u307f\u8fbc\u307f\u30e1\u30bd\u30c3\u30c9\u3067\u3059\u3002\u3053\u306e\u30e1\u30bd\u30c3\u30c9\u306f<code>Array<\/code>\u30af\u30e9\u30b9\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u5b9f\u88c5\u3055\u308c\u3066\u304a\u308a\u3001\u914d\u5217\u306e\u5404\u8981\u7d20\u3092\u6587\u5b57\u5217\u3068\u3057\u3066\u89e3\u91c8\u3057\u3001\u6307\u5b9a\u3055\u308c\u305f\u533a\u5207\u308a\u6587\u5b57\uff08\u30c7\u30d5\u30a9\u30eb\u30c8\u306f\u7a7a\u6587\u5b57\uff09\u3067\u9023\u7d50\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u4f7f\u7528\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=\"\"># \u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\nnames = ['Ruby', 'Python', 'JavaScript']\nresult = names.join(', ')\nputs result  # \u51fa\u529b: Ruby, Python, JavaScript\n\n# \u6570\u5024\u306e\u914d\u5217\u3067\u3082\u4f7f\u7528\u53ef\u80fd\nnumbers = [1, 2, 3, 4, 5]\nresult = numbers.join('-')\nputs result  # \u51fa\u529b: 1-2-3-4-5\n\n# \u533a\u5207\u308a\u6587\u5b57\u3092\u6307\u5b9a\u3057\u306a\u3044\u5834\u5408\nwords = ['Hello', 'World']\nresult = words.join\nputs result  # \u51fa\u529b: HelloWorld<\/pre>\n\n\n\n<p>join\u30e1\u30bd\u30c3\u30c9\u306e\u7279\u5fb4\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u914d\u5217\u306e\u5404\u8981\u7d20\u306f\u81ea\u52d5\u7684\u306b\u6587\u5b57\u5217\u306b\u5909\u63db\u3055\u308c\u308b\uff08to_s\u30e1\u30bd\u30c3\u30c9\u304c\u547c\u3073\u51fa\u3055\u308c\u308b\uff09<\/li>\n\n\n\n<li>nil\u3084\u975e\u6587\u5b57\u5217\u8981\u7d20\u3082\u9069\u5207\u306b\u51e6\u7406\u3055\u308c\u308b<\/li>\n\n\n\n<li>\u30e1\u30bd\u30c3\u30c9\u30c1\u30a7\u30fc\u30f3\u306e\u4e00\u90e8\u3068\u3057\u3066\u4f7f\u7528\u53ef\u80fd<\/li>\n\n\n\n<li>\u30a4\u30df\u30e5\u30fc\u30bf\u30d6\u30eb\uff08\u5143\u306e\u914d\u5217\u306f\u5909\u66f4\u3055\u308c\u306a\u3044\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">join\u30e1\u30bd\u30c3\u30c9\u304c\u89e3\u6c7a\u3059\u308b\u958b\u767a\u4e0a\u306e\u8ab2\u984c<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u6a19\u6e96\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=\"\"># CSV\u30c7\u30fc\u30bf\u306e\u751f\u6210\nuser_data = ['John', 'Doe', 'john@example.com']\ncsv_line = user_data.join(',')  # John,Doe,john@example.com\n\n# \u30d1\u30b9\u306e\u751f\u6210\npath_components = ['usr', 'local', 'bin']\nfull_path = path_components.join('\/')  # usr\/local\/bin<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u53ef\u8aad\u6027\u306e\u5411\u4e0a<\/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=\"\"># \u8907\u96d1\u306a\u6587\u5b57\u5217\u7d50\u5408\u3092\u7c21\u6f54\u306b\u8868\u73fe\ntags = ['ruby', 'programming', 'web']\nhashtags = tags.map { |tag| \"##{tag}\" }.join(' ')  # #ruby #programming #web<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u306e\u9632\u6b62<\/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=\"\"># \u7570\u306a\u308b\u578b\u306e\u8981\u7d20\u3082\u5b89\u5168\u306b\u7d50\u5408\nmixed_data = [1, 'user', :admin, nil]\nresult = mixed_data.join('-')  # \"1-user-admin-\"\n\n# \u914d\u5217\u304c\u7a7a\u306e\u5834\u5408\u3082\u5b89\u5168\nempty_array = []\nresult = empty_array.join(',')  # \u7a7a\u6587\u5b57\u5217\u3092\u8fd4\u3059<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\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=\"\"># \u5927\u91cf\u306e\u6587\u5b57\u5217\u7d50\u5408\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\n# \u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30b3\u30fc\u30c9\u3088\u308a\u3082join\u306e\u65b9\u304c\u52b9\u7387\u7684\nlarge_array = (1..1000).to_a\n# \u975e\u52b9\u7387\u306a\u65b9\u6cd5\nresult = ''\nlarge_array.each { |num| result += num.to_s }\n\n# \u52b9\u7387\u7684\u306a\u65b9\u6cd5\nresult = large_array.join<\/pre>\n\n\n\n<p>join\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u3053\u308c\u3089\u306e\u8ab2\u984c\u306b\u5bfe\u3057\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u5229\u70b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7c21\u6f54\u6027<\/strong>: \u8907\u96d1\u306a\u6587\u5b57\u5217\u7d50\u5408\u51e6\u7406\u30921\u884c\u3067\u8a18\u8ff0\u53ef\u80fd<\/li>\n\n\n\n<li><strong>\u5b89\u5168\u6027<\/strong>: \u578b\u5909\u63db\u3084 nil \u5024\u306e\u51e6\u7406\u3092\u81ea\u52d5\u7684\u306b\u884c\u3046<\/li>\n\n\n\n<li><strong>\u4fdd\u5b88\u6027<\/strong>: \u30b3\u30fc\u30c9\u306e\u610f\u56f3\u304c\u660e\u78ba\u3067\u7406\u89e3\u3057\u3084\u3059\u3044<\/li>\n\n\n\n<li><strong>\u52b9\u7387\u6027<\/strong>: \u5185\u90e8\u3067\u6700\u9069\u5316\u3055\u308c\u305f\u6587\u5b57\u5217\u7d50\u5408\u51e6\u7406\u3092\u5b9f\u884c<\/li>\n<\/ul>\n\n\n\n<p>\u5b9f\u52d9\u3067\u306e\u4f7f\u7528\u306b\u304a\u3044\u3066\u306f\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u6d3b\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u5411\u4e0a\u3068\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u306e\u6539\u5584\u304c\u671f\u5f85\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u8907\u6570\u306e\u8981\u7d20\u3092\u7d50\u5408\u3057\u3066\u7279\u5b9a\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u6587\u5b57\u5217\u3092\u751f\u6210\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u5834\u5408\u306b\u3001\u305d\u306e\u771f\u4fa1\u3092\u767a\u63ee\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-3\">join\u30e1\u30bd\u30c3\u30c9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u3044\u65b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-4\">\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u914d\u5217\u3092\u7d50\u5408\u3059\u308b<\/h3>\n\n\n\n<p>join\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u533a\u5207\u308a\u6587\u5b57\u306a\u3057\uff08\u7a7a\u6587\u5b57\u5217\uff09\u3067\u914d\u5217\u306e\u8981\u7d20\u3092\u7d50\u5408\u3057\u307e\u3059\u3002\u3053\u308c\u306f\u6700\u3082\u30b7\u30f3\u30d7\u30eb\u306a\u4f7f\u7528\u65b9\u6cd5\u3067\u3001\u7279\u306b\u6587\u5b57\u5217\u3092\u5358\u7d14\u306b\u9023\u7d50\u3057\u305f\u3044\u5834\u5408\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/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=\"\"># \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u4f7f\u7528\u4f8b\nwords = ['Hello', 'World']\nresult = words.join\nputs result  # \u51fa\u529b: HelloWorld\n\n# \u6570\u5024\u914d\u5217\u3067\u306e\u4f7f\u7528\nnumbers = [1, 2, 3, 4, 5]\nresult = numbers.join\nputs result  # \u51fa\u529b: 12345\n\n# \u6df7\u5408\u30c7\u30fc\u30bf\u578b\u3067\u306e\u4f7f\u7528\nmixed = ['user', 123, :admin]\nresult = mixed.join\nputs result  # \u51fa\u529b: user123admin<\/pre>\n\n\n\n<p>\u4f7f\u7528\u6642\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5168\u3066\u306e\u8981\u7d20\u306f\u81ea\u52d5\u7684\u306bto_s\u30e1\u30bd\u30c3\u30c9\u3067\u6587\u5b57\u5217\u5909\u63db\u3055\u308c\u308b<\/li>\n\n\n\n<li>nil\u306f\u7a7a\u6587\u5b57\u5217\u3068\u3057\u3066\u6271\u308f\u308c\u308b<\/li>\n\n\n\n<li>\u30b7\u30f3\u30dc\u30eb\u306f\u6587\u5b57\u5217\u3068\u3057\u3066\u5909\u63db\u3055\u308c\u308b<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">\u30ab\u30b9\u30bf\u30e0\u533a\u5207\u308a\u6587\u5b57\u3092\u6307\u5b9a\u3057\u3066\u7d50\u5408\u3059\u308b<\/h3>\n\n\n\n<p>\u5b9f\u8df5\u7684\u306a\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u958b\u767a\u3067\u306f\u3001\u30ab\u30b9\u30bf\u30e0\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528\u3057\u3066\u7279\u5b9a\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u6587\u5b57\u5217\u3092\u751f\u6210\u3059\u308b\u3053\u3068\u304c\u591a\u304f\u3042\u308a\u307e\u3059\u3002<\/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=\"\"># \u30ab\u30f3\u30de\u533a\u5207\u308a\u306e\u4f8b\nfruits = ['apple', 'banana', 'orange']\ncsv_string = fruits.join(',')\nputs csv_string  # \u51fa\u529b: apple,banana,orange\n\n# \u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u306e\u4f8b\ntags = ['ruby', 'programming', 'web']\ntag_string = tags.join(' ')\nputs tag_string  # \u51fa\u529b: ruby programming web\n\n# \u8907\u6570\u6587\u5b57\u306e\u533a\u5207\u308a\u6587\u5b57\nelements = ['a', 'b', 'c']\nresult = elements.join(' -&gt; ')\nputs result  # \u51fa\u529b: a -&gt; b -&gt; c\n\n# HTML\u30ea\u30b9\u30c8\u8981\u7d20\u306e\u751f\u6210\nlist_items = ['\u9805\u76ee1', '\u9805\u76ee2', '\u9805\u76ee3']\nhtml_list = '&lt;ul&gt;&lt;li&gt;' + list_items.join('&lt;\/li&gt;&lt;li&gt;') + '&lt;\/li&gt;&lt;\/ul&gt;'\nputs html_list  # \u51fa\u529b: &lt;ul&gt;&lt;li&gt;\u9805\u76ee1&lt;\/li&gt;&lt;li&gt;\u9805\u76ee2&lt;\/li&gt;&lt;li&gt;\u9805\u76ee3&lt;\/li&gt;&lt;\/ul&gt;<\/pre>\n\n\n\n<p>\u3088\u304f\u4f7f\u7528\u3055\u308c\u308b\u533a\u5207\u308a\u6587\u5b57\u306e\u4f8b\uff1a<\/p>\n\n\n<div id=\"id-7f630fa8-4be8-4743-8a60-1802fb77c2ed\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u533a\u5207\u308a\u6587\u5b57<\/th><th>\u4e00\u822c\u7684\u306a\u7528\u9014<\/th><th>\u4f7f\u7528\u4f8b<\/th><\/tr><\/thead><tbody><tr><td><code>,<\/code><\/td><td>CSV\u30c7\u30fc\u30bf\u751f\u6210<\/td><td><code>['a','b'].join(',')<\/code><\/td><\/tr><tr><td><code>\/<\/code><\/td><td>\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u751f\u6210<\/td><td><code>['usr','local'].join('\/')<\/code><\/td><\/tr><tr><td><code>\\n<\/code><\/td><td>\u6539\u884c\u533a\u5207\u308a\u30c6\u30ad\u30b9\u30c8<\/td><td><code>['line1','line2'].join(\"\\n\")<\/code><\/td><\/tr><tr><td><\/td><td>\u30b9\u30da\u30fc\u30b9\u533a\u5207\u308a\u30ef\u30fc\u30c9<\/td><td><code>['Hello','World'].join(' ')<\/code><\/td><\/tr><tr><td><code>|<\/code><\/td><td>\u30c7\u30fc\u30bf\u533a\u5207\u308a<\/td><td><code>['col1','col2'].join('|')<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-6\">\u7a7a\u306e\u533a\u5207\u308a\u6587\u5b57\u3067\u9023\u7d50\u3059\u308b\u6d3b\u7528\u6cd5<\/h3>\n\n\n\n<p>\u7a7a\u306e\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u533a\u5207\u308a\u6587\u5b57\u3092\u6307\u5b9a\u3057\u306a\u3044\u65b9\u6cd5\u3068\u3001\u660e\u793a\u7684\u306b\u7a7a\u6587\u5b57\u5217\u3092\u6307\u5b9a\u3059\u308b\u65b9\u6cd5\u304c\u3042\u308a\u307e\u3059\u3002\u3069\u3061\u3089\u3082\u540c\u3058\u7d50\u679c\u306b\u306a\u308a\u307e\u3059\u304c\u3001\u30b3\u30fc\u30c9\u306e\u610f\u56f3\u3092\u660e\u78ba\u306b\u3059\u308b\u305f\u3081\u306b\u72b6\u6cc1\u306b\u5fdc\u3058\u3066\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/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=\"\"># \u6587\u5b57\u5217\u306e\u9023\u7d50\uff08\u533a\u5207\u308a\u6587\u5b57\u306a\u3057\uff09\nchars = ['H', 'e', 'l', 'l', 'o']\nresult1 = chars.join\nresult2 = chars.join('')\nputs result1 == result2  # \u51fa\u529b: true\n\n# URL\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u305f\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u7d50\u5408\nparams = ['key1=value1', 'key2=value2']\nquery_string = params.join('&amp;')\nputs query_string  # \u51fa\u529b: key1=value1&amp;key2=value2\n\n# \u914d\u5217\u8981\u7d20\u306e\u76f4\u63a5\u9023\u7d50\u304c\u6709\u7528\u306a\u30b1\u30fc\u30b9\nnumbers = [1, 2, 3, 4, 5]\nnumber_string = numbers.join\nputs number_string  # \u51fa\u529b: 12345<\/pre>\n\n\n\n<p>\u5b9f\u88c5\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u76ee\u7684\u306b\u5fdc\u3058\u305f\u533a\u5207\u308a\u6587\u5b57\u306e\u9078\u629e<\/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=\"\"># \u826f\u3044\u4f8b\uff1a\u76ee\u7684\u306b\u5408\u3063\u305f\u533a\u5207\u308a\u6587\u5b57\u3092\u4f7f\u7528\npath = ['home', 'user', 'documents'].join('\/')  # \u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306b\u9069\u5207\ntags = ['ruby', 'rails'].join(', ')  # \u53ef\u8aad\u6027\u306e\u9ad8\u3044\u30ea\u30b9\u30c8\u5f62\u5f0f\n\n# \u907f\u3051\u308b\u3079\u304d\u4f8b\uff1a\u4e0d\u9069\u5207\u306a\u533a\u5207\u308a\u6587\u5b57\npath = ['home', 'user', 'documents'].join('|')  # \u30d1\u30b9\u3068\u3057\u3066\u4e0d\u9069\u5207<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>nil\u5024\u306e\u4e8b\u524d\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=\"\"># \u826f\u3044\u4f8b\uff1anil\u5024\u3092\u4e8b\u524d\u306b\u51e6\u7406\ndata = ['a', nil, 'b'].compact.join(',')  # \"a,b\"\n\n# \u907f\u3051\u308b\u3079\u304d\u4f8b\uff1anil\u5024\u3092\u305d\u306e\u307e\u307e\u4f7f\u7528\ndata = ['a', nil, 'b'].join(',')  # \"a,,b\"<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u578b\u306e\u4e00\u8cab\u6027\u3092\u4fdd\u3064<\/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=\"\"># \u826f\u3044\u4f8b\uff1a\u540c\u3058\u578b\u306e\u8981\u7d20\u3092\u4f7f\u7528\nnumbers = [1, 2, 3].map(&amp;:to_s).join(',')\n\n# \u907f\u3051\u308b\u3079\u304d\u4f8b\uff1a\u7570\u306a\u308b\u578b\u3092\u6df7\u5728\u3055\u305b\u308b\nmixed = [1, 'two', :three].join(',')<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u57fa\u672c\u7684\u306a\u4f7f\u7528\u65b9\u6cd5\u3092\u7406\u89e3\u3059\u308b\u3053\u3068\u3067\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002\u7279\u306b\u3001\u30c7\u30fc\u30bf\u306e\u5f62\u5f0f\u3084\u7528\u9014\u306b\u5fdc\u3058\u3066\u9069\u5207\u306a\u533a\u5207\u308a\u6587\u5b57\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3001\u53ef\u8aad\u6027\u306e\u9ad8\u3044\u5b9f\u88c5\u306b\u3064\u306a\u304c\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-7\">join\u30e1\u30bd\u30c3\u30c9\u306e\u5b9f\u8df5\u7684\u306a\u4f7f\u7528\u30d1\u30bf\u30fc\u30f37\u9078<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-8\">CSV\u30c7\u30fc\u30bf\u306e\u884c\u3092\u751f\u6210\u3059\u308b<\/h3>\n\n\n\n<p>CSV\u30d5\u30a1\u30a4\u30eb\u306e\u4f5c\u6210\u306f\u3001Ruby\u3067\u306e\u30c7\u30fc\u30bf\u51e6\u7406\u3067\u3088\u304f\u906d\u9047\u3059\u308b\u30bf\u30b9\u30af\u3067\u3059\u3002join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306bCSV\u5f62\u5f0f\u306e\u30c7\u30fc\u30bf\u3092\u751f\u6210\u3067\u304d\u307e\u3059\u3002<\/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=\"\"># \u30e6\u30fc\u30b6\u30fc\u30c7\u30fc\u30bf\u3092CSV\u5f62\u5f0f\u306b\u5909\u63db\nclass User\n  def to_csv_row\n    # \u30c7\u30fc\u30bf\u3092\u30a8\u30b9\u30b1\u30fc\u30d7\u3057\u3066\u7d50\u5408\n    [\n      id,\n      name.gsub(',', '\\\\,'),  # \u30ab\u30f3\u30de\u3092\u30a8\u30b9\u30b1\u30fc\u30d7\n      email,\n      created_at.strftime('%Y-%m-%d')\n    ].join(',')\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nusers = [\n  User.new(1, \"Smith, John\", \"john@example.com\", Time.now),\n  User.new(2, \"Jane Doe\", \"jane@example.com\", Time.now)\n]\ncsv_content = users.map(&amp;:to_csv_row).join(\"\\n\")<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u69cb\u7bc9\u306b\u6d3b\u7528\u3059\u308b<\/h3>\n\n\n\n<p>Web\u958b\u767a\u306b\u304a\u3044\u3066\u3001URL\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u69cb\u7bc9\u306f\u983b\u7e41\u306b\u5fc5\u8981\u3068\u306a\u308b\u51e6\u7406\u3067\u3059\u3002join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30af\u30a8\u30ea\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u751f\u6210\u3067\u304d\u307e\u3059\u3002<\/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\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u751f\u6210\ndef build_query_string(params)\n  params.map { |key, value| \n    \"#{URI.encode_www_form_component(key)}=#{URI.encode_www_form_component(value)}\"\n  }.join('&amp;')\nend\n\n# \u4f7f\u7528\u4f8b\nparams = {\n  search: 'ruby programming',\n  category: 'technology',\n  page: 1\n}\nquery_string = build_query_string(params)\nputs query_string  # \u51fa\u529b: search=ruby%20programming&amp;category=technology&amp;page=1<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">HTML\u30bf\u30b0\u306e\u5c5e\u6027\u3092\u52d5\u7684\u306b\u751f\u6210\u3059\u308b<\/h3>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u52d5\u7684\u306aHTML\u751f\u6210\u6642\u306b\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3057\u3066\u30bf\u30b0\u5c5e\u6027\u3092\u52b9\u7387\u7684\u306b\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/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=\"\"># HTML\u30bf\u30b0\u5c5e\u6027\u306e\u52d5\u7684\u751f\u6210\nclass HtmlBuilder\n  def build_attributes(attrs)\n    attrs.map { |key, value|\n      value.nil? ? key.to_s : \"#{key}=\\\"#{escape_html(value)}\\\"\"\n    }.join(' ')\n  end\n\n  private\n\n  def escape_html(text)\n    text.to_s.gsub(\/[&amp;&lt;&gt;\"']\/) { |special| HTML_ESCAPES[special] }\n  end\n\n  HTML_ESCAPES = {\n    '&amp;' =&gt; '&amp;amp;',\n    '&lt;' =&gt; '&amp;lt;',\n    '&gt;' =&gt; '&amp;gt;',\n    '\"' =&gt; '&amp;quot;',\n    \"'\" =&gt; '&amp;#039;'\n  }\nend\n\n# \u4f7f\u7528\u4f8b\nattrs = {\n  class: 'btn btn-primary',\n  data: { action: 'submit' },\n  disabled: nil\n}\nhtml = \"&lt;button #{build_attributes(attrs)}&gt;\u9001\u4fe1&lt;\/button&gt;\"<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-11\">\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u7d44\u307f\u7acb\u3066\u3092\u52b9\u7387\u5316\u3059\u308b<\/h3>\n\n\n\n<p>\u8907\u6570\u306e\u30d1\u30b9\u8981\u7d20\u3092\u7d44\u307f\u5408\u308f\u305b\u3066\u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u3092\u751f\u6210\u3059\u308b\u969b\u306b\u3001join\u30e1\u30bd\u30c3\u30c9\u304c\u6709\u7528\u3067\u3059\u3002<\/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=\"\"># \u30d5\u30a1\u30a4\u30eb\u30d1\u30b9\u306e\u751f\u6210\nclass PathBuilder\n  def initialize(base_path)\n    @base_path = base_path\n  end\n\n  def build_path(*segments)\n    # \u30d1\u30b9\u30bb\u30d1\u30ec\u30fc\u30bf\u3067\u7d50\u5408\u3057\u3001\u91cd\u8907\u3057\u305f\u30bb\u30d1\u30ec\u30fc\u30bf\u3092\u9664\u53bb\n    ([normalized_base_path] + segments)\n      .reject(&amp;:empty?)\n      .join('\/')\n      .gsub(\/\\\/+\/, '\/')\n  end\n\n  private\n\n  def normalized_base_path\n    @base_path.to_s.chomp('\/')\n  end\nend\n\n# \u4f7f\u7528\u4f8b\npath_builder = PathBuilder.new('\/var\/www')\npath = path_builder.build_path('html', 'images', 'logo.png')\nputs path  # \u51fa\u529b: \/var\/www\/html\/images\/logo.png<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">SQL\u6587\u306e\u52d5\u7684\u751f\u6210\u3067\u6d3b\u7528\u3059\u308b<\/h3>\n\n\n\n<p>SQL\u30af\u30a8\u30ea\u306e\u52d5\u7684\u751f\u6210\u6642\u306b\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u5b89\u5168\u3067\u53ef\u8aad\u6027\u306e\u9ad8\u3044\u30af\u30a8\u30ea\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002<\/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=\"\"># SQL WHERE\u53e5\u306e\u52d5\u7684\u751f\u6210\nclass QueryBuilder\n  def build_where_clause(conditions)\n    return '' if conditions.empty?\n\n    clauses = conditions.map { |column, value|\n      if value.nil?\n        \"#{column} IS NULL\"\n      else\n        \"#{column} = ?\"\n      end\n    }\n\n    \"WHERE \" + clauses.join(' AND ')\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nconditions = {\n  status: 'active',\n  deleted_at: nil\n}\nquery = QueryBuilder.new\nwhere_clause = query.build_where_clause(conditions)\nputs where_clause  # \u51fa\u529b: WHERE status = ? AND deleted_at IS NULL<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u56fd\u969b\u5316\u5bfe\u5fdc\u306e\u30c6\u30ad\u30b9\u30c8\u751f\u6210\u306b\u4f7f\u7528\u3059\u308b<\/h3>\n\n\n\n<p>\u591a\u8a00\u8a9e\u5bfe\u5fdc\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u6587\u5b57\u5217\u751f\u6210\u306b\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/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=\"\"># \u56fd\u969b\u5316\u5bfe\u5fdc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u751f\u6210\nclass I18nMessageBuilder\n  def initialize(locale)\n    @locale = locale\n  end\n\n  def build_message(key, interpolations = {})\n    message_parts = I18n.t(\"messages.#{key}\", locale: @locale).split('%{')\n    message_parts.map.with_index do |part, i|\n      if i == 0\n        part\n      else\n        var_name, rest = part.split('}', 2)\n        \"#{interpolations[var_name.to_sym]}#{rest}\"\n      end\n    end.join\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nbuilder = I18nMessageBuilder.new(:ja)\nmessage = builder.build_message('welcome', name: 'John')\nputs message  # \u51fa\u529b: \u3088\u3046\u3053\u305d\u3001John\u3055\u3093<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u6a19\u6e96\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u4f5c\u6210<\/h3>\n\n\n\n<p>\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u7d71\u4e00\u3055\u308c\u305f\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u751f\u6210\u3059\u308b\u969b\u306b\u3001join\u30e1\u30bd\u30c3\u30c9\u304c\u5f79\u7acb\u3061\u307e\u3059\u3002<\/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=\"\"># \u69cb\u9020\u5316\u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u751f\u6210\nclass StructuredLogger\n  def format_log_entry(severity, timestamp, progname, msg)\n    [\n      timestamp.strftime('%Y-%m-%d %H:%M:%S'),\n      severity.ljust(5),\n      progname,\n      trace_id,\n      msg\n    ].join(' | ')\n  end\n\n  private\n\n  def trace_id\n    Thread.current[:trace_id] || 'NO_TRACE'\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nlogger = StructuredLogger.new\nlog_entry = logger.format_log_entry(\n  'ERROR',\n  Time.now,\n  'UserService',\n  'Failed to create user'\n)\nputs log_entry  # \u51fa\u529b: 2024-12-03 10:15:30 | ERROR | UserService | abc123 | Failed to create user<\/pre>\n\n\n\n<p>\u305d\u308c\u305e\u308c\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u5b9f\u88c5\u3059\u308b\u969b\u306e\u6ce8\u610f\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u306e\u30a8\u30b9\u30b1\u30fc\u30d7<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7279\u6b8a\u6587\u5b57\u3092\u9069\u5207\u306b\u30a8\u30b9\u30b1\u30fc\u30d7\u3059\u308b<\/li>\n\n\n\n<li>\u533a\u5207\u308a\u6587\u5b57\u3068\u306e\u7af6\u5408\u3092\u907f\u3051\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u8003\u616e<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u6271\u3046\u5834\u5408\u306f\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u691c\u8a0e<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u4e2d\u9593\u914d\u5217\u306e\u751f\u6210\u3092\u907f\u3051\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>nil\u5024\u3084\u7121\u52b9\u306a\u30c7\u30fc\u30bf\u306b\u5bfe\u3059\u308b\u9069\u5207\u306a\u51e6\u7406<\/li>\n\n\n\n<li>\u4f8b\u5916\u51e6\u7406\u306e\u5b9f\u88c5<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u3092\u4fdd\u3064<\/li>\n\n\n\n<li>\u30c6\u30b9\u30c8\u5bb9\u6613\u6027\u3092\u78ba\u4fdd<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u8df5\u7684\u306a\u30d1\u30bf\u30fc\u30f3\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-15\">join\u30e1\u30bd\u30c3\u30c9\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u6642\u306e\u52b9\u7387\u7684\u306a\u4f7f\u7528\u65b9\u6cd5<\/h3>\n\n\n\n<p>join\u30e1\u30bd\u30c3\u30c9\u306f\u5185\u90e8\u7684\u306b\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u3055\u308c\u3066\u3044\u307e\u3059\u304c\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u969b\u306b\u306f\u9069\u5207\u306a\u4f7f\u7528\u65b9\u6cd5\u3092\u5fc3\u304c\u3051\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u3001\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u6700\u5927\u9650\u306b\u5f15\u304d\u51fa\u3059\u305f\u3081\u306e\u65b9\u6cd5\u3092\u8aac\u660e\u3057\u307e\u3059\u3002<\/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=\"\">require 'benchmark'\n\n# \u52b9\u7387\u7684\u306a\u5b9f\u88c5\u3068\u975e\u52b9\u7387\u306a\u5b9f\u88c5\u306e\u6bd4\u8f03\ndef performance_comparison(size)\n  array = (1..size).to_a\n\n  Benchmark.bm(20) do |x|\n    # \u975e\u52b9\u7387\u306a\u5b9f\u88c5\uff08\u6587\u5b57\u5217\u306e\u9023\u7d50\uff09\n    x.report(\"String concatenation:\") do\n      result = ''\n      array.each { |element| result += element.to_s }\n    end\n\n    # \u52b9\u7387\u7684\u306a\u5b9f\u88c5\uff08join\u30e1\u30bd\u30c3\u30c9\uff09\n    x.report(\"Using join:\") do\n      array.join\n    end\n\n    # \u4e2d\u9593\u914d\u5217\u3092\u4f5c\u6210\u3059\u308b\u5b9f\u88c5\n    x.report(\"Map then join:\") do\n      array.map(&amp;:to_s).join\n    end\n  end\nend\n\n# \u30d9\u30f3\u30c1\u30de\u30fc\u30af\u5b9f\u884c\u4f8b\nperformance_comparison(100_000)<\/pre>\n\n\n\n<p>\u52b9\u7387\u7684\u306a\u5927\u91cf\u30c7\u30fc\u30bf\u51e6\u7406\u306e\u5b9f\u88c5\u30d1\u30bf\u30fc\u30f3\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=\"\">class LargeDataProcessor\n  def process_large_dataset(data_chunks)\n    # \u30c1\u30e3\u30f3\u30af\u3054\u3068\u306b\u51e6\u7406\u3057\u3066\u7d50\u5408\n    data_chunks.each_slice(1000).map do |chunk|\n      process_chunk(chunk)\n    end.join(\"\\n\")\n  end\n\n  private\n\n  def process_chunk(chunk)\n    chunk.map { |item| format_item(item) }.join(',')\n  end\n\n  def format_item(item)\n    # \u30a2\u30a4\u30c6\u30e0\u3054\u3068\u306e\u51e6\u7406\n    item.to_s.strip\n  end\nend\n\n# \u30e1\u30e2\u30ea\u52b9\u7387\u306e\u826f\u3044\u5b9f\u88c5\u4f8b\nprocessor = LargeDataProcessor.new\nresult = processor.process_large_dataset(large_data_array)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-17\">\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6291\u3048\u308b\u5b9f\u88c5\u30c6\u30af\u30cb\u30c3\u30af<\/h3>\n\n\n\n<p>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u6700\u9069\u5316\u3059\u308b\u305f\u3081\u306b\u306f\u3001\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c6\u30af\u30cb\u30c3\u30af\u304c\u6709\u52b9\u3067\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u306e\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=\"\">class MemoryEfficientJoiner\n  def initialize(chunk_size = 1000)\n    @chunk_size = chunk_size\n  end\n\n  def join_large_array(array, separator = '')\n    # \u4e00\u6642\u30d5\u30a1\u30a4\u30eb\u3092\u4f7f\u7528\u3057\u3066\u5927\u304d\u306a\u914d\u5217\u3092\u51e6\u7406\n    Tempfile.create('large_join') do |temp_file|\n      write_chunks_to_file(array, temp_file, separator)\n      temp_file.rewind\n      temp_file.read\n    end\n  end\n\n  private\n\n  def write_chunks_to_file(array, file, separator)\n    array.each_slice(@chunk_size) do |chunk|\n      file.write(chunk.join(separator))\n    end\n  end\nend<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30b9\u30c8\u30ea\u30fc\u30e0\u51e6\u7406\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=\"\">require 'stringio'\n\nclass StreamProcessor\n  def process_stream(input_stream, separator = ',')\n    output = StringIO.new\n    buffer = []\n\n    input_stream.each_line do |line|\n      buffer &lt;&lt; process_line(line)\n\n      if buffer.size &gt;= 1000\n        output.write(buffer.join(separator))\n        buffer.clear\n      end\n    end\n\n    # \u6b8b\u308a\u306e\u30d0\u30c3\u30d5\u30a1\u3092\u51e6\u7406\n    output.write(buffer.join(separator)) unless buffer.empty?\n    output.string\n  end\n\n  private\n\n  def process_line(line)\n    line.chomp\n  end\nend<\/pre>\n\n\n\n<p>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6700\u9069\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u524a\u6e1b<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5fc5\u8981\u4ee5\u4e0a\u306e\u4e2d\u9593\u914d\u5217\u3092\u4f5c\u6210\u3057\u306a\u3044<\/li>\n\n\n\n<li>\u5927\u304d\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u306f\u30c1\u30e3\u30f3\u30af\u51e6\u7406\u3092\u691c\u8a0e<\/li>\n\n\n\n<li>\u4e00\u6642\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u751f\u6210\u3092\u6700\u5c0f\u9650\u306b\u6291\u3048\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u51e6\u7406\u901f\u5ea6\u306e\u5411\u4e0a<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u30d0\u30c3\u30d5\u30a1\u30b5\u30a4\u30ba\u306e\u9078\u629e<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u578b\u5909\u63db\u3092\u907f\u3051\u308b<\/li>\n\n\n\n<li>\u4e8b\u524d\u306b\u914d\u5217\u30b5\u30a4\u30ba\u3092\u78ba\u4fdd\u3059\u308b<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ea\u30bd\u30fc\u30b9\u7ba1\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=\"\"># \u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u76e3\u8996\u3059\u308b\u5b9f\u88c5\u4f8b\nclass MemoryMonitor\n  def self.measure\n    memory_before = get_memory_usage\n    result = yield\n    memory_after = get_memory_usage\n\n    puts \"Memory usage: #{memory_after - memory_before} bytes\"\n    result\n  end\n\n  private\n\n  def self.get_memory_usage\n    GC.start # \u6b63\u78ba\u306a\u6e2c\u5b9a\u306e\u305f\u3081\u306bGC\u3092\u5b9f\u884c\n    `ps -o rss= -p #{Process.pid}`.to_i * 1024\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nMemoryMonitor.measure do\n  large_array.join(',')\nend<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u6700\u9069\u5316\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u5927\u898f\u6a21\u306a\u30c7\u30fc\u30bf\u51e6\u7406\u306b\u304a\u3044\u3066\u3082\u52b9\u7387\u7684\u306a\u5b9f\u88c5\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u7279\u306b\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3068\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u30d0\u30e9\u30f3\u30b9\u3092\u8003\u616e\u3057\u306a\u304c\u3089\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8981\u4ef6\u306b\u5408\u308f\u305b\u305f\u5b9f\u88c5\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-18\">join\u30e1\u30bd\u30c3\u30c9\u3068\u95a2\u9023\u30e1\u30bd\u30c3\u30c9\u306e\u4f7f\u3044\u5206\u3051<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">to_s\u3068join\u306e\u9055\u3044\u3068\u9069\u5207\u306a\u4f7f\u7528\u30b7\u30fc\u30f3<\/h3>\n\n\n\n<p>to_s\u3068join\u30e1\u30bd\u30c3\u30c9\u306f\u3001\u7570\u306a\u308b\u76ee\u7684\u3068\u7279\u6027\u3092\u6301\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u305e\u308c\u306e\u7279\u5fb4\u3092\u7406\u89e3\u3057\u3001\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\u3059\u3002<\/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=\"\"># to_s\u30e1\u30bd\u30c3\u30c9\u306e\u57fa\u672c\u7684\u306a\u4f7f\u7528\narray = [1, 2, 3]\nputs array.to_s      # \u51fa\u529b: [1, 2, 3]\nputs array.join      # \u51fa\u529b: 123\n\n# \u30cd\u30b9\u30c8\u3057\u305f\u914d\u5217\u3067\u306e\u9055\u3044\nnested = [[1, 2], [3, 4]]\nputs nested.to_s     # \u51fa\u529b: [[1, 2], [3, 4]]\nputs nested.join     # \u51fa\u529b: 12,34\n\n# \u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u914d\u5217\u3067\u306e\u52d5\u4f5c\nclass User\n  def initialize(name)\n    @name = name\n  end\n\n  def to_s\n    @name\n  end\nend\n\nusers = [User.new(\"Alice\"), User.new(\"Bob\")]\nputs users.to_s      # \u51fa\u529b: [#&lt;User:0x00...&gt;, #&lt;User:0x00...&gt;]\nputs users.join(\", \") # \u51fa\u529b: Alice, Bob<\/pre>\n\n\n\n<p>to_s\u3068join\u306e\u4e3b\u306a\u9055\u3044\uff1a<\/p>\n\n\n<div id=\"id-6e0d3529-8527-4ce0-b03f-cd6a1cf719fb\">\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u7279\u6027<\/th><th>to_s<\/th><th>join<\/th><\/tr><\/thead><tbody><tr><td>\u4e3b\u306a\u7528\u9014<\/td><td>\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6587\u5b57\u5217\u8868\u73fe<\/td><td>\u914d\u5217\u8981\u7d20\u306e\u7d50\u5408<\/td><\/tr><tr><td>\u533a\u5207\u308a\u6587\u5b57<\/td><td>\u56fa\u5b9a\uff08\u914d\u5217\u8868\u73fe\uff09<\/td><td>\u30ab\u30b9\u30bf\u30de\u30a4\u30ba\u53ef\u80fd<\/td><\/tr><tr><td>\u30cd\u30b9\u30c8\u51e6\u7406<\/td><td>\u968e\u5c64\u69cb\u9020\u3092\u4fdd\u6301<\/td><td>\u30d5\u30e9\u30c3\u30c8\u5316\u3057\u3066\u7d50\u5408<\/td><\/tr><tr><td>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/td><td>\u5358\u4e00\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u5411\u3051<\/td><td>\u8907\u6570\u8981\u7d20\u306e\u7d50\u5408\u306b\u6700\u9069<\/td><\/tr><\/tbody><\/table><\/figure>\n<\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">concat\u3001+\u6f14\u7b97\u5b50\u3068\u306e\u6bd4\u8f03\u3068\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h3>\n\n\n\n<p>\u6587\u5b57\u5217\u7d50\u5408\u306b\u306f\u8907\u6570\u306e\u65b9\u6cd5\u304c\u3042\u308a\u3001\u305d\u308c\u305e\u308c\u306b\u9069\u3057\u305f\u4f7f\u7528\u30b7\u30fc\u30f3\u304c\u3042\u308a\u307e\u3059\u3002<\/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=\"\"># \u7570\u306a\u308b\u7d50\u5408\u65b9\u6cd5\u306e\u6bd4\u8f03\ndef compare_concatenation_methods\n  strings = [\"Hello\", \"World\", \"Ruby\"]\n\n  # +\u6f14\u7b97\u5b50\u306b\u3088\u308b\u7d50\u5408\n  result1 = strings[0] + \" \" + strings[1] + \" \" + strings[2]\n\n  # concat\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308b\u7d50\u5408\n  result2 = strings[0].dup\n  strings[1..2].each { |s| result2.concat(\" \", s) }\n\n  # join\u30e1\u30bd\u30c3\u30c9\u306b\u3088\u308b\u7d50\u5408\n  result3 = strings.join(\" \")\n\n  # &lt;&lt;\u6f14\u7b97\u5b50\u306b\u3088\u308b\u7d50\u5408\n  result4 = strings[0].dup\n  strings[1..2].each { |s| result4 &lt;&lt; \" \" &lt;&lt; s }<\/pre>\n\n\n[result1, result2, result3, result4]\n\n\n\n<p>end # \u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u6bd4\u8f03 require \u2018benchmark\u2019 def performance_benchmark(iterations) strings = [\u201cHello\u201d, \u201cWorld\u201d, \u201cRuby\u201d] * 1000 Benchmark.bm(15) do |x| x.report(\u201c+ operator:\u201d) do iterations.times do strings.reduce { |result, str| result + str } end end x.report(\u201cconcat:\u201d) do iterations.times do result = strings[0].dup strings[1..-1].each { |s| result.concat(s) } end end x.report(\u201cjoin:\u201d) do iterations.times do strings.join end end x.report(\u201c&lt;&lt; operator:\u201d) do iterations.times do result = strings[0].dup strings[1..-1].each { |s| result &lt;&lt; s } end end end end<\/p>\n\n\n\n<p>\u5404\u7d50\u5408\u65b9\u6cd5\u306e\u7279\u5fb4\u3068\u9069\u5207\u306a\u4f7f\u7528\u30b7\u30fc\u30f3\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>join \u30e1\u30bd\u30c3\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u914d\u5217\u8981\u7d20\u306e\u7d50\u5408\u306b\u6700\u9069<\/li>\n\n\n\n<li>\u30ab\u30b9\u30bf\u30e0\u533a\u5207\u308a\u6587\u5b57\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li>\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u7d50\u5408\u306b\u52b9\u7387\u7684<\/li>\n<\/ul>\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=\"\"># join\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\u4f8b\npaths = ['usr', 'local', 'bin']\nfull_path = paths.join('\/')  # \u6700\u9069\u306a\u4f7f\u7528\u6cd5\n\ntags = ['ruby', 'programming']\ntag_string = tags.join(', ')  # \u8aad\u307f\u3084\u3059\u3044\u7d50\u5408<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>+ \u6f14\u7b97\u5b50<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5c11\u6570\u306e\u6587\u5b57\u5217\u7d50\u5408\u306b\u9069\u3057\u3066\u3044\u308b<\/li>\n\n\n\n<li>\u30b3\u30fc\u30c9\u306e\u53ef\u8aad\u6027\u304c\u91cd\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li>\u52d5\u7684\u306a\u7d50\u5408\u304c\u4e0d\u8981\u306a\u5834\u5408<\/li>\n<\/ul>\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=\"\"># +\u6f14\u7b97\u5b50\u306e\u9069\u5207\u306a\u4f7f\u7528\u4f8b\ngreeting = \"Hello, \" + user_name + \"!\"  # \u7c21\u5358\u306a\u7d50\u5408\nfull_name = first_name + \" \" + last_name  # \u5206\u304b\u308a\u3084\u3059\u3044\u7d50\u5408<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>concat \u30e1\u30bd\u30c3\u30c9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7834\u58ca\u7684\u306a\u7d50\u5408\u304c\u5fc5\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u52b9\u7387\u304c\u91cd\u8981\u306a\u5834\u5408<\/li>\n\n\n\n<li>\u9010\u6b21\u7684\u306a\u6587\u5b57\u5217\u8ffd\u52a0<\/li>\n<\/ul>\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=\"\"># concat\u306e\u52b9\u679c\u7684\u306a\u4f7f\u7528\nmessage = \"Error: \"\nmessage.concat(error_code.to_s, \" - \", error_message)  # \u8907\u6570\u8981\u7d20\u306e\u52b9\u7387\u7684\u306a\u7d50\u5408<\/pre>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>&lt;&lt; \u6f14\u7b97\u5b50<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7834\u58ca\u7684\u306a\u5358\u4e00\u8981\u7d20\u306e\u8ffd\u52a0<\/li>\n\n\n\n<li>\u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406<\/li>\n\n\n\n<li>\u30d0\u30c3\u30d5\u30a1\u3078\u306e\u8ffd\u52a0<\/li>\n<\/ul>\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=\"\"># &lt;&lt;\u6f14\u7b97\u5b50\u306e\u9069\u5207\u306a\u4f7f\u7528\nbuffer = String.new\nfile.each_line { |line| buffer &lt;&lt; line.chomp &lt;&lt; \"\\n\" }  # \u30b9\u30c8\u30ea\u30fc\u30df\u30f3\u30b0\u51e6\u7406<\/pre>\n\n\n\n<p>\u4f7f\u3044\u5206\u3051\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u91cd\u8996\u3059\u308b\u5834\u5408<\/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=\"\"># \u5927\u91cf\u306e\u8981\u7d20\u3092\u7d50\u5408\u3059\u308b\u5834\u5408\u306fjoin\u3092\u4f7f\u7528\nlarge_array.join  # \u6700\u3082\u52b9\u7387\u7684\n\n# \u30e1\u30e2\u30ea\u52b9\u7387\u3092\u91cd\u8996\u3059\u308b\u5834\u5408\u306fconcat\u3092\u4f7f\u7528\nresult = String.new\nstrings.each { |s| result.concat(s) }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u53ef\u8aad\u6027\u3092\u91cd\u8996\u3059\u308b\u5834\u5408<\/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=\"\"># \u660e\u793a\u7684\u306a\u7d50\u5408\u304c\u5fc5\u8981\u306a\u5834\u5408\u306f+\u6f14\u7b97\u5b50\nfull_name = first_name + \" \" + last_name  # \u610f\u56f3\u304c\u660e\u78ba\n\n# \u914d\u5217\u8981\u7d20\u306e\u7d50\u5408\u306f\u5e38\u306bjoin\nelements.join(\", \")  # \u30b7\u30f3\u30d7\u30eb\u3067\u5206\u304b\u308a\u3084\u3059\u3044<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u3092\u91cd\u8996\u3059\u308b\u5834\u5408<\/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=\"\"># \u5b9a\u578b\u7684\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306fjoin\n[year, month, day].join(\"-\")  # \u65e5\u4ed8\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n\n# \u52d5\u7684\u306a\u7d50\u5408\u306b\u306f&lt;&lt;\u307e\u305f\u306f concat\nmessage = \"Error: \"\nmessage &lt;&lt; code &lt;&lt; \": \" &lt;&lt; description  # \u30ed\u30b0\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u69cb\u7bc9<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u65b9\u6cd5\u3092\u9069\u5207\u306b\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u3067\u3001\u3088\u308a\u52b9\u7387\u7684\u3067\u4fdd\u5b88\u6027\u306e\u9ad8\u3044\u30b3\u30fc\u30c9\u3092\u66f8\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">\u3088\u304f\u3042\u308b\u30a8\u30e9\u30fc\u3068\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">nil\u5024\u3084\u7570\u306a\u308b\u578b\u304c\u542b\u307e\u308c\u308b\u5834\u5408\u306e\u5bfe\u51e6\u6cd5<\/h3>\n\n\n\n<p>join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u969b\u306b\u3088\u304f\u906d\u9047\u3059\u308b\u30a8\u30e9\u30fc\u3068\u3001\u305d\u306e\u5bfe\u51e6\u65b9\u6cd5\u306b\u3064\u3044\u3066\u89e3\u8aac\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>nil\u5024\u3092\u542b\u3080\u914d\u5217\u306e\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=\"\"># nil\u3092\u542b\u3080\u914d\u5217\u3067\u306e\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5\nclass NilHandling\n  def safe_join(array, separator = '')\n    # nil\u5024\u3092\u5b89\u5168\u306b\u51e6\u7406\u3059\u308b\u65b9\u6cd5\n    array.compact.join(separator)\n  end\n\n  def handle_nil_with_default(array, separator = '', default = '')\n    # nil\u5024\u3092\u7279\u5b9a\u306e\u5024\u3067\u7f6e\u63db\u3059\u308b\u65b9\u6cd5\n    array.map { |element| element.nil? ? default : element }.join(separator)\n  end\nend\n\n# \u4f7f\u7528\u4f8b\u3068\u5bfe\u51e6\u65b9\u6cd5\u306e\u6bd4\u8f03\nhandler = NilHandling.new\n\n# \u554f\u984c\u306e\u3042\u308b\u914d\u5217\ndata = ['apple', nil, 'banana', nil, 'orange']\n\n# \u7570\u306a\u308b\u5bfe\u51e6\u65b9\u6cd5\u306e\u7d50\u679c\nputs handler.safe_join(data, ', ')           # \u51fa\u529b: apple, banana, orange\nputs handler.handle_nil_with_default(data, ', ', 'N\/A')  # \u51fa\u529b: apple, N\/A, banana, N\/A, orange\n\n# \u30a8\u30e9\u30fc\u30cf\u30f3\u30c9\u30ea\u30f3\u30b0\u3092\u542b\u3080\u5b9f\u88c5\ndef process_with_error_handling(array)\n  raise ArgumentError, \"Input array is nil\" if array.nil?\n  array.compact.join(', ')\nrescue NoMethodError =&gt; e\n  raise TypeError, \"Input must be an array (got #{array.class})\"\nend<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u578b\u306e\u4e0d\u4e00\u81f4\u3078\u306e\u5bfe\u51e6<\/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=\"\">class TypeHandler\n  # \u7570\u306a\u308b\u578b\u3092\u542b\u3080\u914d\u5217\u3092\u5b89\u5168\u306b\u51e6\u7406\n  def safe_type_join(array, separator = '')\n    array.map { |element| convert_to_string(element) }.join(separator)\n  end\n\n  private\n\n  def convert_to_string(element)\n    case element\n    when nil\n      ''\n    when Numeric, String, Symbol\n      element.to_s\n    when Array\n      element.join\n    when Hash\n      element.to_s\n    else\n      element.respond_to?(:to_s) ? element.to_s : element.inspect\n    end\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nhandler = TypeHandler.new\nmixed_data = [1, \"text\", :symbol, [1, 2], {a: 1}, nil, Time.now]\nputs handler.safe_type_join(mixed_data, ', ')<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\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=\"\">class CustomObject\n  def initialize(data)\n    @data = data\n  end\n\n  # to_s\u30e1\u30bd\u30c3\u30c9\u3092\u30aa\u30fc\u30d0\u30fc\u30e9\u30a4\u30c9\n  def to_s\n    @data.to_s\n  end\nend\n\n# \u30ab\u30b9\u30bf\u30e0\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u542b\u3080\u914d\u5217\u306e\u51e6\u7406\ndef process_custom_objects(objects)\n  objects.map { |obj|\n    obj.respond_to?(:to_s) ? obj.to_s : obj.inspect\n  }.join(', ')\nend\n\n# \u4f7f\u7528\u4f8b\ncustom_objects = [\n  CustomObject.new(\"data1\"),\n  CustomObject.new(123),\n  \"normal string\"\n]\nputs process_custom_objects(custom_objects)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u95a2\u9023\u306e\u554f\u984c\u89e3\u6c7a\u65b9\u6cd5<\/h3>\n\n\n\n<p>\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306b\u95a2\u9023\u3059\u308b\u554f\u984c\u306f\u7279\u306b\u6ce8\u610f\u304c\u5fc5\u8981\u3067\u3059\u3002<\/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=\"\">class EncodingHandler\n  def safe_encode_join(array, separator = '', encoding = 'UTF-8')\n    array.map { |element|\n      convert_encoding(element, encoding)\n    }.join(separator)\n  end\n\n  private\n\n  def convert_encoding(element, target_encoding)\n    return '' if element.nil?\n\n    string = element.to_s\n    if string.encoding != Encoding::UTF_8\n      string.encode(target_encoding, invalid: :replace, undef: :replace)\n    else\n      string\n    end\n  rescue EncodingError =&gt; e\n    # \u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30e9\u30fc\u306e\u5834\u5408\u306f\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8fd4\u3059\n    \"[Encoding Error: #{e.message}]\"\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nhandler = EncodingHandler.new\n\n# \u7570\u306a\u308b\u30a8\u30f3\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u306e\u6587\u5b57\u5217\u3092\u542b\u3080\u914d\u5217\nmixed_encoding_data = [\n  \"UTF-8 String\",\n  \"ASCII String\".force_encoding('ASCII-8BIT'),\n  \"\u3042\u3044\u3046\u3048\u304a\",\n  \"\\xFF\\xFE\".force_encoding('BINARY')  # \u7121\u52b9\u306a\u30d0\u30a4\u30c8\u5217\n]\n\nputs handler.safe_encode_join(mixed_encoding_data, ', ')<\/pre>\n\n\n\n<p>\u30a8\u30e9\u30fc\u51e6\u7406\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4e8b\u524d\u306e\u30d0\u30ea\u30c7\u30fc\u30b7\u30e7\u30f3<\/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=\"\">def validate_input(array)\n  raise ArgumentError, \"Input must be an array\" unless array.is_a?(Array)\n  raise ArgumentError, \"Array cannot be empty\" if array.empty?\n  true\nend\n\n# \u4f7f\u7528\u4f8b\ndef safe_process(array)\n  validate_input(array)\n  array.compact.join(', ')\nrescue ArgumentError =&gt; e\n  puts \"Validation Error: #{e.message}\"\n  nil\nend<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8a18\u9332<\/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=\"\">require 'logger'\n\nclass JoinProcessor\n  def initialize\n    @logger = Logger.new('join_errors.log')\n  end\n\n  def process_with_logging(array)\n    array.compact.join(', ')\n  rescue StandardError =&gt; e\n    @logger.error(\"Error processing array: #{e.message}\")\n    @logger.error(\"Input array: #{array.inspect}\")\n    raise\n  end\nend<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ab\u30b9\u30bf\u30e0\u30a8\u30e9\u30fc\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9<\/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=\"\">module JoinErrors\n  class InvalidInputError &lt; StandardError; end\n  class EncodingError &lt; StandardError; end\n  class TypeMismatchError &lt; StandardError; end\nend\n\nclass SafeJoiner\n  include JoinErrors\n\n  def join_with_custom_errors(array)\n    raise InvalidInputError, \"Input must be an array\" unless array.is_a?(Array)\n    raise TypeMismatchError, \"Contains invalid types\" if invalid_types?(array)\n\n    array.join(', ')\n  end\n\n  private\n\n  def invalid_types?(array)\n    array.any? { |element| !element.respond_to?(:to_s) }\n  end\nend<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30a8\u30e9\u30fc\u51e6\u7406\u30d1\u30bf\u30fc\u30f3\u3092\u9069\u5207\u306b\u5b9f\u88c5\u3059\u308b\u3053\u3068\u3067\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u4f7f\u7528\u3059\u308b\u969b\u306e\u5805\u7262\u6027\u3068\u4fe1\u983c\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u307e\u305f\u3001\u9069\u5207\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3068\u30ed\u30b0\u8a18\u9332\u306b\u3088\u308a\u3001\u554f\u984c\u306e\u8a3a\u65ad\u3068\u89e3\u6c7a\u304c\u5bb9\u6613\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-24\">\u5b9f\u8df5\u7684\u306a\u30b3\u30fc\u30c9\u4f8b\u3067\u5b66\u3076join\u30e1\u30bd\u30c3\u30c9\u306e\u5fdc\u7528<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-25\">Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306e\u6d3b\u7528\u4f8b<\/h3>\n\n\n\n<p>Web\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u3067\u306f\u3001join\u30e1\u30bd\u30c3\u30c9\u3092\u69d8\u3005\u306a\u5834\u9762\u3067\u6d3b\u7528\u3067\u304d\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u5b9f\u8df5\u7684\u306a\u5b9f\u88c5\u4f8b\u3092\u793a\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u52d5\u7684\u306aURL\u30d1\u30e9\u30e1\u30fc\u30bf\u751f\u6210<\/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=\"\">class UrlBuilder\n  def initialize(base_url)\n    @base_url = base_url.chomp('\/')\n  end\n\n  def build_url(params = {})\n    return @base_url if params.empty?\n\n    query_string = params.map do |key, value|\n      if value.is_a?(Array)\n        value.map { |v| \"#{key}[]=#{URI.encode_www_form_component(v.to_s)}\" }\n      else\n        \"#{key}=#{URI.encode_www_form_component(value.to_s)}\"\n      end\n    end.flatten.join('&amp;')\n\n    \"#{@base_url}?#{query_string}\"\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nurl_builder = UrlBuilder.new('https:\/\/api.example.com\/search')\nurl = url_builder.build_url({\n  q: 'ruby programming',\n  tags: ['web', 'api'],\n  page: 1\n})\n# \u51fa\u529b: https:\/\/api.example.com\/search?q=ruby%20programming&amp;tags[]=web&amp;tags[]=api&amp;page=1<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>HTML\u30c6\u30fc\u30d6\u30eb\u751f\u6210<\/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=\"\">class HtmlTableBuilder\n  def initialize\n    @rows = []\n  end\n\n  def add_row(cells)\n    @rows &lt;&lt; cells\n  end\n\n  def build\n    table_rows = @rows.map do |cells|\n      formatted_cells = cells.map do |cell|\n        \"&lt;td&gt;#{escape_html(cell.to_s)}&lt;\/td&gt;\"\n      end.join\n      \"&lt;tr&gt;#{formatted_cells}&lt;\/tr&gt;\"\n    end.join(\"\\n\")\n\n    \"&lt;table&gt;\\n#{table_rows}\\n&lt;\/table&gt;\"\n  end\n\n  private\n\n  def escape_html(text)\n    text.gsub(\/[&amp;&lt;&gt;\"']\/) { |special| HTML_ESCAPES[special] }\n  end\n\n  HTML_ESCAPES = {\n    '&amp;' =&gt; '&amp;amp;',\n    '&lt;' =&gt; '&amp;lt;',\n    '&gt;' =&gt; '&amp;gt;',\n    '\"' =&gt; '&amp;quot;',\n    \"'\" =&gt; '&amp;#039;'\n  }\nend\n\n# \u4f7f\u7528\u4f8b\ntable = HtmlTableBuilder.new\ntable.add_row(['Name', 'Age', 'Email'])\ntable.add_row(['John Doe', 30, 'john@example.com'])\ntable.add_row(['Jane Smith', 28, 'jane@example.com'])\nputs table.build<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>API\u30ec\u30b9\u30dd\u30f3\u30b9\u751f\u6210<\/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=\"\">class ApiResponseFormatter\n  def format_collection(items, fields)\n    items.map do |item|\n      fields.map { |field| [field, item.public_send(field)] }.to_h\n    end\n  end\n\n  def format_csv(items, fields)\n    header = fields.join(',')\n    rows = items.map do |item|\n      fields.map { |field| escape_csv_field(item.public_send(field)) }.join(',')\n    end\n\n    [header, *rows].join(\"\\n\")\n  end\n\n  private\n\n  def escape_csv_field(field)\n    field = field.to_s\n    if field.include?(',') || field.include?('\"') || field.include?(\"\\n\")\n      '\"' + field.gsub('\"', '\"\"') + '\"'\n    else\n      field\n    end\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nclass User\n  attr_reader :name, :email, :role\n\n  def initialize(name, email, role)\n    @name = name\n    @email = email\n    @role = role\n  end\nend\n\nusers = [\n  User.new('John Doe', 'john@example.com', 'admin'),\n  User.new('Jane Smith', 'jane@example.com', 'user')\n]\n\nformatter = ApiResponseFormatter.new\nputs formatter.format_csv(users, [:name, :email, :role])<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-26\">\u30c7\u30fc\u30bf\u51e6\u7406\u30d0\u30c3\u30c1\u3067\u306e\u5b9f\u88c5\u4f8b<\/h3>\n\n\n\n<p>\u30d0\u30c3\u30c1\u51e6\u7406\u3067\u306f\u3001\u5927\u91cf\u306e\u30c7\u30fc\u30bf\u3092\u52b9\u7387\u7684\u306b\u51e6\u7406\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30ed\u30b0\u30d5\u30a1\u30a4\u30eb\u89e3\u6790<\/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=\"\">class LogAnalyzer\n  def initialize(log_path)\n    @log_path = log_path\n    @patterns = {\n      ip: \/\\b(?:[0-9]{1,3}\\.){3}[0-9]{1,3}\\b\/,\n      date: \/\\b\\d{4}-\\d{2}-\\d{2}\\b\/,\n      status: \/\\b[45]\\d{2}\\b\/\n    }\n  end\n\n  def analyze_errors\n    error_entries = []\n\n    File.open(@log_path).each_slice(1000) do |lines|\n      errors = lines.select { |line| line.match?(@patterns[:status]) }\n      parsed_errors = errors.map do |error|\n        {\n          ip: error.match(@patterns[:ip])&amp;.[](0),\n          date: error.match(@patterns[:date])&amp;.[](0),\n          status: error.match(@patterns[:status])&amp;.[](0)\n        }\n      end\n      error_entries.concat(parsed_errors)\n    end\n\n    format_report(error_entries)\n  end\n\n  private\n\n  def format_report(entries)\n    headers = ['IP Address', 'Date', 'Status Code']\n    rows = entries.map do |entry|\n      [entry[:ip], entry[:date], entry[:status]].join(',')\n    end\n\n    [headers.join(','), *rows].join(\"\\n\")\n  end\nend\n\n# \u4f7f\u7528\u4f8b\nanalyzer = LogAnalyzer.new('access.log')\nputs analyzer.analyze_errors<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u30c7\u30fc\u30bf\u5909\u63db\u30d0\u30c3\u30c1<\/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=\"\">class DataTransformer\n  def initialize(input_file, output_file)\n    @input_file = input_file\n    @output_file = output_file\n    @buffer_size = 1000\n  end\n\n  def transform\n    File.open(@output_file, 'w') do |output|\n      buffer = []\n\n      CSV.foreach(@input_file, headers: true) do |row|\n        transformed_row = transform_row(row)\n        buffer &lt;&lt; transformed_row\n\n        if buffer.size &gt;= @buffer_size\n          output.puts(buffer.join(\"\\n\"))\n          buffer.clear\n        end\n      end\n\n      output.puts(buffer.join(\"\\n\")) unless buffer.empty?\n    end\n  end\n\n  private\n\n  def transform_row(row)\n    [\n      row['id'],\n      row['name'].upcase,\n      format_date(row['date']),\n      calculate_value(row['amount'])\n    ].join(',')\n  end\n\n  def format_date(date_str)\n    Date.parse(date_str).strftime('%Y-%m-%d')\n  rescue ArgumentError\n    'INVALID DATE'\n  end\n\n  def calculate_value(amount_str)\n    (amount_str.to_f * 1.1).round(2)\n  rescue ArgumentError\n    0.0\n  end\nend\n\n# \u4f7f\u7528\u4f8b\ntransformer = DataTransformer.new('input.csv', 'output.csv')\ntransformer.transform<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u30d0\u30c3\u30c1<\/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=\"\">class ReportGenerator\n  def initialize(data_source)\n    @data_source = data_source\n    @report_sections = []\n  end\n\n  def generate_report\n    add_header\n    add_summary\n    add_details\n    add_footer\n\n    @report_sections.join(\"\\n\\n\")\n  end\n\n  private\n\n  def add_header\n    @report_sections &lt;&lt; [\n      \"#{'-' * 50}\",\n      \"Monthly Sales Report\",\n      \"Generated at: #{Time.now}\",\n      \"#{'-' * 50}\"\n    ].join(\"\\n\")\n  end\n\n  def add_summary\n    summary = calculate_summary\n    @report_sections &lt;&lt; [\n      \"Summary:\",\n      \"Total Sales: $#{summary[:total_sales]}\",\n      \"Average Order: $#{summary[:average_order]}\",\n      \"Total Orders: #{summary[:total_orders]}\"\n    ].join(\"\\n\")\n  end\n\n  def add_details\n    details = generate_details\n    @report_sections &lt;&lt; [\n      \"Detailed Breakdown:\",\n      *details.map { |detail| format_detail(detail) }\n    ].join(\"\\n\")\n  end\n\n  def add_footer\n    @report_sections &lt;&lt; [\n      \"#{'-' * 50}\",\n      \"End of Report\",\n      \"#{'-' * 50}\"\n    ].join(\"\\n\")\n  end\n\n  def calculate_summary\n    # \u30c7\u30fc\u30bf\u96c6\u8a08\u30ed\u30b8\u30c3\u30af\n    {\n      total_sales: 10000,\n      average_order: 250,\n      total_orders: 40\n    }\n  end\n\n  def generate_details\n    # \u8a73\u7d30\u30c7\u30fc\u30bf\u751f\u6210\u30ed\u30b8\u30c3\u30af\n    []\n  end\n\n  def format_detail(detail)\n    # \u8a73\u7d30\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u30ed\u30b8\u30c3\u30af\n    detail.to_s\n  end\nend\n\n# \u4f7f\u7528\u4f8b\ngenerator = ReportGenerator.new('sales_data.db')\nputs generator.generate_report<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u3067\u306f\u3001\u4ee5\u4e0b\u306e\u70b9\u306b\u6ce8\u610f\u3092\u6255\u3063\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30e1\u30e2\u30ea\u52b9\u7387<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5927\u304d\u306a\u30c7\u30fc\u30bf\u30bb\u30c3\u30c8\u3092\u6271\u3046\u5834\u5408\u306f\u30d0\u30c3\u30d5\u30a1\u30ea\u30f3\u30b0\u3092\u4f7f\u7528<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30c1\u30e3\u30f3\u30af\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u4e0d\u8981\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u65e9\u671f\u89e3\u653e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30a8\u30e9\u30fc\u51e6\u7406<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u9069\u5207\u306a\u4f8b\u5916\u51e6\u7406<\/li>\n\n\n\n<li>\u30c7\u30fc\u30bf\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30a8\u30e9\u30fc\u30ed\u30b0\u306e\u8a18\u9332<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u52b9\u7387\u7684\u306a\u30c7\u30fc\u30bf\u69cb\u9020\u306e\u4f7f\u7528<\/li>\n\n\n\n<li>\u5fc5\u8981\u6700\u5c0f\u9650\u306e\u51e6\u7406<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u30d0\u30c3\u30c1\u30b5\u30a4\u30ba\u306e\u9078\u629e<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u4fdd\u5b88\u6027<\/strong><\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30af\u30ea\u30fc\u30f3\u306a\u30b3\u30fc\u30c9\u69cb\u9020<\/li>\n\n\n\n<li>\u9069\u5207\u306a\u8cac\u4efb\u5206\u5272<\/li>\n\n\n\n<li>\u660e\u78ba\u306a\u547d\u540d\u898f\u5247<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u5b9f\u88c5\u4f8b\u3092\u53c2\u8003\u306b\u3001\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067join\u30e1\u30bd\u30c3\u30c9\u3092\u52b9\u679c\u7684\u306b\u6d3b\u7528\u3059\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-1304","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\/1304","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=1304"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1304\/revisions"}],"predecessor-version":[{"id":1308,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1304\/revisions\/1308"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1304"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1304"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1304"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}