OmniAICreator/Qiita-1.07M huggingface dataset:
[AWS Q&A 365][Redshift]AWSのよくある問題の毎日5選 #4

# 1. Amazon Redshiftはどのような認証を持っていますか？
答え：Amazon Redshiftは、ISO 27018:2015、ISO 27018:2014、ISO 9001:2015、PCI DSS準拠証明書、およびサービス組織管理（SOC）1および2のレポートを含む複数の認証を持っています。

# 2. Amazon Redshiftのサードパーティ監査レポートはどのように入手できますか？
答え：Amazon Redshiftのサードパーティ監査レポートは、AWS Artifactを使用してダウンロードできます。

# 3. Amazon Redshiftはどのようなコンプライアンスプログラムの一部ですか？
答え：Amazon Redshiftは、SOC、PCI、FedRAMP、およびHIPAAを含む複数のAWSコンプライアンスプログラムの一部です。

# 4. AWSはAmazon Redshiftを使用したコンプライアンスを支援するためにどのようなリソースを提供していますか？
答え：AWSは、セキュリティとコンプライアンスのクイックスタートガイド、HIPAAセキュリティとコンプライアンスを考慮したアーキテクチャ設計のホワイトペーパー、AWSコンプライアンスリソース、ワークブック、ガイド、AWS Config、およびAWSセキュリティハブなどのリソースを提供しています。

# 5. AWS Artifactを介してオンデマンドで利用可能な、Amazon Redshiftをカバーするコンプライアンスおよびセキュリティ文書は何ですか？
答え：AWS Artifactを介してオンデマンドで利用可能な、Amazon Redshiftをカバーするコンプライアンスおよびセキュリティ文書には、クラウドコンピューティングコンプライアンス制御カタログ（C5）、ISO 27001:2013適用範囲声明（SoA）、ISO 27001:2013認証、ISO 27017:2015適用範囲声明（SoA）、ISO 27017:2015認証、ISO 27018:2015適用範囲声明（SoA）、ISO 27018:2014認証、ISO 9001:2015認証、およびPCI DSS準拠証明書（AOC）と責任要約が含まれます。
[AWS Q&A 365][Redshift]Daily Five Common Questions #4

# 1. What certifications does Amazon Redshift have?
Answer: Amazon Redshift has multiple certifications including ISO 27018:2015, ISO 27018:2014, ISO 9001:2015, PCI DSS Attestation of Compliance, and Service Organization Controls (SOC) 1 and 2 reports.

# 2. How can third-party audit reports for Amazon Redshift be obtained?
Answer: Third-party audit reports for Amazon Redshift can be downloaded using AWS Artifact.

# 3. What compliance programs is Amazon Redshift a part of?
Answer: Amazon Redshift is a part of multiple AWS compliance programs including SOC, PCI, FedRAMP, and HIPAA.

# 4. What resources does AWS provide to help with compliance when using Amazon Redshift?
Answer: AWS provides resources such as security and compliance quick start guides, architecting for HIPAA security and compliance whitepaper, AWS compliance resources, workbooks and guides, AWS Config, and AWS Security Hub.

# 5. What compliance and security documents cover Amazon Redshift and are available on demand through AWS Artifact?
Answer: The compliance and security documents that cover Amazon Redshift and are available on demand through AWS Artifact include Cloud Computing Compliance Controls Catalogue (C5), ISO 27001:2013 Statement of Applicability (SoA), ISO 27001:2013 Certification, ISO 27017:2015 Statement of Applicability (SoA), ISO 27017:2015 Certification, ISO 27018:2015 Statement of Applicability (SoA), ISO 27018:2014 Certification, ISO 9001:2015 Certification, and PCI DSS Attestation of Compliance (AOC) and Responsibility Summary.
Githubの使い方

三年前に書いたまま、ほったらかしにされてた記事を今回供養しようと思います。

# 鍵を作成する

ローカル環境にて、SSH接続に必要な鍵を作成します。

```bash
ssh-keygen -t rsa -b 4096 -C "example@example"
```

次にどこのファイルに保存するかを聞かれるのでフルパスで答えます。

```bash
/Users/ユーザー名/.ssh/github_rsa
```

パスフレーズを入力します。1Passwordなどのパスワードマネージャーを使ってパスワードを作り、それを流用しましょう。

注意点として、二回入力が必要です。

最後に、作成した鍵をssh-agentに登録します。

```bash
# ssh-agentが動いているかを確認。
eval "$(ssh-agent -s)"
> Agent pid 数字

ssh-add -K /Users/ユーザー名/.ssh/github_rsa

ssh -T git@github.com
```

これにより、~/.ssh/configをわざわざ作成しなくてよくなります。

先ほど作成した秘密鍵をそれに対応する公開鍵を登録したサイトに対してssh接続するときにエラーがでなくなるのです。

# リモートリポジトリにプッシュする

Githubで新しいリポジトリを作成します。
この時、必ずprivateにチェックをしてください。

それではssh用のurlをoriginに設定して、リポジトリにpushしてみましょう。

```bash
git remote set-url origin git@github.com:takagimeow/example-app.git
# もしくは
git remote add origin git@github.com:takagimeow/example-app.git

git push -u origin main
```

これで完成です。

## ターミナルを閉じるたびにssh-addコマンドを打たなきゃいけない場合

~/.ssh/configファイルを作成します。

```config
Host github github.com
	HostName github.com
	IdentityFile ~/.ssh/github_rsa
	User git
```

終わったら、以下のコマンドでちゃんと通っているかを確認。

```bash
ssh -T github
```

# git clone するときなどに何度もフルパスでリモート名を入力するのが面倒臭い場合
~/.gitconfigファイルに以下を追記します。

```gitconfig
[url "github:"]
	InsteadOf = https://github.com/
	InsteadOf = git@github.com:
```

これでいちいち git@github.com:takagimeow/example-appなどと入力しなくても済みます。
新ノート君（i5-12450H）のベンチマークしてみた




新しいノート「12450H君」の受け入れベンチマークしてみました。
特にチューニングとかはしてません。
[12450H君のスペックはこちら。](https://qiita.com/kit/items/5b73db3da7790a197306)


## ベンチマーク結果

### CPUベンチマーク
#### Cinebench
##### マルチスレッド：10210、シングルスレッド：1681
![20230312_Cinebench_multi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/a72d5007-6ce9-703f-b100-3370219df919.png)
![20230312_Cinebench_single.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/ad020e01-748c-83d1-57bf-09ba03b9db0e.png)
（https://www.maxon.net/ja/cinebench）

#### SuperPI（8M：1m24s）
![20230312_SuperPI.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/0b360caf-3bdd-8f54-5be0-dbfe5c9db22d.png)


### SSDベンチマーク
#### CrystalDiskMark
![20230312_CristalDiskMark.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/c4eefb17-a0da-50c6-2d24-2ee36ec06673.png)
（https://crystalmark.info/ja/）

### グラフィックベンチマーク
#### ファイナルファンタジーXVベンチマーク
FullHD高品質：7347、標準品質：9600、軽量品質：11689
![20230312_FFbench_高品質.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/5c1b0263-c7ba-de77-d1ba-dd064046cfb0.png)
![20230312_FFbench_標準品質.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/7202859c-2ff5-5d72-0407-a1019177de0d.png)
![20230312_FFbench_軽量品質.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/154954/07877415-b02f-87bf-5c4e-0aa330afc400.png)
（http://benchmark.finalfantasyxv.com/jp/）

## 新旧PC比較

| 項目 | 12450H君（new） | 7700HQ君（old） |
|:----------:|:-----------:|:------------:|
| Cinebench（マルチコア） | 10210    | 3275        |
| Cinebench（シングルコア）  | 1681  | 809      |
| SuperPI      | 8M：1m24s    | 8M：1m58s     |
| CrystalDiskMark（SeqRead）        | 3020.3MB/s         | 1592.7MB/s         |
| CrystalDiskMark（SeqWrite）     | 1643.7MB/s        | 452.3.7MB/s       |
| FFXVベンチ（FullHD高品質）    | 7347     | 1944      |
| FFXVベンチ（FullHD標準品質）    | 9600     | ---      |
| FFXVベンチ（FullHD軽量品質）    | 11689    | ---      |

## 感想
5世代も違いがあると
こんなにもスペックに差が出るのかと思いました。
なる早で新PCに移行したいと思います。

・CPU
　シングル性能で倍、マルチ性能だと3倍以上。
・ディスク
　調子も悪かったこともあって倍以上。
・グラフィック
　FFベンチが快適に動きました。
PHP基本構文『前提知識』

# 前提の基礎知識
- インデントは４つ
- 文字列
    - 文字を出力するもの
    - 『' '』で囲う
    - echo ＝ 出力せよという意味
- 文字連結
    - 『.』を使用する

ここまでの例文
```
echo 'okabe' . "\t" . 'yota';
```
四則演算
```
echo 3 + 3 . "\t" ;
echo 8 - 2 . "\t" ;
echo 3 * 2 . "\t" ;
echo 12 / 2 . "\t" ;
```
余剰の計算
```
echo 10 % 3 . "\t" . '<br>'; 
```
文字列で表す数式
```
echo '5 - 2' . "\t" ;
```
- 変数
    - 変数は箱
    - 右辺から左辺に格納する

下記は右辺のwewoekという文字列を、左辺のnameという箱に格納するということ。
```
$name = 'wework';
echo $name;
```
変数その他例
```
$orange_price = 150;
$tax = 1.1;
echo 'オレンジの価格（税込）' . $orange_price * $tax . '円';
```
### ここまでを画面に反映させたもの
![スクリーンショット 2023-03-16 0.05.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/df705e1c-3ad5-e48c-c231-bd1cdbadc454.png)
### ここまでのVScode
![スクリーンショット 2023-03-16 0.06.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3193952/b5e03f1e-ee73-5372-b790-728396310d00.png)

## 最後に。比較演算子と型を覚えれるだけ覚えよう。
### 比較演算子
```
a==b   aとbの値は等しい
a===b  aとbの値と型も等しい
a!=b   aとbの値は等しくない
a!==b  aとbは値と型も等しくない
a>b    bよりaが大きい
a>=    bよりaが大きい、もしくは等しい
a<b    bよりaが小さい
a<=    bよりaが小さい、もしくは等しい
```
### 型（= 値の姿、状態）
```
整数型 integer
文字列型 string
浮動小数点型 float,double
理論型 boolean
配列型 array
オブジェクト型
Null型 null
リソース型 resource
```
【Bash】【Zsh】エイリアスの設定方法


## エイリアスの設定方法
`alias 別名= '実際に実行するコマンド'`と.zshrc`や`.bashrc`に記述することでエイリアスが設定できます。

```.zshrc:エイリアス設定例
alias g='git'
alias gst='git status'
alias gd='git diff'
alias gdc='git diff --cached'
alias gl='git pull'
alias gup='git pull --rebase'
alias gp='git push'
alias gd='git diff'

alias d=‘docker’
alias dc=‘docker-compose’
alias dcnt=‘docker container’
alias dcur=‘docker container ls -f status=running -l -q’
alias dexec=‘docker container exec -it $(dcur)’
alias dimg=‘docker image’
alias drun=‘docker container run —rm -d’
alias drunit=‘docker container run —rm -it’
alias dstop=‘docker container stop $(dcur)’

```
ShellScriptでコマンドの結果を変数に代入

バッククォート(`)で文字列中のコマンドを実行することができます。 これを使って変数にコマンドの実行結果を代入します。

