OmniAICreator/Qiita-1.07M huggingface dataset:
AWS構成図の基本：インフラ設計をわかりやすく伝えるための描き方と重要ポイント

## はじめに
AWS環境でのインフラ構築は、クラウドサービスを活用することで、スケーラビリティや冗長性を備えたシステムが実現できる魅力的な手段です。

しかし、**複数のサービスが関わるため、事前に明確な構成図を作成することが重要です。**

構成図を作ることで、サービス間の関係やデプロイ手順を整理し、チーム内のコミュニケーションもスムーズになります。

本記事では、AWSインフラ構成図の重要性とおすすめツール、さらに実際に構成図を描く上でのポイントについて解説します。

## インフラの構成図とは
インフラ構成図は、システム全体の構成を視覚的に表現したものです。

![スクリーンショット 2024-11-04 17.38.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/8a1a7a33-a64f-11fd-df08-0f9e9b402b31.png)
引用画像：https://liginc.co.jp/585169

AWSのインフラ構成図では、VPCやサブネット、EC2インスタンス、ALB（Application Load Balancer）、RDS（Relational Database Service）などの主要コンポーネントがどのように相互接続されているかを示します。

:::note warn
**構成図を用いることで、インフラの全体像が一目で把握できるため、チームでの話し合いやトラブルシューティングが容易になります。**
:::

## おすすめのツールは「draw.io」
構成図を作成するツールとしておすすめなのが「draw.io」です。

https://app.diagrams.net/

draw.ioは無料で使えるオンラインの図作成ツールで、AWSアイコンを含むさまざまな図形が豊富に用意されています。

:::note info
また、Google DriveやDropboxと連携して、**作成した図をクラウド上に保存できるため、チームメンバーと簡単に共有することも可能です。**
:::

特にAWSの公式アイコンを使えば、視覚的にわかりやすい構成図が短時間で作成できます。

### draw.ioの利点
- 無料で使用可能
- 豊富なAWS公式アイコン
- クラウド連携で簡単に図を保存・共有

これ以外にも、個人的にはシンプルなインターフェースで使いやすい点が大好きです。

## 実際に描いてみた
実際にAWSのインフラ構成図を描いてみました。

:::note warn
**下記のスクリーンショットは、基本的なVPC構成から、ALB、ECS、RDS、IAMなどの複数サービスのアーキテクチャー設定を示したものです。**
:::

![スクリーンショット 2024-11-04 17.06.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/9fb2ef04-15ab-6f52-8c1a-188a1d236af3.png)

この構成図は、アプリケーションをインターネットからアクセス可能にしつつ、プライベートサブネットでデータベースを保護する一般的なウェブアプリケーションのインフラを表現しています。

## 書く上でのポイント
インフラ構成図を描く際には、以下のポイントに注意すると、よりわかりやすく、メンテナンスしやすい図になります。

以下のサイトも参考にしてみてください。

https://aws.taf-jp.com/blog/61489

### その１：全体のレイアウトを決める
最初に、ネットワーク構成を大枠で決めてから、各サービスを配置しましょう。**VPCやサブネットの区画ごとに色分けを行うと、視認性が高まります。**

### その２：サービスごとにアイコンを揃える
**AWSの公式アイコンを使うことで、サービスの種類が一目でわかるようにします。** また、ネットワークアイコン、データベースアイコン、セキュリティアイコンなど、アイコンごとにカテゴリ分けが大事になります。

###  その３：アクセスの流れを矢印で明示する
ユーザーからのアクセスや、内部通信の流れを矢印で示すことで、各サービス間のデータの流れがわかりやすくなります。**例えば、インターネットゲートウェイ（IGW）からALB、ALBからECSコンテナといった順番を矢印で示します。**

###  その４：冗長性や障害対応も図示する
**障害発生時のイベントや対応を図示することで、トラブルシューティング時に役立ちます。** 例えば、CloudWatchのアラートやEventBridgeによる自動復旧プロセスなども図に含めると一目で分かります。

###  その５：注釈を活用して詳細情報を付加する
必要に応じて、各アイコンの横に注釈を入れると、構成の目的や設定のポイントが理解しやすくなります。

## まとめ
AWS環境のインフラ構成図は、複雑なシステムを視覚的に整理し、チーム間のコミュニケーションを円滑にするために不可欠です。

:::note warn
**draw.ioを使うことで、効率的にわかりやすい構成図を作成できます。**
:::

構成図作成時には、レイアウトやアイコン選択、データフローの可視化、冗長性の表現などに配慮することで、完成度の高い図になります。


## 参考記事

https://qiita.com/marcio/items/fe86c0c8749edfd52399
【42】pipexで使うシステムコール（ファイル操作）

こんにちは。

42Tokyo本科生のなかじです。

今回は現在取り組んでいる”pipex”という課題で使うことが出来るシステムコールをまとめてみました。

## そもそもシステムコールとは何か？
システムコールとは、OSカーネルの機能や関数を呼び出すために使用する機能です。

例えば、C言語においてはmalloc()という動的メモリ確保を行うライブラリ関数は、その関数内においてsrbk() というシステムコールを呼び出すことでヒープ拡張が行われています。

## open()
### 使用目的

ファイルやデバイスをオープンしてファイルディスクリプタを取得する

新規ファイルの作成

既存ファイルへのアクセス権取得

### 使い方

```C
int open(const char *pathname, int flags); 
```
pathname: オープンするファイルパス

flags: アクセスモード(O_RDONLY/O_WRONLY/O_RDWR)とフラグの組み合わせ

### 戻り値

成功: 非負のファイルディスクリプタ

失敗: -1 (errnoにエラー詳細がセット)

### 特徴
:::note info
・新しいfdはexecveを実行した後もopenされたままとなる

・引き数 flags には、アクセスモード 
　O_RDONLY(読み込み専用), 
　O_WRONLY(書き込み専用), 
　O_RDWR(読み書き用) 
  　のどれかひとつが入っていなければならない。

・ファイルディスクリプタはプロセス固有

・複数のフラグを | で組み合わせ可能

・カレントワーキングディレクトリからの相対パス指定可能
:::

## close()
### 使用目的

ファイルディスクリプタを閉じる

システムリソースの解放

### 使い方

```C
int close(int fd);
```
fd: 閉じるファイルディスクリプタ

### 戻り値

成功: 0

失敗: -1 (errnoにエラー詳細がセット)

### 特徴
:::note info
・プロセス終了時に自動的に全てのfdがcloseされる

・fdはclose後に再利用される可能性がある

・書き込み中のデータは自動的にフラッシュされる

・同じfdを複数回closeすると未定義動作
:::


## read()
### 使用目的

fdからデータを読み込む

### 使い方
```C
ssize_t read(int fd, void *buf, size_t count);
```
fd: 読み込み元のファイルディスクリプタ

buf: 読み込んだデータを格納するバッファ

count: 読み込む最大バイト数

### 戻り値

成功: 読み込んだバイト数（0はEOF）

失敗: -1 (errnoがセット)

### 特徴
:::note info

・バッファサイズより少ないデータしか読めない場合がある

・ブロッキングI/O（デフォルト）

・パイプやソケットからの読み込みも可能

・読み込み位置は自動的に更新される
:::

## write()
### 使用目的

fdにデータを書き込む

### 使い方
```C
ssize_t write(int fd, const void *buf, size_t count);
```
fd: 書き込み先のファイルディスクリプタ

buf: 書き込むデータが格納されているバッファ

count: 書き込むバイト数

### 戻り値

成功: 書き込んだバイト数

失敗: -1 (errnoがセット)

### 特徴
:::note info
・要求したバイト数より少ない書き込みが発生する可能性（部分書き込み）

・ブロッキングI/O（デフォルト）

・パイプやソケットへの書き込みも可能

・ディスクの容量不足や書き込み権限がない場合はエラー

・書き込み位置は自動的に更新される
:::
GoによるHTTPレスポンス: `http.Error`と成功レスポンスの違い

GoでHTTPレスポンスを返すときに，成功時とエラー時で異なるアプローチが必要になることがあります．特に，**エラーレスポンスを送信するための`http.Error`関数**と，**それに対応する成功レスポンス時の処理**について新たな学びがあったため，ここに残しておきます．
## `http.ResponseWriter`とは
まず，GoのHTTPハンドラでは`http.ResponseWriter`を使ってレスポンスを書き込みます．`http.ResponseWriter`は，ステータスコードやメッセージを設定し，レスポンスを生成するためのインターフェースです．

基本的な使い方としては，以下のようにステータスコードとメッセージを設定します．
```go
w.WriteHeader(http.StatusOK)
w.Write([]byte("This is a successful response"))
```
ここでは成功時を例に挙げましたが，エラーレスポンスを送信するためにはこの2行の処理を一括で行うことのできる`http.Error`が用意されています．
## `http.Error`について
`http.Error`は，**エラーレスポンスを簡単に送信**するための関数で，上述の通りエラーステータスコードとエラーメッセージを1行で設定することができるため，エラーハンドリングがシンプルになります．

例えば，サーバー内でエラーが発生した際には，以下のように`http.Error`を使います．
```go
http.Error(w, "An error occured", http.StatusInternalServerError)
```

## `http.Error`の内部処理
`http.Error`は，以下の2つの処理をまとめて行っています．

**1. ステータスコードの設定**
`w.WriteHeader(statusCode)`を内部で呼び出し，エラーステータスコードを設定します．

**2. エラーメッセージの送信**
`w.Write([]byte("message"))を使って，メッセージ本文としてエラーメッセージを送信します．

## まとめ

 - `http.Error`は，**エラーメッセージとステータスコードを一度に設定して送信できる便利な関数**
 - 成功時はそのような便利関数が提供されていないため，`w.WriteHeader`と`w.Write`を組み合わせて送信する必要がある
Rspecのエラー:  undefined method `include' for an instance of RSpec::Expectations::ValueExpectationTarget

非常に初歩的なミスだが、戒めのための備忘録

