OmniAICreator/Qiita-1.07M huggingface dataset:
猿でもわかるAIの倫理・リスクシリーズ 🐵⚠️バイオAIと生命倫理問題




## 1. はじめに：生命とAIの境界が曖昧になる時代

近年、AI技術の進歩は医療・バイオテクノロジーの分野にまで急速に広がり、「バイオAI（Bio-AI）」という新しい潮流が生まれています。
たとえば、AIがヒトの遺伝子編集の最適化に関与したり、生命のふるまいを模倣する神経ネットワークを構築したりといった事例が実際に登場しています。

しかしここで重要なのは、「技術的に可能か」だけでなく「倫理的に許容されるか」という問いです。
**生命を操作するAI** においては、我々エンジニアが現場レベルで倫理に向き合うことが避けられません。

---

## 2. バイオAIとは何か？技術の概要

**バイオAI** とは、以下の2つの技術領域が融合することで成り立ちます：

* **AI（人工知能）技術**：機械学習、深層学習、強化学習など
* **バイオテクノロジー**：ゲノム解析、分子モデリング、細胞シミュレーションなど

### 主なユースケース

| 分野    | バイオAIの活用例           |
| ----- | ------------------- |
| 医療診断  | AIによる画像診断、がん検出      |
| 新薬開発  | 分子構造予測、薬剤候補のスクリーニング |
| ゲノム編集 | CRISPRのターゲティング最適化   |
| 人工臓器  | 神経信号の模倣と再構成         |

図：バイオAI技術の関係図
🖼️（※図を挿入：AI ⇄ BioTechの矢印付き概念図）

---

## 3. 実装例：AIでDNA塩基配列の異常を検出する

ここでは、実際にPythonを使って「AIでDNA配列の異常検出」を行うシンプルな実装を紹介します。

### 使用ライブラリ

```bash
pip install scikit-learn pandas matplotlib
```

### サンプルコード（簡易モデル）

```python
from sklearn.ensemble import RandomForestClassifier
import pandas as pd

# 疑似データセット：DNAのA/T/G/Cを数値に変換したもの
data = pd.read_csv("dna_sequence.csv")  # features: seq1, seq2, ..., seq100
X = data.drop("label", axis=1)
y = data["label"]  # 0: 正常, 1: 異常

model = RandomForestClassifier()
model.fit(X, y)

# 結果の確認
print("Accuracy:", model.score(X, y))
```

### 結果例（可視化）

```python
import matplotlib.pyplot as plt
importances = model.feature_importances_
plt.bar(range(len(importances)), importances)
plt.title("特徴量の重要度")
plt.show()
```

🖼️（※図：特徴量重要度のグラフを挿入）

---

## 4. 実務での知見：陥りやすい落とし穴と対策

### ❌ よくある失敗例

| 失敗         | 内容                     |
| ---------- | ---------------------- |
| データ偏り      | 学習データに生物学的な偏りがあると精度が低下 |
| ブラックボックス問題 | なぜその予測結果になったのか不明瞭      |
| 道徳的懸念を無視   | 結果をそのまま医療現場に使うリスク      |

### ✅ 実務で役立つヒント

* **Explainable AI（XAI）** を導入して説明性を担保する
* 生物学の専門家との連携を必ず確保する
* 結果を過信せず「意思決定補助ツール」として位置づける

---

## 5. 応用例：未来の「AI生命設計」に向けて

バイオAIは今後、次のような応用が期待されています：

* **個別化医療**：ゲノムとライフスタイルに応じたAI医療
* **人工生命**：AIで進化する“生きている”アルゴリズム
* **神経工学**：脳信号を模倣して義手を制御

ただし、これらには強い**生命倫理的判断**が常に伴います。

🖼️（※図：AI設計と生命設計の融合イメージ）

---

## 6. まとめ：AIが生命を扱う未来に向けて

| 項目       | 内容                        |
| -------- | ------------------------- |
| ✅ メリット   | 高精度診断、新薬開発の高速化、コスト削減      |
| ⚠️ リスク   | 生命の操作における倫理問題、プライバシー侵害    |
| 🔭 今後の展望 | 倫理フレームワーク整備と国際的ガイドラインの必要性 |

---

## 🧠 最後に

バイオAIは「SF的未来」ではなく、既に現実の医療現場や研究所で使われ始めています。
私たちエンジニアがこうした技術を扱う際、精度だけでなく**生命倫理の視点**も忘れず、責任ある実装を行うことが求められています。

次回はシリーズ最終回として「AIと社会的公正の交差点」について掘り下げていく予定です。

---

### 📎 用語解説

* **ゲノム**：生物の全遺伝情報のこと
* **CRISPR**：遺伝子編集技術の一種
* **XAI（Explainable AI）**：AIの判断根拠を説明可能にする技術
* **バイオインフォマティクス**：生物学データを情報科学で解析する分野
【Spring Boot × Docker】WSL環境でWebサービスを構築するサンプル手順とコード


# 【Spring Boot × Docker】WSL環境でWebサービスを構築するサンプル手順とコード

## はじめに

Windows11 + WSL Ubuntu 24.04 上で、Spring Boot アプリケーションを Docker コンテナで起動してみた手順をまとめました。

Spring Boot アプリは公式チュートリアル「[Spring Boot with Docker](https://spring.pleiades.io/guides/gs/spring-boot-docker/)」を参考に作成しています。

---

## 環境

| 項目        | バージョン              |
|-------------|-------------------------|
| OS          | Windows 11              |
| WSL         | Ubuntu 24.04            |
| Java        | OpenJDK 17              |
| Spring Boot | 3.x（Spring Initializr）|
| Docker      | 24.x（WSL 経由）       |

---

## 1. プロジェクト作成

Spring Initializr または curl でテンプレートを作成します。

```bash
curl https://start.spring.io/starter.tgz \
  -d dependencies=web \
  -d name=demo \
  -d packageName=hello \
  | tar -xzvf -
````

### ディレクトリ構成（一部）

```
demo/
├── build.gradle
├── src/
│   └── main/
│       └── java/
│           └── hello/
│               └── Application.java
```

---

## 2. Javaファイルの中身

```java
// src/main/java/hello/Application.java
package hello;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class Application {

  @RequestMapping("/")
  public String home() {
    return "Hello Docker World";
  }

  public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
  }
}
```

---

## 3. Dockerfile の作成

プロジェクトルートに `Dockerfile` を作成：

```Dockerfile
# ベースイメージ
FROM eclipse-temurin:17-jdk-jammy

# 作業ディレクトリ作成
WORKDIR /app

