- 1. 【imi-enrichment-date】年号を含む日付表示の正規化
- 2. RustでWebAssemblyを使ってみた時の記録
- 3. Node.js+MongoDB構成でGraphQLのお勉強
- 4. DockerでNode.jsアプリを起動する
- 5. 【Node.js】日時処理を扱う方法
- 6. Node.js セキュリティアップデート + Node.js v15 について
- 7. Puppeteerでドラッグ&ドロップ
- 8. npmのグローバルインストールをするためにパスを通す方法
- 9. 【Windows】node-gyp ERRで困ったときの対処法
- 10. Visual Studio Code の Remote Containers でNodeの仮装環境を作成する
- 11. SpotifyのDaily Mixでは物足りないあなたへ送るサービス
- 12. 【Meteor】Hello Worldを出力する
- 13. CBORってなんだろう?
- 14. M1 Mac での環境構築の最適解
- 15. 【Express】Hello Worldを出力する
- 16. Google DriveのAPIをNode.jsから触るメモ
- 17. 【nodist】`npm i`実行時の`cb.apply is not a function`【Windows環境】
- 18. M1 Macでasdfを使ってnodejsをインストールしたい (2021/02/22時点)
- 19. Node.js でローカルファイルに書き込む
- 20. JavaScriptでcsvダウンロードを実装する方法
【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
【Windows】node-gyp ERRで困ったときの対処法
electronでディープリンク(Custom URL Schema)実装時に[electron-deeplink](https://github.com/glawson/electron-deeplink) を使おうと思ったのですが、そこでnode-gypのエラーが出て躓いたので、その時の対処法をメモします。
ディープリンクについては[electron-deeplink](https://github.com/glawson/electron-deeplink)を使って実装したら(少なくとも開発環境では)簡単にできましたので割愛します。# 結論
Python や Visual C++ といった必要なものをインストールする# エラー内容
`yarn add electron-deeplink`したところ、“`
gyp ERR! find Python
gyp ERR! find Python Python is not set from command line or npm configuration
“`
とか、Pythonをインストールした後も“`
gyp
Visual Studio Code の Remote Containers でNodeの仮装環境を作成する
# 概要
Visual Studio Code (以下、VSCode)の Remote ContainersでNodeコンテナを作成し、仮装環境で開発する。
## 環境
本記事を記載時点でのバージョン等を記載する
* macOS Big Sur 11.2.1
* VSCode 1.53
* Remote – Containers v0.158.0## 手順
1. Nodeを使用するフォルダを作成
2. VSCodeの“`New Window“`で新しいWindowを開く
3. “`Open folder“`で作成したフォルダを開く
4. コンテナ設定ファイルを作成する
4. 左下のRemote Containerのボタン(><が重なったようなマーク)をクリック 5. コマンドパレットが開くので、```Remote-Containers: Add Development Container Configuration Files...```を選択 6. ```Node.js```を選択 7. バージョンを選択(この記事では```14`
SpotifyのDaily Mixでは物足りないあなたへ送るサービス
# 背景
以下のQiitaの記事を読み、私もSpotify APIを使ってみたくなりました?
– [Spotify Web APIで明るい楽曲のみのプレイリストを作成する](https://qiita.com/oekaki0v0/items/c8a7084b28f7943b70b2)
# Spotify-Extension-A
完成したサービスがこちらです。
`たった3step`で、あなただけのプレイリストが作成可能です?– https://spotify-extension.shijimi.work/
demo pic.twitter.com/05rj7TRLwq
— playtag551 (@playtag551) 【Meteor】Hello Worldを出力する
#プログラミング勉強日記
2021年2月23日
[前の記事](https://qiita.com/mzmz__02/items/03c4bb839a5e5abe02a8)でNode.jsの3大フレームワークについて取り上げた。今日は、MeteorでHello Worldを表示する方法をまとめる。#Meteorを導入する方法
Node.jsの開発環境が構築されていることを条件とする。Node.jsの環境構築がまだの人は[こちらの記事(Windows版)](https://qiita.com/mzmz__02/items/6cc53f06205fd11367bc)を参考に環境構築してみてください。
Windowsの場合、Chocolateyを[公式サイト](https://chocolatey.org/)からインストールする。“`:管理者のPowerShell
$ Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocolCBORってなんだろう?
# CBORとは
Webサービスでよく使われるデータ交換フォーマットとして有名なものはJSONだと思います。
ただ、サイズが冗長なこともあり、バイナリとして表現しようと様々なものが生まれてきました。(例えば、MongoDBで使われるBSONなど)=> そんな中、今後注目されそうなものが**RFC8949**でRFC化された**CBOR**です。
## 特徴
* JSONデータモデル「数値、文字列、配列、マップ(JSONオブジェクト)、およびfalse、true、nullなどの値」に基づいている。
* エンコードされたデータは自己記述的である。
* デコードのためのスキーマ記述は不要である。
* JSONを使用したい一部のアプリケーションでは、**暗号化キー**、**グラフィックデータ**、**センサー値**などのバイナリデータを転送する必要があります。
JSONでは、これらのデータをエンコードする必要があり(通常はbase64形式)、複雑さとかさばりが増します。
=> CBORでは、このバイナリデータをそのまま受け入れることができます。一番の特徴は、CBOR自体がバイ
M1 Mac での環境構築の最適解
#本記事の執筆に当たって
M1チップ搭載のMacが発売されましたが、アーキテクチャの違いで環境構築に戸惑いを感じた方も多くいるのではないでしょうか。私もその一人でした。本記事では**2020年2月20日**現在の状況下で最も優れていると思われる環境構築方法を紹介したいと思います。
#環境構築の上での方針
– できるだけ**ネイティブ環境**(**arm64**)で構築する。
– ネイティブ環境で動作が不安定になる場合はRosetta2を使用して**Intel環境**(**x86_64**)で構築する。
– アーキテクチャ間の切り替えはスムーズにできるようにする。#本記事で環境構築する開発ツール・プログラミング言語
– Homebrew(**arm64/x86_64**)
– gcc(**arm64**)
– Nodebrew(**x86_64**)
– Node.js(**x86_64**)
– npm(**x86_64**)**Homebrewに関してはパッケージ管理システムとしてネイティブ環境とIntel環境のどちらにも採用することとする。**
#前提
【Express】Hello Worldを出力する
#プログラミング勉強日記
2021年2月22日
[一昨日の記事](https://qiita.com/mzmz__02/items/03c4bb839a5e5abe02a8)でNode.jsの3大フレームワークについて取り上げた。今日は、ExpressでHello Worldを表示する方法をまとめる。#Expressを導入する方法
Node.jsの開発環境が構築されていることを条件とする。Node.jsの環境構築がまだの人は[こちらの記事(Windows版)](https://qiita.com/mzmz__02/items/6cc53f06205fd11367bc)を参考に環境構築してみてください。
npmを使ってExpressをインストールするだけで、Expressを導入することができる。“`
$ npm install express
“`#Hello Worldを出力する
JavaScriptファイルを作成する。今回は`app.js`という名前のファイルを作成した。ポート番号を8080に設定してるので、今回は`http://localhost
Google DriveのAPIをNode.jsから触るメモ
Google Drive API v3を触ります。
google-auth-token-generatorを使ってtoken.jsonの作成をしてみる版です。> 以前書いた記事も参考に: https://qiita.com/n0bisuke/items/ff1479cd14e7a0c0be0c
## 環境
* Node.js v15.9.0
## credentials.jsonを取得
チュートリアルを参考にAPIを有効にし、credentials.jsonを手元に保存しましょう。
> https://developers.google.com/drive/api/v3/quickstart/nodejs
## google-auth-token-generatorでtoken.jsonを作成
google-auth-token-generatorを使うとパーミッションをつけたtoken.jsonを作成しやすいです。
> 利用イメージ
> ![](https://camo.githubusercontent.com/91dc29cde99aa2b53b192532
【nodist】`npm i`実行時の`cb.apply is not a function`【Windows環境】
nodistが`.node-version`ファイルを参照したり、自分でNode.jsのカレントバージョンを変更したりすると、Node.jsと`npm`のバージョンがずれてしまうことがあります。
“`
npm ERR! cb.apply is not a functionnpm ERR! A complete log of this run can be found in:
npm ERR! C:\Users\*****\AppData\Roaming\npm-cache\_logs\yyyy-mm-ddTXX_XX_XX_XXXX-debug.log
“`そういうときは、次のコマンドを叩くかnpmをインストールしなおして`npm`コマンドのバージョンをNode.jsのバージョンにそろえてあげます。
“`shell
nodist npm match
“`これで無事に`npm`コマンドが利用できるようになります。
もしこれでも改善されない場合は、npmを再インストールしてください。そもそも`nodist npm match`が実行できない場合はtake
M1 Macでasdfを使ってnodejsをインストールしたい (2021/02/22時点)
M1 Macでasdfを使ってnodejsを動かそうとしたら微妙にハマったメモ。
asdfでnodejsをインストールしようとすると
“`bash
$ asdf install nodejs xx.xx.xx
“`> Binary not found for version xx.xx.xx
のようなエラーが出る人向け。
# 結論
この記事を書いている2021/02/22時点では、M1 Macに対してnodejsの `arm64` バイナリが提供されていない。 このため、シェルが `arm64` で実行されている場合、 `arm64` のバイナリを取得しようとして失敗する。asdfを `x86_64` で実行することで、 `x86_64` のバイナリを取得できる。
nodejsのインストール時にarchコマンドでアーキテクチャを指定する。
“`
$ arch -x86_64 asdf install nodejs xx.xx.xx
“`参考: https://github.com/asdf-vm/asdf-nodejs/issues/189#issueco
Node.js でローカルファイルに書き込む
「いまさらこんな記事かよ」と思われるかもしれませんが意外と落とし穴にハマる事が多いのでケース毎にまとめておきます。
https://nodejs.org/api/fs.html
## 一気に書き込む場合
### エラーチェックの必要がなくて、データが書き込まれる間ユーザーを待たせることができる場合。
**writeFileSync** を使います。
“`
const fs = require( ‘fs’ )
fs.writeFileSync( ‘some.file’, ‘abc’ )
“`### エラーチェックが必要であるか、データが書き込まれる間ユーザーを待たせることができない場合。
**writeFile** を使います。
“`
const fs = require( ‘fs’ )
fs.writeFile( ‘some.file’, ‘very long string’, er => { if ( er ) throw er } )
“`3番目の引数にはエラーが渡ってきます。例えばファイルを`/some.file`のようにしてルートディレクトリに作
JavaScriptでcsvダウンロードを実装する方法
#はじめに
フロント(React)でcsvダウンロードを実装する機会があったため、備忘録です。
どうぞご活用ください。#実装
“`javascript
const handleDLcsv = async () => {
//アイテムの定義
const download_items = [
{‘id’: 1, ‘name’: ‘apple’, ‘price’: 100},
{‘id’: 2, ‘name’: ‘orange’, ‘price’: 120},
{‘id’: 3, ‘name’: ‘melon’, ‘price’: 800}
];
//csvヘッダー
const array_data = [[‘id’, ‘name’, ‘price’]];//文字コード
const bom = new Uint8Array([0xEF, 0xBB, 0xBF]);//csv用データ作成
download_items.map((