OmniAICreator/Qiita-1.07M huggingface dataset:
laravel ✕ OAuth2.0 Socialiteを使って取得したトークンを使ってAPIを実行してみる（Googleドライブのファイル一覧を取得）

## 概要

Socialiteを使って取得したトークンを用いてGoogleのAPIを実行しユーザーのGoogleドライブのファイル情報を取得する方法を簡単に記載する。

## 前提

- コードは下記の内容が完了している状態から修正を実施

https://qiita.com/miriwo/items/55f1b9c1137b50491f65

- 下記の内容を実施し、Google ドライブのAPIが有効化されていること

https://qiita.com/miriwo/items/9aa54366bc7b94c6a7b2

## 方法

1. Google Auth Platformのサイドバーの「データアクセス」をクリック
1. 「スコープを追加または削除」をクリック
1. 「API: Google Drive API」でスコープを絞り込む

    ![CleanShot 2025-06-04 at 17.26.05@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/92aafbc8-f176-4dd4-b109-244974519cef.jpeg)

1. 「Google ドライブのすべてのファイルの表示、ダウンロード」のスコープにチェックを入れて「更新」をクリック

    ![CleanShot 2025-06-04 at 17.26.45@2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d481aa18-9ccd-4342-be2d-9e1c50741a8d.jpeg)

1. 下記記述をweb.phpに追加

    ```routes/web.php
    Route::get('/google-drive-infos', [OauthController::class, 'googleDriveInfos'])->name('google.drive.infos');
    ```

1. 下記の内容をコントローラーに記載

    ```app/Http/Controllers/OauthController.php
    public function googleDriveInfos()
    {
        $oauthToken = $this->oauthToken->where('user_id', Auth::user()->id)->first();
        $accessToken = $oauthToken->access_token;

        try {
            $response = Http::withToken($accessToken)->get('https://www.googleapis.com/drive/v3/files?q=\'me\' in owners&fields=files(id, name)');

            if ($response->successful()) {
                $buckets = $response->json();
                return response()->json($buckets);
            } else {
                Log::error('Google Cloud API request failed', ['response' => $response->body()]);
                return response()->json(['error' => 'Failed to retrieve Google Cloud resources'], 500);
            }
        } catch (\Exception $e) {
            Log::error('Exception occurred while fetching Google Cloud resources', ['exception' => $e]);
            return response()->json(['error' => 'An error occurred while fetching Google Cloud resources'], 500);
        }
    }
    ```

1. 一旦ログアウトし、`/auth/redirect`にアクセスし、ログイン後`/google-drive-infos`にアクセスし下記のようにJSONでGoogleドライブ内部のファイルが確認できること

    ![CleanShot 2025-06-04 at 21.03.05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/daca8c22-97f6-4bf5-8b80-d2f934184537.jpeg)


## 参考文献

https://developers.google.com/workspace/drive/api/guides/api-specific-auth?hl=ja
JestでReact環境を実行時に ReferenceError: TextEncoder is not defined

# はじめに
Jestで ```npm run test``` をすると、「TextEncoder」が無いとエラーが出たので調査しました。

# 問題
```npm run test``` 時に下記のようなエラーが出た。
```
ReferenceError: TextEncoder is not defined
```


# 解決方法
```TextEncoder``` はJestのデフォルトのテスト環境である ```jsdom``` には実装が含まれていないようです。
なので、テスト環境に ```TextEncoder``` を使用できるように追加してあげる必要があります。

#### ■ ```jest-fixed-jsdom``` をインストールする
```
npm i jest-fixed-jsdom
```
#### ■ ```jest.config.ts or jest.config.js``` にテスト環境を指定する
```tsx
module.exports = {
  testEnvironment: 'jest-fixed-jsdom',
}
```
これでエラーが消えます。

# 参考

https://qiita.com/masa_code/items/799c028fb7b56d6661a2
Snowflake SnowPro Assosiate: Platform(SOL-C01)、取ったどー

# はじめに
こんにちは、SnowのProです。
Snowflakeの新しい入門認定資格である「SnowPro Assosiate: Platform(SOL-C01)」に合格しました。
![AI Data CloudであるSnowflakeをかわいい白熊が使いこなしている 2.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/e3b41025-8c91-401e-9a70-cb1b984c368d.jpeg)

今までのSnowPro試験に関する自分の投稿をリンクしておきます。

- SnowPro Coreの投稿

https://qiita.com/a-kamiya/items/bf009967d5051f0f4353

- SnowPro Advanced:Architectの投稿

https://qiita.com/a-kamiya/items/a5b2fe2b6a86f64870de


# 試験概要
問題数：65問
制限時間：85分
言語：日本語で受験可能⇒New
受験料：100USドル + 消費税10%（ただし無料バウチャーもらったので無料）
合格点：750点（1000点満点）
前提条件：なし
※自宅受験、カメラ等での監視なし

# 経緯
SnowflakeさんのAscentというウェビナーが今年の4月にあって、その時は予定が合わず参加できなかったものの、5月にもやってくれたので5月に参加したんです。
（「SnowPro Associate: Platform Certification」の無料バウチャー貰えるということで。）

なお、7月にもこの無料バウチャー貰えるウェビナーあるそうですよ。

https://www.snowflake.com/events/snowflake-platform-training-japan-ascent/
>受講いただくと、「SnowPro Associate: Platform Certification」の無料バウチャーが提供されます。

3か月前の3/2にSnowPro Advanced:Architectを受けた時には、このAssosiate: Platform試験はまだ新しいので日本語対応してなかったんです。
英語で受けるしかないと諦めていたのですが、いざ試験の登録しようとしたら
- English
- Japanese
と選べるじゃないですかー。
![スクリーンショット 2025-06-04 182945.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/e50f963b-391b-4808-8708-f041de07f336.png)
喜び勇んで日本語で受けました。

# 勉強方法
この試験用の勉強は特になく、3か月前のAdvanced:Architectの際の蓄えで。

# 結果
900/1000でした。
![スクリーンショット 2025-06-04 202340.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/9a4b811e-d3ba-4f4b-8a0b-63e81a174766.png)

5問くらい怪しいなーとチェック入れていたところがあるんですが、それ以上に間違えたようですね。（900/1000ということは6.5問を間違えた計算。）

時間は余りまくりです。
45分くらいで終わりにしたので40分くらい余りました。

ちょっと時間をおいてバッジもきました。（30分もかかっていないはず）
![スクリーンショット 2025-06-04 202641.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3487310/545eb2f9-c509-4c08-8c4e-a0723a0e0b06.png)

# LinkedInへの反映
Advanced:Architect合格後に残した自分の記事を見ながらやったらすぐできたので役に立ちました。

https://qiita.com/a-kamiya/items/63f535e5c0435aa59086
いま女子（エンジニア）こそが日本語プログラミングすべき５つの理由

