OmniAICreator/Qiita-1.07M huggingface dataset:
nullかどうかをチェックし、nullなら例外を投げるメソッド

## 参考
この記事は、以下の動画を参考にしています。
詳しくは、動画をご覧ください。

<iframe width="560" height="315" src="https://www.youtube.com/embed/KTdZOA_Kj28?si=vg8v_t7JVC82MhJi" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

リファレンス

https://learn.microsoft.com/ja-jp/dotnet/api/system.argumentnullexception.throwifnull

## ArgumentNullException.ThrowIfNullメソッド
以下のようなコードを、
```cs:nullチェック + 例外のスロー
if (name is null)
{
    throw new ArgumentNullException(nameof(name));
}
```
メソッドの呼び出し１つに書き換えられます。
```cs:.NET 6以降
ArgumentNullException.ThrowIfNull(name);
```
`nameof`演算子を使って、`null`になった引数名を取り出す必要もありません。
プロデル、調査 その6

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

# 練習問題
スタックを使って、forthインタープリターを書け。

# サンプルコード

```

［文字列：文字列］を［区切り文字：文字列］で分割する手順：配列
	【配列】は，｛｝。
	【現在位置】は，1。
	【次の位置】。
	繰り返す
		次の位置は，文字列の現在位置文字目から区切り文字を探したもの。
		もし次の位置が0なら
			文字列の現在位置文字目以降を配列に加える。
			繰り返しから抜ける
		でないなら
			文字列の現在位置文字目から次の位置-現在位置文字，取り出したものを配列に加える。
			現在位置は，次の位置＋1。
		もし終わり
		もし現在位置が文字列の文字数より大きいなら，
			繰り返しから抜ける
		もし終わり
	繰り返し終わり
	配列を返す。
終わり

[ソース]を、forthする手順
	stackというスタックを、作る
	行は，ソースを「 」で分割したもの。
	行を要素へそれぞれ繰り返す
		要素が「9」なら
			stackに、9を、積む
		他で要素が「+」なら
			topは、stackから、取り出したもの
			top2は、stackから、取り出したもの
			v = top2 + top
			stackに、vを、積む
		他で要素が「-」なら
			topは、stackから、取り出したもの
			top2は、stackから、取り出したもの
			v = top2 - top
			stackに、vを、積む
		他で要素が「/」なら
			topは、stackから、取り出したもの
			top2は、stackから、取り出したもの
			v = top2 / top
			stackに、vを、積む
		他で要素が「*」なら
			topは、stackから、取り出したもの
			top2は、stackから、取り出したもの
			v = top2 * top
			stackに、vを、積む
		他で要素が「dup」なら
			topは、stackから、取り出したもの
			stackに、topを、積む
			stackに、topを、積む
		他で要素が「drop」なら
			topは、stackから、取り出したもの
		他で要素が「.」なら
			topは、stackから、取り出したもの
		　　　	topを、出力して改行する
		そして
	そして
終わり

「9 9 - 9 9 / .」を、forthする
「9 9 / 9 9 / + .」をforth
「9 9 + 9 + 9 / .」をforth
「9 9 9 + 9 / dup + .」をforth
「9 9 9 + 9 / dup + - .」をforth
「9 dup 9 + 9 + 9 / - .」をforth
「9 9 9 + 9 / - .」をforth
「9 9 9 drop 9 / - .」をforth
「9 9 - 9 * 9 + .」をforth
「9 9 / 9 dup 9 / + .」をforth
「9 9 9 + 9 / + .」をforth
「9 dup 9 9 + + 9 / + .」をforth
「9 9 9 + 9 / dup + + .」をforth
「9 dup 9 9 + 9 / dup + - + .」をforth
「9 dup dup 9 + 9 + 9 / - + .」をforth




```

以上。
Google Apps ScriptでHTMLをパースする3つの方法

Google Apps Script（GAS）でHTMLを扱う場面では、いくつかのパース方法があり、バイブコーディング中にどの手法を使うか迷うことがありました。
そこで今回は、備忘録も兼ねて、代表的な3つの方法を比較し、それぞれのメリット・デメリットや使いどころを整理してみます。

## 1. XmlServiceを使う方法

### 概要

GAS標準の `XmlService.parse()` を使って、HTMLをDOMライクに解析する方法です。

```js
const xml = XmlService.parse('<root>' + cleanedHtml + '</root>');
```

### 特徴

- ✅ XHTML準拠の構造ならDOMとして安全に解析可能
- ⚠️ `<meta>` などの**閉じタグがないHTML**には対応できない
- ⚠️ `<!DOCTYPE>` を含むと例外発生の可能性あり

### 向いているケース

- シンプルで構造が安定した（≒XMLに近い）HTML

## 2. 正規表現での解析

### 概要

タグ構造を正規表現で解析し、必要なテキストや属性を抽出する方法です。

```js
const match = html.match(/<td[^>]*>\s*(\d{4}\/\d{2}\/\d{2})/);
```

### 特徴

- ✅ HTMLの構文エラーに左右されず動作
- ✅ DOM構造を無視して高速に抽出可能
- ⚠️ タグの順序や構造変更に非常に弱い
- ⚠️ 保守性・読みやすさがやや低い

### 向いているケース

- 決まったレイアウト等でDOM構造が変わる頻度が低い
- 軽量で特定箇所だけ取りたいとき

## 3. cheeriogsライブラリを使う方法

### 概要

