OmniAICreator/Qiita-1.07M huggingface dataset:
プロジェクトの成功に向けたコミュニケーションの最適化と情報の集約化


🔷プロジェクトの情報確認に関するよくある話

プロジェクトに関わるあらゆる方々は、コミュニケーションにおいて、こんなやりとりを1度はしたことがあるのではないでしょうか。
「タスク管理ツールの更新に気づかなかった」
「チャットのやり取りを見逃したけど、どこに書いてあったんだっけ？」

様々な拠点にいるメンバーと複数のプロジェクト管理ツールを使ってコミュニケーションすることが多くなった現在、このようなことで情報の確認に時間を取られ、自分の本来の仕事に集中しきれないことも珍しいことではないと思います。

・管理者（マネージャーやスクラムマスタなど）視点では、
コミュニケーションの遅延が、プロジェクト全体の進捗に大きな影響を与えることを知っているので、
プロジェクトメンバーの方々に、
「さっき、タスク管理のチケットを更新したので確認してください」とチャットアプリで連絡したり、「今、チャットを送ったので確認してください」と電話したり、オンライン・ミーティングで確認したりしていますよね。

・チームメンバー（エンジニア、デザイナーなど）視点では、
担当する業務で用いるアプリの他に、チャット、タスク管理、Wiki、メールなど複数のアプリを使っており、
「あの情報、どのツールで共有されたっけ？」
「この情報を探すのにどれだけ時間を費やしただろう？」
と確認することが多々あると思います。
集中して自身の作業を行いながら、それらの情報全てに気を配りながら漏らさず対応していくことは意外と簡単なことではないと体感しているはずです。

🔷プロジェクトの隠れた情報確認コスト

プロジェクトの隠れたコストに情報確認コストがあります。
特にコロナ以降、これまで対面で行っていたコミュニケーションの多くがチャットアプリ上などで行われることが多くなり、受け手が情報を確認するまでの時間や情報を探す手間が増えてきています。
プロジェクトの情報確認に関する課題を以下で纏めてみます。

✅ 複数のツールの使用：チャット、タスク管理、Wiki、メールなど、用途ごとに異なるツールを使い分ける手間が増加。
✅ 通知の不均一性：通知される情報と通知されない情報があり、重要な情報の見落としが発生しやすい。
✅ 情報の時差・漏れ：複数のツールで情報が分散し、必要な情報を把握しきれないことが頻発。
✅ 情報探しの手間：流れてしまったチャット内容を再確認する際に予想以上の時間がかかる。「情報確認コスト」を発生させるだけでなく、プロジェクト全体に遅延リスクをもたらす可能性があります。

🔷 解決策

まずはプロジェクトのコミュニケーションをコントロールすること、できるような状態にする（例：必要なメンバー及び内容に絞って通知等）ことが必要だと考えています。
その解決方法の1つとして、複数アプリに跨ったプロジェクトマネジメントツールを一元化することが挙げられます。

私達のプロジェクトでは、プロジェクトマネジメントに数十年携わった当事者が、当事者目線で細部まで徹底的に使いやすさにこだわって構築した一体型プロジェクトマネジメントツール「RISA PMT」の導入及び活用をしています。

なぜ「RISA PMT」を活用しているかについてですが、
理由は1つではありませんが、
「RISA PMT」は、コミュニケーション・計画・スケジュール管理・ナレッジ管理の機能が一つのツールに集約されたプロジェクトマネジメントツールの理想形で、
プロジェクトの現場目線で作られているため細かいところまで使いやすいことが挙げられます。
「RISA PMT」が良いと思った点は例えば以下のような点です。

📍 1. プロジェクトマネジメントに必要な機能が一元化

できること
・プロジェクトメンバーとのやり取り（チャット・メール・Wiki…）の一元化
・複数アプリを開いて探す手間の削減

「RISA PMT」機能例
①：チケット（タスク）に関連する情報（仕様や方針など）を紐づけでき、タスクとドキュメントの両方でお互いの関連を見ることが可能
②：チケットに紐づいたチャットのスレッドで、閉ざされた話題についてやり取りすることができるため、他のメッセージと混在せず、チーム全体と個別のチケットのやり取りが分離可能。

📍 2. 「RISA PMT」によるコミュニケーションの省力化

できること
・メールのToやCCのようにきめ細やかな情報伝達とチーム内全員での情報共有
・Timeline機能と高度なメンション機能により、検索なしでクリックだけでも探したい情報にアクセス

「RISA PMT」機能例
①：送信グループで高頻度で連絡をとるメンバーをグループ化したり@メンションとCCを使い分けることができ、必要な通知に絞り込み可能。
②：チャット全体とチャネルにTimelineがあり、時系列ですべてのメッセージを確認可能。

📍 3. 「RISA PMT」のコミュニケーションの高度化

できること
・チケット（タスク）に関連する情報（仕様や方針など）を紐づけでき、タスクとドキュメントの両方でお互いの関連を見ることができる。
・カンバン・ガントチャート・勤怠管理が紐づくことで精緻な計画立案とリスクの可視化が可能

「RISA PMT」機能例
①：各ドキュメントで引用されてドキュメントや引用しているドキュメントを確認可能。
②：プロジェクト管理（カンバン）ごとにチャットのタイムラインがあり、プロジェクトの動向を容易に把握できる。

解決方法は1つではありませんが、このような方法もありますので、よかったら取り入れてみていただけたらと思います。

参考）RISA PMTについて
※2025/6目途でティザーWebサイトが完成次第本項目を更新してご共有する予定です。
agenticseek使ってみた

# 結論

インスコむずいし、
スクレイピングもできんし、
使い物にならん

低度の低いDeepreserachをローカルで動かせるくらい

# 一応起動方法だけまとめとく


・Docker Desktop を起動

agenticSeekフォルダで PowerShell起動

.\start_services.cmd


別窓でpowershellを起動
ollama run deepseek-r1:14b


別窓で、Powershell起動

.\agentic_seek_env\Scripts\activate
python api.py

http://localhost:3000/

で起動。
Databricks初心者向け：データレイク・DWH・レイクハウスの違いとは？

データ分析やAI活用を考える際、よく登場する「データレイク」「データウェアハウス（DWH）」「レイクハウス」。それぞれの概念の違いを理解することは、プラットフォーム選定や設計において非常に重要です。

本記事では、Databricksが提唱する「レイクハウス」の強みと、他モデルとの違いを初心者向けにわかりやすく解説します。

---

## 🔍 用語解説

| 用語                   | 意味                 | 補足               |
| -------------------------- | ------------------ | ---------------- |
| データレイク（data lake）          | 生データを大量に保存する倉庫     | 加工前の全データを保存できる   |
| データウェアハウス（data warehouse）  | 整形されたデータを保存・分析する倉庫 | KPIやBI分析向け       |
| データマート（data mart）          | 業務特化型のミニデータベース     | 定型レポートやアプリで使う    |
| レイクハウス（lakehouse）          | レイクとDWHのいいとこ取り     | Databricksが提唱・実装 |
| スキーマオンリード（schema-on-read）  | データ読み取り時に構造を定義     | 柔軟だが精度には注意       |
| スキーマオンライト（schema-on-write） | データ保存時に構造を定義       | 扱いやすく、精度が高い      |

---

## 各モデルの概要

### データレイク（Data Lake）

* 構造化／非構造化データの全てをそのまま保存
* 安価・柔軟・スキーマレス（オンリード）
* 機械学習や探索的分析に適するが、データ整合性や品質管理には課題

### データウェアハウス（Data Warehouse）

* 整形済み構造化データの保存・分析に最適
* 高性能・スキーマオンライト
* BIツールとの連携が得意

### データマート（Data Mart）

* 特定用途向けの軽量・高速なデータベース
* 定型レポートやアプリ向けに最適化

### レイクハウス（Lakehouse）

* データレイクの柔軟性 × DWHの信頼性を融合
* ACIDトランザクション、スキーマ進化、オープンフォーマットをサポート

---

## Lakehouseとは？

Databricksが提唱する「レイクハウス」は、従来のレイクやDWHの弱点を補う**次世代の統合データアーキテクチャ**です。


* Delta Lake：トランザクション & スキーマ管理
* Unity Catalog：アクセス制御・ガバナンス
* Databricks SQL：BI/SQL分析

---

## モデル比較表

| 項目       | データレイク | データウェアハウス | データレイクハウス |
| -------- | ------ | --------- | --------- |
| データ形式    | 全形式対応  | 構造化中心     | 全形式対応     |
| スキーマ方式   | オンリード  | オンライト     | ハイブリッド    |
| コスト      | 安価     | 中〜高       | 中程度       |
| パフォーマンス  | 低〜中    | 高         | 高         |
| 柔軟性      | 高      | 低         | 高         |
| 管理・ガバナンス | 弱      | 強         | 非常に強い     |

---

## 代表ユースケース

| モデル       | ユースケース例                         |
| --------- | ------------------------------- |
| データレイク    | IoTログ蓄積／音声・画像保存／ML前処理           |
| データウェアハウス | 売上集計／経営指標のKPI分析／BIレポート          |
| レイクハウス    | リアルタイム分析＋BI連携／ML×BI統合／全社横断データ基盤 |

---

## ✅ まとめ

レイクハウスは、「あらゆるデータを一箇所で、信頼性高く、柔軟に活用したい」という現代のニーズに応える最強アーキテクチャです。

Databricksを使えば、Delta Lake × Unity Catalog × Databricks SQL により、これをノーインフラで簡単に構築できます。

---

## 🔗 参考リンク

