OmniAICreator/Qiita-1.07M huggingface dataset:
CUDA×CTranslate2の不具合解消

文字起こしアプリケーションの作成時に発生した不具合が解消できたため、一部内容を共有します。

### アプリケーション概要
faster-whisperを使用した文字起こしのアプリケーションを実装しました。

### 設計詳細
文字起こしを実施する時はGPUを活用したいため、CUDAを導入することにした。

### 開発環境
ubunt22.04のdocker環境

### エラーメッセージ
Unable to load any of {libcudnn_cnn.so.9.1.0, libcudnn_cnn.so.9.1, libcudnn_cnn.so.9, libcudnn_cnn.so}
Invalid handle. Cannot load symbol cudnnCreateConvolutionDescriptor

### エラー解消の方法
ライブラリのバージョンを指定して解消
CUDA:12.0.0
ctranslate2==4.5.0
torch==2.5.1
torchvision==0.19.1
torchaudio==2.5.1

### 参考サイト
以下のissuesが参考になりました。
調べてみるとCUDA×CTranslate2は結構不具合があるようですので
色々と試行錯誤をしてアプリケーションが動くようになりました。

各種ライブラリに関する内容
https://github.com/SYSTRAN/faster-whisper/issues/1086

ctranslate2==4.5.0を推奨していた内容
https://github.com/m-bain/whisperX/issues/902
【応用情報】リスク洗い出し技法

## はじめに
　リスク洗い出し技法について、まとめてみました。

## チェックリスト分析
　過去の類似プロジェクトやその他の情報源から得た情報を基に作成されるリスクの一覧をリスク識別チェックリストといい、これを基にプロジェクトにおけるリスクを特定する方法。

## インタビュー
　類似プロジェクトの経験者や経験が豊富なプロジェクトマネジャなどへの質疑応答によってリスクを特定する方法。

## デルファイ法
　複数の専門家からの意見収集、得られた意見の統計的集約、集約された意見のフィードバックを繰り返して、最終的に意見の収束を図る技法。

## ブレーンストーミング
　プロジェクトチームや関係者を一つの場所に集め、進行役の下、参加者全員にリスクに関する意見を自由に出してもらうという手法。出された意見の評価や批判をしないのが特徴。

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

## 参考文献
令和06-07年 応用情報技術者 試験によくでる問題集【午後】 単行本（ソフトカバー） – 2024/3/22
大滝 みや子 (著)
p.582
【Power Apps】メニューバーのカスタムコンポーネントを作成してみる！

# カスタムコンポーネントとは？？
Power Appsのカスタムコンポーネントとは、アプリ内で再利用できる
UI パーツや機能を作成し複数のアプリや画面で活用できる仕組みです。
カスタムコンポーネントを作成することで、開発効率を向上させたり
デザインの統一を図ることができます。

## 今回作成するカスタムコンポーネント:globe_with_meridians:
アプリを作成するときに
別画面に遷移しても共通で使用したいパーツがあったりしますよね？
画面を作成するたびにコピーで配置したり、作成し直すのは手間なので
あらかじめパーツを作ってしまい、複数画面で再利用できると手間が省けてかなり便利になります！

今回は使用頻度が多そうな **メニューバー** をカスタムコンポーネントで作成したいと思います！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/20af523e-0223-455e-8d50-f376a3d3f414.png)

## カスタムコンポーネントを使用するメリット
+ **開発効率の向上**
一度作成したコンポーネントを複数のアプリや画面で
使い回せるため開発時間を短縮できます。

+ **UI/UXの統一と品質向上**
カスタムコンポーネントを活用すると **統一感のあるデザイン** を簡単に実現できます。

+ **保守性の向上**
カスタムコンポーネントを使うことで、修正や機能追加が **一括で管理** できるようになります。
1か所変更を行うだけで全画面やアプリに適応されるため非常に便利です。

## カスタムコンポーネントの作成方法:dizzy:
+ Power Appsを開いて左側のツリービューから
[コンポーネント] > [+新しいコンポーネント] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/d68f7599-1123-46cb-85a5-310fc016ca6c.png)

+ 必要なコントロールを配置して
コンポーネント自体のサイズを使いたいサイズに変更します。

+ 今回はアプリの幅いっぱいにして、高さは 70 に設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/5bea722e-5d4c-4797-a19b-cea0fa84ce75.png)

Container の Height と Widh はそれぞれ親プロパティのサイズに設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/9b808af2-a38c-4ffa-8437-a4d5fae6f318.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/0eb16cb1-3a56-4694-8ca5-592ea0f985e9.png)

+ 必要なコントロールが配置できたらカスタムコンポーネントは作成完了です。
この画面にカスタムコンポーネントを配置したいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f5dbf1c4-b646-495a-acff-2f49e7d8d953.png)

+ アプリ作成画面に戻りカスタムコンポーネントを配置したい画面で
[+挿入 > [カスタム] > [作成したカスタムコンポーネントの名前] を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/e643413d-b547-4d47-9d2c-47162b83a4ae.png)

+ 作成したカスタムコンポーネントが配置されるので配置は好きなところに設定してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/9acca4e6-dc05-40a5-8c04-1f3e331a8da0.png)

:::note info
カスタムコンポーネント内の設定を変更したい場合は
画面上での設定変更は不可能です。
最初に作成した **コンポーネント** から変更を行ってください。
:::

## カスタムコンポーネントを修正してみる
このカスタムコンポーネントの背景色を変更してみましょう。
変更する箇所は画面のプロパティではなくコンポーネント作成画面から変更を行います。

コンテナーのプロパティから背景色を変更してみましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/ce068c54-9b4f-464d-b0ce-ae35cba2fd8c.png)

コンポーネント画面で背景色が変更されました。
では、先ほど画面に配置したカスタムコンポーネントを見に行きましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/6638d97e-9c36-4a8f-9952-4fcfca06073f.png)

こちらの画面にも自動で修正が反映されていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/198fe2db-da18-4461-852a-95f00d7222c4.png)


### まとめ
Power Apps のカスタムコンポーネントを活用することで、
開発効率の向上・UI/UXの統一・保守性の向上など、多くのメリットを得られます。

カスタムコンポーネントを活用することで、
**「同じ機能を何度も作る手間を省く」**
**「デザインを統一して使いやすいアプリを作る」**
**「アプリの保守・運用を簡単にする」** 
ことができます。

業務効率化や開発スピード向上のために
ぜひカスタムコンポーネントを活用してみてください:bulb:
Https化の手順メモ

VPSでの個人開発でのHTTPS化した際の手順のメモになります。

Let’s Encryptが無料で使えるとのことなので、今回は、それを使用しました。以下のコマンドは、Ubuntu環境で、Apacheの手順です。

手順①
sudo apt update
sudo apt install certbot python3-certbot-apache

手順②
sudo certbot --apache

ここで、ドメインを入力する。

手順③
sudo certbot renew --dry-run

ここで、証明書の有効期限を自動更新に設定する

手順④
sudo ufw allow "Apache Full"
sudo ufw reload

ここで、443ポートの通信を許可します。（もともと許可されていることもあるみたい。）

これで、HTTPS通信ができました。　みなさんのなにかお力になれば幸いです。

今日は、ここまで。
Spring Boot ＋Docker 環境改善

# Spring Boot + Docker環境の問題を改善してみる

前回の記事では、とりあえず動く状態のバックエンド環境を構築しましたが、  
実際に使ってみると、いくつか不便に感じる点がありました。

そこで今回は、前回の記事で挙げた課題を改善しながら、  
より快適に開発できる環境を目指して取り組んだ内容をまとめました。

Docker や Spring Boot にはまだ不慣れな部分もありますが、  
今後の自分が見返せるように、備忘録として記録しておきます。

---

## 🧩 今回対応した課題

- Javaコードの修正を反映させるたびに毎回ビルドが必要
- ログが見づらく、Docker が正しく起動しているか分かりにくい
- コンテナ起動時にエラーが発生すると再起動ループに陥る

---

## 🔄 対応内容まとめ

### ✅ 1. Spring DevTools によるホットリロード対応

まず、Javaコードを修正するたびに手動でビルドしなければならない点を改善しました。  
以下の記事を参考に、ホットリロードが効くように設定を行いました。

https://qiita.com/kohei_sasaki/items/93b32177df46b4c450f3

#### 使用した依存関係

```groovy:build.gradle
dependencies {
    developmentOnly 'org.springframework.boot:spring-boot-devtools'
}
```

#### application.properties の追記

デバッグモードではデフォルトで有効らしいですが、明示的に以下を追記しておきます。

```properties:application.properties
spring.devtools.restart.enabled=true
```

---

### ✅ 2. Dockerfile の修正

ホットリロードの効果を Docker 環境でも活かすために、Dockerfile を以下のように修正しました。

```dockerfile:Dockerfile
FROM openjdk:17-jdk-slim

# 作業ディレクトリ作成
WORKDIR /app

# ビルド関連ファイルを先にコピーして依存取得
COPY build.gradle settings.gradle gradlew /app/
COPY gradle /app/gradle

# 依存だけ先にダウンロードしてキャッシュを効かせる
RUN ./gradlew build --no-daemon || return 0

# アプリケーションのソースコードを追加
COPY . /app

# DevTools を有効にして Spring Boot 起動
CMD ["./gradlew", "bootRun", "--no-daemon"]
```

