OmniAICreator/Qiita-1.07M huggingface dataset:
webエンジニアのためのシェル入門

## はじめに
アプリケーションの開発を，エディターだけで完結することはできません．

最近ではVScodeをはじめとする多機能エディターが存在し，一部のツールはGUI上でも操作できるようになっています．
しかし，すべてのアプリケーションに対応しているわけではないので多少なりともシェルを使える必要はあると思います．
また，それらはあくまでもシェルで行っていた操作をGUI”でも”行えるようにしただけなので，シェルを学んでおいても損はないと思います．

（CLIが使えるとGUIでの操作はまだるっこしく感じることが多いです）


<details>
<summary>
以下でターミナルとシェルの関係について説明しますが，
はじめは同じものだと認識していても問題ありません．
</summary>
## ターミナル，シェルとは

### ターミナルとは？
ターミナルは，コンピュータとユーザーが**文字（テキスト）ベースでやりとり**をするためのアプリケーションです．
普段はアイコンやウィンドウで操作するGUI（グラフィカル・ユーザー・インターフェース）を使っている人も多いですが，ターミナルはキーボードからコマンドを直接入力してコンピュータを操作します．

#### 例
- Windows：「コマンドプロンプト」や「PowerShell」，「Git Bash」
- Mac：「ターミナル」アプリ
- Linux：「gnome-terminal」や「konsole」など

---

### シェルとは？
シェルは，**ユーザーが入力したコマンドを解釈し，OSに伝えるプログラム**です．  
つまり，ターミナルの中で実際に「コマンドの受付・実行」を担当するのがシェルです．

#### よく使われるシェルの種類
- **bash（Bourne Again SHell）**：多くのLinuxやMacで標準
- **zsh**：カスタマイズ性が高く，近年人気
- **fish**：わかりやすい構文や補完機能が特徴

---

### ターミナルとシェルの関係
- ターミナル：**入力と出力の「窓口」**（画面やアプリ）
- シェル：**コマンドの「中身」**（実際の通訳・操作役）

例えば，Macの「ターミナル」アプリを開くと，その中でbashやzshなどのシェルが動いています．ユーザーはターミナルからコマンドを入力し，それをシェルが受け取って処理します．

---
</details>

## はじめてにおすすめのシェル環境
### Windowsユーザー向け（Git Bash, WSL など）
- **Git Bash**
gitをインストールしたときに一緒についてきます．
はじめてのお試し程度におすすめです．
Windows上で，Bashの動作をエミュレート（模倣）します．

- **WSL ( Windows Subsystem for Linux)**
シェルだけでなく，Windows上にLinuxのOSを入れるようなものです．
アプリケーション開発とWindowsは相性が悪いことが多いので，ある程度慣れたら（なんなら最初から）WSLをインストールすることをお勧めします．

### Mac/Linuxユーザー向け
「ターミナル」アプリを開くと，それぞれのデフォルトのシェルが実行されます．


## 4. 最初に覚えたい基本コマンド10選
### ディレクトリ操作（cd, ls, pwd, mkdir）
#### **cd**
**Change Directory**  
カレントディレクトリ（作業中のディレクトリ）を移動するためのコマンドです．

```bash
cd                # ホームディレクトリへ移動
cd ディレクトリ名   # 指定したディレクトリへ移動
cd ..             # 一つ上のディレクトリへ移動
```

#### **ls**
**List**  
現在のディレクトリ内にあるファイルやディレクトリの一覧を表示します．
```
ls                # 一覧表示
ls -l             # 詳細情報付きで表示
ls -a             # 隠しファイルも含めて表示
```

#### **pwd**
**Print Working Directory**  
今いる（作業中の）ディレクトリのフルパスを表示します．

```
pwd               # 現在のディレクトリのパスを表示
```


#### **mkdir**
**Make Directory**  
新しくディレクトリ（フォルダ）を作成します．

```
mkdir 新しいディレクトリ名  # 新しいディレクトリを作成
```
- ファイル操作（cp, mv, rm, cat）

#### **cp**
**Copy**  
ファイルやディレクトリをコピーします．
```
cp ファイル名 コピー先         # ファイルをコピー
cp -r ディレクトリ名 コピー先   # ディレクトリをコピー
```

#### **mv**
**Move**  
ファイルやディレクトリの移動や，名前の変更をします．
```
mv ファイル名 移動先           # ファイルを移動
mv 古いファイル名 新しいファイル名  # ファイル名の変更
```

#### **rm**
**Remove**  
ファイルやディレクトリを削除します．  
※重要なデータを消さないよう注意しましょう．
```
rm ファイル名                  # ファイルを削除
rm -r ディレクトリ名           # ディレクトリを再帰的に削除
rm -f ファイル名               # 確認なしで強制的に削除
```

#### **cat**
**Concatenate**  
ファイルの中身を表示します．
```
cat ファイル名                 # ファイルの内容を表示
```

## おわりに
ここで紹介したものは，本当に基本的なファイルやディレクトリの操作に関するコマンドだけです．
実際に開発を進めるには，使いたいそれぞれの技術（docker, next, goなど）のコマンドも使えるようになる必要があります．
がんばってください！
手を止めないという実装のコツ

みなさんどうも

のどかはって言います
のんちゃんなんていう自称もしてます

僕はエンジニアなのでプログラミングでお仕事をもらっています

でもお仕事って寝ながらできる訳じゃない(間違って寝ちゃうのは許されたいね！)

じゃあずっと手を動かすのかというと難しい

難しいけどお仕事は手を動かしていないと進捗が生まれない

だからこそ

# 状況分析の話

人間の集中力とか、やる気の話はどこにでも転がっているので、開発について語ります

この規則に則れば〜みたいな話はしません

仕事はこのサイクルのうちどこが一番手を動かすのかという話をします

開発においてあなたが担当する領域は明確でしょうか

明確だけど明確じゃないはずです

・仕様要件を確認した上で設計に移る
・設計されていくフローや指示、検証を行っている最中に問題が生じる
・先方または上司、責任者にその課題の所在と説明責任を果たし打開策を提案または相談する
・最終的にモックアップされた設計を実装者が読めるドキュメントとして残すか口頭で説明を行う
・実装者はコードへと変換を行いテストや実装品質による要件の軽微変更を周囲に確認する
・完成された実装を全員でレビューする
・デプロイ作業等によって先方や上司が確認できる形態で製品を監視する

これだけの中で自分は大体ここら辺と線引きできた人は恐らくSEの方か、プロダクトマネージャーの準ずる立場のはずです

ということは、その前段階として社会で1番の課題である自分の居場所を確立し、見つけ出すという作業が必要です

己が貢献できる領域の主張と、常にその発信や作業効率化を行わなければなりません

これは決して立ち止まらずにできるわけではなく

本来ならその課題に対して丸2日布団にくるまって社会圧力をその身で煮詰めながら、めう〜と喚いて解決していくものですが(議論対象)

残念ながら世間は甘くないので、そういうことはきちんと状況説明や会社の制度を用いないと可能にすらなりません

ということで

# 手を止めない技術の話
とても簡単に説明するなら喚けという話です

全ての状況を文字に起こしTwi⚪︎terよろしく、毎分毎秒呟けば少なくとも進捗は伝えられます

ですが喚くと言っても色々な手段があります

・設計書をまとめる
・要件確認をして疑問点をまとめる
・簡単なモックを作っちゃう(検証とテンプレ作成の同時並行)
・目の前のタスクを並べる

これのうち一番手を動かしているのはなんでしょうかという話です

本質的にいうならば作業は全て連続なので、全部の道をどう通るかという話です

一番手を動かすのは簡単なモック作成だけでしょう

もしもコーダーやPGとして期待されているならそういうことになります

そうはなりますが

# 組織で手を止めないという話
我々が共同体として社会で仕事を請け負っている時

手を動かすことが重要視されているのに

本当は立ち止まって話し合えば解決する出来事が沢山あります

その本質に気づいた者から会議を提案しますが、なぜかうまくいかないこともあります

ちょっとでも不安だけど伝えることができず、自分でなんとかしようとして手戻りなんてこともあるでしょう

最終的に上司に指示を仰げば良かったという展開はよくあることです

だからこそ、相談しようという結論を持ってきたいですが

それだとよくある記事の焼き増しなので、この記事では手を動かすという視点で結論を出しなおします

# 手を止めないことは適切な誰かにボールを渡すこと
手を止めたくないのに止まってしまう

それは作業のフローの中で待ちが発生するということです

基本的にそのボトルネックをなくすのが良いということです

でもボトルネックをなくすことを自分に当てはめ続けるべきではないです

例えば学校の課題は自分でやんなきゃいけなかったですが、どうしてか友達と協力してた人の方が早く終わってましたよね

これは側から見るとその人は手をあまり動かしてないような気がします

見え方として、その状況よりは一人がずっと何かの作業に取り組んでる方が手を動かします

その事実がある上で忘れちゃいけないのは

誰かを巻き込んで助けを乞うこともまた手を動かしていることなのです

# 結論を急ぐ人
手を止めないという言葉から、仕事ができるようになるコツを考えなきゃいけない

そう考えてしまうことは必然だと思います

手を動かし続けることは、形を作り上げること

そうも考えてしまいがちです

でも基本的には仕事というものは、そんな簡単ではないわけです

答えを調べて出てくるのは、目の前のタスクの解決法

組み合わせた先の終着点は残念ながら手を動かしながら生み出された最終結果を待つしかありません

ならばこそ、これは創作とあまり変わらないわけです

誰かに評価される指標は他人にあります

そしてその他人は敵でも世間でもなく隣り合う同僚や、見守ってくれている上司です

期待されたものに応えたい創作をするのか

魅せつけていく創作をするのか

許される創作か許されない創作か

絶対的な答えがなくても、そこには様々な人がどう通ってきたかという指標があります

# 僕として、手を止めない仕事をする答え
手を動かす指標が、人にあるということは

仕事の進み具合も自分一人じゃ決まらないという話です

もちろん中核を担う者は動かないと終わらせられないでしょう

そのアプローチの中で、暴れられる人は居るかという話も必要です

締切という絶対性は決してゲームのようなものではなく、人が人と口約束や書面で決めています

そこに理論があるわけではなく、やりたいか漠然とした思いの中で作られていきます

ならばこそ人に対して暴れられる人は、まるで論理的に見えた課題も時に人情的に解決されます

時に仕事と無関係でも、仕事の根幹を揺るがすような雑談や喚きも大事なわけです

# みんなが求める結論の話
最近偉い人がみんな口々に運だったと言い始めてるのを見ます

成功者の本質が実力主義から

人情的に誰かに支えてもらっている、という事実を重視するよう変わってきてます

成功者はその場を成功させる人を見つけれる人です

自らも見て他人も見て、その状況を解決する人を見つければ、常に解決できます

手を止めないとはその流れの中で波を持って、人に見られてない場所で休める人のことです

誰かに心配をかけず、誰かを困らせず、仕事で支障が出ない休み方をする人


これは難しいですね

でも休んで良いですか？と聞いて休むことも

