é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã ãããŸã§ã人ç©çšã®åªæãå€ãã£ãã®ã§ããããã以å€ã®ããŒãã§ãé¢çœããã®ããããããããŸãã Stable Diffusionã®åªæã·ãªãŒãºãä»åã®ããŒãã¯æ±äº¬ã¿ã¯ãŒã®åçã§ãã 建ç©ã®å Žåããã建ç©ãå
·äœçãªæ¹ããè¯ããã®ã«ä»äžããå¯èœæ§ãé«ãã§ãã ããã«ã®å¡ã®ã€ã©ã¹ãç·š ãšåæ§ã«ãå
·äœçã«æ±äº¬ã¿ã¯ãŒãéžãã§ã¿ãŸããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š illuminated tokyo tower highly detailed shot from above SIGMA 85 mm F1.4 illuminated tokyo tower shot from below SIGMA 85 mm F1.4 illuminated tokyo tower shot from below cosmos stars nebula SIGMA 85 mm F1.4 ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã illuminated tokyo tower highly detailed shot from above SIGMA 85 mm F1.4 éåžžåªæã¯ãç»åã¿ã€ã of æç»å¯Ÿè±¡ã§å§ããã®ãå®çªã§ããäŸãã°photo of dogã®çšãªæãã§ããä»åã¯ã SIGMA ãšããã¬ã³ãºã衚ãåªæãæå®ããŠããã®ã§ãphoto ofã¯ãªããŠãåçã«ãªããŸãã illuminatedã§æç»å¯Ÿè±¡ã«ç
§æãåœãŠãŸããilluminatedãªããäœåºŠã詊ããŠã¿ãŸããããæ±äº¬ã¿ã¯ãŒã¯illuminatedããã®ã»ããæç¶è¯ãã§ãã highly detailedã§æç»å¯Ÿè±¡ãè©³çŽ°ã«æç»ããŸãã shot from aboveã§äžããæç»ããŸãã ããã«ã®å¡ç·š ã§ã説æããããã«ã人ã¯èŠãããšã®ãªãã¢ã³ã°ã«ã®åçã«æ¹ãããŸããæ±äº¬ã¿ã¯ãŒãããã«äžã®æ¹ãããšã£ãåçã£ãŠæ®éèŠãããšãªããããªãã§ãããã ãããæ±äº¬ã¿ã¯ãŒã«å¯Ÿãã shot from above ã¯å¹æçãªã®ã§ãã ããäžã€ã ããã«ã®å¡ ç·šãšéãã®ã¯ãæ±äº¬ã¿ã¯ãŒãäžããæ®ããšãåšãã®ãã«ã®çŸããç¯ããèŠããããšã§ãããããããªã广çã§ãã SIGMA 85 mm F1.4ã¯ã䜿ããããæé ã¬ã³ãºã§ãã詳ããç¥ãããæ¹ã¯ã ã¬ã³ãºç·š ã埡芧ãã ããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ illuminated tokyo tower highly detailed shot from above SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting é²èЧçšåªæïŒæ¹è¡çïŒ illuminated tokyo tower highly detailed shot from above SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting ç»ååºåçµæ æ±äº¬ã¿ã¯ãŒãäžããæç»ãããšãå€ã®ãã«çŸ€ãèŠããŠãããã§ããã illuminated tokyo tower shot from below SIGMA 85 mm F1.4 ä»åã¯ãshot from belowã§äžããæç»ããŸããhighly detailedããªãããšã«æ³šç®ããŠãã ãããå¡ãäžããæç»ãããšãã«ãhighly detailedãã€ãããšãå¡ã«è¿å¯ããããŠããŸããããŸãæç»ããã®ãé£ãããªããŸãã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ illuminated tokyo tower shot from below SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting é²èЧçšåªæïŒæ¹è¡çïŒ illuminated tokyo tower shot from below SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting ç»ååºåçµæ 空ãå¯ããã§ããã highly detailedç æ±äº¬ã¿ã¯ãŒã«è¿å¯ãéãã«æããŸããã倧迫åã®æ§å³ã§ãã illuminated tokyo tower shot from below cosmos stars nebula SIGMA 85 mm F1.4 空ãå¯ããã®ã§ãæãåºããŸãããã cosmosïŒå®å®ïŒãstarsïŒæïŒãnebulaïŒæé²ïŒã远å ããŸãã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ illuminated tokyo tower shot from below cosmos stars nebula SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting é²èЧçšåªæïŒæ¹è¡çïŒ illuminated tokyo tower shot from below cosmos stars nebula SIGMA 85 mm F1.4 award winning cinematic scene cinematic composition cinematic lighting ç»ååºåçµæ çŸããæç©ºã§ããã ãŸãšã ä»åã¯ãæ±äº¬ã¿ã¯ãŒã®åçãåãäžããŸããã shot from above ã shot from below ãã²ãèŠããŠãã ããã æ¬¡åã¯ã æãçŽåäœå€åœ¢ãã ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ãã¬ãã¥ãŒïŒ Ishizawa Kento (@kent) ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®é³ã§ãã ãã®èšäºã§ã¯ Next.js + TypeScript + Docker + GitHub Actionsã®ç°å¢æ§ç¯ã®æ¹æ³ããŸãšããŸãã ã»ããã¢ããæé 以äžã®ã»ããã¢ãããè¡ããŸãã 1. create-next-appã§Next.jsã®ãããžã§ã¯ããäœæ 2. éçåæããŒã«ESLintã®èšå® 3. ã³ãŒããã©ãŒããã¿ãŒPrettierã®èšå® 4. ãã¹ã ãã¬ãŒã ã¯ãŒã¯ ã®JestãReact Testing Libraryã®èšå® 5. Dockerfileã®äœæ 6. GitHub Actionsãå©çšãããã«ãããã¹ãã®èªåå®è¡ ããŒãžã§ã³ Next.js v12.3.0 TypeScript v4.8.3 create-next-appã§Next.jsã®ãããžã§ã¯ããäœæ create-next-app ã¯Next.jsãããžã§ã¯ããèªåçæããããã®ã³ãã³ãã§ãã create-next-app ãå©çšãããšãNext.js + TypeScriptã®ãããžã§ã¯ãã®ã²ãªåœ¢ãç°¡åã«äœæã§ããŸããå
¬åŒããã¥ã¡ã³ã㯠ãã¡ã ã§ãã create-next-appãå®è¡ãã 以äžã®ã³ãã³ããå®è¡ãããããžã§ã¯ããèªåçæããŸãã $ npx create-next-app ïœãããžã§ã¯ãåïœã--ts yarnãå©çšããããšãã§ããŸãã $ yarn create next-app ïœãããžã§ã¯ãåïœ --typescript --ts ãŸã --typescript ãæå®ããããšã§ãTypeScriptãå©çšãããããžã§ã¯ããçæãããŸããTypeScriptã®èšå®ãã¡ã€ã« tsconfig.json ãèªåçã«äœæãããŸãã ãããžã§ã¯ããåãããŠã¿ã äœæããããããžã§ã¯ãã® ãã£ã¬ã¯ã ãªã§ä»¥äžã®ã³ãã³ããå®è¡ãããšãNext.jsãããžã§ã¯ããéçºã¢ãŒãã§èµ·åã§ããŸãã $ yarn dev localhost:3000 ã«ã¢ã¯ã»ã¹ãããšãã¡ãã®ç»é¢ã衚瀺ãããŸããããã§ãããžã§ã¯ãã®ã²ãªåœ¢ã®äœæãå®äºããŸããã éçåæããŒã«ESLintã®èšå® ESLintãå®è¡ãã Next.js v11.0.0ãã create-next-app ã§ãããžã§ã¯ããäœæãããšãESLintã¯èªåçã«ã€ã³ã¹ããŒã«ãããŸãã package.json ã® Scripts ã« "lint": "next lint" ãããã©ã«ãã§èšå®ãããŠããŸãã以äžã®ã³ãã³ãã§ESLintãå®è¡ã§ããŸãã $ yarn lint ESLintã®ããã©ã«ãæ§æ Next.jsã®ESLintã®ããã©ã«ãæ§æã§ã¯ã eslint-config-next ã®æ§æãèªåçã«èšå®ãããŸãã以äžã®ã«ãŒã«ã»ããã eslint-config-next ã«å«ãŸãããããã€ã³ã¹ããŒã«ãèšå®ããå¿
èŠã¯ãããŸãããå
¬åŒããã¥ã¡ã³ã㯠ãã¡ã ã§ãã eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-next ESLintã®æ§æãã«ã¹ã¿ãã€ãºãã .eslintrc.json ãç·šéããããšã§ãæ§æãã«ã¹ã¿ãã€ãºã§ããŸãã .eslintrc.json ã¯ESLintã«é¢ããèšå®ãã¡ã€ã«ã§ãã 以äžã®ããã« extends ã«èšè¿°ããã°ã eslint:recommended ãªã©ãä»ã®æ§æãå©çšã§ããŸãããŸã rules ã§ã«ãŒã«ã®å€æŽãç¡å¹åã®èšå®ãã§ããŸãã //.eslintrc.json { "extends": [ "eslint:recommended", "next/core-web-vitals", ], "rules":{ // åå¥ã®ã«ãŒã«ã倿Žãç¡å¹ã«ããå Žåã¯ãã¡ãã«è¿œå ãã "no-console": ["warn", { allow: ["warn", "error"] }], "sort-imports": "off", "import/order": ["error", { alphabetize: { order: "asc" } }], "import/no-named-as-default-member": "off", } ã³ãŒããã©ãŒããã¿ãŒPrettierã®èšå® Prettierãã€ã³ã¹ããŒã«ãã 以äžã®ã³ãã³ãã§Prettieræ¬äœãESLintãšäœµçšããéã«å¿
èŠãªã©ã€ãã©ãªãŒãã€ã³ã¹ããŒã«ããŸãã $ yarn add -D prettier eslint-config-prettier .eslintrc. json ãç·šéãã .eslintrc.json ã以äžã®ããã«èšå®ããããšã§ãESLint ãš Prettier ã®ã³ãŒãæŽåœ¢ãç«¶åããªãããã«ãªããŸãã //.eslintrc.json { "extends": ["next/core-web-vitals", "prettier"], } .prettierrcãäœæãã ã³ãŒãæŽåœ¢ã«é¢ããèšå®ãã«ã¹ã¿ãã€ãºããã«ã¯ãã«ãŒã ãã£ã¬ã¯ã ãªã§ .prettierrc ãäœæããŸãã 以äžã®ããã«ã«ã¹ã¿ãã€ãºèšå®ãã§ããŸããèšå®ã®è©³çŽ°ã¯ å
¬åŒããã¥ã¡ã³ã ãåç
§ããŠãã ããã //.prettierrc { "tabWidth": 2, "printWidth": 120, "trailingComma": "es5", "semi": false, "singleQuote": true } Prettierãå®è¡ãã Prettierãå®è¡ããã«ã¯ã package.json ã® Scripts ã«ä»¥äžã® ã¹ã¯ãªãã ã远å ããŸãã //package.json "scripts": { "format": "prettier --write --ignore-path .gitignore ." } 以äžã®ã³ãã³ãã§Prettierãå®è¡ã§ããŸãã $ yarn format ãã¹ã ãã¬ãŒã ã¯ãŒã¯ ã®JestãReact Testing Libraryã®èšå® JestãReact Testing Libraryãã€ã³ã¹ããŒã«ãã Next.jsã® å
¬åŒããã¥ã¡ã³ã ãåç
§ããJestããã³React Testing Libraryãã€ã³ã¹ããŒã«ãèšå®ããŸãã $ yarn add -D jest jest-environment-jsdom @testing-library/react @testing-library/jest-dom jest.config.jsãäœæãã ã«ãŒã ãã£ã¬ã¯ã ãªã§jestã®èšå®ãã¡ã€ã« jest.config.js ãäœæããŸãã //jest.config.js const nextJest = require('next/jest') const createJestConfig = nextJest({ dir: './', }) const customJestConfig = { moduleDirectories: ['node_modules', '<rootDir>/'], testEnvironment: 'jest-environment-jsdom', } module.exports = createJestConfig(customJestConfig) ãã¹ããå®è¡ããŠã¿ã ãã¹ããå®è¡ããã«ã¯ã package.json ã® scripts ã«ä»¥äžã® ã¹ã¯ãªãã ã远å ããŸãã //package.json "scripts": { "test": "jest" } ãµã³ãã«ãã¹ãã远å ããŸããã«ãŒã ãã£ã¬ã¯ã ãªã« test ãã©ã«ããäœæãã test ã®é
äžã« index.test.tsx ãã¡ã€ã«ãäœæããŸãã //index.test.tsx import { render, screen } from '@testing-library/react' import '@testing-library/jest-dom/extend-expect' import Home from '../pages' describe('Home', () => { it('renders a heading', () => { render(<Home />) const heading = screen.getByRole('heading', { name: /welcome to next\.js/i, }) expect(heading).toBeInTheDocument() }) }) 以äžã®ã³ãã³ãã§ãã¹ããããŸãã $ yarn test ãã¹ããéã£ãããšã確èªã§ããŸãã Dockerfileã®äœæ Next.jsãDockerã³ã³ããã§ãããã€ããããã®Dockerfileã®ã²ãªåœ¢ãäœæããŸãã Next.jsã®standaloneã¢ãŒããæå¹ã«ãã ãŸãã next.config.js ã®èšå®ãä¿®æ£ããstandaloneã¢ãŒããæå¹ã«ããŸãã //next.config.js const nextConfig = { output: 'standalone', } Next.js 12ã®ææ°ããŒãžã§ã³ã§ã¯standaloneã¢ãŒããæå¹ã«ããããšã§ããã«ããµã€ãºã倧å¹
ã«åæžã§ããŸãã yarn build ã«ããã .next/standalone ãã©ã«ããŒãäœæããã node_modules ã®äŸåé¢ä¿ãå«ãããããã€ã§å¿
èŠãšãªãæå°éãªãã¡ã€ã«ã®ã¿ãã³ããŒãããŸãã standalone ã«äœæããã sever.js ãå®è¡ããã°æ¬çªã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã Dockerfileãäœæãã Next.jsã® å
¬åŒãµã³ãã« ãåèãã€ã€ãDistrolessã§å®è¡ãããã«ããã«ãã®DockerfileãäœæããŸãã FROM node:16 AS build ADD . /app WORKDIR /app RUN yarn install --production=false RUN yarn build FROM gcr.io/distroless/nodejs:16 WORKDIR /app COPY --from=build /app/next.config.js ./ COPY --from=build /app/public ./public COPY --from=build /app/package.json ./package.json COPY --from=build /app/.next/static ./.next/static COPY --from=build /app/.next/standalone ./ CMD ["server.js"] ããŒã«ã«ã§Dockerã³ã³ãããå®è¡ããŠã¿ã 以äžã®ã³ãã³ãã§ã³ã³ããããã«ããå®è¡ã§ããŸãã $ docker build -t ïœã€ã¡ãŒãžåïœ . $ docker run -p 3000:3000 ïœã€ã¡ãŒãžåïœ GitHub Actionsãå©çšãããã«ãããã¹ãã®èªåå®è¡ pushãããªã¬ãŒã«ããŠãã«ãããã³ãã¹ããèªåå®è¡ãã GitHub ActionsãäœæããŸãã ã«ãŒã ãã£ã¬ã¯ã ãªã§ .github/workflows ãã©ã«ããŒãäœæããé
äžã« build-and-test-on-push.yml ãäœæããŸãã on: push: branches-ignore: - "main" name: Build and Test on Push jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: docker build run: docker build . run-tests: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 16 - name: Install Dependencies run: yarn install - name: Run test run: yarn run test Dockerãå©çšããªãå Žåã¯ã yarn build ã§ãã«ããå®è¡ã§ããŸãã ãŸãšã ä»åã¯Next.jsã®ç°å¢æ§ç¯ã®æ¹æ³ããŸãšããŠã¿ãŸããã ç°å¢æ§ç¯ã®ã»ãšãã©ã¯ å
¬åŒããã¥ã¡ã³ã ãåèã«ã¹ã ãŒãºã«ã§ããŸããã create-next-app ãå©çšãããšæåã§èšå®ããéšåãå°ãªããªãã®ã§ã䟿å©ããšæããŸãã ãŸããCIç°å¢ã®æ§ç¯ã§Dockerfileã GitHub Actionsã®äœææé ããŸãšããŠã¿ãŸãããèå³ã®ããæ¹ã¯ãã²è©ŠããŠã¿ãŠãã ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã - ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @chen.xinying ãã¬ãã¥ãŒïŒ @handa.kenta ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®é³ã§ãã ãã®èšäºã§ã¯ Next.js + TypeScript + Docker + GitHub Actionsã®ç°å¢æ§ç¯ã®æ¹æ³ããŸãšããŸãã ã»ããã¢ããæé 以äžã®ã»ããã¢ãããè¡ããŸãã 1. create-next-appã§Next.jsã®ãããžã§ã¯ããäœæ 2. éçåæããŒã«ESLintã®èšå® 3. ã³ãŒããã©ãŒããã¿ãŒPrettierã®èšå® 4. ãã¹ã ãã¬ãŒã ã¯ãŒã¯ ã®JestãReact Testing Libraryã®èšå® 5. Dockerfileã®äœæ 6. GitHub Actionsãå©çšãããã«ãããã¹ãã®èªåå®è¡ ããŒãžã§ã³ Next.js v12.3.0 TypeScript v4.8.3 create-next-appã§Next.jsã®ãããžã§ã¯ããäœæ create-next-app ã¯Next.jsãããžã§ã¯ããèªåçæããããã®ã³ãã³ãã§ãã create-next-app ãå©çšãããšãNext.js + TypeScriptã®ãããžã§ã¯ãã®ã²ãªåœ¢ãç°¡åã«äœæã§ããŸããå
¬åŒããã¥ã¡ã³ã㯠ãã¡ã ã§ãã create-next-appãå®è¡ãã 以äžã®ã³ãã³ããå®è¡ãããããžã§ã¯ããèªåçæããŸãã $ npx create-next-app ïœãããžã§ã¯ãåïœã--ts yarnãå©çšããããšãã§ããŸãã $ yarn create next-app ïœãããžã§ã¯ãåïœ --typescript --ts ãŸã --typescript ãæå®ããããšã§ãTypeScriptãå©çšãããããžã§ã¯ããçæãããŸããTypeScriptã®èšå®ãã¡ã€ã« tsconfig.json ãèªåçã«äœæãããŸãã ãããžã§ã¯ããåãããŠã¿ã äœæããããããžã§ã¯ãã® ãã£ã¬ã¯ã ãªã§ä»¥äžã®ã³ãã³ããå®è¡ãããšãNext.jsãããžã§ã¯ããéçºã¢ãŒãã§èµ·åã§ããŸãã $ yarn dev localhost:3000 ã«ã¢ã¯ã»ã¹ãããšãã¡ãã®ç»é¢ã衚瀺ãããŸããããã§ãããžã§ã¯ãã®ã²ãªåœ¢ã®äœæãå®äºããŸããã éçåæããŒã«ESLintã®èšå® ESLintãå®è¡ãã Next.js v11.0.0ãã create-next-app ã§ãããžã§ã¯ããäœæãããšãESLintã¯èªåçã«ã€ã³ã¹ããŒã«ãããŸãã package.json ã® Scripts ã« "lint": "next lint" ãããã©ã«ãã§èšå®ãããŠããŸãã以äžã®ã³ãã³ãã§ESLintãå®è¡ã§ããŸãã $ yarn lint ESLintã®ããã©ã«ãæ§æ Next.jsã®ESLintã®ããã©ã«ãæ§æã§ã¯ã eslint-config-next ã®æ§æãèªåçã«èšå®ãããŸãã以äžã®ã«ãŒã«ã»ããã eslint-config-next ã«å«ãŸãããããã€ã³ã¹ããŒã«ãèšå®ããå¿
èŠã¯ãããŸãããå
¬åŒããã¥ã¡ã³ã㯠ãã¡ã ã§ãã eslint-plugin-react eslint-plugin-react-hooks eslint-plugin-next ESLintã®æ§æãã«ã¹ã¿ãã€ãºãã .eslintrc.json ãç·šéããããšã§ãæ§æãã«ã¹ã¿ãã€ãºã§ããŸãã .eslintrc.json ã¯ESLintã«é¢ããèšå®ãã¡ã€ã«ã§ãã 以äžã®ããã« extends ã«èšè¿°ããã°ã eslint:recommended ãªã©ãä»ã®æ§æãå©çšã§ããŸãããŸã rules ã§ã«ãŒã«ã®å€æŽãç¡å¹åã®èšå®ãã§ããŸãã //.eslintrc.json { "extends": [ "eslint:recommended", "next/core-web-vitals", ], "rules":{ // åå¥ã®ã«ãŒã«ã倿Žãç¡å¹ã«ããå Žåã¯ãã¡ãã«è¿œå ãã "no-console": ["warn", { allow: ["warn", "error"] }], "sort-imports": "off", "import/order": ["error", { alphabetize: { order: "asc" } }], "import/no-named-as-default-member": "off", } ã³ãŒããã©ãŒããã¿ãŒPrettierã®èšå® Prettierãã€ã³ã¹ããŒã«ãã 以äžã®ã³ãã³ãã§Prettieræ¬äœãESLintãšäœµçšããéã«å¿
èŠãªã©ã€ãã©ãªãŒãã€ã³ã¹ããŒã«ããŸãã $ yarn add -D prettier eslint-config-prettier .eslintrc. json ãç·šéãã .eslintrc.json ã以äžã®ããã«èšå®ããããšã§ãESLint ãš Prettier ã®ã³ãŒãæŽåœ¢ãç«¶åããªãããã«ãªããŸãã //.eslintrc.json { "extends": ["next/core-web-vitals", "prettier"], } .prettierrcãäœæãã ã³ãŒãæŽåœ¢ã«é¢ããèšå®ãã«ã¹ã¿ãã€ãºããã«ã¯ãã«ãŒã ãã£ã¬ã¯ã ãªã§ .prettierrc ãäœæããŸãã 以äžã®ããã«ã«ã¹ã¿ãã€ãºèšå®ãã§ããŸããèšå®ã®è©³çŽ°ã¯ å
¬åŒããã¥ã¡ã³ã ãåç
§ããŠãã ããã //.prettierrc { "tabWidth": 2, "printWidth": 120, "trailingComma": "es5", "semi": false, "singleQuote": true } Prettierãå®è¡ãã Prettierãå®è¡ããã«ã¯ã package.json ã® Scripts ã«ä»¥äžã® ã¹ã¯ãªãã ã远å ããŸãã //package.json "scripts": { "format": "prettier --write --ignore-path .gitignore ." } 以äžã®ã³ãã³ãã§Prettierãå®è¡ã§ããŸãã $ yarn format ãã¹ã ãã¬ãŒã ã¯ãŒã¯ ã®JestãReact Testing Libraryã®èšå® JestãReact Testing Libraryãã€ã³ã¹ããŒã«ãã Next.jsã® å
¬åŒããã¥ã¡ã³ã ãåç
§ããJestããã³React Testing Libraryãã€ã³ã¹ããŒã«ãèšå®ããŸãã $ yarn add -D jest jest-environment-jsdom @testing-library/react @testing-library/jest-dom jest.config.jsãäœæãã ã«ãŒã ãã£ã¬ã¯ã ãªã§jestã®èšå®ãã¡ã€ã« jest.config.js ãäœæããŸãã //jest.config.js const nextJest = require('next/jest') const createJestConfig = nextJest({ dir: './', }) const customJestConfig = { moduleDirectories: ['node_modules', '<rootDir>/'], testEnvironment: 'jest-environment-jsdom', } module.exports = createJestConfig(customJestConfig) ãã¹ããå®è¡ããŠã¿ã ãã¹ããå®è¡ããã«ã¯ã package.json ã® scripts ã«ä»¥äžã® ã¹ã¯ãªãã ã远å ããŸãã //package.json "scripts": { "test": "jest" } ãµã³ãã«ãã¹ãã远å ããŸããã«ãŒã ãã£ã¬ã¯ã ãªã« test ãã©ã«ããäœæãã test ã®é
äžã« index.test.tsx ãã¡ã€ã«ãäœæããŸãã //index.test.tsx import { render, screen } from '@testing-library/react' import '@testing-library/jest-dom/extend-expect' import Home from '../pages' describe('Home', () => { it('renders a heading', () => { render(<Home />) const heading = screen.getByRole('heading', { name: /welcome to next\.js/i, }) expect(heading).toBeInTheDocument() }) }) 以äžã®ã³ãã³ãã§ãã¹ããããŸãã $ yarn test ãã¹ããéã£ãããšã確èªã§ããŸãã Dockerfileã®äœæ Next.jsãDockerã³ã³ããã§ãããã€ããããã®Dockerfileã®ã²ãªåœ¢ãäœæããŸãã Next.jsã®standaloneã¢ãŒããæå¹ã«ãã ãŸãã next.config.js ã®èšå®ãä¿®æ£ããstandaloneã¢ãŒããæå¹ã«ããŸãã //next.config.js const nextConfig = { output: 'standalone', } Next.js 12ã®ææ°ããŒãžã§ã³ã§ã¯standaloneã¢ãŒããæå¹ã«ããããšã§ããã«ããµã€ãºã倧å¹
ã«åæžã§ããŸãã yarn build ã«ããã .next/standalone ãã©ã«ããŒãäœæããã node_modules ã®äŸåé¢ä¿ãå«ãããããã€ã§å¿
èŠãšãªãæå°éãªãã¡ã€ã«ã®ã¿ãã³ããŒãããŸãã standalone ã«äœæããã sever.js ãå®è¡ããã°æ¬çªã¢ããªã±ãŒã·ã§ã³ãå®è¡ã§ããŸãã Dockerfileãäœæãã Next.jsã® å
¬åŒãµã³ãã« ãåèãã€ã€ãDistrolessã§å®è¡ãããã«ããã«ãã®DockerfileãäœæããŸãã FROM node:16 AS build ADD . /app WORKDIR /app RUN yarn install --production=false RUN yarn build FROM gcr.io/distroless/nodejs:16 WORKDIR /app COPY --from=build /app/next.config.js ./ COPY --from=build /app/public ./public COPY --from=build /app/package.json ./package.json COPY --from=build /app/.next/static ./.next/static COPY --from=build /app/.next/standalone ./ CMD ["server.js"] ããŒã«ã«ã§Dockerã³ã³ãããå®è¡ããŠã¿ã 以äžã®ã³ãã³ãã§ã³ã³ããããã«ããå®è¡ã§ããŸãã $ docker build -t ïœã€ã¡ãŒãžåïœ . $ docker run -p 3000:3000 ïœã€ã¡ãŒãžåïœ GitHub Actionsãå©çšãããã«ãããã¹ãã®èªåå®è¡ pushãããªã¬ãŒã«ããŠãã«ãããã³ãã¹ããèªåå®è¡ãã GitHub ActionsãäœæããŸãã ã«ãŒã ãã£ã¬ã¯ã ãªã§ .github/workflows ãã©ã«ããŒãäœæããé
äžã« build-and-test-on-push.yml ãäœæããŸãã on: push: branches-ignore: - "main" name: Build and Test on Push jobs: build: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: docker build run: docker build . run-tests: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set up Node.js uses: actions/setup-node@v3 with: node-version: 16 - name: Install Dependencies run: yarn install - name: Run test run: yarn run test Dockerãå©çšããªãå Žåã¯ã yarn build ã§ãã«ããå®è¡ã§ããŸãã ãŸãšã ä»åã¯Next.jsã®ç°å¢æ§ç¯ã®æ¹æ³ããŸãšããŠã¿ãŸããã ç°å¢æ§ç¯ã®ã»ãšãã©ã¯ å
¬åŒããã¥ã¡ã³ã ãåèã«ã¹ã ãŒãºã«ã§ããŸããã create-next-app ãå©çšãããšæåã§èšå®ããéšåãå°ãªããªãã®ã§ã䟿å©ããšæããŸãã ãŸããCIç°å¢ã®æ§ç¯ã§Dockerfileã GitHub Actionsã®äœææé ããŸãšããŠã¿ãŸãããèå³ã®ããæ¹ã¯ãã²è©ŠããŠã¿ãŠãã ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã - ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @chen.xinying ãã¬ãã¥ãŒïŒ @handa.kenta ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãXïŒã¯ãã¹ïŒ ã€ãããŒã·ã§ã³ æ¬éš ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒ ã®å±±äžã§ãã ä»åã¯ãAnsible Vaultãå©çšããŠãAnsibleã䜿ãå Žåã«æ©å¯æ
å ±ãå®å
šã«æ±ãæ¹æ³ã«ã€ããŠç޹ä»ããŸãã ansibleãšæ©å¯æ
å ±ã®ç®¡çã«ã€ããŠã®èª²é¡ Ansibleã䜿ã£ãŠãããã€ãªã©ãèªååããŠãããšã Amazon Web Services ( AWS ) ã®æ©å¯æ
å ±ããã¹ã¯ãŒãã SSH ã«å©çšãã ç§å¯éµ ãšãã£ãæ©å¯æ
å ±ãæ±ãå Žé¢ããããŸãããŸããAnsibleãå©çšããŠããå Žåã¯playbookã GitHub ãªã©ã§ç®¡çããããšãå€ããšæããŸãããããã£ã GitHub ãªã©ã® ãªããžããª ã«æ©å¯æ
å ±ãçŽæ¥çœ®ããŠããŸããšæ
å ±æŒæŽ©ãšãã£ãäºæ
ã«ã€ãªããå ŽåããããŸãã æ©å¯æ
å ±ãå¥ã·ã¹ãã ( dashlaneã AWS ã®secret managerãªã© ) ã§ç®¡çãããšãã£ãæ¹æ³ãããããšæããŸããããããã®æ¹æ³ã§ã¯æ©å¯æ
å ±ã ããããŒãžã§ã³ç®¡çã®ä»çµã¿ããå¥ã§ç®¡çããããšãšãªã£ãŠããŸãã管çã³ã¹ããé«ããªã£ãŠããŸããŸãããŸããCI/CDãšãã£ãèªååãè¡ãå Žåã«ãansible以å€ã®ããŒã«ãæ©å¯æ
å ±ãžã®ã¢ã¯ã»ã¹æ¹æ³ãèããªããã°ãªããªããªã£ãŠããŸããŸãã çæ³çã«ã¯ä»¥äžã®ãããªç¶æ
ã«ãªã£ãŠããŠã»ããã§ãã æ©å¯æ
å ±ã¯å®å
šã«æ±ããã æ°èŠã®ããŒã«ã®å°å
¥ã¯é¿ããã playbookãšæ©å¯æ
å ±ã®äž¡æ¹ã1ã€ã® ãªããžã㪠äžã§å®å
šã«ããŒãžã§ã³ç®¡çã§ãã ä»åã¯ãã®åé¡ã解決ããAnsible VaultãšããããŒã«ã«ã€ããŠç޹ä»ããŸãã Ansible Vaultãšã¯ ãã®ãããªæ©å¯æ
å ±ãæ±ãããã«ãAnsibleã«ã¯Ansible VaultãšåŒã°ããæå·åã®æ©èœãä»å±ããŠããŸããæå·åããæ
å ±ã§ããã° ãªããžã㪠äžã«çœ®ããªã¹ã¯ã倧å¹
ã«æžããããšãã§ããŸããæ¬èšäºã§ã¯ãã®Ansible Vaultã䜿ã£ãŠã ssh ã® ç§å¯éµ ã AWS ã®èªèšŒæ
å ±ãšãã£ãæ©å¯æ
å ±ãæå·åããŠCI/CDããå©çšããæ¹æ³ã«ã€ããŠèšèŒããŸãã ãªããAnsible Vaultã®å
¬åŒã®ããã¥ã¡ã³ãã¯ä»¥äžãšãªããŸãããã詳现ãªèª¬æã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã https://docs.ansible.com/ansible/latest/user_guide/vault.html ãã®èšäºã§ç޹ä»ããŠããå©ç𿹿³ã¯ã 10äººã«æºããªãå°èŠæš¡ãªããŒã æ©å¯æ
å ±ã¯ã¡ã³ãå
ã§å
±æããŠåé¡ããªã äžèšã®ãããªæ³å®ãšãªã£ãŠããŸãã ãã®ãããAnsible Vaultã§æå·åã«å©çšãããã¹ã¯ãŒã㯠vaultd-id ãå©çšããŠåå²ãããããåäžã§å
±éã®ãã®ãæ³å®ããŠããŸãã Ansible Vaultã䜿ã£ãæå·åã埩å·å Ansible Vaultã¯ã ansible-vault ã³ãã³ããéããŠå©çšããŸãããµãã³ãã³ããšã㊠create ã encrypt ã decrypt ã rekey ã edit ã view ãšãããµãã³ãã³ãããããŸããããã§ã¯ãæ¢åã®ãã¡ã€ã«ã®æå·åã埩å·ãè¡ã encrypt ã decrypt ã®åäœã«ã€ããŠè¿°ã¹ãŸãã ãŸãã¯ã encrypt ã䜿ã£ãŠãã¡ã€ã«ãæå·åããŠã¿ãŸãããã以äžã®ãããªäžèº«ã®ãã¡ã€ã«ãã test.txt ãšããååã§äœæããŸãã hello,world! ãã®ãã¡ã€ã«ãã ansible-vault encrypt ã§æå·åããŸãã éäžã§ãã¹ã¯ãŒããèãããã®ã§ãé©å®å
¥åããŠå¿ããªãæ§ã«ããŠãã ããã $ansible-vault encrypt test.txt New Vault password: Confirm New Vault password: Encryption successful æå·åã«æåããããã§ããæå·åãããäžèº«ã確èªããŠã¿ãŸãã $ cat test.txt $ANSIBLE_VAULT;1.1;AES256 34646636663564393432303436353932613263346534373439353133303137333064343363326266 6565386564393437316139353031333063316663363466300a376534313035373630356663376661 35663263663265383861346162306630353636316534626165313638616433373566373632306339 6438646236316431380a643737343561376133313334616162303737616561386262633338313761 6436 ã¡ãããšæå·åã§ããããã§ãã ä»åºŠã¯åŸ©å·ã§ããã確èªããŠã¿ãŸãããã埩å·ã«äœ¿ãã³ãã³ã㯠ansible-vault decrypt ã§ãã éäžã§å
ã»ã©å
¥åãããã¹ã¯ãŒããæ±ããããŸããæã¡ééãã«æ³šæããŠãã¹ã¯ãŒããå
¥åããŸãããã ansible-vault decrypt test.txt Vault password: Decryption successful ç¡äºåŸ©å·ã§ããããã§ãã ããã§ã¯ãäžèº«ãæ£ãããã確èªããŠã¿ãŸãããã $ cat test.txt hello,world! ã¡ãããšãã¡ã€ã«ã®äžèº«ã埩å·ã§ããŠããããšãåãããŸããã ãã® ansible-vault ã®æ©èœã䜿ã£ãŠæ©å¯æ
å ±ãæ±ãplaybookãäœã£ãŠã¿ãŸãããã SSH æ¥ç¶æ
å ±ã®ä¿è· ansibleã§ã¯ SSH ã®æ¥ç¶ã« ç§å¯éµ ãå©çšããããšãå€ãã§ããããã® ç§å¯éµ ã ãªããžããª ã«æå·åããã«ç»é²ããŠããŸããšããã®æ
å ±ãå
¥æãã人ã¯èª°ã§ãæ¥ç¶ã§ããŠããŸããŸãããŸãã¯ãã®æ
å ±ã®æå·åã宿œããŠã¿ãŸãããã ãŸãã以äžã®ããã«æ¥ç¶ã«å©çšãã ç§å¯éµ ( private_key )ãæå·åããŠãããŸãã ansible-vault private_key 次ã«ãå®è¡ããplaybookã®å
é ã«ãã®æå·åããã ç§å¯éµ ã埩å·ããã¿ã¹ã¯ã远å ããŸãã å
容ãšããŠã¯ copy ã¢ãžã¥ãŒã«ãå®è¡ããã ãã®ãã®ã«ãªã£ãŠããŸããansibleã® copy ã¢ãžã¥ãŒã«ã¯ã ansible-vault ã§æå·åããããã¡ã€ã«ãæ±ãéã«åŸ©å·ããŠãããæ©èœããããŸãããã®æ©èœãå©çšããŠã ç§å¯éµ ã埩å·ããŠããŸãã - hosts: localhost gather_facts: false vars: src_key: ./private_key dest_key: ./decrypted_private_key tasks: - copy: src: "{{ src_key }}" dest: "{{ dest_key }}" mode: 0600 ãã㊠ansible-playbook ã§å©çšãã inventory.yml ã以äžã®ããã«èšè¿°ããŸãã XXXã§ç€ºããŠããéšåã¯åèªã®ç°å¢ã«åãããŠæžãæããŠãã ããã ããã§ã ansible_ssh_private_key_file ã«ã¯äžèšã®æé ã§åŸ©å·ããã ç§å¯éµ ãæå®ãããããã«èšå®ããŸãã all: children: XXXX: hosts: XXXX: ansible_ssh_private_key_file: ./decrypted_private_key ansible_ssh_user: XXXX ansible_host: XXX.XXX.XXX.XXX ungrouped: {} ããã§ã ç§å¯éµ ãæå·åããŠç®¡çããããšãå¯èœã«ãªããŸããã æ©å¯æ
å ±ãå©çšããPlaybookã®å®è¡æ¹æ³ ansible-playbook ãå®è¡ããéã«vaultã§å©çšãããã¹ã¯ãŒããå¿
èŠã«ãªããŸããã 以äžã®ããã«åŒæ°ã§ãã¹ã¯ãŒããã¡ã€ã«ãæž¡ãããæ¯åå
¥åããæ¹æ³ããããŸãã èªååãªã©ãèãããšãã¹ã¯ãŒããã¡ã€ã«ãäœæããæ¹æ³ãæè»œã§ãã # 端æ«ã§æ¯åãã¹ã¯ãŒããå
¥åããæ¹æ³ ansible-playbook site.yml -ask-vault-pass # ãã¹ã¯ãŒããã¡ã€ã«ãåŒæ°ã§äžããæ¹æ³ ansible-playbook site.yml âvault-password-file ~/.vault_pass.txt äŸãã°ã ç°å¢å€æ° $VAULT_PASS ã«ãã¹ã¯ãŒããæ ŒçŽãããŠãããããªå Žåã§ã¯ã以äžã®ãã㪠ã¹ã¯ãªãã ãå®è¡ããæ¹æ³ããããŸãã echo "$VAULT_PASS" > .vault_pass.txt ansible-playbook -i inventory.yml site.yml âvault-password-file ~/.vault_pass.txt rm .vault_pass.txt Playbookäžã§å©çšããæ©å¯æ
å ±ã®ä¿è· ãããŸã§ã§ SSH ã«å©çšãã ç§å¯éµ ã®æå·åã¯å®çŸã§ããŸãããæ¬¡ã«playbookã®äžã§å©çšãããæ©å¯æ
å ±ã«ã€ããŠãæå·åããŠãããŸãããã å
ã»ã©ã® ç§å¯éµ ã®äŸã§ã¯ã copy ã¢ãžã¥ãŒã«ã¯èªåçã« ansible-vault ã®åŸ©å·ã宿œããŠããããšèª¬æããŸããããã®æ©èœãansibleã®å€æ°ã®ãã¡ã€ã«ã«å¯ŸããŠãèªåçã«åŸ©å·ãè¡ã£ãŠãããŸãã åŸã£ãŠAnsibleãå©çšãã group_vars/all.yml ãšãã£ã倿°ãã¡ã€ã«ã ansible-vault ã³ãã³ãã§äºåã«æå·åããŠããããšã§ãæ©å¯æ
å ±ãæå·åãããŸãŸã§å©çšããããšãåºæ¥ãŸãã以äžã®ããã«äºåã«å€æ°ã®ãã¡ã€ã«ãæå·åããŠããã ãã§å®å
šã«ç®¡çããããšãå¯èœãšãªããŸãã group_vars/all.yml ã«ã¯ä»¥äžã®ããã«ãsudoã®ãã¹ã¯ãŒãã AWS ã®æ¥ç¶æ
å ±ãå«ãŸããŠããŸãã --- ansible_sudo_pass: "XXXXXXXXXX" aws_access_key_id: "XXXXXXXXXXXXXXXXXXX" aws_secret_access_key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ãããã ansible-vault ã§æå·åããŸãã ansible-vault encrypt group_vars/all.yml ãã®ç¶æ
ã§ã ansible-playbook ã®å®è¡æã« group_vars/all ã®å€æ°ãå©çšããéã«èªåçã«åŸ©å·åŠçãè¡ãããŸãã å®è¡æ¹æ³ã¯åé
ã§è¿°ã¹ãæ¹æ³ãšå€ãããå®è¡ã§ããŸãã GitHub Actions ã§å®è¡ããæ¹æ³ ããã§ã¯ãæåŸã« GitHub Actionsã§å®è¡ããå Žåã®æ¹æ³ã«ã€ããŠç޹ä»ããŸãã vaultã®ãã¹ã¯ãŒãã GitHub ã®secretãšããŠäžãããããªèšå®ãè¡ã£ãŠå®è¡ããŸãã jobs: deploy: steps: - name: Exec ansible-playbook env: VAULT_PASS: ${{secrets.VAULT_PASS}} run: | echo $VAULT_PASS > ./vault_pass.txt ansible-playbook -i inventory.yml site.yml --vault-password-file ./vault_pass.txt" ç°¡åã§ããïŒ ãŸãšã ãã®èšäºã§ã¯ãAnsible Vaultã䜿ã£ãæ©å¯æ
å ±ã®æ±ãæ¹ã®ç°¡åãªç޹ä»ãè¡ããŸããããŸãããããçµã¿ãã㊠GitHub Actionsããå®è¡ããæ¹æ³ã玹ä»ããŸãããããã§ãå®å
šã« ãªããžã㪠äžã®æ©å¯æ
å ±ã眮ããªãããCI/CDãæè»œã«å®è¡ã§ããç°å¢ãæ§ç¯ã§ããŸãã ä»®æ³ãã·ã³ ãªã©ã«ãµãŒãã¹ãAnsibleã䜿ã£ãŠãããã€ããå Žé¢ã§ã¯æ¯éæå¹æŽ»çšããŠããããã§ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @yamashita.tsuyoshi ãã¬ãã¥ãŒïŒ @sato.taichi ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãXïŒã¯ãã¹ïŒ ã€ãããŒã·ã§ã³ æ¬éš ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒ ã®å±±äžã§ãã ä»åã¯ãAnsible Vaultãå©çšããŠãAnsibleã䜿ãå Žåã«æ©å¯æ
å ±ãå®å
šã«æ±ãæ¹æ³ã«ã€ããŠç޹ä»ããŸãã ansibleãšæ©å¯æ
å ±ã®ç®¡çã«ã€ããŠã®èª²é¡ Ansibleã䜿ã£ãŠãããã€ãªã©ãèªååããŠãããšã Amazon Web Services ( AWS ) ã®æ©å¯æ
å ±ããã¹ã¯ãŒãã SSH ã«å©çšãã ç§å¯éµ ãšãã£ãæ©å¯æ
å ±ãæ±ãå Žé¢ããããŸãããŸããAnsibleãå©çšããŠããå Žåã¯playbookã GitHub ãªã©ã§ç®¡çããããšãå€ããšæããŸãããããã£ã GitHub ãªã©ã® ãªããžããª ã«æ©å¯æ
å ±ãçŽæ¥çœ®ããŠããŸããšæ
å ±æŒæŽ©ãšãã£ãäºæ
ã«ã€ãªããå ŽåããããŸãã æ©å¯æ
å ±ãå¥ã·ã¹ãã ( dashlaneã AWS ã®secret managerãªã© ) ã§ç®¡çãããšãã£ãæ¹æ³ãããããšæããŸããããããã®æ¹æ³ã§ã¯æ©å¯æ
å ±ã ããããŒãžã§ã³ç®¡çã®ä»çµã¿ããå¥ã§ç®¡çããããšãšãªã£ãŠããŸãã管çã³ã¹ããé«ããªã£ãŠããŸããŸãããŸããCI/CDãšãã£ãèªååãè¡ãå Žåã«ãansible以å€ã®ããŒã«ãæ©å¯æ
å ±ãžã®ã¢ã¯ã»ã¹æ¹æ³ãèããªããã°ãªããªããªã£ãŠããŸããŸãã çæ³çã«ã¯ä»¥äžã®ãããªç¶æ
ã«ãªã£ãŠããŠã»ããã§ãã æ©å¯æ
å ±ã¯å®å
šã«æ±ããã æ°èŠã®ããŒã«ã®å°å
¥ã¯é¿ããã playbookãšæ©å¯æ
å ±ã®äž¡æ¹ã1ã€ã® ãªããžã㪠äžã§å®å
šã«ããŒãžã§ã³ç®¡çã§ãã ä»åã¯ãã®åé¡ã解決ããAnsible VaultãšããããŒã«ã«ã€ããŠç޹ä»ããŸãã Ansible Vaultãšã¯ ãã®ãããªæ©å¯æ
å ±ãæ±ãããã«ãAnsibleã«ã¯Ansible VaultãšåŒã°ããæå·åã®æ©èœãä»å±ããŠããŸããæå·åããæ
å ±ã§ããã° ãªããžã㪠äžã«çœ®ããªã¹ã¯ã倧å¹
ã«æžããããšãã§ããŸããæ¬èšäºã§ã¯ãã®Ansible Vaultã䜿ã£ãŠã ssh ã® ç§å¯éµ ã AWS ã®èªèšŒæ
å ±ãšãã£ãæ©å¯æ
å ±ãæå·åããŠCI/CDããå©çšããæ¹æ³ã«ã€ããŠèšèŒããŸãã ãªããAnsible Vaultã®å
¬åŒã®ããã¥ã¡ã³ãã¯ä»¥äžãšãªããŸãããã詳现ãªèª¬æã¯ä»¥äžã®ããã¥ã¡ã³ããåç
§ããŠãã ããã https://docs.ansible.com/ansible/latest/user_guide/vault.html ãã®èšäºã§ç޹ä»ããŠããå©ç𿹿³ã¯ã 10äººã«æºããªãå°èŠæš¡ãªããŒã æ©å¯æ
å ±ã¯ã¡ã³ãå
ã§å
±æããŠåé¡ããªã äžèšã®ãããªæ³å®ãšãªã£ãŠããŸãã ãã®ãããAnsible Vaultã§æå·åã«å©çšãããã¹ã¯ãŒã㯠vaultd-id ãå©çšããŠåå²ãããããåäžã§å
±éã®ãã®ãæ³å®ããŠããŸãã Ansible Vaultã䜿ã£ãæå·åã埩å·å Ansible Vaultã¯ã ansible-vault ã³ãã³ããéããŠå©çšããŸãããµãã³ãã³ããšã㊠create ã encrypt ã decrypt ã rekey ã edit ã view ãšãããµãã³ãã³ãããããŸããããã§ã¯ãæ¢åã®ãã¡ã€ã«ã®æå·åã埩å·ãè¡ã encrypt ã decrypt ã®åäœã«ã€ããŠè¿°ã¹ãŸãã ãŸãã¯ã encrypt ã䜿ã£ãŠãã¡ã€ã«ãæå·åããŠã¿ãŸãããã以äžã®ãããªäžèº«ã®ãã¡ã€ã«ãã test.txt ãšããååã§äœæããŸãã hello,world! ãã®ãã¡ã€ã«ãã ansible-vault encrypt ã§æå·åããŸãã éäžã§ãã¹ã¯ãŒããèãããã®ã§ãé©å®å
¥åããŠå¿ããªãæ§ã«ããŠãã ããã $ansible-vault encrypt test.txt New Vault password: Confirm New Vault password: Encryption successful æå·åã«æåããããã§ããæå·åãããäžèº«ã確èªããŠã¿ãŸãã $ cat test.txt $ANSIBLE_VAULT;1.1;AES256 34646636663564393432303436353932613263346534373439353133303137333064343363326266 6565386564393437316139353031333063316663363466300a376534313035373630356663376661 35663263663265383861346162306630353636316534626165313638616433373566373632306339 6438646236316431380a643737343561376133313334616162303737616561386262633338313761 6436 ã¡ãããšæå·åã§ããããã§ãã ä»åºŠã¯åŸ©å·ã§ããã確èªããŠã¿ãŸãããã埩å·ã«äœ¿ãã³ãã³ã㯠ansible-vault decrypt ã§ãã éäžã§å
ã»ã©å
¥åãããã¹ã¯ãŒããæ±ããããŸããæã¡ééãã«æ³šæããŠãã¹ã¯ãŒããå
¥åããŸãããã ansible-vault decrypt test.txt Vault password: Decryption successful ç¡äºåŸ©å·ã§ããããã§ãã ããã§ã¯ãäžèº«ãæ£ãããã確èªããŠã¿ãŸãããã $ cat test.txt hello,world! ã¡ãããšãã¡ã€ã«ã®äžèº«ã埩å·ã§ããŠããããšãåãããŸããã ãã® ansible-vault ã®æ©èœã䜿ã£ãŠæ©å¯æ
å ±ãæ±ãplaybookãäœã£ãŠã¿ãŸãããã SSH æ¥ç¶æ
å ±ã®ä¿è· ansibleã§ã¯ SSH ã®æ¥ç¶ã« ç§å¯éµ ãå©çšããããšãå€ãã§ããããã® ç§å¯éµ ã ãªããžããª ã«æå·åããã«ç»é²ããŠããŸããšããã®æ
å ±ãå
¥æãã人ã¯èª°ã§ãæ¥ç¶ã§ããŠããŸããŸãããŸãã¯ãã®æ
å ±ã®æå·åã宿œããŠã¿ãŸãããã ãŸãã以äžã®ããã«æ¥ç¶ã«å©çšãã ç§å¯éµ ( private_key )ãæå·åããŠãããŸãã ansible-vault private_key 次ã«ãå®è¡ããplaybookã®å
é ã«ãã®æå·åããã ç§å¯éµ ã埩å·ããã¿ã¹ã¯ã远å ããŸãã å
容ãšããŠã¯ copy ã¢ãžã¥ãŒã«ãå®è¡ããã ãã®ãã®ã«ãªã£ãŠããŸããansibleã® copy ã¢ãžã¥ãŒã«ã¯ã ansible-vault ã§æå·åããããã¡ã€ã«ãæ±ãéã«åŸ©å·ããŠãããæ©èœããããŸãããã®æ©èœãå©çšããŠã ç§å¯éµ ã埩å·ããŠããŸãã - hosts: localhost gather_facts: false vars: src_key: ./private_key dest_key: ./decrypted_private_key tasks: - copy: src: "{{ src_key }}" dest: "{{ dest_key }}" mode: 0600 ãã㊠ansible-playbook ã§å©çšãã inventory.yml ã以äžã®ããã«èšè¿°ããŸãã XXXã§ç€ºããŠããéšåã¯åèªã®ç°å¢ã«åãããŠæžãæããŠãã ããã ããã§ã ansible_ssh_private_key_file ã«ã¯äžèšã®æé ã§åŸ©å·ããã ç§å¯éµ ãæå®ãããããã«èšå®ããŸãã all: children: XXXX: hosts: XXXX: ansible_ssh_private_key_file: ./decrypted_private_key ansible_ssh_user: XXXX ansible_host: XXX.XXX.XXX.XXX ungrouped: {} ããã§ã ç§å¯éµ ãæå·åããŠç®¡çããããšãå¯èœã«ãªããŸããã æ©å¯æ
å ±ãå©çšããPlaybookã®å®è¡æ¹æ³ ansible-playbook ãå®è¡ããéã«vaultã§å©çšãããã¹ã¯ãŒããå¿
èŠã«ãªããŸããã 以äžã®ããã«åŒæ°ã§ãã¹ã¯ãŒããã¡ã€ã«ãæž¡ãããæ¯åå
¥åããæ¹æ³ããããŸãã èªååãªã©ãèãããšãã¹ã¯ãŒããã¡ã€ã«ãäœæããæ¹æ³ãæè»œã§ãã # 端æ«ã§æ¯åãã¹ã¯ãŒããå
¥åããæ¹æ³ ansible-playbook site.yml -ask-vault-pass # ãã¹ã¯ãŒããã¡ã€ã«ãåŒæ°ã§äžããæ¹æ³ ansible-playbook site.yml âvault-password-file ~/.vault_pass.txt äŸãã°ã ç°å¢å€æ° $VAULT_PASS ã«ãã¹ã¯ãŒããæ ŒçŽãããŠãããããªå Žåã§ã¯ã以äžã®ãã㪠ã¹ã¯ãªãã ãå®è¡ããæ¹æ³ããããŸãã echo "$VAULT_PASS" > .vault_pass.txt ansible-playbook -i inventory.yml site.yml âvault-password-file ~/.vault_pass.txt rm .vault_pass.txt Playbookäžã§å©çšããæ©å¯æ
å ±ã®ä¿è· ãããŸã§ã§ SSH ã«å©çšãã ç§å¯éµ ã®æå·åã¯å®çŸã§ããŸãããæ¬¡ã«playbookã®äžã§å©çšãããæ©å¯æ
å ±ã«ã€ããŠãæå·åããŠãããŸãããã å
ã»ã©ã® ç§å¯éµ ã®äŸã§ã¯ã copy ã¢ãžã¥ãŒã«ã¯èªåçã« ansible-vault ã®åŸ©å·ã宿œããŠããããšèª¬æããŸããããã®æ©èœãansibleã®å€æ°ã®ãã¡ã€ã«ã«å¯ŸããŠãèªåçã«åŸ©å·ãè¡ã£ãŠãããŸãã åŸã£ãŠAnsibleãå©çšãã group_vars/all.yml ãšãã£ã倿°ãã¡ã€ã«ã ansible-vault ã³ãã³ãã§äºåã«æå·åããŠããããšã§ãæ©å¯æ
å ±ãæå·åãããŸãŸã§å©çšããããšãåºæ¥ãŸãã以äžã®ããã«äºåã«å€æ°ã®ãã¡ã€ã«ãæå·åããŠããã ãã§å®å
šã«ç®¡çããããšãå¯èœãšãªããŸãã group_vars/all.yml ã«ã¯ä»¥äžã®ããã«ãsudoã®ãã¹ã¯ãŒãã AWS ã®æ¥ç¶æ
å ±ãå«ãŸããŠããŸãã --- ansible_sudo_pass: "XXXXXXXXXX" aws_access_key_id: "XXXXXXXXXXXXXXXXXXX" aws_secret_access_key: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" ãããã ansible-vault ã§æå·åããŸãã ansible-vault encrypt group_vars/all.yml ãã®ç¶æ
ã§ã ansible-playbook ã®å®è¡æã« group_vars/all ã®å€æ°ãå©çšããéã«èªåçã«åŸ©å·åŠçãè¡ãããŸãã å®è¡æ¹æ³ã¯åé
ã§è¿°ã¹ãæ¹æ³ãšå€ãããå®è¡ã§ããŸãã GitHub Actions ã§å®è¡ããæ¹æ³ ããã§ã¯ãæåŸã« GitHub Actionsã§å®è¡ããå Žåã®æ¹æ³ã«ã€ããŠç޹ä»ããŸãã vaultã®ãã¹ã¯ãŒãã GitHub ã®secretãšããŠäžãããããªèšå®ãè¡ã£ãŠå®è¡ããŸãã jobs: deploy: steps: - name: Exec ansible-playbook env: VAULT_PASS: ${{secrets.VAULT_PASS}} run: | echo $VAULT_PASS > ./vault_pass.txt ansible-playbook -i inventory.yml site.yml --vault-password-file ./vault_pass.txt" ç°¡åã§ããïŒ ãŸãšã ãã®èšäºã§ã¯ãAnsible Vaultã䜿ã£ãæ©å¯æ
å ±ã®æ±ãæ¹ã®ç°¡åãªç޹ä»ãè¡ããŸããããŸãããããçµã¿ãã㊠GitHub Actionsããå®è¡ããæ¹æ³ã玹ä»ããŸãããããã§ãå®å
šã« ãªããžã㪠äžã®æ©å¯æ
å ±ã眮ããªãããCI/CDãæè»œã«å®è¡ã§ããç°å¢ãæ§ç¯ã§ããŸãã ä»®æ³ãã·ã³ ãªã©ã«ãµãŒãã¹ãAnsibleã䜿ã£ãŠãããã€ããå Žé¢ã§ã¯æ¯éæå¹æŽ»çšããŠããããã§ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @yamashita.tsuyoshi ãã¬ãã¥ãŒïŒ @sato.taichi ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã·ãªãŒãºãä»åã¯ãStable Diffusion v1.5ãåºãã®ã§æ©éãStable Diffusionãæ¯èŒçèŠæãªçŸå°å¥³ç»ã§æ€èšŒããŠã¿ãŸããã StabilityAIã§ã¯ãªããRunawaymlããv1.5ããªãªãŒã¹ãããã®ã§ãStabilityAIãåé€ç³è«ãåºããã®ã§ãããåãäžããããã§ãã huggingface.co Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š ã©ã€ã»ã³ã¹ãžã®åæ huggingfaceãžã®ãã°ã€ã³ å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« pipeã®äœæ ç»åã®åºå çŸå°å¥³ç»ã«ããæ€èšŒ æ¥æ¬çãªçŸå°å¥³ã¢ãã¡ç» çŸå°å¥³ã€ã©ã¹ã çŸå°å¥³åç ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã ã©ã€ã»ã³ã¹ãžã®åæ https://huggingface.co/runwayml/stable-diffusion-v1-5 ã«ã¢ã¯ã»ã¹ããŠãã©ã€ã»ã³ã¹ã«åæããŠãã ããã huggingfaceãžã®ãã°ã€ã³ ããããã¯ã Google Colabã§ã®äœæ¥ã«ãªããŸãã huggingfaceãžãã°ã€ã³ããŸãã from huggingface_hub import notebook_login from pathlib import Path if not (Path.home()/'.huggingface'/'token').exists(): notebook_login() å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« å¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸããdiffusersã®ããŒãžã§ã³ãç¹ã«æç€ºãããŠããªãã£ãã®ã§ãä»åã¯ã TPUçã®äœ¿ãæ¹ ã§äœ¿ã£ã 0.5.1 ã䜿ã£ãŠã¿ãŸããã !pip install diffusers==0.5.1 transformers scipy ftfy pipeã®äœæ pipeãäœæããŸãã以åãš model_id ãç°ãªãããšã«æ³šæããŠãã ããã from diffusers import StableDiffusionPipeline import torch model_id = "runwayml/stable-diffusion-v1-5" device = "cuda" pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, revision="fp16") pipe = pipe.to(device) ç»åã®åºå ç»åãåºåããŸãã以åã¯ã image = pipe(prompt)["sample"][0] ã§ããã prompt = "a photo of an astronaut riding a horse on mars" image = pipe(prompt).images[0] çŸå°å¥³ç»ã«ããæ€èšŒ Stable Diffusionãæ¯èŒçèŠæãªçŸå°å¥³ç»ã§æ€èšŒããŸããçµè«ããå
ã«æžããšv1.4ããå€å°è¯ããªã£ãŠãããã©ãåçã«æ¹åãããããã§ã¯ãªããšèšã£ããšããã§ããããã ä»åèŒããç»åã¯ãæå³çã«ã€ãã€ãã ã£ããã®ãéžãã§ããŸããã¯ãªãªãã£ã®é«ãç»åã¯ãäœåºŠãããçŽãã°å¿
ãåºåã§ããã®ã§ã æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç» Stable DiffusionãæãèŠæãšããã®ããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã§ããv1.4ã§ã¯ãé¡ã厩ãããç®ãå€ãæãå€ãšãã£ãåé¡ããšãã©ãïŒèµ·ããé »åºŠã¯åªæã«ãã£ãŠå€ããïŒèµ·ããŠããŸããã v1.5ã§ã¯ãé¡ã厩ãããç®ãå€ãšããåé¡ã¯ãå€å°æ¹åãããŠããŸããããŸã å®ç§ã§ã¯ãããŸãããæãå€ãšããåé¡ã¯ãæ°åå詊ããéãã¯ãå
šãæ¹åãããŠããªãããã«æããŸãã ä»å詊ããåªæã¯ãã¡ãã anime of tsundere moe kawaii beautiful girl pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã çŸå°å¥³ã€ã©ã¹ã çŸå°å¥³ã¢ãã¡ ç»ã®åªæã® anime ã illustration ã«å€ãã tsundere ã moe ã kawaii ã pixiv ã niconico ãåã£ããã®ããçŸå°å¥³ã€ã©ã¹ãã®åªæã§ãã ãã®åªæã¯ããªãå®å®ããŠããŠãããŸã«æãå€ã«ãªããããã§ãã ä»å詊ããåªæã¯ãã¡ãã illustration of beautiful girl artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã çŸå°å¥³åç çŸå°å¥³åçã¯ãå®å®ïŒå€ã«ãªããªãïŒåºŠã§ãçŸå°å¥³ã€ã©ã¹ãã«ã¯å£ããŸãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ããã¯ãå®å®ããŠããŸããæèŠçã«ã¯ãçŸå°å¥³ã€ã©ã¹ã > çŸå°å¥³åç >>> æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ãšãã£ããšããã§ããããã ä»å詊ããåªæã¯ãã¡ãã photo of beautiful girl SIGMA 85 mm F1.4 artstation impressive scene impressive composition impressive lighting ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã ãŸãšã ä»åãStable Diffusion v1.5ãæ€èšŒããŠã¿ãŸãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã®å®å®åºŠãæªããšæãããããããŸããããæ¯èŒçèŸå£ã«è©äŸ¡ããã®ã§ãå®éã®v1.5ã®è©äŸ¡ã¯ããèªåã§ãªããããšããå§ãããŸãã æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã head shot ïŒé¡åçïŒã®åªæãå ããã°ãæãåãããšã¯ã»ãšãã©ãªãã®ã§ã次ã®ãããªã¯ãªãªãã£ã®ç»åã¯é£çºã§ããŸãã head shot ã«ãããšæ§å³ãéãããã®ã§ãããŸã䜿ã£ãŠããªãã£ãã®ã§ãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã§ã¯ã head shot ãå¿
é ã«ããŠå®å®åºŠããšã£ãã»ããè¯ããããããŸããã head shot ã«ãããšStable Diffusionãé¡ã«æ³šç®ããããããé¡ãå€ã«ãªã£ãããç®ãå€ã«ãªã£ããããããšãã»ãšãã©ãªããªãããã§ãã æ¬¡åã¯ã æ±äº¬ã¿ã¯ãŒã®åç ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã·ãªãŒãºãä»åã¯ãStable Diffusion v1.5ãåºãã®ã§æ©éãStable Diffusionãæ¯èŒçèŠæãªçŸå°å¥³ç»ã§æ€èšŒããŠã¿ãŸããã StabilityAIã§ã¯ãªããRunawaymlããv1.5ããªãªãŒã¹ãããã®ã§ãStabilityAIãåé€ç³è«ãåºããã®ã§ãããåãäžããããã§ãã huggingface.co Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š ã©ã€ã»ã³ã¹ãžã®åæ huggingfaceãžã®ãã°ã€ã³ å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« pipeã®äœæ ç»åã®åºå çŸå°å¥³ç»ã«ããæ€èšŒ æ¥æ¬çãªçŸå°å¥³ã¢ãã¡ç» çŸå°å¥³ã€ã©ã¹ã çŸå°å¥³åç ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã ã©ã€ã»ã³ã¹ãžã®åæ https://huggingface.co/runwayml/stable-diffusion-v1-5 ã«ã¢ã¯ã»ã¹ããŠãã©ã€ã»ã³ã¹ã«åæããŠãã ããã huggingfaceãžã®ãã°ã€ã³ ããããã¯ã Google Colabã§ã®äœæ¥ã«ãªããŸãã huggingfaceãžãã°ã€ã³ããŸãã from huggingface_hub import notebook_login from pathlib import Path if not (Path.home()/'.huggingface'/'token').exists(): notebook_login() å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« å¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸããdiffusersã®ããŒãžã§ã³ãç¹ã«æç€ºãããŠããªãã£ãã®ã§ãä»åã¯ã TPUçã®äœ¿ãæ¹ ã§äœ¿ã£ã 0.5.1 ã䜿ã£ãŠã¿ãŸããã !pip install diffusers==0.5.1 transformers scipy ftfy pipeã®äœæ pipeãäœæããŸãã以åãš model_id ãç°ãªãããšã«æ³šæããŠãã ããã from diffusers import StableDiffusionPipeline import torch model_id = "runwayml/stable-diffusion-v1-5" device = "cuda" pipe = StableDiffusionPipeline.from_pretrained(model_id, torch_dtype=torch.float16, revision="fp16") pipe = pipe.to(device) ç»åã®åºå ç»åãåºåããŸãã以åã¯ã image = pipe(prompt)["sample"][0] ã§ããã prompt = "a photo of an astronaut riding a horse on mars" image = pipe(prompt).images[0] çŸå°å¥³ç»ã«ããæ€èšŒ Stable Diffusionãæ¯èŒçèŠæãªçŸå°å¥³ç»ã§æ€èšŒããŸããçµè«ããå
ã«æžããšv1.4ããå€å°è¯ããªã£ãŠãããã©ãåçã«æ¹åãããããã§ã¯ãªããšèšã£ããšããã§ããããã ä»åèŒããç»åã¯ãæå³çã«ã€ãã€ãã ã£ããã®ãéžãã§ããŸããã¯ãªãªãã£ã®é«ãç»åã¯ãäœåºŠãããçŽãã°å¿
ãåºåã§ããã®ã§ã æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç» Stable DiffusionãæãèŠæãšããã®ããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã§ããv1.4ã§ã¯ãé¡ã厩ãããç®ãå€ãæãå€ãšãã£ãåé¡ããšãã©ãïŒèµ·ããé »åºŠã¯åªæã«ãã£ãŠå€ããïŒèµ·ããŠããŸããã v1.5ã§ã¯ãé¡ã厩ãããç®ãå€ãšããåé¡ã¯ãå€å°æ¹åãããŠããŸããããŸã å®ç§ã§ã¯ãããŸãããæãå€ãšããåé¡ã¯ãæ°åå詊ããéãã¯ãå
šãæ¹åãããŠããªãããã«æããŸãã ä»å詊ããåªæã¯ãã¡ãã anime of tsundere moe kawaii beautiful girl pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã çŸå°å¥³ã€ã©ã¹ã çŸå°å¥³ã¢ãã¡ ç»ã®åªæã® anime ã illustration ã«å€ãã tsundere ã moe ã kawaii ã pixiv ã niconico ãåã£ããã®ããçŸå°å¥³ã€ã©ã¹ãã®åªæã§ãã ãã®åªæã¯ããªãå®å®ããŠããŠãããŸã«æãå€ã«ãªããããã§ãã ä»å詊ããåªæã¯ãã¡ãã illustration of beautiful girl artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã çŸå°å¥³åç çŸå°å¥³åçã¯ãå®å®ïŒå€ã«ãªããªãïŒåºŠã§ãçŸå°å¥³ã€ã©ã¹ãã«ã¯å£ããŸãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ããã¯ãå®å®ããŠããŸããæèŠçã«ã¯ãçŸå°å¥³ã€ã©ã¹ã > çŸå°å¥³åç >>> æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ãšãã£ããšããã§ããããã ä»å詊ããåªæã¯ãã¡ãã photo of beautiful girl SIGMA 85 mm F1.4 artstation impressive scene impressive composition impressive lighting ã€ãã€ãã ã£ãåºåçµæã¯ãã¡ãã ãŸãšã ä»åãStable Diffusion v1.5ãæ€èšŒããŠã¿ãŸãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã®å®å®åºŠãæªããšæãããããããŸããããæ¯èŒçèŸå£ã«è©äŸ¡ããã®ã§ãå®éã®v1.5ã®è©äŸ¡ã¯ããèªåã§ãªããããšããå§ãããŸãã æ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã head shot ïŒé¡åçïŒã®åªæãå ããã°ãæãåãããšã¯ã»ãšãã©ãªãã®ã§ã次ã®ãããªã¯ãªãªãã£ã®ç»åã¯é£çºã§ããŸãã head shot ã«ãããšæ§å³ãéãããã®ã§ãããŸã䜿ã£ãŠããªãã£ãã®ã§ãããæ¥æ¬ç㪠çŸå°å¥³ã¢ãã¡ ç»ã§ã¯ã head shot ãå¿
é ã«ããŠå®å®åºŠããšã£ãã»ããè¯ããããããŸããã head shot ã«ãããšStable Diffusionãé¡ã«æ³šç®ããããããé¡ãå€ã«ãªã£ãããç®ãå€ã«ãªã£ããããããšãã»ãšãã©ãªããªãããã§ãã æ¬¡åã¯ã æ±äº¬ã¿ã¯ãŒã®åç ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
ã¯ãã©ãŒããŒïŒ X ã€ãããŒã·ã§ã³ æ¬éšã®å®®æŸ€é¿ã§ãïŒ æ¬èšäºã§ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšå
ã®éšçœ²ã§ãããœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒãš ã¯ã©ãŠã ã€ãããŒã·ã§ã³ ã»ã³ã¿ãŒã«ãããŒãã£ã«ãªãã£ã¹ãµãŒãã¹ã§ããGatherãå°å
¥ãã話ãã玹ä»ããŸãïŒ ããããGatherã£ãŠäœïŒ ã©ãããã«ãŒã«ã§éçšããŠããïŒ ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã€ã§ãäŒè©±ããã£ããOK äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã Teamsãšã®äœ¿ãåãã¯ïŒ ã¢ã¯ã»ã¹å¶éã¯ã©ãããŠããïŒ å°å
¥ããŠã¿ãŠã©ãïŒ è¯ãã£ãç¹ ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ãã¡ãã£ãšè©±ãããããããããããªã£ã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã 課é¡ç¹ Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã ãŸãšã ããããGatherã£ãŠäœïŒ Gather ïŒGather.TownïŒãšã¯ãGather Presence, Inc.ãæäŸããŠããããŒãã£ã«ãªãã£ã¹ãµãŒãã¹ãã€ãŸããªãã£ã¹ã®ããã«ç€Ÿå¡å士ãéãŸãä»®æ³çãªç©ºéãæäŸãããµãŒãã¹ã®äžã€ã§ãã SpatialChat ã oVice ãªã©ãšåçš®ã®ãµãŒãã¹ã§ãããå€ãè¯ã2D- RPG ã圷圿ãšããã坿ãããã㣠ã©ã¯ ã¿ãŒããããã®ãã¶ã€ã³ããããããšã®å€§ããªçžéç¹ã®äžã€ã§ãã ãããäžã§è¿ãå Žæã«ããã¡ã³ããŒããåãéšå±ãæºã®å³¶ã«ããã¡ã³ããŒïŒãã¡ãã«é¢ããŠã¯èšå®ãå¿
èŠã§ããïŒã«ã®ã¿é³å£°ãå±ãããã Teams ã Zoom ã§ã®é話ãšç°ãªããããµãšããã¿ã€ãã³ã°ãã§ãã¡ãã£ãšããäŒè©±ããããããšãã£ãããšãããããã§ãã æéã«ã€ããŠã¯ ãã¡ã ãåç
§ããŠããã ããã°ãšæããŸãããåææ¥ç¶ãŠãŒã¶æ°ã25å以äžã§ããã°ããããã®æ°ãåºãã«é¢ä¿ãªãç¡æã§å©çšã§ããã®ã§ã䜿ãå§ããããã®ééçãªããŒãã«ãéåžžã«äœããªã£ãŠããŸãã ã©ãããã«ãŒã«ã§éçšããŠããïŒ åºæ¬ã«ãŒã«ãšããŠã¯ã以äžã®4ã€ããããŸãã ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã€ã§ãäŒè©±ããã£ããOK äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã ã«ãŒã«ãšãã£ãŠããäœããå¶éããã匷å¶ããããšãã£ãããšã¯ã»ãšãã©ããŠããããæ¯æã®ãã°ã€ã³ããã匷å¶ã§ã¯ãªãæšå¥šãšããŠããŸãã ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã¡ãã¯æåã©ãããã©ãã«ããŠãïŒã㣠ã©ã¯ ã¿ãŒãç§»åãããŠãïŒOKãšãããã®ã§ãã ç§ãã¡ã®ã¹ããŒã¹ã«ã¯ãæºãäŒè°å®€ãé
眮ãããŠããããªãã£ã¹ãã ãã§ãªããæè¿äŒãªã©ãéå¬ããããã®ãå±äžãããã¯ãŒã±ãŒã·ã§ã³æ°åãå³ããããšãã§ãããååœããªã©ãååšããŸãã ãã®ãããåžžã«ããªãã£ã¹ãã«ããå¿
èŠã¯ãªãã§ããããšããã®ããã¡ãã®ã«ãŒã«ã«ãªããŸãã ãã€ã§ãäŒè©±ããã£ããOK ãã¡ããæåã©ããã§ãã ãã ããæ¥åã§æ±ãæ
å ±ã®äžã§ãæ©å¯åºŠãé«ããã®ã«é¢ããŠã¯ãåºæ¬çã«Gatherã§ã¯æ±ããªãããšãšããŠããŸãã äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Gatherã«ã¯ãDo Not Disturbã¢ãŒããšããã¢ãŒããååšããŸãã ãã®ã¢ãŒãã§ã¯ãèªåã®é³å£°ãåšå²ã«å±ãããåšå²ã®é³å£°ãèªåã«ã¯å±ããªãããã«ãªããŸãã ãã®ãããTeamsãZoomã§ã®äŒè°äžããäœæ¥ã«éäžãããã¿ã€ãã³ã°ãªã©ãäŒè©±ã§ããªãïŒããããªããšãã«ãã®ã¢ãŒããå©çšããããšã«ãªããŸãã ãŸããç§ãã¡ã®ã¹ããŒã¹ã«ã¯ãFocusãšãªã¢ãšããå人ããŒã¹ã®ãããªå Žæãè€æ°èšçœ®ããŠããŸãã ãã®ãšãªã¢ãåæ§ã«ãäŒè©±ã§ããªãïŒããããªããšãã«å©çšããããšãæ³å®ããŠããŸãã ãªããDo Not Disturbã¢ãŒããšã®çžéç¹ãšããŠã¯ãçåŸã1ãã¹ã«ããã¡ã³ããŒã«å¯ŸããŠã¯ããäºãã®é³å£°ãå±ã仿§ãšãªã£ãŠããç¹ãæããããŸãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã äžè¿°ã®Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã¯ãåºæ¬çã«ã¯äŒè©±ã§ããªãïŒããããªãç¶æ
ã§ãã ãã®ãããããããå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªãããã«ããŸãããããšããã®ããã¡ãã®ã«ãŒã«ã§ãã ïŒDo Not Disturbã¢ãŒãã«é¢ããŠã¯ãããã話ããããŠãé³å£°ã¯å±ããŸãããïŒ Teamsãšã®äœ¿ãåãã¯ïŒ åŒç€Ÿã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠTeamsãå
šç€Ÿå©çšããŠããŸãã ãã®ãããçŸåšã¯ä»¥äžã®ãããªç®å®ã§TeamsãšGatherã䜿ãåããŠããŸãã ãšã¯ããããããŸã§ç®å®ã§ãã®ã§ãTeamsã§éè«äŒãéå¬ãããŠããããããŸãã Teams Gather ä»éšçœ²ã®ç€Ÿå¡ãåå ããæã¡åãã äºåã«ã¹ã±ãžã¥ãŒã«ãããæã¡åãã ç¹å®ã®Teamsãã£ãã«ã«çŽã¥ããæã¡åãã å·Šèšä»¥å€ã®æã¡åãã ã¡ãã£ãšãã確èªãäŸé Œ éè« ã¢ã¯ã»ã¹å¶éã¯ã©ãããŠããïŒ ç§ãã¡ã®ã¹ããŒã¹ã§ã¯ã Guest List Only Access æ©èœãå©çšããã¢ã¯ã»ã¹å¶éã宿œããŠããŸãã ãã®æ©èœã¯ ãã¯ã€ããªã¹ã æ¹åŒã«ãªã£ãŠããŠãGatherã«ãã°ã€ã³ããŠãããŠãŒã¶ã®äžã§ãããªã¹ãã«ã¡ãŒã«ã¢ãã¬ã¹ãç»é²ãããŠãããŠãŒã¶ã®ã¿ã«ã¹ããŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ã§ããŸãã ããã«ãããäžãäžã¹ããŒã¹ã®URLãæŒããŠããŸã£ãå Žåã«ããéšå€è
ãã¹ããŒã¹ã«äŸµå
¥ããããšã®ãªãããã«èšå®ããŠããŸãã å°å
¥ããŠã¿ãŠã©ãïŒ è¯ãã£ãç¹ å€§ãã以äžã®3ç¹ãæããããŸãã ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ãã¡ãã£ãšè©±ãããããããããããªã£ã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ç§ãæå±ããŠãããœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®éçºæè¡ã°ã«ãŒãã§ã¯ãæ¯æã°ã«ãŒãå
ã§æäŒïŒãã€ãªãŒ ã¹ã¿ã³ãã¢ãã ïŒã宿œããŠããŸãã ãã®ãããGatherå°å
¥ä»¥åã«ããã°ã«ãŒãå
ã®ã¡ã³ããŒã«å¯ŸããŠã¯ãæäŒã®äžã§ã³ãã¥ãã±ãŒã·ã§ã³ããšãæ©äŒããããŸããã ããããªãããé£ã®ã°ã«ãŒãã§ããã»ãã¥ãªãã£ã°ã«ãŒãã®æ¹ã
ãšã¯ãããŸããŸåãæã¡åããã«åå ããããšãã£ãããšããªãéãã¯ãéè«ã¯ãããæšæ¶ã亀ããæ©äŒãããããŸããã§ããã ãã¡ãããTeamsã§å人ãã£ãããéããªã©ããã°äŒè©±èªäœã¯ã§ãããã®ã®ãç¹ã«æ¥åäžã®èŠä»¶ããªãã®ã«å人ãã£ãããéãã®ã¯ãªããªãããŒãã«ãé«ããã®ã§ãã ãã®ãããã¯èªè
ã®çãããå
±æããŠããã ããã®ã§ã¯ãªãããšæããŸãã ãã®ãããªç¶æ
ã ã£ãã®ã§ãããGatherå°å
¥åŸã¯ãè¿ãã«ãã瀟å¡ã«ãéçºæè¡ã°ã«ãŒããã»ãã¥ãªãã£ã°ã«ãŒãé¢ä¿ãªãæšæ¶ãããããšãã£ãæ©äŒãçãŸããŸããã ããããå°ãéè«ãããŠã¿ããããšãã£ãããšããããŸãã ããã«ãã£ãŠãã»ãã¥ãªãã£ã°ã«ãŒãã®æ¹ã
ãšãäžå®ã®äº€æµããã€ããšãã§ããå人çã«ã¯èŠªè¿æãæ¹§ãããããªã£ããšæããŠããŸãã ããã¯ããããŸã§ã®Teamsã§ã¯çºçãåŸãªãã£ãã³ãã¥ãã±ãŒã·ã§ã³ã ãšæããŸãã ãã¡ãã£ãšè©±ãããããããããããªã£ã åé
ãšé¡äŒŒããŠããŸããããã¡ãã£ãšè©±ããããããšãã£ãããšããããããªã£ããšæããŸãã äŸãã°ããã¡ãã£ãšããèŠãŠãã ããïŒããã¡ãã£ãšããæããŠãã ããïŒããšãã£ãèŠä»¶ããªã¢ã«ã¿ã€ã ã§çžæã«äŒããããããããã£ããã§ããåããããããå¿«é©ãªããšãå€ãã§ãã ãŸããæ¥åã®ééæéãªã©ã«çªçºçã«å§ãŸããåšãã«ãã人ã«ãäŒè©±å
容ãå°ãèãããŠããã®ãŸãŸãµãã£ãšäŒè©±ã«åå ã§ããããããªåœ¢ã®éè«ãçºçãããããªããŸããã ããã®æéã«éè«ããŸãããïŒããšã¹ã±ãžã¥ãŒãªã³ã°ããŠè¡ãéè«ããã¡ããéè«ã§ã¯ãããšæãã®ã§ãããå人çã«ã¯ããã«æ¯ã¹ãŠããèªç¶ãªåœ¢ã§ã®éè«ãã§ããŠãããªãšæããŠããŸãã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã ã«ãžã¥ã¢ã«é¢è«ã äžéæ¡çš 颿¥ã®éã«Gatherã®å®éã®æ§åããèŠããããšã奜åå¿ãããã ããããšãå€ãã§ãã ãªã¢ãŒãã¯ãŒã¯ãäž»äœãšãªã£ããã®æä»£ã®è»¢è·ã¯ããã¯ãã³ãã¥ãã±ãŒã·ã§ã³é¢ã«äžå®ãèŠããæ¹ãå€ããšããããšã§ããã®ãããªåãçµã¿ã§å°ãã§ããã®äžå®ãç·©åã§ããã°ãšæããŸãã ãªããå®éã«æè¿ã®ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®äžéå
¥ç€Ÿã¡ã³ããŒããã¯ä»¥äžã®ãããªå£°ãããã ããŠããŸãã äœãäžæç¹ã確èªãããæ°å転æããããããããšãã«Gatherã«ãã°ã€ã³ããæã空ããŠããããªæ¹ã«è©±ããããŠãããTeamsã®ãã£ããã§ã¯çžæã®å¿ãããåãããªããããç»é¢äžã§åããææ¡ã§ããã®ã¯è¯ããšæãã ãšã«ããäœæ°ãªãäŒè©±ããããããéè«ããã®æµãã§äœããå°ããããã äžäººã§åããŠããã®ã§ã¯ãªããããŒã ã§åããŠããæèŠãããŠãã ç©çãªãã£ã¹ã§ããã°èªç¶ãšç®ã«ãããè³ã«ããã§ãããæ
å ±ã«è¿ãæ
å ±ãåŸããããäŸãã°ãã¹ããŒã¿ã¹ãå±
å Žæã確èªããããšã§åšå²ã®æ¹ã®ç¶æ³ãåããããŸããèªåãäŒè©±ããããšããåšå²ã®æ¹å士ã®äŒè©±ãèãããšã§ãæ¥åç¶æ³ã人ãšãªããªã©ãç¥ãããšãã§ããã 課é¡ç¹ 8ææ«ããå°å
¥ããŠãçŸåš2ãæã»ã©çµéããŸãããã課é¡ãšããŠã¯å€§ãã以äžã®3ç¹ãæããããŸãã Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã ããã¯Gatherã®èª²é¡ç¹ãšããããã¯TeamsãšGatherã䜵çšããéã®èª²é¡ç¹ã§ãããGatherã«ãã°ã€ã³ããç¶æ
ã§Teamsã§ã®äŒè°ã«åå ãããšãDo Not Disturbã¢ãŒãããã€ã¯ãªãã«ããªãéããäŒè°ã®é³å£°ãGatheräžã«æµããŠããŸããªã¹ã¯ããããŸãã ç¬ãèšãåãæµãã ããªãã°åé¡ãªãïŒåãæµããŠããŸã£ãåŽã®æ°åçã«ã¯åé¡ã§ããâŠç¬ïŒã®ã§ãããäŒè°ã®é³å£°ã®å Žåãå
容ã«ãã£ãŠã¯æ©å¯æ
å ±ãæŒããŠããŸãããããããã®ã§ã泚æãå¿
èŠã§ãã ãã®ãããäžãäžDo Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ããŠããŸã£ããšãã®ããã«ããäŒè°äžã¯Focusãšãªã¢ã«ç§»åããããšãæšå¥šããŠããŸãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã æ®æ®µã®æ¥åãããŒãPCã®ãã£ã¹ãã¬ã€ã®ã¿ã§è¡ã£ãŠããå ŽåãGatherã®ç»é¢ãåžžã«ã¯è¡šç€ºããŠãããŸããã ãã®ãããGatherãå©çšããŠããŠãããŸãããŒãã£ã«ãªãã£ã¹æããªããçªç¶è©±ãããããããšãã³ãã£ãŠããŸãããšãã£ã声ããããŸããã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã çŸç¶ã§ã¯ç¹ã«ãã°ã€ã³ã匷å¶ããŠããªãããã話ããããã人ããã°ã€ã³ããŠãããšã¯éããŸããã ãšã¯ããããã¡ãã¯éçšã®ã«ãŒã«æ¬¡ç¬¬ã§ã¯ããã®ã§ãä»åŸæ€èšã®äœå°ã¯ãããŸãã ãŸãšã æ¬èšäºã§ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšå
ã®éšçœ²ã«Gatherãå°å
¥ãã話ã«ã€ããŠç°¡åã«ãŸãšããŸããã ã³ãã¥ãã±ãŒã·ã§ã³æŽ»æ§åã«æçšã§ãèŠãç®ã坿ããç¡æã§å§ããããããŒãã£ã«ãªãã£ã¹ãµãŒãã¹Gatherããã²çããã®éšçœ²ã«ãå°å
¥ããŠã¿ãŸãããïŒ Gatherã®åãè
ã¿ããã«ãªã£ãŠããŸããŸããããæåŸãŸã§ãèªã¿ããã ããæ¬åœã«ããããšãããããŸããïŒ ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšåéããŠããè·çš®ã¯ä»¥äžã§ãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã ãå
¥ç€ŸçŽåŸã®å³ãå·Šãåãããªãç¶æ
ã§ã®ãªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ãã«å¯Ÿããäžå®ãGatherã§ç·©åã§ããã°ãšèããŠããŸãã®ã§ããèå³ã®ããæ¹ããã²ãå¿åãåŸ
ã¡ããŠããŸãïŒ å·çïŒ @miyazawa.hibiki ãã¬ãã¥ãŒïŒ @yamada.y ïŒ Shodo ã§å·çãããŸãã ïŒ
ã¯ãã©ãŒããŒïŒ X ã€ãããŒã·ã§ã³ æ¬éšã®å®®æŸ€é¿ã§ãïŒ æ¬èšäºã§ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšå
ã®éšçœ²ã§ãããœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒãš ã¯ã©ãŠã ã€ãããŒã·ã§ã³ ã»ã³ã¿ãŒã«ãããŒãã£ã«ãªãã£ã¹ãµãŒãã¹ã§ããGatherãå°å
¥ãã話ãã玹ä»ããŸãïŒ ããããGatherã£ãŠäœïŒ ã©ãããã«ãŒã«ã§éçšããŠããïŒ ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã€ã§ãäŒè©±ããã£ããOK äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã Teamsãšã®äœ¿ãåãã¯ïŒ ã¢ã¯ã»ã¹å¶éã¯ã©ãããŠããïŒ å°å
¥ããŠã¿ãŠã©ãïŒ è¯ãã£ãç¹ ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ãã¡ãã£ãšè©±ãããããããããããªã£ã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã 課é¡ç¹ Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã ãããã« ããããGatherã£ãŠäœïŒ Gather ïŒGather.TownïŒãšã¯ãGather Presence, Inc.ãæäŸããŠããããŒãã£ã«ãªãã£ã¹ãµãŒãã¹ãã€ãŸããªãã£ã¹ã®ããã«ç€Ÿå¡å士ãéãŸãä»®æ³çãªç©ºéãæäŸãããµãŒãã¹ã®äžã€ã§ãã SpatialChat ã oVice ãªã©ãšåçš®ã®ãµãŒãã¹ã§ãããå€ãè¯ã2D- RPG ã圷圿ãšããã坿ãããã㣠ã©ã¯ ã¿ãŒããããã®ãã¶ã€ã³ããããããšã®å€§ããªçžéç¹ã®äžã€ã§ãã ãããäžã§è¿ãå Žæã«ããã¡ã³ããŒããåãéšå±ãæºã®å³¶ã«ããã¡ã³ããŒïŒãã¡ãã«é¢ããŠã¯èšå®ãå¿
èŠã§ããïŒã«ã®ã¿é³å£°ãå±ãããã Teams ã Zoom ã§ã®é話ãšç°ãªããããµãšããã¿ã€ãã³ã°ãã§ãã¡ãã£ãšããäŒè©±ããããããšãã£ãããšãããããã§ãã æéã«ã€ããŠã¯ ãã¡ã ãåç
§ããŠããã ããã°ãšæããŸãããåææ¥ç¶ãŠãŒã¶æ°ã25å以äžã§ããã°ããããã®æ°ãåºãã«é¢ä¿ãªãç¡æã§å©çšã§ããã®ã§ã䜿ãå§ããããã®ééçãªããŒãã«ãéåžžã«äœããªã£ãŠããŸãã ã©ãããã«ãŒã«ã§éçšããŠããïŒ åºæ¬ã«ãŒã«ãšããŠã¯ã以äžã®4ã€ããããŸãã ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã€ã§ãäŒè©±ããã£ããOK äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã ã«ãŒã«ãšãã£ãŠããäœããå¶éããã匷å¶ããããšãã£ãããšã¯ã»ãšãã©ããŠããããæ¯æã®ãã°ã€ã³ããã匷å¶ã§ã¯ãªãæšå¥šãšããŠããŸãã ã¹ããŒã¹å
ã®ã©ãã«ããŠãOK ãã¡ãã¯æåã©ãããã©ãã«ããŠãïŒã㣠ã©ã¯ ã¿ãŒãç§»åãããŠãïŒOKãšãããã®ã§ãã ç§ãã¡ã®ã¹ããŒã¹ã«ã¯ãæºãäŒè°å®€ãé
眮ãããŠããããªãã£ã¹ãã ãã§ãªããæè¿äŒãªã©ãéå¬ããããã®ãå±äžãããã¯ãŒã±ãŒã·ã§ã³æ°åãå³ããããšãã§ãããååœããªã©ãååšããŸãã ãã®ãããåžžã«ããªãã£ã¹ãã«ããå¿
èŠã¯ãªãã§ããããšããã®ããã¡ãã®ã«ãŒã«ã«ãªããŸãã ãã€ã§ãäŒè©±ããã£ããOK ãã¡ããæåã©ããã§ãã ãã ããæ¥åã§æ±ãæ
å ±ã®äžã§ãæ©å¯åºŠãé«ããã®ã«é¢ããŠã¯ãåºæ¬çã«Gatherã§ã¯æ±ããªãããšãšããŠããŸãã äŒè©±ã§ããªãïŒããããªããšãã¯Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšãã Gatherã«ã¯ãDo Not Disturbã¢ãŒããšããã¢ãŒããååšããŸãã ãã®ã¢ãŒãã§ã¯ãèªåã®é³å£°ãåšå²ã«å±ãããåšå²ã®é³å£°ãèªåã«ã¯å±ããªãããã«ãªããŸãã ãã®ãããTeamsãZoomã§ã®äŒè°äžããäœæ¥ã«éäžãããã¿ã€ãã³ã°ãªã©ãäŒè©±ã§ããªãïŒããããªããšãã«ãã®ã¢ãŒããå©çšããããšã«ãªããŸãã ãŸããç§ãã¡ã®ã¹ããŒã¹ã«ã¯ãFocusãšãªã¢ãšããå人ããŒã¹ã®ãããªå Žæãè€æ°èšçœ®ããŠããŸãã ãã®ãšãªã¢ãåæ§ã«ãäŒè©±ã§ããªãïŒããããªããšãã«å©çšããããšãæ³å®ããŠããŸãã ãªããDo Not Disturbã¢ãŒããšã®çžéç¹ãšããŠã¯ãçåŸã1ãã¹ã«ããã¡ã³ããŒã«å¯ŸããŠã¯ããäºãã®é³å£°ãå±ã仿§ãšãªã£ãŠããç¹ãæããããŸãã Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªã äžè¿°ã®Do Not Disturbã¢ãŒããFocusãšãªã¢ãå©çšããŠããã¡ã³ããŒã¯ãåºæ¬çã«ã¯äŒè©±ã§ããªãïŒããããªãç¶æ
ã§ãã ãã®ãããããããå©çšããŠããã¡ã³ããŒã«ã¯è©±ããããªãããã«ããŸãããããšããã®ããã¡ãã®ã«ãŒã«ã§ãã ïŒDo Not Disturbã¢ãŒãã«é¢ããŠã¯ãããã話ããããŠãé³å£°ã¯å±ããŸãããïŒ Teamsãšã®äœ¿ãåãã¯ïŒ åŒç€Ÿã§ã¯ãã³ãã¥ãã±ãŒã·ã§ã³ããŒã«ãšããŠTeamsãå
šç€Ÿå©çšããŠããŸãã ãã®ãããçŸåšã¯ä»¥äžã®ãããªç®å®ã§TeamsãšGatherã䜿ãåããŠããŸãã ãšã¯ããããããŸã§ç®å®ã§ãã®ã§ãTeamsã§éè«äŒãéå¬ãããŠããããããŸãã Teams Gather ä»éšçœ²ã®ç€Ÿå¡ãåå ããæã¡åãã äºåã«ã¹ã±ãžã¥ãŒã«ãããæã¡åãã ç¹å®ã®Teamsãã£ãã«ã«çŽã¥ããæã¡åãã å·Šèšä»¥å€ã®æã¡åãã ã¡ãã£ãšãã確èªãäŸé Œ éè« ã¢ã¯ã»ã¹å¶éã¯ã©ãããŠããïŒ ç§ãã¡ã®ã¹ããŒã¹ã§ã¯ã Guest List Only Access æ©èœãå©çšããã¢ã¯ã»ã¹å¶éã宿œããŠããŸãã ãã®æ©èœã¯ ãã¯ã€ããªã¹ã æ¹åŒã«ãªã£ãŠããŠãGatherã«ãã°ã€ã³ããŠãããŠãŒã¶ã®äžã§ãããªã¹ãã«ã¡ãŒã«ã¢ãã¬ã¹ãç»é²ãããŠãããŠãŒã¶ã®ã¿ã«ã¹ããŒã¹ãžã®ã¢ã¯ã»ã¹ãèš±å¯ã§ããŸãã ããã«ãããäžãäžã¹ããŒã¹ã®URLãæŒããŠããŸã£ãå Žåã«ããéšå€è
ãã¹ããŒã¹ã«äŸµå
¥ããããšã®ãªãããã«èšå®ããŠããŸãã å°å
¥ããŠã¿ãŠã©ãïŒ è¯ãã£ãç¹ å€§ãã以äžã®3ç¹ãæããããŸãã ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ãã¡ãã£ãšè©±ãããããããããããªã£ã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã ã°ã«ãŒãéãè¶
ããã³ãã¥ãã±ãŒã·ã§ã³ãå¢å ãã ç§ãæå±ããŠãããœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®éçºæè¡ã°ã«ãŒãã§ã¯ãæ¯æã°ã«ãŒãå
ã§æäŒïŒãã€ãªãŒ ã¹ã¿ã³ãã¢ãã ïŒã宿œããŠããŸãã ãã®ãããGatherå°å
¥ä»¥åã«ããã°ã«ãŒãå
ã®ã¡ã³ããŒã«å¯ŸããŠã¯ãæäŒã®äžã§ã³ãã¥ãã±ãŒã·ã§ã³ããšãæ©äŒããããŸããã ããããªãããé£ã®ã°ã«ãŒãã§ããã»ãã¥ãªãã£ã°ã«ãŒãã®æ¹ã
ãšã¯ãããŸããŸåãæã¡åããã«åå ããããšãã£ãããšããªãéãã¯ãéè«ã¯ãããæšæ¶ã亀ããæ©äŒãããããŸããã§ããã ãã¡ãããTeamsã§å人ãã£ãããéããªã©ããã°äŒè©±èªäœã¯ã§ãããã®ã®ãç¹ã«æ¥åäžã®èŠä»¶ããªãã®ã«å人ãã£ãããéãã®ã¯ãªããªãããŒãã«ãé«ããã®ã§ãã ãã®ãããã¯èªè
ã®çãããå
±æããŠããã ããã®ã§ã¯ãªãããšæããŸãã ãã®ãããªç¶æ
ã ã£ãã®ã§ãããGatherå°å
¥åŸã¯ãè¿ãã«ãã瀟å¡ã«ãéçºæè¡ã°ã«ãŒããã»ãã¥ãªãã£ã°ã«ãŒãé¢ä¿ãªãæšæ¶ãããããšãã£ãæ©äŒãçãŸããŸããã ããããå°ãéè«ãããŠã¿ããããšãã£ãããšããããŸãã ããã«ãã£ãŠãã»ãã¥ãªãã£ã°ã«ãŒãã®æ¹ã
ãšãäžå®ã®äº€æµããã€ããšãã§ããå人çã«ã¯èŠªè¿æãæ¹§ãããããªã£ããšæããŠããŸãã ããã¯ããããŸã§ã®Teamsã§ã¯çºçãåŸãªãã£ãã³ãã¥ãã±ãŒã·ã§ã³ã ãšæããŸãã ãã¡ãã£ãšè©±ãããããããããããªã£ã åé
ãšé¡äŒŒããŠããŸããããã¡ãã£ãšè©±ããããããšãã£ãããšããããããªã£ããšæããŸãã äŸãã°ããã¡ãã£ãšããèŠãŠãã ããïŒããã¡ãã£ãšããæããŠãã ããïŒããšãã£ãèŠä»¶ããªã¢ã«ã¿ã€ã ã§çžæã«äŒããããããããã£ããã§ããåããããããå¿«é©ãªããšãå€ãã§ãã ãŸããæ¥åã®ééæéãªã©ã«çªçºçã«å§ãŸããåšãã«ãã人ã«ãäŒè©±å
容ãå°ãèãããŠããã®ãŸãŸãµãã£ãšäŒè©±ã«åå ã§ããããããªåœ¢ã®éè«ãçºçãããããªããŸããã ããã®æéã«éè«ããŸãããïŒããšã¹ã±ãžã¥ãŒãªã³ã°ããŠè¡ãéè«ããã¡ããéè«ã§ã¯ãããšæãã®ã§ãããå人çã«ã¯ããã«æ¯ã¹ãŠããèªç¶ãªåœ¢ã§ã®éè«ãã§ããŠãããªãšæããŠããŸãã äžéå
¥ç€Ÿã®äžå®ãç·©åã§ãã ã«ãžã¥ã¢ã«é¢è«ã äžéæ¡çš 颿¥ã®éã«Gatherã®å®éã®æ§åããèŠããããšã奜åå¿ãããã ããããšãå€ãã§ãã ãªã¢ãŒãã¯ãŒã¯ãäž»äœãšãªã£ããã®æä»£ã®è»¢è·ã¯ããã¯ãã³ãã¥ãã±ãŒã·ã§ã³é¢ã«äžå®ãèŠããæ¹ãå€ããšããããšã§ããã®ãããªåãçµã¿ã§å°ãã§ããã®äžå®ãç·©åã§ããã°ãšæããŸãã ãªããå®éã«æè¿ã®ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒã®äžéå
¥ç€Ÿã¡ã³ããŒããã¯ä»¥äžã®ãããªå£°ãããã ããŠããŸãã äœãäžæç¹ã確èªãããæ°å転æããããããããšãã«Gatherã«ãã°ã€ã³ããæã空ããŠããããªæ¹ã«è©±ããããŠãããTeamsã®ãã£ããã§ã¯çžæã®å¿ãããåãããªããããç»é¢äžã§åããææ¡ã§ããã®ã¯è¯ããšæãã ãšã«ããäœæ°ãªãäŒè©±ããããããéè«ããã®æµãã§äœããå°ããããã äžäººã§åããŠããã®ã§ã¯ãªããããŒã ã§åããŠããæèŠãããŠãã ç©çãªãã£ã¹ã§ããã°èªç¶ãšç®ã«ãããè³ã«ããã§ãããæ
å ±ã«è¿ãæ
å ±ãåŸããããäŸãã°ãã¹ããŒã¿ã¹ãå±
å Žæã確èªããããšã§åšå²ã®æ¹ã®ç¶æ³ãåããããŸããèªåãäŒè©±ããããšããåšå²ã®æ¹å士ã®äŒè©±ãèãããšã§ãæ¥åç¶æ³ã人ãšãªããªã©ãç¥ãããšãã§ããã 課é¡ç¹ 8ææ«ããå°å
¥ããŠãçŸåš2ãæã»ã©çµéããŸãããã課é¡ãšããŠã¯å€§ãã以äžã®3ç¹ãæããããŸãã Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã Do Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ãããšé³å£°ãæŒãã ããã¯Gatherã®èª²é¡ç¹ãšããããã¯TeamsãšGatherã䜵çšããéã®èª²é¡ç¹ã§ãããGatherã«ãã°ã€ã³ããç¶æ
ã§Teamsã§ã®äŒè°ã«åå ãããšãDo Not Disturbã¢ãŒãããã€ã¯ãªãã«ããªãéããäŒè°ã®é³å£°ãGatheräžã«æµããŠããŸããªã¹ã¯ããããŸãã ç¬ãèšãåãæµãã ããªãã°åé¡ãªãïŒåãæµããŠããŸã£ãåŽã®æ°åçã«ã¯åé¡ã§ããâŠç¬ïŒã®ã§ãããäŒè°ã®é³å£°ã®å Žåãå
容ã«ãã£ãŠã¯æ©å¯æ
å ±ãæŒããŠããŸãããããããã®ã§ã泚æãå¿
èŠã§ãã ãã®ãããäžãäžDo Not Disturbã¢ãŒãããã€ã¯ãªãã«ãå¿ããŠããŸã£ããšãã®ããã«ããäŒè°äžã¯Focusãšãªã¢ã«ç§»åããããšãæšå¥šããŠããŸãã Gatherçšã®ãã£ã¹ãã¬ã€ããªããšäœ¿ãã«ãã æ®æ®µã®æ¥åãããŒãPCã®ãã£ã¹ãã¬ã€ã®ã¿ã§è¡ã£ãŠããå ŽåãGatherã®ç»é¢ãåžžã«ã¯è¡šç€ºããŠãããŸããã ãã®ãããGatherãå©çšããŠããŠãããŸãããŒãã£ã«ãªãã£ã¹æããªããçªç¶è©±ãããããããšãã³ãã£ãŠããŸãããšãã£ã声ããããŸããã 話ããããã人ããã°ã€ã³ããŠãããšã¯éããªã çŸç¶ã§ã¯ç¹ã«ãã°ã€ã³ã匷å¶ããŠããªãããã話ããããã人ããã°ã€ã³ããŠãããšã¯éããŸããã ãšã¯ããããã¡ãã¯éçšã®ã«ãŒã«æ¬¡ç¬¬ã§ã¯ããã®ã§ãä»åŸæ€èšã®äœå°ã¯ãããŸãã ãããã« æ¬èšäºã§ã¯ãX ã€ãããŒã·ã§ã³ æ¬éšå
ã®éšçœ²ã«Gatherãå°å
¥ãã話ã«ã€ããŠç°¡åã«ãŸãšããŸããã ã³ãã¥ãã±ãŒã·ã§ã³æŽ»æ§åã«æçšã§ãèŠãç®ã坿ããç¡æã§å§ããããããŒãã£ã«ãªãã£ã¹ãµãŒãã¹Gatherããã²çããã®éšçœ²ã«ãå°å
¥ããŠã¿ãŸãããïŒ Gatherã®åãè
ã¿ããã«ãªã£ãŠããŸããŸããããæåŸãŸã§ãèªã¿ããã ããæ¬åœã«ããããšãããããŸããïŒ ç§ãã¡ã¯åãäºæ¥éšã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãïŒ ãå
¥ç€ŸçŽåŸã®å³ãå·Šãåãããªãç¶æ
ã§ã®ãªã³ã©ã€ã³ã³ãã¥ãã±ãŒã·ã§ã³ãã«å¯Ÿããäžå®ãGatherã§ç·©åã§ããã°ãšèããŠããŸãã®ã§ããèå³ã®ããæ¹ããã²ãå¿åãåŸ
ã¡ããŠããŸãïŒ ãã«ãµã€ã¯ã«ãšã³ãžã㢠å·çïŒ @miyazawa.hibiki ãã¬ãã¥ãŒïŒ @yamada.y ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã®åªæã·ãªãŒãºãä»åã¯ã çŸå°å¥³ã¢ãã¡ ç»æ¹åçã§ãã 以åã çŸå°å¥³åçç·š ã®èšäºãæžããã®ã§ããããã®ãšãã®åé¡ç¹ã¯ãåçŸæ§ãäœãããšã§ãããèªåãçŽåŸããçµæãåºãã®ã«ãäœååããªãã©ã€ãç¹°ãè¿ããªããã°ãªããªãã£ãã®ã§ãã ä»åã®æ¹åçã§ã¯ãåã«ããããçŸå°å¥³ãåºåããã ããªãã8å²ã»ã©ã®ç¢ºçã§åºåã§ããŸããããããããã®æèŠã¯äººããããã§ãããåã®æèŠã ãšãããããã®ç¢ºçã ãšããããšã§ãã å³éžããç»åã玹ä»ããŸãããå³éžãšèšã£ãŠãäžã€ã®ç»åãéžã¶ã®ã«10åã¯ããã£ãŠããŸããã v2.1 çŸå°å¥³ã¢ãã¡ç» ããããããã°ã埡芧ãã ããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š æ¹ååªæ anime of tsundere moe kawaii beautiful pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render digital painting extremely detailed sharp focus cinematic postprocessing åºåçµæ ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã æ¹ååªæ 暪é·ãã³ããŒ&ããŒã¹ãçš anime of tsundere moe kawaii beautiful girlãpixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render æ¹è¡ç anime of tsundere moe kawaii beautiful girl pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render æ¹è¯åçïŒå¯Ÿæ¯ããããããã«é çªã¯å
¥ãæ¿ããŸããïŒ japanese anime of a beaultiful girl pixiv light novel fantasy costume fantasy background beautiful composition cinematic lighting ray tracing 8k digital painting extremely detailed sharp focus cinematic postprocessing anime of ååã¯ã japanese ãã€ããŠããã®ã§ãããæ¯èŒãã¹ããããšããã japanese ãã€ããªãã»ãããè¯ãçµæãåºãŸããã tsundere moe kawaii beautiful ååã¯ã beautiful ã ãã ã£ãã®ã§ããã tsundere moe kawaii ãè¶³ããšãã¡ãã£ãšãçµæãè¯ããªãããã§ããããã¯ãæã蟌ã¿ããããããŸããã pixiv niconico artstation deviantart newgrounds tumblr ä»åãäžçªå¹æã倧ããã£ããäœé¢šãã®éšåã§ãã ååã¯ã pixiv ã« light novel ãè¶³ããŠããŸããã pixiv ã ãã ãšå¹æãå°ãªãã£ãããã§ãããããã light novel ãããã»ã©å¹æã®ãªãåªæã ã£ãã®ã§ãåºåçµæã®ã¯ãªãªãã£ããã©ãã©ã§ããã ä»åã广ã®èãã£ã light novel ãåãã niconico artstation deviantart newgrounds tumblr ãè¶³ãããšãããåºåçµæãããªãå®å®ããããã«ãªããŸããã ã€ã©ã¹ãã®æçš¿ãµã€ãã®äžã§ããã¹ãããŠçµæãè¯ãã£ããµã€ããæ®ããŸããã fantasy scene fantasy composition fantasy lighting ååã¯ã costume ãš background ãæå®ããŠããŸããããããã¯ãã£ãã scene ã§è¯ãããã§ãã scene ã composition ã lighting ã®ä¿®é£Ÿèªã fantasy ã«å€ããçµæãæãåããã¡ã³ã¿ ãžãŒ ãªé°å²æ°ã«ãªããŸããã修食èªã¯å¥œã¿ã§å€ããŠãã ããã PlayStation5 octane render ååã¯ã ray tracing 8k ãæå®ããŠããŸãããã octane render ã®ã»ããããã©ããªã¢ã«ã«ãã广ãé«ãããã§ãã PlayStation5 ã¯ããã©ããªã¢ã«ã«ããã ãã§ãªããã¢ãã¡ã®ã¯ãªãªãã£ã«ãè¯ã广ãäžããããã§ãã digital painting extremely detailed sharp focus cinematic postprocessing extremely detailed ãã€ãããšäººç©ã倧ããæç»ããããã©ã³ã¹ã®æªãæ§å³ã«ãªã確çãå¢ããã®ã§ãä»åã¯åããŸããã digital painting sharp focus cinematic postprocessing ã¯ããã¹ãããçµæãæç¢ºãªå¹æãæããããªãã£ãããåããŸããã åºåçµæ åºåçµæã¯ãã¡ãã«ãªããŸãã ãŸãšã çŸå°å¥³ã¢ãã¡ ç»ã®åºåçµæã®å®å®æ§ïŒåçŸæ§ïŒãæ¹åããã®ã¯ãã€ã©ã¹ãã®æçš¿ãµã€ãã®æ°ãå¢ãããããšã§ãããã¿ãªããããæ¯é詊ããŠãã ããã æ¬¡åã¯ã v1.5 çŸå°å¥³ç»æ€èšŒ ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã®åªæã·ãªãŒãºãä»åã¯ã çŸå°å¥³ã¢ãã¡ ç»æ¹åçã§ãã 以åã çŸå°å¥³åçç·š ã®èšäºãæžããã®ã§ããããã®ãšãã®åé¡ç¹ã¯ãåçŸæ§ãäœãããšã§ãããèªåãçŽåŸããçµæãåºãã®ã«ãäœååããªãã©ã€ãç¹°ãè¿ããªããã°ãªããªãã£ãã®ã§ãã ä»åã®æ¹åçã§ã¯ãåã«ããããçŸå°å¥³ãåºåããã ããªãã8å²ã»ã©ã®ç¢ºçã§åºåã§ããŸããããããããã®æèŠã¯äººããããã§ãããåã®æèŠã ãšãããããã®ç¢ºçã ãšããããšã§ãã å³éžããç»åã玹ä»ããŸãããå³éžãšèšã£ãŠãäžã€ã®ç»åãéžã¶ã®ã«10åã¯ããã£ãŠããŸããã v2.1 çŸå°å¥³ã¢ãã¡ç» ããããããã°ã埡芧ãã ããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š æ¹ååªæ anime of tsundere moe kawaii beautiful pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render digital painting extremely detailed sharp focus cinematic postprocessing åºåçµæ ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã æ¹ååªæ 暪é·ãã³ããŒ&ããŒã¹ãçš anime of tsundere moe kawaii beautiful girlãpixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render æ¹è¡ç anime of tsundere moe kawaii beautiful girl pixiv niconico artstation deviantart newgrounds tumblr fantasy scene fantasy composition fantasy lighting PlayStation5 octane render æ¹è¯åçïŒå¯Ÿæ¯ããããããã«é çªã¯å
¥ãæ¿ããŸããïŒ japanese anime of a beaultiful girl pixiv light novel fantasy costume fantasy background beautiful composition cinematic lighting ray tracing 8k digital painting extremely detailed sharp focus cinematic postprocessing anime of ååã¯ã japanese ãã€ããŠããã®ã§ãããæ¯èŒãã¹ããããšããã japanese ãã€ããªãã»ãããè¯ãçµæãåºãŸããã tsundere moe kawaii beautiful ååã¯ã beautiful ã ãã ã£ãã®ã§ããã tsundere moe kawaii ãè¶³ããšãã¡ãã£ãšãçµæãè¯ããªãããã§ããããã¯ãæã蟌ã¿ããããããŸããã pixiv niconico artstation deviantart newgrounds tumblr ä»åãäžçªå¹æã倧ããã£ããäœé¢šãã®éšåã§ãã ååã¯ã pixiv ã« light novel ãè¶³ããŠããŸããã pixiv ã ãã ãšå¹æãå°ãªãã£ãããã§ãããããã light novel ãããã»ã©å¹æã®ãªãåªæã ã£ãã®ã§ãåºåçµæã®ã¯ãªãªãã£ããã©ãã©ã§ããã ä»åã广ã®èãã£ã light novel ãåãã niconico artstation deviantart newgrounds tumblr ãè¶³ãããšãããåºåçµæãããªãå®å®ããããã«ãªããŸããã ã€ã©ã¹ãã®æçš¿ãµã€ãã®äžã§ããã¹ãããŠçµæãè¯ãã£ããµã€ããæ®ããŸããã fantasy scene fantasy composition fantasy lighting ååã¯ã costume ãš background ãæå®ããŠããŸããããããã¯ãã£ãã scene ã§è¯ãããã§ãã scene ã composition ã lighting ã®ä¿®é£Ÿèªã fantasy ã«å€ããçµæãæãåããã¡ã³ã¿ ãžãŒ ãªé°å²æ°ã«ãªããŸããã修食èªã¯å¥œã¿ã§å€ããŠãã ããã PlayStation5 octane render ååã¯ã ray tracing 8k ãæå®ããŠããŸãããã octane render ã®ã»ããããã©ããªã¢ã«ã«ãã广ãé«ãããã§ãã PlayStation5 ã¯ããã©ããªã¢ã«ã«ããã ãã§ãªããã¢ãã¡ã®ã¯ãªãªãã£ã«ãè¯ã广ãäžããããã§ãã digital painting extremely detailed sharp focus cinematic postprocessing extremely detailed ãã€ãããšäººç©ã倧ããæç»ããããã©ã³ã¹ã®æªãæ§å³ã«ãªã確çãå¢ããã®ã§ãä»åã¯åããŸããã digital painting sharp focus cinematic postprocessing ã¯ããã¹ãããçµæãæç¢ºãªå¹æãæããããªãã£ãããåããŸããã åºåçµæ åºåçµæã¯ãã¡ãã«ãªããŸãã ãŸãšã çŸå°å¥³ã¢ãã¡ ç»ã®åºåçµæã®å®å®æ§ïŒåçŸæ§ïŒãæ¹åããã®ã¯ãã€ã©ã¹ãã®æçš¿ãµã€ãã®æ°ãå¢ãããããšã§ãããã¿ãªããããæ¯é詊ããŠãã ããã æ¬¡åã¯ã v1.5 çŸå°å¥³ç»æ€èšŒ ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãXïŒã¯ãã¹ïŒ ã€ãããŒã·ã§ã³ æ¬éš ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒ ã®å±±äžã§ãã ä»åã¯ã Amazon Web Services ( AWS )ã®Application LoadBalancer(ALB)ãšgRPCãåãããŠå©çšããå Žåã®æ¹æ³ã«ã€ããŠç޹ä»ããŸãã ALBã§gRPCã®ãµããŒããããŠå©çšã§ããå Žæãåºããã€ã€ãããŸãã https://aws.amazon.com/jp/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/ ä»åã¯ããã®ALBãšgRPCãçµã¿åãããŠå©çšããå Žåã®èšå®æ¹æ³ãšãã®æ³šæç¹ã«ã€ããŠç޹ä»ããŸãã ã¿ãŒã²ããã°ã«ãŒãã®äœææã«æ³šæãå¿
èŠ gRPCã¯åºæ¬çã«éåžžã® HTTPS éä¿¡ã§ãããã®ããALBèªäœã¯æ®æ®µéãã®èšå®ã§äœæããŠåé¡ãããŸãããgRPCãå©çšããå Žåã¯ã¿ãŒã²ããã°ã«ãŒããäœæãããšãã«ã以äžã®ããã«Protocolã«ã¯ HTTPS ãæå®ããProtocol Versionã®èšå®ãgRPCã«å€æŽããããšã§å©çšã§ããŸãã ãã«ã¹ãã§ãã¯çšã®ãµãŒãã¹ãå®è£
ããŠãã ãã«ã¹ãã§ãã¯ã®é
ç®ã§ã¯ãgRPCã®ãµãŒãã¹ãåŒã³ã ãèšå®ãå¿
èŠã§ãããã®ãããå®éã«ALBãå©çšããããšãæ³å®ããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³åŽã§ãã«ã¹ãã§ãã¯çšã®ãµãŒãã¹ãå®è£
ããå¿
èŠããããŸãã gRPCã®KeepAliveæ©èœãå©çšã§ããªã gRPCã«ã¯éä¿¡ãéçµ¶ãããªãããã®KeepAliveã®æ©èœãå®è£
ãããŠããŸããããããALBã¯ãã®ãã±ãããå°éããŠãåŸç¶ã®ãµãŒãã¹ã«ã¯ãããæž¡ããªãå®è£
ãšãªã£ãŠããããã§ãããã®ãããgRPCã®æ©èœã®keepAliveæ©èœãèšå®ããŠãéä¿¡ãåæãããŠããŸããŸãã ãã®åé¡ã¯ãUnary RPCã®ããã«çæéã§çµäºãããµãŒãã¹ã§ããã°åé¡ã«ãªããªãããšãå€ãã§ãããããBidirecional Streaming RPCã®ããã«ã³ãã¯ã·ã§ã³ãä¿ã£ããŸãŸéä¿¡ãè¡ãå Žåã«éä¿¡ã®éäžã§åæãããå ŽåããããŸãããã®ãããããã°ã©ã åŽã§ãµãŒãåãã«å®æçã«ãã±ãããéãç¶ãããããªå·¥å€«ãè¡ãå¿
èŠããããŸãã ãã¹ã«ããã¢ã¯ã»ã¹å¶éãªã©ã®æ¹æ³ã¯åé¡ãªãå©çšã§ããŸã gRPCã¯éåžžã®HTTP/2ã® ãããã³ã« ãå©çšããŠãããéåžžã®HTTPã§å®æœããã¢ã¯ã»ã¹å
(path)ã«ããå¶éãªã©ã宿œã§ããŸãã /<packageå>.<Serviceå>/<rpcå> ãšãã£ãpathãæå®ããããšã§ç¹å®ã®RPCã ãã¢ã¯ã»ã¹ãæåŠã§ããŸãã 以äžã®å³ã®ããã«èšå®ããããšã§ã /foo.Bar/Baz ãšããRPCã ã503ãšã©ãŒãè¿ãããã«èšå®ã§ããŸãã èªèšŒãªã©ã®èšå®ãåæ§ã«è¡ãããšãå¯èœã§ãã ãŸãšã ä»åã¯ã AWS ã®ALBãšgRPCãçµã¿åãããéã«æ³šæãå¿
èŠã«ãªãç¹ã«ã€ããŠãŸãšããŸããããã ããkeepAliveãå©çšã§ããªãã£ããããã«ã¹ãã§ãã¯å°çšã®ãµãŒãã¹ãå¿
èŠãšãªããªã©ãããã€ã泚æç¹ããããŸããåé¡ãªãå©çšã§ããŸããã ããããã¯ãç©æ¥µçã«gRPCãæŽ»çšããŠããããã§ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @yamashita.tsuyoshi ãã¬ãã¥ãŒïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
ããã«ã¡ã¯ãXïŒã¯ãã¹ïŒ ã€ãããŒã·ã§ã³ æ¬éš ãœãããŠã§ã¢ãã¶ã€ã³ã»ã³ã¿ãŒ ã®å±±äžã§ãã ä»åã¯ã Amazon Web Services ( AWS )ã®Application LoadBalancer(ALB)ãšgRPCãåãããŠå©çšããå Žåã®æ¹æ³ã«ã€ããŠç޹ä»ããŸãã ALBã§gRPCã®ãµããŒããããŠå©çšã§ããå Žæãåºããã€ã€ãããŸãã https://aws.amazon.com/jp/blogs/aws/new-application-load-balancer-support-for-end-to-end-http-2-and-grpc/ ä»åã¯ããã®ALBãšgRPCãçµã¿åãããŠå©çšããå Žåã®èšå®æ¹æ³ãšãã®æ³šæç¹ã«ã€ããŠç޹ä»ããŸãã ã¿ãŒã²ããã°ã«ãŒãã®äœææã«æ³šæãå¿
èŠ gRPCã¯åºæ¬çã«éåžžã® HTTPS éä¿¡ã§ãããã®ããALBèªäœã¯æ®æ®µéãã®èšå®ã§äœæããŠåé¡ãããŸãããgRPCãå©çšããå Žåã¯ã¿ãŒã²ããã°ã«ãŒããäœæãããšãã«ã以äžã®ããã«Protocolã«ã¯ HTTPS ãæå®ããProtocol Versionã®èšå®ãgRPCã«å€æŽããããšã§å©çšã§ããŸãã ãã«ã¹ãã§ãã¯çšã®ãµãŒãã¹ãå®è£
ããŠãã ãã«ã¹ãã§ãã¯ã®é
ç®ã§ã¯ãgRPCã®ãµãŒãã¹ãåŒã³ã ãèšå®ãå¿
èŠã§ãããã®ãããå®éã«ALBãå©çšããããšãæ³å®ããå Žåã¯ãã¢ããªã±ãŒã·ã§ã³åŽã§ãã«ã¹ãã§ãã¯çšã®ãµãŒãã¹ãå®è£
ããå¿
èŠããããŸãã gRPCã®KeepAliveæ©èœãå©çšã§ããªã gRPCã«ã¯éä¿¡ãéçµ¶ãããªãããã®KeepAliveã®æ©èœãå®è£
ãããŠããŸããããããALBã¯ãã®ãã±ãããå°éããŠãåŸç¶ã®ãµãŒãã¹ã«ã¯ãããæž¡ããªãå®è£
ãšãªã£ãŠããããã§ãããã®ãããgRPCã®æ©èœã®keepAliveæ©èœãèšå®ããŠãéä¿¡ãåæãããŠããŸããŸãã ãã®åé¡ã¯ãUnary RPCã®ããã«çæéã§çµäºãããµãŒãã¹ã§ããã°åé¡ã«ãªããªãããšãå€ãã§ãããããBidirecional Streaming RPCã®ããã«ã³ãã¯ã·ã§ã³ãä¿ã£ããŸãŸéä¿¡ãè¡ãå Žåã«éä¿¡ã®éäžã§åæãããå ŽåããããŸãããã®ãããããã°ã©ã åŽã§ãµãŒãåãã«å®æçã«ãã±ãããéãç¶ãããããªå·¥å€«ãè¡ãå¿
èŠããããŸãã ãã¹ã«ããã¢ã¯ã»ã¹å¶éãªã©ã®æ¹æ³ã¯åé¡ãªãå©çšã§ããŸã gRPCã¯éåžžã®HTTP/2ã® ãããã³ã« ãå©çšããŠãããéåžžã®HTTPã§å®æœããã¢ã¯ã»ã¹å
(path)ã«ããå¶éãªã©ã宿œã§ããŸãã /<packageå>.<Serviceå>/<rpcå> ãšãã£ãpathãæå®ããããšã§ç¹å®ã®RPCã ãã¢ã¯ã»ã¹ãæåŠã§ããŸãã 以äžã®å³ã®ããã«èšå®ããããšã§ã /foo.Bar/Baz ãšããRPCã ã503ãšã©ãŒãè¿ãããã«èšå®ã§ããŸãã èªèšŒãªã©ã®èšå®ãåæ§ã«è¡ãããšãå¯èœã§ãã ãŸãšã ä»åã¯ã AWS ã®ALBãšgRPCãçµã¿åãããéã«æ³šæãå¿
èŠã«ãªãç¹ã«ã€ããŠãŸãšããŸããããã ããkeepAliveãå©çšã§ããªãã£ããããã«ã¹ãã§ãã¯å°çšã®ãµãŒãã¹ãå¿
èŠãšãªããªã©ãããã€ã泚æç¹ããããŸããåé¡ãªãå©çšã§ããŸããã ããããã¯ãç©æ¥µçã«gRPCãæŽ»çšããŠããããã§ããã ç§ãã¡ã¯åãããŒã ã§åããŠããã仲éãæ¢ããŠããŸããä»åã®ãšã³ããªã§ç޹ä»ãããããªä»äºã«èå³ã®ããæ¹ããå¿åãåŸ
ã¡ããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã å·çïŒ @yamashita.tsuyoshi ãã¬ãã¥ãŒïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable DiffusionïŒãšããããdiffusersïŒã§TPUïŒJAX / FlaxïŒã䜿ã£ã䞊åå®è¡ããŒãžã§ã³ããªãªãŒã¹ãããã®ã§ãæ©é詊ããŠã¿ãŸããã ãªãªãžãã«ã®Notebook ã¯ãã¡ãã åãäœã£ãNotebook ã¯ãã¡ãã ä»åã¯ãTPUã䜿ãã®ã§ã Google Colabã«ç¹åããŠããŸããèªåã§ïŒããè©Šãæ¹ã¯ãã¡ãã¥ãŒã®Edit -> Notebook settingsã§TPUã䜿ãããã«èšå®ããŠãã ããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ããŒã huggingfaceã«ãã°ã€ã³ pipelineãšparamsã®äœæ show_images()ã®å®çŸ© show_images()ã®å®è¡ ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« 次ã®ããã«ããŠå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã !pip install --upgrade jax jaxlib !pip install flax transformers ftfy !pip install diffusers==0.5.1 å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ããŒã 次ã®ããã«ããŠå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸãã import jax.tools.colab_tpu jax.tools.colab_tpu.setup_tpu('tpu_driver_20221011') import jax import numpy as np import jax import jax.numpy as jnp from pathlib import Path from jax import pmap from flax.jax_utils import replicate from flax.training.common_utils import shard from PIL import Image from IPython.display import display import random from huggingface_hub import notebook_login from diffusers import FlaxStableDiffusionPipeline huggingfaceã«ãã°ã€ã³ huggingfaceã«ãã°ã€ã³ããŸãã ãŸã ãhuggingfaceã® ããŒã¯ ã³ãååŸããŠããªãå Žåã¯ã huggingface ã§ãŠãŒã¶ãŒç»é²ãè¡ãã ããŒã¯ ã³ãååŸããŠãã ããã if not (Path.home()/'.huggingface'/'token').exists(): notebook_login() pipelineãšparamsã®äœæ 次ã®ããã«ããŠãpipelineãšparamsãäœæããŸãã pipeline, params = FlaxStableDiffusionPipeline.from_pretrained( "CompVis/stable-diffusion-v1-4", revision="bf16", dtype=jnp.bfloat16, ) show_images()ã®å®çŸ© åªæãããç»åãçæããããã®é¢æ°ãäœæããŸããçŸç¶ã®Colabã§ã¯ãTPUã¯ã8åãŸã§äžŠåå®è¡ã§ããŸãã def show_images(prompt): seed = random.randrange(1000000) rng = jax.random.PRNGKey(seed) rng = jax.random.split(rng, jax.device_count()) p_params = replicate(params) prompt = [prompt] * jax.device_count() prompt_ids = pipeline.prepare_inputs(prompt) prompt_ids = shard(prompt_ids) images = pipeline(prompt_ids, p_params, rng, jit=True)[0] images = images.reshape((jax.device_count(), ) + images.shape[-3:]) images = pipeline.numpy_to_pil(images) for image in images: display(image) ãªãªãžãã«ã®Notebookã§ã¯ã8ã€ã®ç»åãGridã«ãªã£ãŠããŠãåå¥ã«ããŠã³ããŒãã§ããªãã®ã§ãåå¥ã«ããŠã³ããŒãã§ããããã«ããŠã¿ãŸããã show_images()ã®å®è¡ 次ã®åªæã§ãshow_images()ãå®è¡ããŠã¿ãŸããã prompt = "illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k" show_images(prompt) ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k é²èЧçšåªæïŒæ¹è¡çïŒ illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k ç»ååºåçµæ å
šãéžå¥ããŠããªããåºåããããã®ãŸãŸã®ç»åã§ãã ãŸãšã Stable Diffusionã8ã€ã®ç»åãåæçæã§ããããã«ãªã£ãã®ã¯ãç»æçã§ã¯ãªãã§ãããããããããTPUã䜿ãã®ã§ã GPU ã䜿ãåã£ãŠããŠã䜿ãããšãã§ããã®ã§ããå®éåã¯ã Google Colab Proã® GPU ãçŸåšäœ¿ãåã£ãŠããŸã£ãŠããŠã GPU ã䜿ãããšã¯ã§ããªãã®ã§ãããTPUã¯äœ¿ããŸããã 远èš: ãã®åŸããã£ãšããéã«ãTPUã®ç¡ææ åã䜿ãåã£ãŠããŸããŸããã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable DiffusionïŒãšããããdiffusersïŒã§TPUïŒJAX / FlaxïŒã䜿ã£ã䞊åå®è¡ããŒãžã§ã³ããªãªãŒã¹ãããã®ã§ãæ©é詊ããŠã¿ãŸããã ãªãªãžãã«ã®Notebook ã¯ãã¡ãã åãäœã£ãNotebook ã¯ãã¡ãã ä»åã¯ãTPUã䜿ãã®ã§ã Google Colabã«ç¹åããŠããŸããèªåã§ïŒããè©Šãæ¹ã¯ãã¡ãã¥ãŒã®Edit -> Notebook settingsã§TPUã䜿ãããã«èšå®ããŠãã ããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ããŒã huggingfaceã«ãã°ã€ã³ pipelineãšparamsã®äœæ show_images()ã®å®çŸ© show_images()ã®å®è¡ ãŸãšã 仲éåé Stable Diffusionã®å
šã³ã³ãã³ã å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ã¹ããŒã« 次ã®ããã«ããŠå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ã¹ããŒã«ããŸãã !pip install --upgrade jax jaxlib !pip install flax transformers ftfy !pip install diffusers==0.5.1 å¿
èŠãªã¢ãžã¥ãŒã«ã®ã€ã³ããŒã 次ã®ããã«ããŠå¿
èŠãªã¢ãžã¥ãŒã«ãã€ã³ããŒãããŸãã import jax.tools.colab_tpu jax.tools.colab_tpu.setup_tpu('tpu_driver_20221011') import jax import numpy as np import jax import jax.numpy as jnp from pathlib import Path from jax import pmap from flax.jax_utils import replicate from flax.training.common_utils import shard from PIL import Image from IPython.display import display import random from huggingface_hub import notebook_login from diffusers import FlaxStableDiffusionPipeline huggingfaceã«ãã°ã€ã³ huggingfaceã«ãã°ã€ã³ããŸãã ãŸã ãhuggingfaceã® ããŒã¯ ã³ãååŸããŠããªãå Žåã¯ã huggingface ã§ãŠãŒã¶ãŒç»é²ãè¡ãã ããŒã¯ ã³ãååŸããŠãã ããã if not (Path.home()/'.huggingface'/'token').exists(): notebook_login() pipelineãšparamsã®äœæ 次ã®ããã«ããŠãpipelineãšparamsãäœæããŸãã pipeline, params = FlaxStableDiffusionPipeline.from_pretrained( "CompVis/stable-diffusion-v1-4", revision="bf16", dtype=jnp.bfloat16, ) show_images()ã®å®çŸ© åªæãããç»åãçæããããã®é¢æ°ãäœæããŸããçŸç¶ã®Colabã§ã¯ãTPUã¯ã8åãŸã§äžŠåå®è¡ã§ããŸãã def show_images(prompt): seed = random.randrange(1000000) rng = jax.random.PRNGKey(seed) rng = jax.random.split(rng, jax.device_count()) p_params = replicate(params) prompt = [prompt] * jax.device_count() prompt_ids = pipeline.prepare_inputs(prompt) prompt_ids = shard(prompt_ids) images = pipeline(prompt_ids, p_params, rng, jit=True)[0] images = images.reshape((jax.device_count(), ) + images.shape[-3:]) images = pipeline.numpy_to_pil(images) for image in images: display(image) ãªãªãžãã«ã®Notebookã§ã¯ã8ã€ã®ç»åãGridã«ãªã£ãŠããŠãåå¥ã«ããŠã³ããŒãã§ããªãã®ã§ãåå¥ã«ããŠã³ããŒãã§ããããã«ããŠã¿ãŸããã show_images()ã®å®è¡ 次ã®åªæã§ãshow_images()ãå®è¡ããŠã¿ãŸããã prompt = "illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k" show_images(prompt) ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k é²èЧçšåªæïŒæ¹è¡çïŒ illustration of beaultiful girl detailed beautiful face detailed perfect pupil of eyes detailed mouth detailed shoulders detailed chest highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition cinematic lighting ray tracing 8k ç»ååºåçµæ å
šãéžå¥ããŠããªããåºåããããã®ãŸãŸã®ç»åã§ãã ãŸãšã Stable Diffusionã8ã€ã®ç»åãåæçæã§ããããã«ãªã£ãã®ã¯ãç»æçã§ã¯ãªãã§ãããããããããTPUã䜿ãã®ã§ã GPU ã䜿ãåã£ãŠããŠã䜿ãããšãã§ããã®ã§ããå®éåã¯ã Google Colab Proã® GPU ãçŸåšäœ¿ãåã£ãŠããŸã£ãŠããŠã GPU ã䜿ãããšã¯ã§ããªãã®ã§ãããTPUã¯äœ¿ããŸããã 远èš: ãã®åŸããã£ãšããéã«ãTPUã®ç¡ææ åã䜿ãåã£ãŠããŸããŸããã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®å
šã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã·ãªãŒãºãä»åã®ããŒã㯠ããã«ã®å¡ ã®ã€ã©ã¹ãã§ãã ä»åã¯å»ºç©ã®ã€ã©ã¹ãã®åªæãåŠã³ãŸãããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š steampunk illustration of babel tower highly detailed shot from above steampunk illustration of babel tower shot from below steampunk illustration of babel tower highly detailed steampunk illustration of illuminated babel tower highly detailed top shot from below night ãŸãšã 仲éåé Stable Diffusionã®éå»ã³ã³ãã³ã steampunk illustration of babel tower highly detailed shot from above steampunkã¯ã èžæ°æ©é¢ ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ã®äžçãå¬åããåªæã§ãã詳ããç¥ãããæ¹ã¯ èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 ãåç
§ããŠãã ããã steampunkã®ã€ã©ã¹ãã¯ãéåžžã®ã€ã©ã¹ããããã¯ãªãªãã£ãé«ãããšãå€ããããæç»å¯Ÿè±¡ãsteampunkã®äžç芳ã«ãã£ãŠãããšãã¯ãç©æ¥µçã«å©çšããŸãããã babel towerã ããã«ã®å¡ ã§ãã highly detailedã§ãæç»å¯Ÿè±¡ãè©³çŽ°ã«æç»ããŸãã shot from aboveã§ãäžã®æ¹ããæç»ããŸãã 建ç©ã¯ãäžè¬çã«å°å³ã§ããããšãå€ãïŒ ããã«ã®å¡ ã¯æŽŸæã§ããïŒã®ã§ã建ç©ãæç»ãããšãã¯ãéåžžãšéãã¢ã³ã°ã«ãéžã³ãŸãããã人ã¯èŠãããšã®ãªããã®ã«å¿æ¹ãããŸãã ç¹ã«é«ã建ç©ãäžããæç»ããããã«ã¯ãã«ã¡ã©ã空äžã«é
眮ããå¿
èŠããããŸããã»ãšãã©ã®äººã«ãšã£ãŠãªã¢ã«ã«äœéšããããšã®ãªãã¢ã³ã°ã«ã§ãã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower highly detailed shot from above artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower highly detailed shot from above artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ steampunkãã€ããŠããªãéåžžã®ã€ã©ã¹ã ãããè¯ãã§ããããã ããããåºåããã®ã«ãäœååããã©ã€ããŸããã steampunk illustration of babel tower shot from below shot from belowã§äžããæç»ããŸããhighly detailedããªãããšã«æ³šç®ããŠãã ãããäžããæç»ããå Žåãhighly detailedããããšã ããã«ã®å¡ ã«è¿ã¥ããããŠãããŸãæç»ã§ããŸããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower shot from below artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower shot from below artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ shot from belowã§å¡ãæç»ããå Žåã空ãæç»ãããŸãã空ã®ã¯ãªãªãã£ãé«ãããšããã§ãã¯ãã€ã³ãã«å
¥ããŠãã ããã highly detailed shot from belowã®åºåçµæ highly detailedã§ ããã«ã®å¡ ã«è¿ã¥ããããŠããã®ã§ãshot from belowã®åªæã®å¹æãã»ãšãã©ãªãããšãããããŸãã steampunk illustration of babel tower highly detailed ä»åºŠã¯ãshot from aboveãshot from belowããªããéåžžã¢ã³ã°ã«ã®ã€ã©ã¹ããèŠãŠã¿ãŸãããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ highly detailed shot from belowã®ãã®ãšã»ãšãã©åãã§ããããããéåžžã®ã¢ã³ã°ã«ã§ãã shot from aboveãšshot from belowã®ç»åãšæ¯èŒããŠãã¢ã³ã°ã«ã®éãã宿ããŸãããã steampunk illustration of illuminated babel tower highly detailed top shot from below night å¿çšããã£ãŠãããŸãããã 建ç©ã«illuminatedã§ç
§æãåœãŠãŠãæéãå€ïŒnightïŒã«ããŠã¿ãŸãããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of illuminated babel tower highly detailed shot from below night artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of illuminated babel tower highly detailed shot from below night artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ ãŸãšã ä»åã¯ã建ç©ã®ã€ã©ã¹ããéå±ãªãã®ã«ããªãããã«ãshot from aboveïŒäžããæç»ïŒãshot from belowïŒäžããæç»ïŒã®åªæãåŠã³ãŸããã æ¬¡åã¯ã çŸå°å¥³ã¢ãã¡ç»æ¹åçç·š ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®éå»ã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã·ãªãŒãºãä»åã®ããŒã㯠ããã«ã®å¡ ã®ã€ã©ã¹ãã§ãã ä»åã¯å»ºç©ã®ã€ã©ã¹ãã®åªæãåŠã³ãŸãããã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š steampunk illustration of babel tower highly detailed shot from above steampunk illustration of babel tower shot from below steampunk illustration of babel tower highly detailed steampunk illustration of illuminated babel tower highly detailed top shot from below night ãŸãšã 仲éåé Stable Diffusionã®éå»ã³ã³ãã³ã steampunk illustration of babel tower highly detailed shot from above steampunkã¯ã èžæ°æ©é¢ ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ã®äžçãå¬åããåªæã§ãã詳ããç¥ãããæ¹ã¯ èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 ãåç
§ããŠãã ããã steampunkã®ã€ã©ã¹ãã¯ãéåžžã®ã€ã©ã¹ããããã¯ãªãªãã£ãé«ãããšãå€ããããæç»å¯Ÿè±¡ãsteampunkã®äžç芳ã«ãã£ãŠãããšãã¯ãç©æ¥µçã«å©çšããŸãããã babel towerã ããã«ã®å¡ ã§ãã highly detailedã§ãæç»å¯Ÿè±¡ãè©³çŽ°ã«æç»ããŸãã shot from aboveã§ãäžã®æ¹ããæç»ããŸãã 建ç©ã¯ãäžè¬çã«å°å³ã§ããããšãå€ãïŒ ããã«ã®å¡ ã¯æŽŸæã§ããïŒã®ã§ã建ç©ãæç»ãããšãã¯ãéåžžãšéãã¢ã³ã°ã«ãéžã³ãŸãããã人ã¯èŠãããšã®ãªããã®ã«å¿æ¹ãããŸãã ç¹ã«é«ã建ç©ãäžããæç»ããããã«ã¯ãã«ã¡ã©ã空äžã«é
眮ããå¿
èŠããããŸããã»ãšãã©ã®äººã«ãšã£ãŠãªã¢ã«ã«äœéšããããšã®ãªãã¢ã³ã°ã«ã§ãã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower highly detailed shot from above artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower highly detailed shot from above artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ steampunkãã€ããŠããªãéåžžã®ã€ã©ã¹ã ãããè¯ãã§ããããã ããããåºåããã®ã«ãäœååããã©ã€ããŸããã steampunk illustration of babel tower shot from below shot from belowã§äžããæç»ããŸããhighly detailedããªãããšã«æ³šç®ããŠãã ãããäžããæç»ããå Žåãhighly detailedããããšã ããã«ã®å¡ ã«è¿ã¥ããããŠãããŸãæç»ã§ããŸããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower shot from below artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower shot from below artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ shot from belowã§å¡ãæç»ããå Žåã空ãæç»ãããŸãã空ã®ã¯ãªãªãã£ãé«ãããšããã§ãã¯ãã€ã³ãã«å
¥ããŠãã ããã highly detailed shot from belowã®åºåçµæ highly detailedã§ ããã«ã®å¡ ã«è¿ã¥ããããŠããã®ã§ãshot from belowã®åªæã®å¹æãã»ãšãã©ãªãããšãããããŸãã steampunk illustration of babel tower highly detailed ä»åºŠã¯ãshot from aboveãshot from belowããªããéåžžã¢ã³ã°ã«ã®ã€ã©ã¹ããèŠãŠã¿ãŸãããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of babel tower highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of babel tower highly detailed artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ highly detailed shot from belowã®ãã®ãšã»ãšãã©åãã§ããããããéåžžã®ã¢ã³ã°ã«ã§ãã shot from aboveãšshot from belowã®ç»åãšæ¯èŒããŠãã¢ã³ã°ã«ã®éãã宿ããŸãããã steampunk illustration of illuminated babel tower highly detailed top shot from below night å¿çšããã£ãŠãããŸãããã 建ç©ã«illuminatedã§ç
§æãåœãŠãŠãæéãå€ïŒnightïŒã«ããŠã¿ãŸãããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of illuminated babel tower highly detailed shot from below night artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of illuminated babel tower highly detailed shot from below night artstation deviantart concept art award winning fantasy scene fantasy composition fantasy lighting åºåçµæ ãŸãšã ä»åã¯ã建ç©ã®ã€ã©ã¹ããéå±ãªãã®ã«ããªãããã«ãshot from aboveïŒäžããæç»ïŒãshot from belowïŒäžããæç»ïŒã®åªæãåŠã³ãŸããã æ¬¡åã¯ã çŸå°å¥³ã¢ãã¡ç»æ¹åçç·š ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®éå»ã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ
ã¯ãã©ãŒããŒïŒ X ã€ãããŒã·ã§ã³ æ¬éšã®å®®æŸ€é¿ã§ãïŒ X ã€ãããŒã·ã§ã³ æ¬éšã§ã¯ãæå¿ã¡ã³ããŒã§è«æèŒªèªäŒãææ¬¡éå¬ããŠããŸãã ïŒè©³çŽ°ã¯ ãã¡ãã®èšäº ããåç
§ãã ããïŒ æ¬èšäºã§ã¯ãç§ãæ
åœããå
æ¥ã®è«æèŒªèªäŒã§ç޹ä»ããè«æã«ã€ããŠãç®æ¡æžãããŒã¹ã§ããããç°¡åã«ãŸãšããŸãïŒ ã©ããªè«æïŒ è«æå
å®¹çŽ¹ä» ç®ç ææ³ å®éšåå è
å®éšã«çšããããã¹ã å®éšæé çµæ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ èå¯ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ éçãšä»åŸã®èª²é¡ çµè« å人çãªææ³ãªã© ãã®è«æã顿ã«éžãã ãã£ãã è«æå
容ã«é¢ã㊠ãŸãšã ã©ããªè«æïŒ æžèªæ
å ±ã¯ä»¥äžã§ãã Anam Ahmad Khan, Sadia Nawaz, Joshua Newn, Ryan M. Kelly, Jason M. Lodge, James Bailey, and Eduardo Velloso. 2022. To type or to speak? The efect of input modality on text understanding during note-taking. In CHI Conference on Human Factors in Computing Systems (CHI â22), April 29-May 5, 2022, New Orleans, LA, USA. ACM , New York, NY, USA, 15 pages. https://doi.org/10.1145/3491102.3501974 äžèšã§èšãã°ãããŒãã®ãšãæ¹ïŒããŒããŒããšé³å£°ã®ã©ã¡ãã§ããŒãããšããïŒãæç« çè§£ã«äžãã圱é¿ã«ã€ããŠæ€èšããè«æã§ãã è«æã®å
šäœåã1æã«ãŸãšããã¹ã©ã€ãããã¡ãã§ãã ãªãããã¡ãã¯ãèœåã¡ãœããããèœåãã©ãŒãããããªã©ãšåŒã°ããè«æã®ãŸãšãæ¹ïŒ åè ïŒãç°¡ç¥åãããã®ã§ãã è«æå
å®¹çŽ¹ä» ããããå®éã«è«æã®å
容ã倧ãŸããªã»ã¯ã·ã§ã³ããšã«ç޹ä»ããŸãã ç®ç 以äžã®ãªãµãŒã㯠ãšã¹ ãã§ã³ïŒä»¥äžãRQïŒãæããã«ããããšãç®çãšããŠããŸãã RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ ææ³ 2ã€ã®ããã¹ãã«å¯ŸããŠããŒããŒããŸãã¯é³å£°ã§ããŒãããšã£ãŠããããããã¹ãã®å
容ã«ã€ããŠã®ç解床ãã¹ãã宿œãããšããå®éšã宿œããŸããã å®éšåå è
å®éšåå è
ã¯ã以äžã®ãããªå±æ§ããã€ããªãŒã¹ãã©ãªã¢ã®å€§åŠé¢ç60åã§ããã 屿§ å
èš³ 幎霢 21ïœ35æ³ïŒå¹³å幎霢27.04æ³ïŒ æ§å¥ ç·æ§31åã女æ§29å æ¯èª è±èª16åãã€ã¿ãªã¢èª3åãäžåœèª15åã ãŠã«ãã¥ãŒèª 4åã ãã³ãã£ãŒèª 5åã ãã«ã·ã£èª 7åã ã·ã³ãã©èª 6åãéåœèª2å åŠæŽ ä¿®å£« 課çšåšç±è
29åãå士課çšåšç±è
31å å®éšã«çšããããã¹ã å®éšã«ã¯ã以äžã®2ã€ã®ããã¹ãã䜿çšããŸããã ãã¬ãŒãã«é¢ããè±èªã®æç« ïŒ792èªïŒ ãã³ãã«é¢ããè±èªã®æç« ïŒ850èªïŒ å®éšæé å®éšã¯ãå
šãŠãªã³ã©ã€ã³ã§ãäžå³ã®ãããªæµãã§å®æœãããŸããã Briefingã»Demo å®éšã®èª¬æ ããŒãããšãæäœã®å®æŒãç·Žç¿ Pre-test ããã¹ãã«é¢ããäºåç¥èãæž¬å®ããããã®ãã¹ã å€è¢éžæåé¡6å 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ Note taking task ããã¹ããèªãã§ããŒãããšãã¿ã¹ã¯ 2ã€ã®Conditionã§ç°ãªãããã¹ããäœ¿çš ãã¬ãŒã ãã³ã 2ã€ã®Conditionã§ç°ãªãå
¥å圢åŒãå©çš ããŒããŒã é³å£° æéå¶éãªã Survey 䞻芳çãªé
ç®ãšããŠä»¥äžãå ±å 確信床 Post-testã§æ£çã§ããèªä¿¡ãã©ãããããããïŒ0ïœ100ïŒ é¢å¿åºŠ ããã¹ãã®å
容ã«ã©ããããé¢å¿ãããŠããïŒ1ïœ7ïŒ é£æåºŠ ããã¹ãã®å
容ãã©ããããé£ãããšæãããïŒ1ïœ7ïŒ Distracting task æå®ãããæ°ãã7ãã€æžç®ããŠããéçšãå ±åããã¿ã¹ã¯ 2åé Condition1ã§ã¯200ãã 200ã193ã186ã⊠Condition2ã§ã¯203ãã 203ã196ã189ã⊠Post-test ããã¹ãã®çè§£åºŠãæž¬å®ããããã®ãã¹ã äºå®åé¡12åïŒå€è¢éžæïŒ 1ã€ã®ã¢ ã€ã㢠ãŠãããïŒã軜èªåè»ã¯ãã®çš®é¡ããã¬ãŒãã䜿ã£ãŠããããããã®æã§ã¯ãã®ãã³ãã䜿ãããŠããããªã©ã®ãââãÃÃã ãã®ãããªåœé¡ã®åäœïŒã«é¢ããåé¡ 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ æšè«åé¡6åïŒå€è¢éžæïŒ 2ã€ä»¥äžã®ã¢ ã€ã㢠ãŠãããã«é¢ããåé¡ 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ Interviewã»Debrief æäœæãªã©ã«é¢ããã€ã³ã¿ãã¥ãŒ å
šäœã®ãŸãšã çµæ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ ããŒããŒãã§ããŒãããšã£ãå Žåãšé³å£°ã§ããŒãããšã£ãå Žåã®Post-testã®æçžŸïŒä»¥äžãæçžŸïŒã®éã«ææå·®ã¯èŠãããŸããã§ããã ããŒãã®ãšãæ¹ïŒããŒããŒããé³å£°ïŒãšåé¡çš®å¥ïŒäºå®åé¡ãæšè«åé¡ïŒã®éã®äº€äºäœçšãææã§ããããã®ãããäžå¯Ÿæ¯èŒã宿œãããšããã以äžã®çµæãåŸãããŸããã ããŒãã®ãšãæ¹ã«é¢ã㊠ããŒããŒãïŒäºå®åé¡ã®æçžŸãæšè«åé¡ã®æçžŸãããææã«é«ã é³å£°ïŒäºå®åé¡ãšæšè«åé¡ã®æçžŸã®éã«ææå·®ãªã åé¡çš®å¥ã«é¢ã㊠äºå®åé¡ïŒããŒããŒããšé³å£°ã®æçžŸã®éã«ææå·®ãªã æšè«åé¡ïŒé³å£°ã®æçžŸãããŒããŒãã®æçžŸãããææã«é«ã RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ãšã£ãããŒãã«å«ãŸãã㢠ã€ã㢠ãŠãããã®æ°ããããŒããŒãã§ãšã£ãããŒãã«å«ãŸãã㢠ã€ã㢠ãŠãããã®æ°ãããææã«å€ãããšãåãããŸããã é³å£°ã§ãšã£ãããŒãã«å«ãŸãããšã©ãã¬ãŒã·ã§ã³ïŒäŸã顿šãå人çãªçµéšïŒã®æ°ããããŒããŒãã§ãšã£ãããŒãã«å«ãŸãããšã©ãã¬ãŒã·ã§ã³ã®æ°ãããææã«å€ãããšãåãããŸããã ããŒãã®ãšãæ¹ãæçžŸã«äžããçŽæ¥å¹æã¯ææã§ããããšãåãããŸããã 㢠ã€ã㢠ãŠãããã®æ°ãåªä»ãšããŠããŒãã®ãšãæ¹ãæçžŸã«äžããéæ¥å¹æã¯ææã§ããããšãåãããŸããã ãšã©ãã¬ãŒã·ã§ã³ã®æ°ãåªä»ãšããŠããŒãã®ãšãæ¹ãæçžŸã«äžããéæ¥å¹æã¯ææã§ã¯ãªãããšãåãããŸããã RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ ããŒããŒãã§ããŒãããšã£ãå Žåãšé³å£°ã§ããŒãããšã£ãå Žåã®ã¡ã¿çè§£ã®æ£ç¢ºæ§ïŒç¢ºä¿¡åºŠãšæçžŸã®å·®ã®çµ¶å¯Ÿå€ïŒã®éã«ææå·®ã¯èŠãããŸããã§ããã RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ åå è
ã®æèŠãã°ã«ãŒãã³ã°ããçµæã以äžã®ããã«6ã«ããŽãªãŒã®å©ç¹ãš5ã«ããŽãªãŒã®èª²é¡ãæµ®ãã³äžãããŸããã å©ç¹ 簡䟿ãªå
¥å ç¬éçãªæèã®èšé² å
±åçãªããŒãäœæ ãªããŒãµã«ãš ãšã³ã³ãŒã å
容ãžã®æ³šæ èœåçãªèª¬æãšåæ èª²é¡ é²é³ãšåç ç·šé æ€çŽ¢ãšèŠçŽã æ§é åãšã¹ã±ãã å
±æç©ºéã§ã®å©çš èå¯ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãããšã¯ãããã¹ãã®æ
å ±ã«åºã¥ãæšè«ãæå©ãããæ
å ±ãæšªæããŠã¢ ã€ã㢠ãã³ã³ã»ãããçµã³ã€ããŠããå¯èœæ§ã瀺åãããŸããã æšè«åé¡ã§ã¯è€æ°ã®ã¢ ã€ã㢠ãŠããããçµã³ã€ããå¿
èŠããããããã¹ãã«å¯ŸããæŠå¿µçãªçè§£ã詊ãããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšã£ãããŒãã«é¢ããŠããé³å£°ã§ãšã£ãããŒãã¯ããå€ãã®ã¢ ã€ã㢠ãŠããããè°è«ã§ããâããŒãããšããªããããã¹ãã«ã€ããŠããè¯ãæšè«ãè¡ããâããã¹ãã«å¯ŸããæŠå¿µççè§£ãæ·±ãŸãâæšè«åé¡ã®æçžŸãé«ããªãããšããäžé£ã®æµãã瀺åãããŸããã RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãéã¯äººç§°çŽç€ºè©ïŒäººç§°ä»£åè©ïŒãå€ã䜿çšãããããä»®æ³ã®èŽè¡ã«è©±ãããããããªã瀟äŒçé¢äžãé«ãå
容ã«ãªãå¯èœæ§ã瀺åãããŸããã 瀟äŒçé¢äžã®é«ããããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ã«ç¹ããå¯èœæ§ã瀺åãããŸããã RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãããšã¯ãããã¹ãã«å¯ŸããæŠå¿µççè§£ãå¢å ãããŠããåŠç¿ããã©ãŒãã³ã¹ã®ç¥èŠã«ã¯åœ±é¿ãäžããªãå¯èœæ§ã瀺åãããŸããã RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ ä»®æ³ã®èŽè¡ã«è©±ããããããšã§è±ããªè¡šçŸãçãŸããå¯èœæ§ã瀺åãããŸããã ããã¹ããèªã¿ãªããåæã«ããŒãããšãããããåŠç¿å
容èªäœã«æ³šæãåããããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ããŒãããšãããšã®ã¡ãªããã¯ãããŒããèŠçŽããšããããããŒãããšããšãã®æ¹ãããæç¢ºã«ãªãå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšãããŒãã®å©äŸ¿æ§ã¯ããžã¿ã«åŠç¿ç°å¢ã§çºæ®ãããããå¯èœæ§ã瀺åãããŸããã éçãšä»åŸã®èª²é¡ å®éšã®éçãšãããããèããããä»åŸæ€èšãã¹ã課é¡ã¯ä»¥äžã®ãšããã§ãã éç èª²é¡ å®éšã«äœ¿çšããããã¹ããããè€éïŒé£æåºŠãé«ãïŒã ãšèªèãããŠãã ããè€éã§ãªãããã¹ãã«å¯ŸããŠäžè¬åããããã®èª¿æ» ããŒãã®ãšãæ¹ãæç« çè§£ã«äžããçæçãªåœ±é¿ã調æ»ããã«çãŸã£ã ããé·æçãªåœ±é¿ã®èª¿æ» ããŒããŒããšé³å£°ã§èŠçŽãã«èŠããæéãç°ãªã亀絡å åãšãªããããããããããPost-testã®åã«ããŒããèŠçŽãæéãèšå®ããªãã£ã å
¥åïŒããŒããŒãïŒé³å£°ïŒãšåºåïŒæç« ïŒé³å£°ïŒã®çµã¿åããã«ããå®éš 倧åŠé¢çã察象ãšããŠç®¡çãããç°å¢ã§å®æœãã ç°ãªãåå è
éå£ããããçŸå®çãªç°å¢ã§ã®å®éš é³å£°ã§ãšãããŒãã¯ç©ºéçãªæ§é åãå¿
èŠãšããªãæ
å ±ã®ã¿ããèšé²ã§ããªã æ°åŒã ãã€ã³ãããã ãªã©ãèŠèŠçãªè¡šçŸãæå¹ãªå Žåã®èª¿æ» çµè« ããŒãããšãéã®å
¥å圢åŒãããŒããŒãããé³å£°ãžå€æŽããããšã§ãããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ãè¡ããå¯èœæ§ã瀺åãããŸããã åºæ¬çãªç¥èãåŸãããšãç®çã§ããã°ãããŒããŒããšé³å£°ã©ã¡ãã§ããŒãããšã£ãå Žåãåããããªããã©ãŒãã³ã¹ã瀺ãå¯èœæ§ã瀺åãããŸããã æšè«ããããšã«ãã£ãŠããæ·±ãæŠå¿µãçè§£ããããšãç®çã§ããã°ãé³å£°ã§ããŒãããšãæ¹ããã广çã§ããå¯èœæ§ã瀺åãããŸããã ããŒããŒããšé³å£°ã©ã¡ãã§ããŒãããšã£ãå Žåããæç« çè§£ã«ãããã¡ã¿çè§£ã®å€æã«ã¯åçšåºŠã®å¹æãããããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšãããŒãã¯ããžã¿ã«ããã¹ãã®æŠå¿µçãªçè§£ãå¯èœã«ãããããããžã¿ã«åŠç¿ç°å¢ã«çµã¿èŸŒããå¯èœæ§ã瀺åãããŸããã å人çãªææ³ãªã© ãã®è«æã顿ã«éžãã ãã£ãã ãã®è«æã顿ã«éžãã çç±ãšããŠã¯ãã¿ã€ãã«ã«æ¹ããããšããã®ã倧ããã§ãã ãšããã®ããç§ã¯æè²é¢ä¿ã®äºæã«åŒ·ãèå³ããã£ãŠããŸãã ãŸããç§ã¯åŠçæä»£ïŒã»ãã®2幎ååã§ããïŒãé³ã鳿¥œã«é¢ããç ç©¶ãããŠããŸããã ãã®ããããããŒãããšãããšããéšåãç§ã®æè²ã»ã³ãµãŒã«ããé³å£°ãã®éšåãç§ã®é³ã»é³æ¥œã»ã³ãµãŒã«åŒã£ãããã ã¢ãã¹ã ã©ã¯ ãã«ç®ãéããŠãé¢çœãããªå
容ã ã£ãã®ã§ãä»åã®è«æèŒªèªäŒã®é¡æãšããŸããã è«æå
容ã«é¢ã㊠ããããå
žåçãªIMRAD圢åŒïŒ åè ïŒã ã£ãããšããããè«æã®æ§æãåãããããã£ãã§ãã ãŸãããªãã»ã©ç¢ºãã«ãšæããéšåãå€ãã£ãã§ãã äŸãã°ãé³å£°ã§ããŒãããšãå Žåã¯ããã¹ãããèŠç·ãéžãããã«ããŒãããšãããé³å£°ã§ãšã£ãããŒãã¯ç·šéãæ€çŽ¢ãèŠçŽãã«èª²é¡ãããããªã©ã¯ã確ãã«ããã ãªããšããæèŠã§ããã çåç¹ãšããŠãã瀟äŒçé¢äžã®é«ããããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ã«ç¹ããããšããã®ã¯ãæ¥æ¬èªã®å Žåã§ãåæ§ãªã®ãæ°ã«ãªããŸããã ããã¯ãæ¥æ¬èªã¯è±èªãšéãäž»èªãç®çèªãçç¥ã§ãããããçç±ãšããŠèå¯ãããŠãã人称çŽç€ºè©ãããŸãç»å Žããªãã®ã§ã¯ããšæã£ãããã§ãã ãŸãšã æ¬èšäºã§ã¯ãè«æèŒªèªäŒã§ç§ã玹ä»ããè«æã«ã€ããŠç°¡åã«ãŸãšããŸããã è«æèŒªèªäŒã¯ãç¥èŠã®ã€ã³ããããšã¢ãŠãããããäž¡è
ã®åã䌞ã°ããåãçµã¿ã§ãã®ã§ãçããã®äŒç€Ÿãéšçœ²ãªã©ã§ã宿œããŠã¿ãŠã¯ãããã§ããããïŒ æåŸãŸã§ãèªã¿ããã ããæ¬åœã«ããããšãããããŸããïŒ ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšåéããŠããè·çš®ã¯ä»¥äžã§ãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã è«æèŒªèªäŒãã¯ãããšããåçš®å匷äŒã«æ°è»œã«åå ã§ãããããªç°å¢ã§åãããšã«èå³ã®ããçæ§ããã²ãå¿åãåŸ
ã¡ããŠããŸãïŒ å·çïŒ @miyazawa.hibiki ãã¬ãã¥ãŒïŒ @yamashita.tsuyoshi ïŒ Shodo ã§å·çãããŸãã ïŒ
ã¯ãã©ãŒããŒïŒ X ã€ãããŒã·ã§ã³ æ¬éšã®å®®æŸ€é¿ã§ãïŒ X ã€ãããŒã·ã§ã³ æ¬éšã§ã¯ãæå¿ã¡ã³ããŒã§è«æèŒªèªäŒãææ¬¡éå¬ããŠããŸãã ïŒè©³çŽ°ã¯ ãã¡ãã®èšäº ããåç
§ãã ããïŒ æ¬èšäºã§ã¯ãç§ãæ
åœããå
æ¥ã®è«æèŒªèªäŒã§ç޹ä»ããè«æã«ã€ããŠãç®æ¡æžãããŒã¹ã§ããããç°¡åã«ãŸãšããŸãïŒ ã©ããªè«æïŒ è«æå
å®¹çŽ¹ä» ç®ç ææ³ å®éšåå è
å®éšã«çšããããã¹ã å®éšæé çµæ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ èå¯ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ éçãšä»åŸã®èª²é¡ çµè« å人çãªææ³ãªã© ãã®è«æã顿ã«éžãã ãã£ãã è«æå
容ã«é¢ã㊠ãããã« ã©ããªè«æïŒ æžèªæ
å ±ã¯ä»¥äžã§ãã Anam Ahmad Khan, Sadia Nawaz, Joshua Newn, Ryan M. Kelly, Jason M. Lodge, James Bailey, and Eduardo Velloso. 2022. To type or to speak? The efect of input modality on text understanding during note-taking. In CHI Conference on Human Factors in Computing Systems (CHI â22), April 29-May 5, 2022, New Orleans, LA, USA. ACM , New York, NY, USA, 15 pages. https://doi.org/10.1145/3491102.3501974 äžèšã§èšãã°ãããŒãã®ãšãæ¹ïŒããŒããŒããšé³å£°ã®ã©ã¡ãã§ããŒãããšããïŒãæç« çè§£ã«äžãã圱é¿ã«ã€ããŠæ€èšããè«æã§ãã è«æã®å
šäœåã1æã«ãŸãšããã¹ã©ã€ãããã¡ãã§ãã ãªãããã¡ãã¯ãèœåã¡ãœããããèœåãã©ãŒãããããªã©ãšåŒã°ããè«æã®ãŸãšãæ¹ïŒ åè ïŒãç°¡ç¥åãããã®ã§ãã è«æå
å®¹çŽ¹ä» ããããå®éã«è«æã®å
容ã倧ãŸããªã»ã¯ã·ã§ã³ããšã«ç޹ä»ããŸãã ç®ç 以äžã®ãªãµãŒã㯠ãšã¹ ãã§ã³ïŒä»¥äžãRQïŒãæããã«ããããšãç®çãšããŠããŸãã RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ ææ³ 2ã€ã®ããã¹ãã«å¯ŸããŠããŒããŒããŸãã¯é³å£°ã§ããŒãããšã£ãŠããããããã¹ãã®å
容ã«ã€ããŠã®ç解床ãã¹ãã宿œãããšããå®éšã宿œããŸããã å®éšåå è
å®éšåå è
ã¯ã以äžã®ãããªå±æ§ããã€ããªãŒã¹ãã©ãªã¢ã®å€§åŠé¢ç60åã§ããã 屿§ å
èš³ 幎霢 21ïœ35æ³ïŒå¹³å幎霢27.04æ³ïŒ æ§å¥ ç·æ§31åã女æ§29å æ¯èª è±èª16åãã€ã¿ãªã¢èª3åãäžåœèª15åã ãŠã«ãã¥ãŒèª 4åã ãã³ãã£ãŒèª 5åã ãã«ã·ã£èª 7åã ã·ã³ãã©èª 6åãéåœèª2å åŠæŽ ä¿®å£« 課çšåšç±è
29åãå士課çšåšç±è
31å å®éšã«çšããããã¹ã å®éšã«ã¯ã以äžã®2ã€ã®ããã¹ãã䜿çšããŸããã ãã¬ãŒãã«é¢ããè±èªã®æç« ïŒ792èªïŒ ãã³ãã«é¢ããè±èªã®æç« ïŒ850èªïŒ å®éšæé å®éšã¯ãå
šãŠãªã³ã©ã€ã³ã§ãäžå³ã®ãããªæµãã§å®æœãããŸããã Briefingã»Demo å®éšã®èª¬æ ããŒãããšãæäœã®å®æŒãç·Žç¿ Pre-test ããã¹ãã«é¢ããäºåç¥èãæž¬å®ããããã®ãã¹ã å€è¢éžæåé¡6å 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ Note taking task ããã¹ããèªãã§ããŒãããšãã¿ã¹ã¯ 2ã€ã®Conditionã§ç°ãªãããã¹ããäœ¿çš ãã¬ãŒã ãã³ã 2ã€ã®Conditionã§ç°ãªãå
¥å圢åŒãå©çš ããŒããŒã é³å£° æéå¶éãªã Survey 䞻芳çãªé
ç®ãšããŠä»¥äžãå ±å 確信床 Post-testã§æ£çã§ããèªä¿¡ãã©ãããããããïŒ0ïœ100ïŒ é¢å¿åºŠ ããã¹ãã®å
容ã«ã©ããããé¢å¿ãããŠããïŒ1ïœ7ïŒ é£æåºŠ ããã¹ãã®å
容ãã©ããããé£ãããšæãããïŒ1ïœ7ïŒ Distracting task æå®ãããæ°ãã7ãã€æžç®ããŠããéçšãå ±åããã¿ã¹ã¯ 2åé Condition1ã§ã¯200ãã 200ã193ã186ã⊠Condition2ã§ã¯203ãã 203ã196ã189ã⊠Post-test ããã¹ãã®çè§£åºŠãæž¬å®ããããã®ãã¹ã äºå®åé¡12åïŒå€è¢éžæïŒ 1ã€ã®ã¢ ã€ã㢠ãŠãããïŒã軜èªåè»ã¯ãã®çš®é¡ããã¬ãŒãã䜿ã£ãŠããããããã®æã§ã¯ãã®ãã³ãã䜿ãããŠããããªã©ã®ãââãÃÃã ãã®ãããªåœé¡ã®åäœïŒã«é¢ããåé¡ 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ æšè«åé¡6åïŒå€è¢éžæïŒ 2ã€ä»¥äžã®ã¢ ã€ã㢠ãŠãããã«é¢ããåé¡ 4ã€ã®æ£çåè£ïŒâI donât knowâã®èš5æ Interviewã»Debrief æäœæãªã©ã«é¢ããã€ã³ã¿ãã¥ãŒ å
šäœã®ãŸãšã çµæ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ ããŒããŒãã§ããŒãããšã£ãå Žåãšé³å£°ã§ããŒãããšã£ãå Žåã®Post-testã®æçžŸïŒä»¥äžãæçžŸïŒã®éã«ææå·®ã¯èŠãããŸããã§ããã ããŒãã®ãšãæ¹ïŒããŒããŒããé³å£°ïŒãšåé¡çš®å¥ïŒäºå®åé¡ãæšè«åé¡ïŒã®éã®äº€äºäœçšãææã§ããããã®ãããäžå¯Ÿæ¯èŒã宿œãããšããã以äžã®çµæãåŸãããŸããã ããŒãã®ãšãæ¹ã«é¢ã㊠ããŒããŒãïŒäºå®åé¡ã®æçžŸãæšè«åé¡ã®æçžŸãããææã«é«ã é³å£°ïŒäºå®åé¡ãšæšè«åé¡ã®æçžŸã®éã«ææå·®ãªã åé¡çš®å¥ã«é¢ã㊠äºå®åé¡ïŒããŒããŒããšé³å£°ã®æçžŸã®éã«ææå·®ãªã æšè«åé¡ïŒé³å£°ã®æçžŸãããŒããŒãã®æçžŸãããææã«é«ã RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ãšã£ãããŒãã«å«ãŸãã㢠ã€ã㢠ãŠãããã®æ°ããããŒããŒãã§ãšã£ãããŒãã«å«ãŸãã㢠ã€ã㢠ãŠãããã®æ°ãããææã«å€ãããšãåãããŸããã é³å£°ã§ãšã£ãããŒãã«å«ãŸãããšã©ãã¬ãŒã·ã§ã³ïŒäŸã顿šãå人çãªçµéšïŒã®æ°ããããŒããŒãã§ãšã£ãããŒãã«å«ãŸãããšã©ãã¬ãŒã·ã§ã³ã®æ°ãããææã«å€ãããšãåãããŸããã ããŒãã®ãšãæ¹ãæçžŸã«äžããçŽæ¥å¹æã¯ææã§ããããšãåãããŸããã 㢠ã€ã㢠ãŠãããã®æ°ãåªä»ãšããŠããŒãã®ãšãæ¹ãæçžŸã«äžããéæ¥å¹æã¯ææã§ããããšãåãããŸããã ãšã©ãã¬ãŒã·ã§ã³ã®æ°ãåªä»ãšããŠããŒãã®ãšãæ¹ãæçžŸã«äžããéæ¥å¹æã¯ææã§ã¯ãªãããšãåãããŸããã RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ ããŒããŒãã§ããŒãããšã£ãå Žåãšé³å£°ã§ããŒãããšã£ãå Žåã®ã¡ã¿çè§£ã®æ£ç¢ºæ§ïŒç¢ºä¿¡åºŠãšæçžŸã®å·®ã®çµ¶å¯Ÿå€ïŒã®éã«ææå·®ã¯èŠãããŸããã§ããã RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ åå è
ã®æèŠãã°ã«ãŒãã³ã°ããçµæã以äžã®ããã«6ã«ããŽãªãŒã®å©ç¹ãš5ã«ããŽãªãŒã®èª²é¡ãæµ®ãã³äžãããŸããã å©ç¹ 簡䟿ãªå
¥å ç¬éçãªæèã®èšé² å
±åçãªããŒãäœæ ãªããŒãµã«ãš ãšã³ã³ãŒã å
容ãžã®æ³šæ èœåçãªèª¬æãšåæ èª²é¡ é²é³ãšåç ç·šé æ€çŽ¢ãšèŠçŽã æ§é åãšã¹ã±ãã å
±æç©ºéã§ã®å©çš èå¯ RQ1ïŒããŒãã®ãšãæ¹ã¯æç« çè§£ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãããšã¯ãããã¹ãã®æ
å ±ã«åºã¥ãæšè«ãæå©ãããæ
å ±ãæšªæããŠã¢ ã€ã㢠ãã³ã³ã»ãããçµã³ã€ããŠããå¯èœæ§ã瀺åãããŸããã æšè«åé¡ã§ã¯è€æ°ã®ã¢ ã€ã㢠ãŠããããçµã³ã€ããå¿
èŠããããããã¹ãã«å¯ŸããæŠå¿µçãªçè§£ã詊ãããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšã£ãããŒãã«é¢ããŠããé³å£°ã§ãšã£ãããŒãã¯ããå€ãã®ã¢ ã€ã㢠ãŠããããè°è«ã§ããâããŒãããšããªããããã¹ãã«ã€ããŠããè¯ãæšè«ãè¡ããâããã¹ãã«å¯ŸããæŠå¿µççè§£ãæ·±ãŸãâæšè«åé¡ã®æçžŸãé«ããªãããšããäžé£ã®æµãã瀺åãããŸããã RQ2ïŒããŒãã®ãšãæ¹ã¯ããŒãã®å
容ã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãéã¯äººç§°çŽç€ºè©ïŒäººç§°ä»£åè©ïŒãå€ã䜿çšãããããä»®æ³ã®èŽè¡ã«è©±ãããããããªã瀟äŒçé¢äžãé«ãå
容ã«ãªãå¯èœæ§ã瀺åãããŸããã 瀟äŒçé¢äžã®é«ããããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ã«ç¹ããå¯èœæ§ã瀺åãããŸããã RQ3ïŒããŒãã®ãšãæ¹ã¯ã¡ã¿çè§£ã®å€æã«ã©ã®ãããªåœ±é¿ãäžãããïŒ é³å£°ã§ããŒãããšãããšã¯ãããã¹ãã«å¯ŸããæŠå¿µççè§£ãå¢å ãããŠããåŠç¿ããã©ãŒãã³ã¹ã®ç¥èŠã«ã¯åœ±é¿ãäžããªãå¯èœæ§ã瀺åãããŸããã RQ4ïŒé³å£°ããŒããåŠç¿æŽ»åã«å©çšããããšã®å©ç¹ãšèª²é¡ã¯äœãïŒ ä»®æ³ã®èŽè¡ã«è©±ããããããšã§è±ããªè¡šçŸãçãŸããå¯èœæ§ã瀺åãããŸããã ããã¹ããèªã¿ãªããåæã«ããŒãããšãããããåŠç¿å
容èªäœã«æ³šæãåããããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ããŒãããšãããšã®ã¡ãªããã¯ãããŒããèŠçŽããšããããããŒãããšããšãã®æ¹ãããæç¢ºã«ãªãå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšãããŒãã®å©äŸ¿æ§ã¯ããžã¿ã«åŠç¿ç°å¢ã§çºæ®ãããããå¯èœæ§ã瀺åãããŸããã éçãšä»åŸã®èª²é¡ å®éšã®éçãšãããããèããããä»åŸæ€èšãã¹ã課é¡ã¯ä»¥äžã®ãšããã§ãã éç èª²é¡ å®éšã«äœ¿çšããããã¹ããããè€éïŒé£æåºŠãé«ãïŒã ãšèªèãããŠãã ããè€éã§ãªãããã¹ãã«å¯ŸããŠäžè¬åããããã®èª¿æ» ããŒãã®ãšãæ¹ãæç« çè§£ã«äžããçæçãªåœ±é¿ã調æ»ããã«çãŸã£ã ããé·æçãªåœ±é¿ã®èª¿æ» ããŒããŒããšé³å£°ã§èŠçŽãã«èŠããæéãç°ãªã亀絡å åãšãªããããããããããPost-testã®åã«ããŒããèŠçŽãæéãèšå®ããªãã£ã å
¥åïŒããŒããŒãïŒé³å£°ïŒãšåºåïŒæç« ïŒé³å£°ïŒã®çµã¿åããã«ããå®éš 倧åŠé¢çã察象ãšããŠç®¡çãããç°å¢ã§å®æœãã ç°ãªãåå è
éå£ããããçŸå®çãªç°å¢ã§ã®å®éš é³å£°ã§ãšãããŒãã¯ç©ºéçãªæ§é åãå¿
èŠãšããªãæ
å ±ã®ã¿ããèšé²ã§ããªã æ°åŒã ãã€ã³ãããã ãªã©ãèŠèŠçãªè¡šçŸãæå¹ãªå Žåã®èª¿æ» çµè« ããŒãããšãéã®å
¥å圢åŒãããŒããŒãããé³å£°ãžå€æŽããããšã§ãããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ãè¡ããå¯èœæ§ã瀺åãããŸããã åºæ¬çãªç¥èãåŸãããšãç®çã§ããã°ãããŒããŒããšé³å£°ã©ã¡ãã§ããŒãããšã£ãå Žåãåããããªããã©ãŒãã³ã¹ã瀺ãå¯èœæ§ã瀺åãããŸããã æšè«ããããšã«ãã£ãŠããæ·±ãæŠå¿µãçè§£ããããšãç®çã§ããã°ãé³å£°ã§ããŒãããšãæ¹ããã广çã§ããå¯èœæ§ã瀺åãããŸããã ããŒããŒããšé³å£°ã©ã¡ãã§ããŒãããšã£ãå Žåããæç« çè§£ã«ãããã¡ã¿çè§£ã®å€æã«ã¯åçšåºŠã®å¹æãããããå¯èœæ§ã瀺åãããŸããã é³å£°ã§ãšãããŒãã¯ããžã¿ã«ããã¹ãã®æŠå¿µçãªçè§£ãå¯èœã«ãããããããžã¿ã«åŠç¿ç°å¢ã«çµã¿èŸŒããå¯èœæ§ã瀺åãããŸããã å人çãªææ³ãªã© ãã®è«æã顿ã«éžãã ãã£ãã ãã®è«æã顿ã«éžãã çç±ãšããŠã¯ãã¿ã€ãã«ã«æ¹ããããšããã®ã倧ããã§ãã ãšããã®ããç§ã¯æè²é¢ä¿ã®äºæã«åŒ·ãèå³ããã£ãŠããŸãã ãŸããç§ã¯åŠçæä»£ïŒã»ãã®2幎ååã§ããïŒãé³ã鳿¥œã«é¢ããç ç©¶ãããŠããŸããã ãã®ããããããŒãããšãããšããéšåãç§ã®æè²ã»ã³ãµãŒã«ããé³å£°ãã®éšåãç§ã®é³ã»é³æ¥œã»ã³ãµãŒã«åŒã£ãããã ã¢ãã¹ã ã©ã¯ ãã«ç®ãéããŠãé¢çœãããªå
容ã ã£ãã®ã§ãä»åã®è«æèŒªèªäŒã®é¡æãšããŸããã è«æå
容ã«é¢ã㊠ããããå
žåçãªIMRAD圢åŒïŒ åè ïŒã ã£ãããšããããè«æã®æ§æãåãããããã£ãã§ãã ãŸãããªãã»ã©ç¢ºãã«ãšæããéšåãå€ãã£ãã§ãã äŸãã°ãé³å£°ã§ããŒãããšãå Žåã¯ããã¹ãããèŠç·ãéžãããã«ããŒãããšãããé³å£°ã§ãšã£ãããŒãã¯ç·šéãæ€çŽ¢ãèŠçŽãã«èª²é¡ãããããªã©ã¯ã確ãã«ããã ãªããšããæèŠã§ããã çåç¹ãšããŠãã瀟äŒçé¢äžã®é«ããããå€ãã®ã¢ ã€ã㢠ãŠãããã®è°è«ãšãšã©ãã¬ãŒã·ã§ã³ã«ç¹ããããšããã®ã¯ãæ¥æ¬èªã®å Žåã§ãåæ§ãªã®ãæ°ã«ãªããŸããã ããã¯ãæ¥æ¬èªã¯è±èªãšéãäž»èªãç®çèªãçç¥ã§ãããããçç±ãšããŠèå¯ãããŠãã人称çŽç€ºè©ãããŸãç»å Žããªãã®ã§ã¯ããšæã£ãããã§ãã ãããã« æ¬èšäºã§ã¯ãè«æèŒªèªäŒã§ç§ã玹ä»ããè«æã«ã€ããŠç°¡åã«ãŸãšããŸããã è«æèŒªèªäŒã¯ãç¥èŠã®ã€ã³ããããšã¢ãŠãããããäž¡è
ã®åã䌞ã°ããåãçµã¿ã§ãã®ã§ãçããã®äŒç€Ÿãéšçœ²ãªã©ã§ã宿œããŠã¿ãŠã¯ãããã§ããããïŒ æåŸãŸã§ãèªã¿ããã ããæ¬åœã«ããããšãããããŸããïŒ ç§ãã¡ã¯åãäºæ¥éšã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãïŒ è«æèŒªèªäŒãã¯ãããšããåçš®å匷äŒã«æ°è»œã«åå ã§ãããããªç°å¢ã§åãããšã«èå³ã®ããçæ§ããã²ãå¿åãåŸ
ã¡ããŠããŸãïŒ ãã«ãµã€ã¯ã«ãšã³ãžã㢠å·çïŒ @miyazawa.hibiki ãã¬ãã¥ãŒïŒ @yamashita.tsuyoshi ïŒ Shodo ã§å·çãããŸãã ïŒ
é»éåœéæ
å ±ãµãŒãã¹ ããªãŒãã³ ã€ãããŒã·ã§ã³ ã©ãã® æ¯å康é ã§ãã Stable Diffusionã·ãªãŒãºãä»åã¯ãããããåç©ã®æ¬äººåçšã®åªæã§ãã Stable Diffusionã£ãŠãåç©ã®æ¬äººåãé£ãããã§ããäŸãã°ç¬ã«ããã¹ããããããšããŸãã ãããšæãã€ãã®ã¯ãããªåªæã§ãã illustration of cute dog playing tennis ... åºåçµæ ã³ã¬ãžã£ãã€æãæºèŒã§ãããããããåç©ã®æ¬äººåã«æåããã®ã§ããã®æ¹æ³ã玹ä»ããŸãã Stable Diffusionã®ããããã³ã³ãã³ãã¯ãã¡ãã Waifu Diffusion 1.3.5_80000 v2.1 é髪çŸå¥³åç v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 AUTOMATIC1111 v2.0 çŸå°å¥³ã€ã©ã¹ã v1.5 çŸå°å¥³ç»æ€èšŒ çŸå°å¥³ã¢ãã¡ç»æ¹åç çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š é·ãåªæã¯åãæšãŠãããç·š steampunk illustration of cute anthromorphic åç©å costume steampunkãå€ã anthromorphicãå€ã steampunkãšanthromorphicãå€ã costumeãå€ã steampunkãšcostumeãå€ã ãŸãšã 仲éåé Stable Diffusionã®éå»ã³ã³ãã³ã steampunk illustration of cute anthromorphic åç©å costume ãããåºæ¬åªæã§ãã steampunkã¯ã èžæ°æ©é¢ ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ã®äžç芳ãå¬åããåªæã§ãã詳ããã¯ã èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 ã埡芧ãã ããã äžæè°ãªããšã«ãsteampunkã®äžçã§ã¯ãåç©ãæ¬äººåããããã®ã§ãã anthromorphicã®æå³ã¯æ¬äººåãanthromorphic åç©åã§ãåç©ãæ¬äººåã§ããã°è©±ã¯ç°¡åãªã®ã§ãããäžã®äžããçãã¯ãããŸããã æ¬äººåã«å¿
èŠãª3ã€ç®ã®åªæãcostumeïŒæè£
ïŒãåç©ã人éã«ããã«ã¯ãæãå¿
èŠã ãšããã®ã¯ãæ·±ãäœããæããŸããã ä»åã®åªæïŒæšªé·ãã³ããŒ&ããŒã¹ãçšïŒ steampunk illustration of cute anthromorphic ferret costume highly detailed artstation deviantart concept art digital painting award winning fantasy scene fantasy composition fantasy lighting é²èЧçšåªæïŒæ¹è¡çïŒ steampunk illustration of cute anthromorphic ferret costume highly detailed artstation deviantart concept art digital painting award winning fantasy scene fantasy composition fantasy lighting åºåçµæ ãããã ãã§ã¬ãã ã®æ¬äººåã«æåããŸããã steampunkãå€ã steampunkãåªæããå€ããšã©ããªããå®éšããŠã¿ãŸãããã ä»åã®åºæ¬åªæ illustration of cute anthromorphic ferret costume åºåçµæ ããããããããã§ãããsteampunkãå€ããšæ¬äººåã«å€±æããã±ãŒã¹ãåºãŠããŸãã anthromorphicãå€ã anthromorphicãåªæããå€ããšã©ããªããå®éšããŠã¿ãŸãããã ä»åã®åºæ¬åªæ steampunk illustration of cute ferret costume åºåçµæ ããã£ãããŸãå€ãããªãããããªãã§ããsteampunkã®åªæãæå®ãããŠããå ŽåãanthromorphicããªããŠãããŸãçµæã¯å€ãããŸããããããŸãã«ãæ¬äººåã«å€±æããããšããããããã§ãããããanthromorphicã¯å¹æããªãããšãããšãããªäºã¯ãããŸããã æ¬¡ã®äŸãèŠãŠãã ããã steampunkãšanthromorphicãå€ã ããã§ã¯ãsteampunkãšanthromorphicãäž¡æ¹å€ããŠã¿ãŸãããã ä»åã®åºæ¬åªæ illustration of cute ferret costume åºåçµæ æ¬äººåã«å€±æããŠããŸããŸããã å
çšãsteampunkãªããanthromorphicããã®ãšãã¯ãæ¬äººåã«æåããŠããããšãæãåºããŠãã ãããanthromorphicã¯ç¢ºãã«æ¬äººåã®å¹æããããšããããšã§ãã steampunkã«ãæ¬äººåã®å¹æããããããsteampunkãšçµã¿åããããšãã¯ãanthromorphicãªãã§ãããŸã圱é¿ã¯ãããŸããããåºæ¬ã€ããããã«ããã»ããè¯ãã§ãããã costumeãå€ã ä»åã¯ãcostumeãå€ããŠã¿ãŸãããã ä»åã®åºæ¬åªæ steampunk illustration of cute anthromorphic ferret åºåçµæ costumeãå€ããŠãããããã«æ¬äººåãããŠããŸãããä»åã®çµæã¯äºæ³ããŠãã人ããããããããŸãããsteampunkãšanthromorphicã§ãæ¬äººåã«å¿
èŠãªåªæã®æåãè¶³ããŠãããããcostumeãå€ããŠãã»ãšãã©åœ±é¿ããªãã®ã§ãã ããããcostumeã«æ¬äººåã«å¿
èŠãªåªæã®æåããªãããšãããšãããªäºã¯ãããŸãããæ¬¡ã®äŸãèŠãŠãã ããã steampunkãšcostumeãå€ã ããã§ã¯ãsteampunkãšcostumeãäž¡æ¹å€ããŠã¿ãŸãããã ä»åã®åºæ¬åªæ illustration of cute anthromorphic ferret åºåçµæ å®å
šã«æ¬äººåã«å€±æããŠãŸãããanthromorphicåç¬ã§ã¯ãæ¬äººåã«å¿
èŠãªåªæã®æåãè¶³ããŠããªããšããããšã§ãã ãŸãšã ããããåç©ãæ¬äººåãããšãã®åºæ¬åªæã¯ steampunk illustration of cute anthromorphic åç©å costume ã§ããanthromorphicã®æå³ã¯æ¬äººåã§ãããanthromorphicåç¬ã§æ¬äººåã§ããã»ã©åŒ·ãåªæã§ã¯ãããŸãããsteampunkãcostumeãªã©ã®æ¬äººåæåãæã£ãåªæãšçµã¿åãããŸãããã æ¬¡åã¯ã ããã«ã®å¡ã®ã€ã©ã¹ãç·š ã§ãã 仲éåé ç§ãã¡ã¯åãã°ã«ãŒãã§å
±ã«åããŠããã ãã仲éãåéããŠããŸãã çŸåšã以äžã®ãããªè·çš®ãåéããŠããŸãã ãœãªã¥ãŒã·ã§ã³ã¢ãŒããã¯ã AIãšã³ãžã㢠Stable Diffusionã®éå»ã³ã³ãã³ã 人ç©åçç·š ã¬ã³ãºç·š ç»åã¿ã€ãç·š çŸå°å¥³ã¢ãã¡ç»ç·š çŸå°å¥³åçç·š 女æ§ã€ã©ã¹ãç·š çŸããå€ç©ºãèŠæž¡ãç·ç·š é
æçãªå¥³ã¢ãã¡ç»ïŒãã¥ãŒã³ã¬ã³ããªã³ã°ïŒç·š çŸå°å¥³ãé«ç¢ºçã§åºãåªæç·š é·ãåªæã¯åãæšãŠãããç·š èžæ°æ©é¢ãé«åºŠã«çºéããã¬ãããªã¢ãã¡ïŒã¹ããŒã ãã³ã¯ïŒã®äžç芳線 A as Bã®åªæã«ããç»ååæç·š ããããåç©ã®æ¬äººåç·š ããã«ã®å¡ã®ã€ã©ã¹ãç·š TPUçã®äœ¿ãæ¹ çŸå°å¥³ã¢ãã¡ç»æ¹åç v1.5 çŸå°å¥³ç»æ€èšŒ æ±äº¬ã¿ã¯ãŒã®åç æãçŽåäœå€åœ¢ãã v2.0 çŸå°å¥³ã€ã©ã¹ã v2.1 AUTOMATIC1111 v2.1 çŸå°å¥³ã¢ãã¡ç» v2.1 é髪çŸå¥³åç Waifu Diffusion 1.3.5_80000 å·çïŒ @higa ïŒ Shodo ã§å·çãããŸãã ïŒ