OmniAICreator/Qiita-1.07M huggingface dataset:
MarkDownまとめ

毎回MarkDown記述方法を調べるのに疲れましたので、自分が使うものだけまとめました

# MarkDown記述

### ---------- 見出し ----------

```
# 大項目
## 中項目
### 小項目
```

# 大項目
## 中項目
### 小項目


### ---------- 箇条書き ----------

```
* 箇条書き
  * 箇条書き
    * 箇条書き
      * 箇条書き
```

* 箇条書き
  * 箇条書き
    * 箇条書き
      * 箇条書き


### ---------- コード ----------
````
```python:http-server
python -m http.server 8080
```
````

```bash:http-server
python -m http.server 8080
```

### ---------- インラインコード ----------

```
その場合には`<html>`を使います
```

その場合には`<html>`を使います

### ---------- 区切り線 ----------

```
---
```

---

### ---------- 太字 ----------

```
これは**太字**です
```

これは**太字**です

### ---------- 打消し線 ----------

```
これは~~打消し線~~です
```

これは~~打消し線~~です

### ---------- 表 ----------

```
|左寄せ|中央寄せ|右寄せ|
|:--|:--:|--:|
|テキストデータ|テキストデータ|テキストデータ|
|1|2|3|
```

|左寄せ|中央寄せ|右寄せ|
|:--|:--:|--:|
|テキストデータ|テキストデータ|テキストデータ|
|1|2|3|

### ---------- リンク ----------

```
[リンク先](https://qiita.com/uneyamauneko/items/d89a38c8029df31e182f)
```