# Jar ファイルをコピー（ビルド後のもの）
COPY target/*.jar app.jar

# ポート開放
EXPOSE 8080

# アプリケーション起動
ENTRYPOINT ["java", "-jar", "app.jar"]
```

---

## 4. build.gradle の設定

`build.gradle` に以下のように記述します（Maven の場合は `pom.xml`）。

```groovy
plugins {
    id 'java'
    id 'org.springframework.boot' version '3.2.0'
    id 'io.spring.dependency-management' version '1.1.0'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '17'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

bootJar {
    archiveFileName = 'app.jar'
}
```

---

## 5. アプリのビルドと Docker イメージ作成

```bash
./gradlew bootJar
docker build -t springboot-docker-demo .
```

---

## 6. コンテナ起動と動作確認

```bash
docker run -p 8080:8080 springboot-docker-demo
```

以下にアクセス：

```
http://localhost:8080
```

表示：

```
Hello Docker World
```

---

## 7. WSL 環境での注意点

* Docker Desktop をインストールし、「WSL2 統合」を有効にしておく。
* `docker` コマンドは WSL 上から直接使用可能。
* ブラウザは Windows 側のものでOK（localhostは共通）。

---

## おわりに

WSL環境でも、DockerとSpring Bootを使えばローカルで簡単にWebサービスを構築できます。

今後は `docker-compose` でのDB連携や、ホットリロード対応の開発環境構築なども検討していきたいです。

---
查看T-code对应的程序名

方法1：SE93
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/a83ee1f3-990b-4fc8-9149-7f5d7738db6f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/c9a8a0b9-6045-4189-8634-30d9f92e6115.png)

方法2：进入该机能画面，点システム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/e5bc1a8a-6580-402b-be69-b4927f2a2ece.png)
点ステータス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/82106df9-a87f-4377-8619-f89af4c28b5b.png)
可以看到程序名
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/33f5e529-5153-473f-bf8f-3cdcfb6ba978.png)
Unityのasync/awaitの使い方

## Async/awaitとは...
``` Async ```は非同期処理であることを定義する時に使う

```await```は指定した処理が完了するまで**非同期で**待つ。

```非同期処理```とはキャラクターを動かす処理などのメインとなる部分とは同期をせずに行う処理のことである。

例をあげると、ゲームのローディング中に遊べるミニゲームなどがある。


## 使用例
```c#        
        Debug.Log("1");
        
        await OneSecond();
        
        Debug.Log("2");

        async Task OneSecond()//asyncで非同期処理を定義
        {
            await Task.Delay(1000);//1s待機
        }
```

```Task```は非同期処理が完了した場合に通知を送ってくれるようなイメージ。そのためawaitの処理を使う上で同時に覚えておく必要がある


## まとめ

・asyncは非同期処理をさせたいときに使う

・awaitは処理が完了するまで**非同期**で待機

・Taskは処理の完了を教えてくれる
エンジニア1年目で学んだVSCode爆速カスタマイズ5選！

# エンジニア1年目で学んだVSCode爆速カスタマイズ5選！

今回は、エンジニア1年目の僕が実際に使って「めちゃ効率上がった！」と感じたVSCodeの設定・拡張機能を5つ厳選して紹介します！

---

## ✅ 1. `Auto Rename Tag` でHTML編集が神速に！

HTMLタグの`<div>〜</div>`みたいなペアを自動で編集してくれるやつ。

```
拡張機能名: Auto Rename Tag
```

---

## ✅ 2. `Prettier`で自動整形 → 保存するだけでコードが美しく！

JavaScript / TypeScript / HTML / CSSなど、保存時に一括整形。
必須レベル！

```
拡張機能名: Prettier - Code formatter
```

設定（settings.json）に以下を追加：

```json
"editor.formatOnSave": true,
"[javascript]": {
  "editor.defaultFormatter": "esbenp.prettier-vscode"
}
```

---

## ✅ 3. `GitLens`でgit操作がGUIで爆速に！

コミットした人・日付・変更内容がコードの横に表示される！  
チーム開発で「これ誰が書いた？」って時に便利。

```
拡張機能名: GitLens — Git supercharged
```

---

## ✅ 4. `TabNine`でAI補完を体感！

コード補完が異常に賢いAIアシスト。英語苦手でも書ける感覚になる。
無料でも十分すごいけど、有料にするとさらに爆速。

```
拡張機能名: TabNine
```

---

## ✅ 5. ショートカットのカスタマイズで「マウス禁止生活」

自分は以下を設定してから超時短に。

```json
{
  "key": "ctrl+shift+d",
  "command": "editor.action.duplicateSelection"
}
```

---

## ✍️ おわりに

VSCodeはカスタマイズ次第でマジで開発効率変わります！

この記事が「明日からのコーディング環境改善」に役立てば嬉しいです。

他にもおすすめ設定あったらぜひ教えてください🙌
業界にもっとポジティブな空気を。だからQiitaでコメントしています

## はじめに
こんにちは！
IT業界で4年目を迎え、現在は開発業務にチャレンジしているTOMON_9914です。
プログラミングの実務経験はまだ1年に満たないものの、これまで培ってきた業務理解やチーム連携の視点を活かしながら、日々技術を学び続けています。

今回は、私がなぜQiitaの記事にコメントしたり、質問に回答したりするようになったのか？
そのきっかけや思いについて、ひとつの記事にまとめてみました。
もしこれから技術記事を書いたり、誰かの記事にリアクションしてみようかな？と考えている方がいれば、少しでも参考になれば嬉しいです。

## なぜコメントを書くのか？

結論から言うと、理由は3つあります。

- 言葉の使い方を見直したいと思ったから

- コメントやリアクションが、誰かのモチベーションになると思ったから

- 業界にもっとポジティブな空気を増やしたかったから

それぞれについて詳しくお話しします。

## 言葉の使い方を見直したいと思ったから

エンジニアってどこか言葉に棘があったりしませんか？

例えば、こんな記事もあります。

https://anond.hatelabo.jp/20250305150606

私自身、働く中で「その言い方キツくない？」と感じたり、逆に自分が無意識にそういう言葉遣いをしてしまっていたと気づいた場面もありました。
そこで、相手にどう伝えたら、前向きに受け取ってもらえるかを考えるようになったんです。

誰かが主体的に動ける時って、大抵前向きな感情を持てている時だと思います。
ダメ出し一つにしても、相手のやる気を削がず、むしろやる気が出て元気が出るような伝え方をすることで、いいチームづくりにもつながると感じました。

## コメントやリアクションが、誰かのモチベーションになると思ったから

これはシンプルですがとても大切なことです。

自分が書いた記事にいいねやコメントが付くと、やっぱり嬉しいですよね。
私も「また頑張って書こう！」という気持ちになれます。

だからこそ、自分が読んで共感した記事や学びになった投稿には、積極的にコメントやリアクションを送るようにしています。
それが少しでも誰かのモチベーションになればと思っています。

## 業界にもっとポジティブな空気を増やしたかったから

開発の仕事って、トラブル対応・納期・調整ごと…と、どうしてもネガティブな話題が増えがちです。
でも、だからこそ **ポジティブなコミュニケーション**を意識して取り入れたいと考えるようになりました。

## まとめ

この記事では、私がQiitaにコメントを書き始めた理由について書きました。

- 自分の言葉づかいを見直したいという内省

- 誰かのモチベーションを後押ししたいという気持ち

- 業界にもっとポジティブな空気を増やしたいという願い

こうした思いを胸に、これからもコメントを続けていきたいと思います。

この記事が、読んでくださった方の心にも少しでも響いたら嬉しいです。
【初心者向け】生成AI × Cursorでコード解説を自動生成してみた！

## はじめに
こんにちは、駆け出しプログラマーのTOMON_9914です！

最近話題のAIコーディングツール「Cursor」を初めて使ってみました。  
本記事では、実際に使ってみた体験談と、どんな場面で便利に使えそうか？についてまとめています。

「Cursorってどんなツール？」「何ができるの？」と気になっている方にとって、少しでも参考になれば幸いです！

## 環境構築について

今回は環境構築済みの状態からスタートしています。

CursorはVS Codeに似たUIで、導入も難しくないので、公式ドキュメントや他の記事を参考にすればすぐ始められると思います。

## 今回やりたいこと

ハンズオン講座で作成したアプリのコードを、Cursorを使って解説してもらい、理解を深めることが目的です。

講座では一部のファイルがあらかじめ提供されていたため、「自分が書いていない部分」も含めて把握しておきたいと思い、AIの力を借りてみました。

## 環境構築について
環境構築は既に行っているので、インストール済みです。
そこまで難しくないので調べながら実施すればすぐ終わると思います。

## 実際に使ってみた！

まずは生成したい内容を右側のエディタで入力して実行！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984442/c2a653f9-d70d-4858-a3b9-1d368ffe344e.png)

生成されました！
かなり本格的な解説で私としてもかなり嬉しいです！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984442/d15d8062-fac7-48fc-a204-a843a274d0b6.png)

プレビューはこんな感じ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3984442/2fb14d4f-4bd3-42ff-b975-ede30838ac51.png)

## まとめ

生成AI × プログラミング、正直めちゃくちゃ面白いです！

今回は簡単なコード解説の生成でしたが、以下のような用途にも活かせそうだと感じました。

- 新人用のコード解説ドキュメント
- 設計書や仕様書の更新
- アプリの使い方マニュアルの生成

まずは自分の学習用に使いながら、社内教育やドキュメント整備にも役立てていこうと思います。

**「こんな使い方も便利だよ！」というアイデアがあれば、ぜひコメントで教えてください！**
User doesn't have access to use agent , User doesn't have access to use agent

今一つどんな設定をしたのかよく分かりませんね。

+ [Unable to create new agent in Trailhead Playground (post Agentforce GA i.e. 10/22)](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX000000n4MC0AY)

:::note
Set. Agent's AGENT USER field = Einstein Service Agent User (auto created during TH Playground provisioning).

Setting agent user = any other user, even a system admin having DC Admin perms or "orgfarm epic" user results in error message.

エージェントの「エージェントユーザー」項目をEinsteinサービスエージェントユーザー（TH Playgroundのプロビジョニング時に自動作成）に設定します。

エージェントユーザーを他のユーザー（DC管理者権限を持つシステム管理者や「orgfarm epic」ユーザーであっても）に設定すると、エラーメッセージが表示されます。
:::

+ [Error creating agent : java.lang.IllegalArgumentException:User doesn't have access to use agent More Details: ERRORS : User doesn't have access to use agent , User doesn't have access to use agent WARNINGS](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SWMKM0A5)

# 新しいdev orgでも同じエラー？ライセンスがない？

+ [Has anyone started working with Salesforce provided developer edition org for Agentforce + Data cloud?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MYYIT0A5)
【Python初心者】文字列の連結とprint関数の仕様

Pythonの学習をしている中で、文字列の連結方法と `print()` 関数の挙動に少し混乱したので、整理のためにまとめてみました。  
自分の理解を深めるためのメモですが、同じように学習中の方の参考にもなればうれしいです。

## 🔹 1. 暗黙の連結（リテラル連結）

Pythonでは、**隣接する文字列リテラル（クォートで囲んだ文字列）は自動で連結されます**。

```python
print('Py' 'thon')  # → Python
```

これは `+` や `,` を使わなくても、**構文解析の段階で1つの文字列にまとめられる**仕様です。

## 🔹 2. 明示的な連結（`+`演算子）

`+` を使って文字列を連結することもできます。

```python
print('Py' + 'thon')  # → Python
```

この方法なら変数を使った連結も可能です。

```python
a = 'Py'
b = 'thon'
print(a + b)  # → Python
```

## 🔹 3. print() 関数でのカンマ区切り

print() 関数では、カンマ `,` で区切った複数の引数を指定すると、それぞれが出力され、間にはデフォルトで半角スペースが挿入されます。  
これは、print()関数のオプション引数 `sep` のデフォルト値が `' '`（半角スペース）であるためです。  
また、各引数は `str()` 関数によって文字列に変換されたうえで出力されます。

```python
print('Py', 'thon')  # → Py thon
```

これは「連結」ではなく、**複数の値を並べて出力しているだけ**です。

```python
print('Answer:', 42)  # → Answer: 42
```

### 🔸 sepオプションで区切りを変えることも可能

`sep` を変更することで、区切り文字をカスタマイズすることもできます。  
例えば `sep=''` とすれば、引数を<strong>間に何も挟まず（区切りなしで）</strong>出力することができます。

```python
print('Py', 'thon', sep='')   # → Python
print('Py', 'thon', sep='-')  # → Py-thon
```

## ✅ まとめ

| 書き方                        | 結果       | 解説                              |
|------------------------------|------------|-----------------------------------|
| `'Py' 'thon'`                | Python     | リテラル同士は自動で連結される    |
| `'Py' + 'thon'`              | Python     | + で明示的に連結                   |
| `print('Py', 'thon')`        | Py thon    | カンマで分けて出力、スペース付き   |
| `print('Py', 'thon', sep='')`| Python     | 区切りを空文字にして連結出力      |

---

ここでまとめた内容は、自分自身が混乱した部分を振り返るために書いたものです。  
Pythonを始めたばかりの方にとっても、少しでも理解の助けになればと思います。
AWS MCP Servers使おうとしてめっちゃ沼った話

# はじめに

最近流行りのMCP、私も触ってみたい！と思い、AWS MCP Serversを使ってみようとしたところ、思わぬところで沼にはまったのでご紹介します。
まだドキュメントも少なく、記事で紹介されていた方もいましたが、見つけるの大変だったのでどなたかの助けになれば。

# 発生した事象

以下リンクにある手順通りに実施して、Claude DesktopでMCPの設定を行うとこんなエラーメッセージが発生しました。

https://awslabs.github.io/mcp/servers/cost-analysis-mcp-server/

```txt
error: Failed to spawn: `awslabs.cost-analysis-mcp-server`
  Caused by: program not found
```

# 解決方法

結論ですが、Windows環境ではドキュメントに書いてある方法では正常に起動しないとのことでした。
具体的にはclaude_desktop_config.jsonを書き換えてあげる必要があります。

以下はドキュメントに書いてある書き方です。

```json
{
  "mcpServers": {
    "awslabs.cost-analysis-mcp-server": {
      "command": "uvx",
      "args": ["awslabs.cost-analysis-mcp-server@latest"],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_PROFILE": "your-aws-profile"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

以下のような書き方をすれば正常にサーバーがrunning状態になります。

```json
{
  "mcpServers": {
    "awslabs.cost-analysis-mcp-server": {
      "command": "uvx",
      "args": [
        "--from",
        "awslabs-cost-analysis-mcp-server",
        "awslabs.cost-analysis-mcp-server.exe"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR",
        "AWS_PROFILE": "your-aws-profile"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}
```

# 終わりに

他のawslabsのものについても同様の方法で沼から抜け出せるものがあると思います。
（AWS Lambda MCP ServerとAWS Documentation MCP Serverについてはこちらの方法で正常に起動しました）
こういった新しすぎるものはなかなか生成AIも答えてくれないので、久しぶりに手探りで調べまくって懐かしい気持ちになりました（笑）
最初にこの書き方を見つけた人はどうやって見つけたんだろうと気になるところです。。

以上、よいMCPライフを！

# 弊社では一緒に働く仲間を募集中です！
現在、様々な職種を募集しております。
カジュアル面談も可能ですので、ご連絡お待ちしております！

募集内容等詳細は、是非採用サイトをご確認ください。
https://engineer.po-holdings.co.jp/
個人的備忘録：FastAPIの /docs ってすごい！Swagger UIでAPIを即テストできる感動

## はじめに

今回は、FastAPI によって自動生成される Swagger UI（[`http://localhost:8000/docs`）について簡単にまとめておきます。](`http://localhost:8000/docs`）について簡単にまとめておきます。)

開発中のAPIを素早く確認・テストできるツールとして非常に便利なため、特にバックエンドとフロントエンドの連携を進める上でとても便利だと思いました。

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

受講しているITスクールのハッカソンの開発の一環で、FastAPIを使ったバックエンドの開発に取り組んでおり、エンドポイントの確認や挙動チェックを行う際に `http://localhost:8000/docs` によるSwagger UIの存在がとても役立ちました。

![Screenshot 2025-05-07 at 9.37.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/ff72ae25-43e0-40ca-b4a3-3762e167564c.png)

ログインやユーザー登録、チャット送信などのエンドポイントを手早く検証する方法を備忘録として残しておくためです。

## 内容

### Swagger UIとは？

FastAPIでは、アプリを起動すると自動的に `/docs` にSwagger UIが展開されます。

この画面では以下が可能です：

* 全エンドポイントの一覧表示
* パラメータやリクエスト形式の自動ドキュメント化
* リクエストの送信とレスポンスの即時確認

### よく使う操作

* `POST /api/login` に対して、email と password を入力しトークン取得を確認
* `POST /api/register` や `/api/sessions` などのエンドポイントで、JSONを試しに送信
* `Authorization` ヘッダーにBearerトークンをセットして、認証が必要なAPIの確認

**実際の画面**

![Screenshot 2025-05-07 at 9.40.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/232d7925-b87e-41f2-a73a-d45df2b1cbe0.png)

### Swaggerの便利な点

* OpenAPIに準拠したドキュメント形式で、他の開発者と仕様を共有しやすい
* テストツールを用意せず、すぐにブラウザ上で試せる

## まとめ

FastAPIとSwagger UIの組み合わせは、バックエンド開発を効率化する上で感動しました。**特にハッカソンやチーム開発では、フロントエンドと仕様のすり合わせを行う際の可視化ツールとしても良いと思いました！**

今後もAPIを追加・修正していく中で、Swaggerを活用しながら品質とスピードのバランスをとって開発を進めていきます...！
Laravelで作る簡易掲示板アプリ② | HTTPメソッドの使い分けと実装例

# はじめに
今回は私が研修で作成した掲示板サイトを題材に、HTTPメソッドの基本と実装への落とし込み方について、紹介します。
「GETとPOSTは分かるけど、DELETEってどう使うの？」というLaravel初学者の方に向ける意味でも、**RESTfulな設計に基づく実践的な使い分け**について、まとめてみました。

## 本記事でわかること
- HTTPメソッドの役割とLaravelでの使い方
- 掲示板サイトにおける具体的なルーティングと処理例
- よくある質問＆プラクティス例

# ①HTTPメソッドとその用途
![IMG_7875.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/3b1cca12-7dd4-4684-8855-950db0cef412.jpeg)

# ②具体的なコード例

## 1.投稿一覧表示(GET)
```php
Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
```
- DBから全投稿を取得し、ビューに渡して表示する処理。
- データを変更しないため、安全なGETを使用。

## 2.投稿の新規作成(POST)
```blade
<form action="{{ route('posts.registrationcompleted') }}" method="POST">
    @csrf
    <textarea name="message"></textarea>
    <button type="submit">投稿</button>
</form>
```
- ユーザーが入力した内容をDBに保存するため、POSTを使用。
- @csrfでCSRFトークンを付与しセキュリティ対策。

## 3.投稿削除(DELETE)
```blade
<form action="{{ route('posts.delete', $post->id) }}" method="POST">
    @csrf
    @method('DELETE')
    <button type="submit">削除</button>
</form>
```

- LaravelではHTMLフォームからDELETEを直接送信できないため、@method('DELETE')で指定。
- コントローラ側でdestroy()メソッドにルーティング。

# ③よくある質問と回答

- **Q1.なぜGETで削除しないの？**
A. セキュリティの観点から、**副作用のある操作(削除や更新)をGETで実行すべきではないため**です。
URLを共有したり、ブラウザがプリフェッチする際に意図しない動作を防ぐためにも、RESTに準拠したメソッドを使います。

- **Q2.PUTやPATCHは使わないの？**
A.　今回のアプリでは**編集機能を未実装**のため使用していませんが、将来的に「投稿編集機能」を追加する場合は、PUTまたはPATCHを使用する予定です。

# ④まとめ
掲示板のようなCRUDアプリでも、HTTPメソッドの役割を正しく理解し、**設計の意図に沿った使い分け**をすることが非常に重要です。
LaravelはRESTfulなルーティングをサポートしているため、これらの原則に従うと**読みやすく・保守しやすいコード**を書くことができます。
【基礎#1】Laravel リクエストの流れ

Laravelのリクエストの流れをちゃんと理解するために記事で残します。
普段Laravelを使用していますが、基礎を理解しきれていないので基礎を学んで章ごとに記事を書いていきたいと思います。

## 図解
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/755817/3ae55f84-18e7-4a4b-937f-fb369df531fb.png)

## 用語説明
- **public/index.php**
    - Laravelアプリケーションへのすべてのリクエストのエントリポイントはpublic/index.phpファイルです。
- **bootstrap/app.php**
    - Laravelアプリケーションのインスタンスをbootstrap/app.phpから取得します。
- **Kernel（カーネル）**
    - Illuminate\Foundation\Http\Kernel
    - カーネルはリクエストを処理する前に実行する配列を定義しています。
    - リクエストを実行する前に処理する必要のあるタスクを実行します。
    - Reqestを受け取りResponseを返します。
- **Providers（サービスプロバイダ）**
    - app/Providers
    - サービスプロバイダは、データベース、キュー、バリデーション、ルーティングコンポーネントなど、フレームワークのさまざまなコンポーネントをすべて初期起動処理する役割を担っています。
- **Routing（ルーティング）**
    - routes/web.phpまたはroutes/api.php
    - アプリケーションが初期起動され、すべてのサービスプロバイダが登録されると、Requestがルータに渡されてディスパッチされます。
- **Controller**
    - app/Http/Controllers
    - ルーティングで受け取った情報をモデルやビューで処理するように指示します

## 参考
https://readouble.com/laravel/11.x/ja/lifecycle.html
ファイルの拡張子に応じてアイコンを変更する方法

## はじめに
本記事では、ファイルの拡張子に基づいて、PDFファイルにはPDFアイコン（PDF.png）を、それ以外のファイルにはデフォルトアイコン（image.png）を表示する方法を解説します。

### 事前準備
アイコン画像を用意する必要があります。以下のファイルを `public/resource/images/` フォルダ に保存してください。

- PDF.png : PDFファイル用アイコン

- image.png : その他のファイル用アイコン

この例では、アイコン画像を`public/resource/images/`ディレクトリ内に配置する前提で進めます。

### コントローラーで $attachment_icon をビューに渡す

***コントローラーの変更***
コントローラー内で、ファイルの拡張子をチェックし、その結果をビューに渡します。

```MessageController.php
public function show(talk_message $message)
{
    // ファイルの拡張子を取得
    $attachments_file_extension = pathinfo($message->attachments_file, PATHINFO_EXTENSION);
    
    // ファイルのアイコン設定
    $attachment_icon = ($attachments_file_extension == 'pdf') ? 'resource/images/PDF.png' : 'resource/images/image.png';

    // ビューにアイコンを渡す
    return view('show', compact('message', 'attachment_icon'));
}
```

ビューでの使用
コントローラーで渡された $attachment_icon をビューでそのまま使用します。

```blade.php 
<img src="{{ asset($attachment_icon) }}" alt="Attachment Icon">
```
Flutter基礎。簡単なアプリを作成

# Flutter基礎 感想と次にやること
Flutterは、Googleが開発しているクロスプラットフォーム向けUIフレームワークです。  
1つのコードベースでiOS・Android両方のアプリを開発できるのが特徴です。
- [Flutter](https://flutter.dev/)

以前、Flutterの公式ドキュメントを進めていましたが、
今回は連休でまとまった時間もあったためUdemy教材で、基礎から見直しました。

教材はこちら
- [【Flutter】3日でできるFlutterアプリ開発入門【環境構築からUI作成まで】 ](https://www.udemy.com/course/flutter_starter/)
---

## ✅ 今回学んだこと

- Flutterの開発環境構築
- `Column`, `Row`, `SizedBox` などを使った簡単なUI構築
- リスト表示と追加操作
- 画面遷移と、ページ間でのデータ受け渡し
- 実機起動(iPhone, Andoroid)
    - 前のiPhoneをデバッグ専用にしてしまおう…( ˘ω˘ )

### シンプルでもアプリらしい構造が体験できた

このシンプルな仕組みだけで「リスト → 詳細ページにタイトルを渡す」という、アプリっぽい動きが体験できたのは楽しかった。

```dart
Navigator.push(
  context,
  MaterialPageRoute(builder: (context) => NextPage(title: titleList[index])),
);
```
#### ⬅️iPhone　　　　　　　  　　　　　　　　 Android➡️
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/812363/e4ddae68-0cc6-4a02-939d-ba7c99822131.png" width=40%><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/812363/066a6c93-7790-4a8b-863e-bb367e3486fd.png" width=37%>


---

## 💭 感想・気づき

- シンプルなアプリ開発のため、特に詰まるところなく学習できた
    - とりあえずFlutterとやらを触ってみたい、という初心者にもおすすめ
- Android Studioにもいつの間にかGeminiが搭載されている!(それもそうか)
- やはり`flutter doctor` コマンド便利。  
  環境構築でありがちな「何が足りないかわからない」を一発で教えてくれるのはすごく助かる。  
他の言語環境ではあまり見ない手厚さで、Flutterのとっつきやすさを支えてると実感した。
  他の言語でもここまで細かいコマンドはない気もする(多分?)

---

## 🔜 次にやること

- Flutter × AWS 
  → バックエンド連携やパブリッククラウドDBとの接続を試す

---

## ✍ まとめ

今回は、Flutterの基礎的な動きや構成を理解することが目的でした。  
引き続き学んでいこうと思います。
個人的備忘録：ReactでJWTトークンをlocalStorageに保存する実装した個人メモ

## はじめに

今回の記事では、ユーザー登録処理において**フロントエンドでトークンを取得し、保存する処理**に焦点を当ててまとめます。

:::note info
**この処理は、受講しているITスクールのハッカソンにてログイン状態の管理を行うために実装しました。**
:::

自分自身の備忘録として、React（Next.js）でどのようにトークンを扱うのか記録しておきたいと思います。

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

受講中のハッカソンプロジェクトでログイン／登録後の状態管理が必要となり、バックエンド（FastAPI）側で発行されたJWTトークンをフロント側で適切に保持する処理を実装する必要がありました。

https://github.com/2025SpringTeamA/frontend/blob/main/src/app/register/page.tsx

特に、ユーザー登録後に即ログイン済みの状態でAPIを利用可能にしたかったため、トークンの受け取りと保存の流れを明確にしておく必要がありました。

## 内容

### 1. 登録フォームからのPOSTリクエスト

ユーザーがフォームに「お名前」「メールアドレス」「パスワード」を入力し、`/api/register` にPOSTする構成です。

```ts
const res = await fetch("http://localhost:8000/api/register", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    email,
    password,
    user_name: userName,
  }),
});
```

### 2. トークンの受け取りと保存

バックエンドがトークン付きでレスポンスを返すようになっているため、以下のように受け取って `localStorage` に保存します。

```ts
if (res.ok) {
  const data = await res.json();
  localStorage.setItem("token", data.token);
  router.push("/home");
}
```

この一文によって、**今後のすべてのAPI呼び出しでトークン付きの認証が可能になります**。

### 3. 保存されたトークンの利用

保存されたトークンは、以下のように必要な場面で取得してAPIヘッダーに付与します：

```ts
const token = localStorage.getItem("token");

const res = await fetch("/api/sessions", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${token}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ character_mode: "normal" }),
});
```

## まとめ

今回の実装により、**ユーザー登録直後に認証状態を持ったまま次の機能（チャット開始など）へスムーズに移行**できるようになりました。

:::note alert
**トークンの保存はセキュリティ上の観点からも注意が必要な部分ですが、開発フェーズでは `localStorage` を使った簡易的な保存で十分だと思っています。**
:::

最終的には `HttpOnly` クッキーなどへの移行も視野に入れながら、段階的に実装を進めていくつもりです...（できればの話）！
個人的備忘録：プロンプトってなに？システムプロンプトとの違いを整理してみた

## はじめに

AIモデルを活用する中で、「プロンプト」という言葉を目にすることが増えてきました。

:::note info
**特に最近では「システムプロンプト」という設定項目を見かけることもありますが、通常のプロンプトとは何が違うか言語化できずに記事にまとめています。**
:::

本記事では、その違いについて簡単にまとめます。

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

受講しているITスクールのハッカソンの開発の一環で忘れないように記事にまとめています。

## 内容

### システムプロンプトとは？

システムプロンプトとは、AIモデルの振る舞いやキャラクター性、応答方針などを裏で制御するための指示です。通常はユーザーに見えない場所で使われますが、一部の開発ツールや実験環境では編集可能です。

例：
「あなたは丁寧で礼儀正しいアシスタントです。専門用語は中学生にもわかるように言い換えてください。」

このようなシステムプロンプトを入れることで、AIの回答のトーンや対応の仕方をコントロールできます。

**参考文献**

https://note.com/chi_vc_/n/ne5e7d725b049

https://qiita.com/sharakus/items/7da625b6aed1e8945952

### 通常のプロンプトとは？

一方、通常のプロンプトは、ユーザーが直接入力欄に書く命令や質問のことです。たとえば：

「明日の天気を教えて」
「PythonでHello Worldを書くコードを教えて」

このような指示に対してAIが答える、いわゆる“会話の中身”となる部分が通常のプロンプトです。

**参考文献**

https://indepa.net/archives/3324#:~:text=%E9%80%9A%E5%B8%B8%E3%81%AE%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AE%E4%BE%8B%EF%BC%9A&text=%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%83%97%E3%83%AD%E3%83%B3%E3%83%97%E3%83%88%E3%81%AF%E3%83%A2%E3%83%87%E3%83%AB%E5%85%A8%E4%BD%93,%E5%87%BA%E3%81%99%E5%BD%B9%E5%89%B2%E3%82%92%E6%9E%9C%E3%81%9F%E3%81%97%E3%81%BE%E3%81%99%E3%80%82

https://www.softbank.jp/biz/solutions/generative-ai/ai-glossary/prompt/

https://biz.kddi.com/content/column/smartwork/what-is-prompt/

## まとめ

* **システムプロンプト**は、AIの“性格や振る舞い”を裏で設定するもの。
* **通常のプロンプト**は、ユーザーが入力する“質問や命令”のこと。
* 両者をうまく使い分けることで、より意図に沿ったAIの活用が可能になります。

ツールによってはシステムプロンプトを編集できるものもあるため、自分の目的に合わせて活用するとより効果的だと感じました...！
Difyで特定のチャットURLにBasic認証を設定する手順

Difyで作成したチャットやワークフローは、デフォルトでは誰でもURLにアクセスできてしまいます。

そこで、特定のURLのみに**Basic認証**（ユーザー名とパスワードによるアクセス制限）をかけることで、外部からの不正アクセスを防止できます。



以下に、ブログ記事として使える概要（導入文）を追加し、併せてプライベート情報の警告も明記しました。記事冒頭に置くのがおすすめです。


# 環境

Xserver VPS

【仕様】　
vCPU 4コア　
メモリ４G
NVMe SSD　100GB

OS: AlmaLinux9.5

## 手順概要
手順は以下のような流れです：

1. 必要なパッケージのインストール（apache2-utils）

2. htpasswd ファイルの作成

3. nginx設定ファイルへの認証ルールの追加

4. Dockerコンテナの再起動による反映

サーバーへのSSHログインから設定の確認まで、具体的なコマンド付きで紹介しているので、再現しやすい構成になっています。

Difyのチャットを限定公開したい方や、アクセス制御を強化したい方におすすめの内容です。


## 🔧 手順

### 1. サーバーへSSHログイン

```bash
ssh root@{VPSのIPアドレス}
```

---

### 2. `htpasswd`コマンドのインストール（初回のみ）

```bash
sudo apt update
sudo apt install apache2-utils
```

確認コマンド：

```bash
which htpasswd
# => /usr/bin/htpasswd と表示されればOK
```

---

### 3. `.htpasswd`ファイルを作成

設定ファイルのあるディレクトリに移動：

```bash
cd /root/dify/docker/nginx/conf.d/
```

#### 3-1. `.htpasswd`が**存在しない場合**

```bash
sudo htpasswd -c ./.htpasswd exampleuser
```

#### 3-2. `.htpasswd`が**既にある場合（ユーザー追加）**

```bash
sudo htpasswd ./.htpasswd exampleuser
```

確認：

```bash
cat .htpasswd
# => exampleuser:$apr1$.... のように表示されればOK（パスワードは暗号化）
```

---

### 4. nginx設定ファイルに認証ルールを追加

```bash
vi /root/dify/docker/nginx/conf.d/default.conf.template
```

以下のlocationブロックを追記（`xxxxx`は対象チャットのID等に置き換えてください）：

```nginx
    location /chat/xxxxx {
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
        proxy_pass http://web:3000;
        include proxy.conf;
    }
```

---

### 5. Dockerコンテナの再起動で反映

```bash
cd /root/dify/docker/
docker compose down
docker compose up -d
```

---

### 6. 設定の動作確認

```bash
docker exec -it docker-nginx-1 /bin/sh
cd /etc/nginx/conf.d
cat .htpasswd
cat default.conf
```

`.htpasswd`にユーザーが登録されているか、`default.conf`にBasic認証設定が含まれているか確認してください。

---

## 💡参考リンク

- [Difyのアクセス制限をBasic認証でかける方法（note）](https://note.com/ko_yamazaki/n/nbcd7662923c2)
- [noviq: Difyのアクセス制御に関する技術記事](https://noviq.jp/column/article/how-to-restrict-public-dify-app-access-to-specific-users-with-basic-authentication)

---
2025/5/7主にITとかセキュリティの記事

カスペルスキーは、2025年第1四半期にインドネシアで300万件以上のオンライン脅威を発見しました(5/5)
https://voi.id/ja/teknologi/480048

サイバーセキュリティ分野で活動する機関としてのBSSNの義務は何ですか?(5/5)
https://voi.id/ja/news/210117

供給網の強化へセキュリティー対策を格付け　経産省が新制度導入へ(5/4)
https://dempa-digital.com/article/657250

生成AIで写真合成、面接も通過…北朝鮮IT労働者の「成り済まし」、本人確認に課題も(5/5)
https://news.yahoo.co.jp/articles/a67530ddad4d63ee05a2b1498c98791995817ac4

ソラナ、トークン規格の重大な脆弱性を秘密裏に修正｜対応に賛否も(5/5)
https://crypto-times.jp/news-solana-secretly-fixes-critical-vulnerability-in-token-standard/

英国は企業にサイバーセキュリティを「絶対的な優先事項」にするよう警告する(5/5)
https://voi.id/ja/teknologi/480002

SNS詐欺の半数以上はFacebook経由！最も多い手口は「マルバタイジング」だった(5/5)
https://news.yahoo.co.jp/articles/b0e021397680ccdb8915888e256ebc72a85f5556

総務省、不法無線局の疑いのある無線機器（いわゆる「偽基地局」）からのフィッシング詐欺などのSMSに注意喚起！MNO各社などと対策を実施中(5/5)
https://s-max.jp/archives/1836065.html

FCA（英国金融行動監視機構）、仮想通貨購入のためのクレジットカード購入を禁止へ(5/5)
https://nextmoney.jp/?p=73855

あなたのスマホ、覗かれているかも？通勤者の2割以上が目撃している「ショルダーサーフィン」の恐怖(5/5)
https://dime.jp/genre/1964537/

Android 16、不審なアクティビティを追跡する｢侵入検知システム｣を導入する可能性(5/5)
https://helentech.jp/news-65660/

心理戦を展開するフィッシング攻撃に注意、羊飼いの皮を被った狼のよう(5/5)
https://news.mynavi.jp/techplus/article/20250505-3272754/

AI最新ニュース：画期的なAIロボット技術、Grok 3.5、OpenAIの大型アップデート、Microsoftモデルのリーク情報など(5/5)
https://note.com/kind_crocus236/n/na360a326fa1f

米国 NIST SP 800-234（初期公開ドラフト） ハイパフォーマンス・コンピューティング（HPC）セキュリティオーバーレイ (2025.05.01)(5/5)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/05/post-904844.html

コラボレーションの成否は「取引コスト」が左右する
〈リナックス〉とトヨタ生産方式に学ぶ
https://dhbr.diamond.jp/articles/-/11883

証券会社の口座「乗っ取り」被害が増加中　補償が難しいネット証券　2段階認証など「自衛策」を　横川楓(5/5)
https://news.yahoo.co.jp/articles/ece7c18370287df92661f9172a6e5bac1a13ddaa

個人証券口座乗っ取りは経済を揺るがす新たな脅威か！？(5/5)
https://news.yahoo.co.jp/expert/articles/581762627a36d049b239141dd3e5152454b35b5d

学校現場で“生成AI”はどう役立つ？ 文部科学省が策定した「生成AIガイドライン」を専門家が解説(5/5)
https://audee.jp/news/show/134363

【2025】AIをものづくりに導入するメリットとは？その活用事例や注意点も解説
https://cad-kenkyujo.com/ai-manufacturing/

東京ではドコモ風とかソフトバンク(偽)とかが流行っている(5/5)
https://news.mynavi.jp/article/jiryu_hyoryu-350/

生成AIと著作権の基本とリスク：訴訟を防ぐための創作ガイド(5/4)
https://note.com/aiethics496/n/n682eca64a5cb

再起動の前に確認しよう！PCがフリーズしたときの原因と対処法をわかりやすく解説(5/5)
https://esports.bcnretail.com/column-interview/commentary/250505_006268.html

宙づり国会、衆院法制局が悲鳴＝修正・議員立法が増加―多忙解消へＡＩ活用案(5/4)
https://sp.m.jiji.com/article/show/3508569
インスタンス間の更新セット移動を不要にする移行簡易化（半CICD）

## 課題
ServiceNowの更新セットは軽微な修正の反映には手間がありますよね。

Yokohamaのリリースで、ServiceNowは更新セットの自動化を導入しましたが、非常に良い機能です。素晴らしい記事[インスタンス間の更新セットの移動を設定および自動化する方法
](https://lnkd.in/gY94yeQ5) [更新セットの自動化](https://www.linkedin.com/posts/nikitajkale_servicenow-automation-devops-activity-7325422472688766976-xyI6?utm_source=share&utm_medium=member_desktop&rcm=ACoAADlP36oBTmJhAbGU_frN9my27BEdUAS-RX4)からプロセスの自動化について記載します。

## 手順
1. 更新セットの用意
2つの更新セットを用意します。Test2、Test3
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/f8f65db3-02ac-46b3-a2f5-2fe8dc239b24.png)

2. 移行先と移行元の環境を用意
右から左のインスタンスに移行作業を実施します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/68cc2488-cd1e-4fc4-ab50-54490589b043.png)

3. 右：データソースとして１のExcelを添付し、Load All Dataを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/229be1af-aa31-4b85-b305-617db6e89983.png)
コチラの内部的な活動はCICD的な以下の挙動を実施しています。

- インスタンス ID を使用して更新セットを取得する(フローアクションとサブフロー)
- 更新セットソース ID を使用して更新セットを取得する(フローアクションとサブフロー)
- 複数の更新セットの取得と自動プレビュー（サブフロー）

4. 内部処理（ImportとTransform）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/2ce061fb-307f-4686-84b3-3f24462c0dbf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/df3e2e75-6bfc-48b8-942b-aaf28b5f2870.png)

5. 自動デプロイ用のカスタムテーブルに記録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/221b36d5-e5f8-471b-8e28-d70bda658a00.png)

6. ステータスはターゲットインスタンスにも自動的に反映
後はエラー確認して移行完了か確認して移行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/0326aa47-ff8f-453c-8f15-8d270fd93d87.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190712/b7084c56-37a5-44c6-b292-3bc9f59389b9.png)

## まとめ
新しいデプロイ方法 (アプリ リポジトリや CI/CD など) が利用可能ですが、多くの組織は依然として更新セットに大きく依存しており、この自動化はゲームチェンジャーになる可能性がありますね。Update SetsはExcel管理できるし、手作業の手順も減るというメリットもあります。
Ubuntuでsudo権限のあるユーザを追加する

いつも忘れてしまうので、備忘録メモ。

普段はMacBookAirを使っているのですが、たまにUbuntuやWindowsを使う場面があってParallelsをインストールして、その仮想環境の中でUbuntuやWindowsを使っています。
たまにしか使わないので、ubuntuなどを再インストールしたときにsudo権限のついたユーザを追加する方法を忘れがちなのでメモりました。

ユーザの追加自体は自分が大昔にUnixなどを触っていた時代と変わらないので忘れませんが、その時代は **su -** でルートになって作業していた覚えがあるんですよね。
sudoというコマンド自体もなかったのか使っていなかったのか...。

```:ユーザ追加
parallels@ubuntu-linux-2404:~$ sudo adduser nomura
[sudo] password for parallels: 
info: Adding user `nomura' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `nomura' (1001) ...
info: Adding new user `nomura' (1001) with group `nomura (1001)' ...
info: Creating home directory `/home/nomura' ...
info: Copying files from `/etc/skel' ...
New password: 
Retype new password: 
passwd: password updated successfully
Changing the user information for nomura
Enter the new value, or press ENTER for the default
	Full Name []: NOMURA Toshiaki
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []: 
Is the information correct? [Y/n] y
info: Adding new user `nomura' to supplemental / extra groups `users' ...
info: Adding user `nomura' to group `users' ...
```
追加したユーザにsudo権限をつけます。

```:sudo権限をつける
parallels@ubuntu-linux-2404:~$ sudo gpasswd -a nomura sudo
Adding user nomura to group sudo
```
以上です。
wxFileConfig の localFilename と wxCONFIG_USE_LOCAL_FILE の話

# 前提
wxWidgets 3.2.8, 2025-05-07 現在の情報です。

# 結論
[wxFileConfig](https://docs.wxwidgets.org/stable/classwx_file_config.html) で第３引数 `localFilename` を使うときはフルパスで渡してください。

# 何がまずいのか?
現在の作業ディレクトリ(cwd)に設定ファイルを置くつもりで相対パスを渡すと、そのファイルが既存かどうかで挙動が違います。

# 何が起こるのか?
cwd からの指定相対パスにファイルがある場合はそれが読み書きに使われます。

ファイルがなく、かつ `wxCONFIG_USE_LOCAL_FILE` が第５引数 `style` に含まれている場合、アプリケーション名と実行中のユーザー名を元にしたディレクトリが基準パスになります。読み書きはそこからの指定相対パスにあるファイルへ行われます。

従って、同じ相対パスを指定していても cwd にファイルがあるかないかで動作が変わってしまいます。

wxFileConfig は [wxConfigBase](https://docs.wxwidgets.org/stable/classwx_config_base.html) と異なり style の省略値に `wxCONFIG_USE_LOCAL_FILE` が含まれている点もご留意ください。

# 別解その他
第５引数から `wxCONFIG_USE_LOCAL_FILE` を除外しても解決になると思われますが、初回の書き出しまたはアプリケーション終了までに cwd を変更しないことが条件となるでしょう。

`globalFilename` と `wxCONFIG_USE_GLOBAL_FILE` も同様の関係と思われますが、こちらは私は調査していません。

# 記述の経緯
先日 [openMSX](https://openmsx.org/) 本体に統合される形で事実上開発終了になった [catapult (wxcatapult)](https://github.com/openMSX/wxcatapult) を改良して [szmCt](https://www.dlsite.com/home/work/=/product_id/RJ01387146.html) なるものを販売開始いたしました。これが [wxWidgets](https://wxwidgets.org/) を使っておりまして、そこで引っかかった罠がいくつかあったのでその一つをご紹介いたしました。

実は同じように引っかかった方が 2008 年にいらっしゃいましたので、そちらにも私自身が先立ってコメントを入れています。

https://forums.wxwidgets.org/viewtopic.php?t=21045

また、同じフォーラムの下記トピックは混乱していて解決していないように見えます。wxConfigBase::SetPath は設定ファイルの内部構造に使われるのであって、設定ファイル本体のパスではないはずです。

https://forums.wxwidgets.org/viewtopic.php?t=43137
M5SatmpS3、8x8 Puzzle Unit (Unit Puzzle ?)で「あ、埼玉」と表示。



参考
----

https://github.com/Tamakichi/Arduino-misakiUTF16


いろいろ、注意
----

- M5Stack by M5Stack official 2.1.4


結果
----


![image_original(31).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/d868f5f7-ea64-4884-87ce-0d949a90de0d.jpeg)


プログラム
----


```c++


//NeoPixel8x8_kanji_M5StampS3_1


//インクルド
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#include <misakiUTF16.h>


//定義
#define MAX_X 8
#define MAX_Y 8
#define NUM_LEDS 64
#define RGBLED_OUT 13
Adafruit_NeoPixel strip(NUM_LEDS, RGBLED_OUT, NEO_GRB + NEO_KHZ800);

unsigned char Pixel[8][8][3];  //キャラクターRAM(カラー)


//ネオピクセルに転送後に表示
void NeoPixe_OUT() {

  int k = 0;
  for (int y = 0; y < MAX_Y; y++) {
    for (int x = 0; x < MAX_X; x++) {

      strip.setPixelColor(k++, strip.Color(
                                 Pixel[y][x][0], Pixel[y][x][1], Pixel[y][x][2]));

      //Serial.print('.');

    }  //for j
    //Serial.println();
  }  //for i
  //Serial.println();

  strip.show();

}  //NeoPixe_OUT


//8x8文字の表示
void ch_8x8_f(unsigned char *font, int c1, int c2, int c3) {

  int i = 0;
  for (int y = 0; y < MAX_Y; y++) {
    int a = font[i++];
    for (int x = 0; x < MAX_X; x++) {

      if (((a << x) & 0x80) != 0) {
        Pixel[y][x][0] = c1;
        Pixel[y][x][1] = c2;
        Pixel[y][x][2] = c3;
      } else {
        Pixel[y][x][0] = 0;
        Pixel[y][x][1] = 0;
        Pixel[y][x][2] = 0;
      }  //if

    }  //for j
  }    //for i

  NeoPixe_OUT();  //RBG LEDに出力

}  //ch_8x8


//初期化
void setup() {

  //ネオピクセルの設定
  strip.begin();
  strip.show();

  //シリアルポートの設定
  //Serial.begin(9600);
  //Serial.println();
  //for (int i = 0; i < 9; i++) {
  //  Serial.print('.');
  //  delay(500);  //接続待ち
  //}              //for
  //Serial.println();

}  //main


//メインループ
void loop() {

  unsigned char font[8];  // フォント格納バッファ

  char *str = "あ、埼玉";  // 文字列
  char *ptr = str;

  while (*ptr) {                   // 文字列分ループ
  
    ptr = getFontData(font, ptr);  // 1文字分のフォント取得
    if (!ptr)
      break;  // エラーの場合は終了

    ch_8x8_f(font, 5, 5, 5);
    delay(3000);  //3秒待つ

  }  //while

}  //loop



```
【C#5】配列に入れる

# はじめに
プログラミング入門の資料を作っていたら、配列操作の練習になる課題を見つけました

## 問題

>1 行目に整数 N が与えられます。
2 行目以降に、N 組の整数 a_i と b_i が N 行で与えられます。(1 ≦ i ≦ N)
8 組目の a_i と b_i を出力してください。

## 実装したソース
実装したソースは下記の通りです

```C#
using System;

class Program
{
    static void Main()
    {
        // 自分の得意な言語で
        // Let's チャレンジ！！
        int line = Int32.Parse(Console.ReadLine());
        string[] array1 = new string[line];
        for(int i=0;i<line;i++){
            array1[i] = Console.ReadLine();
        }
        Console.WriteLine(array1[7]);
    }
}

```

## 実行結果
![813.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1055346/128c56b8-f9a6-4e17-95b6-ecd78a196867.jpeg)


# 最後に
C#で実装しました
サーバー版Ubuntuのこと

# Ubuntu

当該OSには2種類あります。サーバー版とデスクトップ版。サーバー版は基本CUIなので軽量インストーラかと思っていました。どうもデスクトップについてはネットからダウンロードしながらインストールを完結させるようで、インストーラ自体は軽量な気がします。いっぽう、サーバー版はそうではないみたいでインストール用ディスクを作るにも苦労しました。

balenaetcherとかいうアプリを入手しそれを使って作ったものでないとうまくいきませんでした。その背後にある理由については不明で、わたくしにはわかりませんでした。
個人的備忘録：localStorageとは何者か？フロントエンド初心者の自分用メモ

## はじめに

フロントエンド開発では、ユーザーのログイン状態を維持するためにトークンを保存する処理が必要になることがあります。

:::note warn
その中でよく使われるのが `localStorage` です。この記事では、`localStorage` の基本的な概要と、その使い方について整理しました。
:::

**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**

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

受講しているITスクールのハッカソンで開発しているアプリにおいて、トークンの管理方法について疑問を持ちました。特に、「localStorage とは何か？」という点が気になり、忘れないように記事にまとめておくことにしました。

## 内容

### localStorageとは？

`localStorage` は、Webブラウザにデータを保存するための仕組みのひとつで、JavaScriptを使って操作します。特徴として、次のような点が挙げられます：

* ブラウザを閉じてもデータが保持される
* オリジン（スキーム・ドメイン・ポートの組み合わせ）ごとに分かれている
* 保存できるのは文字列のみ
* JavaScriptから簡単にアクセス・操作できる

**参考文献**

https://webliker.info/web-skill/how-to-use-localstrage/

https://qiita.com/k-sukesakuma/items/c5f51b5c90afdae6da63

### トークンの保存方法（例）

```js
// トークンをlocalStorageに保存する例
localStorage.setItem("token", data.token);
```

上記のようにして、ユーザーがログインした際のトークンなどを保存できます。保存したデータは次のようにして取り出すことができます。

```js
const token = localStorage.getItem("token");
```

削除する場合は以下のようにします：

```js
localStorage.removeItem("token");
```

## まとめ

`localStorage` は、クライアント側でデータを保存したいときに便利な仕組みです。特にユーザーの状態を保持したり、設定情報を保存したりする際によく使われます。

:::note alert
**ただし、セキュリティ上の注意点もあるため、扱うデータの種類には十分な配慮が必要です。**
:::

アプリケーションの設計に合わせて、安全に活用していきたいです...！
windows11で、sketchup6 その100

# 概要
windows11に、sketchup6を入れてみた。
rubyで、3Dを書く。
練習問題やってみた。

# 練習問題
webdialogでForthインタープリタを実行せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/89ec5fc1-c965-4283-89ff-c3f7848805b7.png)

# サンプルコード

```

class Forth
	$stack = []
	def add
		top1 = $stack.pop()
		top2 = $stack.pop()
		v = top2 + top1
		$stack.push(v)
	end
	def sub
		top1 = $stack.pop()
		top2 = $stack.pop()
		v = top2 - top1
		$stack.push(v)
	end
	def mul
		top1 = $stack.pop()
		top2 = $stack.pop()
		v = top2 * top1
		$stack.push(v)
	end
	def div
		top1 = $stack.pop()
		top2 = $stack.pop()
		v = top2 / top1
		$stack.push(v)
	end
	def dup
		top1 = $stack.pop()
		$stack.push(top1)
		$stack.push(top1)
	end
	def drop
		top1 = $stack.pop()
	end
	def get
		top1 = $stack.pop()
		puts top1
	end
	def push(v)
		$stack.push(Integer(v))
	end
	def run(str)
		s = str.split(' ')
		for i in s do
			if i == "+"
				add()
			elsif i == "-"
				sub()
			elsif i == "*"
				mul()
			elsif i == "/"
				div()
			elsif i == "dup"
				dup()
			elsif i == "drop"
				drop()
			elsif i == "."
				get()
			else
				push(i)
			end
		end
	end
	def run(str)
		s = str.split(' ')
		for i in s do
			if i == "+"
				add()
			elsif i == "-"
				sub()
			elsif i == "*"
				mul()
			elsif i == "/"
				div()
			elsif i == "dup"
				dup()
			elsif i == "drop"
				drop()
			elsif i == "."
				get()
			else
				push(i)
			end
		end
	end
	def eval(str)
		res = ""
		s = str.split(' ')
		for i in s do
			if i == "+"
				add()
			elsif i == "-"
				sub()
			elsif i == "*"
				mul()
			elsif i == "/"
				div()
			elsif i == "dup"
				dup()
			elsif i == "drop"
				drop()
			elsif i == "."
				top1 = $stack.pop()
				res = top1.to_s
			else
				push(i)
			end
		end
		res
	end
	def initialize
		#run("9 9 - 9 9 / .")# 1
		#run("9 9 / 9 9 / + .")# 2
		#run("9 9 + 9 + 9 / .")# 3
		#run("9 9 9 + 9 / dup + .")# 4
		#run("9 9 9 + 9 / dup + - .")# 5
		#run("9 dup 9 + 9 + 9 / - .")# 6
		#run("9 9 9 + 9 / - .")# 7
		#run("9 9 9 drop 9 / - .")# 8
		#run("9 9 - 9 * 9 + .")# 9
		#run("9 9 / 9 dup 9 / + .")# 10
		#run("9 9 9 + 9 / + .")# 11
		#run("9 dup 9 9 + + 9 / + .")# 12
		#run("9 9 9 + 9 / dup + + .")# 13
		#run("9 dup 9 9 + 9 / dup + - + .")# 14
		#run("9 dup dup 9 + 9 + 9 / - + .")# 15
	end
end

#Forth.new
#f = Forth.new;puts f.eval "9 9 - 9 9 / ."


def testforth
	wd = UI::WebDialog.new("Ruby ", true, 'Console', 200, 200)
	wd.set_html <<-EOS
		<html>
		<head>
		</head>
		<body>
		<textarea id="out" cols=60 rows=5></textarea>
		<br>
		<input type="text" id="src" size="58" value="" ><a href="skp:run">run</a>
		</body>
		</html>
	EOS
	wd.add_action_callback('run') do |d, a|
		command = wd.get_element_value('src')
		puts command
		res = command + " => "
		f = Forth.new
		res += f.eval command
		wd.execute_script("document.getElementById('out').value ='#{res}';")
	end
	wd.show
end





```

以上。
個人的備忘録：OpenAI APIで発生したエラー「429（insufficient_quota）」を調べてみた

## はじめに

OpenAIのAPIを使用しているときに、「Error code: 429 - insufficient\_quota」というエラーが発生しました。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

このエラーは、APIの使用上限に達した場合に表示されます。今回はその原因と対処法について記録しておきます。

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

受講しているITスクールのハッカソンの開発の一環で、バックエンドの方がOpenAIのAPIを使ってアプリを構築している中でこのエラーが発生しました。

今後同じようなトラブルを避けるために、備忘録として記事にまとめています。

## 内容

今回発生したエラーは以下のとおりです。

```
Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details.', 'type': 'insufficient_quota'}}
```

このエラーの主な原因は、以下のいずれかです：

* 無料枠（フリープラン）のトークン使用量を使い切った
* 有料プランでも予算上限（ハードリミット）に達した
* 請求情報が正しく設定されていない

**参考文献**

https://platform.openai.com/docs/guides/error-codes/api-errors

### 対処方法：

* Billing情報が登録済みかチェック
* 必要に応じて有料プランにアップグレード、またはクレジット上限を引き上げる

## まとめ

OpenAI APIのエラー429は、過剰なリクエストというよりも「使用上限を超えた」ことによって発生するケースが多いと思っています。

開発中に発生することで焦るかもしれませんが、使用量や支払い情報の確認ですぐに解決できるので、冷静に対応してみてください...！
paiza.ioでruby その3

# 概要
paiza.ioでrubyやってみた。
練習問題やってみた。

# 練習問題
forthインタープリタを書け。
数9を4個つかって1から15までの数を表す式を実行せよ。
classにせよ。

# サンプルコード

```

class Forth
    $stack = []
    def add
	    top1 = $stack.pop()
        top2 = $stack.pop()
	    v = top2 + top1
	    $stack.push(v)
    end
    def sub
    	top1 = $stack.pop()
    	top2 = $stack.pop()
    	v = top2 - top1
    	$stack.push(v)
    end
    def mul
	    top1 = $stack.pop()
	    top2 = $stack.pop()
	    v = top2 * top1
	    $stack.push(v)
    end
    def div
	    top1 = $stack.pop()
	    top2 = $stack.pop()
	    v = top2 / top1
	    $stack.push(v)
    end
    def dup
	    top1 = $stack.pop()
	    $stack.push(top1)
	    $stack.push(top1)
    end
    def drop
	    top1 = $stack.pop()
    end
    def get
	    top1 = $stack.pop()
	    puts top1
    end
    def push(v)
	    $stack.push(Integer(v))
    end
    def run(str)
	    s = str.split(' ')
	    for i in s do
	        #puts i
	       	if i == "+"
	    		add()
		    elsif i == "-"
		    	sub()
		    elsif i == "*"
			    mul()
		    elsif i == "/"
			    div()
		    elsif i == "dup"
			    dup()
		    elsif i == "drop"
			    drop()
    		elsif i == "."
		    	get()
    		else
	    		push(i)
		    end
        end
    end
    def initialize
	    run("9 9 - 9 9 / .")# 1
        run("9 9 / 9 9 / + .")# 2
        run("9 9 + 9 + 9 / .")# 3
        run("9 9 9 + 9 / dup + .")# 4
        run("9 9 9 + 9 / dup + - .")# 5
        run("9 dup 9 + 9 + 9 / - .")# 6
        run("9 9 9 + 9 / - .")# 7  
        run("9 9 9 drop 9 / - .")# 8  
        run("9 9 - 9 * 9 + .")# 9  
        run("9 9 / 9 dup 9 / + .")# 10  
        run("9 9 9 + 9 / + .")# 11  
        run("9 dup 9 9 + + 9 / + .")# 12  
        run("9 9 9 + 9 / dup + + .")# 13  
        run("9 dup 9 9 + 9 / dup + - + .")# 14  
        run("9 dup dup 9 + 9 + 9 / - + .")# 15  
    end 
end

Forth.new




```
# 実行結果

```
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
```

# 成果物

https://paiza.io/projects/12MHCHhBf2KAAYi56HrLaA

以上。
Geminiで琴を使う魔法少女を描いてみた。

# 概要

Geminiで琴を使う魔法少女を描いてみました。

# 実装

プロンプトと実行結果は以下の通りでした。

```
光の琴を使う魔法少女を描いてください。
```

![光の琴を使う魔法少女_20250507.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/ede9a557-0765-4ec5-a5a8-1f16979941b0.png)



```
闇の琴を使う魔法少女を描いてください。
```

![闇の琴を使う魔法少女_20250507.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/00dcba69-9a57-4964-b8a4-acfe749eb3d2.png)


```
聖なる琴を使う魔法少女を描いてください。
```

![聖なる琴を使う魔法少女_20250507.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/32ebdd32-842f-487f-99a1-ffd331fec71a.png)

# まとめ

聖の子は可愛い。
何かの役に立てばと。
競プロ日記#25/05/06

# アルゴ式
[Q8. スイッチクエリ (2)](https://algo-method.com/tasks/1726UYPx)

- スイッチのoffについて思いつかなかったので勉強になった

```
// (S = S & ~(1 << x))でSのxビット目を0にすることができる。
// 1 << xはxビット目が1でそれ以外が0の数を表す。
// 1 << xのビットを反転させるとxビット目が0でそれ以外が1の数になる。
if (flag == 1){
    (S = S & ~(1 << x));
}
```
[Ex. XOR の意味](https://algo-method.com/tasks/172475mJ)
- A XOR B = CのときA XOR C = Bになる
【Python初心者】breakとcontinueで混乱したので整理してみました

Pythonのfor文を勉強していて、breakとcontinueの使い方がよくわからなくなってきたので、自分なりに整理しておきます。

if文と一緒に使われることが多かったので、ifから抜けるのかと勘違いしてしまうことがあるので、注意していきたいです。

## breakとは？

ループの途中で終わらせるときに使う。

```python
for i in range(5):
    if i == 3:
        break
    print(i)
```

### 出力

```
0
1
2
```

i が 3 のときに break されて、ループが終了する。

## continueとは？

今回の処理だけスキップして次のループへ進む。

```python
for i in range(5):
    if i == 3:
        continue
    print(i)
```

### 出力

```
0
1
2
4
```

i が 3 のときだけ print を飛ばしてる。

## ifとbreak（またはcontinue）の関係

最初は if を抜ける命令だと思っていたけど、実際は for や while に対して動く。  
だから if の中に書いてあっても、実際にはループを止めたりスキップしたりしてる。

## breakとcontinueの違い

| 命令 | 意味 | ループは続く？ | よく使う場面 |
|------|------|----------------|---------------|
| break | ループを終了する | ❌ 終わる | 条件を満たしたら止めたいとき |
| continue | 今回の処理だけスキップする | ✅ 続く | 条件に合うときだけ飛ばしたいとき |

## for-else文について

ループの中で break が使われなかったときに else が実行される構文。

```python
for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(n, 'equals', x, '*', n // x)
            break
    else:
        print(n, 'is a prime number')
```

### 出力

```
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3
```

for の中で break されなかったときに else が動いてる。  
素数のときだけ else が実行されるようになっている。

## 覚え方のメモ

- break：ループを終わらせる
- continue：その回だけスキップする
- if は条件を判断してるだけで、breakやcontinueの効果には関係ない

## おわりに

ちゃんと理解しておかないと毎回混乱しそうだったので、自分があとから見てわかるようにまとめてみました。今後も何度か使いながら慣れていきたいと思います。
[C++] 浮動小数点数をゼロからイチの間に正規化するコード

```cpp
inline constexpr auto zero_to_one = []<std::floating_point T>(const T x) noexcept {
  static_assert(sizeof(T) <= 8);
  using U = std::conditional_t<sizeof(T) == 4, int, long long>;
  constexpr auto one = std::bit_cast<U>(T(1));
  return std::bit_cast<T>(-U(T(0) < x) & (one ^ ((std::bit_cast<U>(x) ^ one) & -U(x < T(1)))));
};
```

C++だけで書くならこれが最速ではないでしょうか。
別の案があればコメントで教えてください。
macのおせっかいな設定

## 経緯

新たなmacを入手し、最初から設定することになったので、忘備録。

## デスクトップとDock

### ウインドウをしまうときのエフェクト
ジニーエフェクトは重くて良いことがないので、スケールエフェクトにする

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90217/2f870fa4-5d46-4945-b997-9f0043fbaad1.png)


## キーボード（キーのリピート速度、リピート入力認識までの時間）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/90217/03e1026c-072e-43c8-b2ff-229001e1b5e8.png)
基本情報技術者試験に全力で落ちました

# はじめに
### ・基本情報技術者試験
上記の試験を2025/5/6に受験しまして、
科目A 790点
科目B 545点
で見事に不合格となりました。
  
### ・私のスペック
  社会人歴3年目、中途のため情報系の企業では2年目。
  大学は情報系であったがコロナ渦であったこともありプログラミング等ほぼ身につかなかった。

### ・使用した教材
[ニュースペックテキスト基本情報技術者 2025年度版/TAC情報処理講座]
三週ほど読み込んだが、疑似言語に関してのパートは読み飛ばした。
 
[初心者が合格できる知識と実力がしっかり身につく　基本情報技術者［科目B］]
2023年に購入していた科目Bの対策本
一通り解いて、わからなかった箇所をトレースして解き方をざっくり覚えた。

[[過去問道場　R2-R5 科目Aのみ]](https://www.fe-siken.com/fekakomon.php)
前年度一周して、間違えた箇所をまとめて暗記するように心がけた。

### ・私の考える落ちた原因
科目B対策をおろそかにしてしまったためと考えられる。
疑似言語の中で苦手意識のあった配列やオブジェクト指向の問題について練習ではなんとなく,トレースが出来ていたためわかるまで何度も解くということを怠ってしまった。
そのため根本がわかっておらず本番では6割を下回る点数となった。

### ・次回の受験
一度落ちると30日間開けなくてはならないため2025/6/6に再度受験を行う予定。
科目Aの知識が抜けないよう定期的な過去問道場による演習、科目Bのアルゴリズム問題に対する対策としてC言語を学習し、アルゴリズムに対して別の観点から学ぶことと試験15日前からの疑似言語の問題演習で必ず合格するようにしたい。

### ・所感
GWの5/1~5/6を費やして試験に臨んだため不合格のショックは大きいが、この失敗を糧に一カ月後の合格を目指す。

最後まで、記事をお読みいただきありがとうございました。
【Rails】Faker(Gem)について

# 記事概要
Ruby on RailsのFaker(Gem)について、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# Fakerとは
ランダムな値を生成するGem

https://github.com/faker-ruby/faker

# Gemのインストール手順
https://qiita.com/likapantrip/items/d7317b9ece36b58dffd6#手順

# Gemfileの記述
https://qiita.com/likapantrip/items/c8718db9a4e72b7c6ad0#faker

# 手順
1. テストファイルにコードを記述する

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a