OmniAICreator/Qiita-1.07M huggingface dataset:
ジェネレータとyield式

## はじめに
この記事は以下の記事の続きになります。

https://qiita.com/axoloto210/items/c23e8b9a4dde3461ef48

本記事では、イテレータを返す関数である、ジェネレータ関数と、ジェネレータ関数内で使用できる`yield`式についてみていきます。

## ジェネレータ
ジェネレータは反復可能なオブジェクトであり、イテレータでもあります。
ジェネレータは、ジェネレータ関数によって生成されます。

ジェネレータ関数は`function*`によって定義します。
この関数は呼び出しても関数自体が実行されるのではなく、ジェネレータが返されます。

ジェネレータが通常のイテレータと異なるのは、`next()`メソッドを呼び出した時に、ジェネレータ関数の最初から`yield`式までが実行される点にあります。次に`next()`が呼ばれた時には、前回の`yield`の後からその次の`yield`式までが実行されます。

```js
function* generatorFn () {
    console.log('start')
    yield 1
    console.log('after yield 1')
    yield 2
    console.log('after yield 2')
    yield 3
    console.log('after yield 3')
}

const generator = generatorFn()

console.log(generator.next().value)
console.log('stopped')
console.log(generator.next().value)
console.log('stopped')
console.log(generator.next().value)
console.log('stopped')
console.log(generator.next().value)
```
```
"start" 
1 
"stopped" 
"after yield 1" 
2 
"stopped" 
"after yield 2" 
3 
"stopped" 
"after yield 3" 
undefined 
```
この例から、ジェネレータの`next()`が呼び出されるたびに、ジェネレータ関数の`yield`式までが実行されていることが分かります。

### ジェネレータ関数の宣言
ジェネレータ関数は`function*`で宣言できます。
他にも、関数式やメソッドの形で宣言することもできます。
```js
//関数式での宣言
const generatorFn = function* () {
    yield 1
    yield 2
    yield 3
}
```
メソッドの形で宣言する場合は、メソッド名の先頭に`*`をつけてジェネレータ関数であることを明示します。
```js
const obj = {
    *generatorFn() {
        yield 1
        yield 2
        yield 3
    }
}
const generator = obj.generatorFn()
```
なお、アロー関数の形式でジェネレータ関数を宣言することはできません。

## ジェネレータで書き換え
前回の記事で作成した以下の反復可能オブジェクトを、ジェネレータを使って書き換えてみます。
```js
const iterableObject = {
    [Symbol.iterator]() {
        const random = Math.floor(Math.random() * 10) // 0から9の整数値をランダムに生成
        let restNum = random
        return {
            next() {
                restNum++
                if (restNum < 10) {
                    return { done: false, value: restNum }
                } else {
                    return { done: true, value: undefined }
                }
            }

        }
    }
}

console.log([...iterableObject])
```
イテレータを返す関数は、ジェネレータ関数を使って以下のように書き換えられます。
```js
const iterableObject = {
    *[Symbol.iterator]() {
        const random = Math.floor(Math.random() * 10) 
        let restNum = random
        
        while (restNum < 10) {
            yield restNum++
        }
    }
}

console.log([...iterableObject])
```
`[Symbol.iterator]()`メソッドをジェネレータ関数に書き換えることで、`next()`や`next()`の返り値である反復結果オブジェクト`{done: false, value: restNum}`は、`yield`式によって簡潔に書けるようになっています。

また、ジェネレータ関数によって`[Symbol.iterator]()`自体を使わずに書き換えることもできます。
```js
const iterableObject = {
    *generatorFn() {
        const random = Math.floor(Math.random() * 10) 
        let restNum = random
        
        while (restNum < 10) {
            yield restNum++
        }
    }
}

console.log([...iterableObject.generatorFn()])
```
この書き換え方では、呼び出し方は変わるものの、`[Synbol.iterator](){...}`を宣言しなくて済むようになっています。
【React】ドラック＆ドロップソートライブラリdnd-kitで遊んでみた

22日目を担当します、@Ayako_0224と申します。
よければ去年の記事もご覧ください。

https://qiita.com/Ayako_0224/items/5104d923edd78168448c

