SlideShare a Scribd company logo
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
オタク×Node.js勉強会
(Node.js入門)
虎の穴 開発室
柳沢 衛
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
目次
1. はじめに
2. Node.jsのインストール
3. Node.jsとは
4. Node.jsでの開発
5. Node.jsのJavaScript
6. npmについて
7. Node.jsを使ってみる
8. webページの作り方
9. お題
10.勉強方法について
1
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
1. はじめに
2
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
自己紹介
• 柳沢 衛
• 今期見ているアニメ
- 宇宙よりも遠い場所
- りゅうおうのおしごと
- ヴァイオレット・エヴァーガーデン
• 今はまっていること
- はつゆきさくら
- この大空に、翼をひろげて
3
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
勉強会の目的
虎の穴での開発はRuby(Ruby on Rails)が中心で
すが、Node.jsでもサービスを作りたい。
社内で勉強会を開催しよう!
せっかくなので社外にも共有しよう!!
4
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
勉強会の対象者
• JavaScriptに触ったことがある方
• サーバサイドの開発に興味がある方
• 手軽にwebサービスを作ってみたい方
• Node.jsを勉強てみたい方
• オタクな方
5
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
勉強会のゴール
ちょっとしたwebサービスを作れるようになる
6
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
2. Node.jsのインストール
7
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
Windows・Mac
• 公式からダウンロード(8.9.4 LTS版)
- https://nodejs.org/ja/download/
node –v でバージョンが出れば成功
8
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
3. Node.jsとは
9
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特徴①:サーバサイドJavaScript
• Google V8 JavaScript Engine
- JIT Virtual Machine型のJavaScript実行エンジン
- C++で記載されたOSS
- 名前の由来はV型8気筒エンジン
10
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特徴②:シングルスレッド
• C10K問題の解消(クライアント1万台問題)
- マルチスレッドは同時アクセス数が増えると性能低下
> スレッド毎に必要なスタックメモリ
> コンテキストスイッチによる処理速度の低下
11
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
特徴③:ノンブロッキングI/O
• I/O処理を待たずに次の処理を行う
店レンジ
1 2
これ温めてください少々お待ちください
店レンジ
1 2
温め中
店レンジ
1 2
お待たせしました おせぇよ(怒)
店レンジ
1 2
これ温めてください少々お待ちください
店レンジ
1
2
お次お並びのお客様
どうぞ!
店レンジ
1
お待たせしました
お、この店員できる!
客2は既に買い物
を終えて退店
ブロッキングI/O ノンブロッキングI/O
12
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
メリットデメリット
• メリット
- フロントもサーバも一貫してJavaScriptで書ける
- ライブラリが豊富
- 非常に軽量
- 小さな処理を素早く処理するのが得意
• デメリット
- 同期処理が苦手
- 重い処理をすると全体のパフォーマンスが低下
13
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
使用事例
• PayPal
- Spring(Java)からNode.jsへ乗り換え
> https://www.infoq.com/jp/news/2014/01/paypal-java-javascript
• Linked
- Ruby on RailsからNode.jsへ乗り換え
> https://www.infoq.com/jp/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn
• Uber
> https://fa-works.com/blog/how-uber-scales-their-real-time-market-platform
• サイバーエージェント
> https://developers.cyberagent.co.jp/blog/archives/562/
• Netflix
> https://thenewstack.io/netflix-uses-node-js-power-user-interface/
14
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
web以外にできること
• デスクトップアプリケーション(Electron)
- VisualStudioCode
- Atom
- Slack
• フロントエンドの開発環境構築
- gulp
- Webpack
• 組み込み
- IoT
- ラズパイ
• サーバレスアプリケーション
- API Gateway + AWS Lambda + Node.js
15
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
4. Node.jsでの開発
16
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
webフレームワーク
• Express
- ほぼデファクトな軽量フレームワーク
• Koa
- Expressの開発チームが開発(非同期系の処理に配慮)
• Sails
- Ruby on Rails Likeなフレームワーク
• Meteor
- サーバもクライアントもコードが共有できる、フルスタック
フレームワーク
17
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
開発環境について
• エディター
- VisualStudioCode(MS製)
- Atom
- Brackets(Adobe製)
- Sublime
• 統合開発環境(IDE)
- Eclipse
- WebStorm
• WEB IDE
- AWS Cloud9
- Eclipse che
18
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
5.Node.jsのJavaScriptについて
19
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ES2017(ES8)対応
• 現在の最新版(v9.6.1)では100%対応
- 対応状況はこちら http://node.green/
20
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
CoffeeScript
• coffee-scriptパッケージを入れるとビルド無しで使用
可能
• 実行結果
$coffee main.coffee
Hello 0
Hello 1
Hello 2
Hello 3
Hello 4
Hello 5
21
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
6. npmについて
22
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
npmとは
• ライブラリやパッケージを管理するツール
言語 コマンド名
Python pip
PHP composer
Ruby gem
23
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
npmの使い方(事前準備)
• Package.jsonの作成
$ mkdir npmtest
$ cd npmtest
$ npm init
〜〜中略(全部EnterでOK)〜〜
$ ls
package.json
package.jsonが作成されている
24
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
パッケージのインストール
• 指定したパッケージをインストール
• 依存パッケージを全てインストール
$ npm install coffee-script
~(中略)~
$ls
node_modules package-lock.json package.json
インストールされた
パッケージが入ってる
$ npm install
globalにインストールしたい場合は
npm install –g coffee-script
25
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
package.jsonの中身
"name": "npm-test", // アプリケーションの名前
"version": "1.0.0", // アプリケーションのバージョン
"description": "", // アプリケーションの説明
"main": "index.js", // エンドポイントのファイル
"scripts": { // エイリアスコマンド
"test": "echo "Error: no test specified"&&exit 1"
},
"author": "", // 作者名
"license": "ISC", // ライセンス
"dependencies": { // 依存しているライブラリ群
"coffee-script": "^1.12.7"
}
npm run test で実行
パッケージのバージョンパッケージ名
26
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
よく使うnpm
パッケージ名 用途
express webフレームワーク
passport 認証ライブラリ
jade テンプレートエンジン
bluebird Promise拡張
gulp タスクランナー
eslint 静的検証ツール
sequelize ORM
27
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
7. Node.jsを使ってみる
28
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ワークスペースの準備
• 下記URLをクローン
• クローンができない方はこちらにアクセス
- https://github.com/toranoana/nodejs-study
$ git clone https://github.com/toranoana/nodejs-study.git
ここからダウンロード
29
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
アニメ情報取得ツール
• アニメ情報取得API
- http://api.moemoe.tokyo/anime/v1/master/2018/1
※ 今期のアニメ一覧がJSONで取得できます
アニメ情報をオブジェクト
の配列で返す
一つのアニメ情報
30
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ソースコード
31
var http = require('http');
var url = 'http://api.moemoe.tokyo/anime/v1/master/2018/1';
http.get(url, function(res) {
var body = '';
res.setEncoding('utf8');
res.on('data', function(chunk) {
body += chunk;
});
res.on('end', function() {
console.log(JSON.parse(body));
});
});
• getAnimeData.js
Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 32
実行結果
$ node getAnimeData.js
[ { title_short2: '',
twitter_account: 'milkyholmes',
public_url: 'https://sp.bushiroad.com/special_tv/',
title_short1: 'ミルキィホームズ',
sex: 0,
twitter_hash_tag: 'milkyholmes',
id: 673,
sequel: 5,
created_at: '2018-01-07 20:29:38.0',
city_name: '',
cours_id: 17,
title: '探偵オペラ ミルキィホームズ アルセーヌ 華麗なる欲望',
city_code: 0,
title_short3: '',
updated_at: '2018-01-07 20:29:38.0' },
…
…
… ]
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
8. webページの作り方
33
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
テンプレートエンジン
• Jade(Pug)
- haml形式で記述
• EJS
- JavaのJSPやRubyのERBに似ている
• Mustache.js
- 多言語で開発されているので一度覚えると流用できる
• Handlebars
- Mustache互換
• Hogan
- Twitterが開発
今回はEJSを使用!
34
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
• ワークスペースの移動
• EJSのインストール
35
EJSを使用したwebページ作成(準備)
$ cd learn
$ pwd
/・・・・・・/nodejs-study/learn
$ ls
learn-ejs.js learn-template.ejs
$ npm install ejs
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ソースコード(サーバサイド)
36
• learn-ejs.js11行目辺りを下記に修正
server.on('request', function(req, res) {
// template.ejsをUTF8で読み込む
var template = fs.readFileSync('./learn-template.ejs', 'utf-8');
// templateに変数の値を埋め込む
var page = ejs.render(template, data);
res.writeHead(200, {'Content-Type': 'text/html; charset=UTF-8'});
res.write(page);
res.end();
});
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
ソースコード(テンプレート)
37
<%# ヘッダー %>
<h1><%= header %></h1>
<%# アニメ数分ループ %>
<% for (anime of animes) { %>
<div class="div_block">
<div class="div_header">
<%= anime.title %>
</div>
<img src="<%= anime.image %>" />
<p>
制作会社:<%= anime.production %>
</p>
</div>
<% } %>
• learn-template.ejsの14行目辺りに追加
Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 38
実行結果
• コマンドを実行
• ブラウザで http://localhost:3000 にアクセス
$ node learn-ejs.js
Server runnning at http://127.0.0.1:3000/
※ 終了は ctrl + z
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
9. お題(20分)
• お題1(難易度:★☆☆)
- Web APIで取得したデータをブラウザに表示する
• お題2(難易度:★★★)
- Web APIで取得したデータを見栄えよくブラウザに表示する
39
http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
10. 勉強方法
• 書籍
- JS+Node.jsによるWebクローラー/ネットエージェント開発
テクニック
- サーバサイドJavaScript Node.js入門
• web
- JavaScript Promiseの本
> http://azu.github.io/promises-book/
- express実践入門
> https://gist.github.com/mitsuruog/fc48397a8e80f051a14
5
• Udemy
- Node.js + Expressで作るWebアプリケーション実践講座
> https://www.udemy.com/web-application-with-nodejs-
express/
40
Copyright (C) 2018 Toranoana Inc. All Rights Reserved.
おしまい
41

