JavaScript関連のことを調べてみた2021年09月21日

JavaScript関連のことを調べてみた2021年09月21日
目次

AudioWorkletでレコーダーを作る

AudioWorkletで録音します。

“`audio.js
class RecorderNode extends AudioWorkletNode {
constructor(audioCtx){
super(audioCtx, ‘recorder-processor’);
this.buffers = [];
this.port.onmessage = e => this.buffers.push(e.data);
}

mergeBuffers(buffers){
const sampleLength = buffers.reduce((acc, buf) => acc + buf.length, 0);
const samples = new Float32Array(sampleLength);
let sampleIdx = 0;
for (let i = 0; i < buffers.length; i++) { for (let j = 0; j < buffers[i].length;

元記事を表示

var vs let vs const

はじめに

ふとvar let const の違いを聞かれたときにはっきりと分からなかったので、
調べてここにアウトプットします。

そもそもvar let constとは

全てJavascriptにて***変数宣言をする際に使うキーワード***

その中で、letとconstはECMAScript2015から採用された***新しい宣言記法***。

var let constの違い

全て変数宣言に使われる記述ですが、3つの要素に違いがあります。

1再代入、再宣言が可能か

再代入…すでに宣言していた変数に、値を再び入れなおすこと
再宣言…すでに宣言していた変数の名前を、キーワードごと丸っと宣言しなおして、上書きすること

再代入

var

“`javascript
var techacademy = ‘代入1回目’;
techacademy = ‘代入2回目’ //再代入時にvarのキーワードを書かない
“`

let

“`javascript
let techacademy

元記事を表示

これからReact始めたい人のための今日だけでできるTODO #4

