OmniAICreator/Qiita-1.07M huggingface dataset:
SwiftUIのSheet（シート）の使い方を簡単にまとめてみました

SwiftUIで画面の上に新しい画面をふわっと表示したいときに使うのが sheet（シート）です！
iOSアプリでよく見る「下から出てくる画面」は、このシート機能を使って実現できます。

この記事では、SwiftUI初心者向けに sheet の使い方をわかりやすく解説していきたいと思います！


そもそもSheetってなに
？
---
sheet は、モーダル表示のための機能です。
例えば：

- プロフィール編集画面
- 詳細情報表示画面
- 設定画面　など

今の画面の上に新しい画面を一時的に出したいときに使います。

```swift
struct ContentView: View {
    @State private var showSheet = false

    var body: some View {
        Button("シートを表示") {
            showSheet = true
        }
        .sheet(isPresented: $showSheet) {
            SheetView()
        }
    }
}

struct SheetView: View {
    var body: some View {
        VStack {
            Text("これはシートです")
                .font(.title)
            Text("下にスワイプで閉じられます")
        }
        .padding()
    }
}

```
![Screenshot 2025-06-08 at 19.32.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/01e2c634-b773-4a0f-acd0-e949bb2fef54.png)


ポイント説明
| 項目                        | 説明                   |
| ------------------------- | -------------------- |
| `@State showSheet`        | シートを表示するかどうかを管理するフラグ |
| `isPresented: $showSheet` | `true`のときにシートが表示される  |
| `SheetView()`             | 表示される内容（サブビュー）       |


シートを閉じる方法（自動 or 手動）
---
自動で閉じる（スワイプ）
iOSでは、ユーザーが下にスワイプすると自動でシートが閉じます。

手動で閉じる
シート内で @Environment(\.dismiss) を使えば、ボタンで閉じることもできます。

```swift
struct SheetView: View {
    @Environment(\.dismiss) var dismiss

    var body: some View {
        VStack {
            Text("これはシートです")
            Button("閉じる") {
                dismiss()
            }
        }
        .padding()
    }
}
```
![Screenshot 2025-06-08 at 19.36.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3977742/cbe1bb41-a6f0-4d56-b549-fdf61d75f056.png)


まとめ
---
| やりたいこと          | 使い方例                                 |
| --------------- | ------------------------------------ |
| 1画面に1つのシートを出す   | `.sheet(isPresented:)` を使う           |
| シートをボタンで閉じたい    | `@Environment(\.dismiss)` を使う        |



おわりに
---
SwiftUIの sheet は、少ないコードでモーダル表示ができる便利な機能です。
iOSアプリではよく使われるので、使い方をマスターしておくと、より本格的なアプリが作れると思います！

初心者の方は、ぜひ参考にしてみてください！🤌
「AIが自分で学ぶってどういうこと？」その疑問、Pythonで迷路AIを作りながら解決しませんか？

はじめまして！
本講座で講師を務めるSAKAIです。
普段は開発者として働きながら、UdemyでプログラミングやAIに関する講座を公開しています。

突然ですが、皆さんは「強化学習」と聞いて、どのようなイメージをお持ちでしょうか？

「なんだかすごく難しそう…」
「記事を読んだけど、数式や専門用語ばかりで挫折してしまった…」
「AIに興味はあるけれど、何から手をつければいいか分からない…」

もし、あなたが少しでもこのように感じたことがあるなら、ぜひこのまま少しだけ読み進めてみてください。きっと、お役に立てるお話ができると思います。

## なぜこの講座を作ったのか

何を隠そう、私自身も強化学習を学び始めたとき、同じような壁にぶつかった一人です。

分厚い専門書を開けば、見たこともない数式が並んでいる。Web上の記事を読んでも、理論の説明に終始していて、いざコードを書いてみようとすると手が止まってしまう…。

「理論と実践の間に、大きな溝があるな」と、ずっと感じていました。

でも、強化学習の根本にある「エージェントが試行錯誤を繰り返しながら、少しずつ賢くなっていく」というアイデアは、本当に面白くて魅力的です。この感動を、もっと多くの人、特にこれからAIを学ぼうとする初学者の方に、純粋に「面白い！」と感じてほしい。

そんな想いから、「難しい数式は一旦横に置いて、まずは自分の手でAIを動かす楽しさを体感できる」そんな講座を作ることを決意しました。理論的な背景ももちろん大切ですが、まずは動くものを作り、その過程で「これってどういう仕組みなんだろう？」と興味を持ってもらうこと。それが、挫折しない一番の近道だと私は考えています。

この講座は、まさに私自身が初学者だった頃に「こんな講座があったら良かったのに」と心から思えるものを形にした、私の情熱が詰まったものになっています。

## この講座で、あなたは「できるようになる」こと

この講座では、単に知識を学ぶだけではありません。実際に手を動かしながら、以下のスキルを「使える」レベルまで引き上げます。

* **強化学習の仕組みを、自分の言葉で説明できるようになります**
    「エージェント」「環境」「報酬」といった基本概念が、単なる言葉ではなく、迷路AIの具体的な動きと結びつけて理解できます。AIが学習する根本的な仕組みがわかると、ニュースで見るAIの話題も、より深く楽しめるようになるはずです。

* **PythonでQ学習を実装し、AIをゼロから育てられるようになります**
    理論で学んだQ学習アルゴリズムを使って、まっさらな状態から迷路を解くAIを実装します。最初はランダムに動くだけだったAIが、試行錯誤を繰り返してゴールにたどり着けるようになった時の感動は、本当に格別です！この「自分でAIを育てた」という経験が、あなたに大きな自信を与えてくれます。

* **DQN（深層強化学習）への第一歩を踏み出せます**
    Q学習の発展形であるDQNについても、その仕組みを学び、PyTorchを使って実装します。これにより、より複雑な問題にも対応できる深層強化学習の世界への扉を開くことができます。

## この講座を、こんなあなたに届けたい

私は、この講座を以下のような想いを持つ方に、ぜひ受けていただきたいと考えています。

* **強化学習の理論書や難しい記事で、一度挫折してしまった方**
* **Pythonの基礎文法は学んだものの、次に何を作ればいいか迷っている方**
* **「AIが自分で考える」というコンセプトに、純粋なワクワクを感じる方**
* **小難しい話は抜きにして、とにかく手を動かしながら楽しく学びたい方**
* **将来、ゲームAIなど自分の好きな分野に強化学習を応用してみたいという夢をお持ちの方**

一つでも当てはまるものがあれば、きっとこの講座を楽しんでいただけるはずです。

## この講座に込めた「３つのこだわり」

この講座を作るにあたって、特にこだわった点が3つあります。

### 1. 「直感的な理解」を最優先した解説
この講座では、難しい数式を極力使わず、図や身近な例え話を多用しました。まずは「強化学習って面白い！」と感じてもらうこと。それが学習を継続する一番の力になると信じています。

### 2. 「動く！」を実感できる実践カリキュラム
知識のインプットだけでなく、Google Colaboratoryを使ってすぐにコードを書き、動かし、結果を確認できる流れを重視しました。「自分の書いたコードでAIが動く」という小さな成功体験を積み重ねながら、楽しくスキルが定着するように工夫しています。

### 3. 「ゼロから作り上げる」達成感
ライブラリをただ使うだけでなく、迷路の「環境」自体を自分で作るところから始めます。少し遠回りに見えるかもしれませんが、これにより強化学習の各要素がどう連携しているのかを深く理解でき、最後には「自分がゼロから迷路AIを作り上げた！」という大きな達成感を得られるはずです。

## 講座を終えた頃、あなたが見ている景色

この講座を終える頃、あなたは強化学習の基本的な仕組みを自分の言葉で説明できるようになっています。Q学習やDQNといった代表的なアルゴリズムを理解し、簡単な問題であれば自分でAIを実装できるだけの力が身についているでしょう。

そして何より、「強化学習は難しいもの」というイメージが、「自分で試行錯誤してAIを育てていく、面白いクリエイティブな分野」へと変わっているはずです。このマインドセットの変化こそが、今後あなたがAI技術を学び続けていく上で、最も大きな財産になると私は確信しています。

## 講座の紹介

AIが試行錯誤しながら賢くなる、その面白さを、ぜひ一緒に体験してみませんか？
あなたの挑戦を、心からお待ちしています。

