OmniAICreator/Qiita-1.07M huggingface dataset:
GitHub Codespacesで現在のimageを確認

https://mcr.microsoft.com/en-us/artifact/mar/devcontainers/universal

grepしちゃえ
```bash
$ grep image: /workspaces/.codespaces/.persistedshare/creation.log 
2025-05-28 10:33:10.497Z: Using image: mcr.microsoft.com/devcontainers/universal
```

```bash
$ devcontainer-info

Development container image information

- Image version: 2.13.0
- Definition ID: universal
- Source code repository: https://github.com/devcontainers/images
- Source code release/branch: v0.4.11
- Timestamp: Mon, 17 Mar 2025 16:54:35 GMT

More info: https://github.com/devcontainers/images/tree/main/src/universal/history/2.13.0.md
```
RubyのStandardErrorとそのサブクラスの理解

# RubyのStandardErrorとそのサブクラスの理解

Rubyにおける例外処理は、`Exception`クラスを基底とする階層構造で成り立っています。その中でも、`StandardError`は最も一般的な例外クラスであり、`rescue`節で特定の例外クラスを指定しない場合、デフォルトで`StandardError`およびそのサブクラスが捕捉されます。

## StandardErrorの主なサブクラス一覧

以下は、`StandardError`の主なサブクラスです：

- `ArgumentError`
- `EncodingError`
- `FiberError`
- `IOError`
  - `EOFError`
- `IndexError`
  - `KeyError`
  - `StopIteration`
- `LocalJumpError`
- `NameError`
  - `NoMethodError`
- `RangeError`
  - `FloatDomainError`
- `RegexpError`
- `RuntimeError`
- `SystemCallError`
  - `Errno::*`（システム依存のエラー）
- `ThreadError`
- `TypeError`
- `ZeroDivisionError`

これらのエラーは、`rescue`節で例外クラスを指定しない場合に捕捉されます。一方、`Exception`クラスの他のサブクラス（例：`NoMemoryError`、`ScriptError`、`SystemExit`など）は、明示的に指定しない限り捕捉されません。

## StandardErrorを継承しているかの確認方法

Rubyのコンソール（IRBやRailsコンソール）で、特定の例外クラスが`StandardError`を継承しているかを確認するには、`<`演算子や`ancestors`メソッドを使用します。

```ruby
# `<`演算子を使用して確認
ZeroDivisionError < StandardError
# => true

# `ancestors`メソッドを使用して確認
ZeroDivisionError.ancestors.include?(StandardError)
# => true
```

また、`StandardError`のすべてのサブクラスを一覧表示するには、以下のようにします：

```ruby
# Ruby 2.0以降で使用可能
ObjectSpace.each_object(Class).select { |klass| klass < StandardError }
```

このコードは、`StandardError`を継承しているすべてのクラスを配列として返します。ただし、すべてのクラスが読み込まれているとは限らないため、結果は実行環境によって異なる場合があります。
自分の環境だと使っているgemの例外クラスなどが出てきました。

これらの方法を使用することで、特定の例外クラスが`StandardError`を継承しているかどうかを確認できます。
ガンマ関数のグラフの描写について

# はじめに
ガンマ関数は、$\Gamma[p]$と表されるが、$p>0$のときは、広義積分で定義される。一方で、$p<0$の場合は、$p>0$の場合の$\Gamma[p]=\frac{\Gamma[p+1]}{p}$を用いて帰納的に定義される。
そこで、今回は長方形分割による積分値の算出を数値解析を行うことで、ガンマ関数のグラフを描写することができるかを試みる。

以下結果を示す。
1.散布図で表した場合$(-4<p<4)$のとき

![gamma_sum2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/c54a36ad-c73e-4a47-823a-676502ec5a52.png)

上手く無限大を表現することができなかったので、あまりいいグラフは描写することができなかった。

2.散布図で表した場合$(-2<p<2)$のとき

![gamma_sum3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/f7443542-c8fd-46f0-9376-9ce77770bfef.png)

それっぽいグラフは描写できているが、境界付近の値の誤差が大きすぎる。

以下、サンプル点の分布を等間隔ではなく、対数間隔にした場合のグラフを複数示す。

![gamma_sum2220.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/ada15844-ce2b-406e-bb52-f57371673e18.png)


![gamma_sum5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/5c9b8a9c-c389-400b-b787-6eafa1f39f6d.png)


![gamma_sum222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/98eb38c6-e37d-4669-b4ee-15e9e260db45.png)


![gamma_sum4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1686019/03c0fcb4-bd30-40f8-9a0f-af0ea6ef4efa.png)

このように、局部だけで見れば、かなり高い精度でガンマ関数を再現できていることが分かる。



# ガンマ関数について

## p>0のとき
ガンマ関数は、広義積分を用いて以下のように定義される。
```math
\Gamma[p]=\int_{0}^{\infty}x^{p-1}e^{-x}dx
```
## p<0のとき
ガンマ関数の性質として、以下を認めることにする。
```math
\Gamma[p+1]=p\Gamma[p]
```
この場合、

```math
\Gamma[p]=\frac{\Gamma[p+1]}{p}
```

となる。したがって、$p>0$のときのガンマ関数の値を上式に帰納的に代入していくと、$p<0$のときのガンマ関数の値を求めることができる。




# 区分求積法について
区間、$a<x<b$における以下の積分は、無限に分割される短冊状の長方形面積の和であらわすことができる。
```math
\int_a^b f(x)dx = \lim_{n\to \infty} \frac{1}{n}\sum^{n} _{k=1}f(a+\frac{b-a}{n}k)
```
ただし、数値計算では、無限大を上手く扱えないので、有限の大きな数値で代用する。

# プログラム
上記の考えを用いて以下のようなプログラムを作成した。

```python gamma_pn.py
import numpy as np
import matplotlib.pyplot as plt
import japanize_matplotlib
import math

num=100
L=4
p_ary=np.linspace(-L,L,num)
#p_ary=np.logspace(np.log10(1e-6),np.log10(1),num)-1
S_ary=[]
#区分求積法による数値積分
##積分範囲
a=0
#b→∞が理想だが、無限大を表現できないので、大きな値を代入
b=10000
##分割数
n=10000
# 短冊の幅Δx
dx = (b-a)/n
def gamma_s(p):
  # 面積の総和
  if p > 0:
    s = 0
    #print(p)
    for i in range(1,n):
        # x,yの値
        #print(s)
        x1 = a + dx*i
        #print(x1)
        f1 = x1**(p-1)*np.exp(-x1)
        # 面積
        s += dx*f1
    return s
    #print(s)
  else:

    return gamma_s(p+1)/p
# 積分する関数の定義
# def f(x):
#     return x**(p-1)*np.exp(-x)
for i in range(num):
  
  S_ary.append(gamma_s(p_ary[i]))

#plt.plot(p_ary,S_ary)
plt.scatter(p_ary,S_ary)
plt.xlabel("p")
plt.ylabel("Γ(p)")
plt.savefig("gamma_sum.png")
plt.show()
```

これを実行する。（定義域やプロットの分布を変えることで、冒頭に示したようなグラフを得ることができる。）


# まとめ
今回は、ガンマ関数の値を数値積分で算出することができるかを調査した。具体的には、Pythonを用いて、正の引数で定義されるガンマ関数の値をまず計算した。次に、帰納的に推定される負の引数のガンマ関数の値も求めることで、ガンマ関数のグラフ化を試みた。しかし、上手く境界付近や無限小,無限大を扱うことができなかったため、誤差が大きくなってしまった。
【Github Copilot】Sign in with GHE.comと表示された時の対処法

# 環境
- Visual Studio Code
- GitHub Copilot
- GitHub Copilot Chat
# 状況
- Copilot Chatを立ち上げたら、`Sign in to GHE.com`と表示された
- `Sign in with a GitHub.com account`が反応しない
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222532/56b1ac7c-bf1e-43d1-beee-f1d26ccff35d.png)
- ログに`[certificates] Removed xxx expired certificates`と表示された
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/222532/80aaba4b-9854-4c83-ac3a-d72a0d831496.png)


# 対処法・解決方法
1. 設定を開く (`Ctrl`+`,`)
2. `github.copilot.advanced`と入力
3. `Edit in settings.json`をクリック
4. 以下の通りに変更する (`"authProvider": "github-enterprise"`の部分を削除)
    変更前
    ```JSON
    "github.copilot.advanced": {
        "authProvider": "github-enterprise"
    }
    ```
    変更後
    ```JSON
    "github.copilot.advanced": {
    }
    ```

# なぜこうなったのか
正直よく分からない。
気付かぬ間に誤ったショートカットを踏んだのかもしれないし、プロンプト(LLMのではなく)が表示された時に押し間違いをしてしまったのかもしれない。

エラーや状況から一発で解決にたどり着くことが出来ず、やや手間取った。
今後同じ目に遭った人の為に書き残しておく。

# 参考サイト
https://docs.github.com/ja/copilot/managing-copilot/configure-personal-settings/using-github-copilot-with-an-account-on-ghecom?tool=vscode
React + Vite アプリを GitHub Pages にデプロイする方法

