- 1. Service Locator と DI の違いを TypeScript を書きながら体験してみる
- 2. Azure OpenAIをWebサイトに組み込む
- 3. tk.memo_data-input-page
- 4. 社内フォルダへのリンクを開けるようにしたい_プリザンターで
- 5. React + TypeScript: useCallbackフックの使い方と使いどころ
- 6. JavaScript初心者が最低限これだけは覚えておくこと
- 7. ブックマークレットとQiita APIを使って記事一覧を取得する
- 8. これからはJavaScript勉強しよう 4回目
- 9. Vite + Reactプロジェクトを途中からTypeScriptに変更する方法
- 10. 即時関数について
- 11. 多重minify
- 12. 配列内のオブジェクト、任意の値を比較してランキングを作成(練習)
- 13. 14日目「if」と「try-catch」で揺れる社畜L
- 14. 改正:予約時刻表の雛形を作りました.
- 15. TypeScript 「never」を使った網羅チェック
- 16. JavaScript 三項演算子と||演算子と??演算子
- 17. ディズニーホテル ミラコスタは、どんなホテルだったのか。
- 18. Node.jsで普通のJavaScriptをimportする
- 19. クロージャーを用いたプライベート変数の書き方
- 20. プロパティ 'xxx' は型 'never' に存在しません。
Service Locator と DI の違いを TypeScript を書きながら体験してみる
この記事を読みました。すごくわかりやすい記事です。
以下のことがふんわりわかりました。
– Service Locator も DI も同じような課題を解決するためのもの
– Service Locator と DI コンテナは利用する目線だとほとんど同じもの
– DI の方がおすすめなんとなく理解したんですが、たぶん後輩に聞かれても説明できないです。
このモヤモヤを取り払うため、実際に TypeScript で書いてみることにしました。## 何も考えずに書くと
“`ts
class A {
exec(){
console.log(‘exec A’)
const b = new B()
b.exec()
}
}class B {
exec(){
console.log(‘exec B’)
}
}class App {
main(){
const a = new A()
Azure OpenAIをWebサイトに組み込む
# はじめに
Azure OpenAIにWeb ClientからWeb Serverを介してリクエストを行い、
応答をWebクライアントに表示する方法をサンプルコードで紹介します。※node.js、socket.io、Azure OpenAIについての学習を行う過程で作成したもののため
回りくどいやり方をしている部分があります。ご了承ください。
### 作るもの
テキストボックスに質問を入力して送信するとAzure OpenAIからの応答が表示される
プログラムを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760635/2866b0b3-2813-7ed4-25cb-a975b92e64c1.png)# Azure OpenAIについて
Azure OpenAI ServiceとはChatGPTを含む、複数のAIモデルを利用することができるMicrosoftの提供するサービスのことです。
プラットフォームはAzureでAzureのリソースと組み合わせて利用す
tk.memo_data-input-page
備忘録
入力フィールドをラジオボタンの選択した項目によって制御する
社内フォルダへのリンクを開けるようにしたい_プリザンターで
プリザンターでURLを入力すると勝手にリンクが付いてくれる。
でも通常ブラウザでは社内サーバーへのリンクなんかはブロックされます。
⇒**カスタムURLスキーマにて開けるようにする!**# スクリプト
下記内容をスクリプトに入れて、「一覧」にチェック。
今回は一覧状態の時にリンククリックで開きたいので。
– クリックで実行
– 対象はリンク先が指定した時の場合のみ`file://\\\\192.168.xx.xx`。知らない場所は飛ばないように限定する
– 元のaタグでのリンクを無効にして、カスタムスキーマの文字列に置き換える
– カスタムスキーマでファイルが開く!“` js
document.addEventListener(“click”, (Event) => {
let hr = Event.target.getAttribute(“href”);
if (hr != null) {
if (hr.startsWith(“file://\\\\192.168.xx.xx”)) {
Event.preventDefault();React + TypeScript: useCallbackフックの使い方と使いどころ
[`useCallback`](https://react.dev/reference/react/useCallback)は、再レンダリング間で関数定義をキャッシュするReactのフックです。
本稿はReact公式サイト「[`useCallback`](https://react.dev/reference/react/useCallback)」にもとづき、useCallbackはどう使うのか、およびどのような場合に使うとよいのかを解説します。説明内容と順序は、公式ドキュメントにしたがいました。ただし、解説はわかりやすく改め、またコード例とサンプル([StackBlitz](https://stackblitz.com/))はTypeScriptを加えたうえで修正した部分が少なくありません。
# 構文
“`react
const cachedFn = useCallback(fn, dependencies)
“``useCallback`はコンポーネントのトップレベルで呼び出して、再レンダリング間で関数の定義をキャッシュします。
“`react
import {JavaScript初心者が最低限これだけは覚えておくこと
## 概要
JavaScriptを勉強し始めたので自身の備忘録のために分かりやすく自分の言葉で噛み砕いて解説して残しておく## 目次
[1. 変数](#1-変数)
[1-1. const](#1-1-const)
[1-2. let](#1-2-let)
[2. テンプレート文字列](#2-テンプレート文字列)
[3. アロー関数](#3-アロー関数)
[4. 分割代入](#4-分割代入)
[4-1. 配列の分割代入](#4-1-配列の分割代入)
[4-2. オブジェクトの分割代入](#4-2-オブジェクトの分割代入)
[5. デフォルト引数](#5-デフォルト引数)
[6. オブジェクトの省略記法](#6-オブジェクトの省略記法)
[6-1. プロパティ名の省略](#6-1-プロパティ名の省略)
[6-2. 関数プロパティの省略](#6-2-関数プロパティの省略)
[7. スプレッド構文](#7-スプレッド構文)
[8. forEach/map/filterを使った処理](#8-forEach/map/filブックマークレットとQiita APIを使って記事一覧を取得する
## はじめに
記事を見ているとき、ユーザーが書かれた記事タイトル一覧を見たいと思ったことはありませんか?
ユーザーが書かれた記事一覧をタグごとに個数分析したり、タグごとに記事タイトル一覧をフィルターして見たいと思ったことはありませんか?
本記事は、その方法のひとつを提案します。
## 本記事の対象者
– ブックマークレットで記事一覧を取得したい方
– 取得した記事一覧をExcelで見たい方
– 過去記事から有用な記事を効率的に発掘したい方## 方法
その方法とは、以降の節で紹介するブックマークレットで記事一覧を取得し、Excelに貼り付けることです。
つぎにVBAでタグの個数分析を行い、Excelのフィルター機能を使ってタグで記事一覧をフィルターして記事タイトルを見ます。
## 手順
1. Qiitaのページ(タグか、検索結果か、ユーザー)を開きます。URLによって記事を取得するQiita APIが変わります。
2. 以降の節で紹介するブックマークレットをクリックして記事一覧を取得します。
3. 取得した記事一覧をExcelに貼り付けます。
4. VBAでタこれからはJavaScript勉強しよう 4回目
https://fadotech.com/quiz-javascript/
“`html
テストの点数を入力しましょう
60点であれば合格です
function scorecheck(){
if (txtscore.value >= 101) {
msg.innerText = "入力に誤りがあります。"
} else if(txtscore.value >= 60) {
msg.innerText = "合格です。"
} else {
msg.innerText = "不合格です。"}
}
txtscore = document.getElementById('score1');
btn1 = document.getEleVite + Reactプロジェクトを途中からTypeScriptに変更する方法
どうもこんにちは、たくびー(@takubii)です。
今回はVite + Reactで作ったプロジェクトを途中からTypeScriptで書けるように設定する方法を共有します。
# パッケージのインストール
インストールするバッケージは以下の3つです。
- typescript
- @typescript-eslint/eslint-plugin
- @typescript-eslint/parser```zsh:terminal
npm i --save-dev typescript @typescript-eslint/eslint-plugin @typescript-eslint/parser
```# Configファイルの追加、変更
```diff_typescript:vite.config.ts
+import { defineConfig } from 'vite'
+import react from '@vitejs/plugin-react'+// https://vitejs.dev/config/
+export default defi即時関数について
### 即時関数とはこういったもの
```jsx
(function () {
console.log('called.');
})();
```### 即時間数の使い道
関数スコープを用いて、関数の中だけで使いたいものと、関数の外側で使いたいものを明確に区別するときに使う。
```jsx
let c = (function () {
console.log('called.');// private変数
let privateVal = 0;
// public変数
let publicVal = 10;// private関数(外から呼び出せない)
function privateFunc() {
console.log('privateFunc is called.');
}
// public関数(外から呼び出せる)
function publicFunc() {
console.log('publicFunc is called.' + privateVal++);
}privateFu
多重minify
異なるminifierでminifyを繰り返すと、より縮む可能性があります。ただし時代についていけていないminifierもあります。そういうものを使うと不具合が出る事があるで注意して下さい。
## JavaScript用
一撃目にClosure Compiler、続けて他のminifierを叩き込むのが良いかもしれません* [butternut](https://github.com/Rich-Harris/butternut)
* [babel-minify](https://github.com/babel/minify)
* [Closure Compiler](https://github.com/google/closure-compiler)
* [terser](https://github.com/fabiosantoscode/terser)([demo](https://try.terser.org]))
* [UglifyJS](https://github.com/mishoo/UglifyJS2)## CSS用
一撃目にcssnano、続けて他のmi配列内のオブジェクト、任意の値を比較してランキングを作成(練習)
「配列内のオブジェクト」ということなので、以下のようなコードで実験用の配列を作成していきます。
~~~js
/*---配列内にオブジェクトを収めるサンプルコード ---*/const arr = [...Array(10)].map((_, i) => {
return {
index: i + 1,
number: (Math.random() * 100),
}
})console.log(arr);
~~~
~~~js
// 結果
[{
index: 1,
number: 91.25240273034892
}, {
index: 2,
number: 50.30337793565278
}, {
index: 3,
number: 56.7219849866174
}, {
index: 4,
number: 78.14357103773145
}, {
index: 5,
number: 56.00559517743395
}, {
index: 6,
number: 83.7587424204614日目「if」と「try-catch」で揺れる社畜L
## 🔍はじめに
「paiza」の一問題について、 関数を作成したい。しかし、関数内の"条件文"が複雑になってしまう
そこで、try-catchを用いることで、
すっきりとしたコードになるのではないかと考え検討した。## 🔎本題のコード(JavaScript)
- Sample1(if文)
```js
let evol=(num)=>{
//条件文
if(botinfo[num-1][0]{
//メ改正:予約時刻表の雛形を作りました.
### 改正:予約時刻表の雛形を作りました.
雛形なので作りかけのようなものです.ここから可変すれば予約時刻表の機能が作れると思います.
ご自由にコピペでお使いいただけば幸いです.
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779064/93a18f45-4664-108f-6df9-9c8cfef7a425.png)https://github.com/taoka3/Schedule
```html:index.php
TypeScript 「never」を使った網羅チェック UNIONを使った全網羅条件分岐処理の場合、条件が追加になっても対応漏れにならないように対策をしましょう。っていう話。
ユーザーランク「A, B, C」がありました。
```javascript
// ユーザーランク
type UserRankOptions = 'A' | 'B' | 'C';
```
ユーザーランクに以下の仕様変更が発生が発生しました。
> ランクDを追加
> ランクDのボーナスポイントは30とする```javascript
type UserRankOptions = 'A' | 'B' | 'C' | 'D'; // ランクD追加
```## :-1::-1: なにも対策していない
**addBonusPoint**メソッドは対策をしていなので、改修が漏れた場合ランクDのボーナスポイント30が付加されず不具合の要因になる。
```javascript
// ユーザーランク
type UserRankOptions = 'A' | 'B' | 'C' | 'D';// ユーザークラス
class User {
private _point: nuJavaScript 三項演算子と||演算子と??演算子
三項演算子と||演算子と??演算子の結果確認してみよう。っていう話。
```javascript
const TITLE_LEN = 12;
const spacePadding = (val, len) => (val + ' '.repeat(len)).slice(0, len);
const output = (title, res1, res2, res3) =>
console.log(`${spacePadding(title, TITLE_LEN)} 3項:${res1} ||:${res2} ??:${res3}`);let str;
let res1;
let res2;
let res3;console.log('文字列検証');
str = undefined;
res1 = str ? str : 'A';
res2 = str || 'A';
res3 = str ?? 'A';
output('undefined', res1, res2, res3);str = null;
res1 = str ? str : 'A';ディズニーホテル ミラコスタは、どんなホテルだったのか。
# はじめに
ディズニーシーの新ホテル「ファンタジースプリングス」が公開されましたね!
本記事では、ファンタジースプリングスの公開を記念して、現時点で最高ランクの
ホテル ミラコスタ がどんなホテルだったのか振り返りたいと思います。
方法としては、レビュー分析AI ReviewAI (レビューアイ)を使って
[じゃらん](https://www.jalan.net/)さんに集まっているレビューを分析していきます。# ホテル ミラコスタ
[ホテル ミラコスタ](https://www.jalan.net/yad370886/?yadNo=370886&dateUndecided=1&screenId=UWW3703&smlCd=120508&yadoDetailMode=1&distCd=01)
> パークの中に宿泊できるディズニーテーマパーク一体型ホテル。イタリアンクラシックをコンセプトにした上質な空間で、パークでの冒険を振り返り、明日への航海に想いを馳せることができます。
言わずと知れた、ディズニーの最高ランクのホテルです。
# ReviewAI (レビューアイ)
弊
Node.jsで普通のJavaScriptをimportする
ES ModulesでもCommonJS でもUMDでもない普通のJavaScriptをimportする方法を調べました。ブラウザで動作するスクリプトをテストしたいときにご活用ください
# 普通のJavaScript
```js:script.js
class MyClass {
hello() {
return 'こんにちは'
}
}
```# 普通のJavaScriptを変更することなくimportする
## eval⭐⭐⭐⭐⭐
```js:main.mjs
import { readFileSync } from 'node:fs'eval(readFileSync('script.js') + ';global.MyClass=MyClass')
console.assert(new MyClass().hello() === 'こんにちは', 'あいさつすること')
```普通のJavaScriptを変更しなくていいのでオススメ
## import⭐⭐⭐
```js:main.mjs
import { readFileクロージャーを用いたプライベート変数の書き方
### やりたいこと
increment関数を数回呼び、1ずつインクリメントされるような動作を実現したい。
### 問題点
このコードだと、numがインクリメントされるが、numという変数がどこでも初期化可能なため、書き換えられると、うまくいかない。
```jsx
let num = 0;function increment() {
num += 1;
console.log(num);
}increment();
increment();
increment();num = 0;
increment();
```
![スクリーンショット 2024-04-24 21.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776880/2d130716-497c-5b8c-193a-d15cf1c84d27.png)### 解決策
クロージャーを使ってprivateな変数を定義すれば解決する。
1. incrementFactoryという関数の中で、numを宣言し、プロパティ 'xxx' は型 'never' に存在しません。
## 問題点
TypeScriptの開発中に以下のようなエラーが出ています。
APIから受け取る配列型の指定がないため、Never型になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/435389/bb70a6c5-0d68-3e6d-4e6e-e675582b0dbf.png)## 解決方法
`