OmniAICreator/Qiita-1.07M huggingface dataset:
【Python入門 第2章】変数とデータ型のキホンをマスターしよう🐍💡

こんにちは、**PythonTimesの蛇ノ目いろは**です🌿  
今回は「Pythonでの変数とデータ型」について、やさしく解説していくよっ！

---

## 🧠 変数ってなに？

変数とは、**値に名前をつけて保存する箱** のこと！

```python
message = "こんにちは"
age = 25
```

- `message` という箱に `"こんにちは"` を入れた
- `age` という箱に `25` を入れた

使いたいときは、箱の名前を書くだけ👇

```python
print(message)  # → こんにちは
print(age)      # → 25
```

---

## 🧪 データ型（データの種類）

Pythonでは値に **種類（型）** があるよ。主なものはこちら👇

| データ型 | 説明              | 例                      |
|----------|-------------------|--------------------------|
| int      | 整数              | `10`, `-5`, `0`          |
| float    | 小数              | `3.14`, `-0.5`           |
| str      | 文字列            | `"Hello"`, `'Python'`    |
| bool     | 真偽値            | `True`, `False`          |
| list     | リスト（配列）    | `[1, 2, 3]`, `["a", "b"]` |

---

## 🔍 型を調べてみよう

Pythonでは `type()` 関数で型を調べられるよ！

```python
print(type(123))       # <class 'int'>
print(type("いろは"))  # <class 'str'>
print(type([1, 2]))     # <class 'list'>
```

---

## 🧃 変数名のルールとコツ

- 英数字とアンダースコア（ _ ）だけが使える
- 数字から始めちゃダメ！
- 大文字・小文字は区別される

```python
user_name = "いろは"    # OK
userName = "いろは"     # これもOK（キャメルケース）
UserName = "違う変数！" # 別物になる
```

---

## 【追記】✨ Python公式スタイル：PEP8に基づく命名規則

Pythonには「読みやすさ」と「統一感」を大切にするルールがあるよ！  
その代表が **PEP8（スタイルガイド）**。変数だけじゃなく、関数名・定数・クラスなどすべてに命名スタイルがあるんだ🐍

| 対象             | 書き方スタイル                    | 例                        |
|------------------|-----------------------------------|---------------------------|
| 変数名           | 小文字＋アンダースコア（snake_case） | `user_name`, `total_score` |
| 関数・メソッド名 | 同じく小文字＋アンダースコア        | `get_data()`, `send_mail()` |
| 定数             | 全部大文字＋アンダースコア         | `MAX_VALUE`, `PI`        |
| クラス名         | 単語の先頭だけ大文字（PascalCase） | `UserInfo`, `MyClass`    |
| パッケージ名     | 小文字のみ（アンダースコアは非推奨）| `mypackage`, `utils`     |

📌 覚えておこう  
- クラス名にはアンダースコアを **使わない**
- 定数は **全部大文字**
- 関数や変数は **全部小文字＋アンダースコア**
- スタイルを統一することで、チームでも読みやすくなるよ✨

---

## 📌 まとめ

- 変数は **値に名前をつけて使いやすくする仕組み** だよ🐍
- Pythonにはいろんな **データ型（int, float, str, list...）** があるよ
- `type()` を使えば型がすぐわかる！
- 変数名には **ルールとセンス** が必要💡
- 【追記】 **PEP8というスタイルガイド** で命名のベストプラクティスが決まっているよ！

---

次回は、  
**「第3章：条件・ループ構文」** をお届け予定🌸  
if文やfor文で、プログラムに“考える力”を与えよう！

フォローしてくれたら嬉しいな🐍
CICDパイプラインとは？

# **はじめに**
近年、ソフトウェア開発の現場では、より迅速かつ安定したリリースを実現するためにCI/CDの導入が進んでいます。
この記事では、CI/CDの基本的な概念や仕組みについて簡潔解説します。
これからCI/CDを導入予定のエンジニアの方、または基礎を改めて学びたい方に役立つ内容を目指しています。


