OmniAICreator/Qiita-1.07M huggingface dataset:
Progateで学ぶSQLインジェクション対策

## SQLインジェクションとは？

SQLインジェクションとは、悪意のあるユーザーがSQL文を意図的に壊したり、改変したりすることで、データベースの情報を不正に取得・操作できてしまう脆弱性のことです。

たとえば、以下のようなログインフォームを考えます：

- `/login` にアクセス
- `email` に存在するアドレスを入力
- `password` に `' OR 1=1 --` を入力すると…

本来ならパスワードが一致しなければログインできないはずが、「`OR 1=1`」により**条件が常に真**になってしまい、ログインに成功してしまいます。

## 改善前のコード（脆弱なコード）

```ts
const sql = `
  SELECT u.id, u.name, u.email, u.password 
  FROM users u 
  WHERE u.email='${email}' AND u.password='${password}'
`;
```
たとえば `password` に `' OR 1=1 --` を入力すると、SQLが次のようになります：

```
SELECT ... FROM users WHERE u.email='test@example.com' AND u.password='' OR 1=1 --'
```

このようになり、ログインが成功してしまう脆弱性が存在します。

---

## 改善後のコード(プレースホルダを使う)
この脆弱性を防ぐには、SQLにプレースホルダを使うことで防げます。
```
const user = await db.get(
  `SELECT u.id, u.name, u.email, u.password 
   FROM users u 
   WHERE u.email=? AND u.password=?`,
  email,
  password
);
```

このように書くことで、入力値が自動でエスケープ処理され、不正なSQL文として扱われることが無くなります。

## まとめ
- SQLインジェクションは、ユーザーの入力によってSQLが壊されてしまう脆弱性

- プレースホルダを使って、SQLインジェクションを防ごう

---
progateで学んだことをもとに書いてアウトプットしてます。
m.Tableでgrowingを使ったヘッダの固定（できなかったので備忘録として）

SAPUI5でm.Tableをテーブルのヘッダを固定するためには一般的なUIのニーズです。

デフォルトでは縦スクロールがサポートされていない。

それならば、growing機能を活用しつつ、CSSで無理やりヘッダを固定できないか検討。

各カラムのcolumnに対してaddStyleClassでクラスを追加すれば、CSSで固定スタイルが指定できるのでは？と考えた。

js
oColumn.addStyleClass("fixed-header");
css
.fixed-header {
  position: sticky;
  top: 0;
  background-color: white;
  z-index: 10;
}
このようなスタイルを適用すれば動くのでは、と思いました。

現実：うまくいかない
調査を進めていくと、思ったようにヘッダだけにスタイルを当てることができないことがわかってきました。

主な理由：
m.Tableはgrowingを使っていてもネイティブの縦スクロールをサポートしていない（代わりに自前でアイテムを追加・描画している）。

addStyleClassでクラスを追加すると、DOM的にはColumnだけでなく、各Cell（セル）にもそのクラスが適用される。

このため、「ヘッダだけにposition: stickyを使って固定する」といった、Web標準のアプローチができません。

なぜこれは問題か
position: stickyを使って要素を固定する場合、その対象が正確に指定されていないと意図しない位置の要素まで固定されてしまうことになります。今回のように、cellにも同じクラスが入ってしまうと、テーブル全体が崩れる可能性があります。

結論：m.Tableでは現実的ではない
m.Tableの構造上、縦スクロールやヘッダ固定を「Web標準の方法で実現する」のは難しいです。
sap.ui.table.Table（グリッドテーブル）であればネイティブスクロールとヘッダ固定がサポートされているため、今回のような要件がある場合にはそちらの使用を検討すべきです。

代替案として考えられること
sap.ui.table.Tableへのコンポーネント変更
Pythonで学ぶ残クレの罠：無限ループ構造で考える

## はじめに

「月々の支払いが安い」「3年ごとに新車に乗り換えられる」――

そんな謳い文句で知られる残価設定型クレジット（以下、残クレ）。

その仕組みは一見合理的に見えますが、実は **「抜け出せない無限ループ」** のような構造を持っています。

今回は、プログラム的な視点から残クレの構造を読み解き、
なぜこの仕組みが「負のループ」を形成しやすいのかを考察します。

## 残クレの基本構造
残クレの仕組みをざっくり整理すると、以下のようになります。

> ディーラーによって仕組みは様々ですし、買い取り価格保証などのオプションも設定されていたりしますが、細かな違いはいったん置いておきます（どんなプラン・オプションでも残クレの本質は変わりません）

* 車両本体価格のうち、**残価分（例えば車両価格の50%）** を据え置き。

* 月々の支払いは「本体価格－残価」の分を分割払い。

* 残価は「数年後にまとめて支払う」か「次の車に乗り換えて先送り」。

* 車両価値は経年で下がり、事故や傷、喫煙・汚れなどで減価リスクあり。

この「残価」がシステムの核心です。
安く見える月額の裏には「残価のリスク」が潜んでおり、これが後述するループの起点になります。

## プログラムで表現する「残クレ地獄」

では、この構造をPythonでざっくり疑似コード化してみます。

```Python
def 残クレ(car_name, deposit, loan_amount, residual, interest, monthly):

  # 頭金の支払い
  payment(deposit) 

  # 車を買ったつもりでいるが、実際には自分の車ではない
  # ついでに、「下取りに有利」とオプションてんこ盛りにさせられる
  this_is_my_car_but_not_mine = new car_name(too_many_option)

  # 残クレ無限ループの始まり
  while true: 
    # 60回払い、原則的に中途解約は不可
    for i in range(0, 60): 
      # 月々の支払い
      payment(monthly) 
      # キレイに使う努力をしてみるが
      try:
        use_carefully() 
      except overdriving:
        # 走行距離オーバーで減額
        residual *= 0.8 
      except soiled_by_children:
        # 車内を汚せば減額
        residual *= 0.7 
      except market_fluctuation: 
        # 下取り相場が大崩れすることも
        residual *= random.uniform(0.7, 0.9) 
      except car_accident:
        # もらい事故でも査定額減額
        residual *= 0.5 
      except smoking_in_car:
        # タバコを吸えば残価激落ちくん
        residual *= 0.3 
    # 60回ローン終了後、営業さんに勧められて新車に乗り換え
    if want_replacement: 
      # 設定残価と下取り価格の差額を支払ってから再ローン
      this_is_my_car_but_not_mine = replacement(remaining_amount - residual) 
      # 年利は再評価（たいてい上がることが多い）
      interest = reassessment_credit()
    elif i_dont_have_enough_to_pay_remaining_amount: 
      # 差額精算不可のため乗り換えもできず再ローン
      loan_amount = residual
      residual = 0 
      # 金利は爆上がり
      interest = SUBPRIME_INTEREST 
      # 返済地獄のスタート
      monthly *= 2.0 
    else: 
      # 乗り換えも再ローンも不可：自己破産で残クレ地獄からやっと解放
      raise OverflowError
```

## このコードが示す「抜け出せない構造」

コードにするためにだいぶ端折ってはいますが、ポイントは次の通りです。

* `while True:`
→ このローンには明確な終了条件がありません。支払いを終えて車を完全に手に入れるルートは「例外処理」にしか存在しない。

* 事故や減価リスクの罠
→ 普通に使っていても価値は下がる。事故や汚れで残価が下がると、さらに負担が増える。

* 「乗り換えループ」の誘発
→ 残価を払えない or 払いたくない → 次の車に乗り換える（新たな残クレ契約へ）。

* 「終わらない借金」
→ 実質的には「次のローンで前のローンを上書きする」の無限ループ。

## なぜ人はこのループにハマるのか？

心理的な要因として、以下が考えられます。

* 「月々の支払いが安い」という短期的快楽

* 「最新型に乗り続けられる」という承認欲求の充足

* 「総額負担」「資産価値の減少」に対する無関心

* 複雑な金融構造に対するリテラシーの欠如

## 残クレを「賢く使う」ために考えるべきこと

残クレが絶対悪だとは言いません。

例えば、残クレの一般ローンに対する差額を**持たないことに対するコスト** と認識して利用する（いわゆるホリエモンスタイル）のは全然ありだと思います。

しかし、残クレの本質は**複雑な金融商品を金融リテラシーの低い一般消費者に売りつけている** ことであり、**消費者側が長期的なシミュレーションをしないと損をする構造** であることは明白です。

* **総支払額はいくらか？**

* **乗り換えを繰り返すことで資産は減らないか？**

* **残価設定は本当に現実的か？**

* **事故や減価リスクをどこまで許容できるか？**

これらを計算せずに「月々安い！」だけで契約するのは、非常にリスクが高い選択です。


## まとめ：「while True」に気づけるか

残クレの怖さは、「借金の完了」がシナリオとして設計されていないことにあります。

この怖さをどう表現しようかと考えていて、ふと思いついてプログラムで表現してみました。

プログラムが読める人なら、この仕組みが持つ**無限ループ性** がより鮮明に見えてくるはずです。
AdobeのFirefly Video Modelで動画をAI生成してみた

