OmniAICreator/Qiita-1.07M huggingface dataset:
[T-DASH] ブラウザをズームイン・アウトさせる

# Outline

テスト自動化で、エビデンスのスクリーンショットを撮るために、ズームイン・アウトしたいときがある
これをT-DASHで実現する

https://service.valtes.co.jp/t-dash/


# 技術情報

JavaScriptをwebdriverで実行して、zoomを変更する

以下をExecute JavaScriptをする
```
document.body.style.zoom='倍率'
```

# T-DASH

## カスタム動作

robotframework library
以下設定ファイルを CusBrowser.yaml で保存する

```@CusBrowser.yaml
ACT-CAT-CUSTOM-6cb0946e-0fbc-4fe0-a2a9-ea40de045bf1:
  action_category_name: CusBrowser
  icon: ''
  color: '#ee7312'
  custom_data:
    file_name: CusBrowser
    pip_list: []
    library_list:
    - SeleniumLibrary
  actions:
    ACT-CUSTOM-ffb16cca-bb18-4947-a0a0-7ea61b637a66:
      action_name: zoomを変更する
      action_type: operation
      action_format: 倍率「設定値1」にする
      action_note: ''
      action_args:
      - value1
      action_def:
      - - 'Execute JavaScript  '
        - document.body.style.zoom='${value1}'

```

次に、Custom.yamlをT-DASHの動作定義 -> カスタム動作 -> カスタム動作をインポート にてインポートし、実際にインポートされた設定内容を開く

以下のように、1つのカスタム関数が作成される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/d9477b28-5706-65a0-8b5b-a8975eea5889.png)

## テストケース

以下のように、zoom処理のカスタム動作を呼び出す。
実行後、ブラウザのzoom処理が完了させ、安定させるために、sleepを入れている。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/8780b001-6b99-19ac-cc99-01269813b7b8.png)


## 実行レポート

以下のように、ブラウザの x2、x0.5、標準にきりかえができていることがかくにんでき

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/f97ff02f-790f-4363-cb2d-67fbd3d8141f.png)
Rails のプロジェクトを仮想環境（Linux）で git clone する際の注意点

## 仮想環境（Linux）でのRailsの環境構築で躓いた
仕事でRubyMineを使用している

RubyMineではアプリを開く際にプロジェクトを指定しないと、開くことができない。

そのため、プロジェクトのディレクトリを作成していないとコンソールを使用することができない。

私はそれを面倒くさがって、 Windows のコマンドプロンプトで git clone をして、仮想環境でプロジェクトを触ろうと思ったら下記のエラーが出た。

/usr/bin/env: ‘ruby\r’: No such file or directory

これは、異なるOS間での改行コード問題らしい（下記URL参照）
https://qiita.com/sachiotomita/items/e50cd99d1b9b4c25eef8

つまり私は、Windowsのコマンドプロンプトで clone して、 Linux の仮想環境で操作するという、異なるOSでの作業をしていたため、先ほどのようなエラーが起きたと考えられる。

ちなみに、 Ubuntu で clone し直したら、この問題は解決した。
区画モデルの基礎 ②

## SIRモデルの解析
微分方程式系を解析する際の典型的な最初のステップは、平衡状態 (equilibrium) をみつけることである。平衡状態とは、個体が特定の区画に留まることを意味するのではなく、区画を出入りする個体の数が均衡していることを意味する。これは常微分方程式の右辺、すなわち区画に所属する個体数の変化率が0に等しくすることに相当する。

$$
\frac{dS}{dt} = 0, \quad \frac{dI}{dt} = 0, \quad \frac{dR}{dt} = 0
$$

通常、疫学モデルにおいて重要な平衡状態が二つある。
1. 無病平衡状態 (disease-free equilibrium; DFE)
2. エンデミックな平衡状態 (Endemic equilibrium)

DFEは、集団内に感染個体が存在しないこと、またはSIRモデルの場合、$I^\*=0$ であることを必要とする (ここで$^*$は平衡解を示す)。対照的にエンデミックな平衡状態では感染性保持者が半永久的に無くならない、すなわちつねに $I^\* > 0$ であることを必要とする。

前回の記事で説明したSIRモデル
$$
\frac{dS}{dt} = -\lambda(I)S, \quad \frac{dI}{dt} = \lambda(I)S -\gamma I, \quad \frac{dR}{dt} = \gamma I  
$$
における DFE は $(S^*, I^\*, R^\*) = (N, 0, 0)$ のとき、つまり全人口が感受性区画に所属するときである。このモデルにおいて、エンデミックな平衡状態は存在しない。なぜなら、疫病が終わると共に感染者は必ず0になるからである。生物学的に言えば、エンデミックな平衡状態には、感染が風土病として持続するために、感受性のある個体の継続的な供給、いわゆる「感受性者補充 (susceptible replacement)」が必要である。この補充過程は、例えば、感受性のある集団への出生や免疫力の低下などを通じて起こり得る。このような補充がなければ、人口動態を含まないSIRモデルのように、感染者数は流行後にはゼロに戻る。

### 人口動態を考慮したSIRモデル

そこで、今回は人口動態を考慮したSIRモデルについて考えてみる。まず次の生物学的仮定をおく
1. 出生率と死亡率は等しく、$\mu$で与えられる
2. すべての個体は生殖能力があり、等しく死亡の影響を受ける
3. 全ての個体は感染に対して感受性を持って生まれる

最初の2つの仮定は、人口を一定に保ち、3つ目の仮定は数学を簡潔にしてくれます。これらの仮定なしに感染症の動態をモデルかすることは可能であるが、ここではコンセプトを理解するため、簡潔さを優先する。これらの仮定のもと、人口動態を考慮したSIRモデルは次のように書ける:
```math
\begin{align}
\frac{dS}{dt} &= \mu N - \beta \frac{I}{N} S - \mu S, \\\\
\frac{dI}{dt} &= \beta \frac{I}{N}S - (\gamma + \mu) I, \\\\
\frac{dR}{dt} &= \gamma I - \mu R。
\end{align}
```
このモデルのDFEは $(S^\*, I^\*, R^\*) = (N, 0, 0)$ である。またエンデミック平衡解は各式の左辺を0とし、それぞれ$S$、$I$、$R$に関して解くことによって得られる:
```math
\begin{align}
(S^*, I^*, R^*) &= \left( \frac{\gamma + \mu}{\beta}N, \  \frac{\mu}{\beta} N \left[ \frac{\beta}{\gamma + \mu} - 1 \right], \  N - S^* - I ^* \right)。
\end{align}
```

### 平衡状態の安定性
平衡状態を見つけることは、系の長期的な振る舞いを理解するための最初のステップに過ぎない。モデルを理解する上で、どの振る舞いが一般的に実現されるかを判断する必要がある。例えば、平衡点付近からスタートした場合、平衡点に近づくのか、それとも遠ざかるのかを調べる必要がある。これには標準的な線形安定性解析が用いられるがここでは解説せずまた別の機会にまとめたいと思う。

次回は、今回定義した人口動態を考慮したSIRモデルを例に、感染症疫学で最も重要な数量とも言われる $R_0$ について学んでいく。

## 参考文献
- Julie C. Blackwood & Lauren M. Childs (2018) An introduction to compartmental modeling for the budding infectious disease modeler, Letters in Biomathematics, 5:1, 195-221, DOI: 10.1080/23737867.2018.1509026

