OmniAICreator/Qiita-1.07M huggingface dataset:
ルーティングを調べる

### ルーティング仕様
>Routing specs

ルーティングの使用は`type: :routing`で印にするか、`spec/routing`ディレクトリに置くことによって`config.infer_spec_type_from_file_location!`を設定している場合に印にする
>Routing specs are marked by type: :routing or if you have set config.infer_spec_type_from_file_location! by placing them in spec/routing.

標準のRESTfulのルートのみを持つシンプルなアプリはルーティングの仕様から多くの価値を得られないだろう。しかし、カスタマイズされた`outes`, `like vanity links`, `slugs`などを明示するため使われたとき重要な価値を供給することができる
>Simple apps with nothing but standard RESTful routes won’t get much value from routing specs, but they can provide significant value when used to specify customized routes, like vanity links, slugs, etc.

    expect(:get => "/articles/2012/11/when-to-use-routing-specs").to route_to(
      :controller => "articles",　<- コントローラ、パラメータを指定したルーティングを指定できる
      :month => "2012-11",
      :slug => "when-to-use-routing-specs"
    )

使用可能にすべきではないルートに対しても貴重な存在だ。
>They are also valuable for routes that should not be available:

    expect(:delete => "/accounts/37").not_to be_routable<-not_toをつけることですべきではないことを表現していると考える

https://rspec.info/features/7-1/rspec-rails/routing-specs/

https://qiita.com/masatom86650860/items/bfbef6b3a329d45f4273

### `route_to`マッチャー
>route_to matcher

`route_to`マッチャーは(verb + path)のリクエストがルーティングの宛先であることを示す。標準のRESTfulルート以外のルートを明示するときとても貴重です。
>The route_to matcher specifies that a request (verb + path) is routable. It is most valuable when specifying routes other than standard RESTful routes.

    expect(get("/")).to route_to("welcome#index") # new in 2.6.0　<-指定のアクションに行くかどうかを検証
>or

    expect(:get => "/").to route_to(:controller => "welcome") <-指定のコントローラに行くことも指定できる

verbはhttp動詞を指すので、例えばget("/")はgetリクエストでパスは`/`を指している

他にも

    route_to(:controller => "widgets", :action => "index")　

    route_to("widgets#foo")

    route_to("admin/accounts#index")

    route_to(:controller => "admin/accounts", :action => "index")
    
https://rspec.info/features/7-1/rspec-rails/routing-specs/route-to-matcher/

### `be_routable`マッチャー
>be_routable matcher

`be_routable`マッチャーは`should_not`と一緒に使うことでルーティング可能でない指定のルートを明示するために最適です。ルーティングスペック(spec/controllers)とコントローラスペック(spec/routing)で利用可能です。
>The be_routable matcher is best used with should_not to specify that a given route should not be routable. It is available in routing specs (in spec/routing) and controller specs (in spec/controllers).

https://rspec.info/features/7-1/rspec-rails/routing-specs/be-routable-matcher/

### 名前付きルートを使用
>Using named routes

ルーティング仕様は名前付きルートへアクセスできる
>Routing specs have access to named routes.

    to route_to(:controller => "widgets", :action => "new")<-actionが名前付きルートを指していると考える
    
https://rspec.info/features/7-1/rspec-rails/routing-specs/named-routes/

### エンジンルートの使用
>Using engine routes

ルーティングはexampleグループに対して使用されるだろうリクエストセットを明示することができる。これはライlsエンジンをテストするときにとても役に立つ。
>Routing specs can specify the routeset that will be used for the example group. This is most useful when testing Rails engines.

https://rspec.info/features/7-1/rspec-rails/routing-specs/engine-routes/
仕事が捗る！便利なExcel関数まとめ

# はじめに

Excelはデータの整理や分析に欠かせないツールですが、その中でも関数を使いこなすことで作業効率が大幅にアップします。この記事では、中級者向けに知っておくと便利なExcel関数を紹介し、それぞれの使い方と具体的な例を交えて解説します。

---

## 1. VLOOKUP関数：表の中からデータを検索
**用途**：縦方向にデータを検索し、対応する値を取得します。

**書式**：
```excel
=VLOOKUP(検索値, 範囲, 列番号, [検索方法])
```

**例**：
```excel
=VLOOKUP(101, A2:C10, 2, FALSE)
```
A2からC10の範囲で101を検索し、2列目の値を返します。

---

## 2. CONCATENATE関数（TEXTJOIN関数）：文字列の結合
**用途**：複数のセルや文字列を1つにまとめます。

**書式**：
```excel
=CONCATENATE(文字列1, 文字列2, ...)
```
または
```excel
=TEXTJOIN(区切り文字, 無視する空白, 文字列1, 文字列2, ...)
```

**例**：
```excel
=CONCATENATE(A1, " ", B1)
```
A1とB1の内容をスペースで区切って結合します。

---

## 3. COUNTIF関数：条件に一致するデータの数を数える
**用途**：指定した条件に一致するセルの数を数えます。

**書式**：
```excel
=COUNTIF(範囲, 条件)
```

**例**：
```excel
=COUNTIF(A1:A10, ">=60")
```
A1からA10の範囲で60以上の値を持つセルの数を数えます。

---

## 4. LEN関数：文字数を数える
**用途**：セル内の文字数を数えます。

**書式**：
```excel
=LEN(文字列)
```

**例**：
```excel
=LEN(A1)
```
A1のセル内にある文字数をカウントします。

---

## 5. TODAY関数：今日の日付を表示
**用途**：現在の日付を自動的に表示します。

**書式**：
```excel
=TODAY()
```

**例**：
```excel
=TODAY()
```
実行した日の日付が表示されます。

---

## 6. INDEX関数とMATCH関数の組み合わせ：柔軟なデータ検索
**用途**：VLOOKUPの制約を超えて、柔軟な検索を行います。

**書式**：
```excel
=INDEX(範囲, MATCH(検索値, 検索範囲, 0))
```

**例**：
```excel
=INDEX(B2:B10, MATCH(101, A2:A10, 0))
```
A2:A10の範囲で101を検索し、対応するB列の値を返します。

---

## 7. INDIRECT関数：セル参照を動的に
**用途**：文字列として指定したセル参照を実際の参照に変換します。

**書式**：
```excel
=INDIRECT(参照文字列)
```

**例**：
```excel
=INDIRECT("A" & B1)
```
B1の値が3なら、A3のセルの値を参照します。

---

## まとめ
今回紹介した関数は、データ管理や分析をさらに効率化するためのものです。特に、複数の関数を組み合わせて使うことで、Excelの可能性は無限に広がります。ぜひ、自分の業務に取り入れてみてください！
【Salesforce認定アドミニストレーター】やったこと

## この記事は
筆者が2025年2月にSalesforce認定アドミニストレーターを取得した際に使用した教材などのまとめです。

### 筆者のスペック
+ エンジニア2年目
+ Salesforceは全くの未経験

## 勉強の流れ
ステップ1→1日
ステップ2→2週間
ステップ3→2週間
くらいの時間配分で取り組みました。
全ステップ合わせて大体1か月くらい。

### ステップ1：書籍

職場の方に借りて読みました。Trailhead（後述）のテキストは英語翻訳調で分かりにくいので、先に概要をこちらで頭に入れておくと後の理解がすんなりいった気がします。

https://www.amazon.co.jp/%E5%9B%B3%E8%A7%A3%E5%85%A5%E9%96%80-%E3%82%88%E3%81%8F%E3%82%8F%E3%81%8B%E3%82%8B%E6%9C%80%E6%96%B0-Salesforce%E3%81%AE%E5%B0%8E%E5%85%A5%E3%81%A8%E9%81%8B%E7%94%A8-%E9%95%B7%E8%B0%B7%E5%B7%9D-%E6%85%8E/dp/4798061840

### ステップ2：Trailhead
Salesforceの学習サイトであるTrailheadにてハンズオンで学習を進めました。
まずはSalesforceとは何ぞや、ということでこちらのトレイルで概要を学習します。

https://trailhead.salesforce.com/ja/content/learn/trails/salesforce_advantage

https://trailhead.salesforce.com/ja/content/learn/trails/learn-about-trailhead-and-salesforce

その後、アドミニストレーター資格の準備用Trailmixを進めました。全部はこなさず、大体7割くらい進めたところで次の問題演習に移りました。

https://trailhead.salesforce.com/ja/users/strailhead/trailmixes/prepare-for-your-salesforce-administrator-credential

Superbadgeもいくつか取りました。
どの機能をどの場面で使うのか、がわかって理解が深まりました。
全文英語なのがハードル高めですが、自動翻訳＋ところどころ原文を頑張って読む、でなんとか乗り切りました。

https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge_user_access_troubleshooting_sbu

https://trailhead.salesforce.com/ja/content/learn/superbadges/superbadge-user-authentication-settings

### ステップ3：問題演習
ひたすら問題集を周回していきます。
問題集は
+ 1周目：ざっくり解く（わからなくてOK）
+ 2周目：解説をしっかり読んで頭に入れる
+ 3周目：再度1周して不明点を明らかにする

という流れで進めていました。
3周目まで終わったら間違えやすい問題・分野がわかってくるので、試験日まで重点的に解きなおしました。

以下、使った問題集を挙げます。
#### Tysonblog

https://tysonblog-whitelabel.com/salesforce-admin-practice1

全181問。無料。正解・不正解の解説が丁寧で、たまにハンズオンの手順も入っていました。会社でアドミニストレーター受かった人に教えてもらったサイト。

#### SALES4BOX

https://sales4box.com/admin_exam/

全424問。問題は無料、全問解説付きは有料。解説を全部読みたかったので課金しました。実際出題された問題もありましたが、どちらかというと基礎的な知識を確かめていくために使いました。