[Supership](https://supership.jp/)の名畑です。[劇場版 うたの☆プリンスさまっ♪ TABOO NIGHT XXXX](https://taboonightxxxx.utapri-movie.com/)は、歌が素晴らしいのはもちろんのこと、演出、アニメーション、どれも見惚れてしまう出来です。

## はじめに

> ベータ版として提供されていた動画生成モデル「Firefly Video Model」がついに製品版として正式リリースされました。これは「テキストから動画生成」や「画像から動画生成」により商用利用可能な新しい動画を簡単に作成するモデルで、ベータ版から製品版へと進化するにあたりフォトリアリズムが大幅に改善され、非常に詳細でリアルな動画を制作できるようになりました。また、テキストのレンダリング、風景、視覚効果、トランジション効果も強化されています。
> 
> 参考：[Adobeの画像生成AI「Firefly Image Model 4」がリリース＆動画生成AI「Firefly Video Model」の正式版も登場＆Adobe製品でOpenAIなど他社の生成AIも利用可能に - GIGAZINE](https://gigazine.net/news/20250425-adobe-firefly-gen-ai-model-4/)

ということで、遅ればせながら、[Adobe Firefly](https://www.adobe.com/jp/products/firefly.html)での動画生成を試してみます。


プロンプトや元画像は過去記事「[OpenAIのSora、AmazonのNova Reel、RunwayのGen-3 AlphaのAI生成動画を比較してみた](https://qiita.com/nabata/items/d771811c3e1772b5647d)」と同様のものを使います。


## 価格

Adobe Fireflyにおいて動画生成は**プレミアム生成**に当たり、クレジットが必要です。

詳しくは[生成クレジットに関する FAQ](https://helpx.adobe.com/jp/firefly/get-set-up/learn-the-basics/generative-credits-faq.html#plans-inclusion)をご覧ください。

## テキストからの生成(Text to Video)

プロンプトは「**Japanese man playing basketball**」とします。訳せば「バスケットボールをしている日本人男性」です。

設定はデフォルトのままとします。


<iframe width="560" height="315" src="https://www.youtube.com/embed/2V4eB7jz2LQ?si=HAcWu5f_OpWBY5_0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

途中で明らかに人などの欠如がありますが、激しめな動きの動画生成にはなっています。

## 画像からの生成(Image to Video)

次に画像からの生成(Image to Video)です。

**FLUX.1.1[pro]** を用いて生成した以下の画像を用います。サイズは1280x768です。

![gen3.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/869934/4f6e693a-0bb2-4c22-063a-d0c3bd29f12f.jpeg)

 **FLUX.1.1[pro]** について詳しくは過去記事「[Stable Diffusionのオリジナル開発陣による画像生成AIモデル最新版FLUX 1.1 [pro]のWeb APIを呼んでいくつかの画像を生成してみた](https://qiita.com/nabata/items/1bea5313df7398041b4b)」をご覧ください。
 
プロンプトは「**Pouring water from a plastic bottle into a glass**」とします。訳すと「ペットボトルの水をグラスに注いでいる」となります。

<iframe width="560" height="315" src="https://www.youtube.com/embed/-NW8xk3VcqY?si=Tt4ZgOn_ZbcXDCIF" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

グラスの中身が液体の質感ではなく個体の質感ではありますが、注がれる水の描写は高品質です。

## 最後に

今回試した限りにおいては他のAI生成動画サービスと比べて強く秀でたものは感じませんでしたが、他の同社プロダクトとの連携や商用利用の安全性など、Adobeの製品であるということには大きな価値があると思います。

## 宣伝

[SupershipのQiita Organization](https://qiita.com/organizations/supership-inc)を合わせてご覧いただけますと嬉しいです。他のメンバーの記事も多数あります。

Supershipではプロダクト開発やサービス開発に関わる方を絶賛募集しております。
興味がある方は[Supership株式会社 採用サイト](https://supership.jp/recruit/)よりご確認ください。
AI開発者の3タイプと新時代のソフトウェア開発で成功する方法

AIはもはや未来の話ではなく、すでに現在のソフトウェア開発の中心的存在となっています。特にAIによるコード生成とインテリジェントな開発ツールは、「AIの初めてのキラーアプリ」として広く認識され始めています。この変化は、ソフトウェアがどのように作られ、誰が作り、どれだけのスピードで提供できるかという基本的な部分に大きなインパクトを与えています。

GitHub Copilot、Cursor、Windsurf、Claude Codeなどの最新ツールの登場により、開発者の生産性は10倍から100倍にもなると言われています。これらのツールは単なるコード補完にとどまらず、コードの文脈を理解し、リファクタリング、バグ修正、アーキテクチャ設計の提案まで行います。

この加速は、エンジニアリングの在り方を根底から変えています。現代の市場では「AIを使いこなせるかどうか」が大きな差を生み、AIを活用しない開発者は競争力を失いつつあります。

では、どうすればこの新時代において成功する開発者になれるのでしょうか？

答えは、AI開発者の「3つのタイプ」を理解し、自身のキャリアとスキルセットに応じて進化し続けることです。

⸻

🧠 1. AIツールを活用する開発者

このタイプは、伝統的なソフトウェア開発の中でAIを最大限活用することで、開発スピードと精度を大幅に向上させる開発者です。

特に注目すべきツールは、Cursor、Windsurf、そしてClaude Codeです。CursorはVS CodeベースのAIエディタで、チャット形式でコードの説明や修正を行える点が特徴です。Windsurfは、プロジェクト全体の文脈を捉えたコード補完が可能で、リアルタイムで「意図」を理解する機能に優れています。

Claude Codeは2025年にAnthropicから登場したCLI（コマンドラインインターフェース）アシスタントで、コードベースの全体構造を把握し、テスト実行、シェル操作、バージョン管理まで可能です。

⸻

🧩 2. AIを組み込んだアプリケーションを開発する開発者

このタイプは、AI APIを活用して、AIそのものをアプリケーションの中核機能として組み込む開発者です。

使用される代表的な大規模言語モデル（LLM）は、GPT-4.1（OpenAI）、Claude Opus 4（Anthropic）、Gemini 2.5 Pro（Google）、LLaMA 4（Meta）などです。これらは、自然言語処理だけでなく、推論、構造化出力、マルチモーダル対応など、アプリに知性を吹き込むことが可能です。

LangChainやLlamaIndexといったライブラリは、データ取得と生成の組み合わせ（RAG）を実現し、ベクトルDB（Pinecone、Weaviateなど）との連携により、セマンティック検索やパーソナライズ機能も構築可能です。

⸻

⚙️ 3. AIモデルそのものを研究・開発する開発者

このタイプはAIの「中の人」とも言える存在で、AIモデルの研究・設計・トレーニングを行う専門家です。

彼らはPyTorch、JAX、TensorFlowなどを活用し、大規模モデルの開発に取り組みます。MetaのLLaMA 4ファミリー（ScoutやMaverick）はマルチモーダル対応で、最先端の推論能力とスケーラビリティを兼ね備えています。

AI研究者の仕事は、他の開発者が利用するライブラリやAPIの根幹を担っており、業界全体の進化に大きく貢献しています。

⸻

AIはすでに「特別な技術」ではなく、「新たな常識」です。どのタイプを選ぶにせよ、AI時代に対応した開発スタイルを取り入れ、自分の強みを活かすことで、エンジニアとしての未来を切り拓くことができるでしょう。

⸻

📎 関連リンク：
	•	英語オリジナル記事（Medium）: https://medium.200ok.io/the-3-types-of-ai-developers-how-to-thrive-in-the-new-era-of-software-development-8ec964c54294
	•	Zenn版（より技術的）: https://zenn.dev/ken1618/articles/c698e1f9707a22
オブジェクト指向とは？


プログラミングの学習を進めていると、必ずと言っていいほど出てくる言葉が「オブジェクト指向」。

でも、「オブジェクトって何？」「インスタンス？クラス？何が違うの？」と最初は戸惑う人も多いはず。私もその一人です。

この記事では、自分なりに、オブジェクト指向の基本と、よく混乱しやすい用語の違いをまとめてみました。



## 前提知識：オブジェクト、クラス、インスタンスの違い

まずは、オブジェクト指向を理解する上で不可欠な3つの用語を整理しておきましょう。

| 用語         | 意味                                       | 例えるなら                    |
| ---------- | ---------------------------------------- | ------------------------ |
| **クラス**    | 設計図。どういうデータ（プロパティ）と処理（メソッド）を持つかを定義する     | パンのレシピ                   |
| **インスタンス** | クラスから作られた実体。実際に動くもの                      | 実際に焼いたパン                 |
| **オブジェクト** | JavaScriptなどの言語で使われる、データと処理をセットで管理するもの全般 | モノそのもの（インスタンスもオブジェクトの一種） |

### JavaScriptでの例

```js
// クラス定義
class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log(`こんにちは、私は${this.name}です`);
  }
}

// クラスからインスタンスを作る
const taro = new Person("たろう"); // ← これはインスタンス

// インスタンスはオブジェクトでもある
console.log(typeof taro); // "object"
taro.greet();
```

ここで `Person` はクラス、`taro` はそのインスタンス（オブジェクト）です。



## オブジェクト指向とは？

### 一言でいうと：

> **「モノ（オブジェクト）を中心にプログラムを設計する考え方」**

### どういうこと？

従来の「手続き型プログラミング」では、データと処理をバラバラに書くスタイルでしたが、「オブジェクト指向」では、それらを一つの“モノ”としてまとめます。

### 手続き型の例

```js
let name = "たろう";
function greet(n) {
  console.log(`こんにちは、私は${n}です`);
}
greet(name);
```

### オブジェクト指向の例

```js
class Person {
  constructor(name) {
    this.name = name;
  }
  greet() {
    console.log(`こんにちは、私は${this.name}です`);
  }
}
const taro = new Person("たろう");
taro.greet();
```

これにより、**「データ」と「そのデータに関する処理」を一緒に管理できる**ようになります。



## オブジェクト指向の三大要素

| 要素           | 説明                        | 例                                |
| ------------ | ------------------------- | -------------------------------- |
| **カプセル化**    | データと処理を一つにまとめて管理する        | クラス内にプロパティとメソッドを定義               |
| **継承**       | あるクラスの機能を引き継いで別のクラスを作る    | `class Dog extends Animal`       |
| **ポリモーフィズム** | 同じ名前のメソッドでも中身を変えて振る舞いを変える | `speak()` メソッドがそれぞれのクラスで異なる動作をする |



## なぜオブジェクト指向を使うの？

### メリット

* **再利用しやすい**：クラスを再利用すれば、同じ構造のオブジェクトが簡単に作れる
* **保守しやすい**：一箇所を修正すれば他も反映されやすい
* **現実世界に近い設計**：人、商品、記録などをそのまま“モノ”として捉えられる



## 実際の開発でのオブジェクト指向

LaravelやRails、SpringなどのWebフレームワークは、基本的にこの「オブジェクト指向」をベースにしています。
たとえば、Laravelの`User`モデルはクラスであり、`Auth::user()`で取得するのはそのインスタンスです。

```php
$user = Auth::user(); // ← Userクラスのインスタンス
$user->name;          // ← プロパティ
$user->save();        // ← メソッド
```

現実の「人」をそのままコードにしたような設計ですね。



## まとめ

* **オブジェクト指向**とは、「モノ」を中心にコードを書くスタイル
* **クラス**＝設計図、**インスタンス**＝実物、**オブジェクト**＝それらを含むモノ全般
* メリットが多く、モダンな開発の基本になる考え方


私なりにまとめてみたのですが、いかがでしょうか？
間違っている箇所、もっと分かりやすい解説や例などありましたら、コメントお待ちしています。
CursorとMCPサーバを連携し、PostgreSQLを操作する

## はじめに
CursorとMCPサーバを連携し、PostgreSQLを操作する。

## 動かし方
下記リポジトリをcloneしてきます。

https://github.com/modelcontextprotocol/servers

`src/postgres`で下記コマンドを実行する

```
 npx @modelcontextprotocol/server-postgres
 postgresql://user:password@host:port/db-name
```

## Cursor側の設定
mcp.jsonの内容修正します。

```json:mcp.json
{
	"mcpServers": {
		"postgres": {
			"command": "npx",
			"args": [
				"-y",
				"@modelcontextprotocol/server-postgres",
				"postgresql://user:password@host:port/db-name"
			]
		}
	}
}
```
ステートレスな世界🐫に愛（状態）🩷をくれるCookieたち🍪の話

「クッキーって名前は知ってるけど、なんとなく使ってる」
そんな方に向けて、Cookieの基本からセキュリティ対策までを、略語の意味も含めて書きます🍪

---

# 🍪 Cookieとは？
Cookie（クッキー）は、Webサイトが一時的にユーザー情報をブラウザに保存する仕組みです。

HTTPは「ステートレス（stateless）」な通信方式
　→ 通信のたびに「誰が」「どんな状態か」がリセットされる

そこでCookieを使い、状態（ログイン・カートなど）を保持

### 🔁 Cookieのやり取り
ブラウザがWebサーバーにリクエストを送信
↓
サーバーがレスポンスでSet-Cookieを返す
↓
次回からブラウザが自動でそのCookieを付けてリクエスト
↓
通信のたびに「覚えていてくれる」仕組み、というわけです。

### ⚠️ Cookieにまつわるセキュリティリスクとその略語の意味
##### 💥 XSS（Cross-Site Scripting）
- Cross（交差）
- Site（サイト）
- Scripting（スクリプト実行）
➡︎ 他サイトにスクリプトを埋め込む攻撃
悪意のあるJavaScriptが挿入され、Cookie情報が盗まれると「セッションハイジャック（Session Hijacking）」につながる。
🔐 対策：
HttpOnly属性を設定 → JavaScriptからCookieを読めなくする


##### 💥 CSRF（Cross-Site Request Forgery）
- Cross（交差）
- Site（サイト）
- Request（リクエスト）
- Forgery（偽造）
➡︎ 他サイトから不正なリクエストを送らせる攻撃
たとえば「ログイン中に別サイトを開くだけで、意図しない振込が実行される」といった被害が起きる。
🔐 対策：
SameSite属性をLaxまたはStrictに
フォームにCSRFトークンを埋め込む（リクエストが正規か判別）

##### 💥 Session Hijacking（セッションハイジャック）
- Session（通信中の一連の流れ）
- Hijacking（乗っ取り）
➡︎ Cookieを盗んで、その人になりすます攻撃
🔐 対策：
Secure属性を設定 → HTTPS通信でのみ送信
セッションIDの定期ローテーション（再生成）

##### 💥 セッションフィクセーション（Session Fixation）
- Fixation（固定）＝ 攻撃者が用意したセッションIDをユーザーに使わせる
➡︎ ユーザーがログインしても、攻撃者が同じIDを使える状態に
🔐 対策：
ログイン成功時に新しいセッションIDを発行

##### 💥 MitM（Man-in-the-Middle Attack）
- Man（人）
- in the Middle（間に入る）
➡︎ 通信の間に第三者が割り込み、盗聴・改ざんする攻撃
HTTP通信では簡単に盗まれるため、要注意。
🔐 対策：
常にHTTPSを使う
Secure属性 + HSTS（HTTP Strict Transport Security）を有効に

##### 💥 トラッキングとプライバシー侵害
長期間有効なCookieやサードパーティCookieにより、ユーザーの行動が追跡される
🔐 対策：
有効期限を短く設定
サードパーティCookieの使用は最小限に

##### 💥 Cookie属性の設定ミス
DomainやPathを広く設定しすぎると、本来意図しないリクエストにCookieが付いてしまう
🔐 対策：
Cookieの有効範囲（スコープ）は最小限に限定

##### 💥 容量オーバーとパフォーマンス低下
Cookieのサイズ制限（一般に1つあたり4KB程度、合計300個ほど）を超えると、通信速度の低下や不具合の原因に
🔐 対策：
保存するデータは最小限に整理
不要なCookieは明示的に削除

---
## ✅ まとめ
Cookieは、ステートレスなHTTPにおいて状態を保持するための強力な仕組みですが、一方で多くのリスクを伴います。

最低限おさえておきたいポイントは以下の通り：

HttpOnly, Secure, SameSite などの属性を適切に設定

セッションIDはこまめに再生成

HTTPS通信の徹底とHSTSの導入

最小限のデータのみをCookieに保持する設計

---
## 💥 用語のおさらい（略語まとめ）
| 略語   | 正式名称                           | 意味                    |
| ---- | ------------------------------ | --------------------- |
| XSS  | Cross-Site Scripting           | 他サイトに悪意のスクリプトを仕込む攻撃   |
| CSRF | Cross-Site Request Forgery     | 他サイトを使ってリクエストを偽造      |
| MitM | Man-in-the-Middle              | 通信の中間に割り込む攻撃          |
| HSTS | HTTP Strict Transport Security | HTTPS強制をブラウザに記憶させる仕組み |
A1セルに揃える

Sub SetZoomAndMoveToTopInSelectedWorkbook()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim cs As Chart
    Dim zoomLevel As Integer
    Dim filePath As String

    ' 拡大率を指定（必要に応じて変更）
    zoomLevel = 100

    ' ファイル選択ダイアログを表示
    filePath = Application.GetOpenFilename("Excel Files (*.xls*), *.xls*", , "対象ブックを選択してください")

    ' キャンセルされた場合は終了
    If filePath = "False" Then
        MsgBox "処理をキャンセルしました。", vbInformation
        Exit Sub
    End If

    ' ブックを開く
    Set wb = Workbooks.Open(filePath)

    ' ワークシート処理
    For Each ws In wb.Worksheets
        If ws.Visible = xlSheetVisible Then
            ws.Activate
            ws.Range("A1").Select
            ActiveWindow.Zoom = zoomLevel
        End If
    Next ws

    ' チャートシート処理
    For Each cs In wb.Charts
        cs.Activate
        ActiveWindow.Zoom = zoomLevel
    Next cs

    MsgBox "完了しました！", vbInformation
End Sub
MCPを使おうとしたら動作しなかった（mise利用）


# 解決方法

`npx` ではなく、 `/Users/<username>/.local/share/mise/shims/npx` を利用する

# エラー内容
`/Users/<username>/Library/Logs` に `mcp-server-xxxx.log` にログが下記のようにはかれていた。
これはnpx自体にアクセス出来ない問題だ。 mise を利用している事で、環境変数の設定が行われておらず、この問題となった。

.bashrc, .zshrc などに mise の環境変数を入れてもここは読まれていない状態。

```log
2025-05-26T00:13:36.938Z [playwright2] [info] Initializing server...
2025-05-26T00:13:36.989Z [playwright2] [error] spawn npx ENOENT {"context":"connection","stack":"Error: spawn npx ENOENT\n    at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n    at onErrorNT (node:internal/child_process:483:16)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
2025-05-26T00:13:36.990Z [playwright2] [error] spawn npx ENOENT {"stack":"Error: spawn npx ENOENT\n    at ChildProcess._handle.onexit (node:internal/child_process:285:19)\n    at onErrorNT (node:internal/child_process:483:16)\n    at process.processTicksAndRejections (node:internal/process/task_queues:82:21)"}
2025-05-26T00:13:36.992Z [playwright2] [info] Server transport closed
2025-05-26T00:13:36.992Z [playwright2] [info] Client transport closed
2025-05-26T00:13:36.993Z [playwright2] [info] Server transport closed unexpectedly, this is likely due to the process exiting early. If you are developing this MCP server you can add output to stderr (i.e. `console.error('...')` in JavaScript, `print('...', file=sys.stderr)` in python) and it will appear in this log.
2025-05-26T00:13:36.993Z [playwright2] [error] Server disconnected. For troubleshooting guidance, please visit our [debugging documentation](https://modelcontextprotocol.io/docs/tools/debugging) {"context":"connection"}
```

良きMCPLifeを
Lightningコンポーネントの検索条件の上限について

今回はLightningコンポーネントの検索条件の上限について確認します



Lightningコンポーネントでは検索条件の絞り込みが可能です

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/e99deb2b-ae2e-4943-a578-c58740ffc8df.png)

こちらの条件については10個までとなります

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/531631/c9a4f493-eecb-45e2-a7a2-94dac8d3f8f1.png)

10個の上限を　追加しようとしても、このように追加ボタンが表示されなくなるので追加できなくなります。
Arty A7 100TボードとAXI Timerで時間計測

# 実行環境
- Ubuntu 22.04.5 LTS
- Vivado 2023.2
- Vitis Unified IDE 2023.2
- Arty A7 100T
- Serial Port Terminal
- Micro USB Type-B(2.0)-USB Type-Aケーブル
- Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz

# step1: VivadoでのHW作成

1. `Vivado`を起動
1. プロジェクト作成 (design sourceや制約ファイルなどは何も追加せず全部OKでいい。ボードファイルの追加に関しては省略。)
1. `Create Block Design`
1. `Board`タブから`System Clock`, `USB UART`, `AXI Timer`を追加
1. `Diagram`の`+`から`MicroBlaze`を追加
6. `clk_wiz_0`をダブルクリック, `Output Clocks`から`Reset Type`を`Active Low`に変更
7. `Run Block Automation`をクリック, `Local Memory`を`32KB`に変更 (それ以上ならなんでもいい)
7. `Run Connection Automation`をクリック, 全部選択, `OK` (画像はブロック図全体像) 

# step2: VitisでSW作成, 書き込み, 実行
以下のコードを実行
```c
#define __MICROBLAZE__
#include <unistd.h>
#include <sys/_intsup.h>
#include <xstatus.h>
#include "xparameters.h"
#include "platform.h"
#include "xil_printf.h"
#include "xtmrctr.h"

XTmrCtr TimerCounterInst;

int init(){
	int Status;

	Status = XTmrCtr_Initialize(&TimerCounterInst, XPAR_AXI_TIMER_0_BASEADDR);
	if (Status != XST_SUCCESS) {
		xil_printf("Timer Initialize Error\n\r");
        return XST_FAILURE;
	}

	XTmrCtr_SetOptions(&TimerCounterInst, 0, XTC_AUTO_RELOAD_OPTION);
	XTmrCtr_Start(&TimerCounterInst, 0);
    return XST_SUCCESS;
}

int main()
{
    u32 tStart, tEnd;
    init_platform();

    int res = init();
    if(res != XST_SUCCESS)return 0;

    tStart = XTmrCtr_GetValue(&TimerCounterInst, 0);
    usleep(1000);
    usleep(1000);
    usleep(1000);
    tEnd = XTmrCtr_GetValue(&TimerCounterInst, 0);

    xil_printf("End - Start = %u\n\r", (unsigned int)(tEnd - tStart));
    double fval= (tEnd - tStart) / 100000000.0 * 1000; // ms (周波数100000000.0Hzで除することでsに変換し、1000倍してmsに変換)
    int whole, thousandths;
    whole = fval; // 整数
    thousandths = (fval - whole) * 1000; // 小数点以下3桁
    xil_printf("Time = %d.%03d ms\n\r", whole, thousandths);

    cleanup_platform();
    return 0;
}
```


# 注意点
- `printf`は重いので`xil_printf`を工夫して使う  
Vivadoで設定した`MicroBlaze`の`Local Memory`サイズを超える大きさの実行ファイルになるとエラーとなるため`stdio.h`の`printf`関数のような重めの関数は避けるのがいい。
そこで`xil_printf`関数を使用しているが、これは小数点型の表示に使う`%f`などに対応していない。整数部と小数点以下部を分けて表示するよう工夫する。

# 参考

https://marsee101.blog.fc2.com/blog-entry-3848.html

https://taltalp.hatenablog.jp/entry/2017/11/10/161512

https://adaptivesupport.amd.com/s/question/0D52E00006hpTYOSA2/how-to-print-float-value-on-hyperterminal-using-xilprintf?language=ja
挿入ソートについて調べてみた

## はじめに
　大学の授業で挿入ソートについて習ったので、自分自身の理解を深める目的で、最低限の情報だけ記事にまとめてみました。

## 操作
　先頭の次の要素から順番に、それ以前に自身以下の値がないか探索し、自身以下の値があれば、その次に挿入していくことでソートを行います。

データ数をnとすると、要素は0番目からn-1番目までとなります

一段階目
1番目の要素より、0番目の要素が小さければ、1番目に挿入して終わり
1番目の要素が小さければ0番目に挿入して終わり

二段階目
0番目まで比較してシフトさせながら進んでいく
2番目の要素より、それ以前の要素で小さいものがあれば、その次に挿入して終わり
2番目の要素より小さいものがなければ0番目に挿入して終わり

・
・
・

n-1段階目
0番目まで比較してシフトさせながら進んでいく
n-1番目の要素より、それ以前の要素で小さいものがあれば、その次に挿入して終わり
n-1番目の要素より小さいものがなければ0番目に挿入して終わり

### 可視化
　今説明した処理の流れを可視化してみました

![insert_sort_animation.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922095/40ef4d83-bc0c-4605-8c13-cda77112e80e.gif)

## 計算量
　最悪ケース（逆順にソートされている場合）について考えると、1段階目の比較回数は、0番目との比較で1回。その後、一段階ごとに1回ずつ比較回数が増えていき、n-1段階目で0~n-2番との比較でn-1回になるので、比較回数は1～n-1までの和になります。

$$ 比較回数=1+2+⋯+(n-1) = \frac{(𝑛−1)(1+(𝑛−1))}{2} = \frac{𝑛^2−n}{2} $$

ということで、データ数をnとしたときの計算量はO(n^2)です。

一方、最良ケース（既にソートされている場合）ではO(n)となります。最悪ケースの計算量は同じですが、平均的にはバブルソートや選択ソートよりも高速に動作することが多いようです。


## 安定ソート
　自身以下の値があった時に、その次に挿入する。つまり、同じ値の時は入れ替えが発生しないので、安定ソートになります。
 
## 内部ソート
　挿入ソートは比較対象の値以下のものを見つけたら入れ替えていくソート方法ですが、後述のコードを見ればわかる通り、入れ替えなどの操作が配列自身のメモリ領域内で完結できるので、内部ソートです。

## コード
pythonで書くと、こんな感じになります。
```python
def insertion_sort(arr):
    n = len(arr)
    for i in range(n-1):
        di = arr[i+1]
        for j in range(i, -1, -1):
            if arr[j] <= di:
                j += 1
                break
            arr[j+1] = arr[j]
        arr[j] = di
```

## 総評

### 強み
- シンプルで実装が簡単
- 最悪ケースでなければ比較的早い
- 安定ソート

### 弱み
- 最悪ケースだと計算量がO(n^2)のため遅い
- データ数が多い場合は処理が遅くなる

→　ソートがある程度完了している場合や、データ数が少ない場合に適正あり

## 最後に
　ここまで読んで下さりありがとうございました。挿入ソート自体の実装は簡単でしたが、可視化するときの表現がちょっと難しかったです。いったん棒の色を背景色と同じにして、疑似的に消したら、ちょっとシフトしてるっぽくなったので満足しました。
WSL2におけるFlaskの起動ホストと接続可否一覧

##　はじめに
WindowsのWSL2の中で起動したFlaskアプリを起動した際に、Windowsから指定するURLが何なのかと思って調べてみた。

## 結論

昨今はWSL2のlocalhostは自動でWindowsのlocalhostにマッピングされるのであまり気にしなくても使えるらしい。

|WSL2で起動したFlaskの host 指定値|接続元|接続例|挙動|補足
|---|---|---|---|---|
|127.0.0.1|WSL内|http://127.0.0.1:5000|:white_check_mark:|	WSL内のローカルループバックアドレス|
|127.0.0.1|Windows側|http://127.0.0.1:5000|:white_check_mark:|	localhostForwarding=true（WSL構成ファイル .wslconfig で設定）で有効。無効化すると不可。|
|0.0.0.0|WSL内|http://127.0.0.1:5000 または http://<WSL IP>:5000|:white_check_mark:|	0.0.0.0は全インターフェースバインド。WSLのIPも含む。|
|0.0.0.0|Windows側|http://127.0.0.1:5000|:white_check_mark:|Windowsの仮想スイッチとWSLのネットワーク連携が進化。ファイアウォール設定次第でブロックされることも。|
|0.0.0.0|Windows側|http://127.0.0.1:5000 または http://<WSL IP>:5000|:white_check_mark:|上記同様|
|172.30.xx.xx (WSL IP)|WSL内|http://172.30.xx.xx:5000|:white_check_mark:|WSLの仮想ネットワークIP|
|172.30.xx.xx (WSL IP)|Windows側|http://172.30.xx.xx:5000|:white_check_mark:|	Windows側からWSLのIPに直接アクセス可能|


## 詳細

### ソースコード

<details><summary>WSL内のFlaskアプリ</summary>

```python
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
    return 'Hello, World!'
if __name__ == '__main__':
    # ここを切り替えていく
    app.run(host='0.0.0.0', port=5000, debug=True)
    # app.run(host='127.0.0.1', port=5000, debug=True)
    # app.run(host='172.30.44.147', port=5000, debug=True)
```

</details>


<details><summary>リクエスト</summary>

```python
import requests
def send_request():
    # ここを切り替えていく
    url = 'http://localhost:5000/'
    # url = 'http://127.0.0.1:5000/'
    # url = 'http://172.30.44.147:5000/'
    try:
        response = requests.get(url)
        if response.status_code == 200:
            print('Response from server:', response.text)
        else:
            print('Failed to get a valid response. Status code:', response.status_code)
    except requests.exceptions.RequestException as e:
        print('An error occurred:', e)
if __name__ == '__main__':
    send_request()
```

</details>

### Flaskの実行について

実行時に0.0.0.0を指定するとローカルホスト(127.0.0.1)とWSL内のIPで起動されるためどちらのIPでも接続が可能となる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633766/1d628342-30c9-443e-9f9c-ff4eff1064a9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633766/1d8ad57d-2976-4afe-b8e7-19177f5751e5.png)


127.0.0.1の場合はローカルホストのみ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633766/9dbfddb9-68e3-4d56-9fd2-de7f6537cb03.png)

それに対してWSL2のIPを指定してもエラーとなる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3633766/499a3eda-e587-4cc9-b9d7-9e1dcbc7c2e9.png)

### WSL2のIP
以下のコマンドで表示される

```shell
ip addr show eth0 | grep inet

>> inet 172.30.44.147/20 brd 172.30.47.255 scope global eth0

```

Windowsの仮想ネットワークと同一のLANの中にいるため接続ができる

```shell
ipconfig

イーサネット アダプター vEthernet (WSL (Hyper-V firewall)):

   接続固有の DNS サフィックス . . . . .:
   IPv4 アドレス . . . . . . . . . . . .: 172.30.32.1
   サブネット マスク . . . . . . . . . .: 255.255.240.0
   デフォルト ゲートウェイ . . . . . . .:

```


### まとめ

設定ファイルやポートフォワードを意識しなくても基本的に問題がないことが分かった。
ワイ「AIちゃん！売上レポート作っといて！」#ETLの自動化もここまで来る!?か

# ある日の我が家（やめ太郎さん風）（超リスペクト）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3798970/136e6021-6362-4c4d-af18-bf559b5cc0ef.png)


娘「パパ、データ分析って 面倒くさくない？」

娘「パパ〜、最近、学校で統計やってるんだけどさ〜」  
娘「いろんなデータを集めたり、並べたり、すごい大変！」

ワイ「うむ、それは立派な**ETL処理**やな」

娘「イーティー...エル？」

ワイ「ああ、**Extract（抽出）→Transform（変換）→Load（格納）**の略や」  
ワイ「データを集めて、形を整えて、使えるようにする一連の作業やな」

娘「ふーん… でもさ、AIって賢いんでしょ？」  
娘「だったら、全部やってくれたらいいのに！」

ワイ「せやな、実はな──」

> ワイ「ヘイ、AIちゃん！」  
> ワイ「このエクセルたちを読んで、整形して、MySQLに流し込んで！」

ワイ「──なんてことが、**今はもうできる時代**なんや」

娘「えっ、マジで！？AIって、もうそこまでやってくれるの！？」

ワイ「やってくれる時代になったんや」  
ワイ「今はな、AIをETLの頭脳として使う**新しい流れ**が来とる」

---

# それって、どういう仕組み？

娘「でもさ、AIってせいぜいPoC用のコードを書くだけじゃないの？」

ワイ「昔はそうやったな」  
ワイ「でも今は──」

- AIがスクリプトを生成して  
- Dockerやクラウド上でETLジョブを起動して  
- GCSやS3、MySQLなどに自動で連携してくれる

ワイ「──みたいな**エンドツーエンドの自動化**が可能になっとるんや」

娘「すご〜い！AIが、データの処理全部(ETLパイプライン)を構築してくれるの？」

ワイ「せや！最近やと、**MCP**を使って」  
ワイ「ChatGPTから外部ツールを叩く形も実現しとる」

> ワイ「AIちゃん！明日の需要予測から発注書出しといて」

娘「つまり、AIがデータ連携を簡単に操作できる“リモコン”みたいな仕組みがあるってことだね！」

---

# でも、今までもETLツールってあったよね？

娘「でもパパ」  
娘「ETLツールって、昔からあったじゃん？」  
娘「なんで今さらAIでやるの？」

ワイ「ええ質問やな」

- 従来のETLツールは**GUIが複雑**で初心者にはハードルが高かった  
- 設定ファイルも**ちょっと変更しただけで壊れやすい**  
- 新しいデータソースに対応するのも**面倒くさい**

ワイ「でもAIを使えば──」

> AIちゃん「最新のマイグレーションを反映して、パイプライン設定を更新しました。」
> AIちゃん「このソースにはNullが多いので除去しておきました」  
> AIちゃん「日付形式の変換も自動でやっておきました」

ワイ「──みたいに**気が利くETL処理**が可能になるんや」

娘「おお〜、まるでデータエンジニアのアシスタントみたい！」

---

# どうやって使うの？

娘「で、どうやってそのAI ETLを使うの？」

ワイ「たとえばこんな流れやな」

1. **ChatGPTにETLのタスクを指示**  
   （データの場所、目的、加工内容など）

2. **スクリプトやツール設定を自動生成**  
   （Airflow DAG、dbtモデル、SQL変換など）

3. **CLIやAPI経由でジョブを実行**  
   （MCPサーバ経由でもOK）

4. **進捗をChatGPTに報告させる**  
   （Slack通知、ログ要約などもできる）

娘「もうAIがデータ移行チームの一員じゃん！」

ワイ「ほんまそれな」

---

# 気をつけることは？

娘「でもAIが勝手にデータいじるって、ちょっと怖くない？」

ワイ「せやな、特に気をつけるべきは──」

- **実行環境をサンドボックス化**する  
- **読み取り専用の権限から始める**  
- **ログとレビューは人間が見る**  
- **いつでもロールバックできるようにする**

ワイ「AIに権限を渡すときは、ちゃんと安全設計しないとな」

---

# まとめ：AI時代のETLとは

- 従来のETLは**人間が組み立てて使う**ものだった  
- 今は**AIに設計も実行も任せられる**時代に突入  
- AI＋CLI or MCP連携で**自動ETLが現実に**  
- **Airbyte・Fivetran・dbt・BigQuery・S3**などとも組み合わせ可能  
- 気をつけるべきは**権限・ログ・レビュー**の3点セット  
- 将来的には「**AI ETLエンジニア**」という役割が一般化するかも？

---

> ワイ「AIちゃん、今月の売上分析データ、きれいにしてまとめといて！」

> ChatGPT「了解です！不要データを除去して、KPIごとに集計しました！」

> ワイ「うむ、ええ仕事や！」

娘「パパの仕事、もうAIだけでいいじゃん！」

ワイ「せやな...そろそろ異動願い出すかもしれん...（震）」
【公ド読】データ アクセス層のリファクタリング

【公式ドキュメントを読もうシリーズ】データ アクセス層のリファクタリング

## シリーズ概要

[https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3](https://qiita.com/yasu_programming/items/cec66f9e8d5d571e9ce3)

## URL

[https://docs.github.com/ja/copilot/copilot-chat-cookbook/refactoring-code/refactoring-data-access-layers](https://docs.github.com/ja/copilot/copilot-chat-cookbook/refactoring-code/refactoring-data-access-layers)

## 説明

ビジネスロジックとデータへのアクセスを分けてくれる。
保守性や拡張性などが上がる。

## 所感

今までLaravelを用いた開発が多かったが、ほかの言語を使用した時のアーキテクチャの構築の学習コストの高さに悩んでいたが、Github Copilotが提案してくれる。

それを自分が確認するという作業を行うという流れにすることで、知らない言語でも早く開発することができている。

個人開発レベルでのアーキテクチャの構築はこれで十分のような気もしている。
Arty A7 100TボードとMicroBlazeでHello World

# 実行環境
- Ubuntu 22.04.5 LTS
- Vivado 2023.2
- Vitis Unified IDE 2023.2
- Arty A7 100T
- Serial Port Terminal
- Micro USB Type-B(2.0)-USB Type-Aケーブル
- Intel(R) Core(TM) i5-10210U CPU @ 1.60GHz

# step1: VivadoでのHW作成

1. `Vivado`を起動
1. プロジェクト作成 (design sourceや制約ファイルなどは何も追加せず全部OKでいい。ボードファイルの追加に関しては省略。)
1. `Create Block Design`
1. `Board`タブから`System Clock`, `USB UART`を追加
1. `Diagram`の`+`から`MicroBlaze`を追加
![Screenshot_2025-05-26_07-07-25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/16d610f5-2f49-4960-b040-4deacaa5c9c2.png)
6. `clk_wiz_0`をダブルクリック, `Output Clocks`から`Reset Type`を`Active Low`に変更
![Screenshot_2025-05-26_07-07-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/0b6ed7d5-1eab-44de-87ce-fcded7db27e5.png)
7. `Run Block Automation`をクリック, `Local Memory`を`32KB`に変更 (それ以上ならなんでもいい)![Screenshot_2025-05-26_07-08-11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/705282ea-5208-4978-a5c9-3463958e607f.png)
7. `Run Connection Automation`をクリック (画像はブロック図全体像) 
![Screenshot_2025-05-26_07-08-35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/1734182b-0c26-4809-86c4-fdf342a9acf5.png)

7. `Source`タブの`design_1_i`を右クリック, `Create HDL Wrapper`をクリック
7. `Generate Bitstream`をクリック
7. `File`>`Export`>`Export Hardware...`をクリック, `xsa`ファイルの作成 (`現プロジェクトディレクトリ/プロジェクト名.vitis`というディレクトリにすると管理しやすい)
7. `Tools`>`Launch Vitis IDE`

# step2: VitisでのSW作成, ボードへの書き込み, 実行  

1. `Open Workspace`, `現プロジェクトディレクトリ/プロジェクト名.vitis`を指定
1. `Create Platform`, 作成した`xsa`ファイルを指定してあとは全部`OK`
1. `File`>`New Component`>`From Example`>`Hello World`>`Create Application Component from Template`
![Screenshot_2025-05-26_07-33-33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/1ba3fd5d-4a46-435a-bc86-e6d397624c02.png)

1. `Build`>`Run`
1. 適当なシリアルコンソールを開き、`ttyUSB1`あたりを`9600`レートで見ると出力が確認できる
![Screenshot_2025-05-26_07-34-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2531876/aab9e7a2-2dd6-46c0-a27c-596e4443e278.png)
2025年6月以降：ハッカソン開催情報（※随時更新）

<a href="https://giftech.io/giftech2025spring/">GIFTech2025春のハッカソン</a>が終了し、改めて、「ハッカソンに参加してよかった」という参加者の方から多数頂戴いたしました😇
2025年6月以降に開催される、現在参加受付中のハッカソン情報をまとめました✨（随時更新予定です）

# 全日本AIハッカソン 2025
🔍 全国5カ所にて地方大会を行った後、​決勝戦は東京で、2025年11月8日(土)に開催されます。

📅　<b>日程</b>
7月19日：北海道大会＠札幌(受付中)
9月6日：中日本大会＠名古屋(7月6日受付開始)

https://www.aifestival.jp/finalist

✨ すでに、東日本大会、西日本大会の決勝進出者は決まっており、2025年11月8日(土)の決勝戦では、観覧者を募集中とのこと。プレゼンテーション、結果発表を見に行けるのも興味深いです！

https://www.aifestival.jp/finalist


# Progate Women’s ハッカソン powered by SmartHR

🔍 Progateが主催する2日間、女子学生限定のハッカソンイベント。もうすぐ募集枠に達しそうな状況です。

📅　<b>日程</b>
キックオフ：2025年6月11日(水) 19:00 - 19:30
ハッカソン本番：2025年6月21日(土) 11:00～2025年6月22日(日) 18:00

https://progate.connpass.com/event/351298/


# 生成AI×社会課題 Tech Conference【WAKE Career 主催】

🔍生成AI × 社会課題ハッカソンの発表会や、AIに関するカンファレンスが開催されます。ハッカソン自体は終わっていますが、約80人、30チームが参加！集大成のハッカソンピッチが観覧できます。


📅　<b>日程</b>
2025年6月21日（土）　13:00〜17:00（開場12:30）

https://wake-career.connpass.com/event/353297/


# 技育CAMP2025 ハッカソン
🔍 エンジニアを志す学生さんが参加できる、オンライン開催のハッカソン。年間23回程度のスケジュールが予定されており、ハッカソンでのアウトプットだけでなく、アカデミアも多数開催されています。

📅　<b>日程</b>
5月末から7月末の日程が公開中！

https://geek.supporterz.jp/geekpjt

# 第12回 石巻ハッカソン2025
🔍 今回で12回目を迎える石巻ハッカソン。小〜大学生の若者と、現役のエンジニアやデザイナーが一緒になってチームを組み、3日間でアプリを作り上げます。

📅　<b>日程</b>
2025/10/11(土)14:00 〜 2025/10/13(月)15:00

https://techplay.jp/event/960974

# PKSHA HACKATHON 2025｜AIエージェント開発ハッカソン
🔍 学生向け、著名な審査員も多数参加するAIエージェント開発ハッカソンです。

📅　<b>日程</b>
B日程：2025/7/2(水)~4(金)　10:00-19:00

https://pksha.notion.site/pksha-hackathon2025

# ネコハッカソン 2025開催
🔍 GIFTechのキャラクター、GIFCatは猫×〇〇!?のキャラクター！ネコハッカソン、気になります。

📅　<b>日程</b>
2025/6/14(土)

https://x.com/neko_hacker/status/1926595814366810273

## GIFTech次回の企画は・・
GIFTechでは、2025年秋、「伝統工芸品×Tech」に興味あるエンジニア、デザイナーを募集中です。少しでもご興味ある方は、ぜひご確認ください🌈

![スクリーンショット 2025-04-23 15.30.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3991729/edecf749-d577-4d2b-bf91-253c770ec6af.png)

https://giftech.io/
Pardot　スコア



+ [スコアを条件に絞り込んでプロスペクト一覧を表示させたい](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000JftxvSAB)

+ [スコアが急上昇したら通知させたい](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000TiSUO)

:::note
ヘルプを見ると少々特殊な項目のようですね。 

参照のみなので、フローで扱うにしても数値が変わったことをトリガーにすることはできないと思います。 

https://help.salesforce.com/s/articleView?id=mktg.pardot_default_prospect_field_mapping.htm&type=5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/937e44dc-e2aa-47af-9849-b17e53945403.png)

カスタムオブジェクトを追加しても問題がないのなら。毎日リードのスコアをこのカスタムオブジェクトに追加します。（おそらくリードのスコアが変わっても更新日は変わらないだろうからスケジュールフローでも全件が対象になるかもしれません） 


このフローでカスタムオブジェクトの以下の項目 

リードのId 
日付（スコアの記録日） 
スコア  

を追加します。  

ここで追加する件数を減らすためにリードIdで同じものがあれば、一番新しいレコード（日付の降順で取得した１件目）のスコアと比べて変化が無ければ何もしません。スコアが変わっていれば追加します。 
また、リードのIdがなければ追加します。 

次にこのカスタムオブジェクトのレコードトリガーフローで新規にレコードが作成された場合に起動するようにします。 

ここで、処理日より7日以上差があるレコードを降順で１件取得します。 
もし、１件でもレコードがあって、差が10以上であれば次の項目に処理日を追加します。

日付２（7日間でスコアが10点以上上昇した日） 

後は、レポートあるいはリストビューでこのカスタムオブジェクトの日付２が処理日より大きいものを抽出すれば、目的の情報が得られると思います。 
:::
スミレ畑、やってみた。 その22

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 086 C - Traveling
時刻0のとき、平面上の(0, 0)にいます。平面上のN箇所の点を、ある時刻に移動できるかという問題です。



# 投入するソース

```
2
3 1 2
6 1 1

```

# 期待値

```
Yes

```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/07da4fb8-dc7d-464e-9d5a-5efc89602aa3.png)

# サンプルコード

```

Ｎは，入力したもの
前ｘは、０
前ｙは、０
結果は、○
Ｎ回繰り返す
　  ｔｘｙは，入力したものを、「 」で区切ったもの
  　ｔは、ｔｘｙ（１）
  　ｘは、ｔｘｙ（２）
  　ｙは、ｔｘｙ（３）
  　結果は、(結果　かつ　(ｘ　－　前ｘ)の絶対値　＋　(ｙ　－　前ｙ)の絶対値　≦　ｔ　かつ　(ｘ＋ｙ)　％　２　＝　ｔ　％　２)
繰り返し終わり
もし、結果ならば
  「YES」を、出力して改行する
そうでなければ
  「NO」を、出力して改行する
もし終わり

```

以上。
スミレ畑、やってみた。 その21

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 049 C - Daydream
文字列Sが与えられ、始め空の文字列Tの末尾に "dream", "dreamer", "erase", "eraser"を追加する処理を行って、S=Tにできるか判定する問題です。


# 投入するソース

```
erasedream

```

# 期待値

```
YES

```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/f4347339-cfa5-40e7-8459-47d61079c4bb.png)

# サンプルコード

```
Ｓは，入力したもの
Ｓは，正規表現によって、Ｓを、「eraser」から、「!」に置換したもの
Ｓは，正規表現によって、Ｓを、「erase」から、「!」に置換したもの
Ｓは，正規表現によって、Ｓを、「dreamer」から、「!」に置換したもの
Ｓは，正規表現によって、Ｓを、「dream」から、「!」に置換したもの
Ｓは，正規表現によって、Ｓを、「!」から、「」に置換したもの
もし、Ｓ＝「」ならば
  「YES」を、出力して改行する
そうでなければ
  「NO」を、出力して改行する
もし終わり

```

以上。
スミレ畑、やってみた。 その20

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 085 C - Otoshidama
10000円札と、5000円札と、1000円札が合計でN枚あって、合計金額がY円であった。このような条件を満たす各金額の札の枚数の組を1つ求める問題です。




# 投入するソース

```
9 45000

```

# 期待値

```
4 0 5 または　0 9 0

```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/6c7f42b4-debe-4fec-a2d6-580f5e6d4d2a.png)

# サンプルコード

```
ＮＹは，入力したものを「 」で区切ったもの
【Ｎ：数値】は、ＮＹ（１）
【Ｙ：数値】は、ＮＹ（２）÷１０００
【見つかった：真偽値】は、×
(Ｎ　＋　１)回、【ｓ1万円：数値】に、カウントしながら繰り返す
  　【一万円：数値】は、ｓ1万円　-　１
  　もし、見つかったならば、繰り返しを抜ける
  　(Ｎ　-　一万円　＋　１)回，【ｓ五千円：数値】に、カウントしながら繰り返す
    　　【五千円：数値】は、ｓ五千円　-　１
    　　もし、見つかったならば、繰り返しを抜ける
    　　　　【残り：数値】は、Ｎ　-　一万円　-　五千円
    　　もし、残り≧０　かつ　(一万円　×１０　＋　五千円　×５　＋　残り　＝　Ｙ)ならば
      　　　「［一万円］ ［五千円］ ［残り］」を、出力して改行する
      　　　見つかったは、○
    　　もし終わり
  　繰り返し終わり
繰り返し終わり
もし、見つかったでないならば、「-1 -1 -1」を、出力して改行する

```

以上。
スミレ畑、やってみた。 その19

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 085 B - Kagami Mochi
N枚の整数値が与えられ、それらの重複しない要素の数を数える問題です。


# 投入するソース

```
4
10
8
8
6

```

# 期待値

```
3
```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/2fccda54-8bb4-446d-b2b6-efc3b4888707.png)

# サンプルコード

```
Ｎは、整数を、入力したもの
辞書を、作って、集合とする
Ｎ回、繰り返す
  　ｄは、入力したもの
  　集合のｄは、１
繰り返し終わり
集合の個数を、出力して改行する
```

以上。
スミレ畑、やってみた。 その18

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
AtCoder、やってみた。
練習問題やってみた。

# 練習問題
ABC 088 B - Card Game for Two
N枚のカードを二人で交互に取っていき、カードに書かれている数字の和の差を求める問題。



# 投入するソース

```
2
3 1

```

# 期待値

```
2
```

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/99dfa081-7309-46ed-8b87-823f591bb4c9.png)