---

### ✅ 3. docker-compose.yml の修正

```yaml:docker-compose.yml
services:
  backend:
    build:
      context: ./backend
      dockerfile: Dockerfile
    ports:
      - "8080:8080"
    volumes:
      - ./backend:/app  # ホストのソースコードをマウントして即時反映
      - ~/.gradle:/home/gradle/.gradle  # Gradle のキャッシュ共有（ビルド高速化）
    environment:
      - SPRING_DEVTOOLS_REMOTE_SECRET=secret
      - SPRING_OUTPUT_ANSI_ENABLED=ALWAYS
    depends_on:
      - db
    restart: "no"  # 起動失敗時に再起動を抑止
```

📌 **volumes** を活用することで、ホスト側のコード変更が即コンテナに反映されるようになりました。

---

### ✅ 4. 起動成功ログの明示

Docker が起動したかどうか分かりにくいという課題に対し、  
Spring Boot アプリが正常に起動したタイミングでログを出力するようにしました。

```java:StartupLogger
package com.example.backend.config;

import jakarta.annotation.PostConstruct;
import org.springframework.stereotype.Component;

@Component
public class StartupLogger {

    @PostConstruct
    public void logStartupMessage() {
        System.out.println("✅ Spring Boot アプリが正常に起動しました");
    }
}
```

📢 これにより、起動成功が一目で分かるようになりました。

---

### ✅ 5. application.properties のログ設定

ログが多すぎて起動成功かどうかが見えにくかったので、最低限のログが出るように調整しました。

```properties
# ログレベル調整
logging.level.root=ERROR
logging.level.org.springframework.boot=INFO
logging.level.org.hibernate=ERROR
```

📉 不要なログを抑えることで、必要な情報が見やすくなりました。

---

### ✅ 6. 再起動ループの防止

アプリケーション起動に失敗したとき、Docker コンテナが自動で再起動してしまい、  
原因のログが流れてしまうケースがありました。

そこで開発中は以下のようにして、再起動を防止するようにしました。

```yaml
restart: "no"
```

---

## 💥 改善後の開発体験

| Before | After |
|--------|-------|
| Java ファイル修正ごとにビルドが必要 | 自動で再起動され、すぐ反映される！ |
| ログが大量で起動状況が分からない | 起動成功ログが明示的で分かりやすい |
| 再起動ループでログが追えない | 再起動抑止により原因が特定しやすく |

---

## 🎯 最後に

ここまで読んでいただき、ありがとうございました！

前回は「とりあえず動く環境」を作ることが目的でしたが、  
今回は「快適に開発できる環境」を目指して改善を行いました。

特にホットリロードとログ周りの改善によって、開発効率がだいぶ上がったと感じています。  
とはいえ、まだ理想の環境とは言えないので、今後も少しずつ整えていけたらと思います。

---
次回は、**フロントエンド環境の構築**や**CI/CDの導入**などにも
チャレンジしていきたいと考えています。  

ご意見・ご感想などありましたら、コメントでぜひ教えてください 🙌
ローカルのDifyでOllamaを動かす手順

## 環境

Ubuntu20.4　(Windows10 + Vagrant)

## はじめに

ローカルのDifyでOllamaを動かす手順になります。LLMの容量はCPUで動かすために軽量化されているといえ、結構なストレージの容量が必要です。動作させるにも割と結構なメモリ容量が必要になります。

日本語に特化した国産LLMを動かしたい、リリースしたばかりの、今話題のあのLLMを動かしたい、といった場合はローカル環境でLLMを動かすことができます。

環境を整備するのはローカルのゲストOSのUbuntuですが、DifyはWindowsでブラウザを使って動作させることになります。

参考記事
https://zenn.dev/shintaroamaike/articles/8a63bdb7dad992

## 手順

環境を構築するのは結構大変です。大きく下記の４手順を踏みます。

#### 1. Dockerをインストール
Dockerのインストール手順
https://qiita.com/pyon_kiti_jp/items/04737fed9c108a6e4573

#### 2. Difyのローカルインストール
Difyのローカルインストール手順
https://qiita.com/pyon_kiti_jp/items/0652a81333591ddd28ee

#### 3. Ollamaのインストール
Ollamaのインストール手順
https://qiita.com/pyon_kiti_jp/items/adb522b1363c82d99c8f

#### 4. DifyにOllamaを追加する
DifyにOllamaを追加する手順
https://qiita.com/pyon_kiti_jp/items/8f7b88c937769a30b0d9
【応用情報】言語プロセッサとは

## 言語プロセッサ
　テキストエディタなどで記述されたプログラムは、そのままではコンピュータ上で実行出来ないので、何らかの処理を行い、実行出来るようにする。これを行うプログラムを総称して、**言語プロセッサ**という。

### 主要な言語プロセッサ
**・アセンブラ**
　アセンブリ言語で記述されたプログラムを機械語に翻訳する。

**・コンパイラ**
　高水準言語で記述されたプログラムをコンパイル（翻訳）し、機械語の目的プログラムを生成する。**高水準言語**とは、コンピュータアーキテクチャに依存することがなく、人間の思考に近い形の文や数式でプログラムの記述が出来るプログラム言語のこと。

**・インタプリタ**
　プログラムの命令を1つずつ解釈し、その都度翻訳しながらプログラムを実行する。

**・プリプロセッサ**
　ある高水準言語で記述されたプログラムを別の高水準言語のプログラムに変換する。あるいは、高水準言語に付加的に定義され、記述された命令をもとに高水準言語だけを使用したプログラムに変換する。

　なお、コンパイラには、現在使用しているコンピュータ、あるいは同じアーキテクチャのコンピュータ上で実行出来る目的プログラムを生成する**セルフコンパイラ**と、異なるアーキテクチャの（命令形式が異なる）コンピュータ用の目的プログラムを生成する**クロスコンパイラ**の2種類がある。

【参考1】
　翻訳（変換）されるもととなるプログラムを**原始プログラム、ソースプログラム**という。

【参考2】
　ソフトウェアを実行する機器と同一の機器で開発を行うことを**セルフ開発**という。これに対して、例えば、携帯電話用のプログラムをパソコン上で開発するなど、実行する機器とは異なる開発専用の機器で開発を行うことを**クロス開発**という。

### その他の言語プロセッサ
**ジェネレータ（生成系）**
　**ジェネレータ**は、手続を記述しなくても処理条件となる入力、処理、出力に関する引数（パラメータ）を指定するだけで自動的にプログラムを生成する言語プロセッサである。UNIX系の字句解析ツールであるLexや構文解析ツールYaccも、ジェネレータに分類される。

**シミュレータ（実行系）**
　**シミュレータ**は、他のコンピュータ用のプログラムの命令を解読しながら実行する言語プロセッサで、これをハードウェア（マイクロプログラム）で行うものを**エミュレータ**という。シミュレータは、開発用のコンピュータにおいて、ターゲットコンピュータ上の動きをソフト的に再現するだけであるが、エミュレータは内部動作までも模擬的に再現する。


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

## 参考文献
令和02年 【春期】【秋期】 応用情報技術者 合格教本 単行本（ソフトカバー） – 2019/12/25
大滝 みや子 (著), 岡嶋 裕史 (著)
p.262,263
Hello Qiita!


# Me Interested

## 設計思想・構造系
- UML  
- クラス図  
- シーケンス図  
- 責務  
- 依存性逆転  
- SOLID原則  
- カプセル化  
- 集約ルート  
- 関心の分離（Separation of Concerns）  
- 再利用性  
- 継承と委譲  
- トランザクション境界  
- 状態遷移図

## アーキテクチャ系
- MVC  
- MVVM  
- MVP  
- クリーンアーキテクチャ  
- Onion Architecture  
- Hexagonal（Ports and Adapters）  
- レイヤードアーキテクチャ  
- DI（依存性注入）  
- Service Locator  
- リポジトリパターン  
- ユースケース  
- インタフェース分離

## 言語・実装文脈
- C#  
- WPF  
- XAML  
- .NET  
- ObservableCollection  
- ICommand  
- DataBinding  
- ラムダ式  
- LINQ  
- コンポーネント指向  
- イベントバブリング  
- 通知プロパティ（INotifyPropertyChanged）

## DDD/設計ドメイン系
- ドメインモデル  
- エンティティ／値オブジェクト  
- ファクトリ  
- アグリゲート  
- ユビキタス言語  
- ドメインサービス  
- アプリケーションサービス  
- バウンデッドコンテキスト  
- イベントソーシング  
- CQRS

## UI/UXまわり（設計寄り）
- UIスレッド  
- ユーザー導線  
- フォーカス制御  
- マテリアルデザイン  
- 入力補完  
- エラーメッセージ設計  
- 状態管理  
- トグルボタン  
- アニメーションタイミング  
- ユーザー視線誘導

## 開発プロセス：要件定義フェーズ
- ユースケース定義  
- 機能一覧作成  
- ペルソナ設定  
- ジャーニーマップ  
- ステークホルダー整理  
- 要件の優先度付け（MoSCoW法など）  
- スコープ管理  
- 非機能要件（パフォーマンス／セキュリティ）

