OmniAICreator/Qiita-1.07M huggingface dataset:
PyPyでpopcountしたい！

競技プログラミングをしていると、ある数を二進数で表したときにいくつ1であるような桁があるか(= popcount)を求めたいときがあります。
PyPyではどのように求めるのが高速なのでしょうか。
# bin(X).count("1")
二進数の文字列に変換して、そこに含まれる1の数をカウントします。
```python
bin(X).count("1")
```
# while文
while文で下のbitから1bitずつカウントします。
```python
ans = 0
while X:
    ans += X&1
    X >>= 1
```

# bit_count
新しいバージョンのpythonにはこのpopcountを求めるメソッドがあります。
```python
X.bit_count()
```

# bit演算
bit演算や足し算引き算を利用することで並列に処理します。

(下記のコードは32bit整数向けであることに注意してください)

```python
def popcount(x):
    # from : https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
    # for 32-bit integers
    c = x - ((x >> 1) & 0x55555555)
    c = (c & 0x33333333) + ((c >> 2) & 0x33333333)
    c = (c + (c >> 4)) & 0x0F0F0F0F
    c = (c + (c >> 8)) & 0x00FF00FF
    c = (c + (c >> 16)) & 0x0000FFFF
    return c
```



# PyPy3で速度比較

PyPy 7.3.12で速度を比較します。

|  | $0$ から　$ 2^{30}-1 $　まで  |
|---|---|
|bin(x).count('1') |556.492s  |
|while文  |21.147s  |
|bit_count  | 8.479s |
|bit演算  |1.446s |

<details><summary>比較に用いたコード</summary>

### bin
```python
ans = 0

for i in range(2**30):
    ans += bin(i).count('1')

print(ans)
```

### while文
```python
ans = 0

for i in range(2**30):
    while i:
        ans += i&1
        i >>= 1

print(ans)
```

### bit_count
```python
ans = 0

for i in range(2**30):
    ans += i.bit_count()

print(ans)
```

### bit演算
```python
ans = 0

def popcount(x):
    # from : https://graphics.stanford.edu/~seander/bithacks.html#CountBitsSetParallel
    # for 32-bit integers
    c = x - ((x >> 1) & 0x55555555)
    c = (c & 0x33333333) + ((c >> 2) & 0x33333333)
    c = (c + (c >> 4)) & 0x0F0F0F0F
    c = (c + (c >> 8)) & 0x00FF00FF
    c = (c + (c >> 16)) & 0x0000FFFF
    return c

for i in range(2**30):
    ans += popcount(i)

print(ans)
```
</details>

# (おまけ) Python3で速度比較
Python 3.10.9で実行してみます。
($ 2^{30} $までだと終了する気がしなかったので範囲を変えています。)

|  | $0$ から　$ 2^{25}-1 $　まで  |
|---|---|
|bin(x).count('1') |14.747s  |
|while文  |183.771s  |
|bit_count  | 5.155s |
|bit演算  |26.325s |

かなりwhile文のプログラムが低速になりました。
PyPyではbit演算のものが高速でしたが、Pythonではbit_countの方が高速なようです。CPythonの場合は内部で`__builtin_popcount`を呼んでいる[^1]ので、それが効いていそうですね。(PyPyのbit_countでは内部でwhileループを用いて実装が行われています。[^2])
[^1]: https://github.com/python/cpython/blob/3.10/Include/internal/pycore_bitutils.h
[^2]: https://github.com/pypy/pypy/blob/branches/release-pypy3.10-v7.x/rpython/rlib/rbigint.py

実際に、非常に大きなサイズの整数のbit_countを行う際は、PyPyよりもPythonの方が高速なこともあるようです。
https://atcoder.jp/contests/abc258/submissions/65727523
https://atcoder.jp/contests/abc258/submissions/66875602
【React】ブラウザバックやルーティングでフォームの値を保持する方法

### 以下の様に、別URLへ飛び、ブラウザバックしてもフォームの値が残っているようにしたい

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3909033/8909752f-a3c2-47c1-897e-d900b43e0892.gif)

## sessionStarageを使って保持する

```tsx
import { useEffect, useState, type ChangeEvent } from 'react'
import reactLogo from './assets/react.svg'
import viteLogo from '/vite.svg'
import './App.css'
import { TextField } from '@mui/material'

function App() {

  const [nokoruhou, setNokoruhou] = useState<string>(sessionStorage.getItem('nokoru') || "")
  const [nokoranaihou, setNokoranaihou] = useState<string>("")

  const nokoruMethod = (e: ChangeEvent<HTMLInputElement>) => {
    setNokoruhou(e.target.value)
  }

  const nokoranaiMethod = (e: ChangeEvent<HTMLInputElement>) => {
    setNokoranaihou(e.target.value)
  }

  useEffect(() => {
    sessionStorage.setItem('nokoru', nokoruhou)
  }, [nokoruhou])

  return (
    <>
      <div>
        <a href="https://vite.dev" target="_blank">
          <img src={viteLogo} className="logo" alt="Vite logo" />
        </a>
        <a href="https://react.dev" target="_blank">
          <img src={reactLogo} className="logo react" alt="React logo" />
        </a>
      </div>

      <TextField value={nokoruhou} label="残る方" onChange={nokoruMethod} style={{ backgroundColor: 'lightblue', marginBottom: '10px' }} />
      <br />
      <TextField value={nokoranaihou} label="残らない方" onChange={nokoranaiMethod} style={{ backgroundColor: 'lightblue' }} />
    </>
  )
}

export default App

```

## ロジック解説

* フォーム値の保存
useEffectでフォームに何か変更があるたびにsessionStrageにフォーム値を保存する
以下の部分
```tsx
useEffect(() => {
    sessionStorage.setItem('nokoru', nokoruhou)
  }, [nokoruhou])
```

* ブラウザバック時
useEffectでsessionStrageから保存した値を取り出し、フォームのデフォルト値に設定
以下の部分
```tsx
  const [nokoruhou, setNokoruhou] = useState<string>(sessionStorage.getItem('nokoru') || "")
```

## 補足

localStarageでも同じことができますが、
localStrageの場合はタブを削除してもstrageにデータが残り続けるので思わぬバグを引き起こす可能性があります。
そのため今回はsessionStrageを利用しました。


## 参考

https://qiita.com/antfgxgres/items/d3fc37c089846c1b7582

https://qiita.com/niihara_megumu/items/be693500d42088027547
【AWS】Route53


## はじめに
こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。
今回は、AWSでよく登場する **Route 53（ルート53）** について、まったく知らない方向けにわかりやすく解説します。

Route53はAWS のDNSなので、DNSについて知っていれば理解するのはそこまで難しくないと思います

もし、DNS の理解度が微妙な方は以下にDNSについて記事を書いているのでそれを見てから進めるといいかもしれません。

https://qiita.com/Taira0222/items/ab50c69237dcc6273006

---

## 1. Route 53（ルート53）ってなに？

**Route 53は、AWSが提供する「DNSサービス」です。**

DNS（ディー・エヌ・エス）とは、「名前解決（ネームリゾルバ）」の仕組みです。

### 例えば…

* Webサイトにアクセスする時、私たちは「https://example.com」のような文字列のURLを使います。
* でもインターネットの世界では、本当は「123.45.67.89」などの**IPアドレス**が使われて通信されています。

この「URL（ドメイン名）」と「IPアドレス」を**変換してくれる仕組み**がDNSです。
そして、そのDNSの設定や管理を行えるサービスが **Route 53** です。

---

## 2. どんなときに使うの？

たとえば、以下のような場合です。

> 「自分で作ったWebアプリを、`example.com` というURLで世界に公開したい！」

そんなとき、Route 53を使って、

* `example.com` にアクセスされたら、
* AWSで作ったEC2インスタンス（Webサーバ）などの **IPアドレスに転送**

という設定を行うことができます。

---

## 3. Route 53でできること

Route 53では、主に以下の3つのことができます。

| 機能         | できること                                       |
| ---------- | ------------------------------------------- |
| 1. ドメイン登録  | 「example.com」などの独自ドメインを購入できる                |
| 2. DNS設定   | ドメインとIPアドレスを結びつける（名前解決）                     |
| 3. ヘルスチェック | サーバが動いているか定期的に確認し、死んでたら別のサーバに切り替える（高可用性の実現） |

この記事では、2の「DNS設定」を中心に見ていきます。

---

## 4. Route 53の登場人物

設定を行うときに出てくる用語をかんたんに整理しておきましょう。

| 用語            | 意味                                 |
| ------------- | ---------------------------------- |
| ドメイン名         | `example.com` などのURLになる名前         |
| ホストゾーン        | そのドメインに対するDNSの設定エリア                |
| レコード（Aレコードなど） | `example.com` ⇒ IPアドレス などの変換ルール   |
| Aレコード         | ドメイン名をIPv4アドレスに変換するレコード            |
| NSレコード        | DNSサーバの住所みたいなもの。お名前.comなどに登録する時に使う |

---

## 5. Route 53の使い方（ざっくり流れ）

例えば「example.com というドメインを使って自分のWebアプリを公開したい」場合の流れはこうです：

### ステップ1：ドメインを取得する

* Route 53 またはお名前.comなどで独自ドメインを購入します。

### ステップ2：ホストゾーンを作成する

* Route 53で「example.com」用の**ホストゾーン**を作成します。

### ステップ3：レコードを設定する

* たとえば、Aレコードを追加して

  * `example.com` ⇒ `13.115.55.1`（EC2のIPアドレス）
    と紐づけます。

### ステップ4：ドメインのNSレコードをお名前.com側に登録

* ドメインをお名前.comなどで取得した場合は、
* NSレコード（ネームサーバ）をRoute 53で指定されたものに書き換える必要があります。

---

## 6. Route 53 という名前の由来

> 「なんで Route 53 っていうの？」

これは、DNSでは「53番ポート（UDP/TCP）」が使われていることに由来します。
**インターネット上のルーティング（Route）** + **ポート番号53** ⇒ **Route 53** というわけです。

---

## まとめ

