OmniAICreator/Qiita-1.07M huggingface dataset:
windows10で全角の管理者アカウントを作成し、沼から抜け出せなかったエンジニアの話

# こんにちは！
皆さんこんにちは
株式会社 Panta RheiにてGoogle Cloudを用いたデータ基盤構築を担っています。

一番使用する言語はPythonです。
最近は、なーなーにしてきたデコレータについて勉強しています。
私の中で整理ができたら、そちらの記事も共有させていただきます。

# 悲報と導入
いきなり悲報ですが、先週、私のWindowsのノートPCが故障しました。
具体的には突然電源ボタンが機能しなくなりました。

そのPCを買ってから7年目になるので、寿命ですね。
よく頑張ってくれました。

さて、2021年にWindows11が公開されましたが、一部のWindows機種はサポートされていません。
私のPCもサポートされていない機種に含まれていたため、故障したその日までWindows10を使用していました。
（Windows10のサポートが2025年10月に終了することを考えれば、いい時期に買い替えの機会が来たのかもしれません。）

Windows10から卒業するのは名残惜しいですが、Windows11への移行を前向きに捉えていきたいです。

ということで、今回はWindows10で沼から抜け出せなかったことについて話そうと思います。

季節外れの忘年会にお付き合いください(笑)


# 1. 初期設定の初見殺し
Windowsのノートパソコンを購入して最初に設定することの中に、"ユーザー名"があり、ここに初見殺し要素です。
設定後、"ユーザー名"は"管理者アカウント名"として使われます。

少なくともプログラミングをやりたい人は、絶対に全角文字を使用してはいけません。
Windows10において、管理者アカウント名は簡単には変更できません。
全角のユーザー名はプログラミングの環境構築の際にエラーの原因になります。
パスに全角が含まれるのはよくありません。

私は、それを知らずに全角のユーザー名を設定してしまいました。
全角のユーザー名が一番影響したのはanacondaの環境構築です。anacondaのインストール中にエラーが大量に発生し、半月もの間解決しなかったのを覚えています。

### Windows11の場合
Windows11の場合は、初期設定でユーザー名に全角文字を入力しても、おそらく問題ないと思います。
実際に全角の管理者アカウント名にしてみましたが、anacondaのインストールはできました。

ユーザー名に全角文字を入力すると、Usersディレクトリ直下に数字のフォルダが作られます。この数字がパスに使用されるため、インストールがスムーズにできたのだと考えられます。


# 2. ユーザーアカウント ≠ 管理者アカウント
全角の管理者アカウントを設定したあとに、どうやってanacondaのインストールを成功させたかについて話します。
結論を言うと、新しく半角でユーザーアカウントを作成しました。

Windows10でもWindows11でも、簡単にユーザーアカウントを作成・切り替えが可能です。
そこで、半角で作成したユーザーアカウントでPCにログインし、anacondaの環境構築に成功しました。

しかし、Dockerの環境構築で不便なことがありました。
まず、Docker Desktopの起動でエラーが出ました。
焦りつつも、管理者として実行すると普通に開けます。
ただ、VSCodeでDockerを扱いたい場合、VSCodeも管理者として実行しなければいけません。

VSCodeは管理者として実行すると、今までにインストールした拡張機能を管理者のウィンドウ（VSCode）でもインストールする必要があり、面倒です。

それだけなら我慢できたのですが、管理者ウィンドウではAutoHotkeyが動きませんでした。
（AutoHotkeyはショートカットキーをカスタマイズできる便利なソフトウェアです。私が設定しているショートカットも機会があれば今後紹介したいと思います。）

AutoHotkeyを管理者ウィンドウで動かすためには、AutoHotkeyファイルを管理者として実行する必要があります。

私は、下にあるスタートアップフォルダにAutoHotkeyファイルを格納することで、PC起動時に自動的に自作ショートカットを使えるようにしています。
しかし、PC起動時にいちいち管理者として実行するのは面倒で、嫌気が差していました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662726/e5a17309-04ef-fae8-e000-d5ae8e32789c.png)



### Windows11の場合
実はWindows11のPCでも、管理者アカウントではないユーザーアカウントでは、Docker Desktopを開くことはできません。次のようなエラーが出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662726/73f4b691-cd11-5b1c-72c0-03bef44633e2.png)

Windows10と同じように、Docker Desktopを管理者として実行すれば正常に立ち上がりますが、VSCodeも管理者として実行しないと、VSCodeでDockerを使用することは難しいです。


# 最後に
弊社はGoogle Cloud for StartupsのAIスタートアップに認定されているAI企業です。

有り余る技術力により、世のAI活用課題を解決致します。
お困りごとがございましたら、ぜひ[株式会社 Panta Rhei](https://www.pantarhei.co.jp/)にご相談ください！
cloudflareを利用してwebアプリを公開したい!part4(D1セットアップ)

# はじめに
　前回はPagesからHTTPリクエストを送信し、Workersからレスポンスを受信するところまでをやりました。
 　今回は、データベースD1のセットアップを進めていきます。

# D1セットアップ
　まずターミナルからログインを。
 ```powershell
 npx wrangler login
 ```
　D1データベースを作成していきます。
 ```powershell
 npx wrangler d1 create [db名]
 ```
　作成したD1をバインドします。
　私の場合はWorkersで使うのでWorkersのルートディレクトリにあるwrangler.tomlに以下の記述を追加していきます
 ```
 [[d1_databases]]
binding = "DB" # i.e. available in your Worker on env.DB
database_name = "[db名]"
database_id = "[dbのid]"
 ```
　これらはDB作成時、コマンドラインに表示されるので、それをコピペすればOKです。
　これでDBの準備は完了です。適当なテーブルの作成とCRUD操作を試してみましょう。
 　なお、D1のsqlはsqliteと同じものでいいようです。~~Rustで書く時、sqlxのフィーチャーはsqliteでいいのかな...?~~
  
:::note warn
【追記】
sqlxはwasm非対応らしく使えませんでした。当然sqlxベースのsea-ormも使えません。
:::

# 動作確認
　とりあえず[公式ドキュメント](https://developers.cloudflare.com/d1/get-started/)のサンプルのテーブルを突っ込んでみます。
 ```sql
 DROP TABLE IF EXISTS Customers;
CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT);
INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name');
```
　これをとりあえずルートディレクトリに配置しておいて実行してみる。
 ```powershell
 npx wrangler d1 execute [db名] --local --file=./schema.sql
 ```
 　ひとまずこれはリモートじゃなくローカルでのみ反映されるものらしいです。
  　とりあえずこれでいったんCRUDの確認をしてみましょう。
```powershell
npx wrangler d1 execute [db名] --local --command="SELECT * FROM Customers"
npx wrangler d1 execute [db名] --local --command="INSERT INTO Customers VALUES (99, 'test', 'test name')"
npx wrangler d1 execute [db名] --local --command="UPDATE Customers SET CompanyName = 'renamed' WHERE CustomerId = 99"
npx wrangler d1 execute [db名] --local --command="DELETE FROM Customers WHERE CustomerId = 99"
```
　結果は省略しますが、各動作ごとにSELECTした結果問題なく実行されていました。
　今回はやりませんが、--localを--remoteに書き換えれば、cloudflare上に作成したDBが操作されます。

 # おわりに
 次回はWokersからD1を操作してみようと思います。可能であればsea-ORMを導入しようと考えていますが......どうなるかな。

 # おまけ
 　記事を書いた後に「そういやローカルのd1はどこに保存されているんだろう...?」と思って探してみたら./.wrangler/state/v3/d1/miniflare-D1DatabaseObjectにありました。
  　DB Browser for SQLite等で中身を確認することもできます。
ScalaCheckのPropについて

# Propを生成する

[前回の記事](https://qiita.com/tobita_yoshiki/items/6e6e079a18bef427361c)では、文字列周りの処理をプロパティベーステストする事例について取り扱いました。
今回の記事ではScala Checkの`Prop`について共有させていただきます。

* この記事で取り扱う内容
  * Prop.forAll
  * Prop.throws
  * Prop.forAllで他のプロパティを扱う
  * Properties

# Prop.forAll

forAllメソッドは、 プロパティベースのテストの中核となる機能です。
これは、テスト対象の値を引数に取る関数を用いて、ある条件が常に満たされるかどうかをテストします。

```scala
val propStringLength = Prop.forAll { s: String =>
  val len = s.length
  (s+s).length == len+len
}
```

# Prop.throws

Prop.throwsは、特定のコードを実行した際に、指定した例外がスローされるかどうかをテストするためのメソッドです。
例外が発生する状況を検証したい場合に役立ちます。

```scala
val propDivByZero =
  Prop.throws(classOf[ArithmeticException]) { 1/0 }
```

# Prop.forAllで他のプロパティを扱う

Prop.forAllは以下のように他のプロパティを受け付けることも可能です。

```scala
val propListIdxOutOfBounds = Prop.forAll { xs: List[Int] =>
  Prop.throws(classOf[IndexOutOfBoundsException]) {
    xs(xs.length+1)
  }
}
```

# Properties

ScalaCheckにはorg.scalacheck.Propertiesというクラスもあり、これを使用して複数のプロパティをグループ化できます。

```scala
object ListProperties extends Properties("List") {
  property("double reverse") = forAll { (list: List[Int]) =>
    list.reverse.reverse == list
  }

  property("reverse length") = forAll { (list: List[Int]) =>
    list.reverse.length == list.length
  }

  property("sort reverse") = forAll { (list: List[Int]) =>
    list.sorted.reverse == list.sortWith(_ > _)
  }
}
```
[Dify]ローカル(or セルフホスティング)でもAPIキーのロードバランシングしたい！

OpenAIのAPIキーのレートリミットに引っかかってしまったことはありませんか？
私はしばしばあります。
さらに言うとDifyの社内展開や、プロダクト展開をしようとしている人たちはもっと感じていることだと思います。

そんな人に朗報です。
Dify0.6.10のバージョンからAPIキーのLoadbalancingの機能が入りました！

簡単に言うとAPIキーをいっぱい登録することでAPIのリクエスト制限をガンガン回避できるってことよ

早速使ってみよう！！！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/b8db498c-acdc-90ef-317a-94fe336d8855.png)

...クリックできない。
基本はDifyCloud用のプランということだろうか？


なので今回はそれを解決する方法を教えます。

## 解決するには？

### 原因
以下のファイルを見てみると
```
api/config.py
```

```python

        # Model Load Balancing Configurations.
        self.MODEL_LB_ENABLED = get_bool_env('MODEL_LB_ENABLED')

```
MODEL_LB_ENABLEDを設定するところがあります。
デフォルトではfalseになっているのでこれをtrueにしてあげないとロードバランサーは有効にできないようです。

### 解決策

docker-compose.ymlのapiとworkerに以下を足してあげよう。

```
 MODEL_LB_ENABLED: "true"
```


## ロードバランサーの設定

1. まずConfig Load Balancingをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/22e13f53-2b54-f7c5-8a64-130cdcb6a051.png)

2. Load balancingをクリックし、Add ConfigでAPIキーを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/ed21a704-1d0e-ccad-ebf6-f2ea7088d15f.png)