More Related Content

PPTX
2018/2/20 Kotlin勉強会
虎の穴 開発室
 
PPTX
2018/1/30 Django勉強会
虎の穴 開発室
 
PDF
Kotlinではじめる Webアプリケーション入門
虎の穴 開発室
 
PPTX
RubyWorld Conference 2017 虎の穴ランチセッション
虎の穴 開発室
 
PDF
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴 開発室
 
PDF
GitHub APIとfreshで遊ぼう
虎の穴 開発室
 
PDF
【とらラボLT】go言語でのweb apiの作り方3選
虎の穴 開発室
 
PDF
【20220120 toranoana.deno#4】denoでffiの続き
虎の穴 開発室
 
2018/2/20 Kotlin勉強会
虎の穴 開発室
 
2018/1/30 Django勉強会
虎の穴 開発室
 
Kotlinではじめる Webアプリケーション入門
虎の穴 開発室
 
RubyWorld Conference 2017 虎の穴ランチセッション
虎の穴 開発室
 
【とらのあなラボ Tech Day #3】新規システムにおける技術選定〜GoとgRPCを採用した話〜
虎の穴 開発室
 
GitHub APIとfreshで遊ぼう
虎の穴 開発室
 
【とらラボLT】go言語でのweb apiの作り方3選
虎の穴 開発室
 