#### note

https://note.com/salesforce777/n/n1754168c1280?magazine_key=m5f6e072b52e4

全240問。有料。課金必要ですが他の勉強サイトでおすすめされていたので購入。Tysonblogと同じくらい解説がきっちりまとまっていました。不正解の選択肢については解説がなかったので、ヘルプ読む・Tysonblogの内容と照らし合わせる・Copilotに訊くなどしていました。

#### Qiita

https://qiita.com/Takaa/items/f2eb81e49c614fb767de

全153問。無料。テキスト+動画の解説付きで、使った問題集のなかでは一番詳しかったのではと思います。

#### 余談：で、結局どの問題集がいいの？
+ 基礎知識から固めたいなら→SALES4BOX
+ 問題演習メインで進めたいなら→Tysonblogとnote

かな～と思います。
自分はSalesforce知識ゼロから始めたのでSALES4BOXの解説をしっかり読み込むのがかなり役立ちました。
が、ある程度Salesforceに慣れている方はTysonblogとnoteで乗り切れるのではないでしょうか。

Qiitaの問題集も一通り解きましたが、こちらはわからない問題があった時にヘルプと併せて参照する、という辞書的な使い方が合っていたように思います。

## 受験
### 試験会場
+ オンラインは通信環境などなど準備が大変と書いている方がいたので、オンサイト受験しました。
+ 通信が途中で途切れ、3分ほど待機する時間がありました。回答の内容は失われないと注意書きにあり、会場のスタッフの方にもよくあることなので大丈夫です、と言われましたが、復帰を待っている間結構動揺していました…
### 試験内容
+ 回答15分+見直し20分ちょっと、で40分弱で終わりました。
+ 翻訳ブレは特に感じませんでした。複数問題集を解いていてある程度問題の大意はくみ取れるようになっていたためだと思います。量をこなしたのが吉と出ました。

各トピックと得点率はこんな感じでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978744/3f9a048a-4a15-27df-c93a-c5531447829e.png)


## 終わりに
+ 入門的な試験ということもあり、学習を通じてSalesforceのデータの持ち方や扱い方が理解できたと思います。
+ 次はデベロッパーとアプリケーションビルダーを受験する予定です。
（もう申し込んでしまったので後がない…！）
引き続き精進します。
個人的備忘録：Datadog の API キーが動作しない場合のトラブルシューティングを体系的に整理してみた

## はじめに
Datadog の API キーは、エージェントやカスタムアプリケーションが Datadog にデータを送信するための認証情報です。

:::note warn
**正しく設定し、セキュリティを確保することで、スムーズな監視とデータ収集が可能になります。**
:::

本記事は個人的な備忘録としてまとめたものですが、参考になれば幸いです。

## かなり困っていたこと
Datadog の API キーを扱う中で、設定ミスやセキュリティ管理の重要性を実感しました。さらに、ECS に Datadog エージェントを導入後、API キー関連のエラーが発生しました。

**エラー発生**

```sh
API Key invalid, dropping transaction for https://process.datadoghq.com/api/v1/container
[container] Invalid response from https://process.datadoghq.com: 403 -> <nil>
```

このエラーは、Datadog Agent の Process Monitoring が `https://process.datadoghq.com` に API リクエストを送信しようとした際に、**API キーが無効** または **アクセスが拒否** されたことを示しています。  

**そこで、API キーの仕組みや設定方法を整理し、適切な管理とトラブルシューティングのポイントをまとめました。**

## 先に、簡単にまとめてみた

- **Datadog の API キーは、データ送信のための認証情報。適切に設定し、セキュリティを確保することが重要。**  
- **ECS / EC2 などの環境に応じた設定方法を選択し、環境変数や AWS Secrets Manager を活用して安全に管理する。**  
- **API キーが動作しない場合は、キーの有効性、リージョン設定、ネットワーク制限を確認し、トラブルシューティングを行う。**  

## Datadog API キーの概要

- **API キーは、Datadog にメトリクス、ログ、イベントを送信するための認証トークン**

**主要な用途**
- **Datadog エージェントの設定 (`DD_API_KEY`)**  
- **Datadog API でのデータ送信**  
- **カスタムアプリからのログ送信**  
- **外部サービスとの統合**  

## API キーの設定方法
**ECS / Docker の場合**

```hcl
environment = [
  {
    name  = "DD_API_KEY"
    value = "your-api-key"
  }
]
```

**または `docker run` コマンドで設定**

```sh
docker run -d -e DD_API_KEY=your-api-key datadog/agent:latest
```

**EC2 の場合 `datadog.yaml` に設定**

```yaml
api_key: your-api-key
```

## API キーのセキュリティ管理

API キーの漏洩を防ぐため、以下の対策を実施する：

- **GitHub にハードコードしない（リポジトリに直書きしない）**  
- **環境変数で管理**  

```sh
export DD_API_KEY=your-api-key
```

- **AWS Secrets Manager / Parameter Store に保存**  
- **不要な API キーは定期的に削除**  
- **API キーはデータ送信専用であり、削除や変更の権限はない**  

## API キーを使った Datadog API リクエスト

API キーを使って Datadog の API を呼び出し、動作確認が可能。

**API キーの検証**
```sh
curl -H "DD-API-KEY: your-api-key" "https://api.datadoghq.com/api/v1/validate"
```

- 成功時: `{"valid": true}`
- エラー時: `{"errors":["Forbidden"]}`

### API キーが動作しない場合のトラブルシューティング
**API キーが正しいか確認**

```sh
curl -H "DD-API-KEY: your-api-key" "https://api.datadoghq.com/api/v1/validate"
```

→ `{"valid": true}` が返らない場合はキーが間違っている可能性。

**リージョン (`DD_SITE`) を確認**

- **US (デフォルト)** → `datadoghq.com`  
- **EU** → `datadoghq.eu`  
- **AP1 (アジア太平洋)** → `ap1.datadoghq.com`  

```sh
export DD_SITE="ap1.datadoghq.com"
```

**ネットワーク制限の確認**

```sh
curl -v https://api.datadoghq.com
```

403エラーや接続拒否が発生する場合は、ファイアウォールやプロキシの影響をチェックしてみてください！

## まとめ

ここまでお読みいただき、ありがとうございました。今回は、私自身が特に苦戦した部分を整理しました。

:::note info
***次回以降は、この記事を参考にしてスムーズに作業できるようにしたいと思います。***
:::

今後も、このようなニッチな技術について検証を続けていきます。引き続きよろしくお願いいたします！
Youtubeで自分が登録しているチャンネル数を知る方法

Youtubeで自分が登録しているチャンネル数を知りたいということが人生の中では一度はあるものです。

しかし、昔は下記方法で知ることができましたが、現在(2025年2月6日)はこの方法ではわかりません。

昔の確認方法（PCの場合）
(1) アカウントのアイコンをクリック
(2) [Youtubeでのデータ]をクリック
(3) YouTubeのダッシュボードに記載される

![Youtube登録数.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/3cc58bc1-4e6f-1ab9-5bc4-d959f6cdcad7.png)

上の画像は、2024‎年‎12‎月‎24‎日確認時のキャプチャです。944件登録されていることが分かります。

しかし、現在は下記のように表示されなくなっています。

![Youtube登録数2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/25d6ca84-0a5b-8a66-d258-b6cae39c5222.png)

もうこうなると自分が何件チャンネルを登録しているかわかりません。

でも知りたい！！
というわがままな人へ面倒くさいけど知る方法があります。
それを本記事では紹介したいと思います。

(1) 下記URLを開く

Youtube Data APIのマニュアルページ

https://developers.google.com/youtube/v3/docs/subscriptions/list?apix=true&hl=ja&apix_params=%7B%22part%22%3A%5B%22snippet%22%5D%2C%22mine%22%3Atrue%7D

(2) 画面の右にあるAPI Explorerを下までスクロールして[Execute]をクリック

![登録者数を知る方法2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/22c4eaea-22c8-490f-71fa-38b28ec605e8.png)

(3) アカウントを選択する
(4) Google APIs Explorer にログイン画面で[次へ]をクリック

![登録者数を知る方法3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/a98a4d60-efd9-7bab-7ea0-aaadaf0032e1.png)

(5) Google APIs Explorer が Google アカウントへのアクセスをリクエストしています画面で[許可]をクリック(Youtube Data APIが実行される)

![登録者数を知る方法4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/801b279d-9587-337f-1050-822b3c1798fa.png)

(6) Executeボタンの下に実行結果が表示される。下記赤丸で示した部分がチャンネルを登録した数

![登録者数を知る方法5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/702253/feea091c-e839-4f34-d6c8-395b10bbaf8b.png)

私のチャンネルでは985件チャンネルを登録しているということです。



どうだったでしょうか？ものすごく面倒くさいですね。
早く以前みたいにYoutubeデータで表示されるようになってほしいです。
以上、Youtubeで自分が登録しているチャンネル数を知る方法でした。
DNSのレコードの種類をできる限り挙げてみた

