OmniAICreator/Qiita-1.07M huggingface dataset:
Python+scipyによるフィッテイングで非線形関数とグラフを出力させた

# 1. ミッション
## はじめに
従量課金制サービスに溢れる世の中。。
AWS、Azure、OCIなどのメトリクスで累計は確認できるだろうけど...
累計使用量を表す式、グラフ、できれば知りたいですよね??

(いや、、Qiita記事のネタになるなと思っただけで
日頃から私もそうは思ってないけど...笑)

## お題
- 今回は、7日間で累積28(GB)と想定
- それぞれの使用量は[3, 3, 5, 2, 8, 4, 2]と設定

期間(日)を入れると以下の値(GB)が返ってくる関数を探す旅に出る
🐎🐎🐎

```math
F(1)=3
```
```math
F(7)=28
```
# 2. 数学のお話
これは非線形だな、少なくとも線形グラフではないと分かった時は、
指数関数をうまく利用すると大体うまくいく

非線形関数モデルにおけるフィッテングは機械に任せる！

🚀🚀🚀

- パラメータ定数(A,k)の具体的な値をフィッティングで探索

```math
※前提条件: A,k\in\mathbb{R}
```

- F(t)：日々の使用量を表すf(t)の積分=累計使用量(GB)
```math
F(t)=A⋅e^{kt}−A 
```

- f(t)：累計使用量を表すF(t)の微分=日々の使用量(GB)
```math

f(t)=A⋅k・e^{kt}
```

# 3.実装

```python
import numpy as np
from scipy.optimize import curve_fit

# 日数
days = np.array([1, 2, 3, 4, 5, 6, 7])
# 日々の使用量
daily_usage = np.array([3, 3, 5, 2, 8, 4, 2])
# 累計使用量
cumulative_usage = np.cumsum(daily_usage)

# 累計使用量のモデル
def cumulative_model(t, A, k):
    return A * np.exp(k * t) - A

# フィッティング
params, covariance = curve_fit(cumulative_model, days, cumulative_usage, p0=[1, 0.1])
A, k = params
print(f"A: {A}, k: {k}")

# グラフの描画
plt.figure(figsize=(10, 6))
plt.plot(days, cumulative_usage, 'o', label='累計使用量（実測値）')
plt.plot(days, cumulative_model(days, A, k), '-', label='累計使用量（モデル）')
plt.xlabel('日数')
plt.ylabel('累計使用量 (GB)')
plt.legend()
plt.title(f'累計使用量のモデル: A={A:.2f}, k={k:.2f}')
plt.grid(True)
plt.show()

```

# 4.結果
## 指数関数のパラメータ(A,k)

- A=56.14
- 𝑘=0.0584

👩‍💻👩‍💻👩‍💻
```math
累計使用量(GB):F(t)=56.14⋅e ^{0.0584t}−56.14
```
```math
日々の使用量(GB): f(t)=56.14⋅0.0584⋅e ^{0.0584t}
```

## グラフにするとこんな感じ
※データの母数が少ないからか線形っぽく見えるけど、非線形関数です
🧑‍💻🧑‍💻🧑‍💻
![スクリーンショット 2024-05-24 22.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1244293/1184285e-bcb7-b88d-d18a-a8a7935b21f8.png)
取得したAWS認定資格が古くなっているかどうかの確認

# きっかけ
- 4月に[資格試験の体系が大きく変わった](https://blog.serverworks.co.jp/aws-certification-retirements-and-launches-2024)ので、自分の取得資格を棚卸しようと思う。
- 試験バージョンが上がった資格を確認しようと思ったら、試験ダッシュボードが切り替わっていたので見方がわからなくてサイト内を探した。
    - 他にいい方法あれば教えてください。。。(昔のダッシュボードだと見えた気が。。。)

# 見方
- 資格ページのDashBoard上のお知らせ欄の中から"Manage my Peason Vue Account"を選択
![スクリーンショット 2024-05-12 18.44.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/b615d095-36cc-18b7-5699-c3d6d5d2412f.png)

- Peason Vueの画面右から"Exam History"を選択
![スクリーンショット 2024-05-12 19.06.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/2112e879-ce44-dcb3-4ec7-0ba46f524f89.png)

- 試験名の末尾に"Retiring- xxx"と書かれているものは旧バージョンの受験履歴
    - 試験がなくなるもの（SAP on AWSなど）は上記の記載はなし
![スクリーンショット 2024-05-24 22.21.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/9139e697-02bc-cae3-2003-02d405530564.png)
node.jsのバージョン管理ツールはどれを使うべきか？

## 結論
### 結論パターン0
バージョン管理などそもそも考えない（答えになっていないが・・・）

### 結論パターン1
自分の好きなのを使う（答えになっていないが・・・最終的にはここに収束するような気もする）

### 結論パターン2
node.js公式のインストール方法で説明されているパッケージマネージャーを使用する
* Windowsの場合:　fnm　または　chocolatey
* macOS/Linuxの場合:　nvm　または　fnm

 上記からクロスプラットフォームを考慮する場合の選択肢はfnmとなる。node v20.0.0が出たころは、fnmは掲載されいなかったと記憶しているので、fnmは比較的新しいものと思われる。
注：chocolateyは、macOSでいうところのhomebrewに相当するもので、node.jsの専用ツールではない。

### 結論パターン3
マルチプラットフォームに対応しているvoltaという選択肢

## おまけ

### 有名どころのツール一覧
リンクはしてないので詳細はググってください
* nvm (Node Version Manager)
* fnm (Fast Node Manager)
* chocolatey
* volta
* n (Node simple version management)
* nodebrew
* nvs (Node Version Switcher)
Reflexライブラリのコンフィギュレーションについて

お疲れ様です。

今日は「Reflexライブラリのコンフィギュレーションについて」について部分いたします。

英語版は下記ページをご覧ください。
https://reflex.dev/docs/getting-started/configuration/

Reflexアプリは、設定ファイル、環境変数、およびコマンドライン引数を使用して構成できます。

# Configuration File

`reflex init`を実行すると、ルートディレクトリに`rxconfig.py`ファイルが作成されます。Configクラスにキーワード引数を渡して、アプリを構成できます。

```python
# rxconfig.py
import reflex as rx

config = rx.Config(
    app_name="my_app_name",
    # Connect to your own database.
    db_url="postgresql://user:password@localhost:5432/my_db",
    # Change the frontend port.
    frontend_port=3001,
)

```

利用可能なすべてのパラメーターに関する[config reference](https://reflex.dev/docs/api-reference/config/)を参照してください。

# Environment Variables


設定ファイルを上書きするには、環境変数を設定できます。たとえば、`frontend_port`設定を上書きするには、`FRONTEND_PORT`環境変数を設定します。

```
FRONTEND_PORT=3001 reflex run
```

# Command Line Arguments

最後に、`reflex run`にコマンドライン引数を渡すことで、設定ファイルと環境変数を上書きできます。

```
reflex run --frontend-port 3001
```

利用可能なすべての引数に関する[CLI reference](https://reflex.dev/docs/api-reference/cli/)を参照してください。

# Customizable App Data Directory

`REFLEX_DIR`環境変数を設定することができます。これにより、ReflexがBunやNodeJSなどのヘルパーツールを書き込む場所をユーザーが設定できます。

デフォルトでは、プラットフォーム固有のディレクトリが使用されます:

Windowsでは、`C:/Users/<username>/AppData/Local/reflex`が使用されます。

macOSでは、`~/Library/Application Support/reflex`が使用されます。

Linuxでは、`~/.local/share/reflex`が使用されます。

今日は以上です。

ありがとうございました。
よろしくお願いいたします。
VisualStudioCodeからProcessingを実行できるように設定する

# 概要

Processingの実行ボタンを押さずに、VisualStudioCodeからProcessingのアプリの実行を行います。**Windowsの環境変数を用いて、どの環境でも同じ設定にできるように設定**します。

# 0. 環境

今回説明で使用する環境は以下の通りです。
バージョン等違う場合は適時読み替えてもらえればと思います。

- Windows 11
- VisualStudioCode 1.89.1
- Processing 4.3


# 1. Processingの配置

## 1.1 Processingのダウンロード

公式サイトから取得します。

https://processing.org/download

## 1.2 ファイルの配置

ダウンロードしたファイルを解凍し、以下のディレクトリに配置します。
※ユーザー名は、各自の環境に合わせて設定してください

```
C:\Users\{ユーザー名}\processing-4.3
```


フォルダ構成が、`C:\Users\{ユーザー名}\processing-4.3\processing-java.exe`となるはずです。


## 1.3 Windowsの環境変数へセット

1.  [Windows]キー + [R]キーを押して「ファイル名を指定して実行」アプレットを開く
1. **`rundll32 sysdm.cpl,EditEnvironmentVariables`** と入力し、OKボタンをクリック
1. ユーザーの環境変数のPathをダブルクリック
1. 新規ボタンをクリックし、**`%HOMEPATH%\processing-4.3`** を入力し、OKボタンをクリック
1. さらに環境変数画面で、OKボタンをクリック

これで、**`processing-java`** コマンドが使用できるようになります。

# 2. VisualStudioCodeの設定

## 2.1 VisualStudioCodeのtask.jsonを設定

Processingのプロジェクトに`.vscode/tasks.json`を追加します。

```json:tasks.json
{
  "version": "2.0.0",
  "presentation": {
    "reveal": "always",
    "panel": "new"
  },
  "tasks": [
    {
      "label": "Run",
      "command": "processing-java",
      "type": "process",
      "args": [
        "--force",
        "--sketch=${fileDirname}",
        "--run"
      ],
      "problemMatcher": [],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}
```

## 2.2 Ctrl + Shift + B で起動する

VisualStudioCodeで.pdeファイルを開き`Ctrl + Shift + B`で起動することができます。

# おまけ

Processingのプロジェクト毎に、異なるバージョンのProcessingの設定をしたい時があります。そんなときは、以下のようなフォルダ構成にします。

```
C:\Users\{ユーザー名}\processing-3.5.4
C:\Users\{ユーザー名}\processing-4.3
```


各プロジェクトの`tasks.json`を以下のようにします。
※`command`の項目のみ違います

```json:processing3.5.4のプロジェクトのtasks.json
{
  "version": "2.0.0",
  "presentation": {
    "reveal": "always",
    "panel": "new"
  },
  "tasks": [
    {
      "label": "Run",
      "command": "${env:HOMEPATH}\\processing-3.5.4\\processing-java.exe",
      "type": "process",
      "args": [
        "--force",
        "--sketch=${fileDirname}",
        "--run"
      ],
      "problemMatcher": [],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}
```


```json:processing4.3のプロジェクトのtasks.json
{
  "version": "2.0.0",
  "presentation": {
    "reveal": "always",
    "panel": "new"
  },
  "tasks": [
    {
      "label": "Run",
      "command": "${env:HOMEPATH}\\processing-4.3\\processing-java.exe",
      "type": "process",
      "args": [
        "--force",
        "--sketch=${fileDirname}",
        "--run"
      ],
      "problemMatcher": [],
      "group": {
        "kind": "build",
        "isDefault": true
      }
    }
  ]
}
```

# 終わりに

今回は、VisualStudioCodeからProcessingを実行できるように設定しました。

Windows環境変数を用いることで、チームでの開発や別の環境への移行が容易になります。

マイナーな言語ですが、この記事が少しでも参考になればと思います。

ここまで読んでいただきありがとうございました。
AWS EC2を停止してAMIを作成したときにステータス「保留」でも、EC2は起動していい

マネジメントコンソールからEC2を停止し、イメージのテンプレートを作成する機会があったときの疑問を記録します。

2024/05/24時点の情報なので、作業時は念の為参考資料を確認していただけますと幸いです。

### EBSのスナップショットは非同期で発生

EBSスナップショットの作成を作成する際にマネジメントコンソールから行っていますが、
その際スナップショットを取得する操作を実行した時点で Amazon EBS ボリュームに書き込まれているデータのみがキャプチャされる。

そのため、**取得以後の後の更新は反映されない**し、
**取得してからステータス「保留(pending)」を確認してからEC2の起動を行っても影響を受けない**

### 参考：

Amazon EBS スナップショットの作成
https://docs.aws.amazon.com/ja_jp/ebs/latest/userguide/ebs-creating-snapshot.html

>スナップショットは非同期で発生します。 point-in-time スナップショットはすぐに作成されます>が、スナップショットのステータスはpendingスナップショットが完了するまで (変更されたすべてのブロックが Amazon S3 に転送されるまで) になります。この間、大きな初期スナップショットや、多数のブロックが変更された後続のスナップショットには数時間かかることがあります。この処理の完了中に、進行中のスナップショットはボリュームに対する継続的な読み取りと書き込みの影響を受けません。
SideQuestのストリーミング機能でMetaQuest3の画面サイズに対応する方法

# 起きた問題
SideQuestでMetaQuest3をストリーミングしたところ。以下のように画面左に黒いレンズの端みたいなものが出る

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/5e38451e-ef64-e521-bde7-2028e67139ac.png)


# 解決方法
Cropを「1778:1039:2200:549」にすればよい

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/acda0aa0-0463-e606-832f-44dba7438766.png)

結果は以下

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/079af745-f545-9538-6c0c-969b2dd27758.png)
右クリックメニューをスクリーンショットできない問題