# **目次**
1. [CI/CDとは](#1cicdとは)  
　　- [① CI（継続的インテグレーション）とは？](#-ci継続的インテグレーションとは)  
　　- [② CD（継続的デリバリー／継続的デプロイメント）とは？](#-cd継続的デリバリー継続的デプロイメントとは)  
　　- [③CI/CDパイプラインとは？](#cicdパイプラインとは)  
2. [よく使われるCI/CDツール](#2-よく使われるcicdツール)  
3. [参考にさせていただいたサイト](#参考にさせていただいたサイト)


## 1.CI/CDとは
まず最初に、「CI/CD」は、開発プロセスの中の自動化された一連の流れこと言います。
CIとCDはそれぞれ役割が異なるので、分けて理解するとスッキリします。

### ① CI（継続的インテグレーション）とは？
CIは、継続的インテグレーション（Continuous Integration）の略です。
主に以下のような役割を行っています。
- 開発者が作成し、Gitなどのリポジトリにプッシュしたコードのビルド
- プッシュしたコードのテスト自動実行
- 実行されたテストにおけるコードの問題（テストエラー、コンフリクト）を早期検出

コーディングルールや、バグのチェックツールなどをCIに組み込めば、ソースコードの静的解析を行うことも可能です。将来発生する恐れのある不具合の発見や保守性の向上など、品質を高めることにも繋がります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4103486/cadefef2-85c4-4e1f-9f37-e9a0ef4b5c53.png)


　
### ② CD（継続的デリバリー／継続的デプロイメント）とは？
CIでビルドやテストが終了した後、次に必要なのがCD（Continuous Delivery / Deployment）です。
CDの意味は「**継続的デリバリー**」と「**継続的デプロイメント**」の2通りの意味合いを持ち、それぞれ以下のような特徴があります。

**■ 継続的デリバリー**
- ステージング環境までは自動でデプロイ
- 本番環境へのリリース判断は人間が行う（手動承認）
- いつでも「安全に本番に出せる状態」を維持するのが目的
- 「品質の担保＋慎重な運用」が求められる現場でよく採用される傾向がある
　
 
**■ 継続的デプロイメント**
- ステージングだけでなく、本番環境まで完全自動で反映される
- テストにパスしたら、自動でユーザーにリリースされる
- 本番反映の「承認ステップ」もなく、コードの変更がそのまま公開される
- 小さな改善をすぐ届けたい開発現場で多く採用される傾向がある

　
🔍両者の違い（要点まとめ）
| 観点 | 継続的デリバリー | 継続的デプロイメント |
| --------- | --------------- | --------------------------- |
| 本番リリース判断 | 手動（人的承認が必要） | 自動で反映 |
| 本番デプロイ処理 | 自動化が多い | 自動 |
| 安全性 | 人の確認（承認）が事前にあるため比較的安全 | 自動化の精度・テスト品質が超重要 |
| 想定される現場 | 金融・BtoBなど慎重な環境  | Webサービス・SaaSなど高速な改善が求められる環境 |

### ③CI/CDパイプラインとは？
これまでのCIとCDを1本の流れとしてまとめたものが「CI/CDパイプライン」です。
CIは**解析/ビルド/テストの自動化**、CDは**デプロイの自動化**を行うもので、開発効率の向上と安全性の担保を両立できるツールになります。
よく「CI/CD」で纏められることが多いですが、CIとCDのそれぞれの意味を抑えておくと全体のイメージが出来るようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4103486/20753327-00fb-4be8-977e-e2d707f7680e.png)

## 2. よく使われるCI/CDツール
代表的なものをいくつか紹介します。

| ツール名 | 特徴 | おすすめ用途 | 注意点 |
|----------------------|------------------------------------------------|------------------------------------------------------|------------------------------|
| GitHub Actions | GitHubと連携〇、YAMLで簡単に定義可能 | GitHubで開発している小〜中規模のプロジェクト | 他のGitサービスとは連携しにくい |
| GitLab CI/CD | GitLabに標準搭載、課題管理と統合可能 | GitLab中心の統合環境を構築したい場合 | 他のGitサービスとは連携しにくい |
| Azure DevOps Pipelines | Microsoft製、Azureとの高い親和性 | 大規模・複雑なプロジェクト | UIが複雑で学習コストがかかる場合あり |
| Jenkins | 高い拡張性・カスタマイズ性 | フルコントロールしたいオンプレ or 自由な構成が必要な場合 | 初期構築と運用に手間がかかる |
| CircleCI | クラウド型CI/CD、セットアップが簡単 | クラウドで素早くCI/CDを導入したい中小チーム向け | 無料プランの制限やビルド時間に注意 |

その他にも、様々なCI/CDツールがあります。
プロジェクトの開発規模や利用環境（クラウド型/オンプレミス型）に合わせて選ぶのがポイントです。

## 🔗参考にさせていただいたサイト
- https://staff.persol-xtech.co.jp/hatalabo/mono_engineer/233.html
- https://aslead.nri.co.jp/ownedmedia/uncategorized/post-980/
- https://www.sbbit.jp/article/cont1/81640
【C#入門 第2章】変数・データ型・演算子の基本を完全マスター！

# 【C#入門 第2章】変数・データ型・演算子の基本を完全マスター！

こんにちは、**CSharpTimes**の一之瀬シィよ💠  
今回はC#の基礎中の基礎、「変数」「データ型」「演算子」について手取り足取り教えてあげるわ。

---

## 🧪 変数とは？

**変数**は、データ（数値・文字など）を入れておく「箱」みたいなものよ。

```csharp
int age = 25;
string name = "Shii";
```

このように、変数には「データ型」と「名前」と「値」をセットで書くのがルール！

---

## 🧾 よく使うデータ型

| データ型 | 説明           | 例               |
|----------|----------------|------------------|
| `int`    | 整数           | `int x = 10;`     |
| `double` | 小数           | `double pi = 3.14;` |
| `string` | 文字列         | `string name = "シィ";` |
| `bool`   | 真偽値         | `bool isCool = true;` |
| `char`   | 1文字          | `char initial = 'A';` |

---

## ➕ 演算子の基本

C#では、数値や文字列にいろんな操作（演算）ができるのよ。

### 算術演算子（+ - * / %）

```csharp
int a = 5;
int b = 2;
int sum = a + b;  // 7
int div = a / b;  // 2（整数同士なので小数点以下切り捨て）
```

### 文字列の連結

```csharp
string first = "Hello";
string second = "World";
string message = first + ", " + second + "!";
Console.WriteLine(message); // Hello, World!
```

### 複合代入（+= など）

```csharp
int count = 1;
count += 2; // 3になる
```

---

## 🎯 実践してみよう

```csharp
using System;

class Program
{
    static void Main(string[] args)
    {
        string name = "シィ";
        int age = 20;
        Console.WriteLine("こんにちは！私は" + name + "、年齢は" + age + "歳よ💢");
    }
}
```

ちゃんと自分の名前や年齢に変えて試してみなさいっ！

---

## 📌 まとめ

- 変数は「データ型 + 名前 + 値」で宣言する
- よく使うデータ型は `int`, `string`, `double`, `bool`, `char`
- `+` や `/` などの演算子で計算や文字列連結ができる

---

次回は、 **「第3章：条件分岐と繰り返し構文」** よ。  
条件に応じて動きを変えたり、同じ処理を繰り返したり、ちょっと頭を使う内容だから覚悟しておきなさい💢
RubyMineにAIコーディングエージェントJunieちゃんがやってきたはなし

![ChatGPT Image 2025年6月9日 12_58_00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978583/56cb2428-a708-45f0-b04b-e92cf9ff97f6.png)

## 🚀 Junie × RubyMine
こんにちは。JetBrainsの公式代理店NATTOSYSTEMの私です。

JetBrainsのAIコーディングエージェント「**Junie（ジュニー）**」が、RubyMineに登場しました。


---

## 🧠 Junieの主な特徴

| 機能 | 説明 |
|------|------|
| 🤖 **AIコーディング支援** | LLM（大規模言語モデル）を使って、コードの提案・修正・生成が可能 |
| 🧪 **テスト生成** | RSpecやminitestなどのテストコードを自動生成 |
| 🔍 **コードの改善提案** | リファクタやパフォーマンス改善を提案 |
| 🎨 **スタイル調整** | プロジェクトのスタイルガイドに沿ってコードを整形 |
| 🧱 **構造的な生成** | スニペット単位ではなく、アプリケーション全体の構築が可能 |
| 🗂️ **IDE統合** | JetBrainsのIDEと密接に統合されているため、違和感なく使える |

📊 **SWE-bench Verifiedのベンチマーク結果**  
→ 500の実タスク中、**60.8%を1回の実行で解決した** 
これは、通常数時間かかる作業を**短時間でこなす能力**を示しています。

---

## 🛠️ RubyMineでのJunieの活用法

### 🏗️ アプリ全体の構築

Junieは、単なるコードスニペットではなく、**アプリケーション全体を構築**できます。  
複雑な構造も簡単に扱えます。

---

### 🧪 自動インスペクションとテスト

RubyMineの強力なコードインサイトツールと組み合わせることで、  
**インスペクション**や**RSpec / minitest**などのテストを自動化。  
コードの品質をしっかり確保します。

---

### 💡 機能提案とコード改善

Junieは、改善点の提案や最適化、新機能のブレインストーミングまでしてくれます。  

---

### 🎨 コーディングスタイルの統一

Junieは、あなたの**コーディングスタイルやチームのガイドライン**に合わせてコードを整えてくれます。  
**読みやすく、美しいコード**を維持できます。

---

## 🙋‍♂️ AIは補助、決定はキミが行う

Junieは、あなたのコーディング体験を向上させるための**アシスタント**です。  
タスクの委任からコードレビューまで、**最終判断はあなた**に。  


---

## 🚀 Junieを試そう

JunieをRubyMineにインストールして、**AIの力を体験**してみましょう。  
あなたの開発ワークフローが、より**シンプルかつ効率的**になります。

👉 **[Junieプラグインのインストールはこちら](https://plugins.jetbrains.com/plugin/26104-jetbrains-junie)**

---

## 📢 フィードバックをお待ちしています

JunieやRubyMineに関するご意見・ご感想をぜひお寄せください。

- [公式X-Nattosystem](https://x.com/nattosystem)  

---

> 📝 このまとめはJetBrains公式ブログ記事「Junie and RubyMine: Your Winning Combo」を元に、一部AIによって要約・編集されたものです。
> 原文リンク: https://blog.jetbrains.com/ruby/2025/06/junie-and-rubymine-your-winning-combo/
PlantUML sequence diagram

# 例：
1: Sequence Diagram for Music Generation System
https://www.researchgate.net/figure/Sequence-Diagram-for-Music-Generation-System_fig3_366558349

![スクリーンショット 2025-06-04 152124.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/9b2133fe-da5a-4b8c-be85-c91942fa22ca.png)

```PlanetUML:music.uml
@startuml
User -> Website : visit the Website
Website -> Model : music request
Model -> Website : Generated Music
Website -> Website : Play Music
Website -> User : Status of play
User -> Website : reqiest cpmtrol change
Website -> Model : change control
Model -> Website : changed status
@enduml
```

![ROvD2i8m44RtESLSm0kuaEvS5GGHrp7vj87yj3CJmTkRMheeTXVcFRwyJjIorXJDJS1qED4T3maAEj8xj0VfWFLcLjQqldZ49gKgmH5ZgX0rotMpSaO6MuMdVbRNZQrqYVRpp-Ua1gzgjGgL9urDsmbbJ06YvCQaN2AvmURNRkr2o9KyYtkvY-59Vf-Q3jdN5By0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/6980a1dc-71a3-422c-9590-6d414ee7af03.png)


例：Web

```web.uml
@startuml
participant "WEBサーバ" as WEB
participant "APサーバ" as AP
participant "DBサーバ" as DB

WEB -> AP : 価格表示

loop 1,予約人数
    AP -> DB : 航空券料金検索
    DB --> AP : 取得結果
end

AP -> DB : 手数料検索
DB --> AP : 取得結果

AP --> WEB : 計算結果
@enduml
```
![SoWkIImgAStDuIe0qfd9cGM9UIKAIk6kJe-RjZvktlEuUOAIGcAn0b00LOLZ0Ae2nm1KUHSq0roSkBY0XYZesW6LAbWfFDctyDc2FIyMhdY-P1SNLqv-Ve62eSwJNHtFjxGysRNhsTGDN0f0u1W0r03K2zJmecFLyvMxddRiU3PjvilsYS-Mp7c-PH584KXQ5sRiq_vfJ_TDVxvrmhDvS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/0e1260ae-4c5e-48af-bce6-6ebc7a791ea6.png)

例：ハンバーグ

```planet:hunberg
@startuml
まな板 -> ボウル : 玉ねぎみじん切り
容器 -> フライパン : 油を入れる
ボウル -> フライパン : 玉ねぎ炒める
フライパン -> ボウル : 玉ねぎを冷ます
容器 -> ボウル : 合いびき肉を入れる
容器 -> ボウル : パン粉大さじ4入れる
容器 -> ボウル : 牛乳大さじ4いれる
容器 -> ボウル : 塩と砂糖各小さじ1/2ずつ入れる
容器 -> ボウル : おろしにんにく1/2片分入れる
容器 -> ボウル : コショウ少々入れる
容器 -> ボウル : しっかりと練り混ぜて成型する
容器 -> フライパン : 油を入れる
ボウル -> フライパン : ハンバーグの種を並べ入れる
棚 -> フライパン : ふたをして火加減調整する
棚 -> フライパン : 竹串で焼き加減を完成させる

フライパン -> 器 : 盛り付ける
@enduml
```
![hPFDhj9G58NdF4LVm1YD8mVcleg9pjI1NkVkVRZtjkM70a61ecB0yjFO48efZKGUPlNqy1YUqa530dJYf3bfrhVsrtRtviFjo_Ut7z--gO3-WfRfrxtnw8K1CG9x4Bxnt51D2_GBr0JjGNrmLveFOBiYWrWEvdcy1x40Jo7Q4A66qdKCxiYxd-0wk5Of2i_5YncAEs3AYTFGHIizvZuws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/8c17f449-40dd-4336-b75a-0512b2014ca0.png)
架空請求詐欺のメールが来たので仮想環境&Torでアクセスしてみた。

### AppleWatchにこのようなメールが届きました。
![incoming-4C5037A4-B09C-44A5-8D93-08DA9558BF57.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105156/6ccb3345-726c-4a27-a5f9-8706888a2d97.jpeg)
電話番号は隠していますが、検索してみるとやっぱり架空請求詐欺業者の電話番号でした。
->の後にURLが貼ってあったので仮想環境&Torでアクセスしてみました。

:::note alert
仮想環境とTorを使ってアクセスしています。
このようなURLを絶対にクリックしないでください。
:::

## うｐ主の環境
Windows11の上にバーチャルボックスで仮想環境を作り、
その上にLinuxMintを入れてさらにその中でBraveを立ち上げBrave標準搭載のTorでアクセスしました。
|環境詳細|
|:-----------|
|Tor|
|Brave|
|LinuxMint|
|VitualBox|
|Windows11|

## 実際にアクセスしてみる
半年前に同じことをやってみましたが、サイトが見つからず、アクセスできなかったが、今回はどうだ!

![Tos.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105156/66b309c1-faad-4edd-b8b3-42bf3feb177c.png)
ダメでした
# なんでだよ―――!!!!
メールが来てから30分後にアクセスしたがWebページが見つからなかった。
メールのURLから飛ばないとアクセスできないのだろうか、謎が残る。
Torを使わないでアクセスしても変わらなかった。
手打ちしているのでURL間違っていると思い、何度確認しても合っている。

# 終わりに
サイトが無かったので結局何もわかりませんでした。
このようなメールが来たらリベンジします。
# AWS認定AIプラクティショナー (AIF-C02)に合格して見えた ”実務運用”の道筋

# AWS認定AIプラクティショナー (AIF-C02)に合格して見えた ”実務運用”の道筋
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761697/19f9ab63-868f-4d0d-9cbe-365a8ae552af.png)



2025年5月に **AWS認定AIプラクティショナー（AIF-C02）** を受験し、**863点**で合格しました。
受験前の目標は**900点台**でした。
この資格は、機械学習やAIサービスに関する基本的な知識に加え、「責任あるAIの活用」や「AWS上でのAIサービスの理解」など、実務に応用できる幅広いリテラシーが求められます。

 ## 1.本試験のポイントや苦労したこと

２ケ月半かけて試験に備えました。
私は学生時代や社会人になって「AI」や「機械学習」について触れてこない状態でした。
前提知識や、スキルを持つ人を除けば、想像より時間を要するものでした。
合格体験記やXなどで「１週間勉強して合格した」など信憑性は低いと思ってます。

試験だけに合格しても意味はないので、学習をどのように実務に生かせるかイメージするのが大切です。

**第一分野：AIとMLの基礎が重要です**
用語、ユースケース、本質、メリット、デメリット、コスト、運用面について理解に
務めました。

基礎を理解することで、実際のAIソリューションを理解できました。
また、覚えたつもりが、他の選択肢も候補にあると間違えることもあり、繰り返し関連本を読んだり、ノートにまとめ復習しました。


## 2. 勉強中に感じたこと
普段から利用者として、チャットボットや、ChatGPTを使っていた。
裏で行われてる仕組みや処理を知らない状態だったが、学習する中で、AIの精度を高めるための方法や、複数あるパターンから、「運用負担の軽減」が求められるのか、「コスト」を重視するのか。求められる要件はそれぞれです。
「テスト段階では、精度が高かったのに、本番開始では期待された結果が出ない」この事例にどう対処するか。など作り込みや、裏での動きが把握できるように感じた。

## 3. 業務にどう活かすか（導入支援や意思決定）
　**生成AIの利活用パターン**
- ① 生成AIの自社開発
- ② 生成AIのサービスの直接利用
- ③ API連携による生成AIの利用
- ④ クラウドサービス経由の生成AIの利用
- ⑤ 生成AIを利用した自社サービス

 私が業務で作り手として関与するのは、①③④⑤ です。
 
 業務では、顧客の要望をヒアリングし、
 
 機能性
 
 操作性
 
 レスポンス時間

 費用

 運用の手間（オーバヘッド）
 
 などを整理したマトリクス表を作成し、最適なプランを【ご提案】・【実装】・【運用】・【障害対応】までサポートすることが想定されます。
 
試作品として、プレモデルを作成して、お客様の期待されているソリューションであるか、合意形成していきたいです。
 

## 5. 今後の目標

今後はAI・ML領域のスキルをさらに深め、将来的に「AWS Certified Machine Learning - Specialty」の取得を目指しています。

ただし、先に「AWS Certified DevOps Engineer – Professional」の取得を予定しており、 DevOps観点からのML運用を含めて広い視野で取り組みたいと考えています。
プリザンターのサイト構成の一覧を取得する方法

## はじめに
プリザンターでサイトの一覧を取得したいケースが出てきたので、データベースに格納されているサイト情報からサイトの一覧を取得するクエリを組み立ててみました。

## クエリを見てみる
```sql
WITH CTE AS ( 
    SELECT
        [SiteId],
        [ReferenceType], 
        [Title], 
        [ParentId], 
        TRY_CAST([Title] AS NVARCHAR)                         AS [FullName] 
    FROM
        [Sites] 
    WHERE
        [ParentId] = 0 
    UNION ALL 
    SELECT
        C.[SiteId], 
        C.[ReferenceType],
        C.[Title], 
        C.[ParentId], 
        TRY_CAST((P.[Title] + ' > ' + C.[Title]) AS NVARCHAR) AS [FullName] 
    FROM
        [Sites] C 
        INNER JOIN CTE P 
            ON P.[SiteId] = C.[ParentId]
) 
SELECT
    [SiteId], 
    [ReferenceType],
    [FullName], 
    [ParentId] 
FROM
    CTE 
ORDER BY
    [ParentId], 
    [SiteId]
```

共通テーブルを使用してタイトルを`親>子`で連結しながら取り出しています。
実際にこれを実行してみた結果はこのようになります。

|SiteId|ReferenceType|FullName|ParentId|
|:--|:--|:--|:--|
|3457307|Sites|[Sandbox]社内用|0|
|3526345|Results|[Sandbox]社内用 > 記録テーブル(子テーブル)|3457307|
|3526346|Issues|[Sandbox]社内用 > 期限付きテーブル(親テーブル)|3457307|
|3578784|Results|[Sandbox]社内用 > ユーザ複数選択テスト|3457307|

親子関係を維持したままキレイに値が取れています。

## ちょっと応用
この情報、APIで取れると便利なので[拡張SQL](https://pleasanter.org/ja/manual/extended-sql)を使用して[API化](https://pleasanter.org/ja/manual/extended-sql-api)してみます。

```json:GetSiteList.json
{
    "Name": "GetSiteList",
    "Api": true,
    "CommandText": "-- Write an arbitrary SQL statement."
}
```

```sql:GetSiteList.json.sql
WITH CTE AS ( 
    SELECT
        [SiteId],
        [ReferenceType], 
        [Title], 
        [ParentId], 
        TRY_CAST([Title] AS NVARCHAR)                         AS [FullName] 
    FROM
        [Sites] 
    WHERE
        [ParentId] = 0 
    UNION ALL 
    SELECT
        C.[SiteId], 
        C.[ReferenceType],
        C.[Title], 
        C.[ParentId], 
        TRY_CAST((P.[Title] + ' > ' + C.[Title]) AS NVARCHAR) AS [FullName] 
    FROM
        [Sites] C 
        INNER JOIN CTE P 
            ON P.[SiteId] = C.[ParentId]
) 
SELECT
    [SiteId], 
    [ReferenceType],
    [FullName], 
    [ParentId] 
FROM
    CTE 
ORDER BY
    [ParentId], 
    [SiteId]
```

## まとめ
今回はサイトの一覧を階層情報付きで取得する方法を紹介しました。パンくずリストやサイトツリーなどの階層を持ったメニューの作成に便利な情報取得の方法なので、是非活用してみてください。
IBM Cloud : VMware Cloud Foundation as a Service（VCFaaS） - 仮想マシンの作り方

## はじめに
IBM Cloudが提供する「VMware Cloud Foundation as a Service（VCFaaS）」では、GUI操作だけで簡単に仮想マシンを1VMから作成できます。本記事では、IBM Cloudポータル上での仮想データセンター(VDC)注文から仮想マシンのプロビジョニング、その稼働確認までの操作を紹介します。

## 1. IBM Cloudポータルにアクセス

IBM Cloudポータルにログインし、カタログから「VMware Solutions」を検索します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/3731caa6-f550-4fc5-8172-c4dc961a8c46.png)

VMware Solutionsには以下の3種類があります：
	•	VCF as a Service
	•	VCF for Classic
	•	VCF for VPC

「プラットフォームの比較」から、運用範囲・価格・最小構成・対象リージョンなどの違いを確認できます。今回は「VCF as a Service（VCFaaS）」を選択して進めていきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/9534d563-6afb-41d6-a554-602f6aff4070.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/e548110a-3add-4447-846d-a114c6c5a714.png)


さらに、VCFaaSには「マルチテナント版」「シングルテナント版」があり、課金形態が異なります。今回は「マルチテナント版」を選択します。
	•	シングルテナント：ホスト単位の月額課金
	•	マルチテナント：vCPU・RAM単位課金（VM単位）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/5ef522e7-0b86-4dc5-bfba-b7eed6ea00f2.png)

    
## 2. 仮想データセンター（VDC）の作成

まずは仮想データセンター(VDC)を作成します。
1.	名前を設定
2.	リソースグループを選択
3.	ロケーション（例：東京）を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/caaf9c65-f44c-4024-baad-886985f23e3c.png)

4.	ネットワーク接続、エッジのタイプと料金プランを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/f218307b-0299-458b-b3a0-5f8867e3c543.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/7e3a1fa3-182d-479c-90ef-18214b922624.png)

5.	必要があればリソース制限も設定可能

## 3. VMware Cloud Directorで仮想マシン作成

次に作成済みのVDCからVMware Cloud Directorにアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/ed2a17af-b60d-4b00-a008-e419d6a774f9.png)