3. 追加されました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/528e389b-dc08-5cf9-1d95-bc8a25cd949f.png)

最後に以下のようにLoadBalancingになっていることを確認して終わりです

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/f0ea5f62-13d3-f53c-da94-fec4fb3609d3.png)


## 最後に

これは修正されるかもしれないので時間の問題ですね！
Sidekiqのretry設定は忘れずに!!

# はじめに
SidekiqでJobを実行して、エラーが発生すれば、リトライをしてくれます。
しかもデフォルトで、`25回`も...!!

なので、明示的に設定を行っていないと、25回もリトライされてしまうので、通知するように設定していたら...

イベント数がとんでもないことになってしまいますね。
`（※ 自分がそうでした...）`

反省も含めて、アウトプットいたします。

# config/sidekiq.yml に設定
上記ファイルに、以下のように記載いたします。

```rb
:max_retries: 10
```

上記のように記載すると、デフォルト値を変更して、最大で10回リトライしてくれます。
また、Job別にリトライ数を設定することもできます。

# 各Jobにも設定可能

```rb
  class HogeJob < ApplicationJob
    queue_as :hoge
    sidekiq_options retry: 10

    def perform
      fuga.hogehoge
    end
  end
```

`sidekiq_options retry: 10`を記載すると、各Jobごとでリトライ数を設定することができます。


# まとめ
- まとめて設定したいときは、`config/sidekiq.yml`
- 各Jobごとは、Jobファイルごと

上記のようになります。
皆さんも、SidekiqでJobの実装をした際には、忘れずにリトライ数を設定しましょう。

最後までご覧いただき、ありがとうございました。
Java switch文のアロー演算子を用いた構文ついて

## switch文でのアロー構文
switch文でアロー演算子を用いたコードを初めて見たのでメモとして残しておく。

アロー演算子「->」を使うことでswitch文の「：」と[break;]を省略することができる。
{}でブロックを作れば複数行の処理も書ける。
String　str = "B";
switch(str){
case "A" -> System.out.println("A");
case "B" -> System.out.println("B");
case "C" -> {System.out.println("C");
　　　　　 System.out.println("D");
　　　　 　System.out.println("E");
　　　　　 }
}

### 普通の書き方
String　str = "B";
switch(str){
case "A": System.out.println("A");
　　　　break;
case "B": System.out.println("B");
　　　　break;
case "C": System.out.println("C");
　　　　　  System.out.println("D");
　　　　 　 System.out.println("E");
　　　　break;
}

### 何がいいのか
- breakの書き忘れを防止したい場合に有効。
- 見た目もすっきりする。
自分だけGitコミットができなかったお話（謎の文字化け？）

4月に新しい案件に入って、チームで開発を進めていくことになりました。



いざ、開発作業に入り、自分が作ったファイルをコミットしようとしたら、エラーが発生。

Gitログを確認したら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/913b5e31-7456-f3f1-0c33-b55d2631d5f1.png)

### ？

なんかポケモンDPに出てきたズイの遺跡の暗号みたい (゜∀。)＜アンノーン集めないと



いや、そんなことを言ってる場合じゃありません。



### コミットができない!!!!



自分だけコミットできない現象が起きてしまい、このことをチームに相談しました。
自分も含めて、チームの人たちも原因、解決法を探してくれました。
<font color="DarkGray">みんな優しい、、</font>

### やってみたこと
- Node Packageの再インストール
- huskyの確認
- vscodeアンインストールして再度インストール
- クローンしなおす
- チームの人と設定があっているか再度確認
- ChatGPTに相談


しかし解決法は見つからず、一か月くらいは、作成したファイルをチームのリーダーに送って、コミットプッシュしてもらうという、クソめんどくさいことをさせていましたorz


## 解決法発見？？
ある日あるページを見つけました。
https://stackoverflow.com/questions/63943401/husky-pre-commit-hook-failed-add-no-verify-to-bypass

そのページに一時的/迅速な解決策として
```
git commit -m "message" --no-verify
```

と書いてる記事を見つけて早速コピペしてやってみると、

#### ⁉

コミットが出来ました！！

しかし、
## 完全にやらかしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/56de09b6-6493-0c9e-b6d5-89487d26c79c.png)

このことに気づかず、普通にコピペしたため

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3788032/93966be4-c57b-6fb3-db43-08f2c5c8544b.png)



コミットメッセージが「message」になってしまいました。





↓一応コミットメッセージを修正したい時のコマンドがあります。


https://qiita.com/ymp-a/items/0ed00353cdd5ca9e133c


## 完全に解決したわけではなさそう
コミットして一安心はしましたが、コミットできたコマンドは「一時的/迅速な解決策」と書いてるので、ちゃんとした解決策ではなさそうです、、

引き続き、正当な解決策がないか、調査していきます。

この経験があって、解決できた！、という方がいらっしゃったら、コメントお願いしますorz
エンジニア副業どうやるの、探してもないよ。そんな状況をなくす行動とは

:::note info
結論、副業を探さないでもいいような状況を作るには、まず人脈を築くことが重要だと思います。
繋がりを大切にしましょう。(あくまで個人的な意見です)
:::

## みなさん、副業していますか？

最近、副業の声をかけられることが多くなってきたので、この記事を書きました。
実は書きつつも私は副業していませんが、これから副業を考えている方の参考になれば幸いです。

## 副業を成功させるために必要な要素

副業を成功させるためには以下の3つの要素が重要です。

- 営業力
- 人脈
- 実力

エンジニアという職種柄、エンジニア同士のコミュニケーションが多いかもしれませんが、それだけでなく様々な職種の方と繋がることが重要だと思います。

**※実力については今回は詳細を省きます。エンジニアは最低限の実力は必要だと思うのでここは仕事なりインプットなりで鍛えましょう。**

### 営業力（コミュニケーション力）

営業力とは、具体的には次のようなことを指します。
- 副業をしているエンジニア仲間に「副業の募集はありませんか？」と尋ねることができるかどうか。
- 経営者の知り合いに案件の募集がないかどうかを聞けるかどうか。

これには信頼関係が必要です。

信頼がなければ紹介してもらえないこともあるので、結局は人脈が大きく関わってきます。

### 人脈

エンジニア副業で最も大切なのはやはり人脈だと思います。
将来的に副業を考えている方も、まずは人脈を築くことをお勧めします。

イベントに参加することに抵抗がある方もいるかもしれませんが、できる限り広げてみてください。

## 人脈を形成するための方法

人脈を形成するためにはどうすればいいのでしょうか？以下にいくつかの方法を紹介します。

### ビジネス交流会やビジネスマッチングイベントに参加する

エンジニアとしてだけでなく、職種に関係なく参加できるビジネス交流会は、副業の話が生まれやすい場です。

なぜなら、募集するのはエンジニアだけでなく、経営者や採用担当者など異なる職種の人々だからです。仲良くなったら食事に行ったり、そこから経営者のつながりで副業を紹介されることもあります。

スタートアップ系の企業では、リファラル（紹介）がコスト的にもWin-Winの関係になるので、高単価の案件が期待できるかもしれません。

ネット検索で交流会を探したり、「Yenta」などのビジネスマン同士のマッチングサービスを利用するのも一つの方法です。実際に私の場合も、そこからのつながりで声をかけられたことがあります。

また、X（旧Twitter）を覗いてみると、エンジニアと経営者のつながりを作る会なども開催されています。他にも「Meety」などで話をするのも効果的かもしれません。様々なサービスを活用して人脈を広げてみてください。

### エンジニアLTに参加する

「connpass」などのサービスでエンジニア向けのライトニングトーク（LT）イベントを探してみましょう。

オンライン交流よりも、実際に会場に出向いて様々な人と話すことで人脈を築くことができます。イベントで出会った人とその後も関わり続けることで、副業の案件につながる可能性も高まります。

副業を目的とするだけでなく、このプロセス自体も楽しんでください。新しいつながりが増えることで、予想外のチャンスが広がるかもしれません。

### エンジニアとしての実力を高める

エンジニアとしての実力を高めることで、XのDMなどでスカウトされる可能性もあります。技術を追い求めるだけでもいつかは声をかけられることがあるので、営業力や人脈形成が苦手な方は技術に専念するのも一つの方法です。

## 結論：人脈が鍵

結局、副業を成功させるためには人脈が鍵です。
繋がりを大切にし、自分のネットワークを広げていきましょう。頑張りましょう！
TerraformでローカルからImportする方法

## 概要

Terraformを使ってTerraform Cloudで管理しているStateファイルをローカルからterraform importする手順を以下に説明します。

## 手順

