OmniAICreator/Qiita-1.07M huggingface dataset:
ファイルアップロード機能：Rails Active Storageとの比較

### はじめに
LaravelはPHPのフレームワークであり、Railsと同じように「開発者の生産性」を重視した設計がされています。本記事では、Laravelのファイルアップロード機能をRailsのActive Storageと比較しながら解説します。

### 1. Rails Active Storageの概要
RailsのActive Storageは、ファイルアップロードを簡単に扱えるフレームワーク機能です。
以下の特徴があります。

**ローカルやクラウドストレージ（Amazon S3, Google Cloud Storageなど）への保存を簡単に設定可能**

**モデルとの関連付けが容易**

**画像の変換やリサイズなどの操作もサポート**

### Railsでのセットアップ手順
Active Storageのインストール

```bash
rails active_storage:install
rails db:migrate
```

モデルへの関連付け

```ruby
class Post < ApplicationRecord
  has_one_attached :image
end
```

フォームの作成

```ruby:form.erb
<%= form_with(model: @post, local: true) do |form| %>
  <%= form.file_field :image %>
  <%= form.submit "Upload" %>
<% end %>
```

アップロードしたファイルの表示

```ruby:index.erb
<% if @post.image.attached? %>
  <%= image_tag @post.image %>
<% end %>
```

### 2. Laravelのファイルアップロード機能
Laravelでは、Storageクラスと組み合わせて
ファイルアップロードを簡単に実現できます。

以下の特徴があります。

**ファイル操作に便利なAPIを提供**

**複数のストレージ（ローカル、クラウドなど）を一元管理**

**アップロード時のバリデーションが強力**

### Laravelでのセットアップ手順

フォームの作成

```html
<form action="/upload" method="POST" enctype="multipart/form-data">
    @csrf
    <input type="file" name="image">
    <button type="submit">Upload</button>
</form>
```

コントローラでの処理

```php
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;

class UploadController extends Controller
{
    public function store(Request $request)
    {
        $request->validate([
            'image' => 'required|file|image|max:1024', // バリデーション
        ]);

        $path = $request->file('image')->store('images', 'public'); // アップロード

        return response()->json(['path' => $path]);
    }
}
```

アップロードしたファイルの表示

```html
<img src="{{ asset('storage/' . $path) }}" alt="Uploaded Image">
```

### 3. Rails Active StorageとLaravelの比較

| 項目           | Rails Active Storage                             | Laravelファイルアップロード                               |
|---------------------|--------------------------------------|--------------------------------------|
| ストレージ対応            | ローカル・クラウド（デフォルトでS3サポート）                                | ローカル・クラウド（S3、FTP、SFTPなど）                                |
| セットアップの簡易性    | コマンド実行後すぐに使用可能            | 少し手動設定が必要                          |
| バリデーション        | `activestorage-validator`等のgemを使用して実現                     | デフォルトで強力なバリデーションを提供                       |
| ファイル操作API   | 画像変換・リサイズ用のヘルパーが豊富                | 汎用的なファイル操作APIを標準で提供                  |

### 4. まとめ
RailsのActive StorageとLaravelのファイルアップロード機能は、どちらも開発者に優しい設計がされています。それぞれの特徴を理解し、プロジェクトに最適な選択をしましょう。

Rails学習者がLaravelを学ぶことで、異なるフレームワークの設計思想を理解し、より柔軟な思考が養われるはずです。興味を持った方は、公式ドキュメントを参照して、ぜひ試してみてください！

[Rails Active Storage - 公式ドキュメント](https://railsguides.jp/active_storage_overview.html)
[Laravel File Storage - 公式ドキュメント](https://laravel.com/docs/10.x/filesystem)
テストの種類と意義

## はじめに
プロダクト開発において「テスト」は、品質を保証するために欠かせない重要なプロセスです。しかし、テストにはさまざまな種類があり、それぞれの役割や意義を正しく理解することが重要です。本記事では、テストの種類とその意義について解説します。

## テストの種類
テストにはいくつかの種類があり、目的や対象によって使い分けられます。以下、それぞれの特徴を見ていきましょう。

### 単体テスト（Unit Test）
コードの最小単位（関数やメソッドなど）を個別に検証するテスト。

#### 目的
- 実装したコードが期待通りに動作することを確認する
- バグを早期に発見し、修正コストを抑える

#### 例
入力値を2倍にする関数 multiplyByTwo(x) の出力が正しいかどうかを確認する

```ruby:ruby
def multiply_by_two(x)
  x * 2
end

# テストケース
describe 'multiply_by_two' do
  it 'doubles the input value' do
    expect(multiply_by_two(2)).to eq(4)
    expect(multiply_by_two(0)).to eq(0)
  end
end

```

### 結合テスト（Integration Test）
複数のモジュールやコンポーネントが**連携して**正しく動作するかを検証するテスト。

#### 目的
- モジュール間の依存関係やデータのやり取りを確認
#### 例
フロントエンドとバックエンドの通信が正しいか。


### システムテスト（System Test）
システム全体が仕様通りに動作するかを検証するテスト。

#### 目的
- ユーザー視点での動作確認。
- リアルな使用状況を模して、全体の安定性を評価。
#### 例
「ユーザーがログインフォームで正しいIDとパスワードを入力すると、ダッシュボードにリダイレクトされるか」を実際にプロダクトを操作して検証

### 受け入れテスト（Acceptance Test）
顧客や関係者が、プロダクトが要件を満たしているか確認するテスト。

#### 目的
- プロダクトの完成度を顧客視点で評価。
- プロジェクトの最終段階で行われることが多い。

### その他のテスト
- 回帰テスト： 既存の機能が新しい変更で影響を受けていないかを確認。
- 負荷テスト： 高トラフィックや大量データ処理時の動作を検証。
- セキュリティテスト： 脆弱性がないかをチェック。

## テストの意義
テストを行うことには、次のような意義があります。

(1) 品質保証の確保
テストによって、製品が仕様通りに動作することを確認できます。これにより、ユーザーは安心して製品を利用できます。

(2) コスト削減
開発後期でのバグ修正は、多大なコストがかかります。早期の段階で問題を発見することで、時間やリソースを節約できます。

(3) チーム間の共通理解
テストケースは、仕様書の代わりとしても機能します。
「この機能はこう動作するべきだ」という共通認識をチーム内で持つことが可能です。

(4) ユーザー満足度向上
品質が高く、安定したプロダクトを提供することで、ユーザーの信頼を得られます。

## テスト戦略の立て方
- テストカバレッジ： どの範囲までテストを網羅するかを計画。
- 自動化の活用： 単体テストや回帰テストは自動化を進めて効率化。
- 開発プロセスに組み込む： CI/CD（継続的インテグレーション/デリバリー）にテストを組み込み、迅速なフィードバックを得る。

## まとめ
本記事ではテストの種類と意義について解説しました
テストは本当に大切で、テスト含めてプロダクトと言って良いと思います。
今すぐSlackのカスタム絵文字で「テストは財産」と言う絵文字を追加しましょう！
「Uh oh! There was an error in loading the activity feed. Reload this page.」解決方法

## **事象**  
GitHubを開くと「Uh oh! There was an error in loading the activity feed. Reload this page.」が表示される。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/b0abe4cc-b0f6-d619-e5a8-e30ad35e8c3f.png)

## **環境**  
- **OS**: macOS
- **ブラウザ**: Google Chrome

## **解決**  
「Filter > Repository activity」で選択しチェックを外し、Saveする。  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3868342/767a8a7e-4620-6b84-1f28-87b9117760e6.png)
useEffectの書き方の違い

# はじめに
マウントした時に実行したい、アンマウントされた時に実行したいといったときにuseEffectでの書き方が異なるので、備忘録としてまとめる。

# useEffectの書き方
以下のパターンの時のuseEffectの書き方とまとめる。

- 毎レンダリング時
- 初回表示のみ
- 依存配列の変更時
- アンマウント時

## 毎レンダリング時
```React
useEffect(() => {
  console.log('Component rendered');
});
```

## 初回表示のみ
```React
useEffect(() => {
  console.log('Component mounted');
}, []);
```

## 依存配列の変更時
```React
// dependencyの値が変更されるたびに実行される
useEffect(() => {
  console.log('Dependency changed');
}, [dependency]);
```

## アンマウント時
```React
useEffect(() => {
  return () => {
    console.log('Component will unmount');
  };
}, []);
```

# まとめ
- useEffectの第2引数（依存配列）に変数を指定するとその値が更新されるたびに実行される
- 空配列にすると一回のみ
- 何も指定しないと毎回実行される
LSONについて

LSONはLiveScript Object Notation Parserの略で、JSONのLive Script版のようなものです。
LiveScriptはCoffeeScriptと互換性があるため、CSONをパースすることもできます。

# LSONの例
LSONはCSONの上位互換なためCSONのような雰囲気をしています。
以下の例を見ると分かりますが、配列の要素を区切るためのカンマは不要です。
また、オブジェクトを表現するためにYAMLのブロックスタイルのような表記を使います。
これらの特徴はCSONも持っているため、CSONとLSONの類似性を感じる事ができます。

```
an_array: <[ an array of strings ]>
another_array: [
  'another'
  'array'
]
# we can even have comments
a_dict: {
  key: 'value'
}
a_string: 'some string'
another_string: \anotherstring
```

出展:

https://github.com/gkovacs/lson
DbContextの「いろは」

DbContextで出来る事
・CRUD操作
・LINQでクエリ操作
...等

使い方
1.　Entity Framework Coreのインストール
2.　DBに対応するエンティティクラスの作成
3.　DbContextを継承して、DeSetでプロパティを定義
4.　DbContextをインスタンス化してやりたいデータ操作
みんなで価値観を共有してこ

## はじめに

人が何を重要視して過ごしているかは人それぞれで、誰でも「これは大事！」ってものを持っていると思います。ただその価値観は、時としてメンバー同士の考え方のすれ違いから、思わぬ衝突につながることもあります。

これを完全に防ぐ手立ては、正直ないのかな・・と思ってますが、各メンバー同士の価値観を事前に共有しあうことで、多少なりとも防げるのではないかと思っています。

