OmniAICreator/Qiita-1.07M huggingface dataset:
～韓国でITエンジニアとして働くという選択肢～



<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>韓国IT市場の最前線</title>
  <style>
    body {
      font-family: "Hiragino Kaku Gothic ProN", sans-serif;
      line-height: 1.7;
      padding: 30px;
      background-color: #fdfdfd;
      color: #333;
    }
    h1 {
      color: #007acc;
      font-size: 30px;
      margin-bottom: 20px;
    }
    h2 {
      color: #e67e22;
      font-size: 22px;
      margin-top: 40px;
    }
    h3 {
      color: #27ae60;
      font-size: 18px;
      margin-top: 25px;
    }
    p {
      margin-bottom: 16px;
    }
    ul {
      margin-left: 20px;
      padding-left: 10px;
    }
    .highlight {
      color: #c0392b;
      font-weight: bold;
    }
    a {
      color: #2980b9;
      text-decoration: none;
    }
    a:hover {
      text-decoration: underline;
    }
  </style>
</head>
<body>

  <h1>韓国IT市場の最前線へ！<br>AI・クラウド時代に活躍できる人材とは？</h1>
  
みなさん、こんにちは　韓国在住のsanaです！
今日は韓国のIT企業で働く日本人の私が簡単に韓国のIT市場に関して簡単に紹介したいと思います！

  <h2>🧭 はじめに</h2>
  <p>
    韓国のIT市場は、2024年から2025年にかけて大きな成長を迎えています。<br>
    生成AIやクラウド、量子暗号通信、ロボティクスなど、未来を支える技術への投資が加速中です。<br>
    グローバルに活躍したいエンジニアにとって、今がチャンスです。
  </p>

  <h2>🌍 韓国IT市場の注目トレンド</h2>

  <h3>🚀 生成AI：企業の63％が投資を拡大</h3>
  <p>
    <a href="https://www.samsungsds.com/kr/insights/2025-it-investment-prospects.html" target="_blank">
      Samsung SDSの調査
    </a>によると、韓国企業の63%が生成AIへの積極的な投資を行っており、特に業務自動化やカスタマーサポートへの活用が進んでいます。
  </p>

  <h3>☁️ クラウド市場の拡大</h3>
  <p>
    2028年までに24.6兆ウォン市場に成長すると予想されるほど、クラウド業界の注目度は高く、公共部門から民間企業まで、AWSやAzureなどの導入が加速しています。
  </p>

  <h3>🔐 量子通信とサイバーセキュリティ</h3>
  <p>
    <a href="https://news.sktelecom.com/209135" target="_blank">SKT</a>などが推進する量子暗号通信は、国家レベルのプロジェクトとしても注目されています。<br>
    また、ゼロトラストやAI活用のサイバーセキュリティ技術も需要が拡大中です。
  </p>

  <h2>👩‍💻 求められる人材像とは？</h2>
  <ul>
    <li>生成AIやLLMの開発経験</li>
    <li>クラウド（AWS/GCP/Azure）の構築・運用スキル</li>
    <li>データエンジニアリングと可視化ツールの経験</li>
    <li>サイバーセキュリティの実務知識</li>
    <li>Python, TensorFlow, Docker などの実装スキル</li>
  </ul>
  <p>こうしたスキルを持つ人材は、国内外の韓国IT企業から熱烈に求められています。</p>

  <h2>🛫 韓国IT企業への就職を考える理由</h2>
  <p>
    韓国では数年前から若年層の就職難が続いていますが、IT分野では例外的に<strong class=\"highlight\">グローバル人材を積極採用</strong>する動きが広がっています。<br>
    実際に日本人エンジニアの採用事例も増加しており、日韓の技術交流がより密接になっています。
  </p>

  <h3>🌟 韓国就職に向いている人の特徴</h3>
  <ul>
    <li>アジア市場で活躍する意欲がある</li>
    <li>英語または韓国語でのコミュニケーションに抵抗がない</li>
    <li></li>
    
  </ul>

  <h2>🎯 まとめ：キャリアを世界へ</h2>
  <p>
    韓国のIT市場は「挑戦する技術者」にぴったりの環境です。大学４年間韓国で過ごしてみて、就職の壁が高いからか日本の学生に比べて勉強だけでなく対外学習など意欲的な人が多いと感じました。学生時代を終え、社会人になっても常に上を目指す人が多いので、新しい環境で新しい技術を学びたいという熱意のある方は韓国のIT市場で多くの経験とスキルを得れるのではないのかなと思っています！<br>

    
  </p>
  <p class=\"highlight\">👉 韓国IT企業へのキャリアチャレンジ、ぜひ検討してみてください！</p>

</body>
</html>
記事一覧

# ネットワーク関連

https://qiita.com/loveTequila/items/631679c86db3f0489aef

# Linux関連

https://qiita.com/loveTequila/items/b36ddaa10f4f4bfc0f15

https://qiita.com/loveTequila/items/c1733e3acae68b6343eb

https://qiita.com/loveTequila/items/310957841175e4e19bfa

# サーバ構築

https://qiita.com/loveTequila/items/26cb677cd2a4dd1228b4

https://qiita.com/loveTequila/items/2617e9761c1d89e6b204

# KaliLinux Tool

https://qiita.com/loveTequila/items/a795d1c619df83194ffc

https://qiita.com/loveTequila/items/855b9b097ffaf0c91fa5

https://qiita.com/loveTequila/items/4c7cd54f8a31150fd9d3

https://qiita.com/loveTequila/items/ffef41eec25180ed810b
CursorとWindsurfエディターのUI画面

