- 投稿日:2020-01-18T17:07:29+09:00
CentOS 8にNode.js 10をインストール(AppStream)
はじめに
Application Stream(AppStream)を利用してCentOS8にNode.js 10をインストール
参考:RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログサポート
本手法で導入した場合、Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portalより、2021-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
インストール
# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) # yum install -y @nodejs:10 ... 略各種確認
# which node /usr/bin/node # node -v v10.16.3 # yum module info nodejs:10 Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 0:01:24 ago on Sat Jan 18 08:05:14 2020. Name : nodejs Stream : 10 [d][e][a] Version : 8000020191007212731 Context : 55190bc5 Architecture : x86_64 Profiles : common [d] [i], development, minimal, s2i Default profiles : common Repo : AppStream Summary : Javascript runtime Description : Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. Artifacts : nodejs-1:10.16.3-2.module_el8.0.0+186+542b25fc.src : nodejs-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64 : nodejs-debuginfo-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64 : nodejs-debugsource-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64 : nodejs-devel-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64 : nodejs-devel-debuginfo-1:10.16.3-2.module_el8.0.0+186+542b25fc.x86_64 : nodejs-docs-1:10.16.3-2.module_el8.0.0+186+542b25fc.noarch : nodejs-nodemon-0:1.18.3-1.module_el8.0.0+14+a5a48e73.noarch : nodejs-nodemon-0:1.18.3-1.module_el8.0.0+14+a5a48e73.src : nodejs-packaging-0:17-3.module_el8.0.0+186+542b25fc.noarch : nodejs-packaging-0:17-3.module_el8.0.0+186+542b25fc.src : npm-1:6.9.0-1.10.16.3.2.module_el8.0.0+186+542b25fc.x86_64 Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
- 投稿日:2020-01-18T16:34:46+09:00
CentOS 8にNode.js 12をインストール(AppStream)
はじめに
Application Stream(AppStream)を利用してCentOS8にNode.js 12をインストール
参考:RHEL8のパッケージ構成 - BaseOSとApplication Stream - 赤帽エンジニアブログサポート
本手法で導入した場合、Red Hat Enterprise Linux 8 Application Streams Life Cycle - Red Hat Customer Portalより、2021-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
インストール
# cat /etc/redhat-release CentOS Linux release 8.1.1911 (Core) # yum install -y @nodejs:12/common ... 略各種確認
# which node /usr/bin/node # node -v v12.4.0 # yum module info nodejs:12 Failed to set locale, defaulting to C.UTF-8 Last metadata expiration check: 0:09:35 ago on Sat Jan 18 07:24:40 2020. Name : nodejs Stream : 12 [e] [a] Version : 8010020191122190621 Context : cdc1202b Architecture : x86_64 Profiles : common [i], development, minimal, s2i Repo : AppStream Summary : Javascript runtime Description : Node.js is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices. Artifacts : nodejs-1:12.4.0-2.module_el8.1.0+251+8afea200.src : nodejs-1:12.4.0-2.module_el8.1.0+251+8afea200.x86_64 : nodejs-debuginfo-1:12.4.0-2.module_el8.1.0+251+8afea200.x86_64 : nodejs-debugsource-1:12.4.0-2.module_el8.1.0+251+8afea200.x86_64 : nodejs-devel-1:12.4.0-2.module_el8.1.0+251+8afea200.x86_64 : nodejs-devel-debuginfo-1:12.4.0-2.module_el8.1.0+251+8afea200.x86_64 : nodejs-docs-1:12.4.0-2.module_el8.1.0+251+8afea200.noarch : nodejs-nodemon-0:1.18.3-1.module_el8.1.0+251+8afea200.noarch : nodejs-nodemon-0:1.18.3-1.module_el8.1.0+251+8afea200.src : nodejs-packaging-0:17-3.module_el8.1.0+251+8afea200.noarch : nodejs-packaging-0:17-3.module_el8.1.0+251+8afea200.src : npm-1:6.9.0-1.12.4.0.2.module_el8.1.0+251+8afea200.x86_64 Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled, [a]ctive
- 投稿日:2020-01-18T15:19:04+09:00
Express で簡単な WebAPI を作成
フォルダー構造
$ tree . ├── app.js └── routes └── index.jsapp.js//------------------------------------------------------------------------- // app.js // // Jan/18/2020 //------------------------------------------------------------------------- var express = require('express') var routes = require('./routes') var bodyParser = require("body-parser") var cfenv = require('cfenv') var app = express() app.use(bodyParser.urlencoded({ extended: true })) app.use(bodyParser.json()) app.use(express.static(__dirname + '/public')) var appEnv = cfenv.getAppEnv() app.post('/post_test',routes.post_test) app.listen(appEnv.port, '0.0.0.0', function() { console.log("server starting on " + appEnv.url) }) //-------------------------------------------------------------------------routes/index.js// ----------------------------------------------------------------------- /* routes/index.js Jan/18/2020 */ // ----------------------------------------------------------------------- exports.post_test = function(req,res) { var aa = 0 var bb = 0 if (req.body.aa) { aa = parseInt(req.body.aa,10) } if (req.body.bb) { bb = parseInt(req.body.bb,10) } var dict_aa = {} dict_aa["aa"] = aa dict_aa["bb"] = bb dict_aa["sum"] = aa + bb dict_aa["diff"] = aa - bb var str_out = JSON.stringify(dict_aa) res.send(str_out) } // -----------------------------------------------------------------------サーバーの起動
$ node app.js server starting on http://localhost:3000テストスクリプト
# URL=http://localhost:3000/post_test # curl -X POST -d aa="12" -d bb="45" $URL # echo # curl -X POST -H "Content-Type: application/json" \ -d '{"aa":"32", "bb":"41"}' $URL # echo # curl -X POST -H "Content-Type: application/json" \ -d@in01.json $URL # echo #in01.json{"aa":"52", "bb":"84"}実行結果
$ ./go_test.sh {"aa":12,"bb":45,"sum":57,"diff":-33} {"aa":32,"bb":41,"sum":73,"diff":-9} {"aa":52,"bb":84,"sum":136,"diff":-32}
- 投稿日:2020-01-18T13:14:50+09:00
Nuxt を winser でサービス化する
Nuxt で作成したアプリケーションを WinSer でWindowsサービス化しようとしたらいろいろはまったので備忘録として対処を残しておく。
背景
nodejs で作成したアプリケーションを Windows環境でサービス化するためのツールとして、 WinSer がある。
start コマンドとして「node index.js」のように node.exe を直接叩く場合は特に設定をする必要はないが、 NuxtJS のような専用の起動コマンドが存在するような場合に、npm や yarn からは起動できてもWindowsサービスとして起動できないということが発生する。対策
WinSer (で使用される nssm)は絶対パスか、パスが通ったコマンド出なければ実行できない(ように見える)。また「.cmd」拡張子のファイルは拡張子込みで記述する必要がある。
1. WinSer をインストールする
npm に上がっている WinSer はバグっているので修正されたものを拾う。
yarn add winser "git+https://github.com/LiberisLabs/winser.git"2. パスを通す
yarn へのパスを通す。
以下がもしないなら、サービスを実行するユーザーの環境変数の Path に追加する。そのユーザーで yarn をグローバルインストールしてあることが前提。C:\Users\<username>\AppData\Roaming\npmLocal System アカウントで実行するなら、システム環境変数に追加する。
3. package.json に winser 要のタスクを追記する
package.json"scripts": { "dev": "nuxt", "build": "nuxt build", "start": "nuxt start", "generate": "nuxt generate", "install-service": "winser -i -a --startcmd \"yarn.cmd nuxt start\" --set \"ObjectName .\\appuser password\"", "uninstall-service": "winser -r -x" }WinSer は標準では start をもとにサービスを作成するが、それでは動かないため --startcmd で start の代わりの実行コマンドを記述する。さらに、 --set で実行ユーザーとパスワードを指定する(Local System で実行するなら不要)。
やっていることは nuxt.cmd を叩いているだけだが、直接見つけられないため、yarn を叩くことで
nuxt.cmd を見つけている。サービス化した場合、サービスの起動停止を自動化したくなる。UACを無効化したくなるが、その必要はなく、特定ユーザーにサービスに係る権限を与える方法はこの辺りを参照する。
参考
- 投稿日:2020-01-18T11:55:21+09:00
Node.js の基礎とそのフレームワーク Express
Node.js とは何なのか
Node.js とは、簡単にいうと JavaScript をサーバーサイドで実行させてくれる存在です。フロントエンドも、バックエンドも1つの言語で実行でき、WEBサービス、スマートフォンアプリ、IoT関連の開発にも使用することができるみたいです。
インストール
まず Node.jsをインストールしていない人は、[Node.js公式サイト](https://nodejs.org/en/) から、LTS版をダウンロードしてインストール。
『node』 でJavaScriptを実行させる
コマンドラインでindex.jsが格納されているフォルダにpwdで移動し、そのフォルダ内のindex.jsを実行する。
node index.jsnodeだけでEnter押すと、JavaScriptコンソールで色々なコードを試せるようになるみたい。やめるときは .exit と入力するか、control + C を2回押すと終了します。
Node.js のいろんなAPI
Node.jsには様々な機能があり、その一覧が公式サイトのdocumentationで見れます。
https://nodejs.org/dist/latest-v12.x/docs/api/APIの1つ。 『File System』
FileSystemは、ローカルファイルとかにアクセスすることができるAPI。
今回は、Node.js の File System を使用して、ローカルファイルのコピーを使用します。
FileSystemを読み込む
qiita.js//jshint esversion:6 const fs = require("fs");※ const とは、var のようなもの。しかし、var が後から変更できるのに対して、constは後から変更できることができず、一度データを格納(代入?)するとずっとそのまま。
※コメントがないと、"const" is available in ES6 というエラーメッセージが出てきますが、コメントで//jshint esversion:6と記載することでエラーメッセージを回避することができます。
ファイルのコピーを作成する
qiita.js//jshint esversion:6 const fs = require("fs"); fs.copyFileSync("file.txt","copyfile.txt"); //fs.copyFileSync("コピーするファイル","コピーされたもののファイル名");※ file.txtのコピーを作成して、copyfile.txtを作成します。って意味。 ちなみに、すでにcopyfile.txtという名前のファイルが存在していた場合、上書き保存されるので注意。
コマンドラインで、実行する
node qiita.js※今回は、qiita.js というファイルにJavaScriptコードを記載していたので、そのファイルをコマンドライン上で実行する。
Expressフレームワーク
node.js をより使いやすくしたのがExpress フレームワークらしい。めっちゃざっくりだけど。
Expressのインストール
retrieved from Express.jp 公式サイト
https://expressjs.com/ja/starter/installing.html最後のところは『 npm install express 』だけでOKみたい。
Express をjsファイルで使用できるようにする
requireでExpressをロードし使用できるようにします。ついでにexpress()もappに格納します。
qiita.jsconst express = require("express"); const app = express();Expressでサーバーを作成する
ここが割と理解に苦しんだところ。
手順
========================
(JavaScript上)
1.まずExpressをロード
2.アクセスされた時のRespondを考える(ページ別)
3.listenでサーバーを指定
(コマンドラインにて)
4.node server.js で実行
(ブラウザ上にて)
5.http://localhost:3000/と入力し、サーバーに接続
6.respondの処理が実行される
(コマンドラインにて)
7.control + C で終了する========================
これが一応の流れで、下記が実際のコード。
server.js// jshint esversion:6 // expressをロード const express = require("express"); const app = express(); // localhost:3000 にアクセスされた時のRespond app.get("/",function(request, respond){ //ここでconsole.log(request);とするとrequestの内容みれる respond.send("Hello World"); }); // localhost:3000/profile にアクセスされた時のRespond app.get("/profile", function(request, respond){ respond.send("My name is Kibinag0. I'm from Japan."); }); //listenで待ち受け状態にする app.listen(3000, function(){ console.log("Server started on port 3000"); });・Request
ブラウザ?からサーバーにリクエストされる情報。
・Respond
サーバーにリクエストが来た時に、反応して実行する処理。
ちなみにサーバーにはスレッドモデル(Apache等)とイベントループ(Node.js等 シングルスレッドともいう)という種類があり、それぞれの違いはこちらが分かりやすかったため、参照。
https://dotinstall.com/lessons/basic_nodejs/26202・listen()
listenで待ち受け状態にする。このlistenがあることによってrequestを受け取ることができるようになる。
『res.sendFile』を使用してHTMLファイルでRespondする
今までは、"Hello world"とかいう文字列でRespondしていましたが、今回はres.sendFileを使用してHTMLファイルでRespondします。
server.js// リクエストがあったら、index.htmlファイルをrespondする app.get("/", function(req, res){ res.sendFile(__dirname + "/index.html"); });(__dirname + "/index.html")は、dirnameをちゃんと取得して、そのindex.htmlがどのディレクトリに格納されているのかを教えてあげる必要があるんですね。
body-parserを使用してformデータを取得する
HTMLファイルでFormを使用して、ユーザーにデータを入力してもらう。そして、そのデータを使用して何か処理を行う場合の方法です。
事前にbody-parserをインストール
npm install body-parserHTMLでフォームを作成
index.html<h1>Calculator</h1> <form class="" action="/" method="post"> <input type="text" name="num1" placeholder="First Number"> <input type="text" name="num2" placeholder="Second Number"> <button type="submit" name="submit">Calculate</button> </form>このフォームをサーバー側で
calculator.js// jshint esversion:6 // ロードする const express = require("express"); const bodyParser = require("body-parser"); const app = express(); // body-parserの使用 app.use(bodyParser.urlencoded({extended: true})); // index.html でrespondする app.get("/",function(req,res){ res.sendFile(__dirname + "/index.html"); }); // index.htmlのフォームでpostされた部分 app.post("/",function(req, res){ // bodyの中のnum1, num2を取得する var num1 = Number(req.body.num1); var num2 = Number(req.body.num2); var result = num1 + num2; res.send("The result of the calculation is " + result); }); app.listen(3000);Udemy AngelaさんのWEB DEVELOPMENT COURSE 『206. Processing Post requests with body-parser』より
サーバー更新自動化『nodemon』のすすめ
ちなみに、上記だとserver.jsファイルを更新するたびにコマンドラインでサーバー終了して、もう一回立ち上げることになります。それって結構めんどくさいですよね。
そんな人のために、Udemy講師のAngelaさんが役立つツールnodemonを教えてくれました。
Angelaさんの講義はこちら→ Udemy Bootcamp web developmentnodemonを使うと、server.jsファイルを上書き保存するたびに検知してくれて、自動でサーバーを更新し、反映させてくれる優れものです。
インストール
インストールの仕方はコマンドラインで
npm install -g nodemonと記載するだけ。
※permission error が出たら
sudo npm install nodemon -gで対応。
使い方
nodemon server.jsとコマンドラインで記載すると、server.jsファイルの更新を自動反映してくれます。
以上 Node.jsとExpress。
結構難しいかったので、追加、修正を随時していきます。。
- 投稿日:2020-01-18T11:28:35+09:00
初めての Azure Bot Service - Sample code と local test 編 -
はじめに
今回は Azure Bot Service を使用して連続した対話に対応できる Bot を作成します.
Azure Bot Service を初めて使用する人を(できる限り)想定してます.
(熟練の方々からしたら退屈するかと思います.)また,今回は Bot の sample を local test するところまでで
Azure への Deploy については次回行います.(訂正や指摘などあれば,温かく教えていただけると助かります.)
私の開発環境
- PC : surface laptop2 (windows 10)
- Editor : VS Code
PC に関しては何でも大丈夫です.
Editor に関しては 本記事を参考にされる場合は VS Code をご使用ください.
(後程お話しますが, Azure への deploy 時に VS Code の Extension を使用しています)Azure Bot Service の概要
Azure Bot Service とは,Microsoft 社のクラウドサービスである Azure のサービスの1つです.
公式の document は以下をご参考ください.Azure Bot Service のリソースを作成すると,セットで Azure App Service のリソースが作成されます.App Service とは同じく Azure のサービスの 1 つで,Web Application を作成することの出来るサービスです.
Bot の基本
まずは,Bot が初めての方,Auzre Bot Service に初めて触れる方のためにいくつかの用語や実装法の紹介をします.
専門用語
Azure Bot Service を使用する上で参考になる用語をいくつか先にご紹介しておきます.
- channel
- Bot への通話手段.窓口のようなイメージ.
- User は channel を通じて Bot App と会話をします.
- Teams や LINE, Slack,Web chat などがあります.
- channel によって仕様が異なるため,実際の Bot 開発では channel が何かも大事.
- connecter
- channel と Bot アプリを繋ぐ.
- 実は Azure Bot Service の実態はこの部分(だと思われる)
- Bot App
- 実際に処理を行う部分.
- 実態としては,一般的な Web App と変わらない
- Azure Bot Service の場合は App Service に相当します
ご存知の方もいらっしゃるかもしれませんが,Azure Bot Service 自体は Bot Application ではありません.channel を通してきたメッセージを Bot へと伝える connecterの役割を担っています.
Bot の実装方法
Bot アプリを作成する場合,Line や Slack などの channel ではなく,実装の観点で話すと2つの実装方法があります.
- function 型
- AWS lambda や Azure Function などの Serverless Function を活用した場合
- 非常にシンプルな作り
- Function を使用した回数だけ課金対象になるので使用頻度によっては非常に安価
- Server 型
- 今回のAzure Bot Service(厳密には Web App Service)のような場合
- serverを起動している間機能する
- State(変数の値など)を保持することができる
Azure Bot Service を使用した場合は,下の server 型になります.
function 型では リクエスト(Bot の場合は Bot への呼びかけ)が発生する度に function が実行されます.一方,server 型では server が起動している間のみ応答を返します. これらの特性の大きな違い(の 1 つ)は server側で変数の値などを保持してステートフルな会話が可能なことです.
ステートフルな会話とは簡単に言うと一連の流れを記憶した状態で会話ができるということです.
Serverless Function であれば,基本的には 「1 Question : 1 Answer」 であるのに対して,ステートフルな実装であれば「 n Question : m Answer」と複数の情報から返答を返すことができます.
とりあえずここでは,ざっくりと下図のようなイメージだけで大丈夫です.
(私も厳密な定義は微妙です(笑))sample の実行
それでは実際に sample を動かしつつ確認していきます.
sample コードの取得
以下の Github から sample コードを取得します.
Azure Bot Service の sample Code (Github)
今回は連続した会話フローのsample (Node.js版) を使用します.
先ほど取得したコードのうち,以下の directory を開いてください./BotBuilder-Samples/samples/javascript_nodejs/05.multi-turn-prompt/少しコードを見てみましょう.
プログラムを実行すると index.js が実行されます.
まずは index.js をみてみます.一部抜粋したものを記載しておきます.index.js// Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. const restify = require('restify'); const path = require('path'); // Import required bot services. // See https://aka.ms/bot-services to learn more about the different parts of a bot. const { BotFrameworkAdapter, ConversationState, MemoryStorage, UserState } = require('botbuilder'); // Import our custom bot class that provides a turn handling function. const { DialogBot } = require('./bots/dialogBot'); const { UserProfileDialog } = require('./dialogs/userProfileDialog'); // Read environment variables from .env file const ENV_FILE = path.join(__dirname, '.env'); require('dotenv').config({ path: ENV_FILE }); /********** 中略 **********/ // Define the state store for your bot. // See https://aka.ms/about-bot-state to learn more about using MemoryStorage. // A bot requires a state storage system to persist the dialog and user state between messages. const memoryStorage = new MemoryStorage(); // Create conversation state with in-memory storage provider. const conversationState = new ConversationState(memoryStorage); const userState = new UserState(memoryStorage); // Create the main dialog. const dialog = new UserProfileDialog(userState); const bot = new DialogBot(conversationState, userState, dialog); // Create HTTP server. const server = restify.createServer(); server.listen(process.env.port || process.env.PORT || 3978, function() { console.log(`\n${ server.name } listening to ${ server.url }.`); console.log('\nGet Bot Framework Emulator: https://aka.ms/botframework-emulator'); console.log('\nTo talk to your bot, open the emulator select "Open Bot"'); }); // Listen for incoming requests. server.post('/api/messages', (req, res) => { adapter.processActivity(req, res, async (context) => { // Route the message to the bot's main handler. await bot.run(context); }); });前半部分では必要な module を import したり,
sample プログラムの別の js ファイルでインスタンスを作成しています.HTTP server を create しているところでは,PORT の設定なんかもしていますね.
また,最後の部分で post する際のエンドポイントを設定しています.
今回はしませんが,Proactive なメッセージ(push 通知など)を実装する際には,
同様の方法で Proactive 用のエンドポイントを用意することもあります.続いて,実際の会話フローの制御をしているプログラムを確認しましょう.
/dialogs/userProfileDialog.js
を開いてください.一部抜粋したものを記載しておきます.userProfileDialog.jsconstructor(userState) { super('userProfileDialog'); this.userProfile = userState.createProperty(USER_PROFILE); // 典型的な会話のパターンを用意してくれている this.addDialog(new TextPrompt(NAME_PROMPT)); this.addDialog(new ChoicePrompt(CHOICE_PROMPT)); this.addDialog(new ConfirmPrompt(CONFIRM_PROMPT)); this.addDialog(new NumberPrompt(NUMBER_PROMPT, this.agePromptValidator)); // ここで連続する会話を追加している this.addDialog(new WaterfallDialog(WATERFALL_DIALOG, [ this.transportStep.bind(this), this.nameStep.bind(this), this.nameConfirmStep.bind(this), this.ageStep.bind(this), this.confirmStep.bind(this), this.summaryStep.bind(this) ])); this.initialDialogId = WATERFALL_DIALOG; }
TextPrompt
やNumberPrompt
はその名の通り,テキストや数値入力などの典型的な会話のパターンを実装するために用意されています.そして,抜粋した code の後半部分にある
WatarfallDialog
に様々な dialo を add することで,add した dialog が一連の会話として扱われます.ここで add されている dialog は抜粋部分より後ろの sample code で上記の Prompt を継承して実装されたものです.local test
まずは Azure に deploy(ざっくり言うとプログラムを Azure 上で動作させる) せずに,local で動作テストできるようにします.以下のリンクより Bot Framework Emulator の exe ファイルを取得して実行します.
ちょっと分かりにくいですが,ページ中頃にある以下の画像ようなファイル群から自分に適したものを入手してください.
上 4 つのどれかで大丈夫なはずです.
Bot Framework Emulator が起動できること(アプリが実行できて window が開くこと)を確認したら,sample program のある場所で command prompt やら Power Shell やらのコマンドツールを開きましょう.何かしらのコマンドツールを開けたら,
npm install
とnpm start
を実行してください.すると,以下のような画面になります.
この画面になり,Bot App が Listen 状態になったことを確認したら,
先ほどの Bot Framework Emulator を実行してOpen Bot
を押してください.
そして,URL の欄にhttp://lovalhost:3978/api/messages
と入力します.
これは sample code で index.js の最後に書かれているserver.post
のエンドポイントです.
このポイントに http post リクエストを送ることで Bot と会話します.こんな感じですね!入力したら Connect してください.
無事にsample を実行できたら,何か話しかけてみましょう.
下の gif のように会話ができると思います.ちなみに,Bot を停止させたい時は shell の画面で
ctr+c
を押してください.次の内容
少し長くなりそうなので今回はここまでで終了とします.
もう1回くらいは書こうと思うので,予定している内容を書いておきます.
- Dialog の分岐
- 今回は決まった会話内容でしたが,次回はもう少し複雑に会話を分岐させます.
- Azure への Deploy
- 今回は localtest で終わりましたが,次回は実際に Azure に Deploy します.
- channel の設定
- とりあえず Teams との連携でも目指します.
(よくよく考えたら今回まだ Azure Bot Service 使ってない説)
- 投稿日:2020-01-18T01:47:44+09:00
nodenvを使ったNode.jsのインストール手順
はじめに
これまではNode.jsのバージョン管理ツールとして、
nodebrewを使っていたのですが、
ディレクトリごとにNode.jsのバージョンを分けたくなったので、
nodenvのインストール手順を記録として残します。nodenvはこちらから。
今回参考にしたQiitaの記事はこちらから(ありがとうございます)。詳しくは調べてませんが、pyenvと同様の管理方法ができるらしいですね。
今回はHomebrewを使ってnodenvを入れていきます。
環境
- MacBook Air (Retina 13-inch 2018)
- OS
- macOS Mojave バージョン 10.14.6
- メモリ
- 16GB
- シェル
- bash
手順
前提
$
はターミナルでの入力を示します。$ lsや、
$ cdなどの表記とします。
nodenv のインストール手順
Homebrewからnodenvを入れます。
(コマンドをディレクトリはどこでもいいです...)$ brew install nodenvインストールが完了したら
.bash_profile
にexport PATH="$HOME/.nodenv/bin:$PATH"
とeval "$(nodenv init -)"
を追記します。$ echo 'export PATH="$HOME/.nodenv/bin:$PATH"' >> ~/.bash_profile $ echo 'eval "$(nodenv init -)" '>> .bash_profileまたはエディタを使って追記します。
$ vim ~/.bash_profile export PATH="$HOME/.nodenv/bin:$PATH" eval "$(nodenv init -)"一応シェルは再起動します。
$ exec $SHELL -l動作するかテストします。
$ nodenv -v nodenv [バージョン] $とバージョン番号が表示されれば、
インストール完了です。Node.jsのインストール
バージョンを確認するなら
nodenv install -l
とします。$ nodenv install -lインストール自体は
nodenv install [バージョン]
で完了します。$ nodenv install [バージョン]インストールしているNode.jsのバージョンの確認。
$ nodenv versions全体で使う場合は
global
でバージョンを指定します。
特定のディレクトリで使う場合はlocal
でバージョンを指定します。$ nodenv global [バージョン] $ node local [バージョン]最後に
node -v
でバージョンを確認します。$ node -v v[バージョン番号] $もしバージョンがインストールしたものと違った場合は補足を確認してください。
補足
$ nodenv
が使えない場合や、
nodeのバージョンがインストールしたものにならない場合は、
node-build
を入れたほうがいいのかもしれません。$ git clone git:://github.com/nodenv/node-build.git ~/.nodenv/plugins/node-build終わりに
nodeenv
と打ち間違いが無いようお気をつけください。