# 概要
本記事ではReactのドラッグ＆ドロップソートライブラリの[dnd-kit](https://docs.dndkit.com/)を紹介させていただきます。
他にも類似のライブラリはいくつかありますが選定基準は[こちら](https://tech-blog.talentio.co.jp/entry/2023/03/28/143944)を参考にさせていただきました。

# 完成系

実際に作ったものはこちらです。
[codesandbox](https://codesandbox.io/p/sandbox/dnd-kit-sample-wsklp4)でサンプルコードを公開しています。

![画面収録 2024-12-22 3.09.32.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436259/abe03877-81c6-5325-52ae-5a9bc515b314.gif)


# インストール手順
npmでインストールするだけです。
今回の例では基本のcoreと動きをなめらかにするためのutilitiesとソートする機能が備わっているsortableをインストールしています。

```terminal
npm install @dnd-kit/core @dnd-kit/utilities @dnd-kit/sortable
```

# sensor、contextの設定
スマホなどのタッチデバイスやマウス、キーボードのドラッグを検知するためにsensorsを記述します。

```typescript
const sensors = useSensors(
    useSensor(PointerSensor),
    useSensor(KeyboardSensor, {
      coordinateGetter: sortableKeyboardCoordinates,
    })
);
```

sensorのライフサイクルには以下の6つがあります。
- アクティベーターイベントの検出
- センサーの初期化
- ドラッグ開始イベントのディスパッチ
- ドラッグ移動イベントのディスパッチ
- ドラッグ終了またはドラッグキャンセルイベントのディスパッチ
- センサーのクリーンアップ

これをDndContextプロバイダーにセットしSortableContextプロバイダーに並び替え対象のitemsをおくことで子要素がドラッグ＆ドロップできるようになります。

```typescript
<DndContext sensors={sensors} onDragEnd={onDragEnd}>
      <SortableContext items={items}>
        {...子要素}
      </SortableContext>
</DndContext>
```

# 並び替えの実装
動かせるようになれば後はその並びを保持するだけです。
onDragEndプロパティに以下の関数を設定しましょう。

```typescript
const onDragEnd = ({ active, over }: DragEndEvent) => {
    if (over && active.id !== over?.id) {
      const activeIndex = items.findIndex(({ id }) => id === active.id);
      const overIndex = items.findIndex(({ id }) => id === over.id);

      onChange(arrayMove(items, activeIndex, overIndex));
    }
};
```

DragEndEventは以下の2つのプロパティを持っています。
- active: 現在ドラッグされているアイテムでidなどの情報を含む
- over: ドラッグ中にアイテムが重なっているターゲットエリアでこちらもidを持つ

ドラッグ中のアイテムがどこからどこに移動しようとしているのかを見て並び替えをしています。

# 最後に
簡単にドラッグ＆ドロップが実装できることをお伝えしたつもりですがいかがでしたでしょうか？
ライブラリが豊富なことがReactの魅力の1つでもあると思います。
皆さんもぜひdnd-kitライフを楽しんでみてください！
数学苦手だけど、問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本を読んだので(一周目)

Waffle Advent Calender用の記事です:santa_tone2:
## はじめに
Waffle College2期生のもぐもです!
たまたまつい先日一冊の本を読み終えたので、
この機会に読んで感じた事など備忘録として残します。

タイトルにも上げたこちらの本📚
[問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本](https://www.amazon.co.jp/dp/B09NXFQRD3/)

3月くらいからつい先週くらいまでの約半年以上をかけて、
週一の頻度で友人と勉強していました。

お互いに数学を専攻しているわけではなく、
私に至っては **中高で数学苦手が強く根付いておりまして、** 
まず読み終えた今の自分を記録することで肯定しようと思った次第です。

以下は、この本を読む際に誰かの心の支えになればいいなと思い
勉強する際にしていたことを記します。

## 実践したこと✍
上位二つは本の中で紹介されています。
### 1. [著者である米田優峻氏のGithub](https://github.com/E869120/math-algorithm-book)を見る
   本の中では、各節ごと、そして最終確認問題ととにかく多数の問題が収録されています。
   手元で計算するもの、実際にコードを書くものなどあり、
   その回答がpdfやC++/Python/JAVA/Cコードとしてまとめられています。
   本の中ではC++でサンプルコードが書かれているので、ぱっと見で理解できない時や、
   問題を読んで「いったい何をすべきなんだこれは...」となってしまった時には、見てしまった方が早いです。ほんとに。

### 2. [演習問題集](https://atcoder.jp/contests/math-and-algorithm)
1でも言及した問題の内コードを書くものに関しては、こちらのサイトで実際に腕試しすることができます。このサイトのいいところは、実際に競プロでおなじみのAtCoderのサイト上でコードを試すことができることです。なんでいいのかというと、自分に馴染みのあるコードで試せること、他の方が投稿したコードを見ることもできるのでGitHub上に回答が無くてもここでヒントや答えを得られます。

### 3. あきらめてChatgptなどAIを頼る
結局なんだかんだすごくやってしまっていたと思います。単に解き方に躓くのではなく、問題文を読みながら頭に小宇宙が広がりそこに猫が浮いてるような感覚になってしまうこと、あると思います。ありますよね？
こんな時に怒らず細かい文章への疑問でも壁打ち相手になってくれるのはやっぱりAIです。

:::note info
「コードをjavascriptに変換してみて」などお願いできるのが、個人的に一番好きでした。他の言語で**演習問題集**のすべてのテストに通ったとしても、GitHub上の解き方と意図が違っていたりしたらどうしようって思った時にとても役に立ちます。
:::

言語の特性によって、同じようなコードのはずでも計算量などの部分で通ったり通らなかったりすることがあったのですが、その際もその言語で解くときのアプローチなども教えてくれます。実際にテストで通用するかどうかはさておき、単語をたどってネット上で情報を得られるだけでも大きいです。

## 読んでみて✍
身についた実感としては、**leetcodeが解きやすくなったり、解法やアプローチに名前があることを知ったことで勉強しやすくなったこと**が挙げられます。また、桁の大きい数字に物怖じすることが減ったり、こんな解き方もあるかもと考えることが楽しくなりました。

ただ、読んでいる際にすごく感じていた事は**一問一問の消費カロリーがすごく大きい**ということです。一緒に勉強してくれる友人が居なかったら、積読どころか埋葬していたと思う。♰(ずっと言ってる)

私と同じように苦手意識があるなと感じている方は、一度**図などでアルゴリズムの概要をつかむような説明や使用される状況などを見てから読み進める方が、負担が少なく理解しやすい**と思います！

じゃあ、準備してから読むほうがいいのか。と、思われるかもなのですが、私は本を読んでみてから準備することをお勧めします。

理由としては、アルゴリズムや数学の解き方をただ知るのではなくて「**なぜ数学的考察が必要か**」など考え方や解法の見つけ方ついても大事にされているからです。

:::note
数学が苦手な方へ
1章⇒2章⇒3章⇒5章⇒4章という順番が本の中で推奨されているので、
途中でわからないと感じたら調べてみるくらいでいいと思います◎
:::

一周目で全部の問題を自力で解くのはかなり難しく感じたので、何度も繰り返し思い出しては本を開いてというように復習を繰り返すことになると思います。くるみさんみたいに自分の勉強したい言語で解いてみるのもかなり勉強になりそうなので、二周目は別の言語でやってみようかなって密かに思ってます。

## さいごに
感じたままつらつら書いてしまったのですが、伝えたかったこととしては
数学苦手でもアプローチの仕方を知れば、楽しいと思えるよってことです。

慣れていないと時間がすごくかかってしまって辛かったり、考えることをやめたくなりますが、勉強は自分でペースを作ってするものだし、出てくる記号の意味を知るだけでもモチベーションになります。誰かと決まった時間に勉強するのもかなりおすすめです。

横から本の中の図だけを見て「え、これニュートン法じゃん」ってつらつら数式を書き出す人に劣等感を感じず、狂気のALGO家(詳しくは本を参照して下さい)事情について考えたり、のんびり問題と向き合いましょうね((

良いお年を。

## 参照
問題解決のための「アルゴリズム×数学」が基礎からしっかり身につく本
著者：米田 優峻

https://www.amazon.co.jp/dp/B09NXFQRD3/
仮想マシンの中でさらに仮想化を行う

## はじめに
仮想マシンの中でさらに仮想化したホストを **ネストされた仮想環境(nested virtualization)** と言うらしいです
(わからなくて検索苦労した…)

## 前提条件
### 環境
* ホストOS: Windows10
* ゲストOS: ubuntu 24.04
* 仮想化ソフトウェア:Oracle Virtual Box

### 作業
仮想環境(ubuntu)の初期設定が完了していること

### イメージ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236151/0809b411-d171-0954-b803-b40466f242cd.png)

## 仮想化可能かチェック
* ubuntu上で実行

仮想化できるかのチェックするツールインストール
```
$ sudo apt install cpu-checker
```

これならOK
```
$ kvm-ok
INFO: /dev/kvm exists
KVM acceleration can be used

```

これだと仮想化できない
```
INFO: Your CPU does not support KVM extensions
KVM acceleration can NOT be used
```
これでもチェック可能。0だと仮想化不可
 ```
 $ egrep -c '(vmx|svm)' /proc/cpuinfo
 ```

## 仮想化できるようにする
1. ubuntuの電源を落とす
2. VMマネージャーからubuntuの設定を開く
3. システム > プロセッサーから以下をチェックする
   * PAE/NXを有効化
   * ネステッドVT-x/AMD-Vを有効化
       * チェックできない場合は下に記載

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236151/b8d48f10-2d35-13d8-ed6e-f7c35ae12114.png)


#### ネステッドVT-x/AMD-Vを有効化がチェックできない場合
* powershellで実行

以下を実行する。仮想環境名は自分が付けた名前

VBoxManage.exeの場所はデフォルトでインストールした場所なので違う場所にインストールした場合は変更する
```
$ & 'C:\Program Files\Oracle\VirtualBox\VBoxManage.exe' modifyvm '仮想環境名' --nested-hw-virt on
```

## 仮想可能かもう一度チェック
* ubuntuで実行
```
$ kvm-ok
```

### まだ仮想化が不可の場合
* windowsの hyper-vを無効にして再起動
[Hyper-Vの有効化方法](https://sukkiri.jp/technologies/os/windows/howto_enable_hyperv.html)

WinsowsでWSL/WSL2のUbuntuを使ってる場合は必ず有効になってます。
hyper-vを無効にするとwslを使えなくなるので注意



## 参考
https://zenn.dev/takeo/articles/7fdc2be291054f
インターネットとは、簡易備忘録

## 前書き
インターネットの仕組みについて認識確認用の簡易備忘録です。

## インターネットとは？？

インターネットはTCP/IPというプロトコルを利用して世界規模で相互にNWを接続したもの！

当社は学術的研究目的で利用されたが、現在では、商用利用が進み、一般家庭や個人にも
普及している広域インターネットインフラとなっている！

## 主なサービスとは？

主なサービスとして、WWWや電子メールなどなど様々サービスが利用されている。

## 個人が利用するには？

個人がインターネットを接続するには、ISPと呼ばれる接続事業者と契約して、
接続口を解放してもらう必要がある！

## どうやってデータのやり取りが行われるの？

インターネット上では、各NWを相互に接続するルータが、バケツリレーのようにパケットを中継することで、データのやり取りが行われている！

[デバイス] → [ルーター] → [ISP] → [インターネット] → [サーバー]
   ↑                                                     ↓
   └───────────────応答───────────────┘

以上、簡易備忘録
win10からwin11へのアップグレードで詰まった

:::note alert
私の場合はこれで解決しましたが，作業中に起こった不具合やその他のエラーについては責任を持てません．
参考にする場合は自己責任でお願いします．
:::

## 状況
- win11のバージョン: 23H2
- win10からwin11へのアップグレードをしようとすると，「この更新プログラムをインストールできませんでした。もう一度お試しください(エラーコード)。」と出た
- 1つ目のエラーを解消した後，2つ目のエラーが出た
    - エラーコード1つ目: `0xc1900101`
    - エラーコード2つ目: `0x8024a203`
- Windows UpdateとMicrosoft公式が配布しているインストールアシスタントの2種類で試したが，同様のエラーコードが出た
- どちらの方法も4-5時間ほど待機したのち，「変更を元に戻しています」といった旨の表示があり，インストールを開始する前の状態に戻った

## 環境
- Windows10 Home
- Lenovo laptop

## エラーコード`0xc1900101`の対処
- このエラーコードが出たとき，「設定->Windows Update->トラブルシューティング->その他のトラブルシューティング」からWindows Updateのトラブルシューティングを行ったところ，エラーが一件見つかり，それを修正した旨の表示があった
- その後，Windows Updateでwin11以外の更新プログラムがいくつかあったため，それをダウンロード・インストールした
    - その途中，自動でwin11のダウンロード・インストールも開始したため，win11のインストールも進めたところ，次はエラーコード`0x8024a203`が出た

## エラーコード`0x8024a203`の対処
- [microsoft公式ページ](https://learn.microsoft.com/ja-jp/windows-hardware/manufacture/desktop/repair-a-windows-image?view=windows-11)が参考になる
- Winキーを押し`cmd`と検索し，出てきたコマンドプロンプトを「管理者で実行」する
- コマンドラインに以下を入力する
    - システムのスキャンが始まり，数分で完了する
    - 「問題が見つからなかった」という旨の表示が出て終了した
```
sfc /scannow
```
- その後，コマンドラインに以下を入力する
    - windowsイメージの修復が始まり，数分で完了する
    - 「修復された」という旨の表示が出て終了した
```
dism /online /cleanup-image /restorehealth
```
- その後，コマンドプロンプトを終了し，PCを再起動(シャットダウン後，自身で起動し直すのではなく再起動をする)
- Windows Updateの画面からwin11を再度ダウンロード・インストールを開始すると，win11のインストールが完了した
【ServiceNow】Easy Importで文字列が切り捨てられる

:::note info
バージョンはVancouverです。
:::

### 問題概要
Easy Import機能を使ったデータの更新で文字列が切り捨てられる
### 問題の再現
Company項目（最大長40）で再現します。
Easy Importで10件のサンプルデータを投入しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/e4cee223-a265-6c0d-0a79-db5cf5ab2f68.png)

1行目の会社名をEasy Importで修正します。
修正後の会社名：株式会社未来創造型総合ソリューションサービス・イノベーション＆デベロップメント研究所（42字）
修正する会社名が長いので、Company項目の最大長を100に修正してからEasy Importで更新します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/a0eab450-5f89-8075-e6fa-662d188ef5b3.png)

インポート直後です。
インポート時にエラーなどは出ませんが、会社名が40字までで切り捨てられています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/6dde4f7b-2ef7-18f9-161d-dfad58d8c39f.png)

### 原因
1回目のインポート時に自動で生成されるインポートセットテーブルによって、Company項目の最大長が40に定義されるため起きた問題でした。
2回目のインポートでは1回目に作成されたインポートセットテーブルが使われるため、40字を超える文字列を投入しようとすると40字から溢れる分は切り捨てられるようです。
テーブル定義のCompany項目の最大長を修正しても、インポートセットテーブルの最大長は修正されません。

### 対応：クリーンアップ
1回目のインポートで作成されたインポートセットテーブルを手動で削除することで、2回目のインポート時の文字列の切り捨てを防ぐことができます。
以下の手順でクリーンアップを実施します。
参考：[インポートセットテーブルを削除する](https://www.servicenow.com/docs/ja-JP/bundle/vancouver-integrate-applications/page/administer/import-sets/task/delete-import-set-tables.html)

1. [All] > [System Import Sets] > [Import Set Tables] > **[Cleanup]** に移動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/03de349a-672c-c39e-3e4a-0a0722e14c22.png)

2. 削除したいインポートセットテーブルを選択し「Delete these tables」に移動させる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/a28c6c58-545f-e54d-09ae-038c02ae2a3c.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/136c793c-0db4-de97-0c40-dcebb9d9179a.png)

3. 「Delete related transform maps」にチェックを入れ、「Delete data only(preserve table structure)」のチェックを外す
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/387891af-64f6-efce-db2c-65737874f184.png)

4. **Cleanup**をクリックする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/86b4d132-2fd4-c2a9-c8da-654a1f54459a.png)

### 確認
クリーンアップ後に再度データを投入すると文字列が切り捨てられず更新されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3931295/702a0e62-8f97-dc83-b4dc-114bbf1004c2.png)

