OmniAICreator/Qiita-1.07M huggingface dataset:
⚔️　瞬殺で消費税の計算ができるpythonGUIコード公開　⚔️ 

# ちょこっと業務を簡略化したい
　この記事では、ちょこっと効率化させたいことをプログラミングやツールをつかって解決していきます
ちょこっと削減した時間を、もっと人生楽しくなることに使いましょう！


# 💗本日のお題
## 　瞬殺⚔️　消費税の計算
🏢:man_tone1:
経費申請で8%と10%で分けて申請してください〜
 あと、税抜の金額も入力してほしい〜

 :girl:
 ああ、（大まかに）食事8%、物10%　とほんと、計算がめんどくさい！！
 税抜価格も書かなければいけないのー
 あーーレシートに税抜書いていない、、計算しないと、、


 
 こんな場面、経費以外でも、営業でもありますよね
 こんな時に役立ちます


## pythonデスクトップアプリ(tkinter)解決してみた
<環境>
🖥 Windows
📩 Outlook
🐍 python 3.12.5
🏆 VSCode


最終的なGUI画面　↓

![image (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/859abc82-7864-2d0d-8896-6b7ecc5dcb95.png)


## tkinter　コード一部解説
※みなさんの業務に合うよう変更してください！


① 入力数字が税込(8%or10%)の金額を入力した場合

:::note info
税抜価格を参照する
![スクリーンショット 2024-09-28 21.30.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/f9692cae-a931-f12a-1c66-82c13e8e48d6.png)
:::

② 入力数字が税抜(8%or10%)の金額を入力した場合

:::note info
税込価格を参照する
![スクリーンショット 2024-09-28 21.31.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636287/469e3e3b-667c-5d42-c3a1-530c9b2a2da0.png)
:::


③ ```.2f``` → 小数点以下2桁を表示　（小数点第三位を四捨五入）

```python:python
label_total_10.config(text=f"税込金額 (10%): {total_10:.2f} 円")
```



## 全体コード
<details><summary>全体コードはこちら</summary>

```python:python
import tkinter as tk

# 計算関数
def calculate():
    try:
        # 入力された金額を取得
        amount = float(entry_amount.get())
        
        # 消費税10％
        tax_10 = amount * 0.1
        total_10 = amount + tax_10

        # 消費税8％
        tax_8 = amount * 0.08
        total_8 = amount + tax_8

        # 税抜き金額（10％）
        tax_excluded_10 = amount / 1.1

        # 税抜き金額（8％）
        tax_excluded_8 = amount / 1.08

        # 結果を表示
        label_total_10.config(text=f"税込金額 (10%): {total_10:.2f} 円")
        label_total_8.config(text=f"税込金額 (8%): {total_8:.2f} 円")
        label_tax_excluded_10.config(text=f"税抜き金額 (10%): {tax_excluded_10:.2f} 円")
        label_tax_excluded_8.config(text=f"税抜き金額 (8%): {tax_excluded_8:.2f} 円")
    except ValueError:
        label_total_10.config(text="")
        label_total_8.config(text="")
        label_tax_excluded_10.config(text="")
        label_tax_excluded_8.config(text="")

# メインウィンドウの作成
root = tk.Tk()
root.title("消費税計算機")
root.geometry("400x300")

# 金額入力ラベルとエントリ
label_amount = tk.Label(root, text="金額を入力:")
label_amount.pack(pady=5)

entry_amount = tk.Entry(root, width=20)
entry_amount.pack(pady=5)

# 計算ボタン
btn_calculate = tk.Button(root, text="計算", command=calculate)
btn_calculate.pack(pady=10)

# 結果表示ラベル

label_total_10 = tk.Label(root, text="税込金額 (10%):")
label_total_10.pack()

label_total_8 = tk.Label(root, text="税込金額 (8%):")
label_total_8.pack()

label_tax_excluded_10 = tk.Label(root, text="税抜き金額 (10%):")
label_tax_excluded_10.pack()

label_tax_excluded_8 = tk.Label(root, text="税抜き金額 (8%):")
label_tax_excluded_8.pack()

# メインループの開始
root.mainloop()



```
</details>



# 🧡最後に
このコードをベースに修正し、業務をちょこっと楽にしてみてください〜


今後、このようにちょっとした効率化のための情報を載せます。あなたの業務でも役立つこと願っています💓
laravel11でjetstream+teamsインストール後エラー解決方法

# 絶対忘れる自信があるし同じ状況の人いそうだから記載

## laravel11でjetstream+teamsインストール後エラー


１. HTTP 500 Internal Server Error

ホントはもっと長いエラーだけど、このエラーだけでも沢山解決策が出るタイプ



```
Symfony Exception
 Symfony Docs
ErrorException
HTTP 500 Internal Server Error
file_put_contents(/var/www/storage/framework/views/187f828346b000af.php): Failed to open stream: Permission denied
```

### 解決方法

ref:https://stackoverflow.com/questions/38888568/laravel-file-put-contents-failed-to-open-stream-permission-denied-for-sessio

```
chmod -R gu+w storage

chmod -R guo+w storage

php artisan cache:clear
```


２. SQLテーブル無いエラー

```
SQLSTATE[42P01]: Undefined table: 7 ERROR: relation "teams" does not exist LINE 1: insert into "teams" ("user_id", "name", "personal_team", "up... ^ (Connection: pgsql, SQL: insert into "teams" ("user_id", "name", "personal_team", "updated_at", "created_at") values (34, test's Team, 1, 2024-09-28 11:24:51, 2024-09-28 11:24:51) returning "id")
```

### 解決方法

- DB接続しているが、teams系テーブルが不足している
- php artisan migrate しても `OK` なのに不足している
- php artisan migrateを再度行うしか無いのでrefreshコマンドを実行すると解消


```
php artisan migrate:refresh
```

３．エラーじゃないんだけどLaravel11からServiceProviderとか追加したら、以前はconfig/app.phpに追加していたなんちゃらServiceProvider::classの追記を、bootstrap/providoers.phpにする必要があるようです。そのファイル探すぐらいならphp artisanコマンドを使ったほうが確実です。

```
php artisan make:provider なんちゃらServiceProvider
```
アクセス制御の基本：ACL, MFA, 認証サーバーでセキュリティを強化する方法

#### 概要
アクセス制御は、ネットワーク上の資源やデバイスへのアクセスを管理するための重要な手段です。この記事では、ACL（アクセス制御リスト）、マルチファクタ認証（MFA）、認証サーバー（RADIUS, TACACS+）について解説し、これらの技術がどのようにネットワークセキュリティを強化するかを説明します。

---

#### 1. ACL（Access Control List）

- **説明**: ACLは、ネットワーク機器が許可または拒否するトラフィックの条件を定めるルールのリストです。各パケットの送信元や宛先アドレスに基づいてアクセスを制御します。
また、通常ネットワークデバイスに適用され、そのデバイスを通過するすべてのデータフローを制御します。
- **特徴**: トラフィックの細かな制御が可能。
- **用途**: ルーターやスイッチでのフィルタリング。

#### 2. マルチファクタ認証（MFA）

- **説明**: MFAは、ユーザーがネットワークやシステムにアクセスする際に、複数の認証要素（例: パスワード、スマートフォンによる認証）を使用することで、セキュリティを強化する手段です。
- **特徴**: パスワードだけでは不十分な場合の追加のセキュリティ層を提供。
- **用途**: クラウドサービス、VPN接続の認証。

#### 3. 認証サーバー（RADIUS, TACACS+）

##### RADIUS（Remote Authentication Dial-In User Service）

- **説明**: RADIUSは、ネットワークアクセス認証に使用されるプロトコルで、ユーザーの認証情報を一元管理します。
「RADIUSサーバー」「RADIUSクライアント」「ユーザー」の三つの要素で構成されています。
RADIUSサーバー：RADIUSクライアントからのリクエストを受け、認証処理を行うサーバーです。
RADIUSクライアント：ユーザーとRADIUSサーバーを仲介するネットワーク機器を指します。
ユーザー：ネットワークに接続するユーザーおよび端末のことです。
- **特徴**: ネットワーク全体での認証情報管理が可能。
送信中のパスワードのみ暗号化。
- **用途**: 無線LANやVPNの認証。

##### TACACS+（Terminal Access Controller Access-Control System Plus）

- **説明**: TACACS+は、RADIUSと同様に認証に使用されるプロトコルで、特にコマンドレベルのアクセス制御に優れています。
ユーザーごとに装置上で使用できるコマンドを制限します。
装置にログインしたユーザーが使用したコマンド、接続時間、システムイベントなどにタイムスタンプを付加してログとして記録する
- **特徴**: 細かい権限管理が可能で、特に管理者向けの認証に適しています。
セッション全体を暗号化。
- **用途**: ルーターやスイッチの管理アクセス。

---

#### 総括
アクセス制御は、ネットワークセキュリティを強化するために非常に重要です。ACLはネットワークトラフィックをフィルタリングし、MFAは複数の認証要素を用いて安全性を高め、RADIUSやTACACS+は一元的な認証管理を実現します。ネットワーク環境に適したアクセス制御手段を導入することで、セキュリティを大幅に向上させることが可能です。
ABC372参加記録　by Python

# リアルタイムに解けた問題

## [A - delete .](https://atcoder.jp/contests/abc372/tasks/abc372_a)

### 問題文
英小文字および<font color="Red">`.`</font>からなる文字列$S$が与えらます。$S$から<font color="Red">`.`</font>を全て削除した文字列を求めてください。


### 制約
- $S$は英小文字および<font color="Red">`.`</font>からなる長さ1以上100以下の文字列

### アルゴリズム
入力に対してループを回し、<font color="Red">`.`</font>以外のものを出力。

### ソースコード
``` python
S = input()

for s in S:
  if s != '.':
    print(s, end='')

```
暗号化技術を徹底解説！VPNと暗号化プロトコル（WPA2/WPA3）でネットワークを守る方法

#### 概要
ネットワークにおける暗号化技術は、データの盗聴や改ざんを防ぐために不可欠です。この記事では、VPN技術（IPsec, SSL/TLS）と、無線ネットワークの暗号化プロトコルであるWPA2、WPA3について詳しく説明します。

---

#### 1. VPN（Virtual Private Network）

VPNは、安全な通信を提供するための技術で、インターネットを介してプライベートネットワークを構築します。
データが暗号化されるため、安全にデータを送受信できる

##### IPsec（Internet Protocol Security）

- **説明**: インターネットプロトコル（IP）のセキュリティを確保するためのプロトコルスイート（プロトコルのグループ） です。
ネットワーク層でデータを暗号化する技術で、トンネリングと暗号化により、セキュアな通信を実現します。
- **特徴**: 高いセキュリティ性を持つため、企業のVPNで広く使用される。
SA（Security Association）と呼ばれる仮想の通信路が構築されます。
- **用途**: 企業間通信やリモートアクセス。

##### SSL/TLS（Secure Sockets Layer / Transport Layer Security）

- **説明**: SSL/TLSは、トランスポート層でデータを暗号化する技術で、主にWebブラウザで安全な通信を提供するために使われます。
- **特徴**: HTTPS通信の基盤として、多くのWebサイトで使用されています。
「共通鍵暗号方式」と「公開鍵暗号方式」の2種類を組み合わせた「ハイブリッド暗号方式」を使用。
- **用途**: Webブラウジングやメール通信。

#### 2. 暗号化プロトコル（WPA2, WPA3）

##### WPA2（Wi-Fi Protected Access 2）

- **説明**: WPA2は、無線LANの暗号化プロトコルで、AES暗号を使用してデータを保護します。従来のWEPに比べて強力な暗号化を提供します。
認証方式ではWPA2-PersonalとWAP2-Enterpriseが用意されています。
- **特徴**: 無線LANのセキュリティの標準。
- **用途**: 家庭用無線LAN、オフィスネットワーク。

##### WPA3

- **説明**: WPA3は、WPA2の後継で、さらに強力な暗号化とセキュリティ機能を備えています。より強固なパスワード認証や、個々の通信を保護する機能を提供します。
- **特徴**: 次世代の無線LANセキュリティ。
SAE（Simultaneous Authentication of Equals）と呼ばれる仕組みで暗号化に利用する鍵を生成する。
アクセスポイントとデバイス間の通信が傍受できない仕組み。
- **用途**: 最新の無線ネットワーク環境。

---

#### 総括
暗号化技術は、データ通信の安全性を確保するために不可欠です。VPN技術はリモートアクセスや企業ネットワーク間の安全な通信に使用され、WPA2/WPA3は無線LANの暗号化を強化します。用途やネットワークの特性に応じて最適な暗号化技術を選びましょう。
Outsystemsの非同期処理の簡易まとめ

OutsystemsのWeb Developer(O11)の資格学習中で非同期処理の実現方法について学んでいます。
備忘録として残したいと思います。

# Outsystemsの非同期処理
非同期処理とはある処理を実行している間に、独立した別の処理を並列で実行すること。
C#のTaskのようなものを思い浮かべていたのですが、ちょっとイメージが違いました。

[OutSystemsの非同期機能](https://learn.outsystems.com/ja-jp/training/journeys/async-capabilities-649)

Outsystemsの非同期処理には以下のような種類があります。
1. Timer
1. Business Process
1. Light Process

## Timer
TimerはOutsystemsのバッチ処理です。
時間を指定して定期的に実行したり、画面やAPIを使って実行をスケジュールすることができます。
ただし、同時に実行するTimerの数や一回の処理でのTimeoutが設定されており、制限があります。
ServerActionと同じようにコードを書くことができます。
公式ドキュメントにトランザクションの設定の仕方、Timeoutを想定した再実行の仕組みなどのベストプラクティスが紹介されています。

### 参考
[Timer](https://success.outsystems.com/ja-jp/documentation/11/reference/outsystems_language/processes/timer/)
[Create and Run Timers](https://success.outsystems.com/ja-jp/documentation/11/building_apps/using_timers/create_and_run_timers/)
[OutSystemsの非同期機能](https://learn.outsystems.com/ja-jp/training/journeys/async-capabilities-649)内のタイマーによる非同期処理


## Business Process
公式ドキュメントには以下のようにあります。
>OutSystems allows you to design and manage your business processes and integrate them into your applications. A business process is simply called a Process in OutSystems and is understood as the way that a particular task is carried out in your organization, such as handling invoices, processing orders, or handling complaints. Processes are also known as BPT (Business Process Technology).

この文章を読むだけでは、なぜこれが非同期処理の項目で説明されているかわかりませんでした。
Entityの更新や作成をトリガーに実行されるプロセスを作成することができます。
業務フローを元にコーディングができ、ユーザの操作を待ったり、一定期間の待機をしたり、条件により処理を分岐したりフローに必要な制御が実装できます。
すべてのフローが処理されるまで待機したり、特定のフローが処理されるまで待機することができます。
こういった意味で非同期処理に分類されているのかなと思います。
使い方はかなり複雑なため、公式ドキュメントで学習する必要がありそうです。(日本語のドキュメントは見つかりませんでした。)
また、Case Management FlameworkやWork Flow Builderといった拡張機能があります。
ODCでは違った仕組みになっているようです。

### 参考
[Using Processes - BPT](https://success.outsystems.com/ja-jp/documentation/11/building_apps/using_processes_bpt/)
[Building Your First Business Process](https://learn.outsystems.com/training/journeys/business-processes-589)
[OutSystemsの非同期機能](https://learn.outsystems.com/ja-jp/training/journeys/async-capabilities-649)内のビジネスプロセスのモデリング


## Light Process
Entityの作成をトリガーに実行される小さな処理を作成することができます。
Business Processとは違い、単純な処理を実行することしかできません。イメージ的にはDBのトリガーのようだなと思いました。

### 参考
[Design Scalable Database Queueing Using Light Processes](https://success.outsystems.com/documentation/11/building_apps/using_processes_bpt/design_scalable_database_queueing_using_light_processes/)
[OutSystemsの非同期機能](https://learn.outsystems.com/ja-jp/training/journeys/async-capabilities-649)内のAsynchronous Data Processing with Light Processes


## それぞれの違い
公式動画にそれぞれの違いがまとまっていました。

|  |Timer|Process|Light Process|
|---|---|---|---|
|トリガー|任意のタイミング<br>スケジュール|任意のタイミング<br>DBのレコード作成・更新|DBのレコード作成|
|Flow|Server Action|複数のActivityの組み合わせ|一つのAutomatic Activity|
|Timeout|最大20分|一つのActivityにつき5分|3分|
|エラー時のリトライ|3回のち非アクティブ化|間隔を増加してリトライし続ける|間隔を増加してリトライし続ける|
|実行数の制限|フロントエンドサーバにつき3|フロントエンドサーバにつき10|フロントエンドサーバにつき20|

# 学んでみて
Timerはこれまでも何度か実装してきましたが、Business Process TechnorogyとLight Processは活用してきませんでした。
Business Process Technorogyは影響が大きいため、すぐに取り入れることができないかもしれませんが、Light Processについてはアプリケーションによっては簡単に取り入れることができそうなので活用を検討していきたいと思いました。
データベース

# 参考にした書籍
[SQL ゼロから始めるデータベース操作](https://www.amazon.co.jp/SQL-%E7%AC%AC2%E7%89%88-%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E3%81%AF%E3%81%98%E3%82%81%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E6%93%8D%E4%BD%9C-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%AD%A6%E7%BF%92%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA-%E3%83%9F%E3%83%83%E3%82%AF/dp/4798144452)

# DBとは（自分まとめ）

主にリレーショナルデータベース（MySQLやPostgreSQLなど）と非リレーショナルデータベース(NoSQLデータベース)がある。それぞれ２次元表、キーとバリューで管理されている。また非リレーショナルデータベースは名前の通り基本的にはSQLを使用しない。そのため使用のハードルは低いが高度な検索処理はできない。

Excelなどは複数人による同時利用にむかない。またセキュリティ性の問題もある。だからDBが必要
今はRDBMSが主に使用されている
クライアントからSQL文が送られサーバーに届くと該当のデータベースやテーブルから情報をクライアントに返す。1つのデータベースには複数のテーブルが入ることができる。SQLは標準SQLが普及している。そしてその9割がDMLである。DBは行(横)、列(縦)があり、行を一つの単位としてデータを取り出す。一つのセルには1つの情報しか入らず、テーブルやデータベースは必ず2次元の情報しか持たない

データベースをWEBアプリケーションと接続するにはドライバが必要である。

# 基礎文法
```
SELECT shohin_mei,shohin_bunrui 
FROM shohin 
WHERE shohin_bunrui = '衣服';
```


# Postgre SQL 基本コマンド

#### バージョン確認
```
postgres -V
```

#### データベースオーナー一覧確認
```
psql -l
```

#### ログイン
```
$ psql -d postgres -U ユーザー名
```

#### データベースに接続
```
\c データベース名
```
VSCodeでRubyの環境構築

# はじめに
こんにちは、見習いエンジニアのkaitoです！

今回はRubyの環境構築を書いていきたいと思います。私は長期インターンでクラウドのAWSを使ってrubyを書いていましたが、VSCodeでは書いたことがないので、勉強のつもりで記載していきます！

## 1.　VSCodeのインストール
以下のサイトからVSCodeをインストールしてください⬇︎

https://code.visualstudio.com/Download

## 2.　VSCodeの環境構築
左端にある上から5番目のアイコンを押して、検索でrubyと入力する。
するとrubyの拡張機能が出てきますが、推奨されていないため、代わりに`Ruby LSP`をインストールしてください。

次に検索に`Code Runner`と入力し、インストールしてください。

![スクリーンショット 2024-09-28 20.03.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886699/dd5120e7-8209-7c30-44e1-b46d332e22b6.png)

二つをインストールし終わったらVSCodeを再起動してください。
(一旦VSCodeを終了し、開くことでインストールが反映され、Rubyを書けるようになります。)

## 3.　Rubyを実行
#### 3.1　ファイルの作成・保存
[command]+Nか上にあるバーのファイルから新規ファイルを作成できます。
作成できたら、以下のように何かコードを記述してみてください。
~~~ruby:qiita.rb
puts 'Hello, World!'
~~~

![スクリーンショット 2024-09-28 20.36.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886699/839252af-a18a-46c1-4f49-8b728f3c1949.png)

[command]+Sか上にあるバーのファイルから保存ができます。
このとき、拡張子は必ず「.rb」

![スクリーンショット 2024-09-28 20.34.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886699/7896f2be-c06e-bb6f-7371-fa2e16f92167.png)

保存した後では色が付いていますよね？これはRuby言語のファイルだと認識されたことを意味しています。

![スクリーンショット 2024-09-28 20.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3886699/587a9c89-26f9-675b-5f64-8451bf3c4a8b.png)

#### 3.2　ターミナルの実行結果
ターミナルで`ruby 実行するプログラムファイル名`を記述すると`Hello, World!`という結果が出力されます。
```ruby:qiita.rb
username directoryname % ruby hello.rb
Hello, World!
```

# まとめ
最後まで読んでいただき、ありがとうございます🙇

1.VSCodeのインストール
2.VSCodeの環境構築
3.Rubyを書いて実行する

どうでしたか？意外と簡単でしたよね？
これを機にVSCodeでRubyやその他の言語も学んでみましょう！！
[メモ]Raspberry pi 4のubuntuでの初期ネットワークトラブル対処

# 始めに
Raspberry Pi ImagerはマイクロSDカードからUSBメモリまで、消去からインストールに使えて非常に便利です。特にUbuntu等でも書きこみ時にアカウント名やパスワードなど自分のものへ変更可能だったり、sshのモードを変更したりとかできるため重宝しております。ただし、Ubuntuで使う場合は時々イメージに悪影響を与える場合があるようです。私の場合は、Ubuntu server 22.04を書き込んだところ、ネットワークがデフォルトで立ち上がらなくなり、rebootの度にコンソールからdhclientコマンドをたたかないと駄目な状態になりました。今回ワークアラウンドが判明したので、おまじないをメモに残します。

# コマンド列

```
$ sudo dhclient -r
$ sudo dhclient -4        #ここでネットワークに接続
$ sudo apt update
$ sudo apt apt install openvswitch-switch　#これを入れないと電源オフで消えてしまう
$ sudo dhclient -r
$ sudo dhclient -4        #もう一回やらないと残らない様子
```

これでリブートやシャットダウンしてもネットワークが前の設定で立ち上がるはずです。
なぜかは不明です・・・。
css の transform でテーブルの順番を入れ替える

## はじめに
カラムとデータの間に別のものを挿入したい時があり、transform を使いました。
transform を実装で使ったのは初めてで、感動したので、記事にします。
こんな便利な css があったなんて・・・

https://developer.mozilla.org/ja/docs/Web/CSS/transform

## やりたいこと
下の画像のように、カラムとデータの間に値を入れたい。
![スクリーンショット 2024-09-28 16.42.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544489/639a617c-a6c0-34f6-191d-b5346e4c5d1f.png)

ただ自分の探し方が悪いのか、Ant Design の中にはできそうなオプションがない。
ならば自力でやるしかないと考え、尊敬してる大先生の元で教えてもらいました。

https://ant.design/components/table

## transform とは
transform は CSS のプロパティで、与えられた要素を回転、拡大縮小、傾斜、移動することできます。これは、 CSS の視覚整形モデルの座標空間を変更します。
（※引用元ーhttps://developer.mozilla.org/ja/docs/Web/CSS/transform）

指定した要素に変更を加えれるので、より柔軟なレイアウトを作ることが可能になります。

## 早速実装
①まずは、カラム側を2行にする
![スクリーンショット 2024-09-28 17.08.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544489/5791fccf-93d7-1ce2-184b-50b0cdfd864a.png)

②①の赤枠の要素にtransform の css を付与する
```
transform: scale(-1);
```
上記のtransformにより、要素の上下左右を反転させます。
![スクリーンショット 2024-09-28 20.54.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544489/9648583a-f055-31f6-1cc0-c2ae5c189be7.png)

③②青枠の要素にtransform の css を付与する
```
transform: scale(-1);
```
![スクリーンショット 2024-09-28 20.57.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544489/985a6921-7415-1af4-86a9-0eb5886f9f45.png)
①の画像と比べてもらうとわかりますが、カラムの上下が逆になります。

## 使用例
Table の columns prop を使用して、Other の位置に好きな要素を入れることができます。
![スクリーンショット 2024-09-28 21.06.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/544489/b584eb4d-ced9-fbe3-5516-42bfb546ce11.png)

自分は、左端にチェックボックスを設定し、チェックされている合計をカラムとデータの間に表示させました。

## まとめ
まだまだ知らない css がたくさんあると思います。
transform を使えばできると、瞬時に思えるようになりたいです。
ポートフォリオ（映画紹介サイト My Film）の説明

## 開発したサービスについて

### タイトル名：My Film
URL：~~https\://myfilminfo.com/~~ https://aoiyama.jp/my_film
GitHub：https://github.com/G1tHub20/my_film

### サービス概要
レビューをしたり独自のタグをつけることで、オススメの映画を紹介できるサービス

### なぜ作成したのか？
見たい映画を探す上で、関連するタグから検索することで直感的に映画を探すことができ、そのタグをユーザーが自由に設定できれば面白いのではないか、と思い作成しました。

## 画面イメージ

### TOP（検索）画面
![検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/351270e0-1ee6-12ef-4b7a-5846d4d10816.png)

### 一覧画面
![一覧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/b8286032-5c34-d132-d947-a1a980f22d09.png)

### 詳細情報画面
![詳細情報.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/f7425a73-29f3-4a7b-d150-fb5c317af9ca.png)

### レビュー登録画面
![レビュー登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/d10ce3e7-203e-b8e8-75d6-83cf86c62a53.png)

### レビュー編集画面
![レビュー編集.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/acfd4560-e2a0-fe13-9572-c81f90785212.png)

## 開発期間
期間：4月～8月の約5カ月間
時間：概算で学習時間(70時間)、作成時間(130時間)合わせて200時間ほど費やしたと思います。
平日1時間。休日3時間。

動画学習サイトでLaravelを学習後、仕様を決めてサイトを作成しました。

## 学習方法
基本は独学で、MENTAというサービスでメンターを雇い、疑問解決や進捗管理をしていただきました。

## 学習教材
Udemyをメインに書籍も併用しながら学習を行いました。

## 機能一覧
### 映画データの登録
* TMDb APIから映画データを取得しDBに登録
### 映画検索
* タイトルやジャンル等の基本情報、またはタグから映画を検索
### レビュー投稿
* ユーザが映画のレビュー（評価、感想、タグ）を投稿
### タグ登録
* ユーザが映画に対し独自のタグをつける（レビュー登録／編集画面）

## テーブル設計
![ER図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1830892/dd01ebfb-9601-baba-b2e9-1376f70b714d.png)

## 技術・環境
### フロントエンド
* HTML / CSS / Tailwind CSS
* JavaScript / Node.js
### バックエンド
* PHP 8.0
* Laravel 9.5
### データベース
* MySQL 
### インフラ
~~AWS（EC2）~~ さくらのVPS
### その他ツール
* Visual Studio Code
* Composer
* GitHub
* draw.io

## 工夫した点

### 映画データ作成の自動化
このサービスを作る上で映画データを大量に用意する必要がありました。
手打ちで入力できる量ではサービスのコンテンツ量が足りないため、映画のデータベースのAPIを探したところ「TMDb API」を知りました。
GuzzleHTTPクライアントを使いサーバー上でAPIからデータを取得し、DBに登録するシステム（コマンド）を作りました。

### 映画データの整形
APIで取得したデータをサービス上で表示するために整形する必要がありました。
* 取得項目や値の形式を統一したい
　例）製作年：数値4桁、ジャンル：ジャンルID（数値）など
* 1975年から2024年の各年に公開された映画を取得したい
* 全18ジャンルそれぞれに該当する映画を1本以上含めたい
* 映画1本につき、シーンの画像を2枚取得したい

上記を実現するために、試行錯誤し、DBのリレーションなど設計を考えながら作成しました。

### タグによる検索
ジャンルや評価の高さだけでなく、「泣ける」「旅に出たくなる」といったタグを映画に付けることで、映画のイメージから直感的に映画を探せるのではないかと考えました。
そのタグをレビュー時にユーザーが独自のものを付けられる仕組みにすることで、ユーザーの感想や思いを反映した映画紹介サイトが実現できると考えました。

## まとめ
実際にサービスを作成する過程で、データベース設計におけるリレーションの理解や、Laravelの基本的な使い方を学べたことは非常に有意義でした。
実際に手を動かして実装することで、より多くのことを吸収できたと感じたので、今後も積極的に実践を重ねていきたいと思います。
Route53でプライベートホストゾーンを利用してるのにパブリックIPが返却されるってどういうこと？

# 結論
ALB作成時にスキームが**インターネット向け**になっておりRoute53のプライベートホストゾーンを利用してもエイリアスによる接続を行うことでパブリックIPを返却するようになっていた。
ALB作成時に**内部**を選択するとプライベートIPアドレスが返却されるようになる。
# 顛末
## 要件
WebアプリケーションA（以降スクレイパーと呼ぶ）から、WebアプリケーションB（以降スクレイプリーと呼ぶ）へスクレイピングを行いたい。
社内利用のアプリケーションのため、特定のIP以外アクセスできないようにしたい。

## 環境
- スクレイパーとスクレイプリーは同じVPCで動作している
- スクレイパーとスクレイプリーはECSを利用している
- スクレイプリーは簡単に言うと、**Route53→ALB→ECS**のような構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045272/95dcd576-75e9-f337-cc62-5ddf6ba31434.png)


## 作戦1：セキュリティーグループにVPCのCIDRを追加
ECSのIPアドレス起動のたびに変更されるので固定するのは面倒。
なのでドメインが固定されているALBにアクセスすれば簡単に実現できそう。
同じVPCサービス内だからプライベートIPで接続されそう。
上記の理由からスクレイプリーのセキュリティグループにVPCのCIDRを設定し、同じVPC内のサービスからのアクセスを許可してしまえばいいと思い設定、スクレイパーを実行してみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045272/60823b5f-95ca-518c-7c9c-6a383b065a9e.png)

**結果**：スクレイパーはスクレイプリーにアクセスできず、タイムアウトすることになりました。

## 作戦2：プライベートホストゾーンを利用すればいい
調べているとRoute53にはプライベートホストゾーンという概念があり、それを利用するとこでVPCネットワーク内でドメインによるアクセスを行うとプライベートIPアドレスが利用できるというものです。同じVPC内であればドメインによるアクセス時に勝手にプライベートIPになると勘違いしていたので、これを行っていないため、うまくいかないことに納得しましたあ。また、プライベートホストゾーンはパブリックホストゾーンと競合しても問題ないそうです。
早速プライベートホストゾーンを設定し、試してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045272/7a6afda5-c7b8-38a3-84b7-6f319566a629.png)

**結果**：スクレイパーはスクレイプリーにアクセスできず、タイムアウトすることになりました。

## 作戦3：スキームが内部のALBを利用する
調べているとALBにはスキームで**インターネット向け**か**内部**を選択できます。
この時にインターネット向けを選んでいるとプライベートホストゾーンを利用していてもパブリックIPを返却するみたいです。
これを実装するには以下の構成を行う必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045272/37927cd9-7fa5-0220-688b-db4c2d2c2d03.png)

もうお気づきですね、そう料金が跳ね上がっているんです。
ECSの料金とALBの料金とホストゾーンの料金がかかるのでこれならNATゲートウェイを利用する方が安く済みそうです。

**結果**：料金が高いことがわかった

## 作戦4：NATゲートウェイを利用し、スクレイパーのパブリックIPを固定する
あとは当初のALBのセキュリティグループでスクレイパーからのパブリックIPを固定すればいいだけですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1045272/f27c8503-a52a-47f6-d3df-c9a4da0e61c3.png)


**結果**：シンプルに解決

# 学び
- ALBとターゲットグループは1対1対応
- EC2のAWSコンソールからターゲットグループを作成する時にECSのリソースを選択できない。ECSのサービス作成でターゲットグループを作成することができる。
- ALBはALBをターゲットにしたターゲットグループを選択できない

# 最後に
ここまで読んでくださりありがとうございます。
**スクレイプリー**という言葉へのなんとも言えない違和感を堪能していただきありがとうございました。
アーキテクトの教科書（第1章）の読書メモ

# はじめに

最近、「アーキテクトの教科書」という本を買ったので、読んで思ったことを書き連ねていきます。

https://amzn.asia/d/i8gsZp0

kindle版を買いましたが、ちゃんと文を認識してマーカーを引けるタイプなので、読みやすいです。:thumbsup:

第1章は「アーキテクトの仕事」です。

# 現実のソフトウェア開発ではリリースを重ねるごとに生産性が落ちてしまいます

アジリティが落ちる要因で説明されている文章です。本書では、これが発生する原因として「技術的負債」が挙げられております。

ただし、これはプログラマ達だけの問題ではないでしょう。

* 本当は不必要な（重要ではない）機能を実装するという決断をする
* 納期は変えずに、仕様変更を行う
* 本質的ではないところに、必要以上にこだわってしまう
* リファクタリングのための時間を与えない、確保しない

このようなマネジメント側の要因によっても、「技術的負債」が生まれることがあるため、注意が必要です。

# 多種多様性

プログラミング言語、DB、JavaScriptライブラリなど、昨今は様々な技術が登場しており、それぞれが異なる特徴を持っています。

それらを適材適所で組み合わせて使っていきましょう、という考えは間違いではないのですが、場合によっては理想論に見えてしまうことがあります。

企業は、限られたリソース（人材、予算、時間）を使って、ソフトウェア開発に取り組んでいるため、同一のテクノロジーに集約して行った方が効率的に物事を進められることがあります。
（個人的には、Webアプリを作るときのバックエンドは、理由がなければJavaScriptを採用したいと考えています。もちろんGo言語などで書いた方が早く動作することは知っています）

マイクロサービスという言葉がありますが、これは、優秀なエンジニアを潤沢に抱えている組織にはふさわしいですが、そうでない組織が下手に手を出すと、悪化することがあります。

理想を学ぶことは重要ですが、それを状況に応じて使い分けられる能力も重要かなと思います。

# ビジネスの理解

軽視されがちですが、確かにアーキテクトとして重要な資質かなと感じました。

ビジネスに対する理解が浅かったり、関心が薄い方というのは、どうしても使いたい技術や試したい開発手法ばかりに意識が行きがちです。

とはいえ、アーキテクトばかりのせいでもないかなと思うこともあります。ビジネス側の人が、開発側に、情報共有をしないことがあるからです。
* この製品は、市場でどのような位置付けにしたいのか
* どのようなターゲット層に売っていきたいのか（誰のどのような問題を解決したいのか）
* 売価、利益率
など

これらの情報を開発者に与えずに、ただ機能を次々に実装させたところで、ユーザに刺さるプロダクト・サービスを作り上げることはなかなか難しいです。
【UE5】コンパイルして実行したらクラッシュするときの解決法

# 状況
- UE エディターを起動しようとした時にクラッシュする
- UE エディターでコンパイルして、実行した時に必ずクラッシュする

# 解決
以下のフォルダを削除し、バイナリファイルなどを再生成する。
```
Binaries
Build
DerivedDataCache
Intermediate
Saved
```
これ以外は git に含めるようなファイルで、必要になるので消さないこと
GitHub などのバージョン管理ツールを使っていれば、クローンし直すという方法もあり
【shunit2】シェルスクリプトでも単体テストがしたい！

# 背景
私は度々、シェルスクリプトを作成し自分の業務の効率化をしており、そのスクリプトが便利だったときは同僚に共有している。
しかし、所詮は自分用に作ったスクリプトのため、他の方が使用した際には意図しないエラーが発生するケースがある。業務効率化のために勧めたスクリプトが逆に無駄なコミュニケーションを生み出してしまった。。。
このようなケースを減らし、より高品質なプログラムを渡せるようにしたいと思い、シェルスクリプトでも単体テストができないかと考えた。そして今回、シェルスクリプトの単体テストが可能な`shunit2`を知り、試してみた


# 概要
- `shunit2`でシェルスクリプトの単体テスト(Unitテスト)が可能
- shunit2のGitHubリポジトリ：https://github.com/kward/shunit2.git
- 1ケース1関数
- テストの関数名は`test~`とする
- `. /<shunit2フォルダのパス>/shunit2`でshunit2の起動が可能

# shunit2
`shunit2`を使用する。
`shunit2`はシェルスクリプトの単体テストを実施できるライブラリであり、シェルスクリプトで作成されている
そのため、他言語の環境構築が必要なく、GitHubからクローンしたらすぐに使用することができる。
最高！

■GitHubリポジトリ
https://github.com/kward/shunit2.git


# 環境構築
私のPC(ホストマシン)はWindowsなので、まずはDockerでLinuxの環境を用意する

作業ユーザーのルートディレクトリに`shunit`をダウンロードする
``` Dockerfile
FROM ubuntu:20.04

# gitと便利なパッケージをインストール
RUN apt update && apt upgrade -y
RUN apt-get install -y git
# shunit2をクローン

RUN git clone https://github.com/kward/shunit2.git ~/shunit2

# ユーザー作成なども実施したが本記事と無関係のため割愛
```
※クローンする場所はどこでも良い。自分がわかりやすいところに置いてください

# スクリプトの作成
実行するシェルスクリプトを作成する
今回は「第一引数の名前のフォルダを作成する」スクリプト`exe.sh`を作成した
```shell
#! /bin/bash

# フォルダを自動で作成するシェルスクリプト
folderName=$1

mkdir $folderName
```

# テストコードの作成
次にテストコードを作成する
テスト用のファイル`test.sh`を作成しテストコードを記入する。( ファイル名は任意。今回は便宜上`test.sh`とした )
テストコードは以下の3点
1. 1ケースごとに1つ関数を作成する
2. 関数名の頭字句は`test`とする
3. ファイルの末尾に`shunit2`の実行コマンドを記入する。コマンドは`. /<shunit2フォルダのパス>/shunit2`

この2つに注意してテストコードを作成する
```shell
#! /bin/bash

# 状況：「testFolder」フォルダが存在しない
# 期待値「testFolder」フォルダが作成される(正常終了)
testCanMkdir(){
    # 1. 準備：前提状況を作成
    folderName="testFolder"
    if [ -d $folderName ]; then
        rm -r $folderName
    fi

    # 2. 実施
    # exe.sh：先ほど作成したスクリプト
    . exe.sh $folderName

    # 3. 確認
    
    # 1.正常終了したこと
    assertEquals $? 0
    # 2.フォルダが存在すること
    assertTrue "[ -d $folderName ]"
}

. ~/shunit2/shunit2
```

# 実行前確認
#### 1. フォルダ構成
フォルダを作成するスクリプトのテストなので、テスト実行前に現在のフォルダ構成を確認
上で作成したスクリプトが2つ存在する
```plaintext
.
|-- exe.sh   # フォルダを自動生成するスクリプト
`-- test.sh  # テストスクリプト
```

#### 2. 実行可能に変更
`exe.sh`と`test.sh`に実行可能にする
```shell
chmod u+x exe.sh test.sh
```


# テストコードの実行
作成したテストファイル`test.sh`を実行する。
コマンドは`<path>/実行ファイル`にする。`. <path>/test.sh`ではテストが実行されなかった。
```shell
./test.sh
```
このような出力があれば成功！
```
testCanMkdir

Ran 1 test.

OK
```

# 余談：テストケースの追加
テストケースを増やす場合は、テストファイル内に関数を増やす
実行時に既にフォルダが存在するケース(testDirAlreadyExist)を追加した
```shell
#! /bin/bash

# 状況：「testFolder」フォルダが存在しない
# 期待値「testFolder」フォルダが作成される(正常終了)
testCanMkdir(){
    # 省略
}

# 状況：「testFolder」フォルダが存在する
# 期待値「testFolder」フォルダが作成されない(異常終了)
testDirAlreadyExist(){
    folderName="testFolder"
    if [ -d $folderName ]; then
        rm -r $folderName
    fi
    mkdir $folderName

    . exe.sh $folderName

    # 1.異常終了したこと
    assertEquals $? 1
    # 2.フォルダが存在すること
    assertTrue "[ -d $folderName ]"
}

. ~/shunit2/shunit2
```
実行すると`Ran 2 test.`と出力される
```
$ ./test.sh
testCanMkdir
testDirAlreadyExist
mkdir: cannot create directory 'testFolder': File exists    

Ran 2 tests.

OK
```

# あとがき
`shunit2`を使うことでシェルスクリプトの単体テストを行うことができた。これを活用できれば運用で使用するシェルスクリプトの品質を高めることができると思った。
また、もし機会があれば他の人に共有する前にテストを行い、業務効率化とシェルスクリプトのテストの二面でドヤ顔をしたい 笑
ファイアウォールの全てを解説！ステートフルインスペクションとアプリケーションレベルゲートウェイの違いとは？

#### 概要
ファイアウォールは、ネットワークの安全を守るために不正なトラフィックをフィルタリングし、外部からの攻撃を防ぐ重要なセキュリティデバイスです。この記事では、代表的なファイアウォール技術であるステートフルインスペクションとアプリケーションレベルゲートウェイについて詳しく解説します。

---

#### 1. ステートフルインスペクション（Stateful Inspection）

- **説明**: ステートフルインスペクションは、ネットワーク接続の状態を追跡し、許可された接続のみがネットワークを通過できるようにする技術です。パケットの状態や接続の有効性を確認し、不正な通信を検知します。
- **特徴**: 高度なパケットフィルタリングが可能で、セッション全体を監視するため精度が高い。
- **用途**: 企業ネットワークやクラウド環境の境界防御。

#### 2. ステートフルフェールオーバー
- **説明**: システム障害時、別のファイアウォールへ通信を引き継ぐ機能。
- **特徴**: ファイアウォールが保持する通信セッションの記録を保ったまま、自動で別のファイアウォールに切り替えることができる。
- **用途**: 企業ネットワークやクラウド環境の境界防御。

#### 3. アプリケーションレベルゲートウェイ（Application Level Gateway）

- **説明**: アプリケーションレベルゲートウェイは、特定のアプリケーションプロトコルに基づいてトラフィックを監視・制御する技術です。プロトコルの内容を解析して不正な通信をブロックし、さらに細かなアクセス制御が可能です。
- **特徴**: 高度なアプリケーション層のフィルタリングができ、プロトコルごとのセキュリティ対策が可能。
- **用途**: Webアクセス、メール通信のセキュリティ強化。

---

#### 総括
ファイアウォールは、ネットワークセキュリティの第一線を担うデバイスで、ステートフルインスペクション/ステートフルフェールオーバーとアプリケーションレベルゲートウェイはその中でも特に重要な技術です。
ステートフルインスペクションはセッション全体を監視し、アプリケーションレベルゲートウェイは特定のプロトコルに特化してセキュリティを強化します。
ネットワークの規模や用途に応じて最適なファイアウォール技術を選びましょう。
Ubuntu 22.04 LTS にしたら USB Serialがいなくなった

（ずっと20.04だったんで）

ぐぐるとよく言われているのが brltty が邪魔してるという奴。
ぐぐればでてくるので詳細割愛。使ってないなら消して、udevadm のリロード。

```
sudo apt remove brltty
sudo udevadm control --reload
```

と、これでも出てこないのでどうしたものかと思っていたら、

```
$ find /lib/modules/$( uname -r ) | grep usb/serial
```

ってやったときに何もいない。

generic に入っててここにあれこれあるはずなのに？どういうこっちゃ？
とさらに調べたら、いつのまにかエキストラにされてたよ。

```
$ sudo apt install linux-modules-extra-6.8.0-45-generic
```

解決。
[PowerApps]SharePointリスト5000件問題

# 背景
とあるPowerApps勉強会で**SharePointリスト5000件問題**が議題に出ていたので、情報を整理してみました。

# SharePointリスト5000件問題とは？
![SharePointリストエラー_1_マスク.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2987347/fd86ae89-ac39-f33c-990e-641e15b25fe6.png)
5000件以上のSharePointリストをデータソースとして、PowerAppsのキャンバスアプリでデータを取得しようとしたとき、「**リストビューのしきい値を超えているため、実行できません**。」というエラーが出てしまい、正常にデータを取得できませんでした。
これはデータが大量に蓄積されて負荷が掛かり過ぎて、サーバーがダウンしてしまうのを防ぐために、データの処理ができるのを5000件までに制限するものでした。

# 解決策
今回登場人物としては、**PowerApps**、**SharePointリスト**であり、PowerApps側でデータ取得する関数を実行するとき、**どこで問題が起きているのか**調査するのが、解決の近道でした。以下が問題点でした。
1. **PowerAppsの取得する関数が委任可能であるか**
1. **SharePointリストでフィルターする列にインデックス列が設定されているか**

# 委任可能とは？
データソースは、データソース上のデータをフィルタリングする作業を実行し、フィルタ基準を満たす行のみを返す場合があります。 これが正しく機能する場合、クエリの作業を実行するためにクエリがデータソースに[委任](https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/delegation-overview)されたと言います。
クエリが委任不可能な場合、PowerAppsはデータソースから最初の500レコードのみを取得し、クエリ内のアクションを実行します。2000レコードの設定も可能です。
つまり、2000件以上あるデータソースをPowerAppsで取得するとき、**委任関数を使用して、データ取得しないとPowerApps側の問題で、正しくデータをフィルターすることができない**ため、[委任可能な関数](https://learn.microsoft.com/ja-jp/power-apps/maker/canvas-apps/delegation-overview)で実装する必要があります。

# SharePointリストのインデックス列とは？
**インデックス列を設定していないと、SharePoint側で正常にフィルターされません**。実際に5000件以上のSharePointリストを用意して、インデックス列を設定していない列でフィルターしてみると正常に動作しないので、ぜひ試してみてください。
また、SharePointリストで[インデックス列を設定できるデータ型](https://support.microsoft.com/ja-jp/office/%E3%83%AA%E3%82%B9%E3%83%88%E3%81%BE%E3%81%9F%E3%81%AF%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E5%88%97%E3%81%AB%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B-f3f00554-b7dc-44d1-a2ed-d477eac463b0)に制限があるため、**SharePointリスト設計では、注意が必要です**。

# まとめ
アプリで想定通りに動作しなかったとき、**登場人物を整理して、その登場人物のどこで問題が起きているのか調査することが解決の近道である**ことが、**SharePointリスト5000件問題**を調べていて、再認識しました。引き続きこのアプローチを続けていこうと考えております。

この記事が皆さんの役に立てば幸いです。何か質問があれば、コメント欄で教えていただけると幸いです！
Unityでビルド後もステージアセットを読み込む方法（Resourcesフォルダを使用）

# Unityでビルド後もステージアセットを読み込む方法（Resourcesフォルダを使用）

### はじめに
Unityで複数ステージを持つゲームを作成する際、各ステージのアセット（3Dモデル、テクスチャ、プレハブなど）をどう管理するかが重要なポイントとなります。特にビルド後にステージアセットが正しく読み込まれるようにするには、`Resources`フォルダを使用する方法が効果的です。この記事では、`Resources`フォルダを使用してビルド後でもステージアセットを正しく読み込む手順について解説します。

### 1. **`Resources`フォルダとは？**

`Resources`フォルダは、Unity内で特別に扱われるフォルダで、ビルド時にその中のアセットが自動的にビルドパッケージに含まれます。ランタイムで`Resources.Load()`メソッドを使用することで、動的にこれらのアセットをロードできます。

ビルド後にアセットを動的に読み込みたい場合、`Resources`フォルダを使用するのが最適です。例えば、ステージごとに異なるプレハブをビルド後にロードしたい場合に非常に便利です。

### 2. **`Resources`フォルダの作成とアセットの格納**

#### 手順：
1. Unityエディタの**Assets**フォルダ内に、右クリックで**Create** → **Folder**を選択し、新しいフォルダを作成します。
2. フォルダ名を「`Resources`」に変更します。この名前は固定で、必ず「Resources」にする必要があります。
3. ステージごとにサブフォルダを作成し、それぞれに対応するアセットを格納します。例えば、`Stage1`、`Stage2`、`Stage3`のように整理しておくと良いでしょう。

```
Assets/
└── Resources/
    ├── Stage1/
    │   ├── Stage1Prefab.prefab
    │   └── Stage1Texture.png
    ├── Stage2/
    │   ├── Stage2Prefab.prefab
    │   └── Stage2Texture.png
    └── Stage3/
        ├── Stage3Prefab.prefab
        └── Stage3Texture.png
```

### 3. **アセットのロード方法（コード例）**

`Resources`フォルダに格納したアセットは、ビルド後に`Resources.Load()`を使用してランタイムで読み込むことができます。以下は、ステージごとにプレハブをロードし、シーンにインスタンス化するコード例です。

#### コード例：

```csharp
using UnityEngine;

public class StageManager : MonoBehaviour
{
    // ステージ番号に基づいてプレハブをロードしてインスタンス化する
    public void LoadStage(int stageNumber)
    {
        // ステージのパスを指定してプレハブをロード
        GameObject stagePrefab = Resources.Load<GameObject>($"Stage{stageNumber}/Stage{stageNumber}Prefab");

        if (stagePrefab != null)
        {
            // プレハブをシーンにインスタンス化
            Instantiate(stagePrefab);
        }
        else
        {
            Debug.LogError($"Stage {stageNumber} のプレハブが見つかりません。");
        }
    }

    // 例: ステージ1をロードする
    void Start()
    {
        LoadStage(1); // ステージ1をロード
    }
}
```

#### 詳細：
- `Resources.Load<GameObject>()`メソッドを使用して、`Resources`フォルダに格納されたプレハブを動的にロードします。
- サブフォルダに保存した場合は、パスを「`Stage1/Stage1Prefab`」のように指定します。
- ロードしたプレハブは`Instantiate()`メソッドでシーンに配置されます。

### 4. **ビルド後の動作について**

`Resources`フォルダに保存されたアセットは、ビルド時にUnityが自動的にパッケージ化し、ビルド後のゲームでも動的に読み込むことができます。ビルドされたゲームには`Resources`という名前のフォルダは存在しませんが、`Resources.Load()`を使うことで内部的に格納されたアセットにアクセスできます。

#### メリット：
- **簡単に動的読み込みが可能**: `Resources`フォルダにあるアセットは、必要なタイミングで動的に読み込むことができます。
- **ビルド後も使用可能**: アセットはビルドパッケージに含まれるため、ビルド後でも問題なく利用できます。

#### 注意点：
- **メモリ使用量**: `Resources`フォルダに含めるアセットが多くなると、ビルドサイズが大きくなり、メモリ消費も増える可能性があります。不要なアセットを`Resources`フォルダに入れないように気をつけましょう。
- **メモリ解放**: 動的にロードしたアセットは、必要がなくなった時点で`Resources.UnloadUnusedAssets()`や`Destroy()`を使ってメモリを解放することを推奨します。

### まとめ

Unityで複数ステージを持つゲームを作成する際に、`Resources`フォルダを使ってアセットを効率的に管理し、ビルド後も問題なくステージアセットをロードできるようにすることが重要です。`Resources`フォルダを活用することで、各ステージごとのアセットを簡単に動的に管理し、ゲームのパフォーマンスと柔軟性を高めることができます。

次のプロジェクトで、ぜひ`Resources`フォルダを活用してみてください！
Google Fonts から新しいフォントを Mac に登録する

# Google Fonts から新しいフォントを Mac に登録する

https://fonts.google.com/

## はじめに

はじめまして。

この記事では、Google Fonts から新しいフォントをダウンロードしてつけえるようにしていきます。
この記事が、「Web サイトの開発でオシャレなフォントが使えるようになった」などの貢献ができれば幸いです。

## 前提

使用する PC やアプリケーションは、以下に示します。

### PC

https://www.apple.com/macbook-air/

- 機種：MacBook Air
- チップ：M1
- メモリ：8 GB

### アプリケーション

https://support.apple.com/guide/font-book/welcome/mac

## ダウンロード方法

1. ダウンロードしたいフォントをクリックする、あるいはダウンロードしたいフォントの名前を検索する
2. 「Get font」をクリックする
3. 「Download all」をクリックする
4. ZIP ファイルを解凍する
5. Mac の「font Book」のアプリケーションに拡張子が `ttf` のファイルをアップロードする

## おわりに

この記事では、Google Fonts から新しいフォントをダウンロードしてつけえるようにしていきました。
この記事が、多くのエンジニアやデザイナーに貢献ができれば幸いです。
よくあるUnityビルドエラーの解決方法：AssetDatabase、LocationServiceなど

# よくあるUnityビルドエラーの解決方法：AssetDatabase、LocationServiceなど

#### はじめに
Unityでプロジェクトをビルドする際、エラーや警告が発生してビルドが失敗することがあります。このガイドでは、`AssetDatabase`エラー、アダプティブパフォーマンスプロバイダーパッケージの警告など、よくあるビルドエラーの解決方法を紹介します。

#### 1. **エラー: `AssetDatabase`が存在しないというエラー**
`AssetDatabase`はUnityエディタ内でのみ使用できるクラスであり、ランタイムコードで使用するとエラーが発生します。

##### エラーメッセージ:
```
Assets/AdjustableFlowerAssets/SceneSetup.cs(149,35): error CS0103: The name 'AssetDatabase' does not exist in the current context
```

##### 解決策:
`AssetDatabase`の使用を`#if UNITY_EDITOR`で囲み、エディタ内でのみ実行されるようにします。

```csharp
#if UNITY_EDITOR
using UnityEditor;
#endif

public class SceneSetup : MonoBehaviour
{
    public void CreateFlowers()
    {
        #if UNITY_EDITOR
        GameObject prefab = AssetDatabase.LoadAssetAtPath<GameObject>("path/to/prefab");
        #else
        GameObject prefab = Resources.Load<GameObject>("PrefabName");
        #endif
        // 残りのコード...
    }
}
```

この修正では、エディタ内では`AssetDatabase`を使用し、ランタイムでは`Resources.Load`を使用してプレハブを読み込みます。

#### 2. **エラー: LocationServiceクラスの使用説明が不足している**
位置情報サービスを使用する場合、Player Settingsで位置情報使用説明を設定する必要があります。

##### エラーメッセージ:
```
LocationService class is used but Location Usage Description is empty in Player Settings.
```

##### 解決策:
1. **Edit** → **Project Settings** → **Player**を開きます。
2. ビルド対象のプラットフォームに応じて、**iOS**または**Android**タブを選択します。
3. **Other Settings**セクションを展開します。
4. **Identification**セクションで、**Location Usage Description**フィールドを見つけます。
5. このフィールドに、アプリが位置情報を使用する理由を入力します。例:「このアプリは、周辺の花の情報を提供するために位置情報を使用します。」

位置情報サービスを使用しない場合は、`LocationService`クラスの使用を避けるか、関連するコードを削除してください。
【DAY19】画像のパス指定(Laravel)

## はじめに
現在、Laravelを使用してQ&Aサイトを作成している。ファビコンやナビゲーション部分に画像を使用していましたが、ページを遷移すると画像が表示されないことに気づきました。エラーの原因と解決方法についてここに記します。

## エラー時の状況
使用する画像はpublicフォルダに入れた。Laravel Breezeを使用しており、各ページはファビコンやナビゲーションを記述したビューを継承していました。
画像のパスは以下のように指定していました。
```html
<img src="icon.png">
```
## エラーの原因
エラーが発生した原因は単純で、相対参照でパスを指定しており、ページを遷移したき参照する箇所が変わってしまうことでした。
ページ遷移後の開発者ツールでurlを../icon/pngに変更すると画像が正しく表示されました。

従って、パスの指定を絶対参照にすることで解決しました。
```html
<img src="/icon.png">
```
これでも正しく表示されるようにはなりましたが、Laravelにはasset()というヘルパ関数があるのでこちらを利用することにします。
```html
<img src="{{ asset('icon.png') }}">
```
# 「Minified React error」を解決しました

## はじめに

私のブログに何か不要なログが残されているか確認するため、ブラウザのコンソールを開いていたところ、次のエラーがみつかりました。

![001-nextjs-minified-react-error-01-error](https://blog_workers.forever-fl.workers.dev/001-nextjs-minified-react-error-01-error.png)

普段はエラーがどこで発生しているのかわかりますが、このエラーはどこで発生しているのかわかりませんでした。まずはこのエラーについて説明がある「React」公式ドキュメントをみてみることにしました。

- [Minified React error #418](https://react.dev/errors/425): Hydration failed because the server rendered HTML didn't match the client. As a result this tree will be regenerated on the client.
- [Minified React error #423](https://react.dev/errors/425): There was an error while hydrating but React was able to recover by instead client rendering the entire root.
- [Minified React error #425](https://react.dev/errors/425): Text content does not match server-rendered HTML.

日本語で翻訳すると、次のようになります。

- **Minified React error #418**: Hydration に失敗しました。サーバーでレンダリングされた HTML がクライアントと一致しませんでした。その結果、このツリーはクライアント側で再度レンダリングされます。
- **Minified React error #423**: Hydration 中にエラーが発生しましたが、React がこれを復元してクライアント側で全体のルートをレンダリングしました。
- **Minified React error #425**: テキストの内容がサーバーでレンダリングされた HTML と一致しません。

このエラーを読んでみると、「Hydration」に関するエラーだと判断することができます。それでは、「Hydration」は何でしょうか？

## 「Hydration」とは

「Hydration」は一般的に「水分補給」を意味しますが、React 公式ドキュメントではこのように説明されています。

> In React, “hydration” is how React “attaches” to existing HTML that was already rendered by React in a server environment. During hydration, React will attempt to attach event listeners to the existing markup and take over rendering the app on the client.
>
> <cite>— React</cite>

> React では、「ハイドレーション (hydration)」とは、サーバ環境の React によって事前レンダーされている HTML に React が「アタッチ」することを指します。ハイドレーション中、React は既存のマークアップにイベントリスナをアタッチし、アプリのレンダー処理をクライアントに引き継ぎます。
>
> <cite>— React</cite>

簡単に説明すると、サーバー側からクライアント側に、水を供給するように、サーバーでレンダリングされた HTML に React が結び付けることを「Hydration」と呼びます。この「Hydration」中にエラーが発生した場合、React はクライアント側で全体のルートをレンダリングします。

## どこでエラーが発生しているのか

ネットを探してみると、これが発生する原因はサーバー側の時間とクライアント側の時間が異なる場合に発生することが多いようです。サーバー側の時間は UTC 時間で、クライアント側の時間はローカル時間であることが原因の一つとして挙げられています。

私はこのブログを半年前に作って、最近に Refactoring を初めて、私のブログのメインページに、投稿日を表示したことをうっかり忘れていました。そのため、どの Component でエラーが発生しているのかわかりませんでした。一つ一つの Component を消しながら、エラーが発生する Component を特定しました。

問題が発生していた Component は、次のコードでした。

![](https://blog_workers.forever-fl.workers.dev/001-nextjs-minified-react-error-02-blog-main.png)

```tsx:AllCategory.tsx
<div className="text-center w-full">
  <p className="text-sm dark:text-neutral-300">
    {new Date(post.date).toLocaleDateString()}
  </p>
  <h3 className="font-semibold dark:text-neutral-100 truncate mx-5">
    {post.title}
  </h3>
</div>
```

## エラーを解決した方法

この部分を次のように修正することでエラーを解決することができました。

```diff:AllCategory.tsx
- {new Date(post.date).toLocaleDateString()}
+ {new Date(post.date).toISOString().split("T")[0]}
```

このようにして、サーバー側とクライアント側の時間を一致させることで、エラーを解決することができました。

## まとめ

他のエラーはどこで発生しているのかわかりますが、このエラーはどこで発生しているのかわかりませんでした。次に私と同じようにこのエラーに遭遇した方のために、このエラーについて説明してみました。次にはもっといい記事でお会いしましょう。

## 参考資料

- [Source Code](https://github.com/foreverfl/blog/blob/main/components/main/Category.tsx)
- [Blog](https://mogumogu.dev/ja/development/debugging/001-nextjs-minified-react-error)
【備忘録】Oracle DataBase インデックス(索引)の作成、削除、変更する方法

## 1.インデックス(索引)とは
データベース内の、データテーブルに対する検索操作を高速化するためのデータ構造です。
インデックスは主に特定のカラムに基づいて作成され、テーブル内のデータに迅速にアクセスできます。
※本で例えるならば、目次のような役割を果たしています。

## 2.インデックスを作成するメリット
メリットとしては大きく2点あります。
#### 1.検索が早くなる
 目次の役割を果たすので、欲しい情報へすぐにアクセスできます。
#### 2.パフォーマンス向上
検索が速くなるので必然的にデータを探す時間が短くなり、これによりプログラムやアプリが速く動作します。
## 3.インデックスの作成方法
インデックスの作成にはCREATE INDEX文を使用します。
以下に基本的なCREATE INDEX文を記します。

```ruby:書き方
CREATE INDEX インデックス名
ON テーブル名 (列名)
;
```

例えば、社員(Employees)テーブルの社員IDカラム(emp_id)にインデックスを作成したいとなると、
下記のように記述します。
```ruby:例文
CREATE INDEX indexName
ON Employees (emp_id)
;
```
## 4.インデックスの削除方法
インデックスを削除する際にはDROP INDEX文を使用します。
以下に基本的なDROP INDEX文を記します。
```ruby:書き方
DROP INDEX　インデックス名
;
```

## 5.インデックス名の変更方法
インデックスの名前を変更する際にはALTER INDEX文を使用します。
以下に基本的なALTER INDEX文を記します。

```ruby:書き方
ALTER INDEX　変更対象のインデックス名 RENAME TO　適応させたいインデックス名
;
```

社員インデックス(emp_idx)というインデックス名を、部署インデックス(dep_idx)という、
名前に変更したい場合は、下記のように記述します。
```ruby:書き方
ALTER INDEX emp_idx RENAME TO dep_idx
;
```
ActiveRecord::ConnectionNotEstablished connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password suppliedの対処例【Rails】

## はじめに

Ruby on Railsにて、以下のエラーが発生しました。

```ruby
ActiveRecord::ConnectionNotEstablished connection to server on socket "/tmp/.s.PGSQL.5432" failed: fe_sendauth: no password supplied
```

## TL;DR

ローカルでRailsアプリをPostgreSQLを使用して作成していた際に、別のPostgreSQLのプロセスが残っていたために起きました。

該当プロセスを使用していないことを確認して、killしたあとに再実行することで解決しました。

## 手順

以下のコマンドを実行して、稼働しているPostgreSQLのプロセスIDを取得します。

```jsx
$ sudo lsof -i:5432
COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
postgres 600 postgres    7u  IPv6 0x758d57f8209a3bef      0t0  TCP *:postgresql (LISTEN)
postgres 600 postgres    8u  IPv4 0x758d57ee871310bf      0t0  TCP *:postgresql (LISTEN)
```

該当のプロセスIDを指定してkillします。

```jsx
$ kill 600
```

## 参考
https://lsof.readthedocs.io/en/latest/
歴5年のバックエンドエンジニアが初めてiOSアプリを作成・公開して、一週間経った収益を公開する。

私は普段フリーランスでGoのバックエンドエンジニアをやっています。

Xcodeは先月インストールしました。

Swift全然分かりません。
ドラッグ&ドロップでボタンの追加とか出来るみたいですが、
何だかよく分からないので男らしくコーディングでねじ伏せました。

そんな男らしい人間が作った男のアプリです。

## 結論:point_up:

![スクリーンショット 2024-09-28 18.01.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/e067a52c-24ba-d877-714d-776c191730af.png)

![スクリーンショット 2024-09-28 18.02.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/981d06dc-4172-9b76-8b8b-c1e9fa479a71.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/e535ac14-74b1-eaa1-eb37-b832a41669f7.png)


＿人人人人＿
＞　8円　＜
￣Y^Y^Y￣

## どんなアプリ？:vibration_mode:
雑談の時とかに話のネタを生成してくれるアプリです。

![スクリーンショット 2024-09-25 17.02.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/3413de2d-ddbb-1690-68e5-6d416a15af4b.png)


https://apps.apple.com/jp/app/topiccable/id6670713482

![ScreenRecording_09-28-2024-15-39-05_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/d014ee16-2cba-f88d-02e8-fe14b8d0ca56.gif)

## なぜこれを作ろうと思った？:thinking:
似たようなトークトピックを生成してくれるモバイルアプリやWebサービスを色々と使ってみましたが、
個人的に長く使いたくなるものがありませんでした。
<br>
自分が他の類似アプリを使用している中で感じた使いづらさは主に以下です。

**・広告がウザい**
**・日毎に提案回数の制限があったりする**
**・トピック数のバリエーションがそもそも少ない**
**・トピックのカテゴライズによるUIの複雑化**
<br>
<br>

**＞・広告がウザい**
トピックを再生成する度に、
フルスクリーン広告が再生されるアプリケーションがよく見受けられました。

<br>
【このアプリ】

そこまで収益化を望んでいるわけではないので、
小さなバナーを入れている程度です。
広告がウザすぎて使う気が失せてしまう事を避けたかったです。
<br>
<br>

**＞・日毎に提案回数の制限があったりする**
ユーザーが一日に使えるトピックの提案回数に制限が設けられていることがあります。

例えば、
1日に5回までしかトピックを表示できないというルールがあると、
ユーザーの利用自由度が制限され、
それもまたストレスです。

自分のしっくりくる話題をボタン連打で探したいと皆さん思っているはずです。
<br>
【このアプリ】
回数制限はありません。
<br>
<br>

**＞・トピック数のバリエーションがそもそも少ない**
言わずもがなです。

何度も同じ話題を提案されては、
新しい会話のきっかけを求める目的が達成されません。
<br>
【このアプリ】
300以上の話題数があります。
数の暴力です。
<br>
<br>

**＞・トピックのカテゴライズによるUIの複雑化**
一部のアプリではトピックをカテゴリーごとに分けていますが、
それがかえってUIの複雑化につながる場合があります。

カテゴリ選択やフィルタリング機能が増えすぎると、
ユーザーがシンプルにトピックを取得したいというニーズに応えられなくなり、
直感的な操作が難しくなります。
<br>
【このアプリ】
ボタン一個で提案してくれる極限までシンプルなデザインです。
<br>
## 学びや気づき:bulb:
画面遷移や環境変数の設定、デプロイの手順等々、
当たり前ですがどれ一つとってもWebとは微妙に違ったりするので、
スムーズにはいかなかったです。

JavaScriptなら一瞬でできることが、
Swiftでは何度もハマりました。

広告にGoogleAdmobを使用していますが、
Cocoapodsでmoduleをimportするのにもハマりました。
どうしたってmodule not foundが出て？？？でした。
この辺りの記事を参考にさせていただきました。

https://qiita.com/am10/items/008d1314c1e4df18ab75

あと、
AppStoreConnectのレビューが遅いです。
デプロイした後の審査で土日になるとレスポンスが返ってこず、
作業が滞ってしまいました。

## まとめ:rainbow:
単純に触れたことのない技術に触れることは、
相変わらず楽しいですね。

モバイルアプリは、
思いついたアイディアをスモールスタートですぐにデリバリーできるので、
fastfailが捗りそうです。

そして、
モバイルアプリのエンジニアの方を改めて尊敬しました。

いつかお金持ちになれると良いなあ。
Raspberry Pi Pico 2事始め～Raspberry Pi Picoって何～

Raspberry Pi Pico 2が発売されました。
Raspberry Pi Pico 2はRaspberry Pi Picoと同等のプラットフォームですがSoCの性能が向上しています。
# Pico2の特徴
- 性能向上
- 低消費電力
- メモリの倍増
# 主な変更点
- CPU
    Pico:Dual-core Arm Cortex-M0+ 133MHz
    Pico2:Dual Arm Cortex-M33 or dual RISC-V Hazard3 processors 150MHz
- Memory
    Pico:264KB on-chip SRAM; 2MB on-board QSPI flash
    Pico2:520 KB on-chip SRAM; 4 MB on-board QSPI flash

CPUがCortex-M0+からCortex-M33に変わったことで性能と共にSRAMが約倍、QSPIフラッシュが倍になりました。
性能向上とともに、消費電力が減っている特徴があります。

# Raspberry Pi Picoの良さ
- 低価格
- 多様な開発言語
- 扱いの容易さ
# 低価格
Raspberry Pi Picoは500円で発売されていました。
為替の関係で値上がりしていますが、今回のRaspberry Pi Pico2においても880円で購入可能です。
ESP32が1000円以上なのに比べると安価といえるでしょう。
- 秋月電子　880円
- スイッチサイエンス　990円
- KSY　913円
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/285344/79368853-343f-2946-2c32-98579bc7dc89.png)
# 開発言語
Raspberry Piだけあり、Pythonでの開発が可能です。
さらにC言語、ArduinoIDE等でも開発可能です。
- Python,MicroPython
- C
- C++
- Arduino言語
- Rust
# 扱いの容易さと使い勝手
- 消費電力
- 拡張機能
Raspberry Pi PicoはESP32と異なり消費電力が低いことがあげられます。
ESP32は突入電流のために800mA以上の電力供給が必要でしたが、Raspberry Pi Picoは消費電力が少なく電池等で1.8Vから動作可能です。
ESP32は低価格かつ、高機能なマイコンでしたが、消費電力の多さがネックとなり、動かないという問題がありましたが、Raspberry Pi Picoはそういった点がありません。

さらにGPIOピンが多く、拡張しやすいです。
# 欠点
- リセットピン
- USBコネクタ
Raspberry Pi Picoには欠点もあり、リセットスイッチが無く、リセット行うには一度USBコネクタを抜く必要があります。
さらに、USBコネクタはMicroBであり、USB-Cコネクタでないという欠点があります。
USB-Cは5.1kΩの抵抗でプルダウンしないと電力供給しないという仕様ですが、初期のM5Stackなど（当方がJimmyに指摘）これらが抜けているデバイスがある事、また、PDのネゴシエーションなどがある点、USB-Cのコネクタの問題から今回はMicroBなのではと推定します。
# Raspberry Pi Pico2に乗り換えるべきか
多くの人がRaspberry Pi PicoからRaspberry Pi Pico②2に移行する必要はないでしょう。
フラッシュメモリの容量などでRaspberry Pi Picoでは足りなかった人が移行するには向いているといえますが
それ以外の人が移行する必要はないといえます。
私が記事を書くことで一番意識していること(自己紹介)

## 自己紹介

はじめまして。

これから、**自分の勉強の為にも**どんどん記事を書いていこうと思っている現役Webエンジニアです。

普段はソフトウェア開発・ITコンサルなどを事業とし、個人事業主のWebエンジニアとして働かせていただいています。

いわゆるフリーランスエンジニアというやつです。笑
(ここだけの話、個人的にこの響きはあまり好きでないので、周りには自営でエンジニアをしていると言っています笑)

委任契約であったり請負契約であったりと、企業様との契約は様々です。

作業範囲は、インフラ(AWS)からDevOps周り含め開発(Webアプリで利用するフレームワーク)まで全て行っています。

また、TOEIC L&R 公開スコアも825点を保有していますので、英語での業務も任せていただけることがちらほらです。

ですので、スペシャリストというよりは、ジェネラリストです。

学生時代から数学(得意)以外は大体どの教科も同じ点数だったので、性に合っています。笑

また、まだ現役の情報系の大学生ですので、二足の草鞋を履いています。

## 私の記事で一番重要なこと

私は自分のために記事を書くと言いましたが、私の記事が誰かの役に立ちたいという思いも同じくらい持っています。

なぜなら、普段から誰かの書いた記事を読み、そのおかげで仕事が助かっているからです。

IT業界は慢性的な人手不足と言われていますが、人はなかなか増やせなくても、知識は世の中に出回して増やすことができると思っています。

### 本題

私が記事を書く時一番意識していることは、その記事を読んだ人が、その分野で

**0 -> 1**

にレベルアップできることです。

決して**1 -> 10**とかではないです。

ですので、深掘りした内容をご紹介するというよりは、その分野で最初の段階(だが重要)の事柄を紹介していけたらなと思います。

この背景としましては、**0 -> 1**と知識を吸収することができれば、そこから生じる部分的な疑問については、自分で調べることで十分に対応できるからです。

その前段階である、その分野の概要を知れる体系的な知識をご提供できたらなと思います。

## さいごに

今回は誰得な情報を記載した記事となってしまいましたが、他の記事などから飛んできてくれた方々(もしいればですが)に向けて作成しました。

では別の記事でまたお会いしましょう。
AWSサービスを資料に盛り込むときの表記ルール

## :sunny: このサイトで得られること：AWSサービスの表記ルールなどが分かる！
AWSサービスアイコンを資料に盛り込む機会が多いのですが、ちゃんとしたルールを見逃しがちだったので自分用に書いています！


:::note info
AWSのサービスアイコンってどこから使えるの？
:::
AWSのサービスアイコン集は以下のページからアクセス可能です。

https://aws.amazon.com/jp/architecture/icons/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828602/54f6e30e-ab19-4c28-ff6c-0e42d4a6cbd4.png)
ハイパーリンクをクリックするとダウンロード可能


:::note info
サービスアイコンを使用する時のルール
:::
実はサービスアイコンを使用する時のルールは先程のツールキットに記載してあります。

### 使用前のルール
* 最新のアイコンをダウンロードすること
※アイコンの色味など、たまーに変化していることがあるので注意
* ツールキットに記載のガイドライン（使用上のルール）を確認すること
* もし作成に困ったら、ツールキットに記載の構成図例を参照すること


### Groupのルール
*Group：AWS Cloudやリージョン、VPC、サブネットなど
* グループのサイズを変更する時は右下のボックスからサイズを変えること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828602/b5b126f6-1fc9-3c1b-7678-c597522b9c31.png)

* グループ内にグループを入れる場合は最低でも0.05インチ（1.27mm）の余白を設けること

### アイコンのルール
* プレゼンテーションで使用する場合にアイコンのサイズを変える時は、右下のボックスから変える&Sifhtキーを押しながら変えること（縦横比をいじらない、勝手に切り抜いたり形を変えない、斜めにしたりしない）
* アーキテクチャ図で使用する場合には、事前定義されたサイズで使用しサイズを勝手に変更しないこと（初耳学でした…:ear_tone1:）

### 矢印のルール

* ツールキットで提供されている矢印を使用すること
* Shiftキーを押してサイズを変更すること

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828602/593cbd23-81b8-a860-8037-47fa44b94286.png)


### アイコン名のルール
* 構成図内のアイコン名はフォントArialの12ポイントにすること
* アイコン名は2行以内であること
    * "AWS"もしくは"Amazon"をサービス名と一緒に書くこと
    * "AWS""Amazon"の後ろで改行しないこと
    * サービス名の途中で改行しないこと
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828602/1dc1620c-a129-550d-6d44-a01e7b325c9b.png)

#### サービス名を調べたい時

https://aws.amazon.com/jp/products/?aws-products-all.sort-by=item.additionalFields.productNameLowercase&aws-products-all.sort-order=asc&awsf.re%3AInvent=*all&awsf.Free%20Tier%20Type=*all&awsf.tech-category=*all

### 番号の吹き出しのルール
*番号の吹き出し：![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828602/298cb8e8-f09d-ff50-a9fd-c9359fd900ff.png)

* ツールキット内で提供されているものを使用すること（色、サイズ、形式もそのままにする）
* ツールキット内には、LargeサイズとSmallサイズが提供されているが、サイズを同じ構成図内で混在させないこと



##### 結構いろいろなルールがあったんですね…特にAmazon (スペース) サービス名はやってしまっていたので気を付けたいと思います:scream:
rubyでeachメソッドで空配列をループで回しても処理は走らない

当たり前の話だけどeachメソッドでループ回す際に、要素がないとループ処理は走らない。
```rb
def hoge
  [].each do |i|
    p i
  end
end

hoge
p "fuga" # fuga
```


なので、eachの中で要素がない場合はどうなる？のテストは不要
スライスとリストの違い

## seriesとはなんだ？

seriesとはなんだ？リストとどう違うのか？簡単に調べてみた。

## データ構造の一つ
seriesはpandasのデータ構造の一種。１次元のラベル付き配列という。<font color="MediumVioletRed">DataFrame内でリストを操作する場合、これをseries</font>という。
つまり、DataFrameの各列はseriesとして扱われる。

:::note
情報、Tips 
１次元とは、データを直線的に並べたもの。
:::

## seriesになるとどうなるか
・フィルタリングや統計処理といったリストではできないことができるようになる（まぁ、データフレームで扱うからそうだよねって感じ）
・リストはインデックスが最初の要素から0,1,2,3...といった形で決められているが、seriesはインデックスを好きな形で決めることができる。つまり、冒頭でお伝えした「ラベル付き配列」とはこのことである。例えば、文字列や日付もインデックスにできる

例）
```
s = pd.Series([10, 20, 30], index=['a', '2023-09-22', 3])
# 出力:
# a    10
# 2023-09-22    20
# 3    30
# dtype: int64
```
・上記から、インデックス名を取り出そうとするとindexオブジェクト型になる。
```
s.index
#結果
Index(['a', '2023-09-22', 3], dtype='object')
```
リスト型で取り出したいときは以下のようにする。<font color="MediumVioletRed">この方がよく使いそう</font>
```
index_list = s.index.tolist()
#結果
['a', '2023-09-22', 3]
```
## 学び
DataFrameから一列を取り出すと自動的にseriesになる。pandasでDataFrameを扱うときに出てくる大事な要素だからしっかりと意識していこう。