## DNSのレコード
かなりさっと流してます
### Aレコード
ドメイン名をIPv4アドレスに変更するやつ。
### AAAAレコード
ドメイン名をIPv6アドレスに変更するやつ。
### MXレコード
メールサーバーを指定する
### CNAMEレコード
別のドメイン名に紐づけする。
例）www.example.comは本来example.comが正しいから、example.comを見に行ってねと誘導する？うまく説明できない。ごめんなさい
### NSレコード
どこのDNSサーバーにその情報があるかを示すレコード
### SOAレコード
ドメインの管理ルール、責任者、更新頻度とかの大事な情報をまとめてるレコード
### TXTレコード
SPFとかDKIMとかでよく出てくる。テキストデータを保存するレコード
### PTRレコード
逆引きDNS。IPアドレスからドメイン名を探す
### SRVレコード
特定のサービスを提供するサーバーの情報を記載してるレコード
### DNSKEYレコード
DNSSECで使う公開鍵
### RRSIGレコード
DNSKEYの署名データを保存するレコード
### CAAレコード
あるドメインに対してほかの人が勝手に証明書を作らないようにするために、ドメインはどこの認証局からしか証明書を発行してはいけないと決めるレコード
### NSEC/NSEC3レコード
レコードが存在しないことを証明するレコード
### DNAMEレコード
ドメイン名の代行レコード
例）example.comをnewexample.comにリダイレクトするDNAMEレコードを設定すると、sub.example.comやanother.sub.example.comも自動的にnewexample.comにリダイレクトされます（この例文はcopilotで生成された例文です）

以上
Dockerとは何か？

## **Dockerとは？**
コンテナ仮想化技術を使って、アプリケーションを開発・配置・実行するための隔離された環境を提供するツールのこと。


## **コンテナとは？**
パソコンやサーバ上で隔離され、干渉されない環境のこと。  
コンテナにソフトウェアをインストールすることで他の環境に干渉されない環境を作ることが出来る。ソフトウェアならなんでも入れることが可能。  
コンテナの中に小さなパソコンがあるイメージ。    
コンテナは単体では動くことが出来ず、ホストマシン（ホストOS）が必要。

例えば、下記の環境で開発したい場合
- Ubuntu Linux
- Python
- MySQL

コンテナなら一括で再現することが出来る。  

![Docker構成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734918/faa3460a-730e-fbad-5803-6eee6bbd13f9.png)


## コンテナ環境があるときとないときの違い
コンテナを使用しない場合だとソフトウェアをホストマシンに直接ダウンロードする必要があり、OSとソフトウェア同士やソフトウェアのバージョンなどの干渉や副作用を起こす可能性がある。  
コンテナ環境だと、ホストマシンと隔離されている環境のため干渉や副作用を未然に防ぐことが出来る。    
![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734918/49ba35c8-bfcf-c9d7-96b5-dc0c579674e9.png)


