LoginSignup
45
48

More than 5 years have passed since last update.

Mithril.js( + Node.js + MongoDB)で会議室予約Webアプリ

Last updated at Posted at 2016-03-23

ReserveApp
(Web Storageを使用したモック版です)

reserve.png

概要

会議室予約のためのWebアプリです。
予約が入った時間帯が塗りつぶされるので
何時にどの会議室が空いているのか
わかりやすくなっています。

予約されたブロックをクリックすると
予約情報とキャンセルボタンが表示されます。

(会議室が4個以上のときはどうすんだよ、、ということについてはお察しください)

※バグ(3/23)
予約ブロックの一番上以外をクリックすると
予約時間がずれて表示されてしまうようです。後日修正します。

開発環境

フロントエンド

  • JavaScript

フレームワーク

  • Mithril.js

バックエンド

  • Node.js

データベース

  • MongoDB

管理

  • git
  • gulp
  • webpack

GitHub

ReserveApp

Mithril.js

shibukawaさん
「Mithril――最速クライアントサイドMVC」で学習をはじめました。

それまでMVCパターンに馴染みがなかったので
良い勉強になったとおもっています。
(ReserveAppがスバラシイ設計になっているかはさておき)

view

Mithril.jsのviewはこんな感じで書けます。

Mithril.js
m("p" , "Hellow Mithril")

//↓出力されるHTML

<p>Hellow Mithril</p>

入れ子にするときは

Mithril.js
m( ".say" , [ 
    m("p" , "Hellow Mithril")
])

//↓出力されるHTML

<div class="say">
    <p>Hellow Mithril</p>
</div>

と書きます。

書き方にクセがありましたが
慣れるとあまり気になりませんでした。

model → view、
view → modelへのバインディングも

reserve.js
//model → view
m( "input", vm.person() )

//view  → model
m.withAttr( "data-place" , vm.place )

のように書けます。

また、Mithril.jsは再描画システムが優れています。
差分検知でviewを描画してくれるので
いろいろ処理を詰め込んでも比較的高速に描画してくれました。

Mithril.jsに慣れてからはview部分の実装はスムーズでした。
反面、model,viewModel,controllerの取り扱いに迷った結果が
コードに表れているとおもいます。

余談ですが
他制作ではviewをcomponent管理しています。
これはとても便利で、コンテンツの管理・入れ替えが楽です。
JavaScript上でHTMLを効率的に扱えるのは(個人的には)気持ちが良いですね!

今のところ個人でササッと作ってしまうときは
Mithril.jsを使っていこうとおもっています。

Web Storage版(Node.js, MongoDB)

公開しているのはNode.js + MongoDBの部分を
Web Storageに移植したモック版です。
どんなに予約しても誰にも迷惑はかからないので
ガンガン予約してみましょう!w

Node.jsはES6で書いています。
アロー関数、Promise(coを使用)が使えると
コードがスッキリして気持ちいいですね!

書いてて思い出しましたが
途中まで、WebSocketの非同期通信で
予約状況をリアルタイムで共有していました。
社内の一部の端末でWebSocketが上手く動かずお蔵入りしましたが。

作った背景

社内の会議室予約システムをもっと便利にしたい(当初はスレッドに板書)
という要望があり、SPAの勉強がてら制作をはじめました。
(諸事情により社内運用はお蔵入り)

まとめ

  • Mithril.jsイイね!
  • SPAは設計が大事
  • ES6見通しが良くなって処理も楽

今後はもう少し小規模なWebアプリを作りつつ
MVCパターンというかデータの流れを堅実に設計していこうとおもいます。

45
48
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
45
48