{"id":22682,"date":"2025-11-07T14:10:31","date_gmt":"2025-11-07T14:10:31","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=22682"},"modified":"2025-11-07T14:10:31","modified_gmt":"2025-11-07T14:10:31","slug":"uv%e3%81%a7%e8%a7%a3%e6%b1%ba%ef%bc%81python%e3%83%a2%e3%83%8e%e3%83%ac%e3%83%9d%e3%81%ae%e4%be%9d%e5%ad%98%e9%96%a2%e4%bf%82%e7%ae%a1%e7%90%86%e3%80%902025%e5%b9%b4%e7%89%88%e3%80%91-sios-tech-lab","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/22682\/","title":{"rendered":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab"},"content":{"rendered":"\n<\/p>\n<div id=\"\">\n<h2 class=\"wp-block-heading\"><span id=\"hajimeni\">\u306f\u3058\u3081\u306b<\/span><\/h2>\n<p>\u3069\u3082\uff01\u6700\u8fd1\u307e\u305f\u3067\u3059\u306d\u3001\u65b0\u3057\u3044\u691c\u8a3c\u3092\u9032\u3081\u308b\u305f\u3081\u306b\u74b0\u5883\u69cb\u7bc9\u3092\u3064\u3089\u3064\u3089\u3068\u3084\u3063\u3066\u3044\u308b\u9f8d\u3061\u3083\u3093\u3067\u3059\u3002AI\u958b\u767a\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306e\u74b0\u5883\u69cb\u7bc9\u3092\u691c\u8a3c\u3057\u3066\u3044\u308b\u3093\u3067\u3059\u304c\u3001\u4eca\u56de\u306f<strong>uv\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u6a5f\u80fd<\/strong>\u3092\u4f7f\u3063\u305f\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u306b\u3064\u3044\u3066\u5171\u6709\u3057\u307e\u3059\u3002<\/p>\n<p>\u524d\u56de\u306e\u8a18\u4e8b\u300c<a target=\"_blank\" href=\"https:\/\/tech-lab.sios.jp\/archives\/50142\" target=\"_blank\" rel=\"noopener\" title=\"\">uv + Ruff + mypy\u3067\u69cb\u7bc9\u3059\u308b\u8d85\u8efd\u91cfPython\u958b\u767a\u74b0\u5883<\/a>\u300d\u3067\u306f\u3001\u5358\u4e00\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u958b\u767a\u74b0\u5883\u6700\u9069\u5316\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002\u4eca\u56de\u306f\u3001\u305d\u306e\u5ef6\u9577\u3068\u3057\u3066<strong>\u8907\u6570\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30921\u3064\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u3067\u7ba1\u7406\u3059\u308b\u30e2\u30ce\u30ec\u30dd\u74b0\u5883<\/strong>\u3092\u69cb\u7bc9\u3057\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"kono_ji_shidewakarukoto\">\u3053\u306e\u8a18\u4e8b\u3067\u308f\u304b\u308b\u3053\u3068<\/span><\/h2>\n<p>Python\u3067\u30e2\u30ce\u30ec\u30dd\u3092\u7ba1\u7406\u3059\u308b\u306e\u306f\u5927\u5909\u3067\u3059\u3088\u306d\u3002requirements.txt\u306e\u624b\u52d5\u7ba1\u7406\u3001\u8907\u6570venv\u306e\u74b0\u5883\u5207\u308a\u66ff\u3048\u3001AI\u958b\u767a\u30c4\u30fc\u30eb\u3068\u306e\u76f8\u6027\u2026\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001<strong>uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9<\/strong>\u3092\u4f7f\u3063\u3066\u3001\u3053\u308c\u3089\u306e\u8ab2\u984c\u3092\u300c\u307e\u308b\u3063\u3068\u89e3\u6c7a\u300d\u3059\u308b\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002Node.js\u306epackage.json\u306e\u3088\u3046\u306a\u81ea\u52d5\u7ba1\u7406\u304c\u3001Python\u3067\u3082\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"kono_ji_shino_liure\">\u3053\u306e\u8a18\u4e8b\u306e\u6d41\u308c<\/span><\/h3>\n<ol class=\"wp-block-list is-style-sango-list-main-color\">\n<li>\u5f93\u6765\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\u306e\u8ab2\u984c<\/li>\n<li>uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u3088\u308b\u89e3\u6c7a<\/li>\n<li>\u5b9f\u88c5\u30ac\u30a4\u30c9\uff0810\u5206\u3067\u69cb\u7bc9\uff09<\/li>\n<li>\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b\uff08GA4\u5206\u6790\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\uff09<\/li>\n<\/ol>\n<p class=\"is-style-sango-paragraph-memo-alt\"><strong>**\u6ce8**<\/strong>: \u672c\u8a18\u4e8b\u3067\u306fuv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u7d39\u4ecb\u3057\u307e\u3059\u304c\u3001Poetry\u3001PDM\u3001 Hatch\u306a\u3069\u3067\u3082\u540c\u69d8\u306e\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u3092\u69cb\u7bc9\u3067\u304d\u307e\u3059\u3002\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e \u72b6\u6cc1\uff08\u65e2\u5b58\u30c4\u30fc\u30eb\u3001\u30c1\u30fc\u30e0\u306e\u6163\u308c\u3001\u5b89\u5b9a\u6027\u8981\u4ef6\u306a\u3069\uff09\u306b\u5fdc\u3058\u3066 \u9069\u5207\u306a\u30c4\u30fc\u30eb\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044\u3002uv\u306f2024\u5e74\u767b\u5834\u306e\u65b0\u3057\u3044\u30c4\u30fc\u30eb\u3067\u3001 \u7279\u306b\u901f\u5ea6\u3092\u91cd\u8996\u3059\u308b\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u9069\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"pip_requirementstxt_no_gen_ben_dena_wen_ti\">pip + requirements.txt \u306e\u6839\u672c\u7684\u306a\u554f\u984c<\/span><\/h2>\n<p>Python\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u3067\u3001\u3053\u3093\u306a\u7d4c\u9a13\u306f\u3042\u308a\u307e\u305b\u3093\u304b\uff1f<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># \u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u3082...\npip install flask\n\n# \u2192 requirements.txt \u306f\u66f4\u65b0\u3055\u308c\u306a\u3044\uff01\n# \u2192 \u624b\u52d5\u3067\u8ffd\u52a0\u3059\u308b\u304b\u3001pip freeze \u3092\u4f7f\u3046\u5fc5\u8981\u304c\u3042\u308b<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u304c\u3001Python\u3068Node.js\u306e<strong>\u6700\u5927\u306e\u9055\u3044<\/strong>\u306a\u3093\u3067\u3059\u3088\u306d\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"Nodejstono_bi_jiao\">Node.js\u3068\u306e\u6bd4\u8f03<\/span><\/h3>\n<div id=\"id-1e3391ff-e017-418b-9e3a-a0e84b9366cc\">\n<figure class=\"wp-block-table\">\n<div class=\"s_table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>\u9805\u76ee<\/th>\n<th>pip + requirements.txt<\/th>\n<th>npm + package.json<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>\u30d1\u30c3\u30b1\u30fc\u30b8\u8ffd\u52a0<\/td>\n<td><code>pip install X<\/code><br \/>\u2192 <strong>\u624b\u52d5\u3067\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u304c\u5fc5\u8981<\/strong><\/td>\n<td><code>npm install X<\/code><br \/>\u2192 <strong>\u81ea\u52d5\u3067\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u30d1\u30c3\u30b1\u30fc\u30b8\u524a\u9664<\/td>\n<td><code>pip uninstall X<\/code><br \/>\u2192 <strong>\u624b\u52d5\u3067\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u304c\u5fc5\u8981<\/strong><\/td>\n<td><code>npm uninstall X<\/code><br \/>\u2192 <strong>\u81ea\u52d5\u3067\u30d5\u30a1\u30a4\u30eb\u66f4\u65b0<\/strong><\/td>\n<\/tr>\n<tr>\n<td>\u76f4\u63a5\u4f9d\u5b58 vs \u9593\u63a5\u4f9d\u5b58<\/td>\n<td>\u533a\u5225\u56f0\u96e3\uff08<code>pip freeze<\/code> \u3067\u6df7\u5728\uff09<\/td>\n<td>\u660e\u78ba\u306b\u5206\u96e2<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<\/figure>\n<\/div>\n<h3 class=\"wp-block-heading\"><span id=\"pip_freeze_no_wen_ti\">pip freeze \u306e\u554f\u984c<\/span><\/h3>\n<p><code>pip freeze<\/code> \u3092\u4f7f\u3046\u3068\u3001\u76f4\u63a5\u4f9d\u5b58\u3068\u9593\u63a5\u4f9d\u5b58\u304c\u6df7\u5728\u3057\u3066\u51fa\u529b\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># pip freeze \u306e\u51fa\u529b\nflask==3.0.0\nclick==8.1.0        # \u2190 \u3053\u308c\u306f\u76f4\u63a5\u4f9d\u5b58\uff1f\u9593\u63a5\u4f9d\u5b58\uff1f\nJinja2==3.1.0       # \u2190 \u3053\u308c\u306f\u76f4\u63a5\u4f9d\u5b58\uff1f\u9593\u63a5\u4f9d\u5b58\uff1f\nWerkzeug==3.0.0     # \u2190 \u3053\u308c\u306f\u76f4\u63a5\u4f9d\u5b58\uff1f\u9593\u63a5\u4f9d\u5b58\uff1f\nMarkupSafe==2.1.0   # \u2190 Jinja2\u304c\u4f9d\u5b58\uff08\u9593\u63a5\u4f9d\u5b58\u306e\u9593\u63a5\u4f9d\u5b58\uff01\uff09<\/code><\/pre>\n<\/div>\n<p><strong>\u554f\u984c\u70b9<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-orange\">\n<li>\u3069\u308c\u304c\u76f4\u63a5\u4f9d\u5b58\u3067\u3001\u3069\u308c\u304c\u9593\u63a5\u4f9d\u5b58\u304b\u5224\u5225\u3067\u304d\u306a\u3044<\/li>\n<li>\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u524a\u9664\u3059\u308b\u6642\u306b\u300c\u3053\u308c\u306f\u672c\u5f53\u306b\u524a\u9664\u3057\u3066\u5927\u4e08\u592b\uff1f\u300d\u3068\u60a9\u3080<\/li>\n<li>requirements.txt \u304c\u80a5\u5927\u5316\u3059\u308b<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"monorepodeno2tsunopatantosono_ke_ti\">\u30e2\u30ce\u30ec\u30dd\u3067\u306e2\u3064\u306e\u30d1\u30bf\u30fc\u30f3\u3068\u305d\u306e\u8ab2\u984c<\/span><\/h2>\n<p>Python\u3067\u30e2\u30ce\u30ec\u30dd\u3092\u4f5c\u308b\u3068\u304d\u3001\u3053\u308c\u307e\u3067\u4e3b\u306b2\u3064\u306e\u30d1\u30bf\u30fc\u30f3\u3092\u8a66\u3057\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"patan1_gepurojekutoni_ge_bievenv\">\u30d1\u30bf\u30fc\u30f31: \u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306b\u500b\u5225venv<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>monorepo\/\n\u251c\u2500\u2500 project-a\/\n\u2502   \u251c\u2500\u2500 .venv\/              # project-a\u5c02\u7528\u306e\u4eee\u60f3\u74b0\u5883\n\u2502   \u251c\u2500\u2500 requirements.txt\n\u2502   \u2514\u2500\u2500 src\/\n\u251c\u2500\u2500 project-b\/\n\u2502   \u251c\u2500\u2500 .venv\/              # project-b\u5c02\u7528\u306e\u4eee\u60f3\u74b0\u5883\n\u2502   \u251c\u2500\u2500 requirements.txt\n\u2502   \u2514\u2500\u2500 src\/\n\u2514\u2500\u2500 project-c\/\n    \u251c\u2500\u2500 .venv\/              # project-c\u5c02\u7528\u306e\u4eee\u60f3\u74b0\u5883\n    \u251c\u2500\u2500 requirements.txt\n    \u2514\u2500\u2500 src\/<\/code><\/pre>\n<\/div>\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-blue\">\n<li>\u2705 \u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u5b8c\u5168\u306b\u5206\u96e2<\/li>\n<li>\u2705 \u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u9593\u3067\u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u304c\u767a\u751f\u3057\u306a\u3044<\/li>\n<\/ul>\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-red\">\n<li>\u274c IDE\u8a2d\u5b9a\u304c\u7169\u96d1\uff08\u74b0\u5883\u5207\u308a\u66ff\u3048\u304c\u5fc5\u8981\uff09<\/li>\n<li>\u274c \u5171\u901a\u4f9d\u5b58\u95a2\u4fc2\uff08pandas \u306a\u3069\uff09\u304c\u5404 <code>.venv<\/code> \u306b\u91cd\u8907\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<li>\u274c VSCode\u306e\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u8a2d\u5b9a\u3092\u983b\u7e41\u306b\u5909\u66f4\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"VSCodewakusupesucode-workspacedemo_jie_jueshinai_wen_ti\">VSCode\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\uff08.code-workspace\uff09\u3067\u3082\u89e3\u6c7a\u3057\u306a\u3044\u554f\u984c<\/span><\/h3>\n<p>VSCode\u306b\u306f\u8907\u6570\u306e\u30d5\u30a9\u30eb\u30c0\u30921\u3064\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3068\u3057\u3066\u7ba1\u7406\u3059\u308b\u6a5f\u80fd\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>\/\/ monorepo.code-workspace\n{\n  \"folders\": [\n    { \"path\": \"project-a\" },\n    { \"path\": \"project-b\" },\n    { \"path\": \"project-c\" }\n  ],\n  \"settings\": {\n    \"python.defaultInterpreterPath\": \"${workspaceFolder}\/.venv\/bin\/python\"\n  }\n}<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u3067\u5404\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u72ec\u7acb\u3057\u305f\u8a2d\u5b9a\u3092\u6301\u3066\u308b\u3093\u3067\u3059\u304c\u3001<strong>AI\u958b\u767a\u306e\u89b3\u70b9\u3067\u306f\u554f\u984c<\/strong>\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<p><strong>AI\u958b\u767a\u30c4\u30fc\u30eb\uff08Claude Code \u306a\u3069\uff09\u306e\u8996\u70b9\u3067\u4e0d\u5229\u306a\u7406\u7531<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-orange\">\n<li>AI\u306f1\u3064\u306eVSCode\u30a6\u30a3\u30f3\u30c9\u30a6\u5168\u4f53\u3092\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u7406\u89e3\u3059\u308b<\/li>\n<li>\u30d5\u30a9\u30eb\u30c0\u9593\u306e\u95a2\u4fc2\u6027\u3092\u628a\u63e1\u3057\u306b\u304f\u3044<\/li>\n<li>\u300cproject-a\u306e\u30b3\u30fc\u30c9\u3092\u53c2\u8003\u306bproject-b\u3092\u4fee\u6b63\u3057\u3066\u300d\u3068\u3044\u3063\u305f\u6307\u793a\u304c\u901a\u308a\u306b\u304f\u3044<\/li>\n<\/ul>\n<p>\u79c1\u306e\u5834\u5408\u3001Claude Code\u3092\u4f7f\u3063\u3066\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u591a\u3044\u306e\u3067\u3001\u3053\u306e\u70b9\u306f\u7d50\u69cb\u91cd\u8981\u3067\u3057\u305f\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"patan2_rutoni_dakinavenv\">\u30d1\u30bf\u30fc\u30f32: \u30eb\u30fc\u30c8\u306b\u5927\u304d\u306avenv<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code>monorepo\/\n\u251c\u2500\u2500 .venv\/           # \u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u542b\u3080\n\u251c\u2500\u2500 requirements.txt # \u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u624b\u52d5\u7ba1\u7406\n\u251c\u2500\u2500 project-a\/\n\u2502   \u2514\u2500\u2500 src\/\n\u251c\u2500\u2500 project-b\/\n\u2502   \u2514\u2500\u2500 src\/\n\u2514\u2500\u2500 project-c\/\n    \u2514\u2500\u2500 src\/<\/code><\/pre>\n<\/div>\n<p><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-blue\">\n<li>\u2705 IDE\u8a2d\u5b9a\u304c\u7c21\u5358\uff081\u3064\u306evenv\u3092\u6307\u5b9a\u3059\u308b\u3060\u3051\uff09<\/li>\n<li>\u2705 \u5171\u901a\u4f9d\u5b58\u95a2\u4fc2\u306e\u91cd\u8907\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u306a\u3044<\/li>\n<\/ul>\n<p><strong>\u30c7\u30e1\u30ea\u30c3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-stitch-red\">\n<li>\u274c <strong>requirements.txt\u306e\u624b\u52d5\u7ba1\u7406\u304c\u78ba\u5b9f\u306b\u5fc5\u8981<\/strong><\/li>\n<li>\u274c \u3069\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u3069\u3053\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u304b\u4e0d\u660e\u77ad<\/li>\n<li>\u274c \u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u304c\u767a\u751f\u3057\u3084\u3059\u3044<\/li>\n<li>\u274c \u30d1\u30c3\u30b1\u30fc\u30b8\u524a\u9664\u6642\u306e\u5f71\u97ff\u7bc4\u56f2\u304c\u4e0d\u660e<\/li>\n<\/ul>\n<p><strong>\u4f8b\uff08\u30eb\u30fc\u30c8requirements.txt\u306e\u80a5\u5927\u5316\uff09<\/strong>:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code># monorepo\/requirements.txt\n# project-a \u306e\u4f9d\u5b58\u95a2\u4fc2\nflask==3.0.0\npandas==2.2.0\n\n# project-b \u306e\u4f9d\u5b58\u95a2\u4fc2\ndjango==5.0.0\npandas==2.2.0        # \u2190 project-a\u3068\u91cd\u8907\n\n# project-c \u306e\u4f9d\u5b58\u95a2\u4fc2\nfastapi==0.115.0\npandas==2.1.0        # \u2190 \u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\uff01\u3069\u3061\u3089\u3092\u9078\u3076\uff1f\n\n# \u3053\u308c\u3089\u306f\u76f4\u63a5\u4f9d\u5b58\uff1f\u9593\u63a5\u4f9d\u5b58\uff1f\u8ab0\u304c\u4f7f\u3063\u3066\u3044\u308b\uff1f\nclick==8.1.0\njinja2==3.1.0\nsqlalchemy==2.0.0\n...\uff08100\u884c\u4ee5\u4e0a\u7d9a\u304f\uff09<\/code><\/pre>\n<\/div>\n<p><strong>\u554f\u984c\u70b9<\/strong>:<\/p>\n<ol class=\"wp-block-list is-style-sango-list-stitch-orange\">\n<li>\u3069\u306e\u30d1\u30c3\u30b1\u30fc\u30b8\u304c\u3069\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u4f7f\u308f\u308c\u3066\u3044\u308b\u304b\u8ffd\u8de1\u56f0\u96e3<\/li>\n<li>\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u524a\u9664\u3059\u308b\u6642\u306b\u300c\u672c\u5f53\u306b\u524a\u9664\u3057\u3066\u5927\u4e08\u592b\u304b\u300d\u5224\u65ad\u3067\u304d\u306a\u3044<\/li>\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u3092\u624b\u52d5\u3067\u89e3\u6c7a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b<\/li>\n<\/ol>\n<p>\u79c1\u3082\u6700\u521d\u306f\u3053\u306e\u30d1\u30bf\u30fc\u30f3\u3067\u8a66\u3057\u3066\u3044\u305f\u3093\u3067\u3059\u304c\u3001requirements.txt\u306e\u7ba1\u7406\u304c\u7169\u96d1\u3067\u3001\u7d50\u69cb\u306a\u6642\u9593\u306e\u30ed\u30b9\u3092\u3057\u307e\u3057\u305f\u3002<\/p>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"packagejsonraikuna_zi_dong_guan_li\">package.json\u30e9\u30a4\u30af\u306a\u81ea\u52d5\u7ba1\u7406<\/span><\/h2>\n<p>uv\u3092\u4f7f\u3046\u3068\u3001Node.js\u306epackage.json\u306e\u3088\u3046\u306a<strong>\u81ea\u52d5\u7ba1\u7406<\/strong>\u304c\u5b9f\u73fe\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"uvno_dong_zuo\">uv\u306e\u52d5\u4f5c<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># npm \u306e\u5834\u5408\nnpm install express\n# \u2192 package.json \u304c\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\uff01\n\n# uv \u306e\u5834\u5408\nuv add flask\n# \u2192 pyproject.toml \u304c\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\uff01<\/code><\/pre>\n<\/div>\n<p>\u3053\u308c\u306f\u60f3\u50cf\u4ee5\u4e0a\u306b\u52b9\u679c\u7684\u3067\u3057\u305f\u3002\u7279\u306b\u8907\u6570\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u7ba1\u7406\u3059\u308b\u5834\u5408\u3001\u624b\u52d5\u3067requirements.txt\u3092\u7de8\u96c6\u3059\u308b\u624b\u9593\u304c\u306a\u304f\u306a\u308b\u3060\u3051\u3067\u3001\u958b\u767a\u4f53\u9a13\u304c\u5927\u304d\u304f\u5909\u308f\u308a\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"zhong_yaona3tsuno_te_zheng\">\u91cd\u8981\u306a3\u3064\u306e\u7279\u5fb4<\/span><\/h3>\n<ol class=\"wp-block-list is-style-sango-list-stitch-blue\">\n<li><strong>\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\u4f9d\u5b58\u95a2\u4fc2\u30d5\u30a1\u30a4\u30eb<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-main-color\">\n<li><code>uv add<\/code> \u3059\u308b\u3068 <code>pyproject.toml<\/code> \u304c\u81ea\u52d5\u3067\u66f4\u65b0\u3055\u308c\u308b<\/li>\n<li>pip \u306e\u3088\u3046\u306b\u624b\u52d5\u3067 <code>requirements.txt<\/code> \u3092\u7de8\u96c6\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u76f4\u63a5\u4f9d\u5b58\u3068\u9593\u63a5\u4f9d\u5b58\u306e\u5206\u96e2<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-main-color\">\n<li><code>pyproject.toml<\/code>: \u76f4\u63a5\u4f9d\u5b58\u306e\u307f\uff08\u8aad\u307f\u3084\u3059\u3044\u3001package.json \u3068\u540c\u3058\uff09<\/li>\n<li><code>uv.lock<\/code>: \u5168\u4f9d\u5b58\u95a2\u4fc2\u3092\u30ed\u30c3\u30af\uff08\u518d\u73fe\u6027\u3001package-lock.json \u3068\u540c\u3058\uff09<\/li>\n<\/ul>\n<\/li>\n<li><strong>\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\u306b\u3088\u308b\u518d\u73fe\u6027<\/strong>\n<ul class=\"wp-block-list is-style-sango-list-simple\">\n<li><code>uv.lock<\/code> \u3067\u5168\u74b0\u5883\u3067\u540c\u3058\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u4fdd\u8a3c<\/li>\n<li>\u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u3092\u81ea\u52d5\u89e3\u6c7a<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"dan_yivenv_wakusupesu_guan_li\">\u5358\u4e00venv + \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u7ba1\u7406<\/span><\/h2>\n<p>uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u3046\u3068\u3001<strong>\u30d1\u30bf\u30fc\u30f32\u306e\u5229\u70b9\uff08\u5358\u4e00venv\uff09<\/strong>\u3068<strong>\u30d1\u30bf\u30fc\u30f31\u306e\u5229\u70b9\uff08\u660e\u78ba\u306a\u4f9d\u5b58\u95a2\u4fc2\uff09<\/strong>\u3092\u4e21\u7acb\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"uvwakusupesuno_gou_cheng\">uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u69cb\u6210<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>sios-tech-lab-analytics-ga4\/\n\u251c\u2500\u2500 .venv\/                  \u2190 \u5358\u4e00\u306e\u4eee\u60f3\u74b0\u5883\uff08\u5168\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u5171\u6709\uff09\n\u251c\u2500\u2500 uv.lock                 \u2190 \u7d71\u5408\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\n\u251c\u2500\u2500 pyproject.toml          \u2190 \u30eb\u30fc\u30c8\u8a2d\u5b9a\n\u2514\u2500\u2500 application\/\n    \u251c\u2500\u2500 batch\/\n    \u2502   \u251c\u2500\u2500 pyproject.toml  \u2190 \u30d0\u30c3\u30c1\u306e\u4f9d\u5b58\u95a2\u4fc2\uff08\u81ea\u52d5\u7ba1\u7406\uff09\n    \u2502   \u2514\u2500\u2500 src\/\n    \u251c\u2500\u2500 frontend\/\n    \u2502   \u251c\u2500\u2500 pyproject.toml  \u2190 \u30d5\u30ed\u30f3\u30c8\u30a8\u30f3\u30c9\u306e\u4f9d\u5b58\u95a2\u4fc2\uff08\u81ea\u52d5\u7ba1\u7406\uff09\n    \u2502   \u2514\u2500\u2500 app.py\n    \u2514\u2500\u2500 scraper\/\n        \u251c\u2500\u2500 pyproject.toml  \u2190 \u30b9\u30af\u30ec\u30a4\u30d1\u30fc\u306e\u4f9d\u5b58\u95a2\u4fc2\uff08\u81ea\u52d5\u7ba1\u7406\uff09\n        \u2514\u2500\u2500 main.py<\/code><\/pre>\n<\/div>\n<p><strong>\u30dd\u30a4\u30f3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u2705 IDE\u8a2d\u5b9a\u304c\u7c21\u5358\uff081\u3064\u306evenv\u3092\u6307\u5b9a\u3059\u308b\u3060\u3051\uff09<\/li>\n<li>\u2705 \u5404\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u306f <code>pyproject.toml<\/code> \u3067\u660e\u78ba\u306b\u7ba1\u7406<\/li>\n<li>\u2705 \u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u306f <code>uv.lock<\/code> \u3067\u81ea\u52d5\u89e3\u6c7a<\/li>\n<li>\u2705 \u624b\u52d5\u3067\u306e <code>requirements.txt<\/code> \u7de8\u96c6\u304c\u4e0d\u8981<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"monorepo_gou_chengniyoruAI_kai_fa_ti_yanno_xiang_shang\">\u30e2\u30ce\u30ec\u30dd\u69cb\u6210\u306b\u3088\u308bAI\u958b\u767a\u4f53\u9a13\u306e\u5411\u4e0a<\/span><\/h2>\n<p>\u79c1\u304c\u5b9f\u969b\u306bClaude Code\u3092\u4f7f\u3063\u3066\u958b\u767a\u3057\u3066\u3044\u3066\u611f\u3058\u305f\u306e\u306f\u3001<strong>\u30e2\u30ce\u30ec\u30dd\u69cb\u6210\u305d\u306e\u3082\u306e\u304cAI\u958b\u767a\u30c4\u30fc\u30eb\u3068\u306e\u76f8\u6027\u304c\u826f\u3044<\/strong>\u3068\u3044\u3046\u3053\u3068\u3067\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"nazemonorepogaAI_kai_fani_xiangiteirunoka\">\u306a\u305c\u30e2\u30ce\u30ec\u30dd\u304cAI\u958b\u767a\u306b\u5411\u3044\u3066\u3044\u308b\u306e\u304b\uff1f<\/span><\/h3>\n<h4 class=\"wp-block-heading\"><span id=\"1_AIga_quanpurojekutonokontekisutowo_yi_duni_ba_wodekiru\">1. AI\u304c\u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u3092\u4e00\u5ea6\u306b\u628a\u63e1\u3067\u304d\u308b<\/span><\/h4>\n<p><strong>\u5f93\u6765\u306e\u30a2\u30d7\u30ed\u30fc\u30c1\uff08\u8907\u6570\u30ea\u30dd\u30b8\u30c8\u30ea or \u500b\u5225venv\uff09<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-dashed\">\n<li>AI\u306f\u30ea\u30dd\u30b8\u30c8\u30ea\u3054\u3068\u306b\u30b3\u30f3\u30c6\u30ad\u30b9\u30c8\u304c\u5206\u65ad\u3055\u308c\u308b<\/li>\n<li>\u300cproject-a\u306e\u30b3\u30fc\u30c9\u3092\u53c2\u8003\u306bproject-b\u3092\u4fee\u6b63\u3057\u3066\u300d\u3068\u3044\u3046\u6307\u793a\u304c\u96e3\u3057\u3044<\/li>\n<li>\u8907\u6570\u306eVSCode\u30a6\u30a3\u30f3\u30c9\u30a6\u3092\u958b\u304f\u5fc5\u8981\u304c\u3042\u308b<\/li>\n<\/ul>\n<p><strong>\u30e2\u30ce\u30ec\u30dd\u69cb\u6210<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-chevron\">\n<li>\u5358\u4e00\u306eVSCode\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u5168\u4f53\u3092\u898b\u6e21\u305b\u308b<\/li>\n<li>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u9593\u306e\u4f9d\u5b58\u95a2\u4fc2\u3084\u5171\u901a\u30b3\u30fc\u30c9\u3092AI\u304c\u7406\u89e3\u3057\u3084\u3059\u3044<\/li>\n<li>\u300cbatch\u306e\u30b3\u30fc\u30c9\u3092\u53c2\u8003\u306bfrontend\u3092\u4fee\u6b63\u3057\u3066\u300d\u3068\u3044\u3046\u81ea\u7136\u306a\u6307\u793a\u304c\u901a\u308b<\/li>\n<\/ul>\n<p>\u3053\u308c\u306f<strong>Poetry\u3001PDM\u3001uv\u306a\u3069\u3001\u3069\u306e\u30c4\u30fc\u30eb\u3067\u3082\u5171\u901a<\/strong>\u3059\u308b\u30e2\u30ce\u30ec\u30dd\u306e\u5229\u70b9\u3067\u3059\u3002<\/p>\n<h4 class=\"wp-block-heading\"><span id=\"2_huan_jing_guan_linoshinpurusa\">2. \u74b0\u5883\u7ba1\u7406\u306e\u30b7\u30f3\u30d7\u30eb\u3055<\/span><\/h4>\n<p>\u8907\u6570venv\u306e\u74b0\u5883\u3067\u306f\u3001AI\u304c\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u969b\u306b\u300c\u3069\u306evenv\u306b\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u3079\u304d\u304b\u300d\u306e\u5224\u65ad\u304c\u5fc5\u8981\u3067\u3057\u305f\u3002<\/p>\n<p>\u30e2\u30ce\u30ec\u30dd\u3067\u5358\u4e00venv\uff08\u307e\u305f\u306f\u7d71\u4e00\u3055\u308c\u305f\u4f9d\u5b58\u7ba1\u7406\uff09\u3092\u4f7f\u3046\u3068\uff1a<\/p>\n<ul class=\"wp-block-list is-style-sango-list-chevron\">\n<li>VSCode\u306e\u30a4\u30f3\u30bf\u30fc\u30d7\u30ea\u30bf\u30fc\u8a2d\u5b9a\u306f1\u3064\u3060\u3051<\/li>\n<li>\u300c\u4eca\u3069\u306e\u74b0\u5883\u306b\u3044\u308b\u306e\u304b\u300d\u3092\u610f\u8b58\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044<\/li>\n<li>AI\u304c\u60f3\u5b9a\u5916\u306e\u74b0\u5883\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3059\u308b\u30ea\u30b9\u30af\u304c\u4f4e\u3044<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"uvwakusupesuno_zhui_jiameritto\">uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u8ffd\u52a0\u30e1\u30ea\u30c3\u30c8<\/span><\/h3>\n<p>\u305d\u306e\u4e0a\u3067\u3001uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u306f\u4ee5\u4e0b\u306e\u5229\u70b9\u304c\u3042\u308a\u307e\u3059\uff1a<\/p>\n<h4 class=\"wp-block-heading\"><span id=\"zi_dong_guan_liniyoru_ren_zhi_fu_heno_zhi_jian\">\u81ea\u52d5\u7ba1\u7406\u306b\u3088\u308b\u8a8d\u77e5\u8ca0\u8377\u306e\u8efd\u6e1b<\/span><\/h4>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># uv \u306e\u5834\u5408\nuv add --package my-monorepo-batch pandas\n# \u2192 pyproject.toml \u304c\u81ea\u52d5\u66f4\u65b0\u3055\u308c\u308b\n\n# Poetry \u306e\u5834\u5408\uff08\u540c\u69d8\u306b\u81ea\u52d5\u66f4\u65b0\uff09\ncd application\/batch\npoetry add pandas\n\n# pip \u306e\u5834\u5408\uff08\u624b\u52d5\u7de8\u96c6\u304c\u5fc5\u8981\uff09\npip install pandas\n# \u2192 requirements.txt \u3092\u624b\u52d5\u3067\u7de8\u96c6...<\/code><\/pre>\n<\/div>\n<p>\u4f9d\u5b58\u95a2\u4fc2\u306e\u8ffd\u52a0\u30fb\u524a\u9664\u6642\u306b\u3001AI\u306b\u300cpyproject.toml\u3092\u66f4\u65b0\u3057\u3066\u300d\u3068\u6307\u793a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<h4 class=\"wp-block-heading\"><span id=\"gao_sunainsutoru\">\u9ad8\u901f\u306a\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span><\/h4>\n<p>\u958b\u767a\u4e2d\u306b\u983b\u7e41\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u8a66\u3059\u3068\u304d\u3001uv\u306e\u9ad8\u901f\u3055\uff08pip\u6bd410-100\u500d\uff09\u306f\u4f53\u611f\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><strong>\u3057\u304b\u3057<\/strong>: \u3053\u308c\u3089\u306f\u300cAI\u958b\u767a\u306b\u5fc5\u9808\u300d\u3067\u306f\u306a\u304f\u3001\u300c\u958b\u767a\u4f53\u9a13\u3092\u5411\u4e0a\u3055\u305b\u308b\u8981\u7d20\u300d\u3067\u3059\u3002Poetry\u3001PDM\u3067\u3082\u540c\u7b49\u306e\u958b\u767a\u4f53\u9a13\u3092\u5f97\u3089\u308c\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"AI_kai_faniokeru_yi_cun_guan_litsuruno_xuan_ze\">AI\u958b\u767a\u306b\u304a\u3051\u308b\u4f9d\u5b58\u7ba1\u7406\u30c4\u30fc\u30eb\u306e\u9078\u629e<\/span><\/h3>\n<div id=\"id-c1b1a7f4-04f9-4d6e-bb25-729ba219c661\">\n<figure class=\"wp-block-table\">\n<div class=\"s_table\"><table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th>\u8981\u7d20<\/th>\n<th>\u5f71\u97ff\u5ea6<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u306e\u660e\u78ba\u3055<\/strong><\/td>\n<td>\u2b50\u2b50\u2b50\u2b50\u2b50 \u6700\u91cd\u8981<\/td>\n<\/tr>\n<tr>\n<td><strong>\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u5145\u5b9f<\/strong><\/td>\n<td>\u2b50\u2b50\u2b50\u2b50\u2b50 \u6700\u91cd\u8981<\/td>\n<\/tr>\n<tr>\n<td><strong>\u30e2\u30ce\u30ec\u30dd\u69cb\u6210<\/strong><\/td>\n<td>\u2b50\u2b50\u2b50\u2b50 \u91cd\u8981<\/td>\n<\/tr>\n<tr>\n<td><strong>\u4e00\u8cab\u6027\u306e\u3042\u308b\u547d\u540d\u898f\u5247<\/strong><\/td>\n<td>\u2b50\u2b50\u2b50\u2b50 \u91cd\u8981<\/td>\n<\/tr>\n<tr>\n<td><strong>\u4f9d\u5b58\u7ba1\u7406\u30c4\u30fc\u30eb\u306e\u7a2e\u985e<\/strong><\/td>\n<td>\u2b50\u2b50 \u5f71\u97ff\u306f\u9650\u5b9a\u7684<\/td>\n<\/tr>\n<\/tbody>\n<\/table><\/div>\n<\/figure>\n<\/div>\n<p><strong>AI\u30c4\u30fc\u30eb\u306f\u4f9d\u5b58\u7ba1\u7406\u30c4\u30fc\u30eb\u306e\u7a2e\u985e\u3092\u6c17\u306b\u3057\u307e\u305b\u3093<\/strong>\u3002\u91cd\u8981\u306a\u306e\u306f\u3001\u8ad6\u7406\u7684\u306a\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u69cb\u9020\u3068\u826f\u3044\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3067\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"shi_jino_xuan_ze_ji_zhun\">\u5b9f\u969b\u306e\u9078\u629e\u57fa\u6e96<\/span><\/h3>\n<p>AI\u958b\u767a\u306b\u304a\u3044\u3066\u3082\u3001\u4f9d\u5b58\u7ba1\u7406\u30c4\u30fc\u30eb\u306e\u9078\u629e\u306f\u5f93\u6765\u306e\u57fa\u6e96\u3067\u554f\u984c\u3042\u308a\u307e\u305b\u3093\uff1a<\/p>\n<ul class=\"wp-block-list is-style-sango-list-niku\">\n<li><strong>\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 + \u901f\u5ea6\u91cd\u8996<\/strong> \u2192 uv<\/li>\n<li><strong>\u65e2\u5b58Poetry\u30d7\u30ed\u30b8\u30a7\u30af\u30c8<\/strong> \u2192 \u305d\u306e\u307e\u307e\u7d99\u7d9a\u3067\u554f\u984c\u306a\u3057<\/li>\n<li><strong>\u30c1\u30fc\u30e0\u304cPEP\u6e96\u62e0\u3092\u91cd\u8996<\/strong> \u2192 PDM<\/li>\n<li><strong>PyPA\u516c\u5f0f\u30c4\u30fc\u30eb\u5e0c\u671b<\/strong> \u2192 Hatch<\/li>\n<\/ul>\n<p><strong>\u3055\u3089\u306b\u6df1\u304fAI\u5354\u696d\u958b\u767a\u3092\u5b66\u3073\u305f\u3044\u65b9\u3078<\/strong>: \u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u3092\u6574\u3048\u305f\u5f8c\u3001<a target=\"_blank\" href=\"https:\/\/tech-lab.sios.jp\/archives\/50109\" target=\"_blank\" rel=\"noopener\" title=\"\">AI\u5354\u696d\u958b\u767a\u74b0\u5883\u306e\u69cb\u7bc9\u8853\uff5c\u30e2\u30ce\u30ec\u30dd\u3067\u30d3\u30eb\u30c9\u6642\u9593\u3092\u5927\u5e45\u77ed\u7e2e\u3059\u308bCLAUDE.md\u6d3b\u7528\u6cd5<\/a>\u3082\u53c2\u8003\u306b\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\u3002CLAUDE.md\u968e\u5c64\u69cb\u9020\u3092\u4f7f\u3063\u3066\u3001AI\u306b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u5168\u4f53\u50cf\u3092\u7406\u89e3\u3055\u305b\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"shi_zhuanggaido_10fende_gou_zhu\">\u5b9f\u88c5\u30ac\u30a4\u30c9\uff0810\u5206\u3067\u69cb\u7bc9\uff09<\/span><\/h2>\n<p>\u305d\u308c\u3067\u306f\u3001\u5b9f\u969b\u306buv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u69cb\u7bc9\u3057\u3066\u307f\u307e\u3057\u3087\u3046\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"suteppu1_ruto_pyprojecttoml_no_zuo_cheng\">\u30b9\u30c6\u30c3\u30d71: \u30eb\u30fc\u30c8 pyproject.toml \u306e\u4f5c\u6210<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>[project]\nname = \"my-monorepo\"\nversion = \"0.1.0\"\nrequires-python = \"&gt;=3.12\"\n\n[dependency-groups]\ndev = [\n    \"ruff&gt;=0.7.0\",\n    \"pytest&gt;=8.0.0\",\n    \"mypy&gt;=1.18.2\",\n]\n\n[tool.uv.workspace]\nmembers = [\"application\/frontend\", \"application\/batch\", \"application\/scraper\"]\n\n[tool.ruff]\nline-length = 88\ntarget-version = \"py312\"\n\n[tool.ruff.lint]\nselect = [\"E\", \"W\", \"F\", \"I\", \"N\", \"UP\", \"B\"]\n\n[tool.mypy]\npython_version = \"3.12\"\nwarn_return_any = true\ncheck_untyped_defs = true\nignore_missing_imports = true<\/code><\/pre>\n<\/div>\n<p><strong>\u30dd\u30a4\u30f3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li><code>tool.uv.workspace.members<\/code> \u3067\u5404\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u5b9a\u7fa9<\/li>\n<li>\u30eb\u30fc\u30c8\u306b\u306f\u958b\u767a\u30c4\u30fc\u30eb\uff08ruff, pytest, mypy\uff09\u3092\u914d\u7f6e<\/li>\n<li>\u30b3\u30fc\u30c9\u54c1\u8cea\u8a2d\u5b9a\uff08Ruff\u3001mypy\uff09\u306f\u5168\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3067\u5171\u6709<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"suteppu2_gewakusupesuno_pyprojecttoml\">\u30b9\u30c6\u30c3\u30d72: \u5404\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e pyproject.toml<\/span><\/h3>\n<p>\u4f8b: <code>application\/batch\/pyproject.toml<\/code><\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>[project]\nname = \"my-monorepo-batch\"\nversion = \"0.1.0\"\nrequires-python = \"&gt;=3.12\"\ndependencies = [\n    \"pandas&gt;=2.2.0\",\n    \"python-dotenv&gt;=1.0.0\",\n]<\/code><\/pre>\n<\/div>\n<p>\u4f8b: <code>application\/frontend\/pyproject.toml<\/code><\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>[project]\nname = \"my-monorepo-frontend\"\nversion = \"0.1.0\"\nrequires-python = \"&gt;=3.12\"\ndependencies = [\n    \"streamlit&gt;=1.40.0\",\n    \"pandas&gt;=2.2.0\",\n    \"plotly&gt;=5.24.0\",\n]<\/code><\/pre>\n<\/div>\n<p><strong>\u30dd\u30a4\u30f3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u5404\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306f\u72ec\u7acb\u3057\u305f <code>pyproject.toml<\/code> \u3092\u6301\u3064<\/li>\n<li>\u5171\u901a\u4f9d\u5b58\u95a2\u4fc2\uff08pandas \u306a\u3069\uff09\u306f <code>uv.lock<\/code> \u3067\u81ea\u52d5\u7684\u306b1\u3064\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u7d71\u4e00\u3055\u308c\u308b<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"suteppu3_yi_cun_guan_xinoinsutoru\">\u30b9\u30c6\u30c3\u30d73: \u4f9d\u5b58\u95a2\u4fc2\u306e\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># \u5168\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u3092\u540c\u671f\nuv sync\n\n# \u7279\u5b9a\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u8ffd\u52a0\nuv add --package my-monorepo-batch pandas\n\n# \u30eb\u30fc\u30c8\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u958b\u767a\u30c4\u30fc\u30eb\u3092\u8ffd\u52a0\nuv add --dev ruff pytest mypy<\/code><\/pre>\n<\/div>\n<p><strong>\u91cd\u8981<\/strong>: <code>uv sync<\/code> 1\u56de\u3067\u5168\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u4f9d\u5b58\u95a2\u4fc2\u304c\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u307e\u3059\u3002\u3053\u308c\u306f\u3001npm\u306e <code>npm install<\/code> \u3068\u540c\u3058\u611f\u899a\u3067\u3059\u306d\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"suteppu4_komando_shi_xing\">\u30b9\u30c6\u30c3\u30d74: \u30b3\u30de\u30f3\u30c9\u5b9f\u884c<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-bash\" data-lang=\"Bash\"><code># \u7279\u5b9a\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5b9f\u884c\nuv run --package my-monorepo-batch python application\/batch\/script.py\nuv run --package my-monorepo-frontend streamlit run application\/frontend\/app.py\n\n# \u958b\u767a\u30c4\u30fc\u30eb\u306e\u5b9f\u884c\uff08\u30eb\u30fc\u30c8\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\uff09\nuv run ruff format .\nuv run mypy .\nuv run pytest<\/code><\/pre>\n<\/div>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"shi_jinopurojekuto_li_GA4fen_xi\">\u5b9f\u969b\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u4f8b: GA4\u5206\u6790<\/span><\/h2>\n<p>\u79c1\u304c\u5b9f\u969b\u306b\u69cb\u7bc9\u3057\u305fGA4\uff08Google Analytics 4\uff09\u5206\u6790\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u306e\u5b9f\u88c5\u4f8b\u3092\u7d39\u4ecb\u3057\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"wakusupesu_gou_cheng\">\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u69cb\u6210<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code>sios-tech-lab-analytics-ga4\/\n\u251c\u2500\u2500 .venv\/                     # \u5358\u4e00\u306e\u4eee\u60f3\u74b0\u5883\n\u251c\u2500\u2500 uv.lock                    # \u7d71\u5408\u30ed\u30c3\u30af\u30d5\u30a1\u30a4\u30eb\uff08206KB\u30011306\u884c\uff09\n\u251c\u2500\u2500 pyproject.toml             # \u30eb\u30fc\u30c8\u8a2d\u5b9a\n\u2514\u2500\u2500 application\/\n    \u251c\u2500\u2500 batch\/\n    \u2502   \u251c\u2500\u2500 pyproject.toml     # GA4\u30c7\u30fc\u30bf\u53d6\u5f97\u30fb\u5909\u63db\n    \u2502   \u2514\u2500\u2500 script.py\n    \u251c\u2500\u2500 frontend\/\n    \u2502   \u251c\u2500\u2500 pyproject.toml     # Streamlit\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9\n    \u2502   \u2514\u2500\u2500 app.py\n    \u2514\u2500\u2500 scraper\/\n        \u251c\u2500\u2500 pyproject.toml     # \u30d6\u30ed\u30b0\u30c7\u30fc\u30bf\u53ce\u96c6\n        \u2514\u2500\u2500 main.py<\/code><\/pre>\n<\/div>\n<h3 class=\"wp-block-heading\"><span id=\"gewakusupesuno_yi_ge\">\u5404\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u5f79\u5272<\/span><\/h3>\n<h4 class=\"wp-block-heading\"><span id=\"1_batch_GA4karanodeta_qu_debian_huan\">1. batch: GA4\u304b\u3089\u306e\u30c7\u30fc\u30bf\u53d6\u5f97\u30fb\u5909\u63db<\/span><\/h4>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code># application\/batch\/pyproject.toml\n[project]\nname = \"sios-tech-lab-analytics-ga4-batch\"\ndependencies = [\n    \"google-analytics-data&gt;=0.18.0\",\n    \"pandas&gt;=2.2.0\",\n    \"python-dotenv&gt;=1.0.0\",\n]<\/code><\/pre>\n<\/div>\n<h4 class=\"wp-block-heading\"><span id=\"2_frontend_Streamlitdasshubodo\">2. frontend: Streamlit\u30c0\u30c3\u30b7\u30e5\u30dc\u30fc\u30c9<\/span><\/h4>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code># application\/frontend\/pyproject.toml\n[project]\nname = \"sios-tech-lab-analytics-ga4-frontend\"\ndependencies = [\n    \"streamlit&gt;=1.40.0\",\n    \"pandas&gt;=2.2.0\",\n    \"plotly&gt;=5.24.0\",\n]<\/code><\/pre>\n<\/div>\n<h4 class=\"wp-block-heading\"><span id=\"3_scraper_burogudeta_shou_ji\">3. scraper: \u30d6\u30ed\u30b0\u30c7\u30fc\u30bf\u53ce\u96c6<\/span><\/h4>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-plain\"><code># application\/scraper\/pyproject.toml\n[project]\nname = \"sios-tech-lab-analytics-ga4-scraper\"\ndependencies = [\n    \"requests&gt;=2.32.0\",\n    \"beautifulsoup4&gt;=4.12.0\",\n    \"lxml&gt;=5.0.0\",\n    \"click&gt;=8.1.0\",\n]\n\n[project.scripts]\nblog-scraper = \"sios_tech_lab_analytics_ga4_scraper.main:main\"<\/code><\/pre>\n<\/div>\n<p><strong>\u30dd\u30a4\u30f3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li>\u30a8\u30f3\u30c8\u30ea\u30dd\u30a4\u30f3\u30c8\uff08<code>[project.scripts]<\/code>\uff09\u3092\u5b9a\u7fa9\u3059\u308b\u3053\u3068\u3067\u3001<code>uv run blog-scraper<\/code> \u3067\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u53ef\u80fd<\/li>\n<\/ul>\n<h3 class=\"wp-block-heading\"><span id=\"gong_tong_yi_cun_guan_xino_xii\">\u5171\u901a\u4f9d\u5b58\u95a2\u4fc2\u306e\u6271\u3044<\/span><\/h3>\n<p><code>pandas&gt;=2.2.0<\/code> \u306f batch \u3068 frontend \u3067\u5171\u6709\u3055\u308c\u307e\u3059\u304c\u3001<code>uv.lock<\/code> \u3067\u81ea\u52d5\u7684\u306b1\u3064\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\uff082.2.1\uff09\u306b\u7d71\u4e00\u3055\u308c\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u306b\u3088\u308a\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u3092\u6c17\u306b\u305b\u305a\u958b\u767a\u3067\u304d\u307e\u3059\u3002\u624b\u52d5\u3067\u8abf\u6574\u3059\u308b\u5fc5\u8981\u304c\u306a\u3044\u306e\u3067\u3001\u3059\u3054\u304f\u697d\u3067\u3059\u306d\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"DevContainertono_tong_he\">DevContainer\u3068\u306e\u7d71\u5408<\/span><\/h3>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-json\" data-lang=\"Json\"><code>{\n  \"name\": \"Python Dev (uv + Ruff + mypy)\",\n  \"build\": {\n    \"dockerfile\": \"Dockerfile\"\n  },\n  \"customizations\": {\n    \"vscode\": {\n      \"extensions\": [\"charliermarsh.ruff\", \"ms-python.python\"],\n      \"settings\": {\n        \"\": {\n          \"editor.defaultFormatter\": \"charliermarsh.ruff\",\n          \"editor.formatOnSave\": true\n        }\n      }\n    }\n  },\n  \"postCreateCommand\": \"uv sync\"\n}<\/code><\/pre>\n<\/div>\n<p><strong>\u30dd\u30a4\u30f3\u30c8<\/strong>:<\/p>\n<ul class=\"wp-block-list is-style-sango-list-yubi\">\n<li><code>postCreateCommand: \"uv sync\"<\/code> \u3067\u30b3\u30f3\u30c6\u30ca\u4f5c\u6210\u6642\u306b\u5168\u4f9d\u5b58\u95a2\u4fc2\u3092\u81ea\u52d5\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb<\/li>\n<li>\u30c1\u30fc\u30e0\u5168\u54e1\u304c\u540c\u3058\u74b0\u5883\u3092\u5171\u6709\u3067\u304d\u308b<\/li>\n<\/ul>\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n<h2 class=\"wp-block-heading\"><span id=\"matome\">\u307e\u3068\u3081<\/span><\/h2>\n<p>\u4eca\u56de\u306f\u3001uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u4f7f\u3063\u305fPython\u30e2\u30ce\u30ec\u30dd\u7ba1\u7406\u306e\u65b9\u6cd5\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"kono_huan_jingde_derareru4tsunomeritto\">\u3053\u306e\u74b0\u5883\u3067\u5f97\u3089\u308c\u308b4\u3064\u306e\u30e1\u30ea\u30c3\u30c8<\/span><\/h3>\n<p>\u2705 <strong>package.json\u30e9\u30a4\u30af\u306a\u81ea\u52d5\u7ba1\u7406<\/strong> \u2013 pip + requirements.txt\u304b\u3089\u306e\u8131\u5374<br \/>\u2705 <strong>\u5358\u4e00venv + \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u7ba1\u7406<\/strong> \u2013 IDE\u8a2d\u5b9a\u304c\u7c21\u5358<br \/>\u2705 <strong>AI\u958b\u767a\u30c4\u30fc\u30eb\u3068\u306e\u76f8\u6027\u304c\u629c\u7fa4<\/strong> \u2013 \u5168\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4e00\u5ea6\u306b\u628a\u63e1<br \/>\u2705 <strong>\u30d0\u30fc\u30b8\u30e7\u30f3\u7af6\u5408\u306e\u81ea\u52d5\u89e3\u6c7a<\/strong> \u2013 \u624b\u52d5\u8abf\u6574\u304c\u4e0d\u8981<\/p>\n<p>Python\u306e\u30e2\u30ce\u30ec\u30dd\u7ba1\u7406\u304c\u3001Node.js\u306e\u3088\u3046\u306b\u5feb\u9069\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h3 class=\"wp-block-heading\"><span id=\"cinosuteppu\">\u6b21\u306e\u30b9\u30c6\u30c3\u30d7<\/span><\/h3>\n<ul class=\"wp-block-list is-style-sango-list-main-color\">\n<li><strong>\u4eca\u56de\u306e\u8a18\u4e8b<\/strong>: \u958b\u767a\u74b0\u5883\u3067\u306e\u69cb\u7bc9\uff08uv\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u57fa\u672c\uff09<\/li>\n<li><strong>\u6b21\u56de\u306e\u8a18\u4e8b<\/strong>: \u30c7\u30d7\u30ed\u30a4\u30fb\u672c\u756a\u74b0\u5883\u3078\u306e\u5c55\u958b\n<ul class=\"wp-block-list is-style-sango-list-main-color\">\n<li>GitHub Actions\u3067\u306eUV\u5bfe\u5fdc<\/li>\n<li>uv\u304b\u3089requirements.txt\u3078\u306e\u5909\u63db<\/li>\n<li>\u30b3\u30f3\u30c6\u30ca\u30d3\u30eb\u30c9\u3068\u672c\u756a\u74b0\u5883\u3067\u306e\u5b9f\u884c<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u305c\u3072\u3001\u3042\u306a\u305f\u306e\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3067\u3082\u8a66\u3057\u3066\u307f\u3066\u304f\u3060\u3055\u3044\uff01<\/p>\n<p>\u8cea\u554f\u3084\u611f\u60f3\u306f\u3001\u30b3\u30e1\u30f3\u30c8\u6b04\u3067\u304a\u5f85\u3061\u3057\u3066\u304a\u308a\u307e\u3059\u3002<\/p>\n<h2 class=\"wp-block-heading\"><span id=\"can_kaorinku\">\u53c2\u8003\u30ea\u30f3\u30af<\/span><\/h2>\n<h3 class=\"wp-block-heading\"><span id=\"gong_shidokyumento\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/span><\/h3>\n<h3 class=\"wp-block-heading\"><span id=\"guan_lian_ji_shi\">\u95a2\u9023\u8a18\u4e8b<\/span><\/h3>\n<p><!-- Anyway Feedback Container \/\/--><\/p>\n<p><!-- \/\/Anyway Feedback Container --><\/div>\n\n<br \/><a href=\"https:\/\/tech-lab.sios.jp\/archives\/50151\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u306f\u3058\u3081\u306b \u3069\u3082\uff01\u6700\u8fd1\u307e\u305f\u3067\u3059\u306d\u3001\u65b0\u3057\u3044\u691c\u8a3c\u3092\u9032\u3081\u308b\u305f\u3081\u306b\u74b0\u5883\u69cb\u7bc9\u3092\u3064\u3089\u3064\u3089\u3068\u3084\u3063\u3066\u3044\u308b\u9f8d\u3061\u3083\u3093\u3067\u3059\u3002AI\u958b\u767a\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306e\u74b0\u5883\u69cb\u7bc9\u3092\u691c\u8a3c\u3057\u3066\u3044\u308b\u3093\u3067\u3059\u304c\u3001\u4eca\u56de\u306fuv\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u306b\u3064\u3044 [&hellip;]","protected":false},"author":1,"featured_media":22683,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-22682","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-company-tec"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3<\/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:\/\/tech-lab.sios.jp\/archives\/50151\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b \u3069\u3082\uff01\u6700\u8fd1\u307e\u305f\u3067\u3059\u306d\u3001\u65b0\u3057\u3044\u691c\u8a3c\u3092\u9032\u3081\u308b\u305f\u3081\u306b\u74b0\u5883\u69cb\u7bc9\u3092\u3064\u3089\u3064\u3089\u3068\u3084\u3063\u3066\u3044\u308b\u9f8d\u3061\u3083\u3093\u3067\u3059\u3002AI\u958b\u767a\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306e\u74b0\u5883\u69cb\u7bc9\u3092\u691c\u8a3c\u3057\u3066\u3044\u308b\u3093\u3067\u3059\u304c\u3001\u4eca\u56de\u306fuv\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u306b\u3064\u3044 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tech-lab.sios.jp\/archives\/50151\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-07T14:10:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1920\" \/>\n\t<meta property=\"og:image:height\" content=\"1080\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"info@pokecon.jp\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u57f7\u7b46\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"info@pokecon.jp\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22682\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab\",\"datePublished\":\"2025-11-07T14:10:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22682\\\/\"},\"wordCount\":195,\"image\":{\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/81737613b5f669b297d9a55ee51432c9.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/22682\\\/\",\"url\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151\",\"name\":\"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/81737613b5f669b297d9a55ee51432c9.png\",\"datePublished\":\"2025-11-07T14:10:31+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/81737613b5f669b297d9a55ee51432c9.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/11\\\/81737613b5f669b297d9a55ee51432c9.png\",\"width\":1920,\"height\":1080},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tech-lab.sios.jp\\\/archives\\\/50151#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\",\"name\":\"\u30dd\u30b1\u30b3\u30f3\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\",\"name\":\"info@pokecon.jp\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g\",\"caption\":\"info@pokecon.jp\"},\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/author\\\/infopokecon-jp\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3","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:\/\/tech-lab.sios.jp\/archives\/50151","og_locale":"ja_JP","og_type":"article","og_title":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3","og_description":"\u306f\u3058\u3081\u306b \u3069\u3082\uff01\u6700\u8fd1\u307e\u305f\u3067\u3059\u306d\u3001\u65b0\u3057\u3044\u691c\u8a3c\u3092\u9032\u3081\u308b\u305f\u3081\u306b\u74b0\u5883\u69cb\u7bc9\u3092\u3064\u3089\u3064\u3089\u3068\u3084\u3063\u3066\u3044\u308b\u9f8d\u3061\u3083\u3093\u3067\u3059\u3002AI\u958b\u767a\u3092\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u308b\u305f\u3081\u306e\u74b0\u5883\u69cb\u7bc9\u3092\u691c\u8a3c\u3057\u3066\u3044\u308b\u3093\u3067\u3059\u304c\u3001\u4eca\u56de\u306fuv\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u6a5f\u80fd\u3092\u4f7f\u3063\u305f\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u306b\u3064\u3044 [&hellip;]","og_url":"https:\/\/tech-lab.sios.jp\/archives\/50151","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-11-07T14:10:31+00:00","og_image":[{"width":1920,"height":1080,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png","type":"image\/png"}],"author":"info@pokecon.jp","twitter_card":"summary_large_image","twitter_misc":{"\u57f7\u7b46\u8005":"info@pokecon.jp","\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"3\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/22682\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab","datePublished":"2025-11-07T14:10:31+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/22682\/"},"wordCount":195,"image":{"@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/22682\/","url":"https:\/\/tech-lab.sios.jp\/archives\/50151","name":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#primaryimage"},"image":{"@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png","datePublished":"2025-11-07T14:10:31+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tech-lab.sios.jp\/archives\/50151"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/11\/81737613b5f669b297d9a55ee51432c9.png","width":1920,"height":1080},{"@type":"BreadcrumbList","@id":"https:\/\/tech-lab.sios.jp\/archives\/50151#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"uv\u3067\u89e3\u6c7a\uff01Python\u30e2\u30ce\u30ec\u30dd\u306e\u4f9d\u5b58\u95a2\u4fc2\u7ba1\u7406\u30102025\u5e74\u7248\u3011 | SIOS Tech. Lab"}]},{"@type":"WebSite","@id":"https:\/\/pokecon.jp\/job\/#website","url":"https:\/\/pokecon.jp\/job\/","name":"\u30dd\u30b1\u30b3\u30f3","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/pokecon.jp\/job\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Person","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997","name":"info@pokecon.jp","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2b0549cd9f7907c092ca5fbb283baf72337f235726e4b46fa39ec0b701ac2fe2?s=96&d=wavatar&r=g","caption":"info@pokecon.jp"},"url":"https:\/\/pokecon.jp\/job\/author\/infopokecon-jp\/"}]}},"_links":{"self":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/comments?post=22682"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22682\/revisions"}],"predecessor-version":[{"id":22684,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/22682\/revisions\/22684"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/22683"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=22682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=22682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=22682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}