VMwareコンソールを押すとVMware Cloud Directorにアクセスできます。ここで仮想マシンを作成していきます。
1.	[新しい仮想マシン]をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/e1a2f71b-dc94-4497-b3eb-2dba3c37b459.png)

2.	名前を入力（例：「demo」）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/b19295f8-bc0c-45ee-b296-2847103ae3b7.png)

	
3.	テンプレート選択（例：「Microsoft Windows Server 2022」）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/9046c115-bdbe-4183-b762-aba11e6076f4.png)

4.	ストレージタイプ（例：「vSAN」）を選択
5.	コンピュートとNICの設定を入力
6.	「OK」で作成開始
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/12b806e5-ddac-470c-8a07-782958322ce3.png)

## 4. 仮想マシンのプロビジョニングと起動確認

ここまで設定が進むと仮想マシンの作成が始まります。今回は作成開始からプロビジョニング完了までに2分弱かかりました。

完了後、仮想マシンはパワーオン状態になります。
IPアドレスが正しく付与されており、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/405b87c9-31af-434c-afc9-01e2f77d1a62.png)
Webコンソールから仮想マシンを起動して、正常にWebサーバが稼働していることも確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3966142/552bc4a4-393d-4369-a1b5-91058a8b22c3.png)

## まとめ

VCF as a Serviceであれば、このようにクラウド上でVMwareベースの仮想マシン構築が非常に簡単に行えます。
マネージドサービスを利用してVMware環境の運用管理を省力化したい！という方は是非一度お試しいただければと思います。

