OmniAICreator/Qiita-1.07M huggingface dataset:
チャット設定がメンテナンス モードになっているため、チャットを有効にすることができません。

+ [アプリ内および Web のメッセージングを使用した柔軟性と機能の向上](https://help.salesforce.com/s/articleView?id=sf.miaw_intro_landing.htm&type=5)
+ [アプリ内および Web のメッセージングに向けた Salesforce 組織の準備](https://qiita.com/Keiji_otsubo/items/831b96e58ef36d9bab1e)

--------------------

+ [I was trying to setup einstein bot, but got an error at the final step. Seeking for help?](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007YwFSF)

:::note alert
We hit a snag.
Invalid object reference: LiveChatTranscript.
:::

これだと思ったけど...

In case you get an error as "Invalid object reference: LiveChatTranscript." Please ensure you have enabled live chat in chat settings. Also, Save it and If you don't select any entities, all entities will be allowed for Find and Create so can be left blank.

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e650f7b3-217f-8107-7515-f29b098a0fe8.png)

https://wearecommunity.io/communities/b1EKvfHjSl/articles/2309

うまくいかないらしい。

We are having the same issue and chat settings is in maintenance mode so we can't enable chat. We built out a message app and activated and that didn't work either. 

+ [Chat & Live Agent Retirement](https://help.salesforce.com/s/articleView?id=001790618&type=1)

Salesforce は、従来のチャット製品 (LiveAgent、Salesforce Chat、Embedded Chat、および Service Chat) を 2026 年 2 月 14 日に廃止します。

+ Salesforce が Chat を廃止するのはなぜですか?

Summer '22 に、Salesforce は新しいファーストパーティ チャット製品と機能セットをリリースしました。新製品である Messaging for In-App and Webは Hyperforce 上に構築されており、顧客が好む多くのチャット機能を提供します。また、いつでも再開できる非同期および永続的な会話もサポートしています。

+ この変化は私にとって何を意味するのでしょうか?

2026 年 2 月 14 日以降、従来のチャットにアクセスできなくなります。さらに、従来の Chat には廃止日までの新機能は提供されなくなりますが、重要な信頼に関する更新は廃止日まで提供し続けます。


+ [チャットをアプリ内および Web のメッセージングに置き換えるときの考慮事項](https://help.salesforce.com/s/articleView?id=sf.miaw_replacing_chat_considerations.htm&type=5)

Summer '23 以降、Salesforce チャットはメンテナンス専用モードとなり、新機能は構築されなくなりました。顧客との非同期の永続的な会話環境を提供する最新の代替機能であるアプリ内および Web のメッセージングに切り替えることを検討してください。アプリ内および Web のメッセージングへの移行準備として、製品の改善、機能の比較、設定に関する考慮事項について説明します。

+ [Web チャットが機能しない - Web チャット機能がメンテナンス モード](https://qiita.com/Keiji_otsubo/items/d8d4a90ba16f5881696e)
+ [OmniScript を使用した OmniOut ポータルでライブ チャットが機能しない](https://help.salesforce.com/s/articleView?id=000396682&type=1)

OmniOut ポータルで OmniScript コンポーネントを使用してライブ チャット プラグインを使用すると、次の問題が発生します。
1. ライブ チャット ウィンドウを一度開くと閉じることができません。
2. ライブ チャット プラグインを開いた後、OmniScript ナビゲーションが機能しなくなります。

ライブ チャットとオムニスクリプトには互換性の問題がいくつかあり、それらはうまく連携しません。 Summer '23 以降、Salesforce Chat はメンテナンス専用モードになっているため、新しい機能拡張はサポートされていません。

+ [チャット エージェント設定およびチャット ボタン内に自動グリーティング メッセージを追加した後でも、断続的に自動グリーティングが表示されない](https://issues.salesforce.com/issue/a028c00000gAwoBAAS/intermittently-the-auto-greeting-is-not-showing-even-after-adding-the-auto-greeting-message-within-the-chat-agent-configuration-and-chat-button)

回避策
ボットを使用している場合、回避策はありません
日米の1人当たりGDP（Maddison Project Database 2023）

# はじめに
1年ほど前にMaddison Project Database 2020を使い、日米の1人当たりGDPの長期時系列のグラフを実数スケールと対数スケールで描いていたが、データがアップデートされ2022年までを含むMaddison Project Database2023が取得できるようになっていたので書き直した。

変更点は
```Python
# Excelファイルの読み込み
df = pd.read_excel('https://www.rug.nl/ggdc/historicaldevelopment/maddison/data/mpd2020.xlsx', sheet_name='Full data')
```
と従来なっていたところを
```Python
# Excelファイルの読み込み
df = pd.read_excel('https://dataverse.nl/api/access/datafile/421302', sheet_name='Full data')
```
としただけだが、備忘録として残す。

# データ
Maddison Project Database 2023のExcelデータをhttps://dataverse.nl/api/access/datafile/421302 からダウンロードして、人口データが継続して得られている年からのデータを利用した（アメリカの場合1820年以降、日本の場合1885年以降）。

# コード
```Python
import pandas as pd
import matplotlib.pyplot as plt

# Excelファイルの読み込み
df = pd.read_excel('https://dataverse.nl/api/access/datafile/421302', sheet_name='Full data')

def plot_gdp_per_capita(df, country_codes, start_year):
    plt.figure(figsize=(10, 5))

    for country_code in country_codes:
        # 指定した国のデータのみをフィルタ
        country_data = df[df['countrycode'] == country_code]

        # 指定した年以降のデータに限定
        country_data = country_data[country_data['year'] >= start_year]
        
        # 終了年を取得
        end_year = country_data['year'].max()

        # グラフを描画（実数で表示）
        plt.plot(country_data['year'], country_data['gdppc'], label=country_code)

    plt.title(f'GDP per capita ({start_year}-{end_year})')
    plt.xlabel('Year')
    plt.ylabel('GDP per capita (real scale)')
    plt.legend()
    plt.grid(True)
    plt.show()

    plt.figure(figsize=(10, 5))

    for country_code in country_codes:
        # 指定した国のデータのみをフィルタ
        country_data = df[df['countrycode'] == country_code]

        # 指定した年以降のデータに限定
        country_data = country_data[country_data['year'] >= start_year]

        # グラフを描画（対数目盛で表示）
        plt.plot(country_data['year'], country_data['gdppc'], label=country_code)

    plt.yscale('log')
    plt.title(f'GDP per capita ({start_year}-{end_year})')
    plt.xlabel('Year')
    plt.ylabel('GDP per capita (log scale)')
    plt.yticks([500, 2500, 12500, 62500], ['500', '2500', '12500', '62500'])
    plt.legend()
    plt.grid(True)
    plt.show()

# アメリカと日本の1820年以降のデータを表示
plot_gdp_per_capita(df, ['USA', 'JPN'], 1820)
```
# 出力
* 実数スケール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305624/20268a24-330a-3f29-71be-fa12c8ae8493.png)

* 対数スケール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3305624/6e2ae325-8bfa-c375-9041-a73eb359a0ea.png)


# 改善したい点（1年前のまま。一向に進歩無し）
対数スケールのグラフの目盛りを自動化したかったが、自動化するとあまりいい表示にならなかったので、米国データに合わせて今回は手動入力。他の国について描く場合を想定するとよくないが、10^4だけしか表示されないのでは面白くなかったので、今回はこれで諦めた。
busybox ashで任意の値(0x00~0xFF)で埋めた任意サイズのファイルを作成する

```sh
head -c N /dev/zero | tr '\x00' '\xHH' > FILE
```
- `\xHH` `\x00`~`\xff`で16進数値を指定
- `N` : サイズ(byte)
- `FILE` : 出力先

### おまけ

#### 既存のファイルのサイズを変えずに任意の値でフィルする

```shell
head -c $(wc -c < FILE ) /dev/zero | tr '\x00' '\xHH' > FILE
```

サイズ指定の箇所で既存ファイルのサイズを取得しているだけ。

#### フレームバッファを埋める場合はサイズ指定なしで大丈夫

```shell
tr '\x00' '\xHH' < /dev/zero > /dev/fb0
```

- - -

### 参考文献

https://zenn.dev/nox40/scraps/c8abc1f64c4c0a

- - - 

誰か、imagemagickなど無いbusybox ashで/dev/fb0に24bitフルカラー任意色を書き込むワンライナーがあったら教えてください...
AWSを基本的にまとめてみた【CloudWatch】

## CloudWatchとは？

- EC2、RDSなどのAWSリソースやAWSで実行されているアプリケーションなどのリアルタイムでモニタリングするサービス。
- CloudWatchを使用することでインスタンスのCPU使用率、Diskの読み書き回数などを監視できる。

## メトリクスとは？

- EC2やRDSなどの監視対象から取得するデータのまとまりのこと。
- (1)標準メトリクスと(2)カスタムメトリクスがある。

##### (1)標準メトリクス
- AWSの管理範囲の情報は、標準メトリクスとして収集が可能。

例: EC2では、CPU使用率やネットワークのトラフィック情報が標準メトリクスとして収集される
例: RDSでは、EC2の標準メトリクスを加えて、メモリやディスクの使用量などの情報が標準メトリクスとして収集される

##### (2)カスタムメトリクス

- 標準メトリクスとして収集されない情報を収集する際にカスタムメトリクスを使用する。

## CloudWatch Alarmとは？

- CloudWatchのメトリクスに対してアラームとアクションを設定することができるサービス。

例: EC2のCPU使用率が80%を超えた場合に80%を超えた場合にアラームを出し、利用者宛にメールを飛ばすなど設定ができる

## CloudWatch Logsとは？

- EC2,CloudTrail,Route53などのログ分析、保存することができるサービス。

## CloudWatch Eventsとは？

- リソース変更のイベントやスケジュールをトリガーとして、アクションを実行するサービス。

## EventsBridgeとは？

- CloudWatch Eventsから派生・独立したサービス。
- CloudWatch Eventsとの大きな違いはAWSサービス以外のイベントも取り扱うことができる点。


## 参考サイト
[【AWS CloudWatch】ソリューションアーキテクト アソシエイト(SAA) 第33回講座](https://www.youtube.com/watch?v=UrpfBi3-Ids)
スプレッド構文　[JavaScript]

## 自分の感想：

JavaScript学習中、スプレッド構文というものを学んだので、
自分なりにまとめてみたいと思います。

まず、最初の感想として、スプレッドなので広げるや **拡散？** などの意味から何か縮こまっているものを広げるお手伝いをしてくれるのものなのかなと推測！

そこで、MDNによる定義を確認してみると・・・

:::note info
定義：
>配列式や文字列式などの反復可能オブジェクトを、０個以上の引数（関数呼び出しの場合）や要素（配列リテラルの場合）を期待された場所で、「展開」したり、オブジェクト式を、０個以上のキーと値のペア（オブジェクトリテラルの場合）を期待された場所で「展開」したりすることができる。
:::
##
とのこと・・
**「展開」** というキーワードがあるので予想していた挙動と同じような意味があることはわかったけど、今一つ何を言っているのか難しい・・・
なので、自分なりに実践を踏まえて読み解いていこうと思います。
##
できること、使い方

・スプレッド構文は、オブジェクトや配列のすべての要素を何らかのリストに入れる必要がある場合に使用することができる。


## 目次：

[・関数呼び出しにおけるスプレッド構文](#関数呼び出しの場合)
[・配列リテラルにおけるスプレッド構文](#配列リテラルの場合)
[・オブジェクトにおけるスプレッド構文](#オブジェクトリテラルの場合)
[・残余構文(引数)](#残余構文引数)

## 関数呼び出しの場合

列挙可能なオブジェクト（配列、stringなど）を引数に展開することができる。

下記の例では、
関数に配列の変数を当てはめて、
NaNが表示されることなく、
関数の力を借りて配列の中から特定の数字を出力することに成功している。
##
コード例：

Math.max(Mathオブジェクトのmaxメソッドを使用)
（渡した数字の中で最大を求めてくれる。）

Math.min(Mathオブジェクトのminメソッドを使用）
（渡した数字の中で最小値を求めてくれる。）
```js
Math.max(13, 4, 5, 6, 21, 222)
```
```text:出力結果：
222
```
```js
Math.min(1, 5, 21, 55, 617)
```
```text:出力結果：
1
```
### 例題：

数字の配列が、変数numsに格納されているとして、
この中から最大値を求めたい場合

```js
Math.max(nums)
```
を渡したい。

しかし、numsを渡すとMath.maxは、**NaN**を返す。

なぜならMath.maxは配列を渡されても意味がわからないから。
渡して欲しいのは、数字を,(カンマ)区切りで渡してほしい。
そこで活用できるのが、**スプレッド構文**

展開するものの直前に (nums)
 **…** と(ドット)を３つ記載することで配列の中身が展開され、一つ一つのカンマ区切りの数字としてMath.max関数に渡せるようになる。

補足：
numsの中身は変わらない。

```js
const nums = [13, 4, 5, 6, 21, 222]
```
## 配列リテラルの場合


####  できること、使い方

既存の配列から新しい配列を作成する。
配列の要素を新しい配列にそれぞれ展開する。



>mdn引用
スプレッド構文を使用しない場合、既存の配列を一部として新しい配列を作成するには、配列リテラル構文は十分ではなく、push()、splice()、concat()などを組み合わせて使う高圧的なコードを使用しなければならない。

下記の例では、高圧的なコードを使用せずに、直感的なスプレッド構文を使用することで、２つの配列を簡単に結合できている。
##
例題：

catsという配列にdogsという配列をくっつける。
concatを使用して、catsにdogsをくっつけてpetsという変数に新しい配列を格納する。

```js
cats ["Dora","Jiji","Gela"]
dogs["Pocha","Shiro"] 

const pets = cats.concat(dogs)
```
```text:出力結果：
["Dora","Jiji","Gela","Pocha","Shiro"]
```
##

スプレッド構文を使用した場合

```js
const pets = [...cats,...dogs]
```
```text:出力結果：
["Dora",Jiji","Gela","Pocha","Shiro"]
```

また、新たな値をcatsとdogsの中に含ませることもできる

```js
const pets = ["tora"...cats,"Ichi",...dogs,"Hachi"]
```
```text:出力結果：
["Tora","Dora","Jiji","Gela","Ichi","Pocha","Shiro","Hachi"]
```

## オブジェクトリテラルの場合

1つのオブジェクトから別のオブジェクトにプロパティをコピーすることができる。
この性質を使って、オブジェクトを組み合わせたり、すでにあるオブジェクトを複製したりできる。
##
例：
formDataに必要な情報、idとログイン情報（isVerified）を挿入する場合。
⇨
スプレッド構文で展開したformDataの中にidとisVerifiedの情報を付加することもできる。
```js
const formData = {
	email: "hoge@xample.com",
	password: "secret",
	username: "hoge"
}

const newUser = {... formData, id: 123, isVerified: false }

newUser 
```
```text:出力結果：
{email:"hoge@xample.com",password:"secret",username:"hoge",id:123,
isVerified: false }
```

## 残余構文(引数)

>MDN引用
残余構文はスプレッド構文と外見がよく似ているが、こちらはスプレッド構文とは逆の働きをする。

>スプレッド構文が要素を展開するのに対して、残余構文は複数の要素を集約して１つのオブジェクトに「濃縮」する。

詳細は別途、残余構文にて詳述する。
##
### まとめ：

関数呼び出しのスプレッド構文、配列リテラルのスプレッド構文、オブジェクトリテラルのスプレッド構文とそれぞれ若干の違いはあれど、重要なのは「中身を展開する」
ということだとわかりました。

必要な時に必要な処理が書けるように一つ一つ細かく理解しておくことが重要だなと思います。
マインクラフト統合版で鉄を千個あつめるゲーム（鉄千）の実現方法

マインクラフトで鉄を千個あつめるゲーム（鉄千）
ってものがあるらしい

[Youtube 鉄千動画](https://www.youtube.com/results?search_query=%E9%89%84%E5%8D%83%E3%83%95%E3%82%A1%E3%82%A4%E3%83%8A%E3%83%AB2023)


子供たちがやりたい！！　と言うので作れるのかどうなのか調べてみた

まだ小学１年と２年なのでＰＣ操作は嫌！タブレットでやりたいと言う
　（一応小さなキーボードやマウスも用意したんだけど）
 
タブレットなら統合版だが、統合版でもできるのか？

とりあえずルールを
　・ハードモードサバイバル
　・９０分以内
　・座標は表示してよい
　・PvP禁止
　・有効MOBを倒すの禁止
　・食料は乾燥昆布のみ
　・乾燥昆布を燃料にすること禁止

とまぁなかなか大変そう
そして、「自分専用の溶鉱炉で鉄インゴット 千個」 焼けたら終了

で、支給品として以下をもらえると
　・乾燥昆布
　・たいまつ
　・ダイヤピッケル（幸運３、効率強化５ のエンチャント付き）


まず画面をみると、自分の焼いた鉄の個数が表示されている

![t1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/30a41f35-b5c1-d9c1-283a-cfa853c22851.jpeg)
　[こちらからキャプチャ](https://www.youtube.com/watch?v=Xb0e1MY_tys&t=2826s)



これをどうやっているのか調べると...
どうやら title コマンドで表示位置を actionbar にするとここの場所に表示できるようです
が、すぐ消えちゃうので、定期的にコマンド実行しないといけないのかな？

色は「セクション文字 § 」を使って指定可能とのこと

title  @a  actionbar  §0■■黒■■
title  @a  actionbar  §1■■濃い青■■
title  @a  actionbar  §2■■濃い緑■■
title  @a  actionbar  §3■■濃い水色■■
title  @a  actionbar  §4■■濃い赤■■
title  @a  actionbar  §5■■濃い紫■■
title  @a  actionbar  §6■■金色■■
title  @a  actionbar  §7■■灰色■■
title  @a  actionbar  §8■■濃い灰色■■
title  @a  actionbar  §9■■青■■
title  @a  actionbar  §a■■緑■■
title  @a  actionbar  §b■■水色■■
title  @a  actionbar  §c■■赤■■
title  @a  actionbar  §d■■桃■■
title  @a  actionbar  §e■■黄■■
title  @a  actionbar  §f■■白■■

さらに §l（小文字エル）で太字
§o（小文字オー）で斜体（イタリック）
§r で書体をリセット
できる

こんな感じ
title  @a  actionbar  §l§9--blue--§e--yellow--§c--red--　　太字指定
![t2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/627c88b4-3800-4ea3-ff0e-0312bb871a3a.jpeg)


title  @a  actionbar  §o§9--blue--§e--yellow--§c--red--　　斜体指定
![t3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/ef9e1a11-51d9-daf1-92d2-15984d83b049.jpeg)


title  @a  actionbar  §l§9--blue--§o§e--yellow--§c--red--　　太字＋斜体
![t4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/f623893c-4543-6bf4-8a31-358278cdeed4.jpeg)



title  @a  actionbar  §o§o§9--blue--§l§6--yellow--§r§c--red--　　太字＋斜体＋リセット
![t5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/96243e0e-aaf9-0a8e-15d5-4104e10b062d.jpeg)

---

さて、表示方法はわかったので、こんどはカウント方法かな
変数を保持するには scoreboard コマンドがつかえる、と

・変数の追加

```python
scoreboard objectives add countIron dummy
```


・変数の一覧表示

```python
scoreboard objectives list
```

・ユーザ１の変数をカウントアップ

```python
scoreboard players add user1 countIron 1
```
　
 （user1 の部分は実際のユーザ名を指定）

・変数を表示

```python
titleraw @a actionbar {"rawtext":[{"text":"§6現在の鉄： "},{"score":{"name":"user1","objective":"countIron"}}]}
```

 （user1 の部分は実際のユーザ名を指定）



![t6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/153259/92a8ad16-a5d5-12ea-fcb1-6e68ba6c464c.jpeg)



ふむ、出来そうですね

この変数でユーザ毎に鉄が焼けたらカウントアップすると良いのかな？

ん？焼けたらカウントアップってどうやる？

参考：https://www.youtube.com/watch?v=tgkX4jRWmjw

なるほど、ホッパーを通ったら信号流してカウントアップか

ユーザ毎専用の溶鉱炉の下で回路組んでおけばよし、と


作れそうな気がしてきた


----

あとは千個集まったときに「User1 鉄千達成！」の全体周知とか
残り時間30分とかのタイミングで全体周知とかを入れとけばいいか

ラージチェストいっぱいのエンチャントつるはしとか用意するのが大変だな。。。
この辺も自動化してどの世界でも簡単に会場にできるようしておきたいな
robloxでassistant その30

# 概要
robloxでassistantやってみた。
練習問題やってみた。

# 練習問題
partの色を変えよ。

# 手順

- workspaceに、partを追加
- partに、scriptを追加
- スクリプトを書く。

```
print("Hello world!")

local part = script.Parent

part.Position = Vector3.new(-5, 0, -10)
while true do
	part.BrickColor = BrickColor.random()
	wait(2)
end




```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6cd6f627-66d5-138d-ebea-ec2f39ea5518.png)


以上。
[TypeScript] イミュータブルなin-placeアルゴリズムの理解

## イミュータブルなアプローチとは？
イミュータブルなアプローチは、データを変更せずに新しいデータを生成する手法です。JavaScriptやTypeScriptでは、イミュータブルなデータ構造を使用して、データの安全性や予測可能性を高めることができます。例えば、配列やオブジェクトを変更せずに新しい配列やオブジェクトを生成する方法があります。

## in-placeアルゴリズムとは？
in-placeアルゴリズムは、追加のメモリ領域を使用せずにデータを変更するアルゴリズムです。配列の要素を置換したり、文字列を変更したりする際に、元のデータを上書きしていきます。このアプローチはメモリ効率が高く、特に大規模なデータ処理で有用です。

## イミュータブルなin-placeアルゴリズムの実装
配列を反転するイミュータブルなin-placeアルゴリズムを実装の例です。
JavaScriptやTypeScriptでは、文字列がイミュータブルであるため、元の文字列は変更せずに新しい配列を作成して反転する必要があります。

```ts
function reverseStringInPlace(str: string): string {
    const strArray = str.split(''); // 文字列を配列に分割
    let start = 0;
    let end = strArray.length - 1;

    while (start < end) {
        const temp = strArray[start];
        strArray[start] = strArray[end]; // 配列の要素は直接変更できる
        strArray[end] = temp;
        
        start++;
        end--;
    }

    return strArray.join(''); // 配列を文字列に結合して返す
}

let myString = "Hello, World!";
console.log(reverseStringInPlace(myString)); // 出力: "!dlroW ,olleH"
console.log(myString); // 出力: "Hello, World!"
```
このコードでは、文字列を配列に変換してからin-placeな操作を行い、最後に配列を文字列に結合して元の文字列を変更せずに反転します。実行結果を見ると、元の文字列は変更されずにそのまま保持されていることがわかります。

JavaScriptやTypeScriptでは、文字列はイミュータブルなデータ型であり、一度作成された文字列はその内容を直接変更することはできません。しかし、配列はミュータブルなデータ型であり、配列の要素は直接変更することができます。

str は文字列型であり、要素を直接変更することはできませんが、strArray は配列型であり、要素を直接変更することができます。そのため、配列の要素に対してインデックスを指定して直接値を代入することができます。


## まとめ
In-Placeアルゴリズムは、メモリ効率性とパフォーマンスを高めるために重要です。イミュータブルなアプローチとin-placeアルゴリズムを組み合わせることで、データの安全性や効率性を向上させることができます。
[React] Create React App（CRA）またはViteを使用したプロジェクトの作成方法

# まとめ
>ViteとCreate React App（CRA）は、Reactプロジェクトを作成するための人気のあるツールです。それぞれのツールを使用してReactプロジェクトを作成する方法を以下に示します。

※mdn web docsより

# 目次
- [Create React Appを使用したプロジェクトの作成](#CreateReactAppを使用したプロジェクトの作成)
- [Viteを使用したプロジェクトの作成](#Viteを使用したプロジェクトの作成)


# Create React Appを使用したプロジェクトの作成

~~~shell:terminal
npm install -g create-react-app
~~~

~~~shell:terminal
create-react-app my-react-app
~~~

#### 解説
1. Create React Appをグローバルにインストールします（すでにインストールしている場合はこの手順は不要です）
1. 新しいReactプロジェクトを作成します
1. これにより、my-react-appという名前の新しいディレクトリが作成され、Reactプロジェクトが初期化されます

# Viteを使用したプロジェクトの作成

~~~shell:terminal
npm install -g create-vite
~~~

~~~shell:terminal
create-vite my-react-app --template react
~~~

#### 解説
1. Viteをグローバルにインストールします（すでにインストールしている場合はこの手順は不要です）
1. 新しいReactプロジェクトを作成します
1. これにより、my-react-appという名前の新しいディレクトリが作成され、Reactプロジェクトが初期化されます

# 参考リンク
- [Viteとは何？Viteやcreate-react-appで使うコマンドを全て紹介](https://senseiengineer.com/programming/1738/#:~:text=React%20%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AB%E3%81%8A%E3%81%84%E3%81%A6%E3%80%81%E3%81%8B%E3%81%AA%E3%82%8A%E9%AB%98%E9%80%9F%E3%81%A7%E5%8B%95%E4%BD%9C%E3%81%99%E3%82%8B%20CLI%E3%83%84%E3%83%BC%E3%83%AB%E3%81%AE%E3%81%93%E3%81%A8%E3%81%A7%E3%81%99%E3%80%82%20%E5%BD%B9%E5%89%B2%E3%81%AF%20create-react-app,%E3%81%A8%E5%90%8C%E3%81%98%E3%81%A7%E3%81%99%E3%80%82%20Evan%20You%E3%81%A8%E3%81%84%E3%81%86%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E9%96%8B%E7%99%BA%E3%81%95%E3%82%8C%E3%81%9F%E3%82%88%E3%81%86%E3%81%A7%E3%80%81%E3%81%93%E3%81%AE%E4%BA%BA%E3%81%AF%20Node.js%20%E3%81%AE%E9%96%8B%E7%99%BA%E8%80%85%E3%81%A7%E3%82%82%E3%81%82%E3%82%8B%E3%81%9D%E3%81%86%E3%81%A7%E3%81%99%E3%80%82)
Gitで特定のコミットまで戻る方法　(git reset)

# 初めに
Webアプリの保守をするために前のコミットに戻る必要があったのでその方法を調べました。
その方法を紹介します。
# 開発環境
macOS Sonoma 14.4.1
# Gitで特定のコミットに戻る方法
ログを確認後リセットをします。
まずログを確認してどのコミットに戻るのかハッシュ値を特定します。
```
git log
```
をwebアプリのプロジェクト内で実行します。
その後

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682713/bcf49831-9c5a-2252-1b0b-6f3a6893bb98.png" width=70%>

こんな感じでgitのログを確認できます。
<font color="Gold">
commit
</font>
の文字の横にあるハッシュ値を覚えておいてください。
その後
```
git reset --hard ハッシュ値
```
ハッシュ値を「ハッシュ値」に入れて上記を実行してください
これで完了です。
お疲れ様でした。
# 参考文献

https://qiita.com/alpha_z/items/e0e969d961b17a359e19

この記事を参考にさせていただきました。
ありがとうございました。
intra-mart IM-BISにおける定義反映と自動カラム生成

intra-martのIM-BISは、業務プロセスの効率化を目指す多くの企業で利用されているフレームワークです。
このプラットフォームでは、定義反映を通じてデータベースのテーブルやカラムを自動生成することが可能です。
特に、PostgreSQLを使用する際のテーブルカラムの上限とともに、この自動化機能の理解が重要です。

## IM-BISの定義反映機能

IM-BISでは、ビジネスロジックをモデル化し、それを基にデータベースのテーブルやカラムを自動生成します。
このプロセスは、開発者が手動でSQLスクリプトを書く手間を省き、一貫性と正確性を向上させるためのものです。

### 自動カラム生成のメカニズム

IM-BISを使用する際、データモデルを定義すると、それに基づいて必要なテーブルやカラムが自動で作成されます。このとき、以下の点を考慮する必要があります。

1. **データモデルの精度**: データモデルが正確であればあるほど、生成されるテーブルやカラムも期待通りのものとなります。
2. **属性の指定**: 各フィールドのデータ型や制約を正確に指定することで、自動生成されるカラムが最適な設定となります。

## PostgreSQLのカラム数上限との関連性

PostgreSQLでは、テーブルあたり最大1600カラムまでという制限がありますが、IM-BISでの自動生成機能を使用する場合、この制限に特に注意する必要があります。特に、以下の点を検討することが重要です。

1. **カラム数の見積もり**: 自動生成されるカラムの数が多い場合、PostgreSQLの上限に近づくことがあります。そのため、データモデル設計時にはこの上限を意識することが求められます。
2. **データ型の選択**: データ型によっては、カラム数より行のサイズに影響が出ることもあります。適切なデータ型の選択が、パフォーマンスと効率の向上につながります。

## 設計上の考慮事項

IM-BISを使用して効率的なデータベースを構築するためには、以下のポイントを考慮することが推奨されます。

- **正規化と分割**: 自動生成されるテーブルやカラムが多い場合は、データの正規化や適切な分割を行い、管理の複雑さを減らすことが有効です。
- **パフォーマンス最適化**: 必要なカラムのみをクエリに含め、過剰なデータアクセスを避けることで、全体のパフォーマンスを向上させます。

## まとめ

intra-martのIM-BISを使用することで、定義反映を通じてデータベースのテーブルやカラムを自動生成することが可能ですが、PostgreSQLのカラム数の上限といったデータベースの制限も理解しておく必要があります。
AWSを基本的にまとめてみた【Config】

## Config とは？

- AWSリソースの設定変更の追跡やコンプライアンスの遵守状況の評価などを行うサービスで、AWSリソースが『いつ』『どの設定が』変更されたのかを記録することができる。

例: S3バケットのアクセスポリシーが変更された場合は、Configが変更を検知して、変更内容をログに記録する。

## Config ルールとは？

- AWSリソースの理想の構成をルールとして定義して、アカウント内のリソースがルールに準拠しているか自動で確認する。
- Configルールによって特定できる問題には、セキュリティグループの不適切な設定、S3バケットのパブリックアクセス設定などがある。

## Config アグリゲータとは？

- 複数のAWSアカウントのConfigルールの評価結果を集約、分析するためのサービスで、評価結果を単一のAWSアカウントに集約して一元管理することができる。


## 参考サイト
[【AWS Config】ソリューションアーキテクト アソシエイト(SAA) 第37回講座](https://www.youtube.com/watch?v=Jf0bwWBiDyc)
Optional Chaining 演算子とは？

## はじめに
Optional Chaining 演算子は、JavaScript と TypeScript で利用できる便利な機能の一つです。この演算子を使用することで、オブジェクトのプロパティやメソッドに安全にアクセスできます。特に、プロパティやメソッドのチェーンで null や undefined が含まれる可能性がある場合に役立ちます。

## なぜ Optional Chaining 演算子が必要なのか？
従来の JavaScript や TypeScript では、プロパティやメソッドに安全にアクセスするためには、煩雑な条件文や三項演算子を使用する必要がありました。しかし、Optional Chaining 演算子を利用することで、このようなコードをシンプルに記述することができます。

## 使用方法と例
Optional Chaining 演算子は、?. の形式で記述します。以下に具体的な使用方法と例を示します。

```ts
let user = {
  name: "John",
  address: {
    city: "New York",
    zipcode: 12345
  }
};

// 安全なプロパティアクセス
let cityName = user.address?.city; // "New York"
let country = user.address?.country; // undefined

// 安全なメソッド呼び出し
let greet = user.sayHello?.(); // undefined

// Optional Chaining を使用した条件式
if (user.address?.zipcode) {
  console.log("Zipcode exists!");
} else {
  console.log("Zipcode is not available.");
}
```
## 注意点と使いどころ
Optional Chaining 演算子は、オブジェクトのプロパティやメソッドに安全にアクセスするための便利な手段ですが、注意点もあります。例えば、?. を使用すると null や undefined が返される可能性があるため、それに対応できるようにコードを設計する必要があります。

使いどころとしては、API データやオブジェクトの取得時に、プロパティが存在しない可能性のある場合に Optional Chaining 演算子を活用することが多いです。

これにより、冗長な条件文を回避し、コードをよりシンプルで読みやすくすることができます。
Go言語でテストごとにデータベースを空にする方法

## はじめに

今回は、ポートフォリオ開発で作成したテストの中で、DBを用いたテストでした工夫を紹介します。

今回作成したコードはGithubにpushしてあるので参考程度にどうぞ

https://github.com/piny940/portfolio

ポートフォリオはこちらから確認できます。

https://www.piny940.com


## 解決策
各テストごとにトランザクションを張り、テストが終わったらロールバックすることで、データベースのデータを空にすることができます。

まず、テスト開始時にテスト用のデータベースに接続をします。

```go
func TestMain(m *testing.M) {
	dsn := fmt.Sprintf("user=%s password=%s host=%s dbname=%s sslmode=%s",
		os.Getenv("DB_USER"), os.Getenv("DB_PASSWORD"), os.Getenv("DB_HOST"),
		os.Getenv("DB_NAME"), os.Getenv("DB_SSLMODE"))
	dbClient, _ = sql.Open("postgres", dsn)
	code := m.Run()
	os.Exit(code)
}
```

テストごとにトランザクションを張り、テストが終わったらロールバックするようにします。

```go
func setup(t *testing.T) {
	t.Helper()
	t.Cleanup(teardown)
	tx := dbClient.Begin()
	db = &DB{Client: tx.Debug()}
}

func TestHoge(t *testing.T) {
  setup(t)
  // 以降テスト処理を記述
}
```

これで、テストごとにデータベースのデータを空にすることができました。

## 課題の背景

ポートフォリオのバックエンドのディレクトリ構成は次のようになっていて、`db`packageの中でデータベース周りの処理を行っていました。

<details>
<summary>ディレクトリ構成</summary>
```plaintext
.
├── Dockerfile
├── auth
│   └── jwt.go
├── config
│   ├── environments
│   │   ├── development.yaml
│   │   └── production.yaml
│   └── init.go
├── db
│   ├── action.go
│   ├── blog.go
│   ├── blog_test.go
│   ├── init.go
│   ├── init_test.go
│   ├── page.go
│   ├── project.go
│   ├── project_test.go
│   ├── tech_stack.go
│   ├── technology.go
│   └── technology_test.go
├── domain
│   ├── blog.go
│   ├── models_gen.go
│   ├── project.go
│   ├── project_test.go
│   ├── tech_stack.go
│   └── technology.go
├── go.mod
├── go.sum
├── gqlgen.yml
├── graph
│   └── generated.go
├── loader
│   ├── blog.go
│   ├── blog_test.go
│   ├── dataloader.go
│   ├── project.go
│   ├── project_test.go
│   ├── technology.go
│   └── technology_test.go
├── main.go
├── registry
│   └── registory.go
├── resolver
│   ├── auth.go
│   ├── blog.go
│   ├── common.go
│   ├── project.go
│   ├── resolver.go
│   ├── tech_stacks.go
│   └── technology.go
├── schema
│   ├── auth.gql
│   ├── blog.gql
│   ├── project.gql
│   ├── schema.gql
│   ├── tech_stacks.gql
│   └── technology.gql
├── server
│   ├── auth.go
│   ├── cors.go
│   ├── graphql.go
│   └── init.go
├── tools
│   └── tools.go
└── usecase
    ├── blog.go
    ├── project.go
    ├── project_test.go
    ├── tech_stack.go
    └── technology.go
```
</details>

`domain`や`usecase`などのpackageのテストはdbのmockを作ってユニットテストを行っていたのですが、`db`packageのテストをするためにはテスト時に直接接続するテスト用のデータベースが必要でした。

単にデータベースを作るだけであればテスト用のデータベースを用意すればいいだけなのですが、テストごとにデータベースのデータを空にしないといけないという課題がありました。

## まとめ

今回はテスト用のデータベースを構築して、テストごとにデータベースのデータを空にする方法を紹介しました。

今後はこのテスト用のデータベースを使ってE2Eテストをちゃんと書いていきたいですね
Dockerビルド時 Virtualization Framework が有効だと Segmentation Fault を起こして失敗する件について

## **概要**

macOS上 で Docker Desktop の Virtualization Framework を有効にしている際に Segmentation Fault によるエラーでビルドが失敗する問題について説明します．
先に結論（追記欄にも記載）を申し上げますと，「**Use Rosetta for x86/amd64 emulation on Apple Siliconがオンになっていれば解決**」できます。
## **経緯**

2024/02/01にリリースされた [Docker 4.27.1](https://docs.docker.com/desktop/release-notes/#4271) にアップデート． その後ビルドが通らなくなり，[Docker 4.27.0](https://docs.docker.com/desktop/release-notes/#4270) へダウングレードを実行． しかし，依然として同じビルドエラー(Segmentation Fault)が発生．なにかメモリアクセスに問題があるのか．．．

ここで，[Virtualization Framework](https://cockscomb.hatenablog.com/entry/container-development-on-macos-with-virtualization-framework) が悪さをしている可能性を見つけました．([参考](https://zenn.dev/alcnaka/articles/1c26387722a371)) Dockerをアップデートした時に，Docker desktop の設定で Virtualization Framework が有効になっていたと考えられます．

## **原因**

Docker DesktopのVirtualization Framework が有効になっていること． この機能は，macOS 12.5以降で利用可能であり，コンテナのパフォーマンス向上を目的としていますが，特定のビルドプロセスにおいて互換性の問題を引き起こす可能性があります．

## **解決策**

問題の解決のため，以下の手順を踏みました：(最善の解決策は"追記"をご覧ください)

1. Docker Desktopの設定を開き，"Use Virtualization framework"のチェックを外して無効にする． この時，Choose file sharing implementation for your containers にて，VirtioFS 選択中ではチェックが外せないので，それ以外の gRPC FUSE，osxfs (Legacy)のどれかを選びます．今回は gRPC FUSE を選びました．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791122/21897f42-9d7d-3382-3fed-fb261f53a622.png)


2.Docker Desktopを再起動する． 再びビルドを実行し，問題が解決したことを確認します．

## **結論**

Virtualization Frameworkは，特定の環境下でビルドプロセスに影響を及ぼす可能性があるため，ビルドに失敗する場合は，この機能を無効にしてみることが推奨されます．

### 追記

Use Rosetta for x86/amd64 emulation on Apple Siliconがオンになっていれば問題ない。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3791122/764bf741-0ba3-c032-f2ee-14e76719d392.png)

## **備考**

1. VirtioFS

> VirtioFSは，最新の技術であり，macOS 12.5以降で使用可能です．バインドマウントの操作に関するI/Oパフォーマンスの向上を目的としています．この実装は，Virtualization Frameworkを利用しており，高速なファイルアクセス速度を提供します． 推奨される使用シナリオ: 高いI/Oパフォーマンスが必要な場合や，最新の技術を利用して開発環境を最適化したい場合に適しています．macOS 12.5以降を使用しているユーザーに推奨されます．
> 
1. gRPC FUSE

> gRPC FUSEは，安定性と互換性を提供する比較的新しい実装です．従来のosxfsよりもパフォーマンスが向上していますが，VirtioFSほどではありません．しかし，ほとんどの開発ワークロードで良好に機能します． 推奨される使用シナリオ: 一般的な開発用途で，安定性と適度なパフォーマンスが求められる場合に適しています．また，macOSの古いバージョンを使用しているユーザーや，Virtualization Frameworkを使用できないユーザーにも適しています．
> 
1. osxfs（レガシー）

> osxfsは，Docker Desktop for Macの初期バージョンで使用されていたファイル共有実装です．他の2つのオプションに比べてパフォーマンスが劣りますが，一部のレガシーシステムや特定の互換性の問題に対処する場合に依然として有用です． 推奨される使用シナリオ: 特定の古いプロジェクトや，新しいファイル共有実装で問題が発生する特殊なケースに対応する必要がある場合に適しています． 選択にあたって パフォーマンス重視: VirtioFSを選択します（macOS 12.5以降で利用可能）． バランスの取れた選択: gRPC FUSEを選択します．多くの場合，良好なパフォーマンスと互換性を提供します． レガシーな互換性が必要: osxfsを選択します．ただし，このオプションはパフォーマンスが低下する可能性があるため，特定の理由がない限り他のオプションを推奨します．
>

# 参考文献
"macOS上のDocker Desktopでviteを実行しようとするとSegmentation Faultが起きる," https://zenn.dev/alcnaka/articles/1c26387722a371,(Accessed on 2024/02/15)
ここが変だよ SC/MP-II CPU

# 概要
- いにしえの 8bit CPU NS製 SC/MP-II に関する記事です。
- C言語でCPUエミュレータを書いて、NIBL BASICを動かしてみました。
- ソースコードは公開です。
  https://github.com/iruka-git/SCMP2Emulator

# SC/MP-II CPUは、どこが変であるかを簡単にご説明
- 8bit CPUなのに、16bitポインタが4つもある。
- ところが P0 P1 P2 P3 （と勝手に命名）のポインタのうち、最初のやつ P0 は実はプログラムカウンタであること。
- これら４つは統一的に扱われている。（PC相対とPTR相対は命令コード内では同じ扱い）
- 相対オフセット値は命令コードのオペランド(8bit)で指定するので、PTR[127]～PTR[-128]までのメモリーが演算対象になったり、ロード、ストア命令が使えたりする
- 最近分かったこと：PC以外のP1～P3も、分岐命令の飛び先に使用できる(+-127)
- それ以外のアドレッシングモードがない。（即値 8bitは存在）
- :
- ところで、相対オフセット値が 0x80 (-128) だけ特別扱いで、その場合のみ PTR相対のオフセットは定数ではなく、Eレジスタ(8bit)で代用されるんだ。（知らんがなそんなこと）
- また、オートインデックスという不思議なアドレッシングモードを持っていて、相対オフセットでメモリーアクセスしたあとで、インデックスレジスタが実効アドレスに変化する、というやつがある。
- これは68000やPDP-11などにもみられる奴だけど、一つ注意があって
- 相対値が負の時はフェッチされるデータはPTR＋相対オフセットのメモリーになるんだけど
- 相対値が正の時はフェッチされるデータはPTR＋00 のメモリーになる。
- もちろん命令実行後は PTR は オフセット値が加減算される。
- 使い方によってはスタックポインタ的に使えなくはない。
- :

# エミュレータは、なんですんなりと動かなかったの？
- 上記のオートインデックスの実装が間違っていたこと
- 相対オフセットが 0x80 のときに相対値をEレジスタにすり替える実装をしていなかったこと
- ななんと、ステータスレジスタの初期値が 0x20 (out B=1) でないと、NIBL BASICは動きません。（知らんがな）

# このCPUのだめなところ
- 上記の16bitポインタへのアクセス(LD,ST)が存在しない（！？？）
- Aレジスタ(8bit) と、ポインタの上位あるいは下位とをエクスチェンジ（交換）することだけが許されている。（XPAL P1, XPAH P2 など）
- 8bit オフセットを超えるジャンプ命令が存在しない
- それどころか、一般的なCPUに存在するはずの、CALL/RET 命令が存在しない
- （代わりに、ミニコン時代の XPPCという、ポインタとPCを交換する命令だけが存在）
- 遅い。とっても遅い。どれくらい遅いかというと、外部クロック1MHzで仮に動かした場合、典型的な即値8bit を Aレジスタに与える 2byte命令 (LDI #0xNN) の実行時間は72クロック(72マイクロ秒)・・・絶句します

# 追伸
- NIBL BASIC は、ロストテクノロジーで書かれたアセンブラなので、解読はおそらく無理です。（SC/MP-IIのアセンブラをすらすら読める人でも）

- 上記以外にも変なところはいっぱいあって、たとえば
- プログラムカウンタはフェッチ直前に＋１される。これにより、リセット直後の０番地は永遠に実行されない。
- XPPC命令でロングジャンプしたときも、飛び先の命令フェッチ直前に＋１される。なので、実際のエントリーアドレス－１をPTRに入れておく必要がある。
- 引き算の代わりにコンプリメンタリーADD（引く数のビットを反転しただけで加算）で代用している（つまり２の補数ではなく１の補数）。なので、キャリーフラグの意味が普通のALUと逆になる。
- :

で、SC/MP-IIIでは、まともになったの？
- SC/MP-III用のNIBL BASICをエミュレータで動かせないか試行中です。→うごきました
- SC/MP-IIIは EレジスタとAレジスタを連結して16bitレジスタとして使えるようになりました。
- ポインタオフセットが0x80(-128)だったときに、オフセット値をEレジスタの内容に読み替える処理は、無くなりました。
- 6800/6502系のゼロページアドレッシングに近い、FFxxページの256バイトを直接参照するダイレクトアドレッシングが出来るようになりました。
- ポインタ P1 がスタックポインタになり、16bit 絶対番地指定のJSR命令やJMP命令 が追加されました。
- 乗除算用にTレジスタ(16bit)が追加され、16bitの乗算/除算命令がそれぞれ追加されています。

# ここが変だよ SC/MP-III CPU
- ついでなので、SC/MP-III エミュレータとか、独自言語を入れてみて、だめだったことを追記します。

まず、独自言語Asmpp3 を公開しています。

SC/MP-III CPU 用のマシン語モニタ：
https://github.com/iruka-git/SCMP3monitor

SC/MP-II用も書きました。独自言語Asmpp2 を公開しています。

SC/MP-II CPU 用のマシン語モニタ：
https://github.com/iruka-git/SCMP2monitor

# SC/MP-IIIのどこがだめ？
- 比較命令(cmp) がない。減算で代用。（できるか！A regが毎回壊れる。）
- 大小比較の結果の取得や分岐が大変面倒。条件分岐命令が A regの内容でしか分岐できない。しかも条件分岐命令は BZ、BNZ、BP (Aregが正) の３個のみ。
- さらに 16bitレジスタ EA の値を大小比較しようとすると、もっと面倒なことに・・・

- まあ、それ以外は、可もなく不可もなく、16bit同士の乗除算命令がある8bitレガシーCPUは珍しいんですけどね。・・・

# おまけ
- 2024年版、NIBLFP_2024 BASIC も、ついでに動かしてみました。
https://github.com/iruka-git/SCMP2_NIBLFP_2024BASIC

- 最初、動かなかったんですが、まさか、分岐命令のPC相対オフセットが、PC以外でも使えるなんて・・・ （JZ 12(P3) など） 夢にも思わなかったわ。

# 参考
SC/MP使いの憂鬱
https://electrelic.com/electrelic/node/1299
NFT(Non-Fungible Token)について

今回の記事は「NFT」です！

以前「DApp」の記事を書かせてもらったのですが
その中で出てきた「NFT」について
「正直良く分からない」と思いましたので、
ここで纏めさせてもらいます。

「DApp」の記事をまだ見ていないという方は、良ければ下記URLより参照ください
前回の記事>

https://qiita.com/ydclab_0008/items/9d2a4e44941d33c6ee00

<br>
「NFT」とは「<font color="red"><B>Non-Fungible Token</B></font>」の略で
日本語にすると「<font color="orange"><B>非代替性トークン</B></font>」となります。
<br><br>

では、
まず初めに「NFT」とはどういう物なのかを纏めていきたいと思います。

## ■「NFT」とは
　デジタルデータを資産として価値のある物とする為の技術で、
　デジタルデータの一意性と所有権、取引履歴を確立します。

　デジタルデータの一意性を確立するために、
　ブロックチェーンの技術が使用されています。
<br><br>

## ■何故「NFT」なのか
　一般的なデジタルデータは基本的にコピー可能で、
　コピーされた場合、オリジナルとコピー先の判別はつきません。
![02_NFT_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633696/fa133331-5757-cda0-f579-c2d04c3c4267.png)

　さらにデジタルなので基本的に劣化しない為、
　コピーされれば幾らでもコピー品が存在することになり
　希少性もありません。
![02_NFT_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633696/ab1f3834-acb1-ae15-1963-ab0fc12c0c9c.png)


　このようなデジタルデータを、
　「<font color="red">**資産として価値のあるデジタルデータ**</font>」（デジタルアセット）
　として扱うことが出来る様にしたのが「NFT」という事になります。
<br><br>

## ■良く分からないんだけど・・・
　ラッセンのリトグラフを例にすると分かり易いかもしれません。

　ラッセンのリトグラフには
　011/200の様にシリアルナンバーが発行されています。

　世界に200枚しかない内の1枚という希少性に価値が生まれます。

　ラッセンのリトグラフをカラーコピーしたような物も
　お安く売られていたりしますが、
　本物のリトグラフの価値が影響を受けることはありません。

　全く同じ絵に見えても、
　一意性と取引履歴を確立する事により
　本物を所持するという価値につながるわけです。

![02_NFT_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2633696/8073e8bd-bd1b-4a65-f116-8c279490db13.png)


　これのデジタル版が「NFT」という訳です。



## ■最後に
　「NFT」はデジタルデータに一意性と履歴性を持たせることが出来ます。
　そのことによって
　<font color="red">**デジタルデータを資産価値のある物に出来る様になった**</font>
　という事をご理解いただけたと思います。

　現在はデジタルアートの取引や
　ネットゲームのオリジナルアイテムの管理等で
　既に活用され始めていますが、
　今後はヴァーチャル空間内の資産管理（仮想の家や土地、自身のアバター等）や
　現実世界の資産（絵画などの一意性の高い物）のデジタル管理に
　幅広く活用されていくと予想されます。

　という事で、「NFT」を纏めてみたのですが、
　意外と面白い技術で、近い将来すごく身近にある技術になりそうだと感じました。

　是非、この記事を今後の参考にしていただければ幸いです。
PowerAutomate 配列形のstring to 配列

# input
string :
"[{"id":1,"name":"Jack"},{"id":2,"name":"Mary"}]"

# output
array :
```
[
  {
    "id":"001",
    "name":"Jack"
  },
  {
    "id":"002",
    "name":"Mary"
  }
]
```
# 解決方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/ce9edf6a-6641-6e7e-3fc0-00b2b14daacb.png)

Jsonの解析のスキーマの書き方
```
{
    "type": "array",
    "items": {
        "type": "object",
        "properties": {
            "id": {
                "type": "number"
            },
            "name": {
                "type": "string"
            }
        }
    }
}
```

# 実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/368087/0d081cf6-4e28-7762-38fc-6eff35ceef1f.png)


# 参考サイト
https://idea.tostring.jp/?p=6412
macOSにRubyの最新バージョンをインストール

ふとRubyを触ろうと思った時にバージョンを確認すると、なかなか古いバージョンだったのでアップデートしようとしました。
rbenvというツールを使って複数バージョンが共存可能とのことだったの、それを使ってアップデートではなく最新版をインストールしていきます


# 環境
OS : macOS14.4.1
Homebrew : 4.2.21
shell : zsh

Homebrewは既にインストール済み、最新版にアップデート済みの前提で書いていきます。
Homebrewをインストールしていない場合は[こちら](https://qiita.com/ynack/items/e9151819461590678bf5)を参考にどうぞ。


# SystemのRubyのバージョン確認
作業を始める前にデフォルトのrubyのバージョンを確認します。
``` :バージョン確認
%  ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
```

2.6.10p210で2022年4月12日のバージョンのようです。
2022年4月だとmacOS12の時代ですね。

# rbenvのインストール
今はrbenvを使って開発を進めるのが主流（？）のようなので、こちらをインストールするところから始めます。
rbenvについてざっくり理解するのにこちらを参考にさせていただきました。

https://mogulla3.tech/articles/2021-07-10-understanding-rbenv-1/

``` :rbenvインストール
% brew install rbenv
```
色々とインストールされて少々時間がかかります。
入力が戻ってきたらバージョン確認してみます。
```:rbenvバージョン確認
% rbenv -v
rbenv 1.2.0
```
バージョンが表示されれば完了です。

シェルにrbenvの初期設定が必要なようなので設定します。
```:rbenv初期設定
% echo 'eval "$(rbenv init -)"' >> ~/.zshrc
% source ~/.zshrc
```
1行目で~/.zshrcに初期設定の書き込み、2行目で設定を反映させています。
もしシェルでBashを使用している場合は1行目の _~/.zshrc_ が _~/.bashrc_ になるので注意してください。

# Rubyのインストール
Rubyをインストールしていきます。まずはインストールできるバージョンを確認しましょう。
```:インストールバージョン確認
% rbenv install --list
3.0.7
3.1.5
3.2.4
3.3.1
jruby-9.4.7.0
mruby-3.3.0
picoruby-3.0.0
truffleruby-24.0.1
truffleruby+graalvm-24.0.1

Only latest stable releases for each Ruby implementation are shown.
Use `rbenv install --list-all' to show all local versions.
```
1行目のrbenv install install --listでインストール可能リスト一覧が確認できます。
私の環境では上記のようなリストが表示されましたが、数字のみ書かれているのがRubyです。
最後に書かれているように、 _--list-all_ で実行すると過去バージョンやプレビューバージョンを含めすべてのバージョンが確認できます。
旧バージョンを使用したい場合はこちらで確認してください。

最新の安定版は3.3.1のようなので、今回はこれをインストールしていきます。
```:ruby3.3.1のインストール
% rbenv install 3.3.1
ruby-build: using openssl@3 from homebrew
==> Downloading ruby-3.3.1.tar.gz...
-> curl -q -fL -o ruby-3.3.1.tar.gz https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.1.tar.gz
・
・
・
==> Installed ruby-3.3.1 to /Users/xxx/.rbenv/versions/3.3.1

NOTE: to activate this Ruby version as the new default, run: rbenv global 3.3.1
```

以上でインストールは完了です。

# 使用バージョンの変更
rbenvをインストールしたことでrubyの複数バージョンが共存可能になっていますが、インストールが完了しただけではまだシステムのrubyを使用する状態になっています。
インストールしたバージョンに変更していきます。

```:rubyのデフォルトバージョン確認
% rbenv versions
* system
  3.3.1
```
行頭に __*__ がついているものがデフォルトのバージョンです。
まだシステムのバージョン（2.6.10）が選択されています。
ruby -vを実行してもそちらのバージョンが表示されるはずです。
```
% ruby -v
ruby 2.6.10p210 (2022-04-12 revision 67958) [universal.x86_64-darwin23]
```

これを変更するには以下を実行します。
```
% rbenv global 3.3.1
```
実行したら改めて _rbenv versions_ を実行します。
```
% rbenv versions
  system
* 3.3.1 (set by /Users/yosuke/.rbenv/version)
```
__*__ の場所が3.3.1の前に変わりました。

ruby -vの結果も変わっています。
```
% ruby -v           
ruby 3.3.1 (2024-04-23 revision c56cd86388) [x86_64-darwin23]
```
もし変わっていない場合はターミナルの新規ウィンドウを開いて _ruby -v_ を実行してみてください。
これで表示が変わるはずです。

以上でmacOSでのrubyのバージョンアップは完了です。
Stripe Connectに対応している日本の銀行一覧をまとめてみた。

## Stripeは対応している日本の銀行一覧を公開しろーーーーーー！！！

こんにちは
自分はよくStripe を利用しているのですがいつも思うことがあります。
ネット銀行をよく使う自分にとって、「楽天銀行だめ、セブン銀行だめ、paypay銀行だめ。あれもだめ、これもだめ、ダメダメダメダメ！」
じゃあ何が使えるねん！って話です。
しかもStripeは銀行表がないのでわっかりにくい。。。。。
そこでフロントエンドの通信履歴をを割り出して表にしてみました。
```
curl 'https://connect.stripe.com/ajax/suggest/japan_bank?bank=&filter_strategy=exclude_non_swift_banks'|jq -r '.banks[].name'
```
では説明は抜きにしてリストを公開します。どうぞ！
## Stripe Connectに対応している日本の銀行一覧
- 愛知銀行
- あおぞら銀行
- 青森銀行
- 秋田銀行
- 朝日信用金庫
- 足利銀行
- 尼崎信用金庫
- バンク・オブ・アメリカ・エヌ・エイ
- 阿波銀行
- イオン銀行
- 池田泉州銀行
- 伊予銀行
- 岩手銀行
- ＳＢＩ新生銀行
- ＳＢＪ銀行
- 愛媛銀行
- 大分銀行
- 大垣共立銀行
- 大阪シティ信用金庫
- 岡崎信用金庫
- 沖縄銀行
- 沖縄海邦銀行
- 香川銀行
- 鹿児島銀行
- 神奈川銀行
- 関西みらい銀行
- 北九州銀行
- 北日本銀行
- 紀陽銀行
- 京都銀行
- 京都信用金庫
- 京都中央信用金庫
- きらぼし銀行
- きらやか銀行
- 岐阜信用金庫
- 熊本銀行
- 群馬銀行
- 京葉銀行
- 高知銀行
- 西京銀行
- 埼玉りそな銀行
- 佐賀銀行
- 山陰合同銀行
- 三十三銀行
- 滋賀銀行
- 四国銀行
- 静岡銀行
- 七十七銀行
- シティバンク、エヌ・エイ
- 清水銀行
- 商工組合中央金庫
- 荘内銀行
- 信金中央金庫
- ジェー・ピー・モルガン・チェース・バンク・ナショナル・アソシエーション
- 十八親和銀行
- 十六銀行
- 城南信用金庫
- 常陽銀行
- 巣鴨信用金庫
- 住信ＳＢＩネット銀行
- スルガ銀行
- 西武信用金庫
- 瀬戸信用金庫
- 仙台銀行
- 全国信用協同組合連合会
- ソニー銀行
- 大光銀行
- 但馬銀行
- 多摩信用金庫
- 第四北越銀行
- 大東銀行
- 大和ネクスト銀行
- 筑邦銀行
- 千葉銀行
- 千葉興業銀行
- 中京銀行
- 中国銀行
- 筑波銀行
- 東京スター銀行
- 東京東信用金庫
- 東邦銀行
- 東北銀行
- 東和銀行
- 徳島大正銀行
- 栃木銀行
- 鳥取銀行
- トマト銀行
- 富山第一銀行
- ドイツ銀行
- 長野銀行
- 名古屋銀行
- 南都銀行
- 西日本シティ銀行
- 日本カストディ銀行
- 日本マスタートラスト信託銀行
- 農林中央金庫
- 野村信託銀行
- 八十二銀行
- 浜松磐田信用金庫
- 東日本銀行
- 肥後銀行
- 百五銀行
- 百十四銀行
- 広島銀行
- ビー・エヌ・ピー・パリバ銀行
- 福井銀行
- 福岡銀行
- 福島銀行
- 福邦銀行
- 豊和銀行
- 北都銀行
- 北洋銀行
- 北陸銀行
- 北海道銀行
- 北國銀行
- 香港上海銀行
- みずほ銀行
- みずほ信託銀行
- 三井住友銀行
- 三井住友信託銀行
- 三菱ＵＦＪ信託銀行
- 三菱ＵＦＪ銀行
- みなと銀行
- 南日本銀行
- 宮崎銀行
- 宮崎太陽銀行
- 武蔵野銀行
- もみじ銀行
- 山形銀行
- 山口銀行
- 山梨中央銀行
- 横浜銀行
- 横浜信用金庫
- りそな銀行
- 琉球銀行
ete...他にもあったらコメント欄などで教えて下さい！
## 最後に
はあ、はあ、はあ、終わりました。。。。
他にも使える銀行や逆に使えない銀行があったらコメント欄などで教えて下さい！
国外銀行も含めろって言われたらぶっ飛ばします。
やめてー
今回リストアップを手動でやったら痙攣するのでチャットGPTに依頼してマークダウンのリストをお願いしました。
それでもすぐには終わらなくて１０分ぐらいかかりましたがね。
手動でやろうと思った自分をぶっ飛ばしたいです。はい。
それじゃ！
## ヒント
クロームをお使いの方はページ検索を使うのが楽です。
詳しくは以下のリンクにて解説されています。
[Chromeにてページ内検索をする方法](https://dekiru.net/article/21289/)
Macのログイン時にアプリケーションを自動で開く設定をする方法


毎日仕事を始めるとき、同じアプリケーションを開いて、同じサイトを立ち上げるの、面倒ですよね……
そんなめんどくさがりさんにおすすめの設定をご紹介します。

## 目次
1. Macでログインした時に、いつも使っているアプリケーションを自動で起動する
2. Chromeでログインした時に、いつも開いているタブを自動で展開する

## 1. Macでログインした時に、いつも使っているアプリケーションを自動で起動する

1. 「システム環境設定」を開く
2. ログイン項目と検索する
3. 追加したいアプリケーションを「ログイン時に開く」の項目に追加する（＋ボタン）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776396/01d932c9-ffcc-cae6-5b52-ea6a449a6cfe.png)


## 2. Chromeでログインした時に、いつも開いているタブを自動で展開する

1. ウィンドウ右上の「・・・」をクリック
2. 「設定」を開く
![test2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776396/d2cc1187-f52f-4271-b1e1-612d2628ced0.png)
3. 「起動時」を選ぶ
4. 「特定のページまたはページセットを開く」 
5. 「新しいページを追加」からURLを追加
![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3776396/1515828c-c1e4-bd44-fa10-bfcd79c69938.png)
データベースのLongActionがリリース。メリットや注意点は？

# はじめに
Workatoの、4月の製品アップデートはチェックしましたか？

製品スクープ – 2024 年 4 月

https://www.workato.com/product-hub/product-scoop-april-2024/

興味を引くトピックがいろいろありますが、その中でも特に有用と感じた、**データベースのLongActionのリリース**にフォーカスしたいと思います。



# データベースのLong actionが有効になった
アップデート内容を直訳すると

>’’データベースのLong actionでは、タイムアウト制限を 120 分としてクエリ実行時間を延長できるようになりました。
>データベースのLong actionは現在、Snowflake、PostgreSQL、MySQL、Oracle で利用できます。’’


ですが、整理すると次の通りです。

- データベース操作系の Snowflake、PostgreSQL、MySQL、Oracleのコネクターの下記アクションにLong actionが適用された。
  - 「Run long query using custom SQL action  (カスタム SQL を使用して長いクエリを実行する)」
  - 「Export query result (クエリ結果をエクスポートする)」
- これらのアクションは、応答に時間がかかっても、指定した上限時間まではタイムアウトしなくなった。(最大120分)



# そもそもLong actionって？
Workatoでは通常、１つのステップや１つのジョブの実行に時間がかかりすぎると、タイムアウトエラーとなり、JOBが失敗してしまいます。

現在のタイムアウトの制限は、１つのステップ では 90秒、1つのジョブでは 90分となっています。



そうは言っても、応答に90秒以上かかる処理(ステップ)はままありますよね。

そこで、**ジョブを一時的に保留して、非同期で処理を行う**アクションがあります。
Long actionと呼ばれ、大量データの処理や、Workbotでユーザーの応答を待機する仕組みでも用いられています。


どのコネクターの何のアクションがLong actionに該当するかは、公式ドキュメントで確認できます。

https://docs.workato.com/ja/recipes/long-actions.html

# メリット
今回の変更で何が嬉しいのかというと、
大量データを複雑なクエリーで処理する場面などで、今までは処理時間が90秒を超えてしまうとタイムアウトで処理が中断していましたが、そうした短い時間制限にとらわれずに処理できるようになります。

# 注意点
Long actionを含んだレシピは、テストモードではレシピを実行できません。「Test Recipe」ではなく「Start Recipe」で実行する必要があります。
Kerberos認証をなんとなく理解する

# Kerberos認証とは
ユーザーがシステムやサービスにアクセスする際に、身元確認に使われるセキュリティプロトコルのこと。
シングルサインオン(SSO)で使われる。

# 仕組み
## 登場人物
・認証サーバー(Authentication Server、略してAS)
ユーザーが入力したIDとパスワードを検証して認証を行う。
倒すとTGTをくれる。

・Ticket Granting Ticket(TGT)
正しいユーザであることを証明するために必要なチケット。パスポート的なやつ。
こいつさえ盗んじゃえば、正規のユーザーになりすませるやべえシロモノ。
別名ゴールデンチケット。

・チケット授与サーバー(Ticket Granting Server、略してTGS)
TGTで頬をひっぱたけば大人しくSTくれる良い人。

・Service Ticket(ST)
ファイルサーバーやらLDAPサーバーやらのサービスを利用するために必要なチケット。
TGTをテーマパークの入場券とするなら、STはアトラクション利用券的なやつ。
別名シルバーチケット。

・鍵配布センター(Key Distribution Center、略してKDC)
AS、TGS、各ユーザの認証情報や共通鍵などを保存するKerberos Database Server(KDB)が入っている。

## 流れ
認証サーバー(AS)「お前誰や」
ユーザー「ワイや」
認証サーバー(AS)「そうか、何か証明できるもの持っとるか？」
ユーザー「ほい、パスワード」
認証サーバー(AS)「本物か、これやるわ」つTGT
ユーザー「あざす」
・
・
・
ユーザー「OOというサービス使いたいんやが」
チケット授与サーバー(TGS)「は？お前誰や？」
ユーザー「こういうモンや」つTGT
チケット授与サーバー(TGS)「ホンモノかこれ？偽造はアカンでぇ？」
チケット授与サーバー(TGS)「ホンモノやんけ・・・これどうぞ」つST
ユーザー「おう、分かればええんや、分かれば」
・
・
・
ユーザー「おう、使わせろや」
ファイルサーバー「あ？誰やお前？」
ユーザー「ほい」つST
ファイルサーバー「大変申し訳ございません、どうぞ」


# まとめ
TGTさいつよ。
オールインワンなライブUSBの作り方

## はじめに
LinuxのインストールをするたびにUSBメモリにisoを書き込むのが面倒なので，複数のLinuxディストリビューションを一つのUSBに入れた，オールインワンパッケージを作りたいと思いました．
## 手順
今回はVentoyを使って作業していきます．Ventoyは、ブート可能なUSBドライブを作成するオープンソースツールです。

1. [Ventoy公式ページ](https://www.ventoy.net/en/index.html])にアクセスして，Downloadを選択すると，候補が出てきます．今回はlinuxで作業するのでventoy-1.0.97-linux.tar.gzをダウンロード．

2. フォルダを解凍して，直下のパスでターミナルを開き，以下のコマンドを実行する．
    ```shell 
    $./VentoyGUI.x86_64 
    ```

3. GUIが立ち上がるので，インストールをクリックして，警告には全てOKで進める．

4. これで万能USBディスクが完成するので，あとはここに，好きなisoファイルをそのまま突っ込むだけ

### 注意点
BIOSのSecure Bootが有効になっていると起動時にエラーが出るのでBIOSで無効化する設定を行なってください
StackBlitzで簡単開発環境作成

こんにちは、WEBエンジニアの堀井です。

私は現在WEBシステムの開発をしており、その実装についての小ネタ等をアウトプットする際に便利なサービスとして **StackBlitz** を紹介しようと思います。

# StackBlitzとは

WEBブラウザ上で簡単にWEBアプリケーションの開発環境を立ち上げることのできるサービスです。

Freeプランがあるので、基本的な機能は無料で使用することができます。

https://stackblitz.com

# 使い方

まずは[こちら](https://stackblitz.com/register)からGitHubアカウントでサインインをします。

サインインすると以下のようなダッシュボードが表示されるので、環境を作成するためには左上の「New project」を選択します。

![stackbuiltz_dashbord.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/ca39eff5-fb49-f65e-c9a3-7c8a7b610e8a.png)

すると、公式が用意した環境のプロジェクト一覧が表示されます。

![stackbuiltz_select.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/10400a36-f30c-6ff2-0fb9-b6055e16bfbe.png)

今回は「React」を選択します。

Reactの開発環境が作成され、しばらく待つと開発サーバーが起動して初期画面が表示されます。

![stackbuiltz_react.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3780649/798b5474-b0a2-48c3-f1be-b65d10a6c139.png)

これだけで開発環境が作成されました。

あとは好きに編集して動かすことができます。

# メリット

StackBlitzを使うことのメリットは、全てブラウザ上で完結することです。

これにより、自身のPCの環境を汚すことなく色々な言語を簡単に勉強することができます。

また、ブラウザさえ使えれば開発ができるので、スマホやタブレットでも開発ができます。

何か小ネタを思いついた際にすぐにスマホで実装したりできて便利です。

# 終わりに

開発環境の作成というものはどの言語でも一筋縄ではいかないことが多いですが、StackBlitzのようなサービスを利用することで確実に簡単に開発環境を作成することができます。

無料で使えるので、WEBシステムの開発を行っている方は一度使ってみてはいかがでしょうか？

それでは以上、堀井でした。
クラウド備忘録

# はじめに

なんとなく使っているクラウドについて考えを整理しておく
AWSを前提としてまとめているが、AzureやGCPも同じはず

# メリット

自前で物理環境を用意するより、イニシャルコストが安い（ランニングコストは条件次第）
スケールアップやスケールアウトのコストをお金だけで解決できる
最新の環境や設備の使用権のコストをお金だけで解決できる（常に最新GPUを使いたいなど）

※お金以外のコスト：調達、設置、環境整備などの作業コスト及び管理コスト

# ウィークポイント

物理依存の接続デバイスが必須の場合は相性が悪い（プリンタ、スキャナ、ペンタブなど）（逆に物理依存をせずに、デジタルに切り分けられる事象については強いといえる）
ベンダーロックインが怖い
99.999...%の可用性保障といえども、生殺与奪の権を握られてしまう
検閲される、BANされる可能性が常に残る
理解して設定をしないと予想外に高額な価格請求が発生する

# AWSについてメモ

EC2とS3がAWSの2トップのサービス。Elasticは弾力性のこと。
EC2はOSより上を自前管理する必要があるので、他環境へ移行しやすい。
他のAWSサービスはAWSから引っ越そうとするとコストが高そう。これはAWSが企業努力で簡易化してくれているからでもある。


[AWS公式の導入事例集](https://aws.amazon.com/jp/solutions/case-studies/)
構成図が記載されているケースが参考になる。

[ざっくりAWS](https://aws-rough.cc/)
主要サービスについてのざっくり解説がわかりやすい。
"個人開発で Git 管理を行う簡単な方法" 記事の具体的な手順を紹介【Unity】

この記事では下記の記事の
具体的な手順を紹介したいと思います。

[【Unity】Git 初心者でもできる個人開発で Git 管理を行う簡単な方法](https://qiita.com/uni928/items/f185f9b1d04c60979f49)

上記の記事を見て
失敗した人はこの記事を
是非ご参考下さい。

最低限必要な操作は

1. SourceTree のインストール
2. リポジトリの作成
3. コミット(バックアップを取る)
4. 現在のブランチをこのコミットまでリセット(バックアップを読み込む)

の 4 点なので
その内の 2 ～ 4 を解説します。

2 も 3 も 4 も
慣れれば 20 秒以内で操作できる作業量です。

***

この記事で使用した SourceTree のバージョン

この記事は Version 3.4.14 で作成しております。

この記事が投稿されて何年か経過した場合は
見た目が変わっている可能性があるためご注意下さい。

おおまかな手順は未来のバージョンでも
変わらないとは思います。

***

SourceTree のインストール

私が既に SourceTree を
インストールしてしまっており
アンインストールするのが怖いため
インストール手順については省略したいと思います。

何卒ご容赦下さい。

「SourceTree インストール　手順」等で
Google 検索頂くようお願いします。

***

Unity プロジェクトの Assets フォルダで Create a repository する

まずは Create a repository の
手順について説明します。

まずはタブを新規作成します。
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/9c2d53bb-080f-7e40-7ce7-fe5a0da815b2.png)

次に Create を選択します。
![image2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/58329334-4ffc-df35-6ca8-faa21a2b2853.png)

次に Git 管理したい Unity プロジェクトの
Assets フォルダを選択して、
名称をプロジェクト名にして
作成を押します。
![image3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/bfc429c5-4a7b-b68b-46b2-a59dff278ab4.png)


既に存在しています等の警告が出た場合は
「はい」を選択します。
![image4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/e8d69f1d-7de5-704e-47d1-447a7482d323.png)

これで Create a repository は完了です。

***

コミットして後は通常通り操作する

次に「コミット(バックアップを取る)」の手順を説明します。
まずはコミットの画面に移動して下さい。
![image5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/9e4d798c-fb39-25c4-e7d4-7ba47899ae7e.png)

次に「全てインデックスに追加」をクリックして下さい。
![image6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/1fdc10fa-7dbe-6cea-94c6-b0d2b2d896fe.png)

次に変更点を入力する枠内に
変更点を入力して下さい。

日本語で OK です。
初回は first commit 等で OK です。
![image7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/8759689b-b081-6d79-107e-763fd0aa719b.png)

最後に「コミット」ボタンを押して下さい。
![image8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/7b87197b-5a18-e585-6aff-dcc70c141207.png)

これでコミットは完了です。

変更点の記載が 1 個で済む程度に
こまめにコミットして下さい。

次に「現在のブランチをこのコミットまでリセット(バックアップを読み込む)」の
手順を説明します。

まずはバックアップを読み込みたい項目で右クリックを押して
「現在のブランチをこのコミットまでリセット」を選択して下さい。
![image9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/8eedec26-f7d2-3b45-7e0d-8932a659e5b0.png)

次に「使うモード」を
「Hard - 全ての作業コピーの変更を破棄する」
に設定して OK を押します。
(分かっていますね？的な~~脅しの~~文章が出た場合は「はい」を選択します。)
![image10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3752886/6a963b20-c6ac-321f-a5e6-b55a2171938a.png)

これでバックアップの読み込みは完了です

以上の作業だけを覚えておけば
Git 管理は最低限可能なのです。

慣れてきたならば
「このコミットを打ち消し」で
前の状態に戻る手段も
一応覚えておいて損はありません。

バックアップを削除せずに
前の状態に戻ることができます。

***

まとめ

以上、最低限の Git 環境構築について
手順を説明しました。

[【Unity】Git 初心者でもできる個人開発で Git 管理を行う簡単な方法](https://qiita.com/uni928/items/f185f9b1d04c60979f49) の

~~1. SourceTree をインストールします(初回のみ)~~
2. Create a repository で
　　プロジェクトの「Assets」フォルダを設定します。
3. コミットして後は通常通り操作します。

部分について解説しました。

分からない点などがあれば
気軽にコメント下さい。

SourceTree のインストールについては
手助けできないかもしれませんが
この記事の内容ならば
手助けできると思います。

皆さんの開発の助けになれますように
閲覧ありがとうございました。
リーダーとマネージャーとの違いとは

# リーダーとマネージャーとの違いとは
リーダー、マネージャーこの言葉はしばしば同じ意味合いで使われがちです。
しかしながらリーダーに必要なリーダーシップとマネージャーに必要なマネジメントスキルは、実際にはそれぞれが異なる役割を持っています。
この記事ではリーダーシップとマネジメントスキルの違いと役割について説明いたします。


## 概要
リーダーシップとマネジメントスキルの大まかな違いは以下となります。

### リーダーシップ

- チームを導いていく能力
    - 変化を起こす
    - 方針決定・協働体制の構築・チームの成長
    - モチベーションの鼓舞

**⇒ 主に未来に向けて対処**


### マネジメントスキル

- チームを管理する能力
    - 複雑さに対処する
    - 計画・予算・仕事の割り当て
    - 監視・コントロール

**⇒主に現状に対処**

## コッターの類型
もう少し詳しく見るためにリーダーシップ論として有名なコッターの類型を見てみましょう。

|リーダーシップ|マネジメント|
|---|---|
|方向性の確立<br>未来のビジョンの提示と、そのビジョンを提示するための変化を生み出す|計画と予算<br>現在の目的を達成するための計画：詳細な手順やスケジュールを計画し、それを実現するためのリソースを割り当てる|
|人々の調整<br>ビジョンと戦略を達成するためにチームが同じ方向を向くための協力体制の構築を、言葉と行動で方向性を示す|組織と人員配置<br>計画を達成するための人員を配置し、責任を与える。|
|モチベーションとインスピレーション<br>チームの不満点や変化における様々な障壁を乗り越えるための鼓舞を行う。|制御と問題解決<br>計画と結果を詳細にモニタリングとコントロールを行えるようにする<br>|
|変化や新しいアプローチを生み出す|予測可能性の確保と秩序の維持<br>ステークホルダが当初期待していた結果を生み出す|

引用：Force For Change: How Leadership Differs from Management(John P. Kotter)より要約して引用

PMBOKでも第7版にバージョンアップされてからは、第6版までのマネジメントの知識エリアよりもリーダーのチームビルディングに焦点があてられるようになっています。

## 役割の違いと適正
上記の様にリーダーとマネージャーに求められる能力やアクションは全くと言っていいほど異なります。

しかしながら、組織ではしばしば両者を「上に立つもの」として混同し「優秀なマネージャーを昇格させリーダーの立場に」や「優秀なリーダーを昇格させマネージャーの立場に」等の「昇格」を行うことがあります。しかしながら、上記の適性の違いの通りこれは配置転換に近いです。

配置転換自体は全く悪いことではないのですが、両者の適性の違いを無視し「優秀なマネージャーはリーダーをこなしてくれるだろう」と特にケアをしなかった結果、優秀な人材がその能力を発揮できないということが良くあります。

まずはマネージメントスキルとリーダーシップの違いを把握し、人材の昇格の際には適性を把握したうえでマネージャーとリーダーどの立場からどの立場にコンバートするのかを意識した上で配置や教育を行う必要があります。

## プロジェクトマネジメント研修を受ける際の注意
リーダー育成として「プロジェクトマネージャー研修」を企業として受講される取り組みをなさっている会社様もあると思います。しかしながら研修コースによっては「マネジメントスキルの知識」の研修に寄っている研修コースもあります。これまでご説明した通り、リーダーシップとマネジメントスキルは異なるものであり、せっかく費用と時間をかけてもリーダー育成に紐づかないことがあります。

----

本記事は以下からの抜粋です。

https://sirkus.co.jp/2024/05/13/%e3%83%aa%e3%83%bc%e3%83%80%e3%83%bc%e3%81%a8%e3%83%9e%e3%83%8d%e3%83%bc%e3%82%b8%e3%83%a3%e3%83%bc%e3%81%a8%e3%81%ae%e9%81%95%e3%81%84%e3%81%a8%e3%81%af/
AWSを基本的にまとめてみた【RDS】

## RDS(Amazon Relational Database Service)とは？

- (AWS) が提供するクラウドベースのリレーショナルデータベースサービス
- RDSでは、PostgreSQL, Amazon Aurora, Oracle, Microsoft SQLServer, MySQL,
Mria DBの6種類を使用することができる

## RDSの種類

(1) リードレプリカを使用することで、大量の読み込みリクエストが来た際も分散処理ができ、パフォーマンスを落とさず処理することができる。
※ リードレプリカ・・・読み取り専用のデータベースを使用することができる

(2) マルチAZ構成:RDS構築時にマルチAZを有効化すると自動的に異なるAZに２台のRDSが構築される。

(3) 自動バッグアップ。

(4) メンテナンス:RDSでは、サーバーのOSは利用者の管理対象外になる。

(5) ストレージ拡張:RDSでは、起動したままのストレージ容量を拡張できる。
※ 容量を少なくすることはできない。容量を少なくするには、新規にRDSを構築してデータを移行する必要があるので注意する。

(6) 暗号化:RDSでは、データの保管時と転送時に暗号化することができるため、データを安全に利用、管理することができる。

## DMS(AWS Data Migration Service)とは？

- データベース移行サービス
- メリット: データの移行期間中でもデータベースを使用することができる。


## 参考サイト
[【AWS RDS】ソリューションアーキテクト アソシエイト(SAA) 第19回講座](https://www.youtube.com/watch?v=-Vxbf8hrVz0)
[AWSのデータベースきほんのきAmazon RDS](https://www.youtube.com/watch?v=Y2fzwLjUf7w&t=278s)