転職活動で見せられるポートフォリオ的なものが何もなかったので、勉強がてらRuby on Railsを使って何かアプリを作ってみることにしました。
プリキュアの変身のおもちゃとかGitHubで公開できないし。。
ちなみに私は普段PHPを主に書いています。
学習用に構築するアプリといえばタスクリストアプリということで、初学者の方の参考にもなればいいな〜ということでシンプルに作っていきます。
テーマは 「達成感を生み出すタスクリスト」!
タスクリストって終わったらあっけなく消えちゃうじゃないですか。タスク解消時に労ってほしい、終わったタスクがずら〜っと並んでいるのを眺めて悦に入りたい、という欲求を満たしたいと思います。
構成
バックエンド(API) : Ruby on Rails
これが勉強したいので当然の選定。
APIにしたのは、①フロントとバックエンドでしっかり分かれている構成が好きだから ②後でモバイルにもできるから ③とりあえずバックエンドだけリポジトリに載せておけば早い段階で成果物あるっぽく見えるから。
フロントエンド : React(TypeScript)
Rubyは初めてなので、フロントは最近仕事でも使っているこちらを選定。
コンポーネント指向はコードが読みやすいし使い回しが効いて、実装が本当に楽。
TypeScriptを選んだのは、とにかく全部エラー吐いてくれて、私のようなうっかりやにはこれくらいの世話焼き言語が合っているため。
RDB : MySQL
特にこだわりはないのですが、使い慣れているため。
開発環境 : Docker
何はともあれdocker-compose。作って壊せる、使いまわせる、環境がどうなっているか一目でわかる。好き。
機能要件
タスクに関する機能
- 表示機能
タスクを表示する機能。期限とか優先度でソートしたい。
- 保存機能
タスクを保存する機能。サクッと登録したい。
- 編集機能
タスクを編集する機能。いらないかと思ったけど、期限変更とか誤字とかあるしなあ。
- 解消機能
やり終わったタスクを解消する機能。解消したタスクは後から見られるようにしたい。あと、解消した時にめっちゃ褒めてほしい。
- 削除機能
間違って登録したりやらなくて良くなったタスクを削除する機能。
- 解消済みタスク表示機能
ただ並べて眺めて満足感を得る機能。
ユーザーに関する機能
- 登録機能
実際サービスとして運用するわけじゃないしなんでもいいのですが、ユーザーという概念がないのは流石におかしいので一応作成。
- ログイン機能
上に同じ。せっかくだからJWTのライブラリruby-jwtとか使ってみたい。
データモデル設計
機能追加した時複雑化するような構成は避けたいので、イミュータブルデータモデルを参考にします。
が、あまり厳密にしても逆にわかりづらいので、タスクにはユーザーIDを入れました。タスクリストなのに共有機能とか作らないですし。
あと、タスク自体の更新・削除は履歴なしで物理で強行します。もちろん更新日時もなし。なぜなら履歴を遡らないし復元もしないから。
2023-03-05追記:それはイミュータブルじゃなくね?更新してるじゃん。イベント分離しただけで喜んでましたごめんなさい。
というわけで以下のような超絶シンプルなデータモデルが完成!(gitmindで描画)
API設計
できることならymlとか書きたくないのでstoplightを使いました。ありがとうGUIにしてくれたひと。
↓こんな感じの種類でAPIを作ることにします。
ここで突然ですがおすすめの本紹介。
「Webを支える技術 ―― HTTP,URI,HTML,そしてREST」。APIって何?そもそもWebって何?ということをかなり噛み砕いて教えてくれます。
ちょっと古いけどベストセラーなので読んだことない方はぜひ!
次回予告
今回は構成、設計編ということで大体固まったのでここまで!
次回は開発環境構築編を予定しています。
がんばるぞい!