Userモデルの`first_name`には`validates :first_name, presence: true`というバリデーションがかけられており、バリデーションが正しく動いているかテストしたかったので、バリデーションをかけた際に以下のようにオブジェクトにエラーメッセージが含まれるか確認するための非常によくあるテストを書いた

```ruby
it "is invalid without a first name" do
  user = User.new(
    first_name: nil,
    last_name: "Sumner",
    email: "tester@example.com",
    password: "dottle-nouveau-pavilion-tights-furze"
  )
  
  expect(user.errors[:first_name]).to include("can't be blank")
end
```

上記のspceを実行したところ以下のようなエラーが出た

```
1) User is invalid without a first name
     Failure/Error: expect(user.errors[:first_name]).include("can't be blank")

     NoMethodError:
       undefined method `include' for an instance of RSpec::Expectations::ValueExpectationTarget
     # ./spec/models/user_spec.rb:23:in `block (2 levels) in <top (required)>'
```

Rspec上で作成されたインスタンスに`include`メソッド(マッチャ)が無いなんてことあるか？と思ったが、単純にバリデーションを実行した結果を返す`valid?`を書き忘れていたという超初歩的なミスだった

```ruby
it "is invalid without a first name" do
  user = User.new(
    first_name: nil,
    last_name: "Sumner",
    email: "tester@example.com",
    password: "dottle-nouveau-pavilion-tights-furze"
  )

  user.valid? # 追加
  expect(user.errors[:first_name]).to include("can't be blank")
end
```

以上
Windows PCのUSB-HDDの電源を切れなくする方法 part2（winスケジューラ＆VBScript）

Windows PCのUSB-HDDの電源が自動で落ちてしまう問題の対処方法の第2弾です。「USBセレクティブサスペンド」の無効化等でも効果がなかった方は必見です。

前回の以下記事では、WSL+Linuxスケジューラ(cron)を使った対処方法を紹介したのですが、普段WSLやLinuxに縁がない方には、とっつきづらい方法でした。

https://qiita.com/shima202102/items/a81f041e709769d76a80

今回は、その点を解消するために、Windows標準のタスクスケジューラとVBScriptを使った対処方法を紹介します。

PC環境
- OS: Windows 11 Home
- CPU: AMD Ryzen 7 3700X
- マザーボード: PRIME B550M-K (ASUSTeK COMPUTER INC.)
- USB-HDD: WD Elements 25A3 (10TB)

# 対処方法

やることは、前回同様、以下です。

:::note info
一定時間毎にUSB-HDDに自動アクセスする
:::

これの実現方法として、今回は、面倒な環境構築が不要な以下方法を実施しました。

:::note info
USB-HDDにテキストファイルを出力するVBScriptを、
Windows標準のタスクスケジューラで定時実行
:::

手順は以下です。
1. USB-HDDに自動アクセスするVBScriptを作成
1. VBScriptを、タスクスケジューラに設定

## 1.USB-HDDに自動アクセスするVBScriptを作成

VBScriptの内容は、

:::note info
ターゲットとなるUSB-HDDにアクセス
:::

という処理であれば何でもよいです。スクリプトファイルの保存場所／名前も任意です。

以下例は、前回同様、現在時刻を、USB-HDDがあるFドライブにテキストファイル（hdd_accessed_win_vbs.txt）出力する処理です。

```vb:hdd_access_win.vbs
Const FILE_PATH = "F:\work\hdd_accessed_win_vbs.txt"

Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")

Dim ts
Set ts = fso.CreateTextFile(FILE_PATH, True)

ts.WriteLine Now()
ts.Close()