[<< 前回の記事](https://qiita.com/ShozenD/items/a1ef703d99e823868ba8)
EC2のMemoryに関するメトリクスを取得する

# 概要
EC2ではCPUやNetwork利用状況などのメトリクスはデフォルトで取得されており、グラフでも確認可能な状態になっていますが、Memoryに関しては取得されていません。
セットアップすれば取得できるようになるため、本手順ではそのセットアップ手順を記載します。

# 環境
次のOSにて手順を確認しています。
* Amazon Linux 2023
* Ubuntu 24.04

# 前提条件
`CloudWatchAgentServerPolicy`というIAMポリシーを持つIAMロールを、EC2にアタッチ済みであること。
手順は[こちら](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html#create-iam-roles-for-cloudwatch-agent-roles)が参考になると思います。


# 手順
## CloudWatchAgentインストール
Memory利用状況をCloudWatchにて取得するためには、`CloudWatchAgent`が必要になるため、そのインストールを行います。
### Amazon Linux 2023の場合

```
$ sudo yum install amazon-cloudwatch-agent
```

### Ubuntu の場合
```
$ curl -LO https://amazoncloudwatch-agent.s3.amazonaws.com/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
```
```
$ sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
```

## CloudWatchAgent設定＆起動

CloudWatchAgentの設定を行います。
```
sudo vi /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
```
ファイルに記載するサンプルが下記になります。
ここではMemory利用量とMemory利用率を取得しています。
その他にも様々なメトリクスが取得でき、その一覧は[こちら](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html)を参照下さい。

```amazon-cloudwatch-agent.json
{
  "agent": {
    "metrics_collection_interval": 60,
    "run_as_user": "root"
  },
  "metrics": {
    "metrics_collected": {
      "mem": {
        "measurement": [
          "mem_used",
          "mem_used_percent"
        ]
      }
    },
    "append_dimensions": {
      "InstanceId": "${aws:InstanceId}"
    }
  }
}
```

CloudWatchAgentを起動します。
```
$ sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json -s
```

起動確認
```
$ sudo systemctl status amazon-cloudwatch-agent
```

対象のEC2インスタンス画面にて、Memory利用量と利用率のグラフが表示され、メトリクスが取得できていることを確認できたら、作業は完了です。

# 参考
https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-commandline-fleet.html

https://zenn.dev/koheii/articles/49a416640bc7d5

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html

https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/create-iam-roles-for-cloudwatch-agent.html#create-iam-roles-for-cloudwatch-agent-roles
強化学習の概要

# 強化学習
今回は強化学習について初心者向けにまとめてこうと思います。

データサイエンスに興味がある方であれば「強化学習」というキーワードを耳にすることが多いと思います。しかし他に「機械学習」や「深層学習」というキーワードなどもあり、どのように整理すればいいか悩むこともあるのではないでしょうか。

# キーワードの整理
最初に機械学習という大きな枠があります。その中身は、「教師あり学習」、「教師なし学習」そして「強化学習」という３つに分けることができます。残った「深層学習」はというと、より精度の高いモデルを探す手法でありこれ自体が１つの領域ではありません。「１回の計算だけではモデルの精度がイマイチだから膨大な層にかけて何度も計算しよう」というときに深層学習という言葉が登場します。

# 強化学習とは
強化学習の目的は最適な意思決定のルールを求めることです。
登場するキーワードは「エージェント」、「環境」、「行動」、「報酬」と「状態」です。「エージェント」すなわちコンピューターが「状態」の良し悪しを評価します。その評価のもと「行動」によって「環境」に変化を起こします。そのフィードバックとして「エージェント」は「報酬」を受け取ります。設定されたスタートからゴールまでそのサイクルを繰り返し、最も報酬が多く得られる意思決定のルール（行動基準や価値観と言い換えられます）を探す。このような学習を強化学習といいます。

スーパーマリオブラザーズで例えれば、「エージェント」はマリオであり「状態」はそのステージでどこにいるかです。「報酬」はコインやタイムといったところです。

興味のある方はこちらのPytorchのページを覗いてみると面白いでしょう。
https://pytorch.org/tutorials/intermediate/mario_rl_tutorial.html
【MySQL設計】ユーザーごとにデータベースを作るとどうなる？

### **背景**  
最近、新しいプロジェクトのDB設計をしていて、ユーザーごとのデータ構造がちょっと複雑だと感じた。そこで、**「登録したユーザーごとにDBを分ければ管理しやすくなるかも？」** という考えが浮かんだ。  

例えば、  
- `db_company1`  
- `db_company2`  
- `db_company3`  
のように会社ごとにデータベースを作成し、その中に大量のテーブルを入れるイメージ。  

**メリット** は、データが会社ごとに分離されることで管理がしやすくなること。  

**実現性** についても、  
- `SHOW VARIABLES LIKE 'innodb_buffer_pool_size';` で確認したら、バッファプールサイズは **9.7GB** あった。  
- `SHOW STATUS LIKE 'Threads_connected';` で確認すると、現在のアクティブな接続数は **23** で、  
  - 1接続あたり **約512KB** のメモリを使うため、**23 × 512KB ≈ 11.5MB** のメモリ使用量になる。  
- つまり、現状のリソースには十分余裕がある。  

---

### **それでもDBを分けない理由**  
余裕があっても、**ユーザーごとにDBを分けると、むしろ使いにくくなる**。  

1. **コネクションプールが効かない**  
   - MySQLのコネクションプールは **同じDBへの接続を再利用** する仕組み。  
   - でも、**会社ごとにDBを分けると、接続のたびに新しいコネクションを作る必要がある**。  
   - 会社の数が増えると **接続のオーバーヘッドが増え、最終的にDBの接続上限に達する** 可能性がある。  

2. **スキーマ変更が面倒**  
   - 例えば、「テーブルに新しいカラムを追加したい」となったら、**全データベースに変更を適用しないといけない**。  
   - DBが増えるほど管理が大変になり、ミスもしやすい。  

3. **キャッシュの効率が落ちる**  
   - MySQLは、データやインデックスを **InnoDBバッファプール（メモリ）** にキャッシュして、クエリを高速化する。  
   - でも、DBを分けると、**キャッシュが分散** されてしまい、**キャッシュヒット率が下がる**。  
   - その結果、**ディスクI/Oが増えて、逆に遅くなる** 可能性がある。  

---

### **結論**  
DBを分けると管理が楽になりそうに見えるけど、実際には パフォーマンスが落ち、運用も大変になる。  会社ごとにDBを作るより、1つのDBに テーブルを追加して管理する方が現実的かな。
データセットを作成する①　（続：NetSuiteでピボットテーブルを作ってみる）

[NetSuiteでピボットテーブルを作ってみる](https://qiita.com/NaotoKashimura/items/6fc470e28f87a3b61aa3)　という記事で <b>SuiteAnalytics Workbook</b> を簡単に紹介しましたが、作り方をもう少し詳しく保存検索との違いも含めて紹介したいと思います。

https://qiita.com/NaotoKashimura/items/6fc470e28f87a3b61aa3

## レコードを選択する
ここは保存検索などと同じ考え方です。
表示したいレコードの種類を選択します。
　売上や仕入のデータを集計したい場合　⇒　トランザクション
　マスタデータを表示したい場合　⇒　アイテムや顧客
 ![rapture_20250204100945.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/22d4e5a9-0261-6963-ae2d-4dc86c1fea0c.jpeg)

## 表示したい項目を選択する
トランザクションのデータセット画面です。
![rapture_20250204133922.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/33cb36d9-6f64-ef92-39dc-87233772fe5e.jpeg)
左側で項目の種類を選択し、中央で表示させる項目を選択します。
項目の種類ですが、
　トランザクション　⇒　入力画面のヘッダ部（上部分）の項目　保存検索だとメイン・ラインで表示される部分
　トランザクション・ライン　⇒　入力画面の明細部（アイテム行）の項目
　トランザクションの会計ライン　⇒　仕訳に関連する項目　勘定科目や貸借の金額はここにあります

下にスクロールすると、エンティティやアイテムなどが選択可能です。
![rapture_20250204135500.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/fca6704b-4344-753e-a16c-fe1fe1a51242.jpeg)
これは保存検索でいうところの「○○フィールド（顧客フィールドなど）」です。　※SQLのマスタ結合です。

:::note info
保存検索との違い
保存検索は○○フィールドと１階層のみ参照可能でしたが、SuiteAnalytics Workbookでは複数段階での参照が可能です。
例：エンティティ 顧客　⇒　営業担当者　⇒　役職
（営業担当者の従業員マスタの役職を表示することも可能）
:::

## さいごに
今回はここまで。
次回はデータセットの作成方法の続きを説明します。
チャットコミュニケーションが苦手な人は"雛形"を作れ

# 概要
僕が普段の業務で意識しているチャットコミュニケーションの Tips を紹介します。

# 背景
僕の現場では「チャットコミュニケーションが苦手」という方が多くいます。

文章例でいうと、こんな感じ。

```text
A機能でバグが起きています。
このバグはこの手順で発生します。
恐らく XX が理由で起きていると思います。
このバグについて相談させてください。
```

報告なのか相談なのかパッと分かりませんし、相談したい具体内容も分かりませんよね。

そんな方々にいつもお勧めしている僕の㊙雛形があるので、今回はそれをご紹介します。

# 雛形
僕が使用している雛形は以下になります。
ケースバイケースで【】の内容は変更したりしますが、基本的にはこの形でチャットをしています。

```text
hoge について [共有／報告／確認／相談／質問] になります。

【前提】
前提があれば記載する。

【共有／報告／相談／質問】
チャットしたい内容を記載する。
相談や質問の場合は極力「Yes or No」で回答できる内容にする。

【背景／理由】
背景や理由があれば記載する。

【補足】
補足する内容があれば記載する。
例えば、相談や質問の場合の推測だったり参考資料を記載したり。
```

# 使用例
### 報告

```text
A案件のリリースについて報告になります。

【報告】
A案件は 2025/1/1 にリリースすることになりました。

【補足】
リリース日の調整は以下でお客様に確認しています。
${会話したチャットのリンク}
```

### 相談

```text
A機能のスケジュールについて相談になります。

【前提】
現状のスケジュールは 2025/1/1 が締め切りです。

【相談】
スケジュールの締め切りを 2025/2/1 に延期して良いでしょうか。

【理由】
A機能の仕様変更が発生したため、追加工数が必要になります。
追加工数は一か月ほど掛かる見込みです。
```

# 終わりに
文章を雛形化すると言語化もスムーズになります。
また、`【前提】` のように記載すると視覚的にも内容の区切りが分かりやすいです。

ぜひ自分に合った雛形を作成して良いチャットコミュニケーションライフをお過ごしください！

今回も見ていただきありがとうございました👌

# 初心者向けのサポートをやってます！
MENTA にて HTML/CSS、JavaScript のサポートを行っております。
このソースが上手く動かない、この記事の内容が良く分からないなど何でも良いのでお気軽にご相談ください！
詳細は下記ページよりご参照ください。

https://menta.work/plan/16027?ref=mentor_profile
vbsの作法 その95

# 概要
vbsの作法、調べてみた。
ヤフオクで、もうIE11は、使えないらしい。
対応する。

# 今までのコード

```
Private Sub CommandButton27_Click()
    Dim objIE
    Dim strBody
    Set objIE = CreateObject("InternetExplorer.Application")
    objIE.Width = 1000
    objIE.Height = 800
    objIE.Left = 0
    objIE.Top = 0
    objIE.Visible = True
    objIE.Navigate TextBox9.Text
    Set objIE = Nothing
End Sub

```

# 写真

![スクリーンショット 2025-02-04 133637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/8615cbad-ebc7-232c-9d47-3eb172006eb6.png)

# 対応したコード

```
Private Sub CommandButton27_Click()
    With CreateObject("Shell.Application")
        .ShellExecute "microsoft-edge:" + TextBox9.Text
    End With
End Sub

```


以上。
CristalとDeep researchのAIエージェントが描く新たなビジョン

# はじめに
　出ましたね。年間4500億円。
　ソフトバンクグループとOpenAIのニュースみんなさんも見ていると思いますが、話題になっているCristal（クリスタル）について、その背景にある具体的なイメージ、直面する課題、そして未来の可能性についてまとめてみる。

# そもそもCristalとは？
　2022年11月にChatGPTが登場して以来、急速な進化で、人類のパブリックな情報やデータをほぼ全部飲み込みました。
 
　これから企業に対して、AIの活用に向けて、ERPやCRMといった従来システムを超え、企業内の各種リソースを最適に連携・整合させることで、AIの推論能力を使って、経営改善を目指す新たなソリューション。
![l_ts1648348_202502033_2_w490.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727548/ade3d241-9c67-de27-d923-1a5bab7fa3a6.jpeg)
　応用例としては、従業員同士で交わされるメールや、プロジェクトに関する資料、会議記録などをすべてCristalで取り込む。たとえ担当者が退職した場合でも、企業の知識が引き継がれ、途切れない「長期記憶」を実現できる。

 
　一方で、Deep researchのAIエージェントは、従来の単純なタスク自動化を超え、複雑な調査レポートの自動生成や高度なデータ分析を実現できる。
 
# 現実に直面する課題

## インフラ面
　Deep researchを実際に使ってみたら、応答速度について、もう少し成長する余地があると感じました。
　大量のデータに基づいて、詳細な分析レポートの作成においては、応答に1時間以上かかりました。
 
 　応答速度を上げるため、データセンタや電力面のような、インフラ面をどう解決していくのかはポイントだと思います。

## セキュリティ面
　インフラ面とも繋がっていますが、企業固有の機密情報や個人情報を取り扱う上で、データ漏洩や不正アクセスのリスクを、どう削減できるかも気になりますね。


## 未来の可能性
　もしソフトバンクグループがCristalを導入成功するとして、将来的に大手企業やソフトバンクのような先進企業での導入が進むと予想できるだと思います。
 
　ただ、費用面として、年間4500億円は中小企業に対して、厳しい部分があると思いますそれから中小企業向けの製品とソリューションも継続出てくるでしょう。
 ![l_ts1648348_202502033_3_w490.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2727548/d63c62e8-b998-89e2-242c-3f2d051d8309.jpeg)

　一方、実際にどの程度の効果をもたらすか現在見えていない部分が多いので、メリデメをもっと精査したいですね。

## 終わりに
　2025年は、AIエージェント元年と呼ばれているですが、これからも更に盛り上がっていくではないでしょうか。AIを活用した企業改革の可能性や現実の課題解決について、すごく興味深いです。

　面白い発想や活用例がありましたら、コメントを待ちしております！
SQL Server を活用するための新人教育ロードマップ



弊社では SQL Server を使用しており、今後のアプリケーション開発でデータベースに抵抗なく扱えるようにするために、新人向けの教育内容とロードマップを整理しました。

## 1. 基本知識の習得
### 🎯 目標
- データベースの基礎概念を理解し、SQL の基本的な操作を習得する

### 📌 内容
#### ✅ リレーショナルデータベースの概念
- RDBMS とは何か（テーブル、レコード、カラム）
- 主キー、外部キー、正規化の概念（第3正規形まで）
- インデックスの基本（クラスタ化インデックス・非クラスタ化インデックス）

#### ✅ SQL の基本
- `SELECT`, `INSERT`, `UPDATE`, `DELETE` の基本構文
- `WHERE`, `ORDER BY`, `GROUP BY`, `HAVING` の使用方法
- `JOIN`（INNER, LEFT, RIGHT, FULL）によるデータ結合
- サブクエリ・派生テーブルの活用
- 集合演算（`UNION`, `INTERSECT`, `EXCEPT`）

#### ✅ SQL Server の基礎
- SQL Server Management Studio (SSMS) の使い方
- データベースの作成・削除・バックアップ・リストア
- データ型の選択（`INT`, `VARCHAR`, `NVARCHAR`, `DATETIME`, `DECIMAL` など）

---

## 2. 実務で必要なスキルの習得
### 🎯 目標
- SQL Server のアプリケーション開発に必要なスキルを習得する

### 📌 内容
#### ✅ ストアドプロシージャ・トリガー
- `CREATE PROCEDURE` によるストアドプロシージャ作成
- 入出力パラメータの利用
- トランザクション制御（`BEGIN TRAN`, `COMMIT`, `ROLLBACK`）
- エラーハンドリング（`TRY...CATCH`）
- トリガー（`AFTER`, `INSTEAD OF`）

#### ✅ パフォーマンスチューニング
- 実行計画の確認（`EXPLAIN`, `SHOWPLAN`）
- インデックスの最適化（カバリングインデックス、フィルター付きインデックス）
- クエリの最適化（不要な `SELECT *` を避ける、適切な `JOIN` の選択）
- デッドロック・ロックの対策（`NOLOCK`, `WITH (ROWLOCK)`, `READ COMMITTED SNAPSHOT`）

#### ✅ アプリケーション開発との連携
- VB.NET や C# から SQL Server にアクセス（`SqlConnection`, `SqlCommand`）
- LINQ や ORM（Entity Framework / Dapper）を活用したデータ操作
- 非同期処理（`async/await` を用いたデータベース操作）

#### ✅ 権限管理・セキュリティ
- ユーザー・ロール管理（`GRANT`, `REVOKE`）
- SQL インジェクション対策（パラメータ化クエリの利用）
- 暗号化（`Always Encrypted`, `TDE`）

---

## 3. 実践演習・プロジェクト経験
### 🎯 目標
- 実際に開発環境で SQL Server を活用できるようにする

### 📌 内容
#### ✅ SQL の実践演習
- サンプルデータベース（`AdventureWorks`, `Northwind` など）を使ったクエリ練習
- パフォーマンスを意識した SQL の改善演習
- バッチ処理（大量データの更新・削除）

#### ✅ ミニプロジェクト
- 小規模なデータベース設計と CRUD 操作を行うアプリの開発
- 実際の業務データを模したテーブル設計と最適なインデックス作成

#### ✅ レビューとフィードバック
- SQL のレビューを行い、パフォーマンス改善や可読性向上を図る
- 実際の業務に即したデータベース設計のレビュー

---

## 4. ロードマップ（6週想定(目安)）
| 期間 | 内容 |
|---|---|
| **1週目** | RDB の基礎・SQL の基本 |
| **2週目** | SQL Server の基礎操作・テーブル設計 |
| **3週目** | ストアドプロシージャ・トリガー・トランザクション |
| **4週目** | パフォーマンスチューニング・クエリ最適化 |
| **5週目** | アプリとの連携・セキュリティ |
| **6週目** | 実践演習・ミニプロジェクト・レビュー |

---

このロードマップに沿って教育を進めることで、新人が SQL Server に対する抵抗をなくし、実務で活かせるスキルを身につけることができます。
【🔰初心者】RSS管理難民がFeedlyを使ってみた

## こんなあなたに
- 筆者と同じ苦しみを味わっているあなた
- SaaSオタクなあなた
- え？私ですか？？？

## Feedlyとは？
https://feedly.com/

> Feedly - これは広く知られた名刀とも言えましょう。

by Claudeさん
※ これではわかりませんね ※

「IFTTTのようなもの」 ★ざっくり_____！

## なんでFeedlyを使ってみたの？
Outlookに色々RSSをまとめすぎて気が散る！！！
だけど推し(弊社❤御社❤)のRSSは追いかけたい。
→ Claudeさんとの談合結果、試してみました。

## 使ってみてどうだった？
なんでもっと早く使わなかったんですか… 感涙

## 最後に
個人の見解ですが、
一機能一画面。一本集中が性にあうと思いましたとさ。
Windows11で勝手に追加されるen-USキーボードを自動削除

# 背景
Windows11でGoogle日本語入力を使っているのですが、しばらく使っていると勝手にen-USキーボードが追加・適用されて、キーボード配列が変わってしまうのです。

これが起きないようにする手法はわからなかったのですが、PowerShellで削除するコマンドがわかったので、対症療法ですが載せておきます。
起きないようにする方法をご存じの方はぜひとも教えてください。

危険なやり方かもしれないので、使う方は自己責任で。
やりたい方は定期実行など好きに使ってください。

# コマンド

[このドキュメント](https://learn.microsoft.com/ja-jp/powershell/module/international/get-winuserlanguagelist?view=windowsserver2022-ps)とかを参考にしてください。

```powershell:Remove-KeyboardExceptJa.ps1
# 一時的に英語を追加
$langlist = Get-WinUserLanguageList
$langlist.Add("en-US")
Set-WinUserLanguageList $langlist -Force

# そして再び英語を削除
$langlist = Get-WinUserLanguageList
$langlist = $langlist | Where-Object LanguageTag -ne 'en-US'
Set-WinUserLanguageList $langlist -Force
```
【勉強記録】Code Spell Checkerを導入してみた

# はじめに
こんにちは。アメリカで独学でエンジニアを目指している者です。
この記事を読んでいる皆さまの中に、エラーが発生して30分くらい格闘してその原因がタイポだった何てこと今までに一回は経験したことあるのではないでしょうか。
そこで今回は、VScodeの拡張機能である code spell checkerについて紹介していきたいと思います

## VSCodeのCode Spell Checker拡張機能とは

コードを書くときに気になるのがスペルミスや誤字脱字。VSCodeにはさまざまな拡張機能がありますが、その中でも手軽に導入できて効果的なのが**Code Spell Checker**です。Code Spell Checkerは、名前の通りプログラミング中のスペルミスや単語の誤りを検知し、ハイライトして指摘してくれる拡張機能です。

### Code Spell Checkerの主な特徴

1. **プログラミング言語のキーワードに干渉しない**
    - 一般的なスペルチェッカーとは異なり、プログラミング言語特有の単語や関数名を柔軟に扱います。誤判定が少ないのが強みです。

2. **ハイライト表示で簡単に誤字を発見**
    - ミスがある単語は波線などで強調表示されるため、一目で誤字を検知できます。

3. **辞書の拡張が可能**
    - しばしば使う専門用語やカスタムワードは、ユーザー辞書に追加して誤判定を防げます。例えばプロジェクト名や命名規則にも対応しやすいです。

4. **複数言語のサポート**
    - 英語だけでなく、複数の言語辞書を導入可能。国際化されたドキュメントを扱う際に便利です。

---

### インストール方法

1. VSCodeを起動し、左のサイドバーから拡張機能パネル（Extensions）をクリックします。
2. 検索バーで`Code Spell Checker`と入力して拡張機能を検索します。
3. `Code Spell Checker (by Street Side Software)`が表示されたら「Install」ボタンをクリックします。
4. インストール完了後、VSCodeを再起動するか、もしくはタブを閉じて再度開くと拡張機能が有効になります。

---

### 使い方の基本

1. **コードを書くと自動でチェック**
    - インストール後は、コーディングをするだけで誤字をハイライトしてくれます。

2. **誤検知を除外する**
    - 特定の単語に波線が表示されてしまう場合は、`Add Word to Settings`などのアクションから辞書に登録し、次回以降は誤判定されないように設定できます。

3. **設定ファイルでの管理**
    - `.vscode/settings.json`やVSCodeのSettingsで拡張機能ごとの設定をカスタマイズできます。英語以外の辞書を追加したい場合や、プロジェクトごとに単語を登録したい場合に便利です。

4. **ショートカットでの修正**
    - ミスが指摘された単語上で`Ctrlと.`（Macの場合は`Cmdと.`）を押すことで、修正候補や辞書への登録をおこなえます。

なお、3.4について詳しく書いてある記事を見つけたので、具体的な保存方法は以下をご確認ください

https://soligma.com/blog/code-spell-cheker-custom/

---

### 使ってみての感想
ここからは実際にCode Spell Checkerを使ってみて気づいたことをまとめてみました

* **英語だけしかチェックされない**
spellと書いてあるから当たり前だろと思うかもしれませんが、Qiitaで記事を書いているときふと気づいたことです。余談ですがQiitaという文字は誤字判定されます。

* **プログラミング以外にも英語を書く際にも使用できる**
これは私が英語の記事を投稿しているのにも起因しますが、英語を書くことでスペルチェックしてくれるのはありがたいです。

* **ターミナルにspell checkerという欄がありそこでスペルミスだと思われる言葉が確認できる**
この拡張機能はタイポした時点でその間違いだと思われる単語に青い波下線が引かれるのですが色だけでは視覚的に見落とすことも。
ですが、これを使用すれば一覧で見れるので見落とすリスクをかなり下げることができて便利だと感じました

---

### まとめ

VSCodeのCode Spell Checkerは、誤字脱字を素早く発見できる便利な拡張機能です。
ログラミングでの誤字はバグや可読性低下の原因になることも多く、普段から気をつけていても意外と見落としがちです。
Code Spell Checkerを活用すれば、開発効率を維持しながらコードの品質を向上させられます。

ちなみにこの機能を知ったのは以下の記事を読んででした。ほかにもツールが36個もあるようなので使いたいものがあればぜひ使ってみてください

https://zenn.dev/shiba_program/articles/82a40f9d046b45
【Ruby】可変長引数と可変長キーワード引数

Railsの`ActiveRecord::QueryMethods#includes`メソッドがどのような引数を受け取るか調査しました。以下のコードで確認できるように、このメソッドは3種類の引数を受け付けます。

```ruby
ExampleModel.method(:includes).parameters
=> [[:rest, :*], [:keyrest, :**], [:block, :&]]
```

メソッドが受け付ける引数は以下です。
- 可変長引数
- 可変長キーワード引数
- ブロック

Rubyの仕様として、これらの引数は以下の順序で指定する必要があります.

1. 可変長引数を指定
2. 可変長キーワード引数を指定

以下は誤った例で、この順序に違反するとエラーとなります。

```ruby
includes(key1: :value1, key2: value2, :value3)
# SyntaxError: ordinary parameter is defined after rest parameter
```
[漫画でわかる]AWS Bedrockで画像生成AIを使ってみよう！

![qiita-manga-01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/c5341f3c-8ba5-41a1-1ce2-856674416425.jpeg)

![qiita-manga-02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/4883e6a8-5f42-1751-7c1a-3b320cf50728.jpeg)


# はじめに

お絵描きAIはMidjourneyをはじめ高額なサブスクが多い。
都度料金&低価格で画像生成AIを利用できるAmazonのBedrockを使ってみよう！

# 前提

AWSのアカウントを持っていること。

# 料金
0.0何ドルとかですが、一応改訂の可能性があるので公式を参照してください。

https://aws.amazon.com/jp/bedrock/pricing/

### Bedrockを検索
AWSコンソールにログインしたら、検索窓で「Bedrock」を検索する
![BedRock-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/329d0297-c366-175d-8065-30e70332588d.png)

### リージョンをバージニア北部(us-east-1)に
![BedRock-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/ccefb88d-1ab2-d917-a235-d425da306cb4.png)

![BedRock-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/4f21c7e1-341b-2e2f-6e3f-9e26e3a561b3.png)

### 左側のメニューからImage / Video をクリック
![BedRock-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/c770ca0b-36ad-4cc4-d3c1-ea0b718c20f2.png)

### モデルを選択
「モデルを選択」ボタンをクリックだ。
![BedRock-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/6ebd24f5-1a4c-005c-8fd6-5afb74157c84.png)

### 任意のモデル(今回はStableDiffusion SDXL を選択)
![BedRock-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/96625202-8a7c-fc4b-9132-f115b24b5791.png)


### 生成画面から画像を生成
「実行」ボタンで実行できるぞ！
![BedRock-10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/2321b6f9-2a7a-b3a3-a92f-011a92fffbc7.png)

今回は
ネガティブ・プロンプト(出てきてほしくない絵の指示)を
「illustration, low-quality」
プロンプト(出てきて欲しい絵の指示)を
「an apple, realistic photograph, masterpiece」とした。

設定が終わったら「実行」ボタンを押す。
![スクリーンショット 2025-02-04 12.24.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/dd90f727-cb2b-cd16-2b6b-3957499d6f1a.png)

### 実行完了
![スクリーンショット 2025-02-04 12.26.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/4643f81f-abd6-a8eb-6a53-900a3a033ce3.png)

## Titan Image Generator
AWSの独自モデル Titan Image Generatorも非常にハイクオリティなのでおすすめ！

![スクリーンショット 2025-02-04 12.31.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/5409fc8a-eb35-e90c-5692-35f6933ede51.png)

![スクリーンショット 2025-02-04 12.30.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/5224a6d9-696d-364a-f1a1-7ffd71656007.png)

![qiita-manga-03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3908981/3f3e23de-08b9-edd5-53ba-c69d6bc36492.jpeg)



## この記事を読んだ後におすすめの記事
ImageMagicを使って生成した画像をweb最適化してみよう

https://qiita.com/GeneLab_999/items/d44344018dd6e76a7740
ClineでShell Integration Unavailableの対処法

Clineを触ったときに、なんかエラーが出てエラー対処してくれないなーと思ってましたが、[公式ドキュメント](https://github.com/cline/cline/wiki/Troubleshooting-%E2%80%90-Shell-Integration-Unavailable)の対処をしても解決しなかったので解決策をここに残します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/341017/9af51f0d-3225-e801-3638-f6cdc4115eeb.png)

## 原因
[Still Having Trouble?](https://github.com/cline/cline/wiki/Troubleshooting-%E2%80%90-Shell-Integration-Unavailable#still-having-trouble)の項目において、ps1までのパスに2バイト文字が含まれていることが原因
`C:\Users\【ユーザ名】\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\contrib\terminal\common\scripts\shellIntegration.ps1`

## 対処策

短縮名を使って対策しました。

1. コマンドプロンプトを起動
1. コマンドプロンプトで`dir /x C:\Users` を実行し、該当のユーザ名の短縮名をメモる
e.g.)TAROU~1
1. コマンドプロンプトで`code $Profile`を実行する
1. 次のコードを貼り付けて保存する
```
if ($env:TERM_PROGRAM -eq "vscode") { 
    . "C:\Users\【短縮名】\AppData\Local\Programs\Microsoft VS Code\resources\app\out\vs\workbench\contrib\terminal\common\scripts\shellIntegration.ps1"
}
```

以上
会社のAD管理されてるPCだと二バイト文字の名前が入ってたりしますよね。
エンジニアではない人から見た一流エンジニアの性質


私はIT業界で働いていますが、エンジニアではありません。

:::note warn
エンジニアではない人間から一流エンジニアの話に価値があるのか。
:::
と思われる方もいらっしゃるでしょう。

しかし、数年間様々なエンジニアと協働し、彼らの仕事ぶりを間近で見てきた経験から、一つの確信があります。エンジニアではない私でも、「この人は信頼できる」「一緒に仕事がしたい」「新しいプロジェクトを任せたい」と感じさせてくれるエンジニアがいるのです。
プロジェクトオーナーやクライアントなど、技術部門以外の人々にもそのような印象を与えることができれば、自然と新しいプロジェクトの相談が持ち込まれ、仕事の幅が広がっていきます。

では、そんな一流エンジニアたちの共通点とは何でしょうか。

# システム構築へのパッション
以前の職場での出来事です。ある日、一人の上級エンジニアがコードレビューの際に部下に言った言葉が、今でも印象に残っています。

> **お前のコードにはシステム構築へのパッションが全く感じられない**

その上級エンジニアは、会社で最も高い評価を受けていた人物でした。自社プロダクトの開発では、現行システムに最適な実装方法を見出し、価値ある新機能を次々と提案していました。請負案件でも、単にクライアントの指示に従うのではなく、「より良い方法を一緒に考えましょう」という姿勢でクライアントと向き合い、上司からの信頼も厚く、クライアントからの指名も多かったです。

この「**システム構築へのパッション**」という言葉を聞いた時、なぜ彼が優秀な人材なのかわかりました。同じような技術力を持つエンジニアは他にもいましたが、彼ほど「一緒に仕事をしたい」と周囲に思わせる人はなかなかいませんでした。その違いは、まさにこの「**パッション**」にあったのです。

# モノづくりへのパッション
私は子供の頃からレゴの組み立てが大好きでした。バラバラの小さなブロックから素晴らしいものを作り上げる喜び、完成品を見た時の感動、そしてもっと良いものを作りたいという思い。これは、システム構築と本質的に同じだと気づきました。
システム構築をレゴ作りに例えると：
* レゴ作り = システム構築
* レゴブロック = 技術的知識
* 組み立てスキル = プログラミングスキル
* レゴの作品 = ビジネスソリューション

熱心なレゴ好きが持つ以下の特徴は、一流のエンジニアの姿勢とぴったり重なります：
* 新しいパーツや組み立て方を常に学び続ける
* より良い作品を作るために試行錯誤を重ねる
* 完成品に強い誇りを持ち、モチベーションが高い
* 人の心を引くものを作るため、使う人の好みや文化を理解しようとする

実際の現場で、パッションの有無は次のような違いとなっています：

## 問題解決へのアプローチ
### 一般的なエンジニア
与えられた要件通りに実装することに注力する
### パッションを持つエンジニア
* より効率的な解決方法を常に模索する
* クライアントの本質的なニーズを理解しようとする
* 必要に応じて代替案を提案する

## 技術習得への姿勢
### 一般的なエンジニア
必要に迫られた時のみ、新しい技術を学習する

### パッションを持つエンジニア
* 技術トレンドを常にウォッチしている
* 休日も技術書を読んだり、個人プロジェクトに取り組んだりする
* 学んだことを積極的にチームと共有する

### 市場・人間理解への姿勢
### 一般的なエンジニア


技術的な実装に焦点を当てる
与えられた仕様通りに作ることを重視する

### パッションを持つエンジニア
* ユーザーのニーズを深く理解しようとする
* 市場トレンドや競合製品の分析も行う
* 技術がどう人の役に立つかを常に考える

# 最後に
コーディングは単なるコード作成ではありません。
エンジニアの皆さんは素晴らしいものを生み出すクリエイターです。日々の仕事を「コードを書く作業」として見るのではなく、「モノづくり」として捉え直してみませんか。

自分の興味と合わない案件に携わっている方もいるでしょう。そんな時は、サイドプロジェクトを始めてみるのもいいかもしれません。技術力の向上だけでなく、モノづくりの情熱を保つ良い機会となります。実際、グーグルメールやフェースブックなど、世界を変えるサービスの中には、サイドプロジェクトから始まったものも少なくありません。

これは当たり前のことかもしれませんが、日々の業務に追われて、このパッションを見失っているエンジニアの方も多いのではないでしょうか。
時には立ち止まってこう考えてみてください。あなたの持つコーディングスキルは、人の役に立つ作品を生み出すための創造の力なのです。眠っているあなたのパッションを、もう一度呼び覚ましてみましょう。
SQLのパフォーマンスを知る

# はじめに
この記事は、SQLのパフォーマンスに関するお話です。

# 事前準備
以下のテーブルを準備します。

```sql:DDL
create table if not exists public.users
(
    id                 integer                                            not null primary key,
    login_id           varchar(50)                                        not null,
    name               varchar(255)                                       not null,
    branch_id          integer                                            not null,
    created_at         timestamp                                          not null
);


create table if not exists public.branches
(
    id                 integer                                            not null primary key,
    name               varchar(255)                                       not null,
    created_at         timestamp                                          not null
);

```

■ユーザーテーブル（users）
|ID（id）|ログインID（login_id）|名前（name）|支店ID（branch_id）|登録日時（created_at）|
|---|---|---|---|---|
|1|user1|ユーザー1|1|2025-02-04T12:00:00|
|2|user2|ユーザー2|1|2025-02-04T13:00:00|
|3|user3|ユーザー3|2|2025-02-04T14:00:00|

■支店テーブル（branches）
|ID(id)|名前（name）|登録日時（created_at）|
|---|---|---|
|1|fugafuga支店|2025-02-04T12:00:00|
|2|hogehoge支店|2025-02-04T13:00:00|

# 検証内容

fugafuga支店のユーザーを検索する。


## サンプル1（一般的なSQL）

```sql:一般的なSQL
SELECT
    users.*
FROM users
INNER JOIN branches ON
    branches.id = users.branch_id
WHERE
    branches.name = 'fugafuga支店';
```

## サンプル2（JOIN条件で絞り込むSQL）

```sql:JOIN条件に変更したSQL
SELECT
    users.*
FROM users
INNER JOIN branches ON
        branches.id = users.branch_id
    AND branches.name = 'fugafuga支店';
```

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

■計算量(𝑂)
|クエリ|インデックスなし|インデックスあり|
|---|---|---|
|サンプル1|𝑂(n x m)|𝑂(n)|
|サンプル2|𝑂(n x m)|𝑂(n)(より速い)|

ポイント:
インデックスがない場合: 両方のクエリは同じ計算量です 𝑂(𝑛 × 𝑚)
インデックスがある場合: サンプル2のクエリの方が速くなります。

理由:
JOINの段階で「branches.name = 'fugafuga支店'」の条件が適用されるため、無駄なループが減ります。
一方、サンプル1では、まず全ての「users」と「branches」を結合し、その後に「WHERE」で絞り込むため、より遅くなります。

# 考察

|クエリ|処理のタイミング|パフォーマンス|
|---|---|---|
|サンプル1|結合後に「branches.name = 'fugafuga支店'」を適用|結合後にフィルタリング (遅い)|
|サンプル2|JOINの段階で「branches.name = 'fugafuga支店'」を適用|JOINの段階で絞り込み(より速い)|


推奨:
- 大規模なデータセットの場合、サンプル2を使用する方が「パフォーマンス」が良いです
- 特に、branches.id と branches.name にインデックスがある場合、サンプル2は「大幅に高速化」されます
パソコン解説　BSOD・BlueScreenとは？

BSODとは、Windows内での致命的なエラーを検知した際にパソコンが強制終了する仕組みです。

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-checks--blue-screens-

動作に必要なプロセスが死亡する、動作に必要なファイルが書き換えられるメモリーリークが発生する。

などの致命的な動作を検知します。
コード一覧

https://learn.microsoft.com/en-us/windows-hardware/drivers/debugger/bug-check-code-reference2
[JavaScript] JSONエディタを作ってみた

デバッグ機能の一環でオブジェクトビュアを作ってみたところ、
想像以上にイケてそな操作感だったので
急遽エディット機能を突っ込んで[JSONエディタ](https://yges.work/misc/objview.html)にしてみた。

ページ丸ごと保存しとけばローカルでも動作しますが、
クリップボードが封じられるので、必要であれば各自でバックエンドを用意な感じで。

なお、保存をJSONで行う関係上、undefined,Infinity,NaNが
含まれていると正常動作しません。

# 使い方

## ツールバーボタン

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/075c5556-93fc-947c-790b-d1321522f03e.png)

### Reset

確認ダイアログが出てくるので

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/d4a5ea17-0204-2a20-c1d6-e94bb717a6d0.png)

- Prop (辞書形式)
- Array (配列形式)

のどちらかを選んで Execute ボタンで初期化します。

### Save

全体をJSONにしてローカルファイルに保存します。

### Load

ローカルファイルのJSONを読み込んで適用します。

## 構造操作

左クリックで選んだ枠が編集対象となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/7974befd-0ba9-c501-76fc-bc9879b6e346.png)　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/4c2d2678-c6ee-c6bf-7c8d-dfe24db3ac0a.png)　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/5eef525e-1d5c-410c-1f54-5820cf490acf.png)

右クリックでポップアップメニューが出てきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/3b24e18b-25f1-c9ee-2ddc-06e3477fb6f1.png)