また一つの手を止めずに仕事をしたことの一つです

これは理想の結論です

人々が求めるような、完璧な世界です

でも僕はこの結論に辿り着いた上で

優しい人を見つけたら甘えてしまって、ズルい休み方や生き方で仕事をしようと思っています

それが僕なりの手を止めないという考え方です

そうして甘えられる人を探すために、誰かに優しくありたいと思うのです
テクニカルライティング試験 合格体験記🚢：勉強法と試験のリアルをシェアします

## はじめに 🚶

2022年に、テクニカルコミュニケーション技術検定試験3級 テクニカルライティング試験[TW]に合格しました！
この記事では、私が試験に向けて取り組んだ勉強法や感じたことを紹介します。

テクニカルライティング試験とは、技術文書の品質向上を目的に、明確かつ正確な文章作成能力を評価する資格試験です。
試験の詳細は、試験実施協会の公式ホームページをご参照ください。

👉 [https://jtca.org/learn-tc/certificate-exam/writing_b/](https://jtca.org/learn-tc/certificate-exam/writing_b/)

---

## 試験対策と準備 🎒

### 『日本語スタイルガイド』を活用した勉強

試験対策として最も効果的だったのは、[『日本語スタイルガイド』](https://www.amazon.co.jp/%E6%97%A5%E6%9C%AC%E8%AA%9E%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%AB%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC3%E7%89%88-%E4%B8%80%E8%88%AC%E8%B2%A1%E5%9B%A3%E6%B3%95%E4%BA%BA%E3%83%86%E3%82%AF%E3%83%8B%E3%82%AB%E3%83%AB%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%BF%E3%83%BC%E5%8D%94%E4%BC%9A/dp/4902820102)を熟読することでした。
重要な箇所をノートに書き写し、何度も繰り返して読みました。

この書籍は、試験の実施団体であるTC協会が執筆しており、付録には試験の出題範囲が明示されています。
これを読めば、どこを重点的に学習すればよいか明確になります。

また、付属の練習問題も実践的で役立ちました。

### 過去問題・練習問題の活用

試験は選択形式と記述形式の両方があります。
特に記述式では『日本語スタイルガイド』に掲載されている『総合的例題（多岐選択問題）』を記述形式に置き換えて練習するのがポイントです。

多岐選択問題も、知識のおさらいとして取り組むのに最適でした。

### 勉強スケジュールと工夫

勉強期間は約1ヶ月。仕事終わりや休日を利用して勉強しました。
本を眺めるだけでは記憶に残りにくかったため、ノートにまとめて手で書きながら覚えるようにしました。

---

## 試験当日の様子 💬

### 筆記形式への戸惑い

試験は筆記形式です。
普段はPCで文章を書くことが多いため、紙に手書きすることに慣れておらず、最初は戸惑いました。
とくに記述問題は時間を要するため、筆記の練習をしておくのがおすすめです。

### 時間配分と時計の準備

時間には意外と余裕がないので、早めに問題を解く練習をしておきましょう。
会場には時計がなかった記憶があるため、腕時計を持参すると安心です（持ち込み可能でした）。

---

## 試験を通じて得られた学び ✍️

試験を通じて、文書の正確さや明確さに対する意識がより強くなりました。

特に、細かな表現や言い回し、読者視点に立った構成を意識することの大切さを再認識しました。

また、試験はゴールではなく、あくまでスキルアップの通過点です。

資格を持っていなくても、優れた文章を書くライターさんはたくさんいます。
試験合格を1つのモチベーションとして、今後もより良いドキュメント作成に取り組んでいこうと思います！💪

---

## おわりに 🎁

今回の試験を通して、テクニカルライティングの重要性を改めて実感しました。

この記事が、これから受験を考えている方の参考になればうれしいです。

気になった方はぜひチャレンジしてみてください！

一緒に、より良いドキュメントを作っていきましょう。📘✨
Markdownだけで、伝わる文章を書く

## 1. はじめに

Markdownって、簡単に書けるし、どこでも使えて便利。  
見出し、箇条書き、リンクなど、基本だけでもそれっぽい文章になる。

でも、  「読みづらいな」と思う文章、ありませんか？

・改行がなくて詰まってる  
・見出しがバラバラ  
・言い回しに統一感がない

どれも、Markdownを使ってるとよくある失敗です。

この記事では、  
**Markdownだけで、伝わる文章を書くコツ**を紹介します。

見た目は地味でも、ちゃんと伝わる。  
そんなドキュメントを書くためのヒントになればうれしいです。

---

## 2. Markdownで伝わらない文章の特徴

### 構成がバラバラ
見出しの順番がぐちゃぐちゃ。  
読む人は「どこまでがセットなの？」と迷ってしまいます。

#### ❌ ダメな構成

```markdown
## 概要
このツールは便利です。さまざまな機能があります。導入方法も簡単です。

## 注意点
- Macでは一部機能が動作しない場合があります。
- ネットワーク接続が必要です。

## 使い方
- ファイルをダウンロードします。
- 起動します。

## 特徴
- 軽量です。
- シンプルなUIです。
```

#### ✅ 良い構成

```markdown
## 概要
このツールは、軽量でシンプルなUIを備えた便利なアプリケーションです。

## 特徴
- 起動が早く、動作も軽快  
- 初心者にも使いやすいUI設計  
- 導入が簡単

## 使い方
1. ファイルをダウンロードします。
2. アプリを起動します。

## 注意点
- Macでは一部機能が制限されることがあります。
- 利用にはネットワーク接続が必要です。
```

### 改行がない・詰まりすぎている
1文が長くて、段落も詰めすぎ。  
画面いっぱいに文字が詰まっていると、読む気がなくなります。

### 文体がバラバラ
「です・ます」と「だ・である」が混ざっていたり、急に語り口が変わったり。  
統一感がないと、読みにくさにつながります。

### 箇条書きが多すぎる
なんでもかんでも箇条書きにすると、結局なにが重要かわからなくなります。

---

## 3. Markdownで伝わる文章にするには

### 見出しで構造を見せる
見出しは「構成」の柱。  
レベル（#）を揃えて、読み手の頭を整理してあげましょう。

```markdown
# アプリの使い方

## 1. アプリの概要
このアプリは、タスク管理を効率化するためのシンプルなツールです。

## 2. インストール手順

### 2-1. 前提条件
- Node.jsがインストールされていること
- インターネット接続があること

### 2-2. セットアップ手順
1. リポジトリをクローン
2. `npm install` を実行
3. `npm run start` で起動

## 3. 主な機能
- タスクの追加・編集・削除
- タスクのドラッグ＆ドロップで並び替え
- ステータスごとのカラム表示

## 4. 注意点
- データはローカルストレージに保存されます
- スマートフォンでは一部UIが崩れる可能性があります
```

このように、#〜###の見出しを階層的に使うことで、文書の全体構造が一目でわかるようになります。

### 一文一情報。改行はこまめに
1文に詰め込まない。  
伝えたいことは小分けにして、適度に改行。

読みやすさは、余白から生まれます。

### 文体を決める。揃える
最初に「です・ます」でいくか、「である調」にするか決めておく。  
揃っているだけで、読みやすさは変わります。

### コードや表には一言添える
コードや表は、**補足説明がないと“謎のブロック”になりがち**。

「何をするコードか」「何を比較してる表か」  
簡単でもいいので一言つけましょう。

---

## 4. おわりに

Markdownだけでも、伝わる文章は書けます。

大事なのは、整える力。  
構成、改行、文体、言葉の選び方。

読み手のために、一つひとつ丁寧に。

書き方に迷ったら、「読み返して、読みにくいところを直す」だけでも効果があります。

技術より前に、気配りから。  
それが伝わる文章を書く第一歩です。

---

## 参考リンク

- Readable Markdown ～読みやすい Markdown の書き方～
→ https://qiita.com/sta/items/768bd88e9d7badc98260

- 【和訳】エンジニアのためのテクニカルライティング by Google
→ https://zenn.dev/kibe/books/3355e3a0775e58/viewer/f5c52d 

- サイボウズ テクニカルライティング 開発研修2023（YouTube講演）
→ https://www.youtube.com/watch?v=vHEzSQ3YFXk)  

- 講演スライド資料（Speaker Deck）
→ https://speakerdeck.com/naohiro_nakata/technicalwriting)  
  講演内容をスライドで復習したい人向け。
ルーティングとURLはあってるのに、画面が表示されない/ 単語一括編集

# 1️⃣ サーバーのプロセス番号調べる

```ruby:
lsof -i :8080
```

# 1️⃣ プロセス番号わかったら、kill

```ruby:
kill port番号
```
# 単語一括編集コマンド

```ruby:
[Shift］＋［Command］＋［L］
```
PRML 演習10.3

## はじめに

私の所属する生物測定学研究室では、PRML（パターン認識と機械学習）の輪読を行なっています。
今回、私が演習10.3の解説を担当することになったので、（他の方の記事を大いに参考にしながら）解答をまとめようと思います。


## 演習10.3

カルバック-ライブラーダイバージェンス$KL(p||q)$は以下の形式で書ける。

```math
\leqalignno{
 &KL(p\|q) = -\int p(\mathbf{Z}) \left[\sum_{i=1}^M \ln q_i(Z_i)\right] \,d\mathbf{Z} + C \tag{10.16}
}
```

ラグランジュ乗数法を用いて、$KL(p||q)$を因子の一つ$q_i(Z_i)$について他の因子を固定して最小化すると、下式(10.17)が得られることを示せ。

```math
\leqalignno{
&q_j^*(\mathbf{Z}_j) = \int p(\mathbf{Z}) \prod_{i \ne j} d\mathbf{Z}_i = p(\mathbf{Z}_j) \tag{10.17}
}
```

## 解答
```math
\leqalignno{
q(\mathbf{Z}) = \prod_{i=1}^{M} q_i(\mathbf{Z}_i) \tag{10.5}
}
```
この近似から、$q(Z)$は排反なグループに分割されていると言える。q(Z)は分布なので、その総和は1であり、

```math
\leqalignno{
 &\int q_j\,dZ_j - 1 = 0
}
```

が成り立つとわかる。
この条件を使い、KLの極値を求めるためのラグランジュ関数は
```math
\leqalignno{
L = \mathrm{KL}(p \,\|\, q) + \lambda \left( \int q_j \, d\mathbf{Z}_j - 1 \right)
}
```
となる。これを使って式(10.16)を最小化するが、(10.16)に積分が含まれているため、変分法を用いる。

<details><summary>変分法について</summary>

筆者が変分法を何も知らなかったので少し調べた内容をまとめます。

微分法では変数$x$を微小変化させると変数$y$にどれくらいの感度があるのかを見ますが、
変分法では関数$y$を微小変化させると関数$I$にどれくらいの感度があるのかを見ます。

この関数$I$は汎関数と呼ばれ、関数$y(x)$を積分することで得られます。

```math
\leqalignno{
I(y) \equiv \int_a^b f(x, y, z)\, dx \equiv \int_a^b f(x, y(x), y'(x))\, dx
}
```
$I(x)$を最小にするような関数$y(x)$を考える、このような問題を変分問題と呼ぶそうです。


</details>

変分法を用いるためには、
```math
\leqalignno{
L(q_j) = \int G\left(q_j(z_j), q'_j(z_j), z_j\right) \, dz_j
}
```
の形で汎関数を設定しなくてはいけない。そこで、式(10.16)を変形し、ラグランジュ関数を上の汎関数の形にする。

$\int ・dz_i$の形にするために$p(Z)$を排反なグループの積に分割して、$i=j$の成分だけを残す。（他の成分は定数項に入れる。）

```math
\leqalignno{
\begin{align*}
\mathrm{KL}(P \| Q) 
&= - \int p(\mathbf{z}) \left[ \sum_{i=1}^{I} \ln q_i(z_i) \right] d\mathbf{z} + \text{const} \\
&= - \int p(\mathbf{z}) \ln q_j(z_j) \, d\mathbf{z} + \text{const} \\
&= - \int p(z_j) \ln q_j(z_j) \, dz_j + \text{const}
\end{align*}

}
```
なので、ラグランジュ関数は下記のように書ける。デルタ関数（積分したら１になる）を使って定数項も積分の中に入れることで、ラグランジュ関数を$q_j(z_j)$の汎関数の形にすることができる。
```math
\leqalignno{
\begin{align*}
L &= - \int p(z_j) \ln q_j(z_j) \, dz_j 
    + \lambda \left( \int q_j(z_j) \, dz_j - 1 \right) + \text{const} \\
  &= \int \left[ -p(z_j) \ln q_j(z_j) + \lambda q_j(z_j) - (\lambda - \text{const}) \delta(z_j) \right] dz_j
\end{align*}
}
```

変分法における最適条件は下式で表される。
```math
\leqalignno{
\frac{\delta L}{\delta q_j(z_j)} = 0
}
```
実際に微分を行い、

```math
\leqalignno{
\frac{\delta}{\delta q_j(z_j)} \left( -p(z_j) \ln q_j(z_j) + \lambda q_j(z_j) \right)
= -\frac{p(z_j)}{q_j(z_j)} + \lambda = 0
}
```
よって、
```math
\leqalignno{
q_j(z_j) = \frac{1}{\lambda} p(z_j)
}
```
ここで、以下の二つの正規化制約から、


```math
\leqalignno{
\int p(z_j) \, dz_j = 1

}
```
```math
\leqalignno{
\int q(z_j) \, dz_j = 1

}
```
以下の式が導かれ、$λ=1$とわかる。
```math
\leqalignno{
\int q_j(z_j) \, dz_j = \int \frac{1}{\lambda} p(z_j) \, dz_j
= \frac{1}{\lambda} \int p(z_j) \, dz_j = \frac{1}{\lambda}

}
```

よって、

```math
\leqalignno{
q_j(z_j) = \frac{1}{\lambda} p(z_j) = p(z_j)

}
```

## さいごに
下記の記事を参考にさせていただきました。
ありがとうございました。
https://tips-memo.com/prml-10-3
https://sioramen.sub.jp/prml_wiki/doku.php/prml%E6%BC%94%E7%BF%9210.3
Supabase MCPをCopilotで接続して試してみる

## はじめに
先日、社内の勉強会でお題としてMCPとか〜という文脈があり、話のきっかけになればと思い書いてみました。  
Supabaseのアップデート情報にて [Supabase MCP Server](https://supabase.com/blog/mcp-server)の記事が公開されていたため、Supabase愛用者の私として触っておかねばと思い、設定方法などをまとめておきます。

https://supabase.com/blog/mcp-server

## 設定方法

普段はVS CodeでCopilotを利用しているので、[VS Code Copilotでのセットアップ方法](https://supabase.com/docs/guides/getting-started/mcp#visual-studio-code-copilot)で試してみます。

適当にディレクトリを作成して、`.vscode`ディレクトリ内へ`mcp.json`を設定します。
```json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "supabase-access-token",
      "description": "Supabase personal access token",
      "password": true
    }
  ],
  "servers": {
    "supabase": {
      "command": "npx",
      "args": ["-y", "@supabase/mcp-server-supabase@latest"],
      "env": {
        "SUPABASE_ACCESS_TOKEN": "${input:supabase-access-token}"
      }
    }
  }
}
```

**ディレクトリ構成**
```
.vscode
 └─ mcp.json
```

設定が済んだら「起動」をクリックします。
![20250413091919.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359978/c64a36d3-ebb8-40ce-a7df-0e8c768597a5.png)

アクセストークンの入力が求められるので入力します。[こちらのページ](https://supabase.com/dashboard/account/tokens)より確認・生成が可能です。
![20250415124742.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359978/7902ae10-4f9f-4a06-9adc-6994e64e4e9e.png)

## 試してみる
自作した家計簿アプリのデータベースにデータをinsertしてもらいましょう。
Copilotをエージェントに切り替えて、下記の依頼します。

```
supabaseにて、本日の日付でカテゴリー：食費、サブカテゴリー：朝ごはんを支出321円として追加して。
detailにはセブンイレブンを記入。
```

![20250413093930.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359978/0c16ce06-4d44-4bcd-b063-c0d4fbcb4568.png)

UI・DBどちらでも、データが追加されていることが確認できました。

![20250413094153.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359978/c32333cd-99c7-497e-b57d-e70070950661.png)

本日の支出合計を出力してみてもらいます。
```
supabaseにて、本日の日付の支出合計値を教えて。
```

![20250413095645.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/359978/8c19959d-f422-46c3-9ad0-94a527e94956.png)

4/13の合計値が正しく出力されていることが確認できました。

## まとめ
今回はSupabase MCPをCopilot経由で利用し簡単な操作を行ってみました。
次回は複数のMCPサーバーを利用する際の設定方法と実践的な利用方法についてまとめます。

## 最後に
### GoQSystemでは一緒に働いてくれる仲間を募集中です！

ご興味がある方は以下リンクよりご確認ください。

https://goqsystem.recruit.site/?qiita=92ff2069194ae1a5acbd
React 19にアップグレード：実際のプロジェクトでやったステップ

こんにちは！「GLOBIS 学び放題」のフロントエンドエンジニアをしているAgataです。
React 19が2024年に登場しましたので、2024年から2025年の年末年始あたりに開発作業が落ち着くのを待って、グロービス学び放題プロジェクトの大規模なアップグレードを計画いたしました。本記事では、React 18から19へのアップグレード手順を共有させていただきます。手順は以下の通りです。

### 1. [Reactのガイド](https://react.dev/blog/2024/04/25/react-19-upgrade-guide)に従って、アップグレードを実施してみる

下記のコメントを実行し、エラーの発生箇所と、全体的な機能への悪影響の有無を確認する。
```
yarn add --exact react@^19.0.0 react-dom@^19.0.0
yarn add --exact @types/react@^19.0.0 @types/react-dom@^19.0.0
npx types-react-codemod@latest preset-19 ./**path-to-app**
```
（ここはまだプロジェクトのコードベースには反映しない。）

### 2. エラーの原因を把握して、アップグレードの事前準備のタスクを作る

事前準備に必要なタスク：

1. styled-componentsライブラリーアップデートする
1. react-i18nextライブラリーアップデートする
1. @radix-ui/react-dialogと@radix-ui/react-toastライブラリーアップデートする

### styled-componentsライブラリーアップデート(v5 → v6)

styled-componentsライブラリーアップデート(v5 → v6)のcssあたりの作業：
- 数コンポーネントを新しい型の書き換え
- 役200ファイルで正しくないcssセレクタを修正：主に`& &`と`&&`　→ `&`に修正
- こまめのリグレッションテスト確認や手動の確認：hoverエフェクトなどの問題解消
- リリース後のユーザー側エラーのモニタリング

アップグレード後の`TypeError: i.replaceAll is not a function`エラーについて
- 原因：`styled-components v6`では`String.prototype.replaceAll()`関数が使われるようになりましたが、その関数をサポートされてない古いブラウザーを使用するとエラーになります（[`String.prototype.replaceAll()`関数をサポートされているブラウザーバージョンの一覧](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/replaceAll#%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%BC%E3%81%AE%E4%BA%92%E6%8F%9B%E6%80%A7)）


### アップグレードの本作業

1. 最初のステップのコマンドをもう一度実行する
    ```
    yarn add --exact react@^19.0.0 react-dom@^19.0.0
    yarn add --exact @types/react@^19.0.0 @types/react-dom@^19.0.0
    npx types-react-codemod@latest preset-19 ./**path-to-app**
    ```


2. `@types/reactと@types/react-dom` を19.0.0にアップデートする
3. QA確認
4. 本番へリリース


### アップグレード後の作業

* forwardRefあたりの作業：forwardRefは将来のReactバージョンで削除される予ですの、それにあたった作業　→ [参考](https://react.dev/blog/2024/12/05/react-19#ref-as-a-prop)
* Context.Provider → Contextに変更 → [参考](https://react.dev/blog/2024/12/05/react-19#context-as-a-provider)
* その他ライブラリーもアップデート


アップグレードにおける最小限の作業は以上です。事前の準備のおかげで、スムーズに実行でき、次回のReact 20へのアップグレードも楽しみです。
InputSystemの備忘録[Unity]

# 目次
・AssetとMapとActionの違い
・離したタイミングを検知
・callbackの受け取り方

## AssetとMapとActionの違い
InputActionsAssetは一つのゲームに一つです。
MapはInputActionsの中にたくさんあります。これはシーン/用途ごとに作ります。
ActionはMapの中の細かい行動を規定します。Mapから推論可能な名前をつけてあげると使いやすいです。

## 離したタイミングを検知
新しいActionを作ります。
バイナリ系入力検知にはButtonを使います。
InteractionsではPressedを選択します。すると項目が開くので、そこでReleasedOnlyを選びましょう。
どっちもはオススメしません。callbackの受け取り先で入力内容がどちらか正確に判別することは不可能です。

## callbackの受け取り方
SerializeFieldでInputActionAssetを受け取ります。
OnEnable関数で該当MapをFindActionMap(string)で探し当てます。
最後にそれをEnableして、それぞれのActionのperformedにcallbackを設定してあげたら完成です。

```cs:サンプルコード
using UnityEngine;
using UnityEngine.InputSystem;

namespace Core.Input
{
    public class RhythmReader : MonoBehaviour
    {
        [SerializeField]
        private InputActionAsset inputActionAsset;
        private InputActionMap _playerActions;

        private void OnEnable()
        {
            _playerActions = inputActionAsset.FindActionMap("Player");
           _playerActions.Enable();
           _playerActions["RhythmUp"].performed += RhythmUp;
           _playerActions["RhythmDown"].performed += RhythmDown;
        }

        private void OnDisable()
        {
            _playerActions.Disable();
        }
        
        private void RhythmUp(InputAction.CallbackContext context)
        {
            Debug.Log("Rhythm up");
        }
        
        private void RhythmDown(InputAction.CallbackContext context)
        {
            Debug.Log("Rhythm down");
        }
    }
}
```
ポモドーロタイマーを作って実践してみた

# 概要  
私自身思っているのが、長時間の集中力がなさすぎて困っていました。  
コーディングする時間が長くなったとき、環境構築でインストール時間がかかるとき、とにかく集中力がプツンと切れてしまうということが多くありました。  
これではダメだと思い、タスク管理術や時間の管理の仕方を調べていました。  

結果、**ポモドーロテクニック**という手法にたどり着きました。  
ポモドーロテクニックとは、  
> 時間管理の方法の一つです。  
> 具体的には、25分間の集中作業と5分間の休憩を繰り返すことで、効率的に作業を進めることを目指します。  
>これを4回繰り返した後に、長めの休憩（15～30分）を取ります。これにより、集中力を維持しながら疲れを防ぐことができます。

と生成AIさん（Copilot）は言っています。  
つまりは小さいサイクルで集中タイムと休憩タイムを繰り返す方法で、これなら長期戦が苦手な私でもとっつきやすいと思いました。  

# ポモドーロタイマーの仕様決定  
世の中にはすでにポモドーロテクニックを実践している人が多く、様々なアプリが提供されています。  
ですが、私は一応プログラム製作に携わっているエンジニア。難易度も高くないだろうということで自作することにしました。  

普段Windows OSでお仕事をするので、exe化してデスクトップ上に表示できればいいかなということで、技術としては過去製作の経験があるWPFを選択。  
仕様としては以下を満たせばよいかと思っています。  
- 25分間計測し、そのあと5分間計測を行い、これを繰り返す  
- 4回ごとの休憩は15分カウントする
- 表示は分単位で表示
- 作業時間は赤色で表示、休憩時間は水色で表示
- 常に最前面で表示し、ドラッグアンドドロップで移動ができる
- クリックすると中断できる。中断中は背景を緑色にする  

処理も簡潔なので、実装とテストは2H程度で完了しました。  

# 実装  
コードは以下で公開しています。  
https://github.com/zoeque/pomodoro-timer  

動く状態のexeも以下で公開しています。  
https://github.com/zoeque/pomodoro-timer/releases/tag/v1.0.0

通常動作中であれば、以下のように赤い背景で分単位のカウントを行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774197/ea02256a-2d97-4eb8-ba3a-3ccf9ed4a590.png)

休憩時間が開始すると、水色になります。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774197/8212cc90-e5f9-417f-a828-2519b2ff817e.png)
画面の端っこでも、ピコンと色が変わるので、注視しなくても休憩時間が分かるようにしています。

ポモドーロタイマーを一時停止したい場合は、クリックすると緑色になります。   
緑色の間はタイマーが停止し、カウントダウンしないようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/774197/d9ea8289-d221-4977-8f80-50892ff26cc0.png)


# 効果検証  
実際に使った感じでは、集中力が深く短い短期決戦型の私でも継続して業務が行えたと思います。  
本業では、見積もり40Hのプログラム製作も、短期集中の力で、32H程度で実装が完了しています。数字で出すとやはり効果があったかなと思っています。  

また休憩とはいっても、最新技術のキャッチアップを行うために色々な記事を読み漁ったり、ポモドーロタイマーのブラッシュアップを行ったりと、業務と完全に無関係ではなく、意味のある時間にしていました。  
~~間食の時間も増えたのはここだけの話。~~  

# まとめ
- 短期集中型（長時間の集中力がない）人にポモドーロテクニックは効果的
  - プログラム製作の工数削減にも効果があった 
- ツール作成は楽しいので、自作できるなら積極的にやってみるべき
- 自作したツールに対して、Qiitaへのアウトプットするのも、いい復習になる
- 長期休憩時間を外部定義できるような仕組みにすればよかったと後悔

# 追記
外部定義化自体が簡単な実装で行えるので、長期休憩時間を外部定義できるようにしました。  
https://github.com/zoeque/pomodoro-timer/releases/tag/v1.1.0
猿でもわかるAIビジネス活用シリーズ 🐵📊|[第5回] AI時代の働き方：人間の仕事はどう変わるのか？



## 1. 🍌時代の波に呑まれる前に：働き方の大転換が来ている

ChatGPTやClaude、Geminiの台頭で、「AIが人間の仕事を奪う」という言説が飛び交っています。が、実際に現場のエンジニアはどう影響を受けているのか？

本記事では「AI時代にエンジニアの仕事がどう変わるのか？」を主題に、現場の観点から以下を解説します：

- どんな業務がAIに置き換わるのか？
- どんなスキルがこれから求められるのか？
- 実際に役立つAI活用Tipsと現場の導入方法

---

## 2. 🤖 テクノロジーの進化と共存：AIが得意な仕事、人間が得意な仕事

### 📌 AIが得意なこと
- コード補完（GitHub Copilot、CodeWhisperer）
- テストケース生成、単体テストの自動化
- ドキュメント要約、議事録作成
- ナレッジ検索（RAG構成）

### 🙋 人間が得意なこと
- 複雑な業務設計とシステム全体のアーキテクチャ設計
- チーム間調整、ファシリテーション
- “なぜ？”を掘り下げるビジネス課題設定

AIは"手を動かす"仕事が得意。一方で、"考える力"と"共感力"は人間の領域です。

---

## 3. 🛠️ 実例：コードレビューの未来を体験する（CodeBERT + LangChain）

AIを活用したコードレビュー支援ツールをPythonで構築してみます。

### 🧩 使用技術
- Hugging Face Transformers（CodeBERT）
- LangChain（プロンプト制御）
- VSCode拡張連携（任意）

### 💻 コード例
```python
from transformers import RobertaTokenizer, RobertaModel
import torch

model = RobertaModel.from_pretrained("microsoft/codebert-base")
tokenizer = RobertaTokenizer.from_pretrained("microsoft/codebert-base")

code_snippet = "def add(x, y): return x + y"
inputs = tokenizer(code_snippet, return_tensors="pt")
outputs = model(**inputs)
print("✅ Embedding shape:", outputs.last_hidden_state.shape)
```

### 💡 LangChainでのプロンプト制御例
```python
from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

prompt = PromptTemplate.from_template("""
コードレビューしてください：
{code}
""")

llm = OpenAI(temperature=0.2)
response = llm(prompt.format(code=code_snippet))
print(response)
```

---

## 4. 🧠 現場Tips：AIに任せていいこと／ダメなこと

### ✅ 任せてOK
- 形式的なコードチェック（Lint、Style Guide）
- 定型的なテストケース生成
- ドキュメント構成や要約

### ❌ 任せちゃダメ
- セキュリティ要件の検証（責任重すぎ）
- 要件のあいまいな仕様実装（曖昧すぎ）
- 組織ポリシー違反の恐れがあるケース

---

## 5. 🌀 応用と拡張：AIと共に働くチーム設計

### 💼 チームに生成AIを導入するには？
- "AIアシスタント"という役割をチームに明確に設ける
- 利用ガイドラインとナレッジ共有チャネル（Notion、Slack）を整備
- 人間レビュー × AI提案のハイブリッド運用

### 🚀 応用例
- PRレビュー支援Bot（Slack通知）
- Jiraチケット要約＆リマインダーBot
- 面談記録の要点抽出（Whisper + GPT）

---

## 6. 🧾 まとめ：AIは仕事を奪うのではなく“変える”

### 👍 メリット
- 単純作業から解放され、創造的な業務へシフトできる
- 知識格差が是正され、ジュニアでも貢献しやすくなる

### 👎 注意点
- 過信は禁物。AIは完璧ではない
- 依存しすぎると、スキルの退化リスクもある

### 🔮 今後の展望
AIが“チームの一員”として働く未来はすぐそこまで来ています。重要なのは、「AIを使う側の人間」がどう進化するか。

2025年、あなたの隣のエンジニアはAIかもしれない。でも、**あなたがAIと“共創できる人材”**になれば、怖いものはありません。
AI開発にオープンデータセットを使う際のリスクと回避策

オープンデータセットはAI開発において非常に有用なリソースですが、利用には以下のようなリスクがあります。

- 利用条件の見落とし
- アノテーション品質のバラつき
- データの偏り
- プライバシー・セキュリティの懸念

こうした課題のうち、「**利用条件の精査**」と「**品質のばらつきへの対応**」について、FastLabelの機械学習エンジニアがどのような工夫を行ったのかを紹介します。


## 実施方法
利用条件に関する情報の精査とコード品質のばらつきの問題に対応するため、大きく3つのステップで絞り込みを行うことにしました。

### 1.スクリプトによるフィルタリング
メタデータとソースコードに直接埋め込まれている利用条件（ライセンス）条項やキーワードを対象としてスクリプトを作成し、機械的にフィルタリングを行う。

### 2.LLMによる仕分け
LLM（大規模言語モデル）を用いて、コードの利用条件情報を分類する。抽出したデータセットを用いてプロンプトチューニングを行い、LLMによる分類精度を高める。仕分け結果は随時ロットで確認し、サンプリングして所与の精度が維持されていることをチェックする。

### 3.コード品質評価
ごく小規模なサブセットを対象としてパフォーマンス面やメモリの扱いに問題がないか人手でラベルをつけ、LLMを用いて検出を試みる。

## その結果
結果は以下の通りでした。

### 利用条件に潜在的な問題があるコードの検出
かなりの割合のサンプルが、権利関係または品質の面で問題があると判定されました。結局**利用に耐えると判定されたのは前提の1/4以下**でした。

### コード品質
人目で検出された問題はほぼ検出され、逆に人目で見逃されていた問題が見つかりました。細かい精査は必要なものの有効なスクリーニングとなりえることがわかりました。

### 最終判断
上記の処理結果をキーとして付与し、利用者側で最終的な判断ができるようにしました。

## データの絞り込みで難しかった点と工夫した点

データセットは小規模とは言えないほど大きく、精度追及に時間を使っていると、**バッチ処理のための残り時間が減っていく**のが厳しいところでした。そのため、今回の取り組みでは下記の点を工夫しました。

### データ量と処理時間
クラウドのLLMサービスで全件処理するにはあまりに大規模で応答時間も厳しいものでした。そこでローカルLLMを載せた**複数の仮想マシンを並列で動作**させて、**実際の処理はクラウド上のキューサービスを用いて分散処理**しました。

### 分類精度
分類結果を混同行列を書いて評価を行っていたのですが、なかなか精度が出せずに苦労しました。プロンプト（LLMに与える指示）を、分類タスクの概要、より詳細な基準、判別したいデータ、出力形式の順番でマークダウン形式で与えて分類結果を得るのですが、基準や文言が曖昧だということを聞かなくなります。特に**判別したいデータ**を何も考えずに全て与えると悪影響が極めて大きくなるため、**データの中身に踏み込み絞り込んで与えました**。さらにローカルで動作させるため**量子化の影響を抑える実行環境整備**も有効でした。

### 柔軟な処理パイプラインの構築
サンプルデータをハイライト付きで表示したり分類結果を併せて閲覧できる業務システムを短期間で構築することで、状況を柔軟に確認でき効率的に作業を進めることができました。


この取り組みの詳細は下記の記事で紹介しています。
https://fastlabel.ai/blog/risk-of-opendatasets
上司が机を叩いた！？限界プロジェクトにおけるコミュニケーション改善方法

## はじめに

こんにちは！普段はプロジェクトリーダー（PL）として、要件定義から製造・テスト・顧客対応まで、いろんなことをやってるエンジニアです。

今回は、ちょっと重ためな話も混じりますが、「報告とか相談ってどうすればうまくいくの？」と悩んでた自分が、**試行錯誤しながら“伝え方”を工夫して改善してきた話**を共有します！

この記事、ただの体験談じゃなくて、「今まさに現場でしんどい…」って方にも、少しでも役立つヒントになったら嬉しいです！

---

### 🧩 この記事、こんな人にピッタリ！

- 「報連相が苦手…」と感じてる新人エンジニア
- 「うちのチーム、最近ギスギスしてる？」と感じてる中堅メンバー
- 報告しやすい雰囲気を作りたいPL・PM

---

## 詰まっていた頃の自分

昔の自分、ほんとに報告がヘタでした…。

- 「とりあえず言い訳しなきゃ…」と焦る
- 問題点だけダラダラ話して、何がどう困ってるのか伝わってない
- そもそも、自分がどこまで進んでるのか把握できてない（これが一番やばい）

当時は「相談＝頼る＝迷惑かける」みたいに思ってたんですが、違うんですよね。  
報告って、「自分の状態をチームに共有して、一緒に動くための材料を出すこと」なんです！

---

## 気づきのきっかけ：TRPGで学んだ“伝わるってこういうこと”

実は私、趣味でTRPG（テーブルトークRPG）のゲームマスターをやってます。

プレイヤーにシナリオを伝えてるつもりが、うまく伝わってなくて進行が止まる…そんな経験、何度もしました。  
でもそれって、「伝えたつもり」と「伝わった」は別物ってことなんですよね。

言い方や順番、伝える粒度をちょっと変えるだけで、めちゃくちゃスムーズになる。

この「伝え方の工夫」が、仕事の進捗報告や相談にもそのまま使えると気づいてから、世界が変わりました。

---

## 報告の順序を変えるだけで、伝わり方が激変した！

伝え方、順番だけでもめっちゃ変わります。実際に私がやってる流れはこれ👇

### ✅ 1. 今、遅れてる？遅れてない？
```text
例：タスクAは予定より1日遅れています。
```

### ✅ 2. スケジュールに影響ある？
```text
例：この遅れはCタスクとリソースが競合する可能性があります。
```

### ✅ 3. 原因と改善案、または相談
```text
例：API仕様変更で遅延中。明日までに再見積して範囲共有します。
```

この順で話すだけで、相手が「で、どうすれば？」ってならずに済むし、めちゃくちゃスムーズになります！

---

## 上司が机を叩いた…限界プロジェクトでの気づき

最近参画してるプロジェクト、正直めちゃくちゃ切迫してます。  
ある会議では、上司が感情を抑えきれず**机をバーンッ！** って叩いちゃったことも…。  
そのあと謝罪されましたが、「本当にみんなギリギリなんだな」って強く感じました。

こんな現場だと、小さなコミュニケーションのミスでも、後々大きなズレになります。

だからこそ、**日々のちょっとしたやり取りの質を上げる**だけでも、チーム全体の雰囲気って変えられると思ってます。

---

## 管理者として私がやってる工夫

### ✅ リアクションで「見たよ」を可視化
SlackやTeamsで👀とか✅リアクションをつけるだけでも、「見てくれてる感」が出る！

### ✅ 1行ステータス共有をルーチンに
毎朝・夕に「完了 / 作業中 / 詰まり」をSlackスレッドに書くだけ。地味だけど、めっちゃ効く。

### ✅ 課題の棚卸しミーティング
週1回10分だけ、「今困ってることある？」って話す場を作ってます。  
言語化されることで、チーム内のもやっとが消えるんですよね。

---

## 報告が変わると、会議も変わる！

この仕組みを回すようになってから、**定例の進捗確認会議が平均30分短縮**できました！

前は「話が脱線→時間オーバー→イライラ」だったのが、  
今は「要点だけで済む→議論に集中→チーム全体スッキリ」という感じです！

---

## TIPS：リマインダー機能、マジで神

報告を忘れがちな人（＝昔の自分）にこそ、**Slack・Teams・カレンダーのリマインダー**機能、めちゃくちゃおすすめ！

- Slackメッセージに「あとでリマインド」設定
- 朝・夕に通知が飛ぶようにする
- カレンダーに「1行進捗投稿」って予定入れとく

これだけで、「うっかり忘れた」が消えます。習慣化って、ほんとに仕組み次第。

---

## 💡 関連記事とまとめ

ここまで読んでくれてありがとうございます！  
今回の話、ちょっとでも「使えそう！」と思ったら、チームでぜひ試してみてください！

それと、**「見える化」と「伝え方」の話**って、設計にもつながってくるんですよね。  
たとえば、こんな記事ともめっちゃ相性いいです👇

- ▶️ [🌟Spring Boot設定のベストプラクティス｜画面名やパスを外部ファイルで管理する理由と方法💡](https://qiita.com/doruboxshiki/items/c5cc5e6be2720fb7ed33)

「設定値がバラバラ」「誰がどこで使ってるか分かんない」ってなると、報連相も当然ズレます。  
**コードも、進捗も、ちゃんと“伝わる形”で管理しよう！**

---

何か感じたことがあれば、コメントやLGTMでリアクションもらえるとめっちゃ嬉しいです✨  
それじゃ、またどこかの記事でお会いしましょう〜！💻🔥
[AtCoder] setを使えば爆速成長できる

### 初めに
C++ のsetは重複しない値を自動的に昇順で保持するコンテナです．

### 使い方


``` C++: cpp
#include <iostream>
#include <set>
using namespace std;

int main() {
    set<int> s;

    // 値の追加（重複は無視される）
    s.insert(3);
    s.insert(1);
    s.insert(4);
    s.insert(1); // 無視される

    // 中身を表示（昇順に自動ソートされる）
    for (int x : s) {
        cout << x << " ";  // 出力: 1 3 4
    }
    cout << endl;

    // 値の存在チェック
    if (s.count(3)) {
        cout << "3 exists!" << endl;
    }

    // 値の削除
    s.erase(3);

    // 再表示
    for (int x : s) {
        cout << x << " ";  // 出力: 1 4
    }

    return 0;
}
```

### その他メソッド

|操作 | 書き方 | 説明 |
|---|----|----|
要素を追加 | s.insert(x); | x を追加（重複は自動で無視）
要素を削除 | s.erase(x); | x を削除（存在しない場合は無視）
要素が存在するか調べる | s.count(x) | 0 or 1 を返す
要素数を取得 | s.size() | 要素の個数を返す
全て削除 | s.clear() | 空にする
最小要素 | *s.begin() | 最小の値（先頭）
最大要素 | *s.rbegin() | 最大の値（末尾、逆順イテレータ）

### 例題１
[出典：AtCoder85B](https://atcoder.jp/contests/abc085/tasks/abc085_b)
さまざまな高さの鏡もち（重複を許す）があり，その中から，高さの異なるもちのみを並べた際に，何段の鏡もちができるか．

[答え]
```cpp: cpp
// 入力された餅の高さをすべて set に入れることで重複を除去し、
// 鏡餅の段数（異なる高さの数）を求める。
set<int> d;
for (int i = 0; i < N; ++i) {
    int h;
    cin >> h;
    d.insert(h);
}
cout << d.size() << endl;
```
【ネットワーク】ICMP

# はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指しているTairaです。
今回はネットワーク通信における重要な制御プロトコル「ICMP」について解説します。

---

## ICMPとは何か？

ICMP（Internet Control Message Protocol）とは、インターネット層（OSI参照モデルではネットワーク層）で使用される**制御用の通信プロトコル**です。TCPやUDPのようにアプリケーションのデータを運ぶことはなく、通信の成功や失敗、状態の異常などを通知することに特化しています。

たとえるなら、ICMPは通信の"伝令係"。パケットを届ける役目を担うわけではありませんが、「届かなかった」「経路に問題がある」などを伝えてくれます。

---

## ICMPの役割と位置づけ

ICMPは、IP（Internet Protocol）と同じ"ネットワーク層"に位置しています。TCPやUDPがデータ転送を担う"トランスポート層"の上位にあるのに対し、ICMPはIPと一体で動作し、通信の制御や通知を行います。

```
[アプリケーション層]  → Web、メールなどの処理
[トランスポート層]    → TCP、UDP
[ネットワーク層]       → IP + ICMP  ← ★ここ！
[データリンク層]       → イーサネットなど
```

ICMPは、IPパケット内に埋め込まれた形で動作し、通信の補助的な役割を果たします。

---

## ICMPが使われる具体的な場面

以下に、ICMPが送信する代表的なメッセージと、それが使われる場面を紹介します。

| タイプ | 名称 | 使われる場面 |
|--------|------|----------------|
| 3 | Destination Unreachable | 宛先のIPに到達できないとき |
| 11 | Time Exceeded | パケットのTTLがゼロになり廃棄されたとき |
| 5 | Redirect | より適切なルートがあるときに経路変更を促す |
| 12 | Parameter Problem | パケット内の情報に問題があるとき |

これらの通知は、アプリケーション層のプロトコル（HTTPやSMTPなど）では得られない"通信インフラの状態"を知る上で極めて重要です。

---

## pingコマンドとの関係
ICMPが実際に使われている最も身近な例が、pingコマンドです。

pingはICMPの**Echo Request（エコー要求）メッセージを送信し、相手からのEcho Reply（エコー応答）**を受け取ることで、以下のことを確認します

- 相手のホストがネットワーク上で生きているか
- 通信にかかる時間（ラウンドトリップタイム）
- パケットロスの有無
- DNAが正しく動いているか

たとえば、以下のように使います
```bash
ping google.com
```
このようにして送られたICMPメッセージに相手が応答すれば「生きている」と判断でき、返答がなければ「通信できない」ことを示します。

なお、pingが動作しないからといって必ずしも相手が落ちているとは限りません。ICMPをファイアウォールなどでブロックしているケースもあるため、その点も注意が必要です。
また、 pingはサーバーの「存在」と「到達性」を確認するだけでWebにアクセスできるかどうかはわかりません。
## ICMPの重要性

ICMPがなければ、通信の失敗がどこで起きているのかを知る手段がありません。例えば：
- 宛先が存在しない：ICMPが"到達不可"を通知
- 途中のルーターでTTLが尽きた：ICMPが"時間超過"を通知
- 経路が混雑している：ICMPが"経路変更"を提案

これらはすべて、ネットワークの診断やトラブルシューティングに欠かせない情報です。

---

## セキュリティとの関係

便利なICMPですが、ネットワークの構成や存在を探る手段として悪用されることもあります。そのため、ファイアウォールやルーターでICMPを制限・遮断する設定がされていることもあります。

---

## まとめ

| 項目 | 内容 |
|------|------|
| 名称 | Internet Control Message Protocol |
| 役割 | 通信の制御、エラー通知、経路案内など |
| 層 | ネットワーク層（IPと同じ） |
| 主なメッセージ | 宛先到達不能、時間超過、経路変更、パラメータエラー、エコー要求/応答（ping）など
[Python / tensorboard] Python 3.13 と numpy>=2.0で tensorborad を使用するときのエラー対策

# 概要

`pip install` には成功するのだけど、 `tensorboard` の起動時にエラーが発生するときの対策を記載しています。

# 対象エラー

この記事では、以下の3つのエラーを対象としています。

1. AttributeError: `np.string_` was removed in the NumPy 2.0 release. Use `np.bytes_` instead.
2. AttributeError: module 'numpy' has no attribute 'bool8'
3. ModuleNotFoundError: No module named 'imghdr'


# 解消法

## 1. と 2.

まず、以下の二つのエラーを解消していきましょう

- AttributeError: `np.string_` was removed in the NumPy 2.0 release. Use `np.bytes_` instead.
- AttributeError: module 'numpy' has no attribute 'bool8'

`numpy` のバージョンが 2.0 以上の時に、 `tensorboard` のバージョンが古いと発生するようです。

対処法は、以下の記事に掲載されていました。

https://stackoverflow.com/questions/78721195/attributeerror-np-string-was-removed-in-the-numpy-2-0-release-use-np-bytes

具体的には、以下のように `tensorboard` のバージョンを `2.18.0` にあげることで解消できました。

```bash:requirements.txt
tensorboard==2.18.0
```

## 3. ModuleNotFoundError: No module named 'imghdr'

こちらは、 Python 3.13 の時に発生するエラーのようでした。

対処法は、以下の記事に掲載されていました。

https://stackoverflow.com/questions/79144437/how-to-resolve-no-module-named-imghdr-error-in-python-3-13-with-tweepy

`standard-imghdr==3.13.0` という pip モジュールを追加することで解消できました。


```bash:requirements.txt
standard-imghdr==3.13.0
```
React Native バージョン管理

:::note alert
エラー内容：バージョンがあってない・・・
error This project's package.json defines "packageManager": "yarn@4.2.2". However the current global version of Yarn is 1.22.22.
:::


Node.js 16.9以上なら、corepack という仕組みで簡単にバージョン管理できる！

```bash
corepack enable
```
(yarn や pnpm などのパッケージマネージャーのバージョンを簡単に管理できるツール
Node.js に 最初から内蔵されてるよ（バージョン 14.19 / 16.9 以降）)

プロジェクトの packageManager: "yarn@4.2.2" に合わせるには：
```bash
corepack prepare yarn@4.2.2 --activate
```
```bash
yarn -v
```
```bash
yarn install
```
※yarn install は、React（またはReact Native）などのプロジェクトでよく使う、依存パッケージをまとめてインストールするコマンド
ABC379Cの自分なりの回答

# 前提

$X_i$と$A_i$をpairで繋げれば良さそう。
$X_i$を基準にソートしなきゃなぁ（でもやり方わからん）

# vector< pair < long long, long long>>のソート
```cpp
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;

vector<pair<long long, long long>> v;

// v[i].firstに$X_i$のデータを入れる

// v[i].secondに$A_i$のデータを入れる

sort(v.begin(), v.end()); //v[i].firstを基準に昇順ソート
```

# 石が配れるかどうか調べながら、後で使う情報を集める

この問題は、石を左から右にしか配れない。
かつ、1つのマスに1つしか石を置けない。

これより、石を置く直前を境に配れるかどうか判定を行う。

## なぜ、石を置く直前を境に配れるかどうか判定を行えば良いのか。

一般的な考え方として、「変化の起こる前後に着目すると良い」というのがある。

さて、今回の「変化の起こる前後」とはどこだろうか？
今回の「変化の起こる前後」は、$X_i$で石が$A_i$個増えるというイベントである。
$X_i$で石が$A_i$個増えるまで、つまり$X_{i-1}$から$X_i-1$までは石が増えないのである。
この問題では、石は左から右にしか運べないため、$1$~$X_i-1$までに石が$X_i-1$個いなければならないことがわかる。

これをfor文で回して、この条件を満たすか調べれば良い。

# 石の移動量を求める

これはまず、やったことがないと思いつかないと思う。

まず、具体例を考えてみる。
初期位置と最終位置の全ての石のマスの位置の合計を求める。

マス1に2個、マス3に1個、マス4に3個あった場合、
$S_{pre} = 1 + 1 + 3 + 4 + 4 + 4$

これは最終的にマス1に1個、マス2に1個、...、マス6に1個となるため、
$S_{pos} = 1 + 2 + 3 + 4 + 5 + 6$

これより、それぞれのマスがどのくらい移動したのかは、
$S_{dif} = 0 + 1 + 0 + 0 + 1 + 2$
として表せる！
これより、石の移動した時の和は
$S_{dif} = S_{pos} - S_{pre}$ で表せば良いじゃないか！！とわかる。

思いつくかこんなもん。

# 感想

「変化の起こる前後に着目すると良い」という考え方は早めに身につけていきたい。
この問題だけではまだ身についたとは言えないと思うので、色々な問題をどんどん解いていきたい。

移動量は思いつかん。(n回目)
こればかりは経験なのでは...？
猿でもわかるAIビジネス活用シリーズ 🐵📊 | [第4回] 生成AIを導入する前に知っておくべきこと





## 1. 🧯 問題提起：その生成AI、ちゃんと“使われて”ますか？

最近、「うちもChatGPT導入しました！」という声、よく聞きます。  
でも、ちょっと待ってください。

- 使ってるのは一部の好奇心旺盛な社員だけ
- 現場は「便利だけど、何に使えば…？」状態
- 社内のポリシーが曖昧で誰も触らない

こんな **「生成AI導入したけど使われない」問題**、多くの企業が直面してます。

本記事では、**生成AIの導入に失敗しないために**押さえるべきポイントを、  
**技術 × 実装 × 現場運用**の3視点から解説します。

---

## 2. 💡 生成AIとは何か？〜再確認しておこう〜

### 🧠 定義

生成AI（Generative AI）とは、**自然言語・画像・コードなどを“生成”するAIモデル**の総称。代表的な技術には以下があります：

| 技術 | 用途例 |
|------|--------|
| LLM（例：GPT） | 文章生成、要約、対話 |
| Diffusionモデル | 画像生成（例：Stable Diffusion） |
| Codegen系 | コード補完・自動化（例：GitHub Copilot） |

### 🧰 よく使われるツール

- ChatGPT / Claude / Gemini
- LangChain / LlamaIndex（RAG構成）
- Vector DB：Pinecone / Weaviate / Qdrant

---

## 3. 🚀 実装例：社内FAQチャットボットを爆速で作る

最もニーズの高い「社内ヘルプデスクをAI化する」ユースケースで、  
**LangChain + OpenAI + FAISS**を使ったシンプルなRAG型FAQボットを作ってみましょう。

### 📦 スタック

- LangChain
- OpenAI API（gpt-4-turbo）
- FAISS（ローカルなベクトルDB）

### 💻 コード概要

```python
from langchain.vectorstores import FAISS
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
from langchain.document_loaders import TextLoader

# ドキュメント読み込み & ベクトル化
docs = TextLoader("internal_faq.txt").load()
db = FAISS.from_documents(docs, OpenAIEmbeddings())

# チェーン作成
qa = RetrievalQA.from_chain_type(
    llm=ChatOpenAI(model="gpt-4-turbo"),
    retriever=db.as_retriever()
)

# 質問に答える
query = "新卒の有給取得ルールは？"
response = qa.run(query)
print(response)
```

### 📊 出力例

```shell
▶️ 新卒社員は入社時点で5日間の有給が自動付与されます。半年後に追加で5日支給されます。
```

---

## 4. 🧠 実務での落とし穴 & Tips集

### ✅ よくある失敗パターン

| 状況 | 問題 |
|------|------|
| PoCだけやって満足 | 本番に繋がらない「PoC地獄」 |
| 社内ポリシー不明 | 利用停止される or 誰も触れない |
| モデルが勝手に嘘をつく | “Hallucination”地獄へようこそ |

### ✅ 効果を最大化するTips

- 🚦 **まずは1部署 × 1ユースケースから始める**
- 📏 **プロンプトテンプレートを定義し、標準化する**
- 🔐 **社内データ活用時はRAG構成＋アクセス制御で安全に**

---

## 5. 🔧 応用編：RAG＋LLMで社内ナレッジ基盤を構築

### RAGとは？

> Retrieval-Augmented Generation：外部知識を参照しながら回答を生成する構成。

### 応用アイディア

- 🔍 社内Confluence + LLM → ナレッジ検索Bot
- 📄 PDF契約書 + GPT → 自動要約＆リスク抽出
- 📈 BIレポート + GPT → 経営ダッシュボードの自然言語Q&A化

### 図解（※図付きでQiita/Zenn用意）

```
[ ユーザー質問 ]
       ↓
[ ベクトル検索（FAISS） ]
       ↓
[ 関連文書取得 → GPTで生成 ]
       ↓
[ 回答を返す ]
```

---

## 6. 🧾 結論：生成AI導入は“技術”より“設計”が9割

### ✅ 導入メリット

- 手作業業務の自動化・効率化
- ナレッジアクセスの高速化
- 意思決定支援の質向上

### ⚠️ 注意点

- 精度より**“業務導線に組み込めるか”**がカギ
- “社内に根付かせる”ための設計（UX, ガイドライン, フィードバックループ）

---

## 🎯 最後に：試すなら“今日”が一番早い

生成AIは魔法じゃありません。でも、ちゃんと設計すれば、  
**「日常の業務を3倍速にする“超有能な相棒”」**になります。

まずは社内のよくある質問を集めて、**小さくPoCから始めましょう**。

明日「とりあえず入れてみた生成AI」が、  
**誰もが頼る“AI同僚”に進化するかもしれませんよ 🧠✨**
猿でもわかるAIビジネス活用シリーズ 🐵📊| [第3回]データドリブン経営とは？AIを経営に活かす方法


## 1. 🚨 問題提起：「感覚経営」から卒業しよう

現場：「アクセス数が減ってます！」  
部長：「今月のラッキーカラーは赤。バナーを赤に変えて！」  

・・・こうして今日も、なんの検証もない「謎KPI施策」が走る。  
これが多くの企業で起きている**“感覚経営”**です。

でも、私たちエンジニアには**データという武器**があります。  
AIとデータを使えば、**経験でも勘でもなく“科学的な意思決定”**ができる。

今回は「データドリブン経営ってなに？AIって経営でどう使うの？」という疑問に対して、**実装例＋運用Tips込みで解説**していきます。

---

## 2. 💡 データドリブン経営とは何か？

### 📌 定義
**“直感ではなく、データに基づいて意思決定する経営手法”**  
それが「データドリブン経営」です。

この考え方にAIを加えることで、  
- 将来の売上を予測したり  
- 顧客の離脱を未然に察知したり  
- KPI改善の要因を分析したり  

と、より高度でリアルタイムな意思決定が可能になります。

---

## 3. 🛠️ 実装例：顧客離脱予測ダッシュボードを作ってみた

「ユーザーがいつ離れるか予測できれば、止められるよね？」ということで、**Churn Prediction（解約予測）AIダッシュボード**をPythonで作ってみましょう。

### 📦 技術スタック

- Python（pandas, scikit-learn, streamlit）
- モデル：ランダムフォレスト（予測精度◎）
- データ：ユーザー行動ログ（例：最終ログイン、アクティビティ回数など）

### 💻 コード概要

```python
# churn_predictor.py
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
import streamlit as st
import joblib

# モデルの読み込み
model = joblib.load("model.pkl")
df = pd.read_csv("user_behavior.csv")

# ユーザーを選択
user_id = st.selectbox("ユーザーを選択", df["user_id"])
user_data = df[df["user_id"] == user_id].drop(columns=["churn", "user_id"])

# 予測
pred = model.predict(user_data)[0]
proba = model.predict_proba(user_data)[0][1]

# 表示
st.write(f"ユーザー {user_id} の離脱確率は {proba*100:.2f}% です")
if proba > 0.5:
    st.error("⚠️ このユーザーは離脱リスクが高いです！")
else:
    st.success("✅ 離脱リスクは低いです。")
```

### 📊 Streamlitでのダッシュボード表示（図示可）

- 表：顧客リスト＋離脱確率
- フィルター：地域、契約プラン、アクティビティ頻度
- アクション：Slack連携でアラート通知

---

## 4. 💡 実務Tips & よくある失敗

### ✅ 現場で役立つノウハウ

| 実践Tips | 解説 |
|----------|------|
| 📈 定期 retraining | 行動パターンは変わるので、モデルは定期更新必須 |
| 🧠 閾値は業務目線で | 単純な0.5ではなく、実際の介入コストとバランスを考える |
| 📢 アラートは自動連携 | Slack・メール・Notion等と自動化して初めて使える |

### ❌ よくある失敗

- 「予測できたけど、現場で使われない」→ UX不在のモデルは無意味
- 「分析だけで終わる」→ データから**アクション**への設計が超重要
- 「精度だけ追いすぎる」→ モデルの可読性・納得感も必要

---

## 5. 🚀 応用：売上予測 × 意思決定支援AI

顧客離脱予測だけではもったいない。  
以下のような応用で「経営をAIと共に」できます。

### 🧠 応用ユースケース

| 機能 | 活用例 |
|------|--------|
| 売上予測 | プロモ施策の効果検証や在庫調整 |
| 顧客クラスタリング | ターゲティング広告やLTV最大化 |
| 意思決定AI | 「今月の優先施策は？」を提示するAIコーチ |

### 🧰 使用技術例

- XGBoost / Prophet（時系列予測）
- LLM + 経営KPIデータのナレッジRAG
- Dashboard with Looker / Streamlit

---

## 6. 📌 まとめ：データ × AI ＝ 経営のOS

### ✅ メリット
- 意思決定の納得性UP（社内調整も楽に）
- トレンドの早期察知
- 仮説→実行→検証の高速サイクル化

### ⚠️ デメリット
- データ整備がカギ（Garbage in, Garbage out）
- 全社的なリテラシーが必要（経営陣も含め）

---

## 🙌 最後に

「経営はアートだ！」という言葉もありますが、  
**アートには“絵の具”が必要で、その絵の具が“データ”と“AI”です。**

まずは小さく、**離脱予測や売上予測から始めてみませんか？**  
明日、Streamlitでダッシュボード立ち上げてみるのもアリですよ 🧪
世の中に出ている技術記事は基本上澄みの人が書いてるから、あんまり振り回されないように気をつけようねって話

# 結論
人間の9割は（必ず自分を含めて）愚かであるという前提でいましょうねえ。
# 対象
焦ったり困ったりしんどかったりする人と、そういう人をチームに抱えている人へ、そしてこの素晴らしいプログラマーの世界へ。
# 序文
インターネット上に発信されている情報には偏りがあるものです。XやInstagramを世の中の全員がやっているわけではないように、閲覧にも、そして発信にも偏りがあります。ところが人はしばしば、それを世界の全てだと思い込みます。

発信する時点ですでに選ばれし者たちです。やる気ありありなわけです。だから偏る。
世界に広がる技術記事は、英雄論の一つなんです。
ところが世界中の人がその英雄論の中で生きているという風に見えてしまうのがインターネットの怖いところ。それらは人に学びを与えますが、時に全然関係ない焦りと誤解を与えます。
というようなことを、昨今の世の中に対して一応言っておきたいなあ、というのがこの記事の内容です。

# 簡単そうなものが世に広まる
世のプログラミング言語やフレームワーク・ライブラリの広まりには、合理的ではない広がり方があります。合理的というのは、例えばある案件でそれを利用する理由として最適解であるから（最適解を出すための手続きの結果出たものであるから）ということですが、別に最適解を探ってもないけど採択されていくものもある訳です。

合理的な理由がなくても古い技術は使われ続けますし、技術的負債が高くなってもPythonで書かれたきったねぇコードは息をするわけです。
で、そこでは一口で言うと『簡単だから』と『簡単そうだから』という、人間の主観的な感覚が結構動いているのだと思います。

それはそのままそういう理由として発信の前提とされることってあんまりないような気がしています。というのも、ある感覚を言語化して利点を挙げた発信があるわけなのですが、『簡単だから』はぎり合理的な言語に翻訳できても、『簡単そうだから』って言語化できない...というか合理的ではないですからね。

『簡単だから』と『簡単そうだから』は事実と感覚という意味合いで全然違っている。そして感覚の部分はやはり合理化された部分のみが記事になる。
『このように利用することで最適なコストバランスで作業できる』と合理化を探られたものと、『なんか、簡単そう』の間にはものすごい差がある。

そこには語られていない言葉があって、人の愚かさを前提にした言葉がないんじゃないかって思うわけです。

### 人間は、そんなに、優れてねえ！
『合理的な思想』はとても素晴らしいものです。でもはっきりとこの偏見を断言します。人間は、そんなに、優れてねえ！
人の言葉は感覚や行動に再現性を与えるために後から合理的に組み立てられたもので、感覚や行動そのものを網羅的に説明することはできない。実際の人の群れは、人はもう十歩ぐらい怠惰なわけです。

実際にそこにある現実より少し大きなものが世界を動かしているという勘違いは、誰にとっても不幸で、そして危ないことです。何故か？
**どれだけ高望みしようが、人にはできることしか出来ないからです。**
任天堂の岩田社長だって言っています。『**やった方がいいことは、やれることの何倍も多い**』みたいなことを言っていたような気がするんですけどたぶんこの文脈で出すと怒られるか

# どうあるべきか？
とはいえ、勿論考えていくことを放棄するわけにはいきません。
人が最適解を探っていくべきだという基本的姿勢に僕は賛同します。
まず大事なのはコレ。

### 愚かしさがそこにあることを忘れない。見下さない。

パワポで直しにくくて粒度もよくわからん設計書作って
手癖でテーブル名を決めて、
オレオレディレクトリ構成を作って、
自分の感覚でテスト困難な形に関数を切り分けて、
info_dataとかいうふわっとした命名を連発して、
それで時間いっぱいになって。
その割に後輩ができたらしたり顔で教えて、わけわかんないルールなんか作ってみたりして...。

その愚かしさを忘れず、見下さないこと。

世の中の大半のプログラマーって技術記事を書きません。なんなら大して勉強もしない。コピペでしょーもないソースコード書いて、穴あきのテスト作ってなんか動いてるからデプロイして、それでお金はウン億動いて。

でも、自分もその1人なんです！
具体的に建設的に物事を言語化する能力なんてそんなになくて、理屈でぶっ叩かれたら目を回して気絶する。でも理屈を捨てるほど強くいられるわけでもないから言葉にしていく。一つ一つ。

できることをやっていく事が大事なんです。それで社会は回っています。

### 愚かしさは直らない。感情は共感し、合理的には仕組みを整えること。
作り上げられたある状態をできるだけ良い状態に向かわせるっていうのは、組み立てられた一本足のロボットを倒さないようにネジを緩めて改造していくようなことなわけです。
それってとんでもない作業ですよ。

自認も他認（？）も『やってないだけ』だとしても、本当は『できない』ってこと、沢山あります。
感情は常にその怠惰さに共感して良いのです。大切にしてあげて良いのです。

勿論物事をよくしていくのは大切なことです。だからいつも心に留めておかなくてはならないのは、『環境』のことです。
つまり、人よりも大きな『仕組み』を整えておくということです。

朝ごはん食べれてますか？よく寝れてますか？趣味はありますか？
チームで会話はできてますか？尊厳が尊重されてますか？好奇心は評価されますか？
『気をつけよう』でフィードバックを終わらせてませんか？前よりもより良い環境を作れていますか？

義務を履行させるために権利を担保するのではなく、幸福を追求した先により良い職務があるのだと信じられますか？そのために尊厳と権利を守りたいと思えますか？

たんぽぽに薔薇になれというのは無理ですが、綺麗なたんぽぽは咲かせられますからね（詩的表現）。

# 終論、締めの言葉
人間って愚かなんです。ダメなんです。
だから英雄論は信じずにやってきましょうよとか。
英雄論で動かない発信者たちの中のマイノリティこそがマジョリティで、だからイライラせずに、さりとて全部投げ出すわけでもなく、一歩一歩やっていこうよって、多分その方が関わっている人間全員が幸せになるんじゃないかなって、だからまあそういう話を、この4月という時期に乱雑な言葉でも発信しときたかったわけです。合掌。

みんな、あんまり世の中の上澄みを前提に仕事しないようにしようね。
向上心を捨てろと言ってるんじゃないからね。振り回されちゃダメだよという話でした。
猿でもわかるAIビジネス活用シリーズ 🐵📊  | [第2回] AIで業務効率化！企業がすぐに取り入れるべき5つの活用法



## 1. 🧩 問題提起：なぜ今、AIで業務効率化なのか？

日本企業の多くが「働き方改革」を掲げてはいるものの、現場ではいまだに「コピー＆ペースト地獄」や「無限ループの報告書」が蔓延しています。  
そんな中、「AIでなんとかならん？」という声、現場で上がってきてませんか？

実は、**AI導入＝何億円のプロジェクト**ではなく、**今日から試せる「小さな一歩」**がたくさんあります。

今回は、**「今日導入できるAI活用術5選」**から厳選して、エンジニアでも試しやすい一例を**実装レベルで解説**します！

---

## 2. 💡 総論：企業で使えるAI活用法、ざっくり5選

以下のようなユースケースはすでに多くの企業で実績があります：

| 活用法 | 具体例 | 難易度 |
|--------|--------|--------|
| 書類の自動仕分け | 契約書・請求書の分類 | ★☆☆ |
| 顧客対応の自動化 | チャットボット、FAQ検索 | ★★☆ |
| 売上予測 | 機械学習による需要予測 | ★★☆ |
| 社内ナレッジ検索 | GPTによる情報検索 | ★★☆ |
| 会議議事録の自動化 | 音声→文字＋要約 | ★★★ |

今回はこの中でも**「社内チャットボットによる業務効率化」**にフォーカスして紹介します。

---

## 3. 🛠️ 実装例：社内GPTチャットボットをSlackに導入してみた

「AIで社内の質問対応を自動化したい！」というニーズに答えるべく、OpenAI APIとSlackを使って、**社内ナレッジBot**を構築してみましょう。

### 🔧 技術スタック

- OpenAI GPT-4 API
- Python + Flask
- Slack Events API + Bolt SDK
- Redis（コンテキスト保持）

### 🧪 サンプル構成図

```
[User] --Slack--> [Flask Bot Server] --→ [OpenAI GPT-4]
                             ↑
                        [Redis Cache]
```

### 📦 ソースコード抜粋

```python
# app.py
from slack_bolt import App
from slack_bolt.adapter.flask import SlackRequestHandler
import openai, os, redis

app = App(token=os.environ["SLACK_BOT_TOKEN"])
handler = SlackRequestHandler(app)

rdb = redis.Redis(host='localhost', port=6379)

@app.event("message")
def handle_message_events(event, say):
    user_input = event["text"]
    history = rdb.get(event["user"]) or ""

    prompt = f"{history}\nUser: {user_input}\nAI:"
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[{"role": "user", "content": prompt}]
    )
    reply = response["choices"][0]["message"]["content"]
    rdb.set(event["user"], f"{history}\nUser: {user_input}\nAI: {reply}")
    say(reply)

# Flask routing
@app.route("/slack/events", methods=["POST"])
def slack_events():
    return handler.handle(request)
```

---

## 4. 🔍 実務ノウハウ：導入時の注意点とTips

### ✅ 成功のコツ
- **ナレッジの範囲を限定すること**（例：人事関連だけ → 精度爆上げ）
- **Slackのスレッド機能を活用**して、会話コンテキストを明示化
- **定期的なプロンプト改善**：利用ログを分析し、プロンプトを最適化

### ❌ よくある失敗
- 情報が分散しすぎて**Botが混乱する**
- **社内用語に対応できない**（→ カスタム辞書やファインチューニングが必要）
- 無制限に応答してしまい**API課金爆死**

---

## 5. 🚀 応用展開：ナレッジベース×ベクトル検索（RAG）

OpenAIのGPTに加えて、社内ドキュメントを組み合わせることで**「業務特化型Bot」**が爆誕します。

### 📌 参考技術
- LangChain
- Weaviate / Pinecone
- OpenAI Embedding API

### 📘 応用事例
- 社内Wikiから回答生成
- コードリファレンスBot
- 営業資料検索Bot

---

## 6. 🧠 まとめ

### 📈 メリット
- 対応コストの大幅削減
- 社内問い合わせのレスポンス向上
- データ活用によるナレッジ集約

### ⚠️ デメリット
- 導入初期はチューニングが必要
- 社内文化との適合に時間がかかることも

---

## 🎯 最後に：AI導入は「スモールスタート」が吉

「最初から完璧なAIを目指さないこと」こそが成功のカギです。  
まずは小さく試して、現場で「便利かも」と思ってもらう。それが**AI導入成功の第一歩**です。

「明日、SlackにBot入れてみるか」と思っていただけたなら幸いです 🙌
🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる②【部品購入編】

## はじめに

こんにちは、piyovateです🐣✨

前回の記事では、ラズパイを使って『社内の環境（温湿度）を見える化するシステム』を作ることに決定しました。

今回は、実際に使用する部品の選定と購入してきた内容を紹介します。

---

## 🛒 購入予定だったもの

事前に社内で話し合って、購入予定だったものはこちらです。

- Raspberry Pi Pico W（Wi-Fiが使えるラズパイ）
- BME280 温湿度センサー（温度と湿度を計測できるセンサー）

---

## 🎯 実際に購入したもの

予定していた部品を実際に買いに行ったのですが、以下のものを買ってきました。

| 購入したもの | 理由・コメント |
|--------------|---------------|
| Raspberry Pi Pico WH | もともとはPico Wを予定していましたが、店頭で見たPico WHはピンヘッダが最初から半田付け済みで便利そうだったのでこちらを選びました。半田付け初心者なので助かります！ |
| BME280 温湿度気圧センサー | 予定通りの購入！温度・湿度に加え、気圧まで測れます。こっちはピンヘッダーを半田付けしないといけないので、頑張ります🔥 |
| 加速度センサー | 店頭で気になってしまい、つい衝動買いしてしまいました（笑）あとで何かに使えそうです。 |
| USBケーブル (A type - Micro(B) type) | Raspberry Pi Pico WHへの書き込みや給電に使います。家や会社にあまり余っていなかったので購入。 |

ジャンパーケーブルなどは会社にすでにあったため、今回は買いませんでした。

実際に購入した部品の写真は、後ほどTwitterにも投稿する予定です！Twitterもぜひ見てくださいね✨ イイネもしてもらえると嬉しいです🐣

---

## 🔄 予定と違うものを選んだ理由

今回は予定していたものと一部違うものを購入しました。

特に「Raspberry Pi Pico WH」は、最初からピンヘッダが半田付けされていて初心者にとても優しい！これが決め手でした。半田付けに不安があった私にとってはありがたい選択肢でした🐣✨

センサーのBME280は予定通りですが、こちらは半田付けが必要。頑張って挑戦してみます！

また、予定外の「加速度センサー」は好奇心でついつい購入しましたが、後日何か面白いことに使えたらいいなと考えています。

---

## 🙏 社長に感謝！

そして、今回購入した部品は社長に買っていただきました。

社長、ありがとうございました～！🙏✨ 大切に活用して、ちゃんと動くシステムを作りますね！

---

## 🔜 次回の予定

次回はいよいよ、今回買った部品を使って配線や半田付けを行い、ラズパイのセットアップをしていく予定です！

うまくいくかちょっとドキドキしますが、頑張りますので、次回もお楽しみに！

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

## 🔗 シリーズリンク

* 次回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる③【Pico WH セットアップ〜Lチカ編】](https://qiita.com/Piyovate/items/e1c1403d4b6c29978ea7)
* 前回：[🌿 ラズパイを活用した『社内環境（温湿度）見える化システム』をつくる①【アイデア決定編】](https://qiita.com/Piyovate/items/b0e5a4b2c4c1ed7a3bf8)

📚 シリーズ全記事はこちら：[Qiitaストックページ](https://qiita.com/Piyovate/stocks/657201b660bed4ebf50c)
【YouTubeチャネルのテーマ曲作成】Theme from Yamanaka-Ya YouTube Channel #2 - Jazz, Piano, Ballad, Lounge【Suno AIで作曲】【動画 2分38秒】【YouTubeチャンネルからの転記です】

この記事は、わたしの[YouTubeチャンネル](https://bit.ly/Yamanaka-YouTube "Living without things. 持たない生き方 手放す生き方")にある公開動画を転記しております。
( どこかのタイミングで、プログラミング-Google Apps Script or iPaaS-Zapier をつかって自動転記させる予定です )

転記のための時間コストを少なくしたいので、文字装飾( Markdown記法 )を極力つかわずに書いております。

こちらが動画内容です👇

***

![02 YouTubeサムネイル & 再生中の画像 Suno AI _ Theme from Yamanaka-Ya YouTube Channel #2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/386308/1f3b9ed4-57c3-462f-8855-95b37c45dc44.png)




* # 動画URL
    * https://youtu.be/nhVi0dJMXQM

<br>

* # 動画タイトル
    * Theme from Yamanaka-Ya YouTube Channel #2 - Jazz, Piano, Ballad, Lounge【Suno AIで作曲】【動画 2分38秒】

<br>

* # 動画の説明欄(一部を抜粋)

撮影日 = 2025-04-24(木)

Suno AIとは、文章から音楽を生成することができるAIサービス(Text-to-Music-AI)です。
わたしは、2024-04-02(火)に初めてSuno AIで有償プランを契約してから、時々楽曲をつくって遊んでいます。

🎦【Suno AI】文章から音楽を生成するAI( Text-to-Music-AI )で、3分間で2曲、6分間で4曲作りました【試聴可能】1)伴侶の曲 2)税理士の曲【動画 16分11秒】
https://youtu.be/QKfhk4HgQ_g

🎦“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe

🎦“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


今回は、Suno AIで作曲し、 WAV 出力した楽曲を動画に仕上げました。

今回つくった楽曲は、自分自身のYouTubeチャネルのテーマ曲です。
もともとは、Erik Satie “Gymnopédie No.1”のような、落ち着いた3拍子のピアノ曲を作ろうと考えていました。
しかし、Suno AIが提案してきた候補を聴いていく中で、Gymnopédie + 演歌をためしたり、Gymnopédie + Hiphopをためしたりして、そしてこの曲に心を惹かれ、最終的に採用することにしました。

編集や公開作業の合間に感じていた空気感、発信を続けてきた過程で見えてきた想い、それらをひとつの音楽に凝縮しました。
動画の世界観、温度感、そして届けたい想いを意識しながら、旋律を組み立てています。

ぜひこの楽曲を聴いていただき、わたしのチャネルの世界観を感じていただければ嬉しいです。
そして、自分自身のメディアや表現の場を持っている方は、ぜひその想いを音楽にしてみてください。
言葉では言い尽くせない魅力や温度を、音が伝えてくれるかもしれません。

作曲日:
2025-04-23(水)

Suno AI 契約の種類:
Pro Plan

Suno AI Version:
v4

楽曲の正式名称:
Theme from Yamanaka-Ya YouTube Channel #2

Suno AI Library URL:
https://bit.ly/YamanakaYa-YT-Theme-02

Custom Mode: On

Audio Inputs: Not Used

Instrumental:


---


Suno AIへの指示文章( プロンプト/Prompt ): Custom Modeの場合は”Style of Music”を指定します。


🇬🇧English

[Hiphop][Jazz][Piano][Ballad][Outro]


🇯🇵日本語訳

[ヒップホップ][ジャズ][ピアノ][バラード][アウトロ]


---


Suno AI 公式URL
https://accounts.suno.ai


---


🎥この動画と関連が強いわたしの動画
・“効果的にSuno AIを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPuaNOVZn-N53wVvsBkeHdI


・“Suno AIでつくった楽曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghMLdiSVqwvSs_Z5y0H4VGOe


・“山中一司のYouTubeチャネルテーマ曲”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghOIRQJWN40VqpHBcb_8jnM8


・“YouTubeチャンネルを活用するヒント”シリーズ
https://www.youtube.com/playlist?list=PLpQhBHT4oghPU-6b7_38byuhYDiOYCLW6


🎥Shortened URL for this video | この動画の短縮URL
https://bit.ly/44ASdAz