- 0.0.1. preventDefault()に気づかず苦戦した話
- 0.0.2. [JavaScript]URLSearchParams.toString()がnull値を”null”とするのを避ける為、nullをオブジェクトから除外する
- 0.0.3. TypeScriptで戻り値がvoid型の関数を扱う場合の注意点
- 0.0.4. 【React Router v6】コンポーネントを跨いでとを設置するとエラーが出る【初学者向け】
- 0.0.5. 例外処理
- 0.0.6. jQueryでキーコード判別
- 0.0.7. javascriptでリダイレクト【忘備録】
- 0.0.8. Javascriptでゲームプログラムの下地を作る
- 0.0.9. マイクロフロントエンドのフレームワークまとめ
- 0.0.10. 【MEMO】height: calc(100vh – 8px)がはみ出る話
- 0.0.11. [pdf.js] 手軽にPDFファイルをHTMLに埋め込めるWebComponentを作った
- 0.0.12. 自分で作ったAI同士を会話させてみた
- 0.0.13. ElasticBeanstalk の環境を Node.js12 から 16 にアップデートする際の躓きポイント
- 0.0.14. AIが何についてのポエムを作ってるのか当てるゲーム作った
- 0.0.15. カードゲームロジック
- 1. カードゲームロジック
- 1.1. 概要
- 1.2. 動作コード
- 1.3. コード
- 1.3.1. [Vue]画面スクロールに合わせてバックグラウンドのalphaを調整
- 1.3.2. Presigned URL を用いた S3 multipart upload を行う (by JavaScript + Python Chalice)
- 1.3.3. React Hook FormでuseFieldArrayの初期化方法を間違っていた話。appendやreplaceなどは使わずにdefaultValuesで行う。
- 1.3.4. WordPressでAjaxにて投稿記事を取得する際にfetchを使ってダウンロードの進行状況(progress)を取得する方法
- 1.3.5. Test Doubleについて
preventDefault()に気づかず苦戦した話
## はじめに
こんにちは。
駆け出しフロントエンドエンジニアのももたれです。最近はJavaScriptの基礎部分をひたすら書いてました。
自分の備忘録も兼ねて、preventDefault()に気づかず苦戦した話を書きます。## 実装内容
### ページTOPへ戻るボタン
ページに入り、ちょっとスクロールしたら右下に出てくる「ページTOPへ戻るボタン」
クリックしたら**するするっと**ページTOPに戻る、まあよく見るあのボタンを作ろうとしてました。htmlとcssで**ただの**「ページTOPへ戻る」は作ったことありますが、JavaScriptを使っては初めて。
調べたらよさげな記事出てきたので、「お、いけそう」と思いきや、だいぶ苦戦しました。### コード
こんな感じで書いてました。htmlは大した内容じゃないので省略します。
大事なのは、**aタグ**使ってました。“` javascript
// スクロールしたらボタンが出てくる
const topBtn = document.querySelector(“[data-target-following
[JavaScript]URLSearchParams.toString()がnull値を”null”とするのを避ける為、nullをオブジェクトから除外する
# 前提
GET用のURLパラメータを構築する時、URLSearchParams.toString()が便利です。次のように使います。
“`javascript
const params = {
search: “abc”,
searchtype: 2,
userid: 1234,
}const url = “https://host/api/getXXX” + (new URLSearchParams(params)).toString()
console.log(url);
“`“`
https://host/api/getXXX?search=abc&searchtype=2&userid=1234
“`# 問題点
paramsのプロパティ値にnullやundefinedを含むものがあった場合、それらは”null”、”undefined”という文字列としてエンコードされます。
“`javascript
const params = {
search: null,
searchtype: undefined,
userid: 1234
TypeScriptで戻り値がvoid型の関数を扱う場合の注意点
この記事は、TypeScriptで戻り値がvoid型の関数を扱う場合の注意点に関する覚書です。
# TL;DR
– TypeScript(JavaScript)における明示的な戻り値を持たない関数は、ランタイムでは`undefined`を返す。
– TypeScriptにおける関数の戻り値としての`void型`は`undefined型`よりも「戻り値の利用を想定していないことを明示できる」点で優位性があるが、知らないとハマりそうなassignabilityの罠がある。
– 上記のassignabilityの仕様を把握しておきつつ、以下のように型注釈することがbetterだと思っている。| 型注釈をつける関数の種類
(戻り値の利用想定) | 戻り値の型注釈 | 関数型の使用 |
|:———–:|:————:|:————:|
| [1. 副作用だけの関数
(利用なし)](#1-副作用だけの関数) | ⭕️ `void`
(? `undefined`) | 極力避けるべき
[(理由)](#12-関数型を使う場合) |
【React Router v6】コンポーネントを跨いでとを設置するとエラーが出る【初学者向け】
## はじめに
react router を使ってルーティングする際、込み入ったデザインだとコンポーネントを跨いでタグを配置することになります。
自分はそこで少し躓いてしまったので、誰かの役に立つのではと思い記事に残してみました。
## まず、\を直接\の中に書くことができる場合
“`JavaScript:App.tsx
import { Sidemenu } from “components/organisms/Sidemenu”;
import { BrowserRouter, Routes, Route, Link } from ‘react-router-dom’;
function App() {
return (
} />
例外処理
# 例外処理とは
例外というのは、エラー(ランタイムエラー)のことです。エラーが出るとそこでプログラムは強制終了してしまいます。
しかし、外部との通信やデータのやり取りをするようなプログラムは様々な要因によるエラーを避けることはできません。
そこで、JavaScriptやTypeScriptには、エラーを取り扱うための方法が用意されています。# throw文とErrorオブジェクト
throwというのは、「投げる」という意味です。throwで何かが投げられるとエラーが発生します。“`ts
const dog = “Hello”;throw dog;
console.log(“world”);
“`
この例では、throwで変数dogを投げています。この時点でエラーが発生するのでプログラムは終了してconsole.logまで到達することはできません。throwに渡すのは、式なら何でも可能です。そして、throwに渡すのは基本的にErrorオブジェクトを指定します。まずは、newを使ってErrorインスタンスを作成します。
Errorコンストラクタは、引数に文
jQueryでキーコード判別
# 入力文字の種類を制限する
## この記事でやること
jQueryで数字、記号、ファンクションキーの入力を制限する。## 動作環境
osはwindows11、ブラウザはChrome.## 参考ページ
キーコードはこちらの記事を参考にした。http://faq.creasus.net/04/0131/CharCode.html
## 失敗例
上のページを参照するとソースコードは下のようになる。“`
$(function(){
$(document).on(‘keypress’, ‘.compare-input’, function(e){
var keycode = e.keyCode;
if((48 <= keycode && keycode <= 57) || (96 <= keycode && keycode <= 123) || (186 <= keycode && keycode <= 192) || (219 <= keycode && keycode <= 226)){ c
javascriptでリダイレクト【忘備録】
“`jav
“`
Javascriptでゲームプログラムの下地を作る
# Javascript でゲームプログラムの下地を作る
キー入力を抽象化しておおむね60fpsの描画を行う最小限のソースコードを作成しますソースコードはここ
[https://github.com/ikuo0/js-game_template](https://github.com/ikuo0/js-game_template)デモンストレーションはここ
WASD 又は 十字キー の操作で青いなにかが上下左右に動きます
[https://ikuo0.github.io/js-game_template/](https://ikuo0.github.io/js-game_template/)# 入力処理
JavaScriptのキー入力はイベント駆動ですのでフレーム毎にキー入力を取得するという関数がありませんこういうことがしたいがJavaScript標準のAPIだけではできないので困る
“` javascript
// 毎フレーム呼ばれる関数
function GameMain() {
var input = getInput();//
マイクロフロントエンドのフレームワークまとめ
### 1.Bit
GitHub star: 16.3k
https://bit.dev/### 2.single-spa
GitHub star: 12.1k
https://single-spa.js.org/### 3.qiankun(乾坤)
GitHub star: 13.9k
https://qiankun.umijs.org/### 4.micro-app
GitHub star: 3.8k
https://micro-zoe.github.io/micro-app/### 5.icestark
GitHub star: 1.8k
https://micro-frontends.ice.work/### 6.Piral
GitHub star: 1.4k
https://piral.io/### 7.Luigi
GitHub star: 681
https://luigi-project.io/### 8.SystemJS
マイクロフロントエンドのフレームワークではなく、ブラウザモジュールソリューションを提供GitHub star: 12.4
【MEMO】height: calc(100vh – 8px)がはみ出る話
# height: calc(100vh – 8px)がはみ出る話
検索窓を「bottom: 0」で表示しても出ないとき。
PCだと問題ない。が、スマホだと下にはみ出てしまう模様。
ナビゲーションバーとかの高さも「vh」に含まれるらしい。「-webkit-fill-available」が計算で使えないようで、
なんか苦労したのでメモメモ。CSS:
“` css/* 親 */
.parent {
/* 3. dvhが対応されていない場合用 (諦め) */
height: calc(100vh – 8px);
/* 2. varが対応されていない場合用 */
height: calc(100dvh – 8px);
/* 1. 変数を使う(要: JavaScript) */
height: calc(var(–vh, 1vh) * 100 – 8px);
}“`
JavaScript:
“` javascript// innerHeightの1%を変数に入れる
const vh = window.innerHeight * 0.01;
[pdf.js] 手軽にPDFファイルをHTMLに埋め込めるWebComponentを作った
## PDFファイルを手軽にHTMLに埋め込みたい
PDFファイルをHTMLに埋め込む場合、従来だと`
– `
という制限がありました。
詳しくは[こちらの記事](https://developer.kaizenplatform.com/entry/2021/07/19/090000)によくまとめられています。
自分で作ったAI同士を会話させてみた
会話AIを2人分作成し、お互いに会話をさせてみました。また雑談としての面白さの検証と記録を兼ねて、その様子をYoutubeで生配信することにも挑戦してみました。以下のチャンネルで実験を行っています。
https://youtube.com/@aivtuber2378
今回はその経緯で得られた知見や結果を報告していきます。
# 事前の準備
## 人工知能の構成
まず大切なのは会話の作り方です。Chat-GPTをはじめとする最新の言語モデルなら会話文ごと生成することが可能です。これを分割して2人が話しているかのように表示、または音声を再生すれば対話を作り出すこともできます。
しかしこれは本質的には一人二役であり、実際に応答しているわけではありません。そこで今回はなるべく独立した2つのAIを用意して人間のそれに近い環境を再現しました。
## 個性付け
2つのAIにはそれぞれ個性ともいうべきキャラクター性を加えています。これは会話に彩りを加えること、そしてどちらの発言か分かりやすくするという狙いがあります。
![1-6.jpg](https://qiita-image-
ElasticBeanstalk の環境を Node.js12 から 16 にアップデートする際の躓きポイント
# はじめに
フルカイテンではフロントの WEB サーバ構築に ElasticBeanstalk を使用しており、Node.js 12 系で開発を行っていました。
しかし ElasticBeanstalk の Node.js12 プラットフォームは2023/02/01 時点で既に EOL を迎え、 リタイア状態となっています。
環境を複製できなかったり、セキュリティ面でのサポートも切れているため、早期に開発環境の Node.js バージョンアップと EB の Node16 プラットフォームを使用した新しい環境を作成する必要がありました。
実際に作業を行うと色々と躓いたポイントがあったため、本記事ではその具体的な内容と解決策を紹介します。# 本記事の対象読者
– ElasticBeanstalk(Node.js@12 Platform) で WEB サーバを構築している
– Node.js のバージョンを12系から16系にアップデートする予定がある# バージョンアップ時の躓きポイント
## (1) 環境のクローンができない
Beanstalk のプラットフォームのブランチアップデ
AIが何についてのポエムを作ってるのか当てるゲーム作った
これ。
https://whatword-5dyx7gwrfq-an.a.run.app/
# これは何?
AIが何についてのポエムを作ってるのか当てるゲームです。
ルールは以下の通り。
1. 秘密のキーワードが指定されます。これが何であるかはプレイヤーに知らされません。
1. そのキーワードをテーマにAIがポエムを作ります。
1. プレイヤーはそのキーワード(英語)が何かを当てます。
1. 誤回答するたびにキーワードが1文字ずつ開示されます。
1. 全部開示されるまでにキーワードを当てられたらクリアです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33890/426ee93f-fec8-1ac2-7aeb-096656e72491.png)
こんな画面です。
>赤い鼻と大きな嘘は鏡の中に映る
悲しい笑顔を見せる怪しい影
ハンドピースを掲げて遊ぶように
輝く瞳が消えた時にはこれが何についてのポエムなのかを当てます。
なんだか悲しげですね。ちなみに答えは『CLO
カードゲームロジック
カードゲームロジック
概要
paizaのゲームのプログラムが思ったより難しくて、偉い時間がかかったので、
消すのももったいないので、ノートとして記録してみる。https://paiza.jp/poh/hatsukoi/challenge/hatsukoi_clothes5
設問はこちら。
難しいので、この設問では、1人1枚という制限が付けられていたけど、それだと面白くないので、何人でも計算できるように、上位互換でのロジックで組んだ。playersを変更すれば何人でも計算できる。設問の場合は52にする必要がある。
簡単な内容は、配られたカードを一定のルールでカードを出していくと、どの順番にクリアしていくか。というもの。
動作コード
こちらで動作確認が出来る。
https://paiza.io/projects/-EYjojosn5-siWVZi41z7g
コード
“`Javascript
const players = 52;
const power = [‘3’,
[Vue]画面スクロールに合わせてバックグラウンドのalphaを調整
# 経緯
フロント何もわからんない…OSSにコントリビュートして武者修行してみよう。# 要件
1度何となく作ってPR出してみたら「要件不足してたから定義するね」って言ってくれた。優しい。詳細は以下。
– At the top of the page the header has full opacity (as it does in your case)
– The user scrolls down -> the header disappears completely (0.0 opacity)
– The user scrolls up -> the header appears, and if the page isn’t at the top then we’d have an opacity of 0.5 or – so for just the background of the header
– The logo and buttons would have full opacity, just the background would be a bit
Presigned URL を用いた S3 multipart upload を行う (by JavaScript + Python Chalice)
# 問題
AWS S3 によって Presigned URL を発行すれば、サーバーに直接ファイルをアップロードせずとも、S3 に対して直接ファイルをアップロードできる。
しかし、1回のリクエストでアップロードできる最大ファイルサイズは 5GB であり、それ以上のファイルをアップロードするためにはマルチパートアップロードによって分割アップロードを行う必要がある。
ここでは、ブラウザ側に Credential を発行することなく、サーバー側で発行された Presigned URL を利用してファイルをマルチパートアップロードする方法についてを記す。# プロジェクト全体
プロジェクト全体で利用するソースコードを以下で公開している。
今回は、サーバーサイドは [AWS Chalice (Python)](https://aws.github.io/chalice/) で、クライアントサイドでは JavaScript を Webpack でビルドしたものを利用している。https://github.com/t-kigi/s3-multipart-uploads-with-chal
React Hook FormでuseFieldArrayの初期化方法を間違っていた話。appendやreplaceなどは使わずにdefaultValuesで行う。
React Hook FormのuseFieldArrayは動的にフォームの入力項目を増減する必要がある場合にとても便利な機能です。
とても便利な機能なのですが、私は最初間違って使っていました。
正しい使い方を理解したので記事にまとめておこうと思います。useFieldArrayの公式ドキュメントは下記を参照してください。
https://react-hook-form.com/api/usefieldarray/
# どう間違えたのか?
サンプルコードを交えて説明した方が理解しやすいので、サンプルコードに沿って説明します。
サンプルコードのバージョンは下記の通りです。* react: 18.2.0
* react-hook-form: 7.43.0例えば下記のようなデータをAPIで受け取り、valueの数だけテキストボックスを作成する画面を考えます。
“`javascript
{
hoge: [
{ value: 100 },
{ value: 0 },
{ value: 10 },
{ value: 50 }
]
}
`
WordPressでAjaxにて投稿記事を取得する際にfetchを使ってダウンロードの進行状況(progress)を取得する方法
# はじめに
WordpressにてAjaxで投稿記事を取得する際にダウンロード状況(Progress)も取得する場合のサンプルは大体はjQueryかXMLHttpRequestが多いのですが、fetchでも[ReadableStream](https://developer.mozilla.org/ja/docs/Web/API/ReadableStream)を使えば取得できるということで試してみました。# WordPressの設定
WordPressでのAjax送受信の設定をしていきます。
この辺りの設定はよくご存知の方は飛ばして、[送信側の設定](#送信側の設定)をお読みください。## 1.Ajaxの受け取り側の設定
WPがajaxリクエストを受け取るためには、以下のようにwp_ajax_[任意のアクション名]、wp_ajax_nopriv_[任意のアクション名]アクションフックにて設定します。
“`PHP:functions.php
function topics_ajax() {//[ここにJSONを作成する処理を記述する]
ec
Test Doubleについて
# TestDouble ≠ mock
これまでTestDoubleとかmockとかspyとかstubとかよくわからず使ってました。
なんなら全部mockを言い換えた言葉なんでしょ! って認識でしたどうやら違うらしいです。l
改めてTestDoubleについて学んだのでまとめます。
## そもそもTestDoubleって?
Test Double は、ソフトウェアテストにおいて使用される
stub,dummy,spy,mock,fakeなどを指します。
これらは、実際のオブジェクトの代わりに使用される、テスト用の代替オブジェクトです。これらのオブジェクトを使用することで、テスト対象となるオブジェクトと直接的な依存関係を避けることができ、
実際のオブジェクトを使用することによって発生する問題(例えば、データベースへの書き込みなど)を回避することができます。
また、テスト用のオブジェクトを使用することで、実際のオブジェクトの返す値を制御し、期待通りの処理を行っているかを検証することもできます。ってChatGPTが言ってました。頭いいですね。
つまり
stub,dumm