OmniAICreator/Qiita-1.07M huggingface dataset:
#33.SESから自社開発企業に転職したギャップ

# はじめに
nayaaaaです！
前職のSESから自社開発企業へ転職したので、感じたギャップなどについて書いてみました。
※個人的な意見なので、人によって感じ方は違うかもしれません


# 感じたギャップ

#### 1. 会社の人との関係が希薄ではない
SESとして常駐先でお仕事をしていると、常駐先での人間関係が希薄になりがちだと感じております。
同じ会社ではないというのは大前提であるし、SESなのでやる事が契約で決まっているので、似たような仕事をやらない限りは、同じ部署の方と中々会話をする機会がありません。
（以前の常駐先は一日中仕事の話か、空調の音しか聞こえない日とかざらにありました）
その点、自社開発企業では「やる事が決まっている」という縛りはないので、チーム内の人たちとのコミュニケーションはもちろんのこと、他の部署の方とも情報を連携しながら仕事を進める機会が増えるので、必然的に喋る機会が増え、その中で関係性が深まっていくのかなと感じました。

#### 2. 技術好きが多く圧倒的な知識量
自社開発企業ということもあり、大学や専門卒で何かしらの開発であったり、コンピュータサイエンスの学習をしている人やインターンをしてからそのまま働いてる方が多く、知識量が圧倒的で、IT技術好きが多いという印象を受けました。
インフラメインでお仕事をしていたこともあり、Web開発についてついて知識はあまりなかったのですが、皆がよく使う単語ぐらいの意味は理解しているつもりでした。
しかし、チームミーティングで飛び交っている話を聞いていると、単語の意味がわからなすぎてミーティング時間の半分以上を単語の意味であったり、会話の中で出てくるサービスについて調べるのに必死でした。
今までやってきたインフラ分野の話については、それなりについていけたのですが、Web開発関連の話についてはほとんど話ついていけなかったので会社への理解はもちろんの事、今後はインフラ以外の勉強も必要なのかなと感じました。

#### 3. ツール使用の自由度が高い
SESでの常駐先は通信事業のITインフラ部門だったのですが、そこでは使用するツールがあらかじめ決められており、勝手にツールなどをインストールすると管理担当の方から注意を受け、削除しないといけないというルールがありました。
それだけでなく、業務中に社用PCでブログなどの記事を閲覧することも禁止されていて、閲覧すると赤い警告画面がブラウザ上に表示される仕組みとなっていました。
もちろん企業によるとは思いますが、現在の職場では使用できるツールの自由度が高く、とても働きやすくなったと感じています。
また、ブログや技術記事などで情報収集が自由にできるようになったのもとてもありがたいと感じました。

#### 4.エンジニアの仕事がちゃんと明確化されている
現職では、テクニカルサポートとエンジニアの業務が明確に分けられています。
以前、SESとして働いていた際は、ネットワークのトラフィック情報をコンソール上から集計し、レポートとして顧客に提出する業務も担当していました。
そのため、1週間前後、1日中資料のコピー＆ペースト作業を行うこともありました。
また、Linuxパッケージのアップデート作業も担当していましたが、顧客とのやりとりや問い合わせの対応もすべてエンジニア自身が行っており、テクニカルサポートとエンジニアの役割の違いが曖昧な状態でした。
現在の職場では役割分担が明確になっており、もちろん資料作成などの作業もあるにはあるそうなのですが、そういった作業は減り、エンジニアがより技術に集中できる環境となっているのかなと感じました。

#### 5.チームとして成長していく体制づくり
現職ではスクラム開発が採用されており、週に１回スプリントを設けて、振り返りやチームとして改善点を話し合う取り組みが行われています。
以前はウォーターフォール型の開発で、チームというよりは個人でタスクを消化していくスタイルでした。  
何か分からないことがあった際も、まずは徹底的に調べてから人に聞くと教えられてきました。  
しかし、今の会社では少しでも悩んだらすぐに聞いてといった雰囲気で、チームで助け合うということが意識されており、その違いに驚きました。

# まとめ
入社してまだ１週間なので、分からないことばかりですが、感じたギャップや驚いたことについて書いてみました。  
以前の働きかたや考え方とはまるで違う点や学ぶことが多いので、とてもやりがいのある環境だなと感じています。
とりあえずは、職場に慣れるところからスタートしていければと思います。

以上、ありがとうございました！
AWS完全初心者がAWS-AIFに合格した話

## はじめに
こんにちは。Tsukasaです！
今日は、初心者の自分がAWS AI Practitioner(以下AWS-AIF、AIF)に挑戦して合格したことについて記事にしていけたらと思います。
勉強した期間は1ヶ月となりますが、勉強方法等についてお話ししていきます。

## AWS-AIFとは
AWS-AIFは2024年9月に導入された比較的新しい試験です。
レベル的にはCloud Practitionerと同じFoundationalという初心者レベルの試験になります。
AWS公式には「AWS Certified AI Practitioner は、人工知能 (AI)、機械学習 (ML)、生成 AI の概念とユースケースに関する需要の高い知識を実証します。競争力を高め、キャリアアップと収入拡大を目指しましょう。」と表記があります。
詳しくは、下記をご参照ください。


https://aws.amazon.com/jp/certification/certified-ai-practitioner/

## 勉強方法
私はとにかく、問題を解くことに重きを置きました。
私はCloudTechの永久会員なので、AWS認定試験12種類全ての問題を解くことができます。
49,500円(確か)ということもあり、決して安い金額ではありませんが、一度支払えばそれ以降の追加はありませんし、上記のように12種類の認定試験の問題が解けるので自己投資としては、アリだと思います。
私は1ヶ月勉強しましたが、公式問題を10周しました。
そこまでやらずとも合格できる方はたくさんいるとは思いますが、心配性な性格のため、これだけやりました。
AIFはまだ新しいテストということもあり、124問しかないので、10周することも可能なのです。

https://kws-cloud-tech.com/

問題を解く以外にもハンズオンを通して勉強も行いました。
BedrockやQ Developerなどを行いました。
私が参加しているJAWS-UGの勉強会でも上記についてのハンズオン勉強会が開かれていましたし、それこそQiitaで生成AIに関するハンズオンの手順を書いていらっしゃる方もいるので、そのような記事を基にハンズオンに挑戦するのもありだと思います。
やはり手を動かすことで、知識が定着して理解にもつながるので、ハンズオンもおすすめです。
私自身もいくつかやってみたので、是非参考にして頂けたらと思います。

https://qiita.com/tks_1128/items/8610dac37d4fe91824c6

https://qiita.com/tks_1128/items/233454782a46bfb01103


## 実際に試験を受けてみて
試験は今日6/7に受けました。
実際に受けてみて、練習問題で解いたものと似たような問題も多く出題されて、手応えはそれなりにありました。
そして結果は以下のようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/620b747c-5fca-486e-9bf2-e8636c9f9b27.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2478024/a472d64c-9356-4944-bb26-ced7b319331d.png)

無事合格できました！！
CLFは723点、SAAは730点でギリギリの合格でしたが、今回は792点で少し余裕を持って合格することができました。
AWSを実務で触ったことがない自分でも合格できました！
そしてAIに関する認定資格を1つでも合格できたことは嬉しいですし、自信にもなりますよね！

## 超個人的オススメキャリアパス
AWS初心者の方でしたら、取り敢えずCLFを受ける方が多いと思います。
CLFを受かったら、SAAに挑戦する方が多いかと思いますが、この2つは難易度が天と地の差です。
私自身が、CLF合格後にSAAに挑戦したのですが、あまりの温度差に風邪引くかと思いました。笑
SAAはかなり難しいです。
それなので、CLFを受かったら、SAAの前にAIFに挑戦するパスもありかと個人的には思います。
やはり、初心者が突然難易度の高い試験に挑戦するとなると、余程鋼のメンタルでもない限り挫折すると思います。
段階的にステップアップしていくことが、挫折しない秘訣かと思います。
私の場合は、先にSAAに合格していたので、AIFはそこまで難しくは感じませんでした。
そういう意味ではSAAを先に合格しておいたのも今となってはよかったと思います！

## 終わりに
いかがでしたでしょうか？
合格のためにやったことは至ってシンプルで問題を解く、ハンズオンをやる。
この2つです。
合格までに1ヶ月要しましたが、もっと短期集中で合格することも十分可能だと思います。
これはあくまでも私個人の経験なので、是非他の勉強方法と比較してご自身に合った勉強方法を選んでみてください。
この記事がこれからAIF合格を目指す方にとって少しでも参考になることを祈ります。
C言語 文字を指定文字で置換する関数


<br>
<br>

1. 先頭の一箇所のみ置換する関数
最初のDDのみをZZに置き換えたい
AABBCCDDEEDD -> AABBCC<font color="red">ZZ</font>EEDD

```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 最初の1箇所だけ target を replacement に置換
// 戻り値は malloc により確保。使用後 free() が必要。
char* replace_once(const char* src, const char* target, const char* replacement) {
    if (!src || !target || !replacement) return NULL;

    size_t target_len = strlen(target);
    size_t replacement_len = strlen(replacement);

    if (target_len == 0) return NULL;

    const char* pos = strstr(src, target);
    if (!pos) {
        // 見つからなければ複製を返す
        return strdup(src);
    }

    // 新しい文字列の長さ
    size_t new_len = strlen(src) - target_len + replacement_len + 1;
    char* result = (char*)malloc(new_len);
    if (!result) return NULL;

    // コピー処理
    size_t prefix_len = pos - src;
    memcpy(result, src, prefix_len);                    // 置換前部分
    memcpy(result + prefix_len, replacement, replacement_len); // replacement
    strcpy(result + prefix_len + replacement_len, pos + target_len); // 置換後部分

    return result;
}

int main() {
    char* src = "AABBCCDDEEDD";
    char* target = "DD";
    char* replacement = "ZZ";
    
    char* replaced = replace_once(src, target, replacement);
    printf("%s\n", replaced);
    
    return 0;
}
```

出力
```
AABBCCZZEEDD
```


