OmniAICreator/Qiita-1.07M huggingface dataset:
【備忘録】Liam ERDを使ってローカル環境でER図を生成してみた

### Liam ERDとは
ER図自動生成ツール。tblsで出力したJSONやPrismaスキーマなどをINPUTにし、ビジュアライズなER図を作成する。

**Liam ERD 公式**

https://liambx.com/

**公式ブログ（Liam ERDの紹介、今後の展望など）**

https://liambx.com/blog/liam-erd-introduction

**対応形式**

https://liambx.com/docs/parser/supported-formats


**tbls連携関連リリース**

https://liambx.com/blog/liam-erd-with-tbls

**開発ロードマップ**

https://github.com/orgs/liam-hq/projects/1

**参考個人ブログ**

https://zenn.dev/nextbeat/articles/liam-erd-tbls-mysql

## ローカル環境でのER図作成・公開手順

tblsとPrisma連携の場合の2種の手順を記す。

### 前提：検証環境・使用ツール
- M1 Mac(Sonoma 14.7.2)
- Microsoft SQL Server 2022(CU13、Ubuntu 22.04 Debian パッケージ)
- tbls(v1.56.1)
- Prisma(v5.19.0)
- Liam ERD CLI(v0.0.18)

### tbls連携の場合

※前提1：tblsのインストールが完了していること（brewを使うなど）
※前提2：`tbls.yml`が作成済みで、`dns`に接続先DBテーブルURLが定義されていること

1. `tbls out -t json -o schema.json`でschema.jsonファイルを生成する
2. `npx @liam-hq/cli erd build --format tbls --input schema.json`でschema.jsonを元にERダイアグラムを作成する
※特に指定がない場合は distディレクトリ内に生成ファイルが追加される。出力先を指定したい場合は`--output-dir <出力先ファイルの相対パス>`オプションを追加する。

:::note warn
コマンド実行時にエラーが発生する可能性あり。私が遭遇したケースの原因と対応方は以下。
・生成されたschema.jsonの`referenced_table`がnullになっている -> 空文字に変更する
・生成されたschema.jsonの`referenced_columns`がnullになっている -> 空配列に変更する
:::
3\. `npx http-server <2の出力先の相対パス>`でhttp-serverに公開する

### Prisma連携の場合

※前提：Prismaスキーマファイルが存在していること

1. `npx @liam-hq/cli erd build --format prisma --input <Prismaスキーマファイル相対パス>`でschema.prismaを元にERダイアグラムを作成する
2. `npx http-server <1の出力先の相対パス>`でhttp-serverに公開する
PL/I 初心者　復習問題①

### 練習問題①-1:偶数・奇数判定
問題：変数 NUM に整数を代入して、その数が偶数か奇数かを判定し、結果を表示するプログラムを作成してください。

ヒント：
偶数：NUM MOD 2 = 0
奇数：それ以外

<details>
<summary>答え</summary>

```
答え
TEST: PROCEDURE OPTIONS(MAIN);
 DECLARE NUM FIXED;

 NUM = 10;

IF NUM MOD 2=0 THEN
 PUT SKIP LIST('偶数');
ELSE
 PUT SKIP LIST('奇数');
END TEST;
```

</details>

### 練習問題①-2：1〜10までの合計を求める
問題：DO文を使って、1から10までの合計を計算し、表示するプログラムを作成してください。

ヒント：
・カウンタ変数：I
・合計変数：SUM
・DO I = 1 TO 10; を使う
<details>
<summary>答え</summary>

```
答え
 COUNT: PROCEDURE OPTIONS(MAIN);
    DECLARE I FIXED, SUM FIXED;

    SUM = 0;

    DO I = 1 TO 10;
        SUM = SUM + I;
    END;

    PUT SKIP LIST('合計:', SUM);
END COUNT;
```

</details>

### 練習問題①-3：名前と年齢の表示
問題：文字列変数 NAME に名前を代入し、数値変数 AGE に年齢を代入。
PUT SKIP LIST を使って「○○さんは△△歳です」と表示するプログラムを作成してください。
<details>
<summary>答え</summary>

```
答え
NAMAE: PROCEDURE OPTIONS(MAIN);
    DECLARE NAME CHAR(20), AGE FIXED;
    
    NAME = 'たろう';
    AGE = 25;
    
    PUT SKIP LIST(NAME, 'さんは', AGE, '歳です');
END NAMAE;
```
</details>
SSDのお引越し

## 問題

LLMを動かしているとSSDの容量が不足してきました。新しい容量の大きいSSDにOSを入れ直すのも良いのですが、今回は現在のSSDの中身をそのまま新しいSSDに移行する方法を取ります。

## 解決方法

### 1. 新しいSSDをコンピュータにつなぎます

新しい容量の大きいSSDをコンピュータにつなぎます。M2スロットでも、USB接続でも、新しいSSDが認識すればよいです。

### 2. OSを起動する

OSを起動します。**おすすめはUSBにLinuxを入れて、USBから起動する方法です。** 今回は危険を承知で移行元の容量の小さいSSDから起動します（おすすめしません）。

### 3. SSDの確認

次のコマンドで接続されているストレージの確認します。
```bash
sudo lsblk
```
実行すると次のように表示されます。
```bash
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda           8:0    0 931.5G  0 disk             <--古いSSD
├─sda1        8:1    0   512M  0 part /boot/efi
├─sda2        8:2    0 899.1G  0 part /
└─sda3        8:3    0    32G  0 part [SWAP]
sdb           8:16   0   1.8T  0 disk             <--新しいSSD
└─sdb1        8:17   0   1.8T  0 part
```
古いSSDはsda、新しいSSDはsdbであることがわかります。

### 4. 新しいSSDに古いSSDの内容を書き込む

次のようにddコマンドを使って、新しいSSDに古いSSDの内容を書き込みます。
```bash
sudo dd if=/dev/sda of=/dev/sdb bs=64K status=progress
```
オプションを間違えると大変なことになるので、よく確認しましょう。

**これを間違えると大事**
- **if= は元ディスク（古いSSD）**
- **of= はターゲットディスク（新しいSSD）**
- bs=64K はブロックサイズ
- status=progress は進行状況表示

## 5. パーティションの拡張

ddで無事、新しいSSDに古いSSDの内容が書き込めました。しかし、新しいSSDの内容は古いSSDのままなので、パーティション構造も古いままです。これでは、容量の大きいSSDに移行する意味がありません。そこで、パーティションの拡張を行います。

gpartedというソフトウェアを使うことで簡単パーティションの拡張ができます。次のコマンドでgpartedをインストールします。
```bash
sudo apt install gparted
```
次のコマンドで起動します。
```bash
sudo -E gparted #SSH越しにGUIが起動しなかったので、-Eオプションを付けて実行
```

gpartはGUIソフトウェアなので、メニューに従い操作すればよいです。パーティションの変更では、次の作業をしました。
- スワップ領域の削除
- 拡張したいパーティションを拡張
- スワップの作成（ついでに増やしておく）

### 6. SSDの入れ替え

古いSSDを取り除き、新しいSSDをコンピュータにつけます。起動すれば成功です。

次のコマンドで増えたことを確認してみましょう。
```bash
sudo lsblk
```
```
NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0  1.8T  0 disk
├─nvme0n1p1 259:1    0  512M  0 part /boot/efi
├─nvme0n1p2 259:2    0  1.8T  0 part /
└─nvme0n1p3 259:3    0 62.5G  0 part [SWAP]
```

## 起動が遅い

新しいSSDからOSが起動することが確認できましたが、起動が遅いです。どうしてでしょうか？この場合は、/etc/fstabに記載されているUUIDと実際のUUIDが違う可能性があります。確認するとスワップのUUIDが違っていました。修正しましょう。

次のコマンドでパーティションのUUIDを確認します。
```bash
sudo blkid
```
```
/dev/nvme0n1p3: UUID="xxxx-xxxx-xxxx-xxxxx-xxxx" TYPE="swap" PARTUUID="aaaa-aaaa-aaaa-aaaa"
/dev/nvme0n1p1: UUID="yyyy-yyyy-yyyy-yyyy-yyyy" BLOCK_SIZE="512" TYPE="vfat" PARTUUID="aaaa-aaaa-aaaa-aaaa"
/dev/nvme0n1p2: UUID="zzzz-zzzz-zzzz-zzzz-zzzz" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="aaaa-aaaa-aaaa-aaaa"
```
次にfstabに記載されているUUIDを確認します。
```bash
less /etc/fstab
```
```
UUID=zzzz-zzzz-zzzz-zzzz-zzzz  /            ext4    errors=remount-ro 0       1
UUID=yyyy-yyyy-yyyy-yyyy-yyyy  /boot/efi    vfat    umask=0077      0       1
UUID=aaaa-aaaa-aaaa-aaaa-aaaa none         swap    sw              0       0
```
確認すると、swap領域のUUIDが違っていました。

次に、スワップのIDを変更します。nanoコマンドでfstabの中身を書き換えましょう。
```bash
sudo nano /etc/fstab
```
この部分を
```
UUID=aaaa-aaaa-aaaa-aaaa-aaaa none         swap    sw              0       0
```
これに変更すします。
```
UUID=xxxx-xxxx-xxxx-xxxxx-xxxx none            swap    sw              0       0
```
もし、他の領域もUUIDが変わっていれば、それも修正しましょう。
検索関連のキーワード（FAISS、BM25、IVFインデックス）

## はじめに
*   **FAISS:** 高次元ベクトルデータの類似性検索のためのライブラリ。
*   **BM25:** 文書とクエリの関連度を評価するランキング関数。
*   **IVFインデックス:** 大規模なデータセットにおける近似最近傍探索を高速化するためのインデックス構造。

これらの技術を組み合わせることで、より効果的な情報検索システムを構築できます。例えば、FAISSで高速な類似性検索を行い、BM25で関連度を評価することで、精度と速度を両立した検索システムを実現できます。 IVFインデックスは、FAISSのようなライブラリで使用され、大規模なデータセットを効率的に処理するために不可欠な要素です。

## **1. FAISS (Facebook AI Similarity Search)**

