OmniAICreator/Qiita-1.07M huggingface dataset:
Windows11にReact環境を構築する

# 環境
Windows 11
VSCode

# Voltaインストール

まず、Node.jsのバージョン管理ツールVoltaをインストールします。

Voltaの公式サイトからWindowsのインストーラをダウンロードします。
https://volta.sh/

ダウンロードページに「Voltaの機能はシンボリックリンクの作成に依存しているため、開発者モードを有効にする（推奨）か、権限昇格してVoltaを実行してください（非推奨）」という旨の注記があったので、次の手順で開発者モードをオンにします。

Windowsのスタートメニューから「設定」-「プライバシーとセキュリティ」-「開発者向け」を開き、「開発者モード」をオンに変更。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/461268/314412fd-5263-77bf-066c-5967f1003ef9.png)

先ほどダウンロードしたインストーラを実行します。
基本的に「次へ」で先に進めていくだけです。

これでVoltaのインストールは完了です。

試しにコマンドプロンプトからバージョン確認のコマンドを実行してみます。

```
> volta -v
1.0.8
```

ちゃんとバージョン番号が表示されました。


# Node.jsをインストールする

VoltaでNode.jsをインストールします。
バージョンを指定しないと最新のLTSバージョンがインストールされます。

```
> volta install node
success: installed and set node@16.16.0 (with npm@8.11.0) as default
```


# npmをインストールする

Voltaでnpmをインストールします。

```
> volta install npm
success: installed and set npm@8.14.0 as default
```

# Voltaのインストール状況を確認する

`volta list all`でインストール状況、現在のノードバージョンを確認できます。

```
> volta list all
⚡️ User toolchain:

    Node runtimes:
        v16.16.0 (default)

    Package managers:
        npm:
            v8.14.0 (default)

    Packages:


```

# Reactプロジェクトを作成する。

Reactプロジェクトを作成するワークフォルダをVSCodeで開きます。

メニューの[ターミナル]-[新しいターミナル]で新しいターミナルを開きます。
ここではPowerShellでターミナルを開いてます。

下記コマンドを実行します。
```
npx create-react-app <Reactプロジェクト名>
```

ワークフォルダにReactプロジェクト名のフォルダが作成されます。

Reactプロジェクトを起動して動作確認をします。

```
cd <Reactプロジェクト名>
npm start --open
```

ブラウザで「http://localhost:3000 」が開かれて、Reactロゴが回転している画面が表示されていればOKです。
C#でIoTプログラミング on ESP32 #8 - フォトレジスタ

今回はフォトレジスタのサンプルプログラムです。
フォトレジスタは明るさで抵抗値が変化する電子パーツです。暗くなると点灯するライトなどに使用されています。
CdSセルと呼ばれるタイプを使用します。

## ハードウェア
・Freenove ESP32-S3-WROOM Board or Espressif ESP32-S3-DevKitC
・フォトレジスタ
・ブレッドボード
・10kΩ レジスタ
・ジャンパーワイヤ

## 配線
![Photoresistor.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/62606/1e9b6ac6-6413-4b07-81bd-4e39314c11a9.png)

## 導入パッケージ
・nanoFramework.System.Device.Gpio
・nanoFramework.System.Device.Adc

## プログラミング

・新規プロジェクトを作成します。プロジェクト名は「ESP32S3_Photoresistor」としました。

・コードを入力する前にパッケージは導入してください。

・コードは次のようになります。
```C#:Program.cs
using System.Device.Adc;
using System.Device.Gpio;
using System.Diagnostics;
using System.Threading;

namespace ESP32S3_Photoresistor
{
    public class Program
    {
        private static GpioPin led;
        
        public static void Main()
        {
            AdcController adcController = new AdcController();
            // ADC1_0を使用する
            AdcChannel adcChannel = adcController.OpenChannel(0);

            GpioController gpioController = new GpioController();
            led = gpioController.OpenPin(2, PinMode.Output);
            led.Write(PinValue.Low);

            while (true)
            {
                int value = adcChannel.ReadValue();
                Debug.WriteLine("value = " + value.ToString());

                //CdSセルは暗くなると数値が大きくなります。暗くなるとオンボードLEDを点灯させます。
                if (value > 3000)
                {
                    led.Write(PinValue.High);
                }
                else
                {
                    led.Write(PinValue.Low);
                }
                    Thread.Sleep(100);
            }
        }
    }
}
```

プログラムを実行してみてください。CdSセルを手で隠すとオンボードLEDが点灯するのを確認できます。
Linux : mvコマンド

# mvコマンドについて

今回は、linuxコマンドにあるmvコマンドを紹介します。
mvコマンドは、以下の処理に対応しています。

1. ファイルやフォルダーの名称変更
1. ファイルやフォルダーの移動


## ファイル名やフォルダー名の変更
コマンドは、次のようになる。
```bash
$ mv 変更前の名称 変更後の名称
```

<br>

例：ファイル名test01.txtをtest03.txtに変更する場合のコマンド
```bash
$ mv test01.txt test03.txt
```

```bash
# 実際に実行した場合
$ ls # 現在のディレクトリにあるファイルやフォルダーを表示する
test01.txt
$ mv test01.txt test03.txt
$ ls
test03.txt
```
test01.txtからtest03.txtに名称を変更していることが確認できました。


<br>
同様にフォルダー名の場合もやってみます。

例：hoge01のフォルダー名をhoge05に変更す場合のコマンド
```bash
$ mv hoge01/ hoge05/
```

```bash
# 実際に実行した場合
$ ls # 現在のディレクトリにあるファイルやフォルダーを表示する
hoge01
$ mv hoge01/ hoge05/
$ ls
hoge05
```
hoge01からhoge05に名称を変更できていることが確認できました。

このようにmvコマンドは、名称を変更する際に使用することができます。

<br>

### ファイルやフォルダーの移動
コマンドは、次のようになる。
```bash
$ mv 移動させるファイル名やフォルダー名 移動先
```

<br>

例：test.txtをフォルダーhogeに移動する場合のコマンド
```bash
$ mv test.txt hoge/
```

```bash
# 実際に実行した場合
$ ls # 現在のディレクトリにあるファイルやフォルダーを表示する
hoge  test.txt
$ mv test.txt hoge/
$ ls
hoge
$ cd hoge # フォルダーhogeに移動
hoge$ ls
teset.txt
```

test.txtを無事にフォルダーhogeに移動できていますね。


## 最後に
今回は、mvコマンドについて紹介しました。
ファイル・フォルダーの名称変更や移動には、ぜひmvコマンドを使ってみてください。
Vue - RouteとRouter

# 値を取得する場合かRouterｋ

```a.vue
import {useRouter,useRoute} from 'vue-router';

const route = useRoute();
const router = useRouter();

//ページ遷移
router.push({name:'next-page'})
router.push({name:'next-page',query: {id: 1}})


//値取得
route.query.id

```
androidアプリを作ってみた

## androidアプリを作ってみた

今回1からandroidアプリの作成をしてみたので、実際に行った手順をまとめてみました

### アプリ公開までの手順
1. 開発環境の準備
2. アプリの基本設計
3. 開発
4. テスト
5. 公開準備
6. バージョンアップ（おまけ）

### 開発環境の準備
今回使うのは下記になります

・Android Studio

・言語：JAVA

:::note info
Android Studioは、Googleの公式IDEになります。
アプリ開発に必要な豊富な機能が備わっていたり、
最近の機能で行くと、AIアシスタント（Gemini）を利用した開発などが行えます
:::