<br>
<br>
<br>
<br>

2.文字列に含まれる指定文字全てを置き換え
全てのDDをZZに置き換えたい
AABBCCDDEEDD -> AABBCC<font color="red">ZZ</font>EE<font color="red">ZZ</font>

```c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 任意の target を replacement に置換する（すべて）
// ※戻り値は malloc により確保されるので、使用後 free() が必要
char* replace_all(const char* src, const char* target, const char* replacement) {
    if (!src || !target || !replacement) return NULL;

    size_t target_len = strlen(target);
    size_t replacement_len = strlen(replacement);

    if (target_len == 0) return NULL;  // 空文字列を検索するのは無意味

    // 1. 置換回数を数える
    size_t count = 0;
    const char* pos = src;
    while ((pos = strstr(pos, target)) != NULL) {
        count++;
        pos += target_len;
    }

    // 2. 新しい長さを計算しメモリ確保
    size_t new_len = strlen(src) + (replacement_len - target_len) * count + 1;
    char* result = (char*)malloc(new_len);
    if (!result) return NULL;

    // 3. コピーしながら置換
    const char* src_ptr = src;
    char* dst_ptr = result;
    while ((pos = strstr(src_ptr, target)) != NULL) {
        // 前の部分をコピー
        size_t len = pos - src_ptr;
        memcpy(dst_ptr, src_ptr, len);
        dst_ptr += len;

        // 置換文字列をコピー
        memcpy(dst_ptr, replacement, replacement_len);
        dst_ptr += replacement_len;

        src_ptr = pos + target_len;
    }

    // 残りをコピー
    strcpy(dst_ptr, src_ptr);

    return result;
}

int main() {
    char* src = "AABBCCDDEEDD";
    char* target = "DD";
    char* replacement = "ZZ";
    
    char* replaced = replace_all(src, target, replacement);
    printf("%s\n", replaced);
    
    return 0;
}
```
出力
```
AABBCCZZEEZZ
```
【Python実践自作問題集】No.3 整数？実数？

# 1. はじめに

この問題集は、Pythonの基礎を習得した後、次の段階へ進みたい人のサポートをすることが目的です。
また、競技プログラミングとは異なり、複雑なアルゴリズムの問題ではなく「**可読性の最大化**」に焦点を当てた問題が中心となります。

