OmniAICreator/Qiita-1.07M huggingface dataset:
Angular コンポーネントの親子関係

# コンポーネントとは
コンポーネントとは、ビュー(View)を定義し、制御するものである。

![図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935725/ac90a085-9d83-45de-b715-c4de9a331d9e.png)

上図のようにコンポーネントはビューの定義から制御まで、一貫してビューを管理する。

以下のようにコンポーネント間で親子関係を構築できる。

![図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3935725/92f4e3b5-0b3f-4163-90e0-db42b331bc64.png)

親コンポーネントが子コンポーネントを含み、データの受け渡しやイベントのやり取りを行う。

# 親子関係をもつ目的

コンポーネントの親子関係を持つことで、以下のような利点がある。

- コードの再利用性向上: 共通のUIパーツをコンポーネント化することで、複数の場所で再利用できる

- 役割の分離: それぞれのコンポーネントが独自の役割を持つため、保守性が向上する

- データの適切な管理: 親から子へのデータ受け渡し（`Input`）、子から親へのイベント通知（`Output`）を活用することで、データの流れを制御しやすくなる

# ルーターを使った親子関係

Angularのルーターを使用すると、URLパスに応じて異なるコンポーネントを表示できる。`loadChildren` を使うことで、モジュール単位でルーティングを管理し、親子関係を構築できる。

## 親ルート（app.routes.ts）

``` app.routes.ts
// app.routes.ts
const routes: Routes = [
  // 'dashboard' パスにアクセスすると、DashboardModule を遅延ロードする
  {
    path: 'dashboard', 
    loadChildren: () => import('./dashboard/dashboard.module').then(m => m.DashboardModule) 
  }
];
```

## 子ルート（dashboard.module.ts）

``` dashboard.module.ts
const routes: Routes = [
  // '/dashboard' にアクセスしたときに表示されるコンポーネント
  { path: '', component: DashboardHomeComponent },

  // '/dashboard/details' にアクセスしたときに表示されるコンポーネント
  { path: 'details', component: DashboardDetailsComponent }
];
```

このように`app.routes.ts` の`dashboard`パスにアクセスすると、`dashboard.module.ts`内のルーティングが適用され、親子関係が成立する。
Microsoft DefenderをmacOSにインストールした際に行う設定

仕事で使っているMacbook AirのEDRとしてMicrosoft Defenderをインストールした際に、追加で手動設定が必要だったので、備忘として設定方法を残しておきます。

# Microsoft DefenderをmacOSにインストールする
インストール自体は特に悩むことはなく、Microsoft Defenderのページに行き、「設定」→「エンドポイント」→「デバイス管理」→「オンボーディング」のページで、OSに「macOS」を選んで、次の2つのファイルをダウンロードします。
* インストールパッケージ
* オンボードパッケージ

あとは、インストールパッケージ（wdav.pkg）を実行すれば、インストール自体は完了します。

https://learn.microsoft.com/en-us/defender-endpoint/mac-install-manually

# 追加で権限設定を行う
インストール後にも、ファイルへのフルアクセスなどの権限設定を求められますが、その後もMicrosoft Defenderの画面で「追加の処置が必要」とのメッセージが表示され続けました。画面上の「修正」ボタンを押しても改善されないので、少し調べたところ、次の手順で権限設定をすることでメッセージが表示されなくなりました。

* システム拡張機能で権限設定がペンディングになっているものを確認する。
  * ターミナルで systemextensionctl list コマンドを実行する。
  * 表示された内容から、ペンディングになっている機能拡張を特定する。
* 「システム設定」から権限設定を行う。
  * 「一般」→「ログイン項目と機能拡張」→「エンドポイントセキュリティ拡張機能」で、「Microsoft Defender」を有効化する。
  * 「一般」→「ログイン項目と機能拡張」→「ネットワーク機能拡張」で、「Microsoft Defender」を有効化する。

https://learn.microsoft.com/ja-jp/defender-endpoint/mac-support-sys-ext
LTSpice24にてSPICEモデルを読み込むときのPrefixには注意しよう

## はじめに

LTspiceで回路勉強をするとき、書籍を見ながら回路動作を確認する読者が大半だと思います。学習中によくあることとして、既存のSPICEモデルだけでなく、企業が提供しているSPICEモデルを使用することが挙げられます。実際の回路設計業務や何かモノづくりをしたいとき、購入までに実物の動作を確認する等、SPICEモデルでの検証と確認は行うため、非常に重要なプロセスです。

## 読者の対象

電子工作をしたい！電子回路の勉強をすすめたい！という方々はもちろんのこと、実際に販売されているデバイスのSPICEモデルで動作確認をしておきたい！という方にも読んでいただければと思います。
SPICEモデルの読み込み時のエラー対処法を紹介している記事のため、LTspiceの基本操作等は知っている前提で記述しております。

### 動作環境

- LTSpice 24.1.5(2025年4月1日現在）
- Windows 11 Home 23H2

## 本記事の目標

エラーの情報展開
外部のSPICEモデルをダウンロードしてLTSpice24で動作を確認できる

### エラーが起こるポイントに関して

大まかに2点あります。(他に起きるポイントもあるかと思いますが・・・）

1. .libで記述したファイル名が異なる
2. Component Attibute Editorの記法が間違っている

1番目に関しては、読み込みたいSPICEのファイル名を正しく記述すれば治ります。
本記事では、2番目に関して掘り下げます。

### エラーが起きたキッカケ

2N7000を使った回路動作を学ぶときに発生しました。
回路図はいたってシンプルなMOSFETと直流電源の構成です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542892/6863965b-dea4-45f7-8708-8e56c2103338.png)

ダウンロードしてきたMOSFETのSPICEモデルを動かそうとした際に、見覚えのないエラーが発生した。

```
Expected device instantiation or directive here.
N§M1 N001 N002 0 2N7000

^^^^^^^^^^^^^^^^^^^^^^^

```
接頭語§：セクションマークが現れてしまい、エラーになるとのこと。

PrefixでNを打ち込んでしまいLTspiceで有効でないデバイス名を指定してしまったらしく、雑に入力したせいで不要なエラーが起きてしまったらしい。

## 解決方法

Component Attribute EditorのPrefixに有効可能なX1を入力して下さい。

先に、コンポーネントのNMOSを配置した場合のComponent Attribute Editorを載せます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542892/61e85708-d426-482a-a158-207ff2e9b553.png)
注目してほしい点はPrefixがM**N**となっている箇所です。
Nが含まれると他の項目を編集して準備を整えている場合でもエラーが出ます。

実際に修正したComponent Attribute Editorは下記の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542892/e87fc581-8e5c-4d14-94de-c79d4b94c4fe.png)

結果として、シミュレーションでエラーを起こすことなく実行できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/542892/71d98ba4-2e1f-4f90-a51c-3e8f66fbb740.png)

## まとめ

回路勉強に集中していると、細かいミスが出てきて、LTspice動かない！なんてこともあるかと思いますが、エラーでめげずに回路勉強を楽しんでもらたら幸いです。
【プロジェクト契約/プロジェクト管理】準委任契約と請負契約について

　今まで従来のプロジェクト案件の慣習通り、契約は**準委任契約**として案件を進めてきていたが、**請負契約**での案件を担当することになるので少し勉強してみました。

 Qitta記事にも過去の参考になる説明記事があったので、記載しておきます。
 
https://qiita.com/tetsuya-imamura/items/d291859ee57b96d4c502

## ■ 準委任契約と請負契約の違い
 システム開発における契約形態は、主に「準委任契約」と「請負契約」の2つに大別されます。

### 【準委任契約（例：SES契約）】
契約の本質：作業の遂行自体が目的
報酬の基準：実働時間 × 単価（例：140時間で70万円）
成果物の有無：成果物の納入義務はない
代表的な業務：要件定義、外部設計、上流工程など「人的リソース」の提供が主目的となる業務
瑕疵担保責任：基本的に発生しない

### 【請負契約】
契約の本質：成果物の完成・納入が目的
報酬の基準：成果物の納品をもって支払われる（例：納品・検収後に一括で○○万円）
成果物の有無：明確な成果物あり
代表的な業務：システム開発、テスト工程など成果物を明示できる業務
瑕疵担保責任：原則として発生する（成果物に不備がある場合の対応義務）


### 【実務での活用】
　上記の参考記事に詳細が記載されていますが、システム化企画や要件定義などの成果物が流動的な状況である上流フェーズでは準委任契約、開発・テスト工程など成果物が定まるフェーズでは請負契約といった使い分けが一般的です。このようなプロジェクト管理においては、「契約の切り分け」と「契約書レビュー」がプロジェクト管理者の重要業務です。

## 最後に
　これまでの案件は「人月」×「単価」の見積もりを行い作業/サービス提供を目的とした準委任の契約を流れでしてきていました。しかしお客様からは、準委任にもかかわらず成果物(設計書やコード、エビデンス)の提出を求められるケースもあります。作業/サービスのアウトプットの一部として、認識しておくことが大事だと感じました。
 
 請負の契約の中身をしっかり把握して、適切に案件を担当していきたいと思いました。
【記事紹介】LLMのセキュリティリスクを学ぼう！OWASP Top 10 解説まとめ

# 【記事紹介】OWASP Top 10 for LLM アプリケーション：大規模言語モデルのセキュリティリスクを理解しよう

ChatGPTをはじめとした大規模言語モデル（LLM：Large Language Models）は、私たちの生活や業務に急速に浸透しています。しかし、その便利さの裏には、これまでとは異なる新たなセキュリティリスクも潜んでいます。