#### Android Studioのセットアップ
* 公式サイトからダウンロード：https://developer.android.com/studio?hl=ja
* 今回はとりあえず初期設定のまま、インストールまで進めます
* 英語だと何もわかんないので、日本語パックをインストールします
1. help>aboutからAndroidStudioのバージョンを確認![スクリーンショット 2025-02-11 094414.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816638/de86b68d-af87-60fc-8baf-cf5331655b17.png)
1. [JetBrains](https://plugins.jetbrains.com/plugin/13964-japanese-language-pack------/versions)の公式サイトから対応するバージョンをダウンロード
1. 今回だと242最新バージョンを選択
![スクリーンショット 2025-02-11 094831.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816638/e7dce5a8-c65d-019c-dbf5-f7e03c2aa379.png)
1. ダウンロードしたzipを解凍し、「C:\Program Files\Android\Android Studio\plugins」に配置する
1. Android Studio の Settings > Plugins > 右上の歯車 > Install Plugin from Disk を選択する
![スクリーンショット 2025-02-11 095732.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816638/85185b84-8625-659a-b905-6ae457c2985a.png)
1. 先ほど配置したzipの中身の.jarファイルを選択し、OKを選択する
1. OKで設定画面を閉じると、右下に「Restart IDE」が出てきたので再起動して日本語化完了です

### アプリの基本設計
今回作るのは、「アプリ（主にゲーム）にログインしたかどうかをチェックしてくれる」アプリです！

スマホのゲームだと、連続ログインのようなシステムがあると思います
それを途切れさせないために、作っていこうと思います

#### 簡単な要件
* アプリごとに、チェックを行う時間の設定が可能
* インストール済みのアプリを一覧で確認可能
* アプリの一覧から任意のアプリを選択可能
* チェックした際に、ログインしていなかった場合通知を送る
* 10個まで設定可能


開発以降は別の記事でまとめます
メーカーからSESに転職した話【SESのメリット】

# はじめに
新卒から外資メーカーに勤務していたエンジニアが、3年目でSESに転職した話です。
技術的な話ではなく、働きづらさやキャリアに悩む方へ向けたSESという働き方の提案の記事になります。

# 転職の経緯
転職の経緯としては、当時勤務していたメーカーの残業時間が60時間を超える事があり、また実機でのテストなどもあった為出社が義務付けられており、働くことが心底辛いと感じていました。上司を見ても、過酷な勤務による疲労の蓄積でとても健康には見えない様子で、「20年後に同じようにはなりたくない」と強く感じました。

そこから働くことへの忌避感が強まり、2020年の米国株バブルに乗る形でNISAや投資を始め、いわゆるFIREを目指すようになりました。
その一方で、この生活を25年ほど続けてFIREして独身生活を送ることが出来たとして、その生き方は果たして最前の選択肢なのかという疑念もありました。

結局、3年目に振替なしの休日出勤が増えたことで耐えられなくなり転職を決意しました。

# 転職活動について

・月残業20時間未満
・リモートあり
・当時の年収以上(450万円)

上記を条件としながら転職活動をして、それらが叶うSES企業に転職しました。
現在は社会人5年目になりますが、フルリモート勤務、多くても月稼働180時間(≒月残業20時間)、年収600万円弱という条件で働けており、概ね満足しています。

# SESのメリットとデメリット

SESとして働くことのメリットには、
①給与が高い
②現場に相性の合わない方がいた場合でも案件を変えることでリセット出来る
③リモートで働くことが出来る
④稼働時間が高くならないよう会社が調整してくれる
⑤様々な技術に案件を通して触れることが出来、成長が停滞しづらい
などがあります。

特に④の「稼働時間が高くならないよう会社が調整してくれる」点は、長時間労働に悩まされがちなエンジニアにとって大きなメリットです。
但し、この上限時間はSES企業によっては無かったり、あっても上限時間を超過して働かせようとする客先に対して強く訴えることが出来ず守られない場合もあるので、優良SES企業に勤務することが前提となります(優良SES企業の特徴については別記事参照)。

デメリットについては、以下が挙げられます。
①クラッシャータイプのPM・PLがいる案件を引き、メンタルをやられることがある
②案件が終わる度に新しい現場に慣れなくてはならない
③案件によっては年齢制限があり、50代以降参画出来る案件が減り、仕事を選べなくなる可能性があること

# SESのデメリットへの対策
①の「ラッシャータイプのPM・PLがいる案件を引き、メンタルをやられることがある」に関してはSIerやメーカーに勤務していても一定割合で遭遇する問題ではあり、SESでは案件を変えることでリセットできるのであまり気にする必要はないかと思います。

②の「案件が終わる度に新しい現場に慣れなくてはならない」に関しては、確かに案件ごとに現場のやり方を覚える面倒はあるものの、人間関係が固定されないことの気楽さも一方では感じられています。

③の「案件によっては年齢制限があり、50代以降参画出来る案件が減り、仕事を選べなくなる可能性があること」が最も大きなリスクになるので、いくつか視点で出口戦略を考えました。

1.自社で受託開発も行っているSES企業であれば、50歳までにマネジメントの経験を積み、自社案件でマネジメント系の仕事ができるようキャリアを築く。
2.50歳までに資産形成を行い、セミリタイアや別のキャリアを開拓する。
3.労働人口が減っていく日本でエンジニアの売り手市場が続き、50代エンジニアの需要が増えることに期待する。

# まとめ
以上私のSESへの転職の経緯と、SES企業で働くことのメリット・デメリットについて書きました。
働き方に悩む歳の近いエンジニアの参考になれば幸いです。
🌎 Terraform AWS インフラ環境構築 のファーストステップ

# 📌 はじめに

エンジニアの皆さん、日々開発お疲れ様です 💪

休みの日や仕事の合間に、新しい技術を学んだり、自分でサービスを作ったりしている方も多いのではないでしょうか 🙋

でも、個人で開発や勉強しているとインフラの構築って結構面倒ですよね 😵‍💫

そんなときに Terraform を使うと、環境の作成や管理がグッと楽になると思います。

僕自身、Terraformを触りながら「こうやって使うのか！」と試行錯誤しつつ、リソースの作成手順などをまとめてみました。

「Terraform気になってるけど、どこから始めたらいいかわからない…」 そんな方の 学習の手助けになれば嬉しいです🚀

# 📌 CloudFormation との比較

AWS CloudFormation も AWS の IaC ツールですが、Google Trend を見る限り、Terraform のほうが圧倒的に人気なようです 📈

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3860455/77bc7eca-d9bf-4cb9-b3e6-1d2b82f69e8b.png)

AWS のサービスの1つであるCloudFormation が 当然ながらAWSに特化する中、Terraform は AWS だけでなく Azure や GCP などのマルチクラウドに対応しているためでしょうか 🧐

採用媒体を眺めていても、最近は Terraform が主流になっているよに感じています 🏢

# 📌 対象読者

この記事は Terraform を使って AWS のインフラ環境を構築したい方 に向けた内容です。

特に Mac を使っていて、お名前.com でドメインを購入した（い）方 にはピッタリな内容になっています💻✨

# 📌 リポジトリ

実際のコードは以下のリポジトリに公開しています。

https://gitlab.com/Morykun/sandbox-terraform

リポジトリのコードは動作確認済み なので、もし記事のコードがうまく動かない場合は、レポジトリのコードを参考にしてみてください ✨

# 📌 記事

### 1. インストール

TerraformのMacへのインストール手順を解説します。

https://qiita.com/nobumory/items/f662f648679e5326fef4

### 2. お名前.comのドメイン登録

お名前.com でドメインを取得する方法を説明します。

https://qiita.com/nobumory/items/fc7396d629f99a054f60

### 3. main.tf を作成

Terraform の基本的な構成ファイル main.tf を作成します。

https://qiita.com/nobumory/items/624275ac0b08660a2637

### 4. 基本的なコマンドの紹介

基本的なコマンド (terraform init, terraform apply など) を紹介します。

https://qiita.com/nobumory/items/9f3c84f016fbf37363ed

### 5. S3 + DynamoDB を使ったバックエンドの共通化

Terraform の状態管理を S3 + DynamoDB を使って共通化する方法を解説します。

https://qiita.com/nobumory/items/be5de5ca139bc10edc3f

### 6. Amazon Route 53 のホストゾーン作成

AWS の DNS サービス Route 53 にホストゾーンを作成します。

https://qiita.com/nobumory/items/3655a64763a67e642c6c

### 7. ホストゾーンのNSレコードをお名前.comに登録

取得したドメインの NS (ネームサーバー) レコードを、お名前.com に設定します。

https://qiita.com/nobumory/items/beb7a7c7f19e3c6bad16

### 8. VPC作成

AWS 上に仮想ネットワーク (VPC) を構築します。

https://qiita.com/nobumory/items/72ab7a109b24b5a08287

### 9. Internet Gateway作成

VPC 内のリソースがインターネットにアクセスできるようにするため、Internet Gateway を作成します。

https://qiita.com/nobumory/items/35db2157a1c1c6734363

### 10. サブネット作成

VPC 内にパブリック・プライベートサブネットを作成し、ネットワークの構成を整えます。

https://qiita.com/nobumory/items/4626953585c964f12f73

### 11. セキュリティグループ作成

EC2 などの AWS リソースに適用するセキュリティグループを作成し、通信ルールを設定します。

https://qiita.com/nobumory/items/359c5486b626f864cc6b

### 12. EC2インスタンス作成

AWS の仮想サーバー (EC2 インスタンス) を作成します。

https://qiita.com/nobumory/items/1cee486b2e877d91a038

### 13. Route Table 作成

サブネットのルーティングを制御する Route Table を作成し、適切なネットワーク設定を行います。

https://qiita.com/nobumory/items/550c7eeb5b04847d115a

### 14. SES 設定

AWS のメール送信サービス SES (Simple Email Service) を設定し、ドメイン認証などの設定します。

https://qiita.com/nobumory/items/1ccd05cff11b05690e2e

### 15. S3とCloudFront連携

AWS のオブジェクトストレージ S3 を CloudFront (CDN) と組み合わせて、Web サイトやアセットを高速配信します。

https://qiita.com/nobumory/items/cdb00a7eb7e05b342737

# 📌 さいごに

🇯🇵 そして 🌎 の開発者の皆さん、日々開発お疲れ様です🚀

この記事を書いているのは 2025年2月24日の夜10時、今日は祝日ですが、家で黙々とこの内容をまとめていました💻✨

こうして全国のエンジニアの皆さんが 勉強して、それを業務や自分のプロジェクトに活かしていく ことで、どんどんスキルアップし、そのインプットがアウトプットとして形になり、誰かの助けになったり、社会の技術が進化したりしているんだと思います 🚀

ITエンジニアのひとりとして、僕の記事が 皆さんの学びや挑戦のほんの少しでも力になれたら嬉しい です ❤️

この記事を読んでいただき、本当にありがとうございました 🎉
AZ-305 合格体験記

## はじめに
AZ-305(Azure Solutions Architect Expert)を2月8日に受験して無事に合格することができたので、合格体験記を記しておこうと思います。

https://learn.microsoft.com/ja-jp/credentials/certifications/azure-solutions-architect/

## 勉強期間
AZ-104を取得してから、約4ヶ月後にAZ-305を受験しました。ですが、実質の勉強期間としては1ヶ月程度だと思います。本当はもっと早く受けたかったですが、だらだら勉強してしまいました。

## 勉強方法
### Udemy
Udemyの問題集を購入してとにかく問題を解きまくりました。今回の勉強の9割がUdemyの問題集です。私が利用した問題集は、60問×3セットでもう少し問題の量が欲しいと思いましたが、解説がわかりやすく内容としてはいい問題集だと思いました。この問題集を100%解けるようになるまで繰り返し解き続けました。Udemyの演習モード(1問解答するごとに解説が表示される)で問題を解くのがおすすめです。
最初は4割〜5割くらいしか正解できず挫折しそうになりますが、知らないサービスがたくさん出てくるので正解できなくて当たり前です。それを正解できるようにするための勉強だと思って頑張りましょう。最初から合格点取れるなら早く試験を受けた方がいいです。

https://www.udemy.com/course/microsoft-azure-az305-exam/?kw=AZ-305&src=sac&couponCode=ST4MT240225A

