OmniAICreator/Qiita-1.07M huggingface dataset:
Amazon Linux 2023にClaude Codeをインストールする方法


こんにちは！この記事では、Amazon Linux 2023環境にClaude Codeをインストールする方法を詳しく解説します。インストール中に発生する可能性のある問題とその解決策も含めていますので、スムーズにセットアップできるはずです。

## 前提条件

- Amazon Linux 2023環境
- インターネット接続
- 基本的なLinuxコマンドの知識

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

Claude Codeを使用するには、NodeJS 18以上が必要です。Amazon Linux 2023では、以下のコマンドでNodeJS 20をインストールできます：

```bash
sudo dnf install -y nodejs20 nodejs20-npm
```

インストールが完了したら、バージョンを確認しましょう：

```bash
node -v && npm -v
```

以下のような出力が表示されるはずです：

```
v20.19.2
10.8.2
```

バージョン番号は環境によって異なる場合があります。

## 2. Claude Codeのインストール

### 2.1 最初の試み（エラーケース）

通常、npmパッケージをグローバルにインストールするには、以下のコマンドを使用します：

```bash
npm install -g @anthropic-ai/claude-code
```

しかし、このコマンドを実行すると、以下のようなエラーが発生する可能性があります：

```
npm error code EACCES
npm error syscall mkdir
npm error path /usr/lib/nodejs20/lib/node_modules/@anthropic-ai
npm error errno -13
npm error Error: EACCES: permission denied, mkdir '/usr/lib/nodejs20/lib/node_modules/@anthropic-ai'
...
npm error The operation was rejected by your operating system.
npm error It is likely you do not have the permissions to access this file as the current user
```

これは、システムディレクトリに書き込む権限がないために発生するエラーです。

> **注意**: `sudo npm install -g`を使用することは推奨されていません。権限の問題やセキュリティリスクを引き起こす可能性があります。

### 2.2 解決策：npmのグローバルパッケージをユーザーディレクトリにインストールする

この問題を解決するには、npmの設定を変更して、グローバルパッケージをユーザーのホームディレクトリにインストールするようにします：

```bash
# npmのグローバルパッケージをインストールするディレクトリを作成
mkdir -p ~/.npm-global

# npmの設定を変更
npm config set prefix '~/.npm-global'

# PATHに追加
echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
```

### 2.3 Claude Codeのインストール（成功ケース）

設定を変更した後、再度インストールを試みます：

```bash
npm install -g @anthropic-ai/claude-code
```

今回は成功するはずです：

```
added 3 packages in 6s

2 packages are looking for funding
  run `npm fund` for details
```

## 3. インストールの確認

Claude Codeがインストールされたことを確認するために、バージョンを確認します：

```bash
claude --version
```

以下のような出力が表示されるはずです：

```
1.0.31 (Claude Code)
```

> **注意**: コマンド名は`claude-code`ではなく`claude`です。

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

### 4.1 コマンドが見つからない場合

`claude --version`を実行して「command not found」エラーが発生した場合は、以下の手順を試してください：

1. PATHが正しく設定されているか確認：

```bash
echo $PATH
```

`~/.npm-global/bin`がPATHに含まれているか確認してください。

2. シンボリックリンクが作成されているか確認：

```bash
ls -la ~/.npm-global/bin/
```

`claude`というシンボリックリンクが存在するはずです。

3. 新しいターミナルセッションを開始するか、以下のコマンドでPATHを再読み込み：

```bash
source ~/.bashrc
```

### 4.2 その他の問題

- **依存関係のエラー**: NodeJSのバージョンが古い場合は、最新バージョンにアップデートしてください。
- **ネットワークエラー**: インターネット接続を確認してください。
- **ディスク容量不足**: 十分なディスク容量があることを確認してください。

## まとめ

この記事では、Amazon Linux 2023環境にClaude Codeをインストールする方法を解説しました。主なポイントは以下の通りです：

1. NodeJS 20とnpmをインストール
2. npmのグローバルパッケージをユーザーディレクトリにインストールするよう設定
3. Claude Codeをインストール
4. `claude`コマンドで動作確認

これらの手順に従えば、権限の問題を回避しながら、Claude Codeを正常にインストールできるはずです。

何か質問や問題がありましたら、コメント欄でお知らせください。

## 参考リンク