相手の心理や背景を理解することで、コミュニケーションを少しでもうまく取りながら、より安全なチームをめざしていきましょう。


## 価値観ワーク

実際に、チーム内でメンバー同士の価値観を共有するべく、価値観ワークを実施してみました。

価値観ワークのツールは多々あるようですが、**Wevoxバリューズカード**というのがオンラインで気軽に試せるようだったので、これにしました。

[Wevoxバリューズカード](https://get.wevox.io/valuescard)

![valuescard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113289/0ae0ef9a-26bc-11e7-e2fe-8656a49da492.png)

バリューズカードは、各単語が書いてある80枚ほどのカードで構成されています。
遊び方としては、1人5枚ずつカードを保持し、山札から1枚ずつ取って、不要な単語が書いてあるカードを捨てる・・これを繰り返して、残った5枚のカードが自分の大事な価値観となります。最後に、そのカードを全員に披露して、なぜこれを残したか説明する流れです。

お題はオーソドックスに **「自分が大事にしている価値観」** で設定してやってみました。

## 価値観を共有する

私含めてメンバー5人で実施して、最終的に結果は下記のようになりました。

![Group 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113289/b39b69dc-c97d-b6c6-e675-367ebb037e3d.png)

カードが1枚ずつしかないので、被らないというのもありますが、メンバーごとに特色が出ていていいですね。

進行中は、「え？それ捨てるの！？」みたいな感じで、思ったよりも盛り上がりました。

ルール通り、最後にメンバーごとになぜこのカードを残したか説明もしてもらいました。
なんとなくこういう性格だろうな〜と思ってた部分もありますが、いざちゃんとメンバーの言葉で **「自分はこういう性格でこういった考えを持っています」** っていうことが明確に聞けてよかったです。

メンバー同士を理解する場としても、とても有意義に過ごせたかと思います。


## 最後に

初めてやってみましたが、チーム体制がガラッと変わったときやプロジェクト開始時のアイスブレイクには、ちょうど良さそうでした。
一緒にやったメンバーが遠方というのもありオンラインで実施しましたが、リアルで顔を合わせてやったほうが楽しめそうだなという印象です。

みなさんも一緒にぜひ、楽しく安全なチームを作っていきましょう！
rex0220 プラグイン設定画面で一覧情報取得時のエラー対応

rex0220 プラグイン設定画面において、一覧情報取得時のエラー対応についてメモ書きです。

# 概要

一覧画面の絞り込み条件に、ユーザー・グループ・組織等を指定して、その後にそのユーザー・グループ・組織を削除すると、一覧情報を取得する REST API でエラーが発生します。
対策としては、一覧画面の再設定が必要です。
その対応方法について、メモしておきます。

例として下記のように、関連レコード集計プラグインの設定画面が表示された場合、REST API でエラーが発生している場合があります。
開発ツールで、エラーを表示すると、「レコードの絞り込み条件に指定したユーザー、グループ、または組織が存在しません。削除された可能性があります。」

- エラー時のプラグイン設定画面
![2024-12-09_14h44_23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cbb65d37-38a7-5f53-3908-f00e27f7a407.png)

- エラー対応後のプラグイン設定画面
![2024-12-09_15h09_39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/648e6be2-728a-8eb1-0978-14ab2a21765f.png)


# 一覧画面の絞り込み条件の問題と対策

一覧画面の絞り込み条件に、ユーザー・グループ・組織等を指定して、その後にそのユーザー・グループ・組織を削除した場合は、対象の一覧設定で「保存」が必要。
対象の一覧画面が不明の場合は、すべての一覧設定で「保存」してください。

- 組織指定の例：「削除TEST」を指定
![2024-12-09_14h41_21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/070ba8b8-9f22-1cef-d0a0-9ee8cb04c15f.png)

- 「削除TEST」を削除後、一覧画面の絞り込み条件を正しく設定して「保存」
※エラーが無くても「保存」が必要

![2024-12-09_14h45_28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/d3582d7f-53e1-ef39-75be-eec735f49fb5.png)
Farnebackの仕組み・実行とパラメータ調整

## Farnebackの仕組み





## Farnebackの実行とパラメータ調整
### Farnebackの実行
Farnebackの実行にあたってはOpenCVを用いることが多いです。OpenCVにはPythonバインディングも用意されており、Pythonからも使用することができます。以下ではPythonを用いた実行について確認します。

```python
import cv2 as cv

image1_gray = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
image2_gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)

flow = cv.calcOpticalFlowFarneback(image1_gray, image2_gray, None, 0.5, 3, 15, 3, 5, 1.2, 0)
```

Farnebackは上記のようなPython実装を用いることで実行することができます。`image1`と`image2`はRGBの3チャネルを持った画像を読み込んだものであり、Farnebackのアルゴリズムによって`image1`から`image2`の変化を各ピクセル毎に(dense)縦横の2Dのベクトルで出力します。

ライブラリのインストールにあたっては`pip install opencv-python`を実行することで入手することができます。


### Farnebackのパラメータ調整
`calcOpticalFlowFarneback`の実行にあたっては下記のような引数を用います。

| メソッド | 概要 |
|:-----------|:-----------|
|`prev`|Source(変化する前の画像)|
|`next`|Target(変化後の画像)|
|`flow`|計算された`flow`(`None`を用いることで省略可能)|
|`pyr_scale`|画像のピラミッドを作成する際の小さくする比率|
|`levels`|作成するピラミッドの数(元画像を含んで数える)|
|`winsize`|averagingに用いるWindowのサイズ|
|`iterations`|それぞれのピラミッドで行う繰り返し演算の数|
|`poly_n`||
|`poly_sigma`||
|`flags`||

前項のコードは下記のようにパラメータを明示的に指定して実行することもできます。

```python
import cv2 as cv

image1_gray = cv.cvtColor(image1, cv.COLOR_BGR2GRAY)
image2_gray = cv.cvtColor(image2, cv.COLOR_BGR2GRAY)

flow = cv.calcOpticalFlowFarneback(prev=image1_gray, next=image2_gray, flow=None, pyr_scale=0.5, levels=3, winsize=15, iterations=3, poly_n=5, poly_sigma=1.2, flags=0)
```
AWS Lightsailを使ってWordPressサイトを構築する

以下に、自動更新の設定手順を追加した完全版を記載します。

---

# AWS Lightsail を使った WordPress サイト構築手順

---

## **1. AWSアカウントの準備**
まず、AWSアカウントを作成します。

1. [AWS公式サイト](https://aws.amazon.com/)からアカウントを作成またはログインします。
2. 請求情報（クレジットカード）を登録し、利用準備を完了させます。

---

## **2. Lightsailインスタンスの作成**

AWS Lightsailでは、WordPressのテンプレートを使った簡単なインスタンス作成が可能です。

1. AWS管理コンソールで「Lightsail」を検索して開きます。
2. **「インスタンスを作成」**をクリックします。
3. 以下の設定を行います：
   - **プラットフォーム**: Linux/Unix を選択
   - **設計図 (Blueprint)**: 「WordPress」を選択
   - **インスタンスプラン**: サイト規模に応じたプランを選択（初めての場合は最安プランがおすすめ）
   - **インスタンス名**: 任意の名前を入力
4. **「インスタンスの作成」**をクリックします。

---

## **3. インスタンスのセットアップ**

インスタンスが作成されたら、以下の手順を行います。

1. Lightsailの管理画面で作成したインスタンスを選択します。
2. **「接続」**タブからブラウザベースのSSHクライアントを起動します。

---

## **4. WordPressの初期設定**

SSH接続を使い、WordPressの管理画面にログインするための準備を行います。

### **1. 管理者パスワードの確認**

SSHクライアントで以下のコマンドを実行して、管理者パスワードを取得します：

```bash
cat /home/bitnami/bitnami_application_password
```

表示されたパスワードをコピーして保存します。

### **2. 管理画面にログイン**

ブラウザで以下のURLにアクセスします：

```
http://<LightsailインスタンスのパブリックIP>/wp-admin
```

- **ユーザー名**: `user`  
- **パスワード**: 取得したパスワード  

ログイン後、WordPressの管理画面が表示されます。

---

## **5. ドメイン設定（任意）**

Lightsailではドメイン設定も簡単に行えます。

### **1. 静的IPの作成**
Lightsailの「ネットワーキング」タブで**「静的IP」**を作成し、インスタンスに割り当てます。

### **2. DNS設定**
ドメインプロバイダーで以下を設定します：
- **Aレコード**: Lightsailの静的IPアドレスを指すように設定

---

## **6. SSL証明書の設定（HTTPS化）**

### **1. bncert-tool を使ったSSL証明書の設定**

1. **SSH接続**  
   LightsailインスタンスにSSHで接続します（Lightsail管理画面の「接続」タブからブラウザベースのSSHクライアントを使用可能）。

2. **bncert-toolの実行**  
   次のコマンドを実行して、BitnamiのSSL設定ツールを起動します：
   ```bash
   sudo /opt/bitnami/bncert-tool
   ```

3. **ツールのプロンプトに従う**  
   プロンプトに従って以下の情報を入力します：
   - **ドメイン名**: 設定するドメイン（例: `example.com` と `www.example.com`）
   - **メールアドレス**: 証明書の期限通知などを受け取るためのメールアドレス
   - **リダイレクト設定**: HTTPからHTTPSへのリダイレクトを有効化するか（通常は「はい」を選択）

4. **設定完了**  
   HTTPSが有効になります。ブラウザから以下のURLにアクセスして確認します：
   ```
   https://<ドメイン名>
   ```

---

### **2. SSL証明書の自動更新**

Let’s Encryptの証明書は90日間有効です。期限が切れる前に自動更新を設定するには、以下の手順を確認・実行します。

#### **自動更新ジョブの設定・確認**
以下のコマンドを実行して自動更新を設定します：

```bash
sudo crontab -e
```

エディタが開いたら、以下の内容を追加します：

```bash
0 0 * * * /opt/bitnami/letsencrypt/lego --tls --email="your-email@example.com" --domains="example.com" --domains="www.example.com" --path="/opt/bitnami/letsencrypt" renew >> /opt/bitnami/letsencrypt/renew.log 2>&1 && /opt/bitnami/ctlscript.sh restart
```

保存して終了します。

次のコマンドで自動更新の`cron`ジョブが設定されているか確認します：

```bash
sudo crontab -l
```

出力例：
```bash
0 0 * * * /opt/bitnami/letsencrypt/lego --tls --email="your-email@example.com" --domains="example.com" --domains="www.example.com" --path="/opt/bitnami/letsencrypt" renew >> /opt/bitnami/letsencrypt/renew.log 2>&1 && /opt/bitnami/ctlscript.sh restart
```

---

### **3. 証明書更新の確認**

次のコマンドで現在の証明書の有効期限を確認できます：

```bash
openssl x509 -in /opt/bitnami/letsencrypt/certificates/example.com.crt -text -noout | grep "Not After"
```

出力例：
```
Not After : Feb 28 12:00:00 2025 GMT
```

---

## **トラブルシューティング**

- **更新エラーが発生した場合**  
  `lego`ツールのエラーログを確認して問題を特定します：
  ```bash
  cat /var/log/letsencrypt/renewal.log
  ```

- **通知メール**  
  証明書期限が近づくとLet’s Encryptから通知メールが届きます。登録したメールアドレスを適切に管理してください。

---
REST API を使って Yellowfin の死活監視

## はじめに
Yellowfin の死活監視をする場合、サービスやプロセスの稼働状況を確認したり、特定 jsp ページが表示されるか否かを確認したりしている場合も多いかと思います。

この度、ログイントークン無しで、Yellowfin の死活監視ができる REST API が実装されました。リポジトリ DB の稼働状況も含めた結果を返すため、監視用の API としてとても役立つはずです。



## 設定
認証を受けることなく当該 API にアクセスするためには、Yellowfin 画面から [システム構成] > [認証] > [一般] と推移し、「認証不要なREST APIへのアクセス許可」を有効化します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/068df83a-51cb-1645-bdef-dda59478adcb.png)

## PHP プログラム

PHP のサンプルコードを使って、同 API の使い方を説明します。

#### 全容
サンプルプログラムの全容は以下の通りです。

```php:health.php
<?php
$time = ceil(microtime(true)*1000);
$url = 'http://localhost:9140/api/health/ping';
$header = array(
    'Authorization:YELLOWFIN ts='.$time.', nonce=123',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo($httpCode);
curl_close($ch);
?>
```

#### 内容の説明

プログラムの内容を簡単に説明します。

```php:変数宣言
$time = ceil(microtime(true)*1000);
$url = 'http://yellowfin:8080/api/health/ping';
$header = array(
    'Authorization:YELLOWFIN ts='.$time.', nonce=123',
);
```

\\$time はミリ秒数の UNIX 時間を指定します。
\\$url は各々の環境に合わせて内容を変更してください。要求する先の API は、ご覧の通り /api/health/ping です。
GET で戻り値を要求するために、\\$header には Authorization 情報のみが必要です。

```php:curl
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_setopt($ch, CURLOPT_URL, $url);
$result = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
echo($httpCode);
curl_close($ch);
```

冒頭で宣言した変数の内容を使って、curl で GET の要求を行います。
GET 要求に対して、リポジトリ DB が稼働している場合は HTTP レスポンス 200 番が、稼働していない場合は 500 番がそれぞれ返ってきます。レスポンスは HEADER だけで、BODY はありません。そのため、以下の 2 行で HEADER 情報だけが必要であることを指定します。

`curl_setopt($ch, CURLOPT_HEADER, true)`
`curl_setopt($ch, CURLOPT_NOBODY, true)`

レスポンスから HTTP コードに関する情報だけを、以下の行で抜き出します。

`$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE)`

#### 動作確認
Yellowfin が正常に稼働している場合は、200 番が返ってきます。

```cmd:正常
>php health.php
200
```

Yellowfinのリポジトリ DB を停止すると、500 番が返ってきます。
```cmd:異常
>php health.php
500
```

## 最後に
Yellowfin の死活ポーリング監視をする際、この API を活用すれば、リポジトリ DB の稼働状況も含んだ結果を、True (200) / False (500) で返します。
是非、日ごろの運用にご活用ください。

では皆様、良いデータ分析を！
オンライン業務における未経験者の育成

## はじめに
オープンロジのQAチーム所属の岸と申します。
オープンロジに入社してまだ半年未満なので、入社前のことも含めて記載します。

# オンライン業務の育成って難しいよね
コロナ禍直後にものすごい勢いで様々な業種、職種がオンラインでの業務遂行への切り替わりを余儀なくされ、すでに4年が経過。	
当初は急激な変化で組織内、社内、あるいは客先、取引先含めて大慌てでなれないやり取りをしたことも今は良い思い出と経験になっています。

そんな慌ただしく始まったオンライン業務においていくつかの組織でQAの管理に携わらせていただき、QA未経験者の育成をする機会が何度もあった。
組織全体の規模、QAの規模や役割、育成に関わる人、育成対象の人はそれぞれ異なっていましたが、総じてオンライン業務におけるQA未経験者の育成の難しさを痛感しています。

この「育成の難しさ」はオフライン環境に比べ、オンライン環境では成長速度が遅くなるのでは？と思っています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56839/ec935179-c292-59fc-6848-7bc123e9c722.png)

