こちらは、「みんなでつくろう天の川」開発の技術メモです。
最初は、できるだけ小さなプロジェクトにするつもりで開発をスタートしました。まずはProcessing、Webサイトでの閲覧も考慮してP5.jsに移行し、さらにスピードが足りずにThree.jsに行き着きました。ハードウェアは、Raspberry Piも検討しましたが、スキャナドライバの安定性からMacを利用。
スピードとWebサイトとの連動を考慮すると徐々に規模が大きくなり、最終的にはNode.js + Expressを中心としたつぎのような構成になりました。学習しながら、増築していったセルフビルド建築のようなものなので、いびつな構成だとおもいます。
今回の開発のおかげで、すこししか触っていなかったNode.jsの理解がすすみました。Nodeには膨大なモジュール群があるので、それらを組み合わせる「ブロック工作」の感覚でWebアプリを開発することができました。
マシン
- Mac mini – スキャナドライバ、アップロード
- Scansnap – スキャナ
- MacBook Pro – プロジェクション、Webクライアント
- VPS – Webサーバ
マシンは冗長性をもたせています。基本的には1−2−3の3台構成ですが、故障時にそなえて、1、2、1-2、1-3、2-3でも展示可能になっています。
サーバ
- Python3 + OpenCV3 – 画像認識
- nginx – Webサーバ
- Node.js – サーバサイドJavaScript
- Express – Webアプリケーション・フレームワーク
- Socket.IO – リアルタイムアプリ・フレームワーク
- sharp – 画像変換
- moment – 日付時刻処理
- pm2 – Nodeの常時起動と監視 (Keymetrics)
- MongoDB + Mongoose – データベース
フロントエンド
- JavaScriptライブラリいろいろ
- three.js
- stats.js
- dat-gui
- tween.js
- d3.js
- moment
- tinycolor
- Foundation – CSSフレームワーク
ローカルマシン(スキャン用)
- Node.js – アップロード用アプリ
- chokidar – フォルダ監視
- pm2 – アプリの常時起動
- httpie – APIリクエスト
ローカルマシン(展示用)
- Electron – 展示専用アプリ開発(マルチプロジェクション、リモート操作のウィンドウ)
エディタ
- Atom
バージョン管理(というよりもリポジトリとして)
- github