From 7a91dd6526b46ba7d317526627162925f81abf8c Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 04:42:52 +0900 Subject: [PATCH 01/57] rename naro-text-rs --- docs/.vitepress/config.ts | 10 +- package-lock.json | 896 ++++++++++++++++++++++++++++++-------- package.json | 4 +- 3 files changed, 717 insertions(+), 193 deletions(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index cd78a003..8fd307ae 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,10 +6,10 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ - base: '/naro-text/', - title: 'なろう講習会', - description: 'Webエンジニアになろう講習会のテキスト', - head: [['link', { rel: 'icon', href: '/naro-text/favicon.ico' }]], + base: '/naro-text-rs/', + title: 'なろう講習会 in Rust', + description: 'Webエンジニアになろう講習会のテキスト in Rust', + head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], markdown: { theme: { light: 'github-dark', @@ -26,7 +26,7 @@ export default defineConfig({ '/chapter2/': chapter2SidebarItems, '/chapter4/': chapter4SidebarItems }, - socialLinks: [{ icon: 'github', link: 'https://github.com/traPtitech/naro-text' }], + socialLinks: [{ icon: 'github', link: 'https://github.com/traP-jp/naro-text-rs' }], search: { provider: 'local', options: { diff --git a/package-lock.json b/package-lock.json index 7291cb02..fa588153 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,17 +1,17 @@ { - "name": "nero-text", + "name": "naro-text-rs", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "nero-text", + "name": "naro-text-rs", "dependencies": { "textlint-filter-rule-allowlist": "^4.0.0" }, "devDependencies": { "@types/node": "^20.12.11", "prettier": "3.2.5", - "textlint": "^14.0.4", + "textlint": "^14.2.1", "textlint-rule-ja-no-abusage": "^3.0.0", "textlint-rule-ja-no-mixed-period": "^3.0.1", "textlint-rule-ja-simple-user-dictionary": "^1.0.1", @@ -227,12 +227,14 @@ "node_modules/@azu/format-text": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@azu/format-text/-/format-text-1.0.2.tgz", - "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==" + "integrity": "sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==", + "license": "BSD-3-Clause" }, "node_modules/@azu/style-format": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@azu/style-format/-/style-format-1.0.1.tgz", "integrity": "sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==", + "license": "WTFPL", "dependencies": { "@azu/format-text": "^1.0.1" } @@ -665,12 +667,89 @@ "node": ">=12" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", "dev": true }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { "version": "4.14.2", "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz", @@ -960,89 +1039,99 @@ } }, "node_modules/@textlint/config-loader": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.0.4.tgz", - "integrity": "sha512-qgAvZ1RcTq58+yNbzhaKHsb52yHRxt8SRpG7S4WFjYj2DEStjIxzssSQvlZtEBjSUQ7RZNJ93d+pL0YK8MIVoA==", - "dependencies": { - "@textlint/kernel": "^14.0.4", - "@textlint/module-interop": "^14.0.4", - "@textlint/types": "^14.0.4", - "@textlint/utils": "^14.0.4", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/config-loader/-/config-loader-14.2.1.tgz", + "integrity": "sha512-QfrALRn6ObeuTuwAl/bEtI9ScU2dTYDd+w3lB6JAQL+baAk8vclXnzbzI9L3p+YhmhGxOSNohZV09qSkhDYHZg==", + "license": "MIT", + "dependencies": { + "@textlint/kernel": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "rc-config-loader": "^4.1.3", "try-resolve": "^1.0.1" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/ast-node-types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz", - "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", + "license": "MIT" }, "node_modules/@textlint/config-loader/node_modules/@textlint/ast-tester": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.4.tgz", - "integrity": "sha512-SQ/2DjxVlDVeCEjVlD8c8R2Sl3VGDZEx8o9+i8bV8NUdY8qsSHbo29/BfiUZf/uaX6eeNpZsurtstJ25hbVrsQ==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.1.tgz", + "integrity": "sha512-JQhZQToHYfHy/w/AyRg+03uxG53yp6OSbq7mpRhvgpwMk/N5GAtF+vLhfMAUAStJLXpq5xfFEvDNROZsgn2x7Q==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/ast-traverse": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.4.tgz", - "integrity": "sha512-bzFC7UJ2FvhjH5ekXGQ0i9vjK+xzMT69gHBsYVEl+TtbplnH2YY3+sbw6B1j3LocJuo6xngZ2YWXXqmQlKgzLg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.1.tgz", + "integrity": "sha512-MmYIRE3myWPgswJlq1Iu42o/Z9aKQkeHF7SS/toySc1iDpjS4lKTYcbzRoq+RD8Tjp35RCcxBIpufrrZrT7V0Q==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/feature-flag": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.4.tgz", - "integrity": "sha512-1FMZqnjOA4KVpt/aloI1fNs46P0rUeHWcCRKl33/08wRHHMdcbaN4EsHkq7UfriuSfFgUuiyeo0bPjCpv15hhQ==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.1.tgz", + "integrity": "sha512-7fXZWh3UUH0LwPu2CWJOaSnYHVQojgQ/ulXQayMXf50x3/CGY/dqaBKpB+I/PW+60/pnKgUwJm9E/eHzwhVAqQ==", + "license": "MIT" }, "node_modules/@textlint/config-loader/node_modules/@textlint/kernel": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.4.tgz", - "integrity": "sha512-6WNoEBZ4lYTYOGK4EEEdjp+kgxSSC1nIFwN6tY9XGVkd4OACzDNothVTvJBwaX73FWFG5zoSjnNQxBDPUHMc8g==", - "dependencies": { - "@textlint/ast-node-types": "^14.0.4", - "@textlint/ast-tester": "^14.0.4", - "@textlint/ast-traverse": "^14.0.4", - "@textlint/feature-flag": "^14.0.4", - "@textlint/source-code-fixer": "^14.0.4", - "@textlint/types": "^14.0.4", - "@textlint/utils": "^14.0.4", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.1.tgz", + "integrity": "sha512-PkCagYKlVLQvw9CBijJJ30Hmp9rk9oJJt9danoMhdR+v91SMQ7eeWk7HG8CqGbEnL0NehoOqgZV+O5Tfr8x38A==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-tester": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/source-code-fixer": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/module-interop": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.4.tgz", - "integrity": "sha512-okv52pRSQ1aeC8rim8qp2D2Fmj/oKDYGY2itdeZhj9E/vdkU9/r7OpdcxyuNiuqLEd/sWw03EAwt3S6mlfNIOw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", + "license": "MIT" }, "node_modules/@textlint/config-loader/node_modules/@textlint/source-code-fixer": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.4.tgz", - "integrity": "sha512-gIUeWjF0WdSwgCUhW310hKJsWOyRyFe6PGaqqCk7Mhc+vVcePfmC8mmmhVgeuyys/Dhe+0iaP4M1eJf4COaIQw==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.1.tgz", + "integrity": "sha512-5VI+BLieZOrXVrqCkEIbvGu73gkKw52Ns8J1OPNqaCpbnmiKmKcRzBsbMxzwD4Pa7M0l4yhUzyd15/7i7hzmAg==", + "license": "MIT", "dependencies": { - "@textlint/types": "^14.0.4", + "@textlint/types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.4.tgz", - "integrity": "sha512-SNdFG/GB6utYeHmNfoAMlI+K1NykPxK9TtilkEfhr/fF9TqmeeJ+6CMk5NLQzEvfKm6jUbv2pp5DPS27vo6GKg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/config-loader/node_modules/@textlint/utils": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.4.tgz", - "integrity": "sha512-/ThtVZCB/vB2e8+MnKquCFNO2cKXCPEGxFlkdvJ5g9q9ODpVyFcf2ogYoIlvR7cNotvq67zVjENS7dsGDNFEmw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.1.tgz", + "integrity": "sha512-I8rV2jJfiVSP8EtpVSXCqISqyRPwx3GdZIIXehWn5k86cnBMt5RkPI4lvxZEbLECHsUkhQx11rC2tkOpabgUTA==", + "license": "MIT" }, "node_modules/@textlint/feature-flag": { "version": "13.4.1", @@ -1051,12 +1140,13 @@ "dev": true }, "node_modules/@textlint/fixer-formatter": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.0.4.tgz", - "integrity": "sha512-HkMxzGPo/pgA9UvddqJG6qm62ICNgil3AmBVp0QpOv5uTV1u9gCSQ5jOdb/aOJBw7W8fd+CcnEsEBYn9HT8e6A==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/fixer-formatter/-/fixer-formatter-14.2.1.tgz", + "integrity": "sha512-AquSEaP0m0ZGlCzOHwRiAmnruFAngjLL5g/ZzE2REQ2qwSnUuxEII5SsucqTgT37LXOKBXNpU1OSPlKwtF2aJw==", + "license": "MIT", "dependencies": { - "@textlint/module-interop": "^14.0.4", - "@textlint/types": "^14.0.4", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "diff": "^5.2.0", @@ -1067,27 +1157,31 @@ } }, "node_modules/@textlint/fixer-formatter/node_modules/@textlint/ast-node-types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz", - "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", + "license": "MIT" }, "node_modules/@textlint/fixer-formatter/node_modules/@textlint/module-interop": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.4.tgz", - "integrity": "sha512-okv52pRSQ1aeC8rim8qp2D2Fmj/oKDYGY2itdeZhj9E/vdkU9/r7OpdcxyuNiuqLEd/sWw03EAwt3S6mlfNIOw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", + "license": "MIT" }, "node_modules/@textlint/fixer-formatter/node_modules/@textlint/types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.4.tgz", - "integrity": "sha512-SNdFG/GB6utYeHmNfoAMlI+K1NykPxK9TtilkEfhr/fF9TqmeeJ+6CMk5NLQzEvfKm6jUbv2pp5DPS27vo6GKg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/fixer-formatter/node_modules/diff": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -1116,14 +1210,15 @@ } }, "node_modules/@textlint/linter-formatter": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.0.4.tgz", - "integrity": "sha512-EQZJPydExEIvBARkdmkoGsKWie1ekNAiqerQgIqwPb3SqOzKnlaDGrZOMy40HufTcacZrrvlbByDyai6m30+Lw==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/linter-formatter/-/linter-formatter-14.2.1.tgz", + "integrity": "sha512-GHgNuQQAA/YyYeYcfF0JbFZZomrC0VtfldjKqCmTmPy7c89MTZPZFgyRbTKm1G8tUmxh4RuT1rkgwvX3IgT2VQ==", + "license": "MIT", "dependencies": { "@azu/format-text": "^1.0.2", "@azu/style-format": "^1.0.1", - "@textlint/module-interop": "^14.0.4", - "@textlint/types": "^14.0.4", + "@textlint/module-interop": "^14.2.1", + "@textlint/types": "^14.2.1", "chalk": "^4.1.2", "debug": "^4.3.4", "js-yaml": "^3.14.1", @@ -1137,21 +1232,24 @@ } }, "node_modules/@textlint/linter-formatter/node_modules/@textlint/ast-node-types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz", - "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", + "license": "MIT" }, "node_modules/@textlint/linter-formatter/node_modules/@textlint/module-interop": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.4.tgz", - "integrity": "sha512-okv52pRSQ1aeC8rim8qp2D2Fmj/oKDYGY2itdeZhj9E/vdkU9/r7OpdcxyuNiuqLEd/sWw03EAwt3S6mlfNIOw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", + "license": "MIT" }, "node_modules/@textlint/linter-formatter/node_modules/@textlint/types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.4.tgz", - "integrity": "sha512-SNdFG/GB6utYeHmNfoAMlI+K1NykPxK9TtilkEfhr/fF9TqmeeJ+6CMk5NLQzEvfKm6jUbv2pp5DPS27vo6GKg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/@textlint/markdown-to-ast": { @@ -1633,14 +1731,15 @@ } }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -1737,6 +1836,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1745,6 +1845,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -1767,6 +1868,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -1782,6 +1884,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -1811,6 +1914,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1828,6 +1932,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -1870,6 +1975,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -1897,6 +2003,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -1979,6 +2086,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -1989,7 +2097,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/comma-separated-tokens": { "version": "1.0.8", @@ -2012,6 +2121,20 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/crypt": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", @@ -2030,6 +2153,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -2046,6 +2170,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -2062,6 +2187,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -2099,6 +2225,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -2115,6 +2242,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -2154,10 +2282,17 @@ "integrity": "sha512-aw55FtZzT6AmiamEj2kvmR6BuFqvYgKZUkfQ7teqVRNqD5UE0rw8IeW/3gieHNKQ5sPuDKlljWEn4bzv5+1bHw==", "dev": true }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/entities": { "version": "4.5.0", @@ -2183,6 +2318,7 @@ "version": "1.23.3", "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -2242,6 +2378,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -2253,6 +2390,7 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -2261,6 +2399,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, "dependencies": { "es-errors": "^1.3.0" }, @@ -2272,6 +2411,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -2285,6 +2425,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, "dependencies": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -2395,7 +2536,8 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-equals": { "version": "4.0.3", @@ -2407,6 +2549,12 @@ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, + "node_modules/fast-uri": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.2.tgz", + "integrity": "sha512-GR6f0hD7XXyNJa25Tb9BuIdN0tdr+0BMi6/CJPH3wJO1JjNG3n/VsSw38AwRdKZABm8lGbPfakLRkYzx2V9row==", + "license": "MIT" + }, "node_modules/fault": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/fault/-/fault-1.0.4.tgz", @@ -2472,10 +2620,27 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, "dependencies": { "is-callable": "^1.1.3" } }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -2515,6 +2680,7 @@ "version": "1.1.6", "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -2532,6 +2698,7 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2540,6 +2707,7 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -2566,6 +2734,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -2601,6 +2770,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, "dependencies": { "define-properties": "^1.1.3" }, @@ -2615,6 +2785,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -2642,6 +2813,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2650,6 +2822,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2658,6 +2831,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, "dependencies": { "es-define-property": "^1.0.0" }, @@ -2669,6 +2843,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -2680,6 +2855,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -2691,6 +2867,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "dependencies": { "has-symbols": "^1.0.3" }, @@ -2705,6 +2882,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, "dependencies": { "function-bind": "^1.1.2" }, @@ -2784,6 +2962,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -2830,6 +3009,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -2850,6 +3030,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, "dependencies": { "has-bigints": "^1.0.1" }, @@ -2861,6 +3042,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -2881,6 +3063,7 @@ "version": "1.2.7", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -2914,6 +3097,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, "dependencies": { "is-typed-array": "^1.1.13" }, @@ -2928,6 +3112,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -2975,6 +3160,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -2992,6 +3178,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, "engines": { "node": ">= 0.4" }, @@ -3003,6 +3190,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3036,6 +3224,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -3059,6 +3248,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, "dependencies": { "call-bind": "^1.0.7" }, @@ -3073,6 +3263,7 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -3096,6 +3287,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, "dependencies": { "has-symbols": "^1.0.2" }, @@ -3110,6 +3302,7 @@ "version": "1.1.13", "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, "dependencies": { "which-typed-array": "^1.1.14" }, @@ -3129,6 +3322,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.2" }, @@ -3139,7 +3333,14 @@ "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==" + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "node_modules/isobject": { "version": "3.0.1", @@ -3149,6 +3350,21 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/japanese-numerals-to-number": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/japanese-numerals-to-number/-/japanese-numerals-to-number-1.0.2.tgz", @@ -3181,12 +3397,14 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -3275,7 +3493,8 @@ "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==" + "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", + "license": "MIT" }, "node_modules/lodash.uniq": { "version": "4.5.0", @@ -3302,6 +3521,12 @@ "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", "dev": true }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, "node_modules/magic-string": { "version": "0.30.10", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", @@ -3632,6 +3857,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/minisearch": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.3.0.tgz", @@ -3712,6 +3946,15 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/neotraverse": { + "version": "0.6.18", + "resolved": "https://registry.npmjs.org/neotraverse/-/neotraverse-0.6.18.tgz", + "integrity": "sha512-Z4SmBUweYa09+o6pG+eASabEpP6QkQ70yHj351pQoEXIs8uHbaU2DWVmzBANKgflPa47A50PtB2+NgRpQvr7vA==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, "node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -3736,6 +3979,7 @@ "version": "1.13.1", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3744,6 +3988,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -3752,6 +3997,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -3819,6 +4065,12 @@ "node": ">=4" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, "node_modules/parse-entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", @@ -3869,11 +4121,36 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/path-to-glob-pattern": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-to-glob-pattern/-/path-to-glob-pattern-2.0.1.tgz", @@ -3934,12 +4211,14 @@ "node_modules/pluralize": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-2.0.0.tgz", - "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==" + "integrity": "sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==", + "license": "MIT" }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, "engines": { "node": ">= 0.4" } @@ -4032,18 +4311,11 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, "node_modules/rc-config-loader": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/rc-config-loader/-/rc-config-loader-4.1.3.tgz", "integrity": "sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==", + "license": "MIT", "dependencies": { "debug": "^4.3.4", "js-yaml": "^4.1.0", @@ -4054,12 +4326,14 @@ "node_modules/rc-config-loader/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" }, "node_modules/rc-config-loader/node_modules/js-yaml": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -4174,6 +4448,7 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, "dependencies": { "call-bind": "^1.0.6", "define-properties": "^1.2.1", @@ -4271,6 +4546,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4354,6 +4630,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -4379,6 +4656,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -4420,6 +4698,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4436,6 +4715,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -4446,6 +4726,27 @@ "node": ">= 0.4" } }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/shiki": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.3.0.tgz", @@ -4459,6 +4760,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -4472,10 +4774,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -4597,6 +4912,22 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -4610,6 +4941,7 @@ "version": "1.2.9", "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4627,6 +4959,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4640,6 +4973,7 @@ "version": "1.0.8", "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -4656,6 +4990,20 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -4686,6 +5034,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -4714,6 +5063,7 @@ "version": "6.8.2", "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -4734,29 +5084,31 @@ "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "license": "MIT" }, "node_modules/textlint": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.0.4.tgz", - "integrity": "sha512-xPQkC/BftPjizjs31wci/791EjwfN11iRLrNKiPVBogYd1r+6TnSxbCERZhgXCGcD9tEHss0kOYc0+vPEEG8jg==", - "dependencies": { - "@textlint/ast-node-types": "^14.0.4", - "@textlint/ast-traverse": "^14.0.4", - "@textlint/config-loader": "^14.0.4", - "@textlint/feature-flag": "^14.0.4", - "@textlint/fixer-formatter": "^14.0.4", - "@textlint/kernel": "^14.0.4", - "@textlint/linter-formatter": "^14.0.4", - "@textlint/module-interop": "^14.0.4", - "@textlint/textlint-plugin-markdown": "^14.0.4", - "@textlint/textlint-plugin-text": "^14.0.4", - "@textlint/types": "^14.0.4", - "@textlint/utils": "^14.0.4", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/textlint/-/textlint-14.2.1.tgz", + "integrity": "sha512-dqzQ/VKQeofwCbVgpzoE1sRUQkIU4zquNFbvtBQpUbS121w8hB51BtomCKbB42V86kDHONQYlPz4nocdaZh7ww==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/config-loader": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/fixer-formatter": "^14.2.1", + "@textlint/kernel": "^14.2.1", + "@textlint/linter-formatter": "^14.2.1", + "@textlint/module-interop": "^14.2.1", + "@textlint/textlint-plugin-markdown": "^14.2.1", + "@textlint/textlint-plugin-text": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "file-entry-cache": "^5.0.1", "get-stdin": "^5.0.1", - "glob": "^7.2.3", + "glob": "^10.4.5", "md5": "^2.3.0", "mkdirp": "^0.5.6", "optionator": "^0.9.3", @@ -5344,115 +5696,172 @@ } }, "node_modules/textlint/node_modules/@textlint/ast-node-types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.0.4.tgz", - "integrity": "sha512-O7L1pgle030Co9ou1+6e2/6GgcIpKgqwEc0XiBabokc22Yl0QEkrf00K/usBDmSx+wo1ficWBux2mfBEF0jnDA==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-node-types/-/ast-node-types-14.2.1.tgz", + "integrity": "sha512-UuYY1ADfU6Nvo3l9JQoJ6XWt1lohSyyvbFE96FVjkJDIwLxEyF8nPeoTNa/gJTmLCzimQfY0C+4jAYrPxVjt/A==", + "license": "MIT" }, "node_modules/textlint/node_modules/@textlint/ast-tester": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.0.4.tgz", - "integrity": "sha512-SQ/2DjxVlDVeCEjVlD8c8R2Sl3VGDZEx8o9+i8bV8NUdY8qsSHbo29/BfiUZf/uaX6eeNpZsurtstJ25hbVrsQ==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-tester/-/ast-tester-14.2.1.tgz", + "integrity": "sha512-JQhZQToHYfHy/w/AyRg+03uxG53yp6OSbq7mpRhvgpwMk/N5GAtF+vLhfMAUAStJLXpq5xfFEvDNROZsgn2x7Q==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/textlint/node_modules/@textlint/ast-traverse": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.0.4.tgz", - "integrity": "sha512-bzFC7UJ2FvhjH5ekXGQ0i9vjK+xzMT69gHBsYVEl+TtbplnH2YY3+sbw6B1j3LocJuo6xngZ2YWXXqmQlKgzLg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/ast-traverse/-/ast-traverse-14.2.1.tgz", + "integrity": "sha512-MmYIRE3myWPgswJlq1Iu42o/Z9aKQkeHF7SS/toySc1iDpjS4lKTYcbzRoq+RD8Tjp35RCcxBIpufrrZrT7V0Q==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/textlint/node_modules/@textlint/feature-flag": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.0.4.tgz", - "integrity": "sha512-1FMZqnjOA4KVpt/aloI1fNs46P0rUeHWcCRKl33/08wRHHMdcbaN4EsHkq7UfriuSfFgUuiyeo0bPjCpv15hhQ==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/feature-flag/-/feature-flag-14.2.1.tgz", + "integrity": "sha512-7fXZWh3UUH0LwPu2CWJOaSnYHVQojgQ/ulXQayMXf50x3/CGY/dqaBKpB+I/PW+60/pnKgUwJm9E/eHzwhVAqQ==", + "license": "MIT" }, "node_modules/textlint/node_modules/@textlint/kernel": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.0.4.tgz", - "integrity": "sha512-6WNoEBZ4lYTYOGK4EEEdjp+kgxSSC1nIFwN6tY9XGVkd4OACzDNothVTvJBwaX73FWFG5zoSjnNQxBDPUHMc8g==", - "dependencies": { - "@textlint/ast-node-types": "^14.0.4", - "@textlint/ast-tester": "^14.0.4", - "@textlint/ast-traverse": "^14.0.4", - "@textlint/feature-flag": "^14.0.4", - "@textlint/source-code-fixer": "^14.0.4", - "@textlint/types": "^14.0.4", - "@textlint/utils": "^14.0.4", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/kernel/-/kernel-14.2.1.tgz", + "integrity": "sha512-PkCagYKlVLQvw9CBijJJ30Hmp9rk9oJJt9danoMhdR+v91SMQ7eeWk7HG8CqGbEnL0NehoOqgZV+O5Tfr8x38A==", + "license": "MIT", + "dependencies": { + "@textlint/ast-node-types": "^14.2.1", + "@textlint/ast-tester": "^14.2.1", + "@textlint/ast-traverse": "^14.2.1", + "@textlint/feature-flag": "^14.2.1", + "@textlint/source-code-fixer": "^14.2.1", + "@textlint/types": "^14.2.1", + "@textlint/utils": "^14.2.1", "debug": "^4.3.4", "fast-equals": "^4.0.3", "structured-source": "^4.0.0" } }, "node_modules/textlint/node_modules/@textlint/markdown-to-ast": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.0.4.tgz", - "integrity": "sha512-D9UUxnRJoNROVjOa9bhoQPDdRvlvS/xP3MJo0Kl6b/mJFi0dOlW31WUfpOFjZkp4uXkL+oo0ji7AMnmV6JORsQ==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/markdown-to-ast/-/markdown-to-ast-14.2.1.tgz", + "integrity": "sha512-IbxuCiGg2dQMg+PlLrSIvryEAngdvydF1MztRII9AjJNOMKomzYmZaNVRaANlhuFLnOwJbunNg0MV1q7oXz+iw==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4", + "@textlint/ast-node-types": "^14.2.1", "debug": "^4.3.4", "mdast-util-gfm-autolink-literal": "^0.1.3", + "neotraverse": "^0.6.15", "remark-footnotes": "^3.0.0", "remark-frontmatter": "^3.0.0", "remark-gfm": "^1.0.0", "remark-parse": "^9.0.0", - "traverse": "^0.6.8", "unified": "^9.2.2" } }, "node_modules/textlint/node_modules/@textlint/module-interop": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.0.4.tgz", - "integrity": "sha512-okv52pRSQ1aeC8rim8qp2D2Fmj/oKDYGY2itdeZhj9E/vdkU9/r7OpdcxyuNiuqLEd/sWw03EAwt3S6mlfNIOw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/module-interop/-/module-interop-14.2.1.tgz", + "integrity": "sha512-xMkUYUDnP6le/s3oHyoAX6pvIESDlz7l+vUyDwQjKxnZwawdaO3K8aZIXkXDh4VNiBx9erFhsFoePm714VsPtA==", + "license": "MIT" }, "node_modules/textlint/node_modules/@textlint/source-code-fixer": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.0.4.tgz", - "integrity": "sha512-gIUeWjF0WdSwgCUhW310hKJsWOyRyFe6PGaqqCk7Mhc+vVcePfmC8mmmhVgeuyys/Dhe+0iaP4M1eJf4COaIQw==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/source-code-fixer/-/source-code-fixer-14.2.1.tgz", + "integrity": "sha512-5VI+BLieZOrXVrqCkEIbvGu73gkKw52Ns8J1OPNqaCpbnmiKmKcRzBsbMxzwD4Pa7M0l4yhUzyd15/7i7hzmAg==", + "license": "MIT", "dependencies": { - "@textlint/types": "^14.0.4", + "@textlint/types": "^14.2.1", "debug": "^4.3.4" } }, "node_modules/textlint/node_modules/@textlint/text-to-ast": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.0.4.tgz", - "integrity": "sha512-r2KSnKzhsCIvX72yX+7sEuu9nDQIS4+xRsSffuXYB0etRQUI6VTTsE6Ibd6yMbEsMDUF4BfKWzNGn+bQ8U7oHA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/text-to-ast/-/text-to-ast-14.2.1.tgz", + "integrity": "sha512-SHZIroDA1Gabhfj/GEatuP3x7CeD0I2xqWaJTaXkmuAgj6ckrjF9130zTgRCmOgm174FDr//H1MO6nc30ly2sA==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/textlint/node_modules/@textlint/textlint-plugin-markdown": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.0.4.tgz", - "integrity": "sha512-mqQieI9U5GTRTjkK4Cj57Axl6fVloaA8g0+sCsp3TjmNWyEgGBvt3aw+FIUiFTvheg9L3RGe/aXgvp5ORADOAA==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-markdown/-/textlint-plugin-markdown-14.2.1.tgz", + "integrity": "sha512-14ZKJ9xsmTM9fr7S+ybisnhfNwL9CH/qcIU4/yjoP73RL1MMX4ddb/THGDBVt5O/wm4kzSUFP0CiNtDVxFfskQ==", + "license": "MIT", "dependencies": { - "@textlint/markdown-to-ast": "^14.0.4" + "@textlint/markdown-to-ast": "^14.2.1" } }, "node_modules/textlint/node_modules/@textlint/textlint-plugin-text": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.0.4.tgz", - "integrity": "sha512-HwTQyOcwDRrPPHyD8lwSMyGR1ETasR2WK6BLO0PRbowRe6K/K4b9OBBd6+nJcRFa+9Nd6p7nxPzA2WxDi1X/Zg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/textlint-plugin-text/-/textlint-plugin-text-14.2.1.tgz", + "integrity": "sha512-9rKR6zFfcO80cOhgUbWtcGTETe35osoyxdV5wuwf2xQLy4KTr9p1X9Jox6NjfLq6OSnOKAsiM/s31QlT6Mczlg==", + "license": "MIT", "dependencies": { - "@textlint/text-to-ast": "^14.0.4" + "@textlint/text-to-ast": "^14.2.1" } }, "node_modules/textlint/node_modules/@textlint/types": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.0.4.tgz", - "integrity": "sha512-SNdFG/GB6utYeHmNfoAMlI+K1NykPxK9TtilkEfhr/fF9TqmeeJ+6CMk5NLQzEvfKm6jUbv2pp5DPS27vo6GKg==", + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/types/-/types-14.2.1.tgz", + "integrity": "sha512-SaJsPYn7mXbInU77wbvsW277hLwmyijCS6Gld3VjBxXBYpJb9fzDliKHt1GYTYNRMtI/jQudwl13Clyt3nju5w==", + "license": "MIT", "dependencies": { - "@textlint/ast-node-types": "^14.0.4" + "@textlint/ast-node-types": "^14.2.1" } }, "node_modules/textlint/node_modules/@textlint/utils": { - "version": "14.0.4", - "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.0.4.tgz", - "integrity": "sha512-/ThtVZCB/vB2e8+MnKquCFNO2cKXCPEGxFlkdvJ5g9q9ODpVyFcf2ogYoIlvR7cNotvq67zVjENS7dsGDNFEmw==" + "version": "14.2.1", + "resolved": "https://registry.npmjs.org/@textlint/utils/-/utils-14.2.1.tgz", + "integrity": "sha512-I8rV2jJfiVSP8EtpVSXCqISqyRPwx3GdZIIXehWn5k86cnBMt5RkPI4lvxZEbLECHsUkhQx11rC2tkOpabgUTA==", + "license": "MIT" + }, + "node_modules/textlint/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/textlint/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/textlint/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/to-regex": { "version": "3.0.2", @@ -5472,6 +5881,7 @@ "version": "0.6.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", "integrity": "sha512-7bBrcF+/LQzSgFmT0X5YclVqQxtv7TDJ1f8Wj7ibBu/U6BMLeOpUxuZjV7rMc44UtKxlnMFigdhFAIszSX1DMg==", + "dev": true, "dependencies": { "gopd": "^1.0.1", "typedarray.prototype.slice": "^1.0.3", @@ -5496,7 +5906,9 @@ "node_modules/try-resolve": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/try-resolve/-/try-resolve-1.0.1.tgz", - "integrity": "sha512-yHeaPjCBzVaXwWl5IMUapTaTC2rn/eBYg2fsG2L+CvJd+ttFbk0ylDnpTO3wVhosmE1tQEvcebbBeKLCwScQSQ==" + "integrity": "sha512-yHeaPjCBzVaXwWl5IMUapTaTC2rn/eBYg2fsG2L+CvJd+ttFbk0ylDnpTO3wVhosmE1tQEvcebbBeKLCwScQSQ==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT" }, "node_modules/type-check": { "version": "0.4.0", @@ -5513,6 +5925,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -5526,6 +5939,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -5544,6 +5958,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -5563,6 +5978,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -5582,6 +5998,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/typedarray.prototype.slice/-/typedarray.prototype.slice-1.0.3.tgz", "integrity": "sha512-8WbVAQAUlENo1q3c3zZYuy5k9VzBQvp8AX9WOtbvyWlLM1v5JaSRmjubLjzHF4JFtptjH/5c/i95yaElvcjC0A==", + "dev": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -5601,6 +6018,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -5704,14 +6122,6 @@ "node": ">=4" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", @@ -5895,10 +6305,26 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/which-boxed-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -5914,6 +6340,7 @@ "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -5928,6 +6355,103 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 788a3042..d00cedd6 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "nero-text", + "name": "naro-text-rs", "type": "module", "scripts": { "docs:dev": "vitepress dev docs", @@ -13,7 +13,7 @@ "devDependencies": { "@types/node": "^20.12.11", "prettier": "3.2.5", - "textlint": "^14.0.4", + "textlint": "^14.2.1", "textlint-rule-ja-no-abusage": "^3.0.0", "textlint-rule-ja-no-mixed-period": "^3.0.1", "textlint-rule-ja-simple-user-dictionary": "^1.0.1", From 92a8aec0e61290efd18aa1da19791a3b903d1e1c Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 04:55:05 +0900 Subject: [PATCH 02/57] change workflows to adapt develop branch --- .github/workflows/lint.yml | 1 + .github/workflows/pages.yaml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index f2677a74..a8b83253 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - develop jobs: textlint: diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml index fe7f5888..c50831ff 100644 --- a/.github/workflows/pages.yaml +++ b/.github/workflows/pages.yaml @@ -1,9 +1,9 @@ -name: Deploy +name: Deploy from develop on: workflow_dispatch: {} push: branches: - - main + - develop jobs: deploy: runs-on: ubuntu-latest From 8c326c3d8285aba92a6792e85d83918ad3be4039 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 04:59:32 +0900 Subject: [PATCH 03/57] add 'in Rust' to hero in index.md --- docs/index.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/index.md b/docs/index.md index 8d450cd6..367b48f2 100644 --- a/docs/index.md +++ b/docs/index.md @@ -3,8 +3,8 @@ layout: home hero: - name: "Webエンジニアになろう講習会" - tagline: traP SysAd班 + name: "Webエンジニアになろう講習会 in Rust" + tagline: traP SysAd班 & naro-rs編集チーム features: - title: Web開発の基礎 details: Web開発の基礎的な知識を学びます。 From de9393939067c8e63b4546d4bc1c792e3e657e5b Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 06:20:24 +0900 Subject: [PATCH 04/57] fix deploy branch to main --- .github/workflows/pages.yaml | 4 ++-- package.json | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml index c50831ff..fe7f5888 100644 --- a/.github/workflows/pages.yaml +++ b/.github/workflows/pages.yaml @@ -1,9 +1,9 @@ -name: Deploy from develop +name: Deploy on: workflow_dispatch: {} push: branches: - - develop + - main jobs: deploy: runs-on: ubuntu-latest diff --git a/package.json b/package.json index d00cedd6..c7150c19 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,9 @@ { "name": "naro-text-rs", "type": "module", + "engines": { + "node": "18.x" + }, "scripts": { "docs:dev": "vitepress dev docs", "docs:build": "vitepress build docs", From 62f7304ad6de5ce73bfbfebaf9097418c0c0853a Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 07:27:59 +0900 Subject: [PATCH 05/57] Update package-lock.json --- package-lock.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/package-lock.json b/package-lock.json index fa588153..91312177 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,9 @@ "textlint-rule-preset-ja-technical-writing": "^10.0.1", "textlint-rule-spellcheck-tech-word": "^5.0.0", "vitepress": "^1.1.4" + }, + "engines": { + "node": "18.x" } }, "node_modules/@aashutoshrathi/word-wrap": { From 8a7ca5985caf0daedafaaee445039e110aac7516 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 07:40:59 +0900 Subject: [PATCH 06/57] add vite --- package-lock.json | 476 ++++++++++++++++++++++++---------------------- package.json | 3 +- 2 files changed, 249 insertions(+), 230 deletions(-) diff --git a/package-lock.json b/package-lock.json index 91312177..75b0afe0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,8 @@ "": { "name": "naro-text-rs", "dependencies": { - "textlint-filter-rule-allowlist": "^4.0.0" + "textlint-filter-rule-allowlist": "^4.0.0", + "vite": "^5.4.8" }, "devDependencies": { "@types/node": "^20.12.11", @@ -303,13 +304,13 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", "cpu": [ "ppc64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" @@ -319,13 +320,13 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", "cpu": [ "arm" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -335,13 +336,13 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -351,13 +352,13 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "android" @@ -367,13 +368,13 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -383,13 +384,13 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -399,13 +400,13 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -415,13 +416,13 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -431,13 +432,13 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", "cpu": [ "arm" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -447,13 +448,13 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -463,13 +464,13 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", "cpu": [ "ia32" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -479,13 +480,13 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", "cpu": [ "loong64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -495,13 +496,13 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", "cpu": [ "mips64el" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -511,13 +512,13 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", "cpu": [ "ppc64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -527,13 +528,13 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", "cpu": [ "riscv64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -543,13 +544,13 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", "cpu": [ "s390x" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -559,13 +560,13 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -575,13 +576,13 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" @@ -591,13 +592,13 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" @@ -607,13 +608,13 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" @@ -623,13 +624,13 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -639,13 +640,13 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", "cpu": [ "ia32" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -655,13 +656,13 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -754,195 +755,208 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz", - "integrity": "sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", "cpu": [ "arm" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.2.tgz", - "integrity": "sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.2.tgz", - "integrity": "sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.2.tgz", - "integrity": "sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.2.tgz", - "integrity": "sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", "cpu": [ "arm" ], - "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.2.tgz", - "integrity": "sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.2.tgz", - "integrity": "sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.2.tgz", - "integrity": "sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", "cpu": [ "ppc64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.2.tgz", - "integrity": "sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", "cpu": [ "riscv64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.2.tgz", - "integrity": "sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", "cpu": [ "s390x" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.2.tgz", - "integrity": "sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.2.tgz", - "integrity": "sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.2.tgz", - "integrity": "sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", "cpu": [ "arm64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.2.tgz", - "integrity": "sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", "cpu": [ "ia32" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.2.tgz", - "integrity": "sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", "cpu": [ "x64" ], - "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -1352,10 +1366,10 @@ "dev": true }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, "node_modules/@types/linkify-it": { "version": "5.0.0", @@ -1391,7 +1405,7 @@ "version": "20.12.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.11.tgz", "integrity": "sha512-vDg9PZ/zi+Nqp6boSOT7plNuthRugEKixDv5sFTIpkE89MmNtEArAShI4mxuX2+UrLEe9pxC1vm2cjm9YlWbJw==", - "dev": true, + "devOptional": true, "dependencies": { "undici-types": "~5.26.4" } @@ -2442,11 +2456,11 @@ } }, "node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "dev": true, + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -2454,29 +2468,29 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/escape-string-regexp": { @@ -2661,8 +2675,8 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3935,7 +3949,6 @@ "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", - "dev": true, "funding": [ { "type": "github", @@ -4179,10 +4192,10 @@ "dev": true }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", + "license": "ISC" }, "node_modules/pify": { "version": "2.3.0", @@ -4227,10 +4240,9 @@ } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", - "dev": true, + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", "funding": [ { "type": "opencollective", @@ -4245,10 +4257,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" @@ -4596,12 +4609,12 @@ } }, "node_modules/rollup": { - "version": "4.14.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.2.tgz", - "integrity": "sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==", - "dev": true, + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.6" }, "bin": { "rollup": "dist/bin/rollup" @@ -4611,21 +4624,22 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.14.2", - "@rollup/rollup-android-arm64": "4.14.2", - "@rollup/rollup-darwin-arm64": "4.14.2", - "@rollup/rollup-darwin-x64": "4.14.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.14.2", - "@rollup/rollup-linux-arm64-gnu": "4.14.2", - "@rollup/rollup-linux-arm64-musl": "4.14.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.14.2", - "@rollup/rollup-linux-riscv64-gnu": "4.14.2", - "@rollup/rollup-linux-s390x-gnu": "4.14.2", - "@rollup/rollup-linux-x64-gnu": "4.14.2", - "@rollup/rollup-linux-x64-musl": "4.14.2", - "@rollup/rollup-win32-arm64-msvc": "4.14.2", - "@rollup/rollup-win32-ia32-msvc": "4.14.2", - "@rollup/rollup-win32-x64-msvc": "4.14.2", + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", "fsevents": "~2.3.2" } }, @@ -4826,10 +4840,10 @@ } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", - "dev": true, + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -6036,7 +6050,7 @@ "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "devOptional": true }, "node_modules/unified": { "version": "9.2.2", @@ -6185,14 +6199,14 @@ } }, "node_modules/vite": { - "version": "5.2.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.11.tgz", - "integrity": "sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==", - "dev": true, + "version": "5.4.8", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.8.tgz", + "integrity": "sha512-FqrItQ4DT1NC4zCUqMB4c4AZORMKIa0m8/URVCZ77OZ/QSNeJ54bU1vrFADbDsuwfIPcgknRkmqakQcgnL4GiQ==", + "license": "MIT", "dependencies": { - "esbuild": "^0.20.1", - "postcss": "^8.4.38", - "rollup": "^4.13.0" + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" }, "bin": { "vite": "bin/vite.js" @@ -6211,6 +6225,7 @@ "less": "*", "lightningcss": "^1.21.0", "sass": "*", + "sass-embedded": "*", "stylus": "*", "sugarss": "*", "terser": "^5.4.0" @@ -6228,6 +6243,9 @@ "sass": { "optional": true }, + "sass-embedded": { + "optional": true + }, "stylus": { "optional": true }, diff --git a/package.json b/package.json index c7150c19..3ec4967a 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "vitepress": "^1.1.4" }, "dependencies": { - "textlint-filter-rule-allowlist": "^4.0.0" + "textlint-filter-rule-allowlist": "^4.0.0", + "vite": "^5.4.8" } } From 777a5c5d7028a868fa2010c480c878b79b309481 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 07:42:56 +0900 Subject: [PATCH 07/57] fix scripts name --- package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index 3ec4967a..2f4f8bb0 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,9 @@ "node": "18.x" }, "scripts": { - "docs:dev": "vitepress dev docs", - "docs:build": "vitepress build docs", - "docs:preview": "vitepress preview docs", + "dev": "vitepress dev docs", + "build": "vitepress build docs", + "preview": "vitepress preview docs", "textlint:fix": "textlint '**/*.md' --cache --fix", "textlint:check": "textlint '**/*.md' --cache", "fmt": "prettier --check docs", From 9677e0ddae29d7d3c7010ab0670680a357ade7fd Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 07:55:43 +0900 Subject: [PATCH 08/57] Update lint.yml --- .github/workflows/lint.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index a8b83253..6123ef1b 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -30,7 +30,7 @@ jobs: cache: npm - run: npm ci - name: Build - run: npm run docs:build + run: npm run build format: runs-on: ubuntu-latest permissions: From 1209c40cdff642c04a2a65ca8f262a10612668bb Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 13:17:24 +0900 Subject: [PATCH 09/57] remove base --- .github/workflows/pages.yaml | 2 +- docs/.vitepress/config.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/pages.yaml b/.github/workflows/pages.yaml index fe7f5888..f043b134 100644 --- a/.github/workflows/pages.yaml +++ b/.github/workflows/pages.yaml @@ -23,7 +23,7 @@ jobs: cache: npm - run: npm ci - name: Build - run: npm run docs:build + run: npm run build - uses: actions/configure-pages@v2 - uses: actions/upload-pages-artifact@v1 with: diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 8fd307ae..6245d409 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,7 +6,6 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ - base: '/naro-text-rs/', title: 'なろう講習会 in Rust', description: 'Webエンジニアになろう講習会のテキスト in Rust', head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], From 5d0f7c7701c5d62d0edf22263c13dfdd2ea96ae8 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 13:30:21 +0900 Subject: [PATCH 10/57] Create vite.config.ts --- docs/vite.config.ts | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 docs/vite.config.ts diff --git a/docs/vite.config.ts b/docs/vite.config.ts new file mode 100644 index 00000000..a78ff065 --- /dev/null +++ b/docs/vite.config.ts @@ -0,0 +1,6 @@ +import type { UserConfig } from 'vite' + +const config: UserConfig = { +} + +export default config; \ No newline at end of file From fb604c0bdf2b8262f6c3c8860058603eeb38c7aa Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 13:43:55 +0900 Subject: [PATCH 11/57] add base --- docs/.vitepress/config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 6245d409..8fd307ae 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,6 +6,7 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ + base: '/naro-text-rs/', title: 'なろう講習会 in Rust', description: 'Webエンジニアになろう講習会のテキスト in Rust', head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], From 8670b3f5732dedc651e1a1a46442536dabe77784 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 14:02:39 +0900 Subject: [PATCH 12/57] Update config.ts --- docs/.vitepress/config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 8fd307ae..6245d409 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,7 +6,6 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ - base: '/naro-text-rs/', title: 'なろう講習会 in Rust', description: 'Webエンジニアになろう講習会のテキスト in Rust', head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], From b4f071d7aaadbc2b64b9e9a3a1f7ce4a636f2780 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 15:14:06 +0900 Subject: [PATCH 13/57] Update config.ts --- docs/.vitepress/config.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 6245d409..8fd307ae 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,6 +6,7 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ + base: '/naro-text-rs/', title: 'なろう講習会 in Rust', description: 'Webエンジニアになろう講習会のテキスト in Rust', head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], From fbea6022a19ef51d5a5396cd418ad32d4f786181 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 15:26:38 +0900 Subject: [PATCH 14/57] delete base --- docs/.vitepress/config.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 8fd307ae..6245d409 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -6,7 +6,6 @@ import { webBasicSidebarItems } from './sidebarConfigs/chapters/webBasic/webBasi // https://vitepress.dev/reference/site-config export default defineConfig({ - base: '/naro-text-rs/', title: 'なろう講習会 in Rust', description: 'Webエンジニアになろう講習会のテキスト in Rust', head: [['link', { rel: 'icon', href: '/naro-text-rs/favicon.ico' }]], From a94ed06f7668f4781876436fb594961a308d5912 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 15:35:20 +0900 Subject: [PATCH 15/57] Delete vite.config.ts --- docs/vite.config.ts | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 docs/vite.config.ts diff --git a/docs/vite.config.ts b/docs/vite.config.ts deleted file mode 100644 index a78ff065..00000000 --- a/docs/vite.config.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { UserConfig } from 'vite' - -const config: UserConfig = { -} - -export default config; \ No newline at end of file From 8943a0c0086a6f583c6340ec1fae5e103ac6a00f Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 21:49:20 +0900 Subject: [PATCH 16/57] edit web-basic --- docs/web_basic/2_backend.md | 145 ++++++++---------- docs/web_basic/images/cargo_run_axum.png | Bin 0 -> 12522 bytes .../images/cargo_run_hello_world.png | Bin 0 -> 12086 bytes docs/web_basic/images/curl-vvv.png | Bin 36539 -> 22766 bytes docs/web_basic/images/go_import_library.png | Bin 2091 -> 0 bytes docs/web_basic/images/go_run_main_go.png | Bin 9864 -> 0 bytes .../web_basic/images/hello-world-response.png | Bin 8987 -> 5068 bytes docs/web_basic/images/jikosyokai.png | Bin 14952 -> 22582 bytes docs/web_basic/images/json-response.png | Bin 66088 -> 21136 bytes docs/web_basic/images/terminal.png | Bin 1763 -> 3003 bytes 10 files changed, 63 insertions(+), 82 deletions(-) create mode 100644 docs/web_basic/images/cargo_run_axum.png create mode 100644 docs/web_basic/images/cargo_run_hello_world.png delete mode 100644 docs/web_basic/images/go_import_library.png delete mode 100644 docs/web_basic/images/go_run_main_go.png diff --git a/docs/web_basic/2_backend.md b/docs/web_basic/2_backend.md index e3d3b0b6..91b6bcc7 100644 --- a/docs/web_basic/2_backend.md +++ b/docs/web_basic/2_backend.md @@ -45,72 +45,61 @@ MDN にはこの世の全てが書いてある。 ::: -## Go言語でHello World - +## RustでHello World 前回と同様に GitHub Codespaces を起動してください。(前回とリポジトリが違います!) -https://github.com/traPtitech/develop-base-training-backend - -`main.go`ファイルを開き、以下のように書いて保存してみましょう。 +https://github.com/traP-jp/develop-base-training-backend-rs -```go -package main +`src/main.rs`ファイルを開きましょう。以下のコードが書かれているはずです。 -func main() { - fmt.Println("Hello, World!") +```rs +fn main() { + println!("Hello, world!"); } ``` -`Ctrl+S`で保存すると自動でライブラリがインポートされます。 - -![`import fmt`が書き込まれている](images/go_import_library.png) - この状態で以下のコマンドを GitHub Codespaces 内のターミナルで実行して、以下のように`Hello, World!`が出れば OK です。 -以下のような表記がされている場合は`$`を入力しないで`go run main.go`などだけを入力するようにしてください。 (`$`はすでに入力されているはずです!) +以下のような表記がされている場合は`$`を入力しないで`cargo run`などだけを入力するようにしてください。 (`$`はすでに入力されているはずです!) ```bash -$ go run main.go +$ cargo run ``` -![](images/go_run_main_go.png) +![](images/cargo_run_hello_world.png) ## サーバーアプリケーションを作る -次の内容を`main.go`に書き込んでください。 +次の内容を`main.rs`に書き込んでください。 -```go -package main +```rs +use axum::{routing::get, Router}; -import ( - "net/http" - "github.com/labstack/echo/v4" - "github.com/labstack/echo/v4/middleware" -) +#[tokio::main] +async fn main() { + let app = Router::new().route("/hello", get(String::from("Hello, World.\n"))); -func main() { - e := echo.New() - e.Use(middleware.CORS()) + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); - e.GET("/hello", func(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World.\n") - }) - - e.Logger.Fatal(e.Start(":8080")) + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); } ``` -次のコマンドををターミナルで実行してください。 +次のコマンドをターミナルで実行してください。 ```sh -$ go mod tidy -$ go run main.go +$ cargo add axum +$ cargo add tokio --features rt-multi-thread,macros +$ cargo run ``` 以下のような画面が出れば起動できています。 -コードに変更を加えたら一旦止めてもう 1 回`go run main.go`で起動しないと変更が反映されないので注意してください。 +コードに変更を加えたら一旦止めてもう 1 回`cargo run`で起動しないと変更が反映されないので注意してください。 止めるときは`Ctrl+C`で終了できます。止めないと次に起動するときにポート番号を変えないとエラーが出てしまうので、使い終わったら止めるようにしましょう。 -![echoを実行している様子](images/go_run_echo.png) +![axumを実行している様子](images/cargo_run_axum.png) :::tip ターミナルの開き方 ツールバー > Terminal > New Terminal でその時開いているディレクトリでターミナルが開きます。 @@ -158,73 +147,65 @@ Github Codespases には URL が設定されているので、皆さんの PC 例 ![jikosyokai](images/jikosyokai.png) -完成したら URL を #event/workshop/web-basic チャンネルに投稿してください +:::info +完成したら URL を #event/workshop/naro-rs チャンネルに投稿してください ::: ## JSONレスポンスを返す レスポンスとして JSON を返すようにしましょう :::info -Go 言語の構造体についてわからない人は -https://go-tour-jp.appspot.com/moretypes/2 +Rust の構造体についてわからない人は +https://doc.rust-jp.rs/book-ja/ch05-01-defining-structs.html を見るといいでしょう。 ::: -JSON をレスポンスとして返すためには、`c.JSON`メソッドに構造体を渡します。 +JSON と構造体を相互変換するために、``serde`` というフレームワークを用います。 + +次のコマンドをターミナルで実行してください。 -```go -package main +```sh +$ cargo add serde serde_json --features serde/derive +``` -import ( - "net/http" - "github.com/labstack/echo/v4" - "github.com/labstack/echo/v4/middleware" -) +JSON をレスポンスとして返すためには、`Json` に定義した構造体を渡します。 -type jsonData struct { - Number int - String string - Bool bool -} +```rs +use axum::{routing::get, Json, Router}; -func main() { - e := echo.New() - - e.Use(middleware.CORS()) +#[tokio::main] +async fn main() { + let app = Router::new() + .route("/hello", get(String::from("Hello, World.\n"))) + .route("/json", get(json_handler)); - e.GET("/hello", func(c echo.Context) error { - return c.String(http.StatusOK, "Hello, World.\n") - }) + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); - e.GET("/json", jsonHandler) + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); +} - e.Logger.Fatal(e.Start(":8080")) +#[derive(serde::Serialize)] +struct JsonData { + number: i32, + string: String, + bool: bool, } -func jsonHandler(c echo.Context) error { - res := jsonData{ - Number: 10, - String: "This is test.", - Bool: false, - } +async fn json_handler() -> Json { + let res = JsonData { + number: 10, + string: String::from("This is test."), + bool: true, + }; - return c.JSON(http.StatusOK, &res) + Json(res) } ``` ![JSON形式のレスポンスが返ってきている様子](images/json-response.png) -タグを追加することで構造体のフィールドに対応する、JSON のキー名を指定できます。Go の構造体のフィールドはパスカルケースですが、json のフィールドはキャメルケース / スネークケースになることが多いため、変換した方が良いですね。 - -```go -type jsonData struct { - Number int `json:"number,omitempty"` - String string `json:"string,omitempty"` - Bool bool `json:"bool,omitempty"` -} -``` - -参考: [encoding/json#Marshal](https://pkg.go.dev/encoding/json#Marshal) -注意: 上のリンク先にも書いてありますが、`omitempty`を指定した場合には、`0`や`false`、`""`(空文字)のような falsy なデータがレスポンスに含まれなくなります。 ## 発展課題 @@ -247,7 +228,7 @@ const httpGetRequest = async () => { ``` ここに受け取った値を HTML にセットする処理を書きます(前回書きましたね)。 -`data.String`や`data.Bool`、`data.Number`のように書くことでそれぞれのデータにアクセスできます(`jsonData`の構造体を定義したときにタグをつけて JSON のキー名を変更した場合には、ここも`data.string`のように書く必要があります)。 +`data.string`や`data.bool`、`data.number`のように書くことでそれぞれのデータにアクセスできます。 `async` `await`という見慣れない書き方が出てきましたが、`await` = 処理を待つ、`async` = `await`を使えるようにする、ぐらいの認識で OK です。 :::details 答え diff --git a/docs/web_basic/images/cargo_run_axum.png b/docs/web_basic/images/cargo_run_axum.png new file mode 100644 index 0000000000000000000000000000000000000000..d045512d06c6717169a9fa75edfec8f56aaea0c4 GIT binary patch literal 12522 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 eYI^{QeJ#xS`|# literal 0 HcmV?d00001 diff --git a/docs/web_basic/images/cargo_run_hello_world.png b/docs/web_basic/images/cargo_run_hello_world.png new file mode 100644 index 0000000000000000000000000000000000000000..d3b30040d09866dc33835239ef319b1639529ed4 GIT binary patch literal 12086 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 ZF@`arfH#lZZ@KPJQeyI=mBNPp{|5+F;#&X! literal 0 HcmV?d00001 diff --git a/docs/web_basic/images/curl-vvv.png b/docs/web_basic/images/curl-vvv.png index 41c9637f038a912ee71b738164f63d7acd9e42bc..7fa195c2e114222eb63c026c552fedb61f5dace3 100644 GIT binary patch literal 22766 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 literal 36539 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

Fz0Q((8zO1hO#y*g(F&i8C>&>Iv6gnc-u zj$SSy9YIR0(QOBy`RM`g0x4SP@RuiY#I+TBA6X5CUBW5itp>}^PE;DvROutiQZFql zXh{fQ_|l|8p1O=ci+i!-Zl_eLws{o`q;6_ls{MqnFv7qIoD~IvIt?SijXe6`1^l?N zPHjy%S$EEix=ac^3bOYCrG3alB9dFfKnLiTy>bw+e@=yy{G0O>$vFBSFys2oNqVB~ z0r{66!$$+WDAR(`x_?enE$+@^%}G4AiSt73X}k+4ED6WoCe`I#6e< z(Dl1p;IBtnF5tvR_X(y6;F759`;dJ`mGC;qlWXuy@!dbmk>>oF@fKYRyb<355%;NI z8rC;Ty#nrAAqi9Olp5;v!P0#RaFx3@i*>!bEfNYbVbK#$tma%(2?#0 z`$Mw4hhG%-esYc!oO6Y#-zvXsC;W4bduD|JS4?r?NPT@R4IV?{;#~x$8*XJ#2n~{w z$J+Nrk9ISN!#tA3GlhnN_7K=KteI~8+$1Rc^veUv=b_6d3tBWOGBuYP$1ON%KL{ZjB;+qFt~9%lVK_>4z3yEY<}qvtT3IVok``h`_=;GM6fB3smqhgFk?P2fKVQr z+&<#RTFIy2o}T9#_>SSp&bcG% zwu8)NkR;!1fO)y}p!PtGU52Bv2B&tM?z?b5_8)<-K3WBh=A)T=dx(QUVLMnO_I7J7 zLF?9a?ciTk%%4@2*POa!jvG?>wG~QipJekR-T9EDoao({5P01Pao!6@(}GanV}qsHb}Ic2sbbmmQAPotR79ihN4G-basn00O61Eu$tl_OmNU!?CFoiRm@15 z9FB86;}@vl-Y4hB??;FD*Gv1yWaSG`K%ZyqZ`HU6re({_2U&~KNV(GX<@w2wP?8hpNo=2%Tydg6W^D8(XghW6@!j!8Ju?QyP#L^WZqC;vecE~h z?V9vs=6TIXz@L4LX?bx2jo@EFV-DzRq9Wj9X4kY^u&KK!}sp0v;n6gtZ} zLR|w&^C}e0&ab0=!Ke&gC!Mp~HRLqSUF8^{2hJEgl4NQuwHL(syr)@3Xu5F*sYC%l zs<4+&UF+xv#GeBs>PoB=aOv!~p-SWYh+4d1Pd_Uj;T~eRX2G$^EkUk^UWoVl1J%6( z+UuCf!luo4-&abm|I!M4gyu1t2mRQhxT~-;x5^0%;rU>YSVthyuDvC=@9Ev2cU#5- zAw&$(ae~~(FpP~L@#b1f4A$?GF6_l#Zd3QtV3R#;FM=oyiWcB&83wN>;5{l-(nS$d z$QSY{l4RhlC95_mHs(h5g63$IN@6w}^+6zee_9r-K;s8k74=`$=rU(X1lei!%jH9- zZfvG_COFCbhXsf-Zd~Es;{^KZk#ZN<)907rZNR`$M`|qLp;!)E0O=+4SmY6d&E^N) zH0_MhkuoJZhXY4H_8|N>IZ_hcV;pg>yt6oE|C8DtXgT;Mw~W9QA>P1rHH2J8oPw#> z#sdF>DTF+r@6)Y_yn1V&|H<8WFhDR5Dl1m}#TUo)kO9eq`$SCq^6`JcDsBMI?T5er zP3I2~1qdps0J5IQy0>=a|NScjNx|oS%^bU!T~6Ia$Q!8x)NTa;s)7(%9@9-0dP{Mk z-ODuR?3M9YE$sX7Xhg%48x%@WjaYcui#Z`LRN7mF4G|PcwxK1MF}G9)oyRW!^l0&i z3s7;}TFc-h<=nM*USGrKZaMjDm-d|P%WmgAH~WNVHGS2dap2QI(^K9IV>}|g*9_Up zpjd+sMzelo9(6fIseN-a@6;`5qRqX2b83R7J65>gr+PFm4wOwEA#g-sBq1%a@!8j$ z#~fJ$d;A>c!KOOR*(I*-du?#sI?=sS*-Klq;Ky@kD`Nb@v*ZEKoZ}l8Jj*;%Q9-Dx z$d?nRhQ}v!J)UIaJ9)8GmaDY0Z3BfGdBt8$g zljQy6m?SSSIcvXv+YDwlT{_{Z%h#vIlTN5jzPTnlJTvna_DBhn=EFBS9V36OI;=xm zdg-|r6ON@iusDS|CKVtoS94cgUB+0lN;md0Pc2rw-~p+{Q6eT;>c5BF9iSWzN+!^X z`l6RwR)n~XThxeEV6JTi(=>>hh1fck-|?sXb>(Z;XA0X=xfFhjVpNhzOM3G&jbu7h zV*htEHrmS$em6CZ!lePG=vrlNo>7op($9Sg_frOfT< zbFvXC1hXjs_+iNQ@nLnt>$&B0j%icjS+8Z$)hCuY78ai<5Gz?mBgknAZ1l!gPF!~> z!*g?Rdr9h?&SCYTbojc^_=NKfPFaTfqSZice(h&}ouD--jw+EcnM8|41Z{Mw8|H#k zlbWX2nWl%cufA%F#RHK*6&0um8xmhRlQ{?4J_u@A)A-B}jLP5B!=>aQf;FYkA5#Pb zZ%;H-60<-W17)bNIxGTd-9_-9C+BvC+IW}qTKbidZ-rq*S>=#+W>JYs(91%#BqKtH z9MkQwl21PZ?na1awktP3KFIrr9&u}d1+H_RSB1{kDp7M zRduw34N#rRAi%bGlq!>ckj*yoJ5sn_* zle2TW+6cg+R8$vFkB!4e$=B&Ax%Ob-`9MWx%fM&yODh{xg73|p{ip_&xoO1gErH+) z8&r4=qB2_}PTkD#_eH$1=3+T?(!Fe5&=VIk8)Dpr;jEnn+zfuCZ80=^3NS|mF4}mE zGX#h8^d~z$p`*2oR6N5^jDX%t%Tmv!cUEhx_F9s+u{kqC7xubO`8&suhk*yO;5ROZgRUa1 z2%-kzh%jC~n$0_%dxb4F_qwv-f*2Sk(vfO|4Rr`*uoM)m>mQiOC@?`0zshDjAj#Rw zl^rO3^vNVMU*c3odSI>nc2BLj&3$oP#?&n62W?JjQ6XsUQOHxn?(&tLSEFXs34S?r zqm4llwaD92NHLF7D>f#o>ZYyI&(7+8q5CZe0p5mepI8+q-k{`PP6s)5k7!&z^KzgT z6f2$gvSLSSt`&Kn1u;j2tP+(*c3{&jKOwqGSmDpD+@8H#gI9H%k^L-8MNrijkc}|L zuf%Z)&T$-&-1sr85-f6N_FL9|O#ww$-5EiY+H7~34 zz^=>FlrTJjQT8u7;rqrC`{U69ImPK1IP?Z>UZ)A~cO&RLiU|?kDfuUdIzt6nfQ8qr zJ9^_vwp8w*mB${zQ8d|NRz15d8cRStM>+38Y-!u>OcZ|UQO7ot0Ao9yTiMlK3KDP) zV5y{sy5!g3hMQ5X@N~U4q?BJ^U+p^$R-Mped>H3K2IlMPOk(62ahSQG%`PKJv9ZX zzydev6VRpZgXw6>1_+&}1RE8FVJ-oveWV8G7oeH}e5?S&0;3@iVpBz=klQ<~YWEy| zVO0DDP8!3ud<02>XQ?}2Q|$Yh1yle!kA8HmQY1)UOr+A z2yJV24}Ia_i*_=^iHw7(j@HO)}6PNZ>92&uQoUzVUB_t+i!*C8LT%! zY_$Dk=3V%?wRqW?(ZtoRrg>TdfdpFEe0+m&wXq*aSulo;E)3Cw%*0Me}34)6QW<%QgHlN_PIp9=Z(;aed67g zBi7clW%3WV;t zJNQaPUzn!*bq+rr@Vr&Jgd(%otXuZOl1SE6sdPuE1Y}j8SRXY#bF>+h4sg7N(vmkq z&ZZQiLHL?|5uJ6YWsLr=UX*Kf+;8dw3msx=%Xyw`{Gr!jOumTBX6il}we<|o&_-Sz zR}A5WB5M<$*0`7;ksiD)mZ7^1#vh&9Kg5NC!>_^^7uvYJPmM4gHEV(TPJ@`D@hIt4 zK?+NvV*A^;I9tO!g?8<;>4 zg=rn?A=Y_w6zQSnNhHAJ01|rxm@zF#M=M%7NpHnITHSw2IgQE8JW>nwOp1 znPb^GZhA2Dvo$K@W*YMu;RwD8BHNwQ;vj&g9h9LyjTMFSuQQZPG_-c!h1)!=$g5QJ zQ&Gr@6CiT%DutW*e$`GYW7F164z)~%WvxU}VoYlDr?*}9R9+aOU#9=QYi`oY{FU~Mc3L<*B2&2l!-Sg+D|ValKyo*hQ-HOsxP?acYVoUcL=csG z&GFLD`lWc`b{mhP@?1~yNb_MQCPW0EdbdpH#&cR-n9(Sdke1yguuD!*DQ_-UKHMG+h z{?s7E!vdx=8YANt(g z-s`xH*xk?@ZaHa5a^j540<#`K8vL@DJfM+_R}!yPKqVRhW~OW@QFKhxvKQaXidW_p zB(Q|rkc53wLxL0hGIB|Rc|FDWNXG>mr{2m-r@MU2lHO<^=U9f(m6sW`}y~z1a z{9IV%g>$QPi4x@sp2=}xy-AXre|iVUd`^G6x^+6GTKCqz96umbb{0Dn=-BSel<=(7 z{6iXiRoY82N|0GH0vgd7#w;~6I!EGL)-R`~4RiBrTK=5+2rZFN^%JGAj?~r(Qr@KZ zQ8lP96;1_n!>N;14qT8*aY<&OfuGg)kGwL+;I+%X-)3&%KxkS4+28DU^KksfQbpBuP01Y*8$YY=V|-mo_F62~vQ!q1pqeB>jTafYbUJ*GVhBxT{hIb@r)* z@pLsZyGF-V^_Co@^ZGVny-~2q{t)U(eU`QoHwevP0h` zsHb>#sA&!=YdAbokzp@Q__cJmoj}+pnW$aJ23fTETD?hDA$~*7&9wz{!jJBOgPRGU z3{FnuYV|;qZZES-M(tjbu%*|*Xr2^_8`;&Vs506+?JckB>kcENWNit<0S0fWTu&_z z2irp05|{Ww*Y*hOloPoSKN*WGEh{BKpPfe*{`_j zt0jiXiL;>k=Bk@yFIoR^nm->xe#xbny{?lJ~u0ezx)<=hQOSEkbGdjL!#ag;E2lE#w>gPOV&ck2<+O}xZh5pr)#aJ*4>($Ro6 zq61ezq-|d4NT22r)x)u$a`s_7#$ zg00$)V)5T@@TKk)FW z?hU)F$-XarnOB6&7QgEn0edETu~s0vCRBn|;MOlY9@1z#6@T17cpWv%Ig}AiPDx-} zi$4jVtYknJusGp=KniF$_vKC>t^dIUbdo+^$U zi!yPmdT`qwpXde1o3iATptNBM53nY2qvpuTS7zevtFEUsKa{x;-hKM{n1sU33#uQ{ zB&~@l!LEUM(xs5e%J7j^_`&C`2+9J=#_|^Z29}G|^SDTSqS~P^7UNzr?nEl=i@9DbxGEW$-gDWctz@%FcXVV{IT>eNZx3F-Q--FIE&73?mq;=_ z^DS~^9e*9ksVKaV1>@5pcTuA5KnD?`AdDiViDMr9J7|o2Qvq70Hgl2!jXYEzFN7-} z!Viq1oorfG>6FkUjE3}q*nuzN0Fz{2 z;TL}xeO@%KK{)wXl-ygDhMV9j?fvUaZCmmSZk|+7y>Okt(iG8`QM{-8_byxk(}A}h z!!LOjYEThIZaVDU=Gn^zQh|!+1w&2IwL1QEi#WYstURsaC)%Aht!crTOG}NApGdYr z5%MLzI5=lm6jWm`6O@4tv#>>nJIj)7PMq7cLLt6`*{FDUH-Z}A*59z{ZKu~TM(QvS zs>9K-=!ALaK3dy>IEPc=bU$O(FUc3dREpsNX~Do|rLx~J#G2VP0EDEvP^{z{>Y4?Q zOsMq+q&LLQ^o=f5CNV{C>e`F5B*ANY3%%&2Np9>o@_A$)lbBlZMzxvtYBCTX8LEoD z1od*(M?Z2L%nhvWila(ylO(mXHh*%}K;l>MydC_3j>X(d%$%0Ib$K`Z`cnfQ+F5yl&6F0Fy z-r(pG8=Ft5WGVj2+wMn??r)r6s=zh~2JX%C8PUr0Q2P2x zJ*SXY1vRKMe8`WJ3qMrC}&M{`#fzk%SV4+1`nXeUA{G()f7AI#K&{1&rAj3P3!*>`O zAMC9NBP0u!7O0G=cbzV0Tkv}@Zvhej-y+L&E5wyg?Hbhd*sUdIFX!I*7p=Bho8P;u z_Yuo5!mi4viZZLDtR$ea5R^Ta=sx|3E&t+ONbU5kWZV(+%1^}1w=0<4%9uKQ4*`dO zgUm-EbcC?V+WLfmfc8GyrPEkH>bIfKVc7vKyu>z_h~|7ej+?xK`k%kojIyk}M0b)4>cg@z9V?wFUZVE`Ab&2Dcz( z4w|aFn^Bz9vu^WiYIgWmH)QZ5)cepL#_weK5FW+R9s1 zG8=ZIVn{RXc1s>g%js$w?K=__vf@miKp|4b4=kb?1d;!o%^l+;lc7TL3126*4su3~ zMtkGuTzg)|(>;HT=;=_OhV?lQHU6U=w53NHj*q1n`12=LRh%pO)Kx`~K2J)p1^jJ5S13rxy>3l+A`J|KVMwZ$m*q z3(*3m;^NR@f&d!d$P@z+U9Ay@ewz&VNK%316A;j#g8zG07)VHyabQAbfU!Q`2XTCe zKmR^LebmU;zpR$gsM#N1Ci<<>V7rq*mMxc*K0;e9HdCj^#|)>!a?@9t22aIvc5T9$ zukZN28LJX;AGCn}#Wynq0`=`hfyyv3WDSlEv_1S6mm;q}iX>xPpp> zHZ6X?tTP@bJaMk<2Xm?^=!f@vAaAWR}n)oo3z<=Glt!y}Dt zebiN-tXcukeMJ|G{8uT~(R)+;N7q>n5UD?uu!4exxKp&(IXWEUOSD7zplAxdcW>4R z&oEfvC=<@-Pb)w95J>xtveJ!xS~UC!YV}u}AJ2LB6Ui7Z8C-j~4rOg8kQ?a4wA_gd z+BpGl24h9QhnsHpR4D3@bupE9A`m!>JwL&pq0enT__0jW)rSL^q4Rs#^W))}Nrw*g z)UThVS?lnQNsD^#V|Psl=n)l?r?ai3g5_&h{g_6yZ0@$`GnCgB+XmOYeoG&^6&7{R z6d6mZKtAaon^sj@TT&*1r8trJwYt_mEYtd%103Q|db=a$G%DD*LY$ku}Xv%dGlQ&Lu$>myUO8UD9n zTpj%@HYf9^GC6hG-Vve4HCDmlWyFqU91s=$F*FVKL@V9upH~jQl@F~jG9WvUyBRgw z(iMFeVsoR>#6F4p@rsBYvY@Uu#_)=hXV}yN`*wdR-CSeGJAW)(iZPg~ygOyV25D)ms39bqX+^+&_Y+$3Iz3y0(URcicy&C0 zZ*t;Yl+fmpjpTHtMmb>z-a(j^%#GM{a?rCJ*ZDd;3elhWD4B(=hU-3lewfp5WR0F| ze}A!Ca!tUXxl@)2-zYGM6Zzq~$hW7Et2S)G|AQr)x;8Jnv25s5FQ2y^YsxR$mN<0E zhB*3@6#RG1Q;1wiVqUpi*|7r(tP}eZ*if8A=OdIAsor0?eYtX2p({yn<2k6w#LBq; z2s2e=Y}y88^x?R3J~$2W>21ZnulMp=TJGkLRLSS{BN3KHr``Lq<&BKpgsa3 z@~0IbX6(@=1k#MmF1;QWEon8gOUqc_??zt>9Cy!(@#vb#SaL)ztn%3S*=D9J-I?8L zdOv4j7vxl{LStkMrG~Qi-)~YiD6>xuVf^kY0ZPG1^M1{5vN*3+7=V9Rn(bHpOvn(j zpdsXh4=%j*fQBt)-{rR6!Brup^_X|9M<5iG*BnOn>+tz|W zgQFbL0VmIxRSnr#{IA;8Vh?;LDz|p!HCa%O^a<+Enyyg(9?)vvnbU=IyotXL2lVto z#}L0g4)Z-!9k1mt#mKUNL4h!i@Z&!^je%W4(WXxY5l$igC@uTa!iA(e)X!EH(JUd-eT^-V- z8x5oa^6lt!E9QkyC2_jqJwL4YSNC|5$?LN6zbp%isCyGwVr>vQbV03bfgrw} zWf15w>8viXGnvT*6aN6ttE2vO(@{vj@Ht#pHY#OZ>Uco~(j+9Koh+sV?KXY^ir558 zK0<9^NYfahl=;%9I5+b7Ba3glC-GDVr(o-%?0*kZCd@6yN}Lk3f)UZT3tqA!h2~~9 z-9>t4SO`;a)NI9SrCJf0Jj;YSqXSm3x>X9A)|t9p_85Ev7m)6%#vG<3bW;c(qrLqhUv-+NytyR4mgYR z7-%hLAI*rCW}rPI5Vi}fT$BCB%M*VNQb|GFC8@_i|GlujNP#jT_q!tpr&DIsuM}my zQiVOGKgLj&_>Iye1aNG8;@I3v<-1&S1g-+lemYOZmwRROr8s65w|;VzH^8XYB*ChK zt})J=l9cj3)hp(@x1ZB_w#tI1Sffv3Vsc4t=7#)BGzu^eXVm?{VuPDd47fCbN}4fG z!&xk`xBE5kk8WRm9o~Mv&@@YGx4u?*de+2|3C}7vT#7XEYh*C>1AjLA4;?7886Ztvh6n>71`^iUhs;(xH zhQ0Vri(u~;M0Is@o-AH=z7@@i#7%A0Af#;JeOq?tSmCbqF3_=DDXop$QR9G7(7Qpu zjT`ihcA-FFr2JPHi*EB^rIm{k3CE(Kp}%s2cq+Ju2y112P_d)EvMrkBt|#=5@eW+( zEdfw}Z7b`TRHTu#Wxp>)IGg>^OMjn|qq;f_ZEEOj*Y_Uo_y2psw4r~R=jT8W|Itxz z@)heHbY(Q+AItGg;RypmFc8F<=a19_fo=grq`s>Y;-3uw0fz*18X|ba=s%~ZM*>9j zw191)6{!oYXZ4gJK2>N2P(&F~AQu;3hkoU|Lcubu{_N0ZxI%KqS;T0aDKKUE?#%Y{ z!&j7EBE#7fre*~^p)nO&LA*366+_C#cE!gjliqcKlr7LIBI<^-s*BB^l@E*LbXItT zO_zv%Kb}uB92sRUd{!RsEe&*vw9)6{>>sDnd}(27cU&?{;#F-OA^mGZoUTetqFK`U z;cxn=TsSYk^Iy~(8 zS5|j>5V-dfMvCyaV&Y&84XsMA6&!yz5`$INu8*D_B>VaKHvIhf@gOD zYW;zv1KN^}^*)*ZFMdaynY;U+W6QhmGe2!E_j>3cG89tLy(D(znGrYKg(ba?+7ipO zb;wU(f=SXk$ekF6Th_th)Iy zrI3^)u#r@OJfMtud}B-H0(aYImAy@z>Jz_nAhTSCpQCR-1oImXD;mK+%nbd>5eU7B zY@}8GmM!8)sqh~1@L-#}=cKI|fxu|4>^JT?R!wHGLpz_O-I5xM zj-5k2w>jz}jjT7pVq);sCJZ(*Dw;dB)H#;n(K{3lycF~)26&@V6OYQB| z5)iyGzwfxKW#rLk=|oSt0`#8`?o(_`*Lh#HMO?^U@#z@+s>9&qp*qq0#eXS%|3{UL zf8hifp(Vt-Hmf#l;uq~awbLJ_N73k5A5VUM+H#W75;NeB@B4BtV9GP~*u=hjJ(i0# zZ{|=oii4SL;^r`bvZkg`8-W?n9Q=U=dPx)Pcta?&eDIB-o{ znLuNHeoV^E)_j~&GvoMz$rxWss0IRd!v=K<9w_QA4A$*-$p;(Ex#l@y1xecJP!II3z5C?be2MZ0qt* z0}nkZls2Se8-l``TyXW0HuE3iTm6eC$qs0k!z!>*l$n{~>L%-)iKynxQwsIUJJijU z&hkhov~?ncOgG{kMTj@D<7*!!0XeHoR3TtYr1FKk-5o=h4t1)7Ge3(qE9Kvb15~Y0Fc+QI|9Ge*&TdUHt#6 zLfh5BmR0WiL`J4q`VA&b%!ausGcf*lImxF&@xB2YFn_6&##h&rjmkgdTp?rX`awH~ zfYQ{HGW_xscW@S~&G8z)nh8;_i#iExv_ZB(#qFwcdp?a&udn9M;*2(U?~7kS(p9fr zZ9=DF*(+@)s_Q^M)FMTf4c_AB#dTL^iJI(mWnqesW1|!J7NL#4Xj)2{UM>F6s9=>| zm1#*4o43Pb`?&r)tP&e<#WCE}jWPbB)hdL@Q(r(6 ze3I1ibOAIcfL8WR>+;-{SUFIq`^^ z-VX8|tx!&_NV!=?8@xjMD@X?1yrO6<5M;qkS=?UKs)^?AroXs-6-KEF<}4%${GXP< z_Xur0capsh+==gKKb7xjxe~L9PGU0D_8hah%~hFv@fRMRme*g)KS*IJHW^Cq)YQPm zj0@J;J8?6jXm^fVlc7k)nmJkZ)q22u!;j#mo{jMrqu zFwR+5mn-tMyaBb`GA<)ch$8c+7VRfPG4D_HM7Cr6Mp4g*u#7O=&4B8mqEf^4rF_c+ z-OSuG2duuh4mdb?-K-O_1q^oUZKyX3imv;}9^6`8`N-jg&9?gZ@Z$DWIl0hF$B(+w zdTsa{BqRULOU0sBlDeeoz@)|PMa|8y+u$#5Uxg8l+Ow!hATTL`ZxdR!2GRcdRHk*5 z>{DE2MyS3PI4y*%tfJ&DA)6IoyCf!W|%Nu;^171CXK$IVtk-Jc<)sb}9N8Abbx zI*W)et*z83nW>(P?uCqF{y)69DP4D!JKmb=Qe?^Pczk5yeLK6_Yr~%*saIO#&1?O} zNh!Yxi#r50S>mw4Q``X+hWqNsLV4E?VfB*=9z>gsSq5UyM0Yg9l v1V8`;{vrVg?O!Za_yhtV00JQJV+i~QBu1}S+XCyB00000NkvXXu0mjfwpf1& diff --git a/docs/web_basic/images/go_import_library.png b/docs/web_basic/images/go_import_library.png deleted file mode 100644 index 2978f0f425d539e3eed2e8f6a171b51a88be6778..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2091 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 x#Wqc^`@mBfv{e~HYjD&)Cm8gOL{{ReWk+1*& diff --git a/docs/web_basic/images/hello-world-response.png b/docs/web_basic/images/hello-world-response.png index 33886076afcfbf925e91d65118137184861f1f23..1bcc73be5ba379f8fc91ec8aee9046653f4865aa 100644 GIT binary patch literal 5068 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 diff --git a/docs/web_basic/images/jikosyokai.png b/docs/web_basic/images/jikosyokai.png index 38e52f8b008100641e153f45818713c3b309133d..7728475a585e5d4a452ef4a0e71f72dc83a4871a 100644 GIT binary patch literal 22582 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

F`F>Teh3rr_3A!3rSv>}s;L3t5tOGzCG{Y+ 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 yawTKwY773Li3z7*FiZlZXRCACx=c<2o6C- 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 ClZ9FU literal 66088 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∋0Qp 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 literal 1763 zcmV<91|0c`P)dB9F4yt#F{Sk5$B#|=nuDoG z00|(0N(2N!aJgJc-cC+VP)#ZU!{#kbnUJHq$|$jsYP|MgmB{905=h@DQU<#~d@vg#?g*9s%v{HT3D|5yCVifCS7D zfK}Mz<72CRIv$V5>-GBmeu8Fm0)D^W>-Bm(9&^8Pn9H#QU~Hl&imIyC`E=Ub+kHNt z%{vh`zkqLi4`E;xsn|M4Pl#+su=#+@h=fe@o*47sNW82%?CiHCR{uqr$Yp;#txIewS^1rpej#A1h z(S})~g9ALza~x->nwVKD>FetwXb+n}I-M?Upx^K3YBoEnNkyTmnM%VeaJ${%a9ENg z?VBV?3WvjPw_BTN6lVKPR8_Uer$frx{QUgq&!5lE&eG|$BuQoS;={j2U}a?`m&>iJ ztdzEZtJ&9qV?l5n~Gk z0$;y=efsn%A>{r0_v`EH#(D9{Un4L$ICyh&lgs69Zf*t#2aDRl)ohJW6K$hfTU%i$ zp-luiC`!3kw9N42UiDPWJTWl=@0ysHsF>M&2BsY#C`C~-^$3E%W;%DbC7CHxV;*8` zy}iAYlaug#etv#uXNM5d*Vh+`M2ZTHjg6h3pI=^HZftBE9UVP+@`MmFH#e8fX1{;` z9*@U)o-Znb(RvZs+uO_ivAw;$qH4LSEUK|YA_2W6kw|Egt6xJYTEA$hnlM#@m+Hz^ zRfPU81X8lQyBmweD5Z556h%>BgaV@y?NFs+v)QRXO6h}`>5#m2b#$2;;CkH_mSC<6lnASjelMN!zS#|(U)=bM|GlgXrY9%5p` zK79D_?%g}1j6BbO`}Qpm2oOTLySsn=`X!3uix)2vi3AiG9UYZr*{C?CHcb>I;4`Vt*ymkF%S#gyrEEt zsYy>y&-L}SD2h{4Q}K8l@(&LWXEGVxvY1#q0i5Y@dImbk#H+qDol+@*Ce&9@v}+|* z%yif}olGWU(SDQizs-w_i~IZgU0q!)+kc~v=g*(BCgw|H zl2Y2=-(RoJgY}dWu$_k(Iv)JA-74(t>@2L6Xum=m20@vbnb9WRHynvXN#4#+ ze0q9ng-^%K?ln?qrL&&t>1pueh@yCLaly1E5D0`qp~BJ_YX|{*?Ox+F)=)LkUH8$v zyvkr(TU+^(wV!ElyWMZ!zAajI9T*rezk3bN>8N?L=+s|bcGkaq`SR@SEEbEMo}Ml& zED$uy3E<9puF!OKgiU`6^ExxeZcDQ6&U!rcM;vO8{M4WJyq{KCwzjsMDIO(X1?who zzllYwupGzXjRelq6TFe2q;oyG1W*%IRjs~d8gEN-jG*9cNsmr83_ch<#4t9oXcg9= zC76r^kbu1ju$}d(RLZ)Uj=h;->yZEw&?5k9l1wHkrKl!)gfI;WAOUj(;0!USiAAUW z%ry*iAps;{GXiX9J*Cv5y|6YTgv~_)NWdHc<{`H3wj^^6!(2!J3D}GPsELv{TsN`V ze;zg$2|OqQuoqTURqOV`KB(`<#vlPCP%i@PmT9;x>0dOHM7enN;w=CG002ovPDHLk FV1ghmQUw42 From 7950a0ff3a5240a77057f3a9a2f1b83fcbddfda6 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 9 Oct 2024 21:52:12 +0900 Subject: [PATCH 17/57] add some comment --- docs/web_basic/2_backend.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/web_basic/2_backend.md b/docs/web_basic/2_backend.md index 91b6bcc7..ec3be393 100644 --- a/docs/web_basic/2_backend.md +++ b/docs/web_basic/2_backend.md @@ -186,6 +186,7 @@ async fn main() { axum::serve(listener, app).await.unwrap(); } +// 構造体を JSON に変換するためにserde::Serializeを導出する #[derive(serde::Serialize)] struct JsonData { number: i32, From 9619b1731ce366e7775a796c8124db073f6b3b97 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 03:09:52 +0900 Subject: [PATCH 18/57] edit clean code --- docs/chapter1/dicts/clean-code/0_index.md | 474 +++++++++--------- docs/chapter1/dicts/clean-code/src/example.go | 32 -- docs/chapter1/dicts/clean-code/src/example.rs | 28 ++ 3 files changed, 278 insertions(+), 256 deletions(-) delete mode 100644 docs/chapter1/dicts/clean-code/src/example.go create mode 100644 docs/chapter1/dicts/clean-code/src/example.rs diff --git a/docs/chapter1/dicts/clean-code/0_index.md b/docs/chapter1/dicts/clean-code/0_index.md index 5394cb44..d94cb4e6 100644 --- a/docs/chapter1/dicts/clean-code/0_index.md +++ b/docs/chapter1/dicts/clean-code/0_index.md @@ -27,26 +27,25 @@ next: そんな時、次のようなコードが出てきたらあなたはすっと理解できるでしょうか。 -```go -var ( - a = 4 // X1-X3 - b = 7 - c = 2 - d = 5 // Y1-Y3 - e = 1 - f = 9 -) -func main() { - tmp_var := 252521.0 - if tmp_var < math.Sqrt(float64((0-a)*(0-a)+(0-d)*(0-d))) { - tmp_var = math.Sqrt(float64((a-0)*(a-0) + (d-0)*(d-0))) +```rs +fn main() { + let a = 4; // X1-X3 + let b = 7; + let c = 2; + let d = 5; // Y1-Y3 + let e = 1; + let f = 9; + let mut tmp_var = 252521.0; + if tmp_var > (((0-a)*(0-a)+(0-d)*(0-d)) as f64).sqrt() { + tmp_var = (((a-0)*(a-0) + (d-0)*(d-0)) as f64).sqrt(); } - if tmp_var > math.Sqrt(float64((0-b)*(0-b)+(0-e)*(0-e))) { - tmp_var = math.Sqrt(float64((-b)*(-b) + (-e)*(-e)))} + if tmp_var > (((0-b)*(0-b)+(0-e)*(0-e)) as f64).sqrt() { + tmp_var = (((-b)*(-b) + (-e)*(-e)) as f64).sqrt(); } - if tmp_var < math.Sqrt(float64((0-c)*(0-c)+(0-f)*(0-f))) { - fmt.Println(math.Sqrt(float64((c)*(c) + (f)*(f))))} else { - fmt.Println(tmp_var) }} + if tmp_var > (((0-c)*(0-c)+(0-f)*(0-f)) as f64).sqrt() { + println!("{}", ((((c)*(c) + (f)*(f) )) as f64).sqrt());} else { + println!("{}", tmp_var); }} + ``` まず`tmp_var`は何を指しているのだろうかという疑問が湧くでしょう。 @@ -54,7 +53,7 @@ func main() { では、次のコードはどうでしょうか。 -<<< @/chapter1/dicts/clean-code/src/example.go +<<< @/chapter1/dicts/clean-code/src/example.rs このコードであれば、原点からの距離を計算して、最も近い距離を出力するということがすぐに理解できます。 @@ -67,36 +66,34 @@ func main() { 基本どの言語にもフォーマッタというものがあります。これは、コードを自動でフォーマットしてくれるものです。 例えば、次のようなものがあげられます。 +- `rustfmt` (rust) - `gofmt`(go) - `prettier`(JavaScript) - `black`(Python) さっきのコードにフォーマッタをかけてみましょう。 -```go - -var ( - a = 4 // X1-X3 - b = 7 - c = 2 - d = 5 // Y1-Y3 - e = 1 - f = 9 -) - -func main() { - tmp_var := 252521.0 - if tmp_var < math.Sqrt(float64((0-a)*(0-a)+(0-d)*(0-d))) { - tmp_var = math.Sqrt(float64((a-0)*(a-0) + (d-0)*(d-0))) - } - if tmp_var > math.Sqrt(float64((0-b)*(0-b)+(0-e)*(0-e))) { - tmp_var = math.Sqrt(float64((-b)*(-b) + (-e)*(-e))) - } - if tmp_var < math.Sqrt(float64((0-c)*(0-c)+(0-f)*(0-f))) { - fmt.Println(math.Sqrt(float64((c)*(c) + (f)*(f)))) - } else { - fmt.Println(tmp_var) - } +```rs + +fn main() { + let a = 4; // X1-X3 + let b = 7; + let c = 2; + let d = 5; // Y1-Y3 + let e = 1; + let f = 9; + let mut tmp_var = 252521.0; + if tmp_var > (((0 - a) * (0 - a) + (0 - d) * (0 - d)) as f64).sqrt() { + tmp_var = (((a - 0) * (a - 0) + (d - 0) * (d - 0)) as f64).sqrt(); + } + if tmp_var > (((0 - b) * (0 - b) + (0 - e) * (0 - e)) as f64).sqrt() { + tmp_var = (((-b) * (-b) + (-e) * (-e)) as f64).sqrt(); + } + if tmp_var > (((0 - c) * (0 - c) + (0 - f) * (0 - f)) as f64).sqrt() { + println!("{}", (((c) * (c) + (f) * (f)) as f64).sqrt()); + } else { + println!("{}", tmp_var); + } } ``` これだけでもだいぶ見やすくなりましたね。 @@ -107,28 +104,26 @@ func main() { 実際には、`tmp_var`は「原点からの距離の最小値」を表しています。であるならば、そのような内容を表す名前をつけるべきです。 先ほどのコードに意味のある名前を付けてみましょう。 -```go -var ( - a = 4 // X1-X3 - b = 7 - c = 2 - d = 5 // Y1-Y3 - e = 1 - f = 9 -) -func main() { - minDistance := 252521.0 - if minDistance < math.Sqrt(float64((0-a)*(0-a)+(0-d)*(0-d))) { - minDistance = math.Sqrt(float64((a-0)*(a-0) + (d-0)*(d-0))) - } - if minDistance > math.Sqrt(float64((0-b)*(0-b)+(0-e)*(0-e))) { - minDistance = math.Sqrt(float64((-b)*(-b) + (-e)*(-e))) - } - if minDistance < math.Sqrt(float64((0-c)*(0-c)+(0-f)*(0-f))) { - fmt.Println(math.Sqrt(float64((c)*(c) + (f)*(f)))) - } else { - fmt.Println(minDistance) - } +```rs +fn main() { + let a = 4; // X1-X3 + let b = 7; + let c = 2; + let d = 5; // Y1-Y3 + let e = 1; + let f = 9; + let mut min_distance = 252521.0; + if min_distance > (((0 - a) * (0 - a) + (0 - d) * (0 - d)) as f64).sqrt() { + min_distance = (((a - 0) * (a - 0) + (d - 0) * (d - 0)) as f64).sqrt(); + } + if min_distance > (((0 - b) * (0 - b) + (0 - e) * (0 - e)) as f64).sqrt() { + min_distance = (((-b) * (-b) + (-e) * (-e)) as f64).sqrt(); + } + if min_distance > (((0 - c) * (0 - c) + (0 - f) * (0 - f)) as f64).sqrt() { + println!("{}", (((c) * (c) + (f) * (f)) as f64).sqrt()); + } else { + println!("{}", min_distance); + } } ``` @@ -145,9 +140,9 @@ func main() { - 「型」を表すものは、先頭を大文字にして、単語のつなぎ目も大文字にする - 「定数」を表すものは、すべて大文字にして、単語のつなぎ目はアンダースコアにする - 「関数」を表すものは、先頭を小文字にして、単語のつなぎ目はアンダースコアにする -- 「変数」を表すものは、先頭を小文字にして、単語のつなぎ目は大文字にする +- 「変数」を表すものは、先頭を小文字にして、単語のつなぎ目はアンダースコアにする -このように定めることで、`TEST_NAME`は定数、`test_name`は関数、`testName`は変数ということがわかります。 +このように定めることで、`TEST_NAME`は定数、`test_name`は関数や変数ということがわかります。 今、「先頭を大文字にして、単語のつなぎ目も大文字にする」という形式が出てきましたが、それには名前が存在して、以下の表のようになっています。 @@ -191,201 +186,232 @@ class Movie { それを避けるために、適切なサイズで関数として切り出したりして、コードを分割、共通化することが重要です。 先ほどのコードをもう一度見てみましょう。 -```go -var ( - a = 4 // X1-X3 - b = 7 - c = 2 - d = 5 // Y1-Y3 - e = 1 - f = 9 -) -func main() { - minDistance := 252521.0 - if minDistance < math.Sqrt(float64((0-a)*(0-a)+(0-d)*(0-d))) { - minDistance = math.Sqrt(float64((a-0)*(a-0) + (d-0)*(d-0))) - } - if minDistance > math.Sqrt(float64((0-b)*(0-b)+(0-e)*(0-e))) { - minDistance = math.Sqrt(float64((-b)*(-b) + (-e)*(-e))) - } - if minDistance < math.Sqrt(float64((0-c)*(0-c)+(0-f)*(0-f))) { - fmt.Println(math.Sqrt(float64((c)*(c) + (f)*(f)))) - } else { - fmt.Println(minDistance) - } +```rs +fn main() { + let a = 4; // X1-X3 + let b = 7; + let c = 2; + let d = 5; // Y1-Y3 + let e = 1; + let f = 9; + let mut min_distance = 252521.0; + if min_distance > (((0 - a) * (0 - a) + (0 - d) * (0 - d)) as f64).sqrt() { + min_distance = (((a - 0) * (a - 0) + (d - 0) * (d - 0)) as f64).sqrt(); + } + if min_distance > (((0 - b) * (0 - b) + (0 - e) * (0 - e)) as f64).sqrt() { + min_distance = (((-b) * (-b) + (-e) * (-e)) as f64).sqrt(); + } + if min_distance > (((0 - c) * (0 - c) + (0 - f) * (0 - f)) as f64).sqrt() { + println!("{}", (((c) * (c) + (f) * (f)) as f64).sqrt()); + } else { + println!("{}", min_distance); + } } ``` まだまだ読みにくいですね。ここで、`if`文の中に距離を求める処理が何度も出てきていることがわかります。これを関数として切り出してみましょう。 -```go -var ( - a = 4 // X1-X3 - b = 7 - c = 2 - d = 5 // Y1-Y3 - e = 1 - f = 9 -) -func distance(x1, y1, x2, y2 int) float64 { - dx := float64(x1 - x2) - dy := float64(y1 - y2) - return math.Sqrt(dx*dx + dy*dy) +```rs +fn distance(x1: i32, y1: i32, x2: i32, y2: i32) -> f64 { + let dx = (x1 - x2) as f64; + let dy = (y1 - y2) as f64; + (dx * dx + dy * dy).sqrt() } -func main() { - minDistance := 252521.0 - if minDistance < distance(0,0,a,d) { - minDistance = distance(0,0,a,d) - } - if minDistance > distance(0,0,b,e) { - minDistance = distance(0,0,b,e) - } - if minDistance < distance(0,0,c,f) { - fmt.Println(distance(0,0,c,f)) - } else { - fmt.Println(minDistance) - } + +fn main() { + let a = 4; // X1-X3 + let b = 7; + let c = 2; + let d = 5; // Y1-Y3 + let e = 1; + let f = 9; + let mut min_distance = 252521.0; + if min_distance > distance(0, 0, a, d) { + min_distance = distance(0, 0, a, d); + } + if min_distance > distance(0, 0, b, e) { + min_distance = distance(0, 0, b, e); + } + if min_distance > distance(0, 0, c, f) { + println!("{}", distance(0, 0, c, f)); + } else { + println!("{}", min_distance); + } +} + ``` 計算部分がなくなって少しわかりやすくなったでしょうか。しかし、今度は`distance()`の引数が何を表しているのか使う側からだと分かりにくいという問題があります。`distance(x1,x2,y1,y2)`なのか、`distance(x1,y1,x2,y2)`なのか見た目からは分かりません。 そこで、「座標」としてまとめてしまいましょう。 -```go +```rs +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, +} -type Point struct { - x int - y int +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() } -var points = []Point{{4, 5}, {7, 1}, {2, 9}} -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let mut min_distance = 252521.0; + let origin = Point { x: 0, y: 0 }; + if min_distance > distance(origin, points[0]) { + min_distance = distance(origin, points[0]); + } + if min_distance > distance(origin, points[1]) { + min_distance = distance(origin, points[1]); + } + if min_distance > distance(origin, points[2]) { + println!("{}", distance(origin, points[2])); + } else { + println!("{}", min_distance); + } } -func main() { - minDistance := 252521.0 - origin := Point{0, 0} - if minDistance < distance(origin, points[0]) { - minDistance = distance(origin, points[0]) - } - if minDistance > distance(origin, points[1]) { - minDistance = distance(origin, points[1]) - } - if minDistance < distance(origin, points[2]) { - fmt.Println(distance(origin, points[2])) - } else { - fmt.Println(minDistance) - } + ``` なんか同じ計算をしているのが見えてきましたね。`for`文でまとめちゃいましょう。 -```go -type Point struct { - x int - y int +```rs +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, } -var points = []Point{{4, 5}, {7, 1}, {2, 9}} -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) + +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() } -func main() { - minDistance := 252521.0 - origin := Point{0, 0} - for _, p := range points { - if minDistance < distance(origin, p) { - minDistance = distance(origin, p) - } - } - fmt.Println(minDistance) + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let mut min_distance = 252521.0; + let origin = Point { x: 0, y: 0 }; + for &p in &points { + if min_distance > distance(origin, p) { + min_distance = distance(origin, p); + } + } + println!("{}", min_distance); } ``` -## 名前を付けよう +## 数字の意味を明確にしよう 最後に`252521.0`とは何の数字でしょうか。今回の処理を考えると、`minDistance`と比較したときに、最初は必ず値を更新する必要があります。なので、十分大きな値を設定したのでしょう。 -しかし、それであれば、`float64`の最大値を設定するのがいいでしょう。 -```go -type Point struct { - x int - y int -} -var points = []Point{{4, 5}, {7, 1}, {2, 9}} -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) -} -func main() { - minDistance := 1.79769313486231570814527423731704356798070e+308 - origin := Point{0, 0} - for _, p := range points { - if minDistance < distance(origin, p) { - minDistance = distance(origin, p) - } - } - fmt.Println(minDistance) +しかし、それであれば、`f64`の最大値を設定するのがいいでしょう。 +Rust では、``f64::MAX`` や ``f64::INFINITY`` といった定数が用意されているため、これらのいずれかを用いましょう。 +```rs +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, } -``` - -さて、数値を置き換えましたが、結局この数字が何か一目でわからないという問題は解決していません。そこで、この数字に名前を付けましょう。 -:::info -このように、名前がついていなくて、意味が分かりにくい数字を「マジックナンバー」と呼びます。 -::: -```go -type Point struct { - x int - y int -} -var points = []Point{{4, 5}, {7, 1}, {2, 9}} -const maxFloat64 = 1.79769313486231570814527423731704356798070e+308 -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() } -func main() { - minDistance := maxFloat64 - origin := Point{0, 0} - for _, p := range points { - if minDistance < distance(origin, p) { - minDistance = distance(origin, p) - } - } - fmt.Println(minDistance) + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let mut min_distance = f64::INFINITY; + let origin = Point { x: 0, y: 0 }; + for &p in &points { + if min_distance > distance(origin, p) { + min_distance = distance(origin, p); + } + } + println!("{}", min_distance); } ``` + 最初のコードと比べると圧倒的に読みやすくなりましたね。 ## コメントをつけよう ここまで、がんばってコードをきれいにしてきました。しかし、それでも理解するのが難しい部分はあります。例えば、数学的に難解な暗号処理をしていたり、複雑なアルゴリズムを使うときです。 そういう時は、必ずコメントをつけましょう。 -```go -type Point struct { - x int - y int +```rs +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, } -var points = []Point{{4, 5}, {7, 1}, {2, 9}} -const maxFloat64 = 1.79769313486231570814527423731704356798070e+308 -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) + +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() } -func main() { - minDistance := maxFloat64 - origin := Point{0, 0} - // 入力した点のうち最も原点に近い点を探し、その距離を求める - for _, p := range points { - if minDistance < distance(origin, p) { - minDistance = distance(origin, p) - } - } - fmt.Println(minDistance) + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let mut min_distance = f64::INFINITY; + let origin = Point { x: 0, y: 0 }; + // 入力した点のうち最も原点に近い点を探し、その距離を求める + for &p in &points { + if min_distance > distance(origin, p) { + min_distance = distance(origin, p); + } + } + println!("{}", min_distance); } ``` +## おまけ +Rust のイテレータを使用すると、``min_distance`` を求める操作をメソッドチェイン(メソッドの連鎖)で書くことができます。 + +```rs +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, +} + +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() +} + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let origin = Point { x: 0, y: 0 }; + // 入力した点のうち最も原点に近い点を探し、その距離を求める + let min_distance = points + .iter() + .map(|&p| distance(origin, p)) + .fold(f64::INFINITY, f64::min); + println!("{}", min_distance); +} +``` ## おわりに diff --git a/docs/chapter1/dicts/clean-code/src/example.go b/docs/chapter1/dicts/clean-code/src/example.go deleted file mode 100644 index 94ed86b2..00000000 --- a/docs/chapter1/dicts/clean-code/src/example.go +++ /dev/null @@ -1,32 +0,0 @@ -package main - -import ( - "fmt" - "math" -) - -type Point struct { - x int - y int -} - -var points = []Point{{4, 5}, {7, 1}, {2, 9}} - -const maxFloat64 = 1.79769313486231570814527423731704356798070e+308 - -func distance(a, b Point) float64 { - dx := float64(a.x - b.x) - dy := float64(a.y - b.y) - return math.Sqrt(dx*dx + dy*dy) -} -func main() { - minDistance := maxFloat64 - origin := Point{0, 0} - // 入力した点のうち最も原点に近い点を探し、その距離を求める - for _, p := range points { - if minDistance < distance(origin, p) { - minDistance = distance(origin, p) - } - } - fmt.Println(minDistance) -} diff --git a/docs/chapter1/dicts/clean-code/src/example.rs b/docs/chapter1/dicts/clean-code/src/example.rs new file mode 100644 index 00000000..65419fd4 --- /dev/null +++ b/docs/chapter1/dicts/clean-code/src/example.rs @@ -0,0 +1,28 @@ +#[derive(Clone, Copy)] +struct Point { + x: i32, + y: i32, +} + +fn distance(a: Point, b: Point) -> f64 { + let dx = (a.x - b.x) as f64; + let dy = (a.y - b.y) as f64; + (dx * dx + dy * dy).sqrt() +} + +fn main() { + let points = [ + Point { x: 4, y: 5 }, + Point { x: 7, y: 1 }, + Point { x: 2, y: 9 }, + ]; + let mut min_distance = f64::INFINITY; + let origin = Point { x: 0, y: 0 }; + // 入力した点のうち最も原点に近い点を探し、その距離を求める + for &p in &points { + if min_distance > distance(origin, p) { + min_distance = distance(origin, p); + } + } + println!("{}", min_distance); +} From 4db801756de8a248aeb7d06e89321db5201be9c3 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 11:46:19 +0900 Subject: [PATCH 19/57] feat:2_hello-world.md --- docs/chapter1/section1/2_hello-world.md | 32 ++++++++++++++----------- docs/chapter1/section1/src/main.go | 7 ------ docs/chapter1/section1/src/main.rs | 3 +++ 3 files changed, 21 insertions(+), 21 deletions(-) delete mode 100644 docs/chapter1/section1/src/main.go create mode 100644 docs/chapter1/section1/src/main.rs diff --git a/docs/chapter1/section1/2_hello-world.md b/docs/chapter1/section1/2_hello-world.md index dc7e99b7..b6e02cf4 100644 --- a/docs/chapter1/section1/2_hello-world.md +++ b/docs/chapter1/section1/2_hello-world.md @@ -1,35 +1,39 @@ -# Go で Hello World +# Rust で Hello World -`~/develop/go-hello`ディレクトリの中にプログラムを作成します。 +`~/develop/rust-hello`ディレクトリの中にプログラムを作成します。 -## VSCodeで`~/develop/go-hello`ディレクトリを開く +## VSCodeで`~/develop/rust-hello`ディレクトリを開く - ディレクトリ作成 -`mkdir -p ~/develop/go-hello` +`mkdir -p ~/develop/rust-hello` - 移動 -`cd ~/develop/go-hello` +`cd ~/develop/rust-hello` - vscode を開く `code .` -## `main.go`の作成 +## Rust プロジェクトの初期化 -- `main.go`を作成する -- ファイル > 新規ファイル (または``Ctrl + N``) で空のファイルを開く -- ファイル > 名前をつけて保存 (または``Ctrl + Shift + S``) で`main.go`と命名して保存する +`~/develop/rust-hello`ディレクトリで以下のコマンドを実行します。 -以下の内容を入力して保存(`Ctrl + S`)します。 +- Rust プロジェクトの初期化 +`cargo init` -<<<@/chapter1/section1/src/main.go +実行すると、`src/main.rs`を含むいくつかのファイルが生成されます。`src/main.rs`には以下の内容が記述されています。 + +<<<@/chapter1/section1/src/main.rs ## 実行 -`go run main.go` +`cargo run` うまくできれば結果は次のようになります。 ```bash -hijiki51@DESKTOP-JF9KJFE:~/develop/go-hello$ go run main.go -Hello, World! +kenken@kenken:~/develop/rust-hello$ cargo run + Compiling rust_playground v0.1.0 (/home/kenken/main/temp/rust_playground) + Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.31s + Running `target/debug/rust_playground` +Hello, world! ``` diff --git a/docs/chapter1/section1/src/main.go b/docs/chapter1/section1/src/main.go deleted file mode 100644 index a3dd973f..00000000 --- a/docs/chapter1/section1/src/main.go +++ /dev/null @@ -1,7 +0,0 @@ -package main - -import "fmt" - -func main() { - fmt.Println("Hello, World!") -} diff --git a/docs/chapter1/section1/src/main.rs b/docs/chapter1/section1/src/main.rs new file mode 100644 index 00000000..e7a11a96 --- /dev/null +++ b/docs/chapter1/section1/src/main.rs @@ -0,0 +1,3 @@ +fn main() { + println!("Hello, world!"); +} From 4bb306d992d19b2fdb11ee1117689150d3d0fc31 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 11:57:07 +0900 Subject: [PATCH 20/57] fix:adapt-sidebar --- .../sidebarConfigs/chapters/chapter1/sections/section1.ts | 2 +- .../sidebarConfigs/chapters/chapter1/sections/section4.ts | 4 ++-- docs/chapter1/section4/{3_go_and_db.md => 3_rust_and_db.md} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename docs/chapter1/section4/{3_go_and_db.md => 3_rust_and_db.md} (100%) diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts index 20c6564b..b43347d4 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts @@ -4,7 +4,7 @@ export const section1SidebarItems: DefaultTheme.SidebarItem[] = [ { text: '環境構築 (windows)', link: '/chapter1/section1/0_setup-windows' }, { text: '環境構築 (macOS)', link: '/chapter1/section1/1_setup-unix' }, { - text: 'Go で Hello World', + text: 'Rust で Hello World', link: '/chapter1/section1/2_hello-world' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts index 595e8518..2554bbf5 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts @@ -14,8 +14,8 @@ export const section4SidebarItems: DefaultTheme.SidebarItem[] = [ link: '/chapter1/section4/2_sql_exercise' }, { - text: 'Goでデータベースを扱う', - link: '/chapter1/section4/3_go_and_db' + text: 'Rustでデータベースを扱う', + link: '/chapter1/section4/3_rust_and_db' }, { text: 'サーバーからデータベースを扱う', diff --git a/docs/chapter1/section4/3_go_and_db.md b/docs/chapter1/section4/3_rust_and_db.md similarity index 100% rename from docs/chapter1/section4/3_go_and_db.md rename to docs/chapter1/section4/3_rust_and_db.md From eddde617b507503520b6a031192ed2653d036d0f Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 19:30:10 +0900 Subject: [PATCH 21/57] WIP: add images and codes --- docs/chapter1/section3/0_hello-server.md | 18 +++++----- .../chapter1/section3/assets/hello_server.png | Bin 7145 -> 8197 bytes .../section3/assets/hello_server_detail.png | Bin 13973 -> 19238 bytes .../assets/hello_server_localhost.png | Bin 9825 -> 9825 bytes .../section3/assets/hello_server_me.png | Bin 7911 -> 20241 bytes .../section3/assets/hello_server_success.png | Bin 3009 -> 3757 bytes .../chapter1/section3/src/1-1_hello-server.go | 21 ------------ .../chapter1/section3/src/1-1_hello-server.rs | 22 +++++++++++++ .../section3/src/1-2_hello-server-me.go | 26 --------------- .../section3/src/1-2_hello-server-me.rs | 31 ++++++++++++++++++ 10 files changed, 62 insertions(+), 56 deletions(-) delete mode 100644 docs/chapter1/section3/src/1-1_hello-server.go create mode 100644 docs/chapter1/section3/src/1-1_hello-server.rs delete mode 100644 docs/chapter1/section3/src/1-2_hello-server-me.go create mode 100644 docs/chapter1/section3/src/1-2_hello-server-me.rs diff --git a/docs/chapter1/section3/0_hello-server.md b/docs/chapter1/section3/0_hello-server.md index 93888e5a..7a3cb82a 100644 --- a/docs/chapter1/section3/0_hello-server.md +++ b/docs/chapter1/section3/0_hello-server.md @@ -2,7 +2,7 @@ ## ファイルの作成 -今回は、Go と、Go の有名な web フレームワークである [Echo](https://echo.labstack.com/) を使ってサーバーアプリケーションを作っていきます。 +今回は、Rust と、Rust の有名な web フレームワークである [axum](https://github.com/tokio-rs/axum) を使ってサーバーアプリケーションを作っていきます。 `~/develop/hello-server`というディレクトリを作成し、そのディレクトリを開きます。 ```bash @@ -25,9 +25,9 @@ $ man mkdir 変えた場合には適宜読み替えてください。 ::: -作ったディレクトリの中に`main.go`を作成し、以下のプログラムを書き込みます。 +作ったディレクトリの中に`main.rs`を作成し、以下のプログラムを書き込みます。 -<<<@/chapter1/section3/src/1-1_hello-server.go +<<<@/chapter1/section3/src/1-1_hello-server.rs Echo は、[Go の標準ライブラリ](https://pkg.go.dev/std)に入っていない外部ライブラリなので、外部からダウンロードしなければなりません。しかし、Go にはそれを自動でやってくれる [Go module](https://go.dev/doc/tutorial/create-module) という便利な機能があるので使ってみましょう。以下を VSCode 内のターミナルで実行してください。(他のターミナルでも可) @@ -49,11 +49,11 @@ $ go mod tidy 本来この `develop` の所にはリポジトリ名を入れることが多いです。詳しくは[公式ドキュメント](https://go.dev/doc/modules/managing-dependencies#naming_module)を参照してください。 ::: -続けて、`main.go` を実行してサーバーを立てましょう。 +続けて、`main.rs` を実行してサーバーを立てましょう。 ```bash # 先ほど書いたファイルを実行して、サーバーを立てる -$ go run main.go +$ cargo run ``` 以下のような画面が出れば起動できています。 @@ -101,16 +101,16 @@ localhost は自分自身を表すドメインなので、自分のブラウザ ## 基本問題 エンドポイントとして自分の traQ ID のものを生やして自己紹介を返すようにしてみましょう。 -`main.go`に`/{自分の traQ ID}`処理を追加して作ってください。 +`main.rs`に`/{自分の traQ ID}`処理を追加して作ってください。 :::tip -この章では、この`main.go`に処理を追加していきます。 +この章では、この`main.rs`に処理を追加していきます。 以降のコードではすでに作ったエンドポイントを省略していますが、作ったエンドポイントは消さずに、新しいエンドポイントを追加していくようにしてください。 ::: -作り終わったら、変更を反映させるために、`go run main.go`を実行したターミナル上で`Ctrl+C`を押してサーバーを止めた後、また`go run main.go`してサーバーを立て直しましょう。 -今後`main.go`を書き換えたらこの工程を行うようにして下さい。 +作り終わったら、変更を反映させるために、`cargo run`を実行したターミナル上で`Ctrl+C`を押してサーバーを止めた後、また`cargo run`してサーバーを立て直しましょう。 +今後`main.rs`を書き換えたらこの工程を行うようにして下さい。 サーバーの立て直しができたら、ブラウザで`http://localhost:8080/{自分の traQ ID}` にアクセスするか、以下のコマンドを実行して、上手く出来ていることを確認しましょう。 ```bash diff --git a/docs/chapter1/section3/assets/hello_server.png b/docs/chapter1/section3/assets/hello_server.png index 404de3ecdd6c56e2aeccd43339cf9e3a112279d3..91e2909185fc7205e0ecc2233a98b539fec69249 100644 GIT binary patch literal 8197 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 literal 13973 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 diff --git a/docs/chapter1/section3/assets/hello_server_localhost.png b/docs/chapter1/section3/assets/hello_server_localhost.png index 2db0c019af0af53f81e62e4b518992294edd5e4b..b31c125c69abd2476490b70504d9efd4312252b9 100644 GIT binary patch literal 9825 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 MPEEF2+U)E90JsUK#Q*>R literal 9825 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 KA(avzg8mmboEXXg diff --git a/docs/chapter1/section3/assets/hello_server_me.png b/docs/chapter1/section3/assets/hello_server_me.png index 934c7bed39dc41ebacc0f9ebad6443cd06c2be14..d48789ecfa0cd28415454550f556cd55d23eb64d 100644 GIT binary patch literal 20241 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 B_+$V8 literal 7911 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 diff --git a/docs/chapter1/section3/assets/hello_server_success.png b/docs/chapter1/section3/assets/hello_server_success.png index 3423269ad8825953d166e8d78039add7a39e9099..a112bb9af91285645a4dcf3b909909b288cdd1b7 100644 GIT binary patch delta 3742 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 diff --git a/docs/chapter1/section3/src/1-1_hello-server.go b/docs/chapter1/section3/src/1-1_hello-server.go deleted file mode 100644 index 68c5826a..00000000 --- a/docs/chapter1/section3/src/1-1_hello-server.go +++ /dev/null @@ -1,21 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func main() { - // Echoの新しいインスタンスを作成 - e := echo.New() - - // 「/hello」というエンドポイントを設定する - e.GET("/hello", func(c echo.Context) error { - // HTTPステータスコードは200番で、文字列「Hello, World.」をクライアントに返す - return c.String(http.StatusOK, "Hello, World.\n") - }) - - // Webサーバーをポート番号8080で起動し、エラーが発生した場合はログにエラーメッセージを出力する - e.Logger.Fatal(e.Start(":8080")) -} diff --git a/docs/chapter1/section3/src/1-1_hello-server.rs b/docs/chapter1/section3/src/1-1_hello-server.rs new file mode 100644 index 00000000..3949b6de --- /dev/null +++ b/docs/chapter1/section3/src/1-1_hello-server.rs @@ -0,0 +1,22 @@ +use axum::{routing::get, Router}; + +#[tokio::main] +async fn main() { + // 「/hello」というエンドポイントを設定する + let app = Router::new().route("/hello", get(handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// 文字列「Hello, World.」をクライアントに返す +async fn handler() -> String { + String::from("Hello, World.") +} diff --git a/docs/chapter1/section3/src/1-2_hello-server-me.go b/docs/chapter1/section3/src/1-2_hello-server-me.go deleted file mode 100644 index 2e98a388..00000000 --- a/docs/chapter1/section3/src/1-2_hello-server-me.go +++ /dev/null @@ -1,26 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func main() { - // Echoの新しいインスタンスを作成 - e := echo.New() - - // 「/hello」というエンドポイントを設定する - e.GET("/hello", func(c echo.Context) error { - // HTTPステータスコードは200番で、文字列「Hello, World.」をクライアントに返す - return c.String(http.StatusOK, "Hello, World.\n") - }) - - // 「/pikachu」というエンドポイントを設定する - e.GET("/pikachu", func(c echo.Context) error { - return c.String(http.StatusOK, "始めまして、@pikachuです。\nケモノ(特に四足歩行)や、低頭身デフォルメマスコット(TDM)が大好きです。\n普段はVRChatに生息しています。twitter: @pikachu0310VRC") - }) - - // Webサーバーをポート番号8080で起動し、エラーが発生した場合はログにエラーメッセージを出力する - e.Logger.Fatal(e.Start(":8080")) -} diff --git a/docs/chapter1/section3/src/1-2_hello-server-me.rs b/docs/chapter1/section3/src/1-2_hello-server-me.rs new file mode 100644 index 00000000..d189607a --- /dev/null +++ b/docs/chapter1/section3/src/1-2_hello-server-me.rs @@ -0,0 +1,31 @@ +use axum::{routing::get, Router}; + +#[tokio::main] +async fn main() { + // 「/hello」「/kenken」の2つのエンドポイントを持つアプリケーションを作成 + let app = Router::new() + .route("/hello", get(hello_handler)) + .route("/kenken", get(me_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// 文字列「Hello, World.」をクライアントに返す +async fn hello_handler() -> String { + String::from("Hello, World.") +} + +// 自己紹介をクライアントに返す +async fn me_handler() -> String { + String::from( + "始めまして、@kenkenです。\nきらら作品(特に恋する小惑星、スロウスタート)が好きです。", + ) +} From d5864cd11d8331f37aeebab3b4e393662f1d4985 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 19:43:50 +0900 Subject: [PATCH 22/57] change some description --- docs/chapter1/section3/0_hello-server.md | 26 +++++++++++++++--------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/docs/chapter1/section3/0_hello-server.md b/docs/chapter1/section3/0_hello-server.md index 7a3cb82a..135ca43e 100644 --- a/docs/chapter1/section3/0_hello-server.md +++ b/docs/chapter1/section3/0_hello-server.md @@ -25,11 +25,22 @@ $ man mkdir 変えた場合には適宜読み替えてください。 ::: -作ったディレクトリの中に`main.rs`を作成し、以下のプログラムを書き込みます。 +作成したディレクトリを、Rust プロジェクトとして初期化します。 +以下のコマンドを実行してみましょう。 +```bash +# Rust プロジェクトの初期化をする。 +$ cargo init +``` + +すると、`src/main.rs`を含むいくつかのファイルが生成されます。 + +`src/main.rs`に以下のプログラムを書き込みましょう。 <<<@/chapter1/section3/src/1-1_hello-server.rs -Echo は、[Go の標準ライブラリ](https://pkg.go.dev/std)に入っていない外部ライブラリなので、外部からダウンロードしなければなりません。しかし、Go にはそれを自動でやってくれる [Go module](https://go.dev/doc/tutorial/create-module) という便利な機能があるので使ってみましょう。以下を VSCode 内のターミナルで実行してください。(他のターミナルでも可) +axum は、[Rust の標準ライブラリ](https://doc.rust-lang.org/std/)に入っていない外部ライブラリなので、外部からダウンロードしなければなりません。しかし、`cargo` という Rust のパッケージマネージャを使えば、簡単にダウンロードできます。 + +以下を VSCode 内のターミナルで実行してください。(他のターミナルでも可) :::tip **ターミナルの開き方** @@ -39,16 +50,11 @@ Echo は、[Go の標準ライブラリ](https://pkg.go.dev/std)に入ってい ::: ```bash -# Go module を初期化して、足りない物をインストールし、使われてない物を削除する。 - -$ go mod init develop -$ go mod tidy +# Rust プロジェクトに axum と tokio の依存を追加する。 +$ cargo add axum +$ cargo add tokio --features rt-multi-thread,macros ``` -:::tip -本来この `develop` の所にはリポジトリ名を入れることが多いです。詳しくは[公式ドキュメント](https://go.dev/doc/modules/managing-dependencies#naming_module)を参照してください。 -::: - 続けて、`main.rs` を実行してサーバーを立てましょう。 ```bash # 先ほど書いたファイルを実行して、サーバーを立てる From c66dd7304ce5285e9fd89afcf32d93f2fc52d466 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 10 Oct 2024 20:26:06 +0900 Subject: [PATCH 23/57] WIP: add get json response --- docs/chapter1/section3/1_json-response.md | 24 +++-------- docs/chapter1/section3/assets/json_server.png | Bin 4096 -> 14829 bytes docs/chapter1/section3/src/2-1_json-server.go | 37 ----------------- docs/chapter1/section3/src/2-1_json-server.rs | 39 ++++++++++++++++++ 4 files changed, 44 insertions(+), 56 deletions(-) delete mode 100644 docs/chapter1/section3/src/2-1_json-server.go create mode 100644 docs/chapter1/section3/src/2-1_json-server.rs diff --git a/docs/chapter1/section3/1_json-response.md b/docs/chapter1/section3/1_json-response.md index 01202f27..7fa7c45a 100644 --- a/docs/chapter1/section3/1_json-response.md +++ b/docs/chapter1/section3/1_json-response.md @@ -7,34 +7,20 @@ JSON について分からない人は ::: :::tip -Go の構造体についてわからない人は↓を見ると良いです。 +Rust の構造体についてわからない人は↓を見ると良いです。 -https://go-tour-jp.appspot.com/moretypes/2 +https://doc.rust-jp.rs/book-ja/ch05-01-defining-structs.html ::: -JSON をレスポンスとして返すためには、`c.JSON`メソッドに構造体を渡します。 -先ほどの章で作成した`main.go`に、以下のようなエンドポイントを追加して、`JSON`レスポンスを返してみましょう。 +JSON をレスポンスとして返すためには、`Json` に構造体を渡します。 +先ほどの章で作成した`main.rs`に、以下のようなエンドポイントを追加して、`JSON`レスポンスを返してみましょう。 -<<<@/chapter1/section3/src/2-1_json-server.go +<<<@/chapter1/section3/src/2-1_json-server.rs 書き換えたら、localhost:8080/json にアクセスして確認してみましょう。 ![](assets/json_server.png) -タグを追加することで構造体のフィールドに対応する、JSON のキー名を指定できます。 -Go の構造体のフィールドはパスカルケースですが、JSON のフィールドは普通キャメルケース / スネークケースであるため、`main.go`の構造体を以下のように書き換えましょう。 - -```go -type jsonData struct { - // Numner -> number (omitemptyは、ゼロ値の場合はそのフィールドを出力しないという意味) - Number int `json:"number,omitempty"` - String string `json:"string,omitempty"` - Bool bool `json:"bool,omitempty"` -} -``` - -参考: [encoding/json#Marshal](https://pkg.go.dev/encoding/json#Marshal) - ## Postmanでリクエストしてみよう Postman を起動したら、workspace を作成して移動し、`Ctrl + N`->`HTTP`または`Overview`タブの横にある`+`を押して、リクエスト設定画面を開きます。 diff --git a/docs/chapter1/section3/assets/json_server.png b/docs/chapter1/section3/assets/json_server.png index b9c2a89b9a245e19d5eb998d1e61f0ea0b45f06c..7f175624ba9dea60637390aec333d7c8ed9cb65c 100644 GIT binary patch literal 14829 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 literal 4096 zcmbVPS5y;9x28%-6zS5XN)ZS}kRJr;a0KZc61x1-i5@yiKXeo@^s1Bu3=s(+p^2eH z+A%>&03kF3h!A?eIsaYvx`#t&R0)-j4~AsS3jrU2|O;8dMJ8+=G#-vxJy9L1}1i^#3EY zgTeLQG&F1lrUtsU5#V2CE+P4bJcH|4UPV`!3vEa4L%q*F^hO^f0`B^Rasuf{){=ic zWYAN)d7B|joc1%8W?0IK{wv4dP5C})J~C%X-AUGfihY??fW=y$?8iS)IA!N|PtNwu z*d9EnTR-bAGF28SwK+hLq2x>cfs?wR@>f*=*7?2XCwo|nXHo^jI1ahnJnSiHw{y$NBrLG zrc#rWlh%y^hy83iy$fB@RY;`8DdASo@X*i>W+UpbBWog>Y~FtUT{GmTi3;XpER2D8 zYm?kb=YQG#X6q{`PW+_^hvK4}xFr8^y0)D@bd}}vlW_mwI-nz0lry_;hP}1t8n$)A`AD!ALgPguu(1yR! zwoNzJZM6D&kmV%zDDkqDNE6=klGA9^(eh&}`{VFKy>JUfS3hK8x=&O$16sATpkuqd zCFCPTX6TXi4-f*rxL+hIJ?u&!jde_&S~Hjey?*HI%-_zaXd?WtXUwy+vnz57I@KEk z9HpGBQ+{JC$s1FU7X=B=_J3M^xOTFVXW^Zt3?Gmulee+{|JD_CjeFqn7 zAezeb3qKf}TmUsBGu8MG=z4;HC09uF_t{xlLpnus>*vdTe&g32 z?EHRr9SIj1FT|Y%I@Ji+t-slScC_vmedz>1LgD~C@=iSLbzl5XmgU|~1kTv=vA02A zq`?Gd#lVcjL4?H4G zp3F){zBgQzo_+khH%(=I*j2SQqCgLSAlk0NajO5Bd9Le1$4|Cn>WRx0FX-;6bf?O+ z*z$8djqQ}P`Q)m2p(X9VNeA4nB7!_MsqoZ=_`oXXb&ai;@l~Bm-QxWs`sP2!L&vv2 zH|5P(I?LM|FnvuB`v7EI=h|{jc4^h>h}yWBAkh{+PS6cMQ;-IZ>o$MlQ7D~ZG)z0Z z{;CCK#raWedM2AVV5!{$JVZZFMwfX`qEWZ!knV2RRV!G69F(S_LLP7>h4K04{Pn~^ zmoezy`X_mlKKpMbpD_52mtTLp*cK(t3hqtxf7%#P-_Rgh!45d*$>*07jyqZ9J*m)4 zXQkFEM)3QQ+le9u1GTU%b&eG6MEI}vb@SDwaUn!Efs z&QdM^Sp0hFOy2am4vb@@Pfff)yNU3;sA*erHVLWz@+ea|riKxh1i}3F>fNZibZ^27 zsx43JorC2E=h)lTq?4|1GFbDr7C0nDu&}meaKAdw1&lQWR?-+&2D*e0>modPOKlNy zx?-^^$^iF_n{~0{(hy#x*7U>#;LcIL-kTvG`KFihn+Yyo1w}K3*7-f~oK-ETE$bPi z*Hv+4&iJ+l8`JmXFF|Bq6f4)bQ`YinNpGW5OK)22*`e;EM;UkEaQG04MBB4kQ_c?H z(xQgv_+-7ps&i#tPF9CMf*m=f2uXH0Bp6@=Nv(*dA{ZW6L>IGqlENIH7Kao5s35mk z^e3;Jn2q2TM)9p&`>C$ZAsWT?R(Sq1cPU;_kMu61#HjIPbqQD3b*=nH+Su#o#z`PT zAOGAy6*B>uvsJ@lDHi)KN3IRJkqJ!WL1w3nS{61@j!0HdybZo15k&>ZGc~R5vA>IOExU}80QWrgA>2SR2x+R#CNyCxRAK&A#H65kk{~VkPN2d(U&i za(;w-bWC#N{3%6_Jya8H4{ilTqz;LPY0B8^3)wY01#x#ZVxIjS3XYu5aCkWX9EDBN z4Do`1e0hrUR%m1PtIm=ye5%V#Ap5(Om-hqG+MPYvYq#i7VgF*AmoLGp z5ms@Vaok8UzAn*)+SBat1cF4{>j;rFxWJ>3$M<1>mvUYrvU)BKOSmM@tzW`*$I2hb z`R`-`&n)i+6+MVnI7zWuQM_#7dh2y(+~|w>ZZWKtW>)jlikeFJ66r5z%~x_l#K=4j z1{KKnb0yco7FpXYc2R|h8v@XGQWVu4|OGD={R-D&qE#ANtjkpUubXnqvqv zw@y!s97Msv%)u97l{?8sKYvdx)P?J@|+)ifw9mW0Lk*@&a zM3MMdb^~mEaW=bNP5E;qkUtL3d(yPD(}WmMkFSy!;7*r=%Ob7fQC;aiK7*qQdqp7<44(tbAih)8&2JW{~b_HlL%)=nyvifn#gMLuAM042cAOG18z4BD+2aQC0 zCSgIDiXOY3w+3L%5lX=2M~)aOPVz1o*niByqnP3m!;-;Eg(hJ$JZ?e$Z*xS1Oba%j z9H~<|5|G1$8$nlC`l8FIGDz>^OJwo!jn<+n7fH&p#_Tp2Pi#OSE+^GHQ@1Jy(Khdn zn99NtCpHhzlmhaut$szt!k>D`*49DRi=rqZOV{^+&05lMuUfhA6fwxsXw{S5LgWr6 zlkALn1_|!mT^8l@D*WlS5vVR*Lqf#}M3pUM4<6}>#hUM<_R*YCO$)W>e;d6h|HtVh zG3eZ&a^Ra+6!AKE^En6EzyE7txjk4dpWI#k52IHB^%_M=_#7rE@XilF+P)CLIyNo{ zbOo%fU>+6(n0jLjPG@(Nr7~dg$}VFvzNfp3swpzOF|FWQ_;eMyvb$Dk1`l!9h0Ako0;%N<8dlG%(7j>7<(yLerZ^1xxMBlH@#EIHIF4``MbWxa*#>c{c ztq^DPD+0_^plXm{n{N3x%;?>bc5-JHxqG2Drmo%en?0C-m_e_OIJEqdG(H(l;GfDY zimSF~KUGglG!et*h07ptZpn zGbZqe1~vWymDou&$f#O@%BX#bS$*heA$c%SBP9>XDVJ&)sp5Moo8mi=mvsW1pCaZX zJ^gIW)E`s?jO;##1V;~J(B~a z|FW1eM~x(0i4rx5xO%~4C&XD4G3z&1cn0+bdVJsLUO0T6!3|ARmJJ%HZzmHyrJ}MH z&`Y&OO0}eSBO^sfcvkJ1EfvA|-)Z{aZgErQ;~G_&IIF@|>d^zcgHRjKez5r1W`Ay+ zjP3d*$t$;Z&Bt~w(<&4nE`X2iGCx5VX1&dTjT);!;ep-7N~+vbd${^izDL*4q0eh5 zCXIs0K`06pL8iu`_AE-%{;pG@mrb{_%KI~4Gxe?kdGKiwkKAv`I*P3p*fXoHgffcR z-VF5thsj!CWjxb)`3t--OGiD%`1)eoURAi1@M{eoFJr!fn&xzB6`RTS|G(=!)hzys aUhKwMD0a6@h5Bo!F*ST_@Ltb7;lBW1%?!T) diff --git a/docs/chapter1/section3/src/2-1_json-server.go b/docs/chapter1/section3/src/2-1_json-server.go deleted file mode 100644 index 3d042abb..00000000 --- a/docs/chapter1/section3/src/2-1_json-server.go +++ /dev/null @@ -1,37 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -// JSONで返すための構造体を定義 -type jsonData struct { - Number int - String string - Bool bool -} - -func main() { - // Echoの新しいインスタンスを作成 - e := echo.New() - - // 「/json」というパスのエンドポイントを定義 - e.GET("/json", jsonHandler) - - // Webサーバーをポート番号8080で起動し、エラーが発生した場合はログにエラーメッセージを出力する - e.Logger.Fatal(e.Start(":8080")) -} - -func jsonHandler(c echo.Context) error { - // レスポンスとして返す値を構造体として定義 - response := jsonData{ - Number: 10, - String: "hoge", - Bool: false, - } - - // HTTPステータスコードは200番で、構造体をJSONに変換してクライアントに返す - return c.JSON(http.StatusOK, &response) -} diff --git a/docs/chapter1/section3/src/2-1_json-server.rs b/docs/chapter1/section3/src/2-1_json-server.rs new file mode 100644 index 00000000..8c685268 --- /dev/null +++ b/docs/chapter1/section3/src/2-1_json-server.rs @@ -0,0 +1,39 @@ +use axum::{routing::get, Json, Router}; + +#[tokio::main] +async fn main() { + // 「/json」というパスのエンドポイントを定義 + let app = Router::new() + .route("/json", get(json_handler)); + + // Webサーバーをポート番号8080にバインドする + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// JSONで返すための構造体を定義 +// 構造体を JSON に変換するためにserde::Serializeを導出する +#[derive(serde::Serialize)] +struct JsonData { + number: i32, + string: String, + bool: bool, +} + +async fn json_handler() -> Json { + // レスポンスとして返す値を構造体として定義 + let res = JsonData { + number: 10, + string: String::from("hoge"), + bool: false, + }; + + // 構造体をJSONに変換してクライアントに返す + Json(res) +} \ No newline at end of file From d88652c2dcd9ab59daa098bf97557e39cb5201fc Mon Sep 17 00:00:00 2001 From: kenken714 Date: Fri, 11 Oct 2024 19:11:27 +0900 Subject: [PATCH 24/57] add json-post --- docs/chapter1/section3/1_json-response.md | 13 ++---- docs/chapter1/section3/src/2-1_json-server.rs | 2 +- docs/chapter1/section3/src/2-2_echo-server.go | 38 ---------------- docs/chapter1/section3/src/2-2_echo-server.rs | 45 +++++++++++++++++++ docs/web_basic/2_backend.md | 2 +- 5 files changed, 51 insertions(+), 49 deletions(-) delete mode 100644 docs/chapter1/section3/src/2-2_echo-server.go create mode 100644 docs/chapter1/section3/src/2-2_echo-server.rs diff --git a/docs/chapter1/section3/1_json-response.md b/docs/chapter1/section3/1_json-response.md index 7fa7c45a..db3d371f 100644 --- a/docs/chapter1/section3/1_json-response.md +++ b/docs/chapter1/section3/1_json-response.md @@ -88,17 +88,12 @@ inspectある? ## 自分のサーバーでPOSTを受け取ってみよう POST で JSON を受け取って、内容をそのまま返すサーバーを作ってみます。 -`e.GET`と同じように、`e.POST`と書くことで POST を受け取ることができます。 -POST のハンドラは、受け取りたい JSON を示す空の変数を先に用意し、`Context`の`Bind`に渡すことで送られてきたデータを取り出すことができます。 -データが存在しなかったりした場合には、返り値の`err`にエラーが入ります。 -逆にエラーがないときは`err`に`nil`が返ってくるので、`if`で条件分岐をします。 +`get()`と同じように、`post()`と書くことで POST を受け取ることができます。 +POST のハンドラでは `Result` 型を受け取っています。 +パースに成功した場合は、match の中の Ok に入り、失敗した場合は Err に入ります。 -<<< @/chapter1/section3/src/2-2_echo-server.go +<<< @/chapter1/section3/src/2-2_echo-server.rs Postman を使って実際に受け取れている / 送り返せているか確認してみましょう。 -:::info -omitempty を指定していると false, 0, 空文字("")は返ってきません。(omitempty は、ゼロ値の場合はそのフィールドを出力しないという意味でしたね。) -::: - ![](assets/postman-echo.png) diff --git a/docs/chapter1/section3/src/2-1_json-server.rs b/docs/chapter1/section3/src/2-1_json-server.rs index 8c685268..fc996dc6 100644 --- a/docs/chapter1/section3/src/2-1_json-server.rs +++ b/docs/chapter1/section3/src/2-1_json-server.rs @@ -18,7 +18,7 @@ async fn main() { } // JSONで返すための構造体を定義 -// 構造体を JSON に変換するためにserde::Serializeを導出する +// 構造体を JSON に変換するためにserde::Serializeトレイトを導出する #[derive(serde::Serialize)] struct JsonData { number: i32, diff --git a/docs/chapter1/section3/src/2-2_echo-server.go b/docs/chapter1/section3/src/2-2_echo-server.go deleted file mode 100644 index ae4499e3..00000000 --- a/docs/chapter1/section3/src/2-2_echo-server.go +++ /dev/null @@ -1,38 +0,0 @@ -package main - -import ( - "fmt" - "net/http" - - "github.com/labstack/echo/v4" -) - -// Jsonで受け取り、構造体に変換して返すための構造体を定義 -type jsonData struct { - Number int `json:"number,omitempty"` - String string `json:"string,omitempty"` - Bool bool `json:"bool,omitempty"` -} - -func main() { - e := echo.New() - - // `e.GET`と同じように、`e.POST`と書くことで POST を受け取ることができます。 - e.POST("/post", postHandler) - - e.Logger.Fatal(e.Start(":8080")) -} - -func postHandler(c echo.Context) error { - // 受け取りたい JSON を示す空の変数を先に用意する。 - data := &jsonData{} - // 受け取った JSON を data に代入する - err := c.Bind(data) - - if err != nil { // エラーが発生した時、以下を実行 - // 正常でないためステータスコード 400 Bad Requestを返し、 エラーを文字列に変換して出力 - return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("%+v", err)) - } - // エラーが起きなかったとき、正常なのでステータスコード 200 OK を返し、リクエストデータをそのまま返す - return c.JSON(http.StatusOK, data) -} diff --git a/docs/chapter1/section3/src/2-2_echo-server.rs b/docs/chapter1/section3/src/2-2_echo-server.rs new file mode 100644 index 00000000..4b1021c9 --- /dev/null +++ b/docs/chapter1/section3/src/2-2_echo-server.rs @@ -0,0 +1,45 @@ +use core::fmt; + +use axum::{ + extract::rejection::JsonRejection, + http::StatusCode, + routing::{get, post}, + Json, Router, +}; + +#[tokio::main] +async fn main() { + // post() メソッドを使ってPOSTリクエストを処理する + let app = Router::new() + .route("/post", post(post_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// JSONを受け取るための構造体を定義 +// 構造体を JSON に変換するためにserde::Serializeを導出する +#[derive(serde::Deserialize, serde::Serialize)] +struct JsonData { + number: i32, + string: String, + bool: bool, +} + +async fn post_handler( + query: Result, JsonRejection>, +) -> Result, (StatusCode, JsonRejection)> { + match query { + // 正常なときリクエストデータをそのまま返す + Ok(data) => Ok(data), + // 正常でないときステータスコード 400 Bad Requestを返す + Err(rejection) => Err((StatusCode::BAD_REQUEST, rejection)), + } +} diff --git a/docs/web_basic/2_backend.md b/docs/web_basic/2_backend.md index ec3be393..224305ed 100644 --- a/docs/web_basic/2_backend.md +++ b/docs/web_basic/2_backend.md @@ -186,7 +186,7 @@ async fn main() { axum::serve(listener, app).await.unwrap(); } -// 構造体を JSON に変換するためにserde::Serializeを導出する +// 構造体を JSON に変換するためにserde::Serializeトレイトを導出する #[derive(serde::Serialize)] struct JsonData { number: i32, From 59c5113a15fdaaa619186ca479be681795b98cf1 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Fri, 11 Oct 2024 19:43:27 +0900 Subject: [PATCH 25/57] add source code --- docs/chapter1/section3/2_rooting.md | 4 +- .../chapter1/section3/src/3-1_param-server.go | 23 ---------- .../chapter1/section3/src/3-1_param-server.rs | 23 ++++++++++ .../chapter1/section3/src/3-2_query-server.go | 28 ------------- .../chapter1/section3/src/3-2_query-server.rs | 42 +++++++++++++++++++ 5 files changed, 67 insertions(+), 53 deletions(-) delete mode 100644 docs/chapter1/section3/src/3-1_param-server.go create mode 100644 docs/chapter1/section3/src/3-1_param-server.rs delete mode 100644 docs/chapter1/section3/src/3-2_query-server.go create mode 100644 docs/chapter1/section3/src/3-2_query-server.rs diff --git a/docs/chapter1/section3/2_rooting.md b/docs/chapter1/section3/2_rooting.md index fd393641..77add49a 100644 --- a/docs/chapter1/section3/2_rooting.md +++ b/docs/chapter1/section3/2_rooting.md @@ -21,7 +21,7 @@ Hello, {ユーザー名}. Echo ではパスに`/:hoge`のようなコロンから始まる文字列を含めると、ハンドラに渡される`Context`の`Param`関数を使うことで取得できます。 考えうる名前全てに対して 1 つずつハンドラを設定するのは不可能なので、パスパラメーターを取得して、それをもとにレスポンスを生成します。 -<<<@/chapter1/section3/src/3-1_param-server.go +<<<@/chapter1/section3/src/3-1_param-server.rs サーバーを立て直した後、localhost:8080/hello/pikachu にアクセスして実際に機能していることを確かめましょう。 また、URL の `pikachu` の部分を自分の名前や任意の文字列にしても動く事を確認しましょう。 @@ -51,7 +51,7 @@ page: {ページ数} 書いたらサーバーを立て直した後、localhost:8080/hello/pikachu?page=5&lang=ja にアクセスして実際に機能していることを確かめましょう。 :::details 解答 -<<<@/chapter1/section3/src/3-2_query-server.go +<<<@/chapter1/section3/src/3-2_query-server.rs ::: このクエリパラメータは検索のリクエストを受け取るときに使うことが多いです。 diff --git a/docs/chapter1/section3/src/3-1_param-server.go b/docs/chapter1/section3/src/3-1_param-server.go deleted file mode 100644 index a547362e..00000000 --- a/docs/chapter1/section3/src/3-1_param-server.go +++ /dev/null @@ -1,23 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func main() { - e := echo.New() - - // GETリクエストの"/hello/:username"というパターンに対応するルートを設定し、 - // URLのパラメータ(:username)を使用してhelloHandler関数を呼び出す - e.GET("/hello/:username", helloHandler) - - e.Logger.Fatal(e.Start(":8080")) -} - -func helloHandler(c echo.Context) error { - // ":username"というパスパラメーターを取得し、userID変数に格納する - userID := c.Param("username") - return c.String(http.StatusOK, "Hello, "+userID+".\n") -} diff --git a/docs/chapter1/section3/src/3-1_param-server.rs b/docs/chapter1/section3/src/3-1_param-server.rs new file mode 100644 index 00000000..705ca592 --- /dev/null +++ b/docs/chapter1/section3/src/3-1_param-server.rs @@ -0,0 +1,23 @@ +use axum::{extract::Path, routing::get, Router}; + +#[tokio::main] +async fn main() { + // GETリクエストの"/hello/:username"というパターンに対応するルートを設定し、 + // URLのパラメータ(:username)を使用してhello_handler関数を呼び出す + let app = Router::new().route("/hello/:username", get(hello_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// ":username"というパスパラメーターを取得する +async fn hello_handler(Path(username): Path) -> String { + format!("Hello, {}.\n", username) +} diff --git a/docs/chapter1/section3/src/3-2_query-server.go b/docs/chapter1/section3/src/3-2_query-server.go deleted file mode 100644 index c1ff44c2..00000000 --- a/docs/chapter1/section3/src/3-2_query-server.go +++ /dev/null @@ -1,28 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func main() { - e := echo.New() - - e.GET("/hello/:username", helloHandler) - - e.Logger.Fatal(e.Start(":8080")) -} - -func helloHandler(c echo.Context) error { - userID := c.Param("username") - - // クエリパラメータ "lang" の値を取得し、language 変数に格納する - // 例: /hello/pikachu?lang=ja であれば、language は "ja" になる - language := c.QueryParam("lang") - - // 同様にクエリパラメータ "page" の値を取得し、pageNum 変数に格納する - pageNum := c.QueryParam("page") - - return c.String(http.StatusOK, "Hello, "+userID+".\nlanguage: "+language+"\npage: "+pageNum) -} diff --git a/docs/chapter1/section3/src/3-2_query-server.rs b/docs/chapter1/section3/src/3-2_query-server.rs new file mode 100644 index 00000000..910f0d02 --- /dev/null +++ b/docs/chapter1/section3/src/3-2_query-server.rs @@ -0,0 +1,42 @@ +use axum::{ + extract::{Path, Query}, + routing::get, + Router, +}; + +#[tokio::main] +async fn main() { + // GETリクエストの"/hello/:username"というパターンに対応するルートを設定し、 + // URLのパラメータ(:username)を使用してhello_handler関数を呼び出す + let app = Router::new().route("/hello/:username", get(hello_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// クエリパラメータを受け取るための構造体を定義 +#[derive(serde::Deserialize)] +pub struct HelloQueryParam { + lang: Option, + page: Option, +} + +async fn hello_handler( + Path(username): Path, + // クエリパラメータを受け取る + Query(query): Query, +) -> String { + format!( + "Hello, {}.\nlang: {}\npage: {}", + username, + query.lang.unwrap_or("".to_string()), + query.page.unwrap_or("".to_string()) + ) +} From 509e5da2d25c6ae336ac093a559beafecd50dc42 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Fri, 11 Oct 2024 20:43:56 +0900 Subject: [PATCH 26/57] Update 2_rooting.md --- docs/chapter1/section3/2_rooting.md | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/docs/chapter1/section3/2_rooting.md b/docs/chapter1/section3/2_rooting.md index 77add49a..79016568 100644 --- a/docs/chapter1/section3/2_rooting.md +++ b/docs/chapter1/section3/2_rooting.md @@ -18,27 +18,25 @@ http://example.com/path/param1/param2?query1=param3&query2=param4 Hello, {ユーザー名}. ``` -Echo ではパスに`/:hoge`のようなコロンから始まる文字列を含めると、ハンドラに渡される`Context`の`Param`関数を使うことで取得できます。 -考えうる名前全てに対して 1 つずつハンドラを設定するのは不可能なので、パスパラメーターを取得して、それをもとにレスポンスを生成します。 +axum ではパスに`/:hoge`のようなコロンから始まる文字列を含めると、ハンドラに渡される `Path` という構造体に格納されます。 +考えうるユーザー名全てに対して 1 つずつハンドラを設定するのは不可能なので、パスパラメーターを取得して、それをもとにレスポンスを生成します。 <<<@/chapter1/section3/src/3-1_param-server.rs -サーバーを立て直した後、localhost:8080/hello/pikachu にアクセスして実際に機能していることを確かめましょう。 また、URL の `pikachu` の部分を自分の名前や任意の文字列にしても動く事を確認しましょう。 +サーバーを立て直した後、localhost:8080/hello/kenken にアクセスして実際に機能していることを確かめましょう。 また、URL の `kenken` の部分を自分の名前や任意の文字列にしても動く事を確認しましょう。 -`/hello/:username`とすることで`c.Param("username")`によって`pikachu`をとれることが分かりました。 +`/hello/:username`とすることで`Path(username)`によって`kenken`をとれることが分かりました。 ### 参考 -[Echoガイド](https://echo.labstack.com/guide) -[Echoガイド routing](https://echo.labstack.com/guide/routing) -[Echo godoc](https://pkg.go.dev/github.com/labstack/echo/v4) -[Context godoc](https://golang.org/pkg/context/) +[Path in axum::extract](https://docs.rs/axum/latest/axum/extract/struct.Path.html) ## クエリパラメータを取得してみよう ``` -/hello/pikachu?page=2&lang=ja +/hello/kenken?page=2&lang=ja ``` -パスパラメーターでは`c.Param("param")`を使いましたが、クエリパラメーターは`c.QueryParam("param")`で取得できます。 +パスパラメーターでは`Path(param)`を使いましたが、クエリパラメーターは受け取るための構造体を定義し、 +`Query(params)`を使って取得します。 クエリパラメータは順不同で`?lang=ja&page=2`でも同じ意味になります。 ### 基本問題 @@ -49,7 +47,7 @@ language: {言語名} page: {ページ数} ``` -書いたらサーバーを立て直した後、localhost:8080/hello/pikachu?page=5&lang=ja にアクセスして実際に機能していることを確かめましょう。 +書いたらサーバーを立て直した後、localhost:8080/hello/kenken?page=5&lang=ja にアクセスして実際に機能していることを確かめましょう。 :::details 解答 <<<@/chapter1/section3/src/3-2_query-server.rs ::: @@ -58,4 +56,4 @@ page: {ページ数} 例として、Google 検索だとこんな風になってます([Google検索のパラメータ(URLパラメータ)一覧](http://www13.plala.or.jp/bigdata/google.html))。 ### 参考 -[Echoでのクエリパラメータの取り方](https://echo.labstack.com/guide/request#query-parameters-1) +[Query in axum::extract](https://docs.rs/axum/latest/axum/extract/struct.Query.html) From 35f5550d1a1a674e946cd6744d48e58daaab8416 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Fri, 11 Oct 2024 21:12:54 +0900 Subject: [PATCH 27/57] WIP:4-2 --- docs/chapter1/section3/3_server-exercise.md | 4 +- docs/chapter1/section3/src/4-1_ping.go | 19 ------- docs/chapter1/section3/src/4-1_ping.rs | 22 +++++++ docs/chapter1/section3/src/4-2_fizzbuzz.go | 63 --------------------- docs/chapter1/section3/src/4-2_fizzbuzz.rs | 56 ++++++++++++++++++ 5 files changed, 80 insertions(+), 84 deletions(-) delete mode 100644 docs/chapter1/section3/src/4-1_ping.go create mode 100644 docs/chapter1/section3/src/4-1_ping.rs delete mode 100644 docs/chapter1/section3/src/4-2_fizzbuzz.go create mode 100644 docs/chapter1/section3/src/4-2_fizzbuzz.rs diff --git a/docs/chapter1/section3/3_server-exercise.md b/docs/chapter1/section3/3_server-exercise.md index 879f0321..e33e94ff 100644 --- a/docs/chapter1/section3/3_server-exercise.md +++ b/docs/chapter1/section3/3_server-exercise.md @@ -25,7 +25,7 @@ pong $ curl -X GET "http://localhost:8080/ping" # pong ``` :::details 解答 -<<<@/chapter1/section3/src/4-1_ping.go +<<<@/chapter1/section3/src/4-1_ping.rs ::: ## 基本問題 GET /fizzbuzz @@ -74,7 +74,7 @@ $ curl -X GET "http://localhost:8080/fizzbuzz?count=a" # Bad Request **/fizzbuzzが上手く動いたら、講習会の実況用チャンネルに↑の実行結果を投稿しましょう!** :::details 解答 -<<<@/chapter1/section3/src/4-2_fizzbuzz.go +<<<@/chapter1/section3/src/4-2_fizzbuzz.rs ::: ## 基本問題 POST /add diff --git a/docs/chapter1/section3/src/4-1_ping.go b/docs/chapter1/section3/src/4-1_ping.go deleted file mode 100644 index a1954fa2..00000000 --- a/docs/chapter1/section3/src/4-1_ping.go +++ /dev/null @@ -1,19 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -func main() { - e := echo.New() - - // 「/ping」というエンドポイントを設定する - e.GET("/ping", func(c echo.Context) error { - // HTTPステータスコードは 200 Ok で、文字列「pong」をクライアントに返す - return c.String(http.StatusOK, "pong\n") - }) - - e.Logger.Fatal(e.Start(":8080")) -} diff --git a/docs/chapter1/section3/src/4-1_ping.rs b/docs/chapter1/section3/src/4-1_ping.rs new file mode 100644 index 00000000..572faa1a --- /dev/null +++ b/docs/chapter1/section3/src/4-1_ping.rs @@ -0,0 +1,22 @@ +use axum::{routing::get, Router}; + +#[tokio::main] +async fn main() { + // 「/ping」というエンドポイントを設定する + let app = Router::new().route("/ping", get(handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// 文字列「pong」をクライアントに返す +async fn handler() -> String { + String::from("pong") +} diff --git a/docs/chapter1/section3/src/4-2_fizzbuzz.go b/docs/chapter1/section3/src/4-2_fizzbuzz.go deleted file mode 100644 index 422a005a..00000000 --- a/docs/chapter1/section3/src/4-2_fizzbuzz.go +++ /dev/null @@ -1,63 +0,0 @@ -package main - -import ( - "fmt" - "net/http" - "strconv" - - "github.com/labstack/echo/v4" -) - -func main() { - e := echo.New() - - // 「/fizzbuzz」というエンドポイントを設定する - e.GET("/fizzbuzz", fizzBuzzHandler) - - e.Logger.Fatal(e.Start(":8080")) -} - -func fizzBuzzHandler(c echo.Context) error { - // クエリパラメーター "count" の値をcountStrに格納 - countStr := c.QueryParam("count") - // もしcountStrが空っぽ("")だったら、 - if countStr == "" { - // countStrを30に設定 - countStr = "30" - } - - // strconv.Atoi()でstringをintに変換する(分からなかったらググりましょう!) - count, err := strconv.Atoi(countStr) - // ↑でエラーが起きたら、"count" が整数として解釈できないということなので、 - if err != nil { - // ステータスコード 400 Bad Request を返す - return c.String(http.StatusBadRequest, "Bad Request\n") - } - - // fizzBuzzの処理を行う - fizzBuzzStr := fizzBuzz(count) - - // ステータスコード 200 Ok とfizzBuzzの結果を返す - return c.String(http.StatusOK, fizzBuzzStr) -} - -// fizzBuzzの処理。これは競プロ -func fizzBuzz(n int) string { - result := "" - for i := 1; i <= n; i++ { - fizz := i%3 == 0 - buzz := i%5 == 0 - - if fizz && buzz { - result += "FizzBuzz\n" - } else if fizz { - result += "Fizz\n" - } else if buzz { - result += "Buzz\n" - } else { - result += fmt.Sprintf("%d\n", i) - } - } - - return result -} diff --git a/docs/chapter1/section3/src/4-2_fizzbuzz.rs b/docs/chapter1/section3/src/4-2_fizzbuzz.rs new file mode 100644 index 00000000..7a66a7e6 --- /dev/null +++ b/docs/chapter1/section3/src/4-2_fizzbuzz.rs @@ -0,0 +1,56 @@ +use axum::{extract::Query, http::StatusCode, routing::get, Router}; +#[tokio::main] +async fn main() { + // 「/ping」というエンドポイントを設定する + let app = Router::new().route("/fizzbuzz", get(fizzbuzz_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// クエリパラメータを受け取るための構造体を定義 +#[derive(serde::Deserialize)] +struct FizzBuzzQuery { + count: Option, +} + +async fn fizzbuzz_handler(Query(query): Query) -> (StatusCode, String) { + // クエリパラメータが指定されていない場合はデフォルト値を使用する + let mut n: i32 = 30; + // クエリパラメータが指定されている場合はその値を調べる + if let Some(count) = query.count { + let count = count.parse(); + match count { + // 数値に変換できた場合はその値を使用する + Ok(count) => n = count, + // ステータスコード 400 Bad Request を返す + Err(_) => return (StatusCode::BAD_REQUEST, String::from("Bad Request\n")), + } + } + + // FizzBuzzの処理をする + let fizzbuzz_str = fizzbuzz(n); + + // ステータスコード 200 Ok とfizzBuzzの結果を返す + (StatusCode::OK, fizzbuzz_str + "\n") +} + +// fizzBuzzの処理 +fn fizzbuzz(n: i32) -> String { + (1..=n) + .map(|i| match (i % 3, i % 5) { + (0, 0) => "FizzBuzz".to_string(), + (0, _) => "Fizz".to_string(), + (_, 0) => "Buzz".to_string(), + (_, _) => i.to_string(), + }) + .collect::>() + .join("\n") +} From c217a4c0971dc3e011a5dcc9f5dcef870c176a4b Mon Sep 17 00:00:00 2001 From: kenken714 Date: Sat, 12 Oct 2024 11:10:04 +0900 Subject: [PATCH 28/57] add server exercise --- .gitignore | 1 + docs/chapter1/section3/3_server-exercise.md | 56 +++++++++++---------- docs/chapter1/section3/src/4-2_fizzbuzz.rs | 24 +++++---- docs/chapter1/section3/src/4-3_add.go | 50 ------------------ docs/chapter1/section3/src/4-3_add.rs | 55 ++++++++++++++++++++ 5 files changed, 100 insertions(+), 86 deletions(-) delete mode 100644 docs/chapter1/section3/src/4-3_add.go create mode 100644 docs/chapter1/section3/src/4-3_add.rs diff --git a/.gitignore b/.gitignore index 7a6bb866..966b7698 100644 --- a/.gitignore +++ b/.gitignore @@ -24,3 +24,4 @@ dist-ssr *.sw? .textlintcache +/.vitepress/cache diff --git a/docs/chapter1/section3/3_server-exercise.md b/docs/chapter1/section3/3_server-exercise.md index e33e94ff..53873aa0 100644 --- a/docs/chapter1/section3/3_server-exercise.md +++ b/docs/chapter1/section3/3_server-exercise.md @@ -117,7 +117,7 @@ $ curl -X POST "http://localhost:8080/add" -H "Content-Type: application/json" - $ curl -X POST "http://localhost:8080/add" -H "Content-Type: application/json" -d '{"left": 100}' # Bad Request ``` :::details 解答 -<<<@/chapter1/section3/src/4-3_add.go +<<<@/chapter1/section3/src/4-3_add.rs ::: ## 発展問題 GET /students/:class/:studentNumber @@ -175,19 +175,23 @@ status code: `404` ``` :::tip -ヒント: 最後の課題のデータは次のような構造体を用意して、json.Unmarshal すると定義しやすいです。 -```go -type Student struct { - Number int `json:"student_number"` - Name string `json:"name"` +ヒント: 最後の課題のデータは次のような構造体を用意して、serde_json::from_str すると定義しやすいです。 +```rs +#[derive(serde::Serialize, serde::Deserialize, clone::Clone)] +struct Student { + student_number: u32, + name: String, } -type Class struct { - Number int `json:"class_number"` - Students []Student `json:"students"` + +#[derive(serde::Deserialize)] +struct Class { + class_number: u32, + students: Vec, } ``` ::: + **完成したら、以下のコマンドをターミナルで実行して上手く機能しているか確認しましょう。** ```bash $ curl -X GET "http://localhost:8080/students/1/1" # pikachu @@ -203,7 +207,7 @@ $ curl -X GET "http://localhost:8080/students/5/1" # Student Not Found #!/bin/bash # ↓これを自分のIDに変更してください -ID=pikachu +ID=kenken # ↑これを自分のIDに変更してください echo "" @@ -273,7 +277,7 @@ echo "" ペーストした後、ファイル内の以下の部分を自分の ID に書き換えてください。 ``` # ↓これを自分のIDに変更してください -ID=pikachu +ID=kenken # ↑これを自分のIDに変更してください ``` @@ -289,16 +293,15 @@ $ ./test.sh # シェルスクリプトtest.shを実行 $ ./test.sh ==================== -[TEST] /pikachu -curl -X GET http://localhost:8080/pikachu -始めまして、@pikachuです。 -ケモノ(特に四足歩行)や、低頭身デフォルメマスコット(TDM)が大好きです。 -普段はVRChatに生息しています。twitter: @pikachu0310VRC +[TEST] /kenken +curl -X GET http://localhost:8080/kenken +始めまして、@kenkenです。 +きらら作品(特に恋する小惑星、スロウスタート)が好きです。 + ==================== [TEST] /ping curl -X GET http://localhost:8080/ping pong - ==================== [TEST] /fizzbuzz 1of3 -X GET http://localhost:8080/fizzbuzz?count=20 @@ -365,32 +368,31 @@ Bad Request ==================== [TEST] /add 1of4 curl -X POST http://localhost:8080/add -H "Content-Type: application/json" -d "{\"left\": 18781, \"right\": 18783}" -{"answer":37564} - +{"result":37564} ==================== [TEST] /add 2of4 curl -X POST http://localhost:8080/add -H "Content-Type: application/json" -d "{\"left\": 0, \"right\": -0}" -{"answer":0} - +{"result":0} ==================== [TEST] /add 3of4 curl -X POST http://localhost:8080/add -H "Content-Type: application/json" -d "{\"left\": a, \"right\": b}" {"error":"Bad Request"} - ==================== [TEST] /add 4of4 curl -X POST http://localhost:8080/add -H "Content-Type: application/json" -d "{\"left\": 100}" {"error":"Bad Request"} - ==================== -[TEST] /students 1of2 +[TEST] /students 1of3 curl -X GET http://localhost:8080/students/1/1 {"student_number":1,"name":"pikachu"} - ==================== -[TEST] /students 2of2 +[TEST] /students 2of3 curl -X GET http://localhost:8080/students/3/4 -{"error":"Student Not Found"} +{"error":"Student not found"} +==================== +[TEST] /students 3of3 +curl -X GET http://localhost:8080/students/5/1 +{"error":"Student not found"} ``` ::: diff --git a/docs/chapter1/section3/src/4-2_fizzbuzz.rs b/docs/chapter1/section3/src/4-2_fizzbuzz.rs index 7a66a7e6..712b4c16 100644 --- a/docs/chapter1/section3/src/4-2_fizzbuzz.rs +++ b/docs/chapter1/section3/src/4-2_fizzbuzz.rs @@ -44,13 +44,19 @@ async fn fizzbuzz_handler(Query(query): Query) -> (StatusCode, St // fizzBuzzの処理 fn fizzbuzz(n: i32) -> String { - (1..=n) - .map(|i| match (i % 3, i % 5) { - (0, 0) => "FizzBuzz".to_string(), - (0, _) => "Fizz".to_string(), - (_, 0) => "Buzz".to_string(), - (_, _) => i.to_string(), - }) - .collect::>() - .join("\n") + let mut result = String::new(); + for i in 1..=n { + if i % 15 == 0 { + result.push_str("FizzBuzz\n"); + } else if i % 3 == 0 { + result.push_str("Fizz\n"); + } else if i % 5 == 0 { + result.push_str("Buzz\n"); + } else { + result.push_str(&i.to_string()); + result.push('\n'); + } + } + result } + diff --git a/docs/chapter1/section3/src/4-3_add.go b/docs/chapter1/section3/src/4-3_add.go deleted file mode 100644 index abea6cbc..00000000 --- a/docs/chapter1/section3/src/4-3_add.go +++ /dev/null @@ -1,50 +0,0 @@ -package main - -import ( - "net/http" - - "github.com/labstack/echo/v4" -) - -// Jsonで受け取って構造体に変換するための構造体を定義 -type requestData struct { - Left *int `json:"left"` - Right *int `json:"right"` -} - -// 計算結果をJsonで返すための構造体を定義 -type responseData struct { - Answer int `json:"answer"` -} - -// エラーをJsonで返すための構造体を定義 -type errorData struct { - Error string `json:"error,omitempty"` -} - -func main() { - e := echo.New() - - // 「/add」というエンドポイントを設定する - e.POST("/add", addHandler) - - e.Logger.Fatal(e.Start(":8080")) -} - -func addHandler(c echo.Context) error { - // 受け取りたい JSON を示す空の変数を先に用意する。 - numbers := &requestData{} - // 受け取った JSON を data に代入する - err := c.Bind(numbers) - - // JSON を data に代入する時にエラーが発生したり、値が空だった時、つまりリクエストが適切ではなかった時、 - if err != nil || numbers.Left == nil || numbers.Right == nil { - // ステータスコード 400 Bad Request で"Bad Request"が入ったJSONを返す - return c.JSON(http.StatusBadRequest, &errorData{Error: "Bad Request"}) - } - - // 計算結果 - result := *numbers.Left + *numbers.Right - // 計算結果をステータスコード 200 Ok で返す - return c.JSON(http.StatusOK, &responseData{Answer: result}) -} diff --git a/docs/chapter1/section3/src/4-3_add.rs b/docs/chapter1/section3/src/4-3_add.rs new file mode 100644 index 00000000..28d40fae --- /dev/null +++ b/docs/chapter1/section3/src/4-3_add.rs @@ -0,0 +1,55 @@ +use axum::extract::rejection::JsonRejection; +use axum::{http::StatusCode, routing::post, Json, Router}; + +#[tokio::main] +async fn main() { + // 「/ping」というエンドポイントを設定する + let app = Router::new().route("/add", post(add_handler)); + + // ポート8080でリスナーを作成する + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + + // サーバーを起動する + axum::serve(listener, app).await.unwrap(); +} + +// クエリパラメータを受け取るための構造体を定義 +#[derive(serde::Deserialize)] +struct AddQuery { + left: f64, + right: f64, +} + +// レスポンスとして返す構造体を定義 +#[derive(serde::Serialize)] +struct AddResponse { + result: i64, +} + +// エラーレスポンスとして返す構造体を定義 +#[derive(serde::Serialize)] +struct AddError { + error: String, +} + +async fn add_handler( + query: Result, JsonRejection>, +) -> Result, (StatusCode, Json)> { + match query { + // クエリが正しく受け取れた場合、クライアントに結果を返す + Ok(query) => Ok(Json(AddResponse { + result: (query.left + query.right) as i64, + })), + // クエリが正しく受け取れなかった場合、エラーを返す + Err(_) => Err(( + StatusCode::BAD_REQUEST, + Json(AddError { + error: String::from("Bad Request"), + }), + )), + } +} \ No newline at end of file From d181e8f4fd8badeb36a232bd138003d9b8fd526e Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 16 Oct 2024 13:04:39 +0900 Subject: [PATCH 29/57] WIP basic1 --- docs/chapter1/section4/0_prepare.md | 2 +- docs/chapter1/section4/3_rust_and_db.md | 31 +++++---- docs/chapter1/section4/images/files.png | Bin 22932 -> 11777 bytes docs/chapter1/section4/src/connect_db.go | 60 ----------------- docs/chapter1/section4/src/connect_db.rs | 56 ++++++++++++++++ docs/chapter1/section4/src/practice_basic1.go | 62 ------------------ docs/chapter1/section4/src/practice_basic1.rs | 60 +++++++++++++++++ 7 files changed, 132 insertions(+), 139 deletions(-) delete mode 100644 docs/chapter1/section4/src/connect_db.go create mode 100644 docs/chapter1/section4/src/connect_db.rs delete mode 100644 docs/chapter1/section4/src/practice_basic1.go create mode 100644 docs/chapter1/section4/src/practice_basic1.rs diff --git a/docs/chapter1/section4/0_prepare.md b/docs/chapter1/section4/0_prepare.md index d8cfaa01..a000e107 100644 --- a/docs/chapter1/section4/0_prepare.md +++ b/docs/chapter1/section4/0_prepare.md @@ -2,7 +2,7 @@ ## リポジトリの準備 -なろう講習会のバックエンド用のテンプレートリポジトリ、[https://github.com/traPtitech/naro-template-backend](https://github.com/traPtitech/naro-template-backend) を使います。リンクから GitHub のリポジトリにアクセスしてください。右上の「Use this template」と書かれたボタンをクリックし、「Create a new repository」から自分のアカウントにリポジトリを作ります。リポジトリ名は`naro-backend`など適当なものにしましょう。 +なろう講習会 in Rust のバックエンド用のテンプレートリポジトリ、[https://github.com/traP-jp/naro-rs-template-backend](https://github.com/traP-jp/naro-rs-template-backend) を使います。リンクから GitHub のリポジトリにアクセスしてください。右上の「Use this template」と書かれたボタンをクリックし、「Create a new repository」から自分のアカウントにリポジトリを作ります。リポジトリ名は`naro-rs-backend`など適当なものにしましょう。 ![](images/template.png) diff --git a/docs/chapter1/section4/3_rust_and_db.md b/docs/chapter1/section4/3_rust_and_db.md index 6125c2d4..c28121a9 100644 --- a/docs/chapter1/section4/3_rust_and_db.md +++ b/docs/chapter1/section4/3_rust_and_db.md @@ -1,23 +1,22 @@ -# Goでデータベースを扱う +# Rustでデータベースを扱う -ここからは Go でプログラムを書いてデータベースを扱っていきます。`task up`を実行してデータベースが立ち上がっていることを確認してください。 -まずは VSCode で先ほどクローンしてきたリポジトリを開きましょう。画像のようなファイルが入っているはずです。 main.go を開いてください。 +ここからは Rust でプログラムを書いてデータベースを扱っていきます。`task up`を実行してデータベースが立ち上がっていることを確認してください。 +まずは VSCode で先ほどクローンしてきたリポジトリを開きましょう。画像のようなファイルが入っているはずです。 main.rs を開いてください。 ![](images/files.png) ## データベースに接続する -### Goのプログラムを書く +### Rustのプログラムを書く サンプルのプログラムが書いてありますが、データベースと接続できるように書き換えます。 -Go でデータベースに接続するためのライブラリは様々ありますが、今回は SQL 文を書く sqlx を使います。 +Rust でデータベースに接続するためのライブラリは様々ありますが、今回は SQL 文を書く SQLx を使います。 - 参考 - - [jmoiron/sqlx: a set of extensions on go's standard `database/sql` library.](https://pkg.go.dev/github.com/jmoiron/sqlx) - - [Illustrated guide to SQLX](https://jmoiron.github.io/sqlx/) + - [launchbadge/sqlx: 🧰 The Rust SQL Toolkit](https://github.com/launchbadge/sqlx) + - [sqlx - Rust](https://docs.rs/sqlx/latest/sqlx/) -<<< @/chapter1/section4/src/connect_db.go{go:line-numbers} +<<< @/chapter1/section4/src/connect_db.rs{rust:line-numbers} -`// #region`などのコメントは無視してください。 書き換えた後、 import の周りで赤字のエラーが出た場合は、ターミナルで`go mod tidy`を実行してください。 26 から 40 行目でデータベースに接続するための設定をして、42 行目の`db, err := sqlx.Open("mysql", conf.FormatDSN())`でデータベースに接続しています。32 行目などで`os.Getenv()`という関数が出てきていますが、これは環境変数と呼ばれる、コンピューター側で設定してプログラムで使えるようにしている変数です。今は必要なデータベースのパスワードなどの環境変数を何も設定していないので、設定します。 @@ -71,7 +70,7 @@ $ source .env ### 実行する ```sh -$ go run main.go +$ cargo run ``` 出力はこのようになります。 @@ -81,30 +80,30 @@ connected Tokyoの人口は7980230人です ``` -`main.go`を解説してきます。 +`main.rs`を解説してきます。 -<<< @/chapter1/section4/src/connect_db.go#city +<<< @/chapter1/section4/src/connect_db.rs#city この`City`構造体の横にあるバッククオートで囲まれたタグに`db`でデータベースのカラム名を指定します。これによってライブラリがデータベースから取得したレコードを構造体に上手くあてはめてくれます。 参考: [Struct タグについて | text.Baldanders.info](https://text.baldanders.info/golang/struct-tag/) -<<< @/chapter1/section4/src/connect_db.go#get +<<< @/chapter1/section4/src/connect_db.rs#get `City`型の`city`という変数のポインタを sqlx ライブラリの`Get`関数の第 1 引数に指定します。第 2 引数には SQL 文を書きます。`Name = ?`としていますが、第 3 引数以降の値が順番に`?`へと当てはめられて SQL 文が実行され、取得したレコードが`city`変数に代入されます。 ### 基本問題 ```sh -$ go run main.go {都市の名前} +$ cargo run {都市の名前} ``` と入力して、同様に人口を表示するようにしましょう。 -ヒント:[Go言語 - os.Argsでコマンドラインパラメータを受け取る - 覚えたら書く](https://blog.y-yuki.net/entry/2017/04/30/000000) +ヒント:[コマンドライン引数を受け付ける - The Rust Programming Language 日本語版](https://doc.rust-jp.rs/book-ja/ch12-01-accepting-command-line-arguments.html) :::details 答え -<<< @/chapter1/section4/src/practice_basic1.go +<<< @/chapter1/section4/src/practice_basic1.rs ::: ### 応用問題 diff --git a/docs/chapter1/section4/images/files.png b/docs/chapter1/section4/images/files.png index 005fbaef50e517b0b2d7917e9a1d9f1827c6e47a..d7f34a9bd528e3b5a4b398bc65583aded858712b 100644 GIT binary patch literal 11777 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 literal 22932 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 diff --git a/docs/chapter1/section4/src/connect_db.go b/docs/chapter1/section4/src/connect_db.go deleted file mode 100644 index dc4e6a83..00000000 --- a/docs/chapter1/section4/src/connect_db.go +++ /dev/null @@ -1,60 +0,0 @@ -package main - -import ( - "database/sql" - "errors" - "log" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" -) - -// #region city -type City struct { - ID int `json:"ID,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -// #endregion city -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - - log.Println("connected") - // #region get - var city City - err = db.Get(&city, "SELECT * FROM city WHERE Name = ?", "Tokyo") - if errors.Is(err, sql.ErrNoRows) { - log.Printf("no such city Name = '%s'\n", "Tokyo") - return - } - if err != nil { - log.Fatalf("DB Error: %s\n", err) - } - // #endregion get - log.Printf("Tokyoの人口は%d人です\n", city.Population) -} diff --git a/docs/chapter1/section4/src/connect_db.rs b/docs/chapter1/section4/src/connect_db.rs new file mode 100644 index 00000000..8c713d7c --- /dev/null +++ b/docs/chapter1/section4/src/connect_db.rs @@ -0,0 +1,56 @@ +use anyhow::Ok; +use sqlx::mysql::MySqlConnectOptions; +use std::env; + +// #region city +#[derive(sqlx::FromRow)] +#[sqlx(rename_all = "PascalCase")] +#[allow(dead_code)] // 使用していないフィールドへの警告を抑制 +struct City { + #[sqlx(rename = "ID")] + id: i32, + name: String, + country_code: String, + district: String, + population: i32, +} +// #endregion city + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + println!("Connected"); + // #region get + let city = sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind("Tokyo") + .fetch_one(&pool) + .await + .map_err(|e| match e { + sqlx::Error::RowNotFound => anyhow::anyhow!("no such city Name = {}\n", "Tokyo"), + _ => anyhow::anyhow!("DB error: {}", e), + })?; + // #endregion get + println!("Tokyoの人口は{}人です", &city.population); + Ok(()) +} diff --git a/docs/chapter1/section4/src/practice_basic1.go b/docs/chapter1/section4/src/practice_basic1.go deleted file mode 100644 index e6100903..00000000 --- a/docs/chapter1/section4/src/practice_basic1.go +++ /dev/null @@ -1,62 +0,0 @@ -package main - -import ( - "database/sql" - "errors" - "log" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" -) - -type City struct { - ID int `json:"ID,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - - log.Println("connected") - - cityName := os.Args[1] //[!code ++] - - var city City - err = db.Get(&city, "SELECT * FROM city WHERE Name = ?", "Tokyo") //[!code --] - err = db.Get(&city, "SELECT * FROM city WHERE Name = ?", cityName) //[!code ++] - if errors.Is(err, sql.ErrNoRows) { - log.Printf("no such city Name = '%s'\n", "Tokyo") //[!code --] - log.Printf("no such city Name = '%s'\n", cityName) //[!code ++] - return - } - if err != nil { - log.Fatalf("DB Error: %s\n", err) - } - - log.Printf("Tokyoの人口は%d人です\n", city.Population) -} diff --git a/docs/chapter1/section4/src/practice_basic1.rs b/docs/chapter1/section4/src/practice_basic1.rs new file mode 100644 index 00000000..fe0838ce --- /dev/null +++ b/docs/chapter1/section4/src/practice_basic1.rs @@ -0,0 +1,60 @@ +use anyhow::Ok; +use sqlx::mysql::MySqlConnectOptions; +use std::env; + +// #region city +#[derive(sqlx::FromRow)] +#[sqlx(rename_all = "PascalCase")] +#[allow(dead_code)] // 使用していないフィールドへの警告を抑制 +struct City { + #[sqlx(rename = "ID")] + id: i32, + name: String, + country_code: String, + district: String, + population: i32, +} +// #endregion city + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + let city_name = env::args().nth(1).expect("city name is required"); // [!code ++] + println!("Connected"); + // #region get + let city = sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind("Tokyo") // [!code --] + .bind(&city_name) // [!code ++] + .fetch_one(&pool) + .await + .map_err(|e| match e { + sqlx::Error::RowNotFound => anyhow::anyhow!("no such city Name = {}\n", "Tokyo"), // [!code --] + sqlx::Error::RowNotFound => anyhow::anyhow!("no such city Name = {}\n", &city_name), // [!code ++] + _ => anyhow::anyhow!("DB error: {}", e), + })?; + // #endregion get + println!("Tokyoの人口は{}人です", &city.population); // [!code --] + println!("{}の人口は{}人です", &city_name, &city.population); // [!code ++] + Ok(()) +} From bec670aaab09906e33e0f2f614744ee3e379f671 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 16 Oct 2024 17:06:09 +0900 Subject: [PATCH 30/57] add advanced and selecet --- docs/chapter1/section4/3_rust_and_db.md | 55 +++++++------- .../section4/src/practice_advanced.go | 74 ------------------- .../section4/src/practice_advanced.rs | 68 +++++++++++++++++ docs/chapter1/section4/src/select.go | 58 --------------- docs/chapter1/section4/src/select.rs | 55 ++++++++++++++ 5 files changed, 149 insertions(+), 161 deletions(-) delete mode 100644 docs/chapter1/section4/src/practice_advanced.go create mode 100644 docs/chapter1/section4/src/practice_advanced.rs delete mode 100644 docs/chapter1/section4/src/select.go create mode 100644 docs/chapter1/section4/src/select.rs diff --git a/docs/chapter1/section4/3_rust_and_db.md b/docs/chapter1/section4/3_rust_and_db.md index c28121a9..b6a546c8 100644 --- a/docs/chapter1/section4/3_rust_and_db.md +++ b/docs/chapter1/section4/3_rust_and_db.md @@ -17,17 +17,8 @@ Rust でデータベースに接続するためのライブラリは様々あり <<< @/chapter1/section4/src/connect_db.rs{rust:line-numbers} - -書き換えた後、 import の周りで赤字のエラーが出た場合は、ターミナルで`go mod tidy`を実行してください。 -26 から 40 行目でデータベースに接続するための設定をして、42 行目の`db, err := sqlx.Open("mysql", conf.FormatDSN())`でデータベースに接続しています。32 行目などで`os.Getenv()`という関数が出てきていますが、これは環境変数と呼ばれる、コンピューター側で設定してプログラムで使えるようにしている変数です。今は必要なデータベースのパスワードなどの環境変数を何も設定していないので、設定します。 - -:::info 詳しく知りたい人向け -**dsn とは** - -42 行目に`FormatDSN`という関数がありますが、`DSN`は「**D**ata **S**ource **N**ame」の頭文字をとったものです。プログラムがデータベースを指定するために使われます。今回の`FormatDSN`という関数は、データベースのユーザー名、パスワード、使うデータベース、どこにデータベースのサーバーがあるのか、用いる標準時、文字種などの設定を`conf`という変数から読み取って DSN を組み立てています。 - -[Wikipedia DSN(英語)](https://en.wikipedia.org/wiki/Data_source_name) -::: +`get_option` 関数により、データベースに接続するための設定を構成し、`MySqlPool::connect_with` でデータベースに接続しています。 +`env::var` により、環境変数を読み込んでいます。環境変数を使うことで、プログラムの動作を変えることなく、データベースの接続情報を変更できます。 ### 環境変数を設定する @@ -45,10 +36,9 @@ export DB_DATABASE="world" ```txt ... -# Go workspace file -go.work +# Added by cargo -.tool-versions +/target .env // [!code ++] ``` @@ -84,13 +74,12 @@ Tokyoの人口は7980230人です <<< @/chapter1/section4/src/connect_db.rs#city -この`City`構造体の横にあるバッククオートで囲まれたタグに`db`でデータベースのカラム名を指定します。これによってライブラリがデータベースから取得したレコードを構造体に上手くあてはめてくれます。 - -参考: [Struct タグについて | text.Baldanders.info](https://text.baldanders.info/golang/struct-tag/) +`#[derive(sqlx::FromRow)]`を使うことで、SQL 文で取得したレコードを構造体へ変換できるようになります。`#[sqlx(rename_all = "PascalCase")]` によって、データベースのカラム名が`PascalCase`に変換されます。また、`#[sqlx(rename = "ID")]` によって、`ID`というカラム名を`id`というフィールドに変換しています。 <<< @/chapter1/section4/src/connect_db.rs#get -`City`型の`city`という変数のポインタを sqlx ライブラリの`Get`関数の第 1 引数に指定します。第 2 引数には SQL 文を書きます。`Name = ?`としていますが、第 3 引数以降の値が順番に`?`へと当てはめられて SQL 文が実行され、取得したレコードが`city`変数に代入されます。 +`sqlx::query_as` により、SQL 文を実行して結果を構造体に変換しています。SQL 文中の `?` に対して、`bind` で値を順番に結び付けることができます。 +`fetch_one` により 1 つのレコードを取得しています。 ### 基本問題 @@ -113,14 +102,14 @@ $ cargo run {都市の名前} ヒント: 1 回のクエリでも取得できますが、2 回に分けた方が楽に考えられます。 :::details 答え -<<< @/chapter1/section4/src/practice_advanced.go +<<< @/chapter1/section4/src/practice_advanced.rs ::: ## 複数レコードを取得する -`Get`関数の代わりに`Select`関数を使い、第 1 引数を配列のポインタに変えると、複数レコードを取得できます。`main.go`の`main`関数を以下のように書き換えて実行してみましょう。 +`fetch_one`関数の代わりに`fetch_all`関数を使い、第 1 引数を配列のポインタに変えると、複数レコードを取得できます。`main.rs`の`main`関数を以下のように書き換えて実行してみましょう。 -<<< @/chapter1/section4/src/select.go#main{27 go:line-numbers} +<<< @/chapter1/section4/src/select.rs#main{rs:line-numbers} 以下のように日本の都市一覧を取得できます。 ```txt @@ -139,21 +128,29 @@ connected ## レコードを書き換える -`INSERT`や`UPDATE`、`DELETE`を実行したい場合は、`Exec`関数を使うことができます。第 1 引数に SQL 文を渡し、第 2 引数以降は`?`に当てはめたい値を入れます。 +`INSERT`や`UPDATE`、`DELETE`を実行したい場合は、`query`関数を使うことができます。 -```go -result, err := db.Exec("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?,?,?,?)", name, countryCode, district, population) +```rs +let result = sqlx::query("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)") + .bind(city.name) + .bind(city.country_code) + .bind(city.district) + .bind(city.population) + .execute(&pool) + .await?; ``` -例えば`INSERT`ならば、このように使うことができます。`result`には操作によって変更があったレコード数などの情報が入っています。 +例えば`INSERT`ならば、このように使うことができます。return で返ってくる`result`には、`INSERT`で何件のレコードが追加されたかなどの情報が入っています。 :::info 詳しく知りたい人向け -**なぜ「`?`」を使うのか** +**なぜSQL文で「`?`」を使うのか** -sqlx で変数を含む SQL を使いたいときは「`?`」を使わなくてはいけません。これはセキュリティ上の問題です。例として、国のコードからその国の都市の情報一覧を取得することを考えましょう。`fmt`ライブラリの`Sprintf`関数を使うとこのように処理を書くことができます。 +sqlx で変数を含む SQL を使いたいときは「`?`」を使わなくてはいけません。これはセキュリティ上の問題です。例として、国のコードからその国の都市の情報一覧を取得することを考えましょう。`format!`を使って SQL 文を作成すると以下のようになります。 -```go -err = db.Select(&city, fmt.Sprintf("SELECT * FROM city WHERE CountryCode = '%s'", code)) +```rs +sqlx::query_as::<_, City>( + format!("SELECT * FROM city WHERE CountryCode = '{}'", code).as_str(), +) ``` `code`に入っている値がただの国名コードなら問題はないのですが、`JPN' OR 'A' = 'A`という値が入っていたらどうなるでしょうか。データベースで実行されるとき、SQL 文は下のようになります。 diff --git a/docs/chapter1/section4/src/practice_advanced.go b/docs/chapter1/section4/src/practice_advanced.go deleted file mode 100644 index 8fcf9ad9..00000000 --- a/docs/chapter1/section4/src/practice_advanced.go +++ /dev/null @@ -1,74 +0,0 @@ -package main - -import ( - "database/sql" - "errors" - "log" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" -) - -type City struct { - ID int `json:"ID,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - - log.Println("connected") - - cityName := os.Args[1] - - var city City - err = db.Get(&city, "SELECT * FROM city WHERE Name = ?", cityName) - if errors.Is(err, sql.ErrNoRows) { - log.Printf("no such city Name = '%s'\n", cityName) - return - } - if err != nil { - log.Fatalf("DB Error: %s\n", err) - } - - log.Printf("%sの人口は%d人です\n", city.Name, city.Population) - - var population int //[!code ++] - err = db.Get(&population, "SELECT Population FROM country WHERE Code = ?", city.CountryCode) //[!code ++] - if errors.Is(err, sql.ErrNoRows) { //[!code ++] - log.Printf("no such country Code = '%s'\n", city.CountryCode) //[!code ++] - return //[!code ++] - } //[!code ++] - if err != nil { //[!code ++] - log.Fatalf("DB Error: %s\n", err) //[!code ++] - } //[!code ++] - //[!code ++] - percent := (float64(city.Population) / float64(population)) * 100 //[!code ++] - //[!code ++] - log.Printf("これは%sの人口の%f%%です\n", city.CountryCode, percent) //[!code ++] -} diff --git a/docs/chapter1/section4/src/practice_advanced.rs b/docs/chapter1/section4/src/practice_advanced.rs new file mode 100644 index 00000000..0c9da70a --- /dev/null +++ b/docs/chapter1/section4/src/practice_advanced.rs @@ -0,0 +1,68 @@ +use anyhow::Ok; +use sqlx::mysql::MySqlConnectOptions; +use std::env; + +#[derive(sqlx::FromRow)] +#[sqlx(rename_all = "PascalCase")] +#[allow(dead_code)] // 使用していないフィールドへの警告を抑制 +struct City { + #[sqlx(rename = "ID")] + id: i32, + name: String, + country_code: String, + district: String, + population: i32, +} + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + let city_name = env::args().nth(1).expect("city name is required"); + println!("Connected"); + let city = sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind(&city_name) + .fetch_one(&pool) + .await + .map_err(|e| match e { + sqlx::Error::RowNotFound => anyhow::anyhow!("no such city Name = {}\n", &city_name), + _ => anyhow::anyhow!("DB error: {}", e), + })?; + + println!("{}の人口は{}人です", &city.name, &city.population); + + let population: i64 = sqlx::query_scalar("SELECT Population FROM country WHERE Code = ?") // [!code ++] + .bind(&city.country_code) // [!code ++] + .fetch_one(&pool) // [!code ++] + .await // [!code ++] + .map_err(|e| match e { // [!code ++] + sqlx::Error::RowNotFound => { // [!code ++] + anyhow::anyhow!("no such country Code = {}\n", &city.country_code) // [!code ++] + } // [!code ++] + _ => anyhow::anyhow!("DB error: {}", e), // [!code ++] + })?; // [!code ++] + let percent = city.population as f64 / population as f64 * 100.0; // [!code ++] + println!("これは、{}の人口の{:.2}%です", &city.country_code, percent); // [!code ++] + + Ok(()) +} diff --git a/docs/chapter1/section4/src/select.go b/docs/chapter1/section4/src/select.go deleted file mode 100644 index ae165400..00000000 --- a/docs/chapter1/section4/src/select.go +++ /dev/null @@ -1,58 +0,0 @@ -package main - -import ( - "log" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" -) - -type City struct { - ID int `json:"ID,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -// #region main -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - - log.Println("connected") - - var cities []City - err = db.Select(&cities, "SELECT * FROM city WHERE CountryCode = 'JPN'") //?を使わない場合、第3引数以降は不要 - if err != nil { - log.Fatal(err) - } - - log.Println("日本の都市一覧") - for _, city := range cities { - log.Printf("都市名: %s, 人口: %d\n", city.Name, city.Population) - } -} - -//#endregion main diff --git a/docs/chapter1/section4/src/select.rs b/docs/chapter1/section4/src/select.rs new file mode 100644 index 00000000..276fb20a --- /dev/null +++ b/docs/chapter1/section4/src/select.rs @@ -0,0 +1,55 @@ +use anyhow::Ok; +use sqlx::mysql::MySqlConnectOptions; +use std::env; + +#[derive(sqlx::FromRow)] +#[sqlx(rename_all = "PascalCase")] +#[allow(dead_code)] // 使用していないフィールドへの警告を抑制 +struct City { + #[sqlx(rename = "ID")] + id: i32, + name: String, + country_code: String, + district: String, + population: i32, +} + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +// #region main +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + println!("Connected"); + + let cities = sqlx::query_as::<_, City>("SELECT * FROM city WHERE CountryCode = ?") + .bind("JPN") + .fetch_all(&pool) + .await?; + + println!("日本の都市一覧"); + for city in cities { + println!("都市名: {}, 人口: {}", city.name, city.population); + } + Ok(()) +} +// #endregion main From 48cd5e9c3987847658fd9b65c2ef8f25cc340fba Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 16 Oct 2024 18:40:51 +0900 Subject: [PATCH 31/57] add server database problems --- docs/chapter1/section4/3_rust_and_db.md | 6 ++ docs/chapter1/section4/4_server_and_db.md | 10 +- docs/chapter1/section4/src/practice_server.go | 98 ------------------ docs/chapter1/section4/src/practice_server.rs | 99 +++++++++++++++++++ docs/chapter1/section4/src/server.go | 76 -------------- docs/chapter1/section4/src/server.rs | 74 ++++++++++++++ 6 files changed, 181 insertions(+), 182 deletions(-) delete mode 100644 docs/chapter1/section4/src/practice_server.go create mode 100644 docs/chapter1/section4/src/practice_server.rs delete mode 100644 docs/chapter1/section4/src/server.go create mode 100644 docs/chapter1/section4/src/server.rs diff --git a/docs/chapter1/section4/3_rust_and_db.md b/docs/chapter1/section4/3_rust_and_db.md index b6a546c8..1bd08f06 100644 --- a/docs/chapter1/section4/3_rust_and_db.md +++ b/docs/chapter1/section4/3_rust_and_db.md @@ -57,6 +57,12 @@ $ source .env このコマンドによって読み込んだ環境変数は、コマンドを入力したターミナルを終了すると消えてしまいます。また、コマンドを入力したターミナル以外では環境変数として読み込まれません。新しくターミナルを開きなおした場合などは、もう一度実行してください。 ::: +### クレートの依存関係を追加する +```sh +$ cargo add axum anyhow serde serde_json tokio --features tokio/full,serde/derive +$ cargo add sqlx --features mysql,migrate,chrono,runtime-tokio +``` + ### 実行する ```sh diff --git a/docs/chapter1/section4/4_server_and_db.md b/docs/chapter1/section4/4_server_and_db.md index a6972ad4..ddc19e4b 100644 --- a/docs/chapter1/section4/4_server_and_db.md +++ b/docs/chapter1/section4/4_server_and_db.md @@ -2,7 +2,7 @@ Echo を使い、データベースからデータを取得するサーバーアプリケーションを作りましょう。 -<<< @/chapter1/section4/src/server.go{go:line-numbers} +<<< @/chapter1/section4/src/server.rs{rs:line-numbers} 都市が見つかったら`200`を、見つからなかったら`404`を返しています。 Postman からリクエストを送ってみましょう。 @@ -26,13 +26,7 @@ Postman からリクエストを送ってみましょう。 :::details 答え -- `main`関数内部 - -<<< @/chapter1/section4/src/practice_server.go#echo - -- `postCityHandler`関数を定義 - -<<< @/chapter1/section4/src/practice_server.go#func +<<< @/chapter1/section4/src/practice_server.rs{rs:line-numbers} ::: diff --git a/docs/chapter1/section4/src/practice_server.go b/docs/chapter1/section4/src/practice_server.go deleted file mode 100644 index 8645349a..00000000 --- a/docs/chapter1/section4/src/practice_server.go +++ /dev/null @@ -1,98 +0,0 @@ -package main - -import ( - "database/sql" - "errors" - "fmt" - "log" - "net/http" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" - "github.com/labstack/echo/v4" -) - -type City struct { - ID int `json:"id,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -var ( - db *sqlx.DB -) - -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - _db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - log.Println("connected") - db = _db - //#region echo - e := echo.New() - - e.GET("/cities/:cityName", getCityInfoHandler) - e.POST("/cities", postCityHandler) //[!code ++] - - e.Start(":8080") -} - -// #endregion echo -func getCityInfoHandler(c echo.Context) error { - cityName := c.Param("cityName") - log.Println(cityName) - - var city City - err := db.Get(&city, "SELECT * FROM city WHERE Name=?", cityName) - if errors.Is(err, sql.ErrNoRows) { - return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such city Name = %s", cityName)) - } - if err != nil { - log.Fatalf("failed to get city: %s", err) - } - - return c.JSON(http.StatusOK, city) -} - -// #region func -func postCityHandler(c echo.Context) error { //[!code ++] - var city City //[!code ++] - err := c.Bind(&city) //[!code ++] - if err != nil { //[!code ++] - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") //[!code ++] - } //[!code ++] - //[!code ++] - result, err := db.Exec("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", city.Name, city.CountryCode, city.District, city.Population) //[!code ++] - if err != nil { //[!code ++] - log.Printf("DB Error: %s", err) //[!code ++] - return echo.NewHTTPError(http.StatusInternalServerError, "internal server error") //[!code ++] - } //[!code ++] - //[!code ++] - id, _ := result.LastInsertId() //[!code ++] - city.ID = int(id) //[!code ++] - //[!code ++] - return c.JSON(http.StatusCreated, city) //[!code ++] -} //[!code ++] -//#endregion func diff --git a/docs/chapter1/section4/src/practice_server.rs b/docs/chapter1/section4/src/practice_server.rs new file mode 100644 index 00000000..d3c16516 --- /dev/null +++ b/docs/chapter1/section4/src/practice_server.rs @@ -0,0 +1,99 @@ +use axum::{ + extract::{rejection::JsonRejection, Path, State}, + http::StatusCode, + routing::{get, post}, + Json, Router, +}; +use sqlx::{mysql::MySqlConnectOptions, Pool}; +use std::env; + +#[derive(sqlx::FromRow, serde::Serialize, serde::Deserialize)] // [!code warning] +#[sqlx(rename_all = "PascalCase")] +#[serde(rename_all = "camelCase")] +struct City { + #[sqlx(rename = "ID")] + id: Option, // [!code warning] + name: String, + country_code: String, + district: String, + population: i32, +} + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + let app = Router::new() + .route("/cities/:cityName", get(get_city_handler)) + .route("/cities", post(post_city_handler)) // [!code ++] + .with_state(pool); + + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); + + Ok(()) +} + +async fn get_city_handler( + State(pool): State>, + Path(city_name): Path, +) -> Result, StatusCode> { + let city = sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind(&city_name) + .fetch_one(&pool) + .await; + + match city { + Ok(city) => Ok(Json(city)), + Err(sqlx::Error::RowNotFound) => Err(StatusCode::NOT_FOUND), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } +} + +async fn post_city_handler( // [!code ++] + State(pool): State>, // [!code ++] + query: Result, JsonRejection>, // [!code ++] +) -> Result, StatusCode> { // [!code ++] + match query { // [!code ++] + Ok(Json(mut city)) => { // [!code ++] + let result = sqlx::query( // [!code ++] + "INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", // [!code ++] + ) // [!code ++] + .bind(&city.name) // [!code ++] + .bind(&city.country_code) // [!code ++] + .bind(&city.district) // [!code ++] + .bind(city.population) // [!code ++] + .execute(&pool) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] + + city.id = Some(result.last_insert_id() as i32); // [!code ++] + Ok(Json(city)) // [!code ++] + } // [!code ++] + Err(_) => Err(StatusCode::BAD_REQUEST), // [!code ++] + } // [!code ++] +} // [!code ++] diff --git a/docs/chapter1/section4/src/server.go b/docs/chapter1/section4/src/server.go deleted file mode 100644 index fab10ce0..00000000 --- a/docs/chapter1/section4/src/server.go +++ /dev/null @@ -1,76 +0,0 @@ -package main - -import ( - "database/sql" - "errors" - "fmt" - "log" - "net/http" - "os" - "time" - - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" - "github.com/labstack/echo/v4" -) - -type City struct { - ID int `json:"id,omitempty" db:"ID"` - Name string `json:"name,omitempty" db:"Name"` - CountryCode string `json:"countryCode,omitempty" db:"CountryCode"` - District string `json:"district,omitempty" db:"District"` - Population int `json:"population,omitempty" db:"Population"` -} - -var ( - db *sqlx.DB -) - -func main() { - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - _db, err := sqlx.Open("mysql", conf.FormatDSN()) - - if err != nil { - log.Fatal(err) - } - log.Println("connected") - db = _db - - e := echo.New() - - e.GET("/cities/:cityName", getCityInfoHandler) - - e.Start(":8080") -} - -func getCityInfoHandler(c echo.Context) error { - cityName := c.Param("cityName") - log.Println(cityName) - - var city City - err := db.Get(&city, "SELECT * FROM city WHERE Name=?", cityName) - if errors.Is(err, sql.ErrNoRows) { - return echo.NewHTTPError(http.StatusNotFound, fmt.Sprintf("No such city Name = %s", cityName)) - } - if err != nil { - log.Printf("DB Error: %s", err) - return echo.NewHTTPError(http.StatusInternalServerError, "internal server error") - } - - return c.JSON(http.StatusOK, city) -} diff --git a/docs/chapter1/section4/src/server.rs b/docs/chapter1/section4/src/server.rs new file mode 100644 index 00000000..b64410dd --- /dev/null +++ b/docs/chapter1/section4/src/server.rs @@ -0,0 +1,74 @@ +use axum::{ + extract::{Path, State}, + http::StatusCode, + routing::get, + Json, Router, +}; +use sqlx::{mysql::MySqlConnectOptions, Pool}; +use std::env; + +#[derive(sqlx::FromRow, serde::Serialize)] +#[sqlx(rename_all = "PascalCase")] +#[serde(rename_all = "camelCase")] +struct City { + #[sqlx(rename = "ID")] + id: i32, + name: String, + country_code: String, + district: String, + population: i32, +} + +fn get_option() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + let options = get_option()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + let app = Router::new() + .route("/cities/:cityName", get(get_city_handler)) + .with_state(pool); + + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080") + .await + .unwrap(); + + println!("listening on {}", listener.local_addr().unwrap()); + axum::serve(listener, app).await.unwrap(); + + Ok(()) +} + +async fn get_city_handler( + State(pool): State>, + Path(city_name): Path, +) -> Result, StatusCode> { + let city = sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind(&city_name) + .fetch_one(&pool) + .await; + + match city { + Ok(city) => Ok(Json(city)), + Err(sqlx::Error::RowNotFound) => Err(StatusCode::NOT_FOUND), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } +} From 8a9aedbf89e8b585cd490df44a914619f0120f13 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 16 Oct 2024 18:56:45 +0900 Subject: [PATCH 32/57] fix/Echo -> axum --- docs/chapter1/section4/4_server_and_db.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/chapter1/section4/4_server_and_db.md b/docs/chapter1/section4/4_server_and_db.md index ddc19e4b..15de2109 100644 --- a/docs/chapter1/section4/4_server_and_db.md +++ b/docs/chapter1/section4/4_server_and_db.md @@ -1,6 +1,6 @@ # サーバーからデータベースを扱う -Echo を使い、データベースからデータを取得するサーバーアプリケーションを作りましょう。 +axum を使い、データベースからデータを取得するサーバーアプリケーションを作りましょう。 <<< @/chapter1/section4/src/server.rs{rs:line-numbers} From 0ec6e9f88a8f07189aa6d3ee16f00cd60a199478 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Sun, 20 Oct 2024 15:37:43 +0900 Subject: [PATCH 33/57] add code --- docs/chapter2/section1/0_setup.md | 60 ++++++++-------- docs/chapter2/section1/images/0/file-tree.png | Bin 5746 -> 4797 bytes docs/chapter2/section1/src/first/handler.go | 65 ------------------ docs/chapter2/section1/src/first/handler.rs | 15 ++++ .../section1/src/first/handler/country.rs | 35 ++++++++++ docs/chapter2/section1/src/first/main.go | 53 -------------- docs/chapter2/section1/src/first/main.rs | 20 ++++++ .../chapter2/section1/src/first/repository.rs | 40 +++++++++++ .../section1/src/first/repository/country.rs | 43 ++++++++++++ 9 files changed, 186 insertions(+), 145 deletions(-) delete mode 100644 docs/chapter2/section1/src/first/handler.go create mode 100644 docs/chapter2/section1/src/first/handler.rs create mode 100644 docs/chapter2/section1/src/first/handler/country.rs delete mode 100644 docs/chapter2/section1/src/first/main.go create mode 100644 docs/chapter2/section1/src/first/main.rs create mode 100644 docs/chapter2/section1/src/first/repository.rs create mode 100644 docs/chapter2/section1/src/first/repository/country.rs diff --git a/docs/chapter2/section1/0_setup.md b/docs/chapter2/section1/0_setup.md index 132922e0..8ed1620a 100644 --- a/docs/chapter2/section1/0_setup.md +++ b/docs/chapter2/section1/0_setup.md @@ -18,13 +18,20 @@ DB_PORT="3306" DB_DATABASE="world" ``` -3. `go mod tidy` を実行しましょう。 +3. `source .env` を実行しましょう。 + +4. 以下のコマンドを実行し、クレートの依存関係を追加しましょう。 + +```sh +$ cargo add axum anyhow serde serde_json tokio --features tokio/full,serde/derive,axum/macros +$ cargo add sqlx --features mysql,migrate,chrono,runtime-tokio +``` 以上でセットアップはできているはずです。 ## ファイルの分割 -このまま演習を始めてしまうとファイルが長くなりすぎてしまうので、ファイルを別のパッケージとして分割します。 +このまま演習を始めてしまうとファイルが長くなりすぎてしまうので、ファイルを別のモジュールとして分割します。 :::tip パッケージとは、関連する複数のファイルをまとめる単位のことです。 ディレクトリとパッケージは一対一に対応しています。原則的に、ディレクトリ名とパッケージ名は同じにします。 @@ -32,44 +39,43 @@ DB_DATABASE="world" パッケージの外部に公開する変数や関数などのシンボルは、先頭を大文字にする必要があります。 逆に言えば、先頭が大文字でないシンボルは、パッケージの外部からはアクセスできません。 詳しくは以下を参照してください。 -[A Tour of Go - Packages](https://go.dev/tour/basics/1) -[Effective Go - package-names](https://golang.org/doc/effective_go#package-names) +[The Rust Programming Language 日本語版 - パッケージとクレート](https://doc.rust-jp.rs/book-ja/ch07-01-packages-and-crates.html) ::: -各エンドポイントでの処理はハンドラーと呼ばれますが、それを `handler/handler.go` に移動してみましょう。手順は以下の通りです。 -### handler.go の作成 +まずは、`src` ディレクトリに +![](images/0/file-tree.png) -1. `handler` というディレクトリを新しく作成し、その中に `handler.go` というファイルを作成する。 -2. `handler.go` を以下のように記述する。 +この画像のようなディレクトリ構造を作成しましょう。 -<<<@/chapter2/section1/src/first/handler.go{go:line-numbers} -ファイルを編集したら、`go mod tidy` を実行しましょう。 -### main.go の編集 +それぞれのファイルを編集していきます。 -`main.go`を以下のように編集しましょう。 +#### handler.rs -<<<@/chapter2/section1/src/first/main.go{go:line-numbers} +<<<@/chapter2/section1/src/first/handler.rs{rs:line-numbers} -ファイルを編集したら、`go mod tidy` を実行しましょう。 -![](images/0/file-tree.png) -ここまで出来たら、画像のようになっているはずです。 +#### main.rs -## 準備完了 +<<<@/chapter2/section1/src/first/main.rs{rs:line-numbers} -ファイルの分割で変更したのは、以下の 3 点です。 +#### repository.rs -1. `handler`パッケージを作成し、コードを分割した。 -2. `handler`という`db`をフィールドに持つ構造体を作成し、その構造体のメソッドとして`GetCityInfoHandler`や`PostCityHandler`を定義した。 -3. `.env`ファイルの環境変数を、プログラムで読むようにした。 +<<<@/chapter2/section1/src/first/repository.rs{rs:line-numbers} -それでは、`go run main.go` で実行してみましょう。 -:::tip -`main package`を複数ファイルに分割した場合、`go run main.go`だと`main.go`のみがビルドされるため、 -`go run .`や`go run main1.go main2.go`のようにして複数ファイルを読み込む必要があります。 -詳しくは`go help run`を参照してください。 -::: +#### handler/country.rs + +<<<@/chapter2/section1/src/first/handler/country.rs{rs:line-numbers} + +#### repository/country.rs + +<<<@/chapter2/section1/src/first/repository/country.rs{rs:line-numbers} + +## 変更点の説明 + +## 準備完了 + +それでは、`cargo run` で実行してみましょう。 ![](images/0/echo.png) diff --git a/docs/chapter2/section1/images/0/file-tree.png b/docs/chapter2/section1/images/0/file-tree.png index 7b16024f549752d71f83f4eef281c689991e632c..19de947dde9452ceb3c3466f4a31e8fbb074c19c 100644 GIT binary patch literal 4797 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 aV#W9B7*a839L9Y);i)J=6)P3Yg8v2l;6suC literal 5746 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 diff --git a/docs/chapter2/section1/src/first/handler.go b/docs/chapter2/section1/src/first/handler.go deleted file mode 100644 index b3f08e88..00000000 --- a/docs/chapter2/section1/src/first/handler.go +++ /dev/null @@ -1,65 +0,0 @@ -package handler - -import ( - "database/sql" - "errors" - "github.com/jmoiron/sqlx" - "github.com/labstack/echo/v4" - "log" - "net/http" -) - -type Handler struct { - db *sqlx.DB -} - -func NewHandler(db *sqlx.DB) *Handler { - return &Handler{db: db} -} - -type City struct { - ID int `json:"id,omitempty" db:"ID"` - Name sql.NullString `json:"name,omitempty" db:"Name"` - CountryCode sql.NullString `json:"countryCode,omitempty" db:"CountryCode"` - District sql.NullString `json:"district,omitempty" db:"District"` - Population sql.NullInt64 `json:"population,omitempty" db:"Population"` -} - -func (h *Handler) GetCityInfoHandler(c echo.Context) error { - cityName := c.Param("cityName") - - var city City - err := h.db.Get(&city, "SELECT * FROM city WHERE Name=?", cityName) - if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return c.NoContent(http.StatusNotFound) - } - log.Printf("failed to get city data: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - - return c.JSON(http.StatusOK, city) -} - -func (h *Handler) PostCityHandler(c echo.Context) error { - var city City - err := c.Bind(&city) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") - } - - result, err := h.db.Exec("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", city.Name, city.CountryCode, city.District, city.Population) - if err != nil { - log.Printf("failed to insert city data: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - - id, err := result.LastInsertId() - if err != nil { - log.Printf("failed to get last insert id: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - city.ID = int(id) - - return c.JSON(http.StatusCreated, city) -} diff --git a/docs/chapter2/section1/src/first/handler.rs b/docs/chapter2/section1/src/first/handler.rs new file mode 100644 index 00000000..ccc592a5 --- /dev/null +++ b/docs/chapter2/section1/src/first/handler.rs @@ -0,0 +1,15 @@ +use axum::{ + routing::{get, post}, + Router, +}; + +use crate::repository::Repository; +mod country; + +pub fn make_router(app_state: Repository) -> Router { + let city_router = Router::new() + .route("/city/:city_name", get(country::get_city_handler)) + .route("/cities", post(country::post_city_handler)); + + Router::new().nest("/", city_router).with_state(app_state) +} diff --git a/docs/chapter2/section1/src/first/handler/country.rs b/docs/chapter2/section1/src/first/handler/country.rs new file mode 100644 index 00000000..be5ba1da --- /dev/null +++ b/docs/chapter2/section1/src/first/handler/country.rs @@ -0,0 +1,35 @@ +use crate::repository::{country::City, Repository}; +use axum::{ + extract::rejection::JsonRejection, + extract::{Path, State}, + http::StatusCode, + Json, +}; + +pub async fn get_city_handler( + State(state): State, + Path(city_name): Path, +) -> Result, StatusCode> { + let city = Repository::get_city_by_name(&state, city_name).await; + match city { + Ok(city) => Ok(Json(city)), + Err(sqlx::Error::RowNotFound) => Err(StatusCode::NOT_FOUND), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } +} + +pub async fn post_city_handler( + State(state): State, + query: Result, JsonRejection>, +) -> Result, StatusCode> { + match query { + Ok(Json(city)) => { + let result = Repository::create_city(&state, city).await; + match result { + Ok(city) => Ok(Json(city)), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } + } + Err(_) => Err(StatusCode::BAD_REQUEST), + } +} diff --git a/docs/chapter2/section1/src/first/main.go b/docs/chapter2/section1/src/first/main.go deleted file mode 100644 index 4927e79e..00000000 --- a/docs/chapter2/section1/src/first/main.go +++ /dev/null @@ -1,53 +0,0 @@ -package main - -import ( - "github.com/go-sql-driver/mysql" - "github.com/jmoiron/sqlx" - "github.com/joho/godotenv" - "github.com/labstack/echo/v4" - "github.com/traPtitech/naro-template-backend/handler" - "log" - "os" - "time" -) - -func main() { - // .envファイルから環境変数を読み込み - err := godotenv.Load(".env") - if err != nil { - log.Fatal(err) - } - - // データーベースの設定 - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - // データベースに接続 - db, err := sqlx.Open("mysql", conf.FormatDSN()) - if err != nil { - log.Fatal(err) - } - - h := handler.NewHandler(db) - e := echo.New() - - e.GET("/cities/:cityName", h.GetCityInfoHandler) - e.POST("/cities", h.PostCityHandler) - - err = e.Start(":8080") - if err != nil { - log.Fatal(err) - } -} diff --git a/docs/chapter2/section1/src/first/main.rs b/docs/chapter2/section1/src/first/main.rs new file mode 100644 index 00000000..9a15206e --- /dev/null +++ b/docs/chapter2/section1/src/first/main.rs @@ -0,0 +1,20 @@ +use tower_http::trace::TraceLayer; +use tracing_subscriber::EnvFilter; + +mod handler; +mod repository; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::try_from_default_env().unwrap_or("info".into())) + .init(); + + let app_state = repository::Repository::connect().await?; + let app = handler::make_router(app_state).layer(TraceLayer::new_for_http()); + let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?; + + tracing::info!("listening on {}", listener.local_addr()?); + axum::serve(listener, app).await.unwrap(); + Ok(()) +} diff --git a/docs/chapter2/section1/src/first/repository.rs b/docs/chapter2/section1/src/first/repository.rs new file mode 100644 index 00000000..c2b171a0 --- /dev/null +++ b/docs/chapter2/section1/src/first/repository.rs @@ -0,0 +1,40 @@ +//use async_sqlx_session::MySqlSessionStore; +use sqlx::mysql::MySqlConnectOptions; +use sqlx::mysql::MySqlPool; +use std::env; + +pub mod country; + +#[derive(Clone)] +pub struct Repository { + pool: MySqlPool, +} + +impl Repository { + pub async fn connect() -> anyhow::Result { + let options = get_options()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + Ok(Self { + pool, + }) + } +} + +fn get_options() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} diff --git a/docs/chapter2/section1/src/first/repository/country.rs b/docs/chapter2/section1/src/first/repository/country.rs new file mode 100644 index 00000000..cd3812c4 --- /dev/null +++ b/docs/chapter2/section1/src/first/repository/country.rs @@ -0,0 +1,43 @@ +use super::Repository; + +#[derive(sqlx::FromRow, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct City { + #[sqlx(rename = "ID")] + pub id: Option, + #[sqlx(rename = "Name")] + pub name: String, + #[sqlx(rename = "CountryCode")] + pub country_code: String, + #[sqlx(rename = "District")] + pub district: String, + #[sqlx(rename = "Population")] + pub population: i32, +} + +impl Repository { + pub async fn get_city_by_name(&self, city_name: String) -> sqlx::Result { + sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind(&city_name) + .fetch_one(&self.pool) + .await + } + + pub async fn create_city(&self, city: City) -> sqlx::Result { + let result = sqlx::query( + "INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", + ) + .bind(&city.name) + .bind(&city.country_code) + .bind(&city.district) + .bind(city.population) + .execute(&self.pool) + .await?; + + let id = result.last_insert_id() as i32; + Ok(City { + id: Some(id), + ..city + }) + } +} From 910acabda5ab55d391cc92c6ae3db5743b88938e Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 24 Oct 2024 19:57:20 +0900 Subject: [PATCH 34/57] fix: change cargo.toml --- docs/chapter2/section1/0_setup.md | 40 ++++++++++++++++------ docs/chapter2/section1/images/0/cargo.png | Bin 0 -> 11751 bytes docs/chapter2/section1/images/0/echo.png | Bin 72072 -> 0 bytes 3 files changed, 29 insertions(+), 11 deletions(-) create mode 100644 docs/chapter2/section1/images/0/cargo.png delete mode 100644 docs/chapter2/section1/images/0/echo.png diff --git a/docs/chapter2/section1/0_setup.md b/docs/chapter2/section1/0_setup.md index 8ed1620a..90635588 100644 --- a/docs/chapter2/section1/0_setup.md +++ b/docs/chapter2/section1/0_setup.md @@ -4,7 +4,7 @@ 今回の演習は、[(第一部)サーバーからデータベースを扱う](../../chapter1/section4/4_server_and_db) の状態から開始します。 -もしファイルを削除してしまった場合は、以下の手順でセットアップしましょう。 +**第一部から繰り返し受講している方も、** 以下の手順でセットアップを行ってください。 1. [データベースを扱う準備](../../chapter1/section4/0_prepare) からプロジェクトをセットアップしましょう。 @@ -24,9 +24,26 @@ DB_DATABASE="world" ```sh $ cargo add axum anyhow serde serde_json tokio --features tokio/full,serde/derive,axum/macros -$ cargo add sqlx --features mysql,migrate,chrono,runtime-tokio +$ cargo add async-session tracing tracing-subscriber --features tracing-subscriber/env-filter,tracing-subscriber/fmt +$ cargo add tower-http --features add-extension,trace,fs ``` +また、 cargo.toml に以下の記述を足しましょう。 + +```toml +[dependencies.sqlx] +version = "0.7" +features = ["mysql", "migrate", "chrono", "runtime-tokio", "macros"] + +[dependencies.async-sqlx-session] +git = "https://github.com/maxcountryman/async-sqlx-session.git" +default-features = false +branch = "sqlx-0.7" +features = ["mysql"] +``` + +``[dependencies]`` に既に `sqlx` がある場合は、その行を削除してください。 + 以上でセットアップはできているはずです。 ## ファイルの分割 @@ -34,22 +51,19 @@ $ cargo add sqlx --features mysql,migrate,chrono,runtime-tokio このまま演習を始めてしまうとファイルが長くなりすぎてしまうので、ファイルを別のモジュールとして分割します。 :::tip パッケージとは、関連する複数のファイルをまとめる単位のことです。 -ディレクトリとパッケージは一対一に対応しています。原則的に、ディレクトリ名とパッケージ名は同じにします。 -パッケージによって、機能を分離でき、変数や関数の公開範囲を最低限にできる等沢山の恩恵が得られます。 -パッケージの外部に公開する変数や関数などのシンボルは、先頭を大文字にする必要があります。 -逆に言えば、先頭が大文字でないシンボルは、パッケージの外部からはアクセスできません。 詳しくは以下を参照してください。 [The Rust Programming Language 日本語版 - パッケージとクレート](https://doc.rust-jp.rs/book-ja/ch07-01-packages-and-crates.html) ::: -まずは、`src` ディレクトリに -![](images/0/file-tree.png) +まずは、`src` ディレクトリにファイルを追加していきます。 -この画像のようなディレクトリ構造を作成しましょう。 +![](images/0/file-tree.png) +この画像のようなディレクトリ構造を作成しましょう。 +次に、それぞれのファイルにコードを追加していきます。 -それぞれのファイルを編集していきます。 +### ファイルの内容 #### handler.rs @@ -72,12 +86,16 @@ $ cargo add sqlx --features mysql,migrate,chrono,runtime-tokio <<<@/chapter2/section1/src/first/repository/country.rs{rs:line-numbers} ## 変更点の説明 +今までは`main.rs`に全てのコードを記述しており、データベースやハンドラーの処理が混ざっていましたが、ここではそれらの処理をファイルに分割しました。 +ルーティングの処理を`handler.rs`に、データベースの初期化や接続を`repository.rs`に分割しました。 +`handler`のサブモジュールとして`country.rs`を作成し、都市に関する API の処理を記述しました。 +同様に`repository`のサブモジュールとして`country.rs`を作成し、都市に関するデータベースの処理を記述しました。 ## 準備完了 それでは、`cargo run` で実行してみましょう。 -![](images/0/echo.png) +![](images/0/cargo.png) 無事起動が出来たら、ターミナルで`task up`を実行してデーターベースを起動し、localhost:8080/cities/Tokyoにアクセスして実際に動いていることを確認しましょう。 diff --git a/docs/chapter2/section1/images/0/cargo.png b/docs/chapter2/section1/images/0/cargo.png new file mode 100644 index 0000000000000000000000000000000000000000..3c41bcc63bf08e5b290ca41201a17beca3ac19ae GIT binary patch literal 11751 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 literal 0 HcmV?d00001 diff --git a/docs/chapter2/section1/images/0/echo.png b/docs/chapter2/section1/images/0/echo.png deleted file mode 100644 index e65f1e8af7c5fa10d3a86a15da7368b5761eedef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72072 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 Pz)xLSN2x-=D)j#VsrFs( From 0816de1fbddc8332d9b0a50e26e1890e9a3be86e Mon Sep 17 00:00:00 2001 From: kenken714 Date: Fri, 25 Oct 2024 11:12:55 +0900 Subject: [PATCH 35/57] feat: update tokyo.png --- docs/chapter2/section1/0_setup.md | 4 ++-- docs/chapter2/section1/images/0/Tokyo.png | Bin 46455 -> 18660 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/chapter2/section1/0_setup.md b/docs/chapter2/section1/0_setup.md index 90635588..61f77fd4 100644 --- a/docs/chapter2/section1/0_setup.md +++ b/docs/chapter2/section1/0_setup.md @@ -93,11 +93,11 @@ features = ["mysql"] 同様に`repository`のサブモジュールとして`country.rs`を作成し、都市に関するデータベースの処理を記述しました。 ## 準備完了 -それでは、`cargo run` で実行してみましょう。 +それでは、`task up` でデータベースを立ち上げてから `cargo run` で実行してみましょう。 ![](images/0/cargo.png) -無事起動が出来たら、ターミナルで`task up`を実行してデーターベースを起動し、localhost:8080/cities/Tokyoにアクセスして実際に動いていることを確認しましょう。 +localhost:8080/cities/Tokyoにアクセスして実際に動いていることを確認しましょう。 ![](images/0/Tokyo.png) diff --git a/docs/chapter2/section1/images/0/Tokyo.png b/docs/chapter2/section1/images/0/Tokyo.png index 99a394fe4c3aa215fc94e5903f42a24cdc68548e..3c1348f21669a81c5b38f96f448cb335041fd7d5 100644 GIT binary patch literal 18660 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 Date: Sun, 10 Nov 2024 04:39:36 +0900 Subject: [PATCH 36/57] add --- docs/chapter2/section1/0_setup.md | 2 +- docs/chapter2/section1/1_account.md | 543 ++++++++++-------- docs/chapter2/section1/src/0_create-table.sql | 9 + docs/chapter2/section1/src/1_account/auth.rs | 39 ++ docs/chapter2/section1/src/1_account/users.rs | 31 + docs/chapter2/section1/src/first/handler.rs | 1 + .../chapter2/section1/src/first/repository.rs | 1 - 7 files changed, 385 insertions(+), 241 deletions(-) create mode 100644 docs/chapter2/section1/src/0_create-table.sql create mode 100644 docs/chapter2/section1/src/1_account/auth.rs create mode 100644 docs/chapter2/section1/src/1_account/users.rs diff --git a/docs/chapter2/section1/0_setup.md b/docs/chapter2/section1/0_setup.md index 61f77fd4..e1343094 100644 --- a/docs/chapter2/section1/0_setup.md +++ b/docs/chapter2/section1/0_setup.md @@ -23,7 +23,7 @@ DB_DATABASE="world" 4. 以下のコマンドを実行し、クレートの依存関係を追加しましょう。 ```sh -$ cargo add axum anyhow serde serde_json tokio --features tokio/full,serde/derive,axum/macros +$ cargo add axum anyhow serde serde_json tokio bcrypt --features tokio/full,serde/derive,axum/macros $ cargo add async-session tracing tracing-subscriber --features tracing-subscriber/env-filter,tracing-subscriber/fmt $ cargo add tower-http --features add-extension,trace,fs ``` diff --git a/docs/chapter2/section1/1_account.md b/docs/chapter2/section1/1_account.md index 86cc252f..97c8b362 100644 --- a/docs/chapter2/section1/1_account.md +++ b/docs/chapter2/section1/1_account.md @@ -2,51 +2,40 @@ ## 本日の目的 -`main.go` の handler の設定部分を見てみましょう。 - -```go -func main() { - // .envファイルから環境変数を読み込み - err := godotenv.Load(".env") - if err != nil { - log.Fatal(err) - } - - // データーベースの設定 - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - // データベースに接続 - db, err := sqlx.Open("mysql", conf.FormatDSN()) - if err != nil { - log.Fatal(err) - } - - h := handler.NewHandler(db) // [!code hl] - e := echo.New() // [!code hl] - // [!code hl] - e.GET("/cities/:cityName", h.GetCityInfoHandler) // [!code hl] - e.POST("/cities", h.PostCityHandler) // [!code hl] - // [!code hl] - err = e.Start(":8080") // [!code hl] - if err != nil { - log.Fatal(err) - } +`main.rs` と `handler.rs` の handler の設定部分を見てみましょう。 + +### main.rs +```rs +...(省略) +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::try_from_default_env().unwrap_or("info".into())) + .init(); + + let app_state = repository::Repository::connect().await?; // [!code hl] + let app = handler::make_router(app_state).layer(TraceLayer::new_for_http()); // [!code hl] + let listener = tokio::net::TcpListener::bind("0.0.0.0:8080").await?; // [!code hl] + + tracing::info!("listening on {}", listener.local_addr()?); + axum::serve(listener, app).await.unwrap(); // [!code hl] + Ok(()) } ``` -今回の目標は、 `/cities/` で始まる api 2 つ (`getCityInfoHandler`, `postCityHandler`) に対して、 + +### handler.rs +```rs +...(省略) +pub fn make_router(app_state: Repository) -> Router { + let city_router = Router::new() // [!code hl] + .route("/city/:city_name", get(country::get_city_handler)) // [!code hl] + .route("/cities", post(country::post_city_handler)); // [!code hl] + + Router::new().nest("/", city_router).with_state(app_state) // [!code hl] +} +``` + +今回の目標は、 `/cities/` で始まる api 2 つ (`get_city_handler`, `post_city_handler`) に対して、 ログインしているかどうかを判定して、ログインしていなければリクエストを拒否するように実装することです。 用語を使わずに言えば、`City` を新たに追加したり、`City` の情報を得るのにログインを必須にする、ということです。 @@ -57,109 +46,136 @@ func main() { 2. ログインを実装する 3. ログインしないと利用できないようにする -## ライブラリのインストール - -新たにライブラリを導入するので以下のコマンドを実行します。 - -```sh -go get -u github.com/labstack/echo-contrib/session -go get -u github.com/srinathgs/mysqlstore -``` - では、アカウントの作成を実装していきましょう。 アカウントの作成は、以下の手順で進んでいきます。 -1. クライアントから`Username`と`Password`をリクエストとして受け取る -2. `Username`と`Password`のバリデーション(値が正当かのチェック)を行う -3. 既に同じ`Username`のユーザーが登録されていないかチェックする -4. `Password`をハッシュ化する +1. クライアントから`username`と`password`をリクエストとして受け取る +2. `username`と`password`のバリデーション(値が正当かのチェック)を行う +3. 既に同じ`username`のユーザーが登録されていないかチェックする +4. `password`をハッシュ化する 5. ユーザーをデーターベースに登録する ## 下準備 ### テーブルの作成 -アカウントを管理するテーブル `users` を作成しましょう。`main.go`に以下を追加します。 - -```go -func main() { - (省略) - // データベースに接続 - db, err := sqlx.Open("mysql", conf.FormatDSN()) - if err != nil { - log.Fatal(err) - } - - // usersテーブルが存在しなかったら、usersテーブルを作成する // [!code ++] - _, err = db.Exec("CREATE TABLE IF NOT EXISTS users (Username VARCHAR(255) PRIMARY KEY, HashedPass VARCHAR(255))") // [!code ++] - if err != nil { // [!code ++] - log.Fatal(err) // [!code ++] - } // [!code ++] - - h := handler.NewHandler(db) - e := echo.New() - (省略) -} +アカウントを管理するテーブル `users` を作成しましょう。そのために、マイグレーションファイルを作成します。 + +マイグレーションとは、データベースのスキーマの変更内容をファイルに記述しておき、それを実行して更新していく手法です。 + +`naro-rs-template-backend` のルートディレクトリに移動し、以下のコマンドを実行してください。 +```sh +$ mkdir migrations && touch migrations/0_create-table.sql ``` + +`0_create_table.sql` に以下の内容を記述してください。 + +<<<@/chapter2/section1/src/0_create-table.sql + + :::tip パスワードをデーターベースに保存する際はハッシュ化するのが当たり前なので、ハッシュ化されたパスワードのためのデータベーステーブルのカラム名には`password`を使うのが一般的です。 -今回は混乱しないように`HashedPass`という名前でカラムを作成しています。 +今回は混乱しないように`hashed_pass`という名前でカラムを作成しています。 ::: -## SignUpHandler の実装 +次に、マイグレーションを実行するために、`main.rs` と `repository.rs` を編集していきます。 -続いて、アカウントを作成するハンドラーである `SignUpHandler` を `handler.go` に実装していきましょう。 +### main.rs +```rs +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::try_from_default_env().unwrap_or("info".into())) + .init(); -```go -func (h *Handler) SignUpHandler(c echo.Context) error { // [!code ++] -} // [!code ++] + let app_state = repository::Repository::connect().await?; + app_state.migrate().await?; // [!code ++] + let app = handler::make_router(app_state).layer(TraceLayer::new_for_http()); + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await?; + + tracing::info!("listening on {}", listener.local_addr()?); + axum::serve(listener, app).await.unwrap(); + Ok(()) +} ``` -この `SignUpHandler` に以下のものを順番に実装していきます。 +### repository.rs +```rs +...(省略) +impl Repository { + pub async fn connect() -> anyhow::Result { + let options = get_options()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + Ok(Self { + pool, + //session_store: MySqlSessionStore::new(pool.clone()), + }) + } + pub async fn migrate(&self) -> anyhow::Result<()> { // [!code ++] + sqlx::migrate!("./migrations").run(&self.pool).await?; // [!code ++] + Ok(()) // [!code ++] + } // [!code ++] +} +...(省略) +``` -### 1. リクエストの受け取り +マイグレーションを実行するメソッド `migrate` を追加しました。 +これにより、データベースに接続した後 `0_create_table.sql` の内容が実行され、`users` テーブルが作成されます。 -`SignUpHandler` の外に以下の構造体を追加します。 +## signup の ハンドラ の実装 -```go -type LoginRequestBody struct { // [!code ++] - Username string `json:"username,omitempty" form:"username"` // [!code ++] - Password string `json:"password,omitempty" form:"password"` // [!code ++] +続いて、アカウントを作成するハンドラーである `sign_up` を `handler/auth.rs` に実装していきましょう。 + +ファイル `handler/auth.rs` を作成し、以下を記述してください。 + +```rs +pub async fn sign_up( // [!code ++] + State(state): State, // [!code ++] + Json(body): Json, // [!code ++] +) -> Result { // [!code ++] } // [!code ++] ``` -次に、`SignUpHandler`の中に以下を追加します。 +また、`handler.rs` に以下の行を追加してください。 -```go -func (h *Handler) SignUpHandler(c echo.Context) error { - // リクエストを受け取り、reqに格納する // [!code ++] - req := LoginRequestBody{} // [!code ++] - err := c.Bind(&req) // [!code ++] - if err != nil { // [!code ++] - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") // [!code ++] - } // [!code ++] -} +```rs +...(省略) +use crate::repository::Repository; + +mod auth; // [!code ++] +mod country; +...(省略) ``` -ここでは、req 変数に requestBody の json 情報を格納しています。 -`LoginRequestBody` 型を見れば分かる通り、ここには UserName と Password が格納されています。 +この `sign_up` ハンドラに以下のものを順番に実装していきます。 + +### 1. リクエストの受け取り + +`sign_up` ハンドラの外に以下の構造体を追加します。 + +```rs +#[derive(Deserialize)] // [!code ++] +pub struct SignUp { // [!code ++] + pub username: String, // [!code ++] + pub password: String, // [!code ++] +} // [!code ++] +``` + +`sign_up` ハンドラの body 変数に requestBody の json 情報が格納されます。 +`SignUp` 型を見れば分かる通り、ここには username と password が格納されています。 ### 2. リクエストの検証 -```go -func (h *Handler) SignUpHandler(c echo.Context) error { - // リクエストを受け取り、reqに格納する - req := LoginRequestBody{} - err := c.Bind(&req) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") - } - - // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) // [!code ++] - if req.Password == "" || req.Username == "" { // [!code ++] - return c.String(http.StatusBadRequest, "Username or Password is empty") // [!code ++] - } // [!code ++] +```rs +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) // [!code ++] + if body.username.is_empty() || body.password.is_empty() { // [!code ++] + return Err(StatusCode::BAD_REQUEST); // [!code ++] + } // [!code ++] } ``` @@ -168,163 +184,212 @@ func (h *Handler) SignUpHandler(c echo.Context) error { ### 3. アカウントの存在チェック -```go -func (h *Handler) SignUpHandler(c echo.Context) error { - (省略) - // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) - if req.Password == "" || req.Username == "" { - return c.String(http.StatusBadRequest, "Username or Password is empty") - } - - // 登録しようとしているユーザーが既にデータベース内に存在するかチェック// [!code ++] - var count int// [!code ++] - err = h.db.Get(&count, "SELECT COUNT(*) FROM users WHERE Username=?", req.Username)// [!code ++] - if err != nil {// [!code ++] - log.Println(err)// [!code ++] - return c.NoContent(http.StatusInternalServerError)// [!code ++] - }// [!code ++] - // 存在したら409 Conflictを返す// [!code ++] - if count > 0 {// [!code ++] - return c.String(http.StatusConflict, "Username is already used")// [!code ++] - }// [!code ++] -} -``` +ユーザーに関するデータベースの操作を、`repository/users.rs` に追加していきます。 -`"SELECT COUNT(*) FROM users WHERE Username=?", req.Username` で、指定された UserName を持つユーザーの数を見ます。 +ファイル `repository/users.rs` を作成し、以下を記述してください。 -結果は `count` 変数に格納されます。 +```rs +use super::Repository; // [!code ++] -もしすでに居た場合は、そのユーザーが存在しているので処理は受け付けず、 409 (Conflict) をレスポンスします。 +impl Repository { // [!code ++] + pub async fn is_exist_username(&self, username: String) -> sqlx::Result { // [!code ++] + let result = sqlx::query("SELECT * FROM users WHERE username = ?") // [!code ++] + .bind(&username) // [!code ++] + .fetch_optional(&self.pool) // [!code ++] + .await?; // [!code ++] + Ok(result.is_some()) // [!code ++] + } // [!code ++] +} // [!code ++] +``` -### 4. パスワードのハッシュ化 +また、`repository.rs` に以下の行を追加してください。 -ここまでは「リクエストを実行しても本当に問題がないか」を検証していました。 -ユーザーはまだ存在していなくて、パスワードとユーザー名がある事まで確認できれば、リクエストを処理できます。なのでここから処理を行っていきます。 +```rs +use sqlx::mysql::MySqlConnectOptions; +use sqlx::mysql::MySqlPool; +use std::env; -```go -func (h *Handler) SignUpHandler(c echo.Context) error { - (省略) - - // パスワードをハッシュ化する// [!code ++] - hashedPass, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost)// [!code ++] - // ハッシュ化に失敗したら500 InternalServerErrorを返す// [!code ++] - if err != nil {// [!code ++] - log.Println(err)// [!code ++] - return c.NoContent(http.StatusInternalServerError)// [!code ++] - }// [!code ++] -} +pub mod country; +pub mod users; // [!code ++] + +...(省略) ``` -まずはパスワードのハッシュ化です。 **パスワードは平文で保存してはいけません!** パスワードを DB に保管するときは、必ずハッシュ化をしましょう。 +`SELECT * FROM users WHERE username=?` で、指定された UserName を持つユーザーを取得します。 +このとき、`fetch_optional` を使うことにより、ユーザーを高々 1 つ取得し、`Option` 型で返されます。 + +次に、`sign_up` ハンドラに以下のコードを追加してください。 + +```rs +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) + if body.username.is_empty() || body.password.is_empty() { + return Err(StatusCode::BAD_REQUEST); + } + + // 登録しようとしているユーザーが既にデータベース内に存在したら409 Conflictを返す // [!code ++] + if let Ok(true) = state.is_exist_username(body.username.clone()).await { // [!code ++] + return Err(StatusCode::CONFLICT); // [!code ++] + } // [!code ++] +} +``` -:::info 参考: ソルトについて -ソルトという手法を用いることで、事前計算されたテーブルを使用する攻撃から守ることができます。 +もし同じ username を持つユーザーが存在した場合は処理を受け付けず、 409 (Conflict) をレスポンスします。 -今回は、`bcrypt`というライブラリがハッシュ化を行っています。 +### 4. ユーザーの作成 -参考: -::: - -`bcrypt`というのはいい感じにハッシュ化してくれるライブラリです。セキュリティに関わるものは自分で実装すると穴だらけになりやすいので、積極的にライブラリに頼りましょう。 +ここまでは「リクエストを実行しても本当に問題がないか」を検証していました。 +ユーザーはまだ存在していなくて、パスワードとユーザー名がある事まで確認できれば、リクエストを処理できます。なのでここから処理を行っていきます。 -### 5. ユーザーの作成 - -```go -func (h *Handler) SignUpHandler(c echo.Context) error { - (省略) - - // ユーザーを登録する// [!code ++] - _, err = h.db.Exec("INSERT INTO users (Username, HashedPass) VALUES (?, ?)", req.Username, hashedPass)// [!code ++] - // 登録に失敗したら500 InternalServerErrorを返す// [!code ++] - if err != nil {// [!code ++] - log.Println(err)// [!code ++] - return c.NoContent(http.StatusInternalServerError)// [!code ++] - }// [!code ++] - // 登録に成功したら201 Createdを返す// [!code ++] - return c.NoContent(http.StatusCreated)// [!code ++] +まずは、`username` を持つ users レコードをデータベースに追加しましょう。 +SQL のインテグレーションにて、`id INT NOT NULL PRIMARY KEY AUTO_INCREMENT` と指定しているため、自動でインクリメントされた `id` も同時に追加されます。 + +`repository/users.rs` に以下のコードを追加してください。 + +```rs +use super::Repository; + +impl Repository { + pub async fn is_exist_username(&self, username: String) -> sqlx::Result { + let result = sqlx::query("SELECT * FROM users WHERE username = ?") + .bind(&username) + .fetch_optional(&self.pool) + .await?; + Ok(result.is_some()) + } + + pub async fn create_user(&self, username: String) -> sqlx::Result { // [!code ++] + let result = sqlx::query("INSERT INTO users (username) VALUES (?)") // [!code ++] + .bind(&username) // [!code ++] + .execute(&self.pool) // [!code ++] + .await?; // [!code ++] + Ok(result.last_insert_id()) // [!code ++] + } // [!code ++] } ``` -`Username`, `HashedPassword` を持つ User レコードをデータベースに追加しましょう。 +`create_user` メソッドの戻り値として、追加されたユーザーの `id` を返しています。 + +また、`handler/auth.rs` に以下のコードを追加してください。 + +```rs +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) + if body.username.is_empty() || body.password.is_empty() { + return Err(StatusCode::BAD_REQUEST); + } + + // 登録しようとしているユーザーが既にデータベース内に存在したら409 Conflictを返す + if let Ok(true) = state.is_exist_username(body.username.clone()).await { + return Err(StatusCode::CONFLICT); + } + + // ユーザーを作成する // [!code ++] + let id = state // [!code ++] + .create_user(body.username.clone()) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] +} +``` -何かしらのエラーによって生成できなかった場合は err にその内容が詰め込まれます。 +何かしらのエラーによってユーザーを生成できなかった場合は Error が返されます。 ユーザーのリクエストは問題なく、ここでエラーが発生した場合はサーバー側で何かが発生したということなので、 500 (InternalServer Error) をレスポンスします。 ここで、どんなエラーが発生したかをユーザーに直接伝えるのはセキュリティの観点から △ です。 ログで出力するだけにして、ユーザー側には 500 という情報だけ渡しましょう。 -もし err がなければ、それはうまく成功したということです。 201 (Created) をレスポンスしましょう! +### 5. パスワードのハッシュ化と保存 -## 完成! -これで実装は終わりです。すべてを実装したら、以下のようになります。 +次にパスワードのハッシュ化です。 **パスワードは平文で保存してはいけません!** パスワードを DB に保管するときは、必ずハッシュ化をしましょう。 + +`repository/users.rs` に以下のコードを追加してください。 + +```rs +use super::Repository; + +impl Repository { + ...(省略) + + pub async fn save_user_password(&self, id: i32, password: String) -> anyhow::Result<()> { // [!code ++] + let hash = bcrypt::hash(password, bcrypt::DEFAULT_COST)?; // [!code ++] + + sqlx::query("INSERT INTO user_passwords (id, hashed_pass) VALUES (?, ?)") // [!code ++] + .bind(id) // [!code ++] + .bind(hash) // [!code ++] + .execute(&self.pool) // [!code ++] + .await?; // [!code ++] -```go -type LoginRequestBody struct { - Username string `json:"username,omitempty" form:"username"` - Password string `json:"password,omitempty" form:"password"` + Ok(()) // [!code ++] + } // [!code ++] } +``` + +また、`handler/auth.rs` に以下のコードを追加してください。 + +```rs +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + ...(省略) + + // ユーザーを作成する + let id = state + .create_user(body.username.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // パスワードを保存する // [!code ++] + state // [!code ++] + .save_user_password(id as i32, body.password.clone()) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] -func (h *Handler) SignUpHandler(c echo.Context) error { - // リクエストを受け取り、reqに格納する - req := LoginRequestBody{} - err := c.Bind(&req) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") - } - - // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) - if req.Password == "" || req.Username == "" { - return c.String(http.StatusBadRequest, "Username or Password is empty") - } - - // 登録しようとしているユーザーが既にデータベース内に存在するかチェック - var count int - err = h.db.Get(&count, "SELECT COUNT(*) FROM users WHERE Username=?", req.Username) - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - // 存在したら409 Conflictを返す - if count > 0 { - return c.String(http.StatusConflict, "Username is already used") - } - - // パスワードをハッシュ化する - hashedPass, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) - // ハッシュ化に失敗したら500 InternalServerErrorを返す - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - - // ユーザーを登録する - _, err = h.db.Exec("INSERT INTO users (Username, HashedPass) VALUES (?, ?)", req.Username, hashedPass) - // 登録に失敗したら500 InternalServerErrorを返す - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - // 登録に成功したら201 Createdを返す - return c.NoContent(http.StatusCreated) + Ok(StatusCode::CREATED) // [!code ++] } ``` -最後に、`main.go` に、先ほど書いたハンドラーを追加しましょう。 +:::info 参考: ソルトについて +ソルトという手法を用いることで、事前計算されたテーブルを使用する攻撃から守ることができます。 + +今回は、`bcrypt`というライブラリがハッシュ化を行っています。 + +参考: +::: + +`bcrypt`というのはいい感じにハッシュ化してくれるライブラリです。セキュリティに関わるものは自分で実装すると穴だらけになりやすいので、積極的にライブラリに頼りましょう。 + +全ての操作でエラーが無かったら、最後に 201 (Created) をレスポンスしましょう! + +## 完成! +これで実装は終わりです。すべてを実装したら、以下のようになります。 + +::: code-group +<<<@/chapter2/section1/src/1_account/auth.rs{rs:line-numbers}[auth.rs] +<<<@/chapter2/section1/src/1_account/users.rs{rs:line-numbers}[users.rs] +::: -```go -func main(){ - (省略) - h := handler.NewHandler(db) - e := echo.New() +最後に、`handler.rs` に、先ほど書いたハンドラーを追加しましょう。 - e.POST("/signup", h.SignUpHandler) // [!code ++] +```rs +pub fn make_router(app_state: Repository) -> Router { + let city_router = Router::new() + .route("/cities/:city_name", get(country::get_city_handler)) + .route("/cities", post(country::post_city_handler)); - e.GET("/cities/:cityName", h.GetCityInfoHandler) - e.POST("/cities", h.PostCityHandler) + let auth_router = Router::new().route("/signup", post(auth::sign_up)); // [!code ++] - err = e.Start(":8080") - (省略) + Router::new() + .nest("/", city_router) + .nest("/", auth_router) // [!code ++] + .with_state(app_state) } ``` diff --git a/docs/chapter2/section1/src/0_create-table.sql b/docs/chapter2/section1/src/0_create-table.sql new file mode 100644 index 00000000..26bdd418 --- /dev/null +++ b/docs/chapter2/section1/src/0_create-table.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS users ( + id INT NOT NULL PRIMARY KEY AUTO_INCREMENT, + username VARCHAR(255) NOT NULL +); + +CREATE TABLE IF NOT EXISTS user_passwords ( + id VARCHAR(255) NOT NULL PRIMARY KEY, + hashed_pass VARCHAR(255) NOT NULL +); \ No newline at end of file diff --git a/docs/chapter2/section1/src/1_account/auth.rs b/docs/chapter2/section1/src/1_account/auth.rs new file mode 100644 index 00000000..47767ea7 --- /dev/null +++ b/docs/chapter2/section1/src/1_account/auth.rs @@ -0,0 +1,39 @@ +use axum::{extract::State, http::StatusCode, Json}; +use serde::Deserialize; + +use crate::repository::Repository; + +#[derive(Deserialize)] +pub struct SignUp { + pub username: String, + pub password: String, +} + +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) + if body.username.is_empty() || body.password.is_empty() { + return Err(StatusCode::BAD_REQUEST); + } + + // 登録しようとしているユーザーが既にデータベース内に存在したら409 Conflictを返す + if let Ok(true) = state.is_exist_username(body.username.clone()).await { + return Err(StatusCode::CONFLICT); + } + + // ユーザーを作成する + let id = state + .create_user(body.username.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // パスワードを保存する + state + .save_user_password(id as i32, body.password.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + Ok(StatusCode::CREATED) +} diff --git a/docs/chapter2/section1/src/1_account/users.rs b/docs/chapter2/section1/src/1_account/users.rs new file mode 100644 index 00000000..db0c43b3 --- /dev/null +++ b/docs/chapter2/section1/src/1_account/users.rs @@ -0,0 +1,31 @@ +use super::Repository; + +impl Repository { + pub async fn is_exist_username(&self, username: String) -> sqlx::Result { + let result = sqlx::query("SELECT * FROM users WHERE username = ?") + .bind(&username) + .fetch_optional(&self.pool) + .await?; + Ok(result.is_some()) + } + + pub async fn create_user(&self, username: String) -> sqlx::Result { + let result = sqlx::query("INSERT INTO users (username) VALUES (?)") + .bind(&username) + .execute(&self.pool) + .await?; + Ok(result.last_insert_id()) + } + + pub async fn save_user_password(&self, id: i32, password: String) -> anyhow::Result<()> { + let hash = bcrypt::hash(password, bcrypt::DEFAULT_COST)?; + + sqlx::query("INSERT INTO user_passwords (id, hashed_pass) VALUES (?, ?)") + .bind(id) + .bind(hash) + .execute(&self.pool) + .await?; + + Ok(()) + } +} diff --git a/docs/chapter2/section1/src/first/handler.rs b/docs/chapter2/section1/src/first/handler.rs index ccc592a5..1e898c16 100644 --- a/docs/chapter2/section1/src/first/handler.rs +++ b/docs/chapter2/section1/src/first/handler.rs @@ -4,6 +4,7 @@ use axum::{ }; use crate::repository::Repository; + mod country; pub fn make_router(app_state: Repository) -> Router { diff --git a/docs/chapter2/section1/src/first/repository.rs b/docs/chapter2/section1/src/first/repository.rs index c2b171a0..797ad74d 100644 --- a/docs/chapter2/section1/src/first/repository.rs +++ b/docs/chapter2/section1/src/first/repository.rs @@ -1,4 +1,3 @@ -//use async_sqlx_session::MySqlSessionStore; use sqlx::mysql::MySqlConnectOptions; use sqlx::mysql::MySqlPool; use std::env; From c74b3ca659ce08aa0068863b3de427810c8d81ca Mon Sep 17 00:00:00 2001 From: kenken714 Date: Sun, 10 Nov 2024 04:48:33 +0900 Subject: [PATCH 37/57] feat: update images --- .../section1/images/3/database1-user.png | Bin 37452 -> 12359 bytes .../section1/images/3/postman2-signup.png | Bin 31151 -> 38443 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/chapter2/section1/images/3/database1-user.png b/docs/chapter2/section1/images/3/database1-user.png index 612765c2cb0e3ae4eaf1512104084461e05bd0ce..c56a61ede03f0fb18094840750ec74cf8aa6cf80 100644 GIT binary patch literal 12359 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 W`te+6Kr_%&15%V%ldF<35B(qACLg!} literal 37452 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 literal 31151 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
j%aaEc6M$KGd9yEYM>G4$kH6{X4~-unF;d)uFn


From 0bdcb448fa4fe1072580bc825ad299194f83e845 Mon Sep 17 00:00:00 2001
From: kenken714 
Date: Mon, 11 Nov 2024 00:12:17 +0900
Subject: [PATCH 38/57] feat: impl login handler

---
 docs/chapter2/section1/1_account.md           |   3 +
 docs/chapter2/section1/2_session.md           | 354 +++++++++++-------
 docs/chapter2/section1/src/1_account/main.rs  |  21 ++
 .../section1/src/1_account/repository.rs      |  44 +++
 docs/chapter2/section1/src/2_session/auth.rs  |  81 ++++
 .../section1/src/2_session/handler.go         | 167 ---------
 docs/chapter2/section1/src/2_session/main.go  |  75 ----
 .../section1/src/2_session/repository.rs      |  53 +++
 docs/chapter2/section1/src/2_session/users.rs |  49 +++
 .../section1/src/2_session/users_session.rs   |  26 ++
 10 files changed, 493 insertions(+), 380 deletions(-)
 create mode 100644 docs/chapter2/section1/src/1_account/main.rs
 create mode 100644 docs/chapter2/section1/src/1_account/repository.rs
 create mode 100644 docs/chapter2/section1/src/2_session/auth.rs
 delete mode 100644 docs/chapter2/section1/src/2_session/handler.go
 delete mode 100644 docs/chapter2/section1/src/2_session/main.go
 create mode 100644 docs/chapter2/section1/src/2_session/repository.rs
 create mode 100644 docs/chapter2/section1/src/2_session/users.rs
 create mode 100644 docs/chapter2/section1/src/2_session/users_session.rs

diff --git a/docs/chapter2/section1/1_account.md b/docs/chapter2/section1/1_account.md
index 97c8b362..0f91725b 100644
--- a/docs/chapter2/section1/1_account.md
+++ b/docs/chapter2/section1/1_account.md
@@ -374,6 +374,8 @@ pub async fn sign_up(
 ::: code-group
 <<<@/chapter2/section1/src/1_account/auth.rs{rs:line-numbers}[auth.rs]
 <<<@/chapter2/section1/src/1_account/users.rs{rs:line-numbers}[users.rs]
+<<<@/chapter2/section1/src/1_account/main.rs{rs:line-numbers}[main.rs]
+<<<@/chapter2/section1/src/1_account/repository.rs{rs:line-numbers}[repository.rs]
 :::
 
 最後に、`handler.rs` に、先ほど書いたハンドラーを追加しましょう。
@@ -413,6 +415,7 @@ $ task db
 ```sql
 mysql> USE world;
 mysql> SELECT * FROM users;
+mysql> SELECT * FROM user_passwords;
 ```
 ![](images/3/database1-user.png)
 
diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md
index 46bab42d..6ddd2e33 100644
--- a/docs/chapter2/section1/2_session.md
+++ b/docs/chapter2/section1/2_session.md
@@ -1,182 +1,260 @@
 # セッション管理機構の実装
 
 ## セッションストアを設定する
-`main.go`に以下を追加しましょう。
-```go
-func main() {
-	(省略)
-	// usersテーブルが存在しなかったら、usersテーブルを作成する
-	_, err = db.Exec("CREATE TABLE IF NOT EXISTS users (Username VARCHAR(255) PRIMARY KEY, HashedPass VARCHAR(255))")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// セッションの情報を記憶するための場所をデータベース上に設定 // [!code ++]
-	store, err := mysqlstore.NewMySQLStoreFromConnection(db.DB, "sessions", "/", 60*60*24*14, []byte("secret-token")) // [!code ++]
-	if err != nil { // [!code ++]
-		log.Fatal(err) // [!code ++]
-	} // [!code ++]
-
-	h := handler.NewHandler(db)
-	e := echo.New()
-	e.Use(middleware.Logger())       // ログを取るミドルウェアを追加 // [!code ++]
-	e.Use(session.Middleware(store)) // セッション管理のためのミドルウェアを追加 // [!code ++]
-
-	e.POST("/signup", h.SignUpHandler)
-	(省略)
+`repository.rs`に以下を追加しましょう。
+```rs
+use async_sqlx_session::MySqlSessionStore; // [!code ++]
+use sqlx::mysql::MySqlConnectOptions;
+use sqlx::mysql::MySqlPool;
+use std::env;
+
+pub mod country;
+pub mod users;
+
+#[derive(Clone)]
+pub struct Repository {
+    pool: MySqlPool,
+    session_store: MySqlSessionStore, // [!code ++]
 }
-```
-これらはセッションストアの設定です。
 
-最初に、セッションの情報を記憶するための場所をデータベース上に設定します。
+impl Repository {
+    pub async fn connect() -> anyhow::Result {
+        let options = get_options()?;
+        let pool = sqlx::MySqlPool::connect_with(options).await?;
 
-この仕組みを使用するために、 `e.Use(session.Middleware(store))` を含めてセッションストアを使ってね〜、って echo に命令しています。
+        let session_store = // [!code ++]
+            MySqlSessionStore::from_client(pool.clone()).with_table_name("user_sessions"); // [!code ++]
 
-`e.Use(middleware.Logger())` は文字通りログを取るものです。ついでに入れましょう。
+        Ok(Self {
+            pool,
+            session_store, // [!code ++]
+        })
+    }
 
-:::tip
-`"secret-token"`は、暗号化/復号化の際に使われる秘密鍵です。  
-実際に運用するときはこの"secret-token"を独自の値にしてください。環境変数などで管理するのが良いでしょう。
-:::
+    pub async fn migrate(&self) -> anyhow::Result<()> {
+        sqlx::migrate!("./migrations").run(&self.pool).await?;
+        Ok(())
+    }
+}
+...(省略)
+```
+
+これらはセッションストアの設定です。
+セッションの情報を記憶するための場所をデータベース上に設定して、`session_store` からアクセスできるようにしています。
 
 ## LoginHandler の実装
-続いて、`LoginHandler` を `handler.go` に実装していきましょう。
+続いて、`login` ハンドラを `handler/auth.rs` に実装していきましょう。
 
-```go
-func (h *Handler) LoginHandler(c echo.Context) error { // [!code ++]
+```rs
+pub async fn login( // [!code ++]
+    State(state): State, // [!code ++]
+    Json(body): Json, // [!code ++]
+) -> Result { // [!code ++]
 } // [!code ++]
 ```
-`LoginHandler` の外に以下の構造体を追加します。
-```go
-type User struct { // [!code ++]
-	Username   string `json:"username,omitempty"  db:"Username"` // [!code ++]
-	HashedPass string `json:"-"  db:"HashedPass"` // [!code ++]
+
+`login` ハンドラの外に以下の構造体を追加します。
+```rs
+#[derive(Deserialize)] // [!code ++]
+pub struct Login { // [!code ++]
+    pub username: String, // [!code ++]
+    pub password: String, // [!code ++]
 } // [!code ++]
 ```
-`LoginHandler` を実装していきます。
-```go
-func (h *Handler) LoginHandler(c echo.Context) error {
-	// リクエストを受け取り、reqに格納する // [!code ++]
-	var req LoginRequestBody // [!code ++]
-	err := c.Bind(&req) // [!code ++]
-	if err != nil { // [!code ++]
-		return c.String(http.StatusBadRequest, "bad request body") // [!code ++]
-	} // [!code ++]
 
-	// バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) // [!code ++]
-	if req.Password == "" || req.Username == "" { // [!code ++]
-		return c.String(http.StatusBadRequest, "Username or Password is empty") // [!code ++]
-	} // [!code ++]
-
-	// データベースからユーザーを取得する // [!code ++]
-	user := User{} // [!code ++]
-	err = h.db.Get(&user, "SELECT * FROM users WHERE username=?", req.Username) // [!code ++]
-	if err != nil { // [!code ++]
-		if errors.Is(err, sql.ErrNoRows) { // [!code ++]
-			return c.NoContent(http.StatusUnauthorized) // [!code ++]
-		} else { // [!code ++]
-			log.Println(err) // [!code ++]
-			return c.NoContent(http.StatusInternalServerError) // [!code ++]
-		} // [!code ++]
-	} // [!code ++]
+`login` ハンドラの中身を実装する前に、必要になるデータベース操作のメソッドを追加します。ここで必要になるのは以下の 2 つです。
+
+- `username` から `id` を取得するメソッド
+- `id` と `password` の組が登録されているものと一致するかを確認するメソッド
+
+この 2 つを `repository/users.rs` に追加します。
+```rs
+use super::Repository;
+
+impl Repository {
+    pub async fn is_exist_username(&self, username: String) -> sqlx::Result {
+        ...(省略)
+    }
+
+    pub async fn create_user(&self, username: String) -> sqlx::Result {
+        ...(省略)
+    }
+
+    pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { // [!code ++]
+        let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?") // [!code ++]
+            .bind(&username) // [!code ++]
+            .fetch_one(&self.pool) // [!code ++]
+            .await?; // [!code ++]
+        Ok(result) // [!code ++]
+    } // [!code ++]
+
+    pub async fn save_user_password(&self, id: i32, password: String) -> anyhow::Result<()> {
+        ...(省略)
+    }
+
+    pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result { // [!code ++]
+        let hash = // [!code ++]
+            sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?") // [!code ++]
+                .bind(id) // [!code ++]
+                .fetch_one(&self.pool) // [!code ++]
+                .await?; // [!code ++]
+
+        Ok(bcrypt::verify(password, &hash)?) // [!code ++]
+    } // [!code ++]
 }
 ```
-req への代入は signUpHandler と同じです。UserName と Password が入っているかも確認しましょう。
 
-パスワードの一致チェックをするために、データベースからユーザーを取得してきましょう。
+データベースに保存されているパスワードはハッシュ化されています。
 
-ユーザーが存在しなかった場合は `sql.ErrNoRows` というエラーが返ってきます。
+ハッシュ化は不可逆な処理なので、ハッシュ化されたものから原文を調べることはできません。確認する際はもらったパスワードをハッシュ化することで行います。
+`bcrypt::verify` によってパスワードの検証ができます。
+
+`handler/auth.rs` に戻り、`login` ハンドラを実装していきます。
+
+```rs
+pub async fn login( // [!code ++]
+    State(state): State, // [!code ++]
+    Json(body): Json, // [!code ++]
+) -> Result { // [!code ++]
+    // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) // [!code ++]
+    if body.username.is_empty() || body.password.is_empty() { // [!code ++]
+        return Err(StatusCode::BAD_REQUEST); // [!code ++]
+    } // [!code ++]
+
+    // データベースからユーザーを取得する // [!code ++]
+    let id = state // [!code ++]
+        .get_user_id_by_name(body.username.clone()) // [!code ++]
+        .await // [!code ++]
+        .map_err(|e| match e { // [!code ++]
+            sqlx::Error::RowNotFound => StatusCode::UNAUTHORIZED, // [!code ++]
+            _ => StatusCode::INTERNAL_SERVER_ERROR, // [!code ++]
+        })?; // [!code ++]
+} // [!code ++]
+```
+
+ユーザーが存在しなかった場合は `sqlx::Error::RowNotFound` というエラーが返ってきます。
 もしそのエラーなら 401 (Unauthorized)、そうでなければ 500 (Internal Server Error) です。
 もし 404 (Not Found) とすると、「このユーザーはパスワードが違うのではなく存在しないんだ」という事がわかってしまい(このユーザーは存在していてパスワードは違う事も分かります)、セキュリティ上のリスクに繋がります。
 
-:::tip
-ここで、エラーチェックは基本的に errors.Is を使いましょう。     
-参考: 
-:::
-```go
-func (h *Handler) LoginHandler(c echo.Context) error {
-	(省略)
-	// データベースからユーザーを取得する
-	user := User{}
-	err = h.db.Get(&user, "SELECT * FROM users WHERE username=?", req.Username)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return c.NoContent(http.StatusUnauthorized)
-		} else {
-			log.Println(err)
-			return c.NoContent(http.StatusInternalServerError)
-		}
-	}
-	// パスワードが一致しているかを確かめる // [!code ++]
-	err = bcrypt.CompareHashAndPassword([]byte(user.HashedPass), []byte(req.Password)) // [!code ++]
-	if err != nil { // [!code ++]
-		if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) { // [!code ++]
-			return c.NoContent(http.StatusUnauthorized) // [!code ++]
-		} else { // [!code ++]
-			return c.NoContent(http.StatusInternalServerError) // [!code ++]
-		} // [!code ++]
-	} // [!code ++]
+```rs
+pub async fn login(
+    State(state): State,
+    Json(body): Json,
+) -> Result {
+    // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す)
+    if body.username.is_empty() || body.password.is_empty() {
+        return Err(StatusCode::BAD_REQUEST);
+    }
+
+    // データベースからユーザーを取得する
+    let id = state
+        .get_user_id_by_name(body.username.clone())
+        .await
+        .map_err(|e| match e {
+            sqlx::Error::RowNotFound => StatusCode::UNAUTHORIZED,
+            _ => StatusCode::INTERNAL_SERVER_ERROR,
+        })?;
+
+    // パスワードが一致しているかを確かめる // [!code ++]
+    if !state // [!code ++]
+        .verify_user_password(id, body.password.clone()) // [!code ++]
+        .await // [!code ++]
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? // [!code ++]
+    { // [!code ++]
+        return Err(StatusCode::UNAUTHORIZED); // [!code ++]
+    } // [!code ++]
 }
 ```
 
-データベースに保存されているパスワードはハッシュ化されています。
+データベースでエラーが起きた場合や、検証の操作に失敗した場合は 500 (Internal Server Error), パスワードが間違っていた場合 401 (Unauthorized) を返却しています。
+
+```rs
+pub async fn login(
+    State(state): State,
+    Json(body): Json,
+) -> Result {
+    ...(省略)
+    
+    // パスワードが一致しているかを確かめる
+    if !state
+        .verify_user_password(id, body.password.clone())
+        .await
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?
+    {
+        return Err(StatusCode::UNAUTHORIZED);
+    }
+
+    // セッションストアに登録する // [!code ++]
+    state // [!code ++]
+        .create_user_session(id.to_string()) // [!code ++]
+        .await // [!code ++]
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++]
+
+    Ok(StatusCode::OK) // [!code ++]
+}
+```
 
-ハッシュ化は不可逆な処理なので、ハッシュ化されたものから原文を調べることはできません。確認する際はもらったパスワードをハッシュ化することで行います。
+`id` をセッションストアに登録します。
 
-これは `bcrypt.CompareHashAndPassword` が行ってくれるのでそれに乗っかりましょう。
+ここで用いる、セッションストアに登録するメソッド `create_user_session` を実装していきます。
 
-- この関数はハッシュが一致すれば返り値が `nil` となります
-- 一致しない場合、 `bcrypt.ErrMismatchedHashAndPassword` が返ってきます
-- 処理中にこれ以外の問題が発生した場合は、返り値はエラー型の何かです
+ファイル `repository/users_session.rs` を作成し、以下を記述してください。
 
-従って、これらのエラーの内容に応じて、 500 (Internal Server Error), 401 (Unauthorized) を返却するか、処理を続行するかを選択していきます。
-```go
-func (h *Handler) LoginHandler(c echo.Context) error {
-	(省略)
-	// パスワードが一致しているかを確かめる
-	err = bcrypt.CompareHashAndPassword([]byte(user.HashedPass), []byte(req.Password))
-	if err != nil {
-		if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
-			return c.NoContent(http.StatusUnauthorized)
-		} else {
-			return c.NoContent(http.StatusInternalServerError)
-		}
-	}
-
-	// セッションストアに登録する // [!code ++]
-	sess, err := session.Get("sessions", c) // [!code ++]
-	if err != nil { // [!code ++]
-		log.Println(err) // [!code ++]
-		return c.String(http.StatusInternalServerError, "something wrong in getting session") // [!code ++]
-	} // [!code ++]
-	sess.Values["userName"] = req.Username // [!code ++]
-	sess.Save(c.Request(), c.Response()) // [!code ++]
+```rs
+use anyhow::Context; // [!code ++]
+use async_session::{Session, SessionStore}; // [!code ++]
 
-	return c.NoContent(http.StatusOK) // [!code ++]
-}
+use super::Repository; // [!code ++]
+
+impl Repository { // [!code ++]
+    pub async fn create_user_session(&self, user_id: String) -> anyhow::Result<()> { // [!code ++]
+        let mut session = Session::new(); // [!code ++]
+
+        session // [!code ++]
+            .insert("user_id", user_id) // [!code ++]
+            .with_context(|| "Failed to insert user_id")?; // [!code ++]
+
+        let result = self // [!code ++]
+            .session_store // [!code ++]
+            .store_session(session) // [!code ++]
+            .await // [!code ++]
+            .with_context(|| "Failed to store session") // [!code ++]
+            .with_context(|| "Failed to store session")?; // [!code ++]
+
+        match result { // [!code ++]
+            Some(_) => Ok(()), // [!code ++]
+            None => Err(anyhow::anyhow!("Failed to store session")), // [!code ++]
+        } // [!code ++]
+    } // [!code ++]
+} // [!code ++]
 ```
-セッションストアに登録します。
-セッションの `userName` という値にそのユーザーの名前を格納していることは覚えておきましょう。
 
-ここまで書いたら、 `LoginHandler` を使えるようにしましょう。
+ここまで書いたら、 `login` ハンドラを使えるようにしましょう。
+`handler.rs` に以下を追加してください。
 
-```go
-func main() {
-	(省略)
-	e.Use(session.Middleware(store)) // セッション管理のためのミドルウェアを追加
+```rs
+pub fn make_router(app_state: Repository) -> Router {
+    let city_router = Router::new()
+        .route("/cities/:city_name", get(country::get_city_handler))
+        .route("/cities", post(country::post_city_handler));
 
-	e.POST("/signup", h.SignUpHandler)
-	e.POST("/login", h.LoginHandler) // [!code ++]
+    let auth_router = Router::new()
+        .route("/signup", post(auth::sign_up))
+        .route("/login", post(auth::login)); // [!code ++]
 
-	e.GET("/cities/:cityName", h.GetCityInfoHandler)
-	(省略)
+    Router::new()
+        .nest("/", city_router)
+        .nest("/", auth_router)
+        .with_state(app_state)
 }
 ```
 
 :::details ここまでの全体像
 ::: code-group
-<<<@/chapter2/section1/src/2_session/main.go{go:line-numbers}[main.go]
-<<<@/chapter2/section1/src/2_session/handler.go{go:line-numbers}[handler.go]
+<<<@/chapter2/section1/src/2_session/auth.rs{rs:line-numbers}[auth.rs]
+<<<@/chapter2/section1/src/2_session/users.rs{rs:line-numbers}[users.rs]
+<<<@/chapter2/section1/src/2_session/users_session.rs{rs:line-numbers}[users_session.rs]
+<<<@/chapter2/section1/src/2_session/repository.rs{rs:line-numbers}[repository.rs]
 :::
 
 ## userAuthMiddleware の実装
diff --git a/docs/chapter2/section1/src/1_account/main.rs b/docs/chapter2/section1/src/1_account/main.rs
new file mode 100644
index 00000000..8823e79b
--- /dev/null
+++ b/docs/chapter2/section1/src/1_account/main.rs
@@ -0,0 +1,21 @@
+use tower_http::trace::TraceLayer;
+use tracing_subscriber::EnvFilter;
+
+mod handler;
+mod repository;
+
+#[tokio::main]
+async fn main() -> anyhow::Result<()> {
+    tracing_subscriber::fmt()
+        .with_env_filter(EnvFilter::try_from_default_env().unwrap_or("info".into()))
+        .init();
+
+    let app_state = repository::Repository::connect().await?;
+    app_state.migrate().await?;
+    let app = handler::make_router(app_state).layer(TraceLayer::new_for_http());
+    let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await?;
+
+    tracing::info!("listening on {}", listener.local_addr()?);
+    axum::serve(listener, app).await.unwrap();
+    Ok(())
+}
diff --git a/docs/chapter2/section1/src/1_account/repository.rs b/docs/chapter2/section1/src/1_account/repository.rs
new file mode 100644
index 00000000..f7d595d0
--- /dev/null
+++ b/docs/chapter2/section1/src/1_account/repository.rs
@@ -0,0 +1,44 @@
+use sqlx::mysql::MySqlConnectOptions;
+use sqlx::mysql::MySqlPool;
+use std::env;
+
+pub mod country;
+pub mod users;
+
+#[derive(Clone)]
+pub struct Repository {
+    pool: MySqlPool,
+}
+
+impl Repository {
+    pub async fn connect() -> anyhow::Result {
+        let options = get_options()?;
+        let pool = sqlx::MySqlPool::connect_with(options).await?;
+        Ok(Self {
+            pool,
+        })
+    }
+    pub async fn migrate(&self) -> anyhow::Result<()> {
+        sqlx::migrate!("./migrations").run(&self.pool).await?;
+        Ok(())
+    }
+}
+
+fn get_options() -> anyhow::Result {
+    let host = env::var("DB_HOSTNAME")?;
+    let port = env::var("DB_PORT")?.parse()?;
+    let username = env::var("DB_USERNAME")?;
+    let password = env::var("DB_PASSWORD")?;
+    let database = env::var("DB_DATABASE")?;
+    let timezone = Some(String::from("Asia/Tokyo"));
+    let collation = String::from("utf8mb4_unicode_ci");
+
+    Ok(MySqlConnectOptions::new()
+        .host(&host)
+        .port(port)
+        .username(&username)
+        .password(&password)
+        .database(&database)
+        .timezone(timezone)
+        .collation(&collation))
+}
diff --git a/docs/chapter2/section1/src/2_session/auth.rs b/docs/chapter2/section1/src/2_session/auth.rs
new file mode 100644
index 00000000..1792f136
--- /dev/null
+++ b/docs/chapter2/section1/src/2_session/auth.rs
@@ -0,0 +1,81 @@
+use axum::{extract::State, http::StatusCode, Json};
+use serde::Deserialize;
+
+use crate::repository::Repository;
+
+#[derive(Deserialize)]
+pub struct SignUp {
+    pub username: String,
+    pub password: String,
+}
+
+pub async fn sign_up(
+    State(state): State,
+    Json(body): Json,
+) -> Result {
+    // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す)
+    if body.username.is_empty() || body.password.is_empty() {
+        return Err(StatusCode::BAD_REQUEST);
+    }
+
+    // 登録しようとしているユーザーが既にデータベース内に存在したら409 Conflictを返す
+    if let Ok(true) = state.is_exist_username(body.username.clone()).await {
+        return Err(StatusCode::CONFLICT);
+    }
+
+    // ユーザーを作成する
+    let id = state
+        .create_user(body.username.clone())
+        .await
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
+
+    // パスワードを保存する
+    state
+        .save_user_password(id as i32, body.password.clone())
+        .await
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
+
+    Ok(StatusCode::CREATED)
+}
+
+#[derive(Deserialize)]
+pub struct Login {
+    pub username: String,
+    pub password: String,
+}
+
+pub async fn login(
+    State(state): State,
+    Json(body): Json,
+) -> Result {
+    // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す)
+    if body.username.is_empty() || body.password.is_empty() {
+        return Err(StatusCode::BAD_REQUEST);
+    }
+
+    // データベースからユーザーを取得する
+    let id = state
+        .get_user_id_by_name(body.username.clone())
+        .await
+        .map_err(|e| match e {
+            sqlx::Error::RowNotFound => StatusCode::UNAUTHORIZED,
+            _ => StatusCode::INTERNAL_SERVER_ERROR,
+        })?;
+
+    // パスワードが一致しているかを確かめる
+    if !state
+        .verify_user_password(id, body.password.clone())
+        .await
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?
+    {
+        return Err(StatusCode::UNAUTHORIZED);
+    }
+
+    // セッションストアに登録する
+    state
+        .create_user_session(id.to_string())
+        .await
+        .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?;
+
+    Ok(StatusCode::OK)
+}
diff --git a/docs/chapter2/section1/src/2_session/handler.go b/docs/chapter2/section1/src/2_session/handler.go
deleted file mode 100644
index ad0cbbe8..00000000
--- a/docs/chapter2/section1/src/2_session/handler.go
+++ /dev/null
@@ -1,167 +0,0 @@
-package handler
-
-import (
-	"database/sql"
-	"errors"
-	"github.com/jmoiron/sqlx"
-	"github.com/labstack/echo-contrib/session"
-	"github.com/labstack/echo/v4"
-	"golang.org/x/crypto/bcrypt"
-	"log"
-	"net/http"
-)
-
-type Handler struct {
-	db *sqlx.DB
-}
-
-func NewHandler(db *sqlx.DB) *Handler {
-	return &Handler{db: db}
-}
-
-type City struct {
-	ID          int            `json:"id,omitempty"  db:"ID"`
-	Name        sql.NullString `json:"name,omitempty"  db:"Name"`
-	CountryCode sql.NullString `json:"countryCode,omitempty"  db:"CountryCode"`
-	District    sql.NullString `json:"district,omitempty"  db:"District"`
-	Population  sql.NullInt64  `json:"population,omitempty"  db:"Population"`
-}
-
-type LoginRequestBody struct {
-	Username string `json:"username,omitempty" form:"username"`
-	Password string `json:"password,omitempty" form:"password"`
-}
-
-type User struct {
-	Username   string `json:"username,omitempty"  db:"Username"`
-	HashedPass string `json:"-"  db:"HashedPass"`
-}
-
-func (h *Handler) SignUpHandler(c echo.Context) error {
-	// リクエストを受け取り、reqに格納する
-	req := LoginRequestBody{}
-	err := c.Bind(&req)
-	if err != nil {
-		return echo.NewHTTPError(http.StatusBadRequest, "bad request body")
-	}
-
-	// バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す)
-	if req.Password == "" || req.Username == "" {
-		return c.String(http.StatusBadRequest, "Username or Password is empty")
-	}
-
-	// 登録しようとしているユーザーが既にデータベース内に存在するかチェック
-	var count int
-	err = h.db.Get(&count, "SELECT COUNT(*) FROM users WHERE Username=?", req.Username)
-	if err != nil {
-		log.Println(err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-	// 存在したら409 Conflictを返す
-	if count > 0 {
-		return c.String(http.StatusConflict, "Username is already used")
-	}
-
-	// パスワードをハッシュ化する
-	hashedPass, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost)
-	// ハッシュ化に失敗したら500 InternalServerErrorを返す
-	if err != nil {
-		log.Println(err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-
-	// ユーザーを登録する
-	_, err = h.db.Exec("INSERT INTO users (Username, HashedPass) VALUES (?, ?)", req.Username, hashedPass)
-	// 登録に失敗したら500 InternalServerErrorを返す
-	if err != nil {
-		log.Println(err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-	// 登録に成功したら201 Createdを返す
-	return c.NoContent(http.StatusCreated)
-}
-
-func (h *Handler) LoginHandler(c echo.Context) error {
-	// リクエストを受け取り、reqに格納する
-	var req LoginRequestBody
-	err := c.Bind(&req)
-	if err != nil {
-		return c.String(http.StatusBadRequest, "bad request body")
-	}
-
-	// バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す)
-	if req.Password == "" || req.Username == "" {
-		return c.String(http.StatusBadRequest, "Username or Password is empty")
-	}
-
-	// データベースからユーザーを取得する
-	user := User{}
-	err = h.db.Get(&user, "SELECT * FROM users WHERE username=?", req.Username)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return c.NoContent(http.StatusUnauthorized)
-		} else {
-			log.Println(err)
-			return c.NoContent(http.StatusInternalServerError)
-		}
-	}
-	// パスワードが一致しているかを確かめる
-	err = bcrypt.CompareHashAndPassword([]byte(user.HashedPass), []byte(req.Password))
-	if err != nil {
-		if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) {
-			return c.NoContent(http.StatusUnauthorized)
-		} else {
-			return c.NoContent(http.StatusInternalServerError)
-		}
-	}
-
-	// セッションストアに登録する
-	sess, err := session.Get("sessions", c)
-	if err != nil {
-		log.Println(err)
-		return c.String(http.StatusInternalServerError, "something wrong in getting session")
-	}
-	sess.Values["userName"] = req.Username
-	sess.Save(c.Request(), c.Response())
-
-	return c.NoContent(http.StatusOK)
-}
-
-func (h *Handler) GetCityInfoHandler(c echo.Context) error {
-	cityName := c.Param("cityName")
-
-	var city City
-	err := h.db.Get(&city, "SELECT * FROM city WHERE Name=?", cityName)
-	if err != nil {
-		if errors.Is(err, sql.ErrNoRows) {
-			return c.NoContent(http.StatusNotFound)
-		}
-		log.Printf("failed to get city data: %s\n", err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-
-	return c.JSON(http.StatusOK, city)
-}
-
-func (h *Handler) PostCityHandler(c echo.Context) error {
-	var city City
-	err := c.Bind(&city)
-	if err != nil {
-		return echo.NewHTTPError(http.StatusBadRequest, "bad request body")
-	}
-
-	result, err := h.db.Exec("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", city.Name, city.CountryCode, city.District, city.Population)
-	if err != nil {
-		log.Printf("failed to insert city data: %s\n", err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-
-	id, err := result.LastInsertId()
-	if err != nil {
-		log.Printf("failed to get last insert id: %s\n", err)
-		return c.NoContent(http.StatusInternalServerError)
-	}
-	city.ID = int(id)
-
-	return c.JSON(http.StatusCreated, city)
-}
diff --git a/docs/chapter2/section1/src/2_session/main.go b/docs/chapter2/section1/src/2_session/main.go
deleted file mode 100644
index ca0cc067..00000000
--- a/docs/chapter2/section1/src/2_session/main.go
+++ /dev/null
@@ -1,75 +0,0 @@
-package main
-
-import (
-	"github.com/labstack/echo-contrib/session"
-	"github.com/labstack/echo/v4"
-	"github.com/labstack/echo/v4/middleware"
-	"github.com/srinathgs/mysqlstore"
-	"github.com/traPtitech/naro-template-backend/handler"
-	"log"
-	"os"
-	"time"
-
-	"github.com/go-sql-driver/mysql"
-
-	"github.com/jmoiron/sqlx"
-	"github.com/joho/godotenv"
-)
-
-func main() {
-	// .envファイルから環境変数を読み込み
-	err := godotenv.Load(".env")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// データーベースの設定
-	jst, err := time.LoadLocation("Asia/Tokyo")
-	if err != nil {
-		log.Fatal(err)
-	}
-	conf := mysql.Config{
-		User:      os.Getenv("DB_USERNAME"),
-		Passwd:    os.Getenv("DB_PASSWORD"),
-		Net:       "tcp",
-		Addr:      os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"),
-		DBName:    os.Getenv("DB_DATABASE"),
-		ParseTime: true,
-		Collation: "utf8mb4_unicode_ci",
-		Loc:       jst,
-	}
-
-	// データベースに接続
-	db, err := sqlx.Open("mysql", conf.FormatDSN())
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// usersテーブルが存在しなかったら、usersテーブルを作成する
-	_, err = db.Exec("CREATE TABLE IF NOT EXISTS users (Username VARCHAR(255) PRIMARY KEY, HashedPass VARCHAR(255))")
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	// セッションの情報を記憶するための場所をデータベース上に設定
-	store, err := mysqlstore.NewMySQLStoreFromConnection(db.DB, "sessions", "/", 60*60*24*14, []byte("secret-token"))
-	if err != nil {
-		log.Fatal(err)
-	}
-
-	h := handler.NewHandler(db)
-	e := echo.New()
-	e.Use(middleware.Logger())       // ログを取るミドルウェアを追加
-	e.Use(session.Middleware(store)) // セッション管理のためのミドルウェアを追加
-
-	e.POST("/signup", h.SignUpHandler)
-	e.POST("/login", h.LoginHandler)
-
-	e.GET("/cities/:cityName", h.GetCityInfoHandler)
-	e.POST("/cities", h.PostCityHandler)
-
-	err = e.Start(":8080")
-	if err != nil {
-		log.Fatal(err)
-	}
-}
diff --git a/docs/chapter2/section1/src/2_session/repository.rs b/docs/chapter2/section1/src/2_session/repository.rs
new file mode 100644
index 00000000..1e8baf69
--- /dev/null
+++ b/docs/chapter2/section1/src/2_session/repository.rs
@@ -0,0 +1,53 @@
+use async_sqlx_session::MySqlSessionStore;
+use sqlx::mysql::MySqlConnectOptions;
+use sqlx::mysql::MySqlPool;
+use std::env;
+
+pub mod country;
+pub mod users;
+pub mod users_session;
+
+#[derive(Clone)]
+pub struct Repository {
+    pool: MySqlPool,
+    session_store: MySqlSessionStore,
+}
+
+impl Repository {
+    pub async fn connect() -> anyhow::Result {
+        let options = get_options()?;
+        let pool = sqlx::MySqlPool::connect_with(options).await?;
+
+        let session_store =
+            MySqlSessionStore::from_client(pool.clone()).with_table_name("user_sessions");
+
+        Ok(Self {
+            pool,
+            session_store,
+        })
+    }
+
+    pub async fn migrate(&self) -> anyhow::Result<()> {
+        sqlx::migrate!("./migrations").run(&self.pool).await?;
+        Ok(())
+    }
+}
+
+fn get_options() -> anyhow::Result {
+    let host = env::var("DB_HOSTNAME")?;
+    let port = env::var("DB_PORT")?.parse()?;
+    let username = env::var("DB_USERNAME")?;
+    let password = env::var("DB_PASSWORD")?;
+    let database = env::var("DB_DATABASE")?;
+    let timezone = Some(String::from("Asia/Tokyo"));
+    let collation = String::from("utf8mb4_unicode_ci");
+
+    Ok(MySqlConnectOptions::new()
+        .host(&host)
+        .port(port)
+        .username(&username)
+        .password(&password)
+        .database(&database)
+        .timezone(timezone)
+        .collation(&collation))
+}
diff --git a/docs/chapter2/section1/src/2_session/users.rs b/docs/chapter2/section1/src/2_session/users.rs
new file mode 100644
index 00000000..55f75768
--- /dev/null
+++ b/docs/chapter2/section1/src/2_session/users.rs
@@ -0,0 +1,49 @@
+use super::Repository;
+
+impl Repository {
+    pub async fn is_exist_username(&self, username: String) -> sqlx::Result {
+        let result = sqlx::query("SELECT * FROM users WHERE username = ?")
+            .bind(&username)
+            .fetch_optional(&self.pool)
+            .await?;
+        Ok(result.is_some())
+    }
+
+    pub async fn create_user(&self, username: String) -> sqlx::Result {
+        let result = sqlx::query("INSERT INTO users (username) VALUES (?)")
+            .bind(&username)
+            .execute(&self.pool)
+            .await?;
+        Ok(result.last_insert_id())
+    }
+
+    pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result {
+        let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?")
+            .bind(&username)
+            .fetch_one(&self.pool)
+            .await?;
+        Ok(result)
+    }
+
+    pub async fn save_user_password(&self, id: i32, password: String) -> anyhow::Result<()> {
+        let hash = bcrypt::hash(password, bcrypt::DEFAULT_COST)?;
+
+        sqlx::query("INSERT INTO user_passwords (id, hashed_pass) VALUES (?, ?)")
+            .bind(id)
+            .bind(hash)
+            .execute(&self.pool)
+            .await?;
+
+        Ok(())
+    }
+
+    pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result {
+        let hash =
+            sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?")
+                .bind(id)
+                .fetch_one(&self.pool)
+                .await?;
+
+        Ok(bcrypt::verify(password, &hash)?)
+    }
+}
diff --git a/docs/chapter2/section1/src/2_session/users_session.rs b/docs/chapter2/section1/src/2_session/users_session.rs
new file mode 100644
index 00000000..b0c33896
--- /dev/null
+++ b/docs/chapter2/section1/src/2_session/users_session.rs
@@ -0,0 +1,26 @@
+use anyhow::Context;
+use async_session::{Session, SessionStore};
+
+use super::Repository;
+
+impl Repository {
+    pub async fn create_user_session(&self, user_id: String) -> anyhow::Result<()> {
+        let mut session = Session::new();
+
+        session
+            .insert("user_id", user_id)
+            .with_context(|| "Failed to insert user_id")?;
+
+        let result = self
+            .session_store
+            .store_session(session)
+            .await
+            .with_context(|| "Failed to store session")
+            .with_context(|| "Failed to store session")?;
+
+        match result {
+            Some(_) => Ok(()),
+            None => Err(anyhow::anyhow!("Failed to store session")),
+        }
+    }
+}

From 5a32f9f645af7f343277026cba2fd28bdd0d2ecf Mon Sep 17 00:00:00 2001
From: kenken714 
Date: Mon, 11 Nov 2024 00:32:23 +0900
Subject: [PATCH 39/57] fix: title name

---
 docs/chapter2/section1/2_session.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md
index 6ddd2e33..9f0fff2f 100644
--- a/docs/chapter2/section1/2_session.md
+++ b/docs/chapter2/section1/2_session.md
@@ -42,7 +42,7 @@ impl Repository {
 これらはセッションストアの設定です。
 セッションの情報を記憶するための場所をデータベース上に設定して、`session_store` からアクセスできるようにしています。
 
-## LoginHandler の実装
+## `login` ハンドラの実装
 続いて、`login` ハンドラを `handler/auth.rs` に実装していきましょう。
 
 ```rs

From 520c8fef1269fd412e8bd280d5a2db823c2bd256 Mon Sep 17 00:00:00 2001
From: kenken714 
Date: Mon, 11 Nov 2024 01:12:12 +0900
Subject: [PATCH 40/57] feat: add ping handler

---
 docs/chapter2/section2/2_fetch.md       |  4 ++--
 docs/chapter2/section2/src/2/handler.rs | 27 +++++++++++++++++++++++++
 docs/chapter2/section2/src/2/main.go    | 12 -----------
 3 files changed, 29 insertions(+), 14 deletions(-)
 create mode 100644 docs/chapter2/section2/src/2/handler.rs
 delete mode 100644 docs/chapter2/section2/src/2/main.go

diff --git a/docs/chapter2/section2/2_fetch.md b/docs/chapter2/section2/2_fetch.md
index 956d08b3..f9de4750 100644
--- a/docs/chapter2/section2/2_fetch.md
+++ b/docs/chapter2/section2/2_fetch.md
@@ -3,9 +3,9 @@
 ## pingページの作成
 
 接続の練習のためサーバーに`/ping`エンドポイントを実装しておきましょう。
-サーバーのリポジトリの`main.go`の`main`関数を書き換えます。
+サーバーのリポジトリの`handler.rs`を書き換えます。
 
-<<<@/chapter2/section2/src/2/main.go{go:line-numbers}
+<<<@/chapter2/section2/src/2/handler.rs{rs:line-numbers}
 
 次にフロントエンドから`/ping`エンドポイントにアクセスしてみるコードを書いてみましょう。
 
diff --git a/docs/chapter2/section2/src/2/handler.rs b/docs/chapter2/section2/src/2/handler.rs
new file mode 100644
index 00000000..b29c68b6
--- /dev/null
+++ b/docs/chapter2/section2/src/2/handler.rs
@@ -0,0 +1,27 @@
+use axum::{
+    routing::{get, post},
+    Router,
+};
+
+use crate::repository::Repository;
+
+mod auth;
+mod country;
+
+pub fn make_router(app_state: Repository) -> Router {
+    let city_router = Router::new()
+        .route("/cities/:city_name", get(country::get_city_handler))
+        .route("/cities", post(country::post_city_handler));
+
+    let auth_router = Router::new()
+        .route("/signup", post(auth::sign_up))
+        .route("/login", post(auth::login));
+
+    let ping_router = Router::new().route("/ping", get(|| async { "pong" })); // [!code ++]
+
+    Router::new()
+        .nest("/", city_router)
+        .nest("/", auth_router)
+        .nest("/", ping_router) // [!code ++]
+        .with_state(app_state)
+}
diff --git a/docs/chapter2/section2/src/2/main.go b/docs/chapter2/section2/src/2/main.go
deleted file mode 100644
index 4f2e12c0..00000000
--- a/docs/chapter2/section2/src/2/main.go
+++ /dev/null
@@ -1,12 +0,0 @@
-e := echo.New()
-e.Use(middleware.Logger())
-e.Use(session.Middleware(store))
-
-e.POST("/login", loginHandler)
-e.POST("/signup", signUpHandler)
-e.GET("/ping", func (c echo.Context) error { return c.String(http.StatusOK,"pong")})//[!code ++]
-
-withAuth := e.Group("")
-withAuth.Use(userAuthMiddleware)
-withAuth.GET("/cities/:cityName", getCityInfoHandler)
-withAuth.POST("/cities", postCityHandler)
\ No newline at end of file

From b5fa1b7daa44788d490858925a85b8d4e53cb3cc Mon Sep 17 00:00:00 2001
From: kenken714 
Date: Mon, 11 Nov 2024 03:11:16 +0900
Subject: [PATCH 41/57] feat: add test

---
 docs/chapter2/section3/0_test.md              | 122 +++++++-------
 docs/chapter2/section3/images/run_test.png    | Bin 28846 -> 33236 bytes
 docs/chapter2/section3/images/test_result.png | Bin 0 -> 8340 bytes
 .../section3/images/test_result_all.png       | Bin 0 -> 19369 bytes
 .../section3/src/calculate_population.go      |  30 ----
 .../section3/src/calculate_population_test.go | 153 ------------------
 .../section3/src/sum_population_by_country.rs | 135 ++++++++++++++++
 7 files changed, 198 insertions(+), 242 deletions(-)
 create mode 100644 docs/chapter2/section3/images/test_result.png
 create mode 100644 docs/chapter2/section3/images/test_result_all.png
 delete mode 100644 docs/chapter2/section3/src/calculate_population.go
 delete mode 100644 docs/chapter2/section3/src/calculate_population_test.go
 create mode 100644 docs/chapter2/section3/src/sum_population_by_country.rs

diff --git a/docs/chapter2/section3/0_test.md b/docs/chapter2/section3/0_test.md
index 5e4b9a6c..a7411e11 100644
--- a/docs/chapter2/section3/0_test.md
+++ b/docs/chapter2/section3/0_test.md
@@ -3,88 +3,86 @@
 テストを書く前に、テスト対象になる処理が必要です。今回は、「与えられた City のリストから国ごとの人口の和」を計算する処理を書いてみます。
 
 ::: details ヒント
-- 国ごとにデータを分けて持つには`map`を使えばいいでしょう
-- 国単位で集計するので map の key は `CountryCode` を使うといいでしょう
-- データが入っていない場合もあるので、条件分岐には気を付けてください
+- 国ごとにデータを分けて持つには `std::collections::HashMap` を使えばいいでしょう
+- 国単位で集計するので map の key は `country_code` を使うといいでしょう
+- `country_code` が空文字列である City は、和を計算せず無視してください
 :::
 
 ::: details 参考実装
 
-<<<@/chapter2/section3/src/calculate_population.go#calculate
+<<<@/chapter2/section3/src/sum_population_by_country.rs#calculate
 
 :::
 
-そうしたら、このコードが期待した値を返すかテストを書いてみましょう。
+このメソッドが期待した値を返すかどうか、テストを書いて確認していきましょう。
 
-まず、`calculate_test.go`を作成します。
+メソッド 1 つなど、小さい単位でのテストは、ユニットテストと呼ばれます。
+ユニットテストは同じファイル内にテストを書くのが一般的です。
 
-::: tip
-Go では、`_test`がファイル名の後ろについているファイルはテストファイルとして認識されます。
-:::
-
-続いて、`calculate_test.go`にテスト関数を実装していきます。
+同じファイル内の一番下にテストを書いていきます。
 
-```go
-package main
+```rs
+// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる // [!code ++]
+#[cfg(test)] // [!code ++]
+mod tests { // [!code ++]
+    use super::{sum_population_by_country, City}; // [!code ++]
+    use std::collections::HashMap; // [!code ++]
 
-import "testing"
-// Testで始まる関数はテスト関数として認識されます
-// testingはGoのテストのための標準ライブラリです
-func Test_calculatePopulation(t *testing.T) {
-    // ここにテストを書いていく
-}
+    fn test_sum_population_by_country() { // [!code ++]
+        // ここにテストを追加する // [!code ++]
+    } // [!code ++]
+} // [!code ++]
 ```
 
 まずは、空のリストを渡したときに、空のマップが返ってくることをテストしてみましょう。
 
-```go
-package main
-
-import "testing"
-
-func Test_calculatePopulation(t *testing.T) {
-	// ここにテストを書いていく
-	cities := []City{}
-	got := calculatePopulation(cities)
-	want := map[string]int{}
-	// 長さが0になっているかどうかを確認する
-	if len(got) != 0 {
-		t.Errorf("calculatePopulation(%v) = %v, want %v", cities, got, want)
-	}
+```rs
+// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる
+#[cfg(test)]
+mod tests {
+    use super::{sum_population_by_country, City};
+    use std::collections::HashMap;
+
+    #[test]
+    fn test_sum_population_by_country() {
+        // ここにテストを追加する
+        let cities = vec![]; // [!code ++]
+        let result = sum_population_by_country(cities); // [!code ++]
+        assert!(result.is_empty()); // [!code ++]
+    }
 }
-
 ```
 
-書き終わったら、関数の左上にある`run test`か、そのさらに左にある再生ボタンを押して、テストを実行してみましょう。
+書き終わったら、関数の左上またはモジュールの左上にある `run test` を押して、テストを実行してみましょう。
 
 ![](./images/run_test.png)
 
 すると、VSCode の Output にテストの結果が表示されます。
-```
-=== RUN   Test_calculatePopulation
---- PASS: Test_calculatePopulation (0.00s)
-PASS
-ok  	test	0.001s
-```
 
-テストが正常に終了したことがわかりますね。
+![](./images/test_result.png)
+
+テストが正常に終了したことがわかります。
 
 ## 様々なケースをテストしてみよう
 
-次に、`calculatePopulation`のテストをもう少し充実させてみましょう。
+次に、 `sum_population_by_country` のテストをもう少し充実させてみましょう。
 
 これから複数のテストを書くため、先ほどのテストの関数名を変更します。
 
-```go
-func Test_calculatePopulation_empty(t *testing.T) {
-  // ここにテストを書いていく
-  cities := []City{}
-  got := calculatePopulation(cities)
-  want := map[string]int{}
-  // 長さが0になっているかどうかを確認する
-  if len(got) != 0 {
-    t.Errorf("calculatePopulation(%v) = %v, want %v", cities, got, want)
-  }
+```rs
+// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる
+#[cfg(test)]
+mod tests {
+    use super::{sum_population_by_country, City};
+    use std::collections::HashMap;
+
+    #[test]
+    fn test_sum_population_by_country_empty() { // [!code warning]
+        // ここにテストを追加する
+        let cities = vec![];
+        let result = sum_population_by_country(cities);
+        assert!(result.is_empty());
+    }
 }
 ```
 ### 課題
@@ -92,16 +90,22 @@ func Test_calculatePopulation_empty(t *testing.T) {
 
 - 1 つの国のみのデータが入っている場合
 - 複数の国のデータが入っている場合
-- 空のデータ(`city.CountryCode.Valid = false`)が入っている場合
+- 空文字列の `country_code` が入っている場合
 
 ::: details 答え
 
 #### 1 つの国のみのデータが入っている場合
-<<<@/chapter2/section3/src/calculate_population_test.go#single
+<<<@/chapter2/section3/src/sum_population_by_country.rs#single
 
 #### 複数の国のデータが入っている場合
-<<<@/chapter2/section3/src/calculate_population_test.go#multiple
+<<<@/chapter2/section3/src/sum_population_by_country.rs#multiple
+
+#### 空文字列の `country_code` が入っている場合
+<<<@/chapter2/section3/src/sum_population_by_country.rs#empty_country_code
+:::
+
+実装が終わったら、モジュールの左上にある `run test` を押して、テストを実行してみましょう。
+
+![](./images/test_result_all.png)
 
-#### 空のデータ(`city.CountryCode.Valid = false`)が入っている場合
-<<<@/chapter2/section3/src/calculate_population_test.go#null
-::: 
+モジュール内の全てのテストが成功したことを確認できます。
diff --git a/docs/chapter2/section3/images/run_test.png b/docs/chapter2/section3/images/run_test.png
index 5c28349d60325d39512d84bcbf72b8997c375269..54aa3d14ae3972d2d0ab336231431f0ac4acf0ab 100644
GIT binary patch
literal 33236
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
TLyM*_fPb>@l%z@|4E_Euw;b8f

literal 28846
zcmb@tRa9Kv6FnHg-6gn7aDuzL26q|@?ry;yLU7mM?(VLE;Eg-oI5aK;-|s(f^Dt}H
zJoM_*w^yG&r|zk$UA6a(P*#*eM)-p8;ll@H8EJ9V4<9~(KYaN384l*{N;HhD(%aid
zXH_ZD4^>lyM{ggXEJPGUK76Q+LwquZe)|mXAg%5E;R8zl`|IPdeTnIZ4-R57;v#Au
z1}9mF9@z7pHygoxAz8wtKb1cPqY3L+K_MYHU0~$V=sW}nK-(e@4vW@$*?grvQBgvL
zwnZJ*5d0w&uZ-Tu
zl5J6UTah+lP;Y*d?f!hA|0)wmUFw;kbI;3d0XHUlTh1m5M;44GD!mh5VF>>|f+KT;
z8RY#xBZU8_5p3#0fH?q^m>7&T<7J3;)=j$JEXBAId25@H@K?3L^mi(k492*bSVoL(
zm%HMnP^KC6lvArh#1o-z>zT>PUM!?KqFdA2+EF6W5WRYM@RbO&TB>?}JKV!xrBdO)
z<$S>u>xHLXcy3jIJIhF?B2(`;V_0`bubfv82imP`$jQe>vKv3oTi>0f>-dll@cp-3
zOG4U(pqgR@_J+UcN8ltOgqf~$E5;X*8O8TGXE&8AV2z8>z$ZcBkZy#J-jWR~JQpuE
zwv`?VeLR+o=n3C4MqnU{0QP-vOb+ISq#PrLtLM0Zv(A;OfYogA741xLTD6n!Rc8b}
zZUSM&U-@HQMAk)Fn}YVGb=w7N_~62j?zRv~&_+*oNDk3Q;<&lKtQMD)O}Ae#t$k&+2qjv)M1+ol^Sj
z^~pRl={cQ`Jo)zq6MJ#euCW*|bZ^BQdnLagj$q{qsYs4j53q+r@AVxGKgTPXxY!O#
z#*Mwl!@8Z<)MlAq(zkz~H83MiZ(k7oSQ(|J=fk9VssG!_mPjozSqfudW0IeO>26Sh
zyv_m}1=9PXrN#PeSkT!zv@wz!e^0YOua}k%nxuS!*Rlks#$I;<uRbsA
zPye1&O0@2BJg&kGY?s9D22&FN%deXysY&tc{xTasxz0IOHx{+_uEU}(>YL;6*)?`w
z{W{~a(FyM;{8|dNI@N)#jX_?hgaZWiDaP&D3Ft1)KxN2Eh;e>Zb6R-;hOP?{iA{Vo
z3ApzUV%utP#bdh%7!+4Kz3-;z-$GPuH+i{XXrJYqvtwHgiBe%5YL1x|div^D@YSv<
zrZukX^`g=Q*tOKmbz{Ee2YkJ&X$EYVdQFi(`0+g&Ui3>3=x$VR6?I3v#=qW%1s!^Th1!8%o0$7i
zaS=o+23oWh>E~b*w}s5oQeUq6QCc<{yx>^9{nODB_Uj-y5q%~eSNHyd1h7aK_x;O)
zj<&TGVc``7pWJ&4?q7$RUNZ$JzFJ{#*ZaS?;<+aMBcXQ$VmX#dRu(%99*qBWg?^it9I6u{!3~jm
zffdSlmP#y}3ZpGnrg^`;iRY0JbVl8hQE@@5S8vAO7pbX!v_-`_)H{Z{oc&6JVE&7?
zTy^#d-0JCwd%DSlbF<+f7mOq&S2wItv>C5n;&e(neM8tS>VchCc8WpZB0$azws0f&
zKx`JdAI7D|_jIP2E4Se+#kcDQC9C7p{o&1aE~Gu*kcu%d0z%AXA{-WUSHFkSb3>)t
z^MH4=Cs^|2P|4L-eWNgPZ;Zog@Bk}^We~n8L~{7^Baa)2FX`@$l5R8e%WJc0v{c}R
zUwG`qL(s@W-Spx*>srM$tIfu#({RwcM^MVr*1l-R5sUe6t?a^`?sGG%qZX?<<@%s59;N{Xk#|V|-~05#k&i_rI#BICKb3uEkdKH=
zgC91|qwe=9Z3&3}>PG_bV_rWybkm~}H42(tRJgZ08FV{ug(@Cud9sC{pM{=UiXN`>
zuBkFxa=@>n^XQ;gEpayagFFNV>sL{)XHE)eEX!ruMO+2worud(wGAlU38qy4Y`4L><)Ww`(X$JM1_Ac`H1l^VJ-beB?`T#n@rA$O
zNVyqTFZDGO(J>&m8TWlNd{*=QFPs9xf6q(VwQS`iB>eWH*}(Pf4I;_rX55e*sMevP
zs7}k%`_uAj4;~qSqEKj93A0Tvzf~RayYExiy8!B^$WvjEk@}{Ip=={t$~ca~Toq6a
zvT))X@!^Cjcq@kMsL;tRU|1Akp0QasVFhpiBdhHe7#Nk8?M-nAN2?qSd*fcbEk3kI
z34E75B6)%HS<8MN%Kjs{IhmP%`)?xKgrQ+x46s)HkK_g28`fuXfpbcptGBKf?+$cq
zjriy%Jz;j^)@ZSOaY|6%`@eIY3J@?1hcxd!x&xbrClcbNkZ2HCxipKv=`jYkMfcIL
zb=$8Y8P51Y=y0n6#b^7XeZ~qKcX0s%=Oc??e#vOX
zpgaS#3aAZ@#_j9O^2;gF8oZbGl_FEQKQFVl=)N08_Yvui^G=K@!tjown|sG3v)@$m
zwoC-Pkjg77pQXEA<-kpM2mj_TZ3nQL>_T;28??QEi`wD_`NqE7zbDX~f%oOy#rx@;
zblc}Lh_b_llrC7qvmU6cBl-Mzo4S0ty
zG9!Gi-B9nauUteNBEqdI6B+q0?@>0<{_$+kZO)b%9o+-@Ug6;B`igYL
zq#}{MEHvKi>5zEl!C)uP`9}A~GlIg&2vh8NIdcCC^Q+#+wMN*k}s
zb(lvkGF<48?7oaXQ~o!3trT6e7(RY!WtD+?foyp?M?a$l^JudxAP=qD{YVcyt=|=j
z4Q~??uf_gHdUtar&brFj&=%t+LenxneiUVrCZGwkyh*cKX6%viV9#2YwGqoqh8I@;
zx0gMsF1rlYxF-))lxup_p6!4)kFN-v!~Lrhh)N?l{;ExtO7I}{&`3Re5fkt-*Qk?;
zb7tn3>%0B@;?dCkA6lTKm7RybpFh^RJ*5w5dUD>m|IpgdPihDUF+BWn>P7T%Oqf@%o{hmhP$Swjjjg!|M#7=Ns
z#NBGpzy>p%Eka%VTZr5Z4!Bd44ws=p1a1h(1LT|W*&axR7F+k^)oXnaVwa5QPbpgr^1A5JpW#L_S^PFoEfMb
z?C?o4xZGW+{Iyy}^*f>3=r!VM>ANmsn)gBG5Bq;Ulo{)prsJLmjj!DrHsHvm1qs%#
zQn-3(d$`x$mij#O;ylov9W@_9qG$?ovN6{HPj(N|40Fx{1Ans2S7SqJiLacdscl-B
z5lhyiEi4oU+S|DI<=2AK?t9YVDO8H00HQhZB~$ca7L~_MT-Zg%+7~uRw;#;P9{^7_
z`h<(}!@o8JgQf`D0F$cvYW4%1DFQ*OSQi?ZIpf^|=sxCbWQ#NgwJ&}tRgKRX1VLhF
z9a=&DaJ@7tfX*ws4p(vl_dPdg!L^^wejQXl64%lflvln=B3_UXz!)9(oBYZ<=ukW9
z&G^bi?$VqeAWanPFHao3bH*_IH>i!l&M}gjh7}{@S=0E$gyMWzS6}5kmPwA~)T;z)
zdQ~;xwM^-e&M_^vvU_3(_4cSvniaY%h8+Sl$BI9>uJ}>x6#;Poma+~!9IB_1PeJ}k
zF!fb!avW!}6JkR!N(E|7Lhm}YRf3;li?pgmXLfyD)|v?W2kd_}s~=QLj1EjK@p8eU
zVuR{Z^Ca#@lSaB8>Gby{JHjEBw5uG5&0{`IRcb(>f@@Em^1hoMSa?5h2QNi3UJ-5v
zRpPgrE>q+SY9~+FbdG-HqJJAs7+-WBm;WQ2Q+Iq>%6)y~5Eoi)#$6TxriqaIeS4Jh
zU7cAZO&*g+gS~yB+R0G4Bl8@UQm&Dg=4w`&otn1;uJy@?vP$gk~H_spDUX_q<@
zzSutR>uqp|yW|(!zeXw$Xgr!=UN?T+LAZ*9e!K@oY)OUeK>u(*X?V8tIQ)A&=pC+-
z*tHxOQ+VRBqp0Jq7$SAUz`%@pHG$phrzR`Myw%79h>x406s*OOG{c4?Oxk_MuhJ;c
z)Te7OBkxxNYLya9Q6Io_1y|FnO+hK>>AoDbMBgCY&CL9liW0|^DK&ZmG^zDmKiEboNw^9%oxkU?rAA*D
z;^ZUOaa*wzlyVKgAfWfZA#YN*Fkb!S7Y9c+(_fyiWO&t@`8^1xk4WXFue4>9YV0MO
z%B)}_@iz`|)9asvm#oEZ!N^K*X^?}*5Y{mZ$q=3GH!C94NNOc?Fqp2o*q}GkBn!Vb
zCV1NClDmoFM!_y#+tRwGs@}{I-fw23_P7@P2hINDnuWeSrumn0iO_~Qk7lwWnk?L@
zqr1VY72CBhQFhA=gs(b6!uN_Ohm`8rEuiRRN0M0{$2fcZ!iyBj{D{urs?q&$t^5vp3_zpQcw}4aL
z&XWi>nB(4ap5*DTe#qZr=8+0HhIMgM_I`Vw-6ex9AwHcGkFTMP(7x2I)y2omU6;Q<
z4{B-T;(D?!EZ;wTGt4L*?T$GfXZ+XZ=@p|@gU82}_^GoylB~e>t>l=)%+YFIGU5%U
zs8COQhJG?8a4_jb^10IF0_Go^0h~#+^1<$)-tt<~ohp1<4=tqxJ1L_e#n1W7$xaW+
z9mGW_LwW+tG}UOR1gMgh)1}d=p6fgeRfiPwZa!ghUg|NxHRoMkEBax^s{F1lyzSi#
ztpN0Y?f4pjhIT{9qBcONEHsJf^-mdl+f7G;Bp2=Db)B!?iW6u4<81~+ykAsH7*tKhi|~*Ppn%|_oRwsg~KH7n)d%|DOO-FHh!e;nN(7TaM*_Y
zjjZ=*Vqe(u=Ah+Gz_l>eZ#ZeBr)kk!*{V;cAvDU?ZAP~W;xlCJ
zN!wLbN89$$g0{Z`qC}0x!$Eo2Bf93b_;AMNL=A1{(8Ia??ruii9<6!h9KRW1mm{C+
zJ=1c81C}`c^3hPJlx%
zYmmR1Gt8shT?XQOW2{IgFssJ6+fBV`Q5XFXQ8LhU6lXx(ntRMWE!)-lTZFhd!A*9i
z`=$TmRd>zjAa(qn@`$t>ao%5Q8MckoJp8N!?clyCfNy>TcU%9(@6PW?j1_tObZTJP
zHp*uGn5P?)2w^&=Wi8svqPU=Q$uHzd#EQ0X^A<(b7r{TiJ1Wb|gAXn3XxqK^!Nlfz
z0obf4vb5OTrW%R4O*l%Z78lzIT1o2&a3e5Ig>tn^k$@=Qg6*43?xx1Eiv2-i2
z&X^t((3tkUW|`3Xopb$_R!I$RUKxXP-B!e(>NXB(ukwhHxl$MYC@!OOspIUP!{J-r
z*hg$@lR7Ugzl)C|7&N>=iG(@@2ioWAQB7Q3LNQ9T6YcoziXO
zTkOL^x2uz6fqH8Lfpma}d<26~l&~0CC9-PA3fpRha{OOOF$Col-lVw;Uf(IJk9G2F
zmtdeNT9mXJchL77Q1cAAFdqk~HtOd;nvfCuz|1vHLtUBUg!wLjxq`Oq--G6quFE07
z5&HcAd^xT^1{-SCz%SV3+`Mc1JsHcv$X|abLZr_kL%c%~W()$!3J6ZqW#A$V8RA_x
zm{XDHLwB1p93Rhe1{R$I;t+AS+&A3)`%0s$GNP^EYS;5VtE$8VnOzP)c;$cDv-+6}
z8}|j8b#HA4d)uDZ3%XWgNjsWk>i728IovQMc%-ZUPQC-GG4>i1=%!j?)gH!Y7sO~H
zt>uakrkaUi3uMwqsj48M!nRNb>cYVY*t1=Y1Ay~6UlBEg=UxVS9i78qYHuM3SX%Zb|f`LI!+C{fqUzI7VWy~2Vm{F&cfzZ?SkKkI!wJ$*NAb(jx9;RS%F|)C>ae(Sv34y@STn3sPG@BSIGxYUS7O%ev%Izm>$?(`+_((Km$E
z2QdhfK4uB>#9K6%el~Vz>sYp0t(%?;ApINxPgcm}u_t_xY-{cAeww?UgSPE85b_1G
z?h$x|^VEHI!kK@xF)jAmG+es_5rV=#((qd=OS|or-e^|~64I?3m_wwSIwLVfZg5&g4F}MWMH{mB>(3$1SNBy)=5{RKND~iu+$*!n2AFGO4IjOX5V9+LWO?L4|4+z
zJcrA?LX7I>;wq(&-)1?DOS``_oce=#GQV6Qbu}z%GZ*8zEDYDaUOK;Us`+sGfbUNd
zP_6lb4QT?LUo(|9T$oa{7FEXkJrO|u;mERDgwaYaQA*VDvB-69aBrh5|-l*wfo1?{N`20H;3`Fu_q8JG8wVY5jmxs(e}+3bpMHCw3?9+kZ-3||4nvL
zPESxwebIK5Jx1zg6GS@>Qqf%KkJtMOfZCJD8-=
zrfB_je~g0x4U?>}v_PUo{tT~xfhQu2tdIB917+Og*{BeVBX(VEpHa;Z5_GX3HImAI
zaq(z_`W~tQbru~0{l?b}ge}5Q@R-;36>3)^rxiGC81-j#vHj!{!1Hf@T0pYy5h)5r
z!!YCz;E?!p$a0M@@7d<3L51-%koZ??+0)-Wi?1M>g3oNO31}cX+OK8R$|;A}aRnNE
zEgK4Ot=Y8_3md10y_1a5yHU6L6}^Hyhu2YSGw!mQK3$Yf@piMSK4TleyWhO~1}%}Y
zFo@ErE!vh(4qE!sVm%{XS@Coam*^pI432}7Z4|$fGpeUzDHnZO@NQDxi%|umIQd|P
zo)#f_$)XNfP5Yrs`$wVsWHcvVBTR60VbiccrB2Cx7}LCwbwkHqAXVjWR#lm$*C;$_@Fc-rmu3dpz7Y<>wauo%Qa(sKdmubK&wgC6HT>W^=xVjojb$FwU3a&`gG1`Et@(zeJsE*!AvI%JB+yt)X^be2`o2q;<)f!6I2r6i_dS#WVDQ
zG|z_jCNz551r}9bCz`AxosxTTd&B`3KeoZj5z=+fZ*UaRnw-FYJ>p4@}*7v
z$&-t=R?VuddGIEDQ7tZ5b7q@MT^NoviT{yOhXVWH;PG-bEbaoIEbDgu=!B#6!NNI}CdR@Qz
zWBbgf{$@I9f!YYy`?dma+*OBpv{ZM!mPiWpV0L>&#lAap84qEpnXHNqFJz%E!YDaI
z3#9CC@H|5bAA40gUN3cN7oB57DhAsy$Uf^r$8mq1afH{*urd9sk0;5nKoIE=?4du{
zhD@h6y`uv)te(Z(ngY=))C%!W&8dVwYYeBjT0jAy)mAha27S$2QE9xLui;}_ce9$f
z3V-WP)o#+fIma>)mm!-|vwW9UkUkkq5DLyG-x{<-_o&6Z?fKE=6`c;(MjY@Uwrl+$
zCJBeC-Ei>*f5{e;h}Wak*rwZxDekPc0)
zkX<|k4n%UKPgIYI6APh!;)J_W{Mno!3`8Ug{&m-P26D|$JL_8+H1sz4iMF?4lO6r~
zBQ2W9Hhm{%VUnd-qAo`{rSC~9rP}yz(E9Eu$+{LDg!i-7k#^2xswL{jo@LZmvH_{9
z)$x`~zwg)}g{Z>7E78LcUh0`1{;J8pPh2!J8cJKp->~~2&>OEFG-lO2aSKgOWP18t
zukjAH?z*|Rdn_~*`}HYq(p$p
z?;k%06JYI-5^q?s!6c#cv&7pj<1Y-lRv}B_Uj3T01lRIq#U6+JHbt?%Ve!M8rIw*@yb{`^w_D
zW|P0>OKE!KHBI8?y>GSSYM^TK4qDnEb&o|bM4$XUD&cm2J&fOHJfBGF;W09m9e!=I
z($X`v8unp*J|5$!urtbIk~yNClL3+L8Zjam8kowT5lal|v$Hg%7|``fk97u{&!0GQ
zq_*HWKu-!VIv!O%z`Ifakn~ov2>*(rMeZ((isuVh3C1KNkD>jvC9bwGaKLV?rop)&
zOjd55A=ETg(^JB2YJ~FA^elL+M94g$y74a4FCn-=ZtcPWIi;CpaDJqRZe4HM*tH6(
zRdltrp2_2d{szX_T`K1jhO~HN;Ec9tFuu6C&Y9RF>S6C0uO+<)`7iK`*5@Qu3*?Va
z>imwSFdNwa>P1tPu=DlyrBXgUC0Pqv
zqJJw(^T|PTov(DL?25M_+pc<=2}bvc?1NBdOkde+o(N1>gITP?XKzudd5VCJ;
zIv`}N(WYnmzpbT-X?ec_brzj7M6bV|xvuekqtCCbWR{)iS|Uc<=G6gAW1TjQv|s^O
zyz+g(^pV7#VG=7+s|5$A2|0J`3kV!cFZRwqZ3hmbE*o{@96d^U%bBu%wz;TPPjbZ?
z$F$Y=(zL!2KoQL8*RG{cJu0M)pN~!UgQd?%4d_FDa3NrXh7xL(4cK(Hgcg2#Zkoco
z2`ORU#Lx+K4C^DY?7cvizSc3kY3if;emuy}Th3?F4mNglS~6QLR?~B|CUk8UgL4LE
zLHQ03|G~uea3~&X$VZB;St}g5&6IGqwh$#;#QDfuMn>^;i6=OVo>GR)r|hxp`i2yK
zE&Xc+Jd|T8kO8%Hv5&%+ScG@p$3(;M#OmQ-U>r
zZ$0(u1ml-0|NgP6{97&~w^TT`YN&yQqS&yzl9Ta|1*fRD@Iq0MKTMj#$muc85Z5V2F`98SY=Lmepkgv2mLJ^
z^cu=yS3Y<6c{KIWi*Z}3*LtZGnhajyouo$IBFRzG<|fXg>&})IHuv+^i`b{cgL&8X7;jp6nG1X$u#RZu`e-!A-9L
zk?^0-cA_6r7_2rfGZ;2{;~7|!<8qMaK(k9T$oh2yw?DG<3;B2;LxO65ZiKzEncgF=
zbWpqlXX;#LMtnd4Et6oL9Gs;%fnM8FaZZ-hMoI9kO`ZJ)st#-wu#Mdw8&_t*cxGzVcY`%32PNUZ4>jRu{U
z7%)0&2gc;UHLlZ4I~|C+l$|CYDAt0am#31_)+7#Y@B~p^qW~wYJ{t2VpU=*U5Z`O8
zS!K#ttuxoJPO9Z99VXRG(xeDpr1~9+*o*ExKdxECJ*cUPxqtc=5sArTK89~A3Uqv?
zNfE5UG4m4WUq=@s8R}IK9grhCW2<~8g{&f?XV!_4+Qf8o5hRU&6@St7x8QL%M`2ZE
zTX&fg=#L>eQ1-J&7c4ofezCvnaBItackEhfkpV9YB;pkTkpj?#JiZ2`(VW|Hi4Cjh
zkGWuzhFrC)S~6c25blbt4m*ZQX{4sF>H&qlP1PCZ+w;Su?mCihKQXPOOaH=)@o7_pGN_oLxx|M^dFgkIZwpB~RN=tWQ
zbS2NB$c=%=L1?ylvKci|!9k50*Z0`x<%RHR&>FX{aIB%wTn)@S>nwXAByKbAZZo)h
zc^G=;p@zOx&Fpx5Oik@Bl3?Ai+T<2r30
zjWMOGJ-a=URv}*@;%AJkU7@9
z$ytzgv*IJtXmzpWOXQ}u{mXwwx7YubOlg@hcR?+Tbe(>uK;P1DPnb9}JI&CEhE)eUQL38(IA{(Pi&b
z#C&?oQn_0HQ!7A1IPu=Dz1`n!tjPbZQ{{8@Xe(5S
zm0S6Gk9RA}C7=nr|3+^Ie5R#)qY7PB)>1>w1_68k-SPu)J{}oKE{Bf+pMca`F_KRC
zQ;XycIZO)&n0*1tF_WK;49{@&K=W^D^I{;cR
z1QVWl=L`rn3Xo2tA&m>Bzb@AJ(LMI)w^pvi-5bByb-~lh
zL{QMJxCMnF5lT2-!0VIVxd@F7%E=B-4e^sLazxeEJFwHohxkFR)PCi<^!Gfr=UI)T
zBv#K$ED|8P1H3Kyke&>1Ru12LJrJ6YHY_Lc>G>P7s=Q)T**v!B=kUG!70H4c-KBWr
z2*0m+d*&9SPR1FV$2!ONk#H+vOcfg{+>IFb-`M4FSbL@HKoI`@oAgDZc3{gt`|{eQ
zv&WP-^l71a)t4y3S-^T%o7veT3vAb|_0uu=VZ<_1llw6_2Fz$Kz=m+DJ6(P1dg1Ty
zfLA;yH(a$~%L7(>BMl(rqlfDG#B~!hicQl|({7hu^ZLol4o!dRr@nJVI(Zr_f%n=v
z)7IhxOqO2fc=R_zr^QYmve-L8`@0RTKOS{P1D5el(XV`|mltlAS2A-b{3))uk1ORrY1#1j4O5I3_L9MvU}(|72P(HXcKT<1e9%$KJ!T4
zuU2w@-5=LT1CP?7I?rir<5Klq)+=k6>hQM#IH(atj=&YBOdf=^*Nlc*YLO^nIkn+}
z5m<)Pq_`UGBPiEVqr&2JKf(arx6W;V`&jmo39i8lOs#_PMM8{vPQ)m!TZ^bYSp<{U
zEqz06y;0lQmK~mrgX0fQB=wOdGLf|2Fw0b4orZRjW@n=T
zgZ7;c*2QJKjR}h{Y{t-IE@_wrjQ?s+QuaANEr-+%v|g%b{soVkEE*r~v?&VCcFiJ}
z@CIFZt&`jn;gA#PUUb~@X+~#M1g^e8fvmVnyY-hoSk{5I)k|+unw=I}s
z5h3(s+whGLmzjWOc(<8=)Fi|UzJf)S?Qy+$PHDpblW&F0CJ>XmZfnt2i3=^jfq{#^7Nrmz$`AbzcJ>BW
zoGI*3(csI4=3Cqcojh=`$u_EIyaB^V_^$35mlRP0hygr)KM?3cdh|?KFEw6lDBb*w
zTr?=nluV;M1t_%J#Naut)p(qHP02=NYxjYeDy8Fzc+nBfo~&+u-h~R^H2m(|FIwpi
z8Dcf>7=){qUhBxgO#@BuB7-oPi-M@wQ4@;4BH=*Wwl%ghj(tra)M=E}xy3$d`+3UA
z33eZe`~W9eBA@97dQflHj8(A%%SxToa8$B0)i3?SXte7t=dn)3lfPBZC{?2>llHa$%Nn^-Kh9pF~Pa#aP$LFC*)qk
zF+Z4@Ui?`LESHaNJQJ1&^XJGx1d084ZPEyy&7%sduz5S$
ze^{E?h=^tf#>vD6xZo7qL$Id3RF)18JGo}Q%QJsN6X
zW@mG0N7wyk7uHeIUF(?fm^?}V5GmoRrDlUe4_q+bZIPUW}+wttv+5V#J0nWFp#U{Jvi?L#L-usG?Y%A%++KL
zzH*N0dYa*kXPP-lzP_=o>mDpVu@{e+Y$xCd=Z|M>?_f6itq%Fl>-DotHgo0*hQ^UT
zkDuk!RdVA=KIl9qSq*OVS42i8?#w+;e!~}RDz7e)h$;J&#=4?T_-0-Zpnis
ziJlNb^j)o)yz*}>NdR46=z1{eOq}j<7SIevQ32ML7zD^+H{B&~Ybf@LP}k4LbwZ!w*A60v9jd$2d4Kyk8xkj6KVH4=3wZXFuosU^Vr
z9d51B&G-yZUds0-uoa(yDR`dk`WOa7l)X;55Bcz2NQ4>oH?J*=@G>w%g|3pkDIg7?
zf7a2Rn}V;XhVvV)l%Gj=1@Ileb2j`1to=1~a93``1$0y+2rsRRq@(3O9dszkB
zjxD|#u~Zd}hm;h`7~vwYO_2d8vrgsM+zVx2?BMa~@z3o#r?LxgDArQvbG!qndU(KI
z1+@@%gjMjsUDt7eov_{p-(cXjUJ;dZcDq|ik%*o9jg+5@zm%>QHY3+}`7xyd)nb^m
zh|Cqf5x_1LWH$JQWia5^zkQLJ1k!R1Zf26veqE~`ONZ(_73qVtKajC^(h8LZ)dTlU4uj;B%R5=7AiI}js0=gCIHq5?v-)O)B~QV>
z(Iq1xKGBMmL!sE{2K1
z60+bR9!@;&Hfg=_=Mx$a^Ht8*?-?`m7d;rJ{w$$y8)QbMSW95_iZy#v06Sdvssuc)
zG!d2`|CJ2^`giYPSP;l;S7&98`z(RaG@0f2=uJUGPfSg`=_gJr)rxB@4m)V3iKheU
zKb4s0wX?1>ulQ)bQ%;Q~@!)6SY3Cf{YngK5X7#C1)bruv8)xR2Y;C?(f8MgM26y&i
z+rZezGsT__ERlDVw%|!3*wUQ%4hbVL6bvhd>1MFNLlSyLrVUY+1$thK_Bgmsyo)ke
z@U*fr!f!~ZGxxL@!l?gsQvc&tT#CW381x_G7iBKclK8P2&
zt*XD#xR(v`1C-_)>~Rg?OvOXDo&Mj$U#%}jrvJZmP&^k*psp$mg$g@=#~EvTNh-fc
zq6=!5SbT{Rq)_oyQp&aB+J6@Zx;QexdA}0WC>qRBoX5aoErY0XT6l_uR0o0df)inH
zZb+E$As+G(@9`W7EA?L?a2`5!F2zzy!{-APc>l-~BXKrM%h@|V9YjBeyRRSu*%k3n
zo94pa{mvKTyAk1}k0aM-NAnElLpS>zJHDc7ljNG+j@n|21T!_a_g;c!&NK{qz3C6m
z&+#_bBxrrK6~C%Pi=+y_p;mVkyFiN>Cyy`mfkY_Cdc~Xt-lUCIBq-2ee)yTLZmf}(
z(eSQ!_YPKlbq3t7@!ofdtRWaQU`ke4n-Ivv`iRqHOlD?kxFyS8WvIj$*
z4FUm7j6q6nBSDoOf(IfD^YzY)L_Oja;%<&8vef3FSu2~YjG!=tL15rwjq{X40~gMn
z${U~gm!FrC#5v5w55Tyes)Lzpab*`aRwFt^#|0sU{!pUfoNhfFHON!Lh+pB$tWjn&5i5{oL{1f1#{%
zt;MwVF6F)DqkO6UvQhUGSE-<2*b-sVjcrA=IWMu-LiN`TD*&{=jv~y3w8{)Ex5+xCOGgsk-bdL=SjpLY-_&48KZ~1>`6{h6+hm(;M
z)p+$+ivSp$_XYa-JB;|C&QSX&ixM0L{KNRfsmY
z)7{$@6ND@?Rug~NX3Mj0Q!Odmt>VFE%f){NXPnA|Cn3sEzFvwJssso!9##HFomhx6
zw8|fqn`oN;X;$lOo()w}fjB~%@d)uMSUC*sV0{`hq1nU%PplJ&Tdz8xyWotVTo~zv
zFcay1%?sF24UJKKEMlpoepmY)-sTpgJq0=Xgwztv8!ViJ?*adCC->pKLmB5nG
zyGGVzz1OTzdGJvXOj>44+{1M)6NgA9jKck0vf(eiHkXNcefeUhyB&pEh~PkCY25A7
zd~wE4<_De>$1qA;%&>!U#l%Ao)J;DgF>Id1eSXsDOTR8%%ueNh$d{GOD$ex^eQYR*
zGhoyU4)<0+tryRP^?x2g?@fZc_)$G<>_Z7{ls?S*XPpT79dk#eHD6l^=ur59j0BGP-c$#
zRQoL{2izQ~$}07rd=?OWU3+VvME|M#=j4*+XKn7lvzb9HN$*CGX|)TME(7jj|Jedy
z4yx0-3*bKS!EHE!OV!l-j$!G_${h7NTuy$}P6vx0Z*bx-lUVv_bk=ur-;`RRc4?)!
zA%v_i9y4sLg-Si%NJbtni9goo%kr6aWW_lWgnfE#rtL_KMl_?&@xALKy!RI)ebjgl
z5*>ecZCO-n2-1wAk0t@6jM&`HZ5L0VnIien1$7sG%%i19b>L4CcX>=%`n7FFt|xH6
zfSHzAZDmEIwedV&>Wd>j$E_wMH5nKQl;+UP!d(SO=(anKOC`K_-O^!-rj5E$Vy-i#cGd0Grt-FToP`hE
zeiX=kn&IpuQuazDf6EcldcTzc0y|UqsSfPQ9d;BLWANWq1M0I0Sa(jRmaf(@a^LWg
z5%(obq!~?IE*e{W+?FlZF&hm1m0T8do^iKG4&ej`0w`p{lzi}3D3qI#Ql+Ukcpx0F
zcm&A&CF!23(72n%?d=hQ#JV*IZUqq^>7c}QN+t#@OC#55Yz8ZC=}34++g*6K+dGE|
zkb0|HL3z@G-49w7Qd{HICb#&V{3^8kfe0RdiAhWfCT@{s7Kdu_>(3LnX8rJCK^adV
zfZ|Nm_d@Z4|NOj26mzPcctf0dn%5FZtwCTi+gkuFBDGi-;n<%_b*@2RNvHh~D
zT^sOeSKFR4)#BaSlQ3NY=*^njxRH=IEb-qX)S@6nTb8$L@9s;71^$0KDs;qq(}I{A&a-dD
zt0~7c^}blFdcFx`Hn^yrHvGQFn18}tmNpbT(SXk)VFonh$61uZ+e)oB?+`hb4{>K
zk%#`jEpo)8runv2^ZvxqNeu0zI6x#&tfI$TTE<MXu8k3
zy9GZc67CPKlQg@jnsq{=6T||54F-L62Eoh#8}8ddeohgIADcUQ@BG+{_T?Ry&?)?r
zK#j}cli;uuF?rxwD!>ab?a7ve@aTjwR0qF2K2H)4KtY!J}mO_#;
zxLt6+Zbd=RwtMxslwIob$j=w1Q7>CTEn(=->L&>}p3j{pUy6E={f=Wy7C~w?wmcGr
z*cY$$%=tHrWYXYsq6j3FIKwEfjy=EFu=(sVMk@!ZW5p`eN5@7u%O#1{vasWZ<1U-C
zkvm`9UH4KV7WIa1DcogVgx-}k)Fzs#9=yw8TA%#r945G@BUyz1A-L
zyn!g{{H0juS9>^QE)$kzYrh`F*e?7jQUB|O`CIRE;e0@?BFxph?d8)qhTg)`@soY&
z;4pAo8BtYPRQ+W+toCWUhqa1v)WAY_rF`J&_m*wW#GWWxtN*L9vyN(`@85Kv;!xb(
z-CJ55O7KE)N^mPsC~g6QO9@&WTC4ziyL--__v~-~-A
z%y(vzxj)x^rAS`2L30m+s@<@A6>2m<qRlx!=yPQ!VT)xhR%3aw7hAsU;IvxN|S?
z(!+m$(*(FVN^h9+duGTdlv{0M^Acw>4t^vsN^L1VEKgl4_w2+MT*|ifn{Ml?pM|u9
zPWoBw%^mXWEhZ>zw`Z>c=acOCym-V(+cS0d!yk;=io|&!sgpzhtR|$UvEY*d4m1Y8
zbUs?+%MBwScz#Bb{R%n4$J&%t^&o7VS+@K5c{#O91gnyf^EIS+32*Gs_SxiCeQ({!
zLXAF)M=RG3e8AD^o8605{TMADpApHzLqkT28YhjZ_O*e&(oj
zLL_(A*LTdJdLpLF>vQp#9{tZ*qRtyVCCbWk&q;oisl+|g^px;t7FTp&Y%b?*^VAx;
zF8DDAeoS-SI^0d<@&w%f>8(q2m=cXw54oSS2H5DPU6ICSuI=h;zDCmHC40jeH{g`%
zj2@N;XKXo4R+T@}4S#b?tosj(M`QG7bpsJGedxi|s*_$WZsoq?duicT2wuO=@879o
zJMYKQEq%|!90-De88|_nMu|GkCO34DJHN&8bF|bST9H#zKcP
z%Qut&B`CoNsi@j^^d#QPsqI9cWk@aglk)EC=5GFaU>bCg7~3VtZfrrmWtM>ayxJV|
z3LSu@F(^MNzQoS*@*4qR4qwSDvv7h5u;I!8BcsB>N&ZFRDrVv5-`(*fCgTWhxiAuX
zWyXm~tQ-m%E^$`Kn>fl#^=M!w#iF)GY^=TTmR^QWu
z81UPIsI0Qr$UA;%Ms@5v8JWkkFu<-Q$+nptkTV=OPlj(Sx|Ps9o%h?geFO^hnSzXZ
zq7qMnfbIB^E!xcI6RxSb*2TGwfJ@m3P=N-rvf%f*3Wx|5QrR-{nPPWe4C_p$c2P)W
zWm0ZT{ZZB=S%FSWY4CIMb>22kP7`JnPD|vfLD@Rn3>)~#hyGRR=_L`#-GD098*x>^-y+xBC}2}8iS@FRM+$Kr#DQu
z87p4b@Z*TA(&Q4ZB1}{R{3}m^COhhB!gBM#^{t2hrXL8~h-p_lj3QOj{nlG~)u@3DwWj83t4VHpx)=0f
zE0aq1q>y>FKT%;)P%AO=O(rN~g1a?Dl~gww
zi(|eLTad_r0KN5=CILxA^)+D5J4WmpPI_vZsjWgQdm4tH*)5|H3@-A`&-_ZiLmb#X
zhrC3sv@Pcw`C#^phl*&*JWgN0-o!i#qML#({^2{;zU(EYQjzfzxtMG{A^$=Mb+(-b=m^%h52iJ)rx&Gk7TFdSuQ$g%#RZCj-A|SCN##myIfrcfz!*e&|_{XYn
zgF400Fb1C-?D8eYyXK{xSQ2tV8j5DK(%VG{)j-Sio0WG!rVJojAz8$NK@?~uM@%Wa
zyNxTydNH#Ko6Aa)AUj6_2B@7;m)NqTnZ#y2H@&LuX^IDWs~*|=6#0eDXx6SZt5{}t
z*0Q0BpW9^w(MoeidxzWFCbi>KK>TpuN#c06bT|IGX?$8Pa6$2PfGU5)^oUY>^l?oW
zO$zXNT;?kG!l|n9SSIR%OA^4a)CDy}viSzBpK}0W9Vxl)c06iilWg!a-V^ztMwBZzP
zq!EA&9tS5m;cvrVDxd&dD%?#9?y*g4T&&o=b)i90ror)C0d$Tg50aR=6Y`7WfRVX<
zY@eog)P`oY#>1O`q~&E01da05x^i$L8NFR0)K&0da5Q#(k9=w~mi0m-9sf+nu)^sq
z!cj+#b_Nr35S{qZTZ7QT@cHhvZpBd4F!mavel#ML;4(f9*`uPk)>ImOaxXP+XlwZSD#eMv6LVc4EzyK?&~Dw
zz3Iu)L??6c{BYAy^LpoEQcW~%nBx1UI)jU~*+KeDW#zd%w(5H-`A-hL5WtoBdnfv!
zn>!gn>4gXqtDq5f*d3}=TSrxGHmJQzoNi3?{PC_o>a1zIB`M_5KE>%B4O|&6ieQFX
z+Lea1?oW#HFt0f}?6^wxkG9TF-DE#Xb13)&KVH|-|5&Z3$s8LoUvDzKX2s|90S7Vj
zyo%1_K!puRxeLRQ~-tL)Lk(<^7wRe==A8&+oIY~(tp&N
z5k8iY&n$g}>l>s-w9CF(_cF!}thPdcn}msd_N5rpWzQ)y)H4Z-YwIR1c#Fx-st(s!
zi+wQ`{KZX~_{@_2<-2Q4+1XFmgwTT*=n#Zsg~)l>$k_%+ETIrAhBX=g#Mx-r^ST0P
z{o4ie(pVUY?WZCRqRQoMwB1FPQo`-o-RO6iON{3kf$T{HfX@shyMjz57Lq)Swnnwk
zBN8?
zCAR13nEXFp?n-S2qv9K9lPaC&|Ma$c(>!aPV0*j6iVHx7>rONw(GrqyrTZ*<GME`<$1^ZPm2wq6r@jNm_K|EyR~Z-B1QryJm*d
zfB#8h>@GQB!}5^u0P#kdB+Dhs$Uk%u1E1w^lSSGhhuckMIa?os+^$dzJ-_&t^F^Ya
z%s|&)3Z{^5d6TQPRwHw3RUI^NmjJD-KXuPY%AUj$9CyQs#C&*P{xVPb{Kb8aSfET3
z<-z;?`VF+<6?tQvOCibjt+SopH$LUJCGnMLmq;5!Us#yFWKhjgAO5)GkuoyD<
z7q31mc55ml)HjSQccPKqage2!9H5udDv}Oa)aKT)QBix3XJu|Ai3(01lZ-R?h9Ax`
ze$N%5v#a$Wk*q8sbT1Gg_Fao!>hHwQCy#n9B(Y8XaW@HdT2@e|2cx#94_700J}83C^)b35buF2sX$YMDx!@)O-$&uiuSLd$|4FhO2_
z+`66jd9(%hRK(0gsj+Jb)we6ZvaMN8G?7|ah#QV}c**%eoF9f53oE77{WjVXIS1M%
zezyrYYFRswyujrchH-GNKU3@lE>Z)0Y2KKv%rsM`L?O8Ym~WvOIg`uQv$XMT_4$-)
zBYAHaFYrsM-Eq?jx+d(IBFe03o<{aFn%NihbAHz)w#hY*lg)LfCDU@>d=8(&u(m`B
zES5cL^pY9fR{z=a_4{nF2J_ZmcAcv*+}t@^zvnAUzR^4|1%XKiM+e5_nNXoG$8U?X
zQsX_xl&Q`{r~9fgviP=&2LF0?z5vw;Oy>3TFcQhkLrzOl9mY=-^e1n3wb`%t$i9i0
z+;qs?}N7)R11X
zx@)1@RW07Vw&urNE*yK^7=KFn>Rc{k+A2O5;pOZ5gxvk%?5Dzu^w44#bAL@9u<>0!
z9JipJ!xQ^R;N3)Pt3P>Q0(M3iM#zBx(|SUq=%<%wu-S&8v{6;^S7&C`u{GBk(B;I6
zGKM4D$D+|W%dyFBk$Jhgk;HZx9w|+`@!(@o6?SEfTW?foEA7+egkq|POjrv2=H6yB
z!$`85N0;QIEiqr0&F2JGQJ|1wb*zLDI)
zC{6EI^RaBXCm$++e~_9CBk&yaD$M{Qv6u?<2u=*WO?LbXH{xRTh!qnj!}8tL6vM}Q
zeOoytL%7^!Qy+zhB=_X|aAyhMZrBZIYr1Qfr0VLR__^|gyvB{j^bMnO*B91@joy;UpcF=n_-V(j!hj@B1VocP0ADd?F9uwIez6YjJ`Ym>YYV8F8ad&&_{wQA0$W_V8wIUr-lpa)#pV3W{
zlP6nZup4nlD1&RpZ%fJq<3%Ug7wsu|ZE|jmGp7YNJXIS4;;s{46Qw+WMM$Wts!C$ANTFAOk#Kn$$YVL0ZpGFHU;RP946pyUjF9wCWVR&4^jyE0min
z;fc<6s0$pzeAdsjW7V5VBcW4dQ{GpYRzea>McD}I$4oqbCH28$IUN6hw>%tIfj)K8
z&K^h@@=yDV`wFPmm-i*N3t~i*E{#V@k{1u0x(B0UkB>Hclf|u%j8upF6Z9+U=evB%%JFUHnOBYKUp2ci(eL4YMzB>ecU8DCc)z_5TWq$Ycz
zc2$mRTyeXl$`xm68^*1YTjp(f1f@y?g~Kt;AljeLI0}{
zw8tldxfQ`{Sog#2;TpZ}6Z}6B_eQXL0}&l;NZ4Fy5@QWN(JNIdcmFbMn8RK%#UiKs#IQ5z=~
zw^o(;_F19xil!{g8)|>dAW^c}1=yRhXjE5ThJl5+KH~MyT)#lOqgWlw51y2{4Ch!F
zgB>#v5oJg*yYx!v9sBG6B3$t1=7m{O;JPjq-4lo%B<82-`t#AN>EQ`hj}03jZ@t?W
zBmwA7*ckgRD4!o!PO~iwH{{=FwCkCMz_w@J4ioh+S2yfhx+Bd)D$hvz$f=Vv-^@eu
zCPp-;jQGZ%lhRaPT4MML6{8Hiq3cq2kC)+8(~U?i8FkTUp}Dz<
z=86f(`i@iY(F5u^UH!!|`TLr>r>7Pb-l#Y_gQopuzQD)v>+%i5z&=a2T`nR~{5G4v
zqg6lO>pF+s9qUkQS?O)6L$Hk|;R~I!?s`>1w$Qoyr}%4A_m>1sBD!{ipv-T~hnII{
z_CM4h+<-V~(I>N27NQae8ij!>O%5$`Jp9OBeDpeU^R!DX*w2o>Bba3Ap>J!qv$}nI
zA^Ukd^So=1V@5wsv6xsw*cHvy>WEz~1JCCjLVyL%KIS
z)JiandqiDtYQ0QZO=7f`ic5Pxe8k%gz9OJ+FIA!MlktSNJvgSc^s;)r8Z+BOy^1u*
z<9DN=mR{zA-i))EpuMFC?FTL`=AUKK$2a#p0FKRz)!|fAn4=R6%pVDgpr2d5jYBpl
zT&&#H-6x$wjwWoL#(DpuAiMh&$%i%6mP>j?8-adpeMcl7nzoZ@`OP|RtLBlqKQr=y
z+97(&WAfOtUkda3oxiF#NQ=D{s44Ya3loc)qyM?-w5K=#fl*)Jg%E8O_r*1Dk{(DN
zm7CKgwR~0fkgJF)@)6Q_Y>esoJ7kCSfR1EiKy3+q9Rs^A3@boS8CtU^tXRFTigA-|
z)AmK>@!Gd_*5^*S{^<`Ox2;4NdcJdZD9zrz3oJ5w@@L*Ji9jr2lpZIbyl)rtNpAK7
zAtW2sVkY-qoM^i~J(;>s9QZ-k??eC@Rw&GyWyu^AlL9Y8=po$c*ZJjL6Rc?ow;-Oo
zbMy5!QOZwEEv_)P`?u2GAsrW&A&hBNU=W^bx;3fQrpF7ftqfBYZkQ_4n)H^YvO`m)(aQ8m2e8Kce9I@X*$!`Fy8DBlTgkZP$
zr9XGIBe2&m5-T1(-cQKn0@F^GpJzuCK$X^vD(2Z~#r;1!5XbzvUNbEWX-9k@_qWOl
z=soraXUQ_skzfB3$0)m|IP<)s*DS>Id81M2>6*dJVH|`ou;(<%*zI??nPAy_)*fOf
zDrXEb`;pTBBNkP+a1N?g=TrhRPQ6W7-tP~Iv1CKNqN(moOa!l0a!2|;R;_fq$=sme
zlEg8|)6-vgH!a3odPR|iSrvdAdb$*#a+j6_xe7>P{bgQ>P_f8#Dva<00sZsfeib!i
zzZDpZ7IpP
zASn}*?;Jz>puS~CWaH#2OXu#z#AaMAoxF8w1RJsy<@MqNnEzw%*&%E-^QKLtGSjAh
z7>3lQY>8U_PPAyerohT!iH*F8?9^^eJF*i=pT&tE90~!r1+(F^k}>FyAeHt3*>YzweM{p;jJnr}m2RtC8oyJ{ehhm@GDc
z72rDvmlAyZF`VY5DD9G1R4Q@!S>5R$m3SNf*dlF&6HV6%o?%$o=32;~iiK^_y`q86
zRza%8qIp|$VZ+SDg<_qXEeu=si9gVt(m@)E&4j(lv;~4)K<&n_nAna=i-3Ax(!x`p
zaX0?lIc-EW;_i}$@#>rK?8g$x%T?&cVV`Y}`C@s?Vyu$wl=+SBkj3bIe{--MArwX0y?@c^GxDhjA(JY-ef9>j#xoKHKuXo%W%ju@h3P#hR)sS)t(c)r
z>-m}TN@EVcdr%}}jvkfLT2kSq#5#!vt0s#~L{cMs+gRibWR6~GCUcNON
zlGf3t&+IVvbqZe;YTG^^6tX(QU*4=98f(gyo0spkz;$?t>Tg1jzO}v+{O6Ac5kFG&
zWi8g0xass2cxwt^$n(dlN2>-z^WW$_c}=={-X49sdv~K3b6c-q8TOrb-ZUyn1~eO%
z&Fk7uQCY@I3RUqn$>M@=DTo)(M#*H(bJCFgH1XimU(niHP)XO+O%IcKk;5jA*5+mh
zziN*nDkKmRleIZ-u@TK))HHEym@_SjZ{HWN(+00Osw9ETQwZMbhF9?grs+<9Ab`PX
z=gi&kntEpW
z8+VVDei!tUFb?4Fj)IHYG>f00oX~Mf*Wsuy!K8WvT{)?JXFV>jh$Pkuem@-Xu1$w%t
z-q@G39(H%e2vL6&)$%%$L~I>{L8-JN=(6W^Kcyn-HC7qnF2$;!m{=Z`i^*}8rNEX&
zQZnSL5w?plQ?UeRrIOS@)(?P0r|I%gg~M61&lkQLo2r1;%EXn(k-neAblP#YIKev{
zZriaCCX=((tmIg+-#nx%iDe(I>VJ9JzuXk?b)l{r<;=^!zBn|#en__FL1m1W$0_Gs?7tZe5}?mdB>v49*k9vSRl#5I(H$w^ZMOpBm3hyS^)hdEZV-|}IJDfH#B6u$A*3!#B)Y0#%tQz<6074KM1uU1nx8nJ9
z5H<1VJYw=D8qrF&ujbgYb>EJ;4$YZ3RJYOezPFIdH&wSZ(Ko|e%Z-cq8AT#YW!;-F
zRWMwLnI)gDkswBakL|)zxy`@7$ScNN@Lh6Y>=nxTg4U98h<24u3OvHc6e4HV+
z2We0Yx5_pq(i_F@?N&RC!SEKdNZns<0O9jlDwP1Dp5(MT`(5&N)p7tt?P>$`=J567ETtfh7+GG
z6{4G`+&@_Akc;)+5lIQ53YHV7+uUNd4;12&ZWZr-enQblV_
zck=eq);p-8)1?}0Jax$)vE`NaSX(~WaF7GIzDv3U3%up5wiI*u&M0D8zg!&Zl`^SU=x8KG6{Z;tU-EgTq}_#~eTU
zE8%QaeS6g+;}2PTb^dpL4C_E6U~~FqKAcUuR17_RdjPVF<6Ddyh|B
zPWQJo*St{hztgCdvpG7exa9F7if7}Sjv@I-NwO2a;;J%8dK(z-E3EW(|25JDy3Q%1jqeo3MY1>0GS9H4cy_EdJqtRMu}t@XpV1lB#W&
zXYu{g9l{CV-_CL*F3#ypVxqvL>(faJ%q`c5nO3tfzVO7x=yJ1H2aC|cz1>l@M(ukS
z>Y7Pbs+)lJ0$)Ij2OD+R?xoIpML`AQ*v~NQ-@aL^#0ZX<+iq}(llN7SJGB?^q;J#x
zVi?xkp~@=|^_E2h(r#e=C!Q8#GjP*c)8x;HseA_ndoLdQjnCNEwn$A^`;N_3pz`Az
zlZGs}l`pNwXRqSzq&QS?e|V^0Z_CdW_^hTdD!|xJY10_IDmC8=*2jjxHg6ocM|?h5
zrqF2YSkb+S`VA4LJoxsU;;Y_{64ImymLuKDh4z@x*P(s-EhpdYa81F_@J*(%oB>6fSLIdFyM9+MmpghmbvP|EECECwO~2-cEz#gVfq>2B$1{m4f%W%+Mk9V`y1Z&qw1xQYmvrRKJy9&j3Ht2icjoaZ{riEL!!)Ef_;98#7IvC?h`>
zUWsvETerS@D>XK#%Lak(MzuurAnY)8;8!N`MMUCno26i3O!5Q3fsOL_YQT7?dcbd`kEpsd`e+O%4+k-(+;&l5b3)iW>M
zy{P2qOg)}-AD#KDu}}b7THozRA}IHv=wUt*?@Wyu^IAGGntP5?Xbw6oA1!5hNv7zUSZ3nIs}>lK|4Etf>s7%~v0@yBinCMR{07!&4CeS=HYryx
zVNRV2k2{)+>J@1nl7IimQrmb=T-e2$gOeJU51~*C%w1gO}vilR4x%tw8%_PpMi)SnV<@;
zAT6*pMEg#Ior)hPyYOU{T8>NOy_$8bSBu~8bU72!7T7=2E(mGfs3+k2Osr
z6<^lpxUP=FkkX(?g<~2EOMXo7iB5265bmEPNX6F}P
z?T;S=2j0CMb(OOSGDi`lo1D1&g;8CrnE-`}ADb&cGuf<5`rN-`oP?T68v)x|@8VE?*bswwzbAc*WpLC^J&mBsK%?j1O~bWu?_g^a*4E6&dsylb9#@BBMQB
zl-BFH-2I2(JXA<#Ri`Zb`$6(O-s$r~tAxu%p`G>NZ+XQDKonJNM_5|ABnN!uwC;X1
zfFwdsl^#{|weCODU?{x4ZyjAVDXynKe*bahYl$a?SAg(C*@6H-l#EKS3qJZY7^P8E
zcp<2Od2vlN`_&(BJMl@%6?b(N+f9(mrAEh&
z|3kX>{qsUp)%|ezLBSEqLWRXX{dy!rDhJL=;k_Rh>~^__66t=wWpQ%s9oshO^?w2K3Y^t*tb$@ue6!ABI!T+t`%%xBZ&Ptt$vwL2vZgp?d4{UJZe@OnoLJZ&
z_#pfF|E@3N1IUo`AF%?fx#VudtNZbD*@PNW`osW*^NdeN*7yC;8D`3`9hCB=$Z+@Bvn`FLr7e@)lzSg~1ws
zko#}2J?tE$P|@}ZMHRdhUfqiHx$vcB|J(a3
zP$VYb%@p){_u%7|%8go0s*%ipiKw*bd-v~grG)vp7N|blFRQkr*+L&%*;@S|k+{JZ
zlV;Nvbp#af-8+tuAPT{2;Qto=;KeTny(eI&Z3*6e^<9oes+<8sd0YKp?y%MARp9z^)5$=D`t&loncZoo~1V=
z{_Oy)!G|M(!L7q3x(l1f7b%ta_cc1NzNpFid=eO&f|HZQg@bM$9Qy^P-Tn7KjsuRN
zGVMnE!~D0@z@qipYp1uM6FDTs)yd+SI{ABghJLV+Oo=uL<8&I(iAjw2eutJadi~Ah
zzRrZKWxRX$@6pAgX8!+fPG+4^jBUEC6|2JT;4wSNf7emzfB2{WjMN%XFYhEu`6cvU
U1t7m-@X;e>c{RBTfLZYW0`7zZj{pDw

diff --git a/docs/chapter2/section3/images/test_result.png b/docs/chapter2/section3/images/test_result.png
new file mode 100644
index 0000000000000000000000000000000000000000..3d55b37fea4db91470f98375d6b4ec6a5d37f29a
GIT binary patch
literal 8340
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
aH!PM}PFQw1qsP(_0J_=_?pA6(eDxnis+l$b

literal 0
HcmV?d00001

diff --git a/docs/chapter2/section3/images/test_result_all.png b/docs/chapter2/section3/images/test_result_all.png
new file mode 100644
index 0000000000000000000000000000000000000000..02824e5834f0c97786df9d3fe34d8137048a5c30
GIT binary patch
literal 19369
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
9zsz&1p(y2-S5j@kWl2Q$~ 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 VfF}!Eh;RS^002ovPDHLkV1mi@bcO%` diff --git a/docs/chapter2/section1/images/3/postman1-unauthorized.png b/docs/chapter2/section1/images/3/postman1-unauthorized.png index 0689452dffa8cd57b6aa52189597fa8ea163207e..308c120ffa50fdf95c9ebf64da9aba9d55603c3c 100644 GIT binary patch literal 36956 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 Ue{9yVZeaidPgg&ebxsLQ06cv}fdBvi literal 26384 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 literal 30869 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 H=5PK7sre~F diff --git a/docs/chapter2/section1/images/3/postman5-cookie-value.png b/docs/chapter2/section1/images/3/postman5-cookie-value.png index b9d2a5c51a54f36cbcb5440b05e09f02f6bb2520..f9549f03ccab570686a376468e42fb924eb2633c 100644 GIT binary patch literal 32521 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 diff --git a/docs/chapter2/section1/images/3/postman6-authorized.png b/docs/chapter2/section1/images/3/postman6-authorized.png index e8c435fd1ea0c6f24d4f9a15e76dc7d056382bb8..38b7107898ebf1fc421b8072f04cf03be9949ce9 100644 GIT binary patch literal 45741 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 aw%zOszgJ3~ZU%S<)9F(NCvy>3{QnDL8oB%c From 3238c6f373b0f73664bf32590e2c25c140c6febe Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 04:14:13 +0900 Subject: [PATCH 54/57] feat: rust install --- docs/chapter1/section1/0_setup-windows.md | 48 ++++++++++++----------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/docs/chapter1/section1/0_setup-windows.md b/docs/chapter1/section1/0_setup-windows.md index 46e43ab4..5940291d 100644 --- a/docs/chapter1/section1/0_setup-windows.md +++ b/docs/chapter1/section1/0_setup-windows.md @@ -1,9 +1,9 @@ -# 環境構築 (windows) +# 環境構築 (Windows) [[toc]] :::warning -コマンドは手入力ではなく、コピー & ペースト で入力してください。 +コマンドは手入力ではなく、コピー & ペーストで入力してください。 手入力だと写し間違いの可能性があります。 この際、1 行ずつコピーするようにしてください。 ::: @@ -36,11 +36,11 @@ https://code.visualstudio.com/download ### 拡張機能の導入 -VSCode は拡張機能により様々な言語でのプログラミングをラクにすることができます。 +VSCode は拡張機能により様々な言語でのプログラミングをラクにできます。 次回以降に使うものも最初にまとめて導入しておきましょう。 -- [Go](https://marketplace.visualstudio.com/items?itemName=golang.Go) - - Go 言語で書いたコードをチェックしてくれたり、プログラムを書くときに補完 (予測変換のような機能) を使えるようになったりします。 +- [Rust Analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) + - Rust 言語で書いたコードをチェックしてくれたり、プログラムを書くときに補完 (予測変換のような機能) を使えるようになったりします。 - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) - コードの書き方をチェックしてくれます。 - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) @@ -50,10 +50,28 @@ VSCode は拡張機能により様々な言語でのプログラミングをラ インストールが終わったら、反映させるために VSCode を 1 度閉じて開きなおしてください。 +## Rust のインストール +Rust をインストールします。 + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +このコマンドを実行すると、Rust のインストーラーが起動します。 +選択肢を求められたら、 `Enter` を押してください。 + +インストールが終わったら、一度ターミナルを再起動してください。 +その後、以下のコマンドを実行して、Rust のバージョンを確認してください。 + +```bash +rustc --version +``` + +`rustc 1.82.0 (f6e511eec 2024-10-15)` のように、バージョン番号が表示されればインストール完了です。 + ## Go と Task のインストール ここでは、Go というプログラミング言語の導入をします。 -この講習会では Go という言語でサーバーサイドの制作を行います。 ``` bash sudo apt install tar git @@ -88,28 +106,14 @@ Task GitHub [https://github.com/go-task/task](https://github.com/go-task/task) ::: -### Go のツールのインストール - -VSCode で `Ctrl`+`Shift`+`P` を押して出てくるコマンドパレットに`gotools`と入力して、出てきた「Go: Install/Update Tools」をクリックしてください。 - -![](images/vscode_gotools.png) - -利用可能なツールの一覧が出てくるので、全てにチェックを入れて「OK」をクリックします。 - -:::tip -一番上の入力欄の左にあるチェックボックスを押すと一括選択ができます。 -::: - -出力で`All tools successfully installed. You are ready to Go. :)`と出ているのが確認できたら成功です。 - ## asdf の導入 -asdf とは、一つのプログラムの複数のバージョンを PC 内で管理できるようにするものです。 +asdf とは、1 つのプログラムの複数のバージョンを PC 内で管理できるようにするものです。 それ以外にもあとからバージョンを更新するのが容易にもなるので長期的に見るとオススメです。 [公式資料](https://asdf-vm.com/#/core-manage-asdf) -以下のコマンドにより asdf の導入を行います。 +以下のコマンドにより asdf を導入します。 ``` bash sudo apt install git From 952143eb3b8b8251c97467b9168f497a2f050815 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 04:34:30 +0900 Subject: [PATCH 55/57] feat: rust install --- docs/chapter1/section1/0_setup-windows.md | 1 + docs/chapter1/section1/1_setup-unix.md | 37 +++++++++++++++++------ 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/docs/chapter1/section1/0_setup-windows.md b/docs/chapter1/section1/0_setup-windows.md index 5940291d..ffc23ab4 100644 --- a/docs/chapter1/section1/0_setup-windows.md +++ b/docs/chapter1/section1/0_setup-windows.md @@ -51,6 +51,7 @@ VSCode は拡張機能により様々な言語でのプログラミングをラ インストールが終わったら、反映させるために VSCode を 1 度閉じて開きなおしてください。 ## Rust のインストール + Rust をインストールします。 ```bash diff --git a/docs/chapter1/section1/1_setup-unix.md b/docs/chapter1/section1/1_setup-unix.md index 10e8e743..330390af 100644 --- a/docs/chapter1/section1/1_setup-unix.md +++ b/docs/chapter1/section1/1_setup-unix.md @@ -3,7 +3,7 @@ [[toc]] :::warning -コマンドは手入力ではなく、コピー & ペースト で入力してください。 +コマンドは手入力ではなく、コピー & ペーストで入力してください。 手入力だと写し間違いの可能性があります。 この際、1 行ずつコピーするようにしてください。 ::: @@ -13,7 +13,7 @@ ::: tip 質問をするときにはできるだけスクリーンショットを貼るようにしましょう。テキストだけで説明しても解決に必要な情報を全て伝えるのは難しいです。 -`Control + Shift + Command + 4`を押すと、矩形選択でスクリーンショットが撮れます。 traQ のメッセージ入力欄に` Command + V`で貼り付けられます。 +`Control + Shift + Command + 4`を押すと、矩形選択でスクリーンショットが撮れます。 traQ のメッセージ入力欄に`Command + V`で貼り付けられます。 ::: ### Homebrew の導入 @@ -32,17 +32,17 @@ Homebrew とは、様々なアプリケーションをインストールしや すでに VSCode をインストールしている方はこの手順を飛ばして大丈夫です。 -以下のサイトから`macOS`の VSCodeインストーラーをダウンロードして、それを実行してインストールしてください。 +以下のサイトから`macOS`の VSCode インストーラーをダウンロードして、それを実行してインストールしてください。 https://code.visualstudio.com/download ### 拡張機能の導入 -VSCode は拡張機能により様々な言語でのプログラミングをラクにすることができます。 +VSCode は拡張機能により様々な言語でのプログラミングをラクにできます。 次回以降に使うものも最初にまとめて導入しておきましょう。 -- [Go](https://marketplace.visualstudio.com/items?itemName=golang.Go) - - Go 言語で書いたコードをチェックしてくれたり、プログラムを書くときに補完 (予測変換のような機能) を使えるようになったりします。 +- [Rust Analyzer](https://marketplace.visualstudio.com/items?itemName=rust-lang.rust-analyzer) + - Rust 言語で書いたコードをチェックしてくれたり、プログラムを書くときに補完 (予測変換のような機能) を使えるようになったりします。 - [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint) - コードの書き方をチェックしてくれます。 - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode) @@ -52,10 +52,29 @@ VSCode は拡張機能により様々な言語でのプログラミングをラ インストールが終わったら、反映させるために VSCode を 1 度閉じて開きなおしてください。 +## Rust のインストール + +Rust をインストールします。 + +```bash +curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +このコマンドを実行すると、Rust のインストーラーが起動します。 +選択肢を求められたら、 `Enter` を押してください。 + +インストールが終わったら、一度ターミナルを再起動してください。 +その後、以下のコマンドを実行して、Rust のバージョンを確認してください。 + +```bash +rustc --version +``` + +`rustc 1.82.0 (f6e511eec 2024-10-15)` のように、バージョン番号が表示されればインストール完了です。 + ## Go と Task のインストール ここでは、Go というプログラミング言語の導入をします。 -この講習会では Go という言語でサーバーサイドの制作を行います。 先ほど導入した Homebrew を用いてインストールします。 @@ -104,7 +123,7 @@ VSCode で `Command`+`Shift`+`P` を押して出てくるコマンドパレッ ## asdf の導入 -asdf とは、一つのプログラムの複数のバージョンを PC 内で管理できるようにするものです。 +asdf とは、1 つのプログラムの複数のバージョンを PC 内で管理できるようにするものです。 それ以外にもあとからバージョンを更新するのが容易にもなるので長期的に見るとオススメです。 しかし、本講習会で必須というわけではないので任意とします。 @@ -115,7 +134,7 @@ asdf とは、一つのプログラムの複数のバージョンを PC 内で [公式資料](https://asdf-vm.com/#/core-manage-asdf) -以下のコマンドにより asdf の導入を行います。 +以下のコマンドにより asdf を導入します。 ``` zsh [Mac] brew install asdf From a6e6d006d75c97fea6b917ce65dc7d6c6e0052b9 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 04:48:44 +0900 Subject: [PATCH 56/57] feat:add asterisk --- .../sidebarConfigs/chapters/chapter1/dicts/clean-code.ts | 2 +- .../sidebarConfigs/chapters/chapter1/sections/section1.ts | 6 +++--- .../sidebarConfigs/chapters/chapter1/sections/section3.ts | 8 ++++---- .../sidebarConfigs/chapters/chapter1/sections/section4.ts | 6 +++--- .../sidebarConfigs/chapters/chapter2/sections/section1.ts | 8 ++++---- .../sidebarConfigs/chapters/chapter2/sections/section2.ts | 2 +- .../sidebarConfigs/chapters/chapter2/sections/section3.ts | 4 ++-- .../sidebarConfigs/chapters/chapter2/sections/section4.ts | 2 +- .../sidebarConfigs/chapters/webBasic/webBasic.ts | 2 +- 9 files changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/dicts/clean-code.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/dicts/clean-code.ts index 3dfe1ad6..743bc7f9 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/dicts/clean-code.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/dicts/clean-code.ts @@ -2,7 +2,7 @@ import type { DefaultTheme } from 'vitepress' export const cleanCodeSidebarItems: DefaultTheme.SidebarItem[] = [ { - text: 'きれいなコードを書くために', + text: 'きれいなコードを書くために*', link: '/chapter1/dicts/clean-code/0_index' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts index b43347d4..2b02b1ca 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section1.ts @@ -1,10 +1,10 @@ import type { DefaultTheme } from 'vitepress' export const section1SidebarItems: DefaultTheme.SidebarItem[] = [ - { text: '環境構築 (windows)', link: '/chapter1/section1/0_setup-windows' }, - { text: '環境構築 (macOS)', link: '/chapter1/section1/1_setup-unix' }, + { text: '環境構築 (windows)*', link: '/chapter1/section1/0_setup-windows' }, + { text: '環境構築 (macOS)*', link: '/chapter1/section1/1_setup-unix' }, { - text: 'Rust で Hello World', + text: 'Rust で Hello World*', link: '/chapter1/section1/2_hello-world' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section3.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section3.ts index a832815b..14ae2af4 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section3.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section3.ts @@ -2,19 +2,19 @@ import type { DefaultTheme } from 'vitepress' export const section3SidebarItems: DefaultTheme.SidebarItem[] = [ { - text: 'サーバーアプリケーションを作る', + text: 'サーバーアプリケーションを作る*', link: '/chapter1/section3/0_hello-server' }, { - text: 'JSONレスポンスを返す', + text: 'JSONレスポンスを返す*', link: '/chapter1/section3/1_json-response' }, { - text: 'ルーティング', + text: 'ルーティング*', link: '/chapter1/section3/2_rooting' }, { - text: 'サーバー演習問題', + text: 'サーバー演習問題*', link: '/chapter1/section3/3_server-exercise' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts index 2554bbf5..6267f992 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter1/sections/section4.ts @@ -2,7 +2,7 @@ import type { DefaultTheme } from 'vitepress' export const section4SidebarItems: DefaultTheme.SidebarItem[] = [ { - text: 'データベースを扱う準備', + text: 'データベースを扱う準備*', link: '/chapter1/section4/0_prepare' }, { @@ -14,11 +14,11 @@ export const section4SidebarItems: DefaultTheme.SidebarItem[] = [ link: '/chapter1/section4/2_sql_exercise' }, { - text: 'Rustでデータベースを扱う', + text: 'Rustでデータベースを扱う*', link: '/chapter1/section4/3_rust_and_db' }, { - text: 'サーバーからデータベースを扱う', + text: 'サーバーからデータベースを扱う*', link: '/chapter1/section4/4_server_and_db' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section1.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section1.ts index de2f19c7..8f952a02 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section1.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section1.ts @@ -7,9 +7,9 @@ import type { DefaultTheme } from 'vitepress' // ] export const section1SidebarItems: DefaultTheme.SidebarItem[] = [ - { text: 'プロジェクトのセットアップ', link: '/chapter2/section1/0_setup' }, - { text: 'アカウント機能の実装', link: '/chapter2/section1/1_account' }, - { text: 'セッションの実装', link: '/chapter2/section1/2_session' }, - { text: '検証', link: '/chapter2/section1/3_verify' }, + { text: 'プロジェクトのセットアップ*', link: '/chapter2/section1/0_setup' }, + { text: 'アカウント機能の実装*', link: '/chapter2/section1/1_account' }, + { text: 'セッションの実装*', link: '/chapter2/section1/2_session' }, + { text: '検証*', link: '/chapter2/section1/3_verify' }, { text: 'おまけ演習問題', link: '/chapter2/section1/4_extra' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section2.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section2.ts index 393d06ef..f49931ba 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section2.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section2.ts @@ -3,5 +3,5 @@ import type { DefaultTheme } from 'vitepress' export const section2SidebarItems: DefaultTheme.SidebarItem[] = [ { text: 'vue-routerの設定', link: '/chapter2/section2/0_router-setup' }, { text: 'プロキシの設定', link: '/chapter2/section2/1_proxy' }, - { text: 'サーバーとの通信', link: '/chapter2/section2/2_fetch' } + { text: 'サーバーとの通信*', link: '/chapter2/section2/2_fetch' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section3.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section3.ts index cf214a59..ed4b02bb 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section3.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section3.ts @@ -1,6 +1,6 @@ import type { DefaultTheme } from 'vitepress' export const section3SidebarItems: DefaultTheme.SidebarItem[] = [ - { text: 'テストを書いてみよう', link: '/chapter2/section3/0_test' }, - { text: '自動でテストを実行してみよう', link: '/chapter2/section3/1_ci' } + { text: 'テストを書いてみよう*', link: '/chapter2/section3/0_test' }, + { text: '自動でテストを実行してみよう*', link: '/chapter2/section3/1_ci' } ] diff --git a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section4.ts b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section4.ts index f3ba6869..a2e635b2 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section4.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/chapter2/sections/section4.ts @@ -6,7 +6,7 @@ export const section4SidebarItems: DefaultTheme.SidebarItem[] = [ link: '/chapter2/section4/0_commands' }, { - text: 'Dockerイメージを作る', + text: 'Dockerイメージを作る*', link: '/chapter2/section4/1_image' }, { diff --git a/docs/.vitepress/sidebarConfigs/chapters/webBasic/webBasic.ts b/docs/.vitepress/sidebarConfigs/chapters/webBasic/webBasic.ts index 797840fa..e69d88e5 100644 --- a/docs/.vitepress/sidebarConfigs/chapters/webBasic/webBasic.ts +++ b/docs/.vitepress/sidebarConfigs/chapters/webBasic/webBasic.ts @@ -6,7 +6,7 @@ export const webBasicSidebarItems: DefaultTheme.SidebarItem[] = [ items: [ { text: 'はじめに', link: '/web_basic/0_index' }, { text: '第1回 | フロントエンド', link: '/web_basic/1_frontend' }, - { text: '第2回 | バックエンド', link: '/web_basic/2_backend' } + { text: '第2回 | バックエンド*', link: '/web_basic/2_backend' } ] } ] From d2022dc32fd2dfc44b6d80254b6b454a9dfb3e11 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 14:55:58 +0900 Subject: [PATCH 57/57] fix/delete gotools --- docs/chapter1/section1/1_setup-unix.md | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/docs/chapter1/section1/1_setup-unix.md b/docs/chapter1/section1/1_setup-unix.md index 330390af..4ee98f82 100644 --- a/docs/chapter1/section1/1_setup-unix.md +++ b/docs/chapter1/section1/1_setup-unix.md @@ -107,20 +107,6 @@ Task GitHub [https://github.com/go-task/task](https://github.com/go-task/task) ::: -### Go のツールのインストール - -VSCode で `Command`+`Shift`+`P` を押して出てくるコマンドパレットに`gotools`と入力して、出てきた「Go: Install/Update Tools」をクリックしてください。 - -![](images/vscode_gotools.png) - -利用可能なツールの一覧が出てくるので、全てにチェックを入れて「OK」をクリックします。 - -:::tip -一番上の入力欄の左にあるチェックボックスを押すと一括選択ができます。 -::: - -出力で`All tools successfully installed. You are ready to Go. :)`と出ているのが確認できたら成功です。 - ## asdf の導入 asdf とは、1 つのプログラムの複数のバージョンを PC 内で管理できるようにするものです。

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 -> HashMap { + let mut map = HashMap::new(); + for city in cities { + if city.country_code.is_empty() { + continue; + } + let entry = map.entry(city.country_code).or_insert(0); + *entry += city.population; + } + map +} +#endregion calculate + +// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる +#[cfg(test)] +mod tests { + use super::{sum_population_by_country, City}; + use std::collections::HashMap; + + #region empty + #[test] + fn test_sum_population_by_country_empty() { + // ここにテストを追加する + let cities = vec![]; + let result = sum_population_by_country(cities); + assert!(result.is_empty()); + } + #endregion empty + + #region single + #[test] + fn test_sum_population_by_country_single() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "JPN".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 300); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } + #endregion single + + #region multiple + #[test] + fn test_sum_population_by_country_multiple() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "JPN".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + City { + id: Some(3), + name: "New York".to_string(), + country_code: "USA".to_string(), + district: "New York".to_string(), + population: 300, + }, + City { + id: Some(4), + name: "Los Angeles".to_string(), + country_code: "USA".to_string(), + district: "California".to_string(), + population: 400, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 300); + expected.insert("USA".to_string(), 700); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } + #endregion multiple + + #region empty_country_code + #[test] + fn test_sum_population_by_country_empty_country_code() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 100); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } + #endregion empty_country_code +} From 2e3ebcdb71e0ab4bff53fe2518d24bba5b803869 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Mon, 11 Nov 2024 03:53:33 +0900 Subject: [PATCH 42/57] feat: add ci --- docs/chapter2/section3/0_test.md | 1 + docs/chapter2/section3/1_ci.md | 69 +++++++++++-------------------- docs/chapter2/section3/src/go.mod | 3 -- 3 files changed, 26 insertions(+), 47 deletions(-) delete mode 100644 docs/chapter2/section3/src/go.mod diff --git a/docs/chapter2/section3/0_test.md b/docs/chapter2/section3/0_test.md index a7411e11..33c50b03 100644 --- a/docs/chapter2/section3/0_test.md +++ b/docs/chapter2/section3/0_test.md @@ -85,6 +85,7 @@ mod tests { } } ``` + ### 課題 次のテストを実装してください。 diff --git a/docs/chapter2/section3/1_ci.md b/docs/chapter2/section3/1_ci.md index b2157e66..01b77a64 100644 --- a/docs/chapter2/section3/1_ci.md +++ b/docs/chapter2/section3/1_ci.md @@ -33,12 +33,9 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` 以下、このファイルについて解説していきます。 @@ -58,12 +55,9 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` `name`は、この GitHub Actions の名前です。 @@ -85,12 +79,9 @@ jobs: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` `on`は、この GitHub Actions が実行されるタイミングを設定します。 @@ -104,17 +95,14 @@ on: branches: - main pull_request: -jobs: // [!code focus:11] +jobs: // [!code focus:8] test: name: Test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` `jobs`は、この GitHub Actions で実行する処理を設定します。 @@ -134,12 +122,9 @@ jobs: name: Test runs-on: ubuntu-latest // [!code focus] steps: - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` `runs-on`は、この GitHub Actions を実行する環境を設定します。今回は Ubuntu の最新バージョンを指定しています。 @@ -161,13 +146,10 @@ jobs: test: name: Test runs-on: ubuntu-latest - steps: // [!code focus:10] - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" + steps: // [!code focus:8] + - uses: actions/checkout@v4 - name: Run tests - run: go test ./... + run: cargo test ``` `steps`は、この GitHub Actions で実際に実行する処理を順番に記述していくところです。 @@ -176,15 +158,13 @@ jobs: `uses`は、GitHub Actions で提供されているモジュールを利用するための設定です。 -例えば、`actions/checkout@v3`は、リポジトリをクローンし、指定したブランチに移動するモジュールです。 +例えば、`actions/checkout@v4`は、リポジトリをクローンし、指定したブランチに移動するモジュールです。 デフォルトでは、Actions がトリガーされたブランチに移動します。 -同様に、`actions/setup-go@v4`は、Go の環境をセットアップするモジュールです。ここでは`with`を使って引数を渡すことで、Go のバージョンを指定しています。 - #### `run` `run`は、シンプルにコマンドを実行するための記法です。 -ここでは、`go test ./...`を実行して、テストを実行しています。 +ここでは、`cargo test`を実行して、テストを実行しています。 ## 課題 @@ -192,20 +172,21 @@ jobs: ::: details 答え ```yaml -on: +name: CI +on: push: branches: - main pull_request: + jobs: - build: + test: + name: Test runs-on: ubuntu-latest - - uses: actions/checkout@v3 - - uses: actions/setup-go@v4 - with: - go-version: "1.20" - - run: go mod download - - run: go build + steps: + - uses: actions/checkout@v4 + - name: Build + run: cargo build ``` ::: diff --git a/docs/chapter2/section3/src/go.mod b/docs/chapter2/section3/src/go.mod deleted file mode 100644 index 6cad3e93..00000000 --- a/docs/chapter2/section3/src/go.mod +++ /dev/null @@ -1,3 +0,0 @@ -module test - -go 1.19 From a4f6c82ef1f4bdd4c00ab235c4852398d456797e Mon Sep 17 00:00:00 2001 From: kenken714 Date: Mon, 11 Nov 2024 18:42:18 +0900 Subject: [PATCH 43/57] feat: add main.rs --- docs/chapter2/section4/1_image.md | 24 +++++++++-------------- docs/chapter2/section4/src/main.go | 31 ------------------------------ docs/chapter2/section4/src/main.rs | 25 ++++++++++++++++++++++++ 3 files changed, 34 insertions(+), 46 deletions(-) delete mode 100644 docs/chapter2/section4/src/main.go create mode 100644 docs/chapter2/section4/src/main.rs diff --git a/docs/chapter2/section4/1_image.md b/docs/chapter2/section4/1_image.md index e1bc9531..17e2c4a9 100644 --- a/docs/chapter2/section4/1_image.md +++ b/docs/chapter2/section4/1_image.md @@ -4,36 +4,30 @@ ### コードを書く -`naro_server`というディレクトリを作り、その中でコードを書いてください。第 1 部でやったように、 Go を使って下の条件を満たすサーバーアプリケーションを作ってください。 +`naro_server`というディレクトリを作り、その中でコードを書いてください。第 1 部でやったように、 Rust を使って下の条件を満たすサーバーアプリケーションを作ってください。 - `/greeting`への GET リクエストに、環境変数 `GREETING_MESSAGE`の値を返す。 - 起動するポートを環境変数`PORT`で指定できる。 -`go mod`コマンドで外部ライブラリを管理しましょう。 - -https://go.dev/ref/mod - -```sh -go mod init naro_server -go mod tidy -``` - :::details 答え -<<< @/chapter2/section4/src/main.go +<<< @/chapter2/section4/src/main.rs + +※ `axum` や `tokio` の依存関係を追加する必要があります。 ::: ### ビルドして実行する -今までは`go run`コマンドでプログラムを実行していましたが、Go では`go build`コマンドでコンパイルして実行ファイルを生成し、そのファイルを用いてプログラムを実行できます。 +今までは`cargo run`コマンドでプログラムを実行していましたが、Rust では`cargo build`コマンドでコンパイルして実行ファイルを生成し、そのファイルを用いてプログラムを実行できます。 ```sh -go build -o server +cargo build --release ``` -上のコマンドを実行すると`server`というファイルが生成され、`./server`で実行できます。 +`--release`オプションをつけることで、最適化されたバイナリが生成されます。 +以下のコマンドで実行できます。 ```sh -GREETING_MESSAGE="こんにちは" PORT="8080" ./server +GREETING_MESSAGE="こんにちは" PORT="8080" ./target/release/naro-server ``` 実行前に環境変数を設定しています。 diff --git a/docs/chapter2/section4/src/main.go b/docs/chapter2/section4/src/main.go deleted file mode 100644 index 673ab259..00000000 --- a/docs/chapter2/section4/src/main.go +++ /dev/null @@ -1,31 +0,0 @@ -package main - -import ( - "log" - "net/http" - "os" - - "github.com/labstack/echo/v4" -) - -func main() { - port, ok := os.LookupEnv("PORT") - if !ok { - log.Fatal("failed to get env PORT") - } - - e := echo.New() - - e.GET("/greeting", greetingHandler) - - e.Logger.Fatal(e.Start(":" + port)) -} - -func greetingHandler(c echo.Context) error { - greeting, ok := os.LookupEnv("GREETING_MESSAGE") - if !ok { - return echo.NewHTTPError(http.StatusInternalServerError, "failed to get env GREETING_MESSAGE") - } - - return c.String(http.StatusOK, greeting) -} diff --git a/docs/chapter2/section4/src/main.rs b/docs/chapter2/section4/src/main.rs new file mode 100644 index 00000000..70341915 --- /dev/null +++ b/docs/chapter2/section4/src/main.rs @@ -0,0 +1,25 @@ +use axum::{http::StatusCode, routing::get, Router}; + +#[tokio::main] +async fn main() { + let port = std::env::var("PORT") + .expect("failed to get env PORT") + .parse::() + .expect("failed to parse PORT"); + + let app = Router::new().route("/greeting", get(greeting_handler)); + + let addr = std::net::SocketAddr::from(([127, 0, 0, 1], port)); + + let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); + + println!("Listening on {}", addr); + + axum::serve(listener, app).await.unwrap(); +} + +async fn greeting_handler() -> Result<(StatusCode, String), StatusCode> { + let greeting = + std::env::var("GREETING_MESSAGE").map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + Ok((StatusCode::OK, greeting)) +} From 7b791ced38e8f80d15022914b20ead6442531701 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Mon, 11 Nov 2024 19:12:30 +0900 Subject: [PATCH 44/57] feat: Dockerfile --- docs/chapter2/section4/1_image.md | 14 ++++++++------ docs/chapter2/section4/src/main.rs | 2 +- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/docs/chapter2/section4/1_image.md b/docs/chapter2/section4/1_image.md index 17e2c4a9..057516a8 100644 --- a/docs/chapter2/section4/1_image.md +++ b/docs/chapter2/section4/1_image.md @@ -9,6 +9,8 @@ - `/greeting`への GET リクエストに、環境変数 `GREETING_MESSAGE`の値を返す。 - 起動するポートを環境変数`PORT`で指定できる。 +ただし、 listen する IP アドレスとして、**必ず `0.0.0.0` を指定してください。** + :::details 答え <<< @/chapter2/section4/src/main.rs @@ -51,11 +53,11 @@ Dockerfile を書くと自分で必要な機能がそろったコンテナを立 ただ、アプリケーションを動かすだけであれば一度書いた Dockerfile を使いまわすことも可能なので、テンプレートを探してきてそれを使っても構いません。 -以下が Go のプログラムを動かすための最小の Dockerfile です。 +以下が Rust のプログラムを動かすための最小の Dockerfile です。 ```Dockerfile -# Go のベースイメージを指定 -FROM golang:1.20.5-alpine +# Rust のベースイメージを指定 +FROM rust:latest # コマンドを実行するコンテナ内のディレクトリをworkに指定 WORKDIR /work @@ -63,11 +65,11 @@ WORKDIR /work # ローカルのカレントディレクトリをコンテナのカレントディレクトリ(work)にコピー COPY . . -# Go のプログラムをビルド -RUN go build -o app +# Rust のプログラムをビルド +RUN cargo build --release # ビルドしたものを実行 -ENTRYPOINT ./app +ENTRYPOINT ["./target/release/naro-server"] ``` naro_server ディレクトリ内に`Dockerfile`というファイルを作り、上のコードを書きましょう。 diff --git a/docs/chapter2/section4/src/main.rs b/docs/chapter2/section4/src/main.rs index 70341915..b5bdd89b 100644 --- a/docs/chapter2/section4/src/main.rs +++ b/docs/chapter2/section4/src/main.rs @@ -9,7 +9,7 @@ async fn main() { let app = Router::new().route("/greeting", get(greeting_handler)); - let addr = std::net::SocketAddr::from(([127, 0, 0, 1], port)); + let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port)); let listener = tokio::net::TcpListener::bind(&addr).await.unwrap(); From dc731c688d4513ea06d2731b9ed31ce6b54b08d4 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 12:09:00 +0900 Subject: [PATCH 45/57] add cookie impl --- docs/chapter2/section1/0_setup.md | 2 +- docs/chapter2/section1/2_session.md | 66 +++++++++++++------ docs/chapter2/section1/src/2_session/auth.rs | 23 +++++-- .../section1/src/2_session/users_session.rs | 13 ++-- 4 files changed, 72 insertions(+), 32 deletions(-) diff --git a/docs/chapter2/section1/0_setup.md b/docs/chapter2/section1/0_setup.md index e1343094..a94e239b 100644 --- a/docs/chapter2/section1/0_setup.md +++ b/docs/chapter2/section1/0_setup.md @@ -23,7 +23,7 @@ DB_DATABASE="world" 4. 以下のコマンドを実行し、クレートの依存関係を追加しましょう。 ```sh -$ cargo add axum anyhow serde serde_json tokio bcrypt --features tokio/full,serde/derive,axum/macros +$ cargo add axum axum-extra anyhow serde serde_json tokio bcrypt --features tokio/full,serde/derive,axum/macros,axum-extra/typed-header $ cargo add async-session tracing tracing-subscriber --features tracing-subscriber/env-filter,tracing-subscriber/fmt $ cargo add tower-http --features add-extension,trace,fs ``` diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md index 9f0fff2f..744977cf 100644 --- a/docs/chapter2/section1/2_session.md +++ b/docs/chapter2/section1/2_session.md @@ -49,7 +49,7 @@ impl Repository { pub async fn login( // [!code ++] State(state): State, // [!code ++] Json(body): Json, // [!code ++] -) -> Result { // [!code ++] +) -> Result { // [!code ++] } // [!code ++] ``` @@ -115,7 +115,7 @@ impl Repository { pub async fn login( // [!code ++] State(state): State, // [!code ++] Json(body): Json, // [!code ++] -) -> Result { // [!code ++] +) -> Result { // [!code ++] // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) // [!code ++] if body.username.is_empty() || body.password.is_empty() { // [!code ++] return Err(StatusCode::BAD_REQUEST); // [!code ++] @@ -140,7 +140,7 @@ pub async fn login( // [!code ++] pub async fn login( State(state): State, Json(body): Json, -) -> Result { +) -> Result { // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) if body.username.is_empty() || body.password.is_empty() { return Err(StatusCode::BAD_REQUEST); @@ -169,10 +169,10 @@ pub async fn login( データベースでエラーが起きた場合や、検証の操作に失敗した場合は 500 (Internal Server Error), パスワードが間違っていた場合 401 (Unauthorized) を返却しています。 ```rs -pub async fn login( - State(state): State, +pub async fn login( + State(state): State, Json(body): Json, -) -> Result { +) -> Result { ...(省略) // パスワードが一致しているかを確かめる @@ -182,19 +182,18 @@ pub async fn login( .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? { return Err(StatusCode::UNAUTHORIZED); - } + } // セッションストアに登録する // [!code ++] - state // [!code ++] + let session_id = state // [!code ++] .create_user_session(id.to_string()) // [!code ++] .await // [!code ++] .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] - - Ok(StatusCode::OK) // [!code ++] + } ``` -`id` をセッションストアに登録します。 +`id` をセッションストアに登録して、セッション id を取得します。 ここで用いる、セッションストアに登録するメソッド `create_user_session` を実装していきます。 @@ -207,28 +206,57 @@ use async_session::{Session, SessionStore}; // [!code ++] use super::Repository; // [!code ++] impl Repository { // [!code ++] - pub async fn create_user_session(&self, user_id: String) -> anyhow::Result<()> { // [!code ++] + pub async fn create_user_session(&self, user_id: String) -> anyhow::Result { // [!code ++] let mut session = Session::new(); // [!code ++] session // [!code ++] .insert("user_id", user_id) // [!code ++] .with_context(|| "Failed to insert user_id")?; // [!code ++] - let result = self // [!code ++] + let session_id = self // [!code ++] .session_store // [!code ++] .store_session(session) // [!code ++] .await // [!code ++] - .with_context(|| "Failed to store session") // [!code ++] - .with_context(|| "Failed to store session")?; // [!code ++] + .with_context(|| "Failed to store session")? // [!code ++] + .with_context(|| "Failed to create session")?; // [!code ++] - match result { // [!code ++] - Some(_) => Ok(()), // [!code ++] - None => Err(anyhow::anyhow!("Failed to store session")), // [!code ++] - } // [!code ++] + Ok(session_id) // [!code ++] } // [!code ++] } // [!code ++] ``` +セッションに `user_id` を登録し、セッションストアに保存します。 +セッション id を返却します。 + +`handler/auth.rs` に戻り、ヘッダーにセッション id を設定する処理を追加します。 + +```rs +pub async fn login( + State(state): State, + Json(body): Json, +) -> Result { + ...(省略) + + // セッションストアに登録する + let session_id = state + .create_user_session(id.to_string()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // クッキーをセットする // [!code ++] + let mut headers = header::HeaderMap::new(); // [!code ++] + + headers.insert( // [!code ++] + header::SET_COOKIE, // [!code ++] + format!("session_id={}; HttpOnly; SameSite=Strict", session_id) // [!code ++] + .parse() // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, // [!code ++] + ); // [!code ++] + + Ok((StatusCode::OK, headers)) // [!code ++] +} +``` + ここまで書いたら、 `login` ハンドラを使えるようにしましょう。 `handler.rs` に以下を追加してください。 diff --git a/docs/chapter2/section1/src/2_session/auth.rs b/docs/chapter2/section1/src/2_session/auth.rs index 1792f136..f9b71c25 100644 --- a/docs/chapter2/section1/src/2_session/auth.rs +++ b/docs/chapter2/section1/src/2_session/auth.rs @@ -1,4 +1,9 @@ -use axum::{extract::State, http::StatusCode, Json}; +use axum::{ + extract::State, + http::{header, StatusCode}, + response::IntoResponse, + Json, +}; use serde::Deserialize; use crate::repository::Repository; @@ -47,7 +52,7 @@ pub struct Login { pub async fn login( State(state): State, Json(body): Json, -) -> Result { +) -> Result { // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) if body.username.is_empty() || body.password.is_empty() { return Err(StatusCode::BAD_REQUEST); @@ -72,10 +77,20 @@ pub async fn login( } // セッションストアに登録する - state + let session_id = state .create_user_session(id.to_string()) .await .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; - Ok(StatusCode::OK) + // クッキーをセットする + let mut headers = header::HeaderMap::new(); + + headers.insert( + header::SET_COOKIE, + format!("session_id={}; HttpOnly; SameSite=Strict", session_id) + .parse() + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, + ); + + Ok((StatusCode::OK, headers)) } diff --git a/docs/chapter2/section1/src/2_session/users_session.rs b/docs/chapter2/section1/src/2_session/users_session.rs index b0c33896..346a684d 100644 --- a/docs/chapter2/section1/src/2_session/users_session.rs +++ b/docs/chapter2/section1/src/2_session/users_session.rs @@ -4,23 +4,20 @@ use async_session::{Session, SessionStore}; use super::Repository; impl Repository { - pub async fn create_user_session(&self, user_id: String) -> anyhow::Result<()> { + pub async fn create_user_session(&self, user_id: String) -> anyhow::Result { let mut session = Session::new(); session .insert("user_id", user_id) .with_context(|| "Failed to insert user_id")?; - let result = self + let session_id = self .session_store .store_session(session) .await - .with_context(|| "Failed to store session") - .with_context(|| "Failed to store session")?; + .with_context(|| "Failed to store session")? + .with_context(|| "Failed to create session")?; - match result { - Some(_) => Ok(()), - None => Err(anyhow::anyhow!("Failed to store session")), - } + Ok(session_id) } } From 319dec8683d351b0c60a0dd0e871163bb7d1f004 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 14:50:05 +0900 Subject: [PATCH 46/57] impl middleware and logout and me --- docs/chapter2/section1/2_session.md | 280 +++++++++++++++++++++------- 1 file changed, 212 insertions(+), 68 deletions(-) diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md index 744977cf..4021666d 100644 --- a/docs/chapter2/section1/2_session.md +++ b/docs/chapter2/section1/2_session.md @@ -285,99 +285,243 @@ pub fn make_router(app_state: Repository) -> Router { <<<@/chapter2/section1/src/2_session/repository.rs{rs:line-numbers}[repository.rs] ::: -## userAuthMiddleware の実装 +## Middleware の実装 -続いて、`userAuthMiddleware` を実装します。 +続いて、`auth_middleware` を実装します。 まず、これは Handler ではなく Middleware と呼ばれます。 送られてくるリクエストは、Middleware を経由して、 Handler に流れていきます。 -Middleware から次の Middleware/Handler を呼び出す際は `next(c)` と記述します。 Middleware の実装は難しいので、なんとなく理解できれば十分です。 - -以下を`handler.go`に追加しましょう。 -```go -func UserAuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc { // [!code ++] - return func(c echo.Context) error { // [!code ++] - sess, err := session.Get("sessions", c) // [!code ++] - if err != nil { // [!code ++] - log.Println(err) // [!code ++] - return c.String(http.StatusInternalServerError, "something wrong in getting session") // [!code ++] - } // [!code ++] - if sess.Values["userName"] == nil { // [!code ++] - return c.String(http.StatusUnauthorized, "please login") // [!code ++] - } // [!code ++] - c.Set("userName", sess.Values["userName"].(string)) // [!code ++] - return next(c) // [!code ++] - } // [!code ++] +Middleware から次の Middleware/Handler を呼び出す際は `next.run(req)` と記述します。 + +以下を`handler/auth.rs`に追加してください。 + +```rs +pub async fn auth_middleware( // [!code ++] + State(state): State, // [!code ++] + TypedHeader(cookie): TypedHeader, // [!code ++] + mut req: Request, // [!code ++] + next: Next, // [!code ++] +) -> Result { // [!code ++] + + // セッションIDを取得する // [!code ++] + let session_id = cookie // [!code ++] + .get("session_id") // [!code ++] + .ok_or(StatusCode::UNAUTHORIZED)? // [!code ++] + .to_string(); // [!code ++] + + // セッションストアからユーザーIDを取得する // [!code ++] + let user_id = state // [!code ++] + .get_user_id_by_session_id(&session_id) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? // [!code ++] + .ok_or(StatusCode::UNAUTHORIZED)?; // [!code ++] + + // リクエストにユーザーIDを追加する // [!code ++] + req.extensions_mut().insert(user_id); // [!code ++] + + // 次のミドルウェアを呼び出す // [!code ++] + Ok(next.run(req).await) // [!code ++] } // [!code ++] ``` -関数が関数を呼び出していて混乱しそうですが、 2 行目から 13 行目が本質で、外側はおまじないと考えて良いです。 - この Middleware はリクエストを送ったユーザーがログインしているのかをチェックし、 -ログインしているなら Context (`c`) にそのユーザーの UserName を設定します。 +ログインしているならリクエスト(`req`) に `user_id` を追加します。 -セッションを取得し、ログイン時に設定した `userName` の値を確認しに行きます。 +Cookie からセッション id を取得し、セッションストアからユーザー id を取得します。 +ここで、セッション id がなかった場合や、不正なセッション id だった場合は 401 (Unauthorized) を返却します。 +正しくログインされていれば、次の Middleware/Handler を呼び出します。 -ここで名前が入っていればリクエストの送信者はログイン済みで、そうでなければログインをしていないことが分かります。 +ここで使用した、 `get_user_id_by_session_id` メソッドを `repository/users_session.rs` に追加します。 -これを利用して、ログインしていない場合には処理をここで止めて 401 (Unauthorized) を返却し、していれば次の処理 (`next(c)`) -に進みます。 +```rs +pub async fn get_user_id_by_session_id( // [!code ++] + &self, // [!code ++] + session_id: &String, // [!code ++] +) -> anyhow::Result> { // [!code ++] + let session = self // [!code ++] + .session_store // [!code ++] + .load_session(session_id.clone()) // [!code ++] + .await // [!code ++] + .with_context(|| "Failed to load session")?; // [!code ++] + + Ok(session.and_then(|s| s.get::("user_id"))) // [!code ++] +} // [!code ++] +``` 最後に、Middleware を設定しましょう。 -グループ機能を利用して、 `withAuth` に設定されてるエンドポイントは `userAuthMiddleware` を処理してから処理する、という設定をします。 - -```go -func main() { - (省略) - e.POST("/login", h.LoginHandler) - - e.GET("/cities/:cityName", h.GetCityInfoHandler) // [!code --] - e.POST("/cities", h.PostCityHandler) // [!code --] - withAuth := e.Group("") // [!code ++] - withAuth.Use(handler.UserAuthMiddleware) // [!code ++] - withAuth.GET("/cities/:cityName", h.GetCityInfoHandler) // [!code ++] - withAuth.POST("/cities", h.PostCityHandler) // [!code ++] - - err = e.Start(":8080") - (省略) +`handler.rs` に以下を追加してください。 + +```rs +use axum::{ + middleware::from_fn_with_state, // [!code ++] + routing::{get, post}, + Router, +}; + +use crate::repository::Repository; + +mod auth; +mod country; + +pub fn make_router(app_state: Repository) -> Router { + let city_router = Router::new() + .route("/cities/:city_name", get(country::get_city_handler)) + .route("/cities", post(country::post_city_handler)); + + let auth_router = Router::new() + .route("/signup", post(auth::sign_up)) + .route("/login", post(auth::login)) + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); // [!code ++] + + ...(省略) } ``` これで、この章の目標である「ログインしないと利用できないようにする」が達成されました。 -## GetMeHandler の実装 +## logout ハンドラの実装 + +ログアウト機能をまだ実装していなかったので、 `logout` ハンドラを実装していきます。 + +まず、`handler/auth.rs` に以下を追加してください。 + +```rs +pub async fn logout( // [!code ++] + State(state): State, // [!code ++] + TypedHeader(cookie): TypedHeader, // [!code ++] +) -> Result { // [!code ++] + // セッションIDを取得する // [!code ++] + let session_id = cookie // [!code ++] + .get("session_id") // [!code ++] + .ok_or(StatusCode::UNAUTHORIZED)? // [!code ++] + .to_string(); // [!code ++] + + // セッションストアから削除する // [!code ++] + state // [!code ++] + .delete_user_session(session_id) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] + + // クッキーを削除する // [!code ++] + let mut headers = header::HeaderMap::new(); // [!code ++] + headers.insert( // [!code ++] + header::SET_COOKIE, // [!code ++] + "session_id=; HttpOnly; SameSite=Strict; Max-Age=0" // [!code ++] + .parse() // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, // [!code ++] + ); // [!code ++] + + Ok((StatusCode::OK, headers)) // [!code ++] +} // [!code ++] +``` + +ログアウトするときは、ログインするときとは逆にセッションと Cookie を削除します。 -最後に、 `GetMeHandler` を実装します。叩いたときに自分の情報が返ってくるエンドポイントです。 +ここで呼び出す `delete_user_session` メソッドを `repository/users_session.rs` に追加します。 -以下を `handler.go` に追加しましょう。 -```go -type Me struct { // [!code ++] - Username string `json:"username,omitempty" db:"username"` // [!code ++] +```rs +pub async fn delete_user_session(&self, session_id: String) -> anyhow::Result<()> { // [!code ++] + let session = self // [!code ++] + .session_store // [!code ++] + .load_session(session_id.clone()) // [!code ++] + .await // [!code ++] + .with_context(|| "Failed to load session")? // [!code ++] + .with_context(|| "Failed to find session")?; // [!code ++] + + self.session_store // [!code ++] + .destroy_session(session) // [!code ++] + .await // [!code ++] + .with_context(|| "Failed to destroy session")?; // [!code ++] + + Ok(()) // [!code ++] } // [!code ++] ``` -```go -func GetMeHandler(c echo.Context) error { // [!code ++] - return c.JSON(http.StatusOK, Me{ // [!code ++] - Username: c.Get("userName").(string), // [!code ++] - }) // [!code ++] + +セッション ID からセッションを取得し、セッションストアから削除します。 + +最後に、`handler.rs` に `logout` ハンドラを追加します。 + +```rs +let auth_router = Router::new() + .route("/signup", post(auth::sign_up)) + .route("/login", post(auth::login)) + .route("/logout", post(auth::logout)) // [!code ++] + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); +``` + + +## me ハンドラの実装 + +最後に、 `me` ハンドラを実装します。叩いたときに自分の情報が返ってくるエンドポイントです。 + +以下を `handler/auth.rs` に追加してください。 + +```rs +#[derive(Serialize)] // [!code ++] +pub struct Me { // [!code ++] + pub username: String, // [!code ++] +}// [!code ++] +``` + +```rs +pub async fn me(State(state): State, req: Request) -> Result, StatusCode> { // [!code ++] + // リクエストからユーザーIDを取得する // [!code ++] + let user_id = req // [!code ++] + .extensions() // [!code ++] + .get::() // [!code ++] + .ok_or(StatusCode::UNAUTHORIZED)? // [!code ++] + .to_string(); // [!code ++] + + // データベースからユーザー名を取得する // [!code ++] + let username = state // [!code ++] + .get_user_name_by_id( // [!code ++] + user_id // [!code ++] + .parse() // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, // [!code ++] + ) // [!code ++] + .await // [!code ++] + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; // [!code ++] + + Ok(Json(Me { username })) // [!code ++] } // [!code ++] ``` -アクセスしているユーザーの`userName`をセッションから取得して返しています。 -`userAuthMiddleware` を実行したあとなので、`c.Get("userName").(string)` によって userName を取得できます。 - -`main.go`に`withAuth.GET("/me", handler.GetMeHandler)`を追加しましょう。 -```go -func main() { - (省略) - withAuth := e.Group("") - withAuth.Use(handler.UserAuthMiddleware) - withAuth.GET("/me", handler.GetMeHandler) // [!code ++] - withAuth.GET("/cities/:cityName", h.GetCityInfoHandler) - withAuth.POST("/cities", h.PostCityHandler) - - err = e.Start(":8080") - (省略) +リクエストからユーザー ID を取得し、データベースからユーザー名を取得します。 + +ここで呼び出す `get_user_name_by_id` メソッドを `repository/users.rs` に追加します。 + +```rs +impl Repository { + ...(省略) + + pub async fn delete_user_session(&self, session_id: String) -> anyhow::Result<()> { // [!code ++] + let session = self// [!code ++] + .session_store// [!code ++] + .load_session(session_id.clone()) // [!code ++] + .await// [!code ++] + .with_context(|| "Failed to load session")? // [!code ++] + .with_context(|| "Failed to find session")?; // [!code ++] + + self.session_store // [!code ++] + .destroy_session(session) // [!code ++] + .await // [!code ++] + .with_context(|| "Failed to destroy session")?; // [!code ++] + + Ok(()) // [!code ++] + } // [!code ++] + + ...(省略) } ``` + +最後に、`handler.rs` に `me` ハンドラを追加します。 + +```rs +let auth_router = Router::new() + .route("/signup", post(auth::sign_up)) + .route("/login", post(auth::login)) + .route("/logout", post(auth::logout)) + .route("/me", get(auth::me)) // [!code ++] + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); +``` From 3d0e9b961bb170166116e068cfd6639606fa61a9 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 15:10:00 +0900 Subject: [PATCH 47/57] fix:add middleware in city --- docs/chapter2/section1/2_session.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md index 4021666d..b132f724 100644 --- a/docs/chapter2/section1/2_session.md +++ b/docs/chapter2/section1/2_session.md @@ -368,6 +368,7 @@ pub fn make_router(app_state: Repository) -> Router { let city_router = Router::new() .route("/cities/:city_name", get(country::get_city_handler)) .route("/cities", post(country::post_city_handler)); + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); // [!code ++] let auth_router = Router::new() .route("/signup", post(auth::sign_up)) From f7db5c0e8fd93abdc8e756ad3c00b78627176b84 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 15:20:31 +0900 Subject: [PATCH 48/57] feat:final code --- docs/chapter2/section1/src/final/handler.go | 192 ------------------ docs/chapter2/section1/src/final/handler.rs | 32 +++ .../section1/src/final/handler/auth.rs | 178 ++++++++++++++++ .../section1/src/final/handler/country.rs | 162 +++++++++++++++ docs/chapter2/section1/src/final/main.go | 78 ------- docs/chapter2/section1/src/final/main.rs | 21 ++ .../chapter2/section1/src/final/repository.rs | 53 +++++ .../section1/src/final/repository/country.rs | 43 ++++ .../section1/src/final/repository/users.rs | 57 ++++++ .../src/final/repository/users_session.rs | 52 +++++ 10 files changed, 598 insertions(+), 270 deletions(-) delete mode 100644 docs/chapter2/section1/src/final/handler.go create mode 100644 docs/chapter2/section1/src/final/handler.rs create mode 100644 docs/chapter2/section1/src/final/handler/auth.rs create mode 100644 docs/chapter2/section1/src/final/handler/country.rs delete mode 100644 docs/chapter2/section1/src/final/main.go create mode 100644 docs/chapter2/section1/src/final/main.rs create mode 100644 docs/chapter2/section1/src/final/repository.rs create mode 100644 docs/chapter2/section1/src/final/repository/country.rs create mode 100644 docs/chapter2/section1/src/final/repository/users.rs create mode 100644 docs/chapter2/section1/src/final/repository/users_session.rs diff --git a/docs/chapter2/section1/src/final/handler.go b/docs/chapter2/section1/src/final/handler.go deleted file mode 100644 index 7913ae31..00000000 --- a/docs/chapter2/section1/src/final/handler.go +++ /dev/null @@ -1,192 +0,0 @@ -package handler - -import ( - "database/sql" - "errors" - "github.com/jmoiron/sqlx" - "github.com/labstack/echo-contrib/session" - "github.com/labstack/echo/v4" - "golang.org/x/crypto/bcrypt" - "log" - "net/http" -) - -type Handler struct { - db *sqlx.DB -} - -func NewHandler(db *sqlx.DB) *Handler { - return &Handler{db: db} -} - -type City struct { - ID int `json:"id,omitempty" db:"ID"` - Name sql.NullString `json:"name,omitempty" db:"Name"` - CountryCode sql.NullString `json:"countryCode,omitempty" db:"CountryCode"` - District sql.NullString `json:"district,omitempty" db:"District"` - Population sql.NullInt64 `json:"population,omitempty" db:"Population"` -} - -type LoginRequestBody struct { - Username string `json:"username,omitempty" form:"username"` - Password string `json:"password,omitempty" form:"password"` -} - -type User struct { - Username string `json:"username,omitempty" db:"Username"` - HashedPass string `json:"-" db:"HashedPass"` -} - -type Me struct { - Username string `json:"username,omitempty" db:"username"` -} - -func (h *Handler) SignUpHandler(c echo.Context) error { - // リクエストを受け取り、reqに格納する - req := LoginRequestBody{} - err := c.Bind(&req) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") - } - - // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) - if req.Password == "" || req.Username == "" { - return c.String(http.StatusBadRequest, "Username or Password is empty") - } - - // 登録しようとしているユーザーが既にデータベース内に存在するかチェック - var count int - err = h.db.Get(&count, "SELECT COUNT(*) FROM users WHERE Username=?", req.Username) - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - // 存在したら409 Conflictを返す - if count > 0 { - return c.String(http.StatusConflict, "Username is already used") - } - - // パスワードをハッシュ化する - hashedPass, err := bcrypt.GenerateFromPassword([]byte(req.Password), bcrypt.DefaultCost) - // ハッシュ化に失敗したら500 InternalServerErrorを返す - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - - // ユーザーを登録する - _, err = h.db.Exec("INSERT INTO users (Username, HashedPass) VALUES (?, ?)", req.Username, hashedPass) - // 登録に失敗したら500 InternalServerErrorを返す - if err != nil { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - // 登録に成功したら201 Createdを返す - return c.NoContent(http.StatusCreated) -} - -func (h *Handler) LoginHandler(c echo.Context) error { - // リクエストを受け取り、reqに格納する - var req LoginRequestBody - err := c.Bind(&req) - if err != nil { - return c.String(http.StatusBadRequest, "bad request body") - } - - // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) - if req.Password == "" || req.Username == "" { - return c.String(http.StatusBadRequest, "Username or Password is empty") - } - - // データベースからユーザーを取得する - user := User{} - err = h.db.Get(&user, "SELECT * FROM users WHERE username=?", req.Username) - if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return c.NoContent(http.StatusUnauthorized) - } else { - log.Println(err) - return c.NoContent(http.StatusInternalServerError) - } - } - // パスワードが一致しているかを確かめる - err = bcrypt.CompareHashAndPassword([]byte(user.HashedPass), []byte(req.Password)) - if err != nil { - if errors.Is(err, bcrypt.ErrMismatchedHashAndPassword) { - return c.NoContent(http.StatusUnauthorized) - } else { - return c.NoContent(http.StatusInternalServerError) - } - } - - // セッションストアに登録する - sess, err := session.Get("sessions", c) - if err != nil { - log.Println(err) - return c.String(http.StatusInternalServerError, "something wrong in getting session") - } - sess.Values["userName"] = req.Username - sess.Save(c.Request(), c.Response()) - - return c.NoContent(http.StatusOK) -} - -func UserAuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc { - return func(c echo.Context) error { - sess, err := session.Get("sessions", c) - if err != nil { - log.Println(err) - return c.String(http.StatusInternalServerError, "something wrong in getting session") - } - if sess.Values["userName"] == nil { - return c.String(http.StatusUnauthorized, "please login") - } - c.Set("userName", sess.Values["userName"].(string)) - return next(c) - } -} - -func GetMeHandler(c echo.Context) error { - return c.JSON(http.StatusOK, Me{ - Username: c.Get("userName").(string), - }) -} - -func (h *Handler) GetCityInfoHandler(c echo.Context) error { - cityName := c.Param("cityName") - - var city City - err := h.db.Get(&city, "SELECT * FROM city WHERE Name=?", cityName) - if err != nil { - if errors.Is(err, sql.ErrNoRows) { - return c.NoContent(http.StatusNotFound) - } - log.Printf("failed to get city data: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - - return c.JSON(http.StatusOK, city) -} - -func (h *Handler) PostCityHandler(c echo.Context) error { - var city City - err := c.Bind(&city) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, "bad request body") - } - - result, err := h.db.Exec("INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", city.Name, city.CountryCode, city.District, city.Population) - if err != nil { - log.Printf("failed to insert city data: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - - id, err := result.LastInsertId() - if err != nil { - log.Printf("failed to get last insert id: %s\n", err) - return c.NoContent(http.StatusInternalServerError) - } - city.ID = int(id) - - return c.JSON(http.StatusCreated, city) -} diff --git a/docs/chapter2/section1/src/final/handler.rs b/docs/chapter2/section1/src/final/handler.rs new file mode 100644 index 00000000..f22842c3 --- /dev/null +++ b/docs/chapter2/section1/src/final/handler.rs @@ -0,0 +1,32 @@ +use axum::{ + middleware::from_fn_with_state, + routing::{get, post}, + Router, +}; + +use crate::repository::Repository; + +mod auth; +mod country; + +pub fn make_router(app_state: Repository) -> Router { + let city_router = Router::new() + .route("/cities/:city_name", get(country::get_city_handler)) + .route("/cities", post(country::post_city_handler)) + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); + + let auth_router = Router::new() + .route("/signup", post(auth::sign_up)) + .route("/login", post(auth::login)) + .route("/logout", post(auth::logout)) + .route("/me", get(auth::me)) + .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); + + let ping_router = Router::new().route("/ping", get(|| async { "pong" })); + + Router::new() + .nest("/", city_router) + .nest("/", auth_router) + .nest("/", ping_router) + .with_state(app_state) +} diff --git a/docs/chapter2/section1/src/final/handler/auth.rs b/docs/chapter2/section1/src/final/handler/auth.rs new file mode 100644 index 00000000..5c86e993 --- /dev/null +++ b/docs/chapter2/section1/src/final/handler/auth.rs @@ -0,0 +1,178 @@ +use axum::{ + extract::{Request, State}, + http::{header, StatusCode}, + middleware::Next, + response::IntoResponse, + Json, +}; +use axum_extra::{headers::Cookie, TypedHeader}; +use serde::{Deserialize, Serialize}; + +use crate::repository::Repository; + +pub async fn auth_middleware( + State(state): State, + TypedHeader(cookie): TypedHeader, + mut req: Request, + next: Next, +) -> Result { + // セッションIDを取得する + let session_id = cookie + .get("session_id") + .ok_or(StatusCode::UNAUTHORIZED)? + .to_string(); + + // セッションストアからユーザーIDを取得する + let user_id = state + .get_user_id_by_session_id(&session_id) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? + .ok_or(StatusCode::UNAUTHORIZED)?; + + // リクエストにユーザーIDを追加する + req.extensions_mut().insert(user_id); + + // 次のミドルウェアを呼び出す + Ok(next.run(req).await) +} + +#[derive(Deserialize)] +pub struct SignUp { + pub username: String, + pub password: String, +} + +pub async fn sign_up( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) + if body.username.is_empty() || body.password.is_empty() { + return Err(StatusCode::BAD_REQUEST); + } + + // 登録しようとしているユーザーが既にデータベース内に存在したら409 Conflictを返す + if let Ok(true) = state.is_exist_username(body.username.clone()).await { + return Err(StatusCode::CONFLICT); + } + + // ユーザーを作成する + let id = state + .create_user(body.username.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // パスワードを保存する + state + .save_user_password(id as i32, body.password.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + Ok(StatusCode::CREATED) +} + +#[derive(Deserialize)] +pub struct Login { + pub username: String, + pub password: String, +} + +pub async fn login( + State(state): State, + Json(body): Json, +) -> Result { + // バリデーションする(PasswordかUsernameが空文字列の場合は400 BadRequestを返す) + if body.username.is_empty() || body.password.is_empty() { + return Err(StatusCode::BAD_REQUEST); + } + + // データベースからユーザーを取得する + let id = state + .get_user_id_by_name(body.username.clone()) + .await + .map_err(|e| match e { + sqlx::Error::RowNotFound => StatusCode::UNAUTHORIZED, + _ => StatusCode::INTERNAL_SERVER_ERROR, + })?; + + // パスワードが一致しているかを確かめる + if !state + .verify_user_password(id, body.password.clone()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)? + { + return Err(StatusCode::UNAUTHORIZED); + } + + // セッションストアに登録する + let session_id = state + .create_user_session(id.to_string()) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // クッキーをセットする + let mut headers = header::HeaderMap::new(); + + headers.insert( + header::SET_COOKIE, + format!("session_id={}; HttpOnly; SameSite=Strict", session_id) + .parse() + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, + ); + + Ok((StatusCode::OK, headers)) +} + +pub async fn logout( + State(state): State, + TypedHeader(cookie): TypedHeader, +) -> Result { + // セッションIDを取得する + let session_id = cookie + .get("session_id") + .ok_or(StatusCode::UNAUTHORIZED)? + .to_string(); + + // セッションストアから削除する + state + .delete_user_session(session_id) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + // クッキーを削除する + let mut headers = header::HeaderMap::new(); + headers.insert( + header::SET_COOKIE, + "session_id=; HttpOnly; SameSite=Strict; Max-Age=0" + .parse() + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, + ); + + Ok((StatusCode::OK, headers)) +} + +#[derive(Serialize)] +pub struct Me { + pub username: String, +} + +pub async fn me(State(state): State, req: Request) -> Result, StatusCode> { + // リクエストからユーザーIDを取得する + let user_id = req + .extensions() + .get::() + .ok_or(StatusCode::UNAUTHORIZED)? + .to_string(); + + // データベースからユーザー名を取得する + let username = state + .get_user_name_by_id( + user_id + .parse() + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?, + ) + .await + .map_err(|_| StatusCode::INTERNAL_SERVER_ERROR)?; + + Ok(Json(Me { username })) +} diff --git a/docs/chapter2/section1/src/final/handler/country.rs b/docs/chapter2/section1/src/final/handler/country.rs new file mode 100644 index 00000000..b6cc22eb --- /dev/null +++ b/docs/chapter2/section1/src/final/handler/country.rs @@ -0,0 +1,162 @@ +use crate::repository::{country::City, Repository}; +use axum::{ + extract::rejection::JsonRejection, + extract::{Path, State}, + http::StatusCode, + Json, +}; + +pub async fn get_city_handler( + State(state): State, + Path(city_name): Path, +) -> Result, StatusCode> { + let city = Repository::get_city_by_name(&state, city_name).await; + match city { + Ok(city) => Ok(Json(city)), + Err(sqlx::Error::RowNotFound) => Err(StatusCode::NOT_FOUND), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } +} + +pub async fn post_city_handler( + State(state): State, + query: Result, JsonRejection>, +) -> Result, StatusCode> { + match query { + Ok(Json(city)) => { + let result = Repository::create_city(&state, city).await; + match result { + Ok(city) => Ok(Json(city)), + Err(_) => Err(StatusCode::INTERNAL_SERVER_ERROR), + } + } + Err(_) => Err(StatusCode::BAD_REQUEST), + } +} + +use std::collections::HashMap; + +//与えられた City のリストから国ごとの人口の和を計算する +#[allow(dead_code)] +pub fn sum_population_by_country(cities: Vec) -> HashMap { + let mut map = HashMap::new(); + for city in cities { + if city.country_code.is_empty() { + continue; + } + let entry = map.entry(city.country_code).or_insert(0); + *entry += city.population; + } + map +} + +// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる +#[cfg(test)] +mod tests { + use super::{sum_population_by_country, City}; + use std::collections::HashMap; + + #[test] + fn test_sum_population_by_country_empty() { + // ここにテストを追加する + let cities = vec![]; + let result = sum_population_by_country(cities); + assert!(result.is_empty()); + } + + #[test] + fn test_sum_population_by_country_single() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "JPN".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 300); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } + + #[test] + fn test_sum_population_by_country_multiple() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "JPN".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + City { + id: Some(3), + name: "New York".to_string(), + country_code: "USA".to_string(), + district: "New York".to_string(), + population: 300, + }, + City { + id: Some(4), + name: "Los Angeles".to_string(), + country_code: "USA".to_string(), + district: "California".to_string(), + population: 400, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 300); + expected.insert("USA".to_string(), 700); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } + + #[test] + fn test_sum_population_by_country_empty_country_code() { + let cities = vec![ + City { + id: Some(1), + name: "Tokyo".to_string(), + country_code: "JPN".to_string(), + district: "Tokyo".to_string(), + population: 100, + }, + City { + id: Some(2), + name: "Osaka".to_string(), + country_code: "".to_string(), + district: "Osaka".to_string(), + population: 200, + }, + ]; + + let mut expected = HashMap::new(); + expected.insert("JPN".to_string(), 100); + + let result = sum_population_by_country(cities); + + assert_eq!(result, expected); + } +} diff --git a/docs/chapter2/section1/src/final/main.go b/docs/chapter2/section1/src/final/main.go deleted file mode 100644 index de157b5c..00000000 --- a/docs/chapter2/section1/src/final/main.go +++ /dev/null @@ -1,78 +0,0 @@ -package main - -import ( - "github.com/labstack/echo-contrib/session" - "github.com/labstack/echo/v4" - "github.com/labstack/echo/v4/middleware" - "github.com/srinathgs/mysqlstore" - "github.com/traPtitech/naro-template-backend/handler" - "log" - "os" - "time" - - "github.com/go-sql-driver/mysql" - - "github.com/jmoiron/sqlx" - "github.com/joho/godotenv" -) - -func main() { - // .envファイルから環境変数を読み込み - err := godotenv.Load(".env") - if err != nil { - log.Fatal(err) - } - - // データーベースの設定 - jst, err := time.LoadLocation("Asia/Tokyo") - if err != nil { - log.Fatal(err) - } - conf := mysql.Config{ - User: os.Getenv("DB_USERNAME"), - Passwd: os.Getenv("DB_PASSWORD"), - Net: "tcp", - Addr: os.Getenv("DB_HOSTNAME") + ":" + os.Getenv("DB_PORT"), - DBName: os.Getenv("DB_DATABASE"), - ParseTime: true, - Collation: "utf8mb4_unicode_ci", - Loc: jst, - } - - // データベースに接続 - db, err := sqlx.Open("mysql", conf.FormatDSN()) - if err != nil { - log.Fatal(err) - } - - // usersテーブルが存在しなかったら、usersテーブルを作成する - _, err = db.Exec("CREATE TABLE IF NOT EXISTS users (Username VARCHAR(255) PRIMARY KEY, HashedPass VARCHAR(255))") - if err != nil { - log.Fatal(err) - } - - // セッションの情報を記憶するための場所をデータベース上に設定 - store, err := mysqlstore.NewMySQLStoreFromConnection(db.DB, "sessions", "/", 60*60*24*14, []byte("secret-token")) - if err != nil { - log.Fatal(err) - } - - h := handler.NewHandler(db) - e := echo.New() - e.Use(middleware.Logger()) // ログを取るミドルウェアを追加 - e.Use(session.Middleware(store)) // セッション管理のためのミドルウェアを追加 - - e.POST("/signup", h.SignUpHandler) - e.POST("/login", h.LoginHandler) - - withAuth := e.Group("") - withAuth.Use(handler.UserAuthMiddleware) - withAuth.GET("/me", handler.GetMeHandler) - withAuth.GET("/cities/:cityName", h.GetCityInfoHandler) - withAuth.POST("/cities", h.PostCityHandler) - - err = e.Start(":8080") - if err != nil { - log.Fatal(err) - } -} diff --git a/docs/chapter2/section1/src/final/main.rs b/docs/chapter2/section1/src/final/main.rs new file mode 100644 index 00000000..8823e79b --- /dev/null +++ b/docs/chapter2/section1/src/final/main.rs @@ -0,0 +1,21 @@ +use tower_http::trace::TraceLayer; +use tracing_subscriber::EnvFilter; + +mod handler; +mod repository; + +#[tokio::main] +async fn main() -> anyhow::Result<()> { + tracing_subscriber::fmt() + .with_env_filter(EnvFilter::try_from_default_env().unwrap_or("info".into())) + .init(); + + let app_state = repository::Repository::connect().await?; + app_state.migrate().await?; + let app = handler::make_router(app_state).layer(TraceLayer::new_for_http()); + let listener = tokio::net::TcpListener::bind("127.0.0.1:8080").await?; + + tracing::info!("listening on {}", listener.local_addr()?); + axum::serve(listener, app).await.unwrap(); + Ok(()) +} diff --git a/docs/chapter2/section1/src/final/repository.rs b/docs/chapter2/section1/src/final/repository.rs new file mode 100644 index 00000000..1e8baf69 --- /dev/null +++ b/docs/chapter2/section1/src/final/repository.rs @@ -0,0 +1,53 @@ +use async_sqlx_session::MySqlSessionStore; +use sqlx::mysql::MySqlConnectOptions; +use sqlx::mysql::MySqlPool; +use std::env; + +pub mod country; +pub mod users; +pub mod users_session; + +#[derive(Clone)] +pub struct Repository { + pool: MySqlPool, + session_store: MySqlSessionStore, +} + +impl Repository { + pub async fn connect() -> anyhow::Result { + let options = get_options()?; + let pool = sqlx::MySqlPool::connect_with(options).await?; + + let session_store = + MySqlSessionStore::from_client(pool.clone()).with_table_name("user_sessions"); + + Ok(Self { + pool, + session_store, + }) + } + + pub async fn migrate(&self) -> anyhow::Result<()> { + sqlx::migrate!("./migrations").run(&self.pool).await?; + Ok(()) + } +} + +fn get_options() -> anyhow::Result { + let host = env::var("DB_HOSTNAME")?; + let port = env::var("DB_PORT")?.parse()?; + let username = env::var("DB_USERNAME")?; + let password = env::var("DB_PASSWORD")?; + let database = env::var("DB_DATABASE")?; + let timezone = Some(String::from("Asia/Tokyo")); + let collation = String::from("utf8mb4_unicode_ci"); + + Ok(MySqlConnectOptions::new() + .host(&host) + .port(port) + .username(&username) + .password(&password) + .database(&database) + .timezone(timezone) + .collation(&collation)) +} diff --git a/docs/chapter2/section1/src/final/repository/country.rs b/docs/chapter2/section1/src/final/repository/country.rs new file mode 100644 index 00000000..cd3812c4 --- /dev/null +++ b/docs/chapter2/section1/src/final/repository/country.rs @@ -0,0 +1,43 @@ +use super::Repository; + +#[derive(sqlx::FromRow, serde::Serialize, serde::Deserialize)] +#[serde(rename_all = "camelCase")] +pub struct City { + #[sqlx(rename = "ID")] + pub id: Option, + #[sqlx(rename = "Name")] + pub name: String, + #[sqlx(rename = "CountryCode")] + pub country_code: String, + #[sqlx(rename = "District")] + pub district: String, + #[sqlx(rename = "Population")] + pub population: i32, +} + +impl Repository { + pub async fn get_city_by_name(&self, city_name: String) -> sqlx::Result { + sqlx::query_as::<_, City>("SELECT * FROM city WHERE Name = ?") + .bind(&city_name) + .fetch_one(&self.pool) + .await + } + + pub async fn create_city(&self, city: City) -> sqlx::Result { + let result = sqlx::query( + "INSERT INTO city (Name, CountryCode, District, Population) VALUES (?, ?, ?, ?)", + ) + .bind(&city.name) + .bind(&city.country_code) + .bind(&city.district) + .bind(city.population) + .execute(&self.pool) + .await?; + + let id = result.last_insert_id() as i32; + Ok(City { + id: Some(id), + ..city + }) + } +} diff --git a/docs/chapter2/section1/src/final/repository/users.rs b/docs/chapter2/section1/src/final/repository/users.rs new file mode 100644 index 00000000..6652b2b7 --- /dev/null +++ b/docs/chapter2/section1/src/final/repository/users.rs @@ -0,0 +1,57 @@ +use super::Repository; + +impl Repository { + pub async fn is_exist_username(&self, username: String) -> sqlx::Result { + let result = sqlx::query("SELECT * FROM users WHERE username = ?") + .bind(&username) + .fetch_optional(&self.pool) + .await?; + Ok(result.is_some()) + } + + pub async fn create_user(&self, username: String) -> sqlx::Result { + let result = sqlx::query("INSERT INTO users (username) VALUES (?)") + .bind(&username) + .execute(&self.pool) + .await?; + Ok(result.last_insert_id()) + } + + pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { + let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?") + .bind(&username) + .fetch_one(&self.pool) + .await?; + Ok(result) + } + + pub async fn get_user_name_by_id(&self, id: u64) -> sqlx::Result { + let result = sqlx::query_scalar("SELECT username FROM users WHERE id = ?") + .bind(id) + .fetch_one(&self.pool) + .await?; + Ok(result) + } + + pub async fn save_user_password(&self, id: i32, password: String) -> anyhow::Result<()> { + let hash = bcrypt::hash(password, bcrypt::DEFAULT_COST)?; + + sqlx::query("INSERT INTO user_passwords (id, hashed_pass) VALUES (?, ?)") + .bind(id) + .bind(hash) + .execute(&self.pool) + .await?; + + Ok(()) + } + + pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result { + let hash = + sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?") + .bind(id) + .fetch_one(&self.pool) + .await?; + + Ok(bcrypt::verify(password, &hash)?) + } +} diff --git a/docs/chapter2/section1/src/final/repository/users_session.rs b/docs/chapter2/section1/src/final/repository/users_session.rs new file mode 100644 index 00000000..d5e408dd --- /dev/null +++ b/docs/chapter2/section1/src/final/repository/users_session.rs @@ -0,0 +1,52 @@ +use anyhow::Context; +use async_session::{Session, SessionStore}; + +use super::Repository; + +impl Repository { + pub async fn create_user_session(&self, user_id: String) -> anyhow::Result { + let mut session = Session::new(); + + session + .insert("user_id", user_id) + .with_context(|| "Failed to insert user_id")?; + + let session_id = self + .session_store + .store_session(session) + .await + .with_context(|| "Failed to store session")? + .with_context(|| "Failed to create session")?; + + Ok(session_id) + } + + pub async fn delete_user_session(&self, session_id: String) -> anyhow::Result<()> { + let session = self + .session_store + .load_session(session_id.clone()) + .await + .with_context(|| "Failed to load session")? + .with_context(|| "Failed to find session")?; + + self.session_store + .destroy_session(session) + .await + .with_context(|| "Failed to destroy session")?; + + Ok(()) + } + + pub async fn get_user_id_by_session_id( + &self, + session_id: &String, + ) -> anyhow::Result> { + let session = self + .session_store + .load_session(session_id.clone()) + .await + .with_context(|| "Failed to load session")?; + + Ok(session.and_then(|s| s.get::("user_id"))) + } +} From 26455b9f55af1d77773860846c81a525f3e1156f Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 15:26:42 +0900 Subject: [PATCH 49/57] fix: update code-group --- docs/chapter2/section1/3_verify.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/chapter2/section1/3_verify.md b/docs/chapter2/section1/3_verify.md index 6da8b6e3..e0b2eeaf 100644 --- a/docs/chapter2/section1/3_verify.md +++ b/docs/chapter2/section1/3_verify.md @@ -6,8 +6,14 @@ :::details 完成形 ::: code-group -<<<@/chapter2/section1/src/final/main.go{go:line-numbers}[main.go] -<<<@/chapter2/section1/src/final/handler.go{go:line-numbers}[handler.go] +<<<@/chapter2/section1/src/final/main.rs{rs:line-numbers}[main.rs] +<<<@/chapter2/section1/src/final/handler.rs{rs:line-numbers}[handler.rs] +<<<@/chapter2/section1/src/final/repository.rs{rs:line-numbers}[repository.rs] +<<<@/chapter2/section1/src/final/handler/country.rs{rs:line-numbers}[handler/country.rs] +<<<@/chapter2/section1/src/final/repository/country.rs{rs:line-numbers}[repository/country.rs] +<<<@/chapter2/section1/src/final/handler/auth.rs{rs:line-numbers}[handler/auth.rs] +<<<@/chapter2/section1/src/final/repository/users.rs{rs:line-numbers}[repository/users.rs] +<<<@/chapter2/section1/src/final/repository/users_session.rs{rs:line-numbers}[repository/users_session.rs] ::: ## 検証 From 75d13d90367924b22c0a459d4319666c8a616b93 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 16:04:57 +0900 Subject: [PATCH 50/57] fix: delete tests --- .../section1/src/final/handler/country.rs | 127 ------------------ 1 file changed, 127 deletions(-) diff --git a/docs/chapter2/section1/src/final/handler/country.rs b/docs/chapter2/section1/src/final/handler/country.rs index b6cc22eb..be5ba1da 100644 --- a/docs/chapter2/section1/src/final/handler/country.rs +++ b/docs/chapter2/section1/src/final/handler/country.rs @@ -33,130 +33,3 @@ pub async fn post_city_handler( Err(_) => Err(StatusCode::BAD_REQUEST), } } - -use std::collections::HashMap; - -//与えられた City のリストから国ごとの人口の和を計算する -#[allow(dead_code)] -pub fn sum_population_by_country(cities: Vec) -> HashMap { - let mut map = HashMap::new(); - for city in cities { - if city.country_code.is_empty() { - continue; - } - let entry = map.entry(city.country_code).or_insert(0); - *entry += city.population; - } - map -} - -// #[cfg(test)] 属性を追加したモジュールはテストモジュールとして扱われる -#[cfg(test)] -mod tests { - use super::{sum_population_by_country, City}; - use std::collections::HashMap; - - #[test] - fn test_sum_population_by_country_empty() { - // ここにテストを追加する - let cities = vec![]; - let result = sum_population_by_country(cities); - assert!(result.is_empty()); - } - - #[test] - fn test_sum_population_by_country_single() { - let cities = vec![ - City { - id: Some(1), - name: "Tokyo".to_string(), - country_code: "JPN".to_string(), - district: "Tokyo".to_string(), - population: 100, - }, - City { - id: Some(2), - name: "Osaka".to_string(), - country_code: "JPN".to_string(), - district: "Osaka".to_string(), - population: 200, - }, - ]; - - let mut expected = HashMap::new(); - expected.insert("JPN".to_string(), 300); - - let result = sum_population_by_country(cities); - - assert_eq!(result, expected); - } - - #[test] - fn test_sum_population_by_country_multiple() { - let cities = vec![ - City { - id: Some(1), - name: "Tokyo".to_string(), - country_code: "JPN".to_string(), - district: "Tokyo".to_string(), - population: 100, - }, - City { - id: Some(2), - name: "Osaka".to_string(), - country_code: "JPN".to_string(), - district: "Osaka".to_string(), - population: 200, - }, - City { - id: Some(3), - name: "New York".to_string(), - country_code: "USA".to_string(), - district: "New York".to_string(), - population: 300, - }, - City { - id: Some(4), - name: "Los Angeles".to_string(), - country_code: "USA".to_string(), - district: "California".to_string(), - population: 400, - }, - ]; - - let mut expected = HashMap::new(); - expected.insert("JPN".to_string(), 300); - expected.insert("USA".to_string(), 700); - - let result = sum_population_by_country(cities); - - assert_eq!(result, expected); - } - - #[test] - fn test_sum_population_by_country_empty_country_code() { - let cities = vec![ - City { - id: Some(1), - name: "Tokyo".to_string(), - country_code: "JPN".to_string(), - district: "Tokyo".to_string(), - population: 100, - }, - City { - id: Some(2), - name: "Osaka".to_string(), - country_code: "".to_string(), - district: "Osaka".to_string(), - population: 200, - }, - ]; - - let mut expected = HashMap::new(); - expected.insert("JPN".to_string(), 100); - - let result = sum_population_by_country(cities); - - assert_eq!(result, expected); - } -} From e08a3ac9740973d3ea1ff86ad6cc18e9d1836c6b Mon Sep 17 00:00:00 2001 From: kenken714 Date: Wed, 20 Nov 2024 16:05:26 +0900 Subject: [PATCH 51/57] fix: use with_auth_router --- docs/chapter2/section1/2_session.md | 25 ++++++++++++--------- docs/chapter2/section1/src/final/handler.rs | 9 ++++---- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md index b132f724..37d1b39c 100644 --- a/docs/chapter2/section1/2_session.md +++ b/docs/chapter2/section1/2_session.md @@ -350,6 +350,8 @@ pub async fn get_user_id_by_session_id( // [!code ++] ``` 最後に、Middleware を設定しましょう。 +ログインが必要なエンドポイントを `with_auth_router` でまとめ、Middleware を適用します。 + `handler.rs` に以下を追加してください。 ```rs @@ -365,17 +367,22 @@ mod auth; mod country; pub fn make_router(app_state: Repository) -> Router { - let city_router = Router::new() + let city_router = Router::new() // [!code --] + let with_auth_router = Router::new() // [!code ++] .route("/cities/:city_name", get(country::get_city_handler)) .route("/cities", post(country::post_city_handler)); .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); // [!code ++] let auth_router = Router::new() .route("/signup", post(auth::sign_up)) - .route("/login", post(auth::login)) - .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); // [!code ++] + .route("/login", post(auth::login)); - ...(省略) + Router::new() + .nest("/", city_router) // [!code --] + .nest("/", with_auth_router) // [!code ++] + .nest("/", auth_router) + .nest("/", ping_router) + .with_state(app_state) } ``` @@ -447,8 +454,7 @@ pub async fn delete_user_session(&self, session_id: String) -> anyhow::Result<() let auth_router = Router::new() .route("/signup", post(auth::sign_up)) .route("/login", post(auth::login)) - .route("/logout", post(auth::logout)) // [!code ++] - .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); + .route("/logout", post(auth::logout)); // [!code ++] ``` @@ -519,10 +525,9 @@ impl Repository { 最後に、`handler.rs` に `me` ハンドラを追加します。 ```rs -let auth_router = Router::new() - .route("/signup", post(auth::sign_up)) - .route("/login", post(auth::login)) - .route("/logout", post(auth::logout)) +let with_auth_router = Router::new() + .route("/cities/:city_name", get(country::get_city_handler)) + .route("/cities", post(country::post_city_handler)) .route("/me", get(auth::me)) // [!code ++] .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); ``` diff --git a/docs/chapter2/section1/src/final/handler.rs b/docs/chapter2/section1/src/final/handler.rs index f22842c3..fae9d176 100644 --- a/docs/chapter2/section1/src/final/handler.rs +++ b/docs/chapter2/section1/src/final/handler.rs @@ -10,22 +10,21 @@ mod auth; mod country; pub fn make_router(app_state: Repository) -> Router { - let city_router = Router::new() + let with_auth_router = Router::new() .route("/cities/:city_name", get(country::get_city_handler)) .route("/cities", post(country::post_city_handler)) + .route("/me", get(auth::me)) .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); let auth_router = Router::new() .route("/signup", post(auth::sign_up)) .route("/login", post(auth::login)) - .route("/logout", post(auth::logout)) - .route("/me", get(auth::me)) - .route_layer(from_fn_with_state(app_state.clone(), auth::auth_middleware)); + .route("/logout", post(auth::logout)); let ping_router = Router::new().route("/ping", get(|| async { "pong" })); Router::new() - .nest("/", city_router) + .nest("/", with_auth_router) .nest("/", auth_router) .nest("/", ping_router) .with_state(app_state) From ed4b09977d9ebbd8d7914216896abd18a1d9370b Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 02:59:39 +0900 Subject: [PATCH 52/57] fix --- docs/chapter2/section1/2_session.md | 5 +++-- docs/chapter2/section1/3_verify.md | 2 +- docs/chapter2/section1/src/2_session/repository.rs | 1 + docs/chapter2/section1/src/2_session/users.rs | 4 ++-- docs/chapter2/section1/src/final/repository.rs | 1 + docs/chapter2/section1/src/final/repository/users.rs | 6 +++--- 6 files changed, 11 insertions(+), 8 deletions(-) diff --git a/docs/chapter2/section1/2_session.md b/docs/chapter2/section1/2_session.md index 37d1b39c..94192689 100644 --- a/docs/chapter2/section1/2_session.md +++ b/docs/chapter2/section1/2_session.md @@ -33,6 +33,7 @@ impl Repository { pub async fn migrate(&self) -> anyhow::Result<()> { sqlx::migrate!("./migrations").run(&self.pool).await?; + self.session_store.migrate().await?; Ok(()) } } @@ -80,7 +81,7 @@ impl Repository { ...(省略) } - pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { // [!code ++] + pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { // [!code ++] let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?") // [!code ++] .bind(&username) // [!code ++] .fetch_one(&self.pool) // [!code ++] @@ -92,7 +93,7 @@ impl Repository { ...(省略) } - pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result { // [!code ++] + pub async fn verify_user_password(&self, id: i32, password: String) -> anyhow::Result { // [!code ++] let hash = // [!code ++] sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?") // [!code ++] .bind(id) // [!code ++] diff --git a/docs/chapter2/section1/3_verify.md b/docs/chapter2/section1/3_verify.md index e0b2eeaf..a30ea98b 100644 --- a/docs/chapter2/section1/3_verify.md +++ b/docs/chapter2/section1/3_verify.md @@ -22,7 +22,7 @@ :::warning 全て Postman での検証です。 -`go run main.go`でサーバーを起動した状態で行ってください。 +`cargo run`でサーバーを起動した状態で行ってください。 また、`GET`と`POST`を間違えないようにして下さい。 ::: diff --git a/docs/chapter2/section1/src/2_session/repository.rs b/docs/chapter2/section1/src/2_session/repository.rs index 1e8baf69..93db1477 100644 --- a/docs/chapter2/section1/src/2_session/repository.rs +++ b/docs/chapter2/section1/src/2_session/repository.rs @@ -29,6 +29,7 @@ impl Repository { pub async fn migrate(&self) -> anyhow::Result<()> { sqlx::migrate!("./migrations").run(&self.pool).await?; + self.session_store.migrate().await?; Ok(()) } } diff --git a/docs/chapter2/section1/src/2_session/users.rs b/docs/chapter2/section1/src/2_session/users.rs index 55f75768..e4476f72 100644 --- a/docs/chapter2/section1/src/2_session/users.rs +++ b/docs/chapter2/section1/src/2_session/users.rs @@ -17,7 +17,7 @@ impl Repository { Ok(result.last_insert_id()) } - pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { + pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?") .bind(&username) .fetch_one(&self.pool) @@ -37,7 +37,7 @@ impl Repository { Ok(()) } - pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result { + pub async fn verify_user_password(&self, id: i32, password: String) -> anyhow::Result { let hash = sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?") .bind(id) diff --git a/docs/chapter2/section1/src/final/repository.rs b/docs/chapter2/section1/src/final/repository.rs index 1e8baf69..93db1477 100644 --- a/docs/chapter2/section1/src/final/repository.rs +++ b/docs/chapter2/section1/src/final/repository.rs @@ -29,6 +29,7 @@ impl Repository { pub async fn migrate(&self) -> anyhow::Result<()> { sqlx::migrate!("./migrations").run(&self.pool).await?; + self.session_store.migrate().await?; Ok(()) } } diff --git a/docs/chapter2/section1/src/final/repository/users.rs b/docs/chapter2/section1/src/final/repository/users.rs index 6652b2b7..0eb66422 100644 --- a/docs/chapter2/section1/src/final/repository/users.rs +++ b/docs/chapter2/section1/src/final/repository/users.rs @@ -17,7 +17,7 @@ impl Repository { Ok(result.last_insert_id()) } - pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { + pub async fn get_user_id_by_name(&self, username: String) -> sqlx::Result { let result = sqlx::query_scalar("SELECT id FROM users WHERE username = ?") .bind(&username) .fetch_one(&self.pool) @@ -25,7 +25,7 @@ impl Repository { Ok(result) } - pub async fn get_user_name_by_id(&self, id: u64) -> sqlx::Result { + pub async fn get_user_name_by_id(&self, id: i32) -> sqlx::Result { let result = sqlx::query_scalar("SELECT username FROM users WHERE id = ?") .bind(id) .fetch_one(&self.pool) @@ -45,7 +45,7 @@ impl Repository { Ok(()) } - pub async fn verify_user_password(&self, id: u64, password: String) -> anyhow::Result { + pub async fn verify_user_password(&self, id: i32, password: String) -> anyhow::Result { let hash = sqlx::query_scalar::<_, String>("SELECT hashed_pass FROM user_passwords WHERE id = ?") .bind(id) From 805f8b4e72e2d7de3dfc6fc191f49151e9195fd5 Mon Sep 17 00:00:00 2001 From: kenken714 Date: Thu, 21 Nov 2024 03:16:02 +0900 Subject: [PATCH 53/57] feat:verify --- docs/chapter2/section1/3_verify.md | 10 ++++++++-- .../section1/images/3/database2-session.png | Bin 134695 -> 9482 bytes .../images/3/postman1-unauthorized.png | Bin 26384 -> 36956 bytes .../section1/images/3/postman3-login.png | Bin 30869 -> 41695 bytes .../images/3/postman5-cookie-value.png | Bin 20095 -> 32521 bytes .../section1/images/3/postman6-authorized.png | Bin 44441 -> 45741 bytes 6 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/chapter2/section1/3_verify.md b/docs/chapter2/section1/3_verify.md index a30ea98b..3e190d1d 100644 --- a/docs/chapter2/section1/3_verify.md +++ b/docs/chapter2/section1/3_verify.md @@ -46,14 +46,20 @@ リクエストの方の Headers で Cookie をセットします。 Key に`Cookie`を -Value に`sessions={コピーした値};`をセットします(既に自動で入っている場合もあります、その場合は追加しなくて大丈夫です)。 +Value に`session_id={コピーした値};`をセットします(既に自動で入っている場合もあります、その場合は追加しなくて大丈夫です)。 もう一度 localhost:8080/cities/Tokyo にアクセスすると正常に API が取れるようになりました。 (注意:`GET`です) ![](images/3/postman6-authorized.png) ここで、作成されたユーザーがデータベースに保存されていることを確認してみましょう。 -`mysql > SELECT * FROM users;` + +```bash +SELECT * FROM users; +SELECT * FROM user_passwords; +SELECT * FROM user_sessions; +``` + ![](images/3/database1-user.png) ユーザー名とハッシュ化されたパスワードが確認できますね。 diff --git a/docs/chapter2/section1/images/3/database2-session.png b/docs/chapter2/section1/images/3/database2-session.png index a3e1ef86df0d8ddfacab9b991bb42b2df1c36001..a91a1ef1a6b3d84983f3a80e7c3c1e4dca19509a 100644 GIT binary patch literal 9482 zcmeHtXIN9))-H;OQf+{AQ4#4<1gWu5rFTMAq)6|?5E2wc1O%k_Dn+D8ml_a}UPG@6 zgdPG31Og%X0(+l*?tQ-VoFDi1U3rp>RWip|W3Ex=`zBOZTa})MjfR4Pf?i!sNuPq^ zoFQ3$bKyMsbL-L8Jo)R4x4!CQiqd|LHS*3mheukEC@9LKXbI1$$om&P)PUX;6bx-A z?=v0lUu-ETZfB}1Ju-Y{g__k-G3{Fji|To$HOR3PA$v*&*; z64wjAW~?QzZLM)R_>An+o-b(F%pe-f8Xfx>?Sno82nU&Dv&h?xYSIen>|bJD0>c-& z0mV4$mCWx0$3-xqv*Tz$ocU)MMMtkuT><`ZvWo6V?Bv?li;Jc{_@S1k%}`}GMgNr! zj(1j_ks7t!`f_M=_o6gg)~lOW6=1n0rVwG!vSO%ae|K48a~A=XSh0>c8;amh$30Cv z5;>|MF1(RP(?-!w#|IPA8uy;)?e2@X&BO!x2f8N~(g@f}_Ay^Io7%-^soY*OUSTu- zQoNKh0Dad$I#+ZyX7|VYX@<`Tj8DGx?W$5Y^ARiRgMjNU8UW@KBR%9f=3j@M=RYKM zU$^yq^JcD3_uDO{w`X2Jh8(NU3V0&wZoL0~qq`zftj8lzDS?X$t8SJ5;Li>=g;fN3LKw?$v>O5OrVk`9z8gGI&<@Atb;o zNSfQW$y?q$F?8tiS|6%s%;vDAz11Q<^Zc~!3iOhuUgi>5ENS?cXsyFXPu?ozxmmJe zG`omLyMj(ze77IRaaGczc zq*9H;m)+fIV>;StS8)&IM`BnUHHn^%2n@E@^9t zSVAbqdC3~1wZ*XBlto0 z2#=r^SWhqIs_&n=Ur>AOGU*|puvp$R32l$cT#FX=9@>I^)}n#L>xqm9wVyZtINI*I zwwf6qzHs&>{pEOTmu8w3mP!B%h<99CpC)BhLOq~f#DoW=;*Zj$-y>Qr`B>?jU2~<6 zn~u->KK4+huo}S!oSI3rfUN#e2!-!!b2(=rDLU9r?k_9%xjVj`rL2`Iy{31$B zNDf0gZ7Kdobiu%Pt*cn;JWP8$o#!Qw2e$qFhx3mg&)(Pt-_C0wtWh%UX@f4ga|btE z$;)L-jR0yxACx)c2k$f`&L~bz6@7nM>z}K@;$)dE94OnMB(-a!Fk<;dyBu$~o93hD z*m!IxKT-RwPTxtZlAynp`?63Ejpjve)MEqwq`KhCfFs9{6ANG0OKw$n)yPF`;6Ben z{WjZuLu+z8Sa!IPJ--dxL=LKsG+^6BLaU9Hb5LoP8MtF@c)#~rW?M}AvNXS;Pp}iT znd#SWJ9ZB9<0I!iT=|>x5_29UCKf%J`X2dOQ%8hx+4dC{=v&=S%K-XU8rn_p#JIAJ zZfv};(_z2b0a8Of#rNZx6HC6{7s*->{n;R@5Le!>Kc3~3%}hrGay)8z#61SYAO5+G z(~@4UUEY9M{rvQCui6N3D_1YUx_h|BFR$>`tJPyV#$g4T!Gz<95U8}TI zBuUvip3urTUbfhnxw7Okx{;>w1K&=Cx|4GFY}7wcw9rnw+gOeWRBH9s+pK9Gv1=H& zySfJ*2Z7U)jw`Vdd7?#doNzdy%lb#>;2$nY*t@}u#qO)qJ!YT4zfA9Gj9@KXMn z-kd_+eyNp%rLWgZ+MyNST0vQjn@gqB(lhrnuSxW?Cxo@ov&`bH|_bn zQuWSeg)84m;s-)pqkQ#9XJ$E^B^nTp;O&#Rsl|losr5zr{6U#bWmeZD)4*!QNvHl@ zk5&i47-ne}z>@UV;@i+;stBW@;Cy|f@#`l)qi}NeNaQ}1UdNVYTf$C73T?`>0)I)Y zmvv9oQ*?fKeNxCNC?2YuR&lZLUH5PKchmW58I+hcy#D{2kxh^Z+(oxsGh@cYK%oba!nJyL@g+%;uQO>1)eqN`bn686moq!d2J-DDqC#^7_k8?1 z8P8CxCvG){->YFID;m!J$C{Aqx?sL2EC{)LQsX-)C{jYPZhkHj2*4=3lx!w#Veg(vClj*IMNde zB#v)pd*}2+avV(DmH|nQrJ;>x(YR#KwVJ|)icgubwaeziV3QTGntd}^taCeQ63i{+ z-dkZBzp^om&hz|@(#JveL>vOlynuO@Z-P)R*Q9Lc&RhDxc8*S-j1qpxY}HhDl`b$H z@=SmPvV*zKNAcIe<_%o{sbNKPmnAcUUCCWjff63PU0n={Y;aH)hR4aFLA=thwA><6 z0@Ko}Tdy^lf~IVr*(>3!&aDiHB!3Sa&A*)vGIH~Hia`mslh&G-GFY!P2>sgLtggWB z_1&SSkAaoVAvK?d&)c&}vL;4WkHgrokYQ0UyrgIUt-7F3*Y$z3loS*Xb|P`C0-q7$ z`7G3SpfhKFOV$an^z^^YT*5DuE*+}OJkgu)O{NWqev?^%9Lp1#1Y2|coB)#^W{5VR z-KG7MWe4&gNndNeZNuy8zY7P?umVe}g}$x?S?pUgDlefqJ!C3N+m`HDJ5k;G<;Yxo zlL@>2J?zCeT-)DuC5n^$?7fZ+4;en&qQ|Dd$2rV<_0T@~w|8C-pKOsgyvN@G?h4ea zRJYmsxO-TpPLnE_=kV^O#&y>{{TIM0st{MIMMTQ6O3lQ)T#MIO6GO0j1rmM|d12&` z4=93Q!tB z9dZw@pY(cZPgU7HRO**G?B zP6zG2fw$X{gZ5!jmz6`A-`z5;^RE$09{tgyESQqW3i6{sQId1n*B~SN@1%A4%)g?3 zeI0Xhn%w)QkQ3yo^nc{4f8zfCXTX2eg8!BQ`JJ=HZ`WpwRt~MFGjz0WZ$82M5<`z> z;Oia6Uf|#34hZqhj;f3zFP-u1wVu_QcEltPAWc)p(2>OQK~h#&2PJl>>lSh78C%)@ z97H$J?VGujE63H1ap(j8`U0wdqKpr5iVFm$V=!pb^jqv{d<1Fd82&30s6EL>7J8IxRMGIu2pQ6{es!O)(d0Zn2gVBwB8RpHdKU% zH5zWne+rr{c}q7_V|Iz%K3p#cucgjd$j1iE9FoF&7u6j*!n#=CyWvUl5bTG@ z?EDXM4thlL>I;`m_)L(a=!P?kk}e6ZP4xQDNTqUV46QWU%Vh5b-P*HmasYXAAPCGC1fWcav_jpPbn8?K{*gr5t^T@GbRw1W5tcYUQ z?R*brO2`?$1g(-Ex6%t2E1l1bSt*ms9hA5-rDAsX;{+u}8qSqGUM3(q8z1Z{LBzu8 zWs?A1*lGLb<#*5Fe8p|)GGf#1Mnba{0db=CaA^_)S`J(cXVH5TIi0ZsHraQ5#W}<0 ztlW$I!$=HLrfuPx^#8N64>PHM(h;^yZ?0Yox9g`;SfsC$)34hq0VdBRK3)m-0kLVP zb2$#2EGpY&o?%n3EfoVfZ;wfO7ih*nC9l6)cObJGoR| zCeA{K9t4I6>ySO#My5wak8qF$<#!vY=IJ5{%XsXu<`4{*H9E7BZr-@PY9zX!je{O}r4% zwo2OZolh_BXKa^)*;|Vob2Kr?qTi%VsF80641vr zyH=i{=kCo{Ap1{mZMEV+pg}(^q=roa0vWxX{>2~d5{%ti{jjUTWE>r|m~;5x$Wd35 zN<0qW7P7p*EIL^yE`ox}W`QsSVg*5JgI4wXEsR41G}U6zaOMpiu7q3O!rIOmTl_JZ zW_Q}A`O!^<%&CeWuO#@SpRmx_f$WPSL)I7Tzb(UW_ab({`Cb|22;MXRYX3?%{9ZTQ z$qj#(be9xaMJNJCevE!#scc1y%XS~Sn#_mcUWn4d3K!B{=x2g=RWFbx66Ew3O$+O` z^pH<}$lOMV&E5dw-s%al3nFqN6_UkSCJeTmJ=v9X9I!yk>B{#L;IXN(_zf<_48h^Y zJy%l`zmDZuY>eo|$w&)ZC0L7U^=zkxc|Y9rSq4>6`OG2ToB`D2W`No5kC*v!>eI$c zu_m!bE3hXA3U369K>q0dN_*f=2aC_M;VIVFWZ{=jpDSF83DxCp+Y%gdM1n35I5R$d zU+Yeyc>;QFo)AQ**QGMwfB5EH&BOV4fR_F6UCVyv;;tGTF7;Y+_#9)~N}s>s+!@5v z&^T%A*j4Sdt&!$U*OV|4=_%-Ykeqp-1x-JWf#4bH>gDO zQ7IF(LLr}40m!|&&U{4N{z`uXo2AGqjB(yIazT4;OWW$p6`MHJTeHLdq;AjE?_wKn zw5c=6?`Y{hZ$XQwj1L%W@w3R!+XFLU0qUMAJ2?ZHc6UkLdPL3(NNY~= zY!(v)0sBdIYr7@hy9)yRI=9m{oRFb2zvCK`a3qAQ2qC9tWe?^pKR%ODt(5u1OiQ2j zo;(D&6wl7R#4=v}!`0zZ!94XDRG%?>+p6V?&e_hOE6!n*YCbxh6XBX zt)$DBGQIATA6P^U))O`x1Ao&d=u}hzfjeS+`__lZo+Hdz^>!Tx?KIqTC8EKQNrPlM z|ADlhMsS^8{FryE@yqJ6jmN;aZx$myrJ>Et+Ih$cpk}9S%@3vz*3_;7DYV)Pmy`7w ze=qnfe`b<0cigGEvcm9cTxcsR2lvDsl6nm%5Vh+%DHtc9+m`>sb7-@|tx1l_o~C<# zOzAu&hN&#Nu-hXm549(AkrDh)3z_S z%%#eB2aSTYdrCC!hz3W6=B_z?n9uM8j~nHqDtf=~t}l1oYVWqiTRul_-9x+lbYI-q z?%u!p3OqpU zhFCVm0stM7(eiyN1L`5}XZ@e?_hY*PuFif$bR@nA!<2cEr}5;at${D-P&=4;kznUp zdre8J`>M)Foye$HiYove=3AA|zvRo{$bY~4^=Mt)f?t0H z!=Coa?YP>AVwQ7Zc4np#gu3%d{L8tYcD-B1ZEQD5FMULZxU#{L))y;9(EwNn2KVUVO+wJI0H#AI68 zT*KW6ReYBpul>5nTd)FwuuIK1l8Ta3gIj}YiwPoy3SCsx$#ch&O!E^BUs%bSWU`Z? zlTh9-A1yuseCJ`rao+K7vil9rQ-nJIh7my+E81weo`K!U0GM9f%jUL`%Tteny8oy3%W0J5-Y228q`Hutf zd>4pQQC?NaNA3C>6Dxo`H^uuSa+bx*Bec7w<-%zMFXjPCevE^Km8@Gg2KH9+MTQ?c z{NT=udeO%#wt^=!a3d=RB--D7Saip_IO)f&7*{9O*o2=tCYCpNRiB~KYuT8{kqb;U zO=Nfmy#npCAMoGTp}lHw!Dkct3D9n9qrkd)*lv_|zr=Jkd=#-C%fflwP)Gn@M(^$%10M)fPIQQy?*hUtV6c!&X zGbtM=wde2T4WH90c_+P`?X$+aWC@WTwz!*g%sCjau=U#ruA-INmB1v7b@!VfAY?~Y$}+M4a-HuSBOgbtUi_cf zc9Tu(&>6KOrwPPa2%!?>5)(duXY-pVwN)a3A0&?q09A#JVYU`WD za)KW!qw`na9;C3G8KWr@ocT&WdFP!}-#(N(sJ(%QczNl@A}dT0*Gj*R z!Kv>!_RStorS1Nf?LV5QJ!B0r+(U|Z#fL^>P5Q)*6pOOzT&TXfHyoS~QEHCb9-fh# zK4%it+!k_^2YuM^D;~reu6OKV*CP%5IQ1*9+qN*d)J{;$ReW3HUZxOU0@-}O$M=>g zps!*1)!p=^WAtPr#7EfB$1+0{7C)y*N(;5;sO^ZDJzt&DToAV=&)shABDva6jkG@3 z4OfZ_?0bwK|AY~J8U0C$Vv+KC^nk5?Ay#S40`#pyujjYrTJx^%FWJf(j^eTaHQD@) z1TbJkgtD1{!X^x8Jg;fD(j1g?thc>5UD@ydsNNNIw%xddF!@r|LUqW^`@XxC?Z`*4 zu>xF3h`%KCWVw8i&>Bw*V4d>P*;c#&0d0gGm0pI9cZ_nX4LN2m?HtkCH|k6iU($4Y zvLXU83(G*fW+w=(MY;jUS|Arq5tWfLTGN||iG%JPZENxbQzMS28bkI;gkmy|Y zWEVFwZvG2tSu120hNTsF-aoBchJ;9D5*iC%CxtD<%mvTkj+#CeeG`}#h5mw7AL(Tt z5(zct8I3Ylnl%E*ylca#>A@YAXb>YzUh;#CakB-hG)sK`y-{Sb?~IdyC%jJxu7DEz z6z6Bd%gq?Sg2z{1u6s^Gf6^l==a3gjp9!?&LCn4qupR5K-Om^_6c4$XxXq$q*v&%{ zR7O!ph~!2Rodxs1XdYV}jces}?rZjp_R-`kY4bzv^)zzFbgMv_e|=bbD`}uol8WTG z(A1^bU>A{WCom>Ws2EAv+P0k>doKb9aM@rTW;-;<@i#2noyu4NbL>{6biOZ^WLn42 zT)H;kV22mplaH!Js{|hG07we=p}(iwBRl{j#tVL42cxEY!+XUr`diw95Kv)qS*6@% zN!e1J%Chg2pzbQ13}$tt*0R%JO^=u@bC)#y+ahmwMr>$u^EY&{-*;5|7fe3w*u(I_ zSc(c|_ucug(McXu28qnH>U|kr^#XR;eZIvfjavos823bcol5KTK#P-4v*T}hSHZEQio5(J zlVn`gQ>9IZZ~QFo7RdR{lL9SY>Dygj1}BBF(<)U&zFN!)X2u z`1}L&8md0DQ*%=|B^3$xD6-yp+mbP6@~CFYFV^$_!>IES#O=jEA|&U}WJnCR3--zL zzu4GBN3bkHR0d#dYr>52#u&pRV^mUZMpVV7*0jrri$|aypW@hRx3r>F*c?^UjVs;i zH>nMta_aIAHLDm5H{i{-dZCy_GSj`%`O<}jY(iDouMw@azmcg=|2BSo^{M*m+tJjtrfsBV8Vjo^8d*SYzmYu~jep!->H&EWNE zh%mhCeiviSq~~9>`k|J2<428JPUmYH$N9DmLxUxO(c`VIZ4*d z-Q+!w+8tN2Dp5Pq+)n)q9mheg>`#-)b5kix#$#oe=<#Y(PEiX_nIr^Wj=aL*LTzp@u9>r9vg zu<#w<`)d{#wz-}b3F`#hcz)7L`||+6!1G=W6^4zUh_?s+;?j$W$D>i+!WJ{ZucE3} zaCYv9h_dniqb%NEWE8yj(s!{QqvNcRBCm1>6Xvi-S1K988)7!tWqxA;@0X6WqeTNv z&as}I@_&-)>!ob_sA07eh=+|7@P;OpewhQ?&xlBU@+;J!VX{pA3XKU=4EISZm_B86 zvZ^`E9_AJ2wPQ5uVl%zxY3FTwpn|n{Et>QdTT{_qJCo*XZ@H|InLop~m%k0{PHe?o zBn^()XoL@W5A)>h;I6L!(g)CU;mhK^j$>*qp9h3rYM|q<(dhM2cdT9p&ii?8FtZEM z$f#-Xo;o81xo!64XW^!C&aBQZ8Ux2DBkqW*b<9!Y4MaM9o7AFcTR4Jhqk^{hPdQlr zSI;upujJwf&eW^QOjnp}TenFL-X`aaoRR8ZzLSOJmRItNAQ@I;s4ER_m;I-wbHCN1 zLQXZkq$i{EU~J;1+5zjGM<$;bVWvw**qi3znYPa8Vhh5g#Zn+~|MizwiB&V=?GUE^(WjbJ!rGCHnb0_+b$yVQXB-x9PozIDAZ0Wr%2Z{ z!cFH?8AmjoJ6?=s($3v`hhPql5ovr|OE6UM8TtCEM`uUt9&!KYzwluZW&`Q-kOXq%Z&nzLTAB%NS3{nU6$>)_sM> zN?JyMRlZuGg{Jc`!fHbst>%BxjU{|f9#Vx2P~G;IMx2w@&RBYQ`X>qs)s@xE?4Wa7 zC92|NrYH|Q-G4Es#N>{w^pbQC|B2PFnUx;qjjpjr&jr#e%r8lP7XZ-1;)5vx6DRqT z;`MUYKSbMqNag>V#{74V{ii_uHy-dm)SAn9Qh>b2NhK$_KMg+tF*P%XthSEQ86l3ON~;r z6cNNuB1Y_=@9&Ruo$I`RP~<8%nZHl7)(XQf%)G>JrG#! zMMZT{amU2a4hGrkIK0p>Z8(oQ=WZidwW|N2qoJXB^71O!V3MFJ{lwIon$PfR{(g0= zY)TYW4&D(I?CsSyd}hZ#$dAlm1BkdIa{)f@Bt0`4hn320g0^3Rrx@P^s_qeTTHvyak5)=rSF^)J~W!%PSP% zkbH&WY81}r)8H9$RP0vqjal~7=R(UjdIDapbSPIB-wCMLa@$E>Y@ZfSpZeAW3kuD` z2lGEqk5@DZ=`H3Ni}z}jXq|E!>9p}bdZco()|K1+#LZL{6sbnDp z8@1SgcH8|wzD6}BIbCyFu4)d6>oopS()g1AV_f;ByM`X#>x${1EbjroAh}a9HVaUu zwt9sy-$PZcFT&yBI+!vj_FWZ=e(c+NwAQV(_ivX+?unawGQBWen8=79zjkplV_S8- zf(A&h8o?HO@B#aIbw8I{Mkegko0^mod?!HVT|hvLiX;l6ZM+yQfcp;HEYdgCePkR}EMG)2@Hqb7($1 zrn|cBG3)opKT@v&E}meXzBp>v9 znR5j9>mD{@xDJRcqYZl3FZAk1ZC9NfS{kF(#n$@bKI1{pL-t80ZZ#H!k;E~RP<>R} zgrgwSZ||k69C4!AbJ-uoR(wkkq5CO?+>L}E^{kOCr_AfM>C3vx{Jz+_B|{}y1y*Uh zyHfvhOG|#zDfvOX8Jr1P7ZW{}{C$pJHs2k5IqRl|@BI=oDt0~6^PZe4PYXr~X!1;W z%SarRHK@GwMX*`&aEMnp6(9Do7Hik)x-cBMo7~NZ3?{Dx*TbtzZW#zBvK4`u^aAT% z3uX98!iApD<5Cf+YxPx22rW>SIhx8(3L?9awwOPZgQ(LZGU`~902lf?_hJHbg&u>G zXsT{mxw#(P7#OOPeT#f>MQth-=OsU_bT70mSdAHY^SH*b)OsfJZz5aBt=}9108g`} zp6L+L69daT^ig$U%R$w@>Wgiy6?Z$dRopV;ecVs@c95-cWOnLrsVqY#Wc4_^VS|X@ zcKdFd^0by&A*bH-B*6ST3HWvaQYSqd^mFv8uD3?rC>=gr8Dcg>Qzdrvqky7cUyg!# zIBUW6iQj!~E(SWTyh`JB(ZD?)*UeTO2yyO*7!bL}6T&=wj&>>1@MyvR7!%*;f1Cbu zFz$I)R6OL%Ivv62K?ddZ#myA~pJfi89 z8a(ahbF%}`zIc%;6tEO~D_Njfc6U#!E@MFMVdJ;scr_1bgnPnT_*`O-N_8c-8r154 zDbbPO$H*k_MKuhVKSNNDInO~wkp>*}#sfYQe1QH~awX~Q^U64ZL&y<3bXT>wW#>l; z{Jv>il$_*pS&v#We8c!{7Io{#NA?`8f&Quqvs!_;8#j!SRPGE?y;|(Ufb7GJ@VRVV&|QDl#7)oZ&JSnJ!sn39n>Radd>>My z>j0sU1B!n%_$A#i;Y+N7=GzK&Y8%Da{Glc@xCAY~nrIDs1&FClSBeeeQ{Kz6x zu!yOvdyXlLZ6zfpt>|w9A|DuZpjHITzZ9YhqVheh$|Cs8L>zwijvfTZ4D+{5GT;+sdq)uZ_7pNai9uQlrizz)B}>)PnZ^w4FpFRfvy`>XEj z^lc^`KLO6CNhN*OHew*2VN6wbGSioJ*p)uaR2oRen?+k55r5VtYMvj(VDAzC24Z5w z59;0`q6T7skw*u}9vpJ%CQV4HBBJ;u4JY{3ZS z_vYv~^=uW1>yz7CdN!>VuINXOF)Q=3@IisU^_Sght+|a?S%C%7x`-m{C_Kl7KJ4%{fl23JPBJqQb-srnE-QD5j_6}=1EIS}jQs`WKiKjy zCnA6Y$whiX8M^8Hy_P!ZN23d#`)O*GVN(p$^_`}T{(8~h6MWp z8oy6G3@j9B20HUU(rK4TlHZAzKiwC>C($O;GJx)QUunnw%Y%s2hA*UGc02*NpTrug z;zuhkrI#`De;5d^aB#xt6H(p|}-6w&UxpQdHdNF^KN3A=Kr)L}kKCL$@ zwWb!yVHHdr=J}EprzL%{f>sgr>tZx+ZjJA(;@I6v#@GzFMp;rXng96rOrc$EqqD;O zYr@O0$KBkbvXa9lO3ur$!>0QG+SRB;CqEQcC6ZTr_2~Wq)R?Djwo(LK>2qnP?N*XG zA~Ej+OQZLs(xziu+a!o#+$zT@f%P;MLs_ zxrPNLzI}S)2U{y$NFqd@y&?{E>G7SPcAyYA-;%8&(obSuo&=MtR(a@RX5>~gv3H^c ziIR9hXeV@PpAtt$lLY1|VK7{VW)Cjr$gy?zIb2TJ{;AQK;aQcJ1vu2f&f=2-^@-uF+xI`A3ZYxHt{e-elW=#< zwu9T0UY9_`Nv+tt*q?(0Fip6r4J=)i^8?8AxqmNI!P}d-CLHCWf?XgwOVLx zU2^tnSDM^CR6gg^a)pH#x9NnPn$vYbe3Mn5vHmd#=3_TcXokD@oJR&m19U_1_#R&{ z2QrFro?Gek*ahod3@S#XMx9u(6t|MU5a|%b(Q5`XQFs|l#sy4Xcfx*oAhI)w}yHR$G0~3p5mMCl0qU?l|9UQjL)!C6%NO?h|b1y{# zaS~0QfRgpXlB^(bFzoAL`L*U4F=idGC8t0Xc?UY1r_aS98F@Gf71|#F2exaY(~dWH z?g%6i&i8*42b7EW1X_4@iUlosmcMyo7qK`@O7Xcd?1q4v?AZ_jc1<@LFM#g=Gr$PDE&bx@f6~Z=`eP$;p@~l%6qbEEs9W{cvQ_M8IKsIT;$W%_8 zi1_VPS`V8n^*1duf#+?LrCbH_F$|* ze=x8DMOZ5?X^{6EhtVW0xhxpvT{eW`{)LYhkDclA>AAVarl4}~Ypdc5c7(`%MJ=#A^IMNr-c6udKS4*i^!z1oqcvBTSB^`O~oUdG^Y zQMjgAFN+}m&ZeE^u=1~%H&}jtwOF1h^JrAG>#bWTyRO_4>Jzi#&E#VV)84gy7NJOv zfTz|HxAp_@8UIVnE@|91iNxUV)KM3lMQmX%QRXvRN32*)<+EF-c<#25bIr#R-+6+3Kv ztk22B{YOV>K3x4W`E)HyaPUxN5TOo;=!@RM0T|11z-oL?&rkv|}Ue9w6aY*G{%QW>o3@1cbsM(D~KK-971- zl6;j7(pUo^A&DCGO0YSzP(j_wkuBaQj$K|Lb7ljg( z-)y#xy5rzlYnNQiSvC8}^z=sCdLrB7!@Ua@(8=~0HmvL1vUM>(CSyRKUu~Wx2E955 z-Mv9bM(c^{@S1Y{Z>{S%rV7bp*`YAEN0G-0T)>~rRDORY_5xzmPm6t{o|%*Ywqgcz zh%qCTE*`*wx`*`1=lg>(3s-8j$#l#hN;dQicfm3WI`V=M-LY612#3{t_+#KN{JA(b zRoTn>7}X&fy-RvD2pj#vnJ7RwZ+bUs)c+Q{Q)8Kmm2%dN7+MJe+g|LkB0{J#%ToEp z^L^eLG5iU8){myJ=zS{?B^6vivI1;p-j~n^WdI!}Xl%aqk1nqtzLS&BbwZ@vS}r!< zIPVJ@lj$Tor@Nl5!QKyFl22#O<`K1-8xN|&uW}LgjLe4fcnDn3E=By+D|jf){2AXM zD6YAB*Hbk7?SPqJDF=vEyFsbd1waEm1s1aic3uJy{K_4nXCALxo%cHCGsbxp{vy(4 zJ$lvP%kU2+`u?VAx1gW)bUttzjZ6Ry^AWWod$sAJKd0$FM6$Oc$0PPSYfl35J5aGv z_3{1M$-+x{FAqJ2*;bp=|012~?!^QvRPv||YDM7j1m@ARl_@CstS(WfE;3?s$$gV3 zgxz&2W>%ite-BNR;~^yHhk*M>Zb)$0yIvrPixXB!t}Yj@So8~-?WZbR1$;`!r&T># z;LX&3ZIlt>+(H-6$V?CJ8u^Nv$MGy7jWB3%6cnx5DUCaAEjOvN2jD)I5O%pVoKgFc zKRbDpSV8cuJ|cN&K}@OjoJ1TZbPCR|=riEDQLoT^(I>BMJqoXEnwUEt?U^`=-N}xrs4ULR9_VBgni9lLU)OR(j(bBjhC=UGK_F84o zMJ#bW%* zxTI{Fz#$hGI1lIlzTg`(?C^T;o-hr!X!yy$BKtKR6B-dKMK>xYexPz@xRO__Nw0y# z7>?uW2nR4AZs@^^(7-{vo;?yPZYlHXyY#3nO|G$N+|#Rt=EEgltpT(%L8|I-@!+*L z8i6A>Nnc;r2Q~FFi^PS|bg=t{Qyy<@)e1U@EH)+!O2@a2TA#d3lO)T4J&}WNfb{Hc=nPIadnRL$qI2OzJRky zDWH7*c~aY@fZmk7$23qZpdWEa#=b7T@CF)@y0%+A6-?e;JTh7-VKx;>K%^t1x#qzu z6HtY$16vszK>7apnM`6DsqR|WvH5=8wS~nPMYu$+tB8o`&qTJ8mHO!l{NeU2I~a7D zK&&Z-{ERvLN*Dz9ghfYzTbEq)Ha}cZvrH+}WgVT*ZXnFaU_OmrqQE)xe=;9v&!%%^ zcFyku@yk3IQq_9bD|E~8bdLF8_p(ud&h5d$qjD`$fnGr}x{-BxDlenLvrQN;;ohHk+81m|F#@&jTDv>y6yf@ia;C z^*B*(+Uj!0{5T&G>rq?dP{-^6izfmqyvw8ik3A-0C6DTTzzez5-marTqAz6}RqDEH z(}nWk_6(vM*@pVU0eV!+Lup}5o`fI79bYaogjoo>v+d2Ha}f{xXVdC-`TNBzQ*W4~ zJKL)#Hex68HYdV7Cp}DO+Z-isjO!Pq(YQ!37 z>6;P5)bZ3G7wXBD8&drRZZQpJ8xh=I`YTL#6}`H#$HRmRA@R<0%y$bW?3!52w`t6F zOoS?WZ}lQca~`I?=qgYfiQ4I&;cz0H+qJHD3iJ%sb#RNH;W#mxfdTrDXpk4Deiu5r zySrT&k-#%o7&!wuc!W@o&Jyjfw9OQ-m4iEs?5x`(MWPQ)V5`4lkkgQ8z}#V4VB#Uz z#w0O)OH82GFXq@B_*z(kof?2MUH%Ti9ATCQ;a~=L!a`UN0$UTNcco})ub4IFd>!8- zg!DJ2wHjQbdE7W)o5Lhz2|NF6^&hISiwuJuod+Th#j^%1IMBFX#GkHu{6(fmkjU$& zn&)3|KF=Xf_|yu{_j{vSkTs)fsHB2Z67h?U1hZ8q=~RtYzcZ0L?IBg>@kh9@ zoL6k`w{+O_mw5Dq46D%iYy9b&wW*5lKdF0Cr3~FXHrhkYUW# z5}0^3R-y9{givWX1f4~#*7eLx*vQN^bpEJ<*q$fO;;Iw;Ylx}AI^eo9D<>o7h$JR7 zt4ROSytx<-;}OxPQz#+jl|fdNI~$_LsQ(b{@TaFNk8bG|J)cinnSO2%k`x)zF*!>A zqINcrWm}X(Cg#8jTQLwVs$WfWr?kH8IkS+%yJearn)dsN>D(pss`Zwa(>H8&31LYP z#fVq5@D$Eb)86l%&L?fQD&2{@l`t9uS4j`Id3RN5R$Nf&`dS$B4&hgQ&`7+% zA^IEe0Z1|kCXhfIz$gx z?H1>mNsC|Sp)u%`$E5P`S;FNCHa`v4Gks`!flisY|C{#5cC4QsID+5K#HZ=Y**x{m zC%RWR9FwxB@iRjfmWm!(#%-p43L6PNj5k1usT%Vp!&Iuo7x~v~txVan z(gYeV84diM2`&q$=U*gj9kX9>-nke(DLsAdr$vb12D-D7?}u?!Rvh$Llt=NfEcV}` zK>Ym$T!_BtJUtDFrg$Yghu%1#u)MQKuLv|%HQaS_w?o>Ksru@ll|{hoI(f^H*?)X; zmNP_B*50-jpPGN?)$P^8$K%RTieQMP-cH(NT1=o=Qg{N1B>GC}1HD(NwL`>Y3NN?k zSAi(Ge4SkitF1xE&(K@Z97&>_n|CWSNn10N*Scq=UMnq8zlxAAQ2NPMPMW|e#Pe$m zvX;mIre`42P(xw*eJX;zGTPcTyfG z>G%VFjgvm;w+F*WsluO|F1_gG<)HM8yj9(-z1~m5^HGdaaUAwCFxi+LAL7ihwCmVRKcYAlvET>YtZLq}@!D_))?iXamhs-nU9rC2# z|2@}M{AxK$$daNF)Au*oGZVIsqRAC`TsLt=ghq#Q>*M|>%q-6^RyPlPu+5W6t38^q zW?cVM(Wrm7By^|eIQr=D$m4W49l<1Ysvu`VBSRbS)pWz-9sM^~deQ z8|R2tl&Qj`w5w3f*h>X*A&o4P<6VFI4ZuPrAO4}pqa*ivYmkxN47J9`4&d%TRy#5? z?&YQ-a&)r&)cLnV19=6Wjk`lM$gcQ|&FinGJs*yDcS>N=x>#q$|4Klkr*t12l>%k7 zrfo|}{jE-93%E5m?Gn9Cs!gvOz8H4}=~N$-)|&m!LW3@rV>iO(?i;R$tqQrZr9c{n z>{rq`1A)ZdL2HRGnWtOb^MkrxeQds*TFsvCI78;rFhc_hP_*5``+VwZm-qijd7se6 zv}a8`Bu2@H22C?vU&NYQ!UlJqjI}AU%yxD0-#VqRSj0u@^ozGFo*>8uCl7zdC$jzN z{FCWr-NzdF7do#Rry^{U%$g={_i;{LiJTlP`$)og?Bs*hhvG98ZPH1k>NcOLqylg7 zKm{wLr1w1MBK)B&@6-#&c~oilPDGFZgVC*9L2UmEVvi-`Pt1gL<~s!0`p$&d;T=MGmU(+FiE|JN-?Hq=;4v*e`h}QJ?4Rc;^J`<#DT`YyGO2U(Lt5A=nh~bEf}Vhs^%6h2-iexx5^( zU_t!Eh-^|>N^K!zoR_;RFPF?{(heOZktV3|>r1>ST0A?+N#oy*#r=4DMsv1-FPEzA z0C^+}*46*b-6_=G?CVS*ZBPUrA(+R)mMCM8Zkn4}>Gvah63m(_oe8$xhh3RTFFDo)qs*LIU70cj3h%6=a2$WmV2Oo5vIZ^8uNy|r{8rV4_<|LHAIZO%zbGnOe~!LX zdZ%90lIoV4`4s+khd_JK8Z5M>w+!3wvTI#s(E&gi%;HVycrJT55S625@3V-R&9(NO zAKgLXoI0;f3SAu+Wk_*?d41Y+H!HWye26B=4b{I?kL*97TVg-g@XRxQl2@*Etlv(h zbTlDjBcDY!botKN#+}?OViH|>w<9|WrGeXHLgy+aTsLmu{kW=91>;j@D|I+E#Cil& z6@2qw(LW}D}1dgkA$IilHyP? zpu76m7S)ZTn}f8W57}Z&5P!4(GNtv*#jVE++^}4@!OOAkFQS^itL1>mf|=BBXJzb^?wlgVZ}X3_qb00$kZCnbu(GL?M)c>?A8 z+;8wsNra_?-MWGs%2=HV6*huQKTF$Q=rcVtS73#&SLLCK9ICz}HhLi_33Hg3$H)zZ z4W8UALwvaVM%Vh)-p}CdZ#+cXsaJ)`)c-==X?xKFdXbzAz&~5$iXi>uyGL8>Rc_NVXrbhw@hxO89j_$$PP3bJX*Fh92} zSRyT=wbt*Zy_&`(kyU?lCbBJK`b($3t*_|*r}wLB6)x3q9*hJJ{WSUJ4tZz9P)#m9 z3MN}FhKHO7e+UoSd8-*k_v(&=s_{7C)+f3|)2*mT&bVU(bgqHnK!Ec8a1d^9SA{>> zwUkhBC~HYsGELo)d%yI#m?OmvYj~y-_6EZtBh*gxZGJYgk@L@*0|&UGkoa>+NETl}8Q5+LxNVhX848d?LS;orR< z*udC~Q}9l5K>_2R;qF7RyBH7K)6C|{QC>A8ALIXq=3e_6yB<4+KEB*WtfHX6$b?c< zE|Uis-E;{x&D3q>^CHizuP~;q(hTDo%SVW z{~jnFLlh#_+CT%0drNLQOK{U#J{Rv=^?T0MQX0B=4fVyr9c2quZ0X97w;Hfc;R~>q zfQqeZB|HasP#tJ~hW2IV-GLp}fz~8eb&f+Xhv9tEmBu@Dp^v-stQTtQ^|K`MC-!)} zy)R`BV8zTmK*~nEUEzbR&hFkfuA`{8i+^RkN<5%3*PO3PnF+MY(2_o~ULSQne{39* z>iP*ftW5iJw{lxy;PVMXz=qaM@y~7wmvJ(mK2de!jBM!fsN<#<4IQwkxooATZtuL~ zj4$BZ^hz;S;P@#BJ-;jbRGeWc_fHM$N4>wHkEz~*V{fwPRCN~wUTZd;Af>FJj1pu_ z(k}@U^=`Ds_-DD#`sBI*(}}f&urA}GI$vz4X>sNmN6>7v59Y5yD=>mPHP1BtRbKd` zt5J^#Pe>~(h0GaNxJ(KGV@*w4oSGQqXzfjk66b@5GuXG*Tfa@{wSh?9)`{w+3;Bh9 z!gO@@HtCd4{(o~}sY>aNu!y()9G__AK-KlHs^lZKQR7b)Vm*{Wc>nsti<-Ku2< z_(*=r$USOZ7_VS$Ph)D?;W69vXN3VV*VY<-r; z#Mmcw3Yg%26#9hj+-CDdPM}cf_I7W(=tK9P+D5ySl#2G&=p+ zZO7JH4T#>;(kt?ROPU#q8qv3j?YrlSUO=l{P~r(T#R2$_B^TXp@X~}wQ+;~ zQo4e};BA|4@iGAl!k@{zvMK0g_GveOlYKhh)&A=NR7txHawSTOTbr)swKP6eQ^7B- zfU-WG=rQ%Mr@F9jf+vQTOiw~3v_qBMjrPAFBLpkw#hXhV>9)0qBR*1Pxz%AKFM6Yv z?M&1>%C#uzEh-MS@>FN~i#%<-a1Z6{8XYc>NyIV;U1{i#yo?Iz!&q#{ctQ2A5PX)*JW?9{W_m9PH)H2j zb=G-C=20WU?!c}3pNw&-8|?9Uml_WO0nX9*x7Z@T(aMo!#As3~A4`FY0tXcGEzB!N z=J{Qg=gw*DV9et%>+@PIb^ix={(Ft3a#_<_)YP;g7&x@YMPn2)lMEGEv5x9yqHe0d zFKWzGq+C77FeS123XR!0`FiAB3M@l*2 zy{+!2EE^15-B;z-S+-9NEx-JrFS+Lnn({F*U6e_Lj+K%0m+rrWN*vFS#Q)BqCJ(h>!C@qs;p7}6Sc~c1`U8TGUlwrur%%dnMs^uZ;4e<>H`x8 zdO&$v)41@6ULJj~Uk6cjJQD8SIHpecg*6#AXn(|5#qM~Qp9K*@?KvefL}dvOS5J@x z6l1tgY({wyLa|ZTJ|7*qjUr(qwe( z=cl#3QGDmpBNR)1y0j_Hv1f!!C#BeCYTR=yw;o3%3r;G*3smQC&5RSInm=t`RTkn~ z2H1tH*bJ#K6Xy59p+9hlf+8kW2GhZryH~g|_m9%fe3^vW31^nA7a13Qg83Io^ zB|w68@CA0PMBtlx`)DC0J+GyFsnZ-<4c{yqQ%aof=}LQ#>13%5<&%0R-}%N0;iwqN z8rJK$ppQSn#$7#c$Mm(2XS@E_s^O-7S_@TWe;9gvbM7VgN*7EsiD%Z^`%v1MFiku? z=VL~y{?$JDYIYK{bbFg9svC29{-DPK##|f&-%MnR39MwS;RwSmJidEy@me`B#%y0lTYD}j~7 zONW_jWR_^>n&4C0i{T+8^d);p)8;$Wfemt?rr3fbhb+{`sC@2-nK^f+O zqiav)ypL{w`ikY@^jW)Je~$)%l+MVg7<)=@>7)Go>!)R6Tm8HeWBbL6 z5;hLZuA{^>S!YDL;y?^K`4nu`ZT;{Gn8AeYd`Mlpzb@c7O(a^idx`J$gHi*BeK8^0 zvCn_3&cXb?u%uC}14e8sq_Jnc`Q6RO+Q0gDJK1{UOiNP*0$vKl@Uzt1>69&7o>S1tI>4!>+Guyi@!=!ToQ(l}~8q3@xt;vqlEl}Y7iUPbTBbay0||8O1E z{opgs{H0WTpoZl~{83ui>ngBkeLplpovgyZfq zm9X$SI9$&M&M8Ns#m+QXd0c)P&wY0b>P_dboVF=w)@JtBW>vt{84u+*&J zA^#Z!A-<#t0{c6X6L94Xnpb0Tt;gxV6yka7ga>8(IagI*{%mKM>C|E-oQE(FsN=`# zI||dd8xsc1iRbLxYJ(_Qe~sMaIKt}-A4FOK2LR_lq1;0u+b=eU5n5SoS*7bsy8Mmz zXVy#zAWwuVHBpDaa6SK>bEap}-3)y9UTS4e^tH)TP7)y*8c96mAE9GOT z|16O%*W?(Zgv)H}mW(Et3)z#U;ljW1@r#jMzuWQ!LZ4EUZ}}>fhoo+5n7va7DO7I| zyYG$sAtrY04E1@;2B4J;xIQ}3ln)HhPBIhcji}>knQ|$&WN)4JOLN5P2G9LEh`NA0 z$gfMLwtmW|nxp^TgB~G6W5x!ahbj-0!#7`p?CS?h4|WT%4;YU6bsvU4ZsJ~e(QvIN zLFV>d3pl8MzWj<>?7oFge>y3w|s*19nOTy^YK#h6(IH1Yg)lt!|j(H#~Fos^Zh39Zq2%tTLZL2C43<%07 ze?=w>lC+hJ%Z-}zTn&WD!w%S<9(XG5%U6&G&cF1^jq8Tn%Q`(ZnN0$t-qrSp!ru;l zDxo8$h0bf-=X0q6o}#Lk=MntJBT*9iWl@id%j-2srvroLOhR8J`*bdw7GrS^4a|~V zAir#|DE?{??=|I08; z>-J(y(kqG&w>LY3-DzN!rkd4e9dD>BJefNxKu|JSUNF4CyN?i23djGJsgDvcgRI+` zE<&=bJAnrK3(rHV=b-r~ODTe>VNs0RH1Xh9-f1aA7FC?l5dSy#W1e;hLtUNP+2RmP zqL?7{?ZRZfPtW(_F1sUYU;D?&J*E%D_gq*8LLxc$*L5?Mu9TK#%vcuDqLm~sqQq6H zAI)EKpISu?GgBWyKYNCs1Q<0?{6?v2CGJzQP=w$si6}e} zQ8$hofAQXMV9YAQA2VC~z0*(UhZaxmm==?wk1e}57@^ZsXfHKVYWlhl|PYDUUNPBX{Q7Fa36X?Ntfp22^i~JG~AgNSvjq@^`9gl|O-6 zp0c<0`{n8Tyxl#U90^oMU8(ReWqmGIa9nEiO;FP1r}2GpZTpowf>U{kgxeoq zX2qG(sQu`Q1iD{}6e`PC1>RJT85Vbh!5pAnd=|R|B_B>&?YwA?#7lEydoSDRu9Ik< zk^9ZHzZr3bPku{Z<5I5dOBOtKkx(Y>+O09R6e9RH)D11OOhqk&76)QY6BXDsC4v*D zudf!0ZH@Jve$!eu4Sf#%B+b^!mMo3j&=0w^=#KxWur*;;T;j%d0FKb2GJdn3RjX@3M5|A!hhAzAdxxA zd@j~+VU`5#_|Na!)y6u{L!wAKuHLZ7`h3-YBW!aC1GWd-c@m&^U2iD9!wvb=#nia^ z`j(VV+z%!phuc`5*Er3@w<`4RzvBGBZ({yvF0f{&(DaJFPiN~K@YEB~fy8Uojj$9* zDu@Q-nO+`VP6~!hw?k$HA7I=5W~lPpOvYwWw|~p5_-P%+0R`9e$i>d>_xFeBRVG<>c)^UWnb$3xRq>j>AU_!v(C+^{_*>k}FrP zFaFcvf1v#c+G$G9cbSpa3kht*=2B$ALbX6%6kH7e$Lq zQUBw$j!qU@aS_^1&W}5CJpcY~VJBUz^Qj*zSvS-}!!(^m7*)WK(I@4z6;!s+`W!%; zCUYXz_4&)$uU8;QnN(86vr1O^+f&T8?nA+T-9)y6n!=GFhvQl{bI!{lgT}Lh)rR@=0-f&#F<j^ZTrZd*p&9_{o)jBdF z0KGE&brjaAO3d@v?C+STZQ58>KR zA*+UWEy5m88kxD6L3%woh6*4+#kPdOv7^bhl%O7WWceJURjUuCJto5^RY>xa@y;~F zrA3khxYQzru-@(+#6UZ~CkO<(3VU?FgawVp=b6bj?C4bm2bVNgety`lwg!8sifIp& zE>V@!k@2ZrZHq{oI-taTHWLS=wBHIzhX;jp<9N>Fk2y@ZZyoT<%Xm?FeGC{>t4OiR*7%*vdr;){Amk*&CVlVsHxHT5*-LUyO_t5#zkMERP=Syr&YAu!N-&fP* z#u)h~kFDby#)>cJRddbiZgdQxN%a&7?)lv83e07pOUr+_vK3S$dA~XfQ2cfOk9Oy8 zJuN%@`(U0SVX=d`>@X5tni3i~l|1jkK-@qxCi84J2fm$3+;gl*sNeeQ2w8ehx~cN` z4zczp@t07%K$XQS&C&5W4QtEcD1|3?XL6}`wRed-vw}VayBt+MJbVz`gcf(C4f5aq zOlI#WsmFD!l{F$Mmsf4EDV*@VTgn0=DTB&eUc!{!E+7~soSpb$R|_QQ(uBE1!G^T$ z&z|9#S%=Yeyex>LI8}Uxar*di_7$PV;Dld>j{?fVNedOX_ln)F-6L27zs}i@^RJTA6HgG+nXl6RH4bNES{$z(V5WJ zRx*5f=rVNo>*dSKvt45uG##D^{#c!5$O8(wt;{xP6k0G~v5MF%2n7Cm%J>G~NH{CC zygU+D#;*tgKK(CjM`Rs$9Zi8Ao0nP(G6LI9?|A-X5oC*gT^8iKkQUeQD1{?fDh6#r zu0EQ?^?0pb_Zn-P{3FV!tk}Q$`0nTDi)*_mrJ^ju#lGU1hl*W5OBpX1MijrM$je;em>}} zWxEi*R;S5H=-f}}zm7vF((tK!MU`Yeb#HXM1EA&M5p@)uMZAw5STfZ1RTTXwHFYCU zr|Zt}{pQtx z^IhPE7MxH1DG+-~RuI!v_ROj>EQT^227J$C{r=*NSH_wlX z4Crj#EazSbQS~d5krvYkybxA163)4L9NqctC;N2F(W+k7~7JoU9Dp!D!haHGl{ zu6z;r--*TEO`WU=zAcutU`fJ{lFl^mVo5krB4*BC49*IXfvkHF(4x0;Er^+}Gd#lp7?+-j#PDgh1xtyX`X zMs4s{X%j>HjdDQuW+N5=i9W?x{HyhdD-c=UO0$BmcD>zN>6(1Jugsj^xeaS>8M&+E zCR4Zm^X}HZ*y{*Y8la6g%E`PoI%vW(E}tE6_gGIrIluk7%&7J z&1e`kq{e^|8}Zxc`+xL*x<@=pdRY4Fdec%7tGc+_gEohvt;U0CEn zeuEbz|}i~K0>^}&hD6AnsXvLA$RKk8wpl^LdXLIUhR8RF_8^7XbXD1!bv5OECg^; zLn2aJ6Q?y>OZQi)NshXV=2sUVQrNxZxuZ={7dZIHw)AQ?)RIBSJ6HY~)Yqy{%+v4W zm?X1Z%ZB)}MGV%Yz7|~LfWqzwkR5~-?;>UtpFbZU*~-DUL{oMO#VFrZu2&r2Hh$$X zvl*99?X!SuzeWDa`gZS{sxilX-AAgwvYZAY7tP^iLD_v}R2&mMG+Nt2d1iio?FlH9oxE0@e10`0@?i**>8bsxP~pP5J81zF_OcKrJ90spe|ITKrAO#xNFU!+cY z{@}MAq$Hy>&baGcebAT?SiC!EEhVd82ZsL_Tf_TCNG+Wxpj_ydI`tOq{(XWM)pf|x zbx-a!^HRu0HfmgF2+-NC@?XA{m{GM5egh)p?ZC)pFSB=h{;;{wlqVc25%sZhmpD3j z={*&%bHXA$Y&D@Y(z42xRz&B<`?Zx&qb+;Nx6;6iGh$lR{?zBCtiyOYb=1!8P7j%P zj?b@7wmk>w=mVZx<=8zi&EDw}&QBF-ey^WN<{0ShF{d!d**a5D5gi}J)jO7xAu%h*#}$&+ z4N(B$Tco#EpI{w5h#!9#&;tD`$Z7K5_`*=TOwg|*%B(}8DNC^&cSJ*K$jYW-hGCmSYKbQ?Ea+hDDr^@2}$^9k+r>huK)0 zJU1N};G^kkigKPT80wZ=I4=P%F!Qh`Z#s_k9=~Chd5ecXMTTn}?mX-5s#i9%J`44< z6=mKe^N`d5n)RW+t&c(=fV8w48BOk~J=kxu!( z+yZ+}JK@lf(69LmtzuO-*oRbu85d5N1_B6JhzxL$sFs_LL zB?IQtuo7*Gxq2#&{}Mzk6Ic-ppNt@>*&*!xAN{`M7j@?YN3T1xvq6ZPGwW0;n-dOs zpuCE=Kw zlx(Y2&*|u)1hc}bWEB8!Rh6UTyK4)?;!{>_?G<&KSgxOFyT5DI-bp$mql;27^>@Ts zpBosF$SD8AGG1=f1yxMFuxEip{0k1ZOW(jeIdVS)5_k$(l?}-3u7es4Bl%KTr-F-j z>`iSrkrSr{zFp=;k;Jv5q3Dp8V7|5XWUq&$;h^U%u4smt?z(#PTl!>S z8;2Q777%HqBBuY92ex0+q^n0tSoLPA4rk<0jNh*!Vc+?czW6<`3Nks>Uemv$(A6F^ zq7w=Idc+o8Bf{^oj_`L3w5Acz0deFth^?7Vwf1R&nK}jo&+$?jfu*7~A*>;t{(U!cge zj5-=6uwN6SDd9(VosPU7JLYjffyWfnNoXipLXCFm`ap1xn$}Q;xp&Aa5o<`qEY&|4Y^G zcKPj7&!n90om=o^3Gu?l+cHuDj?FjKJA6ps_H3wC{#WSmgd)|Re{AoI3>%q*sJ%ZM z=#uH_#cV27=f3<{=Ng6x{pnuTP4iQ~g|ZLxeT??{!($$Xlr}+U=36NVJomXL6yb^u zHz_0x1tPh8M8j{I8+zdtCQ3c8Hu!3x)4J=gu^HOnei#~ZL5S_=?=Se56@`)-H|b>Py}`{hdKz~aE>U|m4;F;&?sYnfkSIzhgU zR^VWhcgU#d;JqdC_61h#BSU8ClBgc_TaoC%gc_>@!wM!_Yjt-4XOe&-!;EZ);wORq zgT?j~>?9UGKf}7)67&GSs4o^L|CQW!EJjT9 zXz|`M(%v(g{UpsfSuR}=s3tAx#{j%mXOKCF6WhJj`>}Z}*v^~XpsmhkT7Mv#KNXg06I!>YaeZRkBf_v22xF$s_H>$G z@Jh~foNF)_9VUCZ^1IrSG+LOPlDf7Yy%%@_AvzHxS@GA^ z%%NbQI~brIpFG@>&Y<^S6rVYKwjs~2#-Nt@+1DAb2rJO(WJ|`yC>!Yl@C6P#!ReNJ zzXL=iCn;^wby5nWl*D($mE32@wdhh~I6W1W%=iBd&;BNQ^0VbyQhMbgN6U!fWWq+B zyfy_Z>z1rf)uqq3=lf+3e*!zy9pHMnq(8>%8_mmW=`?`RJ5^9&+NXD__)gTrYa@{I zJ?Za>PUru~JfSy8$@)9LCb6U%y_B+CHqf3h9G5|F#_bMjDs?D}5~WtMK<>jI79tu? zt{)EU3ikZcI=8;##vsjH_3A92GbihZotObdy67fKzUpCTc5z#@dGW~TT4D}3={;~e z)c7-$OGxWThu=FPAqM_9z+@)@-4f|G5~mKyGkAOgmtzcaOiCi%j+knHIGCcD{g;!P zWAWNfFopDdvU+@+V=8oMXsc@&0gRUK*(+Dmp!M_}P-73(zzawg z+IU}&KCB~(9v6X^Vfh1VXC?1|WPRD%> z2`P3ug=r@*lo~W}(Sw#byvNA`8QIZg_Ii+=6AJ8m#@(v2dNs32$sd{J-}k`3x_yO#>9 z(5CR|1(@+$vw3{MPc!VtnRu%^IptfVdLFe}4GeMZl;9P}@athhA`t>bp2u1918(J? zbdTo9K2}P}u^&Nd?#@NcnvGpq;wse!q2JV=2x{Q#Dt6b0%A0f`n-$Yr33_$UwJEse z{+yLXNs%j{JN<|>Un+x) zCCP2a=uN3B8+z-8y4S@R>nz#9oh~Q22PJoFwnpoKZh00vqZo^sX$xCawt0;tzJQ80 zC3en$`#Pr?l6FjZ$v6a-VWo(Jk}{CF&qGUevoc26;`GMl z9~BMxXPti$%|-HkG`aE9q)52$uL@D119YA4eA1dUx}q-?CveX|oNaK-V7N<;U5I@m zS*H{slX0q+^tt_K+*!(lO(p#PJHQczr%qwM=LdB7w?Ft7eu(HR>#dth1TgMFeAU8%CDZnAWc;^bS;aMcR{PlMmkMO^z@@LX7XFRHa6<%WH6l->Wcs4tt?{yBl8!<}@ z#?9;0+EZsyCnwrC{|v=McI{I4(VD_2AF~Tt#sVxy(=5F(at-| zJ~mDqfbr|F-9i2U2$nN(+bSMFqEcs|HA{Wf_;iP2r}J+29%{p%v7Wm!?xb2iZ)c2; zhN-)ynpd*ech7dMULgSxDhphaJUiyQS1c#mjb6qfMYH5I;P0>oM;uy22KcfoK&oOLFPPYl+qSoWKD`?(jecMgWm71#iKV%#BDb#k+=*hE z%10F2n(Y90kkbW7J>^#xG$76X|Ek6HPh4kRv_ z?P#*9affnT&hSLr2SLKLZNkkN~O|MdQx>qeW)%sd#qN2D_1THCM%1Bd0-# zgX4a_J&yzTS9A+cQxKP+eyE0iR4=tj+QFT}9Wgkwc`k``L!)1+4~RK|n6p>EH5Bc^ zDLike^6<>YWBHap0=!e-|0xTeo!E@B8H$upQSdgmf;{7+xpP0ozBXYj3DKgw(ORm` zF66wDZQ^_E#x3P@hzt3WnLpWS9Y_wKsWG_fkb31^VN^vg)j#W2j``$IX29s4+o2s$ zaDFqIJYCJv@qOwzMZL`q?e-12T&6m$f*Ob@){C9lxFp{5b9A=sd|GQdO$X^nA34 zScI;RxbLW~mr5s17T6;{sbsGeIDi(l<3(=GuQR9bKdO~!iWsBTv|UlGP0@S!Y_WMU z?nsPsup$Jdbb<$L4~28hP;rj5$D64_%TVR zaOqFQBl8oyD#U;Hb=!I^-O_DPPF!>g#~NM@!uZ?T3olr8iV0Q2wGq^)LzQK~sZDs$ zOdu@Wf!lwl&Mbk2iW#47ds|RAa}PD5m-+ou61%XsZ3TN?;m8gRjw*MM#&gE%%5=0` z@g4gq7u_cYdF}i(8_NSFfrwSQ?M{0&mE9K9#KRVZZzQ7Zpi!4lMuy)h0QZO4>^Mab zkk+PD*?I&Tt`+;=_XbMYKKXlZ?$oJIu*^rtIPm{-WfGRtv)bmKq1LSf-6@{eA30peoxzZsAIf_uZO z;z#vfIm+zb@zZFcc(J3Rkqv??J{qBo%Qpr0^KOu?8S=+*2YZRChSn7qhu<5qhS0Mp zziW}Bo$SvM2hLAYEH@R#)cPVG+B$yD(Kj~Rdp<>Jsrm!DHgWPJq=sIn=Im zn{S01sr=3)Gq|mf8DJIwm1!Iv!os#G>A?>Y(su=UsH?18xDcr`H9!5o^GX*;nVvB) z`2n7dR^&aJ!O`j!N@gqR4%$*HR}UKu+=efVydm?-rS^3tcmiHRSx2)^?=&oR=k&kK z?h3wEeoar!G3m{E`RLE{i{4O>rKeMPD$KWT&H40P9Q8YS9Y6#@sSsx77g-&~)bX z^a-S$&R=vyShcvegN$GAbRb`!ccx$xkJ8RsBVJr&^FG0@@lTE5Xo$97b==~4uZGuI z%+W8OpVukD4hJTLJEtmpNLFY@&j>F_1D~;gnYV`)_WUILzJi?_DDIC;oc5^fqpz~d z%ue1U%z1x7{ZEp*JZT&Fm*zhZU7k8(bvfWd4F7_|0x+w5TszxjY zm4f7j@;u=&Fpti;{bgao{9Kep;={7eHdJt8O3+&d;P{1_X9yY}#IR9bPdes2|Ha-M zM8)Ydn0sD&fq61pG65Y#y?PTdgy|evW|h$8>Qn4@@eFbf>CC}?Hu6hdarlw+o){fx z+zfDjb~=SMO1Db>9P#Y+zd?lrtZ90PjjcPT9$o(J^zsSDwfUD2Q2u9i|CkgSSLFdj zF%u%9#ucA@bqnd@_}fV%r99?%*BtyYz`&pbrqhFiz8lV&nvspvmHkKd3CZvDZdsy| zyq_tfdJ%Ta(;E#8JyUh-B#cV;nRP@qgMH~at_~ZD;&HuRUDRqq z4Es8k@o?}fZ*31`fcInTM$hrSS?3m?;AJZ03nRY8^k4m1>i0)Q8tt7R4gjE5mFa1} zy3>tZ&6CfbtZCSvkPePugZ?7r{=nHwUayDHK&Vwv||+7P{!h2{DbFNK0*CJZEJYTvdC}r zIr$*d;Xg2`4D9@fNrZh#l&uNf`kI7R+e5NY8_~3@5`@A;I*cnn^sn+}7Jbo#D z+a|D@H+*>>(Ksdo1>Hg1>wfJ)MdP=}Kiq*2NhxVpo%7v}GI`Yhl3BLFZi*t^%mDId z?XKc}7Nrev%zswy<@bV_;MdIUYtqon;<{=+GBJmB^N^>bMfDnMLLzBV!qWd}Zw8X( zu1~$M)|l5ATdrSWA+Y2-DNE7`?p}W9AIU6*7`}L5>2<35upm>q#p^eL$+%!q(br38 zENobFc~PhC5*C)d;yXWRcUxu!lBEW-*&QAOjxkHGt7<%nh5p<0^r)z^P6_^I;209s z@1pva2ugSkxmkYkxZWfyTJc(r`Ex{V%T+X)EoUy)Lx*5{ z=NC2@y0)W!tjKI@yjSsDfCC=d`6Qu%^1k zU1$k@`gMf6LpZT#w0WJ+xK8X&_3s;stm>eNHPrsKvOmPvfg88*gYPB_i+F%tJn2_L zdHl`4sbvIoiT%I#{we%|86Vw#-~;( zEY4Ck0;TF!fqsfMTMoRRO66}%^zPVJ673y`7k(1ud#WphZxYJ2TsJLj>m4e4X^a?T zC?+JFjpKS_c(|Vx{#-@WJK{PPw{Vx4!4?B8rtwKHW?*z;dBS2YBzdsf?g}73Q!ES3 zG($PyWz)}8xz|?xABv!Fc<@BB<4yWom3=p6ZMy{%^hV%23un7Z9WIYEU4DrP)rtug za-kM}d&YNcVstO6xb+K=NG1m9-m$v$PJ=@C?|OM28pO#tl9Bd`_vU_CtHi7y86rv4 z;`S5l7<|4u?VItpHV2-j5b)(Ox zzdRYVucb2})MQQ(KKeujBao9>TJLC^3qN19$19Du-GuaqqmzU{w);2D3tMwY zrG%v!Cby%6$;H`^Nih*@bq_^>ev)Qa`22KfyDeo^0co(sWD)LMU8Y%S^ZZLM!}t z6Vkei@N1AWY{;FxNqzBU7lxsItxMwcVE(KuzNZQJZbiMTydp=r`A?}^P#>rOK6|&o z#`gS_5;mWyUj8qkSrh5qzn^;ko0P~}r--y9H%*~pQ4gqI{1lUJlK(Ouu_~cqM%sJ7tILn4&D0Rl3OPHpZy&O?a>ea&mj6pM zyP=|#iTR~cnxA%C=FCd(t%I!J-tMW6GFaS$#cmgIgS$Q?wI$P(aY=t;QV-(KN?UGb zDx_j%i)7>CGm-zbRY+3PjU#8ZvW~v%c>E(UPsRM*Ee_k1X6?sQ-ir1ZEt)RB-@Fwyi2iTl2n&lzTS zlUcl|(&r0_@9+`Dr;eGzzF76<03sTm5NS#jeS%ZmwnnzveE_+{wN2Ngb?a}{Qkmn8fw44$R9$?pTI_z z2h0n3H@=lf7YMqXc_d|O(V8$hblP&}FBzt4 zaV|w$WpKBUFuL(?E{5 zRHxST(k^yK0Caf4(bpi*bjy?!FQxLIM&;vc?2dA;7(MhQVB6st|{Oee<%E%|JBI^tjotiODxN*URY{A2Y}jR&IBwD2@Uz4yPrL=WlR zcbb;LHi=`&k{+3vG4>Awa_invE{>KlW>g~RDR1R_>943_vGHe&S3Ln~t9{DqAyzia7&+moMqw&Mi}5+Nu!#oXknwv^iwg44wr3P=87Ae^eQ?}&vc@KO{DvsNr6KW;CXMu& z7#OmOL@O5sQsLm;M858RvHEaR3rdRY*GS!%SSnu@xT=pwzjVT=+A+f0YQ#2se?nH628`6<##x)xtZ}QQ!u?;C zhlqpMN=xlikn?%)yg>_m=bSf+p(s5a=sUXpn`i*e3(vG)i`m)h2vcQH44Q34gimpJ z&>SJi!VCRV@o(dswU9-o7R}Zz8+2JcDaz$)GP7<*p?0Gszqt$sm31T1YqHG3O)hTUjOzs} zxvF0L_!na7Cgkl`GpGZp#UtP^)A8IBA1Le->mK123Bxr!VUH^qf;X*SHK{=7Qfbp=f!-IS9PFcg*l`#oDo1J3FU)Z*pzHyg#Y*)5RFm zeLfARN0EOkD|>F3!$CS@hi)96v(l{6)1z#-cG|-DlQo2a@v;AGZ^W(;SB5>SuLlo^ zUI8Oo>A!c|m0r>oLT;h={J0L3Nj`)5^mH+B6Lz!#5V z3}h}M{?e=7r-an`@^d}jcp?py#2{uw1;~obtpkvVNR1UmtP{^$yMWl47b(Pdav#`N z6{~1aTUqOA2Q=(KO@6^J(jR(uD%9@8*LW_h@z5tTt%M~&fBOo=eNZv{9AROVGt4gl ze4V6Huu#YSC8^=sm5=Z7c|r%5@2?BrA6?xa?4L-vO(LSE^m#&1b5PDDR?0c=Cl_l1 zM-+9D-;eYAO4B=EGm)o19!PpUJVZN6pQvspIFKQo8`DUgr)yU#&KD|4k)|Tj zskAzY$MO%izhTVxJ&D=Jt$G3_0y7j97(MyOa99(vCXyqupw}};xuVVvc`#G~!3!{> zNru3_lLbXG({J-Pm$9N!LG3Ey&BD+#o6lb?DlGsW$uNU z08q3sD_LEZ{nyQk%GK1MI4rUec&j2O22_rSYP6OrJg-k&N|fKs_Yf9uO`r35Vzb7` zrWUX}_0%!O!F0e}%VF`+AnMap(UEX^;@ksOr&v%PL@En0^7nlKsYlAbkW(}QGXLvD zHxDRMBjD^C)a~~7_m$jLn)dv?*sBi56*Ue|qOf@7CFbI#=3a8X)l`One+dEeJfBF4 zWqr%mN)x{wBB}BA*NHY*Vb&jgcTy=EZWs+x*fm2vfV1DuabA;aYpLMAqxj;PBJ2FW zQ~7{b9cdG>b%urSF4KX3btJduROvq`XxPU|hjthB^bGo^Gu!Pd?OD5$Wtjif8W?SQ z#o;XTq2A{7bjiF^Oi*7#ilU?5EheWpDz|@+alTw#-jh{hFE}MHTYhjPIFgUdG#8&3 z%v*T7=Y8!@FJmc^hjQ~{{foT zs=BM%_R8v4#;IPh_A&(T^D*^yzIVOUtDse&J~m{Lao~fve+*=mamZjj46gi`eiL1< z<0yft*owtV&@^tr?9RBy@+HGfhG$xMIHGyBoUJH0ZkP=W5DVqu&OQT9R>Cw9oRs%s z_JMP?KQP%l$J|hN>vX$Bd+|Lr-ay{DHTSr+jj#_P5O)f)M6kxj>lh!18vN0{^d9r) zx&t|wVQSsV?zb#Wk(b)twEly z+8`D`;G(sYrP$o_{0vE@s{YI0owQM)Uqxkl*XnO#KaIL{hLFk2+LrULLWkLvAL&Ir z1P(YKsK1R>E^3Gx(t{dAikj5~kFIocC#y1f6Osa!aQfVQ@LjQ09T6BA$1d(rR{#4)4XZc~a%K zL)kBk*qcXUzuY(Z`cdk|SosMS%1kW!Ra6>chN5%2uU#1PBVWjtr6kE)iVuv07KV9@ z9m!YiwOuUmS9D@)0LR5u=?w*tqXZ?#gqT!a*`(!clTUoL;%b@azn5!Lo6bout%Foa z@|b3n)&mXhT&s)mV6j0vyqLb6`(`bP^;pr(Hfd?MjbXV(bxU0R{!GxFiYRY7%2`tf zyFSQ{y--zora({<@|J~94rR6ES+Dd)_sBe?s8MOQ`8Aa&wQSJIc&V^I^Z(bwCCBlJ zcezRwWM-4jl<8d4hhFz~E1xL?V%AJtc3q{=2s%_BQCr)HUOzGqAs9f}p+0>#Q6byM zVbuw>rF1{A+pW?StM4|(&$#||eQ8(@k5!yavfy#@MfxNW{Q-T_uH~M^_am9~bGO4u zTC#WYc%EE;eWsH?1j#Thq2hp{>K{kKcq$oe;-K((y;gd&t9OX zV^-IhcA;3i%yaT8fv_T{9vKuQnaT(D%7r1f$V z+bqw8p~y5o;+K74kwNNy?jeWCe2J$|mpXjPModW?Nm+vnbb6TuN}22jq*TD)qxr02 zivxQoo;Eh`^A7eHXjxtsXJmI#KZtZ!%wLm>b(e~ z?|4+#g1iZmsCiWIIji=IR)Ifc=W|SUbE7_iS}W3(smr<|9`K82Nlr5%702*UYV$Q+ zK3d~bL+46Xy1@6A&|E$U7nwVkh=-EHLT0C?XZ;_i{s_JYNma$)eBRkS~ZdRw;mk{N_5th&K z3=GzftZy5(32Uf=1Wzt*JHUv3XU9m#Zmvs?pf7oymWo|%&e8+n(xQ9;d1#%(Uo#iG zO6JX6aVKoC_%pnJ9Wq>I+GwCCNRW`glbfSceIO;D77QF!vJ)$*B~Fph$IbZ_Ye}I! zL-PVDHji!MH+fqoJ;BH;TnK_4Arc1|YZtHgeEMUKzs9|ZkY9*cra^tPvZv3uKqaDb zo7Gg<1mc=qwHeAN8U*_gDjF=HGxQr6jrWBL1l!Mr!gemOs^bcP&(2P$*}(1~ta-@l zITGeSqRI=xEtUn>XZJ3iG9yfvr{DWv ztD8VjmL;aO=S^mK?mqQ|3)(Q+@ zLL(4n-j<`e1E|o)U?$4UL-x(Eb3DAJf(<%^}ue5cAi?SA7fi`?TRYE88v zAz@-In1+RaE`5)ffN995RQ?wpXlX57QdA_UEukv0ns7EsIyg%HM-w?s!17_Rk3s?Y^;t;#@l_GYdRMUAKR2 z#SOK#+@i8@l5m=68}FUZC~{|sfR`oZt);s6)^Usa6>CRCliK0OaB2kGIi zQ?A)eOD}jLkSr(z;>z1|2c3Oo>VbnUJVK7sCBeVb%OeWHe9x|ymjI_A+-_Z(qTAt& zn&#d~{d~_;vkTdXvjGc-f zT~bOIcR3x$`HsW$;V-L*DP0h4);U>5&ZDTG+x^^Z&uLht0kjNGoVQ0}QP3~AcEk0{ zU!dMQ@2E)7vkbj9QucLq@N_`gvu}Jabn!QD;2;*gP*@>34jo9b_8$GDhlX+~{LB$(DXJzqo!YgETNox5Kr6&-6Wjp~5pDoS>jT^&$JNXDewV ziRI`!&Ic!hYX|i7)@9lQij0Wss|i%AhCQD|80H@;M25GGDQ@=s_6Fvg&yhh!zked^ zpFOd?#94|NIF4QFRU#~OIqLDgM()1Gqf=n9@qpw?;=L=`ynJOkGbO)1Z!Ycrt3`Uh z%LTvpyDORzZzA@J4_0}s5_HaZgPj*5rwp;Yk1_c2o`=mgj0s6CBpGpSt1Sa3ls&&3{ND1>!q0A75?n}+k<>09Us&D`d4={ugS&pqtl8WHM<#d}>Dg4qv#^ z#rj%frgTQI^CS)9g`fb91yPv02jl}3UZVJV)G{F4c42$}wSe-bwt}M1M4cmY4o_(@UKuQLG1x| zUnfjo=aATI@*e%7k>jgZ@E*5-YwxQo=H(20_^#g1kwRNuIxciMF>oV$pR8@KJ#Y!m zmvoCW)b6*;k^P*k{7D(4TntUc--~pY#}hAHarUElc2C{IFQuMuJCUneVGFGARZY8N z2EE#J@o$};bZy|e5aeI7RFzqi_qSZD&jsF?qHKL1=P`{2S4IJfchC=925NuFf)4VJ zO5Fa6bo6MBQn;s`+$AF}n_iSu*S@5r%}qdGyUY1N3mUGn5YS<{W_Q>Yr zq>2pPle4S6hp=n`=ZM1)4hVq`>|e_y5V!2Br4M~sCd;3=wqnq7<=wg-at`$upT2%= znc@7%>{9y-H-=#^vR#XEP|w> z^sZ1G_@eWgVt2rmK_*F0;x>|_M&zwMJI^H|kZ-539?liL_bOVXUOgjw)VgxJN{T5m z=(T2MZ+uVZyWT!M+BtI#7J^!5%^u-UbGA-%0yL%n&pSanIy1(M>h_lZmQ@zN3Q;BKy@XdIbe$r^q!aIloty+b#{C28+Zk&#uG6nphAzE?zq|dC$X`;Q&(R&}krDER|TkMrt0#H`V!?RPUzc67r!RN~ikqrbtQjvjj zA(SJCceKyPU|kQ-LPm98f*7jaK0+cda+Ml&@PjP@gW}<^R~Pfp(w$Kjiukvr0Lw2_ zwPU?Ce^@d6yV=GRN9kCSe|feLX?4boyhg*q(|KqUmm*(RU5h$HE{9OTwW^#ogq0tb z-jkobI~5}cOGw~_v!=8~5deKDs(RdmflYa9aME!r_IT1z`Vl524= zS}bf%B0UTS4tU*A{;ql!nk%`}$|V%n&pKFN)BdoZP3B;0VC~xLqOvd7Tb&1beN`Iq zH|BK3-pCFh*?FQLa@^?+ScXQbU%zzfUgd}bWMp%zVBAsY(@u7~u%jqqV+9CDLCYx` z^)y8G4zU@7ItqxIQ{kmHgZ#g~1wCrbc3cPzeP46-eT|5HE21&oud9?FjyPS-$oPCv zD)a#7f5iZGNxW`cA3GSXyr!$|IP*AznOG$T@98!g^F3(Yc9wCuEt;NiREuGi;dc-{ zgAxj^-)vuhx4ss1_SnngMx0+r!Xif?yakc?*@G@j6gLz!#Ps)!9-?65I|M_0L0