## はじめに

今回は React + Vite で作成したアプリを GitHub Pages を使って無料で公開する手順を解説します。
手順は以下の通りです。

## 手順
1. プロジェクトの準備
2. Vite 設定を変更する
3. デプロイ用パッケージを導入
4. package.json にスクリプト追加
5. アプリをビルド
6. GitHub Pages にデプロイ
7. GitHub リポジトリ設定を変更
8. 公開URLを確認


## 1.プロジェクトの準備
まずは React + Vite でプロジェクトを作成し、開発します。

```
npm create vite@latest プロジェクト名 -- --template react
cd プロジェクト名
npm install
npm run dev
```


## 2. Vite 設定を変更する
vite.config.js に base を設定します。
```
import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'

export default defineConfig({
  base: '/react_todo_list/', 
  plugins: [react()],
})
```
## 3. デプロイ用パッケージを導入
ビルド後のファイルを GitHub Pages の gh-pages ブランチに自動でアップするため、gh-pages パッケージをインストールします。
```
npm install --save-dev gh-pages
```
## 4. package.json にスクリプト追加
package.json の scripts に以下を追加し、コマンドでデプロイできるようにします。
```
"scripts": {
  "dev": "vite",
  "build": "vite build",
  "preview": "vite preview",
  "deploy": "gh-pages -d dist"
}
```
## 5. アプリをビルド
以下を実行して、本番用に静的ファイルを生成します。

```
npm run build
```
## 6. GitHub Pages にデプロイ
ビルドしたファイルを gh-pages ブランチに自動でアップロードします。
```
npm run deploy
```
## 7. GitHub リポジトリ設定を変更
GitHub のリポジトリページを開く

「Settings」タブ → 左側メニューの「Pages」をクリック

「Source」で gh-pages ブランチを選択し、保存する

数分待つと公開URLが表示されます
⇩Your site is live at の後がURLです
![スクリーンショット 2025-05-28 19.27.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3949461/b6f09f17-6e33-4ce2-9cfc-e3bf7ce69e70.png)

## 8. 公開URLを確認

公開URLにブラウザからアクセスすると、あなたの React アプリが公開されています！

これで React + Vite アプリを簡単に GitHub Pages で公開できます。
足したり引いたり



Paizaで「N を 0 にできるか？」という謎のミッションに挑戦！ルールは簡単なのに、条件が4パターンもあって書くのが面倒…。最近学んだ論理式（ `||` ）を使って少し簡単にしてみた！
<Br><bR>

## ■ 問題概要

整数 `N`, `A`, `B` が入力される。

- 「N に A を足す or 引く」
- 「N に B を足す or 引く」
この2ステップを1回ずつ使って、N を 0 にできるか判定せよ！

<br>
入力例:

    -10 8 2

出力例:

    YES

<br>

### 考え方（設計図）

操作は「＋A or −A」と「＋B or −B」の2通りずつ。
つまり組み合わせは全部で 4パターン：

    N + A + B
    N + A – B
    N – A + B
    N – A – B

この中に「`0`」になるものがあれば `YES`、なければ `NO`！

<Br>

https://paiza.jp/works/mondai/conditions_branch/conditions_branch__complex_step2

<br><br><br>

## ✅コード例：条件分岐

```js
const rl = require('readline').createInterface({input:process.stdin});


rl.once('line',(input) => {
    const [N,A,B] = input.split(' ').map(Number)

    if (N + A + B === 0){
        console.log('YES');
    }
    
    else if (N + A - B === 0){
        console.log('YES');
    }
    
    else if (N - A + B === 0){
        console.log('YES');
    }
    
    else if (N - A - B === 0){
        console.log('YES');
    }
    
    else{
        console.log('NO');
    }
    
    rl.close();
});  
```
👆これも悪くないけど、最近勉強した `||` を使って少し短くできそう！

<Br><Br>

## ✅コード例：||でスマートに！
```
if (
    N + A + B === 0 ||
    N + A - B === 0 ||
    N - A + B === 0 ||
    N - A - B === 0
) {
    console.log("YES");
} else {
    console.log("NO");
}
```
- `||` を使うことで「どれかひとつでも `true` ならOK！」という自然な書き方に！

<br><Br>

## 気づきメモ ✍️
- `||` は「または」を意味する論理演算子。複数条件を1つの`if`文にまとめられる。
- 分かりやすく簡潔に書くと、ケアレスミス防止につながる！

<br>

## まとめ

条件分岐にも、いろいろな工夫や書き方がある！

<Br><Br><Br>[僕の失敗談(´;ω;｀)と解決法🐈](https://paizabeginner.wordpress.com/2025/05/28/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a%e8%b6%b3%e3%81%97%e3%81%9f%e3%82%8a%e5%bc%95%e3%81%84%e3%81%9f%e3%82%8a/)

<br><br><Br><br><br>

## 💡おまけ：コード例

### ✅ 配列＋ループで簡潔に
```js
const ops = [+A, -A], bOps = [+B, -B];

for (let a of ops) {
    for (let b of bOps) {
        if (N + a + b === 0) ok = true;
    }
}

    Aに対して+Aと-A、Bに対して+Bと-Bをそれぞれループさせて試す。

    N + a + b === 0でチェック。
```
- パターンの増加にも柔軟に対応可能。

<Br><br>


### ✅ 関数化
```js
function canMakeZero(N, A, B) {
    const candidates = [
        N + A + B,
        N + A - B,
        N - A + B,
        N - A - B
    ];
    return candidates.includes(0);
}


const rl = require('readline').createInterface({ input: process.stdin });
rl.once('line', (line) => 
    const [N, A, B] = line.split(' ').map(Number);
    
    
    console.log(canMakeZero(N, A, B) ? "YES" : "NO");


    rl.close();
});
```
- ロジックを関数にまとめてメイン処理をスッキリ。
- `.includes(0)` で `0` が作れるかを判定。

<br><br>

### ✅三項演算子で1行にまとめる
```js
const r = [n+a+b, n+a-b, n-a+b, n-a-b].includes(0) ? 'YES' : 'NO';
console.log(r);
```
- 一行にまとめて短く表現。

<br><br>

### ✅Setで0が存在するかチェック
```js
    const results = new Set([
        N + A + B,
        N + A - B,
        N - A + B,
        N - A - B
    ]);

    console.log(results.has(0) ? "YES" : "NO");
```
- `set` と `.has(0)` で `0` が存在するか簡単に判定。
- `.Set()` を使ってユニークな操作結果を格納。
【Copilot】5分で業務アプリケーション開発に挑戦

2024年、MicrosoftのAI「Copilot」が「Power Apps」の開発環境に統合され、開発支援機能として「Copilot in Power Apps」が搭載されました。これにより、アプリケーションの開発経験がない方でも、手軽に業務アプリケーションの開発およびカスタマイズができるようになりました。
今回は、「Copilot in Power Apps」を活用して簡単に業務アプリケーションを構築する方法をご紹介します。
※本記事に掲載の画面イメージは、2024年10月時点のものです。

## ◆アプリケーション作成イメージ 
こちらは、「Copilot in Power Apps」を使って構築したアプリケーションの完成イメージです。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3849987/b1075596-6853-4792-b218-0b06205aba1c.png)

## ◆アプリケーション前提条件
「Copilot in Power Apps」を利用するための条件は以下の通りです。

・Microsoft 365ライセンス（Business あるいは Enterprise）

・Power Apps 開発者向けプラン（無償） あるいは Power Apps Premium（有償）
　※どちらのプランにもDataverseが含まれます。
　※構築したアプリケーションを公開する場合、有償ライセンスが必要になります。
 
## ◆アプリケーション構築手順
１）Power Appsホーム画面より「アプリ」を選択し、「Copilotで開始する」を選択します。

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3849987/dbb8f03b-14be-49cc-a7ac-301c9a119dc5.png)

２）Copilotダイアログにアプリ作成用のプロンプトを入力し、「送信」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3849987/5950869d-aeb9-4a12-835d-5940a9dfc742.png)

以下、入力したプロンプト（例）

```
#概要
物品貸出管理アプリを作成する。
#項目
件名、管理番号、カテゴリ（ＰＣ、備品、その他）、状況（利用可能、貸出中、返却済、利用不可）、説明、貸出日、貸出先、返却予定日
```

３）テーブル（サンプルデータ込み）のイメージが表示されたことを確認した後、「アプリを作成する」ボタンをクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3849987/0e7dabe0-95f6-4ad6-908a-d8cfb9e38033.png)

４）数分でテーブル並びにアプリケーションが出来上がります。
　生成されたアプリケーションの編集、並びに「プレビュー」ボタンからの動作確認が出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3849987/2c967792-7ed1-4709-a8a1-b5119142e32f.png)

## ◆アプリケーション構築時間の比較
上記のサンプルと同様のアプリケーションを手動で構築した場合、約30～40分ほどかかります。
「Copilot in Power Apps」を活用することで、わずか5〜10分で構築が完了し、約60〜80%の時間短縮が実現します。

