OmniAICreator/Qiita-1.07M huggingface dataset:
OpenAI Codex導入・使い方と主要UI解説：GitHub連携もできます。【2025年最新版】

GitHubと連携できるAIエージェント「OpenAI Codex」を実際に触ってみました。
Codexは、自然言語で「◯◯のテストコード直して」といった指示を投げるだけで、
・リポジトリの内容を解析
・やるべきタスクを分解
・自動で修正・PR提出
まで一気通貫でサポートしてくれる新世代ツールです。

「英語のプロンプト打てばAIが勝手にPR作ってくれるってマジ？」

「ChatGPTとどう違うの？」

「実際どこまで使いものになる？」

そんな疑問を持った方へ、導入手順から操作画面、実際の挙動や“UIで迷いやすい罠ポイント”まで徹底レビューしました。

✔️ 本記事で分かること
Codexの導入〜GitHub連携までの流れ

各UIパーツの操作方法・役割（公式Doc未記載の仮名も補足）

「確認を求める」ボタンなど、ハマりがちな操作のリアル挙動

CodexによるPR作成・コメントの扱い

ローカル連携やファイル生成の限界

Codexの“使いどころ”と“注意点”

本編は「初めてでも詰まらず使える」を目指してまとめてます。
画像・キャプチャ・Tips豊富なので、気になる人はぜひどうぞ！

※ 2025/5/20現在、Pro/Team/EnterpriseプランでないとCodexは利用できません。

記事はこちら👇
🔗 [OpenAI Codex徹底レビュー：GitHub連携AIエージェントの導入・使い方と主要UI解説【2025年最新版】](https://mikaduki.info/ai/openai-codex-review-github-agent/)
Scannerクラス　主なnext系メソッド一覧（メモ）

# はじめに
Javaで初めてScannerクラス触ったとき、next()メソッドだけを使っていて、他にも色々なnext系メソッドがあることを知りませんでした。
nextInt()やnextLine()の使い分けに少し苦労しました。その経験を踏まえて、nextメソッドの種類とその使い方を簡単にまとめた記事を書こうと思いました。
Scannerクラスを使う方や、違いを整理したい方の参考になれば幸いです。

# 主なメソッド
* next()
* nextLine()
* nextInt()
* nextDouble()
* nextBoolean()

# next()：単語を１つ読み取る
* スペース・改行で区切られた**単語を１つだけ取得。**
```
Scanner sc = new Scanner(System.in);
String word = sc.next();

// 入力例："hello world"
// 出力例：word = "hello"
```

# nextLine()：改行までの1行を読み取る
* 改行までを**まるごと文字列として取得。**
```
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();

// 入力例："hello world"
// 出力例：line = "hello world"
```
### 注意点：
* nextInt() などのあとに使うと、前の改行が残っていて空文字になる。
```
int n = sc.nextInt();
sc.nextLine();  // ← この行で改行を捨てる！
String name = sc.nextLine(); // ここでちゃんと読める
```
# nextInt()：整数を読み取る
* 整数を取得。入力は半角数字のみ。
```
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();

// 入力例："42"
// 出力例：num = 42
```

# nextDouble()：小数を読み取る
* 小数（3.14 など）を double 型として読み取る。
```
Scanner sc = new Scanner(System.in);
double pi = sc.nextDouble();

// 入力例："3.14"
// 出力例：pi = 3.14
```

# nextBoolean()：真偽値を読み取る
* true または false を読み取り、boolean 型として返す。
* 大文字・小文字の区別あり
```
Scanner sc = new Scanner(System.in);
boolean flag = sc.nextBoolean();

// 入力例："true"
// 出力例：flag = true
```

# 表
| メソッド | 説明 | 注意点 |
|:-:|:-:|:-:|
| next()  | 単語を１つ取得  | スペースで区切られる  |
| nextLine()  | 文字列として1行を取得  |nextInt()等の後は改行捨てる必要あり  |
| nextInt()  | 整数を取得  | 非数値でエラー  |
| nextDouble()  | 小数を取得  | 1.5 などに対応  |
| nextBoolean()  | true/falseの入力を処理  | 小文字限定が安全  |
Amazon Bedrock ガードレールを試してみた

久しぶりに仕事が技術領域へ戻ってきたので、リハビリも兼ねてBedrockまわりを触ってみました。
とても簡単な内容ですが、主に私のモチベーションのために書いています。


## 試したこと

- Amazon BedrockでNovaを有効化
- プレイグラウンドでテキストチャット実験
- ガードレールの設定と効果確認


### Nova有効化

まずはNovaを有効化します。
Amazon BedrockのModel Catalogより、対象のモデルを選んで「モデルアクセスをリクエスト」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/c8773d8c-ce4b-4067-b435-c827d983c5fb.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/02ad6671-b6bf-44af-b847-23a37edf8c0a.png)

そうするとすぐにモデルが利用可能になります。
今回はNova Microを利用してみます。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/26238c99-1083-4f2d-83ac-f490329f03fc.png)

### プレイグラウンドで実験

次に、プレイグラウンドで実際につかってみます。
ここではGUI上でチャットUIを試すことができます。

試しにNovaについて、猫にもわかるように質問してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/495365ad-fa28-4510-b6e6-c331df87270e.png)

折角回答してくれたのですが、残念ながら私は猫ではなかったので説明が分かりませんでした...。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/49edec88-c7b6-46c3-bd05-84e3fe70ad3e.png)

普通に回答してもらいました。
結構しっかり記述されていますね。

### ガードレール機能の確認

Amazon Bedrockにはガードレール機能があります。
生成AIアプリケーションの安全性と信頼性を高めるための機能で、ユーザー入力やモデル出力に対して有害なコンテンツや誤情報を検出・制御する仕組みが提供されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/2a343086-5bfb-4ff9-b6de-9ef4043cc12d.png)

設定画面では、フィルターを設定できます。
一般的にフィルタすべき項目に対して、それぞれ文字/画像、ガードのアクション、強度を決めることができます。

また、プロンプト攻撃に対しても同様に設定することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/2e5f5135-d1d1-4340-b204-2851359baa44.png)

トピック指定もできます。私の名前を入れてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/7c4fb7ee-087d-4be5-ae87-bc873fe6bae4.png)

他にもワードでの指定ができるようです。
すでにブラックリストフレーズなどが揃っているシーンでは有効かもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/c3b3fbdc-ed73-4520-bc17-458f2891dc88.png)

さて、実際にプロンプトを入力して、ガードレールが機能するかテストしてみます。

まずは、IPアドレスをプロンプトに含めてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/975a5ef3-88fc-453d-8370-55d5f7c3ac82.png)

IPアドレスを含めることで、PII (Personal Identifiable Information)の項目でブロックされました。
PIIにはほかにもクレジットカード番号や住所、電話番号などがあり、個人情報の入力を防げそうですね。


今度は、プロンプトアタックを試してみました。
これは、生成AIに対して悪意ある入力を通じてAIの動作を意図的に変更させる手法のことです。
悪用されると良くないので表示はマスクしています。

![Screenshot 2025-05-20 at 22.28.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/117147/2875ea65-08f9-4013-b820-3e311ab38fe3.png)

3カ所でブロックされています。いろいろと良くないようです。

このように、ガードレールでは安全に生成AIを使う上で防ぎたいプロンプトをブロックすることができました。

よく耳にしそうな「生成AIって便利そうだけど、安全なの？」に対応できるひとつの手段になりそうですね。
Tailwind v4 で読み込むソースを減らす方法

# 概要

Tailwind v4では自動でソースが読み込まれるが、対象外にするほうがわかりにくいので共有です。

```tailwind.css
@source not '../**/*.{js,jsx,ts,tsx,liquid}';
@import 'tailwindcss';
```

# だめなもの

以下は無意味です。 `@config` で指定しても対象外になりません。
```tailwind.config.js
module.exports = {
  content: [],
};
```

# べつのもの

以下でもいけます。

```tailwind.css
@config '../tailwind.config.js';
@import 'tailwindcss';
```
```tailwind.config.js
module.exports = {
  content: ['!./**/*.{js,jsx,ts,tsx}'],
};
```
高還元SES × 法改正で強気交渉 〜下請法/下請振興法改正を読み解く〜【2025年版】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4006596/e66b3da7-0f1f-462b-a104-8d8d9ab3967a.png)


> **結論：
改正下請法 × フリーランス取引適正化法 = “強気の単価交渉” がスタンダードに！**  
> 本記事では **5 つのなぜ？** を回しながらポイントを掘り下げ、これからの**高還元 SES** の戦略を考えます。

---

## 1. はじめに  
高還元 SES（還元率 70〜80%）は「単価＝売上」「還元率＝粗利構造」を極限まで透明化したビジネスモデルです。  
2025 年の法改正により、**値決めプロセスが制度的に守られる** 今こそ、交渉の枠組みをアップデートしましょう。

---

## 2. 「30 秒」でわかる改正ポイント

| 改正トピック | 施行 | インパクト | Why? *(1st Why)* |
|--------------|------|-----------|------------------|
| 価格協議を拒否しちゃダメ | 2026/1/1 | 一方的な単価決定 NG 、明確な説明が必要 | 受託者の原価上昇リスクを是正 |
| 手形払いはダメ | 2026/1/1 | 手形の換金にかかる日数をカット、キャッシュフロー好転 | 資金繰り先送り慣行を排除 |
| 従業員数で適用 | 2026/1/1 | 資本金トリック（資本金を少なく見せて中小企業に見せかける方法）封じ | “見かけ中小” 発注者を規制 |

---

## 3. 「5 つのなぜ？」 で深掘る高還元 SES が有利なポイント

1. **価格協議拒否の禁止 → なぜ？**  
   *発注者が協議に応じない行為そのものが違法化*  
2. **協議義務化 → なぜ？**  
   *交渉プロセスの証跡を残す書面（or 電磁的方法）交付が必須*  
