OmniAICreator/Qiita-1.07M huggingface dataset:
初学者向け Go メソッドレシーバーの使い方と種類について

# あいさつ
こんにちは, T.Miura(24)です.25(専門)卒です．
最近東京に引っ越しました．
少しだけ忙しくなり，コードを書いたり本を読んだ理が少しおろそかになっていました．
気合いでなんとか持ち直した今日この頃です．

明日から新社会人になる皆様．
一緒に頑張っていきましょう．

# はじめに
以前作成したRESTfullAPIでメソッドレシーバーの使い方がわからず断念しておりました．

関数型のようにしていたコードをリファクタリングし，メソッドレシーバーについて少し理解したので記事にします．

この記事ではメソッドレシーバーについて簡単にまとめています．

簡単なコードも記載しています．

# 開発環境
> Go 1.24.0
# メソッドレシーバーとは
OOPでいうメソッドに相当する機能です．そのままですね．

構造体 || struct に基づく機能や振る舞いを管理することができます．

```go
fmt.Println("Hello world!")
```

の .Println("Hello world!!") の部分です.

. の後に関数名を記述するのが特徴です．


メソッドレシーバーは可読性と保守性向上に一役買ってくれる子達です．

しかもGoはシンプルに書けることを目的としているので書き方もシンプルです．


# メソッドレシーバーの種類について
## その前に
具体的な説明の前にまずはstructを定義します

```go
type Todos struct {
	Id     int
	Title  string
	IsDone bool
}
```

```go
func (t Todos) Function() string 
```

は

```go
(変数名 構造体) メソッド名() 型
```

です

## 値レシーバー
  値レシーバーは元の値を変更しません．
  例では，Todoの表示に使用します．

  ```go
  func (t Todos) DisplayTodo() string {
    return fmt.Sprintf("ID:%v \n Title:%v\n IsDone:%v\n",t.Id, t.Title, t.IsDone)
  }
  ```
とすることで簡単に全てのカラムを表示することができます．

## ポインタレシーバー
  ポインタレシーバーは元の値を変更できます．
  例ではTodoが完了未完了を管理するbool値を反転に使用します
  ```go
  func (t *Todos) EndTodo(){
    t.IsDone = !t.IsDone
  }
  ```
# コードの全体像
```go
package main

import (
	"fmt"
)

type Todos struct {
	Id     int
	Title  string
	IsDone bool
}

// 値レシーバー
func (t Todos) DisplayTodo() string {
	return fmt.Sprintf("ID:%v\nTitle:%v\nIsDone:%v\n", t.Id, t.Title, t.IsDone)
}

// ポインタレシーバー
func (t *Todos) EndTodo() {
	t.IsDone = !t.IsDone
}

func main() {
	todo := Todos{
		Id:     1,
		Title:  "Goのコードを書く",
		IsDone: false,
	}

	fmt.Println(todo.DisplayTodo())
    //Todo完了 IsDoneの反転
	todo.EndTodo()

	fmt.Println(todo.DisplayTodo())
}
```

```bash
Id:1
Title:Goのコードを書く
IsDone:false

Id:1
Title:Goのコードを書く
IsDone:true
```

しっかりとTodoが表示され，IsDoneが更新されましたね！

今回は簡単なコードでポインタレシーバーを使用して更新するメリットはあまり感じられません．
しかし，ロジックが大きくなれば可読性も上がりますし，カプセル化の役割も果たします．
# まとめ
メソッドレシーバーについてかなり浅い部分の記事でしたが,ここまで読んでいただきありがとうございます．
【UiPath】UiPathで「Shift-Jis」が使えない場合の対処法

UiPathのバージョンによって、「Shift-Jis」のエンコードが使おうとすると「'Shift-Jis' is not a supporterd encoding name.…」とエラーが出てしまう場合がある。
その場合、以下の設定を行った「メソッドを呼び出し」アクティビティを事前に配置しておくと解消でき。

## 設定方法
### アクティビティの配置
アクティビティ一覧から「メソッドを呼び出し（InvokeMethod）」アクティビティを探し、ワークフローに配置する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/6e7b8e9f-e17c-4d74-ac33-e7c0d88a22ab.png)

### TargetTypeの設定
「メソッドを呼び出し」について、まずはTargetTypeを設定する。
プルダウンをクリックして型の選択画面を開き、「System.Text.Encording」を検索して選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/61f979c6-3f36-46d5-b7c1-2744a9a2580b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/4ac3a94b-2f73-464f-81c2-dbfb8bae18cf.png)

検索一発で出てこない場合は、まず「System.Text」で検索し、表示された「System.Private.CoreLib」→「System.Text」を展開していき、出てきた「Encoder」を選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/084e091b-76d0-48a0-b229-bcf2df369882.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/258e40c6-ebb7-46aa-a26d-31cca811aecd.png)

### パラメーターの設定
次にパラメーターを設定する。
アクティビティのプロパティ欄のパラメーター（コレクション）をクリックし、パラメーター欄を開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/79274aac-9e53-48a4-b88f-fc3c26588a62.png)

パラメーターの型を設定するため、Type欄のプルダウンを選択し、「Browse for Types…」をクリックして型の選択画面を開く。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/2a847f9f-2390-4bc2-b570-b83f066c34dd.png)


今度はEncodingProviderを検索して選択する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/67bb9297-5055-4f3b-94ee-14d3727ee795.png)

型の選択後、Value欄に「System.Text.CodePagesEncodingProvider.Instance」を入力する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/9a0b2f76-819f-4294-a706-c68f92e7c3a9.png)

### メソッド名の設定
最後に、MethodName欄に「RegisterProvider」と入力すれば完了。
後はこのアクティビティより後ろで「Shift-Jis」が使えるようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/604b15a7-e76d-41a8-9106-2f974a5fcf20.png)

### 補足
この設定を行った「メソッドを呼び出し」アクティビティを別のプロジェクトのワークフローにコピーすると、パラメーターのValue欄にエラーが表示されることがある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/477e6978-d0dc-4d19-b737-0b1baf92ace3.png)

この場合はTypeを開いてEncodingProviderを選択し直すことで解消される。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/578020/ebeb5152-a616-456e-9e6d-af9ec25a17dd.png)

## 参考
https://forum.uipath.com/t/shift-jis/407928

https://ray88.hatenablog.com/entry/2024/01/23/220057

## 動作環境
UiPath Studio 2023.10.4
📅 日本のWeb企業によるエイプリルフール文化の歴史（1990年代～現在）

日本の企業がWebサイトやSNSを使ってエイプリルフールに「ジョーク投稿」を行う文化がいつから始まったのかをChatGPT4.5を使って調査して文書化しました。（楽ちん）

webで調べた結果と概ね矛盾ない認識です。

日本の企業がWebサイトやSNSを使ってエイプリルフールに「ジョーク投稿」を行う文化は、1990年代後半に始まり、2000年代を通じて定着しました。以下にその流れと代表的な事例をまとめます。

📌 時系列と主な出来事
🌱 黎明期（1997年）
Impress Watch（インプレスウォッチ）が1997年4月1日に日本のWebメディアとして初めて本格的なエイプリルフール企画をWeb上で展開。

当時はまだインターネット人口が少なかったため、ジョーク投稿自体が非常に珍しく、テキスト主体のネタページが新鮮な驚きをもって迎えられた。


🎮 企業参入期（1998～2001年）
ゲームメーカーのアイレムが1998年にエイプリルフール企画をスタート。架空の新作ゲームなど、凝った内容が話題を呼ぶ。特に2001年の『どきどきすいこでん』は、架空のゲームにもかかわらず108人のヒロイン設定や高額な価格設定を盛り込み、ネットで大きな話題となった。

2001年、個人ニュースサイトの『ちゆ12歳』など、個人運営サイトでも架空のニュースを使ったジョーク企画を実施。個人サイトにもエイプリルフールの流れが広がり、文化の裾野が広がるきっかけとなった。

🚀 Web企業の定番化（2004年頃）
2004年にはYahoo! JAPAN、楽天Infoseek、ライブドア、@niftyなど日本を代表する大手ポータルサイトが本格的にエイプリルフール企画を実施。

Yahoo! JAPANは、赤ちゃん向けサイト「Yahoo!ばぶばぶ」と称したジョークページを作成。ライブドアはこの日だけ2ちゃんねる風のサイトデザインを採用するなど、各社が独自の遊び心を発揮して話題を呼んだ。

これを契機にエイプリルフール企画がメディアでも特集され、Web企業における恒例イベントとして定着し始める。

🎬 他業種への拡大（2005年～）
2005年にウルトラマンシリーズで知られる円谷プロダクションが初のエイプリルフール企画として「バルタン星人が公式サイトをジャック」というストーリー性ある凝った企画を実施。

IT業界以外の企業・エンターテインメント業界も続々参入し、各業種にエイプリルフール企画が波及していくきっかけとなった。

📹 企画の大規模化・技術競争（2000年代後半）
この時期から企業間で動画、Flashアニメーション、精巧な合成画像などを使った大規模で手の込んだジョーク企画の競争が激化。単なるテキストや画像のみのネタから、技術力や創造性を誇示する方向へ進化していく。

Google日本法人が毎年展開する壮大かつ完成度の高い企画が特に注目を集め、企業が本気で遊び心を見せる日として定着。

🌊 一時的な自粛とその後（2011年～2012年）
2011年は東日本大震災直後のため、多くの企業がエイプリルフール企画を自粛。嘘企画を中止し、代わりに震災支援情報を発信するなど異例の対応を行った。

しかし翌2012年から再び各企業が創作ネタを公開し、このイベントが日本のWeb文化として再び盛り上がりを見せた。

📱 SNS時代の定着（2010年代以降）
2010年代からTwitter・Facebookなどのソーシャルメディアが普及し、各社のエイプリルフールネタがリアルタイムで拡散されるようになる。

毎年GIGAZINEやねとらぼなどのネット系メディアが『エイプリルフールネタまとめ』をリアルタイム掲載し、エイプリルフールがネットユーザー参加型の一大イベントとして完全に定着する。

📚 企業によるエイプリルフール企画が広まった背景
インターネット利用人口が急増し、企業がWebを使った話題づくりを積極的にマーケティングに取り入れたこと。

