OmniAICreator/Qiita-1.07M huggingface dataset:
【Go】簡単なBridgeパターンのサンプルコード


## 概要

- Goで簡単なAbstract Factoryパターンを実装。

## 実装内容

- 異なる通知方法（EmailやSMS）のインスタンスを生成し、メッセージを送信するサンプルコード
	- **Notifierインターフェース**: 通知を送るためのメソッドを定義
	- **EmailNotifier** と **SMSNotifier**: それぞれEmailとSMSの通知を実装
	- **NotificationFactoryインターフェース**: Notifierのインスタンスを生成するためのファクトリインターフェース
	- **SendNotification関数**: ファクトリを使って通知を送ることができる

## サンプルコード


```go
package main

// Notifier は通知を送るためのインターフェース
type Notifier interface {
	// SendNotification は通知メッセージを送信する
	SendNotification(message string) string
}

// EmailNotifier は Email 通知の実装
type EmailNotifier struct{}
func (n *EmailNotifier) SendNotification(message string) string {
	return "Email: " + message
}

// SMSNotifier は SMS 通知の実装
type SMSNotifier struct{}
func (n *SMSNotifier) SendNotification(message string) string {
	return "SMS: " + message
}

// NotificationFactory は Notifier を作成するファクトリインターフェース
type NotificationFactory interface {
	// CreateNotifier は Notifier を作成する
	CreateNotifier() Notifier
}

// EmailNotificationFactory は Email 通知のファクトリ
type EmailNotificationFactory struct{}
func (f *EmailNotificationFactory) CreateNotifier() Notifier {
	return &EmailNotifier{}
}

// SMSNotificationFactory は SMS 通知のファクトリ
type SMSNotificationFactory struct{}
func (f *SMSNotificationFactory) CreateNotifier() Notifier {
	return &SMSNotifier{}
}

// SendNotification はファクトリを使って通知を送信
func SendNotification(factory NotificationFactory, message string) string {
	notifier := factory.CreateNotifier()
	return notifier.SendNotification(message)
}

// 使用例
func main() {
	// Email 通知の送信
	emailFactory := &EmailNotificationFactory{}
	emailMessage := SendNotification(emailFactory, "Hello, Email!")
	println(emailMessage)

	// SMS 通知の送信
	smsFactory := &SMSNotificationFactory{}
	smsMessage := SendNotification(smsFactory, "Hello, SMS!")
	println(smsMessage)
}

// 出力
// Email: Hello, Email!
// SMS: Hello, SMS!
```
家計簿アプリを作る＃１０

MUIを使って、レイアウトを整えていきます。

![スクリーンショット 2025-03-08 095534.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/f4553056-57aa-47b4-8c4a-054ca895e5a9.png)
こちらを選択します。

![スクリーンショット 2025-03-08 095613.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/9affe581-6dd2-4fa6-a089-68154fed2d4d.png)
MUIを利用することで、レイアウトを簡単に実装することができます。
Discover the Core Librariesをクリックします。

![スクリーンショット 2025-03-08 095759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/f9268094-1e96-4b57-a8ff-39fecdfd3274.png)
続いて、Material UIをクリックします。

![スクリーンショット 2025-03-08 095843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/667865f7-f510-438f-afd7-48563633537d.png)
Get startedを押します。

![スクリーンショット 2025-03-08 095921.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/d344ac86-280b-4da0-adda-e1420a611515.png)
Installationをクリックします。

![スクリーンショット 2025-03-08 095959.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/9f139d33-020d-4895-80aa-fe7bdd1a408c.png)
Default installationの部分をコピーします。

![スクリーンショット 2025-03-08 100118.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4012588/d22a508c-e4e0-40f1-bce1-ce641aed8fbe.png)
VSコードに戻って、貼り付けます。
ServicePointManager.SecurityProtocolの設定を忘れない

## はじめに
ServicePointManager.SecurityProtocolを設定していないためにずっとエラーがでていました。気づかずに無駄なデバッグ作業を多くしてしまったので、記事にして忘れないようにしたいと思います。

:::note warn
最新の .NET バージョンおよびオペレーティング システム環境の場合、TLS のバージョンを明示的に設定する必要はないらしい。
:::


## SecurityProtocolとは
ServicePointManager.SecurityProtocol は、.NET アプリケーションで通信に使用する TLS（Transport Layer Security）のバージョンを指定するためのプロパティです。TLSは、インターネット通信のセキュリティを保護するプロトコルです。特に、HTTPS通信などで重要な役割を果たします。

こうやって設定します。
```csharp
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
```
~~なお、TLS 1.3については、.NET Frameworkではサポートされていません。~~　TLS 1.3は、.NET 5.0以降やそれに対応する環境でのみ使用可能です。

:::note warn
.NET Framework の場合でも Windows 11 と .NET Framework 4.6.2 以降なら TLS 1.3 に対応している。
:::



## 必要な理由
- **セキュリティ向上 :** TLSには複数のバージョンがあり、古いバージョン（例：TLS 1.0やTLS 1.1）は既知の脆弱性を抱えているため、現代の安全な通信にはTLS 1.2以上の使用が推奨されます。これにより、通信の暗号化強度が向上し、より安全な通信が保証されます。

- **接続の互換性 :**  一部のサーバーでは最新のTLSバージョンのみをサポートしている場合があります。適切なTLSバージョンを指定することで、接続エラーを防ぎ、確実な通信が可能になります。


## 設定しないとどうなるか
- **安全性の低下 :**  設定を行わない場合、.NET Frameworkはシステム既定のTLSバージョン（通常はTLS 1.0やTLS 1.1）を使用するため、通信自体は暗号化されますが、セキュリティ面でリスクがあります。古いTLSバージョンはその暗号化方式に脆弱性があるため、攻撃者による悪用のリスクが高まります。
- **接続エラー:** サーバー側がTLS 1.2以上を必須としている場合、古いバージョンでの接続ではエラーが発生することがあります。
- **脆弱性 :** 古いTLSバージョンを使用すると、通信内容が解読されるリスクが高まるため、常に最新のバージョンを使用することが推奨されます。


## エラーの有無
設定を行わない場合、接続先のサーバーや実行環境によって結果が異なります。以下のようなケースがあります。

### エラーが発生しない場合：
- **デフォルト設定の場合 :** .NET Frameworkはシステム既定のTLSバージョンを使用します。サーバーが古いバージョンにも対応していれば接続が成功することがありますが、その場合もセキュリティリスクが伴います。
- **古いTLSバージョンに対応している場合 :** 接続は成功しますが、暗号化の強度が低いため、通信内容が保護されていない可能性があります。

:::note warn
エラーが発生しない場合でも、古いTLSバージョンを使うと暗号化の強度が弱くなる。
:::

### エラーが発生する場合：
- **サーバーが最新のTLSバージョンを要求している場合 :**  サーバー側がTLS 1.2以上を要求している場合、古いバージョンで接続しようとするとエラーが発生します。この場合、ServicePointManager.SecurityProtocolでTLS 1.2を指定することで接続が成功します。
- **システムがTLS 1.2以上に対応していない場合 :** 古いOSや.NET Frameworkのバージョンでは、TLS 1.2をサポートしていないことがあり、その場合接続エラーが発生する可能性があります。

## おわりに
未来の自分が同じことに時間をたくさん割かないように。がんばれ！
テキストからプロ級動画へ🎬✨ AIを活用した収益化の新時代

## AI×動画制作で稼ぐ！プログラマー向け最新クリエイティブ収益戦略📹

動画制作の世界は、AI技術の進化によって劇的に変化しています。プログラマーやエンジニアとして、AIを活用した動画制作のプロセスを効率化し、収益を最大化する方法を学びましょう。本記事では以下の3つのテーマについて詳しく解説します。

- **AIを使った動画自動生成サービスの構築**
- **動画編集プロセスの自動化スクリプト開発**
- **AIを利用した動画コンテンツ最適化ツール提供**

---

### **1. AIを使った動画自動生成サービスの構築**

AIを活用した動画生成サービスは、テキストから動画を作成する技術や、カスタマイズ可能なテンプレートを提供することで、初心者でも簡単にプロフェッショナルな映像を作れるようにします。以下は構築時に必要なステップと技術です。

#### 必須機能
- **テキスト→動画変換**: ユーザーが入力したテキストから映像を生成。
- **テンプレートライブラリ**: カスタマイズ可能なテンプレートで多様な用途に対応。
- **音声合成**: 自然な音声でナレーションを追加。
- **リアルタイムプレビュー**: 編集内容を即座に確認可能。

#### 使用技術
| カテゴリー | 技術 |
|------------|------|
| フロントエンド | React.js, Vue.js |
| 機械学習 | TensorFlow, PyTorch |
| 動画編集SDK | FFmpeg, Moviepy |
| クラウド | AWS, Google Cloud |

#### サンプルコード: テキストから動画生成
```python
from moviepy.editor import TextClip, CompositeVideoClip

# テキストクリップ作成
text_clip = TextClip("こんにちは！AIで動画制作", fontsize=70, color='white')

# 背景色と合成
video = CompositeVideoClip([text_clip.set_duration(5)])
video.write_videofile("output.mp4", fps=24)
```

---

### **2. 動画編集プロセスの自動化スクリプト開発**

動画編集は時間がかかる作業ですが、スクリプトによる自動化で効率化できます。例えば、Pythonライブラリ「Moviepy」や「FFmpeg」を使えば、カットやトランジションの追加などが可能です。

#### 自動化できるタスク例
- 動画クリップの切り取り・結合
- トランジションやエフェクトの適用
- 音声や字幕の追加

#### サンプルコード: 動画クリップの結合とトランジション追加
```python
from moviepy.editor import VideoFileClip, concatenate_videoclips

# 動画クリップ読み込み
clip1 = VideoFileClip("clip1.mp4").subclip(0, 5)
clip2 = VideoFileClip("clip2.mp4").subclip(0, 5)

# トランジション付き結合
final_clip = concatenate_videoclips([clip1.crossfadeout(1), clip2.crossfadein(1)])
final_clip.write_videofile("final_output.mp4", fps=24)
```