3. **書面義務 → なぜ？**  
   *単価の決定根拠が数字で残るため“情報の非対称性”が崩れる*  
4. **非対称性解消 → なぜ？**  
   *エンジニア原価を透明化できる高還元 SES がロジックで優位*  
5. **ロジック優位 → なぜ？**  
   *適正マージンを説明しやすく、**強気で単価アップ交渉** が通りやすい*



---

## 4. 単価交渉フレームワーク（テンプレ）

1. **原価積み上げ**  
   - 人月あたり報酬  
   - 福利厚生・社保・営業費  
2. **バリューベース上乗せ**  
   - 生産性係数 × 10〜20%  
3. **競合比較**  
   - 派遣平均単価 vs SES 単価  
4. **リスクプレミアム**  
   - 長期契約割引 ↔ 短期追加費用  
5. **法令チェック**  
   - 改正下請法適用確認  
   - フリーランス法 60 日支払義務

---

## 5. リスクと代替案

| リスク | 対策 | 代替案 |
|--------|------|--------|
| 単価交渉行き詰まり | 第三者同席交渉（取引課・下請Ｇメン等） | 年度レビュー条項 |
| キャッシュフロー逼迫 | 手形禁止前倒しを提案 | ファクタリング（ただし改正法の要件確認必須） |
| 交渉コスト増大 | SaaS 型契約管理で証跡自動化 | 弁護士ドキュメントレビュー |

---

## 6. まとめ  

- **法改正＝交渉力の制度的補強**  
- **高還元 SES はロジック透明性を武器にレートアップ**  
- **5 つのなぜ × フレームワーク** 
これらを活用して“納得感のある金額”を提示しましょう。

> **Next Action**  
> 1. 自社平均還元率と派遣平均単価を突き合わせる  
> 2. 改正条文に沿った契約テンプレを整備  
> 3. 価格交渉促進月間（毎年 3 月 / 9 月）で実地運用し、KPI をモニタリング  

物価上昇の激しい昨今、法改正も始まっているところから報酬もより良くするための情報収集は不可欠です。
委託者とバトる必要はありませんが、不当に扱われていたのであれば健全な取り引きを行うことは大切ですね。

---