# サンプルコード

```
Ｎは、入力したもの
ダチは、入力したものを、「 」で、区切ったもの
ダチを、大きい順に、並び替える
アリスは、０
ボブは、０
Ｎ回、ｉに、カウントしながら繰り返す
  もし、ｉを、２で、割ったあまりが、１ならば
    アリスに、ダチ（ｉ）を、足す
  そうでなければ
    ボブに、ダチ（ｉ）を、足す
  もし終わり
繰り返し終わり
アリス　－　ボブを、出力して改行する
```

以上。
Java解説 20250526

## パッケージ
・クラスをパッケージに含めることをパッケージ化という。
・パッケージ名を階層化する場合は、階層ごとにドットで区切る。
・1つのソースファイルに宣言できるパッケージは1つ。

## 暗黙の型変換
・byte→short→int→long→float→double
・char→int→long→float→double

## import文
・import文でアスタリスクを記述すると、指定されたパッケージに属する全てのクラスが利用できる。
・

<br>

[オラクル認定資格教科書 Javaプログラマ Bronze SE(試験番号1Z0-818)](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E8%AA%8D%E5%AE%9A%E8%B3%87%E6%A0%BC%E6%95%99%E7%A7%91%E6%9B%B8-Java%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9E-Bronze-SE-%E8%A9%A6%E9%A8%93%E7%95%AA%E5%8F%B71Z0-818/dp/479816206X/ref=pd_lpo_d_sccl_1/357-5313211-9846263?pd_rd_w=VQCzo&content-id=amzn1.sym.855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_p=855d8f70-df76-4181-80b0-56e48ae3bb9b&pf_rd_r=JRR4W9RKV32K4AXF1WRZ&pd_rd_wg=l7VoD&pd_rd_r=1d465f85-0562-4b51-b523-77f8486c1508&pd_rd_i=479816206X&psc=1 "オラクル認定資格教科書 Javaプログラマ Bronze SE(試験番号1Z0-818)")
Vertex AIを活用するためのガイド


