2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Cloud Run で動くプロジェクト管理システムを作ってみた

Last updated at Posted at 2024-06-15

私は、「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 を生成し、フロントエンドで表示します。
フロントエンドでは、BootstrapViteMarked などを使用しました。
ガントチャート機能のフロントエンドのプログラミング言語は、TypeScript を使用しました。

画面を作るにあたっては、最初に、静的 HTML ファイルで画面のプロトタイプを作成しました。
Bootstrap は、モバイルファーストで作られているので、モバイル用の画面を作るのは容易でした。
静的 HTML を作成してから、それを動的な Rust のコードに置き換えていきました。これも、むずかしくなかったです。


Yuimarl のサーバーを、ご自身で構築・運用するための情報を公開しています。
ご興味がありましたら、ご自身で構築してみてはいかがでしょうか?
サーバー構築といっても、Cloud Run は「サーバーレス」に分類されていますので、この記事を読まれるようなエンジニアの方でしたら、容易にセットアップできるはずです。

もしご興味がありましたら、お使いいただき、ご意見や改善点など、お知らせいただけるとうれしいです。
よろしくお願いいたします。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?