小学2年生の娘が九九を覚えるのに大分苦戦していた。
そこで私自身の勉強も兼ねて Riot.js(ライアット)という javascript(ジャバスクリプト)のライブラリを使って、SPA(シングルページアプリケーション)の九九アプリを作ってみました。
作った九九アプリは以下のリンクから実際に操作できます。
操作感や描画の感じを確認するのにご利用ください。
Riot の魅力
私はIT業界に15年近く携わっており、それなりに開発経験は豊富ですが、WEB関連の仕事をやり始めたのは2年前くらいからであり、HTMLやCSS、Javascriptに苦手意識があります。
仕事ではフロント側の作業はほぼノータッチ。
バックエンド側の作業がほとんどです。
そんな私でも Riot を使えば、こんな感じのSPAが結構お手軽に作れました。
「Riot スゲー!!」
「これから流行るんじゃない?」
と個人的に思ってます。
Riot で特に魅力を感じるのは以下の3つです。
- 学習コストが低い
- デザインとロジックの分離
- 開発環境の構築が簡単
学習コストが低い
とにかくフロント側の情報はめまぐるしい。覚える事が多すぎて本来やりたいことが着手できません。
だから学習コストが低いことは、めっちゃ大事なことだと思います。チームでやるなら尚更です。
Vue.js(ヴュー)も学習コストは低いと言われてますが、おそらく Riot の方が覚えることは少なく直感的に利用できます。
デザインとロジックの分離
フレームワークを利用したフロント側のソースを書けるデザイナーさんは希少な存在です。
Riot なら1つのTAGファイルにコンポーネント単位で、HTML、CSS、Javascriptがまとまっています。
こちらは作成途中のページに遷移した際に表示するSorryページのTAGファイルです。
上からHTML、CSS、Javascript部分と分かりやすく分離しています。
これなら、コンポーネント単位でデザイン修正をデザイナーさんに依頼することができます。
これってすごいメリットですよね。
開発環境の構築が簡単
Riot って開発環境の構築がとても簡単です。
私と同じ Windows を利用している方のために、お手軽な環境構築手順を以下にまとめました。
![](https://sastd.com/wp/wp-content/uploads/2017/12/vsc-riot-tag.png)
実際にこの環境で九九アプリを開発しました。
デバッグとか超楽です。
仮想環境を用意したりnode.jsをインストールしたり、そんなんで疲れちゃってやる気が無くなったら本末転倒です。
開発環境の構築が楽。これってめっちゃ大事なことだと思います。
Riot の注意点
実際に Riot を使ってみて分かったこと。
設計をしっかりしないとメッセージの流れが追えなくなります。
Riot にはオブザーバブルというコンポーネントを連動させる機構があります。
簡単に言うと、コンポーネントからコンポーネントにパラメータ付きのメッセージを通知、それを受け取り処理する流れです。
このメッセージのやり取りで画面遷移(実際には表示するコンポーネントの切替)を制御しています。
オブザーバブルについて詳しく知りたい方は、こちらの記事がとても分かりやすいのでご覧ください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkYwJTJGMTA2OTQ5JTJGcHJvZmlsZS1pbWFnZXMlMkYxNjkyNTE4ODkzP2l4bGliPXJiLTQuMC4wJmFyPTElM0ExJmZpdD1jcm9wJm1hc2s9ZWxsaXBzZSZmbT1wbmczMiZzPTEwZjNiZWZmMjUyZDA1YThjZDVkYjliNGI1NDFkNzUx%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Dd36b934a76d7b3403776bacd819aa3d3?ixlib=rb-4.0.0&w=1200&fm=jpg&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9UmlvdC5qcyVFMyU4MSVBRSVFMyU4MiVCMyVFMyU4MyVCMyVFMyU4MyU5RCVFMyU4MyVCQyVFMyU4MyU4RCVFMyU4MyVCMyVFMyU4MyU4OCVFNSVBNCU5NiVFMyU4MSU4QiVFMyU4MiU4OSVFMyU4MyU4NyVFMyU4MyVCQyVFMyU4MiVCRiVFMyU4MiU5MiVFNiVCOCVBMSVFMyU4MSU5OSVFNiU5NiVCOSVFNiVCMyU5NSZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnR4dC1wYWQ9MCZzPTU1NmYzY2NkODdkNmQ4NTUzNGY3MWViZjNlMjEwYWZm&mark-x=120&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBzYWt1bWVueCZ0eHQtY29sb3I9JTIzMUUyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTM2JnR4dC1wYWQ9MCZzPTMzZjAwZDVlNTBhN2QyYmYxNmQyN2Y3ZDQwNTJkZWY0&blend-x=242&blend-y=480&blend-w=838&blend-h=46&blend-fit=crop&blend-crop=left%2Cbottom&blend-mode=normal&s=79bccfb821ad2241bb0606a98c4cefb9)
今回の九九アプリはプロトタイプを作ってから、徐々に機能を足していきました。
そうした結果、メッセージのやり取りがめちゃくちゃ複雑になりました。
途中、これではいかんと controller.tag というメッセージを管理するタグを作成したのですが、それでもぐちゃってます。
解決策
いろいろ調べた結果、設計のベースとして Flux(フラックス) という Facebook が提唱しているアーキテクチャを利用するのが良さそうです。
簡単に言うと、メッセージの流れを一方通行にしてしまおう。双方向は禁止というものです。
Flux について詳しく知りたい方は、こちらの記事がとても分かりやすいのでご覧ください。
![](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMzkzODIlMkZwcm9maWxlLWltYWdlcyUyRjE0ODc2NzgyNTc_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmZtPXBuZzMyJnM9YmVhMGQzYTBjOTFkODY1ZmFhMjk5MjQ2ZWNiMjM2NzQ%26blend-x%3D120%26blend-y%3D467%26blend-w%3D82%26blend-h%3D82%26blend-mode%3Dnormal%26s%3Def8badf7a3edd74502feef69c1871c46?ixlib=rb-4.0.0&w=1200&fm=jpg&mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9JUU3JUI1JTkwJUU1JUIxJTgwRmx1eCVFMyU4MiU4NCVFMyU4MiU4OVJlZHV4JUUzJTgyJTg0JUUzJTgyJTg5JUUzJTgxJUEzJUUzJTgxJUE2JUU0JUJEJTk1JUUzJTgxJUFBJUUzJTgxJUFFJUUzJTgxJThCJUU1JTgwJThCJUU0JUJBJUJBJUU3JTlBJTg0JUUzJTgxJUFBJUUzJTgxJUJFJUUzJTgxJUE4JUUzJTgyJTgxJnR4dC1hbGlnbj1sZWZ0JTJDdG9wJnR4dC1jb2xvcj0lMjMxRTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LXBhZD0wJnM9NDcxNGY5N2I0YTU4YWY5MjZiMGEyMzQxZTA2NTZiZjY&mark-x=120&mark-y=112&blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBzeW9zc2FuMjcmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz05MmMwOGIwODBhMjg0NTZiYjE0MGVjMjMwMWY4NjMzMQ&blend-x=242&blend-y=480&blend-w=838&blend-h=46&blend-fit=crop&blend-crop=left%2Cbottom&blend-mode=normal&s=185dc2c5cc01c69a6931daf07e120d49)
九九アプリの方も時間に余裕があれば Flux を適用して見やすいソースにリファクタリングしたいと考えています。
まぁいつかやろうと思っている事って大抵はやらないで終わるんですがね(笑
まとめ
フロント側は苦手だけど開発してみたい。でもフロント側ってめっちゃ覚える事多すぎてやる気が起きないよ。
Vue.js(ヴュー)や Angular(アンギュラー)やReact(リアクト)とか、フロント側のフレームワークっぽいのはいっぱいあるけど、結局なにがいいんだ?
という方に Riot ってめっちゃ学習コストが低くって参入しやすいよ!
って事が伝えられれば満足です。
今回の九九アプリはローカル環境でも動作可能であり、外部連携は一切ありません。
ルビ(振り仮名)を外部のJsonファイルから取得して表示するように修正しました。
次はAPIを使ってランキングを永続化する機能でも追加してみようと思います。
以上、『Riot で簡単なWEBアプリのSPA(シングルページアプリケーション)を開発』でした。
- LINE公式アカウントの活用事例 - 2023年12月2日
- LINE公式アカウントの導入によるスタッフの教育 ~セキュリティ面の考慮も重要~ - 2023年12月2日
- LINE公式アカウントの導入によるセキュリティ面の懸念 - 2023年12月2日
コメント