```
[変数名]=`コマンド`
```
例// pwdコマンドの結果を変数のDIRに代入
```
DIR=`pwd`
```

### コマンドのネスト
バッククォートをバックスラッシュでエスケープすることで、コマンドのネストも可能になります。

例// pwdコマンドの結果に対して"ls -ld"を実行
```
STR=`ls -ld \`pwd\``
```
最初に実行されるコマンドは、以下の赤色の個所のpwdコマンドになります。 その後、pwdコマンドの結果に対してlsコマンドが実行されます。
```
STR=`ls -ld \`pwd\``
```
これは以下と同じになります。
```
DIR=`pwd`
STR=`ls -ld $DIR`
```

# 参考サイト
http://www.ajisaba.net/sh/var_command.html
【React・TypeScript】実は、Props引数はスプレッド構文を渡すことができる

# はじめに

以下本を読んだときに、Propsについて学びがあったので、TypeScriptで記事にしました。

[https://www.oreilly.co.jp/books/9784873119380/](https://www.oreilly.co.jp/books/9784873119380/)

# Props引数をスプレッド構文で受け取る

例えば、以下コンポーネントがあるとする

```tsx
type Props = { message: string, no: number };

const ChildrenText = ({ message, no }: Props) => {
  return (
    <>
      <div>Message:{message}</div>
      <div>No:{no}</div>
    </>
  );
};
```

親コンポーネントが`ChildrenText` にProps引数を設定する場合、以下のようにスプレッド構文で渡すことができる

```tsx
const Parent = () => {
  const props = {
    message: 'あああああ',
    no: 114514
  };

  return (
    <div className="App" >
		{/* スプレッド構文でPropsを渡す */}      
		<ChildrenText {...props} />
    </div >
  );
}
```
HTTPメソッドについて書いてみた

## はじめに

HTTPメソッドについて解説します！

ルーティングに記述をする
GET、Deleteなどの意味について深堀していきます。
早速行きます！

## HTTPメソッドとは何か？
`HTTPメソッド`とは、サーバーへのリクエスト内容の種類です。

また似たような用語として`「HTTPリクエスト」`という用語もあるので、併せて紹介します！
ユーザーが行いたい処理をサーバーに伝えることを、`「HTTPリクエスト」`といいます。
例えば、「ページを削除したい」や「新規登録をしたい」などが、`HTTPリクエスト`です。

代表的なHTTPメソッドは、`「GET」・「POST」・「DELETE」・「PUT」`の4種類です。

## HTTPメソッドの詳細について

``■GET :ソースの取得（主にページを表示する時）``
ブラウザからサーバーへURLを送信し、Webページを取得（GET）します。
Webサイトの閲覧時には、GETメソッドが使われます。

``■POST：主にデータを新しく登録する時``
ブラウザからサーバーへ、URL以外のデータも送信（POST）して処理を命令します。
会員情報など、サーバーに情報を送信するときに使用します。

``■PUT：主にデータを更新する時``
すでに存在しているデータを上書きして更新します。
更新内容などの情報を追加で送信できます。

``■DELETE：リソースの削除（主にデータを削除する時）``
ブラウザからサーバーへ、URL以外のデータ削除のための情報を送信して処理を命令します。
会員情報の削除などに使用します。

## おわりに

今回はHTTPメソッドについて紹介をさせていただきました。
これからも自身の備忘録も兼ねて投稿していきます！
オレンジ色とコントラスト比【アクセシビリティ】

## この記事について

この記事は、アクセシビリティ観点で見たオレンジ色の扱いについての学び・私の考えを記載しています。

## アクセシビリティの取り組みが当たり前に

デジタル庁が、アクセシビリティについて取り組まれていますね。
わかりやすい[ウェブアクセシビリティ導入ガイドブック](https://www.digital.go.jp/resources/introduction-to-web-accessibility-guidebook/)も導入され、アクセシビリティの理解が進んだ方も多いのではないでしょうか？

実際に世の中を見てみると、
* [Ameba - Spindle](https://spindle.ameba.design/)
* [SmartHR DesignSystem](https://smarthr.design/)

などがデザインシステムに組み込んでいたり、

* [freee - アクセシビリティガイドライン](https://a11y-guidelines.freee.co.jp/)
* [花王 - ウェブアクセシビリティ方針](https://www.kao.com/jp/web-accessibility/policy/)
 
など、会社自体が指針を示しているところもあることを知りました。


今では**Webアクセシビリティを意識したデザインは、当たり前になってきている**と考えています。


WCAGには色々な達成基準がありますが、その中でも色のコントラスト比はチェックしやすい項目です。

> 達成基準 1.4.3 コントラスト (最低限) (レベル AA): テキスト及び文字画像の視覚的提示に、少なくとも 4.5:1 のコントラスト比がある。

引用 : https://waic.jp/translations/WCAG21/Understanding/contrast-minimum.html

実際私も(まだまだ勉強中の身でありますが)、配色の面から気をつけてデザインをしています。


## オレンジ色でコントラスト比を保つのは難しい？

配色を意識してデザインを始めて気づいたのは、**オレンジ色でコントラスト比4.5:1を守るのが難しい**ということです。

過去の私はオレンジのボタンを作る場合、白文字を置いていました。

![001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250206/595e5e3a-7e35-8de3-949b-1c5b3b00db6e.png)

実際に見てみると、`オレンジ × 白`ではコントラスト比が低すぎること、
数値で見ると、`オレンジ × 黒`が正しいということがわかりました。

![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250206/2b71311e-43b5-9a10-398c-f1c0edcd1cd2.png)


しかし、感覚として白文字の方がしっくりくるということ・白文字を置けるオレンジにしようとすると、どんどん色が濁っていく(赤に近づいていく)という現象に陥りました:fearful:

![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/250206/1760a180-34f8-2da5-130c-45ca07e9aa46.png)


## なぜ感じ方と数字で差が出るのか

今までこの問題を放置していたのですが、[Webアプリケーションアクセシビリティ──今日から始める現場からの改善 (WEB+DB PRESS plus)](https://www.amazon.co.jp/o/ASIN/4297133660/gihyojp-22) 、`P186 - 周辺の色の見え方の変化`に理由が書いてありました。

**人間は、周辺の色に影響を受けるため、同じ色でも違ったように見えることがある**とのことです。

この現象を使った有名な図が、チェッカーシャドウ錯視です。
チェッカーシャドウ錯視については、調べるとさまざまな資料が出てきますのでぜひ調べてみてください。

https://illusion-forum.ilab.ntt.co.jp/checker-shadow/index.html

## 対処方法・今後について

私が「オレンジには白文字を置いても黒文字でおいても、同じくらいの視認性がある」と感じたことは間違っていなかったのかもしれません。

ただ、今は錯視にひっぱられず、コントラスト比を保てる配色で運用していくしかないと考えています。

[Webアプリケーションアクセシビリティ──今日から始める現場からの改善 (WEB+DB PRESS plus](https://www.amazon.co.jp/o/ASIN/4297133660/gihyojp-22) `P186 - 周辺の色の見え方の変化`によれば、WCAG3.0ではAPCAコントラストという手法で**見え方の違いを考慮しようとしているとのこと**でした。

近い将来は、コントラスト比の判断の仕方が変わっていくかもしれませんね。

Webアプリケーションアクセシビリティの本は、引き続き読み進めていきます。
ぜひみなさまも読んでみてください:relaxed:

紹介した本↓

https://www.amazon.co.jp/o/ASIN/4297133660/gihyojp-22
【SQL】CRUD操作まとめ

## CRUD 
|SQL文  |CRUD  |機能  |
|---|---|---|
|INSERT文 | Create　| データ追加 |
|CREATE文 | Read | データ取得 |
|UPDATE文 | Update  | データ更新 |
|DELETE文 | Delete | データ削除 |

### データ追加
```
INSERT INTO テーブル名 (カラム名) VALUES (値);
```
### データ取得
```
SELECT カラム名 FROM テーブル名;
```

### データ更新
```
UPDATE テーブル名 SET カラム名 = 値;
```

### データ削除
```
DELETE FROM テーブル名;
```
今更だけど負荷試験の目的や種別を整理してみた

社内 LT で 負荷試験について発表したので Qiita に焼き増しします。
ご自身の環境での負荷試験に思いを馳せるきっかけになれば幸いです。

## はじめに
サービスの安定に欠かせない負荷試験ですが本腰を入れて勉強したことがありません。
今回は勉強のきっかけ作りとして試験の目的や種別を整理してみます。

## 負荷試験の目的
負荷試験の目的を端的に言うなら「**本番稼働にシステムが耐えうるか**」を確認するためかと思います。

具体化すると「あるシナリオで想定される負荷を掛けて問題が発生しないか」を確認するためと言えます。問題が起きているか判断するための観点は一般的に以下のようなものがあります。

* リソース使用率が跳ね上がっていないか
* レスポンスのステータスコードは正常か
* レスポンスのレイテンシは許容範囲か

同時にシステムの特性を把握したり正常に機能が動作しているか確認します。

* 負荷量とリソースの関係はどうなっているか
* マシンスペックの選定は正しいものか
* オートスケーリングは働いているか

## よし負荷試験してみよう
目的を整理できたので、いきなりですが（脳内シミュレーションで）負荷試験をしてみましょう。

例えば新規ページを `/new-feature` のようなパスで公開するとします。
トップページにリンクを配置するのでかなりのアクセスが見込まれます。

このようなケースでどのように負荷試験を行うでしょうか。
パッと考えつくのは「**1日当たりの最大トラフィックで同時に負荷を掛ける**」です。
そして上述のようにリソース状況やレスポンスが期待通りであるか確認します。

さて、これは十分な負荷試験と言ってよいでしょうか。
なんだか単純化されすぎていて不安な気持ちになりませんか？

## 不安の正体
「**システムへの入力値ってそんなに単純じゃなくね？**」
恐らく多くの方がこのように感じるのではないかと思います。

雑な絵ですが負荷試験で単純化されたシナリオと、実世界のシナリオを見比べてみましょう。

|単純化されたシナリオ|実世界のシナリオ|
|--|--|
|<img width="300", src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619762/2b2d4638-6e81-6846-5e3c-366ef722f312.png">|<img width="300", src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619762/70691b56-bfd1-115c-215f-eea3b88ebe7d.png">|

単純化されたシナリオでは1種のリクエストが大量に送られてきています。実世界のシナリオでは様々なユーザから様々なリクエストが様々な順番で送られてきています。CM が始まれば突発的なリクエスト増もあるかもしれません。わざわざ絵にして書くほどのことでもない気がしますが非常に重要な点だと思います。

負荷試験の多くは Stg 環境など実ユーザのいない環境で行われます。そうした差分をきちんと念頭に入れないと正しい負荷試験ができません。（データ量やマシンスペックに差分がある場合は考慮すべきことは更に複雑化します。）

## Prd 環境を再現すればいいじゃない
Stg で Prd を再現できればよいのですが、完全な再現は不可能と言ってよいでしょう。
Stg を Prd に近づけることは様々な制約があるため簡単ではありません。

頑張って100%の再現を目指すより80%くらいを再現する方が効率がよいのは間違いないです。
とはいえ何をもって80%というのか。そもそも%で表現することも難しいです。

そこで用いられるのが「**負荷の抽象化**」です。

## 複雑な実世界を3つの切り口で抽象化

下図は [k6 ドキュメント](https://k6.io/docs/test-types/introduction/)からの引用となります。
<img width="600", src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619762/4a04523e-0e15-6816-09c8-03bade931991.png">

図を見ると負荷試験を以下の3つに分類しています。（本当はもう少し細かいので詳細はドキュメントへ）


* 既存負荷・・・・想定されるユーザ数分のリクエストに対する性能を評価する
* 過負荷・・・・・システムのボトルネックを推定しオートスケールの指標とする
* 長時間負荷・・・一時的な負荷テストでは発見できない問題をあぶり出す

このように複雑な実環境のシナリオを3つに分類して試験することで、実世界におけるユーザトラフィックを完全再現することなくかなりの問題を回避できるでしょう。もちろんデータ量やマシンスペックは Prd 環境と同等である必要はあります。

:::note info
補足: シナリオテストを考える :bulb: 
上記の3つの切り口に加えてシナリオテストが必要か検討しなければなりません。
シナリオテストとは実際のユースケースをシミュレートするテストのことです。
EC サイトを例にすると `カート追加→住所登録→注文確定` の一連のフローを再現します。
:::

## どの負荷試験を実施すべきか
実世界のトラヒックを抽象化して3つに分類できることが分かりました。
では全ての試験を実施すれば OK なのかと言うとそれもまた違います。
この先は「**場合による**」としか言えないです。

決まりきった一連のフローがあるならシナリオテストを組むかもしれませんし、クライアントも再現した E2E 試験が必要かもしれません。また、負荷試験とは毛色が異なりますがカオスエンジニアリングの世界に踏み入るのもよいのかもしれません。その組織やアーキテクチャ、試験対象に応じて何をどこまでやればよいかは変わってきます。自身の環境に合わせて適切な試験を組めるようにひたすら考えましょう。

## むしろ大切なこと
ただ負荷試験をちゃんとやったつもりでも問題が起きるときは起きます。
そのため次のような対策を講じておくことも大切だと思います。

* 素早く安全にロールバックできるような体制・仕組みを作る
* スループットやレイテンシの異常を早期検知する仕組みを作る

## さいごに
今まで何となくで負荷試験をしていたので目的や種別を整理できてよかったです。

## 参考
https://k6.io/docs/

https://engineering.dena.com/blog/2021/10/healthcare-load-testing/

https://tech.nri-net.com/entry/system_performance_test_preparation
PHP 「true」「false」などの文字列をbooleanのtrue falseに変換する

# 概要

- 文字列の「true」や「false」をboolean型のtrueやfalseに変換する方法をまとめる。

# 方法

- `filter_var()`関数を使う。下記の様に記載する。下記のように記載することでfilter_varからboolが返される。

    ```
    filter_var(「true」や「false」などの文字列, FILTER_VALIDATE_BOOLEAN)
    ```

- 下記に具体的な例を記載する。

    ```php
    <?php
    
    $boolStr = 'true';
    var_dump($boolStr); // string(4) "true"
    
    $bool = filter_var($boolStr, FILTER_VALIDATE_BOOLEAN);
    
    var_dump($bool); // bool(true)
    ```

# 注意点

- FILTER_VALIDATE_BOOLEANフィルターはデフォルト状態で`"1"`, `"true"`, `"on"`, `"yes"`の場合trueを返し、それ以外の場合はfalseを返す。



# 参考文献

https://www.php.net/manual/ja/function.filter-var.php

https://www.php.net/manual/ja/filter.filters.validate.php
ホストOS「Ubuntu20.04」でVMware Workstationが起動しなくなった時の対処法

# インシデント発生

突然、鍛えていたVMwareが動かなくなり、泣きそうになった。
たぶん、ホストOSのカーネルをアップデートしてしまったことが原因。

動かなくなった時の各バージョンは次のとおり
linux 5.15.0-67-generic (Ubuntu 20.04)
VMware workstation 16.2.3

エラーの内容

Befor you can run VMware, sevaral modules must be compiled and loaded into the running kernel.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/70171ed6-cb40-dbc8-c966-4bc0a0d67fdc.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/026e41b8-a537-0903-de33-6bbe4a09522d.png)

Unable to install all modules. See log
/tmp/vmware-[ユーザ名]/vmware-11752.log
for details.(Exit code 1)

vmware-11752.logを見てもぜんぜんわからん。


# 対応１

`vmware kernel modul updater error`でググって８番目にヒットした
「Ubuntu LinuxでVMware Workstation pro/playerを使うときの注意」
が大当たり。

http://verifiedby.me/adiary/0171#k171p2

https://communities.vmware.com/t5/VMware-Workstation-Player/ubuntu-22-04-install-vm-workstation-error/td-p/2905277

```:自分でコンパイルする
sudo service vmware stop

