OmniAICreator/Qiita-1.07M huggingface dataset:
linux

El ORIGEN de LINUX
https://www.youtube.com/watch?v=Q9DLleO7uIk

La SORPRENDENTE VIDA de LINUS TORVALDS [creador de Linux]
https://www.youtube.com/watch?v=tzjn1FMGfdg

¿Cuál es CORRECTO? ¿Qué DIFERENCIAS hay?
https://www.youtube.com/watch?v=OB93_HFbz6I

¿Por qué ELON MUSK recomendó LINUX?
https://www.youtube.com/watch?v=0uB-k5wryyg

¿EEUU intentó PONER BACKDOORS en LINUX?
https://www.youtube.com/watch?v=pugxY_3mHuI

LINUX NO es para EXPERTOS [TAMBIÉN es para TI👋]
https://www.youtube.com/watch?v=F06QAnOQ-_w

5 PASOS para ser un EXPERTO en LINUX
https://www.youtube.com/watch?v=1oDGYXddozE

5 CURIOSIDADES de LINUX que NO CONOCÍAS
https://www.youtube.com/watch?v=6bt251yA1X8

## minix

## Linus

# Linux



Estuve involucrado en la promoción de minix.
minixの普及活動をしていました。

Recibimos permiso para distribuir el puerto PC-98 y lo distribuimos con fines educativos.
PC-98移植版の配布の許諾を受けて、教育用に配布していました。

Una vez recibí una advertencia escrita infundada de la compañía que publicó el libro MINIX.
MINIX本を発行した会社から、根拠のない警告を文書でいただいたことがあります。

ntenté visitar a un conocido de esa empresa, pero no pude encontrarme con él.
その会社の知人を訪問しようとしたら会うことができませんでいた。

Un estudiante me enseñó una vez cómo compilar un kernel UNIX BSD.
BSD UNIXのカーネルコンパイルの方法を学生から教えてもらったことがあります。

Una vez visité una organización en Estados Unidos que distribuye Slackware.
アメリカでSlackwareの配布をしている団体を訪問したことがあります。

Presentamos cómo manejar caracteres de dos bytes y cómo utilizar fuentes kanji.
２バイト文字の扱いや、漢字フォントの利用について紹介しました。

Aprendí a compilar el kernel de Linux gracias a un colega de Debian.
LinuxカーネルコンパイルはDebianで同僚から教えてもらいました。

Para ejecutar un programa relacionado con IP móvil para mi tesis doctoral, experimenté compilándolo en el kernel de Debian.
博論のMobile IPに関連するプログラムの動作には、Debianカーネルコンパイルで実験しました。

Se realizaron pruebas cruzadas de Ethernet y TCP/IP en BSD.
EternetとTCP/IPの対向試験はBSD対象に実施しました。