当然のことながら　オンライン、オフラインで同じ人を育成して比較ができているわけではないのであくまで体感的な話であり、数字的な根拠は乏しい。

### このあたりオンラインでの育成について思っていることをつらつら書いていきますね。

# なんでだろうね？
成長速度が遅い原因はなんだろうか？
思い当たるものを記憶だよりにピックアップしてみる。
+ 育成対象は自分の速度が遅いのか早いのかがわからない
→改善する機会やうまいやり方を共有する機会が生まれにくい
+ 他の人のうまいやり方を盗めない
→周りからスキルを吸収する機会が少なく成長しにくい
+ 作業の停滞や悩んでいたりする時に気づきにくい（リアルタイムなフォローがしにくい）
→「鉄は熱いうちに打て」ができない
+ 作業の結果だけしか見えず、手順が見えにくい
→どこに問題があるのかわからず適切なアドバイスが行いにくい。
+ 良い取り組みをしてもプロセスに対する取り組みの場合、気づきにくく褒めるタイミングがない
→小さな良い所が見つけられず達成感、承認欲求が満たされず改善意欲が低下する
+ 育成をする側がオンラインでの育成をされていない
→個人にも組織にもオンラインの育成のノウハウがない

こんな感じかな？


・オフラインで見えるとこ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56839/31119b18-5aa9-1aec-c487-39ae6803237c.png)
オフラインの場合、指示をしてからどんな様子で作業をしているのか逐次見える範囲にいるので、今どんなことをしているのか把握しやすく、進み具合、悩み具合を元にフォローしやすい。


オンラインで見えるとこ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56839/29619487-d710-2a24-00f6-e5d465e8524a.png)
一方、オンラインの場合、育成する側、育成される側のどちらかが声をあげないと様子を把握する事ができずフォローしにくくなってしまう。

**オフラインでの育成の場合、受動的に育成状況を見ることができるが、オンラインの育成の場合、能動的に育成状況を取りにいかないと見えない。** という要因が大きそう。

それならオンラインの育成は能動的に状況把握する事に意識すればうまくいくね。ってなるけど、育成対象が少数であればそれでまわるけど、自分の体感的には5人を超えるとちょっと能動的に取り続けるのは破綻しそうな感覚。
この育成側が同時に何人見えるかの許容範囲もオンラインとオフラインでは変わってくるはず。

# どうすればいいの？

QAだけではなく、折りに触れて他の職種の人にも聞いたりしているが、「それだ！」と思いつく答えには残念ながらまだ出会っていない。
ノウハウある人がいたらコメントやご連絡を頂けるとうれしいです。本当にお願いします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/56839/04b63ff8-d76a-af35-f2ad-680e4152a723.png)

## 最後に	
他の職種の人から聞いた話の中で特に心に残ってる言葉
**「そりゃだって、育児ってオンラインじゃできないでしょ😮‍💨」**
いやまぁそうなんですけどね。
データベース設計の極意 ～「シンプルかつ強固なテーブル設計」を目指して～

# そういえば

「このシステム、設計段階で見直せていたら……。」  
システム開発において、後から設計の不備に気づいて修正を余儀なくされることは珍しくありません。特にデータベース設計は、後戻りが難しい領域のひとつです。

この記事では、 **テーブル設計を成功させるためのポイントと極意** を具体例とともに解説します。設計時に意識すべきチェックリストやシンプルな設計を実現する方法もご紹介します。

---

## テーブル設計の基本ステップ

### 1. キーを決める

データベース設計の最初のステップは「キーを決めること」です。  
各レコードを一意に識別する主キー（Primary Key）は、システム全体の整合性を保つ重要な要素です。

#### 例: ユーザー管理システム
以下のようなユーザーデータを扱うテーブルを考えてみましょう。

| user_id | name       | email              | created_at         |
|---------|------------|--------------------|--------------------|
| 1       | 山田 太郎   | yamada@example.com | 2024-12-01 10:00:00 |
| 2       | 佐藤 花子   | sato@example.com   | 2024-12-02 11:30:00 |

- **主キー (Primary Key):** `user_id`  
  レコードを一意に識別します。可能な限り単純な数値型を選びます。
- **外部キー (Foreign Key):** 他のテーブルとの参照関係を明確にし、データの整合性を保ちます。

### 2. 項目ごとの属性を決める

各カラムに適切な型や制約を設定することで、データの正確性や運用時のトラブル回避につながります。

#### ユーザーテーブルの属性例:
| カラム名     | データ型    | 制約           | 説明                                   |
|--------------|-------------|----------------|----------------------------------------|
| `user_id`    | INT         | PRIMARY KEY    | ユーザーを一意に識別するID             |
| `name`       | VARCHAR(50) | NOT NULL       | ユーザーの名前                         |
| `email`      | VARCHAR(100)| UNIQUE, NOT NULL | メールアドレス（重複禁止）             |
| `created_at` | DATETIME    | NOT NULL       | レコード作成日時（デフォルト値を設定） |

### 3. ER図を作成する