[GAS用のCheerioラッパーライブラリ「cheeriogs」](https://github.com/tani/cheeriogs) を使って、jQueryのようにHTMLを解析する方法です。

```js
const $ = Cheeriogs.load(html);
const store = $('td').eq(1).text();
```

### 特徴

- ✅ jQuery風のセレクタで直感的に操作できる
- ✅ HTML構文の厳密性を気にせず扱える
- ⚠️ ライブラリの追加が必要（導入がやや面倒）
- ⚠️ セキュリティ・メンテナンスへの配慮が必要

### 向いているケース

- 複雑でネストされたHTML
- 複数要素を繰り返し処理したいとき

## 🔍 各手法の比較表

| 特徴 / 方法          | XmlService          | 正規表現               | cheeriogs              |
| -------------------- | ------------------- | ---------------------- | ---------------------- |
| HTMLの構文厳密性     | 必須（XHTML準拠）   | 不要                   | 不要                   |
| 構造変更への強さ     | 強い（DOMベース）   | 弱い（壊れやすい）     | 中程度（セレクタ次第） |
| 実装のシンプルさ     | △ 前処理が必要      | ◎ すぐに使える         | ○ 導入が必要           |
| 保守性・読みやすさ   | △ XML風で冗長       | △ 複雑になることも     | ◎ jQuery風で直感的     |
| 向いているHTML       | 整形されたXML風HTML | DOM構造が固定のHTML | ネストや繰り返し構造   |
| 外部ライブラリの依存 | なし                | なし                   | あり                   |

## 🧭 選び方の目安

| 利用シーン                                       | おすすめの手法 |
| ------------------------------------------------ | -------------- |
| XHTMLに近い構造、安定したHTML                    | `XmlService`   |
| 決まったレイアウト等でDOM構造が変わらない場合    | 正規表現       |
| 複雑なHTML、繰り返し処理、柔軟な抽出が必要な場合 | `cheeriogs`    |

## ✍️ まとめ

- 🔸 **XML形式に変換可能で正確さを重視するなら XmlService**
- 🔸 **DOM構造が変わらなず、部分的な抽出だけなら 正規表現**
- 🔸 **柔軟にセレクタ操作したいなら cheeriogs**
🌟 Vol.11.5 総まとめ：Struts2 `struts.xml` 設定ファイル徹底理解ガイド _Struts2アーキテクチャの基盤となる `struts.xml` を“設定から設計へ”昇華させるためのベストガイド集_

## ✅ 対象記事一覧

### 🧩 Vol.11.5
**struts.xml 完全攻略ガイド**  
🔗 [Struts2の構成理解が“実務レベル”へと進化する決定版](https://qiita.com/juehara-crypto/items/6ef7a87a54163d81a9ba)  

- `package`、`action`、`result` 各タグの基本構文と設計指針
- namespace活用法、複数パッケージ設計のポイント
- 共通設定や継承パターンなど、実務で押さえるべき「設定の黄金律」

---

### 🧩 Vol.11.5.1
**Struts2 `result` タイプ完全解説**  
🔗 [Struts2の“画面遷移の全体像”を理解するためのマイルストーン記事](https://qiita.com/juehara-crypto/items/df407b24101e92a02eab)  

- `dispatcher` / `redirect` / `redirectAction` 各タイプの用途と特徴
- `result` タイプ選定の考え方と設計戦略
- トラブルになりやすい挙動の差異（リクエスト共有・レスポンス再送など）も図解で整理

---

## 📘 本シリーズのゴール

Struts2開発において `struts.xml` の理解は避けて通れません。  
本シリーズでは、**単なる設定ファイル**としての struts.xml を超えて、**設計思想の反映**・**アーキテクチャの支柱**として活用するためのノウハウをまとめました。

- 設定から構成、構成から設計へ
- 各タグの意味を理解するだけでなく、設計観点で最適化する
- 画面遷移・処理遷移の“つながり”を図で捉え、設計ミスや保守負荷を激減させる

Struts2開発の **“基礎から中核”へレベルアップするための必読セット**です。

---

## 🔜 今後の予定

次回「Vol.11.6」では、`ActionSupport` クラスの便利メソッド活用と国際化（i18n）対応に焦点を当て、Struts2の“使いこなし術”へと進みます。  
お楽しみに！

---

📚 **Vol.11シリーズ 総合ナビゲーション** や **過去回一覧** も今後ご提供予定です！
PowerShellでシステムフォントにインストール

VBS等で `C:\Windows\Fonts` にコピーして入れようとしてもユーザーフォントに入ってしまうので、PowerShellを管理者権限にして入れる必要がある。


```PowerShell:PowerShell
$fontName = "フォント.ttf"

#PowerShellと同じディレクトリにフォントを置く
$fontPath = Join-Path -Path $PSScriptRoot -ChildPath $fontName

$fontsFolder = "$env:windir\Fonts"

Copy-Item $fontPath -Destination $fontsFolder

New-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" -Name "$fontName" -PropertyType String -Value $fontName
```


https://qiita.com/M-Y-Y/items/c080f99f6bd275a988f7
【Salesforce】Amazon Connect - Universal Packageのアップグレード注意点（v5.24以前 → v5.27）

# 概要

「Amazon Connect - Universal Package」 とは、Salesforce上でCTI Adapter を利用するためにインストールするSalesforce管理パッケージです。
Amazon ConnectとSalesforceを連携させることで、電話・顧客対応業務をSalesforce上で一元管理できるようになります。

本記事では、v5.24以前からv5.27へアップグレードする際の注意点と手順をまとめました。

# 注意点

* 対象バージョン：v5.24以前 → v5.27（2025年5月時点）
* v5.24.3を経由した2段階アップグレードが推奨されており、これをスキップするとアップグレード時にエラーになります
* 本手順に従うことで、古い未使用のApexクラスやVisualforceページが安全に削除され、パッケージがクリーンな状態に保たれます

## v5.24.3を経由せずにv5.27へアップグレードを行う場合

そのままアップグレードしようとすると下記のようなエラーが発生し、アップグレードできません。
このエラー回避対応のためにパッチあてを行い、後述に記載の[アップグレード手順](#アップグレード手順)に沿って進める。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/23272f00-ba68-4892-8d74-9bdd9db2f1d4.png" width=100%>

この設定の背景については、公式リリースノート（[2025年4月リリース](https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/release-notes/#527-april-2025)）に明記されています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/fb993da2-0261-4cb3-b7c1-31fd2926fcc4.png" width=100%>

(※ キャプチャは日本語訳にしております)

##  アップグレード手順
### ステップ1：v5.24.3へのアップグレード

まず、上記キャプチャのリンクである「[パッチ](https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/release-notes/#527-april-2025)」からv5.24.3 をインストールします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/2690daa4-b65f-47ad-9e06-e083c593a8f1.png" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/196ca54d-9e33-4406-9bf8-d562128fcf1e.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/df3958ef-4eda-4672-a3c7-4af8d862ea2d.png" width=50%>

### ステップ2：バージョン確認

1. Salesforceの「設定」画面を開きます
1. クイック検索バーで「インストール済みパッケージ」と入力し、該当ページにアクセスします
1. 「Amazon Connect - Universal Package」のバージョンが5.24.3になっていることを確認します

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/b75aa6b2-0101-4604-95a1-ca0ffa43ea27.png" width=100%>

### ステップ3：v5.27へのアップグレード

次に、以下のリンクからv5.27にアップグレードします。
[Amazon Connect - Universal Package v5.27 をインストール](https://appexchange.salesforce.com/appxListingDetail?listingId=a0N3A00000EJH4yUAH)
(※ 当作業時の最新バージョンは5.27)

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/c0d31ba6-ca2d-4253-9200-73d57c95dc6d.png" width=50%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/f57328e8-f782-4aeb-bd36-ff6d1ab17950.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/21c517b5-98d8-4a69-a519-8c9dde5a7b85.png" width=50%>

### ステップ4：再度バージョン確認

同様に、「インストール済みパッケージ」からv5.27に更新されていることを確認します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3766655/4c3adac0-0cda-4dfe-b6f0-cd7ae9ea231e.png" width=100%>

### ステップ5：動作確認

* Amazon Connect CTIの通話起動・通話記録・通話後処理など、一通りの機能が問題なく動作するか確認します
* カスタムCTIフローやLightningコンポーネントを利用している場合、それらもテストしてください

## 参考リンク

* [Amazon Connect Salesforce CTI Adapter リリースノート（公式）](https://amazon-connect.github.io/amazon-connect-salesforce-cti/docs/lightning/notices)

## まとめ

* 2段階アップグレードが必要なバージョンですので、直接v5.27にアップグレードできないため注意が必要です

* 今回のアップグレードでは未使用リソースの削除が含まれており、パフォーマンス改善や管理性の向上が期待できます
OAuth, SSL/TLS概要

# はじめに
OAuth, SSL/TLSの概要を整理しました。

# 想定読者
- OAuth, SSL/TLSとはなんぞや？とりあえず概要のみ知りたい方

# 概要
## OAuth
OAuth（オーオースと読む）とOIDCは似ているけど別物。

- 認可のフレームワーク
- 認可はユーザーのアクセス権限を確認すること

**つまり、サードパーティアプリ（Xとか）によるHTTPサービス（Facebookとか）への限定的なアクセス権限を与える。**

※ちなみにOIDC

- 認証のフレームワーク
- 認証はユーザーが誰であるかを確認すること

### OAuthが必要な理由
**サードパーティアプリにHTTPサービスのクレデンシャル情報(ユーザー名とかパスワード)を教える必要がない。**
- サードパーティアプリに必要な権限のみ与えるため不要な操作を防ぐ
- サードパーティアプリが攻撃されてもHTTPサービスのクレデンシャル情報が漏れない

### OAuthの流れ
1. クライアント（サードパーティアプリ）から認可サーバ（OAuth）に対してリソースサーバ（HTTPサービス）へのアクセス権を要求
2. 認可サーバーはリソースオーナー（サードパーティアプリの持ち主）に対してリソースサーバへのアクセス権を要求
3. リソースオーナーは認可サーバに対してリソースサーバへのアクセス権を許可
4. 認可サーバーはクライアントに対してアクセストークンを発行
5. クライアントはアクセストークンによりリソースサーバにアクセス

### アクセストークンとリフレッシュトークンの関係
アクセストークンは、クライアントからリソースサーバへアクセスしてもよいですよと、リソースオーナーが許可を出した発行書のようなもの。
よって流出するとリソースサーバが操作されてしまうため有効期限が付される。
この時、有効期限が切れるたびに毎回リソースオーナーが再度許可を出すのはUX上宜しくないので、この許可を自動化しアクセストークンの再発行に使うものがリフレッシュトークンとなる。
リフレッシュトークンにも有効期限があり、アクセストークンよりも長い。

アクセストークンが流出しても有効期限が短いため、被害は限定される。
リフレッシュトークンが流出しても認可サーバ側で検知して新規のアクセストークンを発行させないようにすれば、被害は限定される。

## SSL/TLS
通信への攻撃（盗聴、改ざん、なりすまし、否認）からデータを保護する仕組み。例えばHTTPからHTTPSにするとか。
SSLの発展系がTLSとなるため、TLSで整理すると・・・

### TLSの機能
|機能|目的|概要|
|---|---|---|
|暗号化|盗聴対策|2者間でルールを決め、2者間でしか読めないデータを作る|
|MAC|改ざん対策|データとMAC値を送り、データをMAC関数で計算した値とMAC値の一致をもって改ざんされていないとみなす|
|電子署名|なりすまし、否認対策|送信元の秘密鍵で暗号化したデータを送り、送信元の公開鍵で複合した結果をもって送信元を特定する|

### TLSの適用
TLSが様々なプロトコルに適用され通信データを保護する

- HTTP→HTTPS
- FTP→FTPS
- SMTP→SMTPS

### 証明書
電子署名などで使う公開鍵について、不正な公開鍵を使われるとTLSの機能の意味がなくなる。よって、公開鍵が正当な被証明者のものであることを証明するために認証局などから発行されるものが（電子）証明書。公開鍵、被証明者の署名、被証明者の情報を含む。

### その他
- HTTPSは暗号化する分HTTPに比べ通信が遅くなるため、必要なところのみHTTPSとするのが良い設計。例えば、AWSでIGW→ALB→EC2への通信経路の場合は、IGW→ALBのみHTTPSとし、ALB→EC2はセキュリティグループでアクセス制限をかけているためHTTPとするのが良い
- 0.0.0.0は全てのIPアドレスの範囲を表す

# 参考文献
まとめてみましたが図などないと流れがわかりずらいですね・・・。
これらの文献を参考にさせていただきましたので、詳細などはご参照ください。

https://www.udemy.com/course/awsoauth/?couponCode=ST19MT280525G2

https://www.udemy.com/course/oauth2-openid-connect/?couponCode=ST19MT280525G2

https://www.udemy.com/course/ssltls-q/?couponCode=ST19MT280525G2
日本行政区画リバースジオコーディング

![reversejp.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4073937/20053c7e-571e-4d35-9da9-801cabd3df5c.png)


数ヶ月前、私は日本の座標データを行政区画レベルにマッピングする作業をしたいと思いました。そこで、日本気象庁（JMA）の行政区画データを利用して、リバースジオコーディングツール [reversejp](https://github.com/ringsaturn/reversejp) を書きました。コア部分のコードはRustで実装し、PyO3とMaturinを使ってPythonパッケージ化しました。

日本の国土面積はそれほど広くありませんが、JMAのデータでは最も細かいレベルで3000以上の行政区画に区分されています。日本の国土面積を考慮すると、実際には非常に精緻です。

データ処理のコアフローは、すべてのポリゴンを順に走査し、指定した点がポリゴン内部にあるかを判定し、条件を満たすポリゴンの情報を順番に返す、というものです。

Rustでの使用例は以下の通りです。

```bash
cargo add reversejp
```

```rust
// https://github.com/ringsaturn/reversejp/blob/main/reversejp-rust/examples/demo.rs
use reversejp::ReverseJp;

fn main() {
    let reverse_jp = ReverseJp::with_embedded_data().unwrap();
    let props = reverse_jp.find_properties(139.7670, 35.6812);

    for prop in props {
        println!("Code: {}, Name: {}, English Name: {}", prop.code, prop.name, prop.en_name);
    }
}
```

出力結果:

```console
Code: 130010, Name: 東京都, English Name: Tokyo
Code: 1310100, Name: 千代田区, English Name: Chiyoda City
```

Pythonでの使用例は以下の通りです。

```bash
pip install reversejp
```

```python
# https://github.com/ringsaturn/reversejp/blob/main/reversejp-python/examples/demo.py
import reversejp

props = reversejp.find_properties(139.7670, 35.6812)

for prop in props:
    print(prop.code, prop.name, prop.en_name)
```

出力結果:

```console
130010 東京都 Tokyo
1310100 千代田区 Chiyoda City
```
🧑‍💻【超初心者向け】GAS（Google Apps Script）の使い方入門＆最初のつまずきポイント

## はじめに

> Googleスプレッドシートを自動で操作したい！
> プログラミングは未経験だけど、とにかく一歩踏み出してみたい…

そんなあなたにぴったりなのが、\*\*Google Apps Script（GAS）\*\*です。
この投稿では、**GASの始め方・最初のコードの書き方・よくあるつまずきポイント**を、やさしく解説します。

---

## ✅ GASとは？

Google Apps Script（GAS）は、Googleが提供する**無料のクラウド型プログラミング環境**です。

* JavaScriptベースで書ける
* ブラウザだけで完結、インストール不要
* Gmail、スプレッドシート、カレンダーなどと簡単に連携
* 初心者でも実用的なツールが作れる！

---

## 🚀 Step-by-Step：GASを動かしてみよう！

### 🧾 1. スプレッドシートを用意

Googleドライブから新しいスプレッドシートを作成
（例：「GAS入門テスト」と名前をつけて保存）

---

### 🧩 2. スクリプトエディタを開く

メニューから
`拡張機能 → Apps Script` を選択

---

### ✍️ 3. コードをコピペ

以下のコードをエディタに貼り付けます：

```javascript
function myFirstScript() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A1").setValue("こんにちは、GAS！");
}
```

---

### ▶️ 4. 実行方法（ここでよくつまずきます！）

GASでは「どの関数を実行するか」を明示する必要があります。

🔽 上部ツールバーの ▶ ボタンの **右にある関数選択メニュー** をクリック
☑️ `myFirstScript` を選ぶ（※関数名は自由につけてOK）
▶ を押すと、スプレッドシートのA1に文字が入れば成功！

---

## ❗ よくある初心者のつまずきポイント

| 現象                        | 原因と対処法                                               |
| ------------------------- | ---------------------------------------------------- |
| ▶ ボタンがグレーで押せない            | → 関数が定義されていない or 関数が選択されていない                         |
| `myFunction` じゃないと実行できない？ | → **いいえ！関数名は自由**。実行時に選べばOK                           |
| スプレッドシートが動かない             | → `SpreadsheetApp` は **スプレッドシートと紐づいたGASプロジェクト**でのみ有効 |
| 初回実行で警告が出る                | → Googleアカウントで「承認」をする必要あり                            |

---

## 🎓 おすすめの練習

| レベル | 課題例                               |
| --- | --------------------------------- |
| 初級  | A1〜A5セルに「こんにちは」を1行ずつ書き込む          |
| 中級  | スプレッドシートの名前を変更するスクリプト             |
| 上級  | フォーム回答をトリガーにしてSlackやGmailに自動通知を送る |

---

## 📘 補足：GASの関数名について

```javascript
function myFunction() {
  // これでもOK（デフォルト関数名）
}

function myFirstScript() {
  // これでもOK！関数名は自由
}
```

▶ ボタンを押す前に、右側のメニューで実行したい関数名を**明示的に選ぶ**必要があります。
これがわかれば、エラーやグレーアウトにも落ち着いて対処できます！

---

## 🔚 まとめ

* GASは**初心者でもすぐに動かせるクラウド開発環境**
* 最初は「関数の中に書く」「関数を選んで実行」がポイント
* 小さな自動化から始めて、日常業務をラクにしていこう！

---

ご質問・LGTM・フォロー、大歓迎です！
コメントいただければ、初心者向けの「応用テンプレート」なども共有できます。

---
Go初心者がJWT認証付きWeb APIを1日で作った話

## はじめに
こんにちは、みんみんです。
Goを使ってみたい。でも実務経験はゼロ。

それでも「JWT認証付きのWeb APIを1日で作れる」という話を聞いて、やってみることにしました。

今回は、Go初心者の私が**認証機能付きWebアプリを1日で構築した体験談**を共有します。

## 使用技術スタック
- Go 1.23
- HTML + JavaScript（Vanilla）
- JWT（github.com/golang-jwt/jwt/v5）
- bcrypt（golang.org/x/crypto）
- golangci-lint（ローカル検証）

## 実装した機能
- サインアップ（パスワードはbcryptでハッシュ化）
- ログイン（JWTトークンを発行）
- 認証付きプロフィールページ（ログインしないとアクセス不可）
- 売上の登録／一覧表示（ログイン中のユーザーごとに分離）
- 表形式での売上表示（合計金額の算出、日付順にソート）
- ログアウト処理

## ディレクトリ構成
```
├── go.mod                // Goモジュール定義
├── go.sum                // Goモジュール定義
├── main.go               // エントリーポイント
├── models/
│   └── user.go           // ユーザーモデル（Claims構造体など）
│   └── sale.go           // 売上モデル
├── handlers/
│   └── auth.go           // ログイン・サインアップ・プロフィール取得
│   └── sales.go          // 売上登録・取得
├── static/
│   └── login.html        // ログイン画面
│   └── signup.html       // サインアップ画面
│   └── profile.html      // 認証後プロフィール画面
│   └── sales.html        // 売上登録＆表示画面
```
## 実際の画面イメージ
![gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3560378/eee63062-c892-4b84-8b32-ae8c06d9baed.gif)

## 詰まったポイントと解決法
### 401 Unauthorized が出続ける
→ 原因は「Bearer 」のスペース忘れ or トークンの形式ミス。Authorization: Bearer xxx の形式を正しく保つ必要あり。

### Error return value of (*encoding/json.Encoder).Encode is not checked (errcheck)がたくさん出る
→ 原因はエラーの可能性がある箇所をちゃんと見直さなかったこと。エラーの可能性があるならかならずエラー時の対応を書かないとgolangci-lintに引っかかる。

## 学び・感想
- Goは文法がシンプルで読みやすく、API実装にも向いている
- JWTの使い方が理解できた（トークン発行→保存→検証の流れ）
- Webアプリの基本的な構造が把握できた
- Linterのエラーが意外と強力で、ちゃんと直すとコードも綺麗になる
- なにより「1日でここまでできる」という成功体験は大きい

## 次にやりたいこと
- データの永続化（SQLiteやPostgreSQL）
- テストコードの整備（特にハンドラ部分）
- CIの安定化（golangci-lintの通過）
- フロントをReactやVueなどに置き換えてSPA化

## 最後に
「Go興味あるけど何から始めればいいの？」という方には、JWT付きWeb APIの構築はとてもおすすめです。
短時間で達成感があり、Webの基本構造やセキュリティの勘所も学べると思います。

これからもGo言語学習を進めていきたいので、もしおすすめの学習法などございましたら、ぜひコメントいただけますと嬉しいです！
GASとは何か？

# 💡 GAS（Google Apps Script）とは？初心者向けにわかりやすく解説
こんにちは、この記事では\*\*Google Apps Script（通称GAS）について初心者向けに解説します。

業務の自動化や、Googleサービスの活用を考えている方は必見です！

---

## ✅ GASとは？

**Google Apps Script（GAS）**は、Googleが提供する**クラウドベースのスクリプト言語**です。

* **JavaScriptベース**
* **Googleアカウントがあれば無料で使える**
* **インストール不要、ブラウザで開発できる**

という特徴があり、GoogleスプレッドシートやGmail、カレンダーなどと簡単に連携できます。

---

## 🛠 何ができるの？

| 活用シーン          | できることの例                             |
| -------------- | ----------------------------------- |
| スプレッドシート操作     | 自動集計、データ転記、定時でレポート送信など              |
| Gmail操作        | スプレッドシートの内容をもとにメールを一括送信             |
| カレンダー連携        | スケジュール自動登録、リマインド通知                  |
| Googleフォーム連携   | 回答に応じた自動返信やSlack通知                  |
| 自動通知・Webhook連携 | LINE通知、Slack通知、Webhookによる外部サービスとの連携 |

---

## 🧪 サンプルコード

### 📄 A1セルに「こんにちは」と書き込む

```javascript
function helloWorld() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  sheet.getRange("A1").setValue("こんにちは");
}
```

### 📧 スプレッドシートの内容をもとにメール送信

```javascript
function sendMail() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  const email = sheet.getRange("B2").getValue();
  const message = sheet.getRange("C2").getValue();
  MailApp.sendEmail(email, "自動メール", message);
}
```

---

## 👍 GASのメリット

* **無料で使える**
* **Googleサービスとの親和性が高い**
* **初心者でもとっつきやすい（JavaScriptベース）**
* **社内業務の自動化やツール作成がすぐにできる**
* **ローカル環境不要（すべてブラウザで完結）**

---

## 💼 こんな人におすすめ

* スプレッドシート業務を自動化したい事務職・営業職の方
* プログラミング初心者で自動化を体験してみたい人
* ポートフォリオとして「業務効率化ツール」を作りたい学生・求職者
* 社内のちょっとした便利ツールを作りたいエンジニア

---

## 📘 おすすめの学習リソース

| タイトル                                                        | 内容                 |
| ----------------------------------------------------------- | ------------------ |
| [Google公式ドキュメント](https://developers.google.com/apps-script) | まずは公式から学ぶのがベスト     |
| \[Udemy：Google Apps Script入門講座]                             | 実務で使えるツールを作りながら学べる |
| YouTubeのGASチュートリアル動画                                        | 実際の動きを見ながら学べる      |

---

## 📝 まとめ

GASは「プログラミングの入口」にぴったりな技術です。

Googleサービスを日常的に使っている方であれば、**すぐに業務効率を上げるツールを自作**できます。
私も最初はスプレッドシートの自動転記から始めて、**今では社内の自動化ツールをいくつも作っています。**

ぜひ、GASを使って **「面倒な手作業を1つでも減らす」体験**をしてみてください！

---

### ✍️ 投稿者より

この記事が役に立ったら「LGTM」やコメントいただけると励みになります！
GASのポートフォリオ作りについても別記事で紹介予定ですので、よろしければフォローしてください。

---
プロデル、調査 その5

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

# 練習問題
sin波を描け

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/498b3601-9aee-4236-92c7-6a058aa0f52b.png)

# サンプルコード

```

sin波を、描く手順
	かめの太さは5
	かめの色は、ピンク　
	かめの速さは0
	初期位置は{10,130}
	かめの位置は、初期位置
	角度は0
	角度が360未満の間、繰り返す
		横は、3　×　角度　＋　初期位置（1）
		縦は、100　×　サイン（4　×　角度度）＋　初期位置（2）
		かめを｛横、縦｝へ移動する
		角度は、角度　＋　１
		かめの向きは、角度
	そして
終わり


窓というウィンドウを、作る
	その内容は、「sin波」
	その大きさは、｛460,360｝
窓を、表示する
かめというカメを、作る
	その位置は、{20,60}
かめを窓に、表示する
sin波を、描く
待機する




```

以上。
Go言語でホットリロード環境を構築する方法【Air使用】

## 重要な注記

⚠️ **この記事について**

この記事は、筆者が実際に試行錯誤して作成した学習メモをAIを活用して読みやすく記事化したものです。

**ご利用時の注意点：**
- 内容は筆者の環境（特定のOS・Go版本・ターミナル環境）で動作確認したものです
- お使いの環境によっては正常に動作しない可能性があります
- 環境差異による問題が発生した場合は、公式ドキュメントもご確認ください
- **参考程度にご利用いただき、実際の導入前には十分な検証をお願いします**

技術的な質問や改善点があれば、コメントでお気軽にお声かけください!

## はじめに

Go言語で開発していると、コードを修正するたびに`go run main.go`を実行するのは非効率ですよね。特に大きなプロジェクトになると、ビルド時間も長くなり開発効率が大幅に低下してしまいます。

そこで今回は、**Air**というツールを使ってGo言語でホットリロード環境を構築していきます。

## 更新履歴
【 2025/05/30 】環境変数を一部削除

## 環境
- OS: Ubuntu 24.10 x86_64 
- CPU: AMD Ryzen 7 5700X (16) @ 4.663GHz 
- GPU: NVIDIA GeForce RTX 3060 
- Memory: 40GB

## Airとは？

**Air**は、Go言語用のライブリロード（ホットリロード）ツールです。ファイルの変更を監視し、自動的にアプリケーションを再ビルド・再実行してくれます。

### 主な特徴
- ファイル変更の自動検知
- 高速な再ビルド
- 設定のカスタマイズが可能
- 軽量で使いやすい

**GitHub**: [air-verse/air](https://github.com/air-verse/air)

## 環境構築手順

### 1. Airのインストール

まず、Airをインストールします。

```bash
go install github.com/air-verse/air@latest
```

### 2. インストール確認

Airが正しくインストールされたか確認してみましょう。

```bash
air -v
```

この時点では、おそらく`command not found`のようなエラーが表示されると思います。これは環境変数の設定が必要なためです。

### 3. 環境変数とエイリアスの設定

Airのコマンドが認識されない場合は、環境変数の設定が必要です。

**~/.bashrc** または **~/.zshrc** に以下を追加：

```bash
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
export PATH=$PATH:$(go env GOPATH)/bin
alias air="$(go env GOPATH)/bin/air"
```

設定を反映させるため、ターミナルを再起動するか以下を実行：

```bash
source ~/.bashrc  # または source ~/.zshrc
```

### 4. 再度インストール確認

環境変数設定後、再度Airのバージョンを確認します。

```bash
air -v
```

バージョン情報が表示されれば設定完了です！

### 5. プロジェクトでの初期設定

開発中のGoプロジェクトディレクトリに移動します。

```bash
cd /path/to/your/go/project
```

Airの設定ファイルを生成します。

```bash
air init
```

これにより、`.air.toml`という設定ファイルが生成されます。

### 6. ホットリロードの実行

設定が完了したら、以下のコマンドでホットリロードを開始します。

```bash
air
```

これでファイルを編集・保存するたびに、自動的にアプリケーションが再ビルド・再実行されます！

## .air.tomlの設定例

生成された`.air.toml`ファイルをカスタマイズすることで、より細かい制御が可能です。

```toml
# 基本設定
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
# ビルドコマンド
cmd = "go build -o ./tmp/main ."
# 実行ファイル
bin = "tmp/main"
# 監視対象の拡張子
include_ext = ["go", "tpl", "tmpl", "html"]
# 除外するファイル
exclude_file = []
# 除外するディレクトリ
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
# 遅延時間（ミリ秒）
delay = 1000

[log]
# ログの出力時刻を表示
time = true

[color]
# カラー出力を有効化
main = "magenta"
watcher = "cyan"
build = "yellow"
runner = "green"
```

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

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

**1. `air: command not found`エラー**
- 環境変数の設定を確認
- ターミナルの再起動
- `go env GOPATH`でパスを確認

**2. ビルドエラーが発生する**
- プロジェクトのgo.modファイルが存在するか確認
- 依存関係が正しくインストールされているか確認

**3. ファイル変更が検知されない**
- `.air.toml`の`include_ext`設定を確認
- 除外設定（`exclude_dir`）に対象ディレクトリが含まれていないか確認

## まとめ

Airを使うことで、Go言語の開発効率が大幅に向上します。特に以下のような場面で威力を発揮します：

- **Webアプリケーション開発**: サーバーの自動再起動
- **API開発**: エンドポイントの変更を即座に反映
- **学習・プロトタイピング**: 試行錯誤が高速化

一度設定すれば、快適な開発環境が手に入ります。ぜひ試してみてください！

## 参考リンク

- [Air公式GitHub](https://github.com/air-verse/air)
- [Go公式ドキュメント](https://golang.org/doc/)
- [Air設定リファレンス](https://github.com/air-verse/air/blob/master/air_example.toml)

---
LiveShell ローカル管理画面にKUROKO Connectでリモートアクセスしてみた

#### 2025年5月31日をもって、LiveShellのDashboardが廃止となりました。

https://info-blog.cerevo.com/2025/02/19/7012/

今後は、ローカル管理画面（LiveShell Studio）か有償のLiveShell Remoteでの利用となるので、すでにLiveShellを利用している方で、Dashboardを多用されていた方はお困りになっているのではないでしょうか。

しかもローカル管理画面は暗号化されていないWebページであり、BASIC認証やIDやパスワードもないため、LiveShellのローカル管理画面をインターネットにポートフォワードで公開するのも大変危険です。

当社もLiveShellを様々はシーンで活用していたので非常に困りましたが、当社ではセキュアリモートアクセスサービスの[KUROKO Connect](https://connect.kuroko.cloud/)を提供していますので、KUROKO ConnectでLiveShellのローカル管理画面を安全にリモート接続させてみました。
※KUROKO AppsはLiveShellにインストールできないため、LiveShellを操作できる端末やサーバーの用意があることを前提としています。

KUROKO Appsのインストールについては別記事で紹介していますので、そちらを参照してください。
[VPS - ConoHaのLinuxサーバーに安全にSSH接続してみた](https://qiita.com/MCREST/items/29fc6b567801c081deca)


# 1. 接続イメージ
接続イメージは下図のとおりです。
ファイアウォールでインターネットに対して穴あけることなく、KUROKO Connectを使って安全にLiveShell ローカル管理画面にアクセスをさせます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/a20b4193-b41d-4637-af77-1c5b54a66baa.png)


# 2. LiveShellローカル画面をリモート接続できるようにKUROKO Connectを設定する

KUROKO Connectにログインします。
メニュー＞管理＞Apps＞Apps一覧
から、該当Appsを選択して、接続先一覧をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/d5e0a35f-05d8-4c4c-b9a1-043933e18476.png)

LiveShellのIPアドレスと、管理画面のプロトコル「HTTP」、ポート番号「80」番を登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/577a034a-61e1-4358-838a-5e11a7a2cd7f.png)

# 3. LiveShellのローカル管理画面にアクセスしてみる

KUROKO Connectにログイン後、接続操作時に
先ほど作成したLiveShellの管理画面を接続先に指定します。

接続を押すと、接続用URLが生成されます。
HTTPSの暗号化された通信になっていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/ee1df15d-ad98-4625-8988-1397730be197.png)


URLをクリックすると、ローカル管理画面にリモートでアクセスできていることが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3869727/c778e4c5-27ac-46a9-9fec-b6300ed77a1d.png)


HTTPプロトコルかつ、認証がないLiveShellのローカル管理画面をインターネットに公開することなく安全にリモート操作することができました。

#### LiveShellに接続できる端末やサーバーがある際は、KUROKO Connectを活用いただければLiveShellをリモート操作できるだけでなく他の機器もリモート操作できるようになります。また、機器の死活監視も可能であるため、LiveShellのTCP監視やICMP監視で稼働状況確認も合わせて行うことができます。

この機会にKUROKO Connectのご利用をぜひご検討ください。
報連相の忘れ物



はじめまして！入社して１ヶ月ほど研修を受けたIT系の新卒社員です。

今回は自分がとても苦労したビジネススキルの研修にあった、
### <font color="red">【報連相】</font>というものについての講義をまとめていこうと思います。

	

    目次
    1,報連相とは
    2,必要になるスキル

    3,報告について（報告の目的）
    	a,報告の種類
    	b,【経過報告】について
    	c,分かりやすい報告のポイント

    4,連絡について（連絡の目的）
    	a,注意するべき事項
    	b,起きやすいトラブル

    5,相談について（相談の目的）
    	a,相談に行くタイミング
    	b,相手に伝えるべき内容
    	c,相談ベタな人
    	d,仕事がうまくいき、相談することがないときの注意


### <font color="orangered">＜報連相とは＞</font>

仕事の要と言えるものです。

そもそも「仕事」というものが一人で完結するものではなく、
　様々な人を巻き込んで行うものになります。

ミスやトラブルというものは多くが「伝え漏れ」から発生します。
確認や報告を怠り、一人の基準や解釈で物事を進めてしまうとミスやトラブルに繋がってしまうことがあります。

### <font color="orangered">＜必要になるスキル＞</font>
報連相に関連して、必要になるスキルについて

・分かりやすく簡潔に伝える
・仕事の段取りを理解する
・周りを見て判断する
・自ら成長する

などいろいろあります。

ここでは「分かりやすく簡潔に伝える」について書いていこうと思います。

【後回しにされる人】って身近にいませんか？
あの人結局対応してもらえてないな～という感じの人です。

その原因として
**【分かりづらい】【報告が長い】**
の2点が挙げられます。

防止策として
**・時間を意識する**
3分ほどよろしいですかなど具体的な時間を挙げることで
　相手が報告や相談にかかる時間を開けることができるかを判断しやすくなります。

これは【私の所感】ですが自分にとってもこの時間内で完了させるという前提があると
　物事をまとめやすいと感じました。


:::note warn
ですが
「省略していいわけではない」
「一文を長くしないようにする」ことに注意してください。
:::


**・どのような情報が必要かを考える**
伝えるべき情報として
「自分が伝えたい情報」と「相手が知りたい情報」があります。
これらを5W1Hでまとめると良いようです。

他にも「3点要約法」など様々なまとめ方があったりもします。
自分にあう報連相の【フォーマット】というものを探してみてください！

### <font color="blue">＜報告について＞</font>

ここまでなんか色々書いてきましたが、やっと報連相の先頭部分にある【報告】についてです。
経過や、結果を知らせるために行います。

報告の種類として

:::note info
**・経過報告**
**・中間報告**
**・完了報告**
:::

などがあります！

「経過報告」については
【上司が進捗を把握できる】【事前にミスを防げる】などのメリットがあります。

分かりやすい報告をするために意識することとして
#### １，数字を使う！
#### ２，曖昧な表現を使わない
#### ３，プラスイメージを伝える

などがあるそうです。

:::note warn
タイミングとしては
・節目のタイミング
・予定外、なにか変化があったとき
・悪い状況になったとき
などなど
:::

### <font color="blue">＜連絡について＞</font>
【情報共有】のために行います。
重要かどうかを気にしたら負けらしいです。

起こりやすいトラブルとして
言った言ってないなどのトラブル対策で



注意点
全員に伝わらなきゃダメ！
データに残して管理
鮮度が命

報告などとは違い、
## 多ければ多いほどいい！！


<br>
<br>
<br>


### <font color="blue">＜相談について＞</font>
自分一人で解決できない事柄に対してアドバイスや意見をもらう！！
ことが目的です。

【報告】や【連絡】は他者に向けて行うものでしたが、
【相談】は自分のためにやること！

責任感を感じて一人でやらなきゃと考える人もいるかも知れませんが
自分一人でなくても良い！
です。

メリットとして、「上司との信頼関係を築きやすい」「解決できないことを解決できる」
ということがあります。

### <font color="orangered">＜相談に行くタイミング＞
</font>
【報告】、【連絡】に比べて相談は時間がかかることが多いです！
できれば相手に余裕があるときに行うことができればベストです。

###### ＜伝えるべき内容＞

伝えるべき内容としてここでは
【問題の8段構造】を紹介します。

1,目的：ゴール
2,目標：どのレベルまで
3,現状：現在のレベル
4,問題：目標と現状のギャップ
5,原因：問題の原因
6,問題点：対処するべき原因
7,課題：やるべきこと
8,解決策：具体的なアクション

これらのどの段階まで自分が理解しているのかを整理した上で
相談に行くのがいいです。

お聞きしたいより教えていただきたいの方が良い！


### <font color="orangered">＜質問ベタな人＞</font>

相談するときは自分の悩みをはっきりとさせてから相談しに行く
と考える人は相談ベタ寄りかも知れません

【相談】というものは
悩みがはっきりしていない
└→人に話すなどのアウトプットすることが大事！

悩みがはっきりとしているものは【質問】をする

私はこの【相談】と【質問】がごちゃまぜになっていました...



### <font color="orangered">＜仕事がうまくいき、相談することがないときの注意＞</font>

このときに必要になるのが作業途中に定期的に報告する、
【中間報告】です！

中間報告を行い、自分が間違った方向に進んでいないかを確認することが重要です。

困ったときは誰かに自分の状況を伝えてみるといいかもしれません。
周りには解決方法を持っている人がたくさんいます！




# 最後に

以上になります！
研修をまとめる際に自分も復習できて楽しかったです！

100％の正解を探すのが難しいですが、
ゆっくり頑張っていきましょう～
新卒ではじめて触ったAWS。凄いと思ったサービスや機能を紹介！

## はじめに
私は４月から５月にかけて様々なテクニカルスキルの研修を行ってきました。
その中でも特に興味を持った技術について今回はお話させていただけたらなと思います。
 私が特に興味を持った技術は **「AWS」** についてです。
興味を持った理由は**２点**あります。

まず１つ目に、**インフラ系でありながら比較的新しい技術であるという点です。**
私は、文系学部出身のITについてほどんど触れてこなかった人間です。
そのため、まずはインフラエンジニアからスタートし、技術を身に着けながら成長したいと考えています。
また、覚えるならば新しい技術を学びたいと考えており、
今後、より活躍の機会が増えるような技術をやりたいと考え
比較した結果、**AWS**を選択するに至りました。

２つ目は、**手軽にスケールアップやサーバー立てなどが行えるという点です。**
テクニカルスキル研修ではオンプレミスのサーバーも触りました。
そこと比較をして、AWSの手軽さと素晴らしさを理解しました。
この手軽さに加えて、様々なサービスをAWSは利用可能であるというのも、非常に魅力的な点と言えます。
以上２点が今回紹介するに至った経緯です。

では、紹介するにあたって何を話すかという問題があります。
私自身まだAWSを学んで少ししか時が経っていません。
ですので、今回は私が学習して興味深いと思った機能やサービスをいくつかあげます。
経験者の方は「使いやすいよね～」といった風に温かく見てもらえれば幸いです。
未経験の方も、「こんな機能やサービスがあるんだ」と思っていただければと思います。




## ①冗長性の高さ
AWSでは冗長性の高いサービスを提供しています。
様々な機能でこの冗長性を広げているのです。
その理由としてまず、**「AZ（アベイラビリティゾーン）」** があるという点です。AZとはリージョンと呼ばれる、利用者が使用するサーバーのデータセンター内でそれぞれ切り離されており、冗長的な電力源、ネットワーク、そして接続機能を備えている１つ以上のデータセンターのことを言います。
また、そのAZも複数のデータセンターで構成されており、冗長性があります。
リージョンを分けることで、１つのリージョンがダメになってもカバーができたり、AZがあることで、災害やトラブルが起こったとしても、データは別AZ内にも保存されており無事、といったことが可能になるのです。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051401/278f7df5-a414-4a9b-94c8-7c2bf761b3dc.png)

## ②「AWS Lambda」
AWS　Lambdaは自分たちでサーバーを用意することなく、何かイベントが発生した際には、用意していたアプリケーションのコードをクラウド上で実行することができるサービスです。
これには、サーバーやオペレーティングシステムのメンテナンス、自動スケーリング、さらにログ記録などを行う事ができます。
他にも、Cloud　Watchと併用することで何か異常が発生したり、リソースをオーバーしてしまう状態になった場合、連絡を飛ばすことができます。
また、このサービスでは様々な言語を実施可能です。
JavaやPowerShell、C＃などのコードが対象です。
このサービスはサーバー管理をしなくても良くなる点や、自動的にクラウドサービスを調整してくれたりと、便利な機能が詰まったサービスです。
すぐにでもプログラム開発をしたい人におすすめなサービスだといえます。

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html

## ③「Amazon　S3」
このサービスはファイルデータを保存するサービスです。
バゲットと呼ばれる単位でまとめられたストレージ内に、画僧や動画ファイルなどの様々なファイルを保存することができ、このファイルには５TBまで入れることができます。
そして、このファイル数の総量に上限がないことが最大の魅力と考えます。
また、ファイルを守るための機能が複数あるというのも魅力です。
「S3　標準」と呼ばれる99.999999999％(イレブンナイン)の耐久性と99.9％の可用性が保証されていたり、サーバー側で暗号化を行っていることにより、悪意ある第三者からデータを保護できる機能があります。
このようにとても便利且つ、安心できるサービスなのです。

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/Welcome.html
## ＜最後に＞
今回はAWS学習を始めた私が驚いた、便利だと思ったサービスや機能について紹介をさせていただきました。
これらのサービスはAWSを学んでいく上で基本的で有名なものです。
有名になる理由がなんとなくわかるのではないでしょうか。
他にもAWSには様々な機能があります。様々な要件に対して柔軟に素早く対応できるのも魅力の一つです。
これからも学習を続け、業務で使う機会がありましたら、また実践経験談として記事をまとめていきたいなと思います。
本記事を読んでいただいてありがとうございました。
***
参考文献・参考サイト

https://aws.amazon.com/jp/builders-flash/202202/awsgeek-s3/

高い可用性と耐久性のオブジェクトストレージ。Amazon S3 をグラレコで解説
2025年5月9日　閲覧

「仕組みを知って仕事に活かす！AWSの技術と仕組み」
宮本圭一郎著　秀和システム
覚えておきたいWindowsショートカットキー

# 目次
[1.はじめに](#1はじめに)

[2.Windowsキーを使ったショートカット](#2windowsキーを使ったショートカット)

[3.Ctrlキーを使ったショートカット](#3ctrlキーを使ったショートカット)

[4.Altキーを使ったショートカット](#4altキーを使ったショートカット)

[5.テキスト操作](#5テキスト操作)

[6.終わりに](#6終わりに)


# 1.はじめに
2025年4月から社会人スタートした木村です。
研修で初めて知った、あるいは元から知っていたものまでPCの便利かつ、使いこなせたら少し楽に作業ができるショートカットキーについて、自分も覚えたいので紹介したいと思います。
今回は研修にて学んだことに絞らせていただきます。

# 2.Windowsキーを使ったショートカット

**Win (Windowsのロゴマークのキー)**
動作：スタートメニューを開く、開いている際に押すと閉じる
用途：開きたいアプリケーションを検索し、すぐに開くことができる
※用途例：Win → "Excel"と入力 → Enterで"Excel"が開く

**Win + E**
動作：エクスプローラーを開く
用途：ファイルやフォルダ―へのアクセスの迅速化

**Win + I**
動作：設定を開く
用途：システム設定や個人設定の変更に使用

**Win + P**
動作：ディスプレイの表示変更
用途：ディスプレイの拡張や複製の設定に便利

**Win + R**
動作：「ファイル名を指定して実行」のダイアログが開く
用途：テキストボックス内にファイル名を入力することで素早く開くことができる

**Win + V**
動作：クリップボード（コピーしたテキストや画像、ファイルなどを一時的に保存）の履歴を開く
用途：過去にコピーしたものを再度貼り付けることができる
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051405/52fc0d7a-959f-4aa8-83ec-cd9f4056aa45.png)
<br>

**Win + L**
動作：PCをロックできる
用途：PCをロック画面にする際に使用（PCを置いて場を離れる際など）

**Win + Tab**
動作：起動中のアプリの一覧が表示される	
用途：開いているウィンドウや仮想デスクトップの管理に使用

**Win + 方向キー**
動作：ウィンドウのサイズや位置を変更できる
用途：見たいウィンドウを最大化、最小化でき、ウィンドウ画面を右半分、または左半分に配置し、画面を整理できる。
用途例：Win + ↑でウィンドウを最大化など

**Win + Shift + S**
動作：表示されている画面を画像として保存できる
用途：画像としてほしい画面を画像として使用したいときに使用。一部分だけを切り取ることもできる

<br>

**全体画像**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051405/3f58a571-12db-483b-8c2f-c6477db1b823.png)

<br>

**一部分だけを切り取った画像**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051405/071c5cfd-6c25-462e-a80c-397d5b949f65.png)


# 3.Ctrlキーを使ったショートカット

**Ctrl + Shift + Esc**
動作：タスクマネージャーを開く
用途：実行中のプロセスやアプリケーションの管理に使用
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051405/ad59a0d0-5ac5-483f-80f1-e73c49ef8dfb.png)

<br>

**Ctrl + V**
動作：クリップボードにコピーまたは切り取りされたテキストやアイテムを貼り付ける
用途：指定して場所にテキストやファイルなどを貼り付ける際に使用

**Ctrl + X**
動作：選択したテキストやアイテムを元の場所から削除し、クリップボードに切り取る
用途：テキストやファイルを指定の場所へ移動するために使用

**Ctrl + F**
動作：検索や検索置換の機能を開く
用途：ドキュメントやウェブページ内で特定の単語やフレーズを検索するために使用

**Ctrl + A**
動作：すべてのテキストやアイテムなどの項目一度に選択する
用途：フォルダー内のすべてを選択するために使用

**Ctrl + Z**
動作：最後に行った操作を一つ元に戻す、キャンセルする
用途：操作を誤った際に取り消すために使用

# 4.Altキーを使ったショートカット

**Alt + Tab**
動作:開いているアプリケーション、ウィンドウを方向キーを押して切り替える
用途:素早くアプリケーション、ウィンドウを切り替えることができる

**Alt + F4キー**
動作:操作しているアクティブなウィンドウを閉じる
用途:素早くウィンドウを閉じる際に使用
※開いているウィンドウが無い場合はシャットダウンを求めるウィンドウが起動する
→Enterを押すだけでシャットダウンできる
<br>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051405/7c869d91-d5c8-4728-809d-e98f9992145b.png)


# 5.テキスト操作
**方向キー**
動作：カーソルを移動する
用途：テキスト内でカーソルを移動するために使用

**Ctrl + 方向キー**
動作：単語単位でカーソルを移動する
用途：テキスト内で素早く移動するために使用

**Shift + 方向キー**
動作：テキストを選択する
用途：テキストを選択するために使用

# 6.終わりに
今回紹介したもの以外にも多くのショートカットキーがあります。
マウスで操作していた内容をキーボード上で操作することで、より効率的に業務を進めることができるのではないでしょうか。
私もここで紹介したものすべてを覚えているわけではないので今後の業務効率化のためにも、様々なショートカットキーを覚えていきたいです。
プログラマーとして就職を目指す方のための「統合開発環境（IDE）おすすめ一覧表

# 💻 プログラマー就職を目指す人のためのIDEおすすめ一覧とキャリアアドバイス【2025年最新版】

プログラマーとして就職を目指している方にとって、\*\*どの統合開発環境（IDE）を使うべきか？\*\*は非常に重要なテーマです。この記事では、目的別におすすめのIDEを一覧表で紹介しつつ、**就職活動やスキル習得のためのポイント**を総合的に解説します。

---

## 🧠 まずIDEとは？

\*\*IDE（統合開発環境）\*\*とは、コードエディタ・デバッガ・ビルドツールなどが1つに統合された「プログラミングの作業場」です。使いやすいIDEは、生産性を飛躍的に高めてくれます。

---

## 🛠 IDEおすすめ一覧【目的別】

| 開発目的                  | IDE名                   | 特徴・おすすめポイント                       | 対応言語例                             |
| --------------------- | ---------------------- | --------------------------------- | --------------------------------- |
| Webアプリ開発（HTML/CSS/JS） | **Visual Studio Code** | 軽量・高速、拡張機能が豊富、ReactやVueの開発にも最適    | JavaScript, TypeScript, HTML, CSS |
| 本格的なJava開発            | **IntelliJ IDEA**      | Java開発に最適。SpringやKotlinも強力サポート    | Java, Kotlin                      |
| Python中心の開発           | **PyCharm**            | Python専用IDE、デバッグや仮想環境の管理が容易       | Python                            |
| C/C++の組み込み系開発         | **CLion**              | 高速なビルドとコード補完、CMake対応              | C, C++                            |
| .NETアプリ・Windows開発     | **Visual Studio 2022** | .NET, C#, Windowsフォーム開発に必須        | C#, VB.NET                        |
| モバイルアプリ（Android）      | **Android Studio**     | Google公式、Kotlin対応、エミュレーターが優秀      | Kotlin, Java                      |
| 複数言語の学習用              | **Replit**（クラウドIDE）    | ブラウザ上で動く初心者向けIDE。インストール不要で環境構築も不要 | Python, JS, Java, C++他            |

---

## 👨‍💻 プログラマー就職のためにやるべきこと

### 1. ✅ ポートフォリオを作成しよう

* GitHubに自作アプリを公開
* READMEに開発背景、使った技術、工夫点を記載
* フロント：ToDoアプリ、家計簿アプリなど
* バックエンド：API作成、DB連携など

### 2. 🎓 資格は武器になる

* **基本情報技術者試験（FE）**
* **Java Silver / Python試験**
* **AWS Certified Cloud Practitioner**
* 資格があると「学習姿勢」と「基礎力」が評価されやすい

### 3. 🌐 開発系コミュニティで情報収集

* Qiita、Zenn、Stack Overflow
* Twitterでエンジニアアカウントをフォロー
* Wantedlyでエンジニア募集を探すのもアリ

### 4. 💼 就職活動の具体的アドバイス

* **未経験可の自社開発企業**を中心に探す
* **スクール卒業後でもポートフォリオが強ければ可**
* エージェント登録（例：レバテック、ウズキャリIT）もおすすめ

---

## 📚 学習教材おすすめ

| カテゴリ  | 教材名・サイト           | ポイント               |
| ----- | ----------------- | ------------------ |
| 書籍    | 『スッキリわかるJava』     | 初学者に大人気のJava入門書    |
| Web学習 | Progate、ドットインストール | ゲーム感覚で学べる初心者向けサイト  |
| 実践型   | Udemy、Schoo       | ポートフォリオ制作に直結する講座多数 |

---

## 🎯 まとめ

プログラマーとして就職するためには、**IDE選び、ポートフォリオ作成、資格取得、コミュニティ参加**など複数の視点から準備が必要です。完璧である必要はありませんが、「自走できる力」が求められる時代だからこそ、**実践と発信**を意識しましょう！

---
プロデル、調査 その4

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

# 練習問題
msilで、「こんにちは」せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f370b150-8ead-4925-affe-1feb942e327e.png)


# サンプルコード

```
アセンブリ名は、「テスト0.exe」

中間コード生成機で、アセンブリ名を作って、プログラム本体とする
プログラム本体へ、「メインクラス」というクラスを作って、メインクラスとする
メインクラスへ、「main」という静的メソッドを作って、メインメソッドとする
メインメソッドへ、「こんにちは」を、文字列定数として書き込む
メッセージ表示を、メインメソッドへ、書き込む
メインメソッドへ、ポップ命令を書き込む
メインメソッドへ、終了命令を書き込む
プログラム本体の開始メソッドは、メインメソッド
メインクラスを、完成させる

プログラム本体を、（プログラムのフォルダ）&　アセンブリ名へ、保存する


```

以上。
【蔭山公望】マーケ×エンジニアの能力が最強な話

蔭山公望です。

「マーケターとエンジニアって、全然違う職種だよね」とよく言われる。確かに、マーケティングは人を動かすスキル、エンジニアリングはモノを動かすスキル。まるで対照的なように見える。

だけど、僕は声を大にして言いたい。**「マーケティング」と「エンジニアリング」を掛け合わせた人材こそ、今の時代において最強である**と。

なぜか？ それは“戦略”と“実装”を一人で完結できるからだ。

## マーケターが抱える「技術の壁」

Webマーケターとして働いていると、さまざまなツールや仕組みに触れる機会がある。広告運用、SEO、LP制作、ABテスト、GA分析……どれも「テクノロジー」と密接に関係している。

しかし、マーケター側から見ると、ちょっとコードが絡んだだけでハードルが一気に上がる。
例えば、Googleタグマネージャーでコンバージョンイベントを設定したい。フォーム送信完了をトリガーにしたい。だけど、JavaScriptの知識がないと設置ミスを起こしてデータが取れなかった、なんて話は日常茶飯事だ。

ここで「エンジニアにお願いすればいいじゃん」と思うかもしれない。でも、社内のリソースやスピード感を考えると、毎回依頼して確認を待つより、自分で手を動かせた方が圧倒的に早い。

つまり、マーケティングに技術の知識があると、“施策を思いついてから動かすまでのスピード”が爆速になる。

## エンジニアが抱える「顧客視点の弱さ」

逆に、エンジニアサイドにも課題がある。それは「技術はあるけど、誰のために何を作っているかの意識が弱い」ことだ。

優秀なエンジニアでも、ユーザーのペインやマーケット感覚を知らなければ、自己満足的なプロダクトになってしまう。機能は完璧、コードは美しい。でも、誰も使わない。

マーケティング視点があると、まず「ニーズありき」で機能を考えられるようになる。
ユーザーインタビューで痛みを拾い、競合との差別化を見極め、実装内容を絞り込む。
このプロセスを理解しているエンジニアは、開発の優先順位を正しく見極めることができる。

## 最強の組み合わせは「企画×実装」を一人で回せる人

マーケ×エンジニアのスキルを持つ人材は、たとえばこんなことができる。

* LPをGoogle広告用に構成・実装し、ABテストも自分で設計
* SEO構造を意識したコーディングで流入を狙う
* ユーザー分析→改善案出し→自ら改修まで対応
* データ分析ツールと連携し、リアルタイムな改善サイクルを回す

つまり、**「仮説→検証→改善」を超短時間で自走できる**。これはチームの中でも圧倒的に強い。

特にスタートアップや小規模事業では、一人がいくつもの役割を兼任せざるを得ない。そんな環境でこそ、マーケとエンジニアを両立できる人材は、重宝されるどころか“欠かせない存在”になる。

## 今、求められるのは“ハイブリッド型人材”

この「マーケ×エンジニア」の組み合わせは、今や転職市場でもフリーランス市場でも引っ張りだこだ。実際に、僕自身もこのスキルセットを身につけてから、受けられる案件の質も量も劇的に変わった。

* マーケのKPIを理解して開発できる
* コードを読めるから仕様の調整も柔軟に対応
* “作って終わり”ではなく、“売れるまで”責任を持てる

こうした価値が、今の時代の“本当に信頼される人材像”だと思う。

## まとめ：マーケも、コードも、どっちもやるべき

かつては「分業」が当たり前だった時代もある。でも、今はちがう。
誰でもノーコードでモックが作れる時代、AIが提案を代行する時代。

そんな中で、“自分の頭で戦略を考えて、自分の手で動かせる人”が、最強であることは間違いない。

マーケターは、HTMLとJavaScriptの基本を学ぶだけでも世界が変わる。
エンジニアは、ユーザーインタビューとKPI設計を経験するだけで視座が変わる。

マーケ×エンジニア——この掛け算は、間違いなく「個」の時代を勝ち抜く鍵になる。
だからこそ、今からでも、両方に足を突っ込んでみよう。
そこには、驚くほど大きな可能性が待っている。
新サイト用にSVGのアイコンを作りました

# はじめに
こちらの作成中サイト　https://www.everyit.net/
アイコンがViteデフォルトのままになっていましたので、さすがに"テスト運用感"を強く感じてしまいます。（↓画像参考）
![スクリーンショット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4097028/00675fe6-6c81-4438-9288-7df980889ca5.png)
このため、アイコンを優先して作成することにしました。

# コンセプト
本サイトでは、ITの調査を依頼してもらうのが目的のため
- Webブラウザ
- 虫眼鏡

を組み合わせることにしました。
シンプルに、IT＝Webブラウザ、調査＝虫眼鏡というイメージの組み合わせ。

初期案は「PCアイコンにハンチング帽」という案でしたが没になりました。

# 結果
下記のアイコンになりました！
![スクリーンショット 2025-05-29 3.04.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4097028/55402ec7-14d3-4a9e-be15-35035a9809be.png)



# おまけ
今回はSVGで作成していましたが、ほとんどChatGPTに頼りきりでした。
ほとんど完成形まで作成してくれて、さらにSVGはテキストファイルなので微調整を行うことができます。
そういう意味ではアイコン作りはAIと相性がとてもいいかもしれません。
Excel VBA ショートカット一覧

# 💡Excel VBAユーザー必見！知って得するショートカットキー一覧まとめ【時短＆効率化】

VBAで日々の業務を効率化している皆さん、**Excel VBA開発中に使える便利なショートカットキー**はご存じでしょうか？

今回は、初心者～中級者の方に向けて、\*\*「知ってるだけで作業効率がグッと上がる」\*\*VBA開発のショートカットをカテゴリ別にまとめました！

---

## 📘エディタ操作編（VBE：Visual Basic Editor）

| ショートカット             | 内容                 |
| ------------------- | ------------------ |
| `Alt + F11`         | ExcelとVBAエディタの切り替え |
| `Ctrl + R`          | プロジェクトエクスプローラ表示    |
| `Ctrl + G`          | イミディエイトウィンドウ表示     |
| `Ctrl + F`          | コード内を検索            |
| `Ctrl + H`          | 文字列の置換             |
| `Ctrl + Shift + F2` | 最後に編集した位置にジャンプ     |
| `F4`                | プロパティウィンドウの表示切替    |

---

## ✏️コード編集編

| ショートカット                | 内容                            |
| ---------------------- | ----------------------------- |
| `Ctrl + Space`         | 変数名や関数名の補完候補を表示（IntelliSense） |
| `Tab` / `Shift + Tab`  | インデント / インデント解除               |
| `Ctrl + Shift + ↓ / ↑` | 複数行をまとめて移動                    |
| `Ctrl + Y`             | 現在行を削除                        |
| `Ctrl + Z`             | 元に戻す（Undo）                    |
| `Ctrl + Shift + Z`     | やり直す（Redo）※VBEでは一部の操作のみ対応     |

---

## 🧪デバッグ・実行編

| ショートカット        | 内容                       |
| -------------- | ------------------------ |
| `F5`           | マクロの実行                   |
| `F8`           | ステップ実行（1行ずつ）             |
| `Shift + F8`   | プロシージャのステップ実行（1プロシージャずつ） |
| `Ctrl + Break` | 実行中のマクロを停止               |
| `F9`           | ブレークポイントの設定・解除           |
| `Ctrl + F9`    | 条件付きブレークポイント設定           |

---

## 🎯即効テクニック編（知ってると差がつく！）

| ショートカット              | 内容                  |
| -------------------- | ------------------- |
| `Ctrl + D`（Excel側）   | 上のセルの内容をコピー（データ補完）  |
| `Ctrl + Shift + End` | 最終データセルまで一気に選択      |
| `Ctrl + Arrow`       | データ範囲の端までジャンプ       |
| `Alt + Q`            | VBAエディタを閉じてExcelへ戻る |

---

## 📝おまけ：よく使うVBE機能（手動でも覚えておこう）

* **ツール > 参照設定**：外部ライブラリの追加
* **挿入 > モジュール**：標準モジュールの追加
* **挿入 > ユーザーフォーム**：UI付きフォーム作成

---

## 🚀まとめ

Excel VBAを使いこなすには「コードを書く力」だけでなく、「**ツールを素早く扱うスキル**」もとても大切です。

ショートカットを覚えることで、**思考を止めずに直感的に操作できる**ようになり、開発のスピードと集中力がグッと高まります。

この記事をブックマークして、気になるショートカットから1つずつ習得してみてください！

---

📌**他にも役立つVBA時短テクがあれば、コメント欄でぜひ教えてください！**

---
プロデル、調査 その3

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

# 練習問題
midiを鳴らせ。

# サンプルコード

```
「ソ8ソラソシ4　シ8シシドシラ4
ラ8ララシラソ4　ソ8ラソファシレ4
ミ8ファソ4ファ8ソラ4　ソ8ラシ4シ8ララソ4
ソ8ラ4　ド8シラソラ4　ソ8ソラソシ4
シ8シドシラ4　ラ8ララシラソ4
ソ8ラソファミレドシ4　ミ8ファソファソラ4
ソ8ラシシララソ4　シ8ラ4　ラ8ララシレラソ4
シ8シラララララシレラソ4
」を演奏する

```


以上。
【公ド読】複雑な継承階層の簡略化

【公式ドキュメントを読もうシリーズ】複雑な継承階層の簡略化

## シリーズ概要

[https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3](https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3)

## URL

[https://docs.github.com/ja/copilot/copilot-chat-cookbook/refactoring-code/simplifying-complex-inheritance-hierarchies](https://docs.github.com/ja/copilot/copilot-chat-cookbook/refactoring-code/simplifying-complex-inheritance-hierarchies)

## 説明

複雑な継承階層をコンポジションベースの設計にリファクタリングしてくれる。

リンクのコードを見ても、継承を多用していると、継承先を追っていくのが大変な一方で、コンポジションでの管理だとコードが読みやすくなるのかもしれないとは思っている。

## 所感

アーキテクチャの設計ってまだまだ知らないことばかりなので、学ぶのが面白いです。
今更ながらAIが出力したコードをそのままQiitaに載せることが著作権上大丈夫なのかよくわかっていないので結構調べたが、私のコードは
- 他者の著作物の無断転用をしているわけでもなく
- 一般知識の列挙であり、
- 著作権の保護対象外である

ため大丈夫だと思っているが、100%大丈夫ということでもないので、コードの掲載はやめました。
AIが生成したコードを書くことで、理解が深まるんだろうと思ったが、権利の勉強をしないと発信することも怖いなと思いました。
paizaラーニングレベルアップ問題集の「フィボナッチ数」をやってみた。

paizaラーニングレベルアップ問題集の[フィボナッチ数](https://paiza.jp/works/mondai/array_primer/array_primer__fibo)をやってみました。
- - -
###### 問題
https://paiza.jp/works/mondai/array_primer/array_primer__fibo
- - -
###### 方針
- 最初に長さ$N$の整数配列を宣言し、
	- $i=0,1$に対して$F_i=i$
	- $i\ge2$に対して$F_i=F_{i-1}+F_{i-2}$
とする
- 最初に$\\{0,1\\}$のリストを宣言し、$n\ge2$について$F_n=F_{n-1}+F_{n-2}$を追加する

いずれかの方法で解いていきます。
- - -
###### C
```c
#include <stdio.h>

int main() {
	int n;
	scanf("%d", &n);
	int F[n];
	for (int i = 0; i < n; i++)
		if (i < 2) F[i] = i;
		else F[i] = F[i-1] + F[i-2];
	for (int i = 0; i < n; i++) printf("%d\n", F[i]);
	return 0;
}
```
- - -
###### C++
```cpp
#include <iostream>
#include <vector>
using namespace std;

int main() {
	int n;
	cin >> n;
	vector<int> F = { 0, 1 };
	for (int i = 2; i < n; i++) F.push_back(F[i-1] + F[i-2]);
	for (int i = 0; i < n; i++) cout << F[i] << endl;
	return 0;
}
```
- - -
###### C#
```cs
using System;

class Program
{
	public static void Main()
	{
		int n = int.Parse(Console.ReadLine());
		int[] F = new int[n];
		for (int i = 0; i < n; i++)
			if (i < 2) F[i] = i;
			else F[i] = F[i-1] + F[i-2];
		for (int i = 0; i < n; i++) Console.WriteLine(F[i]);
	}
}
```
- - -
###### Go
```go
package main
import "fmt"

func main() {
	var n int
	fmt.Scan(&n)
	F := []int{ 0, 1 }
	for i := 2; i < n; i++ {
		F = append(F, F[i-1] + F[i-2])
	}
	for i := 0; i < n; i++ {
		fmt.Println(F[i])
	}
}
```
- - -
###### Java
```java
import java.util.*;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		sc.close();
		int[] F = new int[n];
		for (int i = 0; i < n; i++)
			if (i < 2) F[i] = i;
			else F[i] = F[i-1] + F[i-2];
		for (int i = 0; i < n; i++) System.out.println(F[i]);
	}
}
```
- - -
###### JavaScript
```js
const n = Number(require("fs").readFileSync("/dev/stdin", "utf8").trim());
const F = [ 0, 1 ];
for (var i = 2; i < n; i++) F.push(F[i-1] + F[i-2]);
for (var i = 0; i < n; i++) console.log(F[i]);
```
- - -
###### Kotlin
```kotlin
fun main() {
	val n = readLine()!!.toInt()
	val F = IntArray(n)
	for (i in 0 until n)
		F[i] = if (i < 2) i else F[i-1] + F[i-2]
	for (f in F) println(f)
}
```
- - -
###### PHP
```php
<?php
	$n = intval(fgets(STDIN));
	$F = [ 0, 1 ];
	for ($i = 2; $i < $n; $i++) $F[] = $F[$i-1] + $F[$i-2];
	foreach ($F as $f) echo $f, PHP_EOL;
?>
```
- - -
###### Perl
```pl
my $n = int(<STDIN>);
my @F = (0, 1);
while (scalar(@F) < $n) {
	push @F, $F[-1] + $F[-2];
}
foreach $f (@F) {
	print "$f$/";
}
```
- - -
###### Python3
```py
n = int(input())
F = [0, 1]
while len(F) < n:
	F.append(F[-1] + F[-2])
for f in F:
	print(f)
```
- - -
###### Ruby
```rb
N = gets.to_i
F = [0, 1]
(2...N).each do
	F << F[-1] + F[-2]
end
F.each do |f|
	p f
end
```
- - -
###### Scala
```scala
import scala.io.StdIn._

object Main extends App{
	val n = readInt()
	val F = new Array[Int](n)
	for (i <- 0 until n) F(i) = if (i < 2) i else F(i-1) + F(i-2)
	for (f <- F) println(f)
}
```
- - -
###### Swift
```swift
let n = Int(readLine()!)!
var F = [0, 1]
for i in 2..<n {
	F.append(F[i-1] + F[i-2])
}
for f in F {
	print(f)
}
```
🌟 Vol.11.4 総まとめ：Struts2自動バインディング完全理解ガイド _ParametersInterceptor × OGNL連携の仕組みと実践_

> ✅ 本記事は「Vol.11.4 シリーズ」総まとめページです。
> **フォーム→アクションの自動バインディングの仕組み**と、**OGNL式を用いたパラメータ連携**について、基礎から実践まで体系的に整理しています。

---

## 📘 本シリーズの対象読者

- **Struts2を学び始めたばかりの方**
- フォーム入力値が「どうやって」Actionクラスに渡るのかを知りたい方
- OGNLやParametersInterceptorの内部処理がイマイチ見えていない方
- 現場で実務的な画面遷移・データ連携に悩んでいる方

---

## 📚 対象シリーズ構成

| No. | タイトル | 内容概要 |
|:--:|:--|:--|
| [🧩 Vol.11.4](https://qiita.com/juehara-crypto/items/253142d13fe5f604610f) | 入門者のための「パラメータ自動バインディング」完全理解ガイド | Struts2における**ParametersInterceptorの役割**、**リクエストパラメータ → アクション連携の原理**を図解つきでわかりやすく解説。 |
| [🧩 Vol.11.4.1](https://qiita.com/juehara-crypto/items/4fd8ed2a8be317f6e1bd) | 自動バインディング実践パターン集 | よくあるフォーム構造ごとに**OGNLバインディングの動作パターン**を図・コード付きで解説。チェックボックスやMapなどのユースケースもカバー。 |

---

## 🔍 学べる技術・概念

| トピック | 学べる内容 |
|---|---|
| ParametersInterceptor | リクエストパラメータをActionにマッピングする仕組み |
| OGNL (Object-Graph Navigation Language) | `user.name` のような式がどうActionやModelに働きかけるか |
| 自動バインディング | セッター／ゲッターを通じたデータ連携の原理 |
| モデルのネスト構造 | `User user` のようなオブジェクト型プロパティの扱い |
| 配列／List／Map | フォーム上のリストデータの取り扱い方と命名規則 |
| チェックボックス・複数選択 | `input type="checkbox"` のような複数値パラメータの受け取り |

---

## 🧩 位置づけと意図

この「Vol.11.4 シリーズ」は、Struts2の実務開発で避けて通れない「リクエスト→アクション層の連携処理」にフォーカスしています。

### ✅ このシリーズが目指すもの

- **仕組みの“ブラックボックス化”を防ぐ**  
　→ ParametersInterceptorの動作を「図解 × 実例コード」で把握

- **現場で詰まりやすい構造を分解**  
　→ 複雑なフォーム構造で発生する「なぜ値が入らない？」の原因を自己解決できるように

- **「型」と「名前付け」ルールを明確化**  
　→ Struts2のOGNL解釈ルールを体系的に整理

---

## 🛠 今後の予定（Vol.11.4.x）

以下のような実装・実務に向けたトピックも、今後の `.x` 系記事で展開を予定しています：

- `params` 設定によるマッピング制御（include/exclude）
- JSON形式でのデータ受け渡しとバインディング挙動の違い
- 独自Interceptorとの組み合わせでのバインディング制御
- 入力バリデーションとの連携（OGNLエラーの発生ケース）

---

## 📌 まとめ

本シリーズは、Struts2における**リクエストパラメータの自動処理の核心**を解き明かすためのものです。

- なぜ `user.name` で `getUser().setName()` が呼ばれるのか？
- なぜ `checkbox=on` の値がうまく受け取れたり、受け取れなかったりするのか？

こうした**「フォーム入力 → アクション」間の見えない魔法**に、構造的な理解を与えることを目的としています。

ぜひ、各ユースケースを実装しながら学びを深めてください。

---

👉 次に進みたい方は [Vol.11.5以降](#)（※今後追加予定）や、以下の関連記事もどうぞ！

---

## 📎 関連記事リンク集

- [🌟 Vol.11.2 総まとめ：Struts2アクション層設計とUX改善のベストプラクティス大全](https://qiita.com/juehara-crypto/items/e58f3570c06d3daff8b6)

- ⚙️ Vol.11.3 総まとめ：Struts2 Interceptorの基礎理解とカスタマイズ実践の完全ガイド
https://qiita.com/juehara-crypto/items/e8310ee7d42548cc28e5

---

✍ ご意見・ご質問はお気軽にコメントでどうぞ！
特殊IP Azure DNS 168.63.129.16について

特殊IP Azure DNS 168.63.129.16について最近理解ができて、ここにメモしておきます。
### 発見1：168.63.129.16はホストノードの仮想IPで、UDRの対象外
- **理解の確認**：その通り、`168.63.129.16` はAzureプラットフォーム内部の仮想IPで、Azure DNSのメタデータサービスやヘルスチェックなどに使用されます。このIPはAzureの基盤インフラに属するため、ユーザー定義ルート（UDR）で制御できません。そのため、Azure Firewall（AzFW）のログにこのIPに関連するトラフィックが表示されないのは、UDRに制御されないので、AzFWを経由せず直接Azure内部で処理されるためです。


### 発見2：168.63.129.16はAzure内部からのみアクセス可能
- **理解の確認**：その通り、このIPはAzureプラットフォーム内部専用のアドレスであり、外部（インターネットやローカルPC）から直接アクセスすることはできません。あなたの`nslookup`や`ping`の結果（タイムアウト）は、このIPが外部から到達不可能であることを示しています。Azureリソース（VMやApp Serviceなど）からこのIPを利用する場合、通信はAzureのバックボーンネットワーク内で完結します。
- **補足**：このIPは、Azure DNS resolverやインスタンスメタデータサービス（IMDS）など、Azure内部のサービスエンドポイントとして機能します。外部から利用しようとしても、Azureのネットワーク境界でブロックされるため、到達できません。
- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620054/f7254b0c-28ac-4e68-bfbc-4d080780941e.png)

- ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/620054/27e1b860-789e-4b03-9257-e5fa15f8b707.png)

### 発見3：Azureリソースから168.63.129.16への通信はAzure内部で完結
- **理解の確認**：その通り、Azureリソースが`168.63.129.16`にアクセスする際、通信はMicrosoftのグローバルネットワーク内で処理されます。これはAzureのバックボーンを利用した安全な通信であり、インターネットには公開されません。Microsoftのドキュメント（グローバルネットワーク）にも記載の通り、Azureのネットワークは高信頼性と低遅延を保証する設計です。

### 追加のポイント
- **実運用での注意**：`168.63.129.16`を直接指定する代わりに、Azure DNSを利用する場合は通常、VNetのDNS設定で`default`（Azure提供のDNS）を使用するか、必要に応じてカスタムDNSサーバーを設定します。カスタムDNSを利用する場合でも、`168.63.129.16`はAzure内部サービスの一部として動作し続けるため、特別な設定は不要です。
- **ログの確認**：AzFWでログが見られない場合、ネットワーク監視ツール（Network Watcherなど）やAzure Monitorで、VNet内のトラフィックフローを確認すると、内部通信の詳細が把握できる場合があります。
- **セキュリティ面**：このIPはAzureプラットフォームが管理するため、ユーザーがセキュリティ設定を気にする必要はほぼありません。ただし、VNetのNSG（ネットワークセキュリティグループ）で意図せず内部通信を制限しないよう注意が必要です。