単なる備忘録

## 右クリックメニューをスクショ撮ろうとすると絶対失敗する

説明資料作成用に右クリックメニューが出てる画面をキャプチャしたい

・・・が右クリックメニューをスクリーンショットしようとすると。
メニューが消えてしまう。
以下のいずれもだめ
- PrintScreenキー
- Win+Shift+S
- Win+Alt+PrintScreen

snipping toolにCtrl+Print screenというキーがあるという記事もあったが、今はないようだ

## 解：動画にした

PrintScreenキー押下時の動画撮影でもいいし
Win+Alt+Rで動画撮影してもいいし

その後動画のフレームを切り抜いてもいいし、めんどいので動画をWin+Shift+Sでもいいし
スライドアニメーション

#### はじめに

今回は、JavaScriptを使用したスライドアニメーションの実装について触れてみようと思います。私のまとめは"自分が見返せるように"という意味合いもあります。エンジニア初心者故、温かい目で見ていただけると嬉しいです。


#### 【スライドアニメーション】

このコードを使用すると、要素を指定した方向にスライドさせることが出来ます。

```ruby:例
function slideAnimation(element, direction, distance, duration){
    /* 開始時刻を取得 */

    const startTime = performance.now();

    /* スライドアニメーションの関数 */
    function slide(timestamp) {
        /* 現在時刻を取得し、開始時刻からの経過時間を計算 */
        const currentTime = timestamp - startTime;
        
        /* 経過時間がアニメーションの継続時間以下であれば、アニメーションを続行 */
        if (currentTime < duration) {
            /* 指定された方向に要素を移動させる */
            if (direction === "left") {
                element.style.transform = `translateX(${-currentTime * distance / duration}px)`;
            } else if (direction === "right") {
            ~~~
            }
            
            /* アニメーションを再実行 */
            requestAnimationFrame(slide);
        } else {
            /* アニメーションが終了したら、transformをクリアして初期位置に戻す */
            element.style.transform = "translate(0)";
        }
    }

    /* アニメーションを開始 */
    requestAnimationFrame(slide);
}
```

-**slideAnimation**→要素を指定した方向・距離にアニメーションさせる関数。
-**element**→アニメーションさせるHTML要素を指定する引数。
-**direction**→left,right,up,downを値として、スライドの方向を指定する引数。また、**translateX**が横、**translateY**が縦の方向。
-**distance**→スライドさせる距離をピクセル単位で指定する引数。
-**duration**→アニメーションを継続させる時間をミリ秒単位で指定する引数。

実際にコードを書くときは、上記のコードに以下のように追加することで動作させることが出来ます。

＜右方向、500px分、500msec＞
```ruby:例
const element = document.getElementById("box");
slideAnimation(element, "right", 500, 500);
```


#### 【二重処理】

二重処理とは、同じ処理が重複して行われることをいいます。このようなことが起きると、パフォーマンスの低下や誤った結果が出てしまう恐れがあるため、フラグを立てることで制御する必要があります。

```ruby:例
/* フラグの初期値(条件を満たしていないためfalseで入力) */
let flag = false;
let cnt = 0;

/* while文による */
while(!flag){
    cnt++;
    console.log(cnt);
    /* 変数cntの値が7になるとflagにtrueを入力する(フラグを立たせる) */
    if(cnt == 7){
        flag = true;
    }
}
```


#### おわりに

今回はスライドアニメーションのみまとめましたが、他にもたくさんの関数が存在します。現在はシングルページを作成する課題に取り組んでおり、フェードインやフェードアウトなども使うことになると思います。エンジニアデビューへの道のりはまだまだですが、少しでも早く知識と技術を身に着け、デビューを目指していきたいです。
【Rails】namespaceを使用してアプリケーションの作成

# はじめに
初投稿になります。
最初は、自分の学習の復習をしながらアプリケーションの作成をしていく予定です。
2024年2月からプログラミン学習を始めたばかりなので間違ったことを記載している可能性もあります。間違っている部分やアドバイスがありましたらご指摘していただけたら幸いです。


## 前提
ruby
rails

上記の環境で作成します。

また、今回は管理者側と顧客側があるアプリケーションを作成します。



## 実装
### アプリケーションの作成

まず最初にアプリケーションを作成します。

```
rails new review_app
```

### namespace の使用

今回は管理者側と顧客側が存在するのでコントローラーを名前空間でグループ化します。
要すると
- 同じデータを扱うコントローラーとビューを管理者側と顧客側で2つ作成し、それらをそれぞれのフォルダーに分けて管理する
- 管理者側と顧客側でルーティングをグループ分ける
ということです。

https://railsguides.jp/routing.html#%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9%E3%81%AE%E5%90%8D%E5%89%8D%E7%A9%BA%E9%96%93%E3%81%A8%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0


### 実装

```
rails g controller admin/posts

rails g controller public/posts

rails g controller public/homes top
```

#### 実行後
|ディレクトリ|ルーティング|
| --------------------- | -----------|
|![スクリーンショット (389).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794246/2e8cd462-90a7-69eb-752c-1d59e4a84510.png)|![スクリーンショット (390).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794246/129bde4c-fa5f-de12-c9c7-7f7ffd51bc84.png)|

