[N予備校プログラミングコース] 第3章 同期・非同期I/O、例外処理、HTTPサーバ、HTMLテンプレート、Herokuでサービス公開

親知らず抜いて発熱して寝込んだり、farman の開発にかかりっきりになったりでしばらく止まっていたが、N予備校プログラミングコース 第3章の続き。
Node.js の学習。

Node.js の同期・非同期I/O、例外

まずはファイルアクセスを通じての同期・非同期のI/O周りと、例外の学習。
この辺は普段C/C++やっていると、Node.js で非同期処理書くのメチャクチャラクだなーと感心してしまう。

あとこれは Node.js というより JavaScript だが、例外の finally 句も便利。
Python の for や while の後 の else と同じくらい、C++ に欲しい機能なのだが、C++20 でも採用されないのかなぁ。
ってか C++20 が一般的に使われるようになる頃まで、自分は現役で C++ 書いてるんだろうか?

Node.js で Web サーバ

続いて Node.js で仮想マシン上に Web サーバを立ち上げた。
また、ログ出力や HTTP メソッド(GET/POST) 別に処理を行うプログラムを書いた。
昔 Perl で CGI 書いてた頃なんかは、サーバは Apache インストールして ini ファイル編集して、hoge.cgi とか書いて cgi-bin フォルダに置いて…なんてやっていたが、Node.js だと Web サーバとサーバ上で動くプログラムが一体となって動かせる。
レスポンスコードによって動かす処理を変えるなんてのも朝飯前だ。

古い知識しか持ち合わせてないせいだろうが、何だか感動すら覚える。

Node.js のHTMLテンプレートエンジンPug

HTMLフォームを使った簡単なアンケートサイトを作り、それをベースにHTMLテンプレートエンジンを使って、URL によってフォームの表示内容を書き換える処理も学習した。
Node.js のHTMLテンプレートエンジンは幾つかあるようだが、ここでは Pug というエンジンを使った。
パグ犬のアイコンがかわいい。

なお Pug は標準モジュールではないので、Node.js とは別にインストールが必要だが、Node.js だとローカルのディレクトリにインストールすることができるので、複数の Web アプリを同一サーバで動かす場合であっても、他のアプリに影響しないのはよく考えられているなぁと思う。
また、その Web アプリでどんなモジュール(Node.js ではパッケージと呼ぶらしい)の、どのバージョンが使われているのか、というのは package.json というファイルに記載されており、package.json のあるディレクトリで $ npm install と入力するだけで必要なパッケージをちゃんとバージョンを合わせてインストールしてくれる。
これはメチャクチャ便利な仕組みだと思う。

Heroku で公開

そして、ここまで作った Web アプリを Heroku で公開した。
Heroku は初めて使ったが、git でデプロイ(公開)できる仕組みは面白いと思った。

作ったアンケートサイトは↓のようなものである。
スクリーンショット 2018-05-22 17.04.48.png
項目を入力して「投稿」ボタンを押すと POST メソッドが呼ばれ、項目の内容が表示される。
スクリーンショット 2018-05-22 17.04.54.png
作った Web アプリを(独自ドメインは考えないでひとまず)無償で公開する方法としては、AWS や GCP の無償枠を使うとか、余ってるPCをサーバにするみたいな方法もあるだろうが、いずれもWebアプリ初学者に取って学習コストは高い。
そういう意味では、Heroku は結構使えそうだ。

この後の予定

この後は認証やら DB やら Cookie といった、Webアプリを学ぶには避けて通れない機能の学習、さらに XSS や CSRF 等の脆弱性対策まで学ぶ。
ここまでがサーバーサイドプログラミング「入門」なので、実践編はさらに高度になるだろう。

移植手術前処置を受け始めると起き上がるのも億劫になってしまうので、それまでにせめて入門編は終わらせたいところだ。

この記事へのコメント