OmniAICreator/Qiita-1.07M huggingface dataset:
vimの基本操作について（初心者向け）

## はじめに
こんにちは！takimonです。

今回vimtutorなどでvimについて学習しました。

vimtutorなどで学んだ基本的な操作を、これからvimを始める方に向けてまとめます。

## vimとは
vimとはコマンドライン（cui）で操作することを前提に作られたviというエディターを超えるために作成されました。

特徴としてマウスを使わずに操作できます。

VScodeなどの一般的なエディタとは、キーボード操作中心である点が大きく異なっています。

## 基本操作について

以下では基本操作についてまとめましたので、表形式で紹介します。

### 起動と終了について

以下のコマンドではvimの起動・終了関連について紹介します。

|記号|内容|
|:--:|:--|
|:q|vimを終了する|
|:q!|vimを強制終了する|
|:w|変更を保存する|
|:wq|変更を保存して終了する|
|:!rm ファイル名|ファイルを削除する(Unix)|
|:!del ファイル名|ファイルを削除する（Windows）|

### 移動について

vimでは矢印キーでも移動できますが、vimの大きな特徴として、キーボードのホームポジションを維持したまま、以下のキーで効率的に移動できます。

|記号|内容|
|:--:|:--|
|h|左にカーソルを移動する|
|j|下にカーソルを移動する|
|k|上にカーソルを移動する|
|l|右にカーソルを移動する|
|w|単語単位で移動する|
|e|単語の最後の文字に移動する|
|CTRL+g|ファイル内での位置とファイルの状態を表示する|
|G|ファイルの最下行に移動する|
|gg|ファイルの先頭に移動する|
|行番号G|指定した行番号に移動する|
|:行番号|指定した行番号に移動する|


### テキストの編集

以下のキーで文字やテキストの挿入、編集、削除、置き換えをできます。

|記号|内容|
|:--:|:--|
|i|カーソルの位置から文字を入力する|
|a|カーソルの位置の右から文字を入力する|
|A|行の右端から入力する|
|x|カーソル下の文字を削除する|
|dw|カーソルの位置から次の単語の前までを削除する|
|de|カーソルの位置から単語の末尾までを削除する|
|d$|カーソルの位置から行の末尾までを削除する|
|dd|行全体を削除する|
|y|テキストをコピー|
|p|最後に削除またはコピーした行やテキストを貼りつける|
|rx|カーソル下の1文字をxに置き換える|
|ce|カーソルの位置から単語の末尾までを置きかえる|
|cc|行全体を置きかえる|
|:s/old/new|行内で最初に見つかったoldをnewに変更する|
|:s/old/new/g|行内のすべてのoldをnewに変更する|
|:%s/old/new/g|ファイル全体で見つかったすべてのoldをnewに変更する|
|:%s/old/new/gc|ファイル全体で見つかったすべてのoldをnewに変更する（置換前に確認する）|
|o|カーソルの下の行に新しい行を開けて挿入モードで入力できる|
|O|カーソルの上の行に新しい行を開けて挿入モードで入力できる|
|R|置換モードに入って文字を上書きしていく|

### 検索コマンド

以下のキーで文字列を検索できます。