そこで注目すべきなのが、「OWASP Top 10 for LLM Applications」です。これは、Webアプリケーションの脆弱性リストで有名なOWASPが、LLM特有のリスクに焦点を当ててまとめたものです。

今回ご紹介するOmomukiの記事  
👉 [OWASP Top 10 for LLM アプリケーション 解説](https://omomuki-tech.com/archives/1031)  
では、この新しいTop 10について、具体例とともに非常にわかりやすく解説されています。

---

## 🔍 記事の内容

この記事では、OWASPが発表した「LLMアプリケーション向けの10大リスク」について、以下のような内容が取り上げられています：

- **LLM01: プロンプトインジェクション**  
  ユーザーや攻撃者が巧みに構築した入力によって、LLMの応答を意図的にコントロールされてしまうリスク。

- **LLM02: 不適切な出力の取り扱い**  
  モデルの出力をそのままシステムに渡すことで、意図しない動作や情報漏洩につながる危険性。

- **LLM03: トレーニングデータの汚染**  
  悪意あるデータを学習に混入させることで、モデルの挙動や品質に影響を及ぼす問題。

- **LLM04: サービス拒否攻撃（DoS）**  
  LLMに過度な計算処理を強いることで、リソースを消費させシステムをダウンさせるリスク。

- **LLM05: 機密情報の漏洩**  
  LLMが学習データに含まれる個人情報やパスワードを出力してしまう危険性。

- その他、アクセス制御の不備、モデルの誤用、監視不足なども網羅されています。

---

## 🌟 おすすめポイント

### ✅ LLM開発者必見の最新情報

この記事は、LLMに特化したセキュリティリスクを体系的に把握できる、貴重な内容になっています。今まさにLLMアプリケーションを開発・運用している方には非常に役立つでしょう。

### ✅ 各リスクに実例と対策がついている

単なるリスト紹介にとどまらず、なぜそのリスクが発生するのか、どうすれば回避できるのかについて具体的に書かれている点が非常に実践的です。

### ✅ 初心者でも理解しやすい解説

専門用語に偏りすぎることなく、初めてLLMやセキュリティに触れる人でも理解できるように構成されています。

---

## 👨‍💻 こんな人におすすめ

- ChatGPTやLLM APIを活用した開発を行っているエンジニア
- AI×セキュリティに興味がある学生・研究者
- 自社のLLM導入を検討している企業の技術担当者
- LLM活用におけるリスクを事前に洗い出したいプロジェクトリーダー

---

## 🔗 記事はこちらから！

👉 [OWASP Top 10 for LLM アプリケーション 解説](https://omomuki-tech.com/archives/1031)

生成AIを安全に活用するために、今こそ「LLMセキュリティ」の基礎を学んでおきましょう。OWASPが提示するTop 10は、その出発点として最適です！
【Amazon Connect】エージェントへの転送フローを使いやすくしてみた

# はじめに

本記事では、Amazon Connectの「エージェントへの転送フロー」をより使いやすくする設定を説明します。

# 前提

顧客からの着信を対応しているエージェントが困り、他のエージェントへ転送する機能として、`クイック接続`という機能があります。
そのクイック接続で設定するフローが、本記事の内容になっている**エージェントへの転送フロー**です。

# 設定を行う理由

普段の業務で、顧客との通話を対応しているエージェントが困り、他エージェントへ転送するという場面も多いかと思います。
その際に、対応しているエージェントから見える範囲に他エージェントがいるのであれば問題ないかもしれませんが、離れていたり他エージェントが遠隔地の際に転送をして、他エージェントが不在などで対応できないこともあると思います。
そのような時に、本記事の設定をしておくと、転送元（顧客と通話中）のエージェントに対応不可のアナウンスを流し切断することで、転送先の他エージェントは不在ということが判断でき、別の他エージェントへ転送するなどが可能です。

# フローの設定

## 全体像

![basic_agent_transfer全体画像.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/738d680c-c26a-4b7e-b00d-dec2f472aa48.png)

### 注意点

本記事の内容である「エージェントへの転送」フロー以外のフローについての内容は記載しない

### 人員の確認

ログ記録の有無やContact Lensの設定、音声の設定などの後に、「**人員の確認**」ブロックに繋げる

- 人員の確認ブロックの設定
    - チェックするステータスを選択 : 利用可能
    - 確認するキュー (オプション) : ON
    - エージェント別
        - 動的に設定
        - 名前空間 : エージェント
        - キー : ARN
- Trueの場合
    - フロー継続
- Falseの場合
    - プロンプトの再生ブロックを配置し「転送先のエージェントは対応ができないため転送を終了します」などのアナウンスを設定し切断

<img width="50%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/9272b59b-c8a2-4aed-baf3-94c0c9d569ff.png">

# 動作確認

- 転送先のエージェントステータスが「Available」の場合
    - 正常に転送でき、転送元と転送先との通話が開始される
- 転送先のエージェントステータスが「Offline」の場合
    - 設定した転送できないアナウンスが流れて、切断される
    - 転送元は保留状態になる
- 転送先のエージェントステータスが「休憩中(※1)」の場合
    - 設定した転送できないアナウンスが流れて、切断される
    - 転送元は保留状態になる
- 転送先のエージェントステータスが「通話中」の場合
    - 設定した転送できないアナウンスが流れて、切断される
    - 転送元は保留状態になる

※1. 作成したカスタムエージェントステータス

# 関連サイト

- [コンタクトフロー解説](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2022_AmazonConnect-ContactFlow_1117_v1.pdf)
- [Amazon Connect のフローブロック: 人員の確認](https://docs.aws.amazon.com/ja_jp/connect/latest/adminguide/check-staffing.html)

# まとめ

本記事では、AWSサービスの1つであるAmazon Connectのエージェント転送機能をより良くする方法について紹介しました。
この設定を活用することで他エージェントの対応状況が確認でき、対応しているエージェントが他エージェントへ即座に再転送が可能となるため顧客を待たせる時間も減ることに繋がります。
LaravelのAuth::id()とAuth::user()の使い方のまとめ

# はじめに
Laravelでログイン中のユーザー情報を取得する際によく使うのが、

```php
Auth::id()
Auth::user()
Auth::user()->name
```
などの記述です。

この記事では、それぞれが**どういう意味を持ち、どんな場面で使うのか**を、初心者向けにまとめていきます。

# ①Auth::id()の意味と使い方
```php
$userId = Auth::id();
```

- ログイン中のユーザーの「ID(数値)」だけを取得します。
- 戻り値はintまたは、null(未ログインの場合)。

**使いどころ:**
- ログインユーザーが作成したデータに「user_id」を紐づけるとき:
```php
$post = new Post();
$post->title = '新しい投稿';
$post->user_id = Auth::id(); // 現在のログインユーザーID
$post->save();
```

# ②Auth::user()の意味と使い方
```php
$user = Auth::user()
```
- ログイン中のユーザー情報をまるごと取得できます。
- 戻り値はUserモデルのインスタンス(ログインしていないときはnull)。

**例:**
```php
$user = Auth::user()
echo $user->name;
echo $user->email;
```
Bladeテンプレートでもよく使います:
```blade
<p>こんにちは、{{ Auth::user()->name }} さん!</p>
```
# ③Auth::user()->〇〇で各種情報を取得
Auth::user()で取得したUserモデルのプロパティで直接参照できます。

**よく使うプロパティ例:**
![IMG_7747.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/44c6957b-8283-4f71-9c9b-b14ae05459cc.jpeg)

**例:**
```php
$name = Auth::user()->name;
$email = Auth::user()->email;
```

# ④未ログイン時のエラーに注意!
ログインしてない状態でAuth::user()->nameのように書くと...
```plaintext
Error: Tryping to get property 'name' of non-object
```
というエラーが発生します。

**対策:**
```blade
@if(Auth::check())
    <p>ようこそ、{{ Auth::user()->name }} さん!</p>
@else
    <p>ログインしてください。</p>
@endif
```

もしくは:
```php
$name = optional( Auth::user())->name ?? 'ゲスト';
```

# ⑤Auth::check()もセットで覚えておこう
```php
if(Auth::check()) {
   // ログイン中の処理
}
```
- Auth::check()は「ユーザーがログインしているかどうか」を判定する関数です。

# ⑥まとめ
![IMG_7748.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/816103c7-f00a-4580-8e60-ac80bd46a42d.jpeg)

Laravelの認証システムは非常に柔軟で、こうした関数を使えば簡単に「ログインユーザーに紐づけた処理」ができます！
Data Matrixの描画・QRコードに似たコードの作成



## Data Matrix コード
（1）Data Matrix コード
QRコードよりも微細化可能。

読み取り誤差や歪みに強く、小面積への印刷・織り込みに適する。

一般的に産業用マーキングとして使用実績が豊富。

### その他のQR類似コード
（2）DotCode（ドットコード）
ドット状の点パターンによるコードであり、非常に柔軟性が高い。

湾曲面や不規則な表面での読み取り精度が高い。

印刷が容易で、織物にも応用しやすい。

（3）Aztecコード
中央基準点を持ち、読み取り時の歪み補正能力に優れる。

織り込みによる微細コード形成にも適合性がある。

## 環境構築(python)
**pylibdmtx**のインストール（コード作成用ライブラリ）
下記ページのpylibdmtx 0.1.10の解説だが、リリース日: 2022年3月15日とすこし古い。
https://pypi.org/project/pylibdmtx/

Linuxのライブラリは　sudo apt-get install libdmtx0aではなく、

```
sudo apt-get update
sudo apt-get install libdmtx0b libdmtx-dev
```

```
pip install pylibdmtx
pip install pillow
```
## デモコード
```demo.py
import json
from pylibdmtx.pylibdmtx import encode
from PIL import Image

def generate_datamatrix(data, filename):
    """
    入力の辞書型データをJSON文字列に変換し、
    Data Matrixコードを生成して画像として保存する関数
    """
    json_data = json.dumps(data)
    encoded = encode(json_data.encode('utf-8'))
    img = Image.frombytes('RGB', (encoded.width, encoded.height), encoded.pixels)
    img.save(filename)

if __name__ == '__main__':
    # デモ用データ
    demo_data = {"message": "Hello, Data Matrix!"}
    # 画像ファイル名
    output_filename = "datamatrix_demo.png"
    generate_datamatrix(demo_data, output_filename)
    print(f"デモ用のData Matrixコード画像を作成しました：{output_filename}")
```
このような、png画像が作成できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1520250/9dab9b7c-a197-4377-8d45-5a7123d09172.png)
利用している高品質なメール配信サービスにBOTから大量の仮登録があったのを対策してみた話

# はじめに

メール配信サービスを利用して会員向けメール配信を行なっている事業者さんからの相談で、仮登録メールというのが毎日大量に送られてくるのをなんとかしたいとのこと。

サービス事業者になんとかする方法がないか確認してみてはと伝えたところ、その事業者の回答は「仮登録されてもなんの影響もないので放置して大丈夫。」というものだったそうです。

ただ、その事業者さんは仮登録から本登録への移行割合を指標として利用しているところがあって、仮登録を無視できないとのことでした。

ということで、長くなりましたが以下に今回行なった対策方法をまとめます。

# 対策方法

## アクセス拒否

ログを見ると複数のIPアドレスから定期的にアクセスされているようだったので、不審なIPアドレスのアクセスを拒否するようにしました。

今回はWebサーバーにApacheを使っていたので、以下のようにhtaccessを使ってアクセス拒否の設定を行いました。

```
# sudo nano .htaccess
```

```
order allow,deny
allow from all
deny from ***.***.***.***
deny from ***.***.***.***
:
deny from ***.***.***.***
```

ただし、この方法ではアクセスしてくるIPが変更になると都度追記が必要となります。

## JavaScriptの追加

BOTっぽいアクセスはGoogleアナリティクスに記録されていなかったので、JavaScriptは動いてないと判断して、JavaScriptで仮登録送信先を変更するようにしてみました。

### 変更前

```html:
<h1>メール配信の登録</h1>
<p>メール配信の登録はこちら</p>
<form method="post" action="https://***.jp/***/***.php?id=***&task=regist">
  <div><input name="form[mail]" type="text" size="50"></div>
  <div><input name="regist" type="submit" value="登録"></div>
</form>
```

### 変更後

```html:
<h1>メール配信の登録</h1>
<p>メール配信の登録はこちら</p>
<form id="registForm" method="post" action="./"  onsubmit="return confirm_submit();">
<form method="post" action="">
  <div><input name="form[mail]" type="text" size="50"></div>
  <div><input name="regist" type="submit" value="登録"></div>
</form>

<script>
function confirm_submit() {
  ans = confirm('送信して良いですか？');
  if (ans) {
    document.getElementById('registForm').action = 'https://***.jp/***/***.php?id=***&task=regist';
  }
  return ans;
}
</script>
```

# 結果

対策後、BOTのIPアドレスがいくつか増えたりしましたが、都度対応してアクセスを拒否できました。
また、BOTと思われるアクセスがあってもJavaScriptが動作しないため仮登録のメールは送られてきませんでした。

約１週間後、BOTからのアクセスはなくなり現在は平和な日々を送っています。

ということで、対策成功！
日報にAIがアドバイスをくれるアプリ作ってみた！

### はじめに
突然ですが皆様、日報は取られますでしょうか？私は取っています！
日々振り返りをし日報を書いていくことで、「学び」というデータが蓄積されていきます。個人だけでなくそれがチーム全体なら膨大なデータの量となっていきます。

私も日報を日々書き、学びを蓄積していっているのですが、多くなってくると見返すことが困難となってきますよね...そこで膨大なデータを整理し必要な学びを得たいなと考えました。
また、最近まで[こちらの記事](https://qiita.com/GU39/items/94367fcd8b530025655f)のように新人への指導も行っており、指導を行いながら、自分もこんな感じで日報にアドバイスをもらえたらなあと考えることもありました。
さらに、C#も学習してC#の学びをアウトプットする機会でもあると思ったため**日報アドバイスツール**を開発しました！


### 動作例
こちらの画像のように日報が投稿されているとします。(テスト用なので日付や内容などは仮のものになります)
![image (16).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629646/33babcb7-c5a8-4059-ab6c-8606c5634cd4.png)

アプリを起動しボタンをクリックすると
![advice.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629646/8ead7f3a-7363-4fdf-b13c-8d7a46d6967b.gif)
特定期間の日報に書かれた[課題]を取得し、それらをカテゴライズ、それらに対するアドバイスをしてくれます。さらに収集した[課題]の中で最近のものをピックアップし総合したアドバイスもしてくれます！

### 利用前の前提・準備

- Slackの日報の形式
>課題
｛課題の内容｝

となっていること

- Geminiの設定

以下でGeminiのAPIキーを取得します。

https://ai.google.dev/gemini-api/docs/api-key?hl=ja

- Slackの設定

以下の記事を参考にSlackのAPIキーの発行とメッセージを取得したいチャンネルIDを確認します。

https://qiita.com/yoshii0110/items/2a7ea29ca8a40a9e42f4


取得したGeminiのAPIキー、SlackのAPIキー、メッセージを取得したいSlackのチャンネルIDをアプリ内の以下のテキストブロックに入力し、OKボタンを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629646/67ddcaf5-7c26-4c41-b3dd-d608a251df14.png)

### 注意点

今回Geminiを用いています。簡単にAPIで自アプリにAIを組み込めるのは魅力なのですが、一点注意事項があります。公式ドキュメントにも学習に使われるとの記述があるため社内であったりプライベートなの情報はいれないように配慮する必要があります。

https://support.google.com/gemini/answer/13594961?visit_id=638790633539826137-4225565353&p=privacy_help&rd=1

### コード

https://github.com/GU-GU-3/GU_App

### 学び

今回初めて、個人開発でアプリを第三者に公開するということを行いました。それにより**初めに誰かに評価してもらうことの重要性**　の学びを得ました。
公開しようといざ記事を書いている今も変更したい箇所が出てきてしまいました。設計、実装中は気づけなかった観点も多くあったのでその観点を初期の段階で見つけるためにも周りの方に評価してもらうのが大切だと思いました。


### おわりに

改善点も多くあると思いますが、やはり自分の中で閉じずに公開するということはいいことだと思いました！よりよいもの、すこしでもよいものにしようと考えてしまいます。これからもこのようなアウトプットを繰り返しエンジニアとして成長してきたいと思います！最後までご覧いただきありがとうございました！
OACのコンテキスト・インサイト

# はじめに
OAC（**Oracle Analytics Cloud**）では、拡張分析機能として「列の説明」やデータセットの「自動インサイト」といった機能が搭載されていますが、2025年1月以降は新たに「コンテキスト・インサイト」が加わりました。

- 特定の列について、様々な見方を提示する「列の説明」
- データセット全体にわたって、様々な可視化を提案する「自動インサイト」

これらに対して、ビジュアライゼーションで選択した一部について、インサイトを提供するのが「コンテキスト・インサイト」です。

# サンプルワークブック
動作を確認するために、サンプルのワークブックを用意しました。
データセットは、「Sample Order Lines.xlsx」を使用しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b27c4baa-9c68-4f84-bb2b-1ff45f1ed24e.png)

下段の3つドーナツ・チャートのうち、真ん中のビジュアライゼーションにコンテキスト・インサイトを設定します。

## コンテキスト・インサイトを使えるようにする
ワークブックを編集モードにします。
目的のビジュアライゼーションを選択して、プロパティを表示します。
「分析」タブの「ビジュアライゼーションの説明」を「オン」にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a28fa64b-ccc6-467c-8b49-37b2cd1b2859.png)