ネットユーザーが企業のユーモアや創作を楽しむ文化が醸成されたこと。

メディアも恒例のイベントとして取り上げ、「一年に一度のお祭り」として積極的に報道したことが定着を後押しした。

📑 簡易年表（まとめ）
1997年：Impress Watchが日本初の本格的Webエイプリルフール企画

1998年：アイレムがエイプリルフール企画を開始（ゲーム業界の本格参入）

2001年：個人サイト『ちゆ12歳』が「ちゆニュース」を開始（個人への広がり）

2004年：Yahoo!、楽天、ライブドアなど大手ポータルが参加、定番イベント化

2005年：円谷プロがIT業界外で本格的に参入し他業種にも拡大

2011年：東日本大震災で各社が自粛（例外的出来事）

2010年代～現在：SNS普及でリアルタイム拡散・定番化、ユーザー参加型のネット文化に成長

現在では企業がWeb上で創造力と遊び心を競い合う、日本のインターネット文化の一大イベントとして、毎年4月1日が注目されるようになっています。
モバイルアプリのリリース準備に必要な作業一覧 Android編

Flutterでモバイルアプリを開発後、Androidアプリをリリースする際に必要となる作業について整理したのでそのメモ。

### ストア素材

以下を素材ベースにストア掲載資材を作成する。