設計の最終段階では、テーブル間の関係を **ER図（エンティティ・リレーション図）** にまとめます。  
以下は、ユーザー管理システムの例です。

```
[users]
  user_id (PK)
  name
  email
  created_at
    |
    |
[orders]
  order_id (PK)
  user_id (FK)
  order_date
  total_price
```

- `users` テーブルと `orders` テーブルは 1:N 関係を持っています。
- `user_id` が `orders` テーブルの外部キー (Foreign Key) として機能します。

---

## 設計時に意識すべきポイントと極意

### ポイント 1: 命名規則を統一する
- **テーブル名**: 必ず複数形（例: `users`, `orders`）。
- **カラム名**: `_id` を乱用せず、明確な名前（例: `user_id`, `order_number`）。
- **履歴テーブルとログテーブルの区別**:  
  - 履歴テーブル (`user_histories`): ユーザーに見せるデータ。  
  - ログテーブル (`access_logs`): 開発者が調査用に使うデータ。
- **Boolean型カラム**: 名前から意図が分かるように（例: `is_active`, `is_deleted`）。

### ポイント 2: シンプルな設計を目指す
- **テーブル設計の基本は「属性」と「関係」**  
  - 属性は必要なものだけを書く。  
  - 関係は「1:1」「1:N」「N:N」の3種類に集約。
- **不要なカラムや複雑な設計を排除**  
  保守性や拡張性を意識し、可能な限りシンプルに。

### ポイント 3: データの正確性と整合性を確保
- **NOT NULL制約**: 必須項目には必ず設定。
- **外部キーの設定**: 参照関係を明確に。
- **重複データを防ぐ**: 正規化を検討。
- **データ型を適切に選択**: 例: 数値型カラムで10桁以上が必要なら型を再確認。

### ポイント 4: チェックリストで設計を見直す
- **データが入らないカラムが多い** → 本当に必要か再検討。
- **1つのカラムに複数の意味がある** → 分割を検討。
- **他のカラムに依存する値がある** → 冗長性を排除。
- **導出項目（計算結果など）が存在する** → 必要性を確認。

---

## まとめ: 成功するテーブル設計のために

シンプルで拡張性が高いテーブル設計を目指すには、以下を徹底しましょう。

1. **設計の基本に忠実であること**  
   「属性」と「関係」を意識し、必要最小限に抑える。
2. **命名規則とデータ型の統一**  
   チーム全体で理解しやすい設計を行う。
3. **レビューを怠らないこと**  
   ER図やチェックリストを活用し、品質を高める。

設計段階での一手間が、後の運用や保守を大きく楽にします。ぜひこの記事を参考に、シンプルかつ強固なテーブル設計を目指してください！

---
PyOpenGLを使ってglGet系の値の定数名を文字で表示する

`glGetInternalformativ` や `glGetTexParameteriv` などのglGet系関数で得た値の意味は，一般人にはすぐには分かりにくいですが，PyOpenGLであればその定数名を文字列にするのがカンタンです．
やり方は，OpenGL.GLの中から対応する数値の変数名を線形探索するだけです．
Cでも数値の意味をヘッダから探したりコンパイルが入ったりと面倒なので，対応しているOpenGLの機能などの表示をサクッとしたいときに良いと思います．

※下記はフロントエンド（GLコンテキスト生成）にPySDL2を選択していますが，glfwでもfreeglutでもeglでも，GLコンテキストが作れればなんでもいいです．

```python
from sdl2 import *
from OpenGL.GL import *

SDL_Init(SDL_INIT_VIDEO)
window=SDL_CreateWindow(b"test",0,0,480,480,SDL_WINDOW_HIDDEN|SDL_WINDOW_OPENGL)
context=SDL_GL_CreateContext(window)

pf=glGetInternalformativ(GL_TEXTURE_2D, GL_RGBA8, GL_INTERNALFORMAT_PREFERRED, 1)

print([i for i in dir(OpenGL.GL) if
    i in globals() and
    type(globals()[i])==OpenGL.constant.IntConstant and
    int(globals()[i])==pf
    ])
```
シフトレジスタ（74HC595）を用いて8×8LEDマトリクスを光らせる

# 経緯
掃除していて自宅から以下の8×8LEDマトリクスが発掘されたのですが、使い方がいまいち分からなかったので、調べて使ったときのことを備忘録を兼ねてまとめます。

![1B32C73D-D5E0-49E9-9C69-F449213633CC.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243201/3c3d3c74-8e2b-2ec7-723b-305dcee67f37.jpeg)

# シフトレジスタ
このLEDマトリクスについて調べていくと、どうやらこれが商品として近そうでした。

https://akizukidenshi.com/catalog/g/g105163/

データシート見ると、回路がマトリクスになっていて、ダイナミック点灯させれば制御できそうでした。
ただ、これを単純にArduinoで制御しようと思うと、アノード×8、カソード×8でピンを16本も使ってしまうため、他の用途でピンが使えなくなってしまうという悲しい自体があります。
それを解決するためにシフトレジスタを使うことを考えました。

https://akizukidenshi.com/catalog/g/g114053/

このシフトレジスタをアノード用とカソード用に二個購入し、それぞれ接続しました。

# 実装

回路は以下サイトを参考にして、これにシフトレジスタを加えました。

https://www.hiramine.com/physicalcomputing/arduino/matrixled.html

**接続図**

![スクリーンショット 2024-12-06 012241.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243201/a908b2d9-7051-1352-abcc-143c1f2eb7bb.png)

今回は星を表示してみることにします。

**コード**

```c
// シフトレジスタと繋いだピン
//アノードピン = APIN
const int APIN_SRCLK = 4;
const int APIN_RCLK  = 3;
const int APIN_SER   = 2;

//カソードピン = CPIN
const int CPIN_SRCLK = 7;
const int CPIN_RCLK  = 6;
const int CPIN_SER   = 5;

int APIN[] = { APIN_SRCLK, APIN_RCLK, APIN_SER };
int CPIN[] = { CPIN_SRCLK, CPIN_RCLK, CPIN_SER };

const byte Apatterns[] = {
  B00011000, 
  B00100100,
  B11000011,
  B01000010,
  B00100100,
  B01111110,
  B01000010,
  B10000001,
};

const byte Cpatterns[] = {
  B01111111,
  B10111111,
  B11011111,
  B11101111,
  B11110111,
  B11111011,
  B11111101,
  B11111110,
};

void setup()
{
  // ピンの設定と初期化
  pinMode( APIN_SRCLK, OUTPUT );
  pinMode( APIN_RCLK, OUTPUT );  
  pinMode( APIN_SER, OUTPUT );
  pinMode( CPIN_SRCLK, OUTPUT );
  pinMode( CPIN_RCLK, OUTPUT );  
  pinMode( CPIN_SER, OUTPUT );

  digitalWrite( APIN_SRCLK, HIGH );  
  digitalWrite( APIN_RCLK, HIGH );
  digitalWrite( APIN_SER, HIGH );
  digitalWrite( CPIN_SRCLK, HIGH );
  digitalWrite( CPIN_RCLK, HIGH );
  digitalWrite( CPIN_SER, HIGH );
}

void loop()
{
    for(int i = 0; i < 8; i++) {
      // ラッチをLOWにする
      digitalWrite(APIN_RCLK, LOW);
      digitalWrite(CPIN_RCLK, LOW);
      
      // シリアル信号を送信
      shiftOut(APIN_SER, APIN_SRCLK, LSBFIRST, Apatterns[i]);
      shiftOut(CPIN_SER, CPIN_SRCLK, LSBFIRST, Cpatterns[i]);
      
      // ラッチをHIGHにする
      digitalWrite(APIN_RCLK, HIGH);
      digitalWrite(CPIN_RCLK, HIGH);
      
      // 表示のためのDelay
      delayMicroseconds(100);
      
      // カソードのシリアル信号を送り、消灯させる
      digitalWrite(CPIN_RCLK, LOW);
      shiftOut(CPIN_SER, CPIN_SRCLK, LSBFIRST, B11111111 );
      digitalWrite(CPIN_RCLK, HIGH);
    }
  }

```

無事LEDの星（に見えると嬉しい）が表示されました！

![61A5E32C-4BF3-4964-9589-74D1A6C710A2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/243201/af7dc3d8-a843-7654-99be-c4ff6b13354b.jpeg)

ピン6本で制御できるようになると色々応用しやすくなると思うので、楽しい電子工作ライフの一助になれば幸いです。
最大260Ａをリポから取り出せる電源基板を設計してみた話

# はじめに
　筆者は今回廃炉ロボコンというロボコンに参加します。このロボコンでは廃炉作業にかかわるテーマをクリアするためのロボットを制作するロボコンです。今回は260Aということですが、そう、廃炉ロボコンには電流制限がありません。つまり、回路でとれる電流が多ければ脳筋でモーターを回すことができます。(←限度はあります。)ということで今回ロボコンで使われるような電源基板を作ってみました。
 
 # 仕様
 詳しくは言えませんが、不随するほかの回路の個数からこのように作りました。
 - 電力供給ポート16個（XT60×14, Xh2×2）
 - XT60一つから最大60A
 - Xh2一つから最大3A
 - 非常停止接続用コネクタ2個（Xh2)

# 設計
KiCadを使用しました。バージョンは5.1.9です。
余談なのですが、私のノートパソコンでKiCad６以降を使用するとこのような画面になり設計ができません。何度入れなおしても治らず、デスクトップPCに入れてみたところ正常に動作します。対応策を知っている方がいらしたら教えていただきたいです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/7a229040-fc63-711f-e034-d3c2589e7b2c.png)
話がずれてしまい申し訳ございませんでした。