### Copy

対象をJSONにしてクリップボードにコピーします。  
(ローカルファイルのHTMLでは不可)  

### Extract

対象をローカルのJSONファイルに書き出します。  

### Edit

対象を編集します。  
キー名が対象に含まれるときはキー名の編集になります。  
辞書や配列が対象のときはJSONでの編集になります。  

### Insert

親構造が配列のときのみ有効で、対象の1つ手前に別の値を追加します。    

### Remove

対象を削除します。  
(最上位の構造は不可、代わりに Reset で)  

### Append

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/53f4fe73-c511-c2a3-c898-b4a63ba60730.png)

対象が配列のときのみポップアップに含まれます。  
この配列最後尾に値を追加します。  

### Register

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/79eb4e41-55d1-3daa-dc7d-bf561093863e.png)

対象が辞書のときのみポップアップに含まれます。  
この辞書にキーを追加します。  

### Reset

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/ac0fb964-867a-dbac-eadb-5317229145c4.png)

対象が最外周枠のときのみポップアップに含まれます。  
機能はツールバーのResetと同じです。  
(名残)  

## 編集操作

型を選んで、文字列で内容を書き換えて Apply ボタンで反映されます。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/81979b80-4145-423a-e8f7-54ba5cdbe274.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/761337/ecf6a243-520a-61ec-9e0f-e27abbf12ba4.png)