**参考文献・出典**
- [改正下請法・下請振興法の概要資料（2025-05-16 公表）](https://www.chusho.meti.go.jp/keiei/torihiki/2025/250516shitauke02.pdf) 
- [下請法・下請振興法改正法案の要綱（手形払い禁止・従業員基準追加）](https://www.meti.go.jp/press/2024/03/20250311002/20250311002-3.pdf) 
- [「下請法等改正法案」が閣議決定されました（経産省ニュースリリース, 2025-03-11）](https://www.meti.go.jp/press/2024/03/20250311002/20250311002.html)  
- [フリーランスの取引に関する新しい法律が11月にスタート！（厚労省リーフレット, 2024-11-01）](https://www.mhlw.go.jp/content/001261528.pdf)
- [フリーランス取引適正化法 ― 義務一覧（60日以内支払い 等）](https://www.mhlw.go.jp/content/001261528.pdf#page=4)
- [価格交渉促進月間フォローアップ調査結果（2024-06-21）](https://www.meti.go.jp/press/2024/06/20240621002/20240621002-ar.pdf) 
- [価格交渉促進月間 施策ページ（2025-04-21 更新）](https://www.chusho.meti.go.jp/keiei/torihiki/follow-up/index.html) 
- [SES還元率の正しい計算方法を徹底解説（SES企業還元率研究所, 2025-02-21）](https://www.ses-laboratory.com/ses-return-rate-calculation-guide/)
- [令和4年度 労働者派遣事業報告書（厚労省速報）](https://www.mhlw.go.jp/content/001273305.pdf)
MCPメモ

# そもそもMCPとは

AIの何か

## wikiによると

Model Context Protocol
https://en.wikipedia.org/wiki/Model_Context_Protocol
```
モデル・コンテキスト・プロトコル(MCP)は、大規模言語モデル(LLM)などの人工知能(AI)モデルが外部ツール、システム、データソースとデータを統合して共有する方法を標準化するために、Anthropicによって導入されたオープンスタンダードのオープンソースフレームワークです。
```

Anthropicの何か

# サイト見る

【MCPのトリセツ #1】MCPの概要と導入方法
https://zenn.dev/takna/articles/mcp-server-tutorial-01-install

# 単語を拾う

## AIエージェント
生成AIとは違うという認識

## Anthropic
Anthropicとは、OpenAIの元メンバーによって設立されたアメリカの人工知能のスタートアップ企業および公益法人である 。

## MCPサーバ
 ？？？

この辺見るか

MCPで変わるAIエージェント開発
 https://qiita.com/ksonoda/items/1c681a563a95a93975ff

 まずは、MCPとは、クライアントサーバ型らしい。
 クライアントは、ユーザが入力したテキストの意図を理解する（わかる）。そしてどのMCPサーバで実行すべきか判断し、送信する（多少わかる）

 つまり、MCPクライアントはリクエストを受け取って動き回って、MCPサーバで処理する？
 AIエージェントと何が違うのか

# 次にやること

* いくらか種類があると思うので、その辺を調べていく
* AIエージェントとMCPの違いを考える
RailsのPrivateメソッドとは？Strong Parametersの実体

# 概要
Rails初学者は学習教材を見ていると、RailsアプリのController内に以下のようなメソッドを見かけると思います。
```ruby
class SessionsController < ApplicationController
.
.
.

private
    def user_params
    params.require(:user).permit(:name, :email, :password)
    end
end    
```
privateだから情報が簡単に漏れないようにするためでしょ？って思った方、正解です🥳
publicである場合どのように情報が漏れるのか、privateをすることで何が実現できるのかについて話をしようと思います。  
# Strong Parameters
例えば、ユーザー登録画面があり、Railsが受け取る属性は以下の通りとします。
1. name
1. email
1. password
1. password_confirmation(パス再確認)
1. admin (管理者権限のカラム。Boolean型)

Controllerでは、下記のようにparams[:user]とすることで、上のリストの５項目全てが取得されます。それが、userへ代入、saveされることでDBへ保存する流れです。
```ruby
def create
    user = User.new(params[:user])
    if user.save
    .
    .
end
```
しかしその際、悪意のあるユーザーがadminのboolean型をtrueにするコマンドをcurlコマンドで送りつけると、アプリ内の最強権限を持つユーザーになれるということが実現できるみたいです。（よくわかんないけど、実際に試しにやってみたいですね👀）　　

なので、この場合createアクションに送られるデーターの種類を必要な数だけ絞って、且つ他のアクションと分けるために、privateと呼ばれるメソッドの内部で定義することとします。
```ruby
def create
    user = User.new(user_params)
end
    
    private
        def user_params
        params.require(:user).permit(:name, :email, :password)
        end
end
```
こうすることで、curlコマンドで送信されるadminはそもそもparameterとして送られることはなく、管理者権限を悪用されるということはなくなるわけです。  
この手法（privateメソッド内でデータ取得ロジックを書くこと）をStrong parametersといい、セキュリティの向上が見込まれます。

privateメソッド以下で:name, :email, :passwordを取得、user_paramsメソッドの戻り値としての処理を終え、User .newの引数として、渡されるわけです。
この弱々なセキュリティのことをマスアサインメント脆弱性とも言ったりするようで、対策術は他にもあるみたいです。👀

初学者はとりあえずここまで理解できてればいいかもしれません😭
【備忘録】TailscaleをproxmoxのLXC(ubuntu)で使う

## 環境
proxmoxVE 8
↓
ubuntu24.04(LXC)
## やり方
まずインストール
```
curl -fsSL https://tailscale.com/install.sh | sh
```

次に自分のアカウントに接続するために以下のコマンドを入力
```
tailscaled --tun=userspace-networking --socks5-server=localhost:54355 --outbound-http-proxy-listen=localhost:54355 & ...
```

```
tailscale up --accept-routes --advertise-routes=192.168.0.0/21
```
※192.168.0.0/21はネットワーク範囲によって分けてください。
そしたら以下のような画像が出てくるので、出てきたURLにログインすると完了

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3795539/bac174c9-1508-48dc-90ee-9b1e696f5493.png)

## 途中のコマンドを解説

#### ~1つ目～
```
tailscaled --tun=userspace-networking --socks5-server=localhost:54355 --outbound-http-proxy-listen=localhost:54355 & ...
```
#### ~2つ目～
```
tailscale up --accept-routes --advertise-routes=192.168.0.0/21
```
このコマンドを解説します※AI補助

### ～～～～1つ目のコマンドの解説～～～～

これは Tailscale のデーモン（バックグラウンドプロセス）を起動するコマンドです。オプションの意味は以下の通りです

`
--tun=userspace-networking
`
TUN デバイスを使用せず、ユーザースペースでネットワーク機能をエミュレートします。主に ルート権限がない環境や、仮想化環境・制限された環境（例：ブラウザやサンドボックス）向け に使われます。

`--socks5-server=localhost:54355`
このデバイス上で SOCKS5 プロキシを localhost:54355 に立ち上げる 設定です。これにより、他のアプリケーションは Tailscale ネットワーク経由でインターネットアクセスを SOCKS5 経由で行えます。

`--outbound-http-proxy-listen=localhost:54355`
HTTP プロキシとしても同じポート（54355）でリッスンします。つまり、HTTP/HTTPS トラフィックをプロキシできるようになります。

`&`
最後の & は、シェル上でこのプロセスをバックグラウンドで実行するという意味です。

### ～～～～2つ目のコマンドの解説～～～～

これは Tailscale クライアントを接続（ログイン）し、特定の機能を有効にする コマンドです。

`--accept-routes`
他の Tailscale ノード（マシン）から広告されたルート（経路）を受け入れる設定です。これにより、例えば別のノードが提供するローカルネットワークにこのマシンからもアクセスできるようになります。

`--advertise-routes=192.168.0.0/21`
このノードが `192.168.0.0/21` のネットワーク範囲へのルートを他のノードに「広告（Adverise）」します。つまり、「このノード経由でこの範囲のネットワークにアクセスできるよ」と Tailscale ネットワーク内に知らせる機能です。
例: 他のノードが自宅の PC にアクセスしたいとき、このルートがあることで `192.168.0.x` のローカル機器へ接続できる。

## 最後に
解説に関してはほぼchatGPTなんで間違ってたらコメントお願いします。
MILK-V:極小 RISC-Vデバイスを試す

# Milk-V Duo 256M を偶然発見
ちょうど東京方面へ出社する用があったので、ついでに秋月によってMOSFETでも買おうと、いろいろ探している時にとても惹かれるものを見つけた。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/8a0df804-b177-4855-abed-6f447569f383.png)

このサイズでLinuxが動いて256Mも使えるんですか！しかも1TOPSのNPUまで乗ってるって。
1TOPSがどの程度の処理できるか知らんが、すげーな。

いや、確かに256Mじゃぁ難しいもは動かないけどなんかLinuxサーバとしては動くんじゃないの…。

公式情報ページのピン情報見るといろいろできそうでワクワクしますね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/7c6f55cc-b81f-494e-b232-d826f5444025.png)

# 購入
ということで、帰宅途中に秋月に寄って買ってきました。

ホームページで「色はランダムで選べない」と記載があります。いくつか眺めたところ、店頭にある商品の箱はピンク色でした。
中が違う色だったらいいなぁと思いつつ、あけるとばっちりピンクでした。

## 起動まで

日本は変態がたくさんいるので、すでに試している方がいるようです。ありがたい！
先達の手順をそのまままねることにします。

https://qiita.com/kmaedaz/items/178c4c5d5eca4a31083c

## イメージ書き込み
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/dca8f7df-85ce-4c6c-aff7-3225d4ebd730.png)

## 起動

書き込みには成功しまして、起動します。
起動しますといってもUSBにぶすっとさすだけです。青いランプが点滅を始めたらログインのためにSSHをうちます。2025年5月時点では何もせずにSSHがとおってログインできました。

そののち、sshを打ちます。** え…パスワード... ** 往年の間でいくつかためしたところ、正解はmilkvでした。

```
> ssh root@192.168.42.1
root@192.168.42.1's password: ここでmilkvを入力
[root@milkv-duo]~# ls
[root@milkv-duo]~# pwd
/root
```

…早い。

```
[root@milkv-duo]~# cat /proc/cpuinfo
processor       : 0
hart            : 0
isa             : rv64imafdvcsu
mmu             : sv39
```

改めてスペックは以下のような感じ。RISC-VでCPUは2つ載せているけど一つはハード周りの制御で仕事しているらしい。

|  | Duo 256M |
|:-:|:-:|
| SoC| SG2002  |
| RISC-V CPU |C906@1Ghz + C906@700MHz|
| Arm CPU|1 x Cortex-A53@1GHz|
|MCU|8051@6KB SRAM|
|TPU|1TOPS@INT8|
|Memory|SIP DRAM 256MB|
|USB|1 x Type-C for power and data, USB Pads available|

# Lチカ

ちょっくらPINの状態を見ます。コマンドduo-pinmuxで確認できるようです。
これで確認するとGP14があまり使ってなさそうです。

```
[root@milkv-duo]~# duo-pinmux -l
GP0 function:
[ ] CV_SCL0
[v] UART1_TX
[ ] UART2_TX
[ ] GP0
[ ] WG0_D0
[ ] DBG_10

GP1 function:
[ ] CV_SDA0
[v] UART1_RX
[ ] UART2_RX
[ ] GP1
[ ] WG0_D1
[ ] WG1_D0
[ ] DBG_11

…中略…

GP14 function:
[ ] SDIO0_PWR_EN
[v] GP14

…後略…
```

裏返してみると…GP14は後ろから2番目ですね。
3番目のGNDとGP14にLEDをつなぎます。

マイコンあるあるでややこしいのですが、GPの番号となにやらＰＩＮ番号は違うということで、以下の表からGP14のNUMを確認します。494のようです。
https://milkv.io/zh/docs/duo/getting-started/duo256m

GP14を出力用に設定していきます。

```
[root@milkv-duo]/sys/class/gpio# ls
export  gpio354  gpiochip352  gpiochip384  gpiochip416  gpiochip448  gpiochip480  unexport
[root@milkv-duo]/sys/class/gpio# echo 494 > export
export  gpio354  gpio494  gpiochip352  gpiochip384  gpiochip416  gpiochip448  gpiochip480  unexport
[root@milkv-duo]/sys/class/gpio# echo "out" > gpio494/direction
```

これで、0や１を書き出すとLEDがON/OFFされます。LinuxからGISPをArduinoのように容易に触れるのは私にとっては少し新鮮です。

```
[root@milkv-duo]/sys/class/gpio# echo "0" > gpio494/value
[root@milkv-duo]/sys/class/gpio# echo "1" > gpio494/value
```

![PXL_20250516_144340934.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/121950/41c5e320-a2cb-45a3-83fe-3672b884ae2d.jpeg)
PHP：条件分岐とループ処理をざっくり、手を動かしながら整理（復習）してみた

## はじめに

この記事では、PHPの基本的な制御構文である「if文（条件分岐）」と「繰り返し処理（ループ）」について、簡単なコード例とともに整理してまとめています。

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

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

個人的にPHPのキャッチアップをしたくて、勉強中の初学者として備忘録を兼ねて記録しています（仕事終わりに少しずつまとめています）。

プログラムの中でよく使う「**条件分岐**」や「**ループ処理**」を理解しておくことが、今後のステップアップに重要だと感じたためです。

## 内容

PHPでは、条件によって処理を分けたり、同じ処理を繰り返したりするために「制御構文」を使います。

**参考文献**

https://www.php.net/manual/ja/language.control-structures.php

https://ja.wikibooks.org/wiki/PHP/%E5%88%B6%E5%BE%A1%E6%A7%8B%E9%80%A0

### if文（条件分岐）

```php
<?php
  $age = 20;

  if ($age >= 18) {
    echo "大人です";
  } else {
    echo "未成年です";
  }
?>
```

* `$age` の値が18以上なら「大人です」と表示。
* それ以外は「未成年です」と表示。
* `>=` は「以上」を意味する比較演算子。

**キャッチアップ画面**

![スクリーンショット 2025-05-20 20.38.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/16a05ec9-ca5f-4324-8f36-f5734b3bbf3e.png)

**参考文献**

https://www.php.net/manual/ja/control-structures.if.php

### for文（ループ）

```php
<?php
  for ($i = 1; $i <= 5; $i++) {
    echo $i . "番";
  }
?>
```

* `$i = 1` から始まり、`$i <= 5` の条件でループします。
* `echo $i . "番";` により、1から5までの数字が1行ずつ表示されます。
* `++` はインクリメント演算子（1ずつ増加）。

**キャッチアップ画面**

![スクリーンショット 2025-05-20 20.39.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/59c896e8-3443-44c2-8334-ec2255dfebba.png)

**参考文献**

https://www.php.net/manual/ja/control-structures.for.php

### if文とfor文の組み合わせ

繰り返しの中で条件分岐を入れることも可能です。以下は、奇数と偶数を判定して表示する例です。

```php
<?php
  for ($i = 1; $i <= 5; $i++) {
    if ($i % 2 === 0) {
      echo $i . "は偶数です<br>";
    } else {
      echo $i . "は奇数です<br>";
    }
  }
?>
```

* `$i % 2 === 0` は「2で割った余りが0（偶数）」を意味します。
* それ以外は奇数として処理。
* 条件分岐とループを組み合わせることで、柔軟なロジックが実現できます。

**キャッチアップ画面**

![スクリーンショット 2025-05-20 20.39.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/3ca8cca4-92c9-4b4c-bc9a-c3d602ae2bec.png)

**参考文献**

https://codelive.jp/%E3%80%90php%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%80%91for%E6%96%87%E3%83%AB%E3%83%BC%E3%83%97%E5%87%A6%E7%90%86%E3%82%92%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E3%81%97%E3%82%88%E3%81%86%EF%BC%81/

https://qiita.com/sakuma-s-Qiita/items/73ccdf969a73d742246d

## まとめ

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

条件分岐や繰り返し処理は本当によく使うので、しっかり理解しておきたいなと改めて思いました。

このあとも `while` 文や `switch` 文、ネスト構造なんかも含めて、制御構文をもっと深掘りしていく予定です！
DMARC　p=rejectを実現するために実施したこと

# はじめに
前回の記事に関連して、DMARCの記事です。
BIMI（Brand Indicators for Message Identification）導入の前提として、筆者がDMARC p=rejectを実現するために実施した手順・流れについて備忘録として残しておく。

# 背景
筆者はBtoC企業の情シスとして勤務しており、顧客向けにメールを送信するのは日常茶飯事であった。
そんな中、2023年12月頃にGmail送信者ガイドラインというお達しがあり、メールが届かなくなるという可能性が出てしまったことから、至急DMARCの導入を進める必要があった。

■Gmail送信者ガイドライン
https://support.google.com/a/answer/81126?hl=ja

# What's DMARC?
送信元ドメインの認証技術であるSPF（Sender Policy Framework ※1）とDKIM（DomainKeys Identified Mail ※2）を組み合わせ、メールの認証と送信元の信頼性を確認する規格。

※1 SPF：IPアドレスを使用し、送信元メールサーバの正当性を確認する規格。

※2 DKIM：メール送信時に電子署名を行い、受信時に検証することで、メールが改ざんされていないか、または不正なドメインから送信されていないかを確認する規格。

# DMARC=passとなる条件
**前提知識**
・Envelope-From（エンベロープ フロム）
　簡単に言えば、SMTPサーバで認識するドメイン。
・Header-From（ヘッダー フロム）
　簡単に言えば、メール本文に記載されるドメイン。
・SPFはEnvelope-fromのドメインを認証する。
・DKIMは Header-From のドメインを認証する。

**DMARC=passとなる条件**
・SPF認証でpassかつアライメント（※3）がOK。
・DKIM認証でpassかつアライメントがOK。

※3 アライメント：メールに表示される送信元メールアドレス（Header-From）が、SPFやDKIMで認証したドメインと一致させること。
アライメントがOKということは、"Header-Fromが認証されている"ということ。すなわち、"本文の差出人は認証されている"ということを示す。
なお、SPFでチェックすることをSPFアライメント、DKIMでチェックすることをDKIMアライメントと呼ぶ。

**調査を進める上でよく出会ったパターン**
・"Envelope-from"と"Header-From"が異なり、SPFのみ登録されているパターン
例：Salesforce。
"Envelope-from"はSalesforceのドメインで、"Header-From"は自社のドメイン。SPFはSalesforceで登録済み。DKIMは登録しておらず。
SPFはpassされるが、SPFアライメントでNGとなり、"DMARC=fail"となる。
# では、どのようにDMARCの導入を進めたか
①送信メールドメインと送信元サーバ（SMTPサーバ）の洗い出し
具体的には、rua（集約レポート）の分析で行う。以下のようなDMARCレコードをp=noneで指定し、report@hoge.comにレポートを送信させる。
```DMARCレコード
_dmarc.hoge.com TXT "v=DMARC1; p=none; aspf=r; adkim=r;  rua=mailto:report@hoge.com"
```
送信させたruaレポートは、ツールを利用して分析する。
※筆者は有償のツールを利用したが、無料で利用できる優秀なツールが存在する。（DMARCvisualizer等）

次に洗い出した送信メールドメインと送信元サーバのIPアドレス以外に、以下についても調査した。

■基盤
 メールサービスが稼働している基盤を確認する。SaaSの場合、DKIMを登録してくれない場合がある。

■利用目的
対顧客向け（BtoC）メール or ビジネス（BtoB）メールであること（すなわち、受信メーラーがOutlookやGoogle Workspace等でGmailではないこと）を確認する。
Gmailガイドラインによると、送信メール数が5000通を超える場合はSPF・DKIM両方対応する必要がある。

整理するとこんな感じ。
（例）
|サービス名|送信ドメイン|IPアドレス|基盤|利用目的|
|---|---|---|---|---|
|Aサービス |@hoge.com |xxx.xxx.xxx.xxx |オンプレ|BtoBメール|
|Bサービス |@ex.hoge.com |yyy.xxx.xxx.xxx |IaaS|BtoCメール|
|Cサービス |@hoge.com |zzz.xxx.xxx.xxx |SaaS|BtoCメール|

整理した結果、どのように対応を進めるかを整理する。
・基本的にはSPF&DKIMは設定する。
・しかしながら、一部にはDKIMに対応していないサービスがある。
・その際は、Gmailガイドラインに準拠する必要があるかどうかを判断する。
・必要が無ければ、SPFのみの設定とする。
・準拠させる必要がある場合は、メールサービスの変更を検討する。

幸い筆者の場合はメールサービスの変更という最悪のパターンが発生することはなかった。

対応方針が確定したら、あとはひたすらにSPFとDKIMを登録を進める。

だいたい、DMARC=passが98％くらいでp=noneからp=rejectに変更した。
記念すべき第1回 tableau データ分析

はじめまして！ 
記念すべき第1回目となる今回は、data saberになるべく勉強中の Tableau を使い、「2023 年 都道府県別家賃データ」をもとにダッシュボード（Viz）を作成・分析した結果記事にしたいと思います。

今回ダッシュボードを作成し、Viz作成した観点、分析結果となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/9fe71e01-08b5-4444-80e6-865b97ed80a0.png)

※まだまだ技術が足りず、気になる点、改善点あると思いますが、最後まで見ていただけると幸いです。

Viz1 全国家賃ヒートマップ
言わずもがなですが、関東件を中心に、中部、関西地方が高い結果となっております。
地理的な情報だけでなく、家の建て方、構造にも注目してViz作成しております。

Viz2 建て方 × 構造 クロス分析
非木造と木造建築を比べると、一戸建てに関しては、非木造の方が高くなっておりますが、
共同住宅と長屋建に関しては、木造の方が高くなっております。
（非木造の方が高いと思っておりました。。）

共同住宅×非木造でハイライトしてみると、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3872484/70705dc0-7337-4d21-b957-fc4a7b6a79b9.png)
関東、関西の一部都道府県のみ色が濃く（家賃が高い）なっていると思います。
⇒昨今のマンション価格の高騰などが影響されている？のかもしれないです。

Viz3 都道府県ランキング上位/下位5県
最後に家賃の都道府県ランキングの上位と下位の都道府県（5位）を抽出してみました。
分析結果としては、上位圏も下位圏でも、ヒートマップの偏りは、そこまで変わらないと感じました。


最後に
普段は、なんとなく首都圏の家賃は高いだろうと感じているぐらいですが、
建物の構造、建て方、でも様々な見方があると感じました。日常の中に無数にあるデータをtableauで可視化出来たらどんなに面白いとだろうと思う一方、
見やすくて、分析しやすいVizを作るには、まだまだ時間がかかりそうです。
ダッシュボードにして、動的に分析できることは、とても便利だしtableauすごい！と感じた次第です。
日々精進して、学習していきたいと思います。

最後まで見ていただきありがとうございましたmm
次回は、ポケモンのデータを使った分析をしてみたいと思います！
VercelでReactアプリを簡単デプロイ！

# VercelでReactアプリを簡単デプロイ！

大学時代に所属していた部活動のホームページをリニューアルして欲しいとのことで、Reactを使って作成しました。

ホスティングサービスとして、以前はNetlifyを使っていたようですが、今回は **JavaScriptとの相性が良く、シンプルに公開できる [Vercel](https://vercel.com)** を採用しました。  
（正直、シンプルに使ってみたかったというのも理由の一つです…！）

---

## 🌱 前提条件

以下の準備ができている前提で進めます：

1. Reactでプロジェクトを作成済み（例：`npx create-react-app my-app`）
2. GitHubにプロジェクトのリポジトリを作成・push済み

---

## 🚀 デプロイまでの流れ

VercelではGitHub連携を使うことで、非常に簡単にデプロイできます。

ここでは以下の手順に沿って説明していきます：

- 手順 3: GitHubとVercelの連携  
- 手順 4: 公開したいリポジトリを選択  
- 手順 5: デプロイ完了！

---

## 🔗 手順 3: GitHubとVercelの連携

1. [Vercel公式サイト](https://vercel.com) にアクセスし、アカウントを作成またはログインします。  
   （GitHubアカウントでのログインがおすすめです）

2. ダッシュボード右上の **「Add New」** ボタンをクリックし、**「Project」** を選択します。

3. プロジェクトのインポート画面に遷移するので、**GitHubアカウントを選択**します。  
   > ※ 初めての場合はここでGitHubアカウントとのバインド（連携許可）を行う必要があります。

4. 表示されたリポジトリ一覧から、対象のReactプロジェクトを選択し、**「Import」** をクリックします。

---

## ⚙️ 手順 4: プロジェクト設定

プロジェクトの設定画面では、特に変更がなければ、そのまま **「Deploy」** ボタンをクリックすればOKです！

---

## ✅ 手順 5: デプロイ完了！

数十秒ほどでデプロイが完了し、  
`https://<プロジェクト名>.vercel.app` の形式で **自動的に公開URL** が生成されます。

また、GitHubと連携しているため、**コードをPushするたびに自動で再デプロイ**してくれます。  
運用も非常にスムーズでおすすめです！

---

## 🎉 おわりに

VercelはReactやNext.jsと相性が抜群で、数クリックで本番公開まで進めるのが最大の魅力です。

部活動サイトやポートフォリオなど、**気軽にWebアプリを公開したい人**には特におすすめのサービスです！

「デプロイでつまずきたくない…」という方は、ぜひ一度Vercelを試してみてください。

---
au契約のiPhoneの人、ご請求内容などがWiFiオフにしても見れない原因

# auの契約の人でiPhoneを使っている人
## ご請求内容などがWiFiオフにしても見れない原因

<table>
<tr><td>

***MyAu*** アプリから **請求内容確認** や、**プラン変更** などしようとすると、本来は、**Web版** の ***MyAu*** に切り替わりますが、このとき、WiFiオフにしてるのに、
* WiFi-OFF:no_entry_sign:
* VPN OFF:no_entry_sign:
* パソコン使用:no_entry_sign:

    こんな画面ですね！:point_right:

と言う画面に出くわしたことがある方、いらっしゃると思います。
***AU*** に聞いてもあいまいな、答えしか返ってきませんが...
そんな皆様に朗報です！</p>
    </td>
<td>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1890015/422a9605-bd64-4de0-9436-7c1081e9448b.png" width="80%">
</td>
</tr>
</table>

# 対策を googleのAI、Gemini に教わりました
結果的に以下の通りです
## 1) WiFiのオフ
* タッチスクリーンを上から下へのスワイプ操作で、出てくるコントロールパネルの **WiFiオフ** は、WiFi通信はONのまま、WiFiの接続先との通信を切断するだけです。WiFiはオフになっていません
* :gear:設定を開いてでてくるWi-Fiを選択して、確実にOFFにしてください
## 2) プライベートリレーをオフ
* 設定を開くと一番上に出てくる***自分の名前*** を選択して、「**iCloud**」を選択
* 下の方にある「プライベートリレー」をオフにしてください
* WiFiオフってるのに、警告が出て来る方、これが原因です！

# おわり
以上、お役に立てましたら幸いです
移動体通信におけるサービス品質の体系化

# 移動体通信におけるサービス品質の体系化
小川清(*)渡辺尚(**)
名古屋市工業研究所(*)静岡大学(**)
# はじめに
正確性、信相手相手が正移動による移動体通信におけるインタネット利用に伴い、様々な通信規約が提案されている。これらの通規約のサービス品質を評価するためには、多くの指標を考えることができる。本研究では,ソフトウェア分野において検討されてきたソフトウェア製品の品質体系を,移動体通信のサービス品質に適応することを検討した。
# 1 ISO/IEC9126
ISO/IEC9126は,ソフトウェアの品質に関する体系的な定義である。これを通信サービスの評価に用いることにより,移動体通信のサービス品質の体系化を試みた。
機能性,信頼性,使用性,効率性,保守性,移植性,利用時の品質特性に区分されている。れらの品質特性を,さらに副特性に細分化している。本研究では,これらの特性,副特性について,デジタル無線通信,経路制御,無線通信における経路制御の3つの観点で,実際の品質に関連する事項を整理した。なお各品質特性に副特性として含まれる規格適合性は,別途考慮することとした。
ISO/IEC9126におけるソフトウェア製品の能力を,デジタル無線の能力,インタネットにおける経路制御の能力,移動体通信における経路制御の能力と読み替えて評価項目を列記した。
# 2 能性
機能性は,要求に合う機能で、合目的性,正
確性,相互運用性,機密性がある。
機能性デジタル経路制御移動体経路
ヾ正しい。しい。
ータカ
正しい。
経路制御の
正確さ
相互運用インタネッ他の経路他の経路制
性
トとの相互制御規約御規約との
運用が可との相互相互運用可
能
運用可能能
機密性受性,設定権限不必要な経
不正変更の機密,権路制御の傍
可能性,限付き経受,不正変
妨害性,路制御情更,妨害をで
正当利用報
3信頼性
きなくする。
信頼性は,実行水準を維持するもので、成熟
性,障害許容性,回復性がある。
信頼性デジタル無経路制御移動体経路
線
制御
成熟性、一ドウェ故障時の同左
ソフトウ経路の確
ア,通信保
、による故
障回避
障減少性
障害許ェールセ同左
容性
、フェー丿
ソフト
回復性平均回復時同左
平均故障間
4使用性
同左
同左
無線
制御
合目的性に縛ら相手に辿り移動中も経
ない着ける路制御
StructureofQuaIityofServiceonMobile
digitalnetworkandroutingprotocol
OGAWAKiyoshi(*),
NagoyaMunicipal
lndustl、ial
lnstitute(*),ShizuokaUniversity(**)
使用性は,理解性,習得性,運用性,注目性
がある。注目性は,経路制御が自動的に行うこ
とを前提とし,考慮しないこととした。
使用性デジタル経路制御移動体経路
無線
制御
理解性直感的操通信規約同左
の単純さ
習得性
運用性
注目性
平均習得経路制御同左
時間の設定
平均操作運用上設同左
時間定の変更
可能性
同い

# 5 効率性
効率性は,時間効率性と資源効率性がある。
効率性デジタル経路制御移動体経路
無線
制御
時間効率通信速度新たな経同左(頻度は
性
利用可能有効時間同左
時間内の制御
省電力省資源同左
身体的安信頼性、使同左
全性用性
必要通信高速経路同左
達成率制御
路制御に高い)
に要する
時間
資源効率周波数あ経路制御同左
性
たりの通に使用す
信速度る通信比率
# 6 保守性
保守性は,修正能力で、解析性,変更性,安定
性,試験性がある。
保守性デジタル経路制御移動体経路
無線
制御
解析性
変更性
安定性
試験性
定
音比測各経路での同左
追跡
ソフトウェ動的経路制同左
無線御
、測事故ループ回避同左
回数
測定装置試験方法ハンドオフ試
(traceroute)験
# 7 移植性
移植性には,環境適用性,設置性,共存性,
置換性がある。
移植性デジタル経路制御移動体経路
無線
制御
環境適応環境の定新たな環新たな機器
性
設置性
共存性
置換性
義と範囲境の追加の追加への
への対応対応
ンテナ個別の環同左
の設置性境でのカ
の無線異なる経同左
との共存路制御と
の共存
上位機種上位互換同左
への置換規約

# 8 利用時の品質
利用時の品質には,有効性,生産性,安全性,
満足性がある。
利用時のデジタル経路制御移動体経路
品質
有効性
生産性
安全性
満足性
無線
制御
# 9 まとめ
具体的に,デジタル無線,経路制御,移動体経路制御について,各品質特性,副特性を記述してみると,多くの視点が必要であることが理解できる。
各項目間に,必ずしも直交性があるとは言えない。例えば,共存性と相互運用性は,同一の指標と考えることもできる。共存性はTCPとUDPのようにIPの上で共存するもの。相互運用性は,カプセル化するものとされるものとの関係と理解すると別の指標であることが分かる。
具体的な例示があると指標の違いが理解しやすくなる。
# 10 今後の課題
各項目には,測定法に関する記述,関連する測定項目など,必ずしも画一的な記述にはなっていない。また、経路制御、移動体経路制御の評価項目には、通信規約に直接関係する事項と、実装に依存する部分と、設定などの運用に関係する部分とがある。
今回対応づけした評価項目に基づき,個々の通信規約を評価し,強み,弱み,リスクを分析するとともに,実際の測定法,測定値またはシミュレーションによる計算値の組み合わせ方法を検討し、個々の通信規約の評価に用いたい。
# 参考文献
[l] ISO/IEC9126　JISX0129)ソフトウェア製品品質
[2] CDMA方式と次世代移動体通信システム,小川明監修,トリケップス社
Three.jsのOrbitControlsをもっと使いこなす！よくあるTips 5選

# Three.jsのOrbitControlsをもっと使いこなす！よくあるTips 5選

Three.jsで3Dモデルを扱う際、`OrbitControls`はカメラ操作の基本ツールです。  
この記事では、初心者がよくつまずくポイントや「ちょっと便利」な設定をまとめました。

---

## ✅ 1. コントロールの初期化は必ず「レンダーループ外」で！

```js
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

const controls = new OrbitControls(camera, renderer.domElement);
controls.enableDamping = true; // なめらかに動く
controls.dampingFactor = 0.05;
→ controls.update() をアニメーションループ内で毎フレーム呼び出すのも忘れずに！

✅ 2. ズームだけONにしたいならこれ！
js
コピーする
controls.enableRotate = false;
controls.enablePan = false;
controls.enableZoom = true;
→ ズームだけ使えるビューアを作りたい時に便利。

✅ 3. 自動回転（オートローテート）機能をONにする
js
コピーする
controls.autoRotate = true;
controls.autoRotateSpeed = 2.0; // 数字を上げると早くなる
→ 放置時にモデルが回転して見栄えがよくなる。

✅ 4. 回転の制限（上下方向）をかける
js
コピーする
controls.minPolarAngle = Math.PI / 3;
controls.maxPolarAngle = Math.PI / 1.5;
→ カメラが真上や真下に行き過ぎないように制御できます。

✅ 5. パン操作だけを使いたい時
js
コピーする
controls.enableZoom = false;
controls.enableRotate = false;
controls.enablePan = true;
→ 2Dビューに近いインターフェースを実現できます。

💡 おまけ：イベントに反応する
js
コピーする
controls.addEventListener('change', () => {
  console.log('カメラが動きました');
});
→ 操作が行われたタイミングで他の処理を呼びたいときに使えます。

🚀 おわりに
OrbitControlsはちょっとした設定で表現の自由度が大きく変わります。
Three.jsを使ったインタラクティブなビューの土台として、しっかり理解しておくと後々かなり役立ちます！
大きな数値を 3 けたごとにカンマ区切りで出力 Swift編（paizaランク C 相当）

## 概要
Paiza問題集で手こずったところを備忘録として記録します
※他コードの解き方でより良くなるなどありましたら、お申し付けください！

→ご指摘あり、本来数値表記は、位の小さい後ろからカンマを挿入していきますので、こちら回答の改善が必要になります。その内容を反映させたものをまた編集してのっけたいと思います
[問題はこちら](https://paiza.jp/works/mondai/stdout_primer/stdout_primer__specific_split_step6)

## 解答コード
```Swift:Swift
import Foundation

// 入力値を受け取る
let inputNumber = readLine()!

// for文で1文字ずつ取り出す
for fetchedCharacter in 0..<inputNumber.count {
// 0文字目はカンマなし、かつ3文字単位でカンマを出力
if fetchedCharacter % 3 == 0 && fetchedCharacter != 0 {
// 改行なしで出力
print(",", terminator: "")
}
// 文字列が今何文字目かを判定するメソッド
let index = inputNumber.index(inputNumber.startIndex, offsetBy: fetchedCharacter)
// 3文字ごとにカンマ区切りで出力
print(inputNumber[index], terminator: "")
}
```
【Nextjs】.envに設定したURLが読み込まれないエラーの解決方法について

# はじめに
Nextjsでアプリ開発中本番環境のURLが読み込まれていないエラーが表示され、そちらの解決方法について記事にします。

<br>

【修正前のコード】

```.env
API_URL= xxxxxxxxxx
```

```.tsx
const API_URL = process.env.API_URL || "http://localhost:8787";
```


# 解決方法
NEXT_PUBLIC_を使用する

```.env
NEXT_PUBLIC_API_URL= xxxxxxxxxx
```


```.tsx
const API_URL = process.env.NEXT_PUBLIC_API_URL || "http://localhost:8787";
```

# 参考
https://refine.dev/blog/next-js-environment-variables/#test-environment-variables


# おわりに
今までNEXT_PUBLIC_の意味を理解せず使用しておりました。
勉強になりました。

<br>


# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてください！
▼▼▼

https://projisou.jp
PowerBIのセマンティックモデルとは

ただのひとりごと(アウトプット)。

PowerBIのセマンティックモデルとは。
聞いたことあるけどなんとなくで通り過ぎていて、言語化できない内容だったのでこの機会にアウトプット思いました。

セマンティックモデル🟰PowerBIで必要なデータセット

セマンティック(意味的な)モデル(型、模型)なので、PowerBI上で使用される意味のあるデータセットという解釈がしっくりきました。

前提:よいレポートはレポートの視覚化<視覚化することでビューワーに意思決定をさせる、経営判断になるレポートです。

では、経営判断や意思決定を促すレポートとはなにかとなりますが、データの視覚化以上に意味のあるレポートだと思います。

そのようなレポートを作製するには、必要なデータを過不足なく使用して、データの正規化を行い、適切なリレーションシップを組むことでテーブル間の関係性を示し、日付テーブルが年月日と順番立てられており、メジャーやDAXで集計を行い、何を意味するデータなのか適切なデータ形式(フォーマット)やラベル付が行われている必要がある。RSL(ロールレベルセキュリティ)で見せたい相手だけに見せたいデータを選んで表示することで、セキュリティを保つ(情報漏洩の防止)を行う。

レポートがセマンティックではないと、そのレポートが何を表しているのか、開発者や依頼者の意図が分からない。ビューワーもただ視覚化されたデータを見ても、何をしたらいいのかわからず、ふーんそうなんだと素通りしてしまう。次の行動に繋げられない。これだとせっかく作っても使用されないので作るだけ無駄になるし、開発費だけでなく保守や管理費用もかかるので非常にもったいない。

作るからには使ってもらえるようなにする必要がある。UIも大事ですが、綺麗なUIのためにはセマンティックなモデルがないとできない。ビジュアルだけでなくデータも綺麗にしないと、データ→ビジュアルで表現されているのでUIも使いづらくなる。

セマンティックモデルにすることで、本来の目的が果たせるようになるかと思います。


※内容が誤っている部分ありましたら教えていただきたいです。
material3-window-size-classとmaterial3.adaptiveが依存するWindowManagerのWindowSizeClassの違い

[androidx.compose.material3:material3-window-size-class](https://developer.android.com/jetpack/androidx/releases/compose-material3) と [androidx.compose.material3.adaptive:adaptive](https://developer.android.com/jetpack/androidx/releases/compose-material3-adaptive) が依存する [androidx.window:window](https://developer.android.com/jetpack/androidx/releases/window) にはどちらも `WindowSizeClass` があります。

## 共通点

どちらも `WindowSizeClass` という大画面対応におけるブレイクポイントに関する API になります。
どちらもブレイクポイントとなる値に差はなく同じものとなっています。

https://m3.material.io/foundations/layout/applying-layout/window-size-classes


## 違い

### WindowSizeClass の取得方法

`material3-window-size-class` は `Activity` を必要とするのに対して、`adaptive` 経由の `window` の場合は関数を呼ぶだけになります。

```kotlin
// material3-window-size-class
val windowSizeClass = calculateWindowSizeClass(activity)

// adaptive経由のwindow
val adaptiveInfo = currentWindowAdaptiveInfo()
val windowSizeClass = adaptiveInfo.windowSizeClass
```

### 扱う情報

`material3-window-size-class` の場合は `WindowSizeClass` しか持っていないため、Width/Height の Compact/Medium/Expanded のみ判定が可能になっています。 

一方の `window` の場合は `WindowSizeClass` だけでなく Foldable のヒンジの情報も持っています。また、`window` の 1.5.0 以上では `WindowWidthSizeClass` に Large/Extra-large の判定も可能になっています。


## どちらを使うべきか
扱いやすさや扱う情報の多さ的には `androidx.compose.material3.adaptive:adaptive` と `androidx.window:window` の方が優先されるように思います。
また、`androidx.window:window` は `WindowWidthSizeClass` に Large/Extra-large が対応される予定がある一方で、`androidx.compose.material3:material3-window-size-class` には動きがないので将来的にどちらかだけがメンテナンスされる可能性もありそうです。
4o Image Generationでオリジナル絵文字を作ってみた【ChatGPT】

## 4o Image Generationが登場
https://openai.com/ja-JP/index/introducing-4o-image-generation/

最近利用できるようになった4o Image Generationを使用してオリジナル絵文字を作成してみました。
ChatGPTで無料プランでも、1日に3枚まで画像を生成することができます。

## 4o Image Generationの特徴
| 特徴 | 4o Image Generation | レガシーモデル（DALL-E 3, Stable Diffusion, Midjourney等） |
|---|---|---|
| テキストレンダリング | 極めて高精度（日本語含む） | DALL-E 3は比較的高精度、Stable Diffusionは標準モデルでは苦手 |
| プロンプト理解 | 会話文脈を反映し複雑な指示も高精度に反映 | 1プロンプト＝1画像が基本、文脈保持は困難 |
| 画像の一貫性 | 会話を通じて一貫性維持・修正が容易 | セッション跨ぎで一貫性維持は難しい |
| 画像編集・修正 | チャット内で逐次修正・フィードバックが可能 | プロンプト再入力や特殊ツールが必要 |
| 画像のリアリズム | 写真的なリアルさ・自然さが大幅向上 | DALL-E 3はリアリズムに課題、Midjourneyや最新モデルは高品質 |
| 使いやすさ | ChatGPTに統合、直感的な操作 | 専用UIやプロンプト構文が必要な場合が多い |
| カスタマイズ性 | 標準では中程度、自然言語で制御 | Stable Diffusionはパラメータやモデルで高度にカスタマイズ可能 |
| 生成速度 | やや遅い傾向 | Stable Diffusionは高速、DALL-E 3は中程度 |
| オープンソース | 非公開 | Stable Diffusionはオープンソース |
| 商用利用 | OpenAI規約に準拠 | モデルごとに異なる（Stable Diffusionは自由度高い） |

中でも、日本語の文字列を画像内に入れられる点、出力画像の一貫性が維持できる点でDALL-E3から進化している実感がしやすいです。

## キャラクターがいいねしている絵文字を作りたい
[ChatGPT](https://chatgpt.com/)から画像生成を依頼することで、4o Image Generationで画像を生成できます。
- プロンプト
```markdown
可愛いカスタム絵文字を作成したいです。
- 可愛いライオンがグッドポーズをしている
- `いいね！`という文字列が大きく見やすく配置されている
- 真っ白でシンプルな背景
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079931/f9d5a2bf-8657-478e-8485-1d226f52d15b.png)
早速それなりの絵文字ができました。
```markdown
- 全体的に立体的かつ質感を3Dにしてください。
- `いいね！`の文字のサイズを大きくしてください。
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079931/606bc15d-e1e8-4930-a3d2-dc129bbdf26d.png)
ライオンの片頬にだけひげの書きかけみたいなのがあるのが気になりますが、オリジナルの可愛い絵文字が2ラリーで作れました。

## このライオンと同じ世界のキャラクター仲間を作りたい
4o Image Generationでは画像の一貫性を維持できるため、同じチャットで引き続きこのライオンの仲間の絵文字を作らせてみます。
```markdown
いいですね！その調子です！
この画像と同じテイストでもう一枚画像を作成してください。
- 可愛いウサギがピースしてる
- `ありがとう！`という文字列が見やすく配置されている
- 全体的に立体的かつ質感は3D
- 真っ白でシンプルな背景
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079931/8e6104f5-35c3-4551-82d2-6ec1c08ccdd8.png)
同じ世界に出てきそうなキャラクターの絵文字が作成できました。
```markdown
いいですね！その調子です！
この画像と同じテイストでもう一枚画像を作成してください。
- 可愛いネコがバンザイしている
- `やったー！`という文字列が見やすく配置されている
- 全体的に立体的かつ質感は3D
- 真っ白でシンプルな背景
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079931/f915e693-868e-44a4-9535-94f4f2f10b96.png)
```markdown
いいですね！その調子です！
この画像と同じテイストでもう一枚画像を作成してください。
- 可愛いパンダが両手で泣くポーズとともに泣いている
- `悲しい`という水色の文字列が見やすく配置されている
- 全体的に立体的かつ質感は3D
- アイコンの縦横比
- 真っ白でシンプルな背景
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4079931/277a67bd-01cf-49e1-903b-7e44eed4ae44.png)

## 背景透過に使えるサービス
https://www.photoroom.com/ja/tools/background-remover

↑で背景透過を適用すれば、背景無しの絵文字になります。

## まとめ
1枚の画像生成に5分くらいかかるので、結構待ちますが、DALL-E3と比較して画像のクオリティが大幅に上がったように感じます。
【Next.js】useSearchParams() should be wrapped in a suspense boundary at page の解決方法

# はじめに
`Next.js`でbuild時に発生したエラーについて、その原因と解決方法をまとめました。

:::note warn
***この記事は<font color="Red">個人的なアウトプット</font>を目的として作成したものです。そのため、誤った情報や不足している内容が含まれている可能性があります。もし間違いや気になる点がございましたら、ぜひご指摘いただけますと幸いです***。
:::


# 現象
`Next.js`で`useSearchParams()`を使っていたところ、以下のようなエラーがビルド時に出力されました。

```
useSearchParams() should be wrapped in a suspense boundary at page 
```

このエラーは、`useSearchParams()`を使うコンポーネントが`<Suspense>`でラップされていないことが原因です。



# 解決方法
`useSearchParams()`を使用する際は、そのコンポーネントを`<Suspense>`で囲う必要があります。

今回の場合、`useSearchParams()`は`Header`コンポーネント内で使っていましたが、`Header`コンポーネント内部で`Suspense`を使ってもエラーは解消されませんでした。そのため、`Header`を呼び出す側（親コンポーネント）で`Suspense`を使う必要があります。

```react
mport { Suspense } from "react";
import Header from "../header";

const App = () => {
  return (
    <>
      <Suspense> 追加
        <Header />
      </Suspense> 追加
    </>
  );
};
```

このようにすることで、ビルド時のエラーは解消されました。


# 終わりに
今後もこのような細かい挙動に注意しながら、`React`と`Next.js`を深く理解していきたいと思います。


# 参考

https://nextjs.org/docs/messages/missing-suspense-with-csr-bailout

『useSearchParams()はSuspenseを忘れるな！』Zenn

https://zenn.dev/kofrah/articles/f2dce2da3e6aaf
テキストアートで円弧を書いて遊ぶ(ちょつと自信は、ない(論理的には、あっているはず?(証明できず?


いろいろ注意
----

- 過去ログを見よ!!!
- Arduinoでの予定は、未定
- ピタゴラスの定理を使う(r x r)=(x x x)+(y x y)




プログラム
----

オンラインコンパイラpaiza


```c++



#include <iostream>
using namespace std;

int i_sqrt(int n){
    //30
    if( n > (32*32-1) ) return 32;
    if( n > (31*31-1) ) return 31;
    if( n > (30*30-1) ) return 30;
    //20
    if( n > (29*29-1) ) return 29;
    if( n > (28*28-1) ) return 28;
    if( n > (27*27-1) ) return 27;
    if( n > (26*26-1) ) return 26;
    if( n > (25*25-1) ) return 25;
    if( n > (24*24-1) ) return 24;
    if( n > (23*23-1) ) return 23;
    if( n > (22*22-1) ) return 22;
    if( n > (21*21-1) ) return 21;
    if( n > (20*20-1) ) return 20;
    //10
    if( n > (19*19-1) ) return 19;
    if( n > (18*18-1) ) return 18;
    if( n > (17*17-1) ) return 17;
    if( n > (16*16-1) ) return 16;
    if( n > (15*15-1) ) return 15;
    if( n > (14*14-1) ) return 14;
    if( n > (13*13-1) ) return 13;
    if( n > (12*12-1) ) return 12;
    if( n > (11*11-1) ) return 11;
    if( n > (10*10-1) ) return 10;
    //1
    if( n > (9*9-1) ) return 9;
    if( n > (8*8-1) ) return 8;
    if( n > (7*7-1) ) return 7;
    if( n > (6*6-1) ) return 6;
    if( n > (5*5-1) ) return 5;
    if( n > (4*4-1) ) return 4;
    if( n > (3*3-1) ) return 3;
    if( n > (2*2-1) ) return 2;
    if( n > (1*1-1) ) return 1;
    return 0;
}


#define GURAFU(aa) for(int ii=0;ii<(aa+1);ii++){printf("*");}


int main(void){
    // Your code here!
    
    
    for(int y =0;y<(30+1);y++){

        //(r*r) = (y*y) + (x*x)
        //(30*30) = (y*y) + (x*x)
        //(30*30) - (y*y) = (x*x)
        //x = SQRT(x*x)

        int x,xx,f;
        
        xx = (30*30) - (y*y);
        x = i_sqrt(xx);
    
        //printf("%d=SQ(%d)\n",x,xx);
        GURAFU(x);printf("\n");
    }
    
}


```


```

*******************************
******************************
******************************
******************************
******************************
******************************
******************************
******************************
*****************************
*****************************
*****************************
****************************
****************************
****************************
***************************
**************************
**************************
*************************
*************************
************************
***********************
**********************
*********************
********************
*******************
*****************
***************
**************
***********
********
*


```
NextjsとRustで日報管理アプリを作ってみた

## はじめに

最近、RustとNextjsを学習したくて簡単な日報管理アプリを作ってみました。
まだ完成というわけではないですが、備忘録的な目的で共有しようかなと思います。
現時点ではまだインフラ含め、叩き台を作ったといった感じです。
途中経過でもちょくちょくアウトプットして開発が続けられるようにする目的で投稿します。

## 目次
- [はじめに](#はじめに)
- [目次](#目次)
- [機能概要](#機能概要)
- [使用技術](#使用技術)
  - [構成](#構成)
  - [DBスキーマ](#dbスキーマ)
- [終わりに](#終わりに)


## 機能概要

基本的な認証機能と日報の新規登録・編集・削除機能があります。

ログイン画面は以下のようになっています。
まだshadcnをそのまま使ったUIしかないですが。
メールアドレスとパスワードでの認証に加えて、GithubでのOAuth認証機能も実装しました。


![1_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161990/d2a4ce4e-78c1-4f17-a14a-76d095359b2a.png)



ログインしたら左サイドバーに作成した日報一覧が年月日で表示されます。
サイドバーの月をクリックしたら展開して日が表示され、日をクリックすると右側のコンテンツ領域に日報が表示されます。


![4_一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161990/b6c624fd-472d-40b9-9e6f-d0c29249ff8c.png)

日報はそのまま編集できるようになっており、markdown形式で編集可能です。
もちろん、コードハイライトも書くことが可能となっています。

![2_edit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161990/974103fb-b008-4ac6-a375-c907208aef2d.png)



## 使用技術

| カテゴリ | 技術 |
|---------|------|
| フロントエンド | Next.js, TypeScript, Tailwind, Prisma, Authjs, tiptap |
| バックエンド | Rust, Axum, sqlx |
| データベース | Supabase (PostgreSQL) |
| インフラ | Vercel, Cloud Run, Artifact Registry, Cloud Build |
| CI/CD | GitHub Actions |

### 構成

以下の構成でデプロイしました。

- フロントエンド

デプロイ先はVercelでNextjsを使ってフロントを作っています。
ちなみにデザインパターンはFSDを採用しています。

(参考) https://feature-sliced.github.io/documentation/ja/

認証周りはAuthjsで作りました。
PrismaでSupabaseの認証データを操作します。
Prismaは基本的にバックエンド側(sqlx)で作ったschemaの取り込みをするようにしており、prisma側でschemaを作成して反映することはしていません。

エディター機能はtiptapを使用して実装しています。

(参考) https://tiptap.dev/


- バックエンド

API側はAxum(Rust)を使っています。

CloudRunでRustを動かしています。
リポジトリにpushされたらGithub ActionsでCI/CDで以下が回ります。

1. Cloud Build (コンテナイメージ作成)
2. Artifact Registry　(コンテナイメージ管理)
3. CloudRun (API)

![3_architect.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161990/4d0cbc9d-cd99-4dc5-9121-ccbfa56bcae8.png)


### DBスキーマ

テーブルは以下で構成されています。
DBと連携するadapterとしてPrismaを使用しています。

以下はAuthjsのデフォルトの指定モデルとなっています。
また、今回はjwt方式を使っているのでsessionsはありません。
verification_tokensは現時点では使っていないのですが、ないとエラーが発生したので追加しています。

  - reports: 日報
  - users: ユーザー情報
  - accounts: 外部プロバイダーの認証情報
  - verification_tokens: 認証用トークン


(参考) https://authjs.dev/getting-started/adapters/prisma


![日報管理ツール.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1161990/82e84e70-4cee-4e79-8400-73146b8e1a6c.jpeg)

## 終わりに

NextjsとRustで日報管理ツールを作ってみました。
作り込みはまだまだ足りていないので、これからデザイン部分ももう少し凝ったものにしていこうと思います。
ちゃんとこういうのを最後まで完成させるという経験がないので、しっかり最後まで完成させてちょくちょく進捗的なものを投稿しようかなと思います。
📘基本情報技術者試験のためのやさしいIT用語まとめ【自分用メモ5月20日】

# 📘基本情報技術者試験のためのやさしいIT用語まとめ【自分用メモ5月20日】

基本情報技術者試験の勉強を進める中で、わかりにくかった用語をできるだけやさしく、身近な言葉でまとめてみました！  
「言葉だけで混乱する」ことを減らしたい方におすすめの用語解説です✍️

---

## 💻 コンピュータの基本用語

### 🔹 ニモニックコード  
**コンピュータにわかりやすく命令を出すための、かんたんな文字のコード。**

### 🔹 命令取り出し（フェッチ）  
**コンピュータが命令を1つ取り出す作業のこと。**

### 🔹 クロック周波数  
**コンピュータが「1秒間に何回うごけるか」をあらわすスピードの単位。**  
→ 数字が大きいほど高速。

### 🔹 ページング  
**コンピュータのメモリ（作業机）を小さなページに分けて、必要なところだけ使う方法。**

---

## ⚙️ コンピュータの仕組みや管理

### 🔹 メモリリーク  
**コンピュータが使っていたメモリ（作業のための机）を片づけずに放置しちゃうこと。**

### 🔹 SDRAM  
**パソコンが「いま作業していることをすばやく覚えておくための特別なメモリ」。**

### 🔹 ストライピング  
**データを小さく分けて、いくつかのハードディスクに分けて保存する方法。**

### 🔹 ライトスルー方式  
**データをすぐにメモリに書き込む方式。**

### 🔹 ライトバック方式  
**データは一度キャッシュに書いて、あとでメモリに書く方式。**

---

## 🛡️ セキュリティ

### 🔹 SMTP-AUTH  
**メールを送るときに「この人が本当にメールを送っていい人か？」をチェックするしくみ。**

### 🔹 ディレクトリトラバーサル攻撃  
**本来見せちゃいけないパソコンの中のファイルを、ズルして見ようとする攻撃のこと。**

---

## 🏭 生産管理・業務系

### 🔹 MRP（資材所要量計画）  
**「モノを作るために、必要な材料をいつ、どれだけ準備するかを決める方法」。**

### 🔹 PLM（製品ライフサイクル管理）  
**モノを「作る前から作った後までず〜っと見守るしくみ」のこと。**

---

## 🧠 経営・分析・計画

### 🔹 SWOT分析  
**自分たちの「いいところ・わるいところ」と、まわりの「チャンス・ピンチ」をはっきりさせて、どう動くか考える方法。**

### 🔹 FS関係（Finish to Start）  
**ある作業が「終わったあとに、次の作業が始められる」というつながり方のこと。**

---

## 🕒 CPUのスケジューリング方式

### 🔹 ラウンドロビン方式  
**コンピュータが「みんなに順番で、同じ時間だけ仕事をさせる」しくみ。**

---

## 📝 まとめ

IT用語は、難しく感じても「身近なもの」に置きかえると一気にイメージしやすくなります！  
今後もこうした形で、試験対策メモをどんどんまとめていきます💪

---
【学習記録5月20日】AWS SAA対策：IAMロール／Lambda／DynamoDB／Secrets Manager／Shieldなど

# 【学習記録】AWS SAA対策②：IAMロール／Lambda／DynamoDB／Secrets Manager／Shieldなど

## 🛡️ IAMロールとクロスアカウントアクセス

- **サードパーティWebアプリケーションとの連携**には、最小限の権限を付与したIAMポリシーを作成し、そのポリシーをベースとした**IAMロールを作成**します。
- このIAMロールをWebアプリに適用することで、**第三者の認証情報漏洩を防止**しつつ、安全にクロスアカウントアクセスが可能となります。

---

## 🗄️ RDSのリードレプリカ

- **リードレプリカ**は読み取り専用のデータベース。
- 高負荷時の読み取り分散や災害対策にも活用可能。

---

## 📦 AMIの共有とLaunchPermission

- 複数のAWSアカウント間で**AMI（Amazon Machine Image）を共有**するには、AMIの`LaunchPermission`プロパティに共有先アカウントを設定する必要があります。
- 特定のアカウントとのみAMIを共有し、セキュリティを維持。

---

## 🛡️ AWS Shield Advanced

- **DDoS攻撃**からリソースを守るだけでなく、攻撃に伴うAWS請求の増加に対して**コスト保証（経済的保護）**を提供。
- 高度なモニタリング・通知機能も活用可能。

---

## 🔄 DynamoDBとトランザクション機能

- **DynamoDBのトランザクション**を使って、データ書き込みの整合性を確保。
- 機密データを含むトランザクションでは、保存と同時に特定の処理（例：マスキングや削除）を行う設計が可能。

---

## ⚙️ LambdaとIAMロールの連携

- Lambda関数を作成する際は、**実行ロール（IAMロール）**を設定し、必要なアクセス権限を明示的に付与。
- 例：Lambda → Amazon SQS へのメッセージ送信には、SQSへの`SendMessage`権限をIAMポリシーで付与。

---

## 🔐 認証情報管理：Secrets ManagerとSSMパラメーターストア

- **EC2 → DB接続**のセキュリティ向上には、認証情報の**定期ローテーション**が重要。
- `AWS Secrets Manager`：認証情報を安全に**暗号化・保存・取得**できるフルマネージドサービス。
- `AWS Systems Manager パラメーターストア`も簡易的な秘密情報管理に適用可能。

---

## ☁️ S3のストレージクラスとバージョニング

- 一般的な保存用途には **Standardストレージクラス** が最適。
- 誤削除対策には、**バージョニングの有効化**がおすすめ。
  - 以前のバージョンを保持・復元可能。

---

## 📝 まとめ

この記事では、IAMやLambda、Secrets Managerなど、**AWSのセキュリティ・認証・データ管理**に関するベストプラクティスを中心に整理しました。AWS認定ソリューションアーキテクト アソシエイト試験の対策としても、実務でも重要な内容です。
リーダブルコード（第9章）の学び

## はじめに
本日はリーダブルコードの9章を読んで学んだことを整理する。
前章では、「巨大な式を分割する」ことによって、理解するまでの時間を短くするテクニックを学んだ。
この章では、「不要な変数を削除する」ことの重要性が書かれていた。

## 変数を削除する
例えば以下のコードについて考える。

``` python
now = datetime.datetime.now()
root_message.last_view_time = now
```

`now` を使う理由は何だろう？

そもそも変数を使うとどんな恩恵があるのか整理する。

### 変数を使うと得られる恩恵
* コードが短くなり、単純になる
* 変数名が説明の役割を果たすことで、コードがより明確になる
* 変数を使う回すことで、重複するコードを減らせる

だとしたら、`datetime.datetime.now()` は、既に短くてシンプルであり、意味付けも不要で、くり返し使われているわけではない。

だから、以下のように書いたほうが簡潔でわかりやすい。

``` python
root_message.last_view_time = datetime.datetime.now()
```

## おわりに
「読みやすくするために変数を使う」ということは無意識に働いているように思え、その無意識によって使わなくてもいい変数を使ってしまっているような気がした。

また、リーダブルコード全般に共通していえることだが、この本を読んで理解することにあまり価値はなく、日々「理解する時間を減らせないかな？」って考えることが大切。

そう自分に言い聞かせて、日々実践していく。
テキストのグラフ(0も含む


プログラム
----

オンラインコンパイラpaiza


```c++

#include <iostream>
using namespace std;

#define GURAFU(aa) for(int ii=0;ii<(aa+1);ii++){printf("*");}

int main(void){
    // Your code here!
    
    for(int i = 0;i < (30+1);i++){
        GURAFU(i);printf("\n");
    }
    
}


```

```

*
**
***
****
*****
******
*******
********
*********
**********
***********
************
*************
**************
***************
****************
*****************
******************
*******************
********************
*********************
**********************
***********************
************************
*************************
**************************
***************************
****************************
*****************************
******************************
*******************************


```
リーダブルコードで出てきた「僕らは〜と呼んでいる」メモ

# ただのメモ
※ほこりをかぶっていた下書きです
抜けてる箇所、間違っている箇所等ありましたらコメントまで

# 用語系
### ループイテレータ
ループで使われる`i`, `j`, `k`などの変数
```python
for i in range(10):
```

### off-by-oneエラー
「以上」「超過」「以下」「未満」の境界条件判定に関するエラー

- `a > b` と`a >= b`の間違いによるエラーとか
- `a < b` と`a <= b`の間違いによるエラーとか


### プロトタイプ継承パターン
- 既存のオブジェクトを他のオブジェクトでも使えるようにする
- オブジェクト単位ではなく、ファイル単位でも使われる
- 継承元のオブジェクトやファイルを引数としてとったりする


### 制御フロー変数
- プログラムの実行を制御するための変数
- プログラムに関係のあるデータは含まれない

```python
done = False

while not done and /** (条件) */ :
	...
	if ...:
		done = True
		continue
```
Wordで文字の均等割り付けを一括で設定する（表限定）

# Wordで文字の均等割り付けを一括で設定する（表限定）
Wordで複数名の名前をきれいに並べて印刷する必要がありました。
枠線を消した表を利用して等間隔に名前を並べれば、ある程度は整うのですが、もう少し体裁をよくしようと「文字の均等割り付け」を設定しようとしたところ、１セルづつ設定を繰り返さないといけなかったので、なんとかしようと調べた結果です。

## 完成形
![image1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/238237/eee111a4-209e-45d3-98aa-46a1fe44f791.png)


## やりかた
+ お名前一覧を表にします
+ 対象のセルを全部選択した状態でVBEのイミディエイトウインドウから次のコードを実行します
``` vb
' 数字は「文字の均等割り付け」ダイアログで指定する文字数です。
Selection.Range.FitTextWidth = Selection.Font.Size * 6.0
```
+ 枠線を消します

姓名の間は半角スペースにしたほうがいい感じになります
整数の平方根で遊ぶ(比較)(0から1024まで)



いろいろ注意
----

- 過去ログを見よ!!!
- Arduinoでの予定は、未定
- 円を書くプログラムで使用予定?
- 整数のみで、範囲が限定的




プログラム
----


オンラインコンパイラpaiza


```c++


int i_sqrt(int n){
    //30
    if( n > (32*32-1) ) return 32;
    if( n > (31*31-1) ) return 31;
    if( n > (30*30-1) ) return 30;
    //20
    if( n > (29*29-1) ) return 29;
    if( n > (28*28-1) ) return 28;
    if( n > (27*27-1) ) return 27;
    if( n > (26*26-1) ) return 26;
    if( n > (25*25-1) ) return 25;
    if( n > (24*24-1) ) return 24;
    if( n > (23*23-1) ) return 23;
    if( n > (22*22-1) ) return 22;
    if( n > (21*21-1) ) return 21;
    if( n > (20*20-1) ) return 20;
    //10
    if( n > (19*19-1) ) return 19;
    if( n > (18*18-1) ) return 18;
    if( n > (17*17-1) ) return 17;
    if( n > (16*16-1) ) return 16;
    if( n > (15*15-1) ) return 15;
    if( n > (14*14-1) ) return 14;
    if( n > (13*13-1) ) return 13;
    if( n > (12*12-1) ) return 12;
    if( n > (11*11-1) ) return 11;
    if( n > (10*10-1) ) return 10;
    //1
    if( n > (9*9-1) ) return 9;
    if( n > (8*8-1) ) return 8;
    if( n > (7*7-1) ) return 7;
    if( n > (6*6-1) ) return 6;
    if( n > (5*5-1) ) return 5;
    if( n > (4*4-1) ) return 4;
    if( n > (3*3-1) ) return 3;
    if( n > (2*2-1) ) return 2;
    if( n > (1*1-1) ) return 1;
    return 0;
}


#include <stdio.h>
int main(void){
    // Your code here!
    
    
    for(int i =0;i<(32+1);i++){

        int in,f;

        in = i*i;
        f = i_sqrt(in);
    
        printf("%d=SQ(%d)\n",f,in);
    }
    
}


```

```

0=SQ(0)
1=SQ(1)
2=SQ(4)
3=SQ(9)
4=SQ(16)
5=SQ(25)
6=SQ(36)
7=SQ(49)
8=SQ(64)
9=SQ(81)
10=SQ(100)
11=SQ(121)
12=SQ(144)
13=SQ(169)
14=SQ(196)
15=SQ(225)
16=SQ(256)
17=SQ(289)
18=SQ(324)
19=SQ(361)
20=SQ(400)
21=SQ(441)
22=SQ(484)
23=SQ(529)
24=SQ(576)
25=SQ(625)
26=SQ(676)
27=SQ(729)
28=SQ(784)
29=SQ(841)
30=SQ(900)
31=SQ(961)
32=SQ(1024)

```