【20220120 toranoana.deno#4】denoでffiの続き
虎の穴 開発室
 

What's hot (20)

PDF
【20211202_toranoana.deno#3】denoでFFI
虎の穴 開発室
 
PDF
drecomにおけるwinning the metrics battle
Mitsuki Kenichi
 
PPTX
Introduction to JIT Compiler in JVM
Koichi Sakata
 
PDF
ドリコムを支える課金ライブラリを支えるJenkins
Go Sueyoshi (a.k.a sue445)
 
PDF
通販開発部の西田さん「通販開発マネジメントの5ルール」
虎の穴 開発室
 
KEY
activerecord-turntable
Drecom Co., Ltd.
 
PDF
AWS SDK for Smalltalk
Sho Yoshida
 
PDF
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
Drecom Co., Ltd.
 
PDF
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
Go Sueyoshi (a.k.a sue445)
 
PDF
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
 
PDF
愛せよ、さもなくば捨てよ。
Sho Yoshida
 
PPTX
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
 
PDF
20170421 tensor flowusergroup
ManaMurakami1
 
PDF
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
 
PDF
Deno で始めるフロントエンド
虎の穴 開発室
 
PPTX
Redshift Spectrumを使ってみた話
Yoshiki Kouno
 
PDF
RUNNING Smalltalk - 実践Smalltalk
Sho Yoshida
 