### 公式の問題集
公式の問題集も利用しました。問題数は50問で、これも100％解けるようになるまで繰り返しました。AZ-104の時にも利用して、知識を得るのに役に立ったと思ったので今回も利用しました。難易度は本番の試験より少し低めだと思います。

https://learn.microsoft.com/ja-jp/credentials/certifications/exams/az-305/practice/assessment?assessment-type=practice&assessmentId=15

### Qiitaに記事を書く
今回初めて勉強方法として取り込んでみたのが、覚えておきたいAzureのサービスなどをQiitaの記事にまとめるというやり方です。
学習中に知らないサービスや覚えておいた方がいいと思ったサービスに出会ったときに、Qiitaの記事にまとめました。
この方法のメリットとして以下があると思っています。

* アウトプットすることができる
* どの端末からも見返すことができる
* もしかしたら誰かの参考になるかもしれない

この中で、**どの端末からも見返すことができる**こと1番のメリットだと思いました。
PCやスマホだけでなく、社用PCでもQiitaの記事さえ開いてしまえば見返すことができます。移動時間や仕事の休憩中など、ちょっとした時間に勉強できるのがよかったです。この勉強方法には賛否はあるかもしれませんが個人的にはいいと勉強法と思っています。

https://qiita.com/kagome_zfk/items/48ad5ff041a387b4e47e

https://qiita.com/kagome_zfk/items/8ed1ec9da23ae8f5ddaa

### Microsoft Learn
AZ-104の時はMicrosoft LearnのAZ-104のコースで知識をある程度入れてから問題集に取り組みましたが、Microsoft Learnの日本語がわかりづらくストレスだったので今回は利用しませんでした。
ですが、知らないサービスなどを調べる時には利用しました。本番ではMicrosoft Learnを試験中に確認することができます。ですので、Azureのサービスについてわからないことを、Microsoft Learnで検索するなどして、ある程度Microsoft Learnの扱いには慣れておいた方がいいと思います。私は今回の試験でMicrosoft Learnを利用して解答を導き出した問題が何問かありました。

## 受験後の感想
AZ-104の取得後にすぐにAZ-305を受験すればよかったと思いました。というのも、AZ-305はAZ-104と出題範囲が被っていることもあり、AZ-104の知識が新鮮なうちに勉強をした方が理解しやすく、高得点も狙えると思いました。
また、AZ-305はAZ-104より簡単だと思う人が多いのではないかと思いました。先ほどと同じような理由で、AZ-104の知識がある程度入っているからです。AZ-104を乗り越えた人であれば必ず合格できると思いました。

## おわりに
想定より時間がかかってしまいましたが、とりあえず合格できてホッとしています。
Azureはひと段落として、次はAWSの資格にチャレンジしていこうと思っています。CLFは取得しているのでSAAの取得を目指そうと思います。次はだらだら勉強せず、サクッと取得したいです。
メールに埋め込んだリクエストが勝手に実行される・・・

# はじめに
- 先日、メールからアカウントの本登録を行うタイプの認証処理を構築していた際にエラーに出会ったので備忘録として残しておきます。

# 目次
1. **どんなエラーに遭遇したかの概要**
1. **エラーの原因**
1. **エラーに対しての解決策**

# どんなエラーに遭遇したかの概要
- 今回のエラーは作成した**メールの認証ボタンの本登録処理がメールアプリに送信された段階で勝手に実行されてしまう**というものです。
    以下の画面はその作成したメールの画面です。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/c01aa945-059e-4fba-977b-af9e8a37e913.png)

    この画面に写っている「本登録を完了する」というボタンを押して初めて本登録の認証処理が実行されるはずなのですが、**なぜかメールが送信された時点で勝手にこの本登録の処理のリクエストが実行されている**ようなのです。**ボタンを押したわけでもないのになぜ・・・！？**


# エラーの原因
- 実際のところエラーの原因は簡単なものでした。それはメールアプリ側で受信メール内のリンクを自動的に踏んで**安全性をスキャンする仕組み**が動作して、その結果サーバー側では「ユーザーが本登録処理のリンクをクリックした」とみなされてしまうようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/f8292018-eff4-4ba5-a792-32ace279497c.png)


- これは**フィッシングに対しての防衛策**であり、基本的に**どんなメールアプリにも存在する機能**のようです。
- また、個人的に厄介だと感じたのはwebサーバーを**localhostで立ち上げているときはフィッシング対策の機能は発動しません**が、**本番環境で行うときにはフィッシング対策の機能が発動する**という点です。

# エラーに対しての解決策
- エラーの対策として最も効果的で手っ取り早いのは**二段階の確認画面を設ける**というものでしょう
    つまり**メール内のリンクを踏んだだけでは本登録の処理を行わず**に、「本登録を行いますか？」などのようなボタンを**別の画面に作成し、そこに遷移して本登録処理のリクエストを送信する**というものです。

    つまりは以下のような流れです。メールが送られてきて「本登録を完了する」ボタンを押すと・・・
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/c01aa945-059e-4fba-977b-af9e8a37e913.png)

    以下の画面に遷移する。ここのボタンを押すことで初めて本登録処理のリクエストが送信される。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758326/9143736b-4a21-46fc-a4f6-1e62a47b2e1c.png)

# まとめ
- 普段いろいろなサイトで載っている「信号機を選択してください」みたいなやつとか「ロボットでないことを証明してください」みたいな謎の処理は今回の記事のようなことを防ぐ目的があったのかなあと一つ勉強になりました。
randクレートをWasmに入れようとしたらはまった

#概要
Wasmの練習として、GAによる組合せ最適化を解いたら乱数生成（randクレート）をWasmにする所ではまった。
結論としては、Cargo.tomlから`os_rng`を外すために、以下の記載が必要となる。

```toml
rand = { version = "0.9.0", default-features = false, features = ["small_rng"] }
```

また、よくあるサンプルのうち以下の部分を変える必要がある。
```rust
    // let mut rng = rand::rng(); // NG
    let mut rng = SmallRng::seed_from_u64(0); // OK
```