| ポイント       | 内容                          |
| ---------- | --------------------------- |
| Route 53とは | AWSのDNS（名前解決）サービス           |
| 主な用途       | ドメイン名とWebサーバのIPアドレスを結びつける   |
| できること      | ドメイン取得、DNS設定、ヘルスチェック        |
| 初心者が使うとき   | 独自ドメインを取得し、Webアプリを公開したい時に使う |

---

## おわりに

Route 53は「ドメインとサーバをつなぐ住所録」のようなもの。
少し難しく感じるかもしれませんが、自分のアプリを世界中に届けたいなら避けては通れない大事なサービスです。
kintone レコード新規追加・再利用・アプリアクションの判別方法

kintone レコード新規追加・再利用・アプリアクションの判別方法についてまとめ。

# レコード新規追加と再利用の判別

レコード追加画面を表示した後のイベント
https://cybozu.dev/ja/id/6a31504b599c450eb14a4a00/

イベントプロパティの中の `reuse` の値で判別する。

`resuse === true` のときは、レコード再利用。
`resuse === false` のときは、レコード新規追加。

# アプリアクション実行時のレコード追加の判別

URIパラメーター内のクエリにて判別する。

https://<サブドメイン>.cybozu.com/k/<アプリID>/edit?action=<アプリアクションID>&app=<アプリアクション実行元のアプリID>&record=<アプリアクション実行元のレコードID>

`action=`とあったらアプリアクションからのレコード新規追加と判別できる。
VIMチャレンジその3(全5回)：マクロの話


## マクロとは？
- 自動化
- Vimではキー操作の記録と再生


----
## 基本操作

- ```qx```で記録開始（xは任意のキー）
- ```q```で記録終了
- ```@x```で再生

xを変えることで複数マクロを保持しておくことが可能

----
## 応用

- 繰り返し再生：```10@a```
- 直前の再生を再度再生：@@

----
## ポイント

- 編集操作だけでなく移動も記録できる
  行を操作したら```esc```で移動モードになって```j```で１行下に移動
  ↑これが頻出パターン

----
## マクロの使いどころ

- テキスト整形
- 正直、プログラミングで生きるケースは少ないかな！

----
## マクロの代替

- プログラミングでは複数行の同時編集の方がよく使う
- ```Ctrl+v```で矩形選択、複数行を同時編集可能

----
## 最後に

- Vimのマクロはさすがの手軽さ
- 複数行同時編集の方がはまる局面はある
[macOS][Ruby] 任意の文字列から QR コードを生成し、ターミナルに表示する

## やりたいこと

任意の文字列から QR コードを生成し、ターミナルに表示したいです。

## 前提

