Rustで簡単なCRUDをやってみる(環境構築編)

プログラミング
この記事は約10分で読めます。

こんにちは!大垣です!
皆さんは、開発言語やフレームワークなどに応じた、CRUDについて
どのように書けば良いかなど、困った経験はないでしょうか。
そのようなお悩み解決の一助になればと思い、今回から数回に渡り、いろいろな言語で
CRUDを書いてみたいと思います。
まずは、少々マイナーな印象がありますが、Rustを使用してCRUDを書いてみます。
今回の記事では、開発環境を作るところまでやってみたいと思います。

本記事でわかること

  • 仮想コンテナによるRust開発環境の構築方法
  • 基本的なCRUDの書き方
  • RustによるWebシステムの構築方法

CRUDとは

CREATE(登録)、READ(読み出し)、UPDATE(更新)、DELETE(削除)の頭文字です。
データの取り扱いにおける基本操作を示す言葉です。

Rustとは

メモリ安全性、メモリ効率、安全な並行性を重視した開発言語です。
特徴として、実行速度が速いこと、変数・関数に所有権の概念があること、
オブジェクトの概念はあるが継承・汎化の概念がないことなどがあります。

開発環境の構成

早速、開発環境を作っていきましょう。
今回の開発環境は次の構成とします。

■実行環境
 ・OS       :Windows 10
 ・仮想コンテナ  :Rancher Desktop
 ・統合開発環境  :Visual Studio Code
 ・データベース  :PostgreSQL 14
 ・開発言語    : Rust 1.67

Visual Studio Codeのインストール

統合開発環境として、Visual Studio Codeを使用するので、インストールします。
以下のURLにアクセスし、WindowsのSystem Installer x64からダウンロードします。
https://code.visualstudio.com/download
ダウンロードしたファイルを実行し、すべて「次へ」で進めます。

WSLの最新化

仮想コンテナにRancher Desktopを使用するために、WSLを最新化する必要があります。
コマンドプロンプトを開き、以下のコマンドを実行します。

wsl --update

実行が完了したら、WSL2をインストールします。
以下のURLにアクセスし、
「x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージ」の
リンクをクリックし、ダウンロードしたファイルを実行します。
ファイルを実行すると、自動的にインストールが開始されるので、
完了後、「Finish」ボタンを押してインストールを終了します。
https://learn.microsoft.com/ja-jp/windows/wsl/install-manual#step-4—download-the-linux-kernel-update-package

インストールが完了したら、WSL2を有効化します。
コマンドプロンプトを開き、以下のコマンドを実行します。

wsl --set-default-version 2

Rancher Desktop インストール

仮想コンテナの実行環境として、Rancher Desktopを使用します。
以下のURLにアクセスし、「Download Windows」のリンクを
クリックしてダウンロードします。
ダウンロードしたファイルを実行し、すべて「Next」で進めます。
https://rancherdesktop.io/

Rancher Desktopの初期設定

インストール完了後、最初のRancher Desktop起動時に
「Welcome to Rancher Desktop」の画面が表示されます。
Enable Kubernetesのチェックを外し、「Accept」を押します。

コマンドプロンプトを開き、以下のコマンドを実行します。

docker ps

CONTAINER IDなどが表示されれば、Rancher Desktopが使用できる状態です。
errorから始まるメッセージが表示される場合は、Rancher Desktopが
まだ完全に起動していない状態なので、しばらく待ってから再度
上記のコマンドを実行し、起動を確認します。

開発環境のコンテナ作成

Rancher Desktopが使用できる状態になったら
開発環境のコンテナを作成していきます。
任意のフォルダ内に、以下の構成でフォルダとファイルを作成します。
ファイルはテキストファイルとして作成します。

📁docker-rust
├📁rust
│└📝Dockerfile
└📝docker-compose.yml

Dockerfileに、以下の内容を記述し、保存します。

FROM rust:1.67

EXPOSE 9000
EXPOSE 9001