- [Claude Code公式ドキュメント](https://docs.anthropic.com/claude/docs/claude-code)
- [npm公式ドキュメント - グローバルパッケージの設定](https://docs.npmjs.com/resolving-eacces-permissions-errors-when-installing-packages-globally)
Gitのerror: failed to push some refs to 'https://github.com/ファイル名'　を解決した

## エラー内容
ある日自分が作ったリポジトリで

```

git push origin main

```
を実行したらこんなエラーが出ました。

```

error: failed to push some refs to 'https://github.com/ファイル名'

```
これは**pushしようとしているファイルがもうすでに最新です！**
という意味でした。
なので、ひたすら**何か最新のファイルを更新しているのでは**とひたすら奔走していましたが、答えが見つからず...
すると、同期の方(開発経験者)から教えていただけました

## 理由
```

git pull

```

**を忘れていたためです。**
git pullを忘れているとどうやら出るエラーとのことで、リモートのブランチがローカルよりも進んでいる場合に発生してしまうエラーです。
エラーの根本的な理由は、リモートの main ブランチがローカルの main ブランチと合致していないため、直接的にプッシュできないということです。
つまり、**ローカルの変更をリモートにマージする前に、リモートの変更をローカルに適用する必要があった**
ということでした。

## 学び
今回の件で、エラー内容とは違う部分でエラーが起きることを学びました。
とはいえど、かなりGitを分かった気になっていたので、また使いながら覚えていくしかないと思いました...

## 最後に
**「もっとこうしろよ」**
や
**「○○の方がいいのに」**
などと言った意見がありましたら、Qiitaのコメント欄にてお願いします！
AWS WAFまとめ（マネージド for WAF）

## AWS WAFまとめ（マネージド for WAF）

### そもそもWAFとは
WAF（Web アプリケーションファイアウォール）とは、Web アプリケーションの通信をフィルター、監視、ブロックするためのソフトウェアまたは、ハードウェアのセキュリティ対策です。
WAF の代表的な用途には、SQL インジェクション、クロスサイトスクリプティングなど、アプリケーションの脆弱性を悪用した攻撃の遮断やアプリケーション層の DDoS 対策、不正なボットによるアクセスの遮断などがあります。
参考：https://aws.amazon.com/jp/waf/what-is-waf/


#### 2025年情報
推奨ルールの即時適用（マネージドルールなど）、コンソールの可視性が向上
詳細：https://aws.amazon.com/jp/blogs/security/introducing-the-new-console-experience-for-aws-waf/


#### 導入可能なルール
- マネージドルール
　AWSまたはパートナーが提供するマネージドルール
 - 独自のカスタムルール
　お客様が独自に作成可能なルール
　マネージドルールと組み合わせて作成可能


### マネージドルールとは？
- 事前に構成されたルールセット
- 脅威や脆弱性に対する攻撃方法に幅広く対応
- AWSの脅威リサーチチームによる作成、メンテナンスを実施
- ボット対策や不正なログイン試行対策ルールも提供（有償）
- 一部ルールを除き追加料金なしで利用可能

### WAFと連携するサービス
　API Gateway / CloudFront / ALB / AppSync / Cognito User pool / App Runner
　メトリクス → CloudWatch
　ログ → S3 / CloudWatch logs / Kinese Firehose


 ### ルールの決め方
 - ブラックリスト型（デフォルトアクションは許可）
　ルールに合致した場合はブロック
　一般向けのwebサイト等で利用
　
 - ブラックリスト型（デフォルトアクションは許可）
　ルールに合致した場合はブロック
　限られたユーザのみアクセスするケース


### マネージドルール for WAF種類
#### ベースラインルール
- 一般的な対策ルール
 　Core ルールセット（CRS）　OWASP10の脅威に基づく、一般的なWeb アプリケーションに適用可能な防御ルール （ルール数は定期的に更新される）
- Admin protection
　管理ページへの外部アクセスをブロックするルール
- Known bad inputs
　無効であることがわかっており、脆弱性の悪用または探索に関するリクエストパターン
※上記のルールグループのうち、１つ以上を選択して、ベースラインを設定する。

#### ユースケース別のルール  （一例）
　OSやミドルウェア、アプリケーションによって適切なルールを選択
- SQL database
　SQLインジェクション攻撃、SQLデータベースの悪用に関するリクエストパターンのブロック
 - PHP application
　安全でないPHP関数のインジェクションなど、PHP固有の脆弱性の悪用に関するリクエストパターンのブロック
- IPレピュテーションルールグループ
　アプリケーションのアクセス元のソースIPアドレスに基づいてリクエスをブロック
　攻撃の踏み台として使用されているIPリストの提供
- Bot Controlルールグループ（有償）
　ボットと判断させるトラフィックを検知し、それに基づいたアクションを行う
     - botに特化したマネージドルールを提供
         リクエストによってボットの種別を表すラベルを追加
     - 導入ステップとして
         まずは無償で。Bot ControlルールをWebACLに追加しなくてもメトリクス占めるBotの割合をレポートから確認可能。
         上記をもとに、導入の判断をし、Botルールを有効にしてさらに詳細をモニタリングできる
- Account Takeover Preventionルールグループ（有償）
　ログインページの不正アクセスの保護
    - クレデンシャルスタッフィング攻撃
    　流出した認証情報を利用したログイン試行の可視化と制御（固定のユーザー名でPWを変えてアクセスするなど）
    - ブルートフォース攻撃
    　パウワードのパターン総当たり入力で認証の突破を試みる

 #### レートベースルール
  特定の評価基準に合致したリクエストごとに、レート（時間単位のリクエスト数）の上限値を設ける
  IPやヘッダー値、国コードなどを集計キーでグループ化し、リクエスト数に基づいて受信リクエストを制限

  ### マネージドルールに役立つ機能
- スコープダウンステートメント
　マネージドルールへの例外条件（/api  で始まる場合は除外するなど）
　特定のリクエストパターンのみ、ルールグループに適用または除外する場合などに活用

- ラベル機能
　ルールにマッチした場合などにラベルを付与する機能
　ラベル値によってルールを実行できる
　CloudWatch メトリクスやログに追加させるのでモニタリングポイントの一つとして活用できる

 - カスタムレスポンス
　WAFでブロックされた際にカスタムレスポンスを返却。
  レスポンスコード403(200~500番台)、レスポンスボディ(html,Textなど)
　ラベル機能を使ってマネージドルールのアクションをカスタマイズ可能

 - カスタムリクエストヘッダー
　ラベル機能を利用可能
　カスタムヘッダをリクエストに挿入し、分析のためのフラグを設定する場合など

 - マネージドルールの自動更新の制御
 　ルールグループのバージョンを指定可能（デフォルトに設定すると最新に反映）
  本番環境は更新しない、任意のタイミングで更新したい場合などにバージョンを指定する対応が可能
  バージョンには有効期限がある。30日前からアラートを設定できる。バージョン期限切れはデフォルトになる。
  緊急セキュリティは自動適用される場合がある


### 料金
　Web ACL $1/月
　ルール　$1/月（最初の10ルールまで）
　リクエスト　$0.60/100万リクエスト

 - 有償マネージド
　Bot Control 1ドル/月 + 0.8ドル/100万リクエスト
　Account Takeover Prevention  1ドル/月  , 1ドル/100万リクエスト

 ### 実装時の注意点
　マネージドルールは「Count」モードでテスト推奨
　本番適用前に偽陽性の確認が重要
　CloudWatch Insightsでログ分析を活用


### 最後に
参考1：https://www.youtube.com/watch?v=ceQ7eU_jkD4
参考2：https://www.youtube.com/watch?v=OPM5gBvfsl8
参考3：AmazonQ等を使った質問
スキルだけじゃない。思考・感情・行動を整えるための読書記録【5月まとめ】

# はじめに

今月は「お金」「感情」「行動」「仕事」「自己理解」といったテーマで5冊を読みました。  
仕事にも私生活にもつながる気づきが多く、振り返る意味も込めて記録しておきます。  


# 📘 きみのお金は誰のため ―ボスが教えてくれた「お金の謎」と「社会の仕組み」

https://www.kinokuniya.co.jp/f/dsg-01-9784492047354

### なぜ読んだか
ひたすら稼ぎたい。だけどその前に「お金の勉強」は必要だと感じた。  
誰のためにどう使えばいいのか？そのヒントがあると思った。

### 感想
お金は一人ひとりには価値があっても、全体では価値がないという話が特に印象的。  
例え話が多くて、概念の理解がしやすかった。  
本を読んで満足するだけではなく、自分の中に落とし込んでこそ意味があると思った。  
わからなかったことは、普段の会話の中でも、後から調べるクセを持ちたいと感じた。


# 📘 ひらめき教室 「弱者」のための仕事論

https://shinsho.shueisha.co.jp/kikan/0827-n/

### なぜ読んだか
暗殺教室の作者がどんなふうに「ひらめき」を得ているのかに興味があった。  
再読になるが、今回はデザインとの対談があることも動機になった。

### 感想
人に何かを教えるとき、答えをすぐに渡す癖があるが、  
「わかるまでの過程」こそが学びなのだと気づいた。  
「技術だけに偏ると、本質（アイデア）を見失う」という言葉はエンジニアとしても共感した。  
自分の未熟さを感じるためにも、未知のことに飛び込む機会を作りたいと思った。


# 📘 わたしが「わたし」を助けに行こう -自分を救う心理学-

https://www.sunmark.co.jp/detail.php?csid=4108-8

### なぜ読んだか
最近、メンタル面で不調を感じていることがあり、その原因と向き合うきっかけにしたかった。  
また今後も自分を見つめ直す機会は必要だと感じた。

### 感想
感情の原因を探すのではなく、「それがある自分をどう扱うか」という視点は新しかった。  
これまで感情→原因探しで終わっていたが、それでは改善しないことに納得。  
本に書かれていた7ステップのワークを実際にやってみたいと思う。  
本に載っていた7ステップのワークを使って、まずは身近な人間関係の悩みと向き合ってみたい。


# 📘 「しやすい」の作り方

https://www.sunmark.co.jp/detail.php?csid=4168-2

### なぜ読んだか
「〜しやすい」環境があれば、仕事も日常も楽になると思ったから。  
表紙デザインにも惹かれたし、デザイン思考にもつながる内容がありそうだった。

### 感想
やりにくさ＝目的に沿った分け方ができていない状態だとわかり、すごく納得。   
行動経済学の考え方も交えつつ、机の上・会議・人間関係など身近な場面の事例が豊富で、すぐに試してみたくなる内容だった。
会議や仕事の進め方にも応用したい。
「任せてもらいたい時は、選択肢をあえて複雑にする」という逆転の発想も面白かった。


## 📘 感性のある人が習慣にしていること

https://book.cm-marketing.jp/books/9784295406402/

### なぜ読んだか
感性を大切にする人＝上品で魅力的だと感じ、自分もそうなりたいと思ったから。  
表紙の女性イラストが理想のイメージに近かったのも理由のひとつ。

### 感想
「話す言葉は、自分にインプットされたものしか出てこない」  
この言葉にハッとした。表現の幅がそのまま感情の理解度にもつながるかもしれない。  
他人と比べて落ち込むこともあるけれど、最終的には「自分のものさし」で選んでいくことが大事だと改めて思った。


# おわりに

5月は、目の前の課題を解決するというよりは、  
「どうありたいか？」「どう生きたいか？」に焦点を当てた読書が多かった印象です。

本から得たヒントをすぐ実践できなくても、  
頭の片隅に置いておくことで、私生活や仕事の中でふと活かせる瞬間が来る気がしています。
Render×Typstで日本語フォント（IPA明朝）を使う

はじめまして。モナディコスという屋号で**マニュアル代理作成**及び**作業効率化ツール作成**を始めました。
マニュアル代理作成では[Typst](https://typst.app/)を使用しています。それを応用して手軽にマニュアルを無料作成できる[無料自動マニュアル作成ツール](https://www.monadikos.jp/tools/pocket)を作成しています。
Renderで現在稼働中なのですが、運用するにあたり日本語フォントでこけたのでメモです。

# 背景
- [無料自動マニュアル作成ツール](https://www.monadikos.jp/tools/pocket)をTypst×flask×Renderで作成中
- Render上（Linux）では**デフォルトで日本語フォントが含まれていない**。
- Render.com 上でアプリをデプロイし、Typst を使って PDF を自動生成したい。
- 日本語テキスト（例：明朝体）を含むPDFを生成するには、日本語フォントを手動でインストールしてキャッシュさせる必要がある。

# 結論
1. .fonts に日本語フォント（例：IPA明朝）の .ttf を配置
2. fc-cache -fv .fonts を実行してキャッシュを再構築
3. Typstで明朝体のPDFがRender上でも正常に出力できたことを確認

# やったこと
1. render.yaml の設定（抜粋）
今回使用したフォントは[IPA明朝](https://moji.or.jp/ipafont/ipa00303/)です。色々ありますが、`TTFファイルの4書体パック(Ver.003.03)`をRender上でcurlコマンドでダウンロードしています。
```yaml
services:
  - type: web
    name: monadikos_LP_app
    runtime: python
    rootDir: project
    buildCommand: |
      mkdir -p typst
      curl -L https://github.com/typst/typst/releases/download/v0.13.1/typst-x86_64-unknown-linux-musl.tar.xz -o typst.tar.xz
      tar -xf typst.tar.xz
      cp typst*/typst typst/typst
      mkdir -p .fonts
      curl -LO https://moji.or.jp/wp-content/ipafont/IPAfont/IPAfont00303.zip
      unzip IPAfont00303.zip -d .fonts
      fc-cache -fv .fonts
      pip install -r requirements.txt
    startCommand: |
      export HOME=$(pwd)
      export PATH="$PATH:$(pwd)/typst"
      export FONTCONFIG_PATH="$(pwd)/.fonts"
      gunicorn app:app
```

なお、`HOME`のパスを書き換えていますが、これをしないと`FONTCONFIG_PATH`を設定してもフォントが読み込まれません。

:::note warn
buildCommandは主にファイルの展開
startCommandは環境変数の設定およびアプリの実行
という使い分けで理解しておいた方がよい（一敗）
:::

2.Typst 側のフォント指定
```typst
#text(
    ...
    font: "IPAMincho"
    ...
)
```

:::note warn
Renderの`ダッシュボード`>`MANAGE`>`Shell`からサーバーにSSHログインし
例えば`fc-list : family`コマンドでフォントがIPA明朝で設定されているか確認しても表示されない。
なぜなら、実行中の環境（IPA明朝がインストールされた環境）とSSHログインした環境は別物だから。
:::

以上がRender（Linux）でTypstに日本語フォント（IPA明朝）を適応する方法です。

ちなみに[無料自動マニュアル作成ツール](https://www.monadikos.jp/tools/pocket)を使うと、こんなのが出てきます。ちゃんと日本語で出力されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4120041/accbef0d-7987-48d4-a0db-8417b31ed08b.png)
[PyPI] Playground-common-utils 

# playground_common_utils

Pythonで汎用的な**ファイル操作・ディレクトリ操作・ログ出力**を支援するライブラリです。

---

## 🚀 インストール

インストール：

```bash
pip install playground-common-utils
```

## 📦 主な機能

### 確認系
- `is_exist(path)` : パスの存在確認
- `is_file(path)` : ファイルか確認
- `is_dir(path)` : ディレクトリか確認
- `is_match_first_keyword(target, first_keyword)` : 文字列の最初のキーワードが一致しているか
- `is_match_last_keyword(target, last_keyword)` : 文字列の最後のキーワードが一致しているか

### 作成系
- `create_file(path)` : 空ファイル作成
- `create_dir(path)` : ディレクトリ作成

### 取得系
- `read_current_dir()` : カレントディレクトリ取得
- `read_file(path)` : ファイル内容取得
- `read_list_dir(path)` : ディレクトリ内一覧取得

### 更新系
- `overwrite_file(path, content)` : ファイルに上書き
- `append_file(path, content)` : ファイルに追記

### 削除系
- `delete_file(path)` : ファイル削除
- `delete_dir(path)` : ディレクトリ削除

### 操作系
- `copy_file(src_path, dst_path)` : ファイルコピー
- `move_file(src_path, dst_path)` : ファイル移動

### ログ出力系
`logger.debug("Debug test")` : デバッグ ログ出力
`logger.info("Debug test")` : インフォ ログ出力
`logger.worning("Debug test")` : ワーニング ログ出力
`logger.error("Debug test")` : エラー ログ出力
`logger.critical("Debug test")` : クリティカル ログ出力

logger.set_level(WARNING)　: Warning以上のログ出力可能 / DEBUG,INFOログは出力しない 
---

## 🛠️ 使用例

``` python
ファイル作成・書き込み・削除
from playground_common_utils.files import *

# ファイル作成
create_file('sample.txt')

# ファイル上書き
overwrite_file('sample.txt', 'Hello World')

# ファイル削除
delete_file('sample.txt')
```

## ディレクトリ操作
``` python
from playground_common_utils.files import *

# ディレクトリ作成
create_dir('new_folder')

# ディレクトリ内一覧取得
items = read_list_dir('new_folder')

# ディレクトリ削除
delete_dir('new_folder')
```

## ログ出力
```python
from playground_common_utils.logger import logger
logger.debug("Debug test")
# 🐞 2025-05-20 21:45:19 [DEBUG] | <stdin> / <module>  [1] | Debug test

logger.info("Info test")
# ℹ️  2025-05-20 21:45:33 [INFO] | <stdin> / <module>  [2] | Info test

logger.warning("Warning test")
# ⚠️  2025-05-20 21:45:40 [WARNING] | <stdin> / <module>  [3] | Warning test

logger.error("Error test")
# 🚨 2025-05-20 21:45:51 [ERROR] | <stdin> / <module>  [4] | Error test

logger.critical("Critical test")
# 🔥 2025-05-20 21:45:58 [CRITICAL] | <stdin> / <module>  [5] | Critical test
```

## HTTP通信
```python
from playground_common_utils.logger import http, HTTP_Method

response = fetch(url="http://example.com", # Endpoint URL
      method=HTTP_Method.GET, # GET / POST / PUT / DELETE
      request_headers={"Content-Type": "application/json"}, # Default = {"Content-Type": "application/json"}
      request_dict={}) # python dict型 ⚠️ 内部的にjsonに変換しリクエスト送信します
```

## ⚙️ 対応バージョン

* Python 3.7以上

## 📄 ライセンス

MITライセンス

## 👤 作者情報

Author: Hiroki Umatani

playground-common-utilsは、実業務に直結するファイル管理作業の効率化を目指して開発されました。
営業・開発・レポート作成などのプロジェクトを圧倒的スピードで推進するための基盤ライブラリです。


PyPIはこちら
https://pypi.org/project/playground-common-utils/

システム開発・マーケティングに関しての知識はこちら
https://business-on.playground.style/

ビジネス課題・解決はこちら
https://roi-blog.playground.style/
VSCodeでLinux開発環境を構築する方法

## はじめに

同じ趣旨の記事が既にありますが、より簡単にまとめたものをメモ程度に残しておきます。
そんなわけで本記事では、VSCodeでLinux開発環境を構築する方法をお伝えします。
所要時間は20分程度です。
## 準備するもの
* Visual Studio Code

https://code.visualstudio.com/docs/?dv=win64user


* Linuxディストリビューション（本記事では**Ubuntu**）
**Microsoft Storeで検索してインストールしてください**。
:::note info
Linuxディストリビューションには様々な種類がありますが、個人的にはUbuntuが一番おすすめです。

Debian系:　  Ubuntu、Linux Mint、Debianなど。
Red Hat系:　 Fedora、CentOS、AlmaLinuxなど。
その他:　　　Arch Linux、Slackware、Gentooなど。﻿
:::
### 1.VSCode拡張機能のインストール
まず前提として、「**Japanese Language Pack**」「**C/C++**」「**indent-rainbow**」をすでに入手してある前提でお話しします。
VSCodeを起動して左にあるメニューバーの四角いアイコンをクリックし、検索欄で「WSL」と入力。するとおそらくこんなのが出てきます。

![スクリーンショット 2025-06-23 063319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4120439/dfa3e933-46dc-4ce8-81be-c2f22035c6f8.png)

これをインストールしてあげてください。
インストール後、先ほど挙げた3つの拡張機能を見ると、「**Ubuntuにインストール**」という文字が出ていると思います。これをクリックし、インストールを済ませておきましょう。
### 2.WSLのインストールと有効化
次に、タスクバーの検索窓に、`PowerShell`と打ち込みます。すると、

![スクリーンショット 2025-06-23 064454.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4120439/e68c9de1-c3c9-4214-aa7d-3311aeac0975.png)
こういった画面が出てくると思います。ここの、「**管理者として実行する**」を押し、「このアプリがデバイスに変更を与えることを許可しますか？」で「**はい**」を押してください。

PowerShellが起動したら、

```powershell
wsl --install
```
正常に終了したら、WSLを有効化します。

```powershell
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
```

**再起動を促されたら**、「Y」と入力、**または手動で**PCを再起動してください。
### 3.Ubuntuの初期設定＆VSCodeの起動
あらかじめインストールしておいたLinuxディストリビューションを起動します。すると、初回起動時にユーザー名とパスワードを設定できます。パスワードは後々使うので、簡単なものにしておいたほうが便利です。**必ず覚えておきましょう。**

初期設定が完了したら、次のコマンドをそれぞれ打ち込みます。
```bash
sudo apt update
sudo apt upgrade -y
```
コマンドが正常に終了したら、Ubuntuで作業環境を作成します。
```bash
#お好みの名前で作業ディレクトリを作成
mkdir VSCode
```
```bash
#作成したディレクトリへ移動
cd VSCode
```
```bash
#VSCodeを起動
code .
```
![スクリーンショット 2025-06-23 084850.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4120439/cc2bedcc-36be-4878-a36a-3bab907881b1.png)

VSCodeが起動し、左下に上画像のようなマークが出れば成功です。おつかれさまでした。
ESP32-C3 SuperMini BLE ミニキーボード（その2）

# 背景と目的

普段は Mac をメインPCとして使い、Windows PC をサブで使う場合は、MacからRDPでWindowsを操作しています。
Windows に USキーボード（102キーボード）を設定していますが、唯一不便を感じるのが、IMEのオン/オフです。今は、タスクバー右の「A」「あ」をマウスクリックして切り替えていますが、キー操作で切り替えられないのが不便。

USキーボードを使用しているので、「変換」「無変換」キーが無いのは当然ですが、109キーボードを接続しても、スペースバーの左右にある「変換」「無変換」キーは まったく機能しません（押しても反応しない）。
_もちろん、IMEの設定で「変換」「無変換」キーに IMEのオンとオフを割り当てているにもかかわらず、です。_

https://qiita.com/nak435/items/65060d680f236c2a6d30

_キー スキャンツールで調べてみると、 USキーボード（102キーボード）設定の場合は、「変換」「無変換」キーが JPキーボード（109キーボード）設定のときとは 違う仮想キーコードに変換されているのが確認できます。深追いしておらず理由は分かりません。_

---

そこで、↓ 以前の記事で紹介した ミニキーボード で、IMEのオン/オフを切り替えるようにするのが、今回の記事の主旨です。

https://qiita.com/nak435/items/aef8a384efd65446a66a

_IMEの設定で Ctrl＋Spaceに「 IMEのオン/オフ 」を割り当てていますが、Macも同じキーコンビネーションで、入力モードの切り替えを行っている関係で、RDPの先のWindowsに Ctrl＋Space を入力することができない、という背景も関係しています。_


# sketch（抜粋）

ボタンに対応した キーコードの送出の部分だけを示します。
全体のコードは、[以前の記事](https://qiita.com/nak435/items/aef8a384efd65446a66a#sketch)を参照してください。

```c:sketch.ino（抜粋）
  if (sw1on) {
    Keyboard.press(KEY_LEFT_CTRL);
    Keyboard.press(' ');
    delay(100);
    Keyboard.releaseAll();
  }
  
  if (sw2on) {
    Keyboard.press(KEY_HOME);
    delay(100);
    Keyboard.releaseAll();
  }
  
  if (sw3on) {
    Keyboard.press(KEY_END);
    delay(100);
    Keyboard.releaseAll();
  }
  
  if (sw4on) {
    Keyboard.write('0');
    delay(50);
    Keyboard.write('0');
    delay(50);
    Keyboard.write('0');
  }
```

- <ins>SW1 に割り当てた「 Ctrl＋Space 」が一番の目的です。</ins>
- SW2、SW3 に「 HOME 」「 END 」キーを割り当てました。これは 60％のUSキーボードを使用しているので、単純に「 HOME 」「 END 」キーが無いためです。
- SW4 に割り当てるキーは何でもよくて、とりあえず 今回は「 000 」（ゼロを3つ）にしてみました。

当然ながら、今回の BLEスリープブロッカー & ミニキーボードは、Windowsに接続して使います。

これで、RDPの先のWindowsの IMEオン/オフが楽になりました。

_キーボードから指を離してミニキーボードのボタンを押すため、少しも楽になっていない、というツッコミがありそうですが・・・。スペースバーの手前に置ける細長いキースイッチを作成するか、フットペダルスイッチがベストかも。_


<br><br>**以上**
五年ぶりのAWS SAA再受験　合格体験記

# はじめに

こんにちは、@tetoteto です。

先日、**5年ぶりにAWS SAA（Solutions Architect – Associate**を受験してみました。

**結果は……780点（ギリギリ合格！）**

手応えはあまりなかったですが、なんとかなりました。
本記事では、復帰勢が最短5時間で合格したSAA再受験体験記をお届けします。
同じように、昔試験を合格したけども改めて勉強したい！といった方の参考になればいいなと思っています。

# 筆者スペック
 
所属：システム開発

業務でAWSを利用中（VPC / EC2 / IAM / Lambda / S3 / CloudWatchなどの主要サービスは定常的に触れている）

過去にSAA・SAP取得済（ただし 5年以上前）

**知識のアップデートと棚卸し のために受験してみようと決意**

 ## 受験のきっかけ
久しぶりにAWS認定の動向をチェックしたところ、SAAの試験バージョンがC03に更新されているなーと思っていて、業務知識と資格知識のギャップが気になったこと。また、 **昔の自分の知識って通用するのか？** を確認したくなったので、軽いノリで受験決定。

 ## 勉強方法や時間
本腰入れて学習したのは試験1週間前から。実質的な勉強時間は約5時間。

具体的な学習法
📘 テキストを通読（流し読み＋重要サービスの確認）

📝 **「忘れてた知識」「仕様変更されていた項目」**　はノートにまとめる

✅ 章末問題を解いて 勘と知識のズレを修正

<br>

使用書籍はこちら：
📖 [AWS認定資格試験テキスト SAA-C03対応版（改訂第3版）](https://www.amazon.co.jp/dp/4815617945/)



 ## 自宅受験 → 風呂場NGでピンチ
 既知の情報かもしれませんが、タイトルの通り試験前に焦りました。。PearsonVUEの**自宅受験（OnVUE）** を選択。事前準備や試験開始までは順調でしたが……

📛 まさかのバスルーム拒否
「静かでモノが少ない場所＝お風呂場」→ NG判定（Bathroom is not allowed）急遽、自室の散らかった机を爆速で片付ける羽目に。ちなみに、モニター：タオルをかければOKでした。

 ## 試験の内容と印象
試験構成は65問 / 130分。シナリオベースが多めな印象で、複数のサービスの組み合わせがわかっていて正解につながる印象。これは前の規格と差はない。
<br>
ただし、過去からマネージドサービスが増えているので、その分の出題範囲が広くなった印象でした。
<br>
約20問くらいは2択で迷った。運の要素もあり。大きく問題集から問題がずれていないことと、汎用的な知識の掛け合わせでうまいこと点が取れた印象です。

## 最後にひとこと
「ギリギリでも、合格は合格！」
現場でAWSに触れていた＋過去に勉強をしていたので、時間が短時間で済みましたが、はじめて受ける際は1～2か月ほど腰を据えた方がいいのかもしれないです。
CC Service Agent 関係 未解決



+ [Is anyone getting correct answers to the FAQs from the CC Service Agent?](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000J6AdX)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8ea829bd-98c8-fd8f-3369-2c03e8e12435.png)

シリアル番号 : 382946183-652774 障害ごとに異なる
トレースId : -1925387367　同じ障害内容だったら同じ

:::note alert
An error occurred. Try again, or contact Salesforce Customer Support and provide this error ID: 382946183-652774 (-1925387367)

UNKNOWN_EXCEPTION. An error occurred. Try again, or contact Salesforce Customer Support and provide this error ID: 382946183-652774 (-1925387367)
:::

:::note
最終更新: 先週、Trailhead Academy のセッションに数回参加し、Agentforce Toronto ツアーにも直接参加しました。専門家の仮説では、RAG は統合データでのみ機能するため、プレイグラウンド組織には Data Cloud が設定されておらず、高度なエージェント機能がないとのことです。 
:::

+ [Error when adding new agent](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Kg9qv)

:::note alert
An internal server error has occurred Error ID: 1748391593-1187620 (-1260243220). 
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/cbc0d1a8-2c74-e9f7-e2df-1e62124ea57c.png)

+ [Getting error while creating the agent](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KCXvp)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/10355be5-44ed-0e9f-9500-e32b7ddb0473.png)

+ [Issue with Configure Agentforce for Service Agent](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KD0df0AD)

:::note alert
Unfortunately, there was a problem. Please try again. If the problem continues, get in touch with your administrator with the error ID shown here and any other related details. Error ID: 1935249262-74588 (-168662919)
:::

+ [Configure Agentforce for Service: Topics not showing in Agentforce Builder, No "New" button](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000TkxZd)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/8e14af31-1e8a-49a0-851f-1f5808d6bd28.png)
JSの奥深さ―私がJSをおすすめする理由

こんにちは、やーはりです。
私は中学2年生で、趣味と実践をかねてWebアプリやゲームを作っています。
今回は「なぜ私がJavaScript（JS）を使い続けているのか、おすすめしているのか」、そして他の言語との違いや、今勉強している他の言語についても正直にまとめました。この記事を読んでくれた方も、ぜひ自分に合った言語やツールを見つけ、思い切って挑戦してみてください。

---

## 出会いは「うおぉ、かっこいい！」から

私がJavaScriptを知ったのは小学校6年生のときです。何の変哲もないJavaScriptで書かれたコードを見て、「**うおぉ、なんだこれ、かっこいいいい！！！**」と感動したのがすべての始まりでした。

もちろん最初は書けるわけがなく、まずは**Scratch**で変数や関数、条件分岐などの基本を学びました。Scratchがあったから、プログラミングに「楽しい！」と思えたし、次の一歩を踏み出せたと思っています。

---

## HTML・CSSの壁

JSを始めたとき、HTMLとCSSも同時に学びました。HTMLは構造を作るだけなのでわかりやすかったけど、CSSは今も苦戦しています。思い通りにレイアウトやデザインを整えるのって、本当に奥が深い…。だからこそ、JSで「動き」を作ることにどんどんのめり込んでいきました。

さらに、なぜ今もJSを使い続けるのかというと、他の言語も試したものの、環境構築や実行までの手間、ブラウザとの相性の良さという点でJSの手軽さと即応性が自分に合っていたからです。たとえばPythonではサーバーを立てる準備が面倒に感じたり、Goではビルド作業に少し手間取ったりしました。JSは思いついたらすぐに試せる、そのスピード感が自分にとって大きな理由です。

---

## なぜ今もJSを使うのか

### 1️⃣ とにかく使いやすい

ブラウザさえあればすぐに動く、環境構築がほぼ不要、この手軽さが私にとっての最大の魅力です。

```html
<h1 id="title">Hello!</h1>
<script>
  document.getElementById("title").innerText = "こんにちは、やーはりです！";
</script>
```

こういう「ちょっとした動き」も、すぐに試せる。アイデアが思いついたら、迷わずその場で形にできるんです。

---

### 2️⃣ 拡張性がすごい

JSは、最初は簡単なWebページに動きをつけるだけだったけど、今では**React, Next.js, Node.js, Three.js**…いろんなフレームワークやライブラリでどこまでも成長できる言語です。

Webアプリ、チャットサービス、3D表現、サーバーサイド…。JS一つで色々な世界に挑戦できるのは、他の言語にはない魅力です。

---

### 3️⃣ 汎用性の高さ

もはや「ブラウザ専用の言語」ではありません。デスクトップアプリ（Electron）、モバイルアプリ（React Native）、サーバー（Node.js）、ゲーム（Phaser, Three.js）など…
JSさえ知っていれば、作れる世界がどんどん広がる。だからこそ、使い続けています。

---

## 他の言語も学んでいます

もちろん、今は**JavaScriptだけにこだわっているわけではありません**。いろんな言語にチャレンジしています。

✅ **Python**
文法がシンプルで読みやすい。自動化や簡単なスクリプトを書いてみたり、データ処理の基礎を学んでいます。機械学習やデータ分析にも少しずつ興味が出てきました。

✅ **Go**
高速でシンプルなバックエンドを書くのに憧れて学び始めました。ビルドが速く、エラーが少なくて済むところが気に入っています。

✅ **Ruby**
コードが簡単で書くのが楽しくなってきます。特にRuby on RailsなどWeb開発に強いフレームワークが魅力的で、人間っぽい自然な文法が心地よく、書いていてワクワクします。将来的にはRailsを使ったサービス開発にも挑戦してみたいです。

どの言語も、それぞれの特徴や得意な分野があって面白いです。でも、「作りたいものにすぐ近づける」のは今のところJSが一番だと感じています。

---

## JSで作ったもの・作りたいもの

✅ 簡単な便利ツール
✅ 小さなゲーム
✅ 自作SNSの試作

そしてこれから作りたいものは…
🌟 自分だけのSNS
🌟 2Dホラーゲーム（Unity+C#とJSの組み合わせで）
🌟 動画配信サービスの試作

---

## まとめ

JSは、私にとって\*\*「作りたい気持ちをすぐ形にできる道具」\*\*です。これからもJSを軸にしつつ、Python・Go・Rubyといった他の言語も学んで、作れる世界を広げていきたいです。
作りたいもの、作りたい世界に合わせて、もっと柔軟に、もっと成長していこうと思っています。
【簡単Kubernetes】Kubernetes における Cascade Propagation Policy の整理



Kubernetes の `kubectl delete` コマンドでは、リソースを削除する際に、対象オブジェクトに関連付けられた従属（dependent）オブジェクトの扱いを制御できます。その際に使用されるのが **Cascade Delete（カスケード削除）** および **PropagationPolicy（伝播ポリシー）** です。

---

## 1. `--cascade` オプションとは

`kubectl delete` コマンドの `--cascade` フラグは、対象リソースの削除時に関連するリソース（従属オブジェクト）も一緒に削除するかどうかを指定します。

| オプション          | 説明                                             |
|---------------------|--------------------------------------------------|
| `--cascade=true`    | 依存するリソースも一緒に削除する（デフォルト）   |
| `--cascade=false`   | 依存リソースは削除せず、親オブジェクトのみ削除（Orphan 相当） |

> ⚠️ `--cascade` オプションでは `Foreground` を明示的に指定することはできません。

---

## 2. PropagationPolicy とは

より詳細な制御をしたい場合、`kubectl` の `--cascade` に代わって API リクエストの `deleteOptions.propagationPolicy` を指定することができます。

### 選択可能な値

| 値             | 意味と挙動                                                                 |
|----------------|------------------------------------------------------------------------------|
| `Orphan`       | 従属リソースを削除せず残す（孤立させる）                                     |
| `Foreground`   | まず従属リソースを削除してから親リソースを削除（ブロッキング削除）         |
| `Background`   | 親リソースは即時削除され、従属リソースはバックグラウンドで非同期に削除される |

---

## 3. 実際の使い分けと注意点

- **--cascade=true** は実質的に `propagationPolicy=Background` と同等の挙動です。
- **--cascade=false** は `propagationPolicy=Orphan` に相当します。
- `propagationPolicy=Foreground` を使用するには、`kubectl` から直接ではなく、YAML や API 経由で `deleteOptions` を明示的に設定する必要があります。

```yaml
# 例: Foreground による削除
apiVersion: v1
kind: DeleteOptions
propagationPolicy: Foreground
```

---

## 4. 補足

`kubectl` のバージョンや、削除対象のリソースの種類によっては挙動が異なることもあるため、テスト環境で事前に確認することを推奨します。

---

## 参考

- [Kubernetes Documentation - Garbage Collection](https://kubernetes.io/docs/concepts/architecture/garbage-collection/)
- `kubectl delete --help`
TSの鬼 第3回：配列・オブジェクト・ユニオン型を制す

## はじめに

前回

https://qiita.com/mukai3/items/409674872b4b11f24d72

TypeScriptの真価が発揮されるのは、複数の型が複雑に絡むときである。
その第一歩が、「配列型」「オブジェクト型」「ユニオン型」の理解である。

これらを使いこなせば、現実のデータ構造をTypeScript上で精密に表現できるようになる。
今回はこの3つを中心に、実践的な使い方と設計上の考え方を整理する。

---

## 配列型：繰り返しの構造に型を与える

配列は同じ型の要素が並ぶ構造である。型の表現は以下のようになる。

```ts
const numbers: number[] = [1, 2, 3];
const names: string[] = ["Alice", "Bob"];
```

別の書き方として、ジェネリック形式もある。

```ts
const values: Array<boolean> = [true, false];
```

通常は `number[]` などの形式が読みやすいため、そちらが好まれる。

### 多次元配列

```ts
const matrix: number[][] = [[1, 2], [3, 4]];
```

構造が深くなるほど、**どの階層にどの型があるか**を明確にしておく必要がある。

---

## オブジェクト型：構造に意味を持たせる

現実のデータは、複数の情報が1つの塊として表現されることが多い。
オブジェクト型はその基本単位である。

```ts
const user: { id: number; name: string; isActive: boolean } = {
  id: 1,
  name: "Yuki",
  isActive: true
};
```

ただし、同じような型を何度も書く場合は、型エイリアスを使うべきである。

```ts
type User = {
  id: number;
  name: string;
  isActive: boolean;
};

const user1: User = { id: 1, name: "Taro", isActive: true };
```

このようにすることで、可読性と保守性が向上する。

---

## ユニオン型：1つの値が複数の型を取り得るとき

ユニオン型は、 **「この値は A または B の型を取る」** というケースを明示できる。

```ts
let status: "success" | "error" | "loading";
status = "success";
status = "error";
```

これは文字列リテラルのユニオンであり、**“限定された選択肢”** として非常に強力である。

もちろん、プリミティブ型にも使える。

```ts
let value: number | string;
value = 10;
value = "ten";
```

このような使い方は、**柔軟性と型安全のバランス**を取る上で重要である。

---

## 実務上の設計ポイント

1. **配列に対しては要素型を明確に定義すること**
2. **オブジェクトは型エイリアスまたはinterfaceで共通化すること**
3. **ユニオン型は限定された入力値（状態や分類）に使うと有効である**

特にユニオン型は、状態管理や条件分岐において **“漏れのない設計”** を可能にする。
ただし、乱用は危険。変数に入る型は1つに限定する方がもちろん良い。

---

## まとめ：複数の型を制御する技術を身につける

配列・オブジェクト・ユニオン型は、

* 複数のデータをどうまとめるか？
* 構造にどう意味を持たせるか？
* 選択肢をどう制限するか？

という観点から、TypeScript設計の核心と言える。

この3つをマスターすることで、コードの「意図」「設計意識」「防御力」は飛躍的に向上する。

---

## 次回予告

『TSの鬼 第4回：anyは敵か味方か？unknownとの違いを知れ』

次回はTypeScriptの闇とされる`any`型と、意外と知られていない`unknown`型の違いについて深堀りする。
N-Prologで数学遊び 集合、位相、置換、群論

# リラックスして遊び
N-Prologの開発を一通り終えてしばらくノンビリしようと思いました。かねてより途中にしていた飯高茂先生の「Prologで作る数学の世界」に取り組んでいます。群論の入門書を手にしたのは長男が生まれる頃でした。30年くらい経ちますかねぇ。飯高先生の本のコードを動かしつつ、どういうことをやっているのかを探っていました。おおよそ飯高先生のやろうとしていたことがわかったような気がしました。そこで自分流のやり方、書法でゼロから作ることにしました。モジュールにしてあります。　use_module(math). でライブラリが起動します。そのことについてご紹介しつつ数学遊びの一端をご紹介したいと思います。


# 群論遊び
飯高先生の本では順列を置換とみて置換に関する乗法、逆元、単位元といった計算を用意します。そしてそれらを応用して群論に取り組みます。群論は演算が所定の定義に収まっていれば群となります。置換も演算ですのでうまくやれば群となります。それを自分で計算実験するのが楽しいです。


ライブラリに準備した述語は述語形式のものと数学手表記に似せた中置記法のものがあります。ここでは飯高先生流に中置記法の方を用います。


- 乗法
 ```
N-Prolog Ver 4.42
?- use_module(math).
yes
?- X isq [2,3,1]*[2,3,1].
X = [3,1,2] .
yes
?- 
```

- 逆元
```
?- X isq 1//[2,3,4,1].
X = [4,1,2,3] .
yes
?- 

?- perm_ident(3,X).
X = [1,2,3] .
yes
?- 
```
- べき乗
```
?- X isq [3,1,2]^3.
X = [1,2,3] .
yes
?- 
```
位数が３であることがわかります。おもしろい！


groupe_createを使って置換にインデックスを与えます。

```
?- groupe_create(perm,3).
yes
?- listing.
p([1,2,3],1).
p([1,3,2],2).
p([2,1,3],3).
p([2,3,1],4).
p([3,1,2],5).
p([3,2,1],6).
yes
?- 
```

3点集合の順列に番号を付します。それらを置換とみて計算します。isgを使います。
```
?- Z isg 2*2.
Z = 1 .
yes
?-
```

これは次の計算と同じことです。
```
?- Z isq [1,3,2]*[1,3,2].
Z = [1,2,3] .
yes
?-
```

# 群となるためには
p/2の置換について積の計算があり次の条件を満たす必要があります。

(1) (ab)c = a(bc)
(2) 単位元がある。
(3) 逆元がある。


これらを確認する述語 groupeを作ればこれが群になっているかどうかを確認することができます。


# 会話しながら動かして学ぶ
ChatGPTにしつこく質問しながら群のことを学んでいます。そしてPrologの述語を書いてみます。一発では期待した結果は得られません。多くの場合は理解不足です。ChatGPTに質問を繰り返しつつ理解を深めます。深い理解に達したときに正しく動作します。これは楽しい経験です。学校で押し付けられる勉強とは異なります。自ら没頭して勉強することにより深い喜びが得られることでしょう。

N-Prologのmathはレゴブロックの部品のようなものです。素朴な部品を組み合わせることにより多様なものを作ることができるでしょう。ぜひ、数学をお楽しみください。ドキュメントMATH.mdにライブラリの仕様を整理ていあります。
どうぞお楽しみください。


https://github.com/sasagawa888/nprolog
【継承、オーバーライド、ポリモーフィズム】スーパーマリオとファイアマリオって何が違うの？

しいたけです。
好きなキノコはキクラゲです。（あだ名しいたけなのに）
継承などの学習をしていたところ、記事のネタを思いついたので、今回のテーマは継承、オーバーライド、ポリモーフィズムです。
# マリオの変身について
突然ですが、**スーパーマリオ**と**ファイアマリオ**の違いを説明できますか？
服の色だけではありません。ファイアボールが使えるようになります。
また、スーパーだとクリボーに2回触るとミスになりますが、ファイアだと3回まで耐えられます。（初代だとどちらも2回というのは置いておいて）
他に大きな変化はありますか？特にないですよね。
つまり **「ファイアマリオはスーパーマリオをベースに作られたもの」** と言えます。
言い換えればファイアマリオはスーパーマリオの能力を受け継いでいます。
**これこそが「継承」です。**
# 継承とは？
```java
class FireMario extends Mario {
    private int fireballCount;

    public FireMario() {
        super(); // 親クラスのコンストラクタを呼び出す
        this.fireballCount = 10; // ファイアボールを持っている
    }

    // 新たにファイアマリオ特有の能力を追加
    public void throwFireball() {
        if (fireballCount > 0) {
            fireballCount--;
            System.out.println("Fire Mario throws a fireball!");
        } else {
            System.out.println("No fireballs left!");
        }
    }
```
```Mario```というクラスがあったとき、```extends```によって継承が行われ```FireMario```クラスを生成します。
この時、元となっている```Mario```を**スーパークラス**、```extends```された```FireMario```を**サブクラス**と言います。

# オーバーライドとは？
```java
class Mario {
    private int health;
    // 中略
    public Mario() {
        this.name = "Super Mario";
        this.health = 2; // スーパーマリオの体力を2に設定
    }
    public void showStatus() {
        System.out.println(name + " has " + health + " health.");
    }
}

class FireMario extends Mario {
    private int fireballCount;
    private int health; // ファイアマリオの体力を独自に持たせる
    //中略
    @Override
    public void showStatus() {
        super.showStatus(); // 親クラスのメソッドを呼び出す
        System.out.println("Fire Mario has " + fireballCount + " fireballs left.");
    }
}
```
今回の例では、```showStatus```において、スーパーマリオの状態だと体力が2であることを示しています。
ここでファイアマリオだとファイアボールを持っている個数まで表示させたいです。しかしこのままでは表示できません。
これをどのようにして解決しているか。「もう一度定義している」のです。
スーパークラスにも、サブクラスにも```showStatus```があります。
ここでファイアマリオの場合に体力とファイアボールの個数を出力させるように、```showStatus```を定義しなおします。
そのあとに別のクラスでそれぞれのインスタンスの```showStatus```を実行すると、スーパーマリオとファイアマリオごとに別々の出力内容となります。
# ポリモーフィズムとは？
少し例を変えてみましょう。
マリオとルイージのジャンプ力についてです。ルイージはマリオより高くジャンプできるという設定があります。
```java
class Player {
    public void jump() {
        System.out.println("The player jumps!");
    }
}

class Mario extends Player {
    @Override
    public void jump() {
        System.out.println("Mario jumps 2 meters high!");
    }
}

class Luigi extends Player {
    @Override
    public void jump() {
        System.out.println("Luigi jumps 3 meters high!");
    }
}
```
ここで大事なことは **「マリオもルイージもジャンプができる」** ということです。 ここに付随した情報である **「ルイージはマリオより高くジャンプできる」** といった情報を加えます。
ジャンプという動作を細分化して、マリオは2メートル、ルイージは3メートルジャンプできるといった情報を加えます。
このように、継承されたクラスごとに異なる動作がなされています。**これが「ポリモーフィズム」です**。
# オーバーライドとポリモーフィズムって一緒じゃね？
ここでこう思った人もいるでしょう。それは違います。
クリボーとクリボンぐらい違います。下記のように覚えてください。
**オーバーライド > ポリモーフィズム**
前提として、**オーバーライドされていないとポリモーフィズムできません**。
スーパークラスで定義されたメソッドを「再定義」することがオーバーライドです。そして再定義されたメソッドを「処理・実行する」ことがポリモーフィズムです。**ポリモーフィズムはオーバーライドされたメソッドを活用している**のです。
# まとめ
**継承**：```extends```によってスーパークラスの情報を持ち出し、サブクラスを作成する
**オーバーライド**：メソッドの再定義
**ポリモーフィズム**：オーバーライドされたメソッドを処理・実行する

ちなみにクリボーのモチーフは「しいたけ」です。It's-a me?????
VZ editorのネイティブアプリ化の試み

VZ editorは、Intel 8086 / MS-DOS(PC-DOS)上のアセンブラによるアプリケーションです。

祝：ソースコード公開：VZエディタ移植の方法と成果。註釈 coding(123)
https://qiita.com/kaizen_nagoya/items/5551be98dcbed8f41949

# macOS対応
インテルMacが出た時に、MacOS上で動かそうと思い、5.25インチFDDに入っているソースコードを5.25インチFDまたはUSBメモリに格納してもらおうと知人に依頼したことがあります。

残念ながら、データが届く前に、自宅のMacOS機器が、ARMベースになってしまいました。

インテル上でのmacOS対応プロジェクトはここで頓挫します。

# arm対応
次は、CPUのARM対応です。
残念ながら、IntelCPUのアセンブラは詳しくても、ARMのアセンブラはちんぷんかんぷんです。

TOPPERS/SSPのARM対応のプロジェクトにも参加していました。
TOPPERS of the Yearも受賞メンバの３人のうちの一人です。

残念ながら、MISRA C対応と、ソースコードReview以外は、あまり役立っていません。
ごめんなさい。

# Android 対応か, iOS対応か。

ソースコードは媒体変換してもらえない間に、c.mosさん、中村満さんのご尽力により、ソースコード公開していただけました。

祝VZエディタソースコード公開
https://qiita.com/kaizen_nagoya/items/baad23cf4a041ce845a9

こりゃ、.iOSか、Androidか、Linuxか、macOSに移植しなきゃってなった。

本家のGithubでも、下記資料中のGithubでも、ブランチを作ってもらっても、いくつかのプロジェクトが始めることを想定しています。

1. Windows 10/11版
過去のWindowsのCMD上での修正情報が入手できればわりと簡単だと思います。

2. intel Linux 版
IntelCPUの場合だとわりと簡単なような気がします。

3, ARM Linux版
Raspberry PIをを想定しています。

4. ARM android版
自宅にはAndroid Padがあります。

5. ARM iOS版
手持ちのiPhoneと、iPADを想定しています。

どのプロジェクトがどれくらいでできるかはわかりません。

4, 5が、ネイティブアプリケーションに相当します。

6. Intel クラウド版
すでにクラウド上では動いているっぽい。

オープンソース化されたVZエディタをブラウザ上で動かしてみる
https://qiita.com/Takaraya/items/785ac9319c3934e30703

早い話が、仮想８０８６環境があればうごく感じかも。

# 関連資料
誰でもわかるVZエディタ。0から始める。
https://qiita.com/kaizen_nagoya/items/afe6c4cdccbfdd94baab
学習19日目

# 今日学んだこと
font-awesomeの導入とlink_to、form_withでの使用方法(submit)

# 内容
## font-awesomeの導入
① 公式サイトから会員登録・ログイン
② ログイン後画面の「easy installation on web」に記載のコードを、application.html.erbに追加
(例)
```
  <script src="https://kit.fontawesome.com/hogehoge.js" crossorigin="anonymous"></script>
```
※「hogehoge.js」の部分は、ユーザーにより異なる。

上記で完了。

## link_toでの使用方法
link_to do - end の間にアイコンを入れる。
(例)
```
<%= link_to root_path do %>
  <i class="fa-solid fa-pen-to-square"></i>
<% end %>
```
※ 「i class -」の部分は、font-awesome公式サイトで検索し、表示させたいアイコンを選択する。

## form_withでの使用方法(submit)
button_tagを使用する。
(例)
```
<%= button_tag type: "submit" do %>
  <i class="fa-solid fa-magnifying-glass"></i>
<% end %>
```
※「i class -」の部分は、font-awesome公式サイトで検索し、表示させたいアイコンを選択する。

# 感想
Rails7.0以降は、多くのサイトで扱われている方法でアイコンを表示できなかった。
検索する際に、自分の環境と合っているかを確認してから参考にすべきだと感じた。
【作ってみた】軽快動作の"後で読む"アプリ with Rust + Tauri

## はじめに
　こんにちは、はじめてのQiita投稿になります。どういった形にせよ発信というものをして こなかったのですが、この度` Rust + Tauri `でとあるツールを作成してみたので筆を執ってみました。一つの実例として何か参考になれば幸いです。
　` そんなのいいから何を作ったんだよ`という声が聞こえてきそうなので、本題へ。

## 作ったもの
 
　ブラウジング中、気になった記事などを、**"後で読む"** ためのツールを作りました。
### 現状の機能と特徴
- **クイック保存**：`Ctrl + Shift + S`のホットキーで、アクティブなブラウザ情報を保存
- **タグで検索**：保存した記事に任意のタグをつけ、 タグで記事を検索可能
- **軽量動作**：4.6MB程度のリソースで、バックグラウンド稼働
### 技術構成
```
フロントエンド: HTML/CSS/JavaScript
バックエンド: Rust (Tauri)
データベース: SQLite（rusqlite)

その他、機能実現のためPowerShellを併用　※後述
```
　以下で公開しておりますので、とにかく見てみたい方はどうぞ。
 https://github.com/frkavka/Atode-GUI

#### なぜ作ったか？
- Rustに興味はあった
    - `「なんか凄く速くて軽いらしい…」`との、風の噂で興味はあった
    - `「でも学習コストが重いらしい…」`との、風の噂でなかなか手が動いていなかった
    - `「案ずるより産むが易し、１回やってみよう」`と、ふと思った
    - Rustを使いつつGUIを実現するために、Tauriというものがあると知り、使ってみた
　
- 普段の「とりあえず」を解決するものも、ちょっと欲しかった
    - `とりあえずブラウザのタブで開きっぱなしにしておけ`
    - `とりあえずブックマークに入れとけ`
    - `とりあえずホーム画面に置いとけ`（※スマホ未対応）
    
　`→ でも探すのめんどくさいので、つくっちゃお。`

…と、まぁ。こんな感じで、ものぐさが動いてみた結果と思っていただければ幸いです。


## 機能の紹介
百聞は一見に如かずと言いますので、簡単なGIFを用意しました。
　![Atode_animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4120027/fb6948bf-e987-41bd-a50b-a29aabf6defb.gif)

現状、上記機能はWindowsのみですが、
**気になったページをとりあえずしまっておく**には良いかと思い、実装してみました。

## 利用ユースケース
- ブラウジング中に見つけた面白そうなニュース記事を保存
- 技術系のナレッジ集として、よく使うページを保存
- ブラウザタブやブックマークの整理

完全な代用とするには足りていないところもありますので、学習がてら改善していければいいかと思っています。

## ちょっとだけ、技術的なこと
#### やって分かったRustのいいところ
    ・ コンパイルエラーが親切 : 読めば何が悪いのか分かりやすい
    ・ コンパイルが通れば安心 : 通すまでは大変だけれども…
    ・ 動いてしまえばサクサク : 大事。
　所有権等の"面倒な"部分は割愛します。ただ、それによって高パフォーマンスが実現できるわけでトレードオフなのだろうと思います。
#### なぜPowerShellなのか
- 現在のタブのURLを取得するのを実現するにあたり、手っ取り早かったから
    - **からくり** : ` Ctrl + L → Ctrl + C `によるアドレスバーのコピー 
    - 個人ツールなので、やりたいことができればよかろうなのだ
    - ブラウザごとのAPI仕様の把握が手間

## おわりに
　まだまだ習熟するべき点が多々ありますが、こうして一度Rustを使って開発してみたことで、その威力を知ることができました。今後本ツールの改善を通して、あるいはアイデアがあればまた別の開発を通して、学んでいく価値があるのではないかと思いました。
　本記事がRustやTauriに興味がある方の一助になれば、またツールが役立つものであれば幸いです。

## 参考リンク

[GitHub Repository](https://github.com/frkavka/Atode-GUI "Atode-GUI")
[Rust公式ガイド](https://doc.rust-jp.rs/book-ja/title-page.html "Rust公式")
[Tauri公式](https://tauri.app/ja/ "Tauri")
AWS利用料を自然言語で簡単に知る方法はありますか？

こんな新機能もありますが、

https://aws.amazon.com/about-aws/whats-new/2025/06/amazon-q-developer-optimize-aws-costs/

残念ながら英語のみです。。日本語で聞きたい。。

。。。

それ、Strands Agent Builderでできます！

https://github.com/strands-agents/agent-builder

> Strandsのインタラクティブなエージェントツールキットは、独自のカスタムAIエージェントとツールの構築、テスト、拡張を支援するように設計されています。Strands Agent Builderを使用すると、専用のエージェントの作成、カスタムツールの開発、複雑なAIワークフローの構築など、すべてターミナルから行うことができます。

Strands Agent Builderは、その名の通りAIエージェントの作成を支援するツールキットという位置づけのようですが、Strands Agentsのビルドインツールが組み込まれたCLIとしても動作します。

で、Strands Agentsのビルドインツールには`use_aws`という **「任意のAWS APIをいい感じに呼び出してくれるツール」** があります。

まとめると、

Strands Agent Builderは自然言語でAWSを操作するツールが含まれたCLIです

と言ってもいいでしょう。

:::note warn
任意のAWS APIには、「AWSのリソースを作ったり削除したり」も含まれます。更新系のAPIの場合には実行前に確認メッセージが表示されます思いますが、十分注意してご利用ください。
:::


## 最速手順

AWS CloudShellで実行するのが早いと思います。

1. UVをインストールします

    ```shell
    curl -LsSf https://astral.sh/uv/install.sh | sh
    ```

1. Strands Agent Builderを起動します

    ```shell
    uvx --from strands-agents-builder@latest strands
    ```

    :::note
    内部でAmazon BedrockのClaude 3.7 Sonnetが呼び出されます。事前にモデルの有効化をしてください
    
    - 東京リージョンのCloudShellで、バージニア北部のBedrockを使用する場合
        ```shell
        AWS_REGION=us-east-1 uvx --from strands-agents-builder@latest strands
        ```
    
    - 東京リージョンのCloudShellで、東京リージョンのClaude Sonnet 4を使用する場合
    
    ```shell
    uvx --from strands-agents-builder@latest strands --model-config '{"model_id": "apac.anthropic.claude-sonnet-4-20250514-v1:0"}'
    ```
   :::

    `~` で入力待ちになれば、チャットが開始できます。

    ![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/1a811e2a-958b-4f8e-936a-dda560bda544.png)


さあ、チャットにこのように入力しましょう。

**今月のAWS利用料を教えて下さい**
【決定版】コピペでOK！macOS で動く Emacs のカラー＆日本語対応印刷コマンド

# Mac の Emacs でバッファを印刷したい

macOS が PostScript をサポートしなくなったので、Emacs で ```M-x ps-print-buffer``` としても、バッファの表示内容を印刷できなくなりました。これは困った。

いろいろと試行錯誤したところ、
1. ```htmlfontify``` を使ってバッファの表示内容を HTML にする
1. 生成された HTML ファイルをブラウザで開く
1. ブラウザの印刷機能を使ってそれを印刷する

というステップを踏むのが最適という結論に達しました。

ただ、これを全部手動で行うのは面倒なので、上記 1 および 2 を自動化する関数を Gemini に書いてもらいました。

# 関数全文

下記を ```init.el``` の適当なところに貼り付けて、```M-x print-perfectly``` と入力してください。自動的にブラウザが開くはずですので、これを印刷するだけでオーケーです。

```lisp
(defun print-perfectly ()
  (interactive)
  (let* (
         (html-buffer (htmlfontify-buffer))
         (raw-html-content (with-current-buffer html-buffer
                             (buffer-string)))
         (kill-buffer html-buffer)

         (html-no-font-size (replace-regexp-in-string "font-size: [^;]+;" "" raw-html-content))
         
         (print-css
          (concat "<style type=\"text/css\">\n"
                  "body, pre { font-size: 12pt; font-family: 'Hiragino Kaku Gothic Mono ProN', monospace; }\n"
                  "</style>"))

         (final-html (replace-regexp-in-string "<head>"
                                               (concat "<head>\n" print-css)
                                               html-no-font-size))

         (temp-html-file (make-temp-file "emacs-print-" nil ".html"))
         (command (format "open -a \"/Applications/Google Chrome.app\" '%s'" temp-html-file)))

    (with-temp-file temp-html-file
      (insert final-html))
    
    (message "Google Chromeで印刷用ページを開いています...")
    (shell-command command)))

;; キーに割り当てる
(global-set-key (kbd "C-c p") 'print-perfectly)
```

# きれいに印刷できるでしょ

これでまたひとつ、Emacs ライフを快適にすることができました。
必死で関数を書いてくれた Gemini Pro 2.5 に感謝です。
Java解説 20260623

## Java SE
Javaにおいて、基本的な機能をまとめたもの。

## Java EE
javaSEをインストールした後に使用できる。

## JVM
クラスファイルを読込み、バイトコードを解釈し、クラスを実行する。

## バイトコード
Javaソースコードがコンパイルされた後の中間形式のコード
<br>

[オラクル認定資格教科書 Javaプログラマ Bronze SE(試験番号1Z0-818)](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Bronze-SE-%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-818/dp/479816206X/ref=pd_lpo_d_sccl_1/357-5313211-9846263?pd_rd_w=VQCzo&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=JRR4W9RKV32K4AXF1WRZ&pd_rd_wg=l7VoD&pd_rd_r=1d465f85-0562-4b51-b523-77f8486c1508&pd_rd_i=479816206X&psc=1 "オラクル認定資格教科書 Javaプログラマ Bronze SE(試験番号1Z0-818)")
プロデル、調査 その54

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

# 練習問題
コマンドプロンプトの結果を取得せよ。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/d81da326-3183-4493-8300-93365a93f18a.png)

# サンプルコード

```
「dir /w」をコマンド実行して報告する

```

以上。
プロデル、調査 その53

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

# 練習問題
クリップボードを使え。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/67b2051d-5e90-46ab-b378-aea8b506df28.png)

# サンプルコード

```
クリップボードをクリアする
「こんにちは」をクリップボードへコピーする
クリップボードの内容を表示する


猫画像という画像(「1.png」)を作る
クリップボードをクリアする
猫画像をクリップボードへコピーする
クリップボードの内容を報告する

```

以上。
【個人メモ】AWS re:Inforce 2025で発表された注目のセキュリティアップデートまとめ

AWS re:Inforce 2025にてAWSのセキュリティに関する最新アップデートがたくさん発表されました。
その中で個人的に注目、使いたい新サービスをまとめました。
https://aws.amazon.com/jp/blogs/aws/aws-reinforce-roundup-2025-top-announcements/

また、AWSから公式のrecapイベントの案内も出てたので、詳細を聞きに行こうと思います
https://pages.awscloud.com/eib-security-reinforce-recap-250724-reg.html?trk=5125dfc4-685e-4c0c-b2d7-97fd0943c0f4&sc_channel=el

## ①WAFのコンソール画面が一新
こ①前少し触れた件です。WAFの設定方法が全く新しくなり、今までよりもシンプルな操作で設定することができるようになりました。
また、受けた攻撃の一覧を可視化することができ、攻撃の検知、対策がやりやすくなってます。
https://qiita.com/tkazuaki0820/items/be667159134b7614b9e5

## ②AWSのACMで発行したパブリック証明書のエクスポートが可能に
https://aws.amazon.com/jp/blogs/aws/aws-certificate-manager-introduces-exportable-public-ssl-tls-certificates-to-use-anywhere/
AWSで発行した証明書をAWS外の環境で利用したり、ACMで発行した証明書をEC2で利用することができるようになりました。
※厳密にはACM for Nitro Enclavesを使えばEC2上でも利用できたが、要件が厳しかった。
少し調べましたが、既存で使ってた某セキュリティ証明機関に発行してもらうよりも安くなりそうな見込みです。

## ③新しい IAM Access Analyzer 機能で重要な AWS リソースへの内部アクセスを検証する
AWS公式で日本語の解説ブログの発表されました。
https://aws.amazon.com/jp/blogs/news/verify-internal-access-to-critical-aws-resources-with-new-iam-access-analyzer-capabilities/
AWSリソース単位で、現在付与されてるアクセス権限の一覧を見ることができるようになりました。

----------以下はPreview版なので東京リージョンでは2025/6/23時点手で使用不可------------------
## ④NetworkFWとTrangitGWの紐づけが可能になりました。(Preview)
https://aws.amazon.com/jp/about-aws/whats-new/2025/06/aws-network-firewall-transit-gateway-native-integration/
今まではVPC単位でNetworkFWの設計を行う必要があったのですが、TrangitGWに紐づけることで、NetworkFWの設計を集約することができます。

## ⑤AWS Shield Network Security Director (Preview)
https://aws.amazon.com/jp/blogs/aws/new-aws-shield-feature-discovers-network-security-issues-before-they-can-be-exploited-preview/
AWSリソース(EC2,VPC等)をAmazonQを通じて、セキュリティ可視化、評価を行ってくれる機能です。
今までのAWS Shield は外部公開用の一部のAWSリソースにしか対応してなかったのです、それ以外のAWSサービスのセキュリティ評価もできるようになるみたいです。

## ⑥AWS Security Hubの刷新
https://aws.amazon.com/jp/blogs/aws/unify-your-security-with-the-new-aws-security-hub-for-risk-prioritization-and-response-at-scale-preview/
AWS Security Hubが刷新され、今までのAWS Security HubはAWS Security Hub CSPMになりました。
新しいAWS Security HubはGuardDuty,Macie,Inspector,旧AWS Security Hubを統合したものになり、
上記、4つのセキュリティサービスでの異常検出結果等の情報を一つの画面で一元管理できるようになります。
i-フィルター for BUFFALOが機能しない

## :yin_yang: 経緯
我が家には小学校の男の子が二人おり、いつもドタバタと騒々しい毎日です。最近ではスマートフォンやタブレットを片時も離すことがないほど、ゲームや動画に釘付けとなってしまいました。

そこで親として心配になってくるのが、フィッシングサイトなどの詐欺・悪質サイトへのアクセス、暴力関連やポルノ系サイトなど有害サイトの閲覧です。
我が家ではルータとしてBUFFALO(バッファロー)製品を使用していたので、これをそのまま使用しながら有害サイトのフィルダリング機能が実現できないか試行してみました。

## :yin_yang: フィルタリング機能を実現
こちらのページを参考にして、BUFFALOルータにi-フィルターを設定してみました。

i-フィルター for BUFFALO の設定方法
https://www.buffalo.jp/support/faq/detail/124141729.html

下図は設定手順の一部です。こんな感じの設定画面で設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1601544c-ea36-46e4-add2-c863d7933955.png)

何とか設定を終え、さっそくフィルタリング機能が効くかどうかを試したところ、、、

## :yin_yang: フィルタリング機能が効かない

さぁ、これで我が家も安心、と安堵したのもつかの間、試しに有害サイトを検索・表示してみたところ、何の障害もなくスムーズに表示されてしまいました。
フィルダリング機能が効いていないではないですか。

よく見ると、i-フィルター for BUFFALO製品の説明には、下図の赤線のように
**「フィルターされるセッションは、デフォルトセッション中のHTTP通信のみとなります。」**
と書かれていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/399135/1c2c68c1-df6a-493d-8624-558f898fac40.png)

そんな、、、大事なことを小さい文字で書くなんて。
今このご時世、HTTP(http://～) で閲覧するサイトなんてほとんど存在しないのに!

※ほとんどのWEBサイトはセキュリティを考慮したHTTPS(https://～) に置き換わっています。

これは騙された気分です。
デカデカと宣伝しているのに、肝心な部分は小さい文字で注意書きしていて、実際には使えない。
BUFFALOというブランド名ですっかり信用されられていましたが、残念です。
おまけにi-フィルタの年間契約まで済ませていたのに!

宣伝
https://www.daj.jp/company/release/2009/0323_01/


## :yin_yang: ご注意
本記事は2025年6月に執筆しています。
製品の改善やアップデートにより事象が変わることがありますので、ご了承お願いします。

本記事はあくまで「i-フィルター for BUFFALO」という製品サービスについて書いただけで、デジタルアーツ社が提供する有害サイトフィルタリングサービス「i-フィルター」が良くないというわけではありませんので、お間違え無いようお願いいたします。


## :yin_yang: さて、どうするか

私の場合は、我が家のインターネットの出入り口となっているルータでフィルタリングをしたいというのが目的です。各端末ごとにフィルタリングソフトをインストールして制御するという方法も取ることができます。

同じルータ製品のメーカに、アイ・オー・データというメーカがあります。
BUFFALOがダメだったので、アイ・オー・データに乗り換えてフィルダリング機能を実現できないか、これから試してまいります。

本記事にご意見・ご要望がありましたらおよせください
GitHub Actions: pushとpull_requestを両方指定する必要はない理由

GitHub ActionsでCIを設定する際、多くのチュートリアルで以下のような設定を見かけますが、実は**両方指定する必要nない**ケースが多いです。

```yaml
on:
  push:
    branches: ["**"]
  pull_request:
    branches: ["**"]
```

この記事では、なぜ両方指定する必要がないのか、どちらを選ぶべきかについて解説します。

## 問題点：重複実行が発生する

### 何が起こるか

`push` と `pull_request` の両方を指定すると、以下のような流れで**CIが2回実行される**ことがあります：

1. `feature` ブランチにコミットをプッシュ → **CI実行（1回目）**
2. そのブランチでプルリクエストを作成 → **CI実行（2回目）**

### 具体例

```yaml
name: Rails CI
on:
  push:
    branches: ["**"]      # すべてのブランチのプッシュで実行
  pull_request:
    branches: ["**"]      # すべてのブランチへのPRで実行
```

この設定で以下の操作を行うと：

```bash
git checkout -b feature/new-function
git commit -m "新機能追加"
git push origin feature/new-function  # ← 1回目のCI実行
# GitHubでPRを作成                    # ← 2回目のCI実行（重複！）
```

## 解決策：pushのみで十分

### 推奨設定

```yaml
name: Rails CI
on:
  push:
    branches: ["**"]
```

### なぜpushのみで十分なのか

`push` トリガーだけで以下のすべてのケースをカバーできます：

1. **開発ブランチでの作業** → プッシュ時にCI実行
2. **PR作成時** → すでにブランチでテスト済み
3. **PR更新時** → 追加コミットのプッシュでCI実行
4. **マージ時** → マージコミットのプッシュでCI実行
5. **mainブランチへの直接プッシュ** → プッシュでCI実行

### メリット

- ✅ **重複実行の回避** → CIリソースの節約
- ✅ **シンプルな設定** → 管理が容易
- ✅ **一貫した動作** → どのブランチでも同じようにテスト実行

## 例外：用途別に使い分けるケース

場合によっては、異なる目的でトリガーを使い分けることもあります：

### パターン1: mainブランチのみprotectedにする

```yaml
on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]
```

- `push`: mainブランチの品質保証
- `pull_request`: PRのマージ前チェック

### パターン2: 異なるジョブを実行する

```yaml
name: CI
on:
  push:
    branches: ["**"]
  pull_request:
    branches: ["main"]

jobs:
  test:
    if: github.event_name == 'push'
    # 全テストを実行

  quick-check:
    if: github.event_name == 'pull_request'
    # 軽量なチェックのみ実行
```

## 実際のプロジェクトではどうなっている？

多くのOSSプロジェクトでは、以下のような設定が採用されています：

### Ruby on Rails本体

```yaml
on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
```

### 多くの小〜中規模プロジェクト

```yaml
on:
  push:
    branches: ["**"]
```

## 結論

**一般的なプロジェクトでは `push` のみで十分です。**

```yaml
# 推奨設定
name: Rails CI
on:
  push:
    branches: ["**"]

jobs:
  test:
    runs-on: ubuntu-latest
    # ... your CI steps
```

### 使い分けの指針

- **小〜中規模プロジェクト** → `push` のみ
- **大規模プロジェクト** → 用途に応じて使い分け
- **mainブランチ保護が重要** → `pull_request` も併用

重複実行を避けて、効率的なCIパイプラインを構築しましょう！

## 参考記事

- [GitHub Actions — Run on Push or Pull Request, but Not Both - Future Studio](https://futurestud.io/tutorials/github-actions-run-on-push-or-pull-request-but-not-both)
- [Events that trigger workflows - GitHub Docs](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows)
VIM

# VIM
VIMでこれだけあれば通常使用する分には困らないコマンドを、時々しか触れなかったために書き出してみると、案外と多くは無かった件。
後日追記予定有り。

Esc
:w, :wq, :q, :q!
ファイル先頭 gg ファイル末尾 G
指定行に移動 123456G
行数表示 :set number

iは現在位置から
Iは行頭文字から
aは現在位置の一文字右から
Aは行末
o下に行を作成して
Oは上に行を作成して