# 試してみる
編集モード、ビューモードのどちらでも機能します。
今回はワークブックをビューモードにしてみました。

## ビジュアライゼーションを右クリック
「ビジュアライゼーションの説明」をオンにしたビジュアライゼーションの任意の場所を右クリックします。
例えば、ドーナツの「Consumer」の部分を右クリックします。
メニューが表示されるので、「選択内容の説明」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/a1ae8942-1434-43a9-8441-374c1cdfd2d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/273aff49-fd0f-444e-8167-5801c2fa8517.png)

気に入った「インサイト」は、ウォッチリストに追加することができます。
【簡単AWS】【AWS IAM】 IAMの権限管理詳解：権限の乱用を防ぐ方法


AWS（Amazon Web Services）では、IAM（Identity and Access Management）を使用してユーザーやサービスの権限を管理できます。しかし、不適切な権限設定は、過剰な権限付与や不正アクセスなどのセキュリティリスクを引き起こす可能性があります。

本記事では、AWS IAM の基本概念、よくある権限管理のミス、ベストプラクティスについて解説し、適切な権限管理の方法を紹介します。

---

## ✨ 1. IAM の基本概念

AWS IAM では、AWS リソースへのアクセス権限を管理するために、以下の要素が使用されます。

- **ユーザー（User）**：特定の個人を表し、それぞれに異なる権限を付与可能。
- **グループ（Group）**：複数のユーザーをまとめて権限を管理。
- **ロール（Role）**：特定のユーザーに紐づかない、一時的な権限を付与可能。
- **ポリシー（Policy）**：JSON 形式で記述されるアクセス制御ルール。

