🕌

QwikをDocker環境で構築する

2024/06/21に公開

Qwikとは

Qwikは、新しいタイプのWebフレームワークで、アプリケーションの規模や複雑さに関係なく、瞬時にロードされるWebアプリケーションを提供できます。Qwikを使用することで、どんなに複雑なアプリケーションでも約1kbのJavaScriptで起動し、スケールに応じた一貫したパフォーマンスを実現できます。

動作環境

Rails 7 +MySQLのDocker環境構築 で構築した環境にFrontとして追加します。

環境構築

compose.ymlにFront環境の追加

compose.yml
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      TZ: "Asia/Tokyo"
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db/data:/var/lib/mysql
    ports:
      - '3306:3306'
    restart: always
  api:
    build:
      context: .
      dockerfile: ./api/Dockerfile
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b '0.0.0.0'"
    volumes:
      - ./api:/api
    ports:
      - '3000:3000'
    depends_on:
      - db
    stdin_open: true
    tty: true
+ front:
+   image: node:20
+   volumes:
+     - ./front:/app/front
+   ports:
+     - 5173:5173
+   stdin_open: true
+   tty: true

Qwikアプリケーションの作成

ターミナル
# コンテナの作成と起動
docker compose up -d front
# 実行中のコンテナに入る
docker compose exec front bash
# インストールディレクトリに移動
cd /app/front
# Qwikのインストール
npm create qwik@latest

# 実行結果
Need to install the following packages:
create-qwik@1.5.7
Ok to proceed? (y) y

> npx
> create-qwik

      ............
    .::: :--------:.
   .::::  .:-------:.
  .:::::.   .:-------.
  ::::::.     .:------.
 ::::::.        :-----:
 ::::::.       .:-----.
  :::::::.     .-----.
   ::::::::..   ---:.
    .:::::::::. :-:.
     ..::::::::::::
             ...::::

┌  Let's create a  Qwik App  ✨ (v1.5.7)
│
◇  Where would you like to create your new project? (Use '.' or './' for current directory)
│  ./
│
●  Creating new project in  /app/front  ... 🐇
│
◇  Select a starter
│  Basic App (Qwik City + Qwik)
│
◇  Would you like to install npm dependencies?
│  Yes
│
◇  Initialize a new git repository?
│  No
│
◇  Finishing the install. Wanna hear a joke?
│  Yes
│
◇  🙈 ───────────────────────────────────────────────╮
│                                                    │
│  Why doesn't Hollywood make more Big Data movies?  │
│  Had a byte!                                       │
│                                                    │
├────────────────────────────────────────────────────╯
│
◇  App Created 🐰
│
◐  Installing npm dependencies.│
■  EXDEV: cross-device link not permitted, rename '/app/.create-qwik-rdkd57d57a/node_modules' -> '/app/front/node_modules'
│  
│  
│
■   npm install failed 
│   You might need to run "npm install" manually inside the root of the project.
│  
│  
◇  Failed to install npm dependencies 📋
│
◇  Result ────────────────────────────────────────────────╮
│                                                         │
│  🦄  Success!                                           │
│                                                         │
│  🤍 Integrations? Add Netlify, Cloudflare, Tailwind...  │
│     npm run qwik add                                    │
│                                                         │
│  📄 Relevant docs:                                      │
│     https://qwik.dev/docs/getting-started/              │
│                                                         │
│  💬 Questions? Start the conversation at:               │
│     https://qwik.dev/chat                               │
│     https://twitter.com/QwikDev                         │
│                                                         │
│  👀 Presentations, Podcasts and Videos:                 │
│     https://qwik.dev/media/                             │
│                                                         │
│  🐰 Next steps:                                         │
│     npm install                                         │
│     npm start                                           │
│                                                         │
│                                                         │
├─────────────────────────────────────────────────────────╯
│
└  Happy coding! 🎉

npm notice
npm notice New minor version of npm available! 10.7.0 -> 10.8.1
npm notice Changelog: https://github.com/npm/cli/releases/tag/v10.8.1
npm notice To update run: npm install -g npm@10.8.1
npm notice

# パッケージのインストール
npm install

Dockerfileの準備

front/Dockerfile
FROM node:20
ENV TZ Asia/Tokyo

RUN apt update && apt install -y xdg-utils --fix-missing
COPY ./front /app/front
RUN npm install -g npm@10.8.1 
WORKDIR /app/front
RUN npm install

compose.yml修正

compose.yml
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
      TZ: "Asia/Tokyo"
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./db/data:/var/lib/mysql
    ports:
      - '3306:3306'
    restart: always
  api:
    build:
      context: .
      dockerfile: ./api/Dockerfile
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -e development -p 3000 -b '0.0.0.0'"
    volumes:
      - ./api:/api
    ports:
      - '3000:3000'
    depends_on:
      - db
    stdin_open: true
    tty: true
  front:
-   image: node:20
+   build:
+     context: .
+     dockerfile: ./front/Dockerfile
    volumes:
      - ./front:/app/front
    ports:
      - 5173:5173
+   command:
+     sh -c 'npm run dev -- --host 0.0.0.0'
+   environment:
+     - CHOKIDAR_USEPOLLING=true
    stdin_open: true
    tty: true

再構築

docker compose build front
docker compose up -d front

ブラウザでhttp://localhost:5173/にアクセスしてページが表示されるのを確認

Discussion