### 注意
:::note warn
インポートセットテーブルの修正、列の追加は推奨されていません。
:::
今回のような場合はインポートセットテーブルの変更は避け、クリーンアップで対応するのが良いかと思います。

>インポートセットテーブルのフィールドは、インポートされたデータに基づいて自動的に生成されるため、手動で変更しないでください。

引用元：[インポートセットの主要な概念](https://www.servicenow.com/docs/ja-JP/bundle/xanadu-integrate-applications/page/administer/import-sets/concept/c_ImportSetsKeyConcepts.html)

### 余談
こちらは実務で実際に起きた問題です。
文字列が切り捨てられていてもインポート時にエラーは出ないので、VLOOKUPでデータのチェックをしてみて初めて気づくことができました。
Easy Importでテストデータを投入した後に本番データを投入する場合などはとくに注意が必要です。
数字6471についての記事

# まずは検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951138/3cb82286-c6b6-d3ef-0139-bbc8baa4daaf.png)
東証プライムのコード？が6471らしい...

# オンライン整数列大辞典
A045924
Numbers n such that prime(n) == -1 (mod n).

1, 2, 3, 4, 10, 70, 72, 182, 440, 1053, 6458, 6461, 6471, 40087, 40089, 251737, 251742, 637320, 637334, 637336, 1617173, 4124466, 10553445, 10553455, 10553569, 10553570, 10553574, 10553576, 10553819, 10553829, 27067100, 27067262, 69709705, 69709719, 69709734, 69709873
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951138/46f671ce-c0c8-5238-f0ea-f34ecec210d8.png)

prime(n)とは？がわからない...素因数？

# 数の性質
https://ja.numberempire.com/6471

上のサイトがあったので、見てみる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3951138/fc188550-075d-1d57-e738-d654ad9cc638.png)
きれいに"NO"が並んでいる...
もちろん、素数ではないし、平方根でもない。

# まとめ
ラマヌジャンに6471が意味ある数字か問いたい。我こそは！という方はコメントで教えてください。
俺の二の舞を踏むな！アドカレ失敗談


# はじめに

この記事は以下のアドベントカレンダーで書いてきた「24 日目に LINE ミニアプリが完成する初心者」を書き終えた後の反省記事です。

https://qiita.com/advent-calendar/2024/line-mini-app

<br/>
「来年アドベントカレンダーの完走に挑戦したいぞ！」という皆さんが、同じ轍を踏むことが無いよう参考にして頂ければ幸いです...。

# 途方もなく間違っていた

11 月中旬アドカレの告知を見た私は「Qiitan のぬいぐるみが欲しい！」と軽率に完走賞を目指した訳ですが、何もかもが途方もなく間違っていました。

ここではその失敗の一端をご紹介できればと思います。

## 私の地獄の自転車操業は 12 月 7 日には始まりました

これはまさに私の不徳の致すところでございます。

当初アドカレを始める前に私は、先人の以下の記事を読んでおりました。

https://qiita.com/torifukukaiou/items/8eedb573b026bf53dbbb

大事なのは以下の記述です。

> 11 月のうちに 15 記事書いておくとあとが楽

それを読んだ私の感想は、

**「それが理想だけど、まぁ 12 月もあるしな！」** 

<br/>
ということで、6 記事のストックを携えて 12 月に突入しました。

12 月は師匠も走るということで師走と申しますが、その 12 月で待っていたのが以下の状況でした。

- 記事を書くための実装で予期せずつまずく
- 仕事が忙しくなり執筆時間の確保が難しくなる
- プライベートの予定が入り執筆時間の確保が難しくなる

こうして 12 月 1 日〜6 日の間に書けた記事は 1 本。

早くも 7 日目には地獄の自転車操業がスタートしたのでした。

## 仕事が忙しい + 今日書かなきゃ明日の記事が無い = 徹夜

自転車操業が引き寄せるのは何か。

それは徹夜の確変モードに入ります。

年齢的にも徹夜がキツい中、生活リズムが崩れ、食事がおろそかになり、生産性が著しく下がるという負の回し車に乗ってしまったが最後。

抜け出すのは至難の業です。

結果、背中に訳分からんくらい吹き出物が出ました。

## 17日目にして実装が完了

今回のシリーズタイトルは「24 日目に LINE ミニアプリが完成する初心者」。

実装なんて遅れることはあっても、早まることなんて滅多にないものです。

「やったー！実装が完了したー！」と素直喜びたいところですが、そうは行かないのが完走賞。

「あれ？ここから何を書けば？」

余裕もない中記事に書く内容から再考案が必要になりました。

# どうすれば良かったのか

これらの失敗はどうすれば防ぐことが出来たのか自分なりに考えてみました。

### 先人に倣って11 月に 15 記事書いておく

アドベントカレンダーは 25 日もあるのです。

明日のことも分からないのに25日後を楽観視するのは非常に危険です。

11月が忙しいからとサボってはなりませぬ。

12月はもっと忙しくなるかも知れないからです。

私は「こんなことなら11月にもっと無理しておくべきだった」と何度も思いました。

余裕を持っておくことが先の自分を助けてくれます。

### 体調管理に気を付ける

物凄く当たり前のことですが、これが物凄く大事です。

アドカレは長期戦なので、「この日がヤバいから」と徹夜しても次の日にも執筆が待っています。

特に冬はコロナにインフルと感染症盛りだくさんです！

どうしても徹夜をしなくてはいけない場合は、その分食生活に気をつけるなど身体を労わる行動が後に響いてきます。

### 書くことをあらかじめしっかり決めよう

シリーズが悪いわけではありません。何を書くかをはっきり決めておかなかったのが悪いのです。

私は今回 LINE ミニアプリ開発がはじめてだったこともあり見通しが全然立っていないまま、なんとなく ChatGPT に 25 記事分のタイトルを決めてもらい執筆を始めました。

アドカレ完走を目指す際は、執筆前に何について書くか、少なくとも 15 記事は書く内容をあらかじめ決めておきましょう。

# やっておいて良かったこと

ここまで失敗談を語ってきましたが、中にはやっておいて良かったこともありました。

### 身体を労う方向転換

背中が悲鳴を上げた12月中旬。

このままではダメだということで一気に身体を労う方向転換を行いました。

徹夜は避けられない分、食事を健康的なものにする。

寝れる日は記事を優先せずすぐ寝る等。

この方向転換が無ければ私は25日を走り切ることは到底不可能だったと思います。

### 大口を叩く

完走賞を目指す際、私は会社のtimesやXでそのことを発信していました。

執筆中はこのことを心から後悔しましたが、逆にこれがあったから止められなかったということでもあります。

もう中盤から正直Qiitanのぬいぐるみなんてどうでも良くなっていて、一度出した言葉を引っ込められないという意地で書いてました。

心の弱い自分を追い込むには打ってつけの方法だったと言えます。

<br/>
また、告知を受けて数人ですが記事を見てくださったこともとても励みになりました。

1人でもいいねがついているのを見ると、どんなにお粗末な記事でも諦める気にはなれなかったです。

いいねを下さった方々には心から感謝しています。

# まとめ

ということでまだ25記事を書いただけなので完走賞がもらえるか否かは分かりませんが、とりあえず今回の失敗談を綴ってきました。

とんでもなくしんどい25日間でしたが、最後にあるのは達成感です。

25記事書き切ったという事実だけで、良い年末を迎えられそうです。

来年も挑戦するかと問われると正直今は「もう二度としたくない」と思っていますが、来年になったら何もかも忘れて挑戦する気もしています。

是非チャレンジしてみたいと思っている方は、私の二の舞を踏まず景色でも観ながら悠々と走って完走賞を目指して欲しいです。

それではここまで読んでくださった皆様ありがとうございました！

メリークリスマス:christmas_tree:
[Proxmox VE] SynologyのNASにバックアップを保存する

## すること

Proxmoxのゲストのバックアップを、SynologyのNAS上に保存できるようにします。
NFS(ネットワークファイルシステム)というプロトコルを用いて、ProxmoxからNASにアクセスし、バックアップを保存できるようにします。

## 環境
- Proxmox VE 8.2.2
    - IP:`192.168.10.191`
- Synology NAS DS218j
    - IP: `192.168.10.192`

## Synology NAS側の設定

### NFSを有効化
NFS(ネットワークファイルシステム)を用いて、ProxmoxとNASでデータのやり取りをするので、NFSサービスを有効化します。
NASのWeb UIから**コントロールパネル**を開き、**ファイルサービス**、**NFS**のタブを開き、**NFSサービスを有効化**のチェックボックスにチェックを入れます。
右下の**保存**を押して、設定を保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/8c68aa9c-2449-f42d-252f-ccea8c846c5b.png)

