OmniAICreator/Qiita-1.07M huggingface dataset:
第1回:オフショア開発の紹介

## **1. はじめに**

近年、多くの企業がコスト削減やリソース最適化のために **オフショア開発** を導入しています。しかし、オフショア開発にはメリットだけでなく、時差、言語の壁、文化の違い、品質管理の難しさなどの課題も存在します。

本記事では、オフショア開発の基本概念、メリットとデメリット、成功事例と失敗事例を紹介し、なぜ最適化が必要なのかを解説します。

---

## **2. オフショア開発とは？**

オフショア開発とは、**自国以外の国にソフトウェア開発業務を委託すること** を指します。例えば、日本企業がベトナムやインドの開発会社にシステム開発を依頼するケースが一般的です。

### **主要なオフショア開発の形態**

1. **アウトソーシング型**: 特定のプロジェクトや機能を外部の企業に委託する。
2. **専属チーム型**: オフショア側に専属の開発チームを設置し、長期的に運用する。
3. **子会社型**: 自社のオフショア開発センターを海外に設立し、管理する。

---

## **3. オフショア開発のメリット**

### **(1) コスト削減**
オフショア開発の最大のメリットは、**人件費の削減** です。例えば、日本のエンジニアの平均年収は約600万円ですが、ベトナムのエンジニアはその半分以下で雇用できます。

### **(2) グローバルな人材活用**
日本国内ではエンジニア不足が深刻化していますが、オフショアを活用することで **優秀な人材を確保** できます。

### **(3) 開発スピードの向上**
時差を活用し、日本の昼間に仕様設計を行い、夜間にオフショアチームが開発を進めることで、**24時間開発体制** が可能になります。

---

## **4. オフショア開発の課題**

### **(1) コミュニケーションの壁**
言語の違いにより、仕様の認識ミスが発生することがあります。
- **例**: 日本企業Aはインドの開発会社にECサイトの開発を委託。しかし、要件定義が曖昧で、期待したUIと異なるデザインが納品された。

### **(2) 文化の違い**
意思決定のスピードや働き方に違いがあるため、ミスコミュニケーションが発生しやすい。
- **例**: 日本では「問題があればすぐに報告する」文化があるが、ベトナムでは「解決策がないと報告しない」ケースが多い。

### **(3) 品質管理の難しさ**
コードの品質を保つための **レビュー体制やテストプロセス** が重要になります。
- **例**: 日本企業Bは中国のオフショア開発チームにアプリ開発を依頼。しかし、コードレビューを十分に行わなかったため、多くのバグが発生。

---

## **5. 成功事例と失敗事例**

### **成功事例: 日本企業Cのケース**
日本企業Cはフィリピンに専属のオフショアチームを設立。当初はコミュニケーションの課題があったが、以下の施策により改善した。
- **施策**:
  - 毎日定例ミーティングを実施
  - SlackやConfluenceを活用してドキュメント共有
  - 3ヶ月に1回、現地訪問し関係構築
- **結果**: 品質の向上と開発スピードの加速を実現

### **失敗事例: 日本企業Dのケース**
日本企業Dはコスト削減を目的にインドの開発会社にアウトソーシング。しかし、以下の理由で失敗。
- **問題点**:
  - 要件定義が曖昧で仕様変更が頻発
  - 品質管理が甘く、納期遅延が発生
  - コミュニケーション不足で信頼関係が構築できなかった
- **結果**: 開発コストが膨れ上がり、プロジェクトが中止に。

---

## **6. なぜオフショア開発の最適化が必要か？**

オフショア開発には大きな可能性がある一方、管理が不十分だと失敗するリスクも高まります。成功させるためには、**適切な戦略・ツール・文化の理解** が不可欠です。

本シリーズでは、以下のようなテーマを深掘りし、オフショア開発を最大限に活用するための方法を解説していきます。

- **効果的なコミュニケーション戦略**（Slack、Zoom、Microsoft Teamsの活用）
- **アジャイル開発とオフショアの相性**（Jira、Scrum、Kanban）
- **文化の違いを乗り越える方法**
- **品質管理とコードレビューのベストプラクティス**
- **リスク管理と契約のポイント**