---

### **3. AIを利用した動画コンテンツ最適化ツール提供**

視聴者の好みに合わせて動画コンテンツを最適化することで、エンゲージメントと収益性を向上させることができます。以下は具体的なツール例とその活用方法です。

#### 最適化ツール例
- **Topaz Video Enhance AI**: 映像品質向上（アップスケーリングやノイズ除去）。
- **Luminar Neo**: 特定領域の選択的強調。
- **DaVinci Resolve Studio**: 高度な色補正とAIエフェクト。

#### 実践例: ノイズ除去と解像度向上
```python
import cv2

# 映像読み込み
video = cv2.VideoCapture("low_quality_video.mp4")

# フレームごとにノイズ除去と解像度変更処理（簡易版）
while True:
    ret, frame = video.read()
    if not ret:
        break
    
    # ノイズ除去（GaussianBlur）
    denoised_frame = cv2.GaussianBlur(frame, (5, 5), 0)
    
    # 解像度変更（リサイズ）
    resized_frame = cv2.resize(denoised_frame, (1920, 1080))
    
    # 処理済みフレーム保存（省略）
```

---

### **収益戦略📈**

AI×動画制作で収益化するためには、以下の方法が有効です：

1. **カスタマイズ映像サービス販売**
   - クライアント向けに特注映像を提供。
   - 使用ツール例: Synthesia, Pictory。

2. **YouTubeチャンネル運営**
   - AI生成コンテンツで広告収入やスポンサー契約。
   - 使用ツール例: InVideo, Leonardo。

3. **教育コンテンツ販売**
   - オンラインコースやチュートリアル映像制作。
   - 使用ツール例: VidAU, WonderShare Filmora。

4. **サブスクリプションモデル**
   - Patreonなどで限定コンテンツ提供。

---

### **まとめ**

AI技術は動画制作業界に革命をもたらしています。プログラマーとしてこれらの技術を活用すれば、新しい収益モデルを構築しつつ効率的かつ魅力的なコンテンツ制作が可能になります。ぜひこの知識を活かして挑戦してみてください！🎥✨



---

### 最後に：業務委託のご相談を承ります

私は、業務委託エンジニアとしてWEB制作やシステム開発を請け負っています。最新技術を活用し、レスポンシブなWebサイトやインタラクティブなアプリケーション、API連携など、幅広いニーズに対応可能です。

「課題解決に向けた即戦力が欲しい」「高品質なWeb制作を依頼したい」という方は、ぜひお気軽にご相談ください。一緒にビジネスの成長を目指しましょう！