AI搭載エディタ[Cursor](https://www.cursor.com/ja) / [Windsurf](https://windsurf.com/)。気になってインストールしてみました。


![スクリーンショット 2025-05-26 134015.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124519/4f1f4abf-3543-43d4-a840-9da1d262aa49.png)



https://qiita.com/syukan3/items/c5f4cb48a6f1a5396e4e
Internet of Things (IoT) LiveLessons, 2nd Edition (Video Training) Lesson 1

# 概要
[Internet of Things (IoT) LiveLessons, 2nd Edition (Video Training)](https://www.pearsonitcertification.com/store/internet-of-things-iot-livelessons-2nd-edition-video-9780137592241)コースのLesson 1の内容をアウトプットします

# 内容

- IoTとは何なのか？
    - IoTとは単一の技術ではなく複数技術の総称
    - 1990年代にJohn Romkeyによって提唱される
    - 今後はユビキタスワールドもしやに
- IoTが使われるケース
    - より良いインサイト（センさー）
    - 自動化
    - 事故等の予測
    - コスト削減
- IoTには工業用IoT,家庭用IoTの2種類に分けられる
    - 工業用IoT
        - 例：OTデバイス（OTとはOperational Technologyのことで製造業、重要インフラに関する技術を指す）
    - 家庭用IoT
        - 例：smart homeデバイス（smart homeとは家電がネットワークにつながっている家を指す）
:::note info
ITは情報技術全般（ハードウェアからソフトウェアまで）を指すが、OTは製造業といった特定の分野を指す。特にOTはネットワークにつながないケースが多いが、近年OTとITの連携が進められている
:::
- IoT Architectureが抱える課題
    - large scale(デバイスが膨大）
    - security
    - constrained device（バッテリが小さいといった機器による制約）
    - large volume(ログといったデータ量が膨大）
    - legacy support（サポートする技術が古い）
    - need for real time（リアルタイムでの処理が必要）
- IoT Reference Architectureとは
[こちら](https://www.hpe.com/jp/ja/what-is/reference-architecture.html)から引用します

> リファレンスアーキテクチャーは、ソリューションを構成するIT製品やITサービスの推奨される構造や統合方法を示すドキュメント、またはドキュメントセットです。リファレンスアーキテクチャーには、業界で認められたベストプラクティスがまとめられており、一般的には特定のテクノロジーの最適なデリバリ方法が記載されています。

- IoT Reference Architectureではいくつかのモデルが提案されている
    - ISA
    - ETSI
    - oneM2M
    - ISO
    - NIST
    - IEEE 
    - etc...

- IoTは標準化が難しい（使用技術、プロトコルなどがデバイス毎に異なる）ことが課題である
- 例えばoneM2Mというモデルではlayerというものを用いて各アプリ、デバイス間の差異を吸収する（こちらの説明もっとうまくできる方いましたらコメントください！）
- IoTWF Reference Model というのもある
- 7つの層で標準化を行うことを考えている
    - Physical Device and Controllers(センサーなどのデバイス）
    - Connectivity（エッジデバイスとクラウドとのネットワーク）
    - Edge Computing（データの変換、トラフィックのルーティング）
    - Data Accumulation（データの蓄積）
    - Data Nomarization（データをこの後のLayerで使えるような形式に変更）
    - Application layer（モニタリング等）
    - Business Process（ビジネスの意思決定等を下すのに使用）
- IEC 62443
[こちら](https://monoist.itmedia.co.jp/mn/articles/2205/31/news006.html)から引用します
> IEC 62443は多くの制御システムに関する標準を体系化して統合した汎用的な制御システムセキュリティ標準

多くの国が指標として取り入れられており、幅広く活用されている。




# 終わりに
Lesson1というのもあるかもしれませんが、リファレンスアーキテクチャが難しいと感じました。受講を進めるにしたがってこの部分の理解を深めていきます。

# 参考文献
- https://www.pearsonitcertification.com/store/internet-of-things-iot-livelessons-2nd-edition-video-9780137592241
- https://www.ntt.com/business/services/rink/knowledge/archive_08.html?msockid=310c58a1c25a60850cc14d65c3206113
- https://www.techtarget.com/iotagenda/definition/smart-home-or-building
- https://www.hpe.com/jp/ja/what-is/reference-architecture.html
- https://www.includehelp.com/iot/onem2m-architecture.aspx#google_vignette
- https://www.includehelp.com/iot/the-iot-world-forum-iotwf-standardized-architecture.aspx
- https://monoist.itmedia.co.jp/mn/articles/2205/31/news006.html
Internet of Things (IoT) LiveLessons, 2nd Edition (Video Training) Lesson 2

# 概要
[Internet of Things (IoT) LiveLessons, 2nd Edition (Video Training)](https://www.pearsonitcertification.com/store/internet-of-things-iot-livelessons-2nd-edition-video-9780137592241)コースのLesson 2の内容をアウトプットします

# 内容
- IoTを考えるにあたって以下の2つの視点を持つと良い
    - ネットワーク
    - データ
- IoTの機能的構成
    - アプリケーション
    - ネットワーク
    - デバイス
- IoTのデータ管理とコンピューティングの視点での構成
    - クラウド
    - フォグ（クラウドにデータを提供？）
    - エッジ（エンドポイント。フォグにデータを提供）
- いずれの項目においてセキュリティ対策は必要
- センサー
    - エネルギーを計測して、数値化する
    - 種類（下記以外にも加速度、動きなど様々な対象を観測するセンサーがある）
        - 温度
            - thermistor
                - 温度が変わると抵抗が変わる部品
            - thermocouple
        - 湿度
            - psychrometer
        - 輝度
            - photodiode
                - 光子が抜けるのを検出
- センサーのトレンド
    - 小型化
    - 需要の増加
        - スマホには多くのセンサが搭載
- MEMS（Micro Electro Mechanical Systems)
    - ものすごい小さな電子部品が組み合わさってシステムやデバイスを構成すること（小型化を行う技術？）
    - よくあるタイプ
        - 加速度計
        - ジャイロスコープ
        - 圧力センサ
        - 磁力センサ
        - アクチュエーター
            - 電気、空気圧、油圧、熱などの何らかのエネルギーを何らかの動作に変換する装置
    - メリット
        - 感度が良い、小さい、省電力
    - デメリット
        - イニシャルコスト
- アクチュエーター
    - 電気、空気圧、油圧、熱などの何らかのエネルギー、もしくは電気信号を何らかの動作に変換する装置
    - 統合されたシステムを構築するのに使える（様々なセンサの値から行うべき動作を行い、システムを常時安定稼働させる）
- PLCs(Programmable Logic Controller)
    - 小さい産業用コンピュータ
- HMI(Human Machine Interface)
    - UI(画面側）
    - linux or windowsのOSが主に採用されている
- ネットワーク通信
    - ネットワークを構築する際に以下の視点で考える
        - どれくらいのデータを送るのか？
        - どれくらい遠く送るのか？
        - どのくらいの頻度で送るのか？
        - どれくらいのデバイスとやりとりするのか？
- Gateway
    - 各デバイスでの通信の橋渡し
- fog computing
    - 非常に多くのデータがセンサ等から生成されるため、一旦処理をしてからクラウドにデータを送る役割
    - 課題はCPU、GPU資源
- MQTT
    - メッセージの送受信に用いられるプロトコル
    - HTTPプロトコルのIoTバージョン
- CoAP
    - IoTのような制約のあるデバイス向けの通信プロトコル
    - MQTTよりも軽量、高速なプロトコル
    - ただしプロトコルの成熟度はMQTTの方が上

# 終わりに
ボリュームとしては多くはありませんでしたが、センサやIoTデバイスで用いられるプロトコルについて学ぶことができました。

# 参考文献
- https://www.pearsonitcertification.com/store/internet-of-things-iot-livelessons-2nd-edition-video-9780137592241
- https://shima-corp.com/labo/parts/what-actuator
- https://mqtt.org/
- https://www.geeksforgeeks.org/constrained-application-protocol-coap/
-
Windowsユーザー必見！BitLocker 回復キーの確認方法

## BitLockerとは？？
BitLocker（ビットロッカー）とは、Microsoftが提供するドライブ暗号化機能です。
Windowsに標準搭載されており、ドライブ内のデータを保護するために使用されます。

+ Microsoft Windows のディスク暗号化機能
+ ハードディスクやSSDの中身を丸ごと暗号化することで、
不正アクセスや盗難時の情報漏えいを防ぐ
+ 暗号化されたドライブは、正規のユーザー（Windowsログインユーザー）でないと読み込めない


:::note warn
BitLockerを使用するには回復キーが必須になります。
必ず忘れないようにしておきましょう。
:::


## BitLocker回復キーの確認方法 :closed_lock_with_key:
**1. Microsoft アカウントから確認**

[Microsoft マイアカウント](https://account.microsoft.com/devices/recoverykey) へログインします。

マイアカウント内の `デバイスの管理` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/1fef75b3-d5aa-4795-89d5-bb57a82361fb.png)


回復キーを確認したいデバイスをを選択し `Bitlockerキーの表示` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/47aa8add-4c26-4963-bb7f-1fc1485643cb.png)

`回復キーを表示する` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/61ba47a9-257e-4bec-b657-a971c3ff9d8f.png)

48桁の回復キーが表示されますので別の場所に保存しておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/bf06cf00-6b08-409d-a48a-b3374f967fe1.png)


**2. コマンドプロンプトから確認**
コマンドプロンプトを管理者として実行で起動します。

```ruby:cmd（管理者として実行）
manage-bde -protectors C: -get
```

`パスワード` に回復キーが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/ceee427c-afb5-4cc6-b9cf-f5d2a46ecb21.png)

**3. コントロールパネルから操作してローカルに保存**

コントロールパネルを開き `BitLockerドライブ暗号化` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/23a9ea04-6cba-47a2-89c6-e40c1aa2a538.png)

`回復キーのバックアップ` を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/061bb936-79a2-47d0-813a-28bac094cfc1.png)

3種類の保存方法がありますので、どれを選択していただいても結構です。
ローカルに保存する場合は `回復キーを印刷する` を選択するのがオススメです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/91ea611d-36d2-43ca-b8ba-93913e1ec255.png)

PDFを選択して印刷をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/9d2421b1-5f48-4642-97d1-7cf9d9b20dcb.png)

保存先を選択して、名前を付けて保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/681ef9f8-650b-4a38-9fe3-984ddcbb7f26.png)

保存するとこのようにPDF形式でローカルに保存して確認することができますので
いざという時のバックアップにオススメです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/65f7946e-0bea-4d9b-bec6-8f38399b6c0d.png)


## どうしても回復キーが分からない場合は？？
Microsoftアカウントへサインインができなかったり、どうしても回復キーが確認できない場合は組織の管理者に確認するか、パソコン自体を初期化することになります。

## さいごに:writing_hand_tone1:
BitLockerは非常に強力なセキュリティ機能ですが、
回復キーの管理を怠ると逆にデータへアクセスできなくなるリスクもあります。  
本記事が、いざという時に慌てず対応できる一助になれば幸いです。

「BitLockerが有効になっているか分からない」「組織管理下の端末で対応に困っている」といった場合も、まずは落ち着いて回復キーの保存先を確認してみましょう。
オブザーバビリティについて

## はじめに

システム開発や運用に携わる皆さん、日々の業務で「監視」や「可視化」といった言葉を耳にしない日はないのではないでしょうか。しかし、近年、これらと並んで注目されているのが「オブザーバビリティ（Observability）」という概念です。

「監視と何が違うの？」「具体的に何をするの？」といった疑問をお持ちの方もいらっしゃるかもしれません。この記事では、オブザーバビリティとは何か、なぜ今重要なのか、そしてどのように実践していくのかを、初心者の方にも分かりやすく解説します。

## 監視（Monitoring）とオブザーバビリティ（Observability）の違い
まず、混同されがちな「監視」と「オブザーバビリティ」の違いを明確にしておきましょう。

- 監視（Monitoring）:

  - 既知の問題に対する閾値やルールに基づいたチェック。
「CPU使用率が80%を超えたらアラート」「ディスク容量が90%になったら通知」といったように、事前に定義された状態をチェックします。
  - システムの健全性を大まかに把握するには有効ですが、予期せぬ問題が発生した際には、原因究明に時間がかかることがあります。
  - 「何が壊れたか」は教えてくれますが、「なぜ壊れたか」までは教えてくれません。

- オブザーバビリティ（Observability）:

  - システムがどのような状態にあるかを、その**内部から生成されるデータ（テレメトリーデータ）**を通じて推測し、理解する能力。
  - 未知の、あるいは予期せぬ問題が発生した場合でも、その根本原因を迅速に特定し、解決に導くための情報を提供します。
  - システムが出力するログ、メトリクス、トレースといった多様なデータを統合的に分析することで、システムの振る舞いを多角的に把握します。
  - 「なぜ壊れたか」だけでなく、「次に何が起きるか」を予測することも可能になります。

簡単に言えば、監視が「固定カメラで特定の場所を監視する」イメージだとすると、オブザーバビリティは「システム全体に多数のセンサーを配置し、あらゆる角度から詳細な情報を収集・分析する」イメージです。

## なぜ今、オブザーバビリティが重要なのか？

現代のシステムは、マイクロサービス、コンテナ、サーバーレスといった技術の普及により、ますます複雑化・分散化しています。このような環境では、従来の監視だけでは対応しきれない問題が多発するようになりました。

- システムの複雑化: サービス間の依存関係が複雑になり、ある箇所の問題が予期せぬ別の箇所に影響を及ぼすことがあります。
- 変化の速さ: アジャイル開発やCI/CDによって、システムの変更が頻繁に行われるため、常にシステムの挙動を把握しておく必要があります。
- 未知の問題への対応: 予期せぬ障害やパフォーマンス劣化が発生した際、その原因を迅速に特定し、復旧することがビジネス継続のために不可欠です。
オブザーバビリティは、これらの課題に対応するための強力な手段となります。

