OmniAICreator/Qiita-1.07M huggingface dataset:
個人的備忘録：SQLの基本をしっかり学ぶために、DESC コマンドを使いながら記事としてアウトプットしてみた

## はじめに  
SQL を扱う際に、「テーブルの構造を確認する」「データを並び替える」といった操作は頻繁に行われます。

:::note info
**そんなときに役立つのが `DESC` というコマンドです。**
:::

しかし、`DESC` には異なる 2 つの用途があり、それぞれの使い方を正しく理解しておくことが重要です。

本記事では、`DESC` の基本的な使い方を解説し、実際に試せるハンズオンも紹介します。  

## 書こうと思ったきっかけ  
SQL を学び始めたときに、「`DESC` って何？」と疑問に思ったことがありました。

調べてみると、「テーブルの構造を確認する」「データを降順に並び替える」という 2 つの使い方があることがわかりました。

:::note warn
***しかし、これらの用途が混同されやすく、初心者にとってわかりにくい部分もあると感じました。***
:::

そこで、`DESC` の意味を整理し、初心者でもすぐに理解できるような記事を書こうと思いました。  

## SQLの `DESC` とは？

SQLの `DESC` には2つの主要な用途があります。1つはテーブルの構造を確認するため、もう1つはデータを降順（大きい順）で並べ替えるために使用されます。

**本記事では、それぞれの使い方について解説します。**

### 1. テーブルの構造を確認する（`DESCRIBE` の省略形）

SQLでテーブルの構造を確認する際に使用されるのが `DESC` コマンドです。これは `DESCRIBE` の省略形で、テーブルのカラム情報を表示します。

#### 使用例
例えば、`users` テーブルの構造を確認するには、次のようなSQLコマンドを実行します。

```sql
DESC users;
```

このコマンドを実行すると、以下のような情報が表示されます。

| Field   | Type        | Null | Key | Default | Extra          |
|---------|------------|------|-----|---------|---------------|
| id      | int(11)    | NO   | PRI | NULL    | auto_increment |
| name    | varchar(50)| YES  |     | NULL    |               |
| age     | int(11)    | YES  |     | NULL    |               |

このように、各カラムの**データ型・NULL許可/禁止・主キー（PRI）・デフォルト値・追加情報**が確認できます。

### 2. `ORDER BY` との組み合わせ（降順ソート）

`DESC` は、`ORDER BY` 句と組み合わせてデータを**降順（大きい順）**に並べ替える際にも使用されます。

#### 使用例
`users` テーブルの `age` 列を降順でソートするには、以下のSQLを実行します。

```sql
SELECT * FROM users ORDER BY age DESC;
```

このSQLを実行すると、年齢 (`age`) の値が大きい順に並び替えられた結果が取得できます。

## 実際にやってみた

ここでは、実際にデータベースを操作しながら `DESC` を試してみます。Docker Hub から MySQL のイメージを取得し、ローカル環境で検証してみます。

**詳細はこちら**👇

https://qiita.com/free-honda/items/222e17d909b4507b93c2

#### ステップ 1: `users` テーブルを作成
まず、サンプルの `users` テーブルを作成します。

```sql
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50),
    age INT
);
```

#### ステップ 2: データを挿入
いくつかのデータを追加します。

```sql
INSERT INTO users (name, age) VALUES
('Alice', 25),
('Bob', 30),
('Charlie', 22);
```

#### ステップ 3: `DESC` でテーブルの構造を確認

```sql
DESC users;
```

**実際のコマンド結果について**

![Screenshot 2025-02-15 at 10.27.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/4c76c718-35d7-4353-97c0-a8478859b299.png)

#### ステップ 4: `ORDER BY DESC` でデータを取得

```sql
SELECT * FROM users ORDER BY age DESC;
```

**実際のコマンド結果について**

![Screenshot 2025-02-15 at 10.27.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b351a585-a77b-422f-8e78-f38a6c6ec3fa.png)


このハンズオンを通じて、`DESC` の実用的な使い方を体験できます！

### まとめ
| 用途 | コマンド | 説明 |
|------|---------|------|
| テーブルの構造を確認 | `DESC table_name;` | 指定したテーブルのカラム情報を表示 |
| 降順ソート | `ORDER BY column_name DESC;` | 指定したカラムの値を降順（大きい順）に並べ替え |

`DESC` を活用すれば、テーブルの構造をすばやく確認したり、データの並び順を調整したりできます。

***SQLを扱う際にはぜひ覚えておきましょう！***
24H2の人柱レポート

# 25/3/18-25/4/8 追記：再度、24H2にアップデート。

後述のヒッチの問題が解決したかもしれない。
Windows11のRecallという機能をオフにすると、ラグが少なくなった気がする。
これはスクリーンショットを撮りまくる迷惑な機能らしい。

![recall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128851/18940d4a-e340-4b6b-829a-39c5df9d4a5e.png)

追記：25/4/8：今のところ、目立ったトラブルなし。
（今回のトライでは下記のグループポリシーはいじってません。）

# 25/2/13に24H2にアップデートしてみた。

その前に一回、アップデートにトライして黒画面になったので控えていた。

2度目になる今回は、問題なくアップデートできた。

動作としては、本機を使う分には気になる事がなかったように思えた（簡単に動かしただけだが）

ただ、問題はリモートデスクトップ。（Mac > Windows）

## UE4（UE5）のLevelSequenceをPlay in Editorで動かした時にヒッチが細かく発生した。

そこまで負荷が大きくないレベルでも発生。スタンドアローンだと発生しなかった。
確認し忘れたが、ネットワークアダプターを更新するとかで解決したかも分からない。

## リモートアクセスした時にログイン画面で止まる事がある。（おそらくスリープから復帰した時）

その時、1度切断し、2度目のアクセスをしたら問題なかった。

これ自体の問題は、Redditの情報より、

https://www.reddit.com/r/sysadmin/comments/1gbq4y7/windows_11_24h2_rdp_session_hangs_on_logon/

グループポリシーより、
コンピューターの構成 > 管理用テンプレート > Windowsコンポーネント > リモートデスクトップサービス > リモートデスクトップ セッション ホスト > 接続にある「サーバーのネットワーク検出を選択する」を編集することで、一応はパスできた。

![test.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128851/9d0ce907-9829-409f-bfeb-2f66b6940987.png)
AITRIOS Edge Applicationサンプルコードのビルド手順

Edge Application SDKのチュートリアルに

* Image classification sample
* Object detection sample
* Switching DNN sample

のサンプルコードが含まれています。

これのビルド手順です。

# 1. GitHub Codespaceインスタンスを作成

[aitrios-sdk-vision-sensing-appリポジトリ](https://github.com/SonySemiconductorSolutions/aitrios-sdk-vision-sensing-app)（これがEdge Application SDK）のGitHub Codespaceインスタンスを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/f272780f-41db-4086-a907-331b5e4ea7eb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/e1dde863-34e5-40b4-b638-e0ef708d52f8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/82826fd0-f137-4752-800d-55da5c2e436b.png)

> ドキュメントに4-core推奨とありますが、Edge Applicationのビルドだけならデフォルトの2-coreでも大丈夫です。

# 2. FlatBuffersのC++ヘッダファイルを生成

ターミナルで下記コマンドを実行します。

```
./tutorials/4_prepare_application/1_develop/compile_fbs.sh
```

結果、ファイルが4つ作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/080d70fb-948f-4d53-aaa1-e84b5d262e8a.png)

# 3. サンプルコードからWASMファイルを生成

ターミナルで下記コマンドを実行します。

```
./tutorials/4_prepare_application/1_develop/build.sh
```

結果、WASMファイルが3つ作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109634/951d370c-302d-4d88-ab68-1a3f66486eb0.png)

# 参考リンク