# はじめに
この記事は一般女子向けに書いた　[日本語プログラミング言語Mind40年 - いま女子こそ日本語プログラミングすべき５つの理由](https://sites.google.com/view/girlslifewithmind)　というサイトの記事を女子のソフトウェアエンジニア向けに書き換えたものです。

基本的にプログラミングが得意ではないシステムエンジニアさんなどを想定していますが、もちろん得意な方が日本語プログラミング言語を第２第３言語として習得されることもお勧めしています。


# 1 女子の強み：コミュニケーション言語能力（とプログラミング言語能力）

コミュニケ―ション能力は一般に女性のが高いと言われています。コミュニケーション能力には言語コミュニケーションと非言語コミュニケーションがあります。この中で言語コミュニケーション能力は言語能力に依存します。

言語能力には１．創造的思考（とそれを支える論理的思考）の側面、２．感情・情緒の側面、３．他者とのコミュニケーションの側面からなると言われています。（文部科学省・資料5言語能力について「整理メモ」より）

一方でプログラミング能力は上記言語能力の中の１．に支えられています。広い意味で他者をコンピュータととらえれば、コンピュータとのコミュニケーションの側面があるとも言えます。

一般にプログラマー職には男性が多いとされていますが、システムエンジニアなど顧客とのコミュケーションが重視される職種では、女性こそが活躍しやすい職種と言えます。

# 2 プログラミング言語能力とプログラミング思考力

今日のプログラミング言語は英語由来で記号中心の形態のものが百花繚乱という状態であり、その細かい多様なシンタックスルールは、プログラミングを日常的な作業としない方にとって高いハードルとなっています。

実際の個々のプログラミング言語によって記述されるソースコードには、順次進行、条件分岐、反復といったアルゴリズムの基本構造が存在しており、そのパターンを認識抽出し発案することが職業的プログラマには求められます。

アルゴリズムの基本構造は本質的にこれらのプログラミング言語のシンタックスには依存しておらず、前述のアルゴリズムの基本構造はいかなる言語でも記述可能です。

ただし、自然言語のままでは定義の一意性に欠ける面がありますので、一定の形式化された言語、すなわちプログラミング言語が必要となります。

# 3 プログラミング思考力と日本語プログラミング言語

プログラミング言語のほとんどは、英語由来の形式言語または一部自然言語の語彙に依らない完全な人口言語ですが、日本語由来のプログラミング言語も存在します。ここでは、前記アルゴリズムを表記する言語としては日本語由来のプログラミング言語の習得を女性に推奨しています。

なぜならそれは自身が発案したアルゴリズムを言語化する際に必ず役立つからです。そして、内語と同じ言語のプログラミング言語のが習得はしやすいからです。これは英語由来のプログラミング言語の習得を妨げるものではありません。英語由来の一般的なプログラミング言語と日本語由来のプログラミング言語で同時に言語化（ソースコード化）することができるのであれば、恐らく男性または同性のプログラマからも差別化される優位なスキルを確保することとなるでしょう。

日本語プログラミング言語ができる女子エンジニアたとえば顧客要求をとりまとめるシステムエンジニアならば、自分が詳しくないプログラミング言語のプロジェクトでも、男子プログラマに対して日本語プログラミング言語でロジックを正確に伝えることができます。

# 4 AI時代の必須スキル：プログラミング思考力

ついにAI時代が到来しました。コンピュータとの対話には前記プログラミング言語が必須でしたが、生成AIが英語や日本語などの自然言語を認識して、プログラミング言語のソースコードをある程度自動生成できる世界が到来しました。

では、プログラミング能力やプログラミング思考力は不要となっていくのでしょうか？

いいえ、逆にAIを使う立場で思考するには、プログラミング能力やプログラミング思考力は基盤的なスキルとしてより必須なものとなっていると言えます。

# 5 AIが日本語を解する時代こそ日本語プログラミング言語

非エンジニアが生成AIと対話してプログラミング言語のソースコードやオブジェクトコードを生成させることは、ある意味、ユーザーがシステムエンジニアやプログラマと対話してプログラミング言語のソースコードを手書きしてもらう関係に近いものがあります。

ただし、システムエンジニアの背後に大量のプログラマが細かいアルゴリズムのギャップを考案しながらソースコードを記述しているという点ではその人件費は莫大で、生成AIで自動化された場合と比べて手戻りを繰り返したとしてもコストメリットは大きいかもしれません。

いずれにしても、ソフトウェアの需要は今後も爆発的に増えていくと予測されますので、自然言語のままの日本語で生成AIと対話するよりは、自然さを損なわないある程度形式化されて構造化されたプログラミング言語で対話した方が手戻りが少なく、より意図したとおりの結果が期待できます。

日本語プログラミング言語はそのような高度利用も考えられる将来性のあるプログラミング言語です。この点は女子エンジニア限定という意味ではなく万人に通づるメリットですね。

ただし、現時点での現状有姿の生成AIが日本語プログラミング言語を詳しく学習しているかというとそうでもない側面もあるので、ローカル生成AIに言語仕様を学習させるなどの準備は必要と考えられます。

# おわりに
主に女子エンジニアのロジカルシンキングにまつわるコア・コンピタンス形成について訴求していますが、本記事での用語の定義は　[ロジカルシンキング（MECE）とプログラミング的思考力（またはCT）とアルゴリズム的思考力の階層構造まとめ](https://qiita.com/mylifewithviolin/items/395bab8caa2c9cfde6a4) をご確認いただけると幸いです。

**祝！日本語プログラミング言語なでしこ生誕２０周年**
**祝！日本語プログラミング言語Ｍｉｎｄ生誕４０周年**

なでしこの生誕年は2004年説がありますが、なでしこの１５周年記念サイトが2020年にできていますので、事実上なでしこのバージョン１が正式リリースされた2005年をもって生誕と想定いたします。ということはなでしこは今年で生誕２０周年ということに。Mindとの年の差はちょうど２０歳なんですね:relaxed:
Amazon Q CLIに対するプロンプトをAmazon Q CLIに考えてもらい、ゲームを作ってみた。

# はじめに
最近Amazon Q CLIでゲームを作成して、応募するとTシャツが貰える、キャンペーンが実施されています。ということで、これまでコード生成のAIは触ったことがなかったですが、記念品が貰えるならやるしかないということで、挑戦してみました。

https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/

 https://community.aws/content/2xIoduO0xhkhUApQpVUIqBFGmAc/build-games-with-amazon-q-cli-and-score-a-t-shirt

 # 環境構築について
先ほどのリンクひとつ目の通りに行うことで、問題ないと思います。他にもブログを上げられている方がたくさんいるので、探してもらえれば問題ないと思います。

 # 作業方法について
 作業方法については、自分自身あまりプロンプトのコツもわからなかったので、プロンプトをQ CLIに考えてもらい、もう一つのQ CLIにコードの生成を行ってもらうことにしました。コード生成用に対しては、プロンプト生成用のQ CLIから生成されたプロンプトしか入力していません。作成されたものを一回実行して、より良くなるようなプロンプトを作成してもらい、コードの改善をコード生成用に行ってもらう作業を何回か行い、ゲームを作成しました。
 
 ![スクリーンショット 2025-06-04 20.29.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4070547/af32a8ff-6324-4070-ba9c-fd76577c3419.png)

# 成果物について
成果物は以下のようなものになります。一応難易度や機体選択などの選択肢もあるシューティングゲームが完成しました!描画の際のバグなどは少し残っていますが、上の作業方法でここまでのものが完成するのはなかなか凄いですね。

https://x.com/tarekatsu_eng/status/1929539667839389906

# 感じたこと
特にやっていて感じたことは、一回のコード生成の実行時間が長かったことです。二周目に以下のような文で、プロンプト生成を行ってもらいました。

```
現在/Users/???/pygame_shooter/ 以下にファイルが作られました。
さらに面白くなるようにプロンプトを考えて
```

すると生成した、プロンプトは以下のようになりました。

```
現在のPygameシューティングゲームをさらに発展させて、より面白く魅力的なゲームにしたいと思います。以下の機能や要素を追加してください：

1. パワーアップアイテムシステム
   - ランダムに出現するパワーアップアイテム（複数種類）
   - 例：3連射、レーザービーム、シールド、速度アップなど
   - アイテム取得時に視覚的・聴覚的フィードバック

2. ボスバトルシステム
   - 一定スコアに達すると出現するボス敵
   - 通常の敵より大きく、HPを持ち、複雑な動きをする
   - 特殊な攻撃パターン（弾幕、追尾弾など）
   - ボス撃破で大量得点とステージクリア演出

3. ステージシステム
   - 複数のステージ（背景や敵の種類/動きが変化）
   - ステージごとに難易度が上昇
   - ステージ開始/クリア時の演出

4. 敵の多様化
   - 複数種類の敵（動きや攻撃パターンが異なる）
   - 敵が弾を撃ってくる機能
   - 敵の編隊移動パターン

5. ゲームシステムの改良
   - ハイスコア保存機能
   - 難易度選択（EASY/NORMAL/HARD）
   - ポーズ機能
   - タイトル画面とゲームオーバー画面の充実
   - コンボシステム（連続撃破でボーナス点）

6. 視覚・聴覚効果の強化
   - パーティクルエフェクト（爆発、エンジン噴射など）
   - 画面シェイク効果
   - BGMの実装（ステージごとに変化）
   - より多様なサウンドエフェクト

7. プレイヤー機体のカスタマイズ
   - 複数の機体から選択可能
   - 各機体は特性が異なる（速度、攻撃力、耐久力など）

コードは引き続き読みやすく、十分なコメントを含めてください。また、新しい機能は段階的に実装できるよう、モジュール化されたコード構造にしていただけると助かります。

これらすべてを一度に実装する必要はなく、最も面白くなりそうな機能から優先的に実装してください。

```

かなり長いプロンプトになってしまって、これが原因でコード生成の時間が長くなってしまいました。プロンプトを生成する際にも、長くなりすぎないような文言を入れることで、回避できたのかなとは思います。

# まとめ
自分自身プログラミングもそこまで書ける方じゃないですが、簡単な命令だけでゲームを作ることができました。これからもプログラムを書く際や、特にIaCなどの部分を勉強する際に、コードを書いてもらって勉強したいなと思います。
まだ、20日まではキャンペーンもやっているので、興味のある方はぜひ試してみてください!
How I Keep My CSS From Becoming a Mess in React Projects

Hi everyone. Lately, I’ve been working on a React project with my team and noticed something that’s probably all too familiar:

"As the project grows, CSS turns into complete chaos."

Sound familiar? I thought so. In this article, I’ll share some practical things I’ve been doing to keep CSS maintainable and clean in React development.

1. Default to CSS Modules
While options like Styled-components or Tailwind are great, I’ve found CSS Modules work better in our team—especially for newer developers who are still getting used to component-based styling.
import styles from './Button.module.css';

export const Button = () => {
  return <button className={styles.primary}>Click Me</button>;
};
Why CSS Modules?

Prevents class name collisions

Makes it easy to scope styles to components

Simple and transparent setup

2. Structure CSS with Atomic Design in Mind
Even though I’m not following Atomic Design strictly, I do organize styles similarly. Each component has its own folder, with logic and styles living side-by-side.

css
Copy
Edit
components/
├── atoms/
│   └── Button/
│       ├── Button.tsx
│       └── Button.module.css
├── molecules/
│   └── SearchBar/
│       ├── SearchBar.tsx
│       └── SearchBar.module.css
This makes it really easy to know where styles live and what they affect.

3. Use CSS Variables for Colors & Spacing
I define all shared values (like colors and spacing) in a global CSS file using variables.
:root {
  --color-primary: #1e90ff;
  --color-danger: #ff5f56;
  --spacing-md: 1rem;
}
Advantages:

Easier theme switching

Prevents inconsistent values being hardcoded everywhere

4. Use “Loose BEM” Naming for Clarity
Even though I’m using CSS Modules, I still aim to write meaningful class names, loosely inspired by the BEM methodology.
/* ✅ Good */
.button_primary {}

/* 🚫 Avoid */
.btn1 {}
I don’t follow BEM strictly—just enough to keep names readable and meaningful. It helps everyone on the team understand styles at a glance.

5. Exploring Linaria for Static CSS Generation
Recently, I’ve been trying out Linaria, a zero-runtime CSS-in-JS solution. It lets you write styles in JS, but compiles them to static CSS at build time.
import { css } from '@linaria/core';

const title = css`
  font-size: 24px;
  color: red;
`;

export const Title = () => <h1 className={title}>Hello</h1>;
It’s still early days, but the performance benefits over styled-components are real—especially for larger projects.

Summary
Keeping CSS clean in React projects can be tough, but it's totally doable with a few good habits:

Use CSS Modules to keep styles scoped

Organize files in a way inspired by Atomic Design

Store common values (colors, spacing) as variables

Use meaningful class names with loose BEM rules

Consider Linaria for performance-focused projects

How do you manage your CSS in React?
Let me know in the comments—I'd love to hear your approach!

P.S. We're also experimenting with React-based UI components for wholesale platforms at WholesaleConnections.com. If you’re building anything similar or want to swap ideas, feel free to connect!
DataBricks──ゼロから触ってわかった！Databricks非公式ガイド

![](https://storage.googleapis.com/zenn-user-upload/9ce991e40562-20250530.jpg)


[Amazonで本書を見る](https://amzn.to/4kIO6Ye)

### [DataBricks──ゼロから触ってわかった！Databricks非公式ガイド](https://amzn.to/4kIO6Ye)

### 第1章　Databricksが「遠い」と感じていた頃のこと
Databricksという名前を初めて聞いたとき、「なんだかすごそうだけど、自分には関係なさそう」と感じていました。クラウド、Spark、Delta Lake、レイヤー構成──聞き慣れない言葉ばかりで、手を出す前から少し諦めていたんです。でも、ある日ふと思い立ってNotebookを開いてみたところから、少しずつ景色が変わっていきました。
操作が難しかったり、何がどこで設定されているのか分からなかったり。でも触ってみると、「技術って、触る前がいちばん難しく感じるんだな」と実感しました。

### 第2章　この本に書いたのは「つまずき」や「戸惑い」の記録
今回Kindleで公開した「[DataBricks──ゼロから触ってわかった！Databricks非公式ガイド](https://amzn.to/4kIO6Ye)」は、Databricksの技術仕様を解説する本ではありません。
私自身が初めて触ったときに「わかりにくかったこと」「つまずいたポイント」「そこでどう考えたか」といった“実際の体験”を中心に構成しています。ETL、SQL、Auto Loader、Unity Catalogなどを一つずつ試しながら、そのたびに思ったことを丁寧に書き残しました。
内容はあくまで基本操作が中心ですが、だからこそ「これから始めたい人」にとって役立つ部分もあると思っています。

### 第3章　「興味はあるけど、まだ触っていない人」へ
Databricksはとてもパワフルなプラットフォームですが、そのぶん“最初の一歩”に不安を感じる方も多いと思います。私自身もそうでした。だからこそ、「何をしたか」「何が分からなかったか」「触ってみてどう感じたか」をそのまま伝えることで、誰かが最初の一歩を踏み出すきっかけになればと願っています。
もし、Databricksに少しでも興味があるなら、よかったらこの本を手に取ってみてください。専門書ではないからこそ伝えられる“初学者のリアル”が詰まっています。

[Amazonで本書を見る](https://amzn.to/4kIO6Ye)
【GitHub】ブランチ削除防止の設定

## はじめに

リポジトリ内の重要なブランチは誤って削除されるのを防ぎましょう。 
誤操作によるトラブル防止やCI/CDなどブランチ前提の仕組みを壊さないために有効です。

これにより
・GitHub上で対象ブランチの削除ボタンを押しても削除できなくなります。


## 手順

### 1. リポジトリ設定ページの表示

- GitHubで対象リポジトリを開く  
- 上部メニューから `Settings` をクリック  
- 左メニューの `Branches` を選択

### 2. ブランチ保護ルールの追加

- `Branch protection rules`内の `Add rule` または `Create rule` をクリック  
- `Branch name pattern`に保護対象のブランチ名を入力
![スクリーンショット 2025-06-05 233602.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820411/62f5ce74-3810-4ab0-89a2-4e522889ca66.png)


### 3. 削除防止オプションの有効化

- オプション一覧から `Restrict deletions` にチェック  
- ページ下部の `Create` または `Save changes` をクリック  
![スクリーンショット 2025-06-05 233621.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3820411/285e71a0-8abb-40c2-999f-c25acd06ac4b.png)

## 補足
【Streamlit】data_editorのユーザ入力を初期化する方法

## 解決方法

```python
import streamlit as st
import uuid

def reset():
    """
    data_editorのkeyをランダムな値に書き換える
    """
    st.session_state.data_editor_key = str(uuid.uuid4())

if "data_editor_key" not in st.session_state:
    reset()

st.data_editor(df, use_container_width=True, key=st.session_state.data_editor_key)
st.button("Reset", on_click=reset)
```

## 参考文献
https://discuss.streamlit.io/t/clear-st-data-editor-after-some-task/66014/2
【React超入門】関数コンポーネントとは？初心者でもわかるやさしい解説


##  はじめに

Reactを学び始めたばかりの方にとって、「関数コンポーネント」という言葉はやや難しく聞こえるかもしれません。  
この記事では、Reactの**関数コンポーネントとは何か？**、そしてどのように使うのか？を、わかりやすく丁寧に解説していきます。

---

## コンポーネントってなに？

 コンポーネントとは「UIの部品」です。

Reactでは、以下のようなUIの構成要素を「コンポーネント」として分けて実装します。

- ボタン
- 入力フォーム
- ToDoリスト
- ヘッダーやフッター

複数のコンポーネントを組み合わせて、アプリケーション全体を構築していきます。

---

##  関数コンポーネントとは？

関数コンポーネントとは、その名のとおり**関数として定義されたReactのコンポーネント**でReactの基本単位であり、**今のReact開発では主流の書き方**です。

```jsx:Hello.jsx
function Hello() {
  return <h1>Hello, world!</h1>;
}
```
上記のように function を使って定義し、JSX（HTMLのような構文）を return で返すだけで作れます。

クラスコンポーネントとの違い
**書き方**
【関数】Functionを使う【クラスコンポーネント】classを使う
**状態管理**
【関数】useState() などのHooks【クラスコンポーネント】this.state
**React公式推奨**
【関数】現在はこちら【クラスコンポーネント】 推奨されない旧式の書き方
**コード量**
【関数】少なめ・シンプル【クラスコンポーネント】多くて複雑になりがち


## JSXとは？
JSXは「JavaScript XML」の略で、JavaScript内にHTMLライクな構文を書ける仕組みです。
```jsx:title.jsx
return (
  <div>
    <p>これはJSXです！</p>
  </div>
);
```
注意点：

必ず1つのタグで囲む（例：<div>）

class 属性は className に書き換える必要がある

 実用例：ToDoアプリを関数コンポーネントで書いてみる
```jsx:TodoApp.jsx
import React, { useState } from 'react';

function TodoApp() {
  const [input, setInput] = useState('');
  const [todos, setTodos] = useState([]);

  const addTodo = () => {
    if (input.trim() === '') return;
    setTodos([...todos, input]);
    setInput('');
  };

  return (
    <div>
      <h2>My ToDo List</h2>
      <input value={input} onChange={(e) => setInput(e.target.value)} placeholder="新しいタスクを入力" />
      <button onClick={addTodo}>追加</button>
      <ul>
        {todos.map((todo, index) => (
          <li key={index}>{todo}</li>
        ))}
      </ul>
    </div>
  );
}
```
このように、関数の中に useState と JSX を書くだけで、簡単にToDoアプリが作れます！

 ReactDOMで画面に表示する方法
```jsx:index.js
import ReactDOM from 'react-dom';
import TodoApp from './TodoApp';

ReactDOM.render(<TodoApp />, document.getElementById('root'));
```
HTML側には、以下のように描画先となる div を用意しておきます。

```jsx:html
html:index.html
<div id="root"></div>
```
## まとめ
関数コンポーネントとは、関数で定義されたUI部品

return で JSX（見た目） を返すのが特徴

useState などの Hooks を使って状態管理が可能

現代のReact開発では、関数コンポーネントが主流

##  関連リンク
React公式ドキュメント

useStateを使ってみよう

 最後に
この記事が「関数コンポーネントって何？」という方の疑問解消になれば嬉しいです！
いいね・フォローもお待ちしています！
任意の数で何回割れる?


今回からしばらく、「ループメニュー」の問題を解いていく！

<br>

## 問題概要

- 整数 `N` , `M` が与えられる。
- `N` が何回 `M` で割れるかを求め、出力する。

<br>

入力例：

    4 2

出力例：

    2

<br>

https://paiza.jp/works/mondai/loop_problems2/loop_problems2__div_m

<br><br>

## ✅OK例：while
```js
const rl = require('readline').createInterface({input: process.stdin});

rl.once('line', (line) => {
  const [N, M] = line.split(' ').map(Number);

  let count = 0;
  let temp = N;

  while (temp % M === 0) {
    temp /= M;
    count++;
  }

  console.log(count);
  rl.close();
});
```

<br>

## ✅OK例２：forの条件でまとめて一文に
```js
const rl = require('readline').createInterface({input:process.stdin});


rl.once('line', (input) => {
    
    const [N, M] = input.split(' ').map(Number);

    let count = 0;
    for(let result = N;result % M === 0; result /= M, count++);
    
    console.log(count);
    
    
});
```
- `for`文の中で、初期値、条件式、更新式をすべて設定
- 条件式：`result` が `M` で割り切れる間だけ繰り返す
- 更新式：`result /= M`（Mで割る）、`count++`

割り切れる条件（`% M === 0`）をしっかり書くのがポイント。

<br><br>

## 📝気づきメモ
- `while`文：条件が`true`ならどこまでも突き進む無限マシーン。条件式ミスに注意！
- `for`文でも初期化・条件・更新をうまくまとめれば同じ動きが可能。可読性は状況により使い分けるのが吉！


<br><br><br>[僕の失敗談(´;ω;｀)と解決法🐈](https://paizabeginner.wordpress.com/2025/06/04/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a%e4%bb%bb%e6%84%8f%e3%81%ae%e6%95%b0%e3%81%a7%e4%bd%95%e5%9b%9e%e5%89%b2%e3%82%8c%e3%82%8b/)
この商品の詳細は何？palanARで説明してみた

みなさまこんにちは　しらせです　
4回目の投稿になります。
今回はpalanARを使用して商品の情報を記載してみました！
# 目次
- [完成品](#完成品)
- [使用アプリ一覧](#使用アプリ一覧)
- [このアプリを作成しようとした背景](#このアプリを作成しようとした背景)
- [作成手順](#作成手順)
- [改良しました](#改良しました)
- [しらせの感想](#しらせの感想)

## 完成品
https://x.com/Ic8ICt6crO343/status/1929549159431897375
## 使用アプリ一覧
**palanAR**
## このアプリを作成しようとした背景
お客さんにこの商品（原料）はどういう意味なの？とよく聞かれて、私も調べられていないので曖昧な回答になり、困った自己体験があったからです。
最近だとメヒカリ（魚）ってなにと聞かれました。
そこで、palanARで事前に作成し、B5のPOPに掲示して、
お客さんに**聞かれる前に先手を打つ！！**　⚾
また、１日掲示しているので、**担当者が退勤した後にも有効**だと思いました

## 作成手順
### ①palanARにアクセスする　[palanalAR](https://palanar.com/)
無料なのでご安心を！

![スクリーンショット (58).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051643/9a4e1a26-54f7-4547-a941-ff279f6ebb2a.png)

### ②AR新規作成をクリック☝

![スクリーンショット (59).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051643/08c2049d-cd39-4f24-bad2-f4862e2bfd84.png)
今回はARマーカーにしました！　POPなので水平にしました

### ③名前を記入![スクリーンショット (60).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051643/26dd63f1-266d-42ca-be4d-02c64e1854ca.png)

### ④素材ライブラリから追加で写真やフォルダから挿入できます![スクリーンショット (61).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051643/7bbd9f76-d30a-4ada-9f09-a3f1d65aaf6a.png)
### ⑤右上のAR体験から確認できます　そして完成！

## 改良しました
かなり殺風景で地味だったため、画像を追加し、華やかにしてみました（笑）
URL埋め込みができたので潜水艦に埋め込んでみました
福島県のプライドフィッシュみたいですね

https://x.com/Ic8ICt6crO343/status/1930216843337445640

さらにARマーカーを[Canva](https://www.canva.com/ja_jp/free/)でデザインしてみました！
![スクリーンショット (63).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051643/4b5968e3-5bdd-4000-880e-de07336b9784.png)
これで何を紹介するのかわかりやすくなりました！
## しらせの感想
AR結構簡単にできるんだと思いました。
しかし、AR専用のカメラを読み込んでからARマーカーを読み込まないとうまくできないという点が二度手間になり、億劫だと感じました。
しかし、買い物をするうえで、このようなアクションがあると買い物が
楽しくなるのかなと思いました
ただ、なにを説明するのかの選定が難しいと思いました。（考えは人によるので）
時間外にも掲示しておくのは便利ですね

今回はここまでです　ありがとうございました！！
Spring AIとSpring MCPの比較

# Spring AIとSpring MCPの比較

## はじめに

この記事では、Spring AIとSpring MCP（Model-Controller-Provider）パターンの特徴を比較し、それぞれのユースケースや利点について説明します。両方のアプローチは、AI機能をSpringアプリケーションに統合する際に使用できますが、それぞれ異なる特徴と利点があります。

## 1. アーキテクチャの比較

### Spring AI
- **特徴**:
  - Spring AIは、AI機能を統合するための専用フレームワーク
  - 標準化されたAPIを提供
  - 複数のAIプロバイダーをサポート
  - 設定が簡単で、最小限のコードで実装可能

### Spring MCP
- **特徴**:
  - アプリケーションの責務を明確に分離するアーキテクチャパターン
  - カスタマイズ性が高い
  - ビジネスロジックの柔軟な実装が可能
  - テスト容易性が高い

## 2. 実装の比較

### Spring AIの実装例

```java
@Service
public class SpringAIChatService {
    private final ChatClient chatClient;

    public SpringAIChatService(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    public String chat(String message) {
        return chatClient.prompt(message)
            .call()
            .content();
    }
}
```

### Spring MCPの実装例

```java
// Model
@Data
public class ChatMessage {
    private String role;
    private String content;
    private LocalDateTime timestamp;
}

// Provider
@Service
public class OpenAIChatProvider {
    private final ChatClient chatClient;
    private final Map<String, List<ChatMessage>> conversationHistory;

    public ChatResponse generateResponse(ChatRequest request) {
        // 会話履歴の管理
        // プロンプトの構築
        // API呼び出し
        // レスポンスの処理
    }
}

// Controller
@RestController
public class ChatController {
    private final OpenAIChatProvider chatProvider;

    public ResponseEntity<ChatResponse> chat(@RequestBody ChatRequest request) {
        // リクエストの処理
        // プロバイダーの呼び出し
        // レスポンスの返却
    }
}
```

## 3. 主な違い

### 1. 実装の複雑さ
- **Spring AI**:
  - シンプルで直感的な実装
  - 最小限のコードで実装可能
  - 学習曲線が緩やか

- **Spring MCP**:
  - より複雑な実装が必要
  - 各レイヤーの責務を明確に定義
  - より多くのコードが必要

### 2. カスタマイズ性
- **Spring AI**:
  - 標準化された機能に制限
  - 基本的なAI機能の実装に最適
  - 拡張性は限定的

- **Spring MCP**:
  - 高いカスタマイズ性
  - ビジネスロジックの柔軟な実装
  - 複雑な要件に対応可能

### 3. テスト容易性
- **Spring AI**:
  - シンプルなテストが可能
  - モックの作成が容易
  - 基本的な機能テストに適している

- **Spring MCP**:
  - 各レイヤーを個別にテスト可能
  - より詳細なテストが可能
  - 複雑なシナリオのテストに適している

### 4. メンテナンス性
- **Spring AI**:
  - シンプルな構造で保守が容易
  - 標準化された実装で一貫性を保持
  - 小規模なプロジェクトに適している

- **Spring MCP**:
  - 明確な責務分離で保守性が高い
  - 大規模なプロジェクトに適している
  - チーム開発での協業が容易

## 4. ユースケースの比較

### Spring AIが適している場合
- シンプルなAI機能の実装
- 迅速なプロトタイピング
- 標準的なAI機能の統合
- 小規模なプロジェクト

### Spring MCPが適している場合
- 複雑なビジネスロジックの実装
- カスタマイズ性の高い要件
- 大規模なプロジェクト
- チーム開発での協業

## 5. パフォーマンスの比較

### Spring AI
- 軽量な実装
- 最小限のオーバーヘッド
- 標準化された最適化

### Spring MCP
- より多くのレイヤーによる若干のオーバーヘッド
- カスタマイズ可能な最適化
- スケーラビリティの高い設計

## 6. セキュリティの比較

### Spring AI
- 基本的なセキュリティ機能
- 標準化された認証・認可
- シンプルな実装

### Spring MCP
- カスタマイズ可能なセキュリティ実装
- 詳細なアクセス制御
- 複雑なセキュリティ要件に対応可能

## まとめ

Spring AIとSpring MCPは、それぞれ異なる特徴と利点を持つアプローチです。プロジェクトの要件や規模に応じて、適切なアプローチを選択することが重要です。

- **Spring AI**: シンプルで迅速な実装が必要な場合に適しています
- **Spring MCP**: 複雑な要件や大規模なプロジェクトに適しています

## 参考資料

- [Spring AI公式ドキュメント](https://spring.io/projects/spring-ai)
- [Spring Boot公式ドキュメント](https://spring.io/projects/spring-boot)
- [Spring Framework公式ドキュメント](https://spring.io/projects/spring-framework)
【EC2】sudoしないとS3にファイルアップロード出来なくなったぞ！？【脱初心者】

少しキャッチーなタイトルを考えてみました。

これは、私が実際に業務で体験した話です...👻

# 一体、何が起きたのか...
AWS上の運用保守用サーバとして、EC2を用意していました。
このサーバにはAWS CLIを導入しており、以下のコマンドでS3にファイルを転送していました。
```
aws s3 cp hoge-file s3://hoge-bucket 
```
参考：[オブジェクトのコピー](https://docs.aws.amazon.com/ja_jp/cli/v1/userguide/cli-services-s3-commands.html#using-s3-commands-managing-objects-copy)

<b>が、しかし！</b>
いつの間にか、上記のコマンドでは認証エラーが発生するようになっていました。

<b>一方でsudoコマンドを使った場合は、今まで通りファイル転送できることが分かりました。</b>

```
# 認証エラーが発生してしまう
aws s3 cp hoge-file s3://hoge-bucket

# 認証エラーは発生せず、ファイル転送に成功する
sudo aws s3 cp hoge-file s3://hoge-bucket
```

# 現状の整理
改めて、認証周りの設定を確認しました。

- **EC2にはIAMロールが付与され、S3へのファイル転送が許可されている**
- **S3のバケットポリシーでは、EC2からのアクセスだけが許可されている**
- **EC2には、`aws configure`コマンドで認証情報が設定済み**
 - **設定した認証情報はフェデレーテッドユーザーのものであり、認証情報が一時的なものである（有効期限が切れると使えない）**
 
 https://aws.amazon.com/jp/blogs/news/connect-to-amazon-athena-with-federated-identities-using-temporary-credentials/

どうやら作業の過程でaws configureしてしまい、EC2に重複した認証情報が設定されていたようです。

![pic1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120542/d30ad8eb-4caa-4c12-aadb-915894afc08b.png)

# 「認証情報の優先度」について
今回の原因は、まさに[このドキュメント](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-authentication.html#cli-chap-authentication-precedence)に書いてある内容でした。

(以下、AWS CLI の公式ドキュメントを意訳)
> 認証情報は複数の箇所で設定可能であり、それぞれの設定には優先順位があります。AWS CLI において、認証情報は次の順序で優先されます。
>
> **1. コマンドラインオプション**
> --region、--output、--profile パラメータなど
> **2. 環境変数**
> **3. Assume role / ウェブIDを利用したAssume role**
> 　`assume-role` 等のコマンドで IAM ロールのアクセス許可を継承
> **4. AWS IAM Identity Center**
> **5. credentials ファイル**
>  　`aws configure` を実行すると設定される
> **6. カスタムプロセス**
> 　外部ソースから認証情報を取得
> **7. config ファイル**
> 　 `aws configure` を実行すると設定される
> **8. コンテナの認証情報**
> 　ECSのタスクロールのこと（のはず...）
> **9. EC2 インスタンスプロファイルの認証情報**
> 　EC2への、IAM ロールの関連付け

つまり私の環境では、コマンドを実行すると次のような処理がされていたのでした。

### sudoなしの場合
1. 上述の優先度に沿って、CLI が認証情報を確認する
1. **`/home/ec2-user/.aws` に credentials ファイルが存在する（優先度5に該当）**
1. credentials ファイルに設定されたフェデレーテッドユーザーが認証情報として利用される
1. **一時的な認証情報の有効期限が切れており**、コマンドに失敗する


### sudoあり（Root環境）の場合
1. 上述の優先度に沿って、CLI が認証情報を確認する
1. **`/root/.aws` に credentials ファイルが存在しない**
1. EC2 インスタンスプロファイル（IAMロール）が認証に利用される（優先度9に該当）
1. IAMロールはS3へのアクセスを許可しているため、コマンドが成功する

# AWS CLI を使いたくなったときは
aws configure で永続的な認証情報を保存する方法は、セキュリティ面で推奨されていません。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-quickstart.html#getting-started-prereqs-keys

一方で、一時的な認証情報を利用する場合では、認証情報を毎回設定し直す必要が生じます。


もし既に EC2 がデプロイ済（予定）ならば、IAMロールを設定したEC2から AWS CLI のコマンドを実行するのが良いかもしれません。
SAP C_C4H47_2503 試験問題

2025年に向けたSAP C_C4H47_2503試験の合格を目指すなら、CertsTimeが提供する「究極のPDF問題集」があなたの最強の味方になります。このPDF問題集は、最新のSAP認定試験内容に完全準拠しており、出題傾向や難易度、構成をリアルに再現しています。そのため、試験本番と同じ感覚で実践的な学習が可能です。繰り返し解くことで理解が深まり、自信を持って試験に臨めるようになります。
今すぐ訪問: https://www.certstime.com
また、CertsTimeのC_C4H47_2503 PDF問題集は、いつでもどこでも学習できる利便性が魅力です。通勤時間やちょっとした隙間時間にも活用できるため、忙しい社会人や学生にも最適です。定期的なアップデートにより、常に最新の情報に基づいた学習が可能で、不安や無駄を取り除き、効率的に合格を目指せます。確実な成果を求めるなら、CertsTimeの教材で一歩先の準備を始めましょう。
Xcodeを使う際にメモリが足りなくなる問題

XCodeに搭載のAIを使ってる？TGOnDeviceInferenceProviderServiceのプロセスが自動補完中に1.5GB~3GBあたりを推移しています。
そうなると16GB搭載のMacでもスワップが数GBとられるのでいらなければXcode->Settings->TextEditing->Editing->Predictive code completionのチェックを外すとTGOnDeviceInferenceProviderServiceのプロセスは300MBぐらいに収まりました。
Salesforce Data Cloudは、うちに必要なのか？──SalesforceユーザーのためのCDP導入読本（非公式）

![DataCloud.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4105666/cc45e474-582e-4cf3-8489-427b20bbdc64.png)


Salesforce Data Cloudって聞いたことはあるけど、結局なにができるのかわからない」「CRMやMarketing Automationと何が違うの？」
そんな声を、Salesforceの導入支援やデータ基盤構築の現場で数えきれないほど耳にしてきました。

本記事では、私が出版した書籍『Salesforce Data Cloudは、うちに必要なのか？──SalesforceユーザーのためのCDP導入読本（非公式）』について、執筆の背景や本書の構成、どんな方に読んでいただきたいかを紹介します。
[Salesforce Data Cloudは、うちに必要なのか？（Amazonリンク）](https://amzn.to/4dka6Gc)


### なぜこの本を書いたのか──現場で感じた「Data Cloud、よくわからない」問題
私はこれまで、外資系SaaS企業やITベンダーで、Salesforce製品の導入支援やCDPの構想策定に数多く関わってきました。特にData Cloudに関しては、構想段階からPoC（概念実証）、そして導入可否判断の支援を行う中で、ある共通の課題に気づきました。

それは、「製品の概要はなんとなくわかっても、実際に“何ができて、何ができないのか”がつかみにくい」という点です。
公式の資料は充実していても、抽象的だったり、実装者目線でのリアルな導入プロセスが語られていなかったりと、現場で求められている情報とのギャップを感じることが多くありました。

この本は、そうした声に応えるために、専門的な用語や機能一覧ではなく、「現場でData Cloudと向き合うとどう感じるのか？」という視点から執筆した、非公式ガイドブックです。

### 本書の構成と読みどころ──機能説明からPOC設計、ユースケースまで
本書ではまず、Data Cloudの基本的な概念を、CRMやMA、DWH、データレイクと比較しながら解説しています。Salesforceユーザーが「Data Cloudは他と何が違うのか？」を理解しやすくすることを重視しました。

また、ただ機能を説明するだけでなく、PoC（概念実証）をどのように設計するか、どんな情報を事前に整理しておくべきか、実際の導入検討時に見えてくる落とし穴やユースケースなど、実務に基づいた内容を詰め込んでいます。

たとえば、以下のような悩みにヒントを与える構成になっています。

Salesforce内のどのデータをData Cloudで扱うべきか

「とりあえず始めてみる」ために、最低限必要な準備とは？

MAやCRMとのデータ連携はどこまで自動化できるのか？

ドキュメントでは伝わりにくい「使ってみた感覚」や「現場でのつまずきポイント」も含めて、現実的な目線で書いています。

### 誰に読んでほしいか──検討段階の方、まずはこの一冊を
この本は、すでにData Cloudの検討を始めているものの、「社内を説得できる材料が足りない」「どう比較検討すればいいか迷っている」という方に特におすすめです。

また、Salesforceの営業担当者やパートナーの方が、顧客への提案を考える上での参考資料としても活用できる内容を意識しました。

製品のパンフレットや技術マニュアルではなく、「使うかどうかを悩んでいる現場」の視点から、機能や導入プロセスを整理した実用書です。Salesforceユーザーにとって、Data Cloudという新しい選択肢が、自分たちにとって“本当に必要なものなのか”を考えるための、最初の一冊になれば幸いです。
[Salesforce Data Cloudは、うちに必要なのか？（Amazonリンク）](https://amzn.to/4dka6Gc)
OST ファイルから電子メールを取得するにはどうすればよいですか?

OST（オフライン ストレージ テーブル）ファイルは、Microsoft Outlook によって作成され、Exchange、IMAP、または Office 365 アカウントを使用しているときに、メールボックスデータの同期コピーを保存します。これにより、ユーザーはサーバーに接続していない場合でも、メール、予定表、連絡先にアクセスできます。ただし、OST ファイルは作成された特定の Outlook プロファイルとシステムにバインドされているため、スタンドアロンでのアクセスと取得は複雑になります。
<h2>OSTファイルからメールを取得する必要がある一般的なシナリオ</h2>
<ul><li>Exchange サーバーまたは Outlook プロファイルが利用できなくなりました。</li>
<li>ユーザーが新しいシステムまたはメールクライアントに移行しています。</li>
<li>OST ファイルが誤って削除または破損したために孤立しています。</li>
<li>予期せぬクラッシュやフォーマットが発生した後、メールの復元が必要です。</li>
<li>このような場合、直接アクセスできないこともあるため、変換ツールや専用ツールが必要になることがよくあります。</li>
<h2>OSTファイルへのアクセスにおける課題</h2>
<ul><li>各OSTファイルは、元のシステムのOutlookプロファイルとメールボックス設定に緊密にリンクされています。このリンクは保護および暗号化されており、適切な認証やサーバー接続がない他のシステムやユーザーからのアクセスは防止されます。</li>
<li>OSTファイルを別のコンピューターに移動しても、元のメールボックスに接続されていない限り、Outlookはファイルを開くことができません。ファイルは、最初にPSTに変換するか、元のプロファイルからアクセスしない限りアクセスできないため、取得は困難です。</li>
<li>OSTファイルをデバイス間またはネットワーク間でコピーすると、破損につながる可能性があります。さらに、適切なツールを使用しないと、メールデータの整合性が損なわれる可能性があります。また、暗号化せずにOSTファイルをシステム間で共有する場合、プライバシーとコンプライアンスに関する懸念もあります。</li></ul>
<h3>OSTファイルからメールを手動で取得するには？</h3>
OSTファイルからメールを手動で取得したい場合は、以下の手順に従ってOutlookのインポート/エクスポート機能を使用してください。
<ol><li>まず、Outlookを起動し、ファイルオプションをクリックします。</li>
<li>「開いてエクスポート」をクリックし、「インポート/エクスポート」をクリックします。</li>
<li>「ファイルにエクスポート」を選択し、「次へ」ボタンをクリックします。</li>
<li>Outlookデータファイルを参照し、「次へ」ボタンをクリックします。</li>
<li>復元するOutlookメールボックスフォルダーを選択します。</li>
<li>保存先パスを選択し、「完了」ボタンをクリックします。</li>
</ol>
<h3>手動による方法がない</h3>
<ul><li>エクスポートには多くの時間と労力がかかります。</li>
<li>この方法を使用するには、ユーザーはOutlookの機能に精通している必要があります。</li>
<li>この方法を使用するには、Outlookのインストールとアクティブなプロファイルが必要です。</li></ul>
<h3>自動化されたアプローチでOSTファイルからメールを取得するには？</h3>
OSTファイルのみがあり、そこからデータを取得したい場合は、BitRecover <a href=”https://www.bitrecover.com/jp/ost-to-pst-conversion/”>OST to PST Conversion</a>をご利用ください。このソフトウェアは、OSTファイルを一括変換でき、情報を失うことなく完全に維持された結果を提供します。
<ol><li>自動ソフトウェアをダウンロードしてシステムに実行してください。</li>
<li>設定されたOutlookメールボックスデータをクリックし、「次へ」ボタンを押してください。</li>
<li>復元するOSTメールボックスフォルダを参照してください。</li>
<li>保存オプションの一覧からPSTファイルを選択してください。</li>
<li>保存先パスを選択し、「次へ」ボタンを押してOSTファイルからメールを取得してください。</li>
</ol>
<h4>自動化アプローチの利点</h4>
<ul><li>このソフトウェアは、<a href=”https://www.bitrecover.com/blog/ost-to-mbox/”>Convert OST to MBOX</a>、PDF、PST、EMLに変換でき、37種類以上の保存オプションが用意されています。</li>
<li>シンプルな操作インターフェースで、あらゆるユーザーにとって信頼性の高いツールです。</li>
<li><a href=”https://www.bitrecover.com/blog/batch-import-ost-file-into-outlook/”>Import OST to Outlook</a>、Thunderbird、Microsoft 365、Gmail、Zimbra、そしてすべてのIMAP対応サーバーにOSTをインポートすることもできます。</li>
<li>このウィザードでは、日付範囲、開始日、終了日、受信日時、件名、年別のPST作成など、高度なフィルターも使用できます。</li>
<li>このソフトウェアでは、OSTファイルを個別に、または一括で変換できます。制限はありません。</li>
</ul>
<h4>結論</h4
<p>このガイドでは、OSTファイルからメールを取得する手順を、手動と自動のアプローチで説明しました。Outlookをインストールし、OutlookプロファイルでOSTファイルを暗号化している場合は、手動のアプローチで取得できます。そうでない場合は、結果が維持され、一度に複数のOSTファイルを一括変換できる自動アプローチをお勧めします</p>
「デザイン未経験から始める画像副業入門｜Canvaで1週間で作れる広告バナー講座」

① はじめに

副業を始めたいけど、何からやればいいかわからない――
そんな方に向けて「デザイン副業」という選択肢を紹介したくて、このnoteを書きました。

私は現在、広告デザインの勉強をしている中で、
**「初心者でも手軽に始められて、案件につながるデザイン副業」**をテーマに情報を発信しています。

このnoteでは、特別なスキルがなくても使える「Canva」を使って、
誰でも1週間で広告用バナーを作れるようになる方法をまとめました。

⸻

② このnoteで得られること
	•	Canvaの基本操作とテンプレ活用術
	•	実際に作れる広告バナーのサンプル例
	•	デザイン未経験者が避けがちなミスとその回避法
	•	初心者が受けられる案件の探し方・応募のコツ
	•	案件で通用するための「伝わるデザイン」の考え方

⸻

③ Canvaは副業に最適なツール

AdobeのIllustratorやPhotoshopと比べると、
Canvaは確かに簡易的なツールかもしれません。

しかし、**「誰でも今すぐ使えて」「無料でも多機能」**という意味では、
副業デビューにおいては圧倒的に効率の良いツールです。

実際にSNSやブログ、YouTubeなどの広告画像はCanvaだけで作っている人も多く、
「稼げる現場」でも十分に通用しています。

⸻

④ 画像制作で副業が成立する理由

現在、インターネット広告の市場規模は年々右肩上がりに成長しています。

つまり「広告バナー」「SNS画像」などのデザイン需要は増加する一方。
スキルがある人はもちろん、**「すぐ動ける人」にチャンスが回ってきやすい」のが現状です。

⸻

⑤ 案件獲得のステップ（初心者向け）
	1.	ポートフォリオ（Canva作成）を3〜5点用意
	2.	クラウドワークス／ココナラに出品
	3.	応募文テンプレを準備（自分の強みを明確に）
	4.	価格設定は「実績作り用」でスタート
	5.	実績がついたら単価UP＆発信強化

⸻

⑥ デザインは「伝える力」を育てる

デザインとは、ただ見た目を整えるだけの技術ではありません。
「誰かに、何かを、正しく伝えるための手段」です。

この力は、仕事でも日常でも、あらゆる場面で活かせます。
だからこそ、画像制作を通して「デザイン副業」に挑戦することは、
あなた自身の可能性を広げる経験になると、私は信じています。

⸻

⑦ まとめ
	•	副業としてのデザインは、今からでも遅くない
	•	Canvaはその第一歩に最適なツール
	•	市場の伸び・需要は確実に存在している
	•	デザインはスキル以上に「伝える力」そのもの

このnoteが、あなたの一歩を後押しできれば幸いです。
BIOSの入口を探す

## 「手探りでCUI OS作成に挑む」連載

この記事は「手探りでCUI OS作成に挑む」連載の一部です。
全体の目次は[「手探りでCUI OS作成に挑む」連載目次](https://qiita.com/earthen94/items/b5d77f98f0cf85a13346)を御覧下さい。

## 実験
BIOSの入口を見つけることが目的です。
CPUは電源が入れられた直後FFFF:0にある命令を実行します。
その後F000:0xFFF0にあるBIOSの入口へ跳びます。
初め`FFFF:0`の位置に`JMP 0xF000:0xFFF0`があり直接BIOSの入口へ跳ぶものと思っていました。
しかし8086で見てみると`FC00:205B`へ跳んでいることがわかりました。
そこでブートローダからそれらのアドレスへ跳び、ブートローダへ戻って来られるか（戻ってくるということはそこにあるデータは何かしらの初期化処理であるということ）を検証することにしました。

## FFFF:0のコード
アドレスFFFF:0にあるの命令を確認すると`JMP FC00:205B`となっていました。
このFC00:205Bから実行していくのだと思われますが、念の為8086実機で実験を行いました。

![微信图片_2025-06-04_182348_154.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4054974/0cb8584a-bd10-4db9-81ae-ff98cfc64c92.png)

ブートローダから`0xFC00:0x205B`へ跳ぶプログラムを書いたところ再起動を無限に繰り返していたため、`0xFC00:0x205B`から一行ずつ実行していけばいつかは`7c00`へ辿り着くことが証明できました。
```boot.asm
[org 0x7C00]
bits 16

start:
    jmp 0xFC00:0x205B

times 510-($-$$) db 0
dw 0xAA55

```

## 一般的なBIOS入口
一般的なBIOSの入口である`F000:0xFFF0`へ跳ぶプログラムも書いて試してみたが結果は全く同じで再起動を繰り返しました。
よって`0xFC00:0x205B`から実行していき、`F000:0xFFF0`も通過するということでしょう。
```
[org 0x7C00]
bits 16

start:
    jmp 0xF000:0xFFF0

times 510-($-$$) db 0
dw 0xAA55
```

動作結果を載せたかったのですが、GIFを何度貼っても失敗するので諦めます。

## 仮説
`0xFC00:0x205B`から実行していき、どこかで`0xF000:0xFFF0`へ跳び、最終的にブートローダ`7c00`へ辿り着くのだと思います。
無料Webホスティングサービスまとめ

こんにちは！名無しのnです。
投稿遅くてごめんなさい「

無料で利用できるWebホスティングサービスには様々な選択肢があります。ここでは、代表的なサービスの特徴、メリット・デメリット、評判についてまとめました。

## 人気の無料Webホスティングサービス15選

### XREA Free
XREA Freeは、無料で利用できるレンタルサーバーで、広告付きながらも独自ドメインの利用が可能です。WordPressにも対応しており、個人サイトの運営に適しています。

**メリット**
- 独自ドメイン利用可
- WordPress対応
- 無料SSL対応

**デメリット**
- 広告表示あり
- サポートが限定的

### SterServer Free
SterServer Freeは、広告なしプランがある無料ホスティングサービスです。PHP・MySQLに対応しており、比較的自由度の高い運用が可能です。

**メリット**
- PHP・MySQL対応
- 容量増加可能
- 広告なしプランあり

**デメリット**
- PCユーザー向け
- 商用利用制限あり

### 忍者ホームページ
忍者ホームページは、初心者向けの無料ホスティングサービスで、最大10サイトまで運営可能です。簡単にサイトを作成できるため、個人ブログやポートフォリオに適しています。

**メリット**
- 初心者向け
- 簡単にサイト作成可能
- 最大10サイト運営可

**デメリット**
- 容量が少なめ
- 有料プランへの移行が必要な場合あり

### Wix Free
Wix Freeは、ドラッグ＆ドロップで簡単にサイトを作成できる無料プランを提供しています。デザインの自由度が高く、初心者でも簡単に利用できます。

**メリット**
- デザインの自由度が高い
- 無料でサイト作成可能
- 独自ドメイン不要

**デメリット**
- 広告表示あり
- 独自ドメイン利用不可

### InfinityFree
InfinityFreeは、完全無料で広告なしのホスティングサービスを提供しています。無制限の帯域幅とディスクスペースが特徴です。

**メリット**
- 広告なし
- 無制限の帯域幅
- 無制限のディスクスペース

**デメリット**
- サポートが限定的
- 一部機能制限あり

### 000WebHost
000WebHostは、無料で利用できるホスティングサービスで、WordPressのインストールが可能です。初心者向けの簡単な管理画面が特徴です。

**メリット**
- WordPress対応
- 簡単な管理画面
- 無料SSL対応

**デメリット**
- 広告表示あり
- サポートが限定的

### FreeHosting
FreeHostingは、無料で利用できるホスティングサービスで、独自ドメインの利用が可能です。比較的高機能なサービスを提供しています。

**メリット**
- 独自ドメイン利用可
- 無料SSL対応
- 高機能な管理画面

**デメリット**
- 広告表示あり
- サポートが限定的

### AwardSpace
AwardSpaceは、広告なしで利用できる無料ホスティングサービスです。WordPressのインストールが可能で、初心者向けの簡単な管理画面を提供しています。

**メリット**
- 広告なし
- WordPress対応
- 無料SSL対応

**デメリット**
- 容量制限あり
- サポートが限定的

### ByetHost
ByetHostは、無料で利用できるホスティングサービスで、無制限の帯域幅を提供しています。比較的高機能なサービスを提供しています。

**メリット**
- 無制限の帯域幅
- 高機能な管理画面
- 無料SSL対応

**デメリット**
- 広告表示あり
- サポートが限定的

### FreeWebHostingArea
FreeWebHostingAreaは、無料で利用できるホスティングサービスで、広告なしのプランを提供しています。比較的自由度の高い運用が可能です。

**メリット**
- 広告なしプランあり
- PHP・MySQL対応
- 無料SSL対応

**デメリット**
- 容量制限あり
- サポートが限定的

### Hostinger Free
Hostinger Freeは、無料で利用できるホスティングサービスで、WordPressのインストールが可能です。初心者向けの簡単な管理画面が特徴です。

**メリット**
- WordPress対応
- 簡単な管理画面
- 無料SSL対応

**デメリット**
- 広告表示あり
- サポートが限定的

### GoogieHost
GoogieHostは、無料で利用できるホスティングサービスで、広告なしのプランを提供しています。比較的自由度の高い運用が可能です。

**メリット**
- 広告なしプランあり
- PHP・MySQL対応
- 無料SSL対応

**デメリット**
- 容量制限あり
- サポートが限定的

### 5GBFree
5GBFreeは、無料で利用できるホスティングサービスで、5GBのディスクスペースを提供しています。初心者向けの簡単な管理画面が特徴です。

**メリット**
- 5GBのディスクスペース
- 簡単な管理画面
- 無料SSL対応

**デメリット**
- 広告表示あり
- サポートが限定的

### FreeHostia
FreeHostiaは、無料で利用できるホスティングサービスで、広告なしのプランを提供しています。比較的自由度の高い運用が可能です。

**メリット**
- 広告なしプランあり
- PHP・MySQL対応
- 無料SSL対応

**デメリット**
- 容量制限あり
- サポートが限定的
- ## まとめ
- えらんで使ってくださいw
##おすすめ

[{js}この要素は存在するか？変数まで！関数を作ったよ！](https://qiita.com/Nanashinon/items/81c603eac38d2588ce96)
[最新のきじ](https://qiita.com/Nanashinon)
【備忘録】Gitで毎回認証を求められる事案を回避する

ときおり、意図せぬヒューマンエラーによって設定がおかしくなり、Gitのpushやpullに対して毎回認証を求められる…という事象が発生します。

初学者に対してレクチャーをするときは特に発生します。
長年、いまひとつクリティカルな答えへ辿り着けずにいたのですが、設定を弄る中で「これだ！」となったので、

URL … https://hogehoge.com/username/myrepo.git
ユーザ名 … username
メールアドレス … username@fugafuga.com
パーソナルアクセストークン … accesstoken

として、GitBash上で表題の事案を回避していきましょう。
※筆者はWinユーザーです。

---

```bash
# Git init済みのローカルリポジトリ
$ cd ~/myrepo

# もしもgit config設定済みだったらスキップしてどうぞ
# --local, --globalはお任せします
$ git config --global user.name username
$ git config --global user.email username@fugafuga.com

# 認証求められちゃう人はこの時点で求められる
# git credential managerが表示されて、ユーザ名とパスワードの入力を求められちゃう（もしくはアクセストークンのみ）
$ git pull

# これが特効薬（リポジトリ毎に設定すること）
$ git remote set-url origin https://username:accesstoken@hogehoge.com/username/myrepo.git

# 認証求められなくなれば成功
$ git pull
```

おそらくGitHub,BitBucket,GitLab全部に共通して使える設定。今後も検証していくけどようやくスッキリしました。
Networked属性の裏側：Photon Fusionの同期の仕組み

## はじめに
Photon Fusionは、高性能・高柔軟性なネットワーク同期システムを提供する次世代ネットワークライブラリです。  
その中でも特に重要な役割を担っているのが、`[Networked]` 属性です。

この属性を使うことで、**プレイヤーの位置やアニメーション状態、ゲーム内オブジェクトの変化**などを自動的に同期でき、煩雑な手動のデータ送受信処理を省くことができます。

本シリーズでは、Fusionの内部同期処理を段階的に掘り下げて解説していきますが、今回は、`[Networked]` 属性の裏側で何が起きているのか、どのようにして自動同期が実現されているのかを詳しく見ていきます。

## Fusionにおける[Networked]属性の同期処理概要

### `[Networked]` 属性は？
Fusionでは、`[Networked]` 属性が付与されたプロパティは**ネットワーク状態の同期対象**として扱われますが、ユーザーが手動で同期コードを書く必要はありません。  
この仕組みは、Unityが提供する **ILPostProcessor API** を活用しており、C# で書かれたコードをビルド後に**IL（中間言語）レベルで自動変換**しています。

具体的には、以下のような処理が行われます：

- `NetworkedWeaved` という属性を追加して、該当プロパティがネットワーク状態バッファに割り当てられることを明示
    
- getter/setter が `NetworkBehaviour` の内部バッファ（`StateBuffer`）への**メモリアクセスに差し替え**られる
    
- 実行時に `Spawned()` されていない場合のアクセス制限も挿入される
    

### 変換前のC#コード：

```csharp
	[Networked] private Vector2 _position { get; set; }
```

### IL変換後（ILSpyで逆コンパイルしたコード）：

```csharp
    [Networked]  
    [NetworkedWeaved(0, 2)]  
    private unsafe Vector2 _position  
    {  
        get  
        {  
            if (base.Ptr == null)  
            {  
                throw new InvalidOperationException("Error when accessing PhotonCapybara._position. Networked properties can only be accessed when Spawned() has been called.");  
            }  
            return (Vector2)base.Ptr[0];  
        }  
        set  
        {  
            if (base.Ptr == null)  
            {  
                throw new InvalidOperationException("Error when accessing PhotonCapybara._position. Networked properties can only be accessed when Spawned() has been called.");  
            }  
            Unsafe.Write(base.Ptr + 0, value);  
        }  
    }
```


### 補足解説：

- `base.Ptr` は `NetworkBehaviour` に割り当てられた**ネットワーク状態メモリの先頭ポインタ**です。
    
- `base.Ptr[0]` はオフセット0の位置からデータを読み書きします（ここでは `_position` のデータが格納されている）
    
- `Unsafe.Write()` を使うことで、型変換を伴わない**高速なバイナリ書き込み**が可能になります
    
- `NetworkedWeaved(0, 2)` の `0` はオフセットインデックス、`2` は使用ワード数（32bit単位）を示します
    

## 見えない同期の仕組みを理解することの意味

`[Networked]` 属性は、一見ただのマークアップのように見えますが、実際には**ILレベルで動作を拡張し、パフォーマンスと汎用性を両立した設計**になっていることがわかりました。

Fusionを「使う」だけでなく「理解して使う」ためには、こうした仕組みを知ることが非常に重要です。  
今後の記事では、さらに深く掘り下げていきます。
fetchを使ったデータ送受信

## データ取得(GET)

```php:
 ①どこからdata取得？ メソッドはPOST / GET /PUT /DELETE？
 fetch("https://jsonplaceholder.typicode.com/todos", {
      method: "GET"})

 ② お決まり文
 .then(response => response.json())

 ③送りたいdataを入れる変数名　作成
 .then(myData => {

 ④data表示方法 htmlで / table? P? h１？
 let item = `<tr><th>Id</th><th>Title</th></tr>`;
 # tableでIDとTitleを一覧で表示したい

 ⑤ data表示方法　詳細 書く
 myData.forEach(users => {
         item += `<tr>
         <td>${users.id} </td>
         <td>${users.title}</td>        
         </tr>`;
      });
 # 変数itemでdataを表示
 # 配列usersからitemにdataを渡して表示
 
 ⑥ DOM生成し、jsonをhtmlにする
 document.getElementById("manager").innerHTML = item;
   });

 ⑦ html全文
 <h2>Display Data</h2>
<div>
   <!-- Displaying retrevie data-->
   <table id = "manager"></table>
</div>
```

### fetch / awaitでデータ更新 
 よく一緒に使う、fetchとawait
 使う目的  : codeを読みやすくする

```php:
async function modifyData(){
      try{
         const myRes = await fetch("https://jsonplaceholder.typicode.com/todos/21", {
            method: "PUT",
 
            body: JSON.stringify({
               id: 24,
               title: "Mina leaves in Delhi",
            })
         });
         if (myRes.status == 200){
            console.log("Data updated successfully")
         } else {
            throw new error("Error Found:", myRess.status)
         }
      } catch(err){
         console.error(err)
      }
   }
   modifyData();


  # 解説
  ① async用関数 作る
  async function modifyData(){

  ② お決まり文 try
  try{

  ③ await fetch関数作る
  

  ④データ更新成功 / データ更新失敗 / それ以外の処理を書く」
   if (myRes.status == 200){
            console.log("Data updated successfully")
         } else {
            throw new error("Error Found:", myRess.status)
         }
      } catch(err){
         console.error(err)
      }
   }

  　⑤ data更新成功　必ずステータスcodeつける
   if (myRes.status == 200){
　　  // 処理

   ⑥ async関数 読み込み
   modifyData();
```

### data 送信

```php:
const newRequest = new Request("https://jsonplaceholder.typicode.com/todos", {
      method: "POST",
   
      // 送るdata指定
      body: JSON.stringify({
         id: 290,
         title: "Today is the rainy day. I like rain",
      }),
      // ヘッダー指定
      headers:{"Content-type": "application/json; charset=UTF-8"}
   });
   fetch(newRequest)
   .then(response => response.json())
   .then(myData => {
      console.log("送信成功");
   
      // Display output in HTML page
      document.getElementById("sendData").innerHTML = JSON.stringify(myData);
   })
   .catch(err=>{
      console.error("エラー発生:", err);
   });
```
既存のログイン機能に、「パスワードを忘れた場合」を追加する。

こちらの記事に追加でする機能です
https://text.geek-salon-products.com/article/show?course_id=1&article_id=186

# 1.gemの追加
Gemfileを開き、以下の行をgroup :developmentブロック内に追加


```ruby:Gemfile
 gem "letter_opener_web"
```

追加したら、ターミナルで以下のコマンドを実行

```ruby:bush
 $ bundle install
```

# 2.ルーティングの設定
config/routes.rbを開き、以下のように編集
```ruby:routes.rb
 mount LetterOpenerWeb::Engine, at: "/letter_opener" if Rails.env.development?
```

# 3.開発環境の設定
config/environments/development.rbを開き、以下の設定を追加
```ruby:develop.rb
  #メール設定
  config.action_mailer.perform_deliveries = true
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
  config.action_mailer.delivery_method = :letter_opener_web
  config.action_mailer.perform_caching = false
  
  # letter_opener_webの設定
  config.action_mailer.default_options = { from: 'no-reply@example.com' }
```

# 4.カスタムコントローラーの作成
app/controllers/users/passwords_controller.rbを作成し、以下の内容を追加
```ruby:passwords_controller.rb
# POST /resource/password
  def create
    self.resource = resource_class.send_reset_password_instructions(resource_params)
    yield resource if block_given?

    if successfully_sent?(resource)
      respond_to do |format|
        format.html { redirect_to letter_opener_web_path, notice: t('devise.passwords.send_instructions') }
        format.json { render json: { message: t('devise.passwords.send_instructions') }, status: :ok }
      end
    else
      respond_with(resource)
    end
  end
```

# 5.日本語化の設定
config/locales/devise.ja.ymlを作成し、以下の内容を追加
```ruby:yaml
 ja:
  devise:
    passwords:
      new:
        title: "パスワードをお忘れですか？"
        submit: "パスワード再設定方法を送信する"
      edit:
        title: "パスワードを変更する"
        new_password: "新しいパスワード"
        confirm_new_password: "新しいパスワード（確認用）"
        submit: "パスワードを変更する"
      no_token: "パスワードリセットのメールからこのページにアクセスしてください。"
      send_instructions: "パスワードのリセット方法を数分以内にメールでご連絡します。"
      send_paranoid_instructions: "メールアドレスが登録済みの場合、パスワード再設定用のメールが数分以内に送信されます。"
      updated: "パスワードが正しく変更されました。"
      updated_not_active: "パスワードが正しく変更されました。"
    mailer:
      reset_password_instructions:
        subject: "パスワードの再設定について"
        greeting: "%{recipient}様"
        instruction: "パスワード再設定の依頼を受けたため、メールを送信しています。下のリンクからパスワードの再設定ができます。"
        action: "パスワードを変更する"
        instruction_2: "このメールに心当たりがない場合は、無視してください。"
        instruction_3: "上のリンクにアクセスして新しいパスワードを設定するまで、パスワードは変更されません。"
```

# 動作確認
1.ブラウザで http://localhost:3000/users/sign_in にアクセス
2.「パスワードをお忘れですか？」のリンクをクリック
3.メールアドレスを入力して「パスワード再設定方法を送信する」をクリック
4.自動的に http://localhost:3000/letter_opener に遷移し、送信されたメールが表示される
5.メール内の「パスワードを変更する」リンクをクリック
6.新しいパスワードを入力して変更完了

# エラーが出る場合
1.サーバーが起動しない場合：
すべてのRubyプロセスが終了していることを確認
tmp/pids/server.pidファイルが削除されていることを確認

2.メールが表示されない場合：
開発環境の設定が正しいか確認
letter_opener_webのルーティングが正しく設定されているか確認

3.パスワードリセットリンクが機能しない場合：
config.action_mailer.default_url_optionsの設定を確認

4.メールアドレスがデータベースに登録されているか確認
AWS業務未経験者がUdemy問題集だけでAWS CLFを2週間で取得した勉強法！

# 概要
- 業務未経験者がAWS CLFを2週間の勉強で取得できたのでその勉強法を記載
- 合格するまでに実施したこと、注意点などを記述する

# 自己紹介
- オンプレ保守を約３年間経験
- AWSは完全業務未経験

# 受験動機
- オンプレの保守を約３年間経験して物理作業や夜間対応に課題を感じた
- AWSの技術を駆使すれば物理作業や夜間対応の課題をリモート管理や自動化できると考えた
- まずはクラウドシェアNo1のAWS認定試験がとっつきやすいと思った
- クラウド領域に転職したいと考えていた為

# 合格時の点数
**706/1000**
合格ラインが7割なのでぎりぎりの合格でした。
AWS CLFは試験の合否が終わってすぐ表示されるので「合格」の文字を見たときは安心しました笑

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4097535/412ca3bf-63ad-4d44-815e-eb9e9cf6f906.png)

# 受験前の理解レベル
- 専門学校時代の卒業研究で**S3バケット**を利用した経験はあり。その他のサービス名は皆無
- 業務完全未経験

**つまり99%何も知らない状態での勉強スタートでした。**

# 使用した教材
- UdemyのCLF教材のみ

https://www.udemy.com/course/aws-4260/?couponCode=ST21MT30625G2

AWSの全体像を掴むというよりかは、AWS CLFはほぼサービスの概要を覚える問題と聞いていたので問題集を周回しまくって模擬試験の得点率を上げる作戦でいきました。
後にAWS SAAを受験する方はYouTubeや参考書を読んで軽く全体像を掴んでから問題集に移ると
効率よく学べると思います。

**※Udemyの教材はセール時に購入して下さい。**
私はセール時、1500円で購入しました。

最近は**Ping-T**でもAWS CLFの問題集がリリースされたことやAWSが出している**公式模擬問題集**もあるので、そちらを利用してみるのもいいと思います。


# 勉強方法
### 手順
- まずは試験日を決定する
- 毎日1回分の模擬問題集を解く
- 見直しする
- 全部解き終えたらミス問題を理解するまで解く

### スケジュール
- 毎日2時間
- 通勤時間や会社の昼休憩にスマホでUdemyのミス問題確認

# 感想
本番は思った以上に難しかった印象です。
Udemyの模擬試験で9割取れていれば簡単と聞いていたのですが
おそらく、上記は参考書とセットで勉強している場合だと個人的に思います。

# 反省点
仕事をしながらの2週間だったので全部のミス問題を理解することが間に合いませんでした。
取得はできたものの合格ラインぎりぎりになってしまった。
業務完全未経験となると3週間ほどは勉強時間欲しいですね、笑
参考書を読んで軽く全体像を掴んでから問題集に移ると効率よく学べたと思うと少し後悔笑

# 実は…
AWSの試験は65問出題されて合格に必要な点数は7割です。
なので46問正解しないといけない…と思われがちですが、
**採点対象外の問題が15問もあるのです。**
つまり**実際に採点されているのは50問**ということ。
バカポジティブに捉えれば、**35問正解**すればいいのです。
※あくまで採点対象内での話ですが笑

# 注意点
**試験当日は身分証明書が2点必要です。**
これらを忘れてしまうと受験できないかもしれないので気をつけましょう。
現地に30分前には到着しているのがオススメです。

# 最後に
次回の記事ではAWS SAAの合格体験記を記載しようと考えています。
最後までお読みいただきありがとうございました。
エンジニアに人気？Arcブラウザ ｜「2025年以降 新機能開発を終了」

# The Browser Companyの Arcブラウザ 新機能開発を終了
エンジニアに人気と聞いたことがあるArcブラウザ。
2025年に新機能開発を終了するとのこと
「Dia」というAIブラウザ開発に注力したいらしいです

https://ameblo.jp/mojeld/entry-12908169708.html

Arcブラウザはchromeベースで処理も重そうで、
私には魅力的にうつらなかったのですが。

Arcの エンジニア人気は真実？

# AIブラウザ 「Dia」とは？
https://www.diabrowser.com/
macOS版は上記URLから↑[ダウンロード](https://www.diabrowser.com/)できるようです

![20250604at1847.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4088377/254dc8d8-c95c-4f22-a818-75231bc43ea8.gif)
重そうで、インストールなんか嫌かな。

ArcブラウザとDiaの統合はないようです