[リンク先](https://qiita.com/uneyamauneko/items/d89a38c8029df31e182f)
Windows (WSL) で Claude Code をセットアップする方法

僕自身、Windows環境で設定しようとした際にうまくいかず、何度も失敗を繰り返しました。その体験をもとにAIでこの記事を作成していますが、一部に誤りが含まれている可能性があります。

正確な手順や最新情報については、Claude Codeの公式サイトで確認することをおすすめします。

👉 [Claude Code ドキュメント](https://docs.anthropic.com/ja/docs/claude-code/overview)

Windows Subsystem for Linux (WSL) を使用して、Windows 環境に Claude Code をセットアップする手順を解説します。インストールから起動まで、そして一般的なエラーへの対処方法も含めて説明します。

## 前提条件

Claude Code をインストールする前に、以下の環境が整っていることを確認してください：

- Windows 環境に WSL がインストールされ、セットアップ済み
- WSL 環境に Node.js 18 以上がインストール済み
- WSL ターミナルの基本操作（コマンド実行、ファイル編集など）ができること

## インストール手順

### npm の設定変更

WSL 環境でグローバルパッケージの権限エラーを回避するため、まず npm の設定を変更します。

1. WSL ターミナルを開きます

2. npm のグローバルパッケージインストール先をユーザーディレクトリに変更します：
   ```bash
   npm config set prefix '~/.npm-global'
   ```

3. （推奨）過去に EACCES エラーが発生した場合は、npm キャッシュをクリーンアップします：
   ```bash
   npm cache clean --force
   ```

### Claude Code のインストール

権限エラーを避けるため、`--prefix` オプションを使用してインストールします。

```bash
npm install -g @anthropic-ai/claude-code --prefix='~/.npm-global'
```

インストールが成功すると、`added x packages in ys` のようなメッセージが表示されます。

## PATH 環境変数の設定

インストールした `claude` コマンドをどこからでも実行できるように、PATH を設定します。

### シェル設定ファイルの編集

1. お使いのシェルの設定ファイルを開きます：
   ```bash
   # Bash を使用している場合
   nano ~/.bashrc
   
   # Zsh を使用している場合
   nano ~/.zshrc
   ```

2. ファイルの末尾に以下の行を追加します：
   ```bash
   export PATH=~/.npm-global/bin:$PATH
   ```

3. ファイルを保存して閉じます（nano の場合）：
   - `Ctrl + O` で保存
   - `Enter` で確定
   - `Ctrl + X` で終了

### 設定の反映

設定を反映させるには、以下のいずれかの方法を実行します：

- **方法1（推奨）**: ターミナルを一度閉じて、再度開く
- **方法2**: 現在のセッションに設定を読み込む：
  ```bash
  # Bash の場合
  source ~/.bashrc
  
  # Zsh の場合
  source ~/.zshrc
  ```

### PATH の確認

設定が正しく反映されたか確認します：

```bash
echo $PATH
```

出力に `/home/<your_username>/.npm-global/bin` が含まれていることを確認してください。

## Claude Code の起動

PATH の設定が完了したら、以下のコマンドで Claude Code を起動します：

```bash
claude
```

初回起動時には：
- 利用規約への同意
- 認証プロセス

が表示されます。画面の指示に従って認証を完了させてください。

## トラブルシューティング

### EACCES 権限エラーへの対処

`npm install -g` 実行時に `/usr/local/lib/node_modules` への権限エラーが発生する場合：

1. **実行環境の確認**
   - Windows のコマンドプロンプトや PowerShell ではなく、必ず WSL ターミナル（Ubuntu など）で実行してください

2. **npm 設定の確認**
   ```bash
   npm config get prefix
   ```
   出力が `~/.npm-global` になっていることを確認

3. **インストールコマンドの確認**
   - 必ず `--prefix='~/.npm-global'` オプションを使用してください
   - このオプションは `npm config set prefix` の設定よりも優先されます

4. **キャッシュのクリア**
   ```bash
   npm cache clean --force
   ```
   実行後、再度インストールを試みてください

### その他の注意点

- WSL と Windows のファイルシステムは異なるため、必ず WSL 環境内で作業してください
- Node.js のバージョンが 18 以上であることを確認：`node --version`
- npm が最新版であることを推奨：`npm install -g npm@latest`

これらの手順に従えば、Windows 環境でも WSL を通じて Claude Code を問題なく利用できるようになります。
会社よ、福利厚生でAI学習費出してくれ！～個人の持論です～

## 💭 僕の違和感、聞いてくれませんか？

僕は現在、大手メーカーで働いています。
普段は真面目に働いているけど、**最新のAIツールは完全に個人で学んでる派**です。

だけど、ある時ふと思ったんです。

> なんで会社って、\*\*AI学習費を福利厚生で出してくれないんだろう？\*\*って。

---

## 💻 社内では「Copilotだけ」、でも外では…

会社では一応AIの導入は進んでいて、**Microsoft Copilotは使っていい**ことになってます。
でもそれ以外のAIツール、たとえばClaudeやChatGPT、Geminiなんかは「使用禁止」。

理由はもちろん分かります。**セキュリティや情報統制の問題**です。
でも、個人のPCで、ちゃんと分けて使えばいい話じゃないですか？

---

## 🚀 最新AIに触れられないって、もったいない！

AIの進化スピードはすさまじくて、
昨日の最先端が今日にはもう「時代遅れ」なんてザラです。

そんな中で、**会社がOK出してるAIしか触れられない**のって、
正直、スキルも感度も置いていかれるんじゃないかと感じます。

---

## 🧩 もしも会社がAI学習を支援してくれたら？

たとえば、以下のような支援を会社がしてくれたらどうでしょう？

* 📚 **AIツールのサブスク費用を福利厚生として支給**
* 🧠 **社外でも使えるAI学習の補助金制度**
* 📅 **業務時間内でのAIハンズオン研修への参加支援**

これ、めちゃくちゃ有益だと思うんです。

---

## ✅ 支援が生む「4つのメリット」

1. **AIリテラシーが飛躍的に向上**
   　→ 社員が自発的に最新AIを学べる環境が整う。

2. **社外の知見が社内に還元される**
   　→ 個人で得たノウハウが業務改善に繋がる。

3. **情報漏洩リスクがむしろ減る**
   　→ 正しい使い方を学ばせたほうが安全。

4. **社員のエンゲージメント向上**
   　→ 「スキルアップを支援してくれる会社」って好感度爆上がり。

---

## ✋ 誤解のないように

もちろん、「自由に使ってOK！」にしてしまうとリスクもある。
だから、**ルール設計やリテラシー教育は絶対に必要**です。

でもそれを前提にしたうえで、**支援する価値は十分にある**と思うんです。

---

## 🔚 僕の本音

AIはもう「あると便利」なツールじゃなくて、
**「使えないとヤバい」レベルのインフラ**になりつつあると感じています。

会社の未来は、社員のAIスキルにかかっている。
だから僕は言いたい。

> **会社よ、AI学習費を福利厚生で出してくれ！**
> **未来への投資だと思って！**

---

### ✉️ あなたの会社ではどうですか？

同じようなこと感じてる人、いますか？
コメントやSNSで、あなたの「持論」もぜひ聞かせてください！
【Go】zapで機密情報をマスキングするサンプルコード


## 概要

- [uber-go/zap](https://github.com/uber-go/zap)を使用してパスワードの文字列をマスキングする処理のサンプルコード

## サンプルコード

- マスキングなし

```javascript
func execNoMasking() {
	logger, _ := zap.NewProduction()
	defer logger.Sync()

	password := "secret123"

	logger.Info("user login",
		zap.String("username", "alice"),
		zap.String("password", password), // これだと機密情報が丸見えに
	)
}
// 出力されるログ
{"level":"info","ts":1748063559.381116,"caller":"zap/masking.go:13","msg":"user login","username":"alice","password":"secret123"}
```

- マスキングあり

```go
func maskSecret(_ string) string {
	return "****"
}


func execMasking() {
	logger, _ := zap.NewProduction()
	defer logger.Sync()

	username := "alice"
	password := "secret123"

	logger.Info("user login",
		zap.String("username", username),
		zap.String("password", maskSecret(password)), // ここでマスク
	)
}
// 出力
{"level":"info","ts":1748063559.381233,"caller":"zap/masking.go:31","msg":"user login","username":"alice","password":"****"}
```
備忘録１　Ubuntuで謎のABC読み上げ音がしたら

# 概要

Ubuntuの小さなトラブル対応の備忘録。

## 現象

Ubuntu24.04でFireFoxを起動すると、
「A、B、C... over」
のような音がずっと聞こえる。

## 結論

Ubuntu標準のScreen reader [Orca](https://help.ubuntu.com/stable/ubuntu-help/a11y-screen-reader.html.ja)が起動して、テスト音を読み上げていた様子。

## 調査

* 音が始まったら、コンソールでorcaを検索
```
$ ps aux | grep orca

XXX       3742  0.4  0.2 703072 83108 ?        Sl   09:36   1:03 /usr/bin/python3 /usr/bin/orca
XXX     222136  0.0  0.0  10196  2176 pts/0    S+   13:54   0:00 grep --color=auto orca

```
* orcaを止めて、音が止まるかを確認。音が止まればこれが原因と見る。
```
$ killall orca
```

* Settings -> AccessibiltyでOrcaの設定を確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396252/18c1e13a-2ac4-4b47-9221-f89a21ae1b8a.png)
Screen ReaderがOnになっていたので、OFFにする

これでずっと音がでなくなれば解決。
ファインチューニングにおけるクロスエントロピー損失の計算方法

# はじめに

この記事では、自然言語処理（NLP）モデルのファインチューニングで一般的に使われるクロスエントロピー損失（Cross Entropy Loss）の計算方法について分かりやすく解説します。

## 1. クロスエントロピーとは？

クロスエントロピー損失は、モデルが予測した確率分布と正解データ（ラベル）のズレを測るための指標です。モデルが正解ラベルに高い確率を割り当てるほど、損失は小さくなります。

単一のサンプルに対する数式で表すと以下のようになります。

$\text{Cross Entropy Loss} = -\log P(\text{正解ラベル})$

複数クラスの分類問題の一般的な形式では：

$\text{Cross Entropy Loss} = -\sum_{i=1}^{C} y_i \log(\hat{y}_i)$

ここで、$C$はクラス数、$y_i$は正解ラベル（one-hot）、$\hat{y}_i$は予測確率です。

## 2. ファインチューニングでの利用例

自然言語処理のファインチューニングでは、通常以下のような手順でクロスエントロピー損失を計算します。

### （1）データ準備

モデルに与えるデータは、通常「プロンプト（入力）」と「ターゲット（正解出力）」から構成されます。

例：

```
プロンプト：「好きな果物は何ですか？」
ターゲット：「りんごです。」
```

モデルはプロンプトを受け取り、ターゲットを予測します。

### （2）予測確率を計算

モデルは、ターゲット部分の各トークン（単語など）について、次に来る可能性のある単語に対して確率分布を出力します。

例えば、ターゲットの次の単語が「りんご」だとすると、以下のような予測確率を出します。

| 単語 | 予測確率 |
|------|----------|
| りんご | 0.7 |
| バナナ | 0.2 |
| オレンジ | 0.1 |

### （3）クロスエントロピー損失を計算

このとき正解は「りんご」なので、クロスエントロピー損失は以下のようになります。

$\text{損失} = -\log(0.7) \approx 0.357$

ターゲット全体に対してこれを繰り返し、トークンごとの損失を合計・平均します。

全体の損失は以下のように計算されます：

$\text{Total Loss} = \frac{1}{N} \sum_{t=1}^{N} \text{Loss}_t$

ここで、$N$はターゲットシーケンス内のトークン数です。

## 3. 損失計算での注意点

- **プロンプト部分の損失は計算しません。**
  - プロンプトは「与えられた条件」であり、モデルの出力性能には関係ないためです。
  - 通常、マスク処理（-100などの特殊な値を使う）で損失計算から除外します。

- **正解ラベルは単なるインデックス（数字）です。**
  - 実際の実装では正解単語のインデックスを指定するだけでよく、one-hotベクトルを自分で作成する必要はありません。ライブラリが自動で処理します。

## 4. まとめ

ファインチューニングで用いるクロスエントロピー損失の計算はシンプルで、モデルが「正しいトークンを予測する確率」を高めるように学習を促進します。
これが自然言語モデルを微調整する基本的な仕組みです。
2025年の学習まとめ [本・Udemy・ネット記事]

## 本
1. [イラスト図解式 この一冊で全部わかるWeb技術の基本](https://www.amazon.co.jp/%E3%82%A4%E3%83%A9%E3%82%B9%E3%83%88%E5%9B%B3%E8%A7%A3%E5%BC%8F-%E3%81%93%E3%81%AE%E4%B8%80%E5%86%8A%E3%81%A7%E5%85%A8%E9%83%A8%E3%82%8F%E3%81%8B%E3%82%8BWeb%E6%8A%80%E8%A1%93%E3%81%AE%E5%9F%BA%E6%9C%AC-%E5%B0%8F%E6%9E%97-%E6%81%AD%E5%B9%B3/dp/4797388811/ref=asc_df_4797388811?mcid=3fbbf2bb8e563902aceef57bc81ce684&tag=jpgo-22&linkCode=df0&hvadid=707442440829&hvpos=&hvnetw=g&hvrand=3669127753798878157&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009292&hvtargid=pla-526274317363&psc=1&gad_source=1)
1. [たった1日で基本が身に付く! Git超入門](https://www.amazon.co.jp/s?k=%E3%81%9F%E3%81%A3%E3%81%9F%EF%BC%91%E6%97%A5%E3%81%A7%E5%9F%BA%E6%9C%AC+GIT&i=stripbooks&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=2HL4J253QJY8N&sprefix=%E3%81%9F%E3%81%A3%E3%81%9F1%E6%97%A5%E3%81%A7%E5%9F%BA%E6%9C%AC+git%2Cstripbooks%2C152&ref=nb_sb_noss)
1. [Rubyプログラミング入門 ―はじめてのプログラミング、はじめてのRuby](https://www.amazon.co.jp/Ruby%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E2%80%95%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%80%81%E3%81%AF%E3%81%98%E3%82%81%E3%81%A6%E3%81%AERuby-%E3%81%BE%E3%81%88%E3%81%A0-%E3%81%B2%E3%81%95%E3%81%93/dp/4861006112/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=3HYYKQZXO8U72&dib=eyJ2IjoiMSJ9.4GON7QP1LOBGWxeSTc1oFQTrR4ftohzCdQvfVa0uPSSCA6wYMvX36tTiRsRt5fy6EML-cipUZXE_xigUW_dnwNp1O5Js7XmokVfD2PCGHxnnncHhAX0aleIxA03VYfJxSZiDlvzGXs7smSnWyHuNK_bVerliJrIaXO75tnhHIYCPJBvAWNmwAcsCa6tNzTob8FHgki-dQ2zN5Kss_67T5aSEJsrZnTfEdAMx9iYWjmk.H3JaIyu3MTMFe1NFr_5HhKAiY6a_aELyj2ZVjZ_UgD0&dib_tag=se&keywords=ruby+%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80&qid=1748061549&s=books&sprefix=ruby%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80%2Cstripbooks%2C150&sr=1-1)



## Udemy

## ネット記事
スミレ畑、やってみた。 その11

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

# 練習問題
sin波を描け。

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/36ab20b5-8044-4024-861c-8029923f4fcf.png)

# サンプルコード

```

iを1から1ずつ増やしながら500まで繰り返す
   s = i / 50
   j = sin(s) * 50
　　キャンバスへ線を描く
	その位置は {i + 2, 100 - j}
	その大きさは {2, 1}
	その線色は、赤
そして
キャンバスを更新する
```

以上。
CompTIA Security+（SY0-701）合格体験記

CompTIA Security+（SY0-701）を受験し、無事に合格することができました。
これから受験する人にとって、少しでも有益な情報を残せたら幸いです。

## 目次

- [CompTIA Security+とは](#comptia-securityについて)
- [試験概要](#試験概要)
- [試験勉強](#試験勉強)
    - [勉強期間](#勉強期間)
    - [使用教材](#使用教材)
    - [良かった勉強法](#良かった勉強法)
- [最後に](#最後に)
- [参考](#参考)



## CompTIA Security+について

**CompTIA**(Computing Technology Industry Association)は、
アメリカに本部を置く非営利のIT業界団体です。

### CompTIA Security+の難易度と位置づけ

#### 難易度

Security+は基礎〜中級レベルの試験であり、以下を目安に設計されています。

- セキュリティに重点を置いたIT管理における最低2年間の業務経験
- 技術的情報セキュリティの実務経験
- セキュリティコンセプトに関する幅広い知識

#### 資格の位置づけ

![comptia.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758412/2c92258d-6618-4998-bfeb-df5a579b0d2b.png)



## 試験概要

- **試験時間**：90分
- **試験問題**：最大90問 (選択式 + パフォーマンスベーステスト含む)
- **合格基準**：750/900点（約83%）

私はテストセンターにて受験し、問題数は77問ほどでした。
合格点数は、780/900点で、すごくギリギリでした。

## 試験勉強

### 勉強期間
**2週間**弱でした。

### 使用教材

- [The Official CompTIA Security+ Study Guide](https://www.comptia.jp/information/2021/09/the-official-comptia-security-study-guide-0901.html)
- [TAC Biz School Web模擬試験](https://www.tac-school.co.jp/kouza_it/comptia_web_mogi.html)
- [CompTIA 改定Security+ SY0-701 出題予想問題集 1,400問](https://amzn.asia/d/aoHSNNE)


### 良かった勉強法

#### ✅ 良かった勉強法①：ガイドブック(教科書)を読み込んだ

基礎知識をしっかり固めるために、ガイドブックを何度も読みました。全体像が掴めるだけでなく、理解が浅い部分の補強にもなりました。

400ページほどある教材なので、全部の文章を読むとキリがないので、
**太字**になっている単語の意味を理解する。ぐらいの感覚で、大まかに読みました。4周くらいしたときに、結構わかるようになっていました。

---

#### ✅ 良かった勉強法②：TACの模擬試験を活用

TACの2回分の模擬試験が役立ちました。

- 最初は77%ほどで、合格ラインには及ばず
- 間違えた問題を復習
- 2回目では97〜98%に到達

模試は、本番の形式に慣れるためにも非常に有効でした。

---

#### ✅ 良かった勉強法③：問題を解き、ガイドブックを逆引き

過去問でつまずいた問題は、ガイドブックを使って該当箇所を確認。  
曖昧だった知識を明確にしていくことで、理解度が格段に上がりました。

[CompTIA 改定Security+ SY0-701 出題予想問題集 1,400問](https://amzn.asia/d/aoHSNNE) 
私は、時間がなく、200問ぐらいまでしか進められませんでしたが、良かったです。


---

#### ✅ 良かった勉強法④：仲間と教えあう

一緒に受験する同期がいたのですが、とても助けられました。

- わからないところは教え合う
- 両方とも分からない場合は、一緒に時間をかけて考える

「一緒に頑張れる仲間がいる」という環境は、**大きなモチベーション**になります。


## 最後に

2週間という短期間ではありましたが、集中して効率的に学習することで合格につながりました。Security+はセキュリティの入り口として非常に良い資格なので、これからセキュリティ分野に進みたい方にはおすすめです。

## 参考
- [https://www.comptia.jp/certif/core/comptia_security_501/](https://www.comptia.jp/certif/core/comptia_security_501/)
- [https://www.comptia.jp/information/2021/09/the-official-comptia-security-study-guide-0901.html](https://www.comptia.jp/information/2021/09/the-official-comptia-security-study-guide-0901.html)
- [https://www.comptia.jp/information/2024/04/comptia-securitysy0-701-2024423.html](https://www.comptia.jp/information/2024/04/comptia-securitysy0-701-2024423.html)
- [https://www.comptia.jp/pdf/CompTIA%20Security%2B%20SY0-701%20Exam%20Objectives%20%285.0%29_JA-JP.pdf](https://www.comptia.jp/pdf/CompTIA%20Security%2B%20SY0-701%20Exam%20Objectives%20%285.0%29_JA-JP.pdf)
- [https://www.comptia.jp/press/180131.html](https://www.comptia.jp/press/180131.html)
Java開発環境をEclipseからVSCodeに移行してみた。

# はじめに
Geminiとの開発にも慣れてきたので、Clineを使って更に楽したなって、思い始めました。
とはいえ、私はEclipseユーザ、まだ、Clineが・。

というところで、VSCodeに移行してみました。

# 参考サイト
https://code.visualstudio.com/docs/java/java-tutorial

https://code.visualstudio.com/docs/java/java-spring-boot

https://spring.pleiades.io/guides/gs/guides-with-vscode

# 入れたプラグイン
色々みて、色々試したけど、結局はこれを入れておけば足りそう。


https://marketplace.visualstudio.com/items?itemName=Pleiades.java-extension-pack-jdk

## Extension Pack for Java Auto Config を入れる前に入れたプラグイン
※ 結局、Extension Pack for Java Auto Config 内に包括されている。

https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack

https://marketplace.visualstudio.com/items?itemName=vmware.vscode-boot-dev-pack


# Javaのランタイム設定
## VSCode全体
どこのサイトで見たか忘れてしまったが・。
1.Settingで「java.configuration.runtimes」で検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/80bbeb18-89df-4c1c-9512-c042a6a48a1f.png)

2.pathをインストールしているパスに変更
（1.8, 11はインストールしていないので消したくても、なぜか自動で記載されてしまう・）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/387c0b80-3851-4b9b-bcbe-7baee4488400.png)

## プロジェクト単位
1.Java Projectsで以下画像の赤枠にカーソルを充てると出てくる「・・・」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/8c8f0b2c-43ab-4995-95ca-27c581f68d81.png)

2.Configure Java Runtimeをクリックすると選択が可能
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/0b47cd8b-1a25-4ada-afdd-918777d99ec7.png)

# Eclipseで操作していた内容
## ファイル参照
ある特定のファイルを検索した場合は、Ctrl + P 

## UT実行したい場合
こんな感じで実行ができる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/4be06d3d-6611-45d4-b041-c1bfea6ee1d7.png)

## デバックしたい場合
こんな感じ。ぱっと見、リストの中身のオブジェクトが出てこなくて、焦ったけど、目のアイコンにカーソルをあてると、「click expand」ってでるので、クリックすると更に中身が表示される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/ce1928f6-3ed4-4167-9553-0fe474089a50.png)

## gradleで落としてきたJARファイルを見たい場合
JAVA PROJECTS で見れる。というか、JAVA PROJECTSがEclipseで普段みていた情報に近しくかんじ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/6a0dcb4a-7f27-4be7-9a05-5d1138414c15.png)

## 呼び出し階層が見たいとき
右クリックして、Show Call Hierarchy
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/206526/12f5d726-3298-4568-abe4-c7b8e496182d.png)

## プロジェクト全体でファイル検索したいとき
Ctrl + Shift + f

## 特定のフォルダ内を検索したいとき
フォルダを選択してShift + Alt + f

# 使ってみた心地
悪くない。
VSCodeの起動自体は早いけど、プロジェクトの読み込みには時間がかかっているかも？
とはいえ、Eclipseは起動自体が遅かったので体感、トータル同じくらいなのかな？
【AIサブスクは「沼」！】動画文字入れに$20は高すぎ！CHATGPTよりCLAUDEを選ぶワケ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212914/6d27a984-57f7-4147-a5cb-742b10915a5e.png)



### ブログ記事本文

ねぇ、みんな！最近AIのサブスクってどうしてる？毎月毎月、新しいツールが出てきて、何に課金すべきか頭抱えてない？僕はもう、正直「AIサブスク沼」にどっぷりハマってるんだよね。

最近、動画のタイトルにちょっと文字入れたいだけなのに、まさかの月額20ドル！思わず「高っ！」って叫んじゃったよ。もちろん、そのツール自体は高機能なんだろうけど、僕が使いたい機能はごく一部。それだけで月20ドルは、ちょっとコストパフォーマンス悪すぎないか？って考えちゃう。

### AIサブスクは「移り変わり」の戦場！年度契約なんてありえないワケ

僕も例外じゃなくてさ、このところ毎月サブスクが変わってるんだよね。先月はＡＩエージェントの「MANUS」に40ドル突っ込んだけど、結局解約しちゃった。もちろん、MANUSもすごいツールなんだけど、僕のユースケースにはちょっと過剰だったんだ。でも、残ポイントと日々のポイント付与で、しばらくは更新不要な気がしてるから、まぁ良しとしようか。

こんな風に、AIの世界って本当に移り変わりが激しいでしょ？昨日最強だったものが、明日にはもう「え、それ使ってるの？」ってなってるんだから、年単位で縛られるなんてナンセンスだよ。

だから僕は、AIツールの「年度サブスク」はマジで意味ないと思ってる。だって、1年後、今使ってるAIツールがどれだけ進化してるか、あるいはどれだけ新しい競合ツールが出ているか、なんて予測不可能だから。技術の進化スピードが早すぎて、年間契約のリスクが高すぎるんだよね。

例えば、音楽生成AIの「SUNO-AI」（月額10ドル）。これはこの一年間、本当に世話になったし、今後も世話になり続ける気がしてる。アイデア出しからBGM制作まで、もう手放せないレベル。でも、このSUNO-AIでさえ、年度契約はしない。だって、いつもっとすごい音楽AIが出てくるかわからないんだから。常にアンテナを張って、最高のツールを選び続けたい。これが、激動のAI時代を生き抜く僕なりの戦略なんだ。

### 僕がCHATGPTよりCLAUDEを選ぶワケ

そんな中で、現時点での僕の最優先AIエージェントは断然「CLAUDE-DESKTOP」！

なぜかって？いくつか理由があるんだけど、一番大きいのはやっぱり「使い勝手」と「安定性」、そして「長文処理能力」なんだ。CHATGPTも素晴らしいんだけど、僕のワークフローにはCLAUDEの方が圧倒的にフィットしてるんだよね。

CLAUDEはとにかく自然な会話ができるし、複雑な指示にも的確に応えてくれる。そして何より、長い文章や大量のデータを分析する能力がすごい。仕事で企画書や報告書の下書きを依頼したり、大量の論文から要点を抽出したりする時に、その真価を発揮してくれるんだ。デスクトップで使える手軽さもあって、アイデア出しから資料作成まで、もうCLAUDEなしでは考えられないレベル。

もちろん、CHATGPTも日々のちょっとした調べ物や、気軽なアイデア出しには活用してるよ。それぞれのAIには得意分野があるから、目的によって使い分けるのが賢い選択だと思ってる。でも、僕の中で「AIエージェント」として一番頼りになるのは、間違いなくCLAUDEなんだ。だから、来月はCLAUDEのサブスクで決まり！
CTF Kali Setup

# 目次

- Setup
    - [Kali Setup](https://qiita.com/kannkyo/items/3c29df1c2df60926d47d)
- [Pwn](https://qiita.com/kannkyo/items/92fa2e19ad4f31141190)
- [Stegano](https://qiita.com/kannkyo/items/776996b9b7fe1779690c)
- Web
    - [Web Awesome Injection](https://qiita.com/kannkyo/items/b334bca02c8a24331615)

# Brew Install

```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo >> /home/kali/.zshrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/kali/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
```
【衝撃】REDMINE-MCP導入でAI開発が爆速化！もはや私がプロマネ？！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212914/0f0320ec-b711-4507-81a9-379e21137a9f.png)


皆さん、こんにちは！
AI技術の進化が目覚ましい昨今、開発現場も大きく変わってきていますよね。特に、AIエージェント、例えばGitHub Copilotのようなツールと協業する機会が増えたことで、「もしかして、もうプロジェクト管理とか、人間が手動でやる時代は終わったんじゃないか？」なんて、夢のようなことを考えている方もいるかもしれません。

でも、ちょっと待ってください！
僕も最初はそう思ってました。AIがコードを書いてくれるなら、タスク管理も自動でやってくれるんじゃないか？って。ところが、実際にやってみたら、とんでもないことが分かったんです。

### はじめに：AI時代に「管理」は不要になる？そんな幻想をぶっ壊す！

プログラミングの現場でAIがコードを生成してくれるのは、本当に革命的です。タイピングの時間を大幅に削減し、思考のループを高速化してくれる。それは間違いありません。しかし、AIがどれだけ賢くなっても、プロジェクト全体の進捗、タスクの依存関係、優先順位、そして何より「この開発のゴールは何か？」といった、**全体を俯瞰し、方向性を定める「管理」の役割**は、依然として人間が担うべきものなんです。

というか、むしろAIが高速でコードを生成してくれるようになったからこそ、プロジェクト管理がより重要になった、と僕は痛感しました。AIのコード生成能力が上がれば上がるほど、開発のスピードは上がる。上がるんですが、それに伴って「今、何がどこまで進んでいるのか」「次に何をすべきなのか」といった情報が、あっという間に見えづらくなるんです。まるで、高速で走り出した新幹線の中で、どこに向かっているのか分からなくなるような感覚です。

かつての僕は、こんな状態でした。
「あれ？この機能、もう終わったんだっけ？」
「このタスク、誰が担当してたっけ？」
「ていうか、そもそもこのタスク、今やるべきだっけ？」
AIの恩恵を受けつつも、プロジェクト全体が「混沌」の淵に沈んでいく…そんな悪夢のような日々を送っていたんです。

### AIエージェントとの協業がもたらす「新たな混沌」

GitHub Copilotを導入して、最初は本当に感動しました。「なんて賢いんだ、こいつは！」「もう俺、コード書かなくてもいいんじゃね？」なんて、調子に乗ってました。AIが提案してくれるコードはスマートだし、バグも少ない。素晴らしいパートナーを得た、と心底思っていました。

ところが、数週間、数ヶ月とAIとの協業が進むにつれて、別の問題が浮上してきたんです。
AIはコードを生成してくれるけど、**タスクを定義したり、進捗を報告したりはしてくれません。**いや、正確には、プロンプトで指示すればそれっぽいものは出せるんですが、それをプロジェクト管理ツールに正確に、そして継続的に記録していく、という部分までは面倒を見てくれないんです。

結果、どうなったかというと、手元にはAIが生成した素晴らしいコードの断片が山積みに。しかし、それらがどの機能の一部で、全体の中でどういう位置づけなのかが、だんだん曖昧になっていきました。頭の中では分かっているつもりでも、いざ進捗会議で「今どこまで進んでいますか？」と聞かれると、「えっと…この部分は終わってて、あの部分も…」と、しどろもどろになってしまう。

僕のプロジェクトは、まさに「AIがコードを書く」という最先端の開発を行っているにもかかわらず、その管理体制はまるで原始時代。このままでは確実に破綻する、と確信しました。
「AIがどれだけ賢くても、やっぱり『管理』は人間がやるしかないのか…」
そんな諦めにも似た気持ちを抱き始めた時、あるソリューションが僕の目に飛び込んできたんです。
X API v2のメディアアップロードについてのメモ

## 概要
- 5月頭にXからAPIv2のメディアアップロードの仕様変更についてアナウンスがありました。
	- 従来のエンドポイントは5月いっぱいで使用できなくなるそうです。特に大きなアップデートがあるわけではないため、完全にX側の都合によるものですね。
- 現在はドキュメントも更新されており、以下から確認できます。(https://docs.x.com/x-api/media/quickstart/media-upload-chunked)

## 主な変更点
- エンドポイントが変更になりました。
	- これまでクエリパラメータで指定していたuploadの段階リクエストが、エンドポイントのパスに含まれるようになりました。わかりやすくて良いですね。
		- before
			- 2/media/upload?command=initialize
			- 2/media/upload?command=append
			- 2/media/upload?command=finalize
		- after
			- 2/media/upload/initialize
			- 2/media/upload/{id}/append
			- 2/media/upload/{id}/initialize

## その他
### DMメディア時の共有設定について
- アップロードしたdm_imageやdm_videoなどは、取得したmedia_keyをそのまま使い回そうとするとエラーになります。
- そのため、必要に応じて2/media/upload/initializeの段階でsharedというオプションを指定する必要があります。
	- これは以前はドキュメントにも記載がなく、隠しオプションのような扱いになっていました。
- shared: trueのように指定しますが、値はbool型でリクエストします。以前はstring型で指定する必要があったため、移行作業中に見落としがちなので注意が必要です。
RAG精度向上：LLMを使ってRerankする

今回は、RAGの精度向上に役立つ、LLMを活用したrerank手法について紹介します。
最近読んだある記事がとても参考になりました。その記事はRAGをテーマにしたコンペの振り返り記事で、筆者が優勝した際のRetrieval戦略が詳しく解説されています。

Retrievalの最適化自体は特に斬新な方法ではなく、よく知られた手法（例えば、Parent Chunkを使った手法など）が中心でした。ただ一つ、とても興味深かったのが「通常のrerankモデルを使うよりも、LLMを用いたrerankの方が精度が高い」という筆者の発見です。

## 1. Rerankモデルについて

一般的なrerankモデルの仕組みは、最初の検索結果に対して質問と各候補テキストの関連性を再評価し、スコアを付け直すことで、より正確な順位に並べ替えるというものです。多くの場合、Transformerベースのcross-encoderモデル（例: BERTやDeBERTa）が使われ、質問と各テキストを同時に入力して関連性を数値化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/50884117-73c1-4b7f-b629-6acb00b42d32.png)

rerankについて以前詳しく解説した記事ありますので、興味ある方：

https://qiita.com/xxyc/items/9f05241e5add3b005b91

## 2. LLMを活用したRerankの詳細
一方で、LLMを使ったrerankでは、こうしたアルゴリズム的な手法を採らず、完全にLLMの判断に任せてしまいます。

具体的な手順は以下のような流れです。
1. Vector検索で得られた複数のchunkと質問を一緒にLLMに渡します。

2. LLMに各chunkの関連性を評価してもらいます。例えば、0〜10の10段階評価といった基準でスコアリングします。イメージは以下のようなプロンプト
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/34121df3-7463-4986-badc-dabe77fe7365.png)


3. LLMが出したスコアと元のVector検索スコアを一定比率で組み合わせ、最終的な順位を再計算します。特にLLMのスコアに高めの比重を与えることで、精度向上を図ります。


LLMによるrerank処理は特に高性能なモデルを使う必要はありません。関連性を評価して順位付けするだけの作業ですので、GPT-4o-miniのような安価で高速なモデルでも十分に実用レベルの結果が得られます。


## 3. Hybrid Searchの課題点について

また記事では、Hybrid Searchについても触れており、「Hybrid Searchはむしろ純粋なVector Searchよりも精度が落ちる場合が多い」と指摘しています。私も同様の傾向を感じており共感します。原因は多くの場合質問に含まれるキーワードがノイズとなり、回答に本質的に重要でないキーワードが多数含まれているからです。Hybrid Searchを使うなら、LLMを使った質問のRewriteでノイズを除去し、キーワード密度を高める工夫が必要ですが、それなら最初から純粋なVector Searchを使った方が高速で、しかも結果への影響もそれほど大きくないことが多いです。


LLMを用いたrerankの具体的なprompt例は下記記事に紹介されていますので、興味ある方は参考にしてみてください⇩

https://jasonkang14.github.io/llm/how-to-use-llm-as-a-reranker
ClaudeでDALL-E 3の画像を生成する(MCPの試運転）

### ClaudeでDALL-E 3の画像を生成する(MCPの試運転）
今のところclaudeでは、ChatGPT 4oなどのような画像生成の機能はありませんが、MCPを使ってClaudeからも画像を生成できます。
この記事は前記事の
#### MCPお試し最短手順　～僕の名前は「ブラッド・ピット」です～  https://qiita.com/quittardis/items/a3ba1cc395bcb1c29570　
での設定が前提となります。

適当なディレクトリに移動（たとえば、Documents）し、以下のコマンドを実行します。
```
git clone https://github.com/Garoth/dalle-mcp.git
```
これで、Documents下に
```
dalle-mcp
```
というフォルダができますので、次にこのフォルダに移動し
```
npm install
```
を実行します。以下はそのプロセスの表示です。
最後のほうで、 npm audit fix　を実行します。

```
 npm install
npm warn deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm warn deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported

> dalle-mcp-server@1.0.0 prepare
> npm run build


> dalle-mcp-server@1.0.0 build
> tsc && node -e "require('fs').chmodSync('build/index.js', '755')"


added 319 packages, and audited 320 packages in 14s

39 packages are looking for funding
  run `npm fund` for details

2 vulnerabilities (1 moderate, 1 high)

To address all issues, run:
  npm audit fix

Run `npm audit` for details.
PS C:\Users\hakub\Documents\dalle-mcp>  npm audit fix

changed 8 packages, and audited 320 packages in 4s

39 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities
```

次に、Claudeの "claude_desktop_config.json"を編集します。
#userのところに自分のuser名を
sk-....................のところにOpenAIのAPIキーに入れ替えてください。

前記事の設定ファイルに

```
 "dalle-mcp": {
      "command": "node",
      "args": [ "C:/Users/#user/Documents/dalle-mcp/build/index.js" ],
      "env": {
        "OPENAI_API_KEY": "sk-....................",
        "SAVE_DIR": "C:/Users/#user/Documents"
      }
```
を追加しただけです、

```
{
  "globalShortcut": "",
  "mcpServers": {
    "mcp-installer": {
      "command": "npx",
      "args": [
        "@anaisbetts/mcp-installer"
      ]
    },
    "blender-mcp": {
      "command": "uvx",
      "args": [
        "blender-mcp"
      ]
    },
    "filesystem": {
      "command": "npx",
      "args": [
        "-y",
        "@modelcontextprotocol/server-filesystem",
        "/Users/#user/Desktop",
        "/Users/#user/Downloads"
      ]
    },
    "mcp-browser-use": {
      "command": "uvx",
      "args": [
        "mcp-browser-use"
      ]
    },
     "dalle-mcp": {
      "command": "node",
      "args": [ "C:/Users/#user/Documents/dalle-mcp/build/index.js" ],
      "env": {
        "OPENAI_API_KEY": "sk-....................",
        "SAVE_DIR": "C:/Users/#user/Documents"
      }
    }
  }
}
```
設定が終わったら、Claude Desktopを終了し、
再起動します。
```
MCPのdalleで、美しい富士山をフォトリアリスティックに描いてください。
```
と、Claudeに指示すると、Documents下に↓の画像が生成されました。
![dalle-1748055286657.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430586/b58597ed-9efa-462e-91d8-1956fb65d1e5.png)

↓　Claude -> MCP Dall-E 3で生成した４コマ漫画

![4koma_cooking_ai.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/430586/6892d452-a67d-44f3-a2c1-9535ec63b7fa.png)
DCCツールのスクリプト・プラグイン開発で愛用しているPythonライブラリ

## Pythonライブラリ一覧

2025年5月現在、DCCツールのスクリプト・プラグイン開発において個人的に愛用しているPythonライブラリ一覧を紹介します。

### パッケージ・プロジェクト管理ツール

#### uv

* https://docs.astral.sh/uv/guides/install-python/
* https://github.com/astral-sh/uv

### linter, formatter

#### ruff

* https://docs.astral.sh/ruff/
* https://github.com/astral-sh/ruff

### テストフレームワーク

#### pytest

* https://docs.pytest.org/en/stable/
* https://github.com/pytest-dev/pytest/

### 型チェック

#### mypy

* https://mypy-lang.org/
* https://github.com/python/mypy


#### ty

2025年5月現在、まだプレビュー段階のようですが注目しています。

* https://github.com/astral-sh/ty


## ライブラリ選定で意識していること

:::note warn
私個人の選定基準であり、ベストプラクティスを示すものではない点をご了承ください。
:::

* ライセンス形態
  * ライセンスの明記がないもの、解釈が難しい独自ライセンスは避けるなど
* 導入事例
  * 有名なPythonライブラリでの導入事例などを確認
* 更新・保守の状況
  * メンテナーの規模 (企業、団体、有志、個人、コミュニティの活発度など)
  * リリースノート、ドキュメント、テスト、サンプルなどの更新状況
* ライブラリの開発開始時期や普及度の推移
netplanからNetworkManager (nmtui)への移行

**Ubuntu 24.04 server**では、ネットワーク管理ツールとして**netplan**がデフォルトとなっており、ネットワークを管理するために**yamlファイル**を編集する必要があります。

個人的には、GUIライクに設定できる``nmtui(NetworkManager) ``が使いたいので、ネットワーク管理ツールを**Network Manager**に移行する手順を記録しておきます。

# 移行方法
## 1. yamlファイルの編集
以下のファイルを管理者権限で開きます。

```bash
sudo nano /etc/netplan/50-cloud-init.yaml
```

デフォルトでは、こんな感じになっているはずです（あくまで一例です）
```/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}
 network:
     ethernets:
         enp1s0:
            dhcp4: true
     version: 2
```

これを、以下のように書き換えます。
```/etc/netplan/50-cloud-init.yaml
# This file is generated from information provided by the datasource.  Changes
# to it will not persist across an instance reboot.  To disable cloud-init's
# network configuration capabilities, write a file
# /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg with the following:
# network: {config: disabled}

network:
   version: 2
   renderer: NetworkManager
```

書き換え終わったら保存して終了してください。

## 2. 設定の適用
設定ファイルを編集しただけでは、``netplan``の設定は書き換わりません。

以下のコマンドを入力して設定を反映してください。

```bash
sudo netplan apply
```

:::note info
SSH接続等でリモート接続して作業している場合は、ネットワーク接続が失われてターミナルがフリーズすることがあります。

この場合は、一度ウィンドウを閉じて再度SSH接続し直してください。
:::

以上で終了です。お疲れ様でした。
Wiki.jsを使った

Dockerを使うと超簡単でした。
wikiは、もう、これでいいんじゃないかと思う。

個人的にだったら、おしゃれアクションがちょっと嫌なのと、node.jsが好きじゃないので、MediaWikiを使うと思う。

ファイル１つとDocker compose 環境を用意するだけです。

  ~/docker/wiki-js/docker-compose.yml
  
```dockerfile
# docker compose up -d
# https://localhost:3000
services:

  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijsrocks
      POSTGRES_USER: wikijs
    logging:
      driver: none
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data

  wiki:
    image: ghcr.io/requarks/wiki:2
    depends_on:
      - db
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijsrocks
      DB_NAME: wiki
    restart: unless-stopped
    ports:
      - "3000:3000"

# administrator email : admin@local.local
# password : password

volumes:
  db-data:
```
【rails】Preline UIのJavaScriptによる動作（Collapseなど）を実装する方法


## はじめに

こんにちは。アメリカ在住で、独学でエンジニアを目指している Taira です。
現在 Rails アプリを作成中ですが、CSS 周りは Tailwind/Preline を使用しています。
実は Preline は CSS だけでなくたった 3 ステップで JavaScript を反映させることが可能です。
本日はその方法について紹介していきたいと思います。なお、すでに Tailwind が Rails で問題なく動作している方のみ見ていただければ幸いです

実行環境

- Rails 8.0.2
- Tailwindcss 3.3.1

### 導入手順

1. JS の読み込みを追加（importmap 使用時の例）
   まず、app/javascript/application.js に以下を追加します

```
import 'preline'
```

2. その上で、config/importmap.rb に以下を追記

```
pin "preline", to: "https://ga.jspm.io/npm:preline@1.9.0/dist/preline.js"
```

3. app/views/layouts/application.html.erb の <body> の直前に：

```
<%= javascript_importmap_tags %>
```

以上で preline の JS が反映されると思います。

### 【追記】ドロップダウンボタンが反映されない?

どうやら、preline のバクなのかわかりませんがどうやらドロップダウンボタンが反映されない場合もあるようで私は反映されませんでした。
なので、その機能だけ自分で relative と absolute を用いて実装する必要があるかもしれないです。
ジョブ・タスク・プロセス・スレッドの関係性をWebブラウザで理解＆整理する

## はじめに

OSについての勉強をしていると、「ジョブ」「タスク」「プロセス」「スレッド」など、似たような用語がたくさん出てきて混乱することがありました。

それぞれの関係性を整理するために、この記事では備忘録としてまとめておきます。

Windowsを例に、Webブラウザを題材として、それぞれの用語がどのように使われているかを見ていきます。

## Webブラウザで理解する各用語の関係

### ジョブとタスク

ジョブについて調べてみると、**ジョブオブジェクト**というWindowsの機能にたどり着きました。

[Microsoftのジョブオブジェクトの公式ドキュメント](https://learn.microsoft.com/ja-jp/windows/win32/procthread/job-objects)では、以下のように説明されています。

> ジョブ オブジェクトを使用すると、プロセスのグループを 1 つの単位として管理できます。

つまり、プロセスを管理していそうです。

また、Windowsのタスクマネージャーを見ると、こちらもプロセスを管理していそうです。

これらの用語は文脈によって意味が変わりそうで、あまり深く考えすぎないほうがよいかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841606/72344812-36db-4eb6-a60e-8895e0ee6ddd.png)

### プロセスとスレッド

Webブラウザを例にして考えると、プロセスとスレッドの関係は以下の図のようになります。

各タブが独立したプロセスになっており、プロセスの中では、レンダリングスレッドやJavaScriptエンジンのスレッドなど、さまざまなスレッドが動いています。

このように、1つのアプリケーションでも、複数のプロセスが存在し、それぞれのプロセスに複数のスレッドがあるという構造になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3841606/e40a049d-33fc-4a5d-bea5-498d7706bc0f.jpeg)

## 感想

すべてを厳密に区別しようとするよりも、全体の仕組みとして捉えることのほうが大切だと感じました。

また、Webブラウザという身近なアプリケーションを例にすることで、用語の違いや関係性を具体的にイメージしながら、ある程度整理できたのは良かったと思います。
「AIできます」を細分化したい

# 背景
「私、AIできますけど」を定量化したい。
SES業界の採用面接を想定して作成したもののため、データサイエンティスト的なスキルは除外されている。
線形代数もコサイン類似度も知らないけど、レベル４～５程度のスキルがあれば十分需要があるんじゃないかな。

# AI利用レベルの整理

AIの利用には様々な段階があり、必要とされる知識や技術の深度も異なります。ここでは、AIの「利用」から「研究・開発」へと進むにつれて、より高度な技術と知識が求められるよう、**8つのレベル**に分類しました。

---

### レベル1：アプリ・ウェブサービスの利用

- **内容:** 既存のAI搭載型サービス（例：ChatGPT、Midjourney、Grammarly、DeepL）を、その提供インターフェース（Webブラウザ、スマホアプリなど）を通じて利用する段階です。AIの仕組みを理解していなくても、その恩恵を享受できます。スマートフォンの顔認証やレコメンデーション機能のように、AIの存在を意識せずに機能の一部として利用しているケースも含まれます。
- **関連スキル:** サービスへのアクセス方法、基本的な操作方法、利用規約の理解

---

### レベル2：プロンプト習熟

- **内容:** レベル1のサービスをより効果的に活用するため、**プロンプトエンジニアリング**のスキルを磨く段階です。AIの特性を理解し、目的に応じて最適な指示を出すことで、出力の質を向上させます。役割指定、few-shot prompting、思考の連鎖など、様々なプロンプトのテクニックを習得し、試行錯誤を通じて最適なプロンプトを見つけ出す能力が含まれます。
- **関連スキル:** プロンプトエンジニアリングの知識、AIの得意・不得意の理解、問題解決能力、論理的思考力

---

### レベル3：API利用などを利用したAIアプリケーションの構築

- **内容:** OpenAIやGoogleなどのAIプロバイダーが提供する**API**を利用して、独自のアプリケーションやシステムを構築する段階です。既存のAIモデルを組み込むことで、特定のビジネスプロセスを自動化したり、新しいサービスを開発したりします。Pythonなどのプログラミング言語とAPIのSDKを使った開発が含まれます。
- **関連スキル:** プログラミング（Python, Node.jsなど）、APIの利用方法、Web開発/システム開発の基礎知識

---

### レベル4：RAG等を利用したAIアプリケーションの構築

- **内容:** **RAG（Retrieval-Augmented Generation）** のように、外部の知識ベースやデータベースとAIモデルを連携させることで、AIの応答の精度や信頼性を向上させるアプリケーションを構築する段階です。ベクトルデータベースや検索エンジンの知識、情報検索のアルゴリズムの理解が重要になります。
- **関連スキル:** ベクトルデータベース、情報検索技術、データ前処理、システムアーキテクチャ設計

---

### レベル5：LoRA等を利用した学習を含めたAIアプリケーションの構築

- **内容:** **LoRA（Low-Rank Adaptation）** などを用い、既存のAIモデルの一部を特定データで **追加学習（ファインチューニング）** する段階です。比較的軽量な手法でドメイン特化モデルを実現可能です。
- **関連スキル:** 機械学習の基礎、データセットの準備・整形、モデルの学習・評価、LoRAなどの手法の理解

---

### レベル6：伝統的機械学習・予測モデルの設計・運用

- **内容:** 構造化データや時系列データを対象に、**決定木、ランダムフォレスト、XGBoost、SVM、ARIMA**などの手法を用いて予測・分類モデルを構築・チューニング・運用する段階です。ドメイン知識を背景とした精緻なモデル設計や評価が求められます。
- **関連スキル:**  
  - 機械学習手法（XGBoost, SVMなど）  
  - scikit-learn、Pandas、NumPy等の活用  
  - 時系列解析（ARIMA、Prophet）  
  - モデル評価・ハイパーパラメータ調整  
  - ドメイン知識（金融、気象、製造等）

---

### レベル7：ファインチューン、モデル構築などAIの根幹にかかわる部分の開発

- **内容:** AIモデル全体を対象に**フルファインチューニング**を行ったり、目的に応じた**独自モデルの構築**を行う段階です。分散学習や大規模データ処理、高度なモデル設計が必要です。
- **関連スキル:** 深層学習、機械学習、ハードウェア構成（GPU等）、統計・データサイエンス、ハイパーパラメータ調整

---

### レベル8：Transformer、GANなどAIそのもののアルゴリズム開発

- **内容:** **Transformer、GAN**などの新しいAIアルゴリズムや理論を研究・開発する段階です。学術的・理論的な貢献が中心であり、計算機科学や数学、脳科学などの学際的な素養が求められます。
- **関連スキル:** 線形代数、微積分、確率統計、計算理論、アルゴリズム設計、研究能力、論文執筆

---
PHPにおける改行方法の使い分けとその理由

Kyonと申します。

現在、ECサイトを管理している会社で業務しています。使用言語はPHP・Laravelです。

この記事はAIも使用していますが、内容を確認し、読む方に有益となるように心がけています。

記事の本題として、PHPで「改行」と言っても、用途によって方法が変わります。
本記事では、初心者の方でも迷わないように、3つの改行方法と**なぜ**それを使うのかをやさしく解説します。

---

### 1. 改行方法3つのざっくりイメージ

| 改行方法         | 書き方例                    | 何が変わる？             |
| ------------ | ----------------------- | ------------------ |
| **PHP\_EOL** | `echo "文字列" . PHP_EOL;` | OSごとの改行コードを自動で使い分け |
| **"\n"**     | `echo "文字列\n";`         | プラットフォーム依存で改行      |
| **`<br>`**   | `echo "行1<br>行2";`      | ブラウザ上での改行表示        |

---

### 2. CLI／ログ出力では `PHP_EOL` を使う

```php
<?php
// 環境依存の改行コードを自動で選ぶので、
// WindowsでもLinuxでも同じコードで正しく改行できる
echo "処理が終わりました。" . PHP_EOL;
```

> **なぜ？**
>
> * **環境依存性の解消**：Windowsは`\r\n`、Linux/Macは`\n`と改行コードが異なるため、手動で書くと動作がずれる可能性がある。
> * **可搬性アップ**：どのサーバや端末でも同じコードをそのまま動かせる。

---

### 3. 手軽なスクリプト・テストでは `"\n"` を使う

```php
<?php
// 簡単にテストしたいときは短い記法でOK
echo "テスト終了\n";
```

> **なぜ？**
>
> * **シンプルさ重視**：短く書けるのでちょっとした確認やデバッグに最適。
> * **環境を限定**：ローカルや同一環境だけで動かすなら、改行コードの差をあまり気にしなくてよい。

---

### 4. HTML出力で改行を見せたいときは `<br>`

```php
<?php
// ブラウザ上で行を分けたい場合は <br> を使う
echo "こんにちは！<br>PHP入門";
```

> **なぜ？**
>
> * **HTMLの仕様**：HTMLはソースの改行（"\n"）を無視するため、ブラウザには何も表示されない。
> * **表示のコントロール**：`<br>`タグやCSS（`white-space`）で意図した改行を確実に反映できる。

---

### 5. まとめ：どれを選ぶべき？

| 用途           | 改行方法     | 理由                          |
| ------------ | -------- | --------------------------- |
| CLI／ログファイル出力 | PHP\_EOL | OS間の改行コード差を吸収し、可搬性を高める      |
| 手軽なスクリプト・テスト | "\n"     | 短く書けてデバッグしやすく、環境を限定した用途にマッチ |
| ブラウザ表示       | `<br>`   | HTMLの改行無視を回避し、表示制御が明確       |

これらの理由を押さえておけば、初心者の方でも適切に改行方法を選べるようになります。ぜひ、プロジェクトや学習の中で使い分けてみてください！
仙台IT系コミュニティ合同 競技プログラミング大会(2025/05/23) 回答例

## 仙台IT系コミュニティ合同 競技プログラミング大会

仙台のIT系コミュニティの合同で、競技プログラミングをやってみよう！という話になり、イベントを開催いたしました。

https://connpass.com/event/348034/

Java, Ruby, Go, JavaScript, TypeScript など言語を問わずオフラインで集まり、AtCoderの問題を解いて、お互いのコードを見せあいましょう、という交流イベントです。

私は出題問題選定係として参加しました。競プロ未経験者の方がおいので、アルゴリズム(二分探索など)を使わない問題を選びました。

解答時間は55分で3問出題しました。ここでは、問題の回答例を掲載してまいります。

## 第一問: [ABC200 A - Century](https://atcoder.jp/contests/abc200/tasks/abc200_a)

基本的には西暦年を100で割って +1 すると、世紀になります。
ただし、西暦2000年のような100の倍数の時は、+1しなくて良いので気をつけましょう。

```python
Y = int(input())

# 西暦年を100で割って +1 すると、世紀
century = (Y // 100) + 1

# 100の倍数の時は前の世紀
if Y % 100 == 0:
    print(century-1)
else:
    print(century)

```

上記の回答例を用意していたのですけども、本番ではもっと簡単な解法が披露されました。
このような別解が見られるのも、オフライン開催の良いところですね。

```python
# 西暦に99を足して100で割ると、世紀になる
# 例 2000年 + 99 → 2099 : 100で割ると20
# 例 2001年 + 99 → 2100 : 100で割ると21
Y = int(input())
print((Y + 99) // 100)
```

```python
# 100で割った値を小数点以下切り上げると、世紀になる
import math
Y = int(input())
century = int(math.ceil(Y / 100))
print(century)
```


## 第二問: [ABC311 B - Vacation Together](https://atcoder.jp/contests/abc311/tasks/abc311_b)

いわゆる「調整さん」のような問題です。各メンバーの予定を1日ずつ調べて、全員が「○」の日が連続何日あるかをカウントしましょう。

```python
N, D = map(int, input().split())
S = []
for i in range(N):
    S.append(list(input()))

answer = 0 # 答え
sequence = 0 # 現在の連続日数

# 日付のループ（横軸）
for d in range(D):
    # d 日目の全員の予定（縦軸）を判定する
    # 全員が "o" なら、その日はok
    all_ok = True
    for i in range(N):
        if S[i][d] == "x":
            all_ok = False

    # 全員okなら、連続日数を更新
    if all_ok:
        sequence += 1

        # 最高記録を更新
        answer = max(answer, sequence)
    else:
        # 一人でも"x"がいたら、連続日数をリセット
        sequence = 0

print(answer)
```

##  第三問: [ABC332 C - T-shirts](https://atcoder.jp/contests/abc332/tasks/abc332_c)

解き方は色々あるのですが、ここでは「次の0が来るまでに何枚のTシャツが必要か？」というのを求めて、そこから買うべき枚数をカウントする方法で解きます。

```1110121202222``` というパターンだったら、[```111```, ```1212```, ``2222``] の中で買う枚数が多いのはどれか？を考えます。

----

買う枚数は、以下のように計算します。

* "1"の場合: M回目までは買わなくて良い。M回を超えた場合、ロゴ入りTシャツ買う必要がある
* "2"の場合: 必ずロゴ入りTシャツを買う必要がある

```python
N, M = map(int, input().split())
S = list(input())

type1 = 0 # 予定1の回数
type2 = 0 # 予定2の回数

answer = 0
for i in range(len(S)):
    if S[i] == "0":
        # 予定1の回数がMを超えた場合、超過分のロゴTを買う
        buy_count_type1 = 0
        if type1 > M:
            buy_count_type1 = type1 - M

        # 予定2は予定の回数だけ、ロゴTを買う
        buy_count_type2 = type2

        # 買う枚数の更新
        buy_count = buy_count_type1 + buy_count_type2
        answer = max(answer, buy_count)

        # 洗濯するので必要枚数をリセット
        type1 = 0
        type2 = 0

    # 予定1の場合
    if S[i] == "1":
        type1 += 1 

    # 予定2の場合
    if S[i] == "2":
        type2 += 1

# 最後まで日程が終わったあとの、買う枚数を計算
buy_count_type1 = 0
if type1 > M:
    buy_count_type1 = type1 - M

buy_count = buy_count_type1 + type2
answer = max(answer, buy_count)

print(answer)
```
問題集を作る

## 前置き
### DBスペシャリストに去年落ちた
落ちました。

### SQLの勉強するため問題集作るかと思った
DBスペシャリストってDB設計、SQL、性能の3カテゴリがあるんだけどSQLの対策をしようと思った

## 作り方
Geminiに毎日問題を作らせてgoogle spreadseetsに吐き出させる。
n8n使って毎日このワークフローを実行する。こんなのができました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175961/2cd4987a-57b1-4245-81b0-f750139fa724.png)

### トリガーを作る
cronでもwebhookでもここはお好きに

### Geminiで問題を作る
HTTP Requestの部分。

以下を見るとGeminiのAPIの使い方があるので良いプロンプトを考えて問題を作ってもらう。

https://ai.google.dev/gemini-api/docs/text-generation?hl=ja&_gl=1*s3xc4f*_up*MQ..*_ga*MzAyODAxOTQuMTc0ODA1MjQ4MQ..*_ga_P1DBVKWT6V*czE3NDgwNTI0ODAkbzEkZzAkdDE3NDgwNTI0OTYkajAkbDAkaDM0ODk2OTg4NyRkTWdQbVZBMzlxMUhsZ0hkdUpRNEdEMmY0LTZwTVgyMm5yZw..

###  Geminiの回答をSpreadSheetに吐き出せる様に加工
Codeの部分。
Jsonをn8nの扱える構造体に変える感じ。

```
const rawText = $input.first().json.candidates[0].content.parts[0].text;
const trimRawText = rawText.replace(/```json\s*/, '').replace(/```$/, '').trim();
const parsed = JSON.parse(trimRawText);

return [
  {
    json: {
      now: new Date().toISOString(),
      question: parsed.question,
      answer: parsed.answer,
      explanation: parsed.explanation
    }
  }
];
```

 - イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175961/ee0ad3d5-8e49-4b16-bb60-ae41b936e0d2.png)

### SpreadSheetに吐き出す
Google Sheetsの部分。
n8nの設定で認証も通してくれるので特にコケることはない。
Idプロバイダに感謝。


## 結果
わかりづら
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175961/d8c0673b-785c-44a5-8bec-f176d8bc586d.png)

## 今後の展開
なんならアウトプットをSpreadSheetじゃなくてQiitaにして記事書かせるか？
マークダウンそのまま使えたら便利〜
（検索結果汚染するからやりません）

## 本当にやりたかったこと
Geminiに歌詞書かせてヒップホップ生成AIに食わせて曲を無限に作りたかった。
音楽生成系のAIはまだAPIの口がないくさいですね。

## その後
ブラウザのタブ閉じたらn8nで作ったフローが全部消えた。自動保存じゃないっぽいので気をつけてください。クラウドなんだから保存してくれるんちゃうんか
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175961/8d79040d-d054-41f5-a535-a5cce1a55395.png)
MOLGWのMac上でのビルド／インストール

# Introduction

[MOLGW](https://www.molgw.org/)のMac上でのビルドも成功したので、簡単な記録を残しておきます。

## 環境
### システム
- macOS Sonoma Version 14.7.5
- Hombrew 4.5.0
### ライブラリ:
- libxc
- libcint
- libint（libint2）

libxcとlibint2はhomebrew経由でインストールします。

## libcintのビルド

先ずlibcint（6.1.2）を入手します。
```
wget https://github.com/sunqm/libcint/archive/refs/tags/v6.1.2.tar.gz
```
次にアーカイブを解凍します。
```
tar zxf v6.1.2.tar.gz
```
licintのソースディレクトリに移動し、ビルド用ディレクトリを作成し、以下を実行します。

```
cd libcint-6.1.2; mkdir build; cd build
```
以下のコマンドを実行します。
```
cmake -DCMAKE_INSTALL_PREFIX:PATH=${HOME}/local -DWITH_RANGE_COULOMB=1 -DBUILD_SHARED_LIBS=0 -DPYPZPX=1 ..
```
引き続いて``make``を実行、さらに問題が無ければ続けて``make install``を実行します。
```
make; make install
```
今の場合``${HOME}/local``以下に``libcint``のライブラリとインクルードファイルがインストールされます。

## MOLGWのビルド #1
以下ではMOLGWのlibcintとビルドした手順を記述します。

先ず``config/my_machine_gfortran_seq.arch``を``my_machine.arch``にコピーします。
```
cp config/my_machine_gfortran_seq.arch my_machine.arc
```
``my_machine.arch``を編集します。以下は私が使用したものです。
```
PYTHON=python3

# Sequential compilation
FC=gfortran

CPPFLAGS=

CXX=g++
FCFLAGS= -cpp -O2  # -O0 -g -check all -traceback 
CXXFLAGS= -O2 # -O0 -g -fbounds-check

LAPACK=-L${HOME}/local/ -llapack -lblas

LIBXC_ROOT=/opt/homebrew
LIBXC=-L${LIBXC_ROOT}/lib -lxc
LIBXC_INCS=-I${LIBXC_ROOT}/include

LIBCINT=-L${HOME}/local/lib -lcint
```

## MOLGWのビルド #2

次にMOLGWをlibint（libint2）を使ってビルドしようとしましたが、うまくいっていません。
Placeholderとしてここにセクションを設けておきます。

# まとめ
小さい分子の計算であればMac上でも簡単にできるのがMOLGWの魅力です。
ビルドも比較的簡単なのでチュートリアルにも適しているように思っています。
Atcoder解いてみた ABC 133 B - Good Distance

#ABC 133 B - Good Distance 解答例
問題は[こちら](https://atcoder.jp/contests/abc133/tasks/abc133_b)

```C++
#include <iostream>
#include <string>
#include <map>
#include <cstring>
#include <cmath>
using namespace std;

int main() {
    int N; // 点の数2<=, <=10
    int D; // 次元数1<=, <=10
    int X[10][10]; // 一次元目:点の数, 二次元目:次元数

    cin >> N;
    cin >> D;

    for (int i = 0; i < N; i++) {
        for (int j = 0; j < D; j++) {
            cin >> X[i][j];
        }
    }

    int intDist = 0;
    int count = 0;
    for (int i = 0; i < N - 1; i++) {
        for (int j = i + 1; j < N; j++) {

            float sum = 0;
            for (int k = 0; k < D; k++) {
                sum += powf(abs(X[i][k] - X[j][k]), 2);
            }
            float dist = sqrt(sum);
            intDist = static_cast<int>(dist);
            if (static_cast<float>(intDist) == dist) {
                count++;
            }
        }
    }

    std::cout << count << std::endl;

    return 0;
}
```
初心者向け！GitHub PagesでのWEBサイトの公開方法

## はじめに
お久しぶりです。takimonです。
今回は、静的WEBサイトを無料で公開できるGithub Pagesについて紹介します。Github Pagesは、非常に便利なので、ぜひ活用してみてください。

## 前提知識と事前準備
- 基礎的なGitの前提知識
- Githubのアカウントの作成

## 1.GitHubでリポジトリを作成する

### 1. 右上の「+」ボタンをクリックし、「New repository」を選択します。

![20250512030852.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/647faba5-623d-439b-99b4-af16a97f6cc9.png)


### 2. 「Repository name」に好きなレポジトリ名を入力します。ここでは例として「test」とします。
### 3. 「Public」を選択し、その他の設定はデフォルトのままにします。「Create repository」ボタンをクリックして、リポジトリを作成します。

![20250512033955.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/43c22601-45b4-4876-b785-aac99f31ed25.png)

## 2.ローカルにリポジトリをクローンする
### 1. 以下のスクリーンショットにある赤矢印のURLをコピーします。
![20250512031153.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/f12d3b31-3623-45ab-9e4e-e400601bdbaf.png)

### 2. コピーしたURLを使って、以下のコマンドを実行し、ローカル環境にリポジトリをクローン (複製) します。

```
git clone [コピーしたリポジトリのURL]
```

## 3.GitHub Pagesでサイトを公開する
### 1. クローンしたリポジトリの中に、以下の内容のindex.htmlファイルを作成します。このファイルが、ウェブサイトの最初のページになります。

```
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Test Page</title>
  </head>
  <body>
    <h1>Test</h1>
    <p>testpage</p>
  </body>
</html>
```

### 2.以下のコマンドを順番に実行して、作成したindex.htmlファイルをGitHubにプッシュ (アップロード) します。

```
cd test
git add index.html
git commit -m "Initial commit"
git push origin main
```

### 3.GitHubのウェブサイトで、リポジトリの状態が以下のようになっていることを確認してください。

![20250512031447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/18b6836c-a41e-4f42-992c-72db87939292.png)


### 4.リポジトリの画面から「Settings」をクリックします。

![20250512031935.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/36be3594-a740-45fe-aac4-d866c6bf9140.png)

### 5. 「Settings」のサイドバーにある「Code and automation」セクションから「Pages」を選択します。

![20250512031946 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/6d89983b-8f17-4c0d-b8f1-66fbc783ace7.png)


### 6. 「Branch」で「main」ブランチを選択し、「Save」ボタンをクリックします。

![20250512033139.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/fc304551-7b1a-4139-b20d-a372676bfba7.png)

![20250512033345.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/afd317f5-2f8c-4ce8-ae11-8564ceae837c.png)


### 7.  数十秒後にページをリロードすると、以下のように表示されるので、「Visit Site」をクリックします。

![20250512032805.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/92e35c91-0f1b-42c6-bdfc-05aeb9b06c16.png)


### 8.作成したウェブサイトが表示されます。

![20250512025834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4049796/c0e82b25-0f4c-488b-b068-23c4a98d5b3f.png)



## おわりに
今回は、GitHub Pagesを使って静的ウェブサイトを公開する方法について説明しました。
ぜひ、ポートフォリオなどのウェブサイトを公開してみてください。
さらに詳しく知りたい場合は、GitHub Pagesのドキュメントを参照してください。

## 参考サイト

https://docs.github.com/ja/pages/getting-started-with-github-pages/what-is-github-pages
知識は孤立させない。 "ASTRAL"というネットワークSNSを作った理由




# 知識は孤立させない。

## "ASTRAL"というネットワークSNSを作った理由


<a href="https://d2or2g1md9lrqv.cloudfront.net/home.html">

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1678228/0b836b69-6fa3-4628-844d-c7e40ed05c61.png)

</a>

https://d2or2g1md9lrqv.cloudfront.net/home.html


### 1. 問題意識：情報は点で終わっている

現代のSNSは、情報が爆発的に流れていくにもかかわらず、「つながり」が圧倒的に不足していると感じています。  
Twitter（X）では有益な投稿が一瞬でタイムラインに流れ去り、Instagramでは写真が一枚ずつ並び、Facebookでは日記のように記録されていく。どれも「点」で完結する仕組みです。

でも、本当に価値のある情報って、点ではなく「線」であり「面」であり「網」ではないでしょうか？

たとえば、ある映画の感想が誰かの人生観につながっていたり、ある技術が別の概念と深く関係していたりする。  
でも、それをSNS上で"見える形"にすることは、いままで難しかった。

そこで私は、「情報や知識の関係性を、可視化しながら共有できるSNS」を作ることにしました。  
それが、**ASTRAL（アストラル）** です。

- - -

### 2\. ASTRALの哲学：情報はつながり、構造になる

ASTRALは一言で言えば、**「ノードとリンクで情報がつながっていくネットワーク型SNS」** です。

*   投稿は、ノード（点）になります。
    
*   関連する情報同士は、リンク（線）でつながります。
    
*   投稿内容は、誰かの思考や知識と新しいネットワークを形成します。
    

つまり、**投稿するたびに、知識がつながって構造化されていくSNS**です。

今までのSNSが「言葉を垂れ流す場所」だったとすれば、ASTRALは「思考を積み上げていく場」です。  
図で表すと、こんな感じです👇



（※ここにグラフ画像や動画を挿入するのがベスト）

ノードには「人名」「技術」「感想」「概念」など、ジャンルの制限がありません。  
だからこそ、**情報をジャンルの枠を超えてつなげる**ことができるのです。





- - -

### 3\. ASTRALで体験してほしいこと

ASTRALはまだ小さなサービスですが、すでにいくつかの面白い現象が生まれ始めています。

*   自分の好きな漫画のキャラが、現実の選手とつながっている。(例えばドジャースの大谷翔平選手は、影響を受けた漫画の一つにダイヤのAを上げている)
    
*   「Linux」というIT技術が、「哲学」や「オープン思想」とつながっている。

* 「Java」が意外と嫌われている。
    

これは、もはやSNSというよりも、**知識が有機的につながる「メディア」** だと考えています。

あなたの投稿が、誰かの投稿とつながって、「あ、これって意外な関係があるんだ」と発見が生まれる。  
そんな体験を、ぜひしてみてほしいです。

- - -

### 4\. 今後どうしていきたいか

ASTRALは現在、試験運用中の個人プロジェクトです。  
ですが、構想ははるかに大きく、最終的には次のような方向に進めたいと考えています：

*   **ユーザーごとの知識マップ**を生成して、思考の全体像を視覚化する
    
*   **AIと共同編集**しながら、ネットワークを半自動で拡張していく
    
*   **教育や研究、創作活動のための土台**として使えるようにする
    

知識は、孤立させてはいけない。  
一人ひとりの思考や発見が、ネットワークの中で意味を持ち、広がっていく。

そんな世界に共感してくれる方がいれば、ぜひ一緒にこの実験に参加してみてください。  
あなたの投稿が、ASTRALの宇宙をもっと豊かにしてくれるかもしれません。

- - -

📎 サイトはこちら：  
[https://d2or2g1md9lrqv.cloudfront.net/home.html](https://d2or2g1md9lrqv.cloudfront.net/home.html)

- - -
【アンチパターン】クラスが巨大化する名前

# はじめに
クラスが巨大化する一番の原因は、**役割が曖昧なクラス名**にあります。
大雑把で意味がガバガバなクラス名は、用途が広すぎるため様々な処理が書かれてしまいます。
その結果、クラスが肥大化しやすくなってしまいます。
僕が今までで見てきた1000行を超えるような巨大クラスも、共通して**曖昧なクラス名**になっていました。

ここではクラス命名のアンチパターンとして、クラスが肥大化する名前を紹介します。

# 便利屋化しやすい「Util」
特定のオブジェクトや状態に依存せず、さまざまな場面で再利用できる「汎用的な処理」を静的メソッドとして集約したクラスが「Util」（ユーティリティ）クラスです。
例
- 文字列の分割・結合（split,join）
- 日付のフォーマット変換
- 四捨五入、切り上げ、切り捨て

しかし、String型やDate型といった基本的な型で必要になる汎用的な処理は無数にあります。
この無数にある処理をUtilクラスに定義されていくうちに、クラスは肥大化してしまいます。

# 共通というあいまいさの塊「Common」
アプリケーション内で特定の領域に共通して利用される処理が、このクラスに定義されやすいです。
「Util」クラスと同じように、汎用的な処理（静的メソッド）が大量に集約されてしまうケースが多いです。

# あらゆる処理を定義して良いように見せる「Manager」
Managerという名前の通り、「管理する人」という意味があります。
こちらは「Util・Common」と比較すると、より複雑な処理が集約されがちになるクラス名です。
複雑な処理の割に、何を管理するのか？ 名前からは伝わってきません。

そのため、複雑で関心事がバラバラなクラス設計に陥りやすい名前です。

:::note warn
私の今までの経験上、この「Manager」と、
後述する「Controller」「Service」と名の付くクラスは、
特に処理が複雑かつ様々な関心事を抱えたとても厄介なクラスになっているケースが非常に多いです。
:::

# 全部まとめて面倒を見がちな「Controller」
WebフレームワークのMVCモデルを採用しているアプリケーションでは、この命名を採用するケースが多いです。
コントローラークラスは本来、外部から受け取った様々なデータを他のオブジェクトに渡すことが責務です。
ビジネスロジックを書くべきではありません。

しかし「Controller」という名前自体があいまいなため、ビジネスロジックが書かれてしまいクラスが肥大化するケースが多いです。

# ビジネスロジックのごった煮「Service」
サービスという名前も、ドメイン駆動設計で馴染みのある名前です。
- [ドメインサービス](https://qiita.com/yoron0122/items/aa5526aae7773cc288cb)
- [アプリケーションサービス](https://qiita.com/yoron0122/items/87ad3cc531ab2c093467)

上記のような設計パターンでは、頻繁に「Service」という名前が採用されます。
サービスクラスには主にビジネスロジックを記載しますが、クラス名が曖昧だと、様々なビジネスロジックを呼び寄せてしまい、クラスが肥大化してしまいます。

例として、ユーザー情報のCRUD操作を行うサービスクラス「UserService」があると仮定します。
このクラスではユーザー情報の登録・読み取り・更新・削除処理を行います。
しかしこれらの処理は、そもそもお互いの関連性がありません。

これは「UserService」という名前の意味が広すぎるのが原因です。
本来であれば、登録・読み取り・更新・削除 ごとにクラスを分けるべきです。

# より具体的で意味のある名前を採用しよう
「名は体を表す」というように、名前は非常に強力な力を持っています。

開発者はクラス名を見て、「この処理はこのクラスに定義してよいか？」と検討します。
意味が曖昧なクラス名だと、開発者は「このクラスに定義しても違和感は無いな」と判断して、たくさんのロジックが集約されてしまいます。

反対に、明確な意味を持つクラス名にはそのクラス名に沿ったロジックが自然に集まりやすくなります。

**名前がクラスの構造を左右する**のです。

クラス名は慎重に検討して命名してするようにしましょう。