## 回路図
非常停止でオンオフするために使うFETとして今回は"IRLB3813PbF"を使います。[データシート](https://akizukidenshi.com/goodsaffix/irlb3813pbf.pdf)から分かるようにこいつは260A、一瞬なら1050A流せるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/035370b3-42bf-e0c8-eec5-9a0c967b4976.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/6833a7da-2cf7-9eb7-9fb7-6b66b2a1763b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/06884391-2a25-9a2c-cf4f-a1b0c33b43ac.png)

## PCB
今回配線としてはFETのゲートにつながるところを除くと一部260A通るところが出てきます(酷使したら)。電流は、配線幅1㎜に対して１Aとなっているので単純計算260ｍｍの配線幅が必要になります。そんなに配線幅を太くできないので、今回は基板の裏面にランドパターンを作りそこにはんだを流し込み無理やり配線幅を大きくして電流を流そうと思います。KiCadだとMaskレイヤーがそれになります(二枚目の画像)。表と裏は適当にビアで接続しています。
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/3bd77411-08be-95eb-ed5b-7131ffcbd636.png)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/799dc65b-6f0c-76fc-b3c5-8a6a65584b69.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/3fa6e5b8-0d0d-d2e4-5263-02a16b24d2c0.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3856824/b2b9191d-dc02-e1eb-0a7b-5591d53fdce9.png)

