OmniAICreator/Qiita-1.07M huggingface dataset:
シェル（Bash）のテストでシェル内のコマンドの戻り値をエラーにする方法

シェル（Bash）のテストでエラー分岐の処理を確認するために、シェル内のコマンドの戻りをエラーとさせた時の方法を残しておきます。

# 1. 環境
+ OS : CentOS Linux release 8.5.2111
+ bash : GNU bash, バージョン 4.4.20(1)-release (x86_64-redhat-linux-gnu)

```console:実行結果
[root@centos85 ~]# cat /etc/redhat-release
CentOS Linux release 8.5.2111
[root@centos85 ~]# bash --version
GNU bash, バージョン 4.4.20(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2016 Free Software Foundation, Inc.
ライセンス GPLv3+: GNU GPL バージョン 3 またはそれ以降 <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
[root@centos85 ~]#
```

# 2. テスト対象シェル

テスト対象のシェルは以下の通り。
（わかりやすくするために簡単なシェルにしています。）

```bash:sample.sh
#!/bin/bash
FILE_PATH=/tmp/sample.txt
echo "処理開始"
touch FILE_PATH
rm -f FILE_PATH
RET=$?
if [ $RET == 0 ]; then
  echo "ファイルの削除に成功しました。"
else
  echo "ファイルの削除に失敗しました。"
fi
echo "正常終了"
exit 0
```

このシェル（`sample.sh`）を実行すると以下の通り正常終了します。
```console:実行結果
[root@centos85 test]# ./sample.sh
処理開始
ファイルの削除に成功しました。
正常終了
[root@centos85 test]#
```

`rm -f`コマンドをエラーとして、上記のシェルの`if`文の`else`を実行させたいと思います。

# 2. ダミーシェルの登録
以下のダミーシェル（`dummy_rm.sh`）を用意します。

```bash:dummy_rm.sh
#!/bin/bash
function rm(){
  echo "ファイル削除コマンドエラー"
  return 1
}
```

以下のコマンドでダミーシェルを読み込みます。

`. ./dummy_rm.sh`

```console:実行結果
[root@centos85 test]# . ./dummy_rm.sh
[root@centos85 test]#
```

読み込んだ関数`rm`関数を`declare`コマンドで参照してみます。
`declare -fp rm`

```console:実行結果
[root@centos85 test]# declare -fp rm
rm ()
{
    echo "ファイル削除コマンドエラー";
    return 1
}
[root@centos85 test]#
```

さらに、`export`コマンドで、`rm`関数を環境変数として設定します。
`export -f rm`

```console:実行結果
[root@centos85 test]# export -f rm
[root@centos85 test]#
```

`rm`を`declare`コマンドで参照してみます。
`declare -fp rm`

```console:実行結果
[root@centos85 test]# declare -fp rm
rm ()
{
    echo "ファイル削除コマンドエラー";
    return 1
}
declare -fx rm
[root@centos85 test]#
```

これで、`sample.sh`を実行した際に、シェルの中で`rm`コマンドを実行すると、ダミーシェルの`rm`関数が呼ばれるようになります。

# 3. テスト対象シェルを実行

テスト対象シェル（`sample.sh`）を実行すると、`rm`の実行でダミーとして登録した`rm`関数が呼ばれ、今度は以下の通りエラーとなります。

```console:実行結果
[root@centos85 test]# ./sample.sh
処理開始
ファイル削除コマンドエラー
ファイルの削除に失敗しました。
正常終了
[root@centos85 test]#
```

# 4. 環境変数等の戻し

以下のコマンドで環境変数から`rm`を削除します。
`export -fn rm`

```console:実行結果
[root@centos85 test]# export -fn rm
[root@centos85 test]#
```

`declare`で確認してみます。
`declare -fp rm`

```console:実行結果
[root@centos85 test]# declare -fp rm
rm ()
{
    echo "ファイル削除コマンドエラー";
    return 1
}
[root@centos85 test]#
```
`declare -fx rm`の部分が削除されています。

最後に`unset`コマンドで`rm`関数を削除します。
`unset -f rm`

```console:実行結果
[root@centos85 test]# unset -f rm
[root@centos85 test]#
```

`declare`で確認してみます。
`declare -fp rm`

```console:実行結果
[root@centos85 test]# declare -fp rm
-bash: declare: rm: 見つかりません
[root@centos85 test]#
```

これでダミーの`rm`関数が削除され、元の状態に戻りました。

---

以上
StabilityMatrix で Stable Diffusion をインストール

久しぶりにStablediffusionを起動。
以下のエラーが発生

```
ImportError: cannot import name 'Undefined' from 'pydantic.fields'
```

```
C://user/デスクトップ/hoge
```


と、日本語文字列を含むパスにStablediffusionをインストールしているので windows power shellから修正しようとすると文字化けしてエラーになる。

ということで最初からインスコしまーす

# StabilityMatrixとは？

guiにて
Stablediffusion シリーズを一気にインストールできる

参考
https://romptn.com/article/43286


# ダウンロード

https://github.com/LykosAI/StabilityMatrix?tab=readme-ov-file
からダウンロードできる。

下の方に windows10,11 があるのでクリック。
自動でダウンロード開始

# インストール

zip ファイルを "一度解凍して" クリックしてインスコ開始。
後々バグの原因になるので日本語を含むパスにはインストールしないこと。

今回は protable モードを使用しません。

あとは
https://romptn.com/article/43286

に書いてある手順でインスコできる。

# バグる
https://note.com/kurogane_himaki/n/ndb673a673310
の手順で修正可能。

# eagle の設定

https://qiita.com/ma7ma7pipipi/items/dedc66616d1ac9160d65
を参考にやって下さい。

stablediffusionに拡張を入れるだけでOKです。
スクラム開発で複雑さを最小限に抑える方法


## はじめに

スクラム開発は、アジャイル開発手法の一つとして広く採用されています。しかし、プロジェクトが進むにつれて複雑さが増し、管理が難しくなることがあります。この記事では、クラウドベンダーのサービスを活用しながら、スクラム開発における複雑さを最小限に抑える方法について解説します。

## 1. シンプルなアーキテクチャを選ぶ

まず、プロジェクトのアーキテクチャをシンプルに保つことが重要です。複雑なアーキテクチャは、開発や運用の負担を増やすだけでなく、バグの原因にもなります。クラウドベンダーが提供するマネージドサービスを活用することで、インフラの管理を簡素化し、開発に集中することができます。

### 例: AWS LambdaとAPI Gateway

例えば、AWS LambdaとAPI Gatewayを組み合わせることで、サーバーレスアーキテクチャを実現できます。これにより、サーバーの管理が不要になり、コードの開発に専念できます。

## 2. 継続的インテグレーションとデリバリー (CI/CD) の導入

CI/CDパイプラインを導入することで、コードの品質を保ちつつ、リリースサイクルを短縮できます。これにより、複雑なリリースプロセスを自動化し、手動でのミスを減らすことができます。

### 例: GitHub ActionsとAWS CodePipeline

GitHub Actionsを使ってテストとデプロイを自動化し、AWS CodePipelineでリリースプロセスを管理することで、効率的なCI/CDパイプラインを構築できます。

## 3. スプリントの計画とレビューを徹底する

スクラム開発では、スプリントの計画とレビューが重要です。これにより、チーム全体が現在の進捗状況を把握し、次のステップを明確にすることができます。スプリントの計画時には、タスクを小さく分割し、優先順位をつけることが重要です。

### 例: JIRAやTrelloの活用

JIRAやTrelloなどのプロジェクト管理ツールを使って、タスクの管理と進捗の可視化を行うことで、チーム全体のコミュニケーションを円滑にし、複雑さを減らすことができます。

## 4. フィードバックループの強化

定期的なフィードバックループを設けることで、問題を早期に発見し、迅速に対応することができます。これにより、プロジェクトの複雑さを増やさずに、品質を保つことができます。

### 例: レトロスペクティブの実施

スプリントの終了後にレトロスペクティブを実施し、チーム全体で振り返りを行うことで、改善点を見つけ出し、次のスプリントに活かすことができます。

## 5. ドキュメントの整備

プロジェクトのドキュメントを整備することで、チームメンバー全員が同じ情報を共有し、理解することができます。これにより、コミュニケーションの齟齬を減らし、複雑さを最小限に抑えることができます。

### 例: ConfluenceやNotionの活用

ConfluenceやNotionなどのドキュメント管理ツールを使って、プロジェクトのドキュメントを一元管理することで、情報の共有とアクセスを容易にすることができます。

## まとめ

スクラム開発における複雑さを最小限に抑えるためには、シンプルなアーキテクチャの選定、CI/CDの導入、スプリントの計画とレビューの徹底、フィードバックループの強化、そしてドキュメントの整備が重要です。クラウドベンダーのサービスを活用することで、これらのプロセスを効率的に実行し、プロジェクトの成功に繋げることができます。
APIのバージョン管理を行うためのベストプラクティス


## はじめに
APIのバージョン管理は、ソフトウェア開発において非常に重要な要素です。特にクラウドベースのサービスを利用する場合、APIの変更が頻繁に発生するため、適切なバージョン管理が求められます。この記事では、APIのバージョン管理を行うためのベストプラクティスについて解説します。

## なぜAPIのバージョン管理が重要なのか
APIのバージョン管理が重要な理由は以下の通りです：

1. **互換性の維持**: 新しい機能を追加する際に、既存のクライアントが影響を受けないようにするため。
2. **変更の追跡**: どのバージョンでどの機能が追加されたか、バグが修正されたかを明確にするため。
3. **デプロイの柔軟性**: 異なるバージョンのAPIを同時に運用することで、段階的な移行が可能になるため。

## バージョン管理の方法
APIのバージョン管理にはいくつかの方法があります。以下に代表的な方法を紹介します。

### URLにバージョンを含める
最も一般的な方法は、URLにバージョン番号を含めることです。例えば、以下のようにします：

```
https://api.example.com/v1/users
https://api.example.com/v2/users
```

この方法の利点は、バージョンが明確に分かることと、異なるバージョンのAPIを同時に運用できることです。

### ヘッダーにバージョンを含める
もう一つの方法は、HTTPヘッダーにバージョン情報を含めることです。例えば、以下のようにします：

