OmniAICreator/Qiita-1.07M huggingface dataset:
あなたのウェブサイトのためのビジュアルエディター – 無料 & オープンソース



あなたのウェブサイトにコンテンツがありますか？  
コードを触らずにビジュアルで編集できたらいいなと思ったことはありませんか？

![Screenshot 2025-03-19 at 2.23.14 pm.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3963127/be88b03d-7a8e-44bd-b098-608d272601e8.png)



**Intlayer Visual Editor** は、無料でオープンソースのツールで、ウェブアプリのコンテンツをビジュアルインターフェース上で直接編集できます。

## なぜ Intlayer Visual Editor なのか？

- **多言語対応** – 複数の言語でコンテンツを簡単に管理  
- **Markdown 対応** – 静的サイトや開発者に最適  
- **外部ファイルの編集** – .md、.txt などの形式をサポート  
- **オープンソース & 無料** – 必要に応じて修正や拡張が可能  

**試してみる:** [https://intlayer.org/playground](https://intlayer.org/playground)

**問題やアイデアがある場合:** [GitHub リポジトリ](https://github.com/aymericzip/intlayer)

## 仕組み

このビジュアルエディターは以下の2つの部分で構成されています：

1. **フロントエンドアプリケーション** – iframe 内にウェブサイトを読み込み、編集可能なコンテンツを検出  
2. **サーバーサイドプロセス** – 保存時にコンテンツ定義ファイル（現在は JSON 形式）を更新  

## インストール & セットアップ

Intlayer をプロジェクトに設定したら、**intlayer-editor** をインストールします：

```bash
npm install intlayer-editor --save-dev
```

次に、**intlayer.config.ts** を設定：

```typescript
const config = {
  editor: {
    applicationURL: "http://localhost:3000",
  },
};
export default config;
```

## エディターの使用方法

インストール後、エディターを起動：

```bash
npx intlayer-editor start
```

その後、ブラウザで [http://localhost:8000](http://localhost:8000) を開き、コンテンツにホバーして編集！ 🎨

## コミュニティに参加しよう！

このプロジェクトは **100% オープンソース** です！  
貢献したい、問題を報告したい、機能を提案したい方は：

**GitHub リポジトリ:** [https://github.com/aymericzip/intlayer](https://github.com/aymericzip/intlayer)

🎉 皆さんのフィードバックをお待ちしています！開発者にとって、コンテンツ編集をもっと簡単にしましょう！ 🚀
秀丸エディタをファイルを右クリックしたときのメニューに追加する

# 1. はじめに
* 秀丸エディタをファイルを右クリックしたときのメニューに追加したい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/e525c1e3-ca80-4f5f-9c3c-f1b12190d3f4.png)


# 2. 開発環境
* 秀丸エディタ
* Windows 11

# 3. 設定手順
## 3.1. その他 > 動作環境 を選択する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/11412da4-9c61-4452-abfd-de1a0ece095f.png)

## 3.2. 関連付け > スタートメニュー等への登録ボタンをクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c2a30ce3-6c8a-413a-8324-f19100da1ead.png)

## 3.3. コンテキストメニューの直下に「秀丸エディタで開く」を入れるにチェックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/181e1a44-81c2-4b81-9e91-ac2c16739379.png)


# 4. 参考文献

https://win.just4fun.biz/?%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E9%96%A2%E9%80%A3%E3%82%BD%E3%83%95%E3%83%88/%E5%8F%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%81%97%E3%81%9F%E3%81%A8%E3%81%8D%E3%81%AE%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC%E3%81%AB%E7%A7%80%E4%B8%B8%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95
統計検定1級　2021　統計応用(理工学)　問5　解説

![img20250318_13351982.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/73be99c7-292a-48dd-9edf-a60ef5c5c75e.jpeg)
![img20250318_13354740.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/0a8321e7-2569-4dca-81a1-6383ad2688c7.jpeg)
![img20250318_13361501.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/1febd639-3f89-44e8-b4a3-afeff94c2673.jpeg)
Linux入門：新しいサーバーで最初にやるべきsudo権限のチェック方法についてまとめてみた

## はじめに

Linux環境で`sudo`を使用できるかどうかを判定するには、いくつかの方法があります。

:::note info
**システム管理を行う際に、適切な権限を持っているかを確認することは重要です。**
:::

本記事では、`sudo`の権限を確認するための方法を詳しく解説します。

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

システム管理やサーバー運用の際に、`sudo`の権限がないことで作業が中断されることがあります。

:::note warn
***特に新しい環境や共有サーバーを利用する際、どのユーザーが`sudo`を実行できるのかを把握しておくことは重要です。***
:::

このような背景から、`sudo`の使用可否を確認する方法をまとめました。

## sudo権限を管理するファイル

`sudo`の使用可否は、以下のファイルで管理されています。

### 1. `/etc/sudoers`
`sudo`の権限を定義するメインの設定ファイルです。このファイルを直接編集するのは危険なため、編集する場合は必ず`visudo`コマンドを使用する必要があります。

#### **設定の確認方法**
以下のコマンドを実行すると、`sudo`の設定内容を確認できます。
```sh
sudo cat /etc/sudoers
```

### 2. `/etc/sudoers.d/` ディレクトリ
`sudoers`設定を細かく管理するためのディレクトリです。この中にあるファイルも`sudoers`の設定に影響を与えます。

ディレクトリ内の設定を確認するには、以下のコマンドを実行します。
```sh
ls -l /etc/sudoers.d/
```

## 自分が`sudo`を使用できるか確認する方法

### 1. `sudo -l` コマンドで確認
`sudo`を使用できるかどうかを確認するには、以下のコマンドを実行します。
```sh
sudo -l
```
このコマンドを実行すると、自分が実行できる`sudo`コマンドの一覧が表示されます。

**実際のターミナル画面**

![Screenshot 2025-03-20 at 7.44.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/460e3a83-ba7d-4e91-b270-0a71425a8df4.png)

### 2. `sudo`グループの確認
`sudo`を使用できるユーザーは、`sudo`または`wheel`グループに属していることが多いです。

以下のコマンドで、自分がどのグループに所属しているか確認できます。
```sh
groups
```
`sudo`または`wheel`が表示されていれば、`sudo`権限を持っている可能性が高いです。

**実際のターミナル画面**

![Screenshot 2025-03-20 at 7.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/1c420f36-70c5-49c0-9ddd-ad9c1426c25e.png)

また、`sudo`を実行できるグループを確認するには、以下のコマンドを実行します。
```sh
grep -E '^%?wheel|^%?sudo' /etc/sudoers /etc/sudoers.d/* 2>/dev/null
```

### 3. パスワードなしで`sudo`を実行できるか確認

`sudo`を使用する際にパスワード入力が必要かどうかを確認するには、以下のコマンドを実行します。
```sh
sudo -l | grep NOPASSWD
```
この出力に`NOPASSWD`が含まれている場合は、パスワードなしで`sudo`を実行できます。

## まとめ

- `sudo`の設定は`/etc/sudoers`や`/etc/sudoers.d/`に保存されている。
- `sudo -l`コマンドで、自分が`sudo`を使えるか確認できる。
- `groups`コマンドで、自分が`sudo`グループに属しているかを調べられる。
- `NOPASSWD`の設定を確認すると、パスワードなしで`sudo`を実行できるかが分かる。

これらの方法を活用すれば、自分の`sudo`権限を簡単に確認できますので、試してみてください
Visual  Studio Codeでインデントを見やすくする

# 1. はじめに
* Visual Studio Codeでインデントを見やすくしたい
* 拡張機能の ```indent-rainbow``` を利用せず行いたい

# 2. 開発環境
* Visual Studio Code
* Windows 11

# 3. 設定手順
## 3.1. v基本設定: ユーザー設定を開く (JSON) を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/5decc5c6-18a4-4172-a720-33b7969dc32a.png)

## 3.2. ```workbench.colorCustomizations``` を追加する
```JSON:
    "workbench.colorCustomizations": {
        "editorIndentGuide.background1": "#b22222",
        "editorIndentGuide.background2": "#ff4500",
        "editorIndentGuide.background3": "#ffd700",
        "editorIndentGuide.background4": "#228b22",
        "editorIndentGuide.background5": "#000080",
        "editorIndentGuide.background6": "#8b008b",
        "editorIndentGuide.activeBackground1": "#fff",
        "editorIndentGuide.activeBackground2": "#fff",
        "editorIndentGuide.activeBackground3": "#fff",
        "editorIndentGuide.activeBackground4": "#fff",
        "editorIndentGuide.activeBackground5": "#fff",
        "editorIndentGuide.activeBackground6": "#fff",
        "editorWhitespace.foreground": "#393A3D"
    },
```

# 4. 設定後
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2852081/c98e70f3-6550-47de-9a58-0ce4e3b8706b.png)

# 5. 参考文献

https://qiita.com/htcd/items/21266f6472ac2c39933e
【メモ】 shell/bashに関するメモ


2025/03/20 
~~`awk`で`print`するとき、"$\d"という感じでダブルクォートで囲うと実行中のシェルに与えられた引数。囲わないとawkで実行中のFSされたカラムがとれる。~~ そうでもないかもしれないから打ち消し。そもそもawkのスクリプト文字列をダブルクォートで囲ってスクリプトの記号をエスケープすればいいだけだった。
なんとなく（ダブル）クォートで囲いがちだけど割と要らないっぽい。
なんたら展開とかいっぱいあるけど区別つかない。。。



https://qiita.com/amyueGT/items/43880660893e2dc637e1

https://qiita.com/amyueGT/items/3bf9b432a465b9fa4d7d
AWS IoT EventsのカスタムペイロードでJSONオブジェクトやオブジェクト配列を設定する方法

# はじめに

AWS IoT Eventsのイベントに設定できるカスタムペイロードでJSONオブジェクトやJSONオブジェクト配列を設定する方法を紹介する。カスタムペイロードは制約が多く、癖があり結構はまったのでメモとして残す。カスタムペイロードの記載については、[別記事](https://qiita.com/ntrlmt/items/8330f1924c657b764f6a)を記載したので参照。

# 動作確認環境
* AWS IoT Events
* AWS IoT SQLルールエンジン
  * バージョン：2016-03-23


# 方法

JSONオブジェクトやJSONオブジェクト配列をカスタムペイロードを送るには、オブジェクト全体を文字列化して、配列内の全ての文字列をエスケープ処理を施す必要がある。

具体例として、以下のJSONオブジェクト配列をカスタムペイロードとして送る方法を示す。

```json:例：JSONオブジェクト配列
"devices": [
  {
    "name": "device_name1",
    "value": 1
  },
  {
    "name": "device_name2",
    "value": 2
  }  
]
```

上記のカスタムペイロードは、以下のようになる。

```text:例：JSONオブジェクト配列のカスタムペイロード
'
{
  "devices": "[
    {
      \"name\": \"device_name1\",
      \"value\": 1
    },
    {
      \"name\": \"device_name2\",
      \"value\": 2
    }  
  ]"
}
'
```
* ポイント
    * JSONオブジェクト配列```[]```全体を文字列とする
    * 配列内の文字列に```\```を入れてエスケープ処理する

## AWS IoTルールを使う場合

AWS IoTルールで、MQTTのJSONオブジェクトやJSONオブジェクト配列をAWS IoT Eventsに送りカスタムペイロードにしたい場合は、IoTルールで[cast関数](https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-cast)を使う。SQL バージョン 2015-10-08 以降でサポートされている。

cast(値 as 型)のように使う。

例:
cast(true as Int) = 1

JSONオブジェクトやJSONオブジェクト配列は、このcast関数を使うことで、エスケープ処理された文字列として変換することができる（以下を公式ドキュメントより抜粋した図を参照）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638977/3a889d86-1761-4734-9e59-e0e8953e2c5b.png)

以下に例を示す。

```json:例：JSONオブジェクト配列のMQTTトピック (/topic/subtopic)
"devices": [
  {
    "name": "device_name1",
    "value": 1
  },
  {
    "name": "device_name2",
    "value": 2
  }  
]
```

以下のように、devicesをcast関数で文字列に変換する。
```sql:例：AWS IoTルール
SELECT cast(devices as String) AS devices FROM '/topic/subtopic' 
```

以下のように文字列として出力される（改行はなくなる）。
```json:出力結果
{
  "devices": "[{\"name\":\"device_name1\",\"value\":1},{\"name\":\"device_name2\",\"value\":2}]"
}
```

このようにcast関数を使い、AWS IoT Eventsへ出力することで、以下のようにAWS IoT Eventsのカスタムペイロードへ文字列としてそのまま設定することができる。

```text:例：カスタムペイロードの設定
'
{
  "devices": ${$input.<inputName>.devices}
}
'
```
* \<inputName\>: AWS IoT Eventsの入力名
* ポイント
    * 入力が既に文字列となっているので、ダブルクォーテーション（```"```）をつけない

# まとめ
AWS IoT Eventsのイベントに設定できるカスタムペイロードでJSONオブジェクトやJSONオブジェクト配列を設定する方法を紹介した。AWS IoTルールとAWS IoT Eventsを駆使してサーバーレスで簡単に処理を書きたいときに有用なので試してみて欲しい。

# 参考

 https://repost.aws/questions/QUyIoZR3gOQNmLjr1PM0XmHQ/iot-events-custom-json-payload-not-working

https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/iot-sql-functions.html#iot-sql-function-cast
Terraform の環境構築手順（Mac,Linux）

## はじめに
本記事では、TerraformをCLIからパッケージマネージャーを使ってインストールする方法と基本操作について紹介します。
MacやWindows（WSL）を使用している方でも簡単に環境構築を行うことができます。
なお、Terraformの概要については前回の記事でまとめています。

https://qiita.com/ARISA1115/items/fca95adf2489c80a2553

## インストール
1．パッケージマネージャーをダウンロードします。
```bash
# macの場合
brew tap hashicorp/tap
brew install hashicorp/tap/terraform

# Linuxの場合
wget -O - https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update && sudo apt install terraform

```
2．Terraform のバージョンを確認します。
```bash
terraform -v
```

## Terraformの基本コマンドと操作手順
Terraformをインストールした後は、以下のフローでインフラの管理を行います。

#### 1. 初期化（Initialize）:プロジェクト開始時に実行します。
```bash
terraform init
```
このコマンドを実行すると以下の処理が行われます:
- Provider（AWS,Azure,GCPなど）のダウンロード
    - 設定ファイル（.tf）で指定されたProviderの必要なバイナリがダウンロードされます。
- backendの設定
    - 状態ファイル（terraform.tfstate）の保存先や管理方法が構成されます。
- moduleの取得 
    - 設定ファイルで参照している外部モジュールがダウンロードされます。

#### 2\. 計画（Plan）: 変更内容を事前確認します。
```bash
terraform plan
```
このコマンドを実行すると以下の処理が行われます:
- 現在の状態と設定ファイルを比較
- 追加・変更・削除されるリソースの一覧を表示
- 実際の変更は行わず、実行計画のみを表示

#### 3\. 適用（Apply）：計画した変更を実際に適用します。 
```bash
terraform apply
```
このコマンドを実行すると以下の処理が行われます:
- 再度planを実行して変更内容を表示
- 確認メッセージが表示され、承認後に変更を適用
- terraform.tfstateファイルが更新され、管理状態が記録される

#### 4\.  破棄（Destroy）: Terraformで作成したリソースを削除します。
```bash
terraform destroy
```
このコマンドを実行すると以下の処理が行われます:
- 管理下にあるすべてのリソースの削除計画を表示
- 確認後、すべてのリソースを削除

## まとめ
本記事では、MacとLinux環境でのTerraform のインストール方法と基本的な実行フローを紹介しました。パッケージマネージャーを使うことで、異なるOSでも簡単にTerraformを導入することができます。
また、Terraformの基本コマンドの役割と実行内容について理解することで、インフラ変更の前に何が起こるかを事前に確認でき、より安全に作業できます。

https://developer.hashicorp.com/terraform/install
Linux入門： chsh -s /bin/bash コマンドに感動したので、記事としてアウトプットしてみた

## はじめに
`chsh`（change shell）コマンドは、ユーザーのデフォルトシェルを変更するためのコマンドです。

デフォルトシェルは、ログイン時に自動的に起動される重要な環境設定の一つです。特に、異なるシェル環境を使いたい場合や、標準のシェルから Bash に変更したい場合に `chsh` コマンドは便利です。

## 書こうと思ったきっかけ
`chsh -s /bin/bash` は、現在のユーザーのログインシェルを `/bin/bash`（Bash）に変更するためのコマンドです。

:::note info
**これにより、次回のログイン時から Bash をデフォルトシェルとして使用できるようになります。**
:::

環境によっては `chsh` の使い方に違いがあるため、注意点を整理しておくと役立つと考えました。***多くの人がスムーズにシェルを切り替えられるように、この内容をまとめました。***

## `chsh -s /bin/bash` の実行方法
### 現在のシェルを確認する
変更前に、現在のシェルを確認しておきましょう。

```sh
echo $SHELL
```

このコマンドを実行すると、現在使用しているデフォルトシェルのパスが表示されます。

### `chsh` コマンドを実行
以下のコマンドを実行すると、デフォルトシェルを Bash に変更できます。

```sh
chsh -s /bin/bash
```

このコマンドを実行すると、パスワードの入力を求められる場合があります。正しく入力すると、設定が適用されます。

### 設定の反映
シェルの変更を有効にするために、一度ログアウトして再ログインするか、以下のコマンドを実行します。

```sh
exec bash
```

## `chsh` を実行する際の注意点
### システムに `/bin/bash` が存在するか確認
環境によっては、`/bin/bash` のパスが異なる場合があります。Bash がインストールされているか、正しいパスであるかを確認しましょう。

```sh
which bash
```

このコマンドの出力結果が `/bin/bash` であれば、問題なく使用できます。

### root 権限が必要な場合がある
`chsh` コマンドは通常のユーザーでも実行できますが、システムの制約により root 権限が必要な場合があります。その場合は、`sudo` を付けて実行してください。

```sh
sudo chsh -s /bin/bash ユーザー名
```

### `/etc/shells` に登録されているか確認
デフォルトシェルに設定できるシェルは `/etc/shells` に登録されている必要があります。登録されていない場合は、変更できません。

以下のコマンドで登録されているシェルを確認できます。

```sh
cat /etc/shells
```

出力に `/bin/bash` が含まれていることを確認してください。

## まとめ
- `chsh -s /bin/bash` は、ユーザーのデフォルトシェルを Bash に変更するコマンド。
- 実行前に現在のシェルを確認し、Bash が存在するかを確かめる。
- 変更後は再ログインまたは `exec bash` を実行して反映させる。
- `sudo` が必要な場合があるため、権限エラーが出たら管理者権限で実行。
- `/etc/shells` に `/bin/bash` が登録されているかを確認。

このコマンドを適切に使用することで、Bash をデフォルトのシェルとして快適に利用できますので、使ってみてください！
React Nativeでasdfを使った環境でのiOSのビルドエラーになる問題の対処法

こんにちは。[virapture株式会社](https://virapture.com)でCEOしながら[ラグナロク株式会社](https://ragna-rock.com)でもCKOとして働いている[@mogmet](https://twitter.com/mogmet)です。

本日はReact Nativeで発生したトラブルシュート記事です。

## 問題

Xcodeを開いてビルドすると、hermes-engine.buildのビルドで下記のようなエラーが出ました。

```
Node found at: /Users/mogmet/.asdf/shims/node
/Users/mogmet/.asdf/shims/node: line 9: exec: asdf: not found
Command PhaseScriptExecution failed with a nonzero exit code

Node found at: /Users/mogmet/.asdf/shims/node

/Users/mogmet/.asdf/shims/node: line 9: exec: asdf: not found

Command PhaseScriptExecution failed with a nonzero exit code


```

asdfなんぞしらんと言われてしまいました。

## 解決法

ピュアなシェルでビルドを実行しているようなので、下記コマンドでasdfを認識させることで解決しました。

```sh
$ sudo ln -s /opt/homebrew/bin/asdf /usr/local/bin/asdf
```

## まとめ

asdfを認識しないときは無理やりPATHを通すことで解決！

最後に、viraptureでは、チームビルディングや技術顧問、Firebaseの設計やアドバイスといったお話を受け付けてますので御用の方は弊社までお問い合わせください。

https://virapture.com/

お手軽に設計相談などしたいなら下記からでも可能です。

https://menta.work/user/20565

ラグナロクでもエンジニアやデザイナーのメンバーを募集しています！！楽しくぶち上げたい人はぜひお話ししましょう！！

https://ragna-rock.com
Linux入門：ディストリビューションごとのsudoグループについて体系的にまとめてみた

## はじめに
Linuxでは、管理者権限（root権限）が必要な操作を一般ユーザーが実行するために`sudo`コマンドが利用されます。

:::note warn
**ただし、すべてのユーザーが`sudo`を実行できるわけではなく、適切なグループに所属している必要があります。**
:::

本記事では、`sudo`権限を持つグループについて詳しく解説します。

## 書こうと思ったきっかけ
Linuxを使い始めたばかりの人や、新しい環境を構築する際に「どのグループに追加すれば`sudo`が使えるのか？」と疑問に思うことが多いと感じました。

:::note info
***また、ディストリビューションごとに`sudo`権限を持つグループが異なるため、統一的な理解が難しいという課題もあります。***
:::

本記事を通じて、`sudo`グループの設定方法を整理し、よりスムーズなシステム管理ができるようにしたいと考えました。

## sudo権限を持つグループとは？
Linuxでは、特定のユーザーに管理者権限（root権限）を付与するために`sudo`コマンドが使用されます。

`sudo`を実行できるユーザーは、適切なグループに所属している必要があります。

https://docs.redhat.com/ja/documentation/red_hat_enterprise_linux/8/html/configuring_basic_system_settings/granting-sudo-access-to-a-user_managing-sudo-access

## ディストリビューションごとのsudoグループ
Linuxのディストリビューションによって、`sudo`権限を持つグループの名前が異なります。

| ディストリビューション | sudo権限を持つグループ |
|-----------------|-----------------|
| Ubuntu / Debian 系 | `sudo` |
| RHEL / CentOS / Rocky / AlmaLinux 系 | `wheel` |
| Arch Linux | `wheel` |
| openSUSE | `wheel` |

## 現在のユーザーが属するグループを確認する方法
自分のユーザーがどのグループに属しているかを確認するには、以下のコマンドを実行します。

```bash
groups
```
または
```bash
id
```

## sudo可能なグループを確認する方法
どのグループが`sudo`を実行できるかを調べるには、以下のコマンドで`/etc/sudoers`ファイルの内容を確認します。

```bash
sudo grep -E '^%sudo|^%wheel' /etc/sudoers
```

実行結果の例：
```
%sudo   ALL=(ALL:ALL) ALL
%wheel  ALL=(ALL) ALL
```
この場合、`sudo`グループと`wheel`グループのユーザーは`sudo`コマンドを実行できます。

## ユーザーをsudoグループに追加する方法
ユーザーを`sudo`または`wheel`グループに追加するには、`usermod`コマンドを使用します。

### `sudo`グループに追加する（Ubuntu / Debian系）
```bash
sudo usermod -aG sudo <ユーザー名>
```

### `wheel`グループに追加する（RHEL / CentOS / Arch / openSUSE系）
```bash
sudo usermod -aG wheel <ユーザー名>
```

## 変更を適用する
追加したグループの設定を有効にするには、ログアウト＆再ログインするか、次のコマンドを実行します。

```bash
newgrp sudo  # または wheel
```

## sudoersファイルの編集（オプション）
デフォルトで`sudo`や`wheel`グループに`sudo`権限がない場合、`visudo`コマンドを使って`/etc/sudoers`を編集し、適切なグループに権限を付与することができます。

`visudo`を開く:
```bash
sudo visudo
```

編集例（`wheel`グループに`sudo`権限を付与）:
```
%wheel  ALL=(ALL) ALL
```

## まとめ
- `sudo`権限を持つグループはディストリビューションによって異なる（Ubuntuは`sudo`、RHEL系は`wheel`）。
- `groups`や`id`コマンドで現在のグループを確認できる。
- `/etc/sudoers`を確認して、どのグループが`sudo`権限を持つか調べられる。
- `usermod -aG`コマンドでユーザーを適切なグループに追加可能。
- `visudo`を使って手動で権限を編集することもできる。

Linux環境の管理において`sudo`権限の設定は非常に重要です。本記事が、正しく安全に`sudo`を設定するための手助けになれば幸いです！
競プロ日記#25/03/19

# アルゴ式-[書かれた数の個数 (2)](https://algo-method.com/tasks/593)
- おそらく最小公倍数を求めて探索するのが良いと思う。
- 最小公倍数を求める関数については以下の記事を参考にさせていただいた。

> [最小公倍数を求めるコードを書く時の注意点](https://qiita.com/happyisland44/items/8c06efe2b84e9453447a)
- 最大公約数を求めるgcd()というメソッドが用意されているのを知った。（ほな最小公倍数を求める関数も用意しておいてくれればよいのに...。）
【Rails6】超初学者が陥ったaxiosでgetリクエストを送る際のエラー

# Webpack ビルドエラー「ForOfStatement」の解決方法 (axios)


## はじめに
こんにちは。
子育て中の母親で、現役看護師をしています。
エンジニア転職を目指して勉強中です。
Rails + Webpack を使って開発しているときに、`ForOfStatement` に関するエラーが発生しました。このエラーの原因と解決策をまとめておきます。

---

## **発生したエラー**

Webpack のビルド時に以下のようなエラーが発生しました。

```
ERROR in ./node_modules/axios/lib/helpers/trackStream.js
Module build failed (from ./node_modules/babel-loader/lib/index.js):
Error: /Users/***/blog-app/node_modules/axios/lib/helpers/trackStream.js: unknown Statement of type "ForOfStatement"
```

---

## **解決策**

### **1. `.browserslistrc` に IE11 を追加**

Babel の `browserslist` 設定を変更し、IE11 のサポートを有効にすることで解決できました。

#### **手順**

1. `.browserslistrc` ファイルを開く（または新規作成）
2. 以下の内容を追加

```
defaults
IE 11
```

3. 設定を更新するために、以下のコマンドを実行

```sh
npx browserslist --update-db
```

4. Webpack を再起動

```sh
bin/webpack-dev-server
```

---

## **最終的な結果**

この対応を行った後、Webpack のビルドが正常に完了しました。

```
ℹ ｢wdm｣: Compiled successfully.
```

これでエラーが解消され、ブラウザでアプリが正常に動作するようになりました！ 🎉

---

## **まとめ**

browserslistrcのdefaultの対象にIEが含まれていなかった。
そこで差異が出てしまい、今回のエラーが発生してしまったのではないか。
それに対して、IE11を追加してあげることにより解消されたと考える。

**解決策:**
 `.browserslistrc` に `IE 11` を追加

---

## **参考リンク**
- [Babel 公式ドキュメント](https://babeljs.io/docs/en/)
- [Browserslist 公式ドキュメント](https://github.com/browserslist/browserslist)
- [Stack Overflow](https://stackoverflow.com/questions/76154276/unknown-statement-of-type-forofstatement-when-trying-to-run-an-npm-library)

---
勉強を進めていく中で、最近は互換性の問題でエラーが出ることが多い。
依存先のライブラリのちょっとした設定の違いで動かなくなってしまうため、陥ると焦ります。
まずは、しっかりエラー内容を知ることが大事なのだとわかりました。
[python] Lambda Layerからlangchainがインポートできなくて少しはまった話

以下の記事を参考にLangchainを利用するためのLambda Layerを構築したが、モジュールの呼び出し時にエラーが出て解決に少々てこずったので備忘録

https://qiita.com/yuki_ink/items/62f28d40b726918207c9#5-lambda%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%AE%E4%BD%9C%E6%88%90

## エラーの状況

Lambdaを実行すると以下のようなエラーが発生：

```
[ERROR] Runtime.ImportModuleError: Unable to import module 'lambda_function': No module named 'langchain'
```

レイヤーを作成してきちんとアタッチしたはずなのに...なぜ？

## 考えられる原因

### 1. レイヤーの構造がおかしい

下記の記事にある通りにレイヤーの構造が実装ができていない場合、動かない

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/packaging-layers.html#packaging-layers-paths

### 2. Pythonのバージョン不一致

Lambda関数で選択したPythonのバージョンとレイヤーを作成したPythonのバージョンが異なると動かない。← 今回の原因これ。

### 3. 依存関係が足りない

langchainは他のライブラリに依存していることが多く、それらも一緒にインストールする必要があります。

## 解決方法

### 正しいディレクトリ構造でレイヤーを作る

```bash
# こんな感じで構造を作ります
mkdir -p python/lib/python3.9/site-packages
pip install langchain -t python/lib/python3.9/site-packages/

# ZIPファイル作成
cd python
zip -r ../langchain-layer.zip .
```

重要なのは `python/lib/pythonX.X/site-packages/` この構造

### Pythonバージョンの一致を確認

Lambda関数とLayerで同じPythonバージョンを使用しているか確認する

### デバッグコードを追加

どうしても原因がわからない場合は、Lambdaに以下のコードを追加して検索パスを確認：

```python
import sys
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Python Path: %s", sys.path)
    # ここでパスを確認できる
```

## まとめ

私の利用していたpythonのバージョンは3.13.xで、Layerの構築で参考にした記事のpythonバージョンは3.12.xであったため、今回のインポートエラーが発生していた。
単純なミスではあったが、なかなか気づくことができなかったので、この記事が誰かの役に立つことを祈っています！
Terraformとは？

Terraformは、「手作業でインフラを構築し、壊れたら復元できない:scream:」という悪夢から開発者を開放してくれるIac（Infrastructure as Code）ツールです。
本記事では、Terraformがどのように機能するのか、その基本的なアーキテクチャと仕組みをまとめました。

## Terraformの概要
2014年にHashiCorp社によって開発されたOSSで、IaCツールの1つです。
IaCの代表的なツールとして、AWS、Azure、GCP、Alibabaなどの主要なクラウドプロバイダーに対応しており、クラウド環境を一貫した方法で、設計・管理できます。
Terraform の設定には、HCL（HashiCorp Configuration Language） というドメイン固有言語（DSL）を使用します。

## Terraformの仕組み
実際にTerraformをインストールする前に、「Terraformがどのように機能するのか」、基本的な仕組みを理解しましょう。

### 基本的なアーキテクチャ
Terraformは主に以下の3つのコンポーネントで構成されています。

 #### 1. Core
ユーザーが記述したHCLコードを解析し、リソース間の依存関係を把握してリソースグラフを構築します。オーケストラの指揮者のように、楽譜（設定ファイル）を読み解き、どの楽器がいつ演奏を始め、どのように協調すべきかを判断します。全体の調和と正確なタイミングを確保する重要な役割を果たします。

 #### 2. Provider
AWS、Azure、GCPなどの各種サービスとの接続を担当するプラグインです。APIを通じてクラウドサービスとやり取りします。オーケストラの様々な楽器奏者のように、それぞれが特定の楽器（クラウドサービス）を専門とし、指揮者（Core）の指示に従って演奏します。各奏者は自分の楽器に関する深い知識を持ち、演奏技術（API仕様）が変わっても、オーケストラ全体の編成に影響を与えることなく対応できます。

 #### 3. State
現在のインフラの状態を記録し、次回の実行時に差分を検出するために使用されます。演奏の録音や楽譜への書き込みのように、これまでどのように演奏されたか（作成されたリソースの状態）を記録し、次の演奏会（次回のTerraformを実行）で参照できるようにします。ある部分をすでに完璧に演奏していれば、その部分を再度練習する必要はなく、変更のあった部分だけを練習すればよいのです。

## まとめ
Terraformは、インフラストラクチャを宣言的なコードで定義・管理するためのツールです。Core、Provider、Stateという3つの主要なコンポーネントが連携することで、クラウド環境の一貫した構築と管理を実現します。CoreはHCLコードを解析して依存関係を把握し、Providerは各クラウドサービスとの対話を担い、Stateはリソースの現在状態を記録します。一貫性を保証することにより、Terraformは複雑なマルチクラウド環境においても安定したインフラ管理を実現します。

https://developer.hashicorp.com/terraform/docs

https://developer.hashicorp.com/terraform/tutorials
Infrastructure as Code（IaC）を理解しよう

### はじめに
本記事では、IaCの概要や主要なアプローチについてまとめました。
近年、クラウド環境の普及やDevOpsの浸透により、インフラの自動化が求められる場面が増えています。
IaCを活用することで、インフラ管理の効率化や自動化が可能になり、開発や運用の負担を大きく軽減できます。

### IaCとは？
Infrastructure as Code（IaC）とは、インフラを手動で管理・デプロイするのではなく、「コード」で定義・管理する手法です。サーバーやネットワーク設定を自動化することで、環境構築の再現性を高め、開発効率が向上します。

#### IaCのメリット
- 自動化と再現性
    - インフラの構築や設定の適用を自動化することで、手作業による設定ミスや手順ミスを防ぎます。また、コードを使って同じ環境を正確に再現できるため、開発環境や本番環境の一貫性を保つことができます。
- ドキュメントとしての役割
    - インフラの設定をコードとして記述することで、それ自体が設計図の役割を果たします。これにより、環境の構成が明確になり、チーム内での共有が容易になります。
- バージョン管理が容易になる
    - インフラの設定をコードとして管理することで、Gitなどのバージョン管理システムを活用できるようになります。これにより、インフラの変更管理が効率化され、一貫性のある運用が実現できます。

#### IaCのデメリット
- 学習コストがかかる
    - TerraformやCloudFormation、Ansibleなど、構成管理ツールを使用します。それぞれのツールによって、アプローチやコードの記述方法が異なります。そのため、習得するために時間やコストがかかることになります。
- 状態管理が複雑になる
    - 特に宣言型アプローチでは、システムの現在の状態を把握・管理する必要があります。
- 変更や適用ミスのリスクがある
    - IaCにより変更が自動適用されるため、意図しないリソースの変更や削除が発生する可能性があります。

### 主要なアプローチ
IaCには、2つの異なるアプローチがあります。

#### 宣言型（Declarative）
「何を」構築するかを記述するアプローチです。
- 目標とする最終的な状態を記述し、ツールがその状態を実現するために、必要な手順を自動的に調整します。
- 仮想マシンやネットワーク、データベースをコードで管理することができます。
- 変更時に自動で差分と適用し、最小限の変更で環境を維持できます。

代表的なツール：terraform、CloudFormation

宣言型を料理で例えると：
レストランで「コース料理を注文する」イメージです。「美味しい料理を提供してください」という最終的な目標だけを伝えて、具体的な料理の内容や調理方法はシェフにすべて任せます。シェフが素材の選定や調理手順、盛り付けまで考えて、料理を提供します。

#### 命令型（Imperative）
「どのように」構築するのか手順を記述するアプローチです。
- 実行すべきコマンドや操作を明示的に定義できるため、細かい制御が可能で、複雑な処理にも対応できます。
- OSの設定変更やパッケージインストール、ソフトウェアのデプロイなどに適しています。
代表的なツール：Ansible、Chef、Puppet

命令型を料理で例えると：
自分で料理を1から作るようなものです。「玉ねぎを5mm角に切り、中火で3分炒めて、次にジャガイモを加えて...」という具体的な手順書に従って料理をします。
各ステップを正確に実行し、順序通りに進めることで、最終的な料理が完成します。

## まとめ
IaCを導入することで、インフラの自動化・一貫性の向上・管理の効率化 など多くのメリットが得られます。
一方で、学習コストやツールごとの違い、適用時のリスクなどにも注意が必要です。
特に、宣言型と命令型の特性を理解し、目的に応じて適切なツールを選択することが、IaCを効果的に活用する鍵となります。
【ターミナル】Linuxコマンドについて

# 記事概要
Linuxコマンドについて、まとめる。

# 前提
- PCはMacを使用している
- ターミナル.appを起動している

# まとめ(Linuxコマンド)
## pwdコマンド
カレントディレクトリのパスを表示するコマンド

```
% pwd
#=> カレントディレクトリを表示する
```

## lsコマンド
ディレクトリやファイルの一覧を表示するコマンド

```
% ls
#=> カレントディレクトリの中身を一覧表示する

% ls [中身を表示したいディレクトリのパス]
#=> 指定したディレクトリの中身を一覧表示する
```

## cdコマンド
カレントディレクトリを移動するときに使用するコマンド

```
% cd [移動したいディレクトリのパス]
#=> 指定したディレクトリへ移動

% cd
#=> ホームディレクトリへ移動

% cd /
#=> ルートディレクトリへ移動
```

ファイルやフォルダのパスは、
右クリック＞情報を見る＞場所 をクリックすると、パス名をコピーできる

## sourceコマンド
シェルに記述された内容を実行するコマンド
Hyper-Vの仮想スイッチでOpenWrt～にハマったことと解決策

# 注意
本環境は仮想スイッチを利用した前提の構成であり、DAA(PCIパススルー)は利用していません。
多分DAAなら発生しないと思います。

# Hyper-Vで動かすための前準備と手順

## 必要なもの
- [OpenWrt x86のimgデータ](https://downloads.openwrt.org/releases/)
    - `generic-squashfs-combined-efi.img.gz`だと更新やリセットが楽
    - 事前に落として`.img.gz`から解凍して`.img`にしておくこと
- [qemu-img](https://cloudbase.it/qemu-img-windows/)
    - ダウンロードしたimgをvhdxにしたり、拡張したりするのに使う

## 手順
1. qemu-imgを解凍した中身とOpenWrtのimgデータを一つのフォルダにまとめる
1. `cmd`を立ち上げ、次のコマンドを順番に実行する
1. `qemu-img resize -f raw ***.img 1G`
    1Gに拡張する、必要に応じて増やしても減らしてもOK。
1. `qemu-img convert ***.img -O vhdx ***.vhdx`
    imgからvhdxにコンバートしてHyper-Vのディスクとして使えるようにする。
1. コンバートしたディスクをHyper-Vの仮想マシンにセットする
    - セキュアブート無効
    - メモリ1GB(動的でも固定でもOK)
    - プロセッサは1~2くらい
    - あとはお好みで
1. 起動したら[これ](https://openwrt.org/docs/guide-user/advanced/expand_root)にしたがってディスクの拡張を実施(実行完了後、VMは自動で再起動する)

以上！

# フレッツ光のONUとつながらない
これは実NICと仮想スイッチ間のMACアドレスが異なることが原因っぽいです。

## 解決方法
OpenWrtにNICを追加した際に実際のNICのMACアドレスと同じになるように静的に割り振ってあげる必要があります。
また、MACアドレスのスプーフィング(偽装)も許可してあげると良いです。~~知らんけど。~~

# VLANが通らない
MACアドレスのスプーフィングを許可しているのにVLANが通りません。
普通のパケットは通ります。なんでや。

## 解決方法①
NICに対してVLANが1つだけ紐づく場合は、`仮想VLANIDを有効にする`にチェックを入れ、VLANIDを指定することで通すことができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3314743/9b0f230d-92cf-4346-b164-6f44611d9373.png)

## 解決方法②
トランクポートなど、複数のVLANが通ることを前提とする場合は、`Set-VMNetworkAdapterVlan`を使用してVMに対して許可するVLANを設定することが可能です。
めんどくさいので全部許可してしまえ～！な場合は下記の通り設定してみてください。

```powershell
PS C:\Users\Administrator> Set-VMNetworkAdapterVlan OpenWrt -Trunk -AllowedVlanIdList 1-4094 -NativeVlanId 0
PS C:\Users\Administrator> Get-VMNetworkAdapterVlan OpenWrt

VMName  VMNetworkAdapterName    Mode  VlanList
------  --------------------    ----  --------
OpenWrt ネットワーク アダプター Trunk 0,1-4094
OpenWrt ネットワーク アダプター Trunk 0,1-4094
OpenWrt ネットワーク アダプター Trunk 0,1-4094
OpenWrt ネットワーク アダプター Trunk 0,1-4094
OpenWrt ネットワーク アダプター Trunk 0,1-4094
```

ちなみにNICを指定したい場合は`-VMNetworkAdapterName`で指定してやることで、特定NICだけ通すみたいなことも出来るっぽいです。
Next.js のプロジェクトのアプリ上に Live2D Cubism SDK for Web のサンプルデモを表示させる

## はじめに

はじめまして、モーコと申します。

Live2D Cubism SDK for Web（以下、Cubism SDK）が Node.js で動作することを知り、「Next.js のプロジェクト上で直接表示できるのでは？」と思い、実際に試してみました。

通常、Cubism SDK を使用する際は、TypeScript でコーディングを行い、ビルドして生成された JavaScript ファイルを HTML から読み込むのが一般的です。しかし、Cubism SDK 自体が TypeScript で書かれているため、Next.js のプロジェクト内で直接活用できるのではないかと考えました。

本記事では、その実装方法について紹介します。

## サンプル

本記事では、以下のリポジトリに作成したサンプルをベースに進めていきます。

https://github.com/moo-ko/Live2dOnNextJs

README に記載した内容と一部重複しますが、リポジトリをクローンした後、以下の手順を実行することで公式のサンプルデモを Next.js 上で表示できます。

### 準備

1. Cubism SDK のダウンロード
[Live2D公式サイト](urlhttps://www.live2d.com/sdk/download/web/)から Cubism SDK for Web をダウンロードしてください。
※ 本サンプルは [2025/02/18] Cubism 5 SDK for Web R3 で動作確認しています。

2. ファイルのコピー
ダウンロードしたファイルを解凍し、以下のようにプロジェクト内へコピーします。

* CubismSdkForWeb-5-r.3/Samples/Resources/*
→ live2d-on-nextjs/public/live2d/Resources/ へコピー
* CubismSdkForWeb-5-r.3/Core/live2dcubismcore.min.js
→ live2d-on-nextjs/public/live2d/ へコピー
* CubismSdkForWeb-5-r.3/Core/live2dcubismcore.d.ts
→ live2d-on-nextjs/src/lib/live2d/core/ へコピー
* CubismSdkForWeb-5-r.3/Framework/src/*
→ live2d-on-nextjs/src/lib/live2d/framework/ へコピー
* CubismSdkForWeb-5-r.3/Samples/TypeScript/Demo/src/*
→ live2d-on-nextjs/src/lib/live2d/demo/ へコピー ※1

※1 `lappdefine.ts` および `lappdelegate.ts` は上書きしないでください

### ビルド

以下のコマンドを実行し、必要なパッケージをインストール＆ビルドします。

```sh
cd livd2d-on-nextjs
npm i
npm run build
```

### 起動

ローカルサーバーを起動し、デモを確認します。

```sh
npm run dev
```

ブラウザで http://localhost:3000/live2d にアクセスすると、Live2D のモデルを表示するデモアプリが起動します。

## 構成

本プロジェクトのディレクトリ構成と、それぞれの役割について説明します。

### public/live2d/live2dcubismcore.min.js

Live2D Cubism SDK の公式 Core の JavaScript ファイルです。

### public/live2d/Resources

Live2D の モデルデータ（テクスチャ・モーション・設定ファイルなど）が格納されるディレクトリです。

### src/app/layout.tsx

Next.js のレイアウトファイルです。

* TypeScript では `live2dcubismcore.d.ts` をインターフェースとして使用し、実際の処理は `live2dcubismcore.min.js` によって実行されます
* `live2dcubismcore.min.js` を `<head>` 内の `<script>` タグ で読み込むことで、Next.js のクライアント環境で利用できるようにしています

### src/app/live2d

`/live2d` ルートへの ルーティングを行います。

### src/components/live2d/live2dView.tsx

Live2d の表示用コンポーネントです。
`canvas` タグを用意し、Live2d の描画を行います。
LAppDelegate の初期化処理、実行処理、解放処理などのメソッドを実行する役割も担います。

### src/lid/live2d

Live2D Cubism SDK for Web の 公式ソースコード をベースに配置するディレクトリです。

* framework → 公式のソースコードそのまま
* core → 公式のソースコードそのまま
* demo → 公式のサンプルをカスタマイズ

特に `demo` 内の以下 2 つのファイルはプロジェクトに合わせて修正を加えています。

* lappdefine.ts
実行環境に合わせて変数の値を調整しています。
* lappdelegate.ts
もともとは `document.createElement("canvas")` でキャンバスを生成していましたが、`live2dView.tsx` 内で設置した `canvas` を使用するように修正しました。

これらの構成をもとに、Next.js 上で Live2D を動作させる環境を構築しています。

## おわりに

以上、Next.js 上で Live2D Cubism SDK for Web を動かす方法 をご紹介しました。

公式の Cubism SDK は基本的に HTML + JavaScript で動作する前提になっていますが、本記事のように Next.js + TypeScript 環境 に組み込むことで、よりモダンな Web アプリケーションでも活用できるようになります。

本記事が Live2D を Next.js で扱いたい方 の参考になれば幸いです。
ぜひ、リポジトリをクローンして動かしてみてください！

https://github.com/moo-ko/Live2dOnNextJs

ご質問やフィードバックがあれば、ぜひコメントで教えてください！
最後までお読みいただき、ありがとうございました！
【Rails】超初学者が陥った`yarn add jquery` でのエラー




## はじめに
こんにちは。

子育て中の現役看護師で、エンジニア転職を目指してRuby on Railsを勉強しています。 
JavaScript を扱うために **`yarn add jquery`** を実行後、エラーが出たため、今後のために残します。 

---

##  **やりたかったこと**
Rails アプリに **jQuery を追加** したかったので、以下のコマンドを実行しました。

```bash
yarn add jquery
```

すると、エラーが発生
```bash
error Command "webpack-dev-server" not found.
```
jquery を入れた際に、webpack-dev-server が見つからないエラーに直面。

---
## 🚨 エラーの原因
このエラーの原因は webpack-dev-server がインストールされていないか、正しく設定されていない可能性があるとのこと。
そこで、以下の手順を行う。
## 解決方法

### webpack-dev-server がインストールされているか確認

まず、現在 `webpack-dev-server` がインストールされているかを確認しました。
```bash
yarn list --depth=0 | grep webpack-dev-server
```
上記を行いましたが、 何も表示されず。
webpack-dev-server がインストールされていませんでした。

## webpack-dev-server をインストール

適切なバージョン (`3.11.2`) を手動でインストール。

```bash
yarn add webpack-dev-server@3.11.2 --dev
```

## 依存関係を整理
すべてのパッケージを整理するために、yarn install を実行。
```
yarn install
```
それでも動かなければ、node_modules を削除して再インストール。
```
rm -rf node_modules yarn.lock
yarn install
```

## bin/webpack-dev-server を再実行
最後に、もう一度 webpack-dev-server を実行して動作確認。
```
bin/webpack-dev-server
```
上記の流れで、無事に動きました！


---

## まとめ

| やったこと | コマンド |
|--------------|------------|
| `yarn add jquery` を実行したらエラー発生 | `error Command "webpack-dev-server" not found.` |
| `webpack-dev-server` が入っているか確認 | `yarn list --depth=0 \| grep webpack-dev-server` |
| `webpack-dev-server` を手動インストール | `yarn add webpack-dev-server@3.11.2 --dev` |
| 依存関係を整理 | `yarn install` or `rm -rf node_modules yarn.lock && yarn install` |
| `bin/webpack-dev-server` を実行して確認 | `bin/webpack-dev-server` |

---

## 参考
- [Yarn 公式ドキュメント](https://classic.yarnpkg.com/en/docs/)
- [Webpack 公式サイト](https://webpack.js.org/)
----

初学者のため、間違えていたらすいません。
引き続き、学習を続けて行きます。
【HTML】HTMLのhead要素について

# 記事概要
HTMLのhead要素について、まとめる。

# まとめ(head要素)
## meta要素
HTML文章に関する情報を指定することができる

### charset属性
使用する文字コードを指定できる

```html
<!DOCTYPE HTML>
<html>
  <head>
    <meta charset="UTF-8">
  </head>
  <body></body>
</html>
```

## title要素
ウェブサイトのタイトルを指定し、タブに表示される

```html
<!DOCTYPE HTML>
<html>
  <head>
    <title>ココにタイトルを記載</title>
  </head>
  <body>
    <h3>ブラウザ画面に表示される内容</h3>
  </body>
</html>
```

[![Image from Gyazo](https://i.gyazo.com/120f406c4643bdff38bfe58676e838f5.png)](https://gyazo.com/120f406c4643bdff38bfe58676e838f5)

[サンプルコード](https://github.com/likapantrip/html_css)の`html/index_title.html`を参照

## link要素
- 現在のファイル(HTML)から外部情報を関連付けする要素
- rel属性、href属性と一緒に使用するのが一般的である

### rel属性
参照先のファイルが現在のファイルとどのような関係であるのかを明記する
- 属性値
    - ”stylesheet”と記述すると、CSSを参照

### href属性
参照先の外部ファイルの場所を明記する
- 属性値
    - ファイルの場所、ファイル名を記載

```html
<!DOCTYPE HTML>
<html>
  <head>
    <!-- style.cssを参照 -->
    <link rel="stylesheet" href="style.css">
  </head>
  <body></body>
</html>
```

## script要素
実行できるコードを埋め込んだり、参照したりするために使用される
一般的には、JavaScriptのコードの埋め込みや参照に使用される
```html
<!DOCTYPE HTML>
<html>
  <head>
    <script src="index.js"></script>
  </head>
  <body></body>
</html>
```

### type属性
要素の種類を指定する

```html
<!DOCTYPE HTML>
<html>
  <head>
    <!-- JavaScriptのライブラリを参照 -->
    <script type="text/javascript" src="ライブラリのURL"></script>
  </head>
  <body></body>
</html>
```

# 参考記事
- [【HTML】HTMLについて](https://qiita.com/likapantrip/items/394727fefa76a4c487d3)
- [【HTML】HTMLのbody要素について](https://qiita.com/likapantrip/items/5cd8625437aefe0614ef)
【CSS】CSSについて

# 記事概要
CSSについて、まとめる。

# CSSとは
- 正式名称は、Cascading Style Sheets
- HTMLを装飾する言語
- 拡張子は、`.css`
- HTMLファイルのhead要素に、CSSファイルを参照するように記載する

# CSSの構成
## セレクタ
CSSによる装飾を、どの部分のHTMLに適用するかを選択する

## プロパティ
- セレクタで指定したHTMLの「何を変えるのか」を選択する
- 複数プロパティがある場合、順序は問わない

## 値
- プロパティで設定する内容を決める
- プロパティと値の間は`:`で区切る
- 値の後には`;`を入力する

```css
/* 下記2つは同じ意味 */
h1 {
  color: red;
  height: 100px;
}

h1 {
  height: 100px;
  color: red;
}
```

|| コード | 説明 |
| ---- | ---- | ---- |
| セレクタ | h1 | h1要素に適用する |
| プロパティ | color | 文字色を変える機能を追加する |
| 値 | red | 文字色を赤にする |

## コメントアウト
コメントアウトする場合は、`/*`と`*/`で囲む

```css
/* コメントアウト */

/* コメントアウトは
複数行に適用される */
```
# CSSの記載方法
## ファイルの記述
### 要素
- 指定したHTML要素全てに対して装飾する
- `要素 {}`のように記載する

```css
p {
  color: yellow;
}
```

## セレクタ
### classセレクタ
- 特定のHTML要素だけに装飾をする
- `.class名 {}`のように記載する

```css
.hoge1 {
  color: red;
}
```

### idセレクタ
- 特定のHTML要素だけに装飾をする
- `#id名 {}`のように記載する

```css
#hoge2 {
  color: blue;
}
```

### *
- 全ての要素に装飾をする
- `* {}`のように記載する

```css
* {
  font-size: 20px;
}
```

# CSSの特徴
## リセットCSS
各ブラウザにデフォルトで設定されているCSSを打ち消す役割をもったCSS

- 各ブラウザは固有のCSSがデフォルトで指定されている
- デフォルトのCSSによって、自分で書いたCSSが意図しない表示になることがある

```css
/* リセットCSS */
body {
  font-size: 14px;
  color: #333;
  margin: 0 auto;
}
h1,h2,h3,h4,h5,h6,p {
  padding: 10px 0;
  margin: 0;
}

ul,li {
  padding: 0;
  margin: 0;
}
```

## Viewport
- ブラウザで表示されている領域
- viewportを考慮した実装を行うと、画面サイズに応じて要素の大きさが

# 参考記事
- [【CSS】CSSのプロパティについて](https://qiita.com/likapantrip/items/848f3a00c2a7ae9cd409)
- [【HTML】HTMLについて](https://qiita.com/likapantrip/items/394727fefa76a4c487d3)
【HTML】HTMLについて

# 記事概要
HTMLについて、まとめる。

# HTMLとは
- 正式名称は、Hyper Text Markup Language
- ウェブサイトに表示される情報を記載する言語
- 拡張子は、`.html`
- CSSとセットで使用することが多い

# HTMLの構成
## 要素
- `<>`と`</>`に囲まれた範囲のこと
- 複数の要素を積み重ねることで、HTMLが構成されている
```html
<h1>見出し1をココに記載します</h1>
<------------要素------------->

<h1>見出し1をココに記載します</h1>
    <-----要素の中身------>
```

### 属性
要素に情報を付け加える役割がある

### 属性値
どのような属性なのかを示す値

```html
<meta charset="UTF-8">

charset → 属性
"UTF-8" → 属性値
```

## タグ
- `<>`や`</>`のこと
- `<>`は開始タグ、`</>`は終了タグという
- 終了タグが無い場合もある

## コメントアウト
コメントアウトする場合は、`<!--`と`-->`で囲む

```html
<!-- コメントアウト -->

<!-- コメントアウトは
複数行に適用される -->
```

# HTMLの構造
HTMLは、head要素とbody要素で構成されている

```html
<!DOCTYPE HTML>
<html>
    <head>
        <!-- こちらにhead要素の情報を記載する -->
    </head>
    <body>
        <!-- こちらにbody要素の情報を記載する -->
    </body>
</html>
```

## DOCTYPE
- 「ドキュメントタイプ」の略
- この文章がHTML文章であることを宣言する要素
- 終了タグはなく、`<!DOCTYPE HTML>`と記述する
- この要素を記述しないと、レイアウトが崩れ、正しく表示がされないことがある

## html要素
- HTML文章の始まりと終わりを示す要素

## head要素
- ウェブサイトの情報や、装飾用のCSSファイルの情報を記載する
- ブラウザ画面には表示されない

## body要素
- ブラウザ画面に表示したい情報を記載する

# HTMLの記載方法
## ファイルの記述
下記のように記載する

```html
<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
	  <header></header>
	  <main></main>
	  <footer></footer>
  </body>
</html>
```

## 属性
### class属性
- 個別に名前を指定することができる
    - 複数の要素に同じclassを付与できる
- 属性値をclass名という
- class名をCSSのセレクタとして指定し、装飾する

```html
<p class="message">
  1つ目の段落です。
</p>
```

### id属性
- 特定のHTML要素のみに対して、名前を指定することができる
    - 複数の要素に同じidを付与できない
- 属性値をid名という
- id名をCSSのセレクタとして指定し、装飾する

```html
<p id="fourth-message">
  4つ目の段落です。
</p>
```

### class属性の記述
クラス名をスペースで区切ることによって、複数のクラス名を保持することができる

```html
<!-- 下記div要素は、クラス「box」「blue」を保持している -->
<div class="box blue">
  <p>ボックスA</p>
</div>

<!-- 下記div要素は、クラス「box」「blue」とid「left」を保持している -->
<div class="box blue" id="left">
  <p>ボックスA</p>
</div>
```

# HTMLの特徴
## 入れ子構造
入れ子構造にすることが可能である

```html
<!DOCTYPE HTML>
<html>
  <head></head>
  <body>
    <div>
      <h1>見出しA</h1>
      <h1>見出しB</h1>
    </div>
  </body>
</html>
```

[![Image from Gyazo](https://i.gyazo.com/ec92e29f87cc8ea1ade9189565b0e3d0.gif)](https://gyazo.com/ec92e29f87cc8ea1ade9189565b0e3d0)

[サンプルコード](https://github.com/likapantrip/html_css)の`html/index_nest.html`を参照

### 親要素
ある要素の１つの上位の階層にある要素

### 小要素
親要素から見てその下位階層にある要素

### 孫要素
親要素から見てその2つ下位階層にある要素

## 左上に重力のある積み木
- 積み木の集合体のようなモノ
- 左上に重力がある
- 左上順に要素が収まる

### ブロックレベル要素
1つのブロックレベル要素が、HTMLにおける積み木として存在

特徴は下記。
- 横幅いっぱいで表示される四角い箱である
- 箱の中にテキストなどが表示される
- 中身に関係なく横幅いっぱいになる
- 高さは中身によって変わる
- 縦並びで表示される

### インライン要素
テキストの一部として扱われる要素であり、ブロック要素の中で使用され、文字の装飾などに使用される

特徴は下記。
- 中身のテキスト量の分だけ横幅が広がる
- 高さは中身によって変わる
- 連続すると横並びで表示される

## 中身に合わせて要素の高さが変動する
中身によって、要素の高さが変わる箱のイメージ

# 参考記事
- [【HTML】HTMLのhead要素について](https://qiita.com/likapantrip/items/1f0de8d7455fb49d9211)
- [【HTML】HTMLのbody要素について](https://qiita.com/likapantrip/items/5cd8625437aefe0614ef)
- [【CSS】CSSについて](https://qiita.com/likapantrip/items/b67d11333f8fda83be79)
Spring Bootをさわっててよく出てくるメソッドまとめ

# まずこちらをご覧いただこう
```java
       var test = Optional.ofNullable(status())
                .map(Hi -> Hi.stream()
                        .map(内緒の中身)
                        .toList())
                .orElse(List.of());
```
これはOptionalのstatusから値を取り出すとき
```java
        var hasUserManageAuth = user.getAuthorities().stream()
                .allMatch(authority -> authority.getAuthority()
                        .equals(AuthorityKind.ADMIN.getRoles()));
```
引用:https://youtu.be/FscpHmaiTEw?si=fYpr0mgUOlWUnLMS
　　(この方のこのシリーズおすすめです)
細かいところがないとわからないかもだけど、これはADMIN権限があるかチェックしてる

__.equalsだの.allMatchだの(変数1 -> 変数1)だのややこしいんじゃあああ！！
わかるかあああああああああああああ！！！！！！！！！！！！
いちいち調べるものだるいわああああああああああ！！！！！！！！！__

ということで、私がSpringを学んだ時に出てきたメソッドをまとめました。
つまり、タグにもある通り完全なる自己中備忘録です。

## 目次
[.orElse](#orelse)
[.stream](#stream)
[.equals](#equals)


## 結果的に何が値に入るのか
多分、文の最後で判断できる
.equalsならtrueかfalse
.orElseならその中身
## orElse
メソッドの引数がnullの場合にorElseメソッドの引数の値を返す。
```java
System.out.println(変数1.orElse("Nullだよ"));
```
この場合、Nullだよが入る

## stream
APIの一種で、配列などの集合体において値の集計やデータを使った処理などが出来る便利なやつ
.streamのあとにメソッドが続くから理解するまでに時間かかる。
ここらへんで詰まるのはだいたいコイツのせい、嫌い
```java
a.stream().toList
```
とかつなげて利用される

## equals
String型用の比較。int型における==と同じ意味。
Stringで==を使うと参照先が同じかを比較することになるからequalsを使う
==ならtrue、!=はfalseを返す


____
以降出てきたら更新します
ギャルとのペアプロが想像以上に楽しかった（VSCodeのカスタム指示）

:::note warn
警告
* 本記事には技術的に得られる情報はほぼありません
* 何なら日進月歩のAI時代に遅れを取っている初心者です
* 息抜きとしてご覧いただけると幸いです
:::

## きっかけ
GithubCopilot を導入しており、遅ればせながらAIを使った開発をおこなっている最中、
<br>

_「毎回似たような指示出すの面倒だな」_

<br>

調べた結果、事前に設定としてプロンプトを仕込んでおける（ _custom instructions_ ）ことを知り設定をガチャガチャ…
<br>
（以下の記事を参考にさせていただきました）

https://qiita.com/masakinihirota/items/1694715063247574467d

<br>

_「ちゃんと適用されているか確認したいので口調でも変えてみるか…」_

<br>
（VSCodeの設定ファイルに以下を追記）

```json:settings.json
  "github.copilot.chat.codeGeneration.instructions": [
        {
          "text": "慣れ慣れしくフレンドリーなギャルとして振る舞い、敬語は使用しません。"
        },
        {
          "text": "あなたはプロのITエンジニアです。"
        },
        {
          "text": "時として人間らしく喜怒哀楽を表現します。"
        },
    ]
```

## ギャル爆誕
設定ファイルへの追記も終わったところで、作業を再開…
<br>

早速チャットでデザインについて相談してみようか！
（チャットカチャカチャ）

<br>

![スクリーンショット 2025-03-19 23.32.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483441/e77aa1f5-23d2-4bcd-b31c-2db2d2d801d4.png)

<br>

**想像以上に完成度の高いギャルが召喚された**

* それらしい絵文字の多用
* 「うち」呼び
* 「クッソダサいスペース」と言い放つ威勢の良さ
* 次は CSS でぶち上げてきた

<br><br>

そしてコード内まで荒らしてくる奔放っぷり

![スクリーンショット 2025-03-20 1.01.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483441/0261eb48-aca6-4ba3-babf-a430e376b462.png)

<br><br>
しかしめちゃくちゃいい子である（しっかりプロンプトも通ってる）

![スクリーンショット 2025-03-20 1.29.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483441/f5931e42-76c9-4b21-ae06-5b600927931c.png)


## 学んだこと
ギャル口調はさておき事前に複数のプロンプトを仕込んでおけるのは便利ですね。
（早く調べればよかった）

常に読ませたいプロンプトは今回のようにVScodeの設定に仕込めばよいし（同期してれば環境変えてもギャル召喚可能）、リポジトリ単位での仕込みやテスト、コミットコメントなど領域ごとの仕込みもできるようなので今後も活用できる場面がありそうです。

## 感想
急に押し寄せてくるハイテンションと奔放さで思わずニヤけてしまいました。
学習支援目的で考えれば、楽しいペアプロパートナーの最適解はギャルなのかもしれません。

効率や生産が爆上がりしている昨今ですが、こういった雑味も楽しみつつゆるく学習を継続していきたいと思います。

PS. 名前までつけたら人として何かを失いそう
![20250514_0021_ペアプログラミングの情景_simple_compose_01jv53nwjtex2skz8v03fa3hx1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483441/2a22feb4-032d-410d-9fe5-97371c91b3d7.png)
[Chrome] 1ページ全てをScreenShotできる拡張機能 Full Page Screen Capture



## はじめに
windowsに標準で存在する Snipping tool では，画像をクリップボードにコピーするだけで保存には手間がかかる．また，画面に入らない箇所は切れてしまうので，1ページ全てを画像として保存するツールを探した．必要な事はキャプチャする機能に特化している事と，ページ全体に対応できる事，セキュリティの為に不要な権限を与えなくて良い事である．該当したのが以下のツールGoFullPageである．

## 出来る事
1ページ全てをキャプチャできる．以下の画像のように，長いページでもキャプチャ可能
[Github : qiita-CLI](https://github.com/increments/qiita-cli)
![screencapture-github-increments-qiita-cli.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830184/79515501-2269-4817-b800-86f58919f87b.png)


SPAでも同様にキャプチャが可能．また，ブックマーク等はキャプチャされない．
また，キャプチャした画像をそのタブで編集可能(有料)．
![screen_edit.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3830184/98dc28b4-7ecc-42d0-ac7c-b7716eb3292a.png)



## 特徴
 - Chrome の拡張機能であり，Edgeでも利用できる．
 - 右上のアイコンをクリックするだけでキャプチャ＆ダウンロードが出来る．
 - 特別な権限を付与しなくても良いので，プライバシーの側面でアドバンテージがある．
 - 1ページ全体をキャプチャできる．
 - 小さな機能のアプリであり，不要な機能が付いていないので軽量である．


## 他のキャプチャツールとの比較
GoFullPage以外にもページ全体をキャプチャできるツールは存在する．
以下にそれぞれの特徴を纏めた．

| ツール名        | 1ページ全体 | 編集 | 特別な権限 | その他の特徴 |
|---------------|------------------|--------|--------------|--------------|
| **GoFullPage**  | 可能 | 有料 | 不要 | 軽量・シンプル |
| FireShot      | 可能 | 無料版あり | 権限が必要 | 多機能 |
| Awesome Screenshot | 可能 | 無料版あり | 権限が必要 | 録画機能 |
| Nimbus Screenshot | 可能 | 無料版あり | 権限が必要 | 充実した画面録画機能 |

上記のように，GoFullPageは軽量で、不必要な権限を求められない点が良いと感じられた．

比較した対象製品は以下からアクセス可能．
 - [GoFullPage](https://gofullpage.com/)
 - [FireShot](https://getfireshot.com/)
 - [Awesome Screenshot](https://www.awesomescreenshot.com/)
 - [Nimbus Screenshot](https://nimbusweb.me/screenshot/)


## インストール 及び 利用方法
#### インストール方法
まずは，Chrome を起動して，以下のサイトにアクセスする
[chromeウェブストア   GoFullPage - Full Page Screen Capture](https://chromewebstore.google.com/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl)
`chromeに追加`をクリックすれば自動的にインストールしてくれる．

#### 利用方法
画面レイアウトの右上にカメラの様なロゴが追加されている．これをクリックするだけで自動的にページをキャプチャしてくれる．次のタブで 画像保存 or 編集(有料) を選択できる．
個人的には，私は編集は利用しないので，無料で利用できる機能だけで十分に感じる．


## 使用感
 - 小規模なアプリであり，キャプチャと画像保存に特化している．
 - SPAでも，長いページを途切れさせずにキャプチャ出来る事がありがたい．
 - Qiita記事を書く際や，Notion等に纏め事をする際に良い利用ができると感じている．
 - ページを拡大していると，読み込む範囲が重なってしまう為，欠損する領域が生じる．その為，ズームは推奨されない．

## 参考文献

 - [GoFullPage](https://gofullpage.com/)
 - [chromeウェブストア   GoFullPage - Full Page Screen Capture](https://chromewebstore.google.com/detail/gofullpage-full-page-scre/fdpohaocaechififmbbbbbknoalclacl)
 - [FireShot](https://getfireshot.com/)
 - [Awesome Screenshot](https://www.awesomescreenshot.com/)
 - [Nimbus Screenshot](https://nimbusweb.me/screenshot/)
AWS CLIを導入してみる

## はじめに
AWS CLIを使いたいが、そのための方法を知らないのでそれについて調べてみる。

## 導入環境
WSL2（Ubuntu20.04）

## 公式ドキュメントを確認
https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html

コマンドラインインストーラと、snapパッケージを使ったインストールの2通りが提供されている。

- The command line installer
    - バージョンを意識した開発や管理をしたいときはコマンドラインインストーラを使う認識。
    - インストール後、「やっぱりこのバージョンを使い」となったときは、該当バージョンで上書きする必要がある。
    - 開発チームの方針で「このバージョンのAWS CLIを使う」という方針があるのであれば、こちらの方法を使った方がいい。

- The officially supported snap package
    - 最新のバージョンを使い続けられる。
    - コマンドラインインストーラの場合と異なり、「特定のバージョンを指定して使う」という使い方はできない。


## AWS CLIインストール
今回はコマンドラインインストーラの方法でAWS CLIをインストールする。
- 関連コマンド
    - `sudo apt install unzip`
        - AWS CLIインストールの際、unzipを実行するために必要
        - 入ってないなら事前にunzipを入れておく

- インストールに使うコマンド
    - `curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"`
    - `unzip awscliv2.zip`
    - `sudo ./aws/install`

- `aws --version`を実行： AWS CLIのバージョン確認
```
aws-cli/2.24.26 Python/3.12.9 Linux/5.15.167.4-microsoft-standard-WSL2 exe/x86_64.ubuntu.20
```


## よくわからなかった点
実は、最初はsnapパッケージを利用したインストールをしようとしていた。
しかし、`sudo snap install aws-cli --classic`を実行したとき、エラーが発生した。
- エラー発生時の`snap version`の結果
```
snap    2.45.1+20.04
snapd   2.45.1+20.04
series  16
ubuntu  20.04
kernel  5.15.167.4-microsoft-standard-WSL2
```

- エラーメッセージ
```
error: cannot perform the following tasks: - Mount snap "core22" (1748) (snap "core22" assumes unsupported features: snapd2.55.5 (try to update snapd and refresh the core snap))
```

- 原因
aws-cliのインストールには2.55.5以上のsnapが必要なのだが、現在入っているsnapのバージョンが2.45.1であり、必要な要件を満たしていない。

- 実施したこと
`sudo apt update`実行後、`sudo apt install snapd -y`を実行したのだが、
```
Waiting for cache lock: Could not get lock /var/lib/dpkg/lock-frontend. It is held by 
```
　というメッセージが延々と表示され続けてしまう。`install`でなく`upgrade`にしても結果は同じ。
 
 　これの原因と対処方法がよく分からず、これに時間を使うぐらいならコマンドラインインストーラで実施した方がいいと判断し、snapパッケージを利用したAWS CLIインストールは断念した。

  後になって思ったけど、いったんwslを再起動すればよかったのだろうか？（困ったときの再起動てきな？）

## まとめ
紆余曲折はあったが、AWS CLIをインストールできた。
これを使って、例えばローカルで作ったコンテナイメージをECRにデプロイ、といったこともできるようになる（はず）。
Postmanを使ってcurlコマンドを作成してみた

## はじめに
curlコマンドを使ってAPIを順々に実行していくシェルスクリプトを実装した際に、Postmanを知ってかなり便利だと感じたので、備忘録として記事にしています。

## curlとは
curlとは、**コマンドラインからHTTPリクエストを送信できる**ツールです。
WebAPIのリクエスト（GET, POST, PUT, DELETEなど）をコマンドで実行できます。

例）GETリクエスト
```sh
curl -X GET https://example.com
```
例）POSTリクエスト
```sh
curl -X POST -d "name=John&age=30" https://example.com
```
## Postmanとは
Postmanは、APIを開発・テスト・管理するためのツールです。
APIの動作確認やデバッグを簡単に行えます。
https://www.postman.com/

## Postmanを使ってAPI送信
PostmanのGUI上でエンドポイントを指定します。
必要に応じて、パラメーターや認証情報、ヘッダー、ボディなども設定します。
例）GETリクエスト
![](https://storage.googleapis.com/zenn-user-upload/4d8b732a4fb2-20250319.jpg)
例）POSTリクエスト
![](https://storage.googleapis.com/zenn-user-upload/ca8923142d91-20250319.jpg)

## レスポンスを確認
APIリクエストを送信するとレスポンスが返ってきて、GUI上で簡単にステータスコードやレスポンスボディの内容などを確認できます。
![](https://storage.googleapis.com/zenn-user-upload/baf7b4582455-20250319.jpg)

## curlコマンドを簡単に作成
右タブにある「コード」（</>）を開くと 送信したリクエストのcurlコマンドを生成してくれます。
![](https://storage.googleapis.com/zenn-user-upload/1bc852d3ae72-20250319.jpg)

![](https://storage.googleapis.com/zenn-user-upload/f77747247926-20250319.jpg)

## おわりに
検証ツールなどで認証情報やリクエスト内容を確認し、Postmanを使って実行することによって、簡単にcurlコマンドを作成することができます。
通信の仕組みを理解する上でも、勉強になりそうなツールです。
【Bruno】認証トークンを環境変数に設定する方法

ScriptのPost Responseに以下の記述を追記すると認証トークンを環境変数に設定できます。

```js
let jsonResponse = bru.response.body

// token環境変数にaccess_tokenの値を設定
bru.setEnvVar("token", jsonResponse.data.access_token)
```
Windowsでフォルダー構成の確認・txt形式で保存(cmd使用)

<h2></h2>
<h4>メモ背景</h4>
開発環境で動作確認をした際にフォルダー構成に誤りがありました。
<br>そこでエビデンスとして残すためにtxt形式で保存できる方法を探しました。
<h2></h2>
<h3>説明</h3>
今回はコマンドプロンプト(cmd)を使用したフォルダー構成の確認方法とディレクトリ構造（フォルダー構成）をツリー形式で表示する仕方を説明します。

以下の操作方法でフォルダー構成の確認とツリー形式の表示ができます。
1.Windowsでcmdを開きます。
2.tree /f {フォルダーパス}を入力します。
※フォルダーパスは任意になるため、指定しなくてもOKです。
 
```
 例1）tree /f D:\Projects
``` 
```
 例2）tree /f "C:\Users\Your Name\Documents\My Projects"
```
3.ツリー形式で表示された結果を確認

```
[結果]
D:\PROJECTS
│   readme.txt
│   LICENSE
│
├───App1
│   │   app1.exe
│   │   config.json
│   │
│   └───logs
│           error.log
│           output.log
│
├───App2
│   │   main.py
│   │   requirements.txt
│   │
│   └───data
│           sample.csv
│           data.json
│
└───Docs
    │   intro.docx
    │   design.pdf
    │
    └───Archive
            old_notes.txt
```
<h2></h2>
<h3>補足</h3>
コマンドプロンプトに入力した「/f」はオプション（スイッチ）と言います。
<br>「/f」の意味はfilesになります。
<br>ファイル名は要らず、フォルダー構成だけを見たいなら /f を外してみてください。
<br>ちなみに、「/a」もオプションとしてありtreeの表示の仕方を変更できます。

<h2></h2>
<h3>最後に</h3>
上記の手順で確認すればtxt形式で保存することが可能なので、エビデンスとして残すことができました。
<br>皆さんもぜひ活用してみてください。</br>
【Python】PythonのWeb開発の概要だけ把握

# はじめに
最近ハッカソンでPython（FastAPI）を使いかける機会があり少し勉強しました。使いはしなかったものの一応その概要とオブジェクト指向について思考整理としてアウトプットしておくことにしました。オブジェクト指向の方は記事として切り出したほうが読みやすい気がしたので別記事に書きます。
全く土地勘といえるほどの内容ではないのですが、Pythonを使ったWeb開発で急ぎでどういう技術がいい感じなのかというちょっとした概要を知りたい方の参考になれば幸いです。
# Python概要
- 動的型付け言語
- プログラミングスタイルとしてはオブジェクト指向が主流
- 型ヒント（Type Hints）と静的型チェックツール（mypyなど）を併用することで、Pythonの利点である「迅速な開発やプロトタイピングの容易さ」を維持しつつ、型安全性も両立することができる。
- データ分析や機械学習、Web開発など幅広い分野で使われている。

# よく使われるライブラリ（Web開発）
## Webフレームワーク
**FastAPI**
- 軽量で高速でモダンな機能も豊富
- API開発に特化している

**Flask**
- 小規模〜中規模開発に向いてる
- 軽量
- 迅速な開発に向いてる

**Django**
- 保守性と迅速な開発を両立したフルスタックフレームワーク
- 中規模〜大規模開発に向いてる

## テストツール
**pytest**
- 機能幅も広くサービス規模問わず使われている。

**unittest**
- 標準ライブラリ

## orm
**SQLAlchemy**
- 標準的立ち位置
- 大規模システムの開発に向いてる
- 複雑なDB構造を持つサービスの開発に向いてる

**Peewee**
- 小規模〜中規模開発に向いてる
- 軽量

**Tortois ORM**
- FastAPIと相性良い。
- 小規模〜中規模開発に向いてる

## マイグレーションツール
**Alembic**
- 標準的
- 複雑なクエリやスケーラビリティが重要なプロジェクトに向いてる
- 基本的にSQLAlchemyとセットで使われる
- 中規模〜大規模開発に向いてる

**simple-db-migrate**
- シンプル
- 小規模〜中規模開発に向いてる

## Linter
**Ruff**
- Linter、Formatter、import sortingを高い質で行うことができ、今のところ最も高速と言われているツール
- できて数年でGithubスター数も3.7万と勢いがある
- 比較的新しく、ドキュメントやコミュニティが成熟していない

**Flake8**
- シンプル
- 歴史が長く成熟しており、広く普及している。
- 小規模〜中規模開発に向いてる

**Pylint**
- 歴史が長く、成熟している
- 大規模開発に向いてる