せっかくならデキるエンジニアになりたい

SIerになったので、デキる技術者を目指していろいろ試してみたときの備忘録

memorandum

Let's be a good engineer!

Node.jsでExpressを使ってWebサーバーを立てるまで

なんでNode.js?

なんだかモダンな技術だから触ってみたい。(新しいものに弱いのです)
Webアプリケーションのサーバーサイドを作れるから。(一応バックエンドエンジニアなので…)
JavaScriptを使えるようになりたいから。(Web系やっててJavaScript読めないなんてもう言いたくない)

っていう、なんだか不純な動機です!٩( 'ω' )و

本当にモダンなの?

これはNode.js調べ始めた当初、初版が2009年(約10年前)と書いていて、
(´-`).。oO(思ったより最近の技術では…ないかも…!?)
と思っていました。

このサイト→『JavaScriptはなぜトレンドが毎年変わると思われていたのか』でもジュラ紀JavaScriptとして名前が上がっていてちょっと笑いました。

ただ、数年前のJavaScriptルネッサンス大激動の時代を乗り越えて安定期に入った現在の段階で、サーバーサイドで動くJavaScriptの処理系として名を馳せ、日本でもNode.jsを取り入れようとするサービスが増えてきた…という意味でのモダンなのかなぁと、個人的には想像しています。

Webサーバー立てるって言っても、どこまで自分で実装しないといけないの?

Nodeって、JavaScriptを動かすためのプラットフォームっていうだけで、別にnginxみたいなWebサーバーのソフトウェアでもなければ、Tomcatみたいなアプリケーションサーバーのソフトウェアでもない…
という前知識はあったので、

( ͡° ͜ʖ ͡°).。oO(えっ、Webサーバー自作するの…?)

混乱。

( ◠‿◠ ).。oO(いやいや、流石にWebサーバーをNodeで作らないといけないなら、OSSとかでNode.js製のWebサーバーを誰かが作っているはず…!)

ということで調べてみるも存在せず。撃沈。大混乱。

とか色々してたら先輩が助け舟を出してくれました。

f:id:moeka-dev:20180415202755p:plain f:id:moeka-dev:20180415202800p:plain

フォロワーさんも見兼ねたのかアドバイスをくれました…

ありがたさの極み…

なんとなくどういうものかのイメージはできたので、とりあえず深いところは考えずに使えるところまで立ち上げてみようと思います!

環境構築

Node.jsのバージョン管理

Nodeをローカル環境で使えるようにしよう!と言ったときに、まずはじめに考えるのは公式サイトからのダウンロード&インストールなんですが、

Node.js公式サイト

そもそもNodeはたくさんのバージョンがあって、モダンだからバージョンアップも激しくて、さらにバージョンが違うと結構動かないことが多いとか色々あるらしいのです。
ですので、Nodeのバージョン自体ちゃんと管理したり、プロジェクトごとにチャチャっと切り変えたりしたいよねって言う要望を叶えるバージョン管理ツール経由で、Node.js本体をインストールしようと思います。

しかしNodeのVersionManagerって、作者違いで色々あるみたいです。
パッと調べて出てくるだけでも以下の三つくらいでしょうか。

Readmeとかちょっと読んだだけですが、できることは同じだけど、それぞれ使い勝手とか安定性とかがちょっとずつ違う…から好みのものを選べば良いと思われます!

えいやっとnodebrewを選んでみました。

nodebrewのインストール

$ curl -L git.io/nodebrew | perl - setup

githubのReadmeに書かれていたまま打ちました。perlで書かれてるんですね〜

あと、{ホームディレクトリ}/.nodebrew/current/binにパス通せって書いてますね。通します。

~/.bashrc

export PATH=$HOME/.nodebrew/current/bin:$PATH

この設定で何やってるかはこれで把握しました→ PATHを通すために環境変数の設定を理解する (Mac OS X)

パスを反映します。

$ source ~/.bashrc

ここにパス通したってことは、nodebrewを通してインストールしたnodeはこのパスのあたりに格納されるのでしょう、多分。

続けてnodebrewでnode本体をインストールしてみます。

$ nodebrew install-binary stable

なんでinstallじゃなくてinstall-binaryかというと、こういうことです。
install と install-binary でどれくらい違うのか試す。試した。
バイナリ最強説。。

実はインストールしただけでは使えなくて、useコマンドで使うバージョンを指定する必要があるそうです。

$ nodebrew use stable

nodebrewの中身

ここでちょっと、気になったので、.nodebrewの中身を拝見します。

$ cd ~/.nodebrew
$ ls -l
total 48
drwxr-xr-x  (省略) completions
lrwxr-xr-x  (省略) current -> /Users/{UserName}/.nodebrew/node/v8.11.1
drwxr-xr-x  (省略) default
drwxr-xr-x  (省略) iojs
drwxr-xr-x  (省略) node
-rwxr-xr-x  (省略) nodebrew
drwxr-xr-x  (省略) src

な、なるほどシンボリックリンク…!(ですよね!?)
ということは、さっきuseコマンドで使えるようにしたっていうのは、ただ~/.nodebrew/currentにシンボリックリンク貼ってただけなんですねきっと。

ちなみにさっきパス通したところも見ておきます。

$ cd ~/.nodebrew/current/bin
$ ls -l
total 69216
-rwxr-xr-x  (省略) node
lrwxr-xr-x  (省略) nodebrew -> /Users/{UserName}/.nodebrew/nodebrew
lrwxr-xr-x  (省略) npm -> ../lib/node_modules/npm/bin/npm-cli.js
lrwxr-xr-x  (省略) npx -> ../lib/node_modules/npm/bin/npx-cli.js

使うコマンドをまとめてくれている…超親切…だからここにパス通せって言ってたんですね…納得…

そしてちゃんとnpmも入ってました。npxってなんだろう…?

npx
npm 5.2.0の新機能! 「npx」でローカルパッケージを手軽に実行しよう

npmの公式サイトってこんな可愛いサイトだったんですね( ´∀`)
どうやら、npmで取得できるパッケージをちょっとテストしたいときに使える便利コマンドみたいです。node package executeってことですね!

Webサーバーを立ててみる

Nodeが動く環境をローカルで作ったので、いよいよWebサーバーを立ててみます。

どうやら、爆速でWebサーバーを立てられる、Node.js界のデファクトスタンダードフレームワークがあるようです。

Express

コマンドラインExpress application generatorを使ってプロジェクトを作成する方法が載っていますが、私はIntelliJ民なので、IDEAのNodeJSプラグインから作ってみました。

インストールしてきたプラグインはこれです。 f:id:moeka-dev:20180415202804p:plain

あとは、IntelliJの公式ページにQuick start with a Node.js application というガイドラインがあったのでその通りに進めていきます。

new projectから「Node.js Express App」を選択し、 f:id:moeka-dev:20180415202809p:plain

LearnNodeJSという名前のプロジェクトを作ります。
NodeInterpreterは、さっきnodebrewでインストールしたときにパス通したところですね。 f:id:moeka-dev:20180415202815p:plain

Express application generatorのページを見ると、なんとこの状態でもう動くらしいので、実行してみます。 f:id:moeka-dev:20180415202823p:plain

うおお、本当に爆速でWebサーバーが立ちました!( ✌︎'ω')✌︎

まとめ

Node.js、Webサーバー立てるだけならマジで爆速。

次にやりたいこと

generatorに丸投げしてしまった部分を解読