IAM を適切に活用することで、組織全体のセキュリティ管理を強化できます。

---

## ✨ 2. IAM 権限管理のよくあるミス

### ✅ **過剰な権限付与**

利便性を優先し、`AdministratorAccess` や `*`（ワイルドカード）を使用するケースが多く見られます。これは重大なセキュリティリスクとなります。

❌ **誤った設定例**
```json
{
    "Effect": "Allow",
    "Action": "*",
    "Resource": "*"
}
```
✅ **対策**
- **最小権限の原則（Least Privilege）** を遵守し、必要最小限の権限のみを付与する。
- 具体的なアクションとリソースを指定する。

### ✅ **ルートユーザーの使用**

AWS のルートユーザーは、すべての操作が可能な特権アカウントです。日常的な操作で使用するのは避けるべきです。

✅ **対策**
- IAM ユーザーを作成し、適切な権限を割り当てる。
- ルートユーザーには **MFA（多要素認証）** を有効化する。

### ✅ **権限の定期的な見直し不足**

不要な IAM ユーザーやポリシーが放置されると、セキュリティリスクが高まります。

✅ **対策**
- **IAM Access Analyzer** を活用し、不要な権限を検出。
- 定期的に IAM 設定を監査し、不要な権限を削除。

---

## ✨ 3. IAM のベストプラクティス

### ✅ **最小権限の原則（Least Privilege）**

ユーザーやロールには、業務遂行に必要な最小限の権限のみを付与します。

✅ **推奨事項**
- AWS の **管理ポリシー（Managed Policies）** を活用し、過剰な権限を避ける。
- `*`（ワイルドカード）を極力避け、リソースを具体的に指定する。

✅ **例（S3 の特定バケットの読み取り権限のみを付与）**
```json
{
    "Effect": "Allow",
    "Action": "s3:GetObject",
    "Resource": "arn:aws:s3:::example-bucket/*"
}
```

### ✅ **MFA（多要素認証）の有効化**

MFA を有効にすることで、不正アクセスのリスクを大幅に低減できます。

✅ **設定手順**
1. AWS マネジメントコンソールで IAM に移動。
2. ユーザーを選択し、MFA を有効化。
3. Google Authenticator などの認証アプリで QR コードをスキャン。

### ✅ **IAM ロールの活用（長期的なアクセスキーの使用回避）**

AWS のリソースにアクセスするアプリケーションには、IAM ユーザーのアクセスキーを使うのではなく、IAM ロールを使用するのが推奨されます。

✅ **例（EC2 インスタンスが S3 へアクセスする場合）**
1. IAM で `AmazonS3ReadOnlyAccess` ロールを作成。
2. EC2 インスタンスに IAM ロールをアタッチ。
3. アプリケーションは `AWS SDK` を通じて自動的に権限を取得。

### ✅ **IAM Access Analyzer の活用**

AWS が提供する **IAM Access Analyzer** を使えば、過剰な権限が付与されているリソースを検出できます。

✅ **有効化手順**
1. IAM マネジメントコンソールで Access Analyzer を有効化。
2. 解析結果を確認し、適切な修正を実施。

---

## ✨ 4. まとめ

✅ **AWS IAM の適切な管理は、クラウド環境のセキュリティを維持するために不可欠** です。
✅ **過剰な権限の付与を避け、定期的な監査を行い、最小権限の原則を適用する** ことで、権限の乱用を防げます。
✅ **IAM 設定の見直しや MFA の有効化、IAM ロールの活用** など、基本的なベストプラクティスを実践しましょう。

AWS IAM を適切に活用し、安全で効率的なクラウド環境を構築しましょう！💡

**AWS IAM に関する質問があれば、ぜひコメントでお知らせください！**
FlutterWebでcontroller != null "Maps cannot be retrieved before calling buildView!"エラー

## 環境
- flutterのweb環境
- riverpodなどの状態管理パッケージを使用
```yaml
dependencies:
  google_maps_flutter: ^2.12.0
```
## エラー本文
```
DartError: Assertion failed: file:///Users/username/.pub-cache/hosted/pub.dev/google_maps_flutter_web-0.5.12/lib/src/google_maps_flutter_web.dart:32:12
controller != null
"Maps cannot be retrieved before calling buildView!"
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 307:3  throw_
dart-sdk/lib/_internal/js_dev_runtime/private/profile.dart 117:39            assertFailed
packages/google_maps_flutter_web/src/google_maps_flutter_web.dart 32:22      [_map]
packages/google_maps_flutter_web/src/google_maps_flutter_web.dart 107:17     <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 622:19          <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 647:23          <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 541:3           _asyncStartSync
packages/google_maps_flutter_web/src/google_maps_flutter_web.dart 103:16     updateTileOverlays
packages/google_maps_flutter/src/controller.dart 188:10                      [_updateTileOverlays]
packages/google_maps_flutter/src/google_map.dart 508:25                      <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 622:19          <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 647:23          <fn>
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 593:31          <fn>
dart-sdk/lib/async/zone.dart 1849:54                                         runUnary
dart-sdk/lib/async/future_impl.dart 208:18                                   handleValue
dart-sdk/lib/async/future_impl.dart 932:44                                   handleValueCallback
dart-sdk/lib/async/future_impl.dart 961:13                                   _propagateToListeners
dart-sdk/lib/async/future_impl.dart 712:5                                    [_completeWithValue]
dart-sdk/lib/async/future_impl.dart 792:7                                    callback
dart-sdk/lib/async/schedule_microtask.dart 40:11                             _microtaskLoop
dart-sdk/lib/async/schedule_microtask.dart 49:5                              _startMicrotaskLoop
dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 186:7           <fn>
```

## どうするか？
追跡されているissueでは**p3**(Flutterにとってどうでもいいと思われているissue)のため
対応はされないかもしれないです。

また、package内の`assert()`はアプリ側のtry-catch句でエラーを拾えないため、
2025/3/31現在修正されるまで無視するしかない

なお、ビルドされたアプリはpackage内の`assert()`が原因でアプリが落ちることはなく、
``flutter run --release``で動作確認をするしかない

## 参考
https://github.com/flutter/flutter/issues/101387
【備忘録】EC2インスタンス上のマイクラサーバのバージョンアップ

# はじめに
【自己責任でお願いします】
真偽のほどは不明ですが、ネットの情報とChatGPT君のアドバイスを元にEC2インスタンス上のマイクラサーバのバージョンアップ（1.21.4→1.21.5）をやってみました。
多分数カ月後の自分が同じことで困ると思うので、やったことをとりあえず備忘録的に残しておきます。
（駆け出しエンジニアなので用語や知識があやふやです。大目に見てください。）

# バージョンアップ手順
やったことは下記の通りです
1. バックアップ
1. BuildToolsのダウンロード
1. ビルド

## ０．マイクラサーバの停止
裏で動いているマイクラを止めておく。バックアップのためや、ワールドデータが壊れないように。
止め方は後で追記予定。

## １．バックアップ
とりあえずtarコマンドを使ってバックアップ。
バックアップ対象はワールドファイルだけでも良さそうな記述を見かけるのですが、なんとなく怖いのでMinecraftディレクトリ全体をバックアップ。（たぶん非効率的）
```bash
$ cd /home/minecraft/
$ sudo tar -cvzf minecraft_backup_$(date +%Y%m%d).tar.gz .
```

## ２．BuildToolsのダウンロード
自分はspigotでインストールしたので、spigotからBuildToolsを持ってくる。
BuildToolsはGoogleで「spigot 1.21.5」とか検索すれば出てくる。
今回見たサイトは下記のもの。
https://www.spigotmc.org/threads/spigot-bungeecord-1-21-5.684226/

wgetコマンドでminecraftディレクトリ内にBuildToolsを持ってくる。
サイト内に下記のような記述があるので、そのリンク（this link部分）をコピーしてwgetの後ろ側にペースト。
> **Downloading / Installing**
> In order to get 1.21.5, ...(中略)... You can download the latest BuildTools from this link.

```bash
$ cd /home/minecraft
$ wget https://hub.spigotmc.org/jenkins/job/BuildTools/lastSuccessfulBuild/artifact/target/BuildTools.jar
```
別のディレクトリに一旦ダウンロードしてjavaファイルを生成し、リネームしてからいつもの場所（`/home/minecraft`）に突っ込む方が丁寧。だがめんどいので省略。

## ３．ビルド
ダウンロードしてきたBuildToolsがある場所で下記のコマンドを実行。
```bash
java -jar BuildTools.jar --rev 1.21.5
```

6分くらいかかった気がする。
完了すると、コマンドを実行した階層に`spigot-1.21.5.jar`みたいなものが出来上がる。

## ４．起動スクリプト修正
私は下記のサイトを参考にEC2インスタンス起動時にマイクラサーバも立ち上げるように設定した関係で、下記のコマンドが書かれたシェルスクリプトを修正する必要があった。
参考：https://note.com/unixon/n/ndd0799d972bf（5.Minecraftサーバの自動起動）

```bash
### start_minecraft.sh ###
cd /home/minecraft/
java -Xmx○○G -Xms○○G -jar spigot-1.21.5.jar nogui
```

## ５．動作確認
あとはstart_minecraft.shを叩いて動作確認しても良し。
自動起動まで確認するために一度再起動しても良し。

