どこにでもいるSEの備忘録

たぶん動くと思うからリリースしようぜ

Vue.jsを使ってみた(タスクボード的ななにかを作る)

前回はちょっと寄り道してデザインやら公開する方法をかじってみました。

nogawanogawa.hatenablog.com

nogawanogawa.hatenablog.com

今回は本筋に戻って、実際にサマになるもんを作ってみたいと思います。 とはいうものの、下の本の内容を踏まえてガチャガチャいじった程度ですが。

Vue.js入門 基礎から実践アプリケーション開発まで

Vue.js入門 基礎から実践アプリケーション開発まで

時間かけて何度も読み直せばいい本ですね。毎回新しい発見がある感じです。

その他、この辺を参考にさせていただきました。非常に参考になりました。ありがとうございます。

www.kabanoki.net

syumai.hateblo.jp

設計

本の内容そのままだといろいろまずいので、だいぶ改編を加えます。 まずベースになるのは前回作ったVuetifyのサンプルを使った残骸ですね。

それにいろいろ変更を加える形で作っていきます。

作りたいページ概要

全体はこんな感じ。

f:id:nogawanogawa:20190310143029j:plain:w500

細かいとこはこんな感じ。

ボード

f:id:nogawanogawa:20190310143046j:plain:w200

詳細表示ダイアログボックス

f:id:nogawanogawa:20190310143102j:plain:w400

その他

この手の設計はすべてStoryBookを使えばチーム内で共有するのは効率化しそうですね。 最近はこんなものまで出来てるんですね。知らなかったっす。。。

storybook.js.org

コンポーネント設計

Atomic Designに則って考えます。Atomic DesignとはAtoms, Molecules, Organisms, Templates, Pagesの5段階にコンポーネントを分割するデザイン手法です。 それぞれの粒度としてはこんな感じです。

  • Atoms : 最小の構成単位。ボタンやラベルなど。
  • Molecules : Atomsを組み合わせたもの。ラベル付きフォームなど。
  • Organisms : Moleculesより複雑なもの。ナビゲーションバーやログインフォームなど。
  • Templates : ページ構成が説明できる粒度。デザインするワイヤーフレームなど。
  • Pages : 実際のデータをTemplateに当てはめたもの。

今回は1ページしか作る気がないので、TemplateとPageはどちらか省略ですね。

状態管理

次に状態管理について考えていきます。

状態としては、下記のように設定しました。

  • Tasks
    • Stage

Tasks

複数のボードが横向きに順序を持つように配置されます。 ボードには詳細情報であるInfoのリストが格納されます。

属性名 説明
Tasks list Stage stage1, stage2, ...

Stage

各ボードを選択した際に、その詳細を表示します。 実際にはDialog Boxの中に表示され、その中に記載される状態をStageとして管理します。

属性名 説明
title string タスク名 味付け、煮込み、洗い物
detail string タスク詳細 塩小さじ一杯を投入、コトコト煮込む、洗剤を投下

データフロー

今回は外面だけになったので、データフローは省略。 覚えてたらそのうち更新処理とか別記事で書きます。

実装

そんなこんなで、できたものはこんな感じです。 (途中過程はだいぶ端折りましたが、まあコード見ればわかるでしょう。。。)

nogawanogawa.github.io

github.com

おまけ

全然関係無いですけど、localhostのサービスを埋め込むことって出来るのかな?って思ってやってみたら意外といけました。

f:id:nogawanogawa:20190317120852p:plain

追加したVueのコードはこんだけ。

意外といけるもんですね。勉強になりました。

感想

ちゃんと設計しようとすると大変ですね。 ラフスケッチをササッと設計を書き出す能力が必要になってきますね。