git clone https://github.com/mkubecek/vmware-host-modules
cd vmware-host-modules
make clean
make
sudo make install
sudo modprobe -a vmw_vmci vmmon vmnet

sudo service vmware restart
```

これで VMware は起動するようになった。が、

# 対応２

今度は、ゲストOSが起動しない。

Could not open /dev/vmmon:No such file or directory

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/5285fed7-1125-998a-d049-8cc253f39073.png)


`cannot open /dev/vmmon`で検索

https://kb.vmware.com/s/article/2146460?lang=ja

セキュアブートを有効にすると、UEFI からブートする Linux ホスト上で仮想マシンのパワーオンに失敗するってヤツ。

```:対処手順
$openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=VMware/"

$sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmmon)

$sudo /usr/src/linux-headers-`uname -r`/scripts/sign-file sha256 ./MOK.priv ./MOK.der $(modinfo -n vmnet)

$sudo mokutil --import MOK.der

パスワード２回入力

$reboot
```

この後、メニューの上から２番目を選び、さっきのパスワードを入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1163572/df1b4e0d-d3da-bbba-ba46-cf8d37943570.png)


# 再発防止

パッケージの自動更新を無効にする
https://qiita.com/dan-go/items/0d863ab5d11494cd7ec5

恒久的にカーネルを更新対象から除外する
https://sig9.org/archives/4496#toc4

# その他

参考になりそうなサイト

https://www.leewoodhouse.com/2022/06/30/vmware-workstation-15-16-for-linux-fails-to-load-vmmon-and-vmnet-modules-after-ubuntu-kernel-update/
Java_標準入出力 (paizaランク C 相当)

paizaラーニングforTEAM Java入門編
Cランクレベルアップメニュー

```Java:C-#08
// 1行目には社員の数を表す整数Nが与えられ、2行目〜(N+1)行目の各行では、社員の名前を表す文字列s_iとその社員の昨年度の年齢を表す整数a_iが半角スペース区切りで与えられる。
// 入力値最終行の末尾に改行が１つ入る。文字列は標準入力から渡される。
// そのとき、入力された通りの順番で、社員s_iの名前と、その社員の今年度の年齢を半角スペース区切りでN行出力するプログラム
import java.util.*;
public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ！！
        Scanner sc = new Scanner(System.in);
        int line = sc.nextInt();
        
        for (int i = 0; i < line; i++) {
            String name = sc.next();
            int age = sc.nextInt();
            System.out.print(name + " ");
            System.out.println(age + 1);
        }
    }
}
```
「Integrate Local and Remote Data in CRM Analytics」プロジェクトのエラーを解決

# エラー発生
「Integrate Local and Remote Data in CRM Analytics」プロジェクトの「Prepare Your Combined Data in a Recipe」で下記のエラーが発生します。
https://trailhead.salesforce.com/ja/content/learn/projects/integrate-local-and-remote-data-in-einstein-analytics/prepare-your-combined-data-in-a-recipe
```
We can't find the required fields in the 'North America Sales' dataset. Check the instructions and make sure that you've created the 'North America Sales' recipe correctly.
```
![スクリーンショット 2023-03-15 220612.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/95260925-8379-aa13-4a12-cdf894d53eaf.png)
# 解決方法
**「Transform 0」ノードで「Edit Attributes」を使用して"Label"と"API Name"を下記の画像に合わせて修正します。**
![スクリーンショット 2023-03-15 223931.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3255462/b1d3f1cf-4577-2b5e-10ec-1981c21d2439.png)
# 参照記事
https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000A8eSFSAZ
CSS 疑似要素(::beforeと::after)の使い方

<h1>・はじめに</h1>
　疑似要素(::beforeと::after)はそれぞれ指定した要素の直前もしくは直後に、指定した要素を追加するものである。

<h1>・使い方</h1>
　はじめにコードを

```HTML:HTML
<ul>
    <li>たぬき</li>
    <li>きつね</li>
    <li class="new">ねこ</li>
    <li class="new">コブラ</li>
