{"id":6514,"date":"2025-09-22T17:52:47","date_gmt":"2025-09-22T17:52:47","guid":{"rendered":"https:\/\/pokecon.jp\/job\/?p=6514"},"modified":"2025-09-22T17:52:47","modified_gmt":"2025-09-22T17:52:47","slug":"eslint-9%e3%81%b8%e3%81%ae%e3%82%a2%e3%83%83%e3%83%97%e3%83%87%e3%83%bc%e3%83%88%e3%81%a8flat-config%e7%a7%bb%e8%a1%8c%e3%83%ad%e3%82%b0-roxx%e9%96%8b%e7%99%ba%e8%80%85%e3%83%96%e3%83%ad%e3%82%b0","status":"publish","type":"post","link":"https:\/\/pokecon.jp\/job\/6514\/","title":{"rendered":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 &#8211; ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0"},"content":{"rendered":"\n<br \/><img decoding=\"async\" src=\"https:\/\/ogimage.blog.st-hatena.com\/13355765958054625981\/6802888565248152712\/1758521928\" \/><\/p>\n<div>\n<p><span style=\"font-size: 80%;\">\u3053\u306e\u8a18\u4e8b\u306f\u500b\u4eba\u30d6\u30ed\u30b0\u3068\u540c\u3058\u5185\u5bb9\u3067\u3059<\/span><\/p>\n<p><iframe class=\"embed-card embed-webcard\" style=\"display: block; width: 100%; height: 155px; max-width: 500px; margin: 10px 0px;\" title=\"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0\" src=\"https:\/\/hatenablog-parts.com\/embed?url=https:\/\/zenn.dev\/ptpadan\/articles\/eslint-update-9\" frameborder=\"0\" scrolling=\"no\"><\/iframe><cite class=\"hatena-citation\"><a target=\"_blank\" href=\"https:\/\/zenn.dev\/ptpadan\/articles\/eslint-update-9\">https:\/\/zenn.dev\/ptpadan\/articles<\/a><\/cite><\/p>\n<p>ESLint 9 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u65b0\u3057\u3044 <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config \u5f62\u5f0f\u304c\u6a19\u6e96\u3068\u306a\u308a\u307e\u3057\u305f\u3002 \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u3067\u306e ESLint 8 \u304b\u3089 9 \u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u4f5c\u696d\u3068\u3001\u5f93\u6765\u306e<code>.eslintrc.yml<\/code>\u5f62\u5f0f\u304b\u3089 <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config \u5f62\u5f0f\u3078\u306e\u79fb\u884c\u306b\u3064\u3044\u3066\u3001\u5b9f\u969b\u306b\u906d\u9047\u3057\u305f\u554f\u984c\u3068\u89e3\u6c7a\u65b9\u6cd5\u3092\u542b\u3081\u3066\u8a18\u9332\u3057\u307e\u3059\u3002<\/p>\n<p>ESLint 9 \u3078\u306e\u79fb\u884c\u306b\u306f\u4ee5\u4e0b\u306e\u30e1\u30ea\u30c3\u30c8\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u5411\u4e0a<\/strong>: \u8a2d\u5b9a\u306e\u89e3\u6790\u304c\u9ad8\u901f\u5316<\/li>\n<li><strong>\u4f9d\u5b58\u95a2\u4fc2\u306e\u7c21\u7d20\u5316<\/strong>: \u591a\u304f\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3\">\u30d7\u30e9\u30b0\u30a4\u30f3<\/a>\u304c\u7d71\u5408\u3055\u308c\u3001\u8a2d\u5b9a\u304c\u7c21\u5358\u306b<\/li>\n<\/ul>\n<p>\u79fb\u884c\u524d\u306f\u4ee5\u4e0b\u306e\u74b0\u5883\u3067\u3057\u305f\u3002<\/p>\n<ul>\n<li>ESLint 8.57.1<\/li>\n<li><code>.eslintrc.yml<\/code>\u5f62\u5f0f\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb<\/li>\n<li>\u8907\u6570\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3\">\u30d7\u30e9\u30b0\u30a4\u30f3<\/a>\u3092\u500b\u5225\u306b\u7ba1\u7406<\/li>\n<\/ul>\n<pre><code class=\"lang-yaml\"># .eslintrc.yml\uff08\u629c\u7c8b\uff09\nextends:\n  -<span class=\"ruby\"> airbnb\n<\/span>  -<span class=\"ruby\"> <span class=\"hljs-symbol\">eslint:<\/span>recommended\n<\/span>  -<span class=\"ruby\"> <span class=\"hljs-symbol\">plugin:<\/span>@typescript-eslint\/eslint-recommended\n<\/span>  -<span class=\"ruby\"> <span class=\"hljs-symbol\">plugin:<\/span>@typescript-eslint\/recommended<\/span>\n<\/code><\/pre>\n<h2 id=\"1-\">1. \u30d1\u30c3\u30b1\u30fc\u30b8\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8<\/h2>\n<p>\u307e\u305a\u3001ESLint 9 \u3068\u95a2\u9023\u30d1\u30c3\u30b1\u30fc\u30b8\u3092\u6700\u65b0\u7248\u306b\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3057\u307e\u3059\u3002<\/p>\n<pre><code class=\"lang-bash\">\nbun add -D eslint@latest @eslint\/js@latest typescript-eslint@latest\n\n\nbun add -D eslint-plugin-react@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-plugin-react-hooks@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-plugin-jsx-a11y@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-plugin-<span class=\"hljs-keyword\">import<\/span>@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-plugin-simple-<span class=\"hljs-keyword\">import<\/span>-sort@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-plugin-prettier@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-config-prettier@latest <span class=\"hljs-string\">\\<\/span>\n  eslint-<span class=\"hljs-keyword\">import<\/span>-resolver-typescript@latest\n<\/code><\/pre>\n<h2 id=\"2-flat-config-\">2. <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config\u5f62\u5f0f\u3078\u306e\u79fb\u884c<\/h2>\n<p><code>.eslintrc.yml<\/code>\u3092\u524a\u9664\u3057\u3001\u65b0\u3057\u3044<code>eslint.config.mjs<\/code>\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 \u3053\u306e\u79fb\u884c\u306f Claude Code \u3084 GPT \u3067\u884c\u3046\u3068\u304b\u306a\u308a\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u3089\u308c\u308b\u611f\u3058\u304c\u3057\u3066\u3044\u307e\u3059\u3002 \u81ea\u5206\u306e\u5834\u5408\u306f Claude Code \u3067\u30d9\u30fc\u30b9\u79fb\u884c\u3092\u9032\u3081\u307e\u3057\u305f\u3002\u3059\u3050\u79fb\u884c\u3067\u304d\u308b\u3082\u306e\u306f\u305d\u306e\u307e\u307e\u79fb\u884c\u3057\u3001\u52d5\u304b\u306a\u3044\u3082\u306e\u306f<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B3%A5%E1%A5%F3%A5%C8%A5%A2%A5%A6%A5%C8\">\u30b3\u30e1\u30f3\u30c8\u30a2\u30a6\u30c8<\/a>\u3057\u3066\u3082\u3089\u3044\u307e\u3057\u305f\u3002\u305d\u306e\u5f8c GPT \u306b\u52d5\u304b\u3057\u65b9\u3092\u805e\u304d\u306a\u304c\u3089\u9032\u3081\u308b\u3053\u3068\u3067\u3001\u65e2\u5b58\u3088\u308a\u30eb\u30fc\u30eb\u3092\u843d\u3068\u3059\u3053\u3068\u306a\u304f\u52d5\u4f5c\u3055\u305b\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3057\u305f\u3002<\/p>\n<pre><code class=\"lang-javascript\">\n<span class=\"hljs-keyword\">import<\/span> js <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'@eslint\/js'<\/span>\n<span class=\"hljs-keyword\">import<\/span> tseslint <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'typescript-eslint'<\/span>\n<span class=\"hljs-keyword\">import<\/span> reactPlugin <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'eslint-plugin-react'<\/span>\n<span class=\"hljs-keyword\">import<\/span> reactHooksPlugin <span class=\"hljs-keyword\">from<\/span> <span class=\"hljs-string\">'eslint-plugin-react-hooks'<\/span>\n\n\nexport <span class=\"hljs-keyword\">default<\/span> [\n  js.configs.recommended,\n  ...tseslint.configs.recommended,\n  {\n    ignores: [\n      <span class=\"hljs-string\">'**\/node_modules\/**'<\/span>,\n      <span class=\"hljs-string\">'**\/dist\/**'<\/span>,\n      <span class=\"hljs-string\">'**\/build\/**'<\/span>,\n      \n    ],\n  },\n  {\n    languageOptions: {\n      ecmaVersion: <span class=\"hljs-string\">'latest'<\/span>,\n      sourceType: <span class=\"hljs-string\">'module'<\/span>,\n      parser: tseslint.parser,\n      parserOptions: {\n        <span class=\"hljs-keyword\">project<\/span>: <span class=\"hljs-keyword\">true<\/span>,\n        tsconfigRootDir: <span class=\"hljs-keyword\">import<\/span>.meta.dirname,\n        ecmaFeatures: { jsx: <span class=\"hljs-keyword\">true<\/span> },\n      },\n    },\n    \n  },\n]\n<\/code><\/pre>\n<h2 id=\"3-\">3. \u4e3b\u306a\u5909\u66f4\u70b9<\/h2>\n<h3 id=\"-\"><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3\">\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3<\/a>\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u5909\u66f4<\/h3>\n<p>ESLint 9 \u3067\u306f\u3001\u3044\u304f\u3064\u304b\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3\">\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3<\/a>\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5ec3\u6b62\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<pre><code class=\"lang-json\">\n\n<span class=\"hljs-string\">\"lint-ts\"<\/span>: <span class=\"hljs-string\">\"eslint --ext js --ext jsx --ext ts --ext tsx .\/ --ignore-path .gitignore\"<\/span>\n\n\n<span class=\"hljs-string\">\"lint-ts\"<\/span>: <span class=\"hljs-string\">\"eslint .\"<\/span>\n<\/code><\/pre>\n<h3 id=\"-\">\u524a\u9664\u3055\u308c\u305f\u30eb\u30fc\u30eb<\/h3>\n<p>ESLint 9 \u3067\u524a\u9664\u3055\u308c\u305f\u30eb\u30fc\u30eb\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><code>valid-jsdoc<\/code>: \u524a\u9664\u3055\u308c\u305f\u305f\u3081\u3001\u8a2d\u5b9a\u304b\u3089\u9664\u5916<\/li>\n<\/ul>\n<h3 id=\"-\">\u65b0\u3057\u3044\u30eb\u30fc\u30eb<\/h3>\n<p>TypeScript ESLint \u3067\u65b0\u3057\u304f\u8ffd\u52a0\u3055\u308c\u305f\u30eb\u30fc\u30eb\u3002<\/p>\n<ul>\n<li><code>@typescript-eslint\/no-empty-object-type<\/code>: \u7a7a\u306e\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u578b\u306b\u5bfe\u3059\u308b\u8b66\u544a<\/li>\n<\/ul>\n<h2 id=\"-\">\u30e2\u30fc\u30c9\u5207\u308a\u66ff\u3048\u306e\u80cc\u666f<\/h2>\n<p>TypeScript ESLint \u3067\u306f\u3001<code>parserOptions.project: true<\/code> \u3092\u8a2d\u5b9a\u3059\u308b\u3053\u3068\u3067\u3001\u578b\u60c5\u5831\u3092\u4f7f\u3063\u305f\u8a73\u7d30\u306a\u30ea\u30f3\u30c8\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u3053\u306e\u8a2d\u5b9a\u306b\u306f\u4ee5\u4e0b\u306e\u8ab2\u984c\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<ul>\n<li><strong>\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u554f\u984c<\/strong>: \u578b\u30c1\u30a7\u30c3\u30af\u306e\u305f\u3081\u5b9f\u884c\u901f\u5ea6\u304c\u5927\u5e45\u306b\u4f4e\u4e0b<\/li>\n<li><strong>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u306e\u5897\u5927<\/strong>: \u5927\u898f\u6a21\u306a\u30e2\u30ce\u30ec\u30dd\u3067\u306f\u7279\u306b\u9855\u8457<\/li>\n<li><strong>\u30e1\u30e2\u30ea\u4e0d\u8db3\u306b\u3088\u308b\u30af\u30e9\u30c3\u30b7\u30e5<\/strong>: Node.js \u306e\u30e1\u30e2\u30ea\u5236\u9650\u3092\u8d85\u3048\u3066 ESLint \u304c\u7570\u5e38\u7d42\u4e86\u3059\u308b<\/li>\n<li><strong>\u958b\u767a\u52b9\u7387\u306e\u4f4e\u4e0b<\/strong>: \u4fdd\u5b58\u306e\u305f\u3073\u306b\u91cd\u3044\u30ea\u30f3\u30c8\u304c\u5b9f\u884c\u3055\u308c\u308b<\/li>\n<\/ul>\n<p>\u3053\u306e\u554f\u984c\u3092\u89e3\u6c7a\u3059\u308b\u305f\u3081\u3001\u81ea\u5206\u304c\u5b9f\u969b\u306b\u904b\u7528\u3057\u3066\u3044\u308b\u30d7\u30ed\u30c0\u30af\u30c8\u3067\u306f\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%B4%C4%B6%AD%CA%D1%BF%F4\">\u74b0\u5883\u5909\u6570<\/a>\u3067 Light \u30e2\u30fc\u30c9\u3068 Full \u30e2\u30fc\u30c9\u3092\u5207\u308a\u66ff\u3048\u308b\u5b9f\u88c5\u3092\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<h2 id=\"-\">\u5b9f\u88c5\u306e\u8a73\u7d30<\/h2>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-keyword\">const<\/span> isLightMode = process.env.ESLINT_LIGHT_MODE === <span class=\"hljs-string\">'true'<\/span>\n<span class=\"hljs-built_in\">console<\/span>.log(<span class=\"hljs-string\">`ESLint running in <span class=\"hljs-subst\">${isLightMode ? <span class=\"hljs-string\">'LIGHT'<\/span> : <span class=\"hljs-string\">'FULL'<\/span>}<\/span> mode`<\/span>)\n\n\n<span class=\"hljs-keyword\">const<\/span> lightModeConfig = [\n  {\n    <span class=\"hljs-attr\">files<\/span>: [<span class=\"hljs-string\">'**\/*.ts'<\/span>, <span class=\"hljs-string\">'**\/*.tsx'<\/span>],\n    <span class=\"hljs-attr\">languageOptions<\/span>: {\n      <span class=\"hljs-attr\">parser<\/span>: tseslint.parser,\n      <span class=\"hljs-attr\">parserOptions<\/span>: {\n        <span class=\"hljs-attr\">project<\/span>: <span class=\"hljs-literal\">false<\/span>, \n        ecmaFeatures: { <span class=\"hljs-attr\">jsx<\/span>: <span class=\"hljs-literal\">true<\/span> },\n      },\n    },\n    <span class=\"hljs-attr\">rules<\/span>: {\n      \n      <span class=\"hljs-string\">'@typescript-eslint\/no-unused-vars'<\/span>: <span class=\"hljs-number\">0<\/span>,\n      <span class=\"hljs-string\">'@typescript-eslint\/no-explicit-any'<\/span>: <span class=\"hljs-number\">0<\/span>,\n    },\n  },\n]\n\n\n<span class=\"hljs-keyword\">const<\/span> fullModeConfig = [\n  {\n    <span class=\"hljs-attr\">languageOptions<\/span>: {\n      <span class=\"hljs-attr\">parser<\/span>: tseslint.parser,\n      <span class=\"hljs-attr\">parserOptions<\/span>: {\n        <span class=\"hljs-attr\">project<\/span>: <span class=\"hljs-literal\">true<\/span>, \n        tsconfigRootDir: <span class=\"hljs-keyword\">import<\/span>.meta.dirname,\n      },\n    },\n    <span class=\"hljs-attr\">rules<\/span>: {\n      \n      <span class=\"hljs-string\">'import\/no-unresolved'<\/span>: <span class=\"hljs-number\">2<\/span>,\n      <span class=\"hljs-string\">'@typescript-eslint\/explicit-function-return-type'<\/span>: <span class=\"hljs-number\">1<\/span>,\n    },\n  },\n]\n\n<span class=\"hljs-keyword\">export<\/span> <span class=\"hljs-keyword\">default<\/span> isLightMode ? lightModeConfig : fullModeConfig\n<\/code><\/pre>\n<h2 id=\"-\">\u4f7f\u3044\u5206\u3051\u306e\u6226\u7565<\/h2>\n<h3 id=\"light-\">Light\u30e2\u30fc\u30c9\uff08\u958b\u767a\u6642\uff09<\/h3>\n<pre><code class=\"lang-bash\"><span class=\"hljs-attr\">ESLINT_LIGHT_MODE<\/span>=<span class=\"hljs-literal\">true<\/span> bun run lint-ts\n<\/code><\/pre>\n<ul>\n<li><strong>\u7528\u9014<\/strong>: \u958b\u767a\u4e2d\u306e\u30ea\u30a2\u30eb\u30bf\u30a4\u30e0\u30c1\u30a7\u30c3\u30af\u3001\u30a8\u30c7\u30a3\u30bf\u7d71\u5408<\/li>\n<li><strong>\u7279\u5fb4<\/strong>: \u9ad8\u901f\u5b9f\u884c\u3001\u6700\u4f4e\u9650\u306e\u30eb\u30fc\u30eb\u3001\u578b\u60c5\u5831\u4e0d\u8981<\/li>\n<li><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>: \u958b\u767a\u52b9\u7387\u3092\u640d\u306a\u308f\u306a\u3044\u3001\u4fdd\u5b58\u6642\u306e\u5feb\u9069\u6027<\/li>\n<\/ul>\n<h3 id=\"full-ci-\">Full\u30e2\u30fc\u30c9\uff08CI\/\u672c\u683c\u30c1\u30a7\u30c3\u30af\uff09<\/h3>\n<pre><code class=\"lang-bash\">\nbun <span class=\"hljs-keyword\">run<\/span><span class=\"bash\"> lint-ts<\/span>\n<\/code><\/pre>\n<ul>\n<li><strong>\u7528\u9014<\/strong>: CI\/CD\u3001\u30d7\u30eb\u30ea\u30af<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%A8%A5%B9\">\u30a8\u30b9<\/a>\u30c8\u524d\u306e\u6700\u7d42\u30c1\u30a7\u30c3\u30af<\/li>\n<li><strong>\u7279\u5fb4<\/strong>: \u5b8c\u5168\u306a\u578b\u30c1\u30a7\u30c3\u30af\u3001\u3059\u3079\u3066\u306e\u30eb\u30fc\u30eb\u9069\u7528<\/li>\n<li><strong>\u30e1\u30ea\u30c3\u30c8<\/strong>: \u9ad8\u54c1\u8cea\u306a\u30b3\u30fc\u30c9\u54c1\u8cea\u4fdd\u8a3c\u3001\u578b\u5b89\u5168\u6027\u306e\u78ba\u4fdd<\/li>\n<\/ul>\n<p>\u3053\u306e\u8a2d\u8a08\u306b\u3088\u308a\u3001\u958b\u767a\u4e2d\u306f\u9ad8\u901f\u306a Light \u30e2\u30fc\u30c9\u3067\u3001CI \u3067\u306f\u8a73\u7d30\u306a Full \u30e2\u30fc\u30c9\u3067\u30c1\u30a7\u30c3\u30af\u3067\u304d\u307e\u3059\u3002<\/p>\n<h2 id=\"1-\">1. \u524a\u9664\u3055\u308c\u305f\u30eb\u30fc\u30eb<\/h2>\n<p>ESLint 9 \u3067\u306f\u4ee5\u4e0b\u306e\u30eb\u30fc\u30eb\u304c\u524a\u9664\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<pre><code class=\"lang-javascript\">\n<span class=\"hljs-string\">'valid-jsdoc'<\/span>: <span class=\"hljs-number\">2<\/span>  \n<\/code><\/pre>\n<p>\u3053\u308c\u3089\u306e\u30eb\u30fc\u30eb\u306f\u8a2d\u5b9a\u304b\u3089\u524a\u9664\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002<\/p>\n<h2 id=\"2-\">2. \u65b0\u3057\u304f\u8ffd\u52a0\u3055\u308c\u305f\u30eb\u30fc\u30eb<\/h2>\n<p>TypeScript ESLint \u3067\u65b0\u3057\u3044\u30eb\u30fc\u30eb\u304c\u8ffd\u52a0\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<pre><code class=\"lang-javascript\">\n'<span class=\"hljs-meta\">@typescript<\/span>-eslint\/no-empty-<span class=\"hljs-class\"><span class=\"hljs-keyword\">object<\/span><span class=\"hljs-title\">-type<\/span>'<\/span>: <span class=\"hljs-number\">0<\/span>  \n<\/code><\/pre>\n<p><a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config \u3067\u306e import <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3\">\u30d7\u30e9\u30b0\u30a4\u30f3<\/a>\u306e\u8a2d\u5b9a\u306f\u3001\u5f93\u6765\u3068\u306f\u7570\u306a\u308b\u5f62\u5f0f\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<pre><code class=\"lang-javascript\"><span class=\"hljs-attribute\">settings<\/span>: {\n  <span class=\"hljs-string\">'import\/resolver'<\/span>: {\n    <span class=\"hljs-attribute\">typescript<\/span>: {\n      <span class=\"hljs-attribute\">alwaysTryTypes<\/span>: true,\n      <span class=\"hljs-attribute\">project<\/span>: [<span class=\"hljs-string\">'.\/tsconfig.json'<\/span>, <span class=\"hljs-string\">'.\/src\/*\/tsconfig.json'<\/span>],\n    },\n    <span class=\"hljs-attribute\">node<\/span>: true,\n  },\n}\n<\/code><\/pre>\n<p>ESLint 9 \u3067\u306f\u591a\u304f\u306e<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%B3%A5%DE%A5%F3%A5%C9%A5%E9%A5%A4%A5%F3\">\u30b3\u30de\u30f3\u30c9\u30e9\u30a4\u30f3<\/a>\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u5ec3\u6b62\u3055\u308c\u307e\u3057\u305f\u3002<\/p>\n<pre><code class=\"lang-json\">\n\n<span class=\"hljs-string\">\"lint-ts\"<\/span>: <span class=\"hljs-string\">\"eslint --ext js --ext jsx --ext ts --ext tsx .\/ --ignore-path .gitignore\"<\/span>\n\n\n<span class=\"hljs-string\">\"lint-ts\"<\/span>: <span class=\"hljs-string\">\"eslint .\"<\/span>\n<\/code><\/pre>\n<p><code>--ext<\/code>\u3084<code>--ignore-path<\/code>\u30aa\u30d7\u30b7\u30e7\u30f3\u4e0d\u8981\u306b\u306a\u308a\u3001\u3059\u3079\u3066 <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config \u5185\u3067\u8a2d\u5b9a\u3057\u307e\u3059\u3002<\/p>\n<h2 id=\"-\">\u30e1\u30e2\u30ea\u4e0d\u8db3\u3078\u306e\u5bfe\u7b56<\/h2>\n<p>\u3042\u308b\u7a0b\u5ea6\u306e\u898f\u6a21\u306e\u30e2\u30ce\u30ec\u30dd\u3067\u306f\u3001ESLint \u304c\u30e1\u30e2\u30ea\u4e0d\u8db3\u3067\u30af\u30e9\u30c3\u30b7\u30e5\u3059\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u4ee5\u4e0b\u306e\u5bfe\u7b56\u304c\u6709\u52b9\u3067\u3059\u3002<\/p>\n<h3 id=\"1-light-\">1. Light\u30e2\u30fc\u30c9\u306e\u6d3b\u7528<\/h3>\n<p>\u958b\u767a\u6642\u306f Light \u30e2\u30fc\u30c9\u3092\u4f7f\u7528\u3059\u308b\u3053\u3068\u3067\u3001\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u5927\u5e45\u306b\u524a\u6e1b\u3067\u304d\u307e\u3059\u3002<\/p>\n<pre><code class=\"lang-bash\">\n<span class=\"hljs-attr\">ESLINT_LIGHT_MODE<\/span>=<span class=\"hljs-literal\">true<\/span> bun run lint-ts\n<\/code><\/pre>\n<h3 id=\"2-lerna-\">2. Lerna\u3092\u4f7f\u7528\u3057\u305f\u4e26\u5217\u5b9f\u884c<\/h3>\n<p>\u30e1\u30e2\u30ea\u4f7f\u7528\u91cf\u3092\u5206\u6563\u3055\u305b\u308b\u305f\u3081\u3001<a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/%A5%EF%A1%BC%A5%AF%A5%B9%A5%DA%A1%BC%A5%B9\">\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9<\/a>\u3054\u3068\u306b\u5206\u5272\u5b9f\u884c\u3059\u308b\u3002<\/p>\n<pre><code class=\"lang-json\">\n<span class=\"hljs-string\">\"lint-ts\"<\/span>: <span class=\"hljs-string\">\"lerna run --stream --parallel lint\"<\/span>\n<\/code><\/pre>\n<h3 id=\"3-node-js-\">3. Node.js\u306e\u30e1\u30e2\u30ea\u5236\u9650\u3092\u5897\u3084\u3059<\/h3>\n<p>\u5fc5\u8981\u306b\u5fdc\u3058\u3066 Node.js \u306e\u30d2\u30fc\u30d7\u30b5\u30a4\u30ba\u3092\u62e1\u5f35\u3059\u308b\u3002<\/p>\n<pre><code class=\"lang-json\">\n<span class=\"hljs-string\">\"lint-ts-heavy\"<\/span>: <span class=\"hljs-string\">\"node --max-old-space-size=4096 .\/node_modules\/.bin\/eslint .\"<\/span>\n<\/code><\/pre>\n<p>ESLint 9 \u3078\u306e\u79fb\u884c\u306f\u3001\u6700\u521d\u306f\u8a2d\u5b9a\u5f62\u5f0f\u306e\u5909\u66f4\u306b\u6238\u60d1\u3046\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\u3057\u304b\u3057\u3001\u4ee5\u4e0b\u306e\u70b9\u306b\u6ce8\u610f\u3059\u308c\u3070\u6bd4\u8f03\u7684\u30b9\u30e0\u30fc\u30ba\u306b\u9032\u3081\u3089\u308c\u307e\u3059\u3002<\/p>\n<ol>\n<li><strong>\u6bb5\u968e\u7684\u306a\u79fb\u884c<\/strong>: \u307e\u305a\u306f\u57fa\u672c\u7684\u306a\u8a2d\u5b9a\u304b\u3089\u59cb\u3081\u3001\u5f90\u3005\u306b\u8a73\u7d30\u306a\u8a2d\u5b9a\u3092\u8ffd\u52a0<\/li>\n<li><strong>\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u306e\u78ba\u8a8d<\/strong>: ESLint 9 \u306f\u89aa\u5207\u306a\u30a8\u30e9\u30fc\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8868\u793a\u3059\u308b\u306e\u3067\u3001\u305d\u308c\u306b\u5f93\u3063\u3066\u4fee\u6b63<\/li>\n<li><strong>\u53c2\u8003\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u6d3b\u7528<\/strong>: \u65e2\u5b58\u306e\u6210\u529f\u4e8b\u4f8b\u3092\u53c2\u8003\u306b\u3059\u308b\u3053\u3068\u3067\u3001\u5b9f\u88c5\u304c\u30b9\u30e0\u30fc\u30ba\u306b<\/li>\n<\/ol>\n<p>\u7279\u306b\u30e2\u30ce\u30ec\u30dd\u74b0\u5883\u3067\u306f\u3001Light\/Full \u30e2\u30fc\u30c9\u306e\u5b9f\u88c5\u306b\u3088\u308a\u3001\u958b\u767a\u52b9\u7387\u3068\u30b3\u30fc\u30c9\u54c1\u8cea\u306e\u4e21\u7acb\u304c\u53ef\u80fd\u306b\u306a\u308a\u307e\u3057\u305f\u3002\u4eca\u5f8c\u65b0\u3057\u3044\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u59cb\u3081\u308b\u969b\u306f\u3001\u6700\u521d\u304b\u3089 <a target=\"_blank\" class=\"keyword\" href=\"https:\/\/d.hatena.ne.jp\/keyword\/Flat\">Flat<\/a> Config \u5f62\u5f0f\u3067\u306e\u8a2d\u5b9a\u3092\u304a\u52e7\u3081\u3057\u307e\u3059\u3002<\/p>\n<p>\u4eca\u56de\u5b9f\u969b\u306b\u884c\u3063\u305f ESLint \u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u306b\u3088\u308b\u3001\u30b3\u30fc\u30c9\u306e\u5dee\u5206\u30fb\u6d41\u308c\u306f\u4ee5\u4e0b\u306e PR \u3067\u78ba\u8a8d\u3067\u304d\u307e\u3059\u3002<\/p>\n<p><a target=\"_blank\" href=\"https:\/\/github.com\/YasushiKobayashi\/samples\/pull\/1163\">https:\/\/github.com\/YasushiKobayashi\/samples\/pull\/1163<\/a><\/p>\n<\/div>\n<p><script>(function(d, s, id) {\n  var js, fjs = d.getElementsByTagName(s)[0];\n  if (d.getElementById(id)) return;\n  js = d.createElement(s); js.id = id;\n  js.src = \"\/\/connect.facebook.net\/ja_JP\/sdk.js#xfbml=1&appId=719729204785177&version=v17.0\";\n  fjs.parentNode.insertBefore(js, fjs);\n}(document, 'script', 'facebook-jssdk'));<\/script><br \/>\n<br \/>\n<br \/><a href=\"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407\">\u5143\u306e\u8a18\u4e8b\u3092\u78ba\u8a8d\u3059\u308b <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\u3053\u306e\u8a18\u4e8b\u306f\u500b\u4eba\u30d6\u30ed\u30b0\u3068\u540c\u3058\u5185\u5bb9\u3067\u3059 https:\/\/zenn.dev\/ptpadan\/articles ESLint 9 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u65b0\u3057\u3044 Flat Config \u5f62\u5f0f\u304c\u6a19\u6e96\u3068\u306a\u308a\u307e\u3057\u305f\u3002 \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u30e2\u30ce\u30ec\u30dd\u74b0 [&hellip;]","protected":false},"author":1,"featured_media":6515,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-6514","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>ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \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:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"og:description\" content=\"\u3053\u306e\u8a18\u4e8b\u306f\u500b\u4eba\u30d6\u30ed\u30b0\u3068\u540c\u3058\u5185\u5bb9\u3067\u3059 https:\/\/zenn.dev\/ptpadan\/articles ESLint 9 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u65b0\u3057\u3044 Flat Config \u5f62\u5f0f\u304c\u6a19\u6e96\u3068\u306a\u308a\u307e\u3057\u305f\u3002 \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u30e2\u30ce\u30ec\u30dd\u74b0 [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407\" \/>\n<meta property=\"og:site_name\" content=\"\u30dd\u30b1\u30b3\u30f3\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-22T17:52:47+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\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=\"2\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/6514\\\/\"},\"author\":{\"name\":\"info@pokecon.jp\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"headline\":\"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 &#8211; ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0\",\"datePublished\":\"2025-09-22T17:52:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/6514\\\/\"},\"wordCount\":79,\"image\":{\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1758521928.png\",\"articleSection\":[\"\u4f01\u696d\u30c6\u30c3\u30af\"],\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/6514\\\/\",\"url\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407\",\"name\":\"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1758521928.png\",\"datePublished\":\"2025-09-22T17:52:47+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/#\\\/schema\\\/person\\\/16c9f07b1ba984d165d9aee259bda997\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#primaryimage\",\"url\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1758521928.png\",\"contentUrl\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/1758521928.png\",\"width\":1200,\"height\":630},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/techblog.roxx.co.jp\\\/entry\\\/2025\\\/09\\\/22\\\/151407#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u30db\u30fc\u30e0\",\"item\":\"https:\\\/\\\/pokecon.jp\\\/job\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 &#8211; ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0\"}]},{\"@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":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \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:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407","og_locale":"ja_JP","og_type":"article","og_title":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3","og_description":"\u3053\u306e\u8a18\u4e8b\u306f\u500b\u4eba\u30d6\u30ed\u30b0\u3068\u540c\u3058\u5185\u5bb9\u3067\u3059 https:\/\/zenn.dev\/ptpadan\/articles ESLint 9 \u304c\u30ea\u30ea\u30fc\u30b9\u3055\u308c\u3001\u65b0\u3057\u3044 Flat Config \u5f62\u5f0f\u304c\u6a19\u6e96\u3068\u306a\u308a\u307e\u3057\u305f\u3002 \u3053\u306e\u8a18\u4e8b\u3067\u306f\u3001\u30e2\u30ce\u30ec\u30dd\u74b0 [&hellip;]","og_url":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407","og_site_name":"\u30dd\u30b1\u30b3\u30f3","article_published_time":"2025-09-22T17:52:47+00:00","og_image":[{"width":1200,"height":630,"url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.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":"2\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#article","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/6514\/"},"author":{"name":"info@pokecon.jp","@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"headline":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 &#8211; ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0","datePublished":"2025-09-22T17:52:47+00:00","mainEntityOfPage":{"@id":"https:\/\/pokecon.jp\/job\/6514\/"},"wordCount":79,"image":{"@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.png","articleSection":["\u4f01\u696d\u30c6\u30c3\u30af"],"inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/pokecon.jp\/job\/6514\/","url":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407","name":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 - ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0 - \u30dd\u30b1\u30b3\u30f3","isPartOf":{"@id":"https:\/\/pokecon.jp\/job\/#website"},"primaryImageOfPage":{"@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#primaryimage"},"image":{"@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#primaryimage"},"thumbnailUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.png","datePublished":"2025-09-22T17:52:47+00:00","author":{"@id":"https:\/\/pokecon.jp\/job\/#\/schema\/person\/16c9f07b1ba984d165d9aee259bda997"},"breadcrumb":{"@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#primaryimage","url":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.png","contentUrl":"https:\/\/pokecon.jp\/job\/wp-content\/uploads\/2025\/09\/1758521928.png","width":1200,"height":630},{"@type":"BreadcrumbList","@id":"https:\/\/techblog.roxx.co.jp\/entry\/2025\/09\/22\/151407#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u30db\u30fc\u30e0","item":"https:\/\/pokecon.jp\/job\/"},{"@type":"ListItem","position":2,"name":"ESLint 9\u3078\u306e\u30a2\u30c3\u30d7\u30c7\u30fc\u30c8\u3068Flat Config\u79fb\u884c\u30ed\u30b0 &#8211; ROXX\u958b\u767a\u8005\u30d6\u30ed\u30b0"}]},{"@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\/6514","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=6514"}],"version-history":[{"count":1,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/6514\/revisions"}],"predecessor-version":[{"id":6516,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/posts\/6514\/revisions\/6516"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media\/6515"}],"wp:attachment":[{"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/media?parent=6514"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/categories?post=6514"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pokecon.jp\/job\/wp-json\/wp\/v2\/tags?post=6514"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}