* [Lakehouseとは（Databricks公式）](https://www.databricks.com/solutions/data-lakehouse)
* [Delta Lake入門記事](https://docs.delta.io/)
* [Unity Catalog解説](https://docs.databricks.com/data-governance/unity-catalog/index.html)
バスケ版ピタゴラス勝率をいじってみた（失敗）

## ピタゴラス勝率の概要とリサーチクエスチョン
### ピタゴラス勝率の概要
ピタゴラス勝率とは、スポーツにおいて各チームの得点と失点から勝率を近似するモデルです。具体的には次のようなモデルです。
```math
P = \frac{A^x}{A^x+B^x}
```
ただし、$A$はチームのシーズン総得点、$B$はチームのシーズン総失点です。
　スポーツ×リーグ（国）によって指数$x$の値は変化します。私はバスケのオタクなのでバスケについて話すと、NBA（アメリカプロバスケリーグ）では13~14程度、B1リーグ（日本のプロバスケリーグ）では10~11程度であるとされています。
### リサーチクエスチョン
この記事で扱う話題は2つです。一つ目は、通常のピタゴラス勝率が総得点・総失点に対して共通の指数$x$を仮定しているが、総得点・失点に対して異なる指数$x_A,x_B$をそれぞれ想定すると、予測の精度が向上するのかという話題です。もし予測の精度が向上して、指数の値に差があれば、攻守どちらに力を入れるべきか洞察が得られるかもしれません。
　二つ目の話題は、共通の指数$x$の値が最近のデータを使っても10~11程度に収まっているかを確認することです。　この検討によって、これまでと同じ指数を使い続けることが妥当なのかを評価できると思っています

## 調査の方向性
まず、ピタゴラス勝率を一次式で表現し、最小二乗法で指数（$x, x_A, x_B$）を求められるようにモデルを変形します。
　次に、建てたモデル同士を比較するために、尤度比の検定を用いて、指数を区別したモデルが、区別しないモデルに比べて、実際の勝率への説明力が上がっているかを評価します。
　最後に、その向上幅の大きさをCohen’s f^2という効果量で評価します。

## ピタゴラス勝率を一次式に変換する
(＊ひたすら数式をいじっているパートなので、興味のない人は飛ばしてください。)
まず、ピタゴラス勝率をロジット変換します。
```math
logit(P) = \log(\frac{P}{1-P})
```
ここでピタゴラス勝率$P=\frac{A^{x_A}}{A^{x_A}+B^{x_B}}$を上式左辺に代入する。計算過程を示すために、$\frac{P}{1-P}$を計算します。まず分母を計算します。
```math
1-P = 1 -\frac{A^{x_A}}{A^{x_A}+B^{x_B}}=\frac{A^{x_A}+B^{x_B}}{A^{x_A}+B^{x_B}}-\frac{A^{x_A}}{A^{x_A}+B^{x_B}}=\frac{B^{x_B}}{A^{x_A}+B^{x_B}}
```
となります。なので、

$P=\frac{A^{x_A}}{A^{x_A}+B^{x_B}}$、$1-P=\frac{B^{x_B}}{A^{x_A}+B^{x_B}}$が成り立ちます。これらを使って、
```math
\frac{P}{1-P}=P\times{\frac{1}{1-P}}=\frac{A^{x_A}}{A^{x_A}+B^{x_B}}\times\frac{A^{x_A}+B^{x_B}}{B^{x_B}}=\frac{A^{x_A}}{B^{x_B}}
```
を得ます。計算結果の対数をとって、
```math
\log{(\frac{P}{1-P})}=\log{(\frac{A^{x_A}}{B^{x_B}})}=x_A\times{\log{A}}-x_B\times{\log{B}}
```
となります。これで、総得点と総失点の対数をとったものと、係数（指数だったもの）によって、勝率（のロジット）を一次式で表せました。なお、総得点と総失点との間に共通する指数を想定する場合は、次のようになります。$x=x_A=x_B$なので

```math
\log{(\frac{P}{1-P})}=\log{(\frac{A^{x}}{B^{x}})}=x\times{\log{A}}-x\times{\log{B}}=x(\log{A}-\log{B})
```
です。なので、対数をとった総得点と対数をとった総失点の差を変数とした一次式になります。
　あとは、実勝率のロジットを計算して、最小二乗法によって、指数（$x, x_A, x_B)$を求めることができます。

## 結果
### 使用したデータセット
Bリーグ公式HPから、2022-23 ~ 2024-25シーズンの3シーズン分の、各チームの勝率・総得点・総失点を取得し、分析に使用しました。分析対象になったチーム数は72（＝24チーム×3シーズン）でした。
### 指数＆説明力の改善幅の計算
まず、指数が共通であるとした場合、$x=$10.86という結果を得ました。したがって、従来ピタゴラス勝率の計算に用いられてきた指数は、現在でも通用すると言えます。
　次に総得点と総失点で異なる指数を想定する場合。総得点の指数$x_A$として10.86、総失点の指数$x_B$として10.86を得ました。
　最後にこれらの二つのモデル（指数共通モデル、指数区別モデル）に、尤度比の検定を行いました。その結果、指数を区別しても説明力が上がるとは言えませんでした（$p=0.68, n.s.$）。また、Cohenの$f^2$で評価した効果量も0.00となり、効果量の観点からも改善は見られませんでした。

## まとめ
この記事では、ピタゴラス勝率に関して、①総得点と総失点の指数は区別した方が良いのか、②総得点と総失点の間で共通の指数を使うとして従来使われてきた値は現在も妥当なのか、の二点を検討しました。
　その結果、①総得点と総失点の指数は区別しても説明力は変わらないこと、②従来使われてきた共通の指数は妥当であること、が確かめられました。
複数の Outlook PST ファイルを結合する方法は?

Outlook を長年使っていると、複数の PST ファイルが溜まってしまうことがあります。例えば、古いバックアップファイル、複数のアカウントからエクスポートしたファイル、または年ごとに保存した PST ファイルなどです。これらを1つにまとめたいと考えたことはありませんか？

この記事では、複数の PST ファイルを1つに結合する方法を、初心者にもわかるようにご紹介します。

<b>PST ファイルとは？</b>

PST（Personal Storage Table）ファイルは、Microsoft Outlook がメール、連絡先、カレンダー、タスクなどのデータを保存する形式です。Outlook ユーザーは、このファイルを使ってデータのエクスポートやバックアップができます。

<b>なぜ PST ファイルを結合するのか？</b>

複数の PST ファイルを統合したい理由はさまざまです：

データを1か所にまとめて管理したい

Outlook の読み込み速度や検索効率を上げたい

バックアップ作業を簡素化したい

古い PST を整理したい

データ移行やアーカイブ作業を効率化したい

<b>方法①：Outlook を使って手動で結合する</b>

Outlook 自体に PST ファイルを開いて内容をコピー・移動する機能があります。少し時間はかかりますが、追加のソフトを使わずに実行できます。

手順：

1. Outlook を開く

2. メニューから 「ファイル」＞「開く／エクスポート」＞「Outlook データファイルを開く」 を選び、結合したい PST ファイルをすべて開きます。

3. 新しい PST ファイルを作成します（「新しい Outlook データファイル」）。

4. 各 PST ファイルのフォルダーを選び、必要なメールやフォルダーを新しいファイルに ドラッグ＆ドロップ します。

すべてのデータを移動し終えたら、古い PST を閉じて完了です。

<b>注意点：</b>この方法では時間がかかるうえ、大量のデータでは Outlook がフリーズすることもあります。

<b>方法②：専用ソフトを使って自動で結合する（おすすめ）</b>

複数の PST ファイルを一括で結合したい場合は、専用ツールを使うのが圧倒的に便利です。ここでは、信頼できるツール「<b>Advik<a href="https://www.adviksoft.com/ja/pst/merge.html">PSTマージツール</a></b>」を紹介します。

<b>AdvikPSTマージツール の主な特徴</b>

複数の PST ファイルを一括で結合

データの重複を自動で除去

添付ファイル・連絡先・カレンダーも完全に保持

パスワード保護された PST ファイルにも対応

フォルダー構造をそのまま維持

Outlook のインストール不要

<b> 使用手順（とても簡単！）</b>

AdvikPSTマージツール 公式サイト からソフトをダウンロード・インストールします。

ソフトを起動し、結合したい PST ファイルを複数選択します。

出力オプションを選びます（例：新規 PST ファイルとして保存）。

保存先フォルダーを指定し、「Merge」ボタンをクリック。

数分で作業完了！

<b>まとめ</b>

複数の PST ファイルをひとつにまとめることで、Outlook の管理がずっと楽になります。手動でも可能ですが、データ量が多い場合や作業を効率化したい場合は、AdvikPSTマージツール のような専用ソフトを使うのが一番のおすすめです。

これで、散らばっていたメールデータをすっきり統合して、より快適な Outlook 環境が実現できます！

他にも PST に関するお悩みがあれば、お気軽にご相談ください。インポートや変換、バックアップ方法などもサポートできます！
WDS

# ADKをインストール
* プラグインだかライブラリもダウンロードしないとダメ

# Ctrl + Alt + F3でマスタとなるPCを起動する
* 必要なアプリをインストールする
* 不要なアプリをインストールする

# PEメディアを作成してマスターPCで起動してinstall.wimを作成
* マスターとなるイメージです。

# boot.wimをADKから取り出し

# boot.wim と install.wim をWDSに配置
OOPのありがたみを体感した一週間

### はじめに

この一週間、Recursionのプロジェクト5で実装されていたアプリケーションサーバ、コマンドラインシステム、マイグレーションシステム、シーディングシステムのコードをゼロから自分で作ってみました。

これらのコードは読むことで理解はできていましたが、実際に自分で書いてみることで、OOPの設計思想をより深く理解できるのではと思い、取り組みました。その結果、OOPの恩恵を感じながらコードを設計し書けるようになってきました。

---

### 「タスクを依頼する」という感覚

現在のOOPに対する感覚を一言で言うなら、「タスクを依頼する」です。

たとえば、アプリケーションサーバーを自作する際に、ルートファイルからパスの一覧を取得し、それに対応するビューを検証・生成する処理が必要でした。これをエントリーポイントにすべて書くとコードが煩雑になるため、`Response` クラスを用意して、その中でビューの検証や生成を行ってもらう設計にします。つまり、「その処理はこのクラスに任せる」という発想です。

また、DB接続設定を `.env` ファイルから取得する処理も、`Settings` クラスに任せることで、存在しないキーの検証や環境ごとのファイルパス管理なども依頼できます。

同様に、MySQLの接続処理を `MySQLWrapper` クラスに任せることで、設定の組み込みや初期化処理もコンストラクタで完結でき、保守性の高いコードになります。

このように、クラスに「タスクを依頼する」ことで、コードの読みやすさや保守性が飛躍的に上がることを実感できました。

---

### インターフェースと抽象クラスの使い分け

インターフェースと抽象クラスの違いについては、最初かなり混乱していました。

たとえば、今回コマンドラインシステムを作る際に、`Command` インターフェースと `AbstractCommand` 抽象クラスを作成しました。`Command` に `getArguments()` というメソッドを定義し、`AbstractCommand` でその実装を行ったとき、

「処理内容が同じなら、抽象クラスだけでよくない？」

と疑問に感じました。というのも、これまでは「インターフェースは処理が異なるときに使う」という理解だったからです。

しかし、今回の実装を通して、以下のように整理できました。

- インターフェース：そのクラスが「何ができるか」を外部に伝えるためのもの
- 抽象クラス：共通する実装や状態をまとめるもの

インターフェースを見るだけで、そのクラスで何ができるかがわかることも、インターフェースの恩恵なんだと実感しました。「この処理を任せるクラスを作ろう」と考えたときに、自然と「どんなインターフェースが必要か？」という視点も持てるようになってきました。

---

### OOPは「頭」だけでなく「身体」で覚える

OOPは、知識として理解するだけでなく、実際にコードを書いてこそ本質が見えてくる設計思想だと感じました。

最初は「手続き型の方がシンプルで分かりやすい」と思っていましたが、プロジェクトが複雑になればなるほど、OOPのありがたみを感じられるようになってきました。

---

### おわりに

今回のプロジェクトを通じて、OOPの設計は「複雑な処理を誰かに任せる」ための仕組みである、ということを身体で理解することができました。

今後も「この処理は誰に任せるべきか？」「どんなインターフェースを持たせるべきか？」という視点を持ちながら、より良い設計と実装を意識してコードを書いていきたいと思います。
WeaveDB 技術概要とアーキテクチャ詳細

## WeaveDBの目的と主要機能

Web3アプリケーションではブロックチェーンで信頼性を担保しつつも、データ保存には依然として中央集権的なデータベースに依存する場合が多く、これが単一障害点（Single Point of Failure）となり得ます。

WeaveDBはこの問題を解決するために、**ブロックチェーン上で動作しつつWeb2クラウドDB並みの性能とスケーラビリティを備えた完全分散型データベース**を目指して開発されています。Arweaveブロックチェーン上のスマートコントラクトによって実装されたNoSQLデータベースであり、開発者が自由に利用できる高速かつ無料の分散型データレイヤーを提供します。

### 主な特徴

* **高速なクエリ性能とトランザクション処理**
* **低コストで恒久的なデータ保存**
* **ガス代の事前支払いと即時ファイナリティ**
* **マルチチェーン対応の暗号ウォレット認証**
* **Firestoreライクな分散型API**
* **クロスチェーンデータブリッジ**
* **データ暗号化のサポート**
* **無制限のスケーラビリティ**
* **オンチェーンインデクサによる高速検索**
* **スケジュール機能（Cron）**
* **クエリトリガー**
* **柔軟なアクセス制御**
* **外部データ連携とゼロ知識証明対応**

## コア技術スタック（言語・ライブラリ・外部サービス）

* **ブロックチェーン基盤**: Arweave
* **スマートコントラクト実行環境**: Warp Contracts（旧SmartWeave）
* **プログラミング言語**: JavaScript / TypeScript
* **データ構造とインデックス**: JSONドキュメント + B+ツリー
* **FPJSON**: JSONベースDSLによるルール・ロジック記述
* **JSONスキーマ/検証**: JSON Schemaライクな方式
* **暗号アルゴリズム対応**: secp256k1, Ed25519, RSA, BabyJubJub
* **外部サービス/ネットワーク**: Bundlr, Lit Protocol, SnarkJS, Circom

## 全体的なアーキテクチャ

WeaveDBは**モジュール式の4階層アーキテクチャ**を採用：

1. **データソース層**：コアデータ格納用スマートコントラクト
2. **インデクサ層**：B+ツリーなどのインデックス構築
3. **クエリパーサ層**：クエリ解析・最適インデクサ選択
4. **公開API層**：NoSQL/SQL/GraphQL型APIの提供

この構造により、同一のデータを複数のアプリケーションで異なるAPIやインデックスで共有可能。

## スマートコントラクトとArweaveの統合

* WeaveDBインスタンス = Arweave上の1スマートコントラクト
* トランザクションはWarpのSequencer経由で即時確定（\~10ms）
* 状態はクライアント側で遅延評価（Lazy Evaluation）
* 書き込みにはBundlr経由でETH等の支払いが可能
* KVストレージアダプタで大規模データも対応可能
* スマートコントラクトのアップグレード（Evolve）可能

## データモデルと処理フローの概要

* **データモデル**: Firestoreライクなドキュメント指向（JSON）
* **スキーマ定義**: JSON Schema形式（任意）

### 書き込みフロー

1. クライアントからSDK経由で`add/set/update`などを呼び出し
2. JSON形式で署名されたクエリがWarpへ送信
3. Warp Sequencerが即時確定しArweaveへ書き込み
4. コントラクトがFPJSONでルール・トリガーを実行
5. 状態更新結果が確定される

### 読み取りフロー

1. クライアントはSDK経由で`get`などのクエリを実行
2. 状態はWarpノードまたはローカルで遅延評価
3. B+木インデクサを通じて高速検索

## ソースコード構成と主要モジュールの役割

* **コントラクト本体**: Reducer関数による状態遷移ロジック
* **FPJSONエンジン**: DSL実行エンジン。権限・トリガー・ロジック定義
* **認証・暗号モジュール**: ウォレット署名検証、マルチ鍵対応
* **インデックス管理モジュール**: B+ツリー構築、クエリ最適化
* **Cron・トリガー処理モジュール**: 定期実行/イベント連動
* **外部連携・ZK検証モジュール**: リレー署名・zkJSONによる検証
* **クライアントSDK/開発者ツール**: JavaScript SDK、Webコンソール

WeaveDBのモジュール構成により、開発者はスマートコントラクトの複雑さを意識せず、高性能かつ安全な分散型データベースを利用可能です。
💡 テクノロジー + デザイン + コマース = POD副業


クリエイティブなアイデアやコーディングスキルを収益に変えたいですか？
在庫不要・初期費用ゼロ。賢く実行するだけでOK。
Print on Demand（POD）でお金を稼ぐための実践ガイドをご紹介します。

🧠 このガイドで学べること：

オリジナルのストアフロントの構築、またはマーケットプレイスとの連携

APIを使った自動フルフィルメント

実データに基づいた売れるデザインの最適化

🔗 ガイド全文はこちらから：
👉 https://merchize.com/how-to-make-money-with-print-on-demand/

🛠️ 小さく始める。世界中に発送する。開発者のようにスケールする。
Windowsスクリプト（いわゆるBAT）のメモ

# 年に数回
Windowsスクリプト（いわゆるBAT）ですが、細かいことを実装しようとするととたんにGoogle先生に問い合わせる、そして忘れる。を繰り返しているのでいいかげんメモしておきました。

https://qiita.com/talesleaves/items/8990a55b7a770de3d34f

https://qiita.com/koiwaiwaiko/items/cde99a78e5bb91dbaf1b

https://qiita.com/totorotonarino/items/a4155773c42c91725de5

https://hacker.trickstorm.com/?p=2213

https://qiita.com/kashiwagi0910/items/a161e54268988e795a7b
🌿 第１回：[ラズパイ管理がぐっとラクになる！DockerとZoraxyで作るリバースプロキシ①【企画編】]

## 🐣 はじめに

以前、ラズパイ（Raspberry Pi）を使った社内企画を実施しましたが、気がつけば今後さらにラズパイが増える可能性が…。

台数が増えるとIPアドレスの管理や外部からのアクセス管理が大変になりそうです。  
そこで便利そうな『リバースプロキシ』という仕組みを見つけました。

初心者の私でもできそうなので、早速やってみようと思います🐣  
まだまだぴよぴよエンジニアですが、温かく見守っていただけると嬉しいです！

---

## 📋 概要

このシリーズでは、**複数台のラズベリーパイを簡単に管理できるリバースプロキシの仕組み**を作っていく過程を、  
企画立案から実際のシステム稼働まで順を追って紹介していきます。

ラズパイを複数台使っている方やこれからラズパイを増やす予定のある方、  
実際の業務でのシステム活用例を知りたい方に向けて、わかりやすく発信していく予定です。

シリーズで定期的に更新していきますので、ぜひフォローしてご覧ください！

---

## 🚩 どんなシステムをつくる？

ラズベリーパイ（Raspberry Pi）を複数台使うとき、  
IPアドレスの管理や外部アクセスの管理が煩雑になります。

そこで今回はLinuxサーバー上に『リバースプロキシ』という仕組みを導入し、  
外部からのアクセスを1つの入口にまとめて管理を簡単にするシステムをつくります。

---

## 📌 アイデア検討の段階で考えたこと

ラズパイが増えた時の管理の問題を解決するために、  
社内メンバーで話し合いをしました。

### 出てきたアイデア例

- 📡 **IPアドレスを自動的に一覧化して管理するシステム**
- 🔒 **セキュリティ管理が簡単にできるアクセス制御システム**
- 🌐 **複数台ラズパイへのアクセスを簡単に振り分けられるリバースプロキシシステム**

どれも魅力的な案ですが、今回の要件に一番マッチしていたのが『リバースプロキシ』でした。

---

## 🎯 最終的に選ばれたアイデアは？

話し合いの結果、今回作ることになったのは…

🌿 **『ラズパイを簡単に管理できるリバースプロキシ』** に決定！

決定理由は以下のような感じです。

- ラズパイが増えてもIPアドレスを覚える必要がなくなる
- パスベースを使って簡単にアクセスを振り分けられる
- Dockerを使うことで、初心者でも簡単かつ再現性の高い環境を構築できる

リバースプロキシには『Zoraxy』という初心者向けのツールを使います。  
軽量でIoTデバイス向けに最適化されているので、私のような初心者でも扱いやすそうです。

---

## 🔜 次回の予定（来週更新予定！）

次回の記事では、まず手元のPCでDockerとZoraxyを使ったリバースプロキシをローカル環境で試してみます。

いきなり本番環境で試すのは不安なので、  
初心者でも安全に試せるよう、丁寧に解説していく予定です。

次回もぜひお楽しみに！

---

それでは、また次回の記事でお会いしましょう✨

## 🔗 シリーズリンク

- 次回： [ラズパイ管理がぐっとラクになる！DockerとZoraxyで作るリバースプロキシ②【ローカルテスト編】](https://qiita.com/Piyovate/items/a03a29497ceb44339350)
はじめての異動...！反省と学び　こういう時どうすればよかったの...？

# はじめに

こんにちは！社会人3年目のGUです。
今回は初めての部署異動を経験し1か月経ったのでこの期間に学んだこと、反省点を挙げていきたいと思います。

# 反省点

### 有識者の把握不足

今回新たな部署で業務を進めていくこととなり、当然分からないことばかりでした。しかしながら資料を見ることやAIとの対話により解決できることも多くありました。
チームのメンバがどの技術について詳しいのか、あまり分かっていませんでした。
しばらく調べてもエラーを解決することができなかったのですが途中で上司に相談しダイレクトな回答を持っている有識者を紹介され5分で解決することができました。実際調べはじめ気が付くと2時間ほどかかってしまっていたのですからこれは大失態です。

大きなくくりで新しいタスクに取り組むときは、多くある必要な技術に対しての有識者がどなたなのかを、メンバに尋ねることで**あらかじめ把握し困ったときにはその適任者に相談する流れを作っておく**必要性を感じました。


### AIの多用による視野の狭まり
それが正しいとは限らないもののよくも悪くもAIに聞く、それを踏まえた自分の理解を交えてさらに質問をするといったように対話を繰り返すことで、ある事柄のある程度の理解ができていってしまいます。
読んで理解するように言われていた資料を上記のように取り組み分かった気になってしまっていましたことがありました。確かにある観点からは理解をできていたのですが、
私の持っている観点とは異なる観点から質問をされたときに答えることができなかったのです。AIを利用し、理解を深めていくことは効率的な内容理解において有効なのですが様々な観点から深堀りをしていく必要性を感じました。


# よかった点

### プラクティスの提案

部署が変わったことで、前回の部署では**当然のように行われていたことが当然でなくなります**。そのことはもちろん有効なプラクティスにも当てはまってしまいます。

前回の部署では以下のような「分報」というプラクティスが実践されており、私も進捗や理解、メモなどをメンバが見られる個人チャットに記述していき有効活用を行っていました。

https://qiita.com/kojimadev/items/ea8825dec1b0d0d2874c

しかし、新たな部署では、分報どころか類似したプラクティスも存在しないようでした。


前回の部署で「分報」というものがあって有効活用できていたのでここでも行いたい　といったように自分の利益を押し出して提案をしようとしてしまっていましたが、前の上司の立場であった方に相談したところ、相手の利益を前面に押し出して提案すべきだとアドバイスをいただきました。

私は「自分」が有効活用したいという言い方ではなく、「上司やメンバ」が私が今何をやっているのか、明後日の方向に進んでいないかが透明化され安心できると思うので導入したい　といったように提案しました。

結果、新たな上司とメンバに納得していただき「分報」に類似したプラクティスを導入してもらうことができました。
この一か月分報のおかげで、素早く密なコミュニケーションをとり、うまくタスクを進めていけたと思います。
何か自分の希望があるときはまず、(建前でも)**相手の利益を前面に押し出した提案**をすべきだと学びました。

### 集中検討の実施

新たな部署では、このスライドを読んで理解しておいて　といったようにあいまいな指示しか受けませんでした。
これまでの業務の中でタスクをなにも考えず進めていくのではなく、ゴールを明確にして進めていくことが大切ということを感じていた私は、自分なりに考えたゴールを話し、それを踏まえてタスクを行う前に認識合わせを行いました。

# おわりに

社会人はやくも3年目となりました。まだまだ学んでいくことばかりです。
これまでの部署のメンバ、業務が好きだっただけに当初は残念でしたが、ある意味チャンスだと感じました。新しい上司、メンバも、今まで聞かなかった別方向からのアドバイスを下さるのでありがたいです。一つ一つ吸収していきたいと思います！
また、これまでしたことのない種類の失敗をすることで学び成長していけると感じています！機会を有効に活用しどんどん成長していきます！最後まで読んでいただきありがとうございました。
いろんなアルゴリズム"00.00.00.12"

[知恵の館の目次](https://qiita.com/rionQ/items/0ba7a700620a1d617bc6)
# 立ち位置・仕様
* いろんなアルゴリズムをコピペできるように記録するのみ
* 最適化が目的でない
* たまにメモとして解説を残す
* 最低限でまとめる
* データを抽出しやすいように個別のIDを付与
* あるアルゴリズムにおいて、他のアルゴリズムが登場する際にはそのIDを付与
* IDは16進数表記
* なるべく最低限なパッケージで実装
* なるべく特殊なオブジェクト型は使用しない

# TargetID
00.00.00.12

# ReferenceID

# 深さ優先探索と幅優先探索との差分がわかりやすいアルゴリズム
* 左優先にするため，深さ優先探索のときにはリストを逆順にしている
```python:
def depthOrBreadthFirstSearch(graph_dict, startNode, goalNode, searchMethod='d'):
	if searchMethod == 'd':
		index = -1		#-1の場合は深さ優先探索
	elif searchMethod == 'b':
		index = 0		# 0の場合は幅優先探索
	flag = False
	open_list = []
	close_list = []
	output_list = []
	open_list.append((startNode,None))
	while True:
		if not open_list:
			break

		node, parent = open_list.pop(index)
		close_list.append((node, parent))
		if node == goalNode:
			flag = True
			break

		
		children = graph_dict[node]
		if searchMethod == 'd':
			children.reverse()
		for childNode in children:
			if childNode not in close_list:
				open_list.append((childNode, node))

	if flag:
		child = goalNode
		parent = None
		output_list.append(goalNode)
		while True:
			for c, p in close_list:
				if child == c:
					parent = p
					break
			if parent is None:
				break
			output_list.append(parent)
			child = parent
		return list(reversed(output_list))
	else:
		return None
```

# 使用方法
```python:
graph_dict = {
    1:[2,3],
    2:[4],
    3:[5,6,7],
    4:[8],
    5:[],
    6:[9],
    7:[10],
    8:[],
    9:[],
    10:[]}
print(depthOrBreadthFirstSearch(graph_dict,1,9,'d'))
```
Rubyの！メソッド名の命名規則について

# はじめに

昨日聞いたLTの内容がためになったので、忘れる前に備忘録。

# rubyのメソッド名につける！について

[Rubyで使われる記号の意味（正規表現の複雑な記号は除く）](http://docs.ruby-lang.org/ja/2.1.0/doc/symref.html)には以下のようにあります。

> `def xxx!`
>「!」はメソッド名の一部です。慣用的に、 同名の(! の無い)メソッドに比べて **より破壊的** な作用をもつメソッド(例: tr と tr!)で使われます。

# trとtr!に注目

!のつくメソッドとつかないメソッドで必ず対になっている。

# 基本的には厳密にルールが決まっているわけではなく、雰囲気でOK

例外を発生したり、破壊的変更を行う、危険な方のメソッドに!をつける。

# おまけ　exitとexit!

exit!の方が例外を出さないが!がついている

# 参考

https://speakerdeck.com/alstrocrack/rubyno-mesotudowotiyantoli-jie-suru
Jenkinsでメール送信

前提:Email Extension Plugin導入済み

```groovy
post {
    success {
        emailext (
            subject: "✅ Coverage Report for ${env.JOB_NAME} #${env.BUILD_NUMBER}",
            body: """Build successful!

- Job: ${env.JOB_NAME}
- Build: ${env.BUILD_URL}

Please see attached JaCoCo coverage report.
""",
            to: 'your-team@example.com',
            attachmentsPattern: 'build/reports/jacoco/**/index.html',
            mimeType: 'text/html'
        )
    }
    failure {
        emailext (
            subject: "❌ Build FAILED: ${env.JOB_NAME} #${env.BUILD_NUMBER}",
            body: "Build failed: ${env.BUILD_URL}",
            to: 'your-team@example.com'
        )
    }
}

```

おまけ
ファイルをzipに固めて送信したい場合
```groovy
sh 'zip -r build/reports/jacoco/all.zip build/reports/jacoco/'

emailext (
    subject: "Coverage Report ZIP",
    to: 'your-team@example.com',
    body: "See attached ZIP report",
    attachmentsPattern: 'build/reports/jacoco/all.zip'
)
```

windowsの場合
```groovy
stage('Zip Coverage Reports') {
    steps {
        bat 'powershell Compress-Archive -Path build\\reports\\jacoco\\* -DestinationPath build\\reports\\jacoco\\all.zip -Force'
    }
}
```
```groovy
post {
    success {
        emailext (
            subject: "✅ Coverage Report - ${env.JOB_NAME} #${env.BUILD_NUMBER}",
            body: """Coverage report attached as ZIP.

Build URL: ${env.BUILD_URL}
""",
            to: 'your-team@example.com',
            attachmentsPattern: 'build/reports/jacoco/all.zip'
        )
    }
}

```
Kubernetes Node Debug Pod と Namespace Pod のネットワーク挙動比較

# はじめに
今回はK8s(Kubernetes)をアップデートしたさいに、突然namespace内のPodが名前解決できなくなってしまい、その原因がCoreDNSでした。
原因を探るさいにNodeのDebugでは名前解決できることを不思議に思い、K8sのDNSについて調べていく中で分かったことを備忘録として記事にしました。

# Kubernetes DNS Policy（`dnsPolicy`）概要
そもそもKubernetes の Pod では、`dnsPolicy` フィールドで DNS 解決の振る舞いが複数あります。現在サポートされている主な値は以下のとおりです。

| Policy                        | 説明  |
|------------------------------|----------|
| **ClusterFirst**             | - `dnsPolicy` を指定しない場合のデフォルト値<br>- Pod 内の DNS クエリのうち、クラスタドメイン（例: `*.svc.cluster.local`）にマッチしないものは、上流の名前解決サーバー（外部 DNS）へフォワードされる<br>- クラスタ内・外部の両方への名前解決が可能  |
| **Default**                  | - ノード（ホスト）が持つ `/etc/resolv.conf` の設定をそのまま継承<br>- Pod はホストと同じ DNS サーバー／検索ドメインを使う          |
| **ClusterFirstWithHostNet**  | - `hostNetwork: true` を設定した Pod 向け<br>- `ClusterFirst` の動作（クラスタ DNS → 上流 DNS の順）をホストネットワーク下でも適用<br>- Windows 環境ではサポートされない  |
| **None**                     | - Kubernetes が提供する DNS 設定を一切無視<br>- Pod 側で `dnsConfig` フィールドを使い、`nameservers`／`searches`／`options` を手動指定する必要がある  |

---

# Node Debug Pod の挙動

`kubectl debug node/<node-name> -it --image=<image> -- /bin/sh` で起動される Pod は、以下の特徴を持ちます。

- `hostNetwork: true` により、ホストのネットワーク名前空間をそのまま共有す:contentReference[oaicite:1]{index=1}。  
- `/etc/resolv.conf` はホスト OS のものを参照し、外部 DNS などに直接問い合わせ
- Kubernetes の CNI プラグインや CoreDNS の状態に依存せず、名前解決する  


# Namespace 内 Pod の挙動 

通常の Pod（`hostNetwork: false`）は、以下のように DNS 解決を行います。
 
- `dnsPolicy: ClusterFirst` がデフォルトで設定され、`/etc/resolv.conf` の最上段に CoreDNS の Service IP を記載
 
- DNS クエリはまず CoreDNS（例: `172.22.0.10:53`）へ送られ、内部ゾーン解決後に上流の DNS へフォワード
 
- CoreDNS Pod の CrashLoopBackOff や、NetworkPolicy による UDP/53 の制限があると名前解決に失敗


```yaml
dnsPolicy: ClusterFirst
```

# Node debug pod とNamespace Pod 挙動比較

| 項目 | Node Debug Pod | Namespace Pod | 
| --- | --- | --- | 
| ネットワーク層 | ホストのネットワーク名前空間を共有 | Kubernetes の仮想ネットワーク (CNI) 使用 | 
| DNS 設定 | ホスト /etc/resolv.conf を直接参照 | CoreDNS Service IP を介して解決 | 
| 名前解決依存範囲 | ホストの DNS 設定に依存 | CoreDNS + 上流 DNS に依存 | 
| 障害耐性 | CoreDNS 障害や NP 制限をバイパス | CoreDNS／NetworkPolicy の影響を受ける | 




# まとめ

Node Debug Pod ではホストの DNS 設定やネットワーク環境を直接使っていることがわかり、Namespace 内 Pod のデバッグ時には、CoreDNS の稼働状況や NetworkPolicy の設定を合わせて確認することを念頭に入れることが大事です。



### 参考資料

https://kubernetes.io/ja/docs/tasks/debug/debug-cluster/kubectl-node-debug/

https://chimbu.medium.com/enable-internal-cluster-dns-resolution-for-pods-using-hostnetwork-in-kubernetes-845d714f465e

https://decisivedevops.com/kubernetes-pod-policies-dnspolicy-1a70064ec590/?utm_source=chatgpt.com

https://stackoverflow.com/questions/77110555/what-is-hostnetwork-in-kubernetes?utm_source=chatgpt.com
EloquentでSQLを使用せず、データを取得する方法

# Eloquentって何？
EloquentはSQLの文法をかかなくても、DBの操作が可能になるシロモノです。主にLaravel で使われてます。（らしいですね。）今回はLaravelではなく、PHP単体で使ってみましょう。

# Eloquentの導入

まず、初めにでcomposer が入ってるか確かめよう。

    composer -v 
    
入ってなかったら、[公式サイト](https://getcomposer.org/"Eloquent")でDlします。

ダウンロードできましたら、

    composer require illuminate/database

を実行してでinstall します。DLしましたら、'comoser.json'と.'composer.lock'の二つのファイルがあるはずです。


# データを取り出してみる

さて環境を整えたところでEloquentを使用してデータを取り出してみましょう。今までは

    $pdo = new PDO('mysql:host=localhost; dbname=mydb; charset=utf8','root','');

    $sql = 'SELECT * FROM players';
    $statement = $pdo->prepare($sql);
    $statement->execute();

    $players = [];
    while ($player = $statement->fetch(PDO::FETCH_ASSOC)) {
        $players[] = $player;
    }

    $statement = null;
    $pdo = null;

こう書いてましたよね。でもEloquentならこうなります。
始めにSQLの接続です。

    $db = new Illuminate\Database\Capsule\Manager;
    $db -> addConnection(
        [
            'driver' =>'mysql',
            'host' => 'localhost',
            'database' => 'mydb',
            'username' => 'root',
            'password' => 'root'
        ]);
はい、さっそくよくわからないものが出てきました。
1行目の new~~はpython でのimportに該当します。このメソッドを使用して、$db -> addConnection～～～とデータベースに接続します。
そして接続したものはどこからでも呼び出したいので

    $db -> setAsGlobal(); //これで何処からでも取り出せる
    $db -> bootEloquent();// ORマッパーの起動

こうします。

次にテーブルを呼び出してみましょう

    class Player extends Illuminate\Database\Eloquent\model{
    };

はい。何となくでextends～～でplayerってテーブルを呼び出した...と思われガチですが、実はここではクラス名の複数形が自動的にテーブル名になる仕様です。つまり、ここで呼び出されたのはPlayersってテーブルであり、Eloquent君は名前の末端から「S」を剥奪する湯婆婆みたいなやつです。
ちなみに名前の末端が「S」でないならEloquentの命名違反です。雇用すらされません。
テーブルを呼び出したので使ってみましょう。

    $players = player::all();

はい、これで全部取り出します。ちなみに、
    
    $players = player::select('*')->get();

と書いても取り出せますよ。
では、require_once～～ で別ページにアクセスします

    require_once 'views/content.all.php';

--------##以下views/content.tpl.php----------------------

取り出し方はEloquentを使わない方法と変わりません。なので

     <?php foreach ($players as $player) { ?>
            <p>
                <?= $player['id'] ?>,
                <?= $player['name'] ?>,
                <?= $player['level'] ?>,
            </p>
         <?php } ?>

はい。こんなものです。


# データを取り出してみるー単体ー

続いて特定のデータのみを取得する方法です。取得方法として条件分岐であるWHEREをしましたよね？ここでも同様です。ただし、SQL文に書く必要はありません。

    class Player extends Illuminate\Database\Eloquent\model{
    };

これでテーブルを呼び出して、

    $players = player::where('score','>=' , 100)->get();

これでscoreが5以上の物がデータとして取り出されます。
また、 = を使用する場合では
    
    $players = player::where('score', 100)->get();

これでよく,更に、

    $players = player::where('score', 5)->first();
    
とfirstを使う事でデータがある場合のみに使用できます。


--------##以下views/content.part.php----------------------

取り出し方は先ほどと同様にEloquentを使わない方法と変わりません。なので


            <p>
                <?= $player['id'] ?>,
                <?= $player['name'] ?>,
                <?= $player['level'] ?>,
            </p>
            
はい。こんなものです。


    


参考文献
https://blog.bagooon.com/?p=1492

https://qiita.com/Dev-kenta/items/478a4464b56c8f2bb46a
Gitコマンド ブランチを変更する

# Gitコマンドでブランチを変更する方法

Gitでブランチを指定せずにリポジトリをクローンするとmasterが反映されます。
既存リポジトリのままでブランチを切り替えたいときは以下のコマンドを入力しましょう。

## 既存リポジトリのまま変更する方法

リモートの情報を最新にする
```
$ git fetch origin
```
対象のブランチをチェックアウト
```
$ git checkout -b [対象ブランチ名] origin/[対象ブランチ名]
```
必要に応じてmasterを削除する
```
$ git branch -d master
```
以上のコマンドで対象ブランチがアクティブになります。

## 新規リポジトリでクローンする方法
リポジトリを削除してから新たにクローンする
```
$ rm -rf [既存リポジトリのフォルダ]
$ git clone --branch develop --single-branch [リポジトリのURL]
```
--single-branchを外すと、ほかのブランチの情報も引っ張ってきますが、手っ取り早く対象のブランチだけほしいときはつけたほうが良いです。

### 作成したファイルはどうなるの？
ブランチを切り替えただけであれば、ローカルリポジトリ直下に新規作成したファイル／フォルダ（たとえば .venv/ や手動で作成したディレクトリ）は新しいブランチに引き継がれます。
もちろん、フォルダごと削除してしまえば消えてしましますので、ご注意ください。
Java script初心者が書いた為替計算の処理の計算についてまとめてみた

**【Javascript初心者が為替計算に挑戦してみた】**

**はじめに**

普段はネットワークエンジニア関連の勉強をしていますが今回は為替計算をする機会があったのでそっちの話をしたいと思います


**やったこと**

・１ドル＝150円として円をドルに換算する処理を考えました。
・両替は最大66ドルまでとしそれを超えた分はお釣りとして扱うようにしました。
・If文だけを使ったシンプルな処理を組むようにしました。

**実際組んだコード**

int dollar = yen / 150;
        if (dollar > 66) {
            dollar = 66;
        }

        System.out.println(dollar);
        System.out.println(yen - dollar * 150);
    }
}

めちゃくちゃ省略しましたがこんな感じでやりました。


**学んだこと**

・やっぱり実際に手を動かすのが一番理解できるなと再確認しました。

・「こうしたら動くかな？」と試行錯誤することで理解が深まった気がします。


**おわりに**

小さなコードでも完成させると自信につながります。これからも自分のペースで学んだことをまとめていきたいです！
🌼エンジニアママのキャリア再出発記録🌼【年収1000万を目指して】

## はじめに

はじめまして。現在育児中（1歳児）のエンジニアママです👩‍💻  
インフラエンジニアとして約4年間働いていましたが、  
「育児と両立できる働き方」と「今後のキャリア形成」の両方を考え、  
現在は**Pythonを学習しながら、年収1000万＆フルリモート勤務**を目指しています。

この記事では、今私がなぜこの目標を立てたのか、  そしてどんなことに取り組んでいるかをまとめました。

---

## なぜこの目標を立てたのか

- 将来的に、在宅で仕事をしながら安定した収入を得たい
- 子どもの送迎や体調不良でも働き方を柔軟にしたい  
- キャリアが止まることなく、自分自身の市場価値を高めたい  
- 子どもにも「挑戦する背中」を見せたい  

---

元々は、ネットワークエンジニアとしてNW機器の構築や社内試験、現場での設置・試験、保守などを主にやっていました。
とてもやりがいのある仕事でしたが、残業の多さや不定期にある夜間作業のことを考えると、子育てと両立しながらキャリアを築けるのか疑問に思うようになりました。
また、バリバリ働きつつも将来的に子供が小学生になって家に帰ってきた時には、おかえりと言って迎えてあげられるようにしたいなという新たな目標もできました。
子供が保育園に入園したタイミングで自分の状況と目標を棚卸し、理想のこれからのために今やることを明確にしました。

## 今やっていること

現在は時短正社員として働きながら以下のような取り組みをしています。

- デイトラのPythonコースで基礎学習
- GitHubでポートフォリオ公開（https://github.com/Hira-Mao/bing-search-keyword-helper）
- Qiitaで学習のアウトプット記録
- 転職活動も並行して進行中（ママワークス・type転職など）

---

もともとはスクリプトの知識がゼロの状態でしたが、NW環境を構築する際に触れなければいけない場面がありました。
基礎知識がない状態だったため、周りに頼りきってスクリプトを触っていたことは産休に入る前に感じた悔しい出来事です。
その経験を踏まえて、子供の保育園が決まったタイミングでPythonを基礎から勉強しようと思いスタートさせました。
理解が追いつかなくて大変なこともありますが、予想外なことに勉強が楽しくなり、今のところは継続して勉強ができています。
今はやっとツールを1つ作ってみたところで、GitHubにて公開し、Qiitaも登録したばかりです。
また、現在の会社ではPythonに触れる業務には携われないことと、通勤時間が想像以上に発生して保育園の送り迎えや自分の目標に向けた勉強との両立が難しいことから、転職活動もはじめました。
なかなか大変ですが、どんなに疲れてても1日最低でも10分はPythonの勉強をしようと決めており、家事や育児が落ち着いた深夜にパソコンの前に毎日座るようにしています。

## 初めて作ったPythonツールについて

学習の一環として、**Bing検索を使ってSEOキーワードを自動取得するCLIツール**を作成しました。

- BeautifulSoupでのスクレイピング  
- ユーザーがキーワードを指定して実行できるCLI形式  
- 現段階ではCSV出力などは未実装ですが、今後改良予定です。

👉 GitHubリポジトリはこちら：  
https://github.com/Hira-Mao/bing-search-keyword-helper

---


## 今後の目標

- スウェーデン語翻訳＆音声再生ができるGUIツールを開発 
- 年内に月10万円以上の副収入をPythonで達成する  
- 転職先を見つけ、時短かつ柔軟な働き方へシフトする  
- 最終的には**年収1000万円を自力で稼ぐ**エンジニアになる！

---

大きな目標だけを立ててしまうと挫折してしまう気がしたため、年間の目標、月毎の目標、今週の目標も決めています。
その日にやったことと明日やるタスクは毎晩書き出してとにかく継続できるように工夫しています。
目標はGoogleスプレッドシートで作成したToDoリストで管理しながら毎日見えるようにしています。
今はスキルもまだ身についた実感もなく、この進め方であっているのか不安に思うこともありますが、適度に息抜きを取り入れながら継続できる範囲でこれからも頑張る予定です。

## 最後に

私のまわりには、子育てをしながらエンジニアとしてのキャリアに悩んでいる方がいなかったため、相談できる相手もいませんでした。
そんな中で私は、Qiitaで同じように頑張っているママさんの記事を読み、「自分も頑張ってみよう」と思い、この記事を書くことにしました。
自分の投稿も、同じように育児とキャリアの両立に悩んでいる方の励みになれば嬉しいです。  
これからも学習や開発の様子をゆるく記録していきます🌷応援してもらえたら嬉しいです✨

---

###
20250509_github_to_qiita_first

# この記事は？
QiitaとGitHubを連携してから初めての記事投稿です。
ブラウザから編集するのもいいんですが、GitHubで管理してエンジニアっぽさをアップしたい！！
皆さんもQiitaとGitHubを連携してみてくださいー！

参考ページ

https://zenn.dev/kuuki/articles/qiita-article-managed-by-github
【うっかりミスとおさらば！】ONES Wikiの「下書き機能」で安心＆快適ドキュメント作成

## はじめに
「せっかく書いた文章が、誤操作で消えてしまった…」、「公開前に間違って保存して、チーム全員に未完成の状態を見られてしまった…」こんな経験、ありませんか？

情報共有ツールとしてよく使われるONES Wikiには、そんな「うっかりミス」を防ぐ便利な「下書き機能」があります。

今回は、この便利な下書き機能の使い方や、日々の業務でどんなふうに活用できるのかを詳しく紹介します！

## ONES Wikiの「下書き機能」ってなに？
[ONES Wiki](https://systemcon.co.jp/products/oneswiki/)でページを編集すると、自動で下書きとして保存されます。これにより、うっかりブラウザを閉じてしまっても、閉じたところから簡単に再開可能。

また、書きかけのページが間違ってチームに公開される心配もありません。ドラフト状態なら、自分だけが見れるので安心です！

### 主な特徴
* **自動保存で安心！**：数秒ごとに自動保存されるから、突然のPCやブラウザのクラッシュでも慌てない。
* **「未公開」状態で管理できる！**：下書きは自分だけが閲覧・編集可能。安心して作業に集中できます。
* **チームへの公開タイミングを自分で選べる！**：完成してから「公開」ボタンを押すだけでチームにシェアできます。

新規ページを作成中に「公開（保存）」せず、編集画面を閉じたりブラウザを閉じた場合、左のナビゲーション上部に「下書き」のカテゴリが表示されます。ここから編集中や未公開のページを一覧でチェックできるので、作業漏れも防止できます。

下書き状態のページは、編集画面右上から編集・削除・公開を自由に指定可能。「編集」をクリックすれば、途中からすぐに再開できます。

![下書き機能の特徴.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3483972/e3b4342c-f608-4a69-a612-a99068031005.png)


また、既存のページを編集する場合も、下書きが自動保存されているので安心。いつでも途中から再開できますよ。

![下書き自動保存.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3483972/bd57aa94-dd12-4d1d-89d6-43501ab2400d.png)

## 下書き機能が活躍するシーン
実際の利用シーンをいくつか見てみましょう。

### 1. 時間をかけてじっくり書きたい資料作成に
たとえば新サービスの企画書や業務フローの改善提案など、じっくり書きたい資料には特に便利。途中で作業を中断しても、自動保存のおかげで続きからスムーズに再開できます。

### 2.誤送信・誤公開を防ぎたいときに
未完成のまま間違ってチームに公開…なんてミスもよくありますよね。
ONES Wikiなら「公開」ボタンを押すまでは他メンバーに見えないので、作成中のページは完全にプライベート。
誤解やトラブルの元を未然に防げます。

### 3.複数人での共同作業・レビューにも
初稿を一人が書き、別の人がレビュー・加筆する場合も便利です。下書き状態のページのURLを共有して、安心してやり取りができます。

## まとめ
ONES Wikiの「下書き機能」を使えば、安心感をもって自由にドキュメント作成が可能に！下書き機能が「書く」をもっと自由にしてくれます。
* 自動保存でうっかりミスも怖くない
* 公開タイミングは自分次第
* 中断＆再開も簡単

「安心して書ける」環境だからこそ、良いコンテンツやナレッジが生まれます。まだ使ったことがない方は、ぜひ試してみてくださいね！
Javaの「staticイニシャライザ」をざっくりまとめてみた[Java初心者]

## はじめに

こんにちは。
プログラミング初心者Wakinozaと申します。
Java勉強中に調べたことを記事にまとめています。

十分気をつけて執筆していますが、なにぶん初心者が書いた記事なので、理解が浅い点などあるかと思います。
記事を参考にされる方は、初心者の記事であることを念頭において、お読みいただけると幸いです。
間違い等あれば、指摘いただけると助かります。

## 対象読者

- Javaを勉強中の方
- Java Silver試験を勉強中の方
- Javaのstaticイニシャライザをざっくり知りたい方

## 目次

1\.「staticイニシャライザ」とは
2\. クラスロード時の実行順番
3\.「staticイニシャライザ」と「コンストラクタ」との違い

## 本文

### 1\. 「staticイニシャライザ」とは

「staticイニシャライザ」は静的メンバの一つで、クラスがロードされたタイミングに１度だけ実行されるブロックです。クラスロード時に自動で実行したい処理がある場合に用いられます。
「staticイニシャライザ」は、「static初期化子」「static初期化ブロック」とも呼ばれます。

「staticイニシャライザ」を使う場合、staticキーワードと波括弧ブロックでコードを記述します。
具体的なコードは以下の通りです。

```Java
class Test {

  static {
    System.out.println("staticイニシャライザ起動"); 
  }
  
}
```

### 2\. クラスロード時の実行順番

「staticイニシャライザ」は複数書くことができます。
静的フィールドの初期化と「staticイニシャライザ」が複数ある場合は、上から順番に実行されます。


```Java
class Test {
  static int num = 10;  //①②
  static {
    System.out.println("staticイニシャライザ1を実行"); //③
  }
  static {
    System.out.println("staticイニシャライザ2を実行"); //③
  }
  static String name = "Taro"; //①④
}
```

上のコードの場合、クラスロードの時の内部処理は、以下の順番で行われます。

①静的フィールドnumとnameにデフォルト値を代入
②静的フィールドnumに初期化値を10を代入
③「staticイニシャライザ1」を実行
④「staticイニシャライザ2」を実行
⑤静的フィールドnameに初期化値"Taro"を代入


### 3\. 「staticイニシャライザ」と「コンストラクタ」

初期化に用いられる似たようなものとして「コンストラクタ」があります。
「staticイニシャライザ」と「コンストラクタ」では、実行タイミングと操作対象が異なります。

「コンストラクタ」の実行タイミングは、インスタンス生成時です。インスタンスフィールドの初期化など、インスタンス生成時に実行したい処理を記述します。

一方の「staticイニシャライザ」の実行タイミングは、クラスロード時です。クラスロード時に実行したい処理を記述します。また、静的メンバがインスタンスメンバにアクセスできないのと同様に、「staticイニシャライザ」もインスタンスメンバにアクセスでません。「staticイニシャライザ」内にインスタンスメンバやthis参照を記述すると、コンパイラエラーとなります。

では、それぞれの実行タイミングをコードで見ていきましょう。
以下のコードをご覧ください。

```Java
class Test {
  static{
    System.out.println("Testクラスのstaticイニシャライザ"); //③
  }
  Test(){
    System.out.println("Testクラスのコンストラクタ"); //④
  }
}

public class Main { 
  static{
    System.out.println("Mainクラスのstaticイニシャライザ"); //①
  }
  public static void main(String[] args){
    System.out.println("Mainクラスのmainメソッド");  //②
    Test obj = new Test();
  }
}
```

TestクラスとMainクラス、それぞれにstaticイニシャライザが記述されています。
上のコードを実行すると、以下の結果となります。

Mainクラスのstaticイニシャライザ //①
Mainクラスのmainメソッド         //②
Testクラスのstaticイニシャライザ //③
Testクラスのコンストラクタ       //④


## まとめ

- 「staticイニシャライザ」はクラスロード時に一度だけ実行されるブロックです
- 「staticイニシャライザ」は複数書くことができ、上から順番に実行されます
- 「staticイニシャライザ」と「コンストラクタ」は、実行されるタイミングと操作対象が異なります

---------------

記事は以上です。
最後までお読みいただき、ありがとうございました。

##  参考情報一覧

この記事は以下の情報を参考にして執筆しました。

- [オラクル認定資格教科書 JavaプログラマSilverSE11]
- [パーフェクトJava 改訂3版]
- [8.1 スタティックなメンバー（スタティックフィールド、スタティックメソッド、ユーティリティ、クラスのライフサイクルなど）～Java Basic編](最終更新 2023-11-05)(https://qiita.com/KenyaSaitoh/items/10e7abd3b38724975a03) (参照 2025-05-09)
chatgptはなぜ日本語を理解できるのか

## 0.はじめに
近年の自然言語処理（NLP）における最大の進化は、「意味」を数式で扱えるようになったことにあります。
その根幹を支えているのが「ベクトル化」と「確率的予測」という2つの概念です。

ChatGPTのような大規模言語モデル（LLM）は、人間のように“言葉の意味”を理解しているわけではありません。
ではなぜ、あれほど自然な会話ができ、意味の通った文を生成できるのか？

その秘密は、「単語や文の意味」を数値の並び（ベクトル）に変換し、「次に出現しそうな単語」を確率で予測するという、極めて数学的なプロセスにあります。

この記事では、ChatGPTの出力が“意味あるもの”に見える仕組みを、

1.単語ベクトル（埋め込み）

2.文脈処理

3.出力トークンの確率分布とサンプリング

という3つの観点から、丁寧に解説していきます。

## 1. 単語は数値のベクトルで表現されている（意味の埋め込み）
AIは文字列をそのまま扱うことはできません。たとえば「リンゴ」という単語を見ても、コンピュータにとってはただの記号列にすぎません。

そこで登場するのが、「単語のベクトル化（埋め込み）」です。

これは、単語を高次元の数値ベクトル（例：768次元や1,024次元など）として表現する手法です。

たとえば：

「りんご」→ [0.14, -0.72, ..., 0.91]

「みかん」→ [0.15, -0.70, ..., 0.89]

「自動車」→ [-0.42, 0.25, ..., -0.88]

このように、意味が近い単語ほど、ベクトル空間上でも近くに配置されるという性質があります（= 意味の幾何学化）。これにより、AIは「類似語」や「言い換え」を数値的に捉えられるようになります。

実際、以下のようなベクトル間の差分が意味的な関係を表すことが知られています：

king - man + woman = queen

下図のように、kingとqueenの関係は、manとwomanの関係とほぼ同じ方向のベクトル差として表されます。
![output.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914969/099774c9-2a89-459f-82e0-30c134a15ede.png)

## 2. 文脈は「自己注意機構」で処理されている
単語がベクトルになっただけでは、文章の意味までは理解できません。
たとえば、「私は犬が好きだ」と「犬は私が好きだ」は、使っている単語は同じでも、意味がまったく異なります。

このような文脈の違いを捉えるために使われるのが、Self-Attention（自己注意機構）です。

Self-Attentionは、ある単語の意味を決める際に、「他のどの単語をどれだけ重視すべきか」を自動的に計算します。

例1：「私は犬が好きだ」
この文では、「好きだ」という動詞の主語は「私」です。
したがって、「好きだ」の意味を理解するには、「私」に強く注目する必要があります。

| 単語| 「好きだ」に対するAttentionの重み |
|:-:|:-:|
| 私  |  0.60 |
| は  |  0.05 |
| 犬  |  0.30 |
| が  |  0.05 |
| 好きだ  |  - |

例2：「犬は私が好きだ」
こちらの文では、主語が「犬」に変わっており、「好きだ」の対象が変化しています。
このときSelf-Attentionは、「好きだ」に対して「犬」のベクトルをより強く参照します。
| 単語| 「好きだ」に対するAttentionの重み |
|:-:|:-:|
| 私  |  0.25 |
| は  |  0.05 |
| 犬  |  0.65 |
| が  |  0.05 |
| 好きだ  |  - |


### どうやって重みが決まるのか？
Self-Attentionでは、各単語のベクトルから次の3つが計算されます：

Query（質問）：「今、何を知りたいか？」（例：好きだ）

Key（鍵）：「この単語は、どんな情報を持っているか？」

Value（値）：「実際に取り出す意味内容」

「好きだ（Query）」が、「私」「犬」などのKeyベクトルとどれだけ関係があるかをスコア化し、
それをSoftmax関数で正規化して確率的な重み（Attention）として使います。


この仕組みにより、ChatGPTのようなモデルは「同じ単語でも、文脈に応じて意味を変える」ことができます。

つまり、「好きだ」は固定された意味を持っているのではなく、前後の単語との関係を動的に計算して意味を調整しているのです。
## 3. 出力は「確率分布」から選ばれる
ベクトルで意味を表現し、文脈で意味を調整した後、ChatGPTは次のトークン（単語や記号）を出力します。
その出力は、確率分布に基づいて決定されます。

例として：

「私はコーヒーが」の後に来る単語の確率分布が以下のようになったとします：
| トークン | 選ばれる確率 |
|:-:|:-:|
| 好き | 0.65  |
| 嫌い  |  0.15 |
| 飲めない  |  0.08 |
| 赤い  |  0.01 |

このとき、ChatGPTは確率的に「好き」を選ぶわけです。

ただし、ここで「温度（temperature）」というパラメータによって、どれくらい“ランダムさ”を加えるかが調整できます。これによって、「毎回同じ答え」ではなく、「多様性のある自然な文」が生まれる仕組みになっています。
## 4. 終わりに
ChatGPTは、「言葉の意味を理解しているように見える」存在です。しかし本質的には、単語を数値ベクトルに変換し、その文脈的な関係性に応じて重みづけを行い、確率分布に基づいて次の単語を選び出しているだけのシステムです。

つまり、ChatGPTの賢さの正体は、「意味の数値化」と「確率的な予測」という、極めて数学的な仕組みによって成り立っています。

このような構造を知ることで、我々はAIを神秘的に捉えるのではなく、数学的・構造的に理解できる技術として向き合うことができます。そして同時に、AIの限界や誤解の余地についてもより冷静に評価できるようになります。
SLACK API利用方法について

### はじめに
この記事では、Slack APIを利用したWebアプリ開発に必要な設定と、筆者が開発したアプリを例に必要な要素を説明します。
アプリの詳細は、GitHub (https://github.com/ryosuke0828/KanKan.git) を参照してください。
なお、APIの設定方法など一部の詳細は、以下の記事を参照してください。

参考にした記事
•https://zenn.dev/kou_pg_0131/articles/slack-api-post-message
•https://qiita.com/fuku_pg/items/f5ae2a7437135fcb258c

### slack apiを利用してアプリを作成する
ここでは、Slack APIのトークンを取得し、それを用いて自作のWebアプリケーションで処理を行うことを想定します。

1. まず、Slack APIのページにアクセスします。検索エンジンで検索してください。

1. Your Apps ページで、赤枠で囲まれた箇所をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787523/a8968c7c-7ac6-47ab-88fc-45538130f86b.png)

1. 「From Scratch」を選択し、アプリ名と使用するワークスペースを指定します。

1. 使用する権限（スコープ）を指定します。画像の赤枠部分のタブに移動してください。
![Screenshot 2025-05-09 at 14.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787523/9f27592b-f8ee-4d00-8b58-94147f23e090.png)

1. 筆者のアプリでは、次のスコープを選択します。ScopesのBot Token Scopesで、以下の画像のスコープを選択してください。これらは、チャット履歴の取得、ユーザー情報の取得、メッセージの送信、リアクションの読み取りの機能です。ご自身のアプリ開発に合わせて、適切に選択してください。
![Screenshot 2025-05-09 at 14.32.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3787523/7ac47ce4-b68c-44df-833d-55d663486248.png)

1. これらを選択後、アプリをワークスペースにインストールします。表示されたトークンを使用して、APIを利用できます。
Carbon::createFromFormatの正しい使い方

# はじめに
PHPで日付操作をする場合、Carbonを利用することが多いと思いますが、今回紹介するメソッド`createFromFormat`には使用上の注意があったため、備忘録も兼ねて投稿しようと思います。

# メソッド`createFromFormat`とは
時刻の文字列を指定されたフォーマットに従ってパースし、Carbonオブジェクトを返します。

```php
> $carbon = Carbon::createFromFormat('Ymd', '20250509');
> $carbon->format('Y/m/d');
= "2025/05/09"
```
第一引数でフォーマット、第二引数で時刻を設定します。

ただ、このままだと意図した処理ができないケースがあります。

## 意図した処理にならないケース

### 日付の比較
同じ日付を設定して、等しいか確認してみます
```php
> $carbon1 = Carbon::createFromFormat('Ymd', '20250509');
> $carbon2 = Carbon::createFromFormat('Ymd', '20250509');
> $carbon1->eq($carbon2);
= false
```
`true`になると思いきや`false`が返ります。

なぜなのか、詳しく確認します。
フォーマットを時分秒まで指定して出力してみます。
```php
> $carbon1 = Carbon::createFromFormat('Ymd', '20250509');
> $carbon1->format(DateTimeInterface::ISO8601);
= "2025-05-09T13:57:21+0900"
```
日付しか設定していないのにもかかわらず、時分秒も設定されています。
このせいで、意図しない値まで比較されており、結果が`false`になっていました。

公式ドキュメントを確認してみます。
※Carbonはdatetimeのラッパーなので、ドキュメントはdatetimeを確認

https://www.php.net/manual/ja/datetimeimmutable.createfromformat.php
第一引数`format`の説明に今回の問題の原因が明記されています。
> 全てのフィールドは現在の日付/時刻で初期化されます。 

つまり、第二引数で設定した箇所以外(年月日以外)の値は現在の日付/時刻に置き換わります。

## 意図した値を設定するには
では年月日以外は0にしたい時はどうすれば良いでしょうか。
これも公式ドキュメントに書いてあります。
> 全てのフィールドは現在の日付/時刻で初期化されます。 ほとんどの場合、これらの値を "ゼロ" (Unix タイムのエポック 1970-01-01 00:00:00 UTC) でリセットしたいはずです。 これは、format の最初の文字に ! を入れるか、 最後の文字に | を入れることで実現できます。 

実際に試してみます。
```php
> $carbon1 = Carbon::createFromFormat('!Ymd', '20250509');
> $carbon1->format(DateTimeInterface::ISO8601);
= "2025-05-09T00:00:00+0900"
```
時分秒が0に変わりました。

比較も試してみます。
```php
> $carbon1 = Carbon::createFromFormat('!Ymd', '20250509');
> $carbon2 = Carbon::createFromFormat('!Ymd', '20250509');
> $carbon1->eq($carbon2);
= true
```
意図通り`true`が返りました。

# さいごに
メソッドは思わぬ挙動をする場合があります。
初めて使うメソッドは公式のドキュメントまで確認しましょう。
【超入門】Pythonで2Dゲームを作ろう！Pygameの始め方まとめ

Pythonでゲームを作ってみたい！
そんな方におすすめなのが Pygame ライブラリです。
この記事では、Pygameの始め方を5ステップで超わかりやすく解説します。

🧰 環境
OS：Windows / macOS / Linux

Python：3.x系（最新版推奨）

Pygame：2.x系

🔽 Step 1：Pythonをインストール
まだPythonが入っていない方は、公式サイトからインストールしてください。

👉 https://www.python.org/downloads/

※ Windowsでは「Add Python to PATH」にチェックを忘れずに！

💡 Step 2：Pygameをインストール

ターミナルまたはコマンドプロンプトを開いて以下を入力：

pip install pygame
✅ 正常にインストールできたか確認したい場合：

import pygame
print(pygame.ver)
バージョンが表示されればOKです！

🧪 Step 3：サンプルコードを動かしてみよう
以下のコードを game.py というファイル名で保存してください。


import pygame
import sys

# 初期化
pygame.init()

# 画面サイズ
WIDTH, HEIGHT = 640, 480
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My First Game")

# メインループ
running = True
while running:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    screen.fill((0, 0, 0))  # 黒背景
    pygame.display.flip()

pygame.quit()
sys.exit()
▶️ Step 4：ゲームを起動！
以下のコマンドでゲームを起動できます。


python game.py
✅ 黒いウィンドウが開けば成功です！

🎯 おわりに
Pygameを使えば、2Dゲームの開発がとても簡単になります。
最も便利なSQL コマンド

基本的なデータ操作
SELECT - データを選択する。
SELECT DISTINCT - 重複しないデータを選択する。
SELECT * FROM - 全ての列を選択する。
SELECT column1, column2 FROM - 特定の列を選択する。
WHERE - 条件に基づいてデータをフィルタリングする。
AND / OR - 複数の条件を組み合わせる。
BETWEEN - 範囲内のデータを取得する。
IN - 特定の値のリストに一致するデータを取得する。
LIKE - パターンに一致するデータを取得する。
IS NULL - NULL値を持つデータを取得する。
ORDER BY - 結果を並べ替える（昇順または降順）。
GROUP BY - 結果をグループ化する。
HAVING - 集計されたデータに条件を適用する。
COUNT() - レコードの数をカウントする。
SUM() - 合計値を計算する。
AVG() - 平均値を計算する。
MAX() - 最大値を取得する。
MIN() - 最小値を取得する。
LIMIT - 取得するレコード数を制限する。
。
データの挿入、更新、削除
INSERT INTO - 新しいデータを挿入する。
INSERT INTO SELECT - 他のテーブルからデータを挿入する。
UPDATE - 既存のデータを更新する。
DELETE - データを削除する。
TRUNCATE - テーブルの全データを削除する。
REPLACE INTO - 挿入時に重複があれば更新する。
MERGE - 2つのテーブルを結合し、条件に応じてデータを挿入・更新・削除する。
OFFSET - 結果の取得をスキップする
テーブルの操作
CREATE TABLE - 新しいテーブルを作成する。
ALTER TABLE - 既存のテーブルの構造を変更する。
DROP TABLE - テーブルを削除する。
ADD COLUMN - テーブルに新しい列を追加する。
DROP COLUMN - テーブルから列を削除する。
MODIFY COLUMN - 列のデータ型や制約を変更する。
RENAME COLUMN - 列の名前を変更する。
CREATE INDEX - テーブルにインデックスを作成する。
DROP INDEX - インデックスを削除する。
DESCRIBE - テーブルの構造（カラム名、データ型など）を確認する。

データベースの操作
CREATE DATABASE - 新しいデータベースを作成する。
DROP DATABASE - データベースを削除する。
USE - 特定のデータベースを選択する。
SHOW DATABASES - 利用可能なデータベースの一覧を表示する。
SHOW TABLES - 現在のデータベース内のテーブル一覧を表示する。
SHOW COLUMNS - 特定のテーブルの列情報を表示する。
SHOW INDEXES - テーブルに関連するインデックスを表示する。
SHOW CREATE TABLE - テーブル作成時のSQL構文を表示する。

ジョイン（テーブル結合）
INNER JOIN - 2つのテーブルの共通するデータを取得する。
LEFT JOIN - 左側のテーブルの全データと右側のテーブルの一致するデータを取得する。
RIGHT JOIN - 右側のテーブルの全データと左側のテーブルの一致するデータを取得する。
FULL OUTER JOIN - 両方のテーブルの全データを取得する。
CROSS JOIN - 2つのテーブルの全組み合わせを取得する。
SELF JOIN - 同じテーブルを結合する。
NATURAL JOIN - 同じ名前のカラムを使って自動的に結合する。

サブクエリ（副問い合わせ）
IN (サブクエリ) - サブクエリの結果と一致するデータを取得する。
EXISTS (サブクエリ) - サブクエリが結果を返すかどうかをチェックする。
ANY / ALL - サブクエリで返された任意の値またはすべての値に一致するデータを取得する。
トランザクション
BEGIN TRANSACTION - トランザクションを開始する。
COMMIT - トランザクションを確定する。
ROLLBACK - トランザクションを取り消す。
SAVEPOINT - トランザクションの中で中間保存ポイントを設定する。
RELEASE SAVEPOINT - 中間保存ポイントを解除する。
ROLLBACK TO SAVEPOINT - 保存ポイントまでロールバックする。


制約（Constraints）
PRIMARY KEY - 主キーを設定する。
FOREIGN KEY - 外部キーを設定する。
UNIQUE - 列の値がユニークであることを制約する。
NOT NULL - 列の値がNULLでないことを制約する。
CHECK - 列の値に条件を設定する。
DEFAULT - 列にデフォルト値を設定する。
ユーザーと権限管理
CREATE USER - 新しいユーザーを作成する。
DROP USER - ユーザーを削除する。
GRANT - ユーザーに特定の権限を付与する。
REVOKE - ユーザーから特定の権限を取り消す。
SHOW GRANTS - ユーザーに付与されている権限を表示する。
ストアドプロシージャと関数
CREATE PROCEDURE - ストアドプロシージャを作成する。
DROP PROCEDURE - ストアドプロシージャを削除する。
CALL - ストアドプロシージャを実行する。
CREATE FUNCTION - 関数を作成する。
DROP FUNCTION - 関数を削除する。
RETURN - 関数の戻り値を指定する。

ビューとインデックス
CREATE VIEW - ビューを作成する。
DROP VIEW - ビューを削除する。
CREATE INDEX - インデックスを作成する。
DROP INDEX - インデックスを削除する。

データ型
INT - 整数型。
VARCHAR - 可変長文字列型。
TEXT - 長い文字列型。
DATE - 日付型。
TIME - 時間型。
DATETIME - 日時型。
DECIMAL - 固定小数点型。
BOOLEAN - 真偽値型。




その他
EXPLAIN - クエリの実行計画を表示する。
SHOW VARIABLES - MySQLサーバーの設定変数を表示する。
SHOW STATUS - サーバーの状態に関する情報を表示する。
SET - セッションの設定を変更する。
CONCAT() - 文字列を連結する。
NOW() - 現在の日時を取得する。
DATE_ADD() - 日付に加算する。
DATE_SUB() - 日付から減算する。
ROUND() - 数値を四捨五入する。
COALESCE() - NULL値を別の値で置き換える。
VS Codeアップデートを notebooklm で秒速キャッチアップする方法

# 🔍 VS Codeアップデートを **notebooklm** で秒速キャッチアップする方法

> 英語のリリースノートを読むのがツラい…  
> 新機能の概要だけサクッと知りたい…  
>  
> 👉 そんなときは **notebooklm + 公式ドキュメントURL** で解決！

---

## 1️⃣ 公式ドキュメントを開く

![「VS Code Release Notes」トップページ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904450/09001c20-1ba6-4c8a-8296-ba85c3f78e5a.png)

VS Codeのリリースノートは毎月更新されます。まずは最新版のページをブラウザで開き、URLをコピーしておきましょう。

## 2️⃣ notebooklm に URL を追加して自動取り込み

![notebooklm に URL を追加](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904450/9efc07a6-ebff-420a-b6c7-d9c4c22f71b0.png)

1. notebooklm を開く  
2. **「新規作成」** → **「ウェブサイト」** を選択  
3. コピーした URL を貼り付けて **挿入**

これでドキュメント全文がノートに取り込まれます。⏳

## 3️⃣ ✨ ワンクリックで “ポッドキャスト要約” を生成

![Studio Generate ボタン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904450/963ede5f-18c2-4ebb-bc8f-d055c2c72f3f.png)

右ペインの **Studio** にある **生成** ボタンを押すだけで、  
📻 **ポッドキャスト風の音声要約** が完成！  
通勤中に流せばアップデート内容を耳でインプットできます。

## 4️⃣ ❓ 気になる点をチャットで即質問

要約を聞いて「これどういう意味？」と思ったら、そのまま notebooklm のチャットへ質問。  
AI が文脈を保持しているので、ピンポイントで回答してくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/904450/7ab4d4c8-7f3d-49f9-960f-1fffc6756d22.png)
---

## 🛠️ 活用 Tips

| シーン | 使い方 | 効果 |
|---|---|---|
| 🔄 月次の新機能チェック | Release Notes ページを追加 | 作業開始前に概要を把握 |
| 📝 英語記事の速読 | URL をどんどん貼る | 翻訳不要で要点が掴める |
| 👥 チーム共有 | 要約を社内チャットへ貼る | 情報共有コストを削減 |

---

## 🚀 まとめ

- **公式ドキュメントURL + notebooklm = 最速キャッチアップ**  
- ポッドキャスト要約で目＆耳からインプット  
- チャットで疑問点を即解決  

英語ドキュメントの読解やリリース追従がグッと楽になります。  
ぜひ試して、開発効率を底上げしましょう！ 🔧✨
【ChatGPT】休日の過ごし方提案するPromptです。


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

　今回は、休日の過ごし方提案するPromptです。

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

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

　今回は、
　　休日の過ごし方提案する
　　　Promptです。

　ゴールデンウィークが
　　終わっての一週間、
　　　お疲れ様でした。
　　　　（この時間はまだか😅）

　土曜日日曜日が
　　お休みの方は
　　　多いかと思います。

　“どう過ごそうか”と
　　ぼんやりと考えて
　　　いらっしゃるかも
　　　　しれませんね。

　まぁ、
　　今回のPromptは
　　　土日は関係ありませんけどね。

　こちらがPromptになります。
　　＊＊に日数を入力送信してください｡

```Text:休日の過ごし方提案するPrompt
休日（＊＊日間）の過ごし方を考えてください。
過ごし方に必要な金銭や道具なども考えて。

まずは、質疑応答から。
事前にやる必要があるかを最初に尋ねてください。
```

　まず、
　　こちらの予定があるか
　　　聞いてきます。

　そのあと、
　　四つ五つの質問が
　　　出てきます。

　そこから
　　もうひとつの質問が
　　　出てきて、休日の予定が
　　　　提案されます。

　そんなに
　　奇抜な提案は
　　　されませんので
　　　　ご安心を。

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

　今回は、ここまで。