OmniAICreator/Qiita-1.07M huggingface dataset:
Wordで1ページずつpdfにして保存する

 ~~こんなくどいことする必要ある？~~
 ↑kintoneのプラグインを使ってたら必要な場面がでてきたので自分用に一応残しておきます。。


```VBA
Sub SplitWordToPDF()
    Dim doc As Document
    Dim totalPages As Integer
    Dim i As Integer
    Dim tempRange As Range
    Dim pdfPath As String
    Dim startPos As Long, endPos As Long

    Set doc = ActiveDocument
    totalPages = doc.ComputeStatistics(wdStatisticPages)

    For i = 1 To totalPages
        ' ページの開始位置
        startPos = doc.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i).Start
        
        ' ページの終了位置
        If i < totalPages Then
            endPos = doc.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=i + 1).Start - 1
        Else
            endPos = doc.Range.End ' 最終ページの場合は文書の終端を取得
        End If

        ' ページ範囲を設定
        Set tempRange = doc.Range(Start:=startPos, End:=endPos)

        ' 新しいWord文書を作成し、ページ内容をコピー
        Dim tempDoc As Document
        Set tempDoc = Documents.Add
        tempDoc.Range.FormattedText = tempRange.FormattedText
        
        ' 余白と用紙サイズをWordと揃える
        With tempDoc.PageSetup
            .TopMargin = doc.PageSetup.TopMargin
            .BottomMargin = doc.PageSetup.BottomMargin
            .LeftMargin = doc.PageSetup.LeftMargin
            .RightMargin = doc.PageSetup.RightMargin
            .PageWidth = doc.PageSetup.PageWidth
            .PageHeight = doc.PageSetup.PageHeight
        End With

        ' PDFとして保存
        pdfPath = doc.Path & "\Page_" & i & ".pdf"
        tempDoc.ExportAsFixedFormat OutputFileName:=pdfPath, ExportFormat:=wdExportFormatPDF

        ' 一時的なドキュメントを閉じる
        tempDoc.Close False
    Next i

    MsgBox "PDF出力しました", vbInformation
End Sub

```
【Javascript】Objectの静的メソッドを整理する。

# Objectとは
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object

## 本記事の目的
卒業制作での実装でObjectの静的メソッドを用いてのデータ加工を
行ったのを機にObjectの静的メソッドを整理したいなと思い、
記事をおこしました。

:::note info
現状使ったメソッドのみ他に良いメソッドの利用手段などがあれば、適宜更新致します。
:::


### Object.entries
オブジェクトのキーと値のペアを配列に変換。
```javascript:objectSample.js

const hoge = {
    "1": "hoge1",
    "2": "hoge2"
}

console.log(Object.entries(hoge))

// ログ出力結果
[
    ["1", "hoge1"],
    ["2", "hoge2"]
]
```

### Object.fromEntries
キーと値のペアの配列からオブジェクトに変換する
```javascript:objectSample.js
const array = [
    ["name": "Yamada Taro"],
    ["age": 25],
    ["job": "engineer"]
]

console.log(Object.fromEntries(array))

// ログ出力結果
{
    "name": "Yamada Taro",
    "age": 25,
    "job": "engineer"
}
```

### Object.keys
オブジェクト全てのプロパティのキーを配列として返す。
```javascript:objectSample.js
const obj = {
    "name": "Yamada Taro",
    "age": 25,
    "job": "engineer"
}

console.log(Object.keys(obj))

// ログ出力結果
["name", "age", "job"]
```

### Object.values
オブジェクト全ての値を配列として返す。
```javascript:objectSample.js
const obj = {
    "name": "Yamada Taro",
    "age": 25,
    "job": "engineer"
}

console.log(Object.values(obj))

// ログ出力結果
["Yamada Taro", 25, "engineer"]
```
今回の記事はもっとも簡単なパターンでの実装となりましたが、
Objectの静的メソッドを使用することで、
オブジェクトのデータ操作が簡潔に行うことができます。
Databricks Mosaic AI Agent Framework & EvaluationがAzure東京リージョンにやってきました！

こちらを書いてから数日したらAzureのjapaneastリージョンでも使えるようになっていました。

https://qiita.com/taka_yayoi/items/9cfe10368bfb570c6d6e

https://learn.microsoft.com/en-us/azure/databricks/resources/feature-region-support#ai-and-machine-learning

![Screenshot 2025-04-02 at 16.21.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/922c60bf-e178-49bc-8ca6-fba4aa1c530b.png)

AI Playgroundに表示される**エクスポート**ボタンがその証です。

![Screenshot 2025-04-02 at 16.23.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f004567-2073-4624-9962-6dae7016801c.png)

AIエージェント開発、運用ご活用ください！

### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
イーサネットのプロパティ情報をPowershell上から確認する方法

イーサネットのプロパティをGUI上では下記のように表示されている

![イーサネットのプロパティ.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827128/f8e43009-894c-4cf3-a6e8-0ba0862fa1f3.jpeg)



これをPowershell上から確認できないかのお話

結論できるのでこちらに記述
あらかじめ見たいプロパティの名前は控えておく

# イーサネットのプロパティ
Get-NetAdapterBinding "イーサネット"

Powershell上での実行結果は下記の通りになる

![イーサネットのプロパティ_PS.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827128/8b935851-34dc-4a3d-abf2-4791c613e41c.jpeg)
ラッチリレーで省電力

## 経緯
出力信号が100Vとかだとリレーを使う事がある。
でも消費電力が気になる。電池運用だと特に。

ラッチリレーというのがあって、
onとoffを切り替える時だけ電流を消費するというもの。
![IMG_3269.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/103d49d6-f8b5-4e31-aa61-84b32a347e60.jpeg)
![IMG_3270.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/829225f3-7e65-445f-a5f6-2fbd0a461481.jpeg)
G6SK-2はコイルを2個内蔵していて、on用のコイルとoff用のコイルがある。
G6SU-2はコイルを1個内蔵していて、電流の向きでonとoffを切り替える。

今回はラッチリレーで省電力を目指す実験。

## 回路
![回路図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/3f87e29c-f6da-4c49-b769-ad32456ffb3b.jpeg)
![IMG_3268.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/771d0cf6-e376-4380-aafa-86725f518e61.jpeg)
押しボタンスイッチにLPFを付けて、74HC423でエッジを検出しパルス出力、
NJU7386のHブリッジを通して、1コイルのG6SU-2を駆動する。

## 結果
リレー以外の電流を測定する。
onとoff切替時の電流はピーク時1mA～2mA、50msくらい。
![リレー無し切替.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/4dbede2e-715a-4a3c-bd48-ed96e0b45e80.jpeg)

リレーを含んだ電流を測定する。
onとoff切替時の電流はピーク時20mA、50msくらい。
![リレー有り切替.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/71b4a228-9def-4949-bf43-b6ad7e7d77be.jpeg)

リレーon継続時の電流を測定する。
平均10.67μA。
![リレー有りon待機.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/88a82d6a-332f-41fd-a78b-7ff1a113ac38.jpeg)

リレーoff継続時の電流を測定する。
平均0.11μA。
![リレー有りoff待機.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563735/c99ea264-c4ad-4738-9fd2-d61f9b4d9406.jpeg)

## 結論
リレーを省電力で駆動できました。
めでたしめでたし😇

抵抗やコンデンサの値を調整すれば消費電流はもっと抑えられると思う。
AWS S3 プラクティショナー 基礎

# AWS S3 プラクティショナー 基礎参考書

