こんにちは!大垣です!
皆さんは、開発言語やフレームワークなどに応じた、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)の実装を行っていきたいと思います。
次回へ続く。
コメント