# 自分への注意事項
この記事をご覧の方には一切有益ではない情報ですみません。
- Minecraftサーバ上のアクティブユーザがいない状態で15分が経過すると自動でサーバを落とす設定にしていることを忘れて作業しないこと
    -  サーバが起動してからは30分の猶予を持たせているが、この仕組み自体を一時的に止めた方が賢明。cronで5分おきにpythonスクリプトを呼び出しているので、`sudo crontab -e`で一旦コメントアウトしてメンテしてた。
    - 参考：https://zenn.dev/shatos/articles/50c43d875a64eb#%E8%87%AA%E5%8B%95%E5%81%9C%E6%AD%A2（自動停止）
- 今回はマイクラサーバをkillで止めていたが、ユーザデータを編集して仮想コンソール上（screen）で動かすようにしてみた。動作未確認。
    - `screen -r minecraft`で呼び出し、`stop`を打てば良さそう。大体どのサイトも`stop`で止めろしか書いてなくて悲しくなったので。
    - systemdで管理する方法もありそうだが、今回は一旦スルー。気が向いたら試してみる。
Field ServiceでのUIの問題



+ [Dispatching Issues](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PXS2F0AX)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/04932778-7391-4c7c-bb0e-2f98da22806e.png)

:::note
We ended up updating all permission sets and that seems to have done the trick.
:::


# Field Service Mobile

+ ["Unable to load Service Resource" error when clearing cached metadata](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007bLfclSAC)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e3621791-63f9-a616-7eb6-067b4cd062f6.png)


:::note
アプリの動作、特にキャッシュのクリアに関しては、従うべき特定の手順があります。

キャッシュのクリア ボタンを押すと、最後に終了した時期に関係なく、アプリが中断される可能性があることに注意することが重要です。適切な機能を確保するには、毎回このアクションを繰り返す必要があります。次にキャッシュをクリアするまで問題が続く場合は、意図したとおりに動作しています。

アプリの正しい動作を明確にするために、推奨される指定された手順を次に示します。

1. FSL モバイルを開きます。
2. 右下隅にある「プロファイル」アイコンをクリックします。
3. リストから「詳細設定」を選択します。
4. オプションから「キャッシュされたメタデータをクリア」を選択します。
5. 「キャッシュされたメタデータをクリアしますか?」というプロンプトで「OK」をクリックして確認します。
手順 7 ～ 10 が完了するまで、アプリで問題が発生する可能性があることに注意してください。

7. 次のように指示するプロンプトで「OK」をクリックします。
「設定の変更を有効にするには、アプリを終了して再度起動してください。」

8. 上にスワイプしてすべてのアプリを表示し、SFS をスワイプしてアプリを終了します。
9. アプリを再度開きます。
10. アプリが通常の機能を再開することがわかります。

これらの手順が混乱を解消し、アプリのスムーズな操作に役立つことを願っています。ありがとう。
:::
ScriptableObjectについて

## きっかけ

最近ScriptableObjectアーキテクチャパターンなるものがあることを知りました。そのアーキテクチャパターン自体は大したことではないのですが、「そもそもScriptableObjectってなんだっけ」となったので、調べたことをまとめてみます。結構Unityを使い慣れている人でも、ScriptableObjectが何か、具体的に説明するのは難しいのではないでしょうか。私は「マスターデータで使うやつ」くらいの認識しかありませんでした。

なお、この記事は下記の公式リファレンスを参考にしているので、より正確で詳細な情報が知りたい人はそっちを直接みてください。