* [Edge Application SDK - Develop Application](https://github.com/SonySemiconductorSolutions/aitrios-sdk-vision-sensing-app/blob/main/tutorials/4_prepare_application/1_develop/README.md)
SHAP値ってなんや

こんばんは。座禅いぬです。今<strong>XAI(explainable AI：説明可能性の高いAI)</strong>についていろいろ調べているのですが、XAIの概念を理解するときに出てくるわけわからん数字の一つが<strong>SHAP値</strong>です。こちらはなんとか簡単にわかるようにできないか調べた、自分用メモです。

まずそもそもシャープレイ値というものがあります。「みんなが一緒に成果を出したとき、<strong>各メンバーの“貢献度”をどうやって公平に分配するか</strong>」を考えるための方法として考え出されたようです。ゲーム理論の文脈で生まれましたが、<strong>機械学習やってると特徴量の貢献度知りたいよね？</strong>ということで生まれたのが<strong>SHAP</strong>というpythonライブラリ、およびその値を指してSHAP値とかよく呼んでるみたいです。

<strong>じゃあシャープレイ値ってなんや？</strong>

## わかりやすい例：友だちと協力してお菓子作りをする

### シチュエーション
友だち4人(Aさん, Bさん, Cさん, Dさん)が集まってクッキーを作ることにしました。
おいしいクッキーができたら、それをみんなで山分けしたい！
でも、材料を持ち寄った人、道具を用意した人、レシピを考えた人、実際に動いた人…それぞれ貢献度が違いますよね。

そこで「誰がどのくらいクッキー作りに貢献したか」を定量的に評価し、クッキーを公平に分ける(あるいは「ご褒美」をわける)にはどうしたらいいでしょうか？

### 「貢献度」を測るむずかしさ
たとえば「小麦粉を用意したAさん」がいないと、クッキーは作れないから重要そう。
でも実はBさんが同じ小麦粉を用意できたかもしれないので、Aさんだけが絶対に必要とは言い切れないかも…。CさんのレシピやDさんのオーブンだって、どれもないとクッキーは完成しないし…。

みんなそれぞれがどのくらい「必要」だったのかを数字であらわすのは意外と大変ですよね。

## シャープレイ値の考え方
そこでシャープレイ値の登場です。<strong>「みんなが集まるとどれだけ成果が出るか」をベースにして、それぞれが加わることで成果がどのくらい増えたか</strong>を元に計算します。

### 1. 全員が協力したときの成果を把握する
→ クッキーの合計価値をたとえば「10枚分のクッキー」とします。

### 2. メンバーが参加する「順番」を全部考える

「A→B→C→Dの順で集まったらどうなる？」「B→A→D→Cなら？」「D→C→B→Aなら？」…というふうに、全員が参加するまでの順番の組み合わせをすべて網羅します(4人なら4!=24通り)。

この「順番」というのがポイントで、誰がいつ参加したかで「すでにいた人たち+新しく加わる人」がもたらす“追加の”成果を計算するためです。

### 3. 各メンバーが「自分の番が来たとき、どれだけ成果を上乗せしたか」をそれぞれの順番で計算する

たとえばある順番で、「Aが最初にいたときの成果(0枚分)にAが貢献してクッキーの土台ができたから2枚分になった」とか、「Cが3番目に加わったとき、それまでは4枚分しか作れなかったところをCのおかげでレシピが整って+3枚分増えて7枚分になった」とか、そうやって<strong>「追加」</strong>がどれくらいあったかを全員分で記録していきます。

### 4. 「追加の成果」を全ての順番で平均する

24通りすべてのシナリオを考慮した上で、Aさんがどれだけ貢献したのか、Bさんがどれだけ貢献したのか…を平均して出します。これを「シャープレイ値」と呼びます。
言いかえると、誰がいつ来ても同じ評価になるように不公平がない計算方法になっているわけです。こうすると、「人数が異なる集まりすべてを考慮しても、最終的に誰がどのくらい貢献したか」を公平に測ることができます。

## 概念のポイント
### 全ての参加順序を考慮する

ただ「Aがいなかったらどうなるか」「Bがいなかったらどうなるか」だけでなく、どのタイミングで誰が入ったかという場合分けをすべて行うので、ちょっと計算は大変です。しかし、これによって「Aがいないとそもそも何もできなかった」「Bが先にいなくてもCが代わりをしたかもしれない」などのケースごとに評価できるのが強みです。

### 平均を取ることで「誰かだけが得をしない」仕組み

ある順番で見ると、Aの貢献は大きく見えてBの貢献が小さいかもしれない。
でも、別の順番だとBがいなければ成り立たない場面があったかもしれない。
そうした状況を全部ならして評価するので、公平感が出ます。


### チーム全体の成果の合計が、各個人のシャープレイ値を足した値とちょうど一致する

つまり

:::note info
Aさんのシャープレイ値 + Bさんのシャープレイ値 + Cさんのシャープレイ値 + Dさんのシャープレイ値 = 全体の成果
:::
「貢献の割り当て」なので、トータルが上回ったり下回ったりしないように、ぴったり配分されます。


## 機械学習における使い方 (かんたんに)
機械学習のモデルで「なぜこの予測が出たの？」を説明したいときがあります。

:::note 
例：AIが「この人は将来、ある病気になる確率が高い」という予測を出したとき、どの入力情報(年齢、体重、血圧など)がその予測にどれくらい影響したのか？
:::

シャープレイ値の考え方を使ってみましょう！

<strong>
「年齢のデータを加えたら、どれだけ予測結果に差が出た？」
「血圧のデータが新しく加わったら、どのくらい精度(または確信度)が上がった？」
</strong>

…というふうに、一つひとつの特徴(入力データの要素)が持つ“追加貢献”の平均を出します。
これが「特徴量(要素)ごとのシャープレイ値」となり、「どれだけ予測モデルに影響を与えたか」を見える化するわけです。

なんか計算めちゃくちゃ大変そうですよね。そこで登場するのが<strong>PythonライブラリのSHAP！</strong>計算から図による可視化までできちゃうので、よく用いられています。ただやっぱり計算量が多いので重い。そこで軽量化のため計算方法を変えるなどの工夫をしています。

なので、正確には<strong>シャープレイ値ではなく近似値</strong>を求めているそうです。ちょっと混乱しやすい部分ですが、<strong>「まあだいたい同じやん？」</strong>でよさそうですね。

## まとめ
シャープレイ値は「チームプレイで成果を出したとき、それぞれのメンバー(もしくは要素)がどのくらい貢献したか」を公平に計算するために、「いろんな順番や組み合わせを総合的に見て、それぞれがもたらす追加の価値をきちんと評価し、最終的にその貢献をみんなに割り振ろう」という考え方です。

それを応用し、<strong>機械学習の特徴量の寄与度</strong>を計算します。図による可視化を含めた便利なPythonライブラリがSHAP。そこで使われている<strong>シャープレイ値とだいたい同じノリのやつがSHAP値！あーよかったすっきりした。</strong>間違ってる部分あったらご指摘お願いします！
【AWS】リザーブドインスタンスの種類〜スタンダートとコンバーティブルの違いは？〜

# はじめに
AWSの勉強してる中で、リザーブドインスタンスの種類の違いがなかなか覚えられなかったので、備忘録として簡単に整理する。

# リザーブドインスタンスとは
リザーブドインスタンスでは、1年または3年の期間で予約をすることで、オンデマンドに比べて大幅な割引を適用することができる。

リザーブドインスタンスには、スタンダードとコンバーティブルの2種類が存在する。

# リザーブドインスタンスの種類
### スタンダード
- インスタンスタイプなどの変更ができない
- 割引率がコンバーティブルより高い
- マーケットプレイスでの販売や購入が可能

### コンバーティブル
- インスタンスタイプなどを変更可能
- 割引率がスタンダードより低い
- マーケットプレイスでの販売や購入ができない

# おわりに
違いを整理することで理解が深まった。リザーブドインスタンスの種類で今後は悩まないようにしていきたい。
Power Apps で SharePoint リストの選択肢列 (複数選択許可) を基にフィルターする


# はじめに

Power Apps では、以下の記事で紹介したように、データをフィルターすることができます。

https://qiita.com/Takashi_Masumori/items/777c37b57ddecbf05d12

上記記事では触れていませんが、SharePoint リストの選択肢列で複数選択を許可している場合、フィルターの式が複雑になるため、今回別枠で記事を書きたいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/0db8b189-e236-44cc-bd48-d3cfb9ee6ce6.png)


# アプローチ

まず、選択肢列で複数選択を許可している場合のデータ構造に注目する必要があります。以下のように、テーブルの中にテーブルがあるイメージです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/a5d41626-30fa-48b1-99a9-ebd1f413f9d0.png)


まず、コンボボックスを用意します。こちらはフォームコントロールを基に作成しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1763c6d0-0b26-4bed-b426-d6b3da1f87b8.png)


そして、以下のようにギャラリーをフィルターします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/6ced44a6-064c-4b10-9bd1-9648d788de87.png)

```
Filter(
    複数選択テスト,
    !IsEmpty(
        Filter(
            カテゴリー,
            Value in ComboBox1.SelectedItems.Value
        )
    )
)
```

結果は以下のような感じになります。ComboBox1 で選択されたカテゴリーのいずれかの値を含む行だけを表示できています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/4224491f-879f-4f41-af2d-54f6cb10e960.png)


式についてもう少し解説します。
まず、外側のフィルターで、「複数選択テスト」という SharePoint リスト (テーブル) をフィルターします。各行を一つずつチェックします。

そして、内側のフィルターでカテゴリー列 (テーブル) をフィルターします。内側のフィルターでは、ComboBox1 で選択されたカテゴリーのいずれかの値を含むようにしたいため、このような場合は、以下のように in 演算子を使います。カテゴリー列の中に、ユーザーがコンボボックスで選択したいずれかの値が含まれているデータを取得するという意味になります。

```
Filter(カテゴリー, Value in ComboBox1.SelectedItems.Value)
```

最後に、IsEmpty 関数で、内側のフィルターの結果が空でないかを確認しています。! は否定を意味するため、空でない（1つ以上のマッチがある）場合に true となりその行が表示されます。

!IsEmpty(...)


例) ComboBox1 で ["営業", "IT", "開発"] を選択した場合かつリストのデータが以下の場合の結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/1b49329f-0b83-4f09-8d15-3e3cbfce5541.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074511/9c1283b0-d4f4-4e0e-a0d9-5b859417f071.png)

# まとめ

SharePoint リストの選択肢列で複数選択を許可している場合における Power Apps でのフィルターのアプローチについて説明しました。少し複雑ですが、同様のことにチャレンジする際の参考になれば幸いです。
Perplexityが新しいAIリサーチツール「Deep Research」をリリース！

# はじめに

Perplexityは2025年2月15日に、新しいAIリサーチツール「Deep Research」を無料で公開しました[1][2]。

巷で話題のOpenAIのDeep Researchに近いベンチマークを叩き出しており、無料ユーザでも1日5回使用出来るので、多くのエンジニアにとって魅力的なツールになるのではないでしょうか？

また、本記事に関する

## Deep Researchの主な特徴

**無料アクセス**: 無料ユーザーでも1日5回まで利用可能[2]。
**高度な機能**: 競合他社が高額な月額プランで提供している機能を無料で提供[1]。
**Proプラン**: 月額20ドルで1日500回まで無制限に利用可能[2]。

## 性能と機能

- **推論を伴うリサーチ**: 検索と文書読み込みを反復的に行い、リサーチプランを洗練[1]。
- **レポート作成**: 収集した情報を包括的なレポートに統合[1]。
- **エクスポートと共有**: 最終レポートをPDFやドキュメントとしてエクスポート可能[1]。