## ◆注意事項
・アプリを開発する上での最低限のスキルは身に着けておくこと。
　Copilot in Power Apps自体が発展途上ということもあり、まだまだできないことが多いです。
 　例：　Dataverse以外のテーブルが作成できない、キャンバスアプリしか作成できない、細かい設定が出来ない 等
　Copilotでできないことに対応できるよう、あらかじめスキルを身につけておく必要があります。
 （例：式を使ったプロパティの設定・アクション処理の記述 等）

・テナントによって、Copilotが無効化されている場合がある。
　ご利用のテナントによっては、テナントの設定でCopilot in Power Appsが無効化されている場合があります。（既定では有効）
　Copilotのメニューが表示されない場合は、テナント管理者への確認が必要です。

・アプリ開発後のテストは、開発者自身で行うこと。
　Copilot in Power Appsはアプリの大枠の開発は行ってくれますが、テストまでは行ってくれません。
　開発を行った後は、開発者自身でデバッグおよびテストを行い、想定通りの動きをするかの確認が必要になります。

## ◆まとめ
Copilot in Power Appsを利用すれば、技術のない方でも手軽に業務アプリを構築でき、生産性の向上に貢献します。
また、Copilot in Power Appsは発展途上の機能であるため、今後さらに機能拡張される可能性があります。今後のアップデート情報にもご注目ください！

## ◆最後に
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう！:cherry_blossom:

- [募集職種一覧](https://hrmos.co/pages/tenda/jobs)
- [カジュアル面談の申](https://hrmos.co/pages/tenda/jobs/031002/apply)
- [テンダで働く人や社風について](https://note.com/tenda_recruit)
- [テンダのMicrosoftサービス](https://mssp.tenda.co.jp/)
【React Native】Apple製チップ搭載MacでiOSビルド中にCompileCエラーが出た

# やりたいこと
Apple Silicon (M1/M2/M3)で発生した、iOSシミュレーターのarm64サポートによるビルドエラーを解消したい。
確認したところ、CompileC エラーが出た場合Apple Silicon特有の問題やアーキテクチャの不一致が原因であることが多いとのこと。


# 解決法

~~ios/Podfile の post_install に以下を追記~~
```ruby
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
    end
  end
end
```

~~その後~~
```bash
cd ios
pod install
```

## 【更新】直らなかった。。
↑のやり方で結果なおりませんでした。そのため取消線させていただきました。
すみません。。。。
（一応コードだけ残しておきます。）


ほんとう理由は、
**RosettaがONになっていること**でした。

:::note info
Rosettaとは？
Intel Mac向けのアプリを、Apple Silicon（M1・M2・M3など）Macで動かせるようにするための仕組み。
世の中には Intel Mac向けに作られたアプリやツールがたくさんあるため、それらを Apple Silicon Macでも使えるようにするための機能。

参考：https://support.apple.com/ja-jp/102527
:::

Apple Silicon (M1/M2/M3)でアプリビルドしようとしているのに、
Intel Macの環境になっている？ことが原因だったぽい。

Finderから
アプリケーション > ユーティリティ > ターミナル > 右クリックして情報を見る > Rosettaを使用して開くのチェックOFF
にして再ビルドしたら成功しました。
AIを使ってPOP作成して遊んでみた

## 1. はじめに

* この記事の目的
  ・今の業務でAIを使う機会がないので、AIだけでPOPが作れるか試してみた
　※ほぼ知識ゼロで試している記事になります

## 2. 企画の背景と制約

* 今回のテーマ：「お酒のPOP」
* 制約条件
  　- 画像はすべてAI生成のみ（写真・フリー素材は使わない）
* なぜこのテーマにしたのか？
  　→ 画像生成AIでどこまで綺麗にできるかなど試すため

---

## 3. 使用ツールとプロンプト設計

* Soraなど試してみたが今回はChatGPT o3で試したものを記載

---

## 4. 実際に作ってみたPOPの工程

最初の条件
```
・A4縦のPOPで作ってください
・色合い・イメージは「アメリカンダイナー風」、「レトロ爽やか」
・文字入れなくて大丈夫です
・後から文字を入れる可能性があるため飲み物の間隔を広めに取って飲み物の下の余白はさらに多めに取ってください

「ビターレモンサワー」として左上に配置
「フローズンレモンサワー」として右上に配置
「ハニーレモンスカッシュ」として左下に配置
「クエン酸サワー」として右下に配置

```

最初にできたもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/ffdb6e0c-358b-41c5-aa7b-101dafa68413.png)

```
グラスが違うので合わせてほしい
右下の飲み物にはレモンを入れずに、グラスにレモンと＋マークを配置
左下のグラスには蜂蜜感を少し出して
またPOPに枠をつけてほしい
```

結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/7daa1287-4ead-40a4-b8f7-124c034393d6.png)

この後同じやり取りを10回ほどしたが治らなかったため割愛します

---

## 5. できあがったPOP紹介

完成品がこちら

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/a7295418-f948-4af8-bc85-1e98d1c1e0b1.png)

大量に指示した10回が無駄になった。
思ったよりイメージ通りにできなくて残念ではある。
知識があればきっともっとうまくいくとは思うが実力不足。

---

## 6. やってみてわかったこと

* よかったこと：
  ・素材集めは楽だなと感じた
  ・抽象的なものであればすぐにできそうで使うのは良さそう
* 難しかったこと：
 ・似たようなものを4つ集めることができないなと感じた
 ・いいなと思っても次の生成で消される(変更される)ことが多い
 ・情報を送っても前の情報を参照し始めて戻ってしまうことも多かった(主に右下の飲み物のレモンが勝手に刺さる)
 ・文字関連はかなり難しい

---

## 7. まとめ

* AI生成だけでも意外とPOPは作れる
* 素材集めだけして自分で作成の方がイメージ通りに作りたいなら早く感じた
* 記事にできるレベルの知識がなかったのでお遊びになってしまった

---

## 8. おまけ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/5bcb30cb-8b7c-42bb-8551-1ca9cb954724.png)

余白が気になったので削除依頼
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/25d434ac-887f-4359-96f4-c7b10282d4a3.png)

結果

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/9f8b7e35-5a86-40ad-8b61-2fde0238a030.png)

何が変わったんだ？

途中で文字を入れてみた結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3997736/525c5b88-72be-4eca-8d36-a16dc485afa6.png)

すごいいい感じですね・・・
VSCodeでMarkdownに画像を貼り付ける

Markdownでドキュメントを作成していると、画像を挿入したい場面がよくあります。特に、テスト報告書や手順書などでは、スクリーンショットを貼り付けることで、内容がより伝わりやすくなります。

しかし、VSCodeでMarkdownファイルを編集していると、画像の挿入が少し手間に感じることがあります。そこで、今回は「Paste Image」という拡張機能を使って、簡単に画像を貼り付ける方法をご紹介します。

# 想定する読者
ぼくの共同作業者です。
VSCodeを普段からテキストエディタとして利用している方を想定しています。

# Paste Image拡張機能を利用するといいです
「Paste Image」は、クリップボードにコピーした画像を、Markdownファイルに簡単に貼り付けることができるVSCodeの拡張機能です。画像ファイルを自動で保存し、Markdownの記法で挿入してくれます。