Google Cloud Platform (GCP) 上で提供される Vertex AI は、機械学習モデルの構築、デプロイ、運用を統合的にサポートする強力なプラットフォームです。この記事では、Vertex AI の概要や活用方法、メリット・注意点をまとめます。

---

## Vertex AIとは？

Vertex AI は、以下の機能を統合的に提供する GCP のサービスです：

- **AutoML**: コーディング不要でモデルを構築できる機能
- **カスタムモデル**: TensorFlow や PyTorch モデルをカスタムでデプロイ可能
- **データ準備**: BigQuery や Cloud Storage との統合で簡単にデータを扱える
- **パイプライン**: ワークフローを Vertex Pipelines で自動化
- **モニタリング**: モデルの品質を Vertex Model Monitoring で管理

---

## Vertex AIの活用例

### 1. AutoMLによるモデル構築

AutoML 機能を使えば、ノーコードで以下のようなモデルを作成できます：

- 画像分類
- テキスト分類
- 構造化データの回帰・分類

AutoMLでは、データをアップロードするだけでモデル作成が進みます。

### 2. BigQuery との連携

Vertex AI は BigQuery と緊密に連携しています。BigQuery にあるテーブルをそのままトレーニングデータとして利用できます。

```sql
SELECT *
FROM `project.dataset.table`
```

