OmniAICreator/Qiita-1.07M huggingface dataset:
API忘備録: yfinanceのエラーYFTzMissingError (“No timezone found”) の対処方法

# はじめに
株価等のデータ取得にyfinanceを実施していますが、最近 2025/2月から以下のエラーが報告されています。
```
yfinance.exceptions.YFTzMissingError: $%ticker%: possibly delisted; no timezone found
```
# 原因

どうやら今年の２月頃から、Yahooが既存のUser-Agentヘッダをブロックし始めたようで、リクエストにエラーが出ていました。幸い、yfinance 0.2.54以降のバージョン(現在は0.2.55)でこのエラーに対応しているのでアップデートすることをお勧めします。

# 対処

以下のアップデートコマンドを利用します。

```bash
pip install --upgrade yfinance
pip show yfinance
```
私はMambaを利用しているので、以下を利用しました。
```bash
 mamba install -c conda-forge --force-reinstall yfinance
 mamba list yfinance
```

パイソンを利用している場合は、以下のコマンドで実際のyfinanceの利用バージョンを確認できます。

```python
import yfinance as yf
print("yfinance version:", yf.__version__)
```

仮想環境やIPythonのインタラクティブ環境を利用している場合は、その環境でバージョンが利用されているか確認していみてください。

Ctr+Shift+Pでパイソン環境を選択できます。

私の場合は、IPythonの環境を利用している為、以下のPython環境も変更するがありました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283070/c752d939-acc6-48b1-b2ce-7f14b81882c9.png)

# 終わりに

今回は完全な忘備録ですが、ChatGPTのDeepSearchで助けてもらえました。この機能でも３０分ぐらいネット検索して、考えていたので、あまり多く知られていないFixなのでしょうね。

ではまた。

Happy Hacking!!!
Fedora Sway AtomicでH.264動画が再生できなかったときの対処

# 動機
Fedora Sway Atomicをインストールした後、FirefoxでTwitterを開いて動画を見ようとしたところ、エラーが出て見ることができない。
Twitterの動画のフォーマットがH.264と知って、プラグインを有効化しようとしたものの、"... will be installed shortly"と表示されたまま動かない。

# 対処
```
$ rpm-ostree search h264
```
すると、`noopenh264`という、H.264のフェイク実装が入っていることがわかった。
先ほどプラグインのインストールが進まなかったのは、これと競合していたのが原因のようだ。
mozillaによるH.264の実装で置き換えた。
```
$ rpm-ostree override remove noopenh264 --install mozilla-openh264
```

「why noopenh264」とかで検索をかけたところ、GitHubのIssueがヒットした。

https://github.com/fedora-silverblue/issue-tracker/issues/536

# まとめ
Immutableなものとして配布されているOSで、できるだけシステムの部分は触りたくなかったのに、触らざるを得なくなってしまって、非常に残念。
mozilla Firefoxが入っているのに、mozillaによるH.264の実装が入っていないのは一体なぜなんだ・・・
おっきいほうのPCM5102Aボードの使い方

## おっきい方とは ##
世に出回ってる安いPCM5102Aボードには2種類あって、ほとんどの人はちっさい細長い方を使ってるっぽいんだけど、おっきい方が好きなのでその使い方を記しておく。なぜおっきい方が好きかというと、基板の両側にピンヘッダを付けて安定して配置できるから。値段はどちらも大して変わらなくて300円弱くらいからある。おっきい方を扱ってるところはちょっと少ないかな。

![IMG_8841.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/107818/a2b41c5c-9a6d-42d6-91a9-bf929666a23c.jpeg)
左がおっきい方、です。実はそんなに大きくはない。

## 接続 ##
ちっさい方の基板は裏側にチップ抵抗が張り付いててすぐに使えるけど、おっきい方はそうなってないので、自分で繋ぐ必要がある。そして抵抗が１本必要。XMTは10kΩの抵抗を使って3.3Vにプルアップ、なんだって。

VCC -> 5V
3.3V -> 10kΩの抵抗 -> XMT
GND -> GND
FLT -> GND
DMP -> GND
SCL -> GND
BCK -> I2SのBit Clock
DIN -> I2SのData Out
LCK -> I2SのLR Clock
FMT -> GND
【Rails】yyyymmddhhmmss_create_[テーブル名].rbについて

# 記事概要
Ruby on Railsのマイグレーションファイルについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# 基本情報
## ファイルパス
db/migrate/yyyymmddhhmmss_create_[テーブル名].rb

## 記載方法
```yyyymmddhhmmss_create_[テーブル名].rb
class Create[モデル名の複数形] < ActiveRecord::Migration[7.1]
  def change
    create_table :[テーブル名] do |t|
      # カラムを追加
      t.timestamps
    end
  end
end
```

カラムは下記のように記述する
```ruby
t.型 :カラム名

t.text :memo
```

# まとめ
## カラムの型
|カラムの型|説明|用途|
|---|---|---|
|integer|数値|金額、回数など|
|string|文字(短文)|ユーザー名、メールアドレスなど|
|text|文字(長文)|投稿文、説明文など|
|boolean|真か偽か|はい・いいえの選択、合格・不合格のフラグなど|
|datetime|日付と時刻|作成日時、更新日時など|

## NOT NULL制約
テーブルの属性値にNULL(空の値)が入らないように制限する制約

```ruby
t.型 :カラム名, null: false

t.string :name, null: false
```

## 一意性制約
テーブル内で重複するデータを禁止する制約

```ruby
t.型 :カラム名, unique: true

t.string :email, unique: true
```

※Gemのdeviseを使用する場合、デフォルトでemailカラムに一意性制約が付与されるため、手動で`unique: true`を記載する必要はない

## 外部キー制約
外部キーの元になるデータと参照するデータの整合性を保証する制約

```ruby
t.references :カラム名,  foreign_key: true

# user_idカラムが作成される
t.references :user, foreign_key: true
```

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a

# テーブル
https://qiita.com/likapantrip/items/6e94b32d8ea9ad266964
augment codeを使ってみた

## 背景
最近、Xでよくaugment codeを見かけるが、解説記事があまり見つからなかったので、解説記事を記載しようと思った次第です。但し、まだ軽くしか触れていないので、詳細を知りたい方は公式サイトをご確認下さい。
https://docs.augmentcode.com/introduction

## 環境
- Windows 10
- VS Code
    - Augment Code

## 導入方法
1. VS Codeでaugmentと検索し、以下をインストールします。
![{135CEF2E-0459-48EA-9CB9-7F1B6E6F1590}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451684/8b6a171c-d4cd-4a20-8ee4-a3a6b0215a51.png)
2. サイドメニューに表示された以下を選択します。
![{47746DC3-0047-4B1B-9764-EB30F22A6251}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/451684/be5a4df4-62a3-4648-992c-48ac7c0ec5c5.png)
3. サインインします。
※ Google, github, メールアドレスでサインアップ、サインインが可能です。

## 機能
- <strong>エージェントモード</strong>
    - チャットモード: 標準的なチャットモード
    - AIエージェントモード: 標準的なAIエージェントモード
    - AIエージェントモード(自動): AIエージェントモードに自動適用機能がある
- <strong>MCPサーバー</strong>
    使えます
- <strong>モデル</strong>
    自由にモデルが選べないが、Claude 3.7 Sonnet相当ではないかと思われる
- <strong>その他機能</strong>
    学習機能がある

## メリット
今ならなんとトライアル期間があり、その間無制限で使えるっぽいので、そこが一番のメリットかなと思います。あとは、学習機能がついているので、そこも試してみる価値はある気がしています。

## デメリット
デメリットではないですが、他のAIエージェントと大差はないいめーじ
【Rails】テーブルについて

# 記事概要
Ruby on Railsのテーブルについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# テーブルとは
## 処理
データベース内に作成されるデータを、表形式で収納する場所
目的に沿ったテーブルを用意し、テーブルにデータを保存して管理