## 開発プロセス：設計フェーズ
- UIフロー／画面遷移図  
- ワイヤーフレーム  
- モデル設計（ER図／データ構造）  
- コンポーネント設計  
- アーキテクチャ選定  
- 責務分離  
- 依存関係マッピング  
- 設計ドキュメント（設計書）

## 開発プロセス：実装フェーズ
- バージョン管理（Git）  
- コミット粒度  
- 開発ブランチ戦略（GitFlow／GitHub Flow）  
- コードレビュー  
- Lint／静的解析  
- ロギング戦略  
- フロントエンド／バックエンド連携（API契約）  
- CI／CD（継続的インテグレーション・デリバリー）

## 開発プロセス：テスト・検証フェーズ
- 単体テスト／結合テスト  
- E2Eテスト  
- テストケース設計  
- モック／スタブ  
- カバレッジ測定  
- ユーザビリティテスト  
- リグレッションテスト  
- QA対応

## 開発プロセス：リリース・運用フェーズ
- デプロイ設計（Blue/Green, Canary）  
- フィードバックループ（UX向上）  
- エラートラッキング（Sentryなど）  
- モニタリング（Prometheus／Grafana）  
- アップデート計画  
- カスタマーサポート連携  
- 障害対応フロー  
- SLA／SLO
DNS、CDNサービスの詳細解説(七)



# ビュー機能を活用したスマートDNSの実装ガイド

## 1. スマートDNSとGSLBの基本概念

### 1.1 グローバルサーバーロードバランシング（GSLB）
地理的に分散したサーバー群へ最適なルーティングを行う技術  
**主な特徴**：
- ユーザーの位置情報に基づいた最適サーバー選択
- レイテンシの最小化
- 障害発生時の自動フェイルオーバー

### 1.2 CDNの動作原理

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/9a7fc40c-be4b-46ee-a37e-27a4f30f8fdf.png)



1. ユーザーがDNSにクエリ
2. CNAMEレコードでCDNプロバイダにリダイレクト
3. 最適エッジサーバーを選択
4. コンテンツをキャッシュまたはオリジンサーバーから取得

## 2. BINDの高度な機能

### 2.1 アクセス制御リスト（ACL）
```bind
acl internal-net {
    10.0.0.0/24;
    172.16.0.0/16;
};
```

**主な用途**：
- クエリ許可リストの定義
- ゾーン転送の制御
- ビューによる条件分岐

### 2.2 ビュー機能の基本構成
```bind
view "view-name" {
    match-clients { acl-name; };
    recursion yes;
    zone "example.com" {
        type master;
        file "example.com.zone.internal";
    };
};
```

## 3. 実践的な設定例：拠点別ルーティング

### 3.1 ネットワークトポロジー
| 拠点   | ネットワーク      | 対象Webサーバー |
|--------|------------------|-----------------|
| 東京   | 10.0.0.0/24      | 10.0.0.7        |
| 大阪   | 172.16.0.0/16    | 172.16.0.7      |

### 3.2 メイン設定ファイル
```bind
acl tokyo-net { 10.0.0.0/24; };
acl osaka-net { 172.16.0.0/16; };

view "tokyo-view" {
    match-clients { tokyo-net; };
    zone "example.com" {
        type master;
        file "example.com.zone.tokyo";
    };
};

view "osaka-view" {
    match-clients { osaka-net; };
    zone "example.com" {
        type master;
        file "example.com.zone.osaka";
    };
};
```

### 3.3 ゾーンファイル例（東京）
```bind
$TTL 1D
@   IN SOA  ns1.example.com. admin.example.com. (
    2023082101
    3H
    15M
    1W
    1D )
    NS  ns1
www IN A 10.0.0.7
```

### 3.4 動作検証
```bash
# 東京拠点からのクエリ
dig @dns-server www.example.com +short
# 期待結果: 10.0.0.7

# 大阪拠点からのクエリ
dig @dns-server www.example.com +short
# 期待結果: 172.16.0.7
```

## 4. 高度な設定テクニック

### 4.1 フェイルオーバー構成
```bind
view "backup-view" {
    match-clients { !tokyo-net; !osaka-net; };
    zone "example.com" {
        type forward;
        forwarders { 8.8.8.8; };
    };
};
```

### 4.2 ロードバランシング
```bind
www IN A 10.0.0.71
www IN A 10.0.0.72
www IN A 10.0.0.73
```

## 5. 重要注意事項

1. **ビューの順序管理**  
   マッチングは上から順に行われるため、より具体的な条件を上位に配置

2. **再帰問い合わせの制限**  
   適切なACLでrecursionを制限し、DNS増幅攻撃を防止

3. **ログ管理の強化**  
   ビュー別にログを分割し、監視を容易に

```bind
logging {
    channel tokyo-log {
        file "/var/log/named/tokyo.log";
        severity debug 3;
    };
    channel osaka-log {
        file "/var/log/named/osaka.log";
        severity debug 3;
    };
    category queries {
        tokyo-log; 
        osaka-log;
    };
};
```

## 6. パフォーマンス最適化

### 6.1 キャッシュチューニング
```bind
options {
    max-cache-size 1G;
    max-cache-ttl 3600;  // 1時間
    min-cache-ttl 300;   // 5分
};
```

### 6.2 スレッドプール設定
```bind
options {
    listen-on port 53 { any; };
    coresize default;
    max-recursive-queries 5000;
    recursive-clients 10000;
};
```

## 7. セキュリティ強化策

### 7.1 DNSSECの実装
```bind
dnssec-enable yes;
dnssec-validation yes;
dnssec-lookaside auto;
```

### 7.2 レスポンスレートリミッティング
```bind
rate-limit {
    responses-per-second 100;
    window 15;
};
```
WSL2上のVS CodeでAWS MCPを使ってみる

:::note warn
2025/4/8時点の情報です
:::

# 環境
- wsl 2.2.4.0
- VS Code 1.99.0

# 事前準備
### uvのインストール
pythonのパッケージマネージャーをインストールします。
[公式](https://docs.astral.sh/uv/getting-started/installation/ )を参考に、WSL上でコマンドを実行します。
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

### VS CodeのAgentModeを有効化
VSCodeが最新版（1.99）でない場合はアップデートします。
その後、設定よりGithub CopilotのAgentModeを有効化します。
該当設定は`chat.agent.enabled`で検索できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/cdcb1571-878c-4ebd-a631-ffd128405b0b.png)

設定を有効化したら、Copilot Chatのウィンドウでエージェントモードが使えるようになります。

![スクリーンショット 2025-04-08 143950.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/691de15b-f69f-44ea-95fe-ee796297a441.png)

## AWS MCPの設定
MCP用の`setting.json`を編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/af859929-99e4-4b6e-9644-871f774ad02a.png)

```setting.json
～（前略）～

"servers": {
    "awslabs.aws-documentation-mcp-server": {
        "command": "uvx",
        "args": ["awslabs.aws-documentation-mcp-server@latest"],
        "env": {
            "FASTMCP_LOG_LEVEL": "ERROR"
        },
        "disabled": false,
        "autoApprove": []
    }
}
```
:::note warn
uvxのパスが通らない場合、`command`の指定を`which uvx`で表示されるフルパスに変更してみてください。
:::

json内に起動ボタンが表示されるので、起動してみます。

![スクリーンショット 2025-04-08 144318.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/3d663432-aac9-4859-9c70-e4f54265cf63.png)

:::note warn
起動でエラーになる場合は、対象の`setting.json`がWSLのものか確認してみてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/6bee5a1b-e51e-424a-ae50-c1f5a997d240.png)

:::

Copilot Chatのツール（工具のアイコン）をクリックして、AWSのMCPサーバーが有効化されていれば設定は完了です。

![スクリーンショット 2025-04-08 144924.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/0d49377d-0161-43ea-a32b-85ff42983473.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/17b53a7b-6e15-43bb-b750-16a655c8bed0.png)

## 確認！

適当に質問してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/7cb7368a-a186-40a3-8269-8b142f3d1c96.png)

MCPの実行の確認ボタンが表示されました。ちゃんと認識できているみたいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/469482/46a49d1c-fbb9-4cb6-a1d3-7bc7988c63c1.png)

少し待つと情報が表示されました。ちゃんとドキュメントを参照しているみたいです（多分）。

## おわり
あんまりMCP自体はちゃんと分かってないですが、こんな感じで簡単に導入できるので色々試してみたいと思います。
MX LinuxでGitHubからリモートリポジトリのクローン実行時に認証が失敗した時の解決方法

GitHubのプライベートリポジトリをローカルにクローンする時に、ユーザー認証で失敗したのでその解決方法をメモしておく。たぶんパスワードを正しく入力できていないだけだと思う。しかし、システムに認証の手続きを任せられるようになったので、今後同じことで詰まらなくて済むようになった、はず。そう思いたい。
~~記事を書いてたらユーザー名の入力ミスに気づいた。穴があったら入りたい。~~

## 概要
環境は以下の通り。
* Distro: MX-23.5_x64 Libretto Jan 12  2025 base: Debian GNU/Linux 12
* git version 2.39.5