</ul>
```

このHTMLファイルではたぬき、きつね、ねこ、コブラをリスト表示にして、ねことコブラにnewというclassを付与しています。

```CSS:CSS
#new::after {
    color: red;
    content: "new";
}
```

こちらではnewクラスをセレクトして色を赤に、contentにnewという文字列を指定しています。さらに直後に指定した要素を追加する::afterという疑似要素を指定すると、、、

![screenshot.2023-03-15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/39941400-6c61-1359-193d-e5504c54a15e.jpeg)

このように指定した要素の直後に新たな要素を追加することができる！
Pythonのスクリプト作成を支援するGUIアプリ

OpenAIのGPT-3.5-turboモデルを使用したAIチャットでPythonのスクリプト作成を支援するGUIアプリケーションをdearpyguiで作りました
会話の履歴や内容を継続する機能と、返信にPythonのスクリプトが含まれる場合そのスクリプトを抽出して表示する機能をつけました

:::note
業務外の個人的な検討活動です。
:::

:::note alert
警告
作者はいかなる責任も負いません。
:::

https://github.com/nakanomuramoto/chatWorkBench

#### 準備
API keyの値をchatWorkBench.pyが入ってるフォルダにkey.txtとして保存してください。

dearpyguiをインストールしてください。

githubからchatWorkBench.pyをクローンしてください。

#### 使い方
```
% python chatWorkBench.py
```

1. 赤丸の欄に作りたいpythonスクリプトの機能を書いて、
終わったら左上のSendボタンを押してください。
ロード状態のぐるぐるが回るのでしばらく待つ。
回答は下の欄に表示されます。
回答の中にスクリプトが含まれていたら、右の欄に抜き出されます。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/aadfdde8-cc3d-d5b8-dc95-5a52b3dd3118.png)
返ってきた回答と次の質問のためのタブ
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/97de8ba6-b234-988a-ecdc-e6ae0a679b3f.png)

1. 回答を読み、気に入らなければ増えたタブを押して追加の要望を入力します。
すでに質問した番号のタブは読み取りのみになりますので、次のタブに入力してください。
質問と回答の内容は継続されます。
質問は10回までに設定しています。

要望の追加
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/6bf3522e-5112-b4a8-ad62-b6c081b8494d.png)

さらなる追加
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/8a216683-5788-95da-680d-d9a39087294d.png)

1. 納得がいく状態になったらCodoCopyAllのボタンを押してスクリプトをコピーします。
マウスで選んでCTRL＋Cでコピーすることもできます。
 
スクリプトをコピーする
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/b047184a-d226-5c1c-aa91-9799247ff9dd.png)

メニュータブのResetを押すと会話の内容はリセットされます。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103446/a1c7ccf5-c307-3378-512d-47181d0726db.png)

メニュータブのQuitを押すと終了します。
Java_改行区切りでの出力 (paizaランク D 相当)

paizaラーニングforTEAM Java入門編
Cランクレベルアップメニュー

```Java:C-#06
// 整数nが入力され、その後にn個の整数a_1,...,a_nが半角スペース区切りで入力されたとき、a_1,...,a_nをそのままの順番で改行区切りで出力するプログラム
import java.util.*;
public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ！！
        Scanner sc = new Scanner(System.in);
        int line = sc.nextInt();
        
        for (int i = 0; i < line; i++) {
            int line2 = sc.nextInt();
            System.out.println(line2);
        }
    }
}
```
draw ioで数式を書く方法

# Draw.ioでも数式を書きたい

グラフィカルモデルを綺麗に書きたくてなにかいい方法はないものかと。とりあえず、draw.ioは普段から使うのでひとまずそれを使ってみることにした。モデルを書いたらそりゃ文字も入れたくなるわけで。でも、デフォルトでは数式の入力はできなかったのでちょっとした共有。

:::note info
イコールの位置を揃えられなかったので誰か教えてください。

__2023/03/16__ __追記__
LaTexの書き方を使用するとうまくいきます。`\begin{eqnarray}` `\begin{eqnarray}` でくくれば改行もできるし、イコールもそろえられます。

```tex
$$
\begin{eqnarray}
y & = & x + 1 \\
z & = & y + 2
\end{eqnarray}
$$
```
:::

![ppca.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1272355/a34485d7-9a4e-4b84-76f9-2edab4664f1f.png)

# 設定

タブにある拡張 > 数式組版をクリックする。準備はこれだけ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1272355/0826aa97-a5b6-fae9-d8b8-15c68e11a77b.png)

# 書き方

書き方はいくつかあって、

1. バッククォートでくくる→AsciiMath
1. `$$`でくくる→LaTeX
1. `\(` と `\)` でくくる→Inline LaTeX 

の三種類がある。それぞれの違いをあまり意識したことがないので、その時々で適当に使ってしまってる。

# おまけ

AsciiMathを使用時に、LaTexと同じノリで $y_{new}$ を `y_{new}` と書くと、$y_{\ne w}$ となってしまう。こんなときは文字をダブルクォーテートでくくるとうまく表示できる。つまりはこう `y_{"new"}`。

# 参考

https://www.diagrams.net/doc/faq/math-typesetting
VueでクロスプラットフォームAppの開発を行う【Win11】

QuasarFWを使ってAndroidエミュレーターの起動ができたので、やり方をメモしておきます。
ざっくりとした流れや、トラブった部分について集中的にまとめます。

## Document

https://quasar.dev/quasar-cli-vite/developing-cordova-apps/preparation

https://cordova.apache.org/docs/en/latest/guide/platforms/android/

## 使用環境

- Windows11Home-64bit
- VSCode
- Quasar-v2.11.7 + TypeScript + Vite

## 必要ファイル

### Android SDK
Androidエミュレーターの開発キット。

https://developer.android.com/studio

### JDK
最新バージョンだと動作しません。

場所：
```
C:\Program Files\Java\jdk-11
```


https://www.oracle.com/java/technologies/downloads/#java11

### Gradle

Quasarの仕様で、下記バージョンでしか動作しません。

場所：
```
C:\gradle-4.10.3
```

https://downloads.gradle-dn.com/distributions/gradle-4.10.3-all.zip

## 環境変数の設定でパスを通す
PCの検索に「path」を入力して、システム環境変数の編集を開きましょう。

下記の変数とパスを設定します。

### 環境変数の追加

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530037/96c9d2dc-c379-e1e0-d59f-9ca979ad2c5e.png)

### 追加するパス
不要なものが混じっているかもしれません＾＾；

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530037/f7c3ab27-7223-ee5a-43e7-8f11cb455f92.png)

## SDK Managerの設定

SDKの設定内容です。

![Image 2023-03-15 15.31.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530037/b3102e72-6ee0-03a9-34c7-0facd0e112a6.png)

### Androidのバージョン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530037/48afe2ca-a59b-2ad2-0af2-53aaeeceb2b3.png)

### ビルドツールのバージョン

30.0.3が必要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2530037/6324c8d1-99d0-39ad-ace2-49ed9ba0ccaf.png)

## 作業中に発生したエラー内容

### Unable to get mutable Windows environment variable map

→JDKのバージョンを11に落とすと解決しました。
Gradleのバージョンが古いためJDKが対応していないとのこと。
Gradleのバージョンは変えられないので、JDKを11にすれば消えます。

### Recommended version is 30.0.3.

→ビルドツールのバージョン30.0.3をインストールすることで解決しました。

### A problem occurred evaluating project ':app'.
→プロジェクトのパスに含まれるASCII文字を削除して解決しました。
ディレクトリに日本語を使うのは今後やめます。

## 参考動画

古い動画なのでUIは変わっていますが、大まかには理解できました。

https://youtu.be/kWRpEcv2nu8
VBAについて少し詳しくなりたい

# はじめに
<!-- 発端や概要を記載 -->
どうもみなさんこんにちは！！
業務でExcel マクロ(VBA)を通じてExcelの用語や機能を知ったのでExcel マクロをこれから触る方やExcelの用語を調べている人に共有しておきます。
業務以外で触ることがなかったのでじっくりExcelを触るのは今回が初めてになります。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [一般的にExcel マクロ（VBA）が使われる理由](#Chapter1)
1. [VBAを書いてみて思うVBAの課題](#Chapter2)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 一般的にExcel マクロ（VBA）が使われる理由

1つめは業務効率化。毎日行う作業や面倒なことをマクロとして登録しボタン一つで10分の作業が1分でできるといったこともできます。
CSVを取り込み、重要な部分を取り出し、別のExcelにまとめる...1回であればさほど気にならない作業だが、これを毎時間、毎日行うのは気が滅入る作業だと思います。
手作業で行うのは今日までにして明日から時間の効率化を行うのも手だと思います。

2つめは非エンジニアでも開発がしやすい点。
多言語で開発をするときによくある開発ではまず、UI(ボタン)を作成し、作成したUI(ボタン)にクリックした時の処理を記述します。
VBAでは既存に用意されたUI(ボタン等)があるので処理を記述することでボタン機能ができます。変数名に日本語も使用できるので`決定ボタン = 1 ` みたいな書き方もできます。

例 A1に1を表示させるコード
```
Sub test()
    Cells(1,"A") = 1