*   **概要:** FAISSは、Facebook AI Research (FAIR) が開発した、高次元ベクトルデータの類似性検索を行うためのライブラリです。 大規模なデータセットに対して、高速かつ効率的に類似ベクトルを検索できます。
*   **仕組み:** FAISSは、近似最近傍探索 (Approximate Nearest Neighbor: ANN) という手法を様々なアルゴリズムで実装しています。 ANNは、完全な最近傍探索よりも高速に、近似的な最近傍ベクトルを見つけ出す手法です。
*   **特徴:**
    *   **高速性:** 大規模なデータセットでも高速な検索を実現します。
    *   **メモリ効率:** データセット全体をメモリにロードする必要がないアルゴリズムも提供しています。
    *   **多様なアルゴリズム:** 様々なANNアルゴリズム (LSH, IVF, PQなど) をサポートしており、データセットの特性や要件に応じて最適なものを選択できます。
    *   **Python/C++ API:** PythonとC++の両方のAPIを提供しています。
*   **用途:**
    *   画像検索: 画像の特徴ベクトルに基づいて類似画像を検索します。
    *   文書検索: 文書の埋め込みベクトルに基づいて類似文書を検索します。
    *   推薦システム: ユーザーやアイテムの埋め込みベクトルに基づいて、類似のユーザーやアイテムを推薦します。

## **2. BM25 (Best Matching 25)**

*   **概要:** BM25は、情報検索において広く使用されているランキング関数の一つで、文書と検索クエリの関連度を評価します。 確率モデルに基づき、キーワードの出現頻度や文書の長さなどを考慮して、関連性の高い文書を上位にランク付けします。
*   **仕組み:** BM25は、次の要素を考慮して文書のスコアを計算します。
    *   **Term Frequency (TF):** 文書中のキーワードの出現頻度。
    *   **Inverse Document Frequency (IDF):** キーワードの希少性。より多くの文書に出現するキーワードほど重要度が低くなります。
    *   **文書の長さ:** 文書が長いほど、キーワードの出現頻度が高くなる傾向があるため、文書の長さを正規化します。
*   **特徴:**
    *   **シンプルで効果的:** シンプルな数式で実装されており、計算コストが低く、かつ効果的なランキングを実現します。
    *   **パラメータ調整可能:** 経験的なパラメータ (k1, b) を調整することで、パフォーマンスを改善できます。
    *   **疎な特徴量:** キーワードの出現頻度に基づくため、疎な特徴量 (キーワードの有無) に適しています。
*   **用途:**
    *   ウェブ検索: ウェブページと検索クエリの関連度を評価し、検索結果をランク付けします。
    *   企業内検索: 社内文書と検索クエリの関連度を評価し、必要な情報を見つけやすくします。
    *   質問応答システム: 質問と回答候補の関連度を評価し、最も適切な回答を選択します。

## **3. IVF インデックス (Inverted File Index)**

*   **概要:** IVF (Inverted File) は、大規模なデータセットにおける近似最近傍探索 (ANN) を高速化するためのインデックス構造の一つです。特に、FAISSなどのライブラリで頻繁に使用されます。
*   **仕組み:** IVFは、データセットを複数のクラスタ (Voronoiセル) に分割し、各クラスタの中心ベクトル (centroids) を事前に計算します。検索時には、まずクエリベクトルに最も近いクラスタを特定し、そのクラスタ内のベクトルのみを検索します。これにより、データセット全体を検索する必要がなくなり、検索時間を大幅に短縮できます。
*   **特徴:**
    *   **速度向上:** データセット全体ではなく、特定のクラスタのみを検索することで、検索速度を大幅に向上させます。
    *   **精度と速度のトレードオフ:** クラスタの数を増やすほど精度は向上しますが、計算コストも増加します。クラスタの数を減らすほど速度は向上しますが、精度は低下します。
    *   **パラメータ調整:** クラスタ数や割り当て方法などのパラメータを調整することで、精度と速度のバランスを最適化できます。
*   **用途:**
    *   FAISSなどの類似性検索ライブラリで使用され、大規模なデータセットにおける近似最近傍探索を高速化します。
    *   画像検索、文書検索、推薦システムなど、様々なアプリケーションで利用されます。
【エックスサーバー】すでに存在するディレクトリで Git 更新したい場合

すでに Git 管理されている or clone したものなら、git pull で更新すればOK：
```ssh
cd /home/akkun1114/akkun1114.com/該当プロジェクト

# 本番環境を上書きで再デプロイ
git pull origin main  # または master
```
Dockerfile内でのユーザー関連で誤解していたこと２つ

Dockerイメージ構築にあたってユーザー設定は必要なことですが、いくつかの勘違いが発覚しました。

## TL; DR

* Dockerfileの`USER`は`root`を抜けても戻せる
* Dockerfileの`COPY`は指定しないと`root`でファイルが作成される
* `COPY --chown=`でユーザー設定可能

## Dockerコンテナとユーザー

何も考えずにDockerコンテナを構築すると、「動作ユーザーが`root`」となってしまいます。もちろん動くといえば動くのですが、コンテナの中身を好き勝手に書き換え可能なのは好ましい状況ではありません。

ということで、Unix系のユーザーとファイルパーミッションを、Docker自体でも対応して設定可能です[^1]。

いちばんわかりやすいものとしては、`USER ユーザー名`のようにして、これ以降のコンテナ構築、そしてコンテナ実行時のユーザーを指定できます。

## `USER`に関する誤解…戻せる！

はじめ、Dockerfileの`USER`は、Unix系でよくある「権限放棄」パターンと同じで、一度`root`以外に切り替えたら戻せないと思っていました。

ところが、実際には**自由に切り替えられる**、つまり一度`root`以外を指定してからまた`root`に戻れるものでした。必要な部分だけ`root`になってまた戻る、みたいな作業も自由自在だったのです。

## `USER`と`COPY`の関係性

上のような誤解をしたまま書いていた`Dockerfile`で、`USER user`のように切り替えてから`COPY`をかけたのですが、現在のユーザーでコピーが行われると想定していたところが、想定したように動かない事態に陥りました。

