サーバーサイドJSとはB!こんにちは。ウェブエンジニアの毛利です。私がウェブ制作に携わるようになった2013年頃から2017年にかけて、ウェブ開発を取りまく環境が目まぐるしく変化していると感じます。ES6など、ウェブに関するキーワードはたくさんあります。ChromeがIEを抜いてしまいました。iPhoneの販売により、スマートフォンが急速に普及し、今やスマートフォンを持っているのが当たり前になっています。マルチブラウザ化、進む非Flash現在ではいわゆるレガシーブラウザ(IE6やIE7などシェア率の高かった古いブラウザ)の対応より、レスポンシブ、クロスブラウザ、マルチブラウザ対応が大きな割合を占めます。インターネットを閲覧するための環境が変わったのに合わせて、それを開発環境も変化をしていきました。OSも段階的にFlashを廃止していきました。スマートフォンの普及により、それに合わせたWeb設計が基準となったため、ウェブコンテンツの非Flash化が急速に進みます。注目されるJavaScriptそこで注目を集めるようになったのがJavaScript。リッチコンテンツの表現を担っていたFlashが廃止になり、JavaScriptでその代わりを行おう、という方向にシフトしていきました。そこで登場したのが数々のJavaScriptライブラリです。現在ウェブ制作の現場では当たり前のように使うようになったjQueryが最も有名です。そのjQueryも2016年に3.x系にメジャーアップデートし、そのコンセプトも以前とは異なり、レガシーブラウザの対応廃止し軽量化、パフォーマンス重視と大きく方向性がシフトしました。最近では制作をより効率化するかつパフォーマンスをよくするために様々なライブラリ、フレームワーク、実行環境が開発されています。その中でも「サーバーでJavaScriptを実行できる環境が作れる」node.jsに注目しました。「サーバーサイドJS」と呼ばれるnode.js。それは一体何なのか、どんな特徴を持っているのか、Apacheを始めとしたいわゆるWebサーバーとはどう異なるのかをキーワードに注目します。node.jsとはサーバーでJavaScript実行するための環境のひとつです。現状ではサーバーサイドJSといえばnode.jsといっていいほど代表的なものとなっています。「サーバーでJavaScript実行するための環境」というのがいまいち要領を得ない部分があったのですが、個人的にはApacheやnginxといったWebサーバーを比較対象にして考えました。・node.jsを使えば、サーバー側でjavaScriptを実行することができるようになる。・javaScriptでWebサーバーを立てる事ができるので、ウェブサイトを公開する環境としても使える。捉え方によっては、少し乱暴ですがひとつの機能として「Apacheの代わりのようなことができる」という理解です。実際には特徴や得意なことが全く異なるため、完全な代替とは少し異なります。node.jsが台頭した背景C10K(クライアント1万台)問題サーバーのハードウェアスペックの問題なくても、サーバーパンクを起こす現象のことです。問題としてはこれが大きく、解決策のひとつとしてnode.jsが登場しました。C10K問題ノンブロッキングI/OこれまでのApacheではリクエスト処理は1つのクライアント処理に対し1つのスレッドを立てて処理をしています。これではクライアントが大量になったとき、スレッドもクライアントの数だけ立ち上がり、メモリを大量消費します。(同期I/O)対策としてイベント駆動型構造にすることでシングルスレッドのまま処理を行うことにしました。イベント駆動型とは、1つのスレッドで多数のリクエストをループして処理をすることです。これはNginxにも取り入れられている方法です。(非同期I/O)今度は負荷の大きな処理をした時、それを待つために処理が遅くなってしまいます。その処理を待っている間別の処理をしてしまおう、というのがノンブロッキングの考え方です。Node.jsは非同期、ノンブロッキングI/Oを採用しています。ノンブロッキングI/Onode.jsでできることでは、node.jsは何ができて何が得意なのか、何が苦手なのか、どういう使い方ができるのかに触れていきます。メリット・言語間の壁がないフロントエンド、バックエンドを同様の言語で扱えることで習熟コストを下げることが可能です。フロントエンドエンジニアがサーバを扱う敷居が下がったともいえるでしょう。・リアルタイム処理(非同期)に長けているノンブロッキングI/Oを採用しているため非同期処理が得意です。スペックの低いサーバーでもシングルスレッドで性能を十分に発揮できます。リアルタイムアプリケーション(チャットアプリやリアルタイム通知など)に向いています。デメリット・導入コスト有名な共用サーバーなどではデフォルトでnode.js環境を提供していないことがほとんどです。導入にはVPSなどの環境でサーバーを構築する必要があります。・サーバースペックが余るシングルスレッド駆動のため、デフォルトのままではマルチコアのサーバーの性能をフルに活かせません。・リアルタイムWeb、通知ソーシャルゲームなど更新や通知などをリアルタイムで行うような処理。[大図解]ピグライフはこう動いている・チャットWebアプリSocket.ioを利用して簡単にチャットシステムを構築チャットを作りながら学ぶSocket.IOnode.jsを使うフレームワーク「Express」node.jsにはExpressというフレームワークがあります。node.jsを使った開発を最小限かつ高速に実現することができます。Engineを使うことができるため、HTMLで見た目をつくりながらnode.jsを使ったWebアプリケーションを構築することができます。公式node.jsを取り入れている企業PaypalやNASAはバックエンドにnode.jsを取り入れています。これだけ大きな企業、組織が実際に取り入れているということは、今後Webにおいてこれがメインフレームになる可能性を秘めていると考えられます。APIまとめ今回はnode.jsについて知識を得るために大事なポイントに触れていきました。C10K問題から、それを解決するためのひとつとしてnode.jsが出てきましたが、それも既に3〜4年ぐらい前の話で、今ではもう開発選択肢の1つとして当たり前のように取り入れられているという実感があります。次回はnode.jsをnginxで動かしているサーバで実行できる環境を構築していきます。POSTS新着TIPSvol.1012019年ロゴマークをリニューアルしたブランド5選2019年にロゴをリニューアルした企業6選vol.100BOELのスタッフが大切にしていることBOELのスタッフがオフィスでの過ごし方を通じてたいせつにしていることをご紹介します。7選WEB業界でよく使う単語の中でよくあるスペルミスと間違えやすい点をいくつかリストアップします。vol.98ブランディングで動画を活用するメリットと成功のポイント!ブランディング動画を活用するメリットや成功のポイントを事例と合わせて紹介します。幾何学フォントTOP32019年の幾何学書体トップ3をご紹介いたします。一時的な流行ではなく多くのサイトで一般的に見られるようになったWebデザインvol.43動画コーデックをマスターしよう映像データのエンコード、動画メディア配信の基礎からターゲットに合った圧縮方法vol.45すぐに使える!アコーディオンメニューの実装アコーディオンメニューをよりリッチに。日本古来より伝わる色。デザイン、アートディレクションなどクリエイティブワークを得意とするブランディングオフィスです。ブランディング・Webサイト・印刷物、システム開発等を通じ、ビジネス価値向上をお手伝いします。お問い合わせをするオンライン見積もりフォームさまざまなブランディング事案に対応します。お気軽にご依頼ください。PERMISSION.。