初心者向けWebアプリ講座をJSでやるとどうなるだろうか?
https://2.bp.blogspot.com/-HbHmOjDv-BY/XLAIihMO1tI/AAAAAAABSR8/CUc9bfCmrn097l3-_Gpux_cGGwKs9i6GACLcBGAs/s400/car_syoshinsya_mark.png
2019-07-30
大名エンジニアカレッジという取り組みで、プログラミング初心者に向けて、現場のエンジニアから学びつつWebサービスを約3ヶ月半ほどで作れるようになるという講座が行われている。Ruby on Rails のエコシステムを活用しているようだ。 カリキュラムは 1ヶ月の基礎編、1ヶ月の応用編、1ヶ月半の製作期間。となっている。
これは、例えば一貫して JavaScript を使ってプログラミング初心者にWebアプリ開発の講座を行うようにするとどんなメニューになるだろうなというメモである。 前提として述べておきたいのは、Rails には Rails チュートリアル みたいな強い学習用コンテンツがあり、Heroku みたいなインフラとの連携がシームレスになるのが最高に強いコンテンツだなと思っていること。これがプログラミングを少しやったことあるけど本格的にはまだというプレイヤーにはもってこいだなという気持ちでいる。 一方で、画面まで凝りだすと Ruby と Railsの基礎知識に加えて、フロントエンドの JavaScript まで触らないといけないので、初心者が取り組むには触る範囲が広くなってしまうかもなという気持ちもある。 そこで、フロントからバックエンドまでを JavaScript で書けたなら少しは学習コストが軽くなったりするのかな、みたいなそういう思いつき。そういうわけで基礎編のプログラミング全般に言えるようなところは大きく変わらないと思うので、ひとまず応用編だけザッと次のようなメニューを考えた。
Node.js と npm、npmパッケージの利用方法 (基礎編っぽい?)
Vue.js を使ってみよう (フロントエンド)
Nuxt.js でのアプリケーションの作り方 (フロントエンド)
Node.js で データベースをつかってみよう
Webアプリケーションのセキュリティについて
インフラについて (PaaSの紹介とかになるのかな?)
まず JavaScript も検索クエリを間違えなければ Ruby に負けないくらい情報がヒットする。一次情報として MDN があることも大きいかな。ただ Rails Tutorial みたいな一貫した学習コンテンツはないので乗っかるみたいなことはちょっと難しいかもしれない。 という所で、手慣れていることと、純粋に書きやすいからという所で Vue と Nuxt.js を選んだ。これらには一貫したガイドがあるので、ものを作るドリブンであれば十二分に効果を発揮してくれるだろう。しかも日本語ドキュメントも有る。 公式ドキュメントに丸投げは流石に厳しいと思うので、ポイントとして抑えてもらう資料としてマニュアルを活用していくのが良さそう。
特定フレームワークにロックインされるみたいなところは Rails 相当とみなして許容した。
課題になるかもしれないなと感じているのが、Node.js で Active Record 相当の ORM を活用しようとおもったら、Sequelize (従来のNode.jsスタイル)や TypeORM (Decorator を活用したクラスベーススタイル)を採用することになると思うが、それぞれで特色のある使い方なのでそこがとっつきにくいかもしれないなという懸念がある。node-mysql みたいなSQLを直接書くやり方でもいいかもしれないが、実践的な手段として新規にアプリを作る場合はそのやり方はしなさそうだからそうしないほうがいいだろうなという感想。 あとは、JavaScript にはつきものの callback や Promise、場合によっては Stream というような非同期処理の考え方が1ヶ月の応用編期間に収まるかあるいは基礎編に入れてついてこれるのかなという所は考えたい。
個人的には /icons/typescript.icon TypeScript を入れて推進していきたい強い気持ちはあったが、まぁ時間的に盛り沢山になってしまうので、直接はやめておいて実例紹介程度になるかもなぁおもった。それかしれっと最初から TypeScript で書いてもらって後でネタばらしするとか…? ん〜〜覚えることを減らすみたいな観点だと、別な要素も入ってくるから案外プラマイ0なのかもしれないな。
ただフロントで使える技が、バックエンドでも使えるし逆も然りみたいな体験は、覚えたことを満遍なく使えるという点においてすごくいいんじゃないかなとおもっているよ。