型を text にすると改行が使えます。  

# めでたし、めでたし

これでもう、手動でJSON書いてうっかりケツカンマ残して事故ることもないですね。
サーバーでの作業に役立つ、主要なOSについて



## **🔹 サーバーOSの主要な種類**
サーバー用途では **Linux系とWindows系** が主流。AppleのmacOSはサーバー用途ではほぼ使われないが、開発環境では役立つ。

---

### **🟢 Linux系（サーバー用途の定番）**
**ほとんどのサーバーはLinuxを使う**。無料・軽量・柔軟・安定が強み。

#### **✅ Ubuntu Server**
- **特徴**: 初心者向け、公式サポート充実、広く使われている
- **用途**: Webサーバー、開発サーバー、小規模なシステム
- **パッケージ管理**: `apt` (`apt install zip` など)

#### **✅ Debian**
- **特徴**: 安定性が高い、Ubuntuのベース
- **用途**: 企業向けのサーバー、安定運用が求められる環境
- **パッケージ管理**: `apt` (`apt install zip`)

#### **✅ CentOS / Rocky Linux / AlmaLinux**
- **特徴**: RHEL（Red Hat Enterprise Linux）のクローン、エンタープライズ向け
- **用途**: 企業サーバー、大規模システム
- **パッケージ管理**: `yum` or `dnf` (`yum install zip` or `dnf install zip`)