PPTX
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
 
PDF
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
 
PDF
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
虎の穴 開発室
 
【20211202_toranoana.deno#3】denoでFFI
虎の穴 開発室
 
drecomにおけるwinning the metrics battle
Mitsuki Kenichi
 
Introduction to JIT Compiler in JVM
Koichi Sakata
 
ドリコムを支える課金ライブラリを支えるJenkins
Go Sueyoshi (a.k.a sue445)
 
通販開発部の西田さん「通販開発マネジメントの5ルール」
虎の穴 開発室
 
activerecord-turntable
Drecom Co., Ltd.
 
AWS SDK for Smalltalk
Sho Yoshida
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
Drecom Co., Ltd.
 
社内ツールが支えるドリコムの社内勉強会文化 #metabenkyokai
Go Sueyoshi (a.k.a sue445)
 
Mobage を支える Ruby の技術 ~ 複数DB編 ~
Naotoshi Seo
 
愛せよ、さもなくば捨てよ。
Sho Yoshida
 
GraalVMを3つの主機能から眺めてみよう(Oracle Groundbreakers APAC Virtual Tour 2020 講演資料)
NTT DATA Technology & Innovation
 
20170421 tensor flowusergroup
ManaMurakami1
 
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
 
Deno で始めるフロントエンド
虎の穴 開発室
 
Redshift Spectrumを使ってみた話
Yoshiki Kouno
 
RUNNING Smalltalk - 実践Smalltalk
Sho Yoshida
 
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
 
僕とヤフーと時々Teradata #prestodb
Yahoo!デベロッパーネットワーク
 
はじめようVue3!ハンズオンでとらのあなラボのフロントエンドを学ぶ_20210611_TechDay#1
虎の穴 開発室
 
Ad

Similar to オタク×Node.js勉強会 (20)

PDF
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
 
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
PDF
SocketStream入門
Kohei Kadowaki
 
PDF
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
 
PPT
Node.js で Web アプリ開発
Tatsumi Naganuma
 
PDF
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
 
PPTX
how to create a web server with a raspberry pi
nshmzlose
 
PDF
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 
PDF
Aiming study#6pdf
Koutaro Chikuba
 
PDF
Nodejuku01 ohtsu
Nanha Park
 
PDF
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
PPTX
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
PDF
JS開発環境を晒す。
Eiji Kuroda
 
PDF
Nodeにしましょう
Yuzo Hebishima
 
ODP
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 
PDF
LT#7 Hello coffeeしてきた
Shingo Inoue
 
PPT
第1回鹿児島node.jsの会資料_内村
Koichi Uchimura
 
