OmniAICreator/Qiita-1.07M huggingface dataset:
cookieでダウンロード完了応答を検知

## 私がやりたいこと
javaで出力したファイルが、ブラウザの右上で「ダウンロード完了」と表示される時、検知したい。

ネットで調べた結果、主に以下三つでダウンロード完了の検知をしていた。
1. chrome.dounloads.onClicked.addListener
2. fetch・then
3. cookie

### 1. chrome.dounloads.onClicked.addListener
Chromeの拡張機能を使うことになるが、私の環境では使えなかったので却下。
こんな感じだって。
```
chrome.downloads.onChanged.addListener(function (delta) {
  if (delta.state && delta.state.current === 'complete') {
    console.log('ダウンロード完了:', delta);
  }
});
```
### 2. fetch・then
thenでレスポンスを取得した後にファイルがダウンロード完了したかを検知することができるが、
springのform:formタグをそのまま使えなかった。
FormDataというオブジェクトに無理やり入れて送信できるかもしれないが、、面倒なので一応却下。
こんな感じ。
```
async function postData() {
  const response = await fetch('/行きたいURL', {
    method: 'POST',
    body: ここが問題だった。JSONだったら楽だけど、私はカスタムオブジェクトだった。
  });

  //レスポンスが来たら、
  if (response.ok) {
    console.log('検知');
  } else {
    console.error(response.status);
  }
}
```

### 3. cookie
これで検知できた。
クッキーを使って、ダウンロード完了の状態を追跡する。
ダウンロードが完了したら、サーバー側でクッキーを設定する。→クライアント側でクッキーの値を監視する。（setInterval）

#### サーバー側(JAVA response出力の前)
```
Cookie cookie = new Cookie("download_status", "completed");
cookie.setPath("/"); 
response.addCookie(cookie);
```
#### クライアント側(JS)
```
// 監視開始（ダウンロードボタンのonClick()とかで）
const intervalId = window.setInterval(function() {
  let cookie = document.cookie;
  if (cookie.includes("download_status=completed")) {
    console.log("ダウンロード完了");
    document.clearInterval(intervalId);  // 監視を停止
    document.cookie = 'download_status=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';//cookie削除
  }
}, 3000);  // 3秒ごとに監視。
```

#### （　・。。・　）🖐

間違っている内容がありましたら、教えて頂ければ喜びます。
AWS Secrets Manager と Systems Manager Parameter Storeの違い

# テーブルでまとめ
|  |Secrets Manager|Parameter Store|
|:-|:-|:-|
|主な目的|パスワード、APIキー、データベース認証情報などの機密情報を管理し、定期的な自動ローテーションをサポート。主に高度な機密情報管理を目的としています。   |設定データや簡易的な機密情報（設定値）を管理。簡易的な構成情報の保存と取得を目的としており、Secrets Managerほど高度な機能はありません。|
|自動ローテーション|あり。AWS Lambda を利用してパスワードや認証情報の更新プロセスを自動化できます。|なし。ただし、パラメータ値を手動で更新することは可能。|
|コスト|有料。ークレットの数やリクエスト回数、自動ローテーションの実行に応じて料金が発生します。|基本的な機能（標準パラメータ）は無料。ただし、高度な機能（暗号化したSecureStringパラメータなど）には追加料金がかかります。|
|暗号化のサポート|デフォルトでAWS Key Management Service (KMS) を使用。|通常の文字列（String）と暗号化された文字列（SecureString）の2種類をサポート。SecureStringはKMSを利用して暗号化可能。|
|SDK・統合|AWS SDKを使用した機密情報の動的な取得に特化しています。また、自動ローテーションにより外部システムとの統合が容易です。|AWS SDKやAWS CLIを使用して構成データを取得できます。アプリケーションの構成管理に便利。|
|対象サービス|データベース系サービス、APIキー|ほぼすべてのAWSサービス|
|セキュリティ標準|PCI DSS、HIPAA|なし|
|最大長|64KB|標準：4KB、アドバンス：8KB|
|スループット|5000TPS|デフォルト：40TPS、高スループット：3000TPS|
|ユースケース|RDS、Redshift などのデータベース認証情報の管理。サードパーティAPIキーの管理。機密情報の自動ローテーションが必要な場合。|環境設定データ（例: APIエンドポイント、リソース名）の保存。暗号化が必要な小規模な機密情報（例: 環境変数のパスワード）の管理。|
windowsでiverilog その181

# 概要　
windowsでiverilogやってみた。
練習問題やってみた。

# 練習問題
Dフリップフロップで4bitシフトレジスタを書け。

# サンプルコード

```
module dff(input D, clk, output reg Q);
	always@(posedge clk)
		Q = D;
endmodule

module sr8(input wire _in, input wire clk, output wire _out);
	wire q0,
		q1,
		q2,
		q3,
		q4,
		q5,
		q6,
		q7;
	wire clk_;
	assign _out = q7;
	assign clk_ = ~clk;
	dff u0(.D(_in), .clk(clk), .Q(q0));
	dff u1(.D(q0), .clk(clk_), .Q(q1));
	dff u2(.D(q1), .clk(clk), .Q(q2));
	dff u3(.D(q2), .clk(clk_), .Q(q3));
	dff u4(.D(q3), .clk(clk), .Q(q4));
	dff u5(.D(q4), .clk(clk_), .Q(q5));
	dff u6(.D(q5), .clk(clk), .Q(q6));
	dff u7(.D(q6), .clk(clk_), .Q(q7));
endmodule

module test;
	reg i,
		c;
	output o;
	sr8 u(i, c, o);
	initial
	begin
		$dumpfile("test.vcd");
		$dumpvars(0, u);
		$display("i c o");
		$monitor("%b %b %b", i, c, o);
		i = 0;
		c = 0;
		#10;
			i = 1;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			i = 0;
			c = 0;
		#10;
			i = 0;
			c = 1;
		#10;
			$finish;
	end
endmodule

```

# 実行結果

```
>vvp a.out
VCD info: dumpfile test.vcd opened for output.
i c o
0 0 x
1 1 x
0 0 x
0 1 x
0 0 x
0 1 x
0 0 x
0 1 x
0 0 1
0 1 1
0 0 0
0 1 0
0 0 0
0 1 0
0 0 0
0 1 0
0 0 0
0 1 0
0 0 0
0 1 0
dff5.v:102: $finish called at 200 (1s)

```

以上。
fbxを上書きするとｷｭｯってなったりﾓｯってなったりする現象

# 何？
- unityでfbxを上書きすると時折アバター異常の発生することについてBlenderのエクスポートスケールの変更によって再現できるケースと対応を示す

# 結論
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/8dd65ec4-cef3-520a-f7b2-806252ac79da.png)
- fbxを上書きしてｷｭｯってなったりﾓｯってなったりしたらエクスポート設定で「スケールを適用」を「すべてFBX」にしてもう一度試す
- 治ればそれでよし、治らなかったらスケールを次の設定にして再度試す
    - ﾓｯとなる場合、エクスポートするスケールを0.01倍
    - ｷｭｯとなる場合、エクスポートするスケールを100倍

# 再現
1. [フラット](https://booth.pm/ja/items/3562180)を用意する
1. unitypackageを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/ce50e464-c976-b669-9b54-9fac2ac521df.png)
1. シーンに置く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/dd32307b-0865-f232-3a86-1521afffc700.png)
1. show in explorer
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/0229b018-ca77-1eed-e57f-75507b02e83a.png)
1. 同梱されているblendファイルを開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/d15164f7-0c4c-728c-002b-9b0b9349ebfc.png)
1. fbxを次の設定でエクスポート(名前はflatver.1.01.fbx)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/475433f7-ab50-e41e-d0d8-f723868127bf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/deab11c9-c029-6c82-3182-91d1358e757e.png)
1. エクスポートしたものをunity側のほうに上書きする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/fd237b54-3dda-6106-f6cf-9dbc96c32442.png)
1. ﾓｯ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/6263c6c4-0326-5659-71b7-b82e62a280b0.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/d0858661-81c1-8775-66b1-6143d9f754ce.png)
1. スケールを0.0001でエクスポート、unityに上書きする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/149cf8e1-a0ad-29ec-1126-d345416a9e51.png)
1. ｷｭｯ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/dff09f62-c51e-abb8-787d-e8cc7ec2b174.png)
1. 0.01で同様にする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/9f21e881-61a5-bd7f-4c7b-d9b97eed769a.png)
1. 復活！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935918/bb4ff90d-1526-2818-964a-17e1bc37a59c.png)