ENV CARGO_TARGET_DIR=/tmp/target \
  DEBIAN_FRONTEND=noninteractive \
  LC_CTYPE=ja_JP.utf8 \
  LANG=ja_JP.utf8

RUN apt-get update \
  && apt-get upgrade -y \
  && apt-get install -y -q \
  ca-certificates \
  locales \
  apt-transport-https \
  libssl-dev \
  libpq-dev \
  pkg-config \
  curl \
  build-essential \
  libdbus-1-dev \
  postgresql-client \
  git \
  wget \
  vim \
  && echo "ja_JP UTF-8" > /etc/locale.gen \
  && locale-gen \
  && echo "install rust tools" \
  && rustup component add rustfmt \
  && rustup target add wasm32-unknown-unknown \
  && cargo install --locked trunk \
  && cargo install cargo-watch cargo-make cargo-generate
WORKDIR /work/backend

docker-compose.ymlに、以下の内容を記述し、保存します。

version: "3.8"
services:
  rust-app:
    container_name: rust-app
    build: ./rust
    tty: true
    volumes:
      - ./rustsource:/work/backend
    ports:
      - 9000:9000
      - 9001:9001
    networks:
      - rust-app-net

  postgres:
    image: postgres:14
    restart: always
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
      PGPASSWORD: password
      POSTGRES_DB: rusttest
      TZ: "Asia/Tokyo"
    ports:
      - 5432:5432
    volumes:
      - ./pgdata:/var/lib/postgresql/data
    networks:
      - rust-app-net

networks:
  rust-app-net:
    driver: bridge

コマンドプロンプトを開き、以下のコマンドを実行します。

cd docker-rustフォルダのパス
docker-compose up -d

これで、開発環境のコンテナが作成されます。
作成までかなりの時間がかかりますので、完了まで待ちます。

コンテナが作成されると、コンテナ内のフォルダが
PCのフォルダと関連付き、以下の構成になります。
rustsourceフォルダの中で、Rustのプログラムを記述していきます。

📁docker-rust
├📁rust
├📁pgdata
└📁rustsource

テーブルの作成

CRUDに使用する、データベースのテーブルを作成します。
データベースのコンテナに接続する必要があるので、コマンドプロンプトから
以下のコマンドを実行し、データベースのコンテナに接続します。

docker ps
※postgres:14と記載の左にあるIDを確認する

docker exec -it ↑で確認したID bash

接続に成功すると、プロンプトの表示が、
「C:\Users\ユーザ名」から、「root@コンテナID:/#」に変わります。
その後、以下のコマンドを実行し、テーブルを作成します。

psql -h rust-postgres-1 -U user -d rusttest
パスワードを求められるのでpasswordと入力しEnter
create table t_task(taskid varchar(10), userid varchar(10), title varchar(30), description text, adddate timestamp, moddate timestamp, primary key (taskid, userid));
create table m_user(userid varchar(10), username varchar(50), password varchar(100),  adddate timestamp, moddate timestamp, primary key (userid));
comment on table t_task is 'タスクテーブル';
comment on column t_task.taskid is 'タスクID'; 
comment on column t_task.userid is '登録ユーザID'; 
comment on column t_task.title is 'タスクタイトル'; 
comment on column t_task.description is 'タスク詳細'; 
comment on column t_task.adddate is '登録日時'; 
comment on column t_task.moddate is '更新日時';
comment on table m_user is 'ユーザマスタ';
comment on column m_user.userid is 'ユーザID';
comment on column m_user.username is 'ユーザ名';
comment on column m_user.password is 'パスワード';
comment on column m_user.adddate is '登録日時'; 
comment on column m_user.moddate is '更新日時';
create index i_task_1 on t_task (taskid, userid);
create index i_task_2 on t_task (taskid);
create index i_user_1 on m_user (userid);

まとめ

以上で、Rustの開発環境が出来上がりました。
次回は、出来上がった開発環境に、バックエンド(WebAPI)の実装を行っていきたいと思います。

次回へ続く。

コメント

タイトルとURLをコピーしました