# ref
アンドリュー・S・タネンバウム Minix(Linux発祥の地）
https://qiita.com/kaizen_nagoya/items/4443344b3d08047a115c



ネットワーク ReferenceとしてのBSD,
https://qiita.com/kaizen_nagoya/items/14fba711d42fd8b5db4c

論文でRFC参照
https://qiita.com/kaizen_nagoya/items/8710bfa1d9d6eebccdcf

時刻同期ってむつかいいですか。
https://qiita.com/kaizen_nagoya/items/caffc006cdebc15057fc

新人(学生)を指導するよりも新人(学生)に指導してもらった方が効率的. 
https://qiita.com/kaizen_nagoya/items/db993b1536055029f7c8

Linuxを学ばずに使う,
https://qiita.com/kaizen_nagoya/items/b9859782bab0cf6c78a4

個人的なNet重大（１０大）News
https://qiita.com/kaizen_nagoya/items/d6906e0c81142665180e

Linux（Debian, Ubuntu, Raspbian...） よもやまばなし
https://qiita.com/kaizen_nagoya/items/a59fa54eafbf2663c03b

Open Source只（ただ）乗り批判に違和感
https://qiita.com/kaizen_nagoya/items/e7750248fa21cba17399

Linux仕事で使う環境にない場合 OS(3)
https://qiita.com/kaizen_nagoya/items/5c0146e25295833f49b9

人生で影響を受けた本100冊。
https://qiita.com/kaizen_nagoya/items/16af53acbb147a94172e

# Ref.
LinuxChad
https://qiita.com/kaizen_nagoya/items/cdae082ffdfffee10605
【ChatGPT】CoRT（Chain of Recursive Thought）をご紹介します。

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

　今回は、CoRT（Chain of Recursive Thought）をご紹介します。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　まずは、【ニュース】です。

　[Tibor Blahoさんポスト](https://x.com/btibor91/status/1917999539996508247?t=L_-QLXXBQTeNxIDi56sVeg&s=19)

***（ChatGPT翻訳）***
OpenAIのAPI、ChatGPT Enterprise、ChatGPT Team、その他のビジネス向けサービスを利用する企業、開発者、団体向けに、新しい「OpenAIサービス利用契約」（2025年5月31日発効）が公開されました。

改訂された契約には以下の変更が含まれています：

* より体系化された構成と詳細な定義の導入
* 地理的なサービス提供制限の明確化
* セキュリティ規定の強化
* 利用停止プロセスの明確化
* 最低利用期間の明示的な非キャンセル扱い
* 広報利用に関する書面での事前許可要件
* データ保持に関する権利の拡大
* 知的財産保護の強化
* 紛争解決、ベータ機能、規制対応に関する条項の強化
***

　まぁ、ふつうの人には
　　関係ない話ですね😅
***
　次に

　[Anthropic公式ポスト](https://x.com/AnthropicAI/status/1917972747000692919?t=f5VeV2Mh3gziYDnO4EhIwg&s=19)

　Anthropicは、Claudeに
　　新しい「Integrations」機能を導入。

　Google Workspaceなどのアプリや
　　ツールをClaudeと連携可能に。

　Researchモードが強化され、
　　WebやGoogle Workspace、
　　　連携アプリを検索し、
　　　　最大45分かけて
　　　　　詳細なレポートを生成。

　これらの機能は現在、
　　Max、Team、
　　　Enterpriseプラン向けのベータ版で
　　　　近日中にProプランにも展開予定
***
　では、【本題】です。

　今回は、
　　CoRT（Chain of Recursive Thought）
　　　をご紹介します。

　こちらの記事を見ました。
　　[GIGAZINE：AIに何度も自問自答させてより深く考えさせる「CoRT(再帰的思考の連鎖)」とは？
](https://gigazine.net/news/20250501-chain-of-recursive-thoughts/)

　CoRT（Chain of Recursive Thought）
　　とは、何か？

　CoT（Chain of Thought）の
　　一種です。

　説明は、
　　ChatGPTさんにお願いします😅

***（ChatGPT説明）***
**CoRT（Chain of Recursive Thoughts）**は、AIモデルが自らの出力を再帰的に見直し、複数の代替案を生成・評価しながら最適な回答に到達することを目指す新しいプロンプトエンジニアリング手法です。


### 🔁 CoRTの仕組み

CoRTは、以下のようなプロセスでAIの思考を深めます：

1. AIが初回の回答を生成。
2. 必要な「思考ラウンド数」を決定。
3. 各ラウンドで：

   * 3つの代替回答を生成。
   * 各回答を自己評価。
   * 最良の回答を選択。
4. 最終的に、最も優れた回答を出力。

このプロセスにより、AIは自らの出力に対して批判的に再評価を行い、より洗練された回答を導き出します。


### 🧠 CoRTの特徴と利点

* **自己反省と改善**：AIが自身の回答を再評価し、改善を図ることで、より正確な出力が期待できます。
* **小規模モデルでの効果**：特に小規模な言語モデルにおいて、CoRTの導入により性能が大幅に向上することが報告されています。
* **柔軟な思考深度**：問題の複雑さに応じて思考の深さを調整できるため、多様なタスクに対応可能です。


### 🧪 実践例と成果

開発者のPhilip Bakleski氏は、Mistral 3.1 24BモデルにCoRTを適用し、プログラミングタスクにおいて顕著な性能向上を確認しました。具体的には、CoRTを導入したモデルは、導入前に比べてより正確で一貫性のあるコードを生成するようになりました。


### 🧩 CoRTと他の手法との比較
　CoT
　　問題解決のための中間的な思考ステップを明示的に生成。

　CoRT
　　自己評価と代替案の生成を繰り返し、最適な回答を導出。

　NECoRT
　　複数のAIエージェントが互いに評価し合い、ナッシュ均衡に基づく最適解を見つける。


### 🚀 まとめ

CoRTは、AIが自身の出力を再帰的に見直し、改善を図ることで、より高品質な回答を生成する革新的な手法です。特に小規模なモデルにおいて、その効果が顕著であり、今後のAI開発において重要な役割を果たすと期待されています。
***

　GitHubリポジトリから
　　ひとつのPromptを
　　　用意しました。

　＊＊＊に、問題文を入力して、
　　送信してください。

```Text:CoRT基本Prompt
あなたのタスクは、以下の問題に対して最良の解答を見つけることです。

問題: {＊＊＊}

ステップ1: 問題に対する初期の解答を生成してください。

ステップ2: 初期の解答を見直し、改善の余地があるか評価してください。

ステップ3: 必要に応じて、代替の解答を生成し、それぞれを比較してください。

ステップ4: 最も適切な解答を選択し、その理由を説明してください。

最終解答: {最終的な解答}
```

　もちろん、
　　これだけでも
　　　解答は得られますが、
　　　　深堀ることをオススメします。

　問題文が
　　詳細なものであっても
　　　得られる解答は、
　　　　あなたには足らないもの
　　　　　かもしれません。

　深堀りすることで
　　おのれの求める情報が
　　　得られることと思います。

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

　今回は、ここまで。
Access mdbを全検索

```
Sub SearchAllTables()
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim rs As DAO.Recordset
    Dim fld As DAO.Field
    Dim searchTerm As String
    Dim sql As String
    Dim found As Boolean

    searchTerm = InputBox("検索したい値を入力してください")

    Set db = CurrentDb

    For Each tdf In db.TableDefs
        ' システムテーブルや隠しテーブルを除外
        If Left(tdf.Name, 4) <> "MSys" Then
            On Error Resume Next
            Set rs = db.OpenRecordset("SELECT * FROM [" & tdf.Name & "]", dbOpenSnapshot)
            If Err.Number <> 0 Then
                Err.Clear
                GoTo NextTable
            End If
            On Error GoTo 0

            Do While Not rs.EOF
                For Each fld In rs.Fields
                    If Not IsNull(fld.Value) Then
                        If InStr(CStr(fld.Value), searchTerm) > 0 Then
                            Debug.Print "見つかりました：" & vbCrLf & _
                                        "テーブル: " & tdf.Name & vbCrLf & _
                                        "フィールド: " & fld.Name & vbCrLf & _
                                        "値: " & fld.Value & vbCrLf & _
                                        "--------------------"
                            found = True
                        End If
                    End If
                Next fld
                rs.MoveNext
            Loop
            rs.Close
NextTable:
        End If
    Next tdf

    If Not found Then
        MsgBox "該当データは見つかりませんでした。", vbInformation
    Else
        MsgBox "検索完了。結果は[イミディエイトウィンドウ]で確認してください。", vbInformation
    End If

    Set rs = Nothing
    Set tdf = Nothing
    Set db = Nothing
End Sub

```
【Apps Script】勤怠メールの自動化

## やりたいこと
毎日の勤怠連絡を、Gmailから決まった宛先・件名で送りたい。
スマホからURLをタップするだけで送信できるようにしたい。

### 1. Google Apps Scriptを開く
https://script.google.com/ にアクセス

「新しいプロジェクト」を作成

### 2. 以下のコードを貼り付ける
※件名宛先は可変
```:Apps Script

function sendKintaiMail() {
  GmailApp.sendEmail(
    "test@co.jp",               // 宛先
    "20XXXXX 勤怠開始/終了",                   // 件名
    "",                                        // 本文（なし）
    {
      cc: "testCC@test.co.jp, test2CC@test.co.jp",  // CC複数
      bcc: "testBCC@test.co.jp"               // BCC
    }
  );
}

```
### 3. 保存 → 実行
左上の保存アイコンをクリック（プロジェクト名は適当でOK）

### 4. デプロイ
手順概要：
メニューで「デプロイ」→「新しいデプロイ」

「種類を選択」→「ウェブアプリ」

「次のユーザーとして実行」→「自分」

「アクセスできるユーザー」→「自分のみ」

デプロイ後、URLが発行されるのでスマホのブックマークに追加


### ５．使用方法
４．で作成されたURLのリンクをタップ

以下の通り送信される
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782903/7133935a-81b9-4b7a-8287-0a0917171bc5.png)


### ６．使った感想
・毎日の「メール作成→宛先入力→件名入力」の手間がゼロに！
・文字入力が不要なので、通勤中や在宅中でも楽に対応可能
・送信するかYN応答がないので誤送信の心配あり
　ｋYN応答を追加するにはHTMLで作成する必要があるので少し面倒
Pascal 

El ORIGEN de PASCAL
https://www.youtube.com/watch?v=1rYmvT5sB9s

## ALGOL

## FORTRAN

## DR. Niklaus Wirth

## BASIC

## Turbo Pascal

## C++

## object pascal

# Pascal

He utilizado Turbo Pascal en mi PC.
PCでTurbo Pascalを使ったことがあります。

También he utilizado topspeed modula-2.
topspeed modula-2 も使ったことがあります。

Niklaus Wirth también estuvo involucrado con Pascal y uno de sus sucesores, Modula-2.
Niklaus Wirthは、Pascalとその後継言語の一つであるModula-2にも関わっています。

El primer compilador que escribí en C fue un puerto de un compilador escrito en Pascal a C.
Pascalで書かれたコンパイラをC言語に移植したのが、私の最初のC言語で書いたコンパイラです。

No entendí del todo la diferencia entre las características de PASCAL y C, por lo que solo funcionó en modo de depuración.
PASCALとC言語の性格の違いをよく理解しておらず、Debug modeでしか動作しませんでした。

Verilog HDL es un lenguaje de descripción de circuitos lógicos que heredó el estilo de escritura Pascal.
Verilog HDLは、Pascalの書法を継承した論理回路記述言語です。

El lenguaje más popular en mis Slideshare es Verilog HDL.
私のSlideshareで一番人気の言語はVerilog HDLです。

Me presenté en una conferencia académica donde contribuí a la revisión de la Guía de estilo de diseño RTL de STARC.
私にはSTARC RTL Design Style Guideの改訂に貢献した学会発表があります。
# Ref.
LinuxChad
https://qiita.com/kaizen_nagoya/items/cdae082ffdfffee10605
AIを魔法の杖のように使ってアプリを爆速生成する方法

30年以上の経験を持つシニアソフトウェアアーキテクトとして、AIがアプリ開発を20倍〜100倍高速化する「魔法の杖」だと実感しています。この記事では、**Qiita**のエンジニア向けに、AIを活用してアプリを効率的に開発する実践的な方法を紹介します。PythonやJavaScriptを中心に、2025年の最新AIモデルと具体的なステップを解説します。詳細な解説は[Zennの関連記事](https://zenn.dev/ken1618/articles/7b76a3061349cd)で読めます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4075136/33ec65d4-1b93-455d-84ed-ff965a01f028.png)

## AIがアプリ開発を変える
AIによるコード生成は、開発を劇的に加速します。たとえば、PythonでのAPI開発やJavaScriptでのフロントエンド構築が50倍〜100倍速くなるケースも。成功の鍵は以下：
- **最適なAIモデル**の選択
- **AIが得意な言語・フレームワーク**の活用
- **人間の専門知識**による品質管理

## ステップ1：最先端のAIモデルを選ぶ
2025年のAIモデルは高性能で、用途に応じた選択が重要です。おすすめモデル：
- **Claude 3.7 Sonnet（Anthropic）**：2024年末リリース。ReactやSvelteなどフロントエンド開発に優れ、デバッグも強力。ただし、ウェブアクセスがないため最新技術の対応に限界。
- **Grok 3（xAI）**：2025年2月17日リリース。DeepSearchモードでリアルタイムウェブデータを取得し、Pythonバックエンドや複雑なロジックに最適。
- **Gemini 2.5 Pro（Google）**：1Mトークンのコンテキストで、大規模ウェブアプリやコードエージェントに強い。

**選び方のポイント**：Grok 3やGemini 2.5 Proのウェブアクセスは最新フレームワークとの互換性を確保。フロントエンドならClaude 3.7、複雑なタスクならGrok 3を選びましょう。

## ステップ2：AIが得意な言語・フレームワークを選ぶ
AIのコード生成精度はトレーニングデータ量に依存します。2025年の状況：
- **高精度**：
  - **Python**：Flask、FastAPIでほぼ本番レベルのコード。Grok 3やClaude 3.7で50倍〜100倍の生産性向上。
  - **JavaScript（React、Svelte）**：Claude 3.7やGemini 2.5 Proが信頼性の高いコードを生成。
- **中精度**：Java、PHPは修正が必要。
- **低精度**：Swift、KotlinはUIや複雑なロジックでエラーが多い。

**推奨**：PythonとJavaScript（React、Svelte）に絞り、Qwikのような新興フレームワークは避ける。

### 実例：Reactコンポーネントの生成
Claude 3.7に「Reactでログインページを生成」と依頼すると、以下のコードが得られます（要レビュー）：
```javascript
import { useState } from 'react';

function Login() {
  const [email, setEmail] = useState('');
  const [password, setPassword] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    // ログイン処理
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="email"
        value={email}
        onChange={(e) => setEmail(e.target.value)}
        placeholder="メールアドレス"
      />
      <input
        type="password"
        value={password}
        onChange={(e) => setPassword(e.target.value)}
        placeholder="パスワード"
      />
      <button type="submit">ログイン</button>
    </form>
  );
}

export default Login;
```
このコードは基本的なログインページを数秒で生成。セキュリティやエラーハンドリングは人間のレビューが必要です。

## ステップ3：バグを予測・管理
AI生成コードの典型的な問題：
- 非推奨APIの使用
- セキュリティ脆弱性（例：SQLインジェクション）
- ロジックエラー

**対処法**：
- **テスト**：単体テスト（Jestなど）や統合テストで早期発見。
- **コードレビュー**：Grok 3のDeepSearchで最新ベストプラクティスを確認。
- **反復改善**：AIに「このコードを最適化」と再プロンプト。

## ステップ4：人間の専門知識を活用
AIは生産性を高めますが、以下は人間の介入が必須：
- **アーキテクチャ設計**：スケーラブルな構造。
- **セキュリティ強化**：脆弱性対応。
- **デバッグ**：複雑な問題の解決。

初心者は経験豊富な開発者の指導を求めましょう。

## 実践的なヒント
- **明確な要件**：アプリの構造を事前に定義（例：「Reactのログインページ」）。
- **タスク分割**：コンポーネント単位でAIに依頼。
- **ツール併用**：リンター（ESLint）やテストフレームワークで品質向上。
- **最新情報**：Grok 3のDeepSearchで最新技術を反映。

## まとめ
AI（Grok 3、Claude 3.7、Gemini 2.5 Pro）は、PythonやJavaScriptでアプリ開発を高速化します。適切なモデルと言語を選び、人間の専門知識を組み合わせれば、プロトタイプを数分で構築可能。詳細は[Zennの記事](https://zenn.dev/your-article-link)で確認してください。AIを魔法の杖として使いこなし、アプリ開発の未来を切り開きましょう！

*注：この記事の英語版は [Medium]() でも公開されています。*
【UE5】TwoSidedを疑似的に切り替える

## 初めに
マテリアルをTwoSidedに設定したけどパフォーマンスのことを考慮しTwoSidedのオン・オフを動的に切り替えたい場合はあるかと思います。
今回はTwoSidedを**疑似的に**切り替える方法を紹介します。

## 環境情報
Windows 11
UE 5.3.2

## 注意事項
"初めに"のセクションで強調しましたが、今回の実装はあくまで疑似的にTwoSidedのオン・オフ切り替えを再現しています。
TwoSidedの設定自体は静的なものなのでランタイム環境で設定自体は変更できないことには留意してください。

今回の実装はOpacityMaskを用いて裏面を透過することで疑似的にTwoSidedを切り替えます。そのためBlend ModeをMaskedにする必要があります。つまり透明なマテリアルに対しては適用できません。

## 実装
先に説明してしまいましたが、今回の実装では裏面の場合はOpacity Maskに対して0（裏面透過）または1（裏面表示）を渡すことでTwoSidedのオン・オフを疑似的に再現します。
処理はMaterial Functionで作成していきますが、処理の関係上外部から値を渡す必要があるのでMaterial Collection Parameterを先に用意しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/7a798549-8c21-4104-a6cd-c711c615455c.png)
Parameter名はTwoSidedにしておき、デフォルト値は0にしておきました（裏面非表示）。

そして作成したMaterial Functionがこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/a9faeb1a-1509-4ddf-bdd2-08a8ac2fc380.png)

TwoSidedSignは裏面の場合は-1を、表面の場合は1を返してくれます。
Clampで-1（裏面）を0にします。
Collection Parameterには作成したMaterial Collection ParameterのTwoSidedを設定します。
渡したい値は0または1なのでMaterial Function側で値を抑制させるべきですが、今回は省略します。
Lerpを用いることで表面は常に1をOutputとして出力し、裏面はCollection Parameterの値に応じて0または1を出力するようにします。

使用するマテリアルの方ではTwoSidedをオンにしておき、Blend ModeをMaskedにしておきます。
作成したMaterial Function（MF_ChangeTwoSided）をOpacity Maskにつなぎます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/8820eebf-5ecc-4f15-9d13-0261ba7c7fec.png)

あとはCollection Parameterに値を渡してあげればOKです。
実装はなんでもよいのですが以下が例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498810/d8baa09e-026d-4bcb-808c-a9d29bdebf55.png)

Parameterに1を渡せば裏面が表示され、0を渡せば非表示になります。
フルスタックエンジニアを目指す方へのおすすめ図書

私たちのチームでは、お客様の課題解決に貢献するため、メンバー全員がフルスタックな視点を持つことを目指しています。今回は、私が40年以上にわたるプログラマ・エンジニアとしての経験から、特にフルスタックエンジニアを目指す上で役立つと感じた書籍を厳選してご紹介します。単なる技術習得だけでなく、開発の現場で本当に価値を生み出すためのヒントが詰まっている本ばかりです。

## ピープルウェア

ソフトウェア開発における「人」の重要性と生産性について深く考察した名著です。私が特に感銘を受け、今でも意識している点は以下の2つです。

### スペイン流生産性 vs イギリス流生産性
本書で対比される二つの生産性の考え方です。日本の（特にSIerにおける）プロジェクトマネジメントでは、しばしば「いかに安く、長く働かせるか（時間ベース）」が重視されがちかもしれません。しかし本書が示すように、本来は「**いかに短時間で価値ある成果を生み出せる環境を作るか**」という視点（価値ベース）でマネジメントを行うべきだと考えさせられます。これは、エンジニアが集中し、効率的に働ける環境を整えることの重要性を示唆しています。

### プログラマの生産性は学歴や給料と相関がない
本書によれば、プログラマ個人の生産性は、学歴や給与よりも「**どの会社（チーム）で働いているか**」という環境要因との相関が強いとされています。つまり、集中できるオフィス環境（個室の有無、静けさ、電話の割り込み頻度など）や、会社・チームが何を大切にするかという文化が、生産性に最も大きな影響を与えるということです。

amazonへのリンク: [ピープルウエア 第3版 トム・デマルコ](https://www.amazon.co.jp/%E3%83%94%E3%83%BC%E3%83%97%E3%83%AB%E3%82%A6%E3%82%A8%E3%82%A2-%E7%AC%AC3%E7%89%88-%E3%83%88%E3%83%A0%E3%83%BB%E3%83%87%E3%83%9E%E3%83%AB%E3%82%B3/dp/4822285243)

## スーパーエンジニアへの道
『ピープルウェア』でも触れられていますが、組織全体の生産性を上げる鍵は、優れたリーダーシップを持つ人材の存在です。本書は、技術者がリーダーシップを発揮するために必要な要素について、『ピープルウェア』よりもさらに具体的かつ詳細に掘り下げています。単なる技術力だけでなく、影響力、コミュニケーション能力、問題解決能力などをどう伸ばしていくか、実践的なアドバイスが満載です。特に、**「高い給料が欲しい」、「出世したい」** という気持ちが強い人に読んでもらいたいです。リーダシップというのは何なのかというところから説明してくれています。

amazonへのリンク:[スーパーエンジニアへの道 G.M.ワインバーグ](https://www.amazon.co.jp/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%B8%E3%81%AE%E9%81%93-%E6%8A%80%E8%A1%93%E3%83%AA%E3%83%BC%E3%83%80%E3%83%BC%E3%82%B7%E3%83%83%E3%83%97%E3%81%AE%E4%BA%BA%E9%96%93%E5%AD%A6-G-M-%E3%83%AF%E3%82%A4%E3%83%B3%E3%83%90%E3%83%BC%E3%82%B0-ebook/dp/B09BDVP5BV)

## 人月の神話

ソフトウェア開発プロジェクトの難しさ、特に大規模プロジェクトにおける複雑性を鋭く指摘した、もはや古典中の古典です。有名な **「ブルックスの法則：遅れているソフトウェアプロジェクトへの要員追加は、さらにプロジェクトを遅らせるだけだ」** は、今も多くの現場で示唆を与えてくれます。ソフトウェア開発に関わるなら、一度は読んでおくべき基本書と言えるでしょう。個人的には、野心的な設計に陥りがちな **「セカンドシステム症候群」** の記述が特に心に刺さりました（今でも時々、この"病"の兆候を感じることがあります…）。また、[タールピット（タールの沼）の挿絵](https://qiita.com/e99h2121/items/accd534d1a3cac1ce4ca) は非常に有名なので、IT業界の共通言語・教養としても知っておくと良いかもしれません。

amazonへのリンク:[人月の神話 ブルックス](https://www.amazon.co.jp/%E4%BA%BA%E6%9C%88%E3%81%AE%E7%A5%9E%E8%A9%B1%E3%80%90%E6%96%B0%E8%A3%85%E7%89%88%E3%80%91-Jr-FrederickP-Brooks/dp/4621066080)

## ライト、ついてますか

こちらも『スーパーエンジニアへの道』と同じく、ジェラルド・M・ワインバーグによる名著です。本書は「問題解決」に焦点を当てており、「そもそも、それは本当に解決すべき『問題』なのか？」を問いかけます。プロジェクトが行き詰まった時、感情的になったり、目先の現象に囚われたりするのではなく、**「問題とは何か？（本書で言うところの『現実と理想のギャップ』）」を冷静に定義し、本質的な解決策を考え、提案できる**ようになるための思考法を学ぶことができます。複雑な状況をシンプルに捉え直す手助けとなる一冊です。

amazonへのリンク:[ライト、ついてますか G.M.ワインバーグ](https://www.amazon.co.jp/%E3%83%A9%E3%82%A4%E3%83%88%E3%80%81%E3%81%A4%E3%81%84%E3%81%A6%E3%81%BE%E3%81%99%E3%81%8B-%E5%95%8F%E9%A1%8C%E7%99%BA%E8%A6%8B%E3%81%AE%E4%BA%BA%E9%96%93%E5%AD%A6-%E3%83%89%E3%83%8A%E3%83%AB%E3%83%89%E3%83%BBC%E3%83%BB%E3%82%B4%E3%83%BC%E3%82%B9-ebook/dp/B09BDWRCXN)

## 【番外編】ビジネスの原理原則を学ぶ（書籍名：正直なビジネス ※現在入手困難）

私が起業時に読み、ビジネスの基本を学んだ[正直なビジネス](https://jp.mercari.com/shops/product/ri3ZzbVXTpz2yawubHJZDe?srsltid=AfmBOopivfJxqlZsg9qKPK3SETGWPkvwO6uUwpc2PqqcrrLQXA1qYxUT)という本があります（※残念ながら現在は入手困難なようです）。この本から学んだ特に重要な考え方については、以前私のブログでまとめたことがあります。ご興味があれば、参考までにご覧ください。
ブログ記事へのリンク: [ビジネスとは](http://procube.sblo.jp/article/59332201.html)
SOA-C02 を合格したお話

4月の終頃にSOA-C02を合格しました！！っていうお話です。

# 当時のクラウド知識について
3月の中頃にSAAを取得し,勢いで4月中頃にDVAを取得しました。
この勢いで、SOAを受験してみようという気分になり勉強を始めました。

# 勉強方法について
勉強期間：2週間ほど
勉強時間：2時間/日

教材は以下を使用しました。
・Udemy
・Blackbelt

# Udemy
以下を使用して、勉強しました。
1.[【SOA-C02版】AWS認定SysOpsアドミニストレータアソシエイト試験対策問題集](https://www.udemy.com/course/soa-c02awssysops/?couponCode=C942309E0815731A2FB7)

2.[【全出題範囲網羅+詳細解説】AWS SOA-C02日本語実践問題260問(シスオプスアドミニストレータアソシエイト)](https://www.udemy.com/share/10css53@nECOfxwo_c2os3Q6A55EZ78VZQGv-ArhHDK88AQpqBtaNaJyvvHswckxRRew-eGL/)

# Blackbelt
以下のAWS公式のYoutubeを見ました。
リンク：[Blackbelt](https://www.youtube.com/@JPAmazonWebServices)

# 試験について
・試験時間：130 分
・問題数：65 個の問題 (複数選択または複数応答)

# 試験結果
756点で合格しました！(720/1000点が合格ライン)

# 次の目標
次は、AWS Certified Solutions Architect - Professional (SAP-C02)を狙っていきたいと思ってます。
小規模プロジェクトのキックオフアジェンダ

## はじめに
### 定義
- キックオフMT: プロジェクトを開始するにあたり前提となる決め事や認識の擦り合わせを行う場
- 小規模プロジェクト: 2~5人程度で行うプロダクト開発。（業務ではない）

### 背景
この度、知人（[Xアカウント](https://x.com/yuiokurasukiyo)）とアプリケーション開発を開始した。

一人で行う制作・開発と異なり、人と協同するにあたっては少なくとも共通認識を持っておかないといけない事柄がいくつかある。それを共有するキックオフMTを先日行ったので、本記事では個人的にそのMTを振り返る。

MTは[プロジェクトキックオフのアジェンダ](https://qiita.com/makky_tyuyan/items/16134d208ae129fd49ce)を参考に、あらかじめ議題をなんとなく決めておいた。「小規模プロジェクト」を前提に置いたとき、必要なアジェンダ、別に必要なさそうなアジェンダをまとめる。

## 議論・共有すべきアジェンダ
### 1. 目的
絶対に必要。個々人のモチベーションを知っておくことで不要な軋轢は避けられるし、何かあったときに立ち返る基準となる。
我々は、お互いの得意分野を共有することで視野を広げることや、音楽の価値を高めるということを目的に置いた。（音楽系のアプリケーションを作るため）

### 2. 目標
目指すものがあれば頑張ることができる。強制されない個人レベルでの開発になるため、モチベーションを保っておきたい。
まずはリリースすることを目標に。本業の収入を超える収益を上げることを野望にした。（ハングリー精神大事）

### 3. スコープ
目標設定に絡んでくるため必須。何を以て完成・完了とするか（成果物の定義）、QCDの優先順位は擦り合わせておくべき。
納得したものをリリースしたいためQを最高順位に、学習にお金は惜しみたくないためCを最低順位に。

### 4. スケジュール
納期が決まっていないとダラダラしてしまうためお尻を決める。加えて、コンスタントに進捗や課題を話し合う場を設けることを取り決め。
本業などの兼ね合いもあるため定例化せず、毎回のMT最後に次回予定を決める方針でとりあえずは確定。


## 必要ではないかもしれないアジェンダ

### 1. コミュニケーション
あえて議題として取り上げなくてもよかったかなと感じる。（元々利用している連絡ツールを使っているため）
定例会とかの取り決めをするのであれば、ここに入ってくる？

### 2. 管理方針
Notionでタスクや仕様を共有しよう程度のお話はした。
資料をちゃんと作成したり進捗をかっちり管理することは、もちろん良いことだしいずれ必要になってくるとは感じたが、仕事ではない開発や学びを目的としたプロジェクトにおいては優先度は低い。

## おわりに
これを投稿することで逃げ道を無くしているという側面もある。
これからがんばるぞ。
Geminiでオルガンを使う魔法少女を描いてみた。

# 概要

Geminiでオルガンを使う魔法少女を描いてみました。

# 実装

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

```
光のオルガンを使う魔法少女を描いてください。
```
![光のオルガンを使う魔法少女_20250502.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/2b5012b1-ce75-475f-bd92-b82d49199e0b.png)



```
闇のオルガンを使う魔法少女を描いてください。
```
![闇のオルガンを使う魔法少女_20250502.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/6bea1452-a291-41a1-80d8-999bfe8ab53d.png)



```
聖なるオルガンを使う魔法少女を描いてください。
```
![聖なるオルガンを使う魔法少女_20250502.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/6d02fdbf-b80c-4e29-8968-d68080d4489b.png)

# まとめ

光の子は可愛いかも。
何かの役に立てばと。
MS-Windows 3.1にファイルを転送

PC-9821cs2にFreeBSD上のOpen Watcom V2.0で[ビルドしたファイル](https://qiita.com/yamori813/items/ade57cc24681ce85f2b4)を転送してみました。

ファイルサイズは小さいのでフロッピーでコピーする事も出来るのですが、あいにくPC-9821cs2のドライブが不調で読めません。

CD-ROMドライブも不調です。

幸いWindowsにTCP StackのChameleonがインストールされていてws_ftpアプリがあります。

Windows 3.1の頃はTCPスタックは別売でChameleoは単体だとかなり高価なものでしたが、高城剛がやっていたフランキー・オンラインのStarter CDに入っていたものをインストールしました。

PC-9821cs2のCバスにはPlanexのEtherカードが入っていて、蟹さんのイーサーネットコンバーターを使ってWiFiでLANに接続しています。

我が家ではNetBSD/arm(c1k)でanonymous ftpサーバをあげているので、そこにFreeBSDからscpでコピーします。

これをws_ftpでコピーすれば完了です。
初心者がReactで作るTodoアプリ①

## 全体コード
```jsx
import { useState } from 'react';
import './App.css';

function App() {
  const [todos, setTodos] = useState([]);

  function handleAddTodo(todo) {
    setTodos(prev => [...prev, todo]); // 状態(state: todos)を更新
  }

  return (
    <div>
      <h1>Todoリスト</h1>
      <TodoForm onAddTodo={handleAddTodo} />
      <TodoList todos={todos} />
    </div>
  );

  function TodoForm({ onAddTodo }) {
  const [text, setText] = useState('');

  function handleClick() {
    const todo = { text, id: Date.now() };
    onAddTodo(todo); // 配列にtodoオブジェクトを保存
    setText('');
  }

  return (
    <div>
      <input
        type="text"
        placeholder="ここに入力してください"
        value={text}
        onChange={e => {
          setText(e.target.value);
        }}
        onKeyDown={e => {
          if (e.key === 'Enter') handleClick();
        }}
      />
      <button onClick={handleClick}>追加</button>
    </div>
  );
}

function TodoList({ todos }) {
  return (
    <ul>
      {todos.map(({ text, id }) => {
        if (!text.trim()) return; // 空文字ブロック
        return <li key={id}>{text}</li>;
      })}
    </ul>
  );
}

export default App;
```

## 機能
・タスクの追加ボタン

## ソースコード
[リポジトリはこちら](https://github.com/constsn/react-todoApp)

## まとめ
タスク入力をユーザーから受け取って、それをレンダリングするところまで実装しています。

リストをmap()などで複数作るときは、それぞれにidなどを持たせて、React側にそれぞれ独立していると認識させなければReactに怒られることを学びました。
アプリ開発100本ノック#2自動トーナメント出力マシーン



## Day 2: 自動トーナメント出力 - ケンガンアシュラに感化された🔥

**ミッション:** 好きな選手を登録したら、自動でトーナメント表を作ってくれて、優勝者まで決めてくれるアプリを作る！

**開発ストーリー:**

最近、嫁さんと一緒に「ケンガンアシュラ」っていう格闘漫画にハマってて…💪🔥  トーナメント戦が熱い！ってことで、自分たちでもトーナメント表を自動生成するアプリを作ってみることにしました！😎  選手名を入力したら、ランダムで勝敗を決めて、優勝者を表示してくれるっていうシンプルなやつです。


```python
from flask import Flask, render_template, request, redirect, url_for
import random

app = Flask(__name__, template_folder='tournament')  # tournamentディレクトリをテンプレートフォルダとして指定

@app.route("/", methods=["GET", "POST"])
def index():
    # 以下略 (コードは前と同じ)
```


HTMLの見た目はこちら！:
```
<h1>トーナメント結果</h1>

{% for round in rounds %}
    <h2>ラウンド {{ loop.index }}</h2>
    <ul>
        {% for match in round %}
            <li>{{ match }}</li>
        {% endfor %}
    </ul>
{% endfor %}

<h2>優勝者: {{ champion }}</h2>
IGNORE_WHEN_COPYING_START
content_copy
download
Use code with caution.
Html
IGNORE_WHEN_COPYING_END
```

今日の学び:

ngrok神！✨ ついに他の人にもアプリを共有できた！感動！😭


未来への野望！:

勝率を設定できるようにしたい！💪

トーナメント表を画像で出力できたら最高！🖼️

リアルタイムで対戦結果を更新する機能も面白そう！🥊

100個アプリ開発の旅、まだまだ続く！AI先生、これからもよろしく！😄 次はどんなアプリを作ろうかな〜ワクワク！🤩
企画書の作り方

こんにちは。eスポーツ同好会部長の岩元です。
この記事ではソリューション型のイベントを作るときの企画書の作り方、要件定義について話します。

# 要件定義とは
要件定義とはターゲットの現状の課題を整理して、プロジェクトの目的を設定することです。
イベント企画では「何のために何故するのか」を常に意識し続けることが重要です。

# なぜ要件定義をするの？
何か一つ行動の軸を言語化することで、チームの価値観を統一し、迷いや衝突を減らすことができます。

また、イベントが終わった後にこのイベントがどのくらい成功できたのかを測る指標になります。
PDCAサイクルのCheckをすることで、次の成長に進めるので、反省をできることは非常に重要です。
※PDCAとは「Plan（計画）→Do（実行）→Check（評価）→Act（改善）」のサイクルです。

これらの過程はエンジニアリングと非常に結びついています。
なんのためのプロダクトを作り、具体的にどのような仕様にするのか論理的に言語化することができるようになります。

# 具体手法
要件定義の具体手法は以下の手順で行います
1. ターゲットの定義
1. 課題のリサーチ
1. 具体的なイベントのアイデア出し
1. ストーリーと企画書作り

## ターゲットの定義
まず、誰をどうするのかの"誰を"を決めます。
最初は何でも良くて、高校生とか高齢者とか特定の会社とかの課題、自分が今困っていることや身近をターゲットにしても良いかもしれません。
どれにしようか迷ってわからない人はまず"熊本"の課題をテーマに考えましょう。
人口も市場も大きく、企業の社会的責任と結びつけやすいため便利です。

## 課題のリサーチ
次にターゲットの課題を色々書いてみます。
まずは自分の想像で書いてみて、次にLLMに聞きましょう。
最初からAIに頼ると納得感が薄く、面白みに欠けることがあります。
とにかく数を出すことが重要です。
一人20個は見つけましょう
可能であれば、可能を裏付けるデータや記事があると納得感が増します。

## 具体的なイベントのアイデア出し
課題を見つけたら次は解決策を考えます。
ここで出たアイデアがそのままイベントになることがあるので、面白いアイデアを沢山考えましょう。
すぐに最高のアイデアが出ることは少ないので、1週間ずっと授業中もバイト中もお風呂の中でも考えてください。
アイデアは見つけようとしないと出てきません。

また、ここで課題のリサーチに戻ることも効果的です。
日本の市場への理解を深めることで他の課題と結びついてユニークなアイデアが生まれることがあります。
具体的には高校生の課題を考えたときにeスポーツ業界と進路教育と結びつけて、eスポーツ業界を志す高校生の課題を解決してみたりしました。

## ストーリーと企画書作
ここまで来たらイベントのストーリーと企画書を作ります。
ストーリーは以下の要素が必要です
1. 現状の課題の提示
1. イベントの目的の
1. なぜ自分たちがこのイベントするのか
1. なぜeスポーツを使うのか
1. 具体的なイベント概要
1. 企業のメリット
1. 必要な予算

企業の協賛を得るためには、このイベントの必要性を論理的に説明することが大切です。
今まで考えてきた課題とデータと解決策を文書やスライドにまとめましょう。
すると、本当にこの目的で良いのか、このイベントで良いのか経験が少ないため不安になります。
そういうときは家族や顧問の先生にこのイベントをプレゼンしてみましょう。
閉じたコミュニティだけで話し合っていると前提知識やなんとなくで理解していてそのまま進んでしまうこともよくあります。
何も知らない人に話すことで、どのあたりで説明が必要なのかわかります。
何度も違う人にイベントのことを説明することで、自分の中でもなぜこのイベントをするのか論理的に理解することができます。

この課題のリサーチからストーリー作りまでの手順を何度も繰り返すことでより良いイベントに洗練されます。
焦らずに落ち着いて言葉に落とし込んでいきましょう。

# まとめ
これらがイベントの要件定義の概要です。
この記事を何度も読み返して、自分たちのイベントがより良いものになるように取り組みましょう！
オンプレミスからAWS移行の時に使いそうなサービス

# 前置き
オンプレミスからAWSに移行するときに、オンプレミスの情報収集するツールに似ているものがあったので備考として記載

# Migration Evaluator CollectorとAWS Application Discovery Agentの違い
オンプレミス環境のアプリケーション間の依存関係を調べたいときには「AWS Application Discovery Agent」を使えってことなんですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021557/34cc884b-46d3-40de-ba03-cf714dcbe2f2.png)
Playwrightでログイン状態を保持する

## はじめに

Webアプリケーションのテストで「あらかじめログインした状態からテストを始めたい」というのはよくあるニーズです。Playwrightでは、[Authentication](https://playwright.dev/docs/auth)にあるように、ログイン後の browser state を保存して、使い回すのが基本的な実装方法です。ここではサンプルコードを紹介します。

## ログイン状態の保持

### セッションの保存

```typescript:tests/auth.setup.ts
import { test as setup, expect } from '@playwright/test';

const sessionFile = '.auth/user.json';

setup('ログイン', async ({ page }) => {
  // Perform authentication steps. Replace these actions with your own.
  await page.goto('/login');
  await page.getByLabel('アカウント名').fill('username');
  await page.getByLabel('パスワード').fill('password');
  await page.getByRole('button', { name: 'ログイン' }).click();
  await page.waitForURL('/home');
  await expect(page.getByRole('heading', { name: 'Welcome to HOME' })).toBeVisible();

  // End of authentication steps.

  await page.context().storageState({ path: sessionFile });
});
```

### テストケースで使うための設定

ポイントは、以下の2点です。

1. `chromium` プロジェクトの `dependencies` に `setup` を指定することで、テストケース実行前に `setup` が実行されるようにする。
2. `chromium` プロジェクトの `use` に `storageState` を指定することで、テストケース実行時に `setup` で保存したセッションを読み込むようにする。

```typescript:playwright.config.ts
import { defineConfig, devices } from '@playwright/test';

export default defineConfig({
  projects: [
    // Setup project
    { name: 'setup', testMatch: /.*\.setup\.ts/ },

    {
      name: 'chromium',
      use: {
        ...devices['Desktop Chrome'],
        // Use prepared auth state.
        storageState: '.auth/user.json',
      },
      dependencies: ['setup'],
    },
  ],
});
```

<!-- zenn article id: 56426db5d78dfc -->
xserverで別々のDBのテーブルを接続するSQL

# select文で権限が無いとエラーが起きた

# Laravelのlogのエラー内容
```
[2025-04-30 05:48:37] production.ERROR: スタッフデータ取得エラー {"error":"SQLSTATE[42000]: Syntax error or access violation: 1142 SELECT command denied to user 'ユーザ名'@'localhost' for table データベース名.テーブル名 (Connection: ユーザ名, SQL: 
                        SELECT 
                            sr.id, 
                            sr.recorded_staff_id, 
                            u.name as staff_name,
                            sr.served_time
                        FROM 
                            service_records sr
                        JOIN 
                            データベース名.テーブル名 u ON sr.recorded_staff_id = u.id
                        WHERE 
                            DATE(sr.served_time) = 2025-04-30
                            AND sr.item_id = 14
                            AND sr.is_deleted = 0
                    )","date":"2025-04-30"} 
```

# ChatGPTの返答
```
このLaravelのエラーは、データベースのアクセス権限に関するものです。具体的には、MySQLのユーザーが、`laravelのdb名`.`テーブル名`テーブルに対してSELECT（取得）操作を行う権限を持っていないため、エラーになっています。
```

# ❌ エラーの概要
```
SQLSTATE[42000]: Syntax error or access violation: 1142 
SELECT command denied to user 'ユーザ名'@'localhost' for table `laravelのdb名`.`テーブル名`
```


# 原因
原因はデータベース名がローカルと本番環境で一致していなくてSQLがエラー起こしていただけだった

# XserverについてOpenAIに質問した内容が以下になる

```
✅ Xserverの仕様上、「別データベースのJOINは原則不可能」です（共用サーバーの場合）
🔒 理由（Xserverの共用サーバーの仕様）
Xserverの共用サーバー環境では、1つのMySQLユーザーは1つのデータベースにしかアクセスできない設計になっています。

ユーザ名 は データベース名1 か データベース名2 のどちらか一方にしかアクセスできない

他のDBに SELECT しようとすると → 1142 SELECT command denied エラーになる

🧪 実験した人たちの報告でも…
Xserverの公式マニュアルには明示されていませんが、実際に試した人たちのブログやフォーラムでも：

「別DBをJOINしようとしてもアクセス拒否された」
「MySQLユーザーに複数DBの権限を付けられない」

という報告が多数あり、事実上できないと考えられています。

でもXserverでは「MySQLユーザーが他のDBに入れない」ので、JOINできないんです。

✅ 対策として現実的な選択肢
方法	内容	難易度	備考
✅ テーブルを1つのDBにまとめる	JOINできるようにする	★☆☆	一番シンプルでおすすめ
✅ Laravel側で2回SELECTしてPHPで結合	データ結合はアプリ側で	★★☆	JOINはできないが回避可能
❌ VPS・クラウドに移行	権限設定自由	★★★	高コスト、自由度◎

🎯 結論まとめ
❌ Xserverの共用サーバーでは、異なるデータベース間のJOINは仕様上できない

✅ 1つのDBに統合するか、Laravel側で2回SELECTして結合するのが現実的な対応策
```

# 結論
Xserverが別々DBのテーブルの結合が出来ないのだと思い込んだら、実際の原因はデータベースの不一致が原因でした。
OpenAIの言うことを全部鵜呑みにしないように気を付けようと思いました。
個人的備忘録：CSSだけで和室の雰囲気を再現できたので、Next.js × 和風デザインの設計をメモとして整理

## はじめに

この記事では、Next.js のユーザー登録ページで共通CSSファイル（common.css）をどのように読み込み、どのような形で活用しているかを簡単に解説します。

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

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

受講しているITスクールのハッカソンの開発の一環で和風デザインを取り入れた際、そのスタイル適用箇所を明確に把握し、後から再利用や修正がしやすいように備忘録としてまとめています。

## 内容

対象のコードでは、以下のように `common.css` を読み込んでいます：

```ts
import "../../styles/common.css"; // 共通CSSを読み込み
```

**実際のコード**

https://github.com/2025SpringTeamA/frontend/blob/main/src/styles/common.css

このCSSファイルには和室風のデザインを構成するスタイルが定義されており、以下のような形で使われています：

1. **`washitsu`**（bodyに適用）

```ts
useEffect(() => {
  document.body.classList.add("washitsu");
  return () => {
    document.body.classList.remove("washitsu");
  };
}, []);
```

* 畳風の背景や全体の和室スタイルを適用。

2. **`kakejiku`**（タイトル）

```tsx
<h1 className="kakejiku">一般ユーザー登録</h1>
```

* 掛け軸風デザインを適用。

3. **`fusuma-form`**（フォーム）

```tsx
<form className="fusuma-form">
  ...
</form>
```

* 襖風の背景・枠デザインを適用。

4. **`form-button-group` / `button-back` / `button-submit`**（ボタン関連）

```tsx
<div className="form-button-group">
  <Link href="/" className="button-back">戻る</Link>
  <button type="submit" className="button-submit">登録</button>
</div>
```

* ボタンの配置、和紙風や畳風のスタイル、ホバー効果などを細かく制御。

これにより、全体として和の雰囲気がある柔らかなデザインの登録画面が完成します。

## まとめ

* `common.css` を読み込むことで、複数のコンポーネントに統一された和風スタイルを適用可能。
* 特定のクラス（例：washitsu, kakejiku, fusuma-form など）が意図通りに動作しているかを把握しておくことで、保守や拡張が容易になります。
* チーム開発においても、どのCSSがどこに使われているかを可視化することは重要です。
Atcoder始めました

### Atcoder始めました
今日からAtcoderの学習記録を残そうと思います！
今回取り組んだ問題は過去問ABC042のA問題です。
自分が書いたコード（100点でも100点ではなくても）から正解を参照し、学んでいければと思います！

最初に自分が書いたコードはこちらです。
```C++:
#include <iostream>
using namespace std;

int main() {
    int a, b, c;
    cin >> a >> b >> c;

    if ((a == 5 && b == 5 && c == 7) ||
        (a == 5 && b == 7 && c == 5) ||
        (a == 7 && b == 5 && c == 5)) {
        cout << "YES" << endl;
    } else {
        cout << "NO" << endl;
    }

    return 0;
}
```
以下が[けんちょんの競プロ精進記録](https://drken1215.hatenablog.com/entry/2023/10/08/172708)に掲載されていた解答です
```C++:
#include <bits/stdc++.h>
using namespace std;

int main() {
    // ソートしたいので配列で受け取る
    vector<int> v(3);
    cin >> v[0] >> v[1] >> v[2];
    
    // ソートする
    sort(v.begin(), v.end());
    
    // 5, 5, 7 になっているかどうか
    if (v[0] == 5 && v[1] == 5 && v[2] == 7) cout << "YES" << endl;
    else cout << "NO" << endl;
}
```
読みやすいかつコメントがしっかり残されていて分かりやすい...
解答では
5,7,5を作れるかどうかを判断するために、配列を作りソートして5,5,7が作成できれば判断できると考えコードが組まれていました。
詳しい説明は、是非サイトを参照してください！
新人エンジニアのためのインフラ入門（第1回〜第4回）を読んで学んだこと

## はじめに

「インフラ」と聞いても、正直ふわっとしていてイメージがしづらかった。

でも、「新人エンジニアのためのインフラ入門（第1回〜第4回）」を読んで、  
インフラという言葉の意味や役割が少しずつ掴めるようになってきたので、学んだことをまとめておきます。

---

## インフラとは？ ─ 土台のイメージで考える

そもそも「インフラ（インフラストラクチャー）」とは、「土台」のような存在。

- 生活インフラがあるからこそ、私たちの生活が成り立つ  
- 交通インフラがあるからこそ、移動や物流ができる  
- そしてITインフラがあるからこそ、アプリケーションが動く

つまり、ITインフラの上にアプリケーションが乗っていて、それらをまとめて「システム」と呼ぶ。

---

## インフラを構成する要素

インフラには大きく2つの要素がある。

### ハードウェア（物理的な土台）
- サーバー
- ネットワーク
- ストレージ

### ソフトウェア（土台の中身）
- OS（例：Linux）
- ミドルウェア（例：Apache、MySQLなど）

---

## 仮想化とは「資源の有効活用」

印象的だったのが、仮想化は「資源の有効活用」だということ。

- 資源＝サーバー、ネットワーク、ストレージ
- 特にCPUの有効活用が重要  
  → 1台の物理サーバーの上に、複数の仮想サーバーを動かすことで、効率的に利用できる

また、仮想化には以下のようなメリットがあると学んだ。

- 物理サーバーに障害が起きても、別の物理サーバーに切り替えやすい
- ストレージを設定で拡張できる
- 一つの管理画面で複数の仮想サーバを管理できる

当たり前といえば当たり前だけど、「仮想化」ってよく考えられてるなぁと実感。

ただし、便利な反面、結局は1台の物理サーバーの上で動いているという点は忘れずに、設定や構成には注意が必要。

---

## クラウドのありがたみ

仮想化やインフラのことを学ぶと、「複雑だな」と思う。

そんなとき登場するのが「クラウド」。

- AWSやGCP、Azureのようなクラウドサービスは、この複雑なインフラを、ブラウザで触れるようにしてくれる。

つまり、インフラの細かい設定を意識せずに、必要なインフラ資源を使える。

もちろんメリット・デメリットはあるけれど、  
インフラの学習を進めるほど「クラウドって便利だな」と改めて感じた。

---

## おわりに

インフラはとっつきにくいテーマだけど、
「土台」というイメージで考えると少しずつ理解できるようになってきた。

そして仮想化やクラウドなど、現代のインフラが持つ柔軟性にも改めて感動した。

歴史を知ると、現代の環境にありがたみを感じる。
先代の方々に感謝し、クラウドを活用していきたい。
FinOpsフレームワーク解説 〜第１回〜 FinOpsの概念、なぜ注目されているのか

## 目次：
　　・FinOpsとは何か、なぜ今注目されているのか
　　・クラウドコスト最適化とビジネス価値最大化の重要性

## 今日の一枚まとめ：
![スクリーンショット 2025-05-02 11.26.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3895754/a6fd2112-c826-4bd5-8d9f-c957d7a5f0d7.png)

## 内容：
### FinOpsとは何か、なぜ今注目されているのか：
近年、クラウドコンピューティングの急速な普及により、企業のITインフラは大きく変化しています。クラウドは、柔軟性やスピード、イノベーションをもたらし、ビジネスの成長を強力に後押しする存在となりました。
しかし、その一方で **「クラウドコストの管理」** が最大の課題として浮上しています。実際、企業の **82%** がクラウド利用における最大の課題を「コスト管理」と回答しており、 **クラウド上での浪費コストが全体の28%にも上る** という調査結果もあります。
参考：https://thinkit.co.jp/article/22744


クラウドのコストが膨らむ理由はさまざまです。例えば、必要以上のリソース確保や、利用状況の可視化不足、部門ごとのサイロ化による非効率な運用、さらにはマルチクラウド環境での最適化の難しさなどが挙げられます。こうした背景から、多くの企業がクラウド予算の超過や財務状況の悪化に直面し、戦略的な投資やイノベーションの推進力を失うリスクが高まっています。

このような課題を解決するために注目されているのが **「FinOps（フィンオプス）」** です。
FinOpsとは、「企業がクラウド利用を通じて最大のビジネス価値を得るためのクラウド財務管理の概念」であり、 **単なるコスト削減や最適化だけでなく、クラウドの活用による収益増加や競争力強化を目指す新しい運用モデル** です。
参考：https://optage.co.jp/business/contents/article/20230412.html

FinOpsの特徴は、エンジニア、財務、ビジネス部門など異なる立場のステークホルダーが協力し、データに基づいてクラウド支出を意思決定する点にあります。これにより、コストの可視化や説明責任、継続的な最適化が組織全体で推進され、クラウド投資のビジネス価値を最大化することが可能となります。
クラウド時代においては、従来のオンプレミスとは異なる変動費・従量課金モデル、そして迅速な意思決定が求められるため、FinOpsのような新たなオペレーティングモデルが不可欠です。

しかしながら、何の指針もなくFInOpsを実現しようとすることは非常に難しいものです。そこで生まれたのがFinOpsフレームワークとなります。その中には、 **「だれが・なにを・なんのために・どのくらいの頻度で」** などの要素が含まれており、非常に実践的なものとなっています。今後の章では、まさにそのFinOpsフレームワークの具体的な構成や実践方法について詳しく解説していきます。



### クラウドコスト最適化とビジネス価値最大化の重要性：
クラウドの導入が進む中で、 **単なるコスト削減を目的とした運用から「コスト最適化」と「ビジネス価値最大化」へと企業の視点が大きくシフト** しています。従来のオンプレミス環境と異なり、クラウドは従量課金制であるため、リソースの過剰利用や未使用リソースの放置による無駄な支出が発生しやすく、コスト管理の難易度が高まっています。

<u>クラウドコスト最適化の本質は、単に支出を抑えることではありません。</u>コストの可視化や分析、適切なリソース配分を通じて、必要な機能や性能を維持しながら、余剰分を排除することで、IT投資の効率を最大化します。これにより、削減したコストを新たな成長領域やイノベーション投資に再配分することが可能となり、企業の競争力向上や収益増加につながるはずです。

実際、クラウド財務管理（Cloud Financial Management）を組織に組み込んだ企業の多くが、コスト削減だけでなく、利益率や収益の向上といったビジネスへの直接的な貢献を実感しています。調査によれば、クラウド財務管理の実践により、コスト維持に寄与した割合が41%であるのに対し、利益率や収益の向上に寄与した割合はそれぞれ **52%、48%** と高い水準を示しています。
参考：https://aws.amazon.com/jp/blogs/news/aws-cost-optimization-guidebook/

また、コスト最適化の取り組みを継続的に行うことで、クラウドネイティブなアーキテクチャや自動化の推進、俊敏なビジネス対応力の強化といった副次的な効果も得られます。これらは単なる経費削減にとどまらず、企業全体のデジタルトランスフォーメーション（DX）や持続的な成長を支える重要な要素となっています。

このように、クラウドコスト最適化は **「コストを抑える」から「ビジネス価値を最大化する」** ための戦略的な取り組みへと進化しています。


次章以降では、こうした最適化を実現するためのフレームワークや実践方法について詳しく解説していきます。
【Reactアプリ100本ノック】07 Weather

## はじめに
ゆかっしゅです。
2021年に事務職からデザイナー/コーダーにジョブチェンジをし、現在はフロントエンドエンジニアにスキルアップするべく、モダンフロントエンドを学習しています。

ReactやTypeScriptの基礎学習は終了したのに、なかなか0から自分だけでアプリを作れないので手を動かすべく「Reactアプリ100本ノック」 に挑戦してみようと思います。

https://qiita.com/Sicut_study/items/0fb7e80bc0a973000ae9

## Reactアプリ100本ノックルール
- 主要なライブラリやフレームワークはReactである必要がありますが、その他のツールやライブラリ（例: Redux, Next.js, Styled Componentsなど）を組み合わせて使用することは自由
- TypeScriptを利用する
- 要件をみたせばデザインなどは自由

## 07. Weather
![スクリーンショット 2025-05-02 113655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4068307/a5873e1a-6470-446c-8ad8-0766cc2a830a.png)

## 問題
自分の住んでいる都道府県の天気予報を表示する

## 目的
外部APIからデータを取得して、アプリに統合する方法を学び、async/awaitを使用した非同期リクエストの処理を実践します

## 達成条件
- 指定された地域の天気予報を表示できる
- 天気の表示間隔は自由 (1日ごとや10分ごとなど)
- 最高気温/最低気温が表示されている
- イラストで天気がひと目でわかる (晴れなら晴れマークを表示)

## 実際に解いてみた
### 利用技術
React(19.0.0)
TypeScript(5.0)
Next.js(15.3.1)
Tailwindcss(4.0)
jotai(2.12.3)
Vercel
天気予報 API（livedoor 天気互換）

https://weather.tsukumijima.net/

解答時間:1時間半

APIの仕様が日本語で分かりやすく書いてあったのでとても読みやすかったです。
特にエラーも出ず、順調に進んだので前からやってみたかったスマホの画面をそのままパソコン画面でも反映させるデザインをやってみました。
このデザインに名前はあるのだろうか。。

デザイン参考例
https://www.suntory.co.jp/rtd/horoyoi/

スマホ使用が多そうなWEBアプリであればこういうのもいいかもしれませんね。


### リンク
https://react-app-100.vercel.app/
Java binary atに表示されたJDKパスがAndroid Studio内包のJDKを参照している場合の対処

Flutterの
~~~
flutter doctor -v  
~~~
を実行して下記部分の
~~~
Java binary at: C:\Program Files\Android\Android Studio\jbr\bin\java
~~~
参照パスがAndroid Studio内包のJDKを参照している場合、
下記コマンドで参照先を変更できる。
~~~
flutter config --jdk-dir [JDKのパス]
~~~
実行後に下記コマンドを実行する。
~~~
flutter config --list
~~~
jdk-dir: に設定したパスが表示されれば設定できている。
~~~
  enable-web: (Not set)
  enable-linux-desktop: (Not set)
  enable-macos-desktop: (Not set)
  enable-windows-desktop: (Not set)
  enable-android: (Not set)
  enable-ios: (Not set)
  enable-fuchsia: (Not set) (Unavailable)
  enable-custom-devices: (Not set)
  cli-animations: (Not set)
  enable-native-assets: (Not set) (Unavailable)
  enable-flutter-preview: (Not set) (Unavailable)
  enable-swift-package-manager: (Not set) (Unavailable)
  jdk-dir: C:\jdk-17.0.2
~~~
新人潰しの「トンパ」問題とQiita質問界隈で感じたこと

## はじめに

こんにちは、ドルボックス（@doruboxshiki）です！

普段はWebシステム開発者 × ゲームクリエイターとして活動中で、業務ではBtoB向けの内製開発、個人ではTRPG制作やツール開発をしています。Qiitaでは創造性と課題解決に寄り添う技術発信を大切にしていて、最近は実績づくりも兼ねてQiitaの質問に20件近く回答してきました。

……そこで感じたんです。

「なんか、これ、健全じゃないかもしれない」

今回の記事は、Qiitaの質問欄に潜む“トンパ”の存在と、それに対する違和感についてのポエムです。

## トンパって誰？

https://x.com/HHGREAD/status/1052121973466136576

HUNTER×HUNTERでおなじみの、“新人潰し”を生きがいにしてるあの人。そう、**トンパ**。

Qiitaにも、あれとそっくりな人が存在するんです。

* 新人の質問に対して「これくらい自分で調べてから来い」
* 具体的な手がかりを一切提示せず「甘えるな」
* 回答っぽいけど、内容ゼロの精神論

新人が一歩踏み出すのを妨げるような“回答”。

彼らは「技術的に正しい」ことを盾に、質問者の意欲を折ることに快感を覚えているかのようです。

## それ、答えてないですよね？

どんなに正しいことを言っていても、相手に伝わらなければ意味がありません。
「それくらい分かるだろ」は、伝え手の甘えです。

もしそれが顧客からの問い合わせだったら、同じような対応をしますか？
「公式見てください」「情報が足りません」とだけ返して終わりますか？

顧客とのやり取りで求められるのは、相手の理解度を想像し、必要な補助線を引いてあげる力。質問してくる新人も、それとまったく同じです。

「前提知識がない相手にどう寄り添えるか」——その感覚は、新人にも顧客にも共通して求められる姿勢です。

質問者は「どうすれば良いか」を聞いているのに、返ってくるのは：

* 「その設計は間違ってる」→ どこがどう？は不明
* 「フレームワークの理解が甘い」→ ソースもリンクもなし
* 「エンジニアならまず公式を読め」→ そのリンクすら貼らない

それ、“指導”じゃなくて“断罪”です。


## 初心者が最初に見る景色がこれでいいの？

Qiitaは技術共有の場。質問欄も、「成長のきっかけ」として活用されるべき場所です。

でも、今の質問欄は時々、尋問の場になってしまっている。
「ちゃんと調べたのか」「コードを貼れ」「再現環境は？」と、正論で殴ることで、“正義の顔をしたトンパ”が新人をふるいにかけているように見えることがあります。

## トンパに共通する特徴

### 言い方キツすぎ問題

内容は合ってるのに、語尾が刺さる。「調べましょうね😊」とか言いながら、文章がトゲだらけ。口調ひとつで、同じ情報でも“暴力”になることがあります。

### クローズせかしすぎ問題

「自己解決したならクローズしてください」→ いや、初めての人は“どこで”“どうやって”クローズするか知らんのよ。説明の一言がないと、それもただの圧になります。

### なんのためのコメント問題

「これは違うと思います」だけで終わるコメント。結局何がどう違うのか、何を見てそう判断したのか、何も示されない。それって“正しさ”じゃなくて“否定”だけなんですよね。

* 回答よりもマウントを優先する
* 自分が教わった苦労をそのまま押しつける
* 教える側の責任を一切取らない（「調べろ」で終わらせる）
* 「その程度で質問するな」と言いつつ、質問は盛り上がってほしいと思っている

“答えないためのテクニック”だけは熟練している。


## じゃあどうすれば？

別に「初心者に全部教えろ」とは言いません。
でもせめて、こう言える文化にしたい：

* 「ここまでは調べた？」
* 「このURLが参考になるかも」
* 「この用語で調べると見つかりやすいよ」

たった1行、それだけで質問者の学び方も変わります。

## 私が見たいQiita質問界隈

* 初心者の質問がちゃんと拾われる場所
* 「こうやって学んでいけばいいんだ」が自然と伝わる回答欄
* マウントじゃなくて、リソースとヒントが並ぶ空気

Qiitaが“新人キラー試験会場”じゃなくて、“学びの温泉”であってほしい。


## 新人のあなたへ

質問してくれてありがとう！ってまず言いたいです。

最初は誰だって手探りで、「これ聞いてもいいのかな」って不安だと思います。
でも、聞くことを通してしか、分からないことってたくさんあるんです。

だから、質問するときは：

* 何に詰まってるか、少しでも書いてみる
* 試したこと、調べたことを一言添える
* 回答がついたら、お礼やリアクションを返す

それだけで、質問の空気も、回答の質も、グッと変わります。

## 最後に

エンジニアって、言語も環境もバージョンも日々変わる世界で、毎日が“初心者モード”。むしろ、人生ハードモードDLC付き。
だからこそ、「わからない」って言える空気、大事にしたい。だってみんな最初は Hello World から始めたじゃん。
潰すより育てよう。トンパになるくらいなら、せめてヒソカくらいの助言はしたい。批判する前にヒントを添える、それがエンジニアリングだと思うんです。

この記事に共感するところがあれば、コメントやリアクションをもらえると嬉しいです。

---

Qiita質問界隈、私たちの手で変えていけると信じています。
もしあなたが「これは変だ」と思ったら、今度はあなたが“答える側”になって、優しさを循環させてください。
背中を押せる人が、1人でも増えますように。
Power BI で列の値を五十音順に並べ替える方法

# はじめに
みなさん、ごきげんよう♪ 
新入社員の入社や人事異動もなんとなく落ち着いてきた今日この頃。そろそろ部署の同僚の氏名を五十音順に並べたくなったりしませんか？？ でも漢字・ひらがな・カタカナなどが入り交じった氏名での並べ替えは中々うまくいかなくて、ヽ(`Д´)ﾉﾌﾟﾝﾌﾟﾝとなってませんか？？
今回は Power BI で氏名を五十音順に並べ替えるテクニックをお伝えしたいと思います。

# 【結論】ふりがなの列を作れ
## 並び替えの方法
ひらがな or カタカナ のどちらかに字種を統一したふりがな列を作成し、昇順 or 降順で並び替えると正しい並び順になります。

1. なんらかの方法でふりがな列を作ります

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/63613d9b-fd5b-4328-b651-a4b72174a4e4.png)

2. Power BI のテーブルビューで列を右クリックし、 昇順 or 降順に並べ替えます

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/f0d1aea5-2a6b-4fd7-a704-04e957332a66.png)



## ふりがな作成の Tips

ふりがなを手打ちで入力するのが面倒で、ふりがなのマスタデータも持っていないという方は PHONETIC 関数を利用すると一瞬でふりがなを出力できる場合があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/feddc1b2-81bd-42ea-a17c-2dc00f80c61c.png)

ある程度正確にカタカナのフリガナを抽出してくれますので、こちらを値としてコピー&ペーストすれば時短になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/f999c4d8-1213-4a1c-9211-7399ed141c2d.png)

:::note warn
PHONETIC 関数を確実に利用できるのは漢字の氏名を手入力で入力した場合のみです。漢字の氏名をなんらかのシステムから出力した場合は正常に動作しないことがあります。
:::


# Power BI での文字の並び替えの仕組み
Power BI で文字を昇順 or 降順で並び替えると、文字コードの順序に従って並びます。文字コードというのは漢字・ひらがな・カタカナ・アルファベットそれぞれ別の文字として認識し、1個ずつ異なるコードが与えられます。その為、以下のような氏名を単純に氏名列で昇順に並べ替えると、北村より中村の方が先に来るというおかしな事象が発生します。

| 氏名           | フリガナ         | 文字コード                                                                |
|--------------|--------------|----------------------------------------------------------------------|
| あきの はなこ      | アキノ ハナコ      | 12354 12365 12398 32 12399 12394 12371                               |
| アルフレッド ジョーンズ | アルフレッド ジョーンズ | 12450 12523 12501 12524 12483 12489 32 12472 12519 12540 12531 12474 |
| 中村 良太        | ナカムラ リョウタ    | 20013 26449 32 33391 22826                                           |
| 北村 美香        | キタムラ ミカ      | 21271 26449 32 32654 39321                                           |
| 高野 美紗        | タカノ ミサ       | 39640 37326 32 32654 32023                                           |


また、同じ「あ」でもひらがなの「あ」とカタカナの「ア」では文字コードが異なるため、違う文字として扱われることになります。

- ひらがなの「あ」の文字コード：12354
- カタカナの「ア」の文字コード：12450

その為、字種をひらがな or ふりがなのどちらかに統一すると正確な順番で並べ替えることができます( *´艸｀)

# おわりに
いかがでしたか？
意外と知っているようで、知らない部分かなと思います。
Power BI での文字の並び替えの仕組みまで合わせて覚えておくと、豆知識的にドヤァできると思いますので、ぜひ覚えてくださいね。
それではごきげんよう✨
Apex Testing: Prepare for Unit Testing【これもクリアーできません。しない方がいいですね】


https://trailhead.salesforce.com/content/learn/modules/apex-testing-prepare-for-unit-testing


# Prepare to Build Your Apex Tests

:::note alert
As a good practice, add 'Test.startTest' and 'Test.stopTest' to the unit tests in the class ‘TaskUtilTests’.
:::

コードを書き替えただけではダメ。もう一回テストしておく必要があるみたい。

:::note alert
We can't find the code coverage for the TaskUtil class. Make sure to run the TaskUtilTests unit tests.
:::


```java
public with sharing class TaskUtil {
  public static String getTaskPriority(String leadState) {
    // Validate input
    if(String.isBlank(leadState) || leadState.length() > 2) {
      return null;
    }
    
    String taskPriority;
    if(leadState == 'CA') {
      taskPriority = 'High';
    } else {
      taskPriority = 'Normal';
    }
    return taskPriority;
  }
}   
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/31e469bd-67b0-4c3f-8b96-89932fdf3ec1.png)


# Get Data for Your Tests

:::note alert
The test setup in the the class named ‘OtherCSVTests’ seems to be missing the code to load the CSV data from the static resource. Make sure to use "Test.loadData" and "Account.SObjectType".
:::

何をやっても解消されませんね。

Class名を変えるとエラーになるので一応はクラスは認識してそう。

:::note alert
We couldn’t find the class named ‘OtherCSVTests’.
:::


# The test setup in the the class named ‘OtherCSVTests’ seems to be missing the code to load the CSV data from the static resource. Make sure to use "Test.loadData" and "Account.SObjectType".


+ [Challenge check does not pass in Apex Testing: Prepare for Unit Testing > Get Data for Your Tests. CSV load code is not being recognized.](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SVkgE0AT)

:::note
結局はケースを上げて修正してもらいまいした。
:::


+ [I have not been able to complete the Hands-on-Challange for the Apex Testing: Prepare for Unit Testing > Get data for your tests module](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erWIKSA2)
【z/OS】TSOとISPFとは何か簡単にまとめてみた

# はじめに
IBM Personal Communications (PCOMM) を使用してz/OSに接続した際に使用するTSOとISPFについて簡単にまとめました。

 - [TSOとは](#tsoとは)
 - [ISPFとは](#ispfとは)
 - [TSOコマンド](#tsoコマンド)
 - [ISPFコマンド](#ispfコマンド)
 - [ISPFの起動方法](#ispfの起動方法)
 - [TSO/Eとは](#tsoeとは)
 - [参考](#参考)

# TSOとは
TSO (Time Sharing Option) とは、1971年にIBMによって導入された、対話型のコマンドラインインターフェースです。メインフレーム環境で効率的に作業を行えるようにするために導入されました。
TSOコマンドといわれるコマンドを入力して、システムの操作やデータ管理をリアルタイムで行うことができます。
またジョブの送信や監視など、ジョブの管理も可能です。

# ISPFとは
ISPF (Interactive System Productivity Facility) は、1975年に導入された、対話型のユーザーインターフェースです。
TSO上で動かすソフトウェアとして開発されました。プログラムの編集やデータセット、ジョブの管理などを視覚的に簡単に行うことができます。
TSO上で動くので、使用するにはTSOのログインが先に必要です。

# TSOコマンド
TSOコマンドとは、TSOのコマンドライン上で入力できるコマンドのことです。標準で用意されているTSOコマンドは約40種類ありますが、それらのコマンドの多くはプログラムやデータセットの操作に関するもので、現在はISPF上で行われることが主流になっています。
なのでTSOコマンドを入力してシステムを操作することは最近は少なくなっています。
TSOコマンドは下記にまとめられています。
- [TSO/E コマンドの要約](https://www.ibm.com/docs/ja/zos/2.5.0?topic=subcommands-summary-tsoe-commands)

# ISPFコマンド
ISPFコマンドとは、ISPF上で入力できるコマンドのことです。プログラムの実行やデータセットの操作などを行う際に使用されます。
- [ISPF 基本コマンド](https://www.ibm.com/docs/ja/zos/3.1.0?topic=commands-ispf-primary)

# ISPFの起動方法
TSOにログインすると、通常はTSOコマンドが入力できるコマンドラインの画面に遷移します。
※画面に「READY」と表示され、TSOコマンドの入力待ちの状態になります。 (READYプロンプトと呼ばれます)
そこで「ISPF」と入力すると、ISPFが起動されます。
ただ最近はTSOにログインするとTSOのコマンドライン画面を表示せずすぐにISPFを起動したり、ISPFを終了したらTSOもログアウトするようなカスタマイズを行った状態で運用されている企業もあります。
その場合は、TSOのコマンドライン画面をスキップしてISPFの画面が表示される挙動になります。

:::note
TSOにログインすると直接ISPFが起動するようにカスタマイズされていても、TSOコマンドは入力できます。
ISPFのメニューから「6. コマンド」を選択すると、TSOコマンドが入力できる画面に遷移します。
:::

# TSO/Eとは
TSO/E (Time Sharing Option/Extensions) はTSOがリリースされた後、TSOの機能拡張版としてリリースされたものです。

# 参考
- [11.TSOとISPF](https://arteceed.squares.net/?p=169)
- [TSOにログオンする](https://arteceed.squares.net/?p=1464)
[初心者]Express入門1 フォーム入力

前回[[初心者]Expressでバックエンド環境を作る](https://qiita.com/sugichan-0306/items/ba86d56f71e4e70007f3)

# Express(エクスプレス)とは
**Express(エクスプレス)** は、WEBサイトやアプリの「バックエンド（裏側）」を作るためのNode.jsフレームワークです。
わかりやすくレストランでイメージすると…

- **お客さん（ユーザー）** が注文します。
- その注文内容を **キッチン（サーバー）** に伝えて、**料理（データ）** を運ぶのがウェイター。
- この **「ウェイター」** の仕事をしてくれるのがExpress.js（バックエンド）

## Expressでできること
- フォームに入力された情報を受け取って保存する。
- データベースから商品情報を取り出して返す。
- Web APIを作る
- ログイン認証やエラー処理の対処

# 実際のコードを見てみよう
```javascript:js
const express = require('express');
const app = express();

app.get('/hello', (req, res) => {
  res.send('Hello,World');
});

app.listen(3000, () => {
  console.log('サーバーが3000番で動いてます');
});
```

これは、`http://localhost:3000/hello`にアクセスすると「Hello,World」と表示されるコードです。
- `app.get()`は「GETリクエスト」が来た時にどう処理するか定義するメソッドです。
- `/hello`はWebアドレス（URL）のパス部分です。
- `res.send()`でクライアントに返すメッセージを指定します。

# フォームを受け取ってみよう
実際にHTMLのフォームから送られてきたデータを受け取ってみます。
まずは、コードを見てみましょう。

```js:index.js
const express = require('express');
const app = express();

// フォームのデータを受け取るための設定（ミドルウェア）
app.use(express.urlencoded({ extended: true }));

// POSTリクエストを受け取るルート
app.post('/submit', (req, res) => {
  const name = req.body.name; // フォームのnameフィールドの値
  res.send(`こんにちは、${name}さん！`);
});

app.listen(3000, () => {
  console.log('サーバーが3000番で動いてます');
});
```

`express.urlencoded()`という関数（ミドルウェア）によってHTMLのフォームから送られてきたデータをExpressが読み取れるようになります。
以下にHTMLのフォームのコードを表示します。
```html:html
<form action="/submit" method="POST">
  <input type="text" name="name" placeholder="あなたの名前">
  <button type="submit">送信</button>
</form>
```
このフォームから送信されたデータは、`name=〇〇`という形でサーバーに届きます。
`express.urlencoded()`というミドルウェアによってこのデータは`req.body.name`というExpressが読み取れる形で取得できるようになります。
`node index.js`でサーバーを起動した後にHTMLファイルをブラウザで開き、フォームに名前を入力し送信すると、例えば「タロウ」と入力した場合、ブラウザには
```bash
こんにちは、タロウさん！
```
というメッセージが表示されます。
これはExpressの`req.body.name`にフォームの入力内容が格納され、それを`res.send()`でそのままHTMLに返しています。
<h2>流れの確認</h2>

もう少し詳しく、何が起きているのか見てみましょう。
1. ブラウザでHTMLファイル（form.html）を開く
2. 名前を入力して「送信」ボタンを押す
3. ブラウザが`/submit`にPOSTリクエストを送信
4. Expressサーバーが名前データを受け取り、`req.body.name`に格納
5. `res.send()`で挨拶メッセージを返す→ブラウザに表示される

# まとめ
このようにExpressはとても簡単なコードで、フォームの入力を受け取って処理を行い結果を返すことができます。
この仕組みがわかれば、「データベースと連携する」「複数の入力を処理する」といった応用も可能になります。