- 1. 【Node.js】promiseの使い方
- 2. Node.js版CCXTでbitFlyerのPrivate APIを使う
- 3. [Node.js][LINE] 毎日 LINE に花粉情報を通知する
- 4. nodebrewを利用したnodeのインストール
- 5. 【Node.js】promiseの非同期処理について
- 6. オンプレ環境で使えるDiscordの読み上げBotを作りました
- 7. ナウキャストの画像取得(20210224版)
- 8. if文なしでじゃんけん – JS版
- 9. 【Scratch3.0】Realtime Database拡張ブロックを作ったので参照実装したら既視感あるアレができちゃった件
- 10. [Node.js] MySQLのIN句をプレースホルダーで表す
- 11. 【テスト自動化】Playwrightでファイルのアップロードのテスト
- 12. 【JavaScript】JavaScriptの非同期処理について
- 13. 【imi-enrichment-date】年号を含む日付表示の正規化
- 14. RustでWebAssemblyを使ってみた時の記録
- 15. Node.js+MongoDB構成でGraphQLのお勉強
- 16. DockerでNode.jsアプリを起動する
- 17. 【Node.js】日時処理を扱う方法
- 18. Node.js セキュリティアップデート + Node.js v15 について
- 19. Puppeteerでドラッグ&ドロップ
- 20. npmのグローバルインストールをするためにパスを通す方法
【Node.js】promiseの使い方
#プログラミング勉強日記
2021年2月28日#基本的な書き方
promise処理を作るには任意の関数の中で`new Promise()`を返すのが基本となる。“`js
return new Promise(resolve) {
// 処理を記述する
}
“`“`js:具体例
function myFunction() {
return new Promise(function (resolve) {
resolve(“Hello World”);
})
}
“`#thenを使ったメソッドチェーン
promiseによる非同期処理の結果を取得するにはthenを使ったメソッドチェーンを使用することができる。“`js
// dataにpromiseの結果が格納されている
// resolve()に設定した文字列になる
myFunction().then(function(data) { console.log(data) })
“`“`:実行結果
Hello World
“`#promiseの並列処理
allメソッ
Node.js版CCXTでbitFlyerのPrivate APIを使う
# はじめに
ccxt.js経由でbitFlyerの現在のポジション(建玉)を知りたかったのだが、ちょっと調べてもなかった。
詰まったので同様の問題に遭遇した人のためにも解決方法残しておこうと思う。## コード
“`javascript
const ccxt = require(‘ccxt’)
const bitflyer = new ccxt.bitflyer({
apiKey: env.apiKey, // APIキーを入れる
secret: env.secret // シークレットをいれる
})
bitflyer.privateGetGetpositions({ product_code: ‘FX_BTC_JPY’ }).then(data => console.log(data))
“`## ちょっと解説
ccxtでPrivate APIを使うには、メソッドの命名に独自の法則を使っている“`
private + {メソッドがgetならGet、postならPost} + {private APIの名前}
“`上の例ではGetメソッドで`
[Node.js][LINE] 毎日 LINE に花粉情報を通知する
# 概要
– [自分の LINE に Ruby で通知を送る](https://qiita.com/QUANON/items/94f8835e923c76188f66)
– [[Ruby][LINE] ごみ出し日に LINE で通知する](https://qiita.com/QUANON/items/ccfe650a30bd6068a5f4)に引き続き、[LINE Notify](https://notify-bot.line.me/ja/) を使って LINE に通知するシリーズです!
花粉 が辛い季節ですね :disappointed_relieved: 花粉情報が非常に気になる毎日なので、当日の花粉情報を LINE に通知するようにしました。
# 方法
## バージョン情報
– Node.js 14.15.5
– Playwright 1.9.1
– axios 0.21.1## コード
まず [Playwright](https://github.com/mic
nodebrewを利用したnodeのインストール
Homebrewを使ってインストール。
“`sh
$ brew install nodebrew
“`* バージョン確認
“`sh
$ nodebrew -v
“`* セットアップコマンド。出力されたパスを通す。
“`sh
$ nodebrew setup# Fetching nodebrew…
# Installed nodebrew in $HOME/.nodebrew
#
# ========================================
# Export a path to nodebrew:
#
# export PATH=$HOME/.nodebrew/current/bin:$PATH <= コイツを記述 # ======================================== ``` ```sh $ vi ~/.bash_profile ``` * インストール可能なバージョンの確認 ```sh $ nodebrew ls-remote ``` * stableをインストール。`install`コ
【Node.js】promiseの非同期処理について
#プログラミング勉強日記
2021年2月27日
[昨日の記事](https://qiita.com/mzmz__02/items/6b83805bc4917810dfb7)でJavaScriptの非同期処理について扱ったが、今回はNode.jsのpromiseの使い方をまとめる。#promiseとは
Node.jsのpromiseは、非同期処理を読みやすいコードで実装できる。
Node.jsでも使用されるJavaScriptでは、非同期処理のときにコールバック関数を使用する。だが、処理が複雑になるほどコールバック関数が入れ子になってしまい、コードの内容がわかりにくくなる。#Node.jsでpromiseを使う方法
まず、promiseをインストールする。“`
$ npm install promise
“`promiseの書き方は以下のようになる。
“`js:文法
// promiseパッケージを読み込む
var 変数 = require(‘promise’);変数(function (fulfilled, rejected) {
処理内容
}
オンプレ環境で使えるDiscordの読み上げBotを作りました
# 事の発端
知り合いとDiscordサーバーでは土日に通話しながらゲームをするときに、通話の際テキストチャンネルで発言するのみで喋らない”聞き専”が結構います。
そこでチャットを読み上げてくれる「Shovel」というBotを導入しました。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206651/46d9d2eb-4c27-84d3-7427-3b2b0fb66c15.png)
しかし、土日の夜は非常に人が多いのか、ボイスチャットに呼ぼうとしても呼べない時が何度かあり、そこで自分たち専用のサーバーを用意する案が上がります。# Raspberry Piを入手
秋葉原に行って、Raspberry Pi4と電源などの一式を入手。
早速、以下の条件を満たす読み上げDiscord Botを探し始めます。– ラズパイ上で動く
– Dockerでいける(環境を汚したくないため)
– オンプレ環境で使える
– 完結している、クラウドサービスを使っていない(Cloud Text-to-Spe
ナウキャストの画像取得(20210224版)
# これは何ですか?
気象庁の降水レーダー画像を取得するスクリプトです。2021年02月24日の更新に伴って書き直しました。画像取得ソースは:point_down:
https://www.jma.go.jp/bosai/nowc/
コードはgistに収めています。
[ナウキャストの画像取得(20210224版) by puppeteer/node.js]
(https://gist.github.com/59t9/666901916c2d06332f7f3a659da5e255)相変わらず習作ですが、画像取得リトライ工作をなんぼかいたしました。Slackによるエラー通知もさせてみました。ユーザ依存な部分を伏せ書きにしていますのでご注意ください。
お役に立てれば幸いです。
if文なしでじゃんけん – JS版
[if文なしでじゃんけん – Qiita](https://qiita.com/tadsan/items/65d91ba6b50535fc8815) を読んでJSで組んでみました。
# 解答
“`js
const gu = “gu”;
const choki = “choki”;
const pa = “pa”;const createResult = (winHand, loseHand, drawHand) => ({[winHand]: “勝ち”, [loseHand]: “負け”, [drawHand]: “あいこ”})
const hands = Object.freeze({
[gu] : {view: “✊”, judgeTable: createResult(choki, pa, gu)},
[choki] :{view: “✌ “, judgeTable: createResult(pa, gu, choki)},
[pa] : {view: “✋”, judgeTable: createResult(gu, choki, pa)},
【Scratch3.0】Realtime Database拡張ブロックを作ったので参照実装したら既視感あるアレができちゃった件
# 事始め
今年、弊社内ではゲーム制作コンテストが開催されており、私は運営チームとしてScratchのサポートを担当しています。Scratchの自主練をしていたところ、楽しそうな記事を見つけました。
* [Scratch 3.0でオリジナルブロックをつくろう – @Hiroyuki_OSAKI](https://qiita.com/Hiroyuki_OSAKI/items/a46e1c881d3aed4661f7)
そんなことができるのですね!
そしたら、[Realtime Database](https://firebase.google.com/docs/database?hl=ja) のブロックとかつくって、ネットワークゲームも制作できるようになる……!!!
これはやるしかないでしょ、ということで。
やってみたいぃぃい✨
Scratch 3.0 で Web API 呼び出しの拡張ブロックを作る、の手始め – [Node.js] MySQLのIN句をプレースホルダーで表す
#概要
Node.jsでMySQLを扱うにあたり、
IN句のリスト部分をプレースホルダーで表すには、どのようにすれば良いかを以下に記していきます。#本題の前に…
(本題しか興味ない人は、すっ飛ばしてください)
##Node.jsでMySQLを扱うためにインストール`npm i -S mysql promise-mysql`
##Node.jsでMySQLプレースホルダーを扱うときの基本
例えば、プレースホルダーなしで書こうとすると以下のようになります。(良くない例です)
“`javascript:【NG例】プレースホルダーなし
const userid = 1 ;
const sql = `SELECT * FROM users WHERE userid = ${userid} ;`
“`このままだと、SQLインジェクションの格好の餌食となってしまうため、
プレースホルダーを使って書き直します。“`javascript:【OK例】プレースホルダーあり
const userid = 1;
const sql = `SELECT * FROM user【テスト自動化】Playwrightでファイルのアップロードのテスト
# Playwrightでファイルのアップロードのテスト【テスト自動化】
・[Playwright](https://playwright.dev/)でテスト自動化をかんたんに
・インストール等は他ドキュメントが詳しいので省略します
・ファイルのアップロードが必要な場合# 環境
・Windows10 64bit
・node.js v14.15.5
・cygwin# Playwright とは
– https://github.com/microsoft/playwright
– https://playwright.dev/> Playwrightは、Chromium、Firefox、WebKitを単一のAPIで自動化するNode.jsライブラリです。
> 常に環境に配慮し、機能があり、信頼性が高く、高速なクロスブラウザーWeb自動化を可能にするように構築されています。個人的な感想ですが、「Windows で *webkit (safari)* も実行できる」ブラウザテスト自動化用のツール。
Selenium(最近はあまり触っていないですが・・・)より使った感じは良好。
【JavaScript】JavaScriptの非同期処理について
#プログラミング勉強日記
2021年2月26日#同期処理とは
同期処理は、コードを順番に処理していって、1つの処理が終わるまで次の処理は行われない。同期処理では、実行している処理は1つだけとなるので直感的な動作になる。
しかし、1つの処理が終わるまで次の処理ができないことによっての問題点も存在する。具体的には、同期的にブロックする処理があると大きな問題が生じる。JavaScriptでは基本的にブラウザのメインスレッドで実行されるので、メインスレッドが他の処理でいっぱいになってしまうと表示が更新されなくなってしまいフリーズしたような状況になる。これは、メインスレッドが表示の更新といった処理を行っているためである。#非同期処理とは
非同期処理でもコードを順番に処理していくが、1つの非同期処理が終わるを待たずに次の処理を行うことができる。なので、非同期処理では同時に実行している処理が複数ある。
JavaScriptにおける非同期処理には、コールバック、Promise、async/awaitの3種類ある。JavaScriptにおいての多くの非同期処理はメインスレッ
【imi-enrichment-date】年号を含む日付表示の正規化
# imi-enrichment-dateとは
経産省のジービスインフォというサイトで公開されているオープンソースライブラリの1つで、
`令和3年2月26日`のような日付表示を`2021-02-26`といった形式に正規化することができます。
MITライセンスで公開されているので商用利用も可能です。## インストールの仕方
このツールはnpmのようなパッケージ頒布サイトでは公開されていないようで、
経産省のサイトあるいはプロジェクトのGitHubページからダウンロードして用います。“`bash
# on your own project
npm install https://info.gbiz.go.jp/tools/imi_tools/resource/imi-enrichment-date/imi-enrichment-date-1.0.0.tgz
“`## 使い方
ここでは自分のプロジェクトに組み込んで使う方法を紹介します。
ライブラリから適当な名前で読み込んだ関数は、引数に`2021年2月26日`や`令和三年二月二六日`のような日付を表す文字列か、`{“@
RustでWebAssemblyを使ってみた時の記録
# この記事について
プログラミング独学3年目の文系大学生の開発メモ。# なぜWebAssemblyなのか
特に理由はありません(笑)
最近話題になっていると聞いて触ってみました。# なぜRustなのか
これも特に理由なしです。
システムプログラミング言語なのに低レベルだけではなく、色々なアプリケーションを開発するためのライブラリが揃っていると聞いて興味を持ちました。# 開発環境 (2021/02/26現在)
Windows10 Education バージョン 20H2 (Windows10 Home バージョン 20H2上のVMware Workstation Player 16仮想マシン)
Visual Studio Code
gcc 8.1.0
node 11.13.0
npm 6.9.0
rustc 1.50.0
cargo 1.50.0# 開発開始
[MDNに掲載されているRust用のWebAssembly入門](https://developer.mozilla.org/ja/docs/WebAssembly/rust_to_wasm “Rust から We
Node.js+MongoDB構成でGraphQLのお勉強
#はじめに
現場でGraphQLを使用しているのですが、保守改修段階でプロジェクトに入ったのでスキーマ作成などの基本的なところをやったことがありませんでした。また、NoSQLデータベースも使ったことがなかったので、まとめて学んでみようということでNode.js+MongoDBの構成でGraphQLサーバをたててみることにしました。今回作成したプロジェクトはGitHubにあります。
#GraphQLのよさ
RESTとの比較記事がいたるところにあるので(例えばこちら)詳しく書きませんが、単一のエンドポイントであるというのがGraphQLの一番の特徴です。GraphQLをつかうことで、RESTで必要なすべてのデータを取得しようとするときに発生する以下のような問題を解決することができます。
– 複数のエンドポイントへリクエス
DockerでNode.jsアプリを起動する
## 概要
先日作ったSlackBotを定期実行したいため、Dockerでnodejsの環境を構築します。## 前提条件
[Dockerインストール済み](https://docs.docker.com/get-docker/)“`
$ docker –version
Docker version 20.10.2, build 2291f61
“`ジョブフローを毎日18:00に実行する設定済み
“`js:job.js
const schedule = require(‘node-schedule’);
schedule.scheduleJob(`00 00 18 * * 1,2,3,4,5`, run);
“`## Dockerイメージを作成する
1、プロジェクトフォルダー直下に“Dockerfile“を作成して、以下のコードを貼り付ける“`Dockerfile
FROM node:12.20.1
WORKDIR /app
COPY . .
RUN npm install
ENV TZ Asia/Tokyo
EXPOSE 8888
CMD [“no
【Node.js】日時処理を扱う方法
#プログラミング勉強日記
2021年2月25日#日付処理を使うための準備
Node.jsで日付処理を扱うために、今回はdate-utilsを使用する。
date-utilsはnpmパッケージの1つで、簡単にインストールすることができる。“`:date-utilsをインストールする
$ npm install date-utils
“`#現在時刻を表示する
“`js
// date-utilsを呼び出す
require(‘date-utils’);
let now = new Date();
console.log(now.toFormat(‘YYYY年MM月DD日 HH24時MI分SS秒’));
console.log(now.toFormat(‘YY年M月D日 H時MI分SS秒’));
console.log(now.toFormat(‘DDD MMM DD YYYY HH24:MI:SS’));
console.log(now.toFormat(‘M/D/YY’));
“`“`:実行結果
2021年02月25日 01時52分13秒
21年2月25日
Node.js セキュリティアップデート + Node.js v15 について
# Node.js セキュリティアップデートが出てた
[https://nodejs.org/en/](https://nodejs.org/en/)
2.23 に、Node.js の新しいバージョンがでたのでチェックしよう。
[https://nodejs.org/en/blog/vulnerability/february-2021-security-releases/](https://nodejs.org/en/blog/vulnerability/february-2021-security-releases/)### 10.x, 12.x, 14.x 15.x 用のセキュリティアップデート
重大(1), 高い深刻度(1), 低い深刻度(1)
1. HTTP/2 の unknownProtocol があまりにも多くなった時、DoS 攻撃を受ける可能性がある問題
– ファイルシステムが漏洩する可能性
– メモリリークを引き起こす可能性
2. localhost6 がホワイトリストに含まれている場合、DoS 攻撃を受ける可能性がある問題
– /
Puppeteerでドラッグ&ドロップ
#はじめに
最近、フロントテストに[Puppeteer](https://pptr.dev/)というライブラリを用いているのですが、ドラッグ・ドロップの動作においてかなり苦戦をしたので、これ以上犠牲者を増やさないために()、ここに解決策を共有したいと思います。
#Puppeteerでドラッグ&ドロップができない!
「Puppeteer drag drop」というように検索をかけると、大体下記のようなコードが出てきます。“`Javascript
await page.mouse.move(x1, y1);
await page.mouse.down();
await page.mouse.move(x2, y2);
await page.mouse.up();
“`
座標(x1, y1)にカーソルを合わせ、掴む→(x2, y2)に移動し離すという意味のコードです。しかしこれ…
**動作しません!!!!!**
正確に言うと、一瞬だけ対象物が動くんですけど、(x2, y2)まで移動してくれないんですよね…
調べてみると、このことに関して
npmのグローバルインストールをするためにパスを通す方法
## はじめに
npmのグローバルインストールをするために、パスを通す方法を紹介します。
## npm i -g @vue/cli でエラー発生
Vue CLIの環境構築のために
`npm i -g @vue/cli`
を実行すると下記のエラーが発生しました。
`i` はインストール、 `-g` はグローバル、という意味です。
グローバルにインストールされたものは、どのディレクトリでも実行できるようになります。“`
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN deprecated @hapi/joi@15.1.1: Switch to ‘npm install joi’
npm WARN deprecated @hapi/hoek@8.5.1: This version has been deprecated and is no longer supported