### Proxmoxのための共有フォルダを作成
**コントロールパネル**、**共有フォルダ**から**作成**ボタンを押して、フォルダを作成するウィザードを開きます。
名前は`proxmox`にしました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/14c0a888-8d00-a2b0-70f6-8e0a86f89623.png)

### 共有フォルダにNFSでアクセスできるようにする
フォルダを選択した状態で、**編集**ボタンから**NFS権限**タブを開き、**作成**ボタンを押して、NFSルールを新しく作成します。

「ホスト名またはIP」には、Proxmoxのホストからしかアクセスできないように、IPアドレスを指定します。
特権は**読み取り/書き込み**に設定します。
設定したら右下の**保存**ボタンを教えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/eee77ff2-002d-3cdb-41e7-7cb4991c64e1.png)

左下のマウントパス `/volume1/proxmox`は、あとでproxmoxからNASに接続するときに必要なので、どこかにコピーしておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/51f8dc01-7685-8a9e-eff9-a866ae4d3f1a.png)

## Proxmox側での設定

### ProxmoxにNASのフォルダを追加する
Web UIを開き、左側のツリーから**データセンター**を選択し、**ストレージ**、**追加**ボタンから**NFS**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/dd57336c-6c4f-0d64-2fc3-3621fa5e05be.png)

新しくポップアップが出ます。
**ID**は、NASを識別できる任意の名前（ここでは`synology-nas`）
**サーバ**は、NASのIPアドレス（筆者の環境では`192.168.10.102`）
**Export**は、NASの画面で表示されたマウントパス（筆者の環境では`/volume1/proxmox`)
**内容**は、NASに保存するファイルの種類です。
バックアップを保存する予定なので、**VZDump バックアップ**のみを選択します。
設定したら右下の**追加**ボタンを押して、保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/f3086b6d-34e0-6ef5-5456-5837042fde08.png)

これでProxmoxとNASを連携できました。

## バックアップをする
バックアップをするゲストを選んでください。筆者はVMID:100のゲストのバックアップを取ります。
**バックアップ**から**今すぐバックアップ**ボタンを押して、バックアップの設定をします。
保存先をNASにしたいので、**ストレージ**を先ほど設定した、NASのID（`synology-nas`）に設定します。
できたら、右下の**バックアップ**ボタンを押すとバックアップが開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/fa9294f4-3c5e-912c-9af4-2c1126ea95d5.png)

バックアップが終了したら、左側のツリーからNASのストレージを選択しましょう。
**バックアップ**をクリックすると、ちゃんと先ほどのバックアップが追加されていることがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1105516/d586f73e-6a97-30d6-31fb-f09a2e5e3e0d.png)

できてますね。おわりです！


## 備考

### NFSについて
ぜんぜん知らなかったので調べました。パスワードとかなしでファイルにアクセスできるプロトコルみたいです。
普通に聞くとちょっとビビりますが、外部ネットワークに公開しないし、接続元のIPアドレスは制限しているので大丈夫でしょう。

https://www.designet.co.jp/faq/term/?id=TkZT
停電復帰後にPCを自動起動させる方法

# 停電
停電といえば、雷が思いつくが、それ以外にも施設点検などで計画停電が行われることがある。ただ、PCでプログラムをぶん回したいときに、一度停電してしまうのはしょうがないとしても、復帰後に起動してプログラムを稼働させたい...ときがあったので、その方法。
# 解決法
BIOSで電源設定の項目を見つけ、その中の"Restore on AC Power Loss"のような項目がある(マザーボードによって多少項目名が異なる可能性あり)ので、それをオンにして、BIOS設定をsave。そして再起動するだけ。
意外と検索すればいろいろサイトが出てきたので難なくできた。
非推奨だが、コンセントぶっこ抜いて数分経って（電源落ちて30秒以上たたないと正しく起動しない？という記事をみた）もう一度挿すと、ちゃんと起動した。
【Google スプレッドシート】SUBSTITUTE関数を利用して、「,」や「、」で区切られた文字列をRedashで使いやすい形にする

## 記事の概要

Redash を使ってデータを抽出する業務に携わるようになったのですが、抽出の依頼をする人によって元データの形式が異なっていました。

加工せずに済むので`'Python','AWS','AI','初心者','JavaScript'` という形式でほしいのですが、例えば`Python,AWS,AI,初心者,JavaScript` や `Python、AWS、AI、初心者、JavaScript`で依頼が来るといった具合です。

依頼者側もいちいち手作業で上記の形式にするのは面倒だと思うので、シンプルな関数で解決することにしました。



## ⓪SUBSTITUTE関数について

今回使う[SUBSTITUTE関数](https://support.google.com/docs/answer/3094215?hl=ja)は、このような関数です。

概要 : 文字列内の既存のテキストを新しいテキストに置き換えます。
構文 : `=SUBSTITUTE(検索対象のテキスト, 検索文字列, 置換文字列, [出現回数])`

「出現回数」は省略することが多いのですが、こういった使い方もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/fbc93dad-9c2e-3ee0-4f83-d21a68ac8e55.png)
A2の`advent calendar`には小文字の`a`が複数ありますが、1回目の`a`のみを大文字の`A`に置き換えています。


## ①全体の`,`を`','`に置き換える

まず、`=SUBSTITUTE(A2,",","','")`で、A2の文字列の`,`をすべて `','`に変換します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/13665b6f-95ed-dbfc-c451-21be73224603.png)

これだけだと、先頭と末尾には`'`がつきません。

## ②`&`で先頭と末尾に`'`をつける

今回は文字列と文字列の結合に`&`を使っていますが、`&`を使いたくない場合は[CONCATENATE関数](https://support.google.com/docs/answer/3094123?hl=ja)を使用してください。

GASのconcatメソッドでは3つ以上できますが、スプレッドシートの[CONCAT関数](https://support.google.com/docs/answer/3093592?hl=ja)で連結できる値は2つのみのため、スプレッドシートではあまり使い勝手が良くない印象です。

さきほどの`=SUBSTITUTE(A2,",","','")`を、`="'"&SUBSTITUTE(A2,",","','")&"'"` と書き足すと、このような結果になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/a278ad4a-e801-c409-028d-48dd0288e13c.png)

これで完成でも良いと思いますが、空白を削除したい場合もあるかと思います。

## ③空白がある場合は

A2の「初心者」の後ろに半角スペースを入れてみました。
`="'"&SUBSTITUTE(SUBSTITUTE(A2,",","','")," ","")&"'"`のように追いSUBSTITUTEで十分かと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/227a3ee1-df9f-ab78-1d7f-87276053128b.png)

空白を削除できる関数はいろいろとあるので、お好みの関数をご利用ください。
Excelですが、下記の記事でも空白を削除するための関数をいくつか紹介しています。

https://qiita.com/m0ka/items/b330fc0d8d70d87decbd

## ④`、`や他の区切り文字で区切られている場合も

`="'"&SUBSTITUTE(SUBSTITUTE(A3,"、","','")," ","")&"'"`や`="'"&SUBSTITUTE(SUBSTITUTE(A4,"/","','")," ","")&"'"`などと、検索文字列を書き換えてご利用ください。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/35cb85b3-1f0b-584f-9a78-9c5b62fbe4d1.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/241380/e76d6583-3b9e-7046-49cc-d2b8b14d58a3.png)

さらにIF関数やCOUNTIF関数と組み合わせると、より多くの場面で利用できると思います。
Svelte5での変更点（リアクティブ構文の変更）

## はじめに
この度2024年10月にSvelte5がリリースされました。
従来のSvelte4までと大きく変わった部分も多かったので、特にリアクティブ構文周りを私なりにSvelte4とSvelte5に違いについて着目しながらまとめてみました。

## Runes
本題に入る前に、Svelte5で重要なキーワードとなっている『Runes』について触れていきたいと思います。
Runesとは、リアクティブな状態や振る舞いを明示的に記述するための構文です。

Svelte5ではこのRuneが新しく導入され、状態管理やリアクティブな振る舞いをより簡潔かつ明確に記述できるようになりました。
従来は、`let`を使った変数の宣言や、`$:` を用いたリアクティブな監視が可能で、そのシンプルさがSvelteの大きな特徴でした。しかし、システムが大規模化するにつれて、コードの意図が分かりにくくなり、メンテナンス性の低下が課題となるケースもありました。

Runeの導入により、リアクティブな変数やロジックを明示的に記述できるようになり、コードの意図がより理解しやすくなるとともに、メンテナンス性の向上が期待されています。


## Svelte5でのリアクティブ構文
Svelte5ではSvelte4までのリアクティブ構文とは書き方が異なります。
備忘録も兼ねてSvelte4までの書き方と比較しながらそれぞれ書いていこうと思います！

### let -> $state
Svelte4までではlet hogehoge = .... でリアクティブな変数宣言ができましたが、
Svelte5では`$state`を使用して作成された場合にリアクティブ宣言となります。

```Svelte
<script>
// Svelte4
let count = 0;

// Svelte5
let count = $state(0);
</script>
```

### $: -> $derived/$effect

`$derived`について、、、
svelte4では$: でリアクティブに監視していたが、svelte5では`$derived`を使って監視します。
以下のように書くことで、countが変更されたらdoubleもすぐに反映されます


```Svelte
<script>
// Svelte4
let count = 0;
$: double = count * 2;

// Svelte5
let count = $state(0);
$: const double = $derived(count * 2);
</script>
```

`$effect`について、、、
Svelte4では$:の副作用を作成したい時、
例えば`$: { if (引数) { 処理内容 } }` のような書き方をしていたと思いますが、
Svelte 5では `$:$effect(() => { ... })` という形に変更になりました。