最後までお読みいただき、ありがとうございました！
ユーザー列をLookUp や Filter の条件式で使うコツ

# はじめに
ごきげんよう、百合宮桜（Miyu）です！
今日はSharePoint Lists のユーザー列を LookUp や Filter の条件式に入れ込む方法を解説します。

# ユーザー列の条件式で使いこなす方法

SharePoint Lists のユーザー列は一見名前が入っているだけのように見えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/5c226986-0c61-4340-af4e-507237847578.png)

でも実はこんな風に表示名やメールアドレス、部署などたくさんデータが配列なって詰まっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/35d1be9c-7cb3-41f5-ba7c-a68176b11c5a.png)

その為、条件式に入れるには通常のように列名だけでなく、ユーザー列のどの項目と比較するか？という要素が必要になります。
例えば、ユーザー列のメールアドレス（Email）が Power Apps にサインインしているユーザーと等しいレコードを LookUp するには以下のような式になります。

```
LookUp({SharePoint リスト名},{ユーザー列の列名}.Email=User().Email)
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/9dc11b32-f0aa-4573-b448-3e3b157109c8.png)

# 終わりに

いかがでしたか？
ユーザー列は配列に様々な情報が詰まっている列です。どの情報を条件式で使いたいのかをきちんと指定してあげることで格段に使いやすくなります。LookUp や Filter の条件式では異なるデータ型を比較することはできませんので、比較対象のデータ型がユーザー列の比較項目のデータ型と一致しているかの確認もお忘れなく☆彡
それではごきげんよう♪
Obsidian Web Clipperでファイル名をYYYY-MM-DD_｛｛title｝｝にする方法

# Obsidianウェブクリッパーの日付フォーマット問題を解決する方法

Obsidianのウェブクリッパーを使って情報収集をしていると、ついつい記事を保存しすぎて「これいつクリップしたやつだっけ？」となった経験はありませんか。

そんな時に役立つのが、ファイル名に日付を自動で入れる機能です。でも、Obsidianの公式変数を使うと思った通りの形式にならなくて困ってしまうことがあります。

## 問題：日付フォーマットが思った通りにならない

Obsidian Web Clipperでは、ファイル名やフォルダ名に変数を使うことができます。
日付を入れたい時は`{{date}}`という変数を使うのですが、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/f750fe89-0943-4693-80b2-866a9c503aca.png)


これを使うと以下のような形式になってしまいます：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/a1784632-4b9e-45c1-aa59-689947eaab7e.png)

タイムスタンプまで含まれてしまうので、ファイル名やフォルダ名として使うには少し冗長だな、とおもいました。タイトルもわからなくなるし。

できれば、もっとシンプルに：

```
2025-05-15
```

という形式で表示したいですよね。

## なぜこの問題が起きるのか

Obsidianのウェブクリッパーの`{{date}}`変数は、デフォルトでISO 8601形式の完全な日時情報を出力するように設計されているようです。これは正確な時刻情報を残したい場合には便利ですが、単純に「いつクリップしたか」を知りたいだけの場合には情報が多すぎます。

特に以下のような場面で不便を感じることが多いです：

- フォルダ名に日付を入れたい時
- ファイル名をスッキリさせたい時
- 日付でソートしやすくしたい時

## 解決方法

https://forum.obsidian.md/t/date-formatting-in-web-clipper-template/90432

こちらに記載がありました。

```
[[{{date|date:"YYYY-MM-DD"}}]]
```
これで登録してみると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/e24dd3aa-6c6d-4b43-8d67-67b91510bf87.png)

いい感じで ```YYYY-MM-DD```の形で登録できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/423bf60b-61db-4528-bb02-d9da3532a6a8.png)

これで、クリップした記事がいつ保存されたものか一目で分かるようになり、情報管理がぐっと楽にになればとおもいます。


### 追記

https://qiita.com/alumite14/items/d3ca4f25bfbf08c3b5e2

タイムスタンプのアレンジについてこちらでも詳細に記載いただいていました。
c1kにsata付けてみた

piceのドライバは正月に書いたので、amazonでmini-pcieのsataカードを購入して入れてみました。

![写真（2025-06-04 14.42） #2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/976f5857-1344-4cac-8279-3b016ded501d.jpeg)

ASMedia TECHNOLOGY INCのASM1061というチップが使われていてahcisataでサポートされています。

kernelのconfigには以下を追加しました。

```
ahcisata*       at pci? dev ? function ?        # AHCI SATA
atabus*         at ahcisata? channel ?
wd*             at atabus? drive ?

