Node.js関連のことを調べてみた2021年10月16日

Node.js関連のことを調べてみた2021年10月16日
目次

Node.jsでディレクトリを再帰的に作成/削除するのにmkdirpやrimrafはもう必要ない

Node.jsでディレクトリを再帰的に作成/削除するためのnpmパッケージとして[mkdirp](https://www.npmjs.com/package/mkdirp)や[rimraf](https://www.npmjs.com/package/rimraf)がありますが、現代のNode.js([v14.14.0](https://nodejs.org/dist/v14.14.0/docs/api/)以降)において、それらはもはや必要ありません。

## ディレクトリを再帰的に作成する方法

`mkdir -p`のようにディレクトリを再帰的に作成するには、[fs.mkdir](https://nodejs.org/api/fs.html#fs_fs_mkdir_path_options_callback)の`recursive`オプションを使います。

コールバックAPIを使う場合:

“`js
const fs = require(‘fs’)

const dir = process.argv[2]
console.log(`try creating ${dir} direc

元記事を表示

discord.js-v13でdiscordbot (スレッド周りの機能実装)

#はじめに

当記事は筆者の忘備録であり、完全なチュートリアルではないことをご理解ください。
スレッド周りのみを見たい方は[こちらを](#スレッド周りの実装)

#開発環境

“`
Node.js – 16.11.0
discord.js – 13.2.0
“`

##環境構築

[Node.js 公式サイト](https://nodejs.org/ja/)
[discord.js 公式Guide](https://discordjs.guide/#before-you-begin)

まずは適当な場所に新規フォルダを作成し、そのフォルダ内で

“`
npm init -y
“`

を実行、完了したら同フォルダ内で

“`
npm install discord.js
“`

上記二つが完了すればひとまず開発環境は構築できました。

#botの招待
[discord developer portal](https://discord.com/developers/applications)
###その1

ログイン後`New Application button`をクリッ

元記事を表示

GitHub Actionsを使ってGithub PagesにOpen APIのRedocドキュメントを出力したメモ

# 概要

Github Pagesがorganizationでprivateに対応していたので
業務で使ってるOpen APIの定義をpushされた時に自動デプロイするようにしてみました

swagger-viewerとかで見るのがめんどかったので

## ソースコード

https://github.com/novr/redoc-sample

## 構成

“`bash
├── .github
│   └── workflows
│   └── gh-pages.yml
├── docs
│   └── index.html
├── package-lock.json
├── package.json
└── petstore.yaml : from https://github.com/OAI/OpenAPI-Specification/blob/main/examples/v3.0/petstore.yaml
“`

## workflows

“`yaml:gh-pages.yml
name: github pages

on:
branch
push:

元記事を表示

ESP32とIRリモートおよび手動制御を使用したAlexaホームオートメーション-IoTプロジェクト2021


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873014/3907bcc4-c0e8-8b64-5245-4638ea9e4f9d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1873014/9e35e6cd-7381-b87e-f9ae-b46ad6e9e839.png)
![im

元記事を表示

Javascriptのコールバック関数について

Javascriptのコールバック関数に関して、アウトプットのため本記事を投稿します。

Javascriptにおけるコールバック関数とは「将来のある時点で実行される関数」のことを指します。

### 簡易的な例

下記に例を記載します。

“`js
function a(callback) {
callback();
}

function b() {
console.log(“コールバック関数として呼び出されました”);
}

a(b);

//実行結果
コールバック関数として呼び出されました
“`

処理の流れを記載します。
① aという関数を宣言します。(仮引数の名称は何でも大丈夫です)
② bという関数を宣言します。
③ ②で宣言したbという関数を実引数として、①で宣言したaという関数を呼び出します。
④ aの処理が実行され、bという関数が実行されます。
⑤ bの処理が実行され、文字列が出力されます。

関数aの仮引数には、実引数である関数bが入るので、callback() と b()は同じ命令に変換されます。
このように、コールバック関数では、引数に関数を渡し

元記事を表示

[Node.js] コマンドライン引数の取得

# コマンドライン引数の取得
Node.jsプログラムからコマンドライン引数を取得するには、**process**オブジェクトの**process.argv**プロパティを参照する。**process**オブジェクトはnode.jsの実行環境のグローバル変数の1つであるため、モジュールを**require**で読み込む必要がない。また、**process.argv**は、文字列配列になっている。

“`javascript:sample.js
for(let i = 0; i < process.argv.length; i++){ console.log('argv[' + i + '] = ' + process.argv[i]); } ``` 上記の「sample.js」に引数を指定して実行すると以下の結果となる。 ```javascript:実行結果 $ node sample.js red green blue argv[0] = C:\Program Files\nodejs\node.exe argv[1] = C:\work\workspace\sampl

元記事を表示

コロナ禍前後で、クラウドファンディングへの関心は変わったのか?

# はじめに
はじめまして、JavaScript初心者です。
恥ずかしながらAPIについても数日前に初めて意味を知った素人。当然ながらQiitaAPIに触れたのも初めて。知識を武器にできるよう、楽しみながら学んで行きたいです。

# 目的
どうせやるなら自分が好奇心を持てるものを。
思い浮かんだのは、最近よく耳にするクラウドファンディング(以下、CF)について。
数年前に小学校の同級生が、子供の頃からの夢を実現させるためCFを達成させ起業した話を聞き、とても夢があると感動した。

2021年10月現在はコロナ禍真っ只中。私がCFで初めて支援したのも昨年コロナが蔓延し始めた頃だった。
ちなみに当時支援したのは、こちら。

https://camp-fire.jp/projects/view/261212

プリントごっこを思い出す、昔懐かしい印刷が楽しめる印刷所。シルクスクリーン発注をして自分で手刷り印刷もできるので、いつか利用してみたいなぁと思っていたところ、経営難となり経営存続を賭けてCFが発起された。(結果は是非、リンク先からご確認を!)

同じようにコロナの影響でCFに救いの手を

元記事を表示

Node.jsにおける同期/非同期処理に関して

Node.jsの同期/非同期処理に関してのアウトプットするために本記事を投稿します。

### マルチスレッド

スレッドとはCPU利用の単位です。
CPUとは、Central Processing Unit(中央演算処理装置)の略で、プログラムの命令を解釈して、コンピューター全体の動作を制御する制御装置や演算を行う演算装置などの機能を持つ装置です。
近年のCPUでは、1つのプロセッサ・パッケージ内に複数のプロセッサ・コアを搭載するマルチコアプロセッサを使用しており、それに応じて複数のスレッドを同時に処理できるようになっています。(マルチスレッド)

マルチスレッドを利用するとサーバーは複数のリクエストを受け取った際に、スレッドを増やして対応します。

![SnapCrab_NoName_2021-10-14_15-44-50_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1229062/a6d3f6df-c94a-24c7-ecaa-c62766b57455.png)

しかし、リクエスト

元記事を表示

【Electron】MenuItemConstructorOptionsの型推論

初書:2021/10/14
mac : 11.6
electron : 15.1.2
typescript : 4.4.3

# 前置き

electronとtypescriptを使ってアプリケーションを開発中のこと。
メニューバーを作成しようと試みたときに起きた出来事。

「型推論が通らない」

ので、それの修正メモ。

# 該当コード

該当ページ[Menu | Electron](https://www.electronjs.org/ja/docs/latest/api/menu)

Electronの日本語公式ページにある「サンプル」コードで問題は起きた。
ちなみにそのコードを、Typescript用に若干書き換えたものがこちら。

“`ts
import { app, Menu } from (‘electron’);

const isMac = process.platform === ‘darwin’;

const template = [
// { role: ‘appMenu’ }
…(isMac ? [{
label: app.name,

元記事を表示

指数バックオフ + ジッターをTypeScriptでやるだけ

## 導入

外部API叩く系のコード、テストで通ってもスケーリングしたら死ぬことがあります
単純に一回に大量に叩いたり、そうでなくてもエラーから復旧したりした時に全員が同期して叩くみたいなことがあると、それはもはやDDoS攻撃だからです

https://cloudplatform-jp.googleblog.com/2016/11/ddos-cre.html

それを解決するのが指数バックオフです
ミスったらいい感じに待ってやり直すというアルゴリズムです

その待つ時間まで一緒だと同期攻撃が繰り返されるだけなので乱数でずらします それがジッターです

GCPのCloudStorageのドキュメントとかでも自分で実装しろと書いてあります 悲しい

https://cloud.google.com/storage/docs/retry-strategy?hl=ja

## 本質

このアルゴリズムの本質は待ち時間です

“`expBackoff.ts
const MIN_OFFSET_MSEC = 2000
await sleep( (2 ** retries) *

元記事を表示

Node.jsの基本

# はじめに
Node.jsの基本を備忘録として残しておきます。

# 目次
1. [Webアプリケーションの基本の3ステップ](#Chapter1)
1. [EJSテンプレートの使い方](#Chapter2)
1. [ルーティングの基本](#reference)



# Webアプリケーションの基本の3ステップ

– requireでhttpオブジェクトを用意する。

“`js
const http = require(‘http’);
“`

– createServerでサーバーを作る。

“`js
let server = http.createServer(ルーティング処理などを書いた関数);
“`

– listenで待ち受け開始する。

“`js
server.listen(3000);
“`


# EJSテンプレートの使い方
Webページの画面は基本的にEJSなどのテンプレートエンジンを利用します。
fsのreadFileSyncで読み込

元記事を表示

ウェブページは作れませんでした 【RESTART】

#ウェブページは作れませんでした(結論)
「progate」にて学習すること約1か月
「Web開発パス(Node.js)」を一通りこなしてみて
とりあえず何かウェブページ作ってみるかと思った

結論、__どうやって作ればいいのか解らず__…

#学習プロセスの見直し

「progate」だけ行ってしまうと__自分の場合は__
__インプット__のみになってしまい、定着しないと反省
そこで以下のようなプロセスの仮説を立てて実行することにした
フェーズガイド_全体.png

#学習プロセスのフェーズ詳細

###フェーズ1_学習
フェーズガイド_学習.pngQiitaの記事の”勢い”を調べる ~もしかしたらまだ見ぬ掘り出し記事が見つかるかも~

配信者勢いランキング、5ちゃんねる勢いランキングなど、インターネットをうろうろしているとよく”勢い”という言葉を目にしますよね。
というわけでQiita記事の勢いを調べてみました。(QiitaAPIを使って)
参考になる記事をストックすることがスキルアップの近道のはず、”勢い”のある記事はきっと参考になる記事だと思うのです。

#前調べ
5ちゃんねるの勢いの計算方法は次の通りだということを調べました。
勢い=レス数/(現在のunix時間-スレッド内の1番目の投稿のunix時間)÷86400

なるほど、これを参考に今回は、
■レス数=いいねの数
■現在の時間=現在の時間
■1番目の投稿時間=記事の投稿時間
と定義してやってみます

#結果
####単月部門
集計期間:2021/9/13~2021/10/2

| 順位 | いいね | 投稿日 | 期間(日) | 勢い | URL |
|:-:|:-:|:-:|:-:|:-:|:-:|
| 1 | 893 | 2021-09-29 | 15 | 61 | [エンジニア200人に聞いて、業務委託単価表を作りました](https

元記事を表示

バイクで走るタイムリミットをLINE_BotとWeb_APIを組み合わせて実装してみた~

#近ごろ私達は~いい感じ♪
これが私の生きる道ですね!
見出しだけでピンきて懐かしさを感じた方はおそらく30代Overでしょう笑
(何故いきなり冒頭に?といった疑問は記事を読み進めるとわかりますので、お付き合いください~)

さてさて、
10月からプログラミングを習い始めて毎日勉強中の私ですが、
LINE_BotとWeb_APIを組み合わせて何か試したいと思い、
大好きなバイクを例に作ってみました!

#これが私の走る道
学生時代からバイクで峠を走るのが大好きで、ヒマさえあれば埼玉県飯能市の自宅から
奥多摩湖(東京都西多摩郡)まで友人と走りに行っています。
しかし、1車線の道が続く田舎道なので日中は渋滞ばかりで気持ちよく走れません(´;ω;`)ウゥゥ
特に朝方と夕方は渋滞がひどく、それなら真夜中に気持ちよく走ろう!
ということで、夜が更けてから朝方までひたすら峠を走るということを、
学生時代はよくやっていました(あの頃は若かった、、、)

奥多摩の夜は、空気が澄んでいて星が本当に綺麗なんです( ̄ー ̄)
![奥多摩_星空.jpg](https://qiita-image-store.s3

元記事を表示

APIとLINE Botを組み合わせることで、患者さんが必要な情報にアクセスできる仕組みを目指す その1-天気を伝える

#患者さんご家族にとって便利なLINE Botを作りたい
福岡で在宅医療を中心とした[医療機関](https://taro-cl.com/)を運営しています。
当院の患者さんやご家族、もしくは当院に診察を依頼したいと考えてくださっている方向けに、必要な情報にアクセスできるLINE Botを作ろうと思い取り組んでいる経過です。

#環境・利用API
node v16.10.0
Visual Studio Code 1.60.2
axios 0.22.0
ngrok 2.3.40

#お薬APIは有料のため断念

API連携の方法を学び、在宅医療で役にたちAPIで持って来れる情報に何があるかを考えました。
当初、薬の情報がAPIでもってこれれば、お薬の表面に書いてある文字や、色形で薬が何の薬か判断できるようなり、治療の経過で「血圧の薬だけ明日から抜く」などを患者さんご家族でもやりやすくなるかと考えましたが、薬の情報を使えるAPIは有料のものばかりのようで断念(いいAPIがあれば教えてください)。

#お天気APIとの連携

次に考えたのが、お天気APIとの連携です。
病院で入院や外来を担当

元記事を表示

長崎県民の為に!ディズニーのお勧めアトラクションを教えてくれるLINEBotを作ってみた!

##長崎県民に、ディズニーのお勧めアトラクションを伝えたい!!
私は、長崎県出身で、東京に上京してきて13年目。
東京にきて、ビックリした事の一つに、東京都民は、ディズニーランド、ディズニーシーのアトラクション事に妙に詳しいこと。
平然と、ビックサンダーマウンテン、センターオブジアース、スプラッシュマウンテン、タワーオブテラーなど言われるが、田舎者の私には、全然分からなかった事を今でも覚えております。
旅行できた地元の友達達からもよくディズニーのお勧めの場所やアトラクション、宿泊先など、よく聞かれます。そんな友達達の為に、今回ディズニーリゾートのお勧めのアトラクションを教えてくれるLINEBotを作ってみました!

##作成した仕組み
ディズニーリゾートのお勧めアトラクションを教えてくれるLINEBot

##開発環境
・LINE公式アカウント開設
・LINE Developersアカウント登録
・Visual Studio Code
・ngrok
・LINE Bot

##共通テンプレート
テンプレートをもとに作成しました!

サンプルコード <

元記事を表示

初心者向けの記事って多すぎん??(JavaScript初心者向けQiitaAPIでLGTM数TOP10を出してみる)

#はじめましての自己紹介
はじめまして!超ウルトラスーパー初心者のぜらちんです。
JavaScript?新しい紅茶?というくらいにチンプンカンプンな30オーバー限界ヲタク女が
JavaScriptで何かを作り始めてみる、という記事をこれからいくつか投稿していこうと思います。

#何を作ろうか
まずはQiitaのAPIを使用して、(この言い回しがあっているかも分からない……。)
初心者が読むべき記事を抽出してみることにします。
そう。自分のために作るのです!
Qiitaは記事が多すぎる……。初心者向けだけでも無数にある中から良さそうな記事だけ読みたいんじゃー!
何をもって良い記事とするか。そう。他者からの評価が多い記事だけを読むのです。
自分はJavaScriptを使用して挑戦するので、抽出する記事は「JavaScriptを学ぶ初心者向けの記事」にします。

#作成するものの概要
・QiitaAPIを使って、記事タイトル、本文、タグに「JavaScript」と「初心者」が含まれる記事を取得する。
・2021年9月までの記事を取得することにする。(実行の度に結果がブレるため日付を区切る。)

元記事を表示

いまさらながらNode.jsとLINE Messaging APIを使って簡単なLINEBOT作ってみた(入門)

# やりたいこと
LINE上でメッセージを送信すると指定の応答をするBot作成。

## 1. LINE Developers
まずはLINE developerというMessaging APIが使用できる開発者向けのサイトで準備をします。**LINEアカウントが必要になりますので、持ってない方は先に作成しておきましょう。**

### ログイン
まずは[LINE Developers](https://developers.line.biz/ja/)にアクセスし、`ログイン` >`LINEアカウントでログイン`でログインページへ。

LINEアカウントに登録しているメールアドレスとパスワードを入力しログインすると認証コードが発行されるので、LINEアプリを立ち上げ該当コードを入力してください。

認証が成功したら
`developer name`
`your email`
に任意の名前とメールアドレスを入力し、`create my account`しましょう。

### Provider作成
ログインができたら、Providerを作成します。
`create new provider

元記事を表示

LINE Message API を活用して、ポケモン対戦がやりやすくなるツールを作成

前回初めて書いた記事は真面目に考察したので、今回は自分の趣味の一部を交えて、少し読みやすいテーマ・内容としてみました。

#ポケモン対戦は覚えることが多い
 ポケモン対戦をやったことある方は、この章については読み飛ばしていただいて問題ありません。
 なぜそもそも、ポケモン対戦を題材としたのかということについてです。自分の趣味ということもありますが、最大の理由として、**ポケモン対戦は覚えることが非常に多く、初心者の参入障壁が高い**という問題点があると考えているためです。
 現在、ポケモン対戦は毎年世界大会が実施され、国内でも新作が発売されると、10万人程度が参加するコンテンツとなりました。youtubeなどの動画サイトでも対戦の模様は動画として上がっており、もし興味が湧いたら検索してご覧いただきたいのですが、まあ覚えることが多い。

– 種族値・個体値・努力値(公式名称では無いです。)
– ポケモンの特性
– 技の効果
– 対戦でよく使われる育成方法、いわゆる型 などなど

 初心者が負けて覚えるのは当然ですが、それでも少しでも勝つ喜びを味わってもらう補助ができないかと考え、ツールの

元記事を表示

デブ活必需品!? お菓子の虜LINE bot

## とにかく甘いお菓子が好き?
 おしゃれなスイーツも、手作りケーキもおいしいけれど、私は断固「お菓子」推し!!
 なんと数百円で楽園へひとっとび…わかる人にはわかりますよね・・・?
 ![お菓子.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1793443/aee61234-4d5f-fb19-0aad-295ed5bd82fc.png)

 https://twitter.com/okinakamasayos1/status/1447864486598103041
 https://twitter.com/okinakamasayos1/status/1423594038947500036
## 私の神サイト[「お菓子の虜」](https://sysbird.jp/toriko/)?
 メーカーが書いた記事じゃなく、実際に食べ歩いたレビューがなんと2,600種類以上!
 お菓子好きにはたまらない「新商品」「期間限定商品」を重点的に紹介してくれます。
 短くも美しく、想像力を掻き立てるレビューは必見

元記事を表示

OTHERカテゴリの最新記事