このまま Vertex AI のトレーニングデータとして利用できるので、データパイプラインが非常にシンプルになります。

### 3. カスタムモデルのデプロイ

以下のような流れで、独自のモデルをデプロイできます。

1. トレーニング済みモデルを GCS に保存
2. Vertex AI でモデルとして登録
3. エンドポイントを作成し、リアルタイム推論APIを提供

```python
from google.cloud import aiplatform

aiplatform.init(project='your-project-id', location='us-central1')

model = aiplatform.Model.upload(
    display_name='my-model',
    artifact_uri='gs://my-bucket/my-model/',
    serving_container_image_uri='us-docker.pkg.dev/vertex-ai/prediction/tf2-cpu.2-3:latest',
)

endpoint = model.deploy(machine_type='n1-standard-4')
```

---

## Vertex AIのメリット

- **GCPとの統合**: BigQueryやCloud Storageとの親和性が高い
- **AutoMLからカスタムモデルまで一元化**: どのレベルのユーザーにも柔軟に対応可能
- **スケーラビリティ**: GCPのインフラでスケーラブルに運用可能

---

## Vertex AIの注意点

- **コスト管理**: モデルデプロイやAutoML利用は従量課金制。予算管理が重要です。
- **権限管理**: サービスアカウント・IAM設定を適切に行う必要があります。