# 発注
発注はもちろんJLCPCBさんを使用します。発注の方法については[こちら](https://qiita.com/KoiwaHaku/items/20b891c2ad7d3de0495a)を参照ください。

# 動作確認
基板が届き、実装が終わり次第書きます。

# 最後に

一関高専機械技術部ではJLCPCBのスポンサーシップに参加させて頂きました。参加することで作成した基板の代金を割り引いていただいております。有難うございます。
JLCPCB様は、基盤制作、部品実装、３Dプリントなどのサービスを提供している会社です。

JLCPCBホームページ
https://jlcpcb.com/jp

スポンサーシップ
https://jlcpcb.com/help/article/152-how-to-apply-for-free-pcb
IT部門でエンジニア採用をブーストできた3つの取り組み

# **はじめに**
グループデジタルソリューションセンター(以下、GDSC)/IT組織戦略チームの採用担当です。
いつもは人の影に隠れてブログなどを書く機会がありませんでしたが、機会をいただきましたので採用の取り組みをお伝えしたいと思います。

私は IT部門(GDSC) の採用担当になり、２年が経ちました。
これまでは人事組織から採用支援(担当)をしていましたが、この2年間はGDSCに所属し、エンジニア採用に専念しています。
![組織図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940959/0e67109d-4f27-9db4-8ce1-0e2fd1002b94.png)


# **採用状況**
GDSC のみで年間15名～20名程度の採用を行っています。
プロジェクトリーダー、開発エンジニア、インフラエンジニア、セキュリティ、データエンジニアなど最大で10ポジションほどあります。

エンジニア採用市況は引き続き過熱化しています (2024年10月時点で求人倍率約12倍！)
採用担当だけではどうにもならない状況は、当社だけに限ったことではないと思いますが、
そのような状況下でも**なんとか採用成果が出せたのは、IT部門(GDSC)のコミットメントです。**
今回はGDSC内の取り組みをご紹介します。

【四半期ごとの応募者数推移】
季節性はありますが、基本的には増加傾向です。
![応募推移.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3940959/9cf5f9b2-e41e-2717-5ab6-10283e03628c.png)


【GDSCのご紹介】
▼以下のブログをご覧ください▼
【前編】GDSC所長が語る！2023年の振り返りとこれから
https://engineer.po-holdings.co.jp/articles/451/

# **IT部門でエンジニア採用をブーストできた3つの取り組み**
- IT部門の目標に採用人数を設定する（予算が付く）
- マネージャーと採用定期MTGを行う
- メンバーも採用活動に参加する

# **IT部門の目標に採用人数を設定する（予算が付く）**
採用担当の決済でできる話ではないですが、GDSCの部門長が採用へコミットしていると理解いただけると思います。部門の目標に掲げているため予算もついています。
採用媒体費用や採用決定費用は人事部門が負担するため、GDSCの採用予算はそれ以外の用途に使用しています。
【主な使用用途】
採用HPの制作(そもそも採用HPがなかったので、IT部門だけのサイトを制作)
https://engineer.po-holdings.co.jp/

採用ピッチ資料の作成

https://speakerdeck.com/ty1031/hui-she-shuo-ming-zi-liao

採用広報(主にイベント参加や協賛)

https://engineer.po-holdings.co.jp/movies/

https://techplay.jp/community/poh/video

# **マネージャーと採用定期MTGを行う**
GDSCのマネージャー陣と定期的に採用MTGを実施しています。MTGの頻度も初年度は週次で行っていましたが、連携がスムーズに取れるようになったため今年度は隔週で行うようにしました。MTGの中で採用進捗の報告は必ず行っており、求人のテコ入れやターゲット検討などの全体感のみならず、求職者の方ごとに対応を確認しています。(幹部陣は採用に本気です！！)

その時々で議題に上がるテーマは様々であり、特に立ち上がり期では採用の軸となることをしっかりと協議してきました。
・組織のMVV策定
・提供価値のすり合わせ
・採用HPビジュアル、コピーライト確認
・リファラル採用促進企画

# **メンバーも採用活動に参加する**
採用は管理職だけの仕事ではありません。(人事だけの仕事でもないですよね)
GDSCでは新しい仲間探しにメンバーも以下のタイミングで参加しています。

・選考参加 (カジュアル面談やオファー面談に同席することも多数)
・リファラル、知人紹介 (リファラル入社者数：1年目0名→2年目2名→今年4名！)

私も同じ組織のメンバーですので、部門MTGやイベント、飲み会に参加します。
出社しているときはもちろんGDSCのオフィスで仕事をしています。自然と社員の顔と名前が一致していき、キャラクターも見えてきます。そうすると「この求職者の方には○○さんとお話してもらうと良いかも！」と思えてくるのです。
(このマッチングは採用担当の仕事だと思っています！)

リファラル採用を促進するには、ある程度ステップがありますが、意識づけが大事だと考えています。
私とオフィスで顔を合わせた社員は「誰か良い人いないですかー？」と一度は声をかけられているはずです。

# **さいごに**
エンジニア採用の難易度が高まり続ける昨今、採用を成功させる鍵は、採用担当だけでなく”組織全体が採用活動にコミットすること”だと強く実感しています。
GDSCでは、部門長をはじめとした幹部の深い関与、明確な採用目標の設定、そしてメンバーが採用活動に参加する文化を醸成することで、徐々に成果を上げることができました。
そして、採用の取り組みは常に改善と挑戦の連続であると感じています。
私たちが採用活動において意識していることの一つに、「**採用は単なる業務ではなく、未来を共に創る仲間を迎え入れるための重要なプロセスである**」と考えています。採用活動は単なる数字の達成ではなく、組織の未来を形作る重要な活動です。

この記事を通してGDSCの『ヒト』や『組織』に対する想いが少しでも伝わっていれば幸いです。
最後まで読んでいただき、ありがとうございました！


# **:santa_tone1:弊社では一緒に働く仲間を募集中です:santa_tone1:**

現在、様々な職種を募集しております。
カジュアル面談も可能ですので、ご連絡お待ちしております！

募集内容等の詳細は、是非採用サイトをご確認ください。

https://engineer.po-holdings.co.jp/
Mavenのビルド時のエラー: PKIX path building failedの対策

表題のエラー```PKIX path building failed```がなかなか解消できず、めっちゃハマった。

環境はEclipse組み込みプラグインのMaven。

後ろに以下のオプション設定をすることで、SSL認証を無効化するとの情報が多いが、エラーが解消せず、認証鍵をキーストアへ登録してみても解消せず、途方に暮れていた。

```mvn clean install  -Dmaven.wagon.http.ssl.insecure=true -Dmaven.wagon.http.ssl.allowall=true -Dmaven.wagon.http.ssl.ignore.validity.dates=true```



以下のオプションで通った。
※insecureなので開発環境下のみを推奨。

```mvn clean install -Daether.connector.https.securityMode=insecure```

> Maven 3.9 以降、デフォルトの Transport 実装をネイティブに変更しました。

とのこと。

参考

https://stackoverflow.com/questions/75100163/maven-error-stating-that-pkix-path-building-failed-unable-to-find-the-valid-cer
[Go]文字列結合してファイルパス作るときの話

備忘録として

ベースとなるディレクトリパスを基準に、とあるファイルまでのパスを下のような感じで記述していた箇所があったが、「実行環境が Windows である可能性も考えて `filepath.Join` 使ってください」とレビューで指摘をいただいた。

```sample.go
package main

import "fmt"

func main() {
	baseDir := "xxx/xxx"
	fileName := "sample.txt"
	filePath := baseDir + "/" + fileName

	fmt.Println(filePath)
}
```

…たしかになぁ！ Windows だと区切りが `\` になるしなぁ！

というわけで下のような形にしとくのが無難。

```sample.go
package main

import (
	"fmt"
	"path/filepath"
)

func main() {
	baseDir := filepath.Join("xxx", "xxx")
	fileName := "sample.txt"
	filePath := filepath.Join(baseDir, fileName)

	fmt.Println(filePath)
}
```
server side言語比較まとめメモ

# server side言語比較
server sideで使用されやすい言語の比較メモです。
Java/Goです。

kotolinも追加予定。


| **項目** | **Java（Spring Boot）** | **Go** | 
|--------------------------|----------------------------------------------------|-----------------------------------------------------| 
| **開発スピード** | 豊富なフレームワーク（Spring Boot）により効率的だが、設定が複雑な場合がある。 | 言語がシンプルで設定も少ないため迅速に構築できる。 | 
| **言語特性** | オブジェクト指向（クラスや継承）を活用し、大規模なアプリケーションに適している。 | シンプルで構造化されており、小規模なチームでも管理しやすい。 | 
| **ランタイムの軽量性** | JVMが必要で、比較的メモリ使用量が多い。 | ネイティブコンパイルのため、軽量で高速。 | 
| **フレームワークの支援** | Spring Bootがマイクロサービス構築のための多くの機能を提供（例：Spring Cloud）。 | 標準ライブラリが強力で、外部ライブラリを選択して利用する自由度が高い。 | 
| **並行処理の実装** | スレッドを用い、管理は比較的複雑（スレッドプール、同期などが必要）。 | ゴルーチンとチャネルにより簡潔かつ効率的に並行処理を実現。 | 
| **エコシステム** | 豊富なエコシステム（成熟したライブラリやフレームワークが多数存在）。 | 新しい言語であるため、ライブラリの成熟度は用途による差がある。 | 
| **学習コスト** | Spring BootやJavaのエコシステムを理解するのに時間がかかることがある。 | Goのシンプルな構文により、学習コストが低い。 | 
| **パフォーマンス** | JVMの最適化により高いパフォーマンスを発揮するが、メモリ消費が多め。 | ネイティブコードとしてコンパイルされ、軽量かつ高速。 | 
| **サービス間通信** | RESTful APIに加え、Spring BootではgRPCのサポートも容易。 | gRPCを標準的にサポートしており、効率的な通信が可能。 | 


## 1.RestAPIの構築

Java:

```java 
@RestController 
@RequestMapping("/api") 
public class HelloController { 
    @GetMapping("/hello") 
    public String sayHello() { return "Hello, World!"; } 
}
```

Go:
```go 
package main 
import ( 
    "fmt" 
    "net/http"
) 

func sayHello(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintln(w, "Hello, World!") 
} 

func main() { 
    http.HandleFunc("/hello", sayHello) http.ListenAndServe(":8080", nil) 
} 
```

- SpringBootはアノテーションを使用して、構造化されたコードを記述可能
- Goはシンプルで軽量な標準ライブラリを使用

## 2.並行処理

```java 
    @Async 
    public void performTask() { 
        // 長時間かかる処理 
    } 
```

```go 
    go func() { 
        // 長時間かかる処理 
    }()
```

JavaではSpringの非同期サポート（`@Async`）を利用。
Goでは軽量なゴルーチンを直接使用。

## 選択基準

### Java（Spring Boot）が適している場合

1. エンタープライズアプリケーション

複雑なビジネスロジックや大規模なプロジェクト。
チームメンバーがJavaに精通している。

2.豊富なツールやフレームワークが必要

- Spring Cloud、Spring Dataなどのエコシステムを活用

3.高い開発効率を重視

- 自動設定、データベース統合、セキュリティ機能が豊富

### Goが適している場合

1. 軽量かつ高パフォーマンス

- マイクロサービスの数が多い場合やリソースが限られている環境
【React】useEffectに関する備忘録

ReactにはuseEffectという便利なモノがあります。あるstateの更新を検知して処理をしたり、最初のレンダリング時に処理をしたり、毎回のレンダリング時に処理をすることができます。

フロントの細かいことってしばらくやってないとすぐ忘れるので書きました😎


# useEffectでしちゃダメなこと🙅‍♂️(結論)
**useEffect内でstateを更新するのはダメ！！！！**

ありがちなパターンは、とあるstateの変更をuseEffectで検知して、それによって別のstateを連動させる場合ですね！
下のNG例では、userの値の変更を検知して、それによってisAdminを連動させています。

```tsx
function UserProfile() {
  const [user, setUser] = useState(null);
  const [isAdmin, setIsAdmin] = useState(false);

  // 🔴 アンチパターン: 不要なstateと余計なEffect
  useEffect(() => {
    if (user && user.role === 'admin') {
      setIsAdmin(true);
    } else {
      setIsAdmin(false);
    }
  }, [user]);

  // ...
}
```


## じゃあどうしたらいいのか
既存のstateに基づいて計算される値は、そもそもstateにする必要すらありません！！！
正しくは以下のようになります。

```tsx
function UserProfile() {
  const [user, setUser] = useState(null);

  // ✅ 良い例: 派生データを直接計算
  const isAdmin = user ? user.role === 'admin' : false;

  // ...
}
```

useEffectが消えたばかりか、isAdminもstateですらなくなりましたね。

正しいuseEffectの使い方は、外部との連携などの**副作用を分離させること**です。
公式ドキュメントに例を使った記載があります。Reactの公式ドキュメントは丁寧で素晴らしいですね💫💫💫

https://ja.react.dev/reference/react/useEffect

https://ja.react.dev/learn/you-might-not-need-an-effect


# なぜダメなのか
大前提として、Reactは、stateの更新を検知すると画面を再レンダリングします。

> 💂< なぜuseEffect内でstateを更新しちゃダメなのかを説明するためには、ReactがuseEffectを処理するタイミングを知る必要がある………


### 正しいuseEffectの場合
物語はstateが更新されるところから始まります。まず普通のuseEffectは、

1. とあるstateが更新される
1. 画面の表示内容を計算するためにコンポーネントの関数を再実行
1. 更新された内容を画面に表示
1. 更新されたstateに依存するuseEffectがある場合、実行

と、**レンダリングのあとに実行**されます。これがキモです。


### ダメなuseEffectの場合

ここで、useEffect内でstateを更新してみましょう。どうなるかというと…………

1. とあるstate1が更新される
1. 画面の表示内容を計算するためにコンポーネントの関数を再実行
1. 更新された内容を画面に表示
1. useEffectを実行して、別のstate2を更新😢
1. state2が更新されたのを検知して、新しい表示内容を計算するためにコンポーネントの関数をさらに再実行(2回目)
1. 更新された内容を画面に表示(2回目)

お気づきでしょうか、**画面がムダに2回も計算されている**ことに…………………………😱😱😱


# 参考資料
ここにこの記事で説明した全てが書かれています👑👑👑

https://ja.react.dev/learn/you-might-not-need-an-effect



https://ja.react.dev/learn/thinking-in-react

https://tech.enechange.co.jp/entry/2024/06/28/100239
事業所郵便番号データ その2

## 事業所郵便番号データの辞書化
事業所郵便番号データを郵便番号データと同様にAPIから取得できるようDBへの格納を試みました。せっかくなので事業所名の正規化と住所（番地）とビル名の分離も可能な範囲で実施しました。

### 事業所名の正規化
事業所名は空白で区切られて法人種別 法人名 事業所名などが記載されていますが、今回はここから法人種別を含む法人名を抽出しました。あらかじめ用意した法人種別の一覧に照らし一致したものを法人名と結合することいで正式な法人名を取得しています。ただし、こんな単純な処理だけではカバーできないものが多数あり、個別の対応でリカバリーしています。

[個別の対応を行ったもの]
・省庁など
・市役所、町役場など
・アマゾン -> アマゾン合同会社
・商工組合 中央金庫 -> 商工組合中央金庫
・三井金属鉱業株式会社
・学校法人聖学院
・読売新聞 東京本社 -> 株式会社読売新聞東京本社
・YKK AP株式会社 -> YKK AP株式会社

ただし、実際にはすでに社名変更されている法人名が複数あるようです。法人番号データベースと突合すれば抽出できるのですが、今回はそこまではしていません。

### 番地とビル名の分離
事業所郵便番号データでは番地以降が１つのデータとなっていますが、実際に利用する際には番地とビル名は分離したいだろうと考え、試みました。これが一筋縄ではいかずいくつかのデータは残念ながら自動で分離することはできませんでした。

0608529 ５丁目２番地北１条三井ビルディング５F　２番地の後ろで分離できず
1088571 ３－１０－１アーバンネット三田ビル８F　アーバンの「ー」が全角マイナスになっており対応できず
5008530 長住町香蘭地区NTTドコモ東海岐阜ビル　地区の後ろで分離できず
6308589 奈良女子大学コラボレーションセンター３F　番地なしのパターンに対応できず
2428610 都市計画事業渋谷（南部地区）土地区画整理事業地内７４街区１外　
0798501 ２３丁目１番９番　１番９号の間違いと確信

これらは個別の修整データを保持してDBを更新することにしました。

### 日本の住所の課題
今回は約22,000件の事業所郵便番号データにある住所に対して処理しましたが、実際にはまだまだ対応しきれていない住所のパターンがあると思われます。日本の住所はローカルルールが多すぎてとても大変です。
今後のデジタル社会に向けて「仕様」を定義してほしい・・・
【学習】Figma初体験！初心者が触ってみた感想

# はじめに
この記事では下記アドベンドカレンダーに参加したので、Figmaにはじめて触れた時の経験等をまとめていこうと思います

https://qiita.com/advent-calendar/2024/figma-design


## Figmaとは？
https://help.figma.com/hc/ja/articles/14563969806359-Figma%E3%81%A8%E3%81%AF

👆上記Figma公式のページに概要はありますが、プラス情報として、Figmaはアメリカの企業が提供するデザインツールであり、2012年にアメリカのスタートアップとして設立され、ブラウザ上で動作するデザインツールとして人気を集めているモノになります。日本生まれではなかった:flag_jp:


## Figmaと類似サービスについて
Figmaというものがざっくり理解できたところで、現在は他のデザインツールも沢山あります。他のツールとFigmaの違いについて表形式で見やすくまとめたものが下記表になります。
Canvaしか知らなかったのでこんなにも類似サービスがあることに驚きました:open_mouth:

| ツール名 | 特徴 | Figmaとの違い |
| - | - | - |
| Figma | - ブラウザ上で動作（インストール不要）<br>- リアルタイム共同編集が可能<br>- 無料プランあり | - ブラウザ主体なので環境を選ばない<br>- 初心者でも操作が簡単 |
| Adobe XD | - Adobeが提供するUI/UXデザインツール<br>- 強力なアニメーション機能<br>- Creative Cloudと連携 | - アニメーション機能が充実<br>- ローカルでの作業に強い |
| Sketch | - macOS専用ツール<br>- プラグインが豊富<br>- 長年の実績があり安定性が高い | - macOS専用<br>- チームコラボには追加ツールが必要 |
| Canva	 | - 簡単なデザインを手軽に作れる<br>- Webデザイン以外にも用途が広い<br>- 無料プランが充実 | - プロトタイピング機能は弱い<br>- デザインツールとしては簡易的 |
| InVision	 | - プロトタイピングやデザインプレゼンに特化<br>- コメント機能が充実 | - デザイン作成よりもプロトタイピングや共有向け |
| Axure RP	 | - 高度なプロトタイピング機能<br>- ロジックや動的動作の設計が得意 | - 高機能だが初心者にはやや複雑 |


https://helpx.adobe.com/jp/support/xd.html

https://www.sketch.com/

https://www.canva.com/

https://www.invisionapp.com/

https://www.axure.com/



### 使い分けの例
簡単に始めたい → Figma、Canva
プロ仕様を求める → Adobe XD、Sketch
プロトタイピングに特化 → InVision、Axure RP

## Figmaをはじめて触った時の感想
わたしがそもそもFigmaを使用するに至った経緯はプログラミングスクールの制作物作成の中で画面遷移図を作成する必要があったからです。
とりあえず、新規登録して始めよう。触りながら進めればどうにかなる。の精神で取り組みましたが、意外と時間がかかってしまいました。💦
感想としましては、記事だけでなく、YouTubeで事前にどんな機能があるのか、実際に動かしている状況を把握しておくとよりスムーズに進めることができたのではないかと感じています。

なので、これからはじめて触ってみるという方たちはぜひ、公式サイトだけでなく、動画解説付きの情報を収集してみることをお勧めします。


## Figmaについておもうところ
私自身は画面遷移図でしかFigmaを使用していないのですが、かなりいろんなことができ、使いこなせれば業務時間短縮？にもつながるのではないかと思っています

[![Image from Gyazo](https://i.gyazo.com/59d998168b32ca6282c16134ca03d5eb.png)](https://gyazo.com/59d998168b32ca6282c16134ca03d5eb)

実際にテンプレートのようなものを利用して始めることが可能で、種類も沢山あるのがうれしいです。
はじめこのテンプレートの存在を知らなく一から自分で作成していました😿


## さいごに
- 改めてFigmaと類似サービスを調べてみると多く存在することに驚きました。
- それぞれ特徴があるので、参考書と同じように自分が見やすいもの、使いやすいものを選ぶことで最終的はすぐにモノを作成できる人になれるのかな、と思いました。
- 参考になる記事・動画等を共有させていただきます。(このほかにも調べてみると知らなかったいろんな機能があり驚かされます。深く知りたい方はぜひ調べてみてください。）

https://www.youtube.com/watch?v=xZMR-ZNY08c

https://qiita.com/RyoWakabayashi/items/7abf561dcd49d0884c86
Proxmoxでコンテナ(CT)でK3Sを動かす(2024年版)

毎度、ググっても出てこない小ネタを取り扱っております。
本記事は個人的な見解であり、筆者の所属するいかなる団体にも関係ございません。

# 0. はじめに

以前、こんな記事を書いたわけでございます。

Proxmoxのコンテナ\(CT\)でK3Sを動かす \#kubernetes \- Qiita 
https://qiita.com/ynott/items/7bf39a63adbd2fcf6778

これはProxmoxの使い始めの頃で、CT(Container LXCコンテナのこと)を使って、K3Sを動かせられれば最高に便利なのでは？と思ってテストしてみたんですが、以外に面倒くさかったという落ちでした。

しかし、K3Sも進化(？)し、私の理解も進んできたので再度チャレンジしたら、以前よりも楽にできるようになっていたのでご紹介です。

通常、K3SをContainerで動かすと

1. /dev/kmsgが無いとエラーが出る
1. /proc/sys/vm/overcommit_memoryがReadOnlyだとエラーが出る
1. /proc/sys/kernel/panic_on_oopsがReadOnlyだとエラーが出る
1. /proc/sys/kernel/panicがReadOnlyだとエラーが出る

ということになり、動きません。

# 1. 対応方法

LXCは、非特権コンテナー(unprivileged container)にチェックを入れると、非特権コンテナーとして動きます。しかし、k3sは自分がrootで実行されているので特権を持っていると思っています。そこで上記のようなエラーが発生します。

そこで、k3sにあなたが動いている環境はrootではなく、UserNamespaceで実行されているのですよと以下の起動オプションを付けてあげます。

```systemd:
ExecStart=/usr/local/bin/k3s \
    server \
        '--tls-san' \
        '127.0.0.1' \
        --kubelet-arg=feature-gates=KubeletInUserNamespace=true \
        --kube-controller-manager-arg=feature-gates=KubeletInUserNamespace=true \
        --kube-apiserver-arg=feature-gates=KubeletInUserNamespace=true \
```

# 2. 前提条件

動かすには前提条件があります。

- Cgroupsがv2であること(Proxmox Ver7以降)
- CT(Container)がNested
- CT(Container)がUnprivileged Container
- CT(Container)で動かすOSが、Ubuntu 18.04以降、CentOS-8以降

# 3. 参考

高度なオプション / 設定 \| K3s 
https://docs.k3s.io/ja/advanced#%E3%83%AB%E3%83%BC%E3%83%88%E3%83%AC%E3%82%B9%E3%83%A2%E3%83%BC%E3%83%89%E3%81%AE%E6%97%A2%E7%9F%A5%E3%81%AE%E5%95%8F%E9%A1%8C

Running Kubernetes Node Components as a Non\-root User \| Kubernetes 
https://kubernetes.io/docs/tasks/administer-cluster/kubelet-in-userns/#running-rootless-kubernetes-directly-on-a-host

https://qiita.com/imriyaya/items/d022f2362f9d2a5ab592
Windows11で2回線を切り替える

**IPFactory Advent Calender 2024 9日目の記事です。**

https://qiita.com/advent-calendar/2024/ipfactory

# はじめに
こんにちは。0kqです。
先日自宅に予備のネット回線を契約しました。
ルーター2台とWindowsマシン1台を接続しPC側で2回線を切り替えて使えるように設定してみました。
※VRRPは組んでいません。

# 環境
OS: Windows 11
NIC: RTL8125BG

- VLAN: 1
    - WAN: 1
    - Gateway: 192.168.1.1/24
- VLAN: 2
    - WAN: 2
    - Gateway: 192.168.2.1/24


仮想NICで2つのタグVLANを1つの物理NIC流しています
https://tech-mmmm.blogspot.com/2022/02/realtekusb-nicvlan.html

![名称未設定ファイル.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/726125/51372a99-6323-355f-d851-8da22254123b.png)

# 手順
Powershellのコマンドで静的ルートを2つ設定
```cisco_ios
route add 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1
route add 0.0.0.0 mask 0.0.0.0 192.168.2.1 metric 2
```

メトリックを変更
VLAN1にしたい場合は以下のように設定
```cisco_ios
route change 0.0.0.0 mask 0.0.0.0 192.168.2.1 metric 2
route change 0.0.0.0 mask 0.0.0.0 192.168.1.1 metric 1
```

これらをbatファイル等で実行すればワンクリックで回線を切り替えられます。
キャリアブレイク中にやっている勉強⑤ 栄養学


今日もキャリアブレイク中に具体的にやっている勉強について書きます。その⑤は「栄養学」です。

# きっかけ
栄養学を学ぼうと思ったきっかけですが、栄養に関して興味を持って本を読んでみると兎に角不満がありました。それは割と味が置いてきぼりになっているなと感じたことです。皮には栄養があるので食べましょうと言われても味が落ちたら嫌です。でも味より栄養が上位に来ている本が多いと感じました。だから学びたいと思いました。

# 健康
もう一つ理由があって、これは別途書こうと思いますが、キャリアブレイク中の目標に健康があります。健康のキーワードは言わずもがな、睡眠、食事、運動です。その中でも一番回数が多い食事、つまり栄養を学ぶことは健康に繋がると思いました。これも栄養についてを学びたいと思った理由です。

# 学ぶにあたって
さて栄養学ってどうやって学べば良いでしょうか。図書館にそういうコーナーあったかな？と思った探した見たのですが、絶対的に本は少ないです。料理本、レシピ本の1/10もないと思います。あったとしてもひたすら食べ物と栄養素の数字が羅列しているような本だったりします。読みたいのはそういうのじゃないと思いました。またWebで探しても栄養学の学科がある専門学校や大学ばかりヒットします。

# 食生活改善指導担当者テキスト
そんな中で色々探しているうちに自分にとって最適な教科書を見つけました。それが厚生労働省が出している[食生活改善指導担当者テキスト](https://www.mhlw.go.jp/bunya/shakaihosho/iryouseido01/pdf/info03k-04-06.pdf)です。一見するとちょっと難しめですが、そもそも探しているゴールすら自分は分かっていなかったので、国が出しているし信用して読んでみるかと思いこれを読みました。結果的には凄く良い内容で正解だったと思います。

# テキストの内容
このテキストの内容で凄く良いなと思ったのは、「生体が必要とする全ての栄養素を、生体に過不足ない量で含む完全食品は存在しない」です。うん。ないんだ。だから色々取らなければならないというのは納得できます。卵とかで良いのかと思っていました。あと目安量の定義に「推定平均必要量を算定するのに十分な科学的根拠が得られない場合に算定された」とあってこれも信頼できるなと思いました。

# GitHub Markdownにメモ
というわけで例によって、書いてあることを読んでノートに書くことにしました。これに関してはGitHubに[勉強用のリポジトリ](https://github.com/binnmti/Study/blob/main/Notes/%E6%A0%84%E9%A4%8A%E5%AD%A6.md)を作って、[マークダウンファイル](https://github.com/binnmti/Study/blob/main/Notes/%E6%A0%84%E9%A4%8A%E5%AD%A6.md)を作ってそこに書いています。最初は何となくWebで見つけた情報とか雑多に書くのがDiscord、それを清書する場所をGitHubにしようとしていました。でもそこの境界はかなり曖昧です。

# メモの取り方
現在は五大栄養素について学んでいます。栄養学に関しては他の課目と同じように気になったことをただメモを取るではダメだと思い始めました。例えば「セルロース、ヘミセルロース、プロトペクチン、リグニン、キチン、イヌリン」ってメモを見直しても正直何も覚えてないです。僕はテストをクリアしたいわけではないので、もっと概要というか後から読み直しても分かる内容にしてメモらないと栄養学に関しては身に付かないなと思いました。

# 実践目標
栄養学の勉強を始めてすぐ、息子がふと言いました。「うちの朝食、赤色がない」。この赤色というのはテキストにもありますが、「魚、肉、卵、大豆製品」と「牛乳、乳製品、海藻、小魚」です。小学校でもバランスの良い食事としてこれを習うようです。実際、息子の朝食は、ほぼパンとバナナです。そして僕の朝食はほぼパンのみです。これは良くないと思い、改善を考えました。

# とりあえず３色
栄養学を学ぶのと栄養を満たした食事の用意は紐づいています。朝ごはんをしっかり用意するのは働いていると中々ハードルが高い作業です。キャリアブレイク中は時間を確保して、例えば、最近僕と息子の食事は、ハムチーズトースト、レタスとトマト、バナナ、牛乳です。先日はジャコ海苔トースト、レタスとトマト、バナナ、牛乳です。これだけ用意するだけでも今までよりは時間を使います。本当は米納豆、焼き魚、味噌汁、お漬物とかもやりたいところですが、土日にやって予想以上にかかってしまいました。平日常に完全な朝ごはんを用意するのはやっぱり無理です。。

# まとめ
栄養に関しても1日1時間程度学んでいます。これはコンピューター系の勉強と違って毎日ではなくて週2回ぐらいにしており、プライオリティとしては低めです。ただ栄養を学んで毎日の食事にフィードバックしていくのはなかなか面白いです。料理をするときに主食、主菜、副菜や6つの基礎食品群を考えるようになったのは、正直面倒な面もありますが、自分が年齢を重ねるとよりその恩恵は大きいと思います。
laravelのバリデーションが便利

## はじめに
laravelには、さまざまなバリデーションが用意されており、その中で入力された値が指定したテーブルに存在するかチェックするexistsが便利でしたので紹介します。
## 基本
```php
'id' => ['exists:table']
```
`table`テーブルの`id`カラムに`入力されたid値`が存在すること。
## チェックするカラムを指定
```php
'id' => ['exists:table,foreign_id']
```
`table`テーブルの`foreign_id`カラムに`入力されたid値`が存在すること。
## チェックするレコードを限定。
```php
'id' => ['exists:table,foreign_id,deleted_flag,0']
```
`table`テーブルの`deleted_flag`が`0`であるレコードセットに対して、`foreign_id`カラムに`入力されたid値`が存在すること。
対象レコードの条件は複数指定可能。
## 注意点
便利ですが、注意点もあります。
例えば、idが数値で10桁であることをバリデーションするため
```php
'id' => ['exists:table', 'digits:10']
```
と書くと、`exists`（DBアクセス）が先に行われてしまうため、
場合によってはセキュリティ上の問題が発生する可能性があります。
ですので、下記の様にルールの順番を変更する必要があります。
```php
'id' => ['digits:10', 'exists:table']
```
## まとめ
こういった、フレームワークの便利機能を積極的に利用して効率を上げたいところですが、
安易に利用せず、問題点がないか詳細な調査も必要だと感じました。
外部(副業)人材の 活用・協業について

## 背景
マナビDX QUEST※の経験者の方ならわかる「企業協働」
昨年企業協働のメンバーとして参加した際に(DX QUEST※2023)
デジタルトランスフォーム（デジタル技術、知識による社内変革）
についてロードマップをまとめている中で、思った点で

どうしても企業協働は短期の活動であり、また我々自体も経験不足な側面もあり
技術や考え方を学んでいただく半ばで活動終了となる関係上、
失礼ながら、学習を続け、自走出来るまで効果や実感できるまでは
進むことは難しいことが多いと思っています。
(もちろん優秀な受講生、企業様もいて十分な成果を得ているケースもあると
付け加えておきます）

それを補うための一つとして
「外部(副業)人材の活用」について経産省、中小企業庁、他社事例などから
まとめてみました。

もちろん、これだけが社内のデジタル化やDXなどを進める方法ではなく、
あくまで一例であることをご承知いただければ幸いです。

>※マナビDX Quest：経済産業省が実施する、デジタル推進人材育成プログラムのこと。
　（https://dxq.manabi-dx.ipa.go.jp/）

## 外部(副業)人材を活用するメリット(利点)
### 自社で採用が難しい人材を比較的安価に求めることが出来る
もちろんデメリットもあり
（基本リモートでコミュニケーションに負担や問題があるなど）

### 地方の活性化に貢献したい・自分のスキルを試したい、経験値を上げたい などの金銭以外の想いを持つ人材が得られる。
モチベーションの高い人材が多い。
モチベーションだけでなくスキルも高い人材も多い
  
![Screenshot 2024-12-05 21.33.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/8d611216-479b-eb5f-7e11-3f4c555cae55.png)


### プロジェクトなどに利害関係がないため客観的な提案が可能
（ベンダーなどであればソフト販売という利害関係があるため、どうしてもソフト購入を
やめたほうが良いと言った提案が正解であっても難しい）

### 社内人材への良い影響が出てくる
相互の話し合いなどで考え方を学べる。
また上記のようなモチベーションの高い人材も多く
影響を受けることが期待できる。

![Screenshot 2024-12-05 21.33.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/552279/5e10e3d4-b0f3-9832-6a8b-fe84958becac.png)


## 外部(副業)人材を活用するデメリット(欠点)
### 目標設定、相互理解の重要性
基本リモートなどでの活動になると思いますが
自社の経営方針や5-10年後の自社の姿を明確に持っておかないと
外部人材の提案が自社に合うものがどうかがわからず、
外部人材を使ってみたが効果がなかったということになることがあります。

### 業務によっては難しいものがある
例えば機密が多いものなどはなかなか外部(副業)人材では難しい部分がある
また企業の特性上、出社しないとわからない、出来ないようなものは
難しいかと

### 受け皿が必要（必須）になる
目標設定の項と似ていますが、データや困りごとを渡して終わりではなく
都度内容の話し合い、問題の明確化など、適宜話し合い内容を磨いていくことが
必要で、副次的には自社人材も刺激を受け変わっていくことが
期待できます。

## 外部(副業)人材活用の形態
### 期間・作業内容・納品物を明確して委託する「タスク型」
いわゆる「内職」に近い形態です。
作業内容や納期などが「明確に」決められた業務を
勤務時間外や家事・育児の隙間時間に依頼するケースなどが考えられます。
作業内容が一般的であったり、明確に書面などで作業内容が規定され、
切り出されているものでないと難しい部分があります。

>ソフトベンダーによるソフト開発やHP作成委託などがこれに該当します。
事前に成果物を相互で明確にしておかないと出来上がりが良くなっていきません。

>また標準化された作業を切り出して外部人材に行ってもらうといった使い方は
副業人材とは限られませんが、地方という場所や9時から5時と言った時間を超えて
柔軟に人材を確保する方法の一つとして考えられます。
例えば育児や介護の合間に遠隔地から数時間業務を行ってもらうなども考えられます。
（もちろんリモート環境を許せる業務、また切り出せるほどの業務の標準化が
出来ていることが条件で、失礼ながらこれがなかなか出来ていると言える
企業さまは規模の大小問わず少ないと思います、また給与対応、雇用形態によっては
雇用に関わる対応など難しい部分などがあると思いますが。。。）

### システム開発や新規事業の立ち上げに関わる「プロジェクト型」
専門知識やノウハウ、豊富な経験を有する副業人材に、
一つの案件・プロジェクトに関わってもらうタイプです。
イメージとしては、DX QUESTの企業協働に近く、
副業人材ー社内人材の連携や刺激を受けたりする点がメリットになり
またDXなどではこちらが外部(副業)人材の入口になるかと。

### 経営課題の解決に副業人材を活用する「ミッション型」
社内の経営層に近い人材同様に経営課題に助言やサポートを行う
イメージとしては税理士さんなどスペシャリストへの依頼に近く、
プロジェクト型で実績や信頼関係を構築できた人材の次のステップとして
長期に関係を維持していく関係の形を採られている企業様もいらっしゃいます。

>もちろんお相手の人材た企業側のお考えにもよりますが、
いわゆる副業での「金銭」報酬でなくても、商品や地方産品など「現物」や
企業や地方の方との交流や協業という「経験」を報酬にした副業もありえるかと。


## 最後に
デジタル技術もそうですが、「知らない」だけでやれていないことが
地方では多いと思います。
また情報に触れる機会も普段では少なく、
探そうとしようとしてもハードルが高いと思います。

ただそれを超えないと少子高齢化による、人材確保の難しさや市場縮小などへ対応できる
組織への変革が出来ないと思います。

また私も企業さんに選ばれる力量や経験を持てるように学習などを続けていかないとと
思う次第です。


## 参考資料
**経済産業局 関東経済産業局**
経営支援機関向け　中小企業への「兼業・副業人材」活用推進におけるヒント集
https://www.kanto.meti.go.jp/seisaku/jinzai/data/kengyo_hukugyo_hintshu.pdf

**中小企業庁**
事例から学ぶ！「副業人材」
https://mirasapo-plus.go.jp/hint/20187/

**ニュースサイト　GLOCAL MISSION TIMES** 
副業を受け入れ“井の中の蛙”から脱却！株式会社オキスの副業人材戦略とは
https://www.glocaltimes.jp/8852
windowsでiverilog その162

# 概要　
windowsでiverilogやってみた。
練習問題やってみた。

# 練習問題
九九を書け。

# サンプルコード

```

module test;
	integer p;
	integer stdin = 'h8000_0000;
	integer a,
		b;
	integer ch;
	reg [7:0] pc;
	reg [7:0] str[0:9];
	integer v;
	initial
	begin
		pc <= 10;
		v = 0;
		a = 1;
		b = 1;
	end
	always #1
	begin
		case(pc)
		10:
		begin
			$write("%0d ", a * b);
			a++;
			pc <= 20;
		end
		20:
		begin
			if (a < 10)
			begin
				pc <= 10;
			end
			else
			begin
				pc <= 30;
			end
		end
		30:
		begin
			$write("\n");
			b++;
			a = 1;
			pc <= 40;
		end
		40:
		begin
			if (b < 10)
			begin
				pc <= 10;
			end
			else
			begin
				pc <= 50;
			end
		end
		50:
		begin
			$finish(0);
		end
		endcase
	end
	initial
	begin
		//$monitor(" %d", pc);
	end
endmodule



```

# 実行結果

```
>vvp a.out
1 2 3 4 5 6 7 8 9
2 4 6 8 10 12 14 16 18
3 6 9 12 15 18 21 24 27
4 8 12 16 20 24 28 32 36
5 10 15 20 25 30 35 40 45
6 12 18 24 30 36 42 48 54
7 14 21 28 35 42 49 56 63
8 16 24 32 40 48 56 64 72
9 18 27 36 45 54 63 72 81
```

以上