```
GET /users HTTP/1.1
Host: api.example.com
API-Version: 1
```

この方法の利点は、URLがシンプルになることですが、クライアント側でヘッダーを設定する手間が増えます。

### クエリパラメータにバージョンを含める
クエリパラメータを使用してバージョンを指定する方法もあります。例えば、以下のようにします：

```
https://api.example.com/users?version=1
```

この方法は、URLにバージョン情報を含める方法と同様に簡単ですが、クエリパラメータが増えるとURLが複雑になる可能性があります。

## バージョン管理のベストプラクティス
APIのバージョン管理を行う際には、以下のベストプラクティスを守ることが重要です。

### 明確なバージョニングポリシーを持つ
バージョン番号の付け方や、どのような変更がバージョンアップに該当するかを明確に定義しておくことが重要です。例えば、セマンティックバージョニング（Semantic Versioning）を採用することが一般的です。

### ドキュメントを整備する
各バージョンのAPIの仕様や変更点を詳細に記載したドキュメントを用意することが重要です。これにより、開発者がどのバージョンを使用すべきかを判断しやすくなります。

### 互換性を保つ
可能な限り後方互換性を保つように設計することが重要です。大きな変更が必要な場合は、新しいバージョンをリリースし、旧バージョンを段階的に廃止する計画を立てることが推奨されます。

### テストを徹底する
各バージョンのAPIが正しく動作することを確認するために、徹底的なテストを行うことが重要です。特に、異なるバージョンのAPIが同時に運用される場合は、互換性テストを行うことが必要です。

## まとめ
APIのバージョン管理は、ソフトウェア開発において避けて通れない重要な課題です。適切なバージョン管理を行うことで、互換性を維持しながら新しい機能を追加することが可能になります。この記事で紹介したベストプラクティスを参考に、効果的なAPIのバージョン管理を実現してください。