- [ScriptableObject](https://docs.unity3d.com/6000.0/Documentation/Manual/class-ScriptableObject.html)

## 概要

性質を列挙してみると

- **コピーではなく参照を渡す**
- **プロジェクトのアセットとして保存する**
- UnityEngine.Objectを継承している
- ゲームオブジェクトにアタッチできない
- エディターの編集中と実行時にデータを保存できる。名前空間がEditorだから。
- 揮発性があるのでセーブデータとしては活用できない

特に「コピーではなく参照を渡す」「プロジェクトのアセットとして保存する」が特徴的で、このおかげで大量のデータを保存するためのデータコンテナとして使用したり、シーンやクラスインスタンスの制限を受けずにアクセスしたりすることができるわけです。この性質を駆使したものがScriptableObjectアーキテクチャパターンになるわけですが、そちらはまた別記事にまとめる予定です

また、公式文書だと`Prefab`と並んで説明されています。`Prefab`はインスタンスの度にデータをコピーします。一方で、`ScriptableObject`はメモリに1つのコピーしかないので、すべての`Prefab`から参照することでデータの重複が防げます。つまりメモリの節約ができるわけです。個人的には`Prefab`から`ScriptableObject`を参照する発想がなぜか無かったです。確かに使い勝手良さそう。

## 一言で説明してと言われたら

公式文書にある通り「大量のデータを保存するために使用できるデータコンテナ」で良さそうです。主目的としてマスターデータ(キャラクターのステータスとか)を保存する役割があるのは間違いなさそうです。ただそれに限らず、いろいろ便利な使い方があるってことです。ScriptableObjectの真の力を引き出せるエンジニアは少ないのかもしれません。

## おまけ:Scriptableの意味

調べてみたのですがよく分からなかったです。「スクリプト化できる」と言われても、ピンと来ません。スクリプトと言えばUnityではソースコードを書くファイルが思い浮かびます。[用語集](https://docs.unity3d.com/6000.0/Documentation/Manual/Glossary.html#Scripts)にはきちんと説明があって、

> A piece of code that allows you to create your own Components, trigger game events, modify Component properties over time and respond to user input in any way you like.

訳すと「独自のコンポーネントを作成、ゲームイベントの発動、時間の経過によるコンポーネントのプロパティの変更や入力への反応など、とにかく好きにできるコードのかけら」って意味かなと。多分。で、Scriptの意味はわかったのですが、それが Scriptable の意味はわかりません。アセットにクリエイトできるからScriptableなんですかね。誰か教えて偉い人。
個人的備忘録：Apacheのログってどこにある？OS別の保存場所一覧を勝手にまとめてみた

## はじめに
Apacheを使用したWebサーバーのトラブルシューティングやアクセス解析において、ログファイルの確認は非常に重要です。

:::note info
**ただし、使用しているOSによってログファイルの保存場所が異なるため、混乱することも少なくありません。**
:::

本記事では、代表的なOSごとのApacheアクセスログとエラーログの場所を一覧にまとめ、自分用の備忘録として記録します。

---

## 書こうと思ったきっかけ
複数のサーバー環境でWebアプリケーションを運用していると、Apacheのログを確認する機会が頻繁にあります。

:::note warn
***しかし、OSごとにログの保存先が違うため、毎回調べるのが手間になっていました。***
:::

この備忘録を作っておけば、すぐに確認できて便利だと感じたためまとめています。

---

## Apacheログファイルの場所一覧

| OS                      | アクセスログの場所                                      | エラーログの場所                                        |
|------------------------|--------------------------------------------------------|--------------------------------------------------------|
| Debian/Ubuntu/Linux Mint | `/var/log/apache2/access.log`                          | `/var/log/apache2/error.log`                          |
| Red Hat/Fedora/CentOS | `/var/log/httpd/access_log`                           | `/var/log/httpd/error_log`                           |
| OpenSuse               | `/var/log/apache2/access_log`                         | `/var/log/apache2/error_log`                         |
| Windows                | `C:\Program Files\Apache Group\Apache2\logs\access.log` | `C:\Program Files\Apache Group\Apache2\logs\access.log.1` |

**参考文献**

https://www.manageengine.jp/products/EventLog_Analyzer/logging-guide/apache-logging.html

## まとめ
Apacheのログファイルは、サーバーの異常やアクセス状況を把握するために必須の情報源です。

:::note warn
***OSごとに保存場所が異なるため、特に初めて扱う環境では戸惑うことがあります。***
:::

この一覧を備忘録として残しておくことで、環境に応じた素早いトラブルシューティングやログ解析が可能になります。今後も新しい環境に出会った際には、ここに追記していく予定です！
データローダーでのログイン



+ [Sandbox環境にデータを投入したいと考えているのですが、OAuth接続すると、いつも意図したのと違うSandbox環境に接続されてしまいます。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PXJrT)

:::note
ログインに使っているユーザ名が正しいかを確認してみてください。 

ログインする前に、[設定] メニューの下にあります。 

サンドボックスを使用している場合は、 username@salesforce.com.sandboxのように、ユーザー名にサンドボックス名を追加する必要があります。サンドボックスのセキュリティ トークンも、本番組織のセキュリティ トークンとは異なります。 

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

>結果的に、Dataloaderの「Settings」内にURLを指定する部分（Authentication host domain URL for Sandbox）があるのを見落としており、そこを当該のSandboxのログインURLに切り替えたところ無事に接続できました！
:::

+ [DataLoader　ログインができない件](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000DdwH2SAJ)


# 設定

+ [データローダー設定の変更を保存する方法は？](https://developer.salesforce.com/forums/?id=9060G000000UZ3fQAG)
個人的備忘録：macOS環境でmysql-connector-pythonをpipコマンドで導入してみた

## はじめに
PythonでMySQLと接続する際、`mysql.connector` ライブラリを使うことがあります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、macOS環境でこのライブラリを導入・利用する方法を、自分用の備忘録としてまとめています。

---

## 書こうと思ったきっかけ
Docker環境やローカル開発でMySQLと連携するアプリを構築する際、Pythonからの接続テストに毎回手順を確認していたため、再確認の手間を減らすためにまとめました。

---

## ライブラリのインストール
以下のコマンドをターミナルで実行します：
```bash
pip install mysql-connector-python
```
または Python3 系の場合：
```bash
pip3 install mysql-connector-python
```

**実際のターミナル画面**

![Screenshot 2025-04-01 at 7.56.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/eab2dba8-476d-4f43-9f14-ca805818143e.png)

---

## インストール確認
Pythonインタプリタを起動して以下を入力：
```python
import mysql.connector
```
エラーが出なければインストール成功です。

---

## 仮想環境での管理
プロジェクトごとに依存管理を分けたい場合、仮想環境を利用します：
```bash
python3 -m venv venv
source venv/bin/activate
pip install mysql-connector-python
```

---

## まとめ
PythonでMySQLに接続する際は、`mysql-connector-python` パッケージを使用するのが一般的です。

:::note warn
***仮想環境を活用することで、環境ごとに依存関係を明確に管理でき、開発効率が上がります。***
:::

シンプルな作業ではありますが、何度も使う手順なので備忘録として残しておくと便利です！
Appleが日本非居住開発者に代わって納税してくれるように規約が改定された

# はじめに
Appleから今朝こういうメールが届きました。

> To reflect the recent tax regulation changes in Japan that we announced in February, Exhibits B and C of the Paid Apps Agreement have been updated:
 
> Exhibit B: Added Japan to the list of regions where Apple collects and remits taxes on behalf of developers who do not reside in Japan.
> Exhibit C: Clarified that Section 5(A) no longer applies to developers who do not reside in Japan.

自分の理解を整理します。

# 1. Exhibits B and C の更新内容

> Exhibit B: Added Japan to the list of regions where Apple collects and remits taxes on behalf of developers who do not reside in Japan.

## 何が起こるのか？
Exhibit B には「Appleが税金を代わりに徴収して納税（remit）する地域のリスト」があり、今回そこに「日本」が加わりました。

## 誰に関係するのか？
「日本に居住していない開発者」が日本向けにアプリを配信している場合、Appleが日本で発生する消費税などを代わりに計算して徴収し、日本の税務当局に納税してくれるようになります。開発者本人が日本の税務手続きをする必要がなくなる、あるいは大幅に簡素化されるイメージです。

> Exhibit C: Clarified that Section 5(A) no longer applies to developers who do not reside in Japan.

## Section 5(A) とは何か？
Paid Apps Agreement のSection 5(A)は、一般的に各国の税務を開発者側が遵守し、必要に応じて納税・申告を行うといった規定が含まれます。

## どのように変わるのか？
今回の改訂で「日本に居住していない開発者には、Section 5(A)の日本関連の要件は適用されない」ことが明示されました。Appleが日本向けの税金を集めて納付するため、「日本非居住開発者」にとって、別途自力で税務申告などを行う必要は原則なくなると考えられます。

# 2. まとめと影響

## 日本非居住の開発者向け
従来、海外在住の開発者が日本向けにアプリを販売した場合、日本の消費税等について開発者自身で対応しなくてはならないケースがありました。しかし、今回の更新により、Appleが代理で徴収・納税してくれるため、開発者の手間が軽減されます。

## 日本居住の開発者向け
Exhibit BとCの文言変更は「日本に居住していない開発者」に関するものであり、日本国内在住の開発者には今回の改定自体は直接的には影響しません。ただし今後Appleの税務処理が変わる可能性もあるため、公式アナウンスを確認しておくことが望ましいでしょう。

## 実務的な注意点
Appleが自動的に税金を取り扱ってくれるとはいえ、各国の税制やAppleの取り扱いに関するドキュメントを確認し、自分自身の税務申告との重複がないかどうかを確認するのがベストプラクティスです。
エンジニア初心者の学習モデル

〜基礎 × 応用練習 × 実践 × 学習DB × 継続工夫で“学びを資産に”〜

## はじめに

僕が一番痛感したのはこれでした。

> 「学び方」こそがエンジニアの未来を左右する。

たくさんの技術を学ぶチャンスがあったものの、やみくもに詰め込んでも、後で忘れてしまっては意味がない。逆に、少しずつでも“身につく学び方”をしていれば、それは将来どんな技術に触れても応用できる土台になる。

この記事では、個人開発を通じて僕がたどり着いた「エンジニア初心者のための学習モデル」を紹介します。最初は基礎の反復から始まり、やがて実践で学びを爆発的に増やす仕組みに進化していきます。

## ステップ1：基礎の習得（Minimum Viable Knowledge）

まず大前提として、いきなり応用や実践にはいきません。やるべきは、

> 「薄く・広く・繰り返す」

### ① テキストの“トランスライト”で理解を深める

僕が実践して特に効果があったのが、

- テキストに書いてある内容を、自分の言葉で言い換えてみる

この「トランスライト」作業です。例えば、「関数とは？」という説明があったら、

> 関数＝何度も使える処理の箱、自分で名前をつけて呼び出せるもの

といった具合に、理解の確認と再構成を同時に行えます。

### ② 穴埋め・選択問題で記憶を固める

次に、「トランスライトした説明文」や「教科書内の重要語句」をもとに、穴埋め問題や選択問題を作成します（既存の資格教材を活用するのも◎）。

繰り返すことで記憶が定着し、忘却曲線を乗り越えられます。

### ③ 教材の練習問題で正答率を上げる

ある程度暗記ができたら、付属の練習問題を何周も解いて、正答率を上げていきます。

正答率の目安は「9割以上」。特に初学者は、“できた”実感を積むことで次のステップに進む自信になります。

💡 学習DBに記録する指標：

- 理解率（％）
- トランスライト済／未済
- 穴埋め／選択問題の正答率
- 教材練習問題の正答率
- ステータス（未学習／学習中／完了）


## ステップ2：応用練習（Practical Scenarios）

基礎を一通り押さえたら、今度は「どう使うか」の練習です。

> インプットした知識を、動かして、つまずいて、試行錯誤する段階へ。

### ① 基礎知識を使ったミニ課題に挑戦

例：
- 配列とループ →「ToDoリストを動的に表示」
- fetch＋API →「天気予報を取得して画面に表示」

教材や書籍の模写ではなく、「○○がしたいからこのコードを書く」状態を作ることがポイントです。

### ② 応用問題の正答率を記録・改善

演習に取り組んだ後は、

- 成功／失敗した割合
- 解法のパターン
- どの知識が役に立ったか

などを振り返り、DBに記録。

ここで“つまずいたこと”が後の実践に効いてきます。

💡 DBに記録する項目：
- 応用課題名
- 解答成功率
- 詰まりポイント・再学習すべき知識
- ステータス（未着手／演習中／理解済）


## ステップ3：実践での学び（Real Engineering）

ここが最大の山場。研修での開発演習や、個人開発が主戦場です。

> とにかく「学びの抽出数」を増やすこと。

### ① 個人開発が最強の教材になる

自分で企画して、実装して、動かして、困って、調べて…という全てが濃密な学習に。

Slack通知Botやタスク管理ツールなど、小さくてもいいから「自分の役に立つもの」を作ると学習意欲も続きます。

### ② 実践では技術・非技術の両方を学ぶ

例：
- トリガーが動かない → GASの仕様理解
- エラー処理で苦戦 → try-catchの重要性
- 他人に説明する必要がある → 説明スキルと論理構成

このように、実践では「開発スキル＋コミュニケーションスキル」が同時に育ちます。

💡 DB記録の型：
- プロジェクト名／目的
- 技術的学び（例：DOM操作／API制御）
- 非技術的学び（例：要件の言語化／仕様の整理）
- 再利用可能な知識 or コード


## ステップ4：繰り返しの仕組み（ループ設計）

ここまでで終わりじゃない。大事なのは、

> 「繰り返して育てる」

学習DBを活用し、以下のループを仕組み化します：

1. 理解率や正答率を定期チェック
2. 弱点を再演習 → 成長ログとして記録
3. 実践で再びその知識を使う

これにより、知識が“点”ではなく“線”でつながっていきます。


## +α：学びを長く残す6つの工夫視点

知識を「記憶に残し、活用し続ける」ために、以下の視点も忘れずに：

① 身体性：とにかく手で動かす・コードを書く・詰まって乗り越える
② 感情フック：楽しかった、悔しかった、嬉しかった経験を残す
③ ストーリーベース：どう詰まってどう解決したかを物語で残す
④ 習慣化：週1の振り返り／人に教える／Tipsをまとめる
⑤ 図解：構成図、データフロー図などで視覚的に理解する
⑥ タグとリマインダー：DBで分類＆1ヶ月後の再通知


## おわりに：学びを「再現可能な力」に変えるために

研修が終わったとき、「結局何を学んだっけ？」とならないように。

知識を、仕組みで、残し続ける。振り返って、活かし続ける。これが僕のたどり着いた「エンジニア初心者のベストな学び方」です。

- テキスト→トランスライト→問題演習→DB管理
- 応用課題→正答率記録→再演習
- 個人開発→学びの抽出→ナレッジ化

この流れを、ぜひ自分なりのやり方で回してみてください。学びは、繰り返すほどに“資産”になっていきます。
個人的備忘録：MySQLインストール時のGPGエラーとmysqldサービス未検出の対処法（AlmaLinux 9）

## はじめに
AlmaLinux 9 環境で MySQL 8.0 をインストールしようとした際、以下のような GPG 署名エラーと mysqld.service が見つからないというエラーが発生する場合があります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

## エラーメッセージの概要
```
Import of key(s) didn't help, wrong key(s)?
Public key for mysql-community-client-8.0.41-1.el9.aarch64.rpm is not installed.
...
Error: GPG check FAILED
...
Failed to start mysqld.service: Unit mysqld.service not found.
```

## 原因
- GPG鍵はインポートされたように見えても、MySQLのリポジトリが期待する鍵と一致していないことがあります。
- そのため、dnf がパッケージの署名を正しく検証できず、インストールが完了しない。
- インストールが完了していないため、mysqld.service も存在しない。

## 解決手順

### 1. GPG鍵の再インポート
まず、MySQL公式のGPG鍵を明示的に再インポートします。
```bash
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
```

### 2. 鍵の存在確認
正しくインポートされたか確認します：
```bash
rpm -qa gpg-pubkey
```

### 3. インストールの再試行
GPG検証をバイパスする方法（緊急時・テスト用）もありますが、可能であれば通常の手順で再インストールを試みます。
```bash
sudo dnf clean all
sudo dnf makecache
sudo dnf install mysql-community-server
```
それでも GPG エラーが出る場合、以下のように --nogpgcheck オプションを使って一時的に回避：
```bash
sudo dnf install --nogpgcheck mysql-community-server
```

### 4. mysqld サービスの起動確認
インストールが正常に完了すれば、mysqld サービスが有効になります。
```bash
sudo systemctl start mysqld
sudo systemctl enable mysqld
```
サービスの状態を確認：
```bash
sudo systemctl status mysqld
```

## まとめ
AlmaLinux 9 で MySQL をインストールする際の GPG 鍵関連の問題は、正しい鍵の再インポートとキャッシュの更新によって解決できる場合が多いです。***mysqld.service が見つからないエラーも、パッケージインストール失敗に起因するため、まずはGPG関連のエラー解消が重要です！***
個人的備忘録：VirtualBox上で動作するMySQLにホストOSから接続する方法を調べた話

## はじめに
開発環境としてVirtualBox上に構築したLinuxゲストにMySQLをインストールし、ホストOS（例：Mac）からMySQLへアクセスする場面がよくあります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、その手順を段階的に確認しながら、接続の可否を検証するためのポイントを備忘録としてまとめています。

---

## 書こうと思ったきっかけ
LaravelやWordPressなどのローカル開発環境をVirtualBox上で構築する中で、ホストからMySQLへ接続したいというケースがありました。しかし、初期設定のままでは接続エラーが頻発。その原因と解決策を整理しておきたく、記録として残すことにしました。

---

## 確認手順

### 1. MySQLが動いているか確認（ゲストOS内）
ゲストOSにログインし、MySQLが起動中かどうかを確認します。
```bash
systemctl status mysql
```
または
```bash
mysql -u root -p
```

---

### 2. MySQLの設定確認（my.cnf）
設定ファイル `/etc/mysql/my.cnf` または `/etc/my.cnf` を編集します。
```ini
bind-address = 0.0.0.0
```
※この設定により、MySQLが全てのIPアドレスからの接続を受け付けます。

変更後はMySQLを再起動します。
```bash
sudo systemctl restart mysql
```

---

### 3. ユーザーと権限の確認（MySQL側）
MySQLにログイン後、リモートからの接続を許可するユーザーを作成します。
```sql
CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
```

---

### 4. ポートフォワーディングの設定（VirtualBox）
VirtualBoxのVM設定画面から：

- 設定 → ネットワーク → アダプター1（NAT）→ 高度 → ポートフォワーディング

以下の内容でエントリを追加：

| 名前  | プロトコル | ホストIP   | ホストポート | ゲストIP     | ゲストポート |
|-------|------------|-------------|----------------|----------------|----------------|
| mysql | TCP        | 127.0.0.1   | 3306          | 10.0.2.15（※） | 3306          |

※ ゲストIPは、ゲストOS内で `ip a` コマンドなどで確認してください。

---

### 5. ホストOS（Mac）から接続テスト
```bash
mysql -h 127.0.0.1 -P 3306 -u your_user -p
```
→ パスワードを入力し、接続できれば成功です！

---

## まとめ
VirtualBox上のMySQLにホストから接続するには、MySQLの設定だけでなく、VirtualBoxのネットワーク設定やユーザー権限も適切に設定する必要があります。

問題が起きた際は、以下の順で確認していくのがおすすめです：
1. MySQLが起動しているか？
2. `bind-address` が正しく設定されているか？
3. ユーザーにリモート接続権限があるか？
4. VirtualBoxでポートフォワーディングされているか？

今後の開発環境構築時にも参考にできるよう、丁寧に検証して記録しておくことで、トラブル時の解決がスムーズになります！
実際の求人票を元にしたプログラミング言語ランキング【2025年4月】



サイト

https://flamevalue.hatenablog.com/


## 注意点

- プログラミング言語と言いつつ、IT技術全般が対象です
- 抽出元の求人サイトは careerJet というサイトです
- 年収、リモート率、求人数を含む5項目を指標とし、総合力を評価します
- 異論は認めます




###### Docker  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 614  <br>万円 / 年 |
| 上限年収 | 955  <br>万円 / 年 |
| フォロワー数(Qiita) | 60348 人 |
| リモート率 | 87 % |
| 求人件数 | 9219 件 |














###### Typescript  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 574  <br>万円 / 年 |
| 上限年収 | 831  <br>万円 / 年 |
| フォロワー数(Qiita) | 44683 人 |
| リモート率 | 68 % |
| 求人件数 | 11495 件 |









###### Ruby  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 508  <br>万円 / 年 |
| 上限年収 | 834  <br>万円 / 年 |
| フォロワー数(Qiita) | 72760 人 |
| リモート率 | 80 % |
| 求人件数 | 9784 件 |












###### Vue  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 489  <br>万円 / 年 |
| 上限年収 | 786  <br>万円 / 年 |
| フォロワー数(Qiita) | 31280 人 |
| リモート率 | 70 % |
| 求人件数 | 9340 件 |







###### Python  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 471  <br>万円 / 年 |
| 上限年収 | 746  <br>万円 / 年 |
| フォロワー数(Qiita) | 215888 人 |
| リモート率 | 70 % |
| 求人件数 | 30535 件 |










###### Javascript  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 481  <br>万円 / 年 |
| 上限年収 | 708  <br>万円 / 年 |
| フォロワー数(Qiita) | 184630 人 |
| リモート率 | 65 % |
| 求人件数 | 26406 件 |













###### React  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 581  <br>万円 / 年 |
| 上限年収 | 782  <br>万円 / 年 |
| フォロワー数(Qiita) | 50648 人 |
| リモート率 | 42 % |
| 求人件数 | 12336 件 |














###### Terraform  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 526  <br>万円 / 年 |
| 上限年収 | 856  <br>万円 / 年 |
| フォロワー数(Qiita) | 18417 人 |
| リモート率 | 69 % |
| 求人件数 | 3119 件 |













###### Scala  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 640  <br>万円 / 年 |
| 上限年収 | 781  <br>万円 / 年 |
| フォロワー数(Qiita) | 107268 人 |
| リモート率 | 82 % |
| 求人件数 | 1118 件 |













###### Azure  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 573  <br>万円 / 年 |
| 上限年収 | 767  <br>万円 / 年 |
| フォロワー数(Qiita) | 4438 人 |
| リモート率 | 77 % |
| 求人件数 | 18453 件 |














###### Cloudformation  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 512  <br>万円 / 年 |
| 上限年収 | 870  <br>万円 / 年 |
| フォロワー数(Qiita) | 215888 人 |
| リモート率 | 70 % |
| 求人件数 | 837 件 |











###### PHP  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 434  <br>万円 / 年 |
| 上限年収 | 551  <br>万円 / 年 |
| フォロワー数(Qiita) | 89068 人 |
| リモート率 | 57 % |
| 求人件数 | 22700 件 |











###### Nginx  
★★★★☆

|     |     |
| --- | --- |
| 下限年収 | 521  <br>万円 / 年 |
| 上限年収 | 844  <br>万円 / 年 |
| フォロワー数(Qiita) | 22534 人 |
| リモート率 | 58 % |
| 求人件数 | 2070 件 |



## その他

https://flamevalue.hatenablog.com/
個人的備忘録：AlmaLinux 9にMySQL 8.0をインストールしようとして失敗したので、GPGキーを手動でインポートした話

## はじめに
この備忘録では、AlmaLinux 9 に MySQL 8.0 をインストールしようとした際に発生したエラーと、その解決までの流れを記録しています。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

GPG署名の不一致やリポジトリ設定ミスが原因でしたが、手順を整理することで次回以降のトラブルを回避できるようにまとめています。

---

## 問題の発生

MySQL 8.0 をインストールしようとした際に、以下のようなエラーが発生しました。

```
Error: GPG check FAILED
Public key for mysql-community-server-8.0.41-1.el9.aarch64.rpm is not installed.
```

さらに、サービスの起動確認で以下のエラー：

```
Failed to start mysqld.service: Unit mysqld.service not found.
```

パッケージが正しくインストールされておらず、結果的に mysqld サービスも存在していない状態でした。

---

## 原因の考察

- GPGキーのインポートは成功と表示されていたが、実際のパッケージ署名と一致していなかった可能性
- MySQLのリポジトリやGPGキーが古かった、あるいは間違っていた

---

## 解決手順

### 1. 正しいGPGキーを手動でインポート
```
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
```

### 2. リポジトリを正しく設定
```
sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm
sudo dnf clean all
sudo dnf makecache
```

### 3. MySQLのインストール
```
sudo dnf install mysql-community-server
```

### 4. サービスの起動と自動起動設定
```
sudo systemctl enable --now mysqld
```

---

## 補足

- `dnf clean packages` を使って、キャッシュされた破損パッケージの削除が有効な場合があります
- リポジトリファイルが壊れている可能性がある場合、`/etc/yum.repos.d/` 配下の MySQL 関連 `.repo` ファイルを削除して再設定するとよいです

---

## まとめ

AlmaLinux 9で MySQL 8.0 をインストールする際に「GPG check FAILED」が出た場合、焦らず以下を確認することが重要です：

- GPGキーが最新であり、正しいものが使われているか
- リポジトリ設定が MySQL 公式のものか

**この経験を通じて、RPMパッケージのGPG署名チェックの仕組みや、リポジトリ管理の重要性を理解する良い機会となりました。**

次回以降はこの備忘録を活用して、よりスムーズにセットアップできるようにしたいと思います
AIエージェント時代のUX：フレンドリーの対象の変化とHITL(human in the Loop)

## 記事の概要
かつて人間中心であったUX（ユーザーエクスペリエンス）は、生成AI、特に自律的に動くAIエージェントの登場により、新たな局面を迎えています。これからは、人間だけでなくAIエージェントにとっても「フレンドリー」な設計が求められるようになるでしょう。本記事では、AIエージェントだけで完結できない状況を想定し、その中で重要となるヒューマン・イン・ザ・ループ（HITL）の概念と、HITLにおけるUXの役割について考察します。



## UXの進化：ユーザフレンドリーからAIエージェントフレンドリーへ
スマートフォンの普及やWebサービスの多様化とともに、UXは私たちの生活に欠かせない概念となりました。直感的で使いやすいインターフェース、心地よい操作感など、「ユーザフレンドリー」な体験を提供することがUXデザインの中心的な目標でした。

しかし、近年、自然言語処理能力や推論能力が飛躍的に向上した生成AIが登場し、私たちの働き方や生活様式に大きな変化をもたらしつつあります。特に、与えられた目標に向けて自律的にタスクを実行するAIエージェントの進化は、UXの対象を広げる必要性を生み出しています。

これからのUXは、人間が直接利用する際の使いやすさ（ユーザフレンドリー）に加えて、AIエージェントがタスクを円滑に実行するための設計（AIエージェントフレンドリー）も考慮しなければなりません。例えば、AIエージェントが理解しやすい明確な指示の形式、AIエージェントがアクセスしやすい構造化されたデータ(JSON)などが重要になります。

これらを満たす、標準化されつつあるModel Context Protocal(MCP)をサポートしたインターフェースの提供するなどは、必須になってきます。

## AIエージェントだけで完結できない局面とHITLの必要性
高度なAIエージェントであっても、すべての状況に単独で対応できるわけではありません。複雑な判断が求められる場面、倫理的な配慮が必要な場面、創造性や共感性が求められる場面など、人間の介入が必要となるケースが想定されます。

このような「AIエージェントだけで完結できない局面」において、注目されるのがヒューマン・イン・ザ・ループ（HITL）という考え方です。HITLとは、AIによる自動化されたプロセスの中に、人間の判断や介入を意図的に組み込むアプローチのこと。AIの処理結果を人間が確認したり、AIが判断に迷う場合に人間が指示を与えたりすることで、システムの信頼性、安全性、倫理性を高めることができます。

## HITL(human in the loop)におけるUXの役割：AIと人間の協調をデザインする
HITLのプロセスを効果的に機能させるためには、優れたUXデザインが不可欠です。人間のオペレーターがAIシステムとスムーズに連携し、必要な時に適切な介入を行うためには、以下のような要素が重要となります。

 状況の透明性: AIエージェントが現在どのような状況にあり、どのような情報を基に判断を進めているのかを、人間が分かりやすく把握できるインターフェース。

 適切な介入タイミングの提示: 人間の介入が必要となる可能性が高い状況をAIが検知し、オペレーターに適切に通知する仕組み。電子稟議システムなどに接続して、生成結果に関して＾、承認を得るような構造も想定されます。

 直感的で容易な操作性: オペレーターが迅速かつ正確にAIエージェントに指示を与えたり、AIの判断を修正したりするための、シンプルで使いやすい操作性。

 AIとの協調を促すデザイン: 人間とAIエージェントがそれぞれの得意分野を活かし、協力してタスクを達成できるようなワークフローとインターフェース。

フィードバックループの構築: 人間の介入や修正がAIの学習データとして活用され、システム全体の精度向上に繋がる仕組み。

## まとめ
 AIエージェントの進化は、UXデザインに新たな視点をもたらしています。これからは、ユーザフレンドリーであると同時に、AIエージェントフレンドリーな設計が求められます。そして、AIエージェントだけで完結できない局面においては、HITLの考え方をUXに組み込むことで、AIと人間が協調し、より良い成果を生み出すための基盤を築くことができます。今後のUXデザイナーは、AI技術を深く理解し、人間とAIのより良い関係性をデザインしていくことが重要となるでしょう。



## 関連する技術情報のリスト
 - 自然言語処理 (NLP): AIエージェントが人間の言葉を理解し、生成するための基盤技術。

- 機械学習 (Machine Learning): AIエージェントが経験から学習し、性能を向上させるための技術。

- 強化学習 (Reinforcement Learning): AIエージェントが試行錯誤を通じて最適な行動戦略を獲得するための技術。

- エージェント指向プログラミング (Agent-Oriented Programming): 自律的に行動するエージェントとしてシステムを構築するパラダイム。

- 認知科学 (Cognitive Science): 人間の認知プロセスを理解し、より人間中心なAIシステムを設計するための学問分野。

- HCI (Human-Computer Interaction): 人間とコンピュータのインタラクションを研究し、使いやすいインターフェースを設計するための学問分野。

- 説明可能なAI (Explainable AI, XAI): AIの判断根拠を人間が理解できるようにするための技術。HITLにおける信頼性向上に貢献。
個人的備忘録：MySQLエラー「Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server」について

## はじめに
MySQLに外部から接続しようとした際、アクセスが拒否される「Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server」というエラーが表示されることがあります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、その原因と対処法について、自分用に整理します。

---

## 書こうと思ったきっかけ
Docker環境や外部ネットワークからMySQLにアクセスしようとしたときに、何度かこのエラーに遭遇。毎回ググって解決するのが手間だったため、手順とポイントを備忘録としてまとめておくことにしました。

---

## 実際のエラーメッセージ
```
mysql.connector.errors.DatabaseError: 1130: Host 'xxx.xxx.xxx.xxx' is not allowed to connect to this MySQL server
```

このエラーは、指定したホスト（IPアドレス）からの接続がMySQLサーバーに許可されていないことを意味します。

---

## 解決方法

### 方法1: MySQL にホストを許可する
MySQLユーザーに特定のホストからの接続を許可するSQLコマンドを実行します。

```sql
-- 'myuser' というユーザーに外部ホストからの接続を許可
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
```

#### すべてのホストを許可する場合（非推奨）
```sql
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
```

> ※ セキュリティ上、'%'での全開放は避け、必要なIPだけを許可することが望ましいです。

---

### 方法2: MySQL の設定ファイルの確認
`my.cnf`の `bind-address` を確認。

```ini
[mysqld]
bind-address = 0.0.0.0  # 全てのアドレスからの接続を許可
```

設定変更後は、MySQLを再起動します：
```bash
sudo systemctl restart mysql
```

---

### 方法3: Docker環境での接続確認
Docker Composeで構築している場合、ホスト名にはコンテナのサービス名を指定する必要があります。

```python
mysql.connector.connect(
    host='db',  # サービス名で指定
    user='myuser',
    password='your_password',
    database='mydatabase'
)
```

> Dockerネットワークでは、サービス名がDNS名として使用されます。

---

## セキュリティの注意点
- `%` での全開放はなるべく避け、IP制限を活用する
- パスワードは強力なものを使う
- 不要なユーザー・権限は削除しておく

---

## まとめ
MySQLの1130エラーは、接続元IPや設定ファイル、ユーザー定義など複数の要因が絡み合って発生します。焦らず、順を追って設定を確認することでスムーズに解決できます。

本記事を自分用のチェックリストとして活用し、今後の環境構築の効率化に役立てていきます！
統計検定1級　2022　統計数理　問2　解説

![img20250331_08541358.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/9650e266-7830-4c55-ba6e-bebf84cf98c5.jpeg)
![img20250331_08552743.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/fd91e96c-5c2c-4f82-86e7-ea736d35f270.jpeg)
![img20250331_08563009.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/d9fa930e-cbd3-46d9-a81c-d33baf0a82da.jpeg)
![img20250331_08570275.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/9ea35a89-ae2f-4967-8d87-4dfd1bdd1553.jpeg)
![img20250331_08573736.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/02242337-ebe7-4ed2-a985-8c48ad6dc6da.jpeg)
memo

https://kyonta1022.hatenablog.com/entry/2018/09/09/221327#BadStore%E3%81%AEiso%E3%82%92%E3%83%80%E3%82%A6%E3%83%B3%E3%83%AD%E3%83%BC%E3%83%89


https://www.slideshare.net/slideshow/burpsuitejapanburp-suite-76430995/76430995


![C7EE7AFA-0D45-430F-AA7F-EF487E3C8048.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/93128148-3a3f-4811-9f93-56c60ceee4ee.jpeg)

![スクリーンショット 2025-04-04 071135.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/ce43e7c2-965f-42a8-b5e4-fc038b426a0f.png)

![スクリーンショット 2025-04-04 071225.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/2eb9960b-3e33-46a4-aa1f-cfefdacf778d.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3477527/67666e12-d65b-43ba-8337-7770020f213f.png)