## 使用教材、参考サイトなど
- [理解して使う！Docker入門＋応用：初心者から実務で使えるスキルが身に付ける](https://www.udemy.com/course/ok-docker/?couponCode=KEEPLEARNING)

## 終わりに
何か誤り等あればコメントにて教えていただけると幸いです。
EC2インスタンス　Linux　キーペア変更手順

Rocky Linux9で使っているキーペアをrsaからed25519へ変更しなければならない作業があったため手順をまとめておきます。

## 大まかな手順
①コンソール上でキーペアを作成する
②S3経由でサーバ内にキーペアを持ち込む
③キーペアからパブリックキー情報を取得し、設定
④接続確認

AWS始めたてだったので、そもそもキーペアがEC2をたてるタイミング以外でも作れたことを知りませんでした（笑）

## 手順

キーペアの作成方法は公式ページを参照してください。すぐできます。
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/create-key-pairs.html

rsaかed25519かは、使うソフトによって変わります。
古いソフトだと新しい規格のed25519が対応してなかったりもします。

キーペアを作成したら、サーバからキーペアをダウンロードするためS3バケットのどこかに格納して下さい。

Linux内での操作は以下です。（Systems Managerからログインしてます）
```
# キーペアを使う対象のユーザにログイン（今回はRocky Linuxのデフォルトユーザであるrocky）
su - rocky
#　S3からダウンロードして権限変更
aws s3 cp s3://<資材配備先バケット>/<新しいキーペア> /tmp
ls -l /tmp
chmod 600 /tmp/<新しいキーペア>
ls -l /tmp
#　パブリックキー取得（出力結果はメモしておく）
ssh-keygen -y -f /tmp/<新しいキーペア>
# 元の鍵情報バックアップ
cat ~/.ssh/authorized_keys
cp ~/.ssh/authorized_keys /home/rocky/authorized_keys_`date "+%Y%m%d"`
ls -l /home/rocky/
# 鍵情報追加
vi ~/.ssh/authorized_keys
⇒最下行にメモした結果を張り付け。その後ろにスペース空けて判断が付くように新しいキーペア名を入力
# 変更確認
diff ~/.ssh/authorized_keys /home/rocky/authorized_keys_`date "+%Y%m%d"`
```

もし前回使っていたキーペアが不要であれば、「authorized_keys」の記載から削除して下さい。
（間違えて新しく追加したキーペアの方を消さないように）

あとは、Teratermなり別のサーバなりでログインを確認して下さい。

以上！！
paiza Bランク・スキルチェック過去問題（3Dプリンタ C編）を解いたメモ

以下のpaiza Bランク・スキルチェック過去問の「3Dプリンタ」をC言語で解いたので、覚書しておきます。

https://paiza.jp/works/mondai/b_rank_skillcheck_archive/3d_printer

戦略はいつもどおり、コツコツ実直に検査していきます。
問題の対象となる空間が最大でも50 x 50 x 50のため、すなおにfor文を回しても大丈夫そうでした。

以下が最終的なコードに、コメントを追加したものです。

```C
#include <stdio.h>
int main(void){
    char buf[100];
    int x, y, z;
    
    // 入力を受けとる
    
    // 空間の大きさを取得
    fgets(buf, sizeof(buf), stdin);
    sscanf(buf, "%d %d %d", &x, &y, &z);
    
    // 空間の立体の有無を取得
    char field[51][51][51]; // 最大文字列数 + NULL終端文字
    for(int i = 0; i < z; i++) {
        for(int j = 0; j < x; j++) {
            fgets(buf, sizeof(buf), stdin);
            for(int k = 0; k < y; k++) {
                field[i][j][k] = buf[k];
            }
        }
        fgets(buf, sizeof(buf), stdin); // "--"を読み飛ばす
    }
    
    // 入力を正常に受けとれたかテスト
    /*
    printf("%d %d %d\n", x, y, z);
    for(int i = 0; i < z; i++) {
        for(int j = 0; j < x; j++) {
            printf("%s\n", field[i][j]);
        }
    }
    */
    
    // ここから解法
    char result[51][51] = {0}; // 最終結果用の配列（最大文字列数 + NULL終端文字）
    for(int i = 0; i < z; i++) {
        for(int j = 0; j < y; j++) {
            result[i][j] = '.'; // 最終結果のresult配列を初期化
            for(int k = 0; k < x; k++) {
                // 立体があったら、result配列の該当位置を'#'として、その列の走査終了
                if(field[i][k][j] == '#') {
                    result[i][j] = '#'; // 
                    break;
                }
            }
        }
    }
    
    // 最終結果を出力
    for(int i = z - 1; i >= 0; i--) {
        printf("%s\n", result[i]);
    }
}
```

空間の座標の方向に少々試行錯誤しました。

まず、入力を受けとるときは、z回数分、y文字の行をx行取得しますので、for文の入れ子は、z -> x -> yとなります。

実際に検査していくときは、横方向から見るため、for文の入れ子はz -> y -> xとなります。（つまり、奥行きがx、縦幅がz、横幅がyです）
この対応は、手元で図を書いて確認しました。

また、以下の条件があり、入力された空間情報を文字列として扱うため、入力データにも出力データも、NULL終端文字をプラスしたサイズを確保します。

> 条件
> すべてのテストケースにおいて、以下の条件をみたします。
> ・ 1 ≦ X ≦ 50
> ・ 1 ≦ Y ≦ 50
> ・ 1 ≦ Z ≦ 50

# 終わりに

入力を受けとるのには慣れてきた感覚があります。

また、C言語の場合、数値の取り得る範囲を確認して、必要十分なサイズの変数を確保しなければならないので、そこが面倒くさいです。

引き続き、他の問題にもチャレンジしてみたいと思います。
【Laravel/Auth】Auth::attempt()とAuth::login() の違い

Laravel の認証システムでは、ユーザーをログイン状態にするために主に 2 つのメソッドが用意されています。この記事では、`Auth::attempt() と `Auth::login()` の違いと使い分けについて解説します。

## Auth::attempt() とは？

`Auth::attempt()` は、**ユーザーから送信された認証情報（例：メールアドレスとパスワード）を元に、データベース上のユーザー情報を検証**し、認証が成功した場合にそのユーザーをログイン状態にします。

### 主な特徴

- **資格情報の検証:**  
  ユーザーが入力した情報（通常は `email` や `password`）と、データベース上のレコードとを比較して検証を行います。  
  ※ パスワードは、ハッシュ化された値と比較されます。

- **認証処理とセッションへの保存:**  
  検証が成功すると、ユーザーの主キーがセッションに保存され、以降のリクエストで認証済みユーザーとして扱われます。

- **リメンバーミー機能:**  
  第二引数に `true` を渡すことで、「Remember Me」機能を有効にすることができます。

### 使用例

```php
$credentials = $request->only('email', 'password');

if (Auth::attempt($credentials, $remember = true)) {
    // 認証成功 → ユーザーはログイン状態になり、セッションに保存される
    return redirect()->intended('dashboard');
} else {
    // 認証失敗
    return back()->withErrors([
        'email' => '認証に失敗しました。',
    ]);
}
```

## Auth::login() とは？

`Auth::login()` は、既に取得済みのユーザー（User モデルインスタンス）を**直接ログイン状態にする**メソッドです。  
すなわち、認証情報の検証処理は行わず、与えられたユーザーをそのままセッションに保存します。

### 主な特徴

- **直接ログイン:**  
  すでにユーザー情報がわかっている場合（例：ソーシャルログインや管理者による強制ログインなど）、検証処理を飛ばして即座にログインさせることができます。

- **検証処理がない:**  
  ユーザーが入力した資格情報とデータベース上の情報の一致確認は行われません。  
  そのため、事前にユーザー情報の正当性が確認されていることが前提です。

### 使用例

```php
// 例: ID が 1 のユーザーを直接ログインさせる
$user = User::find(1);
Auth::login($user);

// これでユーザーは認証状態になり、セッションにユーザーIDが保存される
return redirect()->route('dashboard');
```

## 使い分けのポイント

- **認証情報の検証が必要な場合:**  
  ログインフォームなど、ユーザーからの入力を受け付ける処理では `Auth::attempt()` を利用します。  
  → ユーザーが入力した資格情報を基に、正しいパスワードかどうかなどをチェックする必要があるため。

- **既にユーザー情報が確定している場合:**  
  ソーシャルログインや、パスワード認証以外の方法でユーザーを特定できた場合は、`Auth::login()` を使用します。  
  → たとえば、OAuth認証後のコールバック処理などでユーザー情報を取得済みの場合に、こちらのメソッドを使います。

---

# まとめ

- **`Auth::attempt()`**  
  → ユーザーから送信された資格情報を検証し、認証成功時にユーザーをログイン状態にする  
  → パスワードハッシュの検証などが内部で行われる

- **`Auth::login()`**  
  → すでに取得済みのユーザー（Userモデル）を直接ログイン状態にする  
  → 資格情報の検証は行われないため、前提として正当性が保証されている場合に使用

このように、状況に応じて使い分けることで、より柔軟な認証処理が実現できます。ぜひ自分のプロジェクトで適切な方法を選択してください。

---

#### 参考リンク

- [Laravel 公式ドキュメント - Authentication](https://laravel.com/docs/11.x/authentication)
- [Laravel 公式ドキュメント - Auth Facade](https://laravel.com/docs/11.x/authentication#the-auth-facade)

以上、`attempt()` と `login()` の違いについての解説でした。質問やご意見があればコメントお待ちしております！
【Laravel/Auth】Authファサードでよく使うメソッドまとめ

Laravelで認証機能を実装する際、多くの場面で登場するのが **Authファサード** です。  
この記事では、Authファサードでよく使うメソッドをピックアップし、ざっくり使い方を紹介します。

## 1. `Auth::check()`
- **用途:** 現在のユーザーが認証済みかどうかを判定する  
- **戻り値:** 認証済みの場合は `true`、それ以外は `false`

```php
if (Auth::check()) {
    // ユーザーは認証済み
} else {
    // ユーザーは未認証
}
```

たとえば Blade テンプレートで表示を切り替える際などによく使います。
```blade
@if(Auth::check())
  <p>ようこそ、{{ Auth::user()->name }} さん</p>
@else
  <p>ゲストユーザーです</p>
@endif
```

## 2. `Auth::user()`
- **用途:** 現在の認証済みユーザーの情報（Userモデル）を取得する  
- **戻り値:** 認証済みの場合は `App\Models\User` のインスタンス、未認証の場合は `null`

```php
$user = Auth::user();
if ($user) {
    // $user->id, $user->name などが使える
}
```

ユーザー名やメールアドレスを取りたい場合は、このメソッドで簡単に取れます。

## 3. `Auth::id()`
- **用途:** 認証済みユーザーの主キー（ID）を取得する  
- **戻り値:** 認証済みの場合はユーザーID、未認証の場合は `null`

```php
$userId = Auth::id();
// 数値 (1, 2, 3...) が返ってくる
```

「とりあえずIDだけ必要」という場合に便利です。

## 4. `Auth::attempt($credentials, $remember = false)`
- **用途:** 認証を試みる（ユーザー名・パスワードのチェック）  
- **パラメータ:**  
  - `$credentials`: 配列形式（例：`['email' => 'foo@bar.com', 'password' => 'secret']`）  
  - `$remember`: Remember Me 機能を使うかどうか。省略時は `false`  
- **戻り値:** 認証成功で `true`、失敗で `false`

```php
$credentials = [
    'email' => $request->input('email'),
    'password' => $request->input('password')
];

if (Auth::attempt($credentials)) {
    // 認証成功
    return redirect()->intended('dashboard');
} else {
    // 認証失敗
    return back()->withErrors(['email' => '認証に失敗しました']);
}
```

コントローラ内でログイン処理を実装するときに頻繁に利用します。

## 5. `Auth::login($user, $remember = false)`
- **用途:** 指定したユーザー（Userモデル）を直接ログインさせる  
- **パラメータ:**  
  - `$user`: `User`インスタンス  
  - `$remember`: Remember Me 機能のオン/オフ  
- **戻り値:** なし

```php
$user = User::find(1);  // 例: IDが1のユーザー
Auth::login($user);

// これで即座に認証状態になる
```

SNSログインや、外部サービスからのコールバック時に、ユーザーを直接ログイン状態にするときなどに使います。

## 6. `Auth::logout()`
- **用途:** 現在ログイン中のユーザーをログアウトさせる  
- **戻り値:** なし

```php
Auth::logout();
return redirect('/login');
```

セッションからユーザーの認証情報が削除され、未認証状態になります。
`Auth::attempt`との違いについては以下の記事を参考にしてください。

**参考**
[Laravel 認証：`attempt()` と `login()` の違い](https://qiita.com/ko-suke2020/items/dd901dbd61926202da2a)

## 7. `Auth::viaRemember()`
- **用途:** ユーザーが「Remember Me」機能（ログイン状態維持）で自動ログインしているかどうかの判定  
- **戻り値:** Remember Me でログインしていれば `true`、そうでなければ `false`

```php
if (Auth::check() && Auth::viaRemember()) {
    // 「ログイン状態を保持する」チェックでログインしている場合のみの処理
}
```

Remember Me 機能の利用状況を判別したいときに使えます。

---

# おわりに

Laravel の認証周りは、  
- `check()`, `user()`, `id()` で認証状態やユーザー情報を確認  
- `attempt()`, `login()` でログイン処理  
- `logout()` でログアウト  
- `viaRemember()` でRemember Meの確認  

このあたりが基本となります。  
フレームワークに組み込まれているので、使い慣れるととても便利です。  
今後も実装時にはこれらのメソッドをうまく活用してみてください。

---

#### 参考リンク
- [Laravel 公式ドキュメント（11.x） - Authentication](https://laravel.com/docs/11.x/authentication)
- [Laravel 公式ドキュメント（11.x） - Helpers(Auth section)](https://laravel.com/docs/11.x/helpers)

以上、Authファサードでよく使うメソッドまとめでした！
プライベートサブネットにあるRocky LinuxをSystems Managerで繋げれるようにしよう

## 対象者
Rocky LinuxをSystems Managerのセッションマネージャー機能で繋ぎたいが、プライベートサブネットに配置してあってログインできないためssm agentを入れられない人向け

## 用語解説
**Systems Manager**・・WindowsやLinuxにコンソールからログイン出来たり、ログインしなくてもコンソール上でコマンドを一括投下できたりする便利なサービス

**ssm agent**・・今回Rocky Linuxに入れたいエージェント。これがOSにインストールされていることでSystems Managerのセッションマネージャー機能を使ってコンソールから直接ログインが来出る

## 環境
プライベートサブネットに配置されたRocky Linux9.4

## 事前作業
ここでは手順は割愛しますが、以下の設定を事前に行って下さい。
①セッションマネージャーを使うためのエンドポイントを作成する
②対象EC2のロールには、「AmazonS3FullAccess」⇐(これはいらないかも)と「AmazonSSMManagedInstanceCore」を付けておく
③S3のエンドポイントを作成する⇐ネットへのルートがある場合（NatGatewayとか）には必要ないです。

## やり方
実はそんなに難しくないです。
EC2を作成する時設定の最後に、このような画面があるのはご存じでしょうか。

![スクリーンショット 2025-02-06 151830.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3860847/72af6aa5-e0b9-4874-c65e-8166e531d19e.png)

**ユーザーデータ**とは、OSの起動時に一度のみ実行させたいコマンドを記載する箇所になります。
ここに「**ssm agent**」のインストールを記述しておくことで起動時にインストールされ、起動したときにはセッションマネージャーの画面に表示されるはずです。

記載は以下です。
```yaml:ユーザーデータ
#!/bin/bash
cd /tmp
sudo curl -OL https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm
sudo rpm -ivh amazon-ssm-agent.rpm
sudo systemctl enable amazon-ssm-agent
sudo systemctl restart amazon-ssm-agent
```
インストール後のrpmファイルはいらないので、勝手に消える/tmpにインストールされるように事前に/tmpに移動してから実行しています。
今回は、インストール元として「https://s3.ap-northeast-1.amazonaws.com/amazon-ssm-ap-northeast-1/latest/linux_amd64/amazon-ssm-agent.rpm」を指定しています。
パス内にある**linux_amd64**という部分が、Linuxのアーキテクチャ（x86_64とかARM64）によって変わるので環境によって変えてください。
以下の公式ページが参考になると思います。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-al.html

公式ページにRocky Linuxのssm agentインストール手順もありますが、これはインターネットに出られないサーバでは使えないものになっています。
公式ページ
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/agent-install-rocky.html

理由はこちらのサイトが分かりやすく解説してくれています。
https://blog.serverworks.co.jp/agent-install-with-privatelink

無事インストール出来たでしょうか？
誰かのお役に立てれば幸いです。

## 補足

インターネットに出られないサーバだとCloudWatchも入れられないと思うので、その場合は以下のコマンドでインストールして下さい。
curl -OL https://amazoncloudwatch-agent-ap-northeast-1.s3.ap-northeast-1.amazonaws.com/redhat/amd64/latest/amazon-cloudwatch-agent.rpm

（まぁインターネットに出られないとメトリクスも送信できないので一部しかCloudWatchでは見られませんが、、）
インターネットには出れないけどメトリクス送信したい場合は、別途CloudWatch用のエンドポイントを作成してください。

以上！！
「直列可能性」は「直列等価性」とすべき

## はじめに
DBスペシャリスト試験の勉強中の保守系ESです。
勉強していて「初めからこう言ってくれれば分かりやすかったのに！」というところをまとめていくシリーズ第2弾。

## 直列可能性とは？

#### ChatGPTに聞いてみた。

~~~
## 直列可能性（Serializability）とは？

直列可能性（Serializability） とは、
データベースのトランザクション処理における整合性を保証するための重要な概念であり、
複数のトランザクションを並行して実行する際に、
結果が何らかの直列（シリアル）な実行と同じになることを指します。
~~~

言いたいことは、「並列実行しても、直列実行しても、同じ結果が得られる」ということでしょう。

## 「直列可能性」という表現の違和感

### 前提の違い
ChatGPTの回答も、上記の私のまとめの一文もそうですが、一般的には以下のようにとらえるのが普通だと思います。
1. 直列実行が前提
1. そのうえで、並列実行しても、直列実行した時と結果が同じ

にもかかわらず、この「直列可能性」という表現は以下のような視点で作られています。
1. 並列実行が前提
1. そのうえで、直列実行しても、並列実行した時と結果が同じ

#### なぜ並列実行が前提なのか？

本質的には、 **並列処理のことを考えた時に初めて「直列実行した時と結果が同じ」かどうかを考える必要があるから** だと思います。

言い換えれば、比較対象が「直列実行か、並列実行か」ではなく、「（並列実行時に）直列実行した時と同じになるか、同じにならないか」というイメージでしょうか。

### 和訳の問題
「Serializability」
という単語をかなり安直に訳してしまっています。

英語で見れば、まだ **「ability」=「できること、能力」** というところから、 **「直列実行することもできる」** という意味が捉えやすいです。

しかし、この **「ability」を「可能性」と訳してしまったことで、「possibilities」と誤認しやすく** 、意味が分かりにくくなっていると思います。

日本語で言い換えれば、 **「可能性」=「物事が実現できる見込み」であって、誰も「可能(である)性(質)」とは読みません。**

## 「直列等価性」とすべき

これであれば、端的に「直列実行した時と結果が同じ」を表せますよね…。
「Serializability」なんてシステム用語でしか使わないでしょうし、流行らないかな…。
Gitの基礎、よく使うコマンド集

# ▼Git用語
### ・ローカルリポジトリ: 個々の開発者が作業する場所
場所：自端末のコンピューター上に存在
目的：個々の開発者が自分の作業を行うためのリポジトリです。

### ・リモートリポジトリ: チーム全体で共有する場所
場所：インターネット上またはネットワーク上に存在
目的：複数の開発者が共同で作業するための中央のリポジトリ。プロジェクトの共有とバックアップの役割も果たします。

### ・ブランチ
リポジトリ内の変更履歴の独立した流れを表します。
各ブランチは他のブランチから独立して作業を進めることができます。

### ・デフォルブランチ
mainまたはmasterと呼ばれるブランチのブランチです。
プロジェクトの安定したバージョンがここに保存されます。
開発者は新しい機能や修正を他のブランチで作業し、テストが完了したらmain/masterブランチにマージします。

### ・ステージング
次のコミットに含める変更を一時的に保存する領域

### ・コミット
ローカルリポジトリに変更を保存する。ステージングに追加された変更の保存。
スナップショットが作成されて履歴として記録される

### ・プッシュ
ローカルリポジトリの変更をリモートリポジトリに送信する

# ●よく使用するコマンド
## ①ローカルリポジトリの変更をmainブランチにコミットしたい場合
#### ・変更をステージングエリアに追加
```php
$ git add .
```
これにより、すべての変更がステージングに追加されます。特定のファイルだけを追加したい場合は、ファイル名を指定します。

#### ・変更をコミット
```php
$ git commit -m "コミットメッセージ"
```
ここで、"コミットメッセージ" を変更内容の説明に置き換えます。
ステージングの内容をコミットします

#### ・リモートリポジトリにプッシュ
```php
$ git push origin main(ブランチ名)
```
これにより、ローカルの main ブランチの変更がリモートリポジトリの main ブランチにプッシュされます。

## ➁リモートリポジトリから最新の変更を取得し、ローカルリポジトリに反映させたい場合
```php
git pull origin ブランチ名
```
origin: リモートリポジトリの名前（通常は origin と呼ばれます）。
ブランチ名: プルしたいリモートブランチの名前（例: main）。

### ※注意：
ローカルが変更されている場合、プルできなくエラーになるので、下記どれかの番号手順実施すること
・①：変更内容を先にコミットする
・③：変更内容を一時保存してから最新にする
・④：変更内容が不要であれば上書きする

## ③スタッシュ(一時保存)して、ローカルリポジトリを最新にしたい場合
※変更した内容を消さずにローカルを最新にしたい時使う

#### ・変更をスタッシュする
```php
$ git stash
```
これにより、現在の変更がスタッシュに一時保存され、作業ディレクトリが最新の状態に戻ります。

#### ・スタッシュを適用する
```php
$ git stash pop
```
スタッシュに保存された変更部分のみが再び作業ディレクトリに適用されます。

#### ・スタッシュの一覧を表示する
```php
$ git stash list
```

## ④ローカルリポジトリの変更は不要なので、上書きしてプル(最新化)したい場合
```php
$ git fetch origin
```
リモートリポジトリ origin から最新のコミット情報やブランチ情報をローカルリポジトリにダウンロードします。
```php
$ git reset --hard origin/<ブランチ名>

▼例
$ git reset --hard origin/main
```
__git reset --hard:__
[1].現在のブランチの HEAD を指定したコミットに移動。
※HEAD は間接的にローカルの最新のコミットを指す

[2].インデックスの内容を HEAD が指すコミットの状態に完全に一致させる。
※インデックス＝ステージング

[3].ワークツリーの内容をインデックスの状態に完全に一致させます。
__⇒ワークツリー内の未コミットの変更はすべて破棄__

__origin/main：__ 明示的にブランチ名を指定する。リモートリポジトリ(origin)のmainブランチの最新の状態を、あなたのローカルリポジトリが最後に認識した時点の情報として保持。
【Figma】WindowsローカルにインストールしたフォントやAdobe/Morisawaフォントが表示されない

Windowsデバイスにてローカルにインストールしたフォントやサードパーティフォントインストーラー（Adobe Fonts や Morisawa Fonts）にてフォントをインストールしても、Figmaアプリにて表示されない、使用できない事象があります。

いくつかの対処法を紹介します。

## （Figmaブラウザアプリ使用の場合）FigmaAgentが起動されているかを確認
Figmaブラウザ版アプリを使用してローカルのフォントを使用したい場合、FigmaAgent（別名 Figma font helper）がインストールされ、起動されている必要があります。
FigmaAgentは公式ページからインストールすることができます。
https://www.figma.com/downloads/

Task ManagerにてFigmaAgentが起動しているかを確認してください。

## （サードパーティフォントインストーラーの場合）フォントのアクティベート
こちらの[Adobe記事](https://helpx.adobe.com/jp/fonts/kb/add-fonts-desktop.html)を参考にし、フォントがアクティベートされているかを確認してください。
1. Adobe Creative Cloudを起動し、ログイン
2. 上部メニューより「フォント」>>「すべてのフォントを見る」を選択
3. Adobe Fontsのページが表示されたら、リストから「使用したいフォント」の「アクティベート」のスイッチをクリックして「オン」に変更
4. 完了通知が表示されたら「OK」をクリック
5. Adobe Creative Cloudを再起動


こちらの[Morisawa記事](https://www.morisawa.co.jp/about/news/8833)を参考にし、フォントがアクティベートされているかを確認してください。

## フォントを全てのユーザーに対してインストールする
フォントファイルがローカルにインストールされている場合、次の手順ですべてのユーザーにインストールすることができます。

1. .TTF か .OTFフォントファイルをローカルにインストールする
2. インストールしたフォントファイルを右クリックして、「すべてのユーザーに対してインストール」を選択

## フォントキャッシュを削除する
1. Windowsマークを右クリックして「ファイル名を指定して実行」を開く
2. `services.msc`と入力し「OK」をクリック
3. サービス一覧から「Windows Fonts Cache Service」を右クリックし、「停止」を選択
4. Windowsマークを右クリックし、「ファイル名を指定して実行」を開き、`%windir%\system32\`と入力し「OK」をクリック
5. 「FNTCACHE.DAT」ファイルを右クリックし、「削除」を選択
6. Windowsマークを右クリックし、「エクスプローラー」を起動し`C:\Windows\ServiceProfiles\LocalService\AppData\Local\FontCache`にアクセス
7. 「FontCache」内の全てのファイルを選択し、削除
8. サービス一覧より「Windows Fonts Cache Service」を右クリックし、「開始」を選択
Fabric Copilot Capacity とは

2025/01/22 に Fabric Copilot Capacity が発表されました。

[Introducing Fabric Copilot capacity: Democratizing AI usage in Microsoft Fabric](https://blog.fabric.microsoft.com/ja-jp/blog/17673#)

## ポイント
**新しい SKU が発表されたわけではなく**、既存の Premium/Fabric 容量に対して、**Copilot (と AI スキル 改め データ エージェント) に関する新しい設定ができた**ということです。~~残念ながら、F64 より小さい Fabric 容量だけで Copilot が利用できるわけではありません。~~

::: note
[F64 より小さい Fabric 容量でも Copilot が使用できるようになることが発表されました！](https://blog.fabric.microsoft.com/ja-jp/blog/copilot-and-ai-capabilities-now-accessible-to-all-paid-skus-in-microsoft-fabric?ft=All)「Copilot を試してみたい！」のハードルが大幅に下がっています！
:::

今回発表された Fabric Copilot Capacity 略して FCC は、**ワークスペースを Premium 容量に割り当てずとも、組織全体あるいは特定のユーザー/グループに対して、Copilot (とデータ エージェント) の利用を可能にします**。

#### AI スキル 改め「データ エージェント」とは
Microsoft Fabric の「データ エージェント」を使用すると、チームは、組織が OneLake に保存したデータについて、英語の質問を含む会話を行い、関連する回答を受け取ることができます。 これにより、AI に関する技術的な専門知識を持たない人や、データ構造を深く理解していないユーザーでも、正確でコンテキストに富んだ回答を受け取ることができます。

https://learn.microsoft.com/ja-jp/fabric/data-science/concept-ai-skill

## FCC登場の背景とメリット
今まで、Power BI を含む Fabric の Copilot 機能を使うためには、Premium 容量に Copilot を使用したいワークスペースを割り当てる必要がありました。**FCC の利用を許可されたユーザーは、ワークスペースが Premium 容量に割り当てているかどうかに関わらず Copilot の利用が可能になります。** 個人的には、Microsoft 365 E5 で Power BI を利用している組織に、Copilot 用の容量を提供できるおすすめの機能だと思います。

さらに、本番利用している Fabric/Premium 容量とは別の容量を FCC に指定することにより、CU消費の予測が難しい Copilot の利用によって**本番環境に影響することを回避**するよう設定できます。

なお、FCC の設定をした容量は **Copilot 専用になるのではなく**、従来通り、すべての Fabric ワークロードを利用できます。

::: note
当初は Pro ワークスペースと F64 より小さい Fabric 容量に割り当てられているワークスペースでの Copilot の利用に限られていましたが、Premium per User のワークスペースも対象となりました。**埋め込み用のライセンス モードのワークスペースでは利用できません。**
:::

## 設定方法
FCC はたったの2ステップで設定できます。
	
1. まずは **FCC の設定をできるユーザー**を指定します。
テナント設定で「容量は Fabric Copilot 容量として指定できます」を開き、有効化します。適用先は [特定のセキュリティ グループ] にして、Fabric 管理者や容量管理者が含まれるセキュリティ グループを指定するのが良いかと思います。
![FCC_tenantsetting.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/089b595e-9d2e-ab5e-aaa5-ac5d330f4e47.png)

1. 次に、上記で有効化されたユーザーがPremium 容量の設定で、FCC として**その容量を利用できるユーザー**を指定します。
FCC に指定する **Fabric 容量が起動している状態で**、[容量の設定] → [目的の容量] を選択し、「Copilot 容量」を開いて有効化し適用先を指定します。
慎重に進めるなら、Copilot ユーザーを登録するセキュリティ グループを作成して、それを指定するのがおすすめですが、Fabric (Power BI) のユーザーに**広く展開するのであれば、組織全体を選択**します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668909/8c895232-fc5d-7da2-8734-0f20fa4892f7.png)

:::note warn
「組織全体」が選択できない場合があるようです。
:::

Copilot の利用は、テナント設定での許可とワークスペースが Premium 容量に割り当てられていることが必要でしたが、後者に新たな選択肢が加わり、ハードルが下がりました。ぜひお試しください。
[Linux][system][command] ファイルシステム作成_ext4, XFS, Btrfs, vfat, exFAT, mkfs, mke2fs, mkswap

# ファイルシステムの説明
| ファイルシステム | 特徴 |
|:--|:--|
| **ext2** | - `mkfs`, `mke2fs`のデフォルト |
| **ext3** | - ext2の後継<br>- ジャーナリング |
| **ext4** | - ext3の後継<br>- ジャーナリング |
| **JFS** | - ジャーナリング<br>- 動的inode (inode数に制限なし) |
| **XFS** | - ジャーナリング<br>- 動的inode (inode数に制限なし)<br>- 並列処理<br>- スナップショット |
| **Btrfs** | - スナップショット<br>- データ圧縮<br>- マルチデバイス<br>- サブボリューム |
| **vfat** | - 容量:4GB |
| **exFAT** | - 容量:16EiB<br>- フラッシュドライブ向けのファイルシステム |

# mkfsコマンド
~~~terminal
$ mkfs [オプション] デバイス名
~~~

| オプション | 由来 | 説明 |
|:--|:--|:--|
| default | make filesystem | - 指定したデバイスにファイルシステムを作成する<br>- `-t`を指定しなければ`ext2`のファイルシステムが作成される |
| `-t` | type | - ファイルシステムの種類を指定する<br>（例：`mkfs -t ext4 /dev/sdX1`） |
| `-c` | check | - 不良ブロックをスキャンしてからフォーマットする |

# mke2fs コマンド
~~~terminal
$ mke2fs [オプション] デバイス名
~~~

| オプション | 由来 | 説明 |
|:--|:--|:--|
| default | make ext2 filesystem | - 指定したデバイスに`ext2`ファイルシステムを作成する（`-t`オプションで`ext3`や`ext4`も作成可能） |
| `-t` | type | - 作成するファイルシステムの種類を指定<br>（例：`mke2fs -t ext4 /dev/sdX1`） |
| `-c` | check | - 不良ブロックをスキャンしてからフォーマットする |
| `-j` | journal | - `ext3`ファイルシステムを作成する（`ext2`から`ext3`へ変換） |

# Ping-t
- [3209_XFS, JFS_動的inode](https://mondai.ping-t.com/question_subjects/31/question_sessions/32527688/progressing_questions/498427204)
- [3210_ext2, ext3, ext4_ジャーナリング]()
- [3212_mkfs, mke2fs](https://mondai.ping-t.com/question_subjects/31/question_sessions/30892897/progressing_questions/473298369)
- [3213_mkfs -t, mke2fs -t, mke2fs -j](https://mondai.ping-t.com/question_subjects/31/question_sessions/32631050/progressing_questions/499948709)
- [3215_mkswap](https://mondai.ping-t.com/question_subjects/31/question_sessions/30553580/progressing_questions/468115708)
- [3228_mkfs.xfs](https://mondai.ping-t.com/question_subjects/31/question_sessions/30553580/progressing_questions/468115707)
- [3306_swapon](https://mondai.ping-t.com/question_subjects/31/question_sessions/30870646/progressing_questions/472924561)
- [3323_Btrfs](https://mondai.ping-t.com/question_subjects/31/question_sessions/30552498/progressing_questions/468099720)
- [3334_mkfs](https://mondai.ping-t.com/question_subjects/31/question_sessions/30892897/progressing_questions/473298367)
- [3341_ext2-4, XFS](https://mondai.ping-t.com/question_subjects/31/question_sessions/30870646/progressing_questions/472924560)
- [3371_Btrfs](https://mondai.ping-t.com/question_subjects/31/question_sessions/31551465/progressing_questions/483453576)
- [3372_exFAT](https://mondai.ping-t.com/question_subjects/31/question_sessions/30892897/progressing_questions/473298366)
対象フォルダ内すべてのExcelファイルに対してOfficeスクリプトを一括実行する方法

## はじめに
業務で大量のExcelファイルに共通の処理を一括実行する際、従来はVBAが一般的でしたが、現在ではOfficeスクリプトとPower Automateの組み合わせが効果的です。しかし、SharePoint上のファイルに対してこの方法を適用しようとしたところ、適切なアクションが見つからず、うまく動作しませんでした。しかし、OneDrive上で同様の手順を試したところ、問題なく実行できたので、その事象共有のために記事化しました。

## 参考記事
基本的な手順については、以下のMicrosoft公式ドキュメントをご覧ください。

https://learn.microsoft.com/ja-jp/office/dev/scripts/resources/samples/automate-tasks-on-all-excel-files-in-folder?utm_source=chatgpt.com

## SharePoint上での実行について
上記の、MicrosoftのドキュメントではSharePointでも同様の手順が使用できると記載されていますが、実際には適切なアクションが見つかりませんでした。また、ネット上で紹介されている他の方法を試しても上手く動作しませんでした。そのため、確実に実行するためにはOneDrive上での実行を検討することをお勧めします。
Request for Broposal アップデート: コミュニティ [Berachain翻訳]


![](https://blog.berachain.com/_next/image?url=https%3A%2F%2Fberachain.ghost.io%2Fcontent%2Fimages%2F2025%2F01%2F2.png&w=1920&q=75)

:::note info
本記事は下記の翻訳となります。
[『Request for Broposal Update: Community』](https://blog.berachain.com/blog/request-for-broposal-update-community)
:::

## Request for Broposal アップデート: コミュニティ

Berachain は、ホワイトペーパーや技術的なロードマップとしてスタートしたわけではありません。それは単なるミームとして始まりました。友人たちの間で共有されていたクマの JPEG 画像のコレクションが、より大きな何かを信じる情熱的なコミュニティへと成長しました：クマをシンボルとしたブロックチェーンです。

Request for Broposal: Community（RFC）プログラムは、このような有機的でコミュニティ主導の成長の精神から生まれました。このプログラムは、Berachain エコシステムに意味のある貢献をした社会的、教育的、そしてコミュニティ重視のグループや個人に BERA トークンを配分します。RFC は、教育リソースを作成し、社会的な関わりを育み、Berachain の核となるミッションの認知度を高めることを支援する人々をサポートすることを目的としています。そのミッションとは、ユーザー、ビルダー、バリデーターが共に繁栄するアプリケーション重視の Proof of Liquidity（PoL）を動力とするブロックチェーンの構築です。

「ビルダー」という言葉は通常、技術やプロダクトを指しますが、人々のつながり、文化、知識を育むビルダーも同様に重要です。RFC プログラムは、教育、エンゲージメント、共有による成長を通じてエコシステムを強化する、これらのコントリビューター —コミュニティを形作るビルダー— をサポートする Berachain のコミットメントを表しています。

### **資格要件と配分基準の要約：**

RFC の応募は、以下の条件を満たす社会的、教育的、またはコミュニティ重視のグループに開かれていました：

- イベントの開催、教育コンテンツの作成、ソーシャルの成長支援など、これまでに Berachain エコシステムへの意味のある貢献を示していること
- Berachain 自体（エコシステムプロジェクトではなく）を中心とした長期的な教育、コミュニティ構築、ポジティブなエンゲージメントを育むための明確な継続的貢献計画を示していること

すでにコレクションをミントしている NFT プロジェクトは RFC 配分から除外され、別途扱われます。

正確な配分については、ローンチ時に公開されます。詳細については、[Request for Community (RFC)](https://rfb.berachain.com/rfc)をご覧ください。

### **選定されたアプリケーション**

慎重な審査の結果、Berachain の長期的なコミュニティ目標との戦略的な整合性に基づいて、以下のプロトコルが RFC 配分の承認を受けたことを誇りをもってお知らせします：

[承認されたプロジェクトのリスト - 原文のリストを維持]

_注：最終的な RFC 選考において、別途扱われる NFT コレクションの見落としがあったため、更新が行われました。Lasalien の指摘に感謝いたします。_

---

:::note info
【Sunrise とは】
Sunrise は Proof of Liquidity(PoL)と Fee Abstraction（手数料抽象化）を備えたデータ可用性レイヤーです。 私たちは DA の体験を再構築し、多様なエコシステムからのモジュラー型流動性を活用してロールアップを立ち上げています。

- [Sunrise - Specialized DA Layer for Proof of Liquidity](https://sunriselayer.io/)
- [Sunrise / Gluon Docs](https://docs.sunriselayer.io/)

【Social Links】

- [X(旧 Twitter)[英語])](https://twitter.com/SunriseLayer)
- [X(旧 Twitter)[日本語])](https://twitter.com/SunriseLayer)
- [Discord Community](https://discord.com/invite/sunrise)
- [Medium](https://sunriselayer.medium.com/)
- [Github](https://github.com/sunriselayer)
- [Linkedin](https://www.linkedin.com/company/sunriselayer)

【お問合せ】
Sunrise へのお問い合わせはこちらから 👉 [Google Form](https://forms.gle/h8RVahxRtXUvYwnv6)

![1080x360.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3839047/8971d83b-3331-4757-dc72-320d28618735.jpeg)

:::
ドメイン参加済みサーバに対して、ローカルユーザーRDPメモ

メインに参加したサーバーに対して、ローカルユーザーアカウントでリモートデスクトップ（RDP）接続を行う際、ユーザー名の指定方法に注意が必要です。に、ドメイン環境では同じユーザー名がドメインユーザーとローカルユーザーの両方に存在する可能性があるため、適切に区別することが重要です。
**ユーザー名の指定方法：**

- **ローカルユーザーの場合：** ーザー名の前にサーバーのホスト名またはIPアドレスを指定し、バックスラッシュ（\）で区切ります。えば、サーバーのホスト名が`ServerName`で、ローカルユーザー名が`LocalUser`の場合、ユーザー名を`ServerName\LocalUser`と指定します。れにより、サーバーはドメインユーザーではなく、ローカルユーザーとしての認証を試みます。
- **ドメインユーザーの場合：** 常、ユーザー名のみ、または`ドメイン名\ユーザー名`の形式で指定します。えば、`DomainName\UserName`のように入力します。
のように、ローカルユーザーでRDP接続を行う際には、ユーザー名の前にサーバーのホスト名を指定することで、ドメインユーザーとの混同を避け、適切なアカウントでの接続が可能となります。
た、リモートデスクトップ接続を許可するためには、対象のローカルユーザーをサーバーの「Remote Desktop Users」グループに追加する必要があります。れにより、指定したユーザーがリモート接続の権限を持つことになります。citeturn0search3
らに、ネットワークレベル認証（NLA）が有効になっている場合、接続元のクライアントは事前に資格情報を提供し、サーバー側での認証が行われます。の際、適切なユーザー名の形式で資格情報を入力することが重要です。citeturn0search1
上の設定を適切に行うことで、ドメインに参加したサーバーへのローカルユーザーでのRDP接続が可能となります。
【前編】AWSをゼロから作ってPlatform Engineering活動を始めるまで

こんにちは、博報堂テクノロジーズ・インフラ開発一部の近藤です。
とある内製案件で、AWS環境をゼロから作りPlatform Engineering活動を推進するに至っており、これまでの変遷をまとめます。
# 伝えたいこと
**Platform Engineeringは目的ではなく、あくまで手段であるべきだと考えます。**
私個人の考えですが、インフラはそれ自体が価値を生み出すものではなく、アプリケーションあってのものです。このため、必要なタイミングで状況に合った最適な構成を提供すべきだと考えています。
例えば、単に「検証使途でJavaのWebアプリを動かしたい」という場合、ALB+EC2程度を手動構築し素早く提供することが適切だと考えています。これを「Platform Engineeringを意識してIaC化し、CICDで自動化するんだ」という思想は、過剰だと考えています。

つまり、**Platform Engineeringは目的ではなく手段として捉えるべき**で、状況に応じてQCD（品質・コスト・納期）の最適解を見出していく活動が重要だと考えています。ただ、**この「状況に応じて」は、現時点だけでなく少し先の将来を見据えることが肝要**と考えます。

以降、それぞれの状況でどのような選択肢を取ったか、理由も含めて紹介していきます。

# スモールスタート(N月)
## ビジネス側の状況
新規に発足した部門のアプリケーションチームにて、担当者のローカル環境で開発済のWebアプリケーションをAWSで稼働させたい、というニーズがありました。

## インフラの対応
新規発足の部門ということもあり、まずは**動く環境を素早く提供すべきと判断し、簡素なAWS構成にする方針**としました。具体的には、AWSアカウントはスタンドアロンで構成、ワークロードはALB+EC2の構成です。また、この環境は一時的な環境と考えたためIaC化までは実施せず、手組で構成しました。

環境イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672465/32ab51e9-249d-1df4-eba9-840e5977d301.png)

## 期間

1週間ほどの短期間で提供しています。枯れた技術でもあったため、構築コストも最小限に抑え対応しています。

## こうすべきだったコト

ここでは特にありませんでした。

# チーム拡大による使途の広がり(N+2か月)

## ビジネス側の状況

アプリケーションチームの拡大に伴い、アプリ開発のパイプラインが増加している状況になりました。また、使途もPoCやR&D、開発環境など微妙に使途が異なる状況でした。

## インフラの対応
現在の1アカウント構成から発展させ、使途に応じたアカウント構成にすべきと考えました。
ただ、現在はAWSアカウントをスタンドアロンで構成していることから、AWSアカウント数だけIAMリソースを作成する必要がありました。
1,2アカウントのレベルあれば管理コストの観点から問題にならないと考えてましたが、**チーム拡大の状況を考慮し今後もアカウント数が増加する可能性を踏まえ、構成変更するタイミングだ**と考えました。

ネックな点は、IAMログイン方式であり、スイッチロールかIdentity Centerのどちらかで解消できると考えました。当環境では以下理由により、Identity Centerを選択しています。
- Identity Centerの方が直感的に操作しやすい
- 権限設定はそこまで複雑ではない

Identity Centerは制約が少ない組織インスタンス(=Organizationsを利用)で立てました。なお、この時点では、利用者もそこまで多くなかったことから提供スピードを優先し組織レベルでの各種統制は未実施としました。

環境イメージ図

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3672465/2fb6f697-b1d0-d3b8-ba37-44316d2d4569.png)

## 期間

2週間ほどで提供しています。

## こうすべきだったコト

ここでは特にありませんでした。

# プロダクション利用の開始(N+6か月)

## ビジネス側の状況

PoCやR&D、開発使途から一歩踏み出し、プロダクション提供が始まりそうとの状況になりました。

## インフラの対応

この状況より、**アカウントレベルでの統制から、組織レベルでの統制へ昇格する必要があると考えました**。
数アカウント規模で落ち着けば、現在のアカウント毎にオーダーメイドな状況を続ける方がコストパフォーマンスは良いと考えましたが、環境の特性から「アプリ数×提供社数×環境数＝AWSアカウント数」という状況なため、**アカウント数が爆増する可能性を考慮し、先を見越してマルチアカウント戦略を検討**しました。

## 期間

1か月少しで設計～実装、運用開始まで実施しました。

## 補足

組織レベルの統制で悩んだ事とどう対応したかを記載します。

### ユーザ管理の見直し
プロダクション利用開始に伴い、Organizations配下に開発環境(PoC,R&D使途含)と本番環境が同居するため、**事故防止を目的に、開発用と本番用でアクセスを分離すべきと考えました**。具体的には1人の利用者に対し、開発・本番それぞれユーザを払い出す方式としました。
なお、Identity Centerではメールアドレスのユニーク制約があるため、メールアドレスのエイリアスを利用することで対応しました。

### 柔軟性とセキュリティのバランス
プロダクション利用のため、SCPによる制限を検討しました。
既に環境利用が始まっていたことから、**セキュリティリスクと利便性のバランスを考慮したSCPポリシーを検討・設定**しました。具体的には以下を設定しています。
- 利用リージョンの限定
- IAMユーザの作成禁止

ここは案件・環境に依存するため、最適解をチーム内で模索するのが良いと考えています。もし、0ベースから検討・実装する場合は、厳しめのポリシーから緩和していく方が、開発者体験を損なわないと考えています。

### マネージドとカスタマイズのバランス
マルチアカウントの構成では、Control Towerの利用も一案でしたが、以下理由により素のOrganizationsを利用しています。
- Control Towerに合わせた構成とする必要があること
- Control Tower自体は無料なものの派生するサービスで一定の利用料がかかること

今の環境は出来て間もないことやAWS有識者が多数在籍していたこともあり、比較的柔軟に環境をコントロールできることに重きを置きました。

## こうすべきだったコト
後編ではIaC化の話を記載していますが、プロダクション利用開始後に、IaCでのリソースインポートを行うのは神経を使います。IaCの実装を誤ると予期せず環境破壊を行ってしまう可能性があるためです。
この時点で、多少時間をかけてでも、IaC化しておくべきだったと反省しています。

続きは後半でご紹介します！
Oracleで途中にカラムを追加するのに仮テーブルがいらない方法！

Oracle 12c から カラムの要素に **visible** / **invisible** が追加されたらしい。

<table>
  <tr>
    <td> invisible </td> <td>テーブル上には存在するけど見えない<br>（けど、SQLで直接カラム指定すれば取得できる）</td>
  </tr>
  <tr>
    <td> visible </td> <td>invisibleから変更すると見えるようになる<br>（けど、カラムの順番は最後になる）</td>
  </tr>
</table>

これらの特徴を使うと・・・
こんなテーブルがあったとして、
|| col_a | col_b | col_e | col_d |
|:-:|:-:|:-:|:-:|:-:|
||||||


1．追加したい順番にあるカラム以降を一旦 invisible に変更
```SQL:Oracle
alter table TABLEA modify (
     col_e invisible
    ,col_d invisible
);
```

2．新しいカラムを追加
```SQL:Oracle
alter table TABLEA add ( col_c VARCHAR2(10) );
```

3．invisible にしたカラム を **変えたい順番**で visible に変更
```SQL:Oracle
alter table TABLEA modify (
     col_d visible
    ,col_e visible
);
```

のようにすれば、データの移行も不要なので、
従来の別名テーブルを用意しデータを退避したり、大量データのinsertが必要なくなるってことだ！
(∩´∀｀)∩わーい♪
- - -
【参考URL】
- [Oralce テーブルのカラムの順番を入れ替える](https://www.ishikawasekkei.com/index.php/2022/03/18/oracle-change-column-definition-order-in-table/)
【MySQL】照合順序（Collation）を確認する

## データベース
```sql
mysql> show create database database_name;
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| Database      | Create Database                                                                                                                         |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+
| database_name | CREATE DATABASE `database_name` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci */ /*!80016 DEFAULT ENCRYPTION='N' */ |
+---------------+-----------------------------------------------------------------------------------------------------------------------------------------+
```

## テーブル毎
```sql
mysql> SELECT TABLE_NAME,TABLE_COLLATION FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="database_name";
+--------------------------------+--------------------+
| TABLE_NAME                     | TABLE_COLLATION    |
+--------------------------------+--------------------+
| table_name                     | utf8mb4_general_ci |
・・・
```
Windows + CodeIgniter 4 で「Hello World」

この記事では、Windows環境にCodeIgniter 4をインストールし、基本的な「Hello World」ページを表示するまでの手順を解説します。  
主にコマンドラインでの操作を行います。

## 1. 前提条件

- **PHPのインストール**  
  PHP 7.3以上が必要です。  
  未インストールの場合は、[PHPの公式サイト](https://www.php.net/downloads) からダウンロードしてインストールしてください。

- **Composerのインストール**  
  ComposerはPHPのパッケージ管理ツールです。  
  未インストールの場合は、[Composerの公式サイト](https://getcomposer.org/download/) からダウンロードしてインストールしてください。

## 2. CodeIgniter 4のインストール

1. **コマンドプロンプトを開く**  
   `Win + R`キーを押し、「cmd」と入力してEnterキーを押します。

2. **プロジェクト用ディレクトリの作成**  

```
   mkdir C:\path\to\your\project
   cd C:\path\to\your\project
```

3. **CodeIgniter 4のインストール**  

```sh
   composer create-project codeigniter4/appstarter ci4app
```

   このコマンドにより、`ci4app` というディレクトリが作成され、その中にCodeIgniter 4のファイルが配置されます。

※実行後に `Failed to download codeigniter4/appstarter from dist: The zip extension and unzip/7z commands are both missing, skipping.` といった出力が表示された場合は、`php.iniファイルを編集し、extension=zipの行のコメントを外してPHPのzip拡張モジュールを有効にして、再度実行` してみてください。

## 3. 開発サーバーの起動

1. **プロジェクトディレクトリに移動**  

```sh
   cd ci4app
```

2. **開発サーバーの起動**  

```sh
   php spark serve
```

   サーバーが正常に起動すると、以下のようなメッセージが表示されます：

```sh
CodeIgniter v4.x.x Command Line Tool - Server Time: YYYY-MM-DD HH:MM:SS UTC+00:00

CodeIgniter development server started on http://localhost:8080 Press Control-C to stop.
```


3. **ブラウザで確認**  
ブラウザを開き、`http://localhost:8080` にアクセスします。  
CodeIgniterのデフォルトのウェルカムページが表示されれば、セットアップは成功です。

## 4. 「Hello World」ページの作成

1. **コントローラの作成**  
`app/Controllers` ディレクトリに、新しいコントローラファイルを作成します。

```sh
notepad app\Controllers\Hello.php
```

以下のコードを入力して保存します：

```php
<?php

namespace App\Controllers;

class Hello extends BaseController
{
    public function index()
    {
        return 'Hello World!';
    }
}
```

2. **ルートの設定**  
`app/Config/Routes.php` ファイルを編集し、新しいルートを追加します。

```sh
notepad app\Config\Routes.php
```

以下の行を追加します：

```php
$routes->get('/hello', 'Hello::index');
```

3. **ブラウザで確認**  
ブラウザで `http://localhost:8080/hello` にアクセスします。  
**「Hello World!」** と表示されれば成功です。

---

## 参考資料

- [CodeIgniter 4.1のインストール方法【2021年最新版】 - Zenn](https://zenn.dev/kenjis/articles/9a68c7fdbd5aaa)
- [How to Install CodeIgniter 4 on Windows 10/11 - YouTube](https://www.youtube.com/watch?v=GTE-rPU4lMQ)
JavaScriptで恒等関数を作る方法

## 定義1
```js
function sameValue(v){
    return v;
}
```

## 定義2
```js
const sameValue = (v) => v;
```

## 使用例
```js
const x = 100;
console.log(sameValue(x));
```

## 表示結果
```text
100
```
sftp.jsonでパスフレーズを毎回入力して認証する方法

vscodeのSFTPプラグイン、利用されてるかたも多いと思います。
わたしも先日使い始めましたが、秘密鍵のパスフレーズをそのまま記載するのはなんか気持ち悪い感じがして、毎回入力する方法を調べてみました。

Webで色々探してもなかなか出てこなかったんですが、公式のリポジトリ行ったら普通に書いてました。なんなんよ……笑

https://github.com/Natizyskunk/vscode-sftp/wiki/SFTP-only-Configuration
> passphrase
> mixed: For an encrypted private key, this is the passphrase string used to decrypt it. Set to true for enabling passphrase dialog. This will prevent from using cleartext passphrase in this config.

というわけで、`passphrase`の項目を`true`にすることで、毎回ダイアログが開いてログインすることができました。

```json:サンプル
{
  "name": "APP",
  "host": "999.999.999.999",
  "protocol": "sftp",
  "port": 22,
  "username": "apache",
  "passphrase": true,
  "privateKeyPath": "~/.ssh/xxxxxxxx",
  "remotePath": "/var/www/xxx/yyy/zzz",
  "uploadOnSave": false,
  "ignore": [
      ".vscode",
      ".git"
  ]
}
```
[fork元のSFTPプラグインのissue](https://github.com/liximomo/vscode-sftp/issues/346)に、`interactiveAuth`も`true`にするとか書いてましたが、これはどっちでもよさそうでした。あえて`false`設定してもパスフレーズのダイアログは開きました。
How to fix - Docker : https://registry-1.docker.io/v2/ timeout error

# Summary
How to Fix the timeout error below. Issue happened when rebuild docker project by `docker-compose up -d --build `.
```
#Error Messages
docker wsl2 ubuntu Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection
```
# Reason
Since the info. of nameserver(IP Address) has changed due to router renewal,etc on ubuntu wsl2,Docker can not access to the internet then got this timeout issues.

# Solution
1. Find correct Gateway IP Address on windows PC by `ipconfig`.
2. open ubunt wsl2 cli then change to new one by `vi /etc/reolv.conf`.

```
# nameserver below needs to change to new Default Gateway IP
nameserver 8.8.8.8
```
rex0220 データ生成プラグイン テーブル行から複数レコード生成

[データ生成プラグイン](https://qiita.com/rex0220/items/8e760adbfd69b9416b2d)で、テーブル行から複数レコードを生成する例です。

概要

テーブル行の数値項目の値分のレコード生成する例です。
数値T1の値分のレコードを生成します。

![2025-02-06_12h00_58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/10f75d75-7f12-ffee-26d4-7a00872c1afa.png)

# データ生成プラグイン設定

テーブル欄に対象テーブルを指定します。

![2025-02-06_12h04_15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/da3caaf5-84f7-f1a5-4789-e6e7bcdee44b.png)

- 設定項目
    - ループ配列：　生成するレコード数分の配列を指定
    数値を指定した場合は、数値がループ回数。ただし0 も [0] として1回ループ
    - 出力条件：　数値T1>0 
        - 1 以上のレコード生成のみ実行

![2025-02-06_12h04_30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/3d439907-2867-c11d-b9cb-72eedae03bae.png)