## git clone 実行して失敗
:::note warn
この記事のコマンドはすべてログインユーザーで `sudo` なしで実行した。
:::
コマンド `git clone` を実行した時の内容は下記の通りだった。URLはHTTPSを選択した。
```bash
$ git clone https://github.com/ユーザー名/リポジトリ名.git
Cloning into 'リポジトリ名'...
Username for 'https://github.com': ユーザー名を入力
Password for 'https://ユーザー名@github.com': パスワードを入力
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see 
https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls
for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/ユーザー名/リポジトリ名.git/'
```
ユーザー名とパスワードが一致しないからエラーになってると思われる。
大人しく提示されたURLを見てみる。

[リモートリポジトリについて-GitHub Docs](https://docs.github.com/en/get-started/git-basics/about-remote-repositories#cloning-with-https-urls)

「HTTPSのURLでクローンする」の内容に、次のような内容がある。

> Git Credential Managerのような認証補助を利用可能です。
> よりセキュアな認証方法を選択したため、パスワードベースの認証は削除されました。

つまり、パスワードを使わずにソフトを使ってねってことかな。
## 解決方法
というわけで、**Git Credential Manager**をインストールして使えるようにする。
インストールの手順は下記のページに書いてあった。

[Git Credential Managerインストール手順](https://github.com/git-ecosystem/git-credential-manager/blob/release/docs/install.md)

Linuxの項目を見ると、追加の設定が必要と書いてあるが後で読むことにしてひとまずパッケージのダウンロードとインストールを行う。
Mx Linuxにインストールしたいので、 `.deb` のパッケージを選択する。パッケージの場所へはインストール手順のリンクから飛べる。
コマンドでインストールする手順が記載されているが、MX Linuxには**Deb Installer**というツールがあるのでクリックするだけでインストールできた。
下記のコマンドだけは実行した。
```bash
git-credential-manager configure
```
そして先程スルーした[追加設定](https://github.com/git-ecosystem/git-credential-manager/blob/release/docs/credstores.md)を行う。各OS向けの設定が記載されているので、Linux向けの設定を選ぶ。一通り内容を確認してみて、私は**Gitのビルトインの認証情報キャッシュ**の設定を行うことにした。理由はビルトインなので間違いなく機能してくれるだろうということと、一番簡単そうだったから。
設定は何をするかというと、下記のコマンドを実行するだけ。
```bash
export GCM_CREDENTIAL_STORE=cache
# or どちらかだけでよい ドキュメントからそのまま拝借した
git config --global credential.credentialStore cache
```
これけで、 `git clone` の際にユーザー名とパスワードの入力ではなく、GUIでの自身の設定した方法での認証を求められるようになる。
キャッシュ保持の設定についての記載もあったが、都度認証すればいいやと思い私は無視した。
## 結果
`git clone` の実行結果はこちら。合間の認証手順は省略しました。
```bash
$ git clone https://github.com/ユーザー名/リポジトリ名.git
Cloning into 'リポジトリ名'...
remote: Enumerating objects: 190, done.
remote: Counting objects: 100% (190/190), done.
remote: Compressing objects: 100% (140/140), done.
remote: Total 190 (delta 20), reused 186 (delta 19), pack-reused 0 (from 0)
Receiving objects: 100% (190/190), 289.27 KiB | 5.67 MiB/s, done.
Resolving deltas: 100% (20/20), done.
```
という訳で、無事にGitの認証を突破してリポジトリをクローンできました。888888
~~ちなみにごく短いコードを一時的に保管していただけなのでコピペでも良かった、ということは内緒です。~~
## 参考
参考にしたドキュメントは記事中でリンクを貼ったので、いつもお世話になっているMarkdownのチートシートを載せます。この記事がキレイに見えるのはすべてこのチートシートのおかげです。ありがとうございます。
[Markdown記法 チートシート by Qiita](https://qiita.com/Qiita/items/c686397e4a0f4f11683d)
DNS、CDNサービスの詳細解説(六)


# DNSサブドメイン委任とフォワードサーバーの実装ガイド

## 1. サブドメイン委任の実装

### 1.1 サブドメイン委任の基本概念
サブドメイン委任により、大規模なDNSインフラを分散管理可能にします。  
**主な特徴**：
- 権限委譲による管理負荷分散
- 地理的/組織的なドメイン分割
- トラフィックの最適化

### 1.2 親ドメイン側の設定
```nginx
// named.confのゾーン定義
zone "wang.org" {
    type master;
    file "wang.org.zone";
    allow-transfer { 10.0.0.18; };
};

// ゾーンファイルへの委任設定
$TTL 1D
@   IN SOA  ns1.wang.org. admin.wang.org. (
    2023082101 ; Serial
    3H         ; Refresh
    15M        ; Retry
    1W         ; Expire
    1D )       ; Minimum

    NS   ns1.wang.org.
shanghai NS ns1.shanghai.wang.org.
ns1.shanghai A 10.0.0.18
```

**重要なポイント**：
1. 親ゾーンに子DNSのNSレコードを追加
2. グルーレコード（Aレコード）を併記
3. セキュリティのためゾーン転送を制限

### 1.3 子ドメイン側の設定
```nginx
// 子ドメインのゾーン定義
zone "shanghai.wang.org" {
    type master;
    file "shanghai.zone";
};

// サブドメインゾーンファイル
$TTL 1D
@   IN SOA  ns1.shanghai.wang.org. admin.shanghai.wang.org. (
    2023082101 
    3H        
    15M       
    1W        
    1D )      
    NS  ns1
ns1  A  10.0.0.18
www  A  10.0.0.17
```

### 1.4 動作検証手順
```bash
# 委任の確認
dig +norec NS shanghai.wang.org @10.0.0.8

# 実際の名前解決テスト
dig www.shanghai.wang.org @10.0.0.18
```

## 2. DNSフォワードサーバーの実装

### 2.1 グローバルフォワード設定
```nginx
options {
    forward first;
    forwarders { 10.0.0.18; };
    dnssec-enable no;
    dnssec-validation no;
};
```

**動作モード比較**：
| モード  | 動作                                 | 用途               |
|--------|--------------------------------------|--------------------|
| first  | フォワード失敗後ルートサーバーに問合せ | フォールバック必要 |
| only   | フォワードのみ依存                   | 完全依存環境      |

### 2.2 特定ゾーン向けフォワード
```nginx
zone "example.com" {
    type forward;
    forward first;
    forwarders { 192.168.1.10; };
};
```

### 2.3 キャッシュサーバー設定例
```nginx
// named.conf設定
options {
    directory "/var/named";
    recursion yes;
    allow-query { any; };
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward only;
    dnssec-validation no;
};
```

## 3. パフォーマンスチューニング

### 3.1 キャッシュ設定最適化
```nginx
options {
    max-cache-size 512M;
    max-cache-ttl 3600;  // 1時間
    min-cache-ttl 300;   // 5分
    cleaning-interval 60;// 1分毎の掃除
};
```

### 3.2 リソース制限設定
```nginx
options {
    max-recursive-queries 1000;  // 同時再帰問合せ数
    recursive-clients 5000;      // 同時接続数
    coresize unlimited;          // メモリ制限解除
};
```

## 4. セキュリティ強化策

### 4.1 アクセス制御リスト（ACL）
```nginx
acl "trusted" {
    10.0.0.0/24;
    192.168.1.0/28;
};

options {
    allow-query { trusted; };
    allow-recursion { trusted; };
    allow-transfer { none; };
};
```

### 4.2 TSIG認証によるゾーン転送
```bash
# 鍵生成
dnssec-keygen -a HMAC-SHA512 -b 512 -n HOST zone-transfer

# 設定ファイル追記
key "zone-transfer" {
    algorithm hmac-sha512;
    secret "xxxxxxxxxxxxxxxxxxxx==";
};

zone "example.com" {
    type master;
    file "example.com.zone";
    allow-transfer { key zone-transfer; };
};
```

## 5. モニタリングとログ管理

### 5.1 統計情報の取得
```bash
rndc stats
cat /var/named/data/named_stats.txt
```

### 5.2 ログ設定のカスタマイズ
```nginx
logging {
    channel query_log {
        file "/var/log/named/queries.log" versions 5 size 50m;
        severity debug 3;
        print-time yes;
    };
    category queries { query_log; };
};
```
Laravelが動かない！と思ったら保存できてなかっただけだった件

# 背景
講座を受講しながら、システム構築している真っ最中。
PCを変えたタイミングで、localhostの画面が何をやっても動かなくなった。

# 試したこと（抜粋）
- routeやcontrollerを一から見直し
- キャッシュ削除やスーパーリロードの繰り返し
- dockerの動きのチェック
- ポート番号のチェック
- マウント関係のチェック
- M4チップに変えたのが関係ある？？
 
などなど。
# 結論
vscodeで保存できてなかっただけだった！！！！

何時間も格闘したのに、、、泣
でも解決してよかった。

自動保存の設定に変更。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4014657/a78238a5-224a-4b15-a1fd-f751361a7933.png)

もっとvscodeに慣れよう。
DNS、CDNサービスの詳細解説(一)



## 1. 名前解決の概要とDNS

### 1.1 名前解決の必要性
TCP/IPネットワークではデバイス間の通信にIPアドレスを使用しますが、数値形式のIPアドレスは記憶が困難です。これを解決するため、www.wang.orgのような人間に優しいドメイン名を使用します。DNS（Domain Name System）はこのドメイン名をIPアドレスに変換する分散型データベースサービスです。

**主な利点**：
- ホスト名とIPアドレスの分離（IP変更時も名前維持可能）
- インターネットリソースへの直感的なアクセス

### 1.2 名前解決方法の種類
#### ローカルホストファイル
```bash
# Linux: /etc/hosts
# Windows: %WINDIR%\system32\drivers\etc\hosts

122.10.117.2  www.wang.org www
93.46.8.89    www.google.com google
```

#### DNSシステムの特徴
- アプリケーション層プロトコル
- C/Sアーキテクチャ
- 使用ポート：53/udp, 53/tcp
- BIND（Berkeley Internet Name Domain）実装

### 1.3 ドメイン名構造
| 階層       | 例                 | 説明                         |
|------------|--------------------|------------------------------|
| ルートドメイン | .                  | 13台のルートサーバー         |
| トップレベル | .com .org .jp      | 組織/国別コード              |
| セカンドレベル| wang.org           | 組織専用ドメイン             |
| サードレベル | study.wang.org     | 最大127階層まで可能          |


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3515709/56e7f630-17fb-4638-b8c3-bef9cac6a9d3.png)



## 2. DNSの動作原理

### 2.1 クエリタイプ
#### 再帰的クエリ（Recursive Query）
クライアントとローカルDNS間で使用。DNSサーバーが最終結果を返すまで責任を持って解決。

**特徴**：
- 単一のクエリで解決
- クライアント負荷軽減

#### 反復クエリ（Iterative Query）
DNSサーバー間で使用。参照先情報を返し、クライアントが直接問い合わせ。

**特徴**：
- 複数クエリが必要
- トラフィック分散効果

### 2.2 DNSキャッシュ
```bash
# WindowsでのDNSキャッシュ確認
ipconfig /displaydns | findstr redhat

# Linuxでのキャッシュクリア
systemctl restart nscd
```

キャッシュ戦略：
- TTL（Time To Live）値に基づき保持
- クエリ効率向上
- ネットワーク負荷削減

## 3. DNSサーバーの実装

### 3.1 主要コンポーネント
| コンポーネント   | 説明                               |
|------------------|-----------------------------------|
| プライマリサーバー | マスターデータ保持                |
| セカンダリサーバー | ゾーン転送でデータ複製            |
| キャッシュサーバー | クエリ結果を一時保存              |
| フォワーダー     | 特定クエリを上位サーバーに転送    |

### 3.2 逆引きゾーンの設定
```bash
# named.conf設定例
zone "117.243.177.in-addr.arpa" {
    type master;
    file "117.243.177.rev";
};
```

## 4. 高度なDNS構成

### 4.1 CDN連携
**コンテンツデリバリネットワーク**：
- 地理的位置に基づく最適サーバー選択
- レイテンシ削減
- 負荷分散

### 4.2 スマートDNS
```bash
# GeoIPデータベース連携例
view "internal" {
    match-clients { 192.168.0.0/16; };
    zone "example.com" {
        type master;
        file "internal.example.com.zone";
    };
}
```

**機能**：
- クライアント位置情報に応じた応答
- ネットワーク最適化
- 障害回避

## 5. インターネットDNSアーキテクチャ

### 5.1 ルートサーバー構成
**重要な事実**：
- IPv4ルートサーバー：13台（米国10、欧州2、日本1）
- 雪人計画（IPv6）：25台（中国1主3従含む）

### 5.2 セキュリティ強化
**DNSSEC実装**：
- デジタル署名による応答検証
- キャッシュポイゾニング防止
- 完全性保証

## 6. 実践的な設定例

### 6.1 サブドメイン委任
```bash
# 親ドメイン設定
subdomain IN NS ns1.subdomain.example.com.
ns1.subdomain IN A 192.168.1.10
```

### 6.2 フォワーダー設定
```bash
options {
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };
    forward only;
};
```

## 7. トラブルシューティングツール
```bash
# 主要コマンド
dig www.example.com
nslookup www.example.com
host 192.168.1.1
whois example.com
```

**チェックポイント**：
- ゾーン転送の正常性
- TTL値の適切性
- 逆引き設定の整合性

## 8. 最新動向（2023年）
- DoH（DNS over HTTPS）の普及
- 量子コンピューティング耐性アルゴリズム研究
- 自動ゾーン管理のクラウド統合
Set Up Salesforce Flow for Service



https://trailhead.salesforce.com/content/learn/modules/service_lightning_flow_for_service/setup-lightning-flow-for-service


レコードページ追加しても保存されませんね。何だろう


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/659afa8b-ef3b-4559-920a-e8bc4494b700.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/e48314a6-4130-45bc-ab87-85a2364e34a5.png)


仕方ないので何もしていないけど検証ボタンをクリック

:::note alert
On the Case Layout page layout, we can't find the 'Log a Call' quick action in the Lightning Experience Actions section.
:::

騙された... コンソールアップにはでないですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/d938022a-7b86-4422-a75e-fdbc1336149a.png)