## 参考文献
- [セマンティックバージョニング](https://semver.org/lang/ja/)
- [API設計のベストプラクティス](https://www.example.com/api-best-practices)
SafariでCSSが反映されなかった話

## 経緯
先日、サイトを作っていた際にクライアント様からある指摘を受けました。
どんな指摘かと言いますと、

「iPhoneで見ると文字がズレてるんですけど、、、」


先輩からは
1パーツ作るごとに検証ツールでレスポンシブして、挙動をきちんと確認してね。
と言われていたので、サイト制作ではそれを心がけていました。
もちろんやっていたつもりだとか
確認不足だとかそういうことがあったのかもしれません。
急いで確認してみました。

すると、Chromeで見たかぎり特にそのような挙動は見られず、、

どういうことだ？と思い、
クライアント様から指摘のあったiPhoneで確認してみました。
たしかに文字がズレていました！

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3803947/16873f89-a3ee-743f-4807-7193d52c8f88.png">


## 解決方法
さっきChromeで見たときは何もなかったのになぜだ？
さらに調べると、ブラウザによってCSSのスタイルが崩れることがある！
ということが判明しました。
そこでSafariの検証ツールで見ると、
書いていたCSS自体はきちんと反映されていました。

調べると、SafariはChromeよりもCSSにて詳細な指示が必要だということもわかりました。
文字を重ねるために、Chromeではpositionを設定せずとも対応してくれたのですが
Safariではそれが必要だったのです。
そこで今回の解決策としてSafariにだけCSSを適用されるようにしました。

```CSS:書き方
::-webkit-full-page-media, :future, :root クラス名or要素名..{
/* safariにのみ適用したいCSSプロパティを入れる */
  left: 0;
}
```

::-webkit-full-page-media, :future, :root クラス名or要素名..を使うことで
SafariにだけCSSが適用されます。
これをCSSに追加してみると

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3803947/05d036c3-604f-4300-8fa4-a7e8aa4a3af4.png">

綺麗に文字の上に重なりました。


## まとめ
今回の指摘をいただいたことでCSSハックというものがあることを知れました。
基本的にChromeを使って制作していて、他のブラウザでの確認は盲点でした。
とても良い経験になりました。
これから制作していくときは他のブラウザでの挙動もしっかり意識していこうと思います。

＊こちらの記事は自分自身のトラブルへの対応の流れをまとめたものです。
もし間違いや、さらに意識すべきことがありましたらぜひご教授いただけたらと思います。
スクラム開発とプラットフォームエンジニアリングの関係を徹底解説


## はじめに

スクラム開発とプラットフォームエンジニアリングは、現代のソフトウェア開発において非常に重要な要素です。これらの概念がどのように連携し、プロダクト開発を成功に導くのかを解説します。

## スクラム開発とは

スクラムは、アジャイル開発手法の一つで、チームが自己組織化し、短期間で価値を提供することを目指します。スクラムの基本的な要素には、スプリント、プロダクトバックログ、スプリントバックログ、デイリースクラムなどがあります。

### スプリント

スプリントは、通常2〜4週間の短期間で行われる開発サイクルです。この期間中に、チームは特定の目標を達成するために集中して作業します。

### プロダクトバックログ

プロダクトバックログは、プロダクトオーナーが管理するタスクのリストです。これには、ユーザーストーリー、バグ修正、技術的な改善などが含まれます。

### スプリントバックログ

スプリントバックログは、スプリント期間中にチームが取り組むタスクのリストです。これらのタスクは、プロダクトバックログから選ばれます。

## プラットフォームエンジニアリングとは

プラットフォームエンジニアリングは、開発チームが効率的に作業できるようにするためのインフラストラクチャやツールを提供することを目的としています。これには、クラウドサービスの利用、CI/CDパイプラインの構築、モニタリングツールの導入などが含まれます。

### クラウドサービスの利用

クラウドサービスは、スケーラビリティ、可用性、コスト効率などの面で多くの利点を提供します。AWS、Azure、Google Cloudなどの主要なクラウドベンダーが提供するサービスを活用することで、開発チームは迅速に環境を構築し、スケールアップすることができます。

### CI/CDパイプラインの構築

継続的インテグレーション（CI）と継続的デリバリー（CD）は、コードの品質を保ちつつ迅速にリリースするための重要なプロセスです。Jenkins、GitLab CI、CircleCIなどのツールを使用して、これらのパイプラインを構築します。

### モニタリングツールの導入

モニタリングツールは、システムのパフォーマンスやエラーをリアルタイムで監視するために使用されます。Prometheus、Grafana、New Relicなどのツールが一般的です。

## スクラム開発とプラットフォームエンジニアリングの関係

スクラム開発とプラットフォームエンジニアリングは、互いに補完し合う関係にあります。以下にその具体的な関係を示します。

### 効率的なスプリントの実現

プラットフォームエンジニアリングが提供するインフラストラクチャやツールは、スクラムチームがスプリントを効率的に進めるための基盤となります。例えば、クラウドサービスを利用することで、開発環境のセットアップが迅速に行えます。

### 継続的なフィードバックループ

スクラム開発では、継続的なフィードバックが重要です。プラットフォームエンジニアリングが提供するモニタリングツールやCI/CDパイプラインは、リアルタイムでのフィードバックを可能にし、迅速な問題解決を支援します。

### 自動化による効率化

プラットフォームエンジニアリングは、多くのプロセスを自動化することで、スクラムチームの負担を軽減します。これにより、チームはより価値のあるタスクに集中することができます。

## まとめ

スクラム開発とプラットフォームエンジニアリングは、現代のソフトウェア開発において不可欠な要素です。これらを効果的に組み合わせることで、プロダクト開発の効率と品質を大幅に向上させることができます。ぜひ、これらの概念を理解し、実践に取り入れてみてください。
スクラム開発とTOC: The Goalから学ぶボトルネック解消の秘訣


## はじめに

スクラム開発を実践していると、プロジェクトの進行が思うようにいかないことがありますよね。そんな時に役立つのがTOC（制約理論）です。今回は、Eliyahu M. Goldrattの名著『The Goal』から学ぶTOCの基本概念と、それをスクラム開発にどう適用するかについてお話しします。

## TOC（制約理論）とは？

TOC（Theory of Constraints）は、システム全体のパフォーマンスを制約する要因（ボトルネック）を特定し、それを解消することで全体の効率を向上させる理論です。『The Goal』では、製造業の現場を舞台にしてこの理論が解説されていますが、ソフトウェア開発にも応用可能です。

### TOCの5つのステップ

1. **制約を特定する**: プロジェクトの進行を妨げているボトルネックを見つけます。
2. **制約を最大限に活用する**: ボトルネックの影響を最小限に抑えるための対策を講じます。
3. **その他のプロセスを制約に従わせる**: ボトルネックに合わせて他のプロセスを調整します。
4. **制約を解消する**: ボトルネックを取り除くための具体的なアクションを実行します。
5. **新たな制約を探す**: ボトルネックが解消されたら、次の制約を探します。

## スクラム開発とTOCの関係

スクラム開発は、短期間での反復的な開発サイクルを通じてプロダクトを進化させる手法です。しかし、スクラムチームも時にはボトルネックに直面します。ここでTOCの考え方が役立ちます。

### スプリントプランニングでのTOCの活用

スプリントプランニングでは、チームが次のスプリントで取り組むタスクを決定します。この時、TOCの「制約を特定する」ステップを活用して、ボトルネックとなるタスクやプロセスを見つけ出します。例えば、特定の機能の実装が遅れている場合、その原因を分析し、次のスプリントで優先的に対処することができます。

### デイリースクラムでのTOCの活用

デイリースクラムでは、チームメンバーが進捗状況を共有し、障害を報告します。ここでもTOCの「制約を最大限に活用する」ステップが役立ちます。ボトルネックが特定されたら、その影響を最小限に抑えるための対策をチーム全体で考えます。

### レトロスペクティブでのTOCの活用

スプリントの終わりに行われるレトロスペクティブでは、チームが過去のスプリントを振り返り、改善点を見つけます。この時、TOCの「制約を解消する」ステップを適用して、ボトルネックを取り除くための具体的なアクションを決定します。

## 具体例: クラウドサービスの活用

例えば、クラウドベンダーのサービスを活用することで、ボトルネックを解消することができます。デプロイメントが遅れている場合、CI/CDツールを導入して自動化することで、デプロイメントのボトルネックを解消できます。また、データベースのパフォーマンスが問題となっている場合、スケーラブルなクラウドデータベースを利用することで、パフォーマンスのボトルネックを解消できます。

## まとめ

TOCの考え方をスクラム開発に取り入れることで、プロジェクトの進行を妨げるボトルネックを特定し、解消することができます。『The Goal』から学ぶTOCの基本概念を理解し、スクラム開発に応用することで、チームのパフォーマンスを向上させましょう。

ぜひ、次のスプリントからTOCの考え方を取り入れてみてください。きっと、プロジェクトの進行がスムーズになるはずです。
API Gatewayが29秒超えられるらしい

# はじめに
サーバーレス大好きなエンジニアです!
API Gatewayの29秒制限に苦しんだエンジニアの方も多いのではないでしょうか？
統合タイムアウトを長くすることができるという情報を知ったのでシェアしたいと思います。

# どのようにすれば延長できるのか

>This setting represents the maximum amount of time API Gateway will wait for a response from the integration to complete. You can raise the integration timeout to greater than 29 seconds for Regional REST APIs and private REST APIs, but this might require a reduction in your account-level throttle quota limit. With this launch, customers with workloads requiring longer timeouts, such as Generative AI use cases with Large Language Models (LLMs), can leverage API Gateway.

アカウントレベルのスロットルクォータ制限を減らす必要のようです。
これはLLM(大規模言語モデル)を使用した生成AIのユースケースが増えたことで、より長いタイムアウトが必要なケースに対応するためのものと紹介されています。

https://aws.amazon.com/jp/about-aws/whats-new/2024/06/amazon-api-gateway-integration-timeout-limit-29-seconds/

https://aws.amazon.com/jp/about-aws/whats-new/2024/06/amazon-api-gateway-integration-timeout-limit-29-seconds/

# まとめ

APIGatewayを使う方にとって非常に嬉しいアップデート情報ですね！
新しい情報があれば発信していきます。
【読書メモ】『知識ゼロから学ぶソフトウェアテスト』学んだことをまとめる

# バグとはつまり何か（テストを行う意義）

- どれほど優れた集団であってもバグは存在する
- 品質の良し悪しにより損害が発生（極小さな不具合によって甚大な損害になることも）
- エラーやバグを完全に発見することはできないと心得る（その前提でテストを行う）
- バグは密集するもの（均等に分布するのではない）
- 『完全』ではなく、『十分な品質』を持つソフトウェアを目指す

...これがテストを行う目的。

# 【基礎】ホワイトボックステスト

※必ずしも実務で有用とは限らない

## 制御パステスト法

テストケースを与えることで、プログラムの振る舞いや、処理の流れを追っていくテスト方法。

### カバレッジ率

条件に対してテストを行ったカバー率のため、『100%だから100%バグがない』とは限らない。

- ループ処理内の条件分岐（回数と複雑さによっては現実的ではない）
- 仕様を正しく反映しているか（機能が仕様通りに動くことを調べる方法のため）
- 扱うデータの整合性（データ自体の正しさを調べる方法ではない）
- 割り込みやマルチタスク（動的に状況が変わるため）

要求される品質や重要性によって基準値を設定（50～90%）。

### ステートメントカバレッジ

各行が実行されているかどうかのみを調べる（条件の見落としがある場合も）

### ブランチカバレッジ

条件の組み合わせまですべて調べる（上記より精度は良いがコストがかかる）

## データフローパステスト法

プログラムの変数や引数、関数などにフォーカスしたテスト方法。

静的解析ツールや、動的なデバッグを通じてバグを発見する。

### 例
- ESLint
- 実行とデバッグ


# 追記予定。
全リージョンのSQSキューをまとめて消そう

# PowerShellで実行するコード
```
foreach ($region in (aws ec2 describe-regions --query "Regions[].RegionName" --output json | ConvertFrom-Json)) {
    echo "region:${region}"
    $queueUrls = (aws sqs list-queues --region $region --query 'QueueUrls' --output json | ConvertFrom-Json)
    foreach ($queueUrl in $queueUrls) {
        echo "delete-queue:$queueUrl"
        aws sqs delete-queue --queue-url $queueUrl --region $region
    }
}
```
実行結果(test1とtest2を削除した結果)
```
region:ap-south-1
region:eu-north-1
region:eu-west-3
delete-queue:https://sqs.eu-west-3.amazonaws.com/999999999999/test1
region:eu-west-2
region:eu-west-1
region:ap-northeast-3
region:ap-northeast-2
region:ap-northeast-1
delete-queue:https://sqs.ap-northeast-1.amazonaws.com/999999999999/test2
region:ca-central-1
region:sa-east-1
region:ap-southeast-1
region:ap-southeast-2
region:eu-central-1
region:us-east-1
region:us-east-2
region:us-west-1
region:us-west-2
```
経済産業省からコンテンツ制作のための生成AIガイドブックが公開されています！

皆さんはすでにChatGPTやCloud3.5などの生成AIを活用しまくっていますよね？
とても便利な反面、昨今でもAIが生成した画像の著作権等々で問題が起き続けていますね...
そんな中、政府が考える生成AIについてのガイドブックが公表されました。
詳細はこちら↓
経済産業省：[「コンテンツ制作のための生成AI利活用ガイドブック」を公表しました](https://www.meti.go.jp/policy/mono_info_service/contents/aiguidebook.html)

著作権に影響するかは時と場合によりますが、政府の見解としてはこうだという内容が書かれています。
***※ここに書かれているから大丈夫！というわけではないです。***
当然、我々クリエイターやプログラマーにかかわる部分もあります！
全63ページと結構なボリュームですので、内容をかいつまんで要約していきます。

# ガイドブックの趣旨

先ほども述べたように、このガイドブックの趣旨は「このように使えば大丈夫！」ではなく、あくまで「こういう風に使ってもらうと問題が起きにくい」といった内容です！
日々活用している生成AIの利活用の方向性について記載されています。
これに書いてあることが正しい！というのはお門違いなのでご注意を...!

### 位置づけ
位置づけとしては政府のAI戦略会議がもととなって作成されたもののようで、各省庁から発表されたガイドライン等を前提に作成されたものとなっています。

### ガイドブックの対象

主に、***ゲーム、アニメ、広告などのコンテンツ制作をしている業界***を対象としています。

# 事例紹介

前半部分は主に事例紹介になっています。
各産業ですでに活発に使用されているみたいですね！
個人的に驚いたところは...

1. マーダーミステリーなどの文章や言語が重要となるゲームで活用され始めている
1. 大手がCMなどですでに使い始めている 

この2点は知らなかったのより広く、多くの分野で活用されていることが実感できました

# 著作権について

法律関係の話になるので、ところどころ、難しい用語で書かれていますが、法律に疎い私でもわかるよう、丁寧に説明されていました。特に、各分野で、こういうパターンは大丈夫なの？といった疑問点にこたえる形で書かれている部分はとても分かりやすかったです。
また、実際、生成AIは著作権に関わるのかといった部分については、私の理解した内容は下記の通りです。
他者の著作物を使用した学習は非享受目的、つまり単なる学習のデータとして使う分には問題ないとのことです。
一方で享受目的が共存する場合や著作者を害する場合は著作権侵害に当たります。
例を挙げると、他者の書いた絵を学習目的で収集する行為は享受目的、絵を楽しむことやその絵の特徴を学習する目的が入ってしまうので非享受目的で集めているとは言いにくい状態になってしまいます。
この対策として
1. 自身が著作権を持つもので学習すること
1. 著作者から許諾を得ること
1. 著作権保護期間(2024年時点では1954年までに亡くなられた方が作成したもの)が過ぎたもの
を利用することが挙げられています。Adobeなどが学習関連の利用規約が入ったり、たびたび炎上しているのはこのあたりが原因ですね。
また、生成AIが作成したものでも、他者の著作物と類似していないかとうは確認しないといけません。
特に類似性を疑われた際、学習データに疑われた元となるデータがあった場合、依拠性が認められやすくなってしまいます。
対策としては作成物をWeb検索やツールを用いてチェックすることが重要となります。

# 意匠権や商標権について

こちらに関しては、
①学習の際に、登録されている意匠や商標を含むものを学習で用いる分には権利侵害とはならないと考えている
②生成AIで作成したものが意匠や商標に類似する場合は権利侵害の可能性が発生する
とのことです。

# 肖像権、パブリシティー権について

人物の写真など、人が移った物を無断で学習に使用することは肖像権侵害の可能性が発生します。また、生成AIを用いて、有名人の画像や音声を生成した場合、パブリシティー権の侵害に当たる可能性が発生します。
この辺りは、FaceBookやYoutubeなどで無断で有名人の画像や人工音声を使用した動画が出回り、問題視されていましたね。

# その他

その他の内容として、学習する際は
①データ提供者との契約を確認すること
②営業秘密や個人情報等の秘匿性が高いデータを使用する際は十分に気を付けること
が挙げられています。
生成する際は
①使用する生成AIのサービス規約を理解すること
②プロンプトに対して個人情報を入力することや、出力された個人情報の扱いは注意すること
③秘匿性の高い情報を入力する際はその秘匿性が喪失しないよう、注意すること
④作成物が著作権侵害していないこと
が書かれていました。

# 感想

生成AIが世に広まって2年がたち、まだまだ生成AIブームが続いている中、法的な話は使う側としては知っておくべき内容だと思いました。
特に様々なサービスが展開されてきた今だからこそ、知らなかったではすまない話になってきますので、お時間ある際に一読してみるのはどうでしょうか？
OneDrive for Businessコネクターの「ファイルが作成されたとき」の出力「ファイル名」がエンコードされている

最近フローを作成していて遭遇した問題の共有。

# Problem

OneDrive for Businessコネクターの「ファイルが作成されたとき」をトリガーにしたフローを作成した。フローの後続アクションでトリガーの出力「ファイル名」を利用しようとしたが、エンコードされていてそのままでは人間が読める状態ではない。

# Solution

関数 `decodeBase64()` を利用することでエンコードを解除（デコード）できる。これで人間が読める文字列となり、後続アクションの中で利用しやすくなる。

ただし・・・そもそもこのアクションを利用するよりも「ファイルが作成されたとき(プロパティのみ)」を利用すべきかもしれない。検討を強く推奨。その理由は[こちら](https://qiita.com/mizukyf/items/61da80ea77ecae2b8c8a)


https://qiita.com/mizukyf/items/61da80ea77ecae2b8c8a
Docker 仮想容量を減らす時のBackup・Restoreスクリプト

## tl:dr
Docker Desktopで仮想ディスク容量を減らすときに、一度全てデータが削除されてしまうので、ImageとVolumeを引き継ぐために用意したスクリプト

## 環境
Mac
Docker Desktop v4.31.1

## 実行方法
1.スクリプトを作成
2.スクリプトファイルに実行権限を付与
```bash
chmod +x backup.sh restore.sh
```
3.backup.shを実行
```bash
./backup.sh
```
4.Docker Desktopの仮想ディスク容量を小さくする
5.restore.shを実行 
```bash
./restore.sh
```

## backup.sh
```shell
#!/bin/bash

# バックアップディレクトリの作成
BACKUP_DIR="./docker_backup"
VOLUME_BACKUP_DIR="$BACKUP_DIR/volumes"
IMAGE_BACKUP_DIR="$BACKUP_DIR/images"
mkdir -p $VOLUME_BACKUP_DIR
mkdir -p $IMAGE_BACKUP_DIR

# コンテナの停止
docker stop $(docker ps -q)

# ボリュームのバックアップ
echo "バックアップ中のボリューム..."
docker volume ls -q | while read volume; do
  echo "ボリューム $volume をバックアップ中..."
  docker run --rm -v $volume:/volume -v $VOLUME_BACKUP_DIR:/backup busybox tar cf /backup/$volume.tar -C /volume ./
done

# イメージのバックアップ
echo "バックアップ中のイメージ..."
docker images --format "{{.Repository}}_{{.Tag}} {{.ID}}" | while read image; do
  image_name=$(echo $image | awk '{print $1}')
  image_id=$(echo $image | awk '{print $2}')
  echo "イメージ $image_name ($image_id) をバックアップ中..."
  docker save -o $IMAGE_BACKUP_DIR/${image_name}.tar $image_id
done

echo "バックアップが完了しました。"

```

## restore.sh
```shell
#!/bin/bash

# バックアップディレクトリの指定
BACKUP_DIR="./docker_backup"
VOLUME_BACKUP_DIR="$BACKUP_DIR/volumes"
IMAGE_BACKUP_DIR="$BACKUP_DIR/images"

# ボリュームのリストア
echo "リストア中のボリューム..."
ls $VOLUME_BACKUP_DIR/*.tar | while read backup; do
  volume=$(basename $backup .tar)
  echo "ボリューム $volume をリストア中..."
  docker volume create $volume
  docker run --rm -v $volume:/volume -v $VOLUME_BACKUP_DIR:/backup busybox tar xf /backup/$(basename $backup) -C /volume
done

# イメージのリストア
echo "リストア中のイメージ..."
ls $IMAGE_BACKUP_DIR/*.tar | while read backup; do
  image_file=$(basename $backup .tar)
  image_name=$(echo $image_file | awk -F '_' '{print $1}')
  image_tag=$(echo $image_file | awk -F '_' '{print $2}')
  echo "イメージ $image_name:$image_tag をリストア中..."
  docker load -i $IMAGE_BACKUP_DIR/$image_file.tar
  image_id=$(docker images -q | head -n 1)  # リストア直後の最新のイメージIDを取得
  docker tag $image_id $image_name:$image_tag
done

echo "リストアが完了しました。"

```

## あとがき
適当なところも多いので、スクリプトは好きなようにアレンジしてください！
Python3の環境構築（pyenv, pipenv, venv）

AWS-Amplifyで構成されたプロジェクトにて、LambdaFunctionをPythonで書かなくちゃいけなくなりました。普段Node.jsばっか書いてるので、バージョン管理でハマっちゃいましたので、ここでまとめて書いてみようという試みです。

AWS-Amplifyまで含めると長い話になるので、この記事ではいったん仮想環境の構築までを議論します。

# Python本体(exe)のバージョン管理の領域 
Pythonのバージョン管理の領域は主に３つとなります。
- 開発マシン
    - 開発系ではトップレベルのPython環境で、何気なくpyを呼び出したときに出てくるPythonのバージョンを指します
- プロジェクト
    - このプロジェクトが指定する、Python環境を指しています
- デプロイする環境
    - 実際に動作している環境です。プロジェクトといっしょになる（はず）

この領域に対して厳密に環境構築を行う必要があります。

＊ただし、この記事ではデプロイする環境に関しては議論の対象外としています。

# Pythonのパッケージ管理の領域
Python本体とは別に、パッケージ（ライブラリ）を管理する必要があります。
- 開発マシン
- プロジェクト
- デプロイする環境

の3領域を意識しなければならないのは一緒です。

# 環境構築の前に
すでに開発マシンに入っているPythonをきれいに除去してあげる必要があります。
アンインストーラが適切ですが、本体ファイルを除去する必要があるかもしれません。

``` bash
# python本体がどこなのか、見つける
where python
where py
where python3
```


# 開発マシンのPython本体バージョン管理
pyenvを利用します。この操作は特権で実施する必要があります。
Windowsを利用していますので、pyenv-winをChocolaty経由でインストールします。
このpyenvがPython本体を管理します。
```bash
choco install pyenv-win
```

おわったら、refreshenvしてpyenvを呼び出します。

```
# ダウンロード済みのバージョン
pyenv versions

# 利用可能なバージョン
pyenv install --list

# ダウンロードする。
pyenv install [好きなバージョン]

# グローバルなPythonバージョン
pyenv global [好きなバージョン]

# 現在のpythonバージョン
pyenv version
```

後述するpipenvでpythonのライブラリも環境に影響を与えずに管理がしたいです。
なので、**開発マシンのPython本体はpyenv**で**プロジェクトのPython本体とライブラリはpipenv**で管理します。

pipenvはPython環境(本体とライブラリ)をまとめて構築します。**vertualenv(venv)はpipenvに内蔵されている**ので、併用の必要はありません。

# pipenvのインストール
```bash
pip install pipenv
```
ここまでが、開発マシンに対する設定の手順でした。

---

ここからは、各プロジェクトに対する設定になります。
コマンドはプロジェクトディレクトリにて実行していきます。

# pipenvの初期化
```bash
# 実行前に、python本体のバージョンを合わせておきます。
pyenv local 3.8.10

# 初期化
pipenv --python 3.8
```
実行すると、Pipfileができます。
```
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]

[requires]
python_version = "3.8"
```

# Pipfileを書き換える
```
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
numpy = "<2"
pandas = "*"

[requires]
python_version = "3.8"
```
わけあってnumpyのバージョン2未満と、pandasを利用したいです。
これは実動作にも必要なので、packagesに入れます。

テストモジュールに必要なものなどは、dev-packagesに入れてもいいかもしれませんね。

```bash
# Pipfileの適用
pipenv install
```
これで、Python3.8と前提になるパッケージを内蔵した仮想開発環境ができました。

# pipenvとvenv
vertualenv(venv)はpipenvに内蔵されています。ということは、.venvフォルダがどこかにあるはずだと思いました。本体とライブラリをまとめた場所があるはずですからね。

C:\Users\\%USERPROFILE%\\.virtualenvs

%USERPROFILE%はユーザー名です。

ここにディレクトリ名を先頭にして並んでいます。

[プロジェクトのディレクトリ名]-[hash]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3712902/8aee0898-9927-cc6b-9b28-a6f7bc82d61d.png)

どこかでみたことある構成・・・。

# pipenvでできた仮想環境を呼び出す。
仮想環境にインストールしたパッケージに依存したファイルを実行するには、仮想環境のshellを呼び出す必要があります。

venvではactivateを呼び出す必要がありました。pipenvではコマンドが用意されています。

```bash
# 仮想環境のShell呼び出し
pipenv shell

# Pythonの呼び出し
python hoge.py
```



# まとめ
- Python開発で意識しなければならない環境は３つだ
- 開発マシンのPython本体はpyenvで管理する
- 仮想環境とはPython本体と前提になるライブラリを含み、pipenvで構成する
    - venvはpipenvに内蔵されているため、利用しない
- Pipfileでライブラリを管理する

以上がPythonの仮想環境の構築方法です。
OneDrive for Businessコネクターの「ファイルが作成されたとき」が反応しない

最近フローを作成していて遭遇した問題の共有。

# Problem

OneDrive for Businessコネクターの「ファイルが作成されたとき」をトリガーにしたフローを作成した。しかしトリガーの設定で指定したフォルダーにファイルを作成したあといつまで経ってもフローが起動しない。

# Solution

「ファイルが作成されたとき」を使用せず、「ファイルが作成されたとき(プロパティのみ)」を使用する。

以下、その理由。

OneDrive for Businessコネクターの「ファイルが作成されたとき」はフォルダーに作成されたファイルのサイズが50MBを超える場合反応をしない（[公式リファレンスの該当箇所](https://learn.microsoft.com/ja-jp/connectors/onedriveforbusiness/#:~:text=%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E4%BD%9C%E6%88%90%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%20%E3%81%BE%E3%81%9F%E3%81%AF%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%8C%E5%A4%89%E6%9B%B4%E3%81%95%E3%82%8C%E3%81%9F%E3%81%A8%E3%81%8D%20%E3%81%AE%E3%83%88%E3%83%AA%E3%82%AC%E3%83%BC%E3%81%AF%E3%80%8150MB%20%E3%82%92%E8%B6%85%E3%81%88%E3%82%8B%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%97%E3%81%BE%E3%81%99%E3%80%82)）。

> ファイルが作成されたとき または ファイルが変更されたとき のトリガーは、50MB を超えるすべてのファイルをスキップします

ただし特殊なケースでは実際には反応をすることもある。例えばこの記事を執筆している時点では、Teams会議の録画ファイル（MP4）については50MBを超えていても例外的に反応をする（Teams会議内で録画を行うと、Teams会議作成者のOneDrive for Businessのフォルダにファイルが作成される。このファイル作成にはなぜかトリガーが反応する）。

というわけで安易に「ファイルが作成されたとき」を使用せず、「ファイルが作成されたとき(プロパティのみ)」を使用する。ファイルコンテンツが必要である場合は、別途アクション「ファイルコンテンツの取得」「パスによるファイルコンテンツの取得」を使用してコンテンツを取得する。
[初心者エンジニア]新しいことを学ぶ上で重要な姿勢を偉そうに語ってみた

# まえがき
24年度より新社会人としてITに関する勉強をはじめまして。なんだかんだ2か月がたったところです。

同期含めさまざまな方がIT業界人としてお勉強頑張っているかと思いますが、「これから本当に活躍できるのかイマイチ...」とか「IT諦めよっかな...」と思っている方の助けになれないかなと、私も初心者である今しか感じられない不安やそれに対する対策等を生意気ではありますが、ここにまとめました。

# バックボーン
先に私のバックボーンについてお話させてもらいますと、私は理系大学の物理学科で宇宙についてAIを使って研究をしていたので、少しばかりITとは縁のある人間でした。
しかし、特に学部でITを勉強したことはなかったため、独学で[Udemy](https://www.udemy.com/)だけで勉強しました。(本を読んだりしましたがほとんどがUdemy)

なので、文系・理系関係なく私も最初は全くITの知識がない側の人間だったのです。しかし、[Udemy](https://www.udemy.com/)でAIについての講座やPythonプログラミング講座などを受講し、「オーロラ電波画像に混入するノイズを除去する」といった、最初は理解不能だったプロジェクトの目標をAIを使って無事に達成できるまで成長できました。

# 指摘に対するポジティブな向き合い方
そんな私も学生から社会人となり、研修の初めに「勉強」に対するアプローチの違いを感じました。学生だった頃の勉強方法は英語の論文を読み、ひたすら本やサイトを用いて勉強するインプットの日々でした。そう、アウトプットがなく、自分の学んだことが正解だと信じ切って勉強を進めるしかなかったのです。

一方、社会人になり、サークル活動に参加していなかった私にも上司や先輩ができ、日頃から指摘してくれる方々が増えました。一言で「指摘」というとあまりいいイメージはないかもしれませんが、それは自分の仕事を「あくまで個人的な仕事。個人的なパフォーマンスを出せればいい。」と捉えているからだと私は感じます。

そもそも会社やプロジェクトという一括りのチームを組む理由はチーム内でのシナジーを期待するからだと思っています。なのであれば、上司からの指摘はしっかりと受け止め(度は越さない程度に)、チームや会社としてのパフォーマンス向上のための「改善」であるのだと解釈すると、「指摘」されることに対しての向き合い方が変わります。

# 自分の立場を客観的に理解する
社会人１年目である我々は会社の人なら誰がどう見ても **「仕事ができない人間」** です。

**それは誰のせいでもありません。仕方がないことです。**

日頃、私は会社の研修で[Udemy](https://www.udemy.com/)を使ってWEB開発を学んでいます。が、それが会社の業績に直接結びつくかというと、そうではありません。では、なぜそのような私たちに会社が投資をするかというと、将来的なアウトプットに期待しているからです。また、会社は研修が会社にとってとても重要なトピックであることも理解しています。

例えば、新卒で100人を採用したとします。令和元年の新卒の平均年収は約21万円([令和元年 厚生労働省調べ](https://www.mhlw.go.jp/toukei/itiran/roudou/chingin/kouzou/19/01.html))なので、 **会社は毎月2100万円もの大金をまだ実績すらない我々に与えてくれるわけです。** 半年間研修があれば、なんと **1億2600万円** にもなります。

これから言えることは、 **「会社は新卒の我々には結果なんて全く期待していない」** ということです。

砕けた言い方をすると、成功を最初から求めていないということです。

では、なぜこんな大金を毎月支払ってまで我々を雇うのでしょうか。
**それは、まだ社内というサンドボックスでたくさん失敗を通して学んでほしいということであると私は理解しています。**

ではその環境を最大限に活かすにはどうすればいいのか。それは**変なプライドを捨て**て、素直に自分が初心者であることを認めることです。それから、**たくさん質問をしましょう**。

私が、個人的に勉強していて苦痛だと感じたのは常に教えてくれる人がいなかったことでした。なので、私は日頃からこの恩恵に肖り、先輩に質問しまくってわからない状態をできるだけ早く解消しています。そのおかげで、先輩とのコミュニケーションが活発になりしょうもない質問や相談にも乗っていただけていると感じています。

**いいこと尽くしですね！**

# まとめ
- 指摘はチームないしは自分の成長のためにあることを忘れない
- 日頃からチームプレーで仕事をしていることを意識する
- わからなかったら変なプライドは捨て、これでもかと言うくらい質問する

稚拙な思考・文章ではありますが、1年目の私なりに考えをまとめてみました。
他の分野でも当然、通用する考えだと私は思っておりますので、より多くの皆さんの一助になれば幸いです。

**頑張っていきましょう！**
AIを使うとバカになる！

# AIを使用することの良し悪しに関する考察

皆さん、AIを使っていますか？
私は最近、ほとんどのコードをAIに書いてもらっています。
それが良いのか悪いのかについて、少し考察してみました。
結論から言うと、「分からない」というのが率直な意見です。

## 良かった点

### 1. 開発スピードの向上
AIの支援を受けるようになって最も良かったのは、開発スピードが大幅に上がったことです。
特にエラーの対処については、以前はドキュメントを読んだり、同様のエラーの事例を探して試したりと、とにかくトライアンドエラーが多かったのです。
それがAIに聞けば、大抵数分で解決することが多々あります！
作りたいものがすぐに作れるというのは、非常に素晴らしいことだと思います。
AI様々です。

### 2. コード理解の促進
コードの解説を聞けるので、理解が速くなりました。
サンプルコードならまだしも、他人のコードには癖があって読みにくかったりしますよね。
それもAIが代わりに解説してくれます。
分かりにくい箇所は何度でも聞けます。
24時間365日、いつでも懇切丁寧に教えてもらえるのは、どんな上司やプロジェクトリーダーよりありがたいと思っています。

### 3. 効率的なリファクタリング
リファクタリングも、自分がするより効率よく的確です。
自分がやると逆に動作が遅くなることもしばしばｗ

## 悪かった点

### 1. アルゴリズム思考の低下
まず、アルゴリズムを深く考えなくなりました。
私はPaizaの問題をよく解くのですが（Sクラスです）、最近はAクラスの問題でもかなり時間がかかりますし、間違えてしまいます。
何より「AIがあるからアルゴリズムができなくてもいいや！」という気持ちが出たり、考えるのが面倒に感じたりすることもしばしばあります。
これは個人的に非常によろしくない傾向だと思っています。

### 2. 思考停止の危険性
「AIを使うとバカになる！」
これは確かにそうなのかもしれません。
実際、バカになりそうな気がしてちょっと怖くなる時があります。
私のようなおじさん世代は放っておいてもバカになっていきそうなので、それを食い止めるよう努力が必要です。
一方で、発達途上の学生がAIを使うのは少し危険な感じもします。
どんなことでも考えずに「AIに聞けばいいじゃん」となると良くありません。

## 未来への展望

とはいえ、もっと先の未来では一人一人にパーソナルなAIが搭載されて、何でも人の代わりにやってくれるような世の中になるのかもしれません。
例えば、Google Mapがなかった時代は、みんな地図帳を持って出かけていました。
途中のスーパーやコンビニで地図を見て暗記して出かけるなんてこともありました。
今やスマホ一つで世界中どこへでも案内してくれます。
スマホなしに行きたい所へたどり着けるでしょうか？
私は正直自信がありません。
今はそれが当たり前の世の中です。

## 結論

これからの未来がどうなっていくか分かりませんが、当面は自分で考えて判断する力が必要だと思います。
その判断を行うには義務教育で習う事柄はやはり重要です。
そして、AIが超知能（ASI）になった時、私たちは"賢く怠ける"ことができるようになるかもしれません。
それまでは一生懸命頑張りましょう。
基本情報技術者試験をしっかり落ちた話


最初の記事でこれ持ってくるか？と思いながらも、反省と今後の課題を洗い出す意味でも書かせてください。

基本情報技術者試験に向けて行なった学習方法、受けてみてよかった点、やらかした点をまとめます。

こいつと同じことやると落ちるんだな！！という失敗例としてもらえると嬉しいです。

## 受験にいたる経緯

私自身、IT系の職を離職していて、復帰するにあたって空白期間(ブランク)がありました。
再度知識を入れなおすために受験することに。
当時は必要な技術を現場で覚えながら立ち回っていたので、情報技術を扱う上で基本的な知識が身についていなかったので、土台作りの意味もありました。

## 学習方法諸々

**学習時間**

正確には測ってません。ごめんなさい。
会社での待期期間が1か月いかないぐらいあったので、その間ずっとやってました。
自宅等での学習はこまめにやってました。自宅は眠くなるんで、図書館が多かったな…

**udemyでの動画教材の学習**

udemyで検索して一番上に表示且つ、評価が高い動画を選択。
ITパスポートは何年か前に取得していて、完全にまっさらというわけではなかったので何を話しているのかは理解はできました。

**教本**

諸先輩方の学習方法で、
”動画の内容を頭の中に入れて、理解できなかったところは教本で解説を見る”
的な内容を見たので乗っかりました。

ちなみに本はこれです
https://amzn.asia/d/09PhmKsN

**過去問道場**
言わずもがな。みんな使っている過去問道場です。
なんだかんだここを一番使いました。

出題範囲は平成30年(あいまい)～令和5年まで何周かしました。

## 受験してみての所感

**よかったこと**

IT系への復帰前に基礎知識を学習できたのはよかったです。
用語だったり理論だったりを覚えて現場復帰できたので、比較的早く慣れることができました。

**反省点**

上げたらキリないけど！これから受験しようとしている人のためにも書きます。

・そもそもの話
試験が選択方式のため、暗記することがメイン！という脳みそになってしまい、暗記スタイルの学習方法をとってしまいました。これが一番よくなかった…
用語(SNMPとか)はフルネームで覚えるかつ、プロトコル、意味、何を指すのか理解するべきでした。
あとは本気度が低かったと反省。ITパスポート取っていて、現場での経験もあるから紐づければいけるか！という油断があったと思います。
ブランクがある以上、１から覚えなおす姿勢を取るべきでした。


・動画教材
1本だけでなくいろんな方の動画をみればよかったなと反省。
見た動画の内容はわかりやすかったんです。しかし出題範囲をすべて網羅しているわけではないのでどの問題がきても対応できるように何種類かの教材を見ておけばよかったのかな…

・教本
まったく活かせなかったです。
用語や理論の理解が深まらなかっったのもこれが理由かと。
動画教材同様、今回購入した教本に加えてもう1冊か2冊は用意した方がよかったとおもいました。

・過去問に頼りすぎた
試験は過去問から同じもの、もしくは似た問題がでる傾向と聞き、そこを突っ走ってしまい試験で大クラッシュしてしまいました。
過去問も大事だけど、問題の内容を解けることが重要なんだなと反省。


**今後について**
再受験します。
現在は現場に出ていて、まとまった時間を取って学習するのが以前より取りづらいのでコツコツ再学習をすすめます。
どういう内容で出題されて、どう挑めばいいかはキャッチできたので反省点を活かして再受験に臨みます。


長々書きましたが、このやり方だと落ちるというのが伝わればうれしいです。
次、記事に書くときは合格しましたー！ﾜｯｼｮｲﾜｯｼｮｲ!と報告できるように頑張ります。

アディオス
暴言を吐かれた人間は処理能力が61％落ちる

### 暴言が生産性に与える影響について

暴言は、個人だけでなく、周囲の人々にも深刻な影響を及ぼすことが研究で明らかになっています。以下に示すのは、その具体的な影響です。

- **直接暴言を吐かれた場合**: 処理能力が61％、創造性が58％低下します。
- **属しているグループに暴言が向けられた場合**: 処理能力が33％、創造性が39％低下します。
- **他人が暴言を受けるのを目撃した場合**: 処理能力が25％、創造性が45％低下します。

これはガチ
チーム開発だけじゃない。
家族間のDVだってそう。
友達にいつも怒鳴る奴がいてもそう。
ゲームで切れてるのもそう。
本人及び言われた相手だけじゃなく、それを見聞きした人間のパフォーマンスも下げてしまうので、著しく生産性が落ちてしまう。


そうは言っても難しいよね人間だもの。

#### 引用元
- (https://dpqp.jp/post-5164)

---
FreeTypeSharpを使った文字列描画（複数行を描画する）

# 1.前回の内容
https://qiita.com/fumifumi0453/items/de9b79b9feed23d0d71d

# 2.目標
改行コードを含んだ文字列の時、複数行の描画を行う。

# 3.ソースコード
https://github.com/fumifumi0453/SimpleFreeTypeSharp

# 4.変更点
文字列からStringImageDataオブジェクトへ変換するときに、行ごとに配列化したCharImageDataオブジェクトを作成してから渡す。
(行ごとに配列化したCharImageDataオブジェクトはcidListオブジェクトに格納される)
```ImageFont.cs

        public StringImageData Render(string text)
        {
            if (string.IsNullOrEmpty(text)) return StringImageData.Empty;

            var charList = text.ReplaceLineEndings("\n").ToCharArray();
            var cidList = new List<List<CharImageData>>();
            cidList.Add(new List<CharImageData>());

            int baseHeight = (int)_FaceFacade.FaceRec->size->metrics.height >> 6;
            int fontHeight = baseHeight;
            int fontWidth = (int)_FaceFacade.FaceRec->size->metrics.max_advance >> 6;
            foreach (var c in charList)
            {
                switch (c)
                {
                    case '\r':
                    case '\n':
                        cidList.Add(new List<CharImageData>());
                        break;

                    case '\t':
                        var tab = new CharImageData(fontWidth * 2, 0, 0, 0, 0);
                        cidList.Last().Add(tab);
                        break;

                    default:
                        var cid = CreateCharImageData(c);
                        var tmpHeight = baseHeight - cid.BearingY + cid.Height;
                        if (fontHeight < tmpHeight) fontHeight = tmpHeight;
                        cidList.Last().Add(cid);
                        break;
                }
            }

            return new StringImageData(text, baseHeight, fontHeight, fontWidth, cidList);
        }


```

# 5.まとめ
あまりスマートなやり方ではないが、改行を描画側に任せることができた。
これで、描画範囲に合わせて自動改行する機能の下地ができたので良しとする。
UbuntuでAWS EC2インスタンスにSSHでログインする方法

## 前提条件

- AWSアカウントがあること
- 起動済みのEC2インスタンスがあること
- SSHキー（.pemファイル）をダウンロードしていること
- Ubuntuの端末を使っていること

## 1. EC2インスタンスの準備

### 1.1 インスタンスの起動

1. AWS Management Consoleにログインする。
2. `EC2`サービスを選ぶ。
3. `インスタンス`をクリックして、新しいインスタンスを起動するか、既存のインスタンスを使う。

### 1.2 セキュリティグループの設定

1. インスタンスに関連付けられているセキュリティグループを確認する。
2. `インバウンドルール`を編集して、以下のルールを追加する。
   - タイプ: `SSH`
   - プロトコル: `TCP`
   - ポート範囲: `22`
   - ソース: `0.0.0.0/0`（任意のIPからのアクセスを許可）

## 2. SSHクライアントの準備

### 2.1 .pemファイルのパーミッションを設定

ターミナルを開いて、`.pem`ファイルのパーミッションを設定する。

```sh
chmod 400 /path/to/your-key.pem
```

`/path/to/your-key.pem`は、ダウンロードしたSSHキーのパスね。

## 3. SSHでログイン

### 3.1 パブリックIPまたはDNSの取得

1. AWS Management Consoleの`EC2ダッシュボード`に移動する。
2. 対象のインスタンスを選ぶ。
3. `パブリックIP`または`パブリックDNS`をコピーする。

### 3.2 SSH接続を確立

以下のコマンドを実行してSSH接続を確立する。

```sh
ssh -i /path/to/your-key.pem ubuntu@your-ec2-public-dns
```

- `/path/to/your-key.pem`：`.pem`ファイルのパス
- `ubuntu`：Ubuntu AMIの場合のデフォルトユーザー名
- `your-ec2-public-dns`：インスタンスのパブリックDNS

## 4. 接続確認

接続が成功すると、次のようなメッセージが表示される。

```
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-1038-aws x86_64)
```

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

### 接続できない場合

1. **セキュリティグループの設定を確認**:
   - ポート22が開いていることを確認。
   - ルールが正しく設定されていることを確認。

2. **パブリックIPまたはDNSを再確認**:
   - 正しいIPアドレスまたはDNSを使っているか確認。

3. **.pemファイルのパーミッションを再確認**:
   - パーミッションが適切に設定されているか確認。
   ```sh
   chmod 400 /path/to/your-key.pem
   ```
（1冊ですべて身につく）カラーピッカーを作成する　作り始め

お疲れ様です。

今日は早い時間の更新です。
そして学習内容は以前紹介した、「1冊ですべて身につくJavaScript　入門講座」という本を読みながら、実際に手を動かしてカラーピッカーを作っていきます。
完成したら、自己紹介ページに載せようと考えています:relaxed:

![101.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/48d4adda-1641-2715-c34a-8069c4fe30ba.png)
![102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/32018498-a46c-f65e-d831-d88a1fe7c32c.png)

HTMLで **input id="colorPicker"**　と入力し、1枚目の画像のようにカラーピッカーを設置します。idは後からカラーコードを取得するようなので、すでに設定しておきます。
（input="color"　であれば設置できるので、id名はなんでも可）
この時はまだvalue属性は設定していません。

![103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/ba5d5a75-5c7e-bce3-239f-34efca96681d.png)
![104.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/75b6d78b-c2fe-c600-9808-01155b225b90.png)
ここで **value** を書くと、コンソールで現在のカラーコードを入手できます。

![105.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/aead45ae-94aa-ad79-462f-e4e568b6128b.png)
![106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810013/7333f831-e5a8-8acb-aecf-4ab688e10b4f.png)
コメントアウトしている通り、value属性はフォーム要素の初期値を設定できるそうなので、試しにHTMLの方でvalue属性を書き足し、適当なカラーコードを入力すると、下の画像のように色が変化しました。
ちゃんと値を取得し、初期値も設定できていることが確認できました。

最終的にカラーピッカーで好きな色を選択したあと、カラーコードを表示するようにし、背景色もカラーピッカーと同じ色が反映されるようにして完成となるそうなので、ちまちまとやっていきます:fist:
NGINXの基本コマンドまとめ

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

### Ubuntuでのインストール

```sh
sudo apt update
sudo apt install nginx
```

## 2. NGINXの起動・停止・再起動

### NGINXの起動

```sh
sudo systemctl start nginx
```

### NGINXの停止

```sh
sudo systemctl stop nginx
```

### NGINXの再起動

```sh
sudo systemctl restart nginx
```

### NGINXの設定の再読み込み

```sh
sudo systemctl reload nginx
```

### NGINXのステータス確認

```sh
sudo systemctl status nginx
```

## 3. NGINXの設定ファイルの編集

### 設定ファイルの場所

NGINXのメイン設定ファイルは通常 `/etc/nginx/nginx.conf` にあります。

### 設定ファイルの編集

```sh
sudo nano /etc/nginx/nginx.conf
```

### サイト設定ファイルの編集

通常、サイトごとの設定は `/etc/nginx/sites-available/` フォルダにあります。例えば、デフォルトのサイト設定を編集する場合：

```sh
sudo nano /etc/nginx/sites-available/default
```

## 4. NGINXの設定のテスト

### 設定ファイルの文法チェック

NGINXの設定ファイルを編集した後、文法チェックを行います。

```sh
sudo nginx -t
```

エラーがなければ、以下のようなメッセージが表示されます：

```
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```

## 5. NGINXのログの確認

### エラーログの確認

```sh
sudo tail -f /var/log/nginx/error.log
```

### アクセスログの確認

```sh
sudo tail -f /var/log/nginx/access.log
```

## 6. その他の便利なコマンド

### NGINXのバージョン確認

```sh
nginx -v
```

### NGINXの詳細バージョン情報確認

```sh
nginx -V
```

### NGINXのヘルプ表示

```sh
nginx -h
```
なるべく苦労しない工数管理

## 工数管理しないエンジニアリングなんて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/c8154c91-9dff-1054-6cf2-e099ed491fcb.png)

エンジニアに限った話ではありませんが、工数管理しない仕事は仕入れ値や製造コストを考えずに商品を売っているようなものです。
見積の精度がどうだったか、案件終了後に答え合わせをしようと思っても、「どうだろう？」「なんとなく..利益でた案件かも？それとも採算あってなかったかしら？」となります。

これではいけませんね。

## 仕事のための仕事になりすぎる

一方で、“正しく”工数を記録するのは、労力が莫大にかかります。

* 日報や週報で運用
    * 時間を記録するのが大変、そしてどうやって案件ごとに集計するのか（まさかマネージャーが!?）
* Redmine、Backlogなどのプロジェクト管理ツールで工数の記録
    * 記録漏れが起きやすい
    * 時間管理対象はすべて課題（Issue、Ticket）に起票する必要あり、細かな粒度のものが無視されがちになる
    * 実稼働時間とのギャップがあった場合に調整や編集が大変
* ストップウォッチ型の時間管理ツール
    * 業務中に気が紛れる、集中できなくなる
    * そしてやっぱりタイマー回すのは忘れる

**とにかく、実際にはやってられない！！**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/0945adbd-e515-717f-db2e-3b8b711635d3.png)

## よい方法を考えましょう

* なるべく既に社内で浸透しているツールや仕組みを流用したい
* 運用負荷は少なく
* 汎用的で二次利用が可能なものに

![solution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/2109157c-2d52-b927-b1a1-2def628b6316.png)

## 考えました

普段料理をしていなくても、キャンプでカレーくらいは作れるように、工数管理がやってられない人たちにもGoogleカレンダーに実働の案件名いれるくらいは出来るんじゃなかろうか。と考えました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/b44c8b3d-0275-fc3b-5e0b-13bc0aa7955a.png)

これだと、あらかじめ予定を立てて、実際の稼働状況が変わってもドラッグで時間を伸ばしたり縮めたりが楽です。

ここまで入力してもらえれば、あとは機械的に集計できるはずですね。

### 集計結果イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/cfcad48e-8a92-55f4-9fd0-4463a49a83bc.png)

こうするとメンバー各々の生産性や案件や顧客ごとの採算が確認できるようになりますね。

### 実装方法

Google App ScriptからGoogle Calendarにアクセス可能ですので、工数管理用に作成したカレンダーの情報を解析して、Google Spreadsheetへ集計するようにしました。


```mermaid
flowchart LR
    Script[Google App Script] -- データを参照・解析 --> Calendar[Google Calendar]
    Script -- 解析結果を保存 --> Spreadsheet[Google Spreadsheet]
```

プログラム修正の必要頻度を下げるため、Spreadsheetでは下記のマスタ管理も行っています。

* 解析対象の工数カレンダーとその所有者の名前
* プロジェクト名の表記揺れを名寄せするための定義
 
詳細は末尾の関連記事「工数管理のシステムをGoogleのサービスだけでコスパ良く開発してみた」をご参照ください。

## まとめ

お仕事には、やるべきだとわかっているものの実際にはやってられない事というものがあるでしょう。その時にシステム構築や自動化、負担の少ないワークフローの整備などが効果を発揮します。
なるべく苦労しない仕組みづくりが私達の存在意義であり、やりがいだと考えています。

## 関連記事

この記事は下記の記事をリライトしたものです。

### add moreでのエンジニアリソース管理方法

https://speakerdeck.com/kojiyamauchi/add-moredefalseenzinia-risosuguan-li-fang-fa

この頃はGoogle App Scriptを使用せずNode.jsからAPI経由でデータ取得し、CSV出力していました。
ここで登場するおサルはLINEスタンプにもなっていますのでよろしければどうぞ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/426622/5b93962c-0cf0-702f-dc0d-bad7e0732c55.png)

https://store.line.me/stickershop/product/1456711/ja


### 工数管理のシステムをGoogleのサービスだけでコスパ良く開発してみた

https://www.wantedly.com/companies/add-more/post_articles/481230

Google App Scriptを使用して、Googleのサービスの中で完結させた簡易版を実装したときの話です。現状の運用はこちらをベースとしています。
Jmeter導入方法

# 概要
負荷試験を行う為、`Jmeter`を使用しました。今回は、`Jmeter`の導入方法について記載します。


# 手順
- [Homebrew](https://brew.sh/ja/)を使用して、[jmeter](https://jmeter.apache.org/)をインストールする
```sh
brew install jmeter
```

- jmeterのみでは正常に動作しない為、Homebrewから[Java](https://www.java.com/ja/)をインストールする
```sh
 brew install java
 ```

- Homebrewを使用して[OpenJDK](https://openjdk.org/)（オープンソースのJava開発キット）を再インストールする
```sh
brew reinstall openjdk
 ```

- シンボリックリンクの作成とPATH環境変数の設定を行う
```sh
# シンボリックリンクの作成
sudo ln -sfn /opt/homebrew/opt/openjdk/libexec/openjdk.jdk /Library/Java/JavaVirtualMachines/openjdk.jdk\
# ln: ファイルのリンクを作成するコマンド
# -s: シンボリックリンク（ソフトリンク）を作成
# -f: 強制的にリンクを作成。既存のリンクがあればそれを削除する
# -n: シンボリックリンクを作成する際に、ディレクトリの既存のリンクを上書する

# HomebrewがインストールしたOpenJDKのディレクトリ
# /opt/homebrew/opt/openjdk/libexec/openjdk.jdk:

# ここにシンボリックリンクを作成する
# /Library/Java/JavaVirtualMachines/openjdk.jdk:


echo 'export PATH="/opt/homebrew/opt/openjdk/bin:$PATH"' >> ~/.zshrc
# export: シェル環境変数を設定  
# PATH環境変数に、/opt/homebrew/opt/openjdk/binディレクトリを追加
# ~/.zshrc: Zshシェルの設定ファイル
# >> ファイルの末尾にテキストを追加するためのリダイレクト演算子
```

- `~/.zshrc`の再読み込みするコマンドを実行する
```sh
source ~/.zshrc 
 ```
 
- javaのバージョンが出力されれば、正常にJmeterを起動できる
```sh
java --version                 
openjdk 22.0.1 2024-04-16
OpenJDK Runtime Environment Homebrew (build 22.0.1)
OpenJDK 64-Bit Server VM Homebrew (build 22.0.1, mixed mode, sharing)
```

- jmeterを起動
```sh
jmeter
```

# まとめ
次は、`Jmeter`の使い方について書ければと思います。
毎回調べるLaTeXコマンド一覧

なんか毎回同じこと調べてるなーと思ったので，自分用にまとめてみました．

### 記号

一覧にしてくださる方がいて毎回とても助かっています．
よく見返すものを抜粋しました．

https://medemanabu.net/latex/operators/

https://medemanabu.net/latex/greek/

### 数式の書き方

数式は``$``で囲むのが基本ですが，中央寄せして大きく（？）表示したり番号を振りたい場合はこちらを参照ください．

https://mathlandscape.com/latex-eqnum/

以下のパッケージを読み込み...

```
\usepackage{amsmath}
\usepackage{mathtools}
```

本文にこんな感じに書きます．

```
\begin{align}
  f(x) &= \sin x
\end{align}
```

「あれれー？数式が大きすぎるー！」という場合は，\footnotesizeと\nomalsizeで挟むと小さくなります．もっと小さくしたい場合は\footnotesizeではなく\tinyを使います．

```
\footnotesize
\begin{align}
  f(x) &= \sin x
\end{align}
\normalsize
```

https://slpr.sakura.ne.jp/qp/minify-latex/

### アルゴリズムの書き方

algorithms パッケージを利用するときれいに書けます．詳細はこちらを参考に．

https://zellij.hatenablog.com/entry/20110421/p1

アルゴリズム入出力がRequire, Ensureと表示されることが気になる場合は，以下のコマンドを``\begin{document}``の前に書きます．

```
\renewcommand{\algorithmicrequire}{\textbf{Input:}}
\renewcommand{\algorithmicensure}{\textbf{Output:}}
```
これでInput, Outputと表示されます．

### 定理・証明の書き方

amsthm パッケージを利用します．詳細はこちらの記事を参考に！

https://qiita.com/hungry_and_fool/items/b28f9bb32ce738889523

### 数式に日本語を入れる

\mbox{～}を使います．

```
$\mbox{速さ}=\frac{\mbox{距離}}{\mbox{時間}}$
```

これでこんなふうに表示されます．

$\mbox{速さ}=\frac{\mbox{距離}}{\mbox{時間}}$

（また書き足すと思いますが今回はこの辺で！）
Pythonでkubectl get pod コマンドの内容を取得する方法

kubectl get pod コマンドを実行した時のターミナル表示される情報を取得する方法を紹介します．

まずモジュールを import します
```
from kubernetes import client, config
import subprocess
```

Kubernetesクラスターへ接続し，CoreV1Api の初期化を行います．
```
# Kubernetesクラスターへの接続
config.load_kube_config()

# CoreV1Apiの初期化
v1 = client.CoreV1Api()
```

namespace にある全ての Pod のリストを取得します．
```
# 全てのnamespaceのPodのリストを取得
pod_list = v1.list_pod_for_all_namespaces(watch=False)
```

取得したリストから， kubectl get pod コマンドを実行した時に表示される要素を取り出します
- 取り出す要素
    - IP（pod_ip）
    - namespace（pod_namespace）
    - podの名前（pod_name）
    - readyになっている数（ready_field）
    - ステータス（pod_status）
```
# 各要素の取り出し
for i in pod_list.items:
    pod_ip = i.status.pod_ip
    pod_namespace = i.metadata.namespace
    pod_name = i.metadata.name
    pod_status = i.status.phase
    # READY
    if i.status.container_statuses is not None:
        ready_containers = sum(1 for c in i.status.container_statuses if c.ready)
        total_containers = len(i.status.container_statuses)
    else:
        ready_containers = 0
        total_containers = 0
    ready_field = f"{ready_containers}/{total_containers}"
```
以上で kubectl get pod コマンドを実行したときに表示される要素を取得できます．


ターミナルに表示したいときは以下のコードを使用すると，kubectl get pod コマンドを実行したときのような表示がされます．
また，テキストファイルに書き込みたいときも使えます．
```
txt = "%s\t%s\t%s\t%s\t%s\n" % (pod_ip, pod_namespace, pod_name, ready_field, pod_status)

print("IP Address   Namespace   Name    Ready   Status")
print(txt)
```

実行結果
```
--------------------
IP Address   Namespace   Name    Ready   Status
10.42.0.247     longhorn-system longhorn-csi-plugin-khcqd       1/3     Running
--------------------
IP Address   Namespace   Name    Ready   Status
10.42.0.252     longhorn-system csi-snapshotter-58bf69fbd5-tcnpd        0/1     Running
--------------------
IP Address   Namespace   Name    Ready   Status
10.42.1.153     longhorn-system longhorn-csi-plugin-s8kmq       1/3     Running
--------------------
```
Paizaのプログラミング学習ゲームをやってみた

# はじめに

https://x.com/paiza_official/status/1810690385100030290

Paizaの新作学習ゲームをやってみました。

ポ◯モンです。コドモンと言うようです。

簡単ではありますが、やってみた感想を書きます。

想定読者は以下です。
- このゲームが気になってる人
- プログラミング学習ゲーム・サイトを探している人
- このゲームを開発した方

# 最初のモンスター
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/a478286b-598f-af50-59d9-97a4e75a2d59.png)

- コンボ切れ1回免除
- スコア6%アップ
- コンボタイム2秒アップ

時間制限とコンボ・スコアがあるようです。
時間制限は苦手なので、「Bugドラゴン」を選択します。

# 画質・UI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/a14c445d-dbab-7ac3-bd4a-1697ebf62903.png)

画質悪いのは気になりますが、UIは（プログラミング学習系では）リッチなほうかも。

# ログインボーナス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/33c7ec4e-d5ad-c70e-b657-9145a312526f.png)

驚いたことにログボがあります。

# ガチャ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/82ffc797-4227-9da5-f1a4-87900364010a.png)

充実の6ガチャ。

「レア確率アップ」スキルがあるらしいです。

該当のコドモンをパーティに入れると、ガチャ確率が変動する模様。
積極的に狙っていきたいですね。

# フレーバーテキスト

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/7708f1fa-ffc0-9b83-9d27-433442aff8c4.png)

フレーバーテキストがしっかりしてます。好き。

# ステージ（問題）
JavaScriptをやってみました。
- `'`と`"`の使い分け
- `console.log`を使って出力
- コメントアウト

やってみた範囲はこんな感じ。
ステップバイステップなので、初心者にはいいかもしれません。

ただ個人的には、時間制限・コンボといった概念が集中の妨げになります。
同様の人にはCodeWarsがオススメです。

https://qiita.com/kohki_takatama/items/2ae2808b931e943262b8

---

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/f5b9b119-e1cd-d6ea-08a2-b1a03f744b08.png)


ステージの評価は制限時間です。

コイン・ダイヤもステージクリアで手に入ってますね。

# 対応言語
![スクリーンショット 2024-07-09 21.05.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/e73eb10e-f7b7-502f-bbc9-17646692c5fc.png)

PHP / Ruby / Java / Python / C / C# / JavaScript / C++ / Kotlin ですね。幅広いです。

# 編成
![スクリーンショット 2024-07-09 21.03.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/eef03468-81e5-7868-7936-e952dc007f85.png)

リーダーはスキルに関係するようです。
パーティは「レア確率アップ」以外の効果はなさそう

# UX
:::note alert
リーダー変更・パーティ変更の操作感
ステップが多く、面倒です。
:::
:::note
プログラミング問題の操作感
あくまで初級レベルですが、特に気になることはないです。
:::

:::note alert
ステージクリア後の機能遷移
![スクリーンショット 2024-07-09 20.58.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3457770/15f4159f-fde7-781a-b466-c3741ff7874d.png)
クリア→「マイページ」や「ガチャ」へ画面遷移→確認メッセージ
良くないですね。
:::

# おわりに
以上、Paiza新作ゲームを触ってみた感想でした。

個人的には、長期的に触れることはないかなと思います。

「学習」という面では「CodeWars」がオススメです。

https://qiita.com/kohki_takatama/items/2ae2808b931e943262b8

とはいえ、中にはゲームとして楽しみたいという方もいると思います。
そういった方にはいいのかなと思いました。
Webアプリにトラックパッド操作を実装した際にChromeのブラウザバックとバッティングする問題の解決策

とあるwebアプリを作っていた時に困ったことで、アプリ内でトラックパッド2本指でスクロールする操作を実装したところ、chromeのブラウザバックが被ってしまうという非常にUX体験が損なわれる事態に陥った。

解決法は以下。Googleスプレッドシートのソースコード見てたらこんな実装をしていたので真似させてもらった。
```css: index.css
html {
  overflow: hidden;
  overscroll-behavior-x: none;
}
```
VSCode 癒しを！vscode-petsでペットを飼おう

# VSCodeに癒しを！vscode-petsで心地よいコーディング環境を作ろう
プログラミングやコーディングの作業中に、ちょっとした癒しが欲しいと思ったことはありませんか？
そんなあなたにぴったりの拡張機能が「vscode-pets」です。
この拡張機能を使えば、VSCodeのエディタ内に可愛いペットが登場し、あなたの作業を見守ってくれます。
今回は、このvscode-petsの導入方法と、ペットを増やしすぎてしまった場合の対処法についてご紹介します。

## vscode-petsの導入方法

### 1. vscode-petsのインストール
まず、VSCodeの拡張機能マーケットプレイスから「vscode-pets」をインストールします。
VSCodeのサイドバーにある拡張機能アイコンをクリックし、検索バーに「vscode-pets」と入力してインストールボタンをクリックします。

### 2. ペットを追加する
右下に出てくるリスのマークより追加できます！
![スクリーンショット 2024-07-10 15.07.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/942de29a-338e-e6c6-b00c-6c37486e9912.png)


![スクリーンショット 2024-07-10 15.04.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/147005/5de580b4-2f46-c09a-761b-4d7cadd18484.png)

んぎゃわいいいいいいい

## ペットの削除方法

### 1. 特定のペットを削除する
ペットを増やしすぎてしまった場合、特定のペットを削除することができます。再びコマンドパレットを開き、"Pet Coding: Remove pet" コマンドを選択します。これで指定したペットを削除できます。
悲しいけどこれ戦争なのよね

### 2. すべてのペットを一度に削除する
もしペットが増えすぎてしまってエディタがごちゃごちゃになってしまった場合、一度にすべてのペットを削除する方法があります。コマンドパレットで "Pet Coding: Remove all pets" コマンドを選択すると、すべてのペットを一度に削除することができます。


## まとめ

vscode-petsを使えば、コーディング中にちょっとした癒しを感じることができます。
しかし、ペットを増やしすぎると作業の邪魔になってしまうこともあるので、適度な数を保つようにしましょう。
ペットを増やしすぎてしまった場合も、上記の方法で簡単に削除できるので安心です。

ぜひ、vscode-petsを導入して、心地よいコーディング環境を作ってみてください！

※ 8割AIライティングです
[PHP] xmlを読み込み、連想配列に格納する

### PHPでxmlを読み込み、連想配列に格納する
- chatGPTだと回答が不安定なので自分用にメモ。
```
    $xml = simplexml_load_string(file_get_contents('https://target.xml'), 'simpleXMLElement', LIBXML_NOCDATA | LIBXML_BIGLINES);
    if ($xml === FALSE) {
        die("Failed to parse XML data.");
    }
    $ary = json_decode(json_encode($xml));
```
【最新機能】Cloud Watch: 生成 AI を活用した自然言語クエリ生成

# はじめに

CloudWatchをよく使う方必見！
今回は、2024年6月10日に公開されたCloudWatchの<font color="Red">**クエリ文を自動で作成する方法**</font>をご紹介します。

# CloudWatchとは？

まず、CloudWatchについて簡単におさらいしましょう。Amazon CloudWatchは、AWSリソースやアプリケーションを監視するためのサービスです。メトリクスの収集、ログの監視、アラームの設定など、多岐にわたる機能を提供します。

 # CloudWatch Logs Insights

CloudWatch Logs内のログデータをクエリ言語を用いて効率的に分析するための強力なツールです。大規模なログデータを迅速に検索・分析し、運用問題の特定やトラブルシューティングを支援します。

 # 最新機能 クエリの自動生成の使い方

全てのリージョンで使用可能なのでぜひ使ってみましょう！

 1. サービスメニューから「Cloud Watch」を選択します。
 2. CloudWatchコンソールの左側のメニューから「ログのインサイト」を選択します。
 3. <font color="Red">**新たに追加された「Query generator」ボタンを押す**</font>とプロンプト入力欄が表示されるのでこちらにプロンプトを入力すれば使用することができます。

 ![スクリーンショット 2024-07-10 14.25.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/858ec46f-955e-c22c-0c1b-7706245d819f.png)

　公式で紹介されていたプロンプトを入力してみます。

 > Show me the 10 slowest Lambda requests in the last 24 hours
 >(翻訳) 過去24時間で最も遅いラムダ・リクエスト10件を表示する
 
 以下のような結果が得られました。

 ```
fields @timestamp, @message 
| filter @message like /(?i)REPORT/ and @duration > 1000 
| sort @timestamp desc 
| limit 10
 ```

本当に自動生成されました！すごい、、！！

# 注意点

クエリに入力するプロンプトは<font color="Red">**英語のみ対応**</font>みたいです。

# まとめ

Cloud Watchクエリ文の自動生成は嬉しい！

# おまけ

サンプル以外でも生成してみました。

> Please extract logs that contain "ERROR" in the past week.
> (翻訳)過去1週間の "ERROR "を含むログを抽出してください。

```
fields @timestamp, @message 
| filter @message like /(?i)ERROR/ and toMillis(@timestamp) >= (now() - 604800000)
```

条件通りのログを検索することができました！

![スクリーンショット 2024-07-10 14.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1991303/044c0df4-9c82-d4d3-1143-71d9ae452099.png)