👉 [ポートフォリオ](https://yushiyamamoto.vercel.app/)

🌳 [らくらくサイト](https://rakuraku-site.prodouga.com/)
YDLiDAR GS2 調べメモ

User Manual
https://www.ydlidar.com/Public/upload/files/2023-10-17/YDLIDAR%20GS2%20Lidar%20User%20Manual%20V1.0(220208).pdf

日本語記事(GS2には対応していなさそう)
https://zenn.dev/akkunlab/articles/e7e92983f2d11c

ros2 driver
https://github.com/YDLIDAR/ydlidar_ros2_driver

YDLIDAR SDK
https://github.com/YDLIDAR/YDLidar-SDK
AWSアカウントを作成して初めにやること

# この記事の想定している層
- 個人開発で初めてAWS環境を使う人（私も）
# はじめに
- 以前削除しましたが、改めて色々遊んでみようとアカウント再作成した時に考えたことをメモ書き程度にしておきます。
- これからAWSの様々なリソースを使用すると思いますが、権限管理やセキュリティは初めからしっかりしましょう（自分への戒め）
- 手始めにルートユーザーのMFA登録から済ませるといいと思います。
- その後はIAMユーザーを作成して最小権限を付与しましょう。
- 上記で作成したIAMユーザーで今後はマネコンやらログインしてリソースの管理を行いましょう。
- つらつら並べましたが、なぜそうするのかを記載していきます。（知識は充足していないので、ツッコミや指定あればご教授ください。適宜更新します。）

追記：以下のワークショップやガイドを見ればこの記事は見なくて良さそうです

https://catalog.us-east-1.prod.workshops.aws/workshops/10141411-0192-4021-afa8-2436f3c66bd8/ja-JP/20-prerequisites/40-account

https://docs.aws.amazon.com/ja_jp/SetUp/latest/UserGuide/setup-usertypes.html
## IAMとルートユーザー
はじめにIAMユーザーとルートユーザーの違いについて
- ルートユーザーは最初にAWSに登録したときのユーザーです。AWS全体の管理権限を持ちます。
- IAMとは、AWS内で作成できるユーザーや権限管理の仕組みです。IAMユーザーとは、AWS内に作成できるユーザーです。個別に権限を設定できます。ルートユーザーはこれら含めて全てのAWSリソースを管理できます。
## ルートユーザーで設定やリソースの作成削除等やればいいのでは？
- ルートユーザーを使わない方が良い理由はいくつか考えられます。
1. ルートユーザーは全権限を持っている
    - 誤操作で全サービスを削除するリスクがある
    - AWSの設定をミスると、セキュリティインシデントのリスクが高い
2. ルートユーザーは制限が難しい
    - IAMユーザーなら 必要な権限だけ付与可能
    - ルートユーザーは制限できず、常に最強の権限を持ってしまう
3. ルートユーザーの不正利用は致命的
    - もしルートアカウントが漏洩したら、全データが乗っ取られるリスク
    - MFAを設定していても、パスワードリセット攻撃の対象になりやすい
    - 個人開発でもIAMユーザーを作るべき

✅ルートユーザーは基本的に使わない方が良いと考えます。

# 具体的な運用
## 管理用ユーザーを作る
IAM Identity Centerで管理が推奨らしいです。厳密に言うとIdentity CenterではIAMユーザーは作りません。費用としてはどちらも無料で、他のサービスとの掛け合わせで増えていくようなイメージです。複数のAWSアカウントを管理する予定がなく、個人開発レベルならIdentity Centerを使う必要はないようには感じますが、アクセスキーなし運用などができ、セキュリティ面は高いようです。
## IAM Identity Centerを使う場合
https://docs.aws.amazon.com/ja_jp/SetUp/latest/UserGuide/setup-configadminuser.html
- Identity Centerを有効化
- ユーザーの作成
- 管理アクセス許可セットを作成
- ユーザーを管理者アクセス許可セットに割り当てる

tips

https://aws.amazon.com/jp/blogs/news/delegating-permission-set-management-and-account-assignment-in-aws-iam-identity-center/

## IAMユーザーで管理する場合
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_users_create.html
- AdministratorAccess（フルアクセス必要で無いなら管理者とはいえ、必要最小限にしたほうがいいと思います。）を付与して普段の開発はこのIAMユーザーで行う
- AWS CLI や AWS SDK ではIAMユーザーのアクセスキーを使用

# バッドプラクティス
## ルートユーザーのアクセスキーは作らない（AWSも推奨していない）
- アクスキーが必要であればIAMロールを活用すべき
- 例えば、Lambda や EC2 から他のAWSサービスにアクセスする場合は、IAMロールを使用

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_root-user_manage_add-key.html

# 結論
- ルートユーザーは、アカウント作成・請求情報の確認・MFA設定など、AWSの根本的な管理を行うときだけ使うようにしましょう。
- それ以外は、IAMユーザーやIAMロールを使って運用するのが安全だと考えます。
- 個人開発でもセキュリティを守りましょう。
爆速でサービス開発＆マネタイズ！プログラマー必見の最新ノーコード・ローコード活用術✨

「アイデアをすぐに形にしたい！」「開発コストを抑えつつ、スピーディに収益化したい！」そんな願いを叶えるのが、ノーコード・ローコードツールです。
今回は、SupabaseやFirebaseを使った迅速なプロトタイプ作成から、Next.jsやVue.jsでの高速WEBアプリ開発、さらにはノーコードツールとの連携による効率的なマネタイズまで、最新の活用術を分かりやすく解説します🚀

---

## 🚩 SupabaseやFirebaseを用いた迅速なプロトタイプ作成

### **SupabaseとFirebaseとは？**

SupabaseとFirebaseはどちらもBaaS（Backend as a Service）と呼ばれるサービスで、バックエンド開発を簡単にしてくれる強力なツールです[5]。

| 特徴 | Supabase | Firebase |
|---|---|---|
| データベース | PostgreSQLベース（SQL） | NoSQL（Firestore） |
| リアルタイム更新 | ✅ | ✅ |
| 認証機能 | ✅ | ✅ |
| 料金体系 | 明朗会計・利用上限設定可能 | 従量課金制（高トラフィックで高額化） |
| オープンソース | ✅ | ❌ |

### **プロトタイプ作成フロー**

以下はSupabaseを使った迅速なプロトタイプ作成のフロー例です。

```bash
# Supabase CLIのインストール
npm install supabase --save-dev

# 新規プロジェクト作成
supabase init my-project

# ローカルで起動
supabase start
```

### 🎯 **ポイント**
- SupabaseはPostgreSQLベースのため、複雑なクエリも可能で柔軟性が高い。
- FirebaseはGoogleのエコシステムとの連携が強力で、特にモバイルアプリ開発に最適。

---

## 🚩 Next.jsやVue.jsを活用した高速WEBアプリ開発

### **Next.jsで爆速WEBアプリ開発🚀**

Next.jsはReactベースのフレームワークで、サーバーサイドレンダリング(SSR)や静的サイト生成(SSG)などの機能を備えています。SEOにも強く、高速なWEBアプリ開発に最適です[6]。

#### 💻 **Next.jsで簡単なページ作成例**

```bash
npx create-next-app@latest my-next-app
cd my-project
npm run dev
```

#### 🌟 **Next.jsが選ばれる理由**
- サーバーサイドレンダリングによる高速表示
- コード分割によるパフォーマンス最適化
- 静的サイト生成でサーバーコスト削減

---

## 🚩 Next.jsやVue.jsを活用した高速WEBアプリ開発

### 🖥️ **Vue.jsとは？**
Vue.jsはシンプルさと柔軟性を兼ね備えたJavaScriptフレームワーク。初心者にも扱いやすく、学習コストも低めです。

#### 🔧 **Vue CLIで爆速セットアップ**
```bash
# Vue CLIインストール
npm install -g @vue/cli

# プロジェクト作成
vue create my-vue-app

# 開発サーバー起動
cd my-vue-app && npm run serve
```

### 🎯 **ポイント**
- コンポーネントベースで再利用性が高い。
- 学習曲線が緩やかで初心者にも優しい。

---

## 🚩 ノーコードツールとの連携による効率的な収益化💰

ノーコードツールはプログラムを書かずにアプリケーション構築やマネタイズが可能です。以下のツールがおすすめです[1][8][9]。

| ツール名        | 特徴                           | 主な用途                   |
|-----------------|--------------------------------|----------------------------|
| Bubble          | 完全ビジュアル型                | Webアプリ構築              |
| Airtable        | スプレッドシート感覚            | データ管理・内部ツール      |
| Zoho Creator    | ドラッグ＆ドロップ型            | 業務アプリ・社内ツール      |

---

## 🚩 ノーコードツールとの連携による効率的な収益化💰

ノーコードツールは決済機能や分析機能などが標準搭載されており、迅速なマネタイズが可能です。以下のようなマネタイズモデルがあります[9]。

- サブスクリプション型（月額課金）
- フリーミアムモデル（基本無料＋追加機能課金）
- アフィリエイトマーケティング（商品紹介など）
- EC連携による直接販売

**📈 収益化成功へのポイント**
- ユーザー体験を損ねない広告配置。
- ARPU（ユーザーあたり平均収益）や離脱率などの指標を追跡し改善。
- 柔軟に収益化モデルを変更できるノーコードが最適。

---

## 📌 **まとめ：爆速開発＆収益化への近道！**

ノーコード・ローコードツールとモダンなフレームワーク（Next.js, Vue.js）を組み合わせれば、高速かつ柔軟なサービス開発が可能になります。SupabaseやFirebaseと組み合わせてバックエンド構築も簡単に行えるため、アイデアから収益化まで最短距離で進めます✨

ぜひ本記事を参考に、自分だけのサービス開発＆収益化に挑戦してみてくださいね🚀


---

### 最後に：業務委託のご相談を承ります

私は、業務委託エンジニアとしてWEB制作やシステム開発を請け負っています。最新技術を活用し、レスポンシブなWebサイトやインタラクティブなアプリケーション、API連携など、幅広いニーズに対応可能です。

「課題解決に向けた即戦力が欲しい」「高品質なWeb制作を依頼したい」という方は、ぜひお気軽にご相談ください。一緒にビジネスの成長を目指しましょう！

👉 [ポートフォリオ](https://yushiyamamoto.vercel.app/)

🌳 [らくらくサイト](https://rakuraku-site.prodouga.com/)
VBA事始め１　DXシステム内製化はExcelで出来る（導入編）

# 今更ながらVBAを始めよう。
このシリーズでは、Excelを使ってDXを内製化する方法について解説します。
世の中には、いろんなコンピュータ言語がありますがビジネスシーンで最も役に立つのはスプレッドシートと呼ばれる表計算ソフトです。

スプレッドシートでは様々なデータを取扱出来るようになっており簡単な計算は表の中に式を埋め込むことですぐに結果を得ることができます。
なので、Excelを代表とするスプレッドシートは究極のノーコードツールであると言えます。

さらにExcel VBAは時代遅れでオワコンという意見もありますが・・・
知っていればこれほど役に立つものはありません。

# 単体Excelの欠点
Excel単体（VBA不使用）でもそこそこいろんなアプリケーションを作ることは可能ですが、式を多用したり複数ワークブックを参照しだすと様々な弊害が置きます。

様々な弊害とは・・・
１．複数人数で同じ書式を同時編集できない。
　　複数人数で同じ書式を触ると別名で保存しない限り同じデータを編集することができないので一元管理できなくなる。
２．式が増えると・・・
　　埋め込んだ式を再計算するのでワークブックが重くなります。
３．複数ブックを参照すると・・・
　　絶対パスが埋め込んだ式に記録されるのでワークブックを移動できなくなる。

# 欠点の解決方法
これらの欠点は、データベースと呼ばれるプログラム（Access、sqlite、MS-SQLServer、PostgreSQL)などをVBAから使うと全て解消されます。

# 目次
[VBA事始め２　VBAの基本](https://qiita.com/kawamo55/items/5b86ff819b5b26e7e831)
[VBA事始め３　Accessデータベース](https://qiita.com/kawamo55/items/b7b0f8183ff74b10f358)
DAO（分散型自律組織）開発で収益化！プログラマーが知っておくべき最新マネタイズ手法🚀

近年、ブロックチェーン技術を活用した分散型自律組織（DAO）が急速に注目を集めています。
今回は、エンジニアやプログラマーがDAO開発を通じて収益化するための最新手法を、具体的な事例やコード例を交えながら解説していきます✨。

---

## DAOとは？🤔

DAO（Decentralized Autonomous Organization）は、ブロックチェーン上で動作する自律的な組織です。スマートコントラクトによりルールが自動化され、参加者がトークン保有量に応じて意思決定に参加できる仕組みになっています。

簡単な図解でイメージしましょう👇

```
参加者（メンバー）
      ⬇️ 投票
スマートコントラクト
      ⬇️ 自動実行
意思決定・資金分配
```

---

## DAO開発で収益化する3つの最新手法🚀

### 1️⃣ DAO向けコミュニティ管理ツールの作成🛠️

DAOはコミュニティ中心の組織であり、円滑なコミュニケーションやメンバー管理が不可欠です。そのため、コミュニティ管理ツールの開発・提供は大きな収益源となります。

**具体的なツール例：**
- メンバー管理・権限付与ツール
- 投票・提案管理ツール
- トレジャリー（資金管理）ツール

**おすすめプラットフォーム：DAOhaus**
- ノーコードで簡単にDAOを構築可能
- 提案や投票システムが標準搭載されているため初心者にも最適[4]

**DAOhausでの簡単セットアップ手順：**
```bash
# ウォレット接続後、テンプレート選択
1. ウォレットを接続🔗
2. DAOテンプレートを選択📑
3. ガバナンスルール設定⚙️
4. メンバー招待👥
5. デプロイ＆運営開始🚀
```

---

### 2️⃣ NFT保有者向け投票システムの提供🗳️🎨

NFT（非代替性トークン）所有者に対して特別な投票権を提供するシステムも人気です。NFT保有者のみが投票できる仕組みを構築すれば、特別感と透明性を両立できます。

**NFT投票システムの仕組み（図解）：**

```
NFT保有者🎟️ → NFT認証🔑 → 投票🗳️ → 結果集計📊 → スマートコントラクトで自動実行⚡️
```

**技術的実装例（Ethereumスマートコントラクト）:**

```solidity
// SolidityによるシンプルなNFT投票スマートコントラクト例
pragma solidity ^0.8.0;

contract NFTVoting {
    mapping(address => bool) public hasVoted;
    mapping(uint => uint) public votes; // 提案ID→投票数

    function vote(uint proposalId) external {
        require(!hasVoted[msg.sender], "Already voted");
        require(ownsNFT(msg.sender), "Not an NFT holder");

        votes[proposalId]++;
        hasVoted[msg.sender] = true;
    }

    function checkVotes(uint proposalId) external view returns (uint) {
        return votes[proposalId];
    }
}
```

このようなスマートコントラクトを利用し、NFT所有者だけが投票可能な仕組みを提供できます[5][6]。

---

### 3️⃣ DAO運営支援サービスの展開🛠️

DAO運営には技術的・運用的な課題が多く存在します。そこで、専門的なサポートサービスを提供し、収益化する方法があります。

**提供可能なサービス例：**
- DAOセットアップ・ガバナンス設計支援📋
- インフラ構築・スケーリング支援🌐
- セキュリティ監査・バックアップ体制構築🔒
- 24時間サポート体制📞

例えば、Lemma SolutionsなどはDAO運営のあらゆる側面をサポートし、コンプライアンス管理やサービスプロバイダーとの調整も行っています[11]。

---

## 実際の成功事例🌟：Bankless DAOの場合

Bankless DAOは以下のような多様な収益化戦略を採用しています[1]：

- メンバーシップ料金制💳
- トークンセールによる資金調達💰
- 有料教育コンテンツ提供📚
- DeFiプロトコルによる資産運用📈

これら複数の収益源を組み合わせることで、自律的かつ持続可能な成長モデルを実現しています。

---

## プログラマーとしてどう始める？👩‍💻👨‍💻

これらの手法を実践するためには、以下のスキルや知識が求められます：

- SolidityやSolidityなどスマートコントラクト開発スキル📝
- フロントエンド開発スキル（React, Next.jsなど）💻
- ブロックチェーン基礎知識（Ethereum, Polygonなど）⛓️

---

## まとめ🌟

DAO開発は今後ますます注目される分野です。特に以下の3つのマネタイズ手法は要注目です：

| 手法 | 特徴 | 具体例 |
|---|---|---|
| コミュニティ管理ツール作成 | メンバー管理・投票管理 | DAOhaus |
| NFT保有者向け投票システム | NFT認証による透明性確保 | NFT Voting Contract |
| DAO運営支援サービス | セキュリティ監査・24時間サポート | Lemma Solutions |

これら最新手法を駆使し、自身のプログラミングスキルを活かして新たな収益源を生み出しましょう！ぜひあなたもDAO開発という新たな領域にチャレンジし、新しい価値創造に挑戦してみてください🚀✨


---

### 最後に：業務委託のご相談を承ります

私は、業務委託エンジニアとしてWEB制作やシステム開発を請け負っています。最新技術を活用し、レスポンシブなWebサイトやインタラクティブなアプリケーション、API連携など、幅広いニーズに対応可能です。

「課題解決に向けた即戦力が欲しい」「高品質なWeb制作を依頼したい」という方は、ぜひお気軽にご相談ください。一緒にビジネスの成長を目指しましょう！

👉 [ポートフォリオ](https://yushiyamamoto.vercel.app/)

🌳 [らくらくサイト](https://rakuraku-site.prodouga.com/)
UbuntuにJava実行環境を用意する

## はじめに
Springで作成したWebアプリケーションのJarファイルを実行する環境が欲しかったのでWSLのUbuntuに環境を用意してみます。

## JDKをインストールする

適宜、求めるバージョンを選択してください。

```terminal
$ sudo add-apt-repository ppa:webupd8team/java
$ java -v
Command 'java' not found, but can be installed with:
sudo apt install openjdk-17-jre-headless  # version 17.0.12+7-1ubuntu2~24.04, or
sudo apt install openjdk-21-jre-headless  # version 21.0.4+7-1ubuntu2~24.04
sudo apt install default-jre              # version 2:1.17-75
sudo apt install openjdk-19-jre-headless  # version 19.0.2+7-4
sudo apt install openjdk-20-jre-headless  # version 20.0.2+9-1
sudo apt install openjdk-22-jre-headless  # version 22~22ea-1
sudo apt install openjdk-11-jre-headless  # version 11.0.24+8-1ubuntu3~24.04.1
sudo apt install openjdk-8-jre-headless   # version 8u422-b05-1~24.04
$ sudo apt install openjdk-21-jre-headless
```

## JAVA_HOMEの設定
```terminal
// export JAVA_HOME=/usr/lib/jvm/<インストールしたjdk>
export JAVA_HOME=/usr/lib/jvm/java-1.21.0-openjdk-amd64
export PATH="$PATH:$JAVA_HOME/bin"
```

## おわり

完了です。Jarを実行しましょう

```terminal
$ java -jar <jarファイル名>
```
Reactivating terminals…問題解決

# 問題
**Reactivating terminals…** が表示され、
ずっと読み込み中になり、正常に表示されない。



# 解決

##### １．設定を開く
![スクリーンショット 2025-01-25 221421.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634951/ea04e9a8-d4bc-1ade-a819-36953572477c.png)


##### ２．Python Locaterを検索し、jsを選択
![スクリーンショット 2025-01-25 221501.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3634951/177fefe5-b016-3282-13a8-7db32edb3243.png)


# 参考サイト

https://stackoverflow.com/questions/78886125/vscode-python-extension-loading-forever-saying-reactivating-terminals
CocoaPodsを指定バージョンでアップデートする方法

# CocoaPodsを指定バージョン（1.16.2）にアップデートする方法

備忘録です。開発メンバーでバージョン一致させておくために。

まず、現在インストールされているバージョンを確認できます

```bash
pod --version
```

指定バージョン（1.16.2）にアップデートするには、以下のコマンドを実行します

```bash
sudo gem install cocoapods -v 1.16.2
```

もし特定のバージョンをインストールする際に問題が発生した場合は、まず既存のCOCOAPODSをアンインストールしてから再インストールすることも効果的です

```bash
sudo gem uninstall cocoapods
sudo gem install cocoapods -v 1.16.2
```

インストール後、再度バージョンを確認して正しくアップデートされたか確認できます

```bash
pod --version
```

これで、COCOAPODSが指定のバージョン1.16.2にアップデートされるはずです。


## それでもバージョンが変わらないよという時

このコマンドを実行することで、インストールされているすべての gem の古いバージョンを削除し、キャッシュもクリアします。


### 1. すべての CocoaPods 関連の gem をアンインストール

```bash
sudo gem uninstall cocoapods --all
sudo gem uninstall cocoapods-core --all
sudo gem uninstall cocoapods-downloader --all
sudo gem uninstall cocoapods-try --all
sudo gem uninstall cocoapods-deintegrate --all
sudo gem uninstall cocoapods-plugins --all
sudo gem uninstall cocoapods-search --all
```

### 2. gem のキャッシュをクリア

```bash
sudo gem cleanup
```

### 3. 特定のバージョンをインストール
```bash
sudo gem install cocoapods -v 1.16.2
```

### 4. バージョン確認
```bash
pod --version
```

## まだまだバージョン変わらないよって時

homebrew でインストールされていた場合があります。homebrew 経由でアンインストールする必要がありますね。以下の手順を試してみてください

### 1. まず homebrew 経由で CocoaPods をアンインストールします
```bash
brew uninstall cocoapods
```

### 2. homebrew のキャッシュをクリーンアップします
```bash
brew cleanup
```

### 3. パスが残っていないか確認します
```bash
which pod
```

これで大丈夫でしょう！
FastRTC: リアルタイム通信Pythonライブラリの検証

https://fastrtc.org/

FastRTCは、Pythonでリアルタイム通信を実現するライブラリであり、ユーザーの入力に即座に応じた出力変更や音声操作デモの構築を容易にすることを目的としている。

現在のGradioデモは静的な動画生成に限定され、双方向性が不足しているが、FastRTCを活用すれば、リアルタイム性やインタラクティブ性を付加できる可能性がある。

検証では、公開されているサンプルコードを実行しつつ、一部コードを読んでその構造を把握した。特に、WebRTCを基盤とした通信機能がどのようにPythonに統合されているかに注目した。

## 簡単な動作

実験では、シンプルなテキスト入力からリアルタイムで応答を返すデモを構築し、動作を確認した。結果、技術的には期待通りで、例えば音声入力をテキスト化し、それに応じた処理を返すフローがスムーズに実現できた。

テストに、多少不具合はでたが、バグの修正は継続しており。Pull Requestに対するレビューも早い。

しかし、実用化には課題が浮上した。最大の障壁はTurnサーバーの問題だ。

Hugging Faceは最近、無料Inference提供から有料外部プロバイダー推奨へと戦略を転換し、その後に無料Turnサーバーを導入したが、その規模や安定性、継続性はまったく期待できない状況だ。現在の無料Turnサーバーは、実験段階では使えるものの、同時接続数が1～2程度の小規模デモにしか耐えられない。

今のHuggingfaceは昔の使い切れないほどInference回数があった時代とは異なる。

## 本格運用
本格運用では、TwilioやAWSのような有料Turnサーバーの利用が必須となり、映像配信や複数ユーザー対応では、同時接続数に応じたサーバーインフラの整備が必要だ。これにより、開発コストが大幅に増加する懸念がある。

Gradioの貧弱な機能—特にリアルタイム処理やUIの柔軟性の低さ—を補うにはFastRTCが有力な選択肢だが、クライアントサイドでの処理強化のためにOnnxを使ったJavaScript連携も視野に入れる必要がある。

一方、最近登場したsmolagentsがAIエージェント分野で注目を集めており、軽量かつ手軽な音声サービス構築プラットフォームとしての可能性を示している。

FastRTCと組み合わせれば、音声ベースのリアルタイムデモがより簡単に実現できるかもしれない。

## 結論
結論として、FastRTCは小規模な技術デモには十分な価値を持つが、本格的なサービス展開にはサーバー環境の整備やコスト管理が不可欠だ。今後は、smolagentsとの統合も含め、さらなる検証が必要だろう。

ただ、開発陣の注力が、音声・特に携帯電話での通話のように思える。Gradioユーザーが期待する、映像出力は豊富なPythonライブラリーから自分で選択していかないといけない。
GitHub Pull Requests でリポジトリごとに違うアカウントを使う

## ソース

- [Uses the wrong account when signed in with multiple GitHub.com accounts #5159 | github.com](https://github.com/microsoft/vscode-pull-request-github/issues/5159)

## 手順

1. アカウントアイコンをクリック
2. 使いたいアカウントの「>」にホバー
3. 「信頼された拡張機能の管理」をクリック
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114109/d884074a-7e0c-4b81-80a3-f79c8e937b08.png)
4. GitHub pull request の歯車をクリック
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114109/03a185c7-6ebc-4c46-9f4e-1d356f672a32.png)
5. このリポジトリで使いたいアカウントを選ぶ
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3114109/854b1e13-aa2f-4203-96fd-e7600afc83f6.png)

これを各リポジトリで行う

## 余談

ブラウザ側もプロファイル分けすると、複数のGitHubアカウントを同時に扱えて便利！

- [firefox](https://support.mozilla.org/ja/kb/profile-manager-create-and-remove-firefox-profiles)
- [chrome](https://support.google.com/chrome/answer/2364824?hl=ja&co=GENIE.Platform%3DDesktop)
個人的備忘録：Windows 10 Home で Active Directory を使う4つの方法を体系的にまとめてみた

## はじめに

Windows 10 Home では、Active Directory (AD) に参加する機能が提供されていません。

企業や組織のネットワークで Active Directory を利用した管理を行う場合は、Windows 10 Pro 以上のエディションが必要になります。

:::note warn
**しかし、個人的に調べたところ、Windows 10 Home でも一部の機能を活用する方法がいくつかあるようです。**
:::

本記事では、その方法と代替案をまとめました。

### **1. Windows 10 Pro にアップグレードする**
Windows 10 Home では AD に参加する機能がないため、最も確実な方法は **Windows 10 Pro にアップグレードすること** です。調査したところ、以下の手順でアップグレードが可能なようです。

1. 「設定」→「更新とセキュリティ」→「ライセンス認証」に移動。
2. 「ストアに移動」をクリック。
3. Windows 10 Pro の購入画面が表示されるので、購入してアップグレードを実行。
4. アップグレードが完了したら、PC を再起動。
5. Active Directory ドメインへの参加は「設定」→「システム」→「バージョン情報」→「ドメインまたはワークグループ」にある「ドメインに参加する」から実行可能。

### **2. ローカルアカウントで AD リソースにアクセスする**
Windows 10 Home ではドメイン参加はできませんが、AD に接続されたリソース（共有フォルダやプリンターなど）には、**AD ユーザーアカウントを使用してアクセスすることが可能** であると分かりました。

#### **手順:**
1. エクスプローラーを開く。
2. アドレスバーに `\\サーバー名\共有フォルダ名` を入力。
3. 「ネットワーク資格情報の入力」画面が表示されるので、AD ユーザー名とパスワードを入力。
4. 正しく認証されると、ネットワーク共有フォルダにアクセス可能。

これにより、AD 環境の一部を利用することができるようです。

### **3. Azure AD に参加する**
Windows 10 Home では **オンプレミスの Active Directory には参加できません** が、**Azure Active Directory (Azure AD) には参加可能** であることが分かりました。企業や教育機関がクラウドベースの管理を行っている場合は、Azure AD への参加が有効なようです。

#### **手順:**
1. 「設定」→「アカウント」→「職場または学校にアクセスする」を開く。
2. 「Azure AD に参加する」を選択。
3. 企業や学校から提供された Azure AD アカウント情報を入力。
4. サインインすると、Azure AD に参加した状態になる。

Azure AD では、シングルサインオン (SSO) やデバイス管理などが利用可能になるとのことです。

### **4. VPN を活用して AD にアクセスする**
Windows 10 Home では直接 AD に参加することはできませんが、**VPN（仮想プライベートネットワーク）を使用して、AD 環境にリモートアクセスする** 方法があるようです。

#### **手順:**
1. **IT 管理者に VPN 設定情報を確認する**。
2. 「設定」→「ネットワークとインターネット」→「VPN」を開く。
3. 「VPN の追加」をクリックし、提供された VPN 設定情報を入力。
4. 接続後、エクスプローラーを開いて `\\サーバー名\共有フォルダ名` を入力してリソースにアクセス。

VPN を利用すると、リモートワーク環境でも AD ドメインの共有リソースを利用できるとのことです。

### **まとめ**
| 方法 | Windows 10 Home で利用可能か | 説明 |
|---|---|---|
| Windows 10 Pro へのアップグレード | ❌ | Windows 10 Pro にすると、AD に参加可能になる |
| ローカルアカウントで AD リソースにアクセス | ✅ | 共有フォルダやプリンターなどのリソースにアクセス可能 |
| Azure AD に参加 | ✅ | クラウドベースの Active Directory に参加可能 |
| VPN を活用して AD にアクセス | ✅ | VPN を使えば、AD のリソースを利用可能 |

調査した結果、Windows 10 Home ではオンプレミスの Active Directory に直接参加することはできませんが、**リソースの利用、Azure AD への参加、VPN 経由でのアクセス** など、いくつかの代替方法があるようです。

特に業務で Active Directory を利用する場合は、Windows 10 Pro へのアップグレードが最も確実な方法のようです。
半角数字を全角数字に変換して遊ぶ。


注意、いろいろ
----

- 過去ログをみょ
- M5NanoC6での予定は、未定

プログラム
----

オンラインコンパイラ


```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    
    char num[32] = "12.24"; //入力
    char out[64]; //出力
    int c=0; //カウンター
    
    //                0   1    2    3    4    5    6    7  
    char *tbl[] = { "Ｏ","Ｏ","Ｏ","Ｏ","Ｏ","Ｏ","Ｏ","Ｏ",
                    "Ｏ","Ｏ","Ｏ","Ｏ","Ｏ","Ｏ","．","Ｏ",
                    "０","１","２","３","４","５","６","７",
                    "８","９","：","Ｏ","Ｏ","Ｏ","Ｏ","Ｏ" };
    
    printf("START\n\n");
    printf("NUM = [%s]\n",num);

    for(int q = 0;num[q] != 0;q++){ 
        
        char al = num[q] - ' ';
        
        for(int i = 0; tbl[al][i] != 0;i++){
            out[c++] = tbl[al][i];
        }//for
    }//for
    out[c]=0;
  
    printf("OUT = [%s]\n",out);
    
}


```

```

START

NUM = [12.24]
OUT = [１２．２４]

```
統計検定1級　2021　統計数理　問5　解説

[4]式は追って行けたものの、なぜ結論がそうなるのかわかりません。ネットに投稿されている方々は優秀なのでしょうね。当然のように記載していますからね。私のような凡人は飛ばされた途中式の確認や根拠探しに手間取るのですよね。
![img20250307_10360308.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/66c5348f-146b-4a75-9a86-557760dc980d.jpeg)
![img20250307_10363151.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/d8244801-0be8-431f-b89d-11561adce322.jpeg)
PHPで「複数の条件分岐(if..elseif..else)」の動作を確認してみた。

# 概要

PHPで「複数の条件分岐(if..elseif..else)」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/if/index6.html

# 実装

以下のファイルを作成しました。

```sample.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
$domain = 'jp';

print 'ドメイン:'.$domain.'<br />';
if ($domain == 'in'){
  print 'インドのトップレベルドメイン';
}elseif ($domain == 'cn'){
  print '中国のトップレベルドメイン';
}elseif ($domain == 'jp'){
  print '日本のトップレベルドメイン';
}else{
  print '不明です';
}
?>
</p>

</body>
</html>
```

以下のコマンドを実行しました。

```
$ php sample.php 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
ドメイン:jp<br />日本のトップレベルドメイン</p>

</body>
</html>
```

# まとめ

何かの役に立てばと。
ナレッジ記事に関するトレイルヘッドのまとめ



# Salesforceナレッジをセットアップする > 記事を作成して管理する

+ [サービス設定＞オブジェクトマネージャー＞ナレッジ＞ページレイアウト＞How Toで 概要項目を追加して適用してみたのですが、変化ありませんでした](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PVtk2)

:::note
以下にも同じ質問があります。 


・複数のページレイアウトがあれば、全てに設定してみてください。 
・また、概要フィールドのフィールド レベルのセキュリティを確認してみてください 

https://trailhead.salesforce.com/trailblazer-community/feed/0D54S00000AOg0uSAD
:::


# 有効化できてない

+ [Where can I find object "knowledge" in object manager for finishing module "Configure Page Layouts and Record Types"?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000TjLXW)

:::note
1. From Setup, enter Knowledge in the Quick Find box and click Knowledge Settings.
2. On the Knowledge Settings page, click Edit.
3. Select Enable Lightning Knowledge

https://help.salesforce.com/s/articleView?id=service.knowledge_lightning_enable.htm&type=5
:::
【初心者向け】package.jsonの記載項目について調査してみた

# 概要
Node.jsを触り始めて1年が経ちました  
きちんと理解しようしようと思っていたpackage.jsonの存在  
今更ながらきちんと勉強して何のために存在するのか？どのように利用するのか？をまとめていこうと思います

# 対象者読者
- package.jsonについて知りたい初心者
- Node.jsを触り始めた初心者

# 本題
以下から調査内容をまとめていきます
## ざっくとした概要
- あらゆる Node プロジェクトの中心的な存在
- NPMに公開する前に必要なプロジェクトに関する重要なメタデータを記録し、依存関係のインストール、スクリプトの実行、パッケージへのエントリポイントの識別に npm が使用するプロジェクトの機能属性も定義
- プロジェクトのルート ディレクトリにあるJSONファイル
- プロジェクトに関する重要な情報が含まれている
    - メタデータ(プロジェクト名や説明)
    - パッケージのバージョン番号
    - アプリケーションにっ必要な依存関係のリスト

## 記載内容
記載例↓
```json:package.json
 {
        "name": "my-project",
        "version": "1.5.0",
        "description": "Express server project using compression",
        "main": "src/index.js",
        "scripts": {
            "start": "node index.js",
			"dev": "nodemon",
			"lint": "eslint **/*.js"
        },
        "dependencies": {
            "express": "^4.16.4",
			"compression": "~1.7.4"
        },
        "devDependencies": {
			"eslint": "^5.16.0",
            "nodemon": "^1.18.11"
        },
		"repository": {
			"type": "git",
			"url": "https://github.com/osiolabs/example.git"
		},
		"author": "Jon Church",
		"contributors": [{
			"name": "Amber Matz",
			"email": "example@example.com",
			"url": "https://www.osiolabs.com/#team"
		}],
		"keywords": ["server", "osiolabs", "express", "compression"]
    }

```
### main
- プロジェクトのエントリポイントを定義する
- パッケージ名がexample-libだった場合、このパッケージを使用するには`import * as example from example-lib`になる
- 必須項目

### scripts
- このパッケージ内で使用するコマンドを定義する
- scripts フィールドにコマンドを配置することで再利用できる
- 使用する際は`npm run <scriptName>`のように使用できる
- 必須項目

以下のようにすることでCDKのsynthとdeployコマンドをまとめることができる
```json:package.json
"scripts": {
    "deploy": "cdk synth and cdk deploy"
}
```

### repository
- プロジェクトが保存されているリポジトリを定義する
- 必須ではない

### dependencies
- package.jsonで最も重要なフィールドの1つ
- 本プロジェクトが依存しているパッケージを定義する
- npm install <pacakgeName>とすると勝手に記載される
- npm install <pacakgeName> --productionとするとdependenciesに記載されたパッケージのみがインストールされる(インストール時間短縮やディスク容量の削減の効果がある)
- 必須項目

### devDependencies
- 開発時にのみ必要な依存パッケージ(eslint,prettier,puppeteerなど)を定義する
- アプリ開発に必要なツールを文書化するために使用する


### name
- パッケージの名前を定義
- NPMに公開する場合は必須項目

### version
- パッケージのバージョンを定義
- NPMに公開する場合は必須項目(公開しない場合も使用することを強く推奨されている)

### license
- ライセンスを定義する
- 必須ではないが、何かしら記載することを推奨されている(NPMに公開しない場合は必要ない)

### author & contributors
- 著者名や寄稿者名を定義する
- 必須ではない

### description
- パッケージの説明を定義する
- 必須ではない

### keywords
- パッケージに関連する言葉を定義する
- NPMでパッケージを検索する際に役立つ
- 必須ではない


# 参考記事
- [What is package.json](https://heynode.com/tutorial/what-packagejson/)
- [dependencies, devDependencies の使い分けを考える](https://qiita.com/karur4n/items/3d9d28f6f21c3533020d)
- [package.jsonのdependenciesとdevDependencies](https://qiita.com/chihiro/items/ca1529f9b3d016af53ec)
- [【初心者向け】NPMとpackage.jsonを概念的に理解する](https://qiita.com/righteous/items/e5448cb2e7e11ab7d477)
- [【初心者向け】結局package.jsonって何なの？](https://qiita.com/xxseagullxx/items/4e1a0158028cf2348d21)
新卒1年目の新人エンジニアがWebアプリを作成する

# :black_medium_square: iOSアプリ開発の技術選定

## ✅ 必要な技術スタック
| カテゴリ | 技術 | 説明 |
|----------|-------------------------------|--------------------------------------------------|
| **フロントエンド（iOSアプリ）** | Swift | Apple推奨の開発言語 |
| | SwiftUI / UIKit | UIフレームワーク（最新: SwiftUI、従来: UIKit） |
| | Core Location | GPS位置情報取得 |
| | MapKit / Google Maps SDK | 地図表示 |
| **バックエンド（API & DB）** | FastAPI / Django | APIサーバー（FastAPI: 軽量 & 高速 / Django: 管理機能 & 認証） |
| | PostgreSQL / Firebase Firestore | データベース（RDB or NoSQL） |
| | AWS S3 / Firebase Storage | 画像・写真保存 |
| **通信（iOS ⇔ バックエンド）** | URLSession / Alamofire | API通信（標準: URLSession / 簡単: Alamofire） |
| | WebSocket（FastAPI） | リアルタイム通信 |


## 🛠 フロントエンド（iOSアプリ開発）

### **📌 使用技術**
- **Swift**（言語）
- **SwiftUI**（UIフレームワーク）
  - iOS 13以下をサポートするなら `UIKit` も選択肢
- **Core Location**（位置情報取得）
- **MapKit / Google Maps SDK**（地図表示）
- **CoreData / SQLite**（ローカルデータ保存）
- **URLSession / Alamofire**（API通信）

### **🌍 位置情報 & 地図**
```swift
import CoreLocation
import MapKit
```
- `Core Location` → ユーザーの現在地を取得
- `MapKit` → Apple純正の地図表示
- `Google Maps SDK` を使いたい場合は追加でライブラリ導入

## 🛠 バックエンド（API & データ管理）

### **📌 選択肢**
#### **✅ APIサーバー**
| 技術 | 特徴 |
|------|------|
| **FastAPI** | 軽量 & 高速、非同期処理が得意 |
| **Django REST Framework** | 認証や管理機能が充実 |

#### **✅ データベース**
| 技術 | 特徴 |
|------|------|
| **PostgreSQL** | スケールしやすいRDB |
| **Firebase Firestore** | NoSQL、スキーマレスで柔軟 |

#### **✅ 画像保存（写真管理）**
| 技術 | 特徴 |
|------|------|
| **AWS S3** | 大規模向け、セキュア |
| **Firebase Storage** | Firebaseと統合が楽 |


## 🛠 通信（iOS ⇔ バックエンド）

### **✅ API通信**
```swift
let url = URL(string: "https://example.com/api")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data {
        print(String(data: data, encoding: .utf8) ?? "")
    }
}.resume()
```

- `URLSession` → 標準API通信
- `Alamofire` を使うとより簡単に記述可能

### **✅ リアルタイム処理**

- **WebSocket（FastAPIが得意）** を使えばリアルタイム位置共有が可能

## 🎯 どれを選ぶべき？

| 機能              | おすすめ                                  |
| --------------- | ------------------------------------- |
| **シンプルにローカル保存** | SQLite / CoreData（バックエンド不要）           |
| **クラウド同期したい**   | Firebase Firestore + Firebase Storage |
| **カスタムAPIを作る**  | FastAPI + PostgreSQL                  |
| **SNSのように共有する** | Django + Django REST Framework        |
Powershellで名称末尾が半角スペースのフォルダを作ろうとするとハマる

# 結論

**環境: Windows 11 24H2 + Powershell ver. 7.5**

Powershellの `mkdir` コマンドレット、 `New-Item` コマンドレットでフォルダを作成する際、指定したフォルダ名の末尾に半角スペースがあっても、 **エラーは出ず、こっそりと半角スペースが削除されます** 。

すなわち、`mkdir "test "`としても、実際には **"test"** というフォルダが作成されてしまします。

思わぬバグの原因になるので、コマンドレットにわたす前に半角スペースを削ったほうが安全そうです。
# 詳細
## フォルダを作る例
```posh
$hoge = "test " # testの後に半角スペースがある。全部で5文字のはず。
#実際は$hogeにはユーザ・ファイルからの入力が入りますが…。
mkdir $hoge
```

```posh
[ C:\test ](˘ω˘)> $hoge ="test "
[ C:\test ](˘ω˘)> mkdir $hoge

    Directory: C:\test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/03/08     2:04                test
```
上記のコードを実行すると、以上の結果になります。Name欄がどうも4文字しかないようにみえるので、確かめてみましょう。

```posh
[ C:\test ](˘ω˘)> (Get-Item test).Name.Length
4
```

そう、4文字しかありません。引数で渡した`$hoge`の末尾にあったはずのスペースはしれっと無視されて、 **test** だけがフォルダ名になっています。
コードは省略しますが、New-Itemコマンドレットを使った場合も同じ挙動となります。

## ハマる例
上記の **mkdir** の仕様を前提とすると、以下のようなコードが想定外の挙動を示します。
```posh
$hoge ="test "
<#何かの処理
・・・#>
mkdir $hoge #変数で指定されたフォルダを作って
Set-Content -LiteralPath "$hoge/test.txt" -Value "hoge" #指定されたフォルダ内にファイルを出力する
```

```posh
[ C:\test ](˘ω˘)> $hoge ="test "
>> mkdir $hoge
>> Set-Content -LiteralPath "$hoge/test.txt" -Value "hoge"

    Directory: C:\test

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2025/03/08     2:12                test
Set-Content:
Line |
   3 |  Set-Content -LiteralPath "$hoge/test.txt" -Value "hoge"
     |  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     | Could not find a part of the path 'C:\test\test \test.txt'.

```

上記のコードを実行すると、出力先パスがないとのエラーが出て怒られてしまいました。
エラーの`Could not find a part of the path 'C:\test\test \test.txt'`との文言にあるとおり、 **"test \"** (半角スペースあり)というフォルダが存在しないと言われています。

実際に作成されたフォルダは **"test"** (半角スペースなし)なので当然のエラーですが、気づかないとハマりました。

## Test-Pathも信じられないこと
さらに、引数で指示したとおりのフォルダが作成されているか、`Test-Path`コマンドレットで調べてみても、無駄です。

```posh
$hoge = "test "
Test-Path $hoge
```

```posh
[ C:\test ](˘ω˘)> Test-Path $hoge
True
```

そう、 **Test-Pathコマンドレットも末尾のスペースを消してから存在判定をするので、"test"があるとして、Trueを返してくるのです** 。
したがって、変数で受け取ったフォルダ名については、`Test-Path`コマンドレットで存在を確認しても、そのまま当該フォルダ内にファイルを保存できるかは不明、ということになります。

## 安全な対応
```Posh
$hoge ="test "
<#何かの処理
・・・#>
$hoge = $hoge -replace "\s+$", "" #末尾の半角スペースを削除してから進む
mkdir $hoge #変数で指定されたフォルダを作って
Set-Content -LiteralPath "$hoge/test.txt" -Value "hoge" #指定されたフォルダ内にファイルを出力する
```
上記のコードを改変し、こうやって`mkdir`に渡す前に末尾の半角スペースを削除してやると安全かと思います。

## Windowsの仕様上、フォルダ名の末尾をスペースにすべきでないこと
なお、Windowsの仕様として、
>ファイルやディレクトリの名前の末尾をスペースまたはピリオドにしないでください。 基となるファイル システムがこのような名前をサポートしているとしても、Windows のシェルとユーザー インターフェイスではサポートされません。 

と明記されているので([ファイル、パス、名前空間の名前付け](https://learn.microsoft.com/ja-jp/windows/win32/fileio/naming-a-file))、フォルダ名の末尾に半角スペースをつけるべきでないことは明らかです。

ただ、 **mkdir**なり **New-Item** なりがエラーを出さずに勝手にスペースを削ったフォルダ名でフォルダを作るのはちょっと予想外の挙動なので、気をつけたほうが良さそうです。

以上。
Google ChromeにNotionの拡張機能を入れるとYoutubeの表示がおかしくなる場合がある

# 環境
Windows 11
Google Chrome

# 現象
ChromeでYoutubeで登録したチャンネルを開くと、これまでの投稿された動画が表示されない。特に動画、ライブが表示されない

# 原因
NotionのChrome用拡張機能をインストールすると発生する。拡張機能のテストのためインストールしてYoutubeを見た時に発生した。以下のPostもあり、これが原因の可能性が高い。

# 現時点の解決方法
Notionの拡張機能を削除する

# こちら

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">Google chromeの拡張機能、Chat to Notionを無効にしたらyoutubeの不具合が直りました。<br><br>2025年2月26日に更新がかかっていて、<br>その互換性の問題じゃないでしょうか。<br><br>ちょうどその日からおかしくなったので。 <a href="https://t.co/LSjunHKKq4">pic.twitter.com/LSjunHKKq4</a></p>&mdash; イロドリ｜Webデザイン (@irodori_dori) <a href="https://twitter.com/irodori_dori/status/1895641422998712326?ref_src=twsrc%5Etfw">March 1, 2025</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
AWS Cloud Practitioner Essentials (Japanese)  モジュール1 まとめ

# これはなに？
AWS認定クラウドプラクティショナーの勉強として、AWS Cloud Practitioner Essentials 1.0.2(Japanese) モジュール1の内容をまとめました。
[AWS Cloud Practitioner Essentials (Japanese)](https://explore.skillbuilder.aws/learn/courses/1875/aws-cloud-practitioner-essentials-ri-ben-yu/lessons) 

# 概要
クラウドコンピューティングを利用することで、
* 従量課金制によりコストを削減できる
* アプリケーションを素早く簡単にデプロイできる
* 競合他社との差別化に関係ない部分はAWSに任せて、差別化に集中できる

# 1. クラウドコンピューティングとは
従量課金制によるインターネット経由でのITリソースのオンデマンド配信。
<dl>
  <dt>従量課金制</dt>
  <dd>使った分だけ料金を支払う。<br>使っていない間は料金が発生しない。</dd>
  <br><dt>インターネット経由</dt>
  <dd>WEBページのコンソールやプログラムを使ってリソースにアクセスできる。</dd>
  <br><dt>オンデマンド配信</dt>
  <dd>必要な時に必要なリソースをすぐに使用開始できる。<br>必要でなくなればすぐに停止できる。</dd>
</dl>

# 2. AWSのサービスを利用するメリット
「画一的で面倒なITの作業」から解放され、競合他社と差別化することに注力できる。
<dl>
  <dt>画一的で面倒なITの作業</dt>
  <dd>単純で繰り返しが多く、時間がかかる一般的なタスク。<br>他社との差別化要因にはならない。<br>サーバーのセットアップやネットワーク設定など。</dd>
  <br><dt>画一的で面倒なITの作業ではないもの</dt>
  <dd>工夫や判断が求められるタスク。<br>他社との差別化要因になる。<br>アプリケーション独自の機能の設計、実装など。</dd>
</dl>

# 3. クラウドコンピューティングのデプロイモデル
<dl>
  <dt>クラウドベースのデプロイ</dt>
  <dd>アプリケーションのすべての部分をクラウドで実行する。<br>
  <dl>
    <dt>低レベルのインフラストラクチャ</dt>
    <dd>アンマネージドサービス。<br>ユーザーが直接管理する必要がある。<br>EC2、AuroraじゃないRDSなど。</dd>
    <dt>ハイレベルのサービス</dt>
    <dd>マネージドサービス。<br>AWSが自動で管理してくれる。<br>Lambda、Auroraなど。</dd>
  </dl>
  </dd>
  <br><dt>オンプレミスデプロイ（プライベートクラウドデプロイ）</dt>
  <dd>独自のクラウド環境を構築し、デプロイする。<br>仮想化ツールとリソース管理ツールを使用し、リソースの使用率を高める。</dd>
  <br><dt>ハイブリッドデプロイ</dt>
  <dd>クラウドベース+オンプレミス</dd>
</dl>

# 4. クラウドコンピューティングの利点
<dl>
  <dt>先行支出を変動費に切り替える</dt>
  <dd>オンプレミスでは、必要なリソース量を把握する前に先行支出が発生してしまう（データセンター、物理サーバなど）。<br>クラウドなら、実際に必要なリソース量に対してのみ支払うためコスト削減が可能。</dd>
  <br><dt>データセンターの維持管理にかかる費用が不要</dt>
  <dd>インフラストラクチャやサーバーを管理する負担が減り、アプリケーションや顧客に集中できる。</dd>
  <br><dt>容量の予測が不要</dt>
  <dd>実際に使用した分支払う。容量不足による制限なく、需要に応じてスケールアウト、スケールイン可能。
    <dl>
      <dt>スケールアウト</dt>
      <dd>サーバ台数を増やす</dd>
      <dt>スケールイン</dt>
      <dd>サーバ台数を減らす</dd>
      <dt>スケールアップ</dt>
      <dd>サーバ性能を上げる</dd>
      <dt>スケールダウン</dt>
      <dd>サーバ性能を下げる</dd>
    </dl>
  </dd>
  <br><dt>スケールメリット</dt>
  <dd>規模を大きくすることで効率、生産性などを向上させること。<br>各利用者が自前で環境をがんばって構築・維持管理するよりも、AWSがまとめてやったほうがお得。</dd>
  <br><dt>スピードと俊敏性</dt>
  <dd>アプリケーションの開発とデプロイが簡単になる。データセンターだと新しいリソースを取得するのに数週間かかることがあるが、クラウドなら数分で済む。</dd>
  <br><dt>世界中にデプロイ可能</dt>
  <dd>アプリケーションを世界中の顧客に低レイテンシーで提供できる。</dd>
</dl>
Atcoder 備忘録_一次元の累積和_問題B06

# 概要

- 競技プログラミングを始めてみた。
  せっかくなので１テーマごとに解法と学びをアウトプットしてみる。

## 取り組む内容
- 鉄則本[https://atcoder.jp/contests/tessoku-book] に沿って実施する。
- ![鉄則本.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636949/7525f26c-5077-422b-b6b6-cbfab34ef327.jpeg)
- 言語は Python
- 今回テーマは「一次元の累積和」

# 問題文
太郎君はくじをN回引き，i回目の結果はAiでした．
Ai=1のときアタリ,Ai=0のときハズレを意味します．「L回目からR回目までの中では，アタリとハズレどちらが多いか？」という形式の質問がQ個与えられるので，それぞれの質問に答えるプログラムを作成してください

## 制約
- 1≤N,Q≤10^5
- 0≤Ai≤1
- 1≤Li≤Ri≤N
- 入力はすべて整数

## 出力
i=1,2,3,…,Q それぞれについて，アタリの方が多い場合winを，ハズレの方が多い場合loseを，アタリとハズレが同じ場合drawを,一行ずつ総計Q行に出力してください．

# 解法
```
N = int(input())
A = list(map(int, input().split()))
Q = int(input())

L = [None] * Q
R = [None] * Q

for i in range(Q):
  L[i], R[i] = map(int, input().split())

S = [None] * (N+1)
S[0] = 0
for j in range(N):
  S[j+1] = S[j] + A[j]
  
for k in range(Q):
  win = S[R[k]] - S[L[k]-1]
  lose = R[k] - L[k] + 1 - win
    
  if win > lose:
      print("win")
  elif win == lose:
      print("draw")
  else:
      print("lose")
```

# 結果
- AC
- Runtime： 201 ms
- メモリ：21184 KB

# 振り返り
## 思想
- Qが少なければ逐一winの数をカウントしてもよいが、多い場合は同じ計算を繰り返すことになる（O(L(i))）ため最初に累積和を作ってやって、差分を計算するだけで済むようにする(O(1))

## 学び
- リストを足していくとき、append使いがちだったが[i+1] = [i] + α って形にすれば読みやすいコードになるなと思った
- リストのindexなどpythonは0始まりで現実世界では1始まりが多いと思うが、pythonリスト側のindex0をなんらか数値やNullなどで埋めてやってindexを合わせると読みやすいしindexズレが起こることも防げるので良いなと思った
## 感想
- こういう問題集って章ごとのトピックを知って問題を解くから、今回でいうと「累積和を使うんだろうな」って思って解くけど、実務の際に気づくことができるのだろうか？頑張れ自分
ITエンジニア3年過ぎてキャリアがまずいことに気づく

# 自己紹介
私は新卒でITエンジニアになって3年が過ぎた者です。上場事業会社のITエンジニアとして日々開発や運用業務に従事しています。
## 経歴
- 情報系大学院修了
- 新卒で事業会社のITエンジニア
- 現在ITエンジニア3年経験
# 記事を書く動機
今回ポエムめいたものを書こうと筆をとったきっかけは転職活動を始めて自分のキャリアが少しまずいことになっていることに気づいたからです。
転職活動をし始めた理由は、私は都内で暮らしており年収が低く、近年の物価高も相まって生活が一向に楽にならないことに不満を覚えたのがことのはじまりです。

# 転職活動を始めて直面した課題
というわけで転職エージェントに登録したり転職サイトの求人を漁ってみたりしたわけですが、そこで直面したのは自分の市場価値があまり高くないということでした。
転職エージェントが勧めてきた求人の募集要項をざっと読んでみると年収があまり高くなかったり自分でよさげだなと思った求人のMUST要件やWANT要件に自分のスキルが到達していないことが判明しました。
思うに現在勤めている会社では新規サービス・システムを開発することはなく、古くから使用されてきた社内システムの修正が主な業務となっていることから、市場価値が高いスキルが身につけられていないことが理由かと推測しています。
そこでここまで読んでくださった人は、実務で自分が思うような経験を積められないのなら個人的に勉強すればいいと思われるかもしれません。
自分でもそう思っているため技術書を読んでみたり実務で触れないAWSのハンズオンを試したりとしたのですが、企業が欲しがる実務経験としては数えられないため、なかなか対外的にアピールできるものではないと思うようになりました。
# 鶏が先か卵が先か
豊かな実務経験を積むためには実務経験を募集要項の要件に掲げている企業に入らなければいけない。
鶏が先か卵が先か。
いったいどうすれば自分が思うようなキャリアを築けられるのか、途方に暮れました。

# 転職活動の進捗
現在の転職活動での進捗としては下記のようになります。
それぞれの項目のカッコ内は(通過数/(通過数+お祈り数))を表します。
- 書類通過(12/16)
- 一次面接通過(1/1)
- 最終面接(0/0)
- 内定(0/0)


エントリーして思ったのがやはりスキル不足も相まって人気企業には軒並み書類選考で落ちるということでした。
一次面接に進められるのは市場価値が高められる気がしない企業がほとんどです。
ショックでしたが現実として受け止めて選考をこれからも進めていきます。
# 今後
実務経験を効率的に積む方法を見いだせていませんが今後もひっそりと転職活動を進めていこうと思います。
なにかご意見やアドバイスがありましたら有り難いため気軽にコメントいただければと思います。
駄文読んでいただきありがとうございました。


## 【追記】
書類選考、１次面接はすべて選考落ちしたため転職活動は一時休止しました。
面接での受け答えが相当問題あることは自覚しても直せないため行き詰りました。
面接中の面接官が明らかに興味なさそうな反応をしていくのは精神にきてしまいました。
[セキュリティ] インテリジェンス収集とOPSECの基本

本記事では、**インテリジェンスの定義**、**収集サイクル**、そして**各収集手法の概要**を、オペレーションセキュリティ（OPSEC）の視点から簡潔にまとめます。

## インテリジェンスの定義
インテリジェンスとは、情報の**収集**・**整理**・**評価**・**分析**・**統合**・**解釈**を経て作成される情報製品です。国家や企業の安全保障・戦略決定のため、複数の情報源から得たデータをもとに、状況を正確に把握するために活用されます。

## インテリジェンスサイクル
インテリジェンスの生成プロセスは主に以下の**5段階**で構成されます。

1. **計画・指揮**  
   収集の目的を設定し、タスクを割り当てるフェーズ

2. **収集**  
   人的、技術的、公開情報など多様な手段で情報を獲得

3. **処理**  
   収集したデータを解析可能な形式に変換

4. **生産**  
   分析結果を統合し、最終的な情報製品としてまとめる

5. **配信**  
   利用者へ正確な情報を提供する

## 主な収集手法
- **HUMINT**  
  人的情報源（外交官、軍事関係者など）を利用した情報収集

- **SIGINT**  
  通信や電子信号の傍受による収集

- **MASINT**  
  センサーによる計測と分析で、特有の「署名」から情報を抽出

- **IMINT**  
  衛星や航空機による画像収集

- **OSINT**  
  公開情報やインターネット上のデータから情報を収集

さらに、これら各手法を統合する**「オールソースインテリジェンス」**により、より正確な状況判断が可能となります。

## OPSECへの示唆
OPSECプログラムマネージャーは、敵対者がどのように情報を収集しているかを理解することで、施設や作戦の脆弱性を把握し、適切な防御策や欺瞞戦略を講じることができます。

この記事は、インテリジェンス収集の基本とそのプロセスを短くまとめたものです。さらなる詳細情報については、各専門書や公式資料を参照してください。

## 参考文献
[1] U.S. National Security Agency, “Threat 96: Part II – Intelligence Disciplines,” Federation of American Scientists, 1996. [Online]. Available: https://irp.fas.org/nsa/ioss/threat96/part02.htm. [Accessed: Mar. 08, 2025].

**Happy Hacking!**
[効率化] キーボード設定テンプレート: Mac向け:カラビナエレメンツ

この記事では、macOS向けキーボードカスタマイズツール「**Karabiner-Elements**」を利用した設定テンプレートを紹介します。特に、**CapsLockのリマッピング**や**Hyperキーの設定**など、作業効率を向上させるための基本的なカスタマイズ方法を解説します。

## はじめに
**Karabiner-Elements**は、macOS上でキーボードの挙動を自由にカスタマイズできるツールです。プログラマーやパワーユーザーの間で人気があり、独自のショートカットやリマッピングを設定することで、日々の作業効率を大幅に向上させることができます。

この記事では、以下の2点について解説します。

- **CapsLockキーをEscapeキーに変更する設定**
- **右CommandキーをHyperキーとして利用する設定**

## 設定テンプレートの概要
下記は、基本的なキーボード設定のテンプレート例です。**JSON形式**で記述しており、Karabiner-Elementsの「**Complex Modifications**」として適用できます。

[https://github.com/richard-c5/karabiner-config](https://github.com/richard-c5/karabiner-config)

## 設定の適用方法

### Karabiner-Elementsのインストール
公式サイトから**最新版**をダウンロードしてインストールしてください。

https://karabiner-elements.pqrs.org/

### 方法2: 設定の有効化
Karabiner-Elementsを起動し、「**Complex Modifications**」タブで「**Add rule**」をクリックし、表示されるGUIで直接jsonを入力して設定を追加します。

### 方法1: 設定ファイルの配置
作成した設定ファイルを、以下のディレクトリに保存します。
`~/.config/karabiner/assets/complex_modifications/`

## まとめ
今回ご紹介したテンプレートは、**Macのキーボード設定を効率化**するための一例です。ご自身の利用シーンに合わせて、さらにカスタマイズすることで、より快適な作業環境を構築できます。設定に関するご質問や改善のアイデアがありましたら、ぜひコメントでシェアしてください。

**Happy Hacking!**
[RSpec] Controllerのテスト api mode

controllerのテストを実行する場合は、requestのテストを作成します。

```
$ rails generate rspec:request users
```

APIモードのRailsなので、基本はJSONの戻り値を判定します。

factorybotを利用した例です。
ログイン処理はshared contextで共通化しています。

https://qiita.com/kandalog/items/b52352eed930e50bd73d


requestの送り方は以下のようにきじゅつ
```
before { get '/users' }
```

例
```rb
require 'rails_helper'

RSpec.describe "Users", type: :request do
  let!(:user) { create(:user) }

  after { User.destroy_all }

  describe "GET /users" do
    before { get '/users' }

    it 'ユーザー覧を取得できる' do
      expect(response).to be_successful
      expect(body.size).to eq(1)
    end
  end

  describe "GET /users/:id" do
    before { get "/users/#{user.id}" }

    it 'ユーザーを取得できる' do
      expect(response).to be_successful
      pp user.id
      expect(body['id']).to eq(user.id)
    end
  end

  describe "POST /users" do
    before { post '/users', params: { user: { email: 'sample@example.com', password: "Password123!" } } }

    it 'ユーザーを作成できる' do
      expect(response).to be_successful
      expect(body['email']).to eq('sample@example.com')
    end
  end

  describe "PUT /users/'id" do
    include_context 'login setup'

    it 'ユーザーを更新できる' do
      put "/users/#{login_user.id}",
        params: { user: { email: "updated@gmail.com", password: "Password1234!" } },
        headers: login_headers

      expect(response).to be_successful
      expect(body['email']).to eq('updated@gmail.com')
    end
  end

  describe "DELETE /users/:id" do
    before { delete "/users/#{user.id}" }

    it 'ユーザーを削除できる' do
      expect(response).to be_successful
      expect(User.count).to eq(0)
    end
  end
end
```
Prisma導入手順について

# はじめに
Prismaを導入する手順について簡単にまとめます。

# 前提
Node.jsはインストール済みとします。
そして任意のnpmプロジェクトフォルダを用意します。
```sh
mkdir hello-prisma
cd hello-prisma
npm init -y
```

# Prismaのインストール
まずPrismaをインストールを行います。

```sh
npm install prisma --save-dev
```

その後、Prismaの初期化を行います。
```sh
npx prisma init --datasource-provider sqlite
```

このコマンドを実行することで、プロジェクトに prisma ディレクトリが作成され、その中に schema.prismaファイルが含まれます。
今回は`--datasource-provider sqlite`を指定することでSQLiteを使用するように初期化を行います。

# Prismaスキーマの設定
次にスキーマと呼ばれるデータモデルを定義します。
初期化時に生成されたschema.prismaファイルに記述します。
ユーザー情報をDB保存することを例にして見ていきます。
```prisma
model User {
  id        Int      @id @default(autoincrement())
  name      String
  email     String   @unique
  createdAt DateTime @default(now())
}
```

# [初回のPrisma Migrate](https://www.prisma.io/docs/orm/prisma-migrate/getting-started)
モデルを定義した後、データベースに反映させる必要があります。
スキーマ定義の通りに、データベース構造を生成します。
以下のコマンドを実行してマイグレーションを作成します。

```sh
npx prisma migrate dev --name init
```

これにより、データベースのスキーマが更新され、Prismaクライアントが自動的に生成されます。

# Prisma Clientの使用
## [Prisma Clientとは](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/introduction)
Prisma Clientを使って、アプリケーション内でデータベースにアクセスします。
作成したスキーマに対してDB操作を行うためのクライアントというイメージです。
以下のコマンドを実行することで、スキーマに合わせて自動生成されます。
```sh
npx prisma generate
```

ここでポイントとしてPrisma スキーマに変更が加えられる度に、生成された Prisma Clientも再生成が必要です。
[公式ドキュメント](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/generating-prisma-client)がわかりやすかったため拝借します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1518953/781a1f65-5a47-4e81-ac26-6a7d53bae3b2.png)
青色フローの通り、アプリケーションの変更(スキーマの変更)の度に`prisma generate`を実行する流れとなります

### [Prisma Clientのインスタンス化](https://www.prisma.io/docs/orm/prisma-client/setup-and-configuration/instantiate-prisma-client)
Prismaクライアントは、生成されたクライアントをインポートしてインスタンス化することで使用できます。
```js
import { PrismaClient } from '@prisma/client'

const prisma = new PrismaClient()
```

## 試してみる
例えば、ユーザーを作成するコードは以下のようになります。

```javascript
const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

async function main() {
  const newUser = await prisma.user.create({
    data: {
      name: 'Taro',
      email: 'taro@example.com',
    },
  });
  console.log(newUser);
}

main()
  .catch((e) => console.error(e))
  .finally(async () => {
    await prisma.$disconnect();
  });
```

script.jsを作成して上記を記述した後、スクリプトを実行します。
```sh
node script.js
```

以下のようにプロンプトに表示されます。
ユーザーが保存されていること確認できます。
```sh
{
  id: 1,
  name: 'Taro',
  email: 'taro@example.com',
  createdAt: 2025-03-07T19:51:04.223Z
}
```

## 参考
以下、ハンズオン手順となります。

https://www.prisma.io/docs/getting-started/quickstart-sqlite