---

## まとめ

Vertex AIは、機械学習を迅速かつ効率的に導入するための強力なサービスです。  
特に、GCPの既存データ基盤を活用しているユーザーにとっては、AutoMLやカスタムモデルの両方をサポートするVertex AIの存在は非常に大きな価値があります。

ぜひ、組織のデータ活用やAI戦略に Vertex AI を活かしていきましょう！
生成AIツール比較してみる

最近では生成AIツールが数多く登場しており、それぞれに特徴があります。
この記事では、代表的な生成AIツールを比較しました。
また、筆者がGoogle Cloudを活用しているため、その場合のメリット・デメリットも含めて表形式でまとめます。

---

## 比較ツール

- **ChatGPT (OpenAI)**  
- **Gemini (旧Bard, Google)**  
- **Claude (Anthropic)**  
- **Llama (Meta)**  

---

## 生成AIツールの比較表

| ツール | メリット | デメリット | GCP活用ユーザー向けのメリット | GCP活用ユーザー向けのデメリット |
|--------|----------|------------|------------------------------|--------------------------------|
| **ChatGPT (OpenAI)** | - 汎用性が高く、様々な業務に使える<br>- コード生成や文章生成に強い | - API利用にコストがかかる<br>- データ保持に注意が必要 | - GCP外での利用も可能で、外部サービスとして併用しやすい | - GCPの既存ワークフローと統合は別途開発が必要 |
| **Gemini (Google)** | - Googleサービスとの統合がしやすい<br>- GCP内での連携がスムーズ | - モデルの選択肢が限定的 | - BigQueryなどGCP内サービスと自然に連携できる | - 他クラウドやOpenAI系ツールよりも対応範囲が狭いケースも |
| **Claude (Anthropic)** | - 安全性やガバナンスを重視した設計<br>- 長文の処理に強い | - 商用利用の条件が厳しい場合あり | - GCP外部サービスとして柔軟に利用可 | - GCPに直接統合するには追加開発が必要 |
| **Llama (Meta)** | - オープンソースモデルで柔軟にカスタマイズ可 | - 導入には技術的ハードルが高い | - 自前でGCPのVMやVertex AIでホスティング可 | - 運用・管理の負担が大きい可能性 |