何だ？お手上げですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9b1a92e6-3be8-48c6-b07b-27522507042d.png)

こっちで作れということ？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/efd6afcd-a546-49c0-9a3b-6a106f264f33.png)


作ったけどエラーは同じ

:::note alert
On the Case Layout page layout, we can't find the 'Log a Call' quick action in the Lightning Experience Actions section.


ケースレイアウトのページレイアウトで、Lightning Experience アクションセクションに「通話の記録」クイックアクションが見つかりません。
:::

Log a Callが３つあるんで、分からんけど全部を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/da2fcaaa-3610-4992-8335-5395694978df.png)

エラーは変わらないですね。

以下にあるようにクイックアクションを作って追加。さっき３つあると思ったけどSalesforce Mobile and Lightning Experience Actionsじゃなかったな

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/a794953f-0415-4561-ae8b-f65929dbc817.png)

:::note alert
We can’t find the 'Verify Caller – Flow' action in the 'Default' channel that's marked as mandatory.
:::

あれ？　さっき登録したないようが全部消えている。何で...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/9ed9a821-968e-4fa4-b35e-f02e2cc90de3.png)

Bottom Pinned: Log a Call – Quick Action (Case)が２つあるけど、分からん

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/6db40607-09b7-48d6-af14-7b5394b5c193.png)

やっぱり消えている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/35c59756-70a6-4c3a-9ede-e0452fbca7e1.png)

しまった、タブがデフォルトでなかった...

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/781534e4-d3b7-48b4-a705-fc180aa4871e.png)

簡単だと思っていたけど、超難しい。意味が分からんところが多かったですね。


# 質問など

+ [【未解決】アクションと推奨事項で、「発信者の確認 - フロー」アクションの「必須としてマーク」オプションをクリックできないという問題が発生しています。](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MYfQi0AL)
JCL学習②

DDステートメントについて
```
// DD名 DD パラメータ
```

パラメータとは
下記がパラメータです。
|パラメータ|意味|
|:--|:--|
|DSN=|使用するデータセット名（ファイル名）|
|DISP=|データセットの利用モードと終了後の処理方法（SHR/OLD/NEW など）|
|UNIT=|装置の種類（SYSDA ＝ディスクなど）|
|SPACE=|新規作成時の容量指定（TRK, CYL など）|
|SYSOUT=|出力の送り先（スプールへ出力）|

**使い方**
```
// TESTDD DD DSN=TESTDETA,
//           DISP=(NEW,CATGL,DELETE),
//           UNIT=SYSDA,
//           SYSOUT=*
```
**覚え方**
・「DDはデータセットの定義」と覚える。
・パラメータは「どう使うかの設定項目」って考える。
IT未経験から1ヶ月でAWS Solutions Architect Associate 合格｜完全攻略ガイド

## はじめに
私はIT未経験の状態からIT企業に入社し、AWSクラウドプラクティショナーの資格取得を機に本格的にクラウド技術に興味を持ちました。さらなるスキルアップを目指し、AWS認定ソリューションアーキテクト – アソシエイト（SAA）の受験を決めました。

この記事では、私が**1ヶ月**でAWS認定ソリューションアーキテクト – アソシエイトに合格した際の勉強方法や試験のポイントを紹介します。クラウドプラクティショナーの知識を土台としつつ、より深く、広範なAWSの知識を効率よく学べるように、自分のノウハウをお伝えできればと思います。

## AWS認定ソリューションアーキテクト – アソシエイト（SAA）とは
AWS認定ソリューションアーキテクト – アソシエイトは、可用性、耐障害性、コスト効率、およびスケーラビリティに優れたAWSシステムの設計およびデプロイに関する知識とスキルを証明する資格です。

試験では、AWSの主要なサービスに加え、アーキテクチャ設計の原則、ベストプラクティス、セキュリティ、ネットワーク、ストレージ、データベースなど、より専門的で実践的な知識が問われます。

**資格取得のメリットは以下の通りです。**

* より高度なキャリアアップ
* プロフェッショナルとしての市場価値向上
* AWSに関する深い知識と設計能力の体系的な習得
* クラウドソリューションアーキテクトとしての信頼性向上

