OmniAICreator/Qiita-1.07M huggingface dataset:
Microsoft Build 2025 まとめ

# Microsoft Build 2025

## 🧠 NLWeb：ウェブをAIアプリに変える

**NLWeb** は、既存のウェブサイトを簡単に AI アプリ化できるオープンプロジェクトであり、Schema.org などの構造化データとLLM（大規模言語モデル）を組み合わせて、サイトの内容を自然言語で検索・対話できるようにするものです。

### 主なポイント

- **NLWeb の目的**：どんなサイトでも AI アシスタントのように対話型で利用できるようにする。
- **[MCP](https://qiita.com/yuito20030123/items/027e0fed1ad8964fa338)（Model Context Protocol）との統合**：AI エージェントとの通信が可能で、サイトは単なる情報提供だけでなく、会話型 UX を実装できる。
- **導入の簡単さ**：MIT ライセンスのオープンプロジェクトとして提供され、技術要件に依存しないため、どんな OS や LLM でも利用可能。
- **サイト運営者の主導権**：検索エンジンではなく、サイト側が自前のデータや LLM を活用しながら、AI チャットボットを簡単に実装できる。
- **採用実績**：O'Reilly、Tripadvisor、Shopify などの企業がすでに導入検証を進めている。

この技術は、HTML の登場がウェブを文書共有の場に変えたように、AI 時代のウェブにも大きな変革をもたらす可能性があると考えられています。

この記事では、**Microsoft Build 2025** における **Azure関連の最新アップデート** について紹介されています。以下が主なポイントです。

## ☁️ Azure AI 関連アップデート

- **最新AIモデルの追加**：Grok 3（xAI）、Flux Pro 1.1、Sora（プレビュー）など最先端AIモデルが **Azure AI Foundry** で利用可能に。
- **モデルルーター**：プロンプトごとに最適なモデルを選択し、品質とコストを最適化。
- **マルチエージェントのオーケストレーション**：異なるAIエージェントが協力して複雑な業務フローを処理。
- **エージェント型検索（Agentic Retrieval）**：LLMを活用した質問分解・並列検索で、より精度の高い回答を生成。

## 📊 データベース＆分析の進化

- **Cosmos DBのFabric統合**：エンタープライズ向けNoSQLデータをMicrosoft Fabricで一元管理可能に。
- **Azure Databricks × AI Foundry連携**：Sparkジョブやデータを活用し、AIエージェントを簡単作成。
- **Power BIの強化**：「データとの会話」機能の拡充で、Copilot Studioを活用したカスタムエージェント構築が可能に。
- **SQL Server 2025（プレビュー）登場**：セマンティック検索や生成AI連携を標準搭載。

## 🔐 セキュリティ＆運用の強化

- **常時可視化（Observability）**：エージェントの推論ログや使用状況をリアルタイムでモニタリング。
- **エージェントのID管理強化**：Microsoft Entra Agent IDを活用し、権限管理を厳格化。
- **Foundry Local**：Windows/Mac上でAIモデルをローカル実行可能、ネット接続が不安定な環境でも利用可能。

## 🏭 Azure AI Foundry：マルチモデル時代の基盤

- **Grok 3（xAI）やFlux Pro 1.1などの最新AIモデルが追加**。
- **Model Router** により、プロンプトごとに最適なAIモデルを選択可能。
- **マルチエージェントのオーケストレーション** で複雑な業務フローを処理。

## 🤖 Copilot の進化と業務自動化

- **Microsoft 365 Copilotのチューニング機能** で企業独自の業務知識を学習可能に。
- **Copilot Studioの強化** により、ノーコード・ローコードで高度なAIエージェントを構築。
- **GitHub Copilot Agent Mode** でコードのリファクタリングやバグ修正をAIに委任。

## 🔍 検索技術の革新：Agentic Retrieval

- **Azure AI SearchのAgentic Retrieval Engine** により、検索エンジンがユーザーの意図を深く理解し、最適な検索戦略を自動実行。

## 🎉 サプライズ発表：Sora API & Microsoft Discovery

- **OpenAIの「Sora API」がAzureで提供予定**。
- **Microsoft Discovery** で科学研究のプロセスをAIが支援。

## 🛠 Power Platformの新機能

<iframe width="560" height="315" src="https://www.youtube.com/embed/FA9qSWwrcRg?si=38TnOBEmUQLFvOGX" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 🔗 参考サイト

- [Microsoftが新発表した「NLWeb」とは何か？](https://zenn.dev/galirage/articles/what-is-nlweb)
- [Introducing NLWeb: Bringing conversational interfaces directly to the web - Source](https://news.microsoft.com/source/features/company-news/introducing-nlweb-bringing-conversational-interfaces-directly-to-the-web/)
- [【速報】Microsoft Build 2025 Azure関連 注目アップデートまとめ](https://zenn.dev/yyteam/articles/2025-microsoft-build-azure)
- [【現地最速速報】Microsoft Build 2025 の激選Key Topics【AIまわり】🚀](https://zenn.dev/chips0711/articles/a923c7b9fc9869)
- [Microsoft Build 2025の新発表まとめ【30選】](https://zenn.dev/galirage/articles/microsoft-build-2025)
cf4.c The C Puzzle Book

職業訓練
https://qiita.com/kaizen_nagoya/items/95368b63fa21d64271ec

Programmer, Day 6
https://qiita.com/kaizen_nagoya/items/632d8f191268e88eb86a

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識, error(21), coding(28)
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

The C Puzzle Book
https://efrei.poupa.net/Programmation%20en%20C/Cours/The_C_Puzzle_Book.pdf

defs.h "The C Puzzle Book"
https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9


```c:cf4.c
#include<stdio.h>

char input[] = "SSSWILTECH1\1\11W\1WALLMP1";


int main()
{

        int i,c;

        for(i=2; (c = input[i]) != '\0'; i++)
        {
                switch(c)
                {
                        case 'a':putchar('i'); continue;
                        case '1':break;
                        case 1:while( (c = input[++i]) != '\1' && c != '\0' );
                        case 9:putchar('S');
                        case 'E': case 'L': continue;
                        default: putchar(c); continue;
                }
                putchar(' ');
        }
        putchar('\n');
}
```

```shell-session:bash
$ gcc cf4.c
$ ./a.out
SWITCH SWAMP
```
論理演算子 Python・C++・Java・JavaScriptの違い

Python・C++・Java・JavaScript の4言語における **代表的な論理演算子** の違いは論理演算子（OR、AND、NOT）の言語別比較を**表形式**でまとめました：


| 論理演算子   | Python | C++  | Java | JavaScript |   
| ------- | ------ | ---- | ---- | ---------- | 
| **OR**  | `or`   | `\|\|`   |  `\|\|`    | `\|\|`        | 
| **AND** | `and`  | `&&` | `&&` | `&&`       |   
| **NOT** | `not`  | `!`  | `!`  | `!`        |  

Pythonは自然言語に近い構文（`and`, `or`, `not`）を使う一方、C++やJava、JavaScriptは**記号的な構文**（`&&`, `||`, `!`）を用いる傾向があります。

参考資料：
- [Python 論理演算子](https://docs.python.org/ja/3.13/reference/expressions.html#boolean-operations)
- [javascript 論理演算子](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Logical_AND)
- [Java 論理演算子](https://docs.oracle.com/cd/F25597_01/document/products/wlevs/docs30/epl_guide/operators.html#wp1015585)
- [C++ 論理演算子](https://learn.microsoft.com/ja-jp/cpp/cpp/cpp-built-in-operators-precedence-and-associativity?view=msvc-170#c-operator-precedence-and-associativity-table)
※：C++では通常、`&&`, `||`, `!` を使うのが一般的・主流です。代替手段として、`and`, `or`, `not` は使えるけどレアという認識でOKです。
「AWKを教えて下さい。htmlのコメント箇所を表示して。」をAI先生ヘ。  





# (本日の)ChatGPT先生へ
#### (以下回答抜粋)
・方法2：複数行コメントにも対応（やや高度）
```awk
awk '
/<!--/ { inside=1; comment=$0 }
/-->/ {
  if (inside) {
    print comment ORS $0
    inside=0
    comment=""
  }
  next
}
inside { comment = comment ORS $0 }
' ファイル.html
```
・省略

# Gemini先生へ

# copilot先生へ

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

https://qiita.com/mrrclb48z/items/b6351b48e47bcf6265c0

# いつもと違うおすすめです。
#### Qiita内

https://qiita.com/mrrclb48z/items/e8c6883745d759b20ae6

https://qiita.com/mrrclb48z/items/18eda101fa5d98b2ebd2
docker または container desktopの起動エラー、「Could not resolve IP addresses for Host Entry Mode=Wsl」の解決方法

 このページは現象①②③④を満たしている場合の解決方法

#### 現象

① container desktopの起動が途中で STOPPED になり、エラーログに
`「Could not resolve IP addresses for Host Entry Mode=Wsl」`
と言うメッセージが表示される。

② container desktopのポップアップで`「could not initialize and start the daemon」`と言うメッセージが出る。

原因が同じでもcontainer desktopの設定次第でメッセージが変わる可能性あり。メッセージの内容が異なる場合でも、④の条件を満たしているなら同じ解決方法を試すことをおすすめ。

③ Windows Powershellで`wsl -l -v`コマンド入力で確認したUbuntuのステータスがStoppedになっている

また、`wsl --install`コマンドを実行してもエラーが起こるか、UbuntuがStoppedのまま。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043411/d2333d89-ce03-4eeb-8806-479bdbe54ea8.png)

**④ WSLのインストールディレクトリに「system.vhd」が存在しない。**

一番重要。絶対条件。

ディレクトリは一般的には `C:\Program Files\WSL`





#### 原因

**WSLの「system.vhd」ファイルが勝手に削除されたことが原因。**

なぜファイルが消えるのかは不明。
自分の周りではWindowsのアップデート後にファイルが消えるケースが多かった。
ファイルが消えたため、WSLが起動しなくなり、container desktopも起動しなくなる。



#### 解決方法

要は、消えた system.vhdファイルをまた配置すればいい。

ではsystem.vhdファイルはどこから持ってくるのか？

microsoftのGitHubの最新インストールファイルから抽出する。

##### 手順１

https://github.com/microsoft/WSL/releases 

上記リンクから `wsl.{バージョン名}.x64.msi`をダウンロードする。

＊x64のパソコンを使用していることを想定している

##### 手順２

ファイルを抽出するための任意のフォルダを作り、powershellで下記のコマンドを打つ。

`msiexec /a {msiファイルのパス}\{ダウンロードしたmsiファイルの名}/qb TARGETDIR={抽出したファイルを格納するためのフォルダのパス}\wsl`

作者の場合、

wsl.2.3.24.0.x64.msi ファイルを `c:\usr` と言うフォルダに配置し、`c:\usr`で 抽出を行った。
↓はその時のコマンド
 `msiexec /a c:\usr\wsl.2.3.24.0.x64.msi /qb TARGETDIR=c:\usr\wsl`

このコマンドを実行した後、`指定したフォルダ/wsl/PFiles64/WSL`にインストールファイルが全て展開され、その中に system.vhd ファイルがある。

##### 手順３

system.vhdファイルを `C:\Program Files\WSL` にコピペする。

##### 手順４

powershellで`wsl --install`コマンドを実行し、WSLを再起動する。

`wsl -l -v`コマンドでUbuntuのステータスがRunningになることを確認。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043411/f181dc50-99c7-4f74-953e-2f5355d18b3b.png)

##### 手順５

終わり。あとは 今まで通り docker を使えるはず。



 因みに、他のパソコンからsystem.vhdファイルを送ってもらいダウンロードして `C:\Program Files\WSL`に配置しても解決することを確認。(クラウドにファイルをアップロードし、同じエラーが出るパソコンにvhdファイルをダウンロードさせたら解決した)



#### 参考

https://zenn.dev/masinc/articles/9c93db64af5f47 

https://github.com/microsoft/WSL/issues/11069
VSCodeでMarkdownの入力補完をする方法

## はじめに

業務でMarkdownとMermaidを使用するようになり、入力補完が出なくて不便だと思いました。
そこでVSCodeの設定を入力補完が出るように変更したがその際躓いた箇所を書き留めておく。

## editor.quickSuggestions

「Markdown 入力補完」で検索すると

```json:settings.json
    "[markdown]": {
        "editor.quickSuggestions": true
    }
```

をsettings.jsonに設定する方法が出てくる。
しかし現在（2025/05/28）だと「型が正しくありません。 "object" が必要です。」とエラーが出る。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4097244/584ce4c9-7635-4a5f-9e18-24ef684ab8b8.png)

どうやら現在はこの形が正しいらしい。
```json:settings.json
    "editor.quickSuggestions": {
        "other": true,
        "comments": false,
        "strings": false
    }
```

各設定項目の内容としては
| 項目| 内容 |
|:-:|:-|
| other  | 文字列およびコメント外でクイック候補  |
| comments  | コメント内でクイック候補  |
| strings  | 文字列内でクイック候補  |

基本はotherをtrueにしておけば問題なさそう。
コミュニケーションのポイントについてメモ

研修にて学んだコミュニケーションのポイントをざっくりまとめてみた、というものです。

# はじめに

結論としては、**「相手の立場に立つ」が全てに通じている**と考えます。
まあコミュニケーションは**相手ありきのもの**なので…というのと、いかに相手に**伝わる**かが重要になってくるという話を聞いたからです。
相手のことを考えられれば何が必要なのかがわかるとかいうことなんだろうと思います。

# 具体例

<dl>
    <dt>分かりやすく簡潔に</dt>
    <dd>
    <strong>3点要約法</strong>、<strong>4ステップ法</strong>、<strong>5W1H(2H)</strong>などの型があるので活用する。<br>
    とはいえぶっつけ本番で当てはめるのは難しいので<strong>予め準備をしておく</strong>。<br>
    
(偶に、準備をしなくてもできる超人がいることもある。すごい。)
<br>
    </dd>
    <br>
    <dt>結論から話す</dt>
    <dd>
    言い換えれば<strong>相手が1番知りたいことから話しましょう</strong>、ということ。<br>
    脱線防止にもなる。<br>
    ただ、これも予め何を1番に伝えるべきなのかはっきりさせておくなど準備が要る。<br>
    </dd>
    <br>
    <dt>否定表現を避ける</dt>
    <dd>
    使って得になるケースは<strong>ほぼない</strong>とのこと。苦労話も同様。<br>
    言葉の感じからしてポジティブな方がなんとなく良く捉えられそう、というのは感覚的に分かるかもしれない。<br>
    </dd>
    <br>
    <dt>曖昧な表現を避ける</dt>
    <dd>
    保険をかけたりとかもしない。
    あと出来れば<strong>数字とか図表</strong>が使えると良い。<br>
    </dd>
    <br>
    <dt>事実と意見を分ける</dt>
    <dd>
    ごちゃまぜになると分かりづらくなってしまう。<br>
    報告等の際は<strong>基本事実のみを伝える</strong>。<br>
    自分の意見を添えたい時は「私の意見ですが…」と断りを入れるのが良い。<br>
    </dd>
    <br>
    <dt>タイミングや時間を意識する</dt>
    <dd>
    手の空いてそうなタイミングをはかる、長すぎる報告は避ける、など。<br>
    これが出来ないと対応を後回しされるような要因になりうる。<br>
    とはいえ、報告に関しては早けりゃ早いほど良いという側面もあるのでケースバイケースではある。<br>
    相手の都合で確認してもらえるチャットやメールの活用も選択肢の一つ。<br>
    この場合も一応一声かけておくのが良いとされる。<br>
    </dd>
    <br>
    <dt>はっきりゆっくり</dt>
    <dd>
    そもそも声が小さかったら聞こえない。<strong>口を大きく開ける意識</strong>をする。<br>
    語尾や言い終わりまで丁寧にすることも有効。<br>
    </dd>
</dl>

# おわりに
書いた手前で言うのもおかしな話ではありますが、こんなの一朝一夕でどうにかなるわけない、そもそもそんなの考える余裕なんてないというのが現時点での正直な感想です。
とはいえ避けては通れない道でもあるので、新卒の看板を背負ってるうちにトライアンドエラーを繰り返すしかないんだろうな…
初めてのLinuxで疑問に思ったこと+基本のまとめ

# はじめに
　文系出身未経験で新卒の私は研修で初めてLinux、CUI操作に触れました。学んだことの整理も兼ねて初心者目線で疑問に思ったことと絶対に覚えておくべきと学んだことをまとめました。


# 疑問点のまとめ
##### そもそもサーバーとは？
サーバーとはサービスを提供するコンピュータのこと。
「役割」として捉えると、サービスや機能を提供する側のコンピュータを指す。
「機器」として捉えると、サーバーとして使うためのコンピュータを指す。

##### Linuxとは？
幅広い用途に使われるOS。オープンソースで誰でも自由に無償で利用できる。
世界中でサーバ用途として広く利用されており、信用性が高い。

##### CUIとは？なぜCUIで操作するのか？
CUIとはコマンドで操作するインターフェース。
CUIはマシンにとってわかりやすい、負荷が低く開発に向いている、無料であるなどのメリットがある。

##### カーネルとは？
OSの中核となる部分のこと。

##### シェルとは？
人とカーネルの間でコマンドを受け付けてくれるプログラム。


# 基本のまとめ
#### 基本のコマンド
` pwd ` カレントディレクトリを表示する
` cd ` カレントディレクトリを変更する
` ls `　ディレクトリ内のファイルを表示する
` mkdir ` ディレクトリを作成
` touch ` ファイルを作成
` rm ` ファイルとディレクトリを削除
` cat ` ファイル内容を表示
` less ` スクロールを表示する
` cp ` ファイル、ディレクトリをコピー
` mv ` ファイルを移動
` chmod <ugoa><+-=><rwx> <ファイル名> ` ファイルやディレクトリのパーミッションを設定する
` sudo ` スーパーユーザーでしか実行できないコマンドを実行するために使用する
` ps ` メモリ上で実行状態にあるプロセスを確認する
` | `パイプ、コマンドの出力結果を別のコマンドの標準入力として渡す
` wc `行数、文字数を数える
` > `リダイレクト、コマンドの入出力先を変更する
` tee ` 標準入力をファイルの出力する
` grep ` 文字列を検索する
` tar ` ファイルをアーカイブする、展開する
` gzip ` ファイルを圧縮する
作業する上でディレクトリ移動と確認は必須操作になる。
**作業をするときはpwdで必ず確認すること！**

##### Tabキーの活用
Tabキーによって正誤判定ができる。例えばファイル名が長いときなどに便利。


### viの編集操作
` :q `　vimを強制終了できる
` :w ` ファイルを上書き保存する
以上のコマンドを合わせて実行することもできる。
` :wq ` 上書き保存して終了

##### uを使うと、、、
uは(Ctl+z)と同じ効果を発揮する。間違えたときに使うと楽。


# おわりに
　この研修を通してCUI操作の難しさを感じたと同時に面白くやりがいのある分野だと知ることができました。今回、サーバーの基礎の基礎を学んだことを皮切りに、実際に手を動かしてサーバーについてさらに学んでいきたいと思います。
【超入門】Pythonで覚えたい概念＆関数

# はじめに
　Pythonは初心者でも使いやすいプログラミング言語です。私も学生の頃や新卒研修で学びました。その時に重要だと思った概念や関数を紹介します。
　本編の前におすすめのPythonを実行できるサービス紹介します。それはGoogle Colaboratoryです。こちらはサイト上でPythonを実行することができ、Googleアカウントを持っていれば気軽に使うことができます。今回のサンプルコードの実行にはこのGoogle Colaboratoryを使いました。
 
 https://colab.research.google.com/?hl=ja

# 覚えたい概念
　ここでは覚えておいた方がいい概念について紹介していきます。
## インデントについて
　インデントとは、プログラムの段落のことです。Pythonではこの段落で処理が分かれているため、重要になっています。Python以外の言語でインデントがなくても動くものはありますが、インデントがないととても読みにくくなります。なのでインデントを揃える練習をしておきましょう。
 
## 変数について
　変数とはデータを入れる箱のようなものです。数学でいうxとかyとかになります。数学だと基本的に数値しか入れませんが、プログラミングだと文字なども入れられます。

## データ型について
　データには種類があり、文字や数値などがあります。コンピュータは同じ数字の1でもデータ型が違うと全く違うものとして認識します。Pythonではデータ型を自動的に分けてくれますが、意識していないとエラーの発生につながります。

 ```py:データ型の違いで起こるエラー
a = "1"  #""で挟むと文字型となる
b = 2    #何も入れないと数値となる

print(a + b)  #aとbの足し算を出力しようとしている
```

```:結果
TypeError: can only concatenate str (not "int") to str
```
　実行するとTypeErrorと出てくると思います。このエラーはデータ型が違うというエラーです。Aと1の足し算ができないような感じです。
 
# 覚えたい関数
　ここでは基本的な関数を紹介していきます。
　まず、関数とはパソコンに対しての命令文です。print()やinput()などが挙げられます。また、この記事では説明しませんが(少し難しい為）、ユーザーが自分で作れるユーザー定義関数もあります。この関数は自分で好きな処理を入れられます。

## print()
 print()は()内を出力します。"で挟むと文字,何もつけないと数値や変数の中身などが出力されます。

```py:書き方
#文字や数値を出力する場合
print("Hello World")
print(2)

#変数を出力する場合
a = "HELLO WORLD"
b = 3
print(a)
print(b)
```

```:結果
Hello World
2
HELLO WORLD
3
```

　ここでの出力結果は1～2行目が文字列と数値の出力で、3～4行目はa,bという変数に入った物を出力しています。

## input()
 input()は特定の変数に文字を入力します。()内は入力するときの説明を入れることが出来ます。
 
```py:書き方
a = input("入力してください->")
print(a)
```
```:結果1
入力してください->a
a
```
```:結果2
入力してください->abc
abc
```
 結果2のように複数の文字を入れることもできます。

::: note warn
注意
input()関数は数字でも文字として入力されるため、数字を入力して計算をしたい場合は次で説明するint()関数を併用する必要があります。
:::

## int()
 int()は特定の変数を数値に変えます。()内は基本的に数字になります。

```py:使用例
#aに文字として1を入れる
a = "1"
b = 2

#aを文字から数値に変換してbと足した結果を出力
print(int(a) + b)
```
```:結果
3
```
　データ型で行ったときはTypeErrorとなったプログラムが数値に変換するint()関数を使用したため、数値の計算結果が出力されています。
### input()とint()を併用する場合
　前述したようにinput()で入力された文字や数字はすべて文字型となっているため、数値にする時よく併用されます。

```py:input()との併用例
a = input("aに入力してください->")
a = int(a)
b = int(input("bに入力してください->"))


print(a + b)
```
```:結果
aに入力してください->1
bに入力してください->2
3
```
　こちらのプログラムは1行目でaにinput()関数で数字を入力して、2行目でaを数値にしたaで上書きしています。3行目は1～2行目で行ったことを1行にまとめています。
　

# まとめ
　今回紹介したことは以下の6つです。
<dl>
    <dt>・インデント</dt>
    <dt>・変数</dt>
    <dt>・データ型</dt>
    <dt>・print()</dt>
    <dt>・input()</dt>
    <dt>・int()</dt>    
</dl>

　この6つはPythonをやるうえで重要になってくると思うので実践しつつ覚えていきましょう。
　Pythonは初めてプログラミングする人にとっては最適だと私は思っています。Google Colabolatoryなどで簡単に実行環境が作れますし、興味がある方はやってみましょう。
cf2.c THe C Puzzle book 

職業訓練
https://qiita.com/kaizen_nagoya/items/95368b63fa21d64271ec

Programmer, Day 6
https://qiita.com/kaizen_nagoya/items/632d8f191268e88eb86a

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識, error(21), coding(28)
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

The C Puzzle Book
https://efrei.poupa.net/Programmation%20en%20C/Cours/The_C_Puzzle_Book.pdf

defs.h "The C Puzzle Book"
https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9


```c:cf2.c
#include "defs.h" //ヘッダーファイルの中身少しいじりました

int main(void)
{
        int x, y, z;

        x = y = 0;
        while (y < 10)
        {
                ++y;
        }
        x += y;
        PRINT2("d", x, y);  // OUTPUT: x = 10, y = 10

        x = y = 0;
        while (y < 10)
        {
                x += ++y;
        }
        PRINT2("d", x, y);  // OUTPUT: x = 55, y = 10

        x = y = z = 0;
        y = 1;
        while (y < 10)
        {
                x = y++;
                z = ++y;
        }
        PRINT3("d", x, y, z);  // OUTPUT: x = 9, y = 11, z = 11

        for (y = 1; y < 10; y++)
        {
                x = y;
        }
        PRINT2("d", x, y);  // OUTPUT: x = 9, y = 10

        for (y = 1; (x = y) < 10; y++)
        {
                // ループ実行のみ、x, y の最終値を確認
        }
        PRINT2("d", x, y);  // OUTPUT: x = 10, y = 10

        for (x = 0, y = 1000; y > 1; x++, y /= 10)
        {
                PRINT2("d", x, y);  // 出力が複数行：1000, 100, 10
        }

        return 0;
}
```

```shell-session:bash
value = 10      value = 10
value = 55      value = 10
value = 9       value = 11      value = 11
value = 9       value = 10
value = 10      value = 10
value = 0       value = 1000
value = 1       value = 100
value = 2       value = 10
```

```c:defs.h
// https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9
// Type by Dr. Kiyoshi Ogawa
#include <stdio.h>

#define PR(format, value) printf("value = %" format "\t", (value))
#define NL putchar('\n')

#define PRINT1(f, x1) PR(f, x1), NL
#define PRINT2(f, x1, x2) PR(f, x1), PRINT1(f, x2)
#define PRINT3(f, x1, x2, x3) PR(f, x1), PRINT2(f, x2, x3)
```
ESP32のエラー出力のアドレスから、ソースコード該当行を特定する

# メモ
参照元： https://techblog.hacomono.jp/entry/2023/06/13/110000

覚えられそうにないからメモ！

`xtensa-esp32-elf-addr2line -pfiaC -e folder/firmware.elf ADDRESS`

VSCode + platformio (pioarduino) でもできました。

# 実例
```
Guru Meditation Error: Core  0 panic'ed (Stack protection fault). 
Detected in task "loopTask" at 0x4200505c
```
みたいなときは、
```
C:\Users\uname\.platformio\packages\toolchain-xtensa-esp-elf\bin\xtensa-esp32-elf-addr2line.exe -piafC -e vscodeproject\.pio\build\m5stamp-c3u\firmware.elf 0x42004e6a
```
とかやりました。
Power Automateのメッセージボックスで改行する方法のひとつ

こんにちは。おもちです。

最近PowerAutomateの利用を始めました。
みなさん、メッセージの改行でいろいろ工夫されていますが、
私は、以下の方法で解決しました。
お役に立てば幸いです。

＜やりたいこと＞
メッセージボックスに、以下のように表示したい。
変数strAisatsu="こんにちは"、とします。
「こんにちは
　今日もがんばりましょう！」

＜方法＞
「表示するメッセージ：」欄に以下を入力。
= strAisatsu & "
" & "今日も頑張りましょう！"

＜説明＞
他の言語なら、改行を表す”\n"などで記述しますが、
その代わりに、ダブルクォーテーション２つの間に
普通に改行をして（以下のような）、
"
"
を文字列としてつなげています。
なお、変数について、皆さんは%で囲んだりされているので、
変数のところはお使いの環境に合わせてください。
低レベルテクニックすぎて、ご希望の方法でなかったら
ごめんなさい。

＜その他：メッセージボックスの幅を広くする方法＞
chasoさんのホームページhttps://prtn-life.com/blog/pad-msgbox
にあった、「幅が広がる特殊全角スペース文字」で対応しています。
chasoさん、情報元のmarronさん、ありがとうございます。

「特殊全角スペース文字（Windowsだと、漢字入力モードで
2800と入力して、”文字コード変換”を選ぶと入力される全角）を
記述する」です。
先の改行例に、もう１行この特殊全角スペース（仮に”□”と表記）を
追加した例です。
= strAisatsu & "
" & "今日も頑張りましょう！" & "
" & "□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□□"

他に、簡単でスマートな方法がありましたら、教えてください。
defs.h "The C Puzzle Book"

C Puzzle Bookの有り難み5つ、C言語規格及びCコンパイラの特性を認識, error(21), coding(28)
https://qiita.com/kaizen_nagoya/items/d89a48c1536a02ecdec9

The C Puzzle Book
https://efrei.poupa.net/Programmation%20en%20C/Cours/The_C_Puzzle_Book.pdf

```c:defs.h
// https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9
// 
#include <stdio.h>

#define PR(format, value) printf("value = %format\t",(value))
#define NL putchar("\n")

#define PRINT1(f,x1) PR(f,x1), NL
#define PRINT2(f,x1,x2) PR(f,x1), PRINT1(f,x2)
#define PRINT3(f, x1, x2, x3) PR(f,x1), PRINT2(f,x2,x3)
#define PRINT4(f,x1,x2, x3, x4) PR(f,x1), PRINT3(f,x2, x3,x4)
```



```c:defs.h
// https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9
// Type by Dr. Kiyoshi Ogawa
#include <stdio.h>
#include <stdlib.h>

#define PR(format, value) printf(#value" = %format\t",(value))
#define NL putchar("\n")

#define PRINT1(f,x1) PR(f,x1), NL
#define PRINT2(f,x1,x2) PR(f,x1), PRINT1(f,x2)
#define PRINT3(f, x1, x2, x3) PR(f,x1), PRINT2(f,x2,x3)
#define PRINT4(f,x1,x2, x3, x4) PR(f,x1), PRINT3(f,x2, x3,x4)
```

修正後
```c:defs.h
2025-06-23 16:22 小川清 #ifndef DEFS_H
2025-06-23 16:22 小川清 #define DEFS_H
#endif
// https://qiita.com/kaizen_nagoya/items/6d284651ac1244963bd9
// Type by Dr. Kiyoshi Ogawa
#include <stdio.h>
#include <stdlib.h>

#define PR(f, value) printf(#value" = %f\t",(value))
#define NL putchar('\n')

#define PRINT1(f,x1) PR(f,x1), NL
#define PRINT2(f,x1,x2) PR(f,x1), PRINT1(f,x2)
#define PRINT3(f, x1, x2, x3) PR(f,x1), PRINT2(f,x2,x3)
#define PRINT4(f,x1,x2, x3, x4) PR(f,x1), PRINT3(f,x2, x3,x4)
```
<stdlib.h>は、EXIT＿SUCCESSを定義しており追加。
rex0220 計算式プラグイン 日付・日時・時刻の最小値・最大値

[計算式プラグイン](https://qiita.com/rex0220/items/ae83c6d5ce50ff7a9a73)で、テーブルの日付・日時・時刻から最小値・最大値を取得します。

# 概要

テーブル内の日付・日時・時刻の最小値・最大値を求めてみます。
日付項目は、計算式内で数値として扱うため MAX, MIN 関数を使います。
日時・時刻項目は、計算式内で文字列として扱うため MAX_STR, MIN_STR 関数を使います。

MAX, MIN, MAX_STR, MIN_STR 関数では、未入力の項目を除外して計算します。 

※横並びプラグインで各テーブルを表示しています。

![2025-05-28_08h50_16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/b905cf01-f5d1-4fbd-ae37-d4a52b12f9ec.png)


# 計算式プラグイン設定

![2025-05-28_08h53_25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/668f07b8-6a7f-47a9-ad7c-ada7d0fced6f.png)

```JavaScript:
OPTION: 

// 日付最小値 DATE
MIN(日付)

// 日付最大値 DATE
MAX(日付)

// 日時最小値 DATETIME
MIN_STR(日時)

// 日時最大値 DATETIME
MAX_STR(日時)

// 時刻最小値 TIME
MIN_STR(時刻)

// 時刻最大値 TIME
MAX_STR(時刻)

// 日付テーブル.#:No2 NUMBER
ROWNO(日付テーブル)+1

// 日時テーブル.#:No3 NUMBER
ROWNO(日時テーブル)+1

// 時刻テーブル.#:No1 NUMBER
ROWNO(時刻テーブル)+1
```
Enhance Agentforce to Act on Data with Conversational Language 関連


質問が多いけど、資料が埋もれて見つからないので別に作ります。


https://trailhead.salesforce.com/content/learn/projects/connect-data-cloud-to-copilot-and-prompt-builder/enhance-copilot-to-act-on-data-with-conversational-language

# It looks like the Event Summary Flow element does not have the correct Value field value.

+ [Enhance Agentforce to Act on Data with Conversational Language -](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KEEXp0AP)
+ [Data Cloud と Einstein AI でステップがまだ完了していません。イベント サマリー フロー要素に正しい値フィールド値がないようです。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000SWh3w)

:::note
Please check this article. 


https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KEEXp0AP
:::
「静かな退職」は「無能な中年」予備軍？AIが開拓する会社に依存しないキャリア

近年、「静かな退職」という働き方が注目を集めています。これは、会社から求められる最低限の業務をこなし、それ以上の責任や努力を放棄する働き方を指します。ワークライフバランスを重視する現代において、一見魅力的に映るかもしれません。しかし、本当にその選択はあなたの未来にとって最善なのでしょうか？

実は、「静かな退職」が、予期せぬ形であなたのキャリアを危険に晒す可能性があることをご存知でしょうか。終身雇用の崩壊やリストラが珍しくない現代において、会社に依存した働き方はもはや安全ではありません。

本記事では、「静かな退職」がなぜ危険なのかを深掘りし、そのリスクを回避しながら個人で力強く生き抜くための具体的なスキル、特に「AIスキル」の重要性とその活用法について詳しく解説します。あなたのキャリアを自分で守り、未来を切り拓くためのロードマップを、この記事で見つけましょう。

[>> 無料で使えるおすすめの生成AIを厳選して紹介！](https://taishi-official.com/2024/09/05/2874/)



## 静かな退職とは？ – 働き方の新しい潮流、その本質
「静かな退職」とは、文字通り会社を辞めるわけではないものの、与えられた業務以上のことをしない、最低限の仕事しかこなさない働き方を指します。これは、仕事への熱意やエンゲージメントが低下し、「言われたことだけをやる」「必要以上の努力はしない」という姿勢で業務に取り組む状態を意味します。



### 「静かな退職」はなぜ生まれたのか？
この現象は、特にパンデミック以降、世界的に注目されるようになりました。過度なストレスや長時間労働、そして「仕事のために生きる」という価値観への疑問が背景にあります。社員エンゲージメントの低下、ワークライフバランスへの意識の高まり、そしてSNSを通じて広がる新しい働き方の価値観が、「静かな退職」を加速させていると言えるでしょう。

しかし、この「静かな退職」という選択は、一見すると個人の幸福度を高めるように見えて、実は長期的なキャリアにおいて大きなリスクをはらんでいます。



## 静かな退職があなたのキャリアを危うくする理由
「静かな退職」は、一見するとストレスを減らし、プライベートを充実させる賢い選択に見えるかもしれません。しかし、現在のビジネス環境において、この働き方はあなたのキャリアを深刻なリスクに晒す可能性があります。

[>> 終身雇用の幻想とリストラの現実](https://taishi-official.com/2025/05/27/3449/#toc4)

[>> スキルなき中年の悲劇：再起不能に陥るリスク](https://taishi-official.com/2025/05/27/3449/#toc5)



## 解決策：AIスキルを習得し、個人で稼ぐ力を手に入れる
「静かな退職」によって生じるキャリアリスクから身を守るためには、会社に依存しない「個人で戦えるスキル」を身につけることが不可欠です。その中でも、今最も注目すべきは「AIスキル」です。

[>> なぜAIスキルがあなたの最強の武器となるのか？](https://taishi-official.com/2025/05/27/3449/#toc7)

[>> AIを活用した具体的なアクションプラン：未来を切り拓く3つの道](https://taishi-official.com/2025/05/27/3449/#toc8)



### AIスキル習得への近道：「DMM 生成AI CAMP」で未来を掴む
AIスキルを身につけることの重要性は理解できたものの、「具体的にどう学べば良いのか？」と悩んでいる方もいるかもしれません。独学だと変化の早いAIスキルを習得するのは時間もかかり、挫折してしまうリスクもあります。そこでおすすめしたいのが、実践的なAIスキルを効率的に学べるプログラミングスクール「DMM 生成AI CAMP」です。

[>> 「DMM 生成AI CAMP」についてはコチラで詳しく解説](https://taishi-official.com/2025/03/21/3282/)



## まとめ
「静かな退職」は、一見すると心地よい響きを持つかもしれません。しかし、終身雇用が崩壊し、リストラが日常となった現代において、この働き方はあなたのキャリアを停滞させ、将来を危険に晒す可能性を秘めています。会社に依存し、「言われたことだけをやる」働き方を続けていては、いざという時に何もできない「スキルなしの中年」として、再起不能な状況に陥りかねません。

しかし、心配する必要はありません。この危機を乗り越え、むしろチャンスに変える強力な武器が「AIスキル」です。AIを使いこなす能力は、個人の生産性を飛躍的に向上させ、副業、独立、そして本業での市場価値向上といった多様なキャリアパスを拓きます。AIスキルは、もはやエンジニアだけのものではありません。どのような職種、どのような働き方を選ぶにしても、AIを理解し活用する力は、これからの時代を生き抜くための必須スキルとなるでしょう。

### おまけ

https://qiita.com/taishi_will_be/items/70a8ce8938944286b487

https://taishi-official.com/changing-engineer/


<strong>＼Follow me／</strong>

- X（旧Twitter）：https://x.com/taishi_it_blog
- Instagram：https://www.instagram.com/taishi_will_be/
- YouTube：https://www.youtube.com/@Engineer_ILLBE
- TikTok：https://www.tiktok.com/@taishi_will_be
- note：https://note.com/taishi_wii_be/

<br>

最後にいいねお願いします:thumbsup:
VS CodeでLaTeXのコンパイル方法をファイル毎に設定するには

<!-- markdownlint-disable MD041 -->

VS Codeで[LaTeX Workshop](https://github.com/James-Yu/LaTeX-Workshop)を使用している場合、`.tex`ファイルの先頭に以下のようなコメントを追加することで、レシピ ($\approx$ コンパイル方法) を指定できます。

```tex
%!LW recipe=recipe-name
```

このmagic commentは[LaTeX Workshop](https://github.com/James-Yu/LaTeX-Workshop/wiki/Compile#latex-recipes)のWikiに記述されています。**ただし、記事後半に記した[注意点と代替手段](#注意点と代替手段)もあるため、使用する際は注意が必要です。**

また、他にもいくつかmagic commentがありますが、それらは非推奨のようです。詳しくは[Wiki](https://github.com/James-Yu/LaTeX-Workshop/wiki/Compile#latex-recipes)の当該箇所をご覧ください。

## 詳細な説明

一例として、検索上位に来るLaTeXの[環境構築記事](https://zenn.dev/hash_yuki/articles/31855fbdb5fdf7
)で使われているレシピを使い分けます。

以下がレシピの引用ですが、これら2つのレシピを登録しているとします。

```json
// ......(中略)......
    //latexmkのビルドレシピ
    "latex-workshop.latex.recipes": [
        //bibTexを使用しない場合のレシピ
        {
            "name": "ptex2pdf (uplatex)*2",
            "tools": [
                "ptex2pdf (uplatex)",
                "ptex2pdf (uplatex)"
            ]
        },
        //bibTexを使用する場合のレシピ
        {
            "name": "ptex2pdf (uplatex) -> bibtex -> ptex2pdf (uplatex) *2",
            "tools": [
                "ptex2pdf (uplatex)",
                "pbibtex",
                "ptex2pdf (uplatex)",
                "ptex2pdf (uplatex)"
            ]
        }
    ],
// ......(中略)......
```

この内容を当該記事のように設定することで、下図のように複数のレシピが登録されます。

<img width=100% src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/905155/c5a319fd-9c04-430f-9a2c-9493aaa4c896.png" alt="recipes">

`latex-workshop.latex.recipe.default`という[設定](https://github.com/James-Yu/LaTeX-Workshop/wiki/Compile#latex-workshoplatexrecipedefault)でデフォルトの"first"を指定していると、これらレシピのうち、先頭にある`ptex2pdf (uplatex)*2`がautoBuildにおいて使われます。

一応、この設定で`lastUsed`を指定すると、`LaTeX Workshop: Build with recipe`コマンドで最後に使用されたレシピが選択されますが、自由度は低いです。

そこで、基本は前者のレシピを使いながら、ある特定のファイルでは後者のレシピを使いたい場合、以下のように`.tex`ファイルの先頭にmagic commentを追加します。

```tex
%!LW recipe=ptex2pdf (uplatex) -> bibtex -> ptex2pdf (uplatex) *2

\documentclass[a4paper,12pt]{jlreq}

\title{サンプル}
\author{Hiroki Hamaguchi}

\begin{document}
\maketitle

常にbibtexを走らせたい\cite{sample}。

\bibliographystyle{jplain}
\bibliography{sample}

\end{document}
```

すると、確かにこのレシピが使用され、ファイル毎にレシピを使い分けられます。

## 注意点と代替手段

注意として、

* localにしかレシピ名を保存しない場合に**環境に依存するtexファイルが増える**
* localの場合でもファイルを移動する際に**settings.jsonと一緒にしないと壊れる**
* 仕様を知らない人とファイル共有をすると**バグの原因になる**

などの欠点も存在します。

また、**より簡潔に正攻法で解決できる場合にはmagic commentを使う必要はありません**。

例えばTikZでは、

```tex
\documentclass{standalone}
```

を`ptex2pdf`でコンパイルすると正しく表示されないことがある一方、`pdflatex`でコンパイルすると正しく表示されることがあります。

この場合、`%!LW recipe=`で`pdflatex`を指定することも可能ですが、

```tex
\documentclass[dvipdfmx]{standalone}
```

とすれば`ptex2pdf`でも正常にコンパイル可能です。

## 有効なシナリオ

上記の欠点こそあるものの、この機能は様々なシチュエーションで便利かと思います。

例えば、やはり**図や数式などを単体で出力する**ような、Overleafにもアップしない補助的な役割を果たす`.tex`ファイルを作成する場合や、学会や出版社側からの指定で**特定のdocument classやレシピを使用する必要がある場合**などが最も有効そうなシナリオだと思います。

特に、latexmkrcを使っても`%!LW recipe=`と似たようなことは達成可能のようですが、そのような曲芸に比べれば遥かに簡潔で汎用的だと思います。このようなmagic commentの存在を把握しておくこと自体に損はないと思われます。

## 最後に

本記事が`%!LW recipe=`の周知および、快適なLaTeX生活の一助になれば幸いです。
ChatGPTを使用したアプリ開発記【ヘッダーをモバイル最適化】

## コード
``` Header.js
<header className="fixed top-0 left-0 z-50 w-full bg-white shadow-md px-4 py-2">
  <div className="max-w-screen-lg mx-auto flex flex-wrap items-center justify-between gap-y-2">
    {/* ロゴ */}
    <div
      className="flex items-center space-x-2 cursor-pointer"
      onClick={() => navigate('/')}
    >
      <img
        src="/Tomomitsu_keruma_SNS_logo.png"
        alt="SNS Logo"
        className="h-10 w-auto"
      />
      <h1 className="text-lg sm:text-xl font-bold text-gray-700 whitespace-nowrap">
        Tomomitsu SNS
      </h1>
    </div>

    {/* プロフィール・操作 */}
    <div className="flex items-center gap-2 sm:gap-4 flex-wrap sm:flex-nowrap">
      <img
        src={profilePhotoURL}
        alt="アイコン"
        className="w-9 h-9 rounded-full border"
      />
      <span
        className="text-blue-600 font-medium text-sm sm:text-base cursor-pointer hover:underline"
        onClick={() => navigate(`/profile/${currentUserId}`)}
      >
        {profileName}さん
      </span>

      {/* ログアウトボタン */}
      {user && (
        <button
          onClick={handleLogout}
          className="bg-blue-500 text-white text-sm px-3 py-1.5 rounded-xl hover:bg-blue-600 transition shadow"
        >
          ログアウト
        </button>
      )}
    </div>
  </div>
</header>
```
変更点|内容
|-|-|
h-14 → h-10|ロゴ画像の高さをモバイル向けに調整
text-xl → text-lg|ロゴ文字をやや小さくしてレイアウト圧縮
flex-nowrap → flex-wrap|スマホで要素が横に収まりきらない時に折り返し
gap-y-2|モバイルで要素間に縦の余白を追加
text-sm|ユーザー名とボタンの文字サイズ縮小



## モバイルUI

![IMG_7427.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1058366/d5545f29-a794-43ff-a6f8-49f2c011e7b6.jpeg)
プロデル、調査

# 概要
プロデルが、CLRらしいので、調べて見た。
開発言語比較やってみた。

# 開発言語比較
プロデル最強。
|言語	            |プロデル|mind	|c#	|javascript	|elixir	|vbs
|:-|:-|:-|:-|:-|:-|:-|
|日本語で書ける。	|〇	|〇	|×	|×	|×	|×
|exeが作れる。	    |〇	|〇	|〇	|×	|×	|×
|win32apiが簡単に呼べる。	|〇	|〇	|〇	|×	|×	|×
|jsonパーサ	        |〇	|×	|〇	|〇	|〇	|×
|正規表現エンジン	|〇	|×	|〇	|〇	|〇	|〇
|ソケット	        |〇	|弱い	|〇	|〇	|〇	|×
|gui	            |〇	|×	|〇	|〇	|×	|×
|ActiveXが簡単に呼べる。	|〇	|×	|×	|×	|×	|〇
|データーベース	|〇	|×	|〇	|〇	|〇	|〇
|乱数	|〇	|×	|〇	|〇	|〇	|〇
|使い所	|all	|rpa	|exe	|web	|embedded	|rpa


以上。
【Python初心者】async forで繰り返す？非同期イテレータのしくみと使い方をやさしく解説

Pythonで `async` や `await` を学んでいるときに、`async for` という構文を見かけて「これ何だろう？」と気になった方もいるかもしれません。  
この記事では、**非同期イテレータとは何か**、そして**async for の使い方**について、自分の学習記録として整理してみました。

## 🔍 async for とは？

`async for` は、**非同期イテレータ（asynchronous iterator）** をループ処理するための構文です。  
普通の `for` との違いをまとめると、こんな感じです：

| 構文        | 対象                   | 特徴                                |
|-------------|------------------------|-------------------------------------|
| `for`       | イテラブル／イテレータ | 同期処理                            |
| `async for` | 非同期イテレータ       | 非同期処理（途中で await を挟める） |

たとえばチャットメッセージやAPIからのストリーミングデータのように、**順に届く値を待ちながら処理するような場面**で使われます。

## 🧠 非同期イテレータとは？

非同期イテレータは、以下の2つのメソッドを持ったオブジェクトのことです：

- `__aiter__(self)`  
  非同期イテレータ本体を返す（＝自分自身を返すことが多い）
- `__anext__(self)`  
  非同期で次の値を返す（終わったら `StopAsyncIteration` を送る）

これを満たすクラスを作れば、`async for` で繰り返し処理ができるようになります。

## 🔧 非同期イテレータの例

1秒おきにカウントアップする非同期イテレータのコードの例です。

```python
import asyncio

class AsyncCounter:
    def __init__(self):
        self.count = 0

    def __aiter__(self):
        return self

    async def __anext__(self):
        if self.count >= 3:
            raise StopAsyncIteration
        await asyncio.sleep(1)
        self.count += 1
        return self.count
```

### 📝 ポイント解説

- `__aiter__()` は `async for` に対応するために必要で、「このオブジェクトは非同期イテレータですよ」という目印です。
- `__anext__()` は `await` を含めた非同期の「次の値を返す処理」です。
- 使い終わったら `StopAsyncIteration` を raise することでループ終了を伝えます。

> 💡 一般的に、イテレータは関数よりも**クラスで作る**ことが多いです。  
> なぜなら `__iter__` や `__next__`／`__anext__` などを定義しなければならないからです。

## 🔁 実際に async for で使ってみる

```python
async def main():
    async for number in AsyncCounter():
        print(number)

asyncio.run(main())
```

### ✅ 実行結果（1秒ごとに出力）
```
1
2
3
```
非同期で 1 秒ずつ待って `1 → 2 → 3` と出力されました。

## 📌 async for を使う実務的な例

このような非同期イテレータは、次のような場面で使われることが多いです。

- WebSocket でチャットメッセージを順に受信する場合  
  （例：`async for message in websocket:`）
- ストリーミングAPIからリアルタイムでデータを取得する場合
- 非同期でファイルやログを読み取る処理
- 時間差で届くイベントを1つずつ処理する場合

## 🧠 まとめ

- `async for` は **非同期で値を順番に処理するための構文**です
- 使うには `__aiter__()` と `__anext__()` を定義した **非同期イテレータ** を用意する必要があります
- 状態を持って処理を進めたいときは、クラスでイテレータを作るのが基本
- 実務では WebSocket やストリーミング処理などで使われています

非同期処理の世界は少しややこしく見えますが、少しずつ整理して使いどころを理解できるようになってきました。  
この記事が、これから非同期処理を学ぶ誰かの助けにもなればうれしいです。
心理的安全性についてまとめた


# 心理的安全性とは？

「心理的安全性」とは、チームメンバーが自分の考えや質問を自由に話すことができる状態を指します。Googleでは、この心理的安全性がチームの効果性に強い影響を与えるとされています。
Professional DevOps Engineerの試験勉強で触れたので記事にまとめてみました。

## Googleのプロジェクト：アリストテレス（Project Aristotle）

Googleは「プロジェクトアリストテレス」という調査を通じて、効率的なチームに共通する要素を分析しました。その中で、チームの効果性に最も寄与する要素として「心理的安全性」を挙げています。

### 効果的なチームに必要な要素

1. **心理的安全性**  
   チーム内で自分の意見や疑問を自由に話せる環境。

2. **メンバー間の相互信頼**  
   お互いに信頼できる関係がある。

3. **チームの役割・プロセス・目的の明確さ**  
   誰が何をするか、どう進めるかが明確。

4. **仕事や成果に対する目的意識**  
   チームの活動に対して意義を感じられる。

5. **自分の仕事が組織に与えるインパクトの理解**  
   自分の仕事がどのように組織の成果に貢献しているかを把握できる。

## 心理的安全性の重要性

チーム内で意見を自由に言えることで、意見の衝突を乗り越え、新しいアイデアを生み出せるようになります。逆に、異なる考え方や多様性を受け入れないと、チームは意見を言い合うことができず停滞してしまいます。

心理的安全性が低い状態の例：
- 業務で分からないことがあっても、人に聞けない
- 失敗やミスがあっても報告できない
- 離職率が高まる
- モチベーションが下がる

## 心理的安全性を高める方法

心理的安全性を高めるためには、以下のようなアクションが効果的です。

- **共通認識を持つ**  
  チームで心理的安全性の重要性を共有する。

- **チームの力学について話し合う**  
  どんな雰囲気が望ましいか、どう意見を言い合うかを明確にする。

- **チームの強化にリーダーを巻き込む**  
  リーダーが率先してチームの改善をリードする。

- **仕事の進め方の好みを周知する**  
  メンバーの「こう進めたい」を理解し、チーム内で認識を合わせる。

- **仕事を学習の機会と捉える**  
  失敗を避けるのではなく、学ぶ機会として捉える。

- **自分がミスをすることを認める**  
  完璧を求めすぎず、失敗をオープンに共有する。

- **好奇心を持ち、たくさん質問する**  
  質問することを奨励し、メンバー同士で助け合う文化を作る。

## まとめ

心理的安全性は、チームの成果に直結する重要な要素です。Googleのプロジェクトアリストテレスが示すように、意見を言い合える環境は、仕事の質やモチベーションを高め、結果として組織全体の成果にもつながります。ぜひ、チーム内で心理的安全性を育て、より良い成果を目指しましょう！
BigQueryとBigtableの違い・活用術をまとめてみた

# はじめに
Google Cloudには、BigQueryやBigtable、BigLakeといった強力なデータ基盤サービスがあります。これらを使いこなすことで、大規模データの分析やリアルタイム処理を効率よく行うことができます。  
この記事では、それぞれの特徴や使い分け、クエリ高速化のテクニックをまとめました！

---

# OLAPとOLTPの違い
- **OLAP (Online Analytical Processing)**  
  データ分析や集計に特化し、主に大量の履歴データに対して複雑なクエリを実行する用途に適しています。  
  - **BigQuery** と **BigLake** は、OLAP用途に適しています。  
- **OLTP (Online Transaction Processing)**  
  リアルタイム性のあるトランザクションデータの処理に最適化されており、正確性やデータ構造の整合性が重視されます。  
  - **Bigtable** は、OLTP用途に適しています。  

トランザクションデータの管理では、スキーマやデータ構造を正しく保つことがとても重要です。

---

# BigQueryの主要コンポーネント

## ルーチン
BigQueryでは、よく使う処理をルーチン化して再利用できます。代表的なものは以下の通りです。

- **ストアドプロシージャ**  
  ELT処理など、データ操作後にDMLでテーブルへ書き込む場合に利用されます。
- **ユーザー定義関数 (UDF)**  
  SQL内で呼び出して値を返すカスタム関数。組み込み関数のように使えます。
- **テーブル関数**  
  パラメータを受け取れるビューのような機能で、絞り込みなどが可能です。

## マテリアライズドビュー vs 他の技術

| コンポーネント | キャッシング | スケジュールクエリ | 論理ビュー | マテリアライズドビュー |
|---|---|---|---|---|
| パフォーマンス | ◎ | × | × | ◎ |
| クエリの種類 | すべて | すべて | すべて | 一部限定 |
| パーティショニング/クラスタリング | × | ◎ | N/A | ◎ |
| 増分更新 | × | × | × | ◎ |
| 追加ストレージ | × | ◎ | × | ◎ |
| 書き換え | × | × | × | ◎ |
| メンテナンス負荷 | × | ◎ | N/A | ◎ |
| データの古さ管理 | なし | ◎ | なし | 柔軟に管理可 |

- マテリアライズドビューは高パフォーマンスが魅力で、増分更新やクエリの書き換え機能も持ちます。
- `--max_staleness`オプションでデータ鮮度とコストをバランスできます。

## 承認済みビュー
ビューの参照先データセットに権限がないとクエリエラーになりますが、承認設定を行うと利用者がアクセスできるようになります。  
これにより、利用者に見せたいデータのみを安全に公開できます。

## クエリパフォーマンスを最大化するコツ
- `WHERE` 句では `STRING` や `BYTE` より `BOOL`, `INT`, `FLOAT`, `DATE` を活用  
- `REGEXP_CONTAINS()`より`LIKE`を使う  
- 不要な列は `SELECT` しない  
- パーティション・クラスタリングを活用  
- ネスト（`STRUCT`列や`REPEATED`列）で`GROUP BY`を減らす  
- `JOIN`前にデータを絞り込む  
- 長いクエリは一時テーブルを挟む  
- 自己結合よりウィンドウ関数の利用を検討  

---

# BigLakeの特徴

BigLakeは、外部ストレージへのアクセス権限とテーブル権限を分離し、運用負担を軽減できます。  
- **メリット**  
  - 権限管理の簡素化  
  - ストレージ基盤を意識せず分析可能  
  - データ移動や複製を不要にし、コスト削減  
- **ユースケース**  
  - Twitterでは、1秒間に300万以上の集計を行うパイプラインにBigLakeを活用しています。

---

# Bigtableの特徴

## 圧倒的なスループットと低レイテンシ
- 単位時間あたりの処理能力が非常に高く、数ミリ秒以下の応答速度を誇ります。
- 即時性が重要な金融やIoT分野の時系列データ処理に強みを発揮します。

## BigQueryとの主な違い
- ミリ秒レベルの即時応答が可能  
- トランザクション機能を持つ  
- リレーションがないため `JOIN` 不可

## 設計のポイント

### テーブル設計
- 似たスキーマのデータは同一テーブルにまとめる  
- 不要なテーブル乱立を避ける  
- 逆タイムスタンプを行キーに使う場合は別テーブル化も検討  

### 列ファミリー
- 関連する列は同じファミリーにまとめる  
- ガベージコレクションポリシーはファミリー単位で設定  

### 列設計
- 列修飾子を柔軟に使う  
- 1行に多すぎる列を持たないよう注意  

### 行・セル設計
- 1行は100MB以内に抑える  
- 1セルは10MB以下にする  

### 行キー設計
- 短く、4KB以下に  
- 行キー設計で性能が大きく変わるため慎重に！

---

# おわりに
BigQuery・Bigtable・BigLakeの特性を理解し、最適な設計やチューニングを行うことで、パフォーマンス向上と運用コスト削減を同時に実現できます。  
それぞれのユースケースに応じて柔軟に使い分けていくことが大切です。
Swift学習帳: スコープとAccess Control

## 概要
オンライン講座のCodeCandyさんでプログラミング学習をした際に学んだ、スコープとAccess Controlの概念がアプリ開発においてまず大切なことだと思いました。
自分でもアウトプットを兼ねて備忘録としてまとめました。

## 参考文献
[iPhoneアプリ開発講座｜CodeCandyオンラインプログラミングスクールブログ [初心者向け]Swift言語の基礎文法:スコープ(変数の有効範囲)を学ぼう！](https://blog.code-candy.com/swift_scope_basic/)

## 目次
- スコープとは
- スコープの種類
- Access Control
- まとめ

## スコープとは
- スコープは変数や定数、関数や型名などが有効となる範囲
- {}の中で利用できる範囲をローカルスコープ、外で利用できる範囲をグローバルスコープという

## スコープの種類
### ローカルスコープ
- 関数や制御構文（if文、for文など）の内部で定義された変数や定数が持つスコープ
- そのスコープ内でのみ有効で、外部からは参照できない
```Swift: Swift
func greet {
let message: String = "Hello"
print(message) // "Hello"と出力される
}
print(message) // スコープ外のためエラー
```
### グローバルスコープ
- プログラム全体から参照できるスコープ
```Swift: Swift
let message: String = "Hello"
func greet {
print(message) //"Hello"と出力される
}
```

## Access Control（アクセスコントロール）
Access Controlとはクラス・構造体・プロパティ・メソッドなどに「どこからアクセスできるか」を指定する仕組み。Swiftでは5段階のアクセスレベルがある。
|レベル|アクセス範囲・用途|
|:----:|:----:|
|open|モジュール内外全てでアクセスできる。継承やオーバライドが可能|
|public|モジュール内外全てでアクセスできる。継承やオーバライドが可能が不可|
|internal|同一モジュール内でアクセスできる。|
|fileprivate|同一ファイル内でアクセスできる。|
|public|定義されたスコープのみアクセスできる。最も制限的|

- 意図しないアクセスやバグの発生を防ぎやすくするため、狭い範囲（private）から始め、必要に応じて広げていくのが良い

## まとめ
- スコープとAccess Controlは、アプリ開発において安全で保守しやすいコードを書くための重要な概念
- スコープは、変数や定数、関数、型名などが有効となる範囲を指し、ローカルスコープとグローバルスコープに分かれる。スコープを意識することで、意図しない変数の衝突やバグを防ぐことができる
- Access Controlは、クラスや構造体、プロパティ、メソッドなどが「どこからアクセスできるか」を制御する仕組み。Swiftにはopen、public、internal、fileprivate、privateの5段階があり、意図しないアクセスやバグの発生を防ぎやすくするため、狭い範囲（private）から始め、必要に応じて広げていく
無料のオンライン文字カウンター – japanclock.com/character-count

テキスト内の文字数をすばやく確認したいですか？https://japanclock.com/character-count で提供されている文字カウンターツールは、学生、ライター、マーケター、開発者にとって理想的な無料ツールです。ツイートの作成、メタディスクリプションの調整、SMSの文字制限対応など、あらゆる場面で役立ちます。
![charactercount.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4099296/333603b1-79bb-47e2-a1bb-46c956d10ab9.png)


✅ 文字カウンターとは？
文字カウンターは、入力したテキストの文字数と単語数をリアルタイムで表示する無料ツールです。以下のような用途に便利です：

SNS投稿（例：Twitter/X）の文字数チェック

SEO用タイトルやメタディスクリプションの最適化

広告やメール件名の調整

フォームや課題の文字制限に対応

アプリやデータベース内でのスペース調整

✨ 主な機能
リアルタイム表示：入力と同時に結果を表示

文字数＋単語数の表示：両方を簡単に確認

スペース除外オプション：スペースを含まないカウントも可能

スマホ対応デザイン：モバイル・タブレット・PC対応

プライバシー保護：データは保存されず、ブラウザ上のみで動作

🔥 japanclock.com の文字カウンターを選ぶ理由
✅ 完全無料・登録不要
ログイン不要、いつでもどこでも無料で使えます。

⚡ 即時結果表示
テキストを入力または貼り付けるだけで、即座にカウントを表示。

💼 あらゆる人に最適
学生からマーケター、開発者まで、誰でも使えるシンプルツール。

🧠 効果的な使い方のヒント
以下は、プロも実践している活用方法です：

SEOメタディスクリプション
メタディスクリプションは 160文字以内 に収めましょう。

Twitter（X）の投稿
280文字以内に収めて、見切れない投稿を。

Google広告
見出しは 30文字以内、説明文は 90文字以内 が理想です。

SMS（ショートメッセージ）
一通のSMSは 160文字。超過すると複数通になり、コストが増えます。

入力制限付きのフォーム
フォームやアンケートに提出する前に確認しておくと安心です。

📱 どんな人にオススメ？
SEO担当者：スニペットやメタ情報を最適化

コンテンツ制作者：キャプションや見出しを調整

エンジニア・開発者：データベースやアプリの制限に対応

学生：課題や作文の文字数チェック

SNS運用者：各種プラットフォームのルールに合わせて投稿

📘 よくある質問（FAQ）
❓ このツールは無料ですか？
はい、完全に無料で使用でき、アカウント登録も不要です。

❓ スペース（空白）もカウントされますか？
はい、デフォルトではスペースも含めてカウントしますが、除外するオプションも用意されています。

❓ スマートフォンでも使えますか？
はい、スマホやタブレットでも快適に使えるレスポンシブ設計です。

❓ 入力したテキストは保存されますか？
いいえ。全ての処理はブラウザ内で行われ、データは一切保存されません。

❓ 単語数も確認できますか？
はい。文字数と単語数の両方がリアルタイムで表示されます。

🌍 今すぐ使ってみよう！
今すぐ以下のリンクからアクセス：
👉 japanclock.com/character-count

登録不要・広告なし。素早く文字数を確認できるシンプルなツールです。

🧩 まとめ
ツイート、SEO、広告文、プログラム入力…何であれ、文字数が重要な場面ではjapanclock.com の文字カウンターがあなたの作業を効率化してくれます。ブックマークして、いつでも使えるようにしておきましょう。
競プロ日記#25/05/27

# 競技プログラミングの鉄則

[A18 - Subset Sum](https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_r)
- 難しすぎて解説AC
- なかなかの難しさだけどこれを理解しないとナップザック問題とかを解けない気がする
- B問題で理解度の確認をしたい
- 二次元DPで二次元配列を用いているが二次元配列と言えば平面をイメージしてしまうが、これはあくまでも二次元配列を利用しているだけという感じである。[i][j]のうちiはあくまでもカードをどこまで使うか、jは合計Sを表現できるかというのを表現するために二次元配列しているだけ。ここがなかなか発想として難しいと感じた。
```
int A[69];
bool dp[69][100009];

int main() {
    long long N,S;
    cin >> N >> S;
    for (int i = 1; i <= N; i++) {
        cin >> A[i];
    }
    dp[0][0] = true;
    for (int i = 1; i <= S;i++) {
        dp[0][i] = false;
    }

    for (int i = 1; i <= N; i++){
        for (int j = 0;j <= S; j++){
            if (j < A[i]){
                if (dp[i - 1][j]) {
                    dp[i][j] = true;
                } else {
                    dp[i][j] = false;
                }
            }   
            if (j >= A[i]) {
                if (dp[i - 1][j] || dp[i - 1][j - A[i]]) {
                    dp[i][j] = true;
                } else {
                    dp[i][j] = false;
                }
            }
        }
    }
    if (dp[N][S]) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }
}
```
[B18 - Subset Sum with Restoration](https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_cq)
- 動的計画法の復元がちょっと実装できなかった。二次元DP自体はさすがに例題と合わせたので概念理解には問題なさそう。
- とはいえだんだんと例題（A問題）だけで実装を理解しきれない問題が増えて来て、練習問題（B問題）の方は例題に+αでひねりを入れてくる分難易度が上がって上手く勧められない。手ごたえみたいなのを感じられなくてつらい。

```
int A[69];
bool dp[69][100009];
vector<int> Answer;

int main() {
    long long N,S;
    cin >> N >> S;
    for (int i = 1; i <= N; i++) {
        cin >> A[i];
    }
    dp[0][0] = true;
    for (int i = 1; i <= S;i++) {
        dp[0][i] = false;
    }
    for (int i = 1; i <= N; i++){
        for (int j = 0;j <= S; j++){
            if (j < A[i]){
                if (dp[i - 1][j]) {
                    dp[i][j] = true;
                } else {
                    dp[i][j] = false;
                }
            }   
            if (j >= A[i]) {
                if (dp[i - 1][j] || dp[i - 1][j - A[i]]) {
                    dp[i][j] = true;
                } else {
                    dp[i][j] = false;
                }
            }
        }
    }

    if (!dp[N][S]){
        cout << -1 << endl; // そもそも選び方が存在しない場合は-1を出力
        return 0;
    }

    int Place = S;
    for (int i = N;i >= 1; i--) {
        if (dp[i - 1][Place]){
            Place = Place; // i番目の要素を選ばない場合
        }else{
            Place = Place - A[i]; // i番目の要素を選ぶ場合
            Answer.push_back(i); // 選んだ要素のインデックスを保存
        }
    }

    reverse(Answer.begin(), Answer.end()); // 選んだ要素のインデックスを逆順にする

    cout << Answer.size() << endl; // 選んだ要素の数を出力
    for (int i = 0; i < Answer.size(); i++) {
        if (i >= 1){
            cout << " "; 
        }
        cout << Answer[i];  
    }
    cout << endl; 
}
```

[A53 - Priority Queue](https://atcoder.jp/contests/tessoku-book/tasks/tessoku_book_ba)
- 優先度付きキューについて
- priority_queueという型があるというのはとても面白かった
- 当然ではあるが実装自体はかんたんだ
イベントの"発火"の語源について

# はじめに
最近、「押下」という言葉が[話題](https://togetter.com/li/2555368)になった際、ふと「発火」の語源がどこかに書いてあったと記憶をたどって、`JavaScript`の歴史あたりでネット検索してみたものの見つからず、モヤモヤしてた。`JavaScript`ではなく`VisualBasic`に変更してみたら見つけました。

`VisualBasic`は、イベント駆動型プログラミングを一般開発者に広めましたからね。

# 「発火」の語源
「発火」は英語の`Fire`の日本語訳となります。

「Visual Basicの父」として知られるアラン・クーパー氏が体験談として語っています。

>ユーザーが「『ボタンをクリック』などのアクションを起こすと特定のコードを実行する」という機能も組み込まれていました。このコード実行機能の名前を考えていた際に、ギアリー氏はイライラしながらモニター画面に向かって輪ゴム鉄砲を発射(fire)したり、葉巻を吸うためにライターの火(fire)を付けたりしていたとのこと。そして、頭の中に「fire an event(イベントの発火)」という現代まで使われている開発用語が浮かんできたとクーパー氏は語っています。
[Microsoftが開発し一時期は絶大な人気を誇った「Visual Basic」の誕生秘話](https://gigazine.net/news/20230401-visual-basic-history/)

# 仕様書には使わない
「発火」は、プログラム言語の説明や開発者同士の話し言葉として使用しますが、「押下する」のように仕様書に書いたことはないですね。
仕様書に書くとしても、「イベントを発生させる」というように、「発生」を使用します。

「イベントの発火」で検索していたら次記事を見つけました。

https://note.com/rhayahi/n/n99a402314e25

各クラウド系サービスでは、イベントが発生する部分は下記の表現を使用しています。処理は`trigger`で表現しています。

|Microsoft|Google Cloud|AWS|
|:--|:--|:--|
|generate|happen / generate|publish|


# 最後に
なんで「発火」の語源がどこかに書いてあったと記憶していたかというと、次記事を書く上で調べたことがあったからですね。よかったら読んでみてください。

https://qiita.com/yaju/items/eb2ef4648c73bdd5ace1
🎲 確率的勾配降下法ってなに？中学生でも分かるようにわかりやすく解説！


こんにちは！中学生でも分かるようにわかりやすくAIやデータサイエンスの用語を解説するシリーズ！

今日は「確率的勾配降下法（かくりつてき こうばい こうかほう）」という、ちょっとむずかしそうな名前のAIのしくみについて、**中学生でもわかるようにやさしく説明**していきます。

聞きなれない言葉かもしれませんが、イメージで考えればそんなに難しくありません。日常にあるゲームや山登りにたとえて、楽しく学んでいきましょう！

## 📚 AIは「学習」することでかしこくなる

まずはAIについてちょっとだけおさらいです。

AI（人工知能）は、たくさんのデータをもとにして「学ぶ」ことで、いろいろなことができるようになります。たとえば、

- 写真を見て「これは犬だ」「これは猫だ」と判断したり、
- 文章を読んで、質問に答えたり、
- 人が話す言葉を聞き取って、翻訳したり、

というようなことです。

でも、AIは最初からかしこいわけではありません。はじめはたくさん間違えるし、ヘンな答えを返してしまうこともあります。そこから、**「どうしたらもっと正しい答えが出せるか？」を考えながら、少しずつ勉強していく**のです。

この「少しずつ正しい方向に進んでいく方法」が、今回のテーマ「勾配降下法（こうばいこうかほう）」です。


## 🏔 勾配降下法を「山おりゲーム」で説明してみよう！

「勾配降下法」と聞くと難しく聞こえるけど、これを山登りやゲームにたとえるとすごくわかりやすくなります！

### ▼ たとえば、こんなシチュエーションを想像してみてください：

あなたは目をつぶって山のてっぺんに立っています。そして、**一番下（谷やふもと）にたどり着くのがゴール**です。

でも、目が見えないから、どちらが下り坂かわからない。そこで、**少しだけ足を前に出してみて、地面が「上がっている」か「下がっている」かを感じ取る**しかありません。

もし「下がっている」と感じたら、そっちの方向に一歩進む。  
また少しさわって、下り坂の方向に進む。  
これを何度も繰り返すことで、やがてふもとにたどり着きますよね。

これが、まさに「勾配降下法」の考え方！

AIも同じように、自分が出した答えがどれくらい正解とズレているかをちょっとずつ確認して、「もっと良い答え」に近づくように、**少しずつ調整**していくのです。

## 💡 「勾配」ってなに？

「勾配（こうばい）」という言葉がちょっと分かりにくいかもしれません。

勾配とは、かんたんに言えば「坂の角度」のことです。

坂がゆるやかなら勾配は小さく、坂が急なら勾配は大きいです。AIの場合、この「坂の角度」が「どれだけ間違っているか」「どの方向に修正すべきか」を示しています。

## ⚡ じゃあ、「確率的」ってどういう意味？

ここまでで「勾配降下法」がわかってきたと思います。でも実は、AIが使う勾配降下法にはいくつかの種類があります。

その中でもよく使われているのが、**確率的勾配降下法（SGD：Stochastic Gradient Descent）**です。

### ▼ 確率的ってなにがちがうの？

ふつうの勾配降下法では、すべてのデータを使って「どのくらい間違っているか？」をチェックします。たとえば、10万件の画像があったら、そのすべてを見て毎回学習する必要があります。

でも、それってめっちゃ時間がかかりますよね…。

そこで登場するのが「確率的勾配降下法」です！

これは、**すべてのデータを使うのではなく、「ランダムに選んだ少しのデータ」だけを使って、学習を進めていく方法**です。

たとえば、クラス全員にアンケートを取らなくても、10人くらいに聞くだけで「だいたいの意見」がわかるようなイメージです。

これにより、AIは**早く、そして効率的に学ぶことができる**ようになるんです！

## 🧠 まとめ：確率的勾配降下法とは？

では、ここまでの内容をまとめましょう。

| 項目 | 内容 |
|------|------|
| 勾配降下法とは？ | 間違いを少しずつ直して、正しい答えに近づく方法（山おりゲームみたいな感じ） |
| 確率的とは？ | 毎回すべてのデータを使わず、ランダムに少しだけ使って学習すること |
| なぜ使うの？ | 速く・効率よく・軽い処理でAIを学ばせるため |
| 実際に使われている？ | はい！多くのAIがこの方法で学んでいます。画像認識、音声認識、文章の理解など、いろんなところで使われています。 |

## 📝 おわりに：AIは「かしこくなる努力」をしている

AIって、すごい技術のように感じるけれど、中身をのぞいてみると意外とシンプルなアイデアの組み合わせでできています。

確率的勾配降下法は、その中でもとても大切なしくみです。「山を下るようにちょっとずつ正解に近づく」「全部じゃなく一部のデータだけを見る」――そんな工夫で、AIはかしこくなっていきます。

これを知っていると、AIのニュースを聞いたときに「なるほど、あれってこのしくみで動いてるのか！」とイメージしやすくなりますね！
claude code を bedrock api で使用する

公式情報を元に claude code を bedrock で動作させます


https://github.com/anthropics/claude-code

https://docs.anthropic.com/ja/docs/claude-code/bedrock-vertex-proxies#amazon-bedrock%E3%81%B8%E3%81%AE%E6%8E%A5%E7%B6%9A




# install claude code
```
npm install -g @anthropic-ai/claude-code
```




# aws 認証情報
`~/.aws/credential` に既に設定済みであれば環境変数への設定は不要
設定する aws アカウントに bedrock の権限を付与する必用があります




# 環境変数の設定
```
export CLAUDE_CODE_USE_BEDROCK=1
export DISABLE_PROMPT_CACHING=0

# ここでは us region を指定します
export ANTHROPIC_MODEL=us.anthropic.claude-sonnet-4-20250514-v1:0

# aws 認証情報
export AWS_ACCESS_KEY_ID=dummy_id
export AWS_SECRET_ACCESS_KEY=dummy_key
export AWS_REGION=us-west-2
```




# 実行
project dir へ移動し以下を実行
```
claude
```

初期化が始まるので完了させます




# bedrock の反映確認
以下の様な画面になり, bedrock の model 名などが表示されていれば完了となる

![スクリーンショット 2025-05-28 1.00.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118627/ca93e58e-58a1-4945-8e42-e08bce052e22.png)




# cost 確認
対話 interface 内で以下のコマンドで確認できます
```
/cost 
```

## coalude code cost collector
command での cost 集計ツールを作成してみましたので
ご興味あればご利用ください

https://github.com/Satoshi-Numasawa-RubyDev/claude_code_cost_collector



以上となります
関数電卓のソルブ機能、クローン機の底力

## カシオ機、初期値によってはソルブが止まってしまう
Redditで度々話題になる、関数電卓のソルブがうまくいかない件。

https://www.reddit.com/r/calculators/comments/1kvqtf1/fx991_cw_giving_abnormal_answer/

今回は 900=2x<sup>6</sup> を 初期値 x=0 で fx-991CW に解かせたところ、途中で止まってしまったという件であった。
![cwsolve1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/67404162-121f-4149-81df-504ac65201d3.png)

この場合、 Continue で再びソルブを動かすことができ、2回再開の後に正しい答を導くことができた（都度時間がかかる）。
![cwsolve2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943774/070f5697-862f-4489-a48a-f55cd860bf06.png)
CWだけでなく、初代ClassWiz(EX)やESも同様にソルブが止まり、2回Continueの後に正しい解を表示する。

## クローン機にも解かせてみた
ところで、[ClassWiz(EX)のクローン機に関する記事](https://qiita.com/harycurl/items/2eaad9f4d87b8315ada0#%E3%82%BD%E3%83%AB%E3%83%96)に書いたように、deliやEATESのEXクローン機は式や初期値によっては本家カシオ機よりも良い値を導くことがある。

そこで今回の式・初期値で手持ちのクローン機にも解かせてみたところ、全てのクローン機が1～2秒で答を導き出した。
- deli D992CN Pro, UNIONE UC-800X, EATES FC-991CN-D は 2.768229457
- deli D991CN-X は -2.768229457

どちらも正解ではあるが、特に前者は質問者が望む解答であっただろうと思われる。

またしても、クローン機が本家に勝ってしまった。

## 他メーカーの関数電卓は？
ついでに手持ちの他メーカー品についても試してみたところ…
- CANON F-789SG は時間がかかったものの正解（上記正の値）
- TI-30X Pro MathPrint は約2秒で正解（上記正の値、桁数が多い）
- SHARP EL-520T はエラー

となった。

結局、この問題に関して初期値0が苦手だったのは国内両巨塔のカシオ・シャープのみ（時間がかかる機種を含めるならキヤノンも…ことごとく国内メーカー機）だったというオチである。

## 初期値問題に悩まされてもカシオ機を使うか、初期値に柔軟なクローン機を使うか
まとめると、カシオ機のソルブ機能（ニュートン法）は初期値に0を指定した場合、ややシビアである。
もちろんその場合でも、Continueを何回か続けたり、初期値を0以外で解に近そうな値に設定し直したりすれば解が求まる。

とはいえ、初心者が使う際など、初期値に0を入れてもあっさり解を出してくれる方がよいことは言うまでもない。

その点、クローン機のソルブ機能は初期値が0でもあっさり解を出すことが多く、比較的柔軟なのかもしれない。
この柔軟さがソルブ機能で複数解を求める際の副作用となっていないか若干の懸念があるが、その点も多くのユーザーが検証していけばよいと思う。

ソルブ機能を多用する人は、もしクローン機が入手できそうであれば入手し、ソルブ機能についてカシオ機と比較してもらいたい。

奇しくも初代ClassWizの新品・メーカー再生品流通在庫はほとんど底をついたようで、今後は転売による高値取引になりそう。
そろそろEXクローン機を輸入する業者が出てこないか期待している。
（なおここで言うクローン機は自社ブランドで販売しているものを指し、カシオの名を騙ったりメーカー名を消したりした模造品を含めるつもりはない。）