#### **✅ Red Hat Enterprise Linux (RHEL)**
- **特徴**: 有料、サポートあり、大企業向け
- **用途**: 企業サーバー、ミッションクリティカルな環境
- **パッケージ管理**: `yum` or `dnf`

#### **✅ Amazon Linux**
- **特徴**: AWS用に最適化されたLinux、CentOSベース
- **用途**: AWS環境での運用
- **パッケージ管理**: `yum` or `dnf`

#### **✅ Arch Linux**
- **特徴**: 最小構成から構築、上級者向け
- **用途**: 自由度が求められるサーバー
- **パッケージ管理**: `pacman`

---

### **🔵 Windows系（GUIあり・特定用途向け）**
Linuxに比べると少数派だけど、Windowsならではの用途もある。

#### **✅ Windows Server**
- **特徴**: GUI操作ができる、Active Directory（AD）やIISが使える
- **用途**: 企業ネットワーク（AD管理）、Windowsアプリケーション（.NET系）サーバー
- **パッケージ管理**: `winget` or `choco`  
  例: `choco install zip`

---

### **🍏 macOS（開発向け・サーバー用途は少ない）**
AppleのOSは基本的に **開発環境向け** で、サーバーとしては使われない。

#### **✅ macOS**
- **特徴**: UNIXベースでターミナル操作が可能、開発環境に最適
- **用途**: ローカル開発環境（Docker、Node.js、PHP）、iOS/macOSアプリ開発
- **パッケージ管理**: `brew`
  例: `brew install zip`