**AWS認定ソリューションアーキテクト – アソシエイトは、以下のような方におすすめです。**

* AWSクラウドプラクティショナーを取得済みで、さらに知識を深めたい方
* クラウドソリューションアーキテクトを目指す方
* AWS環境でのシステム設計・構築・運用に携わる方
* より高度なITスキルを習得し、キャリアアップを目指す方

**公式ホームページには受験対象者として以下のように書かれています。**

受験対象者には、AWSのサービスを使用するクラウドソリューション設計の実務経験が 1 年以上必要です。

しかし、クラウドプラクティショナーの学習経験を活かし、**効率的な学習方法と重要なポイントを押さえれば、1ヶ月での合格も十分に可能です。** その具体的な方法を詳しくお伝えしていきたいと思います。

## 試験勉強の準備
私が実際に使用した教材を紹介します。

* 学習期間：1ヶ月
* 学習スケジュール：平日1時間、週末3時間、試験直前の週末7時間
* 使用教材：
    * 教材：[徹底攻略 AWS認定 ソリューションアーキテクト – アソシエイト教科書]
    * 問題集：Udemy [AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集]
    * その他：Qiita記事

## 具体的な勉強方法
1. 教材でより深い基礎知識を習得（上記テキストの場合は章末問題を含め約330ページあります。）
    ★合格に必要な知識以上に細かい説明が多いため、最初から隅々まで理解しようとすると初学者の場合には理解に時間がかかってしまいます。また問題を解いてから読み直した方が重要ポイントがわかるので流し読みの感覚で一日30~50ページ、一週間で読み終わるようにしましょう。
1. 章末問題を使って問題に必要な情報をインプットする
    ★1と同時並行として章末ごとに用意されている問題を解いていきます。その際、わからない問題は回答を見る前に該当するページに戻って説明から自分で正解を見つけるようにしましょう。問題文のどのワードが解くポイントになるのか明確にしながら進めていきましょう。
1. Udemyでひたすら類似問題を解く
    ★6回分、390問の問題があるので解き足りないことはなかったです。わからないサービスや単語が多くあると思うので、その都度Qiitaや公式ドキュメントを読んで納得して進めていきましょう。
    ★一度に1回分をまとめて解こうとすると時間がかかる＋間違えた問題一つ一つへの復讐がおざなりになってしまいます。5~10問ごとに回答をみて知らなかったことは調べるという形で進めていきましょう。

## 試験対策のポイント：
* とにかく**早く問題を解くフェーズに入る**
    ★inputを完璧にしてからではなく、問題を解きながら知識を入れる認識で学習しましょう。問題のシナリオがあるほうが理解もしやすいです。
* **シナリオを理解してから問題を解くようにする。**
    ★シナリオを理解できずに最後に回答を見ても学ぶべきポイントがずれてしまいます。どこが問題のポイントなのか知るためにもAWS用語以外のIT用語で知らない言葉が出た際には、解く際でいいので調べシナリオを正しく理解しながら解き進めましょう。
* 長い問題に慣れる
    ★クラウドプラクティショナーと比べて問題文・選択肢の長さが倍以上になってきます。流し読みをすると頭に入ってこないことがよくあり、読み返していくと結果として時間がかかってしまいます。一文一文理解しながら読み進めていきましょう。

## 試験当日の流れと感想
試験会場は横浜テストセンターでした。
試験は130分で65問出題され、クラウドプラクティショナーよりも問題文が長く、思考力を要する問題が増えた印象でした。そのため、時間配分を意識しながら落ち着いて問題を解くことが重要だと感じました。私は最初の1周が100分、見直しに30分のペースでした。
結果は742/1000で合格でした。（合格ラインは720点です。）クラウドプラクティショナーの学習経験があったとはいえ、より深い知識と理解が必要とされました。

## おわりに
AWS認定ソリューションアーキテクト – アソシエイトの取得を通して、より実践的なAWSの知識とアーキテクチャ設計のスキルを習得することができました。クラウドプラクティショナーの学習が土台となり、スムーズに学習を進めることができましたが、より専門的な知識の習得には根気が必要でした。

現在は、さらに上位の資格取得や、特定のAWSサービスに関する専門知識の習得に向けて学習を進めています。今後も資格勉強の経験やAWSに関する情報を共有していきたいと考えています。

この記事が、これからAWS認定ソリューションアーキテクト – アソシエイトを受験する方の参考になれば幸いです。ご質問やコメントがありましたら、お気軽にご連絡ください。
AIに「仕事を奪われるのでは？」と感じた時に読む記事

最近、ChatGPTやClaudeなどの大規模言語モデル（LLM）を業務で使う機会が増えた方も多いのではないでしょうか。  
自分もその一人で、日常のタスクやちょっとした調べ物、文章の構成補助など、LLMにずいぶん助けられています。

でも、その便利さを実感すればするほど、ちょっとした不安が頭をよぎることがありました。

> 「このまま進化していったら、エンジニアの仕事ってどうなるんだろう？」

> 「自分の仕事も、そのうち全部AIができてしまうんじゃ…？」

そんな疑問や不安をきっかけに、**LLMと人間の役割分担、これからの働き方**について書いたのがこちらのブログ記事です。