PPTX
Hokuriku.net 2013 01-26 node.js
Tadahiro Ishisaka
 
PPTX
Develop Web Application with Node.js + Express
Akinari Tsugo
 
ODP
node.js koとhtml5とwebsocketsと
scdn
 
Node.jsでブラウザメッセンジャー
Yahoo!デベロッパーネットワーク
 
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
 
SocketStream入門
Kohei Kadowaki
 
非エンジニアが MENstackでWebアプリをつくった話 #nodejs
Yusaku Kinoshita
 
Node.js で Web アプリ開発
Tatsumi Naganuma
 
Node.js Tutorial at Hiroshima
Yoshihiro Iwanaga
 
how to create a web server with a raspberry pi
nshmzlose
 
node+socket.io+enchant.jsでチャットゲーを作る
Kiyoshi SATOH
 
Aiming study#6pdf
Koutaro Chikuba
 
Nodejuku01 ohtsu
Nanha Park
 
Node.js を選ぶとき 選ばないとき
Ryunosuke SATO
 
13016 n分で作るtype scriptでnodejs
Takayoshi Tanaka
 
JS開発環境を晒す。
Eiji Kuroda
 
Nodeにしましょう
Yuzo Hebishima
 
今流行りのウェブアプリ開発環境Yeoman
tomo_masakura
 
LT#7 Hello coffeeしてきた
Shingo Inoue
 
第1回鹿児島node.jsの会資料_内村
Koichi Uchimura
 
Hokuriku.net 2013 01-26 node.js
Tadahiro Ishisaka
 
Develop Web Application with Node.js + Express
Akinari Tsugo
 
node.js koとhtml5とwebsocketsと
scdn
 
Ad

More from 虎の穴 開発室 (20)

PDF
FizzBuzzで学ぶJavaの進化
虎の穴 開発室
 
PDF
Railsのデバッグ どうやるかを改めて確認する
虎の穴 開発室
 
PDF
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴 開発室
 
PDF
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
虎の穴 開発室
 
PDF
toranoana.deno #6 アジェンダ 採用説明
虎の穴 開発室
 
PDF
Deno 向け WEB 開発用のツールを作ったので 紹介します
虎の穴 開発室
 
PDF
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
 
PDF
GCPの画像認識APIの紹介
虎の穴 開発室
 
PDF
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
虎の穴 開発室
 
PDF
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
虎の穴 開発室
 
PDF
セキュリティを強化しよう!CloudArmorの機能解説
虎の穴 開発室
 
PDF
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
 
PDF
Amplify Studioを使ってみた
虎の穴 開発室
 
PDF
いいテスト会 (スプリントレビュー) をやろう!
虎の穴 開発室
 
PDF
【Saitama.js】Denoのすすめ
虎の穴 開発室
 
PDF
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴 開発室
 
PDF
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴 開発室
 
PDF
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
虎の穴 開発室
 
PDF
虎の穴ラボ エンジニア採用説明資料
虎の穴 開発室
 
PDF
虎の穴ラボにおけるリモートワークの働き方
虎の穴 開発室
 
FizzBuzzで学ぶJavaの進化
虎の穴 開発室
 
Railsのデバッグ どうやるかを改めて確認する
虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料 .pdf
虎の穴 開発室
 
Deno Deployと組み合わせるのに Upstashをおすすめしたい.pdf
虎の穴 開発室
 
toranoana.deno #6 アジェンダ 採用説明
虎の穴 開発室
 
Deno 向け WEB 開発用のツールを作ったので 紹介します
虎の穴 開発室
 
Supabase Edge Functions と Netlify Edge Functions を使ってみる – 機能とその比較 –
虎の穴 開発室
 
GCPの画像認識APIの紹介
虎の穴 開発室
 
【エンジニアの勉強法ハックLT- vol.7】ゲームから学んだ勉強のこと
虎の穴 開発室
 