## オブザーバビリティを構成する3つの柱（テレメトリーデータ）

オブザーバビリティを実現するためには、システムが出力する以下の3種類のテレメトリーデータが不可欠です。

1. メトリクス（Metrics）:

    - 時間経過とともに変化する数値データです。
    - CPU使用率、メモリ使用量、リクエスト数、エラーレート、レイテンシなど、システムのパフォーマンスや健全性を示す定量的な情報を提供します。
    - グラフ化してトレンドを把握したり、異常を検知するためのアラート設定に利用されます。
    - 例: `http_requests_total{method="GET",path="/api/users"} 12345`  

1. ログ（Logs）:

    - システムやアプリケーション内で発生したイベントの記録です。
    - 「ユーザーAがログインしました」「データベースへの接続に失敗しました」といった、具体的なイベントの発生時刻、内容、関連情報などをテキスト形式で記録します。
    - 問題発生時の詳細な状況把握や、監査証跡として利用されます。
    - 例: `2023-10-27T10:30:00Z INFO User "Alice" logged in from 192.168.1.100`
1. トレース（Traces）:

    - 複数のサービスをまたがるリクエストの処理経路を可視化するものです。
    - 分散システムにおいて、あるユーザーリクエストがどのサービスを、どのような順序で、どれくらいの時間かけて通過したかを追跡できます。
    - パフォーマンスボトルネックの特定や、サービス間の依存関係の可視化に非常に有効です。
    - OpenTelemetryなどの標準化された技術が普及しています。

これらのデータを単独で見るのではなく、統合的に分析することで、システムの全体像を深く理解し、問題発生時に迅速に原因を特定できるようになります。

### オブザーバビリティを実践するために

オブザーバビリティを実践するためには、以下のようなステップが考えられます。

1. テレメトリーデータの収集:

    - アプリケーションやインフラから、メトリクス、ログ、トレースを適切に出力するよう設定します。
    - OpenTelemetry などの標準化されたライブラリやエージェントの導入を検討しましょう。
    
1. データの一元管理と可視化:

    - 収集したデータを一元的に集約し、保存するプラットフォームを導入します。
    - Prometheus、Grafana、Elasticsearch、Kibana、Jaeger、Zipkin といったオープンソースツールや、Datadog、New Relic、Dynatrace といった商用SaaSなど、様々な選択肢があります。
    - それぞれのデータが関連付けられ、相関分析ができる環境を構築することが重要です。
1. チーム文化の醸成:

    - オブザーバビリティは単なるツール導入だけでなく、開発チームと運用チームが協力し、システムの状態を常に意識し、改善していく文化が重要です。
    - オブザーバビリティの概念を理解し、活用できるスキルを身につけるための教育や共有も大切です。

## まとめ
オブザーバビリティは、現代の複雑なシステムを安定稼働させ、ビジネスを加速させるための重要な要素です。単なる監視の強化にとどまらず、システムの「なぜ？」を深く掘り下げ、未知の課題にも対応できる能力を組織にもたらします。

この記事が、皆さんのオブザーバビリティへの第一歩となれば幸いです。ぜひ、ご自身のシステムにオブザーバビリティを導入し、その恩恵を実感してみてください。

この記事へのフィードバックやご意見、お待ちしております！
Karabiner-Elementsでルールをインポートできないときの対処法に関する備忘録