**[LLMと人間の最適協業：それぞれの得意分野を活かす未来の働き方](https://omomuki-tech.com/archives/5787)**

## 記事で書いたことの概要

ブログでは、以下のような構成で整理しています：

### 1. LLMの得意な領域  
LLMはとにかく大量のデータ処理や文章生成が得意で、以下のような業務はかなり高精度でこなせます。

- 文章の整形、要約、翻訳
- コード生成、リファクタリング提案
- 検索、知識の補完

### 2. でも、LLMが苦手なこともある  
例えば…

- 文脈を超えた「共感」や「空気を読む力」
- 新しい発想、アイデア創出（創造性）
- 倫理的判断、最終責任の判断

こういった領域では、**やはり人間にしかできない価値**が残るのでは？と感じています。

### 3. 「人間がやるべきこと」はむしろ明確になった  
LLMと“仕事を取り合う”というよりは、  
**LLMを最大限に活かしつつ、人間が何に集中するべきかを見直すことが大事**だと考えるようになりました。

## 読者への気づき共有

この記事を通して得た自分なりの気づきを、以下にまとめておきます：

- **AIに奪われる仕事**ではなく、**AIに“任せられる”仕事**と考えるべき  
- 自分がやっている仕事の中で「LLMで代替可能な部分」「判断が必要な部分」を分けてみると、業務の最適化が見えてくる  
- LLMはもはや「ツール」ではなく、「チームメンバー」的な存在になりつつある（≒使い方を理解すれば“強力な相棒”になる）

## 読んでほしい方

- ChatGPTなどを仕事に取り入れ始めている方  
- LLMとの付き合い方を模索している方  
- 「AIに負けないキャリア」を考えている方

業務効率だけでなく、**エンジニアとしての価値や立ち位置を見直したい方**にとって、ヒントになる内容になっていると思います。


## 最後に

僕自身、このテーマについて考え始めたことで  
「AIを怖がる」のではなく、「どう使いこなすかを考える」フェーズに入れた気がしています。

同じようなモヤモヤを抱えている方がいれば、ぜひ読んでみてください
[LLMと人間の最適協業：それぞれの得意分野を活かす未来の働き方](https://omomuki-tech.com/archives/5787)
MCPサーバーのTool名のハイフン"-"とアンダースコア"_"でハマった話


## はじめに

最近、界隈で話題になっている MCP（Model Context Protocol）サーバーに興味を持って実装を始めたのですが、Cursorから動かそうとしたときにはまったことを共有します。

# 結論

なんてことはないです。
tool名にはハイフン`-`を使わず、アンダースコア`_`を使いましょう、っていう知ってる人には至極当たり前の話…たぶん


# 問題

自作のMCPサーバーで`count-chars`というtoolを実装しました。

![count-chars](https://github.com/Mistizz/public-zenn-article/blob/main/images/mcptoolname_04.png?raw=true)

それをCursorから呼び出してもらうのですが、何度やってもハイフンがアンダースコアになった`count_chars`を呼んでしまい、`Tool count_chars not found`というエラーが出て呼び出しに失敗する、という事象に悩まされました。

![実行](https://github.com/Mistizz/public-zenn-article/blob/main/images/mcptoolname_01.png?raw=true)

![エラー](https://github.com/Mistizz/public-zenn-article/blob/main/images/mcptoolname_02.png?raw=true)

Cursor Setting の MCP を見てみると、Toolsに、`count_chars`と表示されています。

![tool読み込み](https://github.com/Mistizz/public-zenn-article/blob/main/images/mcptoolname_03.png?raw=true)


# Tool名の実装を、ハイフン`-`からアンダースコア`_`に変えたら解決した

結局、Tool名の実装をハイフン`-`からアンダースコア`_`に変えることで、呼び出し時のTool名と実装してるTool名を一致させたら、エラーなく実行できるようになりました。

色々調べてみたところ、そもそもJavascriptには、変数名でハイフン`-`が使えないという制限があるようです。（地味に知らなかった…）可能性として、Typescript SDKか、もしくはCursor内部の処理系で、`-` が `_` に自動変換されているのではないか、という結論に至っています。

（Javascriptのライブラリでも、内部的にハイフン`-`をアンダースコア`_`に変換するようになってるものが多いらしい…知らんかった…）

# そうして出来上がったMCPサーバー：Japanese Text Analyzer

日本語テキストの形態素解析を行えるMCPサーバーです。
文字数をカウントしたり、品詞の割合を計算したりできます。
例えば、「小学校低学年でもわかりやすい文章」って指示して生成された文章が本当に指示通りになっているかをチェックしたいときに活躍すると思います。

https://github.com/Mistizz/mcp-JapaneseTextAnalyzer

# まとめ

MCPのTool名は、アンダースコア`_`で！
同じようにハマっている人の一助になれば幸いです。
CRM Analytics クエリの裏フィルターを確認する方法

CRM Analytics ダッシュボードで、グラフやテーブルが予想と異なる結果を表示している場合、データソースの裏側でフィルターが適用されている可能性があります。

本ブログでは、その「裏フィルター」の確認方法についてご紹介します。

① 調査したいグラフの右上にある三角アイコンをクリックし、「詳細の表示」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/82af27cd-255f-4c97-9ea2-d4ad7be8f584.png)

②「データソースの条件」セッションで、適用されているフィルター条件を確認できます。さらに、詳細を確認したい場合、右上の「詳細を参照」をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/f5d42067-fb88-48d7-87ca-4bca3f457728.png)


③この画面で元のクエリ、最終クエリ及び結果を確認することが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672646/0e95fd6b-f04f-4e83-a53f-64aa1a9427c7.png)
【ChatGPT＋4o Image Generation】で6分割シートを作成します。


　どうも、カーブミラーです。

　今回は、4o Image Generationで6分割シートを作成します。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はあります。　あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　では、【本題】です。

　今回は、
　　4o Image Generationで
　　　6分割シートを作成します。

　6分割シートというのは、
　　画像を六つに分割して
　　　それぞれを描いて
　　　　シートを作成することです。

　6分割は、
　　横3×縦2のものです。

　ここでは
　　女性の顔をサンプルにします。
![file_00000000a6ac51f78f8545d00df91cac_conversation_id=67f38120-47d4-8007-9536-5b693612b646&message_id=386faf18-ded7-4af5-b28b-1c0a83ec681a.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/0902d5d4-e716-41ee-bd03-a5e8e6756595.jpeg)


　こちらの画像をアップロードして
　　下記のどちらかのPromptを
　　　送信します。

```Text:6つの表情Prompt
顔にフォーカスしましょう。6つの表情シートを作ってください。
```

```Text:6つの髪型Prompt
顔にフォーカスしましょう。顔は正面のまま、まったく違う6つの髪型シートを作ってください。
```

　それぞれ
　　こうなります。
![file_000000005a2c51f7a3144ba5c8cec019_conversation_id=67f38120-47d4-8007-9536-5b693612b646&message_id=26f0eda9-e96f-4c7f-8eea-d5e919e11ed7.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/2562a820-d584-4fa1-92c9-2996af1996ea.png)


![file_000000001b0851f7a7162a8972d760e4_conversation_id=67f38120-47d4-8007-9536-5b693612b646&message_id=136e817d-0853-4d4c-861a-28071f6f3126.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457238/c40817c6-48d5-4bb1-90c6-f3892c0e3d41.png)


　これを応用すれば、
　　さまざまなことに
　　　使えます。

　違う人物や風景にもできますし、
　　同じキャラのポーズ違いなど
　　　いろいろです。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
ifxでのコンパイルの注意点

Fortran使いの皆様こんにちは。最近、Intel One API 2025からifortがなくなり、ifxを使う必要が出てきました。

一つセグメンテーションフォルトが起きる事例がありましたので、その回避策とともに紹介します。

```fortran
integer, optional, intent(in)    :: rec
```
というoptional引数がある時、

```fortran
if (present(rec) .and. (rec > 0)) then
    irec = rec - 1
else
   irec = 0
end if
```
は落ちます。これは、```rec > 0```を評価しようとして、recが定義されていないからのようです。ifortだと、左を評価してから右を評価してるっぽくて、特に問題はなかったようですが...

```fortran
    if (present(rec)) then
      if (rec > 0) then
       irec = rec - 1
      end if
    else
       irec = 0
    end if
```
のようにすると回避できます。


## 2025/4/9追記
最小構成を作って
```fortran
module testsub
    contains
subroutine test(k,rec)
    implicit none
    integer,intent(in)::k
    integer,intent(in),optional::rec
    integer::irec

    if (present(rec) .and. (rec > 0)) then
        irec = rec - 1
    else
       irec = 0
    end if

end subroutine test
end module testsub

program main
    use testsub
    implicit none
    integer::k

    k = 3
    call test(k)
end program


```
色々試していますが、ifortやifxではなく、むしろgfortranで落ちているかもしれません。
gfortran 11だと上のコードがセグフォになることを確認しました。もう少し再現環境について調べます。
Azure Functionsのアプリ設定を使ったKey Vault取得で、変更が反映されない場合の解決方法

# 概要

Azure FunctionsからKey Valultの値を取得する方法として、Functionsのアプリ設定（環境変数）を使う方法があります。コード上では取得先を意識せずに、環境変数として取得できます。ローカルのデバッグ実行ではlocal.settings.jsonから値を取得し、Azure上ではアプリ設定を介してKey Vaultの値を取得する、という使い分けをコードを変更せずに実現できて便利です。

しかしこの構成で、Key Vaultの値を変更しても、Functionsでは古い値が取得されてしまうという問題が起きました。アプリ設定ではバージョンを指定せずに取得しているため最新の値になるはずですが、上手く行きません。この問題を解決しました。

# 最初に結論まとめ

Azureポータルで、Functionsの対象のアプリ設定（環境変数）を変更して保存、元に戻して保存。これでKey Vaultの変更が反映されます。

Functionsの再起動で解決するという情報も有ったのですが、私の場合は再起動しても反映されませんでした。

# 詳しく

## 背景

普段Windowsアプリをメインに作っていますが、Azureにチャレンジ中です。すると、基本的なところで次々と躓きます。基本的すぎて意外と情報が見つからなかったりするので、躓いたところと解決策を、この記事のように1つずつ書いていこうと思います。

## アプリ設定でのKey Vaultの取得

FunctionsとKey Vaultは作成済みとして、その後の手順を説明します。全て、Azureポータルを使っています。

作成したFunctionsを開き、設定→環境変数→アプリ設定を開くと、登録済みの環境変数が表示されます。ここで環境変数を追加します。
![スクリーンショット 2025-04-08 140307.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3616143/cf3ba8b6-2953-45f4-87c9-281c203309fd.png)


任意のキーに対して、Key Vaultの特定の値を取得するように値を設定します。例えば次のような感じです。

1. キー: `ApiKey`
2. 値: `@Microsoft.KeyVault(VaultName=testkeyvault;SecretName=ApiKey)`

VaultNameとSecretNameには、Key Vaultに存在する名前を指定します。書き方は複数あるので、詳しくは次の公式ドキュメントを見ると良いです。

https://learn.microsoft.com/ja-jp/azure/app-service/app-service-key-vault-references?tabs=azure-cli#source-app-settings-from-key-vault

これを追加したら、「アプリ設定」を「適用」すれば完了です。追加しただけだとまだ反映されていないので、注意してください。（最初ここを見落としていて取得できずに困りました）

このように設定するだけで、Azureに発行したFunctions上では ` Environment.GetEnvironmentVariable("ApiKey")` で値を取得できます。

ここまでは問題が無かったのですが・・・Key Vaultの値を変更した時、問題が起きました。

## Key Vaultを変更しても反映されない

Key Vaultの値を変更（新バージョンを追加）しましたが、Functionsを実行しても古い値が取得されます。

FunctionsのコードにKey Vaultから直接取得する処理を追加したところ、そちらは最新の値が取れます。つまり、Functionsのアプリ設定側に問題が有りそうです。

公式ドキュメントを見ると、アプリ設定は最大24時間キャッシュされるという情報があったため、キャッシュが疑えます。Functionsを再起動してみました。が、結果は変わりません。

## 反映された方法

Functionsの設定→環境変数→アプリ設定を開いて、該当の設定を一度別の設定へ変更して、反映。また同じ設定を元に戻して、反映。これで、最新の値が取れるようになりました。

# まとめ

Functionsのアプリ設定（環境変数）を通してKey Vaultの値を取得する方法は便利ですが、キャッシュが有る点に注意です。

今回試した時は、Functionsを再起動するだけではキャッシュが破棄されず、アプリ設定を変更・上書きしてようやくキャッシュが破棄されました。Azure上でしか起きないので意外と追求が難しく、引っかかりやすい気がします。こういう余計なところで時間を無駄にしないように、この情報が役に立ったら嬉しいです。
【オープンソース自律移動ロボット】@mobi Open Trial Kit 1.0の組み立て Vol.01

# 目次
|記事|概要
|:--|:--
|[01.概要](https://qiita.com/baya-H/private/46ed9246f3faa9cf5830)|@mobi Open Trial Kit 1.0とは <- 本記事はここ
|[02.フレーム組み立て](https://qiita.com/baya-H/private/cdf71d5ac7e7b772e2d6)|フレーム部分の組み立て
|[03.車輪取り付け](https://qiita.com/baya-H/private/419bfd7f99796f249533)|車輪を本体に取り付けるところまで
|[04.スイッチとバッテリー](https://qiita.com/baya-H/private/f115ed2f906dad12b44a)|スイッチ類(背面パネル)とバッテリー設置まで
|[05.センサ取り付け](https://qiita.com/hrpad/private/d1a980beeade507cc358)|IMU、LiDAR、DC-DCコンバータ、端子台取り付けまで
|[06.完成](https://qiita.com/hrpad/private/7105037cd466ec907a22)|モータドライバ、残りの配線、天板取り付けまで(ハードウェア完成)
|[07.動作確認](https://qiita.com/hrpad/private/022a6a21e2ba4f2e26d5)|ソフトウェアセットアップ、@mobi動作確認まで

# @mobi Open Trial Kitとは

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/88cf1c0a-59e1-4922-8c60-399f8c954bd9.png"/>

@mobi Open Trial Kitは弊社が設計したAMR台車です。30×30×25 cmくらいの小型台車で気軽に持ち運び、実験ができることをコンセプトにしています。詳しくは下記をご覧ください。

https://qiita.com/yamamoto-kazusige/private/2093b6a97f03b2b13532

本記事から7回ほどに渡って、@mobi Open Trial Kit 1.0の組み立てから自律移動までの工程を紹介します。記事では弊社が開発している自律移動ロボット向け ソフトウェアパッケージ「@mobi」を用いて@mobi Open Trial Kitの自律移動を実現しています。@mobiの詳細については下記をご覧ください。

https://adtsd.jpn.panasonic.com/solution/atmobi.html

@mobiの機能は下記からもご覧いただけます。

[<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/ad1b7893-e057-4f73-b2e4-90d1a99ad42d.jpeg"/>](https://channel.panasonic.com/jp/contents/41274)

# 事前準備
## 部品調達
@mobi Open Trial Kitを組み立てるにあたり、部品を皆様に自ら調達していただく必要があります。
下記リポジトリ内のopen_trial_kit_parts.xlsxを参考に、必要な部品を揃えてください。

https://github.com/Panasonic-Advanced-Technology/open_trial_kit

## 3Dプリンタ出力
今回は下表の部品を3Dプリンタで出力しました。3Dプリンタを使う場合は組み立て前に出力しておくとスムーズに組み立てが進められるかと思います。meviyにて注文することもできます。

|部品名|見た目|個数|
|---|---|---|
|モータースペーサー<br>MVBLK-ABN-3Y6-U1AJ9|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/e519b439-0de7-420d-b689-6d8ea65fabb6.png"/>|2
|モータースペーサー2<br>MVBLK-ABN-3Y6-Y89JW|<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/4dfcf490-f5f6-4021-82fe-24dccf5acd93.png"/>|2
|コネクタースペーサー<br>MVBLK-ABN-3Y6-E6DKS|![02.コネクタースペーサ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/9aedee9c-0c23-4366-b010-898c76570c96.png)|1

出力した部品は下図の通りです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953322/13f8ffa8-77e0-4e24-9e75-dfc669a0c341.jpeg"/>

<!-- <img src="./figure_compressed/IMG_0366.jpg"/> -->

では、[次回](https://qiita.com/baya-H/private/cdf71d5ac7e7b772e2d6)から実際の組み立てに移っていきます！

https://qiita.com/baya-H/private/cdf71d5ac7e7b772e2d6
OACの条件付き書式で属性列に条件を設定する

# はじめに
過去に何回か OAC（**Oracle Analytics Cloud**）の条件付き書式を紹介しましたが、今回は属性列（商品カテゴリとか顧客業種のような）に対して条件を設定する方法を紹介します。

参考情報
- [Oracle Analytics Cloud：条件付き書式を設定する](https://qiita.com/tyo38/items/55a4f509ea22d0e5f53f)
- [OACで種類の増えた条件付き書式を試してみる](https://qiita.com/tyo38/items/0a7999fbe5f5e5b530e2)

# サンプルデータ
このチュートリアルのデータ「world_cities_data.xlsx」を使用します。

https://docs.oracle.com/en/cloud/paas/analytics-cloud/tutorial-create-map-view-of-data/index.html#before_you_begin

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/9e86709a-e9d8-b5b5-a365-536ff2717fa1.png)

# 条件付き書式の設定
ダウンロードしたデータをデータセットとして登録し、新しいワークブックを作成します。

## データセットの作成
ホーム画面の「作成」をクリックして、「データセット」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c6f227bb-fa40-b091-4822-b87f8ce20f10.png)

「ここにデータ・ファイルを・・・」の枠にダウンロードしておいたExcelファイルをドラッグ＆ドロップするか、クリックしてExcelファイルを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/b8658650-653c-fc46-c487-137913f3f408.png)

内容を確認して「OK」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/983bba72-ca67-46f6-b49a-ea0a70200f45.png)

データセットを「World Cities Data」という名前で保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/02077614-61ac-4abf-a450-01c81e441223.png)

## ワークブックの作成
「データ」メニューで、作成したデータセットをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/27f30434-84c5-716b-039c-9298c7fd25ac.png)

もし、自動インサイトが働いたら、閉じておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/60aae9a1-bcf6-735c-19b9-d999d1b78a15.png)

## 条件付き書式
「Continent」「Sales」「Profit」の3つの列をCtrlキーを押しながら同時に選択します。
そのまま右クリックして、「ビジュアライゼーションの選択」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/0e183dc6-d77e-46d4-bd11-43bffa482d91.png)

表ビジュアライゼーションをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/c87907d3-3c1c-4730-9bec-43bb51ee8044.png)

属性列である「Continent」に対して条件付き書式を設定しようと思います。
「条件付き書式ルールの管理」アイコンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/d5ccc8d4-9f12-43d6-afa8-0c081584d09b.png)

「列」として「Continent」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/f8c75495-6f8e-4aae-a8a4-765c0fe3153f.png)

演算子が「次と等しい」になっていることを確認して
1. ドロップダウンリストボックスを開きます
1. 「Asia」を選択します
1. 任意の書式を設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/aea88346-51dd-4cba-a793-fc2520e14e2b.png)

書式の例です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/e9c7ad93-47e7-4a05-8135-024436d0e45e.png)

「保存」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/64335d6a-5742-4a27-9d6c-8f9b25a38a64.png)