End Sub
```

<a id="#Chapter2"></a>
# VBAを書いてみて思うVBAの課題

`エディタの使用感`
Excelマクロを実行する時の流れとしてExcel マクロのエディタ(開発コードを書くメモ)に処理を記述し、実行することで処理を反映させます。Function(関数とよばれるもの)といった定義されているもののフォントカラーを変更できますが見やすいかと言われるとあんまりです。便利な時代になり他に便利なエディタが出ている分、慣れないメモ帳を使うのは少し疲れます。

備考　ExcelとVSCodeを連携して開発を行う方法もありますが今回は業務上、VSCodeの連携は行っていません。

`エラーメッセージがわかりにくい`

| エラーメッセージ　　　 |  内容 | 
| :--- | :--- |
|インデックスが有効範囲にありません。|画面や機能(コンポーネント)単位でのテストを実施します。|
|型が一致しません。 | 互換性のなデータ型の間で代入を行っている。 | 
|ファイルが見つかりません。 | 存在しないファイルを参照しています。|

上記は例ですがエラーメッセージが出たときにどの変数でどういったエラーが出たのかが知りたいのですがエラーメッセージには変数の記述はなくエラー対象が絞り込みづらいと感じます。

![image1023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3071732/bc60c247-22a6-7b1c-21d7-b26e38c20891.jpeg)

# まとめ
業務上、Excelを使う機会は多々あります。その中で定期的に行う作業を業務効率化することで手間が減るといった点はVBAを触るメリットの一つだと感じました。
ubuntuにPostgresをインストール

postgresユーザの作成

    $ sudo adduser postgres
    $ sudo passwd postgres

公式に概ね従ってpostgres最新版をインストール
https://www.postgresql.org/download/linux/ubuntu/

    # ダウンロード予定のバージョンを確認
    $ sudo apt info postgresql
    Package: postgresql
    Version: 14+238               # 古い

    # Create the file repository configuration:
    $ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'

    # Import the repository signing key:
    $ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

    # Update the package lists:
    $ sudo apt update

    # ダウンロード予定のバージョンを確認
    $ sudo apt info postgresql
    Package: postgresql
    Version: 15+248.pgdg22.04+1   # 新しい

    # Install the latest version of PostgreSQL.
    # If you want a specific version, use 'postgresql-12' or similar instead of 'postgresql':
    $ sudo apt -y install postgresql

途中で以下のエラーが出た場合は

    Setting up postgresql (15+248.pgdg22.04+1) ...
    Processing triggers for man-db (2.10.2-1) ...
    Processing triggers for libc-bin (2.35-0ubuntu3.1) ...
    Scanning processes...
    Scanning processor microcode...
    Scanning linux images...
    Running kernel seems to be up-to-date.
    Failed to check for processor microcode upgrades.
    No services need to be restarted.
    No containers need to be restarted.
    No user sessions are running outdated binaries.
    No VM guests are running outdated hypervisor (qemu) binaries on this host.

これで対処

    $ sudo apt -y remove postgresql
    $ apt purge needrestart
    $ sudo apt -y install postgresql

インストール場所を探す

    $ sudo find / -name postgresql
    /var/log/postgresql
    /var/lib/postgresql
    /usr/lib/postgresql
    /usr/share/doc/postgresql
    /usr/share/postgresql
    /etc/postgresql
    /run/postgresql

postgresql起動

    $ sudo systemctl enable postgresql
    $ sudo systemctl start postgresql
    
DB初期設定

    sudo su - postgres
    vi .profile
    export PGHOME=/usr/lib/postgresql/15
    export PGDATA=/var/lib/postgresql/15/data
    export PGLIB=$PGHOME/lib
    export LD_LIBRARY_PATH=$PGHOME/lib
    export PATH=$PATH:$PGHOME/bin
   
    source ~/.profile
    initdb -E UTF8 --no-locale

DB起動
    pg_ctl start
Laravel で Auth の各リダイレクト先を指定する方法

laravel では'auth'を使うことで会員機能の実装が簡単にできる。
現在通っているプログラミングスクールのカリキュラム内にもauthは含まれていたが、
ログインや会員登録、ログアウト後のリダイレクト先のページ指定については触れなかったのでメモ程度にまとめる。
※実装はできたが、正直理解度はかなり浅い。仕組みがしっかり理解できる日は来るのか...(仕組みを理解していなくてもいいのがFWのメリットではあるが...)

※Laravel ver : 9.52.4

<h2>ログイン後のリダイレクト先の指定</h2>
authを実装した際に自動生成される、<br>
continueapp/app/Providers/RouteServiceProvider.php を以下のように変更。

```RouteServiceProvider.php
    public const HOME = '/home';
    /* ↓に変更*/
    public const HOME = '好きな遷移先';
```

これだけでログイン後のリダイレクト先を変更できる〜
尚、login.blade.phpファイルのformタグのルーティングは必ず('login')で指定しておくこと(デフォルト)。
```login.blade.php
    <form method="POST" action="{{ route('login') }}">