```Svelte
<script>
// Svelte4
let count = 0;

$: {
    if (count > 5) {
        alert('カウントが高すぎます！');
    }
}

// Svevlte5
let count = $state(0);

$:$effect(() => {
	if (count > 5) {
    	alert('カウントが高すぎます！');
	}
});
</script>
```

### export let -> $props
Svelte 4では`export let`を使用して親コンポーネントから変数を受け取っていて、かつプロパティごとに宣言が必要でした。
Svelte5では`$props()`でまとめて受け取ることができます。
複数ある場合は以下のように`,`で区切って記載することでまとめて受け取ることができます。

```Svelte
<script>
    // Svelte4
    export let optional = 'unset';
	export let required;

    // Svelte5
	let { optional = 'unset', required } = $props();
</script>
```

## 終わりに
いかがでしたでしょうか？
今回は公式のSvelte5以降ガイドをもとに私なりにSvelte4とSvelte5の違いに着目してまとめてみました。
大きく変わった部分も多く、私は今絶賛混乱してますが、私と同じような方に少しでも参考にしていただけたら幸いです。
もし、間違いや解釈の不一致などがあればお伝えいただけると嬉しいです！
それでは今日はこの辺で！
NetSuiteでピボットテーブルを作ってみる

NetSuiteでExcelのようなピボットテーブルを作成できる機能、<b>SuiteAnalytics Workbook</b> をご紹介します。
# SuiteAnalytics Workbookの位置づけ（NetSuiteでデータを参照する機能）
<dl>
  <dt>保存検索</dt>
  <dd>データをリスト形式で参照</dd>
  <dd>SQLの関数を使用可能</dd>
  <dt>レポート</dt>
  <dd>標準の財務諸表で使用</dd>
  <dd>ドリルダウンや集計が可能</dd>
  <dt>SuiteAnalytics Workbook</dt>
  <dd>ピポットテーブルやグラフの作成が可能</dd>
  <dt>NetSuite Analytics Warehouse</dt>
  <dd>最近日本でも販売を開始したDWH＆BIツール</dd>
  <dd>（別途有償ライセンスが必要）</dd>
</dl>

SuiteAnalytics Workbook　は追加ライセンスなしで使用可能なデータ分析ツールとなります。

# SuiteAnalytics Workbook を使ってみる
:::note info
今回は営業担当者別クラス別の売上実績をサンプルで作ってみます
:::
### SuiteAnalytics Workbook はどこにあるのか
センター・タブの分析が SuiteAnalytics Workbook です
![rapture_20241220162631.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/7800a3bd-78d9-eaf2-bc22-6fe56a9d2fdc.jpeg)

### まずは加工する元のデータ（データセット）を作成する
1. データセットを選択します
![rapture_20241220163947.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/2363702b-a415-b8e9-3893-699cb5ea78f4.jpeg)

2. 新規データセットを押下する
![rapture_20241220164337.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/a70b5f56-e365-a31f-96f1-88bfef4e9ca7.jpeg)

3. 対象のレコードを選択する
![rapture_20241220164727.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/8337a0b9-a314-a9ef-c89a-23d778174816.jpeg)

4. 対象フィールドや絞込条件を指定する
![rapture_20241220171035.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/5f8df9e7-5fe9-6e75-670d-c52b96580971.jpeg)

5. 名前をつけて保存する
!<img width=400 src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/3625b856-2b66-be4a-f073-70cf6e9e92d7.jpeg">

### 実際にピボットテーブルを作ってみる
1. ワークブックの新規作成をする
![rapture_20241221235001.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/63d5fc64-9255-6b49-9234-e1168a5cb801.jpeg)

2. 先ほど作成したデータセットを選択する
![rapture_20241222002653.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/4efdba9b-7359-09c9-bdb0-0ab5a102fe88.jpeg)

3. ピポットテーブルを選択する
![rapture_20241222003215.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/da2e24c7-efae-31e7-cf47-ec8c6bed803f.jpeg)

4. 列、行、集計する数字をそれぞれ設定し、更新する
![rapture_20241222230607.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/19932892-f67f-943e-0be3-f6642e9d265f.jpeg)

<b>これで営業担当者別クラス別の売上実績がリアルタイムで確認可能となります</b>
![rapture_20241222230824.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3954306/2b10612d-6110-9141-6f51-ebdae7e9c8a6.jpeg)


# さいごに
今回は簡単な機能のご紹介でした。
参照機能のため作成に失敗しても業務データ自体に影響は与えないのでぜひお試しください。
次回があれば、もう詳細な内容、保存検索と比べて良い点などを説明したいと思います。
Dartで非同期処理をテストするときのサンプルコード