---

## **🔹 サーバーOSの選び方（ざっくり）**
- **Webサーバー（Apache, Nginx, PHP, MySQL） → Linux系**
  - Ubuntu Server（初心者向け）
  - Debian（安定運用向け）
  - CentOS/Rocky Linux（企業向け）
- **AWS/GCPのクラウドサーバー → Amazon Linux or Ubuntu**
- **企業の社内サーバー → Windows Server**
  - Active Directory、Windowsアプリ（.NET）を動かすならWindows
- **開発用ローカルサーバー → macOS or Ubuntu**
  - macOS: iOS開発に最適
  - Ubuntu: オープンソース開発向け

---

## **🔹 OSごとのコマンド（共通操作）**
| 操作 | Linux (Ubuntu, Debian) | Linux (CentOS, RHEL) | Windows | macOS |
|------|------------------------|----------------------|---------|-------|
| パッケージ更新 | `apt update && apt upgrade` | `yum update` or `dnf update` | `winget upgrade --all` | `brew update && brew upgrade` |
| zipインストール | `apt install zip` | `yum install zip` or `dnf install zip` | `choco install zip` | `brew install zip` |
| ファイルリスト | `ls` | `ls` | `dir` | `ls` |
| ディレクトリ移動 | `cd /path` | `cd /path` | `cd \path` | `cd /path` |
| ファイル作成 | `touch file.txt` | `touch file.txt` | `echo. > file.txt` | `touch file.txt` |

---

### **📝 まとめ**
✅ **サーバー用ならLinux（Ubuntu, CentOS, RHELなど）**  
✅ **Windowsは企業ネットワークやWindowsアプリ向け**  
✅ **macOSは開発環境向け（サーバーには向かない）**  
✅ **zipのインストールはOSごとに違うので要確認**  

サーバーを使うなら **Linuxの基本操作は覚えておくと便利**！
センダストはモーターのローターにできる？

モーターに興味をもち調べていた。多様な用途に向けて多様なモーターがあるが、大型モーターでは同期リラクタンスモータというのが注目されているらしい

同期リラクタンスモータのローターには、透磁率が高く、電気抵抗が高く、磁歪、ヒステリシスのないものがいいらしい。そもそも、通常のPMモーターでも同期リラクタンス効果はかなり効いているとのこと

素人考えで調べているとFe-Si-Al合金のセンダストというのがいい,と書いてあるがそういうのでできたローターというのはないのかな？パーマロイは高いかもしれないが、センダストならどうなのかな、と思いました。珪素鉄をもっと最適化できないか？ということとおよそおなじかもしれないな
【Power Apps】初心者必見！アプリ内で役立つ変数の種類と使い方

# 概要
この記事では Power Apps でアプリを作成する際に使用する変数の種類と値の格納方法について説明します。

アプリ内で使用される変数は大きく分けて３つあります。
+ コンテキスト変数（ローカル変数）
+ グローバル変数
+ コレクション

それでは上記の変数およびコレクションについて順に説明をしていきます！

## 1\. コンテキスト変数 (ローカル変数)
コンテキスト変数は画面内でのみ使用できる変数です。
特定の画面内で設定したコンテキスト変数は他の画面では適用されません。

```ruby:使用方法
UpdateContext({ "変数名": "値" })
UpdateContext({ loc_Visible: true })
```

#### 使用例
+ ボタンを押した時の `OnSelect` で実行
+ 画面遷移時の `OnVisible` 内で設定

:::note warn
画面が遷移した場合、遷移先でコンテキストの値を使用しても反映されません。
:::

キャンバスアプリにボタンコントロールとテキストコントロールを設置してみます。
２つのボタンには以下の画像のように `OnSelect` にコンテキスト変数を宣言させています。

テキストコントロールの `Text` には宣言して変数名を入力します。
今回の場合は `loc_Context` を設定しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/08719c08-9b6d-9912-4f56-f5debf6414c6.png)

では、**はい** のボタンをクリックします。
loc_Context の値に "はい" が設定され、設置したテキストコントロールの値が変更されたのが分かります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/fa6bbe9f-03f5-271b-c376-e6ff5031b12f.png)


次に**いいえ**のボタンをクリックします。
loc_Context の値が "いいえ" に変更され、テキストコントロールの出力が変更されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/075854ef-6064-ff5c-1292-0f3f1d5d8eb5.png)



コンテキスト変数はこのように同一画面内でのみ何かしらの値やデータを保持させたい時に便利な変数です。


## 2\. グローバル変数
グローバル変数は、アプリ全体で共有できる変数です。
どの画面からでもアクセス可能で、画面が遷移しても値を保持し続けます。

```ruby:使用方法
Set("変数名","値")
UpdateContext( gbl_Visible , true )
```

#### 使用例
+ ボタンを押した時の `OnSelect` で実行
+ アプリ起動時の `OnStart` 内でユーザーのログイン情報などを保持させる

:::note warn
アプリ全体で共有できるのは便利ではありますが、あまりにも多用してしまうと管理が複雑になる可能性があります。
なるべく必要最小限で抑えましょう。
:::

## 3\. コレクション
コレクションはリスト形式でデータを保持します。
データテーブルの格納やリストアイテムを使う際に役立ちます。

```ruby:使用方法
ClearCollect("コレクション名",
   { ID: 1, Name: "太郎", Age: 25 },
    { ID: 2, Name: "花子", Age: 20 }
    )
```

#### 使用例
+ ボタンを押した時の `OnSelect` で実行
+ アプリ起動時の `OnStart` 内でテーブルに格納

キャンバスアプリにボタンコントロールとギャラリーを設置してみます。
ボタンの `OnSelect` とギャラリーの `Items` をそれぞれ以下のように設定します。
現状、コレクションの中身は空っぽのためギャラリー内にはアイテムは表示されていません。
では `コレクション作成` ボタンをクリックしてみましょう。

#### 【コレクション内は空っぽの状態】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/d5c0e74d-9afa-4c7f-82c4-325f781d971c.png)

#### 【コレクション内に　col_Employeeテーブルが作成】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/f367419c-a393-2f5b-89b3-9f388421125e.png)

`col_Employee` テーブルが作成され、ギャラリーにアイテムが表示されるようになりました。
このようにコレクションは任意のテーブルをアプリ内に作成・保持させることが可能です。

また、自身でテーブルを作成しなくても `Filter` 関数を使用してテーブルデータの一部取込などを行うことも可能です。

:::note warn
コレクションのデータはアプリを終了するとリセットされます。
保存されたデータ量が多いとパフォーマンスに影響を及ぼす可能性があります。
:::


## まとめ
今回ご紹介した変数はごく一例の設定方法です。
そのほかにも、様々なパターンに適した用途があるものもあります。
まずは理解しやすい初級編の変数やコレクションを覚えて
効率的なアプリ作成の第一歩を進めましょう！！！！
【ChatGPT】爆速で結果を出すためのテンプレートPromptをご紹介します。目標達成のためのPromptになります。

　どうも、カーブミラーです。

　今回は、爆速で結果を出すためのテンプレートPromptをご紹介します。目標達成のためのPromptになります。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　まずは、ニュースです。

　X-TwitterのGrokですが
　　生成画像の編集機能が
　　　用意されました。

　使い方は以下のとおり
　❶画像生成
　❷画像を選択する
　❸Edit with Grokをタップ
　❹どうしたいのか入力
　　　例えば、“背景を街なかにして”とか
　❺送信

　これで、
　　新たな画像が生成されます。

　非対象物に
　　微妙な変化が見られますが
　　　許容範囲かな、と。

　Grokで画像生成される方は
　　ご利用ください。
***
　ではさっそく、【本題】です。

