2019/11/20

素晴らしい。 もう六日目だ。 昨日は激しく深酒をしてしまって、文章は無茶苦茶だし、何がしたいのかもよくわからない記事となってしまった。 今日はすでに酒がかなり入っている状態だが、ここからは比較的穏やかに飲んでいこうと思っているので、昨日のような醜態は晒さずに済む予定である。

では始めていく。


昨日はスキーマの設計が終わった後、何故かAPIの設計を始めてしまった。 しかし、今回のような一人で開発する小規模なプロジェクトの場合、必要になった段階でAPIを生やしていくのが一番手っ取り早いと思うので、一旦API設計の作業はやめて、先にフロントエンドの開発に取り組んでいくこととする。

使用する言語はCoffeeScriptでもTypeScriptでもなく生JavaScriptフレームワークはReact、ベースのコンポーネントライブラリはMaterial UI、ルーティングはReact Router、ステートの管理はReact Reduxを用いる。 その他諸々必要なものは適宜追加していくこととする。

早速手を動かしてコードを書いていきたいのは山々なのであるが、多少なり先にデザインが決まってなければ何から始めれば良いか分からないし、先が見えなさすぎて少々キツイ。 なのでまず手書きのワイヤーフレームもどきを作っていくこととする。


できた。

f:id:tac2nd:20191120222729j:plain

UIを考えてみてようやく気付いたのだが、現状のテーブルスキーマには、予定のルーティンワークがその日に実行されたか否かを管理するテーブルが存在しない。 RoutineHistories テーブルは名前的にそういう用途に使えそうに見えるが、このテーブルはルーティンワークのActivateとInactivateを管理するためのテーブルであり、そのルーティンワークがその日に実行されたことを書き残すためのテーブルではない。

そういった履歴を残すためには別のテーブルが必要となる。 と言っても、DATE 型の日付を表すフィールドと、ルーティンワークのIDを指す外部キーを主キーとした簡単なテーブルを一つ作るだけで事足りる。

しかし、命名はどうしよう…。 色々考えたが、既に存在している RoutineHistories テーブルを RoutineEventHistories とし、 ルーティンワークが実行されたことを記録するためのテーブルは RoutineHistories とすることとした。 新生 RoutineHistories テーブルのスキーマは以下のようになる。

CREATE TABLE IF NOT EXISTS `routine_histories` (
  `routine_id` CHAR(36) NOT NULL,
  `date` DATE NOT NULL,
  `is_done` TINYINT(1) NULL,
  PRIMARY KEY (`routine_id`, `date`),
  CONSTRAINT `routine_id`
    FOREIGN KEY ()
    REFERENCES `routines` ()
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

一応、更新後のEERダイアグラムも張り付けておく。

f:id:tac2nd:20191120231344p:plain

では早速フロントエンドを書いていこう。


ということで、コードを書き始めたのが、眠気がマックスに近くなってきたので今日はここまでにすることにする。

では、おやすみなさいませ。