---

## Google Cloudユーザーが気をつけるポイント

- **セキュリティとデータプライバシー**: 生成AIを導入するときは、社内データや顧客データの取り扱いに注意が必要です。
- **Vertex AIとの連携**: Google CloudユーザーならVertex AIを活用し、カスタムモデルのデプロイや推論環境の統合も検討できます。
- **コスト管理**: 生成AIのAPI利用は従量課金が多いので、予算の見積もりと利用制御も重要です。

---

## まとめ

生成AIツールは多様化しており、業務や組織に応じた最適解を見つけることが大切です。Google Cloudユーザーの場合は、Google系ツールの親和性を活かしつつ、必要に応じて外部のAIツールも適切に組み合わせるのがポイントです。
【C#】WebAPIの引数で多対多のリレーションが取得できない


ASP.NET Core と EF Core を使用して多対多のリレーションを実装した際に、WebAPI の Post メソッドでリレーション先のデータが取得できない問題に直面しました。この問題とその解決方法について説明します。

## 問題の背景

多対多のリレーションを実装するために、以下のような `User` クラスと `Skill` クラスを使用していました。

```csharp
public class User
{
    [Required]
    public int Id { get; set; }

    [Required]
    public string UserName { get; set; } = string.Empty;

    [Required]
    public string Description { get; set; } = string.Empty;

    public List<Skill> Skills { get; } = [];
}

public class Skill
{
    public int Id { get; set; }

    public string Name { get; set; } = string.Empty;

    [JsonIgnore]
    public List<User> Users { get; } = [];
}
```

多対多のリレーションの実装については下記を参考にしました。

https://learn.microsoft.com/ja-jp/ef/core/modeling/relationships/many-to-many

この状態で、以下のような Post メソッドを実装しました。

```csharp
[HttpPost]
public async Task<ActionResult<User>> Post(User user)
{
    _context.Users.Add(user);
    await _context.SaveChangesAsync();

    return CreatedAtAction(nameof(Get), new { id = user.Id }, user);
}
```

しかし、フロントエンドから送信されたデータに問題がないにもかかわらず、`User` クラスの `Skills` プロパティが空のままになっていました。

## 原因

この問題の原因は、`User` クラスの `Skills` プロパティにセッターが定義されていないことでした。ASP.NET Core のデフォルトの JSON デシリアライザーは、セッターがないプロパティには値を設定できません。そのため、`Skills` プロパティが空のままになっていました。

## 解決方法

`User` クラスの `Skills` プロパティにセッターを追加することで、この問題を解決しました。修正後のコードは以下のとおりです。

```diff_C_sharp
public class User
{
    [Required]
    public int Id { get; set; }

    [Required]
    public string UserName { get; set; } = string.Empty;

    [Required]
    public string Description { get; set; } = string.Empty;

-   public List<Skill> Skills { get; } = [];
+   public List<Skill> Skills { get; set; } = [];
}
```

この変更により、JSON デシリアライザーが `Skills` プロパティに値を設定できるようになりました。

## 注意点

この修正を行った後、EF Core のモデルが変更されるため、マイグレーションを実行する必要があります。以下のコマンドを使用してマイグレーションを適用してください。

```bash
dotnet ef migrations add UpdateUserModel
dotnet ef database update
```

## まとめ

ASP.NET Core と EF Core を使用して多対多のリレーションを実装する際には、プロパティにセッターを定義することが重要です。今回の問題は、セッターがないためにデータが正しくデシリアライズされなかったことが原因でした。同様の問題に直面した場合は、プロパティの定義を確認してみてください。
2025/5/26主にITとかセキュリティの記事

Acronis サイバー脅威アップデート（2025 年 5 月）(5/24)
https://www.acronis.com/ja-jp/cyber-protection-center/posts/acronis-cyberthreats-update-may-2025/

Scattered Spider、ロシアランサムウェアと連携強化 – DragonForceとの提携で「トリプルA」攻撃ツールを獲得(5/23)
https://innovatopia.jp/cyber-security/cyber-security-news/55413/

Apple、iPhoneの魅力を伝える超短尺広告を公開！セキュリティや耐久性など紹介(5/24)
https://iphone-mania.jp/apple-595106/

ランサム被害で取引先情報が流出した可能性 - ニチノー緑化(5/23)
https://www.security-next.com/170468

3AMランサムウェア、メール爆撃とビッシングの組み合わせ攻撃を採用 – Sophos調査で判明した新手法の脅威(5/23)
https://innovatopia.jp/cyber-security/cyber-security-news/55416/

韓国通信大手の大規模情報流出、背後は中国？…国家機密狙った“サイバー戦争”疑惑(5/24)
https://www.afpbb.com/articles/-/3579450?cx_part=top_category&cx_position=3

私物Androidスマホの“公私混同”を防ぐ　「仕事用プロファイル」設定ガイド(5/24)
https://techtarget.itmedia.co.jp/tt/news/2505/24/news03.html