[公式](https://crates.io/crates/rand)には以下の記載があることは早々に確認したのだが、意外と苦戦した。`default-features=false`も知っていたが、defaultの`ThreadRng`からそれ以外に差し替えるという点に頭が回らなかった。
（[rand_pcg](https://crates.io/crates/rand_pcg)ならWasm化できることをCopilotが提案してきたので、実際にできることを確認した後Rngの再実装をし始めてた（結局、あきらめたが）。）

> WASM support
> Seeding entropy from OS on WASM target wasm32-unknown-unknown is not automatically supported by rand or getrandom. If you are fine with seeding the generator manually, you can disable the os_rng feature and use the methods on the SeedableRng trait. To enable seeding from OS, either use a different target such as wasm32-wasi or add a direct dependency on getrandom with the js feature (if the target supports JavaScript). See getrandom#WebAssembly support.

日本語の記事では以下の2つが非常に参考になった。

https://zenn.dev/kotabrog/articles/dfba345986f501#getrandom%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

https://ja.stackoverflow.com/questions/54143/wasm%E3%81%A7%E3%83%A9%E3%83%B3%E3%83%80%E3%83%A0%E3%81%AA%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E3%81%84


# 本題
成果物は以下。

https://github.com/tagawa0525/prac_wasm

GA部分の実装はGrok3がほぼ完ぺきにしてくれた。

https://x.com/i/grok/share/3NSEqJtUBxHL4QgsDEsorr3ar


# 免責事項
RustもWasmも最適化も、ぜ～んぶ初心者なので、信用しないでください。
(GAはユーザーとして使ったことはあるけれども）
自信のない新人エンジニアとして

## はじめに
メガベンチャーに新卒で入社し、Webエンジニアとして働き始めて1年が経ちました。

- **大学院ではデバイス系の研究**をしており、Webの知識はほぼゼロ
- **エンジニアとしてのインターン経験もなし**
- **プログラミングが得意というわけでもない**

そんな自分がメガベンで1年間働いて学んだことを、
- **新卒1年目のリアルな経験として共有**
- **同じような境遇の人の参考になれば嬉しい！**

という思いでまとめました。

## 入社して感じたこと

### 研修期間の衝撃

同期たちがとにかくすごい。

- **明確な目標を持っている人**
- **修羅場をくぐり抜けてきた人**
- **圧倒的な行動力を持つ人**

自分には何もないように感じ、劣等感を覚える日々。

でも、この違いって何だろう？と考えた時に、

### 重要なのは「考える力」と「伝える力」

彼らには共通して、
- **一つ一つの事象に「なぜ？」を持ち、言語化する力がある**
- **論理的に考え、根拠を持って話す力がある**

だからこそ、話していて面白いし、学びがある。

## 先輩から学んだ「レビューの技術」

### モブレビューでの学び
同期たちが当たり前に身につけていた **「考える力」** と **「伝える力」**
実際に業務に入り先輩方とモブレビューを行ったとき、その真髄を知りました。

**「レビュー＝誤字脱字の指摘」ではない。**

実際のモブレビューでは、

1. **仕様を確認し、自分ならどう実装するかを考える**
2. **実際の実装と比較し、どのような設計思想を持っているかを読み取る**
3. **その差分の意味を考え、どの点を重点的にレビューすべきかを決める**
4. **「この実装で良い理由・ダメな理由」を言語化する**
5. **共通コンポーネントや影響範囲がある箇所に関して、チーム全体としてのベストプラクティスを提案する**

特に印象的だったのは、**先輩エンジニアたちが決して感覚ではなく、論理的にレビューしていること。**

- なぜその実装が適切なのか？
- どのような課題を生む可能性があるのか？
- 既存の設計と矛盾はないか？

こうした視点を持ちながらレビューを行うことで、単なるコードチェックではなく、**設計の改善や開発者の成長にもつながるレビューになる。**

実際にモブレビューに参加することで、
- **仕様を深く理解する力**
- **他人の実装を読み解く力**
- **論理的に考え、伝える力**

これらが自然と鍛えられていることを実感しました。

---

## 1年目の自分が意識してきたこと

### ① 他人と比べず、自分にできることを見つける

- **「心理的安全性」を意識する → 他人は他人、自分は自分**
- **技術力以外でも貢献できることはある**

#### 例えば…

✅ **新卒だからこそ言える「サービスの問題点」**
- 既存のメンバーが気づかない視点でフィードバック
- それが改善につながることも！

✅ **開発環境の改善**
- 小さな効率化の積み重ねで、チームの生産性向上

✅ **素早いレビュー対応**
- PRの回転率を上げ、チームの開発スピードを加速

### ② 技術力を向上させるための習慣

「技術が趣味」というレベルの同期には勝てない。

でも、**継続すれば確実に成長できる。**

#### 続けるために意識したこと

☕ **毎週○曜日の朝にカフェで勉強**

- 朝1-2時間を「学習時間」に固定
- ルーティン化することで継続しやすい
- 朝活で自己肯定感もアップ✨

### ③ 仕事のスピードを上げる「質問力」

**「質問する力」が最重要スキル！**
名著「[世界一流エンジニアの思考法](https://www.amazon.co.jp/%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E6%80%9D%E8%80%83%E6%B3%95-%E7%89%9B%E5%B0%BE-%E5%89%9B/dp/4163917683)」にも記載ある通りです。

#### ❌ やりがちなミス
「まずは自分で考えることが大事」→ **考えすぎて時間を無駄にする**

#### ✅ 効果的な質問の仕方
- 事前にある程度調査し、仮説を持つ
- それでも不明な点を **早めに相談**
- 「こんなこと聞いていいのかな？」→ 聞いたらすぐ解決することがほとんど

**質問のサイクルを生むことで、むしろ学びが加速する！**


## おわりに

1年目はとにかく**学びと成長の期間**。

- **技術力を磨くだけが全てではない**
- **「自分なりの貢献」を意識すると働きやすくなる**

もし同じような悩みを持っている人がいたら、ぜひコメントで意見を聞かせてください！
#0057（2024/02/24）memo「良いコード/悪いコードで学ぶ設計入門」第8章~密結合~

# 「良いコード/悪いコードで学ぶ設計入門」第8章~密結合~ を読んで
## アクティブリコール
- クラスが意味のある塊（概念）ごとに実装されていないと、高密度なコードが生まれる
- 密結合なコードは、依存関係が大きく理解に時間がかかるため、保守をしにくくする
- GODクラス（Big Ball of Mud）に認定される
    - トランザクションスクリプト
    - 巨大なデータクラス

## 再読
- 関心の分離
- 単一責任の原則
- DRYの原則→重複コードを許すな!→ただ、概念が異なれば書き方の重複はありえる
- YANGI
- 継承と委譲
    - 継承は密結合なコードを生みやすい
    - 継承は継承元のメソッドを書き換えられる可能性がある
- public変数の多さは密結合につながる
- テンプレートメソッド
【電脳少女プログラミング2088 ─壊レタ君を再構築─】Python初心者がやってみた（自然の残る公園編）

## はじめに

前回の記事で「ギャングのアジト」をクリアして、今回は「自然の残る公園」をクリアしたので書こうと思います。

難しくてまだクリアできてない方などに参考にしてもらえると嬉しいです。

https://paiza.jp/entry/denno2088_qiita

## 【問題】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526750/0fb34924-8f67-418b-a15f-b30f8670010c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526750/f7458486-a524-4232-b8bb-b3f7e98a5c98.png)

## 解答

今回もPython3を選択して書いてみました。

```python:解答
# coding: utf-8
# 自分の得意な言語で
# Let's チャレンジ！！

manhattan_distance_list = []

N, current_location_x, current_location_y = map(int, input().split()) # 空白で区切ってNと現在地を代入する

for i in range(N): # Nの数繰り返す
    beacon_str = input()  # 入力を受け取る
    
    beacon_x, beacon_y = (map(int, beacon_str.split())) # スペースで区切ってリストに変換
    
    manhattan_distance = (beacon_x - current_location_x) ** 2 + (beacon_y - current_location_y) ** 2 # ユークリッド距離を計算
    
    manhattan_distance_list.append(manhattan_distance) # リストに追加
    
answer = manhattan_distance_list.index(min(manhattan_distance_list)) + 1 # リストから一番小さい値の順番を取得して１足す

print(answer) # 解答を表示
```

## コード解説

上のコードの解説をすると

```python:７行目
N, current_location_x, current_location_y = map(int, input().split())
```

`N`（ビーコンの数）、`current_location_x`（現在地のx座標）、`current_location_y`（現在地のy座標）に入力された値を空白で区切って整数として代入

***

```python:８行目～１４行目
for i in range(N): # Nの数繰り返す
    beacon_str = input()  # 入力を受け取る
    
    beacon_x, beacon_y = (map(int, beacon_str.split())) # スペースで区切って代入
    
    manhattan_distance = (beacon_x - current_location_x) ** 2 + (beacon_y - current_location_y) ** 2 # 距離を計算
    
    manhattan_distance_list.append(manhattan_distance) # リストに追加
```

for文で`N`の数だけ下の処理を繰り返す
1. 入力を受け取る
2. スペースで区切って`beacon_x`と`beacon_y`にビーコンの座標を代入
3. 問題文から引用した式で距離を計算
    > (ビーコンの x 座標 - 現在地の x 座標 ) ^ 2 + (ビーコンの y 座標 - 現在地の y 座標) ^ 2
4. 計算した値をリスト`manhattan_distance_list`に追加

***

```python:６行目
answer = manhattan_distance_list.index(min(manhattan_distance_list))
```

答えをいれる変数`answer`を作成。
リスト`manhattan_distance_list`の中から一番小さい値が何番目かを取得して`answer`に代入


***

こんな感じのコードで問題を解くことができました。

## 最後に

記事を最後までお読みいただきありがとうございます！
次回は「廃マンションの一室」をしようと思っています。次回も見てくださると嬉しいです。

ではまた他の記事で会いましょう！またねーヾ(*´∀｀*)ﾉ
TCP/IPとプロトコルの基礎まとめ

# 1.プロトコルとは？
通信を行う際に決められた"お約束事"のこと。
データのやり取りをスムーズに行うために、各層に応じたプロトコルが役割を分担している。

# 2.TCP/IPとは？
TCP/IPは、インターネットをはじめとするネットワーク通信の基盤となるプロトコル群のこと。TCP/IPモデルは4つの階層に分かれており、それぞれ異なる役割を持つ。
| 階層 | 役割 | 主なプロトコル |
|:-:|:-:|:-:|
|アプリケーション層|ユーザーと直接やり取りする|HTTP, HTTPS, SMTP, POP3, IMAP, FTP, DNS, DHCP|
|トランスポート層 |通信の信頼性を確保   |TCP, UDP|
|インターネット層   |データの送信経路を決定 |IP, ICMP, ARP, RARP|
|ネットワークインターフェース層　　|物理的な通信を処理|Ethernet, Wi-Fi   |

# 3. 代表的なプロトコルと用途
## アプリケーション層
| プロトコル | 用途 | ポート番号 |
|:-:|:-:|:-:|
|HTTP   |Webページ閲覧   |80   |
|HTTPS   |セキュアなWebページ閲覧   |443   |
|SMTP   |メール送信   |25   |
|POP3   |メール受信   |110   |
|IMAP4   |メール受信（サーバー管理）   |143   |
|FTP   |ファイル転送   |21   |
|DNS   |ドメイン名解決   |53   |
|DHCP   |IPアドレス自動割り当て   |67, 68   |
|NTP   |時刻同期   |123   |

## トランスポート層
- **TCP（Transmission Control Protocol）**
  - コネクション型（事前に接続を確立）
  - 信頼性重視（データの順番や正確性を保証）
  - 例：Web通信（HTTP, HTTPS）、メール送受信（SMTP, POP3, IMAP）

- **UDP（User Datagram Protocol）**
  - コネクションレス型（事前の接続不要）
  - 軽量で高速だが、信頼性は低い
  - 例：DNS、ストリーミング、音声通話（VoIP）


## インターネット層
・IP（Internet Protocol）：データの宛先を決定（IPアドレス使用）

・ICMP（Internet Control Message Protocol）：エラーメッセージや通信確認（pingコマンドなど）

・ARP（Address Resolution Protocol）：IPアドレスからMACアドレスを取得

・RARP（Reverse Address Resolution Protocol）：MACアドレスからIPアドレスを取得

## 4.TCP/IPのデータの流れ
通信時にデータは各層を通過し、各層でヘッダ情報が付加される。
[アプリケーション層] → HTTPリクエスト作成
    ↓
[トランスポート層] → TCPヘッダを付加（ポート番号指定）
    ↓
[インターネット層] → IPヘッダを付加（宛先IP指定）
    ↓
[ネットワーク層] → 物理的に送信
- **受信側はこの逆の順でデータを処理する。**
- 各層で付加される情報を「カプセル化」といい、通信の仕組みを理解する上で重要な概念。

→ **「カプセル化」の概念を追加すると、ネットワークの基礎理解が深まる！**

## 5.ソケット通信とポート番号
**ソケット通信**とは、TCP/IPを利用した通信手法のこと。データを送受信する際に「IPアドレス＋ポート番号」を指定する。

・**ポート番号**は、アプリケーションごとに決められた“窓口”

・送信時は、アプリケーションが利用するプロトコルに応じて、適切なポートが選ばれる

・受信時は、サーバーが特定のポートで待ち受け、適切なアプリケーションへデータを渡す

**補足:**  
ポート番号には **「ウェルノウンポート」「登録済みポート」「ダイナミックポート」** という分類がある。

```md
- **ポート番号**は、アプリケーションごとに決められた“窓口”
  - 0〜1023番：**ウェルノウンポート**（よく知られたサービス用）
  - 1024〜49151番：**登録済みポート**（特定のアプリケーション用）
  - 49152〜65535番：**ダイナミックポート**（一時的な通信で利用）
```
## 6.まとめ
・TCP/IPは4層モデル（アプリケーション層、トランスポート層、インターネット層、ネットワーク層）

・プロトコルごとに役割が異なる（HTTPはWeb、SMTPはメール送信など）

・TCPは信頼性重視、UDPはスピード重視

・データは各層でヘッダ情報を付加しながら送信される

・ポート番号を使って適切なアプリケーションへデータを届ける
LLMに文字化けメッセージを送るとどうなるか

興味本位の実験です。

WebスクレイピングとLLMを組み合わせたプログラムを作成していたところ、Shift JISでうっかり文字化けしたテキストを送信しても意外と理解してくれたように見えました。

どうなってるんだ？と試してみました。

## 実験手順

```
こんにちは。あなたの名前は何ですか？
```
をShift JISで保存、UTF-8として読み込み、文字化けさせます。
```
����ɂ��́B���Ȃ��̖��O�͉��ł����H
```
これをLLMに渡して反応を見ます。

## OpenAI ChatGPT 4o

文字化けしてるとメタ認知してるものの、「こんにちは」までを推測した様子。

![CleanShot 2025-02-24 at 21.28.54@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/8365a760-252c-4e47-8658-64f4b0311243.png)

## Anthropic Claude 3.5 Sonnet

なぜか正しく答えてくれたものの、どうしてわかったの？と聞いても要領を得ない回答でした。

![CleanShot 2025-02-24 at 21.30.06@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/c7842cd6-3151-4bde-a074-c076382eccee.png)

## xAI Grok3

正しく答えてくれて、文字化けもメタ認知しているようです。さすが(自称)世界一賢いAI。

![CleanShot 2025-02-24 at 21.30.52@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/3773a007-18db-4fbe-9ed8-e94987894118.png)

## Google Gemini 2.0 Flash

こういうのでいいんだよ、という感じの回答です。確率的に続きを紡ぎ出すTransformerは直感的にこうなりそうですよね。

![CleanShot 2025-02-24 at 21.34.12@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35178/d9c0efb2-7f12-45c5-9369-a13fb8b2d1c3.png)

## まとめ

個性が出て面白いです。

チャットUIということもあり、それぞれユーザーの意図を推測する固有の前処理が入っているように感じました。

それでも「文字化け」を認識するのは不思議だなと思います。「こんにちは」の文字化け例はポピュラーなので学習データにも含まれているからでしょうかね。
【イベントレポート】IT企業が得意のITネタを披露！IT企業ライトニングトーク！ #RPALT

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

今回は2025.02.24（月）に開催した**IT企業が得意のITネタを披露！IT企業ライトニングトーク！**へ参加しましたので、アウトプットとしてイベントレポートを執筆しました。

初学者でもサクッと読めるように平易な表現で執筆しておりますので、お気軽に読んでいただければ幸いです。

:::note info
誤字脱字、わかりづらい表現に関しては極力なくすように心がけていますが、リアルタイムで執筆しているため、誤字脱字があるかもしれません。
:::

#### イベントページ

https://rpacommunity.connpass.com/event/346154/

# 目次
- LT
    - 業務棚卸しを解決するためのヒント
    - Google Workspace、あのビッグニュースを語る
    - AppSheetの関数
    - 北海道からワーケーションLT
    - Gemini for Google Workspaceについて
    - コミュニティ運営で使えるアンケートツールを紹介
- まとめ

## LT

### 業務棚卸しを解決するためのヒント
- 業務棚卸について
    - 業務棚卸表に基づいて棚卸を行っていく
        - 縦軸：業務の流れ
        - 横軸：業務詳細
    - 業務の粒度合わせが難しいといった課題がある
- 業務粒度の分け方
    - 作業時間・期間の場合
        - 大分類に関しては**1か月単位**
        - 中分類に関しては**1週間単位**
        - 小分類に関しては**1日単位**
    - 担当者が変わる場合
        - 大分類に関しては部署単位
        - 中分類に関してはチーム単位
        - 小分類に関してはチーム単位
    - 大中小分類をいったんだして横並びさせることが重要

### Google Workspace、あのビッグニュースを語る
- 大ニュース（Geminiアプリ・サイドパネルにNotebookLM Plusが標準搭載）
    - 今まで有償プランで提供していた生成AIアプリが実質無料で利用できるようになった
    - BusinessStarterに関しては一部Gemini機能のみ提供
- NotebookLM
    - 生成AIにNotebookLM Plusを食わせるためのツール
    - （個人的意見）簡単に構築できるRAGアプリ
    - Notebook LM Plusのほうがセキュリティ面含めエンタープライズ向け
        - ただし、BusinessStarter以上のプランが必要
    - 生成AIガイドライン含めフォローしてくれる

### AppSheetの関数
- よくあるユースケース
    - 条件分岐・アプリ制御などで利用される
    - 式入力に関してもフラスコマーク・イコールマークなどわかりやすい
    - 式アシスタント機能などもフォローしてくれている
- 基本構文
    - 定数、列、値、関数を用いて実装していく
    - 演算子を組み合わせていく
    - （個人的考察）初学者でも触りやすい印象ですね
    - リストの間接参照もデフォルトで利用可能な式でサポートしている

### 北海道からワーケーションLT
- 北見市から中継でLT
- 紹介
    - 初心者向けにPowerPlatForm内製化支援を行っている
    - 教育活動だけでなく、内製化推進のための発表の場も構築している
    - 最近ではYoutube配信を通じた登壇活動も行っている

### Gemini for Google Workspaceについて
- 会社紹介
    - Google Cloudを用いたソリューション事業提供
- Google AIの歴史
    - Google AIのBirdがGeminiに変更
    - Gemini for Google Workspaceを活用することでいい感じのドキュメントを生成することができる
- 3つのインターフェース
    - Help meシリーズ
        - メール返信などのタスクを支援するサービス
        - データ整理のためのテンプレート作成も瞬時に行ってくれる
        - Create Image With Geminiを利用すればパワポ画像も生成可能
        - （個人的考察）この機能はほしいですね

### コミュニティ運営で使えるアンケートツールを紹介
- Mentimerterの紹介
    - 質問文を入力することで簡単にフォームを作成できる
    - 画像を差し込むこともできる
    - （個人的考察）APIと連携することで簡単なアプリが実装できそう
    - URLを共有することで回答できるようになる
    - 回答用のQRコードが邪魔になったら移動することが可能
        - （個人的意見）アーキテクチャが興味深い

## まとめ

個人的にあまりキャッチできていないソリューションを知ることができたので、よかったです。また、自分でも触ってみたいと思いました（特に、Gemini for Google Workspaceとmentimerter）

最後までお読みいただきありがとうございました！
LLMのファインチューニングまとめ

自分の記事まとめ

https://qiita.com/ikedachin/items/d32654c500add759c23f

https://qiita.com/ikedachin/items/c539de6c9e7e05c91e18

https://qiita.com/ikedachin/items/eb833076ce3c8342cd61

https://qiita.com/ikedachin/items/8c31b359ec7473e00595


https://qiita.com/ikedachin/items/e7703aa0ef1d461009fa

https://qiita.com/ikedachin/items/a698c6ef3c3797e44f59

https://qiita.com/ikedachin/items/c25861f989d8dfdbef3c

https://qiita.com/ikedachin/items/7df53442dd3dbf76d3e5
LangChainまとめ

自分の記事のまとめ

<br>


https://qiita.com/ikedachin/items/138d21978f1e9db8b952

<br>

https://qiita.com/ikedachin/items/26f98436648bc74e2ba7

<br>

https://qiita.com/ikedachin/items/7764965d4ea42e92badf

<br>

https://qiita.com/ikedachin/items/1df2980a9ac50a589c4a

<br>

https://qiita.com/ikedachin/items/7ae52f1c497860bb3624

<br>

https://qiita.com/ikedachin/items/2e7197ea87861247425f

<br>

https://qiita.com/ikedachin/items/07b0fa316309c44f0fd7

<br>

https://qiita.com/ikedachin/items/95ffbe2a0d7800cce8fe

<br>

https://qiita.com/ikedachin/items/38daa23ad5dc0b9365b2

<br>

https://qiita.com/ikedachin/items/249092007f24092cbc82

<br>

https://qiita.com/ikedachin/items/9a16e3350ecb7b6ac845

<br>

https://qiita.com/ikedachin/items/fa72476398cf34505147

<br>

https://qiita.com/ikedachin/items/26d1485b2489164de283

<br>

https://qiita.com/ikedachin/items/b2930f5ddd1dfb8deeb8

<br>

https://qiita.com/ikedachin/items/aa7d9342d59cceb4d6b7

<br>

https://qiita.com/ikedachin/items/c41f9a0108da74a29217

<br>

<br>
Laravel で便利なメソッド集

# Laravel で便利なメソッド集

## **はじめに**
Laravel には開発を効率化する便利なメソッドが多数用意されています。本記事では、よく使う便利なメソッドをピックアップして紹介します。

---

## **1. `pluck()` - 特定のカラムの値を取得**
`pluck()` を使うと、コレクションやクエリの結果から特定のカラムのみを簡単に取得できます。

### **使用例**
```php
$names = User::pluck('name');
// ["Alice", "Bob", "Charlie"]
```

第二引数を指定すると、キーと値のペアを取得できます。
```php
$users = User::pluck('name', 'id');
// [1 => "Alice", 2 => "Bob", 3 => "Charlie"]
```

---

## **2. `whereIn()` - 指定した複数の値を検索**
`whereIn()` を使うと、特定のカラムが指定した配列の値と一致するレコードを取得できます。

### **使用例**
```php
$users = User::whereIn('id', [1, 2, 3])->get();
```

逆に `whereNotIn()` を使うと、指定した値以外のレコードを取得できます。
```php
$users = User::whereNotIn('id', [1, 2, 3])->get();
```

---

## **3. `when()` - 条件付きでクエリを適用**
`when()` を使うと、条件に応じてクエリを適用することができます。

### **使用例**
```php
$query = User::query();

$search = 'Alice';
$query->when($search, function ($q, $search) {
    return $q->where('name', 'like', "%{$search}%");
});

$users = $query->get();
```

---

## **4. `firstOrCreate()` - 存在しなければ作成**
`firstOrCreate()` を使うと、指定の条件でデータを検索し、存在しなければ新規作成できます。

### **使用例**
```php
$user = User::firstOrCreate([
    'email' => 'test@example.com'
], [
    'name' => 'New User'
]);
```

類似メソッドとして `firstOrNew()` もあり、こちらは新規作成時に `save()` を明示的に呼ぶ必要があります。
```php
$user = User::firstOrNew(['email' => 'test@example.com']);
$user->name = 'New User';
$user->save();
```

---

## **5. `updateOrCreate()` - 更新または作成**
`updateOrCreate()` を使うと、指定の条件でレコードを検索し、存在すれば更新、なければ作成できます。

### **使用例**
```php
$user = User::updateOrCreate(
    ['email' => 'test@example.com'],
    ['name' => 'Updated Name']
);
```

---

## **6. `exists()` - レコードの存在確認**
特定の条件に一致するレコードが存在するかどうかを `exists()` で確認できます。

### **使用例**
```php
if (User::where('email', 'test@example.com')->exists()) {
    echo "User exists!";
}
```

逆に `doesntExist()` を使うと、存在しない場合のチェックができます。
```php
if (User::where('email', 'test@example.com')->doesntExist()) {
    echo "User does not exist!";
}
```

---

## **7. `chunk()` - 大量データを効率的に処理**
`chunk()` を使うと、大量のデータを小分けにして処理できます。

### **使用例**
```php
User::chunk(100, function ($users) {
    foreach ($users as $user) {
        // ユーザーデータを処理
    }
});
```

---

## **8. `tap()` - オブジェクトを変更しつつ返す**
`tap()` を使うと、メソッドチェーンの途中でオブジェクトを操作できます。

### **使用例**
```php
$user = tap(User::find(1), function ($user) {
    $user->update(['name' => 'Updated Name']);
});
```

---

## **9. `collect()` - 配列をコレクションに変換**
`collect()` を使うと、配列を便利なコレクションオブジェクトに変換できます。

### **使用例**
```php
$collection = collect([1, 2, 3, 4, 5]);

$filtered = $collection->filter(function ($value) {
    return $value > 2;
});

print_r($filtered->all()); // [3, 4, 5]
```

---

## **まとめ**

Laravel には開発を効率化する多くの便利なメソッドがあります。本記事で紹介したメソッドを活用することで、コードをシンプルにし、可読性や保守性を向上させることができます。

ぜひ、日々の開発に役立ててください！
Azure2段階認証をやってみた

Azureで二段階認証をやる方法をまとめました。

まず自分が二段階認証になっているかは
https://account.live.com/proofs/manage/additional
このサイトでわかります。

そして上のサイトで２段階認証を設定する項目があるので、設定します。
その後Microsoft Authenticatorをインストールするように求められるので、
自分はiPhoneだったんですが、QRコードからインストールをします。
携帯にインストールできたら1回メールで認証を求められます。
その後は携帯のほうにワンタイムパスワードが生成されるので、それを入力してログインを行います。
ローカルLLMモデル比較

# 概要
- 以下のモデルをローカルで比較
    1. llama3.1:8b  
    2. cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:latest 
    3. tanuki-dpo-v1.0:8b-q6_K 
    4. Llama-3-ELYZA-JP-8B-GGUF:latest
- tanuki-dpo-v1.0:8b-q6_Kが一番よさそう

# 動機
- ローカルでLLMを動かしてみたいと思ったから．
- ローカルでも動かせるサイズのモデルが様々あることは知っていたが，それぞれ比較してみたいと思ったから．

# 環境
GPU搭載のラップトップでollamaを実行

マシンスペック
- CPU:core i7 12700H
- RAM:32GB
- GPU:RTX 3060 Laptop
- VRAM:6GB

ollamaの準備
WSL2にubuntu22.04をインストールし，dockerで以下のコマンドを実行して，ollamaのコンテナイメージをプル．
```
docker pull ollama:ollama
```
カレントディレクトリにollamaディレクトリを作成．
```
mkdir ollama
```
以下のコマンドでプルしてきたイメージを起動．
```
$ docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama
```
最後に，使いたいモデルを指定してollamaを起動．
```
docker exec -it ollama ollama run llama3.1:8b
```

# それぞれのモデルを比較
比較方法はそれぞれのモデルに対して「こんにちわ」とプロンプトに入力して出力を比較

1. llama3.1:8b
```
>>> こんにちわ
こんにちは！あなたは日本語を勉強中ですか？
```
日本語話者ではないユーザーが外国の言葉を使ってみた，みたいなケースだと解釈されている？

2. cyberagent-DeepSeek-R1-Distill-Qwen-14B-Japanese-gguf:latest
```
>>> こんにちわ
<think>
ユーザーは「こんにちわ」と日本語で挨拶しました。これは「こんにちは」と同じ意味の変形です。まず、挨拶に返すのが自然なので、「こんにちは！」と返事をします。

次に、ユーザーが何を求めているのかを考えます。この質問だけでは具体的な要求がないので、追加情報を求める必要があります。例えば、会話の続きや質問があれば教えてくださいと促します。

また、ユーザーが日本語を母国語としているか不明ですが、丁寧に返答するためには適切です。さらに、ユーザーが何か困っている状況を連想し、支援が必要であればその意図を探ります。

最後に、自然な会話の流れを作るために、「他に必要なことはありますか？」と質問することで、ユーザーの要望を引き出します。
</think>

こんにちは！  
おはようございますか？ それともただの挨拶でしたらありがとうございます😊  
何かお話したいことや質問があればどうぞ、よろしくお願いします！

（追加情報がない場合でも、日本語での会話を続けていくことが重要です。ユーザーが何を望んでいるのか探りながら、適宜返答を調整する必要があります）
```
おはようございますか？になってしまうのは精度が低いのかも？

3. tanuki-dpo-v1.0:8b-q6_K 
```
>>> こんにちわ
こんにちは！お元気ですか？何かお手伝いできることがあれば教えてください。どんな質問や相談でもお気軽にどうぞ。
```
すごくまとも．

4. Llama-3-ELYZA-JP-8B-GGUF:latest
```
>>> こんにちわ
こんにちは！
```
日本語対応モデルなので，日本語ユーザーを想定した回答になっている．

# 結果
- tanuki-dpo-v1.0が一番まともに回答してくれていると感じた
- Llama-3-ELYZA-JP-8B-GGUFもいい感じだったが，ほかの質問をした時にtanukiの方がよい回答をできていたと思う

# 最後に
- 興味本位で何となくモデルの比較をしてみた．
- LLM用の評価指標がいろいろあるが，やっぱり自分で使ってみて比較した方がわかりやすいと感じた．
- 今回は適当にモデルを選択したので，モデルサイズや量子化ビット数などがバラバラになっていた．
- この結果は適当なので，参考程度．
TypeScriptの型について


## any型
どんな型でも受け入れるが、型チェックが行われないため安全性が低い。
メリット: 非常に柔軟で、どんな型でも扱えるため、プロトタイピングや型定義が未確定な場合に素早く実装できる。
デメリット: 型チェックが行われないため、意図しないエラーを引き起こしやすく、安全性が低い。

 ```React
 let value: any;

value = "hello";   // OK
value = 123;       // OK
value = true;      // OK

// any型なので何でもできる（型エラーなし）
value.toUpperCase();  // OK
value.foo();          // OK（エラーにならない）

```


## unknown型
型が不明な値を保持するが、利用時には型チェックが必要。安全性が高い。
メリット: 型が不明な場合でも安全に操作できる。型チェックを強制することでコードの安全性を向上させる。
デメリット: 使用する前に型チェックが必要なため、コードが少し冗長になる可能性がある。

 ```React
let value: unknown;

value = "hello";   // OK
value = 123;       // OK
value = true;      // OK

// そのままではエラー（型の保証がないため）
value.toUpperCase();  // エラー
value.foo();          // エラー

// 型チェックをすればOK
if (typeof value === "string") {
    value.toUpperCase();  // OK
}
```


```React
// 悪い例: anyを使ったケース
function handleApiResponse(response: any) {
  console.log(response.name); 
}

// 改善例: unknownを使ったケース
function handleApiResponse(response: unknown) {
  if (typeof response === "object" && response !== null && "name" in response) {
    console.log((response as { name: string }).name); // 型チェック後にプロパティにアクセスするため安全
  } else {
    console.log("無効なレスポンスです");
  }
}
```

## void型
関数が値を返さないことを示す。戻り値のない関数に使う。
メリット: 関数が値を返さないことを明示することで、コードの意図をはっきりさせることができる。
デメリット: 他の型と比べて使用の幅が狭く、特に関数の戻り値に限定される。
```React
function logMessage(message: string): void {
  console.log(message);
}
```

## never 型
決して値を返さないことを示す。常に例外をスローする関数や無限ループに使う。
メリット: 到達不能なコードを明示することで、型システムを活用したバグの防止に役立つ。
デメリット: 非常に特殊なケースに限定されるため、意図して使う機会が少ない。

```React
function infiniteLoop(): never {
    while (true) {
        console.log("ループ中...");
    }
}
//この関数は処理が永久に続き、終了しないため never 型になる。

```

```React
function processInput(value: string | number): void {
  if (typeof value === "string") {
    console.log("文字列です: " + value);
  } else if (typeof value === "number") {
    console.log("数値です: " + value);
  } else {
    const neverValue: never = value; // 型チェックの段階で、この行は到達不能であることを示す
    console.log(neverValue);
  }
}

```
VscodeでVuejs[@/]のalias補完

# 設定方法

## ディレクトリ構造

* vscodeで開いているディレクトリ直下に```jsconfig.json```を作成
* ```frontend```配下でないことを注意
```
Projectroot
 L backend
    L hogehoge
 L frontend
    L src
 L jsconfig.json
 L tsconfig.json  //または
```

## 設定ファイル
```jsconfig.json
{
  "compilerOptions": {
    "baseUrl": ".", // .をベースパスに設定
    "paths": {
      "@/*": [
        "frontend/src/*"
      ] // @/はfrontend/src/を指す
    }
  },
  "include": [
    "frontend/src/**/*"
  ] // srcフォルダ内の全ファイルを含める
}
```

## settings.jsonも変更するらしい？
* しなくても動く気が・・・
```vscode/settings.json
{
    "typescript.preferences.importModuleSpecifier": "shortest",
    "javascript.preferences.importModuleSpecifier": "shortest",
    "eslint.validate": ["javascript", "javascriptreact", "vue"],
    "editor.formatOnSave": true,
}
```


## 補完が効かないと思ったら
* vscodeさいきｄ
Cloud Run 自動デプロイ

# はじめに
GoogleCloudのCloudRunをキャッチアップするにあたって、実際に手元で触れる環境がほしかったため、サンプルの環境を作成してみる。

# 適当なアプリ作成
Next.jsのコマンドでDockerファイルを含むプロジェクトを自動生成してくれる。便利すぎる...

https://github.com/vercel/next.js/tree/canary/examples/with-docker

yarnで作成しました。

```zsh
yarn create next-app --example with-docker nextjs-docker
```

特に質問等もなくコマンド実行でアプリ完成。
Githubにリポジトリ作ってpushする。
Dockerファイル見ればわかるが、ビルド時にlockファイル参照するので`yarn install`実行してlockファイル作っておく。
(lockファイルないとビルドに失敗する)

```zsh
git init
git remote add origin <git url>
git add .
git commit -m "First Commit"
git push origin main
```

はい完成。


![スクリーンショット 2025-02-24 20.56.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/8b188e89-c99b-4860-9c0c-7e7078033785.png)

なぜかjsonファイルがgitinitされてたのでコミット多め。
yarn.lockもgitに上がってなかった...

# Cloud Runへデプロイ

GoogleCloudに新規プロジェクト作成
[プロジェクトの選択] → [新しいプロジェクト]
よしなに名前つける。

![スクリーンショット 2025-02-24 21.04.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/9fa72fb9-570a-4d68-bb12-72006729f5f8.png)

![スクリーンショット 2025-02-24 21.04.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/5ff82f44-888b-440e-92f0-6c0c0b3514dc.png)


サイドメニューから[CloudRun]開く。
[サービスの作成] → [リポジトリから継続的にデプロイする（ソースまたは関数）]

![スクリーンショット 2025-02-24 21.28.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/9a669d45-1be8-4209-ac8d-dc3f9caa155f.png)

ここでGithubとの接続やリポジトリ選択する必要があるが、認証やAPIが必要な旨の警告が出る場合はそれらに従って必要な手順を踏む。

ビルド構成のブランチはデフォルトでmainブランチが選択されている。
要するに、mainブランチの内容がデプロイされる。(任意で変更可能)
ビルドタイプはDockerfileを選択する。
そのまま[保存]。

![スクリーンショット 2025-02-24 21.10.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/a0db83bd-e6ea-4ad5-96e9-adb3f14fd591.png)

名前を入力してリージョン選択。今回は大阪にした
次にデプロイするサービスの認証について設定する。認証を必要とする場合は [認証が必要] を選ぶが、今回は誰でもアクセスできるように [未認証の呼び出しを許可] を設定する。

![スクリーンショット 2025-02-24 21.21.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/9ec11926-d7ba-4ca8-b38a-a3682b2cecce.png)


そのまま下にスクロールして、コンテナの編集を開く。
コンテナポートが8080になってるが、先ほど作成したNext.jsのサンプルアプリは3000でサーバーが起動するようになっているので3000に変更する。(Dockerファイルに合わせるの内容に合わせる)

![スクリーンショット 2025-02-24 21.16.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/87a163b7-a7a3-451b-bf04-174e2422df54.png)

最後に[作成]を押して数分待つとデプロイが完了する。
HTTPSでアクセスできるURLが自動で発行されるので、このリンクをクリックするとNext.jsアプリを開くことができる。

![スクリーンショット 2025-02-24 21.20.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/fcf043e4-842b-451e-bef4-8ea7555a2d39.png)

![スクリーンショット 2025-02-24 21.23.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2645945/ad4d3e78-869a-4c36-9771-11d9143428e2.png)
(HelloWorldはあとでテストするためにpushした内容)

これで、mainブランチに取り込まれた内容は自動でデプロイされる。


# 参考
https://zenn.dev/google_cloud_jp/articles/nextjs-on-cloudrun
npmパッケージを簡単に最新にする方法

express-generatorを使ったら、``package.json``に書いてあるバージョンがすごく古かった、という経験があります。そんなとき、``npm-check-updates``を使うと、新しくできます。ここでは、そのncuコマンドの使い方を解説します。

-----

ncuコマンドは、npmのパッケージを自動的に最新にする優れたプログラムです。
筆者は、Express Generatorなどで特に使っています。
使い方を学びましょう。

## インストール

まず、次のコマンドを実行します。

```
$ npm install -g npm-check-updates
```

``-g``オプションは、グローバル環境にインストールすることを表します。
これで、環境全体でncuコマンドが使えるようになりました。

## ncuコマンドを叩く
``package.json``があるディレクトリに移動して、次のコマンドを実行します。

```
$ ncu
```

次のような実行結果が帰ってきます。

```
$ ncu
Checking /workspace/package.json
[====================] 6/6 100%

 cookie-parser   ~1.4.4  →   ~1.4.7
 debug           ~2.6.9  →   ~4.4.0
 ejs             ~2.6.1  →  ~3.1.10
 express        ~4.16.1  →  ~4.21.2
 http-errors     ~1.6.3  →   ~2.0.0
 morgan          ~1.9.1  →  ~1.10.0

Run ncu -u to upgrade package.json
```
この時点では、package.jsonは新しくなっていません。次に、``ncu -u``を実行します。

```
$ ncu -u
Upgrading /workspace/package.json
[====================] 6/6 100%

 cookie-parser   ~1.4.4  →   ~1.4.7
 debug           ~2.6.9  →   ~4.4.0
 ejs             ~2.6.1  →  ~3.1.10
 express        ~4.16.1  →  ~4.21.2
 http-errors     ~1.6.3  →   ~2.0.0
 morgan          ~1.9.1  →  ~1.10.0

Run npm install to install new versions.
```

最後に、``npm install``を実行すると、最新のパッケージでインストールできます。

## 感想
まだよくnpmのことを学べていないのですが、最新のパッケージに簡単にできるのは良いなと思いました。
CATechDojoでの課題の分析

どうも。とくりんです！
2個目の投稿にもなりますが、自分の頭の中を言語化するって難しいなと感じています
最近はPHPのコードをみて、学習法を模索している日々です。（笑）
今回は原因の部分が多いのでアドバイス等あれば教えていただけると幸いです。

### Dojoでの開発の流れ ##
主にグループワークで開発をしていきますがプロダクトは個人で行います。社員さん、メンターの方々と日頃から面談、質問対応などに加えて、一日の終わりには今日のGoodとMoreを言語化して共有する夕会があり、班のメンバーからもフィードバックをもらえ大変勉強になります。
そのように日々、チャットアプリの制作に向き合ってきたのですが結果として私は必須とされていた課題が終わりませんでした。この内容について私は今回一番伝えたい内容になっています。一週間を振り返り、そのような結果になってしまった理由については技術の知識の差というよりも「**AIに頼ってしまった開発**」、「**深刻なプログラミング経験のなさ**」、「**問題の解決方法**」だと考えました。その3つのポイントについて深堀りしていこうと思います。
 
## AIに頼ってしまった開発 ##
今回私の個人目標として「**AIに頼らず、開発を進める**」を挙げていたのにも関わらず、どういうことなんだと思われるかと思います。私も「AIの生成したコードを絶対にペーストしないこと」や「わからないところのコードだけを渡す」などの方法で**理解をサポート**するものとして利用することを考えていました。ですが、自分の心の弱さから周りとの進捗やコードの読みやすさを比較してしまい、焦ってしまったのです。自分よりもできている人はコードの構造をしっかり理解していたり、得られた情報の取捨選択ができていたりするのにもかかわらず、自分は理解がないまま、コードを引っ張ってきてしまい大文字のChatScreenと小文字のchatscreenができてしまうなど管理ができなくなってしまい、最終的にはコードを一度動いたところまで戻すということになりました。
その日は目標も守れず、進捗も上げらなかったことに自分の意志の弱さに失望し、無力感で胸が一杯になりました。この経験は今までの学習でもアプリを開発するという目標にしか目を向けられず、AIが作ったアプリで理解できた気になっていることに気づくことができました。

# 深刻なプログラミング経験のなさ
AIとの付き合い方について理解が不十分だっただけでなく、アプリとしての構造を全く理解できていなかったと感じています。自分よりも進捗が良かったメンバーが作成したFigJamでのアプリのアーキテクチャを見たとき、こんなに理解度が違うのかと驚きました。後日、自分が作成したものと見比べても、彼のレベルに達することができず、相互の関係を理解し表現することができませんでした。

これは、プログラミング言語を腰を据えて学習した経験がないことに起因していると分析しています。言語固有の知識に限らず、アーキテクチャや抽象化といったプログラミング共通の知識のインプットが不足しており、全体像を把握できないことにつながったと思います。

自分の性格的に、本や動画での座学が苦手で逃げてきた結果、短絡的にAIを使って作成したアプリが自分の成果になってしまったと感じています。
![スクリーンショット 2025-02-20 190530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/45ef7949-e3aa-41bd-abc1-04f38603b7b5.png)

# 問題の解決方法 #
冒頭に触れたとおり、このインターンにはグループにメンターがついてくださいます。会社でバリバリ働いている過去の道場生についていただき、開発を進めていくのですが、私は全然質問ができませんでした。これは緊張していたというのもありますが、わからないポイントが整理できておらず、言語化できていなかったからです。そのため、質問したくても何を聴けばいいのかわからず、具体的なポイントばかり気にしてAIに頼ってしまい、取り返しのつかないところまで行ってしまったように感じています。

今から考えると簡単なことに思えますが、当時は焦りと自分の理解度の低さをさらけ出すことに対する悔しさがあり、メンタル面でも問題があったと思います。それに、今詰まっていることを抽象化して、どのように動かしたいのかを考えたり、具体的にコードベースでどのように書けばエラーを解消できるのかといった段階を踏んだ考え方もできていませんでした。

さらに、質問の内容が段階を踏まずに詰まっている点だけを伝え、自分のわからないことや聞きたいことを明確にできなかったため、得られる情報も少なかったのではないかと思います。


## 
次は今後どの様にしていくかのMoreの点になります
インターン終了後の画像送信ができるようになった写真を載せます、
- ![Screenshot_20250220_232242.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016682/c766c26f-a3f2-4d49-a346-25d775c0ba5a.png)
OSS-DB Silverを受けてみた


## はじめに
2025年の2月にOSS-DB Silverを受験しました。
ぎりぎりの点数で何とか合格することが出来ました。

## OSS-DB Silverとは？
- PostgreSQLに関する技術力と知識を問う試験
- 問題数：50問
- 試験時間：90分(そのうちの5分はアンケート記入)
- 受験料：16500円（税込）
- 試験方式：CBT方式

## 著者のスペック
- 情報系の修士卒
- 社会人一年目(機械学習系の案件を担当)
- SQLの学習経験はあるがデータベースの運用経験は無し

備忘録として合格するためにどのような勉強を行ったか紹介していきます

## 受験理由
本資格を受験しようとした理由は以下の通りです。
- 会社の資格手当対象資格だったため
- 機械学習の案件のみならず様々な案件に対応できるようにするため多様な知識を身に着ける必要があると感じたから

## 使用したテキストやサイト
①[OSS教科書 OSS-DB Silver Ver.3.0対応](https://www.shoeisha.co.jp/book/detail/9784798180311)
②[https://mondai.ping-t.com/g](https://www.sg-siken.com/sgkakomon.php)

主にPing-tをメインに使用しました。公式の緑本は辞書代わりに使用しました。

## 勉強時間
35~40時間くらいだと思います

## 勉強法
### 1. 緑本を1周する
深くやりこむ必要はありません。ここでは流し見程度でいいのでどんなことが問題として出題されるのか把握する程度でいいです

### 2. Ping-tですべての問題をHit状態にする
緑本を一周したらPing-tの問題を全て正解するまで解きましょう。初見だと半分以上の問題を間違えると思います。ですが気にする必要はありません。問題の解説を読みながら知識を身に着けていきましょう。

### 3. Ping-tですべての問題をコンボ状態にする
全ての問題をコンボ状態にするまで解きましょう。ここで間違えてしまった問題はPing-tのブックマーク機能を用いて復習問題として記録しましょう。また緑本を使用して基本的概念を再度インプットすべきです。

### 4. Ping-tの模試を解きまくる！
500問の問題から50問題が出題されます。8割以上を5回くらい取れるようになったら知識は十分に身についていると思います。

ちなみに著者のPing-tのスタンプラリーは以下の通りです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4019599/ac25b450-dd70-404a-9c9a-c40db516377e.png)


## 試験結果
- スコア：66点（合格ライン：64点）
- 結果：合格
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4019599/0d1a439c-de87-4fb5-99f1-323702558ef6.png)

かなりぎりぎりでした...

## 受験の感想
開発/SQLの正答率は高かったですがその他の分野の正答率が低かったです。
これはPing-tで問われなかった内容の理解が曖昧だったのが原因だと思います。一般知識、運用管理は曖昧な理解だと正答率が一気に低くなるのでこれらの暗記はきっちり行うべきだと思いました。
逆にSQLは学習経験があったのである程度スムーズに理解できたのが正答率に現れたのかなと思いました。

## おわりに
ぎりぎりの点数でしたが何とか合格できました。今後は様々な教材で実際にデータベースを構築してみて、この分野に関する理解を深めていくべきだと感じました。
Rocky Linux 9でdnf／yumリポジトリの一覧とリポジトリに含まれているパッケージを一覧表示する

# What'S？

タイトルどおりですが、メモとして。

# 現在使用できるdnf／yumリポジトリを一覧表示する

`dnf repolist`で。

```shell
$ dnf repolist
repo id                                                        repo の名前
appstream                                                      Rocky Linux 9 - AppStream
baseos                                                         Rocky Linux 9 - BaseOS
epel                                                           Extra Packages for Enterprise Linux 9 - x86_64
epel-cisco-openh264                                            Extra Packages for Enterprise Linux 9 openh264 (From Cisco) - x86_64
extras                                                         Rocky Linux 9 - Extras
pgdg-common                                                    PostgreSQL common RPMs for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg12                                                         PostgreSQL 12 for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg13                                                         PostgreSQL 13 for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg14                                                         PostgreSQL 14 for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg15                                                         PostgreSQL 15 for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg16                                                         PostgreSQL 16 for RHEL / Rocky / AlmaLinux 9 - x86_64
pgdg17                                                         PostgreSQL 17 for RHEL / Rocky / AlmaLinux 9 - x86_64
```

ちょっと作為的にPostgreSQLのリポジトリを追加しています。

デフォルトでは有効なリポジトリのみを表示するので、すべて表示する場合は`--all`オプションをつけます。

```shell
$ dnf repolist --all
```

有効なもののみ（デフォルト）、無効なもののみを表示する場合は、それぞれ`--enabled`および`--disabled`オプションをつけます。

```shell
$ dnf repolist --enabled


$ dnf repolist --disabled

# 特定のリポジトリに含まれるパッケージを一覧表示する

パッケージの一覧を表示するには`dnf list`を使います。

```shell
$ dnf list
```

デフォルトではすべてのパッケージが表示されるので、特定のリポジトリに絞って表示したい場合は`--repo`または`--repoid`オプションでリポジトリのidを指定します。

```shell
$ dnf list --repo pgdg16


$ dnf list --repoid pgdg16
```

ここで指定するリポジトリのidは、`dnf repolist`で確認したものですね。

# 確認環境

```shell
$ cat /etc/redhat-release
Rocky Linux release 9.5 (Blue Onyx)


$ uname -srvmpio
Linux 5.14.0-503.26.1.el9_5.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Feb 19 16:28:19 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux


$ dnf --version
4.14.0
  インストール済み: dnf-0:4.14.0-17.el9.noarch (日時: 2025年02月24日 11時32分07秒)
  ビルド      : Rocky Linux Build System (Peridot) <releng@rockylinux.org>  (日時: 2024年11月05日 18時52分35秒)

  インストール済み: rpm-0:4.16.1.3-34.el9.0.1.x86_64 (日時: 2025年02月24日 11時30分52秒)
  ビルド      : Rocky Linux Build System (Peridot) <releng@rockylinux.org>  (日時: 2024年11月04日 20時51分43秒)
```
JavaScriptでじゃんけん判定、ミスった…でも解決した話   set と .has()

「じゃんけん？ 余裕でしょ！」と思って書いたコードが、全然動かない…。よくある問題だからこそ、うっかりミスしがち。僕も lines.length の使い方を間違えてハマったのと、もっとスッキリしたコード書けるのに始めは知らなかった。気づいたことを共有するよ！



↓
NGコードでは、lines.length をそのままループに使ったけど、実際には lines[0] に試合数が入っていた…。さらに、勝ちパターンの判定を if 文でゴリゴリ書いていて、もっとスッキリ書ける方法があった。

改善前（ゴリゴリ if 文）
```js
if (lines[count] == "G C" ) {
    win++;
} else if (lines[count] == "C P") {
    win++;
} else if (lines[count] == "P G") {
    win++;
}
```
このままだと、勝ちパターンが増えたときに else if の嵐になってしまう…。
改善後（Set でスッキリ！）
```js
const winPatterns = new Set(["G C", "C P", "P G"]);  
for (let count = 1; count <= Number(lines[0]); count++) {  
    if (winPatterns.has(lines[count])) win++;  
}
```
Set を使えば、if 文の連続が消えて、勝ちパターンの管理も楽になる！
Set とは？

Set は、重複を許さないデータを管理する便利なオブジェクト。配列と違って .has() メソッドで値の存在チェックが簡単にできる！
```js
const winPatterns = new Set(["G C", "C P", "P G"]);  
console.log(winPatterns.has("G C")); // true  
console.log(winPatterns.has("P P")); // false  
```


僕の失敗談と解決話→ [Paizaで基本マスター](https://paizabeginner.wordpress.com/2025/02/24/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc-javascript%e3%81%a7%e3%81%98%e3%82%83%e3%82%93%e3%81%91%e3%82%93%e5%95%8f%e9%a1%8c%e3%80%81%e9%96%93%e9%81%95%e3%81%88%e3%81%9f/)
HFS ディスクを読み込む（mac）

こんにちは。
[HFS](https://ja.wikipedia.org/wiki/Hierarchical_File_System) ディスクを読み込むいくつかの方法を調べました。

1. [hfsutils](https://github.com/JotaRandom/hfsutils) を利用
1. OS X El Capitan 10.11 以前[^1] + Intel Mac を利用


[^1]: [以前のバージョンの OS](https://support.apple.com/ja-jp/102662) をゲストOSとしてインストールする方法もあります（例：Parallels Desktop）、