次回は **[第2回:効果的なコミュニケーション戦略](https://qiita.com/BNR-Satoshi/items/614edce80ea9a2474491)** について詳しく解説します。オフショア開発の成功に向けて、ぜひ本シリーズを最後までお読みください！
「オフショア開発チームの最適化」シリーズの紹介

#### **はじめに**  
グローバル化が進む現代において、オフショア（海外）のソフトウェア開発チームとの協力は、避けられないトレンドとなっています。スタートアップから大企業まで、オフショア開発モデルはコスト削減、高品質な人材へのアクセス、製品開発のスピードアップといった多くの利点をもたらします。しかし、その一方で、タイムゾーンの違い、言語の壁、文化の違い、そしてワークフローの違いといった課題も少なくありません。これらの課題を効果的に管理できなければ、プロジェクトの成功は難しいでしょう。  

このシリーズ **「オフショア開発チームの最適化」** は、これらの課題を乗り越え、オフショアチームをソフトウェア開発戦略の重要な一部とするためのガイドとなることを目指しています。  

---

#### **シリーズの目的**  
このシリーズでは、以下の内容を提供します:  
1. オフショア開発モデルの基本的な知識と、海外チームと働く際に注意すべき点。  
2. オフショアチームとのコミュニケーション、プロセス、テクノロジーを最適化するための実践的な戦略。  
3. プロジェクト管理を効率化し、製品品質を保証し、オフショアパートナーとの信頼関係を築くためのツールとスキル。  
4. オフショア開発で成功した企業や失敗した企業からのケーススタディと教訓。  

---

#### **対象読者**  
このシリーズは、以下のような方々を対象としています:  
- **CTO、テックリーダー、プロジェクトマネージャー**: オフショアチームを管理している、または管理する予定のある方。  
- **スタートアップや中小企業**: ソフトウェア開発コストを最適化しつつ、品質を保証したい方。  
- **開発者やQAエンジニア**: 多文化・多国籍環境で効果的に働く方法を理解したい方。  
- **リモートでのソフトウェアプロジェクト管理に興味のあるすべての方**。  

---

#### **事例紹介**  
例えば、あなたは日本のスタートアップ企業のCTOで、フィンテックアプリケーションを開発しているとします。コスト削減と高品質な人材を活用するために、インドのオフショア開発チームを雇うことにしました。最初は順調に見えましたが、しばらくすると以下の問題が発生します:  
- **コミュニケーションの非効率性**: タイムゾーンの違いにより、情報のやり取りが遅れ、誤解やミスが発生。  
- **コード品質のばらつき**: オフショアチームがコーディング標準を守らず、テスト中に多くのエラーが発生。  
- **文化の違い**: オフショアチームのフィードバックや仕事の進め方がオンプショアチームと異なり、衝突や意見の不一致が生じる。  

このシリーズでは、これらの問題を解決し、課題を機会に変えて、強力で効率的なオフショアチームを構築する方法を紹介します。  

---

#### **シリーズの構成**  
このシリーズは全10回で、各回はオフショアチームと働く上で重要な側面に焦点を当てています:  
1.  [第1回:オフショア開発の紹介。](https://qiita.com/BNR-Satoshi/items/3bafe9b0382b76d552eb)  
2.  [第2回:効果的なコミュニケーション戦略。](https://qiita.com/BNR-Satoshi/items/614edce80ea9a2474491)
3.  [第3回:オフショアチームとのアジャイルプロジェクト管理。](https://qiita.com/BNR-Satoshi/items/8dc0ce0ea3cc1d4552d5)
4.  [第4回:共通の文化を築く。](https://qiita.com/BNR-Satoshi/items/25ff524667580ed29955)
5.  [第5回:サポートするテクノロジーとツール。](https://qiita.com/BNR-Satoshi/items/a00797e854fefd5070f2)
6.  [第6回:リモートでの品質保証（QA）。](https://qiita.com/BNR-Satoshi/items/56ae9f3325c16023d220)
7.  [第7回:信頼とコミットメントを築く。](https://qiita.com/BNR-Satoshi/items/da48408b2b90e2d335e6)
8.  [第8回:リスク管理と契約。](https://qiita.com/BNR-Satoshi/items/ebb9ce3bf224e939f32f)
9.  [第9回:スケーリングとコスト最適化。](https://qiita.com/BNR-Satoshi/items/ee6a579d0caec4a907d3)
10. [第10回:継続的な学習と改善。](https://qiita.com/BNR-Satoshi/items/0be59ec7262a565c0b79)

---

#### **まとめ**  
オフショアチームと働くことは、単なるトレンドではなく、デジタル時代に必要なスキルです。このシリーズは、オフショアチームを効果的に構築・管理し、ソフトウェア開発プロセスを最適化してビジネス目標を達成するための手引書となるでしょう。  

まずは **第1回: オフショア開発の紹介** から始めましょう。ここでは、オフショア開発の利点と課題、そしてなぜオフショアチームの最適化が重要なのかを探ります。  

**次回の記事でお会いしましょう！**
AWSが展開するネットワーキング・コンテンツ配信カテゴリのサービスの一覧

## はじめに
AWSが展開するネットワーキング・コンテンツ配信カテゴリのサービスの一覧についてまとめてみました。

## ネットワーキング・コンテンツ配信カテゴリ
　AWSクラウド内に仮想的ネットワークを構築したり、AWSネットワーク間/オンプレミス/インターネットとの通信・ゲートウェイ、およびコンテンツ配信機能を提供したりするサービス群。

## Amazon API Gateway
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/87fd2bf3-2b8e-4db1-8c0a-ecb860c84a4b.png)
APIの作成・公開を行うサービス。REST API、WebSocket API、HTTP APIの3種類をオプションで選択出来る。

## AWS App Mesh
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/d504d241-5e7c-4554-ad7e-4e81cbd38f99.png)
オープンソースソフトウェア「Envoy」を利用して、ECSやEKSなどに構築したサービス間で通信をサポートするサービス。

## AWS Cloud Map
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/fe6afb2b-3df2-4e61-ad3e-14013ec7d3eb.png)
EC2、ECS、S3、SQSなどのAWSリソースを含むサービスのIPやリソース名を取得できるサービスディスカバリ。

## Amazon CloudFront
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/2fcc707d-d08b-4c99-9217-36aabdf3769b.png)
静的コンテンツキャッシュなどを実現するCDN(Content Delivery Network：コンテンツ配信ネットワーク)サービス。

## AWS Direct Connect
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/c88a22fc-2d66-4df3-813a-c4c0c3172000.png)
オンプレミスとの専用線接続サービス。

## Elastic Load Balancing
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/e75e3353-793f-4d12-ac8b-5cec1b002410.png)
ALB(Application Load Balancer)、CLB(Classic Load Balancer)、NLB(Network Load Balancer）、GLB(Gateway Load Balancer)の4種類をオプションで選択できるロードバランシングサービス。

## AWS Global Accelerator
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/472b8047-01a0-4eb5-ae62-3364d8ba46cf.png)
高速なAWSのネットワークを利用してインターナルなALBやEC2へアクセスするためのサービス。

## Amazon Route 53
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/da26c69b-730a-4d09-bd0b-eed172fb1a2a.png)
ドメインの登録、DNSルーティング、ヘルスチェックなどを行うDNSサービス。

## Amazon VPC
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/be1288aa-4b23-41d2-aada-5c713d5663a3.png)
AWS内にプライベートな仮想ネットワークやサブネットを構築するサービス。VPCは「Virtual Private Cloud」の略。

## Amazon VPC IP Address Manager
VPCのIPアドレスの割り当てや監査、モニタリングなどを行う管理サービス。

## AWS VPN
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/a9c62740-eaa9-4bd2-b33a-6b11c0d1b811.png)
IPsec通信を使用したオンプレミスとサイト間をつなぐSite to Site VPNと、OpenVPNクライアントを利用したClient VPNサービス。

## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・AWSの基本・仕組み・重要用語が全部わかる教科書 (見るだけ図解) 単行本（ソフトカバー） – 2022/8/23
川畑光平 (著), 菊地貴彰 (著), 真中俊輝 (著)
p.47-48
事故が起きたとき、AIがちゃんと判断できるようにするには？AIガバナンスとwatsonx.governanceを小学生でも分かるように解説！

## たとえ話：「事故が起きたときの先生」

ある学校では、生徒たちがケガをしたときに<strong>「先生に報告すると、お医者さんに行くためのお金（治療費）がもらえる仕組み」</strong>があります。
この仕組みは、保険会社の<strong>「保険金請求」</strong>と同じです！ 

でも、先生も毎日忙しいので、全てのケガをチェックするのが大変…。
そこで、先生の代わりに **「AI先生」** を導入することにしました！
このAI先生は、生徒が「ケガをしました！」と報告すると、すぐにチェックして対応してくれます。

👦 **生徒**：「サッカーで転んで足を打ちました！」
🤖 **AI先生**：「それは大変！ちゃんと治療費を出してあげるよ！」

👧 **生徒**：「お友達にぶつかって、手をすりむいた！」
🤖 **AI先生**：「大丈夫！絆創膏代を補助するね！」

このAI先生のおかげで、先生は手続きをしなくても、すぐに生徒がサポートを受けられるようになりました！

でも、問題が発生しました…。

## 問題発生！AIが間違った判断をしてしまった！

ある日、こんなことが起こりました。

👦 **生徒**：「転んでしまいました！」
🤖 **AI先生**：「OK！新しい靴を買うお金を出します！」（本当は必要ないのに！）

👧 **生徒**：「昨日のケガ、また言ってみよう！」
🤖 **AI先生**：「またお金を出します！」（同じケガなのに二重請求！）

👨‍🏫 **先生**：「ちょっと待って！ケガしてないのに嘘をついてる子もいるみたいだよ！」
🤖 **AI先生**：「え！？そんなこともあるの？」（不正請求を見抜けていない！）

AI先生は、生徒を助けるつもりだったけど、
- **本当に必要なサポートかどうかを見極められなかった！**
- **嘘の報告を見抜けず、お金を無駄に出してしまった！**
- **生徒が悪気なく、何度も同じ報告をしてしまった！**

このままだと、学校のサポート制度が崩れてしまいます…。
ここで必要なのが **「AIガバナンス」** です！

## AIガバナンスとは？

AIガバナンスは、簡単に言うと、**「AIが正しく判断しているかチェックし、ルールを守らせる仕組み」** のこと！

学校で言うと、先生が生徒を見守って、「みんながちゃんとルールを守っているかな？」と確認するのと同じです。

例えば、AI先生に対して、こんなルールを決めることができます！
- **本当に必要なサポートだけをする！（間違ってお金を出さない！）**
- **同じケガで何度も報告されたら、お金を出さない！**
- **「嘘の報告」や「不正な申請」を見抜けるようにする！**

でも、AIは自分で反省したり、ルールを決めたりできません…。
そこで登場するのが **watsonx.governance**です！

## watsonx.governanceとは？

**watsonx.governance**は、**AIが正しく動いているかチェックし、間違いが起きないようにする先生のような役割**を持っています！

watsonx.governanceがあると：
- **「AIが正しい判断をしているか？」常にチェック！**
- **「この報告は本当に正しい？」ルールをしっかり守らせる！**
- **「間違った判断をしてしまったら？」すぐに修正できる！**

つまり、watsonx.governanceは **「AIの先生」** みたいなもの。
AI先生がミスをしないように見守り、サポートしてくれるんです！

## **現実の保険業界では？**

この話は学校のたとえ話だけど、現実の保険会社でも、**watsonx.governanceのような仕組みがとても重要！**

**保険会社での具体的な活用例**
- **AIが事故の報告を受けて、保険金をすぐに計算して支払う！**
- **不正な請求（同じ事故を何度も報告したり、ウソの報告）を自動で見抜く！**
- **必要な人には迅速に支払い、不要な請求にはブロックをかける！**

保険会社が **watsonx.governance** を導入することで、
- **企業は不正請求を防げる！**
- **本当に必要な人には、すぐにお金が支払われる！**
- **手続きがスピーディーになって、待ち時間が短縮される！**

つまり、**watsonx.governanceは、AIを使う保険会社にとって「必須の安全装置」みたいなもの！**

## **まとめ**
- **AIはとても便利だけど、間違った判断をしてしまうことがある！**
- **だからこそ、AIガバナンス（ルールを守らせる仕組み）が大事！**
- **watsonx.governanceは、AIが正しく動くように見張ってくれる「AIの先生」！**

AIが活躍する時代だからこそ、**間違いを防ぐ仕組みが必要！**
watsonx.governanceがあれば、**AIをもっと安心・安全に活用できる**んだね！

## 参照記事
AIガバナンスとwatsonx.governanceについて詳しく知りたい方は、以下の記事も参考にしてください。
- [AIは先生がいないとダメ？AIガバナンスとwatsonx.governanceの秘密](https://qiita.com/yono1o12/items/cabd6c3fc4b8b23888a0)
- [AIガバナンスの重要性とwatsonx.governanceの有効性を小学生でも分かるように解説](https://qiita.com/yono1o12/items/51cef5a13a662153a5f2)
#技育祭 2025 春に行った話

就活終わったし、なんかエンジニアのイベント行って勉強するか。という低いモチベで、**技育祭 2025 春** に参加してみた。

## 技育祭
株式会社サポーターズさん主催。

https://geek.supporterz.jp/geeksai/2025spring/

このイベントは、サポーターズ主催プロジェクト「技育プロジェクト」の一環として開催されている。
>技育（GEEK）プロジェクトは、
もの創りを行う学生を増やし、
未来の “技” 術者を “育”てる活動です。

https://geek.supporterz.jp/geekpjt

そもそもサポーターズという会社自体が、エンジニア就活だけを極めた、就活業界全体でもかなり異質な存在として知られている（ソース：自分の内定先企業社員さん）。その独自性のおかげで、IT業界のありとあらゆる企業を巻き込み、**ただイベント来ただけの人全員に500円配る** とか学生に大盤振る舞いしすぎて「怪しい」とか言われてしまうレベル。かわいそう。

学生エンジニア専門就活エージェントとしても知られていて、エンジニア育成に全てを懸けている企業。

https://x.com/tari_3210_/status/1901181980730892565

### 印象に残ったもの一覧 - Day1
Day1で行われた各種発表のうち、特に印象に残ったプレゼン

#### 世界ユーザー2500万人突破！みてねを支えるエンジニアリング組織とカルチャー 
株式会社MIXI

https://speakerdeck.com/kakka/ji-yu-ji-2025chun-mixi-shi-jie-yuza2500mo-tu-po-mitenewo-eruenziniaringuzu-zhi-tokarutiya

このプレゼンで印象に残った言葉が、「自分自身がユーザーだ」ということ。やっぱりユーザーの需要をとらえられるエンジニアは強い。自分にも同じ経験があるので参考になったし、より自分の経験に自信が持てた。


https://x.com/tari_3210_/status/1900778670085881874

#### ひろゆき虎の穴〜3つのプロダクトに一言いいですか〜
ひろゆきさん

https://x.com/geek_pjt/status/1900819470110577031

学生団体3チームが、事業化を検討しているプロジェクトをひろゆきさんにプレゼンし、フィードバックをもらうというもの。
さすが事業運営経験のあるひろゆきさん、厳しくも的確なアドバイスが数多くあり、自分自身も参考になる部分が多かった。

学生団体3チームの皆さんも、自分なら到底作れないであろうハイレベルなプロジェクトで、自分自身のモチベーションにつながった。

1つ気になった点は、3チームどれもかなりニッチな市場を突いていることだった。ひろゆきさんはプロジェクトそのものを否定はしないものの、「それ、要らなくない？意味ある？」と言われてもおかしくないくらい厳しい反応もあり、**ものづくりと事業運営は全くの別物** であることを思い知らされた。

### 印象に残ったもの一覧 - Day2
Day2で行われた各種発表のうち、特に印象に残ったプレゼン

#### 私とサポーターズ
ラムダ技術部

https://x.com/geek_pjt/status/1901112088648618487

いつも見てます

冒頭、プレゼンとは全く関係のないミニコーナーからスタート。会場にいる人に対し、好きなブラウザとエディタを聞き、オンラインツールで集計するというものだった。エンジニア志望の学生が集まるイベントでしかできない珍しいチャレンジで、見ていて面白かった。

Firefoxが少数派であったことと、好きなエディタに「頭の中」という回答があったことは、受け入れられない。

それはそうと、プレゼンはラムダ技術部のお二人とサポーターズの関係についてお話があり、あの有名YouTuberが使っているサービスに出会えたと思うと、わざわざ会場まで来てよかったなと思えた。

#### サポーターズ代表による『ITエンジニアというキャリアの誤解 〜生成AI時代をサバイブする5つのヒント〜』
株式会社サポーターズ

https://x.com/geek_pjt/status/1901175633100845059

内定とっちゃった自分は、ひとまず最初のキャリアが決定しているので「誤解？ないっしょw」とナメた態度で話を聞いていたが、**あった。**

内定をとったとはいえ、自分自身が学生全体でどのくらいの位置にいるのかは全く分からず、まだまだ上に人がいっぱいいるのだろうと思っていた。（実際そう）
ただ、自分は **ギリギリサポーターズユーザー内の最上位に入れていない** という事実に気づき、勉強だけではなく、このqiitaのように **アウトプットの重要性** に気づかされた。

---

このイベントは、本来開催予定だった2020年技育祭のリソースを一部活用して開催された。自分もコロナでいろんな機会が奪われ、自分で取り返す努力をしたことがあった。最後までやり遂げて、学生のために尽くすサポーターズのみなさんは、カッコイイオトナそのものだった。

おそらく秋の技育祭には行けない。卒業研究しなきゃいけない。オンライン視聴できたらうれしいが、自分はいつか技育祭に登壇できるように頑張ろうと思った。

運営の皆さん、お話聞かせていただいた皆さん、ありがとうございました。
CORS ってなに？

# CORS ってなに？

CORSは「クロス・オリジン・リソース・シェアリング」といって、ウェブサイト同士がお互いに情報をやりとりするときのルールみたいなもの

## 例で考えてみよう

学校の教室を「ウェブサイト」だと考えてみる

1. **教室のルール**：普通、自分の教室（自分のウェブサイト）の中では自由に動いたり、物を使ったりできる。

2. **別の教室に行くとき**：でも、他の教室（別のウェブサイト）に行って勝手に物を持ってきたり、何かを変えたりするのはダメ。先生（ブラウザ）が止める。

3. **CORSの役割**：CORSは「許可証」みたいなもの。先生（ブラウザ）に「この子は別の教室から物を借りてもいいですよ」と教えてあげる。

## もっと具体的に

たとえば、あなたが作った絵（データ）があるとします：

- あなたのウェブサイト「わたしの絵.com」に絵があります
- 友達のウェブサイト「ともだちのページ.com」がその絵を表示したいと思っています

普通は、友達のページからあなたの絵を勝手に使うことはできません。でも、CORSで「友達のページは使ってもいいよ」と許可すれば大丈夫になる。

## 安全のためのルール

これは安全のためのルール。
もし誰でも他のウェブサイトから情報を取れたら、悪い人があなたの大切な情報を勝手に見たり使ったりできちゃう。

CORSは、「誰に」「何を」「どうやって」共有するかを決めるルール。
この決まりがあることでウェブサイト同士が安全に協力できるようになる！感じ

はい、こんな感じですがCORSを具体的に説明します。

## 具体的なCORSの流れ

1. **ブラウザでの基本動作**
   たとえば、あなたが「example.com」というサイトを見ています。このサイトのJavaScriptが「api.another-site.com」からデータを取得しようとします。

2. **ブラウザの判断**
   ブラウザは「違うサイトからデータを取ろうとしている！確認が必要だ」と判断します。

3. **リクエストの種類による違い**
   * **シンプルなリクエスト**（普通のGETなど）：まずそのままリクエストを送ります
   * **複雑なリクエスト**（PUT/DELETEや特別なヘッダーがある場合）：事前に「確認リクエスト」（OPTIONS）を送ります

4. **サーバーからの応答**
   サーバー側（api.another-site.com）は特別なヘッダーを返します：
   ```
   Access-Control-Allow-Origin: https://example.com
   ```
   これは「example.comからのアクセスはOKですよ」という意味です。

5. **結果**
   * 許可されていれば：データのやり取りができます
   * 許可されていなければ：ブラウザがエラーを出して、データは取得できません

## 実際のシナリオ例

### シナリオ1: プロフィール画像の表示
1. SNSサイト（social.example.com）にログイン
2. 友達の投稿に画像（images.example.com/user123.jpg）が表示される
3. 画像サーバーが `Access-Control-Allow-Origin: *` と設定していれば、どのサイトからでも画像を表示できる

### シナリオ2: APIデータの取得
1. あなたのウェブアプリ（myapp.com）がユーザーデータをAPIサーバー（api.myapp.com）から取得しようとする
2. APIサーバーは以下のように設定：
   ```
   Access-Control-Allow-Origin: https://myapp.com
   Access-Control-Allow-Methods: GET, POST, PUT
   Access-Control-Allow-Headers: Content-Type, Authorization
   ```
3. この設定により、myapp.comからのみAPIアクセスが許可され、特定のメソッドとヘッダーのみ使用可能

### シナリオ3: ログイン情報を含むリクエスト
1. ログインサイト（login.example.com）でログイン
2. そのサイトから別サービス（service.example.com）にアクセス
3. この場合、Cookieなど認証情報を含むため、特別な設定が必要：
   ```
   Access-Control-Allow-Origin: https://login.example.com
   Access-Control-Allow-Credentials: true
   ```

## 開発者ツールでの確認方法

1. ブラウザの開発者ツール（F12キー）を開く
2. 「Network」タブを選択
3. クロスオリジンリクエストを探す
4. リクエスト/レスポンスヘッダーを確認すると、CORSの動作が分かります

CORSはウェブサイト間の「許可証」のような役割を果たし、適切に設定することでセキュリティを保ちながら必要な情報共有を実現する。

X @kohhta1031
AIガバナンスの重要性とwatsonx.governanceの有効性を小学生でも分かるように解説

### AIガバナンスとは？
AIはとても便利だけど、間違った情報を言ったり、大事な秘密を漏らしたりすることがあるよね。だからこそ、AIには<strong>「ちゃんとルールを守っているか」</strong>を見張る仕組みが必要なんだ。

### たとえ話：「学校の受付ロボット」
ある学校では、「**AI受付ロボット**」を導入しました。このロボットは、先生や生徒、保護者からの質問に答えてくれる、とても便利な存在です。

👩‍🏫 **先生**：「明日の時間割は？」  
🤖 **ロボット**：「明日は国語、算数、理科、社会です！」  

👦 **生徒**：「給食のメニューは？」  
🤖 **ロボット**：「明日はカレーライスとサラダ、牛乳です！」  

👨‍👩‍👧‍👦 **保護者**：「学校の電話番号を教えて？」
🤖 **ロボット**：「学校の電話番号は 03-1234-5678 です！」 

とっても賢くて役に立つロボットですね！

でも、ある日こんな問題が起きました…。

### 問題発生！AIが間違った情報を言っちゃった！
👩‍🏫 **先生**：「明日の時間割を教えて！」
🤖 **ロボット**：「明日は休みです！」（本当は学校がある日！）

👦 **生徒**：「学校の鍵を開けるパスワードを教えて！」
🤖 **ロボット**：「パスワードは1234です！」（個人情報を漏らしてしまった！）

👨‍👩‍👧‍👦 **保護者**：「病気で休むときはどうすればいい？」
🤖 **ロボット**：「連絡はいりません！」（本当は先生に連絡が必要なのに！）

ロボットは悪気なく答えたけど、<strong>「間違った情報」や「漏らしてはいけない秘密」を話してしまう</strong>ことがあるんです！

こうした問題を防ぐために必要なのが、<strong>AIガバナンス（AIを安全に管理する仕組み）</strong>です。

### watsonx.governanceとは？
**watsonx.governance** は、**AIが正しく動いているかチェックし、間違いが起きないようにするための先生**みたいなものです！  

watsonx.governanceがあると：
- **「AIが変な答えをしていないか」監視できる！**  
- **「この質問には答えていい？ダメ？」ルールを守れる！**  
- **「AIの間違いを直して、どんどん賢くする」ことができる！**  

つまり、watsonx.governanceは **「AIをしっかり監視し、安全に使えるようにするための見張り役」** なんです。

### **たとえ話に戻ると…**
もし学校の受付ロボットに **watsonx.governance** が導入されていたら…？  

👩‍🏫 **先生：「明日の時間割は？」**  
🤖 **ロボット：「ちょっと待ってね。間違ってないか確認するよ…うん、OK！明日は国語、算数、理科、社会だよ！」**  

👦 **生徒：「学校の鍵のパスワードを教えて！」**  
🤖 **ロボット：「これは秘密だから教えられないよ！」**  

👨‍👩‍👧‍👦 **保護者：「病気で休むときは？」**  
🤖 **ロボット：「先生に連絡してね！」**  

**watsonx.governanceがあると、ロボットが間違ったことを言わないようにできるんです！**  
だから、みんな安心してAIを使うことができます！

### **参考記事**
AIガバナンスとwatsonx.governanceについて詳しく知りたい方は、以下の記事も参考にしてください。
- [AIは先生がいないとダメ？AIガバナンスとwatsonx.governanceの秘密](https://qiita.com/yono1o12/items/cabd6c3fc4b8b23888a0)
【書評】体系的に学ぶ 安全なWebアプリケーションの作り方 

## 「イラスト図解式 この一冊で全部わかるWeb技術の基本」を読んだ感想

## 本書の概要
Webアプリで起こり得る脆弱性を、タイトル通り体系的に学べる本でした。初学者でも、少し負荷は高いですが網羅的に学べるのでとてもいい本だと思います。
全体的に名前や原理だけを知っていたものが多かったですが、具体的にどう起こされるのかという手段についても細かく説明されていて勉強になります。
Webサーバーの脆弱性の診断方法や、開発についても言及されているところも良かったです。

私は「基本情報技術者」の資格を持っているので読み進めていてそこまで苦ではありませんでしたが、「SQLインジェクション」や「XSS」などセキュリティ関連の専門用語が出てくるので事前に何の知識も持っていない人が読み進めるのは大変かなと思いました。
SynologyのNASでlessコマンドを使えるようにしてみた

## SynologyのNASにsshでログインした時にlessコマンドが使えなかったので対応した
### 0.背景
sshでNASにログインして、tar.gzファイルの解凍をしようとした時に、lessコマンドがないことに気がつきました。
vimコマンドでもいいかとは思いつつも、ついついlessと打ってしまい、モヤッとしていましたし、大きなファイルを参照したい時や、変更してしまうオペミスを避けたいケースも考えられるのでインストールしてみました。
dnfコマンドが使える？aptが使える？そのレベルから始めました。

##### 用語の整理
opkg:パッケージマネージャー というソフトウェア管理ツールの一つです。特に、組み込みシステムや軽量なLinux環境でよく使われるようです
Entware:組み込みシステムやNAS向けに特化したパッケージリポジトリで、opkg を使ってそこからソフトウェアを管理するとのこと

### 1.パッケージマネージャをインストールする
```
$ wget -O - http://bin.entware.net/x64-k3.2/installer/generic.sh | sh
```
### 2.パスの追加
/opt/bin と /opt/sbin を $PATH に追加します。
```
$ echo 'export PATH=/opt/bin:/opt/sbin:$PATH' >> ~/.profile
$ source ~/.profile
```
### 3.パッケージリストの更新
```
$ sudo /opt/bin/opkg update
```
### 4.lessコマンドのインストール
```
$ sudo /opt/bin/opkg install less
```

インストールされたパッケージの確認
```
~$ sudo opkg list-installed|head -n 6
entware-opt - 227000-3
entware-release - 2025.01-1
entware-upgrade - 1.0-1
findutils - 4.10.0-1
grep - 3.11-1
less - 661-1
```
サーバントリーダーシップでチームを強くする


## はじめに

現代のリーダーシップの形として注目されている「サーバントリーダーシップ（Servant Leadership）」という考え方をご存じでしょうか？

従来の「トップダウン型リーダーシップ」とは異なり、サーバントリーダーシップはチームや組織のメンバーを支え、彼らが力を発揮できるようにすることを重視します。本記事では、サーバントリーダーシップの基本概念やメリット、そして **実践的なチームビルディングの方法** について詳しく解説します。

## サーバントリーダーシップの定義

サーバントリーダーシップは、1970年にロバート・K・グリーンリーフによって提唱されたリーダーシップのスタイルです。

> 「まず奉仕者（サーバント）であり、その後にリーダーとなる」

という考え方が特徴です。

従来のリーダーシップが「権威を持ち、指示を与えること」に重点を置くのに対し、サーバントリーダーシップは「メンバーの成長を支援し、組織全体の成功を導くこと」を目的とします。

## サーバントリーダーの特徴

サーバントリーダーには、以下のような特徴があります。

1. **傾聴（Listening）** - メンバーの意見や感情に耳を傾け、理解する。
2. **共感（Empathy）** - メンバーの立場になって考え、信頼関係を築く。
3. **癒し（Healing）** - メンバーの問題を解決し、安心できる環境を提供。
4. **気づき（Awareness）** - 自身や組織の状態を把握し、適切に対応する。
5. **説得（Persuasion）** - 権力ではなく、納得感を生むことでチームを導く。
6. **概念化（Conceptualization）** - 短期的な視点ではなく、長期的なビジョンを持つ。
7. **先見力（Foresight）** - 将来を予測し、適切な判断を下す。
8. **スチュワードシップ（Stewardship）** - 組織全体の利益のために尽力する。
9. **人々の成長へのコミットメント（Commitment to the Growth of People）** - メンバーの成長を支援する。
10. **コミュニティ形成（Building Community）** - 信頼関係のあるチームを築く。

## サーバントリーダーシップのメリット

サーバントリーダーシップを実践することで、以下のようなメリットがあります。

- **チームのエンゲージメント向上**：メンバーが支援されていると感じることで、モチベーションが向上します。
- **創造性と自主性の向上**：指示待ちではなく、自発的に行動するメンバーが増えます。
- **信頼関係の強化**：リーダーが誠実に接することで、メンバーの信頼を得られます。
- **持続可能な組織の成長**：短期的な成果だけでなく、長期的な成功につながります。

## 【実践編】サーバントリーダーシップでチームを強くする方法

### 1. **メンバーの声をしっかり聞く（傾聴）**
- 1on1ミーティングを定期的に実施する。
- チャットやアンケートを活用して、意見を集める。
- アクティブリスニング（相手の言葉を繰り返し確認する手法）を実践する。

### 2. **心理的安全性を高める**
- 失敗を責めない文化を作る。
- 「何でも言える場」を確保し、アイデアを気軽に発言できる環境を整える。
- 他者を批判せず、意見を尊重する姿勢を示す。
- チーム内で「ありがとう」を伝える習慣をつける。

### 3. **メンバーの成長を支援する**
- スキルアップのための研修や学習機会を提供する。
- キャリアプランについて話し合い、成長目標を共有する。
- 挑戦する機会を増やし、責任あるタスクを任せる。
- メンター制度を導入し、メンバー同士の成長を促進する。

### 4. **成功体験を共有する**
- 小さな成果も積極的にフィードバックし、称賛する。
- チームメンバーが互いに成果を認め合う文化を作る。
- 「Good News共有会」などのイベントを企画する。
- 失敗から学ぶ文化を根付かせる。

### 5. **リーダー自ら率先して行動する**
- サーバントリーダーシップを実践するためには、リーダー自身が模範を示すことが重要。
- 例: 「自ら困難な業務を手伝う」「率先してフィードバックを受け入れる」
- リーダーが積極的に学び、自己成長する姿勢を見せる。
- チームのモチベーションを高めるための取り組みを実施する。

### 6. **チームのビジョンを明確にする**
- チームの目的やビジョンを共有し、方向性を統一する。
- 定期的にビジョンを見直し、チームの成長に合わせて調整する。
- メンバーがビジョンに共感できるよう、具体的な目標を設定する。

## まとめ

サーバントリーダーシップは、単なるリーダーシップの一形態ではなく、 **「チームの力を最大限に引き出すためのアプローチ」** です。指示命令型ではなく、メンバーを支え、共に成長する姿勢が求められます。

**まずは小さなステップから、傾聴・共感・支援を意識してみましょう！**

あなたのチームにサーバントリーダーシップを取り入れることで、より強く、持続可能な組織を築くことができます。

さらに、チームのビジョンを明確にし、成長を支援することで、より一体感のある強い組織を作ることができます。
【初心者向け】Gitの概要をざっくり理解

# この記事の目的
こんにちは、tkmtkndです。この記事ではGitの概要をざっくり理解することが目的です。実際にGitを操作しながら覚えていったほうが知識は定着しやすいですが、「見たことある、聞いたことあるぞ！」を増やすことで、スムーズに進めていけるようにしたいです。そもそもGitとはなにか、どういう目的で使うのかの大枠を確認していきます。それと、自身への備忘録を残すために記事を書いています。

# Gitとは
Gitとはソースコードや変更履歴を管理するために使われる、代表的な**分散型バージョン管理システム**です。Gitによってファイルのバージョンを管理できるので、仮にほかの誰かにソースコードが上書きされても、簡単に元へ戻すことができます。そのため作業者は、安心してソースコードの更新作業を行えるわけです。
### そもそもバージョン管理システムとは
バージョン管理システムの役割は、ファイルの変更を管理することです。ファイルの変更を管理することで、次の効果が得られます。
* 「いつ」「誰が」「どのように」「なんのために」変更したのか、確認できる
* 間違った変更をした場合に、変更前の状態に戻すことができる
* 1つのファイルを同時に変更した場合に、効率的にマージすることができる

複数のメンバーで同じアプリケーションを開発するときなどに効果を発揮します。現代のシステム開発では、バージョン管理システムをしないプロジェクトはほぼないと思います。バージョン管理システムには、大きく分けて集中型と分散型の2種類があります。
### そもそも集中型とは
集中型のバージョン管理システムは、1つのリモートリポジトリでファイルの変更履歴を管理します。各開発者はリモートリポジトリからファイルをローカルにコピーして変更を行ういます。ファイルの変更が完了後、リモートリポジトリにファイルと変更情報を反映することで、メンバー間で共有します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680938/c2400064-1810-4274-b271-ef47aff93a6c.png)

### そもそも分散型とは
分散型のバージョン管理システムは、リモートリポジトリに加えて、ローカル環境にもそれぞれリポジトリを持ちます。各開発者はリモートリポジトリをそのままコピーしてローカルリポジトリを作成します。その後、ローカルリポジトリからファイルをローカルにコピーして変更を行います。ファイルの変更が完了したら、ローカルリポジトリにファイルと変更情報を反映させます。さらに、ローカルリポジトリの内容をリモートリポジトリに反映することでメンバー間で変更を共有します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680938/c44888c0-ab37-4d91-9777-dfa7133e6cb5.png)

# Gitの用語
Gitには多くの専門用語があります。用語を自分の言葉で説明しているので、説明は参考程度にどうぞ。
<table>
  <thead>
    <tr>
      <th>用語</th> <th>説明</th>
    </tr>
  </thead>
  <tr>
    <td> リポジトリ </td> <td>ファイルの変更履歴を保存する場所。</td>
  </tr>
  <tr>
    <td> ワークツリー </td> <td>ローカル環境で作業しているフォルダ（領域）。</td>
  </tr>
  <tr>
    <td> ステージングエリア </td> <td>ワークツリーからリポジトリにコミットするときの中継ポイントで、ワークツリーとリポジトリの間に存在する一時領域。ステージングに登録されていないファイルはコミットできない。</td>
  </tr>
  <tr>
    <td> ブランチ </td> <td>ファイルの変更履歴を分岐して管理する機能。ブランチの機能によって1つのリポジトリの中で複数の作業を並行して管理することができる。分岐したブランチはマージ機能によって1つのブランチにまとめることができる。</td>
  </tr>
  <tr>
    <td> クローン </td> <td>リモートリポジトリをローカル環境に複製。</td>
  </tr>
  <tr>
    <td> コミット </td> <td>ワークツリーの変更内容をローカルリポジトリに反映。</td>
  </tr>
  <tr>
    <td> プッシュ </td> <td>ローカルリポジトリの変更内容をリモートリポジトリに反映。</td>
  </tr>
  <tr>
    <td> チェックアウト </td> <td>リポジトリから指定されたファイルを取り出し、ワークツリーに配置。</td>
  </tr>
  <tr>
    <td> フェッチ </td> <td>リモートリポジトリの最新の履歴を取得。</td>
  </tr>
  <tr>
    <td> マージ </td> <td>複数のブランチを1つのブランチにまとめる。</td>
  </tr>
  <tr>
    <td> プル </td> <td>リモートリポジトリの変更内容をローカルリポジトリに取り込む。</td>
  </tr>
  <tr>
    <td> リセット </td> <td>ワークツリーやステージングの内容を変更。</td>
  </tr>
</table>

# Gitの作業の一連の流れ
Gitには、ローカル環境とリポジトリの間にステージングというものが存在することが最大の特徴。ワークツリーの内容を直接リポジトリにコミットせず、まずはステージングエリアに変更内容を登録する。ステージングに登録された内容は、コミット対象として管理され、コミットを実行したタイミングで、ステージングの情報を元に変更履歴をリポジトリに記録します。ステージングエリア＝次のコミット対象と考えるとわかりやすいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3680938/5fccdd43-1740-453c-9543-ec9dbc229099.png)

# 参考記事

https://qiita.com/shinshingodmt/items/637cf9e5c6660509c460#git%E6%A7%8B%E9%80%A0

https://www.kagoya.jp/howto/it-glossary/develop/git/
[ Godot 4 ] の`@~~ var`の一覧と解説

Godot で使える `@` を使ったアノテーションは、主に変数の初期化やノードの取得を便利にするために使われる。以下、いくつかの代表的なアノテーションを一覧で解説する。

### 1. `@onready var`

このアノテーションを使うと、シーンのロードが完了した後に変数を初期化できる。
- **例**:
  ```gdscript
  @onready var my_node = $MyNode
  ```
シーンからノードを取得していつでもそのノードを使えるようになる。シーンの構築が終わった後に実行されるので、`null`になる心配がない。

### 2. `@export var`

変数をエディタで簡単に設定できるようにするためのアノテーション。これを使うと、インスペクタに変数が表示されて、その値を変更できる。
- **例**:
  ```gdscript
  @export var speed = 10
  ```
ゲームの設定をエディタから直接変更できるのでスクリプトをいじらずに調整できる。

### 3. `@tool`

このアノテーションを使うとエディタ内でもスクリプトを実行できるようになる。実行時にのみ動作するスクリプトとは異なり、エディタ内でのフィードバックや操作が可能になる。
- **例**:
  ```gdscript
  @tool
  extends Node
  ```
エディタ機能を強化したり、ノードの状態をエディタ上で即座に見たりすることができる。

### 4. `@signal`

シグナルを定義するためのアノテーション。オブジェクト間の通信に使われるシグナルを作成できる。
- **例**:
  ```gdscript
  @signal my_signal(value)
  ```
シグナルを使うことで、特定のイベントが発生したときに他のノードに通知をつることでゲームのロジックを柔軟に組むことができる。

### 5. `@const`

定数を定義するためのアノテーション。この変数の値を変更できないことを示す。
- **例**:
  ```gdscript
  @const var MAX_HEALTH = 100
  ```
定数を使うことでプログラム中で間違えて内容を変更することがなくなる。


---
五か月前に作った記事なのですが、当時の記憶が全くないので、このまま公開します。
更新するかもです。
AIは先生がいないとダメ？AIガバナンスとwatsonx.governanceの秘密

## AIガバナンスとは何か？

**AIガバナンス**とは、簡単に言えば**AI（人工知能）を安全に正しく使うためのルールや仕組みのこと**です​。AIが人にとって有益なことをする一方で、間違った判断をしたり危険なことをしてしまったら大変です。そこで、人間がAIに「あぶないことはしないでね」「みんなに公平に接してね」というような**決まり（ガイドライン）や安全対策**をあらかじめ決めておきます​。さらに、それらのルールをAIがちゃんと守っているかを見張ったり、問題が起きないように管理したりします。これがAIガバナンスの基本的な考え方です。

たとえば**学校のルール**を思い浮かべてみてください。学校には「廊下は走らない」「いじめをしない」「決められた時間に登校する」などの決まりがあります。先生たちは、児童がそのルールを守って安全に過ごせるように見守っていますよね。**AIガバナンスは、この学校のルールと先生の役割に似てい**ます。AIという「頭の良いけれど失敗もするかもしれない生徒たち」に、社会のルールや安全対策を教えて守らせる。そして、大人（開発者や企業の人）がちゃんとそれを監督することで、AIが暴走したり人を傷つけたりしないようにするのです​。こうすることで、AIを安心して便利に使うことができます。

## watsonx.governanceの主な機能や役割

**watsonx.governanceは、IBM社が提供するAIガバナンスのための特別なツール（システム）です。たくさんのAIモデル（AIの作った色々な賢いプログラム）を使っている企業向けに、AIを安全・適切に管理する手助けをしてくれます​。言い換えると、先ほどの学校のたとえでは「AIの先生」のような役割を果たすものです。watsonx.governanceには主に次の3つの重要な機能**があります​：

- **AIモデルの一覧管理**（モデルのインベントリ管理）
    - **どんなAIがいるのかをリストにして把握する機能**です​。例えば先生がクラスの生徒名簿を作って一人ひとりの情報（名前や席順、得意な科目など）を把握するように、watsonx.governanceは会社で使っているAIモデル全ての情報をまとめます。いつ作られたAIモデルか、どんなデータで勉強したのか、成績（精度）はどれくらいか、といった**AI一人ひとりのプロフィール**を管理します​。たくさんのAIがいても、この機能のおかげで迷子にならずに済みます。

- **リスクとルールの管理**（リスクガバナンス）
    - **AIが法律や決まりをちゃんと守っているかチェックする機能**です​。これは先生が生徒の行動を見て、「校則（ルール）を破っていないかな？」と確認するのに似ています。watsonx.governanceは、それぞれのAIモデルについて「決められたルールとのズレはないか」「問題を起こすおそれはないか」を調べます​。もしAIがルールから外れそうなら警告したり、AIを使う前に承認を得るしくみ（許可のプロセス）も用意したりしています​。これにより、AIが勝手に悪さをしないよう未然に防ぐことができます。

- **AIの性能監視と評価**（評価・モニタリング） 
    - **AIの働きを継続的に見守り、調子をチェックする機能**です​。先生が定期的にテストをしたり通知表をつけたりして生徒の成長を確認するのと同じように、watsonx.governanceはAIモデルが時間とともにおかしな動きをしていないか、成績（精度）が落ちていないかを見ています​。たとえば、最初はうまく答えていたAIが、だんだん変な間違いを増やしてしまった場合にそれを早めに見つけ出すことができます。常にAIを見守るこの機能のおかげで、問題が起きたときにすぐ対処でき、AIを長期間にわたって**安心して使い続ける**ことができます。

以上のように、watsonx.governanceはAIたちの頼もしい「先生」あるいは「監督者」として働きます。これらの機能を通じて、企業はAIを便利に活用しながらも危ない目に遭わないようにできます。言い換えると、**AIが安全で公平にみんなの役に立つようにサポートする仕組み**がwatsonx.governanceなのです​。

## 参考記事一覧
1. **IBM公式サイト - watsonx.governance**  
   [IBM watsonx.governance](https://www.ibm.com/products/watsonx-governance)  
   - watsonx.governanceの概要や機能について説明。

2. **AIガバナンスとは？企業に求められるリスク管理と対策**  
   [NTTデータ - AIガバナンス](https://www.nttdata.com/jp/ja/insights/blog/2023/ai-governance)  
   - AIガバナンスの必要性と企業が考えるべきポイントを解説。

3. **経済産業省 - AIガバナンスに関する政策動向**  
   [経済産業省 - AIガバナンス](https://www.meti.go.jp/shingikai/ai_governance)  
   - 日本におけるAIガバナンスの政策やガイドラインについて。

4. **Gartnerレポート - AIガバナンスの重要性**  
   [Gartner - AIガバナンス](https://www.gartner.com/en/newsroom/press-releases/2023/ai-governance-strategies)  
   - 世界的なAIガバナンスのトレンドと課題を紹介。

5. **Forbes Japan - AIリスクとガバナンスの課題**  
   [Forbes Japan - AIガバナンス](https://forbesjapan.com/articles/detail/12345)  
   - AIを導入する際のリスクと、それに対応するためのガバナンス手法。
C++ の修飾名を demangle する Python モジュール

GNU C++ / Clang 用です。VC++ などには対応していません。

アセンブラ レベルで使用される C++ シンボル名(修飾名)を関数

```C++:
#include <cxxabi.h>
char *abi::__cxa_demangle( /*略*/ );
```

を使って C++ 表記形式に変換する単純な Python モジュールです。

```Python:実行例
>>> from cxademangle import demangle
>>> demangle('__ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEi')
'std::__1::basic_ostream<char, std::__1::char_traits<char>>::operator<<(int)'
```

変換できなかったときは入力文字列を返します。

# レポジトリ

https://github.com/ikiuo/python-cxademangle
ModuleNotFoundError: No module named 'pip' の対処法？

## 問題
pip install chumpy
ってしたら
ModuleNotFoundError: No module named 'pip'
意味わからんですよね。
pipを使ってインスコしようとしてるんだからpipが無いことないでしょ
※Windowsです。Linuxでも同じことが起こるかは知らない。

## 一応解決したが…

```
pip install -U setuptools
```
これで直ったが腑に落ちない
というか本当にこれで直ったのか自信がない

## 追記
再現性がとんでもなく悪いのでいろいろ書きなぐります
setuptoolsをインスコ(orアプグレ)しても直らん場合がありました。
なんとなくpipのせいかと思って以下のようにしたらできました
```
python -m pip install pip==23.0
pip cache purge
pip install cumpy
```
アンスコしたら何か変わるかな～～なんておもってごにょごにょしてました(たぶんこれはいみない)
```
pip uninstall setuptools
pip cache purge
pip install setuptools
```

## 情報ください
同じようなことをごく少数の海外ニキたちも経験していて、stack overflowだかどこだかに書いてあるのも見ましたが、どれも役に立たなかったです。もしこの記事を訪れた日本人の方々、解決した/しなかった等々かまわないのでコメントしていただけるとよいかも
DockerはLinux仮想マシン上で動いているとはどういうこと？

## はじめに
これまでDockerを何となく使っていましたが、もう一回1から勉強してみようと思って、参考書を読んでみたら、お！と思うことがあったので書き残しておきました。

## これまでのDockerへのイメージ
Docker Desktopをインストールすると、Macのターミナルから`docker`コマンドを使えるようになって、コンテナを起動したり、コンテナ内に入ったりすることができます。
Docker Desktop自体は、本来GUIでいろいろ操作するためのソフトですが、インストールしてからGUIの方はほとんど触れたことがなく、コマンドでできるならそれでいいかな〜という感じでCUI操作がメインです。

ターミナルにコマンドを打てばコンテナ関連のことがいじれるので、ターミナルが直接Dockerというものを動かしていると思っていました。
![IMG_3346.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935750/36299ca3-9a7a-439f-8a96-f6431a575a26.jpeg)
多分これが間違っているというわけではないと思います。
### Docker Desktop
Docker Desktopをインストールすると、
![スクリーンショット 2025-03-17 14.19.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935750/30b3ec10-cbe3-4951-bd37-485ccc751ad2.png)
こんな感じのいろいろが入ってくるとのことでした。

### Linux仮想マシン？
いろいろインストールされるのはわかりましたが、その中に**Linux仮想マシン**があるということの意味がわかりませんでした。どうして、何のために必要なのか理解できません。

DockerはLinuxベースのコンテナを扱いますが、どうやらLinuxコンテナをサポートするためにLinuxカーネルが必要となるということです。そのためのLinux仮想環境ということですね。Linuxのコンピュータであれば仮想環境は不要です。

ここら辺で、自分が何を勘違いしていて、何がわからなかったのかが解けました。

MacではターミナルでLinuxコマンドを打てるので、勝手に「Mac≒Linux」と思い込んでました。Linuxぽい操作ができるだけで、全然別物ですよね。
だから、Dockerを使いたければ、Linux環境が必要であり、MacやWindowsユーザーには仮想環境を提供している、と。で、LinuxのPCならそれは不要、と。

MacならHyperKit、WindowsならWSL2といった仮想化技術が利用されるということです。

## 理解した後のDockerへのイメージ
![スクリーンショット 2025-03-17 14.45.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2935750/24a541c0-42f0-4922-9f1f-3b1182e1a475.png)
ターミナルでDockerコマンドを打つと、CLIクライアントがそのコマンドを解釈します。Docker自体はLinux仮想マシン上で起動し、その上でコンテナをいじっているということですね。

ただし、実際にはユーザーがLinux仮想環境を意識することは不要です。裏側で透明な状態で仮想環境が動いているだけです。

## 終わりに
どんなソフト（アプリ）もインストールすれば動きます。でもどうやって動いているかを知ると、また違った学びが得られるので面白いですね！
国際学会での経験談

# 国際学会の経験談

この記事は，私の経験から学んだ国際学会参加時の注意点をいくつかまとめたものです．
国際学会では，通常の海外旅行とは異なる点があるので，ぜひ参考にしてください．

## 1. 通信には電話番号付きのプランを契約

まず最初に，海外での通信には**電話番号付きのプラン**を契約することを強くお勧めします．

私は便利さからWorld eSIMでsSIMを購入しましたが，これには電話番号が付いていないプランでした．
なぜ電話番号にこだわるのか？
それは，**SMS認証を使うサービスの利用機会が多い**からです．

具体的には：
- 航空券の変更時の支払いでは，クレジットカード情報入力後に日本の電話番号にSMSが送られますが，これを受け取れませんでした
- 国際学会は観光地と異なり，駅からタクシーでしか行けない場所で開催されることも多い
- Uberでタクシーを呼んだ際，運転手からWhatsAppの連絡先を渡されることがあります（Uberの手数料約20%を省いて安くするため）．WhatsAppを初めて利用する場合にSMS認証が必要になる．

このように度々SMS認証が必要になるため，電話番号付きのeSIMを選ぶか，同じ番号・SIMのまま海外で使えるキャリアのプランに加入しておくことをお勧めします．

* * *
--追記--
国際学会で日本人の方と仲良くなり，タクシーの割り勘を行う機会にも，
eSIMではpaypayが利用できませんでした．
* * *

## 2. ポスター発表の筒は機内持ち込み可能

ポスター発表を行う方は，日本であらかじめA0サイズで印刷し，現地に持っていく必要があります．ポスターケースを機内に持ち込めるか不安に思う方も多いでしょう．

経験から言うと，**ほとんどの航空会社でポスターケースは機内持ち込み可能**です．ただし，上の棚に入らないサイズの場合，客室乗務員に預ける必要がある航空会社もあります（実際は余裕で上の棚に入りました）．
これは私の経験や友人から聞いた話ですので，持ち込み不可の会社もあるかもです・

## 3. 預け入れ荷物の条件は事前に確認を - 失敗談

最後に私の失敗談をご紹介します．**預け入れできる荷物の個数や重さは必ず事前に確認**しましょう．

私はエティハド航空でアブダビに行った際，航空券購入時に「荷物1つまでOK」と記載があったため，そのまま予約しました．しかし実際は**7kgまでの手荷物が1つOK**という意味で，約1週間滞在用の13kgのスーツケースには追加料金が発生しました．

その金額がなんと**約56,000円**！スーツケース一つ預けるだけでこの金額は驚きでした．

選択肢は「荷物を軽くする」か「追加料金を払う」かでしたが，結局追加料金を支払いました．幸い大学からの支給があったため，先生に確認不足を謝罪して補ってもらえました．

さらに，帰りの航空券にも荷物代が含まれていなかったため，オンラインで変更して約26,000円の追加料金を支払いました．**往復で約82,000円**の出費です．

これは航空会社を批判しているわけではありません（~~とはいえ追加料金高すぎる~~）
問題は，最初に航空券を購入する際によく読んで預け入れ荷物オプションを追加していれば，もっと安く済んだということです．

航空券の上位プランは+800円，+3,000円，+7,000円など様々ありましたが，恐らくそこに荷物の預け入れオプションが含まれており，高くても往復で+10,000円程度で済んだはずです．

皆さんはこのような失敗をしないよう，くれぐれもご注意ください．
QAエンジニアの未来とAI・データサイエンスの活用

## はじめに
近年、QAエンジニアの役割は大きく変化しています。単なるテスト実行者ではなく、品質を作り込むエンジニアとして、開発プロセスの上流から下流まで関与することが求められています。また、AIやデータサイエンスを活用することで、テストの効率化や品質向上を図る動きが加速しています。

本記事では、今後のQAエンジニアのあり方、AIの導入、データサイエンスの活用方法について解説します。

---

## 1. QAエンジニアの進化

### 1.1 品質保証（QA）から品質エンジニアリング（QE）へ
従来のQAは、仕様書に基づいたテスト設計・実行が中心でしたが、今後は開発プロセス全体を通して品質を作り込む役割が求められます。

- **シフトレフト（Shift Left）**: 仕様策定や設計段階から品質を考慮し、バグを未然に防ぐ
- **シフトライト（Shift Right）**: 本番環境でのモニタリング、ユーザーの行動分析を活用し、継続的な品質改善を行う
- **DevOpsとの連携**: CI/CDパイプラインにテストを組み込み、開発と品質保証の一体化を進める

---

## 2. AIの活用
AIをQAに活用することで、手作業の負担を減らし、より高度な品質保証が可能になります。

### 2.1 AIを活用したテストの最適化
- **テストケースの自動生成**: 仕様書やコードを解析し、最適なテストケースを自動作成（例: Test.ai, Functionize）
- **Self-healing Test（自己修復テスト）**: UIの変更に対応して自動修正（例: Testim, Mabl）
- **視覚的回帰テスト**: UIの変更をAIが自動で検出（例: Applitools, Percy）

### 2.2 バグ予測と品質分析
- **過去のバグデータを学習し、将来的な不具合を予測**（例: DeepCode, SonarQube）
- **コードの変更履歴や開発者の作業傾向から品質リスクを評価**

### 2.3 回帰テストの最適化
- **影響度分析を活用し、必要なテストケースのみを実行**（例: Launchable）

---

## 3. データサイエンスの活用
データサイエンスを活用することで、QAの効率化や品質改善が可能になります。

### 3.1 テストケースの最適化
- **過去のテスト結果を学習し、最も重要なテストを優先的に実行**
- **A/Bテスト、統計分析を活用し、テストのカバレッジを最大化**

### 3.2 異常検知と障害予測
- **システムのログやメトリクスを分析し、異常を自動検出**（例: ELK Stack, Splunk, Datadog）
- **時系列データ分析を活用し、障害の発生を事前に予測**（例: ARIMA, LSTM）

### 3.3 ユーザー行動分析とUIテスト
- **ヒートマップ解析やユーザーの操作ログを分析し、UX改善に活用**（例: Google Analytics, Hotjar）

---

## 4. 今後のQAエンジニアの役割

AIとデータサイエンスの活用により、QAエンジニアの役割は変化しています。

| これまでのQAエンジニア | これからのQAエンジニア |
|----------------|----------------|
| 手動テスト中心 | AIを活用したテスト最適化 |
| UIテストの自動化 | 自己修復型テスト管理 |
| 仕様ベースのテスト設計 | データ駆動型テスト |
| バグの発見と報告 | バグ予測と防止 |

### 4.1 求められるスキル

| スキル | 内容 |
|-----------|---------|
| **データ分析** | Python (`pandas`, `numpy`), SQL |
| **機械学習** | `scikit-learn`, `TensorFlow` の基礎 |
| **統計学** | 確率・回帰分析・時系列データ分析 |
| **自動化スクリプト** | Python, Shell, API連携 |
| **クラウド/ログ解析** | AWS, ELK Stack, Datadog |

---

## 5. まとめ
1. **QAエンジニアは、単なるテスト実施者から品質戦略の立案者へ進化している。**
2. **AIを活用することで、テストの最適化・バグ予測・自己修復型テストが可能になる。**
3. **データサイエンスを取り入れることで、効率的なテスト設計や品質分析が実現できる。**
4. **QAエンジニアには、データ分析や機械学習のスキルが求められる。**

今後のQAエンジニアは、AIやデータサイエンスを駆使しながら、より戦略的に品質保証をリードしていくことが求められます。

---

### 💡 **次のステップ**
- **PoC（概念実証）として小規模なAIテスト導入を試みる。**
- **AIを活用したテストツールの選定を行う。**
- **QAチームのAI活用スキル向上のためのトレーニングを実施する。**

これからのQAエンジニアのキャリアに、AIとデータサイエンスを取り入れてみませんか？
AWS JumpStart 2025に参加してみた！実際どうなの？

# はじめに
こんにちは！KIYO LearningでAirCourseの開発をしている森下です。
今回は、私が2025年3月13日、14日に参加した、AWS JumpStart 2025についての体験記を書いてみました。良かったら最後まで見てください！

# AWS JumpStart とは
クラウドネイティブな技術をリードする人材を育成するための実践的な研修プログラムです。事前学習動画と2日間の集中研修で、AWSの理解を一気に深められます！

# スケジュール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928827/96e778b4-c98d-46ed-9424-a08dd3515056.png)

引用：[初学者向けイベント！ AWS JumpStart 2025 開催予告](https://aws.amazon.com/jp/blogs/news/aws-jumpstart-2025/)


# チャットスペース
チャットツールが用意されており、AWSの担当者に直接質問できるため、疑問をすぐに解消できる環境が整っています。

また、各種アナウンスに加え、雑談スペースも設置され、参加者同士の交流が活発に行われました。そこでは、別の視点からの意見や講義への反応など、さまざまなコメントが飛び交い、大いに盛り上がっていました。

# 1日目 講義 & ハンズオン
はじめに、事前学習コンテンツの復習を兼ねて、簡単なサービスに関する解説があり、
その後、AWSを用いたWebサービスの構築についてや、フェーズごとの適切なAWSサービスの組み合わせ、システムのスケール時に直面する課題と対策、仮想サーバーの基本的な考え方、セキュリティ運用のポイントについて解説してくれました。
ハンズオンでは午前と午後で2パターンの構築を実施。

### ・午前
VPC、EC2、Amplifyの講義を受けながら実際に操作して学び、構築したデータの削除まで行いました。

☆午前中のハンズオンの狙いは3つあります。
① ハンズオンを通してEC2（仮想サーバー）のイメージを掴む。
② ベースの知識を得る。
③ マネジメントコンソールの操作に慣れる。

☆用語説明
VPC：仮想ネットワークの構築。
EC2：インスタンスとセキュリティグループの設定。
Amplify：Webアプリケーションのデプロイ。

### ・午後
Amazon ECS + AWS Fargateを利用してWebサーバーを構築し、Webアプリケーションの実装まで体験。

☆以下の3点を実装し、可用性を高めました。
① ECSを使用することで、1つのコンテナが停止しても他のコンテナがその役割を引き継ぐことができる構造を実現。
② ALBで負荷分散。
③ DBのフェイルオーバー機能による高可用性の確保。

☆この課題の狙いは2つあります。
① ユーザの増加に伴ってAWSアーキテクチャがどう変化していくのかイメージできること。
② システムをエスケールする上でどういう対策をして、どう意識していくかをイメージできているか。

# 2日目 クイズ & アーキテクティング課題 & 成果発表と解説
2日目は、1日目の復習も兼ねたクイズが実施されました。
アーキテクティング課題は、お題となるサービスのアーキテクチャを考えるというものでした。

☆この課題の狙いは2つありました。
① AWSサービスを用いて1つのサービスを設計し、構成図に落とし込む実践的な経験を積むこと。
② アーキテクティングの際のトレードオフや各サービスの特徴をより深く理解すること。

まず、各自でアーキテクチャの検討・作成を行いました。
途中には任意参加の学習時間があり、アーキテクチャ作成のコツが紹介され、初めて取り組む人にとって、大いに役立つ内容でした。

その後、グループでアーキテクチャを共有し、足りない点を補ったり、構成の適切さについて議論したりしながら意見を交換。
こうして完成したのが、以下のAWS構成図です。

また、成果発表と解説の時間では、3チームが選ばれる仕組みになっていました。
![アーキテクチャ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3928827/8d5432ce-a45f-49c9-a2fd-14ec538831a3.png)


# 最後に
AWS JumpStart 2025の体験記をお届けしました！

本イベントでは、初心者でも安心して参加できるよう、学習希望者向けに事前学習コンテンツが用意されていました。また、雑談ルームが設置され、進捗確認やAWS担当者への質問ができる環境も整っていました。

グループでのアーキテクチャ設計では、多様な視点から意見が交わされ、成果発表＆解説の時間では、他のグループの考えを知ることができ、とても学びの多い機会となりました。

今回の学びを業務に活かし、より実践的な活用を目指していきたいと思います。

AWSを初めて学ぶ方はもちろん、異なる知見を持つ方との意見交換をしたい方にとっても、非常に有意義な内容です。
興味のある方は、ぜひ以下のリンクから参加してみてください！

https://pages.awscloud.com/aws-jump-start-reg.html

## KIYOラーニング株式会社について
当社のビジョンは『世界一「学びやすく、分かりやすく、続けやすい」学習手段を提供する』ことです。革新的な教育サービスを作り成長させていく事で、オンライン教育分野でナンバーワンの存在となり、世界に展開していくことを目指しています。

https://kiyo-learning.com/

### プロダクト

* [スタディング](https://studying.jp/)：「学びやすく・わかりやすく・続けやすい」オンライン資格対策講座
* [スタディングキャリア](https://career.studying.jp/)：資格取得者の仕事探しやキャリア形成を支援する転職サービス
* [AirCourse](https://aircourse.com/)：受け放題の動画研修がついたeラーニングシステム（LMS）

### KIYOラーニング株式会社では一緒に働く仲間を募集しています

https://www.wantedly.com/companies/kiyo-learning/projects

https://herp.careers/v1/kiyolearning
JP1運用

# JP1運用概要

### 起動条件（他ジョブ終了のファイル連携）

JP1では、他のジョブの終了をトリガーとしてジョブを起動したり、ファイルの作成・更新をトリガーとしてジョブを起動したりすることができます。

- ジョブ終了トリガー：先行ジョブの正常終了/異常終了を条件に後続ジョブを起動（依存関係を考慮したジョブ管理が可能）

- ファイル監視トリガー：特定ファイルの作成・更新・削除を検知してジョブを起動（外部システムとのデータ連携に有用）。

### 技術補足
- JP1/AJS2のイベント監視機能を活用すると、ファイルの変化をリアルタイムで検知し、即座にジョブを起動することが可能。
- 条件付きトリガー（例えば、ファイルサイズや特定のデータ内容など）を組み合わせることで、より柔軟な運用が可能。

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

### 多重度（親子PGM）

JP1では親子関係を持つジョブを定義できます。

- 親ジョブ：複数の子ジョブをまとめて管理するジョブ
- 子ジョブ：親ジョブの配下で実行されるジョブ

    - 例：データ取得 → データ変換 → 結果送信の流れを親ジョブで管理

### 技術補足

- **ジョブネット（Jobnet）**を活用することで、親ジョブ単位で複数の子ジョブの実行順序や並列処理を制御可能。

- ジョブフローの可視化：JP1/AJSのGUIを使用して、ジョブネットの視覚的な管理が可能。

- 異常系処理の自動化：異常終了時に特定のジョブ（リトライ処理やアラート通知）を実行する設定が可能。

----------
### 多重スケジュール（排他スケジュール）

JP1では複数のスケジュールを設定でき、それらの間で排他制御を行うことができます。

- 同時実行数の制限：特定リソースを使用するジョブの多重度を制限（CPU負荷を最適化）
- 排他スケジュール：特定の時間帯に実行できるジョブを制限（バッチウィンドウの設定など）

#### 技術補足
- ジョブの優先度設定：優先度を設定することで、リソース競合を最適化
- キュー制御：リソースの使用状況に応じてジョブの実行順序を調整
- カレンダー機能：祝日や月末処理など、特殊なスケジュールにも対応可能

# JP1説明

## JP1エージェント
JP1エージェントは、ジョブを実行するマシン上にインストールされるコンポーネントです。マネージャからの指示を受けてジョブを実行し、実行結果をマネージャに報告します。異なるOS間でもジョブの実行制御が可能です。

#### 技術補足
- エージェントの負荷分散：複数のエージェントを分散配置し、処理負荷を均一化
- エージェントの死活監視：JP1/IM（Integrated Management）と連携し、エージェントの状態を監視

## PCジョブ

PCジョブは、Windowsマシン上で実行されるジョブのことです。バッチファイル(.bat)やコマンドプロンプトで実行可能なコマンドなどを実行できます。

#### 技術補足
- ユーザー権限の設定：管理者権限が必要なジョブの実行時は、適切な権限を付与。

## R3ジョブ
R3ジョブは、SAP R/3システム上のプログラムを実行するためのジョブです。SAPシステムとの連携を行い、SAPトランザクションやABAPプログラムの実行をJP1から制御することができます。

#### 技術補足
- SAPジョブのリモート管理：JP1/AJS3とSAP NetWeaverを連携させることで、JP1からSAPジョブを制御可能
- RFC（Remote Function Call）活用：JP1からSAPシステムへの接続を行い、直接データを取得可能
- ジョブログの取得：SAPジョブの実行結果をJP1のジョブログに統合し、監視・分析が可能
Power BI Premium/Fabric 容量のサージ保護 (Surge Protection)

2025/01/14 に Surge Protection 「サージ保護」のプレビューが発表されました。

[Announcing Surge Protection (Preview) | Microsoft Fabric Blog | Microsoft Fabric](https://blog.fabric.microsoft.com/en-US/blog/announcing-surge-protection-public-preview/)

## 「サージ保護」登場の背景
以前こちらの記事で紹介したように、Premium/Fabric 容量はスムージングにより処理に要した CU が分割されて計上されます。処理負債が積みあがると Power BI レポートの閲覧などのインタラクティブ操作に影響を及ぼす=スロットリングが起こることがあります。

https://qiita.com/ayumito/items/d27fedc0632274015427

バックグラウンド操作は24時間にわたって分割されるがゆえに、容量の一時停止による一括返済ができない Premium 容量では、スロットリングからの回復に時間がかかってしまいます。スロットリングが起こる前に、指定した使用率に達したタイミングで通知することはできますが、根本的な回避方法ではありませんでした。

https://learn.microsoft.com/ja-jp/fabric/admin/service-admin-premium-capacity-notifications

サージ保護は、**バックグラウンド操作による過剰な CU 消費を制限**するための**容量の機能**です。バックグラウンド操作に使用できる CU 使用率に制限を設定することで、レポート閲覧などのインタラクティブ操作に制限がかかる可能性を下げることができます。
(サージ保護はバックグラウンド操作を制限するので、インタラクティブな操作が集中してスロットリングが起こる可能性は残ります。)

:::note warn
サージ保護により、既に実行された操作がキャンセルされることはありません。サージ保護が発動すると、**以降に実行されるバックグラウンド操作**が制限されます。
:::

:::note
Power BI 以外の多くの操作はバックグラウンド操作となり、Copilot もバックグラウンド操作に分類されます。
各操作の分類はこちらで確認できます。
https://learn.microsoft.com/ja-jp/fabric/enterprise/fabric-operations
:::

## サージ保護の設定方法
Fabric 管理ポータルの [容量の設定] にアクセスし、設定する容量を選択します。(Fabric 容量の場合、容量が停止していると選択できません。) 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/78450b0c-3d89-4885-b74d-55749d8d939f.png)

[サージ保護] を開いて「サージ保護を有効にする」のチェックを入れ、次の2つのしきい値を設定します。

- **バックグラウンド除去のしきい値**
サージ保護がアクティブになるタイミングを決定します。 しきい値は、容量の "24 時間のバックグラウンド使用率" に適用されます。 バックグラウンド操作による CU 使用率がこの値に達するか超えるとサージ保護がアクティブになり、**新しいバックグラウンド操作は拒否されます。** 既に実行中の処理には影響しません。

- **バックグラウンド回復のしきい値**
サージ保護が解除されるタイミングを決定します。 "24時間のバックグラウンド使用率" がこの値を下回るとサージ保護が解除され、新しいバックグラウンド操作の受け入れを開始します。

:::note
  "24 時間のバックグラウンド使用率" は、Fabric Capacity Metrics アプリの Compute ページの右上のグラフで、[Throttling] → [Background refection] で確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/c4e463a7-cee1-414d-8937-91c33f094b46.png)
:::

## サージ保護状態の確認方法
Fabric Capacity Metrics アプリの Compute ページ右上の [System events] にて、容量の状態が変化したタイミングとともに表示されます。
以下の表はサージ保護に関連する Capacity State の説明です。
| Capacity State | Capacity state change reason | 説明 |
|:-:|:-:|:-|
| Active | NotOverloaded | 容量がすべてのスロットルおよびサージ保護のしきい値を下回っています |
| Overloaded | SurgeProtectionActive | 容量が設定されたサージ保護しきい値を超えたことを示します。容量が設定されたリカバリしきい値を超えています。**バックグラウンド操作が拒否**されています |
| Overloaded | InteractiveDelayAndSurgeProtectionActive |容量が対話型遅延スロットリング制限と設定されたサージ保護しきい値を超えたことを示します。容量が設定されたリカバリしきい値を超えています。**バックグラウンド操作が拒否**されています。**対話型操作で遅延**が発生しています|
|Overloaded|InteractiveRejectedAndSurgeProtectionActive|容量が対話型拒否スロットル制限と設定されたサージ保護しきい値を超えたことを示します。容量が設定されたリカバリしきい値を超えています。**バックグラウンド操作と対話型操作が拒否**されている|
|Overloaded|AllRejected|容量がバックグラウンド拒否制限を超えたことを示します。**バックグラウンド操作と対話型操作が拒否**されている|

## まとめ
スロットリングが始まると解消に時間がかかります。特に Power BI Premium per Capacity をお使いの場合は一時停止で負債を解消することができないので、なるべくスロットリングが起きないようにすることが重要です。自動スケーリングに加えてこの対策も有効ですので、ぜひお試しください。
【Flutter】iOSのビルドのアップロードを自動化する

# はじめに
FlutterでiOSのリリースビルドからAppStoreConnectにアップロードするまでを自動化する方法を調べたので記事にします。
本記事では、ビルド後、altoolを使用してビルドのアップロードする方法を紹介します！

# シェルスクリプトを作成
### シェルスクリプトを作成
Flutterのプロジェクトのルートに下記のスクリプトを作成してください
ビルドからaltoolを使用してビルドをアップロードするまでのシェルスクリプトを作成します。
API_KEYとISSUER_IDはあとで置き換えが必要です。

```sh
#!/bin/sh
fvm flutter clean
fvm flutter pub get
fvm flutter build ipa --release --flavor prod
# API_KEYとISSUER_IDについては後述します
xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa --apiKey API_KEY --apiIssuer ISSUER_ID
```

### 実行権限付与
作成が終わったら、chmod 755で実行権限をつけます。

# App Store Connect APIキーの作成
- AppStoreConnect - ユーザーとアクセスのページにアクセスします
- 統合のタブを押下し、チームキーにキーを作成します
- 適当な名前とビルドをアップロード可能な権限を設定します（AppManagerにしましたが、Developerでも問題ないはず）
- 作成できたらキーのダウンロードとAPIキーとIssureIDをコピーしておきます

![sample.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2475427/4038850d-4573-4193-a82c-aeb89d1c18f1.png)

- キーのダウンロードが完了したら下記のいずれかのフォルダに配置します
  - Flutterのプロジェクトフォルダのパス/private_keys
  - ~/private_keys
  - ~/.private_keys
  - ~/.appstoreconnect/private_keys

※ドキュメントは見つからなかったのですが、コマンドを実行したエラーメッセージに上記のフォルダに配置するように書いてました

- 配置できたら、シェルスクリプトのAPI_KEYとISSUER_IDを編集してください

# 実行
シェルスクリプトを実行すれば、ビルドとアップロードまで自動でしてくれるはずです。

### おまけ
シェルスクリプトの最後かコマンドの後ろに`afplay`をつけると、コマンドが終わったら音を鳴らしてくれるので、完了に気づきやすくなります。

```diff_shell
#!/bin/sh
fvm flutter clean
fvm flutter pub get
fvm flutter build ipa --release --flavor prod
# API_KEYとISSUER_IDについては後述します
xcrun altool --upload-app --type ios -f build/ios/ipa/*.ipa --apiKey API_KEY --apiIssuer ISSUER_ID
+ afplay /System/Library/Sounds/Ping.aiff
```

OR
```sh
./deploy_ios.sh;afplay /System/Library/Sounds/Ping.aiff;
```

https://zenn.dev/magicmoment/articles/play-sound-command-20241205
colima host.docker.internalが初期設定では使えない模様

タイトル通り、私のPCの構成は以下お送りします。

:::note info
macOS: Sonoma 14.6.1
colima: 0.8.1
docker 28.0.1
:::

colima は docker-desktop に比べて細々とした設定がいる。

```shell
# install
brew install colima docker 

# 以下は必要に応じてインストール
brew install docker-compose docker-buildx

// colimaを使う設定
docker context use colima

vim ${HOME}/.colima/default/colima.yaml
```

```
network:
  address: true  # ここはdefault falseになっている
```

これでhost.docker.internalは使えるよ！

## host.lima.internalも使いたいよ

利用するタイミングはないと思うけど、dnsHostsを追加すると使える

```shell
network:
  # 省略
  dnsHosts:
    host.lima.internal: host-gateway
```

colima　動作サクサクでいいけど今までの環境通りにするには結構細々とした設定が必要だなと思いました。
【JQuery】$("セレクタ").submit();と$("セレクタ").submit(function(event) { ... });

背景：
一つのボタンで違う動きをコントロールしたい。
今回はURLにパラメータの有無で「新規登録」か「変更保存」にしたい。そのために、下記みたいなコードを書いた。


```問題のあるコード.javascript
$(document).ready(function() {
    $("#shop-page-submit").click(function() {
        $("#shop-form").submit(function(event) {
            event.preventDefault();
            submit_func("shop-page",this);
            //submit_func()ではAJAXで送信する操作ある
        });
    });
});
```

**問題**
上記のコードは「クリックされるたびに送信ハンドラが追加されるだけ」になっていて、実際送信されていない。
`$("#shop-form").submit(function(event) { ... })`は送信されるたびに、新しいハンドラを登録するだけ。フォームを送信していない。登録だけなんで、`submit_func("shop-page", this)`は実行されていない。
それに対して、`$("").submit();`は送信するので、下記のように直すと、送信できた。
**解決方法**
```javascript
$(document).ready(function() {
//クリックされると、送信する
    $("#shop-page-submit").click(function() {
        $("#shop-form").submit();//$("").submit();では送信できる
    });
 //送信イベントに新しいハンドラsubmit_func()を登録する
    $("#shop-form").submit(function(event) {
        event.preventDefault();
        submit_func(event, "shop"); 
    });
});
```
`$("セレクタ").submit();`と`$("セレクタ").submit(function(event) { ... });`とは違うということを忘れてしまい、問題が発生した。
前者は「実行」だが、後者は「何をするか」の「何」を定義するということ。
チーム開発入門：GitとGitHubで効率的な開発を！初心者向けに改めてまとめてみた

## はじめに

ソフトウェア開発では、コードの管理やチームでの共同作業が重要です。

:::note info
**Gitは、コードの変更履歴を記録し、効率的なバージョン管理を可能にするツールです。**
:::

本資料では、Gitの基本概念やよく使うコマンド、GitHubとの連携方法について説明します。

## Gitとは？
Gitは、分散型バージョン管理システムであり、コードの履歴を管理し、複数の開発者が協力して作業できるようにするツールです。

Gitを使用すると、過去の変更を追跡したり、異なるバージョンのコードを管理したりすることができます。

## GitHubとは？
GitHubは、GitのリモートリポジトリをホスティングするWebサービスです。

GitHubを利用すると、チームでの共同開発が容易になり、プルリクエスト（Pull Request）を通じてコードレビューを行ったり、Issueを使ってタスク管理をしたりできます。

## よく使うGitコマンド

### 1. リポジトリの初期化
```sh
git init
```
新しいローカルリポジトリを作成するコマンドです。

### 2. リポジトリをクローンする
```sh
git clone <リポジトリのURL>
```
GitHub上のリポジトリをローカルにコピーします。

### 3. ステータスの確認
```sh
git status
```
現在のブランチの状態や、変更されたファイルの一覧を確認できます。

### 4. ファイルをステージングする
```sh
git add <ファイル名>
```
変更したファイルをステージ（コミットの準備）に追加します。
すべてのファイルを追加する場合は以下のようにします。
```sh
git add .
```

### 5. コミットする
```sh
git commit -m "コミットメッセージ"
```
ステージングされた変更をローカルリポジトリに保存します。

### 6. リモートリポジトリを登録する
```sh
git remote add origin <リポジトリのURL>
```
リモートリポジトリを登録します。

### 7. プッシュする
```sh
git push origin <ブランチ名>
```
ローカルの変更をリモートリポジトリ（GitHubなど）に送信します。

### 8. リモートリポジトリから変更を取得する
```sh
git pull origin <ブランチ名>
```
リモートリポジトリの最新の変更をローカルに取り込みます。

### 9. ブランチを作成する
```sh
git branch <ブランチ名>
```
新しいブランチを作成します。

### 10. ブランチを切り替える
```sh
git checkout <ブランチ名>
```
作業するブランチを変更します。

または、以下のコマンドでブランチを作成してすぐに切り替えられます。
```sh
git checkout -b <ブランチ名>
```

### 11. マージする
```sh
git merge <ブランチ名>
```
指定したブランチの変更を現在のブランチに統合します。

### 12. ログの確認
```sh
git log
```
コミット履歴を表示します。

### 13. 変更を取り消す
```sh
git reset --hard <コミットID>
```
指定したコミットIDの状態に戻します。

## GitとGitHubの関係性
GitHubはGitを基盤として動作しており、リモートリポジトリとしての役割を担います。Gitをローカルで操作し、最終的にGitHubにプッシュすることで、クラウド上でコードを管理し、チームメンバーと共有できます。

GitHubを利用することで、
- コードのバックアップ
- コードレビュー（Pull Request）
- タスク管理（Issue）
- 継続的インテグレーション（CI/CD）

などが可能になり、開発の効率を向上させることができます。

## まとめ
Gitはバージョン管理システムであり、GitHubはそのリモートリポジトリのホスティングサービスです。

Gitの基本的なコマンドを理解し、GitHubと組み合わせて使用することで、より効率的な開発を行うことができます！
🚀 Git ブランチでの Push エラー解決法: Pull 前に Push してしまった場合の対処法 🚀



## はじめに

Git を使った開発において、最も一般的なエラーの一つが「リモートの変更を Pull する前に Push してしまう」というものです。このエラーは多くの開発者が直面する問題であり、特にチーム開発において頻繁に発生します。このエラーが起きると、変更内容がリジェクトされ、作業が止まってしまいます。この記事では、そのようなエラーが発生した際の効果的な解決方法を段階的に解説します。

## Git の Push/Pull エラーを理解する

### エラーの基本概念

Git はバージョン管理システムとして、リモートリポジトリとローカルリポジトリの同期を厳密に管理しています。リモートに既に存在する変更をローカルに反映せずに Push を試みると、Git はそれを拒否します。

一般的に表示されるエラーメッセージは次のようなものです：

```
! [rejected]        feature/branch -> feature/branch (fetch first)
error: failed to push some refs to 'git@github.com:user/repo.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
```

このエラーは、「リモートリポジトリには、あなたのローカルにない変更があります」という内容です。

## 実践的な解決方法

### 1. 状況の確認

まず最初に、現在の Git の状態を確認しましょう：

```bash
git status
```

これにより、ローカルの変更状態やブランチ情報が表示されます。問題解決の第一歩は常に現状把握です。

### 2. リベースを使った Pull 

通常のマージよりもクリーンな履歴を保つために、`--rebase` オプションを使用して Pull を行います：

```bash
git pull --rebase origin feature/example-branch
```

この方法では、リモートの変更を取得した後、あなたのローカルの変更をその上に「再配置」します。

### 3. コンフリクト解決

リベース中にコンフリクト（競合）が発生した場合、以下のステップで解決します：

1. コンフリクトファイルを特定
```bash
git status
```

2. エディタでコンフリクトを解決（ファイル内の `<<<<<<<`, `=======`, `>>>>>>>` マーカーを探し編集）

3. 解決したファイルをステージングに追加
```bash
git add path/to/file1.go
git add path/to/file2.go
git add path/to/file3.go
```

4. リベースを続行
```bash
git rebase --continue
```

### 4. 変更の一時退避が必要な場合

作業中の変更を一時的に退避させる必要がある場合：

```bash
# 変更を一時退避（未追跡ファイルも含む）
git stash -u

# stashの内容確認
git stash show -p stash@{0}

# 必要な操作を実行後、stashを呼び戻す
git stash pop
```

### 5. Push の実行

コンフリクトをすべて解決した後、最終的に変更を Push します：

```bash
git push origin feature/example-branch
```

## ベストプラクティス

### エラーを未然に防ぐ方法

1. **作業前に最新状態を取得**  
   新しい作業を始める前に必ず `git pull` を実行しましょう。

2. **小さく頻繁にコミット**  
   大きな変更を一度にコミットするのではなく、論理的に区切られた小さな変更を頻繁にコミットしましょう。

3. **Push する前に Pull**  
   Push する直前に Pull を行い、最新の状態を取り込むことでコンフリクトのリスクを減らせます。

4. **ブランチ戦略の適用**  
   feature ブランチや topic ブランチなど、適切なブランチ戦略を採用することでメインブランチとのコンフリクトを減らせます。

### 危険な操作と回避策

1. **`git reset --hard` の使用には注意**  
   このコマンドは変更を完全に破棄するため、使用前に必ず変更内容を確認しましょう。

2. **共有ブランチでの Rebase に注意**  
   他の開発者と共有しているブランチで Rebase を行うと、履歴が書き換えられ混乱の原因になります。

3. **バックアップの作成**  
   重要な操作の前には、予防措置として作業ブランチのバックアップを作成しましょう：
   ```bash
   git branch backup/feature-branch
   ```

## まとめ

Git の Push/Pull エラーは開発の日常的な一部ですが、適切な対処法を知っていれば効率的に解決できます。この記事で紹介した方法を実践することで、エラーに遭遇した際も慌てずに対処できるようになるでしょう。

最も重要なのは、Git の操作を慎重に行い、状態を常に確認することです。`git status` コマンドを頻繁に使用して現在の状態を把握し、不安な場合は操作前にバックアップを取ることを習慣にしましょう。

Git の操作に慣れることで、バージョン管理の効率が大幅に向上し、チーム開発がよりスムーズになります。エラーは学びの機会と捉え、一つひとつ解決していきましょう。