OmniAICreator/Qiita-1.07M huggingface dataset:
連載 [第7回] :優秀なオフショアエンジニアを引き留めるには？成功企業の秘訣とは

連載 [第7回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### 優秀なオフショアエンジニアを引き留めるには？成功企業の秘訣とは  

近年、日本企業がベトナムをはじめとするオフショア開発を積極的に活用するケースが増えています。しかし、多くの企業が直面する課題の一つに「優秀なエンジニアを長期的に確保すること」があります。せっかく優秀なオフショアエンジニアを採用しても、すぐに離職されてしまっては、ノウハウの蓄積が難しくなり、プロジェクトの安定性にも悪影響を及ぼしかねません。  

では、どのようにすれば優秀なエンジニアを長く引き留めることができるのでしょうか？今回は、成功している企業の事例をもとに、具体的な施策を解説していきます。  

---  

## 🔹 **1. 「価格」ではなく「価値」を提供する**  
オフショア開発を「コスト削減の手段」としてのみ捉えると、エンジニアのモチベーションを維持することは困難です。特に優秀なエンジニアは、単なる「安い労働力」ではなく、自分のスキルを活かして成長できる環境を求めています。  

✅ **キャリアパスの提供**: 技術スキル向上のための研修、リーダーシップ教育の機会を提供  
✅ **適正な報酬体系**: 市場価値に見合った給与体系と適正な昇給制度の導入  
✅ **開発の自由度**: 創造性を発揮できるタスクや最新技術の導入を積極的に行う  

---  

## 🔹 **2. 信頼関係を築くマネジメントの工夫**  
オフショアチームとの関係が単なる「発注者ー受注者」の関係ではなく、「パートナーシップ」として構築されている企業は、エンジニアの定着率が高い傾向にあります。  

✅ **適切なフィードバックの提供**: 「何が悪いのか」だけでなく、「どう改善すればよいか」を伝えることで、成長をサポート  
✅ **定期的な1on1ミーティング**: エンジニアの悩みやキャリアの希望を把握し、働きやすい環境を作る  
✅ **文化の違いを理解する**: 日本とベトナムの働き方や価値観の違いを尊重し、柔軟な対応を心がける  

---  

## 🔹 **3. 長期的な関係を築くための福利厚生と企業文化**  
単なる報酬だけでなく、働く環境や文化もエンジニアの定着に大きく影響します。成功している企業は、現地のニーズに合った福利厚生や働きやすい環境づくりに注力しています。  

✅ **柔軟な勤務制度**: リモートワークやフレックスタイムの導入  
✅ **チームビルディングの機会**: 定期的なオフラインミーティングや交流イベントの実施  
✅ **開発環境の整備**: ハイスペックなPCの提供や、最新ツールの導入  

---  

## ✅ **まとめ**  
オフショア開発において「優秀なエンジニアを採用すること」は大事ですが、それ以上に「長く働いてもらうこと」が成功の鍵を握ります。単なるコスト削減の手段ではなく、共に成長できる環境を整えることで、エンジニアのモチベーションを維持し、結果として高品質な開発が実現できます。  

**皆さんの会社では、オフショアエンジニアの定着率を向上させるために、どのような施策を行っていますか？**  
ぜひコメントで意見を共有してください！
連載 [第6回] :オフショア開発のコスト最適化：品質を落とさずにコストを削減する方法

連載 [第6回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **オフショア開発のコスト最適化：品質を落とさずにコストを削減する方法**  

こんにちは、バイナリテックのイサムです！  
このシリーズでは、日本企業がベトナムオフショア開発を成功させるためのポイントを解説しています。  

今回のテーマは **「オフショア開発のコスト最適化」** です。  

✔ **「オフショアを使えばコスト削減できるはずなのに、結局コストが高くついてしまった…」**  
✔ **「安いエンジニアを使ったら、品質が悪くてリカバリーコストが発生した…」**  
✔ **「最初の見積もりよりもコストが膨れ上がってしまった…」**  

こんな悩みを抱えていませんか？  

オフショア開発は、**適切に運用すればコストを大幅に削減できます**。  
しかし、「単に安いエンジニアを雇う」だけでは、**結果的に品質低下や手戻りが発生し、トータルコストが高くなる** ケースも少なくありません。  

そこで今回は、**「品質を維持しながらオフショア開発のコストを最適化する方法」** を詳しく解説します！  

---

## **なぜオフショア開発のコストが膨れ上がるのか？**  

オフショア開発のコストが想定以上にかかる原因は、主に以下の5つです。  

### **❌ よくあるコスト増加の要因**  

1️⃣ **要件定義・仕様が曖昧で、手戻りが発生する**  
　→ 仕様変更のたびに追加費用がかかり、コストが増大する。  

2️⃣ **安いエンジニアを採用したが、品質が低すぎる**  
　→ 修正コストやリファクタリングが発生し、結果的に高くつく。  

3️⃣ **日本側の対応コストが想定より高くなる**  
　→ オフショアの管理・教育・レビューに手間がかかり、コスト削減にならない。  

4️⃣ **プロジェクト管理が不十分で、開発効率が悪い**  
　→ 進捗遅延や無駄な作業が発生し、工数が膨らむ。  

5️⃣ **長期的なスキル育成がされていない**  
　→ 同じミスを繰り返し、毎回コストがかかる。  

では、**どうすればこれらの問題を防ぎながら、コストを最適化できるのか？**  
次のセクションで具体的な方法を紹介します。  

---

## **品質を維持しながらコストを削減する5つの方法**  

### **1️⃣ 要件定義を徹底し、手戻りを最小限にする**  

**コスト削減の最大のポイントは「手戻りを減らすこと」** です。  
仕様が曖昧だと、開発側で誤解が生じ、何度も修正することになります。  

✅ **効果的な方法**  
✔ **ユーザーストーリーと受け入れ基準を明確にする**  
✔ **プロトタイプ（ワイヤーフレーム）を作成し、視覚的に仕様を共有**  
✔ **仕様変更を最小限に抑えるため、事前に関係者と合意形成を取る**  

👉 **要件を明確にすることで、手戻りによるコスト増加を防げます！**  

---

### **2️⃣「最安」ではなく「最適」なエンジニアを選ぶ**  

「単価が安いから」という理由だけでエンジニアを選ぶと、  
**品質が低すぎてリカバリーに余計なコストが発生する** ことがあります。  

✅ **エンジニア選定のポイント**  
✔ **開発経験・スキルをチェックする（ポートフォリオ、技術試験）**  
✔ **過去のプロジェクト実績を確認し、レビューの評価を見る**  
✔ **単価とスキルのバランスを考慮し、「コストパフォーマンスの高い人材」を選ぶ**  

👉 **「安さ重視」ではなく、「コスト対効果の高い人材」を選ぶことが重要！**  

---

### **3️⃣ 日本側の管理コストを削減する**  

オフショア開発では、日本側の管理負担が増えることで、  
**「結局オフショアを使ってもコスト削減にならなかった」** というケースがあります。  

✅ **管理コストを削減するポイント**  
✔ **仕様書・設計書を充実させ、説明コストを減らす**  
✔ **タスク管理ツール（JIRA, Trello, ClickUpなど）を活用し、進捗管理を効率化**  
✔ **オフショアリーダーを育成し、日本側の管理負担を軽減**  

👉 **日本側の対応コストを最小限にすることで、トータルコストを削減できます！**  

---

### **4️⃣ プロジェクト管理を徹底し、無駄な工数を減らす**  

オフショア開発では、**コミュニケーションのズレによる無駄な作業** が発生しがちです。  
そのため、**プロジェクト管理の強化がコスト削減につながります！**  

✅ **プロジェクト管理のポイント**  
✔ **毎朝短いスタンドアップミーティングで進捗確認（Scrum, Agile）**  
✔ **週次レビューで課題を洗い出し、早期に修正**  
✔ **「小さなタスクに分割し、短いサイクルでリリース」することで、ミスを最小限に抑える**  

👉 **進捗管理を強化することで、無駄な工数を削減し、コストを最適化できます！**  

---

### **5️⃣ 長期的なスキル育成で、毎回のコストを抑える**  

毎回「同じミス」が発生すると、そのたびに修正コストが発生します。  
**エンジニアのスキルを育成することで、長期的にコスト削減が可能です！**  

✅ **スキル育成のポイント**  
✔ **コードレビューを活用し、品質基準を明確にする**  
✔ **技術ドキュメントを蓄積し、ナレッジ共有を行う**  
✔ **優秀なエンジニアを育成し、プロジェクト全体の品質を底上げする**  

👉 **短期的なコスト削減だけでなく、長期的な投資として考えることが重要です！**  

---

## **まとめ：コスト削減のための5つのポイント**  
✅ **要件定義を徹底し、手戻りを最小限にする**  
✅ **「最安」ではなく「最適」なエンジニアを選ぶ**  
✅ **日本側の管理コストを削減する**  
✅ **プロジェクト管理を徹底し、無駄な工数を減らす**  
✅ **長期的なスキル育成で、毎回の修正コストを抑える**  

---

オフショア開発のコスト削減には、単純に「単価の安いエンジニアを使う」だけでは不十分です。  
**適切なプロジェクト管理と戦略的な人材育成により、品質を維持しながらコストを最適化できます！**  

次回は、**「オフショアの優秀なエンジニアを引き留めるには？成功企業の秘訣」** について詳しく解説します！  

それでは、また次回！ 🚀
連載 [第5回] :オフショア開発におけるコードレビュー：ストレスなくフィードバックを受け取る方法

連載 [第5回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **オフショア開発におけるコードレビュー：ストレスなくフィードバックを受け取る方法**  

こんにちは、バイナリテックのイサムです！  
このシリーズでは、日本企業がベトナムオフショア開発を成功させるためのポイントを解説しています。  

今回は、**「コードレビュー」** に焦点を当てます。  

✔ **「レビューコメントをすると、開発者のモチベーションが下がる…」**  
✔ **「オフショア側のコードの品質がなかなか向上しない…」**  
✔ **「フィードバックをしたら反論され、雰囲気が悪くなった…」**  

こんな経験はありませんか？  

コードレビューは、開発品質の向上に不可欠なプロセスですが、  
「どのようにフィードバックを伝えるか？」によって、チームの関係性や生産性に大きく影響します。  

特に、文化の異なるオフショアチームとのやり取りでは、**ちょっとした伝え方の違いが、大きな誤解や摩擦を生むことも…**。  

そこで今回は、**「ベトナムのエンジニアにストレスなくフィードバックを伝え、コードの品質を向上させる方法」** を紹介します！  

---

## **なぜオフショアのコードレビューは難しいのか？**  

日本の開発現場では、コードレビューは当たり前のプロセスですが、  
オフショアチームとのコードレビューでは、以下のような問題が起こりがちです。  

### **❌ よくある課題**  
1️⃣ **指摘すると、相手が防御的になる**  
　→「なぜこの書き方ではダメなのか？」と反論され、レビューがスムーズに進まない。  

2️⃣ **レビューコメントを真面目に受け止めすぎる**  
　→ 小さな修正でも「自分のコードが全否定された」と感じ、モチベーションが低下。  

3️⃣ **指摘しても、同じミスが繰り返される**  
　→ 毎回同じことを指摘しているのに、なぜか改善されない…。  

---

## **オフショア開発で効果的なコードレビューのポイント**  

### **1️⃣ フィードバックは「提案型」で伝える**  

**❌ NGな指摘例:**  
🔹 「この書き方は間違っています。修正してください。」  
🔹 「なんでこんなコードを書いたの？」  

**✅ OKな指摘例:**  
🔹 「この部分を `map()` に置き換えると、よりシンプルになりますね！」  
🔹 「こちらのコードですが、こうすると可読性が上がると思いますが、どうでしょう？」  

👉 **「ダメ」ではなく、「こうするともっと良くなる」** という形で伝えると、受け入れられやすくなります。  

---

### **2️⃣ まずポジティブなコメントを入れる**  

いきなり「ここを直してください」と言われると、相手は萎縮してしまいます。  
そのため、**まず良い点を褒めてから、改善点を伝える** のが効果的です。  

**✅ 良い例:**  
「この関数、シンプルで分かりやすいですね！ もし `reduce()` を使うと、さらに処理を短くできるかもしれません。」  

👉 **最初にポジティブなコメントを入れることで、指摘を前向きに受け止めてもらいやすくなります！**  

---

### **3️⃣ レビュー基準を明確にし、指摘の一貫性を保つ**  

ベトナムのエンジニアは、「明確なルールがあれば、それを忠実に守る」傾向があります。  
そのため、**レビュー基準を事前に明確にしておく** ことが大切です。  

✅ **事前に決めるべきルール**  
✔ コーディング規約（変数命名、関数の長さ、コメントの書き方など）  
✔ 使用するデザインパターン  
✔ テストの基準  

👉 **「なぜダメなのか？」を説明する時間を減らし、レビューを効率化できます！**  

---

### **4️⃣ チャットではなく、定期的に口頭で説明する**  

テキストだけのやり取りでは、意図が正しく伝わらないことがあります。  
特に、文化の違いがある場合、**ニュアンスを補足することが重要** です。  

✅ **効果的な方法**  
✔ **週1回、コードレビューの振り返りミーティングを行う**  
✔ **口頭で「なぜこうするのか？」を説明し、相手の理解度を確認する**  

👉 **テキストだけでなく、会話を交えることで、レビューがスムーズになります！**  

---

## **まとめ：ストレスなくフィードバックを受け取るためのポイント**  
✅ **提案型のフィードバックを心がける**（ダメ出しではなく、改善案を提示）  
✅ **まずポジティブなコメントを入れる**（最初に良い点を伝える）  
✅ **レビュー基準を明確にする**（ルールを統一し、指摘の一貫性を保つ）  
✅ **チャットだけでなく、定期的に口頭で説明する**（誤解を防ぐために会話も活用）  

---

オフショアのエンジニアとのコードレビューは、最初は難しく感じるかもしれません。  
しかし、**適切な伝え方を工夫すれば、相手も前向きに受け止め、コードの品質向上につながります！**  

次回は、**「オフショア開発のコスト最適化：品質を落とさずにコストを削減する方法」** について詳しく解説していきます！  

それでは、また次回！ 🚀
meilisearchで得た結果を新着順に並べたい

Meilisearchを使っていて、結果を新着順に並べたいケースがあったのですが、割と調べることになったのでメモを残します。

Meilisearchの概要は省略します。
[ドキュメント](https://www.meilisearch.com/docs)を参考にしてください。

## Meilisearchでのランキングルール
Meilisearchでは、検索クエリを用いてインデックス内のデータを絞った後にランキングルールを用いて並び替えを行います。

1. Words（検索クエリとマッチしている方が良い）
1. Typo（タイポが少ないほどよい）
1. Proximity（検索対象の文章中でマッチした語間の距離が近いほどよい）
1. Attribute（その他の属性でソートする）
1. Sort（指定したソートを実行）
1. Exactness（検索クエリと一致してる方が良い）

meilisearchではバケツソート的な考え方を採用してるので、1の条件でソートを行い、1が同列であれば2でソート, ...といった具合に上位に設定されているルールの影響が強く結果に反映されます。

## 本題：新着順ソート　

前節の理由から、`timestamp`のようなAttributeを追加して、結果が新着順になるように以下のように検索クエリを投げたとしても、Word等の結果が優先されるため思った通りの結果が得られないことがあります。
```js
client.index('books').search('science fiction', {
  sort: ['timestamp:desc'],
})
```

では、どうするかというと、ランキングルールを書き換えるのが良いです。

```js
client.index('movies').updateRankingRules([
    'sort',
    'words',
    'typo',
    'proximity',
    'attribute',
    'exactness',
])
```

これでソートを効かせたい時だけ、ソートを有効に出来ます。

# 参考
https://www.meilisearch.com/docs/learn/relevancy/ranking_rules
https://www.meilisearch.com/docs/learn/filtering_and_sorting/sort_search_results
https://www.meilisearch.com/docs/reference/api/settings#ranking-rules


# 現在、仲間を募集中！

株式会社ホープでは、福岡で働くエンジニアを募集中です。
ぜひ、求人を見てみてください！
▼ Wantedly求人
https://www.wantedly.com/projects/1684027
▼ コーポレートサイト
https://www.zaigenkakuho.com/recruit/
「自治体を通じて人々に新たな価値を提供し、会社及び従業員の成長を追求する」
この理念の実現に向けて、今後も自治体の課題解決に取り組んでいきます。
ご応募お待ちしております！
Webアプリケーション入門：セキュリティリスクを回避するためのログイン認証についてまとめてみた

## はじめに

インターネットサービスやシステムにアクセスする際、ログインは基本的な機能の一つです。

本記事では、ログインの仕組みとセキュリティ対策について詳しく解説します。

---

## 1. 基本的なログインの流れ

### ① ユーザー認証
ユーザーはID（またはメールアドレス）とパスワードを入力し、ログインフォームから送信します。

### ② 認証情報の検証
システムは以下の手順で認証を行います。
- 送信されたIDをデータベースで検索
- 該当するユーザーのハッシュ化されたパスワードを取得
- 入力されたパスワードをハッシュ化し、データベースのハッシュ値と比較
- 一致すれば認証成功、不一致なら認証失敗

### ③ セッションやトークンの発行
認証に成功した場合、サーバーはセッションIDまたはJWT（JSON Web Token）を発行します。
- セッションIDはサーバー側で管理し、クライアントのCookieに保存されます。
- JWTはクライアント側で保持し、リクエストごとにサーバーに送信されます。

### ④ 認可（アクセス制御）
ユーザーの権限を確認し、特定のページや機能へのアクセスを制限します。

---

## 2. ログインの種類

### ① セッションベース認証
- ユーザーがログインすると、サーバーがセッションIDを発行。
- クライアントはCookieにセッションIDを保存し、リクエストごとに送信。
- サーバー側でセッションを管理するため、スケールしづらい。

### ② トークンベース認証（JWTなど）
- 認証成功後、サーバーはJWTを発行し、クライアント側で保存。
- 各リクエストのヘッダーにJWTを含めて送信。
- サーバー側にセッション情報を保存しないため、スケーラブル。

### ③ OAuth（外部認証）
- GoogleやFacebookなどの外部サービスを使って認証。
- 認証プロバイダーがアクセストークンを発行し、システムへアクセス。

### ④ SSO（シングルサインオン）
- 一度のログインで複数のサービスにアクセス可能。
- 企業の社内システムやクラウドサービスでよく使用される。

---

## 3. 安全なログインのための対策

### ① パスワードのハッシュ化
- `bcrypt` や `PBKDF2` などのアルゴリズムでハッシュ化して保存。
- ソルトを使用し、レインボーテーブル攻撃を防止。

### ② 二段階認証（2FA）
- SMSや認証アプリを利用し、追加の認証コードを入力。
- 不正ログインを防ぐ強力な手段。

### ③ CSRF/XSS対策
- CSRF（クロスサイトリクエストフォージェリ）対策として、CSRFトークンを利用。
- XSS（クロスサイトスクリプティング）対策として、入力データのエスケープ処理を行う。

### ④ ログイン試行回数制限
- 連続してログイン失敗した場合、一定時間アカウントをロック。
- ブルートフォース攻撃を防ぐための重要な対策。

---

## まとめ

ログインの仕組みは、認証・認可・セッション管理の3つのステップで構成されています。

:::note info
**特にセキュリティ対策を適切に実装することが、安全なシステム運用の鍵となります。**
:::

二段階認証やパスワードの適切な管理を導入し、不正アクセスを防ぎましょう！
git/githubを使うときに、本当に3点だけ押さえてほしいこと〜 Don't feel, think! 〜

## はじめに

株式会社シンシアでは、実務未経験のエンジニアの方や学生エンジニアインターンを採用し一緒に働いています。

※ シンシアにおける働き方の様子はこちら 

https://www.wantedly.com/companies/xincere-inc/stories

この記事は

- プログラミングを学び出したばかりの人
- エンジニアとして働きだしてGitHubを使い慣れていない人
- この記事を読んだが、長すぎて要点だけもっとまとめて欲しい人

という人向けに、3点だけ、**ここ、本当にテストに出るよ**、っていうことに付いて書いていきます。
ぜひ読んで見ていただけると嬉しいです。

### ブランチを切る前必ずやってほしいこと

**ブランチを切る前に、必ず切る元のブランチを最新にしてください。**

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69406/a5de9afc-69e3-40fc-a9de-5e6c496560ec.png" width="100%">


※ おそらくブランチを切る元は、main(古いプロジェクトだとmaster)かdevelopブランチです。（詳しくはチームの人に聞いて下さい）

必ず、最新の状態にしてください。

```bash

$ git checkout develop # 元のブランチにする
$ git pull origin develop # リモートの最新状態にするにする
$ git checkout -b feature/hogepiyo # 作業ブランチを切る

```

## PRの作成ボタンを押してから必ずやってほしいこと

PR作成ボタンを押したら終わりではありません。

**必ず、セルフレビューしてください**。


<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69406/bd9ebcd0-b3a7-41d1-a564-4f1b3ae2b18e.png" width="100%">


- 意図しないファイルがGitに上がっていないか
- そもそも修正漏れ・変なところがないか

を**セルフレビューする習慣をつけましょう**。


## ブランチの流れを想像してください（Don't feel, think!）

ブランチを切ったり、PRを出したりするとき、必ず、いま自分がどの状態にいるか考えるようにしましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69406/969d07ad-1ebb-4153-bd0c-66a241ea3b64.png" width="100%">


最低限頭の中でこんな図をイメージすると良いでしょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/69406/ad80d25f-5abd-413d-a64f-9b58d1efe694.png" width="100%">

## 最後に

株式会社シンシアでは、随時エンジニアを募集しています。
一緒に、世の中のイケてるエンジニアを増やすという目標に対してコミットしてくれる方はぜひご応募ください。
よろしくお願いします。

https://www.wantedly.com/projects/1979401
s3時間指定オブジェクト取得

aws s3 cp s3://my-alb-logs/AWSLogs/123456789012/elasticloadbalancing/ap-northeast-1/2025/03/16/ ./logs/ --recursive --exclude "*" --include "*T15*" --include "*T16*" --include "*T17*" --include "*T18*" --include "*T19*" --include "*T20*" --include "*T21*" --include "*T22*" --include "*T23*"

=LEFT(A1,9) & TEXT(MID(A1,10,2)-1,"00") & RIGHT(A1,1)
国産IDaaS Exticを使ってみる 3. OIDC SSO

[前回](https://qiita.com/ahra_/items/f69baeae34b776b71bbb)の続きです。
## OIDCによるSSO
前回紹介の通り、ExticはSAMLとOIDCによるSSOに対応しています。
今回はOIDCによるSSOについて検証します。
## 設定
OIDCのSPにはKeycloak 26.0.7を使用します。構築手順は割愛します。ユーザーの必須属性を`Username`のみにしています。
Identity providers > OpenID Connect v1.0 を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e30b058f-0f7a-7b6b-b55e-d07bf8103428.png)
Redirect URIをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/3734c8bd-c759-fe77-8b73-57de2eb1a672.png)
Exticの管理コンソール > アプリケーションから「シングルサインオン (OIDC)」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/e793b15d-9be2-31e9-909b-9de03aa48310.png)
コピーしたリダイレクトURLをペーストして保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/4316b6a0-8177-7c29-50b5-2604a24e26b7.png)
OIDCクライアント情報をダウンロードします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/342f7775-19d2-256c-5bef-cd26db087a03.png)
入手した`.json`から`discovery_endpoint`、`Client ID`、`Client Secret`を抜き出し、RP側に設定して保存します。
![スクリーンショット 2024-12-26 100932.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/969ac288-d35b-e58c-afcb-3645f8c476ca.png)
対象ユーザーで設定したアプリケーションを「使用する」設定にします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/db7fbc2b-210b-3bfd-61de-f323cf20ae95.png)
## 確認
RP側の認証が必要なURLにアクセスします。
Or sign in with の「oidc」を選択します。
![スクリーンショット 2024-12-26 102142.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/501d0728-8097-ec14-4abe-7c5b8b02bc9f.png)
Exticのログイン画面が現れます。
認証に成功するとSSOにも成功し、Exticのユーザー情報でRP側の認証が必要なリソースにアクセスできました。
![スクリーンショット 2024-12-26 103807.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/5921b410-01be-15af-aeaa-3fca16258be4.png)
## 
Exticを使ったOIDCによるSSOを検証しました。
[次回](https://qiita.com/ahra_/items/a5edf5fd97f6311439af)はオンプレミスのデータベースへのプロビジョニングを検証します。
UEでいろんなハンドトラッキングをしようとした備忘録

# はじめに
この記事は・VIVE　・LeapMotion　・MetaQuest でハンドトラッキングをしようとした備忘録です。手探りのため一部間違いがある可能性があります。

# 前提知識
UE5よりUEでの基本的なVR開発にはOpenXRを使用します

ハンドトラッキングやパススルーといった機能は、OpenXRAPIを追加して使用できます（UEではプラグインという形）

OpenXR単体でもVRテンプレートにあるような操作は行えるますが、ハンドトラッキングやパススルーを行うにはそれぞれ機種ごとに独自のプラグインを追加する必要があります

MetaQuestのHandTrackingAPIとVIVEのHandTrackingAPIは同時に動作できません。

おすすめはOpen XR API Layers GUI をダウンロードして使いたいもの以外オフにしながら作業すること
[OpenXR-API-Layers-GUI](https://github.com/fredemmott/OpenXR-API-Layers-GUI)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/02e1f166-5f64-4d2d-a986-167644bc95b3.png)




# VIVE
VIVE OpenXRプラグイン・OpenXRプラグイン・OpenXRHandTrackingプラグインが必要です
[ダウンロード](https://developer.vive.com/resources/openxr/unreal/unreal-download/latest/)
[ドキュメント](https://developer.vive.com/resources/openxr/openxr-pcvr/tutorials/unreal-engine/)
[ハンドトラッキングチュートリアル](https://developer.vive.com/resources/openxr/unreal/unreal-tutorials/handtracking/)

VIVE側の設定で、ハンドトラッキングを有効にする必要があります
[フォーカスでハンドトラッキングをオンにする](https://www.vive.com/jp/support/focus3/category_howto/hand-tracking.html)

基本的にサンプルマップは何もしなくてもハンドトラッキングが動作するようになっているので、動かなければAPIの競合などを疑ったほうがいいです

# Meta
MetaXRプラグイン・OpenXRプラグイン・OpenXRHandTrackingプラグインが必要です
**※5.3対応バージョンはVRPreviewができないなどの影響があるため、5.4以降での開発を推奨します**
[ダウンロード](https://developers.meta.com/horizon/downloads/package/unreal-engine-5-integration/)
[チュートリアル](https://youtu.be/HpVdLXc96a4?si=-RTHw6qrr0Qc8gDv)

MetaQuestの設定でハンドトラッキング・ボディトラッキングをオンにする必要があります。
[Meta Questでのジェスチャーコントロールとボディトラッキングについて](https://www.meta.com/ja-jp/help/quest/290147772643252/?srsltid=AfmBOopHPIIoTdWYomHSpqE1AH8uU3cOuHc1QLDl-xR_J5UUcAlm89H0)


MetaQuestの開発者用アカウント・Quest Linkからの開発者用設定が必要です
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2257391/66fb2fe7-f3eb-49bd-86ea-cf9c9be216e4.png)

基本的にチュートリアル通りで動くと思います。

# Leap Motion
UltraLeap Trackingプラグインが必要です。
[ダウンロード](https://github.com/ultraleap/UnrealPlugin/releases/tag/v5.0.1)
※2025年3月17日現在Fab版が出されていないため、新規ではGitからしか取得不可
[ドキュメント](https://docs.ultraleap.com/xr-and-tabletop/xr/unreal/getting-started/index.html)
別途Ultra Leapアプリケーションをインストールする必要があります。
[ダウンロード](https://leap2.ultraleap.com/downloads/)
動かすためのコンテンツは基本的にプラグイン内に入っています

**※Leapはアプリを起動していない間もHandTrackingを占拠し続けるので他のハンドトラッキングを使用する際は必ずオフにする必要がある**

# 動かなかった原因一覧

### APIの競合
Ultra Leapアプリケーションをインストールしていると、HandTrackingAPIが常にLeapに占拠されることになり、他のハンドトラッキングが一切動かなくなるので使用する際はGUIで必ずAPIを整理すること。

### Steam VRバージョン
VIVE側でSteamVRのバージョンが古い・特定のバージョンと相性が悪いなどで動かないことがありました。（Beta版にするなどで解決

### Runtime OpenXR
ランタイムのOpenXRが使用したいものと違うなどで動かない（特にMeta・VIVE）要注意
フロント入門：静的サイトと動的サイトのメリット・デメリットを自分なりに体系的にまとめてみた

## はじめに
ウェブサイトには静的と動的の2種類があり、それぞれ異なる特徴を持っています。本記事では、両者の違いや使用される技術、メリット・デメリットについて解説します。

## 1. 静的ウェブサイトとは？

静的ウェブサイトは、HTML、CSS、JavaScriptなどで構成されており、サーバー上にあるファイルがそのままユーザーに提供されます。ページの内容は固定されており、ユーザーごとに変化することはありません。

**特徴:**
- 事前に作成したページがそのまま表示される
- サーバーサイドの処理が不要
- ページの読み込み速度が速い
- 更新には手作業が必要

**主に使用する言語:**
- HTML（構造）
- CSS（デザイン）
- JavaScript（簡単な動きやインタラクション）

**メリット:**
- シンプルで高速
- サーバー負荷が少ない
- セキュリティリスクが低い

**デメリット:**
- 更新が手間
- インタラクティブな機能が難しい

**使用例:**
- 企業の紹介ページ
- ランディングページ
- ブログ（JekyllやHugoなどの静的サイトジェネレーターを利用）

## 2. 動的ウェブサイトとは？

動的ウェブサイトは、サーバー側でプログラムが実行され、データベースなどから情報を取得してページを生成する仕組みです。PHP、Python（Django, Flask）、Ruby on Railsなどのフレームワークがよく使われます。

**特徴:**
- リアルタイムにデータを処理
- ユーザーごとに異なるコンテンツを表示
- データベースとの連携が可能
- 自動更新ができる

**主に使用する言語:**
- サーバーサイド言語（Python, PHP, Ruby, Node.js, Java, C#）
- フロントエンド（HTML, CSS, JavaScript, TypeScript）
- データベース（MySQL, PostgreSQL, MongoDB, Firebase など）

**メリット:**
- ユーザーに応じたコンテンツを提供可能
- 更新作業が簡単
- データベースを活用できる

**デメリット:**
- サーバー負荷が高い
- セキュリティリスクがある（SQLインジェクションなど）
- 静的サイトよりも開発が複雑

**使用例:**
- SNS（Facebook、Twitter）
- ECサイト（Amazon、楽天）
- Webアプリ（Google Docs、Trello）

## 3. 静的サイトと動的サイトの選び方

どちらを選ぶかは、用途によります。
- **小規模なサイト・情報の更新が少ないサイト** → **静的ウェブサイト**
- **ユーザーごとに異なるデータを表示するサイト** → **動的ウェブサイト**

また、近年では **静的サイト+動的機能（Jamstack）** というアプローチも普及しています。

## まとめ
|  | 静的ウェブサイト | 動的ウェブサイト |
|---|---|---|
| ページの生成方法 | 事前に作成したページを表示 | リアルタイムで生成 |
| 更新方法 | 手動更新 | 自動更新が可能 |
| 処理速度 | 高速 | 処理によって遅くなることも |
| サーバー負荷 | 低い | 高い |
| インタラクティブ性 | 低い | 高い |
| 使用する技術 | HTML, CSS, JavaScript | PHP, Python, Ruby, Node.js, Java, C# + データベース |

ウェブサイトを作る際は、用途に応じて最適な方法を選んでみてください！
10秒でシステム構成図を作る(システムを1時間で作った)


先日、ちょっとした思いつきでサービスを1時間で作って公開した。はい、たった1時間。夕食前に「今日はパスタにしようかな」と考えるくらいのノリである。そんなことが可能なのかって？

そう、可能なのだ。AIという魔法のおかげで。

早速だが作ったサービスはこちら。自然言語からシステム構成図を作れるサービスだ。
完全無料で登録も不要で使えるので試してみてほしい。

<a href="https://toolpods.io/mermaid-diagram"><img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982301/521d22f0-3049-4192-8ef9-6bca53d60962.png"></a>

## そもそもなんでAIでシステム構成図？
最近、エンジニアの間で「Mermaid記法」を使って構成図を簡単に表現するのが人気だ。手書きや画像編集ソフトで複雑な図を描くのは面倒だし時間がかかるから、テキストベースでサクッと書けるMermaidは便利。でも、そのMermaidの記述をだれでも見やすく美しい図にするために、ビジュアライザーを使って手間をかけている人もいる。

「でもさ、それってもうAIが全部まとめて一発でやってくれたらよくない？」

そんなことをふと思いついた僕は、即座に行動を開始した。アイデアが浮かんだ瞬間が一番の作り時だからね。明日に回したら、絶対に面倒くさくなってやらなくなっちゃうでしょ。

## 1時間で作れる秘密

「でも1時間でサービス公開って、ちょっと盛ってない？」と思うかもしれないが、本当に1時間でできてしまった。その秘訣は3つ。

まずは、AIの力だ。AIは構成図を描くところまで8割方やってくれる。「これくらいなら僕でも…」なんて甘く見ちゃダメ。人間がコツコツ作ると数日はかかる作業を、AIなら数秒で済ませてしまう。まさに天才すぎる新入社員を迎えた気分だ。

次に、スコープを広げすぎないこと。「クラウドサービスのアイコンをキレイに表示したいな」なんて考え始めるとあっという間に沼にハマる。そんな時は、「まあ、いいか」の精神でとりあえず公開。細かいことは後でやればいいのだ。むしろユーザーが本当に欲しがってから追加すれば効率的というもの。

そして最後が、共通処理をちゃんと作っていること。レイアウトやOGP生成、sitemapの動的生成やAIモデルの差分抽象化まで、共通化された仕組みが揃っているからこそ、新しいアイデアを思いついたらすぐに試せるのだ。僕はむしろ、「手動で細かく修正しない」ことを意識しているくらい。

なぜなら、「小さなサービスをたくさん作って世に出す」がコンセプトだからだ。

https://qiita.com/kentawata/items/5e565288501f29a00704

## AI時代は「スピード感」が全てを決める

ひと昔前は、「アイデアがあっても実装までに何日もかかる」のが普通だった。でもAIの登場で、アイデアが生まれてからサービスを公開するまでが驚くほど短縮された。「いいアイデアなんだけど、忙しいしまた今度…」なんて悩んでる間に、サクッと作ってデプロイできちゃう。

今や、ものづくりのコストが恐ろしいほど下がった時代だ。もちろん、大規模サービスは今でも慎重に作るべきだけど、軽い気持ちでサクッと作れるサービスが増えてきたのは本当にいいこと。なぜって、「悩んでる時間」を圧倒的に減らせるからだ。

「これ便利そう」「これ作ったら誰かが喜ぶかも」という直感を形にするスピード感が、これからのエンジニアには必須だろう。

## 言われたことをやるだけのエンジニアはヤバいかも？

ここでちょっと怖い話をすると、今後エンジニアにも二極化が起こるだろう。ユーザー視点やビジネス視点を持って、「これを作ればこういう価値がある」と自分で考えられる人は、これからも大きな価値を生み出せる。

一方、「言われたものを作るだけ」の人は、AIに取って代わられるリスクが大きい。AIがAPIを作り、画面もそれなりに仕上げてくれる時代に、「言われたことだけ」は厳しいよね…。独り言だけど。

だからこそ、自分が「どんな価値を提供できるか」を考える習慣が重要になるわけだ。

## AI時代を生き抜くヒント

僕がこの短い1時間の体験から得た学びはシンプル。
- AIの力を最大限に使い倒すこと
- 余計な完璧主義は捨てること
- ユーザーが本当に求めていることに集中すること

アイデアが浮かんだらすぐ試す。小さく始めて、大きく育てる。これがAI時代の最強の生存戦略じゃないだろうか。

さあ、あなたもまずは小さなアイデアを形にしてみよう。案外、それが人生をちょっと変えるきっかけになるかもしれないから。

## AIすごい
この記事はChatGPT 4.5が9割書きました。

僕がやったこと
- 画像の追加
- リンクの追加
- AIすごいセクションの追加
連載 [第4回] :ベトナムオフショア開発で「指示が伝わらない」を防ぐ！効果的なタスク管理とは？

連載 [第4回] :ベトナムオフショア開発の成功術：正しく理解して成功へ！
### **ベトナムオフショア開発で「指示が伝わらない」を防ぐ！効果的なタスク管理とは？**  

こんにちは、バイナリテックのイサムです！  
このシリーズでは、日本企業がベトナムのオフショア開発を成功させるためのポイントを紹介しています。  

前回の記事では、「ベトナムのエンジニアは優秀なのに、なぜプロジェクトが失敗するのか？」についてお話ししましたが、  
今回は **「タスクの伝え方」** に焦点を当てます。  

「ちゃんと指示を出したつもりなのに、思っていたものと違うものができあがる…」  
「納品されたものが期待とズレている…」  

そんな経験、ありませんか？  
実は、日本とベトナムの仕事の進め方の違いが、この問題の原因になっていることが多いのです。  

では、どのようにタスクを伝えれば、**期待通りの成果物を得ることができるのか？**  
今回は、**「オフショア開発で失敗しないタスク管理のポイント」**を詳しく解説していきます！  

---  

## **なぜタスクが伝わらないのか？**  

まず、日本とベトナムの仕事の進め方の違いを理解しておきましょう。  

### **🗾 日本の仕事の進め方**  
✔ **曖昧な指示でも相手が察してくれる**  
✔ **言葉にしなくても「行間を読む」文化がある**  
✔ **途中で微調整しながら進めることが多い**  

### **🇻🇳 ベトナムの仕事の進め方**  
✔ **明確な指示がないと動きづらい**  
✔ **言われたことは忠実にやるが、それ以上の解釈はしない**  
✔ **仕様変更や曖昧な要求には戸惑いやすい**  

つまり、日本的な「ふわっとした指示」は、**ベトナムのエンジニアにとっては解釈が難しい** のです。  
では、どのようにすれば正しくタスクを伝えられるのでしょうか？  

---  

## **オフショア開発で効果的なタスクの渡し方**  

### **1️⃣ 「完成形のイメージ」を具体的に伝える**  
ベトナムのエンジニアは「言われたことを正確に実行する」傾向があるため、**期待する成果物のイメージを明確に伝えること**が大切です。  

#### ✅ 良い指示の例  
✔ **「この画面のデザインは、添付したFigmaのデザインと完全に一致させてください」**  
✔ **「APIのレスポンスはこのJSONフォーマットにしてください（例を提示）」**  
✔ **「動作確認のテストケースをこちらにまとめました。この条件をすべて満たすことを確認してください」**  

#### ❌ 悪い指示の例  
✖ 「適当にいい感じのデザインにしておいて」  
✖ 「前回の画面と同じような感じで実装してください」  
✖ 「とりあえず作って、あとで調整します」  

曖昧な指示は、**エンジニアによる解釈のズレを招く** のでNGです。  

---

### **2️⃣ 「What」「How」「Why」をセットで伝える**  
ベトナムのエンジニアは、与えられたタスクを忠実にこなしますが、**背景の説明がないと「なぜこの作業が必要なのか？」を理解しづらい** ことがあります。  

そのため、タスクを渡すときは、**以下の3つの情報をセットにする**ことをおすすめします。  

🔹 **What（何をするのか？）** → 「この機能を追加してください」  
🔹 **How（どのように作るのか？）** → 「この技術を使い、こういう手順で実装してください」  
🔹 **Why（なぜこの機能が必要なのか？）** → 「ユーザーがこの操作をできるようにするためです」  

#### **✅ 例：API開発のタスク**  
❌ **Bad Example:**  
「ユーザーデータを取得するAPIを作って」  

✅ **Good Example:**  
📌 **What**：「ユーザー情報を取得するAPI（`/api/users/{id}`）を作成してください」  
📌 **How**：「データベースの`users`テーブルからデータを取得し、以下のJSONフォーマットで返してください」  
📌 **Why**：「このAPIは、プロフィール画面のデータ取得に使われます」  

こうすることで、エンジニアが「何を作ればよいのか？」を明確に理解できます。  

---

### **3️⃣ 進捗管理を徹底する（マイクロマネジメントではなくフォローアップ）**  
タスクを渡した後、**進捗を適切にフォローアップする**ことも重要です。  
よくある失敗は、「タスクを渡したら、完成するまで放置してしまう」ことです。  

ベトナムのエンジニアは「納期を守ろうとする意識が強い」ですが、**途中で問題があっても自分から報告しないことが多い** です。  
そのため、進捗確認のタイミングを意図的に作るのがポイントです。  

✅ **効果的なフォローアップ方法**  
✔ **「毎日15分のスタンドアップミーティング」を実施**（進捗報告＋問題共有）  
✔ **「週に1回のデモ」を設定し、途中経過を見せてもらう**  
✔ **「GitHubのPull Requestでレビュー」を習慣化**  

このように、**適度なタイミングで状況を確認することで、リスクを早めに察知** できます。  

---

## **まとめ：タスクを正しく伝えるためのポイント**  
🔹 **完成形のイメージを具体的に伝える（例を示す）**  
🔹 **「What・How・Why」をセットで伝え、背景を理解させる**  
🔹 **進捗をこまめにフォローアップし、問題を早期に発見する**  

ベトナムのエンジニアは、適切に指示を出せば高いパフォーマンスを発揮できます。  
しかし、日本的な「察する文化」に頼ると、認識のズレが生じてしまいます。  
そのため、**より論理的で明確なコミュニケーションを心がけることが成功のカギ** です。  

次回は、**「オフショアからのコードレビュー：ストレスなくフィードバックを受け取る方法」** について詳しく解説していきます！  
それでは、また次回！ 🚀
Office付のPC購入時にOfficeの購入状態が反映されない

PCの入れ替え作業中に不具合発生。Office(2021)付のPCを購入しているのにOffice起動時に購入状態が反映されない。

一回でも「組織アカウント」を押してしまうと、そのあと「個人アカウント」を選んでも組織アカウントでのログインをしないと購入が反映されない模様。

対処法は「Microsoft Store」の「ライブラリ」「デバイスに含まれる」からOfficeの再インストール。わかるかこんなもん。

Microsoft Storeとかマイクラくらいしかお世話になったことなかったし、インターネットくんはそっちに誘導してくれないので見つけるのに時間がかかった。というか公式ページも再インストールは誘導してくれるんだが、購入状態認識してないと肝心のOfficeダウンロードができないので(4文字)。Microsoft Storeに誘導するリンクくらい張ってほしい。
キーボードショートカットがスリープ復帰後に効かなくなる件の解消

・症状
Macのスリープ復帰後にSpotlightやMission Controlのショートカットが効かなくなる

・解決方法
~/Library/Preferences/com.apple.symbolichotkeys.plist
をバックアップしたうえで上記ディレクトリから削除し、Macを再起動する。
※/Library/~ ではない
爆速でアプリ開発！ 他社に負けないスピード開発の秘訣

こんにちは。2025年3月15日、16日の2日間で、<a href="https://giftech.io/giftech2025spring/">次世代ハッカソン「GIFTech2025春」</a>を開催いたしました！

1日目は、基調講演やMVP設計ワークショップなどの講義を中心に実施。2日目は、エンジニア＆デザイナーのチームに分かれ、エンターテイナーとの対面ヒアリングやディスカッションを行い、MVPの方向性について、各チーム活発に議論が進みました。昨日の2日間の様子は、追って公開させていただきます！

![IMG_8432.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3991729/5fde3380-5f72-4931-a726-538be54681d9.jpeg)

本記事では、2024年に開催した「<a href="https://www.youtube.com/playlist?list=PL8rtY-KIcZTdqRNTZJsP74PG4Ctptfy76/">GIFTech Academy</a>」についてご紹介します。
複数名の企業に登壇いただき、<a href="https://app.menu.jp//">デリバリーアプリ 「menu」 </a>の開発責任者の方に、超短期間でアプリを開発する際の考え方について講義いただきました🐥

:::note info
■GIFTech Academyとは？

GIFTechプロジェクトの一環として、「N1（1人）を満足させるMVP（Minimum Viable Product）」の開発に焦点を当てた「学び」に特化したコンテンツを提供。
実際にMVPの開発に携わったエンジニアやプロダクトオーナーからの講義を開催するほか、またMVPの作り方やデザイナーとの共同作業方法、ユーザーインタビューの手法などの実践的なノウハウ共有も行いました。
:::

その講義の内容を元に、**スピード開発を成功させるための5つのポイント** を紹介します！

↓　講義動画はこちらからご覧いただけます。
<iframe width="560" height="315" src="https://www.youtube.com/embed/0WtghrQgg5c?si=AFTaIsgf8K7aJecA" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>


## 1．ユーザー体験を重視
機能を追加することが目的ではなく、ユーザーが実際にどう行動し、どんな感情を持つのか が最も重要です。開発スピードを意識するなら、完璧な機能を作るよりも、ユーザーに価値を提供できる最低限の機能を優先しましょう。

:::note info
 具体例：menu開発時のアプローチ
 
「menu」プロダクトリリース段階の開発では、多機能化を目指すのではなく、最も重要な「注文ができる仕組み」 にフォーカス。余計な機能を削ぎ落とし、ユーザーがすぐに使える形で提供しました。
:::

## 2．必要な機能だけに絞る勇気
プロダクトを早く市場に届けるためには、不要な機能を思い切って削る決断が求められます。
「これは本当に今必要か？」を常に自問し、最小限の機能でリリースすることがスピード開発のカギです。

:::note info
ポイント

・MVP（Minimum Viable Product）の概念を意識する
・機能追加は、ユーザーの反応を見てからでも遅くない
:::

## 3．失敗を恐れずに挑戦することの重要性
開発スピードを上げるには、「失敗しないこと」よりも「リカバリーできること」を重視することが大切です。

予測できない問題は必ず発生します。しかし、素早く修正・改善できる体制 を整えておけば、トラブルが起きても迅速に対応できます。

:::note info
具体例：menuの開発現場

menuの開発チームは、「完全に問題のないコードを出す」よりも「まず動くものを出して改善する」** ことを重視。結果として、短期間でのリリースを実現しました。
:::

## 4．素早いフィードバックと改善
プロダクトは一度作ったら終わりではありません。リリース後にユーザーの反応を見ながら素早く改善することが重要 です。

:::note info
具体的なアクション

・ベータ版を早期リリースし、ユーザーの声を収集
・定期的にデータを分析し、改善サイクルを回す
・エンジニアだけでなく、ユーザーサポートチームとも密に連携する
:::

## 5．ユーザーのニーズに焦点を当てる
最も大切なのは、「どんな機能を作るか」ではなく「ユーザーの課題を解決できているか」。
「この機能をつけたら便利そう」ではなく、本当にユーザーにとって価値のある機能なのか？ を考えることが、無駄のない開発につながります。

:::note info
具体例

menuでは、開発前に ユーザーの行動データを徹底分析し、最も必要な機能を見極めました。その結果、リリース後のユーザー満足度も高くなりました。
:::

## まとめ
スピード開発を成功させるには、ユーザー体験を重視し、必要な機能だけに絞る。失敗を恐れずに挑戦する。ユーザーからのフィードバックを活かし、素早く改善を進める・・といった姿勢が大事だと、「GIFTech Academy」に参加した若手エンジニアに向けて語っていただきました。ぜひ講義動画もご覧ください:star2:

https://youtube.com/@giftechch?feature=shared
AWS入門：EC2 vs ECS、コストが安いのはどっち？ユースケース別に徹底比較してみた

## はじめに
AWSでアプリケーションを運用する際、EC2とECSのどちらを選択するかはコストに大きな影響を与えます。

:::note info
**それぞれの特性を理解し、適切な選択をすることでコストを最適化できます。**
:::

本記事では、EC2とECSのコスト構造を比較し、どちらがより安くなるのかを検討します。

## EC2とECSのコスト構造

### EC2（Amazon Elastic Compute Cloud）
EC2は仮想マシン（インスタンス）を直接管理するサービスで、以下のようなコストが発生します。
- インスタンスの料金（オンデマンド、リザーブド、スポット）
- EBS（Elastic Block Store）のストレージコスト
- データ転送料金
- OSライセンス費用（Windowsなど）

## ECS（Amazon Elastic Container Service）
ECSはコンテナ管理サービスで、以下の2つの実行方法によってコストが変わります。

### EC2起動タイプ（ECS on EC2）
- EC2インスタンスを使用するため、EC2のコストと同じ構造
- コンテナを管理しやすくなるが、EC2の台数を考慮する必要がある

### Fargate起動タイプ（ECS on Fargate）
- EC2を使わず、コンテナのCPU・メモリ使用量に応じて課金
- 必要な分だけ支払うため、小規模・スケールアウト型のワークロードに適している
- EC2の固定費が不要なので、スモールスタートに向いている

## どちらが安いか？

### ケース別比較
| シナリオ | EC2 | ECS（EC2） | ECS（Fargate） |
|----------|----|------------|----------------|
| 常時稼働のアプリ | リザーブドインスタンスでコスト削減可 | インスタンス台数管理が必要 | Fargateは常時稼働には高コスト |
| 短時間のバッチ処理 | インスタンスの起動・停止が必要 | 同上 | 使った分だけ課金でコスト最適化 |
| スモールスタート | インスタンスの基本料金がかかる | 最低1台のEC2が必要 | 少量のリソースだけ課金 |
| 大規模スケールアウト | インスタンスの追加が必要 | EC2 Auto Scalingで柔軟対応 | 自動スケールで効率的 |

## 具体的なコスト例

### EC2のコスト
例：t3.micro（1 vCPU, 1GB RAM）
- オンデマンド料金：約
- リザーブドインスタンス：約
- スポットインスタンス：さらに安くなる

### ECS（Fargate）のコスト
例：0.25 vCPU / 0.5GB RAM のコンテナを1日1時間実行
- 約

Fargateは短時間の処理ならEC2より安く、長時間ならEC2の方が安いことが分かる。

## まとめ

どちらが安いかはユースケース次第となります！
- 長時間使うならEC2（リザーブドインスタンス）
- 小規模・短時間ならECS（Fargate）が割安
- 大規模スケールならECS on EC2がバランスよい

特に「短時間の処理」「スモールスタート」の場合、Fargateの従量課金が有利。一方、「常時稼働」や「予測可能な負荷」の場合、EC2のリザーブドインスタンスが圧倒的に安くなる。
【JavaScript】配列逆順操作メソッド reverse() vs toReversed()

# はじめに
JavaScript で配列の要素を逆順に並び替える方法として、 `reverse()` とES2023で導入された `toReversed()` があります。これらは似たような機能を提供しますが、重要な違いがあります。
この記事では、それぞれのメソッドの概要やサンプルコードを通して、これらの違いと使い分けについて解説します。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed

# `reverse()` 元の配列を直接変更する
`reverse()` は配列の要素を**元の配列上**で逆順に並び替えます。
メモリ効率がよいですが、元の配列の順序が変わってしまう点に注意が必要です。

```sample.ts
const array = [1, 2, 3];
console.log(array);
// Output: Array [1, 2, 3]

const reversed = array.reverse();
console.log(reversed);
// Output: Array [3, 2, 1]

console.log(array);
// Output: Array [3, 2, 1]
```

`reverse()` 実行後、実行後の値を受け取った配列だけでなく、元の配列も並び替えられています。

# `toReversed()` 元の配列を変更せずに新しい配列を作成する
`toReversed()` は配列の要素を逆順に並び替えた**新しい配列**を返します。元の配列は変更されません。ES2023 で導入された比較的新しいメソッドです。
元の配列を保持する必要がある場合や不変性を重視する場合に適しています。一方、新しい配列を作成するため、非常に大きな配列を扱う場合、パフォーマンスへの影響に注意する必要があります。

```sample.ts
const array = [1, 2, 3];
console.log(array);
// Output: Array [1, 2, 3]

const reversed = array.toReversed();
console.log(reversed);
// Output: Array [3, 2, 1]

console.log(array);
// Output: Array [1, 2, 3]
```

`reverse()` 実行後、実行後の値を受け取った配列は並び替えられています。一方、元の配列の順序は変わっていません。

# まとめ
`reverse()` と `toReversed()` の主な違いは、元の配列の変更有無です。

- `reverse()`: 元の配列を直接変更する
- `toReversed()`: 元の配列を変更せずに、新しい配列を返す

# 参考
- [Array.prototype.reverse()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse)
- [Array.prototype.toReversed()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/toReversed)
IBM i Services Directory :  QSYS2.TCPIP_Info ビュー　自身のIBM i 接続情報を表示

このIBM i サービスを実行するリクエスターとIBM i とのTCP/IP接続情報を返します。

## 概要
■表名：QSYS2.TCPIP_INFO
■カテゴリ：通信サービス
■サポート：IBM i 7.2 Base以降
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-tcpip-info-view

## 使用例：
```
SELECT * FROM QSYS2.TCPIP_INFO ;
```

実行結果はこちら。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0b64b153-4ba7-4c47-8036-7f7aad54cb27.png)

このコマンドを実行したリクエスターのポート・IPアドレス、サーバーのホスト名、接続ポート・IPアドレスなどが表示されます。

## 参考：CLPの類似のプログラミング例

[こちらの記事](https://qiita.com/gomAnomalocaris/items/189a67c15a60b65bca28)にクライアントのIPアドレスを取得するコマンドサンプルを掲載しています。

比較するとIBM i サービスは楽だなーと分かりますね。
3.Python基礎

# **シリーズ記事一覧**
| | タイトル  リンク |
|:---:|:---:|
| **第1回**  | [環境構築](https://qiita.com/yuta3003/items/302ae91e6f4ab7164d9b) |
| **第2回**  | [Python 概要](https://qiita.com/yuta3003/items/a51dbfea2c942ffdbec2) |
| **第3回**  | [Python 基礎](https://qiita.com/yuta3003/items/178c238c387faecc8d13) |
| **第4回**  | [Pythonで学ぶWebの基本と実践](https://qiita.com/yuta3003/items/902dc18c6618456c7010) |
| **第5回**  | [Streamlitを使ってみよう](https://qiita.com/yuta3003/items/c269f889b4d1a87efacb)|
| **第6回**  | [Streamlitでリアルタイム画像処理](https://qiita.com/yuta3003/items/cabbdced44bcf1e84a1b) |
| **第7回**  | [リアルタイムで顔検出を行ってみよう](https://qiita.com/yuta3003/items/ec7411748997b7a2d05d) |

# **Python 基礎**
## **Python 起動方法**
### **Interactive**
対話的にPythonを実行する方法で、すぐにコードを入力し結果を確認できます。

ターミナルやコマンドプロンプトで以下のコマンドを入力することで起動できます。
```sh
python
```
起動後の画面（例）:
```
Python 3.10.0 (default, Oct  4 2021, 14:59:43)
[GCC 10.2.1 20210110] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
```
`>>> `はPythonのプロンプトを表し、ここにコードを入力すると実行されます。

pythonの対話モードから抜ける場合には`exit()`を実行してください。
```
>>> exit()
```

また、ブラウザ上で実行できる[Google Colab](https://colab.research.google.com/)やJupyter Labなどもあります。

### **Non-Interactive**
Python スクリプト（.py ファイル）を実行するモード。
スクリプトの内容をすべて書いておき、一気に実行します。

1. 以下コマンドをターミナルで実行し、メモ帳を開きます。
    ```cmd
    notepad script.py
    ```
1. 以下内容を貼り付け、保存します。
    ```Python
    name = "Python"
    print(f"Hello, {name}!")
    ```
1. ターミナルに戻り、pythonを実行します。
    ```
    python script.py
    ```
    実行結果:
    ```
    $ python script.py
    Hello, Python!
    ```


## **参考資料**
- [東京大学Python入門](https://utokyo-ipp.github.io/)
- [Python公式チュートリアル](https://docs.python.org/ja/3/tutorial/index.html)
2.Python概要

# **シリーズ記事一覧**
| | タイトル  リンク |
|:---:|:---:|
| **第1回**  | [環境構築](https://qiita.com/yuta3003/items/302ae91e6f4ab7164d9b) |
| **第2回**  | [Python 概要](https://qiita.com/yuta3003/items/a51dbfea2c942ffdbec2) |
| **第3回**  | [Python 基礎](https://qiita.com/yuta3003/items/178c238c387faecc8d13) |
| **第4回**  | [Pythonで学ぶWebの基本と実践](https://qiita.com/yuta3003/items/902dc18c6618456c7010) |
| **第5回**  | [Streamlitを使ってみよう](https://qiita.com/yuta3003/items/c269f889b4d1a87efacb)|
| **第6回**  | [Streamlitでリアルタイム画像処理](https://qiita.com/yuta3003/items/cabbdced44bcf1e84a1b) |
| **第7回**  | [リアルタイムで顔検出を行ってみよう](https://qiita.com/yuta3003/items/ec7411748997b7a2d05d) |

# **Python 概要**
## **Pythonでできること**
### **データ分析**
- データ解析: PandasやNumPyを使ってデータの集計や分析
- 可視化: MatplotlibやSeabornでグラフ作成
- 機械学習・AI: Scikit-learnやTensorFlowでモデル構築

### **Web開発**
- api開発: fastapiやflask、djangoを使ってrest api作成
- webアプリ: djangoやflaskでwebアプリ構築

### **自動化・Webスクレイピング**
- 業務の自動化: Excelの操作（openpyxl）、ファイル整理、定期処理
- Webスクレイピング: BeautifulSoupやSeleniumでデータ取得

### **GUIアプリ・ゲーム開発**
- GUIアプリ: TkinterやPyQtでデスクトップアプリ作成
- ゲーム作成: Pygameで2Dゲーム開発

### **IoT・組み込み開発**
- Raspberry Pi制御: センサーデータの取得や機器制御
- マイコン制御: MicroPythonでESP32やArduinoを動作させる

### **ネットワークプログラミング**
- ネットワーク解析: Scapyでパケットキャプチャ
- サーバー構築: Socketプログラミング

### **セキュリティプログラミング**
- 暗号化: pycryptodomeを使用してデータの暗号化
- パケットキャプチャ: scapyを使用してパケットの構築または盗聴

### **ブロックチェーン・暗号技術**
- ブロックチェーン: BitcoinやEthereumのライブラリを活用
- 暗号化: PyCryptodomeでデータ暗号化
1.環境構築

# **シリーズ記事一覧**
| | タイトル  リンク |
|:---:|:---:|
| **第1回**  | [環境構築](https://qiita.com/yuta3003/items/302ae91e6f4ab7164d9b) |
| **第2回**  | [Python 概要](https://qiita.com/yuta3003/items/a51dbfea2c942ffdbec2) |
| **第3回**  | [Python 基礎](https://qiita.com/yuta3003/items/178c238c387faecc8d13) |
| **第4回**  | [Pythonで学ぶWebの基本と実践](https://qiita.com/yuta3003/items/902dc18c6618456c7010) |
| **第5回**  | [Streamlitを使ってみよう](https://qiita.com/yuta3003/items/c269f889b4d1a87efacb)|
| **第6回**  | [Streamlitでリアルタイム画像処理](https://qiita.com/yuta3003/items/cabbdced44bcf1e84a1b) |
| **第7回**  | [リアルタイムで顔検出を行ってみよう](https://qiita.com/yuta3003/items/ec7411748997b7a2d05d) |
# **環境構築**
## **Python**
### **Pythonインストーラーをダウンロード**
[Python公式ダウンロード](https://www.python.org/downloads/)

### **Pythonインストール**
![python_download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356851/5f628cfc-14d8-49bf-9f4c-36cc7a9e21e7.png)

![install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356851/55ba511a-0e06-4c8c-bc48-ef8f73aebf21.png)

### **Pythonがインストールされたことを確認**
- windows 検索ボタンでターミナルと検索
    ![](./image/1-1-3.png)

- ターミナルを開きコマンドを押す
    ```
    python --version
    ```
    ![1-1-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/356851/096c39b5-cdc5-474d-b93c-4abc92438ad0.png)
	Python 3.xx.xx のようにpythonのバージョンが返ってくればOK
【簡単AWS】【AWS Systems Manager Parameter Store】Systems Manager Parameter Store の料金について

## 記事概要

AWS Systems Manager Parameter Store は、アプリケーションの設定やシークレット情報を安全に管理できるサービスです。本記事では、Parameter Store の **無料・有料の違い** や **コストを抑える方法** について分かりやすく解説します。

---

### 📌 **Parameter Store の料金は無料？有料？**

Parameter Store には **「標準パラメータ（Standard Parameters）」** と **「高度なパラメータ（Advanced Parameters）」** の2種類があり、それぞれ料金が異なります。

|  パラメータタイプ  |  料金  |  説明  |
|------|------|------|
| **標準パラメータ（Standard Parameters）** | **無料** | - 毎月最大 **10,000個** まで無料  <br> - 一般的な設定値の保存に適している |
| **高度なパラメータ（Advanced Parameters）** | **有料** | - **1つのパラメータにつき $0.05/月**（約7円/月）<br> - **最大 8KB** のデータを保存可能<br> - **パラメータのバージョニング** や **有効期限設定** などの機能あり |
| **API リクエスト** | **基本無料** | - **標準パラメータ** の API リクエストは無料 <br> - **高度なパラメータ** の API リクエストは無料枠を超えると課金 |

---

### 💡 **無料で使うには？**
✅ **標準パラメータのみを使用する**（10,000 個まで無料）  
✅ **高度なパラメータを使わない**（バージョニングや暗号化が不要なら標準パラメータで十分）  
✅ **パラメータを定期的に削除する**（不要なパラメータを減らせばコスト削減に）

**👉 設定ファイルの保存程度なら「標準パラメータ」で十分！**

---

### 🔍 **自分のパラメータが有料かどうか確認する方法**

1. **AWS マネジメントコンソール** にログイン
2. **Systems Manager → Parameter Store** を開く
3. **パラメータのタイプ（Standard / Advanced）** を確認

**標準パラメータなら無料！高度なパラメータなら課金対象！**

---

### ✅ **まとめ**
✔ **標準パラメータ（Standard Parameters）は無料（10,000個まで）**  
✔ **高度なパラメータ（Advanced Parameters）は $0.05/個/月**  
✔ **API リクエストは基本無料だが、高度なパラメータは課金の可能性あり**  
✔ **コストを抑えるなら標準パラメータを活用する！** 🚀  

AWS Parameter Store をコストを抑えながら活用していきましょう！
パートナー開発組織とデモ環境



+ [【ヘルプ】パートナー開発組織とデモ環境を使用する利点](https://help.salesforce.com/s/articleView?id=000391959&type=1)

-----------------
+ [【未解決】Custom Agentforce Agent on for Partner Development Org?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KEKoD)
+ [エージェントフォースのパートナー開発者組織をすでに正常にプロビジョニングした人はいますか?](https://www.reddit.com/r/salesforce/comments/1h13ant/comment/lz8ng8k/?rdt=38441)
【E2Eテスト革命】AI vs 従来の手法！Laravel Dusk + blocs:dusk でテスト自動生成はどこまで使えるのか？


## はじめに 💡

「E2Eテストの作成、時間がかかりすぎる…💦」

そんな悩みを解決するかもしれないのが、**AIによるテストコードの自動生成** です。

Laravel Dusk のテスト作成をAIに任せられる新ツール **blocs:dusk** が登場し、従来の手書きテストと比較してどこまで実用的なのか注目されています。

今回は、

- **AIでDuskのテストを自動生成する利点と欠点**
- **従来の手書きテストとの比較**
- **本当に実用的なのか？**

の観点から検証していきます！

---

## 1. Laravel Dusk + blocs:dusk とは？🤖

**blocs:dusk** は、AIを活用して **Laravel DuskのE2Eテストコードを自動生成** できるツールです。

https://github.com/blocs/dusk

### blocs:dusk の特徴
- 自然言語で記述したテスト内容をAIが解析し、Duskのテストコードを自動生成
- Laravel Dusk のシンタックスに対応
- 既存のコンポーネントやページ構造を認識してテストを作成
- DOM変更があっても自然言語の記述を更新するだけで対応可能
- **生成されたコードに問題があれば、Duskで実行する前に手書きで修正が可能**
- **AIは実際にブラウザを自動操作し、結果を確認しながらテストコードを生成するため、コードの品質に問題が起きにくい**
- テストの保守コストを削減できる可能性

---

## 2. AI生成 vs 手書きテストの徹底比較 🆚

| 比較項目 | blocs:dusk（AI生成） | 従来の手書きテスト |
|----------|------------------|-----------------|
| **導入ハードル** | ⭐⭐⭐（セットアップ後すぐ使える） | ⭐⭐（手書きは学習コストあり） |
| **テスト作成スピード** | ⭐⭐⭐⭐（数秒で生成） | ⭐（手作業で記述） |
| **テストの品質** | ⭐⭐⭐（AIがブラウザを実行して検証） | ⭐⭐⭐⭐（意図的な設計が可能） |
| **DOM変更への耐性** | ⭐⭐⭐⭐（自然言語の更新で対応可能） | ⭐⭐⭐（適切なセレクタ設計で対応可能） |
| **保守のしやすさ** | ⭐⭐⭐（テスト内容の変更が容易） | ⭐⭐⭐⭐（人間が管理しやすい） |

➡ Dusk 単体よりもテストの作成・保守で blocs:dusk が便利！

---

## 3. blocs:dusk のメリット・デメリット 🎭

### ✅ **メリット**
- **テスト作成の時間を短縮できる** 🚀
- 初心者でもすぐにE2Eテストを導入できる
- 人為的ミスの軽減（テストの記述漏れ防止）
- **DOM構造が変わっても自然言語の記述を更新するだけで対応可能**
- **生成されたテストコードを手動で修正できるため、AIのミスを補正可能**
- **AIが実際にブラウザを操作してテストを書きながら結果を確認するため、コードの品質に問題が起きにくい**
- **生成コードの確認・修正の手間は、一からコードを書く手間と比較すると圧倒的に少ない**

### ❌ **デメリット**
- AIの精度に依存するため、期待通りのコードが生成されないことがある
    - そんな時はそのステップだけ手書きも可能


---

## 4. AIテストの活用ポイント 💡

「AIだけに頼る」のではなく、**AIを活用しつつ、人がレビューを行う運用** が鍵！

- **操作の内容を自然言語で記述しAIにコードを生成させる**
- **ステップごとに検証しながら生成するため、コード完成時には検証が済んでいる**

---

## まとめ ✅

| 項目 | blocs:dusk（AI生成） | 手書きテスト |
|------|------------------|-------------|
| **導入ハードル** | ⭐⭐⭐⭐⭐（検証しながら生成） | ⭐⭐（テストコードを書くの大変） |
| **品質** | ⭐⭐⭐⭐⭐（ステップごとに検証しながら生成） | ⭐⭐⭐（テスト実行を一通り実行するまで結果がわからない） |
| **DOM変更対応** | ⭐⭐⭐⭐⭐（AIによる再生成だけで対応） | ⭐⭐⭐（適切なセレクタ設計が必要） |

### **結論：面倒なセレクタの指定はAIにおまかせ！** 🚀

- **blocs:dusk** はテスト作成の時短と**DOM変更への適応力**に優れる
- **生成時に1ステップごとにブラウザで実行しながら検証できる**
- **ページが複雑でAIがわかってくれない時は手書きもできる**
- **「AI + 人間のハイブリッド運用」が現実的な最適解**

💡 **「E2EテストをAIに任せたい？」それとも「やっぱり手書きが安心？」コメントで意見を聞かせてください！**
[ERC6047] コントラクトデプロイ時のNFT発行でイベントを発行する提案を理解しよう！

# はじめに

『DApps開発入門』という本や色々記事を書いているかるでねです。

https://amzn.asia/d/gxvJ0Pw

今回は、コントラクトデプロイ時にNFTを発行するときに、必ずイベントを含むようにする提案している**ERC6047**についてまとめていきます！

:::note info
以下にまとめられているものを翻訳・要約・補足しながらまとめていきます。
:::

https://eips.ethereum.org/EIPS/eip-6047

他にも様々なEIPについてまとめています。

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4

# 概要

**ERC6047**は、**ERC721**の仕様を拡張してNFTの追跡やインデックス作成をしやすくするために、コントラクト作成時にも`Transfer`イベントを発行することを義務付ける提案です。

**ERC721**では、NFTの送付やMint（`0x0`からの送付）、Burn（`0x0`への送付）が起きた時に`Transfer`イベントを発行するよう定められています。
しかし、コントラクト作成時にミントが行われた場合は、このイベントを発行する必要がありません。
このEIPでは、コントラクト作成時にも`Transfer`イベントを発行することを義務付けています。

# 動機

現在の**ERC721**の仕様では、NFTが新しくMintされた場合は`Transfer`イベントを発行するルールになっていますが、コントラクト作成時にMintされたNFTは例外となっておりイベントが発行されません。

一方で、**ERC1155**ではMint時のイベント発行が必須となっており、コントラクト作成時でも必ずイベントが発行される仕様になっています。
このため、インデックスサービスやオフチェーンサービスは、**ERC1155**のNFTについては確実に追跡できるのですが、**ERC721**ではコントラクト作成時にMintされたNFTを正しく追跡できないという問題が発生します。

これにより、以下のメリットがあります。

- NFTのMint・送付・Burnを一貫して記録できる
- インデックスサービスが全ての**ERC721**トークンを確実に取得できる
- オフチェーンアプリケーションのデータ整合性が向上する

# 仕様

**ERC6047**に準拠するコントラクトは、以下の条件を満たす必要があります。

- **ERC721**を実装すること
- NFTの送付・Mint（`0x0`からの送付）・Burn（`0x0`への送付）が起きた時に、必ず`Transfer`イベントを発行すること
- コントラクト作成時のMintについても、必ず`Transfer`イベントを発行すること

# 補足

**ERC6047**では、新しく「`Creation`」イベントなどを作らず、既存の`Transfer`イベントを使うことで、既存のインデックスサービスとの互換性を維持できるようにしています。

もし新しいイベントを作ってしまうと、現在のインデックスサービスやオフチェーンアプリが対応するために追加の開発が必要になります。
しかし、`Transfer`イベントの仕様を拡張するだけなら、既存の仕組みをそのまま使えるため、変更の影響を最小限に抑えることができます。

# 互換性

**ERC6047**に準拠する全てのコントラクトは**ERC721**にも準拠します。
ただし、**ERC721**に準拠する全てのコントラクトが**ERC6047**に準拠するわけではありません。

# 引用

Zainan Victor Zhou (@xinbenlv), "ERC-6047: ERC-721 Balance indexing via Transfer event [DRAFT]," Ethereum Improvement Proposals, no. 6047, November 2022. [Online serial]. Available: https://eips.ethereum.org/EIPS/eip-6047.

# 最後に

今回は「コントラクトデプロイ時にNFTを発行するときに、必ずイベントを含むようにする提案している**ERC6047**」についてまとめてきました！
いかがだったでしょうか？

質問などがある方は以下のTwitterのDMなどからお気軽に質問してください！

[Twitter @cardene777](https://twitter.com/cardene777)

他の媒体でも情報発信しているのでぜひ他も見ていってください！

https://chaldene.net/

https://zenn.dev/heku

https://cardene.substack.com/

https://mirror.xyz/0xcE77b9fCd390847627c84359fC1Bc02fC78f0e58

https://cardene.notion.site/ERC-EIP-2a03fa3ea33d43baa9ed82288f98d4a9?pvs=4
【Python】表をいい感じにprintしたい！

## はじめに
　sqlite3を使って、PythonでRDBを作成できますが、「可視化ってほどじゃないけど、ちょっと中身確認したいな〜」ってことありませんか？そんな時に便利なモジュールを見つけたので、使い方と合わせてご紹介します。

## tabulate
```sh
pip install tabulate
```
まずはモジュールをpipします。あとは、以下のサンプルのように使うことができます

```python
from tabulate import tabulate

header_names  = ['id', 'name', 'age']
values = [
    ['001', 'taro', '17'],
    ['002', 'hanako', '14'],
    ['003', 'takashi', '35']
]
print(tabulate(values, headers=header_names, tablefmt="pretty"))
```

```:出力
+-----+---------+-----+
| id  |  name   | age |
+-----+---------+-----+
| 001 |  taro   | 17  |
| 002 | hanako  | 14  |
| 003 | takashi | 35  |
+-----+---------+-----+
```

　`tablefmt`という引数は、表の形を指定できるものです。一行ごとに区切りが入るものなど、他にもいくつかありますが、`pretty`というのを例に使ってみました。指定しないデフォルトの物は以下の見た目です。

```:出力
  id  name       age
----  -------  -----
 001  taro        17
 002  hanako      14
 003  takashi     35
```

`tabulate`に関しては、以下の記事に詳しくまとまっていました。より詳細な情報が知りたい方はご覧ください。（今回はちょっと中身を見たいだけなので割愛）

https://dev.classmethod.jp/articles/python-tabulate/

## sqlite3との併用
　テーブルの内容のほかに、ヘッダーを取得するので、以下のように関数を定義しておくと使い勝手が良いです。
```python
import sqlite3
from tabulate import tabulate

dbname = 'sample.db'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
cur.execute(
    '''
    CREATE TABLE IF NOT EXISTS people(
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        name STRING,
        age INTEGER);
    '''
)
cur.execute(
    '''
    INSERT INTO people(name, age) 
    VALUES
        ('taro', '17'),
        ('hanako', '14'),
        ('takashi', 35);
    '''
)

#こんな風に関数を定義
def print_table(table_name):
    # テーブルのカラム名を取得
    cur.execute(f"PRAGMA table_info({table_name});")
    columns = cur.fetchall()
    # カラム名だけを抽出して表示
    field_names = [column[1] for column in columns]
    cur.execute(f'SELECT * FROM {table_name};')
    print(tabulate(cur.fetchall(), headers=field_names, tablefmt="pretty"))

print_table('people')
cur.close()
conn.close()
```

## まとめ
　ちょっとしたデータベースの可視化には、`tabulate`を使うと便利！

## 最後に
　ここまで読んで下さりありがとうございました。本気で可視化しながらデータベースを作りたい人は、`openpyxl`とかを使ってExcelに出力する方が良いですが、ちょっとした出力には、こちらの方が便利だと思います。`pprint`も試してみましたが、ちょっと見づらいので、いままで`pprint`でやっていた人には、乗り換えることをお勧めします。
(小)規模マイコンでスタックチャン風のアニメを作って遊ぶ。(2) セル画1から4


目的
----

- 全画面のセル画をシーン1から4までを作る
- 使用ツールは、Edge2 (検索してね!)
- 最後に補助線を消して白黒を反転するので気にしないでね!!


図
----

![o_coq831.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/e8b5091e-d94d-48ae-bb7e-90af97aca0ae.jpeg)

![o_coq832.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/c2cef98d-6fd5-4746-b1c8-cef874281438.jpeg)

![o_coq833.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/4f7b61bb-054d-483b-913f-2f1761d8ebd7.jpeg)

![o_coq834.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/840352/c616329d-76d7-4812-8751-b709b052be56.jpeg)
linux mint22.1で端末の文字を大きめにしたい

#端末(ターミナル）の文字を大きめにしたい

１．端末を開く

２．右クリック→メニューバーを表示

３．メニューバー→設定

４．使っているプロファイルの文字タブに移動

５．フォントを指定にチェックを入れて、右のフォントをクリックする

６．端末のフォントの選択で一番下にサイズ変更があります　
右のプラスとマイナスで数字を調整　今回は14にしました
大学のアプリコンテストで2つ受賞した話

# はじめに
うちの大学では毎年アプリコンテストが実施されます．しかも協賛が8社付いて賞金総額6.5万円という太っ腹っぷり．学部2年生～大学院生まで自由参加なので意外とハイレベルな戦いにはなりますが，賞金がおいしいので参加したら得しかない神イベントです．
そのイベントで2社から表彰されたので書き残しておこうと思います．

# コンテスト概要
うちの大学学部学科で実施されているコンテストです．
参加者は上から下まで制限なく自由．
提出してプレゼンするアプリはネイティブアプリ，Webアプリなど形式は問わない．
開発段階でもデプロイ段階でもかまわない．
10分でアプリ概要のプレゼンとデモ，質疑応答をする．
企業8社の大人の方10数名が審査員となるといった感じでした．

# アプリ概要
別記事でアプリの詳細は書こうと思います．
簡単に説明するとルービックキューブのタイマーアプリを作成しました．

# 感想
シンプルにアマギフ1.5万円分貰えたのでめちゃくちゃ嬉しいですね．

講評の中で，アプリの完成度，マネタイズ面，技術力，プレゼン全てを好評していただいたので中々嬉しいものでした．もっと上の舞台でも賞を取れるように頑張りたいと思います．

# いただいた賞
![S__112443395.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3888054/6f5bffc0-2fbb-4c11-80de-c97bc5228f4b.jpeg)
2025/3/17主にITとかセキュリティの記事

住宅設備機器専門卸商社の株式会社ソーゴー、2024年11月のサイバー攻撃で個人情報漏洩は確認されず(3/14)
https://rocket-boys.co.jp/security-measures-lab/sogo-housing-equipment-cyberattack-no-data-breach/

選考会委員が読み解く「情報セキュリティ10大脅威 2025」のポイントは？(3/14)
https://www.trendmicro.com/ja_jp/jp-security/25/c/expertview-20250314-01.html

カスペルスキーがIT専門家をターゲットにしたディープセックAIなりすましキャンペーンを明らかに(3/14)
https://voi.id/ja/teknologi/468307

企業の45%が生成AIを利用、日常業務では80%超の企業が利用成果を認識 一般財団法人日本情報経済社会推進協会(3/14)
https://www.jomo-news.co.jp/articles/-/631587
https://www.fukuishimbun.co.jp/articles/-/2262532

クラウドストライクとNOV: CISOがAI駆動の攻撃にゼロトラストで立ち向かう方法(3/15)
https://innovatopia.jp/cyber-security/cyber-security-news/49438/

当社米国子会社における不正アクセスによる従業員の個人情報流出の可能性について(3/14)
https://www.topy.co.jp/ja/news/news/COPY-COPY-COPY-news20250314.html

サイバー攻撃で249件の個人情報が流出　指定管理者のサイトが標的に【長野・小諸市】(3/15)
https://news.yahoo.co.jp/articles/31d94d5d12d73c470ec259dafb8c061b40d6425e
https://nordot.app/1273569075246597047?c=1179248089549373591

Flashpointの脆弱性ウィークリーレポート：CVE-2024-56196、CVE-2025-27554他(3/14)
https://codebook.machinarecord.com/threatreport/37706/

セゾンカード、メールにブランドロゴを表示する「BIMI」を導入(3/14)
https://www.poitan.jp/archives/142763

マイナ保険証の「利用登録解除申請者」が増加…マイナ保険証を利用するメリットと登録解除の背景とは？(3/15)
https://news.livedoor.com/article/detail/28349091/

【平塚市】岡崎小学校の卒業アルバムシステムに不正アクセス、児童216人分の個人情報流出の可能性(3/14)
https://shonanjin.com/news/hiratsuka-graduation-album-data-breach/


ランサム攻撃手口が急に変化　その裏にあるサイバー攻撃者の策略とは(3/14)
https://kn.itmedia.co.jp/kn/articles/2503/14/news121.html

Group-IB:サイバー攻撃はより複雑になり、インドネシアはAPTターゲットとして2位にランクされています(3/14)
https://voi.id/ja/teknologi/468314

プチ炎上中のJCBの個人情報の第三者提供は本当に危険なの？　不明な点はJCBにも確認してみた！（菊地崇仁）(3/15)
https://news.infoseek.co.jp/article/poitan_142601/

危険!DeepSeekはサイバー犯罪者がマルウェアを開発するのを助けることができます(3/14)
https://voi.id/ja/teknologi/468315

自動返信機能が悪用、スパムメール配信多発　レンタルサーバーサービス【ロリポップ】(3/14)
https://act1.co.jp/20250314-1/

Windows 11 24H2の3月アップデートで障害続出 インストール失敗やブルースクリーンの報告相次ぐ(3/16)
https://reinforz.co.jp/bizmedia/73866/

イオンカード、フィッシングメールと区別できるようにメール内に氏名を記載(3/15)
https://www.poitan.jp/archives/142850

メディアのライター装い、公開前の情報入手狙うなりすましメールに注意　イード(3/14)
https://news.goo.ne.jp/article/itmedia_news/trend/itmedia_news-20250314_147.html

米国 司法省 中国の捜査当局、情報機関はフリーランスのハッカーや情報セキュリティ会社を活用し、世界中のコンピュータ・ネットワークを侵害している (2025.03.05)(3/15)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/03/post-149b07.html

アカウント周りの処理とかについて(3/15)
https://www.docswell.com/s/mizuame/5N1817-2025-03-15-JAWS-UG

都合良い検索結果を作り出して犯罪をやりやすくする「SEOポイズニング」(3/15)
https://ascii.jp/elem/000/004/257/4257333/?rss

グーグルがサイバーセキュリティー事業拡充、経産省と組み無償の人材育成など展開(3/14)
https://xtech.nikkei.com/atcl/nxt/column/18/00001/10398/?i_cid=nbpnxt_pgmn_topit

AIの法規制をめぐる各国の動向と日本企業への影響(3/14)
https://www.softbank.jp/biz/blog/business/articles/202503/trends-in-ai-regulation/

どこから漏れた？　「クレカ情報」が盗まれる巧妙な手口とは(3/15)
https://techtarget.itmedia.co.jp/tt/news/2503/15/news02.html
PHPで「for文で複数の変数を変化させる」の動作を確認してみた。

# 概要

PHPで「for文で複数の変数を変化させる」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/for/index7.html

# 実装

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

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

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

<p>
<?php
for ($i = 0, $j = 3; $i < 3; $i++, $j--){
  print 'i = '.$i.',j = '.$j.'<br />';
}
?>
</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>
i = 0,j = 3<br />i = 1,j = 2<br />i = 2,j = 1<br /></p>

</body>
</html>
```

# まとめ

何かの役に立てばと。
N行のデータ入力の読み取り

C#で複数行の文字列を、通常1行しか取得しないConsole.ReadLineで受け取るには、ループを使います。

(条件)1行目で行数を表すNが与えられます。
次行は続いてN行分文字列が入力されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037410/42e0e89e-d9d0-4a41-aaad-4db7488d0690.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4037410/8f46a53e-f5bb-45e3-b073-cc38624a8601.png)

11行目でfor文にi < Nと書く時、ReadLineで受け取ったNは整数型に変換（int.Parse）をしないとエラーになります。