JavaScript関連のことを調べてみた2020年03月07日

JavaScript関連のことを調べてみた2020年03月07日
目次

React Native × Atomic Design で効率よく開発する

# Atomic Design とは
[Atomic Design](https://bradfrost.com/blog/post/atomic-web-design/) をご存知でしょうか。
公式には Atomic Design はデザイン自体の名前ではなく、方法論として紹介されています。

Atomic Design では、下記5つの構成要素が登場します。
1. Atoms(原子)
2. Molecules(分子)
3. Organisms(構造体)
4. Templates(テンプレート)
5. Pages(ページ)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/43625/e3822111-9458-95a1-1fc5-2d2d7f0356f9.png)

私は今、フロントエンド開発に React Native を利用していますが、コンポーネントベースで記述するため、 Atomic Design と親和性が高いと感じています。

各要素の粒度は議論があると思いますが、ここでは

元記事を表示

Reactで親コンポーネントのstateを下位のコンポーネントのイベント処理で更新する

# React で親コンポーネントの state を下位のコンポーネントのイベント処理で更新する

## 概要
 親コンポーネントで state を管理しているが、input 要素などの子コンポーネント側でイベント処理を行いたい時があると思います。結論から言うと、この場合の解決策の1つとしては、**「親コンポーネントから props 経由でハンドラー関数を渡す」**というやり方があります。気づけばカンタンなことですが、自分はハマってしまったので、誰かの参考になればと思って投稿しました。なお、React 初心者のため、もっと良い解決策がありましたら、ご教授ください。

## 本題

#### 親コンポーネント `Parent`

“`javascript:Parent.js
import React, { useState } from ‘react’;
import Child from ‘./Child.js’;

function Parent() {
// hook’s state administration
const [inputText, setInputTex

元記事を表示

意外と知らない並列処理のメリット

Quoraの[並列処理のメリットは何ですか?](https://qr.ae/pNtlKE)を参考にしてます。

処理の前後関係がないアルゴリズムを同時に実行できる。

単純にN個の並列化で処理時間がN分の1になるわけではないことに注意

日本のスーパーコンピュータ『京』も並列コンピュータです。

元記事を表示

【Nuxt/Node】API_URLが便利

## baseURLを動的に切り替える
`baseURL` を動的に切り替える方法が色々ありますが、下記の `API_URL` を設定する実装が楽なのでは?と思ったので、そのメモをしていきたいと思います。

## baseURLの決まり方
基本は、`defaultPort`、`defaultHost `と順番に決まっていき、 `options`の中で `baseURL`が定義されています。
ただ例外として、 `API_URL` が定義されていると `baseURL`が全て上書きされることがわかります。
これを使っていきたいと思います。
[axios-module/module.js at 932abc071b1e1bb64e8d8fc1fdd6e6f9ceb99b5a · nuxt-community/axios-module · GitHub](https://github.com/nuxt-community/axios-module/blob/932abc071b1e1bb64e8d8fc1fdd6e6f9ceb99b5a/lib/module.js#L52)

“`js

元記事を表示

FormDataでデータ送信する際の”SyntaxError: Unexpected token – in JSON at position 0″というエラーへの対処方法

# はじめに
ファイルアップロードの実装の際に,HTTP通信の表題のようなエラーが出ました.今までJSON形式でデータを送信していたのですが,画像送信をする際のサンプルでFormDataを用いる方法を用いていたので通信方式が変わるらしく生じたエラーのようです.
Web系のアプリ製作の初心者であり,変なことを言っている可能性が非常に高いので,詳しい方は間違いを見つけ次第ご指摘お願いします.