[testパッケージ](https://pub.dev/packages/test)の[expect](https://pub.dev/documentation/test/latest/test/expect.html)と[expectLater](https://pub.dev/documentation/test/latest/test/expectLater.html)で非同期処理（例：[Future](https://api.dart.dev/dart-async/Future-class.html)）を検証するときのサンプルコード

## 基本的な方法

```dart
import 'package:test/test.dart';

void main() {
  test('should return 1 (expect)', () {
    expect(Future.value(1), completion(1));
  });

  test('should return 1 (expectLater)', () {
    expectLater(Future.value(1), completion(1));
  });
}
```

- `Future`の検証は`expect`でも`expectLater`でも可能
- `matcher`には非同期処理用のものを指定する（[completion](https://pub.dev/documentation/test/latest/test/completion.html)や[throwsA](https://pub.dev/documentation/test/latest/test/throwsA.html)など）
  - [equals](https://pub.dev/documentation/test/latest/test/equals.html)は`actual`の値それ自体（サンプルでは`Future<int>`）との比較をするため、非同期処理の検証で使っても期待通りの動きはしない
    - ```dart
      import 'package:test/test.dart';
      
      void main() {
        test('should return 1 (fails)', () {
          expect(Future.value(1), equals(1));
          // Expected: <1>
          // Actual: <Instance of 'Future<int>'>
        });
      }
      ```

## `expect`と`expectLater`の違うところ、同じところ

```dart
import 'package:test/test.dart';

void main() {
  test('"waiting" should be printed BEFORE "done" 1', () {
    expect(
      Future.delayed(const Duration(seconds: 5), () {
        print('done');
        return 1;
      }),
      completion(1),
    );
    print('waiting');
    // waiting
    // done
  });

  test('"waiting" should be printed BEFORE "done" 2', () async {
    expectLater(
      Future.delayed(const Duration(seconds: 5), () {
        print('done');
        return 1;
      }),
      completion(1),
    );
    print('waiting');
    // waiting
    // done
  });

  test('"waiting" should be printed AFTER "done"', () async {
    await expectLater(
      Future.delayed(const Duration(seconds: 5), () {
        print('done');
        return 1;
      }),
      completion(1),
    );
    print('waiting');
    // done
    // waiting
  });
}

```

- `expect`と`expectLater`で違うところは、非同期処理の検証完了を待てるかどうか
  - `expect`は`void`を返すため、待つことができない
  - `expectLater`は検証が終わると完了する`Future`を返すため、`await`と一緒に使うことで検証完了を待つことができる
- `expect`と`expectLater`で同じところは、非同期処理の検証が完了するまで次の`test`が実行されないこと
  - サンプルコートで言うと、`"waiting" should be printed BEFORE "done" 1`の中で検証がすべて完了するまで`"waiting" should be printed BEFORE "done" 2`の実行は始まらない
    - また、`"waiting" should be printed BEFORE "done" 2`の中で検証がすべて完了するまで`"waiting" should be printed AFTER "done"`の実行は始まらない

## サンプルコードのまとめ

https://gist.github.com/tksrmz/b3cdb1e8b53a9a920a1a5c09a1a049ae
おすすめUdemy講座の紹介

# はじめに
今年受講したUdemy講座の中からおすすめを紹介します。

# AWS編
AWSからは以下のハンズオン付き解説動画＋問題集のセットをおすすめします。こちらの講座は英語となっておりますが、日本語字幕や言語変換を行えば問題なく進めていけるかと思います。
特に良い点としては、新規資格の講座公開が早いことです。今年もAWSではいくつかの新規資格が追加されましたが、他のWeb問題集などではまだ対策問題が用意されていない中、こちらの講座ではすでに用意されていたりします。ハンズオン付き講座＋問題集は各AWS資格ごとにあるため、取得を目指している資格の講座を受講していただければ良いと思います。

https://www.udemy.com/course/aws-certified-machine-learning-engineer-associate-mla-c01/?srsltid=AfmBOor20d5mx--QAUZQiow-teAKIuyD3ZFN_BGVXM8ZyiRUrTs2G8kX&couponCode=V2JPLETSLEARN

https://www.udemy.com/course/practice-exams-aws-certified-machine-learning-engineer-associate/?srsltid=AfmBOoqQJzbVjoOouJsWKIGKLqfyCaZIouZoNJP5gkDevDJnYh1SREHw&couponCode=V2JPLETSLEARN

# コンテナ（Docker、Kubernetes）編
コンテナ分野では以下をおすすめします。こちらの講座ではコンテナの基礎やKubernetesについてハンズオン形式で学ぶことができます。
特にCKA取得を目指している方に関しては、この講座さえマスターしておけば取得可能といってもいいぐらい完成度が高い講座だと考えております。

https://www.udemy.com/course/learn-docker/?couponCode=V2JPLETSLEARN

https://www.udemy.com/course/certified-kubernetes-administrator-with-practice-tests/?couponCode=V2JPLETSLEARN

# フロント開発言語(React)編

Reactの特徴を把握しつつ、フロントエンド開発の知識を身につけることができます。こちらは日本語の講座となっているため、取り組みやすい点もおすすめポイントとなります。

https://www.udemy.com/course/modern_javascipt_react_beginner/?couponCode=V2JPLETSLEARN

https://www.udemy.com/course/react_stepup/?couponCode=V2JPLETSLEARN

https://www.udemy.com/course/react_v18/?couponCode=V2JPLETSLEARN

# おわりに
今回はおすすめのUdemy講座を紹介しました。いずれも実際に私が受けて良かったと思える講座となっていますが、必ずハンズオンや問題集などを組み合わせて体系的な知識習得も組み合わせることが大事になります。（講座を視聴することで勉強した気になりますが、アウトプットをしないと大部分が頭から抜けていきます。）ぜひUdemyを活用したスキルアップを目指しましょう。
🔥インフラ未経験エンジニアが気合い🥊と根性💪🏽でインフラエンジニアとしてサービスを守り抜いた話🔥

この記事は [ex-crowdworks Advent Calendar 2024](https://qiita.com/advent-calendar/2024/ex-cw)の23日目の記事です。

# はじめに
今年、株式会社クラウドワークスを退職した@nisyuuです。お気に入りの鶏肉販売会社は[鳥藤](https://www.toritoh.com/)です。
エンジニアとしてクラウドワークステック（旧クラウドテック）というフリーランスと企業をマッチングするエージェントサービスを開発していました。

クラウドワークス入社後、テック開発チームにはインフラエンジニアがいませんでした。
そのせいか、インフラの運用がなぜかマネージャーに依存していたため、私の方でなるべく担当するような体制にしました。

インフラエンジニアになったからには、「個のためのインフラ」のインフラを安定稼働させていく必要があります。
今回は、意思を持ってインフラを守り抜くために、どのようなことをしていたかを紹介します。

# 何をしていたか

サービスを守り抜くために実施してインフラ作業は、主にこちらの2つです。

- 毎日のモニタリング
- インシデントが起きたときの対応

## 毎日のモニタリング

毎朝、サーバーのメモリやスループットなどをチェックし異変がないかを確認していました。

稀に国外から大量のリクエストが来ることもあり、攻撃と見なすことができるようなリクエストについてはIP制限をかけることをしていました。

モニタリングした内容は、毎日異変が発生した時の対処方法も含めドキュメントに記録していました。
記録を残しておくことで、異変が発生したときに同じ事象が過去に発生していないか確認できることや、作業の引き継ぎが発生した際に後継者へナレッジを残しておくことができます。
ナレッジ化されているということは、属人化を抑えることにもつながります。
引き継ぎや属人化については、こちらも参考になるため置いておきます。

https://qiita.com/nisyuu/items/88f3fc12144e42d0ac4d#%E6%84%8F%E6%80%9D%E3%82%92%E6%8C%81%E3%81%A3%E3%81%A6%E5%BC%95%E3%81%8D%E7%B6%99%E3%81%8E%E3%81%99%E3%82%8B

テック開発チームに在籍中、属人化を抑えるべく強い意思を持って将来有望なエンジニア達に作業を委譲したのですが、迅速に引き継ぎができたためナレッジ化の効力も大きかったのではないかと思います。

## インシデントが起きた場合の対応

インフラ運用をしていると、突発的なインシデントが起きることもあります。
テック開発チームにいたときは、だいたいホスティング側起因によるインシデントが多く対応に追われることがありました。

例えば、2022年にGitHubがHerokuとTravis-CIに発行したOAuthトークンが、流出するインシデントが発生しました。

https://github.blog/news-insights/company-news/security-alert-stolen-oauth-user-tokens/

他にも、CircleCIで起きたインシデントもありました。

https://circleci.com/ja/blog/january-4-2023-security-alert/

こういった問題を真っ先にキャッチアップし、迅速に解決するということを行っていました。

# おわりに

精力的にインフラエンジニアとしても活動していたためか、退職直前までチーム外からはフルスタックエンジニアではなくインフラエンジニアとして認識されるまでになっていました。
これは、意思を持って取り組むことができたことに他ならない証拠だと思っています。

将来有望な未来ある皆様にも、自分の役割に捉われない働き方を追求していただき、リスキリングに意思を持って取り組み、仕事に誇りを持つことで日本の経済発展に貢献いただけることを切実に熱望しています。

Be AjileにGrowth Targetで達成よろしく！

# 参考

https://cly7796.net/blog/other/can-not-connect-to-heroku-and-github/
Raspberry Pi Pico - Python SDK のドキュメントを読む①

# はじめに

今まで、さらっとしか目をとおしてこなかった [Raspberry Pi Pico-series Python SDK](https://datasheets.raspberrypi.com/pico/raspberry-pi-pico-python-sdk.pdf)のドキュメントを読み通してみることにする。使ったのはこれを書いている時点で最新の 2024年12月4日ビルド版。

# 奥付

ドキュメントのライセンスは [Creative Commons Attribution-NoDerivatives 4.0 International](https://creativecommons.org/licenses/by-nd/4.0/deed.ja)。つまり、使うのは自由だけど、勝手に改変してはダメだよーってことで、和訳も勝手には出せません。

ただし、ドキュメント中のプログラムコードは [3条項BSDライセンス](https://licenses.opensource.jp/BSD-3-Clause/BSD-3-Clause.html)。

免責条項も記載されている。

# 第１章　MicroPython環境

MicroPython の概要、RPシリーズ用にPIOサポートのあることが記載されている。

## 1.1 入手方法

ビルド済みのMicroPythonファームウェアの入手方法について記載されている。

## 1.2 インストール方法

ビルド済みのMicroPythonファームウェアのインストール方法について記載されている。

BOOT ボタンを押しながら PC のUSBにつないで、マウントされる `RPI-RP2` フォルダにファームウェアを放り込めというやつ。ちなみに Pico 2 の場合は `RPI-RP2` ではなく `RP2350` になるが、このドキュメントには記載なし。

## 1.3 ビルド方法

MicroPython のソースコードからファームウェアをビルドする方法について記載されている。

MicroPython のダウンロードサイトには最新プレビュー版もあるので、最新機能を試すという意味では自前ビルドの必要性はほとんどなし。C言語で実装した拡張モジュールを組み込むのでなければ、自前ビルドすることはないでしょう。逆に拡張モージュールの組み込みを前提とした場合には説明が不足している。

拡張モジュールの組み込みについては[こちら](https://micropython-docs-ja.readthedocs.io/ja/latest/develop/extendingmicropython.html)をどうぞ。
準備不要ですぐできる！オンラインでできる無料チームビルディングゲーム集！

# はじめに
こんにちは、都内でソフトウェアエンジニアをしている[YSasago](https://qiita.com/YSasago)です。
現在はリモートワークでスクラムマスターを担当しており、コミュニケーション活性化のために月1回、チームビルディング活動を実施しています。
この記事では、準備なし・オンラインですぐに楽しめるチームビルディングゲームをご紹介します。１時間あれば実施できるので、チームビルディングの際のご参考に。

## [バリューズカード](https://values-card.wevox.io/signin)

* 推奨人数：4〜6人
* 所要時間：約40分

### ルール
バリューズカードは、会話しながら一人ひとりの価値観を確かめることができるカードゲームです。
山札から様々な価値が書かれたカードを引いていき、自分自身の価値が一番近いカードを選択していくゲームとなっています。バリューズカードを購入すれば、オフラインでも実施することができます。


### おすすめシーン！
* 新メンバーの参加やチーム結成時に！
メンバーの価値観を共有し、会話のきっかけ作りになります。

下記は、「テーマ：人生で大事な５つの価値」で実施したときの最終結果です。価値観は人それぞれで、新しい発見がありました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/9e386691-1544-46d1-9d24-99bb01cd6b4f.png)


https://values-card.wevox.io/signin


## [コードネーム オンライン](https://codenames.game/)
* 推奨人数：4〜8人
* 所要時間:約50分

### ルール
チーム対抗で行う推理ゲームです。スパイマスターが「単語1つ」のヒントを出し、チームメンバーが正解のカードを推理します。チームメンバーはスパイマスターの個性や、性格を知っていると有利になるゲームです。

### おすすめシーン！
* チーム内の会話が少ないと感じた時に！
自然に会話が生まれるので、コミュニケーション活性化に最適です。


![FireShot Capture 034 - コードネーム　-　友達とオンラインでプレイしよう - codenames.game (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/e8a45aaa-24e4-714c-0057-3e1fc26444cd.png)


https://codenames.game/


## [Gartic Phone](https://garticphone.com/ja)

* 推奨人数：4人以上
* 所要時間：30分〜

### ルール
Gartic Phoneは、お絵描き伝言ゲームです。お題の文章を見て絵を描くというパーティーゲームです。「文章→絵→文章→絵…」というように絵と文字で交互に伝えていく簡単な伝言ゲームです。絵が苦手でも大丈夫です！

### こんな人におすすめ！
* 仕事終わりにリフレッシュしたい時に！
チームの笑い声が絶えなくなります。


![スクリーンショット 2024-12-22 1.03.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/95954/abbb63c6-be48-7431-cae0-e9382fe0be09.png)


https://garticphone.com/ja

## [ボードゲームアリーナ](https://ja.boardgamearena.com/)
ボードゲームアリーナは、たくさんのボードゲームをオンライン遊ぶことができます。私は、仕事終わりにチームメンバーと一緒に遊んでました。無料アカウントでもたくさん遊ぶことができるので、リフレッシュしたいときにおすすめです。

https://ja.boardgamearena.com/

### おすすめのゲーム
#### [ニムト](https://boardgamearena.com/gamepanel?game=sechsnimmt)

https://boardgamearena.com/gamepanel?game=sechsnimmt

#### [お邪魔者(Saboteur)](https://boardgamearena.com/gamepanel?game=saboteur)
https://boardgamearena.com/gamepanel?game=saboteur

# おわりに
オンラインで手軽に楽しめるチームビルディングゲームを4つ紹介しました。どのゲームも会話や協力が必要で、自然とチームの絆を深めることができます。コミュニケーションの活性化やリフレッシュに、ぜひお試しください！
「こんなゲームもおすすめだよ！」という情報があれば、ぜひ教えてください。
Windows のコマンドプロンプトで curl ＋ Azure OpenAI Service（VS Code の REST Client での例を参考に）【Microsoft Azure】

この記事は、「[Microsoft Azure Advent Calendar 2024](https://qiita.com/advent-calendar/2024/azure)」の 22日目の記事です。

## はじめに
諸事情により、Azure OpenAI Service でのキー認証を使った API利用の動作確認を行うことがありました。

その時に試した内容を、メモとして残すための記事になります。

## 実際に試してみる
### 前提条件
この後の内容を進めるにあたり、Azure OpenAI Service関連で以下が準備できている前提となります。

- エンドポイント
- デプロイID
- APIバージョン
- APIキー

[公式の「Azure OpenAI Service の REST API リファレンス」](https://learn.microsoft.com/ja-jp/azure/ai-services/openai/reference)での記載の以下にあたる部分です。

参考にしたページで書かれた内容でいうと、以下になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/50868/daabb111-d8dc-c100-01a8-878517512078.png)

### VS Code の REST Client ＋ Azure OpenAI Service
それでは以下の参考情報を元に、VS Code の REST Client で Azure OpenAI Service の API を使ってみます。

●Azure Open AI Chat-Completions API試してみる｜maito17s
 https://note.com/maito17s/n/naeca2a8cc0d0

#### VS Code の REST Client で実行する内容
VS Code の REST Client で実行する内容として、以下を用意しました。

```
# 設定
@endpoint = 【エンドポイント】
@deployment_id = 【デプロイID】
@api_version = 【APIバージョン】

@api_key = 【APIキー】

@message = 【送信するメッセージ】

POST {{endpoint}}/openai/deployments/{{deployment_id}}/chat/completions?api-version={{api_version}}
api-key: {{api_key}}
Content-Type: application/json

{
    "messages": [
        { "role": "user", "content": "{{message}}" }
    ]
}
```

自分が上記を試した際には、デプロイしたモデルなどは以下としました。

- デプロイID（デプロイしたモデルの名称と一致させた形）： gpt-4o
- APIバージョン： 2024-05-01-preview

なお、参照したページの内容を簡素化しており、例えば送信する JSON の部分は最小限にしています。

### Windows のコマンドプロンプトで curl ＋ Azure OpenAI Service
次に Windows のコマンドプロンプトで curl を利用した形でやってみます。
VS Code の REST Client で試した内容をもとに、curl で実行する内容を作ります。

以下が具体的な内容で、ここでは文字コードが UTF-8 のバッチファイルを作り、そこで curl の処理を実行しています。

```
chcp 65001

set ENDPOINT=【エンドポイント】
set DEPLOYMENT_ID=【デプロイID】
set API_VERSION=【APIバージョン】

set API_KEY=【APIキー】

set MESSAGE=【送信するメッセージ】

curl %ENDPOINT%openai/deployments/%DEPLOYMENT_ID%/chat/completions?api-version=%API_VERSION% -X POST -H Content-Type:application/json -H api-key:%API_KEY% -d "{\"messages\": [{ \"role\": \"user\", \"content\": \"%MESSAGE%\"}]}"

pause
```

コマンドプロンプトで UTF-8 を扱うため「`chcp 65001`」という処理を入れています。

また、その他で自分が少しはまったところは、API で送る JSON の部分です。
以下に書かれているように、「送る内容全体は「"」（ダブルクォーテーション）で囲み、JSON内のキー名と値は「\"」（バックスラッシュ+ダブルクォーテーション）で囲む」というやり方になります。

●curl linuxとwindowsの違いまとめ
 https://tako-xyz.com/curl-linux-windows-difference-summary/

## その他
なお今回は詳細には触れないですが、PowerShell で実行する場合は「Invoke-RestMethod」を使った方法があります。

●Invoke-RestMethod (Microsoft.PowerShell.Utility) - PowerShell | Microsoft Learn
 https://learn.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/invoke-restmethod

●Quickstart - Get started using GPT-35-Turbo and GPT-4 with Azure OpenAI Service - Azure OpenAI Service | Microsoft Learn
 https://learn.microsoft.com/en-us/azure/ai-services/openai/chatgpt-quickstart?tabs=command-line%2Cjavascript-keyless%2Ctypescript-keyless%2Cpython-new&pivots=programming-language-powershell
VMware ESXi/vSphere 7.0,8.0 関連のサポート期限

# 公式を探した
https://ftpdocs.broadcom.com/cadocs/0/contentimages/Product_EOTG_Dates.pdf
買収のバタバタでさまよえるなんとかになっていたので、公式サイトをみつけた
ただし、やっつけで作った PDF をやっつけで作った ftp サイトっぽい(;\`・д・´) 
各ベンダーは日付は出ているが大本営発表のURLがなく、、、
まぁ、しゃーねぇーか(´・ω・`)

###### tags: `VMware` `broadcom`
24日目にLINEミニアプリが完成する初心者 ―― Day24. 審査のプロセス


# はじめに

前回は「24 日目に LINE ミニアプリが完成する初心者 ―― Day23. 審査依頼前の確認事項」と題して、審査依頼前のを確認しました。

https://qiita.com/non_watanabe/private/2d670e332ed4faf43ae8

<br/>
今回は最終日として、LINEミニアプリの審査プロセスについて紹介して行きたいと思います。

# 大まかな流れ

審査の大まかな流れは以下の通りです。

1. 審査を依頼
2. 審査完了
3. 検索を有効化

# 1. 審査を依頼

前回の確認事項の確認が完了したら実際に審査依頼を行って行きます。

LINE Developers で LINE ミニアプリのチャネルに入ると「審査申請」というタブがあるので、ここで情報入力を行って行きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743174/cf761d9b-af3f-dfb4-c4a9-6b99e003fc59.png)

## 審査のための補足資料

審査には以下の入力が必須になります。

- チャネル基本設定
- ウェブアプリ設定
- 事業情報
- 連絡先情報
- サービスメッセージテンプレート

下の画像のように入力が完了している項目には緑のチェックが入ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743174/bdfb8fe2-77c6-9dfb-1602-e856f35e5d53.png)

## 審査のための補足資料

ここの記入は任意ですが、審査に使用する補足のコメントと添付ファイルを設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743174/9789a2ad-a5a7-652e-3354-b8e8d6b75d4b.png)

内容の入力が完了したら最後に「審査を申請する」をクリックしたら申請は完了です。

# 2. 審査完了

申請後は LINE ヤフー株式会社による審査が行われ、その進捗が進行中のワークフローに表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2743174/ee997573-57ee-8a47-0c75-7695dafc37ae.png)

審査には 1〜2 週間程度時間がかかり、完了後は登録したメールアドレスにもメールで審査結果が通知されます。

# 3. 検索の有効化

審査が完了し LINE ミニアプリが承認されると、チャネルのステータスが自動的に「承認済み」になった後、すぐに「反映済み」になります。

ただ「反映済み」になっても、LINE 内での検索がまだ有効になっていないため、ユーザーがサービスを検索して見つけることができない状況です。

検索を可能にしたいタイミングで［検索可能にする］ボタンを押すことで、LINE 内で LINE ミニアプリの検索が可能になります。

:::note warn
ステータスが「反映済み」になってから 30 日以内（土日祝日を含む）に手動で検索可能にしなかった場合は、31 日目の午前 9:00（JST）に自動的に検索可能となります。
:::

これで申請は完了です！

# まとめ

ここまでで、審査のプロセスを確認してきました。

今回で LINE ミニアプリの実装は完了です！

明日は最後のまとめとして今回のアドベントカレンダーの実装についてまとめたいと思います。
テスト管理ツール「QualityTracker」でテストを実施。

## はじめに
VALTES Advent Calendar　23日目を担当します。@valtes_taktomです。
趣味はギターで、バンドを2つ掛け持ちでやってます。

VALTES Advent Calendar初日に@kuroshiba_komomameさんが紹介されたQualityTrackerの開発を行っております（主にフロント）。

## テスト管理ツール「QualityTracker」でシンプルなテストケースを作成～実施～確認してみる
今回は「QualityTracker」で、ログイン画面を想定した正常系テストをおこなってみます。

**テストケースの内容は下記**
メールアドレス、パスワードを入力して「ログイン」ボタンを押下すると、ログイン処理がおこなわれて、ログイン後の画面に遷移することの確認

### 1．テストケースの作成
「QualityTracker」では、テストケース作成方法が2パターンあります。
1. Web上で1ケースずつ作成する
1. Excel、CSVからインポートする

今回はExcel、CSVからインポートする方法です。
では、早速進めてみましょう！

まずはプロダクトを作成し、
![qiita001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/a8642ab6-944f-f4b5-a0cc-accdd22d289c.png)

テスト環境を設定しておきます。
![qiita002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/46c19340-a6cf-3a20-4df0-229ee4a8821d.png)

テストスイート画面へ遷移し、フォーマットファイルをダウンロード。
![qiita003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/e3d86819-b813-e3be-0817-1ecd4726b2db.png)

フォーマットをExcelで開いて、テストケースを追加。
※QualityTrackerでは、複数手順と期待値を持ったテストケースが作成できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/9a16dc39-ba82-0330-5d6c-e616e65fdbd0.png)

で、これを保存してインポート。
![qiita005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/37d36b73-ee9c-9919-ffc0-16a44e073ada.png)

テストスイートができているのがわかります。
※テストスイートとテストケースはプロダクトに紐づけられ、再利用できるようになっています（資産化）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/d5fd8cc5-ffec-d36b-befe-e1584a3a0f4f.png)

### 2．テストを実施する
ここでプロジェクトを作成
![qiite006.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/abd0cafd-8f66-1461-aef6-7e09991a7f44.png)

そしてテストランを作成
※テストランはプロジェクトに紐づけられます
![qiita007.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/89b33f8b-a0b5-3ae5-f530-3595a1dc88f2.png)

テストラン画面へ遷移して、実施するテストスイートをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/2deb7cff-db9b-40ec-3ae0-2eb51df3c194.png)

実施画面では手順と期待値を見ながら、passedやfailedの結果を付けられるのが良いですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/261bf34c-54bc-2e60-2da3-0bcf8eee0d1d.png)

では、実際にログイン画面の動きを（今回は想像して）テストして結果を入力してみます。
複数の手順に対してpassedをポチっポチっと!
![qiita009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/5fa811f9-0940-f97a-8362-8b2202a80b43.png)
テストケースの変更やテスト結果入力など、誰が何をおこなったかなどもわかります。

### 3．進捗確認
最後にプロジェクトやテストランの進捗状況をダッシュボードから確認してみましょう。
テストケース自体は1つなのですが、テスト環境を3つ使ってますので、実績3ケースになってます。
![qiita008.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3945766/25f62d23-a62a-3cff-4699-172fd043796d.png)
※実施予定日を入力すると進捗率も表示されます！
クラウドのサービスなので、すべてのユーザーが同一状態で共有できるのは利点ですね。

以上、シンプルなテストケースを作成して、テスト実施してみました。

## 最後に
ご利用料金、無料トライアルのご案内、デモ依頼はQualityTrackerサービスサイトをご確認お願いいたします。

https://service.valtes.co.jp/qualitytracker/
フルリモート可の会社で3年間出社し続けた私が感じた、敢えて「出社する」ことのメリデメ

# はじめに
- 最近、某会社がリモートワークを終了させるとかでTwitterが盛り上がっていたので
- リモートワーク派からの意見が多い印象だったので、出社派の目線から出社のメリデメを書いてみようかなと
- **出社しろよ！！と言いたいわけではない** 
    - むしろリモートワークは賛成

# 前提
- 独身
- 一人暮らし
- 20代
- 職場までドアToドア電車で1時間弱
- **どうしても業務都合で必要な場合のみ出社する必要がある**タイプのリモート制度

# メリット
1. 来てる人と仲良くなれるから仕事しやすい
1. 寝坊してもリモートワークすれば大丈夫っていう心理的安全性(誤用)が心強い
1. 通勤時間を勉強時間として区分けできる
1. テレで詰められるより対面の方がマシ
1. 定期券を買える

### 来てる人と仲良くなれるから仕事しやすい
- 同じく出社派の人と職場で毎日顔を合わせる
    - 他チームの人であっても「ちょっとすみませーん」で話しかけやすくなる
    - 逆も然り
- チャットだけで一度も会ったことのない人よりは毎日顔を合わせている人とのほうが仲良くなりやすいのは道理

### 「リモートワークでも良い」という心理的安全性(誤用)が心強い
- 寝坊した時に「まあ今日はリモートワークにするか」とリカバリが効く
    - このおかげで入眠時のプレッシャーが軽減されている感がある
- 疲労が限界の時も

### 通勤時間を勉強時間として区分けできる
- 通勤時間という「暇だけど自由ではない」時間を作り出すことで勉強時間として強制的に確保している
    - 過去に取った資格は全部通勤時間にPing-t解いて勉強してる
    - 私の場合、毎日２時間弱の勉強時間が出来る

### Teamsで詰められるより対面の方がマシ
- 相手の表情が見えたほうが「怒ってる度」を察せる
    - 諸説あり？
    - ~~相手も出社派じゃないと意味がないけど~~

### 定期券を買える
- 出社派は定期券を買えるので、交通費でお得


# デメリット
1. 出社しないといけない系タスク押し付けられがち
1. デスク周りの環境を自由にできない
1. 単純にめんどくさいとは思う

### 出社しないといけない系タスク押し付けられがち
- 「書類提出しといて」とか「マシン触ってみて」とか
    - ~~書類出しに来なよ…~~

### デスク周りの環境を自由にできない
- デスク周りの環境でいえばリモートワークのほうが快適

### 単純にめんどくさいとは思う
- リモートワークなら１時間長く寝られると思うときはある
- 家事の時間は一切取れないので週末にまとめてやるしかない
- この時期寒い

# 感想
### 将来的にはリモートワークに慣れるべきではあるとは思う
- ライフステージの変化に合わせやすいのはリモートワークであるのは間違いない
    - 実際、子供がいる人は大体リモートワーク派
- 私はリモートワークするとすぐにサボってしまう質

### リモートワーク制度は出社派にもメリットだらけ
- ぜひ今後もリモートワークを続けてほしい
- 上に書いたもの以外にも
    - 職場の人口密度が低いから快適とか
    - 会議室抑えやすいとか
廃止資格の知見に基づき新試験に臨む─AWS認定DEA-C01資格合格体験記

もう4ヶ月も前になりますが、24年8月に [AWS認定Data Engineer - Associate資格試験](https://aws.amazon.com/jp/certification/certified-data-engineer-associate/)（DEA-C01）に挑戦し合格することができました。今回はその体験記です。

# 前提

* 受験した試験バージョンは __DEA-C01__。バージョンが変わらずとも出題内容は徐々に変わっているようだが。
* 本試験の受験に先立って23年12月に __AWS認定Data Analytics - Specialty資格__ を取得。またそれ以前にAWS認定Solutions Architect - Associate資格等も取得済。
* 私自身はここ数年AWSでITサービスを構築・運用するプロジェクトに参画する機会を得たが、EC2とRDSで完結するような小規模なもの。データ分析基盤のようなものの構築・運用に関わったことは一度もない。とはいえ、他のAWS資格同様、出題範囲は広範に及びそれらを「経験」でカバーするのは困難。経験があるに越したことはないが重要な問題ではない。 __きちんと机上で学ぶこと__ こそ重要。

# 学習方法

受験準備期間は1ヶ月程度。中断を挟んでいるので正味2週間くらいかもしれない。

Udemyで配信されている模擬試験問題集 "AWS Certified Data Engineer Associate Practice Exams DEA-C01" （Neal Davis氏） の模擬試験問題集のコースを受講。
同コースに含まれる6つの模擬試験問題の演習を修了。正解だったものも含めて解説に眼を通す。英語なのでブラウザの機械翻訳の助けを借りた。二周はせず。
これ以外何もしなかった。

70％前後の正答率が得られる状態となったことを確認し本番受験し合格。点数は789点。

# 所感

* 当たり前かもしれないが __AWS認定Data Analytics - Specialty資格__ を保持している場合、その復習だけで合格ができる（事実）。
* 仮に同資格を保持していなくても、 __より広範な知見を求められるSolutions Architect - Associate資格を保持していれば、その知見にデータ分析系固有の知見を加えればよく__、それには模擬試験問題集の修了で十分という印象（推測）。

# 参考記事

昨年のアドベントカレンダー企画中に投稿したAWS認定Data Analytics - Specialty資格試験（DAS-C01）の合格体験記：

https://qiita.com/mizukyf/items/cd4b2733fc342476ead8
day24 『心理的安全性とアジャイル』 

## はじめに
　本書籍の中では、心理的安全性という用語は、2013年頃の「誰も責を負わない事後分析」の話とのつながりが書かれています。私は「心理的安全性」という用語をGoogleから知りました。最初に聞いた時、すぐにその概念の大切さに納得するとともに、Googleは良い用語を使ってくるなぁ、と心の底から感じました。自著でウォーターフォールとアジャイルの比較をする際でも、心理的な安全性の差異は感じていました。しかし、自らそれを概念として用語化できませんでした。

![心理的安全性とアジャイル 目次2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/533414/47aeee7c-7138-3dda-1e36-5bff27eb7700.png)

 
 
## ポイント
### 人的負債と技術的負債
- 技術負債：チームワークが無視され、避けられるような職場を作ってしまった場合。
- すぐれた実績を出すために必要なことは心理的安全性だけである。
- 従業員満足度ではないよ！
　（追記）そもそも、心理的安全性が無い環境での従業員満足度アンケートって、北朝鮮の投票みたいなもんだし。

### １　今日の仕事、明日の仕事
- VUCA：不安定性(volatility)、不確実性(uncertainty)、複雑さ(complexity)、曖昧さ(ambiguity)
- 人的負債
- うまくいかないやり方
    - 今までやってきたことをそのままやり続ける。
    - 一般的なアドバイスしかできない
- うまくいくやり方
    - **取締役会も含め、チーム全員の心理的安全性を最優先とし、守ること。**
    - アジャイルな考え方への変化に尽力すること。
- WoW(Way of Work)：働き方
- WoT(Way of Thinking)：考え方
- テクノロジーは時速１００万マイルで走っているのに、組織は昔と変わらないKPTやPDCAで…。
- SAFe(Scaled Agile Framework)は価値がないことを認識する。

### ２　プロセスｖｓ人
- サーバントリーダシップ

### ３　チームと高業績の探求
- プロジェクト・アリストテレス
- 信頼
- 意見を言う、すなわち「勇気」と「オープンさ」

### ４　心理的安全性　
- 高いパフォーマンスのための唯一のスイッチ

### ５　心理的安全性と感情指数を数字に置き換える

### ６　ソフトスキルはハードである（難しいということ）
- IQ vs. EQ(感情指数)

### ７　次に何がおこるのか、そしてパンデミック以降の世界での働き方

## 書誌情報
- 書籍名：心理的安全性とアジャイル
- 著者：ドゥエナ・ブロムストロム
- 出版社：翔泳社
- ISBN：978-4-7981-7310-8

## 参考
-