{"id":1614,"date":"2025-03-24T08:50:15","date_gmt":"2025-03-23T23:50:15","guid":{"rendered":"https:\/\/dexall.co.jp\/articles\/?p=1614"},"modified":"2025-03-24T08:50:15","modified_gmt":"2025-03-23T23:50:15","slug":"%e3%80%8c%e3%80%90%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%e3%80%91google-test%e3%81%a7%e5%ae%9f%e7%8f%be%e3%81%99%e3%82%8b5%e3%81%a4%e3%81%ae%e5%8d%b3%e5%ae%9f%e8%b7%b5%e3%83%a6%e3%83%8b","status":"publish","type":"post","link":"https:\/\/dexall.co.jp\/articles\/?p=1614","title":{"rendered":"\u300c\u3010\u5b8c\u5168\u30ac\u30a4\u30c9\u3011Google Test\u3067\u5b9f\u73fe\u3059\u308b5\u3064\u306e\u5373\u5b9f\u8df5\u30e6\u30cb\u30c3\u30c8\u30c6\u30b9\u30c8\u8853"},"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\">Google Test \u3068\u306f\uff1f\u6700\u65b0\u306e\u52d5\u5411\u3068\u7279\u5fb4\u3092\u5fb9\u5e95\u89e3\u8aac<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-1\">C++ \u306b\u304a\u3051\u308b\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u91cd\u8981\u6027<\/a>      <\/li>      <li>        <a href=\"#i-2\">Google Test \u304c\u9078\u3070\u308c\u308b 3 \u3064\u306e\u7406\u7531<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-3\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u8ffd\u52a0\u3055\u308c\u305f\u6ce8\u76ee\u6a5f\u80fd<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-4\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308bGoogle Test<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-5\">Windows\/Mac\/Linux \u3067\u306e\u958b\u767a\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/a>      <\/li>      <li>        <a href=\"#i-9\">CMake\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-10\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\uff1a\u3088\u304f\u3042\u308b\u74b0\u5883\u69cb\u7bc9\u306e\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-11\">5\u30b9\u30c6\u30c3\u30d7\u3067\u7fd2\u5f97\u3059\u308bGoogle Test\u306e\u57fa\u672c<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-12\">\u30b9\u30c6\u30c3\u30d71\uff1a\u6700\u521d\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u4f5c\u6210<\/a>      <\/li>      <li>        <a href=\"#i-13\">\u30b9\u30c6\u30c3\u30d72\uff1a\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u7528<\/a>      <\/li>      <li>        <a href=\"#i-14\">\u30b9\u30c6\u30c3\u30d73\uff1a\u30c6\u30b9\u30c8\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u6d3b\u7528<\/a>      <\/li>      <li>        <a href=\"#i-15\">\u30b9\u30c6\u30c3\u30d74\uff1a\u30d1\u30e9\u30e1\u30fc\u30bf\u5316\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-16\">\u30b9\u30c6\u30c3\u30d75\uff1a\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u5229\u7528<\/a>      <\/li>    <\/ul>  <\/li>  <li>    <a href=\"#i-17\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\u5b9f\u8df5\u7684\u306a\u30c6\u30b9\u30c8\u30c6\u30af\u30cb\u30c3\u30af<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-18\">\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306b\u5bfe\u3059\u308b\u30c6\u30b9\u30c8\u6226\u7565<\/a>      <\/li>      <li>        <a href=\"#i-19\">\u30c6\u30b9\u30c8\u53ef\u80fd\u306a\u8a2d\u8a08\u3078\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-20\">\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u3092\u9ad8\u3081\u308b\u52b9\u679c\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1<\/a>      <\/li>    <\/ul>  <\/li>  <li class=\"last\">    <a href=\"#i-21\">Google \u30c6\u30b9\u30c8\u3092\u7528\u3044\u305f\u958b\u767a\u52b9\u7387\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/a>    <ul class=\"menu_level_1\">      <li class=\"first\">        <a href=\"#i-22\">CI\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306e\u81ea\u52d5\u30c6\u30b9\u30c8\u5b9f\u884c<\/a>      <\/li>      <li>        <a href=\"#i-23\">\u30c6\u30b9\u30c8\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3068\u5206\u6790\u624b\u6cd5<\/a>      <\/li>      <li class=\"last\">        <a href=\"#i-24\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30c6\u30b9\u30c8\u6226\u7565\u306e\u8a55\u4fa1<\/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\">Google Test \u3068\u306f\uff1f\u6700\u65b0\u306e\u52d5\u5411\u3068\u7279\u5fb4\u3092\u5fb9\u5e95\u89e3\u8aac<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-1\">C++ \u306b\u304a\u3051\u308b\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u91cd\u8981\u6027<\/h3>\n\n\n\n<p>C++\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u304a\u3044\u3066\u3001\u4fe1\u983c\u6027\u306e\u9ad8\u3044\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u5b58\u5728\u306f\u4e0d\u53ef\u6b20\u3067\u3059\u3002\u7279\u306b\u4ee5\u4e0b\u306e\u7406\u7531\u304b\u3089\u3001\u9069\u5207\u306a\u30c6\u30b9\u30c8\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u306e\u9078\u629e\u304c\u91cd\u8981\u3068\u306a\u308a\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30e1\u30e2\u30ea\u7ba1\u7406\u306e\u8907\u96d1\u3055<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u624b\u52d5\u306e\u30e1\u30e2\u30ea\u7ba1\u7406\u304c\u5fc5\u8981<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u30ea\u30fc\u30af\u306e\u691c\u51fa\u304c\u91cd\u8981<\/li>\n\n\n\n<li>\u30ea\u30bd\u30fc\u30b9\u89e3\u653e\u306e\u78ba\u5b9f\u306a\u691c\u8a3c\u304c\u5fc5\u8981<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u578b\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30eb\u6642\u306e\u578b\u30c1\u30a7\u30c3\u30af<\/li>\n\n\n\n<li>\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8\u3092\u4f7f\u7528\u3057\u305f\u30b8\u30a7\u30cd\u30ea\u30c3\u30af\u30b3\u30fc\u30c9\u306e\u30c6\u30b9\u30c8<\/li>\n\n\n\n<li>\u578b\u5909\u63db\u306b\u95a2\u3059\u308b\u554f\u984c\u306e\u691c\u51fa<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d1\u30d5\u30a9\u30fc\u30de\u30b9\u691c\u8a3c\u306e\u5fc5\u8981\u6027<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9f\u884c\u901f\u5ea6\u306e\u691c\u8a3c<\/li>\n\n\n\n<li>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u76e3\u8996<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u30ea\u30bd\u30fc\u30b9\u306e\u5229\u7528\u72b6\u6cc1\u78ba\u8a8d<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-2\">Google Test \u304c\u9078\u3070\u308c\u308b 3 \u3064\u306e\u7406\u7531<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u8c4a\u5bcc\u306a\u6a5f\u80fd\u3068\u4f7f\u3044\u3084\u3059\u3055<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u76f4\u611f\u7684\u306a\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u69cb\u6587<\/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=\"\">   \/\/ \u57fa\u672c\u7684\u306a\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\n   EXPECT_EQ(sum(2, 2), 4);  \/\/ \u7b49\u4fa1\u6027\u306e\u30c6\u30b9\u30c8\n   ASSERT_TRUE(isValid());    \/\/ \u771f\u507d\u5024\u306e\u30c6\u30b9\u30c8<\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n\n\n\n<li>\u30d1\u30e9\u30e1\u30fc\u30bf\u5316\u3055\u308c\u305f\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5\u304c\u5bb9\u6613<\/li>\n<\/ul>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5f37\u529b\u306a\u30e2\u30c3\u30af\u6a5f\u80fd<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Google Mock\u3068\u306e\u5b8c\u5168\u306a\u7d71\u5408<\/li>\n\n\n\n<li>\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u306e\u30e2\u30c3\u30af\u5316\u304c\u7c21\u5358<\/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=\"\">   \/\/ \u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u5b9a\u7fa9\u4f8b\n   class MockDatabase : public Database {\n       MOCK_METHOD(bool, connect, (const string&amp; url), (override));\n       MOCK_METHOD(bool, disconnect, (), (override));\n   };<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u6d3b\u767a\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u3068\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5b9a\u671f\u7684\u306a\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8<\/li>\n\n\n\n<li>\u8c4a\u5bcc\u306a\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b5\u30f3\u30d7\u30eb<\/li>\n\n\n\n<li>\u591a\u304f\u306e\u4f01\u696d\u3067\u306e\u63a1\u7528\u5b9f\u7e3e<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-3\">\u6700\u65b0\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u8ffd\u52a0\u3055\u308c\u305f\u6ce8\u76ee\u6a5f\u80fd<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u306e\u4e26\u5217\u5b9f\u884c\u6a5f\u80fd\u306e\u5f37\u5316<\/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=\"\">   \/\/ \u4e26\u5217\u5b9f\u884c\u306e\u8a2d\u5b9a\u4f8b\n   int main(int argc, char **argv) {\n       testing::InitGoogleTest(&amp;argc, argv);\n       testing::GTEST_FLAG(shuffle) = true;  \/\/ \u30c6\u30b9\u30c8\u306e\u9806\u5e8f\u3092\u30e9\u30f3\u30c0\u30e0\u5316\n       return RUN_ALL_TESTS();\n   }<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30d5\u30a9\u30fc\u30de\u30c3\u30bf\u306e\u30b5\u30dd\u30fc\u30c8<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u8907\u96d1\u306a\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u6bd4\u8f03\u304c\u5bb9\u6613\u306b<\/li>\n\n\n\n<li>\u3088\u308a\u8a73\u7d30\u306a\u30c6\u30b9\u30c8\u7d50\u679c\u306e\u51fa\u529b\u304c\u53ef\u80fd<\/li>\n<\/ul>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30b9\u30a4\u30fc\u30c8\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u6a5f\u80fd<\/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=\"\">   \/\/ \u7279\u5b9a\u306e\u30c6\u30b9\u30c8\u306e\u307f\u3092\u5b9f\u884c\n   .\/my_test --gtest_filter=TestSuite.TestName<\/pre>\n\n\n\n<p>\u3053\u306e\u7ae0\u3067\u306f\u3001Google Test\u306e\u57fa\u672c\u7684\u306a\u7279\u5fb4\u3068\u6700\u65b0\u306e\u6a5f\u80fd\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3057\u305f\u3002\u6b21\u306e\u7ae0\u3067\u306f\u3001\u5b9f\u969b\u306e\u74b0\u5883\u69cb\u7bc9\u624b\u9806\u306b\u3064\u3044\u3066\u8a73\u3057\u304f\u89e3\u8aac\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-4\">\u74b0\u5883\u69cb\u7bc9\u304b\u3089\u59cb\u3081\u308bGoogle Test<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-5\">Windows\/Mac\/Linux \u3067\u306e\u958b\u767a\u74b0\u5883\u30bb\u30c3\u30c8\u30a2\u30c3\u30d7\u624b\u9806<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-6\">Windows\u74b0\u5883\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5fc5\u8981\u306a\u30c4\u30fc\u30eb\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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=\"\"># Visual Studio\uff08Community Edition\u53ef\uff09\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n# vcpkg\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\ngit clone https:\/\/github.com\/Microsoft\/vcpkg.git\ncd vcpkg\n.\/bootstrap-vcpkg.bat\n.\/vcpkg integrate install\n\n# Google Test\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\n.\/vcpkg install gtest:x64-windows<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Visual Studio\u3067\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u8a2d\u5b9a<\/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=\"\"># CMakeLists.txt\ncmake_minimum_required(VERSION 3.14)\nproject(my_project)\n\n# Google Test\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u63a2\u3059\nfind_package(GTest REQUIRED)\n\n# \u30c6\u30b9\u30c8\u7528\u306e\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\nadd_executable(my_tests test.cpp)\ntarget_link_libraries(my_tests GTest::GTest GTest::Main)<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-7\">Mac\u74b0\u5883\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Homebrew\u3092\u4f7f\u7528\u3057\u305f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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=\"\"># Homebrew\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u672a\u5c0e\u5165\u306e\u5834\u5408\uff09\n\/bin\/bash -c \"$(curl -fsSL https:\/\/raw.githubusercontent.com\/Homebrew\/install\/HEAD\/install.sh)\"\n\n# Google Test\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\nbrew install googletest\n\n# CMake\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\uff08\u672a\u5c0e\u5165\u306e\u5834\u5408\uff09\nbrew install cmake<\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"i-8\">Linux\u74b0\u5883\u3067\u306e\u8a2d\u5b9a<\/h4>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d1\u30c3\u30b1\u30fc\u30b8\u30de\u30cd\u30fc\u30b8\u30e3\u30fc\u3092\u4f7f\u7528\u3057\u305f\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/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=\"\"># Ubuntu\u306e\u5834\u5408\nsudo apt-get update\nsudo apt-get install libgtest-dev\nsudo apt-get install cmake\n\n# Google Test\u306e\u30d3\u30eb\u30c9\ncd \/usr\/src\/gtest\nsudo cmake CMakeLists.txt\nsudo make\nsudo cp lib\/*.a \/usr\/lib<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-9\">CMake\u3092\u4f7f\u7528\u3057\u305f\u52b9\u7387\u7684\u306a\u30d3\u30eb\u30c9\u8a2d\u5b9a<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u6210\u306e\u4f8b<\/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=\"\">my_project\/\n\u251c\u2500\u2500 CMakeLists.txt\n\u251c\u2500\u2500 src\/\n\u2502   \u251c\u2500\u2500 main.cpp\n\u2502   \u2514\u2500\u2500 calculator.cpp\n\u2514\u2500\u2500 tests\/\n    \u251c\u2500\u2500 CMakeLists.txt\n    \u2514\u2500\u2500 calculator_test.cpp<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30e1\u30a4\u30f3\u306eCMakeLists.txt<\/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=\"\">cmake_minimum_required(VERSION 3.14)\nproject(my_project)\n\n# C++17\u3092\u4f7f\u7528\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\n# Google Test\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u63a2\u3059\nfind_package(GTest REQUIRED)\n\n# \u30e1\u30a4\u30f3\u306e\u30e9\u30a4\u30d6\u30e9\u30ea\u3092\u30d3\u30eb\u30c9\nadd_library(calculator src\/calculator.cpp)\ntarget_include_directories(calculator PUBLIC ${PROJECT_SOURCE_DIR}\/include)\n\n# \u30c6\u30b9\u30c8\u306e\u30d3\u30eb\u30c9\u3092\u6709\u52b9\u5316\nenable_testing()\nadd_subdirectory(tests)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>tests\/CMakeLists.txt<\/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=\"\"># \u30c6\u30b9\u30c8\u7528\u306e\u5b9f\u884c\u30d5\u30a1\u30a4\u30eb\u3092\u4f5c\u6210\nadd_executable(calculator_tests calculator_test.cpp)\ntarget_link_libraries(calculator_tests\n    PRIVATE\n    calculator\n    GTest::GTest\n    GTest::Main\n)\n\n# CTest\u306e\u8a2d\u5b9a\ninclude(GoogleTest)\ngtest_discover_tests(calculator_tests)<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-10\">\u30c8\u30e9\u30d6\u30eb\u30b7\u30e5\u30fc\u30c6\u30a3\u30f3\u30b0\uff1a\u3088\u304f\u3042\u308b\u74b0\u5883\u69cb\u7bc9\u306e\u554f\u984c\u3068\u89e3\u6c7a\u7b56<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ea\u30f3\u30af\u30a8\u30e9\u30fc\u306e\u5bfe\u51e6<\/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=\"\"># \u30a8\u30e9\u30fc: undefined reference to 'testing::....'\n# \u89e3\u6c7a\u7b56: \u30ea\u30f3\u30ab\u30fc\u30d5\u30e9\u30b0\u306e\u8ffd\u52a0\ntarget_link_libraries(your_test_target\n    PRIVATE\n    GTest::GTest\n    GTest::Main\n    pthread  # Linux\u306e\u5834\u5408\u306f\u5fc5\u8981\n)<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30d3\u30eb\u30c9\u30a8\u30e9\u30fc\u306e\u5bfe\u51e6<\/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=\"\"># \u30a8\u30e9\u30fc: \u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u4e0d\u4e00\u81f4\n# \u89e3\u6c7a\u7b56: \u660e\u793a\u7684\u306a\u30b3\u30f3\u30d1\u30a4\u30e9\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u8a2d\u5b9a\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\nset(CMAKE_CXX_EXTENSIONS OFF)<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u52d5\u4f5c\u78ba\u8a8d\u7528\u306e\u6700\u5c0f\u9650\u306e\u30c6\u30b9\u30c8\u30b3\u30fc\u30c9<\/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=\"\">#include &lt;gtest\/gtest.h&gt;\n\n\/\/ \u7c21\u5358\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\nTEST(SampleTest, SimpleAssertion) {\n    EXPECT_EQ(2 + 2, 4);\n}\n\nint main(int argc, char **argv) {\n    testing::InitGoogleTest(&amp;argc, argv);\n    return RUN_ALL_TESTS();\n}<\/pre>\n\n\n\n<p>\u74b0\u5883\u69cb\u7bc9\u3067\u554f\u984c\u304c\u767a\u751f\u3057\u305f\u5834\u5408\u306f\u3001\u4ee5\u4e0b\u306e\u70b9\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u30b3\u30f3\u30d1\u30a4\u30e9\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3068Google Test\u306e\u4e92\u63db\u6027<\/li>\n\n\n\n<li>\u5fc5\u8981\u306a\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u4f9d\u5b58\u95a2\u4fc2<\/li>\n\n\n\n<li>CMake\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u3068\u8a2d\u5b9a<\/li>\n\n\n\n<li>\u30b7\u30b9\u30c6\u30e0\u306e\u30d1\u30b9\u3068\u74b0\u5883\u5909\u6570<\/li>\n<\/ul>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u624b\u9806\u306b\u5f93\u3048\u3070\u3001\u5404\u30d7\u30e9\u30c3\u30c8\u30d5\u30a9\u30fc\u30e0\u3067Google Test\u306e\u74b0\u5883\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u5b9f\u969b\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u4f5c\u6210\u65b9\u6cd5\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-11\">5\u30b9\u30c6\u30c3\u30d7\u3067\u7fd2\u5f97\u3059\u308bGoogle Test\u306e\u57fa\u672c<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-12\">\u30b9\u30c6\u30c3\u30d71\uff1a\u6700\u521d\u306e\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u4f5c\u6210<\/h3>\n\n\n\n<p>\u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306e\u4f5c\u6210\u304b\u3089\u59cb\u3081\u307e\u3057\u3087\u3046\u3002\u4ee5\u4e0b\u306f\u8a08\u7b97\u6a5f\u30af\u30e9\u30b9\u306e\u30c6\u30b9\u30c8\u4f8b\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=\"\">\/\/ calculator.h\nclass Calculator {\npublic:\n    int add(int a, int b) { return a + b; }\n    int subtract(int a, int b) { return a - b; }\n};\n\n\/\/ calculator_test.cpp\n#include &lt;gtest\/gtest.h&gt;\n#include \"calculator.h\"\n\n\/\/ \u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\nTEST(CalculatorTest, AdditionWorks) {\n    Calculator calc;\n    EXPECT_EQ(calc.add(2, 2), 4);  \/\/ \u57fa\u672c\u7684\u306a\u52a0\u7b97\u30c6\u30b9\u30c8\n    EXPECT_EQ(calc.add(-2, 2), 0); \/\/ \u8ca0\u306e\u6570\u306e\u30c6\u30b9\u30c8\n}\n\n\/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306e\u30b0\u30eb\u30fc\u30d7\u5316\nTEST(CalculatorTest, SubtractionWorks) {\n    Calculator calc;\n    EXPECT_EQ(calc.subtract(4, 2), 2);\n    EXPECT_EQ(calc.subtract(2, 4), -2);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-13\">\u30b9\u30c6\u30c3\u30d72\uff1a\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u306e\u4f7f\u7528<\/h3>\n\n\n\n<p>Google Test\u306f\u69d8\u3005\u306a\u30a2\u30b5\u30fc\u30b7\u30e7\u30f3\u3092\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">TEST(AssertionDemo, VariousAssertions) {\n    \/\/ \u7b49\u4fa1\u6027\u306e\u30c6\u30b9\u30c8\n    EXPECT_EQ(2 + 2, 4);       \/\/ \u7b49\u3057\u3044\u3053\u3068\u3092\u671f\u5f85\n    EXPECT_NE(2 + 2, 5);       \/\/ \u7b49\u3057\u304f\u306a\u3044\u3053\u3068\u3092\u671f\u5f85\n\n    \/\/ \u5927\u5c0f\u95a2\u4fc2\u306e\u30c6\u30b9\u30c8\n    EXPECT_LT(1, 2);           \/\/ \u3088\u308a\u5c0f\u3055\u3044\n    EXPECT_LE(2, 2);           \/\/ \u4ee5\u4e0b\n    EXPECT_GT(3, 2);           \/\/ \u3088\u308a\u5927\u304d\u3044\n    EXPECT_GE(2, 2);           \/\/ \u4ee5\u4e0a\n\n    \/\/ \u771f\u507d\u5024\u306e\u30c6\u30b9\u30c8\n    EXPECT_TRUE(1 &lt; 2);\n    EXPECT_FALSE(1 &gt; 2);\n\n    \/\/ \u6587\u5b57\u5217\u306e\u6bd4\u8f03\n    std::string str = \"hello\";\n    EXPECT_STREQ(\"hello\", str.c_str());\n\n    \/\/ \u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u306e\u6bd4\u8f03\n    EXPECT_NEAR(3.14, 3.141592, 0.01); \/\/ \u8a31\u5bb9\u8aa4\u5dee\u5185\u3067\u306e\u6bd4\u8f03\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-14\">\u30b9\u30c6\u30c3\u30d73\uff1a\u30c6\u30b9\u30c8\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u306e\u6d3b\u7528<\/h3>\n\n\n\n<p>\u30c6\u30b9\u30c8\u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u3092\u4f7f\u7528\u3057\u3066\u3001\u8907\u6570\u306e\u30c6\u30b9\u30c8\u3067\u5171\u901a\u306e\u8a2d\u5b9a\u3092\u518d\u5229\u7528\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">class DatabaseTest : public ::testing::Test {\nprotected:\n    void SetUp() override {\n        \/\/ \u5404\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u5b9f\u884c\u524d\u306e\u521d\u671f\u5316\n        db.connect(\"test_db\");\n    }\n\n    void TearDown() override {\n        \/\/ \u5404\u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u5b9f\u884c\u5f8c\u306e\u30af\u30ea\u30fc\u30f3\u30a2\u30c3\u30d7\n        db.disconnect();\n    }\n\n    Database db;\n};\n\n\/\/ \u30d5\u30a3\u30af\u30b9\u30c1\u30e3\u3092\u4f7f\u7528\u3057\u305f\u30c6\u30b9\u30c8\nTEST_F(DatabaseTest, InsertOperation) {\n    EXPECT_TRUE(db.insert(\"key1\", \"value1\"));\n    EXPECT_EQ(db.get(\"key1\"), \"value1\");\n}\n\nTEST_F(DatabaseTest, DeleteOperation) {\n    db.insert(\"key2\", \"value2\");\n    EXPECT_TRUE(db.remove(\"key2\"));\n    EXPECT_FALSE(db.exists(\"key2\"));\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-15\">\u30b9\u30c6\u30c3\u30d74\uff1a\u30d1\u30e9\u30e1\u30fc\u30bf\u5316\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/h3>\n\n\n\n<p>\u540c\u3058\u30c6\u30b9\u30c8\u30ed\u30b8\u30c3\u30af\u3092\u7570\u306a\u308b\u5165\u529b\u5024\u3067\u5b9f\u884c\u3059\u308b\u5834\u5408\u3001\u30d1\u30e9\u30e1\u30fc\u30bf\u5316\u30c6\u30b9\u30c8\u304c\u4fbf\u5229\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=\"\">class CalculatorTest : public ::testing::TestWithParam&lt;std::tuple&lt;int, int, int&gt;&gt; {\n};\n\nTEST_P(CalculatorTest, Addition) {\n    Calculator calc;\n    auto params = GetParam();\n    int a = std::get&lt;0&gt;(params);\n    int b = std::get&lt;1&gt;(params);\n    int expected = std::get&lt;2&gt;(params);\n\n    EXPECT_EQ(calc.add(a, b), expected);\n}\n\n\/\/ \u30c6\u30b9\u30c8\u30b1\u30fc\u30b9\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5b9a\u7fa9\nINSTANTIATE_TEST_SUITE_P(\n    AdditionTests,\n    CalculatorTest,\n    ::testing::Values(\n        std::make_tuple(1, 1, 2),\n        std::make_tuple(-1, 1, 0),\n        std::make_tuple(100, 200, 300),\n        std::make_tuple(0, 0, 0)\n    )\n);<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-16\">\u30b9\u30c6\u30c3\u30d75\uff1a\u30e2\u30c3\u30af\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u306e\u4f5c\u6210\u3068\u5229\u7528<\/h3>\n\n\n\n<p>Google Mock\u3092\u4f7f\u7528\u3057\u3066\u3001\u4f9d\u5b58\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u30e2\u30c3\u30af\u5316\u3067\u304d\u307e\u3059\uff1a<\/p>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\/\/ \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\nclass IDatabase {\npublic:\n    virtual ~IDatabase() = default;\n    virtual bool connect(const std::string&amp; url) = 0;\n    virtual bool disconnect() = 0;\n    virtual bool execute(const std::string&amp; query) = 0;\n};\n\n\/\/ \u30e2\u30c3\u30af\u30af\u30e9\u30b9\u306e\u5b9a\u7fa9\nclass MockDatabase : public IDatabase {\npublic:\n    MOCK_METHOD(bool, connect, (const std::string&amp; url), (override));\n    MOCK_METHOD(bool, disconnect, (), (override));\n    MOCK_METHOD(bool, execute, (const std::string&amp; query), (override));\n};\n\n\/\/ \u30e2\u30c3\u30af\u3092\u4f7f\u7528\u3057\u305f\u30c6\u30b9\u30c8\nTEST(DatabaseClient, ExecutesQueries) {\n    MockDatabase mock_db;\n    DatabaseClient client(&amp;mock_db);\n\n    \/\/ \u30e2\u30c3\u30af\u306e\u632f\u308b\u821e\u3044\u3092\u5b9a\u7fa9\n    EXPECT_CALL(mock_db, connect(\"test_url\"))\n        .WillOnce(testing::Return(true));\n    EXPECT_CALL(mock_db, execute(\"SELECT * FROM users\"))\n        .WillOnce(testing::Return(true));\n    EXPECT_CALL(mock_db, disconnect())\n        .WillOnce(testing::Return(true));\n\n    \/\/ \u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u30b3\u30fc\u30c9\u306e\u30c6\u30b9\u30c8\n    EXPECT_TRUE(client.performQuery(\"SELECT * FROM users\"));\n}<\/pre>\n\n\n\n<p>\u5404\u30b9\u30c6\u30c3\u30d7\u3092\u5b9f\u8df5\u3059\u308b\u3053\u3068\u3067\u3001Google Test\u306e\u57fa\u672c\u7684\u306a\u6a5f\u80fd\u3092\u7fd2\u5f97\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u3088\u308a\u5b9f\u8df5\u7684\u306a\u30c6\u30b9\u30c8\u30c6\u30af\u30cb\u30c3\u30af\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-17\">\u73fe\u5834\u3067\u4f7f\u3048\u308b\u5b9f\u8df5\u7684\u306a\u30c6\u30b9\u30c8\u30c6\u30af\u30cb\u30c3\u30af<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-18\">\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306b\u5bfe\u3059\u308b\u30c6\u30b9\u30c8\u6226\u7565<\/h3>\n\n\n\n<p>\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u3078\u306e\u30c6\u30b9\u30c8\u5c0e\u5165\u306f\u614e\u91cd\u306b\u884c\u3046\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306b\u52b9\u679c\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u793a\u3057\u307e\u3059\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30b7\u30fc\u30e0(Seam)\u3092\u6d3b\u7528\u3057\u305f\u30c6\u30b9\u30c8\u53ef\u80fd\u6027\u306e\u5411\u4e0a<\/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=\"\">\/\/ Before: \u30c6\u30b9\u30c8\u56f0\u96e3\u306a\u30b3\u30fc\u30c9\nclass LegacySystem {\n    void processData() {\n        auto current_time = time(nullptr);\n        \/\/ \u6642\u9593\u306b\u4f9d\u5b58\u3057\u305f\u51e6\u7406\n    }\n};\n\n\/\/ After: \u30c6\u30b9\u30c8\u53ef\u80fd\u306a\u30b3\u30fc\u30c9\nclass TimeProvider {\npublic:\n    virtual ~TimeProvider() = default;\n    virtual time_t getCurrentTime() { return time(nullptr); }\n};\n\nclass LegacySystem {\n    TimeProvider&amp; timeProvider;\npublic:\n    LegacySystem(TimeProvider&amp; tp) : timeProvider(tp) {}\n    void processData() {\n        auto current_time = timeProvider.getCurrentTime();\n        \/\/ \u6642\u9593\u306b\u4f9d\u5b58\u3057\u305f\u51e6\u7406\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\nclass MockTimeProvider : public TimeProvider {\npublic:\n    MOCK_METHOD(time_t, getCurrentTime, (), (override));\n};\n\nTEST(LegacySystemTest, ProcessData) {\n    MockTimeProvider mockTime;\n    EXPECT_CALL(mockTime, getCurrentTime())\n        .WillOnce(Return(1234567890));\n\n    LegacySystem system(mockTime);\n    system.processData();\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u7279\u6027\u30c6\u30b9\u30c8\uff08Characterization Tests\uff09\u306e\u5b9f\u88c5<\/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=\"\">\/\/ \u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u73fe\u5728\u306e\u52d5\u4f5c\u3092\u6355\u6349\u3059\u308b\u30c6\u30b9\u30c8\nTEST(LegacyBehavior, CaptureExistingBehavior) {\n    LegacyClass legacy;\n    \/\/ \u65e2\u5b58\u306e\u5165\u529b\u5024\u30bb\u30c3\u30c8\n    auto result1 = legacy.complexCalculation(100, \"OLD_MODE\");\n    auto result2 = legacy.complexCalculation(200, \"NEW_MODE\");\n\n    \/\/ \u73fe\u5728\u306e\u52d5\u4f5c\u3092\u8a18\u9332\n    EXPECT_EQ(result1, ExpectedLegacyResult1);\n    EXPECT_EQ(result2, ExpectedLegacyResult2);\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-19\">\u30c6\u30b9\u30c8\u53ef\u80fd\u306a\u8a2d\u8a08\u3078\u306e\u30ea\u30d5\u30a1\u30af\u30bf\u30ea\u30f3\u30b0\u624b\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u4f9d\u5b58\u6027\u6ce8\u5165\u30d1\u30bf\u30fc\u30f3\u306e\u9069\u7528<\/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=\"\">\/\/ Before: \u76f4\u63a5\u4f9d\u5b58\nclass UserService {\n    Database db;\n    EmailSender emailSender;\npublic:\n    void createUser(const User&amp; user) {\n        db.save(user);\n        emailSender.sendWelcomeEmail(user.email);\n    }\n};\n\n\/\/ After: \u4f9d\u5b58\u6027\u6ce8\u5165\nclass UserService {\n    IDatabase&amp; db;\n    IEmailSender&amp; emailSender;\npublic:\n    UserService(IDatabase&amp; db, IEmailSender&amp; emailSender)\n        : db(db), emailSender(emailSender) {}\n\n    void createUser(const User&amp; user) {\n        db.save(user);\n        emailSender.sendWelcomeEmail(user.email);\n    }\n};\n\n\/\/ \u30c6\u30b9\u30c8\u30b3\u30fc\u30c9\nTEST(UserServiceTest, CreateUser) {\n    MockDatabase mockDb;\n    MockEmailSender mockEmail;\n\n    EXPECT_CALL(mockDb, save(_))\n        .WillOnce(Return(true));\n    EXPECT_CALL(mockEmail, sendWelcomeEmail(_))\n        .WillOnce(Return(true));\n\n    UserService service(mockDb, mockEmail);\n    service.createUser(testUser);\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u5358\u4e00\u8cac\u4efb\u306e\u539f\u5247\u306b\u57fa\u3065\u304f\u30af\u30e9\u30b9\u5206\u5272<\/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=\"\">\/\/ Before: \u8907\u6570\u306e\u8cac\u4efb\u304c\u6df7\u5728\nclass OrderProcessor {\n    void processOrder(const Order&amp; order) {\n        validateOrder(order);\n        calculateTotal(order);\n        saveToDatabase(order);\n        sendConfirmationEmail(order);\n    }\n};\n\n\/\/ After: \u8cac\u4efb\u306e\u5206\u96e2\nclass OrderValidator {\npublic:\n    virtual bool validate(const Order&amp; order) = 0;\n};\n\nclass OrderCalculator {\npublic:\n    virtual double calculateTotal(const Order&amp; order) = 0;\n};\n\nclass OrderRepository {\npublic:\n    virtual bool save(const Order&amp; order) = 0;\n};\n\nclass OrderNotifier {\npublic:\n    virtual void sendConfirmation(const Order&amp; order) = 0;\n};\n\nclass OrderProcessor {\n    OrderValidator&amp; validator;\n    OrderCalculator&amp; calculator;\n    OrderRepository&amp; repository;\n    OrderNotifier&amp; notifier;\npublic:\n    OrderProcessor(\n        OrderValidator&amp; v,\n        OrderCalculator&amp; c,\n        OrderRepository&amp; r,\n        OrderNotifier&amp; n\n    ) : validator(v), calculator(c), \n        repository(r), notifier(n) {}\n\n    void processOrder(const Order&amp; order) {\n        if (validator.validate(order)) {\n            auto total = calculator.calculateTotal(order);\n            if (repository.save(order)) {\n                notifier.sendConfirmation(order);\n            }\n        }\n    }\n};<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-20\">\u30c6\u30b9\u30c8\u30ab\u30d0\u30ec\u30c3\u30b8\u3092\u9ad8\u3081\u308b\u52b9\u679c\u7684\u306a\u30a2\u30d7\u30ed\u30fc\u30c1<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u5883\u754c\u5024\u30c6\u30b9\u30c8\u306e\u5b9f\u88c5<\/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=\"\">TEST(BoundaryValueTest, ProcessAge) {\n    AgeValidator validator;\n\n    \/\/ \u5883\u754c\u5024\u306e\u30c6\u30b9\u30c8\n    EXPECT_FALSE(validator.isValid(-1));    \/\/ \u6700\u5c0f\u5024\u672a\u6e80\n    EXPECT_TRUE(validator.isValid(0));      \/\/ \u6700\u5c0f\u5024\n    EXPECT_TRUE(validator.isValid(120));    \/\/ \u6700\u5927\u5024\n    EXPECT_FALSE(validator.isValid(121));   \/\/ \u6700\u5927\u5024\u8d85\u904e\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u30a8\u30e9\u30fc\u30b1\u30fc\u30b9\u306e\u30c6\u30b9\u30c8<\/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=\"\">TEST(ErrorHandling, FileOperations) {\n    FileProcessor processor;\n\n    \/\/ \u5b58\u5728\u3057\u306a\u3044\u30d5\u30a1\u30a4\u30eb\n    EXPECT_THROW(processor.readFile(\"nonexistent.txt\"), \n                 FileNotFoundException);\n\n    \/\/ \u6a29\u9650\u30a8\u30e9\u30fc\n    EXPECT_THROW(processor.writeFile(\"\/root\/test.txt\"),\n                 PermissionDeniedException);\n\n    \/\/ \u7121\u52b9\u306a\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\n    EXPECT_THROW(processor.parseFile(\"invalid.txt\"),\n                 InvalidFormatException);\n}<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30c6\u30af\u30cb\u30c3\u30af\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u30ec\u30ac\u30b7\u30fc\u30b3\u30fc\u30c9\u306e\u54c1\u8cea\u5411\u4e0a\u3068\u4fdd\u5b88\u6027\u306e\u6539\u5584\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u6b21\u306e\u30bb\u30af\u30b7\u30e7\u30f3\u3067\u306f\u3001\u958b\u767a\u52b9\u7387\u5316\u306e\u305f\u3081\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u306b\u3064\u3044\u3066\u8aac\u660e\u3057\u307e\u3059\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"i-21\">Google \u30c6\u30b9\u30c8\u3092\u7528\u3044\u305f\u958b\u767a\u52b9\u7387\u5316\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-22\">CI\u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u3067\u306e\u81ea\u52d5\u30c6\u30b9\u30c8\u5b9f\u884c<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>GitHub Actions\u3067\u306e\u8a2d\u5b9a\u4f8b<\/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=\"\"># .github\/workflows\/cpp-tests.yml\nname: C++ Tests\n\non: [push, pull_request]\n\njobs:\n  build-and-test:\n    runs-on: ubuntu-latest\n\n    steps:\n    - uses: actions\/checkout@v2\n\n    - name: Install dependencies\n      run: |\n        sudo apt-get update\n        sudo apt-get install -y cmake build-essential libgtest-dev\n\n    - name: Configure CMake\n      run: |\n        cmake -B ${{github.workspace}}\/build -DCMAKE_BUILD_TYPE=Debug\n\n    - name: Build\n      run: cmake --build ${{github.workspace}}\/build\n\n    - name: Run tests\n      working-directory: ${{github.workspace}}\/build\n      run: ctest -C Debug -VV<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>Jenkins \u30d1\u30a4\u30d7\u30e9\u30a4\u30f3\u306e\u4f8b<\/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=\"\">\/\/ Jenkinsfile\npipeline {\n    agent any\n\n    stages {\n        stage('Build') {\n            steps {\n                sh 'cmake -B build -DCMAKE_BUILD_TYPE=Debug'\n                sh 'cmake --build build'\n            }\n        }\n\n        stage('Test') {\n            steps {\n                sh 'cd build &amp;&amp; ctest -C Debug -VV'\n            }\n            post {\n                always {\n                    \/\/ \u30c6\u30b9\u30c8\u7d50\u679c\u306e\u4fdd\u5b58\n                    junit '**\/test_results\/*.xml'\n                    \/\/ \u30ab\u30d0\u30ec\u30c3\u30b8\u30ec\u30dd\u30fc\u30c8\u306e\u4fdd\u5b58\n                    cobertura coberturaReportFile: '**\/coverage.xml'\n                }\n            }\n        }\n    }\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-23\">\u30c6\u30b9\u30c8\u30ec\u30dd\u30fc\u30c8\u751f\u6210\u3068\u5206\u6790\u624b\u6cd5<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30ab\u30b9\u30bf\u30e0\u30c6\u30b9\u30c8\u30ea\u30b9\u30ca\u30fc\u306e\u5b9f\u88c5<\/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 CustomTestListener : public testing::TestEventListener {\npublic:\n    void OnTestProgramStart(const testing::UnitTest&amp; unit_test) override {\n        std::cout &lt;&lt; \"Starting \" &lt;&lt; unit_test.total_test_case_count() \n                  &lt;&lt; \" test cases\\n\";\n    }\n\n    void OnTestCaseStart(const testing::TestCase&amp; test_case) override {\n        std::cout &lt;&lt; \"Test Case: \" &lt;&lt; test_case.name() &lt;&lt; \"\\n\";\n    }\n\n    void OnTestStart(const testing::TestInfo&amp; test_info) override {\n        std::cout &lt;&lt; \"  Test: \" &lt;&lt; test_info.name() &lt;&lt; \"\\n\";\n    }\n\n    void OnTestResult(const testing::TestInfo&amp; test_info) override {\n        if (test_info.result()-&gt;Passed()) {\n            passed_tests_++;\n        } else {\n            failed_tests_++;\n        }\n    }\n\nprivate:\n    int passed_tests_ = 0;\n    int failed_tests_ = 0;\n};\n\n\/\/ \u30ea\u30b9\u30ca\u30fc\u306e\u767b\u9332\nint main(int argc, char** argv) {\n    testing::InitGoogleTest(&amp;argc, argv);\n    testing::TestEventListeners&amp; listeners = \n        testing::UnitTest::GetInstance()-&gt;listeners();\n\n    delete listeners.Release(listeners.default_result_printer());\n    listeners.Append(new CustomTestListener);\n\n    return RUN_ALL_TESTS();\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>XML\u5f62\u5f0f\u306e\u30ec\u30dd\u30fc\u30c8\u751f\u6210<\/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\u30a4\u30f3\u306e\u30c6\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb\u3067\u8a2d\u5b9a\nint main(int argc, char** argv) {\n    testing::InitGoogleTest(&amp;argc, argv);\n    testing::GTEST_FLAG(output) = \"xml:test_results.xml\";\n    return RUN_ALL_TESTS();\n}<\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"i-24\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u305f\u30c6\u30b9\u30c8\u6226\u7565\u306e\u8a55\u4fa1<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>\u30c6\u30b9\u30c8\u30d4\u30e9\u30df\u30c3\u30c9\u306e\u5b9f\u88c5\u4f8b<\/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=\"\">\/\/ \u5358\u4f53\u30c6\u30b9\u30c8 (\u5e95\u8fba: \u6700\u3082\u591a\u304f\u5b9f\u88c5)\nTEST(StringUtils, Tokenize) {\n    std::string input = \"hello,world,test\";\n    auto tokens = StringUtils::tokenize(input, ',');\n    EXPECT_EQ(tokens.size(), 3);\n}\n\n\/\/ \u7d71\u5408\u30c6\u30b9\u30c8 (\u4e2d\u9593\u5c64)\nTEST(UserService, CreateUserWithDatabase) {\n    DatabaseConnection db;\n    UserService service(db);\n    User user(\"test@example.com\");\n    EXPECT_TRUE(service.createUser(user));\n}\n\n\/\/ E2E\u30c6\u30b9\u30c8 (\u9802\u70b9: \u91cd\u8981\u306a\u30d5\u30ed\u30fc\u306e\u307f)\nTEST(UserWorkflow, CompleteRegistration) {\n    Application app;\n    EXPECT_TRUE(app.startUp());\n    EXPECT_TRUE(app.register(\"test@example.com\", \"password\"));\n    EXPECT_TRUE(app.login(\"test@example.com\", \"password\"));\n    EXPECT_TRUE(app.shutDown());\n}<\/pre>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>\u52b9\u679c\u7684\u306a\u30c6\u30b9\u30c8\u6226\u7565\u306e\u8a55\u4fa1\u57fa\u6e96<\/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=\"\">\/\/ \u30c6\u30b9\u30c8\u306e\u5b9f\u884c\u901f\u5ea6\u306e\u6e2c\u5b9a\nTEST(PerformanceTest, DatabaseOperations) {\n    testing::Timer timer;\n\n    DatabaseOperations db;\n    for (int i = 0; i &lt; 1000; ++i) {\n        db.insert(makeRandomRecord());\n    }\n\n    std::cout &lt;&lt; \"Time taken: \" &lt;&lt; timer.Elapsed() &lt;&lt; \"s\\n\";\n    EXPECT_LT(timer.Elapsed(), 5.0); \/\/ 5\u79d2\u4ee5\u5185\u306b\u5b8c\u4e86\u3059\u3079\u304d\n}\n\n\/\/ \u30c6\u30b9\u30c8\u306e\u30e1\u30f3\u30c6\u30ca\u30f3\u30b9\u6027\u8a55\u4fa1\nclass TestabilityMetrics {\npublic:\n    static int calculateComplexity(const TestCase&amp; test) {\n        int complexity = 0;\n        complexity += test.countAssertions() * 1;\n        complexity += test.countMocks() * 2;\n        complexity += test.countFixtures() * 3;\n        return complexity;\n    }\n};<\/pre>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u898f\u6a21\u306b\u5fdc\u3058\u305f\u30c6\u30b9\u30c8\u6226\u7565<\/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=\"\">\/\/ \u5c0f\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5411\u3051: \u57fa\u672c\u7684\u306a\u30c6\u30b9\u30c8\u8a2d\u5b9a\nclass SimpleTestStrategy {\npublic:\n    void configure() {\n        testing::GTEST_FLAG(shuffle) = true;\n        testing::GTEST_FLAG(break_on_failure) = true;\n    }\n};\n\n\/\/ \u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5411\u3051: \u9ad8\u5ea6\u306a\u30c6\u30b9\u30c8\u8a2d\u5b9a\nclass EnterpriseTestStrategy {\npublic:\n    void configure() {\n        \/\/ \u4e26\u5217\u5b9f\u884c\u306e\u6709\u52b9\u5316\n        testing::GTEST_FLAG(shuffle) = true;\n        testing::GTEST_FLAG(repeat) = 1;\n\n        \/\/ \u30ab\u30b9\u30bf\u30e0\u30ea\u30b9\u30ca\u30fc\u306e\u8ffd\u52a0\n        auto&amp; listeners = testing::UnitTest::GetInstance()-&gt;listeners();\n        listeners.Append(new MetricsCollector);\n        listeners.Append(new PerformanceMonitor);\n\n        \/\/ \u30d5\u30a3\u30eb\u30bf\u306e\u8a2d\u5b9a\n        testing::GTEST_FLAG(filter) = \"*Performance*:*Integration*\";\n    }\n};<\/pre>\n\n\n\n<p>\u3053\u308c\u3089\u306e\u30d9\u30b9\u30c8\u30d7\u30e9\u30af\u30c6\u30a3\u30b9\u3092\u9069\u5207\u306b\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3067\u3001\u52b9\u7387\u7684\u306a\u30c6\u30b9\u30c8\u99c6\u52d5\u958b\u767a\u3092\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u898f\u6a21\u3084\u8981\u4ef6\u306b\u5fdc\u3058\u3066\u3001\u9069\u5207\u306a\u6226\u7565\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u91cd\u8981\u3067\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":[5],"tags":[],"class_list":{"0":"post-1614","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-cpp","7":"nothumb"},"_links":{"self":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1614","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=1614"}],"version-history":[{"count":1,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1614\/revisions"}],"predecessor-version":[{"id":1615,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=\/wp\/v2\/posts\/1614\/revisions\/1615"}],"wp:attachment":[{"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1614"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1614"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dexall.co.jp\/articles\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1614"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}