OmniAICreator/Qiita-1.07M huggingface dataset:
【個人用】AWS Solution Architect Associate対策ノート(コンピューティング編)

## 扱う内容

・Lambda
・API Gateway
・ECS
・Fargate
・EKS

# 【Lambda】

## Lambdaの基礎知識

・サーバーレスである
・マルチAZ構成のため可用性が高い
・リクエスト数に応じて自動スケーリングされる
・不定期なリクエストを処理するのに向いている。常時リクエストをLambdaで処理しようとすると、EC2インスタンスで処理するより無駄に金がかかるので注意


## Lambdaのスタート

Lambda関数が初めて実行される場合や、久しぶりに実行される場合は、関数実行環境の準備に時間がかかるため、処理開始までの時間が長くなる。これを**コールドスタート**という。
逆に、同じLambda関数に対するリクエストが継続的に発生する場合は、実行環境が再利用されるので、処理開始までの時間が短くなる。これを**ウォームスタート**という

リクスト数が多くなると、コールドスタートが頻発しやすい
そのため、この遅延を抑えるために、**プロビジョニングされた同時実行**の設定を行うとよい
設定で指定された数の実行環境を事前に用意してくれる

## VPCアクセスの設定をしたLambda
Lamnda関数は、作成後にLambda専用のセキュアなVPCに配置される
VPC パブリックサブネット内のリソースにはインターネット経由でアクセスできるが、プライベートサブネット内のAWSリソースには直接アクセスできない
プライベートサブネット内のAWSリソースへアクセスするには、**VPCアクセス**の設定を行う
ただし、この設定を行うと、インターネットへのアクセスはできなくなる
もし、VPCアクセスを設定したLambdaからインターネットへアクセスしたい場合は、**NATゲートウェイ**または**NATインスタンス**を経由する

# 【API Gateway】

## 作成できるAPIの種類

### REST API
クライアントからのリクエストに対して、レスポンスを返す形式のAPI

### HTTP API
ほぼREST APIと同じだが、低遅延かつ低コスト
ただし、APIキャッシュを利用できない

### WebSocket API
クライアントとサーバーの間でリアルタイムな双方向通信するためのAPI
継続的にデータ送受信をしたい場合はこれ(チャットとか)

## VPCリンク

API Gatewayで作成したAPIは、VPC パブリックサブネット内のリソースにはインターネット経由でアクセスできるが、プライベートサブネット内のAWSリソースには直接アクセスできない
これをアクセスさせたい場合は、**VPCリンク**を使う
これにより、プライベートサブネット内のAWSリソースとAPIの間で、インターネットを経由しないセキュアな通信が可能になる

## APIキャッシュ

API Gatewayには、クライアントへ送信したデータを保存する**APIキャッシュ**の機能がある
これにより、同一リクエストに対する応答速度が上昇する

# 【ECS】

## ECSの主要要素

### クラスター
1つ以上のタスクまたはサービスで構成される論理グループ
コンテナを動かすためのVPCやサブネットを設定する

### タスク
ECSの基本的な実行単位
コンテナ実行環境のCPUやスペック、コンテナイメージ、タスクロールなどを定義する
タスクロールとは、コンテナが他AWSサービスを利用する際に設定するアクセス権限(IAMロール)のことである

### サービス
タスクをどのように管理し、運用するかを決める仕組み
必要なタスク数を設定する

## ECSのコンテナ起動タイプ

ECSで実行・管理するコンテナの起動タイプは、**Fargate**と**EC2起動タイプ**がある

**Fargate**は、サーバーレスでコンテナを実行できる
タスクを実行していなければ、料金は発生しない
使用したリソース量によって、料金が決まる

**EC2起動タイプ**は、ユーザーが管理するEC2インスタンス上でコンテナを実行する
タスクを実行していなくても、料金は発生する
インスタンスタイプと起動時間によって料金が決まる
OSやミドルウェアなどのセットアップはユーザー自身で行う

# 【EKS】

## EKSとは
**Kubernetes**を使用して、コンテナを管理、実行するサービス
Kubernetesとは、コンテナの運用管理と自動化を目的に設計されたオープンソースのシステムのこと
使っているのがKubernetesかそうでないかというのがECSとの違いで、コンテナを管理、実行できるという大元の機能は同じ

## EKSのリソース

### ポッド
EKS内で、アプリケーションを実行するための単位

なお、EKSでは、実行しているアプリケーションの負荷状況に応じて、ポッドの数を自動的にスケーリングする機能である**Horizontal Pod Autoscaler**がついている
注意点として、Horizontal Pod Autoscalerを動作させるためには、CPU使用率やメモリ使用率などのメトリクスが必要となる。そのため、これらのメトリクスデータを収集する**Metrics Srrver**というコンポーネントが必要になる


### ノード
EKS内で、アプリを実行するための環境(サーバーのようなもの)

なお、EKSでは、実行しているアプリケーションの負荷状況に応じて、ノードの数を自動的にスケーリングする機能である**Cluster Autoscaler**がついている

## Load Balancer Controller

EKS上で動作する、ロードバランサー用のコントローラー
こいつを使うことで、ALBやNLBを自動的にプロビジョニングできる
(DAY13) 俺と学ぶRust言語~HashMap~

# 今日の内容
- HashMapとは
- HashSetとの違い