### 1. Terraformにログイン

stateはterraform cloud で管理しているのでCMDで以下のコマンドを実行しプロンプトに従ってログインを実施

```
terraform login
```

2. AWS CLIを設定

実際にAWSリソースを触るのでCMDで以下のコマンドを実行しアクセスキーとシークレットアクセスキーを登録する

```
aws configure
```

3. importブロックを作成
次のようにimportブロックを作成します。
例としてIDプロバイダとロールをimportします。

```
import {
  to = aws_iam_openid_connect_provider.github_actions_cicd_provider
  id = "arn:aws:iam::***:oidc-provider/token.actions.githubusercontent.com"
}

import {
  to = aws_iam_role.github_actions_cicd_role
  id = "github-actions-cicd-role"
}
```

4. 設定ファイルを生成

```
terraform plan -generate-config-out=generated.tf
```

5. Terraformプランの確認

```
terraform plan
```
※IDプロバイダをimportする際に以下のエラーが出る可能性がある
https://zukkie.link/%e3%80%90terraform%e3%80%91id%e3%83%97%e3%83%ad%e3%83%90%e3%82%a4%e3%83%80%e3%81%aeimport%e3%81%a7expected-url-to-have-a-host%e3%81%8c%e5%87%ba%e3%82%8b/

6. Terraform適用
```
terraform apply
```

以上の手順で、Terraform Cloudで管理されているStateファイルをローカルからインポートすることができます。
【Glide】ペーパーレスへの道①　業務連絡ノートをスマホのアプリに大変身！

## 我が社のペーパーレスが進まなすぎる！
ピチピチの社会人2年目
小売業界でお仕事をしています、rukq(ルカ)と申します！

我が社は慈善活動として現在に至るまで400,950本にも及ぶ植樹を行ってきました。しかしペーパーレスは進んでいなく、紙が大量に利用されています。その現状にメスを入れたいと考え、まずは自分が日頃から使っている連絡ノートをデジタル化しようと思いました！

ただ、私の売場の年齢層は高いので、できるだけシンプルで操作が簡単なものを作りたいと考えました。
なので、今回は __Glide__ を利用してみました！


## :robot:使用ツール
+ __Glide__
+ Googleスプレッドシート

## :robot:プレビュー

![Videotogif (1).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/10d57dd2-ba5e-1d0f-14ed-916a22320494.gif)



## :robot:完成画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/08ae180a-90ee-ca98-09b9-286afb1c6c4e.png)
アプリを開くとまずはこの画面が出てきて、投稿された日付とタイトル、記入者の名前が出てきます。
そこをタップすると、右の画面の表示が出てきて、詳しい内容と見たか確認できるようにチェックボックスが表示されます。
　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/b3675600-4224-9cd2-26dd-dfa0e0a91144.png)
投稿したいときはAddをタップし、右の画面を表示させて必要事項を入力して提出すれば完了です！


## :robot:Glideの画面
### __①Googleスプレッドシートの内容__
![004.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/f5a975a4-375e-ccf1-988d-c0544e2a88ac.png)
必要項目の表だけ作り、読み込んでいます。
　
 ### __②最初の画面の詳細__ 
![003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/289256f5-656c-a01f-9bab-7131c6024af7.png)
今回はシンプルさを追求するべくTablemの形式を採用しました。
　
### __③内容詳細の画面__
![002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/4e5da4aa-ba56-01f1-eed2-5ae72da65b7e.png)
最初ば画像がURLリンクになって表示されていたところを画像自体が見えるよう修正し、分かりやすさを追求しました。
　
### __④投稿入力時の画面__
![000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3775363/2c618b5e-6e07-0b64-e373-df747b63aedc.png)
ここもシンプルに必要最低限なものだけにしております。

## :robot:実際に使ってもらってみた！
「連絡ノートシンプルかつ簡単操作で利用できるものを作りましたので使ってみてください」と言い、売場に配布されているスマホに導入し、実際に使ってもらって上司である主任からレビューをいただきました。

 ### __売場主任__
  
####  __良い点__
  + ペーパーレスの観点がとても良い。
  + シンプルな構造で操作も簡単なので、新しい物が苦手な人でも使いやすい。
  + 画像が添付できることにより、連絡の幅が広がった。
   
　
#### __改善が必要な点__
 + タブや文字が小さいので少し見にくい。誤タップに繋がる。
 + 通知機能があると投稿されたことがすぐ気づけるの便利。
 
 ## :robot:最後に
 レビューでいただいた改善が必要な点において実は、実装段階で少し気がかりだった部分でもありました。ですが、__Glide__ に触れる時間が足りず、そこまでの実装が今回はできませんでした。
今後、__Glide__ にもっと触れて、文字サイズの調整や通知機能の追加を検討し、さらに使いやすいアプリにしていきたいと考えています！

6/18日追記：現在も売場で利用していただいており、今まで新しい物が苦手だったパートさんも使いこなせていた。
TerraformのIDプロバイダのimportでexpected "url" to have a hostが出る

## 概要

以下のterraformのimportブロックを書く
```
resource "aws_iam_openid_connect_provider" "github_actions_cicd_provider" {
  client_id_list  = ["sts.amazonaws.com"]
  tags            = {}
  tags_all        = {}
  thumbprint_list = ["1b511abead59c6ce207077c0bf0e0043b1382612"]
  url             = "token.actions.githubusercontent.com"
}

import {
  to = aws_iam_openid_connect_provider.github_actions_cicd_provider
  id = "arn:aws:iam::${var.AWS_ACCOUNT_ID}:oidc-provider/token.actions.githubusercontent.com"
}
```

するとIDプロバイダのimportで次のエラーが発生する場合があります。

```
Error: expected "url" to have a host, got token.actions.githubusercontent.com
│  ...
│  445:   url = "token.actions.githubusercontent.com"
```

## 解決策
このエラーを解決するために、URLに https:// を追加します。

```
resource "aws_iam_openid_connect_provider" "github_actions_cicd_provider" {
  client_id_list  = ["sts.amazonaws.com"]
  tags            = {}
  tags_all        = {}
  thumbprint_list = ["1b511abead59c6ce207077c0bf0e0043b1382612"]
  url             = "https://token.actions.githubusercontent.com"
}
```

## 参考
https://github.com/hashicorp/terraform-provider-aws/issues/26483
Javaを勉強してみよう！