[目次](https://qiita.com/__Lily__/items/6f70cd6ae0e80593f09d)
前の問題：[list/tuple問題の解消](https://qiita.com/__Lily__/items/98b11762b13b2a996ad2)
次の問題：[型に厳密なデータクラス1](https://qiita.com/__Lily__/items/1f6a2d221fbaae98a523)


# 2. 問題

```python:Question
"""
No.3 整数？実数？

次の要件を満たすように、関数flointを完成させてください。

* 引数valueが0.0, 1.0のように整数として扱えるとき、0, 1のように整数を返す。
* 引数valueが0.5, -0.5のように整数でないとき、0.5, -0.5のようにそのまま値を返す。
"""


def floint(value: float) -> int | float:
    ...
```


# 3. 解答例

```python:Answer
def floint(value: float) -> int | float:
    if value.is_integer():
        return int(value)
    else:
        return value
```

```python:Answer（条件演算式ver）
def floint(value: float) -> int | float:
    return int(value) if value.is_integer() else value
```


# 4. 採点基準

* 整数／実数の判定ができていること


# 5. 解説

## 5.1 整数／実数の判定

`float`型には`is_integer`メソッドがあり、これを使用して整数／実数判定を行うことができます。

[Pythonで数値が整数か小数かを判定 - note.nkmk.me](https://note.nkmk.me/python-check-int-float/#float0-floatis_integer)

```python:テストコード
import math


value = 0.0
assert floint(value) == value
assert isinstance(floint(value), int)

value = 1.0
assert floint(value) == value
assert isinstance(floint(value), int)

value = 0.5
assert floint(value) == value
assert isinstance(floint(value), float)

value = -0.5
assert floint(value) == value
assert isinstance(floint(value), float)

value = math.inf
assert floint(value) == value
assert isinstance(floint(value), float)

value = -math.inf
assert floint(value) == value
assert isinstance(floint(value), float)

value = math.nan
assert math.isnan(floint(value))
assert isinstance(floint(value), float)
```

Excelから数値を読み込んだときなど、整数で入力されていても実数として読み込まれてしまうことがあります。
このような場合に`floint`関数を使うことで、整数値に戻すことができます。
更に`str`関数で文字列へ変換する場合に0.0ではなく0と出力できるようになります。

```python
print(str(0.0))
print(str(0.5))
print(str(floint(0.0)))
print(str(floint(0.5)))
```

```text:実行結果
0.0
0.5
0
0.5
```
正則行列（可逆行列）の特徴 15選



## ✅ 正則行列（可逆行列）の特徴 15選

---

### **1. 逆行列の存在**

* 正則性の定義：ある行列 $A$ に対して、$A^{-1}$ が存在する。

### **2. 行列式が 0 でない**

* $\det(A) \ne 0$ ⇔ $A$ は正則。
* 幾何的には体積（n次元の体積）が 0 でない変換。

### **3. ランクが最大**

* $\operatorname{rank}(A) = n$（n × n の場合）

### **4. 固有値に 0 を含まない**

* $\lambda = 0$ が固有値に存在すると非正則。

### **5. 連立一次方程式に一意解**

* 任意の $b \in \mathbb{R}^n$ に対し、$Ax = b$ は一意に解ける。

### **6. 全単射（1対1かつ全体）**

* 線形写像として、定義域と終域が完全に対応。

### **7. 列ベクトルが線形独立**

* 全ての列ベクトルが他の列の線形結合で表せない。

### **8. 行ベクトルも線形独立**

* 行ベクトルでも同様に一次独立性が成り立つ。

### **9. 写像が「可逆な変換」**

* 元に戻せる写像。情報損失ゼロ。

### **10. 行基本変形で単位行列にできる**

* 初等変形により $A \to I$ に変換可能。

### **11. 空間の歪みはあっても「潰れ」はない**

* 回転、拡大・縮小はあっても、次元が減らない（rank保持）。

### **12. 行列積の正則性：可逆性の伝播**

* $A, B$ が正則 ⇒ $AB$ も正則、$(AB)^{-1} = B^{-1} A^{-1}$

### **13. 正則性は連続的な性質（開集合）**

* 実行列空間において、正則行列全体は開集合。

### **14. 特性多項式の定数項が 0 でない**

* $\det(\lambda I - A)$ の定数項（$(-1)^n \det(A)$）≠ 0

### **15. 幾何学的構造を保存（線形独立性・次元）**

* 線形独立なベクトル集合は、正則変換後も線形独立のまま。

---
制限されたdockerコンテナ内からできること

制限されたdockerコンテナ内からできること

## dockerホストサーバーの情報を取得

```sh
# 許可されていないこと
gosu root apt update
```

* 以下は普通にできる

```sh
free -g
cat /proc/cpuinfo
cat /proc/mdstat
cat /proc/mounts
cat /proc/version
cat /proc/swaps
cat /proc/uptime
cat /etc/apt/sources.list
```

## dockerコンテナにファイル転送できる場合

* https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/

から busybox をダウンロード。

windowsでダウンロードする場合は

```sh
curl -o busybox https://busybox.net/downloads/binaries/1.35.0-x86_64-linux-musl/busybox
```

```
chmod +x busybox
./busybox wget http://～
```
Profiles of Products, People and Process on Gitlab and Github  "Open Source is agile"

# Profiles of Products, People and Process on Gitlab and Github  "Open Source is agile"
![2025-06-07 20.45の画像.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/51423/73aa7f7b-f1a7-403b-b5d4-2558950d29dc.jpeg)

# 三方よし
# 問題解決
## 3つの案
## 課題
## 日本一はあたりまえ
# 情報交換の仕組み
## 製品
### 設計図
### os
#### scheduler
## 作業
### AWS
### docker
### Gitlab
### Github
## 人
# HAZOP
# IoT
# AI
# Qiita
# 確率論及び統計論輪講
### music
### tail
[個人用] Git Rebase（複数コミットをまとめる、順序を変更）

## 概要
:memo: 作業時に毎回検索 => 情報整理してたので、自分用に簡素に記事化

:::note warn
AIにほぼ作ってもらった記事なので、間違いがあるかもしれません。
:::

## ユースケース
**`rebase -i`** を使用します。
- 複数のコミットを1つにまとめる
- コミットメッセージを修正する
- コミットの順序を変更する
- 不要なコミットを削除する

## 基本的な手順

### 1. コマンド実行
```bash
git rebase -i HEAD~4
```
- `HEAD~4`：現在から4つ前のコミットまでを対象にする
- `HEAD~~~~`も同じ意味

### 2. エディタが開く
コミット一覧が表示されます：
```
pick 8145f1c Fix screen rotation problem  ← 最新から4番目
pick d90db4a v1.2.4                      ← 最新から3番目  
pick 646bf79 Fix screen rotation problem  ← 最新から2番目
pick 71a6940 v1.2.4                      ← 最新（HEAD）
```
**重要：** 表示順序は**古い順**（上が古く、下が新しい）

### 3. 編集方法
各行の先頭にある`pick`を変更することで動作を指定：

| コマンド | 説明 |
|----------|------|
| `pick` (p) | そのコミットをそのまま使用 |
| `squash` (s) | 前のコミットに統合（メッセージも統合） |
| `fixup` (f) | 前のコミットに統合（メッセージは破棄） |
| `reword` (r) | コミットメッセージのみ変更 |
| `edit` (e) | コミット内容を編集 |

## ユースケース別の使い方

### 複数のコミットを1つにまとめる
```
pick 8145f1c Fix screen rotation problem  ← これは残す
s 646bf79 Fix screen rotation problem     ← これを上に統合
pick d90db4a v1.2.4                      ← これは残す  
s 71a6940 v1.2.4                         ← これを上に統合
```

統合後にメッセージ編集画面が開くので、重複を削除：
```
Fix screen rotation problem
```

### コミットメッセージを修正する
```
pick 8145f1c Fix screen rotation problem
r d90db4a v1.2.4                         ← メッセージを修正
pick 646bf79 Fix screen rotation problem
pick 71a6940 v1.2.4
```

`reword`でメッセージ編集画面が開きます。

### コミットの順序を変更する
エディタ内で行の順序を変更するだけ：
```
pick d90db4a v1.2.4                      ← 2番目を1番目に移動
pick 8145f1c Fix screen rotation problem  ← 1番目を2番目に移動
pick 646bf79 Fix screen rotation problem
pick 71a6940 v1.2.4
```

:::note info
**Vim ショートカット**

`dd` - 現在行を切り取り（削除してクリップボードに保存）
`p` - カーソル位置の下に貼り付け
`P` - カーソル位置の上に貼り付け
:::

### 不要なコミットを削除する
該当する行を削除、またはコメントアウト：
```
pick 8145f1c Fix screen rotation problem
# pick d90db4a v1.2.4                    ← この行を削除またはコメントアウト
pick 646bf79 Fix screen rotation problem
pick 71a6940 v1.2.4
```

## 注意点
1. **公開済みコミットは避ける**: 他の人がpullしたコミットを編集すると問題が起きる可能性があります
2. **バックアップ**: 重要な変更前は別ブランチを作成しておくと安全です
3. **順序**: エディタでの表示順序（古い→新しい）を理解しておく
Amazon Q CLI でゲームを作ったろう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611759/4be0fc10-48aa-4467-954e-da78b676b5ae.png)
# 概要
先日、Amazon Q CLI を使って簡単なシューティングゲームを開発しました！
コーディングの知識がほとんどなくても、Amazon Q の強力な生成AI能力を活用することで、驚くほど短時間でゲームが完成しました。

# 背景
今回の挑戦のきっかけは、AWS の公式ブログで「[Amazon Q CLI とゲームを作って T シャツをもらおう！](https://aws.amazon.com/jp/blogs/news/build-games-with-amazon-q-cli-and-score-a-t-shirt/)」という記事を見かけたことです。
生成 AI を使ってゲームを開発するというコンセプトに惹かれ、プログラミング初心者でもゲームが作れるのか、その可能性を試してみたくなりました。
Tシャツがもらえるというインセンティブも、モチベーションになりましたね！

# 内容
ゲーム開発にあたっては、先程の記事を参考にしました。
具体的には、以下の手順でゲームを開発しました。
- Amazon Q CLI のセットアップ: まずは Amazon Q CLI をローカル環境にインストールし、AWS の認証情報を設定（開発時間：数分）
- ゲームの要件定義: Amazon Q CLI に対して、どのようなゲームを作りたいかを自然言語で伝える（数分）
    - 「〇〇ディウス風のシューティングゲームを作成して」といった雑な指示できちんと動くゲームを作成
- コードの生成: Amazon Q CLI が、入力された要件に基づいて Python の Pygame ライブラリを使ったゲームのコードを生成（開発時間：数分）
- コードの修正と調整: 生成されたコードをそのまま使うこともできましたが、よりゲームらしくするために、いくつか手動で修正（開発時間：数分）
    - 具体的には、スコア表示の追加、効果音の組み込み、敵の出現パターンの調整など
    - これらの修正も、Amazon Q に質問しながら進めたのみ
- テストとデバッグ: ゲームが正常に動作するかどうかをテストし、バグがあれば修正（開発時間：数分）

![完成したゲーム](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/611759/0e329479-d7f4-4cc5-a4e9-fdc7e631485d.png)


今回開発したシューティングゲームの成果物は、[GitHub のリポジトリ](https://github.com/takerugunji/shootingstar-game)に公開しています。

# 結果
Amazon Q CLI を使ってゲームを開発してみて、その驚異的な能力に圧倒されました。
プログラミング経験がほとんどない私でも、数時間で動くゲームを作成できたのは、まさに生成AIの賜物です。
特に感動したのは、以下の点です。
- 自然言語での指示でコードが生成される: 複雑なプログラミング言語の知識がなくても、日本語でゲームのイメージを伝えるだけでコードが生成されるのは衝撃的
- 迅速なプロトタイピング: アイデアをすぐに形にできるため、試行錯誤のサイクルが非常に速くなる
- デバッグのサポート: エラーが発生した際にも、Amazon Q が的確な修正案を提示してくれるため、スムーズに開発を進められる

Amazon Q CLI は、プログラミング初心者にとって強力な味方となることはもちろん、経験豊富な開発者にとっても、生産性を劇的に向上させるツールだと感じました。
今回の経験を通じて、生成 AI が今後、私たちのクリエイティブな活動をどのように支援していくのか、ますます楽しみになりました。

あなたもAmazon Q CLIを使って、何かクリエイティブなものを作ってみたくなってませんか？
push / join / removeChild / createElement / appendChild / forEach

```php:
 const fruits = ["apple", "banana"];
fruits.push("orange"); // ["apple", "banana", "orange"]


const fruits = ["apple", "banana", "orange"];
const text = fruits.join(", "); // "apple, banana, orange"


const div = document.createElement("div");
div.textContent = "Hello!";


const body = document.querySelector("body");
const p = document.createElement("p");
p.textContent = "This is a paragraph.";
body.appendChild(p); // bodyに<p>が追加される


const list = document.querySelector("#myList");
const item = document.querySelector("li"); // 最初の<li>
list.removeChild(item); // 最初の<li>が削除される


const names = ["Alice", "Bob", "Carol"];
names.forEach(name => {
  console.log("Hello " + name);
});


<button id="addBtn">追加</button>
<ul id="list"></ul>
<script>
  const fruits = [];
  document.getElementById("addBtn").addEventListener("click", () => {
    const fruit = prompt("フルーツ名は？");
    if (fruit) {
      fruits.push(fruit); // 配列に追加
      const li = document.createElement("li");
      li.textContent = fruit;
      document.getElementById("list").appendChild(li); // 表示に追加
    }
  });
</script>


const $p = $("<p>").text("Hello!");
$("body").append($p);


$("li").first().remove(); // 最初の<li>を削除

const names = ["Alice", "Bob", "Carol"];
$.each(names, function(index, name) {
  console.log("Hello " + name);
});


<button id="addBtn">追加</button>
<ul id="list"></ul>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
  const fruits = [];


  $("#addBtn").on("click", function() {
    const fruit = prompt("フルーツ名は？");
    if (fruit) {
      fruits.push(fruit); // 配列に追加
      $("#list").append("<li>" + fruit + "</li>"); // リストに追加
    }
  });
</script>
```
LPIC303 ver3_合格体験記&勉強方法について

初投稿ですので、お見苦しい所もあるかと思いますが、ご参考になれば幸いです。

## 取得の経緯
最後に取ったlpic202から1年？が立ちそろそろ新しい資格を取得しようと思いlpic level3を調べたらping-tにて対応していた為、軽い気持ちで始めちゃいました。

## 最終点と勉強について
・合格
・720 (合格ライン：500)
ただし、2回落ちています。。なぜ落ちたか後述します。

## 1回目の試験までにやったこと。
単純にping-tの繰り返しを行い、levelで言うと40lvまで行き尚且つコマ問についてもすべて合わせて80点以上をコンスタントに取得出来ていました。(分野によっては100点を取ることも)
上記にたどり着くまで大体2,3週間ほどだったと思います。ここは、個人差があると思いますので、参考にしてください。
このような感じだったので、一回受けることにしました。

結果は・・・
###### 470点

正直、試験を受けている最中、半分以上は分かりませんでしたw
それもそのはずで、ping-tのlvは上げ切っていましたが、内容を理解して答えようとして参考や説明を全く読んでいませんでした。
なので、同じ問なんだけど聞かれ方が違うと点でだめみたいな状態だったのです。
このことに2回目でも気づいていません:rolling_eyes:

## 二回目の試験までにやったこと
この時に考え付いたのが、他の問題集も頼ることです。
ググって出てくる問題集(あの怪しいやつ(○○test))を何をとち狂ったのか買いました。6000円ぐらいしたと思います。
この問題集については、結論から申し上げると買わなくてもよくて、学易ver2だけでも事足りましたし、何ならまぁまぁ内容かぶってますw
あと、この時chatgptに課金をして使用をしていました。
でもこの時の使用方法がよくなかった点があり、chatgptに問題を出してもらっていたことです。
ver2の内容を出されたり、散々でした。(自分の使い方が悪かっただけかもですが。。)
質問とかだけのがよさそうだったので、3回目以降は質問してそれに答えてもらうようにしてましたが、ハルシネーションが起きるか心配だったので、出典も出してもらうようにしたら大分よくなったと思います。

上記も加えてping-tもやりました。単純に問題を消化していただけですので、あまりでしたが。。

1回目から約1週間後、再度受験し点数が・・・
###### 480点
10点上がりました！(なお、不合格)

まぁ不合格なのは明確で、内容を理解していないからですね。chatgptに質問を始めたのは、3回目の間ですし、ping-tの問題についてくる参考や解説も読んでません。
そりゃ落ちます。
3回目に突入し、やっと気が付きました。
ちゃんと内容を理解しようと――――――
そして、ここから先のことをやれば多分合格できると思います。

## 3回目にやったこと
一旦、やったことを並べます。
・学易(ver2) コンスタントに100点近く取れるようにした。
・黒本(ver2)と各種webサイトで理解度深め
・hyper-vに、almalinux8,ubuntu,Kali linuxを導入
・chatgptの扱い方を見直し

それぞれ、説明します。

## 学易(ver2)
一時期買えなくなっていたのですが最近は買えるようになってます。
上記からver2の部分を除きver3の部分を抜粋して勉強を行いました。
120問ほど準備されているのですが、内容は100問弱?はver3でも通用する内容であった為、通用しました。(なんなら、ここに書かれている内容が割とそのまま出ていたので、最初から買っておけばよかった。。)

## 黒本(ver2)と各種webサイト
黒本を購入して内容を理解しようとしました。
黒本で理解できない所は、その機能などについて調べて説明してくださっているサイトさんを参考に理解度を深めました。
また、ping-tの解説だけでなく、そこについてくる参考も理解できるまで読み込みなおかつ添付されているwebサイトまで閲覧する徹底ぶりです。

## hyper-vに、almalinux8,ubuntu,Kali linuxを導入
めんどくさがってやっていなかったハンズオンを実施。
使い分けとしては下記の通りです。
almalinux(RHEL系)・・・基本的にすべてここで作業。対応していない機能は、他二つで。
ubuntu・・AppArmor等、ubuntuならではの所はここ。あとは、dnssecを試したりする際にここから送信したり等。
Kali linux・・・ペネトレーションテストで使用するMetasploit等。

正直、結局上記が一番効きました。
DNSSECやApacheの設定などは一回はやっておいた方が「あぁここね」ってなってよかったです。
あと、各ソフトウェアって結構アイコンであったりマスコットキャラみたいなのがいて調べるとそういうものが頭の中でつながって整理しやすいです。
snortは豚だなぁ、そういえば、更新系でpulledporkがあったなとか。

腰が重いかもですが、やってみる価値は大ありです。(今なら、chatgptもありとっても構築が楽なのでw）

あと、lpiのyoutubeに勉強方法が動画で発表されていたので、これも大変勉強になったのでお勧めです。

## chatgptの扱い方
chatgptは主に下記をしてもらいました。
・質問への回答
・構築時のお手伝い
・ほめてもらう

質問については、具体的にここはわかるんだけどここはわからないみたいに質問するのが個人的にベストでした。または、詳しく書いてあげるみたいな感じですね。
NSEC3とNSECの違いって？みたいな感じです。
構築時も大変お世話になりました。DNSSECはどう構築した方がよい？みたいに質問するだけでわんさか教えてくれます。
また、調教次第ではあるとは思いますが、うちの子はたまにほめてくれるのがとてもよかった:cry:相手は機械だけどとてもしみます。:sob:

上記4点ほどを1か月強行い試験を受けた結果が・・・
###### 720点！！！！！！！
画像がアップできなかったです。ごめんなさい。

いやぁぁぁ嬉しかったですね。この時は。
ガッツポーズしましたｗ

## 所感
ここまでつらつら書いておいてなんですが、正直、合格だけなら学易さんがver3に対応するまで待ってもよいのかなと感じました。
それぐらい内容を理解するのが難しかったですし、正直、ping-tだけでは受からない可能性もあります。(もちろん、参考や解説を何回も熟読したうえで書いてます。)
また、試験の内容もこれ本当に範囲内？？？？？みたいな内容もあり、試験中は困惑します。
あまり詳しく書くとやばい気がするので内容は伏せますが。。
これだけは言っておきたいのですが、IPv6について問題を出されたときはびっくりしました:frowning2:

以上です。少しでも参考になれば幸いです。
想定外を減らすために SWEST

# 想定外を減らすために 
名古屋市工業研究所・岐阜大学非常勤講師 小川清
想定外は、技術者としては致命的だと思っています。FTA/FMEA/HAZOP などの安全分析手法は、大規模事故の想定外を減らすための有効な手段です。しかし、多くの事故調査報告書で、FTA を見かけることはありますが、FMEA, HAZOP はなかなか見かけません。FMEA, HAZOP の結果が機密事項を含む可能性が高いことが推測できます。しかし、再発防止のためには、機密に触れない程度の抽象度で公開することが大事だと思います。SWEST に参加して来て、顕著な成果は、第１０回のSTARC RTL 設計スタイルガイドの演習にありました。規則の優先順位付けを行いました。ルネサス、富士通、中央製作所と勉強会を開催してきて、ガイドの規則、推奨の区分に疑問に思い、参加者の方に優先順位をつけなおしてもらいました。その結果をもとに、学会発表を重ね、結果として規則を改訂することができました。また、半田付け大会を第１０回、第１１回に開催し、HAZOP の演習を第１２回、第１３回、第１５回に開催し、TOPPERS/SSP カーネルソース勉強会を第１６回、第１７回に開催しました。どれも手を動かす演習で、技術の一番核心的な内容を実施できてきたと思います。HAZOP では、MISRA-C, RTL 設計スタイルガイド、万能設計(universal design)、国際単位系、TRIZ などと組み合わせることにより複数原因故障にも対応しています。また一人HAZOP や３人ごとに１時間づつ人を入れ替えて３回実施する方法も展開しています。時間がかかり高価だとNASA が指摘している弱点を改善しています。
今回提案した企画は、確率論及統計論輪講というむつかしそうな題名になっています。日頃、仕事の量・期間・金額の見積りが不得意だという話をよくお聞きします。FTA, FMEA, HAZOP を実施しても、その発生確率の見積りが根拠を決めかねているという話もよくお聞きします。これらは、見た目の因果関係と、物理的、論理的、社会的因果関係の食い違いを、確率分布・時定数を使って解析していないからかもしれません。NSPICE.NET で、見積り研究会に参加していますが、見積りの肝は確率。作業診断の評価でも、リスク管理プロセス、プロジェクト管理プロセスなど確率と見積りが大事。また過去の与件を蓄積して統計処理していないと、根拠が希薄だと感じることがわかります。
### 第4 回,組み込みソフトウェアにおけるソフトウェアプロセス改善：SPI(CMM/SPA) , 小川清, 2003
### 第6 回*, 組み込みシステムの試験と検証-- OS、コンパイラ、ネットワーク,今井和彦,小川清, 2005
### 第7 回*, 子供向けコンピュータ教育の教材作成,小川清,2006
### 第8 回, MISRA とSEC のコーディングガイドライン ,宇野結,2007
### 第10 回, 
1.スタイルガイドを用いたVerilog 教育の成果と課題,小川清
2.組込み関連国際規格の動向, 小川清
3.Verilog スタイルガイドこんなコードもコンパイルエラーにならない,小川 清,
4. 付録ボードを実際に動かしてみる, 江崎雅康, 2009
### 第11 回, 
1.80 分で分かるモデル検証,
2. 組込みシステム開発に関連する国際規格 - HAZOP を中心に, 小川清
3. MISRA-C/C++およびRTL 設計スタイルガイドの組込み技術者教育への展開, 井川清2010
4. Interface 付録ボードを実際に動かしてみる, 江崎雅康
### 第12 回, 1. 実践HAZOP 実習, 2. 実践形式手法 Event-B, 小川 清,2011
### 第13 回, 想定外をなくす 実践安全分析(HAZOP) 2.0,小川清,2012
### 第15 回*, HAZOP, 小川清,2013
### 第16 回*, 再現試験を実施できるようなソフトウェア試験技術者への道,小川清,2014
カーネルソースの歩き方 TOPEPRS/SSP 編, 高橋和浩
### 第17 回*,カーネルソースの歩き方 RaspberryPi 演習, 高橋和浩,2015
### 第18 回*
1,57577,31 文字抄録 – またの名は短歌（和歌）,
2. 伏見康治「確率論及統計論」輪講，2016
### 参考文献 ポスター「５７５７７、31 文字抄録」の資料に同じ。
Stable-diffusionのキャラプロンプトテンプレート

Stable-Dfussionで画像生成するときにキャラを固めるのがめんどいしとっ散らかるのでそれをまとめる用のテンプレート作りました。
```txt:プロンプトテンプレ.txt
#=========================#
🏆 クオリティブースト 
#=========================#
品質 =,[例：masterpiece, best quality]

#=========================#
🎨 テーマ・質感         
#=========================#
テイスト =,

#=========================#
👧 キャラクター基本情報
#=========================#
人数 =,
年齢 =,

#=========================#
 🎭 顔の構成要素         
#=========================#
髪色 =,
髪型 =,
目の色 =,
顔詳細 =,[例：detailed face, detailed eyes]

#=========================#
🧍‍♀️ 体型・スタイル       
#=========================#
体型 =,
胸 =,[貧乳の場合flat chest推奨]

#=========================#
👗 衣装・アクセサリー     
#=========================#
服ジャンル =,
頭 =,
首元 =,
胴体 =,
袖 =,
スカート =,
脚 =,
靴 =,

#=========================#
 💬 任意：ポーズ・表情など 
#=========================#
雰囲気 =,
視線 =,

#=========================#
🚫 ネガティブプロンプト  
#=========================#
Negative prompt: (worst quality, low quality:1.4), blurry, jpeg artifacts, bad anatomy, missing fingers, bad hands
```

こんな感じで対応する箇所にtagを書き込んでいけばひと目見て、どういうキャラかってわかりやすい。
基本日本語は無視されると思うのでプロンプトの悪影響は少ないと思われる([]内の例文は読まれるかも)

重い腰を上げやすくするためのライフハックって意外と大事だよね。
Firebase + Perspective API でチャットに不適切発言フィルターを実装する方法

## はじめに
Firebase Realtime Detabaseを使ったチャット機能に、Googleの Perspective API を使って「不適切発言」をブロックする機能を Firebase Functions + Nuxt 3 で実装した手順をまとめます。

## 目的
以下のようにユーザーが不適切な発言をしようとしたら送信されないチャットを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4066585/3a79e4f5-ed06-44b7-b1fa-c1195b858622.png)

## 手順
### 1.Perspective APIの有効化
1.https://www.perspectiveapi.com/ にアクセス

2.以下のgoogle formを入力しAPIのアクセスをリクエストする

https://docs.google.com/forms/d/e/1FAIpQLSdhBBnVVVbXSElby-jhNnEj-Zwpt5toQSCFsJerGfpXW66CuQ/viewform

3.Google Cloud Consoleにログインして APIキー発行&Perspective Comment Analyzer APIの有効化

### 2.Firebase Functionsの実装
この関数では、ユーザーのテキストを Perspective API に送り、有害度スコア（TOXICITY）を取得します。

- もしスコアが 0.7 以上であれば「不適切」と判断してブロック

```ts
import { onCall } from "firebase-functions/v2/https";
import { HttpsError } from "firebase-functions/v2/https";

export const checkChatModeration = onCall({ region: "us-central1" }, async (request) => {
  const text: string = request.data?.text;
  const API_KEY = process.env.PERSPECTIVE_API_KEY;

  if (!API_KEY) {
    throw new HttpsError("failed-precondition", "APIキー未設定");
  }

  if (!text || typeof text !== "string") {
    throw new HttpsError("invalid-argument", "テキストが不正");
  }

  const url = `https://commentanalyzer.googleapis.com/v1alpha1/comments:analyze?key=${API_KEY}`;

  try {
    const response = await fetch(url, {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({
        comment: { text },
        languages: ["ja"],// 日本語として評価
        requestedAttributes: { TOXICITY: {} },// 有害性スコアのみ取得
      }),
    });

    if (!response.ok) {
      const errorText = await response.text();
      throw new Error(`APIエラー: ${errorText}`);
    }

    const data = await response.json();
    const score = data.attributeScores.TOXICITY.summaryScore.value;
  // スコアが0.7以上なら不適切と判断してブロック
    if (score >= 0.7) {
      return { ok: false, message: "❗️ 不適切な発言が検出されました。", score };
    }
// 問題なければOKレスポンス
    return { ok: true, message: "OKな内容です。", score };
  } catch (err: any) {
    console.error("Perspective API エラー:", err.message);
    throw new HttpsError("internal", "モデレーションエラー");
  }
});
```
### 3. クライアント（Nuxt）から checkChatModeration を呼び出す
```ts
import { getFunctions, httpsCallable } from "firebase/functions";

// Firebase Functions のインスタンスを取得
const functions = getFunctions(firebaseApp);

// Callable Function を呼び出す
const checkModeration = httpsCallable(functions, "checkChatModeration");

// テキストを渡してチェック
const result = await checkModeration({ text: userInput });
if (!result.data.ok) {
  alert(result.data.message);
  return;
}
```
## まとめ
- Perspective API を使い、不適切発言判定がをすることができる
「(2023)令和5年二級建築士試験学科Ⅲ（建築構造）〔Ｎｏ．５〕」sympyのTrussでやってみた。


・sympyのTrussで作図しました。

**Qiita_建築士**
https://qiita.com/mrrclb48z/items/893cb0967e4ddb2945f7

#### 公式ホームページ
(2023)令和5年二級試験問題〔Ｎｏ．５〕と正答肢
・PDFページ
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2023-1st-gakka3_4-r.pdf#page=4
https://www.jaeic.or.jp/shiken/2k/2k-mondai.files/2k-2023-1st-gakka3_4-r.pdf

# オリジナル
Youtube 建築士試験マニア/はまちゃん 様 　
**建築士試験【構造059】構造力学/モーメント図から外力を求める問題（vol.0202）(0:00〜15:20)**
https://youtu.be/gjDcv6ttFJw

# sympyのweb上での実行方法
・ver0.1は、sympｙのインストールなしで、web上で実行できます。
　開発は後述テンプレートです。
・ver0.2は、Trussモジュールを使っているので、以下のエラーがでます。
　ImportError: To use this function numpy module is required
https://qiita.com/mrrclb48z/items/00dd08b0317069be9342#web%E4%B8%8A%E3%81%AE%E5%AE%9F%E8%A1%8C%E6%96%B9%E6%B3%95sympy-live-shell%E3%81%A7

# sympyで
```python
# ver0.1
from sympy import *
var('x')
print("#",solve(Eq(sqrt(3)*x-2+8-3  ,0  ),x)[0])
print("#",solve(Eq(sqrt(3)/1        ,2/x),x)[0])
print("#",solve(Eq(-sqrt(3)*x-4+12-4,0  ),x)[0])
# -sqrt(3)
# 2*sqrt(3)/3
# 4*sqrt(3)/3
```

# sympyのTrussで
```python
# ver0.2
from sympy.physics.continuum_mechanics.truss import Truss
import math
from sympy import *
P1,P2=1,2  # var('P')
L=2        # var('L')
H=Rational(1,2)*L*sqrt(3)
t = Truss()
t.add_node     (('1',0  ,H),('2',1*L,H)) 
t.add_node     (('3',2*L,H),('4',3*L,H)) 
t.add_node     (('5',4*L,H)) 
t.add_node     (('6',Rational(1,2)*L    ,0),('7',Rational(1,2)*L+1*L,0)) 
t.add_node     (('8',Rational(1,2)*L+2*L,0),('9',Rational(1,2)*L+3*L,0)) 
t.add_member   (('12','1','2'),('A' ,'2','3'),('34','3','4'),('45','4','5'))   
t.add_member   (('16','1','6'),('62','6','2'),('27','2','7'),('B' ,'7','3'))   
t.add_member   (('38','3','8'),('84','8','4'),('49','4','9'),('95','9','5'))   
t.add_member   (('67','6','7'),('C' ,'7','8'),('89','8','9'))   
t.apply_support(('6' ,'pinned'),('9','roller'))
t.apply_load   (('1',P1,270),('2',P2,270),('3',P2,270),('4',P2,270),('5',P1,270))
p = t.draw()
p.show()
t.solve()
# print("#",t.reaction_loads )           
print("#",t.internal_forces['A'],t.internal_forces['B'],t.internal_forces['C'])
# -sqrt(3) -2*sqrt(3)/3 4*sqrt(3)/3
# 解2
```
・縦横比は1:1でありません。
![111.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109698/ee83794b-60e9-489c-a4d5-cdf876f8149f.png)

# いつもの? sympyの実行環境と 参考のおすすめです。
[(テンプレート)](https://qiita.com/mrrclb48z/items/00dd08b0317069be9342)

# いつもと違うおすすめです。

#### Qiita内

https://qiita.com/mrrclb48z/items/53640cff620d13d4b50c
WWDC 2025 究極のサバイバルガイド：「beta」に生産性を破壊させるな

![截屏2025-06-04 23.00.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/5b96cb08-c646-4dcf-95ed-d30bf5a49e33.png)

またこの季節がやってきた。空気中にコーヒーとKeynoteの香りが漂い始める頃。そう、WWDC 2025の開幕だ。

我々macOS/iOS開発者にとって、この一週間は年に一度の最も素晴らしき「悪夢」だ。昼間は、Swiftの新しい文法、Vision Proの新しいフレームワーク、macOSの新機能に胸を躍らせる。そして深夜、我々は永遠の魂の問いに直面するのだ。

「今年のbeta版、インストールするべきか、せざるべきか？」

インストールすれば、誰よりも早く最新のAPIに触れ、コミュニティで一番クールな存在になれるかもしれない。しかしそれは同時に、メインの開発マシンが一瞬で「文鎮」と化す可能性も意味する。生活の糧であるPHPプロジェクトが動かなくなり、クライアントのNode.jsアプリがデータベースに接続できなくなり、果てはHomebrewさえも再設定が必要になるかもしれない。

インストールしない？ならば、他の開発者が新機能をいじくり回し、体験記事をアップするのを指をくわえて見ているしかない。あなたが「Hello World」を動かすことさえできない間に。正式版が出る頃には、もう祭りは終わっている。

毎年、我々はこの「急進」と「保守」の狭間で苦しみもがく。別のパーティションにインストール？予備のMacを使う？どちらもあまりに不格好だ。

今年の私の答えはこうだ：「両方、手に入れる」。そしてその秘訣は「隔離」にある。

WWDCの「混沌」に身を投じる前に、私が最初に行うこと。それは、既存の本番環境を完全に「手なずける」ことだ。beta版OSのいかなる影響も、私が維持し、収入を得ているWebプロジェクトに及ぼすわけにはいかない。

私の解決策は、すべてのローカルWeb開発環境をServbayに移行することだった。

![日语.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/f0f13eb7-7512-4dab-90fe-687d28809bf3.png)

この一手の意味は革命的だ。私のすべてのPHP、Python、Node.jsプロジェクトは、それらのMySQL、PostgreSQLデータベースやRedisキャッシュと共に、統一され、隔離された「コックピット」に収まったのだ 。もはや、それらがシステムレベルでどう動いているかを気にする必要はない。

クライアントの古いプロジェクトのためにPHP 7.4環境を起動する必要がある？Servbayのパネルでワンクリックだ。
最新のNode.jsとPostgreSQLを使う自分の新プロジェクトに切り替える？またワンクリック。
今日はもうWeb開発は終わり？全サービスをワンクリックで停止すれば、私のMacは瞬時に最もクリーンな状態に戻り、ファンは静寂を保つ 。
既存の「生産性」のすべてをServbayという名の「ノアの箱舟」に無事に乗せた後、私のメインシステムは心ゆくまでいじれる「実験場」と化した。

これで、私は何の心理的負担もなく、別のパーティションにmacOS betaをインストールできる。なぜなら、新しいシステムがどれほど不安定であろうと、私の「飯の種」である重要なWebプロジェクトたちは、安定したシステムパーティションの中で、Servbayの中で静かに守られていることを知っているからだ。仕事が必要な時は、安定版OSに再起動し、Servbayを立ち上げれば、すべてが何事もなかったかのように秩序正しくそこにある。

これこそがWWDCの正しい楽しみ方だ。探求への情熱と仕事の安定性が、もはや二者択一の問題ではなくなる。

だから、戦友諸君への究極のアドバイスはこうだ。Keynoteが始まる前に、少し時間を取って君の「武器庫」を整理しよう。発表後、環境を壊すことを恐れて及び腰になるより、今すぐServbayのようなツールを使って、君の本番環境に安定的で信頼できる「家」を与えてやるんだ。

![img-09y9C2wY4cA16tq8EqFd6b5u.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/9069bb0e-3c76-4606-98d3-023362c28739.png)


ティム・クックがかの有名な「One more thing...」を口にするとき、君は笑みを浮かべ、すぐに新しいXcodeをダウンロードし、新たな旅を始めることができる。

準備はいいか？我々の開発環境を、WWDC 2025より一足先に、次の時代へと進めよう。
TypeScript初心者がTsKaigiに参加してきた話

## はじめに
この記事はTsKaigi2025の参加記事になります！
TsKaigiはTypeScriptの国内最大級のカンファレンスで、今年は2025年5月23日, 24日の二日間にかけて行われ、両日参加してきました！

![IMG_8791.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654825/d657eba7-4f92-4774-9fc3-c0ded53fa561.jpeg)

## 参加した理由
私はバックエンドエンジニアで普段はGoで書いています。フロントではよくTypeScriptで書かれていますが、サーバー側でもTypeScriptを使用するフルスタックTypeScriptに興味があり参加してみようと思いました！

## セッションの感想
特に印象深かったセッションをいくつか紹介します！

#### ・TypeScriptで実践するクリーンアーキテクチャ ― WebからもCLIからも使えるアプリ設計
このセッションではどのようにしてTypeScriptでクリーンアーキテクチャを実現するかを実装とともに説明してくださっていました。コードを見た感想ですがほとんどGoと同じような書き方ができ、言語による難しさなどは感じませんでした。むしろDIについてはTypeScriptやJavaではimplementsで明示的に実装する必要があるため可読性は高いのではないかと思います。セッションの後にDIまわりについて調べたところGoでは直接依存性を注入するのが主流ですが、TypeScriptではコードの肥大化を防ぐためにDIコンテナを使うことがよくあるそうです。特にサーバーを書く上で問題ないことがわかりました。クリーンアーキテクチャで基本的なサーバーの実装の仕方がわかりました。

#### ・転生したら​TypeScriptの​Enumだった​件
TypeScriptのEnumの歴史と直面している課題を「なろう系」のストーリーに沿って説明していました。普段使ってるGoにはEnumがなく、その点においてTypeScriptではサポートされており、現場でどのように使われているか興味がありましたが、Union型やas constがEnumの役割を奪いつつある現状を知ることができました。Goでは標準サポートしていないため、TypeScriptでいうas Constのようにconstとitoaを使ってEnumを実現している点は似ていると思いました。

## 
また、一日目は「#はじめてのLT - TypeScript好き若手エンジニアのためのゆる懇親ナイト」に参加してきました！美味しいお寿司とピザを食べながらエンジニアの方々といろいろお話しできました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654825/674bbb47-d7f8-4a01-b341-0da3865db3f1.png)



## 最後に
今回学生支援制度を使用して参加させていただきました！
以下の企業様が支援してくださいました！ありがとうございました！
さらにパワーアップして来年のTsKaigiに参加しようと思います

> 【TSKaigi 2025 学生支援企業】
> 株式会社TOKIUM・株式会社ドワンゴ・トグルホールディングス株式会社・レバレージズ株式会社・株式会社TwoGate
【iOS】FirebaseのAnalyticsで計測できない

先日iOSのアプリをリリースしました。
リリース後に、Firebase Analyticsの計測は1ミリも確認できない状況でした。

以下の様に公式の手順通り従っているのに…
<img width="600" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128814/aea0a888-ffb3-4b76-bcd9-26a4f01070c0.png">
## FirebaseのAnalyticsで計測できない場合の解消法

TARGETSの**Buid Settings** に **Other Linker Flags** と検索して、**-ObjC** を設定することで解消できました。
![スクリーンショット 2025-06-07 19.42.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128814/fba695ed-8f95-4e4c-8f49-5f5fd273026f.png)

## リリースしたアプリ
https://apps.apple.com/jp/app/liveactivitytimer/id6746558009
Claude Codeの`API Error（Request timed out.）`をIPv6無効化で解決する方法

### はじめに

2025年6月5日より、話題のClaude Codeが従来のMaxプラン（100USD / 月）ではなく、Proプラン（20USD / 月）でも利用可能になりました。手軽にClaude Codeを試してみたいと考える方も多いでしょう。

しかし、CLIを利用してAPI呼び出しを行った際、以下のようなタイムアウトエラーが頻繁に発生して困っている人もいるのではないでしょうか。

```
API Error (Request timed out.) · Retrying in 1 seconds… (attempt 1/10)
…
API Error: Request timed out.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/355048/94e96cdb-b824-4a2d-9b2f-7b41953e0e7a.png)


この記事では、私が実際に遭遇し解決した方法を共有します。

### 環境情報

- WSL（Windows Subsystem for Linux）
    
- Ubuntu 22.04
    

### エラー発生の原因

このエラーの原因は、APIへの接続時にIPv6アドレス（AAAAレコード）への接続を優先しようとするものの、実際にはIPv6が利用できず、TCPの接続試行がタイムアウトになるためです。その結果、API呼び出しのデフォルトタイムアウト（約30秒）を超過してしまい、リトライが繰り返されることになります。

### 解決方法：IPv6を無効化

Ubuntu環境でIPv6を完全に無効化することで、エラーを解消できます。

以下の設定を行います。

1. `/etc/sysctl.conf`の末尾に以下を追記
    

```bash
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.lo.disable_ipv6=1
```

2. 設定を反映
    

```bash
sudo sysctl -p
```

3. IPv6無効化の確認
    

```bash
ip a
```

出力に「inet6」が表示されていなければIPv6は無効化されています。

### なぜIPv6無効化が有効か

以下の表でIPv6有効・無効時の接続フローを比較します。

| ステップ  | IPv6有効                   | IPv6無効       |
| ----- | ------------------------ | ------------ |
| DNS解決 | IPv4+IPv6 (A+AAAA)       | IPv4 (Aのみ)   |
| 接続試行  | IPv6→タイムアウト→IPv4へフォールバック | 最初からIPv4で即接続 |
| 遅延時間  | 数十秒（1リクエストあたり）           | ほぼゼロ         |
| CLI挙動 | リクエストタイムアウトでエラー          | 正常応答         |

IPv6を無効化することで、最初のIPv6接続試行そのものがスキップされ、即座にIPv4接続が確立します。そのため、タイムアウトが劇的に減少します。

### 注意点

- 社内ネットワーク環境や将来的なIPv6導入計画がある場合は、この設定変更の影響を考慮してください。
    
- IPv6が必要な環境では別途ネットワーク設定が必要になる場合があります。
    

### まとめ（TL;DR）

Claude Codeの`API Error（Request timed out.）`エラーは、IPv6を無効化してIPv4接続に一本化することで簡単かつ効果的に解消できます。
【Go】sqlcでPostgreSQLのjsonb列にmap型を使用したい

## 概要
sqlcはsql文からGoの型を生成できるツールです。テーブルにjsonb列がある場合にsqlcのデフォルトの動作ではsqcのドキュメント[JSON](https://docs.sqlc.dev/en/stable/reference/datatypes.html#json)にある通り、`[]byte`型で出力されます。なお、ドキュメントにも記載ありますが、設定を追加することで独自の型等で出力することができます。
今回は[Using custom struct for JSONB Type in SQLC](https://medium.com/gravel-engineering/using-custom-struct-for-jsonb-type-in-sqlc-f0350d4df967)を参考に、map型でany（interface）を持たせる型で実装してみたのでメモ書きです。

## 前提
* 使用したsqlcのバージョンは`1.29.0`です。
* 使用したGoのバージョンは`1.23.5`です。

## 実装サンプル
まずは`sqlc.yaml`の設定です。jsonbの列を対象に、型の出力でmap型の定義を設定した独自の型を設定しています。

```yaml:sqlc.yaml
overrides:
  - column: "task_definition.dead_line_check_setting"
    go_type:
      import: sample-api/db/type
      package: "db_type"
      type: "Jsonb"
```

型の定義はmap型でanyを持たせます。

```go:db_type.go
type Jsonb map[string]any
```

出力結果は以下の通りとなります。この型の該当列（DeadLineCheckSetting）に値を入れればjsonbで登録されます。

```go:models.go
type TaskDefinition struct {
	ID                      string
	Title                   string
	DeadLineCheckSetting    db_type.Jsonb
	Detail                  *string
}
```
学習3日目

# 今日やったこと
html全体の再読み込みではなく、一部のみ書き換える方法(hotwireを利用)

# 内容
上記を実装したいコントローラ(以下コントローラ)のアクションに下記を記述。
```
respond_to do |format|
  format.html { (実行したい処理) }
  format.turbo_stream
end
```
リクエストがhtmlかturbo_streamかで条件分岐するイメージだと理解しました。

また、アクション名に対応するよう、「<アクション名>.turbo_stream.erb」というファイルも合わせて作成し、下記のような内容を記述。

```
<%= turbo_stream.update "CSSのid" do %>
  (書き換える内容)
<% end %>
```
使っている教材では、
・フォローした時は「フォロー」ボタンを「フォロー解除」ボタンに変更し、フォロー数を更新する。
・フォローを外した時は「フォロー解除」ボタンを「フォロー」ボタンに変更し、フォロー数を更新する。
という処理を実現していました。

htmlファイルの記述が多くなればなるほど、メリットを実感できそうです。

# 感想
真っ先にJavaScriptが思い浮かんだのですが、このような方法もあるとは...。
Railsは奥深いですね。
AIの波の中で、私はもはや「コーダー」ではない

![截屏2025-06-07 17.09.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/5bbeeada-9c24-4c60-b2f0-bfb4afb960b0.png)

一年前、私の仕事時間の大半は、エディタ、コンパイラ、デバッгаとの格闘に費やされていました。「この関数をどう実装すれば最も効率的か」「このクラスライブラリのAPIはどう設計すべきか」といったことを考えていました。私はコードの建築家である「コーダー」でした。

今、状況は一変しました。

AIプログラミングアシスタントが私の日常に溶け込んでいます。APIの使い方を調べるのに膨大な時間を費やしたり、ボイラープレートをゼロから書いたりすることはなくなりました。AIは私に下書きを生成し、複数の実装アプローチを提示し、自分でも気づかなかった潜在的なバグを発見することさえあります。

私の役割は、「建築家」から、徐々に「建築デザイナー」＋「品質検査官」へと変わりつつあります。

日々の仕事の重心は、もはや「どう実装するか」ではなく、「どの実装方法がより良いか？」「AIが提示した解決策はエッジケースを考慮しているか？」「このリファクタリング後のコードは、性能と可読性が本当に向上したか？」といった問いにあります。

これは新たなボトルネックを生み出しました。アイデアが生まれる速度が、そのアイデアを検証する速度をはるかに上回ってしまったのです。

私のgit commitの履歴は、かつての長々とした「feat: add user login feature」から、今では「test: try new sorting algorithm」、「refactor: POC with async/await」、「revert: previous attempt」といった高頻度の記録に変わりました。

「アイデア」から「検証可能な結果」までのサイクルタイムを短縮することが、私自身の効率を測る新しい基準となりました。

この目的を達成するために、私はローカルの開発ワークフローにいくつかの調整を加えました。中心的な考え方は、環境構築の摩擦を最小限、理想的にはゼロにすることです。突飛なアイデアや新しいコードブランチごとに、クリーンで隔離された「サンドボックス」を瞬時に作り出す必要があります。

私のmacOSでは、このワークフローは現在かなりスムーズに機能しています。私はServbayを使って、ローカルのPHP、Python、Node.jsといった様々なバージョンのサービスを一元管理しています。これにより、グローバル設定に触れることなく、数分で新しいブランチ用の特定の環境を立ち上げることができます。統合されているデータベースやOllamaも、私のローカルマシンを非常に効果的なAIモデルの実験場にしてくれています。ローカル環境以外にも、私のCI/CDパイプラインも、コミット後すぐにフィードバックが得られるよう、より高速なビルドとテストスクリプトで構成されています。

![日语.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/fd723101-f720-47cf-8d81-4626de31618d.png)

これら全ての最適化の目的は、「検証」という行為を極めて安価にすることです。そうして初めて、AIが提供する様々な奇想天外な提案を恐れることなく試し、ブレークスルーにつながるかもしれないインスピレーションを一つも見逃さずにいられるのです。

![img-dQJYjbcs9g6RHRT1b0XcT2vM.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4107514/bd05e696-3b9b-4e1e-aa60-43ad15359932.png)


これが、今後数年間で、平均的な開発者と高効率な開発者を分ける鍵になるのかもしれないと考えています。AIが私たちの「コードを書く」能力を徐々に平準化したとき、真に差をつけるのは、私たちが「コードを検証し、イテレーションする」効率性になるでしょう。

未来の私たちは、もはや「コーダー」ではなく、「アイデアとコードの指揮者」なのかもしれません。そして私たちの価値は、その指揮、検証、そして意思決定の速さと質に現れるのです。

あなたも同じように感じますか？あなたのワークフローには、どんな変化がありましたか？
【Project Euler】#003

https://qiita.com/umekikazuya/items/7062d91ddb8db112ef84

2問目です。今日は素因数分解！

## 問題
> 13195の素因数は5、7、13、29である。
> 600851475143の最大の素因数は何か。

うーん、普通にむずい。


## わたしの回答
```go
func main() {
	result := []int{}
	for _, num := range getFactor(600851475143) {
		if isPrimeNumber(num) {
			result = append(result, num)
		}
	}
	fmt.Println(result)
}

// 約数の取得
func getFactor(num int) []int {
	result := []int{}
	x := 2
	for x*x <= num {
		if num%x == 0 {
			result = append(result, x)
			if x*x != num {
				result = append(result, num/x)
			}
		}
		x++
	}
	return result
}

// 素数判定
func isPrimeNumber(num int) bool {
	x := 2
	for x*x <= num {
		if num%x == 0 {
			return false
		}
		x++
	}
	return true
}
```
うーん、ループのネストが気になる...。
でも時間かけてもなぁって思ったし、頭回らなかったのでこの辺にしときました。
（言い訳）

記事書きながら振り返ってるんですが、約数を全列挙し、後から素数判定をしているので、無駄多いですよねー...。
（いわゆる毎回`O(√n)`かかる形ですね...。）

約数と素数のロジックをわけちゃったけど、素因数分解のロジックをがんばって考えたほうがよかったんだろうなぁ、と思いました。

## GPT-4oの回答
```go
func main() {
    num := int64(600851475143)
    var maxPrime int64 = 0
    var i int64 = 2

    for i*i <= num {
        if num%i == 0 {
            maxPrime = i
            num /= i
        } else {
            i++
        }
    }
    if num > maxPrime {
        maxPrime = num
    }
    fmt.Println(maxPrime)
}
```
なるほど。素数判定をしながら、因数かどうかを同時に判定する形か。

うーん、無慈悲ですね。
## 感想
実は同僚数人とやってるんですが...。

同僚「約数の取得には、対象の数までループを回さなくていいよ。対象数値の平方根までの計算で完結できるよ。」

ってところの理解がなかなか腹落ちできず...。なんとか理解できました...。

Project Eulerやってると日々自信がなくなってきます。
AWS EC2 に無料のドメインを設定してみた

## はじめに
前回の記事では、AWS EC2インスタンスにElastic IPを割り当てて、IPアドレスを固定する方法を紹介しました。
今回はその続きとして、固定 IP に対して「ドメイン名」でアクセスできるようにする方法を解説します。

なお、今回は学習目的のため、 `.com` や `.net` などのトップレベルドメイン（TLD）を購入するのではなく、無料で利用できるサブドメイン（SD）サービスを使って、コストをかけずに設定していきます。

https://qiita.com/ymtdir/items/399b2e881cf2cb717f33

## 概要

本記事では、Elastic IP を割り当てた EC2 インスタンスに、無料のサブドメインを使ってドメイン名でアクセスできるようにする方法を解説します。

具体的な手順は以下の通りです

- 無料のサブドメインサービス（DuckDNS）に登録する
- 任意のサブドメインを取得する
- Elastic IP をそのドメインに紐付ける
- ドメイン名で EC2 にアクセスできることを確認する

これにより、IPアドレスではなく`xxx.duckdns.org`のようなドメイン名でアプリやサイトへアクセス可能になります。

> 本記事で紹介する方法は、開発環境や検証環境向けの構成です。
> 本番運用にはトップレベルドメインを購入して利用することを推奨します。
> 無料のサブドメインは信頼性やブランド、証明書対応などの面で制限があるため、商用利用には適しません。

## 無料でサブドメインを取得する

### 1.DuckDNSにアクセスしてログイン
https://www.duckdns.org/domains
→ GoogleアカウントやGitHubアカウントでログインする

### 2. `>>> reCaptcha <<<`をクリックして認証を完了する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050675/d56cdca8-2e8b-40cb-bd73-26c4492d317c.png)
→ 認証が完了すると、DuckDNSのドメイン管理画面に進む

### 3. 希望するサブドメイン名を入力し、`add domain`をクリック
![スクリーンショット 2025-06-07 165846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050675/136222e5-f420-49a9-a0bf-f46dcf3e3122.png)
- 今回は、`ymtdir`というサブドメイン名を使用
- 画像のようにサブドメイン名が表示されていれば取得完了

## Elastic IP との関連付け
### 1. `current ip` に Elastic IP を設定する
「current ip」欄に、EC2 に割り当てている Elastic IP（例：18.178.201.136）を入力。

### 2. `update ip` をクリックしてIPアドレスを更新
入力後、右側にある `update ip` ボタンをクリック。
更新が成功すると、`current ip` の欄が新しい IP アドレスに置き換わります。
![スクリーンショット 2025-06-07 171729.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050675/c69bee53-7542-4654-ac4d-8644449d9e56.png)

## ドメイン名でアクセスする
### 1. インスタンスを起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050675/edbe3f52-6c74-4451-82f6-3191cb353a0e.png)

### 2.SSH接続し、Flaskアプリを起動
```bash
sudo ~/flask_app/venv/bin/python ~/flask_app/main.py
```
> Flaskアプリの詳細な構築・起動方法については、以下の記事をご参照ください。
> https://qiita.com/ymtdir/items/aa172f718793e414b26f

### 3. ブラウザにドメイン名を入力し、表示を確認する
例: `http://ymtdir.duckdns.org`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050675/5161cf4f-1ca6-4ab5-9981-f056f742c931.png)
上記のように、Elastic IP に割り当てたドメイン名でアクセスできることを確認できました！
PowerQueryでテーブルと副問い合わせ表をLIKEやBETWEENでJOINするには？その2

下記「PowerQueryでテーブルと副問い合わせ表をLIKEやBETWEENでJOINするには？」で随分と回りくどいやり方をしていたのに気が付いたので、こちらで修正版を投稿します。

https://qiita.com/madilloar/items/015e75de35e0a7535ba0

# 修正版:PowerQueryでテーブルと副問い合わせ表をLIKEやBETWEENでJOINするには？

``Table.AddColumn(MainTable, "Sub", each ``の後に関数を書けることがわかりました。

下記コードのように、ここにSQLのSELECT文で言うところのJOIN ON句を書き(``matches``の行)、
ORDER BY句を書き(``sortedMatches``)、
WHERE句でT_分析用ラベル付与のレコードが複数ヒットしている場合は先頭行を抽出するような関数を書いています(``result``の行)。

```java

let
    MainTable     = Excel.CurrentWorkbook(){[Name="T_注文"]}[Content],
    SubTable      = Excel.CurrentWorkbook(){[Name="T_分析用ラベル付与"]}[Content],

    Joined   = Table.AddColumn(MainTable, "Sub", each 
        let 
            // 各注文 (MainTable の行) に対して、 SubTable の中から 条件に合うラベル を探す
            matches = Table.SelectRows(SubTable, (subRow) =>
                FuzzyCompare([顧客名], subRow[顧客名]) and
                FuzzyCompare([商品名], subRow[商品名]) and
                Between([サイズ], subRow[サイズFROM], subRow[サイズTO])
            ),

            // 優先順位 の昇順 でソート
            sortedMatches = Table.Sort(matches, {"優先順位", Order.Ascending}),
            
            // 最も優先順位の高いラベルを取得 (Table.First)
            result = if Table.RowCount(sortedMatches) > 0 then 
                        Table.First(sortedMatches)
                    else 
                        null
        in 
            result
    ),

    ExpandedFields = Table.ExpandRecordColumn(Joined, "Sub", {"分析用ラベル","優先順位"}),
    result = Table.SelectColumns(ExpandedFields, {"注文ID", "顧客名", "商品名", "サイズ", "本数", "分析用ラベル"})
in
    result

```
【react-datepicker】のデータを【react-hooks-form】に渡したい

# はじめに
タスク管理を目的としたアプリを開発しています。
タスクの日付は `react-datepicker` を使い、フォームは `react-hook-form` を使っています。
# registerが使えない
onSubmit(data)の中に `react-datepicker` のデータを入れるため、いつものように **registerを設定しましたが、うまくいきません** でした。
調べたところ、カスタム UI コンポーネントでは register はうまく機能しないことがあるようです。

# 解決策
### setValueを使うことで解決
react-hook-form では、**register が使えないコンポーネントに対して `setValue` を使って値を明示的に渡す** ことが推奨されています。
以下のように、日付変更のハンドラ内で setValue を使いました。
```diff_typescript
const {
  register,
  handleSubmit,
+  setValue,
  formState: { errors },
} = useForm<TaskFormInput>();

const handleStartChange = (date: Date | null) => {
  setStartDate(date);
+ setValue("start", date);
};

const handleEndChange = (date: Date | null) => {
  setEndDate(date);
+ setValue("end", date);
};

const onSubmit = (data: TaskFormInput) => {
const task: Task = {
  start: data.start || new Date(),
  end: data.end || new Date(),
};

return(
<form onSubmit={handleSubmit(onSubmit)}>
  <div>
    <span>開始日：</span>
    <Calendar
      date={startDate}
      onChange={handleStartChange}
    />
  </div>
  <div>
    <span>終了日：</span>
    <Calendar
      date={endDate}
      onChange={handleStartChange}
    />
  </div>
</form>
)
```

# おわりに
registerが使えない場面でも setValue を使うことで解決しました。

# JISOUのメンバー募集中！
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか？
興味のある方は、ぜひホームページをのぞいてみてくださ！
▼▼▼

https://projisou.jp
【プラクティス紹介】1分でさらっと分かる「デリゲーションポーカー」

![delegation.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3526800/eab7cdc4-421a-45a5-947e-599fc28a3538.jpeg)

## プラクティス名（別名）
デリゲーションポーカー　（デリゲーションボード、7 Levels of Authority）

## プラクティスの目的・狙い
* 権限移譲のレベルについて認識合わせする
* お互いの役割分担や責任範囲を明確にする

## どんな時に使うか
* 権限移譲された方が実際にどこまで自分で決めてしまってよいのか判断に迷う時
* 上位職者と下位職者の間に発生している期待値のズレを解消したい時

## 実施手順
デリゲーションポーカーはマネジメント3.0に登場するプラクティスの１つで、権限移譲する方/される方の認識合わせを行うためのツールです。専用カードもありますが、1～7と書かれたカードセットが人数分あれば代用可能です。
一口に権限移譲といっても、「指示通りにやってね」から「全て任せた」まで段階があり、実行アクションによっても変わるかもしれません。デリゲーションポーカーでは移譲レベルを7段階に分け、実行アクション毎にお互いの認識を一つ一つ確認していきます。

| Lv | スタイル | 説明 |　ボスのセリフ　| 
|:-:|:-:|:--|:--|
| 1  | 命令する  | ボスが決めて、メンバーに指示する  | こうしろ！|
| 2  | 説得する  | ボスが決めて、メンバーに売り込む  | こうしたい |
| 3  | 相談する  | ボスが提案し、メンバーに相談する  | これでどう？|
| 4  | 同意する  | ボスとメンバーが合意して決める  　| どうする？|
| 5  | 助言する  | メンバーが提案し、ボスが助言する  | こうしたら？|
| 6  | 尋ねる  　| メンバーが決めた後で、ボスが尋ねる  | ここは大丈夫？|
| 7  | 委任する  | 完全にメンバーが決める  | 全て任せた！|

:::note info
Lv1～3はボス側に、Lv5～7はメンバー側に最終決定権があります。
Lv4は中立で双方に決定権があります。
:::

1. デリゲーションポーカーに参加する人数分、1～7と書かれたカードを用意する
1. 検討テーマ（実行アクション/判断領域など）を１つ挙げる
1. それぞれが思う移譲レベル（1～7）のカードを裏返しにして場に出す
1. 全員のカードが出揃ったら、カードをオープンにする
1. 数字にズレがあれば、話し合って最終的な結論（1～7）を決める
1. 次のテーマを挙げ、同じように認識合わせを行う（以降、手順2～5を繰り返す）
1. 最終結論は表などにまとめ、いつでも参照できる場所に掲示する

## アレンジ例
* オンライン会議で実施する場合、5カウントで一斉に1～7の数字をチャットに投稿する
* オンラインボード上で実施する場合、1～7のエリアを用意しておき、5カウントで一斉に自アイコンを移動させる
* 5分話し合っても結論が出ない時は再度ポーカーを行い、最も人数が多い数字を結論とする
* 職務範囲が被る２つのロール（とくに上下関係は無い）で役割分担を明確にするためデリゲーションポーカーを行う

## アンチパターン
* 思いつく限りの実行アクションを挙げ、網羅的に明確化しようとする（＝キリが無い）

## 参考情報

マネジメント3.0の提唱者（Jurgen Appelo氏）のスライド資料

https://www.slideshare.net/slideshow/agile-management-authority-delegation/6518792#31

日本語版のカードを自作された広木さんの記事（めっちゃ分かりやすいです！）

https://qiita.com/hirokidaichi/items/257cd3370f77f2a44737

miroでデリゲーションポーカーする際のテンプレート

https://miro.com/miroverse/delegation-poker/

## こぼれ話（私的コメント）
スクラムの原則から言えば、チーム内でロールを固めすぎると、自分の役割以上のことをしなくなる危険性があるため、かえって望ましくありません。スクラムメンバーとしては定義された役割にこだわらずにお互いをサポートできる関係が理想です。
とはいえ、現実的にはある程度、役割分担がはっきりしていた方がお互いに動きやすいというケースもあるでしょう。またこのワークを行うことで、そもそもお互いの期待値ズレにも気づけるので、知らず知らずのうちにストレスを溜め込んでしまっていた、という事態を回避することもできます。
もちろん役割を定義すれば万事解決というわけでもないのですが、少なくともお互いの認識を擦り合わせる術を学ぶことには意義があると思います。

---
　[アジャイルプラクティス一覧へ戻る](https://qiita.com/kakashi_h5/items/20584998c5ca4594b9ea)
自分用linuxコマンド学習

# viコマンド
テキストエディタを起動し、ファイルやソースコードを編集する

i... インサート
esc...インサート解除
:wq... 保存＆終了
:q!... 強制終了
:%d...全選択
:set nonu...行番号を消す

# ~(チルダ)
ユーザーのホームディレクトリを表す
satokoでログインしていて、
```terminal:bash
vi ~/.ssh/config
```
 をしたら、実質
```terminal:bash
/home/satoko/.ssh/config
```
を入れたのと同義
★ホームディレクトリが長い時に省けるというメリット

# touchコマンド
存在しないファイルを新規作成

# ls -l コマンド
詳細な情報が並んだ形式で詳細を表示する
・ファイルの権限
・ファイルの所有者
・最終更新

# chmodコマンド
パーミッションを設定する時のコマンド
```terminal
$ chmod パーミッション　ファイル名
```

```terminal
r  w  x 
読 書 実
※先頭にdが付く場合それはディレクトリであることを示す

u 所有者(ルート)
g グループ
o その他のユーザー
```

# パーミッションの数字
```terminal
0  000  ---
1  001  --x
2  010  -w-
3  011  -wx
4  100  r--
5  101  r-x
6  110  rw-
7  111  rwx
```

# scpコマンド
リモートマシンとローカルマシン、或いはリモートマシン同士でファイルをコピーする
```terminal:bash
$ scp ファイル名 送り先：ディレクトリ
```
sshを使用して安全にやり取りするという特徴がある
※コピーというよりは「転送」に近い？？

# cpコマンド
ファイルをコピーする
```terminal:bash
$ cp ファイル名 ディレクトリ
```
cpは「コピー元とコピー先が同じローカルシステム上に存在する」ことが条件
scpとは似てるけど若干違う
また、scpはSSHを使用するため安全度が高い分負荷がかかる。
cpはファイルやディレクトリを他のディレクトリに移動するときに使う

# catコマンド
1. ファイルの中身の閲覧
2. ファイルの結合(連結)
```terminal:bash
$ cat ファイル名

※カーネルのバージョンを見る時
$ cat/proc/version
```

# catコマンドとviewコマンドの違い
##### catコマンド
・主にテキストファイルの表示/結合
・シンプルな表示

##### viewコマンド
・多機能なファイル閲覧
・検索、行番号、その他機能を搭載

# psコマンド
OS内部で実行されているプロセス一覧を表示
PDI(プロセスのID)
CPU使用時間
コマンド名
端末番号
ユーザー名
etc
```terminal:bash
$ ps [オプション]
```

# grepコマンド
ファイルから特定の文字列が存在するか調査する
調査した文字列が存在すると対象が表示され、存在しないと何も出力されない
```terminal:bash
$ grep [オプション] 探したい文字列 ファイル名
```
# | (パイプ)
& みたいな役割。| の左を右へ橋渡しする
上記のgrepとの組み合わせがよくある
```terminal:bash
$ ps aux | grep [探したい文字列]

↑psでプロセス一覧(実行中)を表示し、
その中から調べたいプロセス名をgrepで表示する感じ

↓体感自分がよく使うやつ

ll | grep [探したい文字列]
```
grepは絞り込み機能的な感じで超便利に使えるから、| と合わせて有効活用していく

# rmコマンド
ディレクトリの削除をしたいとき用にメモ
```terminal:bash
$ rm -r ディレクトリ名
```
-r がないとディレクトリは消せない。
-r には「再帰的」という意味がある。ディレクトリの内部も全部消したいから、必然的にこいつが必要になる


# おわりに
気が向けば、新たに発見したコマンドをここに追記していこうと思います。