# どうしてもうまくいかない
- [この方法](https://qiita.com/pandrabox/items/44a0b230b2ae68986c16)でなんとかなるかもしれない
出力responseの勉強（Apache POI）

## WorkbookをHTTPレスポンスとしてダウンロードさせる。

Apache POIを使用してWorkbookオブジェクトを作成したと仮定する。
以下は作成済みのWorkbookオブジェクトをダウンロードするメソッドの例だ。

## メソッドの例
Apache POIで主に使用するWorkbookオブジェクトはHSSFWorkbook、XSSFWorkbookは2種類ある。
HSSFWorkbookはExcel 97~2003(.xls)を処理する為のクラスで、古い。
XSSFWorkbookはExcel 2007以上(.xlsx) を処理する為のクラス。

HSSFWorkbookはサポートする機能も少ないし、スタイルもその数が制限されている。
色々不便だが、ここではHSSFWorkbookを例とする。

```
protected void exportXsl(HSSFWorkbook wb, String fileName, HttpServletResponse response) {
    // HTTPレスポンスヘッダーを設定する。
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);

    // ワークブックオブジェクトをレスポンスに書き込む。outとresponseOutputStreamはtry with resourceで対応する。
    try (ByteArrayOutputStream out = new ByteArrayOutputStream();
         OutputStream responseOutputStream = response.getOutputStream()) {
        wb.write(out);
        responseOutputStream.write(out.toByteArray());
        responseOutputStream.flush();  // Flush the response output stream
    } catch (IOException e) {
        // 例外処理
    } finally {
        try {
            wb.close();
        } catch (IOException e) {
            // 例外処理
        }
    }
}
```
このメソッドがvoidになっている理由はreturn "" や他の戻り値を返すコードを exportXsl メソッドに追加すると、2回レスポンスを送信しようとしてエラーが発生する可能性があるため。
exportXsl メソッド内で response.getOutputStream() を使って、ファイルをクライアントに送信している。この時点でレスポンスが確定し、ファイルが送られるのだ。


#### パラメーター説明
①HSSFWorkbook wb：作成済みのWorkbook (仮定: HSSFWorkbook)
②String fileName：ファイル名
③HttpServletResponse response：クライアントからダウンロードリクエストが来たら、それに対してHTTPレスポンスを送信するため

#### try with resource?
外部リソースを使った後に自動的にリソース閉じる仕組みのこと。
try()の括弧の中にリソースを宣言する方法。
```
try (ResourceType resource = new ResourceType()) {
    // リソースを使った処理
} catch (ExceptionType e) {
    // 例外処理
}
```

#### try with resourceをしないと?
リソースを手動で閉じる必要がある。
```
BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader("file.txt"));
    ...
} catch (IOException e) {
    // 例外処理
} finally {
    if (br != null) {
        try {
            br.close();  // 明示的にリソースを閉じる
        } catch (IOException e) {
            // 閉じる際の例外処理
        }
    }
}
```

#### 閉じるって？
プログラムが使ったリソース（ファイル、ネットワーク接続、データベース接続など）を使い終わった後に解放する必要がある。無駄にメモリやシステム資源を消費することを防ぐ。
例ではoutとresponseOutputStreamはtry with resourceで対応していて、パラメーターのwbはfinallyブロックを使い、リソースのclose()メソッドを明示的に呼び出してリソースを解放している。


#### closeとflushの違いは？
flushとは、バッファに溜まっているデータを強制的に出力先に送る操作。バッファとは、データを一時的に保持するメモリ領域。なんで使うかというとI/O操作の効率を上げるため。小さなデータを一度に一つずつ書き込むのではなく、一定量のデータをバッファに溜めてから一度に書き出す。
通常、閉じる際に自動的にflushが行われる。なので、flushが必要な場面はリアルタイムにデータを反映させたい場合やすべてのデータを確実に送信したい場合。

#### 結論：コードの理解
```
wb.write(out);
responseOutputStream.write(out.toByteArray());
responseOutputStream.flush();
```
1. wb.write(out): HSSFWorkbookの内容をByteArrayOutputStream（out）に書き込んで,outはメモリ内のバッファにデータを保持します。
2. responseOutputStream.write(out.toByteArray()): outに溜まったデータをHttpServletResponseの出力ストリーム（responseOutputStream）に書き込んでいる。
3. responseOutputStream.flush(): responseOutputStreamに溜まったバッファのデータをクライアントに強制的に送っている。


#### （　・。。・　）🖐

間違っている内容がありましたら、教えて頂ければ喜びます。
laravelのディレクトリ構造

ディレクトリ構造がいまいちよくわからないまま
すでに書かれているファイルを参考に
見よう見まねで書いているので
どこに何が配置されるのか
ちゃんとわかりたくてまとめてみました。

# 環境
macOS Sonoma v14.5
docker desktop for mac v4.37.2

# 新規作成する
laravel 11.xのプロジェクトをlaravel sailを利用して作成しました
アップグレードによりかなり構成ファイルが減ったらしいです

> Laravel 11 introduces a new default application structure with fewer default files. Namely, new Laravel applications contain fewer service providers, middleware, and configuration files.
https://laravel.com/docs/11.x/upgrade#application-structure

https://laravel.com/docs/11.x/installation#sail-on-macos

# 作成直後のlaravelディレクトリ構成
ルートディレクトリ = プロジェクトはcomposer.jsonがあるフォルダを指します

:::note info
*(アスタリスク)がついているphpファイルは以下のコマンドで作成できます
```sh
sail artisan make:<すべて小文字に変換したフォルダ名の単数形> <任意のファイル名(拡張子不要)>
# 例: sail artisan make:model dummy
```
:::

```
. ・・ルートディレクトリ
app ・・リクエスト時の処理
 ├── Http
 │     └── Controllers
 │            └── *.php
 ├── Models
 │     └── *.php
 └── Providers
       └── *.php
bootstrap ・・プロジェクト全体の設定
 ├── cache(自動作成される ※.envにあるAPP_ENVを変更する際は削除したほうがいいこともある)
 ├── app.php
 └── providers.php
config ・・定数、設定ファイル
 ├── app.php
 ├── auth.php
 ├── cache.php
 ├── database.php
 ├── filesystems.php
 ├── logging.php
 ├── mail.php
 ├── queue.php
 ├── services.php
 └── session.php
database ・・DBテーブル定義、データ登録など
 ├── factories
 │    └── *.php
 ├── migrations
 │    └── *.php
 ├── seeders
 │    └── *.php
 ├── database.sqlite(sailではデフォルトがsqliteのためファイルが作成される、ほかの接続先に変更する場合不要になる)
 └── .gitignore
public ・・初回アクセス時に処理される(ほとんど変更することはない)
 ├── .htaccess
 ├── favicon.ico
 ├── index.php
 └── robots.txt
resources ・・webページに出力する
 ├── css
 │    └── *.css
 ├── js
 │    └── *.js
 └── views
      └── *.blade.php
routes ・・ルーティング
 ├── console.php
 └── web.php
storage ・・ファイル保存先(デフォルト)
 ├── app(処理で作成したファイルなど)
 │    └── *
 ├── framework(laravel側の処理により自動作成されたもの、およびテストで作成したダミーデータの格納先)
 │    └── *
 └── logs
      └── laravel.log
tests ・・テストコード
 ├──Feature
 │    └── *.php
 ├──Unit
 │    └── *.php
 │          (コマンドで作成する際はオプション`--unit`が必要 `sail artisan make:test --unit <任意のファイル名(拡張子不要)>`)
 └──TestCase.php
vendor ・・バッケージフォルダ(ほとんど編集することはない)
.editorconfig
.env
.env.example
.gitattributes
.gitignore
artisan
composer.json
composer.lock
docker-compose.yml
package.json
phpunit.xml
postcss.config.js
README.md
tailwind.config.js
vite.config.js
```

# 補足

ファイル作成コマンドを使えばディレクトリ誤りによるエラーは発生しづらくなります。

```sh
# すべての利用可能なコマンド一覧を出力する
sail artisan list
```
axios interceptors

## axios interceptorsを使う
axiosでAPIを呼び出すときにaxios interceptorsを使用するようにしました。

axios interceptorsを使うと、呼び出しの時にトークンのチェックができたり、共通化ができることで後の修正がしやすいと感じました。

```Utils.js
import axios from 'axios'
import Constants from './Constants'
import { checkTokenExpiration } from './Cognito'
import store from '@/store'

const axiosInstance = axios.create({
    baseURL: Constants.BASE_URL,
    timeout: Constants.TIMEOUT_NORMAL,
})

axiosInstance.interceptors.request.use(
    async (config) => {
        const exp = store.state.auth.idToken.payload.exp
        const now = Date.now() / 1000

        // トークンの有効期限が5分以内に切れる場合にリフレッシュ
        if (exp && exp - Constants.TOKEN_REFRESH_TIME <= now) {
            await checkTokenExpiration()
        }

        // リフレッシュ後のトークンを使用してヘッダーを設定
        if (store.state.auth.idToken.jwtToken) {
            config.headers.authorization = store.state.auth.idToken.jwtToken
        }

        return config
    },
    (error) => Promise.reject(error),
)

axios.interceptors.response.use(
    (response) => response,
    async function (error) {
        return Promise.reject(error)
    },
)

export default {
    axiosInstance,
}
```

呼び出し側
```call.js
const response = await Utils.axiosInstance.get(`/api/?path=${path}`, {
    headers: { 'Content-Type': 'application/json' },
})
console.log("response", response)
```
Laravel bladeテンプレートの基本操作

Laravel bladeテンプレート内での、if文などの使用方法の基本をまとめます。
デザイナーの方への連携用です

[日本語訳ドキュメント](https://readouble.com/laravel/10.x/ja/blade.html)

# 目次
- [環境](#環境)
- [変数の表示](#変数の表示)
- [if文](#if文)
- [for文](#for文)
- [foreach文](#foreach文)
- - [$loop変数(ループ変数)](#loop変数ループ変数)
- [blade内にPHPコードの埋め込み](#blade内にphpコードの埋め込み)
- [コメント](#コメント)
- [CSRFリクエストの防止](#csrfリクエストの防止)
- [configヘルパー関数](#configヘルパー関数)

# 環境
PHP 8.2.4
Laravel Framework 10.48.12

# 変数の表示

Bladeでは、変数を表示するために二重中括弧 ```{{ $変数名 }}``` を使用します。
この形式は、XSS（クロスサイトスクリプティング）を防ぐためにエスケープされた出力を生成します。
```sample.blade.php
<p>こんにちは, {{ $name }}</p>
```
value属性などに変数を設定する場合も同様に行えます。
```sample.blade.php
<input type="text" name="user_name" value="{{ $name }}">
```

エスケープしないデータの表示（HTMLタグをそのまま表示したい場合）は、```{{!! $変数名 !!}}```のように記述します。この方法を使用する際はXSS対策を十分に考慮する必要があります。
```sample.blade.php
<p>こんにちは, {{!! $name !!}}</p>
```

# if文
```@if、@elseif、@else、@endif``` ディレクティブを使用してif文を作成できます。

```sample.blade.php

@if(!is_null( $name ))
    <p>こんにちは、{{ $name }}</p>
@else
    <p>nameがnullです<p>
@endif

```

# for文
```@for、@endfor``` ディレクティブを使用して、指定回数の繰り返し処理を行えます。

```sample.blade.php
@for ($i = 0; $i < 10; $i++)
    <p>現在は {{ $i }}回目の繰り返し処理です</p>
@endfor
```

# foreach文
配列やコレクションの要素を繰り返し処理する場合は、```@foreach、@endforeach``` ディレクティブを使用します。

```sample.blade.php
<tbody>
    @foreach ($car_list as $car)
        <tr>
            <td>{{ $car["model"] }}</td>
            <td>{{ $car["price"] }}円</td>
            <td>{{ $car["mileage"] }}km</td>
        </tr>
    @endforeach
</tbody>
```

### $loop変数(ループ変数)
>```foreach```ループの反復処理中、ループの内部では```$loop```変数を利用できます。この変数により、現在のループのインデックスや、ループの最初の反復なのか最後の反復なのか、といった便利な情報にアクセスすることができます。

現在のループのインデックスを**0から始まる整数値**として返します。
```sample.blade.php
@foreach ($car_list as $car)
 <p>{{ $loop->index }}</p>
@endforeach
```
**■ $loop変数プロパティ**
<table> 
  <thead>
    <tr>
      <th>プロパティ　　</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> $loop->index </td> <td>現在の反復のインデックス（初期値０）</td>
  </tr>
  <tr>
    <td> $loop->count </td> <td>反復している配列の総アイテム数</td>
  </tr>
   <tr>
    <td> $loop->first　</td> <td>ループの最初の繰り返しか判定</td>
  </tr>
  <tr>
    <td> $loop->last </td> <td>Excelループの最後の繰り返しか判定</td>
  </tr>
</table>

上記のプロパティなど便利なプロパティが他にもあります。

# blade内にPHPコードの埋め込み
```@php```ディレクティブを使用してblade内にプレーンなPHPブロックを記述できます。

```sample.blade.php
@php
    $name = "Bob";
@endphp

<p>こんにちは、{{ $name }}</p>
```


# コメント
ビューにコメントを定義することも可能です。ただしHTMLのコメントとは異なり、Bladeのコメントは、HTMLには含まれません。

```sample.blade.php

{{--　このコメントはHTMLの中には含まれません　--}}

 <!-- 通常のHTMLのコメントです -->

```
# CSRFリクエストの防止
```@csrf```は、Laravelフレームワークにおいて、CSRF（クロスサイトリクエストフォージェリ）攻撃から保護するための方法です。これはフォーム内に自動的にCSRFトークンを生成し、隠しフィールドとして埋め込みます.

```sample.blade.php
<form  method="POST">
@csrf
    
</form>
```
https://readouble.com/laravel/10.x/ja/csrf.html

# config()ヘルパー関数
config()ヘルパー関数を使用すると、アプリケーションのどこからでも```configディレクトリ```に作成した設定値を呼び出すことが可能です。

configディレクトリに設定用ファイルを作成します。
```config_sample.php
<?php
return [
    "config_str" => "設定ファイルで設定した文字列",
];
```
```sample.blade.php
<p>設置値の呼び出し<p>
<p>設定値：{{config("config_sample.config_str")}}<p>
```

https://readouble.com/laravel/10.x/ja/helpers.html#method-config

https://readouble.com/laravel/10.x/ja/blade.html
Unity WebGLでカスタムテンプレートを使う方法

# カスタマイズする用のファイルを出力する
最初にWebGLのビルドを行い、カスタマイズする用のファイルを出力します。
- WebGLにプラットフォームを切り替え
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/9dd56783-8e57-372b-22f8-413879a4ee80.png)
- 切り替え後、任意のフォルダにビルドします

# カスタムテンプレート用のフォルダを作成
- Assets配下に、WebGLTemplatesフォルダを作成
- WebGLTemplates配下に、任意のフォルダを作成します
- 作成したフォルダに、[カスタマイズする用のファイルを出力する](#カスタマイズする用のファイルを出力する)で出力したindex.htmlとTemplateDataをコピーします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/04a34e88-5072-0578-7b2d-f7621ce833e2.png)

# index.htmlの編集
index.htmlを下記のように書き換えます。
```diff_javascript
      var buildUrl = "Build";
-     var loaderUrl = buildUrl + "/新しいフォルダー.loader.js";
+     var loaderUrl = buildUrl + "/{{{ LOADER_FILENAME }}}";
      var config = {
-       dataUrl: buildUrl + "/新しいフォルダー.data.br",
-       frameworkUrl: buildUrl + "/新しいフォルダー.framework.js.br",
-       codeUrl: buildUrl + "/新しいフォルダー.wasm.br",
+       dataUrl: buildUrl + "/{{{ DATA_FILENAME }}}",
+       frameworkUrl: buildUrl + "/{{{ FRAMEWORK_FILENAME }}}",
+       codeUrl: buildUrl + "/{{{ CODE_FILENAME }}}",
        streamingAssetsUrl: "StreamingAssets",
        companyName: "DefaultCompany",
        productName: "SampleWebGL",
        productVersion: "1.0",
        showBanner: unityShowBanner,
      };
```

:::note info
新しいフォルダーの部分は、出力したフォルダ名となっていると思います。
そのままにしておくと、出力先のフォルダを変えた場合、エラーとなるので、出力先を変えても問題ないように内部プリプロセッサ変数という変数にしています。
https://docs.unity3d.com/ja/2022.3/Manual/webgl-templates.html
:::

# 起動テストをする
一度、起動が問題ないかテストをします。
- File - Build Settings - Player Settingsを開きます
- WebGLのタブを選択します
- Resolution and Presentation - WebGL Templateで、[カスタムテンプレート用のフォルダを作成](#カスタムテンプレート用のフォルダを作成)で作成したフォルダ名のテンプレートを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/950b02f0-4265-63b7-0214-407a05561e83.png)

- File - Build Settings - Build And Runで、最初のビルドと別のフォルダを選択し、表示できるか確認してください

# カスタマイズする
起動が問題なければ、index.htmlを編集したり、任意のJavascriptを読み込ませて、利用したり、カスタマイズが可能です。

# ローカルサーバーを起動する
Unityから実行する場合は問題ないですが、ビルドで出力したhtmlを表示するときはサーバーを立てないとエラーになります。
（Unityから実行するときは、Unityが自動でサーバーを起動してくれています）
ビルドで出力したhtmlを表示するときは、DockerでApacheなどのサーバーを立てて確認するのが便利ですが、一つ注意点があります。
それは、圧縮したファイルがサーバー側で読み込めるかという点です。
Project Settings > Player > Publishing Settings > CompressionFormatを確認してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/d17f9956-67d3-2dde-40c5-b8175b093652.png)
デフォルトだとBrotliが設定されていると思いますが、個々の設定に応じて、Buildフォルダに出力されるファイルが圧縮されます。
(ビルドの出力先に選択したフォルダのBuildフォルダを確認してください）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/4aad5bff-64af-4d0f-1783-059dca7382f5.png)
Apacheの場合は圧縮したファイルを読み込めるように設定が必要みたいなので、設定をするか、Project Settings > Player > Publishing Settings > CompressionFormatをDisableに変更し、圧縮せずに出力する必要があります。
AWSアップデート内容　2024年12月~2025年1月

## 概要
AWSのアップデート内容について記載します。

## AWSリソースエクスプローラーは59種類の新しいリソースタイプをサポートします
12月13日更新
AWS ResourceExplorerはAmazon EKS、AmazonKendra、IAM AccessAnalyzer、Amazon SageMakerなどのサービスから、すべてのAWS商用リージョンで59以上のリソースタイプをサポートするようになりました。

このリリースにより、お客様は AWS Resource Explorer で次のリソースタイプを検索できるようになりました。
[参考リンク](https://aws.amazon.com/about-aws/whats-new/2024/12/aws-resource-explorer-new-resource-types/)

リソースの集中検索:
・複数のAWSリージョンにまたがるリソース
　(EC2、タグ、リソース名、ID等　を使って検索可能)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3882356/548300a9-f424-6fc4-854d-8d8c43727191.png)

## Amazon EBSがAWS専用ローカルゾーン向けのローカルスナップショットを開始
12月16日更新
Amazon EBS ローカルスナップショットを AWS 専用ローカルゾーンで使用できるようになりました。専用ローカルゾーンは、AWS によって完全に管理され、お客様またはお客様のコミュニティ専用に構築され、規制要件に準拠できるようにお客様が指定した場所またはデータセンターに配置されるタイプの AWS インフラストラクチャです。

## AWS Backupが検索とアイテムレベルのリカバリのサポートを開始
12月18日更新
本日、AWS Backup は、Amazon EBS スナップショットと Amazon S3 バックアップの検索とアイテムレベルのリカバリのサポートを発表しました。この機能を使用すると、バックアップのメタデータを検索して、バックアップ全体で特定のファイルまたはオブジェクトを見つけ、一度に最大 5 つのアイテムをリカバリできるため、リカバリ時間を短縮できます。
[参考資料](https://aws.amazon.com/about-aws/whats-new/2024/12/aws-backup-search-item-level-recovery/)

## AWS WAFコンソールに新しいトップインサイトの視覚化が追加されました
1月3日更新
AWS WAF のコンソールダッシュボードには、トラフィックのトップソースに関する洞察を与える、よりリッチなビジュアライゼーションが含まれるようになりました。
この機能により、CloudWatchのロギング先を持つ顧客は、すべてのトラフィックダッシュボード内の新しいトップインサイトセクションを見ることができます。

これらのトップ・インサイトにより、顧客は自社のセキュリティ体制をよりよく理解し、異常を迅速に特定し、それに応じてWAF設定を最適化できるようになる。例えば、不審なIPアドレスからのトラフィックが予想以上に多い場合、この異常に対処するためのIPブロック・ルールを作成するための措置を講じることができる。
[参考資料](https://aws.amazon.com/about-aws/whats-new/2025/01/aws-waf-console-top-insights-visualizations/)
fetchでHttpOnly属性のCookieを渡す方法

# 概要
HttpOnly属性のCookieを渡すコードについて、探しても意外と見つからなかったのでメモを残します。

# コード
下記のようにheaderに明示的にCookieを渡すようにして、 `credentials: 'include'`を指定することでAPI側にHttpOnly属性のCookieを渡せます。
``` .ts
    const response = await fetch(${apiUrl}/api/get/me, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
         Cookie: cookieHeader, 
      },
      credentials: 'include', 
    });

```

# 余談
調べると `credentials: 'include'`だけ設定すれば自動でHttpOnly属性のCookieを渡せるなどのサイトもありましたが、私の環境ではできませんでした。
下記の環境で動作確認しています。
https://github.com/dbd-fish/react_sample
Vuexでstoreをモジュール分けする

## Vuexのstoreにモジュール分けする
参考:https://qiita.com/youstr/items/a3a484b6669e67928e42
モジュール分けする前は以下の様にしてidTokenを保存していました。

```store/index.js
import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'

export default createStore({
    state: {
        idToken: null,
    },
    mutations: {
        SET_IDTOKEN(state, idToken) {
            state.idToken = idToken
        },
        LOGOUT(state) {
            state.idToken = null
        },
    },
    plugins: [
        createPersistedState({
            key: 'key',
            paths: ['idToken'],
            storage: window.sessionStorage,
        }),
    ],
})
```

現状だとidTokenしか保存していませんが、今後保存する値が増えると、たくさん書かなければならなくなるのでモジュール分けしたいと思います。

store/index.jsではauthモジュールを呼び出すだけにします。
```store/index.js
import { createStore } from 'vuex'
import createPersistedState from 'vuex-persistedstate'

// モジュールをインポート
import auth from './modules/auth'

export default createStore({
    modules: {
        auth,
    },
    plugins: [
        createPersistedState({
            key: 'key',
            paths: ['auth'],
            storage: window.localStorage,
        }),
    ],
})

```

store/modules/auth.jsでは認証情報の処理を書きます。
```store/modules/auth.js
const state = {
    idToken: null,
    accessToken: null,
    refreshToken: null,
}

const mutations = {
    SET_TOKENS(state, tokens) {
        state.idToken = tokens.idToken
        state.accessToken = tokens.accessToken
        state.refreshToken = tokens.refreshToken
    },
    LOGOUT(state) {
        console.log('state', state)
        state.idToken = null
        state.accessToken = null
        state.refreshToken = null
    },
}

const actions = {
    setTokens({ commit }, tokens) {
        commit('SET_TOKENS', tokens)
    },
    logout({ commit }) {
        commit('LOGOUT')
    },
}

export default {
    namespaced: true,
    state,
    mutations,
    actions,
}
```

storeに保存した変数は`store.state.auth.idToken`の様にして呼び出せます。
変更前は`store.state.idToken`でしたが、モジュール分けすることでモジュール名を`store.state.{モジュール名}`にする必要があります。
文系未経験者の独学日記　＃５

久しぶりの投稿です。
少し忙しくて書くことが出来ませんでした。
最近は、継続してPaizaの問題を解きながら、Webを支える技術を読んでみました。
想像よりとても難しくて何周か読まないと理解できません。現在の理解度は３割程度なきがします。特にハイパーメディアの部分が難しかったです。
自分はフロントエンドの知識が乏しいので、そこでのイメージが湧きにくくて内容が入ってこなかった気がします。
ですが、Ｗｅｂの構造のイメージが少しできた気がします。この状態でSpringの学習に入りたいと思います。目標は２月いっぱいでなにか動く成果物を作ってみることです。４ぬ気で頑張ります。
【AWS SAP】NATゲートウェイの障害発生時の対応まとめ

# NATゲートウェイの障害発生時の対応まとめ

## 主なトラブルと解決法

### 1. NATゲートウェイが作れないとき
- **原因**  
  - サブネットのIPアドレスが足りない
  - インターネットゲートウェイがアタッチされていない
- **解決策**  
  - サブネットのIPアドレス状況を確認して、空きを確保する 
  - インターネットゲートウェイを設定し直す

---
### 2. インスタンスがネットにつながらないとき
- **原因**  
  - ルートテーブルの設定ミス
  - セキュリティグループやネットワークACLがトラフィックをブロックしている
- **解決策**  
  - ルートテーブルを確認して正しい設定にする。  
  - セキュリティグループとネットワークACLを見直して、必要な通信を許可する

---

### 3. ネットが途中で切れるとき
- **原因**  
  - NATゲートウェイは350秒以上アイドルだとタイムアウトする仕様

- **解決策**  
  - キープアライブ設定を有効にする
  - 定期的に通信を発生させるスクリプトを組む

---

### 4. クォータ（上限）超えたとき
- **原因**  
  - NATゲートウェイやElastic IPの数が上限に達している

- **解決策**  
  - 別のアベイラビリティゾーンにNATゲートウェイを作成する。  
  - AWSにクォータ増加リクエストを出す

### 参考リンク

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/nat-gateway-troubleshooting.html


## Amazon CloudWatch を使った NAT ゲートウェイのモニタリング
CloudWatchでNAT Gatewayを監視しよう。

## 監視できるデータ
- 処理済みバイト数（どれだけデータを転送したか）  
- パケット数（送受信の回数）  
- 接続数（同時にどれだけ繋がってるか）  
- エラー率（失敗がどのくらい発生してるか）

## どのように使えるか
- **リアルタイムで状況をチェック**  
  データは1分ごとに更新されるので最新の状態がすぐにわかる  

- **長期間のデータ分析**  
  データは15ヶ月間保存されるので利用状況の傾向を把握できる  

- **カスタムアラートが作れる**  
  例えば データの転送量が一定以上になったらアラートを出す設定ができる  
  問題が起きる前に対応できるのが便利  

## 具体的に何ができる？
- トラフィックが多すぎる場所や問題箇所を見つける  
- 長期的な利用傾向を見てリソースの計画を立てる  
- アラートで異常をすぐにキャッチして対策を考える  

## 参考
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-nat-gateway-cloudwatch.html
【入門者・初心者向け】教師なし学習(Unsupervised Learning)の基本事項とDeepLearningにおけるその活用

## 教師なし学習の基本
### 教師なし学習の概要
教師なし学習(Unsupervised Learning)は「人がアノテーションを用意しないで行う学習」を表す用語です。入門書などではk-means法のようなクラスタリング(clustering)のようなアルゴリズムを例に教師なし学習について解説されることが多い一方で、「教師あり学習と教師なし学習のアルゴリズムがある」というよりは「アノテーションを用意して行う学習を教師あり学習、アノテーションを用意しないで行う学習を教師なし学習という」のが本来的には正しいです。

上記はDeepLearningにおける「教師あり学習」と「教師なし学習」を理解する上で特に重要です。DeepLearning(大規模なニューラルネットワークの学習)は大量のパラメータを持つ巨大な関数の学習であり、学習にあたっては必ず「入力」と「入力に対応する出力」を用意する必要があります。必ず「出力」を用意する必要があることから「教師あり学習」であるとつい見えがちですが、「アノテーションを行わずに出力を用意すること」もできるので、必ずしも「教師あり学習」にはならないことに注意が必要です。


### 教師なし学習の例
「教師なし学習」の例で良く挙げられるのがクラスタリングです。たとえばk-means法や階層型クラスタリングなどが入門書でよく取り扱われます。

一方で、近年多くの分野で応用されているDeepLearningでも「アノテーションを行わずに出力を用意すること」が可能であることから「教師なし学習」に対応するアルゴリズムが存在します。たとえばオートエンコーダ(AutoEncoder)やGAN(Generative Adversarial Network)、拡散モデル(Diffusion Model)のような生成モデル(Generative Model)の学習にあたっては、単に画像だけ用意すれば良いのでこれらは基本的に「教師なし学習」です。他にも近年話題のLLM(Large Language Model)の事前学習(pretraining)は、「文脈から単語を予測するタスク」は文章を与えれば済むことからこれも「教師なし学習」に該当します。

「教師なし学習」は「アノテーションを行わずに行う学習である」と理解しておけば上記の例が「教師なし学習」であることが理解できると思います。



## DeepLearningにおける教師なし学習の活用
### 特徴量抽出器
教師なし学習の活用にあたって、よく用いられるのが特徴量抽出(Feature Extraction)です。画像の場合、ImageNetなどを用いて学習させたVGGNetやResNetを用いて特徴量抽出やfinetuningを行うことが多い一方で、オートエンコーダを用いて学習させたものを元に特徴量の抽出を行うことも可能です。

上記の使い分けにあたっては、「CIFARやImageNetのような例で学習させたものをそのまま活用できる場合やfinetuningを行える場合はResNetなどを用いる」、「そのまま活用できないかつアノテーションを用意できない場合はオートエンコーダなどを用いる」というのが一つの指針になると思います。

オートエンコーダを用いて特徴量抽出を行う場合は、エンコーダの出力が特徴量(潜在ベクトル)に対応するのでエンコーダの出力を用いるというのがシンプルで良いと思います。


### 事前学習(pretraining)
Transformer(Attention is All You Need)が発表されて以降、NLP(Naural Language Processing)の分野は大きな変革が起きました。直近ではChatGPTに代表されるLLM(Large Language Model)が大きく注目を集めています。

このLLMの学習にあたってはWikipediaなどの大量の文章を用いた事前学習(pretraining)が行われており、この事前学習はアノテーションを用意しないことから教師なし学習です。

NLPに限らず画像の学習にあたってもオートエンコーダなどで教師なし学習を行った結果を元にfinetuningすることで事前学習を行うことが可能です。画像処理ではCIFARやImageNet、COCOのように汎用的なアノテーションの付与されたデータセットが多い一方で、ImageNetなどの画像と類似しない画像の推論を行う場合などは教師なし学習を行うのも検討すると良いと思います。


### 生成モデル
GAN(Generative Adversarial Network)や拡散モデル(Diffusion Model)などの生成モデルは基本的に教師なし学習をベースとします。「Discriminatorの入力がGeneratorの出力か実際のデータかをあてる」というタスクを元に学習させることで、単に画像を用意させるだけでGANの学習が可能です。

実際に画像の生成を行うにあたっては訓練させたGeneratorに学習の時と同様に潜在ベクトル($\mathbf{z}$)を入力に与えれば良いです。
LPICとLinuCどっちにするか

## LinuCに挑戦
結論として、LinuCに挑戦することにしました。理由は以下の通りです。

### ポジティブな理由
- 日本市場での評価の高さ
LinuCは日本市場に最適化された資格であり、国内で評価されやすいです。現在の目標は日本を拠点にエンジニアとして活躍することであり、直近で海外進出や外国籍エンジニアとの協働予定もないため、現状に適していると感じました。

- 試験内容の実用性
LinuCは2020年に改訂され、日本のIT環境に即した試験内容になっています。特にクラウドエンジニアとして必要なコンテナやクラウドセキュリティといった基礎的な知識を学べる点が魅力です。

- 現場で役立つ知識の習得
LinuCは、日本国内のIT技術やニーズに対応しており、実用的なスキルを効率的に学べる資格だと感じました。

### ネガティブな理由（LPICに対する懸念点）
- 試験問題の日本語訳の質
LPICは国際資格であり、試験問題の日本語訳に誤訳や不自然な表現が見られる点が気になります。過去にCCNA試験でも、翻訳問題に苦しめられた経験があるため、これを避けたいと考えました。

これらの理由から、LinuXやサーバーに関する勉強の第一歩として、LinuCを選択することに決めました。

参考文献
https://unison-career.com/engineer-media/6337/#2LPICLinuC
https://www.publickey1.jp/blog/20/linuxlinuc.html
https://envader.plus/article/163
https://uzuz-college.jp/magazine/29682/
EasyEDA Pro Online 版を使う その3 デバイスライブラリを作成する


:::note
2024/10/16 追記
EasyEDA 記事の記事一覧を作りました。併せてご覧ください。

#「EasyEDA Pro を使ってみよう！ 記事 index」

https://qiita.com/nanbuwks/items/1832e7dd815be5675a52
:::


「EasyEDA Pro Online 版を使う その2 パーツを選ぶ」
https://qiita.com/nanbuwks/items/903c52cf4a56160e2930

では既存のパーツを選びましたが、自分でパーツのシンボル情報を作りそれを利用する方法を説明します。

# シンボルを作る

Start Page から、「New Component」を選びます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/1149f5d0-2184-dda1-618f-355cbfcac7a0.png)

適当に入力
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5b0e8d79-8fcc-11bc-9858-efe61afa1906.png)

このくらいのサイズで作成したものは、

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/edda3de4-08f3-3941-ba96-68ffe4cc9652.png)

このくらいの大きさとなります。
注意点として、グリッド 0.1 に合わせてピンを置かないと Schematics で配線ができなくなってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e3214434-06fa-75b3-2e24-24f705b4bdc4.png)

作成したシンボルは「 Personal 」で呼び出せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/742733c3-7886-48bd-8708-e934486c8ff6.png)


# フットプリントを割り当てる

Device にフットプリントを割り当てます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/5ad793c3-f0e6-4dff-2ebc-a635db92c76a.png)

検索して、良さそうなものを割り当てます。パーツになくてもフットプリントは利用できるものが多そうです。
検索は "〜"でくくるとフレーズ検索ができます。
Laravelのリレーションで、複数idのアタッチの際にリレーション先テーブルの追加カラムの値をidごとに指定する方法

例えば、usersとticketsがあって、user_ticketsとういうテーブルがあったとしましょう。
以下のように、固有のチケットに対して複数のIDを付与したい場合

```php
$users = User::factory(10)->create();
Ticket::factory()->create()->attach($users->pluck('id'));
```

こういった形になると思います。
attachの第2引数はattributesを指定できるので、

```php
$users = User::factory(10)->create();
Ticket::factory()->create()->attach($users->pluck('id'), ['foo' => 'bar']);
```

といったように、`user_tickets`の別カラム(foo)に対して一律で`bar`を設定することができます。

ただ、10件のユーザーがあったとして、それぞれで番号を切り替えたいといった要求の場合、この第2引数では解決できません。

こういった際、どうしたら良いかというと第1引数を`key=>value`な形式にして差し込むことで値を入れることが可能です。

```php
$users = [
    1 => ['foo' => 'bar'],
    2 => ['foo' => 'baz'],
    3 => ['foo' => 'aaa'],
];
Ticket::factory()->create()->attach($users);
```

ModelFactoryのように、テストの用途でこういうことをしたい場合、以下のような感じにできます。
もちろん、UserTicketFactoryのようなものを用意する方法でも良さそうです。

例としては、番号をインクリメントさせてくことで、番号が一意であるようにするパターンです。

```php
$sequence = 1;
$users = User::factory(10)->create()->pluck('id')->flip()->map(function() use (&$sequence)) {
    return ['index' => $sequence++];
}
Ticket::factory()->create()->attach($users);
```

チェーンが長くなってしまってますが、pluckでidのリストを抽出し、flipを利用してidをkeyに変換。mapで対象に値をセットしています。
(実際このパターンだと、mapメソッドの引数にvalue(元々keyだったものをひっくり返した数値)があるはずなので、それを利用するだけでも良さそうです)

おわり。
初めて参画するプロジェクトPM(PMO) 詳細設計の工程

初めて参画するプロジェクトPM(PMO) 詳細設計の工程

こんにちは、小磯と申します。
プロジェクトの中にいくつかの工程があります。
その中にある詳細設計について纏めようと思います。
初めて業務を行うPM(PMO)の方へ参考になればと思います。

### システム開発の上流工程プロセス

システムに各種機能を実装するための専門的な内容を決定する非常に重要な工程です。
詳細設計の内容次第でシステムの品質からバグ・エラーの発生まで左右します。

### 1.詳細設計
詳細設計とは、実際にシステムの実装を行うプログラマやエンジニアを対象としたシステムの内部構造等の内容を設計することです。
システムの内部を設計することから内部設計とも呼ばれています。

### 2.設計内容
詳細設計書には、以下のような項目を設計します。
プロジェクトによって項目の増減があります。
　①画面遷移図
　②クラス図
　③シーケンス図
　④状態遷移図
　⑤データベース物理設計書
　⑥入手力設計書
　⑦バッチ処理詳細定義


### 3.基本設計と詳細設計の違い
基本設計と詳細設計はどちらも要件定義を基に行われる設計であることは共通していますが、
設計する内容が違います。
　①基本設計
　　システム全体の概要・機能一覧・操作画面・操作方法など、システムを使用するユーザーから見える部分の設計を行います。
　②詳細設計
　　基本設計を基に、システムの内部構造・処理方法・データの流れなどユーザーからは見えない細部まで設計を行います。

### ・まとめ
詳細設計はそれぞれの動作を実現させるために重要な工程です。
詳細設計を作成することでプログラマーやエンジニアは自身のやるべきことがはっきりし、効率的に業務を行えるようになります。
プログラマーやエンジニアとのコミュニケーションを密に取り認識を合わせていくとよいと思います。
他にもプロジェクトに関する記事を投稿しておりますのでお役に立てればと思います。
[プロジェクト ウォーターフォールとアジャイルの違い](https://qiita.com/pesysyon/items/e77b869b5c90b667680b)

[プロジェクト ウォーターフォール開発の流れ](https://qiita.com/pesysyon/items/2bfac2b110a439d80575)

[プロジェクト アジャイル開発の流れ（PMO）](https://qiita.com/pesysyon/items/81209de2a2fdc8c294d4)

[初めてプロジェクトに参画する方へプロジェクトとタスクの意味について](https://qiita.com/pesysyon/items/a7da021a7d596df5e5fd)

[初めて参画するプロジェクトPM(PMO) 要件定義の工程](https://qiita.com/pesysyon/items/cf40037f484b99e16621)

[初めて参画するプロジェクトPM(PMO) 基本設計の工程](https://qiita.com/pesysyon/items/c0b936f325244be7688d)

以上、小磯でした。
【ChatGPT】10の思考方法をPromptにしました。


　どうも、カーブミラーです。

　今回は、10の思考方法をPromptにしました。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　まずは、ニュースです。

　ChatGPTのWeb版に
　　Soraへのリンクができました。

　サイドバー（履歴）の
　　上の方に、“Sora”とあります。
　　　それをタップすれば、
　　　　Soraのログイン画面になります｡
![Screenshot_20250114-085834~2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/d49490cc-d2b8-4fa7-f9ce-aa77ec96b802.png)

　ログイン後の
　　操作方法は変わりません。

　ちなみに、
　　クリスマスプレゼントは
　　　まだ続いています。
***
　次もChatGPTです。

　スマホアプリ版ですが、
　　モデル切り替えメニューが
　　　右上メニューから
　　　　入力枠のところに
　　　　　移動しました。
![Screenshot_20250114-084914~2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/290fb50f-5314-48cd-b380-6e3aab1b8681.png)

　切り替えで
　　迷いませんように、ご注意を。
***
　では、【本題】です。

　今回は、
　　10の思考方法Promptを
　　　作成しました。

　これは、
　　miraiさんのポストを
　　　もとにしました。

　miraiさんは、
　　次世代AI検索エンジンFelo
　　　公式アンバサダーを
　　　　やっておられます。
　　　　　[miraiさんポスト](https://x.com/mirai_spark/status/1878809146608497051?t=ckQlmrkil237aRA2Bjw14A&s=19)

　miraiさんは
　　別々のPromptとして
　　　ポストされてますが、
　　　　私はひとまとめにしました。

　どのPromptが
　　どんな考え方をするのか
　　　使ってみないと
　　　　わからないためです。

　また、
　　違う考え方の出力を見るだけでも
　　　参考になるかもしれませんよね。

　　ちょっとしたヒントから
　　　いいアイディアが生まれる
　　　　かもしれません。
***
　では、
　　Promptをどうぞ。
　　　＊＊＊に問題を入力して
　　　　送信してください。
```Text:10の思考方法Prompt
問題「＊＊＊」

問題を次のそれぞれで考えて答えてください。
最後に、総合的なまとめをお願いします。

1. 逆の視点で考えて
2. ランダムな単語を使ってアイデアを出して
3. 異なる分野の知識を組み合わせて
4. 制約を設けて解決策を考えて
5. 未来の視点で考えて
6. 仮説を立てて検証するプロセスを示して
7. 複数の視点から分析して
8. 失敗を前提にした解決策を考えて
9. 非現実的なアイデアを出してから現実的に修正して
10. 物語形式で解決策を提案して
```

　ここで出力されるのは、
　　表層的な回答ですので、
　　　番号を指定して、
　　　　“もっと深堀りしてください”と
　　　　　やり取りしても
　　　　　　良いです。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Kubernetes 1.32: 変更点まとめリンク集

このエントリは、Kubernetes 1.32 の変更点のまとめページです。

ピックアップされた変更点は、日本語でまとめられたものが公式で用意されているため、[そちら](https://kubernetes.io/ja/blog/2024/12/11/kubernetes-v1-32-release/)をご参照ください。

細かな変更点について、SIG毎に[CHANGELOG](https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.32.md)をまとめた以下のリンクを参照してください。

# 変更点の詳細へのリンク

- [Metrics Changes と SIG Instrumentation](https://qiita.com/watawuwu/items/5280af2088bbc1a86aca) @watawuwu 
- [SIG Apps](https://qiita.com/yosshi_/items/6313b4b01f3d18219e1a) @yosshi_
- [SIG API Machinery](https://qiita.com/Ladicle/items/f11b083d0da7f574abef) @Ladicle 
- [SIG Auth](https://qiita.com/hiyosi/items/4b8135ec47c5a87dba79#_reference-7735636c0aac192204a7) @hiyosi 
- [SIG CLI](https://qiita.com/superbrothers/items/3afe6ca7607af86655fa) @superbrothers 
- [SIG Cluster Lifecycle](https://qiita.com/yuanying/items/97bfd6c6048dc232f626) @yuanying
- [SIG Storage](https://qiita.com/everpeace/items/3a4ef4004b96f62fdc23) @everpeace
- [SIG Network](https://qiita.com/uesyn/private/7b67b251b71f3fed3f96) @uesyn 
- [SIG Scheduling](https://qiita.com/ordovicia/items/73066d568076d0ef03eb) @ordovicia 
- [SIG Node](https://qiita.com/y1r96/items/08c17e29d22a13a2af92) @y1r96
アリババクラウド、Wanx 2.1を発表：AI駆動のビデオ生成を再定義

> 本記事は[こちらのブログ](https://www.alibabacloud.com/blog/alibaba-cloud-unveiled-wanx-2-1-redefining-ai-driven-video-generation_601930?spm=a2c65.11461433.0.0.4ee35355yjssfT)を参考にしています。
> 翻訳にはアリババクラウドの[ModelStudio](https://www.alibabacloud.com/en/product/modelstudio)([Qwen](https://www.alibabacloud.com/en/solutions/generative-ai/qwen))を使用しております。

# Alibaba CloudがWanx 2.1を発表、AI駆動のビデオ生成を再定義

Alibaba Cloudは、2023年7月に初めてデビューしたマルチモーダル大規模モデルTongyi Wanxiang (Wanx)の最新版であるWanx 2.1を導入しました。テキスト入力から高品質な画像とビデオを生成するように設計されたWanx 2.1は、AI駆動の視覚コンテンツ生成において大きな進歩を遂げています。新しいモデルは、複雑な動きを正確に処理し、ピクセルの品質を向上させ、物理的な法則に従い、指示の精度を最適化することで、現実的な視覚効果を生成することに優れています。指示の精度が高いため、Wanx 2.1は、ビデオ生成モデルの包括的なベンチマークスイートである<a href="https://huggingface.co/spaces/Vchitect/VBench_Leaderboard" target="_blank">VBench</a>リーダーボードでトップに立っています。VBenchによると、全体得点84.7%で、Wanx 2.1はダイナミック度、空間関係、多物体間の相互作用などの主要な次元でリードしています。

![2](https://yqintl.alicdn.com/e4f66a5c2ef4080f9f1cf5ddb35b7be9b4b98978.jpeg)

視覚生成の品質を最大化するために、Wanx 2.1の研究チームはいくつかの分野で重要な技術的な進歩を遂げました。まず、独自のVAE（Variational Autoencoder）とDiT（Denoising Diffusion Transformer）フレームワークを活用することで、Wanx 2.1は時間的および空間的な関係を強化し、複雑な動きや物理的な法則を伴うシーンにおいてより高い視覚的リアリズムを達成します。全空間-時間注意メカニズムを採用することで、モデルは現実世界の複雑なダイナミクスを驚くほど正確に模倣することができます。また、超長文コンテキストを使用してモデルのトレーニングプロセスを加速する革新的なアプローチも採用されており、これによりテキスト指示がビデオ生成にシームレスに統合され、より速く直感的なコンテンツ作成が可能になります。さらに、Wanx 2.1は、広告デザインやショートビデオ制作などの業界の多様な創造的なニーズに対応するため、中国語と英語の両方のテキストエフェクトをサポートする最初のビデオ生成モデルとなりました。

![skating](https://video-intl.alicdn.com/2025/Blog/skating.gif)
テキストプロンプト:「平拍一位女性花样滑冰运动员在冰场上进行表演的全景。她穿着紫色的滑冰服，脚踩白色的滑冰鞋，正在进行一个旋转动作。她的手臂张开，身体向后倾斜，展现了她的技巧和优雅」。
日本語訳: 冰上のフィギュアスケーターの女性がパフォーマンスをするパノラマショット。彼女は紫のスケートウェアと白いスケート靴を履いていて、スピン動作を行っている。彼女の腕は広がっており、体は後ろに傾いている。これは彼女の技術と優雅さを示している。

このような革新的なアプローチにより、Wanx 2.1は大規模な身体の動きと複雑な回転を含むビデオを生成する能力を示しています。フィギュアスケート、水泳、ダイビングなどの挑戦的なシナリオでも、モデルは身体の協調性を維持し、現実的な動きの軌道に従います。これにより、ビデオ生成の新たな基準が設定されています。Wanx 2.1は現在、<a href="https://tongyi.aliyun.com/wanxiang/videoCreation" target="_blank">公式中国語サイト</a>で無料で利用可能です。個人開発者や企業ユーザーは、Alibaba Cloudの生成AIプラットフォーム<a href="https://www.alibabacloud.com/product/modelstudio?spm=a3c0i.7911826.6791778070.411.6a323870apiMrQ" target="_blank">Model Studio</a>を通じて、その可能性を探求することができます。これにより、ユーザーは独自のニーズに合わせた高品質な視覚コンテンツを作成し、AI技術とクリエイティブ産業との間のギャップをさらに縮小することができます。

この記事は、<a href="https://www.alizila.com/alibaba-cloud-unveiled-wanx-2-1-redefining-ai-driven-video-generation/" target="_blank">Alizila</a>でCrystal Liuによって執筆されました。
[個人的な考え]企業製品の有無

# 求人：スキルチェンジ出来ます！！
現実：案件は探してやるから、技術は自分で勝手に覚えろ！！

まぁプログラマーなら色んな知識身につけてなんぼなところはあるかと思うけど、
こういうクソみたいな丸投げしかしない企業方針とか営業が居るようなところでは仕事したくないなぁ。。。

ってなわけで、お外でパッケージ製品の開発に携わっている、パッケージ製品を持ってない企業の社員による、
割と個人的な意見・偏見なお話。

# みんなの会社は何か自社製品（パッケージ）持ってる？
例で言うところの「お任せあれ！」なアレとか「楽々ホニャララ」、「〇〇モンGo」や「〇〇娘」など自社パッケージを持ってる企業は多数あるかと思いますが、みなさんの会社ではそういった製品持ってたりします？

IT屋でも請負やSESのような所謂「人貸し」のようなところだと、
常に外勤とかになるだろうから自由に動ける人がそもそも社内にいないだろうし、
そもそも外勤以外の残業時間を使って製品作成を手伝ってくれるような、
社畜精神溢れた意識高い系の社員もなかなかいないんじゃないかなと（個人的な偏見

# 持ってるメリット・デメリット
製品を持ってるから「良い企業」かどうかって言われるとなんとも言えないけど、なんとなくで持ってたほうが企業としての武器の一つになるからいいかなということで、メリ・デメをちょっと考えてみた。

## メリット
- １度作れば、後は売るだけのフェーズになるので長期的な売上になる  
→会社としての資産になる（一旦そういうテイで
- 当たりハズレはあれど、就職サイトや自社HPに「こんなん作ってますけど」と紹介でき、企業の技術力をひけらかすことが出来る  
→しょうもないアプリだとしても作った実績になるよね
- 外勤とかの仕事が切れたときの繋ぎになる
→結局はその人分の赤字にはなるだろうけど、一時的な保守要因に回せるから部署間での赤字分散には使える？
- 新人のOJTに使える
→製品ってこうやって出来てるんだ～を身近に体験できるチャンスを与えることが出来、何も生産できない新人を低単価で保守要因に回せる

## デメリット
- 保守・機能追加しなきゃならない
→特に法律や条例などが絡むような製品の場合は、改定のたびに対応が必要
→年に１～数回やってくる言語やライブラリのバージョンアップとかパッチとか面倒くさくて死にそう
- 業務知識が必要だったりするので、専任の部隊とか必須になる人材が必要
→会計とかだと計算方法だったり、食品管理とかだと衛生法とかの影響受けまくり
- 売れなきゃ開発費だけで真っ赤になる
→売れないと保守費用だけがかかる負債になりかねない

# 結局のところ。。。
製品を持ってると、アプリごとに技術的に色んな言語やフレームワーク使ってれば、スキルチェンジのための練習案件にもなるだろうし、それが企業アピールにもなるだろうし、
技術発信したいんであればQiitaとかのネタにもなるだろうしで良いことありそうな気はするかもしれないけど、
如何せん業務知識だったりアイデアや社会の動向が分かる人などが旗振るなり・発信してくれないことには、
業務知識が乏しく技術しか分からないただの一介のプログラマーには企画を立てること自体が難しかったり、
そもそも会社の方針としてそんなところに金はかけられんみたいな感じだとそんな話にすらならないと思うので、
就職や転職時に自社製品を持ってるかどうかについても判定の基準にしてはどうでしょうか？というご提案でした。
Googleによるセーフ ブラウジングのサイト ステータスに再審査をお願いする

先日、弊社で開発・運用している企業様の管理システムを開いたらこのような警告が出ました。

![#789 - 'セキュリティ エラー' (1) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/ddeae5a0-e154-078d-327f-f7ad61d29475.png)

めっちゃ赤い！めっちゃ怖い！

当然WAFや改ざん検知は入れておりまして、それらのアラートもないままこの画面が出たため、直ちに外部からの不正アクセスや、改ざんが無いか全力で調査を行いましたが、異常が見つかりませんでした。

## Googleによる独自審査
これはGoogle側が独自の判定基準で「このサイトはフィッシングサイトである」と認定しているようです。
恐らく、クローリングの上、複数の条件でマッチしたものをフィッシングサイト判定し、Chromeでのアクセス時にこの画面を出す、という風になっている模様です。


Search Consoleに登録することで、Googleがフィッシングに判定した原因を見れるのですが、「不正なプログラムが仕込まれています」と出ているものの、どの部分が問題なのかまでは教えてくれません。

セキュリティ的にまずハッキングされるとは思えず、内部外部ソースをスキャン・目視でも問題なかったので、原因が分かりませんでした。

業務システムのため、Googleがクロールできる範囲ではそもそも簡素なログイン画面しかないので、不正なプログラムがあればフロントソースや通信内容ですぐ判明できます。

:::note info
今回事情があってできなかったのですが、本来であればIP制限をかけてクライアント環境のみのアクセスにする、Basic認証をかける、robots.txtなどでクローリングできないようにするなどすべきですね。
:::

## Search Consoleから修正連絡を行いたいが…

もし何か問題があった場合、修正完了の連絡をSearch Consoleから行えるのですが、困ったことに問題が全くないので、修正しようがなく、困っておりました。

## 原因を推測してSearch Consoleから連絡

まさかとは思いましたが、ドメイン名にグローバル企業様の名前が入っているので、

* ドメイン所有者がその会社じゃない
* 内容的にドメイン名の内容ではない（このサイトは管理システムなので簡素なログイン画面が表示される）

くらいしか原因が考えられず、下記の文章を添えて、サーチコンソールから修正連絡を入れてみました。

>ソースの全面スキャンを行いましたが、不正なプログラムはありません。もしドメイン名が問題なのであれば、[企業様名]から正規に委託を受けて運営しています。それを証明する方法があるのであれば、[企業名様]からご連絡させていただきたいので、方法を教えていただけないでしょうか？


すると翌日


>セキュリティ審査のリクエストを受領し、処理いたしました。Google のシステムで、現在の[ドメイン名] には有害なサイトやダウンロードへのリンクが含まれていないことを確認できましたのでお知らせいたします。サイトのユーザーに対して表示されていた警告は削除させていただきます。

との連絡があり、無事に解消されました。

サイトのソースコードだけでなく、上記のような要因も加味して判定していたりするんですね。
今回は誤検知でしたが、日々、インターネットユーザーの安全を守ってくれているGoogleに感謝です。

:::note info
EV証明書など、企業名を認証できるSSL証明書を使用することで事前に回避できる可能性もありそうです。また、ドメインのWhois情報などでも同様に回避できる方法があるかもしれません。
:::

ちなみに、ここからURLを入力事で、Google側でのヘルスチェックが行えます。
https://transparencyreport.google.com/safe-browsing/search?hl=ja
ハッカソン向け：GitHub Organizationで始めるチーム開発とアカウント作成方法

## はじめに
GitHub Organization（組織）は、複数人でのプロジェクト管理やリポジトリ管理を効率化するための機能を提供します。

:::note info
**本記事では、そのメリットや作り方について簡単にご紹介します。**
:::

***これからチーム開発を始める方に向けた内容ですので、少しでも参考になれば幸いです。***

## 書こうと思ったきっかけ
現在受講しているITスクールでのチーム開発「ハッカソン」に参加したことをきっかけに、この記事を書こうと思いました。

:::note warn
***GitHub Organizationについてはこれまでに何度か作成した経験がありますが、改めて備忘録として記事にまとめることにしました。***
:::

今回は簡単な内容ですが、最後まで読んでいただけると嬉しいです。

## GitHub Organizationのメリット
GitHub Organizationの最大のメリットは、チーム全体でリポジトリや権限を一元管理し、効率的にコラボレーションできることです。

:::note info
**以下に、主なポイントを簡単にまとめましたので、ぜひ参考にしてください。**
:::

### チーム開発の強化
- **複数のチームメンバーを追加**して、それぞれに異なる権限（管理者、書き込み、読み取りなど）を設定できます。
- **チーム単位**でリポジトリのアクセス権限を管理可能。
- **コントリビューションやプルリクエスト、コード変更履歴を簡単に追跡**できます。

### リポジトリの整理
- **組織に所属するすべてのリポジトリを1つの場所**で管理できます。
- 個人のアカウントに紐付けられないため、**プロジェクトの所有権がチーム全体**に属します。

### セキュリティと権限管理
- 各リポジトリやブランチごとに**アクセス制御**を設定可能。
- **セキュリティポリシーを一元管理**できる。

### プライベートリポジトリの共有
- 組織内のメンバーで**プライベートリポジトリを共有**し、コラボレーションが可能。

## 実際にGitHub Organizationを作ってみた

### 1. GitHubにサインイン
まず、GitHubにサインインし、右上の「＋」ボタンから「New Organization」を選択します。

![Screenshot 2025-01-14 at 10.32.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ce9c2395-a29a-4aa9-8503-fbd00da60165.png)

### 2. プランを選択
私は無料プランで十分だったので、左側の無料プランを選択しました。

![Screenshot 2025-01-14 at 10.33.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/46f47eff-d3d9-d876-eacc-e620dfe09ea0.png)

### 3. 必要情報の入力

以下の情報を入力します：

- **グループアカウント名**  
  - URLやリポジトリのオーナー名として使用されます。

- **主要な連絡先**  
  - 後で変更可能です。

- **グループアカウントの所属先**  
  - `Personal account`（個人アカウント）  
  - `Business or institution`（組織・機関、組織名の入力が必要）

![Screenshot 2025-01-14 at 10.40.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d5bde5a3-06ec-bc23-80bd-c06c3eed9e6c.png)

### 4. 設定内容の確認と完了

「Get GitHub Copilot Business in this organization」については、有料機能のためここではスキップします。

**ここまでの設定内容に問題がなければ、最後の同意チェックボックスにチェックを入れて作成を完了します。**

![Screenshot 2025-01-14 at 10.42.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d2a30474-a968-71b0-af93-c964aa2da0ab.png)

### 5.メンバー招待のスキップ
アカウント自体の作成はここで完了ですが、次の画面で招待したい方のメールアドレスを入力すると、通知を送ることができます。

今回は、同じチームの方のメールアドレスを確認していないため、ここではスキップしました。 

![Screenshot 2025-01-14 at 10.44.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a53f3037-7ec2-b006-40cd-a16d8df0b589.png)

### 6.グループアカウント画面の表示
グループアカウントの画面が表示されます。画面右上の「Follow」を押しておくことをおすすめします（小ネタです！）。

![Screenshot 2025-01-14 at 10.46.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/6511b2f1-6584-1357-da90-d660caf466ab.png)

***これでGitHub Organization（組織）アカウントの作成が完了しました！***

## まとめ
ここまで読んでいただき、ありがとうございました。

:::note warn
**私自身、久しぶりにGitHub Organizationを作成したため、改めて作り方やそのメリットについて復習する良い機会になりました。**
:::

***今回は基本的な内容でしたが、この情報がどなたかの技術の助けになれば幸いです。***

## おまけ：勝手にリポジトリを作ってみた
テスト的にリポジトリを作成し、うまく動作するかを検証してみましたが、問題なく作成できました！

![Screenshot 2025-01-14 at 10.54.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a829997f-b799-067f-08c1-fc714b162f9e.png)

**今後は、チームメンバーと協議しながら積極的に活用していきたいと思います！**
Graniteモデルをローカルで動かしてみた

# 初めに
ollama（※1)でIBM Graniteモデルが使えるようになったので、試してみた。

※１：ollamaとは、ローカル環境で大規模言語モデルを手軽に扱えるようにするツール

https://ollama.com

# 前提条件
dockerが導入済みであること
 
# 手順
#### 1.以下のコマンドを入力し、ollamaのコンテナ名を起動
```
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```

#### 2. 以下のコマンドを入力し、Graniteモデルを起動
```
docker exec -it ollama ollama run granite3.1-dense:2b
```

#### 3. プロンプトを入力し結果を取得
[>>>]というプロンプトを入力する記号が出力されるので、プロンプトを入力し、結果を取得します。
以下は、サンプルの入力と出力結果になります。
※CPUで推論するので、結果が出力されるのに時間がかかります。
```
>>>  Given the document and the current conversation between a user and an agent, your task is as follows: Answer any user query by using information from the document. The respon
... se should be detailed.
... 
... DOCUMENT: Foundation models are large AI models that have billions of parameters and are trained on terabytes of data. Foundation models can do various tasks, including text,
...  code, or image generation, classification, conversation, and more. Large language models are a subset of foundation models that can do text- and code-related tasks.
... DIALOG: USER: What are foundation models?

Foundation models are extensive AI models characterized by having billions of parameters and being trained over vast amounts of data, typically in the terabytes range. 
These models possess a broad capability set, enabling them to perform a wide array of tasks. Some common applications include text generation, text classification, code 
generation, image generation, conversation modeling, and more. It's important to note that large language models are a specific type of foundation model, focusing primarily 
on text- and code-related tasks due to their extensive training on related data.
```

# 最後に
ollmaでは、Llama等のいくつかのオープンソースモデルが使用可能です。また、GPUを搭載した環境では、
GPUで推論させることも可能ですので、興味がある方はドキュメントを参照の上、試してみてください。
Docker環境構築時はnode_modulesを.dockerignoreに追加する

# 概要
Dockerでnode.jsのコンテナを使用して`docker-compose up --build`するとき、下記エラーに苦戦したため解決策をメモします。
``` console
time="2025-01-14T08:58:14+09:00" level=warning msg="The \"DISPLAY\" variable is not set. Defaulting to a blank string."
[+] Building 13.4s (5/9)                                                                                    docker:desktop-linux
 => [frontend internal] load build definition from Dockerfile                                                               0.0s
 => => transferring dockerfile: 583B                                                                                        0.0s
 => [frontend internal] load metadata for docker.io/library/node:22                                                         2.1s
 => [frontend internal] load .dockerignore                                                                                  0.0s
 => => transferring context: 196B                                                                                           0.0s
 => [frontend 1/5] FROM docker.io/library/node:22@sha256:99981c3d1aac0d98cd9f03f74b92dddf30f30ffb0b34e6df8bd96283f62f12c6   0.0s
 => => resolve docker.io/library/node:22@sha256:99981c3d1aac0d98cd9f03f74b92dddf30f30ffb0b34e6df8bd96283f62f12c6            0.0s
 => ERROR [frontend internal] load build context                                                                           11.1s 
 => => transferring context: 234.64MB                                                                                      11.1s 
------
 > [frontend internal] load build context:
------
failed to solve: archive/tar: unknown file mode ?rwxr-xr-x
```


# 解決策
コンテナへコピーするディレクト直下に下記ファイルを作成して、Windowsなどのホストマシンからコンテナへnode_modulesフォルダをコピーされないようにします。
``` .dockerignore
sample_remix_react/node_modules
```

# 余談
Windows環境のOneDrive内でプロジェクトを管理していると、本エラーが発生するようです。私の場合はOneDriveに保存すること維持したいため、.dockerignoreを作成することで対応しました。
https://github.com/docker/for-win/issues/14083#issuecomment-2528022302
AWS Certified Solutions Architect Professional（SAP-C02）合格備忘録

### ■受験の目的
AWSのソリューションの大規模または応用設計を理解するため。
AWS Certified Solutions Architect Professional（SAP-C02）の認定を受けるため。

### ■出題範囲
シラバスはAWS公式から参照します。
https://d1.awsstatic.com/ja_JP/training-and-certification/docs-sa-pro/AWS-Certified-Solutions-Architect-Professional_Exam-Guide.pdf

### ■受験の前提
Solutions Architect Associate（SAA-C03）の合格が必要です。
※過去のSAA-C02でも有効期限内であれば、受験可能です。

### ■受験のメリット
ソリューションの組み合わせや管理方式などの知識を得たい方にはお勧めです。
AWS試験は2年半ぶりでしたので、AWSサービスの情報更新も兼ねて、学習・受験しております。2年前からサービスの統廃合やアップデートもされています。
SAAの自動認定更新も可能です。

### ■教材・模擬試験
筆者が、今回あまり勉強に時間をかけることができなかったため、
信頼性の高そうな模擬問題の解説を読み込むことにとどまりました。

模擬試験はUdemyで購入
https://www.udemy.com/course/aws-solution-architect-professional-aws-sap-test

解説を"読む","覚える"を2周くらい繰り返しました。

### ■学習期間
筆者の場合、普段AWSに触れている機会も多い前提で、
大体土日・連休学習で3か月ほど勉強しておりました。

### ■実際の本試験
日本語に対応した試験が発行されていますので、そちらで受験しています。
全75問の制限時間は180分でした。
採点方式は、AWS独自で非公開になります。
採点されない問題もあるようです。

単一回答もしくは複数回答方式の問題になっています。
模擬問題と類似の問題も多く、1周目は110分ほどで回答を行い、
残り70分で見直しを実施しました。

意外と問題文の要件を見逃していることは多いので、必ず見直ししましょう。

スコア1000点中750点以上が合格ラインです。
結果は791点のスコアで、初回受験としては満足のいく結果でした。