|記号|内容|
|:--:|:--|
|/検索したい文字列|検索したい文字列を前方検索する|
|?検索したい文字列|検索したい文字列を後方検索する|
|n|同じ語句をもう一度検索する|
|N|逆方向に検索する|
|CTRL+o|ジャンプリストの古い位置に戻る|
|%|対応する(,[,{を検索する|

### コマンド取り消し

以下のキーでコマンドのコマンドを取り消しすることできます。

|記号|内容|
|:--:|:--|
|u|直前の変更を取り消す|
|U|行全体に対する直前の変更を取り消す|
|CTRL+R|取り消しをやり直す|

### 外部コマンドを実行する

以下から外部コマンドを実行できます。

|記号|内容|
|:--:|:--|
|:!実行したい外部コマンド|外部コマンドを実行する|

### ヘルプコマンド

以下からコマンドなどヘルプウィンドウを開いて確認できます。

|記号|内容|
|:--:|:--|
|:help|ヘルプウィンドウを開く|
|CTRL+w|ウィンドウを切り替える|
|:q|ヘルプウィンドウを閉じる|
|:help コマンド|コマンドのヘルプを開く|


## おわりに

今回紹介したコマンドたちは極々一部です。他にもさまざまな機能があるので、ぜひ調べてみてください。

また下記のコマンドでぜひvimtutorを試してみてください。

私も使いこなせるように頑張ります！

```

vimtutor

```
WEB技術入門の基礎知識まとめ

---

## はじめに

お疲れ様です。この記事では、先日読んだ「プロになるためのWEB技術入門」（旧版）で学んだ基礎知識を整理したのでご紹介します。

---

## WEB技術の基礎知識

### ステートフル

**ステートフル**とは、複数の通信において、過去のやり取りの情報を保持し、それを基に次の処理を行うことを指します。

* サーバーは以前の通信の情報を記憶しています。
* 後述のステートレスの反対の用語です。
* 後述のステートレスに比べて、実現する難易度は高いです。

### ステートレス

**ステートレス**とは、個々の通信が独立していて、過去の通信履歴に依存しないことを指します。

* サーバーは以前のリクエストに関する情報を保持しません。
* ステートフルの反対の用語です。

### クッキー

**クッキー**とは、クライアント（Webブラウザ）側に保存される小さなデータのことをいいます。

* クッキーを利用することで、クライアント側に状態を持たせることができます。
* 例えば、ログイン状態の維持や、Webサイトの設定情報の保存などに利用されます。
* クッキーが正しいか判断するのはサーバー側です。

### リクエスト

**リクエスト**とは、クライアントからサーバーに送信する要求のことを言います。例えば、「`https://blog.hatena.ne.jp/`」にブラウザでアクセスする、その部分がリクエストになります。

### レスポンス

**レスポンス**とは、リクエストからきた要求に対して、サーバーからクライアントにデータを応答することです。例えば、「`https://blog.hatena.ne.jp/`」にブラウザでアクセスした時に、HTMLや画像などがクライアントに送られます。その部分がレスポンスになります。

### プロトコル

**プロトコル**とは、サーバーとクライアントがやり取りする通信の共通のルールのことを言います。

* よくある代表的なものとして「**HTTP**（HyperText Transfer Protocol）」があります。
* プロトコルが違うコンピューター間の通信は、特別な仕組みがない限りできません。

### ポート番号

**ポート番号**とは、TCP/IPの通信によって待ち受けるアプリケーションの場所を識別する番号のことを言います。

* ポート番号の個数は65536個あります。
* よく使われる番号はいくつかあります。例えば、HTTPは**80番**、HTTPSは**443番**などです。
* IPアドレスとポート番号を指定することで、特定のコンピューターのアプリケーションに通信することができます。

---

## さいごに

Web技術を理解する上で非常に重要な基礎知識なので、定着できるようにしていきます！

ちなみに、先日新版の「プロになるためのWEB技術入門」を軽く目を通したのですが、量も内容も全然違いました(笑) みなさんも旧版と新版でもし悩んでいる方がいたら、絶対新版の方を買ってください！
399. Evaluate Division

# 問題内容
* equations: 文字列のペアの配列。各ペア [Ai, Bi] は、変数 Ai と Bi を表す
* values: 実数の配列。values[i] は、equations[i] に対応する Ai / Bi の値を示す。つまり、Ai / Bi = values[i] 
* queries: 文字列のペアの配列。各ペア [Cj, Dj] は、Cj / Dj の値を求める必要があるクエリを表す
* 求められているのは、すべてのクエリに対する答えの配列。もし、あるクエリの答えを決定できない場合は、-1.0 を返す

# 解答例
```python:sample
class Solution:
    def calcEquation(self, eq: List[List[str]], values: List[float], queries: List[List[str]]) -> List[float]:
        def dfs(node,value):
            nonlocal ans

            visited.add(node)
            if node==dst:
                ans=value
                return

            for nbr,wt in graph[node]:
                if nbr not in visited:
                    dfs(nbr,value*wt)

        #
        graph=defaultdict(list)
        n=len(values)
        # graph
        for i in range(n):
            graph[eq[i][0]].append((eq[i][1],values[i]))
            graph[eq[i][1]].append((eq[i][0],1/values[i]))
        
        result=[]
        for src,dst in queries:
            if src not in graph or dst not in graph:
                result.append(-1)
                continue
                
            visited=set()
            ans=-1
            dfs(src,1)
            
            result.append(ans)
        return result
```

# ポイント
* 変数間の関係を有効グラフとしてとらえる
* 各変数をグラフのノードとしている
* グラフの開始点から目的のノードまで途中の係数を積算していくと求める数値になる
* 関数dfsはその積算処理を定義している
* それ以外のforループではノードの定義やクエリ内走査を行っている
【Next.js】App Router ルーティング

## 1. ルーティングの設定方法

Next.js App Router は **ファイルシステムベースのルーティング** を採用している。  
`app/` ディレクトリ以下の構造がそのまま URL 構造になる。

### 基本ルーティング

- `app/page.tsx` → `/`
- `app/about/page.tsx` → `/about`
- `app/products/page.tsx` → `/products`

### ネストルーティング

- `app/products/page.tsx` → `/products`
- `app/products/details/page.tsx` → `/products/details`


## 2. 特殊な役割を持つファイル名
App Router には、特定のファイル名が持つ「予約された意味」がある

| ファイル名             | 役割 |
|------------------------|------|
| `page.tsx`             | ページ本体（ルートに対応） |
| `layout.tsx`           | ページ共通のレイアウト。子ルートを `children` としてラップ |
| `template.tsx`         | 共通レイアウト。遷移時に再レンダリング |
| `loading.tsx`          | 非同期処理中のローディングUI（Suspense） |
| `error.tsx`            | レンダリングやフェッチエラー時の エラーページ |
| `not-found.tsx`        | `notFound()` 実行時の 404 ページ |
| `head.tsx`             | ページごとの `<head>` カスタマイズ |
| `route.ts`| APIルートの定義 |


## 3. ファイル構造とレンダリングの関係

ファイルとフォルダの構造が レンダリング時 の階層と一致する。

```bash
app/
├── layout.tsx        # グローバルレイアウト
├── page.tsx          # "/"
├── about/
│   ├── layout.tsx    # "/about" 用レイアウト
│   └── page.tsx      # "/about"
```

レンダリング順序：

```
app/layout.tsx → app/about/layout.tsx → app/about/page.tsx
```


## 4. 動的ルーティング
動的セグメントは、フォルダ名を角括弧で囲むことで作成できる
動的セグメントは、`layout`、`page`、`route`、`generateMetadata`関数に`params` propとして渡される

```bash
app/blog/[slug]/page.tsx → /blog/:slug
```

```tsx
// app/blog/[slug]/page.tsx
export default function BlogPost({ params }) {
  return <h1>{params.slug}</h1>;
}
```

### 静的生成のための `generateStaticParams`
`generateStaticParams`関数は、動的ルートセグメントと組み合わせて使用することで、リクエスト時ではなくビルド時にルートを静的に生成できる。
```tsx
export async function generateStaticParams() {
  const posts = await fetchPosts();
  return posts.map((post) => ({ slug: post.slug }));
}
```


## 5. プライベートフォルダ（アンダースコア `_`）

アンダースコア `_` で始まるフォルダはルーティングに含まれない。

```bash
app/
├── _components/
│   └── Header.tsx
```

用途例：

- UIロジックをルーティングロジックから分離する
- プロジェクト全体で内部ファイルを一貫して整理する
- コードエディタでファイルを整理およびグループ化する
- 将来のNext.jsファイル規約との潜在的な命名競合を回避する


## 6. ルートグループフォルダ

`()`で囲まれたフォルダ名は、URL には影響しない。  
URLパスの構造に影響を与えることなく、ルートセグメントやプロジェクトファイルを論理的なグループに整理することができる。
```bash
app/
├── (marketing)/
│   └── home/page.tsx     # → /home
├── (dashboard)/
│   └── user/page.tsx     # → /user
```

用途例：

- サイトのセクション、意図、チームごとにルートをグループ化する
- 同じルートセグメントレベルでネストされたレイアウトを有効にする


## まとめ

| 概念               | 説明 |
|--------------------|------|
| ルーティング構造   | `app/` 配下のディレクトリ構成が URL に対応 |
| 特殊ファイル       | `page.tsx`, `layout.tsx`, `loading.tsx`, `error.tsx`, など |
| レンダリング構造   | フォルダ構造に基づいてレイアウトが適用される |
| 動的ルート         | `[param]`, `generateStaticParams` 対応 |
| プライベート構造   | `_name` フォルダで構造整理（ルーティング対象外） |
| ルートグループ     | `(name)` フォルダでパスに影響を与えず構造管理 |
PostgreSQL 18がやってくる(11) Improve the speed of multiplication

# はじめに
にゃーん。
5月連休が終わった直後の5/8に、[PostgreSQL 18 Beta1がリリース](https://www.postgresql.org/about/news/postgresql-18-beta-1-released-3070/)されました。
しかし、平日は仕事疲れでリリースノートの確認は進まず、2週間くらいかけてやっとリリースノートを一通り眺めたという状態・・・。
で、その中で「かけ算のスピードを改善した」という項目にふと目が止まりました。カテゴリとしては"Source Code"なので、あんまり利用者向けの改善という印象はないのだけど、かけ算という割と一般的な用語でのスピード改善なので、もしかすると利用者から見ても恩恵あったりする？ということで簡単に調べてみました。

# コミットログにある改善内容
最近のPostgreSQLリリースノートは、リリースノート記載項目の末尾に、コミットログへのリンクがついている。リリースノート上の記述だけではよくわからん、という人はコミットログで補足できるということらしい。

この項目のコミットログは[Optimise numeric multiplication using base-NBASE^2 arithmetic.](https://git.postgresql.org/gitweb/?p=postgresql.git;a=commitdiff;h=8dc28d7eb)にある。

PostgreSQLの数値データ型は大まかに3種類に分けられる。
|種類|データ型|
|:--|:--|
|整数データ型|smallint, integer, bigint<br>smallserial, serial, bigserial|
|任意の精度を持つ数|decimal, numeric|
|浮動小数点データ型|real, double precision|

コミットログの内容をざっと見した感じでは、任意の精度を持つ数（numreric）のかけ算の性能が向上したということらしい。
（で、その結果、numeric_big というリグレッションテストの実行時間が改善された、ということらしい）

# 実測
## numeric_big.sql の実行時間の比較
雑ではあるけど、ソースコードに含まれるリグレッションテストのSQLファイル``src/test/regress/sql/numeric_big.sql``をpsqlに食わせてそのtimeによるpsql自体の実行時間を見てみる。（3回実行、その平均値を用いる）

|バージョン|time()|
|:--|--:|
|PostgreSQL 17|0.510|
|PostgreSQL 18 Beta1|0.344|

確かに``numeric_big.sql``自体の処理時間は有意に向上しているようだ。
ただ、このリグレッションテストファイルは、純粋にかけ算だけ行っているわけではない。
かけ算だけに特化したパターンで追試してみる。

## numericのかけ算を大量に実行してみる
今度は自分でnumeric型の演算を大量に実行して、PostgreSQL 17/PostgreSQL 18 Beta1の処理時間を計ってみる。

とりあえず``random()``で生成した値をかけ算する、という処理を10万回繰り返すSQLで試してみる。

```sql
EXPLAIN ANALYZE
SELECT generate_series(1, 100000),
    random()::numeric
    *
    random()::numeric
;
```
これは1行1回のかけ算のケースだが、同様にかけ算を2回、3回実行するSQLも作成し、それをPostgreSQL 17/PotgreSQL 18 Beta1で流してみた。

![numeric_multi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32626/091685ee-ecc4-4cfc-bfdb-f011debe7cb9.png)

この結果を見ると、効果はあるがそこまで処理時間が改善されたようには見えない。
これには理由があって、上記のSQLの処理時間の大半はかけ算の処理ではなく、``random()::numeric``の実行時間に費やされているためである。

このため、``random()::numeric``の処理時間を別に測定し、その数を差し引いたもの（ほぼかけ算の時間のみになっているはず）で比較すると以下のようになる。

![numeric_multi_without_random.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/32626/fc44712f-5c64-4b9d-9a56-52d1156cc6a1.png)

numeric型のかけ算の処理時間自体は、かなり改善されているという結果になった。


# おわりに
普段、numeric型を積極的に使うことはあまりないけれど、例えばOracleからPostgreSQLへ移行する場合、Oracleのnumber型をシンプルにPostgreSQLのnumeric型にマッピングすることはありそう。
そういう案件で、数値へのかけ算を多用するケース（例えば税率の演算とか？）で、地味に性能改善が見込めそうな改善項目なのかもしれません。
検索エンジンの表示順はどうやって決まっている？

## 🔍 検索エンジンの表示順に関わる主な要素は？

1. **キーワードとの関係性**  
　検索ワードとページの内容がどれだけ一致しているか。

2. **人気（被リンク数）**  
　他サイトからどれだけリンクされているか。

3. **更新頻度**  
　情報が新しいかどうか。

4. **見やすさ・使いやすさ**  
　スマホ対応や読みやすさも評価対象。

5. **ユーザーの行動**  
　クリック率や滞在時間なども重要。

---

## 🔄 検索エンジンごとの主な違い

| 項目         | Google                        | Bing（Microsoft）              | Yahoo! JAPAN（※中身はBing）        |
|--------------|-------------------------------|----------------------------------|----------------------------------|
| アルゴリズム | 自社開発（AI活用が多い）       | Bing独自（ChatGPT技術も活用）    | Bingをベースに日本向け調整あり      |
| 精度         | 高い。検索意図の理解が得意。   | 画像・動画検索に強め。             | 日本語や地域情報に強みあり          |
| 表示の特徴   | 広告・マップ・Q&Aなど豊富      | AIチャット風の検索も対応           | ニュース・知恵袋の表示が目立つ       |
| 個人化の強さ | ログイン状態で強く反映される   | 比較的おだやか                    | やや弱め                           |

---

## 🛠 SEO（Search Engine Optimization）とは？

**検索エンジンで上位に表示されるための工夫や最適化のこと**

### たとえば：
- キーワードを適切に入れる  
- 読みやすい文章構成にする  
- タイトルや見出しを工夫する  
- モバイルフレンドリーな設計にする  
- 信頼される外部リンクを得る

---

## 💻 コード側でできるSEO対策

```html
<!-- タイトルを設定 -->
<title>ページのタイトル</title>

<!-- 説明文（検索結果に表示） -->
<meta name="description" content="このページは〜について解説します。">

<!-- モバイル対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1">
```

- `h1〜h3`：見出し構造を整理（`h1`は1ページに1つ）  
- `alt属性`：画像に説明をつける（例：`<img src="xxx.jpg" alt="説明">`）  
- 構造化データ（JSON-LD）でページの種類を明示  
- 内部リンクを整理して巡回しやすく  
- ページ速度を改善（画像圧縮・JS/CSS最適化など）

---

## 🛡 検索エンジンが行う「SEO対策」対策

検索エンジンは、不正なSEOを防ぐために以下の対策をしています。

1. **スパムリンクの無効化**  
　無理なリンク集めは効果なし。

2. **キーワード詰め込みの無視**  
　不自然な繰り返しは逆効果。

3. **コピーコンテンツの排除**  
　コピペされたページは評価が下がる。

4. **低品質ページの評価ダウン**  
　内容が薄いページは上位表示されない。

5. **AIや自動生成の監視**  
　無意味な自動文章は見抜かれる。

6. **アルゴリズムの定期更新**  
　小手先の対策はすぐに無効化される。

---
【個人開発mini】笑顔の重要性を再認識した私がつくってみたサービス

## はじめに

はじめまして。
2024年3月よりプログラミングスクールRUNTEQに入学した、わーちゃんと申します。
スクールを2024年12月に卒業した今、改めて基本的な部分を振り返っています。
今回、振り返りの中で作ってみたいミニアプリのアイデアが思い浮かんだので作成してみました。

**▶サービスURL：[ビリーズブートスマイル](https://wa-amuse-application.glitch.me/)**
　👆トップページから「ビリーズブートスマイル」をクリックすると、今回該当サービスのページへ遷移します。

**▶Github：準備中**

![Smile](https://cdn.glitch.global/a36e5cfc-0292-457a-b732-b12a1659227e/smileogp.png?v=1742713005075)


## 💪サービス概要と開発した理由👄
### 概要
- 自分の顔を見ながら笑顔のトレーニングができるサービスです。
- 自分の顔を見ることで、特に口回りの筋肉を意識してトレーニングすることが可能です👄


### 開発理由
- 就職活動初期、自分の表情がかたく、笑顔が全くないことを思い知る
- キャリア担当の方からも笑顔がないことを指摘される
- 「メラビアンの法則」にて、視覚情報の影響力の高さを知る
- 私自信、今まで出会った人で好印象だったのは、圧倒的に初対面が「笑顔」の人だった、という事を思い出す
- 自分のPCで、同じ画面上に手本と自分の画像がある状態で笑顔のトレーニングができればいいのでは？と考える

このような経緯から今回のサービスを開発するに至りました。


## 💪機能一覧👄
1. **ヘッダー**
    - 固定ヘッダーの表示
    - ロゴボタンのクリックでアクション実行（タイトルのロゴ・背景変化）
    - 現在の日付と時刻を表示（Web Workersを使用）
2. **フッター**
    - SNS共有ボタンの設置（Twitter共有）
3. **インタラクティブ要素**
    - カウントボタン（指定時間からカウントダウンし、ゼロでアクション実行）
    - モーダルウィンドウの表示（特定の操作時にポップアップが開く）
    - 吹き出しメッセージ表示
4. **カメラ機能**
    - デバイスカメラの映像を取得しリアルタイムで表示（Media APIを使用）


## 💪使用技術👄

| カテゴリ | 技術 | 説明 |
| --- | --- | --- |
| **開発環境** | Glitch | Webアプリを開発・ホスティングできるオンラインプラットフォーム |
| **コード管理** | GitHub | ソースコードのバージョン管理に使用 |
| **フロントエンド** | HTML | Webページの構造を定義 |
|  | CSS | Webページのデザインを担当 |
|  | JavaScript | ページの動的な処理を記述 |
| **API** | Web Worker API | バックグラウンドでの処理（日時更新） |
|  | Media Capture and Streams API | `getUserMedia` を使用してカメラ映像を取得 |
|  | タイマーAPI (`setInterval / setTimeout`) | 一定時間ごとに処理を実行 |
|  | Web Audio API | 音声の録音・処理・再生を行う |
| **インフラ** | Glitch Hosting | Glitch上でアプリをホスト |
| **その他** | フォント (`@import Google Fonts`) | 特定のフォントを適用 |
|  | Event Listener (`addEventListener`) | ユーザー操作を検知 |
|  | DOM操作 (`document.querySelector`, `innerText`, etc.) | ページ内の要素を取得・更新 |



## 💪頑張った点、こだわった点👄
- Javascriptの公式ドキュメントからAPIを選定
- Webカメラを使用
- タイトルロゴボタンをクリックすることで背景やタイトルが変化する実装
- 現在時刻の表示
- カウントダウンの音の再生とミュート機能
- フッターにXへのシェアボタン実装
- 10秒がわかりやすいよう、視覚情報に加え、音でもわかるようにした


## 💪最後に👄
今回、スクール卒業後に制作したサービスで、基本に振り返ったモノを開発できたのではないかと、感じています。
現在、様々なフレームワークがあります。
Javascript・HTML・CSSといった基本（土台）部分をしっかり理解することで、これらのフレームワークや言語のキャッチアップや理解度の向上が望めるのではないかと個人的に思っています。
スポーツで言えば、基本的な体力やフォームもできていないのに、いきなり、カットボールやスマッシュを攻略しに行くような事。

引き続き技術力向上に向け精進し、小さいモノでもいいから、面白い・役に立つようなサービスを作っていきたい。いきます！
順序・無限・構造・解析と純粋数学(日記)







第1部：論理・順序・集合の基礎構築

1. 命題・述語論理と形式的証明
	•	命題論理：真理値表、トートロジー、推論規則
	•	一階述語論理：量化子、項、論理式、構文論と意味論
	•	自由変数／束縛変数、証明体系（自然演繹、ヒルベルト体系）

2. 集合論の公理と集合構造
	•	ZFC 公理系：外延性、公理的構築（空集合、和集合、冪集合、公理的無限）
	•	集合の基本操作、写像・逆写像、直積、合成写像
	•	順序数・基数、整列集合、選択公理とその同値性（Zornの補題、整列可能定理）

3. 順序構造と束論
	•	半順序集合・全順序集合、完備束・分配束・ブール代数
	•	下限・上限、最小元・最大元、ギャロア接続
	•	Heyting代数と直観主義論理、位相空間との関係

⸻

第2部：無限・濃度と基礎論の深化

4. カントール理論と濃度階層
	•	可算集合・非可算集合（実数の非可算性）
	•	対角線論法、シュレーダー・ベルンシュタイン定理
	•	濃度の演算：加法・乗法・冪集合
	•	アレフ階層と連続体仮説（CH）、一般連続体仮説（GCH）

5. 公理的集合論と強制法の概観
	•	ZFCのモデル論：Skolem関数、スコーレムのパラドックス
	•	Gödelの完全性定理・不完全性定理（構文論 vs 意味論）
	•	強制法（forcing）による独立性証明の直観的理解

⸻

第3部：実解析と極限構造

6. 実数体系とε-δ理論
	•	実数の構成（Dedekind切断、Cauchy列）
	•	完備性と上限性質
	•	ε-δ 論法による極限・連続・一様連続の厳密定義

7. 微分・積分・関数列の解析的構造
	•	平均値の定理、テイラー定理と剰余項評価
	•	リーマン積分と可積分関数の判定条件
	•	一様収束と微分・積分の交換、関数空間における構造

⸻

第4部：測度・関数解析・無限次元構造

8. ルベーグ測度と収束定理
	•	σ-加法族、可測集合・関数の構築
	•	ルベーグ積分とリーマン積分の包含関係
	•	優収束定理・モノトーン収束定理・ルベーグの収束定理

9. バナッハ空間・ヒルベルト空間
	•	ノルム空間・内積空間、完備性と連続線形写像
	•	リースの表現定理、直交展開、フーリエ解析
	•	有界作用素、スペクトル理論の初歩

10. 関数空間と弱収束
	•	Lp空間、Sobolev空間、双対空間の構造
	•	弱収束・強収束・弱*収束の違いと意味
	•	分布・超関数と微分演算の拡張（解析的構造の極限的形式）

⸻

第5部：圏論と構造の抽象統一

11. 圏論の基礎構築
	•	圏（category）：対象・射・合成・恒等射
	•	関手・自然変換、随伴・極限・余極限の概念
	•	ヨネダ補題と圏論的同値

12. 論理・集合論と圏の対応
	•	命題論理＝ブール代数＝トポスの射影構造
	•	集合圏（Set）、関手圏（[C, Set]）とトポス理論への導入
	•	モデル理論と圏論的論理（カテゴリカル・セマンティクス）

⸻
微分と線形代数とフーリエ変換(日記)


https://x.com/linear_tec/status/1925919894719156331


⸻

 「微分で線形に近似する」：局所性と近似の考え方

■ 概要

現実世界の多くの現象は非線形で複雑です。しかし「小さな変化（局所）」に着目すれば、ほとんどの現象は一次近似（テイラー展開の第1項）によって線形的に近似することができます。これにより数学的に解析しやすくなります。

■ 数学的基盤
	•	テイラー展開（一次近似）
	•	偏微分を使った多変数関数の線形化

■ 応用例
	•	力学：ニュートンの運動方程式で、力が変化しても微小時間ごとに近似可能
	•	回路理論：非線形素子でも微小信号領域で線形近似し、インピーダンスで表現
	•	統計：非線形モデルも最小二乗法やロジスティック回帰で線形的に推定

⸻

「線形代数でまとめる」：構造化と解法の基礎

■ 概要

微分で得た式や関係性を行列・ベクトル形式に落とし込むことで、構造全体を俯瞰でき、解析・数値計算がしやすくなります。複雑な現象でも、線形代数をベースとしたアルゴリズムに変換可能です。

■ 数学的基盤
	•	行列とベクトルの表現
	•	線形写像・固有値・対角化・SVD
	•	連立一次方程式の解法（LU分解、QR分解など）

■ 応用例
	•	制御工学：状態空間モデルによってシステムを行列表現
	•	統計学：回帰分析の正規方程式（X^TX\beta = X^Ty）
	•	振動解析：固有値解析によるモード分離

⸻

「必要に応じてフーリエ解析で微分方程式を解く」：周波数の視点での単純化

■ 概要

微分方程式は時空間で複雑に見えても、フーリエ変換によって周波数領域に移すと代数方程式になることがあります。これにより、計算が容易になるだけでなく、現象の本質的な性質（周期性、伝播、減衰など）も直感的に理解できます。

■ 数学的基盤
	•	フーリエ級数、フーリエ変換
	•	畳み込み定理
	•	スペクトル解析、ラプラス変換

■ 応用例
	•	物理学：熱方程式や波動方程式の解析
	•	信号処理：フィルタ設計、ノイズ除去、スペクトル分解
	•	電磁気学：マクスウェル方程式の周波数領域解法（電磁波解析）

⸻

総括：なぜこの3ステップが「共通のセンス」なのか？

この一連のプロセスは、「複雑な現象をいかに抽象化し、普遍的な枠組みに落とし込むか」という科学技術全般における根源的なアプローチです。以下のように捉え直せます：
	•	微分 → 局所変化を見る「顕微鏡」
	•	線形代数 → 系全体を構造としてとらえる「鳥瞰図」
	•	フーリエ解析 → 周波数という「異なる次元」から見ることで単純化する「変換レンズ」
[Blender]ライトのガイドライン（照射範囲）が邪魔な時

# 概要
![スクリーンショット 2025-05-24 083302.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/60c9b1e7-5bce-42e3-ba5c-3c8844ffd2d5.png)

シーン上にライトが増えるとガイドラインがたくさんあって見づらくなります。でも普通にライト本体を非表示にするとシーンを照らす効果も消えてしまいます。
そんなジレンマを解消する方法があります。

# 本文
画面右上Overlays > ExtrasをOFFにします。

![スクリーンショット 2025-05-24 083701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/57c191cc-0f0a-4ff3-8afd-6b21a4ff4f52.png)

これでライト効果を残したままガイドラインだけ非表示になりました:star2:
![スクリーンショット 2025-05-24 084218.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617265/e9cfe246-9129-40f8-a43f-b3f9f14fafd3.png)

# 補足
カメラも消えるのでご注意を！
Mojolicious::1対1のビデオ通話

# はじめに
「[WebRTCを利用した1対1のビデオ通話サンプル](https://qiita.com/nakka_/items/555f0da0289b75edd420)」をMojolicious::Liteに移植しました。

# 環境
TLSサポートにはIO::Socket::SSLが要求されます。
IO::Socket::SSLはNet::SSLeayに依存しています。
Net::SSLeayのインストールには

- DebianとUbuntuでは、libssl-devとzlib1g-dev
- Red Hat Enterprise LinuxとFedoraでは、openssl-develとzlib-devel

が必要になります。

# インストール
```
webrtc_server.pl
public
  + index.html
  + webrtc.js
```

Ubuntu
```
sudo apt install libssl-dev
sudo apt install zlib1g-dev
```

CentOS（[CentOS6.4上でMojolicious+WebSocket+SSL環境構築](https://qiita.com/nkns165/items/6605c0bc192f2f94eb45)）
```
sudo yum install openssl-devel
sudo yum install zlib-devel
```

IO::Socket::SSLとMojoliciousをインストールします。
```
cpanm IO::Socket::SSL
cpanm Mojolicious
```

開発サーバーを起動します。
```
morbo -l https://*:8443 webrtc_server.pl
```

# サーバー
webrtc_server.jsの移植は[リアルタイムチャット (Mojolicious::Lite)](https://mojolicious.perlzemi.com/blog/20100403127089.html)を参考にしました。
サーバーから3分ごと、クライアントから30秒ごと接続確認をしていましたが、3時間に延命してますのでお兄さん許して。

```perl:webrtc_server.pl
use strict;
use warnings;

use Mojo::JSON 'encode_json';
use Mojolicious::Lite;

# 接続リスト
my @connections = ();

# WebSocket処理
websocket '/' => sub {
  my $self = shift;

  $self->inactivity_timeout(10800);

  my $log = $self->log;

  # Receive message
  $self->on('json' => sub {
    my ($self, $json) = @_;
    if ($json->{open}) {
      $log->info('open: '
          . $self->{tx}->remote_address
          . ': local='
          . $json->{open}{local}
          . ', remote='
          . $json->{open}{remote});

      # 同一IDが存在するときは古い方を削除
      @connections = grep {
        !(   $_->{local} eq $json->{open}{local}
          && $_->{remote} eq $json->{open}{remote})
      } @connections;

      # 接続情報を保存
      push(
        @connections,
        {
          local  => $json->{open}{local},
          remote => $json->{open}{remote},
          ws     => $self
        }
      );
      foreach my $data (@connections) {
        if ($data->{local} eq $json->{open}{remote}) {

          # 両方が接続済の場合にstartを通知
          $data->{ws}->send(encode_json({start => 'answer'}));
          $self->send(encode_json({start => 'offer'}));
          last;
        }
      }
      return;
    }

    # 対向の接続を検索
    foreach my $data (@connections) {
      if ($data->{local} eq $json->{remote}) {

        # シグナリングメッセージの転送
        $data->{ws}->send(encode_json($json));
        last;
      }
    }
  });
  
  # Finish
  $self->on('finish' => sub {
    @connections = grep {
      if ($_->{ws} != $self) { 1; }
      else {
        foreach my $remoteData (@connections) {
          if ($remoteData->{local} eq $_->{remote}) {

            # 対向に切断を通知
            $remoteData->{ws}->send(encode_json({close => 1}));
            last;
          }
        }
      }
    } @connections;
    $log->info('close: ' . $self->{tx}->remote_address);
  });
};

# 静的ファイル処理
get '/' => sub {
  my $self = shift;
  $self->reply->static('index.html');
};

app->start;
```
# クライアント
index.htmlとwebrtc.jsは省略します。
（startVideoは一度しか呼ばれず、その前にwindow.streamは設定されないので、「既存のストリームを破棄」する必要はないのでは？と思います）
%記法　（Ruby）

# %記法について
%記法について調べたのでまとめます。
%記法はさまざまな種類のリテラル（文字列、配列、記号など）を簡潔に書ける構文です。

## %q
シングルクォートの文字列リテラルを簡潔に書くためのものです。  
式展開はしない。
```Ruby
%q(hello world) # => 'hello world'
```

## %Q
ダブルクォートの文字列リテラルを簡潔に書くためのものです。  
式展開はする。
```Ruby
name = "world"
%Q(hello #{name}) # => "hello world"
```

## %w
文字列の配列を簡潔に書くものです。
式展開はしない。
```Ruby
%w(hello world) # => ['hello', 'world']
```

## %W
文字列の配列を簡潔に書くものです。
式展開はする。
```Ruby
name = "world"
%W(hello #{name}) # => ["hello", "world"]
```

## %i
シンボルの配列を簡潔に書くものです。
式展開はしない。
```Ruby
%i(hello world) # => [:hello, :world]
```

## %I
シンボルの配列を簡潔に書くものです。
式展開はする。
```Ruby
name = "world"
%I(hello #{name}) # => [:hello :world]
```

## まとめ
%記法を使用することで、簡潔に書くことができます。
WebMSX で BASIC プログラムを実行するカートリッジイメージを作る

# 目的

[WebMSX](https://webmsx.org/) を用いて、BASIC のプログラムを格納し、自動実行するカートリッジイメージ (`.rom` ファイル) を作る。

# 手順

## 1. メモリ上の BASIC プログラムの格納位置を設定する

以下のプログラムをコピペして実行する。
WebMSX への貼り付けは、まず Alt+V を押して「PASTE NOW」を出し、その後 Ctrl+V を押すことでできる。

```text
POKE&HF676,&H11:POKE&HF677,&H80:POKE&H8010,0:NEW
```

これにより、BASIC プログラムを格納する位置 (`TXTTAB`) を 0x8011 番地に設定する。
また、その直前の番地 (0x8010) を、BASIC のプログラムの開始を表す 0x00 に設定する。

これは
[3章 カートリッジソフトの作成法 - MSX Datapack wiki化計画](http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=3%BE%CF+%A5%AB%A1%BC%A5%C8%A5%EA%A5%C3%A5%B8%A5%BD%A5%D5%A5%C8%A4%CE%BA%EE%C0%AE%CB%A1)
に掲載されているコードを参考にしている。
同ページでは 0x8021 番地から格納する設定にしているが、カートリッジのヘッダは 16 バイトなので、0x8011 番地から格納していいはずである。

## 2. カートリッジに格納するプログラムを流し込む

カートリッジに格納するプログラムを、コピペなどで WebMSX に流し込む。
今回は、例として以下のプログラムを用いる。

```text
10 I = 0
20 PRINT I
30 I = I + 1
40 IF I < 10 GOTO 20
```

## 3. プログラムを実行する

流し込んだプログラムを `RUN` などで実行する。
一度実行しておくことで、`GOTO` 命令の内部表現が行番号から飛び先のメモリ番地に変換され、実行の効率を上げることができる。

## 4. イメージを保存するディスクを用意する

Drive A アイコンを左クリックし、「Add Blank Disk」をクリックする。

## 5. プログラムをディスクに保存する

以下のプログラムをコピペして実行する。

```text
A=&H8012:FORI=0TO1:P=PEEK(A):I=-(P=0):A=(P*&H100+PEEK(A-1)+1)*(1-I)+A*I:NEXT:BSAVE"A:CODE.ROM",&H8007,A
```

これは、プログラムが格納されている領域の終端を探し、メモリのそこまでの部分をファイル `CODE.ROM` に保存するプログラムである。
`BSAVE` で保存する際、先頭に 7 バイトのヘッダがつくので、メモリの先頭からその分を飛ばしたアドレスを指定している。

メモリ上で、BASIC のプログラムの各行は、先頭に次の行の先頭のアドレスがリトルエンディアンで格納される形式で格納されている。
そして、プログラムの終端では、このアドレスのかわりに 0x0000 が格納されている。
そこで、このアドレスの上位を読み取り、それが 0 でなければプログラムの行として次の行に移動し、0 であればプログラムの終端と判断する。

参考：[4章 BASICの内部構造 - MSX Datapack wiki化計画](http://ngs.no.coocan.jp/doc/wiki.cgi/datapack?page=4%BE%CF+BASIC%A4%CE%C6%E2%C9%F4%B9%BD%C2%A4)

## 6. 保存したファイルにヘッダを書き込む

以下のプログラムをコピペして実行する。

```text
OPEN"A:CODE.ROM"AS#1LEN=16:FIELD#1,16ASA$:LSETA$="AB"+STRING$(6,0)+CHR$(&H10)+CHR$(&H80)+STRING$(6,0):PUT#1,1:CLOSE#1
```

このコードにより、プログラムを保存したファイル `CODE.ROM` の先頭 16 バイトに、以下の要素からなるヘッダを書き込む。

* 識別用ID `"AB"` (0x41 0x42)
* 機械語ルーチンのアドレス 2バイト×3 今回は使用しないので全て 0x0000
* BASIC プログラムの先頭アドレス 2バイト 今回は 0x8010 (リトルエンディアン)
* 予約領域 6バイト 0で埋める

## 7. 保存したファイルを取り出す

Drive A アイコンを左クリックし、「Save Disk Image」をクリックする。
保存先を聞かれるので、適当に選択する。

保存したファイルを、以下のソフトウェア (Windows 用) で読み込む。
[DiskExplorerの詳細情報 : Vector ソフトを探す！](https://www.vector.co.jp/soft/win95/util/se107750.html)

プロファイルは「plain image」を選択する。
すると、リストに「CODE.ROM」があるはずなので、これを保存する。
(エクスプローラーにドラッグ&ドロップする、右クリックして「取り出して保存」、など)

## 8. 動作確認をする

Cartridge 1 アイコンを左クリックし、「Load ROM Image」をクリックする。
ファイルの選択を求められるので、保存した `CODE.ROM` を選択する。
すると、リセットがかかり、プログラムが実行されるはずである。

# 結論

WebMSX の操作により、BASIC のプログラム (正確にはそれを中間表現に格納したデータ) を過不足なく格納し、実行可能なカートリッジのイメージファイルを作成することができた。
コピペで簡単！SQL Server用 INSERT文ジェネレータを作ってみた


## はじめに
前回の記事でCREATE TABLE文を組み立てるものを作成しました。

https://qiita.com/ken1math/items/3baeb8edd0adbe6c8398

今回の記事では、同様な感じでINSERT文を組み立てるものを作成しました。
できたものはこちらです。
[INSERT文ジェネレータ (SQL Server専用)](https://ken1math.github.io/sqlserver-insert-table-generator/insertTableGenerator.html)

## ツールの使い方
1行目に列名、 2行目:型、 3行目以降:データ、としてエクセルで用意したものをはりつけて、「INSERT文を生成」ボタンをクリック。

もしくは画面上で、テーブル名や列定義、データ入力をしてから「INSERT文を生成」ボタンをクリック。

## 注意点
- 本ツールが生成する**SQLは SQL Server専用** の構文です。他のデータベースではそのまま実行できません。

- 生成されたSQLは必ず内容をご確認のうえ、**自己責任**でご利用ください。

## おわりに
テストデータをいれるのがはかどりました。
uv コマンド チートシート

# uv コマンド チートシート

## 🚀 クイックスタート
```bash
# uvのインストール確認
uv version

# 新規プロジェクト作成
uv init myproject && cd myproject

# 仮想環境作成 + パッケージ追加 + 実行
uv add numpy pandas
uv run python main.py
```

## 📦 プロジェクト管理
| コマンド | 説明 |
|---------|------|
| `uv init <name>` | 新規プロジェクト作成 |
| `uv sync` | 依存関係をインストール |
| `uv lock` | ロックファイル更新 |
| `uv tree` | 依存関係ツリー表示 |

## 🔧 仮想環境
| コマンド | 説明 |
|---------|------|
| `uv venv` | 仮想環境作成 |
| `uv venv --python 3.11` | 指定バージョンで作成 |
| `source .venv/bin/activate` | 有効化 (Linux/Mac) |
| `.\.venv\Scripts\Activate.ps1` | 有効化 (Windows) |

## 📋 パッケージ管理
| コマンド | 説明 |
|---------|------|
| `uv add <package>` | パッケージ追加 |
| `uv add <package>==1.0.0` | バージョン指定追加 |
| `uv add --dev pytest` | 開発依存として追加 |
| `uv remove <package>` | パッケージ削除 |

## ⚡ uv run (推奨)
```bash
# スクリプト実行（仮想環境自動使用）
uv run python script.py
uv run main.py

# ツール実行
uv run pytest tests/
uv run ruff check .
uv run black .

# 一時的な依存関係追加
uv run --with requests python -c "import requests"
```

## 🐍 Python バージョン管理
| コマンド | 説明 |
|---------|------|
| `uv python install 3.11` | Python 3.11 インストール |
| `uv python list` | インストール済み一覧 |
| `uv python pin 3.11` | プロジェクトバージョン固定 |

## 🛠️ ツール管理
| コマンド | 説明 |
|---------|------|
| `uv tool install ruff` | グローバルツールインストール |
| `uv tool list` | インストール済みツール |
| `uvx <tool>` | 一時的にツール実行 |

## ⚡ uvx (一時実行)
```bash
# パッケージを試す（インストール不要）
uvx cowsay "Hello World"
uvx httpie GET https://api.github.com

# テストツール
uvx pytest
uvx --with pytest pytest tests/
```

## 🔄 pip 互換
| コマンド | 説明 |
|---------|------|
| `uv pip install <package>` | pip install と同等 |
| `uv pip list` | インストール済み一覧 |
| `uv pip freeze` | requirements.txt 形式出力 |

## 📤 エクスポート
```bash
# requirements.txt 生成
uv export --format requirements.txt > requirements.txt

# 他の形式
uv export --format requirements.txt --no-hashes
```

## 🎯 よく使うワークフロー

### 新規プロジェクト
```bash
uv init myproject
cd myproject
uv add fastapi uvicorn
uv run uvicorn main:app --reload
```

### 既存プロジェクト
```bash
cd existing-project
uv sync                    # 依存関係インストール
uv run python main.py      # アプリ実行
```

### テスト環境
```bash
uv add --dev pytest pytest-cov
uv run pytest tests/ -v --cov
```

### デプロイ準備
```bash
uv lock
uv export --format requirements.txt > requirements.txt
```

## 💡 便利なTips

- `uv run` は仮想環境を自動作成・有効化
- `uvx` は一時的な実行に最適（環境を汚さない）
- `--with` で一時的な依存関係追加
- Python バージョンは自動ダウンロード
- pip の 10-100倍 高速

## 🔗 設定ファイル

### pyproject.toml
```toml
[project]
name = "myproject"
version = "0.1.0"
dependencies = ["fastapi", "uvicorn"]

[project.optional-dependencies]
dev = ["pytest", "ruff", "black"]
```

### .python-version
```
3.11
```

---
**公式ドキュメント**: https://docs.astral.sh/uv/
All Products Pack および dotUltimate に「JetBrains AI Pro」も含まれている（2025年5月時点）

2025年4月16日から、JetBrainsの[All Products Pack](https://www.jetbrains.com/ja-jp/all/)または[dotUltimate](https://www.jetbrains.com/ja-jp/dotnet/)を契約していれば、「JetBrains AI Pro」を追加料金なしで利用できるようになりました

2025年5月24日時点の個人・月額利用の価格（税込）は、次の通りです。

* [IntelliJ IDEA](https://www.jetbrains.com/ja-jp/idea/buy/?section=personal&billing=monthly) : 2603円
* [Rider](https://www.jetbrains.com/ja-jp/rider/buy/?section=personal&billing=monthly) : 2295円（※非商用利用は無料）
* [ReSharper/ReShaper++](https://www.jetbrains.com/ja-jp/resharper/buy/?section=personal&billing=monthly) : 2141円
* [JetBrains AI](https://www.jetbrains.com/ja-jp/ai-ides/buy/?section=personal&billing=monthly) : 1540円
* [dotUltimate](https://www.jetbrains.com/ja-jp/ai-ides/buy/?section=personal&billing=monthly) : 2603円
* [All Products Pack](https://www.jetbrains.com/ja-jp/ai-ides/buy/?section=personal&billing=monthly) : 4451円

dotUltimateとRiderの差額や、

* 「[JetBrains AI Assistant for Visual Studio Code](https://blog.jetbrains.com/ai/2025/05/jetbrains-ai-assistant-now-in-visual-studio-code/)」がリリース
* dotUltimateに含まれる予定の「[ReSharper for Visual Studio Code](https://www.jetbrains.com/resharper/vscode/)」がpublic previewになった

などのニュースを考えると、RiderやReSharperを利用しているのであれば、dotUltimateで購入するのがかなりお得な気がします。

※ この情報は、2025年5月時点の情報です。詳しくは、最新の公式情報を見てください。

---

なお、All Products PackまたはdotUltimateを契約している状態で、「JetBrains AI Pro」を契約することも可能で、メリットもあります。詳しくは下記を参照してください。

https://youtrack.jetbrains.com/articles/SUPPORT-A-1861/Having-two-AI-Pro-licenses-what-are-the-benefits

# リンク集

JetBrains AIのプランなどに関するリンク集です。

公式ページ

* [JetBrains AI のプランと価格](https://www.jetbrains.com/ja-jp/ai-ides/buy/)
* [ランディングページ](https://www.jetbrains.com/ai/)
* [マニュアル・ヘルプ](https://www.jetbrains.com/help/ai-assistant/getting-started-with-ai-assistant.html)
* [FAQ](https://lp.jetbrains.com/ai-ides-faq/)
* [ナレッジベース](https://sales.jetbrains.com/hc/en-gb/sections/14753489942418-In-Focus-JetBrains-AI)

公式ブログ

* [JetBrains AI Assistant: Smarter, More Capable, and a New Free Tier](https://blog.jetbrains.com/ai/2025/04/jetbrains-ai-assistant-2025-1/)
* [JetBrains IDEs Go AI: Coding Agent, Smarter Assistance, Free Tier](https://blog.jetbrains.com/blog/2025/04/16/jetbrains-ides-go-ai/)
* [JetBrains IDEs Go AI: コーディングエージェント、よりスマートな支援機能、無料利用枠あり](https://blog.jetbrains.com/ja/blog/2025/04/16/jetbrains-ides-go-ai/)
* [一覧](https://blog.jetbrains.com/ai/)

株式会社サムライズム様のサポートページ

* [JetBrains AI について](https://support.samuraism.com/jetbrains/ide/aiassistant)
* [JetBrains AI ライセンスについてよくある質問](https://support.samuraism.com/jetbrains/faq/jetbrains-ai-license)

# ひとこと

SNSを見ていると、「知らなかった」「最近知った」という人も結構いるようです。AI関連のニュースが溢れているので、All Products Pack、またはdotUltimateをお持ちの方の中には見落としているかもしれないと思い、リンク集とともに記事にしました。

JetBrains AIは[フリートライアル](https://sales.jetbrains.com/hc/en-gb/articles/16543225966354-How-do-I-start-a-free-trial-of-AI-Assistant)もあります。

また、JetBrains AI Freeも追加されています。

* 無料で、少量のクラウドクレジット枠を利用可能
* 以下のJetBrains IDE「以外」で利用可能
    * IntelliJ IDEA Community Edition
    * PyCharm without a Pro subscription
    * ReSharper
    * Android Studio

JetBrainsのIDEを活用している人は、ぜひJetBrains AIも活用していきたいですね。
FFmpeg+SRT（その２）

# 深堀
今回は、FFmpegとSRTとをトライしたときのメモの一部を記載。お題はいくつか。

## SRTによるファイル転送時の受信側でのファイル保存
回線状況が細いときも含めて、今のところ下記状況がベストの組み合わせ（オプション）であった。

```
送信側
ffmpeg -re -i 送信ファイル -f mpegts "srt://192.168.10.202:8888?pkt_size=1316"

受信側
ffmpeg -fflags nobuffer -probesize 32k -analyzeduration 0 -i "srt://192.168.10.202:8888?mode=listener" -c copy -f mpegts output.ts(受信ファイル)
```

probesize（データの解析に必要なバッファ）、anlyzeduration（解析する最大時間） を指定する。あえて指定する必要はないかもしれないが、「[その１](https://qiita.com/infinite1oop/items/f78d7c61a3d07e9d7f9a)」で記載したリアルタイム転送（特に回線が細い状況）では、これらのオプションを指定したほうがベターであった（ChatGPTにも聞いてトライした結果）。

## ファイルフォーマット変換
オプション「-vf」の話。必要に迫られて、トライした記録。

### すかし表示＋再生
```
ffplay -i ファイル -vf "drawtext=text='HELLO':fontcolor=white:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2"
```

中央に「HELLO」を表示しながら、動画ファイルを再生する。

```
ffplay -i ファイル -vf "drawtext=text='こんにちは':fontfile='C\:/Windows/Fonts/msgothic.ttc':fontcolor=black:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2"
```

日本語を表示する場合、フォントを指定する（fontfile）必要がある。

### すかし表示＋保存
```
ffmpeg -i 入力ファイル -vf "drawtext=text='こんにちは':fontfile='C\:/Windows/Fonts/msgothic.ttc':fontcolor=black:fontsize=80:x=(w-text_w)/2:y=(h-text_h)/2" -c:v libx264 -preset ultrafast -c:a copy 出力ファイル
```

動画ファイルに「すかし」を入れて、ファイルを作成する。

### 解像度およびフレームレート変換
複数項目を変換するには、「""」内を「,」で区切って複数項目を指定。

```
ffmpeg -i ファイル -vf "scale=640:480,fps=30" -c:a copy 640x480_fps30.mp4
```

上記は、解像度「640x480」、フレームレート30fpsへの変換である。

### フォーマット変換して表示　（Windows）
下記は、「ぼかし」を入れる（Windowsの場合、Linuxでは未調査）。

```
ffmpeg -i ファイル -vf "boxblur=5" -f sdl2 "Title"
```

### 他のフォーマット変換
他にも使えそうなものが多数あり。
- "vflip"：垂直反転、"hflip"：水平反転
- "setpts=PTS/2"：2倍速

検索すれば、多数見つかる。

## SRT
「[その１](https://qiita.com/infinite1oop/items/f78d7c61a3d07e9d7f9a)」で書き足りなかったところ。

### ACKの数
```
受信側
ffplay -fflags nobuffer -autoexit "srt://192.168.56.1:8888?mode=listener"

送信側
ffmpeg -re -i 送信ファイル -f mpegts srt://192.168.56.1:8888
```
上記を実行したときの、単なる気づき。全体に占めるACKの割合が、送信ファイルにより異なっていた。下記は、解像度「1920x1080」、フレームレート「60fps」のケース。ACKの割合は、14.4%。

![ACK_1920x1080_60fps - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/cccbae56-4b4e-4dd9-acff-581bfa2d0569.png)

下記は、解像度「320x240」、フレームレート「30fps」のケース。ACKの割合は、29.8%。

![ACK_320x240_30fps - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/cc453261-15f2-4030-8365-fe2994d16869.png)

両方とも再生時間はほぼ同じなのだが、低レートの方がACK多し。理由まで深追いせず。

### 非常に厳しい環境でのイレギュラー
回線が細く＆不安定な状況では、見慣れないControl Packetあり。

#### 送信側のあきらめ（Drop Request）
![DropReq - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/cba15e9f-5191-4f39-9c5b-fa10a762e12d.png)

「NAK (Loss Report)」により、受信していないデータを知らされているが、送信側にそれらのデータが存在していない場合に使われるようだ。上記では、赤枠のデータがもう存在せず、送れないという意味。

#### KeepAlive
![KeepAlive - コピー.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/81df441b-dceb-45be-8eb1-7145af472255.png)

受信側でパケット受信タイムアウトが発生すると、「KeepAlive」を送出する。

## 参考
SRTのプロトコルとしての詳細については下記参照。
- [The SRT Protocol](https://haivision.github.io/srt-rfc/draft-sharabayko-srt.html)

EOF
スミレ畑、やってみた。 その10

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

# 練習問題
キャンバスに線を引け。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/22717ec1-f748-4681-a1b0-64004cd4916f.png)


# サンプルコード

```
キャンバスへ線を描く
	その位置は {0, 100}
	その大きさは {100, -10}
	その線色は、赤

キャンバスへ線を描く
	その位置は {100, 90}
	その大きさは {100, 10}
	その線色は、赤

キャンバスを更新する
```

以上。
ChatGPTを使用したアプリ開発記【SNSアプリ公開手順】

## ドメイン
https://keruma-twitter.vercel.app/

VercelでReactアプリを公開する手順

## Vercelアカウントを作成する
•	公式サイトにアクセス　https://vercel.com/
•	「Sign Up」からアカウント作成
•	GitHubアカウントで連携するとスムーズです（そのままGitHubリポジトリにアクセスできるようになります）

## GitHubリポジトリを用意する
•既にReactアプリがGitHubにプッシュ済みであることを前提とします（例: TK-19881224/Keruma-Twitter）
•もしまだなら、git init 〜 git push でリポジトリにアップしてください

## Vercelで新規プロジェクトを作成
•	ログイン後、Vercelのダッシュボードに移動
•	「New Project」ボタンをクリック
•	GitHubリポジトリの一覧が表示されるので、公開したいリポジトリを選択
•	もし表示されなければ、GitHubの連携権限を確認・付与してください

## プロジェクトを選んでインポート
•	GitHub連携ができていれば、連携済みリポジトリの一覧が表示されます
•	リストから Keruma-Twitter を選択し「Import」をクリック

## Deploy（デプロイ）
•	設定は何も変えずに「Deploy」をクリック
•	数十秒〜数分でデプロイ完了（無料プランでも高速です）

## URL確認
•	デプロイ完了後、https://<your-project-name>.vercel.app の形式で公開URLが表示されます。
•	以後、GitHub に push すると自動で再デプロイされます（CI/CD対応済み）。

## Firebaseコンソールでドメイン追加
•	Firebaseコンソールを開く
https://console.firebase.google.com/
•	あなたのプロジェクトを選択（keruma-sns-appなど）
•	左メニューの「Authentication（認証）」をクリック
•	「設定」タブ（歯車アイコン）をクリック
•	「承認済みドメイン」セクションまでスクロール
•	keruma-twitter.vercel.app を追加する
「ドメインの追加」ボタンを押して、Vercelの公開URL（keruma-twitter.vercel.app）を正確に入力してください。
•	変更を保存
📘 Vol.9.0：Struts2 入力バリデーションと型変換の世界へ   〜 実務で求められる「正しい値を正しく処理する力」を徹底攻略 〜

## 🔰 本シリーズのテーマ

これまで Vol.8 では **「表示」や「UIテンプレート」** に焦点を当ててきました。  
ここからの Vol.9 シリーズでは、**入力データの正当性と正確なデータ変換**という、業務アプリの「中核」に迫ります。

実務では、

- `空欄チェック` `桁数チェック` `数値形式チェック`
- `日付型への変換` `数値型への変換` `コード⇔名称の整合性`

といった処理を **安全かつ効率的に組み込む** 必要があります。

Struts2 にはそのための堅牢な仕組みが既に備わっており、本シリーズではそれらを **現場レベルで使いこなす実践力** を身につけていきます。

---

## 🔎 Vol.9系で扱うトピック（予定）

| 回   | テーマ                                         | 内容の一部紹介                              |
|------|----------------------------------------------|--------------------------------------------|
| [9.1](https://qiita.com/juehara-crypto/items/a67976acd60430fa0da6)  | `validate()`メソッドの基本                    | Struts2標準の入力チェック基礎              |
| [9.2](https://qiita.com/juehara-crypto/items/44fd5012bfbc809d352a)  | `@Validations` アノテーション活用             | 宣言的バリデーション設計                   |
| [9.3](https://qiita.com/juehara-crypto/items/fd6881d2c54de07b3ae4)  | `validation.xml` 外部定義でのバリデーション   | 大規模PJでのメンテナンス性                 |
| [9.4](https://qiita.com/juehara-crypto/items/c82203f583b2712be395)  | `conversion.properties` と型変換              | 日付/数値/Enum変換の実務対応               |
| [9.5](https://qiita.com/juehara-crypto/items/c44fae5980a5c9b40312)  | 入力エラー時のメッセージ制御                  | `addFieldError()` / メッセージキー運用     |
| [9.6](https://qiita.com/juehara-crypto/items/de18b174f1740f9b3646)  | バリデーション共通化                         | 共通部品によるDRY設計                      |
| [9.7](https://qiita.com/juehara-crypto/items/793e85ad47b981d6fbae)  | サーバサイドとクライアントサイドの協調        | jQueryやHTML5との併用戦略                  |
| [9.8](https://qiita.com/juehara-crypto/items/b11017ca621d94599f72)  | 実務シナリオでのバリデーション総仕上げ       | 会員登録/投稿処理などの実例適用           |
| [9.9](https://qiita.com/juehara-crypto/items/6df87d22d07818df5166)  | バリデーション処理の単体テスト編       | validate()／独自バリデータ／input遷移の検証を網羅的に |
| [9.10](https://qiita.com/juehara-crypto/items/6c042593898aa598cba4)  | エラー表示のUIデザイン編        | 視認性・操作性を高める実践テクニック |
| [9.11](https://qiita.com/juehara-crypto/items/7d33c9cd812b37153c12)  | Ajax×バリデーション連携編        | クライアント×サーバーで UX＆保守性を両立するハイブリッド構成 |



---

## 🧭 実務でバリデーションが重要な理由

- **セキュリティの観点**  
  → 入力検証を怠るとXSSや不正SQLなどの温床に

- **業務ロジックの健全性**  
  → 無効なデータの登録で後続処理や帳票が破綻

- **UIとバックエンドの役割分担**  
  → 「見た目の制御」と「ロジックの検証」は分離すべき

Struts2のバリデーションは、**表示層と業務ロジック層の橋渡し**として極めて重要です。

---

## 🔜 次回予告

[Vol.9.1](https://qiita.com/juehara-crypto/items/a67976acd60430fa0da6)では、Struts2標準の `validate()` メソッドを中心に、  
**最低限のバリデーションを「安全に」組み込む方法** を解説します。  
小規模〜中規模プロジェクトでもすぐに使える、**最短ルートの入力検証法**から始めましょう！

---

## ✍ この記事を読むとできるようになること

✅ Struts2での「入力チェック」「変換処理」の体系的理解  
✅ `validate()`・`conversion.properties` の役割と書き方  
✅ 実務プロジェクトでの **エラー制御と再利用設計**

---

## 📚 関連シリーズの復習（おすすめ）

- 🔙 [🌟 Vol.8.16〜8.17 総まとめ：Struts2 出力最適化＆拡張編（一覧表示・共通部品化・カスタムタグ）](https://qiita.com/juehara-crypto/items/c13bd0474f71efc7cd28)  

- 🔙 [🌟 Vol.8.18〜8.20 総まとめ：Struts2 テンプレート最適化・UI共通化設計編（共通レイアウト構築と動的UI出し分け）](https://qiita.com/juehara-crypto/items/d01303875f78a1c5282f)  
　→ 表示の基礎とUI共通化の構成がまだの方はこちらから！

- 📘 [Vol.9.1：【Struts2】validate() メソッドの基本 〜 addFieldError / input遷移による入力チェックの王道パターン 〜](https://qiita.com/juehara-crypto/items/a67976acd60430fa0da6)
---
【公ド読】パフォーマンスの最適化のためのリファクタリング

【公式ドキュメントを読もうシリーズ】パフォーマンスの最適化のためのリファクタリング

## シリーズ概要

[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-for-performance-optimization](https://docs.github.com/ja/copilot/copilot-chat-cookbook/refactoring-code/refactoring-for-performance-optimization)

## 説明

挙動は正しいけれども、遅いコードをより最適なコードに変換してくれる。
パフォーマンスの向上をしてくれる。

## 所感

本番環境にアップする前にパフォーマンスの向上として、一度パフォーマンスの最適化のプロンプト入れることで、数%速度が上がるのであれば、一度パフォーマンス最適化のプロンプトを投げるというのがあって良さそう。

というか、構文チェックするみたいに、体系的にコマンドを叩くと、自動的にパフォーマンス最適化のプロンプトを投げるようにするといったことをしてもいいようにも思えてきた。

シェルスクリプトのファイルにgh コマンドとか設定しておいて、commitの後にそのシェルスクリプト叩くと、変更点のパフォーマンスの最適化やその他のリファクタリング項目を設定しておくとか良さそう。
スミレ畑、やってみた。 その9

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。
リンク集。

https://qiita.com/jpl_produire/items/cbf256e4eddcd7ddc997


https://sum.irelang.jp/play/2.1/


https://qiita.com/jpl_produire/items/aad1d4fbec483b89550f


https://sum.irelang.jp/


https://sum.irelang.jp/files/core/

https://sum.irelang.jp/sumirebatake/batake-reference/


https://produ.irelang.jp/blog/2021/02/2907/

https://produ.irelang.jp/blog/2020/06/2334/

以上。
読書感想文「図解 はじめての「開発のためのＣＭＭＩ」とプロセス改善」 ４章まで

# 書籍名「図解 はじめての「開発のためのＣＭＭＩ」とプロセス改善」
日刊工業新聞社
著者：橋本隆成

# 読もうと思った動機
・CMMIについて理解を深めたいと思っているため

# CMMIとは
能力成熟度モデル統合 (のうりょくせいじゅくどモデルとうごう、英: Capability Maturity Model Integration, CMMI) は、組織がプロセスをより適切に管理できるようになることを目的として遵守するべき指針を体系化したものである[1] 。 平易な言い方をすると、ソフトウェア開発組織及びプロジェクトのプロセスを改善するために、その組織の成熟度レベルを段階的に定義したものである。 CMMIは、もともとは能力成熟度モデル (CMM; Capability Maturity Model) として開発された。

https://ja.wikipedia.org/wiki/%E8%83%BD%E5%8A%9B%E6%88%90%E7%86%9F%E5%BA%A6%E3%83%A2%E3%83%87%E3%83%AB%E7%B5%B1%E5%90%88


# 印象に残った部分

## p20 限定的なエンジニアリングのみの最適化はもはや通用しない

開発方法論や、技法は大変重要ですし限定された作業に焦点を当てて開発や生産の効率を向上する試みを行うことは　意味がないわけではありませんが活動の成果が
「エンジニアリング」についての範囲に限定された部分最適になり、読者が期待している真の「生産性向上」、「品質向上」に上手に結びつかないことも多いのが現状です。


## p28 CMMの経緯、失敗するプロジェクトの共通点

失敗するプロジェクトに共通していることは、ソフトウェア開発部門のほとんどが開発および、管理の活動プロセスが存在しない　あるいは開発および管理プロセスが存在してても利用していない。
逆に多くの成功プロジェクトに共通する特長は失敗するプロジェクトとは反対に、優れた効果的な開発プロセス管理を持ち、プロセスを遵守していた。

## p32-33 CMMのプロセスとは
「CMMIに記載されている推奨される作業内容を具体的にしたもの」となっています。
簡単に言えば、開発や生産の作業の具体的な活動ステップと、作成する成果物について記述したものということです。


## p34 プロセスに記述される内容
・どのような作業をどおのような順序で実施するのか
・作業は誰が担当するのか
・作業の他のプロセスとの開発はどうなるのか
・作業に必要となる入力情報および作業開始の条件は何か？
・作業が終了すると何が成果となるのか
・作業で規約、ひな形、ツール、データは何か利用するのか
・作業のデータ（メトリクス）は何を測定するのか


## p35 CMMIは「モデル」をどう捉えるか。
モデルとは
１．対象の世界を単純化化したもの
・抽象化する
・本質をあぶりだす
・汎用性を目的

２．CMMIは、世界中のプロジェクトや組織が自分たちに適したプロセスを定義する手引を提供している。
企業の組織で使用される実際のプロセスは、適用分野及び組織の構造と規模など、数多くの要因の依存のためCMMIを具体的なプロセスではないモデルとして提供している。

## p43 CMMIのモデル構成　段階的表現と連続型表現

・段階型表現
成熟度レベルごとに実施するプロセス領域が定められている。
成熟度レベルごとに定められている全てのプロセス領域の全固有ゴールと共通ゴールを満たすことが求められる。

・連続型表現
プロセス領域ごとに能力度レベルが定められている。
能力度レベル毎にに定められている固有ゴールと共通ゴールを満たすことが求められる


## p51 プロセス領域
プロセス領域は、プロセス領域の名前が示す活動に関連したプラクティスの記述の集合です。
プラクティスはプロセス領域に存在するゴールを達成するために行われる活動と捉えることができます。
プロセス領域には必ず「固有ゴール」と「共通ゴール」が存在します。



# 実践できること or 感想

## 感想
今の自分には難しかったです。
しかしせっかく買った本なので、用語のいくつかは頭の隅に入れておきます。


## 実践すること
・PMOスペシャリストの資格を取ってPMBOKの基本知識を集める
スマホで録音した音声データをn8nを利用したワークフローで議事録に変換する方法

```markdown
# Google Drive + OpenAI + n8n による自動議事録生成ワークフロー

この記事では、スマートフォンで録音した音声をGoogle Driveにアップロードするだけで、自動的に文字起こし・要約され、Google Sheetsに議事録として保存されるn8nワークフローの構築方法を解説します。

## 構成概要

1. **スマホで音声を録音し、Google Driveにアップロード**
2. **n8nがアップロードを検知し、ワークフローを起動**
3. **Whisper APIで文字起こし、ChatGPTで要約**
4. **Google Sheetsにまとめて自動保存**

## ワークフローの全体構成

1. **Google Drive Trigger**（新ファイル検知）
2. **Google Drive**（ファイルダウンロード）
3. **Whisper Transcription**（音声→テキスト）
4. **ChatGPT**（要約）
5. **Google Sheets**（議事録として記録）

## 各ノードの設定方法

- **Google Drive Trigger**:
  - Trigger On: `File Created`
  - 対象フォルダを指定

- **Google Drive（Download）**:
  - Operation: `Download`
  - バイナリ名: `data`

- **Whisper API**:
  - POST先: `https://api.openai.com/v1/audio/transcriptions`
  - `multipart/form-data`で送信

- **ChatGPT**:
  - 文字起こし結果をプロンプトに入れて要約

- **Google Sheets**:
  - `timestamp`, `filename`, `transcript`, `summary`を対応カラムにAppend

## 拡張案（オプション）

- テンプレートファイルを複製して記録用スプレッドシートを個別作成
- SlackやDiscordなどに要約を自動通知
- Google Calendarに議事録URLを自動追加

## まとめ

- このワークフローを使えば、録音するだけで議事録が自動生成され、チームや会議記録が効率化されます。
- ノーコードで実現できるため、プログラミング経験がなくても構築が可能です。

このワークフローを活用して、会議の生産性を向上させましょう！
```

This article is designed to guide beginners through setting up an automated transcription workflow using n8n, Google Drive, and OpenAI's Whisper and ChatGPT APIs. By following the steps provided, users can create a no-code solution that efficiently handles meeting minutes.
2025/5/24主にITとかセキュリティの記事

脆弱性はどうやって悪用されるのか、XSSなど5種類の脆弱性を突く手口を図解(5/22)
https://active.nikkeibp.co.jp/atcl/act/19/00674/041000002/?i_cid=nbpnxta_sied_pickup

「48時間以内に連絡をしないと…」宮城学院がランサムウェア被害　学生9人の情報漏えい(5/21)
https://news.ntv.co.jp/n/mmt/category/society/mm5ae181f93c2d4375ab759b0ef969026d

「ネット上に公開する」脅迫メールも　宮城学院大でランサムウエア被害　卒業生など個人情報漏えい〈仙台〉(5/21)
https://www.fnn.jp/articles/-/875273

「ランサムウエア攻撃」で卒業生9人分の個人情報が流出　宮城学院女子大学　被害全容把握できず(5/21)
https://nordot.app/1297821517554402069?c=1179248089549373591

マイクロソフト、３９万４０００台超がＬｕｍｍａマルウェアに感染　ウェブドメインを解体＝米国株個別(5/22)
https://us.kabutan.jp/news/n202505220021
https://us.kabutan.jp/news/n202505220012

IIJが受けた「Living off the Land攻撃」、河野前デジタル相が24年8月に危険性を指摘(5/22)
https://xtech.nikkei.com/atcl/nxt/column/18/03207/052000001/

坂井内閣府特命担当大臣記者会見要旨 令和7年5月20日
https://www.cao.go.jp/minister/2411_m_sakai/kaiken/20250520kaiken.html

Docker、公式ブログにて安全なコンテナイメージ「Docker Hardened Images」を紹介(5/21)
https://codezine.jp/article/detail/21537

企業のAIへの対応状況はどうなっているのか？ Armが初のAI調査レポートを発行(5/22)
https://news.mynavi.jp/techplus/article/20250522-3331171/

Oracle Cloudがヨーロッパで障害発生とのユーザー報告(5/21)
https://cafe-dc.com/security/oracle-cloud-experiences-outage-in-europe-users-say/

ほぼ例外なく｢パスワードは漏れている｣､なぜ？パスワードにまつわる俗説を検証“正しい管理”にアップデートするには(5/22)
https://toyokeizai.net/articles/-/875289

ハッカー、「テレメッセージ」の広範なデータ傍受か　ウォルツ氏使用で注目(5/22)
https://jp.reuters.com/world/security/YVWBMOIMKJMPZCSE3TT3RP5M6Q-2025-05-21/

データが語る欧州の電力脆弱性：日本と何が違うのか？(5/22)
https://agora-web.jp/archives/250521100504.html

「5月の請求予定金額のお知らせ」などのメールからPayPay正規サイトに誘導し、送金させるフィッシングに注意！
支払いのためにログインを求められたら、即、操作を中断！(5/21)
https://internet.watch.impress.co.jp/docs/news/2016106.html

英米など同盟国、ロシア軍情報機関によるサイバー攻撃に警戒呼びかけ(5/21)
https://jp.reuters.com/world/ukraine/TISRW6W2MRN7XPNDQQLE24QRGE-2025-05-21/

【エンジニアの日常】エンジニア達の人生を変えた一冊 Part4(5/22)
https://tech.findy.co.jp/entry/2025/05/22/070000
【備忘録】Tailwind CSSの環境構築（CDN版・CLI版）

## はじめに
Tailwind CSSのCDN版とCLI版の環境構築についての備忘録です。開発環境はWSL2です。

## 1. CDN版（とりあえず体験）
Bootstrapと同じ感覚で使える。

HTMLに以下を追加し、クラスを各要素にべた書きする。
```html
<script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
```
本番環境での利用は非推奨。
理由は、クラスの粒度が細かくCSSが巨大化しやすいことと、外部サーバーに依存するためパフォーマンスが悪いから。また、PostCSSを通さないため@applyは使えない。

## 2. CLI版（開発・本番に使う推奨方法）
Tailwind CLIツールはPostCSSベースで、入力したCSSやHTMLのクラスを解析し、必要なスタイルだけをoutput.cssとして出力する。@applyも使用可能。

### 2-1. お試し用の方法
#### インストールと設定
```bash
npm install tailwindcss @tailwindcss/cli
```
#### CSSファイル（例：input.css）に以下を記述
```css
@import "tailwindcss";
```
#### HTMLにはビルド済みのCSSを読み込む
```html
<link href="./output.css" rel="stylesheet">
```
#### ビルドコマンド
```bash
npx @tailwindcss/cli -i ./input.css -o ./output.css --watch
```
これで、HTMLに書かれたクラスだけが含まれる軽量なoutput.cssが生成される。
--watchで変更を監視し、自動で再ビルドも可能。

### 2-2. 本格開発環境構築（npmスクリプトを活用）
#### プロジェクトを初期化
```bash
npm init -y
```
#### Tailwind CSSの3系を開発依存にインストール
```bash
npm install -D tailwindcss@3.3.2
```
※4系は自分の環境では不具合があったため3系を明示。

#### tailwind.config.jsを作成し、@applyを使えるように設定（自動で生成されない場合）
```bash
touch tailwind.config.js
```
```js
module.exports = {
  content: ["./*.html"], // パスに注意。この場合はルート直下のhtmlを指定。
  theme: {
    extend: {},
  },
  plugins: [],
}
```

#### CSSファイル（input.css）に基本記述を入れる
```css
@tailwind base;
@tailwind components;
@tailwind utilities;
```

#### package.jsonにビルド用スクリプトを追記
```js
"scripts": {
  "build": "tailwindcss -i ./input.css -o ./output.css --minify",
  "dev": "tailwindcss -i ./input.css -o ./output.css --watch"
}
// この場合はルート直下のcssを参照
```
※全体例
```js
{
  "name": "tailwind-cli", // ディレクトリ名
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "type": "commonjs",
  "scripts": {
    "build": "tailwindcss -i ./input.css -o ./output.css --minify",
    "dev": "tailwindcss -i ./input.css -o ./output.css --watch",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "devDependencies": {
    "tailwindcss": "^3.3.2"
  },
  "author": "",
  "license": "ISC"
}
```

#### ビルド実行
```bash
npm run build  # 本番用
npm run dev    # 開発用
```
※コマンドを叩いた時点でのoutput.cssを生成
[26卒体験談] エンジニア就活-とにかく応募して、技術も使ってみた話

## はじめに
- 筆者: 修士1年(現在2年)でメーカー〜Web系まで幅広く志望
- 修士1年4月時点で実務開発経験無し
- 技術力を上げたくてWebやゲーム系の3日〜2週間のインターンに参加
- AI系?データサイエンス?WEB?組み込みエンジニア?迷走してました
- 就職先はIT系(Web系)

#### こんな人向け
1. 何から始めていいかわからない人
2. 就活の試験（面接・筆記）を乗り越えたい人
3. 開発をしたいけど、なかなか一歩踏み出せない人(**自分はこれでした**)

## 当時の技術力（4月頃）
- 競プロ（AtCoder）: 緑レベル
- Ruby: 少し経験あり
- HTML & CSS: 少し経験あり
- JS: ほんの少し
- C++ と Python: そこそこ使える

# 一番私が伝えたいこと
**とにかく応募してみる、コーディングテストを受けてみる、技術を使ってみる、エンジニアの方に話を聞いてみる** ということです。
これらの行動を通じて、意外とうまくいくこともあれば、思った以上に世の中は厳しいなと感じることもあります。  

でも、実際に動いてみることでしか見えない景色や得られない経験がたくさんあります。  
だからこそ、まずは**とにかく動いてみること**を強くおすすめします。
- - -
 ### 周りにエンジニアがいなくて相談できる人がなかなかいない方へ

1. そんな方には、**Matcher**というアプリをおすすめします！  
社会人エンジニアと気軽にマッチングして、相談や質問ができるサービスです。僕も実際に利用してみて、リアルな現場の話や就活のコツを直接聞ける貴重な機会になりました。  
もし相談相手が周りにいない場合は、ぜひ活用してみてください。
2. 自分でよろしければ、相談に乗らさせていただきます(時間の許す限りですが)。**躊躇せずこの記事のコメント欄か、wakamizuch397@icloud.comに相談内容を送ってください。**
## とにかく応募してみる、開発してみるということが重要だと思う理由
1. インターン選考は本選考よりも倍率が高いため(某会社の面接でそんな話は逆質問で聞きました。逆質問で聞くのは良くなかったかもしれません)
1. 場数をこなすごとに慣れていくため
1. 面接や個人面談等で相談をすることが比較的容易なため(そこでもっとこんな開発してみたら良いのでは等の意見等も頂けます)
1. IT系と一口に言っても、実はとんでもない種類の職種や働き方があるため。(当時の自分は「フロント？バック？サーバーサイド？インフラ?QA?組み込み? Devops?SE?SIer？受託開発？自社開発？」と混乱していました。 ) 

**就活で感じたリアルなギャップ**

- 自分では「無理だ」と思っていた会社に通ったことがある  
- 逆に、「100%受かる」と思っていた会社で落ちたこともある  
- コーディングテストで満点を取っても落ちた経験がある(これは**正直3-4回**あったと思います。多分面接が良くないんでしょう。)

こうした経験から学んだのは、  
**予想や固定観念だけで判断せず、挑戦し続けることの大切さ**です。  
結果は自分の努力だけでなく、面接官やその時の状況にも左右されることが多いので、落ちた経験も次への糧にしましょう。
- - -
### （一年間で触ってみた技術まとめ）

- **言語・フレームワーク**  
　Node.js / Vue.js / React / FastAPI / Flask / Rails 
　
- **データベース**  
　MySQL / SQLite  

- **Webサーバー / ミドルウェア**  
　Apache / Nginx  

- **クラウド**  
　GCP / AWS（※Fargateの放置は気をつけましょう！自分は `$0.03`（約4円）の損失ですみました）

- **テスト**  
　Rspec / Jest  

- **その他**  
　GitHub / GitHub Actions / Docker  
　Qiitaでの技術記事執筆 / AHC少々頑張りました
  

# まとめ
- 「まず応募してみる」ことが、エンジニア就活成功への第一歩! 
- 技術は実際に使いながら、経験を積みながら伸ばしていけます!
- 迷っている人へ：恐れず一歩踏み出して、挑戦を楽しんでください！
--- 
**アウトプット作りたいけどわからない or 面接とか志望動機難しくて辛い**
→Matcherで社会人の方のお話しを聞いてみましょう
→自分のメールに相談内容躊躇せず送ってください。自分で良ければ、時間の許す限り相談させていただきます。