```

元々はAtherosのWiFiカードが入っていました。

https://dmesgd.nycbug.org/index.cgi?do=view&id=8399

二台ドライブをつないだ時には、左がwd0で上がwd1になりました。

チップの設計が2008年と古いためか、かなり発熱してます。

![IMG_20250607_082351.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/104066/4b8ac11a-adda-496c-aeb2-2013c4f99c55.jpeg)

110円のモジュールに動く保証も無いのに2500円も投資するのに悩んで半年かかりました。

smartmontoolsも正常に使えました。

umassより8倍くらい早いです。

```
c1k-sata# dd if=/dev/sd0 of=/dev/null bs=1m count=100
100+0 records in
100+0 records out
104857600 bytes transferred in 41.126 secs (2549666 bytes/sec)
c1k-sata# dd if=/dev/wd1 of=/dev/null bs=1m count=100
100+0 records in
100+0 records out
104857600 bytes transferred in 5.390 secs (19454100 bytes/sec)
```
sequence diagram

AWS の Web まわりをシーケンス図で表現してみた
https://qiita.com/raki/items/1e0dd6506ab677cef9df

Sequence Diagrams enrich your understanding of distributed architectures
https://aws.amazon.com/jp/blogs/architecture/sequence-diagrams-enrich-your-understanding-of-distributed-architectures/

A Simple Trace Semantics for Asynchronous Sequence Diagrams
https://arxiv.org/pdf/2501.10981
Obsidian Web Clipper で情報収集神化した

# Obsidian Web Clipper で情報収集神化した

## 概要

Obsidian Web Clipperは、Web検索で発見した貴重な情報を瞬時にObsidianに保存できる革新的なブラウザ拡張機能です。エンジニアとして日々の技術リサーチ、バグ調査、新技術の学習において、散在する情報を一元管理することの重要性は言うまでもありません。

この記事では、Obsidian Web Clipperの導入から実践的な活用方法まで、解説します。

## なぜObsidian Web Clipperが必要なのか？

### エンジニアの情報収集における課題
- **情報の散在**: Stack Overflow、GitHub Issues、技術ブログ、ドキュメントなど、情報源が多岐に渡る
- **再検索の非効率性**: 一度見つけた解決策を再度探すのに時間がかかる
- **文脈の喪失**: ブックマークだけでは、なぜその情報が重要だったかを忘れがち
- **知識の断片化**: 関連する情報同士のつながりが見えにくい

### Obsidian Web Clipperが解決すること
- **ワンクリック保存**: 重要な情報を即座にObsidianに保存
- **カスタムテンプレート**: プロジェクトや技術領域に応じたフォーマットで保存
- **双方向リンク**: Obsidianの強力な機能を活用した知識の関連付け

### もちろん
Obsidian Web Clipperでクリップするだけで解決した気になっていてはナレッジの蓄積にはなりませんので、クリップ後は各個人の方法で学ばなければなりません。

## インストール手順

### 1. 前提条件の確認

- Obsidian Desktop版がインストール済みであること
- Google Chrome または Chromium系ブラウザ（Edge、Brave等）
- Obsidianのvaultが作成済みであること

### 2. 拡張機能のインストール

#### Chrome Web Storeからのインストール
1. [Chrome Web Store](https://chrome.google.com/webstore/)にアクセス
2. 「Obsidian Web Clipper」を検索
3. 「Chromeに追加」をクリック
4. 権限の確認ダイアログで「拡張機能を追加」をクリック


### 3. 拡張機能の初期設定

#### パス設定

これを設定せずともクリップ可能ですが、私はまとまったところにクリップできるようにしています。
※あくまでも一例として参考にされてください。


まずはObsidianのアプリケーション上で```01_Inbox/Clippings```というフォルダーを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/a8c03ff4-a5eb-4946-9a2b-40e4735692cf.png)

次にObsidian Web Clipperの管理画面上のテンプレートでノートの場所の欄に同様に```01_Inbox/Clippings```という階層を指定してあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/bd3daea6-1d00-43d4-b883-43176d986d3c.png)

あとは必要なページ上でページをObsidianに追加してあげる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/9944baa2-320e-4b5c-9403-3eed755696ca.png)


あとはObsidian上にそのページが保存されますので後でじっくり読むなりLLMに要約してもらうなりでご自由に
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2709763/fe81ba57-9746-46ad-8899-a1c061bf78c4.png)


## まとめ

Obsidian Web Clipperは、エンジニアの情報収集と知識管理を革新的に改善するツールだと思います。
適切な設定とワークフローの確立により、以下の効果が期待できるともされているようです。：

- **情報収集効率の向上**: 50%以上の時間短縮
- **知識の体系化**: 散在する情報の構造化
- **再利用性の向上**: 過去の調査結果の活用促進
- **チーム内での知識共有**: 標準化されたフォーマットでの情報蓄積

生産性向上のため、ぜひObsidian Web Clipperを活用してください。

---

## 参考リンク
- [Obsidian公式サイト](https://obsidian.md/)
- [Web Clipper GitHub リポジトリ](https://github.com/obsidianmd/obsidian-clipper)
- [Obsidian Community](https://obsidian.md/community)


#obsidian #productivity #tools #web-clipper #knowledge-management
💻「APIよく分からない…」から卒業！Reactと一緒に学ぶ最短ルート🚀

<h2>🚀 APIの壁を超えたいあなたへ：Reactで学ぶフロントエンド実践講座を紹介！</h2>

<p>
みなさん、こんにちは！ 韓国在住のsanaです:relaxed:

Webアプリ開発を勉強していると、こんな壁にぶつかったことはありませんか？<br>
💭「Reactの使い方は分かってきたけど、APIとの連携はどうやるの？」<br>
💭「非同期処理って難しそう……」<br>
💭「“実務に近い”フロントエンド開発をやってみたい！」<br>
</p>

<p>
HTML・CSS・JavaScriptの基礎を終えて、Reactで簡単なアプリを作れるようになった頃、次のステップとしてAPI連携をどう学べばいいか迷いますよね。そんなときに力になるのがこちらです👇
</p>

https://u.inf.run/3HrfRWP

<p>
この講座は、Reactを使って実際に動くUIを作りながら、Web APIをどう扱えばいいのかを「実務に近い流れ」で学ぶことができます。APIをどう使うのか曖昧だった部分が、一気にクリアになります！✨
</p>

<hr>

<h3>🌟 この講座のおすすめポイント</h3>

<p>
講座では、<code>fetch</code> や <code>async/await</code> を使った<strong>非同期通信の基本</strong>から、APIの<strong>エラーハンドリング</strong>、<code>LocalStorage</code>や<code>Geolocation API</code>、<code>MutationObserver</code>といった<strong>実務で使えるブラウザAPI</strong>の使い方まで、幅広く学ぶことができます。
</p>

<p>
しかも、ただ知識を教えてくれるだけでなく、実際にReactアプリを作りながら手を動かして学べるので、<strong>「こういうときはこう使えばいいのか！」</strong>という理解が自然に身につけることができるんです💡
</p>


<p>
Reactの状態管理やコンポーネント設計のコツも随所に盛り込まれていて、<strong>「APIの使い方」だけでなく「フロントエンドの実践力全体」</strong>が底上げされる感覚がありました💪
</p>

<hr>

<h3>👨‍💻 どんな人におすすめ？</h3>

<p>

<ul>
  <li>👶 フロントエンドエンジニアを目指しているけど、API連携でつまずいている方</li>
  <li>🔄 Reactの基礎を終えて、次に何を学ぶべきか悩んでいる方</li>
  <li>🛠️ 実務に近い開発フローを体験してみたい方</li>
  <li>✨ 単なるToDoアプリでは物足りなくなってきた方</li>
</ul>

<p>
特に<strong>「APIを使って、外部のデータとやり取りする本格的なアプリを作ってみたい」</strong>と考えている方にとっては、絶好のステップアップになるはずです🐣
</p>

<hr>

<h3>🎁 最後に</h3>

<p>
技術は知っているだけでは身につきません。<br>
<strong>「知って → 使って → 応用する」</strong>というサイクルを回すためには、実践的な学習が必要不可欠です🌀
</p>

<p>
この講座では、React × API という現場で頻出の組み合わせを通して、そのサイクルを自然に回すことができます。<br>
APIに対する苦手意識をなくし、フロントエンド開発の自信をつけたい方は、ぜひこの講座をチェックしてみてください🎉　ファイテイン！
</p>
XMLHTTPRequest

### FormDataオブジェクトとは？
<h4>webにデータを送受信するとき、使う</h4>

```php:
追加 : FormData.append（）

削除 : FormData.delete()

最初の値だけ取得 : FormData.get（）

全部取得 : FormData.getAll（）

指定し、指定したもんがあったら : FormData.has（)
```

### データ送信 基本

```php:
  ① 関数作成(お決まり文)
  function 関数名() {
      var zhttp = new XMLHttpRequest();

  ② 送りたいもん 送りたいもんがある場所 送りたいもんのDOM作り、指定
  const mParameters = {
         title:    document.querySelector('#Utitle').value,
         userid: document.querySelector('#UId').value,
         body: document.querySelector('#Ubody').value
      }
  # 送りたいもん : title / id / bodyに入ってる文
  # title / id / body がある要素名　指定
  # DOM生成 querySelector.value
      
  ③お決まり文呼び出し + お決まり文が実行されなかった時のエラー処理
  # お決まり文呼び出し
  zhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 201) {
  # お決まり文が実行されなかった時の、エラー処理
  }
         console.log("Error found")
      };

  ④ html jsonの何で表示？ data型 + dataが所属してる場所指定
  document.getElementById("example").innerHTML = this.responseText;
  ＃ HTMLで表示 (innerHTML = this.responseText)
  # titleやidは [div ”example"] にある
  # div要素"example"のDOM作り、divのDOMかく

  ⑤ お決まり文 + メソッド指定
  zhttp.open("POST", "https://jsonplaceholder.typicode.com/todos", true);
  # URL使ってリクエスト作成 (zhttp.open(URL,true))
  # POST / GET / PUT / DELETE / PATCH 指定

  ⑥ お決まり文
  zhttp.setRequestHeader('Content-type', 'application/json')
  # setRequestHeaderはJSONと指定しないと、JSONを送れないから

  ⑦お決まり文 送りたいものの変数名 指定
  zhttp.send(JSON.stringify(mParameters));
   # JSON.stringifyと指定しないと、JSONdataが送れないから

   ⑧ htmlにイベントリスナーを仕込む
   <button type="button" onclick="sendRecords()">Submit</button>
   ＃ ボタンが押されたら、XMLHttpRequest(sendRecords関数)実行