#### route.rbの編集

```
Rails.application.routes.draw do
  root to: 'public/homes#top' #追加
  
  namespace :public do
    resources :posts #追加
    get 'homes/top' #削除
  end

#ここから追加
  namespace :admin do
    resources :posts
  end
#ここまで追加

  get "up" => "rails/health#show", as: :rails_health_check #削除

end
```

#### ルーティングの確認

```
rails routes
```

下記添付の画像のようにadmin側とpublic側でURLが分かれています。

![スクリーンショット (391).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794246/f88e8d4b-707e-fb68-88e5-7bdf2553319f.png)

また今回はpublic側のURLを
/public/posts/new
ではなく
/posts/new
のようにする予定なので、さらにルーティングを編集します。

```
  namespace :public, path: '' do #編集
    resources :posts
    get 'homes/top'
  end
```

そうすると以下のようになります。

![スクリーンショット (392).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3794246/39467db3-7b20-e2e6-9b9c-c2ca91f4a4b9.png)

#### なぜそうなるのか
 path: '' を指定すると、Railsは path オプションを確認し、その値をURLパスに反映させます。path: '' は空のパスを指定することを意味するため、URLには public が含まれません。この結果、生成されるURLは次のようになります。

GET /posts
GET /posts/:id
POST /posts
PATCH/PUT /posts/:id
DELETE /posts/:id

重要な点として、この設定によりURLからは public が除外されますが、コントローラの名前空間は Public が維持されます。つまり、Public::PostsController が使われます。

### 最後に
これで管理者側と顧客側を分けることができました。
次からログイン機能などを実装していきたいと思います。
ありがとうございました。
[ubuntu 22.04] apt upgradeでのインタラクティブ画面表示を避ける方法

apt upgradeでのインタラクティブ画面表示を避ける方法のご紹介になります。
※ubuntu20.04までではこの現象に遭遇したことはないのですが・・・

## ubuntu22.04 向け

#### 通常のコマンドで　apt upgrade
```
root@localhost:~# apt upgrade
```

##### すると、インタラクティブ画面表示されることがある　（画面例）

![ubuntu_pkg_config.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44622/3a9cb9c5-c616-12b4-9a7e-374655f4298b.png)
※アップグレード内容により、画面内容やそもそも出る出ないは変化します

#### 回避コマンド版 apt upgrade（1ライナー完結で記述）
```
root@localhost:~# export DEBIAN_FRONTEND=noninteractive && apt upgrade
```

#### 補足1 
* DEBIAN_FRONTEND=noninteractive を環境変数設定しておいてもよい

#### 補足2 
* apt -y upgrade すれば、もしかしたらこの問題は発生しないかもしれない。私は設定ファイルの更新(upgrade)を確認するために-yオプションは使っていない

#### 補足3
* rootユーザーで操作しているのは気にしないでください :smile:
Renderの無料プランでDBを使う方法

# Renderとは
Renderは簡単にアプリなどのサービスを公開できるホスティングサービスです。
利用できる言語や機能も豊富でありながら、価格も抑えられた良いサービスです。

![スクリーンショット 2024-05-24 20.52.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/518208/4b75f9f1-d244-3a33-b5f5-c18838f3d9d1.png)
参考：https://render.com

# 無料プランについて
Renderには複数のプランが存在していますが、無料プランでも豊富な機能が利用できます。
詳細は公式サイトのhttps://render.com/pricing をご覧いただければと思いますが、簡単なサイトの公開であれば、無料プランでも十分対応できます。

少し難点なのは無料プランの場合、DBが3ヶ月でリセットされてしまうという点です。DBを利用しないサービスであったり、とりあえずプロトタイプを作ってみるという場合には問題ないのですが、サービスを長期間維持し続けるためには結構痛手です。

# DBを無料プランで使い続ける方法
有料プランに変更するという手もあるかと思いますが、ここでは無料プランを利用したまた、DBも維持し続ける方法について記載しようと思います。

私たちのプロジェクトではDBeaverというツールを利用しているため、そちらをもとに解説していきます。他のDBツールを利用していてもあまり差はないと思います。

大まかな流れはこんな感じです。
1. DBのダンプファイルを作る
1. RenderでDBを削除する
1. Renderで新しいDBを作成する
1. ダンプファイルを使用し、新しいDBでデータを復元する

## DBのダンプファイルを作る
1. DBeaverでRenderのDBに接続
　a. Host：Renderの管理画面 > Connections > Hostnameに`.singapore-postgres.render.com`を付加したもの（DBのゾーンが異なる場合はそこだけ変更）
　b. Database：Renderの管理画面 > Connections > Database
　c. ユーザー名：Renderの管理画面 > Connections > Username
　d. パスワード：Renderの管理画面 > Connections > Password
1. DBeaverで（追加したデータベース） > データベース > （追加したデータベース）を右クリックし、ツール > バックアップを選択
1. publicを選択
1. Output folder patternに任意のフォルダを設定し、開始を押下
1. ファイルが出力されたことを確認する

DBに外部から接続する場合には、Hostnameの後ろに`{リージョン}-postgres.render.com`をつける必要があるので、お忘れなく

## RenderでDBを削除する
これはRenderの管理画面から簡単にできるで割愛。

## Renderで新しいDBを作成する
こちらもRenderの管理画面から簡単にできるので割愛。
RegionやSQLのバージョンなどは元のものと揃えてください。

## ダンプファイルを使用し、新しいDBでデータを復元する
1. DBeaverでRenderの新しいDBに接続します
　a. ホスト名やDB名が変わっていますので、そこだけ変更をお忘れなく
1. その後DBeaverで（追加したデータベース） > データベース > （追加したデータベース）を右クリックし、ツール > リストアを選択
1. バックアップしたファイルを選択し、リストアを開始する
1. モーダルが出た場合はOKを押す

# その他
- SQLのバージョンはRenderとローカルで同じものを利用した方が良いです
- RenderにデプロイするアプリのDB接続に必要な情報はenvファイルなどの環境変数で保持しておき、DBの更新時に環境変数を更新する形にすると楽です（環境変数の更新はRenderの管理画面から行えます）
  - ソースコードを変更してデプロイすることもできますが、少し面倒なので
- 正式にリリースしているサービスの場合は、作業開始前にメンテナンスモードへの切り替えを行なってください
日本語プログラミング言語mind8で多倍長数計算（機能追加）