# はじめに
[前回](https://qiita.com/FUKAch/items/74ef0c3cb1c36002d1e1)は外部クレート「uint」を使って巨大な整数型を自作しました。今回は、Rust標準機能のHashMapについて学びます。

# HashMapとは
**HashMap** はRustの標準ライブラリが提供する **キーと値のペアを管理するデータ構造** です。HashMapを使うと、データをキーで管理し、値を効率的に取得・更新できます。

**「キー」** という言葉に聞きなれないので、学ぶ気力が失せてしまうかもしれませんが、以下のように考えてください。
例えば、スマホの電話帳を想像してください。
名前を入力すると、登録した電話番号がでてきます。このとき、「名前」が **「キー」**、「電話番号」が **「値」** です。
つまり、「キー」は情報を探すための手がかりになるもの、「値」はそのキーに対応する情報です。

他にも、例えば以下のようなときに使えます。
- 学生の名前と成績を対応付けたいとき
    学生名をキー、成績を値として保存します
- 商品のIDと価格を管理したいとき
    商品IDをキー、価格を値として保存します
- 単語の出現回数を数えるとき
    単語をキー、出現回数を値として管理します

HashMapは、**キーが一意** である（同じ名前のものが重複しない）必要があるため、同じキーを複数回挿入すると、古い値は新しい値で上書きされます。

# HashMapの基本的な使い方
HashMapは標準ライブラリ`std::collections::HashMap;`からインポートします。
```rust
use std::collections::HashMap;
fn main() {
    let mut scores = HashMap::new();

    scores.insert("Alice", 85);
    scores.insert("Bob", 92);
    if let Some(score) = scores.get("Alice") {
        println!("Alice's score is {}", score);
    } else {
        println!("No score found for Alice!");
    }

    scores.insert("Alice", 90);

    scores.remove("Bob");

    for (name, score) in &scores {
        println!("{}: {}", name, score);
    }
}
/******** 実行結果 ********

Alice's score is 85
Alice: 90

*************************/
```
このプログラムでは、HashMapにおける、いくつかの基本的な操作をしています。
まず、空のHashMapはStringと同じようにnewを使って宣言します。
```rust
let mut 名前 = HashMap::new();
```
つぎに、要素の追加はinsertを使用します。
```rust
名前.insert(キー, 値);
```
要素の取得はgetを使用します。
```rust
名前.get(キー)
```
要素の削除はremoveを使用します。
```rust
名前.remove(キー);
```

また、HashMapはタプルのベクタに対して`collect`メソッドを使用することでも作成できます。
```rust
use std::collections::HashMap;

fn main(){
    let items  = vec![("リンゴ", 3), ("バナナ", 5), ("オレンジ", 2)];
    let fruit_counts: HashMap<_, _> = items.into_iter().collect();
    for (fruit, count) in &fruit_counts {
        println!("{}: {}", fruit, count);
    }
}
/******** 実行結果 ********
バナナ: 5
リンゴ: 3
オレンジ: 2
*************************/
```

他によく使われるのは、「.entry()」です。これは、特定のキーのエントリ（キーと値のペア）を取得します。このメソッドは、キーが存在しない場合に値を挿入するのに便利です。
```rust
use std::collections::HashMap;

fn main(){
    let mut map = HashMap::new();
    map.entry("key1").or_insert(10);
    println!("{:?}", map);
}
/******** 実行結果 ********

{"key1": 10}

*************************/
```

# HashSetとのちがい
HashMapがキーと値のペアであるのに対し、HashSetは値のみで構成されます。
値がなく、キーだけのHashMapを想像するとわかりやすいかもしれません。つまり、HashSetには値のみを追加することができ、それらは一意なので、同じ値で重複することはないという保証になります。

# おわりに
今日紹介したいことは全て出し切れたので今日はここまでにします。
今回は、HashMapについて学びました。次回は構造体について学びたいと思います。
ご精読ありがとうございました。
[競プロ]Pythonって何？からAtCoder茶色になった話

# はじめに
[AtCoder](https://atcoder.jp/?lang=ja)を初めて半年、ついに茶色になることができました！
記念として書くこの記事が、これからプログラミングを始める方や、AtCoderでまずは茶色になりたいと思っている方の手助けになれば幸いです。



# 自己紹介
東京理科大学葛飾キャンパスに通う学部２年生です。
専攻は非情報系で、材料工学を学んでいます。
AtCoderユーザー名は[nekoyuki](https://atcoder.jp/users/nekoyuki)です。

# AtCoderとの出会い
大学2年生の5月頃に[応用数学研究部](https://oskt.us/)、通称OSKに出会いました。
OSKとは、東京理科大学随一の情報系サークルで、競技プログラミングやアプリ開発等が盛んに行われています。
私はちょろい性格なので、カッコ良さそうだなーという安直な理由で入部し、そこで初めてAtCoderに出会います。そのため、AtCoderを始めるまではPython?アルゴリズム?ナンデスカ状態でした。


# 茶色ってどのレベル？

https://info.atcoder.jp/utilize/jobs/rating-business-impact

そもそも茶色ってどのレベルなんだよって感じだと思うので、一緒に見ていきましょう。
AtCoder公式によると、茶色は以下の見解らしいです。
>Rating 400以上 (茶色)
AtCoderにおける分布(2023/11/20現在)
実レーティング分布： 上位28.462%
内部レーティング分布： 上位45.928%

>期待できる能力
コーディングへの安心感がある程度持てます。学生や派遣社員などが茶色のレーティングを持っていたら、とても喜ばしいです。
基礎的なアルゴリズムへの理解があります。典型的な処理であれば、動的計画法、二分探索などのメジャーなアルゴリズムを適用することが出来ます。一方、少し典型から外れてしまうとまだ解くことが出来ません。
競技者としては、多くの参加者がまず目指すべきラインはここでしょう。数学的素養がそれなりにあり、しっかりと練習すれば到達可能な水準です。逆に言えば、才能や素養が十分にあるか、競技者としてしっかり取り組んだかのどちらかを必ず満たしているのがこの色です。

つまり、最低限のコーディング力は保証できるわけですね(嬉)

# 学習内容と茶色になるまでのモチベ
やっと本題の話に入ります。

まずは[APG4bPython](https://atcoder.jp/contests/APG4bPython)でPythonの文法について学習しました。
これはPythonで競技プログラミングを始める人のための入門教材です。
私が学習してた6月頃は1章のみでしたが、つい最近2章まで追加されたっぽいですね。

この教材で文法を身につけて、初陣ABC358に参加しました。
結果は3完で、簡単に茶色になれると確信しました。このビギナーズラックが、入茶するまでに半年も要する原因となります...。
初陣後は、暇な日にコンテストに参加する程度で、だらだらとレートを伸ばして過ごしていましたがABC376でコンテスト中にパソコンが壊れます。レート-35。ここで完全にやる気を失います。しかし、ABC380で久しぶりの3完を達成し、勉強のモチベとレートがアップします。我ながら単純でバカみたいですね。

ABC380時点で知っていたアルゴリズムは二分探索、累積和くらいです(累積話は簡単なものしか実装できない)
ここで、茶色になるためにはコンスタントに3完するか超速解き2完をする必要があることに気づきます。しかし、後者は現実的ではない上にC問題が簡単だった場合意味をなさないので、アルゴリズムとデータ構造を学習してコンスタントに3完する方針に定めます。
そこで、先輩からおすすめしてもらった[競技プログラミングの鉄則本](https://www.amazon.co.jp/%E7%AB%B6%E6%8A%80%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E9%89%84%E5%89%87-%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0%E5%8A%9B%E3%81%A8%E6%80%9D%E8%80%83%E5%8A%9B%E3%82%92%E9%AB%98%E3%82%81%E3%82%8B77%E3%81%AE%E6%8A%80%E8%A1%93-Compass-Books%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E7%B1%B3%E7%94%B0/dp/483997750X)を購入しました。ちまちまと進めていき、茶色になった時点ではこの本で動的計画法などのアルゴリズムを身に付けていました。

:::note warn
入茶するのに限っては鉄則本は要らないなと思います
:::

また、[アルゴ式](https://algo-method.com/)でハッシュやキューなどのデータ構造を学習し、後はひたすらに過去問を解きます。なんだかんだ、過去問が一番実力向上に繋がりました。

過去問サイトは[AtCoder Problems](https://kenkoooo.com/atcoder/#/table/)がオススメです。
過去門で解いた問題と解いてない問題、問題の難易度、配点まで視覚的にわかりやすくまとめられたサイトです。使ってない人は見たことが無いくらいに有名。

そんなこんなで学習を続け迎えたABC387で、緑paffを出して茶色コーダーになりました。
![スクリーンショット 2025-01-05 16.26.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835017/32898b9e-78ed-6e2f-df83-f63a0c21a50b.png)


一旦ここまでの話を整理すると、身につけたアルゴリズムとデータ構造は以下のようになります。

:::note info
- 全探索
- 累積話
- 二分探索
- 動的計画法
- ハッシュ
- キュー
- その他ツールの使い方
:::


また、解いた過去問の量は以下のようになります。
![スクリーンショット 2025-01-06 22.00.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3835017/6425bcfc-785f-ba52-81b4-243aa64515c8.png)

今AtCoderを始めた頃に戻るなら
- APG4b
- 過去問のA問題、B問題をスラスラ解けるようになるまでやる
- アルゴ式でキューを学ぶ
- 過去問のC問題を解きまくる

の順番で学習していくと思います。

# 最後に
今後の目標は学部3年に上がるまでに入緑することです!!!!!する!!!!!してみせるぞ!!!!!!
Ruby on Rails 再入門 (3 の知識で 8 を学ぶ)

私は過去、[Ruby on Rails (以下、Rails) 2.3 で EC サイトを作った](http://ke.kabupro.jp/tsp/20090331/140120090331040792.pdf)りしてました。PostgreSQL をメイン DB にしつつ、基幹 DB の Oracle Database Server (8i ~ 10g)につなげるという[構成](https://www.slideshare.net/ma2shita/1ec-11329759#13)です。
Rails 3 へのアップグレード後に職を離れてしまったため、それ以来というのがスキルセットです。

3 以降、肥大化する Rails のキャッチアップは一切していなかったのですが、そこへ [2024年11月、Ruby on Rails 8 のリリース](https://rubyonrails.org/2024/11/7/rails-8-no-paas-required)の情報、そして[依存関係が減っており、SQLite だけのシンプルな構成で動く](https://www.publickey1.jp/blog/24/ruby_on_rails_8sqlitedb6.html)とのこと。

これならば WSL2 のローカル環境で試せそうという思いから、久々に `rails new` してみようと思ったわけです。

試した環境:

```console
> wsl.exe -v
WSL バージョン: 2.3.26.0
カーネル バージョン: 5.15.167.4-1
WSLg バージョン: 1.0.65
MSRDC バージョン: 1.2.5620
Direct3D バージョン: 1.611.1-81528511
DXCore バージョン: 10.0.26100.1-240331-1435.ge-release
Windows バージョン: 10.0.26100.2605
```

```console
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=24.04
DISTRIB_CODENAME=noble
DISTRIB_DESCRIPTION="Ubuntu 24.04.1 LTS"
```

## Rails のインストール

[公式に簡潔にまとまって](https://guides.rubyonrails.org/install_ruby_on_rails.html)います。私が解説するまでもありませんが、以下の３ステップで終わります。

1. 開発ツールマネジメントミドルウェア「mise (ミーズ)」をインストール
    * この前に mise や Ruby をインストールするためのライブラリを準備する必要があるかもしれない
2. mise を使って Ruby をインストール
3. `gem install rails`

## Scaffold を試す

まず最初に断っておくと、公式の手順に沿うことで一通りのことは試せます。
https://guides.rubyonrails.org/getting_started.html

そこで Getting Started とは別に、Rails が注目されるようになったきっかけ※の「Scaffold (足場)」が使えるのかを試しました。
※要出典だ！

結論、動くんですね。

```console
$ rails new blog
  ...
        gsub  config/environments/production.rb
      create  db/cable_schema.rb
       force  config/cable.yml
$ cd blog
$ rails generate scaffold post title:string body:text postdate:datetime is_published:boolean
  ...
      create      app/views/posts/show.json.jbuilder
      create      app/views/posts/_post.json.jbuilder
$ rails db:migrate
== 20250106123357 CreatePosts: migrating ======================================
-- create_table(:posts)
   -> 0.0020s
== 20250106123357 CreatePosts: migrated (0.0021s) =============================
$ find . -name *.sqlite3
./storage/development.sqlite3
```

バッチリ、 `db:migrate` まで走りました。
Rails 3 の時との違いは `db:migrate` が `rake` から `rails` になったことや、SQLite DB ファイルが `db/` から `storage/` に変わったことでしょうか。

`rails server` でサーバーを立ち上げて `/posts` へアクセスし、入力をした後に `rails console` で Model 操作もできました。
なんというか、懐かしい！

![out.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/22754/4e83c89b-4db9-13f8-9e8b-40395ff8be32.gif)

## おわりに

[Getting Started](https://guides.rubyonrails.org/getting_started.html)を眺めていると、先の `rake` コマンドから `rails` への移行など、さすが洗練されているんだなという感想です。

一方で、今回、ほぼ昔の知識のままでいけたということは、考え方や基本構成が 2.3 や 3 の頃に完成されていたという凄まじさも感じています（小並感）。

Getting Started はテストやデプロイまで揃っており、全部やろうとすると２～３時間はかかりそうです。昔は方々に情報を探していましたが、まずは「公式ドキュメントから」が一番早く学べそうです。

たのしかった。

[EoT]
git config pull.ffに設定可能な値

`git config pull.ff only`と設定したが戻したい方へ

# デフォルトへ戻す

```shell
git config pull.ff true
```

`true`のほか`on`や`yes`もok

大文字・小文字区別なし
`TrUe`もok

0以外の整数もok(c言語)
`-1000`
`0x123`
`00123`
ほとほどにしましょう


>       pull.ff
>           By default, Git does not create an extra merge commit when merging
>           a commit that is a descendant of the current commit. Instead, the
>           tip of the current branch is fast-forwarded. When set to false,
>           this variable tells Git to create an extra merge commit in such a
>           case (equivalent to giving the --no-ff option from the command
>           line). When set to only, only such fast-forward merges are allowed
>           (equivalent to giving the --ff-only option from the command line).
>           This setting overrides merge.ff when pulling.

# falseにする 	
Fast-forwardを禁止し、常にマージコミットを作成。
`false`,`off`,`no`,`0`にする
用途あれば

# onlyにする
もちろん`git config pull.ff only`

こちらは`only`限定

# 現在の設定値
`git config pull.ff `

# 参考ソースコード
https://github.com/git/git/blob/1b4e9a5f8b5f048972c21fe8acafe0404096f694/builtin/pull.c#L302

```c
/**
 * If pull.ff is unset, returns NULL. If pull.ff is "true", returns "--ff". If
 * pull.ff is "false", returns "--no-ff". If pull.ff is "only", returns
 * "--ff-only". Otherwise, if pull.ff is set to an invalid value, die with an
 * error.
 */
static const char *config_get_ff(void)
{
	const char *value;

	if (git_config_get_value("pull.ff", &value))
		return NULL;

	switch (git_parse_maybe_bool(value)) {
	case 0:
		return "--no-ff";
	case 1:
		return "--ff";
	}

	if (!strcmp(value, "only"))
		return "--ff-only";

	die(_("invalid value for '%s': '%s'"), "pull.ff", value);
}
```


最終的に`git_parse_maybe_bool_text`に行き着きます

https://github.com/git/git/blob/1b4e9a5f8b5f048972c21fe8acafe0404096f694/parse.c#L157

```c
int git_parse_maybe_bool_text(const char *value)
{
	if (!value)
		return 1;
	if (!*value)
		return 0;
	if (!strcasecmp(value, "true")
	    || !strcasecmp(value, "yes")
	    || !strcasecmp(value, "on"))
		return 1;
	if (!strcasecmp(value, "false")
	    || !strcasecmp(value, "no")
	    || !strcasecmp(value, "off"))
		return 0;
	return -1;
}
```
SadServer - 実践的なLinuxトラブルシューティング学習への道

# SadServer - 実践的なLinuxトラブルシューティング学習への道

こんにちは。k.kと申します。
普段は金融系基盤システムの運用に携わるインフラエンジニアとして、Windows Serverを中心に扱っています。

一方で、個人的にはLinuxへの関心が高く、メインOSとしてCachyOS（Arch Linux派生のディストリビューション）を日常的に使用しています。しかし、業務ではLinux環境に触れる機会が限られているため、より実践的なスキルを身につけたいと考えています。特に、サーバー環境でのトラブルシューティングスキルは、今後のキャリアにおいても重要なスキルセットになると考えており、そのための実践的な学習の場としてSadServerというプラットフォームで実践的なトラブルシューティングの練習を始めることにしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572324/bdac102a-5aa3-1e9f-8600-f97a3eee8e20.png)
## SadServerとは？
[無料でLinuxの勉強ができる！SadServersとは?](https://zenn.dev/comf_nakamura/articles/sadservers_introduction)
SadServerは、実際のサーバートラブルを模擬的に体験できるプラットフォームです。システム管理者やエンジニアにとって必須スキルである「トラブルシューティング能力」を、実践的な環境で磨くことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572324/1589475e-cd8f-3769-dee1-c39b4ee6ee6f.png)

## なぜSadServerを選んだのか
個人的にLinuxは日常的に使用していますが、実際のサーバー環境でのトラブルシューティングとなると、また異なるスキルセットが必要です。SadServerを通じて:
- 実践的なデバッグスキルの習得
- システム管理の基礎知識の強化
- 論理的な問題解決アプローチの学習
- 実務で活かせるトラブルシューティングの経験
これらを効率的に学べると考え、学習をスタートすることにしました。
## 記事の目的
この連載では、私がSadServerで取り組んだ問題とその解決過程を詳しく共有していきます。すでに素晴らしい解説記事（[SadServer解説 サイトマップ](https://zenn.dev/comf_nakamura/articles/sadservers_sitemap)）が存在していますが、本連載では特に「日常的なLinuxユーザー」という視点から、以下のような要素に重点を置いて解説していきたいと思います：

- デスクトップLinuxユーザーとしての日常的なLinux使用経験を踏まえた解説
- デスクトップLinuxでの経験をサーバー管理にどう活かせるかの考察
- Arch系ディストリビューションでの知見を活かしたトラブルシューティングの視点
- システムの仕組みについての深い理解に基づいた問題解決アプローチ

同じようにデスクトップLinuxユーザーとしての経験を持ちながら、サーバーサイドでのスキルアップを目指している方の参考になれば幸いです。

これから定期的に学習記録を更新していく予定ですので、よろしければフォローをお願いします。

| #   | Name(リンクはSadServersの問題ページに飛びます)                                                                                                           | Time | 解説           | 備考        |
| --- | ----------------------------------------------------------------------------------------------------------------------------------------- | ---- | ------------ | --------- |
| 1   | ["Saint John": what is writing to this log file?](https://sadservers.com/scenario/saint-john) 暴走ログ出力プロセスの特定と停止                     | 10 m | [こちら](https://qiita.com/kk-qiita/items/ce4743489a794e53fb07) | 登録不要      |
| 2   | ["Saskatoon": counting IPs.](https://sadservers.com/scenario/saskatoon) IPアドレスを数えてください                                                    | 15 m | [こちら](https://qiita.com/kk-qiita/items/7a59adef408f17116d52) |           |
| 3   | ["The Command Line Murders"](https://sadservers.com/scenario/command-line-murders) コマンドライン殺人事件                                            | 20 m | [こちら](https://qiita.com/kk-qiita/items/234b65014ef02782c73b) | 登録不要      |
【GitHab入門】ファイルをGitHubにアップロードする方法

# はじめに
ローカルで作業したファイルをコマンドラインを使用してGitHubにアップロード(push)する方法を説明します。SSH keyを連携させる部分については省略しています。

# 手順
## 1. リモートリポジトリを作成
ローカルにGithub上のリポジトリと同じ構成を作成します。
### ローカルリポジトリを作成(初回のみ)
指定したリポジトリをローカルにコピーします。
```txt:ターミナル
$ git clone https://github.com/ユーザー名/リポジトリ名.git
```
### ローカルリポジトリを既に作成済みの場合
最新の状態かを確認します。up to dateと言われていれば最新の状態になっています。
この際、ローカルリポジトリ内でないと`git`コマンドが使えないため、異なるディレクトリにいる場合は、`cd`コマンドでローカルリポジトリに移動してください。
```txt:ターミナル
$ git status
Your branch is up to date with 'origin/main'.
```
最新の状態ではない場合は、リモートリポジトリ(GitHub上のリポジトリ)と同期を取る必要があります。
```txt:ターミナル
$ git fetch
```
## 2. ローカルリポジトリの変更をステージング

全ての変更をステージングします。
```txt:ターミナル
$ git add .
```
ちなみに、特定のファイルのみをステージングする場合は、ファイル名を指定します。
```txt:ターミナル
$ git add ファイル名
```

:::note info
***Tips：*** `git add`のオプションの種類と違い
| コマンド | 新規追加 | 変更 | 削除 |
|:-----------|:------------:|:------------:|:------------:|
| `git add .`| :white_check_mark: | :white_check_mark: | :x: |
| `git add -u`| :x: | :white_check_mark: | :white_check_mark: |
| `git add -A`| :white_check_mark: | :white_check_mark: | :white_check_mark: |

ファイルを削除と更新を行った場合は、以下の`-A`オプションで一括で行うことができます。
```txt:ターミナル
$ git add -A
```
また、手間ではありますが、以下のコマンドでも可能です。
```txt:ターミナル
$ git add .
$ git rm ファイル名 # ファイル削除のステージング
```

:::
### 3. コミットを作成
変更内容をコミットに記録します。メントは、変更の内容がわかりやすいように簡潔に記述します。また、絵文字を使うとわかりやすくなります。
参考：[https://gitmoji.dev/](https://gitmoji.dev/)
```txt:ターミナル
$ git commit -m "変更内容を簡単に説明するコメント"
```
### 4. リモートリポジトリにプッシュ
リモートリポジトリ(GitHub上)に変更をアップロードします。`main`はプッシュ先のブランチ名です。GitHubのデフォルトブランチ名が`main`以外（例: `master`）の場合は、その名前を使用します。
```txt:ターミナル
$ git push origin main
```
これで、ローカルで編集したファイルがGitHub上にアップロードされます。
Snowball Edge Storage Optimized を使ってみた感想

# Snowball Edge Storage Optimizedとは

AWS へのデータのオフライン移⾏に使⽤されるサービス。

Snowball Edgeを使用する際、実際にデータ移行用のデバイス(80TB or 210TB)が配送され、そのデバイスに移行対象のデータを送信した後、デバイスを返送し、AWS側にて予めこちら指定したS3バケットにデータを転送する。

関わった案件では、HDDに入ったデータを約20TBをSnowball Edgeに転送した。
※本記事にて、Snowball Edge Compute Optimizedについては、説明しません。

## 使用機器
・移行用データ(サーバ、HDD等)
・Snowball Edge(デバイス)
・LANケーブル(SFP28/QSFP28/RJ45)
・データ転送用のPC(Windows/Linux等)
・AWS CLI のバージョン 1.16.14(既存のバージョンが存在する場合にはアンインストールが必要)
・Snowball Edgeクライアント
※ Snowball Edgeの付属品は電源ケーブルのみ。

## フロー
①AWSマネコン上でジョブを作成する。(デバイスの配送住所・電話番号・会社名・データをインポートするS3バケットなどを入力する。)
②配送業者から、デバイスを受け取る。
③受け取ったデバイスをLANケーブルを使用して接続し、データをデバイスに転送する。
④配送業者にSnowball Edge Storage Optimizedを返却する。
⑤AWS側にて、S3へのデータ転送完了メールの通知を確認し、AWSマネコンからログを確認し、失敗しているファイルがないか確認し、問題なければ終了。

### 料金
ジョブごとの料⾦ 300 USD
追加の⽇次料⾦ 30 USD(デバイスを受け取った後～デバイスを返送するまでの間で、10日以降経つと、追加料金が発生する。)
配送料 120USD

### 使用した感想

1.起動音がとにかく大きい。2～3分程大きな起動音が続いた後、静かになる。
2.コンセントを抜くと、Snowball Edgeも停止する、転送中に停電が発生すると、転送も止まる。
3.ジョブ作成からSnowball Edge到着までの所要日数について。ジョブ作成から到着までの日数は大体3～5日程度になる。また、Snowball Edgeが到着したよくじｔから料金が発生するため、到着日を変更したい場合は、配送業者に電話して、到着日を変更する対応が必要。
4.ファイル数が多い場合、小さいファイルが大量に含まれている場合、デバイスからS3への転送が失敗する可能性があることため、ならべく圧縮して転送すること。
5.Snoball Edgeの数は限りがあるため、あらかじめAWSサポートにリリース日を連絡し、発送可能か確認したほうがいい。
6.Snoball Edgeは20Kg以上あるため、持ち運ぶ際は、台車等を用意しておくこと。
7.S3にしかデータを連携出来ない。EC2サーバ上に配置した場合は、S3からダウンロードする必要がある。
8.Snowball Edge Compute Optimizedについては、具体的に使うケースがよく分かっていない。AWS公式サイトには下記のような記載がある。

>AWS に転送する前のデータ処理のためのパワフルなコンピューティングおよび高速ストレージにアクセスすることが要求されるユースケース向けには、Snowball Edge Compute Optimized の使用をお勧めします。104 vCPU、28 TB の NVMe SSD、最大 100 Gb のネットワークを搭載し、高解析度映像処理、先進的な IoT データ分析、機械学習モデルのリアルタイム最適化などのアプリケーションを、接続性が限られた環境下で実行できます。


### 参考

https://pages.awscloud.com/rs/112-TZM-766/images/202208_AWS_Black_Belt_AWS_Snowball_Edge_Storage_Optimized.pdf
C#で外部DLLを実行してみる

# 1. はじめに
* C#で外部DLLを指定して実行したい
* DLL名は参照設定せず、動的に取得したい

# 2. 開発環境
* C#
* .NET8
* Visual Studio 2022
* Windows 11

# 3. DLLサンプル作成 (呼び出し先)
* C#のクラスライブラリプロジェクトよりサンプルのDLLを作成する
```Csharp:
namespace ClassLibrary1
{
    public class DLLTest
    {
        public int Id { get; set; }
        public string Name { get; set; }

        // コンストラクタ（引数なし）
        public DLLTest() : this(0, "") { }

        // コンストラクタ（引数あり）
        public DLLTest(int id, string name) => (Id, Name) = (id, name);

        // 文字列変換
        public override string ToString() => $"Id={Id},Name={Name}";
    }
}
```
# 4. サンプルソース (呼び出し元)
* DLLをEXEと同じフォルダに配置して実行する

```Csharp:
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                var asm = Assembly.LoadFrom("ClassLibrary1.dll");       // アセンブリの読み込み
                var module = asm.GetModule("ClassLibrary1.dll");        // アセンブリからモジュールを取得
                var DLLTest = module?.GetType("ClassLibrary1.DLLTest");    // 利用するクラス(or 構造体)を取得

                if (DLLTest != null)
                {
                    // CSharpDll.Personクラスをインスタンス化.
                    // コンストラクタへ引数を渡すことも可能.
                    dynamic p1 = Activator.CreateInstance(DLLTest, 1, "TEST");

                    if (p1 != null)
                    {
                        // dynamicで受けているので, 面倒なプロパティ取得やメソッド取得を省略できる.
                        Console.WriteLine($"name= {p1.Id}");
                        Console.WriteLine($"age= {p1.Name}");
                        Console.WriteLine(p1.ToString());
                    }
                }
                Console.ReadKey();
            } catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
```

# 5. 参考文献

https://qiita.com/tera1707/items/62616974e70f31e357ae
年始　SQL Server Browser接続できない

年始でAzureからのサーバーが一旦切られて
データベースも切られていた。
SQL Server Browser サービスが開始できない原因と解決策を調査。

サーバの立ち上げと
sql server management studioの立ち上げのみではダメで、
構成マネージャにてのサービス「SQL Server Browser」を起動しないといけない。
IndexOutOfRangeException　カラムがない場合も使用される

vb.net

       $System.IndexOutOfRangeException

ただ古いテーブルを参照していて、カラムがないだけだった。

カラムがない可能性があるとは思わず結構時間を使ってしまった。
このエクセプション出たから、なんだろうって迷ったけど。

Javaでも配列など、初期値を間違えた場合など出た。

結構範囲が広い。
          $System.NoColumnException
   
だったら一発でわかるのに。
Power Platform のDLP ポリシーまとめ

## DLPは何の略？どう言う意味？

DLPは「Data Loss Prevention」の略。日本語で「データ損失防止」という意味。

## DLPポリシーの主な目的
- データのセキュリティ強化：機密データが誤って外部に流出するのを防ぐ。
- コンプライアンスの強化：組織内のデータ使用の規制や内部ルールに準拠させる。
- ユーザー行動の管理：不適切なデータ共有やフローを制限する。
    
## DLPポリシーの機能
コネクタを2種類に分離：
1.  ビジネス（OneDrive, SharePointなど）
2.  非ビジネス（X, Gmailなど。これらのコネクタ間でデータを共有しないよう制限可能）

特定のコネクタをブロック：
- 例：非ビジネスのコネクタの使用禁止など。

環境別のポリシー適用：
- 例：開発環境では全てのコネクタを許可、検証環境では一部のみ許可、など。

## DLPポリシーの管理と設定方法
「Power Platform管理センター」または「Microsoft 365 セキュリティ&コンプライアンスセンター」から可能。

## DLPポリシーの変更と反映時間
ポリシーの変更が反映されるまで数分～数時間かかる場合がある。

## DLPポリシー違反時の動作
フローやアプリの作成：
- 違反する組み合わせを含むと、作成がブロックされ、エラーが表示される。

実行時：
- 違反がある場合、フローやアプリが停止。管理者が状況を確認可能。
- エラー例: 「このフローはDLPポリシーに違反しているため実行できません。」
&nbsp;
&nbsp;

https://learn.microsoft.com/ja-jp/power-platform/admin/wp-data-loss-prevention
ESP32のtwai(CAN)で特定のCAN IDのみ受信する

ESP32を使って1Mbpsで流れているバスを全部拾うときついので、自分の必要なIDだけHW側でフィルタする。
使っているマイコンはESP32-C6だけど他のシリーズでも同じはず。


## 例）0x03Aのスタンダードフレームのみ読むとき

```c
twai_general_config_t g_config = TWAI_GENERAL_CONFIG_DEFAULT(PIN_CANTX, PIN_CANRX, TWAI_MODE_NORMAL);
twai_timing_config_t t_config = TWAI_TIMING_CONFIG_1MBITS();
twai_filter_config_t f_config;
f_config.acceptance_code = (0x03A << 21);
f_config.acceptance_mask = ~(0x1FF << 21);
f_config.single_filter = true;
twai_driver_install(&g_config, &t_config, &f_config);
twai_start();
```

## 解説

[公式](https://docs.espressif.com/projects/esp-idf/zh_CN/v4.4/esp32/api-reference/peripherals/twai.html)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817040/c9179199-167f-fa32-1e32-e75bea8b6b29.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817040/8c8cd780-b8cf-ad04-3bc0-3a35e6fffb75.png)

図の一番右がビットの並びの一番左。
なので、acceptance_codeで03AのIDをセットして、acceptance_maskで（図の）左のほうをマスクする。
vite + electron-builderが使いやすい

:::note info
zenn過去記事からの転記です。
<https://zenn.dev/hikaelis/articles/b0e68ec5f7a30e>
:::

electron + react + typescriptのプロジェクトを作るときに良い方法を見つけた。
electronでアプリを作るときに、様々なBoilerplateが存在するが、今は

- webpackよりも、vite,
- electron-forgeよりelectron-builderが主流

らしい (Electron公式はelectron-forgeを推しているが)。
そこで[electron-builderの公式サイト](https://www.electron.build/index.html)におすすめされているBoilerplatesを試したが、
どれもTypeScript + Reactを使うとなると設定が面倒だった。
そこで見つけたのが以下。
<https://evite.netlify.app/>

なんとCLIでReact, TypeScriptを選ぶだけで、一発で環境を作ってくれた

```bash
npm create @quick-start/electron
```

webpackではなくviteなのでビルドもとても速い。メインプロセスとpreloadプロセスのホットリロードまで対応している。
また、公式ではあまり書かれていないが、```package.json```を確認するとelectron-builderまで対応していた。

```json
"scripts": {
    "format": "prettier --write .",
    "lint": "eslint . --ext .js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix",
    "typecheck:node": "tsc --noEmit -p tsconfig.node.json --composite false",
    "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false",
    "typecheck": "npm run typecheck:node && npm run typecheck:web",
    "start": "electron-vite preview",
    "dev": "electron-vite dev",
    "build": "npm run typecheck && electron-vite build",
    "postinstall": "electron-builder install-app-deps",
    "build:unpack": "npm run build && electron-builder --dir",
    "build:win": "npm run build && electron-builder --win",
    "build:mac": "electron-vite build && electron-builder --mac",
    "build:linux": "electron-vite build && electron-builder --linux"
  },
```

個人的に、electron-forgeよりelectron-builderを使いたかったのは、インストーラーをカスタマイズできるからだったため、
以下の設定を```electron-builder.yml```に加えた。

```yml
nsis:
  artifactName: ${name}-${version}-setup.${ext}
  shortcutName: ${productName}
  uninstallDisplayName: ${productName}
  createDesktopShortcut: always
  oneClick": false # add
  allowToChangeInstallationDirectory: true # add
```

<https://www.electron.build/configuration/>

を見れば様々なカスタマイズができる。

## 参考

<https://github.com/alex8088/electron-vite>
<https://developer.mamezou-tech.com/blogs/2023/05/22/electron-vite/>
Mellanox ConnectX-3をWindows11で使用するための設定（E-Coreを有効にしたままで使用する）

E-Coreが搭載されている12世代以降のCore iプロセッサPCに、Mellanox ConnectX-3を装着し起動すると、ログイン画面直後にBSODとなり立ち上がりません。
ドライバーの詳細設定を変更することで、E-Coreが有効になっていても、立ち上がることが分かったので手順を公開します。

1. BIOSでE-Coreを無効にする。
2. Windows11を立ち上げてドライバーをインストールする。
 ドライバーは[Nvidia V.5.50.53000(Win10(1909))](https://www.mellanox.com/downloads/WinOF/MLNX_VPI_WinOF-5_50_53000_All_Win2019_x64.exe)
 3. ドライバーの設定変更
 　デバイスマネージャを立ち上げて、ネットワークアダプターからMellanox ConnectX-3 Ethernet Adapterのプロパティー設定を開く。
![Connectx-3-Win11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/582251/4c17d8e2-fd5d-03a1-8edd-9e005090c9d2.jpeg)
　プロパティーの「Maxinum number of RSS Processors」と「Maxinum number of RSS Queues」の値を「1」に変更する。
　Core i5-14500では「4」まで設定可能、「5」以上にするとBSOD発生。
　「1」でも「4」でも送受信性能に違いはなかったので、安全のために「1」を推奨。
 4. BIOSでE-Coreを有効にする。

上記の手順で、E-Coreを有効にしたままでもConnectX-3が利用可能。


MicrosoftのRSS(Receive Side Scaling)ドキュメントを読んだ限り、ハイパースレッドを利用しないとあるので、処理が割り当たったCPUがハイパースレッドをサポートしているかを判断していると思われるが、E-Coreに処理が割り当たった場合に、何かの命令が未サポートなためにBSODになっている気がします
フラッシュメッセージ（I18n(国際化) + bootstrap）

# はじめに
現在私はポートフォリオを作成しています。今回の記事では、現在進行形で理解ができていない、フラッシュメッセージについて理解したことを備忘録として記録しておきたいと思います。

# 現状
Google認証を行った後に、ログイン・ログアウトは実行できるようになったのですが、フラッシュメッセージの設定で戸惑ってしまったため、今回はI18n（国際化）とbootstrapでのフラッシュメッセージを実行していきたいと思います。

# 流れ
まずはbootstrapの導入についてはこれらの記事を参考に実施しました。

https://qiita.com/devzooiiooz/items/262f71e737f94738debf

https://qiita.com/arata0520/items/4330c2be8740bc560390

#### I18n(国際化)について
フラッシュメッセージ自体は表示されるのですが、英語表記でわかりづらかったので、こちらを導入しました。
```php:Gemfile
gem 'rails-i18n'
```
Gemの追加を行い`bundle install`を実行してください。
```php:config/application.rb
~中略~
config.i18n.default_locale = :ja
```
上記の記述をファイルの下に`end`が2つあると思うので、その上に記述をしてください。

これで基本的な準備は終わりです。あとは自分の現状に合わせたymlファイルを作成してください。
私の場合は、`devise`のGoogle認証のフラッシュメッセージが必要だったので、`config/locales/devise.en.yml`という自動で作成してくれている英語表記のファイルをChatGptに日本語表記で作り替えてもらい、同じフォルダ内に`devise.ja.yml`を作成しました。

#### フラッシュメッセージ
これは使用頻度が多いと思うため、パーシャルでファイルを用意します。`views/shared/_flash_message.html.erb`に記述していきます。
```php:_flash_message.html.erb
<% flash.each do |key, message| %>
  <div class="alert alert-<%= key %>"><%= message %></div>
<% end %>
```
上記のコードは、flashが起こったら、flashの中にハッシュの形でデータがあるため、それらを`each`を活用して取り出します。`class='alert alert-<%= key %>"`はbootstrapの機能の一つで、`key`に入ったものによってカラーを変えてくれます。これは[公式](https://getbootstrap.jp/docs/4.3/components/alerts/)を参考に実施してみてください。

#### omniauth_callbacks_controller.rb
 ```php:omniauth_callbacks_controller.rb
 class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
  skip_before_action :verify_authenticity_token, only: :google_oauth2

  def google_oauth2
    @user = User.from_omniauth(request.env['omniauth.auth'])

    if @user.persisted?
      sign_in_and_redirect @user, event: :authentication
      set_flash_message(:notice, :success, kind: "Google") if is_navigational_format?
    else
      session["devise.google_data"] = request.env["omniauth.auth"].except(:extra)
      redirect_to new_user_registration_url
    end
  end

  def failure
    redirect_to root_path
  end
end
 ```
 Googleのログイン機能でユーザーのデータをもとに、ログインなど行うcontrollerです。今回はこの中のフラッシュメッセージに関わる部分がbootstrapで上手く反映させることができなかったため、ただフラッシュメッセージが出力されるだけの形でした。ですので、このコードを理解していこうと思います。
 ```php:
set_flash_message(:notice, :success, kind: "Google") if is_navigational_format?
 ```
 これがflashにどのようにデータが渡るのか理解できていなかったため、まずはそれを勉強しました。
 `set_flash_message`というdeviseのメソッドを活用することで、`devise.ja.yml`の以下のコードを自動的に検索してくれる。
```php
omniauth_callbacks:
    failure: "%{kind} での認証に失敗しました。理由：%{reason}。"
    success: "%{kind} アカウントでログインしました。"
```
なので、今回は`success:`の方の記述が`_flash_message.html.erb`のコードの`message`として、
 `:notice`は`_flash_message.html.erb`のコードの`key`としてflashのハッシュに保存されていることが理解できた。

 その後、公式を見たところ、`_flash_message.html.erb`にある、`class="alert alert-<%= key %>"`では、keyの部分がsuccessになる必要があるとわかったため、以下のように修正をした。
 ```diff_ruby:omniauth_callbacks_controller.rb
- set_flash_message(:notice, :success, kind: "Google") if is_navigational_format?
+ set_flash_message(:success, :success, kind: "Google") if is_navigational_format?
 ```
これによりフラッシュメッセージが日本語で出るようになり、さらにbootstrapによりデザインされていました。
 
# おわりに
今回のフラッシュメッセージで詰まってしまった時に、記事に書いてあることコードを打つばかりではなく、自分で解決策についえ考えながら、公式をよく見てみることの大切さがわかりました。生成AIが当たり前の時代ですが、プログラミング思考力を身につけつつ、ポートフォリオを作成していきたいと思います。
バージョン指定記号

バージョン指定についてすぐに忘れるのでメモ

```
バージョン番号の意味：
    4     .    6    .    2
    ↓          ↓         ↓
 メジャー     マイナー    パッチ
（破壊的）  （機能追加） （バグ修正）
```

```bash
# キャレット（^）の場合
"^4.6.2" → 4.6.2 から 4.9.9 まで OK
           5.0.0 は NG（メジャーバージョンアップ）

# チルダ（~）の場合
"~4.6.2" → 4.6.2 から 4.6.9 まで OK
           4.7.0 は NG（マイナーバージョンアップ）
```
【2025最新】Poetry v2.0.0での変更点



2025/1/5の Poetry v2.0.0リリースに伴い、いくつかの変更が導入されました。pyproject.tomlの記述方法の変更や、一部コマンドのプラグイン化などが挙げられます。以下に、特に重要と思われる変更点をまとめました。

## pyproject.tomlの記述方法の変更

PEP 621に準拠した[project]セクションのサポートが追加されました。これにより、従来の[tool.poetry]セクションからの移行が推奨されています。

### 旧形式

```toml
[tool.poetry]
name = "example-project"
version = "0.1.0"
description = "An example project"
authors = ["Your Name <your.email@example.com>"]
```

### 新形式

```toml
[project]
name = "example-project"
version = "0.1.0"
description = "An example project"
authors = [
    { name = "Your Name", email = "your.email@example.com" }
]
```

### package-modeオプションの必須化

プロジェクトと同じ名前のディレクトリの中に__init__.py ファイルとソースコードがある状態ではない時に、
package-modeオプションの設定が必須となりました。（前verまでは警告だったが、v2.0.0からはエラー）

```toml
[tool.poetry]
package-mode = false
```

を記述することでエラーを防げる。

### dev-dependenciesの非推奨化

group.dev.dependenciesが推奨となった

```bash
poetry add pytest --group dev
```

```bash
[tool.poetry.group.dev.dependencies]
pytest = "^6.2"
```

## 一部コマンドのプラグイン化

Poetry v2.0.0では、一部のコマンドが poetry-core から分離され、プラグインとして提供されるようになりました。これにより、これらのコマンドを使用する際には、対応するプラグインのインストールが必要となりました。

### poetry shell

poetry-plugin-shellプラグインのインストールが必要。

```bash
poetry self add poetry-plugin-shell
```

代わりとして、poetry-coreに

```bash
poetry env activate
```

が追加された。

### poetry export

poetry-plugin-exportプラグインのインストールが必要。

```bash
poetry self add poetry-plugin-export
```

## 一部コマンドの非推奨化・置き換え

### poetry install --syncの非推奨化

```bash
poetry sync
```

が推奨となった。

### virtualenvs.prefer-active-pythonの廃止

代わりとして、

```bash
poetry config virtualenvs.use-poetry-python true
```

に置き換え

## 参考

- [python-poetry/poetry Releases/2.0.0](<https://github.com/python-poetry/poetry/releases/tag/2.0.0>)

- [Poetry Document](https://python-poetry.org/docs/)
Go言語(プログラミング)入門メモ④

## 処理を遅らせて実行するdefer文
defer文を使うと、処理を遅らせて関数の最後に実行させることができる。例えば、ファイルを開く処理を実行したときはファイルの使用が終わったらファイルを閉じる処理も必要になる。このようなときにファイルを開く処理とセットでdefer文でファイルを閉じる処理を書いておけばファイルの閉じ忘れが起きなくなる。

簡単な例としては
~~~
defer fmt.Println("world")
fmt.Println("Hello")
//ふつうは上から順に処理されるが、今回はworldの出力にdefer文が書かれているから以下のように出力される
Hello
world
~~~
次に、fooという関数を作り、defer文の処理を書いてmain関数から呼び出してみる。
実行してみると、foo関数の処理が先に表示される。
~~~
func foo() {
    defer fmt.Println("world foo")
    fmt.Println("Hello foo")
}

func main () {
    foo()
    defer fmt.Println("world")
    fmt.Println("Hello")
}
//以下のように出力される
Hello foo 
world foo
Hello
world
~~~
これは、main関数での最初にfoo関数を呼び出しており、先にHello fooを表示し、foo関数内のdefer処理のworld fooを表示させてからmain関数が処理される。
これはfoo関数の呼び出しをdefer文の下に持ってきても同様となる。

## defer文が同じ階層に複数あると、、?
複数のdefer文がある場合をみてみる。
~~~
func main () {
    fmt.Println("run")
    defer fmt.Println("1")
    defer fmt.Println("2")
    defer fmt.Println("3")
    fmt.Println("success")
}
//以下のように出力される
run
success
3
2
1
~~~
実行すると最初にrun,success、そのあとで3,2,1と表示される。最初に書いたdefer文の処理が最後に実行される。

## defer文でファイルの閉じ忘れを実践する
次のコードは、ファイルの内容を読み込み、100byteを出力するコード。
~~~
func main () {
    file, _ := os.Open("./lessonn.go") //lesson.goを読み込む
    defer file.Close() //ファイルを閉じる(最後に実行)
    data := make([]byte, 100) //要素数100のbyteのスライスを作成する
    file.Read(data) //ファイルの内容を変数dataに格納する
    fmt.Println(string(data)) //変数dataの内容をstring型に変換して表示する
}
//
lesson.goの最初の100byteが出力される
~~~

上記のコードの解説として、os.Open関数でファイル名を指定して読み込み、変数fileに入れる。ファイルをOpenしたら最後にcloseする必要があるのでClose処理をdefer文で記載しておく。
その後、読み込んだファイルの内容を使った処理を書いている。ファイルを読み込むときは、代入される変数をバイト配列(byteのスライス)にする必要がある。ここでは、変数dataに要素数100のbyteのスライスを入れて、ファイルの内容を100byteだけ読み込むこととする。
Readメソッドでファイルの内容を変数dataに格納した後、string型に変換して表示している。
Openした直後にCloseをdefer文で書いておけば忘れずに必須な処理を行うことができるので、安心。

## 学習に使用した教材
・『入門】Golang基礎入門 + 各種ライブラリ + 簡単なTodoWebアプリケーション開発(Go言語)』M.A EduTech
https://www.udemy.com/course/golang-webgosql/?utm_medium=udemyads&utm_source=bene-msa&utm_campaign=responsive&utm_content=top-1&utm_term=general&msclkid=81e2f24a32cc185d275d953d60760226&couponCode=NEWYEARCAREERJP

・『シリコンバレー一流プログラマーが教える Goプロフェッショナル大全』酒井 潤 (著)
https://www.amazon.co.jp/%E3%82%B7%E3%83%AA%E3%82%B3%E3%83%B3%E3%83%90%E3%83%AC%E3%83%BC%E4%B8%80%E6%B5%81%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E%E3%83%BC%E3%81%8C%E6%95%99%E3%81%88%E3%82%8B-Go%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB%E5%A4%A7%E5%85%A8-%E9%85%92%E4%BA%95-%E6%BD%A4/dp/4046070897
AIエージェントは銀の弾丸か？

## 次の時代はAIエージェント？

あけましておめでとうございます。私は新年早々無職になりました。自身にDropトレイトを実装して人生の後処理を決めたい気分です。
2024年は間違いなくLLMの年でした。では2025年はどうでしょうか...?

https://blog.samaltman.com/reflections

> We are now confident we know how to build AGI as we have traditionally understood it. We believe that, in 2025, we may see the first AI agents “join the workforce” and materially change the output of companies. We continue to believe that iteratively putting great tools in the hands of people leads to great, broadly-distributed outcomes.

なるほど、OpenAIのサム・アルトマンはAI Agentsが来ると言っています！
本当かなぁ？

## AIエージェントの定義
語弊を恐れず言えば、LLMが停止条件（大抵の場合目的達成）に達するまで終了しないアーキテクチャです。

なぜかXでは議論になっていますが、LangChainなどのライブラリで提供されているフレームワークを基準にするといいと思います。

私個人は機械学習が関係しない処理を**ルールベース**、LLM1回の使用を**LLM呼び出し**(今考えました)、複数連ねた固定ものを**LLMチェーン**、不定なものを**LLMエージェント**と呼ぶことにしています。
既製品ではAssistants APIが近いでしょうか。

## AIエージェント特有の強み

柔軟性が最大の強みです。不定形なタスクを遂行できる可能性があるだけで強力です。

例えば、Pythonインタプリタと気温取得APIをツールとして渡し、日本の3地点の気温の分散を計算させる指示をすると難なくこなします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1977360/181021af-f73c-3dff-e9ba-773397ca1090.png)


## AIエージェント特有の弱み
- LLMのコストが高い
- レスポンスタイムが長い
- タスク遂行率を考慮する必要がある
この3つが弱点で、人間がついていないと微妙な感じはします。

## エージェントはすべてを自動化するか？←多分No
「うわ～これ初めてやるなぁ。とりあえずAIに頼むか～。糸口が見つかったらラッキー」な世界線になると予想しています。てかもう来てます。

### 理由1. エージェントは不定形タスクにのみ向いている
正規表現で済むテキスト処理をLLMに頼む人はいませんね。
同じ理由で、ルールベースやLLMチェーンで済む処理をわざわざエージェントにしても失敗する可能性を多く仕込み、コストを高めるだけです。

### 理由2. LLMはエスパーではない
エージェントに限った話ではないですが...
指示を書く人のインテントとLLMの出力には必ずズレがあります。ツールを厳選し、タスクのスコープを狭めることで信頼性を上げることはできますが、柔軟性とトレードオフです。

> These models can’t read your mind.

https://platform.openai.com/docs/guides/prompt-engineering#write-clear-instructions

:::note info
余談ですが、区役所のおばちゃんはエスパーです。
「無職になっちゃったぁ...」だけで必要な手続きをすべてしてくれました。
ロケーションというコンテキストはあるにしてもすごいです。
:::

## エージェントを使いこなすには
LLMで生産性を上げるには「ドメイン知識」と「キャッチアップ能力」の二つが必要だと考えています。

前提として、ドメイン知識がないと正しい指示を出せません。

[AIエージェント特有の強み](#aiエージェント特有の強み)で紹介した例では3地点の分散を計算しています。
これは上司に「〇〇ﾁｬﾝ、日本の気温って各地でバラバラだと思わないカナ・・・？」と言われたときにやる計算（多分）ですが、分散という単語を知らないとかなり遠回りなプロンプトになってしまうでしょう。

2つ目、キャッチアップ能力がないとLLMの言っている内容がわかりません。
わからない概念は調べたり聞き直すことで正しいメンタルモデルを獲得しましょう。

## おわりに

今年も成長の年になりますように。
僕は今のところ大幅弱体しています。
JavaScriptとReactの違い

## はじめに

JavaScriptとReactの違いを学んだのでアウトプットしようと思い、備忘録として書きました。

## JavaScriptとは
プログラミング言語の一つ。
Webページの動きを制御するための言語（例：クリック時の動作やアニメーション）。
HTMLやCSSと連携してWebアプリを作成する基礎。

##  Reactとは
JavaScriptのライブラリの一つでFacebookが開発。
主にUIを効率的に構築・管理するために使用。
コンポーネントベース（小さなパーツを組み合わせてUIを作る）。

## それぞれの違い

| **JavaScript**           | **React**                 |
|--------------------------|---------------------------|
| プログラミング言語          | ライブラリ                  |
| 汎用的に使用可能            | UI作成に特化                 |
| 基礎的なロジック       | 効率的なUI開発      |
| 単体で使用可能            | JavaScriptが必要             |


## どうやって使い分ける？
JavaScriptは基礎的なプログラミングロジックを書くときに使用し、Reactは複雑なUIを効率よく構築したいときに使うので応用的なイメージ。まずJavaScriptを学び、その後Reactを学ぶのが主流っぽいです。

## まとめ
- JavaScriptはWeb開発の基礎
- Reactはその上で効率よくUIを作るためのツール
- 初心者は「JavaScript → React」の順で学ぶとスムーズ
Salesforceのカスタムリンクとカスタムボタンとカスタムリストボタンの違い

本橋孝昭です

今回はSalesforceのリンクとボタンとリストボタンについて説明します



## リンクとボタンとリストボタンの作成場所
リンクもボタンもリストボタンも、ともにオブジェクトマネージャーの「新規ボタンまたはリンク」から作成可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/62de86a2-a230-8894-01b9-6235601383d7.png)


今回はあえてリンクもボタンもリストボタンもURLを同じ
[https://www.salesforce.com/jp]
に設定して検証します


## リンクの作成方法
選択を
「詳細ページリンク」
にして設定することでリンクとして作成できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/29dcd8d0-ce4f-f7fe-0e0b-328d31c65eb1.png)

作成したリンクは
「カスタムリンク」からドラッグ&ドロップして設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/6785b2c1-13d3-2e86-7043-bb4e29fbf6ba.png)


そうすることによりレコードのリンクを設定することが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/46181543-c92e-a3f9-6d3f-fb9b9ad4354d.png)


## ボタンの作成方法
選択を
「詳細ページのボタン」
にして設定することでリンクとして作成できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/f5698c81-bfe8-7a9e-9324-7a8753093252.png)

作成したボタンは
「Salesforce モバイルおよび Lightning Experience のアクション」からドラッグ&ドロップして設定します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/1af03cbd-8139-b18d-47bc-f4364939705b.png)


そうすることによりレコードのボタンを設定することが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/904c30b7-ddfe-629c-4fd9-aadb282f348a.png)


## リストボタンの作成方法

選択を
「リストボタン」
にして設定することでリストボタンとして作成できます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/a827749c-ca78-7375-7e2e-0a7d3d8f6324.png)


リストビューボタンレイアウトから「編集」をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/3cfc706e-e3b5-09bd-84f3-b21eaeb5e4db.png)


選択したボタンにカスタムボタンを選択します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/80c5655c-c30d-67bb-20e6-dbc81d87d3d2.png)

そうすることでリストビュー上にボタンを表示可能になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/8898589e-7423-e7c2-1ccb-6407c02d6ba3.png)
【Rails】Table Plus でデータベースの中身を見る方法

- ### Table Plus をダウンロードしてください。
<br>

- ### ダウンロードして開くと下記のようになるので、プラスボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/2593fa19-f57f-c307-b324-8d7ad5691ce5.png)

- ### Railsで使用しているデータベースを選びます(筆者の場合はPostgreSQL)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/89a3c7ef-3e6a-91f6-5312-f38593018c9a.png)
<br>

- ### `config/database.yml`の開発環境の箇所を確認してください。筆者の場合は下記のようになっています。
    ```config/database.yml
    default: &default
      adapter: postgresql
      encoding: unicode
      host: db
      username: hoge # これ
      password: fuga # これ
      pool: XXXXXXXXXX
    
    development:
      <<: *default
      database: bar_development # これ
    ```
<br>

- ### 下記の画面が表示されるので、`User`と`Password`(設定していない場合は不要です)、`Database`の欄に`config/database.yml`の内容をコピペします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/4cd35a65-2034-7463-48e4-761326fdb532.png)

- ### 接続に成功すればデータベースの中身が見れるようになります！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2207701/8a05726d-c922-854e-ef27-ca705e397d7f.png)
Github Codespsaces の開発体験が最悪だった

## はじめに

直近の案件では Github Codespsaces の使用が推奨されていました。
個人的に、クラウド上での開発が未経験だったので、ものは試しと思って導入してみましたが、割りと開発体験が最悪だった…という話です。

## Github Codespsaces について

Github Codespsaces（以下、Codespaces）が何かについては、割愛します。以下のリンク先をご参照ください。

https://github.com/features/codespaces

https://zenn.dev/yuhei_fujita/articles/github-codespaces-introduction

ちなみに、自分の使い方としては、ローカルの VSCode から Codespaces を使っていました。ブラウザから使うような使い方はせず。

## クラウド障害

まず、クラウドサービスなので当然障害があります。
Github のステータスページによると、2024年は Codespaces 関連の障害が8件あったようです。

https://www.githubstatus.com/history

Codespaces が使えなくなると、localhost の立ち上げはもちろんのこと、ファイル編集すらできなくなります。すべてがクラウド上で行われるので。
8件の障害を多いとみるか少ないと見るかは人それぞれですが、個人的は多いなと感じてしまいました。

## 容量問題

次に、容量の問題です。
開発を始めた当初は問題がなかったのですが、数ヶ月すると以下のような警告が出るようになりました。

![](https://storage.googleapis.com/zenn-user-upload/6aa333d41ee1-20241228.png)

`No space left on device`。容量を使い切ってしまったようです。
このエラーが出ると、localhost の立ち上げはもちろん、ファイルの保存すらできなくなります。

Dockerのコンテナサイズが膨らんでいたので、色々とキャッシュを削除したり、不要なディレクトリを削除していましたが、結局解決せず…。
Codespaces のリビルドを行うのが早い、という結論に達しました。

リビルドすると当然、色々なデータが初期化されます。開発のための認証設定などがリセットされるので、地味に不便でした…。

## Cannot recconect 問題

次にこちらのエラー。 `Cannot recconect` が頻発するようになりました。

![](https://storage.googleapis.com/zenn-user-upload/85eed1befe51-20241228.png)

このエラーが出ると、localhost が強制終了されます。ファイルの保存もできず、VSCode のリロードとなります。
酷いときは10分に1度の頻度で発生し、まともに開発ができない状況でした。

拡張機能のせいなのか？などあたりをつけ、色々と対応してみましたが解決には至らず…。

https://github.com/microsoft/vscode/issues/195617#issuecomment-1773202568

## まとめ

これまでの書いてきたような理由で、Codespaces の開発体験が最悪だった、という印象を自分は持ちました。おそらく今後の開発で Codespaces を使うことは無いだろうなぁ…と思っています。

もちろん、自分の問題解決能力が低い、自分のPC環境に起因する、今後の Codespaces の改善によって問題が起こらなくなる、といった可能性は大いにありますが…。
AWS Certified AI Practitioner(AIF-C01)を取得しました

# はじめに
AWS認定コンプリートを目指すべく、AIF-C01を取得しました。

# AWS Certified AI Practitioner(AIF-C01) とは
[この辺](https://aws.amazon.com/jp/certification/certified-ai-practitioner/)を参照ください。

# 教材
## 講義
1. [Exam Prep Standard Course: AWS Certified AI Practitioner (AIF-C01 - Japanese)](https://explore.skillbuilder.aws/learn/course/21601/exam-prep-standard-course-aws-certified-ai-practitioner-aif-c01-japanese)
    - 公式の無償です。
1. [Exam Prep Enhanced Course: AWS Certified AI Practitioner (AIF-C01 - Japanese)](https://explore.skillbuilder.aws/learn/course/21615/exam-prep-enhanced-course-aws-certified-machine-learning-engineer-associate-mla-c01-japanese)
    - 公式の有償です。
    - 上記の無償版に対して以下が付いています。
        - フラッシュカード(知識確認用の簡易テスト)
        - ボーナス問題:70問(20問x1 + 15問x2 + 10問x2)
        - 下記の問題集の有償版の公式模擬試験(65問)
1. [AWS Black BeltOnline Seminar Amazon Bedrock Series #01 Amazon Bedrock Overview](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2024_Amazon-Bedrock-Overview_v1.pdf)
    - 本試験はBedrockも対象のため参照しています。
1. [AWS Black BeltOnline Seminar Amazon Bedrock Knowledge Bases](https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2024_Amazon-Bedrock-Knowledge-Bases_0920_v1.pdf)
    - 本試験はBedrockも対象のため参照しています。
## 問題集
1. [Cloud License](https://cloud-license.com/exam/aif/)
    - 有償のおなじみのやつです。
    - 56問(8セクションx7問)です。
    - 役立ちます。
1. [Exam Prep Official Practice Question Set: AWS Certified AI Practitioner (AIF-C01 - Japanese)](https://explore.skillbuilder.aws/learn/course/19791/exam-prep-official-practice-question-set-aws-certified-ai-practitioner-aif-c01-japanese)
    - 公式の模擬試験で、20問です。無償です。
1. [Exam Prep Official Pretest: AWS Certified AI Practitioner (AIF-C01 - Japanese)](https://explore.skillbuilder.aws/learn/course/21219/exam-prep-official-pretest-aws-certified-ai-practitioner-aif-c01-japanese)
    - 公式の模擬試験で、65問です。有償です。
1. [書籍) 2週間で合格！AWS認定資格 AIプラクティショナー 【AIF-01 対応】 (唯本堂 (Yuihondo)) ](https://www.amazon.co.jp/2%E9%80%B1%E9%96%93%E3%81%A7%E5%90%88%E6%A0%BC%EF%BC%81AWS%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC-AI%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%BC-%E3%80%90AIF-01-%E5%AF%BE%E5%BF%9C%E3%80%91-Yuihondo-ebook/dp/B0DP3MQXF7/)
    - 目立った試験対策リソースが無かったため、Amazonで問題集を購入してみました。
    - 本番形式模擬試験(85問x2)のみ使用しています。
1. [Udemy) AIF-C01 / AWS Certified AI Practitioner 模擬試験（4回分）＋補足問題](https://www.udemy.com/course/aws-certified-ai-practitioner-certification-55-4/)
    - 複数の本試験合格者により紹介されていたものです。
    - 買っては見たものの、上述のリソースの方で済んだため、使用していません。

# 結果&感想
50分ぐらいで終えています。難易度は「AWS Certified Cloud Practitioner」と「AWS Certified Solutions Architect - Associate」の間ぐらいでした。
AI、生成AI、Bedrock、SageMaker、関連AWSサービス(AI,NW,Securityなど)から概要レベルで満遍なく出題していました。AIの基礎的な知識が必要となり、ChatGPTを使用して用語の深堀をしたりしました。
hasセレクタを使うとjsdomがSyntaxError: missing ) after argument listになる問題の歴史

## 前提
Frontendの開発でvitestやjestをjsdom環境で動かしている

## 発生した問題
vitestを動かしたときに、テスト対象のファイル以外であっても、読み込むファイルの中に
```typescript
<div className="has-[focus-visible]:outline">
```
のようなhasセレクタ（tailwindで失礼）使っている場合、
`SyntaxError: missing ) after argument list`
というエラーが出力されてテストがエラーになる。

## 理由
jsdomが内部的に使っているCSSセレクタエンジン（ブラウザのquerySelectorを模倣したようなもの。CSSからDOM要素を取得するのに使う）のnwsapiがhasセレクタに対応していないから。

## 歴史
- CSSセレクタエンジンをdom-selectorに変更する。https://github.com/jsdom/jsdom/pull/3644
- dom-selectorにパフォーマンスの問題があったようで、nwsapiに戻す。https://github.com/jsdom/jsdom/issues/3659
- 上記2つが2024年1月の出来事

## つまり
jsdomがdom-selectorを使っていたバージョン23.2.0ではhasセレクタが使えます。
しかしissueの通りパフォーマンスに影響があって、特に`getByRole`が遅くなってしまいました。（自分のProjectで言うと、テスト全体の実行時間が10秒から30秒になっていた。）

## どうすればいいか
1. happydomを使う -> jsdomの競合他社のようなやつです
1. hasなしで実装しつつ、jsdomもCSSセレクタエンジンの変更やアップデートは定期的に行っているようなので、常に最新版を試して望みのCSSが使えるよういなっているか確認する
1. browser modeを使う https://vitest.dev/guide/browser/ ただしbrowser modeではMockに制約があったりするので、結局jsdomなどのブラウザエミュレーションと併用すると思う
MIMEタイプ（メディアタイプ）の指定方法

# パラメータ
### chrasetパラメータ
テキストデータの文字エンコーディングを指定

```
Content-Type: text/html; charset=UTF-8
```

### qパラメータ
メディアタイプを複数指定する場合に、優先度を指定する

```
Accept: text/html, application/xhtml+xml, application/xml;q=0.9, /;q=0.8
```

####  `text/html, application/xhtml+xml`
クライアントはHTML形式とXHTML形式のレスポンスを最も優先して受け入れる。この2つの優先度は同じ。

#### `application/xml;q=0.9`
HTMLやXHTMLよりも低い優先度"0.9"でXML形式を受け入れる。

#### `*/*;q=0.8`
メディアタイプを受け入れるが、優先度は最も低い。

# MIMEタイプの範囲指定
ワイルドカード（*）を使用して、特定のカテゴリのすべてのMIMEタイプを指定可能。

```http:複数の画像形式を受け入れる
Accept: image/*
```
#0006（2024/01/06）よく目にするIPアドレス

# モチベーション
- 192.168.xxx や127.0.0.0、8.8.8.8などよく目にするIPアドレスについて調べてみた

# よく目にするIPアドレス

|IP|範囲|用途|備考|
|---|---|------|----|
|192.168.x.x|192.168.0.0/16<br>（192.168.0.0～192.168.255.255）|プライベースIPアドレス（主に家庭やオフィスのLAN内）|RFC 1918 で定義されたプライベートIPアドレスの範囲|
|10.x.x.x|10.0.0.0/8（10.0.0.0～10.255.255.255）|プライベートIPアドレス（企業やクラウド環境のVPCなど）。|同じくRFC 1918の範囲で、非常に広いアドレス空間を提供します。<br>大規模な企業ネットワークやAWSやAzureのようなクラウド環境でよく使用。|
|127.0.0.1|127.0.0.0/8（127.0.0.0 ～ 127.255.255.255）|localhost|開発やテスト環境でよく使われる。|
|169.254.x.x|169.254.0.0/16<br>（169.254.0.0 ～ 169.254.255.255）|APIPA（Automatic Private IP Addressing）。|DHCPサーバーが利用できない場合に、デバイスが自動的に取得するアドレス。<br>ネットワークに問題があるときに目にすることが多い。|
| 8.8.8.8||Googleのpublic hostサーバ|

# あまり目にしないIPアドレス

|IP|用途|
|---|---|
| 0.0.0.0|サーバーが「どのネットワークインターフェイスでも受け付ける」設定|
|255.255.255.255|ブロードキャストアドレス<br>（同じネットワーク内のすべてのデバイスにパケットを送信）。|
|224.0.0.0 ～ 239.255.255.255|マルチキャストアドレス（1対多通信）。<br>IPマルチキャストを使用するネットワークサービス（例: 動画配信やオンラインゲーム）でバックグラウンド処理|
|100.64.0.0/10|Carrier-Grade NAT (CGN)で使用。|

# 参考
- chatgptの回答