　今回は、
　　爆速で結果を出すための
　　　テンプレートPromptを
　　　　ご紹介します。

　目標達成のための
　　Promptになります。

　今回は、
　　ハヤシシュンスケさんのポストを
　　　ほぼそのまま転記します。
***
　ハヤシシュンスケさんは、
　　ゴールシークプロンプトで
　　　有名な方です。

　ChatGPT関連の記事を探せば、
　　必ず見つかるような有識者です。

　知らない方のために説明しますと、
　　ゴールシークプロンプトとは、
　　　特定の目標や結果を
　　　　達成させるためのプロンプト。

　ハヤシシュンスケさんは
　　その開発者であり、
　　　命名された方です。
***
　説明はそんなくらいにしまして。

　こちらがそのポストです。
　　[ハヤシシュンスケさんポスト](https://x.com/Shunsuke__H__/status/1885841568961335750?t=71edrptyAnAQXZHnzuB2kg&s=19)

　そして、そのPromptがこちら。
　　＊＊＊にゴール目標を入力して
　　　送信してください。
```Text:爆速で結果を出すためのテンプレートPrompt
ゴール：「＊＊＊」を達成したい

以下の手順で計画を立てて：
1.現状分析
2.必要なステップの洗い出し
3.各ステップのサブゴール設定
4.具体的なアクション提案
5.実行時の注意点
```

　これを有効に活用するには、
　　一度実行して、
　　　現状分析を出させます。

　不明なので
　　項目しか出てきません。

　その項目に
　　答えを用意してください。

　
　上のPromptを編集で、
　　その答えを追記し、
　　　送信してください。

　これで、
　　より具体的な回答を
　　　期待できます。

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
CI/CD is 何【初学者向け】

## 前振り
「名前は聞いたことあるくらい...」や「正直何してるかはいまいち...」だけど「今更聞けない...」な方が一定数いるんじゃないかと思ったので、今一度整理してみたいと思います。

:::note info
あんま長ったらしく書かれても読む気起きないと思うので、大枠は外さない程度でできる限り簡潔にまとめてます。
ので、語弊等々は若干あると思いますがご理解いただけると幸いです🙏
:::

## 本題
### そもそも何の略なのか
- <font color="HotPink">**C**</font>ontinuous <font color="HotPink">**I**</font>ntegration / <font color="DeepSkyBlue">**C**</font>ontinuous <font color="DeepSkyBlue">**D**</font>elivery のそれぞれ頭文字を取ったやつ
- 日本語だと継続的インテグレーション / 継続的デリバリー
- 後半の<font color="DeepSkyBlue">**D**</font>eliveryは<font color="DeepSkyBlue">**D**</font>eployment（デプロイメント）って言ったりもします

### <font color="HotPink">**CI**</font>さんは何をしているのか
- 部品ごとの修正点を取りまとめる：マージ
- 部品を組み立てる：ビルド
- ↑で出来上がったモノがちゃんと動くか確認する：テスト
- <INS>**↑これらを自動でやってくれる**</INS>

### <font color="DeepSkyBlue">**CD**</font>くんは何をしているのか
- CIさんが作ってくれたモノを使える状態にする：デプロイ
- 使える状態になったモノをお客さんに提供する：リリース
- <INS>**↑これらを自動でやってくれる**</INS>

### 自動だと何がいいのか
- 昔は以下を全部手動でコツコツやってた
    - <font color="HotPink">**マージ**</font>→<font color="HotPink">**ビルド**</font>→<font color="HotPink">**テスト(NG)**</font>→修正→<font color="HotPink">**マージ**</font>→<font color="HotPink">**ビルド**</font>→<font color="HotPink">**テスト(NG)**</font>→修正・・・
- これがCIさんの登場で
    - <font color="HotPink">**CI**</font>→修正→<font color="HotPink">**CI**</font>→修正→・・・
と色々省略できるようになった
- おかげで開発者はコードの<INS>**修正に集中**</INS>できるようになった
- 空いた時間で色々できるようになって<INS>**生産性も上がった**</INS>
- 人じゃなく機械にやってもらうことで<INS>**ヒューマンエラーも減った**</INS>
- 面倒だしテストやんなくていいや！とかも無くなりちゃんと<INS>**早い段階でバグを見つけられる**</INS>ようになった
※デプロイ→リリースの流れも同じ感じで<font color="DeepSkyBlue">**CD**</font>くんに自動化してもらった
　
- 図にすると↓のイメージ
![CICD_イメージ図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3851141/6b42ebc3-1736-c8c2-8cd7-dda3562938c1.png)


## まとめ
直接関わる機会が少なくても概念として知っといて損はないと思うので、話題に出されたらスッと流れがイメージできるくらいにはしておきたいですね。
需要があれば手軽にCI/CDを構築してみる流れも解説してみたいと思います🙇‍♂️
Javaで超簡単疑似プログラム

# 自作言語つくりたい
ある日、暇だったから　自作言語が作りたくなった
でも、私は知っている　自作言語は作るものが多いことを
…じゃあもう計算能力だけ当ててやるくらいならできるんじゃない？
あと言語もくっそ単純なアセンブラっぽいのを使えばできるんじゃね？

# うちの学校
うちの学校はJavaのお勉強をしてるから…じゃあJavaにしよ

```Java:Main.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    @FunctionalInterface
    public interface CPU_MEIREI {
        void function(long[] registers, int a, int b);
    }
    //拡張性を持たせるため、Switchをつかってみた
    public static void systemcall(long[] r, int a, int b){
        switch (a) {
            case 1:
                System.out.println(r[b]);
                break;
        
            default:
                break;
        }
    }
    public static void main(String[] args) {
        if(args.length < 1){
            System.out.println("文字列に引数を指定してください");
            return;
        }
        long registers[] = new long[4];
        //命令セット
        final CPU_MEIREI meirei[] = {
            (r, a, b)-> r[a] = r[a] + r[b],     //0
            (r, a, b)-> r[a] = r[a] - r[b],     //1
            (r, a, b)-> r[a] = r[a] * r[b],     //2
            (r, a, b)-> r[a] = r[a] / r[b],     //3
            (r, a, b)-> r[a] = r[a] % r[b],     //4
            (r, a, b)-> r[a] = r[a] >> r[b],    //5
            (r, a, b)-> r[a] = r[a] << r[b],    //6
            (r, a, b)-> r[a] = r[a] ^ r[b],     //7
            (r, a, b)-> r[a] = r[b],            //8
            (r, a, b)-> r[a] = b,               //9
            Main::systemcall                    //10
        };
        if(args.length == 5){
            registers[0] = Integer.parseInt(args[1]);
            registers[1] = Integer.parseInt(args[2]);
            registers[2] = Integer.parseInt(args[3]);
            registers[3] = Integer.parseInt(args[4]);
        }
        //命令実行（ポインタとか使って、if,for,while文を使えるように…したいけど…)
        try(BufferedReader br = new BufferedReader(new FileReader(args[0]))){
            br.lines().forEach(str->{
                //System.out.println(str);
                String[] testa = str.split(" ");
                if(testa.length != 3) return;
                int meirei_tmp = Integer.parseInt(testa[0]);
                int register1 = Integer.parseInt(testa[1]);
                int register2 = Integer.parseInt(testa[2]);
                meirei[meirei_tmp].function(registers, register1, register2);
            });
        }catch(IOException e){
            e.printStackTrace();
        }
        StringBuilder sb = new StringBuilder();
        sb.append("eax = ").append(registers[0]).append('\n');
        sb.append("ebx = ").append(registers[1]).append('\n');
        sb.append("ecx = ").append(registers[2]).append('\n');
        sb.append("edx = ").append(registers[3]).append('\n');
        System.out.println(sb);
    }
}

```
自作プログラミング言語ファイル
```:自作言語
0 0 1 
0 2 3
0 0 2
10 1 0
```
(4つの引数を受け取って、すべてを足すプログラム）

## まとめ
まだまだ、改良の余地があるから、もうちょこっと…頑張りたい
TiDB Cloud Serverlessでのクエリ最適化Howto（基礎編）

## はじめに

[TiDB Cloud Serverless](https://pingcap.co.jp/tidb-cloud-serverless/)はTiDBをベースとする、オートスケール可能な従量課金のサーバレスデータベースです。

この従量課金はストレージ量に応じたストレージの課金と、クエリで利用する「リソース」に応じた課金となっており、「リソース」にはクエリが利用するCPUや、DiskI/O、ネットワーク転送などを勘案したリクエストユニット(RU)という値を利用しています。

このRU値は、クエリの質によって大きく異なります。端的にいえば、効率の良いクエリはRU値も低くなり、よりコストパフォーマンスが良いということになります。クエリをチューニングすると、速くなるだけではなくコストも低くなるわけですね :smile: 

今回ご紹介するのはパフォーマンスチューニングの中でも最も基本的な、全件検索（TableFullScan）を探し出してインデックスを貼る方法です。ぜひ、御覧ください。

:::note
本記事は下記の英文記事の翻訳です。
:::

https://dev.to/sunxiaoguang/efficient-querying-how-to-optimize-performance-and-reduce-expenses-on-tidb-cloud-serverless-4a94

## TiDB Cloud Serverlessのコストの最適化 〜 はじめの一歩

🚀クエリのパフォーマンスを最適化し、お金を無駄にしないようにしたいですか?
これをチェックして、どのクエリが最も多くの費用を費やしているかを調べ、パフォーマンスを最適化し、無駄を避けるためのヒントを得てください!📊🔍

- Diagnosticsセクションに移動し、SQLステートメントを選択して、クエリの過去のコストを調べることができます。このダッシュボードでは、類似のクエリを集約されており、そられの合計値や平均値を使って最も多くのリクエストユニット(RU)を消費したクエリを簡単に特定できます

### Step1. 過去のコスト(RU)の確認: Diagnostics

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/d262f0d9-9b03-7b00-ef37-d47b2f766b24.png)

  1.ナビゲーションメニュー の「Diagnostics」をクリックしてください。
  2. [SQL Statement]タブをクリックします。
  3. Total RU をクリックして、Total RUでクエリをソートします。
  4. クエリの平均RUでクエリをソートするには、Mean RU をクリックしてください

### Step2. クエリ実行計画の確認

- SQLステートメントダッシュボードで特定のクエリをクリックすると、対応する実行計画を閲覧できます。これを調べることにより、適切なインデックスの追加など、前述の最適化手法を適用してクエリのパフォーマンスを向上させることができます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/dd1ce955-c0cc-498f-6bf8-1fcf356a38e6.png)

  1. TableFullScanとは、WHERE句の適切なインデックスなしですべてのデータをスキャンすることを意味しています。これは、（おそらく意図していない）パフォーマンスの低下と利用料の増加に繋がります。

### Step3. インデックスの作成と確認

- [WHERE]句に基づいて適切なインデックスを追加し、[EXPLAIN ANALYZE]コマンドを使用して、新しく追加されたインデックスが期待どおりに機能していることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/12495/a9456962-61f4-abba-db69-ca397b3c440a.png)

  . 例えば、WHERE句がbar='1'でテーブル名がtable_foo_barの場合、次のSQL文を実行するとインデックスが追加され、クエリが高速化されます。
  