```

<h2>ログアウト後のリダイレクト先の指定</h2>

LoginControllerを修正。
```LoginController.php
    /*追加*/
    use Illuminate\Http\Request;

    use AuthenticatesUsers;
    /* ↓に変更*/
    use AuthenticatesUsers {
    logout as performLogout;
    }
```

以下を追加。

```LoginController.php
    public function logout(Request $request)
    {
        $this->performLogout($request);
        return redirect()->route('好きな遷移先'); 
    }
```
ログアウト後のリダイレクト先の指定完了。
ログイン時同様、ログアウトしたい箇所にroute('logout')を組み込んでなー。

<h2>会員登録後のリダイレクト先の指定</h2>
以下で解決。

```RegisterController.php
    protected $redirectTo = RouteServiceProvider::HOME;
    
    // 会員登録後に会員登録完了画面にリダイレクトさせる
    protected function redirectTo() {
       return route('好きな遷移先');
    }
```

<br>
実装できはしたけど、どのサイト調べてもあまり理解ができなかったので実力不足を痛感...<br>
以上、各機能ごとのリダイレクト先の指定方法でしたー。
【社内DX】とても軽いファイル検索ソフト(Everthing) -応用編-

# はじめに
Everthingを仕事で使うようになってファイルの検索のスピードが爆速になった。
しかし、検索フォルダを増やしていくと、思った以上に検索結果が多くなり、より絞った条件で検索を行う必要性を感じた。
前回はEverthingを紹介しただけであったが、設定などを変更することでより高度に利用できるような方法を紹介する。


# 前回
https://qiita.com/junzai/items/1c50e14299a0a9318d3e

# ショートカット
作業中に探したくなったファイルがあるとき、Everthingのファイルを実行する時間を短縮するため、ショートカットを登録しておくと便利  
私は押し間違えても問題がない`Page Up`をショートカットとして登録している

ツール → オプション
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/1dc0326f-b7aa-d5d0-20a7-e561a93de4e7.png)
 


# 検索結果の条件をより見やすくする。
検索結果が一致する部分を色塗りで見せることによって該当箇所がより見やすくなる。
ツール → オプション 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/8a3fe120-75c5-596a-204b-a7b0647aed39.png)

## 通常の検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/1cf9a36c-2560-5a0a-ee12-791e82c5c7c3.png)


## 設定後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/e75b74ed-9418-0e77-e378-60b5c4ca3225.png)

# 経路を検索条件に含める
今回のように検索対象のファイル名が複数存在する`class`のようなものであるとき、その上位フォルダ名などで区分する必要性がある。
デフォルト設定ではファイル名のみが対象であるので、フォルダ名も含むような検索設定にする必要性がある。
検索 → フォルダ名にマッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/f1dc6899-fc67-7c0e-def7-451e5b7b20bf.png)

## 設定後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/ccfed2c0-73c9-ae1f-cf76-afc587684ad3.png)




# ファイル形式でフィルタリング
デフォルト設定はすべてのファイル形式を検索結果をして表す。ドキュメントファイルのみや画像のみが欲しい時は有効
表示 → フィルタ欄を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/6f5502c4-51aa-1e56-cc77-47f7ec1145c2.png)

## ファイル形式を選択してフィルタリング
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/988607c6-f3bd-d6f2-34fe-bac60d8baba2.png)


## 検索ワードでフィルタリング
検索ワードでフィルタリングすることもできる

|検索ワード|内容|
|----|------|
|zip:|圧縮ファイル|
|doc:|ドキュメントファイル|
|pic:|写真ファイル|
|video:|動画ファイル|
|exe:|実行ファイル|
|audio:|音楽ファイル|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/b3af4d3c-2e19-f19d-5606-bc715ddb5c64.png)

# 演算子

|検索ワード|内容|
|----|------|
|空白|そして(AND)|
|❘|または(OR)|
|!|否定(NOT)|
|<>|複数条件|


## そして(AND)の検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/f153e151-852a-d0a0-f8a5-6992d11def77.png)

## 否定(NOT)の検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/cef2270e-0534-a974-fac2-66173b45f889.png)



## または(OR)の検索結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821152/94974b25-4a0a-2ffa-92e4-86a3558c7607.png)


# 終わりに
いくつかの設定の仕方、検索方法を述べた。
少しでも多くの方が今まで以上に効率よく仕事ができるなって欲しいです。
Go言語でループ内のポインタを安全に扱う上での一般的なバグとその解決策

### はじめに
ポインタの取り扱いを間違えると全て同じ値になってしまうバグを起こしてしまうことがあります。Go初心者というかポインタとか使ってきてないエンジニアは一度はハマってしまうのではないでしょうか？
自分もハマった口なので...

### 説明
このコードは、Go言語でループ内でポインタを使用する際の正しい方法と誤った方法を示す例です。
`User`構造体のスライス`users`があり、各ユーザーの`ID`をポインタとして別のスライスに格納しています。
コードには2つの方法が示されており、1つは誤った方法（`Incorrect method`）、もう1つは正しい方法（`Correct method`）です。

該当のコードはこちら
```go
package main

import "fmt"

type User struct {
    ID   string
    Name string
}

func main() {
    users := []User{
        {"1", "Alice"},
        {"2", "Bob"},
        {"3", "Charlie"},
    }

    // ポインタのスライスを作成
    idsIncorrect := make([]*string, 0, len(users))
    idsCorrect := make([]*string, 0, len(users))

    // Incorrect method
    for _, user := range users {
        idsIncorrect = append(idsIncorrect, &user.ID)
    }

    // Correct method
    for _, user := range users {
        tmp := user.ID
        idsCorrect = append(idsCorrect, &tmp)
    }

    fmt.Println("Incorrect method:")
    for _, id := range idsIncorrect {
        fmt.Println(*id)
    }

    fmt.Println("Correct method:")
    for _, id := range idsCorrect {
        fmt.Println(*id)
    }
}
```

1\.　**ncorrect method（誤った方法）**
この方法では、`&user.ID`を使用して、User構造体の`ID`フィールドへのポインタを`idsIncorrect`スライスに追加しています。しかし、`user`は`for`ループ内で更新される変数であり、ループの各イテレーションで同じメモリアドレスを参照しています。その結果、`idsIncorrect`に追加されるポインタはすべて同じメモリアドレスを指し、最終的な`ID`の値がすべて同じになってしまいます。

2\. **Correct method（正しい方法）**
この方法では、`tmp := user.ID`として新しい変数`tmp`に`User`構造体の`ID`フィールドの値をコピーし、その変数へのポインタ（メモリアドレス）を`idsCorrect`スライスに追加しています。この方法により、各イテレーションで新しい変数が作成され、それぞれ異なるメモリアドレスが参照されるようになります。これによって、各`ID`に正しい値が設定されます。

結果はこのようになります。
```bash
Incorrect method:
3
3
3
Correct method:
1
2
3
```

### ポインタの取り扱いに関する注意事項

**1\.** ループ内でポインタを使用する場合、ループ変数のアドレスを直接参照すると、意図しない動作が発生する可能性があります。ループ変数はイテレーションごとに同じメモリアドレスを使用するためです。

**2\.** ループ内でポインタを使用する場合は、ループ内で新しい変数を作成し、ループ変数の値をその新しい変数にコピーしてから、その新しい変数のアドレスを取得するようにします。これにより、各イテレーションで異なるメモリアドレスが参照されるようになり、意図した動作が得られます。

**3\.** ポインタを使用する際は、nilチェックを行い、nilポインタに対する操作を避けることが重要です。nilポインタをデリファレンス（デリファレンス（値を参照すること）しようとすると、ランタイムパニックが発生し、プログラムがクラッシュする可能性があります。

**4\.** 不要なポインタ操作を避けることで、プログラムの可読性と安全性が向上します。ポインタを使用する理由が明確でない場合は、値渡しを検討してください。ただし、大きなデータ構造をコピーする場合や、関数呼び出しで変更された値を元の変数に反映させたい場合など、ポインタを使用する理由がある場合もあります。

**5\.** ポインタを扱う際には、ガベージコレクションに関する知識も重要です。ポインタが不要になった場合、参照を解除することでメモリリークを回避できます。Go言語はガベージコレクションを自動的に行うため、プログラマは通常これを意識する必要はありませんが、大規模なアプリケーションや特定の状況では、メモリ管理に関する知識が役立ちます。

上記の注意事項を踏まえて、Go言語でポインタを扱う際には、ループ内でのポインタ操作やnilチェック、適切なポインタの使用、メモリ管理に注意を払うことが重要です。これらのポイントを意識することで、ポインタを安全かつ効果的に使用することができます。

https://golangbot.com/pointers/

https://go.dev/tour/moretypes/1

https://www.geeksforgeeks.org/pointers-in-golang/
動的に取得したHtmlファイルを起点にViteでHMRな開発環境を構築する（メモ）

HTMLを生成するWebアプリからHTMLファイルに含まれるログインユーザーのパラメータを取得したい、という要件があるプラグイン的なアプリを作る機会があったのでメモ（備忘録）

# 理由と状況
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3270885/c29a9f1f-f267-77c5-2366-1e89a0b42dc7.png)

* 既存アプリはログイン認証の結果がHTMLに含まれる
* 既存アプリのステージングAPIを叩きたい
* 最終的にはjsファイルを生成して既存アプリにプラグインのような形で配信する
* 開発環境でhmrな楽しいコーディングがしたい
  

# 何をすれば解決するか

既存アプリのWebサーバーから取得したHTMLファイルに・・・・
```html
<script type="module" src="/main.ts"></script>
```
Viteで管理しているsrcフォルダのスクリプトの起点ファイルを読み込むタグがあれば良い。以上。

これだけだと面白みが無いので一応サンプルコードを。
## サンプル用構成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3270885/4fc6ad83-e63b-5036-042b-e41acf07be6f.png)


## express側
```javascript
import dayjs from 'dayjs';
import express from 'express';

