OmniAICreator/Qiita-1.07M huggingface dataset:
スタジオジブリ風の動画が作れる！Ghibli AIジェネレーター完全ガイド【2025年版】

![ghibli-character-generator.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4033315/008ff640-2735-4027-9ece-90a2433c8f34.png)


スタジオジブリの作品には、どこか懐かしくて温かい、不思議な魅力があります。
ゆったりと流れる風景、優しい色彩、自然との共存、そして心を打つストーリー。そんな世界観を、自分の写真やアイデアから再現できるとしたら…？

いま、SNSを中心に注目を集めているのが「Ghibli AIジェネレーター」。
このツールを使えば、誰でも簡単に、自分の写真をジブリ風のアニメーションやイラストに変換することができるんです。

この記事では、Ghibli AIジェネレーターとは何か、どんなことができるのか、どのサービスを使えばいいのかなどを、初心者でもわかりやすく徹底解説していきます！

Ghibli AIジェネレーターとは？
Ghibli AIジェネレーターとは、AI（人工知能）を使ってジブリ風のスタイルを画像に適用するツールのこと。最近では、画像だけでなく、アニメーションとして動画に変換できるサービスも登場しています。

AIが自動で、以下のような特徴を写真に反映してくれます：

手描きのような水彩タッチ

柔らかく淡い色彩（パステル系）

自然や田園風景の優しい表現

映画のワンシーンのような構図

静かに動く雲や風、光の揺らぎなどのアニメーション

「写真をアップロードするだけ」で、まるでジブリ映画の一部になったかのようなビジュアルが完成するのが、最大の魅力です。

どんな作品が作れるの？
Ghibli AIジェネレーターでは、次のような作品を作ることができます：

自撮りをジブリキャラ風に変換（アニメの主人公気分に！）

風景写真をジブリ背景のように加工

画像に光の演出や雲の動きなどを加えたショート動画

テキストプロンプトから幻想的なアニメ世界を生成

キャラクター2人を登場させた物語風の映像クリップ

たとえば、「ひとりで夕暮れの森を歩く少女」というシーンを表現したい場合、実際の写真とともに簡単なテキストを入力するだけで、それっぽい情景が完成します。

なぜジブリ風が人気なの？
SNS時代において、「映える映像」や「共感されやすい空気感」がとても大切です。
ジブリ風の映像は、次のような理由から、世界中のユーザーに愛されています：

ノスタルジーを呼び起こす：子供時代を思い出すような感覚

癒やされる雰囲気：自然と静けさ、温かみがある

非現実なのにリアル：ファンタジーだけど、なぜか感情移入できる

SNSで注目されやすい：ジブリ風の作品は高確率で「いいね」がつく

実際、X（旧Twitter）やInstagram、YouTube Shortsでは「#GhibliStyle」や「#AIアニメ」で検索すると、多くの作品が投稿されているのがわかります。

おすすめのGhibli AIジェネレーター 4選
1. Deevid AI (https://deevid.ai/ja/ghibli-ai-generator)
特徴：写真1枚から16:9のショート動画を作成可能。背景にモーション（雲・光・風など）をつけられる。
強み：滑らかな演出とカメラワークで、映画の一場面のように仕上がる。

2. Flux1.AI
特徴：テキスト＆画像を入力して、アニメ絵風に変換。水彩やパステル調の優しいタッチ。
強み：「天空の城ラピュタ」や「ハウルの動く城」風の世界観を再現しやすい。

3. Insmind（Ghibli Filter）
特徴：フィルター系ツール。画像をアップロードするだけで、ジブリ風イラストに。
強み：プロフィール写真やブログのアイキャッチに◎

4. Kaiber AI
特徴：動画変換に特化したAI。多彩なアニメスタイルに対応。
強み：音楽やナレーション付きのストーリー動画制作にも活用可能。

きれいに仕上げるコツ
どんな画像でも使えるわけではなく、「素材の選び方や構図」で仕上がりが大きく変わります。
以下のポイントを参考にしてみてください：

明るすぎず暗すぎない、自然光の写真を使う

森・空・田舎の道など背景に余白がある写真がベスト

人物写真なら、正面＋表情がわかるものがきれいに処理されやすい

テキストを使う場合は、「やわらかい言葉」や「風景描写」を意識する（例：「風に揺れるススキの草原」など）

商用利用・著作権について注意
ジブリ風の画像や動画を商用利用したい場合は、以下にご注意ください：

「ジブリ風」＝スタイルの再現はOKだが、キャラ（例：トトロ・カオナシ）を使うのはNG

公開や投稿は基本的にOK（個人利用やファンアート扱い）

販売・広告素材などに使う場合は、各ツールの利用規約を確認すること

ジブリ公式ではないAI作品と明記すると安心

こんな人におすすめ！
SNSクリエイター：ショート動画やプロフィール動画に使いたい人

イラスト・マンガ系アカウント運営者

教育関係者・作家：物語や教材のイメージづくりに

趣味で絵や世界観作りが好きな人：自分の創作世界をビジュアル化したい方にぴったり！

まとめ：誰でも簡単に「ジブリの世界」に入れる時代
「AIなんて難しそう…」と思う方も安心してください。
Ghibli AIジェネレーターは、写真を1枚アップロードするだけで、数分以内に魔法のような映像が完成するとてもユーザーフレンドリーなツールです。

2025年の今、創造力と好奇心さえあれば、誰でもジブリのような世界を表現できる時代がやってきました。

休日に撮った風景や、愛犬の写真、自分の笑顔を使って、あなたもジブリのような作品を作ってみませんか？
Javaで実装されたTodoリストGUIアプリ

# Javaで実装されたTodoリストGUIアプリ

## はじめに

今までクライアント側での業務が多く、JavaScript での実装がメインでした。  
また、今まで勉強メインで活動していたため、個人開発には着手しておりませんでした。  
今回、下記の理由から「Javaで実装されたTodoリストGUIアプリ」を開発したので、こちらで共有します。  

### 理由

1. 開発の経験・知識を得たいから  
2. 「Java SE11 Gold」を持っているから  
3. 個人開発には興味があるから  
4. 時間ができたから  

## 目的

本記事では、基本機能(追加・更新・削除)についてご紹介します。  
学習用であることを考慮していただけると助かります！  

## 内容

基本機能以外の機能や内部設計については、後述するリポジトリをご参照ください。  

### 実行モジュール

下記、GitHub上のリポジトリで管理しております。  
実行される際は、README.mdをご参照ください。  

https://github.com/teppei19980914/TodoList/tree/main?tab=readme-ov-file  

### 動作イメージ

#### 1. Java のインストール/バージョン確認  

Javaのインストールに関しては、他ドキュメント等をご参照ください。  
Javaのバージョンは下記コマンドを実行することで確認可能です。  

```
java -version
```

下記のように、Java 8以上のバージョンであれば問題ありません。  

```
java version "19.0.1" 2022-10-18
Java(TM) SE Runtime Environment (build 19.0.1+10-21)
Java HotSpot(TM) 64-Bit Server VM (build 19.0.1+10-21, mixed mode, sharing)
```

#### 2. アプリの起動

「TodoList」ディレクトリ上でコマンドプロンプト等を起動してください。  
プロンプト上で下記コマンドを実行してください。  

```
java TaskManager
```

すると、アプリが起動します。  
デフォルトでは、「TodoList\Data\sample.csv」の内容が読み込まれます。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/079b4a90-9075-47f5-bb6e-142f15ad1529.png)  

#### 3. タスクの登録

タスクを登録してみましょう。  
タイトルや期限日に値を入力し、「追加」ボタンをクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/b4e9aecb-07ea-416a-87ca-0f2f655dac68.png)  

タスクが追加されました。  
各タスクは期限日の昇順に並び替えられます。もし、並び替えがうまくできない場合は、「最新化」ボタンをクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/6a10b6a7-0cdd-450a-b836-ec37d5860a42.png)  

「追加」ボタンでは、一件ずつタスクを登録しますが、複数タスクを一括で登録する場合は「一括登録」ボタンをクリックしてください。  

### 4. タスクの更新

タスクを更新してみましょう。  
まずは、先ほど登録した行をクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/1a75536a-2ee6-41b1-9849-0b0372099fc1.png)  

期限日を変更し、「登録」ボタンをクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/49f69a29-20db-4d24-b7fd-d99d89b5c67c.png)  

期限日が更新されました。  
同時に、優先度も変わったと思います。優先度は今日日付と期限日から「高・中・低」の中からシステムによって判定されます。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/b89abb99-0bda-4f8f-83a3-8228b2c0f934.png)  

### 5. タスクの削除

タスクを削除しましょう。  
まずは、先ほど更新した行をクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/ae955714-54a9-465e-9384-eca9f0240265.png)  

「削除」ボタンをクリックし、表示されるダイアログボックスから「はい(Y)」をクリックしてください。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/b061c88c-c6cd-4840-b9b2-90ca4a88c7d1.png)  

タスクが削除されました。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/659914/ab7dc464-2dc7-4d32-89c2-5dc9eb626b97.png)  

## さいごに