Set ts = Nothing
Set fso = Nothing
```

ご自分の環境に合うよう、先頭行のFILE_PATH設定値を編集すれば、あとは、そのまま使っていただくでもOKです。

## 2.VBScriptを、タスクスケジューラに設定

まずは、タスクスケジューラを起動します。
起動方法は以下です。

① Windowsスタートボタンをクリック
② 検索窓に「タスクスケジューラ」と入力（下図）
③ 「タスクスケジューラ」をクリック

![タスクスケジューラ検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/65a61c19-c6f4-bb84-342a-298ab6008855.png)


タスクスケジューラを起動したら、右の「タスクの作成...」（下図赤枠）をクリックします。
![タスクの作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/4542afc6-d785-4517-09c6-c69da9927985.png)

各タブに設定する内容は下表です。
| タブ | 内容 | 設定例 |
|:----|:------|:------|
| 全般 | ※名前/説明は任意 | ![スケジューラ_全般タブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/bbb19505-a3c1-3afa-e0ab-b359469d301c.png) |
| トリガー | 左下の「新規(N)..」ボタンを押下し、詳細設定の「「繰り返し間隔」（赤枠）に、時間を入力<br>（右記例は、10分間） |  ![スケジューラ_トリガータブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/d5eec327-4a4d-ac64-cb77-55dae9e1b886.png) |
| 操作 | 左下の「新規(N)..」ボタンを押下し、「プログラム/スクリプト(P)」欄（赤枠）に、上述1.で作成したVBScriptファイルのパスを入力 |  ![スケジューラ_操作タブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/a4d997ab-3a64-8bcb-d841-1ef22c9b104a.png) | 
| 条件 | ※何もさわらなくてOK | ![スケジューラ_条件タブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/7841a69a-d462-0bde-1ce7-9bf4136597a4.png) |
| 設定 | 失敗時の再実行（赤枠）をチェック（※）<br>時間や試行回数は適当 | ![スケジューラ_設定タブ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1299377/a8b3918e-2075-eae6-3e6e-d6115b9e7b86.png) | 

（※）これをやらないと、なぜか、一度失敗するとタスクが起動されなくなりました。

これで、VBScript（hdd_access_win.vbs）が定期的（上記例だと10分毎）に実行され、USB-HDDに定期的に自動アクセスするようになり、USB-HDDの電源が切れることがなくなりました。

# おわりに

Windows上のスクリプトといえば、バッチファイルやPowerShellスクリプトが真っ先に思い浮かびますが、これらを使うと、どうしても一瞬、コマンドプロンプト／PowerShellウィンドウが出てきてしまいます。

一瞬なので、気にならない方はそれでいいのですが、動画配信向けに画面キャプチャ録画するような方には、一瞬黒い画面が入り込んでしまったり、フォーカスを奪われたりしてしまうので、不向きです。

ググると、コマンドプロンプト等を非表示にする方法も出てきますが、その方法が、VBScriptを使ってバッチファイル等を起動する方法だったりします。だったら、VBScriptだけで実現したほうがシンプルかと思い、今回、この方法としました。USB-HDDの悩みを抱える方に、お役立ちできれば幸いです。
LambdaをVPCに配置するかの検討ポイントを調べた

# VPC内リソースへのアクセス要件
LambdaがRDSやElastiCache、Amazon Redshift、Neptune DB clusterなど、VPC内部に配置されたリソースにアクセスする必要がある場合、Lambdaも同じVPCに配置する必要があります。（RDS Proxyなどほかの手段を取らない前提）

これにより、Lambdaはプライベートなサブネットにアクセスできるようになります。

# セキュリティ要件
セキュリティが重視されるシステムや、外部からのアクセスを防ぎたい場合には、LambdaをVPC内に配置することが推奨されます。

これにより、Lambdaの実行環境はパブリックインターネットから隔離され、アクセスコントロールが強化されます。

# インターネットへのアクセス要件
LambdaをVPCに配置すると、インターネットアクセスがデフォルトで無効になります。

VPCに配置されていないLambda関数は、インターネットに直接アクセスできるため、外部APIやWebサービスへの接続が容易です。

もしLambdaがインターネット経由で外部APIなどにアクセスする必要がある場合、**NATゲートウェイ**や**インターフェイスVPCエンドポイント**の設定が必要です。

インターネットアクセスが不要な場合は、VPC内にLambdaを配置して、完全にインターネットから切り離すことも可能です。

# コストやパフォーマンス要件
LambdaをVPC内に配置すると、パフォーマンスが多少影響を受ける場合があります。

Lambdaが起動するたびにENI（Elastic Network Interface）を割り当てるため、起動時間が長くなることもあります。

また、NATゲートウェイを用意する場合、追加のコストがかかることも考慮に入れる必要があります。

# 参考サイト

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc.html

https://qiita.com/Kanahiro/items/f42ebda342673a632abe

https://devlog.arksystems.co.jp/2018/04/04/4807/
React学習を開発環境の構築で挫折した人へ

# はじめに
本記事はプログラミングスクール「[JISOU](https://projisou.jp/)」課題1の[勉強時間記録アプリ](https://github.com/yanasita/RecordTimeApp)の開発記録の記事です。0からReactの環境構築を行い、アプリケーションを作成しました。

が、**React のローカル開発環境の構築に開発の5倍時間がかかった**こと、**自分が一度挫折した際も開発環境の構築で引っかかっていた**ことから、同じような人もいるのではと思い、開発やコーディングよりは環境構築を中心に記述することにしました。

しかし、まだ自分も React をよくわかっていないため、実行コマンド等の具体的な方法は記述しておりません。参考にしたサイトのリンクをトピック毎にまとめましたので、そちらをご覧ください。

# 本記事の対象者
- IDE 無しでの開発方法がわからない微経験者
（Eclipse に全てを任せきりにしてなんとなく Java を使っているような人）
- 一旦 React のコードを書いてローカル環境で実行できるようにしたい人
- 検索ワードさえわかればどうにかなりそうな人

# 1. Node.js を入れる
React は JavaScript のライブラリですが、JavaScript はブラウザ上でしか動きません。そこで Node.js を入れ、ローカル環境でも JavaScript が動けるようにします。Homebrew のようなパッケージマネージャーを入れると楽です。

具体的なインストール方法については詳しい記事がたくさんあるため割愛しますが、**絶対にOSのバージョンを上げてからインストールしてください**。私はそれで3時間ほど無駄にしました。

ちなみに Node.js 自体については以下の記事がわかりやすく解説されています。

https://qiita.com/non_cal/items/a8fee0b7ad96e67713eb

# 2. プロジェクトを作る
ここが個人的な挫折ポイントだと思います。
いつもならIDEがワンクリックで作ってくれるため、手も足も出なくなってしまうのですね。
実はコマンドひとつで作ることができます。

https://ja.react.dev/learn/start-a-new-react-project

# 3. VSCodeを拡張する
React に IDE は存在しませんが、[Visual Studio code](https://code.visualstudio.com/download) に拡張機能をたくさん入れると IDE のように使用することができます。

以下の記事を参考にしたところ、とても快適になりました。
git の利用も GUI から使用可能になります。

https://qiita.com/newt0/items/b7810fb38c339ec5e4a7

# 4. npm コマンドをワンクリックで実行する
ついでに毎回ターミナルを開くのも嫌だったため、以下の記事を参考にワンクリックで npm コマンドを実行できるようにしました。

https://qiita.com/yoshii0110/items/7bfde646d9360d1fa568

https://zenn.dev/melon1891/articles/run_npmscript_from_sidepanel_on_vscode

# 終わりに
自分は React の学習をこの環境構築の段階で諦めており、スクールの（そのまま実行するだけの）ドキュメントがあっても苦戦しました。

環境構築が苦手なだけかもしれませんが、挫折してしまったのは、**React がなんなのか、どう動いているのかもよくわからない状態で環境構築から入ってしまったのも敗因**だと思っています。

この記事を読んでもさっぱりだった方は、**ブラウザで動作するオールインワンな開発環境もある**ため、そちらで React の動作を把握してから再挑戦しても良いかもしれません。

今回自分がアプリ開発まで辿り着けたのは事前に React の基礎知識をインプットしており、適切な検索ワードを捻り出せたのもかなり大きかったです。

ちなみに、React学習のロードマップは以下の記事で公開されています。
ご参考までに。

https://qiita.com/Sicut_study/items/7d8c6f309dddda1a3961

本投稿はリンク先の課題1に相当し、初めての React アプリとして、画像の[学習時間記録アプリ](https://github.com/yanasita/RecordTimeApp)を作成した際の記事です。

<img width="200" alt="作成したアプリケーションの画面" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3918547/4f926928-8ac9-d7e7-d1a4-18c0baadfb0b.png">

# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてくださ！
▼▼▼

https://projisou.jp
JavaScriptでゲームエンジンをつくりたいPart0

# はじめに
「ゲームを作りたい。しかし既存のエンジンを使って作ったら負け」というよくわからない逆張りが働いてしまったので作ってみようと思いました。
JavaScriptを選んだ理由はもともとやっていたからです。(簡単っていうのも多少はある)

# 方針
Canvasで2D→それぞれのゲームジャンルに特化させるアドオンのようなものを作る→WebGLに対応
という感じにしたいと思ってます。余裕があったら3Dも作りたいかも...

# 開発環境
Windows11
Visual Studio Code

# その他
作ったものはGitHub上で公開しようと思ってます。
何かあったらコメントでご指摘していただけたら幸いです。

&nbsp;  
次回：https://qiita.com/Rei-Miyakawa/items/456dd9798d0dffa44c11
Salesforceでレコードタイプを使わない場合～プロファイルとページレイアウトでのみ対応できる設定～

本橋孝昭です

今回はSalesforceでレコードタイプを使わない場合について解説します


## パターン1 ユーザーのプロファイルごとに異なるページレイアウトを表示させる場合

この場合、（一見別々のユーザーに別々のページレイアウトを見せるからレコードタイプが必要か？と思うかもしれないですが）
この場合はレコードタイプは必要ないです

Salesforceの画面を見ながら説明します


例として
・プロファイル「関東営業」のユーザーは取引先のページレイアウトは必ずページレイアウト「関東」を表示させたい
・プロファイル「関西営業」のユーザーは取引先のページレイアウトは必ずページレイアウト「関西」を表示させたい
という場合を想定します。

この場合、
レコードタイプは不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/96151368-622d-2dcd-254b-be8d6620f766.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/5d7473f4-32b0-45e3-4d00-a71a3dd329fa.png)

設定としてはページレイアウトの設定で下記のようになります


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/4eba2190-a167-df79-6367-9419fd081a92.png)


プロファイル側ではこのように設定変更になります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/9d034086-0b80-2490-9f2c-b0ba673b4ca9.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/a0af327f-4f4e-e1bc-d47c-e2704bbb9e2b.png)


このようにプロファイルごとにページレイアウトの設定を変更すればレコードタイプの設定は無しに

・プロファイル「関東営業」のユーザーは取引先のページレイアウトは必ずページレイアウト「関東」を表示させたい
・プロファイル「関西営業」のユーザーは取引先のページレイアウトは必ずページレイアウト「関西」を表示させたい
という設定が可能です


他にもレコードタイプについて確認したい場合記事にしましたので確認してください

https://qiita.com/Takaa/items/ff249904323a3d8ee041
メモ：hyperでfishを使う

# hyperでfishを使う

## fishの使用
### fishのインストール
brewでfishをインストールする。
```
brew install fish
```

### hyperのshellをfishに設定
まず，`.hyper.js` をviで開く．
```
vi ~/.hyper.js
```
config.shell の値がデフォルトは`''`になっているので、`'/usr/local/bin/fish'` に修正する。
```
module.exports = {
  config: {
    shell: '/usr/local/bin/fish'
  }
}
```
設定の保存が完了したらターミナルを再起動すると、fishが使えるようになります。
Overleafを自前サーバーでセルフホストして、ローカルネットワークでアクセスできるようにする

# はじめに
こんにちは、ユーゴです。今回は、研究室のサーバーでOverleafをセルフホストし、ローカルネットワーク内からアクセスできるようにした記録です。

# 使用したもの
・Linux (Ubuntu 24.04.1 LTS)
・Docker
・overleaf-toolkit

# 前提
・サーバー自体へのアクセスは、ufwなどで「IP:192.168.xxx.xxx/24」「Port:80」がALLOWされている。

# 問題
localhostではアクセスできたが、ローカルネットワーク内でoverleafにアクセスできない。ローカルネットワーク内に公開したい。

# 解決
「overleaf-toolkit > config > overleaf.rc」の「OVERLEAF_LISTEN_IP=127.0.0.1」を「OVERLEAF_LISTEN_IP=0.0.0.0」に変更する。

```plaintext
# Sharelatex container
# Uncomment the OVERLEAF_IMAGE_NAME variable to use a user-defined image.
# OVERLEAF_IMAGE_NAME=sharelatex/sharelatex
OVERLEAF_DATA_PATH=data/overleaf
SERVER_PRO=false
OVERLEAF_LISTEN_IP=127.0.0.1
OVERLEAF_PORT=80

(後略)

```

これで、いかなるIPアドレスからのアクセスも許可します。

あとは、`http://<サーバーのローカルIP>/login`にアクセスすれば、ログイン画面が出てきます。

![overleaf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/a4a3b443-929d-7712-a876-a1fd86f24112.png)

0.0.0.0はどのIPアドレスからのアクセスも許可するため、サーバーが外部に公開されている場合は注意してください。必要な場合は、ufwなどでサーバー自体のファイアウォールを設定するか、OVERLEAF_LISTEN_IPを制限してください。


# まとめ
いかがだったでしょうか。今回は、自前サーバーでOverleafをセルフホストしたものを、ローカルネットワークでアクセスできるようにしました。
このように、OverleafなどGUIツールの使い方から、Unity, AWS, GAS, 量子コンピューティングなど、幅広いジャンルを紹介しています。
お役に立てましたら、いいね, フォローなどよろしくお願いします！
direnvのインストール手順 hook direnv into your shell. について調べてみた

direnvは、ディレクトリ毎に環境変数を定義することで、ディレクトリがカレントになった時だけ環境変数を有効にできるツールです。

https://github.com/direnv/direnv