const app = express();
app.get(/^\/$/, (req, res) => {
  res.writeHead(302, { Location: '/index.html' });
  res.end();
});
const server = app.listen(8000, function () {
  console.log('Express Run', `Port = ${server.address().port} `);
});

app.get('/index.html', function (req, res, next) {
  const ts = dayjs().format('YYYY-MM-DD HH:mm:ss.SSS');
  const html = `
<!DOCTYPE html>
<html lang="ja">
    <head>
        <meta charset="UTF-8" />
        <link rel="icon" type="image/svg+xml" href="/vite.svg" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title></title>
    </head>
    <body>
      <div> expressで出力${dayjs().format('YYYY-MM-DD HH:mm:ss.SSS')}</div>
        <div id="app"></div>
        <!-- ↓ これが重要なやつ ↓ -->
        <script type="module" src="/main.ts"></script>
    </body>
</html>
`;
  res.end(html);
});
```

## Vite側
なにも設定しないとvite.config.tsのrootプロパティで指定されたhtmlファイルを読みに行ってしまうので

```typescript:vite.config.ts
export default defineConfig(({ command, mode }) => {
    return {
            root: 'src',
            base: '/',
            //省略
        },
        server: {
            port: 8888,
            //省略
            proxy: {
                '^/$': {
                  target: 'http://localhost:8000',
                  changeOrigin: true,
                },
                '/index.html': {
                  target: 'http://localhost:8000',
                  changeOrigin: true,
                },
            },
        },
    };
});
```

proxyで無理やりexpressに向いてもらいます。

**結果**
動的サーバーからHTMLファイルを取得しながら
Viteの高速ビルドでhmrな幸せ開発環境でコーディングが可能となります。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3270885/41753d36-1bf6-ca78-65af-2b111e45af41.png)


## シンプルなのですが・・・
GitHubにサンプル上げてます

https://github.com/hare-systems-ryo/vite-express-hmr-sample
ChatGPTとエンジニアの未来 ~written by ChatGPT~

## TL;DR
- AIはエンジニアの仕事を奪うことはなく、エンジニアの仕事をサポートすることができる。
- エンジニアはAIに取って代わられないスキルを磨き、自己研鑽を継続的に行うことが重要。
- AIを使ったソリューションの提供によって、エンジニアは新しいビジネスモデルを生み出すことができる。
- AIを用いたデータ分析や予測モデルの開発によって、ビジネスの意思決定や新製品の開発に貢献することができる。
- AIを用いた自動運転技術の開発によって、交通事故の削減や、運転に制限のある人々の移動の自由度の向上などが期待される。
- エンジニアはAIを積極的に活用することで、より高度な仕事に挑戦し、より多様なキャリアパスを選ぶことができる。

## ChatGPTとエンジニアの未来 ~written by ChatGPT~

<strong>エンジニアはAIの発展によって仕事がなくなってしまうのだろうか？</srong>

この問いについて、この記事ではChatGPTの視点から解説していきます。

まず、AIは確かにエンジニアの仕事の一部を自動化することができます。

例えば、AIによって自動化されたコード生成ツールやデバッグツールなどがあります。

しかし、<strong>AIがエンジニアの仕事を完全に奪うことはないと考えられます。</strong>

なぜなら、AIはエンジニアの知識や経験、創造性に比べて、未だに限界があるからです。

エンジニアに必要なスキルの中でも、特にAIには難しいとされるのが<strong>「創造性」</strong>です。

エンジニアが新しいソリューションを作り出すために必要な発想力やアイデアの提供は、AIが置き換えることはできません。

また、AIが提供する自動化ツールがエラーを発生させた場合、エンジニアが問題を解決するためのスキルが求められます。

一方で、<strong>AIはエンジニアの仕事において役立つツールやアシスタントとして、エンジニアの仕事をサポートすることができます。</strong>

例えば、AIによってテストケースを自動生成することで、エンジニアの作業時間を短縮することができます。

また、AIを活用することで、エンジニアがより高度なタスクに集中できるようになります。

さらに、AIが普及することによって、エンジニアの仕事はよりクリエイティブなものになるとも考えられます。

エンジニアは、AIが自動化できない仕事に注力することで、より高度な仕事に挑戦することができるようになるでしょう。

結論として、<strong>AIはエンジニアの仕事を奪うことはありません。AIはエンジニアの仕事を支援し、エンジニアがより高度な仕事に挑戦するための時間を作ることができます。</strong>

エンジニアがAIと共存し、より高度なクリエイティブな仕事に取り組むことができるようになることを期待します。

AIがエンジニアに与える影響は、エンジニアのスキルによって異なります。

例えば、AIによる自動化によって単純なタスクが自動化されることで、エンジニアはより高度なタスクに集中できるようになります。

これによって、エンジニアは新しい技術やプログラミング言語を学ぶことができ、よりクリエイティブな仕事に取り組むことができます。

また、<strong>AIはエンジニアの教育にも影響を与えます。</strong>

AIによって自動化されたツールを使うことで、<strong>エンジニアはより簡単に新しい技術やプログラミング言語を学ぶことができます。</srong>

また、AIによって自動化されたツールを使用することで、<strong>エンジニアはより迅速かつ正確に開発することができます。</strong>

しかし、AIがエンジニアに与える影響は全てが良いわけではありません。

例えば、AIによって自動化されたツールがエラーを発生させた場合、エンジニアが問題を解決するためのスキルが求められます。

また、AIによって自動化されたツールがエンジニアの仕事を完全に置き換えることはないとしても、<strong>AIによって自動化されたツールによって、エンジニアの仕事が減少する可能性があります。</strong>

以上のように、AIはエンジニアの仕事に大きな影響を与えることができます。

しかし、AIはエンジニアの仕事を奪うことはなく、むしろエンジニアの仕事をサポートすることができます。

エンジニアは、AIが自動化できない仕事に注力することで、より高度な仕事に挑戦することができるようになります。

また、エンジニアは、AIによって自動化されたツールを使用することで、より迅速かつ正確に開発することができます。

しかし、<strong>AIがエンジニアの仕事を奪うという懸念があるのは事実であり、この懸念は今後ますます高まる可能性があります。</strong>

そのため、<strong>エンジニアは常に最新の技術やトレンドに敏感である必要があります。</strong>

また、<strong>エンジニアは自己研鑽やスキルアップを継続的に行うことで、AIに取って代わられないスキルを磨くことが重要です。</strong>

さらに、AIを活用することで、エンジニアが直面する問題の解決や、新しいアイデアやアプリケーションの開発につながることがあります。

例えば、AIを用いたデータ分析や予測モデルの開発によって、ビジネスの意思決定や新製品の開発に貢献することができます。

また、AIを用いた自動運転技術の開発によって、交通事故の削減や、運転に制限のある人々の移動の自由度の向上などが期待されます。

最後に、AIはエンジニアにとって大きな機会であるとも言えます。

AIの発展によって、<strong>エンジニアは新しい分野に挑戦し、より多様な仕事を手掛けることができます。</strong>

また、AIを使ったソリューションの提供によって、<strong>エンジニアは新しいビジネスモデルを生み出すことができます。</strong>

<strong>エンジニアはAIを利用することで、より高度な仕事に挑戦し、より多様なキャリアパスを選ぶことができます。</strong>

以上のように、AIがエンジニアの仕事に与える影響は多岐にわたります。

AIはエンジニアの仕事を奪うことはなく、むしろエンジニアの仕事をサポートすることができます。

エンジニアは、AIを積極的に活用することで、より高度な仕事に挑戦し、より多様なキャリアパスを選ぶことができるようになります。

## 追記
<strong>※この部分は[本人](https://twitter.com/newbee1939)が書いています</strong>

ここではChatGPTが執筆した記事を紹介しましたが、私自身も同じテーマでブログ記事を書いています。

https://www.engilaboo.com/engineer-future/

ChatGPTに記事を書かせる前に執筆したものなので、ChatGPTによる回答の影響は受けていません。

こちらも合わせて読んでいただけると幸いです。
GitBuketでrepoを使う

# はじめに

gitbucketはインストールが簡単なGitプラットフォームです。Scalaで開発されており、高い拡張性とGitHub API互換APIを備えています。
インストールは「gitbucket.war」ファイルをダウンロードしてJava実行するだけで動作します。

gitbucketのインストール自体はこのあたりを参考に構築します。

https://qiita.com/tomosono1979/items/15fd034974b99980d123

今回、gitbucket上でrepoコマンドを使ってビルドツリーを構築しようとした時にハマったポイントの
回避方法を紹介します（もっといい方法があるよ！というコメントを頂ければ嬉しいです）。

# 課題内容

gitbucket上のリポジトリを集めるためのマニフェストファイルを書いて```repo init -u http://hostname/manifest``` & ```repo sync```としてみたら