サイバー犯罪集団による不正アクセスで被害が相次ぎ、大手10社が補償対応を決めたのは、「●●口座」の乗っ取り？(5/24)
https://www.nikkei.com/prime/minutes/article/DGXZQOCD197DN0Z10C25A5000000

自分のメールアドレスがダークウェブに流出しているか調べられるサイト「Have I Been Pwned」(5/24)
https://note.com/pn3/n/nbf2889c6047a

Androidの広告、もう我慢しない。スマホが爆速＆快適になる簡単ブロック術3選(5/24)
https://www.lifehacker.jp/article/2505-ad-blocker-android/

【委託先リスク管理の実態を調査】過去5年間で62％の企業が委託先に関するインシデントを経験も、25.7％が対応体制を未整備(5/24)
https://www.excite.co.jp/news/article/Prtimes_2025-05-23-37919-22/

欧州 単一市場戦略 「今日の不確実な世界において、欧州人の最初のパートナーは欧州人自身でなければならない」(2025.05.21)(5/24)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/05/post-8d1283.html

卒業アルバムデータ大量流出も　いまさら聞けない「ランサムウエア」とは？データ復旧に身代金要求　感染したらどうする？(5/23)
https://newsdig.tbs.co.jp/articles/-/1930276

適性評価制度　円滑な運用で情報連携深めよ(5/24)
https://www.yomiuri.co.jp/editorial/20250524-OYT1T50011/

Amazon詐欺を超えるフィッシングが登場(5/24)
https://news.mynavi.jp/techplus/article/20250524-3331735/

フジテレビ疑惑暴いた「電子鑑識」　私用LINE、復元の壁(5/24)
https://www.nikkei.com/nkd/company/article/?DisplayType=1&ng=DGXZQOUC225XL0S5A520C2000000&nik_code=0001162
https://www.nikkei.com/article/DGXZQOUC225XL0S5A520C2000000/

住基ネットシステムが謎の突然停止…大阪市でトラブル頻発　280万人の個人情報にリスク(5/24)
https://www.sankei.com/article/20250524-NDWYKBCUTFIKBAOVPOXUOS6S4A/

出荷前から出荷後まで──三菱電機の製品セキュリティを掌る「PSIRT」は事業部門との“協働体制”(5/23)
https://enterprisezine.jp/article/detail/21694

知っておきたい「特殊詐欺防止策」過去最悪受け警視庁と携帯4社が連携(5/24)
https://ascii.jp/elem/000/004/274/4274523/?rss

テスト結果が校内漏えい　鈴鹿・天栄中学で　生徒端末で閲覧状態(5/24)
https://www.isenp.co.jp/2025/05/24/129775/

現代企業に不可欠なサイバーセキュリティソリューション：NPA、DLP、ZTNA、CASB、ゼロトラストの包括的解説(5/24)
https://nikkeimatome.com/?p=59783

【AI時代のサイバー攻撃】最新事例で学ぶセキュリティ対策(5/24)
https://cybersecurity-jp.com/column/109835

クレジットカードのセキュリティ対策はしている？(5/24)
https://www.excite.co.jp/news/article/MoneyBuJPX_article059646/

DOJは、カクボットサイバー攻撃の首謀者であるロシア市民に対する起訴を開始します(5/23)
https://voi.id/ja/teknologi/484169

韓国と欧州連合、仮想通貨盗難対策で協力(5/23)
https://portalcripto.com.br/ja/coreia-do-sul-e-uniao-europeia-se-unem-contra-roubo-de-criptomoedas/

なぜ芸能人のLINEは流出するのか　～“私的領域”の脆さと社会のまなざし～(5/24)
https://news.yahoo.co.jp/expert/articles/8128ea3bb74164a9c858ce11e652acfe0ac2e8c5
ポモドーロ・テクニックで作業時間が爆上がりした話

# はじめに

はじめまして、kuwaです。

学んだことをアウトプットするために、Qiitaを始めてみました。

どうぞ温かい目で読んでいただけると嬉しいです。

今回は技術的な話というよりも、ちょっとした雑記みたいな内容なので少し砕けた関西弁で書かせていただきます。ご了承ください。

👇ほんなら本題へ、レッツGO！！

## ポモドーロ・テクニックって何？

ポモドーロ・テクニックというのは

**「25分作業 + 5分休憩」を1セットとして、時間を区切って作業に取り組む**タイムマネジメント術や。

4セットごとに少し長めの休憩（15〜30分）を挟むのが基本やで。

- 1セット目：25分作業 → 5分休憩
- 2セット目：25分作業 → 5分休憩
- 3セット目：25分作業 → 5分休憩
- 4セット目：25分作業 → **15分休憩（←長めの休憩）**

こんな感じでサイクルを繰り返していくんや。

まあ要するに、ちょいちょい休憩挟むことで、全然疲れずに無限に集中できるってやつや。

---

## 始めたきっかけ

ワイのポモドーロ・テクニックとの出会いは、

**中学3年生のときに参加した塾の勉強合宿**で取り入れられていたんを6年ぶりに思い出したことがきっかけや。

当時は「なんか集中できるなあ」ぐらいの感覚やったけど、

大学生になって改めて試してみたら、**「めちゃくちゃ効果あるやんけ！」**　って度肝抜かれたわ。

---

## 実際にやってみた感想

気づいたら7〜8セットがあっという間に終わってんねん。

驚いたんは、**全然疲れへん**ことや。

「ちょっとだけ頑張る→ちょっと休む」を繰り返しているうちに、

不思議なことに、いつの間にか**合計何時間も集中して作業できてるんや**。

無理に頑張った感覚は全くないし、「気づいたら進んでる」っていう感覚が**クセ**になるんじゃ。

---

## ポイント

ポイントは**25分で必ず中断する**ことや。

「え、集中してるんやったらそのまま続けたらええんちゃうん？」

とかいう子がおるかも知らんけど、**ここがこのテクニックの肝**やで。

これは「ツァイガルニク効果（Zeigarnik effect）」という心理効果に基づいていて、

**人間は「やりかけの作業を完了させたい」という欲求を持ち続ける**と言われているらしいねん。（知らんけど）

つまり何が言いたいんかっちゅうと、25分でスパッ！と中断することで「続きをやりたい！」という気持ちが残るんや。

やから、次の作業にも自然とスムーズに続けられるちゅうこっちゃ。

もう一個大切なんは、**必ず5分間休憩を取ること**や。

「もうちょいやりたいな」と思っても、ぐっ！とこらえて、ガッ！と休むことが重要なんや。

これを徹底してな、頼むで。

---

## 休憩は「できる限り楽しむ」

5分休憩って短すぎへん？と思うかもしらんけど、

ここにもコツがあるんや。

**5分間はできるだけ「楽しいこと」をやる。**

ワイはこの時間に**アニメを見る**ようにしてるで。

ほんなら「はよ続き見たいわ」という気持ちから、25分間集中して作業できるで。

---

## なぜ効果があるのか？（自論）

ポモドーロ・テクニックが超絶効果的なんは、

**疲れる前に休憩するから疲れへん**からやと思ってるで。

これはマラソンに似てるなあ。

**最初から全力で走り続けたら後半バテるけど、ちょっと走ってちょっと休憩してたら無限に走れると思わへん？**

ポモドーロは言うなれば「集中力のマラソン」や。

こまめに休憩を挟むことで、脳を回復させながら作業を継続できるっちゅう仕組みや。

ワイの場合、

**1日で30セット（＝約12時間半）作業しても全く疲れへんかったで。**

むしろ

1日の終わりには「もうちょいイケたんちゃう？」って思うくらい、疲労感はなかったな。

---

## 使ったアプリ：**Bluebird**

ポモドーロ・テクニックを実践するうえで便利やったんが、スマホアプリの**Bluebird**や。
作業時間を自動で記録できるし、UIもええ感じやねん。

---

## 実際の記録

実際に記録してみた結果がこれや👇

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4051328/e159a4a9-6a59-4a63-bdd9-9c3732a2ac54.jpeg" width="300px" />

**1週間で、合計「58時間」も作業できてん。**

受験生時代の勉強時間をより全然長いわ。（笑）

ちなみに今は大学の授業も **14コマ・24単位**履修してるから、決して時間に余裕があるわけではないねん。

やけどポモドーロ・テクニックを使うことで、

**限られた時間でも集中して取り組めた**っちゅう実感があるわ。

---

## 実は…アニメもめっちゃ観てた

ワイはポモドーロ1セットごとに **アニメを5分観る（4セットごとに15分）** っていう休憩ルールにした。

これを58時間（＝約139セット）続けたら……

- 通常の5分休憩：
    
    5分 × 139セット = **695分**

    
- 4セットごとの15分休憩：
    
    139 ÷ 4 = 約34回 → 15分 × 34回 = **510分**
    

👉 合計：**695 + 510 = 1,205分（＝約20時間）**

つまり、**アニメを約20時間も観てた**ことになるんや。

1話20分換算で、**約60話分**や。

えぐすぎるやろ。。。

しかもそれに加えて、

**作業時間は58時間**。

これはもうリア充って言うてももええんちゃうか？（笑）


<!-- 
ちなみに今回観ていたアニメの中で特におもろかったんが、

- 『沖縄で好きになった子が方言すぎてツラすぎる』
- 『それでも歩は寄せてくる』
- 『君のことが大大大大大好きな100人の彼女』

このあたりです。どれも作業の合間にちょっと観るには最高でした。
-->



---

## 結論：**全人類におすすめしたい**

ポモドーロ・テクニックは、**全人類にぜひおすすめしたい**方法やで。

もちろん向き不向きはあると思うけど、
とりあえず一度試してみる価値は十分にあると思うで。

ぜひやってみて、自分に合うかどうか確かめてみてほしいわ。

---

## おわりに

ポモドーロ・テクニック、想像以上に良かった。
途中からアニメ見たいから勉強するっていう好循環が作れてたと思うわ。



最後に…
実はこの記事も**5分間の休憩時間を使って書き上げたんや（笑）**。

読んでくれてありがとう！😊