# そもそもこのエラーが出る原因
JSON形式の送信ではありえない1文字目に, “-” という文字が混入していた場合に起こります.(普通は”{“であるはず)
私の場合,送信内容がJSON形式でなく,`multipart/form-data`形式で送信していたため,下記のようなデータを送信していたのでエラーが生じたようです.

“`
—————————–54363239114604
Content-Disposition: form-data; name=”user_name”

hogehoge
—————————–543

元記事を表示

TTCアルゴリズムで看護師のアサインメント表を自動作成7

※作成途中※
看護師7名で患者35名を受け持つ場合の解説。画像のアップロードがうまくいかない原因を調査中。

#1
![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580460/c205f9b6-7a4d-bb0c-8faa-030058c02b8c.jpeg)

#2
![]()
スライドの2枚目だけ、どういうわけか全くアップロードできない。![]()とだけ表示されて、検索しても原因が分からない。画像の形式もサイズも方法も合ってるし、ブラウザのキャッシュをクリアしても変わらず。

#3
![スライド3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/580460/bfdfe325-2848-2b82-8994-afde3cc988dc.jpeg)

#4
![スライド4.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/5804

元記事を表示

TTCアルゴリズムで看護師のアサインメント表を自動作成3

例題1.
4人の看護師で4人の患者を受け持つとする。最適な受持ちの配分を考える。
設定。
患者の予定が手術、検査、清潔ケアの3つだとするとき、看護師の能力を次のように示すことにする。
・手術も検査も受け持てないが、清潔ケアのみ対応な看護師
××○

・本日の予定が手術と清潔ケアである患者
○×○

各看護師が可能な限り能力の上限まで患者を受け持つと設定する。対応不可能な患者でも、希望順位は低いが他に受け持てる看護師がいないのなら引き受けるとする。

いま、4人の看護師と、4人の患者が以下のように表せるとする。
(看護師1~4) 手術 検査 清潔ケア
1. ○ ○ ×
2. ○ ○ ×
3. ○ ○ ×
4. × ○ ○

(患者1~4) 手術 検査 清潔ケア
1. × ○ ○
2. ○ × ×
3. × × ×
4. ○ ○ ×

各看護師が、1~4の患者を受け持つときの第4希望までを表にすると以下のようになる。
1位 2位 3位 4位
1. 4 2 3 1
2. 4 2 3 1
3. 4 2 3 1
4. 1 3 2 4

看護師4は手術患者の受持ちが不可能なので、患者2と4は受

元記事を表示

コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。

# これはなに?

チャットワークの部屋のログをすべて取得できるスクリプトの紹介です。

## モチベーション

チャットワークのログをテキストデータとして取得できないかという相談がありました。

チャットワークの API だと最新100件までしか取得できないため、なんとかできないか試行錯誤しました。
https://developer.chatwork.com/ja/endpoint_rooms.html#GET-rooms-room_id-messages

同じ目的のものとして [goodbye_chatwork](https://github.com/swdyh/goodbye_chatwork) があったが、自分のログイン方法が SSO だったためか、[reCAPTCHA の影響か](https://github.com/swdyh/goodbye_chatwork/issues/29) 、直接は利用できなかった。スクリプトを参考にした。

# スクリプトは?

以下の gist に上げています。

コンソールを使って指定のチャットワーク部屋のメッセージをすべて取得する。
h

元記事を表示

【Nuxt.js + COTOHA API + microCMS】COTOHAチックなフラッシュカード作ってみた ※答えはCOTOHA先生が\(^o^)/で隠してくれるよ

## 0. はじめに
タイトルの通りですが、**【Nuxt.js + COTOHA API + microCMS】**を使って**COTOHAチックなフラッシュカード**を作ってみました!

以下の参加記事になります!

– [**【Qiita x COTOHA APIプレゼント企画】COTOHA APIで、テキスト解析をしてみよう!**](https://zine.qiita.com/event/collaboration-cotoha-api/?utm_source=qiita&utm_medium=top_banner)

COTOHA APIを使ってこんなのも作ってます!

– [**【LINE BOT + COTOHA API】君の文章は相手を不快にしていないか?COTOHA先生にチェックしてもらおうぜ**](https://qiita.com/i-tanaka730/items/a32b3ce7ca8c7edc9634)

~~ちなみに息子(2歳)へのクリスマスプレゼントを華麗に失敗した私が狙うのは「作ろうきのこの山」です。:santa:~~

## 1. 概要

こんな感

元記事を表示

TeamsでFAQチャットボットを作る

# 背景
インターンでとあるサービスのFAQを作ってくれという課題を出された。
いずれは社内で「勤怠連絡や有給申請とかでも使えるようにしたい」とのこと。

が、コロナの影響で中途半端に終了となってしまった。不完全、残念。。

# 使用するもの
– [Teams](https://products.office.com/ja-jp/microsoft-teams/group-chat-software) (App Studioを入れておく)
– Microsoft Azure Portal (GUIでAzureを管理するツール)
– [QnAMaker](https://www.qnamaker.ai/) (リクエストに対して適切な返答をしてくれるデータ置き場)
– 返答データ(Excel、FAQサイトのURL)
– Bot Framework Emulator (ボットのテストツール、使用しなくても開発には支障なし。)

# こんなものを作るよ

![iOS の画像.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

CSS/stickyについて知るべき事はそんなに多くない。

####テーマ
 position:stickyをどれだけ深く掘り下げたところで、落ち着く先のパターンなんか一つや二つ。
 まずは使い方のアイデアを練って、それを可能にする。たったそれだけのお話に必要な知識はせいぜい↓こんなもの。

#####1. sticky(z-index:2)に妹relative(z-index:1)を作る。
 stickyがうまく機能しない場合、「ブラウザがIEではないか。」→「stickyの後ろ(同じ親)にrelativeやstickyはあるか。」→「z-indexは正しい指定になっているか。」をチェックする。

#####2. 困った時はfixed(overflow:auto)を併用。
 最前面に配置する要素がtop:0でなく、且つ妹relativeを配置している場合、その妹は兄貴の下をくぐり抜けてしまう。
 これを防ぎたい場合は、兄stickyの代わりに親要素にposition:fixed;overflow:auto;top:hogeを指定し、兄はtop:0にする。

#####3. href=#idはjsで補う。
 stickyとhref=#idの相性

元記事を表示

叩きまくられる「非同期のリクエスト」を自作の「throttle」で間引いてみた

## throttle/debounce というのをご存知ですか?
私は知りませんでした。笑

今では、`position: sticky;`、`intersectionObserver`、`media query` などなど、便利なものがたくさんあるのでそこまで気にしなくなったかもしれませんが、
昔は、`position: fixed`、scroll イベント、 resize イベント を駆使して、UI を実現していました。今でも ~~IE のせいで、レガシー環境のせいで~~ いろいろな事情によってそう処理をされている方も多いのではないのでしょうか。

とはいえ、監視するにしても、大量に発行される scroll や resize イベントを全部見なくたっていいことだってたくさんあります。

“`javascript
window.addEventListener(‘scroll’, event => console.log(window.scrollY));
“`

この一行を、chrome などの開発者ツールで叩いてみて、window をスクロールしてみてください。

すると、

元記事を表示

Number型の配列をFloat32Arrayへ変換して、バイナリのままbase64で保存

#はじめに
乱数をn個発生させ、それを配列で保持します。
その配列を文字列することに興味があるとします。
そのままJSON文字列にすると、配列のサイズにもよりますが、中々のサイズになります。
もし、多少精度が落ちてもいいのなら、まあまあ圧縮できます。
Number型は、8バイトですので、Float32Arrayに変換するだけでも、サイズが半分になります。
4バイトでも十分なケースって結構多いんじゃないでしょうか。
そのFloat32Arrayをバイナリのまま、base64にします。
要は、以下の2つのパターンで比較をしたいってことです。
![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163605/b5f97c42-a4e2-0d41-2adf-f669df6b5376.png)

#圧縮率の理論値
圧縮率を「削減された量の元の量に対する割合」とします。
ざっくり計算してみます。
そのままjson文字列にすると、今回発生させる乱数は0から1なので、
0と小数点とカンマで3バイト、有効桁数が16桁

元記事を表示

【Svelte】最低限の修正でTypeScript対応してみました【初期設定】

## 概要
Svelteでcomponentを書く時に、中身をJSからTypescriptでかけるようにしました。
今回はデフォルトでできるプロジェクトに対して、最低限何があればTypescriptにできるかを重視してます。

なお、デフォルトに乗っ取り`rollup`を使用するので`webpack`とかでのやり方は対象外です。

## 手順
### tsconfig.json追加
TypescriptのConfigファイルです。
こちらは手動での追加になります。

“`json:tsconfig.json
{
“compilerOptions”: {
“target”: “es6”,
“baseUrl”: “./”
},
“include”: [
“./src”
]
}
“`

### 追加パッケージ
“`bash:console
yarn add -D svelte-preprocess typescript rollup-plugin-typescript2 rollup-plugin-postcss

元記事を表示

配列の長さを測ろうとしたらオブジェクトだった話

# 本論

「(変数)が空の時だけ表示されるメッセージが、空でないときも表示される」というバグがあった。その判定用の関数を調べてみたところ、

“`javascript
return v.length > 0;
“`

といった風なコードが書かれていた。しかし同じ`v`を扱っている処理をよく見てみると、

“`javascript
Object.keys(v).length
“`

のような表記がされていた。なので判定用の関数を同様の表記にしたところ、バグは解消された。

後で気になって、何故エラーを吐かずに`v.length > 0`が`false`になっていたのかを調べてみたところ、どうやら以下のようになっていたらしい。

`v`は配列ではなくオブジェクトで、プロパティ`length`が設定されている訳でもないので、`v.length`は`undefined`になる。その`undefined`に対して大小比較を行うと、必ず`false`になる。

# 結論

扱う変数がオブジェクトか配列かなど、どのような物であるかを把握するのは重要。

# 最後に

このバグを仕込んだのも

元記事を表示

Qiitaの通知欄から各ユーザのプロフィールに移動できるユーザースクリプト

# 概要

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/507909/be170259-c4dd-afef-b21d-3e4ec37937cd.png)