# なぜJavaなのか
　自分が業務で使っている以外の言語で、どの言語を学びたいかと考えたときに、ゲームを作れると聞いてやってみようと思ったから。

 # Javaとは
 　そもそも、Javaとはどういう言語なのかというと、
  20年前に開発されたにもかかわらず、現在でも人気のプログラミング原語。その理由として、WindowsなどのOSやプラットフォームに関わらずJavaインタプリタがインストールされた環境ならどこでも実行できる点。また、オブジェクト指向プログラミング言語である。Javaで開発されたアプリは有名どころでいうとSpotifyやX(旧twitter)、ゲームはmincraftがある。Javascriptとは別の言語でWEB以外でも使われる。(https://azure.microsoft.com/ja-jp/resources/cloud-computing-dictionary/what-is-java-programming-language より要約)

# よし！簡単なゲーム作れるぐらいになるぞ！
3日坊主で終わりそう😅
Miro の付箋の個体差について調査した

[Miro](https://miro.com/index/) とは、オンラインホワイトボードツールで、テキストボックスや付箋、ペンなどを用いて会議や説明資料などのまとめに使うことができる優れものです。

https://miro.com/index/

その中で、Miro のボードで使われる付箋オブジェクトをよく見ると、微妙に折り目が入っていたり影の位置が違ったりと、個体差があることが分かりました。  
そこで、異なる外観の付箋オブジェクトは一体何種類あるか、調べてみました。

![sticky_notes1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/344f3b21-cdc8-392c-7e5a-fad2b6935c74.png)

## 事前準備

### ディスプレイの夜間モードをオフにする

普段は目への負担を軽減するため、私の Windows PC では夜間モード（ブルーライトカット）を常時適用していますが、今回の調査に先立って夜間モードをオフにし、本来の付箋を眺められるようにします。

### ディスプレイをきれいにする

ディスプレイの汚れによって、付箋の異なる種類と認識されるのを防ぐため、ディスプレイ清掃を行います。  
今回は、セブンイレブンでもらってきたお手拭きで水拭きした後、すぐに今治タオルで乾拭きしました。

使用した今治タオルはこちらです。

https://www.amazon.co.jp/gp/product/B07TWF8QSD/

## 調査

調査手順は以下の通りです。

- 付箋を 100 枚配置する
- 1 枚ずつ目視・カラーピッカーによる検査を行い、今までの付箋のタイプと異なるものなら名前を付けて新たに管理する

### 付箋を 100 枚配置する

影が認識しやすいよう、明るい色の付箋を配置します。  
サイズは M サイズを使用します。

![100sticky_notes.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/9b21fb86-1f12-8cc0-daad-fa520c3841e7.png)

### 目視・カラーピッカーによる検査

Miro ボードの倍率を 300 % にして、目視検査を行います。  
ボードを上下左右に移動しつつ、ブラウザ拡張機能のカラーピッカーを利用して色の差を読み取ります。  
ちなみに 300 % という倍率は、私の PC ディスプレイで付箋の全貌がギリギリ見えるくらいです。

![check.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/d02cf692-45ec-a946-d6de-bc76d58c051a.png)

## 結果（付箋紹介）

付箋の個体については 4 種類あるということが分かりました。各付箋は外観の違いのみで、文字入力によるフォント調整等の性能は同じです。

:::note warn
独自調査のため、結果間違いはご容赦ください。  
ただし、Miro 関係者の方からのご指摘は歓迎いたします。
:::

以下、各付箋の紹介になります。

### No.1 右上に折り目＆左下にそこそこはっきり影のある子

右上に谷折り部分がはっきりと確認できます。  
また、左下に付箋の角と分かるほどの影があります。

![sticky1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/642328f7-2244-fd80-700d-42a3736de938.png)

### No.2 若干左下にぼんやり影が寄ってる子

形が正方形よりも左上に伸びています。また、左下が若干山折りになっています。

![sticky2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/3a5b66b3-ac8c-ba6e-08a2-cf3ff234195e.png)

### No.3 左上がちょい折れ？＆右下に強めアーチ影な子

目視ではわかりにくいのですが、左上の色が若干濃いめになっており、わずかに折れ曲がっていると考えられます。  
また、影はアーチ状になっており、右下は付箋の角が確認できるほど強めです。

![sticky3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/1fc40654-2389-f550-24e2-83dde57d049d.png)

### No.4 上部に折り目＆若干左下にぼんやり影が寄ってる子

影は [No.2 若干左下にぼんやり影が寄ってる子](#no2-若干左下にぼんやり影が寄ってる子) とほぼ同じで、上部に谷折りが確認できます。

![sticky4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/b685d6b5-4a2e-e842-bd1d-aaeb6881335d.png)

## 余談

各個体の枚数は以下のようになりました。  
意外と偏りましたが、100 枚くらいだとこんなもんでしょうか。

| 個体 | 枚数 |
| ---- | ---: |
| No.1 |   21 |
| No.2 |   28 |
| No.3 |   33 |
| No.4 |   18 |

運動会みたいに色分けもしてみました。黄組が人気です。

![cluster.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486784/f806fbb0-752d-a511-50fb-f5ba76d8046a.png)

## 感想

疲れました。その割に種類が少なかったので、100 枚も目視検査した意味よ…となりました。  
何枚か検査するうちに検査技能が上達してきて、10 枚を超えたあたりで倍率 50 % くらいでも「あ、これは No.3 のパターンだな」などとすぐわかるようになりました。

今回の調査を通して、Miro は単なるホワイトボードとオブジェクトを提供するだけでなく、ホワイトボードを自然に見せるための粋な工夫をしているということが分かりました。これはひとえに「**付箋をよく Miro（見ろ）。**」というダジャレへの伏線でもあるように感じました。
【Oracle】M1 MacでOracle Databaseに接続する方法

# 概要
OracleのSQLを実行するツールとして、`SQL Plus`と`Oracle SQL Developer`がありますが、筆者のM1 Mac環境ではうまくいきませんでした。

調べてみたところ、Dockerを使った接続方法がうまくいったので、Dockerを使った接続方法について紹介します。

# 手順
### イメージ入手
[こちらのサイト](https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html#db_free)から、 `LINUX ARM (aarch64)`バイナリを入手します。
※ 筆者は`Oracle Database 19c for LINUX ARM (aarch64)`をZIPダウンロードしました。

### Dockerのビルドスクリプトをクローン
以下のコマンドで、クローンしてきます。
```
$ mkdir ~/git/oracle
$ cd ~/git/oracle
$ git clone https://github.com/oracle/docker-images.git
```
クローンが終わったら、ダウンロードしたバイナリを、クローンしたビルドスクリプトの適所に配置します。

ただ、`LINUX ARM`のバイナリのバージョン`19.19`に対応するディレクトリが存在しないため、`19.3.0`ディレクトリ配下に配置します（`Linux x86-64`のバージョン）。

```
$ cp ~/Downloads/LINUX.ARM64_1919000_db_home.zip \
     ~/git/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0
```

### コンテナ起動
以降は、以下の記事を参考に進めてもらえればと思いますが、若干異なる部分があるところだけ記載します。

https://qiita.com/yuttoku/items/f9aa9c3caf17d95c81b7

`OracleDatabase/SingleInstance/dockerfiles/`配下にある`buildContainerImage.sh`を実行してコンテナビルド。
```
$ cd ~/Git/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -v 19.3.0 -e -i
```

SQL接続
```
SQL> connect sys/password as sysdba
```

# 参考
https://qiita.com/yuttoku/items/f9aa9c3caf17d95c81b7

https://qiita.com/HiromasaNojima/items/bb2e8903ab199b34ac70
defineModel: 従来の props と emits の省略

### はじめに
[前回の記事](https://qiita.com/taka-d/items/9fc20968665ce1476f3c)でvueの基本的な仕組みのpropsとemitについて記事を書きましたが、Vue3.4からdefineModelが使えるようになり親子の双方向バインディングがわかりやすくなったみたいなので学習していこうと思います。

今回はprops、emitを使用した方法とdefineModelを使用した方法で簡単なカウントアプリを作成してみたいと思います。

親画面である`CountView.vue`は同様のものを使います。
```CountView.vue
<script setup>
import { ref } from 'vue'
import Count from '../components/CountComponent.vue'
// リアクティブ変数
const countValue = ref(0)
</script>

<template>
  <div>
    <Count v-model="countValue" />
    <p>View Count: {{ countValue }}</p>
  </div>
</template>
```
```CountComponent.vue
// 従来の書き方
<script setup>
import { ref } from 'vue';
import { defineProps, defineEmits } from 'vue';

const props = defineProps({
  modelValue: {
    type: Number,
    default: 0
  }
});

const emit = defineEmits(['update:modelValue']);

const count = ref(props.modelValue);

const increment = () => {
  count.value++;
  emit('update:modelValue', count.value);
};

const decrement = () => {
  count.value--;
  emit('update:modelValue', count.value);
};

</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>
```
こちらが従来の書き方でした。
親画面からmodelValue(v-model)を受け取ってボタンがクリックされたらemit('update:modelValue')で親画面に返し画面に描画する仕組みでした。

しかし、`defineModel`の登場により、この冗長なコードを省略できるようになったみたいなので試してみます。

```CountComponent.vue
// defineModel を使用
<script setup>
const count = defineModel()

const increment = () => {
  count.value++
}

const decrement = () => {
  count.value--
}
</script>

<template>
  <div>
    <p>Count: {{ count }}</p>
    <button @click="increment">+</button>
    <button @click="decrement">-</button>
  </div>
</template>

```
めちゃくちゃシンプルになりましたね！

**まとめ**

* `defineModel`は`modelValue`プロパティと`update:modelValue`イベントを自動的に管理してくれる
* `defineModel`を使用することで、コードが簡潔になり、`v-model`との連携がスムーズになる

どんどん新しくなっているため引き続きキャッチアップを続けて取り残されないようにしていきたいと思います！
SteamPipeGUIの起動は最初の１回だけで良い

SteamPipeGUI使ってますか？便利ですよね。
でも修正するたびに起動してアップロードボタン押すの面倒ですよね。

そんなときは・・・
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3640703/6daa9d73-16b0-5573-1960-0f58b1746b05.png)

アップロードしたときに表示されるこのログの先頭にあるこの部分。

`C:\user\tools\steamworks_sdk_158\sdk\tools\ContentBuilder\builder\steamcmd.exe  +login ユーザ名 パスワード +run_app_build 
"C:\user\tools\steamworks_sdk_158\sdk\tools\ContentBuilder\scripts\app_*******.vdf" +quit
`

これを、新しいファイルを作成しコピペし、upload.batという名前で保存する。
以降はこのバッチファイルを叩くだけで、SteamPipeGUI上でUploadボタンを押したときと同様の処理が実行されます。
WordPressのログインの有無でコンテンツ切り替え

# 概要
WordPressで会員サイトを作る際に
ログインの有無で表示を変える必要があったので
ショートコードを作って対応したのでその記録です。

# 実際のコード
## ログインしているユーザーは見られる
```functions.php
function display_login($atts, $content = null) {
  // ユーザーがログインしている場合は、コンテンツを表示
  if (is_user_logged_in()) {
    return do_shortcode($content);
  } else {
  }
}
add_shortcode('login', 'display_login');
```
## ログインしていないユーザーは見られる
```functions.php
function display_no_login($atts, $content = null) {
  // ユーザーがログインしていない場合は、コンテンツを表示
  if (!is_user_logged_in()) {
    return do_shortcode($content);
  } else {
  }
}
add_shortcode('no_login', 'display_no_login');
```
Diver OSINT CTF 2024 Writeup

# Diver OSINT CTF 2024 Writeup

hatomatoさん、potekoさんと共同で参加しました。
順位は130位/453位でした。

![score.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/aafde5b9-0f8a-25a6-ce29-e50b4586561d.png)

全部はわからないので、解説できるものだけ載せてあります。

## 目次
- welcome
- number(misc)
- osprey1(military)
- office(introduction)
- dream(introduction)
- serial(introduction)
- imagetrack(geo)
- leak(crypto)
- 感想

## welcome

Rulesのページのどこかに隠れてます。

![welcome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/f210c93b-a287-72f6-f1ad-9061165539e6.png)

``Diver24{ganbarou!}``

## number(misc)

車のナンバープレートに「外」と書かれている場合、外交官ナンバーを示しており、「外」の後に国の番号が書かれています。全体の数字が4桁の場合は2桁、5桁の場合は3桁が国番号として割り当てられています。

([参考文献](https://ja.wikipedia.org/wiki/%E6%97%A5%E6%9C%AC%E3%81%AE%E3%83%8A%E3%83%B3%E3%83%90%E3%83%BC%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88#%E5%A4%96%E4%BA%A4%E5%AE%98%E8%BB%8A%E4%B8%A1_%EF%BC%88%E5%A4%96%E5%8B%99%E7%9C%81%EF%BC%89 "ナンバープレート(Wikipedia)"))

今回の場合、「49」が国番号のため、クウェートの外交官の車であることがわかります。

したがって、クウェートの大使館の電話番号が正解となります。

``Diver24{0334550361}``

## osprey1(military)

これは検索方法を少し工夫する必要があります。
``オスプレイ　墜落　屋久島　機体番号``と検索すると手がかりが見つからないため

``オスプレイ　墜落　屋久島　コールサイン``と検索すると墜落したオスプレイのコールサインは``GUNDAM22``であることがわかります。

そこから``GUNDAM22``の機体番号を調べると``12-0065``であることがわかります。

``Diver24{12-0065_GUNDAM22}``

## office(introduction)

拡張子に``.odt``とありますがこれは``OpenDocument``ファイル(Wordのようなもの)です。

Wordのファイルは``zipファイル``でも開くことができるので
拡張子をzipに変更し、開くといかにも怪しい``Thumbnail``ディレクトリを発見。
その中を見てみたら``Thumbnail.png``というファイルがあるので開くとflag獲得です。

``Diver24{World Ocean Day}``

:::note warn
単語と単語の間に半角スペース入れ忘れると不正解になります。
:::

## dream(introduction)

Google画像検索をすると、``ポップタウン住道 オペラパーク``が出てくるので
そこの住所を調べるとflag獲得です。

``Diver24{574-0046}``

## serial(introduction)

飛行機をよく見ると``JA222A``と書かれています。
ですがこれは``機体記号``です。

![serial.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/ea2c2ddd-b1ab-f5d4-e951-0bff74f7d76f.png)

シリアルナンバーを問われているので``JA-Fleet``を利用して製造番号を調べると
flag獲得です。

``Diver24{9580}``

## imagetrack(geo, 解けなかった)

linuxの``exiftool``コマンドを使用するとGPSの座標がわかります。

![imagetrack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/8fb74360-c9b6-2727-a459-a5b0edcfc902.png)

Latitude = 緯度
Longitude = 経度

よりgoogle mapで``34°41'41.2"N 135°11'35.6"E``と検索します。

![imagetrack_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/b723e8fe-ab44-39a3-bb30-d0fc45193e8a.png)

この状態で赤いピンの周辺を左クリックするとflag獲得です。

![imagetrack_3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2982234/2b2c0bee-782d-d0a4-3233-784f2d4ab4cd.png)

``Diver24{karasu}``

## leak(crypto)

``BTC 不正流出 アドレス``で
5月中にアップロードされたものを調べたらnoteの記事があったので
ここからflag獲得です。

https://note.com/valuesharing/n/ncfdf4ddfa0b6

``Diver24{1B6rJRfjTXwEy36SCs5zofGMmdv2kdZw7P}``

## 感想

imagetrackの問題がexiftoolで解けることを知らずに
背景の写真から推測するものだと思い込んでたので
かなり悔しいです。
今の世の中のアプリ開発におけるチームコミュニケーションのベストプラクティスとは

多くのアプリケーション開発の流れは、そのフェーズごとにコミュニケーションが発生していると思います。本記事ではそのフェーズ毎に私が最も良いと思ったコミュニケーションを 1 つ選んでまとめます。

|  | フェーズ | コミュニケーションの場 |
|:--|:--|:--|
| 1. | キックオフ | Meets |
| 2. | 設計・仕様等 | slack |
| 3. | 実装・UT | slack（ハドル） |
| 4. | レビュー | GitHub PR |
| 5. | UI/UXテスト | オフライン |

## 1. キックオフは Meets でリアクションを意識

キックオフでは主に要件や仕様について発表・相談する場です。

<img width="600px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33505/73e21b13-8349-6f18-747d-dfec98149643.png">

真剣に聞くのも大事ですが、<font color="red">発表者は画面共有することが多い都合上、参加者の状態がチェックし辛い</font>です。Zoomとは異なり Meets のリアクションは画面共有上にも表示されるので <font color="#1e90ff">👍 や 👏 💖 などのリアクションを多めにすることで、互いに気持ちの良いコミュニケーションを意識</font>しましょう。

## 2. 設計相談・仕様調整は slack ベースにすることでログも一緒に残す

キックオフが終わると、調査や設計に入ると思います。

途中設計や仕様への相談は発生すると思います。そこで大事にしたいは『認識齟齬を発生させない』ことです。ビデオ会議のほうが伝えるのは簡単ですが、コミュニケーションロスは発生しやすいです。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33505/fc91ae3c-905f-b731-6900-9bf50fb29da8.png">

よくある例
　エンジニア：ボタンのデザインは他と同じですか？（<font color="red">Bかな？</font>
　デザイナー：他のボタンと同じでお願いします！（<font color="red">Aのことかな？</font>
　エンジニア：わかりました！（<font color="red">**よし B ボタンだな**</font>）
 
口頭だとひと言で終わってしまいますが、文章ベースにすると...

　エンジニア：ボタンのデザインは <font color="#1e90ff">A と B どちら</font>にしますか？
　デザイナー：<font color="#1e90ff">Aボタンと同じ</font>でお願いします！
　エンジニア：わかりました！（<font color="#1e90ff">**よし A ボタンだな**</font>）

こうなると結合テストのタイミングで何が起こるか一目瞭然ですね。しかも口頭だと「言った・言ってない」の砂かけ論にもなりやすく、結果としてチームのコミュニケーションとしては成立しなくなります。

## 3. 実装は ハドル で気軽に画面共有しながら相談

プログラムやデザインが仕様通りに開発できているか確認することが出てきます。
上とは異なり、ここを<font color="red">文章ベースにしてしまうと文章量が増えてしまい、逆に伝えたいことが伝わなくなります。</font>

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33505/7c18102d-ecde-8259-e8c1-4a72c9198fb0.png">

出社時と同じ状況を作るためにも、<font color="#1e90ff">画面を共有しながら相談したほうが効率的</font>でした。

## 4. レビューは PR ベース

ここは基本変わらないですね。GitHub が一番いい。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33505/15c698eb-b9fd-ed35-4cd5-f39a72fb9ca3.png">

## 5. UI/UXテストはインタラクションやログを見ながら行おう

正直ここはテストする内容やチームによって異なってくると思います。在宅ベースの場合はそれぞれのデバイスや環境でテストしたほうが効率的な状況も出てくると思います。

私はAndroidアプリのチームにいますので、今回は私の経験談でまとめます。

AndroidやiOSはWebとは異なり、クライアントサイド・アプリケーションになります。そのため<font color="red">同じデバイスであっても通信の状況やバックグラウンドの常駐アプリケーションによっては再現されるバグやクラッシュに違いがでて</font>しまいます。
いざクラッシュが発生した際、非エンジニアからログやレポートを貰うことは難しく、また Firebase Crashlytics などを利用してエラーイベントをキャプチャしたとしても、再現パターンを見るけるのは難しいです。

ではUI/UXのときはどうでしょうか？　<font color="red">デザインを 1px 動かすにも確認するためには都度デプロイが必要になったりと、生産性は高くない</font>と思います。またアニメーション 1 つとっても、速度は感覚に近いためそれをオンライン上でうまく表現して伝えるのも容易ではありません。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33505/0ee6ccb0-9d5d-7d40-802a-480f5de48b25.png">

もちろん上記までのことはハドル等でも再現することはできますが、そうなるとそれぞれ同じOSの同じ端末・同じ通信環境を再現させる必要があるため、こちらも容易ではありません。

ここは割り切って出社して、隣に座りながらテストしましょう。<font color="#1e90ff">なんだかんだ言ってオフラインにまさるコミュニケーションはありません。</font>

# まとめ

実際どういったコミュニケーションが効率的で生産性が高いのかはチーム次第になるというのも答えですが、私の経験則上「<font color="#1e90ff">**オンラインとオフラインのハイブリット・コミュニケーション**</font>」が一番良い！と思います。

オフライン（出社）するとしても、テストタイミングのみと考えれば隔週程度にはなると思いますので、そこまで負担もかからないと思います。
【Ruby】文字列をスペースで区切って配列にし、配列の要素を取り出す。

文字列をスペースで区切って配列にし、配列の要素を取り出すプログラムを作りました
Rubyで作りました。

```Ruby
str1 = "Hello paiza"
array1 = str1.split(' ')
length1 = array1.size()
for i in 0...length1 do
    puts array1[i]
end
```

結果
![kekka.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2710584/8859e6f4-1ecd-8d6c-ae10-a5b99cdecab9.jpeg)
なぜデザインパターンを学ぶのか？

# デザインパターンとは？
### 当時の達人が考えた設計思想
デザインパターンとは、状況ごとのシステム設計のカタログです。
「こういう状況であれば、こう設計した方が良いよ」というものが記載されたものになります。

従ってデザインパターンを知っておくと、状況に応じた最適な設計をすることができるようになります。

デザインパターンは、過去のエンジニアの集合知になるので、自分でゼロから考えるよりも、良い設計が可能になります。

 ### GoFのデザインパターン
 デザインパターンの一般的な意味は上記の通りなのですが、
システム開発においてデザインパターンと言うと、ほぼ**GoFのデザインパターン**のことを言います。

**GoFのデザインパターン**とは、書籍『[オブジェクト指向における再利用のためのデザインパターン](https://amzn.to/3QRNuCO)』に記述された、オブジェクト指向プログラミングに関するデザインパターンです。

書籍は4名の共著なのですが、その4名が「Gang of Four」と呼ばれておりそこから「GoFのデザインパターン」と言われています。


# パターンを学ぶ理由
本当のことを言うと、パターンを一つも知ることなく長年プログラマーとして働くことだって可能かもしれません。多くの人がそうしてます。しかしその場合でも、実はそうと知らずにいくつかのパターンを実装しているかもしれません。では、なぜそれを学ぶのに時間を費やすべきなのでしょうか？

### ライブラリやAPIを把握できる
デザインパターンを学習すること、イコール私達学習者が設計に組み込むものと考えがちですが、
実はもう既にライブラリに組み込まれていて、私達が開発をする必要はないことが往々にしてあります。

例えば、JavaScriptとHTMLのデータを双方向にバインディングすることができるknockoutjsというライブラリは、Obserberパターンによって実装されています。
また、Javaを扱う人であれば誰もが使ったことのあるBufferdReaderクラスはデコレーターパターンです。

これらのライブラリやクラスを扱う際に、デザインパターンを知っていれば、使い方の説明を読まなくてもある程度把握できますし、ライブラリの学習コストを下げることができます。
内部設計がある程度見えていれば、機能の拡張も可能になります。

デザインパターンによる共通認識は使う側にとっても非常にメリットのあるものです。

### 車輪の再発明をしない
デザインパターンは、達人にしか思いつかないものではなく、全てのエンジニアがやがて辿り着く設計思想であり、実証済み、テスト済み解決策の道具箱です。

一生懸命考えて設計をしたものは、もう既にパターンとして定義されている可能性は高いのです。
また、それは既存のライブラリや、言語に組み込まれている可能性もあるということでもあります。
長い時間考えたコードや設計がもうすでにデザインパターンにあったとしたら、
時間と労力のムダになってしまいます。

「デザインパターンはわざわざ学習するものではない。誰でも思いつく。」と言う意見がありますが、
誰でもが思いつけるものを再発明することは避けましょう。

### デザインパターンはコミュニケーションツール
デザインパターンは、チーム内でより効率的にコミュニケーションを取るための共通言語を定義します。 ​「ああ、それには、シングルトンを使って」と言えば、皆があなたの提案の背後にある考えを理解することができます。パターンと名前を知っていれば、シングルトンとは何かの説明は不要となります。

# パターンの分類
デザインパターンは大きく分けて3つの分類があります。
- **生成に関するパターン**は、 柔軟性を増し、 コードの再利用を促すようなオブジェクト生成の仕組みを提供します。

- **構造に関するパターン**は、 構造の柔軟性と効率を維持しつつ、 オブジェクトとクラスを大きな構造に束ねる方法を説明します。

- **振る舞いに関するパターン**は、 アルゴリズムやオブジェクト間の責任の分担に関するものです。

# デザインパターンは時代遅れ？
「**デザインパターンはもう見なくなった**」「**実際に使っているのは23のうち5つくらい**」...時にこのような言葉を耳にします。

確かにモダンなプログラミング言語やフレームワークでは、デザインパターンの多くが言語機能やライブラリで自然にサポートされるようになっています。

例えば、関数型プログラミングやリアクティブプログラミングの普及により、従来のオブジェクト指向デザインパターンが直接的に適用される場面が減ってきています。

デザインパターンに対する批判には一理ありますが、それが時代遅れであるという主張は必ずしも正確ではありません。

デザインパターンは、オブジェクト指向プログラミングの本質を理解し、質の高いソフトウェアを構築するための強力なツールです。

デザインパターンとは設計ノウハウを集めて、使いやすいような部品として名前をつけてカタログ化したものです。上手く使えば、飛躍的に開発を楽に、かつ保守性の向上も期待できます。上手く使っていきましょう！
【小ネタ】psコマンドをgrepするときにgrep自身がマッチしないようにする

Linux上で、あるプロセスが動いているかどうかをpsコマンドとgrepコマンドを使ってチェックするときに、下のように普通にgrepすると、grepコマンド自身もマッチしてしまう

```
# grep example自身もマッチしてしまう例
$ ps -ef | grep example
```

次のようにgrepにgrep -vをパイプで重ねて繋ぐと、grep自身のプロセスを除外できるが、いまひとつイケてない

```
# 目的は果たせるが冗長 悪くはない
$ ps -ef | grep example | grep -v grep
```

下のように、正規表現のトリックを使うことで、grepコマンド自身をマッチしないようにすることができる

```
# 簡潔なやり方
$ ps -ef | grep e[x]ample
```
学生必見！プログラミングで見る英単語！

# 英単語を楽しもう

悲しいかな高校生にとって英語の勉強は逃れられません...
しかしプログラムを勉強する上でも英語は必要不可欠です。
例えばドキュメントを読んだりOSSにコントリビュートするにしても英語は使います。

文法なども覚えなければなりませんが、単語がわからないと辛いですよね。
今回はプログラム関係で出てくる英単語を例文とともに紹介します。

さらに高校生だけでなく社会人の皆様にも楽しんでいただけたら幸いです。

# 注意事項

取り上げた単語の意味はあくまでプログラム関係でよく使われると思われるものの一つです。
基本的に単語は複数の意味を持つので、厳密さを求める方は辞書を参照してください。
例文も私が考えたものなのでミスがある可能性があります。その際はご指摘をお願いします！

# 本編

## allow

- 許可する

```
Do you allow this user to write this file?
このユーザーにこのファイルを書き込むことを許可しますか？
```
設定関係でよく見るイメージ。絶対押さえなきゃだめ。

## require

- 必要とする

```
This program requires a lot of memory.
このプログラムは多くのメモリが必要です。
```
Dartで見たことがあったので取り上げました。

## describe

- 説明する

```
Can you describe the problem in detail?
問題を詳しく説明してもらえますか？
```
k8sのコマンドで見た。これも頻出。

## relate

- 関連づける

```
This DB table is related to user table.
この(データベースの)テーブルはユーザーテーブルに関連しています。
```
関係データベース(リレーショナル・データベース)のやつ。情報IでもIPAでも出る。

## compare

- 比較する

```
We compared the performance of two programs.
私たちは2つのプログラムの性能を比較しました。
```
Gitとかで見る。差分見るの便利～。

## environment

- 環境

```
You need to set up the development environment.
開発環境を整える必要があります。
```
環境変数とか本番環境とか見ない日はない。

## practice

- 練習
- 習慣 (今回はこっち)

```
You should follow AWS best practices.
AWSのベストプラクティスに従うべきです。
```
ベストプラクティスはのプラクティスは練習じゃないよ！

## issue

- 問題

```
You should report this issue to the repository owner.
この問題をリポジトリのオーナーに報告すべきです。
```
GitHubでよく見る。issue立てるの大事。

## project

- プロジェクト

```
This project is a web application.
このプロジェクトはWebアプリケーションです。
```
プロジェクトマネジメントって難しい...

## role

- 役割

```
Please make a role in IAM.
IAMで役割を作成してください。
```
AWSのIAMで見る。最小の権限をもたせよう。

## major

- 主要な

```
This is a major update.
これはメジャーアップデートです。
```
新機能とかワクワクするよね！(ただし業務で組み込む場合を除く)

## available

- 利用可能な

```
This feature is available in the latest version.
この機能は最新バージョンで利用可能です。
```
可用性(availability)とかでも見る。冗長性は大事。

## perform

- 実行する

```
This program performs well on this machine.
このプログラムはこのマシンでよく実行されます。
```
パフォーマンスとかよく言うよね。

## apply

- 適用する

```
Do you apply this setting?
この設定を適用しますか？
```
設定画面で見る～

## mention

- 言及する

```
Discord has a feature to mention someone.
Discordには誰かをメンションする機能があります。
```
SlackとかDiscordとかでよく見る。メンションはよく使われる言葉になってきた。

## contain

- 含む

```
You need check whether this list contains this item.
このリストがこのアイテムを含んでいるか確認する必要があります。
```
リストとか配列とかでよく見る。どのプログラミング言語でもあるんじゃないかな？

## search

- 検索する

```
These days, we search information with Chat-GPT.
最近ではChat-GPTで情報を検索します。
```
データベースの検索とかでも。よく見る。

## publish

- 公開する

```
This article is published on Qiita.
この記事はQiitaに公開されています。
```
ゲーム業界だとパブリッシャーって言葉があるよね。

## task

- 仕事

```
This task is assigned to you.
この仕事はあなたに割り当てられています。
```
タスク管理ツールでよく見る。タスクは細かく分割しよう。

## policy

- ポリシー

```
This policy is applied to all users.
このポリシーはすべてのユーザーに適用されます。
```
GooglePlayとかAppStoreに出すときに見るはず。

# おわりに

いかがでしたでしょうか？
今回は第一回ということで、基本的な単語を取り上げました。
プログラムを勉強することで、英単語帳を読んでいるときに「あ、これプログラムでよく見るやつだ！」と楽しめるようになるはずです。
私も高校生であるので一緒に頑張りましょう！
Pythonで自作ライブラリを作る最小構成

## Introduction
いろんなタイミングで使う処理を毎度書くのは面倒。
まとめて自作ライブラリにしてしまえばimportしてくるだけで使えて便利ですよね。
でも自作ライブラリにすると言ってもどうやったら？
ということで、自作ライブラリを作る時の最小構成をまとめます。
PyPIへの登録は他の人に譲って、あくまでローカルで自分だけが使うライブラリの話です。
実際に私が作って使ってる[自作ライブラリ(Github)](https://github.com/ClairdelunaEve/Python-BriefFunction)

## 結論
必要なことは2つ
1. ファイル構成を画像のようにする
![ファイル構成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/454084/c1f477d9-feb8-3863-7480-98bd78c277f4.png)
1. pyproject.tomlを用意する

## ファイル構成
基本的に
* ライブラリにしたい処理の書かれたpythonファイル、読み込むための__init__.pyが入ったフォルダ
* pyproject.toml
があればOKです。

## それぞれのファイルの中身
### __init__.py
ライブラリとして読み込んできたいファイルを全部importする。
```python:__init__.py
from BriefFunction.briefFunction import *
```

### pyproject.toml
```toml:pyproject.toml
[project]
name = "ライブラリ名"
version = '1.0.0'
authors = [  { name="開発者の名前" },]
description = "ざっくりした説明"
license = {text = "3-Clause BSD License"}
# 必要なPythonのバージョン
requires-python = ">=3.10"
```
以上。
ネットワークエンジニア基礎入門動画を見たまとめ

参考

https://www.youtube.com/watch?v=aYbUDGn61cU&list=PLXXalsdlzX-J7AUuw2zSHit5nRUZ3eDdz&index=1

# コンピューターネットワークのメリット
①データ共有
②リソースの共有
プリンター一台あればどこからでもアクセスできる
③情報の送受信
地理的に離れていても情報の交換ができる

全てのネットワークはLANとWANに別れている。
LAN（Local Area Network）・・・敷地内などの狭い範囲のネットワーク
WAN（Wide Area Network）・・・地理的に離れたLANとLANを結びつけることで構築する広い範囲のネットワーク。電気通信事業者（キャリア）がサービスを提供

# インターネット
WANの一種
LANを世界規模で繋いだもの。インターネットはプロバイダ（ISP）と呼ばれる通信事業者を介して構築される世界規模のネットワーク。世界中のネットワークをTCP/IPという技術で作られている。

## インターネットの仲間
・イントラネット
限定されたユーザー間でのネットワーク。社内ネットワーク。
・エクストラネット
イントラネットとイントラネットをつなげたもの。関連会社にも情報を公開したいときに便利。

# サーバーとクライアント
Google
検索結果を出すためのソフトウェアをアプリケーションという。
自身が保有するアプリケーションのサービスを他に提供するコンピュータをサーバーという。
サーバーを利用するコンピュータをクライアントという。
ネットワークを利用したアプリケーションをネットワークユーザアプリケーションという。

# ネットワークユーザアプリケーション
①バッチ
ユーザの実行やあらかじめ設定されたタイミングで自動実行＆終了するもの
更新プログラム（ボタンを押すと勝手に起動する）
②インタラクティブ
クライアント⇄サーバーでデータ通信が発生するもの
ネットサーフィンで見るやつは大体インタラクティブ
③リアルタイム
クライアント⇄クライアントでデータ通信が発生するもの
LINEのビデオチャット

# データが送られる仕組み
コンピュータはどんな情報でも２進数（0,1）で情報を表現している。

ユーザー
①「好き」を贈る
↓②バイナリデータ（2進数）

↓③電気信号

↓④バイナリデータ
⑤「好き」に文字変換

・符号化（エンコード）
コンピュータに理解できない情報を２進数データに変換する

・複合化（デコード）
コンピュータに理解できる情報を人間に理解できる情報に再変換すること。

・文字コード
世に存在するさまざまな文字に対して１つずつ対応する番号をつけたもの
EUC,Shift_JIS,Unicodeなど。同じ文字でも番号が違う。
文字化けの原因は例として送信側がEUCを使って受信側がShift_JISを使っていたので複合化に失敗してしまうのが原因。

## バイナリデータを送信する際
０＝電気OFF
１＝電気ON
に見立てた電気信号へと変換される。


# 帯域幅
一秒間にどれだけの情報を贈ることができるかの幅。
帯域幅が広い→通信速度が速い
1秒間に何bit贈ることができるかを表すのがbps

# 通信障害
輻輳（ふくそう）・・・大量データ通信などが原因でネットワークが混雑し、データ通信が困難になる。
ジッタ・・・信号は想定より早くor遅く宛先に到着することがある。これをジッタという。ジッタはデータの変質・劣化を引き起こし、音声や映像の乱れなどを引き起こす。

# ノードとリンク
ノード・・・ネットワークにおける機械端末。
リンク・・・ノードとノードを繋いでいる通り道。

# トポロジ
トポロジはノードの繋ぎ方のこと。
## バス型トポロジ
バスと呼ばれる一本の同軸ケーブルに複数のノードを接続するトポロジ。
バスの終端には電気信号の反射によるノイズを防ぐターミネータ（終端抵抗）が取り付けられている。
一箇所でも断線すると全体が機能しなくなり、拡張性も低い。値段は安い。現在は使われていない。

## スター型トポロジ
一つの集線装置（ハブ）を中心にノードを接続するトポロジ。
扱いやすく耐障害や拡張性に優れているため、現在のLAN構築で最も一般的に使用されるトポロジ。大量のノードに対応するためハブ同士を接続してスター型トポロジを拡張させることがあり、これを拡張スター型トポロジという。

## リング型トポロジ
ノード同士を輪のように繋げたトポロジ。トークンという信号が周回しており、これを受け取ったノードのみがデータ送信可能になる。順番に送信していくためトポロジ内でデータの衝突がない。

## メッシュ型トポロジ
複数のノードを網目状に接続するトポロジ。全ノードを繋ぐものをフルメッシュ、重要なノードに絞ったものをパーシャルメッシュ。
コストはかかるが高い冗長性（問題が起きても他でカバーできる状態）を持ったトポロジ。

# 通信の種類
ノードからノードにデータを送る方法
①ユニキャスト
ノードからノードに送る方法。
②ブロードキャスト
送ることのできるノードに対して全員に一斉に送る。
③マルチキャスト
複数のノードに対してグループ化を行い、あるキャストからグループに送りたい時に使う。
JavaScriptのアロー関数について


# アロー関数とは？

アロー関数は、簡潔な記法で関数を定義できる新しい方法です。普通の関数とは異なり、アロー関数はthisの扱いが変わってきます。

## アロー関数の書き方

普通のJavaScriptの関数は以下のように記載します。

```javascript
function add(a, b) {
  return a + b;
}
```

アロー関数に関しては以下のように記載します。

```javascript
const add = (a, b) => {
  return a + b;
};
```

もっと短く再することも可能です。

```javascript
const add = (a, b) => a + b;
```

## 配列の値を2倍するサンプルプログラム

```javascript
let numbers = [1, 2, 3];
let doubled = numbers.map(n => n * 2);
console.log(doubled); // [2, 4, 6]
```

numberの配列を、maps関数の引数でアロー関数を使い2倍の処理をして、n変数にいれる形になります。

### イベントハンドラでも使うことができます

```javascript
document.getElementById("myButton").addEventListener("click", () => {
  console.log("Button clicked!");
});
```

##  まとめ

- アロー関数は短く書けます。
- **this**の扱いがシンプルです。
- 無名関数やコールバック関数で使うと便利になります。
スクラム開発導入における参考リンク集


お堅いところはIPA
https://www.ipa.go.jp/digital/hjuojm000000gwoo-att/000065606.pdf


https://qiita.com/thiroi/items/9bbd43fbad79d3c7b31c

https://qiita.com/nakanishing/items/cda79a486276ba0325cf

https://qiita.com/okamok/items/7e9af3073e962f5094da

https://qiita.com/shima-d/items/88b76b4f4b3aba6bbca4

https://qiita.com/yousan/items/e8d36249070ed6010dec
WWDC24旅行記 ~準備編~

### はじめに

渡米にあたって準備に不安があったので、前もって準備を進めたお陰でトラブルもなく現地で過ごすことができました。今回はWWDC参加にあたって必要な準備について紹介したいと思います。

### モバイル通信

現地での連絡手段としてモバイルは必須です。自分は eSIM を利用するため、[Airalo](https://www.airalo.com/ja/united-states-esim) を利用しました。アプリ上でパッケージを購入して利用することができます。

<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299135/2efeb0c0-9cef-f8cc-3bdf-4a840540dd2b.jpeg">

自分は 10GB を購入しましたが、5GB でも十分でした。必要に応じて追加購入するのがコスト的にオススメです。

iPhone を利用していますが、アクティベートには時間が掛かるので、eSIM のダウンロードは出国の前日位に行い eSIM の設定でトグルをオフにして、現地入りしたらオンにすると良いと思います。

### Uber

現地での移動手段で Uber は必須です。アカウントを持っていない場合、アカウント作成してすぐに利用できるようにしましょう。ユーザ名をニックネームにしておき、ドライバーも理解しやすいようになっているとコミュニケーションもスムーズです。

空港では配車の混雑が予想されるので、事前配車予約するとスムーズに乗車することができます。ただし、予約料が別途必要になるので注意しましょう。

### 気候対策

#### 防寒対策

6月のサンノゼでは、朝晩はかなり冷えます。薄手のパーカーなどの上着は必須です。また、室内のエアコンも強めなので、外出時には必ず持って行くことをオススメします。

![IMG_1610.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299135/dc67eb25-9e29-0c49-8acf-e87a7a16accd.jpeg)

#### 日焼け対策

Apple Park はかなり日差しが強く、日焼け対策も十分に行う必要があるので、帽子や日焼けは必須です。日焼け止めはこまめに塗り直すと良いと思います。それでも自分はかなり日焼けしました。

![IMG_1728.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299135/a98a6ad7-7f99-01c2-c93b-9333031df9e7.jpeg)

この時期のサンノゼは一年でも昼が一番長い時期で、夜は 20:00 過ぎでも明るかったです。

### AirTag

カンファレンス中は席をキープしたりする関係で手荷物が手薄になるケースもあります。

![IMG_1736.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2299135/dc4a0e36-3371-050a-6530-4caf503cfd0f.jpeg)

手荷物に AirTag を入れておくと何かあった時も安心かと思います。スーツケースはホテルに置いておくと思うので、そこにも入れておくと良いでしょう。2〜3 個用意しておくと安心かと思います。

### 現金

現金をいくら持って行くか迷いましたが、結果あまり必要ありませんでした。最低ホテルでのチップくらい用意するだけで何とかなりますので、1$ 札を多めに両替すれば良いでしょう。基本的な支払いは Apple Pay かクレジットカードがあれば可能です。

### まとめ

今回は準備にあたって必要なことをまとめてみました。では、引き続き WWDC24 のレポートして行きたいと思います！
TerraformでAWSリソースを作成(EC2編)

## はじめに
Terraformを使ってAWSリソース(EC2)を作成する手順について、Terraform初学者の自分用のメモを兼ねて記載しておきます。
今回は以下の記事に続きEC2を構築します。
そのためここではVPCが既に構築されている前提で記事を書いています。

https://qiita.com/tomoya0117/items/15960678222cfa641854



## 前提
・windows環境であること
・Terraformが端末にインストールされていること
・AWS CLIが端末にインストールされていること
・AWSのアカウント(アクセスキーとシークレットアクセスキー)があること
・TerraformでVPCなどが構築済みであること
・EC2はPrivate subnetに作成
・EC2のOSはAmazon Linux 2023を使用
・インバウンドの通信はssh(ポート22)のみ許可、アウトバウンドはすべて許可のセキュリティグループ(sg)を作成


## アーキテクチャ図
![ec2-矢印.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3677761/7f5a8f7b-eac6-c890-a752-80725c574a53.png)

## やること
1.tfファイルの作成
2.Terraformでリソースの作成
3.AWSリソースの確認

## 1.tfファイルの作成
セキュリティグループとEC2を作成するコードになります。
ファイル名は「ec2.tf」とします
以下のように設定していきます。
 ```ec2.tf
# ---------------------------
# Security Group
# ---------------------------
# Security Group作成
resource "aws_security_group" "test_ec2_sg" {
  name              = "terraform-test-ec2-sg"
  description       = "For EC2 Linux"
  vpc_id            = aws_vpc.test_vpc.id
  tags = {
    Name = "terraform-test_ec2_sg"
  }

  # インバウンドルール
  ingress {
    from_port   = 22
    to_port     = 22
    protocol    = "tcp"
    cidr_blocks = ["0.0.0.0/0"]
  }

  # アウトバウンドルール
  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}
# ---------------------------
# EC2
# ---------------------------
# Amazon Linux 2023 の最新版AMIを取得
data "aws_ssm_parameter" "amzn_linux_2023_latest_ami" {
  name = "/aws/service/ami-amazon-linux-latest/al2023-ami-kernel-default-x86_64"
}

# EC2作成
resource "aws_instance" "test_ec2"{
  ami                         = data.aws_ssm_parameter.amzn_linux_2023_latest_ami.value
  instance_type               = "t3.nano"
  availability_zone           = "${var.az_a}"
  vpc_security_group_ids      = [aws_security_group.test_ec2_sg.id]
  subnet_id                   = aws_subnet.test_private_subnet10d_sn.id
  tags = {
    Name = "terraform-ec2"
  }
}

```

## 2.Terraformでリソースの作成
vpc偏でも記載していますが以下の手順でリソースを作成していきます。
tfファイルがあるディレクトリに移動して、以下のコマンドを入力していきます。

①ワークスペースの初期化
　**terraform init**
「Terraform has been successfully initialized!」が表示されればOKです。
②tfファイルの構文チェック
　**terraform validate**
 「Success!」が表示されればOKです。
 ※構文にエラーがあればエラー個所が表示されます。
 
③実行計画を作成
　**terraform plan**
作成されるリソースを確認することができます。

④リソースを作成
　**terraform apply**
 Enter a valueと出てくるので「yes」と入力するとAWSリソースが作成されます。
 ```
  Enter a value: yes
  ```

## 3.AWSリソースの確認
 作成したリソースを確認
　**terraform show**
AWSのマネジメントコンソールでも正しく作成できているか確認します。
今回はプライベートサブネットのアドレス(192.168.10.0/24のセグメント)を持ったEC2と、セキュリティグループが作成できていれば完成となります。

また、以下はterraformでのAWSリソースの削除方法になります。

削除対象のリソースを確認
　**terraform plan -destroy**

作成したリソースを削除
　**terraform destroy**

リソースを確認
　**terraform show**
Terraformで作成したリソースが消えていれば完了です。

## まとめ
次回はterraformを使ったリソース作成の記事を作成したいと思います。
【ぜ～んぶ無料！】React/Next.jsの最強教材たちを紹介するぜ

# はじめに
今回は特に説明などはないのですが、めっちゃくちゃわかりやすくしかもすべて無料で利用できますので、是非、共有したいなと思って書きました。

初学者の頃はどうしても英語のドキュメントを読むのが苦手だと思いますので、是非、活用して欲しい教材たちです。

# その1 Next.jsの公式ドキュメント日本語版
メチャクチャわかりやすいから共有したい。
こちらはNextの基礎となるApp Routerの仕組みを解説しながら、Reactの最新機能を使ってアプリケーションを構築するための新しい方法が学べます。Pagesルーターに慣れてしまってApp Router慣れないという方は必見です。

https://ja.next-community-docs.dev/docs/app-router

# その2 基礎から学ぶNext.js by 日本Oracle社
こちら日本オラクル株式会社からでている教材です。
Reactの学習から記載されているので、こちらも是非活用して欲しいやつですね。

https://speakerdeck.com/oracle4engineer/ochacafe-nextjs-basics 

# その3 React研修 by Recruit社
こちらはRecruit社が公開している無料のReact研修教材です。
本格的なハンズオンはありませんが、「Reactの考え方」、「状態や作用を扱う基本的なAPI、Hooks」などの使い方が学べます。

https://speakerdeck.com/recruitengineers/react-2023




React学び終わったら次はこれをとっかかりにやったらメチャクチャ理解度深まるし、3～4週もすれば個人開発のスキルセットにも組み込んでいけるのではないかというレベルになると思います。

また、Reactについては以前も紹介したこちらをやるといいと思います。
https://ja.react.dev/
![スクリーンショット 2024-05-27 7.46.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3492127/764e3325-b21f-c076-583a-d44d00ac5847.png)


# 各教材のやり方(参考程度)

## 1. コードリーディング。
まず1周目は普通に読んでいき理解の確認をしていきます。
この時に、自分の理解度が浅い所は何かしらチェックしておくなり、notionにメモしておくなりしておきましょう。30分くらい考えたりしてもわからない場合はとばしてどんどん次に進んでください。

## 2. 分からなかったところの理解
1周目は理解できていたところは飛ばして、わからなかったところだけ時間をかけて調べるなりGPT先生と会話して2週目をおわらせましょう

## 3. ハンズオン
この時Github上でリポジトリを作成してcommitしながらやっていきましょう。

## 4. オリジナルのプロジェクト作成
まずは簡単なアプリからつくって、そこからどんどん機能を拡張していきましょう。
また、Udemyなんかでもいいと思います。

ドキュメントでNext.jsの概念や基本を理解した上でオンラインの教材を実施するとかなり理解力が上がるので、どんどん手を動かしていってください:muscle:

# おわりに
React/Next.jsは腐ってもJavaScriptなのでこれらのドキュメントやチュートリアルをやるうえで、JSの知識が足りないと感じた方はこちらの記事のメソッドや記法などを是非もう一度確認してみてください:writing_hand_tone2:

https://qiita.com/Dragon1208/items/a14d0cdcc70f60934659
【AWS】2024 Japan AWS Jr. Championsに選出されました

# はじめに
このたび、2024 Japan AWS Jr. Champions（以降、Jr. Champions）に選出していただきました。本ブログを通して**Jr. Championsの紹介**、**なぜ応募したか**、**今後の抱負**について書きたいと思います。
# 自己紹介
2021年に新卒入社、今年で4年目になります。
公共部門の技術集約組織におけるクラウドチームに配属されたことがAWSを学び始めたきっかけです。入社以来、公共部門システムに対するクラウド導入支援やクラウド人財育成などの施策活動に携わっています。
> クラウドまわりの政府動向をブログにまとめてみたので、ぜひご覧ください。
参考[【2023年度版】クラウドまわりの政府動向をまとめてみた](https://qiita.com/heiyoo/items/b3c5de2c964fbe4228bb)


# Jr. Championsとは？
ざっくり説明：今後活躍してくれそうな若手AWSエンジニアを表彰する制度。

**AWS Partner Network (APN) 参加企業に所属**し、**社会人歴1-3年目で突出した AWS 活動実績がある若手エンジニア**を「Japan AWS Jr. Champions」として表彰する制度。**応募年の3月末時点で3年目以下**であれば応募可能。2023年に初代Jr. Championsとして82名の若手エンジニアが選出されています。
> 参考：[2024 Japan AWS Jr. Champions の発表](https://aws.amazon.com/jp/blogs/psa/2024-japan-aws-jr-champions/)


# 応募したきっかけ
以下の2点が主なきっかけです。
## 1. 社内のTop Engineerの影響
コロナ渦入社であったため、業務におけるコミュニケーションはオンライン前提でした。限られた情報源をベースにスキルアップする必要がある制約があったため、オンラインで吸収できることは吸収しきろうしていました。結果として、社内のTop Engineer達のアウトプット/インプットする習慣を、自分なりの形として習慣化することができました。

自分もより高いレベルでプロとして仕事をしていきたいと思い、まずJr. Championsだ！と思い応募しました。
> 余談ですが、マネージャーも部署も違う諸先輩方に相談するチャンスもオンライン前提でなければ難しかったなと思います。

## 2. オフラインイベント参加の影響
徐々にオフラインイベントが復活しはじめた2023年から、積極的に社外イベントに参加しはじめました。特段目的意識もなく、興味が湧くものや業務に役立つネタがあればいいなと思い参加していました。

参加する中で、登壇者/運営者/参加者の熱を感じ、自分もJr. Championsとして社外向けに何かしら活動してみたいなと考え始めました。
> 参考：[【参加レポート】JAWS DAYS2024に初参戦！](https://qiita.com/heiyoo/items/a2d72eb5f89d29d53974#%E3%81%AA%E3%81%9C%E5%8F%82%E5%8A%A0%E3%81%97%E3%81%9F%E3%81%AE%E3%81%8B)


> この2点の他に、格闘技元世界王者の方に受けたアドバイスに背中おされたエピソードもありますが、話が長くなってしまうので割愛します。興味がある方はオフラインでお会いした機会でぜひ聞いてください。

# 今後の抱負
公共部門のクラウドビジネスに役に立つ、意味のあるアウトプットを積極的に行っていこうと思っています。公開情報ベースで、自身の経験や学びを抽象化し、社内外へノウハウとして発信していきます。

そのためには日々成長し続ける必要があると考えているので、Jr. Championsを1つのきっかけとして、たんたんと挑戦していこうと思います。