👉[Paste Image (VSCodeのMarketplace)](https://marketplace.visualstudio.com/items?itemName=mushanshitiancai.vscode-paste-image)

👉[Github](https://github.com/mushanshitiancai/vscode-paste-image)


# インストール方法
- VSCodeの拡張機能ビューを開きます。

- 「Paste Image」と検索し、提供されている拡張機能をインストールします。

# 基本的な使い方
1. スクリーンショット(Win + Shift + S  /  Com + Shift + 4)を撮るなどして、画像をクリップボードにコピーします。

2. Markdownファイルを開き、貼り付けたい位置にカーソルを置きます。

3. Ctrl + Alt + V（Macの場合は Cmd + Alt + V）を押すと、画像が保存され、Markdownに挿入されます。

# 保存先のカスタマイズ
デフォルトでは、画像はMarkdownファイルと同じディレクトリに保存されますが、設定を変更することで、別のフォルダに保存することも可能です。

例えば、画像をimagesフォルダに保存したい場合は、以下の設定を.vscode/settings.jsonに追加します。

```json
{
  "pasteImage.path": "${currentFileDir}/images"
}
```
これにより、画像がimagesフォルダに保存され、Markdownには相対パスで挿入されます。

```
${projectRoot}
```
なども利用できます。

# 注意点
使い始めに意外とハマるポイントがあります。まとめました。

| ミス例              | 原因と対策                                     |
| ---------------- | ----------------------------------------- |
| `Ctrl + V`で貼り付けた | 通常のペースト。Paste Imageの**ショートカットを使う**必要あり    |
| Markdownファイル未保存  | `${currentFileDir}` が解決できずプロジェクトルートに保存される |
| パスに `\` を使っている   | Windowsのクセ。必ず `/`（スラッシュ）を使おう              |
| VSCode再起動していない   | 設定反映されない場合があるので**再起動必須**                  |


# まとめ
「Paste Image」拡張機能を使うことで、VSCodeでのMarkdown編集がより効率的になります。画像の挿入が簡単になることで、ドキュメント作成のスピードも向上します。

ぜひ、活用してみてください。
【Django】verbose_nameで日本語にする

# verbose_name とは
管理画面のモデルのクラス名、フィールド名のラベルを日本語表記にできる。

＜verbose：冗長＞
通常は「冗長」にポジティブな意味はないが、ビジネスやIT用語としては、余裕のある状態、二重化などを意味する。

# どこで使うか
verbose_nameが使えるのは主に3箇所。

- モデルフィールド内
- モデルクラス内のMeta
- apps.py

# フィールドにverbose_nameを設定する

```diff_python:  models.py 
class Issues(models.Model):
    title = models.CharField(max_length=50, verbose_name="タイトル")
```


# モデル名にverbose_nameを設定する

```diff_python:  models.py 
class Issues(models.Model):
    title = models.CharField(max_length=50, verbose_name="タイトル")

    
+   class Meta:
+       verbose_name = "課題"
+       verbose_name_plural = "課題一覧"
```
- verbose_name_plural：複数形の場合にどう表示するか


# イメージ

- 変更前
![スクリーンショット 2025-05-28 18.16.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784177/1f24ad83-5d6c-479f-995d-a5d5b664d539.png)

- 各フィールドにverbose_nameを設定した様子
![スクリーンショット 2025-05-28 18.16.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784177/9c24bf33-202a-49e2-bd0c-592b12ee325f.png)

- class Meta: でモデル名にverbose_nameを設定した様子
![スクリーンショット 2025-05-28 18.23.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784177/346662f7-0623-4b73-aed3-85da938368bc.png)




# 参考
こちらを参考にさせていただきました。

https://itc.tokyo/django/model-field-options/
プロデル、調査 その2

# 概要
プロデルが、CLRらしいので、調べて見た。
リンク集

https://produ.irelang.jp/downloads/

https://produ.irelang.jp/docs/lookup/index.htm

https://produ.irelang.jp/docs/index.htm


https://produ.irelang.jp/docs/plugins/msil/index.htm

https://produ.irelang.jp/blog/produirefirststep/

https://produ.irelang.jp/archives/docs/manual/index.htm

https://produ.irelang.jp/docs/tools/web/webserver.html


以上。
Outlook PST を PDF に変換するためのマニュアルとプロフェッショナル ガイド

<p>デジタル時代のプロフェッショナルや組織は、メールを効果的に整理する必要があります。OutlookのメールやデータはPSTファイルとして保存されることが多いですが、この形式にはいくつかの問題があります。PDFは使い勝手が良く、安全で持ち運びも簡単なため、PSTファイルをPDFに変換するユーザーが増えています。PSTファイルをPDFに変換する理由、手動で変換する方法、専門ツールを使った変換方法、そして専用のソフトウェアを使用するメリットについて解説します。</p>
<p><img src="https://miro.medium.com/v2/resize:fit:720/format:webp/1*c69PBdiC4_2subwkNk6m-A.jpeg" alt="" /></p>
<h2><strong>PSTファイルをPDFに変換する理由は何ですか？</strong></h2>
<p>OutlookのPSTファイルには、メール、スケジュール、連絡先、アドオンなどが保存されています。PSTファイルは様々な用途に使用できますが、いくつかの問題も存在します。</p>
<ul>
<li>PSTファイルはMicrosoft Outlookでのみ開くことができます。</li>
<li>Outlookをお持ちでないユーザーはPSTファイルを閲覧できない場合があります。</li>
<li>PDFは一般的に受け入れられており、法的な訴訟において情報の保存、確認、証明に使用されています。</li>
<li>暗号化とパスワードを使用すれば、PDF内の重要な情報はより安全になります。</li>
<li>PDFはほぼすべてのデバイスで問題なく閲覧でき、追加のソフトウェアは必要ありません。</li>
<li>PDFバージョンを使用すると、メールの安全な管理と保管が簡単になります。</li>
</ul>
<h3>手動の方法を使用して PST を PDF に変換する:</h3>
<p>一部のユーザーは、以下の手順で手動変換を行っています。</p>
<ul>
<li>Outlook でメールが表示されるたびに、メッセージをクリックして開きます。</li>
<li>画面上のプリンターマークのアイコンをクリックします。<br />リストからプリンターとして「Microsoft PDF 印刷」を選択します。</li>
<li>メールを送信する際、メッセージを PDF ファイルとして保存します。</li>
</ul>
<h3><strong>手動変換で発生する問題：</strong></h3>
<p>大量のメールを処理すると、かなりの時間がかかります。</p>
<ul>
<li>メールは一括エクスポートに対応していないため、個別にエクスポートすることしかできません。</li>
<li>ファイルを変換すると、形式、添付ファイル、メタデータ情報の一部が失われることがよくあります。</li>
<li>このアプリを使用するには、コンピューターにOutlookがインストールされている必要があります。</li>
<li>そのため、少数のファイルのみを使用する場合は、手動で変換するのが最適です。</li>
</ul>
<h4><strong>便利なソリューション：PST変換エクスポートソフトウェア：</strong></h4>
<p>迅速で信頼性が高く、間違いのない方法をお探しなら、<strong>BLR <a href="https://www.blrtools.com/pst-exporter-tool.html" target="_blank">PST コンバーター ソフトウェア</a></strong>&nbsp;をご利用ください。このソフトウェアを使用すると、変換が簡単かつ高速になり、データはそのまま残ります。</p>
<p><strong>主な機能：</strong></p>
<ul>
<li>複数のPSTファイルを1回のセッションでまとめて変換できます。</li>
<li>PST変換ツールは、PSTメールをPDF、EML、MSG、HTMLなどの他の形式で保存します。</li>
<li>元のメールの形状、添付ファイル、および情報は保持されます。</li>
<li>2GBを超えるPSTファイルでもスムーズに動作します。</li>
<li>誰でも簡単に使いこなせる、シンプルで分かりやすいインターフェースを備えています。</li>
</ul>
<h4>PSTコンバーターエクスポーター を使用して PST ファイルを PDF に変換する方法:</h4>
<p>以下の簡単な手順で、他のユーザーを支援しましょう。</p>
<ul>
<li>お使いのコンピューターで PSTコンバーターエクスポーター を実行します。</li>
<li>「ファイルを追加」をクリックすると、1 つまたは複数の PST ファイルをツールに追加できます。</li>
<li>ドキュメントの形式として PDF を選択します。</li>
<li>変換後のファイルの保存先の名前と場所を入力します。</li>
<li>一括変換を開始するには、「エクスポート」をクリックします。</li>
<li>処理が完了したら、新しい PDF ファイルが保存されたフォルダーに移動します。</li>
</ul>
<h4><strong>結論：</strong></h4>
<p>PDFファイルを使用すると、Outlookメールの取り扱い、保護、配布がはるかに簡単になります。少数のメールであれば手動で処理する必要があるかもしれませんが、大量のメールを扱う場合は、BLR PSTコンバーターエクスポーターが真の成果とスピードを実現します。このツールを使えば、メールの数に関係なく、データやメッセージを迅速かつ安全にPDFに変換できます。</p>
<h4><strong>よくある質問（FAQ）</strong></h4>
<p><strong>Q1: 複数のPSTファイルを一度に変換できますか？</strong><br />このツールにはバッチ変換機能が搭載されており、作業をより早く完了できます。</p>
<p><strong>Q2: 変換されたPDFファイルは、メールの添付ファイルを安全に保持しますか？</strong><br />プロジェクトに関連するすべてのファイルが出力に含まれ、アクセス可能です。</p>
<p><strong>Q3: Outlookをインストールしなくてもこのソフトウェアを使用できますか？</strong><br />このツールを使用するのにMicrosoft Outlookは必要ありません。単独で機能します。</p>
<p><strong>Q4: PSTドキュメントからPDFファイルを作成できますか？</strong><br />もちろんです！ このツールでは、EML、MSG、HTMLなど、さまざまなファイル形式でデータを保存できます。</p>
Reactで「柔軟かつ実用的な画像コンポーネント」を作る実践ノウハウ

はじめに
Reactで画像を表示する際、単純な<img>タグではなく、
**再利用しやすく・拡張性が高い「画像コンポーネント」**を作ることで
開発効率やデザイン統一性が大きく向上します。

本記事では、実務で本当に使えるReact画像コンポーネントの実装パターンと
注意点、よく使うCSS・propsの設計ノウハウまで一気にまとめます。

1. 最もシンプルな画像コンポーネント
tsx

type ImageProps = {
  src: string;
  alt: string;
};

const Image = ({ src, alt }: ImageProps) => (
  <img src={src} alt={alt} />
);

export default Image;
ここから発展させるポイント
サイズ変更

スタイル追加

ラウンド処理（角丸）

インラインstyleやclassNameの拡張対応

2. サイズ（width/height）の柔軟な対応
px/%, remなど様々な単位をサポート
tsx

type ImageProps = {
  src: string;
  alt: string;
  width?: number | string; // px, rem, %
  height?: number | string;
};

const getSize = (value?: number | string, fallback = "100px") => {
  if (typeof value === "number") return `${value}px`;
  if (typeof value === "string") return value;
  return fallback;
};

const Image = ({
  src,
  alt,
  width,
  height,
  style,
  ...rest
}: ImageProps & { style?: React.CSSProperties }) => (
  <img
    src={src}
    alt={alt}
    style={{
      width: getSize(width),
      height: getSize(height),
      ...style,
    }}
    {...rest}
  />
);

export default Image;
HTML属性のwidth/heightはpxのみ対応なので、styleで渡すのがポイント

%やremなど自由に指定可能

3. 角丸・ラウンド（border-radius）対応
tsx

const Image = ({
  src,
  alt,
  width,
  height,
  borderRadius = "14px",
  style,
  ...rest
}: ImageProps & { borderRadius?: string; style?: React.CSSProperties }) => (
  <img
    src={src}
    alt={alt}
    style={{
      width: getSize(width),
      height: getSize(height),
      borderRadius,
      ...style,
    }}
    {...rest}
  />
);
Figmaなどデザインツールの「Corner radius: 14」は → CSSのborder-radius: 14pxと同じ

4. よく使うimgのCSSプロパティ
border-radius: 角丸、アバター・カード画像に

object-fit: cover: 比率キープ＆トリミング

box-shadow: 影

max-width: 100%: レスポンシブ

filter: グレースケールやぼかし

aspect-ratio: アスペクト比固定(最新)

transition: hover時アニメーション

css

.image {
  width: 100px;
  height: 100px;
  border-radius: 14px;
  object-fit: cover;
  box-shadow: 0 4px 12px rgba(0,0,0,0.13);
  max-width: 100%;
  transition: box-shadow 0.2s;
}
.image:hover {
  box-shadow: 0 8px 32px rgba(0,0,0,0.19);
}
5. クラス/スタイルの柔軟な拡張
classNameもpropsで受け取り合成可能に

styleも外部から上書きできると自由度UP

tsx

const Image = ({
  src,
  alt,
  width,
  height,
  borderRadius = "14px",
  className = "",
  style,
  ...rest
}: ImageProps & { borderRadius?: string; style?: React.CSSProperties; className?: string }) => (
  <img
    src={src}
    alt={alt}
    className={`image ${className}`}
    style={{
      width: getSize(width),
      height: getSize(height),
      borderRadius,
      ...style,
    }}
    {...rest}
  />
);
6. 注意点まとめ
width/heightをHTML属性で渡す場合は「pxのみ」対応

rem/%/vwなどを使うならstyleで渡す

border-radius等の見た目プロパティはstyle/classNameで自由に拡張

外部CSS, モジュールCSS, Tailwindなど全て対応可能

インラインstyleが最優先、次にclassName(CSS)、最後にHTML属性順で適用

まとめ
「画像コンポーネント」と一口に言っても、

props設計

style/classNameの合成・優先順位

CSSプロパティの選定
など、実務では意外と奥が深いです。

本記事のサンプルをベースに、
あなたのチーム/サービスのデザインシステムや要件に合わせて拡張してみてください！

おまけ:
FigmaのCorner radius = CSSのborder-radius (px単位)でOK！
OAC：他のユーザーが作成して、自分は権限をもたないデータセットをチェックする

はじめに
---
データ・メニューでは、データセットや接続はOACのログインしたユーザーが権限をもつものが表示されます。たとえば別のユーザーが作成したデータセットは、そのユーザーのみ権限を持ち、他のユーザーには表示されません。そんなとき、他のユーザーが作成して、自分は権限をもたないデータセットを、管理者権限でコンテンツ管理機能を使って確認する方法をみてみます。

データ・メニューのデータセットには権限をもつものが表示される
![g0.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/4cb06abe-e1f3-4d2b-bfb1-c35bf1597034.jpeg)

管理者権限で利用できるコンテンツ管理では、権限のないデータセットも確認できる
図では権限のないデータセットSalesOrder_02が表示される
![g1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/8e65e12e-93c8-4b1a-9e0f-92cde47e1985.jpeg)

記事記載時のOAC ver：May 2025 Update

前提
---
OACの管理者権限が付与されている
別のユーザーが作成したデータセットがある

データセットとその所有者の確認
---
管理者権限BIServiceAdministratorをもつユーザーでOACにサインインします。
メニューバーをクリックします。コンソールをクリックします
![g2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/94d4177e-28b1-4b29-8a20-67f47b021463.jpeg)

コンテンツ管理をクリックします。すべてのコンテンツがリストされます。所有者が表示されています。
![g3.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/7ad9bf28-37e6-4c90-a0dd-9f65aa37295b.jpeg)

左上部のフィルタアイコンをクリックします
![g4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/47a3ad6b-b4c2-4c76-a563-cec0a0781c81.jpeg)

オブジェクトタイプで、データセット、接続をチェックします。データセットおよび接続が表示されます
![g1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/ec15ef80-dbae-4b8c-9be4-52cde3c1a64d.jpeg)

権限のないデータセットは、オブジェクトの右端にカーソルを移動すると表示されるメニュー（・・・縦）をクリックすると権限なしと表示されます。権限のないデータセットも表示されていることがわかります。
![g5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/931090f9-ab25-404a-a2f2-7e1685ea1201.jpeg)

所有権の変更
---
データセットは、権限のあるユーザーにのみ参照が許可されます。それでも権限のないデータセットの詳細をチェックしたい場合は、所有権を変更する方法があります。
コンテンツ管理メニューで対象のデータセットを選択し、上部、所有権の変更をクリックします。
![g6.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/bc45189d-ac4b-4222-b067-d57cc780f809.jpeg)

所有権の変更で、自分に割当てをクリックします
![g7.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/dc133c38-9fdc-4c7c-8aa1-ae05d6daaa21.jpeg)

所有権の変更先を確認し、OKをクリックします
![g8.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/8b01d1fe-cd4c-453b-8456-33996bdff8e8.jpeg)

所有権が変更されるていることを確認できます
所有権を変更すると中身をチェックすることができます。
![g9.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2516153/1f0753cf-415b-4b3e-afc7-3baa872c49c5.jpeg)

まとめ
---
管理者メニューのコンテンツ管理を使用すると、すべてのデータセット、接続が所有者毎に確認することができます。
利用シーンとしては、接続を削除する際に、データセットでその接続を使っていると削除できない、となります。データセットを確認しても対象のデータセットがみつからない場合、権限のないデータセットをコンテンツ管理でチェックします。そして、そのデータセットを所有しているユーザーで、削除したい接続の使用有無を確認してもらいます。もしくは、コンテンツ管理で所有権の変更ができますので、所有権を変更し確認します。

以上
最近取り入れてよかったと思う自動化

# はじめに

最近AIの進化が目覚ましいですね。私も最近になっていろいろなAIサービスを調べるようになりました。また、AI導入の前に自動化のことも調べるようになり、相乗的に勉強になりました！
この記事では、最近自主学習に取り入れてみてよかったと思う自動化を、独断と偏見で紹介します。

# Microsoft Copilot

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1474054/bb6bac61-5a0f-4230-b60c-31c079379692.png)

- **使いやすさ: ◎**
- **導入のしやすさ: ◎**
- 技術的な内容の精度: △

普段Edgeを使っていることが大きく、サイドバーで開け、すぐに聞ける便利さがありました。
AIの手始めに本当に使いやすいツールでした。
ただ、より技術的なことを聞きたくなった時に物足りなさを感じていました。

# GitHub Actions

- **使いやすさ: 〇**
- **導入のしやすさ: ◎**
- 関連情報は探しやすいか: ◎

普段、GitHubを使っており、AI導入の前に自動化できないか調べている中でGitHub Actionsを使うようになりました（今まではあまり使ったことがありませんでした）。
GitHub Actionsは昔からあるものなので、たくさんドキュメントが転がっているのも助かりました。
人気のツールを入れるだけでも、良さを感じることができました！
以下、最近使っています。

①Release Drafter

https://github.com/release-drafter/release-drafter

②Dependabot

https://github.com/dependabot

→プルリク作成までしてくれるDependabot security updatesを使っています

https://github.com/github/codeql-action

③CodeQL

→サポートしている言語であればプルリクまで作成できるので便利です。
https://docs.github.com/ja/code-security/code-scanning/managing-code-scanning-alerts/responsible-use-autofix-code-scanning#about-autofix-for-codeql-code-scanning

③tflint

https://github.com/terraform-linters/setup-tflint

→単純な警告であれば自動で修正するようカスタマイズすることも可能です

これまで、個人でソースファイルを作っているとどうしても過去のファイルのメンテナンスが面倒になり、後回しになりがちでした。新しいソースファイルを作っていても「きれいなファイルを作らなくては」という思いが常に頭にあり、あまりよい開発者体験とは言えない状況でした。

GitHub Actionsを使うようになったことで、「GitHub Actionsに任せればいいか」と思い始め、心が軽くなったように感じました！
時間の節約と開発に専念できる環境へ、とても役立ったと感じました

# GitHub Copilot

- **使いやすさ: 〇**
- **導入のしやすさ: 〇**
- 技術的な内容の精度: △
- GitHubとの相性の良さ: ◎

GitHubとの相性のよさからGitHub Copilotを使うようになりました。
GitHub上の内容を質問できたり、Issueを作れたり、Copilot Autofixがあったり、よりAIを身近に感じるようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1474054/31776d45-dec6-493c-9607-00848c6239ed.png)

（いつの間にかCopilotの画面で、色々なボタンが増えて驚きました。。）

# MCP

- **使いやすさ: 〇**
- **導入のしやすさ: 〇**
- 技術的な内容の精度: 〇
- 夢が広がるか: ◎
- 学習意欲につながるか: ◎

Model Context Protocol（MCP）には驚きました。
「自分に合ったAIがリリースされるまで待つかー」から「なければ作ろう！」という意識が切り替わったきっかけになりました。
MCPの登場に伴って、RAGも調べ始めAWSなど使えば比較的簡単に構築できることにも気づかせてくれました。

# Amazon Q Developer

- **使いやすさ: ◎**
- **導入のしやすさ: 〇**
- 技術的な内容の精度: ◎
- 感動するか: ◎
- GitHubとの相性の良さ: 〇

GitHubでAmazon Q Developerが使えるようになり、使ってみてその便利さに衝撃を受けました。
Issueを作り、Amazon Qに割り当てるだけで開発してくれて、しかも精度もよい。手を加えなくてもある程度動くものが出来上がることに感動しました。
さらにAmazon Q Developerが作成したプルリクエストに対してLinterなどのGitHub Actionsが失敗すると、制限はあるものの自動で修正してくれます。

調べてみると、Amazon Q DeveloperにてClaude 3.7 Sonnetが使われるようになったとあるのでモデルの違いが精度に影響を与えているのかなと感じました。
https://aws.amazon.com/jp/blogs/news/anthropics-claude-3-7-sonnet-the-first-hybrid-reasoning-model-is-now-available-in-amazon-bedrock/
それと、今までLinterを実行しても修正する時間がなかったのですが、「AIに任せられるからLinter導入しよう」と思えるようになりました。
今までなんとなく「最新AIはすごい」と思っていたものが現実味を帯びてきました。

GitHub Issueから開発するサービス自体に似たものはいろいろあります。

- OpenHands
- GitHub Copilot Coding agent
    - MCPも使えるのが素晴らしいです
- Claude Code Action

# おわりに

段々と自分が「AIがない開発にはもう戻れない」となってきているように感じました。
自分だけの力では、スペルミスや初歩的なミスに躓く姿がイメージでき、少し恐怖を感じました。

今後は文書作成もAIに任せたいと思っているのですが、どうにも人間らしい文章が書けず、苦戦しています。。

これからも勉強していきます！
Geminiでハープを使う魔法少年を描いてみた。

# 概要

Geminiでハープを使う魔法少年を描いてみました。

# 実装

プロンプトと実行結果は以下の通りでした。

```
聖なるハープを使う魔法少年を描いてください。
```

![聖なるハープを使う魔法少年_20250528.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/54c8e51d-cf04-472e-8f08-df0fcf97f1de.png)


# まとめ

何かの役に立てばと。
Vertex AIとSageMakerの比較


## はじめに

本記事では、GCPのVertex AIについて、AWSのSageMakerと比較しながらその特徴を解説します。  

- Vertex AI = GCPの統合型MLサービス（2021年登場）
- SageMaker = AWSの代表的なMLサービス（2017年登場）

いずれも「開発・学習・デプロイ」までのMLワークフローをサポートするプラットフォームです。

---

## 1. 全体設計思想の違い

| 観点 | SageMaker | Vertex AI |
|------|-----------|------------|
| 起点 | Jupyter Studioが中核 | BigQueryやAutoMLが中核 |
| 製品群構成 | 機能ごとに細かく分かれている（例：Processing / Training / Inference Jobs） | Vertex AIという単一ブランドで統合管理 |
| ノートブック | Studio + JupyterLab | Workbench（AI Notebooks） |
| バックエンド | EC2（CPU/GPU）、EKSなど柔軟 | GCE + GKEベース |

 SageMakerはインフラレイヤーが見えますが、Vertex AIは抽象化が強め。
 GCPネイティブな思想に近いです。

---

## 2. AutoML・パイプライン機能の比較

| 観点 | SageMaker | Vertex AI |
|------|-----------|------------|
| AutoML | Autopilot（構成がやや複雑） | AutoML Tables / Forecast / Visionなどが豊富 |
| パイプライン | SageMaker Pipelines（Step Functions相当） | Vertex Pipelines（KFPベース） |
| パイプライン記述 | Python SDK中心（細かい設定が必要） | Kubeflow Pipelines + YAML or Python |

Vertex AIの方がAutoMLやPipeline周りは親切設計。
SageMakerは自由度が高い代わりに学習コストも上がります。

---

## 3. モデルデプロイの柔軟性

| 観点 | SageMaker | Vertex AI |
|------|-----------|------------|
| デプロイ方式 | 推論エンドポイントの作成（リアルタイム / バッチ） | Endpoint or Batch Prediction |
| Dockerカスタム | ECRに登録したコンテナを使える | Docker使用可（Cloud Buildなどでのビルドも容易） |
| スケーリング | 手動設定 or オートスケーリング | Cloud Run / GKEなどとの連携が容易 |



---

## 4. 課金体系とコスト感

| 観点 | SageMaker | Vertex AI |
|------|-----------|------------|
| ノートブック課金 | インスタンス時間単位（停止でも課金） | Idle時は課金停止可能 |
| 推論エンドポイント | リアルタイムは継続課金 | Cloud Runを併用すればコスト圧縮可 |
| AutoML課金 | 学習時間課金（分単位） | AutoMLも同様だが料金体系が明快 |



---

## 5. 組織としての戦略

- SageMaker: AWSの「何でもできるが使いこなせる人が必要」な哲学
- Vertex AI: GCPの「抽象化・再利用性・統合志向」が色濃い
横スクロールのTilemapで横移動で引っかかるバグ

# 横スクロールの地面をTilemapで作成した場合

今回使用したアセット
- Pixel Adventure 1
- [使用方法の参考URL](https://qiita.com/tokoroten_346/items/e8ef6462e1fb429ebb6f)
- [アセットのURL](https://assetstore.unity.com/packages/2d/characters/pixel-adventure-1-155360?locale=ja-JP&srsltid=AfmBOooqXb82SuN8VkW5MvR_Hlf9BfabkOkRAOy0CrF52WphaQhLnxA7)

# 作成した地面を横移動しても引っかかる場合の対処方法
- Grid/Tilemap のオブジェクトを選択
- Tilemapのインスペクターを変更
- Composite Collider 2D を追加する
- Tilemap Collider 2D の 「複合で使用」にチェックを入れる
![Tilemapの当たり判定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/14531466-e6fc-4690-9266-5c6e7b8ceaa1.png)
iosの設定によるビルド制限、Apple Storeへビルド

# iPadに以下の設定があるとビルドに影響があります。

![手順.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/75f06681-a89c-4394-973f-253ac148d828.png)

![手順２.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/5da5f5ce-b97c-4a4a-9d15-497c554d54c4.png)

# 別の端末で作成したアプリを動かすとき
プロジェクトファイル丸ごとGoogle Driveからダウンロードしたときに起きたバグ
```
Create a new scheme to perform this action.
```
✅ 解決方法

✅ 1. スキームを手動で作成する
	1.	Xcode の上部メニューから
`Product > Scheme > Manage Schemes... `を開く
	2.	左下の「＋」ボタンをクリックして新しいスキームを追加
	3.	対象とするターゲット（例：firebase_app）を選択して作成
	4.	OKを押して保存

# Apple Storeにビルドする
App Store にアプリをビルド・公開するための手順を、日本語でわかりやすく整理しました。
XcodeとApp Store Connectを使った2024〜2025年最新の流れに沿っています。

## 🚀 App Store にアプリをビルドして公開する手順


✅【準備編】

1. Apple Developer アカウント登録
	•	必要：Apple ID（無料）
	•	年会費：$99/年
	•	URL: https://developer.apple.com/

2. App Store Connect へログイン
	•	URL: https://appstoreconnect.apple.com/
	•	新しいアプリの登録はここで行います。

3. アプリ情報を登録（App Store Connect）
	•	「マイ App」→「＋」→「新規 App」
	•	アプリ名、バンドルID、言語、カテゴリなどを入力
	•	バンドルIDは Xcodeのプロジェクトと一致させておく（例：com.example.myapp）

⸻

✅【Xcode でのビルド＆アーカイブ】

1. Xcodeのプロジェクト設定確認
	•	バンドルIDが App Store Connect のものと一致しているか
	•	「Signing & Capabilities」でチーム、署名スタイル（Automatic）を設定
	•	「App Icons」や「LaunchScreen」も忘れずに

2. シミュレータではなく「Any iOS Device」などの実機 or アーカイブ用を選択

3. メニューからアーカイブ

- `Product > Archive`から実行する
- `Distrbute App` ボタンをクリックして実行
- パスワードの入力を何度も求められるのでログインする時のパスワードを何度も入力エンターする
![Appストアにビルド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/9bc889b9-e021-4010-abda-05a8b02ec821.png)
ドラッグの範囲がおかしい

VscodeやCursorでドラッグした範囲が行でなく短形選択になってしまうことの対処法


矩形選択と言うモードがデフォルトになっているのが原因でした。

VSCodeだと、WindowsはAlt + F(Macは ⌥ + F と記事に書かれてました)を押すと行の選択モードを切り替えることができます。

確実な方法としては
# 設定から変更する
#### VScodeの場合
設定/マウス と検索
「Column Selection」を解除する
![スクリーンショット 2025-05-28 174459.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/35e9aece-76ef-4d81-9d54-8e8d26d5a36c.png)


#### Cursorの場合
 ファイル/ユーザ設定/設定
 マウス と検索
 「Column Selection」を解除する
 ![スクリーンショット 2025-05-28 174800.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/6e641582-cf3b-47a6-a907-3a7624e99ee2.png)
「Junieと開発すると、未来がちょっと見える気がする」

## JetBrainsのAIコーディングエージェント「Junie」が目指す次のステップ  
～開発者が主導できるスマートなAIとの協働～

こんにちは、JetBrains公式代理店「NATTOSYSTEM」のねばねーばです。
今回はJetBrains公式英語ブログ[JetBrains Blog - What's next for Junie](https://blog.jetbrains.com/junie/2025/05/what-s-next-for-junie-building-a-smart-and-controllable-ai-coding-agent/)のまとめです。
前回は[🚀 JetBrains「2025年開発者エコシステムアンケート」参加のお願い （抽選で賞品が当たるチャンスあり）🎯](https://zenn.dev/nattosystem_jp/articles/976945e047de06)でした。

> **引用元**：[What’s next for Junie: building a smart and controllable AI coding agent – JetBrains Blog (2025年5月公開)](https://blog.jetbrains.com/junie/2025/05/what-s-next-for-junie-building-a-smart-and-controllable-ai-coding-agent/)

> ⚠️ 本記事の一部内容はAI（ChatGPT）を用いて要約・構成しています。

---

## 🎯 Junieとは？

JetBrainsが開発する**AIコーディングエージェント「Junie」は、コードの生成にとどまらず、開発の全工程をアシストすることを目的**としています。2025年5月の記事では、Junieが「開発者中心の制御可能なAIパートナー」**へ進化するための方向性が語られました。

---

## 🚀 Junieの進化ポイント

### 1. 開発サイクル全体を加速するアプローチ

- **Askモード**でアイデア共有やフォローアップが可能  
- **Planモード**で変更計画を明示し、実行前に確認できる  
- **コードレビュー支援**と**Codeモード**の連携でレビューを効率化  
- **ターミナル統合**によって、ビルド・デプロイ作業も補助  
- **生成コードの品質向上**により、長期的な保守性を向上  

### 2. 開発者による“可視化”と“制御”の強化

- すべてのステップが明示され、**ブラックボックス感を排除**  
- 提案・計画に対して**即時のフィードバックや修正**が可能  
- **対話的な操作**により、ユーザーがAIの流れをハンドリング  

### 3. モデル非固定のアーキテクチャ

- 単一モデルに依存せず、**複数のモデルを柔軟に切り替え**  
- コードベースのベンチマークとユーザーフィードバックで最適化  

---

## 🔮 今後の開発予定

JetBrainsは以下の機能の拡張・導入を予定しています。

- **リアルタイムステアリング**：Junieの挙動を即座に修正できるインターフェース  
- **Braveモードの改善**：より積極的にタスクを進めつつ、開発者の意図に沿った挙動へ  

---

## ✏️ まとめ

Junieは、単なるAIアシスタントから「**開発者が完全に制御可能なスマートパートナー**」へと進化しています。今後、チーム開発やCI/CDとより深く連携することで、開発現場における信頼できるAI同僚としての役割が期待されます。

📝 詳細は以下の公式記事をご参照ください：  
👉 [JetBrains Blog - What's next for Junie](https://blog.jetbrains.com/junie/2025/05/what-s-next-for-junie-building-a-smart-and-controllable-ai-coding-agent/)
Virtuozzo Hybrid Infrastructure (VHI) のストレージサイジングガイド

## ✅ はじめに

Virtuozzo Hybrid Infrastructure（以下、VHI）は、OpenStackベースのHCI（ハイパーコンバージドインフラ）ソリューションとして注目されています。VMwareからの代替ソリューションとして採用が進む中、ストレージの正確なサイジングは、性能・安定性・TCOに大きく影響する極めて重要な要素です。

VHIについて、もうすこし知りたい方はぜひ下記の記事も読んでいただければ幸いです。
https://qiita.com/BY-san/items/7c79a7d557eda821065b
https://qiita.com/BY-san/items/e0449aa310eae8bd5d6f

本記事では、実運用に即した形で、次の6つの観点を含む完全なサイジング方法を丁寧に解説します。

### ✏️ SDS（ソフトウェア定義ストレージ）の基本的な要件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3768223/048e7b90-71f3-4965-9909-612103b84412.png)

### ✏️ 冗長性モードとディスク容量
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3768223/76e3d40a-6833-4059-b985-6b3be5e4aa0d.png)



### ✏️ 本ガイドで考慮する要素

1. **TBとTiBの換算**
2. **レプリカ数（冗長性）とHA設計**
3. **メタデータ領域と空き容量の確保**
4. **システム予約領域**
5. **ノードごとの必要ディスク容量の算出**
6. **キャッシュディスクの設計指針（SSD/NVMe）**

メタデータディスクとシステムディスクは通常１つのディスクにアサインされます。合わせて250GB以上であれば問題ないです。以下はストレージディスクのサイジングに関する説明です。

---

## ▶ TB vs TiB：容量単位の正しい理解
VHIでは、TiBでストレージ容量を認識しています。

| 単位   | 意味           | バイト換算               |
| ---- | ------------ | ------------------- |
| 1TB  | テラバイト（10進表記） | 1,000,000,000,000 B |
| 1TiB | テビバイト（2進表記）  | 1,099,511,627,776 B |

### ▶ 換算式

```
1TB × 0.9095 = 統合TiB
```

---

## ▶ レプリカとHA設計

VHIの分散ストレージは、ノード障害時もデータを統合して利用できるよう、レプリカ数を指定することでHAを実現します。

| レプリカ数 | 実効データ比 |
| ----- | ------ |
| 2レプリカ | 約2分の1  |
| 3レプリカ | 約3分の1  |

---

## ▶ メタデータ預留、空き容量の確保

VHIはスナップショット、ストレージ管理情報などを記録するため、合計ストレージ容量の10%をメタデータ用に保留するのがベストプラクティスです。

また、ノード移転や再バランスに備えて、合計容量の15-20%の空き預備領域を確保しましょう。

**▶ 総合預備範囲 = 30%**

---

## ▶ 算出式

### 【ステップの流れ】

1. 必要実データ(TB) → TiBに換算
2. TiB × レプリカ数 = 合計データTiB
3. 合計データTiB × 1.3 (メタ空計を考慮)
4. 合計TiB ÷ ノード数 = 各ノードTiB
5. 各ノードTiB + OS預留 (0.05TiB)
6. 各ノードのTB = 総TiB × 1.0995

---

## ▶ 実例計算 (10TBを保存したい場合)

### 【共通】

* 10TB × 0.9095 = 9.095TiB

### 【2レプリカ】

1. 9.095 × 2 = 18.19TiB
2. 18.19 × 1.3 = 23.647TiB
3. 23.647 ÷ 3 = 7.882TiB/Node
4. 7.882 + 0.05 = 7.932TiB
5. 7.932 × 1.0995 = 【8.72TB】/Node

### 【3レプリカ】

1. 9.095 × 3 = 27.285TiB
2. 27.285 × 1.3 = 35.4705TiB
3. 35.4705 ÷ 3 = 11.8235TiB/Node
4. 11.8235 + 0.05 = 11.8735TiB
5. 11.8735 × 1.0995 = 【13.06TB】/Node

---

## ▶ キャッシュディスク設計ガイド（SSD/NVMe）

※ VHIの基本方針として、データストレージはSSD/NVMeを使用することが推奨されています。キャッシュディスクは基本的に不要です。

### 【SSD/キャッシュ利用シナリオ】

| 様性         | 発生IO型           | 推奨デバイス          |
| ---------- | --------------- | --------------- |
| 高速書き       | 超高速なDB | SSD ＋ NVMeキャッシュ |
| 大容量だけど価格重視 | バックアップ用途        | HDD + SSDキャッシュ  |

### 【容量相対サイズ相場】

```
SSD容量 = データ容量の10-20%
```

### 【例】

* 100TBの実データ → 同じノードに10-20TBのNVMe SSDを配置

---

## ✅ 総合表

| 項目         | 2レプリカ     | 3レプリカ      |
| ---------- | --------- | ---------- |
| 実データ       | 10TB      | 10TB       |
| 合計TiB      | 23.647TiB | 35.4705TiB |
| 各Node (TB) | 【8.72TB】  | 【13.06TB】  |

当然、それ以外に、OSとメタデータ用のディスクを用意する必要があります。こちらディスクの容量はストレージとして利用されないため、サイジングする際に考慮する必要がありません。

---

## ✅ おわりに

VHIのストレージサイジングは、単に容量だけではなく、HA性、スナップショット利用、再構成性などを考慮することが必要です。

本記事が、VHI構成設計や実装の参考になれば幸いです。
WSL起動とnpm run buildをワンタッチで行う

## 環境
Windows10/11
docker（postgre SQLとredisが載ってる）をwslで起こしている。

## 実現したいこと
npm run build、PowerShell起動を同時に実行
（いちいちコマンドプロンプトでコマンドを書き込み実行するのはだるい）

## 実現方法
.batファイルでまとめて実行できるようにする

```start.bat
start powershell -Command "wsl"
cd C:\pleiades\Git\project\project-web
call npm run build
call npm run watch
```

## 説明
```
start powershell -Command "wsl"
```
PowerShellを起動しwslコマンドを実行する（そのまま）。
-Windowstyle Hidden -NoProfileを付けて窓を即閉じすることもできる。
```
start powershell -Windowstyle Hidden -NoProfile -Command "wsl"
```

```
cd C:\pleiades\Git\project\project-web
```
npmを実行するフォルダまで移動（任意）。

```
call npm run build
```
デプロイ。batファイルからコマンドを実行する際はcallが必要。

```
call npm run watch
```
開発中、ファイルに変更をかければ環境に反映してくれるコマンド。便利。
こちらもcallを付ける。


## 結果
ワンクリックで開発環境が立ち上がってらくちんですね。

以上
Blender 基本操作

## インセット
#### 「面選択」状態で「I」で実行
【ショートカットキーの由来】
Iを入力すると面の差し込みができます。 差し込みを意味する「Inset（インセット）」という単語が、Iのショートカットキーの由来です。

![インセット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/b81b32ad-9761-4cca-adee-cf4414b0b837.png)

## 押し出し
#### 「面選択」状態で「E」で実行
【ショートカットキーの由来】
「E」のショートカットキーは、押し出しを意味する
「Extrude（イクストリュード）」という単語が由来です。﻿

![押し出し.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/214f2588-01dd-4a6a-8768-45303d772669.png)

## 回転
#### 「オブジェクトモード」状態で「R」で実行
【ショートカットキーの由来】
オブジェクトの回転「R」 BlenderのオブジェクトモードでRを入力すると、選択したオブジェクトを回転できます。 回転を意味する「Rotate（ローテイト）」という単語が、Rのショートカットキーの由来です。﻿

## 移動
#### 「オブジェクトモード」状態で「G」で実行
【ショートカットキーの由来】
オブジェクトの移動「G」 BlenderのオブジェクトモードでGを入力すると、選択したオブジェクトを移動できます。 対象を掴むことを意味する「Grab（グラブ）」という単語が、Gのショートカットキーの由来です﻿

#### 「G」,「Y」と「G」,「X」横移動
#### 「G」,「Z」上下移動
Unityのビルドするときの注意点と画面の表示

# buildする時のシーンの並びについて
ゲーム開始時の表示されるシーンはbuild設定で一番上にあるシーンから始まるようになっています。

# ビルド後の画面のサイズについて
[画面サイズ](https://futabazemi.net/unity/unity-button_layout "画面サイズ")

![画面サイズ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3957418/788a5ff9-8619-b1de-2720-b00797781a9b.png)
FilamentのFileUploadでMixed Contentエラー！？ → `trustProxies` で解決した話

Filamentでファイルアップロード機能を使っていたときに、  
**JavaScriptがHTTPで読み込まれてMixed Contentエラーになる**問題に遭遇しました。

結論から言うと、**`bootstrap/app.php` に `trustProxies(at: '*')` を追加**することで解決しました💡  
備忘録として残しておきます。

---

## 🔥 起きた問題

- Laravel 10 + Filament を使用
- FileUpload コンポーネントを使ったら、以下のような現象が発生：

> ブラウザのコンソールに以下のエラーが出力：  
> `Mixed Content: The page at 'https://example.com/admin/orders/create' was loaded over HTTPS, but requested an insecure script 'http://example.com/livewire/upload-file.js'`

このせいで、ファイルアップロードが正常に動作しない…

---

## 🧙‍♂️ 解決方法：`trustProxies` を追加するだけ！

Laravel 10以降の構成で `bootstrap/app.php` を開き、  
以下のように `trustProxies(at: '*')` を追記します。

```php
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        // 👇 ここが重要
        $middleware->trustProxies(at: '*');
    })
    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();