[【ストア申請】ストアに掲載する素材](https://brandedapp-faq.stores.jp/hc/ja/articles/21540356421401--%E3%82%B9%E3%83%88%E3%82%A2%E7%94%B3%E8%AB%8B-%E3%82%B9%E3%83%88%E3%82%A2%E3%81%AB%E6%8E%B2%E8%BC%89%E3%81%99%E3%82%8B%E7%B4%A0%E6%9D%90)

### サポートURL

Googleフォームを利用するのが楽。

[新作リリースでApp Store審査リジェクト3件にハマッた話｜ギガビット＠ゲームつくるひと](https://note.com/gigabit_million/n/ne8d02b110b3c)

### デベロッパーURL

AdMob用にapp-ads.txtを配置したウェブサイトを用意する必要がある。

以下のような構成で、Firebase Hostingでホスト。ルートのリダイレクト先を↑で設定したGoogleフォームのURLにすることで、index.htmlへのアクセスを防げる。

[Firebase Hostingを使って、app-ads.txtを無料で公開する](https://zenn.dev/k9i/articles/8b91ee1e7dcc53)

### プライバシーポリシー

Notionでページを作成してホストする。

- テンプレ

[プライバシーポリシーのひな型 | Webサイトの利用規約（無料ひな型（雛形・テンプレート）・商用利用可）](https://kiyaku.jp/hinagata/privacy.html)

- アプリ内組み込み

[【Flutter】個人開発で利用規約・プライバシーポリシーを作成する](https://zenn.dev/ryoya_fukasawa/articles/be19cc06d6b925)

### keystore作成

[【Flutter】Androidアプリリリース手順（ビルド方法） - Qiita](https://qiita.com/Linda_man/items/3bb7a8b2bbdf7d8f2b33)

### リリースビルド

Firebase App Distributionで配布する場合、以下のコマンドでapkファイルを作成する。末尾の環境変数は必要に応じて設定する。
生成されたファイルは /build/app/outpts/apk/release/配下にある。

```bash
flutter build apk --dart-define-from-file=dart_defines/dev.env
```

Google Play Consoleで商用アプリをリリースする場合、以下のコマンドでバンドルを作成する。
生成されたファイルは /build/app/outpts/bundle/release/配下にある。

```bash
flutter bundle appbundle --dart-define-from-file=dart_defines/dev.env
```

## iOS

### リリース対応

TestFlightでテストする際は以下に則って対応する

[【iOS】 TestFlightにアプリをリリースするやり方 Flutter](https://zenn.dev/lisras/articles/14b90852fe5525)

商用リリース時は以下に則って対応を進める。

[（2024年版）iPhoneアプリをApp Storeで公開する手順まとめ](https://zenn.dev/moutend/articles/59bddeac3ff3d3)

### Appのプライバシー設定

AdMobを使用する場合、以下に従いAppStoreにおける利用データを設定する。

[AdMob利用時の「Appのプライバシー」の入力方法虎の巻](https://zenn.dev/kazushige/articles/9afa10b36d6828)

### 著作権

著作権入力フォームの書き方。

[【iOS】アプリリリース時に著作権情報の入力が必須化した話](https://zenn.dev/nekoniki/articles/ddbd7e03e59b72)

### ATT対応

広告を導入する場合、ATT対応が必須。

[app_tracking_transparency | Flutter package](https://pub.dev/packages/app_tracking_transparency)

### **Missing Push Notification Entitlement**

プッシュ通知を利用しているのにXCode側で権限を設定していない場合に警告メールが届くのでその対応。

[Apple Storeから警告？が来た Missing Push Notification Entitlement の対処方 - Qiita](https://qiita.com/kokogento/items/f088f75688f44b797c2c)
tar.gz ファイルの解凍・圧縮方法

# はじめに
tar.gzファイルを解凍して中身を確認したかったが、7zipやWindowsの標準機能で扱うことができず
解凍や圧縮に困ったので手順を記載する

# 手順
tarコマンドを使ってコマンドプロンプトで解凍・圧縮する
【実行ファイルパス】C:\Windows\System32\tar.exe

**解凍コマンド**
```
tar -xvzf (tarファイルのパス)
```

**圧縮コマンド**
```
tar -cvzf (tarファイルのパス) (対象ディレクトリ)
```

**オプションの説明**
|オプション|説明|
|--|--|
|-c|新しいアーカイブを作成する|
|-r|既存のアーカイブにファイルを追加する|tar 
|-t|アーカイブ内のファイルを一覧表示する|
|-u|アーカイブ内のファイルを更新する（既存のファイルのみ）|
|-x|アーカイブからファイルを展開する|
|-f|アーカイブファイルを指定する|
|-v|詳細な情報を表示する|
|-z|gzipで圧縮する|
G検定合格体験記

# G検定(G2025#2)を受験しました
この度、2025年3月8日に開催されたG検定(G2025#2)に合格したため、こちらに記録として残します。
これから受ける方のご参考になればと思います。

# 忙しい方向けに
おそらく勉強時間や使用した参考書、チートシートだけ気になる方もいると思いますので先に簡単に紹介します。
### 勉強時間
受験の3ヶ月前に勉強を始め、40時間ほど以下の参考書だけ勉強しました。
### 使用した参考書
・深層学習教科書 ディープラーニング G検定(ジェネラリスト)公式テキスト 第2版
・徹底攻略ディープラーニングG検定ジェネラリスト問題集 第2版 (徹底攻略シリーズ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049709/5f45e6ed-3e71-4477-929b-5657c53bac55.png)
### 使用したチートシート
https://note.com/vast_cosmos500/n/n736f710272c6

# なぜ受験したのか？
昨今の普段使いするSNSへAI機能の追加で何かと目につくことが増えてきたことや仕事で生成AIを触る機会が出てきたため、無知のままでいる不安と最先端の技術への興味がわいたことがきっかけです。
ズボラな私が真面目に取り組むことが出来たのはおそらく上司に資格取得を半期の目標として宣言したのもあると思います。

# 受験までにやったこと
まず公式テキストを一周読み込むことから始めました。一日30分など時間を設け、合計15時間ほどかけ少しずつ読み進めていきました。
テキストの章末には簡単な問題があるのですが、実際の試験より簡単な問題なのでこのテキストはあくまでAI関連の知識の下地作りでこれ1冊で1発で合格するのは難しいかなと感じました。
とは言いつつも初めて解く章末問題はほとんど解くとこができなかったのでここでくじける必要は全くありません。

次に問題集を実際の試験の時間を意識しながら解きました。本番の試験スピードに慌てないためにもこれは事前にやってよかったなと思います。
章ごとに時間を測りながら実施→採点→間違えた問題を解き直す とこの一連の流れを2周繰り返しました。
採点結果は1周目は4～6割ほど、2周目で8～9割でした。

# 試験所感
当たり前のことですが今までやった問題と全く同じ問題がでるわけではないので、分かりそうで分からない問題が多く序盤慌ててしまいました。
ただ途中からは割り切って不安な問題には何か1つ回答を選択しすぐ後回しにしました。
そのおかげで最後の問題にたどり着いた時点で40分ほど時間がありましたので、後回しにした問題を焦らずチートシートを参照して解くことができました。

# 試験結果
受験した2週間後にメールで結果が届きました。
総受験者数6,401名、合格者数4,776名で、合格率は約75％でした。
無事合格となりました私の得点率は以下の通りでした。

| 分野 | 得点率 |
| ---- | ---- |
| 人工知能とは. 人工知能をめぐる動向 | 60% |
| 機械学習の概要 | 64% |
| ディープラーニングの概要 | 75% |
| ディープラーニングの要素技術 | 63% |
| ディープラーニングの応用例 | 71% |
| AIの社会実装に向けて | 81% |
| AIに必要な数理・統計知識 | 100% |
| AIに関する法律と契約. AI倫理・AIガバナンス | 56% |

...結構ギリギリだったかも？
全体として7割とれてれば安全だと聞いていたので合格のわりには得点率が低く驚きました。
なにはともあれ合格出来て一安心しました。

# まとめ
本番のスピード感に慣れるためにとにかく問題集を本番の時間を意識して解くのが大事だなと思いました。
試験直前のアドバイスにはなりますが、試験時間は2時間と長丁場なので前日はしっかり睡眠をとり集中が途切れないようにするのも大切です。

ここまでご覧いただきありがとうございます。
これから受験する方頑張ってください。
モバイル個人開発に便利な生成AIツールの整理

自分がモバイルアプリの個人開発をするうえで便利な生成AIツールについて整理がてらメモ。

### 企画
- 利用ツール：ChatGPT Deep Research, o1 Pro

自分が思いついたアプリのアイデアの磨き込み、競合調査、顧客ニーズ調査、アプリのコンセプト設計、ターゲット設計、機能概要の設定などを実施。

調査タスクでは基本的にChatGPTのDeep Researchを活用。気になることを10分程度で網羅的に調査してくれる。Deep Researchで調査した情報等を元に、企画を整理する類のタスクは、ChatGPTのo1 Proを活用。膨大なインプットを元に、それらしいアウトプットを出してくれるので、中身に目を通して齟齬があれば指摘したうえで再度アウトプットを出させる。これを繰り返して企画を磨いていく。

### 要件定義
- 利用ツール：ChatGPT Deep Research, o1 Pro

企画フェーズで作成したアウトプットをベースに、要求定義書を作成。開発内容や優先度、スコープ等は必要に応じて調整する。特にスコープに対して何の制約も与えなければ大量の機能を開発させようとしてくるので、「どれくらいのリソースでどれくらいの期間で開発する想定」なのかを伝えたうえで、MVP的な考え方でスコープを整理するように指示を出す。すると、初回のリリースにはどこまでの機能を開発し、どの機能はユーザーの反応をみて開発有無を決めるのか、といった整理までしてくれる。

要件定義については、個人開発なので技術スタックは自分の使いたい技術を選定した上で依頼する。生成AIモデルのカットオフ時期の都合で古い仕組みが使われているケースも多々あるので要注意。

### 画面設計
- 利用ツール：手書き（iPad + Good Notes）

理想はFigmaで画面設計したいところではあるが、あくまで個人開発なので手書きベースの画面設計で十分と考えている。なので、iPadのGood Notesで手書きで書いている。

生成AIを活用する場合、いくつかやり方はあると思う。Figma AI、Onlook、Galileo AI、v0など。ただ、いずれにしてもモバイル開発ではデザインと開発が完全に分離してしまうので、ステークホルダー間で認識をあわせる必要のない個人開発においては手書きで十分だと感じる。

### アイコン作成
- 利用ツール：Microsoft Designer
- 他検討中ツール：ChatGPT 4o（画像生成）

Microsoft Designerを使っているが、あまりクオリティの高いアイコンはでてこない（というか情報量を減らしたシンプルなアイコンができない）ので、正直もっといいツールがあればと思う。ChatGPTのDALLE3もアプリアイコンの生成には使えなかった（プロンプト改善の余地はあるかもだが）。

ただ、最近はChatGPT 4oの画像生成がすごくイケてるらしいので、もしかしたらそれで解決するかもしれない。

### 実装
- 利用ツール：Cursor, Roo Code, Open Router
- 他検討中ツール：Windsurf, VSCode

エディタは基本Cusrorを使う。実装は基本Roo Codeに任せるようにしているので、CursorはRoo Codeが書いたコードの修正やデバッグ用途で使用している。

エディタについては他にWindsurfが盛り上がっていたり、VSCodeもGitHub Copilotのアップデートが続いているので、それらもいずれ調べたい。

実装はRoo Codeに依頼するようにしている。基本的なアーキテクチャはこちらで組み、実装方針等のルールも設定しているので、自分が実装した場合と近いコードが生成されるようになっている。Roo Codeに限らず生成AIに実装を任せる場合は、いかに適切なコンテキストを与えられるかがそのままコード品質に反映されると思っているので、Roo Codeがうまく実装できない場合は指示内容やルール定義を見直すようにする。

Roo Codeが自由にAPIを使うにあたり、OpenAIやClaudeの公式サイトで自らAPI keyを発行して使うと、Tierが低いが故に一瞬でレート制限に引っかかる。これを回避するために、Open Routerを使う。Open Routerは生成AIサービスのAIへのゲートウェイ的なサービスで、使いたいAPIへのアクセスをOpen Router側で制御してくれる。これにより、Open Router内に単一のAPI Keyを発行するだけで様々なモデルのAPIを利用することができ、さらにレート制限のTierも高いため、制限に引っかかるケースが激減する。若干手数料がかかるので、長期的に継続して利用するのであれば少し苦労してでも公式APIのTierを上げたほうがよいかもだが、その目処がつくまではOpen Routerで十分だと思っている。

### リリース（ストア登録申請）
- 利用ツール：ChatGPT o1 Pro
- 他検討ツール：ChatGPT 4o（画像生成）、OpenAI Operator

ストアに表示する紹介文やキーワードなどのテキストは、o1 Proでサクッと作成する。Feature Graphicについては手作業で作成していたが、ChatGPT 4oの画像生成がかなり優秀そうなのでこちらもエミュレーターのスクショをインプットとしていい感じのFeature Graphicを生成してくれるかもしれない。

ブラウザ上で操作する作業自体もそれなりに量があるので、いずれはOpenAI OperatorのようなBrowser UseあるいやComputer Use系のソリューションで自動化したい。
Geminiで銀河を描いてもらった。

# 概要

Geminiで美しい銀河を描いてもらいました。

# 実装

以下のようなリクエストを出しました。

```
虹色に輝く銀河を描いてみてください。 
```

![虹色に輝く銀河_20250331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/5e1e8cde-49d3-43c7-b071-f66d7c8c9dea.png)

```
赤色に輝く銀河を描いてみてください。
```

![赤色に輝く銀河_20250331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/27770d4f-1e35-4799-89aa-fbad76fe0933.png)

```
青色に輝く銀河を描いてみてください。
```

![青色に輝く銀河_20250331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/50276643-2619-4731-abd1-092623497a02.png)

```
黄色に輝く銀河を描いてみてください。 
```

![黄色に輝く銀河_20250331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/5177711d-f98a-49ec-8b79-ddc620245260.png)

```
緑色に輝く銀河を描いてみてください。
```

![緑色に輝く銀河_20250331.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/975a6413-81ae-4f15-abd0-1a536444d84a.png)

# まとめ

色を変えるだけで楽しめますね。きれいですし。
何かの役に立てばと。
Quartoで論文を書いて投稿するまで

# はじめに
 
> CSV に出力した表を Word にコピペするのダルい！
表の体裁をチマチマ整えていくのはもっとダルい！

> レビューに応じて被験者の除外基準変えたら、結果の数値が全部変わっちゃった。
> 論文に書いた数値全部書き換えていくのめんどいわ

> 投稿先のジャーナル変えたから、新しいフォーマットに文章コピペしてかなきゃ……

そんな苦しみを **Quarto** が解決してくれます。

## Quarto ってなに？

Microsoft Word や LaTeX記法 を使わず、**Markdown** と呼ばれる書き方で論文を書くソフトです。

プログラミングのときに使っているテキストエディタを使って↓のように書くと、

![ss-md-example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/78990c5c-b09b-4a6d-9ab0-d70c2e7ce5ec.png)

↓こんな風にいい感じなPDFを出力してくれます。

![ss-pdf-example.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/304493/c54ae6e8-f3cc-4da7-939a-8b8760c59bba.png)

.tex ファイルも出力してくれるので、そのまま論文投稿も可能です。
解析時に出力した**数値や表を自動で論文内に埋め込んでくれるところ**がイチオシです。

また、Quarto はさまざまな学術論文誌に向けたテンプレートを用意しています。
テンプレートを切り替えることで、すぐに新しいフォーマットの論文PDFを生成できます。

本邦でも、[Quarto を用いて学術論文を執筆する試み](https://www.jstage.jst.go.jp/article/pacjpa/87/0/87_TWS-006/_article/-char/ja)がなされています。

## この記事シリーズについて

この記事シリーズでは、Quarto を用いて論文を執筆し、海外論文誌へ投稿するまでの過程の一例をご紹介します。
Quarto を使った論文執筆・論文投稿のチュートリアルとして用いてもらえれば幸いです。

あくまで私はこんな感じでやったというだけのお話ですので、もっと効率的な方法もあるかもしれません。
その場合はコメントなどで教えていただけますと嬉しいです。

やったことをなるべく余さず記録することを重視しています。
だいぶ冗長で読みづらいかもしれませんが、ご容赦ください。

## Quarto の素敵なところ

### MS Word との比較

- [Vim](https://ja.wikipedia.org/wiki/Vim) を用いて執筆できる（MS word にも Vim-like な環境を作るプラグインはあるそうですが）
- Git によって、解析コードと合わせて原稿を管理できる

### TeX との比較

MS Word に対する利点に加えて……

- 解析結果等をそのまま埋め込める（コピペにより原稿に転記する必要がない）
- 記法が簡単（TeX 記法を学ぶ必要がない）

### Pandoc との比較

- 環境構築が簡単（Pandocを使ったときはデータ埋込の自作プログラムを用意してました）

## Quarto のイマイチなところ

- 環境構築が大変（Pandoc よりちょっとマシ程度）
- 慣れるまで大変（使い方を理解するのに時間がかかる）
- 使い方に関する資料が少ない
- **他人に文書を校閲してもらいにくい**

## Quarto はオススメ？

上にあげたイマイチポイントが強く、現状、万人にはオススメしにくい印象です。
とくに、ほかの人からの校閲をしてもらいにくい点が痛いです。
こんな記事をここまで読んでもらっておきながらすみません。

しかし、Quarto はそれでもなお強い魅力を持っています。
私は今後も Quarto を使って論文を書こうと思っています。
Git 管理が簡単な点やデータを埋め込める点など、Quarto の魅力に興味がある方は、ぜひ記事をご覧ください。

## TOC

### [(1) データ解析から Quarto 導入まで](https://qiita.com/issakuss/items/9cdc0c2f900dac175d88)

- Step 0. データ解析
- Step 1. Quarto のインストール
- Step 2. 執筆環境の準備

### [(2) メタデータ記入からデータ埋め込みまで](https://qiita.com/issakuss/items/43f718a46f3834ed84f4)

- Step 3. メタデータの記入
- Step 4. 参考文献・略語リストの準備
- Step 5. データの読み込み

### [(3) 本文執筆からPDF出力まで](https://qiita.com/issakuss/items/d528d826102282ea69cf)

- Step 6. 本文を執筆する
- Step 7. データを本文に埋め込む
- Step 8. 本文を PDF 出力する

### [(4) 周辺文書作成まで](https://qiita.com/issakuss/items/2c6de20e8d4d4bb82a8c)

- Step 9. カバーレターの作成
- Step 10. そのほかの周辺文書準備

### [(5) Git 管理から投稿まで](https://qiita.com/issakuss/items/1e11b4f94e1958ace513)

- Step 11. Git 管理
- Step 12. 共同編集者との共有
- Step 13. ジャーナルへ投稿
Kibana devtoolsのIndex取得コマンドのカスタマイズ

KibanaのdevtoolsでIndex一覧を取得しようとした際、
```
GET _cat/indices
```
だと見づらい。それぞれの列が何の項目かわからない。
cat indices API(https://www.elastic.co/guide/en/elasticsearch/reference/current/cat-indices.html) のクエリパラメータが使えるので、よく使いそうなものを確認しておいた。


|パラメータ名  |機能  |例  |
|---|---|---|
|verbose  |見出しを出す  |GET _cat/indices?v=true  |
|headers  |表示するカラムの指定  |GET _cat/indices?h=index|
|help  |コマンド指定で使えるパラメータの一覧を表示  |GET _cat/indices?help|
|numeric-formats  |store.sizeなどで表示される単位の統一  |GET _cat/indices?bytes=mb |
|sort  |表示するカラムのソート  |GET _cat/indices?s=docs.count:desc  |
|format  |表示フォーマットの指定  |GET _cat/indices?format=json  |
|カラム名  |指定したカラム名と一致するIndexの情報のみ表示  |GET _cat/indices?index=`Index名`    |

- &で繋げば複数を組み合わせることができる。
- 特に値を指定しなかった場合booleanはtrueに、sortはasc（昇順）になる。

普通にIndex名一覧を見やすくするだけなら以下で十分そう。
```
GET _cat/indices?v&s=index
```
カラム名を指定するときは一部検索も使えるため、Index名に日付や似た文言が入っていればそれで絞り込みもできるかも。
```
GET _cat/indices?v&s=index&index=*2025
```
【SQLserver】インデックス再構築手順

# インデックス再構築の必要性
データベースに大量のデータが削除、追加されると索引がバラバラ（＝断片化）になる
インデックスの断片化が進むとインデックスの効率が低下し、クエリの実行速度に影響を及ぼすためインデックスの再構築もしくは再構成が必要になる

# インデックス再構築手順
### 1. インデックスの断片化率を確認する

```
SELECT
    i.name AS インデックス名,
    ips.avg_fragmentation_in_percent as 断片化率,
	ips.page_count as ページ数
FROM
	sys.dm_db_index_physical_stats(DB_ID(), default, default, default, default) AS ips
	JOIN sys.indexes AS i 
		ON ips.object_id = i.object_id
		AND ips.index_id = i.index_id
WHERE
	OBJECT_NAME(ips.object_id) = 'テーブル名'
ORDER BY
	avg_page_space_used_in_percent DESC;
```

**実行結果**
![{5384BD79-D332-44DB-BC8C-83F6585C34F6}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756373/a730c4c9-1caf-43e4-8c58-0b57de63475e.png)
すべてのインデックスで断片化率が80%以上であり、パフォーマンスが低下している可能性がある


### 2. 断片化率に応じてインデックスの再構築・再構成を実施する

**［断片化率が小さい（30%未満）場合］**
 インデックスの再構成を実施する
 インデックスの再構成はインデックスをオンラインのまま並び替える処理であり、消費リソースや運用面の負担が少ない
 ただし断片化率に比例して処理時間が増えるため断片化率が大きい場合は再構築が望ましい
 ```
ALTER INDEX [インデックス名] ON [テーブル名] REORGANIZE
 ```


**［断片化率が大きい（30％以上）場合］**
 インデックスの再構築を実施する
インデックスを削除して作り直す処理であり、消費するリソースや運用面への負担が大きい
断片化率が大きい場合は再構成より有効であるとされている
 ```
ALTER INDEX [インデックス名] ON [テーブル名] REBUILD
 ```

**実行結果**
![{26E16B7A-E24C-4489-BCBA-5BEC46370ADE}.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3756373/43c270df-d23b-4831-a927-a9621ef02224.png)
断片化率が0%になっている
Quartoで論文を書いて英文誌に投稿するまで (4) -- 周辺文書作成まで

[本文執筆からPDF出力まで]()の続きです。
論文投稿する際、しばしば論文本体とは別に提出しなくてはならない文書があります。
カバーレターや、Highlight などです。
これらの文書は多くの場合、論文本体とは別のファイルとして提出するよう求められます。
論文本体以外の書類を、ここでは周辺文書と呼びます[^1]。
[^1]: ほかにちょうどいい総称があれば教えてください。

# Step 9. カバーレターの作成

論文を投稿するときはだいたい、カバーレターを添付することが求められます。
このくらい Word でサクッと作っても良いのですが、せっかくなのでこれも Quarto で作りましょう。
投稿先ジャーナル名の変更漏れなどが減ります。

`paper/` にDLしてきた `quarto-journal-cl.qmd` が、カバーレターのテンプレートです。
これを編集していきましょう。
ファイル名を変えても構いません。
`coverletter.qmd` など、しっくりくるファイル名にしてください。

## メタデータを埋める

`paper.qmd` のときと同様、`---` で囲われた範囲にあるメタデータを埋めていきましょう。

### author

ジャーナルとやり取りをする、corresponding author の情報を書いてください。
要するにあなたの名前です。

### journal:name

ジャーナル名を記載してください。
投稿先のジャーナルを変えるときも、この部分だけ変えればカバーレター内のジャーナル名をすべて変えてくれるので安心ですね。

### opening

出だし、宛名の部分です。
"Dear Editor" とか、"Dear Editor-in-Chief" とか、Editor Board できちんと Editor in Chief の名前を調べて"Dear Professor Daredare," とするものかと思います。

### closing

締めくくりの挨拶です。
"Sincerely yours," のままでいいんじゃないかと思います。

### title

論文のタイトルをここに書いてください。
`paper.qmd` と同じタイトルを書くよう注意してください。

### reviewers:recommend

著者から提案するレビュワーをここに書いてください。

### reviewers:exclude

レビュワーから除外して欲しい人のリストをここに書いてください。

### format

この部分はテンプレートのままにしてください。

## 文章を執筆する

`paper.qmd` で本文を執筆したのと同じように、カバーレターの文章を書いてください。
ただし冒頭、メタデータの下には、

````
```{r}
attach(rmarkdown::metadata)
```
````

と書いてください。
テンプレートのままです。

書き出しの "Dear..." と、締めくくりの "Sincerely yours," は本文として書かなくてOKです。

## メタデータを本文に埋め込む

投稿先のジャーナル名を出すときは、必ず `{r} journal$name` と書いてください。
これで、メタデータに記入したジャーナル名が埋め込まれます。
直接ジャーナル名を書いてしまうと、メタデータを書き換えても（当然）本文に書かれたジャーナル名は更新されません。

論文タイトルを出すときも同様に、`{r} title` としてください。

### 推奨・除外レビュワーについて言及する

推奨または除外するレビュワーをリストアップしたいときは、

```
::: {#recommend}
:::
```

または

```
::: {#exclude}
:::
```

と書いてください。
その場所に、メタデータに記載した推奨・除外レビュワーのリストが埋め込まれます。

リストではなく個別に言及したいときは、

```
Finally we respectfully request that you exclude
`{r} reviewers$exclude[[1]]$title` `{r} reviewers$exclude[[1]]$name`, `{r} reviewers$exclude[[1]]$affiliation`
and
`{r} reviewers$exclude[[2]]$title` `{r} reviewers$exclude[[2]]$name`, `{r} reviewers$exclude[[2]]$affiliation`
as referees, since they have exhibited bias against our work in the past.
```

といったようにします。
`[[1]]` という数は、メタデータに書いた人のうち一人目であることを指します。

## PDF に出力する

`paper.qmd` と同じ方法で PDF を出力します。
カバーレターを書いた .qmd を開いた状態で VSCode のコマンドから `Quarto: Preview` をします。
または、Terminal 等に `quarto render quarto-journal-cl.qmd` です。

# Step 10. そのほかの周辺文書準備

カバーレター以外にも、論文本体とは別なファイルの提出が求められることもあります。
たとえば、COI を表明する文書だったり、Highlight だったりです。
これこそ Word でさっくり作ってしまって良いのですが、Quarto で作ります。
これといった理由はありません。
もはやただ Word を使いたくないだけです。

```highlight.qmd
---
format:
  pdf:
    wrap: preserve
    keep-tex: true
---
# Highlight:

- konnna fuu ni 
- hyphen kara hajimeru to
- kajou gaki ni naruyo
```

このような .qmd ファイルを作って、`Quarto: Preview` 等で PDF に出力しましょう。

これで論文執筆は完了です。
次は、[Git管理から投稿まで](https://qiita.com/issakuss/items/1e11b4f94e1958ace513)です。
共著者等からコメントをもらう方法についてもご紹介します。
AIを活用した開発方法について考える

# はじめに
ChatGPTやGithub Copilotは開発でも頻繁に使われるようになってきています。
それらを使用して要件定義から試験までの開発工程で活用する方法を考えていきたいと思います。

# 要件定義
- 資料や要件定義書の整形やまとめをChatGPTを使用して行う
- 基本設計や詳細設計などで使いやすいデータに要件定義を加工する

# 基本設計・詳細設計
- すでに設計書がある場合、それらをChatGPTなどに読ませて整形する
- 要件定義書のデータを使用して出力されたインプットを読み込み、詳細に設計書に落としていく

# 実装
- 設計書から実装に反映させやすいインプットを作成して、それを使用してAIに実装してもらう
- 実装用のプロンプトを作成して使用する(実装例やコメントのフォーマットなど、コード全体で統一感がでるようなフォーマットのプロンプトを用意しておく)
- 最初に単体テストを作っておくと実装時のAIの精度も向上すると考えられる

# 試験
- 設計書をインプットとして単体テストを作成しておく
- 試験項目書を網羅的に出力できるようなプロンプトを用意しておく(プロンプトの具体例や下部に仕様内容を追加しておく)


# 会議・スケジュールなど
- デイリーや会議で決定したことをまとめる
- backlogやredmine、jiraなどからデータを取得して分析させて問題点を見つける

# おわりに
今回はAIの活用方法について簡単に考えてみました。
今後、上記の内容を深く考えていけたら良いなと思います。
JavaScriptでグラフ構造を扱う

こんにちは｜こんばんは。カエルのアイコンで活動しております @kyamaz :frog: です。


## はじめに
Python でグラフ構造を扱う際には、[networkx](https://github.com/networkx) を使うのが知られていると思います。同じようにグラフ構造を JavaScript や TypeScript で扱うには、networkx が使えませんので代替となるフレームワークが必要になります。そこで本稿では、JavaScript でグラフ構造を扱うためのフレームワークについて取り上げます。

## グラフ構造を扱うJavaScriptライブラリ
データ可視化のためのライブラリには、グラフ構造を扱えるものが多く、D3.js や Vis.js はかなり前から良く活用されている印象です。
比較的よく名前の聞くライブラリの特徴を挙げておきます。

#### D3.js:

[D3.js](https://d3js.org/) は、データ駆動のドキュメントを作成するための強力なビジュアライゼーションライブラリで、グラフやネットワークのビジュアライゼーションに関する高度な機能もあります。

#### Cytoscape.js:

[Cytoscape.js](https://js.cytoscape.org/) は、グラフ理論の分析やビジュアライゼーションのためのライブラリです。ノードとエッジのスタイルやレイアウト、インタラクティブな操作に強みがあります。

#### Vis.js:

[Vis.js](https://visjs.org/) は、数学で扱う関数を表すグラフを描画するためのライブラリですが、vis-network というモジュールをインストールするこにより、簡単にグラフをビジュアル化することができるようになります。物理エンジンを有効にすると、うねうねと動くようなネットワーク図を扱うことができます。

#### sigma.js:

[sigma.js](https://www.sigmajs.org/) は、WebGLを使用した大規模グラフのビジュアライゼーションを高速に描画できるライブラリです。ノードやエッジ数が膨大になるグラフデータを描画する際には有効です。


次のサイトに、ビジュアルライブラリではないグラフライブラリ graphlib, graphology, ngraph.graph の３つの比較がされております。

https://npm-compare.com/ja-JP/graphlib,graphology,ngraph.graph

このなかで、最近 :frog: は、graphology に注目しておりますが、比較サイトに紹介されているとおり、次のような特徴があります。

#### graphology:

* [graphology](https://graphology.github.io/) は、純粋なJavaScriptで書かれたグラフ理論のためのライブラリで、グラフの作成や分析に使用することができます。ただし、ビジュアライゼーションの部分は含まれておりません。
* パフォーマンス：複雑なグラフ操作を効率的に処理できるように設計されており、大規模なデータセットでも高いパフォーマンスを維持します。
* 拡張性：プラグインシステムをサポートしており、ユーザーが独自のアルゴリズムや機能を追加することができます。


## graphology のサンプル実装
graphology を用いた**超簡単な**例題を２つほど紹介します。

```javascript: グラフのimport/export

const Graph = require('graphology')

// グラフを作成
const graph = new Graph();
graph.addNode('A');
graph.addNode('B');
graph.addEdge('A', 'B');

// JSON にエクスポート
const json = JSON.stringify(graph.export());
console.log('グラフのJSON:', json);

// JSON をインポート
const newGraph = new Graph();
newGraph.import(JSON.parse(json));
console.log('インポートしたノード:', newGraph.nodes()); // ['A', 'B']
```

<details><summary>実行結果</summary>

```
グラフのJSON: {"options":{"type":"mixed","multi":false,"allowSelfLoops":true},"attributes":{},"nodes":[{"key":"A"},{"key":"B"}],"edges":[{"key":"geid_88_0","source":"A","target":"B"}]}
インポートしたノード: [ 'A', 'B' ]
```
</details>


graphology には、Plugin的にアルゴリズムが準備されており、PageRankについての例が以下になります。
※事前に `npm install graphology-metrics`を実行して該当のアルゴリズムをインストールしてから実行します。

```javascript: PageRankを計算する
const Graph = require('graphology')
const metrics = require('graphology-metrics/centrality')

// グラフ作成
const graph = new Graph();
graph.addNode('A');
graph.addNode('B');
graph.addNode('C');
graph.addNode('D');
graph.addEdge('A', 'B');
graph.addEdge('B', 'C');
graph.addEdge('C', 'D');

// PageRank の計算
const ranks = metrics.pagerank(graph);
console.log('Pagerank:', ranks);
```

<details><summary>実行結果</summary>

```
Pagerank: {
  A: 0.11615558155321362,
  B: 0.2148878552074298,
  C: 0.2988109016680539,
  D: 0.3701456615713026
}
```
</details>



## おわりに
最後に、本稿を記載するために検証した環境を記しておきます。お手元の環境で検証する際に、動作が異なるときには参考になるかもしれません。

<details><summary>本稿の環境</summary>

本稿のために使用した環境は以下となります。

macOS: Sequoia 15.3.2 (chip: Apple M1)
node: v22.14.0
npm: 10.9.2

</details>


ご一読いただきまして有り難うございます。

（●）（●） Happy Hacking!
/""　＿＿""＼
Unityでサウンドアセットのピッチが上がってしまう問題

# 環境
Unity 2022.3.26f1

# 問題
1. ゲーム内で使うBGM(mp3)をｈ音源サイトからダウンロード
2. Assetフォルダに格納
3. ゲーム内で使用すると、元音源から少しピッチが上がった状態で再生された
4. あかんて工藤！

# 解決
![Screenshot 2025-02-10 at 22.21.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4007505/2de77d27-ac87-72b4-32ed-2685743aeb32.png)

System Sample Rate が 0になっていたので、44100(441Hz)に変更して解決。
こだわり派の人は周波数をいじってみてね。

https://www.toshisanblog.com/about-pitch/
ゾーン対応している Azure VM サイズを調べるよ

こんにちは、アーキテクトのやまぱんです。

補足コメントや質問、<font color="red">**いいね、拡散**</font>、是非お願いします🥺！
間違ってたら<font color="red">**優しく**</font>教えてください！

-----------------------------------------------------------
最近は**いろいろ**あって、西日本リージョンの Azure VM がゾーン対応している VM SKU を調べることになる人もいそうなのでメモしときます。
**あくまで画面ショットなどは私の環境での実行結果です。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/550c814a-4539-4c8f-bf90-df1ee280f4b6.png)


+ 参考

https://qiita.com/chappy7121/items/81c25c891e3df26a6954

https://learn.microsoft.com/ja-jp/azure/reliability/regions-list


## Azure CLI 
```bash:Azure CLI 
az vm list-skus --location japanwest --zone --output table
```
+ 実行イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/82f65fb7-9c52-4357-a6e7-2347ddb64fca.png)

## Azure PowerShell
```PowerShell:PowerShell
 Get-AzComputeResourceSku `
  | Where-Object { $_.ResourceType -eq "virtualMachines" -and $_.Locations -contains "japanwest" }
```

+ 実行イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/691cbd15-025e-4729-8d86-dca5a7e09c61.png)

:::note info
カレントフォルダに ```CSV```としてエクスポート

```PowerShell:ゾーン対応している Azure VM サイズを表示してCSVエクスポート
Get-AzComputeResourceSku `
  | Where-Object {
      $_.ResourceType -eq "virtualMachines" -and $_.Locations -contains "japanwest"
  } `
  | Select-Object ResourceType, Name, @{Name="Location";Expression={($_.Locations -join ",")}}, @{Name="Zones";Expression={($_.LocationInfo[0].Zones -join ",")}} `
  | Export-Csv -Path ".\japanwest-vm-skus.csv" -Encoding UTF8 -NoTypeInformation

```
* こんな感じで見れます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982508/e4294ced-1a82-4eaa-a604-80265f217f54.png)
:::
【Fauna】夢の次世代データベースFaunaが終了してた

分散型でスケーラビリティがあるのにACID特性も兼ね添えているという夢の次世代データベース[Fauna](https://fauna.com/)ですが、なんか終わってました。

ということで以下は2025/03/19に公開された公式ブログ記事、[The Future of Fauna](https://fauna.com/blog/the-future-of-fauna)の紹介です。


# [The Future of Fauna](https://fauna.com/blog/the-future-of-fauna)

本日、Faunaサービスのコアテクノロジー、および将来に関する重要なお知らせがあります。

Faunaの使命は、全てのソフトウェア開発チームが安全に、スケーラブルに、生産的にデータを取り扱うことができるようにすることです。
長年にわたり、Faunaは革新的なドキュメント指向リレーショナルデータベースを提供し、世界中の何千もの開発チームに優れた開発者経験を提供し、数百の有料顧客ビジネスを支えてきました。
しかし、慎重な判断の結果、今後数か月でFaunaのサービスを終了するという難しい判断を行わなければなりませんでした。


新しいデータベースをグローバルにサービスとして提供する事業は、非常に資本集約的です。
現在の市場環境ではその目標を達成するために必要な資本を単独で調達することは不可能である、と当社の取締役会と投資家は判断しました。
当社は今後、新規顧客の受け入れを停止しますが、既存のFaunaユーザにはただちに影響はありません。
今後数か月かけて、Faunaからお客様がスムーズに移行できるように努めます。


## A commitment to open sourcing the Fauna technology

方針変更に伴い、既存のオープンソースドライバとCLIツールに加えて、Faunaのコアデータベーステクノロジーもオープンソースでリリースする取り組みを始めています。
これにより、Faunaのユニークな機能、すなわちトランザクション、ドキュメントリレーショナルデータモデル、データベース言語FQLなどをコミュニティでも利用できるようになります。
これらがデータベース開発者にとって貴重なリファレンスとなり、開発者コミュニティにより継続的な価値をもたらすことを期待しています。


# 感想

どれほど優れているかと、顧客がそれを選ぶかは決してイコールではないという事実をまざまざと示してくれました。
まあどちらかというと性能より[マネタイズの問題](https://hisa-tech.site/started-faunadb/)な気もしますが、いずれにせよ将来を勝ち取るほどのシェアを得ることはできなかったのでしょう。

それにしてもOSS化を目指しているということで、きっと今後は優秀な開発者がたくさん集まって夢が広がりんぐですね！
JavaScriptにおけるthisの挙動と設計的制御：呼び出し元に依存する文脈と明示的バインディングの技法


## 概要

JavaScriptの `this` は **“関数がどこで定義されたか”ではなく、“どう呼び出されたか”に依存して決まる**。  
これは柔軟性を提供する反面、開発者の混乱とバグの温床になりやすい。

本稿では以下を徹底整理する：

- `this` の文脈による挙動パターン
- アロー関数による束縛とその限界
- `bind`, `call`, `apply` の使い分け
- クラス内メソッドとthisの一貫性
- `this`を意図通りに設計するための実用的戦略

---

## 1. グローバル文脈での this

```js
console.log(this); // ブラウザ → window / Node.js → global
```

- 関数呼び出しではグローバルに束縛される（非strictモード）
- `strict mode` では `this === undefined`

```js
'use strict';
function f() {
  console.log(this); // undefined
}
```

---

## 2. メソッド呼び出しと this

```js
const obj = {
  name: 'Toto',
  say() {
    console.log(this.name);
  }
};

obj.say(); // 'Toto'
```

→ ✅ `this` は `obj` を参照（呼び出し元がobj）

---

## 3. 代入やコールバックでthisが失われるケース

```js
const fn = obj.say;
fn(); // ❌ undefined（グローバルthis）
```

→ ✅ `this` を失う → `bind` で固定する必要がある

---

## 4. `bind`, `call`, `apply` による明示的バインディング

```js
const bound = obj.say.bind(obj);
bound(); // ✅ 'Toto'

obj.say.call({ name: 'Alice' }); // 'Alice'
obj.say.apply({ name: 'Bob' });  // 'Bob'
```

| メソッド | 意味                  | 引数の渡し方     |
|----------|-----------------------|------------------|
| bind     | `this` を束縛して関数を返す | 事前定義          |
| call     | その場で実行、this指定     | `func.call(this, a, b)` |
| apply    | その場で実行、this指定     | `func.apply(this, [a, b])` |

---

## 5. アロー関数における this の束縛

```js
const obj = {
  name: 'Toto',
  say: () => {
    console.log(this.name); // ❌ undefined
  }
};

obj.say(); // ❌ 'this'はobjではなくグローバルを参照
```

- ✅ アロー関数は `this` を“レキシカルに束縛”する
- ✅ 親スコープの `this` を引き継ぐ
- ❌ オブジェクトメソッドでは非推奨

---

## 6. クラスにおける this とbindの必要性

```js
class Button {
  constructor(label) {
    this.label = label;
    this.handleClick = this.handleClick.bind(this); // ✅
  }

  handleClick() {
    console.log(`${this.label} clicked`);
  }
}
```

→ ✅ イベントリスナーなど、**外部で呼び出される関数にはbindが必須**

---

## 7. よくあるthisのバグと防御策

### ❌ イベントハンドラで this がずれる

```js
element.addEventListener('click', obj.say); // ❌ this is not obj
```

→ ✅ `obj.say.bind(obj)` を渡す

---

### ❌ setTimeout や Promiseチェーンで this を失う

```js
setTimeout(obj.say, 1000); // ❌

setTimeout(() => obj.say(), 1000); // ✅ アロー関数で文脈保持
```

---

## 設計判断フロー

```text
① this を“呼び出し元に依存させたい”？ → 通常の function

② this を“常に固定”したい？ → bind を使う

③ this を“親スコープに追従”させたい？ → アロー関数

④ コールバック・イベントで this を使う？ → bind か ラップ関数で固定

⑤ クラスメソッドを外部に渡す？ → constructorでbind
```

---

## 結語

`this` は単なる参照ではない。  
それは **関数が“どこで”ではなく、“どう”呼ばれたかに意味を持たせる構文的文脈**である。

- アロー関数は束縛のための簡潔な文法
- bind/call/applyは明示的な意思の表現
- `this` の誤用は“意図のズレ”から始まる

**thisを制御するとは、関数の責務と文脈を設計することである。**
null・undefined・NaNの正体と防御的設計：JavaScriptにおける欠損値と安全な初期化戦略


## 概要

JavaScriptには「値が存在しないこと」を示すための複数の記号的型がある：

- `undefined` → 「値が代入されていない」
- `null` → 「値が明示的に空である」
- `NaN` → 「数値であるが、結果が不定」

これらを混同すると、以下のような不具合を引き起こす：

- 比較式の誤作動
- 計算結果の伝播的エラー
- UI上の「消えない」表示バグ
- APIレスポンス処理の誤解釈

本記事では、それぞれの意味と設計的に安全な使い方を徹底的に解説する。

---

## 1. `undefined`：定義されていない（システムによる自動代入）

```js
let a;
console.log(a); // undefined
```

- 変数は宣言されたが、まだ代入されていない状態
- 関数が `return` しなかったときの戻り値
- 存在しないオブジェクトプロパティのアクセス結果

---

## 2. `null`：意図的な「空」の意味を持つ設計的な値

```js
let result = null; // 意図的に“なし”を代入
```

- 明示的に「値が存在しないこと」を表す
- 通常、設計者が「まだ存在しないが、存在し得る」ことを示す

---

## 3. `NaN`：数値演算の失敗を示す非数値

```js
const n = Number('abc');
console.log(n); // NaN
```

- `typeof NaN === 'number'` → ❗ 数値型だが「値がない」
- 自分自身と等しくない唯一の値 → `NaN !== NaN`

---

## 4. 判定の落とし穴

### ❌ == による曖昧な比較

```js
null == undefined; // ✅ true（曖昧）
null === undefined; // ❌ false（厳密比較）
```

→ ✅ 必ず `===` を使用すべき

---

### `NaN` の正しい判定法

```js
Number.isNaN(NaN); // ✅ true
NaN === NaN;       // ❌ false
isNaN('abc');      // ❌ true → Number('abc')がNaNだから
```

→ ✅ `Number.isNaN()` を使うことで誤判定を避ける

---

## 5. 初期化設計の指針

| 値          | 使うべきケース                                      |
|-------------|-----------------------------------------------------|
| `undefined` | 変数の未初期化、存在しないプロパティ（デフォルト） |
| `null`      | 明示的に“値がない”ことを表す。APIレスポンスなど     |
| `NaN`       | 計算エラーの検知用 → 直接代入は避けるべき           |

---

## 6. 安全な存在判定の設計

```js
function isPresent(value) {
  return value !== null && value !== undefined;
}

if (isPresent(user.name)) {
  // 安全に利用可能
}
```

→ ✅ `0`, `''`, `false` などの値は“存在している”とみなすため、`== null` ではなく明示的にチェックする

---

## 7. デフォルト値の防御的設計

```js
function greet(name) {
  const safeName = name ?? 'Guest'; // null / undefined のみを対象
  return `Hello, ${safeName}`;
}
```

- ✅ `??`（nullish coalescing）は `null` / `undefined` のみ対象
- ❌ `||` は `''`, `0`, `false` も対象にするため危険

---

## 8. 関数戻り値における初期化設計

```js
function getConfig() {
  return null; // ✅ 値がないが存在し得るという“意図”を伝える
}
```

→ ✅ `undefined` は「想定されていない未定義」  
→ ✅ `null` は「設計上定義された欠損」

---

## 設計判断フロー

```text
① “初期化されていない” → undefined（自動で入る）

② “意図的に空”にしたい → null

③ 数値計算で失敗した → NaN（処理で発生、直接使わない）

④ 存在判定したい → !== null && !== undefined

⑤ デフォルト値を設定したい → ?? を使う（|| は非推奨）
```

---

## よくあるバグ例と対策

### ❌ `if (value)` 判定に頼る

```js
if (value) // ❌ false, 0, '', null, undefined 全て落ちる
```

→ ✅ 存在だけを見たいなら `value != null` or `value !== undefined`

---

### ❌ NaNの判定に `==` を使う

```js
if (n == NaN) // ❌ false
```

→ ✅ `Number.isNaN(n)`

---

## 結語

JavaScriptにおける `null` / `undefined` / `NaN` は、すべて「**不在の値**」を意味するが、  
その意味と使い道は**設計レベルで明確に区別すべき概念**である。

- `undefined` → 未定義の“発生”
- `null` → 空の“意図”
- `NaN` → 不定の“結果”

**不在には意味がある。**  
それを“意図として設計に刻む”ことが、バグを予防し、読みやすさを高める第一歩である。
# 【CTF入門】初心者でも使える！実践的CTFテクニック集 🔐

# 【CTF入門＆体験記】CTFって何？始め方・解き方・僕の挑戦記録まで紹介！

## はじめに

> 📝 **この記事は、Centrale Lilleでの「défi personnel（個人チャレンジ課題）」の一環として執筆しています。**

私は現在、Centrale Lilleの学生としてセキュリティ分野に関心を持ち、**CTF（Capture The Flag）**という競技型セキュリティ学習に取り組んでいます。この記事では、CTFの基本的な紹介に加え、私自身が参加してきたCTF大会での体験談や、実際に使ったテクニック、学びについて共有します。

「CTFってよく聞くけど、何から始めたらいいのかわからない」「実際にどんな問題が出るの？」という方に向けて、できるだけわかりやすく書きました！

---

## CTFとは？

CTFとは「Capture The Flag」の略で、ハッキング技術やセキュリティ知識を駆使して“フラグ（flag）”と呼ばれる特定の文字列を探し出す競技です。

### 主なジャンル

| ジャンル | 内容 |
|----------|------|
| Web | Webアプリケーションの脆弱性調査 |
| Crypto | 暗号の解析・解読 |
| Pwn | バイナリの脆弱性を突く |
| Reverse | プログラムの挙動を逆解析 |
| Forensic | メモリやファイルの解析 |
| OSINT | オープンな情報から答えを導く |
| Misc | その他、分類しきれない問題 |

---

## 私のCTF挑戦記録①：TCP1Pへの初参加

私はCTFの基本を学ぶために、[root-me.org](https://www.root-me.org) という学習サイトで演習問題を解いていました。そして、スキルを試すために、友人たちとチームを組んで「TCP1P」というCTF大会に初めて参加しました。

- ✅ **参加チーム数**：1110チーム  
- ✅ **私たちの順位**：**50位**  
- ✅ **解けた問題数（チーム全体）**：11問  
- ✅ **私が解いた問題数**：**4問**
  - Forensicカテゴリ：2問
  - OSINTカテゴリ：2問

**中級者向けの大会でこの成績を取れたのは、自分たちにとって大きな励みになりました。**

しかし一方で、**WebやCryptoの問題は全く歯が立たず**、明確な今後の課題として残りました。

---

## 私のCTF挑戦記録②：次なるステップへ

その後、同じチームメンバーで**2度目のCTF大会**にも出場しました。前回の結果に自信を持ち、**今回はよりレベルの高い大会**に挑戦することにしました。

- ✅ **今回解けた問題数**：2問
  - Crypto：1問
  - Web：1問

この大会では「基礎知識だけでは通用しない」という現実を実感しました。**複雑な問題に対応するには、戦略的思考や発想の柔軟さが不可欠だと痛感しました。**

---

## どうやってCTFを始めるの？

### 1. 練習サイトを使う

初心者には以下のプラットフォームがおすすめです：

- [Root Me](https://www.root-me.org)
- [picoCTF](https://picoctf.org/)
- [Hack The Box](https://www.hackthebox.com/)
- [TryHackMe](https://tryhackme.com/)

### 2. CTF大会に参加する

実践の場として、CTFtimeというサイトで多数のCTFイベントが告知されています。

- [CTFtime](https://ctftime.org/)  
→ チームでの参加もソロ参加もOK！

---

## 初心者向け！使える基本テクニック集

### 🔍 Forensic編

- `strings`, `binwalk`, `exiftool` でファイルを分析
- 画像に隠された情報（ステガノグラフィ）を探す

### 🌐 OSINT編

- Twitter, GitHub, Pastebin などのオープン情報から手がかりを探す
- 画像のメタデータ（EXIF）や画像検索で位置情報を特定

### 🔐 Crypto編

- 暗号文をBase64, ROT13などで変換してみる
- [CyberChef](https://gchq.github.io/CyberChef/) を使って変換・解析

### 🌐 Web編

- URLパラメータの変更、Cookieの確認
- Burp Suite や DevTools を使ってリクエストを操作

---

## 今後の目標

- 🔄 **Web・Cryptoジャンルの強化**
- ✍️ **今回使用したテクニックをまとめた記事を近日中に公開予定**
- 🧠 **日々root-meでの学習を継続しつつ、定期的に大会に参加**

---

## おわりに

CTFは、**実践的なセキュリティスキルを楽しみながら身につけられる最高の学習方法**です。初めての大会で得た達成感、そして次の大会で感じた壁。それらすべてが、今後のモチベーションになっています。

これからCTFを始めたい方、始めたばかりの方の参考になれば幸いです。一緒に頑張りましょう！

---

## おまけ：便利リンク集

- [Root Me](https://www.root-me.org)
- [CTFtime](https://ctftime.org/)
- [CyberChef](https://gchq.github.io/CyberChef/)
- [picoCTF](https://picoctf.org/)
- [HackTricks](https://book.hacktricks.xyz/)
【備忘録】オブザーバビリティとは

## はじめに
OSSで簡単なオブザーバビリティサービスを構築する機会があり、その事前知識をまとめた備忘録です。

## オブザーバビリティとは？

>「オブザーバビリティ（Observability）」は、「Observe （観察する）」と「Ability （能力）」の組み合わせから示す通り、日本語では「可観測性」や「観察する能力」と翻訳されています。ではその概念は、いつ頃に登場したのでしょうか。
>
>　これは決して新しい概念ではなく、最初に提唱したのは「カルマンフィルター」で知られるRudolf E. Kálmán氏だと言われており、1960年に発表された「On the general theory of control systems（https://www.sciencedirect.com/science/article/pii/S1474667017700948?via%3Dihub）」に登場しています。
>
>　その意味は「システム内部の状態を外部出力の情報から推測できる度合いを示す指標」であり、もともとは「自己調整システムの制御理論」に関して言及された言葉でした。
>
>
>
>現在IT業界で使われている「オブザーバビリティ」も、基本的な意味は同様です。
>
>　つまり「システムの状態に係る出力情報を調査することによって、システム内部の状態を推測、把握する能力」です。
>
>　オブザーバビリティを高める上で得られるメリット、期待できることは主に下記の 2 点です。
>
> - システム状態の即時把握による、問題への迅速な初動対応
> - ユーザーに対するサービスレベルの維持が容易になる

https://www.business-on-it.com/2005-observability 

## なぜオブザーバビリティが必要なのか?

システムが複雑化したことへの対応と、障害対応時間の短縮などに必要です。

従来の監視と問題
 - 個々のシステムやネットワークを監視
   - 問題：システム間のつながりが見えないため、マイクロサービスへの対応が困難
     - 結果：異常が発生しても根本原因かの特定に時間がかかる

## どのような問題を解決できるのか？

- システム全体を監視しているため、管理が必要なコンピューターが増えても対応が容易
- システム間のつながりがわかるため、原因特定の時間を短縮できる



オブザーバビリティを高めるためには、一般的に3つの要素が必要とされている。

## オブザーバビリティ3つの柱、3大監視項目

### メトリクス

CPU使用率、メモリ使用量、ディスク使用量などのシステムのパフォーマンスを数値化して示した定量的な指標のこと

#### 何が良いのか？

- グラフやチャートでアラート監視を行うことで、健全性や異常の有り無しを把握できる

- アプリの動きや、ハードの稼働状態を可視化し、稼働状態を把握できる

### ログ

システムやアプリの実行履歴を記録したデータのこと
例えば、アプリの起動や停止、エラーの発生、DBへのアクセスのこと

#### 何が良いのか？

- 障害発生時に原因特定ができる

- システムの挙動の追跡ができる

### トレース

以下Gemini

> トレースとは、あるリクエストがシステム内でどのように処理されたかを、一連のステップとして追跡する記録のことです。まるで探偵が犯人を追跡するように、リクエストがシステム内のどのサービスを経由し、どの処理を経て最終的な結果に至ったのかを詳細に記録します。

#### 何が良いのか？

- マイクロサービスにおいて、複数のサービスをまたがったリクエストの可視化ができる

#### 具合例
```
ユーザーリクエスト
↓
API Gateway（100ms）
↓
認証サービス（50ms）
↓
商品サービス（200ms）
  ↓
  データベース（150ms）
↓
在庫サービス（80ms）
```

- トレースでは各サービスの処理時間と呼び出しの流れの全てが見える

- そのため、マイクロサービスなどの分散システムにおいて、リクエストを可視化する手段として用いられる。

3本の柱の役割を簡潔に表すと以下になる。

> オブザーバビリティの３本柱の一つで、メトリクスが「何が起きているか」、ログが「なぜ問題が起きたか」を判別できるのに対し、トレースはアプリケーションが処理するリクエストに関するデータを収集することで、「どこで問題が発生したか」を判別できます。

https://qiita.com/iStone/items/72417fe599e71e62f631#%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AF
iOS開発環境でのRuby/Fastlaneセットアップ手順

## はじめに
iOS開発でFastlaneを使用する際のRuby環境のセットアップ手順をまとめました。特にApple Silicon Macでのセットアップにおいてよく発生する問題への対処方法も含めています。

## 環境
- macOS Sonoma 14.3.2
- Apple Silicon Mac (M1/M2/M3)
- Ruby 3.3.0（この記事の手順でインストールします）

## セットアップ手順

### 1. Homebrewのインストール
すでにHomebrewがインストールされている場合は、このステップをスキップしてください。

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

### 2. rbenvのインストール
rbenvを使用してRubyのバージョン管理を行います。

```bash
brew install rbenv
```

### 3. rbenvの設定
以下のコマンドを実行して、rbenvの初期化を行います。

```bash
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
source ~/.zshrc
```

### 4. Rubyのインストール
rbenvを使用して、Ruby 3.3.0をインストールします。

```bash
rbenv install 3.3.0
rbenv global 3.3.0
```

### 5. Bundlerのインストール
特定のバージョンのBundlerをインストールします。

```bash
gem install bundler:2.5.16
```

### 6. 依存関係のインストール
プロジェクトのルートディレクトリで以下のコマンドを実行します。

```bash
bundle install
```

## よくある問題と解決方法

### 権限の問題が発生する場合
システムのRubyを使用しようとすると、以下のようなエラーが発生することがあります：

```
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /Library/Ruby/Gems/2.6.0 directory.
```

**解決方法**：
rbenvを使用してRubyをインストールし、そのバージョンを使用することで解決できます。上記の手順通りに実行してください。

### Rubyのバージョンの互換性の問題
古いバージョンのRubyがインストールされている場合、以下のようなエラーが発生することがあります：

```
bundler requires Ruby version >= 3.0.0. The current ruby version is 2.6.10.210.
```

**解決方法**：
上記の手順でRuby 3.3.0をインストールすることで解決できます。

## Fastlaneの実行
環境のセットアップが完了したら、以下のコマンドでFastlaneを実行できます：

```bash
bundle exec fastlane
```

## 注意事項
- プロジェクトの`Gemfile`や`.ruby-version`ファイルを確認し、必要なRubyバージョンを確認してください。
- プロジェクトで特定のバージョンのRubyが必要な場合は、そのバージョンをインストールしてください。
- セキュリティ上の理由から、システムのRubyは使用せず、rbenvでインストールしたRubyを使用することを推奨します。

## 参考リンク
- [rbenv GitHub](https://github.com/rbenv/rbenv)
- [Bundler 公式ドキュメント](https://bundler.io/)
- [Fastlane 公式ドキュメント](https://docs.fastlane.tools/)

## まとめ
この手順で、iOS開発に必要なRuby環境とFastlaneのセットアップが完了します。チーム内で同じ環境を共有する際にも、この手順を参考にしていただければと思います。
【Laravel】例外処理とトランザクションの使い方

本記事では、try/catch構文と、DB::beginTransaction() および DB::transaction() の使い分けについて、具体例とともに解説します。

## try/catch：例外をキャッチして適切に処理する
try/catch構文は、処理中に発生する例外（Exception）をキャッチして、アプリケーションがエラーで落ちるのを防ぐために使用します。

### 例:
```php
try {
    $user = User::findOrFail(1); // ユーザーが存在しない場合、例外が発生
    return response()->json(['user' => $user]);
} catch (\Exception $e) {
    return response()->json(['error' => 'User not found'], 404);
}
```
- findOrFail() は、該当するデータがない場合に ModelNotFoundException をスローします。
- catch ブロックで例外をキャッチし、適切なレスポンスを返します。


## DB::beginTransaction()：手動でトランザクションを管理する
トランザクションは、複数のDB操作をまとめて一つの単位として管理したいときに使います。処理が途中で失敗しても、DBを安全な状態に保てます。

### 例: ユーザー登録とプロフィール作成をトランザクションで管理する
```php
use Illuminate\Support\Facades\DB;
use App\Models\User;
use App\Models\Profile;

try {
    DB::beginTransaction(); // トランザクション開始

    $user = User::create([
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'password' => bcrypt('password'),
    ]);

    Profile::create([
        'user_id' => $user->id,
        'bio' => 'Software Developer',
    ]);

    DB::commit(); // 成功したら確定

    return response()->json(['message' => 'User created successfully']);
} catch (\Exception $e) {
    DB::rollBack(); // 失敗したらロールバック

    return response()->json(['error' => 'Failed to create user'], 500);
}
```
### 解説
1. DB::beginTransaction() で処理開始
1. 複数の create() を行う
1. 途中でエラーが出たら DB::rollBack() で巻き戻す
1. 成功時のみ DB::commit() で確定


明示的な制御ができる反面、記述量が増えるデメリットあり

## DB::transaction()：自動でトランザクション管理してくれる便利メソッド
Laravelには DB::transaction() メソッドがあり、トランザクションを自動的に try/catch で処理してくれます。

### 例：自動でロールバックされるトランザクション
```php
use Illuminate\Support\Facades\DB;

DB::transaction(function () {
    $user = User::create([
        'name' => 'John Doe',
        'email' => 'john@example.com',
        'password' => bcrypt('password'),
    ]);

    Profile::create([
        'user_id' => $user->id,
        'bio' => 'Software Developer',
    ]);
});
```

#### メリット
- try/catchを書かなくても自動でロールバック
- コードがスッキリ

#### カスタムエラーハンドリングをしたいときは try/catch 併用
- エラーごとに処理を変えたい
- エラー内容をログに記録したい
- 成功後に通知やメールを送信したい
- 一時的な失敗にリトライ処理を入れたい



## DB::transaction() × try/catch：高度なエラーハンドリングも可能
### 例：ログ出力を伴うエラーハンドリング
```php
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

try {
    $user = DB::transaction(function () {
        $user = User::create([
            'name' => 'Jane Doe',
            'email' => 'jane@example.com',
            'password' => bcrypt('password'),
        ]);

        Profile::create([
            'user_id' => $user->id,
            'bio' => 'Web Designer',
        ]);

        return $user;
    });

    return response()->json(['user' => $user]);
} catch (\Exception $e) {
    Log::error('User creation failed: ' . $e->getMessage());

    return response()->json(['error' => 'User creation failed'], 500);
}
```
- DB::transaction() 内で処理を行い、例外が発生すれば自動でロールバック
- catch でログにエラーを記録し、適切なレスポンスを返す


## まとめ
- try/catch は例外処理を行い、エラーハンドリングに使用
- DB::beginTransaction() はデータの一貫性を保つために手動でトランザクションを管理
- DB::transaction() は try/catch を省略でき、自動でロールバックされるため簡潔に書ける
Qiitaを始めるにあたって読むべきもの


## おすすめ記事 3 選

### [Markdown 記法チートシート&解説](https://qiita.com/etoland/items/8e4652ef43d4228f4d7c)

Markdown の書き方が一覧表で記載されているので、ぱっと見て使うことができます。
Qiita のアカウント作ったけどどうやって記載すればいいかわからない人向け。
Markdown は覚える必要はなく、チートシート見て書ければ問題ないです。

### [良い記事を書くためのガイドライン](https://help.qiita.com/ja/articles/qiita-article-guideline)

Qiita でおすすめされている記事。
必要最低限のガイドラインのため、もっと詳しく知りたい人には向かないかも

### [エディターを使って記事を書きたいとき読むもの](https://github.com/increments/qiita-cli)

この記事の設定が完了すれば、投稿記事をファイル形式で保存し、Github 経由で Qiita に投稿できます。
Github の草も生えるし、Qiita も投稿できるし、Github Actions にも触れられるし、エンジニアの一歩めとしても良いんじゃないかなと思っています。
初心者だと少しハードルは高いかもしれないけど、下記の URL で初心者でもできるように説明されているから挫折しにくいのもメリット。

## おわりに

Qiita の投稿に向けて、先日読んだ記事やセットアップ方法を取り上げましたー
これからもやったことをアウトプットする目的で記事を投稿します。
スキ、コメント、フォローもらえると嬉しいですー
DSRVリサーチレポート [SuperGrok DeepSearch]

DSRVは、韓国を拠点とするリーディングなブロックチェーンインフラ企業であり、Web3エコシステムの発展に大きく貢献しています。以下に、DSRVに関する最新の調査結果をまとめます。

### 概要
- **設立**: 2019年
- **拠点**: 韓国ソウル
- **創業者**: キム・ジユン（CEO兼共同創業者）、チョン・ジョンホ（CTO兼共同創業者）、キム・ジョンガン（共同創業者）など。創業チームにはサムスン電子やネイバーなどの大手企業出身者が含まれています。
- **ミッション**: ブロックチェーン技術を通じてインターネットの未来を構築し、すべての人にアクセス可能なインフラを提供すること。

### 主な事業内容
DSRVは、ブロックチェーンインフラの提供に特化しており、主に以下のサービスを展開しています：
1. **ノード・アズ・ア・サービス（Node-as-a-Service）**  
   - 開発者や企業がブロックチェーンネットワークに簡単に接続できるようにするサービス。
   - 「All That Node」という製品を通じて、70以上の主要プロトコルをサポートし、低レイテンシーで安定したノード接続を提供。
2. **ステーキングサービス**  
   - イーサリアムをはじめとする40以上のネットワークでバリデーターとして活動。
   - 約40兆ウォン（約300億ドル相当）のデジタル資産を管理し、年間4～5%のリターンをクライアントに提供。
3. **マルチチェーン開発ツール**  
   - 「WELLDONE Studio」を通じて、開発者がマルチチェーン対応のアプリケーションを効率的に構築できるツールやウォレットを提供。
4. **データ分析ツール**  
   - オン-chainデータの分析をサポートし、開発者や企業に洞察を提供。

### 実績と地位
- **グローバルでの地位**: イーサリアムステーキング市場で世界9位にランクイン（2024年時点）。
- **ネットワークサポート**: 40以上の主要ブロックチェーンネットワーク（例: Ethereum, Terra, Celo, Near, Flowなど）をサポートし、4000以上のノードを運用。
- **資産管理規模**: ステーキングを通じて1億ドル以上の資産を扱い、業界での信頼を確立。
- **パートナーシップ**: Lido、Obol、SSV、EtherFiなどの主要プロトコルと協業し、エコシステムの成長を支援。

### 最近の動向（2025年3月時点）
- **財務状況**: 2024年に売上100億ウォン（約760万ドル）、営業利益30億ウォンを達成し、設立5年目で初の黒字化を記録。2025年には売上300億ウォンを目標。
- **IPO計画**: 2026年上半期に韓国KOSDAQ市場への上場を目指しており、大信証券を主幹事に選定。2025年第1四半期にシリーズB資金調達を計画。
- **事業拡大**: 決済分野など新たなビジネス領域への進出を検討中。
- **イベント活動**: 「Builder’s Summer House」など、Web3開発者向けのイベントを主催し、コミュニティ育成に注力。

### 資金調達
- **シリーズA（2021年6月）**: 2300万ドルを調達。投資家にはSamsung NEXT、KB Investment、Naver D2 Startup Factory、Hashedなどが名を連ねる。
- **今後の予定**: 2025年にシリーズBを実施予定で、さらなる成長資金を確保。

### 競争環境
DSRVは、Zeeve、BlockJoy、Kaleidoなどのグローバルなブロックチェーンインフラ企業と競合していますが、韓国市場での強固な基盤と政府認可VASP（仮想資産サービスプロバイダー）バリデーターとしての地位が強みです。

### まとめ
DSRVは、韓国を代表するWeb3企業として、ブロックチェーンインフラの簡素化と普及を推進しています。技術力とパートナーシップを武器にグローバルでの地位を固めつつあり、2026年のIPOに向けてさらなる成長が期待されます。韓国のブロックチェーンエコシステムにおいて、DSRVは開発者と企業の双方にとって重要なアクセスポイントとなっています。

何か特定の側面についてさらに詳しく知りたい場合は、お知らせください！
windows11で、sketchup6 その37

# 概要
windows11に、sketchup6を入れてみた。
rubyで、3Dを書く。
練習問題、やってみた。

# 練習問題
sketchupでペジェ曲線を描くrubyスクリプトは

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f4090cbc-3f88-47d0-ba14-f208f3cbaf5b.png)

# サンプルコード

```

def create_bezi
	model = Sketchup.active_model
	entities = model.active_entities
	p0x = 0
	p0y = 0
	p1x = 10
	p1y = 10
	p2x = 20
	p2y = 20
	p3x = 30
	p3y = 0
	prompts = ["p0 x", "p0 y", "p1 x", "p1 y", "p2 x", "p2 y","p3 x", "p3 y"]
	values = [p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y]
	results = UI.inputbox(prompts, values, "Bezier")
	if results
		p0x, p0y, p1x, p1y, p2x, p2y, p3x, p3y = results
	else
		return
	end
	x2 = 0 
	y2 = 0
	(100).times { |i|
		t	= (i.to_f) / 100
		x1 = (1 - t) * (1 - t) * (1 - t) * p0x + 3 * t * (1 - t) * (1 - t) * p1x + 3 * t * t * (1 - t) * p2x + t * t * t * p3x
		y1 = (1 - t) * (1 - t) * (1 - t) * p0y + 3 * t * (1 - t) * (1 - t) * p1y + 3 * t * t * (1 - t) * p2y + t * t * t * p3y
		if i > 1
			line1 = entities.add_line [x1, y1, 0] , [x2, y2, 0]
		end
		x2 = x1
		y2 = y1
	}
	UI.messagebox "ok"
end





```

以上。