こちらは改めて調べてみれば[リファレンス](https://docs.docker.jp/engine/reference/builder.html#copy)にも明記してあったのですが、

> 新しいファイルやディレクトリは、オプションの `--chown` フラグでユーザ名、グループ名、UID/GID の組み合わせて追加対象の権限指定リクエストを指定しない限り、 UID と GID が 0 として作成されます。

ということで、`COPY`は`USER`で設定したユーザーとは**無関係**に、作成したファイルやディレクトリへデフォルトで`root`を設定していきます。

変えたい場合は「別途`chown`を実行する」までもなく`COPY --chown=user`のような指定が可能です。

## 外部リンク

* [Docker USER命令の理解](https://www.docker.com/ja-jp/blog/understanding-the-docker-user-instruction/)

## 脚注
[^1]: Windowsコンテナもありますが、そもそも`USER`や`chown`といったUnix系の権限設定機能そのものがLinuxコンテナ専用なので、今回の議論対象には入りません。
【初心者向け】Pythonでありがちエラーとその対処法

# はじめに
Pythonは人気なプログラミング言語ですが、初心者から上級者まで陥りやすいエラーが多数存在します。
今回は私が遭遇した事例を基にエラーとその対処方法を備忘録を兼ねて記事にします。
# 1. IndentationError: インデント（字下げ）に関するエラー
```python
def greet():
print("Hello!")
```
###### エラーメッセージ
```pyhon
IndentationError: expected an indented block
```
###### 原因

Pythonはインデント（スペースやタブ）で処理のブロックを示す言語です。上記のコードでは`def greet():`のあとにインデントがないためエラーになります。

###### 対処法
```python
def greet():
    print("Hello!")  # ← ここをスペース4つ or タブで字下げ
```
# 2. NameError: 変数名が見つからないエラー

###### 発生例
```python
print(score)
```
###### エラーメッセージ
```python
NameError: name 'score' is not defined
```
###### 原因

変数`score`がまだ定義されていない（またはタイプミス）状態で呼び出しています。

###### 対処法
```python
score = 100
print(score)
```
先に変数を定義しましょう。もしくは、変数名が正しいか確認しよう（例：`socre`などの打ち間違いも多い）。

# 3. TypeError: 型が合っていないエラー

###### 発生例
```python
age = 25
print("あなたの年齢は" + age + "歳です")
```
###### エラーメッセージ
```python
TypeError: can only concatenate str (not "int") to str
```
###### 原因

文字列（`str`）と数値（`int`）をそのまま「+」で連結しようとしたため。

###### 対処法
```python
print("あなたの年齢は" + str(age) + "歳です")
```
または`f-string`を使うのが便利
```python
print(f"あなたの年齢は{age}歳です")
```
# 4. IndexError: インデックスの範囲外アクセス

###### 発生例
```python
colors = ["red", "green", "blue"]
print(colors[3])
```
エラーメッセージ
```python
IndexError: list index out of range
```
###### 原因

リストのインデックスは0から始まるので、colors[3]は存在しない要素を指定しています。

###### 対処法
```python
print(colors[0])  # red
print(colors[-1])  # blue（最後の要素）
```
インデックスを使う前に`len(colors)`で要素数を確認しよう。

# 5. SyntaxError: 文法エラー

###### 発生例
```python
if x == 5
    print("x is 5")
```
###### エラーメッセージ
```python
SyntaxError: expected ':'
```
###### 原因

`if`や`for、def`などの文は「:（コロン）」が必要です。

###### 対処法
```python
if x == 5:
    print("x is 5")
```
# 6. ValueError: 値の型はOKだけど中身がダメ

###### 発生例
```python
num = int("abc")
```
###### エラーメッセージ
```python
ValueError: invalid literal for int() with base 10: 'abc'
```
###### 原因

`int()`に文字列を渡すこと自体はOKだが、「数字っぽい文字列」でなければ変換できません。

###### 対処法
```python
num = int("123")  # OK
```
入力値を処理する前に`.isdigit()`などでチェックすると安心
```python
s = "123"
if s.isdigit():
    num = int(s)
```
# まとめ

|エラー|エラーの内容|対処法|
|:-:|:-:|:-:|
|IndentationError|インデントに関するエラー|スペースを４つ開けるorタブで字下げ|
|NameError|変数が定義されていないorタイプミス|変数を定義するorスペルチェック|
|TypeError|間違った型を渡してしまった|文字列型と整数型を混ぜない|
|IndexError|インデックスの範囲外アクセス|インデックスは0から始まるので要素数を確認|
|SyntaxError|文法エラー|正しい文法か確認|
|ValueError|引数が不適切|適切な引数を渡す|

エラーは初心者のつまずきポイントでもあり、成長のチャンスでもあります。
エラーは問題解決の手掛かりになります。恐れずに、エラーメッセージをよく読み効率的かつ適切に対処していきましょう。
macOS で Podman を動かす


インストール

```
brew install podman
```

確認

```
podman --version
```

初期設定

```
podman machine init
```

起動

```
podman machine start
```

停止

```
podman machine stop
```

`.zshrc` にエイリアスを追記（任意）

```
alias docker=podman
```


確認

```
podman pull nginx # nginx の Docker イメージを pull
podman run --rm -d --name nginx -p 8080:80 nginx # 起動
```

> http://127.0.0.1:8080 にアクセス

起動中のコンテナ確認

```
podman ps
```

> CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS        PORTS                 NAMES
> 023a2239c8b0  docker.io/library/nginx:latest  nginx -g daemon o...  5 minutes ago  Up 5 minutes  0.0.0.0:8080->80/tcp  nginx


停止中のコンテナも含め確認

```
podman ps -a
```

> CONTAINER ID  IMAGE                           COMMAND               CREATED        STATUS                   PORTS                 NAMES
> 53b2de77d62f  quay.io/podman/hello:latest     /usr/local/bin/po...  24 hours ago   Exited (0) 23 hours ago                        boring_taussig
> 023a2239c8b0  docker.io/library/nginx:latest  nginx -g daemon o...  6 minutes ago  Up 6 minutes             0.0.0.0:8080->80/tcp  nginx


コンテナの停止

`docker stop <CONTAINER IDまたはNAME>`

```
podman stop 023a2239c8b0
```
Databricksのカタログクラスターにライブラリとinitスクリプトを許可リストに追加する方法

管理者より下記を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2547888/c15f893d-c337-440c-9189-04f9fcb04550.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2547888/dfcd6932-7ceb-4dcd-b0fa-8f7789fbcdd8.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2547888/edfe4772-3620-43a5-b190-b8c16728336d.png)
Power BI 要件定義ヒアリング

# はじめに
こんにちは！
記事をご覧いただきありがとうございます。
本記事では、PowerBIの要件定義の段階で実施した「要件定義ヒアリング」について、実際に行った内容や、気づきや反省点をまとめています。
ぜひ最後までご覧ください！

# 目次
4.  [要件定義ヒアリングとは？](#要件定義ヒアリングとは)
1. [ヒアリングで確認したこと](#ヒアリングで確認したこと)
1.  [実際のやり取りでの気づき](#実際のやり取りでの気づき)
4.  [最後に](#最後に)

# 要件定義ヒアリングとは？
PowerBI のレポートを作成する前に、「何を、誰のために、どのように」可視化するかを明確にするための確認プロセスです。

事前に業務や目的を深く理解することで開発後のユーザーとの認識齟齬を防ぎ、開発効率も格段に上げることができます。

# ヒアリングで確認したこと
今回は以下のような観点について、事前に作成した「ヒアリング項目表」をベースに確認を進めました。
表に記載していた項目は一通り確認できましたが、それ以外の観点については深掘りできませんでした。

### スケジュール・進行管理
- 要件定義から開発、運用までのスケジュール感のすり合わせ
- 中間レビューやステークホルダー確認のタイミングの共有
- 「どの段階でどのレベルの完成度にするか」といったマイルストーンの確認

### 利用目的・背景
- なぜこのレポートを作成したいのか

### 利用者とシーン
- 誰がどこで使うか（部門・役職・タイミング）
- PC／モバイル／Teams などの使用環境

### 表示したい指標・分析軸
- KPI（売上、目標達成率、前年同月比など）
- 比較したい軸（地域、カテゴリ、商品別など）

### データについて
- 使用するデータソースと更新頻度
- データの正確性・マスタの所在
- 粒度（日次／月次／商品単位など）

### セキュリティ・権限制御
- 部署ごと・個人ごとの閲覧制御の有無（RLS）
- 誰にどこまで見せるか

### 運用・配信
- 毎日更新は必要か
- 自動配信やTeams連携の希望はあるか


# 実際のやり取りでの気づき
実際にヒアリングをしてみて、以下のような気づきがありました。

#### 良かったこと
ヒアリングの際、あらかじめ作成しておいた大まかな要件定義書とヒアリング項目表、簡単なモックアップをベースに進行できました。
「この認識で合っていますか？」といった確認をその都度挟みながら進めたことで、ユーザーとの認識のすり合わせがスムーズにでき、具体的なイメージも共有しやすくなったと感じています。
また、初めにサンプル画面（モックアップ）を提示したことで、ユーザーも使う場面を想像しやすく、「実際の運用を意識した視点」で意見をもらいやすくなりました。
さらに、各レポートに含まれるビジュアルを1つずつ見せながら、「このグラフで見たい指標は何か？」「この形式で見やすいか？」といった細かな確認を行えたのも良かった点です。

#### 反省点・課題
一方で、一部の項目については、こちらから「こういう表示にしてはどうですか？」と提案をした際に、背景の説明が不足していたため、ユーザーに戸惑いを与えてしまった印象がありました。
今後は、提案の前に「なぜこの形式を考えたか」「どういう目的を意識しているか」など、簡単な背景や意図を添えて伝えるように意識したいと思います。
また、アジェンダの分類が大まかすぎたため、時間内にすべての項目を聞き終えることができませんでした。今後は、各トピックにかける時間の目安をあらかじめ設けておくき、それでも時間が足りない場合は「この話は5分だけで聞きます」と明言して進行する」といった時間配分の工夫も取り入れたいと感じました。

# 最後に
今回の経験を通して、要件定義ヒアリングの進め方や伝え方の大切さを改めて実感しました。次回のヒアリングではよりスムーズかつ的確な確認・提案ができるよう実践していきたいと思います。
最後まで読んでいただきありがとうございました！
SC-081v3 SSL/TLS証明書の最大有効期間が47日に短縮―Apple、Google、Microsoft、Mozillaが全票賛成


2025年4月14日、IT之家の報道によると、SSL/TLS証明書はウェブサイトのセキュリティを確保するための重要なプロトコルですが、Appleは以前、CA/Bフォーラム（SSL/TLS証明書の運用基準を管理する業界組織）に対して、すべての証明書の有効期間を45日に短縮する提案を行っていました。  
議論を重ねた結果、4月13日にCA/Bフォーラムのサーバー証明書ワーキンググループにおいて提案「SC-081v3」が投票で承認され、最終的に公開信頼TLS証明書の有効期間および検証データの再利用期間を段階的に短縮することが決定されました。

## 提案の概要

- **証明書の有効期間**  
  現在の最大398日から段階的に短縮され、最終的には47日にすることが決定されました。なお、Appleが当初提案した45日よりやや延長された形となっています。

- **SANデータ（Subject Alternative Name）検証情報の再利用期間**  
  証明書に記載されるSAN検証データの再利用期間も短縮され、最終的には10日間となります。

- **審査段階**  
  提案はCA/Bフォーラムの規約要件を満たしており、現在知的財産権（IP）審査段階に入っています。

## 投票結果（IT之家付記）

### 証明書発行機関（CA）側

- **賛成票：25票**  
  以下は賛成票を投じた主な組織（※一例）：
  1. Amazon  
  2. Asseco Data Systems SA（Certum）  
  3. Buypass AS  
  4. Certigna (DHIMYOTIS)  
  5. Certinomis  
  6. DigiCert  
  7. Disig  
  8. D‑TRUST  
  9. eMudhra  
  10. Fastly  
  11. GlobalSign  
  12. GoDaddy  
  13. HARICA  
  14. iTrusChina  
  15. Izenpe  
  16. NAVER Cloud Trust Services  
  17. OISTE Foundation  
  18. Sectigo  
  19. SHECA  
  20. SSL.com  
  21. SwissSign  
  22. Telia Company  
  23. TrustAsia  
  24. VikingCloud  
  25. Visa

- **棄権票：5票**  
  棄権票を投じた主な組織（※一例）：
  - Entrust  
  - IdenTrust  
  - Japan Registry Services  
  - SECOM Trust Systems  
  - TWCA

### 証明書消費者側

- **賛成票：4票**  
  Apple、Google、Microsoft、Mozilla の各ブラウザ開発者が全票賛成しました。

## SSL/TLS証明書が果たす役割

SSL/TLS証明書は、公開鍵基盤（PKI）を利用して、以下のようにウェブサイト間で安全な通信を実現します。

- **サーバー認証**：  
  証明書により、利用者はウェブサイトの真正性を確認できます。ブラウザはアドレスバーに「HTTPS」表示や鍵アイコン、場合によっては緑色のアドレスバーを表示します。

- **暗号化通信**：  
  クライアントとサーバー間の通信は証明書を用いて暗号化され、第三者によるデータの盗聴や改ざんを防ぎます。

- **信頼性の担保**：  
  証明書は発行時点での情報（例：ドメイン所有者や組織情報）が正確であることの証明であり、時間が経過するにつれて情報が陳腐化するリスクがあるため、短期間の有効性が望まれています。

## なぜ短命化が必要なのか

提案の背景には以下の理由があります：

1. **リスク低減**  
   証明書が万一漏洩した場合、短い有効期間により、攻撃者が悪用できる期間が短縮されます。

2. **情報の鮮度向上**  
   証明書は発行時点での正確な情報に基づきますが、環境変化により情報が古くなるリスクがあるため、定期的な再検証が求められます。

3. **自動化の促進**  
   手動による更新が困難となるため、ACMEプロトコル（例：Let's Encryptが採用）などによる自動更新の仕組みが必須となります。

## まとめ

今回のSC‑081v3提案により、公開TLS証明書の最大有効期間が398日から段階的に短縮され、最終的には47日となることが決定されました。また、SAN検証データの再利用期間も10日に短縮される見込みです。主要なブラウザや証明書発行機関（CA）から全票賛成を得たことから、この変更は間違いなく業界標準へと反映されるとみられます。  
今後、システム管理者は証明書自動更新の仕組みを整え、変更に備える必要があります。
VSCodeによる効率的な業務管理

## 目次
1. [はじめに](#1-はじめに)
2. [基本コンセプト](#2-基本コンセプト)
3. [システムの詳細](#3-システムの詳細)
   1. [会議の管理](#31-会議の管理)
   2. [タスク管理](#32-タスク管理)
   3. [会社関連情報](#33-会社関連情報)
   4. [宝箱](#34-宝箱)
4. [実践的な活用方法](#4-実践的な活用方法)
   1. [会議準備の効率化](#41-会議準備の効率化)
   2. [日報作成の効率化](#42-日報作成の効率化)
   3. [VSCodeの検索機能の活用](#43-vscodeの検索機能の活用)
   4. [優先順位付けの明確化](#44-優先順位付けの明確化)
5. [実装手順](#5-実装手順)
6. [メリット](#6-メリット)
7. [まとめ](#7-まとめ)

## 1. はじめに

システムエンジニアの業務効率を飛躍的に向上させるシンプルながら強力な方法を紹介します。この手法は、日次・週次・月次などの定例会議と非定例会議、そして日常のタスク管理を VSCode のワークスペース機能を使って統合的に管理するアプローチです。

## 2. 基本コンセプト

このシステムの核となるのは、以下の４つの主要ディレクトリです：

```
WorkSpace/
├── 会議/
│   ├── A会議/
│   ├── B会議/
│   └── C会議/
├── タスク/
│   ├── Aタスク/
│   ├── Bタスク/
│   └── Cタスク/
├── 会社/
│   └── ...（好きに構造化）
└── 宝箱/
    └── ...（良かった資料等を投入）
```

各ディレクトリには日付形式のファイル（例：`yyyymmdd.md`）を作成し、VSCode のワークスペース機能を用いて統合的に管理します。

## 3. システムの詳細

### 3.1. 会議の管理

会議ディレクトリの下に各会議のサブディレクトリを作成し、開催日ごとに日付形式のファイルを作成します。

```
会議/
├── A会議/
│   ├── 20250416.md
│   └── 20250409.md
├── B会議/
└── C会議/
```

会議の前日に、翌日の会議用のファイルを作成し、以下のような内容を記入しておきます：

```
# A会議 2025/04/16

## 進捗（やること・やったこと）
- プロジェクトXの実装が80%完了
- テスト環境の構築完了

## 課題（相談）
- DB接続に関する問題が発生、解決策を相談したい
- リソース不足の懸念

## 共有（報告・連絡）
- 新機能のリリース日を5/1に決定
- チームメンバーの休暇予定
```

### 3.2. タスク管理

タスクディレクトリの下に各タスクのサブディレクトリを作成し、日ごとの進捗や予定をファイルに記録します。

```
タスク/
├── Aタスク/
│   ├── 20250416.md
│   └── 20250415.md
├── Bタスク/
└── Cタスク/
```

### 3.3. 会社関連情報

会社ディレクトリには、業務に関連する各種情報を好きな構造で整理します。

### 3.4. 宝箱

「宝箱」ディレクトリには、有用な資料や参考になる情報を随時追加していきます。後で参照したい情報を保存するナレッジベースとして機能します。

## 4. 実践的な活用方法

### 4.1. 会議準備の効率化

明日の会議を確認し、各会議ディレクトリに明日の日付のファイルを作成します。以下の内容を記入しておきます：

- 何を話すか
- 議論すべき内容
- 相談したいこと

これにより、会議での発言内容を事前に整理でき、会議の生産性が向上します。

### 4.2. 日報作成の効率化

タスクファイルに日々の進捗を記録することで、日報作成が容易になります。進捗（やること、やったこと）、課題（相談）、共有（報告・連絡）といった要素ごとに整理しておけば、日報や朝会での報告内容を簡単に準備できます。

### 4.3. VSCodeの検索機能の活用

`Ctrl+P`を使用することで、特定の日付のファイルを一括検索できます。例えば「20250416」と入力すれば、その日に関連するすべてのファイルを瞬時に検索できます。これにより、特定の日の会議内容やタスク状況を素早く把握できます。

### 4.4. 優先順位付けの明確化

会議ファイルを確認することで、各会議の重要度や優先順位を判断できます。内容が薄い会議は優先度を下げるなど、効率的な時間配分が可能になります。

## 5. 実装手順

1. **VSCodeのインストール**（既に使用している場合はスキップ）
2. **ディレクトリ構造の作成**
   - 会議、タスク、会社、宝箱の4つの主要ディレクトリを作成
   - 各主要ディレクトリに適切なサブディレクトリを作成
3. **ワークスペースの設定**
   - VSCodeで「File」→「Add Folder to Workspace」で各ディレクトリを追加
   - 「File」→「Save Workspace As...」でワークスペースファイルを保存
4. **拡張機能のインストール**
   - Markdown All in One（Markdown編集機能強化）
   - Office Viewer（Excel、PDFなどのプレビュー）
   - その他必要な拡張機能

## 6. メリット

このシステムを導入することで以下のメリットが得られます：

1. **情報の一元管理**: 会議、タスク、参考資料などすべての情報を一箇所で管理
2. **検索性の向上**: 日付ベースの命名規則により、特定の日の情報を瞬時に検索可能
3. **会議準備の効率化**: 会議内容を事前に整理することで、会議の生産性が向上
4. **タスク管理の簡素化**: 日々のタスクを構造化して管理することで、優先順位付けが容易に
5. **日報作成の負担軽減**: 日々記録した情報を活用して、日報作成が簡単に

## 7. まとめ

VSCodeのワークスペース機能を活用したこのディレクトリ管理システムは、特別なツールを必要とせず、エンジニアが日常的に使用する環境内で情報を効率的に管理できる点が最大の強みです。日々の会議準備やタスク管理に悩んでいる方は、ぜひ試してみてください。

この方法を導入することで、「明日の会議で何を話すか」「タスクの優先順位はどうすべきか」といった日常的な悩みから解放され、業務効率が「爆上がり」します。
[HTML入門]hidden属性とは？フォームで使う「見えないデータ」の仕組みを解説

# はじめに
フォームを使って情報を送信するWebページを作る中で、「ユーザーに見せたくはないけど、裏でデータを送りたい」というケースが発生することがあります。

その際に活用できるのが、**hidden属性**です。

# ①hidden属性とは？
HTMLにおけるhiddenは、**見た目には表示されないが、フォーム送信時には値を持たせておける**属性です。

## 基本構文:
```html
<input type="hidden" name="user_id" value="123">
```
- type="hidden"　→　ユーザーには見えない
- name="user_id" →　送信先で取り出すキー
- value="123" →　実際に送られる値

# ②どんなときに使うの？
![IMG_7783.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/463bda9c-4388-4f52-a47a-d2c2a34e00e1.jpeg)

# ③Laravelでの使用例
```blade
<form action="{{ route('posts.store') }}" method="POST">
    @csrf
    <input type="hidden" name="user_id" value="{{ Auth::id() }}">
    <input type="text" name="title" placeholder="タイトル">
    <button type="submit">投稿する</button>
</form>
```
- @csrf → Laravelのセキュリティ対策
- Auth::id() →　ログイン中のユーザーIDを取得してhiddenに渡している

# ④サーバー側(コントローラー)での受け取り
```php
public function store(Request $request)
{
    $userId = $request->input('user_id');

    Post::create([
        'user_id' => $userId,
        'title' => $request->input('title')
    ]);
}
```

# ⑤注意点
- hiddenの値は**HTMLソース上で見える**ので、**改ざんされる可能性がある**
- 信頼できない値は、**サーバー側で再確認・認証**を行うのが安全

# ⑥まとめ
![IMG_7784.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/29fb0fdd-1383-4508-8683-437257cab98d.jpeg)

ユーザーには見せたくないけれど、送信しておきたい情報を扱う際に、hiddenはとても便利です。
Laravelでもよく使われるので、フォーム構築の中で自然に使いこなせるようになっておくと実務でも役立ちます！
【日本解禁】Claudeのインターネット検索機能を使ってみる

# はじめに
[株式会社PROMPT-X](https://www.prompt-x.jp/profile)の天辰です。

朝会社のメールを開いたらこんな素敵なメールが！

https://www.anthropic.com/news/research

「Claudeがリサーチを新たな領域へと導く」だそう。つまり、Claudeで待望のインターネット検索機能が使えるようになったって言うお知らせです。
これまで、ChatGPTに頼っていた検索がついに解禁です。

# インターネット検索早速使ってみる
先程のリリースページの要約をお願いしてみます。

## 設定方法
### 利用可能なプランと地域
リサーチ機能は現在、アメリカ合衆国、日本、ブラジルのMax、Team、Enterpriseプランユーザー向けにベータ版として提供されています。ウェブ検索機能は2024年3月に米国で開始され、現在はブラジルと日本でも利用可能で、これらの地域の有料プランでは自動的に有効になっています。

設定はとてもカンタンで、ClaudeのWeb版を開いて右下の設定から連携機能を開いて`ウェブ検索`を有効にするだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351028/17f1b867-5ec5-442c-99b6-eff879782672.png)


## Web検索開始！

`ウェブを検索しています`の表示とともに検索が走っています。
（検索エンジンは何なんでしょうね？）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351028/50f33f25-32ea-4def-b1bf-64f5e8dc49a1.png)

## 検索と要約の結果

```
Anthropicの研究ページについて要約をご希望ですね。検索して最新情報を確認します。

Anthropicの研究ページについて要約します。

Anthropicは信頼性が高く、解釈可能で、操作可能なAIシステムの構築に取り組むAI安全性および研究企業です。同社は大規模AIシステムを開発し、研究チームがより安全で操作可能、信頼性の高いモデルの作成を支援しています。

最近の重要な発表には以下が含まれます：

1. 「Research」機能とGoogle Workspaceの統合という2つの新機能が導入され、Claudeがより情報に基づいた有能な協力者になりました。Research機能を使用すると、Claudeは内部の作業コンテキストとウェブの両方を検索して、より迅速に意思決定を行い、行動を起こすのを支援します。

2. 「Anthropic Economic Index」が発表され、AIの実際の経済的影響と使用状況を分析するデータセットが公開されました。この研究ではタスクレベルでのAI使用状況を追跡し、どの職業がAIを活用しているかを分析しています。

これらの取り組みは、社会への影響を考慮しながら、責任あるAI開発の実践を示すというAnthropicの使命に沿ったものです。より詳細な情報は、各発表のリンクから確認できます。
```

# 今後の可能性
## 連携機能との組合せ
しばらく見ないうちにGoogleカレンダーとかも連携できるようになていました。
`Claudeの使用中やその他の同意時に、より多くのコンテキストを得るため、他のアプリやサービスを参照することをClaudeに許可します。`というエージェント的な機能ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/351028/7724eca4-5854-4d5d-a2bd-6c5602642f28.png)

## Google Workspace連携で広がる可能性
Claudeは以下のGoogleサービスと連携できるようになってるっぽいですね。

- Google Drive：ドキュメントやファイルへのアクセスと検索
- Google Calendar：予定表のイベント情報へのアクセスと検索
- Gmail：メールメッセージへのアクセスと検索

さらに、GitHubリポジトリのファイル読み込み機能も追加され、開発者にとっても便利なツールとなっているみたい。

以上！　速報でした

# PROMPT-Xについて
東京・鹿児島・高知の3拠点で、商用時系列データベースCLOUDSHIPと可視化ソフトRealBoardを軸としたIoTプラットフォーム向けソフトウェアの開発・販売を行うメーカーです。IoT関連の開発支援サービスやソリューション開発も提供しています。鹿児島・高知での[開発エンジニア採用](https://www.prompt-x.jp/recruit)を強化中で、PROMPT-Xで働きたいと思える情報発信に努めています。
個人的備忘録：失敗しないDB設計のために、string型とenum型の特徴を整理してみた

## はじめに
データベースの設計において、カラムのデータ型を適切に設定することは重要です。

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

特に「enum」と「string」は頻繁に利用されるデータ型であり、それぞれの特徴を理解することでより効率的で適切なデータ設計が可能になります。

## enum型とは
`enum`型は、カラムに格納できる値をあらかじめ決めておき、その中のいずれかを指定して使用するデータ型です。MySQLなどでよく使われます。

### 特徴
- 許容される値が明確に定義されているため、誤ったデータの挿入を防ぐことができる。
- 内部的に数値として保存されるため、保存領域を節約できる。
- 定義された値以外は格納できないため、柔軟性に欠ける面もある。

### 利用例
```sql
CREATE TABLE users (
    id INT PRIMARY KEY,
    role ENUM('admin', 'user', 'guest') NOT NULL
);
```

**参考文献**

https://qiita.com/igm50/items/8c9788d4ba5868642c69

https://www.akkodis.co.jp/candidate/insight/column_128

## string型（VARCHAR型）とは
`string`型（一般的にはVARCHAR型として知られています）は、可変長文字列を格納するためのデータ型です。

### 特徴
- 定義した最大文字数まで自由にデータを格納できる。
- 許容される値を明示的に制限しないため、自由度が高い。
- ENUM型よりも柔軟だが、不正なデータが混入する可能性がある。

### 利用例
```sql
CREATE TABLE users (
    id INT PRIMARY KEY,
    username VARCHAR(255) NOT NULL
);
```

**参考文献**

https://www.ibm.com/docs/ja/informix-servers/12.10.0?topic=data-insert-varchar

https://qiita.com/nuts_468/items/4db32c8066c1d0772c6b

## enum型とstring型の使い分け

| データ型 | 用途 | メリット | デメリット |
|----------|------|----------|------------|
| enum     | 事前に決まった選択肢のみを格納する場合 | データの整合性、領域節約 | 変更が困難、柔軟性に乏しい |
| string   | 自由なテキストを格納する場合 | 柔軟性が高い | データの不整合が発生しやすい |

## まとめ
データ型の選択は設計段階での重要な決定事項です。enum型はデータの整合性を保つために非常に有用ですが、将来的に変更が予測される場合は柔軟性のあるstring型を利用する方が良いと思います！

***データの特性や運用方法に応じて適切に選択することが重要です！***
Firebase Studioでタイムチケット TimeTicketを作ってみた

- チケット一覧を表示する機能を追加
- チケットを検索するダイアログを追加
- 無限ループ

<iframe width="560" height="400" src="https://www.youtube.com/embed/6vVZjNgG-ps?si=LPzL9exTxJ1Lvg5y" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
【CSS入門】見た目とレイアウトに関わる重要プロパティ13選をまとめて整理してみた【初心者向け備忘録】

# はじめに

CSSでレイアウトや文字装飾を整える中で、  
`line-height`, `z-index`, `position`, `text-align` などのプロパティは必ずと言っていいほど出てきます。

しかし、意味が似ていたり効果がわかりにくかったりするものも多いですよね…。

この記事では、**よく使うけど混乱しやすいCSSプロパティ13個を、自分用の備忘録として整理**してみます。

---

# ① `line-height`（行の高さ）

```css
line-height: 1.6;
```

- 行間を調整するプロパティ
- 数値（1.5など）または px, % でも指定可能
- **可読性に影響するので重要**

# ②z-index（重なりの順序）
```css
z-index: 10;
```
- **要素の重なり順を決める**
- position が relative, absolute, fixed などの時に有効
- 数字が**大きいほど上に表示**

# ③position: fixed（画面に固定配置）
```css
position: fixed;
top: 0;
left: 0;
```

- ブラウザの表示領域に固定
- スクロールしても動かない（例：ヘッダー、フッター）
- 親要素の影響を受けない

# ④position: relative / absolute
```css
/* relative */
position: relative;
top: 10px;

/* absolute */
position: absolute;
top: 0;
left: 0;
```
- relative: **元の位置を基準に移動**
- absolute: **親の relative 要素を基準に絶対配置**
- よく一緒に使われる

# ⑤text-align（テキストの揃え）
```css
text-align: center;
```
- 要素内の**テキストやインライン要素の配置**を指定
- left, center, right, justify など

 # ⑥letter-spacing（文字間のスペース）

 ```css
 letter-spacing: 0.1em;
 ```
 - **文字同士の間隔**を調整
 - タイトルや見出しでよく使われる

 # ⑦padding（内側の余白）
```css
 padding: 20px;
```
- 要素の内側のスペース（内容と枠の間）
- padding: 上 右 下 左 の順で指定可

# ⑧margin（外側の余白）
```css
margin: 20px;
```
- 要素の**外側のスペース**（他要素との間）
- margin: auto; で中央揃えにも使える

# ⑨display: inline-block
```css
display: inline-block;
```
- **横並び可 + 幅・高さが指定できる**
- インライン要素のように並ぶが、ブロックの特性もある

# ⑩float: left;
```css
float: left;
```
- 要素を**左に寄せて、横に回り込ませる**
- 古いレイアウト手法だが、今も一部で使われる

# 11.clear
```css
clear: both;
```
- float の影響を打ち消す
- clearfix のように使って、要素の重なりを防止

# 実務的な使い方まとめ
![IMG_7782.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/6bc6ed6b-694e-4995-877e-7bd50645cef2.jpeg)

# まとめ
- CSSプロパティの多くは「空間」「文字」「重なり」を制御する
- 名前が似ていて混乱しやすいけど、イメージしながら書くと理解が進む
- 今後は Flexbox や Grid に進む前に、これらの基礎をしっかり整理！
Firebase Studioでジモティーを作ってみた

- 商品の追加機能を実装
- 商品一覧の表示画面を実装
- 任意の場所に商品の追加ボタンを追加

<iframe width="560" height="400" src="https://www.youtube.com/embed/KSAcFzblrek?si=1h-izRhugh7yW8WN" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
初学者にもわかるWebページが表示されるまでの流れ

皆さんがブラウザでWebページを見る時、裏側では何が起きているのでしょうか？この記事では、URLを入力してから画面に表示されるまでの流れを、初学者の方にもわかりやすく解説します。
## Webページ表示の基本的な流れ（4ステップ）

1. **URLがDNSサーバーにリクエストされ、IPアドレスがレスポンスされる**
2. **IPアドレスを使ってウェブサーバーにHTTPリクエストを送る**
3. **ウェブサーバーがリクエストされたコンテンツをレスポンスする**
4. **ブラウザがHTMLを解析してDOMを構築し、画面に表示する**

この4ステップを詳しく見ていきましょう。

## 具体例：「http://abehiroshi.la.coocan.jp/」にアクセスする場合

### ステップ1：DNSルックアップ

まず、ブラウザは「abehiroshi.la.coocan.jp」というドメイン名をIPアドレスに変換する必要があります。

```
ブラウザ → DNSサーバー「abehiroshi.la.coocan.jpのIPアドレスを教えて」
DNSサーバー → ブラウザ「IPアドレスは210.189.xxx.xxxだよ」（例）
```

**ポイント**：
- ドメイン名とは、人間が覚えやすいWebサイトの住所です
- IPアドレスとは、インターネット上のコンピュータを特定する番号です
- DNSサーバーは、ドメイン名とIPアドレスの対応表を持っています

### ステップ2：HTTPリクエストの送信

次に、ブラウザは取得したIPアドレスのサーバーにHTTPリクエストを送信します。

```
ブラウザ → Webサーバー「210.189.xxx.xxxさん、トップページをください」
```

**ポイント**：
- HTTPとは、WebブラウザとWebサーバー間の通信プロトコル（約束事）です
- リクエストには「どのページが欲しいか」などの情報が含まれています

### ステップ3：サーバーからのレスポンス

Webサーバーは、リクエストに対応するコンテンツを返します。

```
Webサーバー → ブラウザ「はい、トップページのHTMLファイルです」
```

**ポイント**：
- サーバーは、HTMLファイル、画像、CSSなどのコンテンツを返します
- 見つからない場合は「404 Not Found」などのエラーを返します

### ステップ4：ブラウザでの表示

最後に、ブラウザはHTMLを解析して画面に表示します。

```
ブラウザ「受け取ったHTMLを解析して、画面に表示しよう」
```

**ポイント**：
- ブラウザはHTMLを解析してDOM（Document Object Model）を構築します
- CSSを適用し、JavaScriptを実行します
- 最終的に画面にレンダリング（描画）されます

## まとめ

Webページの表示は、このシンプルな4ステップで行われています。GoogleやYahooなどの検索エンジンを使う場合も、クリックした後はこの同じプロセスが実行されています。

かつては、URLを直接入力する必要がありましたが、現在では検索エンジンやリンクを通じて簡単にアクセスできるようになりました。

この基本的な流れを理解しておくと、Web開発やネットワークの勉強を進める上で大きな助けになります。

---

皆さんも、次にブラウザでWebページを開く時には、裏側でこの4ステップが実行されていることを思い出してみてください。
【MCP】生成AIでGA4データを分析してみた

# 背景
GA4のMCPが作られていると知った。
MCPについても理解するためにもなじみの深いGA4にて活用してみた。

※MCPについては、MCPについて説明している記事が沢山あるのでそちらを参照いただきたい

# GA4のMCPでは何が出来る？
GA4のデータに自然言語でアクセスすることが出来る。
Google Analytics Data APIで出来ることはほぼ出来ると考えてよい

他のMCPと組み合わせればGA4データをcsvで出力してローカルファイルに保存するなど可能性は無限

# 手順
- こちらのサイトの手法に則ればできる
    - https://mcp.so/server/eno-graph_mcp-server-google-analytics/MCP-Mirror?tab=content

ダウンロード(ブラウザなど)
- git
- node.js
- Claude desktop

powershellやターミナル
- 依存関係などを　コマンドでインストール
- ビルド
- 環境変数の設定
- サーバの起動


GCP console
- GCPにてAPI有効化
- サービスアカウント作成
    - 鍵となるjsonファイルダウンロード

GA4
- プロパティの権限をサービスアカウントに付与
- プロパティIDを確認

エディタ
- Claude desktopのconfigファイルを指示通りに編集する

時間としては15~30分くらいで行える。

# 使用例
QiitaをGA4につなぎ、ページタイトルごとのページビューをランキング化してもらった

```
ページタイトルごとの直近1週間のpage_view数ランキングを表形式で出力して。
どのような特徴がみられるかも考察して
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998651/aedf9b59-f2a8-44d6-aac0-4fe4e5f121c1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2998651/16af64e5-92cb-45fc-8b66-8893f44fc194.png)

PVランキング作るという簡単なことでも探索レポートにおいては少し手間がかかっていた。
自然言語で簡単に質問できるのはとても便利そう。
また、結果を好きな形に簡単に整形出来るのも良いと感じた

## 今後の構想やメモ
現状はAPIの中でも特定のものしかMCPサーバとしては作成されていない。
しかし、APIがあるものは技術的にはMCPとして実装が可能だと思う。
今後のGA4のMCPに全てのAPIの機能が搭載されることを期待したい

- 各種設定を尋ねることが出来れば便利そう
    - Googleシグナルはオンになっていますか?
    - カスタムディメンション一覧を出力して表形式にしてください
        - カスタムディメンションなどの設定にアクセスするAPI自体はあるのでMCPが開発されればできそう
- 自然言語でカスタムディメンションにアクセスする際に、カスタムディメンションに説明が付与されていたらアクセスされやすそう
    - 今後GA4の設定の際にLLMのための説明を自然言語で追加することが必須になるかも
- GA4データを他のサービスと連携し,書き込みながら分析すると便利そう
    - 社内ドキュメントのサービスと連携し、自然言語にてGA4データを分析した結果を社内ドキュメントに書き込む運用ができそう
- サービスアカウントではなく、oauth認証をすることを試みたが断念した
    - GCPの認証について正しい知識を付けたい
- 社内にこのMCPにてGA4を分析する環境を作れれば非分析者でも手軽にデータにアクセスできるようになりそう
    - しかし、まだまだセキュリティ上の懸念があるため導入は難しそう
Firebase Studioでタイミー Timeeを作ってみた

- リアルタイム検索機能を追加しました
- ユーザー登録とログイン機能を実装しました
- 仕事の給与が表示されました

<iframe width="560" height="400" src="https://www.youtube.com/embed/slKcZBpOxmY?si=kYpKbrV6E4ed8itF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
Firebase Studioでマクドナルド モバイルオーダーアプリを作ってみた

- 位置情報に基づいて近くの店舗を検索出来た
- メニューが画像付きで表示された
- 決済方法について説明された

<iframe width="560" height="400" src="https://www.youtube.com/embed/wPZZxF5kmWs?si=U-5K4d_LqlSvpC1d" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
個人的備忘録：複数環境のバージョン管理に適した tenv について調べてまとめてみた

## はじめに

開発現場では、Python や Terraform、Node.js など様々なツールのバージョン管理が求められる場面が多くあります。
これまで pyenv や tfenv、nodenv といった専用のバージョン管理ツールがありましたが、近年注目されているのが `tenv` という統合型のバージョンマネージャです。

https://dev.classmethod.jp/articles/try-tenv-terraform-version-manager/

本記事では、`tenv` の概要や特徴、使い方についてわかりやすく紹介します。

## 書こうと思ったきっかけ

Terraform や Python を Homebrew や直接インストールすると、バージョンの切り替えが面倒で管理しづらいと感じていた中で、`tenv` を知りました。

実際に調べてみたら便利だったため、備忘録としてまとめておきます。

## PythonやTerraformをHomebrewでインストールするデメリット

- バージョンの指定や切り替えが難しい
- 複数プロジェクトで異なるバージョンを使うときに手間がかかる

例えば、Terraform 1.4 を使うプロジェクトAと、1.6を使うプロジェクトBがあった場合、Homebrew だと手動でインストールし直す必要があります。

## `tenv` とは？

- Rust製の統合型バージョンマネージャ
- 複数の言語・CLIツールに対応（Python, Node.js, Terraform, Go, Rubyなど）
- `~/.tool-versions` で各プロジェクトにバージョンを固定可能（asdfと互換）
- 高速・軽量な動作が特徴

**参考文献**

https://tech.guitarrapc.com/entry/2025/01/07/235900

## 特徴まとめ

| 項目         | tenvの特徴                                           |
|--------------|--------------------------------------------------|
| 管理対象     | Python, Node.js, Terraform, Go, Ruby など多数     |
| 管理方法     | `tenv install`, `tenv use`, `tenv list` など       |
| 設定ファイル | `.tool-versions` でプロジェクトごとに固定可能     |
| 使用感       | `asdf`よりもインストールが簡単で高速               |
| 実装言語     | Rust（そのため動作が軽快）                        |

## 使い方（例：Terraform）

```bash
# tenv のインストール（Homebrew推奨）
brew install tenv

# Terraform のインストール
tenv install terraform 1.4.6

# プロジェクトごとにバージョン指定
echo "terraform 1.4.6" >> .tool-versions

# バージョン確認
terraform -v
```

## こんな人におすすめ

- `pyenv`, `tfenv`, `nodenv` など複数のバージョン管理ツールをまとめたい人
- プロジェクトごとにツールバージョンを固定したい人
- `asdf` は便利だけどちょっと重いと感じていた人

## まとめ

`tenv` は、複数の言語やツールのバージョンを効率よく管理できる便利なツールです。

:::note warn
***特に、軽量で高速な点や、`.tool-versions` ファイルによるバージョンの固定ができる点は、開発環境の整備において大きなメリットになります。***
:::

これからバージョン管理ツールを導入するなら、`tenv` を選択肢の一つとしてぜひ検討してみてください！
Firebase Studioでメルカリを作ってみた

- エラー修正にはChatGPTの力を借りた
- Login/Logout機能を実装してくれた
- 検索機能も追加した

<iframe width="560" height="400" src="https://www.youtube.com/embed/TrbBaMy1ehY?si=Mfw2sqrbTZMawqrB" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
Firebase StudioでBooking.comを作ってみた

- Booking.comの検索機能が実装できた
- Booking.comのユーザー登録が実装できた
- Booking.comのログイン/ログアウト機能が実装できた

<iframe width="560" height="400" src="https://www.youtube.com/embed/3TjvjNHkhcg?si=U_4s66TI4Ak3x4Df" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
CADのコンポーネント化

初投稿です。よろしくお願いいたします。
ぼくは建築系のCAD開発を行っています。汎用CADではなく、顧客の要望に従って一品ものを作る受託開発です。用途は構造計算，積算，自動作図がメインですが、どれもオペレーション自体はほぼ同じなので、コンポーネント化することにしました。これにより面倒な描画処理やイベント実装などがなくなり、スピーディな開発が可能になりました。
また、不具合を修正すると同じコンポーネントを使用している別プログラムも次回ビルド時に自動的に修正される、新しく機能を追加すると別プログラムでも利用できる、などコンポーネント化のメリットははかり知れません。
簡単なサンプルプログラムを作る動画をyoutubeにあげていますので、ご覧下さい。
https://youtu.be/e2zNjaslsAs
実際に自分で動かしてみたいという方のためにgithubにもソースをあげています。
https://github.com/yonenagamakoto/CAD-Sample1
ご要望があれば、もう少し実践的なサンプルも紹介いたします。
CursorのWeb検索機能が便利なので備忘録としてまとめてみた

---

## CursorのWeb検索機能が便利なので備忘録としてまとめてみた

2025年2月19日（バージョン0.46.11）よりCursorにWeb検索機能が導入され、非常に便利になったので、要点を整理しておきます。

---

### 🔍 機能概要
- エディタ内のチャット機能を使って、最新のWeb情報を直接検索できる。
- 従来は`@Web`と明示的に指定する必要があったが、**バージョン0.46.11以降はAIが自動的にWeb検索を実行**。

---

### 🛠️ 使用方法
#### 従来の方法
```plaintext
@Web: 検索したい内容
```

#### 新しい方法（推奨）
- **エージェントモードがオン**であれば、特にコマンド指定なしでも自動で最新情報を検索・取得する。

---

### ⚙️ 有効化設定
Cursorの設定画面から以下の手順で設定できます。

1. `Settings` → `Features` → `Chat`を開く
2. 「Always search the Web」オプションをオンにする

---

### 📅 利用可能になった日
- **2025年2月19日（バージョン0.46.11〜）**

---

### 💡 活用シーンの例
- 最新ライブラリ・フレームワークの利用方法を調べる
- API仕様やエラー解決策の最新情報を取得する
- エディタ内でコーディング作業を止めずに情報収集できるため、生産性向上

---

### 🔗 参考リンク
- [公式のリリースノート（Cursor）](https://www.cursor.com/changelog/agent-is-ready-and-ui-refresh)
- [Cursorをより快適に使うための備忘録](https://note.com/yukkie1114/n/n64f741985466)

---

備忘録としては以上になります。  
今後もCursorのアップデートに注目です。
個人的備忘録：これだけ押さえればOK！RDS設定のパラメーター＆オプショングループ入門

## はじめに
Amazon RDS（Relational Database Service）は、マネージドなデータベース環境を簡単に構築・運用できる便利なサービスです。その中でも、「パラメーターグループ」と「オプショングループ」は、RDSの動作を調整したり、追加機能を有効にしたりするための重要な設定項目です。

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

本記事では、それぞれの役割と違いについて整理して解説します。

## 書こうと思ったきっかけ
受講しているITスクールでRDSを使う機会があり、チームメンバーとの会話の中で「パラメーターグループ」と「オプショングループ」の違いが話題に上がりました。自分自身も整理したいと思い、備忘録としてまとめることにしました。

## パラメーターグループ（Parameter Group）
### 概要
DBエンジンの動作を制御する設定集

例：MySQL、PostgreSQL、SQL Serverなどの設定パラメーター（バッファサイズ、接続制限など）

### 主な用途
- innodb_buffer_pool_size など、DBのパフォーマンスや動作制御に関わるパラメータの変更
- デフォルトのパラメーターを上書きしたい場合に使う

### 注意点
- インスタンス作成時にアタッチする
- 一部のパラメーターは再起動が必要
- エンジンバージョンに依存して内容が変わる

**参考文献**

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/parameter-groups-overview.html

https://qiita.com/Lamaglama39/items/4e3a803bfbcb3e980ab4

## オプショングループ（Option Group）
### 概要
DBエンジンに追加機能を有効化するための設定

対象は主に Oracle や SQL Server

### 主な用途
- Oracleの OEM（Enterprise Manager） 機能の追加
- SQL Serverの Transparent Data Encryption（TDE） や SQLSERVER_BACKUP_RESTORE 機能の有効化

### 注意点
- すべてのDBエンジンで必要になるわけではない（PostgreSQLでは使わないことが多い）
- オプションを追加するにはインスタンスの再起動または再作成が必要な場合がある

**参考文献**

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_WorkingWithOptionGroups.html

https://qiita.com/fjisdahgaiuerua/items/8be3a3ad049d98772e5d

## 使い分けまとめ
| 項目 | パラメーターグループ | オプショングループ |
|------|------------------|----------------|
| 目的 | DBの詳細な設定（性能・動作） | 追加機能の有効化 |
| 例 | max_connections、log_bin | OEM、TDE、バックアップ機能 |
| 必要性 | 多くのRDSエンジンで使用 | 特定のDBエンジンのみ使用 |
| 再起動 | パラメータにより必要 | 多くの場合必要 |

## まとめ
パラメーターグループは「エンジンの挙動を細かく制御する設定」、オプショングループは「RDSの機能を拡張する追加モジュール」という違いがあります。

:::note warn
***MySQLやPostgreSQLでは主にパラメーターグループを意識すれば十分ですが、SQL ServerやOracleなどではオプショングループも活用することで、より高度な管理が可能になります。***
:::

RDSの運用ではこの2つの使い分けが重要になるため、理解しておくとインフラ設定やパフォーマンスチューニングにも役立ちます！
個人的備忘録：Alembicのテンプレートファイル script.py.mako を読み解いてみた

## はじめに

本記事では、Alembicのテンプレートファイルである `migrations/script.py.mako` の役割と内容について解説します。

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

AlembicはSQLAlchemyのマイグレーションツールであり、このファイルはマイグレーションスクリプトの生成において重要な役割を果たします。

## 書こうと思ったきっかけ

受講しているITスクールのハッカソンに参加しており、バックエンド担当の方がAlembicでマイグレーションを行っているのを見て、自分自身もテンプレートの仕組みを理解しておくべきだと感じ、備忘録としてまとめました。

## migrations/script.py.mako とは？

`migrations/script.py.mako` は、Alembicでマイグレーションスクリプトを自動生成する際に使用されるテンプレートファイルです。

**参考文献**

https://zenn.dev/shimakaze_soft/articles/4c0784d9a87751

https://qiita.com/penpenta/items/c993243c4ceee3840f30

### 役割
このファイルは、`alembic revision --autogenerate` などのコマンドを実行したときに、マイグレーションスクリプトの雛形として利用されます。

### 特徴
- **Makoテンプレート形式（.mako）** を使用
- Alembicの `env.py` 経由で呼び出される
- 自動生成される `versions/*.py` のスクリプト構成を定義

### テンプレートの例
```python
"""${message}

Revision ID: ${up_revision}
Revises: ${down_revision | comma,n}
Create Date: ${create_date}

"""

from alembic import op
import sqlalchemy as sa

def upgrade():
    ${upgrades if upgrades else "pass"}

def downgrade():
    ${downgrades if downgrades else "pass"}
```

このテンプレートから、以下のようなマイグレーションスクリプトが生成されます：

```python
"""add users table

Revision ID: abc123
Revises: None
Create Date: 2025-04-16 10:00:00.000000

"""

from alembic import op
import sqlalchemy as sa

def upgrade():
    op.create_table(
        'users',
        sa.Column('id', sa.Integer, primary_key=True),
        sa.Column('name', sa.String(50))
    )

def downgrade():
    op.drop_table('users')
```

## まとめ

`migrations/script.py.mako` はAlembicにおけるマイグレーションファイルのテンプレートであり、プロジェクトに応じてカスタマイズも可能です。

**テンプレートの構造を理解しておくことで、マイグレーションの自動生成をより柔軟にコントロールできるようになります！**
個人的備忘録：GPT-4o、o1、o3-mini…どれを使う？OpenAIモデルの特徴と料金を整理してみた

## はじめに

本記事では、OpenAIが提供する最新のAIモデルについて、その特徴や料金体系を簡潔にまとめています。

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

タスクの性質やコストパフォーマンスを踏まえて、最適なモデルを選ぶための参考になれば幸いです。

## 書こうと思ったきっかけ

2024年以降、OpenAIは用途ごとに最適化された複数のモデルをリリースしています。

https://openai.com/ja-JP/api/pricing/

その中で、料金や性能の違いが分かりにくいと感じたので、自分自身の整理も兼ねてまとめてみました。

---

## 最新のOpenAIモデルについて

OpenAIは、用途に応じた多様なAIモデルを提供しており、それぞれに特徴的な性能と料金体系が設定されています。以下に、最新のリーズニングモデルと日常タスク向けモデルを紹介します。

**参考にしている記事**

https://service.shiftinc.jp/column/11366/

https://openai.com/ja-JP/api/

---

## 高度なマルチステップ問題向けリーズニングモデル

### OpenAI o1
- **概要**：ツール、Structured Outputs、Visionをサポートするフロンティアモデル。
- **特徴**：200kコンテキスト長を備え、複雑な推論に特化。

**料金**：
- 入力：$15.00 / 100万トークン
- キャッシュされた入力：$7.50 / 100万トークン
- 出力：$60.00 / 100万トークン

---

### OpenAI o3-mini
- **概要**：コーディング、数学、科学向けに最適化された小型モデル。
- **特徴**：ツールとStructured Outputsに対応し、コストパフォーマンスに優れる。
- **コンテキスト長**：200k

**料金**：
- 入力：$1.10 / 100万トークン
- キャッシュされた入力：$0.55 / 100万トークン
- 出力：$4.40 / 100万トークン

**補足**：Batch APIを使用することで、入力と出力コストを50％削減し、24時間以内の非同期処理が可能です。

---

## 日常的タスク向け GPT モデル

### GPT-4o
- **概要**：複雑なタスクに対応する高知能モデル。
- **コンテキスト長**：128k

**料金**：
- 入力：$2.00 / 100万トークン
- キャッシュされた入力：$0.50 / 100万トークン
- 出力：$8.00 / 100万トークン

---

### GPT-4o mini
- **概要**：短時間の日常業務に適した小型モデル。
- **コンテキスト長**：128k

**料金**：
- 入力：$0.40 / 100万トークン
- キャッシュされた入力：$0.10 / 100万トークン
- 出力：$1.60 / 100万トークン

---

### GPT-4.1 nano
- **概要**：低レイテンシーで高速かつコスト効率の高いモデル。

**料金**：
- 入力：$0.100 / 100万トークン
- キャッシュされた入力：$0.025 / 100万トークン
- 出力：$0.400 / 100万トークン

**補足**：Batch APIを活用することで、さらなるコスト最適化が可能です。

---

## まとめ

本記事では、OpenAIの最新モデルについて、機能別・用途別に整理して紹介しました。

:::note warn
***用途が高度であればあるほど高性能なモデルが求められますが、日常的な用途ではコストを抑えつつ必要十分な性能のモデルも多数あります。***
:::

状況に応じた選定で、AIの導入効果を最大化を検討してみてください！
Geminiで魔法を使う魔法少女を描いてみた。

# 概要

Geminiで魔法を使う魔法少女を描いてみました。

# 実装

プロンプトと実行結果は以下の通りでした。

```
炎の魔法を使う魔法少女を描いてみてください。
```

![炎の魔法を使う魔法少女_20250416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/0c624995-ef62-403f-8dbd-ccbdb90eee9a.png)


```
氷の魔法を使う魔法少女を描いてみてください。
```

![氷の魔法を使う魔法少女_20250416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/8bb8deeb-3665-4589-8c7c-13c3b1444e97.png)


```
電撃の魔法を使う魔法少女を描いてみてください。
```

![電撃の魔法を使う魔法少女_20250416.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/2f446639-6209-4956-b693-851cea63dce6.png)


# まとめ

炎の子と氷の子は可愛いかも。
何かの役に立てばと。
terrafromでよく使用するコマンド一覧



### 初期化
terraformを利用する場合、最初に実行する初期化処理のコマンド。クラウドプロパイダのプラグインやステートファイルの設定などの準備が行われます。

```
terraform init
```

### フォーマットを整える
コマンドを実行することでコードのインデントを整えます。

```
terraform fmt
```

### ソースコードを元に実行計画を確認

現在のソースコードでどのような変更が行われるか出力します。

```
terraform plan
```

### ソースコードに従って変更を適用する

実際にインフラ（クラウドリソースなど）を作成・変更・削除します。オプションなしだと「terraform plan」コマンドと同じように変更内容が出力されてyesを入力すると実行します。

オプションの「-auto-approve」をつけると確認なしで実行します。

```
terraform apply
```

### terraform管理環境の削除

terraformで管理しているリソースを削除します。実行すると、削除予定のリソース一覧が表示されてyesを入力すると削除が実行されます。

「-auto-approve」で確認なしで実行します。

```
terraform destroy
```
### 変数やデータの値を確認・デバッグする
内部データ（変数、locals、outputs、resourceの属性など）を インタラクティブに確認・評価できるコマンド。
ステートファイルをもとに参照されるので「terraform apply」をしておく必要がある。

```
terraform console
```

### Terraform の状態ファイル（terraform.tfstate）に保存された出力値を表示する

output ブロックに出力したい値を記述する必要がある。

```
terraform output 
```

### リソースの依存関係をグラフで表示

依存関係をDOTフォーマットで出力する。

```
terraform graph > <FILENAME>
```

https://github.com/GoogleCloudPlatform/terraformer
初心者がRailsTutorial　第２〜６章を終えて

## RailsTutorial　第２〜６章

##### 感想を書くの面倒臭いけど知識定着のためにやった方がいいのだろうな

### 感想：　おもろい

今まで独学で勉強していたのはhtml,css,jsのフロントエンドと、AtcoderのためのPythonを少しくらい、だったので面白くはあったけど、デザインセンスないからやっていけるのかなという感じだった。
けれど、、　テストとかルーティングとかパスワードとか、おもろい！


最初から順番に読んでいって、ふむふむと納得しながら自分の環境で実装しているから、初見では何を言っているのか分からないところが結構出てくる。

その都度、GPTにこれってどういうこと？さっきの〜との違いは？と聞きまくっているので、最初はあまり理解せずにその通りに実装していたところが、後から納得してスッキリする、ということが多々ある。（友達よりこいつとの会話回数の方が多いと思う）

### 大量のインプットは　受験勉強で初めての分野の入門書を読んでいる感覚と同じで面白い

大学受験、つまり高校生活を振り返って一番勉強が楽しかったのは、高2,3の **独学で新分野の入門参考書を読んでいる時** だった。

新しい概念を知って、簡単な例題を解いていって、その概念の素晴らしさに気づく、といった流れは自分の知識欲が満たされていってどんどん勉強していっていた。

~~まあ、３年になって新しいことは学ばず、問題演習ばかりになって面白くなく、自分の勉強時間は減っていったのだが…~~

### きっとこのチュートリアルは名著なのだろう
私は、インターン先の面接官の方に「これを始まるまでにやっとけ」と言われたから始めたわけだが、とてもわかりやすい。

YoutubeやUdemyには初心者向けの講座や、ハンズオンでクローンアプリを作る！というものがいっぱいあって、私もそれらに手を出そうと思っていた。
ただ、そういったものは、その場限りの知識・技術で、それを自分のものにして応用させる、といったことはある程度経験していないと無理なのかも、と思っていた。少なくとも、文法をかろうじて覚えたレベルの自分には無理だったと思う。
ただ、このRailsTutorialは、Rails自体が考えていること、それぞれの機能の有用性など、この場だけで終わらない説明だなと感じることが多く、このチュートリアルをスタートに、次へと歩き出せそうな雰囲気がある。

### いつだって自分の原動力は”危機感”

受験勉強も試験勉強もテスト勉強も、コツコツと進めていくことが全くできない自分だが直前になって焦れば猛勉強する、というのはもうお約束。

今回、大学の授業が終わったら図書館で閉館まで勉強する、といったことを数日間続けられているのは、「最低レベルなのにパッションだけでインターン受かっちゃった、迷惑かけないように頑張んなきゃ」の”危機感”以外他ならない。
**どうせコンフォートゾーンから抜け出せずに、ゲームばっかしているのだから、このくらいの環境が自分のためにはいいのだろう、と客観視。**


### 記録

第１章　4.5h
第２章　
第３章　3.5h
第４章　3h
第５章　2.5h
第６章　3h

total:16.5h
## AWS認定資格に合格した体験記 〜CloudTechでの学びと気づき〜

### はじめに

私は**2023年7月25日に「AWS ソリューションアーキテクト アソシエイト（SAA-C02）」試験に合格**しました。

この合格体験をきっかけに、「他のAWS資格にも挑戦したい」という意欲が湧き、質の高い学習プラットフォームを探していた際に出会ったのがCloudTechでした。

### CloudTechを選んだ理由と使用感

CloudTechに初めて登録した際は、「資格会員」（5,480円／90日）としてスタートしました。  
実際に使ってみると、想像以上に問題数が豊富で、しかも**解説が丁寧で理解しやすい**。その上AWSの全ての資格に対応していることに驚きました。
基本会員（13,700円／90日間）または永久会員（54,800円／買い切り）以上になると、資格対策問題集に加えて**ネットワーク、コンテナ、データベースなど、AWS以外の分野もカバーするレッスン動画が随時提供される**ことを知り、そのコンテンツの充実度に感銘を受けました。

永久会員の費用は決して安くはありませんが、「このサービスは今後も長く活用することになりそうだ」と確信し、**自分への投資**として**初月で永久会員に切り替える**決断をしました。
（一時的な出費が増えても、合格して会社からお祝い金をもらえば会員費を回収できるとも思いました。）

私の場合、業務の繁忙などで学習を一時中断する期間がありましたが、そのたびに「資格会員を更新するか」「無駄にしないために学習しないと…」と考えるのは精神的にも負担でしたし、**継続的なコストも地味に効いてきます**。

その点、**永久会員であればいつでも再開でき、追加コストもかからない**ため、**時間にもお金にも縛られない柔軟な学習スタイルが実現できた**と感じています。

今でも使い倒している私から見ても、**CloudTechはこの近年で何度もアップデートを重ねており、学習体験の質が常に進化している**と実感しています。

### AWS AIプラクティショナーへの挑戦

そして、**2025年1月**。  
「最近リリースされたばかりのAWS資格だし挑戦してみたい」「AIについて基礎から学んでみたい」、そんな軽い動機から「AWS AIプラクティショナー（AIF-C01）」の学習をスタートしました。

CloudTechはこの資格にもいち早く対応しており、**問題集が早期にリリースされたおかげで、学習は最初から最後までCloudTechに一本化**できました。  
その結果、**2025年3月15日に合格**することができました。

そして今は、**2025年4月中のMLA-C01取得に向けて学習を継続中**です。  
当初、MLAの受験は予定していませんでしたが、**「CloudTechを活用すれば、自分でもいける」と思えた**ことが、次の挑戦への後押しになっています。

### 私の独自の学習方法

私の独自の学習方法は、**とにかくまずは一通り問題を解いてみること**です。  
CloudTechには便利な**ブックマーク機能**があり、これを最大限に活用しました。

- 不正解の問題 → **赤色ブックマーク**  
- なんとなく正解した問題 → **青色ブックマーク**  
- 理解して正解した問題 → **緑色ブックマーク**

最初は不正解が多く、正直「何もわからない…」という感覚で赤色のブックマークだらけになりましたが、**解説を読み、構成図をじっくり眺めることで理解が深まり**、徐々に緑が増えていきました。

このように、**すべての問題に色をつけ、緑色が増えるまでひたすら繰り返す**。これが私の学習スタイルです。

単なる「正解・不正解」ではなく、**理解の深さに応じて進捗を可視化できる**この方法は、私にとって非常に有効でした。

### CloudTechの特徴まとめ

- **設問ごとの解説図・構成図が秀逸**で、視覚的に理解しやすい
- **本番問題の的中率が高く**、試験対策に強い
- **一発合格率90%（2023年調査）**という安心感
- **全12資格に対応**しており、学習の次の目標も立てやすい
- **会員数7,000名以上**という信頼の実績
- **料金プランが選べる柔軟さ**  
  - フリーコース：無料  
  - 資格会員：5,480円／90日（自動更新）  
  - 基本会員：13,700円／90日（自動更新）  
  - 永久会員：一括54,800円（買い切り）

### おわりの前に 〜ちょっとした補足〜

ちなみに、**CloudTechでは合格者に対して「お祝い金制度」があります**。  
私も今回利用させていただき、**500円〜3,000円程度の範囲で進呈される仕組み**の中で、実際に受け取りました。

**試験費用の足しになりますし、「努力がちゃんと報われた」と感じられる嬉しい制度**だと思います。  
こうした制度があることを知らない方も多いかもしれないので、参考までに付け加えておきます。

### おわりに

「資格を取りたいがどのように勉強すれば良いかわからない」と思って始めたAWS学習でしたが、CloudTechのおかげで、**価値ある学びのプロセスと達成感を得ることができました。**  
**教材の質・量・設計のどれをとっても優秀で、継続したくなる学習サービス**です。

お勧めなので、もし興味があれば **クーポンで安くなるみたいです**。  
**クーポンコード：CloudTech-KK**

これからAWS資格を目指す方の参考になれば幸いです。
競プロ日記#25/04/15

# AtCoder
### [AGC014_A-Cookie Exchanges](https://atcoder.jp/contests/agc014/tasks/agc014_a)

- 正直そんなに難しくない
- A,B,Cのいずれかが既に奇数である場合は交換できない→0を出力というパターンの考慮が漏れていて1パータンだけWA出てしまった。
- というか過去問くらいはinputとoutputのデータ欲しい...。（実はどこかで見れるとかだったら教えてください...）
- AGCは解いたことなかったが少し他の回のも見てみるとA問題でも配点が400とか500なので300点問題の当問題はやはり簡単な部類なのだろう...。
- ただし解説を見ればわかるがこのロジックでも計算量に問題がないということを意識できていなかったので良くないなと思った。
```

int main() {
    int A,B,C;
    cin >> A >> B >> C;
    vector<int> v(3);
    if (A % 2 == 1 || B % 2 == 1 || C % 2 == 1) {
        cout << 0 << endl;
        return 0;
    }
    if (A == B && B == C) {
        cout << -1 << endl;
        return 0;
    }
    v[0] = A;
    v[1] = B;
    v[2] = C;
    int ans = 0;
    while(v[0] % 2 == 0 && v[1] % 2 == 0 && v[2] % 2 == 0) {
        int halfV0 = v[0] / 2;
        int halfV1 = v[1] / 2;   
        int halfV2 = v[2] / 2;
        v[0] = halfV1 + halfV2;
        v[1] = halfV0 + halfV2;
        v[2] = halfV0 + halfV1;
        
        ans++;
    }
    cout << ans << endl;
}
```

# アルゴ式-[パスワードの可能性 (1)
](https://algo-method.com/tasks/736)
- 結局は積を求めるだけ。
- パスワードの候補に関してはミスリード
```
int N,M;
cin >> N >> M;

cout << N * M << endl;
```

# アルゴ式-[ラッキーナンバー (1)](https://algo-method.com/tasks/732)
- 3桁のうち各桁を選ぶ選択肢がN通りなのでNの3乗を求める
```
int main() {
    int N;
    cin >> N;

    cout << N * N * N << endl;
}
```

# アルゴ式-[ラッキーナンバー (2)](https://algo-method.com/tasks/735)
- ヒントがあったから「N個のラッキーナンバーのいずれも使っていない3桁の数」の余事象を取ればよいだけだとわかったがこのヒントがなければ解けなかった可能性あり...。
- 高校レベルの数学の復習が必要か...？


※「環境構築したのをいいことにアルゴ式をサボってAtCoderばっかやりがち」になりそうで怖い...。