## ベンチマーク性能

Deep Researchは、AIの総合的な知識力を測るベンチマーク「Humanity's Last Exam」で20.5%の精度を達成し、GoogleのGeminiやOpenAIのGPT-3.5を上回るスコアを記録しました[1]。また、事実性の評価ベンチマーク「SimpleQA」では93.9%という高い精度を示しています[1]。

## 市場への影響

Perplexityの無料提供戦略は、エンタープライズAI市場に大きな影響を与える可能性があります。これまで高額なサブスクリプション料金を支払える大企業のみが利用できた高度なAI機能が、より広範なユーザーに開放されることになります[1]。

Deep Researchは、金融、マーケティング、テクノロジーなどの専門分野だけでなく、健康、製品調査、旅行計画など個人的な用途にも活用できるとされています[1]。

この新機能の登場により、AI検索とリサーチツールの競争が一層激化し、ユーザーにとってはより高度な機能がより手頃な価格で利用できるようになる可能性が高まっています。

情報源
[1] Perplexity、AIリサーチツール「Deep Research」を無料公開：GeminiやChatGPTに対抗 https://xenospectrum.com/perplexity-releases-free-ai-research-tool-deep-research/
[2] PerplexityがDeep Research提供開始。無料ユーザーでも1日5回、Proなら500回利用可能に。実際に試してみた（CloseBox） https://www.techno-edge.net/article/2025/02/15/4112.html
[3] AIのPerplexityが、推論モデルDeepSeekの「DeepSeek R1」を提供開始し、ディープウェブリサーチを支援 https://www.atpartners.co.jp/ja/news/2025-01-28-ai-s-perplexity-launches-deepseek-r1-an-inference-model-deepseek-to-support-deep-web-research
[4] PerplexityからDeep Research機能が登場。Gemini Deep ... - note https://note.com/robothink/n/nb7f3a25b1187
[5] 【Perplexity、Genspark、Felo、Gemini DeepResearch】AI検索 ... https://note.com/samuraijuku_biz/n/ndaead49bfba2
[6] Introducing Perplexity Deep Research https://www.perplexity.ai/ja/hub/blog/introducing-perplexity-deep-research
[7] AT PARTNERS株式会社 - AIのPerplexityが、推論モデルDeepSeek ... https://www.facebook.com/story.php?story_fbid=1141352171114792&id=100057200599655
[8] Hiroshi Yoshita on X: "AIのPerplexityが、推論モデルDeepSeekの ... https://twitter.com/xlouder/status/1884750099752034335


# 免責事項

本ブログの記事内容について、以下の点をご了承ください。

## 一般的な免責事項

1. 本ブログの情報は、記事執筆時点での知見に基づいて作成されています。技術の進歩や各種ソフトウェア・サービスのアップデートにより、記事の内容が最新の状況と異なる可能性があります。

2. 記事内で紹介するコード、設定例、手順などは、特定の環境下での動作を確認したものです。読者の環境によっては、同様の結果が得られない可能性があります。

3. 本ブログの情報を利用したことによって生じたいかなる損害についても、著者は責任を負いかねます。

## 技術的な記述について

1. 記事内のコードサンプルは、原則として動作確認済みですが、全ての環境での動作を保証するものではありません。実装の際は、ご自身の責任において十分なテストを行ってください。

2. セキュリティ関連の情報は、記事執筆時点での一般的な知見に基づいています。最新のセキュリティ対策については、各製品・サービスの公式ドキュメントをご確認ください。

3. パフォーマンスに関する記述は、特定の条件下での測定結果です。実際の性能は、ハードウェア構成やソフトウェアの設定により異なる場合があります。

## 製品・サービスについて

1. 記事内で言及する製品やサービスは、著者の主観的な評価に基づいています。特定の製品やサービスを推奨するものではありません。

2. 製品やサービスの価格、機能、利用条件等は予告なく変更される可能性があります。最新の情報は各提供元でご確認ください。

3. 記事内で紹介するサードパーティ製のツールやライブラリの使用については、各々のライセンス条項をご確認ください。

## プライバシーとデータ保護

1. 記事内のスクリーンショットやログ出力には、個人情報や機密情報が含まれないよう配慮していますが、万が一含まれている場合はお知らせください。

2. コメント欄等で個人情報を投稿される場合は、ご自身の責任においてお願いいたします。


## 免責事項の更新

本免責事項は、予告なく更新される場合があります。定期的にご確認いただくことをお勧めします。
Salesforce Flow からの HTTP コールアウトを受け入れるように外部サービスを設定する


+ [How to determine domain of HTTP Callout](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KD7oN)

Salesforce Flow からの HTTP コールアウトを受け入れるように外部サービスを設定する場合、シームレスな通信を確保するために適切な Salesforce ドメインをホワイトリストに登録することが重要です。Salesforce の送信リクエストは、特に動的 IP アドレスとドメインを利用する Hyperforce インフラストラクチャを採用している場合は、さまざまなドメインから発信される可能性があります。

Salesforce インスタンスが HTTP コールアウトに使用する特定のドメインを特定するには、Apex コードを使用して簡単なテストを実行できます。この方法では、外部サービスにリクエストを送信して発信者の IP アドレスを返すため、コールアウトに関連付けられたドメインを識別できます。方法は次のとおりです。

 

1. **リモートサイトをセットアップする**: 

   - に移動

セットアップ>セキュリティ>リモートサイト設定
Salesforce で。    

   - URLを使用して新しいリモートサイトを追加する

http://icanhazip.com/
保存します。  