▼講座のページはこちら
**[Pythonで学ぶ実践強化学習：Q学習で迷路AIを作ろう](https://www.udemy.com/course/learn-rl/?referralCode=F01F3B8E43938A937443)**

---

この他にも複数の講座を公開していますので、もしよろしければ以下のまとめサイトもぜひご覧ください。
[SAKAIのUdemy講座まとめサイト](https://udemy-c1f90.web.app)

## さいごに

AIや強化学習の世界は、一見すると専門的で難しく感じるかもしれません。しかし、その一歩を踏み出してしまえば、そこにはあなたの知的好奇心をくすぐる、本当に面白い世界が広がっています。

この講座が、あなたのその「最初の一歩」を力強くサポートできれば、講師としてこれほど嬉しいことはありません。

それでは、講座でお会いできる日を、心から楽しみにしています！
ATemplateプラットフォームの紹介文を日本語に翻訳したものです

以下は、ATemplateプラットフォームの紹介文を日本語に翻訳したものです：

テンプレート探しをストップ！コストゼロで創造性を解き放とう  
ATemplateで、あらゆるWebプロジェクトを実現する高品質テンプレートを無料入手！

ATemplateとは？

無料Webテンプレートの探索・共有専用プラットフォームです。私たちの使命はシンプル：デザイナー、開発者、起業家、ブロガー、ウェブサイト制作に関わるすべての方に、完全無料のプレミアムテンプレートを提供すること。どんなビジョンにも対応する基盤を提供します。

ATemplateを選ぶ理由

✅ 完全無料  
約束の核心！すべてのテンプレートが無料ダウンロード・無料利用可能。購読制・隠れた費用・有料機能解除は一切ありません。

✅ 圧倒的多様性  
あらゆるウェブサイトタイプに対応：
商品ページ（最新製品の展示）

企業サイト（プロフェッショナルなオンライン拠点）

高変換ランディングページ（効果的なリード獲得）

ブログ（個人/専門家向け）

ポートフォリオ・履歴サイト（実績アピール）

ECストア（オンライン販売の基盤）

管理ダッシュボード（強力な操作パネル）

✅ 厳選された品質  
単なる保管庫ではなく、洗練された現代的なデザインを厳選。クリーンなコード・全デバイス対応のレスポンシブ設計・優れたUXを優先します。

✅ コミュニティ主導  
他ユーザーが共有したテンプレートを探索し、自身の作品も投稿可能。無料リソースの継続的成長を促進します。

✅ 時間効率化  
面倒な基礎作業をスキップ。テンプレートをカスタマイズし、コンテンツと成長に集中することで迅速なローンチを実現。

対象ユーザー
スタートアップ・中小企業（低コストでプロサイト構築）

フリーランサー・デザイナー（ポートフォリオ/ブログ作成）

ブロガー・コンテンツクリエイター（機能的なサイト基盤）

EC事業参入者（最小投資でのストア開設）

開発者・学生（コード学習・プロトタイピング）

「すぐにサイトが必要なすべての方」

使い方

https://atemplate.com/ 


カテゴリ別/検索機能でテンプレートを閲覧  

プレビュー後、詳細を確認して無料ダウンロード  

コンテンツとブランドでカスタマイズ  

今すぐ始めよう！

テンプレートのコストや選択肢の不足でアイデアやビジネスを諦める必要はありません。ATemplateでプロ級の無料テンプレートを即時アクセス：


https://atemplate.com/

探索 → ダウンロード → 構築、すべて無料で！

可能性を解き放ち、卓越したウェブサイトを創造  
ATemplateでスタート：無料・多様・高性能

--- 

翻訳の特徴
キャッチコピーの自然変換  

   "Stop the template hunt" → 「テンプレート探しをストップ」でインパクトを維持
技術用語の正確性  

   "responsive layouts" → 「全デバイス対応のレスポンシブ設計」と具体化
日本語リズムの最適化  

   英文の箇条書きを、日本語で読みやすい「〜こと」で統一（例：「隠れた費用がないこと」）
行動喚起の強化  

   "Get Started Today!" → 「今すぐ始めよう！」＋太字リンクで視覚的誘導
文化適合調整  

   「コミュニティ主導」「高変換」など日本IT業界で認知度の高い表現を採用
実際の運用時には、

https://atemplate.com/ 

を正しいURLに置き換えてご利用ください。
AI画像認識の「なぜ？」がわかる！ゼロからPythonで学ぶCNN講座を作りました

はじめまして！
Udemy講師のSAKAIです。

この記事を読んでくださっているあなたは、
「AIやディープラーニングって、なんだか難しそう…」
「CNN（畳み込みニューラルネットワーク）に興味はあるけど、何から手をつけていいか分からない…」
「画像認識をやってみたいけど、プログラミング経験がなくて不安…」
そんな風に感じて、学習の一歩を踏み出せずにいませんか？

もし少しでも心当たりがあれば、ぜひこのまま読み進めていただけると嬉しいです。
きっと、あなたのための講座だと感じていただけるはずです。

## なぜこの講座を作ったのか（私の開発ストーリー）

何を隠そう、私自身もAIの学習で何度も壁にぶつかった経験があります。

「画像認識って面白そう！」という純粋な好奇心から学習を始めたものの、専門書を開けば難しい数式や専門用語のオンパレード。「畳み込み層」「プーリング層」「誤差逆伝播法」…言葉は知っていても、それが一体何のためにあって、どう動いているのかを腹の底から理解するまでには、本当に長い時間がかかりました。

「もっと直感的に、もっと実践的に学べる教材があればいいのに…」
「理論とコードがしっかり結びついて、『なるほど！』と納得できる瞬間がもっと多ければ、学習はもっと楽しくなるはずだ」

この講座は、過去の私が「こんな講座があったら良かったのに」と心から願ったものを形にしたものです。

専門知識がなくても、Pythonに触ったことがなくても、**「AIって面白い！自分でも作れるんだ！」**と感じてほしい。その一心で、難しい理論を暗記するのではなく、**実際に自分の手を動かしながら、CNNが画像をどうやって「見て」、どうやって「理解」していくのかを体感できる**コースを目指して作成しました。

## この講座で、あなたは「できるようになる」

この講座では、単に知識を詰め込むのではなく、受講後にあなたが「何ができるようになるか」を一番に考えてカリキュラムを組みました。

* **Pythonの基本とGoogle Colabが使えるようになります！**
    * 面倒な環境構築は一切不要です。講座を始めたその日から、クラウド上でPythonを動かしながら学習をスタートできます。プログラミングが初めてでも全く問題ありません。
* **NumPyやMatplotlibでデータを自在に扱えるようになります！**
    * AIが扱う「データ」の正体を知り、学習結果をグラフで可視化できるようになります。これにより、モデルの改善点が自分で考えられるようになり、AI開発がもっと面白くなります。
* **ディープラーニングの「仕組み」を自分の言葉で説明できるようになります！**
    * ブラックボックスになりがちなAIの内部構造を、一つひとつ丁寧に解き明かしていきます。「過学習」といったAI開発特有の課題や対策も学び、精度の高いモデルを作るための基礎体力が身につきます。
* **TensorFlow/Kerasを使い、自分の手で「画像認識AI」を構築できるようになります！**
    * 本講座のゴールです。あなた自身の手でコードを書き、コンピュータに画像を学習させ、未知の画像を分類させる。この一連の流れを経験することは、AI開発者としての大きな、そして何より楽しい一歩となるはずです。

## この講座を、こんなあなたに届けたい

私は、この講座を以下のような想いを持つ方にこそ届けたいと考えています。

* **AIやディープラーニングに興味はあるけど、何から学習すれば良いか分からない方**
* **プログラミング自体が初めてで、AI学習に高いハードルを感じている方**
* **過去に機械学習の学習で挫折してしまった経験がある方**
* **理論だけでなく、とにかく手を動かして「動くAI」を作ってみたい方**
* **自分の手で「画像認識」という未来の技術を動かしてみたい、すべての知的好奇心あふれるあなたへ**

## 私がこの講座に込めた「2つのこだわり」

この講座を作る上で、私が特にこだわったポイントが2つあります。

1.  **【完全初心者ファースト】のカリキュラム**
    本講座は、AIやPythonが全くの初めて、という方を対象にしています。そのため、「AI講座なのに、そこから？」と思われるくらい、Pythonの基本や開発ツール（Google Colab）の使い方から丁寧に解説しています。ここでつまずかないことが、最後まで楽しく学習を続けるための何よりの秘訣だと、私は信じています。

2.  **【理論と実践の黄金バランス】**
    ただコードを書き写すだけでは、応用力は身につきません。かといって、理論ばかりでは眠くなってしまいます。そこで本講座では、「なぜこの処理が必要なのか？」という理論を直感的に解説した直後に、すぐさま実装に入る構成に徹底的にこだわりました。理論と実践を行き来することで、「なるほど、こういうことか！」という納得感を一つひとつ積み重ねながら、着実にステップアップできます。

## 講座を受け終えたあなたの未来

この講座を完走する頃には、あなたはもう「AIは難しい…」と尻込みする初心者ではありません。

CNNの仕組みを自分の言葉で説明できるようになり、TensorFlow/Kerasを使ってオリジナルの画像認識モデルを構築する実践的なスキルが身についています。

それは、例えば身の回りの花や動物を分類するAIを作ってみたり、より高度なAI技術（自動運転で使われる物体検出など）へ学習を進めるための、**何よりも強固な土台**となります。

そして何より、**「自分にもAIが作れた！」という成功体験**が、あなたの今後のキャリアや学習意欲を、力強く後押ししてくれるはずです。

## 講座のリンクはこちら

ほんの少しでも「面白そう！」と感じていただけたら、ぜひ以下のリンクからコースの詳しい内容を覗いてみてください。プレビュー動画もいくつか公開しています。

**▼【CNN入門：ゼロからPythonで学ぶ畳み込みニューラルネットワーク】**
[https://www.udemy.com/course/cnn-yuvj/?referralCode=905D0A50DF4D1ECB903C](https://www.udemy.com/course/cnn-yuvj/?referralCode=905D0A50DF4D1ECB903C)


### まとめサイトのご紹介
この他にも、Web開発やPythonに関する講座を複数公開しています。ご興味があれば、ぜひ以下のまとめサイトもご覧ください。

[https://udemy-c1f90.web.app](https://udemy-c1f90.web.app)

## さいごに

AI技術は、これからの社会であらゆる分野の常識を変えていく、非常にパワフルなツールです。その核心技術の一つであるCNNを学ぶことは、間違いなくあなたの未来の可能性を広げる大きな一歩となります。

この講座が、あなたの「知りたい」「作りたい」という熱い気持ちを形にする、最高の一助となれば、講師としてこれほど嬉しいことはありません。

さあ、私と一緒にAI開発の面白い世界へ飛び込みましょう！
あなたと講座でお会いできることを、心から楽しみにしています。

SAKAI
「ラズパイって面白そう！」で止まっているあなたへ知識ゼロから”次の一歩”へ踏み出すための講座を作りました

はじめまして！
Udemyで講師をしているSAKAIと申します。

この記事を読んでくださっているあなたは、きっと「Raspberry Pi（ラズパイ）」という小さなコンピューターに、大きな可能性を感じているのではないでしょうか？

「ラズパイでIoTをやってみたい！」
「自分だけのサーバーを立ててみたい！」
「プログラミングや電子工作の学習に活用したい！」

そんな風にワクワクする一方で、こんな悩みも抱えていませんか？

* **「ラズパイって種類が多すぎて、どれを選べばいいのか分からない…」**
* **「面白そうだけど、何から手をつければいいのか見当もつかない…」**
* **「専門用語が多くて、調べているうちに疲れてしまった…」**

もし一つでも当てはまったなら、ぜひこのまま読み進めていただきたいです。
何を隠そう、それらはすべて**過去の私が実際に抱えていた悩み**だからです。

## なぜこの講座を作ったのか（私の開発ストーリー）

私が初めてラズパイに興味を持った時、その無限の可能性に胸を躍らせました。しかし同時に、情報の海におぼれそうになりました。

Webサイトや書籍を調べても、いきなり専門的なコマンド入力の話が始まったり、特定のプロジェクトを作ることが前提になっていたり…。私が本当に知りたかった**「そもそもラズパイって何ができて、自分の場合は何から始めるのがベストなの？」**という、一番根っこの部分を、体系立てて優しく教えてくれる場所がなかなか見つからなかったのです。

「きっと同じように、”やってみたい”という気持ちは人一倍あるのに、最初の一歩が分からずに足踏みしてしまっている人がいるはずだ」

そう強く感じたのが、この講座を作ろうと決心したきっかけです。

難しいプログラミングや電子回路の話は、一旦置いておきましょう。
この講座は、皆さんがラズパイという素晴らしい世界に飛び込む前に、安心してスタートラインに立てるよう、最高の準備運動」をしてもらうことを目的としています。
知識ゼロからでも、ラズパイの全体像をしっかりと掴み、「自分ならこれができそうだ！」と自信を持ってもらうこと。その想いを込めて、この「最初の一歩」講座を開発しました。

## この講座で、あなたはこう変わります

この講座は、単に知識を詰め込むだけのものではありません。受講を通して、あなたの「分からない」が「分かる！」に変わる体験を提供します。

* **漠然としたイメージが、具体的な計画に変わります**
    「ラズパイって何？」という状態から、「自分のやりたいことなら、このモデルとこの周辺機器があれば実現できそうだ」と、自信を持って語れるようになります。

* **無駄な買い物をせず、最適な一台を選べるようになります**
    「とりあえず一番高いモデルを…」といった失敗をすることなく、あなたの目的と予算にピッタリ合ったラズパイを選び抜く知識が身につきます。

* **次のステップへ、迷わず進めるようになります**
    ラズパイの世界の全体像が見えるので、「次は〇〇を学んでみよう」「こんなプロジェクトに挑戦してみよう」と、あなたの未来の学習計画が自然と見えてきます。

## この講座を、こんなあなたに届けたい

私は、この講座を「かつての自分」のような方にこそ届けたいと思っています。

* 「ラズパイ」という言葉にワクワクするのに、次の一歩が踏み出せないでいるあなたへ
* たくさんの情報に混乱し、学習が止まってしまっている方へ
* 電子工作やプログラミングの学習を始める前に、まずは基礎知識をしっかり固めたいと考えている堅実なあなたへ
* 「これを機に、何か新しいことを始めてみたい！」と考えているすべての方へ

プログラミングや電子工作の経験は一切問いません。大切なのは「知りたい」「やってみたい」という、あなたのその気持ちだけです。

## 私がこの講座に込めた「2つのこだわり」

皆さんを絶対に挫折させないために、この講座には私のこだわりを詰め込みました。

1.  **【こだわり①】徹底した「知識ゼロ」目線での解説**
    専門用語は極力使わず、もし使う場合でも「これはこういう意味で、こういう場面で使いますよ」というように、必ずかみ砕いて説明することを徹底しました。図や身近な例え話をたくさん盛り込んでいるので、まるで隣で私が直接話しているかのように、直感的に理解できるはずです。

2.  **【こだわり②】「学んで終わり」にさせない、次への道しるべ**
    知識を得ることはスタートに過ぎません。この講座のゴールは、皆さんが「次の行動を起こせる」状態になることです。そのため、講座の最後では、初心者の方が次に取り組みやすいプロジェクトのアイデアを具体的に紹介しています。この講座が、あなたの素晴らしいラズパイライフの「最高の出発点」となることをお約束します。

## 受講後の未来：あなたはもう「初心者」ではない

この講座を終えた時、あなたはもう「ラズパイって何？」と尋ねる側ではありません。

友人に「ラズパイに興味があるんだけど、どれがいいかな？」と聞かれたら、自信を持ってアドバイスできるようになっているでしょう。
そして何より、ワクワクしながらPCショップの棚を眺め、自分の手でプロジェクトを始める準備が整っているはずです。自宅の自動化、Webカメラ、オリジナルガジェット開発…あなたの創造力が、ここから形になっていきます。

## 【お得なお知らせ】この機会に、最初の一歩を踏み出しませんか？

Udemyでは頻繁にセールが開催されており、驚くほどお得な価格で受講できるチャンスがあります！

下のリンクから講座の詳細をチェックして、ぜひお得なタイミングでご受講ください。

**▼講座のURLはこちら**
[【最初の一歩】Raspberry Pi入門：初心者でもわかる基礎と活用ガイド](https://www.udemy.com/course/raspberry-pi-l/?referralCode=93FFA760A094717D133A)

## 講座まとめサイトのご紹介

この他にも、PythonやWeb開発など、初学者向けの講座を複数公開しています。もしご興味があれば、こちらのまとめサイトもぜひ覗いてみてください。きっとあなたの「学びたい」に応える講座が見つかるはずです。

[SAKAIのUdemy講座 まとめサイト](https://udemy-c1f90.web.app)

## さいごに

「やってみたい」というその気持ちは、何物にも代えがたい、素晴らしい才能だと私は考えています。
その大切な一歩目を、私が全力でサポートします。

もしあなたが今、ラズパイの世界の入り口で立ち止まっているのなら、ぜひこの講座の扉をノックしてみてください。

講座の中でお会いできることを、心から楽しみにしています！

**講師 SAKAI**
Go json.Marshalとencoder.Encodeの違い

### json.Marshal
- 単純にgoの構造体をバイト列に変換する
    - レスポンスを返却する場合は、レスポンスに別途書き込む必要がある。
    ```
    marshalHandler(w http.ResponseWriter, r *http.Request){
        response := getResponseStruct()
        data, err := json.Marshal(response)
        if err!=nil{
         panic("error")
        }
    
        fmt.Fprint(w, string(data))
    }
    ```
### encoder.Encode
- レスポンスに直接バイト列を書き込める
    - **メモリ使用量が減る**
  ```
  encodeHandler(w http.ResponseWriter, r *http.Request){
     response := getResponseStruct()
     encoder := json.NewEncoder(w)
     encoder.Encode(&response)
  }
  ```
SwiftUIの @ObservableObject と @StateObject の使い分けをわかりやすく解説

SwiftUIでデータを画面に反映させるためによく出てくる
**@ObservableObject** と **@StateObject**

名前が似ていて混乱しがちですが、それぞれ役割が違います。今回は違いを簡単に説明してみました！

@ObservableObject と @StateObjectの違いは
--

| 属性名                 | 役割                     |
| ------------------- | ---------------------- |
| `@StateObject`      | **最初にデータを作るとき**に使う     |
| `@ObservableObject` | **すでにあるデータを受け取るとき**に使う |


そもそも @ObservableObject とは？
---
@ObservableObject は、外部のデータ（クラス）をSwiftUIのViewに反映させるためのプロトコルです

```swift
class CounterModel: ObservableObject {
    @Published var count = 0
}
```
↑このようにObservableObjectを使うことで、countの変更をビューが見れることができます！

@StateObject はどう使うのか？
--
@StateObject は、SwiftUIのViewの中で ObservableObject を初めて作るときに使います。

```swift
struct CounterView: View {
    @StateObject var counter = CounterModel()

    var body: some View {
        VStack {
            Text("Count: \(counter.count)")
            Button("増やす") {
                counter.count += 1
            }
        }
    }
}
```
ここでは、ビューの中でカウンター用のデータ（CounterModel）を作って、それを使っています。
この最初にインスタンスを作るケースでは、@StateObject を使います。

@ObservableObject はどう使うのか？
---
@ObservableObject は、すでにどこかで作られたインスタンスを受け取って使うときに使います。

```swift
struct ChildView: View {
    @ObservedObject var counter: CounterModel

    var body: some View {
        Button("子ビューでも増やす") {
            counter.count += 1
        }
    }
}
```
例えば親ビューで @StateObject として作った counter を、
子ビューで受け取りたいときに @ObservedObject を使います。


もっとシンプルでわかりやすく例えると
---
データを「メモ帳」と例えてみましょう。

@StateObject → 自分の机に新しいメモ帳を作る

@ObservedObject → 誰かが作ったメモ帳をもらって使う

- 自分で新しいメモ帳を作るときは @StateObject
- 誰かのメモ帳を借りて使うときは @ObservedObject

まとめ
--
| シーン              | 属性                |
| ---------------- | ----------------- |
| Viewの中で新しくデータを作る | `@StateObject`    |
| 外から受け取ったデータを使う   | `@ObservedObject` |


@ObservableObject と @StateObjectはアプリ開発で頻繁に使うものなのでぜひ、この記事を参考にしてください！✌️
Hyper-VでISOファイルを正しく指定しているのに起動しない

VMの設定のSecureBootをオフにする。

メジャーではないOSの場合、ShimブートローダがMSの署名付きではないから起動に失敗する。

この手の問題でSecureBootをオフにすると解決というのはよくありますが、あまりよろしく無い風潮のようなきがします。セキュアブートをオフにするリスクを測れるだけど知識はありませんが。
PHPの「==」比較、PHP7と8でどう変わる？初心者向けにまとめてみた

## はじめに
PHPのif文などで使う「==（緩やかな比較）」は、異なる型同士でも比較できる便利な演算子です。
ただし、PHP7とPHP8では挙動に違いがあり、思わぬバグの原因になることもあります。
この記事では、PHP初学者の方向けに「==」の挙動を具体例で比較しながら、ポイントをまとめました。

## 1. 「===」と「==」の違い
まずは基本からおさらいです。
### （1）===
- 型と値の両方を比較します。
- 型が異なる場合は必ずfalseになります。

【例】
```
var_dump(1 === 1);      // true
var_dump(1 === '1');    // false
```
### （2）==
- 型が異なる場合は自動で型変換を行い、値を比較します。
- PHPのバージョンによって型変換のルールが変わります。

## 2. 具体例でみるPHP7とPHP8の違い
以下の式の結果はどうなるか見ていきましょう。
```
a. 0 == '0'
b. 0 == ''
c. 1 == true
d. 1 == 1.0
```

#### (a) 0 == '0'
- 整数と数値文字列の緩やかな比較です。
- 文字列'0'は数値として解釈されるため、数値同士（0と0）の比較になります。
    - PHPでは、文字列が整数（int）または浮動小数点数（float）として解釈可能な場合は数値比較になります（数値文字列）。
- 結果：true
- PHP7でも8でも同じです。
```
var_dump(0 == '0'); // true
```

#### (b) 0 == ''
- 整数（0）と空文字列の緩やかな比較です。
- PHP7の場合
    - 空文字列を数値（0）に変換して比較します（0 == 0）。
    - 結果：true
- PHP8の場合
    - 文字列が数値として解釈可能かどうかによって挙動が分かれます。
    - 空文字列（非数値文字列）との比較は「文字列同士」として扱われます。
    - 文字列 '' が数値として解釈できない場合、文字列同士として比較する → '0' == ''。
    - 結果：false
    - なお、比較対象の文字列が数値として解釈可能なら、従来通り数値比較を行います。
```
// PHP7
var_dump(0 == '');    // true

// PHP8
var_dump(0 == '');    // false
```

#### (c) 1 == true
- 整数（int）と論理値（bool）の緩やかな比較です。
- 整数0はfalse、0以外はtrueとみなされます。
- よって、「1 == true」はtrue になります。
- PHP7でも8でも同じです。
```
var_dump(1 == true); // true
```

#### (d) 1 == 1.0
- 整数（int）と浮動小数点数（float）の比較です。
- 値が同じなのでtrueです（整数1とfloat1.0は等価）。
- PHP7でも8でも同じです。
```
var_dump(1 == 1.0); // true
```

💡 補足
- 浮動小数点数の比較は誤判定を起こすことがあるため、注意が必要です。
- 例えば以下のように誤差で誤判定が起こることがあります。
```
var_dump(0.1 + 0.2 == 0.3); // false（誤判定）
```
- これは「0.1」や「0.7」などの少数はコンピュータ上で正確に表せないため、微小な誤差が生じるためです。

## 3. まとめ
- == は型変換が入るため予期せぬ動きをすることがあります。
- 特にPHP8では、非数値文字列との比較の挙動が大きく変わりました。
    - PHP7まで：空文字列や非数値文字列も数値にキャストして比較
    - PHP8以降：非数値文字列の場合は文字列同士の比較に変更
- バージョン間の違いに注意し、型チェックや===の利用を心がけましょう。
- 浮動小数点数の比較には誤差があるため、可能であれば専用の関数やライブラリを利用することで精度を向上させることができます。

## 参考文献
- [公式問題集：PHP8 技術者認定初級試験公式問題集A](https://www.phpexam.jp/archives/3981)
【Project Euler】#005

https://qiita.com/umekikazuya/items/7062d91ddb8db112ef84

問5です。問4はめんどくさそうだったので飛ばしました。

## 問題
> 2520 は、1 から 10 までのすべての数で割り切れる最小の数です。  
> 1 から 20 までのすべての数で割り切れる余りなく割り切れる最小の正の数は何ですか？
 
複数の数の最小公倍数、みたいな感じですね。

https://projecteuler.net/problem=5

## わたしの回答
```go
func main() {
	i := 20
	for {
		if isDivisible(i) {
			break
		}
		i++
	}
	fmt.Println(i)
}

func isDivisible(num int) bool {
	for i := 2; i <= 20; i++ {
		if num%i != 0 {
			return false
		}
	}
	return true
}
```
なんか他に解き方ありそうですけど、
20からインクリメントして、その数が2〜20で割り切れるかを確認する方法にしてみました。

## GPT-4oの回答
```go
func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func lcm(a, b int) int {
	return a * b / gcd(a, b)
}

func main() {
	result := 1
	for i := 2; i <= 20; i++ {
		result = lcm(result, i)
	}
	fmt.Println("1から20までのすべての数で割り切れる最小の数は:", result)
}
```

## Gemini2.5 Flashの回答
```go
func gcd(a, b int) int {
	for b != 0 {
		a, b = b, a%b
	}
	return a
}

func lcm(a, b int) int {
	if a == 0 || b == 0 {
		return 0 // 0 と他の数のLCMは0
	}
	return (a * b) / gcd(a, b)
}

func main() {
	result := 1 // 1から開始（LCMは1以上になる）
	for i := 1; i <= 20; i++ {
		result = lcm(result, i)
	}
	fmt.Println(result)
}
```

## 感想
うーん、ふつうに難しいです。

力技でしか解けなかったんですが、AIの方の方法って、順々に最小公倍数を更新していく感じなんですかね。
多分、イメージはこんな感じ。

```
result: 1
↓ lcm(1,2)=2
↓ lcm(2,3)=6
↓ lcm(6,4)=12
↓ lcm(12,5)=60
↓ lcm(60,6)=60
↓ lcm(60,7)=420
↓ lcm(420,8)=840
↓ ...
↓ lcm(...,20)={答え}
```

たしかに、若干理解は追いついてきました...。
ITパスポート合格体験記

# はじめに
いまさらかもしれないけど、ITパスポートを取得したので、体験記についてまとめてみる。
規定上、どんな内容がでたのかは書けないけど、こんな勉強したよと参考に
なればと思う。資格いくつか持ってるけど、そういえばIPA系持ってないよね～と指摘されたことを受けて書いてみる。IPA系では、最初の入口として有名なITパスポート。
知らない分野もあり知ることができて有意義な資格だと思う。

# 勉強方法について
勉強した期間については、約１ヶ月くらい。

IPA系の試験対策として有名なサイト過去問道場で過去問回しつつ、参考書をやりつつという感じで勉強してた。

使用した参考書について以下に記載してみると

[ITパスポート試験によく出る問題集](https://books.rakuten.co.jp/rb/17714302/)

[かやのき先生 ITパスポート 書き込み式ドリル](https://books.rakuten.co.jp/rb/18013707)

[過去問パーフェクトラーニング](https://books.rakuten.co.jp/rb/17996462/)

[いちばんやさしいITパスポート](https://books.rakuten.co.jp/rb/18066623)

結構多いかな？おすすめな良著たちでした。

# 感想
受けた感想としては、とにもかくにも問題演習が一番重要だと感じました。
また範囲が広く、勉強を通して色んな視点を知ることができて色んなところに活用できる有意義な知識を入れることができてよかったです。
今年中に応用情報まで取得を目指しているけど、うまくいくかな。頑張っていきたい。
Python3: 一定間隔の処理

こちらの記事を参考にしました。
[Python3で一定間隔で処理を行う](https://qiita.com/miminashi/items/50a4f0906ab8f18b105d)

## プログラム

0.25 sec 毎に実行

```py:signal01.py
#! /usr/bin/python
#
#	signal01.py
#
#						Jun/08/2025
#
import signal
import time
    
def scheduler(arg1, args2):
	end = time.time() 
	time_diff = end - start 
	print(time_diff)

duration = 0.25
start = time.time() 
signal.signal(signal.SIGALRM, scheduler)
signal.setitimer(signal.ITIMER_REAL, duration, duration)

time.sleep(5000)
```

## 実行結果

```text
$ ./signal01.py 
0.25015687942504883
0.5001039505004883
0.7502927780151367
1.0001683235168457
1.250462532043457
1.5001108646392822
1.7501001358032227
2.0001344680786133
2.25012469291687
2.5001094341278076
```
【2ヶ月で】大学生が基本情報技術者試験に合格した話

## はじめに
こんにちは。今回は大学2年の春に受験し、2ヶ月の勉強で合格することができた基本情報技術者試験についてお話しします。「情報系の学部に所属しているから当たり前」と思われるかもしれませんが、当時の私はプログラミング以外のコンピュータ、ネットワーク、セキュリティなどの知識はほぼゼロでした。そんな私でも合格できた勉強法なので、情報系でない方にもきっと参考になるはずです！

## 勉強法
まずは参考書を買いに行きました。私は「いちばんやさしい基本情報技術者」を購入しました。理由は単純にイラストでやさしく解説されていて読みやすかったからです。他にも色々あるので実際に書店に足を運んで自分の好みで選びましょう。
https://amzn.asia/d/gHIYLow


では、参考書を買ったことですし勉強を始めます。まず、試験の概要を知る必要があるので 2, 3日でざーっと読みました。読むというより、「見る」と言ったほうがいいかもしれませんね。ここで中身の理解はしません。あくまで知るだけでOKです。そうすることで勉強の見通しが立つのでモチベーション維持にも繋がります。参考書はぶっといですが頑張りましょう。

次に、理解→即アウトプットのフェーズに入っていきます。一章分読んで、問題をすぐ解くということです。ここでいう問題は参考書にあるものです。これを大体1日2時間程度で1ヶ月に3周しました。もうこれで基本情報技術者試験とはなんたるかを理解できるはずです。

そして次は「過去問道場」という学習サイトに取り組みました。ここで科目A、科目Bの演習をしていきます。私の場合、参考書では科目Aに相当する問題のみ解いていたので、ここで初めて科目Bの問題と対峙しました。
https://www.fe-siken.com/fekakomon.php


ここで科目Bについて軽く説明しておくと、20問中16問は「プログラミングとアルゴリズム」の問題です。といっても特定の言語を習得する必要は全くなく、プログラム処理に関する基本的な知識を押さえておけば大丈夫なのです。プログラミング触ったことないよーって人は実際に手を動かしてコードを書いてみる方が覚えやすいと思うので、プログラミング学習サイト(paiza, progate等)でやってみるのもおすすめです。

このあたりで大学の前期の授業が始まっていたので、科目Aと科目Bの演習を休日に1時間程度取り組むなどして対策をし、月末に受験しました。


## 結果
科目Aが635/1000点、科目Bが640/1000点で**合格**しました！！
ギリギリではありましたが、この程度の演習量でも合格ラインに到達できるということが証明できたと思います。もし余裕を持って合格を目指したい方は、過去問道場での演習量を増やすことをおすすめします。
![FE_result.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4101010/328039d6-6fc3-4ddf-8723-70b0d4df6632.png)


## おわりに
ここまでこの試験の勉強法をお話ししてきましたが、この試験で得るものは大きかったと思います。合格したのはもちろんそうですが、基本的なコンピュータサイエンスの体系的な知識を得られたことが有益だったと感じています。そしてこれを自信に大学での勉学に励み、この年度の在学特待生をとることができたので私にとっては非常に良い経験でした。みなさんもぜひ、この試験を受けて合格を勝ち取ってください。

最後まで読んでいただきありがとうございました。
プログラミング未経験者へ。あなたのPCで「りんご」を自動で見分けるAIを作ってみませんか？

はじめまして！本講座で講師を務めます、開発者のSAKAIです。

突然ですが、あなたはこのように感じていませんか？

* 「AIや深層学習って面白そうだけど、何だか難しそう…」
* 「プログラミング経験もないし、数学も苦手だから自分には無理かも…」
* 「分厚い専門書を買ってみたけど、数式ばかりで挫折してしまった…」

もし一つでも当てはまったなら、ぜひこのまま少しだけ読み進めてみてください。
なぜなら、何を隠そう**過去の私が全く同じ悩みを抱えていたから**です。

### なぜこの講座を作ったのか（私の想い）

私が初めてAIや深層学習の世界に触れたとき、その可能性に心からワクワクしました。しかし、学習を進めようとすると、目の前には「微分」「線形代数」「確率統計」といった高い壁が立ちはだかりました。

世の中には素晴らしい教材がたくさんあります。しかし、その多くは、ある程度の数学的知識やプログラミング経験が前提となっているものが多く、「本当の初学者」が**AIの面白さを純粋に体験できる入り口**が、とても少ないのではないかと感じていました。

「理論は後からでいい。まずは自分の手で何かを動かして、"AIってこんなことができるんだ！"という感動を味わってほしい。」

その想いが日に日に強くなり、「**プログラミング経験や数学の知識が一切なくても、誰もがAI開発の楽しさを体験できる講座を作ろう！**」と決意したのが、この講座が生まれたきっかけです。

### この講座で、あなたは「できる」ようになります

この講座では、単に知識を学ぶだけではありません。スキルを身につけた結果、あなたができるようになることを具体的にお伝えします。

* **ニューラルネットワークの基礎がわかる**
    * AIが「考える」仕組みの、本当にキホンのキが直感的にわかります。これがわかると、ニュースで聞くAIの話題が「なるほど、こういうことか！」ともっと面白くなりますよ。
* **PythonとGoogle Colaboratoryでプログラミングができる**
    * 面倒な環境構築は一切不要です。Googleアカウントさえあれば、すぐにプログラミングを始められます。Pythonの基礎から丁寧に解説するので、プログラミングが全く初めてでも安心してついてきてください。
* **自分だけの画像認識モデルを作れる**
    * 最終的には、あなた自身の手で「りんご」の画像をAIに覚えさせ、自動で判別するモデルを作れるようになります。この「自分の作ったAIが動いた！」という経験は、あなたの「作りたい」という気持ちをきっと加速させるはずです。

### この講座を届けたい、大切なあなたへ

私は、この講座を以下のような方にこそ届けたい、という強い想いを持って作成しました。

* **AIに興味はあるけど、何から手をつけていいか分からない方**
* **プログラミング学習の新しい目標として、AIを作ってみたいと考えている方**
* **難しい理論よりも、まずは手を動かして「動くもの」を作ってみたい方**
* **過去にAI学習で挫折してしまった経験のある、あなた**
* **自分の好きなものの画像を判別する、オリジナルのAIを作ってみたいという夢がある方**

### この講座に込めた、３つの「こだわり」

この講座を作る上で、私が特にこだわったポイントが３つあります。

1.  **【こだわり①】難しい数式は使いません！直感でわかる解説**
    この講座では、数式による厳密な証明よりも、**図やアニメーションをふんだんに使って「なぜそうなるのか」を直感的に理解できること**を最優先しました。「AIってこういう仕組みで動いているんだ！」という面白さを、理屈抜きで感じてほしいのです。

2.  **【こだわり②】"動くものを作る楽しさ"を最優先した実践的カリキュラム**
    理論の学習も大切ですが、それ以上に「とにかく手を動かすこと」を重視しています。動画の通りにコードを書いていけば、あなたのPC（ブラウザ上）でAIが動きます。最終的に「りんごの画像認識」という目に見える成果物が完成するので、確かな達成感を味わいながら学習を進められます。

3.  **【こだわり③】挫折させない、丁寧なステップ・バイ・ステップ**
    プログラミングが初めての方でも迷わないように、Google Colabの準備から、コードの一行一行が持つ意味まで、丁寧に解説することを徹底しました。もちろん、わからないことがあれば**Q&Aでいつでも質問してください。私が直接、あなたの学習をサポートします！**

### 講座を終えたあなたの未来

この講座をすべて終える頃には、あなたはAIや深層学習に対する漠然とした不安がなくなり、**「自分にもAIが作れる！」という確かな自信とスキル**を手にしているはずです。

りんごの認識プロジェクトで得た知識を応用すれば、あなたの好きなキャラクターや、飼っているペットの写真、道端に咲く花の名前を当てるAIなど、オリジナルのAI開発に挑戦していくことも夢ではありません。

この講座は、ゴールではなく、あなたのAI開発者としてのキャリアの**素晴らしいスタート地点**になるはずです。

### 講座の詳細・お申し込みはこちら

ここまで読んでいただき、本当にありがとうございます。
もし少しでも「面白そう！」「挑戦してみたい！」と感じていただけたなら、とても嬉しいです。

AI学習への第一歩は、以下のリンクから始まります。Udemyでは頻繁にセールも開催されていますので、お得なタイミングを狙っていただくのもおすすめです。

ぜひ、あなたの目で講座の内容を確かめてみてください。

**[講座のページはこちら](https://www.udemy.com/course/python-recognition/?referralCode=7B94E85DDD5D26A98F7C)**

### 作成した講座のまとめサイト
さいごに、私がこれまでに作成したUdemy講座をまとめた紹介サイトも運営しています。

今後、新しい講座をリリースした際にも、こちらのサイトで情報を発信していく予定です。ご興味があれば、ぜひ一度のぞいてみてください。

[作成した講座のまとめサイトはこちら](https://udemy-c1f90.web.app/)

### さいごに

AI技術は、これからの社会を大きく変えていく、本当にエキサイティングな分野です。
その面白くてパワフルな技術の第一歩を、私と一緒に踏み出してみませんか？

あなたの「やってみたい」「作りたい」という大切な気持ちを、私が全力でサポートします。

講座でお会いできることを、心から楽しみにしています！
ソフトマックスと男女分析



## ✅ 1. 言葉のベクトル化（Word Embedding）

### ■ 数式定義：

任意の単語 $w$ は、意味的・文法的特徴を反映した\*\*埋め込みベクトル（word vector）\*\*として表現される：

$$
\vec{v}_w \in \mathbb{R}^d
$$

ここで $d$ は次元数（例：300次元 for Word2Vec、768次元 for BERT）

### ■ 例：

* 「nurse」 → $\vec{v}_{\text{nurse}} = [0.4,\ 0.2,\ -0.1,\ \dots]$
* 「engineer」 → $\vec{v}_{\text{engineer}} = [-0.3,\ 0.5,\ 0.6,\ \dots]$

### ■ 学習方式：

* Word2Vec：**共起行列の近似**により「類似語を近く」に
* BERT／Transformer：**文脈を考慮した双方向的埋め込み**

---

## ✅ 2. 性別軸ベクトル（Gender Direction）

性別差を表す「意味的軸ベクトル」は次のように構成される：

$$
\vec{g} = \vec{v}_{\text{man}} - \vec{v}_{\text{woman}}
$$

これは、性別の意味的方向（男性性と女性性のベクトル差）を表す。

---

## ✅ 3. ロジット（性別スコア）の算出

ある語彙ベクトル $\vec{v}_w$ が性別軸にどれだけ沿っているか（内積）をロジットと定義：

$$
z = \vec{v}_w \cdot \vec{g}
$$

ここで：

* $z > 0$：男性寄り
* $z < 0$：女性寄り

さらに確率的に表現するため、ロジットを2値分類に変換する。

---

## ✅ 4. ソフトマックス関数による確率変換

2クラス（男女）として、ソフトマックス関数を用いると：

$$
P(\text{male}) = \frac{e^{z}}{e^{z} + e^{-z}} = \frac{1}{1 + e^{-2z}}
$$

$$
P(\text{female}) = \frac{1}{1 + e^{2z}}
$$

これは **ロジスティック回帰**の形式でもあり、「性別を確率として出力する構造」を持つ。

---

## ✅ 5. Transformerモデルとの接続

### ● Attention機構と埋め込みベクトル

* Transformerは各単語 $w_i$ を、**Query（Q）・Key（K）・Value（V）ベクトル**に変換し、
* 注意重み（スコア）を内積で計算：

$$
\text{AttentionScore}_{ij} = \frac{\vec{q}_i \cdot \vec{k}_j}{\sqrt{d}}
$$

ここでも「内積」が使われる点で、**性別傾向の計測構造と一致**。

### ● ソフトマックスと文脈依存生成：

* 内積スコアにソフトマックスを適用して **重み（文脈重要度）** に変換：

$$
\text{softmax}(z_i) = \frac{e^{z_i}}{\sum_j e^{z_j}}
$$

* 出力表現は、重み付き平均で得られる：

$$
\text{Output}_i = \sum_j \text{softmax}(z_{ij}) \cdot \vec{v}_j
$$

→ これは「**文脈に応じた意味の再構成**」であり、
→ **性別軸と埋め込みベクトルの操作**と理論構造が共通している。

---

## ✅ 6. 応用と社会的含意（例：ジェンダーバイアス）

このような構造を使うと：

* 「nurse」→ 82% female
* 「engineer」→ 74% male

など、**言葉の性別的な偏り**を可視化・数値化できる。

これは **バイアスの発見・修正・言語設計**に直結するAI倫理問題にも応用可能。

---

## ✅ 生成AIのプロンプトと決定


🎯 再構成プロンプト（AI分析用）
以下の美術・デザイン・メディア系学科名リストに対して、自然言語処理（NLP）ベースのベクトル化を行い、性別傾向（男女比率）をソフトマックス関数を用いて数値化してください。

🔢 処理手順：
各学科名を 言語ベクトル（word embedding） に変換（Word2Vec や BERT など使用）。

性別軸ベクトル（gender direction）を定義（g = v_man - v_woman）。

各学科ベクトルと性別軸の 内積（ロジット値 z） を求める。

ソフトマックス関数またはシグモイド関数により、**男女比率（確率）**に変換する。

結果を 各学科ごとに「男性：〇％、女性：〇％」の形式で出力する。

🎨 対象学科名リスト：
日本画学科

油画学科（油絵）

彫刻学科

版画学科

現代美術学科

芸術学科（理論・批評）

グラフィックデザイン学科

視覚伝達デザイン学科

プロダクトデザイン学科

空間デザイン学科

建築デザイン学科

環境デザイン学科

インテリアデザイン学科

統合デザイン学科

情報デザイン学科

映像学科

写真学科

メディアアート学科

アニメーション学科

ゲームデザイン学科

メディア表現学科

工芸学科


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043781/3d77ac27-7622-4f4a-87cd-ae79143a36b2.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043781/dcb4d7c7-11ea-4cbe-96ae-b57355565905.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043781/ff310a00-a79a-44b0-be31-e0b675fb316f.png)
Mac OS　システムの音声を録音する。

必要なソフトウェア：BlackHole, GarageBand。前者はGPL-v3オープンソースソフトウェア、後者はMac OSで無料でダウンロードできるソフトウェア。

環境インストール手順：
・BlackHoleのインストール
　Homebrewでインストールする。
  brew update
  brew install blackhole-2ch

インストールが終わったら、OS再起動。

・GarageBandの録音
　（１）空のプロジェクト　画面：「選択」ボタンを押す。
　（２）新規トラックを作成　画面：マイクまたはライン　のままでよい。
　　　　詳細の演奏や録音中に自分の音源の音を聴く。　これをチェックする。（重要！）
　（３）GarageBand の設定メニューをクリック
　         オーディオ／MIDI タグのデバイス：
               出力デバイス：iMacのスピーカー
　　　　　入力デバイス：BlackHole 2ch
　（４）OSの一番上のリンゴマークをクリックし、「システム設定」をクリック。
　（５）左側のサウンドをクリックし出力のところ：BlackHole 2chをクリック。
　（６）カウントイン(1234)、メトロノームクリック(三角形）をクリックして無効化。
　（７）GarageBandの録音をクリックする。録音開始。
　（８）音楽などの音源を流す。　終わったら、GarageBandの録音停止をクリックする。
　　　　録音している間に、音楽またはその他ソースが聞こえます。
　（９）GarageBandの音楽を流してみて確認する。

オプション：GarageBandの「共有」メニューをクリックし、音楽をMac OSのミュージックにコピーできる。

説明：（興味ない方は飛ばしていただいて構いません）
BlackHoleは音声を中継してくれる。音源を流す前に、システムの出力をBlackHole 2chにすることによって、音声はBlackHoleにリダイレクトされる。GarageBandはBlackHole 2chを入力とするので、その音声を受け取るわけです。
　　システム音声 （出力） -->  BlackHole 2ch --> (入力）GarageBand
       Linuxでいう、ls -l | grep "myfile.txt" のようなものです。

GitHub：https://github.com/ExistentialAudio/BlackHole
【脱・作業者】できる情ヘルプデスクに共通する3つのマインド

【免責事項】
本投稿は正確性・完全性を保証するものではありません。
万が一、本情報に基づいて被ったいかなる損害についても、一切の責任を負いかねます。
あらかじめご了承ください。

---

## 🎥 動画で確認したい方はこちら

[![【脱・作業者】できる情シスヘルプデスクに共通する3つのマインド](https://img.youtube.com/vi/ubdkNN1pQv0/maxresdefault.jpg)](https://www.youtube.com/watch?v=ubdkNN1pQv0)


## ✅ 概要

今回は「**できる情シス・ヘルプデスクに共通する3つのマインド**」についてご紹介します。

「ヘルプデスクの仕事って単なる作業でしょ？」
そんなふうに思っていませんか？

実は、**マインドセット**次第で、ただの作業者から“信頼されるITパートナー”へと大きくステップアップできるのです。

---

## 🔑 ヘルプデスクの評価はマインドで決まる

以下の2人、どちらが評価されるでしょうか？

* Aさん：言われたことだけをやる
* Bさん：気づいて動ける

当然、**Bさん**ですよね。信頼、成長、チャンスが巡ってくるのは、常にこのような人です。
では、Bさんのようになるにはどうすれば良いのか？
答えは**3つのマインド**にあります。

---

## ✅ マインド①：サービス提供者として考える

多くの人が陥りがちなのが「作業者マインド」です。

### 作業者マインドの特徴

* 依頼された内容をそのまま実行
* 背景や目的を考えない
* 言われたまま対応して終わり

例：

> 「USBの制限を解除してください」と言われてそのまま対応する

これは**NG対応**です。

### サービス提供マインドなら？

* 依頼の**背景・目的を確認**
* セキュリティやルールに**配慮**
* 必要であれば**代替手段を提案**

たとえば、USBでなく**クラウドストレージ**の方が適している場合もありますよね。

---

## ✅ マインド②：分からない人の気持ちに寄り添う

ヘルプデスク対応で意外と多いのが、

> 「なんでこんなことも分からないの？」という苛立ち

これは**プロ失格**です。

### 良い対応とは？

* 相手のITスキルレベルに応じた説明
* 噛み砕いた言葉で丁寧に伝える
* **話しかけやすい雰囲気**をつくる

例えば、「IPアドレスを教えてください」ではなく、
「下記の手順で確認できますよ」と**スクリーンショット付きで案内**するとベストです。

---

## ✅ マインド③：小さなトラブルを改善につなげる

日々の対応をただの「都度対応」で終わらせていませんか？

### もったいない対応の例

* 印刷トラブル→直すだけで終わり
* メールミス→再送して終わり

### できる人は違う

* 対応を**記録**する
* **パターンを分析**
* マニュアル化、FAQ化、ツール改善など**仕組みに昇華**

たとえば、印刷トラブルが多ければ「手順マニュアルを見直す」「ポップアップ警告を設定する」など**全体最適を考えます**。

---

## ✨ まとめ：スキルよりも、まずマインド

できる情シス・ヘルプデスクに共通する3つのマインドは以下の通りです。

| マインド        | 内容                 |
| ----------- | ------------------ |
| ① サービス提供者視点 | 背景・目的を理解し、提案まで行う   |
| ② 共感と寄り添い   | IT初心者に合わせた説明・姿勢    |
| ③ 改善意識      | 都度対応を仕組み化・再発防止に活かす |

スキルは後からでも身に付きます。
でも**マインドがなければ評価されません。**

---

## 🎥 動画でも解説しています(再掲)

[![【脱・作業者】できる情シスヘルプデスクに共通する3つのマインド](https://img.youtube.com/vi/ubdkNN1pQv0/maxresdefault.jpg)](https://www.youtube.com/watch?v=ubdkNN1pQv0)

---

**このマインド、あなたはできていますか？**
「ただの作業者」で終わらない、できる情シスを一緒に目指しましょう！

---

ご希望があれば、この記事をQiitaに投稿する形式でマークダウン出力も可能です。ご希望ですか？

## ✨ おわりに
この記事が役立ったら、いいねやストックいただけると嬉しいです！

## 主のコンテンツ
<a href="https://www.udemy.com/course/active-directory-p/?referralCode=1BC8474484DCD2814852">Active Directoryの基礎※ハンズオン形式</a>
<a href="https://www.udemy.com/course/active-directory-n/?referralCode=FF51293A35539D596A6A">Active Directoryの基礎 グループポリシー編※ハンズオン形式</a>
<a href="https://www.udemy.com/course/joshishelp/?referralCode=7ECEB242C114FA3736F8">情シスヘルプデスク入門※一部ハンズオン形式</a>
<a href="https://twitter.com/naoya_itbegin">X</a>
<a href="https://www.youtube.com/@%E7%A4%BE%E5%86%85%E3%83%8D%E3%83%83%E3%83%88%E3%83%8A%E3%83%93">Youtube</a>
UbuntuのDockを下へ移動(備忘録)

![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/d7f78165-ec72-4227-9170-c97cc47ed46e.png)

![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/b071a790-fc05-4444-9700-876e3fefdb28.png)

Windowsみたいに下へ移動しました。
![图片.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/8022aef0-674d-4397-bb6f-95f4c31f3fbb.png)
【エラー】GoogleCoravoratory：TypeError: 'str' object is not callableの対処法

# はじめに
GoogleCoravoratoryで練習問題をやっていた時に起こったエラーがあったので、記事にしました。
# エラー内容
```tex:error_text
age = 28
name = "Alice"
print = f("私の名前は｛name｝で、今年{age}歳です。")
```
上記のように、print関数での出力の際に、変数と同様に　=　でついついf文字列をつないでしまって出力をしてしまったんですよね。
当然エラーが出てしまったので、
あ、しまった。
と思い、下記の通り、正しい内容に修正してみました。
```tex:true_text
age = 28
name ="Alice"
print(f"私の名前は{name}で、年齢は{age}歳です。")
```
ただ、正しい入力をしたはずなのに、エラーのみが返ってくる状態でした。
自身の理解の足りない部分があったのではないか、と見直しましたが、確かにあっているはずなのに下記のエラーが返ってくる状態です。

TypeError: 'str' object is not callable

# 対処法
エラーを調べてみたところ、print関数に文字列を代入してしまっており、コードを削除して再度実行したとしても反映がされず、エラーとして返ってきている状態でした。
つまり、現在のprint関数の中身を削除する必要があります。
```tex:text
del print
```
このdel文を入力し、再出力をしたところ、無事治りました。

# おわりに
printで定義をしてしまっている以上、何もできない！正しい結果が表示されない！！と慌てて時間を取られる前に、del printを使用し、正しいprint関数の使用をしてみるようにします。
参考HP：https://qiita.com/NNNSSSNNSS/questions/4fe5b6a4e067cd73c6c4
ファイアウォール：拒否 (Reject) と破棄 (Drop) の違い

# はじめに

ファイアウォールの設定を見ていると、「拒否 (Reject)」と「破棄 (Drop)」という2つの選択肢を目にすることがよくあります。どちらも通信を遮断する機能ですが、その挙動には重要な違いがあります。今回は、この2つの違いと、それぞれをどのような状況で使い分けるべきかについて解説します。

# 拒否 (Reject) とは？

**拒否 (Reject)** は、特定の通信をブロックする際に、その通信を試みた送信元に対して「通信は拒否されました」という旨の**応答 (ICMP Error Message)** を返す挙動を指します。

## Rejectの主な特徴

* **送信元への通知**: 通信が拒否されたことを送信元に明確に伝えます。
* **通信の切断**: 通常、TCPであればRST (Reset) パケット、UDPであればICMP Destination Unreachable (Port Unreachable) などのエラーメッセージを返します。
* **トラブルシューティングの容易さ**: 送信元は通信がなぜできないのかを把握しやすいため、トラブルシューティングが比較的容易になります。

## Rejectが適しているケース

* **内部ネットワーク**: 内部のサーバーやクライアントからの不正なアクセスをブロックする場合など、通信の可否を送信元に知らせる必要がある場合に適しています。
* **テスト環境**: 通信テストを行う際に、意図的にアクセスを拒否してその挙動を確認したい場合など。
* **デバッグ**: アプリケーションやサービスの通信問題をデバッグする際に、拒否された原因を特定しやすくするために利用します。

# 破棄 (Drop) とは？

一方、**破棄 (Drop)** は、特定の通信をブロックする際に、その通信を**一切応答せずに破棄する**挙動を指します。送信元は、あたかも通信が途中で消滅したかのように感じます。

## Dropの主な特徴

* **送信元への無応答**: 通信が破棄されたことを送信元に一切知らせません。
* **タイムアウト**: 送信元は応答がないため、一定時間後にタイムアウトして通信が失敗したと判断します。
* **セキュリティの向上**: 攻撃者からすると、ポートが開いているのか閉じているのか、あるいはファイアウォールが存在するのかどうかが判断しにくくなるため、セキュリティ面で有利になることがあります。

## Dropが適しているケース

* **外部からの不正アクセス**: インターネットからの不審な通信や、ポートスキャンなどの攻撃に対しては、Dropを選択することで攻撃者に情報を与えず、セキュリティを向上させることができます。
* **DoS攻撃対策**: 大量の不正な通信を破棄することで、サーバーへの負荷を軽減し、DoS攻撃などへの対策として有効です。
* **不要な通信の黙殺**: 特定の不要な通信を完全に無視したい場合に利用します。

# まとめと使い分け

| 特徴       | 拒否 (Reject)                               | 破棄 (Drop)                                   |
| :--------- | :------------------------------------------ | :-------------------------------------------- |
| **応答** | 送信元にエラー応答を返す                      | 送信元に何も応答しない                        |
| **挙動** | 通信が拒否されたことが明確に伝わる          | 通信が途中で消滅したかのように見える          |
| **トラブルシューティング** | 比較的容易                            | 困難 (タイムアウトを待つ必要がある)           |
| **セキュリティ** | 攻撃者に情報 (ポートの有無など) を与えうる | 攻撃者に情報を与えにくく、セキュリティが向上 |

これらの違いを理解することで、状況に応じた適切なファイアウォール設定が可能になります。

* **内部ネットワークやデバッグ時など、通信の問題を迅速に解決したい場合**は**Reject**
* **外部からの攻撃対策や不要な通信を完全に遮断し、セキュリティを最優先したい場合**は**Drop**

このように使い分けることで、ファイアウォールの効果を最大限に引き出すことができます。
Windows Terminal で Python から Sixel

Windows Terminal では Sixel がサポートされています。Python から Sixel で画像を表示します。

# python-sixel

Python で Sixel を扱うには python-sixel というライブラリがよく紹介されますが、Windows 非対応の termios に依存しているため、WSL でしか動きません。

Windows に対応したフォークを利用します。

- https://github.com/sbamboo/python-sixel

```bat
pip install git+https://github.com/sbamboo/python-sixel.git
```

# サンプル

test.png を表示する例です。

```py
import sys, sixel
sixel.converter.SixelConverter("test.png").write(sys.stdout)
```

matplotlib で描画した数式を表示する例です。（グラフも同様にできます）

```py:formula.py
formula = r"\int_{0}^{\pi} \sin(x) dx = 2"

import sys, io, matplotlib.figure, sixel
fig = matplotlib.figure.Figure(figsize=(1, 1), dpi=120)
fig.text(0, 0, f"${formula}$", fontsize=12, color="white")
with io.BytesIO() as buf:
    fig.savefig(buf, format="png", bbox_inches="tight", facecolor="black")
    sixel.converter.SixelConverter(buf).write(sys.stdout)
```
**実行例:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32057/4e6c7724-f099-41a2-b9b8-4fbf754a3330.png)

画像生成と組み合わせた例です。ガチャをするときに画像ファイルを別途確認しなくて済むのが便利です。

```py:pizza.py
model  = "Linaqruf/anything-v3-1"
prompt = "girl eating pizza"
output = "pizza.png"

import sys, diffusers, torch, sixel
pipe = diffusers.StableDiffusionPipeline.from_pretrained(model)
pipe = pipe.to("cuda")
result = pipe(prompt=prompt, width=256, height=256, num_inference_steps=10)
result.images[0].save(output)
sixel.converter.SixelConverter(output).write(sys.stdout)
```
**実行例:**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32057/52d9734f-69b8-4e43-a57f-60aa2ac5524e.png)

:::note info
絵柄は毎回変わります。
:::

# 関連記事

diffusers の使い方については以下の記事を参照してください。

https://qiita.com/7shi/items/b4da43f342f0fe3c189c

:::note info
この記事は CPU で動かす前提のため、GPU で動かすには `pipe = pipe.to("cuda")` を追加する必要があります。
:::

Gemini による画像生成ガチャの記事です。Sixel を利用しています。

https://qiita.com/7shi/items/d1371b923bba9a78820e
Officeにおける共有サーバー上のマクロのブロックとmklinkによる回避

### **はじめに**

Microsoft Officeアプリケーションは、セキュリティ上の理由から、インターネットからダウンロードされたファイルや、信頼されていない場所にあるファイルに含まれるマクロの実行をブロックすることがあります。これは、悪意のあるマクロからシステムを守るための重要な機能です。しかし、企業の共有フォルダなど、信頼できる内部ネットワーク上のファイルでも、特定の条件によってはマクロがブロックされてしまうことがあります。

特に、**ディレクトリ名にIPアドレスを含む共有フォルダ上のVBAファイル**は、Officeのセキュリティ設定によってマクロがブロックされやすいケースがあります。本記事では、この問題に対して、コマンドプロンプトの`mklink`コマンドを用いて\*\*エイリアス（シンボリックリンクまたはジャンクション）\*\*を作成することで、マクロのブロックを回避できる方法を具体的に説明します。

---

### **Officeのマクロセキュリティとブロックの背景**

Officeアプリケーションは、ファイルがどこから来たのか（インターネット、ローカルイントラネットなど）や、そのファイルがどこに保存されているのか（信頼済みドキュメント、信頼済み場所など）に基づいて、マクロの実行を許可するかどうかを判断します。

ファイルパスが「`\\192.168.1.100\共有フォルダ`」のように**IPアドレスで指定されている場合**、Officeはこれをインターネットに近いと認識したり、特定のセキュリティポリシーを適用したりして、マクロをブロックすることがあります。これはセキュリティを厳しくするための措置ですが、正当な利用においては不便を感じる原因となります。

---

### **`mklink`によるエイリアス作成でブロックを回避する仕組み**

`mklink`コマンドは、Windowsのコマンドプロンプトで**シンボリックリンク**や**ジャンクション**と呼ばれるエイリアスを作成するものです。これらは通常のショートカットファイル（.lnk）とは異なり、OSがファイルの実体として透過的に扱います。

`mklink`で作成されたエイリアスを通してファイルを開くと、Officeアプリケーションは、エイリアスが指す**ローカルパス**を認識します。これにより、元のIPアドレスを含むネットワークパスが直接参照されることなく、Officeはエイリアスを**ローカルドライブにあるファイル**として扱い、マクロのブロックを回避できると考えられます。

---

### **`mklink`によるエイリアス作成手順**

特定の共有フォルダ上のVBAファイルのエイリアスをローカルに作成し、Officeのマクロブロックを回避する具体的な手順を説明します。

#### **前提条件**

* エイリアスを作成したいVBAファイルが存在する共有フォルダのネットワークパス。 例: `\\192.168.1.100\SharedVBA\MyMacro.xlsm`  
* エイリアスを作成するローカルパス。 例: `C:\OfficeMacros` (事前に作成しておくことを推奨します)  
* **管理者権限のあるコマンドプロンプト**

#### **手順**

1. **コマンドプロンプトを管理者として実行します。**

   * Windowsのスタートメニューを右クリックし、「ファイル名を指定して実行」を選択します。  
   * `cmd`と入力し、**Ctrl \+ Shift \+ Enter**を押して、管理者権限でコマンドプロンプトを開きます。または、スタートメニューの検索バーに「cmd」と入力し、「コマンドプロンプト」を右クリックして「管理者として実行」を選択します。  
2. **エイリアスを作成するコマンドを入力します。**

   * ここでは、**シンボリックリンク**を使用してファイルへのエイリアスを作成する例を示します。

```
mklink "C:\\OfficeMacros\\MyMacro.xlsm" "\\\\192.168.1.100\\SharedVBA\\MyMacro.xlsm"
```


3.   
   * **コマンドの解説:**

     * `mklink`: シンボリックリンクを作成するコマンドです。  
     * `"C:\OfficeMacros\MyMacro.xlsm"`: 作成したいエイリアスのローカルパスとファイル名です。  
     * `"\\192.168.1.100\SharedVBA\MyMacro.xlsm"`: リンク先の元のファイルパスです。

**共有フォルダ全体へのエイリアス（ジャンクション）を作成する場合の例:** 共有フォルダ全体をローカルにエイリアスしたい場合は、ジャンクションを使用します。

```
mklink /j "C:\\LocalSharedVBA" "\\\\192.168.1.100\\SharedVBA"
```

*   
  * `/j`: ジャンクションを作成するためのオプションです。  
4. **コマンド実行後、成功メッセージを確認します。**

   * 成功すると、「`C:\OfficeMacros\MyMacro.xlsm のシンボリック リンクが \\192.168.1.100\SharedVBA\MyMacro.xlsm に作成されました`」のようなメッセージが表示されます。  
5. **作成されたエイリアスからVBAファイルを開きます。**

   * エクスプローラで`C:\OfficeMacros`を開くと、`MyMacro.xlsm`というファイルが表示されています。  
   * このエイリアスファイルを開くと、IPアドレスを含むネットワークパスにあるVBAファイルが、Officeにマクロブロックされずに開かれるはずです。

#### **注意事項**

* **管理者権限**: `mklink`コマンドの実行には管理者権限が必要です。  
* **パスの正確性**: リンク元とリンク先のパスは正確に指定してください。  
* **セキュリティへの影響**: この方法は、Officeのマクロブロックを回避するためのものであり、セキュリティ上のリスクを完全に排除するものではありません。マクロの内容を信頼できるものか、事前に十分確認することが重要です。  
* **Officeのバージョンと更新**: Officeのバージョンやセキュリティ更新プログラムによっては、この回避策の有効性が将来的に変更される可能性があります。
FrankenPHP学習メモ

# はじめに
FrankenPHP について ChatGPT に大いに助けてもらいながら個人的に手を動かして勉強した時のメモです。今回は AppRun で動かしてみました。

# FrankenPHP概要
公式サイト: https://frankenphp.dev/
作者: Kévin Dunglas さん

# 必要なファイルを用意
## Dockerfile
```
FROM dunglas/frankenphp
COPY Caddyfile /etc/frankenphp/Caddyfile
COPY index.php /app/public/
```

## docker-compose.yml
```
version: '3'

services:
  frankenphp:
    build: .
    ports:
      - "80:80"
```

## Caddyfile
```
http://:80 {
    root * /app/public
    php_server
    file_server
}
```

## index.php
```
<?php
echo "Hello FrankenPHP!";
echo phpinfo();
```

# dockerイメージのビルド
```
> docker build --platform linux/amd64 -t my-franken .
```

# コンテナレジストリにログイン
```
> docker login 作成したコンテナレジストリ名.sakuracr.jp
```

# イメージタグを作成
```
> docker tag my-franken 作成したコンテナレジストリ名.sakuracr.jp/my-franken:latest
```

# ビルドしたdockerイメージをプッシュ
```
> docker push 作成したコンテナレジストリ名.sakuracr.jp/my-franken:latest
```

# 「アプリケーション作成」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44791/7b1568ef-114f-44c8-90a2-ff8e42e0232a.png)

# アプリケーションの設定項目（主なもの）
ポート: 80
アプリケーション名: my-franken
コンテナイメージ： 作成したコンテナレジストリ名.sakuracr.jp/my-franken:latest
コンテナレジストリアクセス設定: （設定したIDとパスワードを入力）

# 「作成する」をクリック
ステータスが「正常」になることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44791/89129886-41f8-481a-a5b5-aeb2ec08838f.png)

# 「公開URL」にアクセスする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44791/034e04a0-d242-4bdd-bc4c-6e6016eb4cd2.png)
動きました。

# 次の課題
- WordPress も動かせるかな・・・と思いましたが、私には荷が重かったようで、うまくいきませんでした。。。
- 一見セットアップできたように見えても、記事リストが表示されないなど動作がおかしい
- いつかリベンジしたい
駆け出しゲームプログラマーの学習日記

# 自己紹介

皆さん、初めまして！
たけのこと申します。
とある会社のゲームプログラマーをしています。新卒二年目です🔰

**趣味**
カフェ巡りです。
いろんなカフェに行ってコーヒーやスイーツを楽しんだり、景色を見てリラックスするのが好きです。

**経歴**
高校卒業後ゲーム開発の専門学校に入学しました。
そこでゲーム開発のあれこれを学んで今のゲーム会社に入社し、現在に至ります。

# Qiitaを始めたきっかけ
今まではUnity・C++でしかゲームを作ったことがなくUnrealEngineを触ったことがなかったので勉強するついでに記録として残しておこう！と思ったのがきっかけです。
他にもUnityの知見を共有できたらなぁと思ってます。

# 最後に
気合い入れて勉強と投稿を行ってまいりますので暖かい目で見守っていただけたら幸いです！
間違っているところがございましたら気軽に教えてくださると助かります！
これからよろしくおねがいいたします！

（次の記事は早速UnrealEngineを触ってみた感想を書いてみようかな...）
【Cloudflare】node js compatibility error cloudflareの解決方法

# はじめに
`Next.js{で作成したアプリを`Cloudflare Pages`にデプロイする際に発生したエラーと、その解決方法についてまとめた記事です。

:::note warn
***この記事は、<font color="Red">個人的なアウトプット</font>を目的として作成しています。内容には誤りや不足が含まれている可能性がありますので、もしお気づきの点がありましたら、ご指摘いただけますと幸いです。***
:::

# 現象
`Next.js`で作成したアプリを`Cloudflare Pages`にデプロイしたところ、ビルド自体は成功したものの、実際に表示してみると以下のようなエラー画面が表示され、ページが正常に表示されませんでした。

![スクリーンショット 2025-06-08 16.39.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835217/27e63957-9cff-434d-8e17-489cfe13bd6d.png)

# 解決方法
`Cloudflare Workers（Pages Functions）`では一部の`Node.js API`がサポートされていないため、`Next.js`の一部処理において互換性の問題が発生します。これを解消するには、`Cloudflare`側で`Node.js`との互換モード（nodejs_compat）を有効にする必要があります。
## 方法1：ダッシュボードから設定する場合
`Cloudflare`の管理画面から以下の手順で設定します。

1. 設定→ランタイム→互換性フラグに移動
1. `nodejs_compat`を有効にする
 

![スクリーンショット 2025-06-08 17.03.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835217/7363caff-9629-4f2d-954a-1be9d60ca1fc.png)

![スクリーンショット 2025-06-08 17.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835217/72d439c8-f375-455a-bd64-f3ae13ea6f96.png)

## 方法2：wrangler.jsonに設定を追加する場合
プロジェクトルートにある`wrangler.json`に、以下のように`compatibility_flags`を追加します。

```json
{
  "name": "kpop-challenge-finder",
  "compatibility_date": "2024-09-23",
  "compatibility_flags": ["nodejs_compat"], //nodejs_compatを追加
  "pages_build_output_dir": ".vercel/output/static"
}
```

# 終わりに
今回のように`nodejs_compat`を有効にすることで、Next.jsアプリでもスムーズに動作するようになります。同様のエラーで困っている方の参考になれば幸いです。

# 参考

『Cloudflare x Next.js x microCMS 爆速ブログ作成備忘録』Zenn

https://zenn.dev/100027/scraps/e2ce353f0df9f2

『Next.jsをGitHub挟んでCloudflare Pagesにデプロイする』Qiita

https://qiita.com/makochan1209/items/a8c2bd5345e1b59f72e0
Amazon Q CLIで一切コードを書かずにゲームを作成してみた

# はじめに
現在Amazon Q CLIでゲームを作成することで記念品がもらえるキャンペーンが開催されています。
参加方法は、作成したゲームのブログ、もしくは動画を作成して#AmazonQCLIをつけてSNSへ投稿するだけということで参加してみました。

https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

# Amazon Q CLIを使ってみてよかった点
### プロンプトが不完全でもある程度補完してくれる
自分は生成AIを使って部分的にコードを書かせた経験はあるものの、プロンプトを作りこまないと思い通りに実装してくれない印象だったのですが、Amazon Q CLIはプロンプトが雑でもゲームを完成させてくれるところが良かったです。また、何も指示しなくてもREADME.mdを作成してくれました。

### 会話形式で改善できる
「山札の残り枚数をわかるようにして」など改善点を続けて入力できるので、一切コードを書かずに完成させることができました。

# 成果物
![プレゼンテーション1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513962/3e501e2d-3758-40ff-b8da-73a8b8f58dc4.gif)
6色のカードを使ったソリティアのようなゲームを作りました。
ゲームライブラリはPyGameを使用しました。

https://www.pygame.org/wiki/GettingStarted

はじめはAWSのアイコンを使ったゲームを作ろうと6色のカードゲームを生成AIに考案してもらったのですが、数字の概念があったのでAWSのアイコンにすることはできませんでした...
かなりシンプルなゲームになりましたが、遊んでみたら意外と面白くて時間があっという間に溶けていきました。

# 最後に
Xで#AmazonQCLIを検索すると多くのゲームが出てきます。これをコードを書かずに実装したのかと生成AIの進歩に驚かされます。
生成AIが普及する中、なかなかキャッチアップできていなかったので今回のキャンペーンは良いきっかけをいただきました。
【ChatGPTに限らず】生成AI（ChatGPT含む）の話が身近で出てきたことのご報告。


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

　今回は、生成AI（ChatGPT含む）の話が身近で出てきたことのご報告です。

:::note info
本記事は、生成AIについての
話題です。　　　あしからず。
:::
　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)
***
　まずは、【ニュース】です。

　ビル・アトキンソン氏、死去。

　[ビル・アトキンソン氏が死去　AppleのUIを確立した伝説的エンジニア](https://www.itmedia.co.jp/news/spv/2506/08/news022.html)

　Appleで
　　MacintoshのGUIの根幹を築き、
　　　革新的なソフトウェアを
　　　　世に送り出した
　　　　　伝説的エンジニア。

　ビル、MacPaintで、
　　コンピューターで
　　　絵を描く楽しさを
　　　　教えてくれてありがとう。

　ご冥福をお祈りいたします。
***
　次に

　OpenAIからポスト。

　[OpenAI公式ポスト](https://x.com/OpenAI/status/1931446297665695773?t=9pQ2OCwJsE-G6R0JEjcB9Q&s=19)

***（GPT-4.1翻訳）***
Advanced Voiceのアップデートを実施し、会話がこれまでよりずっと自然かつスムーズになりました。

ChatGPTのすべての有料ユーザーが利用可能です。

今回のアップデートで、Advanced Voiceは翻訳機能も強化され、停止を指示するまで複数ターンにわたり継続して翻訳を行えるようになりました。
***

　試したところ、
　　滑舌の悪い私の音声の
　　　聞き取りはできるようになった。
　　　　以前は全然だった。

　しかし、
　　聞き取りができても
　　　会話にならない状態。

![Screenshot_20250608-084242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/abaa12c9-c12e-4fd0-b7fa-4355c3cef047.png)


　ほかの方は
　　うまくいっているみたい。

　何が悪いのか、
　　不明である。
***
　次に

　[小中学生の39.7％が勉強や宿題にAIを利用、「ChatGPT」の利用経験のある小学生は50.7％に上る【ニフティ調査】](https://edtechzine.jp/article/detail/12561)

　数字からいけば驚きだが、
　　“子ども向けサイト”での
　　　アンケートなので
　　　　統計的にはなんとも言えません｡

　　このサイトに来る子どもは
　　　ネットを自然と使えるだろうから
　　　　当然、AIの情報も
　　　　　それなりに得られる。

　もちろん、
　　これだけの子どもたちが
　　　生成AIを使っていて、
　　　　このサイトを利用しない友達に
　　　　　情報を広げていることも
　　　　　　考えられる。

　とすれば、
　　彼ら子どもたちは成長して
　　　生成AIを使いこなして
　　　　社会へと出ていくことになる。

　果たして
　　企業は受け入れることが
　　　できるのだろうか？

　また、
　　子どもたちは
　　　企業への就職を
　　　　求めるのだろうか？
***
　では、【本題】です。

　今回は、
　　生成AI（ChatGPT含む）の
　　　話が身近で出てきたことの
　　　　ご報告。

　先日、
　　カクテルバーで飲んでいたら、
　　　マンション売買の話が
　　　　ほかのお客とマスターとの
　　　　　あいだでされていました。

　そこに出てきたのが、
　　住んでいる部屋を撮影して
　　　それをまっさらの状態にして
　　　　あちこちに家具を配置して
　　　　　購入希望者に見せることが
　　　　　　できる、という話。

　まぁ、
　　数年前の話らしい。

　大手の不動産屋がやっていた
　　サービスのようですね。
　　　私もニュースで特集されていて
　　　　見ていたことがあります。
　　　　　そのときはヘッドギアを
　　　　　　付けての仮想空間での
　　　　　　　ものだったかな。

　当時のパソコンと
　　ソフトウェアですから
　　　AIも使われていなかったかも。

　今は、ChatGPTでも
　　多少のことが簡単にできます。

　専用の画像生成AIになれば
　　造作もないことでしょう。
　　　しかもスマホカメラで済む。
***
　また、別のお客ふたりが
　　ゲームの話に興じていて、
　　　ファイナルファンタジーの話に。

　“スマホでできないかな〜”とは
　　言うけれど、一向にスマホで
　　　検索しようとしないのを見て、
　　　　Google世代（30代前半）なのに
　　　　　なぜ検索しないのかと
　　　　　　思いもしました。

　　私はその場で
　　　Perplexityで検索してましたが😅

　まぁ、酔っ払っていますから
　　そこまで気がまわらないのかも
　　　しれませんね。
***
　歩いていたり
　　カフェでお茶したり
　　　お酒を飲んでいるときに
　　　　“ChatGPT”という声が
　　　　　聞こえるようになりました。

　学生だったり
　　おじいちゃんおばあちゃんだったり｡

　サラリーマン・OLの声が
　　聞こえないけど。
　　　仕事の話で手一杯なのかも。

　ちなみに
　　おじいちゃんおばあちゃんは
　　　老人会的な集まりで
　　　　楽しんで使っているみたい。

　飲み友達は
　　肉体労働者だったり
　　　ゴリゴリのSEだったりで、
　　　　話を向けてもそれっぽい話を
　　　　　するだけで、物足りません😅

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

　ならんか😅

　今回は、ここまで。
【Ruby】使える正規表現の一覧と意味まとめ

## はじめに
正規表現（RegExp）は、文字列のパターンを扱うための強力な手段です。  
Rubyでも `/pattern/` の形式で書くことでRegExpオブジェクトが生成され、文字列検索・抽出・置換などに活用されます。

ここでは、よく使う正規表現の構文を一覧で紹介します。

## 基本構文一覧

| 正規表現 | 意味・説明 |
|----------|------------|
| `.`      | 任意の1文字（改行を除く） |
| `*`      | 直前の文字の0回以上の繰り返し |
| `+`      | 直前の文字の1回以上の繰り返し |
| `?`      | 直前の文字の0回または1回 |
| `\|`      | OR（A または B） |
| `()`     | グループ化（キャプチャ） |
| `[]`     | 任意の1文字を指定（文字クラス）例: `[abc]` は a か b か c |
| `[^]`    | 否定の文字クラス 例: `[^abc]` は a, b, c 以外 |
| `{n}`    | 直前の文字のn回の繰り返し |
| `{n,}`   | n回以上の繰り返し |
| `{n,m}`  | n回以上m回以下の繰り返し |

## アンカー（位置指定）

| 正規表現 | 意味 |
|----------|------|
| `^`      | 行の先頭 |
| `$`      | 行の末尾 |


## 特殊文字（エスケープ付き）

| 正規表現 | 意味 |
|----------|------|
| `\d`     | 数字（0〜9） |
| `\D`     | 数字以外 |
| `\w`     | 単語文字（英数字とアンダースコア） |
| `\W`     | 単語文字以外 |
| `\s`     | 空白（スペース、タブ、改行など） |
| `\S`     | 空白以外 |
| `\t`     | タブスペース |

## Rubyでの使い方例
### `=~` を使ったマッチ位置の確認
マッチした場合は位置（インデックス）が返り、マッチしないと nil。

```ruby
"abc123" =~ /\d+/        # => 3（3文字目に数字が登場）
"abc" =~ /\d+/           # => nil（マッチなし）
```

### `String#[]`を使ったマッチ部分の抽出
```ruby
"2025-06-08"[/\d{4}/]     # => "2025"（4桁の数字にマッチ）
"hello123"[/\d+/]         # => "123"
```

###  `sub`/`gsub`を使った置換
- `sub:` 最初にマッチした部分だけ置換
- `gsub:` マッチしたすべての部分を置換
```ruby
"hello123".sub(/\d+/, "")   # => "hello"（最初の数字だけ除去）
"hello123world456".gsub(/\d+/, "-") # => "hello-world-"
```

### `scan`で複数のマッチを配列で取得
- `scan:` 文字列の中から パターンに一致する部分をすべて探して、配列として返すメソッドです。
```ruby
"abc123def456".scan(/\d+/)   # => ["123", "456"]
"2024/12/31 2025/01/01".scan(/(\d{4})\/(\d{2})\/(\d{2})/)
# => [["2024", "12", "31"], ["2025", "01", "01"]]
```

## まとめ
正規表現は、文字列の中から特定のパターンを見つけたり、置き換えたりする強力なツールですが、少し慣れが必要です。