Qiitaの通知欄で各ユーザのアイコンやユーザ名をクリックすれば、そのユーザのプロフィールページへ直接移動できるようにするユーザースクリプトを作りました。

[GreaseyFork](https://greasyfork.org/ja/scripts/397416-qiita%E9%80%9A%E7%9F%A5%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%AF)で公開中です。

# きっかけ

[Qiitaの投稿画面の同時スクロールを改善するユーザースクリプト – Qiita](https://qiita.com/m_fukuchan/items/2a0c1f7b45894449ff56)

先日の記事は予想外の好評を頂きまして本当に驚きました。
Qiit

元記事を表示

【Nuxt.js】form実践編:contenteditableでイライラ解消!

# 前置き

formで使うinput, textarea
中でも何かと使い勝手の悪いtextareaさん?
HTMLのグローバル属性
contenteditableを使って
textareaをもっと見やすくしてみましょう!

**textarea**
![textarea.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/65183365-2168-494e-7c87-502007e78570.gif)

**contenteditable**
![div.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469755/81989bfa-a764-dc84-7bad-2663c6ddb71a.gif)

# contenteditableって?

簡単にいうと編集モードにしてくれます。
分かりやすくbuttonタグにつけました。
編集できる+文字数に応じて幅が変化してくれます!
![button.gif](h

元記事を表示

SCSSとJavascriptの読み込みに関する質問

CodepenにてHTML SCSS Javascriptを用いてページを作っていたのですが、Github pagesにてページを公開する段階においてSCSSとJabascriptが読み込まれずHTMLのみの表示となってしまいます。
現在、Github内のレポジトリには、
・HTMLファイル
・SCSSファイル(stylesheet.scss)
・JSファイル(chart.js)
が入っています。
head内の記述に誤りがありますでしょうか?
よろしくお願いします。

“`html