この記事は富士通クラウドテクノロジーズ Advent Calendar 2019 5日目の記事です。
4日目は @tmtms さんの MySQL Parameters を拡張した でした。
はじめに
- ※本記事は、 Node.js超入門[第2版] のサンプルコードをDocker上で動かす趣旨のものです。
よって、書籍で言及されている階層は触れません。
はじめまして。Node.jsを勉強中の新卒エンジニアです。
配属したてホヤホヤです。
今回は Node.js超入門[第2版] を使って勉強したときの話をします。
この書籍の内容をDockerで実現しようとした経緯ですが、そのまま「Dockerを理解したかったから」です。
弊社の研修でもDockerについて触れていただいたのですが、一度教わっただけでは理解が難しいものでした。
というわけで、サンプルコードを写経するだけになりがちだった(主観です)プログラミングの本で、ついでに理解を深めようという魂胆です。
今回は、書籍の Chapter5「値とデータをマスターしよう!」の、Section5-3~5-4 で書かれている、Node.jsでDBにアクセスして情報を取得し、ブラウザに表示するプログラムを紹介します。書籍が手元にある方はぜひ確認してみてください。
環境構築
必要な環境
- Linux
- Docker https://docs.docker.com/install/
- docker-compose https://docs.docker.com/compose/install/
- 今回のコードは GitHub にpushしました。以降、これを読んでいるものとして話を進めます。
参考記事:
解説
- 今回は、Node.jsもMySQLも、Dockerコンテナとして生成しています。
- Node.jsサーバーは、
docker-compose.yml
からDockerfile
を呼び出す形で書き、MySQLサーバーはdocker-compose.yml
内で定義しています。 -
docker-compose.yml
で指定するMySQLのDockerイメージは、MySQLのバージョンが8よりも前になるように古いものを使っています。
8以降はそのままだとNode.jsとの連携ができないようです。 -
init-mysql.sh
は、ローカル環境から、データベース用のコンテナにアクセスし、テーブル作成->データ挿入までを行っています。 - 実は、
docker/db/my.cnf
とdocker-compose.yml
の2か所でmysqld
を設定しているのですが、どちらかを消すとなぜかエラーになってしまうため(!)そのままにしてあります。いい方法ががありましたら教えていただけると幸いです・・・。 - 余談ですが、今回のコードは、いままで述べてきたものとは別のDockerfileでExpress-generatorを実行し、
docker cp
でローカルにファイルをコピーしてから作成していきました。
めんどうくさいことをしたなと自分で思います。
動作確認
- 上記のリポジトリをcloneします。
- リポジトリに移動
-
docker-compose up -d
でコンテナを立ち上げます。 - すこし(10秒ほど)時間をおきます。(コンテナが出来上がるまで待つ)
- ローカルで
./init-mysql.sh
を実行します。 -
localhost/hello
にアクセスし、docker/db/sql/002-insert-records.sql
で入れたデータが表示されていることを確認してください。 - ↓ こんなふうに表示されます。
おわりに
まず、Node.jsについての書籍を読み、サンプルを実行してみることで、Node.jsの挙動についてざっくりと理解できるようになりました。
加えて、それらをDocker上の環境で行うことで、
いままで「VirtualBoxより軽い仮想化するアプリケーション?」という認識だったDockerについての理解も深まりました。
Linuxのコンソールの扱いも以前よりわかるようになってきました。
やっと .profile
や .vimrc
をカスタマイズできるようになり、快適なUbuntu生活をしております。
また、試行錯誤して、調べたり人に聞いたりしていくことが学びへの近道だと実感しました。
例えば、MySQLのバージョンに関しては自分では調べきれず、先輩方の知恵をお借りしました。
ありがとうございました。
まだまだエンジニアとしては若輩者ですが、これからもっと勉強してスキルをつけ、開発をたくさんしていけたらと思います。