```shell
$ repo init http://mygitbucketserver:8080/git/PUBLIC/manifest.git -m sample.xml
$ repo sync

my_repository:
fatal: Couldn't find remote ref refs/heads/master
my_repository: sleeping 4.0 seconds before retrying
fatal: Couldn't find remote ref refs/heads/master
```
とエラーで失敗します。各リポジトリを個別に```git clone```すると当然成功するので、repoで取得するときだけ発生する問題です。
色々と調べてみるとここらへんの話題が見つかりました。

- [Handling of improper URL since 4.31.0 (missing .git) #2342](https://github.com/gitbucket/gitbucket/issues/2342)
- [Support repository URL format for old Git clients that are not adding .git suffix](https://gitlab.com/gitlab-org/gitlab/-/issues/350338)

どうやら、一部のgitクライアント(repoを含む)ではリポジトリURLの最後に```.git```サフィックスを付けずにgit cloneを実行しようしています。そして、git server側もそれに対応するために```.git```無しのURLでアクセスしてきた場合に```.git```付きURLへリダイレクトする機能があります。(githubは対応)

しかし、gitbucket（というかどうやらgitbucketが採用しているgitの実装jgit）ではリダイレクトをやめてしまったようです。（「ようです」と言うのは、調査の時にissuesで「リダイレクト機能は本来の仕様とは異なる、repoコマンドのバグにあわせる必要はない。」というやり取りを見たのですが、そのリファレンスを失念してしまいました。）

# repoの修正

ということで、repoコマンドの不具合箇所を修正しました。

```diff:manifest_xml.py
   def ToRemoteSpec(self, projectName):
     fetchUrl = self.resolvedFetchUrl.rstrip('/')
-    url = fetchUrl + '/' + projectName
+    url = fetchUrl + '/' + projectName + '.git'
     remoteName = self.name
     if self.remoteAlias:
       remoteName = self.remoteAlias
     return RemoteSpec(remoteName,
```

# ローカルのrepoコマンドの実行

通常、repoコマンドを実行したときrepoモジュールのリポジトリ(https://gerrit.googlesource.com/git-repo)からrepoモジュールをダウンロードしてから実行します。自前のrepoモジュールを使うときには ```repo init``` に引数 ```--repo-url``` でrepoのリポジトリURLを指定します。
```shell
$ repo init --repo-url http://mygitbucketserver:8080/git/PUBLIC/repo.git 
```

repoモジュールをダウンロードする際に署名されているかどうかをチェックします。ローカルリポジトリの署名をしていない場合は ```warning: 'refs/heads/stable' is not signed; falling back to signed release 'v2.22'``` となって、修正したモジュールが使用されません。「[git作業内容への署名](https://git-scm.com/book/ja/v2/Git-のさまざまなツール-作業内容への署名)」に従って署名すればワーニングは消えると思いますが、今回は信頼できるローカルサーバーからのダウンロードだという前提で、```--no-repo-verify```オプションを付与して署名検証を無効にします。

また、ローカルリポジトリでbundleファイルを作成していないので、```--no-clone-bundle```オプションも追加します。

```shell
$ repo init --repo-url http://mygitbucketserver:8080/git/PUBLIC/repo.git \
  -u ttp://mygitbucketserver:8080/git/ATMOBI_PKG/manifest.git \
  -m develop_3.0_2d.xml --no-clone-bundle --no-repo-verify
```

毎回```--repo-url```オプションを付与するとコマンドが長くなるので、環境変数```REPO_URL```を設定しておくとコマンドラインでの指定を省略できます。

```shell
$ export REPO_URL=http://mygitbucketserver:8080/git/PUBLIC/repo.git
$ repo init -u ttp://mygitbucketserver:8080/git/ATMOBI_PKG/manifest.git \
  -m develop_3.0_2d.xml --no-clone-bundle --no-repo-verify
```

# おわりに

gitbuketの issues #2342 が対応されたら不要になると思いますがそれまでの対策になれば幸いです。
他に回避方法ご存知かたがいらっしゃればコメントお願いします。
react-hook-formの値を動的に書き換える

## 発端
Autocompleteで候補を出し、クリックしたらフィールドの値を書き換える処理を行っていたが、Submitすると書き換わる前の値が残っていた。
見た目上は変わっているのでう~んと思ったが、
## 調べる
https://qiita.com/NozomuTsuruta/items/60d15d97eeef71993f06#setvalue

あった。
ガチガチに武装されているライブラリなため、カスタマイズする時は注意する。

##
propsにこのように渡し、
```ts
setValue={{ fn: setValue, name: 'hoge' }}
```
受け取り
```ts:AutoCompleteInputField.tsx
type AutoCompleteInputFieldProps = {
  // ...
  setValue: {
    fn: UseFormSetValue<any>;
    name: string;
    options?: SetValueConfig;
  };
};
```
実行した。
```ts:AutoCompleteInputField.tsx
const handleClickSuggestion = (event: React.MouseEvent<HTMLLIElement>) => {
  const newValue = event.currentTarget.getAttribute('data-value') ?? '';
  setValue.fn(setValue.name, newValue, setValue.options);
  setIsSuggestionsOpen(false);
};
```
propsの型定義をどうすれば厳密に出来るのかがよくわからなかったが、見なかったことにした。
任意の型を扱う書き方に対する理解が無さ過ぎる。。。

以上。
Java_半角スペース区切りでの出力 (paizaランク D 相当)


```Java:C-#05
// 整数nが入力されたとき、n回、半角スペース区切りでpaizaと出力するプログラム
import java.util.*;
public class Main {
    public static void main(String[] args) {
        // 自分の得意な言語で
        // Let's チャレンジ！！
        Scanner sc = new Scanner(System.in);
        int line = sc.nextInt();
        
        for (int i = 0; i < line - 1; i++) {
            System.out.print("paiza");
            System.out.print(" ");
        }
        System.out.print("paiza");
    }
}
```
switch版マイクラの不具合について

## switch版マイクラの不具合
現時点(23/3/15 20:44)

マイクラのバージョンを1.19.70に更新することで、
一部のプレイヤー達がロード画面でロードが
停滞してしまう不具合が報告されています。

<details>
<summary>詳細を表示</summary>

~~~
今日の午後にゲームを更新して以来、開くことができません。

ロード画面では 66% のままです。再インストール、再起動、破損したデータのチェック、メモリ カードからのデータの削除、
スイッチ自体への再ダウンロード、および強制終了を試みました。

ゲームカードを自宅の別のスイッチに入れても、問題なく開くことができました。
しかし私のスイッチでアカウントにログインすると、再び機能しなくなります。

常に66％でロードが停滞します

任天堂に連絡しました。
しかし任天堂はコンソールの問題ではないと判断しました. 

唯一の特徴は、ロードしてからホーム画面に移動すると、
ゲームを再度開くとすぐに 71% と表示されますが、66% に戻ることです。
~~~

</div>
</details>
以上の記事を参考にし、実機で検証したところ
おおよそこの条件を満たしているとバグが発生してしまうと見ています。


*__ダウンロード版(推測)__
*__nintendo Onlineのデータお預かりを使用している(ほぼ確定)__

# 解決方法

__＊解決法1__
>別アカウントでログインする 
>
別アカウントを作成し、データお預かりをオフにすれば
１からではあるがマインクラフトをプレイできる。

__＊解決法2__

>更新パッチファイルの配信を待つ
>

mojang公式から修正データが配信されるまで待つ方法。
過去30日のバグ解決までにかかった時間は約0日~10日となっている。

<details>
<summary>詳しい解決方法</summary>

__アカウントの作成+連携方法__
[gamewith 様 -アカウントの作成、連携-](https://gamewith.jp/switch/article/show/1666)

______

nintendo online family plan を契約している場合は、
__データ預かりを必ずオフにしよう。__

[ミニすけ 様 -データ預かりをオフにする方法-](https://mini4blog.xyz/nintendo-switch-online-outo-backup-verification/)

アカウント作成後、マインクラフトを起動すれば通常通り
プレイ可能になる。

______

もし旧アカウントで __microsoftアカウントをマイクラと連携していれば、__
__データを引き継ぐことができる。__
</div>
</details>

# まとめ

__＊switch版minecraftであること__
__＊データ預かりを使用していること__

以上の条件を満たしているとバグが発生する模様。

解決法は
更新待ちか別アカウントでのログインとなる。

# 出典
[mojang bugs](https://bugs.mojang.com/projects/MCPE/issues/MCPE-168284?filter=allopenissues)
[gamewith 様 -アカウントの作成、連携-](https://gamewith.jp/switch/article/show/1666)
[ミニすけ 様 -データ預かりをオフにする方法-](https://mini4blog.xyz/nintendo-switch-online-outo-backup-verification/)