{"id":7418,"date":"2026-09-18T09:33:13","date_gmt":"2026-09-18T00:33:13","guid":{"rendered":"https:\/\/techfun.cc\/?p=7418"},"modified":"2026-09-18T09:33:13","modified_gmt":"2026-09-18T00:33:13","slug":"codex-app-server-introduction","status":"publish","type":"post","link":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html","title":{"rendered":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5"},"content":{"rendered":"<h3 id=\"section-1\" class=\"Heading Title Title--m\">\u306f\u3058\u3081\u306b<\/h3>\n<p><strong>Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002<\/strong>\u4f1a\u8a71\u5c65\u6b74\u3084\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u6271\u3048\u308b\u305f\u3081\u3001\u793e\u5185\u30c4\u30fc\u30eb\u306b\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u306a\u3069\u3001\u72ec\u81ea\u306e\u753b\u9762\u304b\u3089Codex\u3092\u5229\u7528\u3067\u304d\u307e\u3059\u3002<\/p>\n<p>\u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001Codex CLI\u30fbSDK\u3068\u306e\u9055\u3044\u3001Python\u304b\u3089\u63a5\u7d9a\u3059\u308b\u624b\u9806\u3001Flask\u3067\u300c\u30ec\u30d3\u30e5\u30fc\u958b\u59cb\u300d\u30dc\u30bf\u30f3\u3092\u4f5c\u308b\u65b9\u6cd5\u3092\u89e3\u8aac\u3057\u307e\u3059\u3002Codex CLI\u3068Python\u306e\u57fa\u672c\u64cd\u4f5c\u3092\u77e5\u3063\u3066\u3044\u308b\u958b\u767a\u8005\u3092\u5bfe\u8c61\u306b\u3001\u6700\u5c0f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089Web\u30a2\u30d7\u30ea\u307e\u3067\u9806\u306b\u5b9f\u88c5\u3057\u307e\u3059\u3002<\/p>\n<p>\u6271\u3046\u306e\u306f\u3001\u30ed\u30fc\u30ab\u30eb\u74b0\u5883\u3067\u52d5\u4f5c\u3059\u308b\u30c7\u30e2\u3067\u3059\u3002\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u5411\u3051\u306e\u8a8d\u8a3c\u8a2d\u8a08\u3084\u672c\u756a\u904b\u7528\u306f\u5bfe\u8c61\u306b\u542b\u3081\u307e\u305b\u3093\u3002<\/p>\n<p>ChatGPT\u306eChat\u30fbWork\u30fbCodex\u306e\u4f7f\u3044\u5206\u3051\u306f\u3001\u6b21\u306e\u95a2\u9023\u8a18\u4e8b\u3067\u7d39\u4ecb\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<a class=\"Internal-post\" href=\"https:\/\/techfun.cc\/generative-ai\/chatgpt-chat-work-codex-differences.html\"><div class=\"Internal-post__thumb\" style=\"background: url(\/wp-content\/uploads\/2026\/09\/chatgpt-chat-work-codex-differences.png) no-repeat; background-size: cover; background-position: 50% 50%;\"><\/div><div class=\"Internal-post-content\"><div class=\"Category Category--generative-ai\"> \u751f\u6210AI\u95a2\u9023<\/div><div class=\"Internal-post__title\">ChatGPT\u306eChat\u30fbWork\u30fbCodex\u306e\u9055\u3044\uff5c5\u6642\u9593\u306e\u5229\u7528\u4e0a\u9650\u3092\u7121\u99c4\u306b\u3057\u306a\u3044\u4f7f\u3044\u5206\u3051<\/div><\/div><\/a>\n<p>\u52d5\u4f5c\u691c\u8a3c\u306fCodex CLI 0.154.0\u3067\u30012026\u5e749\u670812\u65e5\u306b\u5b9f\u65bd\u3057\u305f\u3082\u306e\u3067\u3059\u3002\u4ed5\u69d8\u306e\u51fa\u5178\u306f2026\u5e749\u670817\u65e5\u306b\u518d\u78ba\u8a8d\u3057\u307e\u3057\u305f\u3002CLI\u306e\u30d8\u30eb\u30d7\u3067\u306f\u5b9f\u9a13\u7684\u6a5f\u80fd\u3068\u3055\u308c\u3066\u3044\u308b\u305f\u3081\u3001\u518d\u73fe\u3059\u308b\u969b\u306f\u5229\u7528\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-overview.png\" alt=\"Codex App Server\u3092\u4ecb\u3057\u3066\u81ea\u4f5c\u30a2\u30d7\u30ea\u304cCodex\u3092\u52d5\u304b\u3059\u69cb\u6210\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">\u81ea\u4f5c\u30a2\u30d7\u30ea\u306fCodex App Server\u3092\u4ecb\u3057\u3066Codex\u3078\u6307\u793a\u3092\u51fa\u3057\u3001Codex\u304c\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u8abf\u67fb\u30fb\u7de8\u96c6\u30fb\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3092\u62c5\u3046<\/div>\n<h3 id=\"section-2\" class=\"Heading Title Title--m\">Codex App Server\u3068\u306f\uff1aCLI\u30fbSDK\u3068\u306e\u4f7f\u3044\u5206\u3051<\/h3>\n<p>Codex App Server\u306f\u3001Codex VS Code\u62e1\u5f35\u306a\u3069\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u3082\u4f7f\u308f\u308c\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089\u6307\u793a\u3092\u9001\u308a\u3001Codex\u304c\u8fd4\u3059\u4f5c\u696d\u72b6\u6cc1\u3084\u56de\u7b54\u3092\u753b\u9762\u306b\u8868\u793a\u3057\u307e\u3059\u3002\u8a8d\u8a3c\u72b6\u614b\u3001\u4f1a\u8a71\u5c65\u6b74\u3001\u627f\u8a8d\u306e\u3084\u308a\u53d6\u308a\u3082\u6271\u3048\u307e\u3059\uff08<a href=\"https:\/\/learn.chatgpt.com\/docs\/app-server\" class=\"Ext\">\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8<\/a>\uff09\u3002<\/p>\n<p>\u30e2\u30c7\u30eb\u306eAPI\u3092\u76f4\u63a5\u5229\u7528\u3057\u3066\u540c\u69d8\u306e\u30a2\u30d7\u30ea\u3092\u4f5c\u308b\u5834\u5408\u306f\u3001\u30d5\u30a1\u30a4\u30eb\u64cd\u4f5c\u3084\u5b9f\u884c\u6a29\u9650\u3001\u5c65\u6b74\u7ba1\u7406\u306a\u3069\u306e\u8a2d\u8a08\u3082\u5fc5\u8981\u3067\u3059\u3002App Server\u3092\u4f7f\u3046\u3068\u3001Codex\u306e\u4ed5\u7d44\u307f\u3092\u5229\u7528\u3057\u306a\u304c\u3089\u3001\u7528\u9014\u306b\u5408\u308f\u305b\u305f\u753b\u9762\u3084\u64cd\u4f5c\u3092\u5b9f\u88c5\u3067\u304d\u307e\u3059\u3002<\/p>\n<h4 id=\"section-2-1\" class=\"Heading Title Title--s\">\u5bfe\u8a71\u30fb\u81ea\u52d5\u5b9f\u884c\u30fb\u72ec\u81eaUI\u3067\u9078\u3076<\/h4>\n<table class=\"Base-table\">\n<tr>\n<th>\u65b9\u6cd5<\/th>\n<th>\u4e3b\u306a\u5229\u7528\u8005<\/th>\n<th>\u4e3b\u306a\u7528\u9014<\/th>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">codex<\/span><\/td>\n<td>\u4eba\u9593<\/td>\n<td>\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u5bfe\u8a71\u3057\u306a\u304c\u3089\u958b\u767a\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">codex exec<\/span><\/td>\n<td>\u30b9\u30af\u30ea\u30d7\u30c8<\/td>\n<td>CI\u3084\u30d0\u30c3\u30c1\u304b\u3089\u975e\u5bfe\u8a71\u30671\u56de\u5b9f\u884c\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td>Codex SDK<\/td>\n<td>\u30a2\u30d7\u30ea\u30fbCI<\/td>\n<td>\u30d7\u30ed\u30b0\u30e9\u30e0\u304b\u3089\u30bf\u30b9\u30af\u3092\u5236\u5fa1\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">codex app-server<\/span><\/td>\n<td>\u81ea\u4f5c\u30a2\u30d7\u30ea\u30fbIDE\u62e1\u5f35<\/td>\n<td>Codex\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u5b9f\u88c5\u3059\u308b<\/td>\n<\/tr>\n<\/table>\n<p>\u30b8\u30e7\u30d6\u306e\u81ea\u52d5\u5316\u3084CI\u3067\u306e\u5229\u7528\u306b\u306f\u3001\u516c\u5f0f\u3082<a href=\"https:\/\/learn.chatgpt.com\/docs\/codex-sdk\" class=\"Ext\">Codex SDK<\/a>\u3092\u6848\u5185\u3057\u3066\u3044\u307e\u3059\u3002\u4f1a\u8a71\u5c65\u6b74\u3084\u627f\u8a8d\u753b\u9762\u3001\u4f5c\u696d\u306e\u9032\u6357\u307e\u3067\u72ec\u81eaUI\u3067\u6271\u3044\u305f\u3044\u5834\u5408\u306b\u3001App Server\u304c\u9078\u629e\u80a2\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<h4 id=\"section-2-2\" class=\"Heading Title Title--s\">Python\u304b\u3089\u306e\u63a5\u7d9a\u306b\u306f\u6a19\u6e96\u5165\u51fa\u529b\u3092\u4f7f\u3046<\/h4>\n<p>\u901a\u4fe1\u65b9\u5f0f\u306f <span class=\"Post-inline\">&#8211;listen<\/span> \u3067\u9078\u3073\u307e\u3059\u3002\u65e2\u5b9a\u306e\u6a19\u6e96\u5165\u51fa\u529b\uff08stdio\uff09\u3067\u306f\u3001\u6539\u884c\u3067\u533a\u5207\u3063\u305fJSON\u3092\u9001\u53d7\u4fe1\u3057\u307e\u3059\u3002\u672c\u8a18\u4e8b\u306ePython\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3082\u3053\u306e\u65b9\u5f0f\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<p>Unix\u30bd\u30b1\u30c3\u30c8\u3084WebSocket\u306b\u3082\u5bfe\u5fdc\u3057\u3066\u3044\u307e\u3059\u3002\u305f\u3068\u3048\u3070\u3001\u6b21\u306e2\u3064\u306e\u30b3\u30de\u30f3\u30c9\u3092\u5225\u3005\u306e\u30bf\u30fc\u30df\u30ca\u30eb\u3067\u5b9f\u884c\u3059\u308b\u3068\u3001WebSocket\u3067\u5f85\u3061\u53d7\u3051\u308bApp Server\u3078Codex CLI\u304b\u3089\u63a5\u7d9a\u3067\u304d\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">bash<\/div>\n<pre class=\"Copy\"><code>\r\ncodex app-server --listen ws:\/\/127.0.0.1:4500\r\ncodex --remote ws:\/\/127.0.0.1:4500\r\n<\/code><\/pre>\n<p>Codex CLI\u3068\u81ea\u4f5c\u30a2\u30d7\u30ea\u306f\u3001\u3069\u3061\u3089\u3082App Server\u306b\u63a5\u7d9a\u3059\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306b\u306a\u308c\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306fApp Server\u30b3\u30de\u30f3\u30c9\u3068WebSocket\u63a5\u7d9a\u3092\u5b9f\u9a13\u7684\u304b\u3064\u672c\u756a\u975e\u30b5\u30dd\u30fc\u30c8\u3068\u3057\u3066\u3044\u307e\u3059\u3002stdio\u3092\u9078\u3093\u3060\u3060\u3051\u3067\u672c\u756a\u5229\u7528\u304c\u4fdd\u8a3c\u3055\u308c\u308b\u308f\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<h3 id=\"section-3\" class=\"Heading Title Title--m\">Codex App Server\u306e\u4ed5\u7d44\u307f\uff1aThread\u30fbTurn\u30fbItem<\/h3>\n<p>\u901a\u4fe1\u306b\u306f\u3001JSON\u3067\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057\u3068\u5fdc\u7b54\u3092\u3084\u308a\u53d6\u308a\u3059\u308bJSON-RPC 2.0\u306b\u6cbf\u3063\u305f\u5f62\u5f0f\u3092\u4f7f\u3044\u307e\u3059\u3002\u305f\u3060\u3057\u3001\u5404\u30e1\u30c3\u30bb\u30fc\u30b8\u306ejsonrpc\u30d5\u30a3\u30fc\u30eb\u30c9\u306f\u7701\u7565\u3057\u307e\u3059\u3002\u30ea\u30af\u30a8\u30b9\u30c8\u306f <span class=\"Post-inline\">method<\/span>\u30fb<span class=\"Post-inline\">params<\/span>\u30fb<span class=\"Post-inline\">id<\/span> \u3092\u6301\u3061\u3001\u5fdc\u7b54\u306f\u540c\u3058 <span class=\"Post-inline\">id<\/span> \u3092\u8fd4\u3057\u3001\u901a\u77e5\u306f <span class=\"Post-inline\">id<\/span> \u3092\u6301\u3061\u307e\u305b\u3093\u3002<\/p>\n<p>\u4f1a\u8a71\u5168\u4f53\u30011\u56de\u306e\u6307\u793a\u306b\u5bfe\u3059\u308b\u51e6\u7406\u3001\u305d\u306e\u4e2d\u3067\u751f\u3058\u308b\u5165\u51fa\u529b\u3092\u3001\u6b21\u306e3\u3064\u306b\u5206\u3051\u3066\u6271\u3044\u307e\u3059\u3002<\/p>\n<table class=\"Base-table\">\n<tr>\n<th>\u5358\u4f4d<\/th>\n<th>\u610f\u5473<\/th>\n<th>\u5bfe\u5fdc\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u30fb\u901a\u77e5\u306e\u4f8b<\/th>\n<\/tr>\n<tr>\n<td>Thread<\/td>\n<td>\u30e6\u30fc\u30b6\u30fc\u3068Codex\u306e\u4f1a\u8a711\u672c\u3002\u8907\u6570\u306eTurn\u3092\u542b\u3080<\/td>\n<td><span class=\"Post-inline\">thread\/start<\/span>\u3001<span class=\"Post-inline\">thread\/resume<\/span>\u3001<span class=\"Post-inline\">thread\/fork<\/span><\/td>\n<\/tr>\n<tr>\n<td>Turn<\/td>\n<td>\u30e6\u30fc\u30b6\u30fc\u306e\u6307\u793a\u3092\u53d7\u3051\u3066\u304b\u3089\u3001\u305d\u306e\u6307\u793a\u3078\u306e\u51e6\u7406\u304c\u5b8c\u4e86\u3059\u308b\u307e\u3067\u306e\u5358\u4f4d<\/td>\n<td><span class=\"Post-inline\">turn\/start<\/span>\u3001<span class=\"Post-inline\">turn\/interrupt<\/span>\u3001<span class=\"Post-inline\">turn\/steer<\/span><\/td>\n<\/tr>\n<tr>\n<td>Item<\/td>\n<td>Turn\u306e\u4e2d\u306b\u7a4d\u307e\u308c\u308b\u5165\u51fa\u529b\u306e\u6700\u5c0f\u5358\u4f4d<\/td>\n<td><span class=\"Post-inline\">item\/started<\/span>\u3001<span class=\"Post-inline\">item\/completed<\/span>\u3001<span class=\"Post-inline\">item\/agentMessage\/delta<\/span><\/td>\n<\/tr>\n<\/table>\n<p>Item\u306b\u306f\u3001\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8\u306e\u767a\u8a00\u4ee5\u5916\u306e\u4f5c\u696d\u3082\u542b\u307e\u308c\u307e\u3059\u3002\u30e6\u30fc\u30b6\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3001\u63a8\u8ad6\u3001\u30b7\u30a7\u30eb\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u3001\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u3001MCP\u30c4\u30fc\u30eb\u547c\u3073\u51fa\u3057\u3001Web\u691c\u7d22\u3001\u30ec\u30d3\u30e5\u30fc\u30e2\u30fc\u30c9\u306e\u958b\u59cb\u3068\u7d42\u4e86\u306a\u3069\u304c\u3001\u305d\u308c\u305e\u308cItem\u306e\u4e00\u7a2e\u3068\u3057\u3066\u5c4a\u304d\u307e\u3059\u30020.154.0\u306e\u30b9\u30ad\u30fc\u30de\u3067\u306f19\u7a2e\u985e\u306eItem\u304c\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u307e\u3057\u305f\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-thread-turn-item.png\" alt=\"Thread\u304cTurn\u3092\u542b\u307f\u3001Turn\u304cItem\u3092\u7a4d\u307f\u4e0a\u3052\u308b\u968e\u5c64\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">Thread\u306e\u4e2d\u306bTurn\u304c\u4e26\u3073\u3001Turn\u306e\u4e2d\u306b\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3084\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u3092\u542b\u3080Item\u304c\u7a4d\u307e\u308c\u308b<\/div>\n<p>\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u5074\u3067\u306f\u3001\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3084\u30d5\u30a1\u30a4\u30eb\u7de8\u96c6\u306a\u3069\u306e\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u3051\u53d6\u308a\u3001\u4f5c\u696d\u306e\u9032\u307f\u5177\u5408\u3092\u8868\u793a\u3067\u304d\u307e\u3059\u3002\u6700\u7d42\u56de\u7b54\u3092\u5f85\u3064\u9593\u3082\u3001\u5229\u7528\u8005\u304c\u73fe\u5728\u306e\u51e6\u7406\u3092\u628a\u63e1\u3067\u304d\u308b\u4ed5\u7d44\u307f\u3067\u3059\u3002<\/p>\n<h4 id=\"section-3-1\" class=\"Heading Title Title--s\">\u5229\u7528\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30b9\u30ad\u30fc\u30de\u3092\u78ba\u8a8d\u3059\u308b<\/h4>\n<p>\u30e1\u30bd\u30c3\u30c9\u3084\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306e\u5b9a\u7fa9\u3092\u307e\u3068\u3081\u305f\u30b9\u30ad\u30fc\u30de\u306f\u3001\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u3067\u751f\u6210\u3067\u304d\u307e\u3059\u3002\u51fa\u529b\u5185\u5bb9\u306f\u3001\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3055\u308c\u3066\u3044\u308bCodex\u306e\u30d0\u30fc\u30b8\u30e7\u30f3\u306b\u5bfe\u5fdc\u3057\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">bash<\/div>\n<pre class=\"Copy\"><code>\r\ncodex app-server generate-json-schema --out .\/schema\r\ncodex app-server generate-ts --out .\/ts\r\n<\/code><\/pre>\n<p>0.154.0\u3067\u751f\u6210\u3057\u305f\u30b9\u30ad\u30fc\u30de\u3067\u306f\u3001\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u547c\u3079\u308b\u30ea\u30af\u30a8\u30b9\u30c8\u304c99\u7a2e\u985e\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u306e\u901a\u77e5\u304c81\u7a2e\u985e\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3078\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u304c10\u7a2e\u985e\u3042\u308a\u307e\u3057\u305f\u3002\u30b5\u30fc\u30d0\u30fc\u767a\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u306f\u3001\u30b3\u30de\u30f3\u30c9\u5b9f\u884c\u3084\u30d5\u30a1\u30a4\u30eb\u5909\u66f4\u306e\u627f\u8a8d\u306a\u3069\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u30a2\u30d7\u30ea\u5074\u3067\u627f\u8a8d\u753b\u9762\u3092\u8868\u793a\u3057\u3001\u5229\u7528\u8005\u306e\u5224\u65ad\u3092\u8fd4\u3059\u969b\u306b\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<h3 id=\"section-4\" class=\"Heading Title Title--m\">Codex App Server\u3092Python\u304b\u3089\u4f7f\u3046\u624b\u9806<\/h3>\n<p>Python\u304b\u3089App Server\u3092\u5b50\u30d7\u30ed\u30bb\u30b9\u3068\u3057\u3066\u8d77\u52d5\u3057\u3001\u6a19\u6e96\u5165\u51fa\u529b\u3067JSON\u3092\u9001\u53d7\u4fe1\u3057\u307e\u3059\u3002Codex\u7528\u306e\u8ffd\u52a0SDK\u306f\u4e0d\u8981\u3067\u3059\u3002\u6700\u5c0f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306fPython\u306e\u6a19\u6e96\u30e9\u30a4\u30d6\u30e9\u30ea\u3060\u3051\u3067\u52d5\u304d\u3001\u5f8c\u534a\u306eWeb\u30a2\u30d7\u30ea\u3067\u306fFlask\u3092\u4f7f\u3044\u307e\u3059\u3002<\/p>\n<h4 id=\"section-4-1\" class=\"Heading Title Title--s\">1. \u5b9f\u884c\u74b0\u5883\u3068\u30d5\u30a1\u30a4\u30eb\u3092\u6e96\u5099\u3059\u308b<\/h4>\n<p>\u5b9f\u884c\u74b0\u5883\u306f\u4e0b\u8a18\u306e\u3088\u3046\u306b\u3057\u307e\u3057\u305f\u3002<\/p>\n<table class=\"Base-table\">\n<tr>\n<th>\u6e96\u5099\u3059\u308b\u3082\u306e<\/th>\n<th>\u6761\u4ef6<\/th>\n<\/tr>\n<tr>\n<td>Codex CLI<\/td>\n<td>\u672c\u8a18\u4e8b\u3067\u306f0.154.0\u3092\u4f7f\u7528\u3002codex &#8211;version\u3067\u78ba\u8a8d<\/td>\n<\/tr>\n<tr>\n<td>Python<\/td>\n<td>3.10\u4ee5\u4e0a<\/td>\n<\/tr>\n<tr>\n<td>uv<\/td>\n<td>Python\u74b0\u5883\u3068\u4f9d\u5b58\u95a2\u4fc2\u306e\u7ba1\u7406\u306b\u4f7f\u7528<\/td>\n<\/tr>\n<tr>\n<td>Codex\u306e\u8a8d\u8a3c<\/td>\n<td>\u540c\u3058\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc\u3067codex login\u304c\u5b8c\u4e86\u3057\u3066\u3044\u308b\u3053\u3068<\/td>\n<\/tr>\n<tr>\n<td>\u5bfe\u8c61\u30ea\u30dd\u30b8\u30c8\u30ea<\/td>\n<td>\u8abf\u67fb\u5bfe\u8c61\u306e\u30ed\u30fc\u30ab\u30ebGit\u30ea\u30dd\u30b8\u30c8\u30ea\u3002\u30ec\u30d3\u30e5\u30fc\u4f8b\u3067\u306f\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4\u3082\u5fc5\u8981<\/td>\n<\/tr>\n<\/table>\n<h4 id=\"section-4-2\" class=\"Heading Title Title--s\">2. \u63a5\u7d9a\u3092\u521d\u671f\u5316\u3057\u3066\u30b9\u30ec\u30c3\u30c9\u3092\u4f5c\u308b<\/h4>\n<p>\u901a\u4fe1\u306f\u3001\u6b21\u306e\u9806\u5e8f\u3067\u9032\u307f\u307e\u3059\u3002<\/p>\n<ol class=\"Base-list Base-list--ol\">\n<li class=\"Base-list__child\">\n        codex app-server\u3092\u5b50\u30d7\u30ed\u30bb\u30b9\u3068\u3057\u3066\u8d77\u52d5\u3057\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        initialize\u30ea\u30af\u30a8\u30b9\u30c8\u3092\u9001\u308a\u3001\u5fdc\u7b54\u3092\u53d7\u3051\u3066initialized\u901a\u77e5\u3092\u9001\u308a\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        thread\/start\u3067\u4f1a\u8a71\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        turn\/start\u3067\u6307\u793a\u3092\u9001\u308a\u3001\u30a4\u30d9\u30f3\u30c8\u3092\u53d7\u3051\u53d6\u308a\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        turn\/completed\u3067\u51e6\u7406\u7d50\u679c\u306e\u72b6\u614b\u3092\u78ba\u8a8d\u3057\u307e\u3059\u3002\n    <\/li>\n<\/ol>\n<p>\u63a5\u7d9a\u76f4\u5f8c\u306b <span class=\"Post-inline\">initialize<\/span> \u30ea\u30af\u30a8\u30b9\u30c8\u3068 <span class=\"Post-inline\">initialized<\/span> \u901a\u77e5\u3092\u9001\u308b\u306e\u304c\u5fc5\u9808\u3067\u3001\u3053\u306e\u624b\u9806\u3092\u98db\u3070\u3059\u3068\u4ee5\u964d\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306f\u300cNot initialized\u300d\u3067\u62d2\u5426\u3055\u308c\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">codex_client.py<\/div>\n<pre class=\"Copy\"><code>\r\n&quot;&quot;&quot;codex app-server \u3092\u5b50\u30d7\u30ed\u30bb\u30b9\u3068\u3057\u3066\u8d77\u52d5\u3057\u3001JSON-RPC\u3067\u5bfe\u8a71\u3059\u308b\u6700\u5c0f\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3002&quot;&quot;&quot;\r\n\r\nimport json\r\nimport subprocess\r\nimport threading\r\nimport time\r\nfrom queue import Queue\r\n\r\n\r\nclass CodexAppServer:\r\n    def __init__(self, cwd: str):\r\n        self.cwd = cwd\r\n        self.proc = subprocess.Popen(\r\n            [&quot;codex&quot;, &quot;app-server&quot;],\r\n            stdin=subprocess.PIPE,\r\n            stdout=subprocess.PIPE,\r\n            stderr=subprocess.DEVNULL,\r\n            text=True,\r\n            bufsize=1,\r\n        )\r\n        self.events: Queue = Queue()\r\n        self._results: dict = {}\r\n        self._next_id = 0\r\n        threading.Thread(target=self._read_loop, daemon=True).start()\r\n\r\n    def _read_loop(self) -&gt; None:\r\n        for line in self.proc.stdout:\r\n            line = line.strip()\r\n            if not line:\r\n                continue\r\n            message = json.loads(line)\r\n            if &quot;method&quot; in message:\r\n                self.events.put(message)  # \u30b5\u30fc\u30d0\u304b\u3089\u306e\u901a\u77e5\r\n            else:\r\n                self._results[message[&quot;id&quot;]] = message  # \u30ea\u30af\u30a8\u30b9\u30c8\u3078\u306e\u5fdc\u7b54\r\n\r\n    def _send(self, method: str, params: dict, request_id: int | None = None) -&gt; None:\r\n        message = {&quot;method&quot;: method, &quot;params&quot;: params}\r\n        if request_id is not None:\r\n            message[&quot;id&quot;] = request_id\r\n        self.proc.stdin.write(json.dumps(message) + &quot;\\n&quot;)\r\n        self.proc.stdin.flush()\r\n\r\n    def call(self, method: str, params: dict | None = None, timeout: float = 120.0) -&gt; dict:\r\n        self._next_id += 1\r\n        request_id = self._next_id\r\n        self._send(method, params or {}, request_id)\r\n        deadline = time.time() + timeout\r\n        while time.time() &lt; deadline:\r\n            if request_id in self._results:\r\n                message = self._results.pop(request_id)\r\n                if &quot;error&quot; in message:\r\n                    raise RuntimeError(f&quot;{method}: {message[&#x27;error&#x27;][&#x27;message&#x27;]}&quot;)\r\n                return message[&quot;result&quot;]\r\n            time.sleep(0.05)\r\n        raise TimeoutError(method)\r\n\r\n    def initialize(self) -&gt; dict:\r\n        client_info = {&quot;name&quot;: &quot;techfun_demo&quot;, &quot;title&quot;: &quot;Tech Fun Demo&quot;, &quot;version&quot;: &quot;0.1.0&quot;}\r\n        info = self.call(&quot;initialize&quot;, {&quot;clientInfo&quot;: client_info})\r\n        self._send(&quot;initialized&quot;, {})\r\n        return info\r\n\r\n    def start_thread(self) -&gt; dict:\r\n        params = {&quot;cwd&quot;: self.cwd, &quot;approvalPolicy&quot;: &quot;never&quot;, &quot;sandbox&quot;: &quot;read-only&quot;}\r\n        return self.call(&quot;thread\/start&quot;, params)[&quot;thread&quot;]\r\n\r\n    def close(self) -&gt; None:\r\n        self.proc.terminate()\r\n<\/code><\/pre>\n<p>\u3053\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u306f\u3001\u30e1\u30bd\u30c3\u30c9\u547c\u3073\u51fa\u3057\u3078\u306e\u5fdc\u7b54\u3068\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u5c4a\u304f\u30a4\u30d9\u30f3\u30c8\u3092\u632f\u308a\u5206\u3051\u307e\u3059\u3002\u901a\u77e5\u306b\u306fmethod\u3068params\u304c\u542b\u307e\u308c\u3001id\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u30b5\u30fc\u30d0\u30fc\u767a\u306e\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u306fid\u3082\u542b\u307e\u308c\u307e\u3059\u304c\u3001\u3053\u306e\u4f8b\u306f\u627f\u8a8d\u3092\u6c42\u3081\u306a\u3044\u8a2d\u5b9a\u306e\u305f\u3081\u3001\u305d\u306e\u5fdc\u7b54\u51e6\u7406\u306f\u5b9f\u88c5\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<h4 id=\"section-4-3\" class=\"Heading Title Title--s\">3. \u6307\u793a\u3092\u9001\u308a\u3001\u5b9f\u884c\u30a4\u30d9\u30f3\u30c8\u3092\u8868\u793a\u3059\u308b<\/h4>\n<p>hello_appserver.py\u3067\u306f\u3001\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u69cb\u6210\u3092\u8aac\u660e\u3059\u308b\u3088\u3046\u6307\u793a\u3057\u307e\u3059\u3002\u53d7\u4fe1\u3057\u305f\u30a4\u30d9\u30f3\u30c8\u304b\u3089\u3001\u5b9f\u884c\u30b3\u30de\u30f3\u30c9\u3084\u56de\u7b54\u6587\u3092\u53d6\u308a\u51fa\u3057\u3066\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">hello_appserver.py<\/div>\n<pre class=\"Copy\"><code>\r\n&quot;&quot;&quot;App Server\u3078\u6700\u521d\u306e1\u30bf\u30fc\u30f3\u3092\u6295\u3052\u3001\u8fd4\u3063\u3066\u304f\u308b\u30a4\u30d9\u30f3\u30c8\u3092\u305d\u306e\u307e\u307e\u8868\u793a\u3059\u308b\u3002&quot;&quot;&quot;\r\n\r\nimport sys\r\n\r\nfrom codex_client import CodexAppServer\r\n\r\nPROMPT = &quot;\u3053\u306e\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u69cb\u6210\u30921\u884c\u3067\u8aac\u660e\u3057\u3066\u304f\u3060\u3055\u3044\u3002&quot;\r\n\r\n\r\ndef main() -&gt; None:\r\n    cwd = sys.argv[1] if len(sys.argv) &gt; 1 else &quot;.&quot;\r\n    codex = CodexAppServer(cwd)\r\n\r\n    info = codex.initialize()\r\n    print(f&quot;userAgent : {info[&#x27;userAgent&#x27;]}&quot;)\r\n    print(f&quot;codexHome : {info[&#x27;codexHome&#x27;]}&quot;)\r\n\r\n    thread = codex.start_thread()\r\n    print(f&quot;threadId  : {thread[&#x27;id&#x27;]}&quot;)\r\n    print(f&quot;session   : {thread[&#x27;path&#x27;]}\\n&quot;)\r\n\r\n    codex.call(&quot;turn\/start&quot;, {&quot;threadId&quot;: thread[&quot;id&quot;], &quot;input&quot;: [{&quot;type&quot;: &quot;text&quot;, &quot;text&quot;: PROMPT}]})\r\n\r\n    while True:\r\n        event = codex.events.get()\r\n        method, params = event[&quot;method&quot;], event.get(&quot;params&quot;, {})\r\n        if method in (&quot;item\/started&quot;, &quot;item\/completed&quot;):\r\n            item = params[&quot;item&quot;]\r\n            print(f&quot;[{method}] {item[&#x27;type&#x27;]}&quot;)\r\n            if method == &quot;item\/completed&quot; and item[&quot;type&quot;] == &quot;agentMessage&quot;:\r\n                print(f&quot;  -&gt; {item[&#x27;text&#x27;]}&quot;)\r\n            if method == &quot;item\/completed&quot; and item[&quot;type&quot;] == &quot;commandExecution&quot;:\r\n                print(f&quot;  -&gt; $ {item[&#x27;command&#x27;]} (exit={item[&#x27;exitCode&#x27;]})&quot;)\r\n        elif method == &quot;item\/agentMessage\/delta&quot;:\r\n            print(params[&quot;delta&quot;], end=&quot;&quot;, flush=True)\r\n        elif method == &quot;error&quot;:\r\n            print(f&quot;[error] {params[&#x27;error&#x27;][&#x27;message&#x27;]}&quot;)\r\n        elif method == &quot;turn\/completed&quot;:\r\n            print(f&quot;\\n[turn\/completed] status={params[&#x27;turn&#x27;][&#x27;status&#x27;]}&quot;)\r\n            break\r\n\r\n    codex.close()\r\n\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n    main()\r\n<\/code><\/pre>\n<p>\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306e <span class=\"Post-inline\">\/path\/to\/your\/repo<\/span> \u3092\u3001\u8abf\u67fb\u5bfe\u8c61\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30d1\u30b9\u306b\u7f6e\u304d\u63db\u3048\u3066\u5b9f\u884c\u3057\u307e\u3059\u3002\u691c\u8a3c\u6642\u306fuserAgent\u3068codexHome\u306b\u7d9a\u304d\u3001\u30b9\u30ec\u30c3\u30c9ID\u3068\u4f5c\u696d\u30a4\u30d9\u30f3\u30c8\u304c\u8868\u793a\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<div class=\"Pre-title\">bash<\/div>\n<pre class=\"Copy\"><code>\r\nuv run python hello_appserver.py \/path\/to\/your\/repo\r\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-screenshot-hello-events.png\" alt=\"hello_appserver.py\u306e\u5b9f\u884c\u3067Thread\u306e\u6255\u3044\u51fa\u3057\u3068Item\u30a4\u30d9\u30f3\u30c8\u304c\u9806\u306b\u8868\u793a\u3055\u308c\u308b\u69d8\u5b50\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">initialize\u306e\u5fdc\u7b54\u3001threadId\u3001\u30bb\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u306e\u30d1\u30b9\u306b\u7d9a\u304d\u3001Codex\u306e\u4f5c\u696d\u304cItem\u30a4\u30d9\u30f3\u30c8\u3068\u3057\u3066\u6d41\u308c\u308b<\/div>\n<p><span class=\"Post-inline\">turn\/start<\/span> \u306b\u6e21\u3059 <span class=\"Post-inline\">input<\/span> \u306f\u30c6\u30ad\u30b9\u30c8\u3060\u3051\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<span class=\"Post-inline\">image<\/span>\u3001<span class=\"Post-inline\">localImage<\/span>\u3001<span class=\"Post-inline\">audio<\/span>\u3001<span class=\"Post-inline\">localAudio<\/span> \u3092\u540c\u3058\u914d\u5217\u306b\u6df7\u305c\u3089\u308c\u308b\u305f\u3081\u3001\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u6dfb\u3048\u3066\u6307\u793a\u3059\u308b\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3082\u4f5c\u308c\u307e\u3059\u3002<\/p>\n<h3 id=\"section-5\" class=\"Heading Title Title--m\">\u81ea\u4f5c\u30a2\u30d7\u30ea\u306e\u4f1a\u8a71\u3092Codex CLI\u3067\u518d\u958b\u3059\u308b<\/h3>\n<p>\u81ea\u4f5c\u30a2\u30d7\u30ea\u3067\u958b\u59cb\u3057\u305f\u4f1a\u8a71\u306f\u3001\u540c\u3058\u4fdd\u5b58\u5148\u3092\u4f7f\u3046Codex CLI\u304b\u3089\u518d\u958b\u3067\u304d\u307e\u3059\u3002\u691c\u8a3c\u3067\u306f\u3001thread\/start\u306e\u5fdc\u7b54\u306b\u542b\u307e\u308c\u308bpath\u306b\u3001\u6b21\u306e\u30bb\u30c3\u30b7\u30e7\u30f3\u30d5\u30a1\u30a4\u30eb\u304c\u8fd4\u308a\u307e\u3057\u305f\u3002<\/p>\n<div class=\"Pre-title\">text<\/div>\n<pre class=\"Copy\"><code>\r\n\/home\/ubuntu\/.codex\/sessions\/2026\/09\/12\/rollout-2026-09-12T09-19-35-01a092fb-dfe8-7862-96ce-725df9e80dcd.jsonl\r\n<\/code><\/pre>\n<p>\u4fdd\u5b58\u5148\u3068\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306f\u3001Codex CLI\u306e\u5bfe\u8a71\u30bb\u30c3\u30b7\u30e7\u30f3\u3068\u5171\u901a\u3067\u3059\u3002\u6b21\u306e\u30b3\u30de\u30f3\u30c9\u306eID\u3092\u3001hello_appserver.py\u3067\u8868\u793a\u3055\u308c\u305fthreadId\u306b\u7f6e\u304d\u63db\u3048\u308b\u3068\u3001\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u4f1a\u8a71\u3092\u7d9a\u3051\u3089\u308c\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">bash<\/div>\n<pre class=\"Copy\"><code>\r\ncodex resume 01a092fb-dfe8-7862-96ce-725df9e80dcd\r\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-screenshot-codex-resume.png\" alt=\"\u81ea\u4f5c\u30a2\u30d7\u30ea\u304c\u4f5c\u6210\u3057\u305f\u30b9\u30ec\u30c3\u30c9\u3092codex resume\u3067\u30bf\u30fc\u30df\u30ca\u30eb\u304b\u3089\u518d\u958b\u3057\u305f\u753b\u9762\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">\u81ea\u4f5c\u30a2\u30d7\u30ea\u3067\u958b\u59cb\u3057\u305f\u30b9\u30ec\u30c3\u30c9\u306eID\u3092\u6307\u5b9a\u3059\u308b\u3068\u3001Codex CLI\u304c\u540c\u3058\u4f1a\u8a71\u3092\u8aad\u307f\u8fbc\u3093\u3067\u7d9a\u304d\u304b\u3089\u5bfe\u8a71\u3067\u304d\u308b<\/div>\n<p>\u5b9f\u969b\u306b\u518d\u958b\u3057\u3066\u300c\u76f4\u524d\u306e\u56de\u7b54\u3092\u4e00\u8a00\u3067\u7e70\u308a\u8fd4\u3057\u3066\u304f\u3060\u3055\u3044\u300d\u3068\u5165\u529b\u3059\u308b\u3068\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u5074\u3067\u5f97\u3066\u3044\u305f\u56de\u7b54\u304c\u305d\u306e\u307e\u307e\u8fd4\u308a\u307e\u3057\u305f\u3002<\/p>\n<p>\u3053\u306e\u7d50\u679c\u304b\u3089\u3001\u691c\u8a3c\u74b0\u5883\u3067\u306f\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089CLI\u3078\u4f1a\u8a71\u3092\u5f15\u304d\u7d99\u3052\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3067\u304d\u307e\u3057\u305f\u3002\u5225\u306e\u74b0\u5883\u3067\u3082\u5229\u7528\u3059\u308b\u5834\u5408\u306f\u3001\u5b9f\u884c\u30e6\u30fc\u30b6\u30fc\u3068Codex\u306e\u4fdd\u5b58\u5148\uff08CODEX_HOME\uff09\u304c\u4e00\u81f4\u3057\u3066\u3044\u308b\u304b\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3 id=\"section-6\" class=\"Heading Title Title--m\">Python\u30fbFlask\u3067\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u7528Web\u30a2\u30d7\u30ea\u3092\u4f5c\u308b<\/h3>\n<p>\u6b21\u306f\u3001\u30d6\u30e9\u30a6\u30b6\u306e\u300c\u30ec\u30d3\u30e5\u30fc\u958b\u59cb\u300d\u30dc\u30bf\u30f3\u304b\u3089Codex\u3092\u547c\u3073\u51fa\u3057\u307e\u3059\u3002Python\u306eWeb\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3042\u308bFlask\u3092\u4f7f\u3044\u3001\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4\u306e\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u3092\u753b\u9762\u3078\u8868\u793a\u3057\u307e\u3059\u3002<\/p>\n<h4 id=\"section-6-1\" class=\"Heading Title Title--s\">review\/start\u3067\u30ec\u30d3\u30e5\u30fc\u5bfe\u8c61\u3092\u6307\u5b9a\u3059\u308b<\/h4>\n<p>Codex\u306e\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306f <span class=\"Post-inline\">review\/start<\/span> \u3067\u547c\u3073\u51fa\u3057\u307e\u3059\u3002target\u306b\u6307\u5b9a\u3067\u304d\u308b\u5bfe\u8c61\u306f\u3001\u6b21\u306e4\u7a2e\u985e\u3067\u3059\u3002<\/p>\n<table class=\"Base-table\">\n<tr>\n<th>target<\/th>\n<th>\u30ec\u30d3\u30e5\u30fc\u5bfe\u8c61<\/th>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">{&quot;type&quot;:&quot;uncommittedChanges&quot;}<\/span><\/td>\n<td>\u30b9\u30c6\u30fc\u30b8\u6e08\u307f\u30fb\u672a\u30b9\u30c6\u30fc\u30b8\u30fb\u672a\u8ffd\u8de1\u306e\u30d5\u30a1\u30a4\u30eb<\/td>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">{&quot;type&quot;:&quot;baseBranch&quot;,&quot;branch&quot;:&quot;main&quot;}<\/span><\/td>\n<td>\u6307\u5b9a\u30d6\u30e9\u30f3\u30c1\u3068\u306e\u5dee\u5206<\/td>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">{&quot;type&quot;:&quot;commit&quot;,&quot;sha&quot;:&quot;abc1234&quot;}<\/span><\/td>\n<td>\u7279\u5b9a\u306e\u30b3\u30df\u30c3\u30c8<\/td>\n<\/tr>\n<tr>\n<td><span class=\"Post-inline\">{&quot;type&quot;:&quot;custom&quot;,&quot;instructions&quot;:&quot;&#8230;&quot;}<\/span><\/td>\n<td>\u81ea\u7531\u8a18\u8ff0\u306e\u6307\u793a<\/td>\n<\/tr>\n<\/table>\n<p><span class=\"Post-inline\">delivery<\/span> \u306f <span class=\"Post-inline\">inline<\/span> \u3092\u6307\u5b9a\u3057\u3001\u65e2\u5b58\u30b9\u30ec\u30c3\u30c9\u4e0a\u306eTurn\u3068\u3057\u3066\u30ec\u30d3\u30e5\u30fc\u3092\u5b9f\u884c\u3057\u307e\u3059\u3002\u30ec\u30d3\u30e5\u30fc\u7528\u30b9\u30ec\u30c3\u30c9\u3092\u5206\u5c90\u3055\u305b\u308bdetached\u306f\u30010.154.0\u306e\u30b9\u30ad\u30fc\u30de\u3067\u306f\u975e\u63a8\u5968\u3067\u3059\u3002\u691c\u8a3c\u74b0\u5883\u3067\u306f\u300cpaginated threads do not support detached review\u300d\u3068\u3044\u3046\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002<\/p>\n<p>\u30ec\u30d3\u30e5\u30fc\u5c02\u7528\u306e\u30b9\u30ec\u30c3\u30c9\u3092\u5206\u3051\u305f\u3044\u5834\u5408\u306f\u3001thread\/start\u3067\u65b0\u3057\u304f\u4f5c\u6210\u3057\u3066\u304b\u3089inline\u3067\u5b9f\u884c\u3057\u307e\u3059\u3002<\/p>\n<h4 id=\"section-6-2\" class=\"Heading Title Title--s\">Flask\u304b\u3089\u30ec\u30d3\u30e5\u30fc\u3092\u958b\u59cb\u3057\u3066\u7d50\u679c\u3092\u4e2d\u7d99\u3059\u308b<\/h4>\n<p>app.py\u306f\u3001\u30dc\u30bf\u30f3\u304c\u62bc\u3055\u308c\u308b\u3068App Server\u3092\u8d77\u52d5\u3057\u3001\u30ec\u30d3\u30e5\u30fc\u3092\u958b\u59cb\u3057\u307e\u3059\u3002\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u30d6\u30e9\u30a6\u30b6\u3078\u7d99\u7d9a\u7684\u306b\u30c7\u30fc\u30bf\u3092\u9001\u308bServer-Sent Events\uff08SSE\uff09\u3092\u4f7f\u3044\u3001\u5b9f\u884c\u30b3\u30de\u30f3\u30c9\u3068\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u3092\u4e2d\u7d99\u3057\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">app.py<\/div>\n<pre class=\"Copy\"><code>\r\n&quot;&quot;&quot;\u300c\u30ec\u30d3\u30e5\u30fc\u958b\u59cb\u300d\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068 review\/start \u3092\u547c\u3073\u3001\u7d50\u679c\u3092SSE\u3067\u6d41\u3059Web\u30a2\u30d7\u30ea\u3002&quot;&quot;&quot;\r\n\r\nimport json\r\nimport os\r\n\r\nfrom flask import Flask, Response, render_template\r\n\r\nfrom codex_client import CodexAppServer\r\n\r\napp = Flask(__name__)\r\nPROJECT_DIR = os.environ.get(&quot;REVIEW_PROJECT_DIR&quot;, os.getcwd())\r\n\r\n\r\ndef sse(label: str, text: str) -&gt; str:\r\n    return f&quot;data: {json.dumps({&#x27;label&#x27;: label, &#x27;text&#x27;: text}, ensure_ascii=False)}\\n\\n&quot;\r\n\r\n\r\n@app.get(&quot;\/&quot;)\r\ndef index() -&gt; str:\r\n    return render_template(&quot;index.html&quot;, project_dir=PROJECT_DIR)\r\n\r\n\r\n@app.get(&quot;\/review&quot;)\r\ndef review() -&gt; Response:\r\n    def stream():\r\n        codex = CodexAppServer(PROJECT_DIR)\r\n        codex.initialize()\r\n        thread = codex.start_thread()\r\n        yield sse(&quot;thread&quot;, thread[&quot;id&quot;])\r\n\r\n        codex.call(\r\n            &quot;review\/start&quot;,\r\n            {\r\n                &quot;threadId&quot;: thread[&quot;id&quot;],\r\n                &quot;delivery&quot;: &quot;inline&quot;,\r\n                &quot;target&quot;: {&quot;type&quot;: &quot;uncommittedChanges&quot;},\r\n            },\r\n        )\r\n\r\n        while True:\r\n            event = codex.events.get()\r\n            method, params = event[&quot;method&quot;], event.get(&quot;params&quot;, {})\r\n            if method == &quot;item\/completed&quot;:\r\n                item = params[&quot;item&quot;]\r\n                if item[&quot;type&quot;] == &quot;exitedReviewMode&quot;:\r\n                    yield sse(&quot;review&quot;, item[&quot;review&quot;])\r\n                elif item[&quot;type&quot;] == &quot;commandExecution&quot;:\r\n                    yield sse(&quot;command&quot;, f&quot;$ {item[&#x27;command&#x27;]}&quot;)\r\n            elif method == &quot;error&quot; and not params[&quot;willRetry&quot;]:\r\n                yield sse(&quot;error&quot;, params[&quot;error&quot;][&quot;message&quot;])\r\n            elif method == &quot;turn\/completed&quot;:\r\n                yield sse(&quot;done&quot;, params[&quot;turn&quot;][&quot;status&quot;])\r\n                break\r\n\r\n        codex.close()\r\n\r\n    return Response(stream(), mimetype=&quot;text\/event-stream&quot;)\r\n\r\n\r\nif __name__ == &quot;__main__&quot;:\r\n    app.run(port=5000, threaded=True)\r\n<\/code><\/pre>\n<p>\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u306f <span class=\"Post-inline\">exitedReviewMode<\/span> \u3068\u3044\u3046Item\u306e <span class=\"Post-inline\">review<\/span> \u306b\u3001\u5168\u4f53\u306e\u8aac\u660e\u3068\u6307\u6458\u306e\u7b87\u6761\u66f8\u304d\u304c\u307e\u3068\u307e\u3063\u305f\u30d7\u30ec\u30fc\u30f3\u30c6\u30ad\u30b9\u30c8\u3068\u3057\u3066\u5165\u308a\u307e\u3059\u3002\u6307\u6458\u30921\u4ef6\u305a\u3064\u69cb\u9020\u5316\u3057\u3066\u53d7\u3051\u53d6\u308b\u5fc5\u8981\u304c\u306a\u3051\u308c\u3070\u3001\u3053\u306e\u6587\u5b57\u5217\u3092\u305d\u306e\u307e\u307e\u8868\u793a\u3059\u308c\u3070\u5341\u5206\u3067\u3059\u3002<\/p>\n<h4 id=\"section-6-3\" class=\"Heading Title Title--s\">\u30d6\u30e9\u30a6\u30b6\u306b\u30dc\u30bf\u30f3\u3068\u7d50\u679c\u306e\u8868\u793a\u6b04\u3092\u7528\u610f\u3059\u308b<\/h4>\n<p>templates\/index.html\u306b\u306f\u3001\u958b\u59cb\u30dc\u30bf\u30f3\u3068\u30ed\u30b0\u306e\u8868\u793a\u6b04\u3092\u7f6e\u304d\u307e\u3059\u3002\u30d6\u30e9\u30a6\u30b6\u306eEventSource\u3067SSE\u306b\u63a5\u7d9a\u3057\u3001\u53d7\u3051\u53d6\u3063\u305f\u5185\u5bb9\u3092\u9806\u306b\u8ffd\u52a0\u3057\u307e\u3059\u3002<\/p>\n<div class=\"Pre-title\">templates\/index.html<\/div>\n<pre class=\"Copy\"><code>\r\n&lt;!DOCTYPE html&gt;\r\n&lt;html lang=&quot;ja&quot;&gt;\r\n&lt;head&gt;\r\n  &lt;meta charset=&quot;utf-8&quot;&gt;\r\n  &lt;title&gt;Codex Review Button&lt;\/title&gt;\r\n  &lt;style&gt;\r\n    body { font-family: sans-serif; margin: 2rem; max-width: 48rem; }\r\n    button { font-size: 1rem; padding: 0.6rem 1.4rem; }\r\n    pre { background: #f6f8fa; padding: 1rem; white-space: pre-wrap; }\r\n    .label { color: #2d6be4; font-weight: bold; }\r\n  &lt;\/style&gt;\r\n&lt;\/head&gt;\r\n&lt;body&gt;\r\n  &lt;h1&gt;Codex \u30ec\u30d3\u30e5\u30fc\u30dc\u30bf\u30f3&lt;\/h1&gt;\r\n  &lt;p&gt;\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea: &lt;code&gt;{{ project_dir }}&lt;\/code&gt; \u306e\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4&lt;\/p&gt;\r\n  &lt;button id=&quot;start&quot;&gt;\u30ec\u30d3\u30e5\u30fc\u958b\u59cb&lt;\/button&gt;\r\n  &lt;pre id=&quot;log&quot;&gt;&lt;\/pre&gt;\r\n  &lt;script&gt;\r\n    const log = document.getElementById(&quot;log&quot;);\r\n    document.getElementById(&quot;start&quot;).addEventListener(&quot;click&quot;, () =&gt; {\r\n      log.textContent = &quot;&quot;;\r\n      const source = new EventSource(&quot;\/review&quot;);\r\n      source.onmessage = (event) =&gt; {\r\n        const { label, text } = JSON.parse(event.data);\r\n        log.insertAdjacentHTML(&quot;beforeend&quot;,\r\n          `&lt;span class=&quot;label&quot;&gt;[${label}]&lt;\/span&gt; ${text}\\n`);\r\n        if (label === &quot;done&quot;) source.close();\r\n      };\r\n    });\r\n  &lt;\/script&gt;\r\n&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/code><\/pre>\n<h4 id=\"section-6-4\" class=\"Heading Title Title--s\">Web\u30a2\u30d7\u30ea\u3092\u8d77\u52d5\u3057\u3066\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u3092\u78ba\u8a8d\u3059\u308b<\/h4>\n<p>REVIEW_PROJECT_DIR\u306b\u3001\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4\u304c\u3042\u308bGit\u30ea\u30dd\u30b8\u30c8\u30ea\u306e\u30d1\u30b9\u3092\u6307\u5b9a\u3057\u307e\u3059\u3002\u8d77\u52d5\u5f8c\u3001\u30d6\u30e9\u30a6\u30b6\u3067 http:\/\/127.0.0.1:5000\/ \u3092\u958b\u3044\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<div class=\"Pre-title\">bash<\/div>\n<pre class=\"Copy\"><code>\r\nuv sync --locked\r\nREVIEW_PROJECT_DIR=\/path\/to\/your\/repo uv run python app.py\r\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-screenshot-review-button.png\" alt=\"\u30ec\u30d3\u30e5\u30fc\u958b\u59cb\u30dc\u30bf\u30f3\u3068\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3060\u3051\u304c\u8868\u793a\u3055\u308c\u305fWeb\u30a2\u30d7\u30ea\u306e\u521d\u671f\u753b\u9762\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">Web\u30a2\u30d7\u30ea\u306e\u521d\u671f\u753b\u9762\u3002\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4\u3092\u30ec\u30d3\u30e5\u30fc\u3059\u308b\u30dc\u30bf\u30f3\u3060\u3051\u3092\u7f6e\u3044\u3066\u3044\u308b<\/div>\n<p>\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u3001threadId\u304c\u8868\u793a\u3055\u308c\u3001Codex\u304c <span class=\"Post-inline\">git status<\/span> \u3084 <span class=\"Post-inline\">git diff<\/span> \u3092\u78ba\u8a8d\u3057\u3066\u3044\u304f\u904e\u7a0b\u304c\u6d41\u308c\u3001\u6700\u5f8c\u306b\u30ec\u30d3\u30e5\u30fc\u672c\u6587\u304c\u5c4a\u304d\u307e\u3059\u3002<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction-screenshot-review-stream.png\" alt=\"\u30dc\u30bf\u30f3\u62bc\u4e0b\u5f8c\u306bthreadId\u3001\u5b9f\u884c\u30b3\u30de\u30f3\u30c9\u3001\u30ec\u30d3\u30e5\u30fc\u672c\u6587\u304c\u9806\u306b\u8868\u793a\u3055\u308c\u308b\u753b\u9762\" class=\"content_img\" \/><\/p>\n<div class=\"Image-caption\">\u30dc\u30bf\u30f3\u62bc\u4e0b\u5f8c\u3001Codex\u304c\u5b9f\u884c\u3057\u305f\u30b3\u30de\u30f3\u30c9\u3068\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u304cSSE\u3067\u9806\u306b\u6d41\u308c\u3066\u304f\u308b<\/div>\n<p>\u3053\u306e\u30c7\u30e2\u306f\u3001codex login\u3067\u8a2d\u5b9a\u6e08\u307f\u306e\u8a8d\u8a3c\u3092\u5229\u7528\u3057\u307e\u3059\u3002\u30a2\u30d7\u30ea\u306e\u30b3\u30fc\u30c9\u306bOpenAI\u306eAPI\u30ad\u30fc\u3092\u8a18\u8ff0\u3059\u308b\u5fc5\u8981\u306f\u3042\u308a\u307e\u305b\u3093\u3002Codex\u5074\u306e\u8a8d\u8a3c\u306f\u5fc5\u8981\u306a\u306e\u3067\u3001\u30ed\u30b0\u30a4\u30f3\u6e08\u307f\u306e\u30e6\u30fc\u30b6\u30fc\u3068\u540c\u3058\u74b0\u5883\u304b\u3089\u8d77\u52d5\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<h3 id=\"section-7\" class=\"Heading Title Title--m\">Codex App Server\u306e\u5b9f\u88c5\u3067\u6ce8\u610f\u3059\u308b\u70b9<\/h3>\n<h4 id=\"section-7-1\" class=\"Heading Title Title--s\">\u30d1\u30e9\u30e1\u30fc\u30bf\u30fc\u306e\u8868\u8a18\u306f\u751f\u6210\u3057\u305f\u30b9\u30ad\u30fc\u30de\u3067\u78ba\u8a8d\u3059\u308b<\/h4>\n<p>\u691c\u8a3c\u6642\u306b\u306f\u3001\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306e\u4f8b\u30680.154.0\u306e\u5217\u6319\u5024\u304c\u4e00\u81f4\u3057\u306a\u3044\u7b87\u6240\u304c\u3042\u308a\u307e\u3057\u305f\u3002thread\/start\u306esandbox\u306b workspaceWrite \u3092\u6e21\u3059\u3068\u3001\u6b21\u306e\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f\u3002<\/p>\n<div class=\"Pre-title\">text<\/div>\n<pre class=\"Copy\"><code>\r\nInvalid request: unknown variant `workspaceWrite`, expected one of `read-only`, `workspace-write`, `danger-full-access`\r\n<\/code><\/pre>\n<p>\u6307\u5b9a\u5148\u306b\u3088\u3063\u3066\u3001\u540c\u3058\u6982\u5ff5\u3067\u3082\u8868\u8a18\u304c\u7570\u306a\u308a\u307e\u3059\u3002<\/p>\n<table class=\"Base-table\">\n<tr>\n<th>\u6307\u5b9a\u5148<\/th>\n<th>\u66f8\u304d\u8fbc\u307f\u3092\u8a31\u53ef\u3059\u308b\u5024<\/th>\n<\/tr>\n<tr>\n<td>thread\/start\u306esandbox<\/td>\n<td><span class=\"Post-inline\">&quot;workspace-write&quot;<\/span><\/td>\n<\/tr>\n<tr>\n<td>turn\/start\u306esandboxPolicy<\/td>\n<td><span class=\"Post-inline\">{&quot;type&quot;: &quot;workspaceWrite&quot;}<\/span><\/td>\n<\/tr>\n<\/table>\n<p>\u5024\u304c\u53d7\u3051\u4ed8\u3051\u3089\u308c\u306a\u3044\u5834\u5408\u306f\u3001\u5229\u7528\u30d0\u30fc\u30b8\u30e7\u30f3\u3067\u751f\u6210\u3057\u305f\u30b9\u30ad\u30fc\u30de\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u307e\u305f\u3001\u4e00\u90e8\u306e\u5b9f\u9a13\u7684\u306a\u30e1\u30bd\u30c3\u30c9\u3084\u30d5\u30a3\u30fc\u30eb\u30c9\u306b\u306f\u3001initialize\u306e capabilities.experimentalApi \u3092true\u306b\u3059\u308b\u8a2d\u5b9a\u304c\u5fc5\u8981\u3067\u3059\u3002\u4eca\u56de\u306e\u30b5\u30f3\u30d7\u30eb\u3067\u4f7f\u3046\u7bc4\u56f2\u3067\u306f\u4e0d\u8981\u3067\u3057\u305f\u3002<\/p>\n<h4 id=\"section-7-2\" class=\"Heading Title Title--s\">\u8aad\u307f\u53d6\u308a\u5c02\u7528\u3068\u627f\u8a8d\u306a\u3057\u306e\u8a2d\u5b9a\u3092\u533a\u5225\u3059\u308b<\/h4>\n<p>\u30b5\u30f3\u30d7\u30eb\u3067\u306f sandbox \u3092read-only\u3001approvalPolicy\u3092never\u306b\u3057\u3066\u3044\u307e\u3059\u3002read-only\u306f\u30d5\u30a1\u30a4\u30eb\u306e\u66f8\u304d\u8fbc\u307f\u3092\u5236\u9650\u3059\u308b\u8a2d\u5b9a\u3067\u3059\u3002never\u306f\u627f\u8a8d\u3092\u6c42\u3081\u306a\u3044\u8a2d\u5b9a\u3067\u3042\u308a\u3001\u3042\u3089\u3086\u308b\u64cd\u4f5c\u3092\u8a31\u53ef\u3059\u308b\u610f\u5473\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>\u627f\u8a8d\u3092\u6c42\u3081\u308b\u8a2d\u5b9a\u306b\u5909\u66f4\u3059\u308b\u5834\u5408\u306f\u3001\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u5c4a\u304f\u627f\u8a8d\u30ea\u30af\u30a8\u30b9\u30c8\u306b\u5fdc\u7b54\u3059\u308b\u51e6\u7406\u304c\u5fc5\u8981\u3067\u3059\u3002\u4ee3\u8868\u4f8b\u306f item\/commandExecution\/requestApproval \u3068 item\/fileChange\/requestApproval \u3067\u3059\u3002\u30b5\u30f3\u30d7\u30eb\u306f\u3053\u306e\u5fdc\u7b54\u51e6\u7406\u3092\u7701\u3044\u3066\u3044\u308b\u305f\u3081\u3001\u305d\u306e\u307e\u307e\u8a2d\u5b9a\u3060\u3051\u5909\u66f4\u3059\u308b\u3068\u627f\u8a8d\u5f85\u3061\u3067\u505c\u6b62\u3059\u308b\u53ef\u80fd\u6027\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h4 id=\"section-7-3\" class=\"Heading Title Title--s\">\u30a8\u30e9\u30fc\u901a\u77e5\u3068\u30ec\u30d3\u30e5\u30fc\u7d50\u679c\u306e\u91cd\u8907\u3092\u6271\u3046<\/h4>\n<p>error\u901a\u77e5\u306b\u306f\u3001\u81ea\u52d5\u3067\u518d\u8a66\u884c\u3059\u308b\u304b\u3092\u793a\u3059willRetry\u304c\u542b\u307e\u308c\u307e\u3059\u3002\u4eca\u56de\u306eWeb\u30a2\u30d7\u30ea\u306f\u3001\u518d\u8a66\u884c\u3057\u306a\u3044\u30a8\u30e9\u30fc\u3060\u3051\u3092\u753b\u9762\u306b\u8868\u793a\u3059\u308b\u69cb\u6210\u3067\u3059\u3002<\/p>\n<p>\u691c\u8a3c\u3067\u306f\u3001exitedReviewMode\u306ereview\u3068\u3001\u305d\u306e\u5f8c\u306eagentMessage\u306etext\u306b\u540c\u3058\u30ec\u30d3\u30e5\u30fc\u672c\u6587\u304c\u5c4a\u304d\u307e\u3057\u305f\u3002\u4e21\u65b9\u3092\u8868\u793a\u3059\u308b\u3068\u91cd\u8907\u3059\u308b\u305f\u3081\u3001app.py\u3067\u306f\u524d\u8005\u3060\u3051\u3092\u8868\u793a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h4 id=\"section-7-4\" class=\"Heading Title Title--s\">\u5b9f\u9a13\u7684\u6a5f\u80fd\u3068\u672c\u756a\u5229\u7528\u306e\u6761\u4ef6\u3092\u78ba\u8a8d\u3059\u308b<\/h4>\n<p>CLI\u306e\u30d8\u30eb\u30d7\u3067\u306fApp Server\u3092\u5b9f\u9a13\u7684\u6a5f\u80fd\u3068\u3057\u3066\u6271\u3063\u3066\u3044\u307e\u3059\u3002\u30e1\u30bd\u30c3\u30c9\u3084\u5217\u6319\u5024\u306f\u5909\u308f\u308a\u5f97\u308b\u305f\u3081\u3001\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u66f4\u65b0\u3057\u305f\u969b\u306f\u30b9\u30ad\u30fc\u30de\u3068\u52d5\u4f5c\u306e\u518d\u78ba\u8a8d\u304c\u5fc5\u8981\u3067\u3059\u3002\u672c\u8a18\u4e8b\u306e\u30c7\u30e2\u3060\u3051\u3067\u306f\u3001\u672c\u756a\u3067\u306e\u5b89\u5b9a\u6027\u3084\u8907\u6570\u30e6\u30fc\u30b6\u30fc\u3067\u306e\u904b\u7528\u306f\u5224\u65ad\u3067\u304d\u307e\u305b\u3093\u3002<\/p>\n<p>\u4f01\u696d\u5411\u3051\u306b\u9023\u643a\u6a5f\u80fd\u3092\u958b\u767a\u3059\u308b\u5834\u5408\u306f\u3001clientInfo.name\u306e\u6271\u3044\u3082\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u3053\u306e\u5024\u306fOpenAI\u306e\u30b3\u30f3\u30d7\u30e9\u30a4\u30a2\u30f3\u30b9\u30ed\u30b0\u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u8b58\u5225\u3059\u308b\u305f\u3081\u306b\u4f7f\u308f\u308c\u307e\u3059\u3002\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u306f\u3001\u4f01\u696d\u5411\u3051\u306e\u65b0\u3057\u3044\u9023\u643a\u306b\u3064\u3044\u3066\u3001\u65e2\u77e5\u306e\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u4e00\u89a7\u3078\u8ffd\u52a0\u3059\u308b\u305f\u3081OpenAI\u3078\u9023\u7d61\u3059\u308b\u3088\u3046\u6848\u5185\u3057\u3066\u3044\u307e\u3059\uff08<a href=\"https:\/\/learn.chatgpt.com\/docs\/app-server#initialization\" class=\"Ext\">\u521d\u671f\u5316\u306e\u8aac\u660e<\/a>\uff09\u3002<\/p>\n<h3 id=\"section-8\" class=\"Heading Title Title--m\">Codex App Server\u306e\u6d3b\u7528\u4f8b\uff1a\u30ec\u30d3\u30e5\u30fc\u753b\u9762\u3084\u4f1a\u8a71\u5c65\u6b74\u306e\u8868\u793a<\/h3>\n<p>\u4eca\u56de\u78ba\u8a8d\u3057\u305f\u306e\u306f\u3001\u672a\u30b3\u30df\u30c3\u30c8\u5909\u66f4\u3092\u30ec\u30d3\u30e5\u30fc\u3059\u308b\u30ed\u30fc\u30ab\u30ebWeb\u30a2\u30d7\u30ea\u3067\u3059\u3002\u540c\u3058\u4ed5\u7d44\u307f\u306e\u5fdc\u7528\u4f8b\u3068\u3057\u3066\u3001\u6b21\u306e\u3088\u3046\u306a\u6a5f\u80fd\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002\u3044\u305a\u308c\u3082\u3001\u672c\u8a18\u4e8b\u3067\u306f\u5b9f\u88c5\u30fb\u52d5\u4f5c\u691c\u8a3c\u3057\u3066\u3044\u307e\u305b\u3093\u3002<\/p>\n<table class=\"Base-table\">\n<tr>\n<th>\u6d3b\u7528\u4f8b<\/th>\n<th>\u5229\u7528\u3059\u308b\u30e1\u30bd\u30c3\u30c9\u30fb\u8ffd\u52a0\u3059\u308b\u51e6\u7406<\/th>\n<\/tr>\n<tr>\n<td>\u30ea\u30dd\u30b8\u30c8\u30ea\u3054\u3068\u306e\u30ec\u30d3\u30e5\u30fc\u753b\u9762<\/td>\n<td>\u5bfe\u8c61\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u9078\u3073\u3001review\/start\u3092\u5b9f\u884c\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td>\u30d6\u30e9\u30f3\u30c1\u5dee\u5206\u306e\u30ec\u30d3\u30e5\u30fc<\/td>\n<td>review\/start\u306etarget\u3092baseBranch\u306b\u5909\u66f4\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td>\u904e\u53bb\u306e\u4f1a\u8a71\u4e00\u89a7\u3068\u518d\u958b\u30dc\u30bf\u30f3<\/td>\n<td>thread\/list\u3067\u4e00\u89a7\u3092\u53d6\u5f97\u3057\u3001thread\/resume\u3067\u518d\u958b\u3059\u308b<\/td>\n<\/tr>\n<tr>\n<td>\u5b9f\u884c\u4e2d\u306e\u4f5c\u696d\u3078\u306e\u8ffd\u52a0\u6307\u793a<\/td>\n<td>turn\/steer\u3067\u73fe\u5728\u306eTurn\u3078\u6307\u793a\u3092\u9001\u308b<\/td>\n<\/tr>\n<\/table>\n<p>\u305f\u3068\u3048\u3070\u3001\u30a2\u30d7\u30ea\u3067\u5b9a\u578b\u30ec\u30d3\u30e5\u30fc\u3092\u958b\u59cb\u3057\u3001\u8a73\u3057\u304f\u78ba\u8a8d\u3057\u305f\u3044\u6307\u6458\u304c\u3042\u308c\u3070CLI\u3067\u4f1a\u8a71\u3092\u7d9a\u3051\u308b\u904b\u7528\u304c\u8003\u3048\u3089\u308c\u307e\u3059\u3002Codex\u5074\u306e\u5c65\u6b74\u3092\u5229\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u7528\u9014\u3054\u3068\u306b\u64cd\u4f5c\u753b\u9762\u3092\u7528\u610f\u3067\u304d\u307e\u3059\u3002<\/p>\n<h3 id=\"section-9\" class=\"Heading Title Title--m\">\u307e\u3068\u3081<\/h3>\n<p>Codex App Server\u3092\u4f7f\u3046\u3068\u3001\u4f1a\u8a71\u5c65\u6b74\u3084\u5b9f\u884c\u30a4\u30d9\u30f3\u30c8\u3092\u6271\u3046\u72ec\u81ea\u306eCodex\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u3092\u4f5c\u308c\u307e\u3059\u3002\u672c\u8a18\u4e8b\u3067\u306f\u3001Python\u304b\u3089\u306e\u63a5\u7d9a\u3001CLI\u3067\u306e\u4f1a\u8a71\u518d\u958b\u3001Flask\u306e\u30ec\u30d3\u30e5\u30fc\u30dc\u30bf\u30f3\u307e\u3067\u3092\u7d39\u4ecb\u3057\u307e\u3057\u305f\u3002<\/p>\n<ul class=\"Base-list\">\n<li class=\"Base-list__child\">\u72ec\u81eaUI\u3067\u4f1a\u8a71\u5c65\u6b74\u30fb\u627f\u8a8d\u30fb\u9032\u6357\u3092\u6271\u3046\u5834\u5408\u306fApp Server\u3001\u30b8\u30e7\u30d6\u306e\u81ea\u52d5\u5316\u306b\u306fCodex SDK\u304c\u9078\u629e\u80a2\u306b\u306a\u308a\u307e\u3059\u3002<\/li>\n<li class=\"Base-list__child\">\u4f1a\u8a71\u306fThread\u30011\u56de\u306e\u51e6\u7406\u306fTurn\u3001\u305d\u306e\u4e2d\u306e\u5165\u51fa\u529b\u306fItem\u3068\u3057\u3066\u6271\u3044\u307e\u3059\u3002<\/li>\n<li class=\"Base-list__child\">\u4eca\u56de\u306e\u30c7\u30e2\u306f\u3001\u6a19\u6e96\u5165\u51fa\u529b\u3068JSON-RPC\u3092\u4f7f\u3044\u3001Codex\u5074\u306e\u30ed\u30b0\u30a4\u30f3\u72b6\u614b\u3067\u52d5\u4f5c\u3057\u307e\u3059\u3002<\/li>\n<\/ul>\n<p>\u307e\u305a\u306f\u8aad\u307f\u53d6\u308a\u5c02\u7528\u306e\u8a2d\u5b9a\u3067hello_appserver.py\u3092\u5b9f\u884c\u3057\u3001\u30a4\u30d9\u30f3\u30c8\u306e\u53d7\u4fe1\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002\u305d\u306e\u5f8c\u3001\u30ec\u30d3\u30e5\u30fc\u30dc\u30bf\u30f3\u306e\u5b9f\u88c5\u3078\u9032\u3080\u3068\u3001Codex\u3068\u306e\u901a\u4fe1\u3068\u753b\u9762\u8868\u793a\u3092\u9806\u306b\u7406\u89e3\u3067\u304d\u307e\u3059\u3002\u8a2d\u5b9a\u3084\u6a5f\u80fd\u3092\u8ffd\u52a0\u3059\u308b\u969b\u306f\u3001\u5229\u7528\u30d0\u30fc\u30b8\u30e7\u30f3\u306e\u30b9\u30ad\u30fc\u30de\u3092\u78ba\u8a8d\u3057\u3001\u627f\u8a8d\u3078\u306e\u5fdc\u7b54\u306a\u3069\u5fc5\u8981\u306a\u51e6\u7406\u3092\u88dc\u3063\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n<p>\u53c2\u8003\u30ea\u30f3\u30af:<\/p>\n<ul class=\"Base-list\">\n<li class=\"Base-list__child\"><a href=\"https:\/\/learn.chatgpt.com\/docs\/app-server\" class=\"Ext\">Codex App Server\uff08\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff09<\/a><\/li>\n<li class=\"Base-list__child\"><a href=\"https:\/\/github.com\/openai\/codex\/tree\/main\/codex-rs\/app-server\" class=\"Ext\">codex-app-server\uff08GitHub\uff09<\/a><\/li>\n<li class=\"Base-list__child\"><a href=\"https:\/\/learn.chatgpt.com\/docs\/codex-sdk\" class=\"Ext\">Codex SDK\uff08\u516c\u5f0f\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\uff09<\/a><\/li>\n<\/ul>\n<h3 id=\"section-10\" class=\"Heading Title Title--m\">\u751f\u6210AI\u6d3b\u7528\u652f\u63f4\u30b5\u30fc\u30d3\u30b9\u306e\u3054\u7d39\u4ecb<\/h3>\n<p>Tech Fun\u3067\u306f\u3001\u304a\u5ba2\u69d8\u306e\u30d5\u30a7\u30fc\u30ba\u306b\u5408\u308f\u305b\u3001\u751f\u6210AI\u6d3b\u7528\u306b\u5411\u3051\u305f\u69d8\u3005\u306a\u652f\u63f4\u3092\u3054\u63d0\u4f9b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<ol class=\"Base-list Base-list--ol\">\n<li class=\"Base-list__child\">\n        <a href=\"https:\/\/www.techfun.co.jp\/services\/ai\/diagnosis\/\" class=\"Ext\">\u7121\u6599\u8a3a\u65ad\u30d1\u30c3\u30af<\/a>\uff1a\u696d\u52d9\u30fb\u30d7\u30ed\u30bb\u30b9\u306e\u73fe\u72b6\u3092\u7121\u6599\u3067\u8a3a\u65ad\u3057\u3001\u751f\u6210AI\u6d3b\u7528\u306e\u53ef\u80fd\u6027\u3092\u30ec\u30dd\u30fc\u30c8\u3057\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        <a href=\"https:\/\/www.techfun.co.jp\/services\/ai\/poc\/\" class=\"Ext\">\u691c\u8a3c\uff08PoC\uff09\u30d1\u30c3\u30af<\/a>\uff1a\u8a3a\u65ad\u3067\u6709\u52b9\u6027\u304c\u78ba\u8a8d\u3055\u308c\u305f\u696d\u52d9\u3092\u5bfe\u8c61\u306b\u3001\u30d7\u30ed\u30c8\u30bf\u30a4\u30d7\u69cb\u7bc9\u3092\u652f\u63f4\u3057\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        <a href=\"https:\/\/www.techfun.co.jp\/services\/ai\/consulting\/\" class=\"Ext\">\u30b3\u30f3\u30b5\u30eb\u30c6\u30a3\u30f3\u30b0\u30b5\u30fc\u30d3\u30b9<\/a>\uff1a\u751f\u6210AI\u5c0e\u5165\u6226\u7565\u306e\u7b56\u5b9a\u304b\u3089\u904b\u7528\u4f53\u5236\u69cb\u7bc9\u307e\u3067\u3092\u5305\u62ec\u7684\u306b\u652f\u63f4\u3057\u307e\u3059\u3002\n    <\/li>\n<li class=\"Base-list__child\">\n        <a href=\"https:\/\/www.techfun.co.jp\/services\/ai\/plain-rag\/\" class=\"Ext\">Plain RAG<\/a>\uff1a\u793e\u5185\u6587\u66f8\u3092\u3082\u3068\u306b\u56de\u7b54\u3057\u3001\u793e\u5185\u554f\u3044\u5408\u308f\u305b\u3092\u52b9\u7387\u5316\u3059\u308bAI\u30c1\u30e3\u30c3\u30c8\u30d1\u30c3\u30b1\u30fc\u30b8\u3067\u3059\u3002\n    <\/li>\n<\/ol>\n<p>\u751f\u6210AI\u306b\u9650\u3089\u305a\u3001Web\u30fb\u696d\u52d9\u30b7\u30b9\u30c6\u30e0\u958b\u767a\u3084\u30a4\u30f3\u30d5\u30e9\u8a2d\u8a08\u306a\u3069\u3001\u6280\u8853\u9818\u57df\u3092\u554f\u308f\u305a\u3054\u76f8\u8ac7\u3092\u627f\u3063\u3066\u3044\u307e\u3059\u3002\u300c\u4f55\u304b\u3089\u59cb\u3081\u308c\u3070\u826f\u3044\u304b\u5206\u304b\u3089\u306a\u3044\u300d\u3068\u3044\u3046\u6bb5\u968e\u3067\u3082\u69cb\u3044\u307e\u305b\u3093\u306e\u3067\u3001\u305c\u3072\u304a\u6c17\u8efd\u306b\u304a\u554f\u3044\u5408\u308f\u305b\u304f\u3060\u3055\u3044\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a\u8a71\u5c65\u6b74\u3084\u30b3\u30de\u30f3\u30c9\u306e\u5b9f\u884c\u72b6\u6cc1\u3092\u6271\u3048\u308b\u305f\u3081\u3001\u793e\u5185\u30c4\u30fc\u30eb\u306b\u30b3\u30fc\u30c9\u30ec\u30d3\u30e5\u30fc\u306e\u30dc\u30bf\u30f3\u3092\u8ffd\u52a0\u3059\u308b\u306a\u3069\u3001\u72ec\u81ea\u306e\u753b\u9762\u304b\u3089Cod\u2026<\/p>\n","protected":false},"author":6,"featured_media":7411,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[91],"post_tag_01":[92],"post_tag_02":[96],"post_tag_03":[],"class_list":["post-7418","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-generative-ai","post_tag_01-openai-chatgpt","post_tag_02-coding_agent"],"acf":[],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"\u9234\u6728\u4fca\u667a\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ja_JP\" \/>\n\t\t<meta property=\"og:site_name\" content=\"IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine - Tech Fun Magazine\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine\" \/>\n\t\t<meta property=\"og:description\" content=\"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-09-18T00:33:13+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-09-18T00:33:13+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine\" \/>\n\t\t<meta name=\"twitter:description\" content=\"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#blogposting\",\"name\":\"Codex App Server\\u3068\\u306f\\uff1fPython\\u3067\\u306e\\u4f7f\\u3044\\u65b9\\u3068\\u30ec\\u30d3\\u30e5\\u30fc\\u6a5f\\u80fd\\u306e\\u5b9f\\u88c5 - IT\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u304c\\u4f5c\\u308b\\u30e1\\u30c7\\u30a3\\u30a2 Tech Fun Magazine\",\"headline\":\"Codex App Server\\u3068\\u306f\\uff1fPython\\u3067\\u306e\\u4f7f\\u3044\\u65b9\\u3068\\u30ec\\u30d3\\u30e5\\u30fc\\u6a5f\\u80fd\\u306e\\u5b9f\\u88c5\",\"author\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/author\\\/suzukito#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/codex-app-server-introduction.png\",\"width\":1672,\"height\":941},\"datePublished\":\"2026-09-18T09:33:13+09:00\",\"dateModified\":\"2026-09-18T09:33:13+09:00\",\"inLanguage\":\"ja\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#webpage\"},\"articleSection\":\"\\u751f\\u6210AI\\u95a2\\u9023, OpenAI\\u30fbChatGPT, \\u30b3\\u30fc\\u30c7\\u30a3\\u30f3\\u30b0\\u30a8\\u30fc\\u30b8\\u30a7\\u30f3\\u30c8\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/techfun.cc\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc#listItem\",\"name\":\"\\u6295\\u7a3f\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc#listItem\",\"position\":2,\"name\":\"\\u6295\\u7a3f\",\"item\":\"https:\\\/\\\/techfun.cc\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/.\\\/generative-ai#listItem\",\"name\":\"\\u751f\\u6210AI\\u95a2\\u9023\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/.\\\/generative-ai#listItem\",\"position\":3,\"name\":\"\\u751f\\u6210AI\\u95a2\\u9023\",\"item\":\"https:\\\/\\\/techfun.cc\\\/.\\\/generative-ai\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#listItem\",\"name\":\"Codex App Server\\u3068\\u306f\\uff1fPython\\u3067\\u306e\\u4f7f\\u3044\\u65b9\\u3068\\u30ec\\u30d3\\u30e5\\u30fc\\u6a5f\\u80fd\\u306e\\u5b9f\\u88c5\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc#listItem\",\"name\":\"\\u6295\\u7a3f\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#listItem\",\"position\":4,\"name\":\"Codex App Server\\u3068\\u306f\\uff1fPython\\u3067\\u306e\\u4f7f\\u3044\\u65b9\\u3068\\u30ec\\u30d3\\u30e5\\u30fc\\u6a5f\\u80fd\\u306e\\u5b9f\\u88c5\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/.\\\/generative-ai#listItem\",\"name\":\"\\u751f\\u6210AI\\u95a2\\u9023\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/#organization\",\"name\":\"Tech Fun Magazine DEMO\",\"description\":\"Tech Fun Magazine\",\"url\":\"https:\\\/\\\/techfun.cc\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/author\\\/suzukito#author\",\"url\":\"https:\\\/\\\/techfun.cc\\\/author\\\/suzukito\",\"name\":\"\\u9234\\u6728\\u4fca\\u667a\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/25b8417b657cd375ebd095f90d2061f8f16309fe52e22e66db8db09b7b1f774a?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"\\u9234\\u6728\\u4fca\\u667a\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#webpage\",\"url\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html\",\"name\":\"Codex App Server\\u3068\\u306f\\uff1fPython\\u3067\\u306e\\u4f7f\\u3044\\u65b9\\u3068\\u30ec\\u30d3\\u30e5\\u30fc\\u6a5f\\u80fd\\u306e\\u5b9f\\u88c5 - IT\\u30a8\\u30f3\\u30b8\\u30cb\\u30a2\\u304c\\u4f5c\\u308b\\u30e1\\u30c7\\u30a3\\u30a2 Tech Fun Magazine\",\"description\":\"\\u306f\\u3058\\u3081\\u306b Codex App Server\\u306f\\u3001\\u81ea\\u4f5c\\u30a2\\u30d7\\u30ea\\u304b\\u3089Codex\\u3092\\u64cd\\u4f5c\\u3059\\u308b\\u305f\\u3081\\u306e\\u30a4\\u30f3\\u30bf\\u30fc\\u30d5\\u30a7\\u30fc\\u30b9\\u3067\\u3059\\u3002\\u4f1a\",\"inLanguage\":\"ja\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/author\\\/suzukito#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/author\\\/suzukito#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/codex-app-server-introduction.png\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html\\\/#mainImage\",\"width\":1672,\"height\":941},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/generative-ai\\\/codex-app-server-introduction.html#mainImage\"},\"datePublished\":\"2026-09-18T09:33:13+09:00\",\"dateModified\":\"2026-09-18T09:33:13+09:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/techfun.cc\\\/#website\",\"url\":\"https:\\\/\\\/techfun.cc\\\/\",\"name\":\"Tech Fun Magazine DEMO\",\"description\":\"Tech Fun Magazine\",\"inLanguage\":\"ja\",\"publisher\":{\"@id\":\"https:\\\/\\\/techfun.cc\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine","description":"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a","canonical_url":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#blogposting","name":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine","headline":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5","author":{"@id":"https:\/\/techfun.cc\/author\/suzukito#author"},"publisher":{"@id":"https:\/\/techfun.cc\/#organization"},"image":{"@type":"ImageObject","url":"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction.png","width":1672,"height":941},"datePublished":"2026-09-18T09:33:13+09:00","dateModified":"2026-09-18T09:33:13+09:00","inLanguage":"ja","mainEntityOfPage":{"@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#webpage"},"isPartOf":{"@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#webpage"},"articleSection":"\u751f\u6210AI\u95a2\u9023, OpenAI\u30fbChatGPT, \u30b3\u30fc\u30c7\u30a3\u30f3\u30b0\u30a8\u30fc\u30b8\u30a7\u30f3\u30c8"},{"@type":"BreadcrumbList","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/techfun.cc#listItem","position":1,"name":"Home","item":"https:\/\/techfun.cc","nextItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc#listItem","name":"\u6295\u7a3f"}},{"@type":"ListItem","@id":"https:\/\/techfun.cc#listItem","position":2,"name":"\u6295\u7a3f","item":"https:\/\/techfun.cc","nextItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc\/.\/generative-ai#listItem","name":"\u751f\u6210AI\u95a2\u9023"},"previousItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/techfun.cc\/.\/generative-ai#listItem","position":3,"name":"\u751f\u6210AI\u95a2\u9023","item":"https:\/\/techfun.cc\/.\/generative-ai","nextItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#listItem","name":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5"},"previousItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc#listItem","name":"\u6295\u7a3f"}},{"@type":"ListItem","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#listItem","position":4,"name":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5","previousItem":{"@type":"ListItem","@id":"https:\/\/techfun.cc\/.\/generative-ai#listItem","name":"\u751f\u6210AI\u95a2\u9023"}}]},{"@type":"Organization","@id":"https:\/\/techfun.cc\/#organization","name":"Tech Fun Magazine DEMO","description":"Tech Fun Magazine","url":"https:\/\/techfun.cc\/"},{"@type":"Person","@id":"https:\/\/techfun.cc\/author\/suzukito#author","url":"https:\/\/techfun.cc\/author\/suzukito","name":"\u9234\u6728\u4fca\u667a","image":{"@type":"ImageObject","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/25b8417b657cd375ebd095f90d2061f8f16309fe52e22e66db8db09b7b1f774a?s=96&d=mm&r=g","width":96,"height":96,"caption":"\u9234\u6728\u4fca\u667a"}},{"@type":"WebPage","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#webpage","url":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html","name":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine","description":"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a","inLanguage":"ja","isPartOf":{"@id":"https:\/\/techfun.cc\/#website"},"breadcrumb":{"@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#breadcrumblist"},"author":{"@id":"https:\/\/techfun.cc\/author\/suzukito#author"},"creator":{"@id":"https:\/\/techfun.cc\/author\/suzukito#author"},"image":{"@type":"ImageObject","url":"\/wp-content\/uploads\/2026\/09\/codex-app-server-introduction.png","@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html\/#mainImage","width":1672,"height":941},"primaryImageOfPage":{"@id":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html#mainImage"},"datePublished":"2026-09-18T09:33:13+09:00","dateModified":"2026-09-18T09:33:13+09:00"},{"@type":"WebSite","@id":"https:\/\/techfun.cc\/#website","url":"https:\/\/techfun.cc\/","name":"Tech Fun Magazine DEMO","description":"Tech Fun Magazine","inLanguage":"ja","publisher":{"@id":"https:\/\/techfun.cc\/#organization"}}]},"og:locale":"ja_JP","og:site_name":"IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine - Tech Fun Magazine","og:type":"article","og:title":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine","og:description":"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a","og:url":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html","article:published_time":"2026-09-18T00:33:13+00:00","article:modified_time":"2026-09-18T00:33:13+00:00","twitter:card":"summary_large_image","twitter:title":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5 - IT\u30a8\u30f3\u30b8\u30cb\u30a2\u304c\u4f5c\u308b\u30e1\u30c7\u30a3\u30a2 Tech Fun Magazine","twitter:description":"\u306f\u3058\u3081\u306b Codex App Server\u306f\u3001\u81ea\u4f5c\u30a2\u30d7\u30ea\u304b\u3089Codex\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306e\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u3067\u3059\u3002\u4f1a"},"aioseo_meta_data":{"post_id":"7418","title":null,"description":null,"keywords":null,"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":{"faqs":[],"keyPoints":[],"schemas":[],"titles":[],"descriptions":[],"socialPosts":{"email":{"subject":"","preview":"","content":""},"linkedin":[],"twitter":[],"facebook":[],"instagram":[]}},"created":"2026-09-17 23:15:12","updated":"2026-09-18 00:33:13","seo_analyzer_scan_date":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/techfun.cc\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/techfun.cc\" title=\"\u6295\u7a3f\">\u6295\u7a3f<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/techfun.cc\/.\/generative-ai\" title=\"\u751f\u6210AI\u95a2\u9023\">\u751f\u6210AI\u95a2\u9023<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tCodex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/techfun.cc"},{"label":"\u6295\u7a3f","link":"https:\/\/techfun.cc"},{"label":"\u751f\u6210AI\u95a2\u9023","link":"https:\/\/techfun.cc\/.\/generative-ai"},{"label":"Codex App Server\u3068\u306f\uff1fPython\u3067\u306e\u4f7f\u3044\u65b9\u3068\u30ec\u30d3\u30e5\u30fc\u6a5f\u80fd\u306e\u5b9f\u88c5","link":"https:\/\/techfun.cc\/generative-ai\/codex-app-server-introduction.html"}],"_links":{"self":[{"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/posts\/7418","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/comments?post=7418"}],"version-history":[{"count":2,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/posts\/7418\/revisions"}],"predecessor-version":[{"id":7420,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/posts\/7418\/revisions\/7420"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/media\/7411"}],"wp:attachment":[{"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/media?parent=7418"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/categories?post=7418"},{"taxonomy":"post_tag_01","embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/post_tag_01?post=7418"},{"taxonomy":"post_tag_02","embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/post_tag_02?post=7418"},{"taxonomy":"post_tag_03","embeddable":true,"href":"https:\/\/techfun.cc\/wp-json\/wp\/v2\/post_tag_03?post=7418"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}