```sql
  ALTER TABLE table_foo_bar ADD INDEX idx_bar (bar)
```
モノリスは死んだ！モジュラモノリス万歳！

## 人間によるはじめに
この文章は, ChatGTPに
「モノリスからマイクロサービスを経由してモジュラモノリスに回帰した経緯をフランス革命の展開と比較しながら語ってください」
というプロンプトで生成された文章を元に、章立てや内容の追加などの指示を加えで作ったものです。
（最後の節は、原案の短文を元にAIに即興詩風にリライトしてもらったものです）


## はじめに

2000年以降のソフトウェアアーキテクチャの変遷を振り返ると、フランス革命期前後の政治体制の変遷と驚くほどの共通点があることに気づく。モノリシックアーキテクチャの隆盛とその崩壊、マイクロサービスという新たな理想の誕生とその混乱、そして新たな秩序への収束——これはまるで、絶対王政の繁栄と衰退、革命の混乱、ナポレオンの台頭へと続くフランスの歴史と軌を一にするように見える。

このエッセーでは、各時代のソフトウェアアーキテクチャの流れを、フランス統治者の時代になぞらえて考察していく。

## ソフトウェアアーキテクチャの時代区分——フランス統治者になぞらえて

### ルイ14世時代：モノリシックアーキテクチャの黄金時代

かつてのソフトウェア開発は、巨大なモノリシックアーキテクチャによって支配されていた。この時代、データ中心アプローチとオブジェクト指向設計という二つの潮流が覇権を争っていたが、いずれにせよ、すべての機能は一つの王国のもとに統合され、強固な統治が行われていた。これはまさに、ルイ14世の絶対王政が頂点を迎えた時代と重なる。

### ルイ15世時代：疲弊する巨大モノリス

ルイ14世の遺産を受け継いだこの時代、モノリシックアーキテクチャはさらに巨大化し続けた。オブジェクト指向設計はさらに精緻化され、理論の上では完璧な統治機構が構築されていった。しかし、それは現実の運用負担を無視した机上の理想に過ぎなかった。技術的負債は蓄積し、システムは肥大化し続け、開発者たちは疲弊していった。これはまさに、改革なきまま衰退の道を辿ったルイ15世の統治と重なる。

### ルイ16世時代：自然発生的な分散サービスの混乱

コンピュータのダウンサイジングが進み、かつての重厚なモノリシックアーキテクチャは徐々に分解され、小規模なサービスが互いに通信し合う「サービス志向アーキテクチャ（SOA）」が登場した。この変化は、中央集権的な旧体制が緩み、新たな権力の在り方を模索していたルイ16世時代のフランス社会に似ている。

同時期、ソフトウェア産業への参入コストが下がり、Web2.0ブームとRuby on Railsブームの中で、無数の新興企業が誕生した。Railsの「開発の高速化」という魅力に惹かれた企業は、競うように短期間でサービスをリリースした。しかし、多くのプロジェクトは設計が杜撰で、スケーラビリティや統合性を考慮しないまま成長を続けた。

この時期の分散コンピューティングは、明確な設計思想によって生まれたものではなく、むしろ自然発生的なものであった。異なる企業や開発者たちが独自の技術選定を行い、互換性のないAPIやデータフォーマットが乱立した。その結果、システム間の統合はスムーズには進まず、異なるサービス間の連携は手探りの状態となった。

マイクロサービスの理念は既に理論上存在していたが、当時の技術水準では、それを実現するためのツールやフレームワークが成熟しておらず、踏み込む者はほとんどいなかった。このように、理念としての分散アーキテクチャは叫ばれつつも、実態としては制御不能な混沌が広がっていた。この状況は、改革を試みながらも体制を維持できず、最終的に革命の波に飲み込まれたルイ16世の統治と重なる。

### ロベスピエール時代：マイクロサービスの恐怖政治

ついに革命は本格化し、マイクロサービスの理想が初めて本番環境という試練にさらされた。各サービスは独立し、従来のモノリシックな支配から解放されたが、それは秩序の崩壊も意味していた。サービス間の通信は爆発的に増え、APIの混乱、データの分散、管理の複雑化が発生した。エラーハンドリングの問題が頻発し、障害が一部のサービスからドミノ倒しのように連鎖した。これはまさに、ロベスピエールによる恐怖政治がフランス国内に混乱をもたらした時代と酷似している。

### ナポレオン時代：モジュラーモノリスの台頭

混乱の果てに、人々は気づいた。完全なマイクロサービスは理想的ではあるが、実用には耐えないことを。そこで登場したのが「モジュラーモノリス」という新たな支配体制であった。マイクロサービスの理念を一部取り入れつつ、適切なバウンダリーを持つ統制されたアーキテクチャが再評価された。フランス革命の混乱を経てナポレオンが登場し、新たな秩序を確立したように、ソフトウェアアーキテクチャもまた、合理的なバランスを求める方向へと収束していった。


## おわりに

モノリシックアーキテクチャからマイクロサービス、そしてモジュラーモノリスへと至る変遷は、理想と現実の間で揺れ動く技術の進化そのものであった。未来のアーキテクチャがどのような形をとるにせよ、過去の教訓を活かし、持続可能なソフトウェア設計を目指すことこそが、我々の使命である。

## 即興詩（ChatGTPと人間による共作）
> 革命の鐘は鳴り響き
> モノリスの塔は崩れ落ちた
> 塵の中から立ち上がる者たち
> 彼らは問いかける——
> 「この戦いに意味はあったのか？」
> 
> 血と汗にまみれた理想の地図
> 引かれた線は風に舞い
> 新たな宮廷の扉が開く
> そこに集う者たちの目を見よ
> 革命の炎はまだ消えぬ
> 
> 過ぎ去った時を悔いるな
> 捨て去ったものを惜しむな
> 新たな統治の中にこそ
> 過去の叫びは息づいている
> 
> やがて来る次の嵐を見据え
> 我々は歩み続ける
> 歴史の車輪が回るかぎり
> 革命は終わらない——
【供養】Mac環境でMarp for VSCodeでPDFをエクスポートできなかったので色々やってみた＋後日追記

## VSCodeでの操作・設定
https://qiita.com/firesign2023/items/bc20bc751cf43b66eb4c

これだけでは足りない！というのが本旨です。

:::note warn
たぶんおま環です
Mac環境でbrewを使っています
また、執筆時点で発生したものです
:::

# 結論：google-chrome.appは入っているか？
普段使いしてないから入れすらしてなかったんですが、原因はこれでした。
細かい

# やったこと
最終的に端末を変えて↑を実行して動いた、という状態でした。
問題が発生した端末は一回クリーンインストールした方がいいんじゃ？と思うぐらい年季の入った端末だったので、あまり参考にならないかもしれません。

## VSCodeに拡張機能を入れよう
https://marketplace.visualstudio.com/items?itemName=marp-team.marp-vscode

VSCodeに、と書いておきながらですが実際に使ったのはVSCodeっぽい別のエディタです。

## marp-cliを入れよう
``` .zsh
brew install marp-cli
```

で、 `Error: /usr/local/Cellar/imagemagick/7.1.1-29_1 is not a directory` と怒られたので、imagemagickを入れてみる

``` .zsh
brew install imagemagick
```

brew古いんでは？問題。

```
brew update
brew upgrade
```

とんでもない時間がかかってしまった、やっぱりか〜。
気を取り直して続行

``` .zsh
brew install marp-cli
```

通った！

## PDFを作ろう
:::note alert
問題は解消せず…
:::

実行結果はsuccessとあるものの、PDFビューアーが開かれることもファイルが生成されることもなく。
念の為デスクトップに生成するようにパスを変えたので権限問題ではないはず、少なくとも別端末では生成されている。

dockerなりできれいな環境を作って生成させるぐらいまでやらないと原因調査もままならなさそう。
業務用途（ではあるけど、深刻度が高いわけ）じゃないし、頑張るより諦めようという結論になりました。
原因調査を頑張るより、Dockerなりで環境を分けるとか、クリーンインストールの手順を確立させた方がいいかも？

## markdownをPDFにしたかっただけなので、Marp for VSCodeにこだわることはなかった
:::note warn
追記分
:::

執筆時点ではObasidianを使っていなかったが、追記時点ではObsidianがメインなので、こちらのMarp Slidesプラグインでmarp2PDFができているので困らなくなった。
MacだけでなくWindows環境でも使えているし、おそらくLinuxディストリビューションでもObsidianが動けば問題ないはず