私は、「Yuimarl」(ゆいまーる) という自作のプロジェクト管理システムをリリースしました。
https://mnitta220.github.io/yuimarl/
グループまたは個人のプロジェクトを管理するためのシステムです。
以下の特徴があります。
- グループまたは個人のプロジェクトを自由に登録することができます。
- 制限内であれば、無料で使うことができます。
- インターネットにつながった、パソコン、スマートフォン、タブレットの Webブラウザで使うことができます。
- サーバーをご自身で運用するための情報が公開されています。
- ソースコードが公開されているので、プログラミングの知識があれば、ご自身で機能を改変することができます。
プロジェクト管理システムは、一般的な会社では普通に使われているだろうと思います。
Yuimarl は、中学生、高校生、大学生、おじちゃん、おばちゃん たちにも、使っていただけることを想定して作りました。
現在は、以下の機能があります。
- プロジェクトを登録する。
- チケットを登録する。
- ガントチャートを表示する。
この記事では、Yuimarl のアーキテクチャーと実装の概要について、ご紹介させていただきます。
アーキテクチャー
Yuimarl のサーバーは、 Google Cloud のインフラで動作します。アプリケーションの実行環境は Cloud Run、データベースは Firestore、ユーザー認証には Firebase Authentication が使われています。
プログラミング言語には、Rust と TypeScript が使用されています。
Cloud Run
Cloud Run は、Docker コンテナのアプリケーションを実行することができます。
Docker コンテナなので、どのプログラミング言語でも選択可能です。
自動的にスケールアップ / スケールダウンします。アプリが実行されていない時は、ゼロまでスケールダウンし、料金が発生しません。Yuimarlのような、アイドルタイムの長いシステムの運用には適しています。
コンテナ数ゼロの状態からのコールドスタートでも、非常に高速で、ほとんど気にならないほどです。
Firebase Authentication
Googleアカウント / GitHubアカウント / メールアドレス のいずれかでログインすることができるようにしました。
ユーザー認証を、自分で実装しようとすると、多大な工数が必要となってしまいます。
Firebase Authentication を使用することで、その工数を削減することができました。
Firestore
私は今回、初めて Firestore を使いましたが、慣れ親しんだリレーショナルデータベースと比べても、大きな違和感なく、使うことができました。スキーマレスなのも便利です。
スピードも十分に高速だと思います。
実装
バックエンドの実装
バックエンドの Docker コンテナ内では、Rust で作ったプログラムが動作します。
Rust で作ったプログラムは、C言語並に高速ですし、ランタイムや仮想マシン(VM)が不要なので、高速に起動します。Cloud Run のような、コールドスタートが頻発する、コンテナ環境で実行されるシステムには向いていると思います。
Rust の Web フレームワークには、axum を使用しました。私は以前、axum を使用したコンポーネント指向の実装についての記事を投稿しました。Yuimarl でも、基本的に同じような方針で実装をしています。よろしければご参照ください。
Kubernetes で動く Web システムを Rust で作ってみた
フロントエンドの実装
フロントエンドの Web ブラウザから発行されたリクエストに応じて、バックエンドの Rust が HTML を生成し、フロントエンドで表示します。
フロントエンドでは、Bootstrap、Vite、Marked などを使用しました。
ガントチャート機能のフロントエンドのプログラミング言語は、TypeScript を使用しました。
画面を作るにあたっては、最初に、静的 HTML ファイルで画面のプロトタイプを作成しました。
Bootstrap は、モバイルファーストで作られているので、モバイル用の画面を作るのは容易でした。
静的 HTML を作成してから、それを動的な Rust のコードに置き換えていきました。これも、むずかしくなかったです。
Yuimarl のサーバーを、ご自身で構築・運用するための情報を公開しています。
ご興味がありましたら、ご自身で構築してみてはいかがでしょうか?
サーバー構築といっても、Cloud Run は「サーバーレス」に分類されていますので、この記事を読まれるようなエンジニアの方でしたら、容易にセットアップできるはずです。
もしご興味がありましたら、お使いいただき、ご意見や改善点など、お知らせいただけるとうれしいです。
よろしくお願いいたします。