# はじめに
タイトルの通りですが、[Karabiner-Elements](https://karabiner-elements.pqrs.org/)で新たにルールを追加しようと[complex_modifications rules](https://ke-complex-modifications.pqrs.org/)に飛んで`Import`を押下したものの、ルール一覧に追加されない場合の対処法の備忘録です。
![Karabiner-Elements_Import1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4093881/4d0880fb-7fa3-4212-a4ec-118609db2583.png)

> 問題なければ、下の画像のようにComplex Modificationsウィンドウの下部にインポートしたルールが表示されるはずです。
> 画像は、¥キーに\を割り当てるルールをインポートした際のものです。
> ![Karabiner-Elements_Import2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4093881/6f36afb1-a368-406e-8df7-9ed73e308ff8.png)


# 想定環境
- macOS: Sequoia15.5
- ターミナル: バージョン2.14
- Karabiner-Elements: v15.3.0
    - この記事をお読みになっているということは、既にKarabiner-Elementsのダウンロードはお済みだと思いますので、ダウンロード方法は割愛させていただきます
    - ちなみにですが、私は@kunitさんの記事[^1]を参考にさせていただきました

https://qiita.com/kunit/items/f6ec7e159d93002bfc48


# 手順
- 以下の手順はKarabiner-ElementsのGitHubのIssue#1814[^2]を参考にしています
- `bash`とある部分は適宜ターミナルで実行してください

https://github.com/pqrs-org/Karabiner-Elements/issues/1814

## 1. Karabiner-Elementsのディレクトリのパーミッションを確認
```shell: bash
ls -la ~/.config/karabiner/assets/complex_modifications
```

- `No such file or directory`と言われたら[2. Karabiner-Elementsのディレクトリを作成](#2-karabiner-elementsのディレクトリを作成)へ進む
- 言われなければ[3. パーミッションと所有権を設定・変更](#3-パーミッションと所有権を設定変更)へ進む

## 2. Karabiner-Elementsのディレクトリを作成
```shell:bash
sudo mkdir -p ~/.config/karabiner/assets/complex_modifications
```

## 3. パーミッションと所有権を設定・変更
```shell:bash
sudo chown -R $(whoami) ~/.config/karabiner
sudo chmod -R 755 ~/.config/karabiner
```

## 4. Karabiner-Elementsを再起動
左のメニューから`Quit, Restart`を選択し、`Restart Karabiner-Elements`をクリック
![Karabiner-Elements_Quit,Restart.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4093881/37ecff63-4fd4-4921-a4d8-2d1ec4240518.png)


# おわりに
再度、手順通りにインポートすれば成功するはずです。

卒論執筆にあたって最近流行りのOverleafを導入したのですが、これまで使っていたTeXShopとは違って¥ではなく\を使う必要があり、これまで以上に\の使用頻度が高まったためKarabiner-Elementsを利用することにしました。

初めてKarabiner-Elementsを導入したので、うまく設定できていなかったのだと思いますが、インポートできず困っていたので、備忘録として残しておきます。

同様の症状に悩まれている方の助けになれば幸いです。

[^1]: [Qiita: JIS配列のMacで、バックスラッシュをさくっと入力する方法(JetBrainsのIDE対応)](https://qiita.com/kunit/items/f6ec7e159d93002bfc48)
[^2]: [GitHub: Can't import complex rules from web #1814](https://github.com/pqrs-org/Karabiner-Elements/issues/1814)
WindowsエクスプローラーのコンテキストメニューからUbuntu(WSL2)を起動したい

WindowsエクスプローラーのコンテキストメニューからWSL2のUbuntuをすぐに起動したいのです。

## 前提

WSL2にUbutuをインストール済み

## 設定内容

次の内容を任意のファイル(拡張子は.reg)に保存し、そのファイルをダブルクリックして実行します。
(管理者で実行する必要がある思います)

```bash
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\Directory\Background\shell\WSL-Ubuntu]
@="Ubuntu ‚ÅŠJ‚­"
"Icon"="C:\\Windows\\System32\\wsl.exe"

[HKEY_CLASSES_ROOT\Directory\Background\shell\WSL-Ubuntu\command]
@="wsl.exe -d Ubuntu -e sh -c \"cd \\\"$(wslpath '%V')\\\"; exec bash\""
```

## 確認

正しく設定できるとWindowsエクスプローラーのコンテキストメニューに```Ubuntu で開く```が追加されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83842/738a4c22-0192-4cb9-be4f-de0e8f1bbc7c.png)


## 余談

- ```ターミナルで開く```でWindows ターミナルを起動してから、```wsl.exe```を実行しても同じです。
- Windows エクスプローダーのアドレスバー(?)にwslと入力して、Enterでも同じです。
Instanaで実現するSREのベストプラクティス 第1章 SREとInstanaの基本

執筆者：小畑　啓、監修：山﨑政憲
# はじめに
本記事では、SREとInstanaについて解説していきます。
InstanaとSREやオブザーバビリティの関係性について理解を深めたいと思い、調査することにしました。
InstanaやSRE領域に関心がある方の参考になれば幸いです。

# 1.1 SREとは何か
### SREの概要
SRE（Site Reliability Engineering）は、Googleが提唱したシステム運用とソフトウェアエンジニアリングを融合させたアプローチです。

SREの目的は、システムやサービスにおいて適切なレベルの信頼性を持続的に達成しながら運用の自動化と効率化を進めることにあります。
従来のシステム運用では、開発チームが新しい機能を実装して、運用チームがそれを管理・維持するという分業が一般的でした。しかし、この方法では以下のような課題が生じます。

・開発と運用の対立：開発チームは新機能のリリースを優先し、運用チームは安定性を重視するため、リリースの頻度やシステム変更が制約される。
・運用負荷の増大：システムの規模が拡大するにつれ、手動対応が増えて運用コストが上昇する。
・障害対応の遅れ：監視やアラートの仕組みが整っていないと、問題が発生しても迅速に解決できない。

これらの課題を解決するために人手の運用作業を積極的に自動化して、運用業務の信頼性と継続性を向上させるという考え方を導入しました。

### SREの基本原則
#### 1. SLA・SLO・SLI
SREの概念を理解する上で、SLA・SLO・SLI は密接に関連しています。
SLOとSLIを定義することで、サービスの信頼性目標を明確にして、測定可能な形で管理することが可能になります。また、SLO違反が発生した場合のアラートや対応の基準となります。

・SLI（Service Level Indicator）：サービスレベルを測定するための具体的な指標（例：可用性、レイテンシ、エラー率）
・SLO（Service Level Objective）：SLIに基づいて達成したいサービスレベルの目標値（例：可用性を99.9%以上にする）
・SLA（Service Level Agreement）：SLOが達成できなかった場合にユーザーに対して何らかの補償などを約束する法的な契約

SLAについては主にビジネスサイドの担当者が判断・決定するケースが多く、SRE担当者は主にSLO・SLIの策定を担当します。

#### 2. エラーバジェット
SREは信頼性とイノベーションの両方を支えるためにエラーバジェットという考え方を採用しています。エラーバジェットは、サービスの信頼性がどの程度損なわれても許容できるかを示す指標です。

SREでは、許容範囲内のエラーをエラーバジェットとして管理し、これを超えない範囲で新機能のリリースや変更を進めます。

#### 3. 自動化と効率化
SREの基本的な考え方は運用作業の自動化です。手作業で行う監視やデプロイをできる限りコード化して、運用の負荷を削減します。
これにより、SREエンジニアは単純なオペレーションではなく、システムの信頼性向上に集中できます。

#### 4. オブザーバビリティ
信頼性を確保するためには、システムの状態を詳細に観測することが不可欠です。オブザーバビリティとは、システムの内部状態を外部から把握できる能力を指し、以下の要素で構成されます。

・メトリクス（Metrics）：定期的にグループ化あるいは収集された測定値の集合
・ログ（Logs）：システムの動作記録
・トレース（Traces）：マイクロサービス間もしくは異なるコンポーネント間におけるイベントやトランザクションの連携の記録

#### 5. インシデント対応とポストモーテム
SREでは、インシデントが発生した際の対応手順を明確にして、復旧後には必ずポストモーテムを行います。障害の原因分析と再発防止策を文書化して、組織全体で共有します。
ポストモーテムの徹底的な文書化や全員でのレビューにより、チームは失敗から学び、業務品質や製品の信頼性を向上できます。

#### SRE導入のメリット
SREを導入することで、以下のメリットが得られます。

・システムの信頼性向上：可観測性やSLO管理により、問題の早期発見と対策が可能
・運用負荷の削減：自動化により、エンジニアの手作業を大幅に削減
・迅速なインシデント対応：エラーバジェットとポストモーテムにより、適切な運用と改善が可能
・開発速度の向上：信頼性とリリースのバランスを取り、新機能を迅速に展開できる

# 1.2 Instanaとは：可観測性ツールの基礎
#### Instanaの概要
InstanaはIBMが提供するオブザーバビリティツールで、リアルタイムでシステムの状態を把握し、異常検知やパフォーマンス分析を行うための強力なツールです。

#### Instanaの主な特徴
Instanaの主な特徴は下記の通りです。
・問題をリアルタイムで把握可能
・システムのボトルネックを特定
・最小限の設定で導入が可能

#### InstanaがSREに貢献する領域
以下の内容について各章で解説します。
・リアルタイム監視：システム全体の状態をリアルタイムで把握（第2章）
・動的ベースライン設定：異常検知を自動化し、適切なアラートを送信（第2章）
・トレース分析：リクエストごとの処理フローを可視化し、ボトルネックを特定（第3章）
・インシデント管理の効率化：障害発生時に根本原因を迅速に特定（第3章）
・SLO/エラーバジェットの管理：目標達成を支える許容範囲を定め、信頼性と開発速度のバランスを取る（第4章）
・パフォーマンス最適化：システムのボトルネックを定量的に分析し、改善を促進（第6章）

# 1.3 SREとInstanaの相性の良さ
Instanaは、サーバーの構成やシステム間のデータ連携を自動で検出し、リアルタイムで可視化します。これにより、複雑なサービスの依存関係を手動で把握する必要がなくなります。

さらに、機械学習を活用してインフラの状態やアプリケーショントレース、各種メトリクスを分析し、異常を検知します。
これらの機能は、SREエンジニアがシステムの信頼性を維持し、障害の予兆を早期に発見するのに役立ちます。

InstanaはSREのニーズに応える強力なツールであり、システムのオブザーバビリティと信頼性の向上に大いに貢献します。
Python 仮想環境の作成・入り方


---



### 1. Python仮想環境を作成する

```bash
python -m venv env
```

* `env` は仮想環境のフォルダ名（例：`.venv`, `myenv` などお好みで）

---

### 2. 仮想環境に入る（アクティベート）

#### ✅ macOS / Linux の場合：

```bash
source env/bin/activate
```

#### ✅ Windows の場合：

```bash
.\env\Scripts\activate
```

* 入るとプロンプトが `(env)` のように変わる
  例：`(env) user@pc project %`

---

### 3. 仮想環境内でパッケージをインストール

```bash
pip install パッケージ名
```

* 例：`pip install numpy`
* 他のプロジェクトには影響しません。

---

### 4. 仮想環境から抜ける（ディアクティベート）

```bash
deactivate
```

---

### 5. よく使う補助コマンド

| 内容              | コマンド                              |
| --------------- | --------------------------------- |
| インストール済み一覧を見る   | `pip list`                        |
| パッケージ情報をファイルに出力 | `pip freeze > requirements.txt`   |
| ファイルから一括インストール  | `pip install -r requirements.txt` |

---

## 💡 補足：おすすめの使い方スタイル

```bash
# 1. プロジェクトディレクトリで仮想環境を作成
python -m venv env

# 2. 仮想環境に入る
source env/bin/activate  # Windowsなら .venv\Scripts\activate

# 3. 必要なパッケージをインストール
pip install -r requirements.txt
```

* `.venv` を `.gitignore` に追加して、Git管理から除外するのが一般的です。

---
Databricks SQLアラートが新しくなりました！

V2と呼称されており、以前のアラートはレガシーと呼ばれるようになりました。

https://docs.databricks.com/aws/ja/sql/user/alerts

:::note info
**注意**
執筆時点では[ベータ版](https://docs.databricks.com/aws/ja/release-notes/release-types)です。
:::


# Databricks SQLのアラートとは

Databricks SQLの**アラート(Alerts)** 機能は、クエリ結果に基づいて特定の条件が成立したときに、メールやWebhookで通知を送る仕組みです。主に以下の目的で使用されます：

- 異常検知（売上急減など）
- SLA監視（定時実行の失敗検出）
- 経営レポートの自動通知

## 構成要素

| 項目 | 説明 |
|:--|:--|
| SQLクエリ |  通知対象となるデータクエリ |
|  条件（条件式） | クエリの出力値に基づくしきい値や論理条件  |
| 通知手段  |  メールまたはWebhook（Slackなどに対応） |
|  スケジュール |  クエリの実行頻度（例：毎時間、毎日） |

	
# アラートV2の有効化

プレビューで**SQL Alerts V2**をオンにします。

![Screenshot 2025-05-22 at 12.51.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7ff3ea5a-7e34-4a27-b102-1b62906f620b.png)

# ウォークスルー

機能を有効化して、サイドメニューから**アラート**にアクセスします。アラートとレガシーアラートタブが表示されます。

![Screenshot 2025-05-22 at 13.51.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/a3d9650b-48ad-40be-bae3-a1f8e6b2c5b6.png)

アラートタブに切り替えて、アラートを作成します。

![Screenshot 2025-05-22 at 13.52.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/db816dd3-ee2b-4008-a48e-091d91e77514.png)

右上のボックスでSQLクエリーを記述します。カタログエクスプローラにもアクセスできます。

![Screenshot 2025-05-22 at 13.53.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7e8d25f2-2297-4a09-8df5-bf90470ddeca.png)

すると左側の**条件**からクエリー結果にアクセスできるようになるので、条件を指定します。判定を行う列(値列)やしきい値には静的な値だけでなく、集合関数を適用することができます。

![Screenshot 2025-05-22 at 13.55.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e208259f-6be4-4f5d-9439-fd4ea23b54b1.png)
![Screenshot 2025-05-22 at 13.55.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/c8b17a55-e498-4897-b9bf-7d088fcdb9f6.png)

また、条件を設定した状態で、**テスト条件**をクリックすることで、アラートが発呼されるかどうかを確認することができます。

![Screenshot 2025-05-22 at 13.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/cb31e7c7-46d3-4483-a559-f7f286e91a5e.png)

通知先やスケジュールを設定します。**Advanced**では、OK時(アラートが発呼されなくなった)さいに通知を行うかどうか、通知のテンプレートなどを設定できます。

![Screenshot 2025-05-22 at 13.17.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/7cd62d9e-014a-4240-ab80-0e435578043d.png)

最終的には以下のような設定になりました。

![Screenshot 2025-05-22 at 13.15.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f9854f9-a0c3-40e6-b717-0121507d8db0.png)

作成をクリックすることで、アラートが作成されます。

![Screenshot 2025-05-22 at 13.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/52881c76-9cc9-4321-b772-a83abd85c0b5.png)

設定したスケジュールと条件に従ってアラートが送信されます。

![Screenshot 2025-05-22 at 13.19.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f218308f-c550-4c18-9294-b0f2f7acc527.png)

メールの場合は以下のような形式になります。

![Screenshot 2025-05-22 at 13.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/f9ded132-4962-4495-ba01-004e61779a49.png)


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
Konnectivityで実現！クラウドにあるControl Planeからオンプレやローカルにあるクラスタへの接続を確立するか」

## 🔥 Kubernetesのネットワーク問題を解決！

みなさん、こんにちは！今日はKubernetesの世界で「どうやってクラウドにあるcontrol planeからオンプレやローカルにあるクラスタへの接続を確立するか」という課題に革命を起こした**Konnectivity**について紹介します！

## 💡 単方向通信の仕組み

Konnectivityの仕組みはシンプル！

1. **単方向接続化**: nodeからcontrol planeへ接続を開始
2. **Proxy(gRPC or TCP)の魔法**: 双方向ストリームで通信を確立
3. **トンネリング技術**: 一度確立した接続を使い回す

## 🚀 通信フローを図解！

```
Node側 (Agent) -----接続開始-----> Control Plane側 (Server)
      ↑                                 ↓
      |                                 |
      ←-----双方向データ通信---------------→
```

## 🔍 プロトコルの部分

gRPCで実現するKonnectivityは`AgentService.Connect`という双方向ストリームRPCで全てのControl Planeからの通信をトンネリングします。

- [agent/agent.proto at 8ae445c65f2df27dee5163458bfbbca487fc5862 · kubernetes-sigs/apiserver-network-proxy](https://github.com/kubernetes-sigs/apiserver-network-proxy/blob/8ae445c65f2df27dee5163458bfbbca487fc5862/proto/agent/agent.proto#L15-L24)
- [client/client.proto at 8ae445c65f2df27dee5163458bfbbca487fc5862 · kubernetes-sigs/apiserver-network-proxy](https://github.com/kubernetes-sigs/apiserver-network-proxy/blob/8ae445c6/konnectivity-client/proto/client/client.proto#L15-L104)

## 利用シナリオ

- kubectl execやkubectl logsのようなコマンドを実行する場合
- APIサーバーがクラスタ内のWebhookやAggregation API Service、metrics-serverにアクセスする必要がある場合
- コントロールプレーンとワーカーノードが分離されたネットワークに存在する場合

## 🏁 まとめ

Konnectivityは「接続は一方向、通信は双方向」というアプローチでcontrol planeからクラスタへの通信の方向の問題を解決しています。

## 参考

[Konnectivity サービスのセットアップ | Kubernetes](https://kubernetes.io/docs/tasks/extend-kubernetes/setup-konnectivity/)
TeraStation が不安定な場合の対応

HDD の不具合には様々なパターンが存在します。
中でも OS に認識されない不具合は問題の認識が遅れ被害が拡大する可能性があります。

このような例として、過去に遭遇した問題について説明します。

## 状況

以下のように TeraStation の動作が不安定になりました。

- 管理画面にログインできない、または、ログインできても動作が異常に遅い
- 共有フォルダ自体は参照できる
- LCD にエラー情報は表示されない (DEGRADE MODE にもならない)
- 再起動などを試しても改善しない

## 原因

調査し、最終的に HDD の 1 台が以下の壊れ方をしていたことが判明しました。

- HDD に接続はできる (HDD の型番などは取得できる)
- SMART 情報の取得ができない
- データの読み書きができない(マウントできない)

具体的には Crystal Disk Info で以下のようなステータスが得られました。
Crystal Disk Info は HDD の詳細や状態を確認できるフリーソフトです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761798/444f3259-fbd2-45bb-805c-e15203b29d68.png)

HDD自体は認識されていますが、SMART の結果部分が空白となっており、情報が取得できていないことが分かります。

壊れた HDD は、SMART 情報の取得でエラーになるのではなく、単純に応答を待ち続けてハングしている可能性があります。
そのため、明らかに HDD が壊れているにも関わらずそれを認識できず、
管理画面が不安定になるという現象だけが表面化したと考えられます。

これを放置すると、いずれ別の HDD で不具合が発生した時点で RAID が維持できなくなり修復不能なエラーとなる可能性が高そうです。

## 対応

HDD 情報を参照できないので、外部から見て HDD の不具合と断定することはできません。
以下の手順で HDD 状態を確認します。

1. データのバックアップを行う (念のため)
2. TeraStation の電源を OFF
3. HDD を 1台ずつ取り出して他 PC に接続し、Crystal Disk Info を使用して状態を確認する

結果、上記画像のような異常ステータスの HDD が存在していれば、該当 HDD を新品と交換します。

## おわりに

TeraStation が不安定だからといって、必ずこの問題とは限りません。
挙動が不安定にも関わらず原因が特定できなければ、別の手段で解決を試みる必要があります。

自分では過去に3度ほど同じ現象に遭遇しましたので、
同じような状況で困っている場合には念のため HDD の状態を確認してみることをお勧めします。
【因果推論/探索への誘い】概要のまとめ

# 統計的因果推論と統計的因果探索の概要
統計的因果推論、探索を実業務で使用するために、記事にまとめておきます。
※この記事は生成AIを活用して執筆しています。

## はじめに

統計的因果推論と統計的因果探索は、データ分析において因果関係を理解し、意思決定を行うための重要な手法です。本記事では、これらの手法の定義、目的、手法の違いについて解説します。

## 統計的因果推論

### 定義

統計的因果推論とは、観察データを用いて因果関係を推測する手法のことです。特に、特定の変数が他の変数にどのような影響を及ぼすかを評価します。

### 目的

- **因果効果の評価:** ある変数が他の変数に与える効果を評価し、因果関係を明らかにする。
- **政策立案:** 因果推論を通じて得られた知見を基に、科学的根拠のある政策を策定する。

### 主な手法

- **ランダム化比較試験（RCT）:** 参加者を無作為に割り付け、因果関係を直接評価する。
- **潜在的結果モデル:** 各サンプルの潜在的な結果を考慮し、その差を評価する。
- **回帰分析:** 変数間の回帰関係をモデル化し、因果効果を推定する。

### 課題

- **交絡因子の存在:** 変数間の因果関係を誤って解釈するリスク。
- **外部妥当性の問題:** サンプルが母集団を正確に代表するかどうか。

## 統計的因果探索

### 定義

統計的因果探索は、データから潜在的な因果関係を見つけ出すプロセスです。因果モデルの構築や関係性の特定に焦点を当てます。

### 目的

- **因果構造の発見:** 変数間の因果関係を特定し、新しい仮説を生成する。
- **データ理解の深化:** 複雑なデータセットの中から重要な関係性を発見する。

### 主な手法

- **因果ダイグラム:** グラフィカルモデルを用いて変数間の関係を視覚化する。
- **ベイズネットワーク:** 確率的依存関係を表現し、因果探索を行う手法。
- **非パラメトリック手法:** 特定の分布に依存せずデータから直接因果関係を推定する手法。

### 課題

- **偽因果関係のリスク:** 因果関係が存在しない場合でも関係が見えることがある。
- **大規模データの場合の計算コスト:** 多くの変数を扱う場合に計算が難しくなる。

## 統計的因果推論と統計的因果探索の違い

| 特徴             | 統計的因果推論          | 統計的因果探索          |
|----------------|--------------------|-----------------------|
| 目的             | 因果効果の評価         | 因果関係の発見           |
| データの性質     | 実験データ（RCTなど）   | 観察データ               |
| 使用手法         | 回帰分析、RCTなど      | 因果ダイグラム、ベイズネットワーク |
| 課題             | 交絡因子の存在         | 偽因果関係のリスク       |

## まとめ

統計的因果推論と統計的因果探索は、データ分析において因果関係を理解するための重要な手法です。因果推論は因果効果を評価することに重点を置き、因果探索は因果関係を見つけ出すことに焦点を当てています。これらを適切に活用することで、より科学的で根拠に基づいた意思決定が可能となります。

---

この記事が、統計的因果推論と統計的因果探索の理解を深める手助けになることを願っています。
ITでよく出る英単語集（随時更新）

# セキュリティ関連での頻出単語

**verify**
認証

**Invalid**
無効

# 業務での頻出単語
**Resume**
履歴
**relate**
関連



**such as**
のような、like。
such as A,B,C,and Dのような流れが多い。

**previous**
前

**Increase**
増加
outlookを使いこなすぞ（基礎２）エンコーディング

文字化けの仕組みエンコーディング

## 文字化けとは
 コンピュータが文字を読み込んだ際に、本来表示されるべき文字が別の文字や記号として表示されてしまうことです。

## 文字化けのデメリット
正しい情報を読み取ることができなくなります。

## 発生のタイミング
Webサイトの閲覧時
￥メールの送受信
ファイルのダウンロード
文書の印刷時など

## 文字コード
文字コードは、「個々の文字に対して、個別に数字を割り当てる」ということが仕組みとして組み込まれています。つまりそれぞれの文字や記号に割り当てられた固有の番号。パソコンが理解できるのは数字のみです。パソコンは漢字や英語を出力することはできますが、実際にはそれらの文字を直接理解しているわけではありません。

文字コード例

Unicodeなど
Unicodeは、世界中のほぼすべての文字に対応することを目指した文字コードシステム。Shift_JISが日本語に特化しているのに対し、Unicodeは世界中の言語や文字を包括的にサポートしています。

UTF-8は、2025年現在、ほとんどのPCやスマートフォンなどのデバイスで標準的にサポートされています。可変長エンコーディング方式を採用しており、英数字などのASCII文字は1バイトで表現されます。
一方、日本語や中国語などの非ラテン文字は複数バイトで表現されますが、必要最小限のバイト数でエンコードされるため、データサイズを効率的に抑えることができます。

## 文字化けが起こる主な原因
　ファイルの作成時と、読み込み時で、使用している文字コードの種類・形式が異なっているケースです。

## 具体的に調査
CSV保存形式は
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/750571e2-c38c-436e-be13-8cdc9dfa51f9.png)

UTFー８

該当エクセルファイル上で右クリックして「メモ帳で編集」を選択
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/b2efe5f4-09e9-4957-9dc3-e2ea84763c8a.png">


文字コードは
編集画面でも確認できる
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/ae6db094-1e1c-44d5-b265-a9c38610a9be.png">

今回はUTF-8(BOM付)

## 文字コード変更して保存
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/5e19143d-6cd6-45a1-b9a4-6dd43d3880f5.png">

## outlookのcsvインポートまで戻って
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/99042891-c8e0-4522-aadf-e57cc1616553.png">

正しい日本語が左窓に反映しているので

完了して取り込んでみる
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/007f127b-8fdd-458b-b1bc-678ccdfbf869.png">

うまく取り込んで使うことができました。[shinnフォルダの中身が宛先としてでてきた
![スクリーンショット 2025-05-22 131701.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/4aa34fa7-4a7d-4764-8207-94635c02f025.png)
意外と知らない？ソートの裏の動き（その１）

## はじめに

こんにちは。開発部の雨です。

今回はどの言語でもよく使われているソートの動きとその実装方法について、**全くの初心者**の方にもわかりやすく説明したいと思います。


## ソートとは？

まず、「ソート」とは何でしょうか？

ソートは**リストのデータを決まった順序に並べること**です。  
一般的に「昇順」と「降順」という2種類の並び方があります。

「ソート」と聞くと、多くの人はまず数字を思い浮かべるかもしれません。  
この記事では数字を例に使って説明しますが、**文字列やオブジェクトなどもソートの対象になる**という点も、ぜひ覚えておいてください。


## バブルソート

最初に、バブルソートを説明したいと思います。  
バブルソートは一番**簡単で直感的なソートアルゴリズム**です。

「ソートを実装してください」と言われたとき、多くの人が無意識のうちにこのバブルソートを実装してしまうかもしれません。

泡（バブル）が上に浮かぶようなイメージを持ってください。その泡は数字だと思ってください。  
**大きいほど、上に浮かびます。**

## バブルソートの手順

1. 現在の位置を0に設定する  
2. 現在の位置の値と、次の値を比較する  
3. もし現在の値が次の値より大きい場合、値を交換する（小さい値が下、大きい値が上）  
4. 現在の位置を次の位置に移動する  
5. 末尾に到達するまで、ステップ2〜4を繰り返す  
6. リストの長さを`n`とすると、ステップ1〜5を**n回繰り返す**
## 例

下 → 上の順番と考えてください。

リスト＝[4, 3, 5, 2]

**1回目のループ**
```text
現在位置：0  
4 > 3 → 交換 → [3, 4, 5, 2]

現在位置：1  
4 < 5 → そのまま → [3, 4, 5, 2]

現在位置：2  
5 > 2 → 交換 → [3, 4, 2, 5]
```

**2回目のループ**

```text
現在位置：0  
3 < 4 → そのまま → [3, 4, 2, 5]

現在位置：1  
4 > 2 → 交換 → [3, 2, 4, 5]

現在位置：2  
4 < 5 → そのまま → [3, 2, 4, 5]
```
**3回目のループ**
```text
現在位置：0  
3 > 2 → 交換 → [2, 3, 4, 5]

現在位置：1  
3 < 4 → そのまま → [2, 3, 4, 5]

現在位置：2  
4 < 5 → そのまま → [2, 3, 4, 5]
```

**4回目のループ**
```text
現在位置：0  
2 < 3 → そのまま → [2, 3, 4, 5]

現在位置：1  
3 < 4 → そのまま → [2, 3, 4, 5]

現在位置：2  
4 < 5 → そのまま → [2, 3, 4, 5]


```
## 何でソートされるのか？その仕組み

### 大きい値はいつも上に上がる
ステップ2〜4は何をしているかを理解しなければなりません。  
ステップ2〜4は**大きい値をいつも上にしている**んです。

- 現在の位置の値が次の位置の値より大きい場合：交換されて大きい値が上  
- 現在の位置の値が次の位置の値より小さい場合：交換されなくて大きい値が上  

どちらのケースも**大きい値の方が上**です。  
ステップ4で現在の位置を次の位置に移動すると、現在の位置の値はここまでのリストで一番高い値になります。  
それを知ると、末尾に到達したとき、リストの最後の位置の値は必ず一番高い値です。
### なぜステップ6が必要なのか？

ループ1回目の結果は `[3, 4, 2, 5]` でした。  
一回目の時は「5」は「4」より大きいので、「4」は浮かびませんでした。  
「5」にブロックされて、「4」より小さい値「2」が「4」より上になっていたのです。  

でも、2回目では「5」は最後の位置になって、「4」はブロックされず、最後の位置の左まで浮かびました。  

2番目に大きい値が正しい位置に浮かぶには、  
1番目に大きい値が正しい位置にあるという条件があります。  

この仕組みはリストの中のすべての数字に当てはまります。  
だから、ステップ6が必須です。


## 実装(Python)
```python
def bubble_sort_basic(arr):
    n = len(arr)
    #n回繰り返す
    for _ in range(n):
        for i in range(n - 1):
            if arr[i] > arr[i + 1]:
                #次の値が大きい場合、値を交換
                arr[i], arr[i + 1] = arr[i + 1], arr[i]
    return arr

# 例
lst = [4, 3, 5, 2]
sorted_lst = bubble_sort_basic(lst)
print(sorted_lst)  # 出力: [2, 3, 4, 5]

```
## 時間計算量を測ろう
時間計算量とはプログラムの速さを測る基準です。  
当記事では詳しい説明はしませんが、**簡単に言うと**、処理するデータの量が増えたときに、処理にかかる時間がどれだけ増えるかを表したものです。

実は、上で紹介したバブルソートの実装は**一番効率的な実装ではありません**。  
でも、そのぶんシンプルなので、時間計算量を理解するにはちょうどいいです。

この実装では、`n` 回のループの中で、**さらにリストのすべての要素をループ**しています。つまり、ループの回数は `n × n` 回、すなわち `n²` 回です。

この実装では、正確には内側のループは `n-1` 回になりますが、時間計算量の考え方では **「1」などの小さい差は無視してOK** です。  

なので、`n × (n-1)` もざっくりと `n²` として考えます。

たとえば、リスト `[4, 3, 5, 2]` のように要素数が 4 の場合、`4 × 4 = 16` 回ループします。  

このような処理時間の増え方を、**時間計算量 O(n²)**（オー・エヌ・ジョウ）と表現します。


## まとめ
　当記事ではバブルソートを紹介しました。簡単で直感的なアルゴリズムなので、他のソートアルゴリズムよりは遅いです。
そのため、バブルソートは実践に使われていないです。次回は効率的で実践に使われている、マージソートを説明します。

## 最後に	
**はつかぜ株式会社**では、IT学習や業務に役立つ情報を定期的にお届けしていきたいと思っています。  
システム開発のお問い合わせ・ご相談はこちら:point_down:  

https://www.hatsukaze.co.jp/
Combineメモ

https://iridge-tech.hatenablog.com/entry/2023/10/03/120000

RxSwift での UIButton のタップ処理のイベント購読コード例
button.rx.tap
    .subscribe(onNext: {[unowned self] _ in
        // 何かの処理
    })
    .disposed(by: disposeBag)

Combine Cocoa での UIButton のタップ処理のイベント購読コード例
button.tapPublisher.sink {
    // 何かの処理
}
.store(in: &cancellables)

tapPublisherが提供されてるからできる

combineだけなら

Combine のイベント購読コード例
publisher.sink {
    // 何かの処理
}
.store(in: &cancellables)
NotebookLM の音声要約で「スマホソフトウェア競争促進法」をサクッと把握する手法

## はじめに
公正取引委員会が公開した「スマホソフトウェア市場の健全な競争促進に関する指針」は、アプリ事業者やプラットフォーム事業者にとって今後の対応方針を示す重要ドキュメントです。ただし全文を読むのは時間がかかるので、NotebookLM の音声要約機能を活用し、特に自社アプリに関わる部分だけ短時間でキャッチアップするワークフローを紹介します。

- **PDF（指針案）**  
  https://public-comment.e-gov.go.jp/pcm/download?seqNo=0000292917

---

## 必要なもの
- NotebookLM アカウント  
- 上記PDF（指針案）ファイル  

---

## 手順

### 1. PDF を NotebookLM に読み込む
1. NotebookLM の「Sources」からPDFをアップロードまたはURLを登録  
2. アップロード後、該当ソースにチェックを入れ  
3. “Discover” → “Create an Audio Overview” をクリック  

### 2. 音声要約のカスタマイズ
「Customize Audio Overview」に以下のプロンプトをコピペしてください。  
自社アプリ（例：電子書籍）に関わる条項を重点的に深掘りするよう指示します。

```text
「スマホソフトウェア市場の健全な競争促進に関する指針」を読み込んで、
音声で以下を簡潔に要約してください。

1. 全体の目的（市場競争の促進）
2. 開発者・プラットフォーム事業者向けの主要ルール
3. 電子書籍アプリに関係する条項の解説
4. 運営チーム向け要点と対応策
```

![Screenshot 2025-05-22 at 12.50.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82835/fdb3bbda-c367-426a-8a4b-13721a93d9a4.png)


### 3. 音声要約を実行し、文字起こしする
1. 「Generate」をクリックして要約音声を作成  
2. 再生後、NotebookLM のチャット画面で「文字起こしを追加」を選択  
3. 自動で生成されたテキスト要約を確認・修正  

### 4. 自社アプリ関連の箇所だけピックアップ
- **手数料設定**：プラットフォーム利用料に関する条文を抽出  
- **データ移行／相互運用性**：ユーザー情報取り扱いの要件を確認  
- **優越的地位の乱用防止**：SDK や課金 API の制限事項を洗い出し  

### 5. 社内共有用にまとめる
以下のように Markdown 形式でまとめると、Slack や Confluence への投稿がラクになります。

```markdown
## スマホソフトウェア市場競促法 指針サマリ

### 1. 全体の目的
- 市場の健全な競争を確保し、利用者保護とイノベーションの両立を図る。

### 2. 主要ルール
- プラットフォーム側の優越的地位乱用禁止  
- 技術情報の囲い込み防止  

### 3. 電子書籍アプリへの影響
- **手数料設定**: App Store/Play Store の手数料上限に留意  
- **データ移行**: ユーザーデータのエクスポート手段を用意  
- **API 利用**: 決済・SDK 利用での不当制限禁止  

### 4. 対応策
- 契約書・利用規約のレビュー  
- 社内開発ガイドラインの改訂  
- 次回リリースまでに要件対応済みチェックリスト作成
Ruby, Ruby on Railsのローカル環境をdevcontainerで構築する

手順も少なく環境構築するまでの時間が短く構築するまでの体験がとても良かったです。

- 参考
     - [Automate dev container creation](https://code.visualstudio.com/docs/devcontainers/create-dev-container#_automate-dev-container-creation)
     - [DevContainerでRails環境を作ってみる](https://zenn.dev/lecto/articles/019a6419055e69#devcontainer%E3%81%A7rails%E7%92%B0%E5%A2%83%E3%82%92%E4%BD%9C%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B)
- ローカル環境
    - Windows11
    - Docker Desktopインストール
    - VSCodeインストール
    - Dev Containers 拡張機能インストール
- 手順
    - 作業ディレクトリを作成
    - 作業ディレクトリ内に移動
    - `Dev Containers: Add Dev Container Configuration Files...`を選択
    - テンプレート一覧から`Ruby on Rails Postgres`を選択
    - パッケージなど必要なものは特にないので選択せず `OK` をクリック
    - 画面右下に出てくる`Reopen in container`をクリック
    - ターミナルで`rails -v`を実行してバージョンが表示されれば環境構築成功
Linux環境でPowerShellのTab補完の挙動をWindows環境と同様にする

Linux風にする方法はすぐに見つかったのですが、逆はなかなか見つからなかったので
MacでPowerShellを使う場合も同様です

`profile.ps1`に追記します

## 方法１：Tabの挙動を上書きする
```powershell:profile.ps1
Set-PSReadLineKeyHandler -Key Tab -Function TabCompleteNext
Set-PSReadLineKeyHandler -Key Shift+Tab -Function TabCompletePrevious
```

## 方法２：キーバインドをWindowsにする
```powershell:profile.ps1
Set-PSReadLineOption -EditMode Windows
```
【データ分布のベイズ推論】製造業の異常検知に向けて

# データ分布のベイズ推論について

業務で利用/活用するため、まとめておこうと思い立ちました。
※こちらの記事は生成AIによる自動生成を活用しています。

## はじめに

データ分析において、データの分布を理解することは非常に重要です。特に、ベイズ推論は不確実性を考慮した推測を行うための強力な手法です。本記事では、データ分布のベイズ推論について、基本的な概念から具体的な応用例までを解説します。

## ベイズ推論の基本概念

ベイズ推論は、ベイズの定理に基づく推論手法です。ベイズの定理とは以下のように表されます。

\[
P(H|D) = \frac{P(D|H) \cdot P(H)}{P(D)}
\]

ここで、
- \(P(H|D)\)：データ \(D\) に基づく仮説 \(H\) の事後確率
- \(P(D|H)\)：仮説 \(H\) の下でのデータ \(D\) の尤度
- \(P(H)\)：仮説 \(H\) の事前確率
- \(P(D)\)：データ \(D\) の周辺尤度

この定理によって、事前情報を元に新しいデータから得られた情報を統合して、より良い推測が可能となります。

## データ分布の特定

データ分析ではしばしば、観測されたデータがどのような分布に従っているのかを特定する必要があります。ベイズ推論を用いることで、以下のステップを踏んでデータ分布を特定できます。

### 1. 事前分布の設定

まず、考えられる仮説（分布モデル）に対する事前分布を設定します。これにより、データに対する初期の見積もりを行います。例えば、正規分布、ポアソン分布、ベータ分布などが一般的に用いられます。

### 2. 尤度の計算

次に、観測されたデータに基づいて尤度を計算します。これは、特定の分布モデルの下でデータがどれだけ観測されるかを示します。

### 3. 事後分布の更新

尤度を用いて、事前分布を更新し、事後分布を計算します。これによって、観測されたデータを基に分布の推定が行われます。

## 具体的な例

では、実際のデータを用いたベイズ推論の例を見てみましょう。

### 例: 正規分布の推定

仮に、ある製品の生産量に関するデータがあり、これが正規分布に従うと仮定します。以下の手順でベイズ推論を適用します。

1. **事前分布の設定**: 製品の生産量が平均 \(\mu_0\)、分散 \(\sigma^2_0\) の正規分布 \(N(\mu_0, \sigma^2_0)\)に従うと仮定します。
  
2. **データの収集**: 実際の生産量データ \(D = [x_1, x_2, \ldots, x_n]\) を収集します。

3. **尤度の計算**: データが正規分布に従う仮定の下での尤度を計算します。
  
4. **事後分布の更新**: 尤度と事前分布を用いて、事後分布 \(P(\mu | D)\) を計算し、更新します。

このプロセスによって、データに基づいたより正確な生産量の推定が得られます。

## ベイズ推論の利点と課題

### 利点
- **柔軟性**: 様々な分布モデルに適用でき、複雑なデータにも対応可能。
- **事前知識の活用**: 事前分布を設定することで、専門家の知識を推論に生かすことができる。

### 課題
- **計算コスト**: 特に複雑なモデルの場合、事後分布の計算が難しいことがある。
- **事前分布の選択**: 適切な事前分布を選定することは倫理的・実務的な判断が必要。

## まとめ

ベイズ推論はデータ分布の理解において非常に有用な手法です。事前知識を持ち寄り、データに基づいて推定を行うプロセスが特徴です。今後のデータ分析や機械学習の分野で、ベイズ推論を積極的に活用していきましょう。

ここまでの内容を元に、実際にデータを持っている方は、ベイズ推論を活用してモデルを構築し、結果を分析することをお勧めします。理解を深めるためにも、自らの手でさまざまな例を試してみてください。

---

この記事がデータ分布のベイズ推論についての理解を深める一助となれば幸いです。ぜひ、Qiitaにて皆さんの意見や経験も共有してください！
設定駆動型パイプライン（Configuration-Driven Pipeline）のすすめ


実験管理ってややこしいですよね？

PoC案件で「ちょっと試してみるだけなんだけどさ」と書き始めた `main.py`。
気づいたら1000行近くになっていて、ファイル分割もうまくいかない。
とりあえずGitにはコミットしてるけど、どのコミットがどんなパラメータでどんな結果だったかよくわからない。
MLflow？使ったことあるけど、ちゃんとやるには重たいし、正直そこまでする気になれない。

そんな状況、心当たりありませんか？

## 「実験したはずなのに再現できない」問題

実験を繰り返しているとこんなことが起こります：

* あの時のパラメータなんだったっけ？
* 前のログどこやったっけ？`main2.py`だったかな…
* あの時の評価結果、上書きして消えちゃった…

「パラメータを変える」のは簡単なんですが、「**その結果をちゃんと覚えておく**」のが難しいんですよね。
これをちゃんとやるためにGitやMLflowを使うのもアリなんですが、やっぱりPoCレベルだとそこまでするのはしんどい。

## 設定駆動にしよう：「コードはそのまま、設定で変える」

解決策はシンプルです。

> **コードはいじらない。変えるのは設定ファイルだけにする。**

つまり、`main.py` に直接 `model_name = "gpt-3.5-turbo"` みたいに書くのではなく、
外部の `config.yaml` に書いて、それを読み込むようにする。

### 具体例：NLP/LLM開発向け設定

```yaml
# config.yaml
model:
  backbone: "gpt-3.5-turbo"
  max_tokens: 512
  temperature: 0.7

task:
  prompt_template: "templates/qa_prompt.txt"
  input_file: "data/questions.csv"
  output_file: "results/answers.json"
```

```python
# main.py
import yaml

with open("config.yaml") as f:
    config = yaml.safe_load(f)

model_name = config["model"]["backbone"]
max_tokens = config["model"]["max_tokens"]
temperature = config["model"]["temperature"]

prompt_path = config["task"]["prompt_template"]
input_file = config["task"]["input_file"]
output_file = config["task"]["output_file"]

# 以下は例：モデル呼び出しに使う
# response = call_llm(model_name, prompt, max_tokens, temperature)
```

こうしておけば、同じコードで違う設定をいくらでも試せます。
**「変更」はYAMLでやって、「実行」はPythonでやる**という役割分担です。

## 最小構成で始められる実験管理フロー

例えば、以下のような構成にしておくと便利です：

```
project/
├── configs/
│   ├── exp1.yaml
│   └── exp2.yaml
├── runs/
│   ├── exp1/
│   │   ├── config.yaml
│   │   ├── result.json
│   │   └── logs.txt
│   └── exp2/
├── main.py
└── templates/
    └── qa_prompt.txt
```

### ポイントは3つ：

1. **`configs/`に設定ファイルを置く**
   → 実験ごとの設定を分けて保存できる

2. **`runs/`に毎回コピーする**
   → 実行時に `config.yaml` を `runs/expN/` にコピーしておけば再現性ばっちり

3. **ログや評価結果も `runs/expN/` に保存する**
   → 実験単位でまとめて管理できる

```bash
python main.py --config configs/exp1.yaml
```

こんなシンプルな仕組みでも、だいぶスッキリします。

## 「ちゃんとやらなくていい」けど「わからなくならない」

設定駆動にすることで得られる最大のメリットは、**ちゃんと設計しなくても、あとから困らない**ことです。

* コードの分岐が増えない
* あとから見ても何をやったかすぐわかる
* 別ファイル (`main2.py` とか) に逃げなくて済む

MLflowやHydraのような立派なツールを使わなくても、**「YAML＋runs/ディレクトリ」で必要十分な実験管理ができる**んです。


## まとめ

PoCレベルの実験でも、「ちょっとした設定管理」があるだけで**実験の再現性と見通しの良さが劇的に上がります**。
ライブラリに依存しないシンプルな構成なので、すぐに始められて、やめたくなったらいつでもやめられる。

とりあえず今日から `main.py` にベタ書きするの、やめてみませんか？
良いコード／悪いコードで学ぶ設計入門 第１３章

![ソフトウェア開発と黒猫.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/357904/b6ca7e61-c7f2-4a68-bf8d-0f69dd2c3e59.png)


# 第13章 モデリング ―クラス設計の土台―

モデリングとは、物事の特徴や関係性を図式化して、システム構造の説明に用いる「モデル」を作ること。本章では、その本質と設計への活かし方について、User クラスを例にとりながら詳しく解説されている。

---

## 13.1 邪悪な構造に陥りがちな User クラス

開発初期にはシンプルだった User クラスも、機能の追加や仕様変更を経て、さまざまな用途に使われるようになる。その結果、ユースケースによっては使われないフィールドや null チェックが頻出し、メンテナンス性が低下してしまう。

この現象は、モデルが適切に設計されていないことに起因している。ソースコードがメンテナンス困難になる典型的なパターンであり、自分たちのプロダクトにおいても身に覚えがある内容だった。

---

## 13.2 モデリングの考え方とあるべき構造

モデルは「目的達成のために最低限必要な要素で構成される説明図」であり、目的によってその構成要素は異なる。たとえば「商品」を扱う場合でも、注文時と配送時では必要な情報が異なるように、目的ごとに異なるモデルが存在しうる。

ここで特に印象的だったのは「システムとは目的達成のための手段」であるという考え方。クラスやオブジェクトを「モノ」として捉えるのではなく、「目的達成の手段」として扱うことで、設計の指針が明確になる。

これまでクラス設計の際には「User や Product はモノだからまとめよう」と無意識に考えていた。しかしこの章を読んで、それが設計破綻の原因になることを強く感じた。

---

## 13.3 良くないモデルの問題点と解決方法

User クラスにプロフィール、法人情報、認証情報などが詰め込まれるのは典型的なアンチパターン。目的ごとに異なる要素が混在することで、一貫性を失ってしまう。

この問題を解決するには、モデルを目的に応じて分ける必要がある。たとえば、ログイン認証には「アカウント」モデル、パーソナリティには「プロフィール」モデルといった具合に、目的ごとの構造に再編成する。

また「現実世界での物理的存在と情報システム上のモデルは1:多の関係にある」という視点は、Value Object や Entity を複数用意する設計に納得感を与えてくれた。継承ではなく、目的に特化したクラス設計が求められる理由がここにある。

自分たちの開発現場では、モデルに目的外の情報がどんどん混ざっている実情があり、この章を読みながら「こうあるべきだったのか」と反省する部分も多かった。

---

## 13.4 機能性を左右するモデリング

ソフトウェアの機能性（顧客ニーズを満たす度合い）を高めるには、「そのモデルが本当に捉えるべき本質とは何か？」という視点が重要になる。たとえば、ECサイトにおける「商品購入」は実際には「売買契約」であり、支払条件や法的要件も含めてモデリングされていないと、トラブルを未然に防ぐことができない。

こうした深いモデルを設計するには、ドメインへの深い理解と、何度も改良を重ねる姿勢が不可欠。見切り発車で作られたモデルが後から肥大化し、保守が難しくなることは自分たちも日々実感している。

Model Class が ORM のラッパー以上の役割を持ってしまっている現状では、Service や Repository の構造を明確にしつつ、段階的にリファクタリングしていくしかないと強く思わされた。また、クラスを「共通利用する汎用部品」として設計するべきでないという考え方は、今までの意識を転換する大きなヒントになった。

---

## まとめ

第13章では、クラス設計における「モデリング」の本質を学ぶことができた。

- モデルはモノではなく、**目的達成の手段**
- クラス設計は目的ごとに特化させ、責任を一つに絞る
- モデリングを通じてシステム構造の一貫性と変更耐性を高める
- モデルとコードは相互にフィードバックし合う関係であるべき
- クラスは再利用性よりも「目的に忠実であること」が最優先

今後の開発においても、「なぜこのクラスが必要なのか」「何を達成したいのか」という視点からモデリングを行うことが、結果的にソフトウェアの品質とスピードを両立させる鍵になると実感した。
AI駆動開発をやってみた結果




## 目次

1.  [目的](#目的)
2.  [経緯](#経緯)
3.  [利用ツール一覧](#利用ツール一覧)
4.  [やってみた結果](#やってみた結果)
    1.  [① 大雑把な指示での挑戦](#①-大雑把な指示での挑戦)
    2.  [② ProjectRuleの導入と課題](#②-projectruleの導入と課題)
    3.  [③ ProjectRuleの分割](#③-projectruleの分割)
    4.  [④ 指示の分割による品質向上（成功例）](#④-指示の分割による品質向上成功例)
5.  [まとめ](#まとめ)

## 目的

昨今、AIによるコード生成の話題が非常に活発になってきており、その実力がどれほどのものなのか、実際に試してみたいという思いが強くなりました。本記事では、AI駆動開発の一端を体験した結果を共有します。

## 経緯

「AIがコードを書いてくれるらしい」という話を耳にする機会が増え、実際に開発現場でどの程度活用できるのか、また、どのような点に注意すれば上手く付き合えるのかを探るため、簡単なWebAPI開発をAIに依頼してみることにしました。

## 利用ツール一覧

今回の検証で利用したツールは以下の通りです。

| 項目        | 内容                         |
| :---------- | :--------------------------- |
| IDE         | Cursor Pro                   |
| 利用モデル  | Claude 3.7 Sonnet            |
| 利用言語    | Python                       |
| 作成ツール  | WebAPI                       |

## やってみた結果

### ① 大雑把な指示での挑戦

最初に試したのは、「こんな感じのWebAPIを作って欲しい」といった、かなり大雑把な指示でAIにコード生成を依頼する方法です。

**結果:**

* **生成コードの不安定さ（ガチャ要素）:** 実行するたびに全く異なるコードが生成されました。まるでガチャを引いているような感覚で、期待する出力が得られるかは運次第でした。
* **参照テーブル項目名の変動:** 生成されるコード内で参照しているデータベースのテーブル項目名なども、実行のたびに変わってしまうことがありました。

これでは実用は難しいと感じ、次の手を試すことにしました。

### ② ProjectRuleの導入と課題

次に、Cursorの機能である`ProjectRule`（プロジェクト固有のルールやコーディング規約をAIに認識させる機能）を設定して、コード生成を試みました。

**結果:**

* **ルールの読み飛ばし:** ルールの記述量が多くなるほど（特に数百行を超えるような場合）、AIがルールの一部を読み飛ばしてしまう現象が発生しました。指示したはずの規約が守られていないコードが生成されることがありました。
* **ルールのバランスの難しさ:** 逆にルールが少なすぎると、結局①の「大雑把な指示」と変わらず、生成されるコードの品質が安定しませんでした。

`ProjectRule`は有効な機能だと感じましたが、ルールの量や記述方法には工夫が必要そうです。

### ③ ProjectRuleの分割

`ProjectRule`の読み飛ばし対策として、ルールを複数のファイルに分割し、必要なものだけを都度読み込ませる方法を試しました。

**結果:**

* **コンテキスト数の限界？:** 読み込ませるルールファイルが複数になったとしても、AIが一度に処理できるコンテキストの総量には限りがあるようで、結局ルール全体の量が多ければ読み飛ばしは依然として発生しました。分割自体が直接的な解決策にはなりませんでした。

### ④ 指示の分割による品質向上（成功例）

これまでの試行錯誤を踏まえ、AIへの指示の出し方を変えてみることにしました。一度に全ての機能を作らせようとするのではなく、タスクを細分化し、複数回の命令に分けて実行する方法です。

**具体的な指示の例:**

1.  **最初の指示:** 「指定のテーブル構成に基づいて、Value ObjectとEntityクラスをPythonで作成してください。」
2.  **次の指示:** 「先ほど作成したEntityを使用して、データベースからデータを取得・永続化するためのRepository層のコードを記述してください。」

**結果:**

* **安定した品質のコード生成:** この方法を試したところ、生成されるコードの品質が格段に安定しました。
* **再現性の向上:** 同じ指示を複数回実行しても、ほぼ同様のコードが生成されるようになり、予測可能性が高まりました。

## まとめ

今回のAI駆動開発の試行錯誤を通じて、以下の点が重要だと感じました。

1.  **一発で完璧を求めない:** AIに一度の指示で完璧なコードを生成させようとするのではなく、タスクを細かく分割し、段階的に指示を出す方が、結果的に品質の高いコードを安定して得られます。
2.  **プロンプト内でもステップバイステップで:** 1回のプロンプト（指示）の中でも、処理のステップを明確に区切って指示することで、AIが意図を理解しやすくなり、生成結果が安定する傾向にありました。
3.  **曖昧な指示は避ける:** 大雑把なプロンプトでは、意図しないコードや品質の低いコードが生成されやすく、結果として手戻りが多くなります。具体的な指示を心がけることが重要です。
4.  **ProjectRuleの量に注意:** `ProjectRule`は非常に有効な機能ですが、記述量が多すぎると（筆者の感覚では200行程度でも）AIがルールを読み飛ばしてしまうことがあります。本当に必要なルールに絞り込むか、指示の中で都度重要な点を強調するなどの工夫が必要かもしれません。

AI駆動開発は、まだ発展途上の技術ではありますが、上手く特性を理解し、付き合い方を工夫することで、開発の生産性を向上させる大きな可能性を秘めていると感じました。今後も引き続き、より効果的な活用方法を模索していきたいと思います。