生成AIの力も借りて何とか動くアプリケーションを作成できました。  
自身でも実装のすべてを理解できているわけではないため、これから復習がてらアプリを使い倒してみようと思います！
ちなみに、最初の対応形式をCSVにした理由としては、[Pleasanter(プリザンター)](https://pleasanter.org/)との互換性を持たせるためです！  
ただ、単純にTodoListを使うためであれば、最初からPleasanterを使ったほうが断然良いですが。。。
Laravel のtail -f を簡単に使えるようにする

## はじめに
Laravel開発中、ログを確認することは欠かせない作業ですよね。
ブラウザで確認できないエラーやデバッグ情報を確認するために、ログファイルを見る機会は多いでしょう。

tail -f でリアルタイムにログを確認する際、毎回以下のようなコマンドを打つのは面倒です：

```bash
tail -f storage/logs/laravel-2025-05-13.log
``` 

特に日付が変わるたびに打ち直すのは手間がかかります。

手打ちするのはだるいので、ちょっと設定して当日のログを簡単に見られるようにしましょう。

## 解決方法
次のエイリアスを設定するだけです：
```
(bash)
alias ltail='tail -f storage/logs/laravel-$(date +%Y-%m-%d).log'
```
これを設定すると、laravelプロジェクト直下で ```ltail ```と入力するだけで、その日のLaravelログファイルをリアルタイムで監視できるようになります。

## 仕組み
このエイリアスは以下のように動作します：

①$(date +%Y-%m-%d) で現在の日付を「YYYY-MM-DD」形式で取得します
②これをファイル名 laravel-2025-05-13.log のように組み込みます
③tail -f コマンドでそのファイルを監視する

Laravelはデフォルトで日毎のログファイルを作成するため、この方法でその日のログファイルを自動的に参照できます。動作確認に便利。

# 永続的に設定する方法
このエイリアスを永続的に使えるようにするには、お使いのシェルの設定ファイルに追加します
macならターミナルで以下コマンドを打てば可能。

Bashの場合
```
echo "alias ltail='tail -f storage/logs/laravel-\$(date +%Y-%m-%d).log'" >> ~/.bashrc
source ~/.bashrc
```

Zshの場合
```
echo "alias ltail='tail -f storage/logs/laravel-\$(date +%Y-%m-%d).log'" >> ~/.zshrc
source ~/.zshrc
```

## 補足：クエリログ用のエイリアス

クエリログも同様に監視したいという場合は、別のエイリアスを追加しておくと便利です。

```bash
alias lqtail='tail -f storage/logs/query-$(date +%Y-%m-%d).log'
```

これで `lqtail` コマンドでその日のクエリログを監視できるようになります。SQLのクエリをリアルタイムに確認したいときに重宝します。

永続化するには上記と同様に設定ファイルに追加します。

Bashの場合
```
echo "alias lqtail='tail -f storage/logs/query-\$(date +%Y-%m-%d).log'" >> ~/.bashrc
source ~/.bashrc
```

Zshの場合
```
echo "alias lqtail='tail -f storage/logs/query-\$(date +%Y-%m-%d).log'" >> ~/.zshrc
source ~/.zshrc
```

## まとめ

たった1行のエイリアス設定でLaravelログの確認作業がぐっと楽になります。
数秒の効率化ではありますが、利用頻度が高いコマンドなので地味に便利です。

日々のデバッグやトラブルシューティングの時間短縮にぜひ活用してみてください！
【Java】equalsメソッドでnull同士の比較はできないの？

## 記事を書こうと思った背景

Java Silverの学習中に題名の通りの疑問が浮かんだ
まずは問題
```
// 以下のプログラムを実行したときの挙動を選びなさい。
public class Main {
    public static void main(String[] args) {
        Object a = new Object();
        Object b = null;
    System.out.println(a.equals(b));
    }
}
```
1. true
1. false
1. コンパイルエラー
1. 例外が発生

答えは2のfalse

解説によると、equalsメソッドでは引数にnullを渡された時はfalseを返すという条件があるから、とのこと。
そこで、いやいやnull同士の比較したらtrueになるんじゃね？
aもnullを参照していたらnull同士の比較になるのではないか、そしてnull同士なので、trueにならないかという疑問を抱いたわけです。

## null同士の比較はあり得る？
結論としてはあり得ない。
nullを参照している変数からequalsメソッドを呼び出すとぬるぽ（NullPointerException）で強制終了してしまい、実行ができないから、という理由です。
例えば、下記のコードを実行するとぬるぽで落ちます。
```
public class Main {
    public static void main(String[] args) {
        Object a = null;
        Object b = new Object();
    System.out.println(a.equals(b));
    }
}
```
## （参考）ぬるぽとは
java.lang.NullPointerExceptionはJavaで最も一般的なランタイムエラーの一つで、オブジェクト参照がnullの状態でそのオブジェクトのメソッドを呼び出したり、フィールドにアクセスしようとしたときに発生します。
引用元：https://dtnavi.tcdigital.jp/cat_system/language_238/?utm_source=chatgpt.com

## 参照型の初期値はnullである、それならtrueになるのでは？
（別の角度からの視点ですが）同じ疑問を持った方がネット上で質問をしていました。
対象サイト：https://teratail.com/questions/27482
ここでは、質問者が「参照型の初期値はnullになる」ということを学び、じゃあオブジェクトをインスタンス化し、変数に値を入れなければnullが入っているから、null同士の比較もあり得るんじゃね？という疑問ですね。
つまり下記のコードでaにはnullが入っているのではないか、という解釈だと思われます。
```
public class Main {
    public static void main(String[] args) {
        Object a = new Object();
        Object b = null;
    System.out.println(a.equals(b));
    }
}
```
結論としては、aにはnullを参照しておらず、実行結果はfalseとなります。
理由はすでに述べた通り、equalsメソッドでは引数にnullを渡された時はfalseを返すという条件があるかです。
では参照型の初期値がnullというのはどういうことか、オブジェクトのインスタンスがnullを参照しているのではなく、オブジェクトが持つ参照型の変数の初期値がnullということ。
例
```
// オブジェクトのインスタンスがnullを参照している例
Object obj2;  // null
Object obj3 = null;  // str1と同じnull
```
```
// オブジェクトが持つ参照型の変数の初期値がnull
public class User {
    String name; // null
}

public class Main {
    public static void main(String[] args) {
        User u = new User();
            if(u.name == null){
                System.out.println("nameはnullです");
            }  
    }
}
```
実行結果
```
nameはnullです
```
実行結果から分かる通り、Stringや他クラスのインスタンスなどの参照型の変数では初期値でnullが入っています。

ではaの場合はというと、試しに下記コードを実行してみると、ハッシュ値を出力されることがわかります。
```
public class Main {
    public static void main(String[] args) {
            Object a = new Object();
        System.out.println(obj1); 
    }
}
```
実行結果
```
java.lang.Object@7ad041f3
```
ここからさらに深掘りしていくとキリがないので今回はここまでとします。
## まとめ
少し話が逸れてしまいましたが、まとめます。
nullを参照しているオブジェクトからequalsメソッドを呼び出すと、ぬるぽで落ちる。
インスタンスがnullを参照していることと、オブジェクト型が持つ参照型の変数の初期値がnullを参照していることは意味が異なる。

Java初学者にはわかりずらいですがnullについて理解する一歩として、いいきっかけとなりました。
画面フローのルックアップコンポーネント設定方法

# なぜ書いたのか
画面フローのルックアップコンポーネントの設定方法を毎回調べているので記事として残しておく。
設定項目の名前に対して何を入力するのかがぱっと見で分かりづらい。ヘルプテキストを読んでもまだ？となる。
他のコンポーネントも今後躓くことがあれば書き足そう。

# ルックアップコンポーネント
![スクリーンショット 2025-05-13 115525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4044646/cb07660a-5925-4cc7-b109-f15c3c37e7d0.png)

公式help

https://help.salesforce.com/s/articleView?id=platform.flow_ref_elements_screencmp_lookup.htm&type=5

## API参照名
- このルックアップコンポーネント自体のAPI参照名を入力する
- 命名規則は組織の環境ごとに決めて、それに沿ったものにすればいいが、API参照名を見てどんなものか判別できるような名前にするのがよい。
- 私はコンポーネントや要素の種類の名前ではじめている。ルックアップコンポーネントなら「lookup_」ではじめる
- フローの具体的な実装方針についてはこのページがとても参考になる。
    - https://shunkosa.github.io/lightning-flow-recipes-jp/design-guideline/
- （こういう命名規則こそ、いちいち考えるのではなくAIにばっと命名してもらいたいな、と思う）
## オブジェクト API 参照名
- ルックアップ項目が存在するオブジェクト自体のAPI参照名を入力する
- たとえば、ルックアップコンポーネントで取引先責任者を指定して、その取引先責任者に紐づくケースオブジェクトを検索する画面フローを作成するとしよう。この場合は「Case」と入力する
- ヘルプテキストには「ソースオブジェクトのAPI参照名」と補足があるが、何を記載すればいいのか分かりづらいので注意
## 項目 API 参照名
- ルックアップ項目のAPI参照名を入力する
- ルックアップコンポーネントで取引先責任者を指定して、その取引先責任者に紐づくケースオブジェクトを検索する画面フローを作成する場合は「ContactId」と入力する
## 表示ラベル
- このコンポーネントの表示ラベル
## Disabled
- true に設定されている場合、ユーザーは値を変更できない。参照のみにしたいときに設定するのかな？
- デフォルト値はfalse
## レコード ID
- よく分からない。helpによると、
    > [最大選択数] が 1 であるか、[最大選択数] が 1 より大きく、[レコード ID コレクション] 項目が null である場合、最初はルックアップのデフォルトで選択されたレコード ID になります。
ユーザーがフローを実行すると、この値はフローユーザーが選択した内容に変更されます。
## レコード ID コレクション
- よく分からない。helpによると、
    >[最大選択数] が 1 より大きい場合、最初はルックアップのデフォルトのレコード ID になります。
[最大選択数] が 1 より大きく、[レコード ID] 項目が null の場合、最初の値は、ルックアップのデフォルトで選択されたレコード ID になります。
レコード ID は [最大選択数] の値以下であればいくつでも指定できます。
ユーザーがフローを実行すると、この値はフローユーザーが選択した内容に変更されます。 
## 最大選択数
- よく分からない。helpによると、
    >ユーザーが選択できるレコードの最大数。デフォルト値は、1 です。
## 必須
- 必須入力にする場合はtrueを入力。

# よく混乱するところ
「オブジェクト API 参照名」と「項目 API 参照名」がとにかく混乱する。
このオブジェクトのこの参照項目を指定するんだ、という覚え方とあとは慣れかな。。。
日本語で書けないしべた書きじゃないといけないし。もうちょっと改善されるといいな、と思います。

# そのほか
レコードIDとかは使い方と使いどころがよく分からず。分かったら追記します。
【Node.js】nodemonが動いたり動かなかったりする

## 問題 nodemonが使えない
Node.jsのファイルをnodemonで起動すると動かない

成功(running nowと出れば動いている)
```
...directory>nodemon index.js
[nodemon] 3.1.9
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node index.js`
running now
[nodemon] clean exit - waiting for changes before restart
```

失敗(running nowが出ていない)
```
...directory>nodemon index.js
[nodemon] 3.1.9
[nodemon] to restart at any time, enter `rs`
[nodemon] watching path(s): *.*
[nodemon] watching extensions: js,mjs,cjs,json
[nodemon] starting `node index.js`
```
## 現象 いつ使えて、いつ使えないのか
```
nodemon index.js
→動かない

node index.js
→動く

npm uninstall node
nodemon index.js
→動くが、後に動かなくなる

npm uninstall node
npm install node
nodemon index.js
→動くが、後に動かなくなる
```

## 解決策
ローカルにファイルを移動する

## 要因
会社で使用しているOneDrive上にファイルがあったため、それに起因する要因でこの現象が起きていたようです

上記のような現象になった際、モジュールを入れたり消したりしていると権限エラーが出てきて気がつきました
【成果まとめ】SSDモデルをTensorFlow2で学習→推論成功！20クラス学習の推論結果と改善ポイントの洗い出し


## はじめに
現在転職活動中の近藤です。
先日、TensorFlow 1系ベースでKeras実装されたSSD（Single Shot MultiBox Detector）をTensorFlow 2.18.0仕様に修正し、学習・検証を行いました。
今回の記事では、モデルの**学習の経過と推論結果を可視化**し、**精度の課題と改善点**をまとめた内容を共有します。


---

## 🖥️ 使用環境

| 項目         | 内容                          |
| ---------- | --------------------------- |
| 実行環境       | Google Colab（学習GPU: Tesla T4） |
| TensorFlow | 2.18.0                      |
| Python     | 3.11.12                        |
| データセット     | VOC2007 trainval / test     |
| モデル構成      | SSD300（VGG16ベース）            |

---

## 📉 学習の様子

* 30epochを実行
* 学習時間は約17時間
* `loss`: 約2.5 → **1.9** に収束
* `val_loss`: 2.95 → **2.90**前後で停滞（収束せず）

📈 **学習中のLoss推移**
![ssd_tf2_train_loss_01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046428/ec5ca665-7046-455b-bcbd-022bdc2e39d2.jpeg)


---

## 🔍 推論結果と評価

### 🧪 検証条件

* 使用モデル：val\_loss最小の **13epoch**モデル
* モデルの検出クラス：'Aeroplane', 'Bicycle', 'Bird', 'Boat', 'Bottle',
'Bus', 'Car', 'Cat', 'Chair', 'Cow', 'Diningtable',
'Dog', 'Horse','Motorbike', 'Person', 'Pottedplant',
'Sheep', 'Sofa', 'Train', 'Tvmonitor'の20クラス
* 検証データ：VOC2007 test
* NMSしきい値：**0.45 → 0.3** に調整
* 判定確信度：**0.6以上** のみ表示

---

### ✅ 判定できた画像（うまく検出）

![01_model_good_prediction.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046428/3b941111-8b38-4c9d-b8e4-2db4ee90d1a3.jpeg)
![成功画像](ここに貼ってね)

### ❌ 判定失敗画像（誤検出・過検出）

![01_model_bad_prediction.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4046428/888448b1-b3ee-44ec-b133-5c1a0a815f93.jpeg)


数百枚を目視確認した結果、全体の精度は **約40〜50%程度** でした。

---

## 🔥 課題と改善ポイント

#### 1.VOC2012の学習データを追加
→SSDの論文ではVOC2007だけでなく、VOC2012も学習データとして使用していたので、同じようにVOC2012の学習データを追加する。
#### 2.クラスごとの学習枚数を調整
→クラスによって精度の偏りが大きい。学習データが少ないクラスにはaugmentationで水増ししてデータ量のバランスを調整する。
#### 3.learning_rateの調整
→途中で学習率を下げて後半でうまく収束させる


---

## ✨ 得られた学び

* TF2環境で旧コードを動かすための修正力とデバッグ力が身についた
* 修正作業を通じてモデルの構造に触れ、学ぶことができた
* 学習・推論結果の可視化を通じて、課題を得る経験ができた

---

## 🔗 詳細記事はこちら

🔗 [【物体検出】ColabでSSD-Keras（TF1）を動かすためにTensorFlow 2対応した全作業記録](https://qiita.com/Tech_Kondo/items/ed304b849f911df12b19)

---

## ✍️ おわりに

ここまで読んでくださってありがとうございました！
現在GoogleColabのGPUの使用制限が来てしまい、モデルの精度改善作業に取り掛かれずにいたので備忘録として成果と考察をまとめてみました🌱
はやく制限が解除されてVOC2012の学習データを追加した再学習結果を更新したいです💥
この記事がTF1→TF2対応や物体検出モデルの再利用を試みる方の参考になれば幸いです。
**いいね・ストック・フォロー**してもらえるととても励みになります！
面接して気づいた。「調べない人」に社内SEは任せづらいという話

# 社内SE採用で「この人に来てほしい」と思う条件とその理由

こんにちは。私は現在、自社の**社内SEポジションの採用面接**を担当しています。  
この記事では、私自身が面接の場で「こういう人に来てほしい」と感じている条件と、その背景にある理由を整理してみたいと思います。

世の中には多くの「求める人物像」テンプレートがありますが、**社内SEという職種に特化した“本音ベース”の視点**は案外少ないかもしれません。  
この記事が、社内SEを目指す方の参考になれば嬉しいです。

---

## 第1章：「社内SEってヘルプデスクのことですよね？」から脱してほしい

正直に言うと、社内SE志望で応募される方の中には

> 「社内のパソコン関係、なんか直す人」＝社内SE

と思っている方がまだまだ多いです。  
特に未経験の方にその傾向は顕著です。

もちろん、ITヘルプデスク業務も社内SEの大切な仕事のひとつです。  
でも、実際の業務はもっと広くて深い。

- システム企画の立案  
- 業務システムの開発～運用保守  
- IT統制・セキュリティ管理  
- 社内インフラの設計・構築  
- プロジェクトマネジメント　などなど……

そう、**“なんでも屋”だけど“なんでもいいわけじゃない”** のが社内SEなんです。

---

ここで少し立ち止まって考えてみてください。  
目の前にはネットもある。Qiitaもある。ブログも記事も山ほどある。  
**調べれば、こうした社内SEの実態には必ず行き着けるはずなんです。**

だからこそ、面接の場で「ヘルプデスクを中心に～」というテンプレ反応を見ると、

> 「え、事前に全然調べてこなかったの……？社内SEの中のヘルプデスクだけがあなたのやりたいこと？」

と、どうしても感じてしまうのです。

---

社内SEは、調査・ヒアリング・設計・調整・改善……と  
**“調べて考えて動く”仕事の連続**です。

だからこそ、「そもそも調べてこない」という姿勢には、

> **エンジニアの基礎力が足りていないのでは？**

という目線で見てしまいます。

もちろん、最初から完璧な理解を求めているわけではありません。  
ですが、

> **「この仕事、どうなってるんだろう？」と掘る力・調べる姿勢**

これは、経験よりも先に見せてほしい大切なポイントなのです。

---

## 第2章：「なぜ社内SEなのか？」を自分の言葉で語れるか

これは、経験者にも未経験者にも共通して言えることです。

転職理由や志望動機において、

- どんな問題意識を持っていたか  
- なぜ社内SEを選ぼうと思ったか  
- それに向けて何を考え、どんな努力をしたのか  

これらを**自分の言葉で論理的に語れるか**どうかは、非常に重要です。

特に社内SEは「課題の発見」から「関係者とのすり合わせ」まで、  
**技術以前に思考と言語の解像度が問われる職種**です。

だからこそ、「考え抜いた人」には自信を持ってGoサインを出せます。

---

## 第3章：「仕様書がないなら自分で作る」くらいの自走力と抽象思考

社内SE業務って、実は**あいまいな要求や、存在しない仕様書**と日々格闘するポジションでもあります。

「このツールが動けばいい」ではなく、

>「そもそもこの業務フロー、必要？」「本質的に改善できる設計って何だろう？」

といった**抽象思考と再設計志向**が求められます。

そして、「誰かが設計してくれるのを待つ」のではなく、自分で「こうやれば動くと思うんですが」と  
**仮説を持ち、自ら動ける人**が活躍できる世界です。

---

## 第4章：ITスキルより「わかりやすく伝える力」が先にくる

「え、社内SEなのに技術力はそんなに重視しないの？」と思われるかもしれません。  
もちろん、あった方がよいに越したことはありません。  
でも、**実はそれが最重要ではない**んです。

なぜなら社内SEの多くは、

- ITに明るくない人に説明する  
- 上司や他部門と要件をすり合わせる  
- 仕様を図や言葉に落とし込んで合意をとる  

こうした**社内調整・説明・交渉**のコミュニケーションこそが、大半の時間を占めます。

だから、「わかりやすく説明できる力」「非エンジニアとの会話力」が  
**スキル以上に問われる**のです。

---

## 第5章：技術はあとからでも伸びる、けど思考と姿勢は変えにくい

誤解のないように言うと、技術力がいらないという話ではありません。  
むしろ、入社後には

- 各種システムの設計・開発  
- 社内向けシステムの要件整理と導入支援  
- ユーザー部門とのすり合わせ  

など、**専門性を問われる技術的業務**も当然あります。

ただし、技術は時間と努力をかければキャッチアップできます。  
でも、

> 「物事を論理的に考え、構造化して伝える力」  
> 「社内に対する誠実な姿勢」

これは、**採用の段階でにじみ出てしまうもの**でもあり、入社後に急成長させるのが難しいのです。

---

## おわりに：構造的に考えられる人は、社内SEとして輝ける

社内SEは、単なる裏方や保守要員ではありません。  
業務の根幹を支え、時に再設計し、関係者と協調して「よりよい仕組み」を築いていく仕事です。

だからこそ、

> **構造を理解し、そこに自分の経験を接続して、どう貢献するかを描ける人**

には本当に来てほしいと思っています。

この記事が、社内SEを志すあなたの助けになれば嬉しいです。  
最後まで読んでいただき、ありがとうございました！
ポート番号について


**1. ポート番号とは**

ポート番号とは何か

**ポート番号**とは、コンピューターがネットワーク上で通信するときに**「どのサービスとやり取りするかを決める番号」**です。

### **🔹 ポート番号を簡単に説明すると…**

インターネットでは、コンピューター同士が**IPアドレス**を使って通信します。でも、IPアドレスだけでは**「どのサービスと話すのか？」**がわかりません。  
そこで登場するのが **ポート番号** です！

📌 例えば：

- **「IPアドレスだけ」** → 家の住所（どの家かはわかる）
- **「IPアドレス + ポート番号」** → 部屋番号（どの部屋の人と話すかが決まる）

つまり、**ポート番号は「通信の入り口を指定する番号」**です！

### **🔹 なぜポート番号が必要なの？**

1️⃣ **同じIPアドレスでも複数のサービスを動かせる！**  
   例えば、1つのサーバーで「ウェブページ（HTTP）」と「メール（SMTP）」を動かしていても、**ポート番号が違えばどのサービスと通信するかが分かる！**

2️⃣ **決まったポート番号で通信できる（標準化）**  
   世界共通で有名なサービスには**「標準ポート番号」**が決まっているので、誰でも簡単に通信できる。

### **🔹 よく使われるポート番号一覧**

| **ポート番号** | **サービス** |
| --- | --- |
| **80** | HTTP（ウェブサイト） |
| **443** | HTTPS（暗号化されたウェブサイト） |
| **25** | SMTP（メール送信） |
| **110** | POP3（メール受信） |
| **22** | SSH（リモート接続） |

### **🔹 まとめ**

✔ **ポート番号は「どのサービスと通信するか」を決める番号**  
✔ **IPアドレスが「住所」、ポート番号が「部屋番号」みたいな役割**  
✔ **世界共通の標準ポートが決まっているので、スムーズな通信が可能**

**2. 代表的なポート番号**

代表的なポート番号はウェルノウンポートと呼ばれています。ウェルノウンポートをいくつか挙げてください。また、それぞれのポート番号が何のために使われているか説明してください。

**ウェルノウンポート（Well-Known Ports）**とは、**0～1023番のポート番号**のことで、世界的に標準化されている通信サービスが使用するポート番号です。これらのポートは、OSやネットワーク機器が予約しているため、一般のアプリケーションでは使用できません。

### **🔹 代表的なウェルノウンポートと用途**

| **ポート番号** | **用途** |
| --- | --- |
| **20** | FTP（ファイル転送プロトコル） - データ転送用 |
| **21** | FTP（ファイル転送プロトコル） - コントロール用 |
| **22** | SSH（セキュアシェル） - リモート接続 |
| **25** | SMTP（メール送信） |
| **53** | DNS（ドメイン名をIPアドレスに変換） |
| **80** | HTTP（ウェブサイトの閲覧） |
| **110** | POP3（メール受信） |
| **123** | NTP（時刻同期） |
| **143** | IMAP（メール受信） |
| **443** | HTTPS（暗号化されたウェブサイトの閲覧） |

### **🔹 もっと詳しく！**

✔ **HTTP（80番）** → ウェブサイトを見るときに使われる標準ポート  
✔ **HTTPS（443番）** → セキュアなウェブ接続（SSL/TLSを使用）  
✔ **DNS（53番）** → `www.google.com` をIPアドレスに変換する通信で使う  
✔ **SMTP（25番）** → メールを送信するときの標準プロトコル  
✔ **SSH（22番）** → サーバーへ安全にリモートログインするときに使う

これらのポートは、インターネットやネットワーク通信をスムーズに行うために不可欠です！


### **ポート番号を指定するとどうなる？**

ウェブページを開く際に、`https://www.google.com:443` は正常に表示されますが、`https://www.google.com:22` は表示されません。その理由は、**ポート番号がサービスごとに決まっている**からです。

📌 **具体的な理由:**

1. **ポート443（HTTPS）はGoogleのウェブサーバーで開かれている**
    - HTTPS通信は**標準でポート443**を使用する。
    - `https://www.google.com:443` は**通常のウェブアクセスと同じ**ため、問題なくページが表示される。
2. **ポート22（SSH）はGoogleのウェブサーバーでは開いていない**
    - **ポート22はSSH専用**（サーバー管理用のリモート接続）。
    - Googleのウェブサーバーはこのポートで**ウェブページを提供していない**ため、アクセスできない。

つまり、**サーバーが特定のポートでどのサービスを提供しているかによって、ページが開くかどうかが決まる**んですね！


### **🔹 なぜ通常はポート番号を指定しないの？**

普段ウェブページを開くとき、`https://www.google.com` や `http://example.com` のように、**ポート番号を省略してアクセスするのが一般的**です。その理由は：

1. **標準ポートが決まっている**
    - HTTP（ウェブページ）は **80番**
    - HTTPS（暗号化されたウェブページ）は **443番**
    - ほとんどのウェブサイトは**これらの標準ポートを使っているため、ユーザーが意識しなくてもアクセスできる**。
2. **ブラウザが自動で適切なポートを選択**
    - `https://www.example.com` → **ブラウザは443番を使う**
    - `http://www.example.com` → **ブラウザは80番を使う**
    - このため、**ユーザーはポート番号を入力する必要がない**。
3. **利便性が向上**
    - 毎回ポート番号を指定するのは面倒！
    - ブラウザが標準ポートを自動選択することで、誰でも簡単にウェブページにアクセスできる。
windowsでiverilog その163

# 概要　
windowsでiverilogやってみた。
cpu見つけたので、やってみた。

# 参考にしたページ

https://qiita.com/yoshiki9636/items/62557960699dd92d3008

# cpuの仕様
名前 : Simple8bitCPU 
レジスタマシン　8bit
1命令２語
ROM 8bit 256byte
RAM 8bit 256byte
レジスタ　8bit４個
プログラムカウンタ１個


## 命令セット一覧（Opcodeベース）
|Opcode |命令名 |内容 |備考|
|:-|:-|:-|:-|
|0x01 |LOAD A, imm |A ← imm
|0x08 |LOAD B, imm| B ← imm
|0x10 |LOAD D, imm |D ← imm |★ 拡張命令（NEW）
|0x03 |STORE A, [addr] |mem[addr] ← A|未使用
|0x06 |MOV [A], B |mem[A] ← B
|0x02 |ADD A, imm |A ← A + imm |減算時は imm = 0xFF
|0x0C |ADD B, imm |B ← B + imm |未使用
|0x0D |SUB B, imm |B ← B - imm
|0x11 |SUB D, imm |D ← D - imm |★ 拡張命令（NEW）
|0x09 |XOR B, imm| B ← B ^ imm
|0x0B |XOR C, imm |C ← C ^ imm
|0x05 |OUT B[0] |out_pin ← B[0] |未使用
|0x0A |OUT C[0] |out_pin ← C[0] |実際の出力に使用
|0x04 |JMP addr |PC ← addr |無条件ジャンプ
|0x07 |JNZ A, addr |if A ≠ 0: PC ← addr |else PC ← PC + 2
|0x0E |JNZ B, addr |if B ≠ 0: PC ← addr
|0x12 |JNZ D, addr |if D ≠ 0: PC ← addr |★ 拡張命令（NEW）

## レジスタ構成
A, B, C, D: 汎用8bitレジスタ

## 備考
C[0] が out_pin に接続され、XORトグルに使われている
初期化時に、メモリーにROMデータ（プログラム）を転送してる。（なんで？）
プログラムカウンタは、2個ずつ進む。
命令１個目は、オペコード、２個目は、オペランド。
フラグは、無くて、レジスタのゼロを利用。
RAMのアクセス、ストアはあるけど、読込み無し。

以上。
テーブル設計におけるデータ型と制約の基本

# データベースのデータ型と制約

本記事は Progate の動画講義「[データベース](https://youtu.be/1cDFSxV7UKQ?si=P1rJ_J3sRHE-dZHT)」を参考にしています。

---

## データ型

- エンティティの属性ごとに決める  
- 値がとりうる範囲のこと  

> **注意点**  
> 後から変更することもできるが `ALTER TABLE` 処理は重くなりがちなので、あらかじめきちんと設計しておく。

---

### データ型の種類

#### 数値データ型

| 型名     | 範囲                  | サイズ | 備考                         |
|----------|-----------------------|--------|------------------------------|
| TINYINT  | -128 ~ 127 / 0 ~ 255  | 1 byte |                              |
| INT      | TINYINTより大きな数値        | 4 byte | IDに使うには足りないこともある |
| BIGINT   | INTよりも大きな数値   | 8 byte |                              |

※ この他にも少数やビット値を扱う型がある。

#### 日付データ型

| 型名      | 内容                      | 範囲                                    |
|-----------|---------------------------|-----------------------------------------|
| DATE      | 日付のみ                  | `'1000-01-01'` ~ `'9999-12-31'`         |
| DATETIME  | 日付＋時間                | `'1000-01-01 00:00:00'` ~ `'9999-12-31'` |
| TIMESTAMP | タイムゾーンを扱える型    | -                                       |

#### 文字列データ型

| 型名     | 特徴                                     | 長さ         | 備考                           |
|----------|------------------------------------------|--------------|--------------------------------|
| VARCHAR  | 可変長：文字列の長さに応じて容量を確保   | 0 ~ 65535文字 |                                |
| CHAR     | 固定長：長さに関係なく容量を確保         | 0 ~ 255文字  | 郵便番号などに適している       |
| TEXT系   | 長文データ用（MEDIUMTEXT / LONGTEXTなど）| -            | VARCHARで収まらない長さにも対応 |

---

## 制約

- データの整合性を保つための仕組み  
- 制約に違反したクエリを実行すると、DBがエラーを返す

---

### 制約の種類

#### 主キー（`PRIMARY KEY`）制約

- 一意であることを保証
- `NULL` を禁止
- 1テーブルに1つだけ設定可能

#### NOT NULL(`NOT NULL`) 制約

- `NULL` でないことを保証

#### ユニークキー（`UNIQUE KEY`）制約

- 一意であることを保証
- 主キーと異なり、複数のカラムに設定可能

#### 外部キー（`FOREIGN KEY`）制約

- 参照先のレコードが存在することを保証

---

## データ型・制約を定義する方法（SQL）

```sql
CREATE TABLE Users (
    id INT PRIMARY KEY,             -- 整数型、主キー
    username VARCHAR(50),          -- 最大50文字の文字列
    email VARCHAR(100) UNIQUE,     -- 一意の文字列
    birth_date DATE,               -- 日付型
    is_active BOOLEAN,             -- 真偽値型
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP -- タイムスタンプ型、デフォルト値
);
FigmaでLottieアニメーションを作成してみよう！

こんにちは！albedo Japanデザイナーチームです。

今回は「普段Figmaを使っているけどアニメーションを作る時ってどうすれば…？」
なデザイナーの方、「手軽にアニメーションを実装したいけどどんな方法がある？」なエンジニアの方向けの記事になります。

## Lottie（ロッティ）とは
軽量なアニメーションをWebやアプリに簡単に組み込めるファイル形式／ライブラリです。JSON形式に書き出し、コードで制御しながら表示することが可能です。

ここではFigmaで作成したアニメーションをLottieに書き出す方法をシェアしていきたいと思います。Figmaのプロトタイプとプラグインを使えば意外と簡単に作成できますので、ぜひチャレンジしてみてください！
## Lottieのここが良い！
アニメーション表現にはさまざまな手法がありますが、その中でもここ数年で特に注目を集めているのが「Lottie」です。

**1.ファイルサイズが小さい**
→JSON形式でできているから、GIFや動画よりずっと軽量。表示もスムーズ。

**2.どこまで拡大してもキレイ**
→べクター形式なので、解像度を気にすることなく拡大縮小可能。

**3.[Web Player](https://lottiefiles.com/web-player)を使えば実装も手軽**
→コピペでアニメーションが動く。

以下、具体的な作成方法を書いていきます！

## [LottieFiles](https://lottiefiles.com/jp/)アカウントを作成する
![01.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/0456af9a-1d38-4963-8311-9d4c0967e739.jpeg)

有料版もありますが、基本の利用は無料です。

## 動かしたい素材を用意する
![02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/081a6a45-2fa0-4ea0-b1c6-13701674c0b3.jpeg)


ローディングのアニメーションを想定しざっくり用意してみました。
## プロトタイプの作成
トリガーは自動的に動きを開始させる「アフターディレイ」、アニメーションはなめらかに繋いでくれる「スマートアニメート」の設定で行うのがおすすめです。![03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/699cfef2-2f13-403c-be88-da8d2236c4f5.jpeg)


## 「LottieFiles」のプラグインで書き出し
プロトタイプを設定し終わったら、プラグインでアニメーションを書き出します。![04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/1a3e9dd6-12ae-4b10-aef3-bb655dd4562a.jpeg)

これで書き出し作業は完了です！

## JSONを取得
[LottieFiles](https://lottiefiles.com/jp/)のウェブサイトにアクセスすると、先ほど書き出ししたアニメーションが保存されているので、右サイドメニューから「JSONファイル」をダウンロードします。![05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3924179/8dd12c4e-c130-465b-8ffb-6f1e3aace60a.jpeg)



ダウンロードしたLottieのJSONファイルをプレビューしたい時は、以下のリンクから確認できます。

JSONファイルをプレビューする：

https://app.lottiefiles.com/preview


これで実装手前まで持っていけました！
実装方法については、弊社Tech Teamがいつか続編書いてくれることを期待しております👀

実装参考：

https://ics.media/entry/240403/

## 最後に-Lottieアニメーションの活用シーン
キービジュアル（KV）、アイコン、ボタンのエフェクト、ローディングアニメーション、チュートリアル、装飾やイラスト表現など、幅広い場面で活用できます。

今回、クライアントからのご依頼でアニメーション制作が必要になったことをきっかけに、Lottieという手法を知ることができました。
今後も制作に活かせる機会が多いと感じているので、引き続き様々なアニメーションにチャレンジしていきたいと思っています。

Lottieは、UI/UXの向上につながるちょっとした工夫にもぴったりですので、皆さんもぜひ試してみてください！
GitHub CodespacesをVSCode Insidersで開く

VS Codeのナイトリービルド版であるVSCode-InsidersでGitHub Codespacesをローカル実行したいという話です。

https://code.visualstudio.com/insiders/

## 通常だとVS Codeしか反応しない

https://github.com/codespaces ここから開こうとした時に`Open In Visual Studio Code`の項目が出るけど選択しても起動してくれません

> ![CleanShot 2025-05-13 at 11.19.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/52ea42af-e79f-42c7-bf50-4ba75fdc5f5d.png)

VSCodeインストールしろよってメッセージになります。

> ![CleanShot 2025-05-13 at 11.19.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/fb120f1c-2aba-4d37-bc8b-47c22826d57a.png)

現状手元のマシンはVS Codeをインストールしてなく、VSCode Insidersだけ入ってました。

## URLを?editor=vscode-insidersへ

この画面のURLをよくみると`?editor=vscode`となっています。これを`?editor=vscode-insiders`にすると上手く起動してくれます。

> ![CleanShot 2025-05-13 at 11.17.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/e208ca89-b8f7-49a1-9d73-0e63e9e40982.png)
> 
> 無事に起動

これどこかのドキュメントに書いてるのだろうか。。。なんとなく試したらいけました
TeraTerm + Oracle Linux 9 もしくは Alma Linux 9 でコピペが便利になる不思議な呪文

みなさん Oracle Linux 9 または Alma Linux 9 になってから TeraTerm でコピペがすんなりできなくなりませんでしたか？
それを解消するコマンドを作成しましたのでよろしけばご使用ください。

```inputrc.sh
sudo ls -alF /etc/inputrc
sudo cat /etc/inputrc
sudo cp -an /etc/inputrc{,.$(date +%Y%m%d)}
sudo ls -alF /etc/inputrc*
sudo sh -c "echo \"# $(date +%Y.%m.%d) ${SUDO_USER:-$(whoami)}\" >> /etc/inputrc"
sudo sh -c "echo \"#\" >> /etc/inputrc"
sudo sh -c "echo \"set enable-bracketed-paste off\" >> /etc/inputrc"
sudo diff /etc/inputrc{,.$(date +%Y%m%d)}
bind -f /etc/inputrc
```

どうぞよろしくお願いします。
猿でもわかるAIの倫理・リスクシリーズ 🐵⚠️「デジタル奴隷制度」とAI労働問題



 

## 「デジタル奴隷制度」とAI労働問題：AIの裏側に潜む“見えない搾取”を見抜く技術者の目
 

### 🧩 1. はじめに：AIの進化、その裏にある“労働者”の存在とは？

ChatGPT、Stable Diffusion、Midjourney…
これら最新AIモデルの登場は、創造や業務のスピードを飛躍的に高めました。

しかしあなたは知っていますか？

> 「それを支えるのは、低賃金のラベラーたち」
> 「画像を“クリーン”に保つため、数十万人の人が過酷な作業に従事している」

これが近年話題の\*\*「デジタル奴隷制度（Digital Slavery）」\*\*です。

本記事では、技術者目線でこの問題を深掘りし、**実際に安全かつ倫理的なAI学習環境を構築する方法**と、実務に活かせるチェックポイントをコード例と共に解説します。

---

### 📚 2. 「デジタル奴隷制度」とは？ その構造と背景

#### ■ 問題の構造

| 項目   | 内容                                    |
| ---- | ------------------------------------- |
| 搾取対象 | グローバル南（アフリカ・南アジア）の低賃金ワーカー             |
| 作業内容 | コンテンツモデレーション、データラベリング、アノテーション         |
| 給与水準 | 月収数十ドルレベル、労働時間は過酷                     |
| 主な企業 | OpenAI、Meta、Scale AIなど（過去に外部委託として問題化） |

#### ■ なぜ見過ごされる？

* AIモデルは“クリーン”に見えるが、**裏側の人力労働が不可視化**されている
* 技術者が**データの出所や生成プロセスに無頓着**なことが多い
* 開発現場で\*\*「倫理」や「人権」はスコープ外\*\*と見なされがち

---

### 💻 3. 実装例：AIデータの出所をトラッキングして可視化する

ここでは、**学習データの出所と構成比をトラッキング**するためのシンプルな実装例を示します。
自作モデルやファインチューニング時に有効です。

```python
from collections import defaultdict
import matplotlib.pyplot as plt

# 1. データ構造の準備
dataset = [
    {"text": "I love AI", "source": "Wikipedia"},
    {"text": "AI will take your job", "source": "Reddit"},
    {"text": "AIは危険だ", "source": "CrowdWorker_JP"},
    {"text": "私は人間です", "source": "CrowdWorker_KE"},
    {"text": "AI最高！", "source": "Twitter_JP"}
]

# 2. ソースのカウント
source_count = defaultdict(int)
for data in dataset:
    source_count[data["source"]] += 1

# 3. 可視化
plt.figure(figsize=(6, 4))
plt.bar(source_count.keys(), source_count.values())
plt.title("学習データの出所分布")
plt.xticks(rotation=30)
plt.tight_layout()
plt.show()
```

> ✅ 学習時にこうしたメタ情報を記録するだけで、\*\*「どの地域・人がどれだけ貢献しているか」\*\*が把握でき、偏りや倫理リスクの可視化につながります。

---

### 🛠️ 4. 実務Tips：倫理的AI学習環境を設計する方法

#### ✅ 開発現場でできる対策

| 施策        | 説明                                         |
| --------- | ------------------------------------------ |
| データカード導入  | どのような方法で収集されたかを明示（Datasheets for Datasets） |
| フェアワーク契約  | 外部アノテーターに対する賃金と労働条件をレビューする                 |
| 地域バランスの検証 | グローバル北と南で貢献割合が適正かを可視化する                    |
| オープンソース活用 | LAION、Common Crawlなど透明性の高いデータセットを使用する      |

#### ⚠️ よくある失敗パターン

* 安価なクラウドラベリングに一任し、中身を確認しない
* 学習後に「データの出所を記録していない」ことに気づく
* 開発スピード優先で倫理審査を“後回し”にする

---

### 🚀 5. 応用：ヒューマン・イン・ザ・ループ(HITL)と倫理的自動化

#### ■ HITLの設計とは？

AIモデル単独に判断を任せるのではなく、**重要判断には人間が介在**する設計手法。
特に以下のような場面で活用されます：

* 個人情報や差別リスクが高い内容（採用・教育・医療）
* 自動コンテンツ分類やレビュー判定
* 生成AIのフィルタリングと監視プロセス

#### ■ EthicalOps（倫理的MLOps）のすすめ

EthicalOpsとは、MLOpsプロセスにおいて以下を組み込む文化です：

* モデルの公平性チェック（Fairness Eval）
* 社会的影響評価（Impact Assessment）
* 継続的なラベリング精度とワーカーヘルスのトラッキング

---

### 🧭 6. まとめ：AI開発者に求められる“もう一つのスキルセット”

| 評価軸    | 内容                       |
| ------ | ------------------------ |
| ✅ メリット | モデル信頼性と社会的評価が向上する        |
| ⚠️ リスク | “知らなかった”が通用しない倫理炎上       |
| 💡 展望  | AI開発者は技術力＋倫理設計力が求められる時代へ |

---

### ✍️ おわりに

AIは決して“自動で生まれる魔法の箱”ではありません。
私たち技術者が「誰の手を借りて何を作るか」を問い直すことが、**より強く、持続可能で、信頼されるAIの未来**を創ります。

---

📌 **次回予告：「偏ったAIモデルによる差別再生産」について深掘りします。**
【Git】小技集

## はじめに

普段あまり使っていなかったけど、最近便利だなと感じたGitコマンドを備忘録としてまとめます。

## 利用可能なすべてのコマンドを標準出力に出力

```bash
git help -a
```

## Git公式の基本的なコマンドのサンプルを表示

```bash
git help everyday
```

## コミット間の差分ファイル一覧を取得する

```bash
git diff --name-only <コミットA> <コミットB> >> <出力先ファイル>
```

* `--name-only` オプションで変更ファイル名のみを表示
* `<コミットA>` と `<コミットB>` の間の差分を抽出
* `>>` で結果を指定ファイルに追記

### 実行例
1. リポジトリのルートで実行
2. `~/Desktop/changed_files.txt` に変更ファイルが追記される

```bash
git diff --name-only c60be7b e67c042 >> ~/Desktop/changed_files.txt
```

![スクリーンショット 2025-05-11 11.54.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3993108/62dc0954-3c1d-478c-83b4-5d019a5990f9.png)


## 日付付きバックアップブランチを作成する

定期的なメンテナンスやマージ前に、現在のブランチを日付付きでバックアップしたい場合に便利なコマンド

```bash
git branch develop-backup-$(date +%Y%m%d) develop
```

* `$(date +%Y%m%d)` で YYYYMMDD 形式の日付を自動挿入
* `develop` ブランチを元に `develop-backup-20250511` のようなブランチを作成

### 実行例

```bash
# 今日の日付が 2025-05-11 の場合
git branch develop-backup-20250511 develop
```

これで、万が一のロールバックが必要になった際にも簡単に復元できます。

## git show でコミットの詳細を表示する

`git diff`で詳細を見ていたのですが、pushしたコミットについては見れないので、メンバーに教えていただいた便利コミット。

```bash
git show <コミットID>
```

* `<コミットID>` の変更内容（diff）を標準出力に表示
* オプションでフォーマットをカスタマイズ可能

### オプション

| オプション              | 説明                      |
| :----------------- | :---------------------- |
| `--stat`           | ファイルごとの変更行数サマリーを表示      |
| `--name-only`      | 変更されたファイル名のみを表示         |
| `--pretty=oneline` | コミットを1行形式で表示（ID とメッセージ） |

#### 実例

```bash
git show --stat e67c042
```

```
 commit e67c042
 Author: 名前
 Date:   2025-05-10 14:23:45 +0900

    修正

 screenshots/top.png | Bin 89369 -> 556222 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

```

```bash
git show --name-only e67c042
```

```
 commit e67c042
 Author: 名前
 Date:   2025-05-10 14:23:45 +0900
 
    修正
screenshots/top.png

```


```bash
git show --pretty=oneline e67c042
```

```
e67c042 修正
diff --git a/screenshots/top.png b/screenshots/top.png
index f3286d4..8fcdc11 100644
Binary files a/screenshots/top.png and b/screenshots/top.png differ
```


---

## まとめ
普段あまり使っていなかったけど便利なGitコマンドを紹介しました。


## 参考記事
- [Git](https://git-scm.com/docs/git-help.html#_synopsis)
- [Git公式リファレンス](https://tracpath.com/docs/)
Excel VBA ChatGPT に Optional の使い方を教えてもらった

## 背景
ChatGPT に書いてもらったコードに、わからない部分があったので教えてもらいました。保存のためここにまとめます。
https://qiita.com/Yuki-N-1016/private/64e73f1827b7b4ba2113

## Optional の意味
Optional は 引数の指定を省略できる ようにするためのキーワードです。
次のような関数の場合、引数 isReg を省略できます。
```vb
Function GetPostage(ws As Worksheet, weight As Double, unit As String, regionCol As Long, Optional isReg As Boolean)
```


## 1. Optional Boolean の使い方
### 例：ログ出力を制御する

```vb
Sub SaveData(Optional showLog As Boolean = True)
    ' データを保存する処理
    If showLog Then
        MsgBox "データを保存しました"
    End If
End Sub
```
### 呼び出し例
```vb
SaveData            ' ログが表示される（デフォルト True）
SaveData False      ' ログを表示しない
```
## 2. Optional String の使い方
### 例：挨拶の相手を省略可能に
```vb
Sub SayHello(Optional name As String = "ゲスト")
    MsgBox "こんにちは、" & name & "さん！"
End Sub
```
### 呼び出し例
```vb
SayHello              ' → こんにちは、ゲストさん！
SayHello "田中"       ' → こんにちは、田中さん！
```

※Call で呼び出す場合
```vb
Sub sample()
  Call SayHello("田中")
End Sub
```
##  3. Optional 数値（Integer/Double）の使い方
### 例：割引価格の計算（割引率を省略可能
```vb
Function CalcPrice(basePrice As Double, Optional discountRate As Double = 0.1) As Double
    CalcPrice = basePrice * (1 - discountRate)
End Function
```
### 呼び出し例
```vb
price = CalcPrice(1000)         ' → 900（10%割引）
price = CalcPrice(1000, 0.2)    ' → 800（20%割引）
```
実際に自分で書いて動かしたコード
```vb
Function CalcPrice(basePrice As Double, Optional discountRate As Double = 0.1) As Double
  CalcPrice = basePrice * (1 - discountRate)
End Function

Sub sample2()
  Dim price As Long
  price = CalcPrice(1000)
  MsgBox price
End Sub
```
実行結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3812230/c84ec404-0cd8-4e31-9420-24d27170db60.png)

## 補足：Boolean型の注意点
Optional にするときは、必ず初期値を明示的に指定するのがおすすめです。

例：Optional show As Boolean = False


If flag Then は、= True が省略されています。
どちらの書き方でも動きは同じです。
```vb
If flag Then
```
```vb
If flag = True 
Then
```
【受験料無料】PythonZen & PEP8 検定試験に合格した勉強方法

少し前に、**PythonZen & PEP8 検定試験**に合格しました！

この検定試験は、Pythonの設計思想やコーディングスタイル（いわゆる「Pythonらしさ」）に関する知識を問うもので、文法問題というよりも「考え方」「書き方の美しさ」にフォーカスした内容です。

短時間の学習でも受験可能で、Python初学者にとってもモチベーションアップにつながる試験だと感じました。

## 📝 PythonZen & PEP8 検定試験とは？

以下のような特徴があります：

- 主催：一般社団法人Pythonエンジニア育成推進協会  
- 試験形式：Webテスト（オンラインで受験可能）  
- 試験時間：60分  
- 問題数：全20問（すべて選択式）  
- 合格ライン：正答率70％以上（14問以上の正解）  
- 受験料：無料  
- 合格者特典：認定証（PDF）が発行されます  

### ✅ 出題範囲

- **Zen of Python**  
  `import this` で表示される、Pythonの設計哲学（格言集）

- **PEP8**  
  Pythonの公式コーディング規約（インデント、変数名、空行の使い方など）

## 🕒 勉強時間

約1時間程度（実際はもっと短かったかもしれません）

## 📚 勉強方法

### 1. YouTubeで全体像を把握

まずは、PythonZenやPEP8の概要をつかむために、下記の動画を視聴しました：

- [【受験料無料】PythonZen & PEP8 検定試験について解説](https://www.youtube.com/watch?v=DmF5fpUydho)

初心者にも分かりやすく解説されており、ざっくり全体を掴むのに最適でした。

### 2. 「Pythonお作法コラム」を読む（必須）

[Pythonお作法コラム](https://www.pythonic-exam.com/archives/category/column/pythonic_column) は、Pythonエンジニア育成推進協会の公式サイトに掲載されている連載です。

このコラムの内容から本検定試験の問題が出題されます。  
**絶対に読むことをおすすめします。**

疑問点があれば ChatGPT に質問して補足学習するのもおすすめです。

### 3. Zen of Python をQiita記事でおさらい

[こちらのQiita記事](https://qiita.com/IshitaTakeshi/items/e4145921c8dbf7ba57ef)で、Zen of Python に書かれている格言の意味を日本語で確認しました。

格言の解釈が頭に入っていると、選択肢で迷ったときに判断しやすくなります。

## 難易度について

上記の内容を確認していれば、特に難しい問題はなく、基本的には合格できる試験だと感じました。

選択肢で迷った場合も、「どれが“Pythonらしい考え方”か？」という視点で考えると答えを導きやすいです。

## 受けてみた感想

Pythonの背景や `import this` で表示される小ネタに触れることで、Pythonに対する興味がより深まりました。

私のようなPython初心者にとっては、**学習のモチベーションを高めてくれる**試験だと感じました。

知識の習得だけでなく、「Pythonらしさ」を楽しみながら知ることができる、良いきっかけになったと思います。

## 💡 こんな人におすすめ

- Pythonを勉強し始めたばかりで、モチベーションを高めたい人  
- Pythonコードの書き方を理解したい人  
- Pythonの背景や思想を知って、より興味を持ちたい人  

興味がある方は、ぜひ公式サイトをチェックしてみてください！

👉 [PythonZen & PEP8 検定試験 公式サイト](https://pythonzen-pep8-exam.jp/)
Discordデスクトップ版で「Loading chunk 34121 failed」が出たときの対処


Discordを起動したときに、以下のようなエラーが表示されて立ち上がらないことがあります。


Loading chunk 34121 failed. (error: https://discord.com/assets/xxxxxxxxxxxxxxxx.js)


エラー画面の例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436651/85106a03-542f-4e27-ac76-c9decc523216.png)

---

## 原因

これはDiscordの内部JavaScript（chunkファイル）が読み込めなくなったときに出るエラーです。  
主に以下の原因が考えられます：

- Discordのキャッシュ破損
- アプリの更新ミス
- Electron内部のファイル不整合

---

## 解決方法（キャッシュ削除）

Discordの再インストールは不要です。**AppDataの一部を削除するだけでOK！**

### 手順

1. Discordを完全に終了  
　タスクトレイのアイコンを右クリック → 「終了」

2. `Win + R` を押して以下を入力：
    `%appdata%\discord`

    
3. 以下のフォルダを**すべて削除**：

- `Cache`
- `Code Cache`
- `GPUCache`
- `IndexedDB`
- `Local Storage`

4. Discordを再起動



## 結論

エラーが出たら、**まず `%appdata%\discord` 内のキャッシュを削除してみてください。**  
再インストールせずに即解決することが多いです。



この記事は2025年5月時点の情報に基づいています。
p5.js ローカルで動かす 最小構成

### とりあえず動かす

新規ファイルの中身に以下のコードをコピペして、`〇〇.html`という名前で保存する。

```html
<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>p5.js example</title>
  <style>
    body {
      padding: 0;
      margin: 0;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/p5@1.11.5/lib/p5.min.js"></script>
  <script>
// ここにプログラム書く
  </script>
</head>

<body>
  <main>
  </main>
</body>

</html>
```

### テンプレート(中身を適宜書き換え)

```html
<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>[ここにページのタイトル]</title>
  <style>
    body {
      padding: 0;
      margin: 0;
    }
  </style>
  <script src="https://cdn.jsdelivr.net/npm/p5@1.11.5/lib/p5.min.js"></script>
  <script src="[プログラムファイルのパス].js"></script>
</head>

<body>
  <main>
  </main>
</body>

</html>
```
Gowin EDAをLinux環境で起動できない問題の対処法（Qt依存関係）

## 要約

Gowin EDA(Education版)をLinux環境でこのようなエラーが出て起動できないとき

```sh
~/Downloads/Gowin_V1.9.11.01_Education_Linux$ ./IDE/bin/gw_ide
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, wayland-egl, wayland, wayland-xcomposite-egl, wayland-xcomposite-glx, webgl, xcb.

Aborted (core dumped)
```

Gowin IDE内蔵のライブラリを使うように指定して起動することができる可能性がある。

```sh
$ export LD_LIBRARY_PATH="YOUR_IDE_PATH/Gowin_V1.9.11.01_Education_Linux/IDE/lib":$LD_LIBRARY_PATH
$ ./IDE/bin/gw_ide
```

## 私の環境

## 原因

- Gowin IDEが必要とする内蔵ライブラリと、Linux (Ubuntu 24.04) に入っているシステムライブラリのバージョンが異なっていた。
・IDE起動時に、これらのバージョン違いのライブラリが混ざって読み込まれようとしたため、互換性がなくエラーが発生していた。

## 対処法

Gowin IDE内蔵のライブラリを使うように指定する。

```sh
$ export LD_LIBRARY_PATH="YOUR_IDE_PATH/Gowin_V1.9.11.01_Education_Linux/IDE/lib":$LD_LIBRARY_PATH
```

## 毎回exportするのはめんどい

```sh
$ cd IDE
$ touch start_gowin.sh
```

```sh:start_gowin.sh
#!/bin/bash

SCRIPT_PATH="$(readlink -f "${BASH_SOURCE[0]}")"
SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

export LD_LIBRARY_PATH="${SCRIPT_DIR}/lib":$LD_LIBRARY_PATH
export QT_PLUGIN_PATH="${SCRIPT_DIR}/plugins/qt"

"${SCRIPT_DIR}/bin/gw_ide" "$@"

exit $?
```

これで起動するようになると思います。

## まだ解決していないこと

すでに存在するプロジェクトはこれで開けるようになりましたが、プロジェクトの新規作成はエラーで落ちます。まじで何なんだろう。
ネットワーク機器　まとめ

# ネットワーク機器（nw機器）とは
ネットワーク機器（nw機器）とは、**コンピュータなどのデジタルデバイスをネットワークで接続するための機器**になります。
複数間のデジタルデバイス間でのデータの送受信が行われる場合、データは電気信号として伝送されます。
**ネットワーク内を伝送できるようにするためにデータを電気信号に変換する機器のことをネットワーク機器**といいます。
ネットワークの階層はISOによって、**OSI参照モデル**として定義されています。

::: note info
**OSI参照モデル**

**第1階層　物理層**
**第2階層　データリンク層**
**第3階層　ネットワーク機器**
**第4階層　トランスポート層**
**第5階層　セッション層**
**第6階層　プレゼンテーション層**
**第7階層　アプリケーション層**
:::

# 第1階層　物理層
第1階層である物理層は、**ハードウェアの領域**になります。
この階層では、ケーブルやリピータなどのネットワーク機器があげられます。

### ケーブル
ネットワーク関連で最も目にするのがLANケーブルになります。
**LANケーブルはパソコンやルータなどのネットワーク機器を有線で接続するために使用するケーブル**です。

### リピータ
リピータとは、**ケーブルでデータを伝送する際に中継機器の役割を果たすもの**です。さらに、リピータには**受信した信号を増幅、成形したうえで送出する機能**もあります。

***
第2階層から第4階層まではネットワーク領域です。
***

# 第2階層　データリンク層

第2階層のデータリンク層では、**直接接続されたデジタルデバイス同士の通信を実現する方法が規定されています**。データリンク層で定められているのは、**第1階層と第3階層を正常に橋渡しするための様々なプロトコル**（ルール）です。
この階層で動作する主な機器は、スイッチングハブやブリッジなどがあげられます。

### ブリッジ
ブリッジとは、**ネットワークの中のデータの中にあるMACアドレスを見て振り分けてくれる機器**です。ルータの機能を使わずにWi-Fiアクセスポイントを利用できます。実際に伝送されるデータは、1つの塊ではなく小分けにされた**フレーム**という単位です。


### スイッチングハブ
スイッチは**多くのポートがあるブリッジのようなもの**です。ブリッジと大きな違いは、フレームの処理する際にブリッジはソフトウェアで処理するのに対して、スイッチはハードウェアによって処理が行われる点です。

# 第3階層　ネットワーク層
ネットワーク層では**ネットワーク上のすべてのデジタルデバイスへのアドレスも割り当てや、データの伝送経路パケットサイズの変換などが規定**されます。言い換えると、**ネットワーク層で行われるのは、データリンク層で接続された複数ネットワークを相互に接続する、ネットワークに接続されたデジタルデバイスにIPアドレスを割り当てる、ルータが選択した経路に従ってデータを転送する**の3つになります。データリンク層では、データの単位はフレームでしたが、ネットワーク層では**パケット**と呼ばれます。
この階層で動作する主な機器にはルータなどがあります。

### ルータ
ルータとは、**複数の異なるネットワークを接続するための機器**です。ルータではデータを転送する際に**IPアドレスを参照してネットワーク上の最適な経路を選択**します。これをルーティング機能といい、ルーティングするための機器であることからルータと呼ばれます。


# 第4階層　トランスポート層
トランスポート層では、**データ転送時の信頼性をいかに確保するのか**が規定されています。具体的には、下位のネットワーク層から送られてきたデータを整序したり、誤り訂正を行ったり、データの再送をリクエストしたりといったことが行われます。
この階層で動作する主な機器はファイアウォールなどがあげられます。

### ファイアウォール
ファイアウォールとは防火壁という意味で、**ネットワークへの不正アクセスを防ぐための機器**です。ネットワーク外部からの通信をフィルタリングし、安全なものだけを通過させます。ファイアウォールは**パケットフィルタリング型とアプリケーションゲートウェイ型、サーキットレベルゲートウェイ**の3種類があります。ファイアウォールを設置していれば、インターネットを利用してサイバー攻撃を仕掛けられたとしても、社内ネットワークを守れます。

# 第5階層~第7階層　セッション層~アプリケーション層

第5階層のセッション層では**通信の開始から維持、切断までの一連の手順が管理**されます。第4階層から第6階層までのスムーズな通信を目的に管理されます。

第6階層のプレゼンテーション層は、**ネットワーク間でやり取りするデータの表現形式を規定し、統一する層**です。

最上位の第7階層であるアプリケーション層では、**アプリケーションの使用や通信手順、データ形式などが規定**されます。ユーザが入力する情報をアプリケーションやソフトウェアに応じたプロトコルへと変換し、データ通信を可能にします。


# 参考文献
[【階層別一覧】ネットワーク機器の種類・特長を解説](https://www.ntt.com/business/services/rink/knowledge/archive_05.html)
質問のテンプレ

お疲れ様です。
【氏名】です。

現在、●●を対応しておりますが、
●●を実行すると、●●というエラーになります。
原因または解決策をご存知の方はいらっしゃいませんか。

実施した内容は下記となります。

●●●●●●●●

すると、下記のような結果になりました。

●●●●●●●●


原因を確かめるため、以下も試しましたが、、
問題の解決には至りませんでした。

●●●●●●●●

お忙しいところ恐縮ですが、解決方法をご教授いただければ幸いです。
Javaの「オーバーロード」をざっくりまとめてみた[Java初心者]



## はじめに

こんにちは。
プログラミング初心者Wakinozaと申します。
Java勉強中に調べたことを記事にまとめています。

十分気をつけて執筆していますが、なにぶん初心者が書いた記事なので、理解が浅い点などあるかと思います。
記事を参考にされる方は、初心者の記事であることを念頭において、お読みいただけると幸いです。
間違い等あれば、指摘いただけると助かります。

## 対象読者

- Javaを勉強中の方
- Java Silver試験を勉強中の方
- Javaの「オーバーロード」についてざっくり知りたい方

## 目次

1\. オーバーロードとは
2\. オーバーロードの具体例

## 本文

### 1\. オーバーロードとは

Javaでは、同名のメソッドを複数定義すると、コンパイラエラーになります。
それは、同名のメソッドが複数あると、JVMが実行時にどのメソッドを呼び出すべきか特定できないためです。

しかし、大規模なプログラムを開発する上で、似たような処理をするメソッドを複数定義したい場合が出てきます。引数が違うだけの同じ処理に１つ１つ別のメソッド変数名を命名するのは煩雑ですし、可読性も低下します。
そんな時に使える技術が、「オーバーロード（多重定義）」です。

「オーバーロード」とは、同じメソッド変数名を複数定義する方法です。
実はJavaは、同一メソッドかどうかを、「メソッド変数名」ではなく「シグネチャ」で判断しています。
「シグネチャ」とは、メソッド宣言のうち、以下の情報をまとめたものです。

- メソッド変数名
- 引数の個数
- 引数のデータ型
- 引数の並び順

下のコードをご覧ください。

```Java
public static String doProcess(int a, String b){
  //any code
}
```

メソッド宣言の記述のうち、「doProcess(int a, String b)」の部分が「シグネチャ」です。

繰り返しになりますが、Javaはシグネチャでメソッドを判別しているため、同じメソッド変数名でも引数が異なれば、エラーなく共存できます。
引数を変えれば、同じ変数名のメソッドを複数定義するオーバロードが可能になるのです。

オーバーロードを使うと、同じメソッド変数名で複数の引数を処理できます。
引数だけ違う処理を同じメソッド変数名にまとめることができるため、別々に命名する手間が省け、可読性も向上します。

### 2\. オーバーロードの具体例

シグネチャが異なれば、オーバーロードが可能になると学習しました。
では、具体的にどのような時にオーバーロードが可能なのかを、例をあげて見ていきましょう。

```Java
String sayHello(int a, String b){ return "Hello" }
```

上のsayHelloメソッドをオーバーロードしていきましょう。

```Java
String sayHello(){ return "Hello" }                //① OK
String sayHello(int a){ return "Hello" }          //② OK
String sayHello(int a, String b, int c){ return "Hello" } //③ OK
String sayHello(int a, int b){ return "Hello" }    //④ OK
String sayHello(String a, int b){ return "Hello" } //⑤ OK
void sayHello(int a, String b){ }                  //⑥ 注意：エラー
String sayHello(int c, String d){ return "Hello" } //⑦ 注意：エラー

```

sayHelloメソッドと同じ変数名のメソッドを7つ定義しました。
このうち、正しくオーバーロードできているのはどれでしょうか？

①②③は、元のメソッドと引数の数が違うため、適切にオーバーロードできています。
④は、引数の数は同じですが、データ型が違うため、適切にオーバーロードできています。
⑤は、引数の数と型は同じですが、引数の順番が異なるため、適切にオーバーロードできています。

⑥は、オーバーロードとは見做されないため、コンパイラエラーとなります。シグネチャは「メソッド変数名と引数の数・型・順」であるため、戻り値は含まれません。戻り値を変えても、シグネチャは元のメソッドと同一のため、エラーとなるのです。
⑦は、オーバーロードとは見做されないため、コンパイラエラーとなります。実は、引数の要素のうち「引数の変数名」は、シグネチャに含まれません。引数の変数名を変えても、シグネチャは元のメソッドと同一となるため、エラーとなるのです。

## まとめ

- Javaは、「シグネチャ」を比べることで、同一メソッドかどうかを判別している
- 同じ変数名でも、引数の数・型・順番が異なれば、同名のメソッドを複数定義するオーバーロードが可能である

---------------

記事は以上です。
最後までお読みいただき、ありがとうございました。

##  参考情報一覧

この記事は以下の情報を参考にして執筆しました。

- [オラクル認定資格教科書 JavaプログラマSilverSE11]
- [スッキリわかるJava入門 第４版]
- [パーフェクトJava 改訂3版]
- [7.3 オーバーロードと様々なメソッド呼び出し（可変引数、再帰呼び出し、メソッドチェーンなど）～Java Basic編](最終更新 2023-11-05)(https://qiita.com/KenyaSaitoh/items/42ca1cd16ba35cf2e199) (参照 2025-05-12)
時系列の数が無効です（時系列モデル）(SPSS Modeler データ加工逆引き12-10)

# 時系列の数が無効です（時系列モデル）

![スクリーンショット 2025-05-07 11.56.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/a61c4f13-c4ad-4fce-8020-7beeea882667.png)

＊本来、時系列予測は一定のレコード数（季節性がある場合3サイクル）が必要です。レコード数はある程度確保していても生じるエラーを対象にしています。

## 1.想定される利用目的

・時系列モデル作成時にエラーが起きる

*時系列データの時間間隔がまちまちの状態で無理にモデリングした場合に生じるエラーのハンドリング

## 2.サンプルストリームのダウンロード

https://github.com/yoichiro0903n/blue/raw/refs/heads/main/irregular_records_model.str

## 3.サンプルストリームの説明

![スクリーンショット 2025-05-07 15.02.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5e941eef-260e-4721-95fe-ab87056be376.png)


a1.入力するデータの１つ目です。データの記録時間がまちまちです。

![スクリーンショット 2025-04-16 12.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/715333f7-3379-417e-bf2d-246c48db48d0.png)

a2.入力するデータの２つ目です。aの記録開始時間から、本来観測するべき粒度（ここでは分）のデータを生成しています。
![スクリーンショット 2025-04-16 12.09.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/641ed26d-b6a8-4ea6-8a7a-48d01c37ef69.png)

#### エラーの現象を確認する

b.[時系列モデル]ノードを実行します。

![スクリーンショット 2025-05-07 15.53.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/e71dc287-8e1c-4d79-bc63-6938ae2d7363.png)

#### 欠損したデータを線形に補間する

https://qiita.com/416nishimaki/items/0016f93ce3ac8ef55723

上記の記事に沿って進めると欠損値が補間されます。

![スクリーンショット 2025-05-07 15.55.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/46f7e871-7252-4ed1-86d3-fd844c7644ec.png)

c.[条件抽出]ノードを編集します。将来値を予測するにあたり、実績が含まれていないデータを除外します。

![スクリーンショット 2025-05-07 15.55.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c1f88717-fcab-4f9d-b891-5e0890b25c7a.png)

d.[データ型]ノードを編集します。

![スクリーンショット 2025-05-07 15.56.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/888bbd19-5446-4258-adde-4ddecdac20bb.png)

e.[時系列]ノードを編集します。

![スクリーンショット 2025-05-07 15.53.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c1cda67e-b21e-4fff-b0d1-c4ab988cd3cb.png)

[実行]します。fが生成されます。

f.[時系列モデル]ナゲットを配置します。

g.[時系列グラフ]を実行します。4月10日の9時までが実績があるため上のグラフはそこまで、下のグラフはそれ以降も予測値を描画しています。

![スクリーンショット 2025-05-07 15.58.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/c74eda13-c5b4-456a-b730-5db843ef6cc8.png)

#### 注意点

時間間隔をモデルの編集で揃えて調整することもできますし、モデル内部で線形補間することも可能ですが今回は学習に必要な実績が極端に少ないためデータ加工による補間をしています。

## 4.参考情報

#### 時系列の欠損値を線形補間する

https://qiita.com/416nishimaki/items/196b0ebacbf93ac62984

#### SPSS Modeler ノードリファレンス目次

https://qiita.com/416nishimaki/private/503037195081d3323eee

#### SPSS Modeler 逆引きストリーム集（データ加工）

https://qiita.com/416nishimaki/private/4bf813e6cba84b2a1008