社内DX推進!非エンジニア向けにプログラミング講座を実施してみた!
虎の穴 開発室
 
セキュリティを強化しよう!CloudArmorの機能解説
虎の穴 開発室
 
JavaScript LT会 〜 React.js Node.js歓迎 〜 Deno で やってみるweb開発
虎の穴 開発室
 
Amplify Studioを使ってみた
虎の穴 開発室
 
いいテスト会 (スプリントレビュー) をやろう!
虎の穴 開発室
 
【Saitama.js】Denoのすすめ
虎の穴 開発室
 
虎の穴ラボ Tech day#3 チームで戦う!とらのあな通販冬の大感謝祭でのフロント開発について
虎の穴 開発室
 
虎の穴ラボ TechDay#3 フルリモート率100%!リモートワークを可能にするマネージメント
虎の穴 開発室
 
【20220120 toranoana.deno#4】deno を使って「ログイン」するサービスを作る
虎の穴 開発室
 
虎の穴ラボ エンジニア採用説明資料
虎の穴 開発室
 
虎の穴ラボにおけるリモートワークの働き方
虎の穴 開発室
 

オタク×Node.js勉強会

  • 1. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. オタク×Node.js勉強会 (Node.js入門) 虎の穴 開発室 柳沢 衛
  • 2. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 目次 1. はじめに 2. Node.jsのインストール 3. Node.jsとは 4. Node.jsでの開発 5. Node.jsのJavaScript 6. npmについて 7. Node.jsを使ってみる 8. webページの作り方 9. お題 10.勉強方法について 1
  • 3. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 1. はじめに 2
  • 4. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 自己紹介 • 柳沢 衛 • 今期見ているアニメ - 宇宙よりも遠い場所 - りゅうおうのおしごと - ヴァイオレット・エヴァーガーデン • 今はまっていること - はつゆきさくら - この大空に、翼をひろげて 3
  • 5. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 勉強会の目的 虎の穴での開発はRuby(Ruby on Rails)が中心で すが、Node.jsでもサービスを作りたい。 社内で勉強会を開催しよう! せっかくなので社外にも共有しよう!! 4
  • 6. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 勉強会の対象者 • JavaScriptに触ったことがある方 • サーバサイドの開発に興味がある方 • 手軽にwebサービスを作ってみたい方 • Node.jsを勉強てみたい方 • オタクな方 5
  • 7. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 勉強会のゴール ちょっとしたwebサービスを作れるようになる 6
  • 8. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 2. Node.jsのインストール 7
  • 9. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. Windows・Mac • 公式からダウンロード(8.9.4 LTS版) - https://nodejs.org/ja/download/ node –v でバージョンが出れば成功 8
  • 10. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 3. Node.jsとは 9
  • 11. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 特徴①:サーバサイドJavaScript • Google V8 JavaScript Engine - JIT Virtual Machine型のJavaScript実行エンジン - C++で記載されたOSS - 名前の由来はV型8気筒エンジン 10
  • 12. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 特徴②:シングルスレッド • C10K問題の解消(クライアント1万台問題) - マルチスレッドは同時アクセス数が増えると性能低下 > スレッド毎に必要なスタックメモリ > コンテキストスイッチによる処理速度の低下 11
  • 13. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 特徴③:ノンブロッキングI/O • I/O処理を待たずに次の処理を行う 店レンジ 1 2 これ温めてください少々お待ちください 店レンジ 1 2 温め中 店レンジ 1 2 お待たせしました おせぇよ(怒) 店レンジ 1 2 これ温めてください少々お待ちください 店レンジ 1 2 お次お並びのお客様 どうぞ! 店レンジ 1 お待たせしました お、この店員できる! 客2は既に買い物 を終えて退店 ブロッキングI/O ノンブロッキングI/O 12
  • 14. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. メリットデメリット • メリット - フロントもサーバも一貫してJavaScriptで書ける - ライブラリが豊富 - 非常に軽量 - 小さな処理を素早く処理するのが得意 • デメリット - 同期処理が苦手 - 重い処理をすると全体のパフォーマンスが低下 13
  • 15. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 使用事例 • PayPal - Spring(Java)からNode.jsへ乗り換え > https://www.infoq.com/jp/news/2014/01/paypal-java-javascript • Linked - Ruby on RailsからNode.jsへ乗り換え > https://www.infoq.com/jp/news/2012/10/Ruby-on-Rails-Node-js-LinkedIn • Uber > https://fa-works.com/blog/how-uber-scales-their-real-time-market-platform • サイバーエージェント > https://developers.cyberagent.co.jp/blog/archives/562/ • Netflix > https://thenewstack.io/netflix-uses-node-js-power-user-interface/ 14
  • 16. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. web以外にできること • デスクトップアプリケーション(Electron) - VisualStudioCode - Atom - Slack • フロントエンドの開発環境構築 - gulp - Webpack • 組み込み - IoT - ラズパイ • サーバレスアプリケーション - API Gateway + AWS Lambda + Node.js 15
  • 17. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 4. Node.jsでの開発 16
  • 18. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. webフレームワーク • Express - ほぼデファクトな軽量フレームワーク • Koa - Expressの開発チームが開発(非同期系の処理に配慮) • Sails - Ruby on Rails Likeなフレームワーク • Meteor - サーバもクライアントもコードが共有できる、フルスタック フレームワーク 17
  • 19. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 開発環境について • エディター - VisualStudioCode(MS製) - Atom - Brackets(Adobe製) - Sublime • 統合開発環境(IDE) - Eclipse - WebStorm • WEB IDE - AWS Cloud9 - Eclipse che 18
  • 20. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 5.Node.jsのJavaScriptについて 19
  • 21. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. ES2017(ES8)対応 • 現在の最新版(v9.6.1)では100%対応 - 対応状況はこちら http://node.green/ 20
  • 22. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. CoffeeScript • coffee-scriptパッケージを入れるとビルド無しで使用 可能 • 実行結果 $coffee main.coffee Hello 0 Hello 1 Hello 2 Hello 3 Hello 4 Hello 5 21
  • 23. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 6. npmについて 22
  • 24. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. npmとは • ライブラリやパッケージを管理するツール 言語 コマンド名 Python pip PHP composer Ruby gem 23
  • 25. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. npmの使い方(事前準備) • Package.jsonの作成 $ mkdir npmtest $ cd npmtest $ npm init 〜〜中略(全部EnterでOK)〜〜 $ ls package.json package.jsonが作成されている 24
  • 26. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. パッケージのインストール • 指定したパッケージをインストール • 依存パッケージを全てインストール $ npm install coffee-script ~(中略)~ $ls node_modules package-lock.json package.json インストールされた パッケージが入ってる $ npm install globalにインストールしたい場合は npm install –g coffee-script 25
  • 27. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. package.jsonの中身 "name": "npm-test", // アプリケーションの名前 "version": "1.0.0", // アプリケーションのバージョン "description": "", // アプリケーションの説明 "main": "index.js", // エンドポイントのファイル "scripts": { // エイリアスコマンド "test": "echo "Error: no test specified"&&exit 1" }, "author": "", // 作者名 "license": "ISC", // ライセンス "dependencies": { // 依存しているライブラリ群 "coffee-script": "^1.12.7" } npm run test で実行 パッケージのバージョンパッケージ名 26
  • 28. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. よく使うnpm パッケージ名 用途 express webフレームワーク passport 認証ライブラリ jade テンプレートエンジン bluebird Promise拡張 gulp タスクランナー eslint 静的検証ツール sequelize ORM 27
  • 29. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 7. Node.jsを使ってみる 28
  • 30. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. ワークスペースの準備 • 下記URLをクローン • クローンができない方はこちらにアクセス - https://github.com/toranoana/nodejs-study $ git clone https://github.com/toranoana/nodejs-study.git ここからダウンロード 29
  • 31. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. アニメ情報取得ツール • アニメ情報取得API - http://api.moemoe.tokyo/anime/v1/master/2018/1 ※ 今期のアニメ一覧がJSONで取得できます アニメ情報をオブジェクト の配列で返す 一つのアニメ情報 30
  • 32. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. ソースコード 31 var http = require('http'); var url = 'http://api.moemoe.tokyo/anime/v1/master/2018/1'; http.get(url, function(res) { var body = ''; res.setEncoding('utf8'); res.on('data', function(chunk) { body += chunk; }); res.on('end', function() { console.log(JSON.parse(body)); }); }); • getAnimeData.js
  • 33. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 32 実行結果 $ node getAnimeData.js [ { title_short2: '', twitter_account: 'milkyholmes', public_url: 'https://sp.bushiroad.com/special_tv/', title_short1: 'ミルキィホームズ', sex: 0, twitter_hash_tag: 'milkyholmes', id: 673, sequel: 5, created_at: '2018-01-07 20:29:38.0', city_name: '', cours_id: 17, title: '探偵オペラ ミルキィホームズ アルセーヌ 華麗なる欲望', city_code: 0, title_short3: '', updated_at: '2018-01-07 20:29:38.0' }, … … … ]
  • 34. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 8. webページの作り方 33
  • 35. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. テンプレートエンジン • Jade(Pug) - haml形式で記述 • EJS - JavaのJSPやRubyのERBに似ている • Mustache.js - 多言語で開発されているので一度覚えると流用できる • Handlebars - Mustache互換 • Hogan - Twitterが開発 今回はEJSを使用! 34
  • 36. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. • ワークスペースの移動 • EJSのインストール 35 EJSを使用したwebページ作成(準備) $ cd learn $ pwd /・・・・・・/nodejs-study/learn $ ls learn-ejs.js learn-template.ejs $ npm install ejs
  • 37. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. ソースコード(サーバサイド) 36 • learn-ejs.js11行目辺りを下記に修正 server.on('request', function(req, res) { // template.ejsをUTF8で読み込む var template = fs.readFileSync('./learn-template.ejs', 'utf-8'); // templateに変数の値を埋め込む var page = ejs.render(template, data); res.writeHead(200, {'Content-Type': 'text/html; charset=UTF-8'}); res.write(page); res.end(); });
  • 38. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. ソースコード(テンプレート) 37 <%# ヘッダー %> <h1><%= header %></h1> <%# アニメ数分ループ %> <% for (anime of animes) { %> <div class="div_block"> <div class="div_header"> <%= anime.title %> </div> <img src="<%= anime.image %>" /> <p> 制作会社:<%= anime.production %> </p> </div> <% } %> • learn-template.ejsの14行目辺りに追加
  • 39. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 38 実行結果 • コマンドを実行 • ブラウザで http://localhost:3000 にアクセス $ node learn-ejs.js Server runnning at http://127.0.0.1:3000/ ※ 終了は ctrl + z
  • 40. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 9. お題(20分) • お題1(難易度:★☆☆) - Web APIで取得したデータをブラウザに表示する • お題2(難易度:★★★) - Web APIで取得したデータを見栄えよくブラウザに表示する 39 http://api.moemoe.tokyo/anime/v1/master/2018/1?ogp=1
  • 41. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. 10. 勉強方法 • 書籍 - JS+Node.jsによるWebクローラー/ネットエージェント開発 テクニック - サーバサイドJavaScript Node.js入門 • web - JavaScript Promiseの本 > http://azu.github.io/promises-book/ - express実践入門 > https://gist.github.com/mitsuruog/fc48397a8e80f051a14 5 • Udemy - Node.js + Expressで作るWebアプリケーション実践講座 > https://www.udemy.com/web-application-with-nodejs- express/ 40
  • 42. Copyright (C) 2018 Toranoana Inc. All Rights Reserved. おしまい 41