[![Image from Gyazo](https://i.gyazo.com/e4024caa5da5806b738bae394e259835.png)](https://gyazo.com/e4024caa5da5806b738bae394e259835)

## イメージ
[![Image from Gyazo](https://i.gyazo.com/7621eb6d6d0edf49bd4d0ac5377aff6c.png)](https://gyazo.com/7621eb6d6d0edf49bd4d0ac5377aff6c)

## 命名規則
小文字から始まる複数形
例）posts

## マイグレーション
テーブルの設計図・仕様書のこと
※一度実行すると、再実行できない仕組みになっている

[![Image from Gyazo](https://i.gyazo.com/ed63d8bc59878fc9bb55a0678615da66.png)](https://gyazo.com/ed63d8bc59878fc9bb55a0678615da66)

# 手順(マイグレーションファイルの作成)
1. [モデル](https://qiita.com/likapantrip/items/8cd3ac1a970b1764b7ee#手順)を作成する
1. VSCodeで`db/migrate/yyyymmddhhmmss_create_[テーブル名].rb`が生成されたことを確認する

# 手順(カラム追加用マイグレーションファイルの作成)
1. `rails g migration`コマンドを実行し、カラム追加用のマイグレーションファイルを作成する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # テーブルにカラム名とデータ型を指定し、カラムを追加するマイグレーションファイルを作成
    % rails g migration Addカラム名To追加先テーブル名 追加するカラム名:型
    ```
    
    ```
    # usersテーブルにnicknameカラムをstring型で追加するマイグレーションファイルを作成する
    % rails g migration AddNicknameToUsers nickname:string
    ```
1. VSCodeで`db/migrate/yyyymmddhhmmss_add_[カラム名]_to_[テーブル名].rb`が生成されたことを確認する

# 手順(カラム削除用マイグレーションファイルの作成)
1. `rails g migration`コマンドを実行し、カラム削除用のマイグレーションファイルを作成する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # テーブルにカラム名とデータ型を指定し、カラムを削除するマイグレーションファイルを作成
    % rails g migration Removeカラム名From削除元テーブル名 削除するカラム名:型
    ```
    
    ```
    # tweetsテーブルからnameカラムを削除するマイグレーションファイルを作成する
    % rails g migration RemoveNameFromTweets name:string
    ```
1. VSCodeで`db/migrate/yyyymmddhhmmss_remove_[カラム名]_from_[テーブル名].rb`が生成されたことを確認する



# 手順(マイグレーション)
1. [yyyymmddhhmmss_create_[テーブル名].rb](https://qiita.com/likapantrip/items/e49cbe55b998e4a7ff37)を、編集する
1. `rails db:migrate`コマンドを実行し、マイグレーションを実行する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # マイグレーションを実行
    % rails db:migrate
    ```
1. `rails db:migrate:status`コマンドを実行し、マイグレーションファイルの状況を確認する
    ```
    # マイグレーションファイルの状況を確認
    % rails db:migrate:status
    ```
1. マイグレーションファイルのStatusが、`up`になっていることを確認する
    ```
     Status   Migration ID    Migration Name
    --------------------------------------------------
       up     yyyymmddhhmmss  Create posts
    ```
1. サーバーの再起動
1. [Sequel Ace](https://qiita.com/likapantrip/items/4c363d844847825d2dca)でテーブルを確認する
1. テーブルに[データを保存](https://qiita.com/likapantrip/items/0717e597c2c1ea3f92a0)する

# 手順(ロールバック)
1. `rails db:rollback`コマンドを実行し、ロールバックする
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # マイグレーションファイルのロールバックを実行
    % rails db:rollback
    ```
1. `rails db:migrate:status`コマンドを実行し、マイグレーションファイルの状況を確認する
    ```
    # マイグレーションファイルの状況を確認
    % rails db:migrate:status
    ```
1. マイグレーションファイルのStatusが、`down`になっていることを確認する
    ```
     Status   Migration ID    Migration Name
    --------------------------------------------------
      down    yyyymmddhhmmss  Create posts
    ```

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a
Microsoft認定（AZ-900）の取得までの話

## オンラインイベント

### オンラインイベント申込

[Microsoft Virtual Training Days](https://www.microsoft.com/ja-jp/events/top/training-days)
以下のいずれかを申し込む
* 「Microsoft Azure Virtual Training Day: 基礎」
* 「Microsoft Azure Virtual Training Day: Azureの基礎」
　**※認定試験料金の割引の記載を確認**

オンラインイベントの内容
* 日数：2日間
* 時間：6時間（1日3時間）
* 内容：AZ-900で必要とされる知識で主要部分の説明が受けられる
* その他：**認定試験受験料の割引クーポンがもらえる**

## コース（学習）

### Microsoft Azure Virtual Training Day: Fundamentals

[公式コレクション](https://learn.microsoft.com/ja-jp/collections/o5met117w6pp01)
Learnの公式コレクションになる

### Microsoft 認定: Azure Fundamentals

[Microsoft 認定: Azure Fundamentals](https://learn.microsoft.com/ja-jp/credentials/certifications/azure-fundamentals/?practice-assessment-type=certification)
「試験の準備」のコースとなる
1つ前の公式コレクションが包括しているため、余力ある人は公式コレクションを実施するとよいと思う

## 認定試験

### 認定試験準備

[Microsoft 認定: Azure Fundamentals](https://learn.microsoft.com/ja-jp/credentials/certifications/azure-fundamentals/?practice-assessment-type=certification)
「試験に向けた練習」の「プラクティス評価」で**模擬試験を受験できる**
※50問出題で実施後、レポートが確認できるようになる
※設問ごとの解説やLearnの教材のリンクを教えてくれる

[Microsoft 認定: Azure Fundamentals](https://learn.microsoft.com/ja-jp/credentials/certifications/azure-fundamentals/?practice-assessment-type=certification)
「試験に向けた練習」の「試験サンドボックス」から試験受講時の流れを確認できる
試験の開始や終了方法、設問への回答方法などを解説してくれる
**初めてCBT試験を受けるなら一度確認しておくとよい**

### 試験申込

[Microsoft 認定: Azure Fundamentals](https://learn.microsoft.com/ja-jp/credentials/certifications/azure-fundamentals/?practice-assessment-type=certification)
「試験のスケジュール設定」から申し込みを行う
**言語は日本語に指定して姓名や住所などの入力項目を日本語入力しても、エラーになる**
活字体で入力すると申し込みできる
**オンラインイベント受講している場合、自動で割引が適用される**

## 認定試験後

### アクシデント？

通常は、試験後受付で結果の印刷物をもらえるのだがもらえなかった
MS系の試験で、**試験終了後の結果印刷が行われないことがある**との説明だった
また同じものをWebから確認できるため、そちらで確認してほしいとのことだった

### 資格認定証反映

認定試験の50時間後に、以下のようなメールがマイクロソフトから届いた
届いてから資格証明を確認すると反映されていた
「Microsoft Certified: Azure Fundamentals 認定資格を取得しました」

### 資格認定証確認

[Microsoft - ピアソンVUE](https://www.pearsonvue.com/jp/ja/microsoft.html)
上記からログインを行い、サイドメニューの「資格証明」から「認定資格」タブを選択することで認定資格の確認ができる

## 感想

模擬試験が用意されているのが非常に助かる
実際の試験と同じようなような問題もあるが、異なる問題も多い印象だったため、90%以上はできるとよいと思う
またLearnを実施したらわかると思うが、機械翻訳部分の解釈が難しい
そして実際試験でも同じような機械翻訳のような設問がある
そのため模擬試験部分と類似する設問では必ず点数拾えるようにしておくのがよい
仮想マシンがストレージ領域を認識する仕組み

今回の投稿では、ハイパーバイザを導入しているサーバから作成された仮想マシンがどのようにしてストレージ領域を認識しているのか、について見ていく。
ネットワーク内に専用ストレージを置いている、という前提の中で新規システムのケースでも、既存システムにストレージを追加したケースでもどちらでも通用するテーマになるはずなので、できるだけ具体的な説明を心掛けていきたい。

## 目次
- ストレージのネットワーク接続
- LUN(論理ユニット番号)とは
- サーバ側での設定
- 仮想マシン側での設定

## ストレージのネットワーク接続

専用ストレージ機器をネットワーク接続した際にまずやることはIPアドレスの付与などのネットワーク設定である。

すべきネットワーク設定は主に下記5つである。

- **IPアドレスの設定**：ネットワーク内で認識されて他のデバイスからアクセスされるために必須の設定。
- **サブネットマスクの設定**：ネットワークの範囲を指定する。「255.255.255.0」が振られることが多い。
- **ゲートウェイの設定**：もし異なるネットワーク間での通信を想定するのであれば必須の設定となる。
- **セキュリティの設定**：アクセス制御リスト(ACL)、ファイアウォールの設定を行なうことで、ネットワークのセキュリティを強化する。
- **ファームウェア更新**：忘れがちだが、最新の状態にして機能を向上させておく。


ネットワーク接続設定が完了して、ストレージ機器の管理コンソールへログインができればRAIDグループの作成を行なう。
RAIDはデータの冗長性、パフォーマンスを向上させるのに優れた技術なので初期セットアップの際に積極的に利用していきたい。

RAIDグループの作成ではまず、使用する物理ディスク(HDDやSSDなど)を選択する。
その選択後にRAIDタイプ(RAID1やRAID5)を選択してRAIDグループが作られる。

そして仮想マシンで使いたい容量の切り分けでLUN(論理ユニット番号)を作成する。


## LUN(論理ユニット番号)とは

LUN(Logical Unit Number)で論理ユニット番号と呼ばれている。ストレージ機器内の物理ディスクで構成されたRAIDグループからストレージ領域を識別するための番号である。
このLUNを作成することでホスト(サーバや仮想マシン)がストレージの特定の領域にアクセスができるようになる。

このLUNもストレージ機器の管理コンソールで作成できる。名前をつけたり使いたい容量の設定ができる。アクセス権限の設定もこのコンソールからの設定になるが、基本的にサーバや仮想マシンからのアクセスができた後に設定する項目となる。

またLUNの管理は引き続きストレージ機器の管理コンソールで行なうことになる。ホストとのマッピングが完了後はホスト側でLUNの一部機能を管理できるが、あくまでそのホストでLUNの利用に関わる設定に範囲が限られる。例えばLUN内にファイルシステムを作成したい、となった時はホスト側からの設定となる。


## サーバ側での設定

ストレージ側で作成されたLUNに仮想マシンからアクセスがしたいとなった時、仮想マシンとLUN間でのアクセス設定の前に仮想マシンが稼働しているサーバとストレージ間のアクセスが確立されている必要がある。そうでないと一生、仮想マシンからLUNへのアクセスができなくなる。

ストレージ側で作成したLUNに対してサーバ側からiSCSIプロトコルを使ってアクセスしたい、とする。

ここでまず、サーバ内でiSCSIイニシエータと呼ばれるものを作成する。
iSCSIイニシエータとは、サーバがiSCSIプロトコルを利用してネットワーク上のストレージに接続するためのコンポーネントである。
このiSCSIイニシエータを利用することによって、サーバからストレージに対してSCSIコマンドでデータの読み書きを行なう。

LUNがiSCSIイニシエータから検出された時、iSCSIイニシエータからはローカルデバイスとして認識される。

iSCSIイニシエータはWindowsでの設定を例にとると、既に管理ツールが搭載されているためそれを起動させればよい。


## 仮想マシン側での設定

サーバとストレージ間の物理的な接続、iSCSIイニシエータからLUNへのアクセスが成功したら、いよいよ仮想マシンからこのLUNへアクセスして仮想マシン用のデータ保存領域として活用していく。

まだこの段階では仮想マシンはLUNの存在を認識できていない。そのためこれからLUNを認識させるための設定を見ていく。

仮想化ソフトウェア、例えばVMwareなどの管理コンソールにアクセス。仮想マシンの設定で新規に仮想ディスクを追加する。
この追加した仮想ディスクとLUNをマッピングすることで、仮想マシンは初めてLUNにアクセスでき、LUNの領域を使用することができる。

このような段階、手順を踏んでいくことで仮想マシンは専用ストレージで作成されたLUNをデータ保存領域とて活用される。


## ひとりごと

週末はマイカーで出かけた人たちにとっては地獄の時間だっただろう。
ETCの障害、料金所付近で大渋滞。ICで降りようとしても身動きがとれない。考えただけで最悪だ。ストレスの溜まる週末になっただろう。

そして復旧は翌日月曜日のお昼過ぎ。あの手の規模の障害だ。復旧に全力を尽くすために人員を割くと思うのだが、想像以上に時間がかかってしまった印象。
八潮の道路陥没事故でも思ったが、インフラ関連の復旧に時間がかかるような国になっていないだろうか。
【Rails】モデルについて

# 記事概要
Ruby on Railsのモデルについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# モデルとは
## 処理
テーブルごとに設定されたモデルが情報を管理する
[![Image from Gyazo](https://i.gyazo.com/f76a9e50eeecc69f673bbcbf78c435db.png)](https://gyazo.com/f76a9e50eeecc69f673bbcbf78c435db)

## イメージ
[![Image from Gyazo](https://i.gyazo.com/62709954fce9e02327513aedaa8f3cab.png)](https://gyazo.com/62709954fce9e02327513aedaa8f3cab)

## MVC
データベースへのアクセスをはじめとする情報のやりとりに関する処理を行う役割

## 命名規則
大文字から始まる単数形
例）Post

# 手順
1. `rails g model`コマンドを実行し、モデルや関連ファイルを作成する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # モデルを作成
    % rails g model [モデル名]
    ```
1. VSCodeで`app/models/[モデル名].rb`が生成されたことを確認する
1. VSCodeで[[モデル名].rb](https://qiita.com/likapantrip/items/331a110f46a8ceb73468)を、編集する

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a

# 備考
- ファイルを削除したい場合は、[rails dコマンド](https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a#rails-dコマンド)を使用する
Pythonに公式用語としての『コンストラクタ』は定義されていない話

> Pythonではクラス定義の中に `__init__` という名前の（特殊）メソッドを定義すると、インスタンス作成時に呼ばれます。これがコンストラクタです。

という説明、よく見ます。
が、これはPythonに公式ドキュメントに書かれている『コンストラクタ』の用法とは**明らかに異なります**。

***

[https://docs.python.org/ja/3.12/library/itertools.html#itertools.chain.from_iterable](https://docs.python.org/ja/3/library/itertools.html#itertools.chain.from_iterable)
>  classmethod chain.from_iterable(iterable)
> chain() のためのもう一つのコンストラクタです。

[https://docs.python.org/ja/3.12/library/stdtypes.html#index-13](https://docs.python.org/ja/3.12/library/stdtypes.html#index-13)
> コンストラクタ int() 、 float() 、 complex() で、特定の型の数を生成できます。

[https://docs.python.org/ja/3.12/library/stdtypes.html#list](https://docs.python.org/ja/3.12/library/stdtypes.html#list)
> 型コンストラクタを使う: `list()` または `list(iterable)`

[https://docs.python.org/ja/3.12/library/datetime.html](https://docs.python.org/ja/3.12/library/datetime.html)
> 他のコンストラクタ、および全てのクラスメソッドを以下に示します:

[https://docs.python.org/ja/3/library/tarfile.html#tarfile.TarFile.open](https://docs.python.org/ja/3/library/tarfile.html#tarfile.TarFile.open)
> 代替コンストラクターです。

[https://docs.python.org/ja/3.12/library/zoneinfo.html#zoneinfo.ZoneInfo](https://docs.python.org/ja/3.12/library/zoneinfo.html#zoneinfo.ZoneInfo)
> `ZoneInfo` クラスには2つの別のコンストラクターがあります
> classmethod ZoneInfo.from_file(fobj, /, key=None)
> (略)
>  classmethod ZoneInfo.no_cache(key)



どうでしょう。
これらの箇所を読んでなお「クラス定義の中の `__init__` という特殊メソッド」をPython公式ドキュメントがコンストラクタと呼んでいるなどと思えるでしょうか。

- インスタンス化のために呼び出される**クラス名や型名に束縛されている呼び出し可能オブジェクト**のこと
- **インスタンス化の目的で設計された呼び出し可能オブジェクト**（特にクラスメソッド）のこと

をコンストラクタと呼んでいると私は思います。

***

じっさいPythonの公式ドキュメントで `__init__` に対してコンストラクタなどと呼んでいる箇所はありません。
それどころか`__init__`になにか固有な名称が付けられてはいないです。一貫して`__init__メソッド`と書かれているはすです。
（多少筆が滑って、別の書き方になっている箇所はあったりするかもしれません。私は見つけてないです）

「C++やJava言語でいうコンストラクタ」の用法を「プログラミング言語一般のコンストラクタ」だと思っている人が多すぎて、似たような用途の（しかし決して同じ動作ではない）`__init__` のことをコンストラクタだと説明**してしまっている**だけだと思います。
Pythonプログラマではない人、Python公式ドキュメントなんて読んでいない人とコミュニケーションするのに、あえてあわせてコンストラクタと呼ぶのは構わないでしょう。
でもPythonの言語に関する（深い）話をしている時は、`__init__メソッド`と呼ぶ方が混乱がないんじゃないでしょうか?

とはいえ「コンストラクタ」が用語集にも文法定義にもでてこないし、言語リファレンスの項目にもないという状況なのでやっかいですね。
ある種の特定の使い方をする呼び出し可能オブジェクトだというだけですから、文法定義にも言語リファレンスにも出てこなくて当たり前ではありますが。
【Rails】ビューについて

# 記事概要
Ruby on Railsのビューについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# ビューとは
## 処理
アクションを実行したあとに、ブラウザに表示する画面の見た目を決める

## イメージ
[![Image from Gyazo](https://i.gyazo.com/3abfc2695d14c51d412886f634e68a8e.png)](https://gyazo.com/3abfc2695d14c51d412886f634e68a8e)

## MVC
ブラウザにレスポンスとして返す見た目を設定する役割

## ERB(Embedded Ruby)
RailsにおけるERBファイルは、`[アクション名].html.erb`になる

## レイアウトテンプレート
Railsにおけるレイアウトテンプレートは、`application.html.erb`になる

## CSS適用
[![Image from Gyazo](https://i.gyazo.com/ab32585e5e6ac10576b73eb3fe363317.png)](https://gyazo.com/ab32585e5e6ac10576b73eb3fe363317)

## 部分テンプレート
ビューファイルにおいて繰り返し使用するコードを切り出し、再利用する仕組みのことであり、`_[部分テンプレート名].html.erb`

# 手順(ERB)
1. `app/views/[コントローラー名]`に、`[アクション名].html.erb`を作成する
1. [[アクション名].html.erb](https://qiita.com/likapantrip/items/41e40c774daa310711de)を、編集する
1. 設定したビューを確認する
    1. サーバーを起動する
    1. ブラウザで、設定したURLにアクセスする

# 手順(レイアウトテンプレート)
1. [application.html.erb](https://qiita.com/likapantrip/items/abbdeaabc88e330cb038)を、編集する

# 手順(CSS適用)
1. [application.css](https://qiita.com/likapantrip/items/14663a6aca391896f739)を、編集しない
1. `app/assets/stylesheets`に、CSSファイルを作成する

# 手順(部分テンプレート)
1. `app/views/[コントローラー名]` or `app/views/shared`に、`_[部分テンプレート名].html.erb`を作成する
1. [_[部分テンプレート名].html.erb]()に、共通処理を記述する
1. [[アクション名].html.erb](https://qiita.com/likapantrip/items/41e40c774daa310711de)に、`render`メソッドで部分テンプレートの呼び出しを記述する

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a
[スニペット] Java8 ApchePOIでExcel1行目にフィルタを設定

```java
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddress;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelFilterSetter {

    public static void addFilterToFirstRow(String inputPath, String outputPath) throws IOException {
        try (FileInputStream fis = new FileInputStream(inputPath);
             Workbook workbook = new XSSFWorkbook(fis)) {

            Sheet sheet = workbook.getSheetAt(0); // 1枚目のシートを取得

            // 1行目のセル数（列数）を取得
            int lastColumn = sheet.getRow(0).getLastCellNum() - 1;

            if (lastColumn >= 0) {
                // フィルタの範囲を1行目に設定（例: A1〜C1）
                sheet.setAutoFilter(new CellRangeAddress(0, 0, 0, lastColumn));
            }

            // 保存
            try (FileOutputStream fos = new FileOutputStream(outputPath)) {
                workbook.write(fos);
            }
        }
    }
}
```
```java
public class Main {
    public static void main(String[] args) {
        try {
            ExcelFilterSetter.addFilterToFirstRow("input.xlsx", "output.xlsx");
            System.out.println("フィルタを追加しました！");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
```
【Rails】コントローラーについて

# 記事概要
Ruby on Railsのコントローラーについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# コントローラーとは
## 処理
リクエストに対応する処理をまとめて用意しておき、ルーティングからリクエストを受け取って処理を行った後、クライアントにレスポンスを返す

[![Image from Gyazo](https://i.gyazo.com/0a37b85bf3d18a51e78026959be371aa.png)](https://gyazo.com/0a37b85bf3d18a51e78026959be371aa)

## イメージ
[![Image from Gyazo](https://i.gyazo.com/46fe1e21527c7b60cfc490b4315dd540.png)](https://gyazo.com/46fe1e21527c7b60cfc490b4315dd540)

## MVC
MVCにおける橋渡しの役割もあり、
レスポンスに必要となるデータがあれば、他の役割と連携してデータを取得したり受け渡しを行い、レスポンスを完成させる

## 命名規則
小文字で始まる複数形
例）posts

## アクション
コントローラーにおける処理カテゴリーのこと

|アクション名|どのような時に動くか|
|---|---|
|index|一覧表示ページを表示するリクエストに対応して動く|
|new|新規投稿ページを表示するリクエストに対応して動く|
|create|データの投稿を行うリクエストに対応して動く|
|show|個別詳細ページを表示するリクエストに対応して動く|
|edit|投稿編集ページを表示するリクエストに対応して動く|
|update|データの編集を行うリクエストに対応して動く|
|destroy|データの削除を行うリクエストに対応して動く|

# 手順(コントローラーの作成)
1. 関連ファイルを生成したくない場合、[application.rb](https://qiita.com/likapantrip/items/60d16878e386525bc5c9#コントローラー生成時に不要なファイルを生成しない)を編集する
1. `rails g controller`コマンドを実行し、コントローラーや関連ファイルを作成する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # コントローラーを作成
    % rails g controller [コントローラー名]
    ```
1. VSCodeで`app/controllers/[コントローラー名]_controller.rb`が生成されたことを確認する
1. [[コントローラー名]_controller.rb](https://qiita.com/likapantrip/items/b82ea9f7ef4942afabd8)を、編集する
1. 設定したコントローラーを確認する
    1. サーバーを起動する
    1. ブラウザで、設定したURLにアクセスする
        ビューが設定されていない場合、下記エラーが発生する
        [![Image from Gyazo](https://i.gyazo.com/3f724e6f86bfc6da3c089d1e3ef34515.png)](https://gyazo.com/3f724e6f86bfc6da3c089d1e3ef34515)

# 手順(コントローラーの削除)
1. `rails d controller`コマンドを実行し、コントローラーや関連ファイルを削除する
    ```
    # アプリのディレクトリに移動
    % cd ~/[アプリ名]
    
    # コントローラーを削除
    % rails d controller [コントローラー名]
    ```

# 手順(コントローラーの共通処理)
1. [application_controller.rb](https://qiita.com/likapantrip/items/6ff3ef0bd562e6fb961a)を、編集する

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a

# 備考
- ファイルを削除したい場合は、[rails dコマンド](https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a#rails-dコマンド)を使用する
- コントローラー作成時にビューファイルを作成したい場合、下記コマンドを実行する
    ```
    rails g controller [コントローラー名] [アクション名]
    ```
【共同開発】Walicaのクローンアプリ（2025.4-）

以下のリポジトリを参考にしながら、長期インターンの子と一緒にWalicaのクローンアプリを作っています。

ドメイン

- [フロントエンド](https://walicaaa-frontend.vercel.app/)

- [バックエンド](https://walicaaa-backend.vercel.app/)

リポジトリ

- [フロントエンド](https://github.com/takuto-san/walicaaa-frontend)
- [バックエンド](https://github.com/takuto-san/walicaaa-backend)

進捗
https://github.com/takuto-san/100days_work_log/issues/5


(参考)
フロントエンド
https://github.com/uchijo/walica-clone-web/commits/main/

バックエンド
https://github.com/uchijo/walica-clone-backend/commits/main/?after=bdb10179ad6cd8d6c837076d0abc9ea657945e50+34
VSCode/Cursor の Dark Modern テーマをちょっと調整してみました


## はじめに

とにかくダークテーマが好きで、VSCode/Cursorでは「Dark Modern」というテーマを使用しています。しかし、このテーマのエディタの背景色が濃いめに感じ、テキストとのコントラストが目に優しくない気がしてきました。👀

そこで、背景色も含めちょっとだけ調整してみましたので、こちらに書き留めておきます。

### 調整前

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4039735/fdb41cd9-c832-4909-80f5-0d4b59a170b1.png">

スクショしてみるとあんまりわからないかも🤔ですが、この画面を見ながらボーっとし始めるとだんだん目がチカチカしてくるんですよね。カラフルなシンタックスハイライトも要因だと思いますが（笑）

### 調整後

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4039735/dccefe5c-33d6-490f-b09f-6fe02c341381.png">

これまた、スクショすると実際より明るく見える気がしますが、背景を変えるだけで全体的にパステルカラーっぽい印象になったと感じます。


## `settings.json` を編集

### `settings.json` の開き方

1. VSCode/Cursor内で `cmd (ctrl) + shift + P` を入力
1. `User Settings` と入力
1. `Preferences: Open User Settings (JSON)` を選択
1. `settings.json` が開く

### 以下の内容を追加

:::note warn

**注意**

こちらの設定は、配色テーマが「Dark Modern」の状態で使用される想定です。

:::

```json: settings.json
{
    "workbench.colorCustomizations": {
        "editor.background": "#303030",
        "editor.lineHighlightBorder":"#00000000",
        "focusBorder": "#00000000",
        "list.activeSelectionBackground": "#3e3e3e",
        "list.activeSelectionForeground": "#ffffff",
        "list.hoverBackground": "#2e2e2e",
        "list.hoverForeground": "#ffffff",
        "panel.background": "#000000",
        "sideBar.background": "#252525",
        "sideBarSectionHeader.background": "#252525",
        "statusBar.background": "#252525",
        "tab.activeBackground": "#303030",
        "tab.activeBorderTop": "#7e7e7e",
        "tab.hoverBackground":"#303030",
        "tab.hoverForeground": "#ffffff",
        "tab.inactiveBackground": "#252525",
    }
}

```

さらにカスタマイズする場合の参照を貼っておきます。

👉 配色テーマの変更

https://code.visualstudio.com/docs/configure/themes#_color-themes

👉 `colorCustomizations` の詳細

https://code.visualstudio.com/api/references/theme-color

### Features

主な変更点を列挙します。

- エディタの背景を `#303030` に変更
- サイドバーやパネルの背景を変更
- サイドバーのエクスプローラのアイテムをホバーした際に、ファイル名がハイライトされるように変更（白文字のみ。Git関連やエラー・警告などでファイル名に色がついている場合はハイライトされない。）
- フォーカスした際の青枠を削除（例：サイドバーのエクスプローラーで、ファイルなどが表示されていない領域をクリックするとフォーカスできる。）
- 編集中のファイルのタブのアクセントを `#7e7e7e` に変更

## さいごに

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

実は、これが初めての投稿です ( ^ω^ )
これから、積極的に発信できたらいいなと思ってます（かっこいい記事は書けませんが）！

こうしたら読みやすいぞ、とかあればぜひご教授ください！☺️
【Rails】ルーティングについて

# 記事概要
Ruby on Railsのルーティングについて、まとめる

# 前提
- Ruby on Railsでアプリケーションを作成している

# ルーティングとは
## 処理
クライアントからリクエストがあった際に、リクエストに対応した行き先を定義する

[![Image from Gyazo](https://i.gyazo.com/5d25d1320c4a0560850485d0b8761cba.png)](https://gyazo.com/5d25d1320c4a0560850485d0b8761cba)

## イメージ
[![Image from Gyazo](https://i.gyazo.com/d2b1c82a4124b8562678a15a50704921.png)](https://gyazo.com/d2b1c82a4124b8562678a15a50704921)

## HTTPメソッド
|メソッド|役割|
|---|---|
|GET|サーバーからブラウザに情報を返す。単にウェブサイトを閲覧する際など、情報を取得するために利用される。|
|POST|ブラウザからサーバーに情報を送信し、サーバーに情報を保存する。情報を登録する際など、サーバーに情報を送信するために利用される。|
|DELETE|ブラウザからサーバーに情報を送信し、サーバーの情報を削除する。アカウントを削除する際など、サーバー内のデータを削除するために利用される。|
|PATCH|ブラウザからサーバーに情報を送信し、サーバー内の情報を置き換える。登録情報を更新する際など、サーバー内のデータを更新するために利用される。|

# 手順
1. [routes.rb](https://qiita.com/likapantrip/items/f50811b766d6fa15234c)を、編集する
1. 設定したルーティングを確認する
    - rails routesコマンド
        1. rails routesコマンドを実行する
            ```
            # アプリのディレクトリに移動
            % cd ~/[アプリ名]
            
            # 設定されているルーティングを確認
            % rails routes
            ```
        1. 実行結果を確認する
            ```
            # 設定されているルーティングを確認
            % rails routes
               Prefix Verb URI Pattern        Controller#Action
             posts GET  /posts(.:format)         posts#index
             # 省略
            ```
            [![Image from Gyazo](https://i.gyazo.com/6332be7407e7a176dab196406669d551.png)](https://gyazo.com/6332be7407e7a176dab196406669d551)
    - ブラウザ
        1. サーバーを起動する
        1. ブラウザで、設定したURLにアクセスする
            コントローラーが設定されていない場合、下記エラーが発生する
            [![Image from Gyazo](https://i.gyazo.com/a4d770d30fce7d76ff7ee2dfbb0d25e9.png)](https://gyazo.com/a4d770d30fce7d76ff7ee2dfbb0d25e9)

# Ruby on Railsまとめ
https://qiita.com/likapantrip/items/46b43c9d1309b6633f0a
PC環境

![スライド1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321576/41f89360-f640-4712-9d3d-19fa6a68d43d.png)

![スライド2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321576/a292de35-46cf-41b3-93a7-4e98a8a75c1d.png)

![スライド3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321576/4b41de54-338a-44d9-91fa-614721a83f43.png)

![スライド4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321576/1853324f-d166-4ecc-b169-b683944c9d1d.png)
【Tips】エンジニア学生ならサークルやコミュニティに入っておこう！

参加中のコミュニティや、過去に参加してよかった・ためになったコミュニティやイベントについて書きます。今後更新予定。

以下について紹介するつもりです

- OSS Gate
    - OSS初心者がオープンソースにコントリビュートするまでを支援してくれる
    - オンラインワークショップが定期的に実施される
    - [OSS Gateについてはこちら](https://oss-gate.github.io/)
- Tech.Uni
    - 関西学院大学の有名なプログラミングサークル
    - Discord上でやり取りするため他大学の学生も多く参加
    - [Tech.Uniについてはこちら](https://techuni.org/)
LSLでのヒアストリング

# ヒアストリング
多くのスクリプトは、変数に代入するStringを記述する際、書きやすくする＆可読性を高めるための**ヒアストリング**に対応しているが、LSLではどうなのかを調べてみた。

結論、ないらしい。 \_(:3｣ ∠)_

## やりたいこと
例えばPowerShellの書き方だと下記のようにJSONをprettyな書き方で変数に代入したい
```PowerShell
$str = @'
{
  "name": "柴賢"
  "age": 3
  "isCool": true
}
'@
```
※ 結論: 残念ながら楽にはできない

仕方ないので以下のように書くしかないのかな。
スマートな書き方をご存じの方いらっしゃいましたら、どうかご教示ください \<m(__)m>

## 代替方法
LSLだと以下のように書くしかない。
これ以上、楽な書き方が分からない…。
```LSL
string test 
= "{\n"
+ "  \"name\" = \"柴賢\",\n"
+ "  \"age\" = 3,\n"
+ "  \"isCool\" = true,\n"
+ "}\n";
```

いやめんどくせぇええ
SIer就活でプログラムのステップ数を聞かれた話、計測方法、感想。

### 就活でプログラムのステップ数を聞かれた話
よくあるのが、経験年数と「行数」を教えてください。というやつ。
「行数！？！？！？」ってなることが多いのですが
大手だけどエントリーは唯一していなかった企業のESを出した時に「ステップ数」を書かされました。

#### ステップ数とは
よくわかりませんでした。

参照
https://wa3.i-3-i.info/word14228.html
https://e-words.jp/w/%E3%82%B9%E3%83%86%E3%83%83%E3%83%97%E6%95%B0.html

基準が曖昧らしい。行数じゃなくてステップ数を聞かれて、処理がいくつあるのか（宣言などはさておき、データを変化させたりする処理がいくつあるかを「ステップ」というのかと想像した）を答えるのかと期待していたが、ほぼ　行数＝ステップ数　なのか。
{}とかを除くなどあるらしいが、特に革新的なコードの規模を示す指標ではなさそう。
じゃあなんで聞くんだ。とにかくよくわかりません。

### 計測方法
https://qiita.com/odekekepeanuts/items/1f5490f41d5c2c59f098
こちらを参考にしました。

ファイル別で計測したい時は以下のようにしてもできます。

```zsh
cloc ファイル名
```
### 感想
行数（ステップ数）なんて聞くな！！！！！！
testcontainers + drizzle で postgresqlのマイグレーションをテスト準備で行ったメモ

# 概要
[前回][*1]はテストコード中にpgを使ってテーブルの初期設定を行った。
今回はDrizzleのマイグレーションを使ってテーブルの初期設定を行う。

[この時点のソース](https://github.com/hibohiboo/odyssage/blob/c667ef7230039d6f74ecfd248f762350a61961a2/apps/backend/test/integration.spec.ts)

# ソース

```diff:pps/backend/test/integration.spec.ts
  // 省略
  beforeAll(async () => {
    // PostgreSQLコンテナを起動
    postgresContainer = await new PostgreSqlContainer('postgres:17.4-alpine')
      .withDatabase('test_db')
      .withUsername('test_user')
      .withPassword('test_password')
      .start();

    connectionString = postgresContainer.getConnectionUri();
+    await setupDb(connectionString);
+    await execSql(
+      connectionString,
+      `
+       INSERT INTO odyssage.users (id, name) VALUES ('${testUserId}', '${testUserName}');
+       INSERT INTO odyssage.scenarios (id, title, user_id, updated_at) VALUES ('${testScenarioId}', '${testScenarioTitle}', '${testUserId}', CURRENT_TIMESTAMP)
+      `,
+    );

    // アプリを初期化
    app = new Hono();
    app.route('/api/sessions', sessionRoute);
  }, 60000); // コンテナ起動に時間がかかるためタイムアウトを延長

  // テスト終了後にコンテナを停止
  afterAll(async () => {
    await postgresContainer.stop();
  });
// 省略
```

```ts:packages/database/test-utils/setupDb.ts
import * as path from 'path';
import { drizzle } from 'drizzle-orm/postgres-js';
import { migrate } from 'drizzle-orm/postgres-js/migrator';

export async function setupDb(connectionString: string) {
  const db = drizzle(connectionString);

  await migrate(db, {
    migrationsFolder: path.join(__dirname, '../migrations'), // drizzle.config.tsで指定したものと同じ
  });
}

```

```ts:packages/database/test-utils/execSql.ts
import { sql } from 'drizzle-orm';
import { drizzle } from 'drizzle-orm/postgres-js';

export async function execSql(connectionString: string, sqlText: string) {
  const db = drizzle(connectionString);
  await db.execute(sql.raw(sqlText));
}
```

# 参考

[drizzle-orm](https://orm.drizzle.team/docs/seed-overview)
[使い捨てテストDB環境のtestcontainersをPostgresql + Honoで試してみたメモ][*1]
[Drizzle ORM でダミーデータを流し込む方法](https://qiita.com/sigeta/items/8bc85b74273eeb37c27a)
[postgres](https://github.com/porsager/postgres)

[*1]:https://qiita.com/hibohiboo/items/296ec57c19daed007a5b
docker build --build-arg時の引数は、Dockerfile内でそのまま使用できない

## 概要
Dockerfileを修正している際に、なぜか`docker build --build-arg`で指定した引数が、`Dockerfile`で使用できませんでした。
自分が陥った`docker build --build-arg`の罠の解決策を共有しようと思います。

## 結論
```yaml
docker build --build-arg hoge=fuga
```
でビルドしたときに、`hoge`(引数)をDockerfile内で使用するときは、Dockerfileで

```dockerfile
ARG hoge=piyo
```
と宣言しないと、`hoge`(引数)は使用できません。

## 解説
結論でお伝えした通り、`docker build`で設定した引数は、Dockerfile内で`ARG`を宣言しないといけません。

`ARG`について少し解説を加えます。
```dockerfile
ARG 変数名=初期値
```
上記のように宣言する`ARG`ですが、引数に変数の値が存在しない場合は、初期値の値が使用されます。

また`Dockerfile`内で、最初に`FROM`を用いて、新たに作成するDockerイメージのベースとなるイメージを指定すると思います。
この際に同一の`Dockerfile`内で、FROMが複数ある場合は、それぞれのFROMのスコープにおいて、`ARG`を定義する必要があることに注意が必要です。以下が例になります。
```dockerfile
FROM image1
ARG hoge=fuga

FROM image2
ARG hoge=piyo

# ARGの初期値は、同じ値でも問題ないです。
```

## 最後に
いちいち`ARG`で宣言するのは忘れてしまいそうですが、引数を使用してエラーが起こった際は、まずは`ARG`が宣言されているか確認するのが良いでしょう。
📘Frourio プロジェクトで SQLite から PostgreSQL に切り替える手順

## ✅ 1. PostgreSQL の Docker コンテナを準備

プロジェクトルートに `compose.yaml` を作成：

```yaml
services:
  db:
    image: postgres:15-alpine 
    container_name: sample-db
    restart: unless-stopped
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: sample
    ports:
      - "5432:5432"
    volumes:
      - db-data:/var/lib/postgresql/data

volumes:
  db-data:

```

起動：

```bash
docker-compose up -d

```

---

## ✅ 2. `.env` に接続情報を記述

`server/.env` またはルートの `.env` に以下を追記または修正：

```
DATABASE_URL="postgresql://postgres:postgres@localhost:5432/sample"

```

---

## ✅ 3. Prisma 設定ファイルを修正

### `server/prisma/schema.prisma` の `datasource` を修正：

```
generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model Task {
  id    Int     @id @default(autoincrement())
  label String
  done  Boolean @default(false)
}

```

※ `provider = "sqlite"` → `"postgresql"` に変更すること！

---

## ✅ 4. SQLite 用の古いマイグレーションを削除

以下を削除：

```bash
rm -rf server/prisma/migrations

```

---

## ✅ 5. PostgreSQL 用マイグレーションを新規作成・適用

```bash
cd server
npx prisma migrate dev --name init

```

成功すると、次のようなログが表示されます：

```
The following migration(s) have been created and applied from new schema changes:
migrations/
  └─ 20250101000000_init/
    └─ migration.sql

```

---

## ✅ 6. Prisma Client を再生成（必要に応じて）

```bash
npx prisma generate

```

---

## ✅ 7. データベースの確認（任意）

```bash
docker exec -it sample-db psql -U postgres -d sample

```

```sql
\d "Task";         -- テーブル構造確認
SELECT * FROM "Task";  -- データ内容確認

```

---

## ✅ 8. サーバー起動

```bash
npm run dev

```

Prisma経由でPostgreSQLに接続できれば成功です 🎉

---

### 📌 補足

- 本番運用では `.env` に書くパスワードの管理方法に注意（`.env` を `.gitignore` に含めるなど）
[スニペット] Java8 CSVヘッダーをマップで置換

```java
import com.opencsv.CSVReader;
import com.opencsv.CSVWriter;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.*;

public class CSVHeaderReplace {
    public static void main(String[] args) throws IOException {
        String inputFile = "input.csv";
        String outputFile = "output.csv";

        // 英語→和名のマッピング
        Map<String, String> headerMap = new HashMap<>();
        headerMap.put("Name", "名前");
        headerMap.put("Math", "数学");
        headerMap.put("Science", "理科");
        headerMap.put("English", "英語");

        try (
            CSVReader reader = new CSVReader(new FileReader(inputFile));
            CSVWriter writer = new CSVWriter(new FileWriter(outputFile))
        ) {
            List<String[]> allRows = reader.readAll();
            if (allRows.isEmpty()) return;

            // 最初の行 = ヘッダー
            String[] originalHeader = allRows.get(0);
            String[] replacedHeader = Arrays.stream(originalHeader)
                    .map(col -> headerMap.getOrDefault(col, col)) // 対応がない場合はそのまま
                    .toArray(String[]::new);

            writer.writeNext(replacedHeader);

            // 2行目以降はデータ行としてそのまま書き出し
            for (int i = 1; i < allRows.size(); i++) {
                writer.writeNext(allRows.get(i));
            }
        }
    }
}

```
```java
import com.opencsv.CSVReader;

import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class HeaderMappingLoader {

    public static Map<String, String> loadHeaderMap(String mappingFilePath) throws IOException {
        Map<String, String> map = new HashMap<>();

        try (CSVReader reader = new CSVReader(new FileReader(mappingFilePath))) {
            String[] line;
            while ((line = reader.readNext()) != null) {
                if (line.length >= 2) {
                    String key = line[0].trim();
                    String value = line[1].trim();
                    map.put(key, value);
                }
            }
        }

        return map;
    }
}
```
```java
CSVWriter writer = new CSVWriter(
    new OutputStreamWriter(new FileOutputStream(outputFile), StandardCharsets.UTF_8),
    CSVWriter.DEFAULT_SEPARATOR,
    CSVWriter.NO_QUOTE_CHARACTER,
    CSVWriter.DEFAULT_ESCAPE_CHARACTER,
    System.lineSeparator()
);
```
hogehogeってあれ誰が使い始めたの？

# はじめに

プログラミング界隈でよく見かける「hogehoge」という単語。サンプルコードやテスト用の変数名として頻繁に使われていますが、そもそもこの「hogehoge」って誰が使い始めたのでしょうか？この記事では、hogehogeの由来や歴史、そしてなぜこれほど広まったのかを探ってみます。



# hogehogeとは？

「hogehoge」は、プログラミングでよく使われるダミーの名前（プレースホルダー）です。特定の意味を持たず、仮の変数名や関数名として利用されます。以下はその典型的な使用例です：

### 使用例
```python
def hogehoge():
    print("Hello, World!")

hogehoge()
```

このように、実際の処理内容や名前がまだ決まっていない場合に、「とりあえず」で使われることが多いです。


# hogehogeの由来

「hogehoge」という言葉は、日本のプログラミング文化に根付いた独特な表現です。その起源にはいくつかの説があります。

### 1. **UNIX文化からの派生**
UNIX系システムでは、「foo」「bar」といったダミー名がよく使われていました。これらは英語圏で広く知られるプレースホルダーであり、日本でもその影響を受けました。しかし、日本人にとって「foo」や「bar」は馴染みが薄かったため、それに代わる日本語的な表現として「hoge」が誕生したと言われています。

### 2. **ゲーム業界からの影響**
一部では、1980年代〜1990年代の日本のゲーム開発者がテスト用の変数名として「hoge」を使い始めたという説もあります。当時はプログラミング言語Cやアセンブリ言語が主流で、簡単に入力できる短い名前として「hoge」が選ばれた可能性があります。

### 3. **日本語の擬音・擬態語から**
日本語には「ほげほげ」という擬音的な表現があります。特に関西地方では、「ほげる」という言葉が「ぼんやりする」「適当にやる」といった意味で使われることがあります。このニュアンスがプログラミングにおける「仮置き」の概念とマッチしたため、採用されたという説もあります。


# 誰が最初に使い始めた？

正確な起源は不明ですが、「hogehoge」が広まった背景には以下の要因が考えられます：

### 1. **日本初期のIT業界**
1980年代〜1990年代、日本でプログラミング教育やソフトウェア開発が普及し始めた頃から、「hoge」という言葉が使われていた記録があります。当時はC言語やUNIX文化が日本にも浸透しており、その中で自然発生的に使われ始めた可能性があります。

### 2. **技術書や教材での採用**
技術書やプログラミング教材で「hogehoge」がサンプル変数名として採用されたことで、多くのエンジニアに認知されました。特に、日本語で書かれた教材では英語圏由来の「foo」「bar」よりも親しみやすい「hoge」が選ばれたようです。

### 3. **インターネット掲示板文化**
2000年代初頭には、2ちゃんねる（現：5ちゃんねる）などのインターネット掲示板でプログラマー同士が情報交換をする中で、「hogehoge」が頻繁に登場しました。このようなオンラインコミュニティも普及を後押ししたと言えます。

# なぜここまで広まった？

### 1. **覚えやすさ**
「hoge」は短くて覚えやすく、日本語キーボードでも入力しやすい名前です。また、意味を持たないため、どんな文脈にも適応できます。

### 2. **親しみやすさ**
英語圏由来の「foo」「bar」に比べて、日本人には馴染み深い響きがあります。そのため、日本国内では自然と受け入れられました。

### 3. **汎用性**
変数名、関数名、クラス名など、どんな用途でも違和感なく使用できる点も普及した理由と言えるでしょう。



# foo/barとの違い

英語圏では、「foo」「bar」「baz」などがダミー名としてよく使われます。これらと「hogehoge」には以下の違いがあります：

| 特徴            | foo/bar       | hogehoge      |
|-----------------|---------------|---------------|
| 起源            | 英語圏         | 日本          |
| 使用地域        | 世界中         | 主に日本      |
| 響き            | 英語的         | 日本語的      |
| 親しみやすさ    | 日本人には馴染みにくい | 日本人には馴染み深い |


# hogehoge以外によく使われるダミー名

日本では「hogehoge」の他にも以下のような名前がダミーとして使われます：

- **fugafuga**  
  「hogehoge」に続いてよく使われるダミー名
  
- **piyopiyo**  
  可愛らしい響きから選ばれることが多い

- **foobar**  
  英語圏由来ですが、日本でも一部で使用されています

- **test**  
  最もシンプルなダミー名ですが、誤解を招きやすいため注意が必要です



# まとめ

「hogehoge」は、日本独自に発展したプログラミング文化の一部と言えます。その起源は明確ではありませんが、UNIX文化や日本語特有の表現、そしてインターネット掲示板文化など複数の要因によって広まりました。今後も日本国内で愛され続けるダミー名として、多くのコードベースに登場することでしょう。最後まで読んでくださり、ありがとうございました。もし改善点や質問があれば、ぜひコメントしてください！
関数電卓で動く公開鍵暗号を作る：パート２

# 代数曲線を使ってメッセージを秘匿する。
$p$を大きな素数とし、$GF(p)$を定義体とする。
以後、この定義体上の楕円曲線を考える。
ここでは、楕円曲線の有限体の場合を考える。（BBGS曲線でもいいかも知れない。）

ここで、大文字のアルファベットは2変数多項式、小文字のアルファベットは1変数多項式を表すものとする。

１．２５６個以上の有理点を持つ楕円曲線を$C$とする。
同様に、この$C$上の256個の点の$x$座標を1次式としてもつ多項式の積を$f_0$とする。

また、大きな素体上で一般の代数曲線の有理点を求めるのは難しいと思われる。
そこで楕円曲線上の有理点をランダムに256個選び、そのx座標を解にもつような1変数多項式が$f_0$である。

２．ランダム代数曲線を$R$、ランダムな1変数多項式を$r$とする。
３．更に、メッセージを表す多項式を$m$とする。

ここで平文を表す多項式が多変数でないのは多変数バージョンのラグランジュ補間を知らないからである。

## 暗号化
$H$を公開されたランダム2変数多項式とする
$sk=(C,f_0)$
$pk=(H,S=C+Hf_0)$
$U=R+rH$
$V=Sr+m=(C+Hf_0)r+m=Cr+Hf_0r+m$
$c=(U,V)$

## 復号
$F=(V-Uf_0)=Cr+f_0Hr+m-(R+rH)f_0=Cr+Rf_0+m$

$F(\alpha_{x,y})=m(\alpha_x)-f_0(\alpha_x)r(\alpha_x)=m(\alpha_x)$


ここで、曲線$C$と$f_0$が消えるので、有理点の$x$座標の値だけを代入して得られた数値から、ラグランジュ補間を使って多項式$m$を復元する。
これができるのは秘密の点を知っている人だけである。

パート１と違うのは暗号化に使う秘密鍵が楕円曲線の点であることである。
本当は超楕円曲線のほうがいいと思うが、有理点の計算方法がわからない。
楕円曲線の場合は、特定の座標を持つ1点が求まれば、後は群法則から効率的に他の有理点が計算できるが、大きな素体上の代数曲線でも256個の有理点が計算できればその方がいいと思う。

また、パート1では秘密鍵である1変数関数を知っていれば十分だったが、ここでは曲線の点が秘密鍵になったことで1変数の多項式の剰余では平文が復元できないと思うので、ラグランジュ補間が意味を持つようになるだろう。（Cが明らかな時は剰余でもいいのかも知れない。）

任意の代数曲線を点の座標から復元可能であるような、ラグランジュ補間の２変数バージョンがあればなお良い。
もし。有理点の集合からもとの曲線を復元する方法があれば、多変数バージョンに拡張することができると思う。（予想）
Laravelの all() / with() / where() の違いをしっかり理解する【初心者向けORM入門】

# はじめに

LaravelでEloquent（ORM）を使っていると、以下のようなメソッドを頻繁に見かけます：

```php
User::all();
Post::with('user')->get();
User::where('email', $email)->first();
```
これらはすべて **モデルを通じてデータベースにアクセスするためのメソッド**ですが、意味や使い方がそれぞれ異なります。

この記事では、初心者が混乱しやすい all()・with()・where() の違いを、実際のコード例を交えてわかりやすく解説します。

# ①all() の意味と使い方
```php
User::all();
```
**概要：**
- **テーブルの全レコードを取得**するメソッド
- SELECT * FROM users に相当

**戻り値：**
- Illuminate\Database\Eloquent\Collection（コレクション）

**使用例:**
```php
$users = User::all();

foreach ($users as $user) {
    echo $user->name;
}
```

**注意：**
- 件数が多いテーブルでは**パフォーマンスに注意**（大量にメモリ消費）

# ② with() の意味と使い方（リレーションの事前読み込み）
```php
Post::with('user')->get();
```

**概要：**
- **リレーション先のデータを一緒に取得（Eager Loading）**
- N+1問題 を防ぐためによく使う

**使用例:**
```php
$posts = Post::with('user')->get();

foreach ($posts as $post) {
    echo $post->user->name . '：' . $post->title;
}
```

**SQL的には：**
```sql
SELECT * FROM posts;
SELECT * FROM users WHERE id IN (...);
```
 → user() が belongsTo(User::class) として定義されている必要あり

 # ③where() の意味と使い方（絞り込み）
 ```php
 User::where('email', 'example@example.com')->first();
  ```

  **概要:**
  - **条件を指定してデータを絞り込む**
  - 複数条件もOK

**使用例:**
```php
 $adminUsers = User::where('role', 'admin')->get();
```

```php
$user = User::where('email', $email)->first();
```

  **チェーンも可能：**
```php
$posts = Post::where('status', 'published')
             ->where('category_id', 2)
             ->get();
```

# ④比較まとめ
![IMG_4032.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/00c9541c-8f8a-44b3-a137-0cd42f152378.jpeg)

# ⑤よくある勘違い
**Q. User::all()->where(...) はOK？**
**NGです。**

all() はすでに全件を取得して**コレクション**になっているため、where() は**コレクションのフィルタ**になってしまいます。
→ つまり、**DBに対して絞り込みは行われません！**

**正しい使い方：**
```php
// DBで絞り込む
User::where('role', 'admin')->get();
```

# ⑥おまけ：メソッドチェーンの組み合わせ例
```php
$posts = Post::with('user')
             ->where('status', 'published')
             ->orderBy('created_at', 'desc')
             ->get();
```
→ 投稿とユーザーを一緒に取得し、published 状態のものだけを新着順で並べる

# ⑦まとめ
- all() → 全件取得（簡単だけど注意が必要）
- with() → リレーションを一緒に取得（N+1問題対策）
- where() → 条件を指定して絞り込み

Eloquentのメソッドは、単体だけでなく**チェーンして組み合わせる**ことで、柔軟で読みやすいクエリが書けます！
Power Automate で SharePoint リストの更新日を使った絞り込み

## 前提：
- SharePoint では更新日を「Modified」フィールドで管理している
- 更新日のタイムゾーンは UTC


## ODATA フィルタークエリ
```
Modified ge '2023-04-01T00:00:00Z' and Modified le '2023-04-30T23:59:59Z'
```
このクエリでは、以下の条件を指定:
- Modified ge '2023-04-01T00:00:00Z': 更新日時が2023年4月1日以降
- Modified le '2023-04-30T23:59:59Z': 更新日時が2023年4月30日以前


## フローの例
以下のフローは、「時間からの減算」と「現在の時刻」の間に更新されたアイテムを取得。

![スクリーンショット 2025-04-07 235751.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629955/cae0db94-90c6-4239-a752-8ddc2184f81b.png)


↓ 自分メモ。後でまとめる：
![スクリーンショット 2025-04-08 002404.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629955/16bb58a5-a065-48f9-b96d-c27dbf35d9c7.png)
Vue.js(Vite)のサイトをVercelでホストする [初心者向け]

## 始めに
### Vercelとは
Vercelとは、簡単にWebアプリをホストするクラウドプラットフォームです。
サーバーの契約や面倒な設定不要で、簡単にWebサイトをホストできます。

https://vercel.com/

## 事前準備
### リポジトリのフォーク (Organizationのみ)
:::note warn
この作業は、Organizationのリポジトリをデプロイする場合のみ必要です。
個人のリポジトリ(個人開発では普通こちら)では不要です。
:::
Vercelの無料プランでは、GitHub Organizationのリポジトリをそのままデプロイできません。
ここでは、対象のリポジトリを個人アカウントにForkすることで、制限を回避します。

1. 対象のリポジトリのGitHubを開き、上部の`Fork`ボタンから、`Create a new fork`画面を開く
2. `Owner`が個人アカウントになっていることを確認して`Create fork`を押してフォーク完了
3. 個人のリポジトリ一覧に、対象のリポジトリのFork(コピーみたいなもの)ができていればOK

ここからのデプロイ作業では、今Forkしたリポジトリをデプロイすることになります。

### Vercelの設定ファイルを用意する
VueRouterを正常に動かすため、下記の`vercel.json`という名前のファイルを、`vite.config.js`と同じフォルダ階層に設置します。

```json:vercel.json
{
    "rewrites": [
        {
            "source": "/:path*",
            "destination": "/index.html"
        }
    ]
}
```

## デプロイ
1. [Vercel](https://vercel.com/)にGitHubアカウントでログイン
2. 「Add New…」などから新しいProjectを作る
3. GitHubのリポジトリ一覧が表示されるので、デプロイしたいリポジトリを選択
4. `vite.config.js`がリポジトリ直下にない場合、`vite.config.js`のあるフォルダを`Root Directory`として選択する
5. `Framework Preset`が`Vite`になっていることを確認する
6. `Deploy`を押してデプロイ
7. しばらくするとデプロイが完了し、`Domains`にあるURLから公開されたサイトを確認できる

## 更新(再デプロイ)
リポジトリの対象ブランチに変更が加えられた場合、自動的にVercelが再デプロイしてくれます。
### Forkしたリポジトリの同期 (Organizationのみ)
:::note warn
この作業は、Organizationのリポジトリをデプロイする場合のみ必要です。
個人のリポジトリ(個人開発では普通こちら)では不要です。
:::
Organizationのリポジトリを更新した場合は、Forkした個人アカウントのリポジトリを開いて、`Sync fork`を押せば、公開済みのサイトも更新できます。

他のアカウントが変更を加えた場合、Vercelの制限で自動的に再デプロイをしてくれません。
再デプロイするには、README.mdあたりを若干書き換えて自分が最終編集したことにします。

## 参考文献
https://vercel.com/

https://zenn.dev/yusukekikuta/articles/ebb11723d7eb04

https://scrapbox.io/daikiojm/vue-router%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A3%E3%81%9FVue%E3%81%AESPA%E3%82%92Vercel%E3%81%AB%E3%83%9B%E3%82%B9%E3%83%88%E3%81%99%E3%82%8B%E3%81%A8%E3%81%8D%E3%81%AE%E6%B3%A8%E6%84%8F%E7%82%B9
【Unityでとりあえず入れておけばいいモノを作りたい】シンプルなボタンを作った

# はじめに
自分の場合Unityでプロジェクトを作成してとりあえず入れておけばいいものは以下です
<strong>「UniRx」「UniTask」「DOTween」</strong>

# シンプルなボタン
ということで<strong>"この３つが入っている前提"</strong>で且つとりあえず効率よく作業を進めたい際に入れておけばよいものを自分で作ろうと思いシンプルなボタン機能を作成しました。

## 機能
・各イベント（押された、離された、クリック、長押し）
・長押し判定時間はインスペクタで設定
・ボタンオブジェクトの範囲外まで指が移動したら長押しとクリックをキャンセル
・ボタンアニメーション

とりあえずこれだけあれば十分です。
![Demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820411/bd29239a-7e77-4eec-a80a-d419708a9752.gif)

## GitHubで公開
https://github.com/Isshi-777/SimpleButton
【Mac】コマンドでPDFを圧縮する方法

ghostscriptを使用するとPDFを圧縮できます。

https://ghostscript.readthedocs.io/en/gs10.05.0/?utm_source=ghostscript&utm_medium=website&utm_content=cta-inline-link

## インストール

```bash
brew install ghostscript
```

## 使い方

以下のコマンドでPDFを圧縮できます。

```bash
gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/screen -dNOPAUSE -dQUIET -dBATCH -sOutputFile=output.pdf input.pdf
```
Datadog ユーザモニタリング 地域別アクセス数

## DatadogのRUMは、都道府県, 市町村といったどんな地域別のアクセス数を可視化できるのですか？
「日本のどの地域からアクセスしているのか可視化できますか」という質問をいただきました。公式ドキュメントはグローバルの地域、日本とか米国とかのサンプルは掲載されていたのですが、日本国内のサンプル図が見つからなかったので、実際に取得した地域別の図を共有します。サンプルは、ある地域向けWEBサイトなので、その地域のユーザーに集中してアクセスされています。

### 国別アクセス数
ダッシュボードのメニューを辿って最初に表示されるのがGeographic Profileの［Number of Views by Country］で、日本は全都道府県の合計数。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/2bfe4262-bbed-4261-9e05-ee4c62bc1110.png)

### 地図を拡大
国別アクセス数を拡大することができます。地図の日本にズームイン。都道府県の境目が表示されるくらい拡大しても Japan 合計だけしか表示されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/3f571fd3-6766-4057-aa91-72ffe0bb9150.png)

### 地域別内訳（Region Breakdown）
残念ながら地図ではなく、円グラフか上位リストですが、都道府県まで地域別アクセス数を分解できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/1cc58fec-fe86-4df8-a01b-9461a60cef53.png)

### さらにトップシティ（Top Cities）
そして棒グラフでアクセス数の多い順に市町村レベルで確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/40d981b2-54d8-4937-ba71-8d9ce61ac0d3.png)

### グラフをカスタマイズ
市町村の属性が見つかったので、市町村別の粒度で円グラフも表示できます。日本地図にプロットするところまでは方法が見つからなかったです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/9bb7750a-3b2d-4e27-af46-8d3d708736c4.png)

属性は［RUM > Sessions Explorer > セッションを選ぶ > Attributes］で確認できます。
属性のフィルタリングは［@geo.city:*］や［@geo.country_subdivision:* ］などでした。
つまり下図に記載の属性別にカスタマイズできそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/52ba2be7-2270-4df0-8746-5c5c6fb4192d.png)

### おまけ
属性をJSONで見ると、緯度/経度も取得できているので地図にマッピングできそうですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189936/1d68945c-f6c0-4950-916e-f23bf5bc7ddb.png)


### まとめ
質問「DatadogのRUMは、都道府県, 市町村といったどんな地域別のアクセス数を可視化できるのですか？」に対して、日本合計、都道府県別、市町村別の３つの範囲で集計できます。
找出某个Plant里面的成品

使用到的表：
表	    说明
MARC	物料主数据（按工厂层次），比如库存管理、采购、MRP参数是按工厂保存的。
MARA	物料主数据（全公司层次），比如物料的基本信息、物料类型（品目タイプ）在这里。

具体步骤：
第一步：在MARC中，找出A201工厂存在的所有物料。
到MARA中，**进一步筛选这些物料中，物料类型是ZIFG（制品）**的物料。

具体操作
1.在marc上筛选出plant=A201的物料，download下来。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/2e4e218a-b8bc-406f-a7c4-2a4c5cc2b0c7.png)
下载下来的excel
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/479e0c1f-2935-41ba-8107-3b16421d61ed.png)

第二步：用刚刚down下来的品目，在mara表中检索品目type=ZIFG（成品）的数据。
点击这个符号
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/f15e0845-2dde-4555-bc29-7cd4eab1576c.png)
在刚刚下载的excel中复制一整列
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/2aa63742-c62d-4369-9804-bba1567a6267.png)
将这一整列粘贴在MARA的品目里，点击「データ転送」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/84e41822-5280-4627-8e36-f8b1e77310bf.png)
现时点的检索条件（品目，品目type）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/e2d42a05-f594-4ef2-9020-0dcadf5e4ab5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/f1f5da55-a40b-4531-87f0-e8d4bcd45bc9.png)
点击执行，最后检索出来的就是在Plant里面的成品。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/a58cf6cf-577d-4ba8-b4e0-e508c25f93f5.png)
Laravelでよく使う each() メソッドと Carbon の基本をまとめてみた【日付操作と配列処理】

# はじめに

LaravelやPHPを使って開発をしていると、

- `$collection->each(...)`
- `Carbon::now()`

といったコードをよく見かけます。

この記事では、Laravelでよく使われる **`each()` メソッドと `Carbon` インスタンスの基本的な使い方や意味**について解説します。

---

# ①`each()` メソッドとは？

`each()` は、**コレクション（配列のようなデータ構造）に対して、1つずつ処理を行うためのメソッド**です。

Laravelのコレクション（`Illuminate\Support\Collection`）でよく使われます。

## 基本構文：

```php
$collection->each(function ($item, $key) {
    // ここで処理
});
```
**使用例：**
```php
$users = collect([
    ['name' => '田中'],
    ['name' => '佐藤'],
    ['name' => '鈴木'],
]);

$users->each(function ($user) {
    echo $user['name'] . "\n";
});
```
**出力：**
```plaintext
田中
佐藤
鈴木
```

## each() と foreach の違い
![IMG_4030.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/6ae317d1-4ffe-4cc6-996d-a1aaa1ed7760.jpeg)

each() は**メソッドチェーン可能な「Laravel流」な書き方**としてよく使われます。

# ③Carbon インスタンスとは？
Laravelでは、日付・時刻の操作に**Carbon（カルボン）というライブラリ**が標準で使われています。
これは DateTime クラスを拡張した強力なツールで、**直感的かつ読みやすい日付操作**が可能です。
**基本構文：**
```php
use Carbon\Carbon;

$now = Carbon::now();
```
これで $now は、**現在日時を持つCarbonインスタンス**になります。

## よく使うメソッド・プロパティ
![IMG_4031.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2246240/929fe5d1-486c-4ac6-897e-066ade58b3d4.jpeg)

## Carbon × each の組み合わせ例
```php
$dates = collect([
    '2025-01-01',
    '2025-02-01',
    '2025-03-01'
]);

$dates->each(function ($date) {
    $carbonDate = Carbon::parse($date);
    echo $carbonDate->format('Y年m月d日') . "\n";
});
```

# ④まとめ
**each()**
- LaravelのCollection専用のループメソッド
- foreach よりも「チェーンしやすく、読みやすい」
- よくBladeテンプレートやデータ処理で登場

**Carbon**
- Laravel標準の日付・時間操作ライブラリ
- Carbon::now() で現在日時がすぐ取れる
- addDays(), diffForHumans() など便利メソッドが豊富