“`js
handleClick(i) {
const squares = this.state.squares.slice();
squares[i] = ‘X’;
this.setState({squares: squares});
}
“`
[全体のコード](https://codepen.io/gaearon/pen/ybbQJX?editors=0010)

Boardのstateが変更されると個々のSquareコンポーネントも自動的にレンダリングされる。
全てのマス目の状態をBoardコンポーネントで保持できるようになった。

SquareコンポーネントはBoardコンポーネントから値を受け取って、
クリックされた時はそれをBoardコンポーネントに伝えるものになりました。
React用語だとSquareコンポーネントは **制御されたコンポーネント(controlled component)** と呼ばれるみたいです。

## イミュータビリティ?(immutability; 不変性)

“`js
const squares = this.state.

元記事を表示

kintoneで計算フィールドとJavaScriptカスタマイズの計算を一緒にしちゃだめ!という話

今回は、計算フィールドとJavaScriptカスタマイズの計算を一緒にしないようにしましょう!というお話です。

ためしに、アプリを作ってみましょう。

# アプリの準備

数値フィールドのA,Bに値を入力したら、
計算フィールドCと数値フィールドDに自動的に計算値が入る。という仕組みにします。

| フィールド種類| フィールドコード | 計算式 |
|:-:|:-:|:-:|
| 数値 | A | |
| 数値 | B | |
| 計算 | C | A + 10 |
| 数値 | D | JavaScriptで B+C を計算する |

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/536148/f858ef3a-48c8-70f9-c839-0a694166c1cd.png)

# JavaScriptの準備

計算フィールドはフィールド値変更時イベントで指定できないので、
数値フィールドのA,Bの値変更時に計算をすることにします。

“`js
ki

元記事を表示

forEachの中で非同期処理を行う際、awaitやPromiseを使ってすべての作業が完了するまで待ちたい。

## はじめに ~ 非同期forEachは一斉に処理が始まる(並列処理?)

非同期処理とforEachについての簡単なプログラムを以下に示す

“`javascript:sample.js
const array = [1, 2, 3, 4, 5]

array.forEach(n => {
setTimeout(() => {
console.log(`${n}秒待ちました。`)
}, n*1000);
});
“`

これを実行すると以下のように出力される。

“`
1秒待ちました。
2秒待ちました。
3秒待ちました。
4秒待ちました。
5秒待ちました。
“`

さて、この出力は1秒おきに1行ずつ表示されるため、5種類の “`setTimeout(() => {})“` が同時に実行されていることが分かる。(正確には同時ではないが)

## つまづいた点 ~ 処理が終わってないのにforEachがスルーされている?(←勘違い)

とりあえずforEachの後ろに出力を追記する。

“`javascript:sample.js
con

元記事を表示

画像素材共有サービス「フォトフリ」を爆速開発した話

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206742/010d7a2b-a55a-d45f-5943-252c3a14581b.png)

ども!「**だるだるし**」です
今回は先日公開した [株式会社NEXS](https://top.nexsjp.com) の「**フォトフリ**」という画像素材共有サービスについて書いていきます.
Nuxt.js使っててなんでバックエンドはNode.jsじゃないねん,とか思われると思いますがその辺りも含めて
まあ,自論詰込みの読み物です

# 画像素材共有サービス「フォトフリ」を作成した

まず「[フォトフリ](https://service.nexsjp.com/photofree/)」とは何ぞや,というのはリンクを参照してください.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206742/52184c76-9855-b999-430f

元記事を表示

Chart.js 3系と2系のオプションの違い 2021/9/21

Chart.jsは2系と3系で大きくオプションが変わっているそうで、昔の記事からコードをコピペすると全然上手く動きません。
ということで、Chart.js3系を使ってみて2系からの違いをまとめていこうと思います!

基本は以下のドキュメントに記載されていますが、サンプルコードが無いので分かりづらい。
https://www.chartjs.org/docs/latest/getting-started/v3-migration.html

## fontSize
2系

“`js
fontSize:20
“`

3系

“`js
font: {
size: 20
}
“`
## title
2系

“`js
title: {
display: true,
text: “Chart Title”,
}
“`

3系
いくつかのオプションは`plugins`の中に入れるようになりました。

“`js
plugins: {
title: {
display: true,
text: “Chart Title”,
}
}
“`

## leg

元記事を表示

非同期関数のループ処理にforEachを使うとどうなるか – Part4

【パターン4 非同期関数のループ処理において、Promise.allを利用する】

パターン1ではforEach + async/await、パターン2ではforLoop + async/await、パターン3ではforLoop + Promise/thenメソッドを使いましたが、今回は、Promise.all()を使用してテストします。

説明:フェイク非同期関数(fakeDatabaseQuery)を作成し、その関数がプロミスオブジェクトをリターンする形にします。また、Array.prototype.map()を使用して、プロミスオブジェクトがarrayに詰め込まれた100回分の処理のひな型(const promises)を作り、それに対して、Promise.all()で100回分の処理を一気に行います。

結論:このような非同期関数のループ処理において、シンプルなsyntax(構文)と処理の速さにおいて、最もおすすめな方法です。

その他:下記のサンプルコードは、すべてNode.js v14.15.5でテストしたものです。また、私が利用している環境(Ubuntu + Node.j

元記事を表示

非同期関数のループ処理にforEachを使うとどうなるか – Part3

【パターン3 非同期関数のループ処理において、async/awaitなしでforLoopを実行、ただし非同期関数内でthenメソッドを使用】

パターン1ではforEach + async/await、パターン2ではforLoop + async/awaitを使いましたが、今回は、async/awaitなしでforLoop + (Promise + thenメソッド)を使用します。

説明:フェイク非同期関数(fakeDatabaseQuery)を作成し、forLoopでこの非同期関数を100回実行します。パターン2(Part2)との違いは、async/awaitなしでforLoopを回している点、および、フェイク非同期関数内部でPromiseとthenメソッドを使い連続した非同期の処理を行っている点となります。

結論:async/awaitなしでforLoopによりフェイク非同期関数(fakeDatabaseQuery)を実行していますが、そのフェイク非同期関数内部でPromiseとthenメソッドを使用した処理を行うことにより、パターン2のようなサスペンドされた状態が生じないため

元記事を表示

【Jest】テストのスキップ

# はじめに
Jestを使っていて、処理が重い処理のテストを一時的にスキップしたい場合、skipを追加することで回避することができます。
[公式ドキュメント](https://jestjs.io/ja/docs/api#describeskipname-fn)

# 検証

* “`describe“`、“`test“`、“`it“`関数に“`.skip“`追加するとテストの実行をスキップすることができます。

“`javascript:sum.js
export const sum = (a,b)=> a + b;
“`

“`javascript:sum.test.js
import { sum } from “./sum”;

//skipを追加した。
test.skip(`add 10 + 20 to equal 30`, () => {
expect(sum(10, 20)).toBe(30);
});

“`

実際にテストを実行すると、テストがスキップされていることが確認できます。

“`sh
yarn test /Users/jest-

元記事を表示

これからReact始めたい人のための今日だけでできるTODO #3

## CodePenでReact DevToolsを使いたい時
– ログインする or 登録してメール認証する
– [チュートリアルのコードにアクセス](https://codepen.io/gaearon/pen/VbbVLg?editors=0010)
– 画面右下に「Fork」ボタンがあるのでクリック
– 画面上の「Change View」から「Debug mode」を選択
– 新しいタブが比較のでDevツールを起動すればReactタブが出現する

画面右下に「Fork」ボタンがあるのでクリック
![スクリーンショット 2021-08-13 7.17.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/146612/14cc86da-8ffb-a5b2-2126-8e738c293d64.png)

画面上の「Change View」から「Debug mode」を選択
![スクリーンショット 2021-08-13 7.21.12.png](https://qiita-image-store.s3

元記事を表示

非同期関数のループ処理にforEachを使うとどうなるか – Part2

【パターン2 非同期関数のループ処理において、forLoop + async/awaitを使用する】

前回のパターン1ではforEachを使いましたが、今回はforLoop + async/awaitを使ってテストします。

説明:フェイク非同期関数(fakeDatabaseQuery)を作成し、forLoopとasync/awaitを利用して、処理を(1 ~ 100まで100回)順番に実行します。プログラム内部にも説明がありますが、awaitは受けとる予定のプロミスオブジェクトがfullfilledまたはrejectedとなるまでプログラムをサスペンドしますので、当然、処理は遅くなります。

結論:パターン1と比較して、フェイク非同期関数をループ実行する点は同じですが、async/awaitが効いて逐次処理となりますので、当然ながら「遅い」です。ただし、1~100まで順番に処理しますので、もしそのように順番に処理をする必要がある場合は、このsyntax(構文)は意味があることになります。

その他:下記のサンプルコードは、すべてNode.js v14.15.5でテストしたものです。

元記事を表示

非同期関数のループ処理にforEachを使うとどうなるか – Part1

array.forEachのコールバック関数に非同期の関数であるデータベースクエリなどを入れてぐるぐる回した際の挙動が気になったため、いくつかのパターンにまとめてみました。

【パターン1 非同期関数のループ処理において、forEach + async/awaitを使用する】

説明:フェイク非同期関数(fakeDatabaseQuery)を作成し、forEachのコールバックとしてフェイク非同期関数を100回実行するとどのような挙動になるのか、試してみました。

結論:一見、async/awaitによりarrayのアイテムをひとつずつ処理を行うように見えますが、実際にはそうはなりません。ただし、処理は速いです。async/awaitによるサスペンドが全く効かず、順番がめちゃくちゃになりますが、フェイク非同期関数を実行する度に、サスペンドなしでスレッドループにぶっこんで通常の非同期の処理を行っている感じです。
ちなみに、MDNのドキュメント(Array.prototype.forEach())には、forEach does not wait for promises. と書いてあるので

元記事を表示

Array.fromの第1引数のarrayLikeって配列じゃなくてもいいのか

[オライリーの プログラミングTypeScript](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0TypeScript-%E2%80%95%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8BJavaScript%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-Boris-Cherny/dp/4873119049) P.81に出てきた`Array.from`の以下のような使い方を見て、最初意味が分からなかったため、調べてみました。

“`typescript
function fill(length: number, value: string): string[] {
return Array.from({length}, () => value)
}
fill(

元記事を表示

axiosを使った簡単な実装

# axios get postメソッドについて

開発環境
windows10 home
Ruby 2.6.3
Ruby on Rails 5.2.6
vue.js 2.6.14

## axiosとは
ブラウザや node.js で動く Promise ベースの HTTP クライアントである。

インストール

“`
yarn add axios
“`

Vueファイルにインポート

“`
import axios from ‘axios’;
“`
## getメソッド
“`js
import axios from ‘axios’;

methods: {
setMemo: function () {
// axios.HTTP動詞(‘url’)
axios.get(‘/api/memos’)
// .then()で通信が成功した際の処理を書く。
.then(response => (
// Axiosで呼び出したAPIの情報をmemosに代入
this.memos = response.

元記事を表示

Undo/Redoが出来るお絵描きチャット”えんぴつチャット”をWasmで作った

![スクリーンショット 2021-09-17 132128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497826/559a9ace-7352-2ac5-d2c7-135a6dbef5d4.png)

![IMG_0323.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/497826/a6e162aa-7b72-faeb-1392-b9adc2c36415.png)

# 公開先
https://minordaimyo.net/pencilchat/

# えんぴつチャットの主な特徴・使い方
– 高解像度の256色キャンバス(A3 600dpi、9921x7016pixel)で軽快な描き味
– 多人数参加でもUndo/Redo可能
– 筆圧と傾き検知に対応
– 参加人数は8人まで(見学参加は現状40人まで)
– 2本指のタッチ操作でキャンバスのスクロール・拡縮
– 2本指タップでUndo、3本指タップでRedo
– キ

元記事を表示

JavaScriptの基礎まとめ

jsの基礎知識をまとめた学習記事です。

##JavaScript

JavaScriptとは、ECMAscriptの使用に基づいて実装される言語。

“`
ブラウザ
|-JavaScript
|-ECMAscript
|-WebAPI
“`

##オブジェクト

キーと値をペアで管理する入れ物。

“`js
{ num1: 1, num2: 10 }
“`

##メソッド

オブジェクトの中に格納された関数。

“`js
{ funA: function a(){
console.log(“ok”);
} }
“`

##グローバルオブジェクト

jsエンジンによって生成されるコード内のどこからでもアクセスできる(あらかじめ設定されている)オブジェクト。jsの実行前には、グローバルオブジェクト(window)とthisが用意される。

##コンテキスト

文脈。コードの現在の実行状態。

“`
・グローバルコンテキスト → 関数の外側。
・関数コンテキスト → 関数の内側。
“`

##コールスタック
jsがどのように処理を進めたのか追

元記事を表示

【React】面白いhooksを作ったよ!【全員が同じstateを共有する】

# useStateってありますよね

“`typescript
const [state, setState] = useState({count:0, boolean:true})
“`

Reactで最もよく使う状態管理を行うhook、 `useState`。めちゃくちゃ使い心地いいですよね。
でもこの`useState`は、当たり前ですが、**共有されません**。 沖縄県在住のAさんが`setState`で状態を変更しても、東京都在住のBさんの`state`には影響を与えません。 **当たり前ですね**。

# でもそれができたら面白くない?
![realtimeSharedState.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/234396/660b2b93-3730-766b-841f-4f54d41a62e2.png)

誰かが`setState`を実行したら、それが**同じページを見ているすべての人に反映されたら**何か面白いことができそうじゃないですか?

# 例え

元記事を表示

クリーンなReactプロジェクトの21のベストプラクティス

本記事は、[Mohammad Faisal](https://56faisal.medium.com/)氏による「[21 Best Practices for a Clean React Project](https://betterprogramming.pub/21-best-practices-for-a-clean-react-project-df788a682fb)」(2021年4月23日公開)の和訳を、著者の許可を得て掲載しているものです。

#クリーンなReactプロジェクトの21のベストプラクティス
>コード品質向上のための実践的アドバイス

![Woman with index finger over mouth](https://miro.medium.com/max/630/0*wueohBheYq-ekUeC)
Photo by [Diana Polekhina](https://unsplash.com/@diana_pole?utm_source=medium&utm_medium=referral) on [Unsplash](https://unspla

元記事を表示

Alpine.jsを始めよう!

# はじめに

みなさま、Alpine.jsをご存知でしょうか?
まあ、ものすごく簡単に言うと **かんたんなVue.js** です。
ただでさえJSフレームワークの中では比較的簡単目なVue.jsですが、さらにかんたんです。
どんぐらいかんたんかというと **jQueryと同じかそれ以上** ってレベルです。
しゅごい!
今回はこれを紹介していこうと思います。

https://alpinejs.dev/

# JSフレームワークとは

**SPAとかJSでなんかすごいことやりたいときに入れるやつ** 、くらいの雑な認識で大丈夫です。
いわゆる3大フレームワークと言われているのがお互い影響し合いつつ、競い合っている感じです。
概ねデータバインディング(JS内の変数の値をそのまま出したり、formから書き込んだり)がしたいときに使われることが多いかと思います。

* Angular
* おそらく一番初めに出たJSフレームワーク
* Google製で、Google内で燃えに燃えている案件を鎮火させる過程で生まれたリアル銀の弾丸
* ver1の頃は「AngularJ

元記事を表示

OTHERカテゴリの最新記事