## 目次
1. [AWSとは？](#awsとは)
2. [S3とは？](#s3とは)
3. [S3の基本的な使い方](#s3の基本的な使い方)
   - バケットの作成
   - オブジェクトのアップロード
   - アクセス権限の設定
4. [S3の特徴](#s3の特徴)
   - スケーラビリティ
   - 高い耐久性と可用性
   - セキュリティ
5. [S3の料金体系](#s3の料金体系)
6. [AWSプラクティショナー試験の準備](#awsプラクティショナー試験の準備)

---

## 1. AWSとは？

AWS（Amazon Web Services）は、Amazonが提供するクラウドコンピューティングサービスです。これにより、物理的なサーバーを持つことなく、インターネットを通じてサーバーやデータベース、ストレージ、分析ツール、AI、機械学習などのさまざまなリソースを利用することができます。

AWSは非常にスケーラブルで柔軟なサービスを提供しており、個人から企業までさまざまな規模で活用されています。

---

## 2. S3とは？

S3（Simple Storage Service）は、AWSが提供するオブジェクトストレージサービスです。オブジェクトストレージは、データを「オブジェクト」として保存する方式で、データとそれに関連するメタデータ（情報）を一緒に扱います。S3は大量のデータを安全かつ効率的に保存・管理できるため、バックアップやデータアーカイブ、静的ウェブサイトのホスティングなどに広く利用されています。

### 主な特徴
- **無制限のストレージ容量**：必要な分だけストレージを使用可能
- **高い耐久性**：99.999999999%（11 9's）の耐久性を誇る
- **可用性**：99.99%の可用性を提供

---

## 3. S3の基本的な使い方

### バケットの作成

S3では「バケット」というコンテナにファイル（オブジェクト）を保存します。バケットはAWSリージョン（地理的なエリア）内で作成されます。

**手順**:
1. AWS Management Consoleにログイン
2. **S3サービス**に移動
3. 「Create Bucket（バケット作成）」をクリック
4. バケット名を入力（ユニークな名前にする必要あり）
5. 保存先リージョンを選択
6. その他のオプションを設定（必要に応じて）

### オブジェクトのアップロード

バケットを作成した後、ファイル（オブジェクト）をバケットにアップロードします。

**手順**:
1. 作成したバケットを選択
2. 「Upload（アップロード）」をクリック
3. ファイルをドラッグアンドドロップまたは選択してアップロード

### アクセス権限の設定

S3のデータはデフォルトでプライベートですが、他のユーザーやサービスがアクセスできるようにすることもできます。アクセス制御は**バケットポリシー**や**IAMポリシー**を使って設定します。

- **ACL（アクセス制御リスト）**を使って、個別のオブジェクトにアクセス権限を設定することも可能です。
- **バケットポリシー**を使うと、バケット全体に対するアクセス権限を管理できます。

---

## 4. S3の特徴

- **スケーラビリティ**: S3は自動的にスケールします。ユーザーは容量を気にする必要なく、必要なデータを保存できます。
- **耐久性**: AWSはS3のデータを複数の場所にバックアップするため、データ損失のリスクが非常に低いです。
- **セキュリティ**: S3は暗号化機能やアクセス制御機能を提供しており、データのセキュリティを確保できます。

---

## 5. S3の料金体系

S3の料金は以下の要素に基づいて決まります：

1. **ストレージ料金**: 保存するデータ量に基づく料金
2. **リクエスト料金**: データのアップロードやダウンロード、削除などのリクエストに対する料金
3. **データ転送料金**: データをAWS外に転送する場合に発生する料金

たとえば、データを頻繁に更新しない場合には、低コストの「S3 Glacier」などのアーカイブストレージを使うことができます。

---

## 6. AWSプラクティショナー試験の準備

AWS Certified Cloud Practitioner（AWS認定クラウドプラクティショナー）は、AWSの基本的な理解を問う資格試験です。試験の内容は以下のようなカテゴリに分かれています：

1. **AWSの基本的な概念**  
   - クラウドコンピューティングの利点
   - AWSのサービス（S3、EC2、RDS、IAMなど）
2. **AWSのセキュリティとコンプライアンス**
   - IAM（Identity and Access Management）を使ったアクセス管理
   - セキュリティグループやネットワークACL
3. **AWSの価値提案と価格モデル**
   - AWSの料金モデルとコスト管理
4. **AWSの利用方法とリソース管理**
   - AWS Management Consoleを使ったサービスの操作

試験準備のために、以下のリソースを活用できます：
- **AWS公式トレーニング**：AWSの無料トレーニングやオンラインコース
- **AWS Whitepapers**：クラウドコンピューティングやセキュリティに関するドキュメント
- **模擬試験**：試験形式に慣れるために、模擬試験を受ける

---
業務でAWS S3を使用するので、これを機にクラウドプラクティショナーの資格を取ろうと思い、勉強を始めました。
上記を一通り頭に入れた後、Udemyの動画でさらに学習していこうと思います。
🍺 Homebrewのインストールと基本的な使い方【Mac開発環境の第一歩】

こんにちは。この記事では、Macの開発者にとって欠かせないツール「Homebrew」について、

・どんなものなのか？

・どうやってインストールするのか？

・どんなふうに使うのか？

を、自分が実際に導入した手順と一緒にまとめておきます！

## 🍺 Homebrewとは？🍺
Homebrew（ホームブリュー）は、macOS用のパッケージ管理ツールです。
開発に必要なツール（例：Git、Node.js、Ruby、VS Code など）を簡単にインストール・アップデート・削除できる便利な仕組みです。

一言でいうと、Macで使える「ソフトのインストール係＆整理係」みたいな存在です！

🍺Homebrewの主な機能
開発ツールのインストール（brew install xxx）

GUIアプリのインストール（brew install --cask xxx）

インストール済みツールの一覧表示・更新・削除

コマンド1つで環境をきれいに保てる

## 🛠Homebrewのインストール手順（2025年4月時点）🛠️
１．ターミナルを開く
macOS標準の「ターミナル」アプリを起動します。

２．インストールコマンドを実行
公式サイト（https://brew.sh/ja/） にあるインストールコマンドをコピーし、ターミナルに貼り付けて実行します👇

```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
途中で Macのログインパスワードを求められるので入力（※画面上には表示されません）。

３．パスを通す（重要！）
インストール後、ターミナルに表示される案内に従って、以下のコマンドを実行します。

```
echo >> ~/.zprofile
echo 'eval "$(/opt/homebrew/bin/brew shellenv)"' >> ~/.zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
```
これで```brewコマンド```がどこからでも使えるようになります。

４．インストール確認
以下のコマンドでバージョンが表示されればインストール完了！
```
brew --version
```
例
```
Homebrew 4.4.27
```

## 📦 Homebrewの基本コマンドまとめ

| コマンド | 説明 |
|--------|------|
| `brew install <パッケージ名>` | パッケージのインストール（例：`brew install git`） |
| `brew install --cask <アプリ名>` | GUIアプリのインストール（例：`brew install --cask visual-studio-code`） |
| `brew list` | インストール済みのパッケージ一覧を表示 |
| `brew update` | パッケージの情報を最新にする |
| `brew upgrade` | インストール済みのパッケージを最新版にアップグレード |
| `brew uninstall <パッケージ名>` | パッケージを削除 |
| `brew doctor` | 問題がないかチェック |



## 👀 使ってみた感想
インストールも簡単で、「brew install って打つだけでツールが整う」のがめちゃ快適です。
今まで手動で環境構築してた時間は何だったんや……と感じました。

開発初心者の方にも超おすすめです！

## ✍️ まとめ
HomebrewはMac開発の必須ツール！

ターミナルで1行コマンド入れるだけで導入完了

brew install で環境構築が爆速＆キレイに整う

パッケージの管理・整理がめっちゃラクになる

これから rbenv や nodenv などのバージョン管理ツールも導入していく予定なので、そちらもまた別の記事でまとめていきます。

以上、参考になれば嬉しいです！

📘 参考：

Homebrew公式サイト：https://brew.sh/ja/

Homebrew公式ドキュメント：https://docs.brew.sh
Windows　Serviceに関して　Powershellより取得

Windowsのサービス一覧は目視確認だとServices.mscからできる
Powershellからでもできる

以下の項目に分けて取得方法を記述
①サービス一覧を全取得し、ログに出力
②サービスで特定の状態(稼働中、停止中)で取得し、ログに出力
③特定のサービスに絞って詳細を取得し、ログに出力
#

①サービス一覧を全取得し、ログに出力
以下の記述となる
# サービス全取得
Get-Service >C:\work\Log\Service.txt
#
②サービスで特定の状態(稼働中、停止中)で取得し、ログに出力
以下の記述となる。稼働中はRunning、停止中はStoppedに置き換える
# 特定な状態のサービスを取得し、ログに出力
Get-Service | Where-Object { $_.Status -eq "Running" } >C:\work\Log\Service_Running.txt
#
③特定のサービスに絞って詳細を取得し、ログに出力
例としてWindows Update　(サービス名：wuauserv)
# Windows Updateのサービス情報取得し、ログに出力
$serviceName ="wuauserv"
Get-Service -Name $serviceName | Select-Object -Property Name,DisplayName,Status,DependentServices,ServicesDepenndedOn　　　>C:\work\Log\Service_wuauserv.txt

挙動は下記のようになる
![サービス　詳細情報.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827128/5d36e13f-5fed-4995-ae01-fbd78cef2d76.jpeg)
postgresql サンプルデータベース dvdrental で外部キーの不整合が起こる場合の対応

EFCore で dvdrental のエンティティとコンテキストを作って select してみたら  `Could not load type 'Npgsql.Internal.HackyEnumTypeMapping'  ` とか言われて動かない。

このデータベースは id 列 に serial を使っているが 外部キー側は smallint になっているのでそのままではこういうエラーが起こる。

全部 integer に変更する

```sql
drop view actor_info; 
drop view customer_list;
drop view film_list;
drop view nicer_but_slower_film_list;
drop view sales_by_film_category;
drop view sales_by_store;
drop view staff_list;


ALTER TABLE public.address 
  ALTER COLUMN city_id SET DATA TYPE integer
  ;
ALTER TABLE public.city 
  ALTER COLUMN country_id SET DATA TYPE integer
  ;
ALTER TABLE public.customer 
  ALTER COLUMN store_id SET DATA TYPE integer,
  ALTER COLUMN address_id SET DATA TYPE integer
  ;
ALTER TABLE public.film 
  ALTER COLUMN language_id SET DATA TYPE integer
  ;
ALTER TABLE public.film_actor 
  ALTER COLUMN actor_id SET DATA TYPE integer,
  ALTER COLUMN film_id SET DATA TYPE integer
  ;
ALTER TABLE public.film_category 
  ALTER COLUMN film_id SET DATA TYPE integer,
  ALTER COLUMN category_id SET DATA TYPE integer
  ;
ALTER TABLE public.inventory 
  ALTER COLUMN film_id SET DATA TYPE integer,
  ALTER COLUMN store_id SET DATA TYPE integer
  ;
ALTER TABLE public.payment 
  ALTER COLUMN customer_id SET DATA TYPE integer,
  ALTER COLUMN staff_id SET DATA TYPE integer,
  ALTER COLUMN rental_id SET DATA TYPE integer
  ;
ALTER TABLE public.rental 
  ALTER COLUMN customer_id SET DATA TYPE integer,
  ALTER COLUMN staff_id SET DATA TYPE integer
  ;
ALTER TABLE public.staff 
  ALTER COLUMN address_id SET DATA TYPE integer,
  ALTER COLUMN store_id SET DATA TYPE integer
  ;
ALTER TABLE public.store 
  ALTER COLUMN manager_staff_id SET DATA TYPE integer,
  ALTER COLUMN address_id SET DATA TYPE integer
  ;

```
cv2で迷った処理メモ

数年前に使ってた時のメモなので色々変わっているかもしれません…

float画像（gray_scaleなど）を保存する時、[0, 1]から[0, 255]に直す必要がある

```python
# gray_scaleの画像がそのまま表示できる
imshow(gray_img)
plt.show()

# バグった画像が保存される
cv2.imwrite("gray_img.png", gray_img)

# *255することでgray_scaleをrgb化？
_img = np.clip(gray_img * 255, 0, 255).astype(np.uint8)
cv2.imwrite("rgb_img.png", _img)
```
Linqで迷った処理メモ

```c#
class Idol
{
    public required string Name { get; set; }
    public int Age { get; set; }
    public required string Production { get; set; } 
}

class Program
{
    static void Main()
    {
        List<Idol> idols =
        [
            new() { Name = "天海春香", Age = 17, Production = "765" },
            new() { Name = "日高愛", Age = 13, Production = "876" },
            new() { Name = "島村卯月", Age = 17, Production = "346" },
            new() { Name = "春日未来", Age = 14, Production = "765" },
            new() { Name = "萩原雪歩", Age = 17, Production = "765" },
        ];

        //条件を満たす間だけ値を取り出す
        var selected = idols.TakeWhile(x => x.Age <= 15);
    }
}
新卒1年目社員の合格体験記【応用情報技術者】

## はじめに

先日、令和6年度秋季（10月）の応用情報技術者試験の合格発表があり、見事合格することができました。
そこで今回は、新卒1年目社員の筆者が応用情報技術者試験に合格した勉強法を記録したいと思います。

## 前提

応用情報技術者試験の対策を始める前の筆者の状況と、試験対策に使用した教材は以下になります。

■ 筆者の状況 
・情報系学部出身
・基本情報技術者取得済み

■ 使用した教材
・[応用情報技術者合格教本 - 技術評論社](https://gihyo.jp/book/2024/978-4-297-14620-7)
・[過去問道場](https://www.ap-siken.com/apkakomon.php)
・応用情報技術者問題集 全問解説 午前（アプリ）

## 午前試験の対策

午前試験は、問題の半分前後が過去問から出題されるため、過去問を繰り返し解くことがポイントになります。そのため、最低限の知識をインプットしたらどんどん過去問を解いて対策をしていました。

まずは知識をインプットして参考書を一周しました。
今回私が使用した参考書（応用情報技術者合格教本）は内容が充実しており、じっくり読み込むとかなりの時間がかかってしまいます。そのため、理解度は8割程度でどんどん読み進めていきました。

参考書を使ったインプットのあとは過去問演習に入りました。
過去問演習は主に過去問道場を使用しました。はじめは分野ごとに問題を解き、間違えた問題を参考書を使って復習することで理解を深めました。過去問を分野別に一通り解いたら、実際の試験と同様に通しで過去問演習を行いました。過去問演習で7割から8割程度とれるようになれば問題ないと思います。

過去問道場に加えて、スキマ時間にアプリ（応用情報技術者問題集 全問解説 午前）を使った過去問演習も行いました。このアプリは過去に自分が間違えた問題を絞って出題してくれる機能があるため、自分の苦手分野の対策にも利用しました。

## 午後試験の問題選択

午後試験は11個の問題から5問を選択して回答する形式です。
そのため対策の段階から本番で選択する問題を絞り、過去問演習を行いました。
筆者は以下の5問を選択しました。

・情報セキュリティ（必須）
・経営戦略
・組み込みシステム開発
・プロジェクトマネジメント
・サービスマネジメント

回によっては難しい問題が出ることもあるため、余裕がある方は予備として1問多く対策しておくと良いと思います。

### 情報セキュリティ
必須選択問題です。
過去問は午前試験の知識でそこそこ戦えたため、過去問演習と復習で対策できました。暗号化技術と攻撃手法は頻出なので、暗記しておくと良いと思います。
### 経営戦略
予備知識が必要なく文章も読みやすいですが、文章が長いため過去問を繰り返して文章に慣れていきました。
最後の問題が計算問題の場合が多いため、簿記の計算の対策は必須です。
### 組み込みシステム開発
この問題は予備知識が必要なく問題自体も簡単なため、過去問の段階でかなり高得点が取れていました。問題文と図から抜き出すだけで解ける問題となってます。自分も午後問題を選択する際に複数のサイトを参考にしましたが、ほとんどのサイトがこの問題をお勧めしていました。個人的にも一番のおすすめです。
### プロジェクトマネジメント
文章が長く最初は読みにくさを感じていましたが、慣れてくれば文章も問題もシンプルで解きやすいです。基本的には文章から抜き出すだけですが、午前試験の知識が必要な問題もありました。
### サービスマネジメント
基本的にはプロジェクトマネジメントと似たような問題です。サービスの運用とインシデント対応に関する問題が出題されます。基本的には文章から抜き出す国語の問題ですが、最後の問題が計算問題なため、ここは過去問以外でも対策をしました。

## 午後試験の勉強法
過去問道場の問題がpdfファイルになっているものがあるため、それをプリントアウトして紙の冊子で5回分の過去問演習を行いました。紙だと文章に直接書き込むことができるため、本番さながらで解くことができておすすめです。実際の試験同様に回答時間を計って問題を解いていたのですが、筆者が選択した問題は長文のものが多いのもあり毎回制限時間ギリギリでした。それでも回数を重ねると時間にも余裕が生まれてきたため5回分くらいは解くと良いと思います。

## 試験結果
結果は冒頭でも記載した通り、合格することができました！
本番の得点は開示によると、午前試験：76/100点　午後試験：74/100点とある程度余裕をもって合格できました。

以上が筆者の合格体験談になります。
少しでも皆さんの参考になればと思っています。
Spark DataFrameメモ（Scala）

数年前にSpark使ってた時のメモなので色々問題あるかもしれません…

# データフレームの作成
### スキーマを指定してデータフレーム作成
```scala
val schema = StructType(
    StructField("Column1", StringType, true) ::
    StructField("Column2", IntegerType, true) ::
    StructField("Column3", DoubleType, true) :: Nil
)
var df = spark.createDataFrame(sc.emptyRDD[Row], schema)
```

### groupBy
Column1とDateTimeの日付まででGroup Byし、Column2とColumn3の最大と最小を導出

```scala
var _df = df
    .groupBy(
        $"Column1",
        to_date($"DateTime", "yyyy/MM/dd hh:mm:ss").as("Date")
    )
    .agg(
        max($"Column2").as("MaxColumn2"),
        min($"Column3").as("MinColumn3")
    )
```
## Window関数
前提とするDataFrameのスキーマは以下

```scala
var schema = StructType(
    StructField("group", StringType, true) ::
    StructField("datetime", StringType, true) ::
    StructField("number", DoubleType, true) ::
    StructField("value", StringType, true) :: Nil
)
```

```scala
// yyyy/MM/dd hh:mm:ssを日付形式に変更（GroupByなどに含める）
to_date($"Time", "yyyy/MM/dd hh:mm:ss").as("Date")
```

```scala
var df = _df.test().test()
```

### 平均値
指定したグループに対して平均値を導出する。

```scala
var df = _df.groupBy($"group").agg(avg("number"))
```

### 行数カウント
Window関数で指定した条件で行数をカウントする

```scala
val w = Window.partitionBy("group").orderBy("number")
var df = _df.withColumn("dataCount", row_number().over(w))
```
なんか便利なコマンド・スクリプトまとめ

一回使ったことあるけどどんなコマンドだっけ、、、
と、もう一度検索することが多々あるので、一度利用して便利だったコマンドやスクリプトを残していきます。
完全に個人用

# PowerShell
## ファイル関連
### ファイル一覧取得
#### フォルダ内のファイル一覧を再帰的に取得
```ps
Get-ChildItem -Recurse -File | %{$_.FullName}
```
Voltaでnodeのバージョン管理をすることの危うさ

ちょっとした注意喚起です。

## 実はVoltaのpnpmインストールは実験的機能

[こちら](https://docs.volta.sh/advanced/pnpm)

> pnpmのサポートは現在実験的です。 有効にするには、環境変数VOLTA_FEATURE_PNPMが1に設定されていることを確認してください。 Windowsでは、システム設定のユーザー環境変数またはシステム環境変数に追加できます。 Linux/Macでは、プロファイル・スクリプト（.bash_profile、.zshrcなど）の中で設定できます。
>
> このサポートは実験的なものであるため、いくつかの未解決の問題があるかもしれません。 既知の制限事項のいくつかを以下に示しますが、Volta で pnpm を使用しているときに、期待したように動作しないことがあれば、私たちの GitHub で issue を開いてください。
>
> 現時点では自動的な移行はありませんので、以前に pnpm を Volta global としてインストールしていた場合は、volta install pnpm を呼び出して手動で再インストールする必要があります。 サポートを有効にして再インストールする前に、以前にインストールした pnpm パッケージを volta uninstall pnpm でアンインストールしてください。 ネイティブな pnpm サポートに切り替えた後は、現在のところアンインストールの実装がないため、同じコマンドを呼び出して分離された古い pnpm パッケージを削除することはできません。

以前からVoltaの環境がある場合、`npm install pnpm` もvoltaを使って行われてしまう模様

## 何が困るのか

misskeyのインストールの時とかに躓いた

## 対処法

[2024年は Volta で管理する Node 付属 corepack で pnpm を管理する](https://zenn.dev/longrun_jp/articles/volta-node-corepack-pnpm)

こちらも参照
[【Mac】Homebrew、Volta、corepackでNode.jsとnpmとyarnを管理する](https://zenn.dev/chamo/articles/2e2588f8da205f)

corepackがいいみたい
ddskkの変換中にcopilot-modeの補完を抑制する

copilotの補完候補が出るとddskkの変換候補が表示されなくなったり、おかしくなるので変換時だけ抑制している。
日本語の補完もそれなりに便利なので、変換時以外はcopilotによる補完がきくようにしている。

```
  :config
  (defun my/copilot-disable-during-skk ()
    (memq skk-henkan-mode '(on active))) ;; 変換前・変換中の両方を抑制

  (add-to-list 'copilot-disable-display-predicates #'my/copilot-disable-during-skk)
```
【Rails初学者】rake -Tで自作タスクを確認してみる

# 【Rails初学者メモ】rake -Tで自作タスクを確認してみました。

Railsで学習中、定期的な処理などの為に「rakeタスク」を使うと便利と知り、  
 `rake -T` で確認するということを行いました。

---

## rakeタスクの追加

まずは `lib/tasks` フォルダに `.rake` ファイルを作成。  
たとえば以下のようなコードを `lib/tasks/notification.rake` に追加しました。

```ruby
namespace :notification do
  desc '利用者にメールを送付する'

  task send_emails_from_admin: :environment do
    p '初めてのrake task'
  end
end
```
ポイントは `desc` を書くこと！これがないと `rake -T` に表示されない。

## rake -T でタスクを確認
ターミナルで rake -T を実行する。
```
rake notification:send_emails_from_admin  # 利用者にメールを送付する
```
表示されました。
これで自分のタスクが、他の開発者にもわかりやすくなります。

## タスクを実行してみる
```
$ rails notification:send_emails_from_admin
```
実行すると、以下のような出力がありました。
```
"初めてのrake task"
```
無事に出力されています。

## rakeタスク使用場面
- 定期的にバッチ処理を実行したいとき（例：毎日メール送信）
- 管理者が手動で特別な処理をしたいとき（例：特定ユーザーのデータ一括更新）
- 手作業やコントローラー経由ではやりにくい処理も、rakeタスクにしておくと便利らしい

## まとめ
- lib/tasks/*.rake にコードを書くと、rakeタスクが追加される
- desc を書かないと rake -T に表示されない
- namespace でタスクをグルーピングできる
- rails [タスク名] で実行できる（rakeでもOK）


 ----
 今後、開発の段階で定期処理や管理系の処理に使用していけたらと思います。
四つセット

 単価に関連する4項目セット：
単価（価格）
　例：10.5、100 など

数量単位（単位）
　例：PC（個）、KG（キログラム）、M（メートル）など
　→ この単価は何に対する価格かを示します

通貨（貨幣単位）
　例：JPY（円）、USD（米ドル）、EUR（ユーロ）など

価格単位（Price Unit）
　例：1、10、100 など
　→「この単価は ○○個あたり の価格か」を示します（SAPでは「Per」列に表示）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795764/dd944b58-4b4c-4608-9661-62a19c136c81.png)
【42Tokyo】first circle後半の感想

## 1. はじめに <a name="はじめに"></a>
　私は現在、以下の教育機関に所属しています。入学後1年で義務過程(first circleと呼ばれる)を終了したので、その感想をまとめようと思います。学校の規約で課題の詳細については述べられないことをご了承ください。

https://42tokyo.jp

前半はこちら

https://qiita.com/FR1SK_noob/items/f7e5cf8417d304e8beb9

### 対象読者
- 42Tokyoに興味がある方
- Computer Scienceの体系的な学習に興味がある方

### 本記事で述べること
- 42Tokyo本科課題に関する以下の内容
- 課題で筆者が学んだ要素
- 課題のつまづきポイント
- その他感想

### 本記事で述べないこと
- 本科課題の詳細設定
- 本科課題の解法、解答コード
- 本科課題の参考資料
- その他課題を実際に進めるために有益な情報
---

## 2. miniRT <a name="miniRT"></a>

### 概要
　RTとはレイトレーシングの略称です。レイトレーシングとは、コンピュータグラフィックスの手法の一つで、3D描画の計算を現実的な計算量に抑えて行えるというメリットがあり、Nvidiaも解説の動画を出しているほどポピュラーです。
　この課題ではファイルを読み込んでレイトレーシングを用いてファイルの内容を描画するプログラムを実装します。
### この課題から学べること
- レイトレーシング法

---

## 3. NetPractice <a name="NetPractice"></a>

### 概要
　パズル形式のテストを通じてインターネットを支えるTCP/IP、IPアドレスやサブネットマスクについて学んでいく課題です。

### この課題から学べること
- IPアドレス
- サブネットマスク

### 感想
　課題をクリアするだけなら1日程度の投下時間で済むという話を伺っていました。私はインターネットの全体感を掴みたかったので1週間ほどインプットに費やした後に課題特有のコツを友人に伺ってクリアしました。
 
  最終課題のft_transcendenceでこのインプットが活きて非常に感動したので、ある程度の時間を使うことを強くおすすめします。
 
---

## 4. cpp <a name="cpp"></a>

### 概要
　ここまでの課題はすべてC言語でしたが、ここからはC++を使用するため、その入門的な課題です。実際は細かく単元分けされた複数の小課題で構成されています。

クラスが使用可能になったため、オブジェクト指向やポリモーフィズムを段階的に学んでいきます。

### この課題から学べること
- クラス
- 継承
- オブジェクト指向
- ポリモーフィズム
- etc

### 感想
　あんまり自由度が高くなく面白みに欠ける課題であるため、地味にだらだらとスタックする人が多い印象です。僕は全10個のcpp課題を一人で勝手にcppPiscineとして3週間に凝縮して乗り切りました。

　キャストやテンプレートが1単元だったり、コンテナの勉強ががっつり必要なのに1単元だったりで一つ一つの重みが全然違うのも疲れる要因の一つかなと思います。

---

## 5. ft_irc <a name="ft_irc"></a>

### 概要
　IRCとはInternet Relay Chatの略称です。インターネットを通じて複数の利用者がリアルタイムに文字メッセージを交換することができるチャットシステム、あるいはそのプロトコルのことです。

　ソケット通信を学ぶ課題で、別のターミナル同士でのチャットを可能にするサーバーを実装します。実際にあるirssiなどのIRCクライアントでも動作するように結構厳密にプロトコルを踏襲する必要があります。

### この課題から学べること
- プロトコルとはなにか
- IRCプロトコルとはなにか
- ソケット通信
- ソケット通信のエラーハンドリング

### 感想
　本科の課題は複数種類のプロセス間通信を学んでいくものなのかなと確信した課題です。（ここまではシグナル、パイプ、マルチスレッド等）
 
 　ソケット通信に必要なsocket()やsend(), recv()が内部ですごいことをやっているのに、非常に簡単なインターフェースの提供で済んでいることを理解して震えました。

---

## 6. Inception <a name="Inception"></a>

### 概要
　Dockerの使用法を学ぶ課題です。変な縛りのもとで複数のコンテナを立ち上げる必要があります。

### この課題から学べること
- Dockerの使い方

### 感想
　本科に入って一番虚無感が強かった課題かもしれないです。非現実的すぎる課題制約かつ指定されたサービスの初期化設定が一番しんどくて嫌いでした。

　Dockerは便利なことはわかりましたが、これがfirst circleの最後の個人課題なのが残念でした。

---

## 7. ft_transcendence <a name="ft_transcendence"></a>

### 概要
　first circle最終課題です。Pongゲームを遊べるSPAのウェブサイトを実装します。要件で指定される言語やフレームワークが比較的頻繁に変わる課題なので過去資料が参考になりにくいです。

　フロントエンドもバックエンドも実装するのでウェブサイトの実装の全体感が掴めます。

### この課題から学べること
- Web開発の基礎
- フロントエンド
- バックエンド
- API設計
- 非同期処理
- etc...

### 感想
　4人のチームで3ヶ月かかりました。僕はゲームとしてのコア機能となる別端末同士の通信対戦を担当しました。必要なWebSocketのバックエンドとそれを使うフロントエンドをどちらも実装しました。

　全く何も知らない状態から始まり、いったん作ってみては壊しを3回くらい繰り返して合計1万行くらいロールバックをしてようやく通信対戦機能が完成したときは達成感に溢れました。

　Djangoの最初のページから始まって、チームメイトの実装でどんどん形になっていく様はワクワクして3ヶ月があっという間で非常に充実していました。

　反省点としては、API設計を最初にやることが大事だなと思いました。それをやっておけば前述したロールバックは防げたんだろうということと、タスク分割も容易になって過労で死にかけることもなかったなと思いました。

---

## 8. おわりに <a name="おわりに"></a>
　ここまでお読み頂きありがとうございました。無事にfirst circleを終了出来て少しほっとすると同時に、second circleの内容も非常に楽しみでなりません。

　僕は低レイヤーよりは実務っぽいレイヤーに興味があるのでモバイルアプリやゲームエンジン系のブランチに進みたいと思います。

　これを読んで少しでも課題のイメージがついて42Tokyoに興味が湧いていただければ幸いです!
VPN接続後にウェブページにアクセスできない理由と解決方法

***問題***
VPN接続後にウェブページにアクセスできない場合、原因はVPN設定の「リモートネットワークでデフォルトゲートウェイを使う」オプションが有効になっていることです。

***解決方法***

ネットワーク接続の設定を開く

「ネットワーク接続」 → 使用しているVPN接続を右クリック → 「プロパティ」へ進む。

TCP/IP設定を確認

「インターネットプロトコルバージョン4 (TCP/IPv4)」を選択。

デフォルトゲートウェイの設定を変更

「リモートネットワークでデフォルトゲートウェイを使う」のチェックを外す。

設定を保存してVPN接続を再起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050758/58847ca1-c597-4e05-afad-ee4adc18524e.png)
Pythonで学ぶ Arduino制御の基本：LEDとサーボモーター編



## はじめに  
本記事では、Pythonを使ってArduino制御の基本であるLEDの点灯・消灯のシミュレーションや、サーボモーターの角度に応じたPWMパルス幅の計算方法をわかりやすく解説します。Arduinoを実際に使わなくても、Pythonでシミュレーションできる形にしているため、初学者の方にもおすすめです。

---

## 参考リンクまとめ  
- [NRI Tech Blog - Arduinoとサーボモーター](https://tech.nri-net.com/entry/arduino_with_Servomotor)

---

##  Arduinoの仕組みをPythonで理解する：LEDとサーボの統合スクリプト

```python
# ================================================
# Pythonで学ぶ Arduino制御の基本（LED と サーボモーター）
# ================================================

# --- LED 点灯・消灯シミュレーション ---
print(" LED 点灯・消灯のシミュレーション")
led_pin = 13           # LED接続ピン番号
state_on = 1           # HIGH = 1（点灯）
state_off = 0          # LOW = 0（消灯）
delay_time_ms = 1000   # 1000ms = 1秒

print(f"Pin {led_pin} を HIGH（{state_on}）に → LED 点灯")
print(f"{delay_time_ms} ミリ秒 待機")
print(f"Pin {led_pin} を LOW（{state_off}）に → LED 消灯")
print(f"{delay_time_ms} ミリ秒 待機\n")


# --- サーボモーターのパルス幅計算関数 ---
def calculate_pulse_width(angle, min_us=500, max_us=2400):
    """
    指定した角度に対するサーボモーターのPWMパルス幅を計算する関数
    Calculate servo PWM pulse width for a given angle
    """
    pulse_width = (angle / 180) * (max_us - min_us) + min_us
    return pulse_width


# --- サーボ角度とパルス幅の関係出力 ---
print(" サーボモーターの角度 → パルス幅対応表")
for angle in [0, 45, 90, 135, 180]:
    pulse = calculate_pulse_width(angle)
    print(f"角度 {angle:3d}° → パルス幅 = {pulse:.1f} μs")
print()


# --- PWM制御の比例式 表示と解説 ---
print(" PWM幅の計算式（比例式）")
print("パルス幅 = (角度 / 180) × (max - min) + min")
print("\n【解説】")
print("・角度は 0〜180° の範囲をとる")
print("・min は角度0°のときのパルス幅（今回: 500μs）")
print("・max は角度180°のときのパルス幅（今回: 2400μs）")
print("・角度が大きくなるほどパルス幅が大きくなる（比例関係）")
print("\n【例】")
print("角度 = 90° のとき：")
print("パルス幅 = (90 / 180) × (2400 - 500) + 500")
print("         = 0.5 × 1900 + 500")
print("         = 950 + 500 = 1450μs\n")


# --- ミリ秒とマイクロ秒の換算 ---
print(" 時間単位の換算")
ms = 1
us = ms * 1000
print(f"{ms} ミリ秒 は {us} マイクロ秒")

print("\n【補足】")
print("・delay(1000) → 1000ミリ秒 = 1秒")
print("・delayMicroseconds(1450) → 1450マイクロ秒 = 0.00145秒")
print("・サーボモーターはミリ秒ではなくマイクロ秒単位のパルス幅で動作制御される\n")


# --- Servo.write(angle) 相当のPWM幅出力 ---
print(" Servo.write(angle) に対応するPWM出力")
angles = [0, 30, 60, 90, 120, 150, 180]
for a in angles:
    pwm = calculate_pulse_width(a)
    print(f"servo.write({a:3d}) → PWM: {pwm:.0f} μs")

print("\n【補足】")
print("・Servo.write(角度) は、指定した角度に応じたパルス幅を内部で自動計算する")
print("・たとえば write(0) → 500μs, write(180) → 2400μs のように対応")
print("・write(90) では中央位置（1450μs付近）を指示する")
print("・このようにマイクロ秒単位でPWM信号を与えることで、サーボの軸がその角度に回転する\n")
```

---



---

## 結果  

実行すると、以下のような出力が得られます（一部抜粋）：

```
 LED 点灯・消灯のシミュレーション
Pin 13 を HIGH（1）に → LED 点灯
1000 ミリ秒 待機
Pin 13 を LOW（0）に → LED 消灯
1000 ミリ秒 待機

 サーボモーターの角度 → パルス幅対応表
角度   0° → パルス幅 = 500.0 μs
角度  45° → パルス幅 = 837.5 μs
角度  90° → パルス幅 = 1175.0 μs
...
```


---

## おわりに  
本記事では、Pythonを活用して、ArduinoにおけるLED制御やサーボモーターのPWM信号制御をシミュレーションする方法をご紹介しました。物理的なハードウェアがなくても、プログラミングを通して動作原理を体験できるのがポイントです。今後は実機と連携する方法も取り上げていきますので、ぜひお楽しみに。
CERN ROOT Jupyter notebook がImportError: cannot import name 'NeutralColors'で使えない

# 概要
CERN ROOT Jupyter notebookで立ち上げたがCERN ROOTを使おうとすると以下のエラーが出て使えないときの対処。

```terminal
ImportError: cannot import name 'NeutralColors' from 'IPython.utils.PyColorize'
```

# 環境

```terminal
> sw_vers 
ProductName:		macOS
ProductVersion:		15.3.2
BuildVersion:		24D81

> root --version
ROOT Version: 6.34.06
Built for macosxarm64 on Mar 27 2025, 04:39:07
From tags/6-34-06@6-34-06

> python --version
Python 3.13.2
```
# 原因 & 対処

最近、**CERN ROOT**のバージョンアップに合わせて、**pyenv**で新たに最新バージョンの**Python**、**Jupyter**のインストールしたところ上記のエラーが出ました。
調べたところ**Jupyter**のバージョンは前と同じでしたが、**ipython**がメジャーバージョンアップされていて**9.0.2**になっていました。
```terminal
> pip list
 ~省略~
ipython                   9.0.2
 ~省略~
```

対処法としては**ipython**を以下のコマンドでダウングレードしました。

```terminal
> pip install 'ipython>8,<9'
 ~省略~

> pip list
 ~省略~
ipython                   8.34.0
 ~省略~
```

上記のコマンドは**ipython**がインストールされたままでもOKです。uninstallする必要はありませんでした。
MySQLデータ型とJava型の対応表

MySQLデータベースとJavaアプリケーション間でデータをやり取りする際、データ型の整合性を保つことが非常に重要です。この記事では、[こちらのリンク](https://github.com/jasync-sql/jasync-sql/wiki/MySQL-Types)からの情報を基に、MySQLのデータ型と、それに対応するJavaのデータ型を「データを受け取る場合」と「パラメータを設定する場合」に分けて整理し、それぞれの適切なマッピングを紹介します。

## サポートされているデータ型
### データをResultSetから受け取る場合:

| **MySQL type**   | **Java type**          |
|------------------|------------------------|
| date             | LocalDate              |
| datetime         | LocalDateTime          |
| new_date         | LocalDate              |
| timestamp        | LocalDateTime          |
| tinyint          | Byte                   |
| smallint         | Short                  |
| year             | Short                  |
| float            | Float                  |
| double           | Double                 |
| int24            | Int                    |
| mediumint        | Int                    |
| bigint           | Long                   |
| numeric          | BigDecimal             |
| new_decimal      | BigDecimal             |
| decimal          | BigDecimal             |
| string           | String                 |
| var_string       | String                 |
| varchar          | String                 |
| time             | java.util.Duration     |
| text             | String                 |
| JSON             | String                 |
| enum             | String                 |
| blob             | ByteArray              |

---

### PreparedStatementにパラメータを設定する場合:
| **Java type**              | **MySQL type**      |
|----------------------------|---------------------|
| Byte                       | tinyint             |
| Short                      | smallint            |
| Int                        | mediumint           |
| Float                      | float               |
| Double                     | double              |
| BigDecimal                 | decimal             |
| LocalDate                  | date                |
| DateTime                   | timestamp           |
| java.util.Duration         | time                |
| java.sql.Date              | date                |
| java.util.Date             | timestamp           |
| java.sql.Timestamp         | timestamp           |
| java.sql.Time              | time                |
| String                     | string              |
| ByteArray                  | blob                |
| java.nio.ByteBuffer        | blob                |
| io.netty.buffer.ByteBuf    | blob                |
Movable Typeで、トップページだけ意図したコードが出力されなかったら「main_index」で検索しろ

## head要素に書いたCSSやJavaScriptが、トップページだけ出力されない

長い間Movable Typeで運用されているサイトの改修案件で、数年ぶりに改修したトップページで、head要素に必要なコードが出力されないトラブルがありました。
原因を調べたところ、MTを利用してきた20年間で4回くらい遭遇したものだったので、注意喚起としてQiitaに残しておきます。

## 原因

条件分岐の際、トップページ判定の引数に `main_index` を使っていたためです。
この判定は偽で、 `main_index` は未定義扱いですが、MTの仕様上、エラーにはなりません。つまり何も出力しません。

```
<mt:If name="main_index">
<link rel="stylesheet" href="トップページだけ使うCSS.css" media="all">
<script src="トップページだけ使うJavaScript.js"></script>
</mt:If>
```

## 対策１

トップページの条件分岐に `main_index` が使用されていて、それが効いていない可能性があります。

以下のようにトップページで `is_home` などの変数を再定義して判定するか、後述の予約語の更新を行ってください。

```
<mt:If name="is_home" eq="1">
<link rel="stylesheet" href="トップページだけ使うCSS.css" media="all">
<script src="トップページだけ使うJavaScript.js"></script>
</mt:If>
```

## 解説

なぜこのようなことが起こるのか、古いサイトだけで起きるのかを解説します。

### 予約語って？

`main_index` とは、Movable Typeのシステム内の予約語のひとつです。
テンプレートの呼び出しにテンプレート名を指定したり、画面判定で `mt:IfArchiveType` などの画面別の条件タグを使う以外に、予約語で指定する方法があります。
これは公式ドキュメントにも記載されています。

[アーカイブテンプレートに設定される予約変数 \| CMSプラットフォーム Movable Type ドキュメントサイト](https://www.movabletype.jp/documentation/designer/archive-template-variable.html)

### どのような問題が？

ドキュメント内には、「メインページ（サイトのトップページ）では `main_index` が1（真）となる」という記載があるのですが、これは厳密には正しくありません。
「**古いバージョンの公式テーマの**メインページでは、デフォルトでは `main_index` が1（真）となる」が正しいです。

さらに、この公式テーマをカスタマイズして構築したサイトを長年運用していると、メインページと `main_index` の関連付けが切れてしまうことがあります。こうなると条件は満たされなくなり、冒頭のトラブルとなります。

トップページのリニューアルなどで、テンプレートを一旦削除して作り直したときに発生しやすいですが、はっきりした原因はわかりません。サーバー移転、メジャーアップデート、テーマのエクスポート、Movable Type Premium（旧Pro）から無印に戻した等が考えられます。
「古いバージョンから運用しているMovable Typeサイトだと起こる」とだけは断言できます。

### もっと詳しく

![スクリーンショット 2025-04-01 15.00.39.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21117/0233838a-6583-40a7-83cd-dc03d270e396.jpeg)

MT5だったかと思いますが、新規インストールの際「クラシックウェブサイト」か「プロフェッショナルウェブサイト」というテーマのどちらかを使用することになります。

これらのテーマで、トップページを出力するテンプレート「メインページ」を見てみると、テンプレートの種類が `main_index` になっていることがわかります。

![スクリーンショット 2025-04-01 14.57.19.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21117/05e4afaa-1647-4226-a83d-eb2ef9d908e8.jpeg)

テンプレートの種類＝識別子は、テーマ制作者がMovable Typeのテーマ定義用ファイルで任意指定でき、テーマをインストールしたときに自動で割り当てられますが、この識別子が空欄＝カスタムインデックステンプレートに変わってしまうことがあるのです。

さらに悪いことに、MT5の公式テーマでは条件分岐のトリガーで `main_index` を多用しています。なのでこの頃にMTを使い始め、公式をカスタマイズして作られたサイトで発生しやすいのです。

## 対策２

![スクリーンショット 2025-04-01 14.51.11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21117/f755b844-f79b-416d-9b45-ea4319444f7a.jpeg)

Movable Type8では確認していませんが、Movable Type6、7のプレミアム（旧Pro）は識別子をテンプレート画面から編集できます。

また、プラグイン「MTAppjQuery」を使用している場合は「テンプレート識別子」の項目を擬似的に無印にも表示することができます。2018年の記事なので現在でも再現可能かは不明ですが…

[MTAppjQuery でテンプレート識別子を設定可能にするには \| プラグイン \| Hei Blog](https://hei-a.net/blog/movable_type/plugin/template-identifier.html)

## まとめ

回避するのは難しいですが、トラブルが起きたときの原因の切り分けについては表題のとおりです。トップページだけコードが出力されないトラブルがあったときは、まず、サイト内のテンプレートを `main_index` で検索してみてください。
PCの設定をPowershell上から取得しログに出力する　Part1

PCなりSVなりキッティングする際、設定などをログとして収集することがある
その場合のやり方を記述

よくあるものを列挙
追加あれば記事を増やして更新予定

# PC名
hostname >C:\work\Log\log.txt
# IPアドレス
ipconfig /all >>C:\worlk\Log\log.txt
# Firewallの設定
Get-NetFirewallProfile >>C:\work\Log\log.txt
# WindowsのOS情報取得
(Get-WmiObject Win32_OperatingSystem).Caption >>C:\work\Log\log.txt
# BitLockerの有効確認
Get-BitLockerVolume -MountPoint "C" >>C:\work\Log\log.txt
# インストールされている更新プログラム取得
Get-Hotfix >>C:\work\Log\log.txt
# Hosts情報取得
Type c:\windows\system32\drivers\etc\hosts >>C:\work\Log\log.txt
# インストールされているアプリケーション取得
Get-WmiObject Win32_Product | select-Object Name,Vendor,Version,Caption >>C:\work\Log\log.txt
Dify、教育支援版をリリース！

## AI をキャンパスに。手頃な価格で、世界へ

本日、「Dify for Education（教育支援版）」をリリースし、教職員、学生および教育機関の皆様に完全なLLM技術スタックを特別価格（通常の50%割引）で提供いたします。

AI技術と教育が目指すものは、「情報格差の解消」という点で共通しています。Difyはこの理念を共有しており、AIは一部の技術企業の特権ではなく、あらゆる知的好奇心を持つ方々のためのツールであるべきだと考えています。「Dify 教育支援版」は教育の未来をAIで形作り、学生と教育者が生成AIの可能性を自由に探求できる環境を提供します。

![education_poster.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924419/9a9fa78f-76b0-4c98-89b3-e4937ba1f831.jpeg)

## 未来を見据えた学びの実現に向けて

Difyは生成AIのライフサイクル全体をサポートするLLM技術スタックを提供します。

学生はローコード開発と豊富なLLMモデルを活用し、専門知識がなくてもドラッグ＆ドロップ機能や自然言語プロンプトでAIアプリを簡単に構築可能です。教育者は複雑なワークフローを視覚化し、直感的な教材デザインを通じてAIの核心概念を効果的に指導できます。

Difyマーケットプレイスの多様なプラグインを活用すれば、論文調査支援ツールや課題分析システム、Q&Aチャットボットなど、教育現場を強化するAIエージェントを容易に構築可能です。

> Difyが提供する包括的ツールセットは、学内でのAI活用を促進するだけでなく、卒業後も継続的にAIを探求する力を養います。
> ― ハリー・ワン（Harry Wang）
>   デラウェア大学経営情報システム学部教授

## キャンパス変革の第一歩を

[Dify教育支援版](https://dify.ai/jp/education)で認証を取得し、50%割引を適用して生成AIの世界へ飛び込みましょう。

Dify教育支援版は、最先端AI技術を教育現場へ届けるという私たちの取り組みの第一歩です。未来のAIイノベーションを担う皆様との協働を心待ちにしています。

ともに次世代の学びを創造しましょう！
削除処理　自分用メモ

以下のような `DELETE` 文を記述すれば、指定した条件を満たす SQL になります。  

### **DELETE 文**
```sql
DELETE FROM USER
WHERE REG_TIME < SYSDATE - #{deleteDays}
AND UPD_TIME < SYSDATE - #{deleteDays}
```

### **解説**
1. `SYSDATE - #{deleteDays}`  
   - `SYSDATE` は Oracle で現在日時を取得する関数。  
   - `SYSDATE - N` で `N` 日前の日時を取得できる。  
   - `#{deleteDays}` は MyBatis のプレースホルダーで、Java から `int` 型の変数を渡せる。  
   
2. `REG_TIME < SYSDATE - #{deleteDays} AND UPD_TIME < SYSDATE - #{deleteDays}`  
   - `REG_TIME` と `UPD_TIME` の両方が `deleteDays` 日より前なら削除対象。  

### **MyBatis の Mapper 記述例**
```xml
<delete id="deleteOldUsers">
    DELETE FROM USER
    WHERE REG_TIME < SYSDATE - #{deleteDays}
    AND UPD_TIME < SYSDATE - #{deleteDays}
</delete>
```

### **Java の呼び出し例**
```java
int deleteDays = 30; // 30日以上前のデータを削除
userMapper.deleteOldUsers(deleteDays);
```

この SQL で、`REG_TIME` と `UPD_TIME` の両方が `deleteDays` 日以上前のレコードのみ削除できます。
ESLint使ってるけど意外に知らない、「no-restricted-syntax」が地味に便利だった話

ESLintは使ってるけど、「なんかESLint通ってる割に、このコード気持ち悪いな……」ってことありません？特に最近、AIが生成したコードでありがちなやつ。letが無駄に多かったり、ちょっと危なっかしい書き方をしたり。

そんな地味〜な悩みを抱えながら、夜な夜なコードレビューでモヤモヤしていた私が見つけたのが「no-restricted-syntax」。これ、意外に知らない人多いけど、実は超便利なESLintルールかも。

## そもそも「no-restricted-syntax」ってなに？

一言で言えば「自分の好きなように、コードの書き方を禁止できる」という超柔軟なルールです。普通のESLintルールにない、自分だけの細かいこだわりを守らせたいときに最適。既存のESLintのルールでうまく防げない、ちょっとした「クセ」をコードから排除できます。

「ESLintは使ってるけど、このルール知らなかったわ〜」って人、実は結構多いんじゃないでしょうか。

## ESLint導入済みのあなたにぴったりのカスタム設定例

### ① JSX内のインラインスタイルって微妙ですよね？

```js
{
  selector: 'JSXAttribute[name.name="style"]',
  message: 'インラインスタイルは禁止！CSSクラス使おう！'
}
```

### ② dangerouslySetInnerHTMLって名前の時点でやばい

```js
{
  selector: 'JSXAttribute[name.name="dangerouslySetInnerHTML"]',
  message: '危険すぎるので禁止！HTMLのサニタイズは慎重に！'
}
```

### ③ 三項演算子をネストすると脳が拒否る件

```js
{
  selector: 'ConditionalExpression > ConditionalExpression',
  message: '三項演算子のネストは読みにくいので禁止！シンプルにif文で書きましょう。'
}
```

### ④ catchが空だと絶対事故る

```js
{
  selector: 'CatchClause[body.body.length=0]',
  message: '空のcatchって事故る未来しか見えないんだよなぁ……ちゃんと書こう！'
}
```

### ⑤ propsやstateをうっかり再代入してしまう事故防止

```js
{
  selector: 'AssignmentExpression[left.type="Identifier"][left.name=/^(props|state)$/]',
  message: 'propsやstateの直接再代入は禁止！Reactが悲しみます。'
}
```

### ⑥ parseIntは基数指定が常識

```js
{
  selector: 'CallExpression[callee.name="parseInt"][arguments.length<2]',
  message: 'parseIntは基数必須！これ常識ね！'
}
```

### ⑦ moment.jsはもう過去の遺物

```js
{
  selector: 'CallExpression[callee.object.name="moment"]',
  message: 'moment.jsは令和の時代に使うもんじゃない！dayjsにしよう！'
}
```

## 導入方法（超簡単！）

いつものESLint設定ファイル（.eslintrc.jsなど）にサクッと追加するだけ。

```js
module.exports = {
  rules: {
    'no-restricted-syntax': ['error',
      {
        selector: 'JSXAttribute[name.name="style"]',
        message: 'インラインスタイルは禁止！CSSクラス使おう！'
      },
      // 他のルールも好きに追加してね
    ]
  }
};
```

## 結論：小さな不満は「no-restricted-syntax」で一掃しよう

ESLintを使っていてもちょっとしたモヤモヤが残るあなた。これを機に「no-restricted-syntax」を導入してみてはどうでしょう？地味ですが効果絶大。「こんな便利なもの知らなかった……！」とちょっと得した気分になれるはずです。

## あとがき　（ここから人間パートｗ）
最近はずっとBiomeを使っていたんですけど、ルールを厳しくしたくてESLintに出戻り。
no-restricted-syntaxを入れてみたので、AIに書かせてみました。

実際に使っているのはlet禁止だけなんですけど、特定のライブラリを禁止するとかは良さそう..！
普通にESLintのルールで設定できるものも多いんですが、選択肢を知っておくと幅が広がりますね。

個人的には三項演算子のネストは大歓迎です。
formatter使えば読みやすいだろ！！（宗教）

## 宣伝
Toolpodsというたくさんの便利ツールが無料で使えるサービスを開発しています。
フリーランスや副業してる人とかは請求書とか使ってくれると嬉しいです。
https://toolpods.io/invoice

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3982301/a91b2a49-821e-4c72-b2cc-730bebfef384.png"/ width="200">
L2TP/IPsec VPNでERR_CONNECTION_RESETエラーを解決する方法

***問題***
IPv6ネットワークを使用し、L2TP/IPsec VPNで社内サーバーに接続してWebプロジェクトを閲覧中、APIが遅くなり、ERR_CONNECTION_RESETエラーが発生する問題がありました。

***原因***
L2TP/IPsec VPNのMTU（最大伝送単位）設定が原因で、大きなデータパケットが正しく送信されず、接続がリセットされることがあります。特に、IPv6ネットワークではIPv4よりも大きなヘッダが使用され、MTUサイズが適切でないとパケットが断片化され、ネットワーク経路で破棄される可能性があります。

***解決策***

MTUサイズを小さくする
デフォルトのMTUサイズ（1500）は大きすぎるため、VPNの封装を考慮して1300または1400に設定すると問題が解決しました。

設定方法（Windows）
管理者権限でPowerShellを開き、次のコマンドを実行します：

```powershell
netsh interface ipv4 set subinterface "VPN接続" mtu=1420 store=persistent
Supabase × Next.js App Router：API RoutesとServer Actionsをどう使い分ける？ベストプラクティスを実例付きで解説！

※ChatGPTとAPi routesとServer actionsについての使い分けをするために会話した内容をまとめたものです。

# 🧭 Supabase × Next.js App Router：API RoutesとServer Actionsの使い分けガイド

Next.js（App Router）では `Server Actions` という便利な機能が登場しました。  
しかし、「Supabaseと一緒に使うとき、`API Routes` と `Server Actions` をどう使い分ければいいの？」と迷う方も多いはず。

この記事では、**実際にSupabaseを使った具体例**を通じて、両者の違いと使い分け方をわかりやすく解説します！

---

## ✅ 一言でまとめると？

> **フォームやUIから直接処理したい → Server Actions**  
> **fetchや外部サービス（Webhook）から呼ばれる処理 → API Routes**

---

## 📌 API Routes と Server Actions の違いまとめ

| 用途・状況 | Server Actions | API Routes |
|------------|----------------|------------|
| UIのフォーム送信 | ✅ | ❌ |
| クライアントJSからfetchしたい | ❌ | ✅ |
| 外部サービス（Webhook）からPOSTされる | ❌ | ✅ |
| Supabase SDKを使った内部処理 | ✅ | ✅（fetch経由の場合） |

---

## 🧪 例①：ユーザー登録（Server Actions）

```ts
// src/actions/auth/signUp.ts
"use server";

import { createClient } from "@/utils/supabase/server";

export async function signUpAction(formData: FormData) {
  const email = formData.get("email")?.toString();
  const password = formData.get("password")?.toString();

  const supabase = createClient();
  const { error } = await supabase.auth.signUp({ email, password });

  if (error) {
    throw new Error(error.message);
  }
}
```
```tsx
// app/signup/page.tsx
<form action={signUpAction}>
  <input type="email" name="email" />
  <input type="password" name="password" />
  <button type="submit">Sign Up</button>
</form>
```

✅ フォームから呼び出す処理なので、Server Actions が最適！
---

## 🧪 例②：Stripe Webhook（API Routes）

```ts:title=app/api/webhooks/stripe/route.ts
import { headers } from "next/headers";
import Stripe from "stripe";

const stripe = new Stripe(process.env.STRIPE_SECRET_KEY!, {
  apiVersion: "2023-08-16",
});

export async function POST(req: Request) {
  const body = await req.text(); // Stripeはraw bodyが必要
  const sig = headers().get("stripe-signature")!;

  try {
    const event = stripe.webhooks.constructEvent(
      body,
      sig,
      process.env.STRIPE_WEBHOOK_SECRET!
    );

    if (event.type === "checkout.session.completed") {
      const session = event.data.object;
      console.log("支払い完了:", session);
      // ここでDB更新などの処理を書く
    }

    return new Response("OK", { status: 200 });
  } catch (err) {
    console.error("Webhook Error:", err);
    return new Response("Webhook Error", { status: 400 });
  }
}
```
✅ Webhookのように、外部からPOSTされる処理は必ずAPI Routes！
---

## 🎯 Server Actions と API Routes の使い分けルールまとめ
1. ユーザーがフォームやボタンを操作する処理 → ✅ Server Actions
1. クライアントJSから fetch で叩きたい処理 → ✅ API Routes
1. 外部サービス（Stripeなど）から呼び出される処理 → ✅ API Routes
1. Supabase を使った内部のDB処理 → ✅ Server Actions でOK（UI連携時)


## ✅ おわりに

Next.js App Router × Supabase の開発では、  
`Server Actions` と `API Routes` を正しく使い分けることで、**パフォーマンス・保守性・セキュリティ**を高いレベルで両立できます。

- UIからの操作やフォーム送信 → **Server Actions**
- 外部サービスからのWebhook、fetchを使った通信 → **API Routes**

このルールを意識するだけで、コードはスッキリ、開発もスムーズになります。

この記事が、あなたのNext.js + Supabase開発の手助けになれば嬉しいです 🙌
AWSの技術をマスターしよう！🎓 クラウドインフラの基礎から実践まで🔧

こんにちは、韓国在住のsanaです！

AWSに関心がある方必見💡
これから学ぶべき、AWSのネットワーク構築やZero Trust、ECS＆Dockerの基本と実践を1つの講座で学べるチャンスです🚀

こんな方にオススメ🎯
AWSのネットワーク構築方法を学びたい方🌐
セキュリティ強化を考えている方🔐
ECS＆Dockerを使いこなしたい方🐳
AWSを実践的に学びたい方💻




講座内容✨
1️⃣ AWSクラウドネットワーク構築
AWSクラウドの主要なネットワークサービスの使用法と、ネットワークを構築する際のプロセス・方法を学べる＋サービス間の関係や動作原理も理解できます🌐🔧

https://u.inf.run/42dMqOu



2️⃣ AWS Zero TrustとIAMの基盤
Zero Trustセキュリティモデルの基盤となるIAMについて、基本から詳細まで学び、セキュリティの強化方法を理解！🔒💡

https://u.inf.run/4i2LW3V

3️⃣ シンプルなAWS ECS＆Dockerチュートリアルではない！
従来のVM展開の課題を実際に体験し、ECS＆Dockerの正しい活用方法を学べる！🐳🔍

https://u.inf.run/3E479fO



AWSを使いこなせるように一緒に頑張りましょう！　ファイティン～
Windows PowerShell をCUIで簡単にアップデートする方法

この記事ではWindows PowerShell を最新版（PowerShell 7）に、CUI（コマンド）だけでアップデートする方法を紹介します

`Windows PowerShell` を開くたびに「新しいクロスプラットフォームの PowerShell をお試しください」と出るけど、
どうやって更新するの？と思ったのでまとめてみました

```powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6
```
どうやら最新版ではないらしい
新しい``PowerShell``がリリースされているようなので、以下のコマンドで最新版をインストールする

### 手順（Windows の PowerShell で実行）

#### 1. 管理者権限で PowerShell を起動  
すでに起動済みの場合もありますが、インストール時に必要になるので念のため

#### 2. 最新の PowerShell（PowerShell 7）をインストールするコマンド：

```powershell
winget install --id Microsoft.Powershell --source winget
```
→
```powershell
PS C:\Users\hogehoge> winget install --id Microsoft.Powershell --source winget
見つかりました PowerShell [Microsoft.PowerShell] バージョン 7.5.0.0
このアプリケーションは所有者からライセンス供与されます。
Microsoft はサードパーティのパッケージに対して責任を負わず、ライセンスも付与しません。
ダウンロード中 https://github.com/PowerShell/PowerShell/releases/download/v7.5.0/PowerShell-7.5.0-win-x64.msi
  ██████████████████████████████   107 MB /  107 MB
インストーラーハッシュが正常に検証されました
パッケージのインストールを開始しています...
インストールが完了しました
```


※ `winget` は Windows 10（最新版）または Windows 11 で利用できます

---

### インストール後の確認

インストール後、新しい PowerShell（`pwsh`）は以下のように起動できます：

```powershell
pwsh
```

起動後、バージョンを確認

```powershell
$PSVersionTable.PSVersion
```
→
```powershell
PS C:\Users\hogehoge> $PSVersionTable.PSVersion

Major  Minor  Patch  PreReleaseLabel BuildLabel
-----  -----  -----  --------------- ----------
7      5      0
```
7.5.0がインストールされていることを確認した

---

### 備考

- 既存の Windows PowerShell（バージョン 5.1）はシステムに残り、新しい `PowerShell 7` とは共存可能です
- `pwsh` で起動するのが新しいバージョンです
- 必要に応じて既定のプロファイル(デフォルトのシェル)を変更してください

---
使わなくなった自作ツール、どうしてますか？再活用の実態を調査中【3分アンケート】

こんにちは。個人でも仕事でも、いくつかのツールや小さなサービスを開発してきました。

でも実は…その中で“継続して使われているもの”って、すごく少ないんです。

- リリースしたけど誰にも使われなかった  
- クライアントに納品したけど放置されている  
- 社内用に作ったツールが部署変更で使われなくなった  
- 自分でも忘れてたCLIツールがローカルに眠ってた…

こんな経験、ありませんか？

---

### 🌐「未使用のソフト／ツール」のその後、どうしてますか？

このテーマについて、エンジニアや開発者の皆さんのリアルな声を集めたいと思い、アンケートを実施しています。

📋 **アンケート（3分・匿名・選択式）**  
👉 [https://forms.gle/NWcH8Y1PSPrtm2fTA](https://forms.gle/NWcH8Y1PSPrtm2fTA)

---

### 🔍 何を調べているのか？

- 使われなくなったソフト／ツールの扱い（保存・破棄・放置…）  
- 他者に譲渡／提供したことがあるか  
- 再活用・売却などへの関心  
- 法的や技術的な懸念点  

調査結果はまとめてQiita記事やレポートとして公開予定です（集まったら「中間発表」もやります！）

---

### 💬 コメントでの体験共有も歓迎！

「こんなツールあったけどボツにした」  
「GitHubに上げてたけど誰も見てないw」  
みたいな話もぜひ聞きたいです。

---

アンケートも記事も、**“眠ってるソフト資産を無駄にしないため”**の第一歩になればと思っています。  
どうぞよろしくお願いします🙏

---

#未使用ソフト #プロダクト失敗談 #個人開発 #システム再利用 #エンジニア実態調査
UiPathからSalesforce日付項目を更新するとJSON_PARSER_ERRORが起きる

# 問題

UiPathからSalesforceを操作するパッケージは4種類あります。


| パッケージ名 | 種類 | 備考 |
|:-:|:-:|:-:|
| Salesforce | 単独 | クラシックアクティビティ |
| UiPath.Salesforce.Activities | 単独 | Sales Cloud用 |
| SalesforceMarketingCloud | 単独 | Marketing Cloud用 |
| Integration Service | 統合 | 利用可能 > Salesforceから使用 |

Salesforceの日付型は`Date`、日時型は`DateTime`ですが、UiPath上ではどちらも`DateTimeOffset`として扱われますが、

![up_sf1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3075648/dae827a5-7c44-4296-b727-ba031a03345e.png)

このうち **【UiPath.Salesforce.Activities】のレコードを更新アクティビティを使用して日付型項目に`DateTimeOffset`で更新**をするとエラーが発生します。

```
Provider Error Message: 無効な要求 - この問題は、要求パラメーターが見つからない場合に頻繁に起こります。
RequestId: XXXXXXXXXXXXXXXXXXXXXXXX
ProviderMessage: [{"message":"VALUE_STRING 値 2025-04-01T00:00:00.0000000+09:00 から date のインスタンスを並列化できないか、要求に必須項目がない可能性があります at [line:2, column:3]","errorCode":"JSON_PARSER_ERROR"}]
```

:::note info
現行の統合Integration Serviceでは発生しないため、特に理由がなければIntegration Serviceパッケージを使うのがいいと思います。
:::

# 原因

Salesforce側の日付形式と.NET側の日付形式に差異があるため、型不一致でエラーとなります。
ミリ秒の桁数がSalesforceは3桁、.NETは7桁。

## Salesforce側（受信側）

Salesforceでは日付型は`Date`なので、`yyyy-MM-dd`のフォーマットである必要があります。
が、UiPath → Salesforce間はREST APIで行われるため、実際には`DateTime`の`yyyy-MM-ddTHH:mm:ss.SSS+/-HH:mm`で渡す必要があります:bulb:

例：`2025-04-01TT00:00:00.000+09:00`

[REST API 開発者ガイド - Date および DateTime の有効な書式](https://developer.salesforce.com/docs/atlas.ja-jp.api_rest.meta/api_rest/intro_valid_date_formats.htm)
[SalesforceREST API のパラメータに指定する日付フォーマットについて](https://help.salesforce.com/s/articleView?id=000382609&type=1)

## .NET側（送信側）

UiPathではSalesforceの日付型、日時型はどちらも`DateTimeOffset`として扱われます。
なので、`DateTimeOffset.Now`などを実行すると`yyyy-MM-ddTHH:mm.ss:fffffffK`のフォーマットで生成されます。

例：`2025-04-01T12:10:20.1234567+09:00`

[Microsoft Learn - カスタム日時形式文字列](https://learn.microsoft.com/ja-jp/dotnet/standard/base-types/custom-date-and-time-format-strings)

# 解決方法

ミリ秒の桁数の差が問題であるものの、Salesforce側でミリ秒定義は省略可能なため、
`DateTimeOffset`をミリ秒なしフォーマットで文字列変換し、文字列から`DateTimeOffset`を作成すればOK。
Salesforce側にデータが渡された際、日付型であれば時間部分が無視され、日時型であればそのまま入ります。

```vb
DateTimeOffset.Parse(DateTimeOffset.Now.ToString("yyyy-MM-ddTHH:mm:ssK"))
```

## ダメな例

Salesforce側のミリ秒が3桁なので、以下のようにミリ秒3桁のDateTimeOffsetを作ればOK！
……とはならず、3桁目が0のタイミングで作成するとエラーになります。

```vb
DateTimeOffset.Parse(DateTimeOffset.Now.ToString("yyyy-MM-ddTHH:mm:ss.fffK"))
```

例として`2025-04-01T12:10:20.1234567+09:00`のタイミングで生成を行うと、ミリ秒に0埋めが発生し`040`となるはずですが、これをParseする際に後続の0が飛んでしまうためミリ秒が`04`の2桁となってしまい、Salesforce側の3桁と合わない→エラーになる。