結果を確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2342206/24751264-d8e9-4401-af28-fae377e10720.png)
GitHub の草（緑色のマス）が表示されない？過去のコミットも反映させる方法

## はじめに
こんにちは！最近 GitHub で毎日コードを書いているのに、貢献の草（緑色）が表示されず、悩んでいました。  
原因は「Git のコミットに使われていたメールアドレスが GitHub に登録されていなかったこと」でした。  
この記事では、**その原因の解決方法と、過去のコミットも草にする方法**を紹介します！

---

##  草が表示されない主な原因

### 1. Git のメールアドレスが GitHub に登録されていない
GitHub はコミット時の「メールアドレス」でユーザーを識別します。

**確認方法：**
```bash
git config user.email
```

**対処方法：**
GitHub の [Settings > Emails](https://github.com/settings/emails) にアクセスし、  
このメールアドレスが「Verified」になっているか確認してください。

もし違う場合、以下で正しいメールを設定します：

```bash
git config --global user.email "your_email@example.com"
```

---

### 2. `git commit` だけで `git push` していない
ローカルでのコミットだけでは草は増えません。GitHub に push する必要があります。

```bash
git push origin main  # または master
```

---

### 3. フォークしたリポジトリにしかコミットしていない
GitHub の草は、**自分が所有するリポジトリ**や**デフォルトブランチ**への貢献でカウントされます。

---

### 4. 過去のコミットのメールアドレスを修正したい
ここが今回のポイント！  
**過去のコミットを GitHub に登録済みのメールに修正すれば、草としてカウントされるようになります**

---

##  過去のコミットを修正して草を生やす方法

### スクリプトで履歴を書き換える（`git filter-branch`）

```bash
git filter-branch --env-filter '
OLD_EMAIL="旧メール@example.com"
CORRECT_NAME="GitHub のユーザー名"
CORRECT_EMAIL="正しいメール@example.com"

if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' --tag-name-filter cat -- --branches --tags
```

### 強制 push

```bash
git push --force --tags origin main  # または master
```

---

##  注意点

- 履歴の rewrite をするので、**チーム開発中のリポジトリでは非推奨**です
- 自分の個人プロジェクトであれば問題ありません
- GitHub の草はすぐには反映されないこともあります（数分～数時間）

---

##  まとめ

| 状況 | 解決方法 |
|------|----------|
| 草が生えない | Git のメールが GitHub に登録されているか確認 |
| 過去のコミットを反映したい | `git filter-branch` で履歴を修正 |
| 草を生やすには？ | デフォルトブランチに push！ |

---

最後まで読んでいただきありがとうございます！
同じ悩みを持つ方の参考になれば幸いです!