```

## 🧩 補足：なぜこれで直るの？
Laravelはリバースプロキシ（例：Nginx, Cloudflare）経由のリクエストを受けたとき、
実際のプロトコル（HTTP or HTTPS）を正確に判別できないことがあります。

trustProxies() を使って信頼するプロキシを明示することで、
request()->secure() が正しく true を返すようになります。

これにより、Livewireが生成するJavaScriptのURLも https:// になります。

## ✅ 結果：ちゃんと動いた！
この設定を追加したら、
FilamentのFileUploadコンポーネントがHTTPSでも問題なく動作するようになりました🎉
JSの読み込みも https:// になってMixed Contentは完全解消！

## 📝 まとめ
Filamentでファイルアップロードがうまくいかないときは「Mixed Content」を疑うべし

Laravel 10+ の bootstrap/app.php に trustProxies(at: '*') を書くと一発解決するかも！

特に Cloudflare や Nginx の裏で動かしてる場合は要注意！
Nuxt.jsのWebページをfirebaseでホスティングする時の注意

## FireBaseでデプロイしたものをホスティングするのに苦戦したのでまとめようと思います

## ホスティングについて
#### ホスティングについて最初は何か分からなかったのですが簡単に言うとサーバを借りることだそうです。

今回のホスティングはFireBase を活用してNuxtjsで作成したプロジェクトをFireBaseのアカウントごとに作成できるWebページとしてインターネットに掲載出来るというものでした。

ホスティングするまでには大きく２つの工程がありました。

# １. プロジェクトをビルド
```
npm run build
```
または
```
set NITRO_FIREBASE_GEN=2
npm nuxt generate
```
または
```
npx nuxt generate
```
色々と試しながらエラー起きながら気づいたら上手く行っていたのでちゃんとした正解は分からないですがこの３つのコマンドは試しました。

# ２. FireBaseのコマンドでデプロイを実行する
このコマンドでエラーが起きなければホスティングが成功ではあるのですが、最初はページが正しく表示されなくてあれ？となりました。
```
firebase deploy
```

## FireBaseのデプロイコマンドでエラーが出たきっかけと原因
firebase.json
手を動かしながら学ぶって、やっぱり面白い!


<h2>Java勉強、なんでこんなに難しいの？:cry:</h2>
<p>みなさん、こんばんは！韓国在住のsanaです！
Javaの勉強を始めてみたけど、<strong>変数やクラスの概念が難しい</strong>、<strong>コードを書いてもエラーばかり</strong>で思うように進まない…そんな経験ありませんか？</p>
<p>実は私も同じでした。特に、<strong>オブジェクト指向の考え方</strong>や<strong>コードの設計方法</strong>でつまずいて、「向いてないのかな…」と感じたこともあります。:rolling_eyes:</p>

<h3>でも、あるとき「これはわかりやすい！」と思える教材に出会ったんです。</h3>
<p>それが、<strong>韓国のIT学習者なら誰もが知っている超有名講師</strong>によるJava学習シリーズ。なんとこの講師、先日<strong>受講者数50万人</strong>を突破したそうです！👏</p>

<h3>📢 その記念として、特別イベントが始まるそうです！</h3>
<ul>
  <li>有料入門講座２つが<strong>1週間限定で無料公開中</strong>！</li>
  <li><strong>イベント期間中に受講申請すれば、そこから90日間無料で視聴可能です！

  私は購入する前に聞きたかったです…。:joy_cat:
  
  </strong></li>
</ul>

<p>Javaに取り組みたい方、最初の一歩を踏み出したい方、無料で見れるこの機会にぜひ試してみてください！</p>

<h3>✅ 私が実際におすすめしたいのはこの2つ：</h3>

<h4>1️⃣Java入門

https://u.inf.run/43NcRfY

<ul>
  <li>Javaの基本文法を“実際に書きながら”学べる</li>
  <li>オブジェクト指向やメソッドの概念も丁寧に解説</li>
  <li>完全無料！未経験者にピッタリ</li>
</ul>

<h4>2️⃣ spring boot入門

https://u.inf.run/43AYryw

<ul>
  <li>Javaを使ってSpring BootでWebアプリを作る実践形式</li>
  <li>Controller / Service / Repositoryの流れが体験できる</li>
  <li>実務レベルに繋がる内容を無料で学べるチャンス！</li>
</ul>

<p>Javaの世界は最初は難しく感じても、<strong>正しい教材とペース</strong>で学べば必ず楽しくなってきます！ぜひこの機会に、一緒に学び始めましょう✨</p>

私も復習がてらに視聴しようと思います！
今日も一日お疲れ様でした！　アンニョン:v: