{"id":1488,"date":"2025-06-01T13:39:02","date_gmt":"2025-06-01T04:39:02","guid":{"rendered":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488"},"modified":"2025-06-01T17:59:50","modified_gmt":"2025-06-01T08:59:50","slug":"it%e9%96%8b%e7%99%ba%e5%b7%a5%e6%95%b0%e8%a6%8b%e7%a9%8d%e3%82%82%e3%82%8a%e6%89%8b%e6%b3%95-%e9%81%b8%e5%ae%9a%e6%94%af%e6%8f%b4%e3%83%84%e3%83%bc%e3%83%ab","status":"publish","type":"page","link":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488","title":{"rendered":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb"},"content":{"rendered":"\n    <header class=\"bg-white shadow-md sticky top-0 z-40\">\n        <div class=\"container mx-auto px-4 sm:px-6 lg:px-8\">\n            <div class=\"flex items-center justify-between h-16\">\n                <h1 class=\"text-xl md:text-2xl font-bold text-gray-800\">IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb<\/h1>\n                <nav class=\"hidden md:flex items-center space-x-2\">\n                    <a href=\"#explorer\" class=\"nav-button px-3 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-200\">\u624b\u6cd5\u6bd4\u8f03<\/a>\n                    <a href=\"#improving\" class=\"nav-button px-3 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-200\">\u7cbe\u5ea6\u5411\u4e0a\u7b56<\/a>\n                    <a href=\"#wizard\" class=\"nav-button px-3 py-2 rounded-md text-sm font-medium text-gray-700 hover:bg-gray-200\">\u624b\u6cd5\u30ac\u30a4\u30c9<\/a>\n                <\/nav>\n            <\/div>\n        <\/div>\n    <\/header>\n\n    <main class=\"container mx-auto p-4 sm:p-6 lg:p-8\">\n        <section id=\"intro\" class=\"mb-12 text-center\">\n            <h2 class=\"text-3xl font-bold text-gray-900 mb-4\">\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u3092\u898b\u3064\u3051\u308b<\/h2>\n            <p class=\"max-w-3xl mx-auto text-gray-600\">\n                IT\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5de5\u6570\u898b\u7a4d\u3082\u308a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6210\u529f\u306e\u9375\u3092\u63e1\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u300c\u4e07\u80fd\u306a\u300d\u624b\u6cd5\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u3053\u306e\u30c4\u30fc\u30eb\u306f\u3001\u69d8\u3005\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u306e\u9577\u6240\u30fb\u77ed\u6240\u3092\u5bfe\u8a71\u7684\u306b\u63a2\u308a\u3001\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u7279\u6027\u306b\u5408\u3063\u305f\u6700\u9069\u306a\u30a2\u30d7\u30ed\u30fc\u30c1\u3092\u9078\u629e\u3059\u308b\u305f\u3081\u306e\u624b\u52a9\u3051\u3092\u3057\u307e\u3059\u3002\n            <\/p>\n        <\/section>\n\n        <section id=\"explorer\" class=\"content-card bg-white p-6 rounded-2xl shadow-lg mb-12\">\n            <h3 class=\"text-2xl font-bold mb-6 text-center\">\u898b\u7a4d\u3082\u308a\u624b\u6cd5<\/h3>\n            <div class=\"grid grid-cols-1 md:grid-cols-3 gap-8\">\n                <div id=\"method-selector\" class=\"md:col-span-1 flex flex-col space-y-2\">\n                <\/div>\n\n                <div id=\"method-details\" class=\"md:col-span-2 bg-gray-50 p-6 rounded-lg\">\n                    <h4 id=\"details-title\" class=\"text-xl font-bold mb-4 text-gray-800\">\u624b\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044<\/h4>\n                    <div id=\"details-content\" class=\"fade-in\">\n                        <div class=\"chart-container mx-auto\">\n                            <canvas id=\"methodChart\"><\/canvas>\n                        <\/div>\n                        <div id=\"details-text\" class=\"mt-6\">\n                            <p class=\"text-gray-600\">\u5de6\u306e\u30ea\u30b9\u30c8\u304b\u3089\u624b\u6cd5\u3092\u9078\u629e\u3059\u308b\u3068\u3001\u3053\u3053\u306b\u8a73\u7d30\u304c\u8868\u793a\u3055\u308c\u307e\u3059\u3002\u5404\u624b\u6cd5\u306e\u7279\u6027\u3092\u30ec\u30fc\u30c0\u30fc\u30c1\u30e3\u30fc\u30c8\u3067\u8996\u899a\u7684\u306b\u6bd4\u8f03\u3057\u3001\u6982\u8981\u3084\u9577\u6240\u30fb\u77ed\u6240\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n                        <\/div>\n                    <\/div>\n                <\/div>\n            <\/div>\n        <\/section>\n\n        <section id=\"comparison\" class=\"content-card bg-white p-6 rounded-2xl shadow-lg mb-12\">\n            <h3 class=\"text-2xl font-bold mb-2 text-center\">\u6a2a\u65ad\u6bd4\u8f03\u30c4\u30fc\u30eb<\/h3>\n            <p class=\"text-center text-gray-600 mb-6\">\u6bd4\u8f03\u3057\u305f\u3044\u624b\u6cd5\u30922\u3064\u4ee5\u4e0a\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n            <div id=\"comparison-selector\" class=\"flex flex-wrap justify-center gap-2 mb-8\">\n            <\/div>\n            <div class=\"overflow-x-auto\">\n                <table class=\"min-w-full bg-white\">\n                    <thead id=\"comparison-head\">\n                    <\/thead>\n                    <tbody id=\"comparison-body\">\n                    <\/tbody>\n                <\/table>\n            <\/div>\n        <\/section>\n\n        <section id=\"improving\" class=\"content-card bg-white p-6 rounded-2xl shadow-lg mb-12\">\n            <h3 class=\"text-2xl font-bold mb-6 text-center\">\u898b\u7a4d\u3082\u308a\u7cbe\u5ea6\u3092\u5411\u4e0a\u3055\u305b\u308b\u306b\u306f<\/h3>\n            <div id=\"accordion-container\" class=\"space-y-4\">\n            <\/div>\n        <\/section>\n        \n        <section id=\"wizard\" class=\"content-card bg-gradient-to-r from-blue-500 to-indigo-600 text-white p-8 rounded-2xl shadow-xl\">\n            <div class=\"text-center mb-8\">\n                <h3 class=\"text-3xl font-bold\">\u304b\u3093\u305f\u3093\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u30ac\u30a4\u30c9<\/h3>\n                <p class=\"mt-2 opacity-90\">3\u3064\u306e\u8cea\u554f\u306b\u7b54\u3048\u3066\u3001\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u5408\u3063\u305f\u624b\u6cd5\u3092\u898b\u3064\u3051\u307e\u3057\u3087\u3046\u3002<\/p>\n            <\/div>\n            <div class=\"max-w-2xl mx-auto bg-white\/20 p-6 rounded-lg\">\n                <div id=\"wizard-questions\">\n                    <div class=\"mb-6\">\n                        <label class=\"block font-bold mb-2\">1. \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u73fe\u5728\u306e\u30d5\u30a7\u30fc\u30ba\u306f\uff1f<\/label>\n                        <div class=\"flex flex-col sm:flex-row gap-2\" id=\"q1\">\n                            <button data-value=\"initial\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u69cb\u60f3\u30fb\u521d\u671f\u8a08\u753b\u6bb5\u968e<\/button>\n                            <button data-value=\"detailed\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u8a73\u7d30\u8a08\u753b\u30fb\u8981\u4ef6\u78ba\u5b9a\u6bb5\u968e<\/button>\n                        <\/div>\n                    <\/div>\n                    <div class=\"mb-6\">\n                        <label class=\"block font-bold mb-2\">2. \u985e\u4f3c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u904e\u53bb\u30c7\u30fc\u30bf\u306f\u3042\u308a\u307e\u3059\u304b\uff1f<\/label>\n                        <div class=\"flex flex-col sm:flex-row gap-2\" id=\"q2\">\n                            <button data-value=\"none\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u307b\u3068\u3093\u3069\u306a\u3044<\/button>\n                            <button data-value=\"some\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u3042\u308b\u7a0b\u5ea6\u3042\u308b<\/button>\n                            <button data-value=\"rich\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u8c4a\u5bcc\u306b\u3042\u308b<\/button>\n                        <\/div>\n                    <\/div>\n                    <div class=\"mb-6\">\n                        <label class=\"block font-bold mb-2\">3. \u8981\u4ef6\u306e\u660e\u78ba\u3055\u306f\u3069\u306e\u7a0b\u5ea6\u3067\u3059\u304b\uff1f<\/label>\n                        <div class=\"flex flex-col sm:flex-row gap-2\" id=\"q3\">\n                            <button data-value=\"vague\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u66d6\u6627\u30fb\u5909\u52d5\u306e\u53ef\u80fd\u6027\u5927<\/button>\n                            <button data-value=\"clear\" class=\"wizard-option flex-1 p-3 rounded-md text-left bg-white\/20 hover:bg-white\/40 transition\">\u660e\u78ba\u30fb\u5b89\u5b9a\u7684<\/button>\n                        <\/div>\n                    <\/div>\n                <\/div>\n                <div id=\"wizard-result\" class=\"hidden mt-6 bg-white text-gray-800 p-6 rounded-lg shadow-inner\">\n                <\/div>\n            <\/div>\n        <\/section>\n    <\/main>\n\n    <footer class=\"text-center py-6 bg-gray-800 text-gray-400\">\n        <p>\u5358\u4e00\u306e\u5b8c\u74a7\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u306f\u5b58\u5728\u3057\u307e\u305b\u3093\u3002\u7d99\u7d9a\u7684\u306a\u30c7\u30fc\u30bf\u53ce\u96c6\u3068\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30a2\u30d7\u30ed\u30fc\u30c1\u304c\u6210\u529f\u3078\u306e\u9053\u3067\u3059\u3002<\/p>\n        <p class=\"text-sm mt-1\">&copy; 2025 IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb<\/p>\n    <\/footer>\n\n    <script>\n        const estimationData = {\n            methods: {\n                loc: {\n                    name: 'LOC\/SLOC\u6cd5 (\u30d7\u30ed\u30b0\u30e9\u30e0\u30b9\u30c6\u30c3\u30d7\u6cd5)',\n                    description: '\u958b\u767a\u3059\u308b\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u30bd\u30fc\u30b9\u30b3\u30fc\u30c9\u884c\u6570\uff08LOC\/SLOC\uff09\u3092\u4e88\u6e2c\u3057\u3001\u904e\u53bb\u306e\u751f\u7523\u6027\u30c7\u30fc\u30bf\uff08\u4f8b\uff1a\u884c\u6570\/\u4eba\u65e5\uff09\u3092\u57fa\u306b\u5de5\u6570\u3092\u898b\u7a4d\u3082\u308b\u624b\u6cd5\u3002',\n                    pros: ['\u6982\u5ff5\u304c\u5358\u7d14\u3067\u7406\u89e3\u3057\u3084\u3059\u3044', '\u5ba2\u89b3\u7684\u306a\u6307\u6a19\u3067\u3042\u308b\u3068\u3044\u3046\u8a8d\u8b58\u304c\u3042\u308b', '\u4fee\u6b63\u30fb\u4fdd\u5b88\u6848\u4ef6\u306b\u9069\u7528\u3057\u3084\u3059\u3044'],\n                    cons: ['\u8a00\u8a9e\u3084\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30b9\u30bf\u30a4\u30eb\u306b\u5927\u304d\u304f\u4f9d\u5b58\u3059\u308b', '\u65b0\u898f\u958b\u767a\u3067\u306e\u884c\u6570\u4e88\u6e2c\u304c\u975e\u5e38\u306b\u56f0\u96e3', '\u8a2d\u8a08\u3084\u30c6\u30b9\u30c8\u306a\u3069\u975e\u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u4f5c\u696d\u304c\u8003\u616e\u3055\u308c\u306a\u3044'],\n                    best_for: '\u8a00\u8a9e\u3084\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u304c\u7d71\u4e00\u3055\u308c\u305f\u4fdd\u5b88\u30fb\u6539\u4fee\u6848\u4ef6\u3001\u307e\u305f\u306f\u985e\u4f3c\u30b7\u30b9\u30c6\u30e0\u306e\u958b\u767a\u3067\u30b3\u30fc\u30c9\u91cf\u306e\u898b\u5f53\u304c\u3064\u304f\u5834\u5408\u3002',\n                    chart_data: [3, 2, 2, 4, 1]\n                },\n                fp: {\n                    name: 'FP\u6cd5 (\u30d5\u30a1\u30f3\u30af\u30b7\u30e7\u30f3\u30dd\u30a4\u30f3\u30c8\u6cd5)',\n                    description: '\u5229\u7528\u8005\u306b\u63d0\u4f9b\u3055\u308c\u308b\u6a5f\u80fd\uff08\u5165\u529b\u3001\u51fa\u529b\u3001\u554f\u3044\u5408\u308f\u305b\u7b49\uff09\u306e\u6570\u3068\u8907\u96d1\u6027\u304b\u3089\u3001\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u898f\u6a21\u3092\u6e2c\u5b9a\u3059\u308b\u624b\u6cd5\u3002\u8a00\u8a9e\u3084\u6280\u8853\u306b\u4f9d\u5b58\u3057\u306a\u3044\u3002',\n                    pros: ['\u8a00\u8a9e\u30fb\u6280\u8853\u306b\u975e\u4f9d\u5b58\u3067\u5ba2\u89b3\u6027\u304c\u9ad8\u3044', '\u8981\u4ef6\u5b9a\u7fa9\u6bb5\u968e\u3067\u306e\u65e9\u671f\u898b\u7a4d\u3082\u308a\u304c\u53ef\u80fd', '\u30e6\u30fc\u30b6\u30fc\u8996\u70b9\u306e\u6a5f\u80fd\u306b\u57fa\u3065\u3044\u3066\u3044\u308b'],\n                    cons: ['\u8a08\u6e2c\u306b\u5c02\u9580\u77e5\u8b58\u3068\u8a13\u7df4\u304c\u5fc5\u8981', '\u975e\u6a5f\u80fd\u8981\u4ef6\uff08\u6027\u80fd\u3001\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u7b49\uff09\u306e\u8a55\u4fa1\u304c\u4e0d\u5f97\u624b', '\u8907\u96d1\u6027\u306e\u8a55\u4fa1\u306b\u4e3b\u89b3\u304c\u5165\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b'],\n                    best_for: '\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3001\u7570\u306a\u308b\u6280\u8853\u9593\u3067\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6bd4\u8f03\u3001\u767a\u6ce8\u8005\u3068\u958b\u767a\u8005\u9593\u306e\u5ba2\u89b3\u7684\u306a\u898f\u6a21\u306e\u5408\u610f\u5f62\u6210\u304c\u5fc5\u8981\u306a\u5834\u5408\u3002',\n                    chart_data: [4, 4, 4, 2, 3]\n                },\n                cocomo: {\n                    name: 'COCOMO \/ COCOMO II',\n                    description: '\u30b3\u30fc\u30c9\u884c\u6570\uff08KLOC\uff09\u3092\u57fa\u672c\u5165\u529b\u3068\u3057\u3001\u591a\u6570\u306e\u30b3\u30b9\u30c8\u30c9\u30e9\u30a4\u30d0\u30fc\uff08\u8981\u54e1\u306e\u30b9\u30ad\u30eb\u3001\u8981\u6c42\u4fe1\u983c\u6027\u306a\u3069\uff09\u3067\u88dc\u6b63\u3092\u52a0\u3048\u3066\u5de5\u6570\u3092\u898b\u7a4d\u3082\u308b\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u30e2\u30c7\u30eb\u3002',\n                    pros: ['\u751f\u7523\u6027\u306b\u5f71\u97ff\u3059\u308b\u591a\u69d8\u306a\u8981\u56e0\u3092\u8003\u616e\u3067\u304d\u308b', '\u7d44\u7e54\u306e\u30c7\u30fc\u30bf\u3067\u8abf\u6574\uff08\u30ad\u30e3\u30ea\u30d6\u30ec\u30fc\u30b7\u30e7\u30f3\uff09\u3059\u308c\u3070\u9ad8\u7cbe\u5ea6', '\u69cb\u9020\u7684\u3067\u518d\u73fe\u6027\u304c\u3042\u308b'],\n                    cons: ['\u5165\u529b\u3068\u306a\u308b\u30b3\u30fc\u30c9\u884c\u6570\u306e\u6b63\u78ba\u306a\u4e88\u6e2c\u304c\u5fc5\u8981', '\u30e2\u30c7\u30eb\u304c\u8907\u96d1\u3067\u3001\u591a\u304f\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u8a55\u4fa1\u304c\u5fc5\u8981', '\u5341\u5206\u306a\u904e\u53bb\u30c7\u30fc\u30bf\u304c\u306a\u3044\u3068\u7cbe\u5ea6\u304c\u4f4e\u3044'],\n                    best_for: '\u4e2d\u301c\u5927\u898f\u6a21\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3001\u904e\u53bb\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30c7\u30fc\u30bf\u304c\u8c4a\u5bcc\u306b\u84c4\u7a4d\u3055\u308c\u3066\u304a\u308a\u3001\u7d71\u8a08\u7684\u306a\u6839\u62e0\u306b\u57fa\u3065\u3044\u305f\u8a73\u7d30\u306a\u898b\u7a4d\u3082\u308a\u304c\u6c42\u3081\u3089\u308c\u308b\u5834\u5408\u3002',\n                    chart_data: [5, 5, 5, 2, 4]\n                },\n                analogy: {\n                    name: '\u985e\u63a8\u6cd5 (\u30c8\u30c3\u30d7\u30c0\u30a6\u30f3\u898b\u7a4d)',\n                    description: '\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u3001\u904e\u53bb\u306b\u7d4c\u9a13\u3057\u305f\u985e\u4f3c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u6bd4\u8f03\u3057\u3001\u305d\u306e\u5b9f\u7e3e\u5024\u3092\u57fa\u306b\u5de5\u6570\u3092\u898b\u7a4d\u3082\u308b\u624b\u6cd5\u3002',\n                    pros: ['\u8a73\u7d30\u304c\u4e0d\u660e\u306a\u521d\u671f\u6bb5\u968e\u3067\u3082\u8fc5\u901f\u306b\u898b\u7a4d\u3082\u308c\u308b', '\u5b9f\u7e3e\u306b\u57fa\u3065\u304f\u305f\u3081\u76f4\u611f\u7684\u3067\u5206\u304b\u308a\u3084\u3059\u3044', '\u30b3\u30b9\u30c8\u3092\u304b\u3051\u305a\u306b\u6982\u7b97\u3092\u51fa\u305b\u308b'],\n                    cons: ['\u985e\u4f3c\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u9078\u5b9a\u3084\u5dee\u7570\u306e\u8abf\u6574\u304c\u4e3b\u89b3\u7684', '\u904e\u53bb\u30c7\u30fc\u30bf\u304c\u306a\u3044\u3068\u4f7f\u3048\u306a\u3044', '\u7cbe\u5ea6\u304c\u4f4e\u304f\u306a\u308a\u304c\u3061\u3067\u3001\u7d30\u90e8\u306e\u898b\u7a4d\u3082\u308a\u306b\u306f\u4e0d\u5411\u304d'],\n                    best_for: '\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u8d85\u521d\u671f\u6bb5\u968e\u3067\u3001\u8fc5\u901f\u306a\u6982\u7b97\u4e88\u7b97\u306e\u7b56\u5b9a\u304c\u5fc5\u8981\u306a\u5834\u5408\u3002\u4ed6\u624b\u6cd5\u306e\u7d50\u679c\u3092\u691c\u8a3c\u3059\u308b\u969b\u306e\u53c2\u8003\u5024\u3068\u3057\u3066\u3082\u6709\u52b9\u3002',\n                    chart_data: [2, 1, 2, 5, 1]\n                },\n                wbs: {\n                    name: 'WBS\u30d9\u30fc\u30b9\u6cd5 (\u30dc\u30c8\u30e0\u30a2\u30c3\u30d7\u6cd5)',\n                    description: '\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5168\u4f5c\u696d\u3092WBS\uff08\u4f5c\u696d\u5206\u89e3\u69cb\u6210\u56f3\uff09\u3067\u30bf\u30b9\u30af\u30ec\u30d9\u30eb\u307e\u3067\u8a73\u7d30\u306b\u5206\u89e3\u3057\u3001\u500b\u3005\u306e\u30bf\u30b9\u30af\u306e\u5de5\u6570\u3092\u7a4d\u307f\u4e0a\u3052\u3066\u5168\u4f53\u3092\u7b97\u51fa\u3059\u308b\u624b\u6cd5\u3002',\n                    pros: ['\u4f5c\u696d\u306e\u629c\u3051\u6f0f\u308c\u304c\u5c11\u306a\u304f\u3001\u975e\u5e38\u306b\u9ad8\u3044\u7cbe\u5ea6\u304c\u671f\u5f85\u3067\u304d\u308b', '\u8a73\u7d30\u306a\u8a08\u753b\u3084\u9032\u6357\u7ba1\u7406\u306b\u76f4\u7d50\u3059\u308b', '\u898b\u7a4d\u3082\u308a\u306e\u6839\u62e0\u304c\u660e\u78ba\u306b\u306a\u308b'],\n                    cons: ['\u898b\u7a4d\u3082\u308a\u4f5c\u696d\u306b\u591a\u304f\u306e\u6642\u9593\u304c\u304b\u304b\u308b', '\u8a73\u7d30\u306a\u8981\u4ef6\u5b9a\u7fa9\u304c\u5b8c\u4e86\u3057\u3066\u3044\u306a\u3044\u3068\u9069\u7528\u3067\u304d\u306a\u3044', '\u30bf\u30b9\u30af\u9593\u306e\u9023\u643a\u30fb\u7d71\u5408\u5de5\u6570\u3092\u898b\u843d\u3068\u3059\u30ea\u30b9\u30af\u304c\u3042\u308b'],\n                    best_for: '\u8981\u4ef6\u304c\u660e\u78ba\u306b\u56fa\u307e\u3063\u3066\u304a\u308a\u3001\u5951\u7d04\u524d\u306e\u6700\u7d42\u898b\u7a4d\u3082\u308a\u306a\u3069\u3001\u9ad8\u3044\u7cbe\u5ea6\u304c\u6c42\u3081\u3089\u308c\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u5f8c\u534a\u30d5\u30a7\u30fc\u30ba\u3002',\n                    chart_data: [5, 3, 3, 1, 5]\n                },\n                three_point: {\n                    name: '\u4e09\u70b9\u898b\u7a4d\u3082\u308a\u6cd5',\n                    description: '\u5404\u30bf\u30b9\u30af\u306b\u5bfe\u3057\u3066\u300c\u6700\u697d\u89b3\u5024\u300d\u300c\u6700\u78ba\u5024\u300d\u300c\u6700\u60b2\u89b3\u5024\u300d\u306e3\u3064\u306e\u5024\u3092\u60f3\u5b9a\u3057\u3001\u305d\u308c\u3089\u3092\u52a0\u91cd\u5e73\u5747\u3059\u308b\u3053\u3068\u3067\u4e0d\u78ba\u5b9f\u6027\u3092\u8003\u616e\u3057\u305f\u671f\u5f85\u5024\u3092\u7b97\u51fa\u3059\u308b\u624b\u6cd5\u3002',\n                    pros: ['\u30ea\u30b9\u30af\u3084\u4e0d\u78ba\u5b9f\u6027\u3092\u5b9a\u91cf\u7684\u306b\u898b\u7a4d\u3082\u308a\u306b\u53cd\u6620\u3067\u304d\u308b', '\u5358\u4e00\u306e\u5024\u3088\u308a\u3082\u73fe\u5b9f\u7684\u306a\u898b\u7a4d\u3082\u308a\u306b\u306a\u308b', '\u30c1\u30fc\u30e0\u306b\u6f5c\u5728\u7684\u306a\u30ea\u30b9\u30af\u3092\u610f\u8b58\u3055\u305b\u308b\u52b9\u679c\u304c\u3042\u308b'],\n                    cons: ['3\u3064\u306e\u5024\u3092\u51fa\u3059\u624b\u9593\u304c\u304b\u304b\u308b', '3\u3064\u306e\u5024\u81ea\u4f53\u306e\u8a2d\u5b9a\u304c\u4e3b\u89b3\u306b\u4f9d\u5b58\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308b', '\u30bf\u30b9\u30af\u306e\u5206\u89e3\u304c\u524d\u63d0\u3068\u306a\u308b'],\n                    best_for: '\u65b0\u898f\u6280\u8853\u306e\u5c0e\u5165\u306a\u3069\u3001\u4e0d\u78ba\u5b9f\u6027\u306e\u9ad8\u3044\u8981\u7d20\u3092\u542b\u3080\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3002WBS\u30d9\u30fc\u30b9\u6cd5\u3068\u7d44\u307f\u5408\u308f\u305b\u3066\u4f7f\u308f\u308c\u308b\u3053\u3068\u304c\u591a\u3044\u3002',\n                    chart_data: [4, 2, 3, 3, 3]\n                },\n                delphi: {\n                    name: '\u30c7\u30eb\u30d5\u30a1\u30a4\u6cd5',\n                    description: '\u8907\u6570\u306e\u5c02\u9580\u5bb6\u304c\u4e92\u3044\u306b\u5f71\u97ff\u3092\u4e0e\u3048\u306a\u3044\u3088\u3046\u3001\u533f\u540d\u3067\u72ec\u7acb\u306b\u898b\u7a4d\u3082\u308a\u3092\u63d0\u51fa\u3002\u305d\u306e\u7d50\u679c\u3092\u96c6\u8a08\u30fb\u30d5\u30a3\u30fc\u30c9\u30d0\u30c3\u30af\u3057\u3001\u610f\u898b\u304c\u53ce\u675f\u3059\u308b\u307e\u3067\u6570\u56de\u7e70\u308a\u8fd4\u3059\u624b\u6cd5\u3002',\n                    pros: ['\u6709\u529b\u8005\u306e\u610f\u898b\u306b\u6d41\u3055\u308c\u308b\u306a\u3069\u306e\u96c6\u56e3\u30d0\u30a4\u30a2\u30b9\u3092\u6392\u9664\u3067\u304d\u308b', '\u591a\u69d8\u306a\u5c02\u9580\u5bb6\u306e\u77e5\u898b\u3092\u7d50\u96c6\u3067\u304d\u308b', '\u904e\u53bb\u30c7\u30fc\u30bf\u304c\u306a\u3044\u672a\u77e5\u306e\u9818\u57df\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6709\u52b9'],\n                    cons: ['\u5c02\u9580\u5bb6\u306e\u62d8\u675f\u306a\u3069\u3001\u6642\u9593\u3068\u30b3\u30b9\u30c8\u304c\u304b\u304b\u308b', '\u30d5\u30a1\u30b7\u30ea\u30c6\u30fc\u30bf\u30fc\u306e\u30b9\u30ad\u30eb\u304c\u91cd\u8981', '\u5fc5\u305a\u3057\u3082\u610f\u898b\u304c\u53ce\u675f\u3059\u308b\u3068\u306f\u9650\u3089\u306a\u3044'],\n                    best_for: '\u524d\u4f8b\u306e\u306a\u3044\u9769\u65b0\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3084\u3001\u6975\u3081\u3066\u8907\u96d1\u3067\u4e0d\u78ba\u5b9f\u6027\u304c\u9ad8\u304f\u3001\u5ba2\u89b3\u7684\u306a\u5c02\u9580\u5bb6\u306e\u5408\u610f\u5f62\u6210\u304c\u91cd\u8981\u306a\u5834\u5408\u3002',\n                    chart_data: [4, 4, 5, 1, 2]\n                }\n            },\n            comparison_criteria: {\n                accuracy: '\u7cbe\u5ea6\u30dd\u30c6\u30f3\u30b7\u30e3\u30eb',\n                expertise: '\u5c02\u9580\u77e5\u8b58\u8981\u4ef6',\n                data_req: '\u30c7\u30fc\u30bf\u8981\u4ef6',\n                speed: '\u898b\u7a4d\u3082\u308a\u901f\u5ea6',\n                completeness: '\u7db2\u7f85\u6027'\n            },\n            accuracy_improvements: [\n                {\n                    title: '\u975e\u6a5f\u80fd\u8981\u4ef6\uff08NFR\uff09\u306e\u7ba1\u7406',\n                    content: '\u6027\u80fd\u3084\u30bb\u30ad\u30e5\u30ea\u30c6\u30a3\u3068\u3044\u3063\u305f\u975e\u6a5f\u80fd\u8981\u4ef6\u306f\u3001\u591a\u304f\u306e\u624b\u6cd5\u3067\u898b\u843d\u3068\u3055\u308c\u304c\u3061\u3067\u3059\u3002\u3053\u308c\u3089\u3092WBS\u3067\u5177\u4f53\u7684\u306a\u30bf\u30b9\u30af\u306b\u5206\u89e3\u3057\u305f\u308a\u3001FP\u6cd5\u3092\u62e1\u5f35\u3059\u308bSNAP\u306e\u3088\u3046\u306a\u624b\u6cd5\u3092\u7528\u3044\u305f\u308a\u3001COCOMO\u306e\u30b3\u30b9\u30c8\u30c9\u30e9\u30a4\u30d0\u30fc\u3067\u8003\u616e\u3059\u308b\u3053\u3068\u3067\u3001\u898b\u7a4d\u3082\u308a\u306e\u7db2\u7f85\u6027\u3092\u9ad8\u3081\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002'\n                },\n                {\n                    title: '\u4e3b\u89b3\u6027\u3068\u30d0\u30a4\u30a2\u30b9\u306e\u6291\u5236',\n                    content: '\u898b\u7a4d\u3082\u308a\u306b\u306f\u5e38\u306b\u4e3b\u89b3\u304c\u4f34\u3044\u307e\u3059\u3002\u8907\u6570\u4eba\u3067\u898b\u7a4d\u3082\u308a\u3092\u884c\u3063\u3066\u8b70\u8ad6\u3059\u308b\uff08\u30d7\u30e9\u30f3\u30cb\u30f3\u30b0\u30dd\u30fc\u30ab\u30fc\u306a\u3069\uff09\u3001\u30c7\u30eb\u30d5\u30a1\u30a4\u6cd5\u306e\u3088\u3046\u306b\u533f\u540d\u6027\u3092\u6d3b\u7528\u3059\u308b\u3001\u898b\u7a4d\u3082\u308a\u306e\u524d\u63d0\u6761\u4ef6\u3092\u660e\u78ba\u306b\u6587\u66f8\u5316\u3057\u3066\u30ec\u30d3\u30e5\u30fc\u3059\u308b\u3068\u3044\u3063\u305f\u30d7\u30ed\u30bb\u30b9\u304c\u3001\u500b\u4eba\u306e\u601d\u3044\u8fbc\u307f\u306b\u3088\u308b\u8aa4\u5dee\u3092\u6e1b\u3089\u3059\u306e\u306b\u6709\u52b9\u3067\u3059\u3002'\n                },\n                {\n                    title: '\u904e\u53bb\u30c7\u30fc\u30bf\u306e\u52b9\u679c\u7684\u6d3b\u7528',\n                    content: '\u30c7\u30fc\u30bf\u306f\u898b\u7a4d\u3082\u308a\u306e\u751f\u547d\u7dda\u3067\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5b8c\u4e86\u5f8c\u306b\u5b9f\u7e3e\u5de5\u6570\u3084\u898f\u6a21\uff08LOC, FP\uff09\u3092\u4f53\u7cfb\u7684\u306b\u53ce\u96c6\u30fb\u84c4\u7a4d\u3059\u308b\u7fd2\u6163\u304c\u91cd\u8981\u3067\u3059\u3002COCOMO\u306a\u3069\u306e\u30e2\u30c7\u30eb\u306f\u3001\u3053\u306e\u84c4\u7a4d\u3055\u308c\u305f\u81ea\u7d44\u7e54\u306e\u30c7\u30fc\u30bf\u3067\u8abf\u6574\uff08\u30ad\u30e3\u30ea\u30d6\u30ec\u30fc\u30b7\u30e7\u30f3\uff09\u3059\u308b\u3053\u3068\u3067\u3001\u305d\u306e\u7cbe\u5ea6\u3092\u5287\u7684\u306b\u5411\u4e0a\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002'\n                },\n                {\n                    title: '\u30cf\u30a4\u30d6\u30ea\u30c3\u30c9\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u63a1\u7528',\n                    content: '\u5358\u4e00\u306e\u624b\u6cd5\u306b\u56fa\u57f7\u305b\u305a\u3001\u8907\u6570\u306e\u624b\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u306e\u304c\u6700\u3082\u73fe\u5b9f\u7684\u3067\u5805\u7262\u306a\u6226\u7565\u3067\u3059\u3002\u4f8b\u3048\u3070\u3001<div class=\"mt-4 p-4 bg-gray-100 rounded-lg text-sm text-gray-700\"><p class=\"font-semibold\">\u521d\u671f\u6bb5\u968e\uff1a<\/p><span class=\"font-bold text-indigo-600\">\u985e\u63a8\u6cd5<\/span>\u3067\u5927\u67a0\u306e\u4e88\u7b97\u3092\u78ba\u4fdd<br>\u25bc<br><p class=\"font-semibold mt-2\">\u8981\u4ef6\u5b9a\u7fa9\u5f8c\uff1a<\/p><span class=\"font-bold text-indigo-600\">FP\u6cd5<\/span>\u3067\u6a5f\u80fd\u898f\u6a21\u3092\u5ba2\u89b3\u7684\u306b\u6e2c\u5b9a<br>\u25bc<br><p class=\"font-semibold mt-2\">\u8a73\u7d30\u8a2d\u8a08\u5f8c\uff1a<\/p><span class=\"font-bold text-indigo-600\">WBS\u30d9\u30fc\u30b9\u6cd5<\/span>\u3067\u30bf\u30b9\u30af\u3092\u7a4d\u307f\u4e0a\u3052\u3001<span class=\"font-bold text-indigo-600\">\u4e09\u70b9\u898b\u7a4d\u3082\u308a\u6cd5<\/span>\u3067\u4e0d\u78ba\u5b9f\u6027\u3092\u52a0\u5473\u3059\u308b<\/div>\u3068\u3044\u3046\u3088\u3046\u306b\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30d5\u30a7\u30fc\u30ba\u306b\u5fdc\u3058\u3066\u624b\u6cd5\u3092\u4f7f\u3044\u5206\u3051\u308b\u3053\u3068\u3067\u3001\u305d\u308c\u305e\u308c\u306e\u9577\u6240\u3092\u6d3b\u304b\u3057\u3001\u77ed\u6240\u3092\u88dc\u3046\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002'\n                }\n            ]\n        };\n\n        let myChart;\n        let selectedWizardOptions = { q1: null, q2: null, q3: null };\n\n        document.addEventListener('DOMContentLoaded', () => {\n            const methodSelector = document.getElementById('method-selector');\n            const comparisonSelector = document.getElementById('comparison-selector');\n            const accordionContainer = document.getElementById('accordion-container');\n            \n            Object.keys(estimationData.methods).forEach(key => {\n                const method = estimationData.methods[key];\n                \n                const button = document.createElement('button');\n                button.className = 'method-button w-full text-left p-4 rounded-lg bg-white hover:bg-blue-100 border border-gray-200 focus:outline-none focus:ring-2 focus:ring-blue-500 transition';\n                button.textContent = method.name;\n                button.dataset.method = key;\n                methodSelector.appendChild(button);\n\n                const checkboxLabel = document.createElement('label');\n                checkboxLabel.className = 'flex items-center space-x-2 px-3 py-2 bg-gray-100 rounded-md cursor-pointer hover:bg-gray-200 transition';\n                const checkbox = document.createElement('input');\n                checkbox.type = 'checkbox';\n                checkbox.className = 'comparison-checkbox rounded text-blue-500 focus:ring-blue-500';\n                checkbox.dataset.method = key;\n                checkboxLabel.appendChild(checkbox);\n                const span = document.createElement('span');\n                span.textContent = method.name;\n                checkboxLabel.appendChild(span);\n                comparisonSelector.appendChild(checkboxLabel);\n            });\n\n            estimationData.accuracy_improvements.forEach((item, index) => {\n                const wrapper = document.createElement('div');\n                wrapper.className = 'border border-gray-200 rounded-lg';\n                \n                const button = document.createElement('button');\n                button.className = 'accordion-button w-full flex justify-between items-center p-4 text-left font-medium text-gray-700 hover:bg-gray-100 focus:outline-none';\n                button.innerHTML = `<span>${item.title}<\/span><svg class=\"w-5 h-5 transform transition-transform\" fill=\"none\" stroke=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M19 9l-7 7-7-7\"><\/path><\/svg>`;\n                \n                const content = document.createElement('div');\n                content.className = 'accordion-content px-4 bg-gray-50 text-gray-600';\n                content.innerHTML = `<p>${item.content}<\/p>`;\n\n                wrapper.appendChild(button);\n                wrapper.appendChild(content);\n                accordionContainer.appendChild(wrapper);\n\n                button.addEventListener('click', () => {\n                    const isOpen = content.classList.contains('open');\n                    document.querySelectorAll('.accordion-content').forEach(c => c.classList.remove('open'));\n                    document.querySelectorAll('.accordion-button svg').forEach(svg => svg.classList.remove('rotate-180'));\n                    if (!isOpen) {\n                        content.classList.add('open');\n                        button.querySelector('svg').classList.add('rotate-180');\n                    }\n                });\n            });\n\n            const methodButtons = document.querySelectorAll('.method-button');\n            methodButtons.forEach(button => {\n                button.addEventListener('click', () => {\n                    methodButtons.forEach(btn => btn.classList.remove('bg-blue-100', 'border-blue-500'));\n                    button.classList.add('bg-blue-100', 'border-blue-500');\n                    displayMethodDetails(button.dataset.method);\n                });\n            });\n\n            document.querySelectorAll('.comparison-checkbox').forEach(checkbox => {\n                checkbox.addEventListener('change', updateComparisonTable);\n            });\n            \n            document.querySelectorAll('.wizard-option').forEach(button => {\n                button.addEventListener('click', handleWizardSelection);\n            });\n            \n            document.querySelectorAll('a[href^=\"#\"]').forEach(anchor => {\n                anchor.addEventListener('click', function (e) {\n                    e.preventDefault();\n                    document.querySelector(this.getAttribute('href')).scrollIntoView({\n                        behavior: 'smooth'\n                    });\n                });\n            });\n\n            initializeChart();\n            updateComparisonTable();\n        });\n\n        function initializeChart() {\n            const ctx = document.getElementById('methodChart').getContext('2d');\n            const labels = Object.values(estimationData.comparison_criteria);\n            myChart = new Chart(ctx, {\n                type: 'radar',\n                data: {\n                    labels: labels,\n                    datasets: [{\n                        label: '\u7279\u6027\u8a55\u4fa1',\n                        data: [3, 3, 3, 3, 3], \n                        fill: true,\n                        backgroundColor: 'rgba(54, 162, 235, 0.2)',\n                        borderColor: 'rgb(54, 162, 235)',\n                        pointBackgroundColor: 'rgb(54, 162, 235)',\n                        pointBorderColor: '#fff',\n                        pointHoverBackgroundColor: '#fff',\n                        pointHoverBorderColor: 'rgb(54, 162, 235)'\n                    }]\n                },\n                options: {\n                    maintainAspectRatio: false,\n                    elements: {\n                        line: {\n                            borderWidth: 3\n                        }\n                    },\n                    scales: {\n                        r: {\n                            angleLines: { display: true },\n                            suggestedMin: 0,\n                            suggestedMax: 5,\n                            pointLabels: {\n                                font: {\n                                    size: 12\n                                }\n                            },\n                            ticks: {\n                                stepSize: 1,\n                                display: false\n                            }\n                        }\n                    },\n                    plugins: {\n                        legend: {\n                            display: false\n                        }\n                    }\n                }\n            });\n        }\n        \n        function displayMethodDetails(methodKey) {\n            const method = estimationData.methods[methodKey];\n            const detailsTitle = document.getElementById('details-title');\n            const detailsText = document.getElementById('details-text');\n            const contentContainer = document.getElementById('details-content');\n            \n            contentContainer.classList.remove('fade-in');\n            void contentContainer.offsetWidth; \n            contentContainer.classList.add('fade-in');\n\n            detailsTitle.textContent = method.name;\n\n            let prosHtml = method.pros.map(p => `<li class=\"flex items-start\"><span class=\"text-green-500 mr-2\">\u2713<\/span><span>${p}<\/span><\/li>`).join('');\n            let consHtml = method.cons.map(c => `<li class=\"flex items-start\"><span class=\"text-red-500 mr-2\">\u2717<\/span><span>${c}<\/span><\/li>`).join('');\n\n            detailsText.innerHTML = `\n                <p class=\"mb-4 text-gray-600\">${method.description}<\/p>\n                <div class=\"grid grid-cols-1 sm:grid-cols-2 gap-4 text-sm\">\n                    <div class=\"bg-white p-4 rounded-lg border\">\n                        <h5 class=\"font-bold mb-2 text-green-600\">\u9577\u6240<\/h5>\n                        <ul class=\"space-y-1\">${prosHtml}<\/ul>\n                    <\/div>\n                    <div class=\"bg-white p-4 rounded-lg border\">\n                        <h5 class=\"font-bold mb-2 text-red-600\">\u77ed\u6240<\/h5>\n                        <ul class=\"space-y-1\">${consHtml}<\/ul>\n                    <\/div>\n                <\/div>\n                <div class=\"mt-4 bg-blue-50 p-4 rounded-lg border border-blue-200\">\n                    <h5 class=\"font-bold mb-1 text-blue-800\">\u6700\u9069\u306a\u9069\u7528\u5834\u9762<\/h5>\n                    <p class=\"text-sm text-blue-700\">${method.best_for}<\/p>\n                <\/div>\n            `;\n\n            myChart.data.datasets[0].data = method.chart_data;\n            myChart.data.datasets[0].label = method.name;\n            myChart.update();\n        }\n\n        function updateComparisonTable() {\n            const selectedMethods = [];\n            document.querySelectorAll('.comparison-checkbox:checked').forEach(checkbox => {\n                selectedMethods.push(checkbox.dataset.method);\n            });\n\n            const head = document.getElementById('comparison-head');\n            const body = document.getElementById('comparison-body');\n\n            head.innerHTML = '';\n            body.innerHTML = '';\n\n            if (selectedMethods.length === 0) {\n                body.innerHTML = '<tr><td class=\"p-4 text-center text-gray-500\">\u6bd4\u8f03\u3059\u308b\u624b\u6cd5\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/td><\/tr>';\n                return;\n            }\n\n            const headerRow = document.createElement('tr');\n            headerRow.className = 'bg-gray-100';\n            headerRow.innerHTML = '<th class=\"p-3 text-left font-medium text-gray-600\">\u6bd4\u8f03\u9805\u76ee<\/th>';\n            selectedMethods.forEach(key => {\n                headerRow.innerHTML += `<th class=\"p-3 text-left font-medium text-gray-800\">${estimationData.methods[key].name}<\/th>`;\n            });\n            head.appendChild(headerRow);\n            \n            const criteria = [\n                { key: 'description', name: '\u6982\u8981' },\n                { key: 'best_for', name: '\u6700\u9069\u306a\u9069\u7528\u5834\u9762' },\n                { key: 'pros', name: '\u9577\u6240' },\n                { key: 'cons', name: '\u77ed\u6240' }\n            ];\n\n            criteria.forEach(crit => {\n                const row = document.createElement('tr');\n                row.className = 'border-b border-gray-200';\n                row.innerHTML = `<td class=\"p-3 font-medium align-top bg-gray-50\">${crit.name}<\/td>`;\n                selectedMethods.forEach(methodKey => {\n                    let cellContent = estimationData.methods[methodKey][crit.key];\n                    if (Array.isArray(cellContent)) {\n                        cellContent = `<ul class=\"list-disc list-inside space-y-1\">${cellContent.map(item => `<li>${item}<\/li>`).join('')}<\/ul>`;\n                    }\n                    row.innerHTML += `<td class=\"p-3 align-top text-sm\">${cellContent}<\/td>`;\n                });\n                body.appendChild(row);\n            });\n        }\n        \n        function handleWizardSelection(event) {\n            const button = event.currentTarget;\n            const group = button.parentElement.id;\n            const value = button.dataset.value;\n            \n            selectedWizardOptions[group] = value;\n            \n            button.parentElement.querySelectorAll('.wizard-option').forEach(btn => {\n                btn.classList.remove('bg-white\/40', 'ring-2', 'ring-white');\n            });\n            button.classList.add('bg-white\/40', 'ring-2', 'ring-white');\n\n            if (Object.values(selectedWizardOptions).every(v => v !== null)) {\n                showWizardResult();\n            }\n        }\n\n        function showWizardResult() {\n            const { q1, q2, q3 } = selectedWizardOptions;\n            let recommendations = [];\n\n            if (q1 === 'initial') {\n                if (q2 === 'rich' || q2 === 'some') {\n                    recommendations.push({key: 'analogy', reason: '\u521d\u671f\u6bb5\u968e\u3067\u904e\u53bb\u30c7\u30fc\u30bf\u304c\u3042\u308b\u305f\u3081\u3001\u8fc5\u901f\u306a\u6982\u7b97\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002'});\n                } else {\n                     recommendations.push({key: 'fp', reason: '\u521d\u671f\u3067\u3082\u6a5f\u80fd\u8981\u4ef6\u304b\u3089\u898f\u6a21\u3092\u6e2c\u308c\u3001\u904e\u53bb\u30c7\u30fc\u30bf\u3078\u306e\u4f9d\u5b58\u304c\u5c11\u306a\u3044\u3067\u3059\u3002'});\n                }\n                if (q3 === 'vague') {\n                    recommendations.push({key: 'delphi', reason: '\u8981\u4ef6\u304c\u66d6\u6627\u306a\u5834\u5408\u3001\u5c02\u9580\u5bb6\u306e\u77e5\u898b\u3092\u96c6\u7d04\u3059\u308b\u306e\u304c\u6709\u52b9\u3067\u3059\u3002'});\n                }\n            } else { \/\/ detailed\n                if (q3 === 'clear') {\n                     recommendations.push({key: 'wbs', reason: '\u8981\u4ef6\u304c\u660e\u78ba\u306a\u305f\u3081\u3001\u9ad8\u7cbe\u5ea6\u306a\u7a4d\u307f\u4e0a\u3052\u5f0f\u304c\u6700\u3082\u4fe1\u983c\u3067\u304d\u307e\u3059\u3002'});\n                     recommendations.push({key: 'fp', reason: '\u660e\u78ba\u306a\u6a5f\u80fd\u8981\u4ef6\u304b\u3089\u5ba2\u89b3\u7684\u306a\u898f\u6a21\u3092\u7b97\u51fa\u3057\u3001WBS\u306e\u88cf\u4ed8\u3051\u3068\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002'});\n                } else { \/\/ vague\n                     recommendations.push({key: 'three_point', reason: '\u8981\u4ef6\u306b\u4e0d\u78ba\u5b9f\u6027\u304c\u6b8b\u308b\u305f\u3081\u3001\u30ea\u30b9\u30af\u3092\u8003\u616e\u3057\u305f\u898b\u7a4d\u3082\u308a\u304c\u6709\u52b9\u3067\u3059\u3002'});\n                }\n                if (q2 === 'rich') {\n                    recommendations.push({key: 'cocomo', reason: '\u8c4a\u5bcc\u306a\u30c7\u30fc\u30bf\u3068\u8a73\u7d30\u306a\u8981\u4ef6\u304c\u3042\u308c\u3070\u3001\u9ad8\u7cbe\u5ea6\u306a\u30e2\u30c7\u30eb\u3092\u9069\u7528\u3067\u304d\u307e\u3059\u3002'});\n                }\n            }\n            \n            let uniqueRecs = [...new Map(recommendations.map(item => [item.key, item])).values()].slice(0, 2);\n\n            const resultDiv = document.getElementById('wizard-result');\n            let resultHTML = '<h4 class=\"text-xl font-bold mb-4\">\u3042\u306a\u305f\u3078\u306e\u304a\u3059\u3059\u3081\u624b\u6cd5<\/h4>';\n            if (uniqueRecs.length > 0) {\n                 resultHTML += '<ul class=\"space-y-4\">';\n                 uniqueRecs.forEach(rec => {\n                     const method = estimationData.methods[rec.key];\n                     resultHTML += `<li class=\"p-4 bg-gray-100 rounded\">\n                                        <p class=\"font-bold text-lg text-indigo-600\">${method.name}<\/p>\n                                        <p class=\"text-sm mt-1\">${rec.reason}<\/p>\n                                    <\/li>`;\n                 });\n                 resultHTML += '<\/ul>';\n            } else {\n                resultHTML += '<p>\u6761\u4ef6\u306b\u5b8c\u5168\u306b\u4e00\u81f4\u3059\u308b\u6700\u9069\u306a\u624b\u6cd5\u306f\u4e00\u3064\u306b\u7d5e\u308c\u307e\u305b\u3093\u3002\u8907\u6570\u306e\u624b\u6cd5\u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u3092\u691c\u8a0e\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>';\n            }\n\n            resultDiv.innerHTML = resultHTML;\n            resultDiv.classList.remove('hidden');\n            resultDiv.classList.add('fade-in');\n        }\n\n    <\/script>\n","protected":false},"excerpt":{"rendered":"<p>IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb \u624b\u6cd5\u6bd4\u8f03 \u7cbe\u5ea6\u5411\u4e0a\u7b56 \u624b\u6cd5\u30ac\u30a4\u30c9 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u3092\u898b\u3064\u3051\u308b IT\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5de5\u6570\u898b\u7a4d\u3082\u308a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6210\u529f\u306e\u9375\u3092\u63e1\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u300c\u4e07\u80fd\u306a\u300d\u624b\u6cd5\u306f\u5b58\u5728 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"wp-custom-template-svg","meta":{"inline_featured_image":false,"footnotes":""},"class_list":["post-1488","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18\" \/>\n<meta property=\"og:description\" content=\"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb \u624b\u6cd5\u6bd4\u8f03 \u7cbe\u5ea6\u5411\u4e0a\u7b56 \u624b\u6cd5\u30ac\u30a4\u30c9 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u3092\u898b\u3064\u3051\u308b IT\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5de5\u6570\u898b\u7a4d\u3082\u308a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6210\u529f\u306e\u9375\u3092\u63e1\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u300c\u4e07\u80fd\u306a\u300d\u624b\u6cd5\u306f\u5b58\u5728 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488\" \/>\n<meta property=\"og:site_name\" content=\"\u306e\u3093\u304d\u306e\u65e5\u8a18\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-01T08:59:50+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1004\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?page_id=1488\",\"url\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?page_id=1488\",\"name\":\"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/#website\"},\"datePublished\":\"2025-06-01T04:39:02+00:00\",\"dateModified\":\"2025-06-01T08:59:50+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?page_id=1488#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?page_id=1488\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?page_id=1488#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/#website\",\"url\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/\",\"name\":\"\u306e\u3093\u304d\u306e\u65e5\u8a18\",\"description\":\"\u65e5\u5e38\u3067\u3001\u601d\u3063\u305f\u4e8b\u3001\u611f\u3058\u305f\u4e8b\u3092\u8a18\u9332\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/#\\\/schema\\\/person\\\/a54ab33d75d0ea64f384d5277bd56ad7\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.nonki.coffeebittersweet.net\\\/#\\\/schema\\\/person\\\/a54ab33d75d0ea64f384d5277bd56ad7\",\"name\":\"cbs@nonki\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\/\\/www.nonki.coffeebittersweet.net\\/wp-content\\/uploads\\/2025\\/06\\/20250524-02.png\",\"url\":\"https:\\/\\/www.nonki.coffeebittersweet.net\\/wp-content\\/uploads\\/2025\\/06\\/20250524-02.png\",\"contentUrl\":\"https:\\/\\/www.nonki.coffeebittersweet.net\\/wp-content\\/uploads\\/2025\\/06\\/20250524-02.png\",\"width\":1004,\"height\":1024,\"caption\":\"cbs@nonki\"},\"logo\":{\"@id\":\"https:\\/\\/www.nonki.coffeebittersweet.net\\/wp-content\\/uploads\\/2025\\/06\\/20250524-02.png\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488","og_locale":"ja_JP","og_type":"article","og_title":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18","og_description":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb \u624b\u6cd5\u6bd4\u8f03 \u7cbe\u5ea6\u5411\u4e0a\u7b56 \u624b\u6cd5\u30ac\u30a4\u30c9 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u6700\u9069\u306a\u898b\u7a4d\u3082\u308a\u624b\u6cd5\u3092\u898b\u3064\u3051\u308b IT\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u306b\u304a\u3051\u308b\u5de5\u6570\u898b\u7a4d\u3082\u308a\u306f\u3001\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u6210\u529f\u306e\u9375\u3092\u63e1\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u300c\u4e07\u80fd\u306a\u300d\u624b\u6cd5\u306f\u5b58\u5728 [&hellip;]","og_url":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488","og_site_name":"\u306e\u3093\u304d\u306e\u65e5\u8a18","article_modified_time":"2025-06-01T08:59:50+00:00","og_image":[{"url":"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png","width":1004,"height":1024,"type":"image\/png"}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488","url":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488","name":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb - \u306e\u3093\u304d\u306e\u65e5\u8a18","isPartOf":{"@id":"https:\/\/www.nonki.coffeebittersweet.net\/#website"},"datePublished":"2025-06-01T04:39:02+00:00","dateModified":"2025-06-01T08:59:50+00:00","breadcrumb":{"@id":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.nonki.coffeebittersweet.net\/?page_id=1488#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/www.nonki.coffeebittersweet.net\/"},{"@type":"ListItem","position":2,"name":"IT\u958b\u767a\u5de5\u6570\u898b\u7a4d\u3082\u308a\u624b\u6cd5 \u9078\u5b9a\u652f\u63f4\u30c4\u30fc\u30eb"}]},{"@type":"WebSite","@id":"https:\/\/www.nonki.coffeebittersweet.net\/#website","url":"https:\/\/www.nonki.coffeebittersweet.net\/","name":"\u306e\u3093\u304d\u306e\u65e5\u8a18","description":"\u65e5\u5e38\u3067\u3001\u601d\u3063\u305f\u4e8b\u3001\u611f\u3058\u305f\u4e8b\u3092\u8a18\u9332\u3057\u3066\u3044\u3053\u3046\u3068\u601d\u3044\u307e\u3059\u3002","publisher":{"@id":"https:\/\/www.nonki.coffeebittersweet.net\/#\/schema\/person\/a54ab33d75d0ea64f384d5277bd56ad7"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.nonki.coffeebittersweet.net\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":["Person","Organization"],"@id":"https:\/\/www.nonki.coffeebittersweet.net\/#\/schema\/person\/a54ab33d75d0ea64f384d5277bd56ad7","name":"cbs@nonki","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png","url":"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png","contentUrl":"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png","width":1004,"height":1024,"caption":"cbs@nonki"},"logo":{"@id":"https:\/\/mlla7u9wd2ab.i.optimole.com\/w:auto\/h:auto\/q:mauto\/ig:avif\/https:\/\/www.nonki.coffeebittersweet.net\/wp-content\/uploads\/2025\/06\/20250524-02.png"}}]}},"_links":{"self":[{"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/pages\/1488","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1488"}],"version-history":[{"count":2,"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/pages\/1488\/revisions"}],"predecessor-version":[{"id":1490,"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=\/wp\/v2\/pages\/1488\/revisions\/1490"}],"wp:attachment":[{"href":"https:\/\/www.nonki.coffeebittersweet.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1488"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}