## 切り捨て、切り上げ、四捨五入を実装
プログラム全体は、[mind会議室](https://www.scripts-lab.co.jp/support/public/html/mind.cgi?tframe+035+-s+F001) のデータライブラリをご覧ください。
小数点以下の指定桁で処理する場合のみです。（千など整数部での処理は未）

## プログラムの一部
```
Ｋ最下位桁に一加算とは　（Ｋ小数　→　）
※副作用
　　　　小数情報Ａは　構造体情報
		桁数Ａは　ワード変数
	小数情報Ａに　入れる
	小数情報Ａの Ｋ桁数　回数指定し
		小数情報Ａの　Ｋ数字（回数）が　９と　等しい
			ならば　小数情報Ａの　Ｋ数字（回数）を　クリアし
			さもなければ
					小数情報Ａの　Ｋ数字（回数）を　一つ増加し
					終わり
			つぎに
	繰り返す
	小数情報Ａの Ｋ桁数を　一つ増加し
	小数情報Ａの Ｋ桁数を　桁数Ａに　入れる
　　１を　小数情報Ａの　Ｋ数字（桁数Ａ）に　入れる。

Ｋ小数桁数指定処理とは　（Ｋ小数、非負整数、処理区分→小数Ｗ）
		小数情報Ａは　構造体情報
		小数桁数は　変数
		処理区分は　変数	※０：切り捨て、１：四捨五入、２：切り上げ
		桁数Ａは　変数
		小数桁数Ａは　変数
		桁数は　変数
		減少桁数は　変数
		桁１は　変数
		切り上げは　変数
	小数情報Ａと　小数桁数と　処理区分に　入れる
	小数情報Ａの　Ｋ桁数を　桁数Ａに　入れる
	小数情報Ａの　Ｋ小数桁数を　小数桁数Ａに　入れる
	[減少桁数　:= 小数桁数Ａ - 小数桁数]
	減少桁数が　０　以下
		ならば　小数情報Ａを　返し　終わり
		つぎに	
	切り上げを　クリアする
	処理区分が　１と　等しい　※四捨五入
	かつ
	小数情報Ａの　Ｋ数字（減少桁数）が　５　以上
		ならば　切り上げを　セットし
		つぎに	
	処理区分が　２と　等しい　※切り上げ
		ならば	減少桁数　回数指定し
					小数情報Ａの　Ｋ数字（回数）
						ならば　切り上げを　セットし　打ち切り
						つぎに
				繰り返す
		つぎに
	小数情報Ａの　Ｋ符号を　小数Ｗの　Ｋ符号に　入れる　
	[桁数　:= 桁数Ａ - 　減少桁数]
　　[小数桁数　:= 小数桁数Ａ - 　減少桁数]　
	桁数を　小数Ｗの　Ｋ桁数に　入れる
	小数桁数を　小数Ｗの　Ｋ小数桁数に　入れる
	桁数　回数指定し
		[桁１ := 減少桁数 + 回数]
		小数情報Ａの　Ｋ数字（桁１）を　小数Ｗの　Ｋ数字（回数）に　入れる
	繰り返す	
	切り上げ　ならば　小数Ｗの　Ｋ最下位桁に一加算する
　　　　　　　つぎに	
	小数Ｗを　返す。

Ｌ小数桁数指定切り捨てとは　（Ｌ小数、非負整数→Ｌ小数）
		入力小数は　Ｌ小数情報
		小数桁数は　変数
		入力小数と　小数桁数に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　小数桁数で　０の　Ｋ小数桁数指定処理を
　　　　								Ｋ小数を文字列変換し　返す。

Ｌ小数桁数指定四捨五入とは　（Ｌ小数、非負整数→Ｌ小数）
		入力小数は　Ｌ小数情報
		小数桁数は　変数
		入力小数と　小数桁数に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　小数桁数で　１の　Ｋ小数桁数指定処理を
　　　　								Ｋ小数を文字列変換し　返す。　

Ｌ小数桁数指定切り上げとは　（Ｌ小数、非負整数→Ｌ小数）
		入力小数は　Ｌ小数情報
		小数桁数は　変数
		入力小数と　小数桁数に　入れる
		入力小数を　Ｋ小数に変換し　小数Ｃに　入れる
		小数Ｃの　小数桁数で　２の　Ｋ小数桁数指定処理を
　　　　								Ｋ小数を文字列変換し　返す。

```

## テスト用のプログラム
```
Ｌ小数１は　Ｌ小数型。
Ｌ小数２は　Ｌ小数型。
Ｗ桁数は　変数。
メインは　　　　　　　　（ ・ －－＞ ・ ）
　　文字列Ａは　文字列実体
	「２つの小数の四則演算をします。（空入力で終了）」と 表示し　改行し
	ここから
		「小数１＝」と　表示し　　文字列入力し　Ｌ小数１に　入れる
		Ｌ小数１が　空列？
			ならば　打ち切り
			つぎに
	 	Ｌ小数１が　Ｌ小数？
　　　　　　でなければ　　 改行し　「Ｌ小数入力エラー」と　表示し 改行し
					もう一度
			つぎに		
		「小数点以下桁数＝」と　表示し
		文字列入力し　文字列Ａに　入れる
		文字列Ａを　数値変換し　捨て　Ｗ桁数に　入れる
		Ｌ小数１を　Ｗ桁数で　Ｌ小数桁数指定切り捨てし　Ｌ小数２に　入れる
		「切り捨て＝」と　表示し　　Ｌ小数２を	表示し 改行し
		Ｌ小数１を　Ｗ桁数で　Ｌ小数桁数指定四捨五入し　Ｌ小数２に　入れる
		「四捨五入＝」と　表示し　　Ｌ小数２を	表示し 改行し
		Ｌ小数１を　Ｗ桁数で　Ｌ小数桁数指定切り上げし　Ｌ小数２に　入れる
		「切り上げ＝」と　表示し　　Ｌ小数２を	表示し 改行し  
　      改行し		
	繰り返す。
```

## 実行結果
```
c:\mind8\pmind\sample>test04
２つの小数の四則演算をします。（空入力で終了）
小数１＝123.456789
小数点以下桁数＝4
切り捨て＝+123.4567
四捨五入＝+123.4568
切り上げ＝+123.4568

小数１＝123.1203
小数点以下桁数＝2
切り捨て＝+123.12
四捨五入＝+123.12
切り上げ＝+123.13

小数１＝999.9999
小数点以下桁数＝3
切り捨て＝+999.999
四捨五入＝+1000.000
切り上げ＝+1000.000
```
やってみたシリーズ7編htmlStdio html CSS JavaScript 完結編

２か月かけたhtml,CSS,JavaScriptで編集できる、video,audio,image,table,textを組み合わせ時間経過で変えて一つの動画的に見られる、試行錯誤の結果が出ましたので、お知らせします。

なにぶん、大きくなったのでホームページにて、公開と致しております。アドレスは、
https://tattyan0-0.sakura.ne.jp/etc/index.html
お得なように、色々付属して大きくなっております。必要なのを残して掃除して使う事をお勧めします。
すべて、実働のファイルを提供いたしています。
検査不足の動作不具合などが見つかったら直していただいて結構です。著作権は保留「使わない」ので、二次頒布、類似品は、覚悟の上ですが、使用者におかれましたら、すべて無料ですから
騙されない様にしてください。

![スクリーンショット 2024-05-24 210806.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3625232/a1e27bec-691e-e7f0-4f33-146688537ce1.png)
こんな感じ。では、よろしくお願いいたします。プログラムを組むうえで参考になれば、うれしく思います。
圧倒的初心者によるentの初期設定

# entの初期設定
*筆者のレベル*
>最近Web開発の勉強を始めてHTML,CSS,JavaScriptの基礎が分かる程度。

## プロジェクトに導入
```bash
# 作りたいテーブルごとにスキーマを作成
$ go run -mod=mod entgo.io/ent/cmd/ent new <スキーマ名>
```
上記のコマンドを実行することで、プロジェクトフォルダにentがインストールされ、entのフォルダが追加される。

## スキーマにフィールドを追加
各スキーマごとに作られたent/schema/<スキーマ名>.goを編集してfieldを追加する。fieldの作成は公式ドキュメントを参考にしてください。

https://entgo.io/ja/docs/getting-started/

スキーマを設定し終わったら下記のコマンドを実行
```
$ go generate ./ent
```
上記のコマンドを実行すると下記のようなフォルダ構成がentフォルダの下に作られる
```bash
ent
├── client.go
├── config.go
├── context.go
├── ent.go
├── generate.go
├── mutation.go
... truncated
├── schema
│   └── user.go # このスキーマを作成
├── tx.go
├── user
│   ├── user.go
│   └── where.go
├── user.go
├── user_create.go
├── user_delete.go
├── user_query.go
└── user_update.go
```
>上記はent/schema/user.goのスキーマを作成した後にコマンドを実行した例。
## dbサーバとの接続
### Postgresとの接続
>Postgres以外のdbの接続は以下の公式ドキュメントを参考にしてください

https://entgo.io/ja/docs/getting-started

```bash
import (
    ~
    ~
    ~
    "project_folder/ent" #プロジェクトにあるentフォルダ
    _ "github.com/lib/pq" #postgresのドライバ
)

func main(){
    #APIサーバとdbサーバを接続(設定は各自のyamlファイルなどに記載してあるものを記述)
    client, err := ent.Open("postgres","host=<host> port=<port> user=<user> dbname=<database> password=<pass>")

    #先ほど作成したSchemaをPostgresのテーブルに移行(テーブルを作成)
    if err := client.Schema.Create(context.Background()); err != nil {
        log.Fatalf("failed creating schema resources: %v", err)
    }
}
```
>テーブルに対しての操作は公式ドキュメントを参考にしてください。(真ん中の方にあります)

https://entgo.io/ja/docs/getting-started
The global expo-cli package has been deprecatedと表示されてしまうときの対処法



terminalでこのような表示がなされるときの解決策


```dif_terminal
┌───────────────────────────────────────────────────────────────────────────┐
│                                                                           │
│   The global expo-cli package has been deprecated.                        │
│   The new Expo CLI is now bundled in your project in the expo package.    │
│   Learn more: https://blog.expo.dev/the-new-expo-cli-f4250d8e3421.        │
│                                                                           │
│   To use the local CLI instead (recommended in SDK 46 and higher), run:   │
│   › npx expo <command>                                                    │
│                                                                           │
└───────────────────────────────────────────────────────────────────────────┘
Starting project at C:\Users\kntas\setsuyaku\setsuyaku-app
ExpoMetroConfig.loadAsync is not a function
TypeError: ExpoMetroConfig.loadAsync is not a function
    at runMetroDevServerAsync (C:\Users\kntas\setsuyaku\setsuyaku-app\node_modules@expo\dev-server\src\MetroDevServer.ts:86:45)
    at startDevServerAsync (C:\Users\kntas\setsuyaku\setsuyaku-app\node_modules\xdl\src\start\startDevServerAsync.ts:75:77)
    at startAsync (C:\Users\kntas\setsuyaku\setsuyaku-app\node_modules\xdl\src\start\startAsync.ts:84:41)

```
以下のコードを実行します

```dif_terminal
$ npx expo upgrade
$ npm install --force
```

これで問題解決
エンジニア一人月にかかる費用の相場｜条件で変わる相場を解説

エンジニアを雇う際には、エンジニアの月給や単価の相場を把握しておくことが重要です。本記事では、エンジニアの相場に関する情報を業態別や職種別、地域別に分けて解説します。さらに、エンジニアを雇う際に知っておくべき理由や、相場を見極める方法についてもご紹介します。

<h2>一人月とは

エンジニアの月給や単価を表す「一人月」とは何か、その意味と重要性について解説します。
<h2>エンジニアを雇うのに相場を知っておくべき理由

なぜエンジニアの相場を知っておく必要があるのか、その理由とメリットについて詳しく説明します。

<h2>エンジニア単価の相場の見極め方

エンジニアの単価相場を見極める方法や、適正な価格を判断するポイントについて解説します。

<h2>業態別エンジニア相場

業界や企業規模によって異なるエンジニアの相場について、業種別の傾向や特徴を紹介します。

<h2>職種別ITエンジニアの相場

エンジニアの職種ごとの相場について、プログラマー、システムエンジニア、データサイエンティストなどの役割や技術スキルに基づいた相場を解説します。

<h2>地域別エンジニア相場

日本国内の主要な都市や地域ごとのエンジニアの相場について、地域の特性や需要・供給状況に基づいた相場を比較します。

<h2>まとめ

エンジニアを雇う際に知っておくべき相場情報や見極め方について、まとめてお伝えします。

本記事では、エンジニアの相場情報を理解することで、適切な採用や契約を行う際の参考になるでしょう。エンジニアの市場動向を把握し、効果的な人材確保のための知識を身につけましょう。

「エンジニア一人月にかかる費用の相場｜条件で変わる相場」を解説した記事にご興味のある方は、以下のリンクをご覧ください。
https://hblab.co.jp/blog/cost-engineer-per-month/
NIMでシステムバックアップしたら謎の論理ボリュームができた

# AIXで作成した覚えのない論理ボリュームがあった
## 発見の経緯
```ksh:mksysb実行中
rootvg についての情報ファイル (/image.data) を作成しています。0512-020 mkvgdata: 論理ボリューム fslv00 には、/etc/filesystems の中に
マウント・ポイントを正確に定義しているエントリーがありません。
そのため、論理ボリュームはバックアップされません。  論理ボリュームを
バックアップに含めたい場合には、mksysb を実行する前に
/etc/filesystems ファイルの中にスタンザを加え、このコマンドを再度
実行してください。
```

なにこのメッセージ
```ksh:確認コマンド
# lsvg -l rootvg
rootvg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
hd5                 boot       1       1       1    closed/syncd  N/A
hd6                 paging     64      64      1    open/syncd    N/A
hd8                 jfs2log    1       1       1    open/syncd    N/A
hd4                 jfs2       7       7       1    open/syncd    /
hd2                 jfs2       45      45      1    open/syncd    /usr
略
fslv01              jfs2       22      22      1    open/syncd    N/A
fslv02              jfs2       8       8       1    open/syncd    N/A
fslv03              jfs2       10      10      1    open/syncd    N/A
fslv04              jfs2       60      60      1    open/syncd    N/A
fslv05              jfs2       2       2       1    open/syncd    N/A
fslv06              jfs2       21      21      1    open/syncd    N/A
略
```
fslvXXなんて知らない！こんなことが起きたら・・・

## よくありそうな原因
mksysbをctrl+cやkillで止めた？
いつからなのかは調べてないですが、NIMでsmitからmksysbを取るときに
```smit
スナップショットを使用してバックアップを作成しますか? [はい]
```
こいつがデフォルトで設定されています。

コマンドラインの場合は
```コマンド
#mksysb -iTX /dev/hoge ←Tがスナップショット
```

これを設定しているときに途中で止めると外部スナップショットを消してくれずにこんなことが起きるかも

## コイツラの確認
snapshotコマンドで確認できる
```コマンド
# lsvgfs rootvg | while read f ; do
snapshot -q $f
done
/ のスナップショット
現行  ロケーション          512 ブロック        空き 時刻
*     /dev/fslv00                 262144      247808 Thu May 16 13:38:48 JST 2024
/usr のスナップショット
現行  ロケーション          512 ブロック        空き 時刻
*     /dev/fslv10                1835008     1810688 Thu May 16 13:38:55 JST 2024
/var のスナップショット
現行  ロケーション          512 ブロック        空き 時刻
*     /dev/fslv11                 524288      518912 Thu May 16 13:38:56 JST 2024
/tmp のスナップショット
現行  ロケーション          512 ブロック        空き 時刻
*     /dev/fslv09                 262144      259584 Thu May 16 13:38:55 JST 2024
/home のスナップショット
現行  ロケーション          512 ブロック        空き 時刻
*     /dev/fslv05                 262144      260608 Thu May 16 13:38:52 JST 2024
```
:::note warn
複数回止めてると各LVで複数個出ることもあり。
:::

## 消し方
まずはマウントしてたら外しましょう。
```コマンド
# mount
略
/dev/fslvXX   /admin/mksysb.xxxxxxx/xxxx/ ....
/dev/fslvXX   /admin/mksysb.xxxxxxx/xxxx/ ....
/dev/fslvXX   /admin/mksysb.xxxxxxx/xxxx/ ....

# umount /admin/mksysb.xxxxx.....
```
ついでsnapshotの削除
```コマンド
# snapshot -d ロケーション
```
上記で複数のロケーションがある場合も*がついているアクティブの方を消すと全部消える

このあとにmksysbを再実行するとちゃんと取れました。

スッキリ
ChainlitでchatbotのUIを作ってみました

先日、chainlitを使ってchatbotのUIを作ってみました。
chainlitは、chatbotのUIを作成するためのOSSで、streamlitに似たようなものです。
使い方は非常に簡単で、langchainとの互換性も良いので、試してみました。

まず最初は、langchainを使ってRAGのchatbotを作成し、それをchainlitに接続しました。私のPCにはGPUがないため、ColabのGPUを使って、ngrokでトンネリングしました。ここは少しやり方がわからなかったので時間かかってしまいました。

私が作ったchatbotは、ChatGPTのようにファイルをアップロードすると、そのファイルを参照しながら対話するタイプのものです。イメージは⇩の通りです。

![5193.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/9d04e25c-bc02-95bd-9c75-fca48166b480.png)



ファイルを読み込んだ後は、質問に答えることができます。
中身は基本的なRAGをベースに、会話履歴を覚える機能と参照元を返す機能を追加しました。法律知識に関するPDFをアップロードし、「クーリングオフ制度」についての質問をしてみました（実は私もこの制度についてよく知らなかったのですが）。回答の参照元を見ると、質問に正しく答えられていることがわかります。



![5191.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/a9167af9-32d4-8338-f390-99bb1d68865e.png)

また、⇩のスクリーンショットはchainlitの特徴的な機能の一つで、チェーン全体の動作プロセスを確認できます。どのチェーンからどのチェーンに、どのような内容が渡されていくのかが一目でわかるので、とても便利だと感じました。


![5192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3556459/69da3c5e-d409-df09-6aac-eeddd32d6de8.png)


興味ある方試してみてください：

https://github.com/Chainlit/cookbook
react naitive <ScrollView>スクロールしても元の位置に戻ってしまう問題

スクロールしても元の位置に戻ってしまう問題が解決できました
とっても簡単誰にでも解決できます！！！！


```diff_Javascript
import React, { useEffect, useState, useRef } from "react";
import { View, Text, ScrollView, StyleSheet } from "react-native";
import ExpenseItem from "./ExpenseItem"; 
import { collection, onSnapshot } from "firebase/firestore";
import { db } from "../firebase/Firebase"; 

export const BuyItemsList = ({
  deleteExpense,
  selectedMonth,
  thisMonth,
}) => {
  const [expenseItems, setExpenseItems] = useState([]);
  const [loading, setLoading] = useState(true);
  const scrollViewRef = useRef(null);

  useEffect(() => {
    const fetchExpenses = () => {
      const unsubscribe = onSnapshot(
        collection(db, "expenseItems"),
        (snapshot) => {
          const expenses = [];
          snapshot.forEach((doc) => {
            expenses.push({ ...doc.data(), docId: doc.id });
          });
   
          expenses.sort((a, b) => b.time.seconds - a.time.seconds);

          setExpenseItems(expenses);
          setLoading(false);
        }
      );

      return unsubscribe;
    };

 
    fetchExpenses();
  }, []);

  if (loading) {
    return <Text>Loading...</Text>;
  }

  return (
    <View style={styles.container}>
      <Text style={{ fontSize: 20, fontWeight: "bold", marginBottom: 10 }}>
        支出一覧
      </Text>
      <ScrollView
        style={styles.scrollView}
        ref={scrollViewRef}
        contentContainerStyle={styles.contentContainer}
      >
        {expenseItems.length === 0 ? (
          <Text style={styles.noExpensesText}>何も買ってないよ</Text>
        ) : (
          expenseItems.map((expenseItem) => (
            <ExpenseItem
              key={expenseItem.docId}
              deleteExpense={deleteExpense}
              expenseText={expenseItem.text}
              expenseAmount={expenseItem.amount}
              expenseTime={expenseItem.time}
              expenseItem={expenseItem}
              selectedMonth={selectedMonth}
              thisMonth={thisMonth}
            />
          ))
        )}
      </ScrollView>
    </View>
  );
};

const styles = StyleSheet.create({
  container: {
    height: 300, //これを追加//////ここだよーーー
  },
  contentContainer: {
    paddingBottom: 80, 
  },
  noExpensesText: {
    fontSize: 16,
    color: "#888",
    textAlign: "center",
    marginTop: 20,
    fontStyle: "italic",
  },
});
```


要らない情報が多いので今度消しておきますね
スクロールの様子についても動画を載せます
rss-parserで複数のメディアのサムネイルを取得して表示する

さまざまなメディアからサムネイルを取得したいとき、XML内でサムネイル画像のurlを取得する要素が違うため整形する必要がある。

### 修正前のコード
```tsx
const FrontPage = async () => {

  const { contents } = await getList();
  const parse = new Parser()

  return (
    <div className='p-front-page'>
      <ul className={styles['p-front-page__list']}>
        {contents.map(async (rss) => {
          const feed = await parse.parseURL(rss.url)
          return feed.items.map((item) => {
            return (
              <ArticleCard
                thumbnail={item.enclosure?.url}
                date={item.pubDate}
                link={item.link}
                title={item.title}
                site_title={rss.title}
              />
            )
          })
        })}
      </ul>
    </div>
  )
}
```
これだとenclosureタグでサムネイル画像のurlを出力しているメディアにしか対応できない。
rss-parserのcustomFields関数を使ってマッピングする。

```tsx
const FrontPage = async () => {

  const { contents } = await getList();
  const parse = new Parser({ 
    customFields: {
      item: [['media:thumbnail', 'image']], //追記
    }
  });

  return (
    <div className='p-front-page'>
      <ul className={styles['p-front-page__list']}>
        {contents.map(async (rss) => {
          const feed = await parse.parseURL(rss.url)
          return feed.items.map((item) => {
            return (
              <ArticleCard
                thumbnail={item.enclosure?.url ?? item.image} //追記
                date={item.pubDate}
                link={item.link}
                title={item.title}
                site_title={rss.title}
              />
            )
          })
        })}
      </ul>
    </div>
  )
}
```
こうすることで、どの様なタグでも同じように要素をマッピングできる。
LaravelとCakePHPの違い

## LaravelとCakePHPの違い
### はじめに
Web開発において、フレームワークを使用することで開発の効率と品質を大きく左右します。この記事では、PHPで広く使用されている2つのフレームワーク、LaravelとCakePHPについて調べたことを簡単に比較します。
#### Laravelとは
Laravelは、「Symphony」というPHPフレームワークを土台にし、ほかのフレームワークも参考にして開発されたPHPフレームワークです。2011年にTaylor Otwell氏によってリリースされ、学習コストも比較的少ないことで高い評価を受けています。
#### CakePHPとは
CakePHPは、PHPベースのオープンソースフレームワークで、MVC（Model-View-Controller）アーキテクチャを採用しています。2005年に開発が始まり、シンプルかつ堅牢な設計が特徴です。
余談ですが、CakePHPのCakeはお菓子のケーキのことで、「ケーキを焼くように簡単に開発できるから」という意味あるらしいです。
#### 学習難易度
・Laravel: 公式ドキュメントやチュートリアルが充実しており、学びやすいフレームワークです。
・CakePHP: 最初は規約に従う必要があるため少し取っつきにくいかもしれないですが、慣れると一貫性があり理解しやすくなります。
#### パフォーマンス
・Laravel: 豊富な機能により、大規模アプリケーションでも高いパフォーマンスを発揮します。
・CakePHP: シンプルで効率的な設計により、中小規模アプリケーションで軽快な動作を実現します。
#### 開発スタイル
・Laravel: 高い自由度が高く、開発者が構成や設計を柔軟にカスタマイズできます。
・CakePHP: 規約に従うコーディングスタイルを推奨しており、チーム開発での一貫性を確保しやすいです。
### 最後に
簡単にですが、LaravelとCakePHPを比較してみました。
私はまだLaravelしか触ったことがないので、どこかのタイミングでCakePHPを含め他のフレームワークにもチャレンジしてみたいです。そうすることで、様々な比較ができるようになり、それも１つの楽しみ方なのかなと思っています。とはいえLaravelに対する理解もまだまだ低いので、まずはしっかり使いこなせるレベルになることを目指しまだまだ頑張ります！
[Linux] Linuxディストリビューションとは

# まとめ
Linuxディストリビューションは、Linux（Linuxカーネル）に、様々なソフトウェアやファイルを追加したもの（Linuxカーネルとその上で動作するソフトウェアを組み合わせた**オペレーティングシステム**）を指します。
各ディストリビューションは異なる目的やユーザー層をターゲットにしており、それぞれ独自の特徴やパッケージ管理システムを持っています。

# 目次
- [Ubuntu](#Ubuntu)
- [Debian](#Debian)
- [CentOS](#CentOS)
- [archLinux](#archLinux)

# Ubuntu
Ubuntuは、デスクトップからサーバーまで広く使われているディストリビューションです。Debianをベースにしており、Canonical社によって開発・サポートされています。
- 特徴
  1. 使いやすさとインストールの簡便さ
  1. 定期的なリリースサイクル（6ヶ月ごとに新しいバージョン、2年ごとにLTS（長期サポート）バージョン）
  1. 豊富なコミュニティサポート
  1. 直感的なインターフェース＝Linuxカーネルだけでは使用できないGUIが使用できる（GNOME（GNU Network Object Model Environment）デスクトップ環境　等）
  1. パッケージ管理システムはAPT（Advanced Package Tool）

# Debian
Debianは、安定性と信頼性を重視したディストリビューションで、Ubuntuを含む多くのディストリビューションのベースとなっています。
- 特徴
　1. 広範なパッケージリポジトリ
　1. パッケージ管理システムはAPT

# CentOS
CentOSは、Red Hat Enterprise Linux（RHEL）のクローンとして始まりましたが、現在はCentOS Streamとして、RHELの次期リリースの開発プラットフォームとして機能しています。
- 特徴
  1. RHELとの互換性
  1. サーバー向けに人気
  1. パッケージ管理システムはDNF

# archLinux
Arch Linuxは、シンプルさとカスタマイズ性を重視したローリングリリースのディストリビューションです。
- 特徴
  1. 最小限の初期インストール
  1. パッケージ管理システムはPacman

# 参考リンク
- [【Linux】ディストリビューションとは何か？](https://www.sejuku.net/blog/58257)
- [【Ubuntu入門】できること、用途を知りOSを理解しよう！](https://www.sejuku.net/blog/85948) 
- [【超ざっくりわかる】DebianとUbuntuの違いを比較しました](https://eng-entrance.com/linux-debian-ubuntu)
- [私的Arch Linuxインストール講座](https://zenn.dev/ytjvdcm/articles/0efb9112468de3)
- [Arch Linux での Pacman コマンドの究極ガイド](https://ja.linux-console.net/?p=12771)
「パッケージ開発論」を題材に勉強会をした

筆者の ERP パッケージ ソフト開発についての学びを題材に、勉強会を行った記録です。

資料はこちら。

<script defer class="speakerdeck-embed" data-id="730be01bd6a04cee83fbbc878ec9cc9d" data-ratio="1.7777777777777777" src="//speakerdeck.com/assets/embed.js"></script>


## 概要

### パッケージ ソフトの定義と特徴

パッケージ ソフトとは、あらかじめ全てを用意し網羅したソフトウェアのことを指し、オーダーメイド型のSIerと対比される。
パッケージ開発には、開発者の考え抜いたアイデアが凝縮されており、既製品であっても価値のあるシステムである。

### パッケージ開発における疑問点と回答

「パッケージ=既製品=安物？」：既製品であるが、ブランドであり知恵の結晶である。
「自分でなんでも考えるって難しそう？」：難しいが、工夫や柔軟性を持って取り組むことが重要。
「お客様の声を聴かないの？」：聴くことは重要だが、開発者の提案や企画も同様に大切。
「不具合が起こったら？」：顧客との関係を大切にし、背景を理解しながら対応する。
「パッケージはリリースしたら終わり？」：フィードバックを受けて常に進化し続ける。
「確認エクスプローラ」の機能と役割:

パッケージ ソフトの一例として、確認のためのツール「確認エクスプローラ」を紹介。
SQLを実行できるが、更新操作はさせないという設計意図が込められている。

### カタログの重要性とフィードバック
カタログは将来的な理想図を描き、フィードバックを受けるためのものである。
ユーザーの要望を反映しつつ、開発者としての視点を持って企画・設計することが重要。

### 開発者の役割と責任
開発者一人一人がプロダクト マネージャーのように、製品の完成イメージを持ち、それに基づいて機能を分け、優先順位を付ける。
お客様との関係を重視し、継続的に改善していく姿勢が求められる。

### まとめ
パッケージ ソフトの開発は、既製品でありながらも、開発者の知恵と工夫が詰まったシステムであり、常に進化し続けるものである。
ユーザーとの良好な関係を築き、フィードバックを反映させることが、成功の鍵である。


## 感想
「開発論」なんて言うと大層な名なんですが...

https://techbookfest.org/product/suzuALeaBg8uu7jvn6YBXM

> 私の「前職」の考え⽅は「開発は⾃分で考え抜け」が根底にありました。これは⽇本のソフトウェア屋さんとしては珍しく、この考え⽅を共通認識にする、皆で浸透させていくことに成功したのは、「開発論」というものの存在が⼤きいです。⼤きいですが、⾔葉にしてみると「開発論」って⼤層な名前ですよね。常にその説明に苦慮してきまして、まあ、なんかそういう参考図書みたいなものがほしいと思っていました。

> なんとなく当時⽇系 IT 史の奇跡とも⾔われた会社のプロダクト開発が、どういった理念のもとに築かれたのか、イチ開発者 n=1 ⽬線の戯⾔として楽しんでいただけたらと思います。

ま、そんな⼤層なもんじゃないんです。ないんですが、書きました。ちょっと面白がってもらいたいなという気持ちで書いています。そんな本の宣伝も兼ねてしまった勉強会の記録でした。

以上です～
Macセットアップ

## 環境
Apple M2 Pro
macOS Sonoma 14.4.1

## まずやること
* OSを最新にする
* ダークモードにする
* トラックパッドの軌跡を最速にする
* 「タップでクリック」をオン
* キーのリピート速度を最速にする
* リピート入力認識までの時間を最短にする
* Caps LockをControlに置き換える
* 壁紙を変更
* Touch ID設定
* Dock設定
* 通知設定
* メニューバー設定
* ロック画面の設定
* ホットコーナーの設定変更
* Apple IDでサインイン

https://qiita.com/y_otake/items/cc9e2461c62eb6f9c53a

https://qiita.com/yumenomatayume/items/69ef0911d9a46145dfd5

https://qiita.com/shge/items/e02b7b27fb2c974414a3

## 最初に入れるアプリ
* Chrome（デフォルトブラウザにする）
* Slack
* [⌘英かな](https://ei-kana.appspot.com/)

## Homebrew
https://brew.sh/ja/
```.zshrc
export PATH=/opt/homebrew/bin:$PATH
```
パスを通したら、たくさん`brew install`する
* clipy iterm2
* zsh zsh-autosuggestions zsh-completions zsh-kubectl-prompt zsh-syntax-highlighting
* awscli kubernetes-cli stern jq yq kind
* bat colordiff fzf git htop peco tree watch
* go node
* jetbrains-toolbox rancher sourcetree tableplus visual-studio-code

## zshの設定
https://qiita.com/ryutoyasugi/items/cb895814d4149ca44f12

https://qiita.com/shepabashi/items/f2bc2be37a31df49bca5

`.zsh_history`は前のPCから持ってくるといい

## gitの設定
```sh
$ git config --global user.email 'XXX'
$ git config --global user.name 'XXX'
$ git config --global init.defaultBranch main
$ git config --global alias.st status
$ git config --global alias.cm commit
$ git config --global alias.br branch
$ git config --global alias.ch checkout
$ git config --global alias.sw switch
```
https://qiita.com/shizuma/items/2b2f873a0034839e47ce

## その他
https://www.octotree.io/
Unity Catalogでの事前トレーニング済みモデルの提供

見逃していました。こちらのアップデート。

[**Pre-trained models in Unity Catalog (Public Preview)**](https://docs.databricks.com/en/release-notes/product/2024/may.html#pre-trained-models-in-unity-catalog-public-preview)

> Unity Catalogで高品質な事前トレーニング済みGenAIモデルが提供されるようになりました。これらの事前トレーニング済みモデルによって、ご自身のワークフローで最先端のAI機能にアクセスできるようになり、ご自身でカスタムモデルを構築するために必要な時間と費用を削減することができます。詳細は[こちら](https://docs.databricks.com/ja/generative-ai/pretrained-models.html)をご覧ください。

すでに気づいていた方が。

https://qiita.com/isanakamishiro2/items/cd67f5cf68635dd30595

モデルサービングを使えるリージョンでの提供なのでAWS東京リージョンでも使えます。

カタログエクスプローラで`system.ai`のスキーマが表示されるようになっています。
![Screenshot 2024-05-24 at 17.42.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/451d1824-f16a-067b-33fd-dfb5c4d22f8f.png)
![Screenshot 2024-05-24 at 18.11.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/0387a468-a1a1-1486-dd89-43931e2d3508.png)

エンべディングモデルの`bge_small_en_v1_5`をモデルサービングエンドポイントにデプロイしてみます。
![Screenshot 2024-05-24 at 17.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/d0a4d817-0cfd-c26a-f240-e980df84363b.png)

デプロイされました。
![Screenshot 2024-05-24 at 18.12.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/2adab60e-4d25-871c-c616-8fab30195d0d.png)

右上の`Query endpoint`をクリックして動作確認します。
![Screenshot 2024-05-24 at 18.13.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/08fd9970-c762-7a08-b25b-b1efa4067a2d.png)

動きました！
![Screenshot 2024-05-24 at 18.13.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1c9a2f6e-7e71-f99e-b919-262be376a82d.png)

ご活用ください！

### はじめてのDatabricks

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

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)
flutterで作成したアプリを実機にインストールする（iOS）

プロジェクトのルートディレクトリで下記を実行する。
```shell

flutter clean && flutter build ios && flutter install

```
接続されているデバイスが表示されて「Please choose one (or "q" to quit): 」と表示されるので、それに従いインストールするデバイスを選択する。
ネットワークの基礎勉強1

ネットワークとは網目のように広がってあり、情報を運ぶもの。
ネットワークの利点とはリソースを複数の機器で共有できること。

マルチアクセスネットワークとは
複数の機器が同じネットワーク内で通販できること。

ポイントツーポイントネットワークとは
一つのパソコンとパソコン同士が通信をすること。またはルーターからルーターの通信もこれに値する。

データとは複数のコンピュータが一つのリソースを共有するための情報である。

カプセル化とはパケットにPDU(通信をするための情報)をくっつけること。

OSI参照モデルのレイヤーとは
下位レイヤーは上位レイヤーのために動き。上位レイヤーは下位レイヤーを気にしない。

プロトコルとはデータの中身やヘッダーや通信ルールを決めるもの。

データユニットとは、パケットに経路情報であるヘッダーやトレーラーをつけること。
BottomSheetScaffoldの実装

# はじめに
今回はよくあるModalBottomSheet...ではなくBottomSheetScaffoldを実装していこうと思います
### 本文
実装をそのまま貼り付けて要点はコメントしてあります。
```kotlin
// まず`SheetState`を用意します。
// 提供されているものを使えば基本的には大丈夫ですが、詳細を設定したい場合は`SheetState`を呼び出して設定しましょう。
// ここで注意が必要なのはskip系を設定した状態で`initialValue`をその値にしてしまうとクラッシュしてしまいます
val sheetState = rememberBottomSheetScaffoldState(
    SheetState(
    // 途中の表示をスキップするかどうか
        skipPartiallyExpanded = false,
        density = LocalDensity.current,
        // 初期表示
        initialValue = SheetValue.Hidden,
        // 状態が変わった時に何かしたいときはここで処理を書く
        confirmValueChange = { true },
        // 隠れた状態をスキップするかどうか
        skipHiddenState = false,
    )
)

LaunchedEffect(showSubMenu) {
    if (showSubMenu) {
        sheetState.bottomSheetState.expand()
    } else {
        sheetState.bottomSheetState.hide()
    }
}

val peekHeight = LocalConfiguration.current.screenHeightDp * 0.9
BottomSheetScaffold(
    scaffoldState = sheetState,
    sheetPeekHeight = peekHeight.dp,
    sheetContainerColor = Color.White,
    sheetContent = {
    // シート内で表示したいUI
        SheetContent()
    },
) {
// 常時表示しておきたいUI
    Content
}
```
### 最後に
あまり使われないですが、知っておくと多少便利なこともあるのでどなたかのお役に立てれば幸いです
Ubuntu23.10でedutermが動かないときの対処

検索しても同じ現象に遭遇した人見つけられなかったので、ネットの海に投げておく

## 結論

```diff
XSetWindowAttributes wa = {
-    .background_pixmap = ParentRelative,
+    .background_pixel = ParentRelative,

x11->termwin = XCreateWindow(x11->dpy, x11->root,
                             0, 0,
                             x11->w, x11->h,
                             0,
                             DefaultDepth(x11->dpy, x11->screen),
                             CopyFromParent,
                             DefaultVisual(x11->dpy, x11->screen),
-                             CWBackPixmap | CWEventMask,
+                             CWBackPixel | CWEventMask,
                             &wa);
```

## やろうとしてたこと

ターミナルの学習にちょうどいいということで気になっていた記事。

https://toyamaguchi.hatenablog.com/entry/2020/01/31/213000

やろうやろうと１年以上たって、ようやくやる気が出てきたので動かしてみたところ動かない。
クラッシュしてログイン画面に戻される。
たぶんウィンドウマネージャあたりがクラッシュするから再起動にはならずディスプレイマネージャに戻される。

ちなみに、使ってないノートPCにGUIのUbuntu23.10をいれている。
`apt list -a libx11-dev`は`libx11-dev/mantic,now 2:1.8.6-1ubuntu1 amd64`

## 原因

分からない。X11のことが分からない。

* waylandからxorgにしても変わらなかった
* Pixmapのdepthが異なるとBadMatchエラーになるというドキュメントは見かけたが、何と何を比較したらいいのかわからなくてそれが原因かもわからなかった
* クラッシュするのでログが出ているのか出ていないのか、よくわからなかった

## 感想

原因がはっきりしないあたりに技術力の低さを感じる。悲しみ。
学習用にいろいろ設定いじっていたので、その影響もあるかもしれない。

ウィンドウの背景の部分なので、まあpixelでも特に問題ないでしょうということで、確認はいったん謎のままにしておく。
何かコメントいただいたら更新する。
この調査にあたり、X11のところはある程度何しているのかわかってきたので、次は疑似端末の方を読む。
PythonがOpenSSL周りのエラーで動かない

# はじめに
こんにちは、ユーゴです。今回は、Pythonをローカルで使用していた時に起きたエラーについて解説します。「バイトでPythonを使っているのに、環境が壊れているのはヤバい！」となり、慌てて直しました。
ちなみにdockerでは、さすが仮想環境なだけあり無事に実行できました。

# 環境
・macOS Sonoma：14.4.1
・Python：3.16.2
・pip：24.0

# 課題
「jupyter notebook」や「pip install」を実行するとき、また「reqeusts」ライブラリを使う処理を実行するときなど、OpenSSL周りのエラーが起きる。

例えば、jupyter notebookでは以下のようなエラーが出た。

```bash
Traceback (most recent call last):
  File "/Users/xxxxx/.pyenv/versions/3.11.6/bin/jupyter-notebook", line 5, in <module>
    from notebook.app import main
  File "/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/site-packages/notebook/app.py", line 12, in <module>
    from jupyter_server.base.handlers import JupyterHandler
  File "/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/site-packages/jupyter_server/base/handlers.py", line 21, in <module>
    import prometheus_client
  File "/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/site-packages/prometheus_client/__init__.py", line 3, in <module>
    from . import (
  File "/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/site-packages/prometheus_client/exposition.py", line 8, in <module>
    import ssl
  File "/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/ssl.py", line 100, in <module>
    import _ssl             # if we can't import it, let the error propagate
    ^^^^^^^^^^^
ImportError: dlopen(/Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_ssl.cpython-311-darwin.so, 0x0002): Library not loaded: /usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib
  Referenced from: <DD150696-CAB5-3AB7-906C-3ADC45D3C658> /Users/xxxxx/.pyenv/versions/3.11.6/lib/python3.11/lib-dynload/_ssl.cpython-311-darwin.so
  Reason: tried: '/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib' (no such file), '/System/Volumes/Preboot/Cryptexes/OS/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib' (no such file), '/usr/local/opt/openssl@1.1/lib/libssl.1.1.dylib' (no such file)
```

# 原因
おそらく、何かの拍子にOpenSSLの環境を破壊しています。自分が破壊した原因は不明です。

# 解決策
OpenSSLを入れ直し、Pythonも入れ直します。
以降、ターミナルで実行します。

## 1. OpenSSLをインストール

```bash
brew install openssl@1.1
```

## 2. 環境変数を設定

```bash
export LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
export CPPFLAGS="-I/usr/local/opt/openssl@1.1/include"
export PKG_CONFIG_PATH="/usr/local/opt/openssl@1.1/lib/pkgconfig"
```

## 3. Pythonを入れ直す

```bash
pyenv uninstall 3.11.6
pyenv install 3.11.6
```

## 4. 確認
無事動きました。

# まとめ
いかがだったでしょうか。今回は、Pythonで起きたOpenSSL周りのエラーについて解説しました。
このように、Pythonの技術的な紹介から、Unity, AWSなどの技術的な紹介もしています。お役に立てましたら、いいね, LGTM, フォローなどよろしくお願いします！
架空レストランHPの制作過程 Part3 情報設計＆ワイヤフレーム編

前回の記事

https://qiita.com/yamashee/items/f055ade5f1d5258143c4

## ページ構成
各コンテンツはページ上部から、以下のような順番で掲載することにしました。
### ヘッダー
* ロゴ
* コンバージョンボタン
* ナビゲーション
### ファーストビュー
雰囲気が伝わる写真＆キャッチコピー
### コンセプト
イタリアの古き良き食文化と、先進的な価値観を取り入れたイタリアンレストラン。
イタリアで修業を積んだシェフが2013年に開業

💡レストランの色（特徴、魅力）を端的に表した文章をページ上部に掲載します。いわば自己紹介です。
### 更新情報
* 20xx/xx/xx 新作ワインが入荷しました
* 20xx/xx/xx 年末年始の営業について

💡既存顧客に向けても更新された情報が一目でわかるようにページ上部に配置しています。
たまにお店は普通に営業しているのに更新情報が1年以上前のもので止まっているサイトがあったりします。ウェブサイトというのは定期的に更新することが大事ですが、どうしてもそれが難しい場合はXやFacebookの埋め込みなどで代替するのも一つの手です。

### ディナー
時間帯:18:00~23:00
#### 自家製ピザ
自家製窯で焼いています。
※写真挿入
#### 定番ミネストローネ
シーズン通して変わらず味を楽しめます。
※写真挿入
#### 豊富なワイン
ワインを豊富に取り揃えています。
※写真挿入

💡飲食店なので、早めに料理の情報を魅力的な写真とともに掲載します。特に飲食店などの商材が『映え』るWebサイトに関しては、写真はとても大事です。
### ランチ
リーズナブルなお値段でお楽しみいただけます。
#### 日替わりランチ
※写真複数挿入

💡このレストランはディナーがメインとなるので、敢えてランチをディナーの後に置いています。
### 環境への取り組み
イタリアでは環境問題に関する関心が高いです。私たちもそれに共感し、環境配慮に勤めています。
#### 毎週水曜は牛肉の提供を停止して植物性由来の食材を中心に提供
#### フードロス解消のために食べ残しの持ち帰り推奨
#### 調理段階での廃棄ロス削減

💡最近は個人も法人も、環境問題への関心が高まっています。もちろんそれについて懐疑的な意見を持つ人もいたり、グリーンウォッシュとなってしまうリスクもありますが、普遍的の価値観として定着しつつあるのも事実です。

### シェフについて
#### 新宿本店 オーナシェフ○○○○
写真＆経歴
#### 池袋店 オーナシェフ○○○○
写真＆経歴
#### 錦糸町店 オーナシェフ○○○○
写真＆経歴
### 店舗概要
※店舗別に掲載
* 営業時間
* 定休日
* 決済
* 席数
* お問い合わせ
* 電話
* フォーム
* アクセス

### よくあるご質問
* 14:00〜18:00は営業していますか？
* 来店時はドレスコード必須ですか？
* 食べ残しは必ず持ち帰る必要がありますか？

💡店舗概要などで掲載できていない情報や、よく聞かれる情報などを掲載し、ユーザーの疑問や不安を解消させてあげます。
### Instagram
※直近の数投稿を表示

💡やはりInstagramと料理の相性は高しです。既存顧客で、わざわざWebサイトは毎回見に来ないけどInstagramなら、という方に向けInstagramへの導線を設置しておきます。
### リクルート
ホールキッチンスタッフを募集しています
### 問い合わせフォーム
* カテゴリ
* 店舗
* テキスト入力欄

### フッター
* ロゴ
* ナビゲーション

　
このような感じで、各項目の内容はおおまかに決めつつ、詳細はAIツールを活用しつつワイヤフレーム作成→デザインの段階で詰めていきました。
## ワイヤフレーム作成
ワイヤフレーム作成とデザインには**Figma**を使用しました。

https://www.figma.com/

Figmaは無料で使えるデザインツールで、ノーコードでプロトタイプを作成できるほか、課金すればCSSも生成してくれます。その気になればノーコードでWebサイト制作ができちゃう優れものです。

![wireframe.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1902958/353483f4-c792-bb7b-52b0-b701bf6749f4.jpeg)

上記画像のようにグレーベースでワイヤフレームを作っていきました。
本来のプロジェクトでは、ワイヤフレームはディレクターが作ったり、デザイナーが作ったり、クライアントが作ったり色々です。

デザインに入る前にワイヤフレームを作ることで、デザインの指針となり、クライアント-受注者や、制作メンバー間の共通認識となります。
 
　
次回はデザイン編&プロトタイプ作成編です。

次の記事↓

https://qiita.com/yamashee/items/d9962e2b8df8288b2157
Azure BastionのDeveloper SKUを試してみた

# はじめに

専用サブネットが不要でAzure Bastionを利用できるというDeveloper SKUを試してみました。

https://learn.microsoft.com/ja-jp/azure/bastion/configuration-settings#developer-sku

# Bastion構築
Developer以外では必要な`AzureBastionSubnet`が存在しないVNetに作っていきます。
Bastionの新規作成開始。

レベルを`Developer`にします。
一部のリージョンでしか利用出来ないため（2024/5/24時点）今回は「West US」を選択しています。
なお、Developer SKUのBastionはVMと同じリージョンにいる必要があるため、VMも上記リージョンで作成しておきます。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/cc0edf5b-7406-8e5d-5815-5a5a7360db01.png)

詳細設定はそのままで次へ。
タグも特に指定なし。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/3c4c041e-2a15-1ac4-b71a-4654880973c1.png)

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/15611336-5fd0-de38-e5cf-2a9e9a5c1231.png)

# 接続
アカウント情報を入力して接続します。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/57e54448-90ca-3033-2717-24bfd0559488.png)

問題なくアクセス出来ました。

![05.Bastion接続.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/3b5a4547-44df-7855-43bb-53d07891ceec.png)


# おわりに
一時的な作業であればサブネット不要で利用できるのは大変便利ですね。
これから使っていきたいと思います。