- OS は macOS
- ターミナル が kitty の [terminal graphics protocol](https://sw.kovidgoyal.net/kitty/graphics-protocol/) に適合していること
  - Ghostty, Konsole, st, Warp, wayst, WezTerm
  - 僕は [Warp](https://www.warp.dev/) を使っています

## 方法

必要なライブラリをインストールします。ターミナル上に画像を表示するために [kitty](https://sw.kovidgoyal.net/kitty/) というターミナルエミュレータを、QR コードを生成するために [RQRCode](https://github.com/whomwah/rqrcode) という Gem をインストールします。

```console
$ brew install kitty
$ gem install rqrcode
```

以下の Ruby スクリプトを用意します。

```show_qr_code.rb
require 'rqrcode'
require 'tmpdir'

qrcode = RQRCode::QRCode.new(ARGV[0])

# 生成した QR コードを一時的に PNG ファイルとして保存し、スクリプト実行後に破棄する。
Dir.mktmpdir do |dir|
  tmp_path = File.join(dir, 'qrcode.png')
  File.write(tmp_path, qrcode.as_png)

  system('kitty', '+kitten', 'icat', tmp_path)
end
```

任意の文字列をコマンドライン引数として与えて Ruby スクリプトを実行すると、ターミナル上に QR コードが表示されます。

<img alt="run show_qr_code.rb" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/15ee4cac-1544-4f3b-a879-071fcc670d00.png" width=500>

試しに iPhone の QR コードリーダーでスキャンすると、無事にコマンドライン引数として与えた URL にアクセスできました！

<img alt="screenshot" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6697/b29ef77a-c8c2-42b2-89fc-2b9f6620046f.jpeg" width=250>

## バージョン情報

```console
$ ruby -v
ruby 3.4.3 (2025-04-14 revision d0b7e5b6a0) +PRISM [arm64-darwin24]

$ gem list | grep rqrcode
rqrcode (3.1.0)
rqrcode_core (2.0.0)

$ kitty --version
kitty 0.42.1 created by Kovid Goyal
```

## おまけ

[Kernel.#system](https://docs.ruby-lang.org/ja/latest/method/Kernel/m/system.html) に複数の引数を渡すと、シェルを介さずにコマンドを実行することになり、コマンドインジェクション対策になるということを知りました。

- [Ruby の外部コマンド実行入門について発表しました - pockestrap](https://pocke.hatenablog.com/entry/2023/02/19/004700)
【参加レポート】AWS JumpStart2025に参加してアーキテクチャ図を作成してみた

## はじめに
こんにちは。今回は、AWS JumpStart2025に参加した感想をまとめてみました。AWS初心者に向けて非常に学びの多い内容でしたので、参加を検討している方の参考になれば嬉しいです。

## AWS JumpStartとは？
> AWS JumpStart は、新卒を含む AWS 初学者のエンジニアを対象とした、クラウドネイティブなテックリード人材を育成するための第一歩となる実践的な研修プログラムです。事前学習用動画と 2 日間の集中的なオンラインワークショップを通して、皆様の AWS に対する理解度を一気に引き上げることを目的としています。（公式紹介文より）

本プログラムは以下のような方に特におすすめされています：
・AWSについて話は聞いたことがあるが、使ったことがない方
・EC2などの単体サービスは触ったことがあるが、システム全体の設計経験がない方
・クラウドネイティブなアプリケーションを設計する上で重要な観点を知りたい方

短期間で一気にレベルアップできる絶好の機会となっています。

## プログラムの流れ
私が参加した2日間の研修は、以下のようなスケジュールで進行しました。

**🔸1日目：AWSに「触れる」**
**午前：講義 ＋ AWS体験ハンズオン（EC2 & Amplify）**
AWSの基礎知識を講義形式で学び、その後はEC2で仮想マシンを立ち上げたり、Amplifyを使ってWebアプリをデプロイするハンズオンを行いました。

**午後：AWS体験ハンズオン（ALB + ECS + RDS）**
午後はより実践的な構成にチャレンジ。ALB（Application Load Balancer）経由でECS（コンテナ）を動かし、バックエンドにはRDS（リレーショナルデータベース）を使用する構成を構築しました。

**🔸2日目：AWSで「設計する」**
**午前：クイズ＋アーキテクチャ課題説明＋個人検討**
1日目の復習も兼ねたクイズからスタート。その後、アーキテクチャ設計の課題が提示され、まずは個人で要件に合った構成を検討する時間がありました。

**午後：グループでアーキテクチャ検討・成果発表＋解説**
グループメンバーと意見を出し合いながら、1つのアーキテクチャ図を完成させていきます。完成後は、数チームによる発表と、講師によるフィードバック・ベストプラクティスの解説があり、大変学びの多い時間でした。

## 参加してよかったポイント
**✅ AWS未経験でも安心の構成**
最初の講義で基礎をしっかり押さえるため、AWSを初めて触る方でも十分についていけます。
すでに資格を取得している方にとっては、知識の整理や新しい視点を得る良い機会となります。

**✅ 講師の説明がとても分かりやすく、面白い**
講師の方の説明が非常に丁寧で、AWSの各サービスや設計時のポイントを分かりやすく解説してくれました。
また、ユーモアを交えた進行だったため、2日間の長丁場でも飽きずに楽しんで学べました。

**✅ Discordでのやり取りが活発！参加者との距離が近い**
研修中はDiscordを通して質問や雑談が可能で、分からないことがあればリアルタイムで講師に聞くことができます。
雑談チャットも盛り上がっており、参加者の方々と気軽に交流できたのも印象的でした。リモートながら一体感のある空気を感じられるのはJumpStartならではだと思います。

**✅ アーキテクチャ設計力が鍛えられる**
設計課題では、限られた時間の中でグループ全体で要件を満たす構成を考える必要があり、非常に良い訓練になりました。
他のチームの完成度の高いアーキテクチャ図と比べて、自分の未熟さを痛感しましたが、それが逆に良い刺激となりました。

**✅ 学習意欲が上がる**
「もっと設計力をつけたい」「このサービスを深く知りたい」と強く感じ、研修後の自己学習や資格取得に対するモチベーションが格段に上がりました。

## おわりに
AWS JumpStartは、**「知識」と「実践」をバランスよく学べる**、非常に有意義な2日間の研修でした。アーキテクチャ図を実際に作成することで、自分の理解度やスキルの課題が明確になり、学習の方向性を見直す良いきっかけにもなりました。

AWSを学び始めたい方、クラウド設計の基礎を体験してみたい方には、ぜひおすすめのプログラムです！
【AWS DVA・DEA】合格体験記｜CloudLicenseで突破した勉強法

## はじめに
私はIT未経験からキャリアをスタートしました。
昨年（2024年４月）、ITスクールに通いながら、AWS Certified Cloud Practitioner（CLF）およびSolutions Architect Associate（SAA）を取得しました。
1年後（2025年4月）にSEとして転職し、より実践的な知識を深めるため、次のステップとしてDeveloper Associate（DVA）と Data Engineer Associate（DEA）の取得を目指しました。
本記事では、**DVAを5月に、DEAを6月に取得した体験談と、活用した学習方法（CloudLicense中心）について紹介します。**
## 使った教材：CloudLicense一本！
使った教材はCloudLicenseのみです。
CloudLicenseは問題の網羅性と解説の質が高く、個人的には「これだけで十分」という印象でした。

## 勉強法：CloudLicenseを4周
CloudLicenseは4周しました。各周の目的は以下の通りです。
**◆ 1周目：まずは慣れる**
初見でどのような問題が出るか、選択肢の傾向を把握する目的で一通り解きました。

**◆ 2周目：問題と解説を熟読**
このフェーズでは、全選択肢と解説をじっくり読むことを意識しました。特に、間違えた問題の解説は丁寧に読み込みました。

**◆ 3周目：理解度チェック**
理解したつもりでも間違えることがあるため、再度通して解いて理解度を確認。ここでも間違えた問題はメモしました。

**◆ 4周目：本番直前の仕上げ**
最終チェック。ここで8割以上取れるようになっていれば、かなり安心してOKです。
（私は4周目で9割超えを達成し、そのまま試験モードに突入しました。）

## 余裕があれば・・・
私は試験前日に、AWS公式サイトに掲載されているサンプル問題（PDF）を解きました。
本番では1問だけ似たような問題が出たような気がします。

## 本番当日の感想と戦略
・試験時間は十分にあるので、焦らず落ち着いて解けばOK
・自信のない問題は「後で見直す」を付ける
・見直しは以下の2ステップで完結させました
　1.全体をざっと1回見直す
　2.「後で見直す」問題だけを再確認

**◆ 実際の手応え**
「覚えていれば問題なく解ける」印象でした。
本番では、CloudLicenseの問題と非常に似た内容が約**9割**（10問ほど初見）出た印象です。

## 最後に：CloudLicense中心で突破できる
AWS DVA・DEAともに、「CloudLicenseをやり込めば突破できる」試験だと感じました。
特に初学者や独学者にとって、問題演習を繰り返すスタイルは非常に有効です。

これから受験する方の参考になれば幸いです！
プロデル、調査 その50

# 概要
プロデルが、CLRらしいので、調べて見た。
練習問題、やってみた。

# 練習問題
走る人を表示せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/059c9a79-7119-49af-bc28-dc52f373773d.png)

# サンプルコード

```

人画像という、画像(「runner.png」)を作る
メイン画面を、表示する
待機する

メイン画面とは
	＋ind
	＋ランナー
　　	ウィンドウを、継承する
　　	はじめの手順
　　　　	初期化する
　　　　　　	indは0
　　　　　　	タイマー1という、タイマーを作る
　　　　　　	タイマー1の時間になった時の手順は、時間になった
　　　　　　	タイマー1の間隔は20
　　　　　　	タイマー1を開始する
　　　　　終わり
　　	初期化する手順
　　		この実質大きさは｛740, 540｝
　　		この内容は「ランナー」
　　		初期化開始する
　　			キャンバス1というキャンバスを作る
　　　　			その位置と大きさは｛0, 0, 740, 540｝
　　　　			その実質大きさは｛740, 540｝
　　　　	初期化終了する
　　		メイン画面の設計スケール比率は｛144, 144｝
	終わり
　　	時間になった手順
　　		x　＝ (ind % 6) * 85
		y　＝　(ind÷6を切り捨てたもの) * 102
		人画像から{x,　y,　85,　102}を切り取って切り取り画像とする
		ind は ind + 1
		ind > 29なら 
			ind は 0
		そして
		キャンバス1へ、画像を描いてランナーとする
　　　　　　　　	その位置と大きさは、｛110, 110, 85, 102｝
　　　　　　　　	その画像は、切り取り画像
		キャンバス1を更新する
　　	終わり
終わり




```

以上。
[Python] [環境構築] 自分用メモ（wsl2 + uv）

# wsl確認
```
wsl --version
```

# Python確認
```
python --version
```
なければインストール
```
sudo apt update
sudo apt upgrade
sudo apt install python3 python3-pip
```

# uvをインストール
```
curl -LsSf https://astral.sh/uv/install.sh | sh
```

# 作業用のディレクトリを作成
```
mkdir cvSample
cd cvSample
```

# 依存関係ファイルを初期化
`pyproject.toml`と`.venv` (仮想環境) を初期化
```
uv init
```
`Initialized project`が出ることを確認

# パッケージの追加
requests ライブラリがインストールされ、uv.lock ファイルが更新される
```
uv add requests
```

# 依存関係の同期
```
uv sync
```

# 画像処理用のライブラリをインストール
```
uv add numpy matplotlib
uv add opencv-python
```

# jupiterをインストール
```
uv add jupyter
```
POSTMANで「Token not provided」エラーが出たときの対処法

### API開発やテストの際に便利なツール「POSTMAN」を使って、ブラウザ上でのリクエストを再現しようとしたところ、以下のようなエラーに遭遇しました。

```
{
  "message": "Token not provided"
}
```

## エラーの発生状況

* POSTMANで **リクエストボディにJSONを記述**。
* **Chromeの開発者ツール（検証ツール） > ネットワークタブ**から、実際のブラウザリクエストを参考にして、JSONデータをコピーして送信。
* しかし、サーバー側から「Token not provided（トークンが提供されていない）」というエラーが返されてしまいました。

## 原因

API側が **認証トークン（JWTなど）をリクエストヘッダーの Authorization に含めることを期待**していたためです。

ブラウザでの通常のリクエストでは、自動的にトークンがヘッダーに付加されますが、POSTMANでは自分で手動で設定する必要があります。

## 解決方法

### ステップ1：トークンを取得する

1. **ブラウザの検証ツールを開く**（右クリック → 「検証」または `F12`）。
2. **ネットワークタブ**を選択。
3. 任意のAPIリクエストを選択し、「ヘッダー」タブを開く。
4. 下記のような項目を見つけて、コピーします。

```
Authorization: Bearer xxxxx.yyyyy.zzzzz
```

※「Bearer」から始まる文字列全体がトークンです。

### ステップ2：POSTMANに設定する

1. POSTMANで該当のリクエストを開く。
2. 「Headers」タブを選択。
3. 下記のように追加：

| Key           | Value                    |
| ------------- | ------------------------ |
| Authorization | Bearer xxxxx.yyyyy.zzzzz |

※コピペする際、"Bearer" も忘れずに含めてください。

### ステップ3：リクエストを再送信

トークンを設定したら、再度リクエストを送信してみましょう。正常なレスポンスが返ってくるはずです。


## まとめ

「Token not provided」エラーは、APIがトークンベースの認証を要求していることを示しています。
POSTMANでリクエストを再現する際は、**Authorizationヘッダーに正しくトークンをセット**する必要があります。

ブラウザの検証ツールから必要な情報を取得することで、スムーズにデバッグやテストが行えます。
🧠 初心者でもわかる！CPUスペックの見方と選び方ガイド

### ✅ CPU性能比較表（サンプル）

| 🖥️ CPU名             | 🚀 スコア（PassMark） | 🧬 世代   | 🧠 コア / スレッド  |
| -------------------- | ---------------- | ------- | ------------- |
| Intel Core i9-13900K | 約 60,000         | 第13世代   | 24コア / 32スレッド |
| Intel Core i7-12700  | 約 34,000         | 第12世代   | 12コア / 20スレッド |
| AMD Ryzen 7 5800X    | 約 28,000         | Zen 3世代 | 8コア / 16スレッド  |
| Intel Core i5-12400  | 約 19,000         | 第12世代   | 6コア / 12スレッド  |
| Intel Core i3-12100  | 約 13,000         | 第12世代   | 4コア / 8スレッド   |

※スコア出典：[https://www.cpubenchmark.net/](https://www.cpubenchmark.net/)

---

### 🔍 各項目の意味と見るポイント

| 項目名           | 意味・内容                                    | 初心者が見るべきポイント              |
| ------------- | ---------------------------------------- | ------------------------- |
| **CPU名**      | メーカー（Intel/AMD）＋グレード（i3/i5/i7/i9など）＋モデル名 | 「i3＜i5＜i7＜i9」の順に基本性能が高くなる |
| **スコア**       | 世界中の実測データから性能を数値化（高いほど高性能）               | 「2万以上」で動画編集・ゲームも快適        |
| **世代**        | CPUの開発世代。新しいほど高性能・省電力・新機能                | 「第12世代以上」なら基本的に安心         |
| **コア / スレッド** | 並列処理数の目安。コア＝物理的な頭脳数、スレッド＝同時作業できる数        | 8コア / 16スレッド以上で重たい作業もスムーズ |

---

### 🧭 どこを見ればCPUの「良し悪し」がわかるの？

| チェックポイント        | なぜ大事か                             | 初心者向けアドバイス               |
| --------------- | --------------------------------- | ------------------------ |
| ✅ スコア（PassMark） | 性能を一目で判断できる。高いほど速くて快適             | **2万以上が高性能CPUの目安**       |
| ✅ 世代            | 同じi7でも世代が違えば性能も大違い（例：第7世代＜第13世代）  | **「第◯世代」の表記を必ず確認しよう**    |
| ✅ コア / スレッド     | 同時作業やマルチタスク性能に影響（例：編集ソフトや仮想環境）    | **最低でも4コア / 8スレッド以上が安心** |
| ✅ モデル末尾         | K, F, Uなどの文字で性能や用途の違いを表す（例：K＝高性能） | ゲームや編集には「K」、省電力には「U」が多い  |

---

### 🛠 自分のCPUを調べるコマンド

#### ✅ コマンドプロンプト（CMD）

```cmd
wmic cpu get Name, NumberOfCores, NumberOfLogicalProcessors
```

#### ✅ PowerShell

```powershell
Get-CimInstance Win32_Processor | Select-Object Name, NumberOfCores, NumberOfLogicalProcessors
```

#### ✅ 出力サンプル（CMD/PowerShell共通）

```
Name                                           NumberOfCores  NumberOfLogicalProcessors
---------------------------------------------  -------------- --------------------------
Intel(R) Core(TM) i9-11900 @ 2.50GHz           8              16
```

---

### ✅ まとめ

* CPUは「名前・スコア・世代・コア数・スレッド数」の5つで評価しよう
* 性能の見分け方を知っておけば、買い替えや中古選びでも失敗しない
* コマンドで自分のCPUを確認して、表と比べればレベル感がつかめる！

---
XcodeでCodeSignエラー

```Command CodeSign failed with a nonzero exit code```
↑このエラーでビルドが一切できなくなった

## 解決方法
キーチェーンアクセス.appでログイン>証明書から
Apple Development: 名前(XXX)
Apple Distribution: 名前(XXX)
Apple Worldwide Developer Relations Certification Authority
を削除

ターミナルで
```
cd ~/Desktop
openssl req -new -newkey rsa:2048 -nodes -keyout Key.key -out MyRequest.csr
```
を実行し鍵を生成。質問は全部

Apple Developerのアカウント>証明書、ID、プロファイル>証明書(英語)で+を押し、Apple DevelopmentとApple Distributionを作成。
ファイルの選択を求められで先ほどデスクトップに作られたMyRequest.csrを選択してアップロード。ダウンロードできるdevelopment.cerとdistribution.cerをキーチェーンアクセスで開いてインストール。

この状態だと証明書が信頼されていないと出るが、https://www.apple.com/certificateauthority でいずれかのWorldwide Developer Relationsをダウンロードしてキーチェーンアクセスにインストールすると信頼される。

Xcodeを再起動し、クリーンビルド(Shift + Command + K)後に再ビルドすると署名できるようになっている。
Docker Desktopをアンインストールする際の注意点

:::note
こちらの記事の補足です。
:::

https://qiita.com/sugi_s/items/8b0ca2ee71edd54b8060

https://qiita.com/sugi_s/items/e1ad61ef99420cedc182

　Docker Desktopをアンインストールする際に、一部の設定ファイルや内部データが残ってしまいます。このまま上記の手順を進めると、身に覚えの無い設定に邪魔をされてエラーになることがあるので注意です。

## Docker Desktopのアンインストール

　まず、通常のアンインストール手順について解説します。

 1. スタートメニューから「プログラムの追加と削除」
 1. 設定の「インストールされているアプリ」が立ち上がります
 1. その中のDocker Desktopを選択しアンインストールします

　これでアンインストールに成功します。Docker DesktopのGUIが消え、CLIでもDockerが使えなくなるはずです。

## 残った痕跡

　基本的に影響が残るのはWindows側です。WSL側はあまり気にすることなく使えます。
　Docker Desktopを使った形跡は`C:\ProgramData\Docker`にあります。

### イメージやコンテナー

　作成したimageやcontainerなどはその直下の同名フォルダに保存されます。この領域が残っていれば、Docker Desktopをアンインストールし別途Dockerエンジンを再インストールした際に、以前の作業から続けることができます。

 　Windowsコンテナは非常に重いので再ビルドはできるだけしたくありません。なのでデータが残ることは基本的にメリットではあるのですが、不都合がある場合には消しておきましょう。

### 設定ファイル

　設定ファイルの編集には管理者権限が必要になります。

#### デーモンの設定

　`C:\ProgramData\Docker\config\daemon.json`に設定が書き込まれています。特に以下の記述がある場合には注意してください。

```json:C:\ProgramData\Docker\config\daemon.json
{
  "hosts": ["npipe:////./pipe/docker_engine_windows"]
}
```

　名前が紛らわしいのですが、Docker Desktopを使うことを意味しています。この設定が残っているとDockerを起動できないエラーが起こるため、この部分の記述を削除します。

　vimを入れている場合は簡単に削除できますが、そうでない場合でも一応編集ができます。Powershellで以下のように実行してください。

 ```powershell
# 1. JSON ファイルを読み込む
$jsonPath = "C:\ProgramData\docker\config\daemon.json"
$json = Get-Content $jsonPath | ConvertFrom-Json

# 2. 不要な "hosts" を削除する
$json.PSObject.Properties.Remove("hosts")

# 3. 編集後の内容を保存する
$json | ConvertTo-Json -Depth 10 | Set-Content $jsonPath -Encoding UTF8
 ```

　そして改めて実行ホストの設定をします。powershellで以下コマンドを実行します。

 ```cmd
dockerd -H npipe://
```

#### 認証の設定

　`$USER_PROFILE\.docker\config.json`に設定が残っています。ここで、以下のような記述が残っている場合があります。

 ```json:$USER_PROFILE\.docker\config.json
 {
    "credsStore": "desktop"
 }
 ```

 　これはdocker loginの認証の際にdocker desktopを一旦通るよ、という意味です。これが残ったままですとエラーの原因になるので、削除します。

　以下を参考に代替のセキュリティ対策をしてください。

https://docs.docker.com/reference/cli/docker/login/#options

## dockerコマンドの実行権限

　Docker Desktopの時は気にする必要はありませんでしたが、WindowsにDockerEngineを直接インストールした場合は、dockerを操作するのに管理者権限が必要になります。
Laravel 処理パフォーマンス計測

## 概要
本番運用しているシステムのCPU使用率が極端に高い処理に対して、SQLチューニングのため動作確認及び検証に使用

## 使用コード解説
### 実行開始時刻・CPU使用量の取得
```
$start = microtime(true);
$startUsage = getrusage();
```
$start：処理開始時点のUNIXタイムスタンプ（マイクロ秒単位）。

$startUsage：開始時点のCPUリソース使用状況（getrusage()で取得）。

### SQLクエリログの有効化
```
DB::enableQueryLog();
```
LaravelのDBクエリログを有効化し、この後に発行される全SQLクエリを記録する。

### 実行終了時のCPU使用量取得
```
$endUsage = getrusage();
```
$endUsage：処理終了時点のCPUリソース使用状況。

### CPU使用時間の計算
```
$cpuTime = ($endUsage["ru_utime.tv_sec"] - $startUsage["ru_utime.tv_sec"])
         + ($endUsage["ru_utime.tv_usec"] - $startUsage["ru_utime.tv_usec"]) / 1e6;
```

### 実行時間（経過時間）の計算
```
$duration = microtime(true) - $start;
```
**処理全体の経過時間（秒）**を計算。

### CPU使用率の計算
```
$cpuUsagePercent = $duration > 0
    ? round(($cpuTime / $duration) * 100, 2)
    : 0;
```
CPU使用率（%）**を算出。
「CPUが実際に使われた時間 ÷ 全体の経過時間 × 100」で計算。
例えば、全体5秒のうちCPUが1秒使われたら20%。

### ログ出力
```
Log::info("Execution time: {$duration} seconds");
Log::info("CPU Time: {$cpuTime} seconds");
Log::info("CPU Usage: {$cpuUsagePercent}%");
Log::info(DB::getQueryLog());
```
実行時間・CPU時間・CPU使用率・SQLクエリログをLaravelのログに出力。

## 出力例
```
local.INFO: Execution time: 0.47892212867737 seconds  
local.INFO: CPU Time: 0.103081 seconds  
local.INFO: CPU Usage: 21.52%  
  array (
    'query' => 'select * from `users` where `id` = ? limit 1',
    'bindings' => 
    array (
      0 => 'id',
    ),
    'time' => 18.48,
  ),
```
→SQLの処理については処理時間やquery結果を踏まえて修正方法を検討。
時間など前後するため、複数回実行して確認する。
下記記事など参考にしました。
[<MySQL>クエリチューニングによる速度改善34項目](https://qiita.com/ichi_zamurai/items/fdbe3872a505c22ee431)

### まとめ
動作検証などを実施する際に上記処理を記載することで、パフォーマンスを可視化。
SQLクエリもログとして出力され、複雑な処理を簡素化させることができるかなどに使用可能です。
＜大嶋淑之・新潟＞映像制作の合間に、心をリセットする方法

こんにちは、大嶋淑之です。
映像制作をしていると、長時間にわたる撮影や編集作業に没頭することが多くなります。そんな時に気づくのは、無意識に心と体が疲れていること。クリエイティブな仕事だからこそ、リフレッシュや小休止が大事だと感じています。今回は、映像制作の合間に心をリセットするために実践している方法を紹介します。

1. 早朝の「静かな時間」
映像制作には集中力が欠かせません。だからこそ、私は朝早くに起きて「静かな時間」を確保するようにしています。誰もいない時間帯にゆっくりとコーヒーを飲みながら、1日のスケジュールを整理したり、昨日作業した映像の振り返りをしたり。この少しの時間が、心を落ち着ける助けになるんです。

また、早朝は静かで、まだ外の音も少ないので、思考がクリアになりやすいんですよね。集中力が高まっているこの時間を有効活用することで、作業の効率も上がります。仕事が進んだ感覚を得られると、その後の1日も穏やかに過ごせます。

2. 撮影機材を手入れする
映像制作をしていると、カメラやレンズなど、いろんな機材を使います。そうした機材の手入れをしていると、不思議と心が落ち着くんです。カメラのレンズを丁寧に拭いたり、三脚を掃除したりすることが、まるで心の整理をしているかのような感覚に。仕事が忙しいときほど、機材を触っているときに「リフレッシュ」感が得られるんです。

撮影現場では、道具がうまく機能しないとストレスがたまりやすいので、日頃から機材のメンテナンスを心がけています。これが気分転換にも繋がり、次の仕事への意欲も湧いてきます。

3. 短い散歩で頭をリセット
映像制作の合間に、短い散歩を取り入れるようにしています。特に外の空気を吸うと、心がリフレッシュされて頭がスッキリします。散歩中にアイデアが浮かぶことも多いですし、何よりも身体を動かすことで体調も整います。

新潟の自然を感じながら歩くことで、リラックスしつつ、次に何をしようかと考える時間にもなります。仕事の合間にちょっとした運動をするだけで、再び集中力が戻ってくるんです。

4. クリエイティブな雑誌や本を読む
クリエイティブな仕事をしていると、常に新しいインスピレーションを求めているものです。私は、撮影や編集とは直接関係のない雑誌や本を読むことを大切にしています。特に、デザインやアートに関する本や雑誌は、仕事に必要な感覚を養うための貴重な時間です。

こういった本を手に取って、気になるページをパラパラめくっていると、何気ない瞬間にヒントを得ることができます。そして、何よりも「仕事から少し離れる時間」が大切です。視野が広がり、頭の中が整理される感じがします。

5. 目を休める
映像制作をしていると、パソコンの画面やカメラを長時間見続けることになります。これが、意外に目に負担がかかっているんですよね。だから、意識的に「目を休める」時間を作るようにしています。最近では、パソコンを使わずに外の景色を眺めたり、目を閉じて少し深呼吸したりしています。

目をリラックスさせるだけで、頭の中もスッキリします。ちょっとした習慣ですが、これが意外と効果的で、集中力が戻りやすいんです。

映像制作の仕事は、時にエネルギーを消耗するものです。でも、心と体をリセットすることで、また新たな創造力が湧いてきます。忙しい日々の中で、自分を大切にする時間を持つことが、仕事の質を高める秘訣だと実感しています。みなさんも、ぜひ自分に合ったリセット方法を見つけて、クリエイティブな作業を楽しんでくださいね！
【Python】operatorモジュールのattrgetter()関数

operatorモジュールのattrgetter()関数は、属性をキーにして並び替えます。

attrgetterはdatetime.dateのような既存のクラスだけではなく、以下のように独自に定義したクラスの属性でも使えます。

```python
from dataclasses import dataclass
from operator import attrgetter

@dataclass
class Music:
    name: str
    download: bool

music = [
    Music('NewJeans', False),
    Music('IVE', True)
]

sorted(music, key=attrgetter('name'))
```

この場合、name属性をキーにして並び替えるため、'IVE'の「I」と'NewJeans'の「N」を比較して辞書順になり、以下の結果となります。

 ```python
[Music(name='IVE', download=True), Music(name='NewJeans', download= False)]
```
Nvidia-moduleについて

# Introduction

PINNSの勉強をしようとネットを徘徊していたところ、nvidiaからもphysics、PDEを対象としたライブラリがでているとのことで、また、あまり日本語での情報が無かったことから、試してみることに。

##### 補足：PhysicsNeMo との関係
:bangbang: この情報は古いので注意ください。

NVIDIA は最近、これら物理×ML ツール群を PhysicsNeMo として統合中です。

- PhysicsNeMo Core → 旧 Modulus Core 相当
- PhysicsNeMo Sym → Modulus Sym の後継

基本的には「Core＝開発者向け」「Sym＝宣言的 PINN フレームワーク」という棲み分けが続いています。


# Installation

詳細は[このページ](https://docs.nvidia.com/deeplearning/modulus/getting-started/index.html)を参考に。

まずはPythonの環境をPINNS用に作成します。

```bash
conda create --name <env_name> python=3.10
```

version指定は、2024/11/20現在、>=3.10とのことです。


実行したコマンドは以下の通り；

```bash
pip install python=3.10
(pip cache purge)

conda install nvidia::cuda

pip install nvidia-modulus nvidia-modulus-sym

pip install quadpy orthopy ndim gdown
```

ldc_pinnsを走らせると、以下のようなlid-driven cavity flowの計算ができます。この例では支配方程式をベースに解析を行うため、データセットを用意する必要がないという特徴があります。

![outputs_pc_9000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/227359/53516c34-5891-f2b7-d6eb-a2175f1f3fe8.png)
Proxmox8 を試してみる　その２１ PostgreSQLサーバ構築(Docker, LXC)

# PostgreSQL を手っ取り早く使いたい
SQLの勉強用として PostgreSQL を構築したいと思いつつ、Docker, LXC で簡単に構築できるか調べてみました。

# Docker での構築
先に言うと慣れもありますが自分は、Docker での構築が楽でした。ベースの環境も最近は、Windowsであれば WSL2 使えますからね。

https://blog.jp.square-enix.com/iteng-blog/posts/00024-wsl2-docker-ce/

こちらの方の記事がとても分かりやすかったです。

https://qiita.com/NeK/items/15d7dbe20d1ace57ffb8

https://zenn.dev/ayano_sakai/articles/42e64d873bf7df

## Docker 構築後の作業
PostgreSQL の初期設定で外部からの接続とかありますが、Docker で構築した場合は最低限の設定がされているためすぐに使い始めることができます。とはいってもアカウントを作成したりDBを作る必要がありますけどね。

```cmd
postgres=# create role testuser with login password 'testuser';

postgres=# create database testdb owner = testuser encoding='UTF8' LC_COLLATE='C' LC_CTYPE='C' template=template0;
```

外部公開も `compose.yml` で "5432:5432" と指定してあるので、[A5:SQL Mk-2](https://a5m2.mmatsubara.com/) 使えば楽ですね。

# LXC での構築
Docker が楽と言っておきながら、Proxmox を使用しているのであれば、LXC もよい。ただこちらは PostgreSQLをインストールしたあとに各種設定を行う必要があり若干ハードルが高い？ですが、要するに `postgresql.conf` と `pg_hba.conf` を設定すればいいんです。

https://qiita.com/0_terarin_0/items/d973e825e2b11797c295

psqlコマンドをインストール(Ubuntuの場合)

```cmd
$ sudo apt-get install postgresql-client
```

でもって posgresアカウントのパスワードを変更しておきます。

```cmd
$ sudo -u postgres psql
postgres=# alter role postgres with password 'postgres';
```

https://qiita.com/0_terarin_0/items/d973e825e2b11797c295

# PGTune
PostgreSQLサーバをチューニングするのに最適解？を教えてくれるサイト。初めて知ったけどなかなかよさそう。

https://pgtune.leopard.in.ua/

# Postgres-WASM
PostgreSQLをWebブラウザ上で動かす方法もあるらしい。近いうちに調べてみます。

https://www.publickey1.jp/blog/24/webassembypostgresqlpglitenodejspostgresqldb.html

https://www.publickey1.jp/blog/24/webwasmpostgresqlpostgresqldabasebuildlive_sharesupabase.html

https://qiita.com/koji0705/items/a57ee21c77aafea561cd
【Python】sorted()関数とreversed()関数

sorted()関数は、引数のイテラブルを辞書順に並び替えてリストを返します。

sorted()関数の引数で「reverse=True」を付けると、降順に並び替えてリストを返します。

reversed()関数は、引数のイテラブルを逆順に並び替えてイテレーターを返します。降順ではなく逆順です。また、戻り値はイテレーターのため、リストを取得したい場合はlist()関数で変換します。

sorted()関数とreversed()関数は非破壊のため、引数で取得した変数の内容に影響はありません。
ansible で PostgreSQL のマイナーバージョンアップ

# はじめに
ansible で OracleDB のRU適用をしたので、PostgreSQL でも同等のことをやってみます:elephant:

https://qiita.com/jri_narita/items/2dbeb3d39438b835b972

# 必要なファイルの準備
inventory.ini は OracleDB の方とほぼ同じなので割愛します。
確認したい方は「はじめに」に記載のリンク先をご確認ください。

playbook は下記の通りです。
起動 (停止) は serviceモジュールを使いたかったんですが、docker desktop上で試している都合上使用しても起動 (停止) できないので、shellモジュールを使いました。
serviceモジュールを使える環境では serviceモジュールを使いましょう。

また、DNFを使うにあたり`become: yes`していますが、事前に postgresユーザを sudoers に追加しています。セキュリティ要件次第では別の方法を検討する必要があります。

```yaml:mvup.yaml
- hosts: ansible_target
  gather_facts: false

  tasks:
    - name: stop pos
      shell: /usr/pgsql-16/bin/pg_ctl stop

    - name: vup pos
      dnf: name=postgresql16-server state=latest
      become: yes

    - name: start pos
      shell: /usr/pgsql-16/bin/pg_ctl -D /var/lib/pgsql/16/data/ -l logfile start
```

ディレクトリ構成も割愛します。
今回使用しているモジュールはすべて builtin なので。

# いざ実行！
…の前に状態確認です。

```sql:確認
postgres=# select version();
                                                 version
----------------------------------------------------------------------------
------------------------------
 PostgreSQL 16.5 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 202407
19 (Red Hat 11.5.0-2), 64-bit
(1 row)
```

16.5で間違いないことを確認して実行！※

```terminal:playbook実行
[postgres@73486a139b1a ~]$ ansible-playbook -i inventory.ini --connection=local mvup.yaml

PLAY [ansible_target] **********************************************************

TASK [stop pos] ****************************************************************
changed: [localhost]

TASK [vup pos] *****************************************************************
changed: [localhost]

TASK [start pos] ***************************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost                  : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

[postgres@73486a139b1a ~]$
```

無事完了したので、改めて状態確認です。

```sql:確認
postgres=# select version();
                                                 version
----------------------------------------------------------------------------
------------------------------
 PostgreSQL 16.9 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 202407
19 (Red Hat 11.5.0-5), 64-bit
(1 row)
```

最新版 (16.9) になっていることを確認できました！

※特定のマイナーバージョンをインストールする方法は下記を参考にさせていただきました:bow:

https://qiita.com/black_karubi/items/4bbc2d03353c9d208f66

なお、マイナーバージョンによっては追加作業が必要になるケースがあるので、事前にリリースノートを確認しておきましょう。

https://www.postgresql.org/docs/release/16.9/

下記の記載が該当箇所です。
>However, if you have any self-referential foreign key constraints on partitioned tables, it may be necessary to recreate those constraints to ensure that they are being enforced correctly. See the second changelog entry below.

OracleDB のときは unzip したRUをどこかに置いておく必要がありましたが、これに相当する作業がないのは楽で良いですね。
builtinモジュールで済むのも良いです。(追加作業は community.postgresqlモジュールでできるかも？)
【Python】sleep()関数

sleep()関数の引数の単位は「秒」です。

「s」のような単位表記があるとエラーになります。

また、引数の中で掛け算などの四則計算が使えます。

例えば5時間停止する場合、「time.sleep(18000)」より「time.sleep(60 * 60 * 5)」のほうが直感的です。
ブラウザが勝手にリロードされる…地味だけどハマったfetchキャンセル原因メモ

# fetchが途中でキャンセルされる…

ローカルで JavaScript（フロントエンド）＋ FastAPI（バックエンド）による開発を行っていた際、`fetch` リクエストが途中でキャンセルされるという不可解な挙動に遭遇しました。  
いろいろ調査した結果、**VSCode拡張機能「Live Server」の自動リロード機能が原因**だったという話です。

---

## 開発環境

- フロントエンド：HTML + JavaScript（Live Server 拡張機能）
- バックエンド：Python（FastAPI） + uvicorn
- 使用ブラウザ：Google Chrome（＋Microsoft Edgeでも検証）

---

## 現象

`fetch` 実行後、数秒で **ブラウザが勝手にリロードされ、`fetch` がキャンセル**される。  
API 側では処理が完了しているにもかかわらず、ブラウザ側はその応答を待たずに中断される。

---

## 原因

VSCodeのLive Serverには、ファイル更新を検知して自動でブラウザをリロードする機能（ライブリロード）がある。  
API側で `audio.mp3` などのファイルを生成した際、それが「変更」と見なされてリロードが発生。
結果として、**リクエスト途中の `fetch` がキャンセル**されていた。

---

## 解決までに試したこと

### 1. HTML・JSの基本構造を確認  
- `<button>` タグの `type="submit"` を疑ったが未使用  
- 明示的な `location.reload()` などもなし  

### 2. バックエンド（FastAPI）側のログ確認  
- 例外発生や処理落ちを疑いログ出力を強化  
- 結果：APIは正常終了しており、`fetch` が先にキャンセルされていることが判明  

### 3. 処理の重さ・タイムアウトを検証  
API側で以下の処理を行っていた：

- 動画から音声抽出（FFmpeg）
- Whisper による文字起こし

これらを段階的にコメントアウトし検証。

- 両方無効 → 正常終了  
- Whisperのみ無効 → リロード発生  

→ mp3ファイルの生成タイミングが怪しいと仮説立て。

テスト用動画を10秒に短縮しても同様の現象が発生したため、処理時間ではなく「**ファイル生成そのもの**」がトリガーと判断。

### 4. 本番サーバーや他ブラウザでも再現  
- `uvicorn` の起動オプション変更（タイムアウト調整など）  
- Edgeなど他ブラウザで検証 → 状況変わらず  

### 5. 偶然の発見：Live Server経由でないときは正常  
Live Serverを使わずに直接HTMLファイルを開いたところ、リロードが発生せず問題なく完了。

---

## 解決方法：Live Serverの監視対象から除外

Live Serverの設定ファイル（`.vscode/settings.json`）で、監視対象から生成ファイルを除外する。

### ディレクトリ単位で除外する例：

```json
{
  "liveServer.settings.ignoreFiles": [
    "**/audioOutput/**",
    "**/Output/**"
  ]
}
```
### ファイルを直接指定して除外する例：
```json
{
  "liveServer.settings.ignoreFiles": [
    "**/audio.mp3",
    "**/result.json"
  ]
}
```

---

## 補足：Live Serverの「ホットリロード」と「ライブリロード」の違い
今回のLive Serverの挙動は「ホットリロード」ではなく、「ライブリロード」（＝ファイル変更を検知してページ全体を再読み込み）に該当します。
- **ホットリロード**：特定モジュールだけを更新し、状態を維持したままUIを更新
- **ライブリロード**：ページ全体をリロード

Live Serverは主に後者の機能を提供しているため、バックエンドが出力したファイルも対象になり得る点に注意が必要です。

---

## おわりに
Live Serverは非常に便利なツールですが、バックエンドで生成されるファイルに反応するとは盲点でした。
同様の現象で悩んでいる方の参考になれば幸いです。

---
＜元島純貴＞小さな発見で効率化！

最近、開発中に思わぬ「発見」をしてしまったので、シェアしたいと思います。小さなことですが、これが大きな効果を生んだんです。特にフリーランスエンジニアとして一人で作業していると、「ちょっとした気づき」が作業効率に大きく影響します。

仕事の進行中に気づいたこと
私は普段、フロントエンドからバックエンドまで幅広く対応しています。最近、あるプロジェクトで「React」を使ってUIを作成していたとき、ずっと面倒だなと思っていたことがありました。それは「状態管理」です。特に、プロジェクトが大きくなると、ステートの管理が複雑になり、コードが煩雑になりがちでした。

解決策の発見
そこで、試しに「React Context API」を使ってみることにしました。最初は「状態管理にはReduxが最適」と思い込んでいたのですが、Context APIもなかなか使いやすい！特に、小規模なアプリケーションやコンポーネント間のデータ共有には最適でした。

これを使うことで、状態をグローバルに管理でき、複雑なプロップスの受け渡しが不要に。簡単に言うと、不要なコードが減り、保守性が一気に向上しました。Reduxのように大規模な設定が必要なく、コードがシンプルに保たれるのは本当に嬉しい発見でした。

効率化の裏側
さらに、React Context APIを使ってグローバルな状態を管理した結果、UIのレンダリング速度も改善されました。最初は、状態更新のたびに無駄な再レンダリングが起こっていたのですが、Context APIを上手く使うことで、必要な部分だけを更新するように設計できました。これにより、アプリケーションのパフォーマンスも大きく向上しました。

教訓と学び
この発見を通じて学んだことは、「技術選定に固執しない」ということです。特に新しい技術やライブラリが出るたびに、それを使うことが正解だと思いがちですが、既存のツールやライブラリでもうまく解決できる問題は多いです。大事なのは、目的に合った解決策を柔軟に見つけ出すことだと感じました。

これからも新しい技術を試すことは続けていきますが、あえてシンプルな方法で解決できる問題には、無駄な複雑さを避けることを意識しようと思います。開発者として、常にシンプルで効率的な解決策を追い求めることが、結果的に仕事の質や効率を大きく向上させるんですね。

まとめ
今回は、React Context APIを使った簡単な発見についてシェアしました。大きな技術革新がなくても、日常の開発の中にこそ効率化や改善のヒントが転がっているものです。みなさんも、ぜひ自分の作業の中で「ちょっとした発見」を楽しんでください！
#10 stashを削除する

# はじめに
Gitでのスタッシュ削除操作についてまとめます。

# 一覧表示
削除する前にスタッシュの内容を一覧表示します。

``` 
$ git stash list
```

そうするとこのように表示されます。

```
stash@{0}: On feature/xxxxxx/yyyyyy: nameOfStash
stash@{1}: On feature/zzzzzz: nameOfStash
stash@{2}: On feature/zzzzzz: nameOfStash
stash@{3}: On develop: nameOfStash
stash@{4}: On develop: nameOfStash
stash@{5}: On develop: nameOfStash
stash@{6}: On develop: nameOfStash
stash@{7}: On feature/zzzzzz: nameOfStash
stash@{8}: On feature/zzzzzz: nameOfStash
stash@{9}: On feature/zzzzzz: nameOfStash
stash@{10}: On feature/zzzzzz: nameOfStash
```

# 個別に削除する
一覧表示されたスタッシュの中から特定のスタッシュを削除する場合は、以下のコマンドを実行します。

```
$ git stash drop stash@{0}
```

# 一括削除する
すべてのスタッシュを一括で削除したい場合は、以下のコマンドを実行します。

```
$ git stash clear
```

以上
renovate.jsonの最低限設定

# Renovateとは

Renovateを使って依存しているパッケージのバージョンを簡単に最新状態に保つことができます。
Repoごとに設定するときに毎回どっかのRepoからコピーしたりしてるので、一度最低限の情報を書いておこうと思います。

# Settings

私が個人プロジェクトでよく使う設定は以下になります。

```json
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:recommended",
    "github>aquaproj/aqua-renovate-config#2.8.1"
  ],
  "automergeStrategy": "squash"
}
```

# 設定項目

## `extends`

- すぐに便利に使いたい／特にこだわりがない場合 → [config:recommended](https://docs.renovatebot.com/presets-config/#configrecommended) (defaultではこちらが設定される)
- 細かくカスタマイズしたい／既存のポリシーがある場合 → `config:base`
- [config:best-practices](https://docs.renovatebot.com/presets-config/#configbest-practices): recommendedにプラスして pinDigestsなどが追加されている
    ```json
    {
      "extends": [
        "config:recommended",
        "docker:pinDigests",
        "helpers:pinGitHubActionDigests",
        ":configMigration",
        ":pinDevDependencies",
        "abandonments:recommended"
      ]
    }
    ```
- aqua を使ってる場合は `"github>aquaproj/aqua-renovate-config#2.8.1"`をいれる ([ref](https://zenn.dev/shunsuke_suzuki/books/aqua-handbook/viewer/renovate))


:::note info
*Use the config:best-practices preset, instead of the config:recommended preset*
[General Recommendation](https://docs.renovatebot.com/upgrade-best-practices/#general-recommendations)には、recommendよりもbest-practicesを使うのが推奨されていて recommendedとは？となる :smile: 
:::


## ignorePaths

バージョン変更したくない場合などは、以下のように書いています。

```json
  "ignorePaths": [
    "scripts/.python-version"
  ]
```

## [automerge](https://docs.renovatebot.com/configuration-options/#automerge)

> By default, Renovate raises PRs but leaves them to someone or something else to merge them.

デフォルトでは、RenovateはPRを作成して誰かがマージするのを待つ。

renovateを使う醍醐味の一つであるauto merge。特に個人プロジェクトなどは全部Auto Mergeでもいいくらいだと思います。

もう少し慎重に運用する場合は、以下のようにminor, patch, pin, digestのタイプならautomergeを設定するなど、対象を絞ってautomergeを設定することができます。

```json
{
  "packageRules": [
    {
      "matchUpdateTypes": ["minor", "patch", "pin", "digest"],
      "automerge": true
    }
  ]
}
```

その他にも`"matchDepTypes": ["devDependencies"],`を設定することでdev dependencyの場合のみauto mergeするなどすることができます。

:::note info
Tipsとして、 [Wait two weeks before automerging third-party dependencies](https://docs.renovatebot.com/upgrade-best-practices/#wait-two-weeks-before-automerging-third-party-dependencies) 新しいバージョンをすぐにマージせず 2週間待ってからマージするというOptionもあるので、合わせて活用するとより安全になります。

> If you enable automerge and minimumReleaseAge, Renovate will create PRs immediately, but only automerge them when the minimumReleaseAge time-duration has passed.

automergeを有効化して、minimumReleaseAgeも設定した場合は、PRは即座に作成されるがautomergeはminimumReleaseAgeの時間待ってからマージされる
:::



# References

- https://docs.renovatebot.com/
- [aqua renovate](https://zenn.dev/shunsuke_suzuki/books/aqua-handbook/viewer/renovate)
WSL2でVS Codeを直接WSLモードで起動する方法(ClaudeCode 環境向け)

# WSL2でVS Codeを直接WSLモードで起動する方法

## 問題の背景

WSL2環境でVS Codeを使用する際、Windowsのショートカットから以下のようなパスでワークスペースを開くと：

```
\\wsl.localhost\Ubuntu\home\username\project\workspace.code-workspace
```

VS Codeは一度Windows側で開かれ、その後「WSLモードで再オープン」のリンクをクリックする必要があります。

この記事では、**最初からWSLモードでVS Codeを起動する方法**を解説します。

## 前提条件

- WSL2がインストール済み
- VS Codeがインストール済み
- VS Code WSL拡張がインストール済み
- Ubuntuディストリビューションが設定済み

## 解決方法

### 方法1: VS Code WSL拡張を使ったコマンド（推奨）

Windowsショートカットのターゲットを以下のように設定：

```bash
code --remote wsl+Ubuntu /home/username/project/workspace.code-workspace
```

**具体例：**
```bash
code --remote wsl+Ubuntu /home/sanomine/tools_meowassist/tools.meowassist/tools.meowassist.code-workspace
```

### 方法2: WSL内からVS Codeを起動

ショートカットでWSLを起動してからcodeコマンドを実行：

```bash
wsl -d Ubuntu -e bash -c "cd /home/username/project && code workspace.code-workspace"
```

**具体例：**
```bash
wsl -d Ubuntu -e bash -c "cd /home/sanomine/tools_meowassist/tools.meowassist && code tools.meowassist.code-workspace"
```

### 方法3: より確実な方法

ワークスペースファイルを指定せず、プロジェクトディレクトリを直接開く：

```bash
wsl -d Ubuntu -e bash -l -c "cd /home/username/project && code ."
```

**具体例：**
```bash
wsl -d Ubuntu -e bash -l -c "cd /home/sanomine/tools_meowassist/tools.meowassist && code ."
```

## ショートカットの作成手順

### 1. デスクトップに新しいショートカットを作成

1. デスクトップで右クリック
2. 「新規作成」→「ショートカット」を選択
3. 上記のいずれかのコマンドを「項目の場所」に入力
4. ショートカット名を設定（例：「VSCode WSL Project」）

### 2. ショートカットのプロパティ設定

- **ターゲット**: 上記のコマンド
- **作業フォルダー**: 空白または `C:\`
- **実行時の大きさ**: 通常のウィンドウ

## 各方法の特徴

| 方法 | メリット | デメリット |
|------|----------|------------|
| 方法1 | 最もシンプル、ワークスペース設定を維持 | WSL拡張が必要 |
| 方法2 | 確実に動作、ワークスペースファイルを使用可能 | 少し複雑 |
| 方法3 | 最も安定、プロジェクト全体を開く | ワークスペース設定が使えない |

## トラブルシューティング

### ショートカットが動作しない場合

1. **WSL拡張の確認**
   ```bash
   code --list-extensions | grep ms-vscode-remote.remote-wsl
   ```

2. **パスの確認**
   WSL内でパスが正しいか確認：
   ```bash
   ls -la /home/username/project/
   ```

3. **権限の確認**
   WSLディストリビューションが正常に動作するか確認：
   ```bash
   wsl -l -v
   ```

### VS Codeが起動しない場合

WSL内でcodeコマンドが使用可能か確認：

```bash
# WSL内で実行
which code
# 出力例: /mnt/c/Users/Username/AppData/Local/Programs/Microsoft VS Code/bin/code
```

codeコマンドが見つからない場合は、VS Codeを再インストールするか、PATHを設定してください。

## Claude Codeとの連携

この方法でVS Codeを起動すると、最初からWSLモードになるため：

- Claude Codeが直接使用可能
- WSL内のツール（PHP、Node.js、Pythonなど）にフルアクセス
- パフォーマンスの向上
- ファイルシステムの統一

## 応用例

### プロジェクト別ショートカット

複数のプロジェクトがある場合、それぞれにショートカットを作成：

```bash
# プロジェクトA
code --remote wsl+Ubuntu /home/username/projectA/workspace.code-workspace

# プロジェクトB  
code --remote wsl+Ubuntu /home/username/projectB/workspace.code-workspace
```

### バッチファイルでの起動

より複雑な設定が必要な場合は、バッチファイル（.bat）を作成：

```batch
@echo off
wsl -d Ubuntu -e bash -l -c "cd /home/username/project && code . && echo 'VS Code started in WSL mode'"
pause
```

## まとめ

WSL2環境でVS Codeを直接WSLモードで起動することで：

- 「再オープン」の手間が不要
- より高速な動作
- WSLツールとの完全な統合
- Claude Codeなどの開発ツールの即座な利用

最も推奨される方法は**方法1**（`code --remote wsl+Ubuntu`）ですが、環境によって最適な方法を選択してください。

これで効率的なWSL2開発環境が構築できます！
laravel bladeにてBootstrap Iconsを使ってみる

## 概要

laravelのbladeにてBoobstrap Iconsを使う方法を簡単にまとめる。

※「laravelのbladeにて」と記述しているがCDNのリンクを読む方式を使うのでHTMLファイルでも同様のやり方でOK

## 前提

他のアイコン提供系サービスと同様にBootstrap Iconsも今回紹介するCDNリンク読み込みの他に、アイコンのファイルをサイトから人間の手でダウンロードしてプロジェクトファイルに設置して呼び出して使う方法や、npmを使ってアイコンをトランスパイルしてCDNリンク無しで使う方法などもある。

## 方法

任意のbladeファイルを用意する。
head要素内部に下記の記述を行う。

```html
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.css" rel="stylesheet">
```

上記の記述をしたファイルと同様のbody要素内部に下記の記述を行う。

```html
<i class="bi bi-search"></i>
```

アイコン（今回の場合虫眼鏡アイコン）が表示される。

class属性の属性値はアイコンによって異なり、下記で好みのアイコンの属性値を確認する事ができる。

https://icons.getbootstrap.com/

## 付録

「手動ダウンロードで使う方法」と「npmを使う方法」を簡単にまとめておく。

### 手動ダウンロードで使う方法

1. https://icons.getbootstrap.com/ にアクセス
1. 好みのアイコンを探す
1. 好みのアイコンの詳細画面を開く
1. 「Download SVG」を押下してアイコンファイルを手動ダウンロード

    ![CleanShot 2025-06-19 at 10.02.06@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/923e40d2-037a-48a3-ab65-8d71072eb623.jpeg)

1. laravelのpublicディレクトリ直下などに設置し、下記の様に呼び出して使用

    ```html
    <img src="{{ asset('your_svg_file_path') }}">
    ```

### npmを使う方法

1. `resources/css/app.css`に下記のような記述を追記

    ```resources/css/app.css
    @import "bootstrap-icons/font/bootstrap-icons.css";
    ```

1. `$ npm run dev`を実行
1. 下記のように呼び出して使用（使い方はCDNの呼び出しと一緒）

    ```html
    <i class="bi bi-search"></i>
    ```
Claude CodeでWindows開発者のワークフローが変わった話

# Claude CodeでWindows開発者のワークフローが変わった話

## はじめに

最近、AnthropicからリリースされたClaude Codeを使い始めてから、Windows環境での開発スタイルが大きく変わりました。今まではPowerShellやコマンドプロンプトを使っていたのですが、Claude Codeを機にWSL（Windows Subsystem for Linux）をメインのコマンドライン環境として使うようになったので、その経験を共有したいと思います。

## Claude Codeとは

Claude Codeは、ターミナルから直接Claudeに開発タスクを委譲できるコマンドラインツールです。コードの生成、デバッグ、リファクタリングなどを自然言語で指示できるため、開発効率が大幅に向上します。

## なぜWSLに移行したのか

### 1. Linuxコマンドの豊富さ
WSLを使うことで、Linux環境の強力なコマンドラインツールをそのまま利用できます。`grep`、`sed`、`awk`などのテキスト処理ツールや、`curl`、`wget`などのネットワークツールが標準で使えるのは大きなメリットです。

### 2. Claude Codeとの親和性
Claude Codeは元々Unix/Linux環境を想定して設計されているようで、WSL上で動作させると非常にスムーズです。パッケージ管理やファイル操作のコマンド生成も自然で、期待通りの結果が得られます。

### 3. 開発環境の統一
Docker、Node.js、Python、Go などの開発環境をWSL内で統一できるため、環境の切り替えに悩まされることがなくなりました。

## 実際の使用例

```bash
# Claude Codeでプロジェクトの初期化
claude-code "Create a new React TypeScript project with Tailwind CSS"

# バグ修正の依頼
claude-code "Fix the authentication error in this Express.js app"

# テストコードの生成
claude-code "Generate unit tests for the user service module"
```

## WSL環境でのメリット

- **パフォーマンス**: ファイルI/Oが高速
- **互換性**: npm、pip、cargo などのパッケージマネージャーが問題なく動作
- **統合性**: VS Code のWSL拡張機能との連携が優秀

## まとめ

Claude CodeをきっかけにWSLを本格的に使い始めましたが、Windows上でのLinux開発環境の便利さを改めて実感しています。特に、AI駆動の開発ツールとの相性の良さは予想以上でした。

まだClaude Codeを試していない方は、ぜひWSL環境で試してみることをおすすめします。開発体験が大きく変わるかもしれません。

## 参考リンク
- [Claude Code公式](https://docs.anthropic.com/ja/docs/claude-code/overview)
- [WSL公式ドキュメント](https://docs.microsoft.com/ja-jp/windows/wsl/)
【PAM】特権アクセス管理、何それ？美味しいの？

## はじめに

普段はWebデザインやフロントエンドの開発に携わっていて、「情報シスの人たちの話」は正直あまり興味がありませんでした。

そんな私が、[Qiita Tech Festaの記事投稿キャンペーン](https://qiita.com/official-events/350f22416f0b85428b7a)をきっかけに「特権アクセス管理（PAM）」という言葉を知りました。

── 「特権アクセス管理、何それ？　特権階級みたいでなんか偉そう」と思っていたけど、調べてみると組織にとっては、結構大事なことで、知っておいたほうがよさそう

── そして、知らない人もきっと多いはず。

ということで今回は、「特権アクセス管理って何それ？ 美味しいの？」レベルの私が、同じような立場の人向けに、ざっくりまとめてみようと思います！


## 特権アクセス管理（PAM）とは？
結論を先にまとめると

:::note
特権アクセス管理（PAM）とは、特権アカウントを管理・監視・制限することで
アプリケーションやシステムをできるだけ安全に保つための仕組みのこと
:::

だそうです。


### 🔑 特権アカウントとは？
特権アクセス管理（PAM）について知る前に、
まずは特権アカウントについて知っておく必要がありそうです。

> 特権アカウントとは？
> IT環境内のアプリケーション、デバイス、システムに対して、高いレベルのアクセス権及び各種権限が与えられた一部のアカウントを指します。
> 引用：[PAM（特権アクセス管理）とは？｜Safeguard – ジュピターテクノロジー株式会社](https://www.jtc-i.co.jp/product/sps/pam.html)

ん ── なるほど 🤔

つまり、システムやサーバーを操作できる **管理者アカウント** や **root権限** などの
普通のユーザーよりも強いアクセス権を持つユーザー・アカウントのことのようです。

### ⚠️ 特権アカウントを管理するのはなぜ？

なぜ、特権アカウントを管理・監視・制限する必要があるのでしょう？
それは、この「**強い権限**」を放っておくとリスクの温床になるためのようです。

例えば、

- ログが残らないため、誰が何をしたかわからない
- 権限を持ちすぎていて、操作ミスや内部不正が怖い
- 外部から侵入されたとき、被害が大きくなりやすい

があるみたいです。

ん ── なるほど 🤔

ドラマの半沢直樹（ちょっと古すぎる？）でも、
大和田常務が不正融資をしていたり、
役職が高い（強い権限を持っている）人のほうが悪いことをしていますし、

強い権限を持っている人のPCとかが乗っ取られて、
情報が全部抜き取られるとかもありそうです。

確かに、これらのリスクは、組織として防いでおきたいですね!

### 🛡️ 特権アクセス管理（PAM）とは？

ここまでわかったら、あとは簡単です。

:::note
特権アクセス管理（PAM）とは、アプリケーションやシステムを強い権限のリスクから守るために、特権アカウントを管理・監視・制限することで、できるだけ安全を保つ仕組みのこと
:::

ということです。

## 特権アクセス管理（PAM）はどうやるの？

ここまで理解できれば、特権アクセス管理（PAM）をしたくなりますよね？

特権アクセス管理（PAM）の方法をまとめるとこんな感じだそうです。

- **特権アカウントを一元管理する**
    - 特権ユーザー用のアカウントを好き勝手に使わせないため
- **一時的に権限を付与する**
    - 常に「強い権限」を持っていると危ないので、必要なときにだけ、期間限定で権限を付与する
- **操作をログに残す・監視する**
    - 万が一トラブルが起きたときに備えて、記録しておくことも大事
- **不要な特権ユーザーを減らす**
    - そもそも「特権アクセス」が必要な人を最小限にすること重要

こう言われてみると、
利用するのに毎回申請することで、一時的に使える社内のシステムがあり、
「毎回申請するのめんどくさいな」とか、「1回申請したらOKにしてよ」とか
いろいろおもうことはあるのですが、会社をリスクから守るためだったということですね

## 小さなPAMから始めよう!

今回、初めて特権アクセス管理について調べてみて思ったことは、
**「管理されている側」だからといって、PAMを他人事にしない**ということです。

特権アクセス管理（PAM）というと、「情報システム部門がやるセキュリティの話」って思いがちです。
でも実際は、私たち「使う側」も無関係ではないと感じました。

特権アクセスがしっかり管理されていても、
**使う側が無自覚だと、管理している側の苦労が水の泡**になってしまうこともあるでしょう。

だからこそ、PAMの本質は、**「仕組み」よりも「意識」** だと感じました。
情報シスがどれだけ仕組みを整えても、**最終的に操作するのは“個人”** です。

個人がPAMの意識を持つこと ── 小さなPAMが結果的に組織全体の安全につながっていくのだと感じました。

---
最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaに記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

*(Meta Quest 3S が欲しいです。)*

https://twitter.com/degudegu2510
【セキュリティ】認証（Authentication）と 認可（Authorization）の違い

# はじめに

個人開発する中でよく出てくる「認証（Authentication）」と「認可（Authorization）」。
二つの単語の違いを認識していなかったので、調べてまとめました。

# 認証（Authentication）とは？

## 目的：その人が「誰か」を確認すること

## 具体例
- ユーザー名とパスワードでログイン
- 指紋認証や顔認証
- GoogleやGitHubなどのOAuthログイン

## イメージ
「あなたは本当にAさんですか？」を確認するプロセス。

# 認可（Authorization）とは？

## 目的：その人が「何をしてよいか」を制御すること

## 具体例
- 一般ユーザーは自分のプロフィールしか編集できない
- 管理者はすべてのデータにアクセス可能
- フリープランでは一部機能が制限される

## イメージ
「Aさんはこの操作をしていいのか？」を確認するプロセス。

# 認証と認可の関係

| フェーズ | 処理内容 | 具体的な意味 |
|--------|----------|----------------|
| 1️⃣ 認証 | 誰かを確認 | Aさんであることを確認する |
| 2️⃣ 認可 | 権限を確認 | Aさんに管理画面のアクセス権があるか確認する |

---

# よくある混同

- 「認証した＝すべての操作ができる」は**誤解**。
:::note info
認証されても、認可されていなければアクセスできない機能があり得る。
:::

# 補足：認証・認可の技術例

| 項目 | 一般的な技術・手法 |
|------|----------------------|
| 認証 | JWT, OAuth, Firebase Auth, Supabase Auth など |
| 認可 | RBAC（ロールベースアクセス制御）, ABAC（属性ベース）など |

# まとめ

| 用語 | 目的 | 例 |
|------|------|----|
| 認証 | 本人確認 | ログイン処理など |
| 認可 | 権限確認 | 機能やデータへのアクセス制御 |

少しでも理解の助けになれば嬉しいです！  
よければ「いいね」や「ストック」もよろしくお願いします 🙌
AI駆動で爆速開発するための Cursor 活用 Tips

# 🚀AI駆動で爆速開発するための Cursor 活用 Tips 〜実務でどう使い倒すか〜（精度進化と実体験で語る）

> **この記事を読むと**  
> - CursorのAI補完がどれだけ進化し、現場でどう役立つのかがリアルにわかる  
> - 開発スタイルの変化や、印象的な活用シーンも含めて“実務で使えるCursor”の使い倒し方が学べます
> - 株式会社エムニ(松尾研 × 京大発のAIスタートアップ)で実施しているAI駆動開発基礎が分かります 

---

## 1. 私の開発環境

私はPMとエンジニアを兼任しながら、日々AIシステムを開発しています。朝はチャットボットのバグ修正、昼は要件定義、夜はリリース準備など、かなりタスクが細切れになります。

---

## 2. この瞬間は本当に助かった

エムニで立ち上げたチャットボットプロジェクトでも、Cursorがいてよかった…と思った瞬間。

### 👤 関わって来なかった機能の緊急修正

クライアントから修正要望が来ているけど、動けるエンジニアがいない。ありがちな状況です。

→ 普段なら絶望しつつ、自分でロジックを追って…となるところ、Cursorにこう聞きました：

```
このファイルの意図と修正のための方針を教えて、TODOで整理して
```

→ 10秒後に意図を要約してくれて、必要な分岐パターンやテスト項目をリストアップ。**そのまま修正に着手できた**あの体験は、今でも「Cursor信者」になったきっかけです。

---

## 3. 最近のCursor、マジで化けた

2025年以降のCursorは「ただ便利なAIエディタ」から、「開発の中心に置ける相棒」へと進化しています。

### 🔍 コーディング精度の飛躍（GPT-4.1）

- **GPT-4.1が無料で統合**（2025年4月）→ SWE-benchスコア +21.4ポイント
- **100万トークンの巨大コンテキスト** → 巨大なコードベースでも参照漏れなし
- **Claude 3.7よりクリーンなコードを出す**という声も多数

> 実際、自作のNext.js＋FastAPI構成でも、**一発で正解に近いコード**が出ることが増えました。

### 🧠 長文脈×メモリで「忘れないAI」へ

- プロジェクト単位でメモリ保持（命名ルールや設計思想など）
- 過去のやりとりを踏まえた提案ができる → **継続的な開発で超有効**

---

## 4. 具体的な生活の変化

| Before | After（Cursor導入） |
|--------|----------------------|
| 要件再確認 → Notionにで設計 → VSCode起動 | 要件そのままCursorでTODO抽出 → 内容を確認 → 即コード化 |
| コードを理解するのに30分 | AIに要約・TODOを聞けば5分で概要把握 |
| README書くのが億劫で後回し | 「README書いて」で8割ベースが出る |
---

## 5. 実際に使っているオプション機能

- ✅ **Auto-Run Mode** → タイピングの途中から提案してくれて“手が止まらない”
- ✅ **エージェントモード** → 「この機能追加して」で複数ファイルに渡る変更を一括実行
- ✅ **カスタムモード＆.cursorrules** → 自分のコーディング癖をAIに覚えさせて精度UP
- ✅ `.cursorignore` → `.env`だけだと読まれることがあるので明記が安全

---

## 6. まとめ：Cursorは“もう1人の自分”

私はCursorを「書いてくれるやつ」ではなく、「考えてくれる自分の分身」として扱っています。ときどき変な提案もありますが、それを含めて一緒に組んでいる感覚があります。

→ **忙しいエンジニアこそ、Cursorにもっと頼っていい。**

プロダクトの責任を背負いつつ、設計も実装もこなす立場にとって、Cursorは“分身”であり“品質を担保する相談相手”でもあります。

---

## 📎 参考リンク

- [Cursor 公式ドキュメント](https://docs.cursor.sh/)