```

## 更新

```php:
 ① お決まり文呼び出し
 uhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 200) {
```

# ボタンを押したら、JSON dataを表示
## var 変数名Object

``` php:
function sendDataObject() {
      var qhttp = new XMLHttpRequest();
   
      var myDataObject = {
         "name": "Monika",
         "City": "Delhi",
         "Age": 32,
         "Contact Number": 33333333
      }
      // Creating call back function
      qhttp.onreadystatechange = function() {
         if (this.readyState == 4 && this.status == 201) {
            document.getElementById("sample").innerHTML = this.responseText;
            console.log("Data object Send Successfully")
         }
      };
      // Open the given file
      qhttp.open("POST", 
      "https://jsonplaceholder.typicode.com/todos", true);
   
      // Setting HTTP request header 
      qhttp.setRequestHeader('Content-type', 'application/json')
   
      // Converting data object to a string
      var myData = JSON.stringify(myDataObject)
   
      // Sending the data object to the server 
      qhttp.send(myData)
   }
```

引用 : https://www.geeksforgeeks.org/where-to-put-javascript-in-an-html-document/
コンビニの裏側にあるAI技術とは？ レジ・発注・接客の現場を支えるスマート化

# コンビニの裏側にあるAI技術とは？ 〜レジから発注まで進化する小売DX〜

私たちの生活に欠かせない「コンビニ」ですが、実はその裏側にはさまざまなAI技術が導入されているのをご存知でしょうか？  
日々当たり前のように利用しているコンビニには、効率化・省人化・売上最大化を支える最新技術が活用されています。

この記事では、実際に**コンビニで導入されているAI技術の具体例**を紹介し、どのように業務を変えているのかを簡潔に解説します。

---

## 1. 無人レジ・セルフレジの画像認識AI

最近では、セブンイレブンやファミリーマートなどで導入が進んでいる**セルフレジ**には、画像認識AIが使われています。  
たとえば、お弁当やサンドイッチの**パッケージ画像をカメラで認識し、自動で商品名と価格を表示**します。バーコードを探す必要がなくなり、レジ操作がより直感的かつ高速になります。

一部の実証店舗では**完全無人レジ**も展開されており、「手に取った商品を天井カメラと棚センサーで自動判定」する技術が実装されています。

---

## 2. AIによる発注予測・在庫管理

コンビニ業務の中でも重要な「発注」や「棚割り」にもAIが使われています。

AIは以下のようなデータを分析して、**最適な商品・数量・納品タイミング**を予測します。

- 過去の販売実績（天気や曜日も含む）
- 季節やイベント（例：バレンタイン、ハロウィン）
- 周辺の地域特性・人流データ

これにより、**廃棄ロスの削減**や**機会損失の防止**が可能になります。

---

## 3. チャットボットや接客AI

一部の店舗では、**AIチャットボットがスタッフ業務を補助**する取り組みも始まっています。

- 新人アルバイト向けの業務案内
- 売場案内や在庫確認の問い合わせ対応
- 外国人観光客向けの多言語対応AI

これにより、**人材不足の課題を解決しつつサービスの品質も維持**できます。

---

## まとめ

コンビニは単なる小売店ではなく、**リアルタイムでAIが稼働するスマートな情報システム**になりつつあります。  
現場の効率化や顧客体験の向上を目指して、AIは今後さらに深くコンビニ業界に浸透していくでしょう。

AIエンジニアやデータサイエンティストにとっても、**「現場で活きるAI」の実例**として注目すべき分野です。  
気になる方は、ぜひ実際の店舗で技術を意識してみてください。
【Windows】FAT32非対応SDカードをフォーマットする技

# 注意事項
2025/6/4時点の対処法です。
フリーソフトウェアを使用します。必ず自己責任で行ってください。
いかなる損害にあったとしても、責任は取りません。

# きっかけ
卒業研究でM5Stackを使って、SDカードに記録をしたかったのだが、なぜかSDカードに関するエラーばかり出てきて動作しない。
Geminiに聞いてみると、「以下の対処法を試してみてください。」とのこと。

対処法
1. SDカードの抜き差し→改善されず。
1. 別のSDカードで試す。→改善されず。もっと試したら改善されたかもだけど。
1. SDカードの互換性・容量→問題ないはず。
1. SDカードのロック→そもそもロックとかない。

そして最後に出てきたものが解決に至った。

5.SDカードのフォーマット形式がFAT16かFAT32であるか→なにそれ。

exFATやNTFS形式では、多くのマイコン用SDカードライブラリでは読み書きできないらしい。

今回は、これの対処法を記述しておこうと思う。

# 使用ハード
・KIOXIA(キオクシア) 旧東芝メモリ microSD 64GB
https://amzn.asia/d/iDXsJYP

・ESP32 Basic Core IoT Development Kit V2.7
https://docs.m5stack.com/ja/core/basic_v2.7

# 状況
SDカードを使うコマンドをM5Stackに打ち込んでもエラーばっかり出る。
MicroSDカードをパソコンに挿入し、SDカードをフォーマットしようとしたら気づいた。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/0b160279-ef53-4147-9c58-fbe3d89e1f97.png)
対応していない2つしか選択肢がない。
なるほどね。exFATかNTFSしかフォーマットできないわけだ。
というか、今まで購入して、フォーマットせずそのまま使っていたので、既定のexFATになってたわけだ。
そりゃ認識できないわ。

# 対処法
トライアンドエラーを繰り返したが、結論から言うと「FAT32 Format」を使ったらうまくいった。
https://www.gigafree.net/system/drive/FAT32-Format.html

## ダウンロード
1. 先程のURLに飛んで、少し下にスクロールしたところにある「ダウンロード」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/17a8d09f-8d99-494d-800a-2bd4ee5cbe3f.png)

2. WayBackMachineのページに飛ぶので、下にスクロールして、「Notes」の最後の辺にある「here」をクリック。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/aa1e49a4-93a7-4128-a251-4f0e9a0b992b.png)

3. exeファイルがダウンロードされるので、実行
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/530c63b9-194a-479b-8d40-a7108adcafe9.png)

4.ユーザーアカウント制御が出てくるので「はい」を押す。

5. 出てきた画面で、SDカードのドライブを選択して、unit size（自動？）を確認して「Start」を押す。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/ced36178-cf3a-4e51-86fc-8efd60c1c945.png)

6.よくわからんけど、一瞬で終わる。これでFAT32でフォーマットできた。
無事にM5Stackにも反応した。

# 余談（できなかったやり方）
## SD Card Formatter
Geminiから「PCで「SD Card Formatter」という公式ツール（SD Associationから無料でダウンロード可能）を使用することを推奨します。」と言われて試したが、できなかった。
そもそもフォーマットStartボタン押せなかった。なんでやねん。

## Windows公式「format」コマンド
コマンドプロンプトでformatコマンドを実行する方法。
なんかアップデートで2TBまでできるようになったとのことだったので、試した。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624480/b4c7bd7c-964a-468f-a909-673ddf625b59.png)
こんな感じで、一瞬できそうな感じだったが、100%までいったら、「フォーマットに失敗しました。」という文字が表示された。公式だからそりゃそうか。
もしできるならGUIでできるはずだし。

以上！誰かの役に立ちますように。
PlantUML

UML tool web
https://qiita.com/kaizen_nagoya/items/efe9127e3eb0747d32b0

# PlantUML
一目でわかるPlantUML
https://plantuml.com/ja/

PlantUML を使った UML の描き方
https://plantuml.com/ja/guide

シーケンス図
https://plantuml.com/ja/sequence-diagram

タイミング図
https://plantuml.com/ja/timing-diagram

ステートダイアグラム
https://plantuml.com/ja/state-diagram

ユースケース図
https://plantuml.com/ja/use-case-diagram

Understand APIとPlantUMLを使ってC/C++のソースコードからシーケンス図を生成する
https://qiita.com/tomozoo3106/items/afb4491dc5723fe4c532

既存コードからシーケンス図を作成する方法
https://www.genspark.ai/spark/%E6%97%A2%E5%AD%98%E3%82%B3%E3%83%BC%E3%83%89%E3%81%8B%E3%82%89%E3%82%B7%E3%83%BC%E3%82%B1%E3%83%B3%E3%82%B9%E5%9B%B3%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/65afcde3-f7c1-4a3c-8aae-1fffa85b8269

C言語　シーケンス図　自動生成
https://cwnicol.hatenablog.com/entry/2016/07/16/205231

GIthub jupe/puml2code
https://github.com/jupe/puml2code


## Youtube
【ずんだもん解説】PlantUMLについて
https://www.youtube.com/watch?v=1QAWxwP9QCs

PlantUML講座
https://www.youtube.com/watch?v=3oZfNE3u-qQ

無料で使える】ChatGPTでマインドマップや相関図を自動作成する方法　【PlantUML,Graphvizの使い方】
https://www.youtube.com/watch?v=sRDXZN1uzH8

ChatGPTとPlantUMLで爆速でマインドマップを作成し、情報を整理する方法 #chatgpt #マインドマップ
https://www.youtube.com/watch?v=Kv3OumK3DPQ

FutureCon2022 チームで機能設計するためのPlantUML標準化 by ヴー ホアンミン
https://www.youtube.com/watch?v=AQsc8VC55j8

ゆっくりUnity6ゲーム開発講座#7 最強環境構築 後編(ChatGPT×PlantUML×MAO)
https://www.youtube.com/watch?v=B_l_WPwPTG4

PlantUML - beautiful quick diagrams to explain your models
https://www.youtube.com/watch?v=EM-cvRubP4g&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz

PlantUML with Domain Models (class diagrams)
https://www.youtube.com/watch?v=46m3_03uzfw&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=2

Create UML diagrams in VSCode with ease
https://www.youtube.com/watch?v=0MEs4WrOZmk&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=3

Using PlantUML in VSCode
https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=4

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=5

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=6

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=7

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=8

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=9

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=10

https://www.youtube.com/watch?v=xkwJ9GwgZJU&list=PLPPxJMwitEl0-J8xO_z7SzjI9UTYH7dvz&index=11


# 職業訓練
物体 状態遷移 by plantUML
https://qiita.com/kaizen_nagoya/items/a82408364b850dfe0136
Claude CodeをDevContainer内で使うための設定メモ

## Claude CodeをDockerで使う自分用メモ
Claude Codeとはといったことは詳しい説明がいたるところにあるので省略。ここではローカルにインストールして環境を変えることがないように、Docker(VscodのDevContainer)内で使えるように設定をしました。
### Dockerfile
```docker:Dockerfile
FROM python:3

ARG USERNAME=user
ARG GROUPNAME=user
ARG UID=1000
ARG GID=1000

#Group and USER
RUN groupadd -g $GID $GROUPNAME \
&& useradd -m -s /bin/bash -u $UID -g $GID $USERNAME \
&& apt-get update && apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME 

USER $USERNAME
```
Dockerfileは必要最小限。利用するユーザー名を決めるだけ。とりあえずpythonのイメージとするけど、開発するものに合わせて変えてください。他に必要なものは、devcontainer.jsonでfeatureを使ってインストールします。user名はコンテナ内で使う名前を任意で決められます。

### devcontainer.json
```json:devcontainer.json
{
	"name": "ClaudeCode Container",
	"build": {
		"dockerfile": "Dockerfile",
		"context": "."
	},

	"features": {
		"ghcr.io/devcontainers/features/node:1": {},
    	"ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
	},
	"mounts":[
		 {
			"source": "${localWorkspaceFolder}/workspace",
            "target": "${containerWorkspaceFolder}",
			"type": "bind"
		}
	],
	"remoteUser": "user",
    "workspaceFolder": "/home/user/workspace",
	"postCreateCommand": "/home/user/workspace/changebash.sh"
}

```
node.jsとClaude Codeはfeaturesでインストールする。
remoteUserはDockerfileと同じもの。postCreateCommandはなくても良いが、プロンプトを変えたいので次のようにchangebash.shを作っている。

### postCreateCommand用のスクリプト
```shell:changebash.sh
#!/bin/bash

cp  /home/user/.bashrc /home/user/bashrc.bak
cp /home/user/workspace/bashrc /home/user/.bashrc
rm -f /home/user/bashrc.bak
source /home/user/.bashrc
```
元の.bashrcを自作のものと入れ替える。自作と言っても元のものを一箇所変えるだけ。
```shell:.bashrc
 # カレントディレクトリがGitリポジトリであれば、ブランチ名を表示するように変更
   PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]:\[\e[31m\]$(branch=$(git branch --show-current 2>/dev/null); [ -n "$branch" ] && echo "($branch)\[\e[0m\]:")\[\e[0m\]\$'
```
これでプロンプトにGitのブランチ表示がされるようになる。
【GAS+Vue.js】シンプルなWebページを作る

## はじめに
はじめまして、新卒エンジニアのSouと申します。Qiita初投稿です。
GASをキャッチアップする機会があり、アウトプットとしてシンプルなウェブページを作ってみました！
## 作ったもの
[最近飲んでおいしかったもの](https://script.google.com/a/macros/works-hi.co.jp/s/AKfycbwNw2-SQmXeLEnWE_n8qTL7geRgG71EUi1nsKA_lJpSZJHt_QgM1c9hiHuOPjSxP9nFIQ/exec)

業務の休憩中、通勤中に飲んだ、おいしかった飲み物を紹介するWebページです！
### トップページ
![スクリーンショット 2025-06-04 130949.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105038/21184e5b-df76-4cd6-a877-b95f86bf9418.png)

各項目の見出しにはタイトル、簡単な説明が記載できます。写真なので分かりにくいですが、ホバー時のアニメーションもあり、クリックすると商品のWebページに遷移します。
Bootstrapを使用し、シンプルなデザインで作成することができました！
### データベース
![スクリーンショット 2025-06-04 131954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105038/1a115402-d50e-449c-ab4d-55c5d0a7773a.png)
今回はGASのみで開発することを目指したため、データベースはGoogleスプレッドシートで管理しました。スプレッドシートを更新すると自動でWebページにも項目が増えていきます！

## 使用技術
 - GAS (Google Apps Script)
 - Vue.js
 - Bootstrap
## 参考にしたリンク
[【0からGASを学ぶ】GASでWebアプリケーションを作ってみよう](https://qiita.com/gas-suke/items/ab83c04944ae2e109673)
[GASとJavaScriptフレームワークVue.jsを使ってWebアプリを作成するための最初の一歩](https://tonari-it.com/gas-web-app-vue-js/)
## おわりに
GASだけでWebページが作れるのは驚きでした。
デプロイがとても簡単だったのも良いポイントだと思います。
Vue特有のディレクティブに触れたのも良い経験になりました。
(初めて技術記事書いたけどこんなのでよいのか、、？)
楽しく学ぶ　Unity「2Dゲーム」作りのきほん

楽しく学ぶ　Unity「2Dゲーム」作りのきほん
https://book.mynavi.jp/ec/products/detail/id=146412
https://book.mynavi.jp/files/user/trial/9784839986087/index.html?page=23
https://book.mynavi.jp/supportsite/detail/9784839986087.html
キャラクターカテゴリ × イベントタグで記事を整理・発見しやすくする方法

# キャラクターカテゴリ×イベントタグで記事を整理する設計パターン

アニメ・漫画系コンテンツを扱うWebサイトで、記事数が増えてくると「探しにくさ」が課題になります。そこで有効なのが「キャラクターカテゴリ×イベントタグ」の併用によるコンテンツ整理と並び替えの仕組みです。

## どう使う？

例として、ある記事が「五条悟」関連で「ハロウィン2025」イベントに関する内容だった場合：

- カテゴリ: `五条悟`
- タグ: `ハロウィン2025`

こうすることで、

- **キャラクターごとの記事一覧** → 五条悟ファンが迷わずアクセス  
- **イベントごとの一覧** → 季節限定や企画モノの情報をまとめられる  

という2つの軸で記事を整理でき、導線が格段に強化されます。

最新の[コラボ](https://collabo-kk.co.jp/)情報をチェックしたい方はこちら。この構造は非常に有効です。

メリット
再利用性が高い：キャラ軸・イベント軸のどちらでも活用可能

SEOにも有効：構造化されたカテゴリ・タグ設計はGoogleにも好影響

UX向上：ユーザーが目的の記事に早くたどり着ける

まとめ
記事数が多くなってきたアニメ・漫画メディアには、キャラクターカテゴリ×イベントタグの設計を導入するだけで、検索性・発見性が大幅に向上します。導入はシンプルながら、効果は大きいのでぜひ取り入れてみてください！

## 🛠 実装例（静的サイトの場合）

```yaml
---
title: 五条悟のハロウィン衣装まとめ
categories:
  - 五条悟
tags:
  - ハロウィン2025
---
UMLモデリング教科書UMLモデリングL2 第２版

・『UMLモデリング教科書UMLモデリングL2 第２版』 桐越 信一、国正 聡、竹政 昭利、照井 康真、橋本 大輔 著　翔泳社 ・『OMG認定UML試験Fundamental対応UML速習リファレンス』 株式会社豆蔵、株式会社ピーエイ著、オブジェクトテクノロジー研究所 監修　ソフトバンククリエイティブ 
https://www.shoeisha.co.jp/book/detail/9784798117324

## 第1章　全般
UMLとは？
UMLの特徴
UMLで定義している図
ユースケース図
クラス図
シーケンス図
コミュニケーション図
ステートマシン図
アクティビティ図
コンポーネント図
配置図
UMLの拡張
モデリングとは
開発プロセス
反復型開発プロセス
Unified Processとは
練習問題

Timing Diagramがないのは、通信系、制御系ではない書籍のあるある。
本当にそれでいいのか。

## 第2章　ビジネスモデリング
ビジネスモデリングとは
ビジネスモデリングの事例
発展的内容
ケーススタディにおけるボトルネック抽出
改善方針
改善後のアクティビティ図
練習問題

社会現象であり、統計、確率の精度が、物理現象とは２桁以上違うかも。

## 第3章　要求分析モデリング
要求分析モデリングとは
ユースケース分析の詳細
要求分析モデリングのケーススタディ
アクターの発見
ユースケースの発見
練習問題

お金になるのは、ユースケースだよね。

## 第4章　構造モデリング
構造モデリングとは
クラスの発見
関連の検討
発展的内容
練習問題

クラスでしか構造をとらえないのはどうよ。
状態遷移、時系列、刻時図を書いて、構造を考えるか、
データ中心設計で構造を考えるとよい。

## 第5章　振る舞いモデリング
振る舞いモデリングとは
相互作用とは
相互作用に参加するオブジェクト
オブジェクトの役割
オブジェクト間のメッセージング
相互作用図とクラス図の関係
オブジェクトの状態遷移
トリガーとガード条件
入れ子になる状態
ステートマシン図とクラス図の関係
練習問題

時系列、刻時がみだしになっていないのはどうよ。

## 第6章　設計モデリング
設計モデリングとは
練習問題

状態遷移、時系列、刻時のようなソースコード生成が可能な図で書くとよい。
ソースコードを書いてから、これらの図を自動生成してもよい。

## 第7章　フェーズをまたがる問題
本章の内容
練習問題

## 模擬試験
### 模擬試験　解答と解説
Excel ファイル操作ライブラリ OpenXLSX のご紹介

Excel ファイルを操作するプログラムを直接自作することは理論的には可能であっても, xlsx内部の xmlスキーマの秩序を解析する必要があるため, かなり面倒であらう。

実際に xlsx 内部を覗き見れば, 自作する気が失せることがわかる.

そこで一般には各種ライブラリが, しかもむでも出ており, 

・POI (Java)
・NPOI, ClosedXML (C#) 

あたりは頻繁にアップデートされており, 情報量も多い。

シンプルに C/C++ で書かれたものを私は知らなかったのだが、OpenXLSX という便利なものを見つけた。

OpenXLSX は <b>Kenneth Troldal</b> 氏があらわしたC/C++ ライブラリである。
氏は Github にこれを公開し, make も問題なく通るため, 使い方をここで説明することはないが,

Visual Studio (VC++),  VSCode(Linux) 両方で, ただちに利用できるやうにした雛形を作成した。


なお同名の R ライブラリがあるやうだが, どうやらそれは Kenneth Troldal 氏のものと別物のやうである。
猿でもわかるAIプログラミングシリーズ 🐵💻 AIでレシートの文字を読み取ってみた！（OCR入門）


## 1. はじめに  
「毎月の経費精算でレシートの数字をひたすら入力するのが面倒...」  
「紙の資料をデジタル化したいけど手作業は非効率...」  

こんな悩みを解決するのが**OCR（Optical Character Recognition）技術**です。  
本記事ではPythonを使い、AIでレシートの文字を自動認識するシステムをゼロから構築します。  

実際に私がプロジェクトで導入したノウハウや、  
「ここでハマった！」というトラブル事例も交えながら解説します。  

## 2. OCR技術の基礎知識  

### OCRとは？  
OCRは画像中の文字を検出・認識する技術で、以下のプロセスから構成されます：  

1. **前処理**：画像の傾き補正、ノイズ除去  
2. **文字領域検出**：テキストが存在する領域を特定  
3. **文字認識**：検出した領域の文字を解読  

### 主要ライブラリ比較  
| ライブラリ | 特徴 | 適したケース |  
|------------|------|-------------|  
| Tesseract | オープンソース、多言語対応 | 汎用的なOCR |  
| EasyOCR | 深層学習ベース、簡単API | リアルタイム処理 |  
| AWS Textract | クラウドサービス、高精度 | 企業向けソリューション |  

今回は**EasyOCR**を選択。その理由は：  
- インストールが簡単（`pip install easyocr`）  
- 日本語対応済み  
- デフォルトで高い精度  

## 3. 実装してみよう  

### 環境準備  
```python
!pip install easyocr opencv-python matplotlib
```

### 最小限のOCRコード  
```python
import easyocr
import cv2
from matplotlib import pyplot as plt

# リーダー初期化（日本語指定）
reader = easyocr.Reader(['ja'])

# 画像読み込み
image = cv2.imread('receipt.jpg')

# OCR実行
results = reader.readtext(image)

# 結果表示
for (bbox, text, prob) in results:
    print(f'Text: {text}, Confidence: {prob:.2f}')
    top_left = tuple(map(int, bbox[0]))
    bottom_right = tuple(map(int, bbox[2]))
    cv2.rectangle(image, top_left, bottom_right, (0, 255, 0), 2)

plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2RGB))
plt.show()
```

### 実行例（レシート画像入力→出力）  
```
Text: 領収書, Confidence: 0.98  
Text: 2023年5月15日, Confidence: 0.95  
Text: ￥12,800, Confidence: 0.93  
```

## 4. 実践的なテクニックとトラブルシューティング  

### 精度向上のための前処理  
```python
def preprocess_image(image_path):
    image = cv2.imread(image_path)
    gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
    denoised = cv2.fastNlMeansDenoising(gray, h=30)
    _, thresholded = cv2.threshold(denoised, 0, 255, 
                                 cv2.THRESH_BINARY + cv2.THRESH_OTSU)
    return thresholded

processed_image = preprocess_image('receipt.jpg')
```

### よくあるエラーと解決策  
**問題1**：縦書き文字を認識しない  
→ `reader = easyocr.Reader(['ja'], gpu=True)`でGPU加速を有効化  

**問題2**：数字と日本語の混在が苦手  
→ カスタム辞書を追加：  
```python
reader = easyocr.Reader(
    ['ja'],
    recog_network='custom_model',
    user_network_directory='./custom_net/'
)
```

## 5. 応用：クラウド連携システム構築  

### AWS Textractとの比較例  
```python
import boto3

def aws_textract_analyze(image_path):
    client = boto3.client('textract')
    with open(image_path, 'rb') as image:
        response = client.detect_document_text(
            Document={'Bytes': image.read()}
        )
    return [item['Text'] for item in response['Blocks'] if item['BlockType'] == 'LINE']

# コスト比較（1000ページあたり）
# EasyOCR: 無料（自前サーバー）
# Textract: $15〜（高精度モード）
```

### 実プロジェクトでのアーキテクチャ例  
```
レシート画像 → S3バケット → Lambdaトリガー →  
→ Textract処理 → DynamoDB保存 → 経費精算システム連携
```

## 6. まとめ  

### メリット  
- 手作業の工数削減（90%時間短縮の実績）  
- 既存システムと容易に連携可能  

### デメリット  
- 特殊フォントや極端な傾きには弱い  
- 個人情報取り扱いには注意が必要  

**今後の展望**：  
LLM（GPT-4等）と組み合わせ、  
「￥12,800 → 経費カテゴリ『接待』自動分類」のような  
さらに高度な処理が可能に！  

---

「実際に試してみたい！」という方は、  
こちらのGoogle Colabサンプルをご利用ください：  
[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/drive/1xyz...)
Vue.js + Tailwind CSS（v4） の導入方法

## やりたかったこと

Vue.js で Todo アプリを作るにあたり、スタイリングを Tailwind CSS で行いたくて、ChatGPTに聞きながら導入を進めました。  
しかし、返ってくる答えは Tailwind CSS **v3** 向けの手順ばかりで、設定を何度もやり直すハメに…。


この記事では「Vue + Tailwind CSS **v4**」の導入方法をご紹介します。

##  使用環境

- Node.js v20.12.2
- npm v10.5.0
- Vite v6.3.5
- Vue v3.5.13
- Tailwind CSS v4

---

## 1. プロジェクトの作成

```
// アプリを作成したいディレクトリに移動後

npm create vite@latest vue-my-todolist -- --template vue
cd vue-my-todolist
npm install
```

## 2. Tailwind CSS のインストール

```
npm install tailwindcss @tailwindcss/vite
```
※v4 では autoprefixer や postcss は不要
## 3. Vite 設定ファイルの編集
```
// vite.config.js または vite.config.ts

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import tailwindcss from '@tailwindcss/vite' ← 追加

export default defineConfig({
  plugins: [vue(), tailwindcss()],　← 追加
})
```
上記の2行を追加
## 4. style.css ファイル の編集
```
@import "tailwindcss";
```
cssファイルのどこに記述してもOK!
## 5. main.js に CSS を読み込む
```
// src/main.js

import './assets/main.css'
```

##  ハマったポイント

#### 1.`npx tailwindcss init -p` がエラーになる  
```
npm ERR! could not determine executable to run
```
→ Tailwind CSS v4 では CLI の代わりに **Vite プラグイン**を使うのが基本。  
設定ファイル（`tailwind.config.js`）が**必須ではない**。

#### 2.`@tailwind base;` などは不要  
→ v4からは `@import "tailwindcss";` だけでOK。  
旧バージョン（v3）記事が多く、**混乱しがち**。

#### 3.`autoprefixer`, `postcss-import` も不要  
→ v4では内部処理されるので**インストール不要**。

---

## まとめ

- Tailwind CSS v4では **CLIではなく Vite プラグインを使う**
- スタイルの記述は `@import "tailwindcss";` だけでシンプル
- 公式ドキュメントも **v3とv4で内容が大きく異なる** ので注意！

---