[インストール手順](https://github.com/direnv/direnv?tab=readme-ov-file#basic-installation)の`hook direnv into your shell.`で設定している内容が気になったため、少し調べてみました。

# `hook direnv into your shell.`で何をしているの？
Bashの場合、`~/.bashrc`ファイルの末尾に`eval "$(direnv hook bash)"`を追加しています。
> Add the following line at the end of the ~/.bashrc file:
> `eval "$(direnv hook bash)"`

それでは、`~/.bashrc`ファイルと`eval "$(direnv hook bash)"`についてそれぞれ調べていきましょう。

## `~/.bashrc`ファイルとは
Bashのマニュアル**6.2 Bash Startup Files**に記載があり、**Bashが対話型シェルとして起動される時に読み込まれるファイル**です。
> **Invoked as an interactive non-login shell**
> When an interactive shell that is not a login shell is started, Bash reads and executes commands from ~/.bashrc, if that file exists.

## `eval "$(direnv hook bash)"`とは
こちらはもう少し分解して調べた方がよさそうです。
以下の要素に分解して調べていきましょう。
- eval
- ""
- $()
- direnv hook bash

### evalとは
Bashのマニュアル**4.1 Bourne Shell Builtins**に記載があり、引数に記載したコマンドを読み込み実行することができます。

> `eval [arguments]`
The arguments are concatenated together into a single command, which is then read and executed, and its exit status returned as the exit status of eval. If there are no arguments or only empty arguments, the return status is zero.

### ""とは
Bashのマニュアル**3.1.2.3 Double Quotes**に記載があり、二重引用符("")の中ではパラメータとコマンドの置換が行われます。

> Enclosing characters in double quotes (‘"’) preserves the literal value of all characters within the quotes, with the exception of ‘$’, ‘`’, ‘\’, and, when history expansion is enabled, ‘!’.

### $()とは
Bashのマニュアル**3.5.4 Command Substitution**に記載があり、`$()`で括られたコマンドはそのコマンドの出力に置き換えられます。

> Command substitution allows the output of a command to replace the command itself. Command substitution occurs when a command is enclosed as follows:
$(command)

また、`$()`を二重引用符で囲むことで、出力が単語に分割されず単一の文字列としてシェルの入力に渡されます。

> If the substitution is not enclosed in double quotes, the output is broken into words using the IFS parameter.

前述した`""`を併用し`"$()"`とすることで、**コマンド置換の出力を単一の文字列としてシェルに渡す**ことができます。

### direnv hook bash とは
direnvのhookコマンドです。引数に`bash`を指定することで**Bash用のフックを設定するためのスクリプトを出力**しています。
コマンドの詳細は[direnvのGitHub](https://github.com/direnv/direnv/blob/master/internal/cmd/cmd_hook.go)で確認できますが今回は割愛させていただきます。

### `eval "$(direnv hook bash)"`についてまとめ
各要素に分解して調べた結果をまとめます。
- `direnv hook bash`で**Bash用のフックを設定するためのスクリプトを出力**する
- `eval "$()"`で**上記出力を単一の文字列としてシェルに渡し実行**する

## `hook direnv into your shell.`でしていること
`~/.bashrc`ファイルと`eval "$(direnv hook bash)"`についてそれぞれ調べた結果から、**Bashの起動時に、Bash用のフックを設定するためのスクリプトを実行している**ことがわかりました。

# まとめ
いかがでしたでしょうか？

`hook direnv into your shell.`でしていることについてはわかりましたが、direnvのhookコマンドで出力される**Bash用のフックを設定するためのスクリプト**が何をしているのかも気になりました。

次は、Bash用のフックを設定するためのスクリプトについても調べてみたいと思います。

# 参考情報
[direnv](https://github.com/direnv/direnv)
[Bash Reference Manual](https://www.gnu.org/software/bash/manual/bash.html)
moreコマンドでctrl-dでスクロール連打しているとセッションもろとも終了してしまうとき

Linuxでファイルを照会するときにmoreコマンドでスクロールを続けて実行していると。
moreコマンドはファイル末尾でスクロールをするとmoreコマンド自体が自動終了してしまうため。
moreコマンドの終了後にさらにctrl-dを実行してスクロールではなく、制御文字のctrl-d（End Of File）が実行されてセッションもろとも終了してしまう事がたまにあります。

moreでスクロールする際は、気を付けてスクロールしていますがたまに失敗してセッションごと終了してしまいます。

## 対応策

そもそもmoreコマンドではなくlessコマンドを利用する。

lessコマンドを利用するれば、moreコマンドとは違いファイル末尾でスクロールをしても`(END)`と表示されるだけでlessコマンドは終了せず、moreコマンドの時のようなコマンド終了後に制御コードが入力されてといった事故は防げます。

## 総評

moreコマンドとlessコマンドは何も考えずにその時々でどちらかを利用していましたが。
lessの方が細かい事できたり、こういった事故も防げるのでlessコマンドを利用するのが便利かと思います。
SNMP 入門のための環境構築

# はじめに
SNMPの学習をする必要ができたのですが、実践に勝る学習方法は無いということで、環境構築して実験してみます。

## 1. WSLの準備
WSLのUbuntu環境でNet-SNMPをインストールします。

### 1.1. Linuxのインストール
以降は、Ubuntu上で操作しますので、Ubuntuをインストールしておいて下さい。

## 1.2. Net-SNMPのインストール

### **パッケージリストの更新**:
   ```sh
   sudo apt update
   ```
###  **Net-SNMPのインストール**:
   ```sh
   sudo apt install snmp snmpd
   ```
## 2. SNMPエージェントの設定
`snmpd.conf`ファイルを設定します。

### 2.1. **設定ファイルの編集**:
   ```sh
   sudo nano /etc/snmp/snmpd.conf
   ```

### 2.2. **基本的な設定を追加または変更**:

以下の内容を追加または変更します。
   ```plaintext
   rocommunity public
   syslocation "Your Location"
   syscontact "Your Contact"
   ```

  外部からのアクセスを許可します
   ```plaintext
   agentaddress udp:161,udp6:[::1]:161
   ```

### 2.3. **SNMPデーモンの再起動**:
   ```sh
   sudo service snmpd restart
   ```

## 3. MIB送信のエミュレート
SNMPエージェントからデータを取得します。

### 3.1. snmpwalkコマンドの実行
   ```sh
   snmpwalk -v 2c -c public localhost
   ```

このコマンドは、SNMPバージョン2cを使用して、コミュニティ名publicでローカルホストからMIBデータを取得します。



## 4. Windows側アプリ

### 4.1. 動作確認

MIB Browser: iReasoning社のMIB Browserは、商用ソフトですが、無料版も提供されています。動作確認してみます。

MIB Browser
https://www.ireasoning.com/mibbrowser.shtml

## 5. まとめ
1. WSLとUbuntuをインストール
1. Net-SNMPをインストール
1. snmpd.confを設定
1. snmpwalkコマンドでMIBデータを取得
1. Windows側でMIB Browserを使用して動作確認

これで、WSLを使用してSNMPのエミュレートが可能になります。
terraform aws-vpc作成

# 最初に

terraformを業務で使用することになりました。
そのため勉強したことをまとめています。

# terraformでaws-vpc作成
※リソース名等を意味のないものに変更しています。

main.tf

```
# プロバイダーとプロファイルの指定
provider "aws" {
  shared_credentials_files = ["~/.aws/credentials"]
  region                   = "ap-northeast-1"
  profile                  = "profile-name"
}
# tfstateファイル格納先の指定
# バケットは事前に作成する必要あり。
terraform {
  backend "s3" {
    bucket  = "s3-bucket"
    key     = "tfstateファイル格納先指定"
    encrypt = true
    region  = "ap-northeast-1"
    profile = "profile-name"
  }
}
# aws-vpc作成
resource "aws_vpc" "vpc-name" {
  cidr_block                       = "0.0.0.0/0"
  # VPC内でインスタンスにDNSホスト名を割り当てるか
  enable_dns_hostnames             = true
  # vpc内での名前解決をできるようにするか
  enable_dns_support               = true
  # EC2インスタンスがどのハードウェア上で実行されるか指定
  # default:他のユーザーとハードウェアを共有する
  # dedicated:専用のハードウェア上で実行
  instance_tenancy                 = "default"
  # IPv6 CIDRブロックを自動的に割り当てるか
  assign_generated_ipv6_cidr_block = true

  tags = {
    Name = "vpc-name"
  }
}
# サブネットの作成①
resource "aws_subnet" "subnet-name_1a" {
  vpc_id            = aws_vpc.vpc-name.id
  cidr_block        = "0.0.0.0/0"
  availability_zone = "ap-northeast-1a"

  tags = {
    Name = "subnet-name_1_1a"
  }
}
# サブネットの作成②
resource "aws_subnet" "subnet-name_1c" {
  vpc_id            = aws_vpc.vpc-name.id
  cidr_block        = "0.0.0.0/0"
  availability_zone = "ap-northeast-1c"

  tags = {
    Name = "subnet-name_1c"
  }
}
# ルートテーブルの作成
resource "aws_route_table" "table-name" {
  vpc_id = aws_vpc.terraform_vpc.id

  tags = {
    Name = "table-name"
  }
}
# インターネットゲートウェイの作成
resource "aws_internet_gateway" "igw-name" {
  vpc_id = aws_vpc.vpc-name.id

  tags = {
    Name = "igw-name"
  }
}
# サブネットとルートテーブルを関連付け
resource "aws_route_table_association" "table_association" {
  subnet_id      = aws_subnet.subnet-name_1a.id
  route_table_id = aws_route_table.table-name.id
}
# ルートテーブルとインターネットゲートウェイを関連付け
resource "aws_route" "table-name" {
  route_table_id         = aws_route_table.table-name.id
  destination_cidr_block = "0.0.0.0/0"
  gateway_id             = aws_internet_gateway.igw-name.id
}

```

outputs.tf

```
# 下記はすべて作成したリソースを外部から値を読み取れるように設定しています。
# 例として別フォルダでrds作成用のコードを作成し今回作成したサブネットの値を指定したい場合outputsで読み取りできるようにしないとサブネットを値を取得できません。

output "vpc_id" {
  value = aws_vpc.vpc-name.id
}
output "vpc_cidr" {
  value = aws_vpc.vpc-name.cidr_block
}

output "subnet-name_1a_ids" {
  value = aws_subnet.subnet-name.id
}
output "subnet-name_1a_cidrs" {
  value = aws_subnet.subnet-name_1a.cidr_block
}

output "subnet-name_1c_ids" {
  value = [aws_subnet.subnet-name_1c.id]
}
output "subnet-name_1c_cidrs" {
  value = [aws_subnet.subnet-name_1c.cidr_block]
}

output "igw_id" {
  value = aws_internet_gateway.igw-name.id
}

output "rt_public_ids" {
  value = aws_route_table.table-name.id
}
```

# 最後に

上記内容ではサブネット"subnet-name_1a"がパブリックサブネットになりサブネット"subnet-name_1c"がプライベートサブネットになります。
そしてサブネット"subnet-name_1c"は特段どことも明示的にルートテーブルと関連付けしていないためデフォルトのルートテーブルと自動で関連付けされます。
terraformで初めて作成したものになるため色々反省点はありますが、とりあえず動くものはできました。
実際に業務で使用する場合はサブネットの数を増やさないといけない等修正は必要になります。
そしてresourceで宣言するよりmoduleを使用するとコードが短くわかりやすいと思うのでmoduleでも書きたいです。
また次はプレフィックスリストやセキュリティグループについても作成したので書きたいです。
Viteを使用する際の環境変数の読み込み方（React）

## 概要
ReactでViteを使用する際に、.envの環境変数を読み込ませるのにVite独自の注意点があったので紹介します。

## 参考
https://ja.vite.dev/guide/env-and-mode.html#%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0%E3%81%A8%E3%83%A2%E3%83%BC%E3%83%88%E3%82%99

## .env側の注意点
環境変数は`VITE_`から始めること
```react
VITE_SOME_KEY=123
DB_PASSWORD=foobar
```
```react
console.log(import.meta.env.VITE_SOME_KEY) // "123"
console.log(import.meta.env.DB_PASSWORD) // undefined
```
上記の例だと、VITE_SOME_KEYは`VITE_`から始まっている環境変数名のため読み込めるが、DB_PASSWORDは読み込めない

## 環境変数の読み込み時の注意点
`import.meta.env`から始めて、読み込みたい環境変数名を後ろに繋げる
```react
import.meta.env."環境変数名"
```

## まとめ
Viteでは、`import.meta.env` オブジェクトに環境変数が公開されていると知りました。
一度覚えてしまえばViteのお作法のようなものなので、環境変数名と環境変数を読み込ませる際の記述だけ気をつければ大丈夫だと思います。
JavaScriptのexportについて

JavaScriptのexportは、他のファイルやモジュールでコードを再利用できるようにするために、関数や変数、クラスを外部に公開する仕組みです。exportを使うことで、モジュール間の依存関係を作りながら、コードを分割して管理しやすくすることができます。

**exportには主に以下の2種類の方法があります。**

# 1. Named Export (名前付きエクスポート)
名前付きエクスポートでは、複数の関数、変数、クラスを一つのファイルからエクスポートできます。名前を指定してエクスポートするため、インポート時にはその名前を使って指定する必要があります。

使用方法
宣言と同時にエクスポート：

```javascript
export const greeting = "Hello, World!";

export function sayHello(name) {
  return `Hello, ${name}!`;
}

export class Greeter {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return `Hello, ${this.name}!`;
  }
}
```
まとめてエクスポート：最後にまとめてエクスポートする方法もあります。

```javascript
const greeting = "Hello, World!";

function sayHello(name) {
  return `Hello, ${name}!`;
}

class Greeter {
  constructor(name) {
    this.name = name;
  }
  greet() {
    return `Hello, ${this.name}!`;
  }
}

export { greeting, sayHello, Greeter };
```
インポート方法
名前付きエクスポートをインポートする際は、エクスポートした名前と同じ名前を使います。また、複数のエクスポートをまとめてインポートすることも可能です。

```javascript
import { greeting, sayHello, Greeter } from './moduleName';
```
エイリアスを使ったインポート
名前を変えてインポートする場合は、as キーワードを使います。

```javascript
import { sayHello as helloFunction } from './moduleName';
```

# 2. Default Export (デフォルトエクスポート)
デフォルトエクスポートでは、1つのファイルにつき1つだけエクスポートが可能です。インポートする側は、名前を自由に決めてインポートできます。

使用方法
デフォルトエクスポートは export default を使って行います。例えば、以下のように1つの関数をデフォルトエクスポートすることができます。

```javascript
// モジュールファイル moduleName.js
export default function sayHello(name) {
  return `Hello, ${name}!`;
}
```

インポート方法
デフォルトエクスポートをインポートする際は、名前を自由に決めることができます。

```javascript
import sayHello from './moduleName';
sayHello('Alice'); // "Hello, Alice!"
```
また、デフォルトエクスポートと名前付きエクスポートを組み合わせることも可能です。

```javascript
// moduleName.js
export const greeting = "Hello, World!";
export default function sayHello(name) {
  return `Hello, ${name}!`;
}
```

```javascript
// 他のファイルでのインポート
import sayHello, { greeting } from './moduleName';
```

# まとめ
特徴	Named Export	Default Export
複数エクスポート	可能	不可（一つだけ）
インポート名	エクスポート時の名前が必要	インポート名は自由に指定可能
用途	複数の機能をエクスポートする	メイン機能を1つエクスポートする
どちらのエクスポートも、モジュールごとに機能を分割して管理しやすくするために便利な方法です。

**最後までよんでいただきありがとうございます。
@y-t0910をフォロー,いいねしていただけると嬉しいです！**
Matplotlibのax.plot()についての解説

## Matplotlibの`ax.plot()`についての解説

`ax.plot()`は、Pythonのデータ可視化ライブラリMatplotlibを用いてデータをグラフに描画する基本的なコマンドです。このコマンドを利用することで、カスタマイズされたプロットが可能になります。以下に、このコマンドの要素について詳しく説明します。

---

### 1. `ax.plot()`

- **`ax`（Axesオブジェクト）**: `ax`は、Matplotlibの`Axes`オブジェクトで、グラフの描画領域（プロット領域）を表しています。`Axes`オブジェクトを通じて、グラフの詳細な設定やデータの描画を行います。`ax.plot()`は、指定したデータをこの`Axes`オブジェクトにプロットするためのメソッドです【1】【3】。

- **`plot()`メソッド**: `plot()`は折れ線グラフを描画するための基本的な関数で、引数としてx軸、y軸のデータを受け取り、グラフ上にプロットを描画します。

### 2. データの指定

- **x軸のデータ (`location`)**: x軸にプロットされるデータの値を指定します。通常、リストや配列で指定されます。
  
- **y軸のデータ (`normalized_brightness_7[i]`または`normalized_brightness_8[i]`)**: y軸にプロットされるデータで、リストや配列として指定します。この場合、`i`はループのイテレーション変数で、繰り返し処理の一部として異なるy軸データを順次プロットするために使用されています【1】【3】。

### 3. フォーマット文字列

プロットの色やマーカーの形状を指定するための文字列です。

- **`'bo'`**: 青（blue）で丸型（circle）のマーカーを指定します。
- **`'rx'`**: 赤（red）で×型（cross）のマーカーを指定します。

これにより、同じグラフ上で異なるデータセットを区別しやすくなります。色やマーカーの種類を変更することで、視覚的な違いを簡単に示せます【1】【3】。

### 4. ラベル設定

- **`label='12/7' if i == 0 else ""`**: 条件付きでラベルを設定します。ここでは、`i == 0`の場合にのみラベルが`'12/7'`として設定され、凡例（legend）に表示されます。それ以外の場合は空文字列`""`が設定され、凡例に表示されません【3】。

### 5. 複数のプロット

このコードでは、12月7日と12月8日という異なる2つの日付のデータが異なる色とマーカーで同じグラフ上に描画されています。これにより、複数の日付のデータを一目で比較することができます。

### 6. インデックス`i`

`i`は繰り返し処理で使用されるイテレーション変数です。この変数を使うことで、リストや配列内の複数のデータポイントを順番にプロットすることが可能です。例えば、ループを用いてデータセットの各要素をプロットする際に役立ちます。

---

### グラフのカスタマイズ

Matplotlibでは、さらに軸ラベルやタイトル、凡例を追加してグラフをわかりやすくカスタマイズすることができます。

- **軸ラベル**: `ax.set_xlabel()`や`ax.set_ylabel()`を使用して、x軸とy軸にそれぞれのラベルを付けられます。
  
- **タイトル**: `ax.set_title()`でグラフのタイトルを設定し、内容をより明確に示します。
  
- **凡例**: `ax.legend()`で凡例を追加し、異なるデータセットの意味を簡単に理解できるようにします【1】【2】。

---

## まとめ

`ax.plot()`は、Matplotlibでデータを視覚化するための基本コマンドで、プロットするデータやマーカー、色、ラベルなどを細かく設定できます。このコードを利用することで、異なる日付のデータを同じグラフ上で比較し、視覚的に分かりやすいプロットを作成することができます。さらに、軸ラベルや凡例を追加することで、グラフを一層見やすくカスタマイズすることが可能です。

---

## 参考文献

1. Qiita, *Pythonの基本的なグラフ作成と可視化*. Retrieved from [Qiita](https://qiita.com/skotaro/items/08dc0b8c5704c94eafb9)
2. Chokkan's Python Guide, *Python Plotting*. Retrieved from [Chokkan's Python Guide](https://chokkan.github.io/python/18plot.html)
3. Useful Python, *Matplotlib tutorial*. Retrieved from [Useful Python](https://www.useful-python.com/matplotlib-tutorial/)
4. Python Documentation, *Line Plots in Matplotlib*. Retrieved from [DataCamp](https://www.datacamp.com/tutorial/line-plots-in-matplotlib-with-python)

この情報を活用し、視覚的に伝わりやすいPythonのグラフ作成に挑戦してみてください。
Pythonチュートリアル #1 -意外と知らなかった-

※以下の企画です

https://qiita.com/tatataichi/private/56936a028e625e62af8e

Pythonチュートリアル一日目です。
変数とか四則演算とかは流石にやり直す必要がないので、新たん学びがあった部分をバラバラと書いていこうと思います。

# 章構成
Pythonチュートリアルの章構成は以下のようになっております。
今の自分にとっては、この中でも5章以降をメインで学習することになるかなと思います。
サクサク読んでいきましょう〜

1章　食欲をそそってみようか
2章　Pythonインタープリタの使い方
3章　気楽な入門編
4章　制御構造ツール
5章　データ構造
6章　モジュール
7章　入出力
8章　エラーと例外
9章　クラス
10章　標準ライブラリめぐり
11章　標準ライブラリめぐり─PartII
12章　仮想環境とパッケージ
13章　次はなに？
14章　対話環境での入力行編集とヒストリ置換
15章　浮動小数点（float）の演算：その問題と限界
16章　補足

# 1章、2章　学習内容
数ページでのイントロ。
ここではインタプリタで実行する方法とPythonの魅力が書かれていた。
※今回の学習では、書籍自体が対話モードで進んでいるということも在るので、Google Colaboratoryを使って進めていこうと思う。メモもできるしね

# 3章　学習内容
## 四則演算
さすがに学生時代も含めると数年以上Pythonに触れているので、四則演算のパートで学びなんてないぜw　と思っていたら、意外な発見がありました。

「**切り下げ除算は"//"で行える**」

らしい。実際にやってみるとたしかに"//"を用いると、除算の結果が整数に変換されていることがわかった。

```python:切り下げ除算
>>> type(5/3)
float

>>> type(5//3)
int
```

キャスト不要？なのは良いかも。

## スライス操作
忘れていたけど、文字列を操作するときに便利なスライス。
例えば、**最後の3文字を消したいんだよなあ**っときは以下のようにできる。

```python:スライス
>>> ward = "python_01"
>>> word_2 = "ruby_01"

>>> ward[:-3]
'python'

>>> ward_2[:-3]
'ruby'
```

``:``が最初に指定すれば``0``として扱われ（0と書くのを省略できる）、最後に指定されれば"文字列サイズ"として扱われる。
上記の場合は **0から-3番目まで(後ろから３つ手前に向けて数える)** を指定しており、後ろの3文字を切り捨てられる。テクい。クール。

## ちょい技
### 多重代入
```python:多重代入
>> a = 10
>> b = 20
>> print(a,b)
10 20

>> a, b = b, a
>> print(a,b)
20 10
```
アルゴリズムでいうところの、いわゆるスワップが一行で簡単にできるぜっていう感じ。
色んな人が書いたPythonコードの中でも結構見かける気がするのでしっかり使いこなしたい。シンプルに便利だしね。

### フィボナッチ級数
数列を0,1で始めて、直前の2つの数字を足し算するやつ。
多重代入を使うと美しく書けるぜってやつ。

```python:フィボナッチ級数
>> a, b = 0,1
>> while a < 100:
    print(a, end =',')
    a , b = b, a+b

0,1,1,2,3,5,8,13,21,34,55,89,
```
新しい小技はprint文中の`end = ","`というやつ。
これはptint関数のキーワード引数というやつらしく、文末をカンマにしてくれている。キーワード引数があるなんて全然知らなかった。

# 感想
1~3章くらいだと正直学びなんてほとんど無いだろうなぁと思っていましたが、普通にしらないこと多かったです。
というのもここでの学習内容を用いなくてもC言語とかみたいにゴリゴリに書いてしまうことが多かったからです。
多重代入はchatGPTが勝手にやっているところを「へぇ、面白い書き方すんじゃん（なにこれ）」と、知ったかぶりしていました。
次は4章やっていきます！
GitHub Sparkで始める！コード不要のパーソナルアプリ開発入門

# GitHub Sparkで始める！コード不要のパーソナルアプリ開発入門

GitHubが新しく発表した超画期的なツール「GitHub Spark」について、ご紹介してみたいと思います！

## なぜGitHub Sparkが注目されているの？

みなさん、こんな経験ありませんか？

- 「自分専用のちょっとしたアプリを作りたいけど、本格的な開発は大変そう...」
- 「プログラミングは苦手だけど、自分のアイデアをアプリにしたい！」
- 「子供と一緒に簡単なアプリを作って遊びたい」

そんな願いを叶えてくれるのが、GitHub Sparkなのです！

## GitHub Sparkって何ができるの？

GitHub Sparkは、コードを1行も書かずに、自分だけのマイクロアプリ（"sparks"と呼ばれます）を作れる魔法のようなツールです。特徴的なのは、普通の言葉で「こんなアプリが作りたい！」と伝えるだけで、AIがそれを理解して実際のアプリに変換してくれること。まさに、アイデアを直接アプリにできちゃうんです！

## 実際の使用例を見てみよう！
例えば、以下のようなアプリケーションを簡単に作成して自動的にデプロイすることができます。

### 1. お小遣い管理アプリ
子供のお小遣い管理に使えるアプリを作成できます。目標額に達成したら、AIがお祝いメッセージを自動生成してくれる機能付き！

### 2. カラオケナイト管理アプリ
週末のカラオケ会の参加者管理や状況把握ができるアプリを簡単に作成可能

### 3. オリジナルNewsビューワー
トップ20の投稿を表示し、コメントをAIが要約してくれる便利なクライアントアプリ

## GitHub Sparkの魅力的な機能

### 1. 直感的な編集環境
- プレビューをリアルタイムで確認
- 複数のバリエーションを自動生成
- 変更履歴の自動保存
- 好みのAIモデルを選択可能

### 2. 簡単なデプロイと管理
- デプロイは完全自動
- スマホやタブレットからもすぐに使える
- データの保存機能も標準搭載
- カスタマイズ可能なデザインシステム

### 3. 共有とコラボレーション
作ったアプリは他の人と共有可能！読み取り専用や編集可能な権限を設定できるので、家族や友達と一緒に使うこともできます

## 初心者でも安心な理由

1. **コード不要**：プログラミングの知識がなくても大丈夫
2. **日本語でOK**：普通の言葉でアイデアを伝えるだけ
3. **すぐに使える**：面倒な設定や環境構築が不要
4. **試行錯誤OK**：気軽に修正や変更ができる

## まとめ

GitHub Sparkは、プログラミングの壁を取り払い、誰もが自分のアイデアをアプリにできる革新的なツールです。特に以下のような方におすすめです。

- プログラミング初心者の方
- 子供向けのプログラミング教育に興味がある方
- 自分専用のツールを手軽に作りたい方
- アイデアをすぐにカタチにしたい方

現在はテクニカルプレビュー段階ですが、今後さらに機能が追加される予定とのこと。ぜひウェイトリストに登録して、この革新的なツールを試してみてはいかがでしょうか？

テクニカルプレビューの参加はこちらから申し込みできますが、2024/11/4時点ではだいぶ待たされそうな感じです。
https://github.com/github_spark_waitlist_signup/join

## 今後の展開

GitHub Sparkチームは、以下のような機能の追加を検討しているそうです。

- パブリックギャラリーの実装
- より詳細な動作カスタマイズ機能
- サードパーティーサービスとの連携強化
- ファイルストレージやベクター検索機能の追加[1]

これからのアップデートにも要注目ですね！

以上、GitHub Sparkの紹介でした。皆さんも自分だけのオリジナルアプリを作ってみませんか？

## 参考元
https://githubnext.com/projects/github-spark
Pythonにおける条件付きラベル設定のテクニック：凡例を効率的に管理する方法

# Pythonにおける条件付きラベル設定のテクニック：凡例を効率的に管理する方法

PythonのMatplotlibを使って複数のデータポイントをプロットする際に、凡例（Legend）の表示を効果的に管理するテクニックとして、「条件付きラベル設定」が役立ちます。この方法を使用することで、複数のデータポイントがある中で冗長な凡例を避け、見やすく整理されたグラフを作成できます。この記事では、条件付きラベル設定の詳細とその利点、使用例について解説します。

---

## 目次

1. 条件付きラベル設定の構造
2. この設定を使う目的
3. 条件付きラベル設定の動作
4. このテクニックの利点
5. 使用例
6. 注意点と代替方法
7. まとめ

---

## 1. 条件付きラベル設定の構造

条件付きラベル設定は、Pythonの三項演算子を使用して、特定の条件が満たされた場合にのみラベルを設定するという構造です。以下のコードは、その構造を示しています。

```python
label='12/7' if i == 0 else ""
```

この構造では、`i == 0` が真（True）である場合にのみラベルとして `'12/7'` が設定され、それ以外のデータポイントでは空文字列 `""` が設定されます【1】【3】。

---

## 2. この設定を使う目的

このテクニックを使用する主な目的は、**凡例に重複したエントリーが表示されるのを防ぐ**ことです。通常、ループ内で複数のデータポイントをプロットする際に各ポイントにラベルを設定すると、同じラベルが複数回凡例に表示されてしまいます。この条件付きラベル設定を使用すると、データセット全体を表す1つのラベルのみを表示でき、グラフが見やすくなります。

---

## 3. 条件付きラベル設定の動作

条件付きラベル設定は、以下のように動作します。

- **最初のデータポイント**（`i == 0` の場合）にのみラベルが設定されます。
- **それ以外のデータポイント**には空文字列 `""` が設定されるため、凡例には表示されません。

これにより、1つのデータセットが含むすべてのデータポイントに対してラベルを設定せずに、1回だけ表示できるようになります【2】。

---

## 4. このテクニックの利点

条件付きラベル設定を使うことで、以下のような利点があります。

- **コードの簡潔さ**: 凡例を設定するために別途ループや条件分岐を書く必要がなく、短いコードで効率的にラベルを管理できます。
- **凡例の整理**: 同じデータセットに対して複数の凡例エントリーが作成されるのを防ぎ、グラフが見やすくなります。これにより、データセットの識別がスムーズになります。

---

## 5. 使用例

この方法を用いると、例えば以下のようにループ内で複数のデータポイントを効率よくプロットできます。

```python
import matplotlib.pyplot as plt

x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 7, 11]

fig, ax = plt.subplots()

for i in range(len(x)):
    ax.plot(x[i], y[i], 'bo', label='データセット' if i == 0 else "")

ax.legend()
plt.show()
```

この例では、xとyのデータポイントをループで順次プロットしていますが、最初のデータポイントにだけラベル`'データセット'`が設定され、凡例に1回だけ表示されます。

---

## 6. 注意点と代替方法

### 注意点

- **同じスタイルを使うこと**: この方法は、同じデータセットのすべてのポイントが同じスタイル（色、マーカー、線の種類など）で表示される場合に最も効果的です。
- **異なるスタイルのデータセット**: データセットごとに異なるスタイルを使用する場合は、この方法を各データセットの最初のポイントに適用する必要があります。

### 代替方法

別の方法として、ループの外でデータセット全体に対して1回だけプロットを行い、そこでラベルを設定する方法もあります。

```python
ax.plot(x, y, 'bo', label='データセット')
```

この方法は、データセット全体を一度にプロットする場合に使います。ラベルが1つだけ設定され、凡例に一度だけ表示されるため、凡例管理が簡単です【3】。

---

## 7. まとめ

条件付きラベル設定は、複数のデータポイントをプロットする際に、**グラフの凡例を効率よく管理するための便利なテクニック**です。この方法を用いることで、同じデータセットの最初のデータポイントにのみラベルが設定され、重複したラベル表示を防ぐことができます。特に大量のデータポイントや複数のデータセットを同じグラフにプロットする場合に非常に有効で、凡例の整理が容易になるため、グラフの可読性が向上します。

このテクニックを適用することで、視覚的にわかりやすく、整理されたグラフを作成しましょう。

---

## 参考文献

1. AI-inter1, *Pythonで散布図を作成する方法*. Retrieved from [AI-inter1](https://ai-inter1.com/python-scatterplot/)
2. X-Tech, *Pythonによるデータ可視化*. Retrieved from [X-Tech](https://x-tech.pasona.co.jp/media/detail.html?p=2636)
3. Tech Teacher Blog, *Pythonのオブジェクト指向インターフェース*. Retrieved from [Tech Teacher Blog](https://www.tech-teacher.jp/blog/python-library20-oo_interface/)

この方法を活用し、より効果的なPythonグラフ作成に挑戦してみてください。
Jetpack compose Modifierとは？

# 概要
JetpackComposeの`Modifier`について内容を雑にまとめる。

# 詳細

`Modifier`は、`Jetpack Compose`においてUIコンポーネントの外観や動作を変更するためのオブジェクト。`Modifier`を使用することで、コンポーネントのレイアウト、スタイル、アニメーション、インタラクションをカスタマイズすることができる。

## 主な特徴

- **関数型のオブジェクト**: `Modifier`は、関数型のオブジェクトであり、チェイン(.で繋げること。いわばメソッドチェーン)することで複数の修飾子を組み合わせて使うことができる
- **UIコンポーネントへの適用**: `Modifier`は、Composeの各UIコンポーネントに対して引数として渡され、特定のスタイルや動作を適用できる

## 主な用途

1. **レイアウトの変更**:サイズ、位置、パディング、マージンを変更
2. **スタイリング**: 背景色、ボーダー、影などの視覚的スタイルの設定
3. **インタラクションの処理**: クリック、タップ、ドラッグなどのユーザーインタラクションを処理するためのリスナーの追加
4. **アニメーション**: アニメーション効果の追加

## 使用例

以下は、`Modifier`を使ったシンプルな例です。

```kotlin
@Composable
fun MyButton() {
    Button(
        onClick = { /* クリック時の処理 */ },
        modifier = Modifier
            .padding(16.dp) // パディングを設定
            .background(Color.Blue) // 背景色を青に設定
            .fillMaxWidth() // 幅を親要素に合わせて最大にする
    ) {
        Text("Click Me", color = Color.White) // テキストの色を白に設定
    }
}

```

## 主な修飾子の例

- **`padding()`**: コンポーネントにパディングの追加
- **`background()`**: コンポーネントの背景色の設定
- **`fillMaxWidth()` / `fillMaxHeight()`**: コンポーネントを親の幅または高さに合わせた拡張
- **`clickable()`**: コンポーネントをクリック可能にし、タップイベントの処理
- **`border()`**: コンポーネントにボーダーの追加
- **`nestedScroll()`** ネストされた子コンポーネントのスクロールの管理

## まとめ

`Modifier`は、`Jetpack Compose`における非常に重要なコンセプトで、UIコンポーネントの見た目や動作を柔軟にカスタマイズする手段を提供している。
多くの異なる修飾子が用意されており、必要に応じて組み合わせることで、リッチでインタラクティブなUIを構築できる。
prisma-markdown を使って ER図を自動生成する


## はじめに

Prisma を使用してスキーマを管理している Project で ERD （ER図）およびスキーマ定義を簡単に生成できる `prisma-markdown` を紹介します。

## prisma-markdown について

prisma-markdown は Prisma の　schema　ファイルから ERD （ER図）を生成するツールです。

https://github.com/samchon/prisma-markdown

使用方法は簡単で、 `npm i -D prisma-markdown` 実行後に schema ファイルに以下を記載するだけです。

```schema:prisma.schema
generator markdown {
  provider = "prisma-markdown"
  output   = "./ERD.md"
  title    = "ER図"
}
```

## その他

### コメントタグについて

prisma-markdown にはコメントタグ機能が存在します。
コメントタグを使用する場合、注意する必要があるのは `//` ではなく `///` と記載する点です。
`//` でコメントを記載しても、生成される Markdown には出力されません。

```schema:prisma.schema
model Example {
  /// この行は出力される。
  // この行は出力されない。
  id
  title
}
```

### ER図の分割

コメントタグの `@namespace` および `@erd` を使うことで ER図を分割して出力することができます。
`@namespace` と `@erd` の違いを簡単に記載すると、

- `@namespace`
  - ER図およびER図下にスキーマ定義を出力
- `@erd`
  - ER図のみに出力

`@erd` は有効な `@namespace` を持つ model 定義が存在しないと有効にならない点だけご注意ください。

## Ref

https://github.com/samchon/prisma-markdown
開発者の新しい相棒！GitHub Copilot Workspaceで開発効率の向上

# 開発者の新しい相棒！GitHub Copilot Workspaceで開発効率の向上

日々のコーディング作業で「この処理どう書けばいいんだろう」「似たようなコードを書いた記憶があるけど...」といった悩みを抱えていませんか？そんな開発者の悩みを解決してくれる心強い味方、GitHub Copilot Workspaceについてご紹介します。

## Workspaceって何がすごいの？

従来のGitHub Copilotは、コードの補完や提案を行うAIアシスタントでしたが、新しく登場したWorkspaceは、まるで優秀なペアプログラマーがそばにいるような開発環境です。

### 魅力的な新機能

- **自然な会話でコーディング**: 「ログイン機能を実装したい」といった自然な言葉で相談できます
- **複数のファイルを同時編集**: プロジェクト全体を見渡しながら効率的に開発できます
- **コードの即時実行とテスト**: 書いたコードをその場でテストできます

## GitHub Copilot ChatとWorkspaceの違い

GitHub Copilotは以下のように進化してきました。

1. **GitHub Copilot (2022年)**
   - エディタ内でのコード補完
   - AIペアプログラマーとしての基本機能
   - 開発者の生産性を最大55%向上

2. **GitHub Copilot Chat (2023年)**
   - コーディング、デバッグ、テストにおける自然言語での対話機能
   - リアルタイムでコードと会話可能
   - エディタ内での限定的なAIアシスタント機能

3. **GitHub Copilot Workspace (2024年)**
   - 完全なAIネイティブの開発環境
   - プロジェクト全体を通じた包括的なAIサポート
   - タスクからコード完成までの一貫した支援

### Workspaceの特徴

GitHub Copilot Chatと比較すると、GitHub Copilot Workspaceには以下のような特徴があります。

- **統合開発環境としての機能**
  - GitHubリポジトリやIssueから直接作業開始
  - コードのブレインストーミングから実行までをワンストップで実現
  - チーム共有機能による協業支援

- **プロジェクト管理機能**
  - タスクベースの開発アプローチ
  - ステップバイステップの計画立案
  - 自動的なテスト計画の提案

詳細は下記の動画をご確認ください。
https://youtu.be/pkotufZchjE

### 実践的な活用シーン

**ChatとWorkspaceの使い分け例：**

1. **Chat向きのタスク**
   - 特定のコードブロックの修正
   - デバッグのアシスト
   - 簡単な実装の相談

2. **Workspace向きのタスク**
   - 新機能の設計から実装まで
   - プロジェクト全体の計画立案
   - チームでの協業が必要な開発

## GitHub Copilot Workspaceを始めてみよう！

### 導入手順

1. **アカウントの準備**
   - GitHubアカウントを用意
   - GitHub Copilotのサブスクリプションに加入
   - Workspaceのパブリックプレビューに参加申請
       - https://githubnext.com/projects/copilot-workspace

2. **初期設定**
   - VSCodeなどのエディタにGitHub Copilot拡張機能をインストール
   - Workspaceへのアクセス権限を設定
   - 好みの開発環境をカスタマイズ

3. **使い始めるための基本操作**
   - プロジェクトの作成または既存プロジェクトの読み込み
   - AIとの対話セッションの開始
   - 基本的なコマンドの確認

## 実践的な活用術

### 日常的な開発シーン

**シーン1：新機能の実装**
```python
# AIに相談する例
# 「ユーザー登録機能を実装したい」と伝えると...
# AIが以下のようなコードを提案してくれます

class UserRegistration:
    def register_user(self, username, email, password):
        # セキュリティを考慮した実装を提案
        # バリデーション処理も含めて生成
```

**シーン2：バグ修正**
- エラーメッセージを貼り付けるだけで原因と解決策を提案
- 関連するファイルも自動的にチェック

### 便利な使い方のコツ

1. **プロンプトの工夫**
   - 具体的な要件を明確に伝える
   - 既存コードの文脈も含めて説明する
   - 段階的に改善を重ねる

2. **チーム開発での活用**
   - コードレビューの効率化
   - ドキュメント生成の自動化
   - コーディング規約の統一

## セキュリティと品質管理

### 安全な利用のために

- **機密情報の取り扱い**
  - 重要な情報は送信しない
  - 環境変数やAPIキーは別管理

- **コードの品質確保**
  - 生成されたコードは必ずレビュー
  - テストコードの自動生成も活用

## まとめ

GitHub Copilot Workspaceは、単なるコード補完ツールではありません。開発者の思考プロセスを理解し、アイデアの実装から品質管理まで、開発ライフサイクル全体をサポートしてくれる心強いパートナーです。

特に、プログラミング初学者の方には、良質なコードの書き方を学べる教師としても活用できます。セキュリティや著作権には十分な注意が必要ですが、適切に活用することで、開発効率を大きく向上させることができるでしょう。
Matplotlibでタイトルとサブタイトルを設定する方法

# Matplotlibでタイトルとサブタイトルを設定する方法

Matplotlibを使ってグラフを作成する際、タイトルとサブタイトルの両方を表示することで、グラフの内容がよりわかりやすくなります。特に、データの概要や補足説明を含める場合に役立ちます。ここでは、タイトルとサブタイトルを表示するための様々な方法について説明します。

---

## 目次

1. `plt.suptitle()` と `plt.title()` を組み合わせる方法
2. `plt.title()` で複数行のタイトルを作成する方法
3. `fig.text()` を使用する方法
4. タイトルとサブタイトルのスタイルを個別に設定する方法

---

## 1. `plt.suptitle()` と `plt.title()` を組み合わせる方法

`plt.suptitle()` をメインタイトルとして使用し、`plt.title()` をサブタイトルとして追加する方法です。この方法では、`suptitle()`が上部にメインタイトルを表示し、`title()`がその下にサブタイトルを表示します。

```python
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])

# メインタイトルとサブタイトルの設定
plt.suptitle("メインタイトル", fontsize=16, fontweight='bold')
plt.title("サブタイトル", fontsize=12)

plt.show()
```

**ポイント**:
- `plt.suptitle()`は、図全体のメインタイトルに使用します。
- `plt.title()`は、各サブプロットに個別のサブタイトルを追加できます【1】。

---

## 2. `plt.title()` で複数行のタイトルを作成する方法

`plt.title()`で改行コード `\n` を使うことで、1つのタイトルに複数行のテキストを追加し、メインタイトルとサブタイトルを表現する方法です。

```python
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])

# 改行でメインタイトルとサブタイトルを一緒に設定
plt.title("メインタイトル\nサブタイトル", fontsize=14)

plt.show()
```

**ポイント**:
- `\n`を使うことで改行が可能で、シンプルにタイトルとサブタイトルを同時に設定できます。
- タイトルの行数が多い場合や、異なるスタイルを適用したい場合には不向きです【2】。

---

## 3. `fig.text()` を使用する方法

`fig.text()`を使うと、図内の任意の位置にテキストを配置できるため、サブタイトルの位置を柔軟に調整することが可能です。

```python
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])

# メインタイトルとサブタイトルの設定
fig.suptitle("メインタイトル", fontsize=16, fontweight='bold')
fig.text(0.5, 0.95, "サブタイトル", ha='center', va='center', fontsize=12)

plt.show()
```

**ポイント**:
- `fig.text()`を使うと、テキストの位置をx軸とy軸の座標で指定できます。
- `ha`（水平配置）と`va`（垂直配置）で位置を調整し、タイトルやサブタイトルを柔軟に配置できます【3】。

---

## 4. タイトルとサブタイトルのスタイルを個別に設定する方法

`plt.suptitle()`と`plt.title()`のそれぞれに異なるスタイル（色、フォントサイズ、フォントスタイルなど）を適用する方法です。`plt.tight_layout()`と組み合わせることで、レイアウトが重ならないように自動調整されます。

```python
fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4])

# メインタイトルとサブタイトルを個別に設定
plt.suptitle("メインタイトル", fontsize=16, fontweight='bold', y=1.05)
plt.title("サブタイトル", fontsize=12, color='gray', style='italic')

plt.tight_layout()
plt.show()
```

**ポイント**:
- `fontsize`や`fontweight`、`color`、`style`を個別に設定し、異なるスタイルのタイトルとサブタイトルを表示できます。
- `y`パラメータを調整することで、メインタイトルの位置を上部に配置し、サブタイトルとの距離を取ることが可能です。

---

## まとめ

Matplotlibでタイトルとサブタイトルを設定するには、様々な方法が用意されています。各方法を適切に組み合わせることで、見やすく情報が整理されたグラフを作成できます。

- **`plt.suptitle()` と `plt.title()` の組み合わせ**: メインとサブの役割を明確にしたタイトル表示。
- **改行コード `\n` を使用した複数行タイトル**: シンプルな二重タイトル。
- **`fig.text()` で自由に配置**: サブタイトルの位置を任意に指定可能。
- **スタイルを個別に設定**: タイトルとサブタイトルを異なるスタイルで表示し、グラフの視認性を向上。

これらの方法を活用して、タイトルとサブタイトルの配置やスタイルを調整し、グラフに適したデザインを実現しましょう。

---

## 参考文献

1. PyGraph, *Figure Title in Matplotlib*. Retrieved from [PyGraph](https://pygraph.helve-blog.com/matplotlib-conf/figure-title)
2. Engineering for Data Science, *Matplotlib Subtitles*. Retrieved from [Engineering for Data Science](https://engineeringfordatascience.com/posts/matplotlib_subtitles/)
3. Stack Overflow, *Giving Graphs a Subtitle in Matplotlib*. Retrieved from [Stack Overflow](https://stackoverflow.com/questions/1388450/giving-graphs-a-subtitle)

グラフのタイトルとサブタイトルを適切に設定して、視覚的に効果的なデータ可視化を実現してください。
異なる組織間でのEventbridgeの連携方法

## はじめに
これは簡単な備忘録になります。
今回の記事の内容についてはA組織のXアカウントに対してB組織のYアカウントのイベントブリッジを連携させる場合のIAMロール、イベントベースのポリシーの設定内容です。


## 送信側(Yアカウント)での準備
### 1.Eventbridge用のIAMロールの作成
```JSON
{
  "EventBridgePutEventsRole": {
    "Type": "AWS::IAM::Role",
    "Properties": {
      "RoleName": "EventBridgePutEventsRole",
      "AssumeRolePolicyDocument": {
        "Version": "2012-10-17",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "Service": "events.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      },
      "Policies": [
        {
          "PolicyName": "SendEventsToAuditEventBus_Crossaccount",
          "PolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
              {
                "Effect": "Allow",
                "Action": "events:PutEvents",
                "Resource": {
                  "Fn::Sub": "arn:aws:events:${AWS::Region}:${受信するAccountId}:event-bus/default"
                }
              }
            ]
          }
        }
      ]
    }
  }
}

```

### 2.Eventbridgeの作成
今回はEventbridgeの作成については省略
### 3.ターゲットの確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812002/cb7da666-56c9-09a4-f4d4-71be5514b83d.png)
ターゲットが、クロスアカウント先の`ターゲット名`と`ARN`、「1.」で作成したロールが正しく設定されているかを確認

## 受信側(Xアカウントの設定)
### 1.対象のイベントブリッジのリソースベースのポリシーで送信側のアカウントの情報を記入する

```{
  "Statement": [
    {
      "Sid": "AllowEventFromAccountB",
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::<組織BのAWSアカウントID>:root"
      },
      "Action": "events:PutEvents",
      "Resource": "arn:aws:events:<受信リージョン>:<組織AのAWSアカウントID>:event-bus/<イベントバス名>"
    }
  ]
}
```
### 2.イベントルールの設定
組織Bから受信するイベントに基づいて、適切なイベントパターンを設定
### 3.ターゲットの設定
受信したイベントを処理するためのターゲット（例：Lambda関数、SNSトピックなど）を指定

## まとめ
X（受信側）とY（送信側）で信頼関係を作り、X、Yアカウントでトリガーするイベントを正しく設定すれば組織間でのクロスアカウントの設定が完了です。
セキュリティの観点から受信側、送信側のアカウント間の信頼関係を明記することで、安全にイベントの送信をすることが可能になると考えます。
基本情報技術者試験　学習用メモ

# ITエンジニアの登竜門
専門学校など通われている方は、午前免除を推奨します。1日で全部受験などするのは大変です。趣味の時間がなくなってしまいますのでぜひ活用し、合格まで望んでくださいね。

## 対象者
ITを活用したサービス、製品、システム及びソフトウェアを作る人材に必要な基本的知識・技能をもち、実践的な活用能力を身に付けた者


## 試験時期
春と秋のみです。

## 期待する技術水準　（要求スキル・知識）

1.ITを活用した戦略の立案、システムの企画・要件定義、設計・開発・運用に関し、担当する活動に応じて次の知識・技能が要求される。

2.IT全般に関する基本的な事項を理解し、担当する活動に活用できる。
3.上位者の指導の下に、IT戦略に関する予測・分析・評価に参加できる。
4.上位者の指導の下に、システム又はサービスの提案活動に参加できる。
5.上位者の指導の下に、システムの企画・要件定義に参加できる。
6.上位者の指導の下に、情報セキュリティの確保を考慮して、システムの設計・開発・運用ができる。
7.上位者の指導の下に、ソフトウェアを設計できる。
8.上位者の方針を理解し、自らプログラムを作成できる。

## 試験時間・出題形式・出題数

| タイトル|試験時間|出題形式 |出題数|解答数|
| ---- | ---- |---- |---- |---- |
| 科目A| 90分 | 多肢選択式（四肢択一）|60|60|
| 科目B| 100分 | 多肢選択式（四肢択一）|20|20|





## 関連サイト

#### 公式　情報処理推進機構　
https://www.ipa.go.jp/shiken/kubun/fe.html
Windows11で 半角/全角 キー1個でIMEがオンになるのがしんどいので変えたい

### エンジニア的な情報ではない小話
個人的な話ですがESCを押す際にまぁまぁの頻度でIMEを誤起動させてしまってｲﾗｲﾗします
ここらへんは以前のOSでは ALT+半角/全角 を切り替えに割り当てできたような記憶で、自分はそうしていた
Windows11では正攻法でそのショートカットにできないようで何とか変更するために調べてみました
***

### PowerToys最強
そこそこ有名なWindowsをカスタマイズするツールであるMS謹製のPowerToysでうまいこと設定できました

[こちら](https://github.com/microsoft/PowerToys/tree/v0.85.1) が現在の最新版

・PowerToysを起動しそこからKeyboardManagerを起動します

・キーの再マップをクリックし キーの再マップの追加 で 
　半角/全角 または VK244 を選び、適当なキーをマップ（自分は Esc にした）
・右上の OK で反映

・ショートカットの再マップをクリックし、ショートカットの再マップを追加 で
　Alt(Left) と IME ModeChange を対象にし、IME ModeChange をマップ
・右上の OK で反映

 こんな手順で IMEのオンオフ を ALT+全角/半角 に設定することができました

***
 変えたら変えたでワンキー起動に慣れてしまった手癖を強制しないといけないので痛し痒し
 結局戻しました
***
### ゲームでのIME誤爆は防げるか？
結論から言えば防げます
ショートカットの再マップのところにターゲットアプリが指定できるので、ゲーム個別も設定できそうですが（試してない）、キーの再マップは全体のみなので個別での実用性は厳しそうです

キーボードによってはメーカー製の制御ソフトから対処できてしまいそうな気もしてますが、そういうものがない人にはちょっと有益でしょうか