2\. **Apex コードを実行する**: 

   - Salesforce で開発者コンソールを開きます。    

   - 次の Apex コードを実行します。  

     「頂点 

     HttpRequest 要求 = 新しい HttpRequest(); 

     req.setEndpoint('

http://icanhazip.com/
'); 

     メソッドを 'GET' に設定します。 

     新しい Http() を作成します。 

     HttpResponse res = http.send(req); 

     System.debug('コールアウトIP: ' + res.getBody()); 

     「」 

   - このコードはHTTP GETリクエストを送信します

このサイトについて
、発信者の IP アドレスで応答します。  

 

3\. **ドメインを識別する**: 

   - コードを実行した後、出力のデバッグ ログを確認します。  

   - 返された IP アドレスは、Salesforce がアウトバウンドコールアウトに使用するドメインを特定するのに役立ちます。  

ただし、Salesforce のインフラストラクチャでは、時間の経過とともに変化する可能性のあるさまざまな IP アドレスとドメインが使用される可能性があることに注意することが重要です。したがって、中断のないサービスを確保するために、個々の IP アドレスまたはドメインをホワイトリストに登録するのではなく、より広範囲の Salesforce ドメインをホワイトリストに登録することをお勧めします。Salesforce のドキュメントによると、ホワイトリストには次のドメインを追加する必要があります。
競技プログラミングの入出力メモ

## 入力

### 1行
#### 空白なしの文字列を受け取る
最も基本な形
```bash
# 入力
20250222
```

```python
# str型の場合
print(input())

# 出力 `20250222`


# int型に変換する場合
print(int(input()))

# 出力 `20250222`
```

#### スペース区切りの文字列をリストとして受け取る

```bash
# 入力
1 2 3 4 5
```

```python
# str型の場合
print(list(map(str, input().split())))

# 出力 `['1', '2', '3', '4', '5']`


# int型に変換する場合
print(list(map(int, input().split())))

# 出力 `[1, 2, 3, 4, 5]`
```

- `input().split()` で スペース区切りで分割
- `map(str(またはint), ...)` で strまたはintに変換
- `list()` で リストに変換

### 複数行

#### 単一の文字列が複数行
```bash
# 入力
3
111
222
333
```

```python
n = int(input())  # 行数を受け取る

# str型のリストに変換する場合
print([input() for _ in range(n)])

# 出力 `['111', '222', '333']`


# int型のリストに変換する場合
print([int(input()) for _ in range(n)])

# 出力 `[111, 222, 333]`
```
- `for _ in range(n)` を使って `n` 回 `input()` を繰り返す

---

## 出力
### 単純な単一文字列

```python
# str型
print('42')  # `42`

# int型
print(42)  # `42`
```

### リストの要素をスペース区切りで出力(要素がint型)
```python
arr = [1, 2, 3, 4, 5]

# 方法1
print(' '.join(map(str, arr)))

# 方法2
print(*arr)

# 出力 `1 2 3 4 5`
```

### リストの要素をスペース区切りで出力(要素がstr型)
```python
arr = ['A','B','C','D','E']

# 方法1
print(' '.join(arr)) # mapでの型変換が不要

# 方法2
print(*arr)

# 出力 `A B C D E`
```

- `*` を使うとリストの アンパック ができ、`print()` のデフォルトのスペース区切りで出力される

### リストの要素をスペースなしで出力(要素がint型)
```python
arr = [1, 2, 3, 4, 5]
# 方法1
print(''.join(map(str, arr)))

# 方法2
print(*arr, sep='')

# 出力 `12345`
```

### リストの要素をスペースなしで出力(要素がstr型)
```python
arr = ['A','B','C','D','E']

# 方法1
print(''.join(arr)) # mapでの型変換が不要

# 方法2
print(*arr, sep='')

# 出力 `ABCDE`
```

### リストの要素を改行区切りで出力(要素がint型)

```python
arr = [1, 2, 3, 4, 5]

# 方法1
print("\n".join(map(str, arr)))

# 方法2
print(*arr, sep='\n')

# 出力
#   1
#   2
#   3
#   4
#   5
```

### リストの要素を改行区切りで出力(要素がstr型)

```python
arr = ['A','B','C','D','E']

# 方法1
print("\n".join(arr)) # 型変換が不要

# 方法2
print(*arr, sep='\n')

# 出力
#   A
#   B
#   C
#   D
#   E
```

---

## 高速な入出力

### 入力

大量の入力を扱う場合、`sys.stdin.read()` を使うと 一括で入力を受け取る ことができる。

```python
import sys

data = sys.stdin.read().split()  # 全ての入力を一括で受け取り、スペース・改行で分割
```

- `sys.stdin.read()` は 標準入力をすべて読み込む
- `.split()` で スペース・改行区切りでリストにする

### 出力

大量の出力がある場合、`print()` より `sys.stdout.write()` の方が高速。

```python
import sys
sys.stdout.write("Hello\n")  # → Hello（改行あり）
```

- `sys.stdout.write()` は `print()` より 遅延が少なく高速
- `\n` を明示しないと改行されないので注意
Streamlit in Snowflakeでファイルアップローダが解禁されました！

Streamlit in Snowflakeでとうとうファイルアップローダ ```st.file_uploader``` が解禁されました！  
通常のPython環境で実行するStreamlitではバージョン1.20.0のあたりから実装されていたものですが、Streamlit in Snowflakeでは長らく封印されていた待望の機能です。  

## リリースノート

https://docs.snowflake.com/en/release-notes/streamlit-in-snowflake#february-14-2025-support-for-st-file-uploader-preview

シンプルですね。  
2025年2月15日現在はまだPublic Previewなので、本番利用は避けるのが推奨とされています。  

![st.file_uploader PuPr](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/c2076965-e819-4934-a2b2-94f0d42f2c2f.png)

## 使ってみる

試してみました。  
Snowsightで適当なStreamlitアプリを新規作成してコードを書いていきます。  

```py:file_uploder.py
import streamlit as st
import pandas as pd
from snowflake.snowpark.context import get_active_session
from snowflake.snowpark.functions import col

st.title("File Uploader")

uploaded_file = st.file_uploader("Choose a CSV file")

# ファイルがアップロードされていないときはここで終了
if not uploaded_file:
    st.stop()

# CSVファイルを読み込む
pandas_df = pd.read_csv(uploaded_file)
st.write("filename:", uploaded_file.name)
st.dataframe(pandas_df)

# Pandas DataFrameをSnowpark DataFrameに変換してみる
session = get_active_session()
snowpark_df = session.create_dataframe(pandas_df)

# 適当な変換を実行。「～ス」で終わる名前だけを残す
result_df = snowpark_df.filter(col("NAME").like("%ス"))
st.dataframe(result_df)

# 書き込む！
table_name = "DEMO_DB.PUBLIC.UPLOADED_FILE"
result_df.write.mode("overwrite").save_as_table(table_name)
st.write(f"ファイルを{table_name}に書き込む！")
```

無事に動きました！  

![app result](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/be27ffe5-c7b8-47c4-8a91-3f3ef61514f6.png)

処理の最後でDataFrameをSnowflakeのテーブルとして書き込む処理をしているので、実際にテーブルが作成されているかを確認すると…実際に作成されています！  

![new table](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/62e4af2d-0dfb-41d0-84f5-aa89a80ba4ef.png)

## 可能性は無限大

色々な使い方が考えられると思います。  

- CSVファイルをアップロードして、インタラクティブにデータ加工・プレビューして、Snowflakeに保存
- Snowflakeに保存されているデータと、ローカルにあるデータをアプリ上でJOINして可視化
- 画像や動画などのメディアファイルをアップロード。追加情報を入力してもらってメディアファイルとセットでSnowflakeに保存

などなど…ぜひ活用のアイディアを考えてみてください！
SlangでGoogle SheetsとAndroidStudioプラグインSlangMateで楽々ローカライズ

slang を使用して Flutter アプリをローカライズできます。

1. `pubspec.yaml`で準備

```
dependencies:
  flutter:
    sdk: flutter
  slang: ^3.27.0

dev_dependencies:
  slang_build: ^3.27.0
  build_runner: ^2.4.6
```

2. Google Sheets(旧名?: Google スプレッドシート)で準備

| key          | ja           | en            | ko          | zh       | zh_Hant   | (備考)  |
|-------------|-------------|--------------|------------|---------|----------|------|
| mbtiQuestion | MBTI質問     | MBTI Question | MBTI 질문   | MBTI 问题 | MBTI 問題 |      |
| mbtiResult   | MBTI結果     | MBTI Result   | MBTI 결과   | MBTI 结果 | MBTI 結果 |      |

`(備考)`みたいにカッコで書けばローカライズ対象外にできる。


右上の「共有」ボタンをリンク知ってる人全員とかにしておく

3. SlangMateをDL

AndroidStudio持っていたら
https://plugins.jetbrains.com/plugin/26502-slangmate/

4. 設定する

Tool -> SlangMate -> Open Settings
※多言語対応されているプラグインなので日本語の場合は別です。


ここで、`fvm`を使っていたらチェック入れます。

`https://docs.google.com/spreadsheets/d/hogehogehoge/edit?gid=0#gid=0`

なURLの場合は、 `hogehogehoge` がIDになります。

※URL丸ごと突っ込んだらIDがそのまま入るような修正が今後入るかも？


5. CSVとしてダウンロード

Tool -> SlangMate -> Download CSV
※多言語対応されているプラグインなので日本語の場合は別です。

これでCSVとして保存されます。

6. 実行

Run Slang

裏で以下のどちらかが実行される
`fvm` の仕様の有無で変わる

```
fvm flutter pub run slang
```

```
flutter pub run slang
```


SlangMateの要望があればコメントあれば、書けば変わっていくと思います。
アイコンSVG画像が変なので直してくれたら幸いですね。
本番環境（エックスサーバー）で Laravel プロジェクトを更新する手順

本番環境（エックスサーバー）で Laravel の コード更新・ストレージフォルダ作成・Fakerの修正・データベースリセット までの 完全な手順 です。

# 1. SSH で本番環境にログイン
## ローカルPCから本番環境（エックスサーバー）に SSH 接続：
```sh
ssh -i パスフレーズ.key サーバーID@サーバー番号.xserver.jp -p 10022
```

## プロジェクトのディレクトリに移動：
```sh
cd /home/akkun1114/akkun1114.com/public_html/exp-alert.akkun1114.com/EXP-alert
```
今回はサブドメインでやっているためこのルート


# 2. 最新のコードをアップロード
## リモートリポジトリから最新のコードを取得：
```sh
git pull origin main
```


# 3. storage/app/public/items フォルダを作成
ストレージフォルダ items がない場合は作成：
```sh
mkdir -p storage/app/public/items
chmod -R 775 storage bootstrap/cache
```
✅ -p オプションで親フォルダがない場合も自動作成！ 
✅ 書き込み権限を適切に設定！


# 4. シンボリックリンクを再生成
```sh
rm -rf public/storage
php artisan storage:link
```
✅ public/storage/items/ から正しく参照できるようにする！


# 5. Faker
Faker を使用する場合、再インストール：
```sh
composer require fakerphp/faker --dev
composer dump-autoload
```
✅ オートロードを更新して、Faker クラスが正しく認識されるようにする！


# 6. 依存関係の更新
```sh
composer install --no-dev --optimize-autoloader
```
✅ --no-dev で本番環境に不要な開発用パッケージをインストールしない！


# 7. データベースをリセット & シーディング
⚠️ migrate:fresh は全データを削除するので慎重に！
```sh
php artisan migrate:fresh --seed
```
✅ データベースをリセットし、Seeder で初期データを投入！


# 8. キャッシュをクリア
```sh
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
```
✅ キャッシュが古いままだと変更が反映されないことがある！


# 9. 本番環境で動作確認
ブラウザで、変更が反映されているか確認。
自己紹介

## 1. 概要
こんにちは、レンリーと言います。エンジニア2年目の新米です。
今まで、エンジニア間の交流が社内でしかなかったのですがSNSに広めたいのでqiitaを始めてみました。
気軽に話しかけてください。

## 2. 経歴
経歴をざっくり紹介します。
### ① 小中学生まで
- 主にサッカーでRSBポジション
- その他、親に音楽系の習い事を複数

### ② 高校生
- 部活で新しくスプリントカヌーなるものを始めた
    - 競技人口が少なかったが、それなりの成績
    - 県2位、近畿大会7位
    - 様々な大会に参加

### ③ 大学生
- 情報理工系に進学
    - 最初にC言語を触り、プログラミングが何たるものかを理解
    - その他、ネットワーク、脳科学、ヒューマンインタフェースなど幅広い科目を受講
    - 研究室ではオブジェクト指向を叩き込まれる
    -
### ④ 社会人
- 関西から関東へ引っ越し、SIer企業に就職
- 自社の製品開発チームへ所属

## 3.現在
現在は、関東に引っ越してきて知り合いも特にいないので一人でやる趣味が多くなったという感じです。
ただ、どちらかというとアウトドアなことが好きです。

- 趣味
    - FPS系ゲーム（APEX、VAROLANTなど）
    - 競技プログラミング（PAIZAのAランク問題を解くなど）
    - サウナ
    - ラーメン巡り

### 4.あとがき
最近、エンジニアが集まるようなイベントに参加し是非ともエンジニアの方々と繋がりたくこちらを始めました。まずは、雑談から始められたらなと思います。
「まだできない」から始める！成長マインドセットで変わるエンジニア人生 🚀

https://qiita.com/YushiYamamoto/items/62adfef497c1178cf5c7

エンジニアとしての成功は、単に最新技術を知るだけでなく、考え方そのものを進化させることにあります。今回は、能力は努力と経験で伸ばすことができるという「成長マインドセット」が、初級エンジニアのキャリアをどのように変えるのか、具体例や実践的方法とともに詳しく解説します。  

![成長マインドセットで変わるエンジニア人生.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/949c44ae-7fc0-4c75-b212-78481aecfb86.png)

# 成長マインドセットが初級エンジニアを変える理由 🤩

エンジニアリングの現場では、技術習得だけでなく「考え方」が大きな差を生みます。成長マインドセットとは、「自分の能力は努力と学びによって伸ばすことができる」という信念です。これを持つことで、チャレンジ精神が育まれ、どんな難題も克服する意欲が湧いてきます。  

---

## 成長マインドセットとは？

成長マインドセット（Growth Mindset）は、スタンフォード大学の心理学者キャロル・S・ドゥエック博士が提唱した概念です。主な特徴は以下の通りです。

- **能力は固定されていない**  
  努力や学習を重ねることで、誰しも技術力や問題解決能力を向上させることができる  
- **失敗は成長のチャンス**  
  エラーや失敗を「自分の限界」ではなく、「次へのステップ」として受け入れる  
- **継続的な学びを楽しむ**  
  新しい技術や知識は常にアップデート可能なものであり、積極的に取り組む態度が求められる

対照的に、固定マインドセット（Fixed Mindset）は、自分の能力は生まれつき決まっており変化しないと考えてしまい、新しい挑戦を避けたり失敗を恐れる原因となります。

---

## なぜ成長マインドセットが重要なのか？

- **挑戦への意欲を高める**  
  「今はできない」ではなく「まだできない」と捉えることで、常に学ぶ姿勢が保たれ、新しい技術や未知の課題にも果敢に挑戦できます。

- **失敗を学びに変える**  
  失敗を恐れるのではなく、失敗から得たフィードバックや教訓を次回以降に活かすことで、より良い結果を生み出せるようになります。

- **持続的なスキルアップ**  
  エンジニアリングは日々進化しています。学び続ける意欲があれば、新しい技術へのキャッチアップもスムーズに進み、自己成長が実感できるようになります。

---

## 成長マインドセットを実践する方法

### 1. 「まだできない」と捉える  
固定マインドセットでは「できない」と諦めがちですが、「まだできない」という認識に切り替えることで、成長への余地を認めることができます。  

例：  
- 固定：「このコードは難しすぎる」  
- 成長：「今は理解できないけど、調べれば必ず使いこなせる」

### 2. フィードバックをポジティブに受け入れる  
他人からの指摘は、自分の視野を広げるチャンスです。  
- コードレビューでの意見をしっかり受け止め、次回の改善に活かす  
- チームメンバーや先輩に質問し、異なる視点を学ぶ

### 3. プロセスに焦点を当てる  
結果だけでなく、学ぶ過程にも注目しましょう。  
- 新しいフレームワークの導入は、最初から完璧を目指すのではなく、小さな成功体験の積み重ねが大切です。

### 4. 小さな成功体験を記録する  
毎日の達成感を大事にし、自分の成長を実感する習慣をつけましょう。  
- 「今日はこの関数を自分で作って動かせた」など、小さな成功をノートに記録することがおすすめです。

### 5. 自分自身と向き合う  
他人と比較するのではなく、昨日の自分とどれだけ前進できたかに焦点を当てます。  
- 定期的な自己評価と振り返りを行い、次なる目標を設定する

---

## 成長マインドセット実践のフローチャート

以下のフローチャートは、課題に直面したときの成長マインドセットの実践プロセスを表しています。

```mermaid
flowchart TD
    A[新しい課題に挑戦] --> B[「まだできない」と認識]
    B --> C[フィードバックの受け入れ]
    C --> D[試行錯誤を実施]
    D --> E[小さな成功体験を記録]
    E --> F[自己評価と振り返り]
    F --> G[成長と次の挑戦へ]
```

---

## 実例：エンジニアBさんの変革ストーリー

初級エンジニアのBさんは、Pythonに苦手意識を持っていました。  
しかし、彼は「まだできない」というマインドセットに切り替え、次のように取り組みました。

- **毎日少しずつ学ぶ**  
  毎日1時間公式チュートリアルに取り組み、わからない点はオンラインで調査  
- **小さなプロジェクトへの挑戦**  
  簡単な計算アプリなど、失敗を恐れず小さな成功体験を積み重ねる  
- **フィードバックの活用**  
  コードレビューを通じて自分の改善点を学び、すぐに実践

その結果、数ヶ月後にはBさんはPythonを使ってデータ分析ツールを自力で作成できるまでに成長し、今では新しい技術に積極的に挑戦するエンジニアへと変貌を遂げました。😊

---

## 成長マインドセットを維持するための日々の習慣

- **振り返りと記録**  
  毎日の学びや挑戦を日記やメモに記録し、自分の進歩を可視化する

- **定期的な自己評価**  
  週単位や月単位で、達成したことや改善点を見直し、目標を再設定する

- **ポジティブなコミュニティとの交流**  
  同じ志を持つ仲間と意見交換し、互いに刺激を受けながら成長できる環境を作る

---

## 固定マインドセットからの脱却のために

もし固定マインドセットに陥りがちな場合は、以下を試してみてください。

- 「失敗は恥」ではなく「失敗は成長のヒント」として捉える  
- 他人と比べるのではなく、昨日の自分と比べて成長を実感する  
- 小さな進歩でも自分を褒め、モチベーションを維持する

---

## まとめ

成長マインドセットは、初級エンジニアとしてのキャリアを大きく変える力を持っています。  
- **「まだできない」という認識を持ち、可能性を信じる**  
- **フィードバックや失敗から学び、小さな成功を積み重ねる**  
- **自己評価と振り返りを通じて、常に前進する姿勢を保つ**

日々の積み重ねが自信と実力に繋がり、結果としてプロフェッショナルなエンジニアとしての道を拓いてくれます。まずは一歩、挑戦することから始めましょう！💪

---  

この考え方を実践し、成長の喜びを感じながら、新しい技術への挑戦と自己革新を続けてください。あなたの次の一歩が、未来の大きな成功を形作るはずです。
個人的備忘録：チーム開発の難しさと、ブランチの命名規則や運用ルールの決め方についてアウトプットしてみた

## はじめに  
ITスクールのハッカソンに参加し、チームでの開発を経験しました。

:::note info
**短期間で成果を出す必要があり、限られた時間の中で仕様を決め、実装し、動作確認を行うのは想像以上に大変でした。**
:::

チームでの意思疎通やタスク管理の難しさを実感し、これらの経験を整理するために本記事を書きます。  

## 書こうと思ったきっかけ  
ハッカソンでは、技術的な課題だけでなく、メンバー間の意見のすり合わせや役割分担の難しさもありました。

:::note warn
***例えば、誰がどの機能を担当するのか、仕様変更が発生した際の対応方法など、開発を進める上での調整がうまくいかず、進捗が遅れることもありました。***
:::

このような課題を振り返り、次回の開発に活かすためにも、今回の経験を文章として残そうと思いました。

開発プロジェクトでは、適切なブランチ名を付けることで、作業の目的を明確にし、チーム内での管理がしやすくなります。

***ここでは、ブランチの命名規則について解説し、具体的なブランチ名の例を紹介します。***

## ブランチの命名規則を決めるメリット
適切なブランチ名のルールを決めることで、以下のメリットがあります。

- **可読性の向上**：ブランチ名を見ただけで内容がわかる
- **一貫性の確保**：プロジェクト内で統一感があり、管理しやすい
- **ミスの防止**：適切な分類により、誤ったブランチでの作業を防げる
- **CI/CDとの連携**：自動デプロイの設定をスムーズに行える

## おすすめのブランチ名の形式

### ① プレフィックスを活用
ブランチの種類を明確にするために、プレフィックスを付けるのが一般的です。

| プレフィックス | 用途 |
|--------------|--------------------|
| `feature/`  | 新機能の追加 |
| `fix/`      | バグ修正 |
| `hotfix/`   | 本番環境の緊急修正 |
| `release/`  | リリース準備 |
| `refactor/` | コードのリファクタリング |
| `chore/`    | 依存関係の更新や細かい修正 |
| `docs/`     | ドキュメントの追加・修正 |

#### **例**
- `feature/user-authentication`
- `fix/login-bug`
- `hotfix/payment-issue`
- `release/v1.2.0`
- `refactor/database-optimization`
- `docs/api-guide-update`

### ② チケット番号を付与
タスク管理ツール（Jira、GitHub Issues など）を使っている場合、チケット番号を含めると管理しやすくなります。

#### **例**
- `feature/PROJ-123-user-login`
- `fix/BUG-456-profile-update`
- `hotfix/PROD-789-payment-error`

### ③ 動詞を使う
ブランチ名に動詞を含めることで、作業の目的が明確になります。

#### **例**
- `feature/add-user-login`
- `fix/fix-payment-error`
- `refactor/improve-database-query`

## 運用ルールの決め方

✅ **ルールをチームで統一する**
プロジェクトごとにルールを決め、README や Wiki に記載しておくと、メンバー全員が統一した命名を使えます。

✅ **長すぎるブランチ名を避ける**
ブランチ名は短くても意味が通じるようにするのが理想です。長すぎると読みづらく、間違いの元になります。

#### **OK**：
- `feature/add-login`
- `fix/reset-password-bug`

#### **NG**：
- `feature/add-login-functionality-for-user-authentication`
- `fix/the-bug-where-password-reset-did-not-work-correctly`

✅ **スネークケースよりケバブケース**
ブランチ名には **ハイフン（-）** を使うのが一般的です（例：`feature/user-login`）。  
アンダースコア（_）やキャメルケース（UserLogin）より可読性が高いため、推奨されます。

## まとめ
短期間で開発を進めるためには、チーム内での適切なタスク管理と円滑なコミュニケーションが不可欠だと実感しました。

:::note warn
**また、想定外の問題が発生したときには、すぐに相談し、素早く対応策を考えることが重要です。**
:::

今回のハッカソンでの経験を糧に、今後のチーム開発では、よりスムーズに進行できるよう改善していきたいと考えています。
「責任感」で加速💨 初級エンジニアが成長する理由と実践法 🚀

https://qiita.com/YushiYamamoto/items/62adfef497c1178cf5c7

# 責任感が初級エンジニアの成長を加速させる理由 🚀

初めてコードを書くとき、細かいミスや予期せぬ障害に直面することは避けられません。しかし、これらの経験は「責任感」を持って取り組むことで、エンジニアとしての確かな成長の糧となります。ここでは、責任感の定義から、そのメリット、そして具体的な実践方法までを解説していきます。

![初級エンジニアの成長を加速.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/60d4075e-9be2-4a1f-855b-e0db39f5371b.png)


---

## 責任感とは？

責任感とは、自分が担当するタスクやプロジェクトに対して主体的に向き合い、起きた問題に対して逃げず解決策を見出そうとする姿勢を指します。エンジニアリングの現場では、以下のようなシーンで求められます。

- **コードの品質向上**  
  自分が書いたコードの挙動を理解し、必要に応じて修正や改善を行う  
- **問題解決への取り組み**  
  エラーやバグが発生した場合、自ら原因を追究し最適な解決策を提案する  
- **チーム全体への貢献**  
  個人の業務に留まらず、プロジェクト全体の成功を意識した行動を取る  

---

## 責任感がもたらすメリット

責任感を持つことは、以下のようなポジティブな影響をもたらします。

| メリット                           | 説明                                                                                                                                              |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| **成長速度の向上**                 | 自分のミスや課題に真摯に向き合うことで、問題解決能力やデバッグスキルが磨かれ、経験値が自然と積み重なります。                                             |
| **信頼されるエンジニアへ**          | 自身のタスクにオーナーシップを持ち、最後まで責任を果たすことでチームメンバーや上司からの信頼が増し、重要案件への起用機会が広がります。                         |
| **プロジェクト全体の視野拡大**       | 自己のタスクだけでなく、全体の流れや影響を考慮することで、より効率的な設計や実装方法の提案が可能となり、チーム全体のパフォーマンス向上に寄与します。         |

---

## 責任感を高めるための具体的なアクション

### 1. オーナーシップを持つ  
- 自分が担当したタスクやコードに対して、最初から最後まで責任を持って取り組む  
- 不具合が見つかった際は、迅速かつ積極的に改善策を講じる  

### 2. 問題発生時に逃げず向き合う  
- エラーやバグを発見したら、まずはエラーメッセージやログに目を通し、原因分析を徹底する  
- 必要ならば、同僚や先輩に意見を求め、チームで解決に取り組む  

### 3. チーム全体への配慮を忘れない  
- コードレビューの際は、他のメンバーが読みやすく理解しやすいコードを書くことを意識する  
- 自分の作業がプロジェクト全体にどのような影響を及ぼすかを常に考える  

### 4. 失敗から学び、次に活かす  
- 失敗をただのミスで終わらせず、何が原因だったのか、どのように改善できるかを記録する  
- 振り返りの時間を設け、次回に同じエラーを出さないための対策を立てる

---

## 責任を持つ行動を視覚的に理解するフローチャート

以下のシンプルなフローチャートは、責任感をもって問題解決に取り組む流れを図解したものです:

```mermaid
flowchart TD
    A[タスク開始] --> B[問題発生]
    B --> C[エラーメッセージ・ログの確認]
    C --> D[原因分析]
    D --> E[解決策の立案]
    E --> F[実装・テスト]
    F --> G[振り返りと記録]
    G --> H[次のタスクに活かす]
```

---

## 実際のケーススタディ：エンジニアBさんの挑戦

ある初級エンジニアBさんは、新規機能の実装中に発生したバグに対して以下のアプローチを取りました。

- **課題の認識と記録**  
  バグ発生時刻や状況、エラーメッセージを詳細に記録し、再現手順を明確化  
- **自主的な原因究明**  
  自分で手を動かして原因分析を行い、同僚にも相談しながら複数の解決策を模索  
- **改善策の実装とテスト**  
  解決策を試験的に実装し、各ステップで実際に動作するかを確認  
- **振り返りによるスキル向上**  
  最後に、何が問題であったか、どう改善できたかを記録した資料を作成し、チーム内で共有

この経験によりBさんは、技術力だけでなく、問題に対する主体的なアプローチの重要性を再認識し、今後のプロジェクトでも積極的にリーダーシップを発揮するようになりました。😊

---

## 責任感を日々養う習慣

- **毎日の振り返り**  
  短い日記やメモを付ける習慣をつけ、自分の成功や失敗、改善点を記録する  
- **小さなタスクのオーナーシップ**  
  大きなプロジェクトだけでなく、日々の小さなタスクにも責任感を持って取り組む  
- **フィードバックの積極的な受け入れ**  
  自分の仕事に対する他者からのフィードバックを前向きに受け止め、さらなる成長へと繋げる

---

## まとめ

責任感は初級エンジニアの成長を支える基盤です。  
- **自分が担当する仕事に対して、最後まで責任を持つ。**  
- **問題発生時は逃げずに、自ら原因究明・解決策の立案に取り組む。**  
- **失敗から学び、未来へ活かすことで、次第に信頼されるエンジニアへと成長する。**

小さな一歩の積み重ねが、あなたのキャリアに大きな影響を与えます。日々の業務の中で意識的に責任感を養い、チーム全体に貢献できるエンジニアを目指しましょう！💪

--- 

このような取り組みが、エンジニアとしてだけでなく、一人のプロフェッショナルとして自信を深め、次なるチャレンジへの原動力となります。皆さんも今日から、責任感を胸に、さらなる高みへ進んでください！

---

https://qiita.com/YushiYamamoto/items/4341aebac0a74ddd920d
失敗は成功のもと！エンジニアが成長するための最強マインドセット 💡

https://qiita.com/YushiYamamoto/items/62adfef497c1178cf5c7

# 失敗は成長への第一歩 ✨

プログラミングの現場では、エラーやバグ、予期せぬトラブルに直面することは日常茶飯事です。しかし、これらの「失敗」は決してマイナスではなく、むしろ自分を磨くための貴重な学習のチャンスです。ここでは、なぜ失敗を恐れずに取り組むべきか、その理由と具体的な手法を解説していきます。

![失敗への恐れ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3637864/f3146f18-b2f3-432f-8530-cee600714e92.png)


## なぜ「失敗を恐れない」べきか？

- **学びの宝庫**  
  失敗を経験することで、自分のどこに理解不足があるのか、どの点が改善可能かを知ることができます。エラーメッセージやログの解析を通して、根本原因を探るスキルが自然と身につきます。  

- **イノベーションの原動力**  
  失敗を通じて試行錯誤するプロセスは、新しいアプローチや革新的なソリューションを生み出す源となります。実際、数々の革新は失敗を乗り越えた先に待っています。  

- **柔軟な思考の醸成**  
  エラーに直面してもその都度学びを得ることで、逆境に立ち向かう柔軟性と問題解決能力が養われます。どんな困難も「次へのステップ」として捉えることで、前向きな姿勢が維持できます。  

---

## 失敗から学ぶ具体的なステップ

エンジニアとしての成長には、失敗から有効な学びを得るためのプロセスが不可欠です。以下のステップを意識してみましょう。

- **1. 問題の明確化**  
  どの部分で何がうまくいかなかったのか、エラーメッセージや発生条件を詳細に記録します。たとえば、ログを残す習慣は後々の分析に役立ちます。

- **2. 分析と原因の特定**  
  記録した情報を元に、問題の原因を洗い出しましょう。コードレビューや同僚とのディスカッションも有効です。

- **3. 試行錯誤と改善**  
  得た情報を元に、解決策を試して実装します。たとえ小さな改善でも、実際に手を動かして解決策を模索することが大切です。

- **4. 学びの記録と振り返り**  
  失敗とその解決策、学んだことをドキュメント化することで、次回以降同じミスを繰り返さないためのナレッジベースが築かれます。

以下のフローチャートは、失敗を学習機会に変えるプロセスをシンプルに表現しています。

```mermaid
flowchart TD
    A[問題の発生] --> B[エラーメッセージ・ログの記録]
    B --> C[原因の分析]
    C --> D[解決策の模索]
    D --> E[実装とテスト]
    E --> F[振り返りと記録]
```

---

## 具体例：あるエンジニアの挑戦ストーリー

ある初級エンジニアが、新しいJavaScriptライブラリを導入するプロジェクトに挑戦しました。最初は仕様の理解不足から予期せぬバグが次々と発生し、納期にも影響が出る状況に陥りました。しかし、彼は以下のプロセスを踏むことで問題を克服しました。

- **エラーメッセージの徹底解析**  
  何度もログを確認し、どの部分でエラーが発生しているのかを特定しました。

- **コミュニティへの相談**  
  オンラインフォーラムや同僚に質問をして、さまざまな解決策のヒントを得ました。

- **試行錯誤の実施**  
  複数の実装パターンを試し、最も適切な方法を見つけ出しました。

- **成功体験の共有**  
  解決策をドキュメント化し、同じ課題に直面する他のエンジニアへのアドバイスとして共有しました。

また、以下はPythonでの簡単な例です。ここでは、データ型の不一致によるエラー発生とその修正プロセスが学べます。

```python
# エラーを含むコード例
def calculate_average(numbers):
    total = 0
    for num in numbers:
        total += num  # 異なる型の値を足し合わせるとエラー発生
    return total / len(numbers)

# 間違ったリスト（空文字が混入している）
numbers = [1, 2, 3, "", 5]
print(calculate_average(numbers))
```

この例では、エラーメッセージをもとにデータ型のチェックを追加することで問題が解決され、より堅牢なコードに改善されます。

---

## 失敗を恐れないマインドセットの維持方法

- **ポジティブな環境を作る**  
  チームやコミュニティ内で、失敗を隠さず共有しあえる文化を育むことが重要です。フィードバックを積極的に交換することで、失敗を恐れず挑戦できる雰囲気を作り上げましょう。

- **継続的な学習習慣**  
  定期的に技術記事を読んだり、セミナーに参加したりすることで、最新の知識や手法を取り入れ、常に自己改善を図る姿勢を維持します。

- **チャレンジ精神の維持**  
  小さな成功体験だけでなく、リスクのある新たなプロジェクトにも果敢に挑戦することで、次第に失敗への耐性が身につき、より大きな成長につながります。

---

## まとめ

失敗を恐れずに挑戦することは、エンジニアとしての成長において不可欠なマインドセットです。  
- **エラーやバグを学びのチャンスとして活かす。**  
- **原因の特定、解決策の試行、そして振り返りを徹底する。**  
- **ポジティブな環境・継続的な学習・積極的なチャレンジを心がける。**

これらの要素を日々の業務や学習に取り入れることで、どんな難題にも柔軟かつ積極的に取り組むエンジニアへと成長できるはずです。自分自身の経験をしっかりと記録し、仲間と共有することで、未来への一歩を着実に踏み出していきましょう！  

---  

この記事が、失敗を恐れず前向きにチャレンジする皆さんの道しるべになれば幸いです。新たな挑戦と発見を楽しみながら、次のステップへと進んでください。

https://qiita.com/YushiYamamoto/items/8609cc692e960de30c5f
JavaScript（ジャバスクリプト）とは？

JavaScript（ジャバスクリプト）とは？

JavaScriptは、ウェブ開発において広く使用されているプログラミング言語です。動的なウェブページを作成するために使われ、フロントエンドおよびバックエンド開発の両方で利用されます。

JavaScriptの特徴

クライアントサイド: ブラウザ上で動作し、ユーザーの操作に応じたインタラクティブな機能を提供

サーバーサイド: Node.jsを使用することで、サーバーサイド開発も可能

軽量: シンプルな構文で学びやすく、初心者にも適した言語

オブジェクト指向: オブジェクトを活用して柔軟なプログラミングが可能

イベント駆動型: ユーザーの操作（クリック、スクロールなど）に応じた処理が実行可能


基本的なコード例

1. 変数の宣言

let message = "こんにちは、JavaScript！";
console.log(message);

2. 条件分岐

let num = 10;
if (num > 5) {
    console.log("5より大きい");
} else {
    console.log("5以下");
}

3. ループ処理

for (let i = 0; i < 5; i++) {
    console.log("カウント: " + i);
}

4. 関数の定義

function greet(name) {
    return "こんにちは、" + name + "さん！";
}
console.log(greet("太郎"));

JavaScriptの主な用途

ウェブサイトのインタラクティブ機能（ボタンのクリック、アニメーション、フォームの検証など）

シングルページアプリケーション（SPA）（React、Vue.js、Angularなどのフレームワークを使用）

サーバーサイド開発（Node.jsによるAPI開発、データベースとの連携）

ゲーム開発（Canvas APIやThree.jsを活用）


まとめ

JavaScriptは、現代のウェブ開発に不可欠な言語です。基本的な構文を学び、フレームワークやライブラリを活用することで、より高度なアプリケーション開発が可能になります。
[Rider]固定行の背景色を変えて区別しやすくする

# 概要
Riderにはファイルをスクロールしても親要素を確認できるよう画面上部に階層を固定表示してくれる機能「固定行」があります。
https://pleiades.io/help/idea/sticky-lines.html

でも、デフォルトではどの部分が固定行なのか少し区別がしづらいです
![スクリーンショット 2025-02-15 8.11.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/08513d92-29ca-44b0-a01b-9f114d31c74f.png)

# 本文
背景色を変えちゃえば区別しやすくなります！
![スクリーンショット 2025-02-15 8.07.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/83ced434-5ed6-414f-9e83-29cc777259a6.png)

（操作手順）
メニューからJetbrainsRider > 設定
設定ウィンドウでエディター > カラースキームの切り替え > 一般
エディター > 固定行 > 背景
項目の中のバックグラウンドにチェックを入れて好みの色を指定してください。



![スクリーンショット 2025-02-15 8.18.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/cc1adba2-fcf8-4efb-a890-6088c5a6936e.png)

:::note info
お好みで「ホバー時」と「枠線」も変更できます。こちらの場合は「次の値を継承」のチェックを外したらバックグラウンド色を変えることができるようになります。
:::

# おまけ
固定行の項目はクリックする事ができます。一番上のclass部分をクリックしたら一気にファイルの先頭に飛ぶ事もできます（便利！）
Nvidiaインストールしようとしたらインストールされていた話

表題通りだがメモ
エラーが出たので調べたら
```ssh
nvidia-installer log file '/var/log/nvidia-installer.log'
creation time: Fri Feb 14 23:05:41 2025
installer version: 550.90.07

PATH: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

nvidia-installer command line:
    ./nvidia-installer
    --dkms
    -a
    --ui=none
    --no-questions
    --no-drm
    --install-libglvnd

Using built-in stream user interface
-> Detected 4 CPUs online; setting concurrency level to 4.
-> Scanning the initramfs with lsinitramfs...
-> Executing: /usr/bin/lsinitramfs   -l /boot/initrd.img-5.10.0-33-cloud-amd64
WARNING: An NVIDIA kernel module 'nvidia' appears to be already loaded in your kernel.  This may be because it is in use (for example, by an X server, a CUDA program, or the NVIDIA Persistence Daemon), but this may also happen if your kernel was configured without support for module unloading.  Some of the sanity checks that nvidia-installer performs to detect potential installation problems are not possible while an NVIDIA kernel module is running.
-> Would you like to continue installation and skip the sanity checks? If not, please abort the installation, then close any programs which may be using the NVIDIA GPU(s), and attempt installation again. (Answer: Abort installation)
ERROR: Installation has failed.  Please see the file '/var/log/nvidia-installer.log' for details.  You may find suggestions on fixing installation problems in the README available on the Linux driver download page at www.nvidia.com.
```


そもそも既にインストールされていた...
```
nvidia-smi
```
[Python] Scopeについて（勉強用）

pythonのclassを学習していく中でScopeという機能を新たに学習したので、実際にコードを書いて中身を確認していく。
```python:qiita.py

def scope_test():

    def do_local(): 
        Student = "Taniyama"
    
    def do_nonlocal():
        nonlocal Student
        Student= "Takagi"
    
    def do_global():
        global Student
        Student = "Kawai"

    Student = "Katayama"

    do_local()
    print("After local assignment:",Student) #not assigned
    do_nonlocal()
    print("After nonlocal assignment:",Student) #assigned
    do_global()
    print("After global assignment",Student) #not assigned

scope_test()
print("In global scope:",Student)
```

出力
```python:qiita.py
After local assignment: Katayama
After nonlocal assignment Takagi
After global assignment Takagi
In global scope Kawai
```

1　関数scope_testを出力した際に、子関数のdo_localが処理され、変数Studentに"Taniyama"が代入されているが、親関数の中で"Katayama"と定義されているので、"Katayama"と出力される。"Taniyama"はあくまでdef do_local():内の"Student"が"Taniyama"になっただけの処理（ローカル変数）

2 nonlocalを使うことで親関数の変数を参照でき、親関数のStudentにdo_nonlocalで定義した"Takagiが代入され出力される。（ノンローカル変数）

3 globalを使うことで、global変数が変更されるが、親関数には影響を与えないため、scope＿test内のStudentはdo_nonlocalで代入された"Takagi"が出力される。（グローバル変数）

4 関数の外の処理ではdo_global()で定義されたグローバル変数Student = "Kawai"が代入されているため、モジュール内ではStudent = "Kawai"となり、出力される。

そもそもスコープとは、プログラム内で、変数や関数が有効な範囲を指す。

スコープには３種類あり、グローバルスコープ、ノンローカルスコープ、ローカルスコープがある。

グローバルスコープ：
　プログラム全体からアクセスが可能

ノンローカルスコープ：
　ネストされた親関数の変数を参照、変更することができる。グローバル変数には影響しない。

ローカルスコープ：
　関数内で定義され、その範囲内のみで有効なもの。

 これらに分けて変数を設定すると有効範囲が明確になり、意図せず変数が上書きされるリスクを減らせる。また可読性の向上。

 基本的に`global`と`nonlocal`を使用しなけらばローカル変数として扱われ、関数内でのみ有効
【Laravelエラー】Undefined constant 

# 問題
「Laravel」+「Docker」＋「Nginx」のリバースプロキシ環境で、Breeze導入後、記事投稿のCRUDを実装していたところ次のようなエラーが発生したため、解消方法をまとめています。

すでに、モデル、コントローラー、ルーティングは実装済みです。
## エラー内容
「"article"が未定義ですよ」といったエラーでした。
```
Internal Server Error

Error
Undefined constant "article"
```

[![Image from Gyazo](https://i.gyazo.com/40944378f24a6805ef40f702690c55b4.png)](https://gyazo.com/40944378f24a6805ef40f702690c55b4)

## 問題発生時のコード
```:src/resources/views/articles/index.blade.php
@extends('layouts.parents')
@section('title', 'Articleのindex')
@section('content')

<div>
    <h2>記事一覧</h2>
    @foreach ($articles as $article)
    <div class="p-6 justify-center">
        <h3>{{ @article->title }}</h3>
        <p class="p-3 bg-red">{{ @article->is_published }}</p>
    </div>
    @endforeach
</div><!-- 全体囲む -->

@endsection
```

# 解決方法
foreachで「$article」としていたのに、「@article」としていたことが原因でした。

## 修正後コード
```:src/resources/views/articles/index.blade.php
@extends('layouts.parents')
@section('title', 'Articleのindex')
@section('content')

<div>
    <h2>記事一覧</h2>
    @foreach ($articles as $article)
    <div class="p-6 justify-center">
        <h3>{{ $article->title }}</h3> // 修正
        <p class="p-3 bg-red">{{ $article->is_published }}</p> // 修正
    </div> // 修正
    @endforeach
</div>

@endsection

```

# おわりに
@なのか$なのか混乱してくる時がありますね(泣)。

公式やマニュアルを漁って違いを理解していこうと思います。

https://laravel.com/docs/11.x/blade

https://readouble.com/laravel/11.x/ja/blade.html

この記事がエラー解消のために役立ちましたら幸いです。
また、この記事の内容に不備や改善点などがありましたら、ご指摘いただけると嬉しいです。

# 参考

https://qiita.com/kazu56/items/a226b4ce1b7fa7c38a9f
心理的安全性：タイムズチャンネルが生む「気軽な相談」で、「こんなこと聞いていいの？」をなくすチーム開発の工夫

## はじめに

受講しているITスクールのハッカソンで、チーム開発を円滑に進めるために、チームメンバーの方が「タイムズチャンネル」を作成してくださいました。（**本当にありがとうございます！**）

:::note info
**このチャンネルでは、メンバーが自由に作業の進捗や成功事例、ベストプラクティスを共有できる場となっています。**
:::

また、エラーやトラブルについて気軽につぶやくことで、問題解決のスピードが上がることを実感しました。

## 書こうと思ったきっかけ

今回、タイムズチャンネルを活用することで、1週間悩んでいたエラーが1時間で解決するという成功事例がありました。

これをきっかけに、心理的安全性を確保しながら情報共有の場を作ることの重要性を再認識し、その効果についてまとめたいと思いました。

## タイムズチャンネルとは

タイムズチャンネルとは、チーム内でカジュアルに作業内容や気づきを共有できるチャットチャンネルのことです。

このチャンネルでは、以下のような投稿が行われています。

- **どんな作業をしているのか**
- **成功事例やベストプラクティスの共有**
- **ちょっとした雑談**
- **チームメンバー向けの役立つ情報**
- **エラーやトラブルの共有**

特に、エラーやトラブルについて気軽につぶやくことがポイントとなっており、問題解決のスピードを大幅に向上させることができました。

## 心理的安全性を確保することが大事

タイムズチャンネルを運用する上で最も重要なのは、「心理的安全性を確保すること」です。

心理的安全性があることで、メンバーは気軽に質問や相談ができるようになり、以下のようなメリットが生まれます。

- **「こんなこと聞いていいのかな？」という遠慮をなくし、スムーズな情報共有ができる**
- **問題が発生した際にすぐに相談できる環境が整う**
- **他のメンバーの知見を活かして、より良い解決策を見つけられる**
- **成功体験を共有することで、チームのモチベーション向上につながる**

このように、心理的安全性を意識することで、チーム内のコミュニケーションが活性化し、より良い開発環境が生まれます。

## 実際どんな良い影響があったのか

タイムズチャンネルを導入したことで、以下のような良い影響がありました。

1. **問題解決のスピード向上**
   - あるメンバーが1週間悩んでいたエラーについてつぶやいたところ、私を含む他のメンバーと画面共有をしながら1時間で解決。
   - もし個人で抱え込んでいたら、さらに時間がかかっていた可能性がある。

2. **知識の共有が促進された**
   - 誰かが見つけたベストプラクティスを共有することで、チーム全体のスキルが底上げされた。
   - 他のメンバーのやり方を参考にすることで、より効率的な開発手法を学ぶことができた。

3. **コミュニケーションが活性化**
   - 業務連絡だけでなく、雑談やちょっとした気づきも共有されることで、チームの雰囲気が良くなった。
   - 特にリモート環境では、気軽に話せる場があることで孤独感の軽減につながった。

## まとめ

タイムズチャンネルを導入したことで、チーム開発において以下のようなメリットを得ることができました。

- **エラーやトラブルを気軽に共有できる環境を作ることで、問題解決のスピードが向上**
- **成功事例やベストプラクティスを共有することで、チーム全体のスキルが向上**
- **雑談や気軽なつぶやきを通じて、心理的安全性を確保し、円滑なコミュニケーションが実現**

今後もタイムズチャンネルを活用しながら、より良いチーム開発の環境を整えていきたいと思います！
M5NanoC6でアバター(Avatar.h)で遊ぶ。(スタックチャン)「スタックチャンフェス




x 過去ログを見よ!!!

x M5Unified 0.2.3
x UNIT_GLASS 0.0.1
x M5GFX 0.2.5
x ESP32 3.0.7
x M5Satck_Avatar 0.10.0
x なぜかNanoC6を抜いて挿したら動いた
x ESP32 3.0.7にダウンバージョンしたら動いた。
x M5NanoC6 は、 M5Stack NanoC6 , NanoC6 , M5NanoC6 , M5 NanoC6 , M5Nano C6 の事
x #スタックチャン

目的
スタックチャンで遊ぶ。


いろいろ
理系フリマ

結果
----

![image_original(4).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/c4797055-6068-409e-99cb-eeb73d185425.jpeg)



プログラム
----


```c++


#include <M5UnitGLASS2.h>
#include <M5Unified.h>

#include <Avatar.h>
m5avatar::Avatar avatar;

void setup() {
  auto cfg=M5.config();
  cfg.unit_glass2.pin_sda=2;
  cfg.unit_glass2.pin_scl=1;
  M5.begin(cfg);

  //M5.Lcd.setFont(&fonts::lgfxJapanGothicP_16);
  //M5.Lcd.println("こんにちは世界!!");
  //M5.Lcd.setFont(&fonts::FreeMonoBold9pt7b);
  //M5.Lcd.println("SSD1306\nGME12864-51");

  avatar.setScale(.3);
  avatar.setPosition(-88,-96);
  avatar.init();
}

void loop() {
}



```
【Laravelエラー】Illuminate\Routing\Router::resources(): Argument #1 ($resources) must be of type array, string given

# 問題
「Laravel」+「Docker」＋「Nginx」のリバースプロキシ環境で、Breeze導入後、記事投稿のCRUDを実装していたところ次のようなエラーが発生したため、解消方法をまとめています。
## エラー内容
Router::resources() の1番目の引数は配列でなければならないが文字列が渡されているという型のエラーが出ているようです。
```
Internal Server Error

TypeError
Illuminate\Routing\Router::resources(): Argument #1 ($resources) must be of type array, string given, called in /var/www/src/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php on line 361
```

[![Image from Gyazo](https://i.gyazo.com/64fc58990d93c86671831da00a043d39.jpg)](https://gyazo.com/64fc58990d93c86671831da00a043d39)

## 問題発生時のコード
```:src/route/web.php
<?php

use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ArticleController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('top');
})->name('top');

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
    Route::resources('/article', ArticleController::class); // 原因となるコード
});

require __DIR__.'/auth.php';

```

# 解決方法
「**resources**」と記述していたのが原因だったため、「**resource**」に修正しました。

```:src/route/web.php
Route::resource('/article', ArticleController::class);
```
全体のコード
```
<?php

use App\Http\Controllers\ProfileController;
use App\Http\Controllers\ArticleController;
use Illuminate\Support\Facades\Route;

Route::get('/', function () {
    return view('top');
})->name('top');

Route::get('/dashboard', function () {
    return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');

Route::middleware('auth')->group(function () {
    Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
    Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
    Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
    Route::resource('/article', ArticleController::class); // 修正完了
});
require __DIR__.'/auth.php';
```

# おわりに
以前にrailsで学習しており、「resources」と記述していtのもあってついその記述をしてしまいました。

ちなみにこのエラー出す以前にタイポミスをしており、「〜〜does not exist.」というエラーも出しておりました。

Laravelもわかってくると楽しいのですが、コードの記述量やRailsと書き方も違って慣れるまで難しさを感じます。

この記事がエラー解消のために役立ちましたら幸いです。
また、この記事の内容に不備や改善点などがありましたら、ご指摘いただけると嬉しいです。

# 参考
https://qiita.com/suiru_nakamura/questions/79c99a76a24727825760

https://qiita.com/kazu56/items/a226b4ce1b7fa7c38a9f
また(SSD1306)「こんにちは...」を表示して遊ぶ。(M5Unified 0.2.3)(M5NanoC6)


x 過去ログを見よ!!!
x M5Unified 0.2.3
x UNIT_GLASS 0.0.1
x M5GFX 0.2.5
x ESP32 3.0.7
x なぜかNanoC6を抜いて挿したら動いた


目的
SSD1306(OLED)に漢字を表示して遊ぶ

いろいろ
M5NanoC6では、ESP32 ArduinoをESP32 3.0.7に
戻したら表示できた。


結果
----


![image_original (46).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/ef881d11-0ea4-4cfc-8d1e-671d8cb67da1.jpeg)



プログラム
----


```c++


#include <M5UnitGLASS2.h>
#include <M5Unified.h>

void setup() {
  auto cfg=M5.config();
  cfg.unit_glass2.pin_sda=2;
  cfg.unit_glass2.pin_scl=1;
  M5.begin(cfg);

  M5.Lcd.setFont(&fonts::lgfxJapanGothicP_16);
  M5.Lcd.println("こんにちは世界!!");
  M5.Lcd.setFont(&fonts::FreeMonoBold9pt7b);
  M5.Lcd.println("SSD1306\nGME12864-51");
}

void loop() {
}



```