OmniAICreator/Qiita-1.07M huggingface dataset:
Pythonについて（グイド・ヴァン・ロッサム、空飛ぶモンティ・パイソン、Pythonソフトウェア財団）

## はじめに
　Pythonについてまとめてみました。

## Pythonについて
　コンピュータが処理を行っている時は、何らかの**プログラム**が動いている。そのプログラムとは、コンピュータを動作させるための命令の集まりである。
　プログラム記述のために体系化されたのが、**プログラミング言語**(**programming language**)と呼ばれる人工言語である。
　**Python**は、オランダ出身の**グイド・ヴァン・ロッサム**(**Guido van Rossum**)氏が開発したプログラミング言語である。名前の由来は、イギリスのBBCが製作したコメディ番組「**空飛ぶモンティ・パイソン**(**Monty Python's Flying Circus**)」に由来する。
※英語の名詞としてのpythonは、「ニシキヘビ」という意味である。そのため、Pythonのロゴマークではヘビの絵が使われている。
　Pythonの開発・維持は、**Pythonソフトウェア財団**(**Python Software Foundation**)で行われている。Pythonの情報を得るための定番ともいえるのが、以下の三つのサイトである。

### 1.Pythonの基本的な情報：Pythonソフトウェア財団
https://www.python.org/
　Pythonのダウンロードなどは、このページから行う。

### 2.日本語の情報：日本Pythonユーザ会(PyJUG)
https://www.python.jp/
　日本Pythonユーザ会のホームページである。日本語での情報発信が行われている。

### 3.日本語のドキュメント(Python Ver.3)
https://docs.python.org/ja/3/
　チュートリアル（入門）、言語リファレンス、ライブラリーリファレンス、FAQ（よくある質問と、その回答）など、1.の多くのドキュメント類が日本語に翻訳されて公開されている。
※もともと2.のサイトの一部として公開されていたが、現在は1.のサイトの一部となっている。



## おわりに
ここまで読んでいただきありがとうございます！

## 参考文献
・新・明解Python入門 (新・明解シリーズ) 単行本 – 2019/5/23
柴田 望洋 (著)
p.2
SPSS Modeler ノードリファレンス 8-1 テキストマイニング

# 8-1 テキストマイニングノード[IBM SPSS Text Analyticsタブ]

![194_161テキストマイニング.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/8b6dbd8a-ee5e-4b53-81c8-d3b086b3c6bf.png)


## 1.ノードの目的
自然言語のコメントからキーワードを抽出してフラグ化します。

## 2.解説動画（60秒）

<iframe width="560" height="315" src="https://www.youtube.com/embed/QAg1n1XFKsM?si=s3SbSUC8i_4Ic-lg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

## 3.クイックスタート

[可変長ファイル]に[テキストマイニング]を接続します。
＊サンプルデータ（CSV）は[5.参考情報]からダウンロードできます。

![スクリーンショット 2025-03-17 11.02.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/7dce7b87-b55e-4fd1-acb1-fcc8f828a461.png)

対象データのcommentをテキスト処理します。

![スクリーンショット 2025-03-17 11.05.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/1ecf2411-9753-40f6-9027-3d14ccfcad47.png)

[テキストマイニング]ノードの設定は以下の通りです。

![スクリーンショット 2025-03-17 11.07.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/f9b70614-fe4c-468b-99be-db8c07afcf65.png)

[モデル]タブではテキストテンプレートを読み込みます。
![スクリーンショット 2025-03-17 11.07.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/27819df6-f09f-4773-99b2-7b9bc3578d26.png)

[実行]するとインタラクティブワークベンチが起動し、左下にキーワード（コンセプト）が列挙されます。

右上の作成ボタンでキーワード群（カテゴリ）を自動で定義することができます。

![スクリーンショット 2025-03-17 11.10.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/21b8cfb6-aceb-4464-be2d-3b70a52e9fd0.png)

手動でカテゴリを定義する場合には以下を参照ください。

https://qiita.com/416nishimaki/items/6d86dd25d3d00495db35

出来上がったカテゴリをモデル化します。

![スクリーンショット 2025-03-17 11.13.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/5689c5f1-09e1-4852-91cd-029843b5836c.png)

ストリーム上で別の定量データと構造化したcommentを扱うことが可能です。

![スクリーンショット 2025-03-17 11.14.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/0087b92c-7705-4cf7-9dbf-53589cc350b4.png)

commentがカテゴリ化されました。

![スクリーンショット 2025-03-17 11.15.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/286322/33ae079d-6ecd-4a1c-95ed-45cc05581f8c.png)


## 4.Tips

#### 逆引き辞書13章　自然言語の処理

https://qiita.com/416nishimaki/items/4bf813e6cba84b2a1008#13%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E3%81%AE%E5%87%A6%E7%90%86:~:text=%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E5%9B%B3%E3%81%AF%E3%81%93%E3%81%A1%E3%82%89-,13,-.%E8%87%AA%E7%84%B6%E8%A8%80%E8%AA%9E%E3%81%AE


## 5.参考情報

#### 利用データ

右クリックでリンク先を保存してください。

https://raw.githubusercontent.com/yoichiro0903n/blue/refs/heads/main/telecotext.csv

#### Ver18.5以前はたはModeler Professional版でもテキスト分析する記事はこちら

https://qiita.com/harrowharrow16/items/248ff8fe3879b63e7ae3

#### ノードのヘルプ

https://www.ibm.com/docs/ja/spss-modeler/18.6.0?topic=categories-text-mining-modeling-node

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

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

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

https://qiita.com/416nishimaki/private/503037195081d3323eee
ファイルをバージョン別にバックアップするだけのバッチ

# ファイルをバックアップするだけのバッチです。
ファイルをバックアップする時って、どうしてますか？
バージョンとか、リビジョンとか付けて、同じフォルダか別フォルダに保存してます？

自分はバッチを社内で公開してるのですが、更新する際は、「今動いているバッチをまずバックアップフォルダにバックアップしておいて、最新版をリリースする。」という事をしてます。

その際、過去のバージョンも残しておきたいので、バックアップフォルダー上では、ファイル名にバッチの作成日時を追加してます。

例えば、
A.bat の作成日時　2025/3/25 9:15だった場合
バックアップフォルダにコピーした後、ファイル名を
A_20250325_0915.bat
に変更するという事をしてます。

これって地味に面倒なので、バッチにしました。

# 使い方
使い方は、バッチをダブルクリックしても表示されます。

バックアップしたいファイルをこのバッチに、ドラッグ＆ドロップしてください。
上記の事を行います。
なお、日時まで同じファイルは、上書きは問題ないと思うので上書き確認はせず上書きします。
また、フォルダをサポートすると、思いがけず、めっちゃ大きなバックアップを作ってしまう可能性があるので、あえてフォルダのバックアップはサポートしてません。

元々、自分で作ったバッチファイルのバックアップで使うために作成しましたが、もちろんドキュメントファイルでも利用できます。

# コード
突貫で作成したので、よく使う不要なコードも消してないし、洗練されてませんが、とりあえず動くので、この時点で公開します。
バージョンアップなどにも対応できるよう、サーバに本体を入れておいて、ショートカットを作成し、プロパティーから作業フォルダを%temp%に書き換えて、そのショートカットをみんなに配るのが良いと思います。
もちろん、ローカルで動作させたい場合、バッチ本体をローカルにおいても問題なく動きます。

```make_backup.bat
@echo off
chcp 932 >nul
rem setlocal enabledelayedexpansion
setlocal

if not '%1'=='' goto :start

:usage
echo ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
echo ■これは、ファイルのバックアップを簡単に作成するためのバッチです。
echo ■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
echo  このバッチにバックアップしたいファイルをドラッグ＆ドロップすると、
echo  ファイルと同じフォルダに「Back_up」というフォルダを作成して、そこに、ファイルの日付を付けたバックアップを作成します。
echo.
echo  例えば、Aというフォルダに2025/3/25 12:25に作成したB.txtというファイルがある場合、
echo  Bのアイコンを、このバッチにドラッグ＆ドロップしてください。
echo  1.Aフォルダに「Back_up」というフォルダを作成します。
echo  2.そのフォルダに、「B_20250325_1225.txt」という名前でファイルをコピーします。
echo.
echo  すでに同名のファイルがあった場合上書きしますが、タイムスタンプも同じはずなので問題ないと思います。
echo  フォルダーのバックアップは、想定以上の容量を必要とする可能性があるため、あえて対応していません。
echo.

goto :end_2



:start
if '%1'=='' goto end

set "file_full_path=%~1"

set "file_name=%~n1"
set "file_ext=%~x1"
set "file_dir=%~dp1"

set "file_date=%~t1"
rem 以下はファイル名に使用できない文字などを置き換えてます。
set "file_date=%file_date:/=%"
set "file_date=%file_date::=%"
set "file_date=%file_date: =_%"

rem パラメータはサブルーチン内で使いませんが、ループで引き継ぐために、付加してます。
call :make_backup %1

shift

goto :start

rem ============================================================================
:make_backup

set backup_dir=%file_dir%back_up\
set backup_file=%backup_dir%\%file_name%_%file_date%%file_ext%

if not exist "%backup_dir%" (
    echo make directory
    md "%backup_dir%"
)

copy /v "%file_full_path%" "%backup_file%"

exit /b

rem ============================================================================
:end
echo %backup_dir%にバックアップしました。

:end_2
endlocal

pause
exit /b %err_code%
```
以上
5分でできる！Python製Twitter Botの作り方【最新API対応】

# PythonでTwitter Botを作る入門【X API対応】

こんにちは！この記事では、Pythonを使ってシンプルなTwitter（現X）Botを作成する方法を解説します。

---

## ✅ 準備するもの

- Python 3.7以降
- X APIの開発者アカウントとアクセスキー（[Twitter Developer Portal](https://developer.twitter.com/)で取得）
- `tweepy` ライブラリ

---

## 🧰 必要なライブラリのインストール

```bash
pip install tweepy python-dotenv
```

---

## 🔑 .env ファイルに認証情報を記述

ルートフォルダに `.env` ファイルを作成し、以下を記述します。

```env
API_KEY=xxxxxxxxxxxxxxxxxxxx
API_SECRET=xxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN=xxxxxxxxxxxxxxxxxxxx
ACCESS_TOKEN_SECRET=xxxxxxxxxxxxxxxxxxxx
```

---

## 🧠 Twitter BotのPythonコード（twitter_bot.py）

```python
import tweepy
import os
from dotenv import load_dotenv

# .envの読み込み
load_dotenv()

# 認証情報の取得
API_KEY = os.getenv("API_KEY")
API_SECRET = os.getenv("API_SECRET")
ACCESS_TOKEN = os.getenv("ACCESS_TOKEN")
ACCESS_TOKEN_SECRET = os.getenv("ACCESS_TOKEN_SECRET")

# 認証
auth = tweepy.OAuth1UserHandler(API_KEY, API_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth)

# ツイートを投稿する関数
def tweet(text):
    try:
        api.update_status(text)
        print("✅ ツイート完了！")
    except Exception as e:
        print(f"❌ エラー: {e}")

# 実行例
if __name__ == "__main__":
    tweet("こんにちは、これはPythonからの自動ツイートです！ #Python #TwitterBot")
```

---

## 📅 応用：定期ツイートにするには？

`cron` や `schedule` ライブラリで定期ツイートにもできます。例えば：

```bash
pip install schedule
```

```python
import schedule
import time

def job():
    tweet("定期ツイートだよ！ #PythonBot")

schedule.every(1).hours.do(job)

while True:
    schedule.run_pending()
    time.sleep(1)
```

---

## ✨ まとめ

Python + Tweepyを使えば、X(Twitter)のBotが簡単に作れます！キーワード返信、自動フォローなどの機能追加もできるので、ぜひ挑戦してみてください。
フロントエンド入門：Webhook（ウェブフック）の仕組みをざっくり理解したい人のための個人メモ

## はじめに

Web制作やシステム開発をしていると、「他のサービスと連携して、ある動作が起きたら自動で通知したい」「イベントが発生したときにすぐ処理をしたい」と思う場面があります。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

そんなときに役立つのが「Webhook（ウェブフック）」という仕組みです。

## 書こうと思ったきっかけ

フォーム送信やファイルアップロード、外部サービスとの連携を実装する際、「処理をリアルタイムに連動させるにはどうすればいいのか？」と疑問に感じたことがありました。調べていく中で「Webhook」という効率的な方法を知ったので、理解の整理も兼ねて記事にまとめることにしました。

## Webhookの仕組みとは？

Webhook（ウェブフック）とは、あるアプリケーションやサービスが特定のイベント（たとえば「誰かがフォームを送信した」「ファイルがアップロードされた」「支払いが完了した」など）をトリガーにして、あらかじめ指定されたURL（エンドポイント）に対してリアルタイムで情報（データ）を送信する仕組みのことです。

https://qiita.com/soarflat/items/ed970f6dc59b2ab76169

### 例えるなら…
Webhookは「呼び鈴」に似ています。

- 誰かがドアの前に来た（＝イベント発生）
- 呼び鈴を鳴らす（＝Webhookが発動）
- 家の中の人が気づく（＝通知先サーバーがデータを受け取る）

### 技術的に見ると
通常のAPIは「こちらから問い合わせる」（ポーリング）必要がありますが、Webhookは「向こうから通知してくれる」仕組みです。

そのため、待たずに処理できる効率的な手法となります。

## Webhookの活用例

| 使用シーン | Webhookでできること |
|-------------|------------------------|
| Slack       | 他サービスからの通知をチャンネルに投稿         |
| GitHub      | プッシュされたらCIツールを自動実行             |
| Stripe      | 支払いが成功したらメールを送る・DBを更新        |
| フォーム送信 | Googleスプレッドシートにデータを追加             |

## 動作の流れ（ざっくり）

1. サービスAに「Webhookの送信先URL」を登録
2. サービスAでイベントが発生
3. サービスAがWebhook（HTTP POST）でデータを送信
4. サービスB（あなたのシステムなど）がそれを受け取り処理する

## まとめ

Webhookは、アプリケーションやサービス間での連携をリアルタイムに実現する強力な仕組みです。

:::note warn
***定期的なポーリングに頼らず、効率よくイベント通知や自動処理ができるため、業務の自動化・省力化にもつながります。***
:::

シンプルな概念でありながら、実際の開発現場でも非常に役立つテクニックなので、今後もさまざまなサービスとの連携に活用していきたいと思います！
Symfony TranslationコンポーネントでEnumを翻訳する

Symfonyでは [Translation](https://symfony.com/doc/current/translation.html) コンポーネントが用意されており、文字列を簡単に翻訳して表示できます。

例：
```twig
{{ "apple" | trans }}
```

```yaml:translations/sample.ja.yaml
apple: りんご
```

とても便利なのですが、Enumに対してはうまく動作しません。

```php
enum Fruit: string
{
    case APPLE = 'apple';
}
```

```twig
## fruit = Fruite::APPLE
{{ fruit | trans }} # エラーになる
```

こまった。

## TranslatableInterface

Translationコンポーネントには `TranslatableInterface` というインターフェイスが存在します。これを使うと、Enum上に翻訳処理を記載することができます。

```php

use Symfony\Contracts\Translation\TranslatableInterface;
use Symfony\Contracts\Translation\TranslatorInterface;

enum Fruit: string implements TranslatableInterface
{
    case APPLE = 'apple';

    public function trans(TranslatorInterface $translator, ?string $locale = null): string
    {
        return $translator->trans($this->value, domain: 'sample', locale: $locale);
    }
}
```

`TranslatableInterface::trans()` メソッドを作り、その中で翻訳処理を行います。
`TranslatorInterface::trans()` メソッドを使い、domainに翻訳ファイル名を指定すれば、翻訳を行なってくれます。

```twig
## fruit = Fruite::APPLE
{{ fruit | trans }} # りんご
```

よかった
ActiveRecord::StatementInvalid: Mysql2::Errorが発生するcountメソッドのケース

# countメソッドの注意点
以下のコードが発行するSQLはどのようなものになるでしょうか？
```ruby
User.select(:id, :name).count
```
以下のようになります。
```sql
SELECT COUNT(id, name) FROM users;
```
これは大抵のDBでSQL構文エラーです。
メジャーなものでいうとPostgreSQLは構文エラーにはなりません。
大抵のSQLのCOUNT関数は引数を1つ受け取るようになっています。

# 対策
## lengthを利用する
```ruby
User.select(:id, :name).length
```
この対策が一番現実的だと思います。
どうしてもサンプルのようなselectと組み合わせた時にどうしてもcountじゃないといけないってことはほとんどないと思うので。
## selectと同時に使わない
```ruby
User.count
```
そもそもselectと同時に利用しなければならないことがおかしいかもです。selectとcountを同時に利用しそうになった時はコードを疑いましょう。
## selectの引数を一つにする
```ruby
User.select("concat(id, "," ,name)").length
```
冗談です。countを利用するためにわざわざこんなことをする人はまずいないでしょう。
勇気がある人はプルリクしてみてください。きっとコミッターに怒られるでしょう。
# 最後に
私はDBからデータを取得するテストコードを書いている時にこれに10分ほどハマりました。
この記事がみなさんのハマり解消に役立てばと思います。
国産IDaaS Exticを使ってみる 8. ADパスワード同期フック

[前回](https://qiita.com/ahra_/items/eed8e145079fdfe4a3bb)の続きです。
## ADパスワード同期フックとは
ADプロビジョニングもしくはADアグリゲータを使用している際に、AD側でのパスワード変更を検知し、パスワード情報をExticに連携するモジュールです。
今回はADプロビジョニングを使用しているADからExticにパスワード情報を連携する使用方法で検証します。
## 設定
### 事前準備
管理コンソール > アプリケーションからActive Directory(オンプレミス) パスワードフックを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/3b1354bc-e5a3-9743-9484-80f60b09338d.png)
表示名を設定し、接続キーを発行します。
![スクリーンショット 2025-01-06 173913.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/7835180f-303e-3fea-a2b8-88354ee9d5a9.png)
管理コンソールから`SyncUpAgent.war`をダウンロードし、`<tomcat_home>\webapps\`以下にコピーしてデプロイします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/8c1bb7e3-8f6d-d874-5db4-0c86f5512aeb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/4173dd25-eed4-b9ea-9017-bb9329a69a6e.png)
### パスワード同期フックモジュールの設定
管理コンソールから`adpasswdsync.zip`をダウンロードします。
※事前にVisual C++ 2015-2022 再頒布可能パッケージのインストールが必要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/b8f4ae0c-bb63-75f4-c69d-a5732e93e6da.png)
ドメインコントローラーにて展開し、`ADPasswdSyncExec.dll`と`ADPassWdSyncHook.dll`を`C:\Windows\System32`にコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/f6f3e383-b6c6-2096-89c5-dda27a1fc55a.png)
`ADPasswdSyncHookRegAdd.exe`を実行してレジストリへの登録を行い、OSを再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/c1a49a75-66ea-af7e-18b5-2b0b9e27c699.png)
`ADPasswdSyncService.exe`を実行し、「サービス登録」します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/321aae96-1a81-a525-0f7a-0c32a60f5bf0.png)
`ADPasswdSyncHookCfg.exe`を実行し、設定を行います。
パスワード同期の対象とするユーザーエントリの識別属性名と文字、ADエージェントに設定したものと同じパスワード同期識別属性名などの設定と、インバウンドADエージェントのエンドポイント、Exticのテナント（サブドメイン）、接続キーを指定します。
![スクリーンショット 2025-01-06 175418.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/27aff11c-26ba-4ec3-3b51-4fcfd032f954.png)
保存してADパスワード同期サービスを再起動します。
## 確認
対象ユーザーのアプリケーション設定を「使用する」にします。前述の通り、このユーザーはADプロビジョニングによってADに連携されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/ca96ed96-7746-cdb3-f3f7-52b3a8c9184b.png)
対象ユーザーのパスワードを変更します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/5ebcb5f1-15a2-9e7c-7d85-b4abed6b34ee.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/80f589a0-5fb0-cc81-0f7d-fbf478589f53.png)
すると、パスワードの変更が検知され、インバウンドADエージェントに連携されます。
![スクリーンショット 2025-01-07 095110.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/eca741dc-ee41-c87f-3d55-374695ac5162.png)
その後、インバウンドADエージェントからExticに連携され、Exticのパスワードも変更されます。
![スクリーンショット 2025-01-07 095429.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3900965/97c2d516-2782-083d-3938-57bd25df2ba9.png)
##
このようにして、ADパスワード同期フックモジュールはExticにパスワード情報を連携します。
[次回](https://qiita.com/ahra_/items/544c5218e287d89dbe21)はADのユーザー情報をExticに連携する、「ADアグリゲータ」について検証します。
【入社エントリ】LIXILに入社しました！

このたび2025年3月24日付で株式会社LIXILに入社しました！
これまでの経験を活かしつつ、新たな環境でさらなる成長を目指していきます！
本稿では、これまで学んできたことと入社に至るまでを書いていきます。

## これまでの経験や学んだこと

### フロントエンドはVue.js
エンジニア歴はおおよそ4年ほどですが、これまで一貫してVue.js/Nuxtを使い続けています。
私がちょうど学び始めたタイミングはVue2から3への移行、Composition APIの登場など様々な変化の中であったことを覚えています。

### システムアーキテクチャ

前職ではAWSを使う機会が多く、ネットワーク、ストレージ、サーバレスアーキテクチャ、パイプラインなど幅広くインフラに携わる機会がありました。
その中で可用性や耐障害性を意識したシステム設計を多く経験できました。
AWSにはWell-Architected Frameworkという考え方がありますが、これはインフラ設計の経験が浅い自分にとってシステムアーキテクチャを学ぶよい取っ掛かりになりました。

### ネガティブケイパビリティの大切さ

開発や企画を進めるにあたり、自身ではどうやっても解決できない(人的・政治的な)課題や障害に直面することが多々あります。
特に前職ではそういった事が多々ありましたが、無理やり解決しようとせずグッと堪えてじっくり考えた上ゆっくりでも前に進む必要があると学びました。
前職で学べたことの中でも大きな収穫でした。

## 転職のきっかけ

### Vue.jsコミュニティとの出会い

転職を考え始めたのは、Vue Fes Japan 2024のセッション「Welcome to the Vue.js community!」を見たことがきっかけでした。

https://vuefes.jp/2024/en#welcome-vuejs-community

元々Vue.jsは長く使っていましたが、コミュニティにはあまり関わっていませんでした。
しかしVue Fes Japan 2024にてありがたいことに「Vue3の一歩踏み込んだパフォーマンスチューニング2024」というセッションで登壇させていただき、その後「Welcome to the Vue.js community!」を見た際にコミュニティとして活動することの意義や理念に感銘を受け、同時に面白さを感じました。

https://vuefes.jp/2024/sessions/hal

ここから私自身、「エンジニアとして価値を提供し、貢献する」という事について真面目に考えるようになりました。

**エンジニアとして何ができるか？**
**これからどのようなエンジニアを目指したいか？**

そういった考えを自問自答する日々のなか、転機が訪れました。

### からころさんとのコンタクト

Vue Fes Japan 2024が終わってからしばらく経ち、「Welcome to the Vue.js community!」にファシリテーターとして参加されていた [からころさんの旧Twitter](https://x.com/karan_corons) にて「Nuxtを書けるエンジニアを探している」という投稿がありました。

元々転職も選択肢として考えていた私は早速DMで連絡し、ジョブディスクリプションをいただいた上でカジュアル面談をセッティングしていただきました。

そこでエキスパートの方とお話した際に「エンジニアとして面白いことができそうだ！」と直感し、応募することを決めました。

## 重視した点
転職にあたっては、以下の点に注目していました。

### 面白そうなことができそうか
技術的に挑戦できる環境があるか、これまでにないユニークな取り組みができそうかどうかを重視しました。

### エンジニア文化がどのくらい発展しているか
会社として開発することをどれだけ大切にしているか、エンジニアとして学びや気付きの機会が得られそうかを見ていました。
また、自身で開発できる範囲がどのくらいあるかも重視していました。

### 自身がどれだけ価値を提供できるか
ただ学ぶだけではなく、自分のスキルと発想を活かしてチームに貢献できるかを考えました。

## 魅力的と感じた点

### チームを跨いだエンジニア同士の意見交換や交流が豊富

エンジニア同士の交流を奨励する文化があり、互いに学び合う機会が多いと感じました。

### 行動指針への共感

LIXILにはLIXIL Behaviorsという、日々の業務の中で実践すべき3つの行動があります。

```
1. DO THE RIGHT THING(正しいことをする)

2. WORK WITH RESPECT(敬意を持って働く)

3. EXPERIMENT AND LEARN(実験し、学ぶ)
```

この中でも特に `DO THE RIGHT THING` には強く共感し、自分の働き方とも合っていると感じました。


### 働きやすさ

現時点で基本リモートワークとなっていたり有給を取りやすいよう制度整備されているなど、ライフワークバランスを取りやすい組織と感じました。
また、猫を飼っている自分にとっては留守番させる時間が少なくなるためありがたいと感じました。

## これから

LIXILは存在意義(LIXIL`s Purpose)として以下を掲げています。

```
MAKE BETTER HOMES A REALITY
FOR EVERYONE, EVERYWHERE

世界中の誰もが願う、豊かで快適な住まいの実現
```

自身のこれまで培ってきた技術と発想力を活かし、豊かで快適な住まいの実現に貢献していく中でさらに成長できるよう努めていきます！

また、今年はchibivueやVue.js JP、フロントエンドカンファレンス関西をはじめとしたコミュニティへのコントリビュートも積極的に行っていきたいと考えています！

## おわりに

LIXILでは現在もエンジニア採用を強化しています！
興味のある方はぜひご連絡ください！

https://hrmos.co/pages/lixil/jobs?category=1807273222947917832
037 AI屋さんの　LLMにトークン全文入力　GEMINI2.0　ライブラリ

037 AI屋さんの　LLMにトークン全文入力　GEMINI2.0　ライブラリ


本日はお日柄もよく、
めでたいご縁を結ばれるライブラリにおかれましては、
誠にお慶び申し上げます。

Geminiを利用する際に、ライブラリで悩む場合があります。
そもそも何で複数あるのか、気にはなっていましたが、
これを機に統合が進んでいるようです。


とある日の断面、

　google-genai
　pip install google-genai==1.7.0

　google-generativeai
　pip install google-generativeai==0.8.4
 


新機能や、モデルの更新も激しくバージョン管理に加え、
開発環境も複数あって、

　Googel AI Studio
　Vertex AI
 
何時何処誰が開発するかも、影響します。
動く環境ができたら、いじらないのが一番良いかとは思いますが、
毎回、仮想環境やdockerで独立させるのも骨が折れます。


---

今後のメイン（？）
　google-genai


https://pypi.org/project/google-genai/1.7.0/#history

---


過去のレガシー（？）
　google-generativeai


https://pypi.org/project/google-generativeai/#history


---


https://github.com/googleapis/python-genai


![スクリーンショット 2025-03-25 8.21.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/3f1788fe-c371-40a8-9902-e0d67f3119b9.png)


![スクリーンショット 2025-03-25 8.22.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/af77c186-ff3e-4098-91fc-2c5f356e96d7.png)



---



個人的には、google-generativeai　が好みですが
廃盤とあっては致し方なしです。

しかし、Gemini2.0　発表以降の
アップデートが激しくて、皆様方への感謝の念を禁じ得ません。





![スクリーンショット 2025-03-25 8.31.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/237930/570175da-3e72-4dde-9fef-c746033ac45f.png)


---

目次

https://qiita.com/bono0/items/dc1d000c98af7e07c9a7



関係各位の益々のご発展を祈念いたしまして
　ヨウ、パン、
ありがとうございます。





ー以上ー
フロントエンド入門：Webサイトの新着情報をS3とLambdaで自動反映できるか考察

## はじめに
この記事は、AWSのS3とLambdaを使って、Webサイトのトップ画面の「新着情報」に自動で記事を反映させる仕組みを作れるか？という個人の備忘録です。

:::note warn
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

まだ検証や実装は行っていないアイディア段階の内容です。

## 書こうと思ったきっかけ
静的なWebサイトをS3上で運用している中で、「新着記事や活動記録をアップしたら、トップ画面にも自動で反映されてほしいな」と思ったのがきっかけです。

DBは使いたくなかったため、S3とLambdaのみで完結する軽量な構成ができないかを考えました。

## 内容の説明（想定している構成）

### 実現したいこと
- S3に記事をアップロード（例：MarkdownやHTMLファイル）
- そのタイミングでLambdaを実行
- Lambdaが記事情報を読み取り、新着情報一覧（latest.json）を更新
- フロントはそのlatest.jsonを読み込んでトップに表示

### 使用するAWSサービス
- **S3**：記事ファイルや最新情報JSONの保存先
- **Lambda**：S3へのアップロードイベントをトリガーに起動し、latest.jsonを更新
- **latest.json**：新着記事の一覧をJSONで保持（例：最大10件）

### フロントの実装イメージ（静的HTML）
```javascript
fetch('https://my-bucket.s3.amazonaws.com/latest.json')
  .then(response => response.json())
  .then(data => {
    // 新着情報として表示
    data.forEach(item => {
      console.log(item.title, item.date, item.url);
    });
  });
```

### Lambdaで作成するlatest.jsonの例
```json
[
  {
    "title": "My Article",
    "date": "2025-03-25",
    "url": "https://my-bucket.s3.amazonaws.com/posts/2025-03-25-my-article.md"
  },
  {
    "title": "Another Post",
    "date": "2025-03-20",
    "url": "https://my-bucket.s3.amazonaws.com/posts/2025-03-20-another-post.md"
  }
]
```

### Lambda関数の想定処理
1. S3イベントで新規ファイル名を取得
2. ファイル名からタイトルや日付を抽出
3. 既存のlatest.jsonをS3から取得
4. 先頭に新しい記事を追加して、最大10件に制限
5. 更新後のlatest.jsonをS3に保存

## まとめ（雑感）
- **DBレスで構築可能な点が魅力**
- **LambdaにS3読み書きの権限が必要**
- **S3バケットポリシーの公開設定にも注意**
- **CloudFrontでのキャッシュ問題はあとで検討が必要かも**

今回はあくまで「こんな構成できそう！」という個人メモです。

もし実装がうまくいったら、そのときは検証済みとして別記事にまとめようと思います！笑
パス設定

## 選択リスト項目を作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/5f148860-fd4d-4ede-b763-54852109a5ac.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/cd415e87-4f85-4593-84ca-6e762f19e0f7.png)

## パス設定画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/458a0e40-59a5-40cc-a5b5-d889d42f8cfd.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/f4543cb9-8321-4496-b79e-dd6cc0c2e037.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/42728c7c-f8dd-43b9-9811-334dc0ff3e6d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/77d2c8a2-2c10-4c31-b5ad-d15425312728.png)

## パスを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/f2c893e6-420a-4c02-997a-c60f44c1e565.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3894299/523276de-d95b-40b1-9de2-89b14998a428.png)
URLについて［ServiceNow］

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

ServiceNowのURLの仕組みは、基本的に **「インスタンスのドメイン」＋「パス」＋「パラメータ」** で構成されており、以下のような形になる

```
https://<インスタンス名>.service-now.com/<パス>?<パラメータ>
```

---

## **1. インスタンスのドメイン**
`https://<インスタンス名>.service-now.com/`  
ServiceNowの各インスタンスにはユニークなドメイン名が割り当てられており、インスタンスごとにURLが異なる

例：  
- `https://dev12345.service-now.com/`（開発環境）
- `https://companyxyz.service-now.com/`（本番環境）


## **2. パス部分**
パスには、開くモジュールや機能によって異なる値が入ります。

### **(1) 通常のテーブルレコードのURL**
特定のテーブルのリストやレコードを開く場合のURL形式は以下のとおり。

- **リスト（一覧表示）**
  ```
  https://<インスタンス名>.service-now.com/<テーブル名>_list.do
  ```
  例：`https://dev12345.service-now.com/incident_list.do`
  - `incident_list.do` は `incident` テーブルの一覧を開く

- **フォーム（個別レコード表示）**
  ```
  https://<インスタンス名>.service-now.com/<テーブル名>.do?sys_id=<レコードのsys_id>
  ```
  例：`https://dev12345.service-now.com/incident.do?sys_id=1234567890abcdef`
  - `incident.do` は `incident` テーブルの単一レコードを開く
  - `sys_id=1234567890abcdef` で特定のレコードを指定

### **(2) ナビゲートするためのURL**
- ServiceNowには **「ナビゲートURL」** というものがあり、以下のように `nav_to.do` を使って特定のページへ遷移できます。
    - URLに .do を付けることで、特定のテーブルのデータをフォーム形式で表示する
    - この .do は 「特定のテーブルの1レコードを開くためのエンドポイント」 として機能する
        - エンドポイント：WebサービスやAPIの世界では、特定の機能やデータにアクセスするためのURL


```
https://<インスタンス名>.service-now.com/nav_to.do?uri=<遷移先>
```

例：
- `https://dev12345.service-now.com/nav_to.do?uri=%2Fincident_list.do`
  - `incident_list.do`（インシデント一覧ページ）へリダイレクト
      - ※%2F は URLエンコード された "/"（スラッシュ）を意味する
- `https://dev12345.service-now.com/nav_to.do?uri=%2Fsc_cat_item.do%3Fsys_id%3Dabcdef123456`
  - `sc_cat_item`（カタログアイテム）で `sys_id=abcdef123456` のレコードを開く

この仕組みを使うと、ServiceNowの内部リンクを柔軟に作成できる

---

## **3. パラメータ**
URLの末尾に `?` をつけて、クエリパラメータを追加できます。

### **(1) `sysparm_query` でフィルタを適用**
特定の条件でレコードをフィルタリングできる
※System Parameter Queryの略？

```
https://<インスタンス名>.service-now.com/incident_list.do?sysparm_query=priority=1
```
- `priority=1` で「優先度が1のインシデント」を表示

**複数条件を指定**
```
sysparm_query=priority=1^active=true
```
- `^`（キャレット）を使って条件をつなぐ

### **(2) `sysparm_view` でビューを指定**
```
https://<インスタンス名>.service-now.com/incident_list.do?sysparm_view=ess
```
- `sysparm_view=ess` でエンドユーザー向けビュー（ESSビュー）を適用

---

## **まとめ**
ServiceNowのURLは以下のような形式で構成される

```
https://<インスタンス名>.service-now.com/<パス>?<パラメータ>
```

- **テーブルのリストを開く** → `<テーブル名>_list.do`
- **特定のレコードを開く** → `<テーブル名>.do?sys_id=<ID>`
- **ナビゲートURLを使う** → `nav_to.do?uri=<エンコードされたパス>`
- **クエリパラメータでフィルタリング** → `sysparm_query=<条件>`
Photon FusionのDespawnedメソッドがoverrideできない？

Photon FusionのDespawnedメソッドの公式ドキュメントのサンプルが間違っていて、そのままコピーするとoverrideできません。

IDespawnedでDespawned自体は実装されているのですが、実際には引数ありのDespawanedなのでサンプルそのままだとoverrideできません。以下の通り引数を追加すれば正常に動作します。

```csharp
public class Example : NetworkBehaviour
{
    public override void Despawned(NetworkRunner runner, bool hasState)
    {
        // Use this instead of Destroy for NetworkObjects
    }
}
```

よくよく考えるとDespawnedするタイミングでrunnerが必要な場合などあるでしょうし、便利にした結果、ドキュメントの更新まで追いついていないのかなと思いました。
IntelのIntrinsic関数をRISC-VやOpenPOWERにポートすることによって実現すること

今までの記事で、IntelのIntrinsic関数をOpenPOWERやRISC-Vにポートする方法について論じてきたが、それによって実現することについて書いていこうと思う。
以下にリストしてみる。

* WindowsがM1〜M4などのMacのAppleシリコンで動くようになる。
* ARMでWindowが動くため、Windowsが高速化する
* 今はサーバやPCはIntel系が主流だが、RISC-VやARMやOpenPOWERなどのCPUでサーバが動かせるようになる
* 比較的軽いCPUであるRISC-VやARMやOpenPOWERでサーバアプリケーションが動かせるようになるため、サーバが高速化する。エネルギー消費も抑えられる。
* PCも高速化する。バッテリー消費が抑えられ、高速化する。
* RISC-VはオープンなISAであるため、ライセンス料が要らないため、サーバやスパコンの値段が下がる。
* RISC-VはオープンなISAであるため、PCの値段が下がる
* ARMやIntelはそれぞれ英国と米国の企業によってライセンスされているため、英国や米国以外の国が自由に改造したりできない。RISC-VはオープンなISAであるため、英国や米国以外の国が自由に改造できる。
* 現時点ではサーバはソフトウェアはオープンソース、ハードウェアはプロプライエタリであることが多いが、IntelからRISC-Vへのポートが実現すれば、ソフトウェア、ハードウェア双方ともオープンソースのIntel系のアプリケーションが走るサーバが出来上がる。
* 同じく、ソフトウェア、ハードウェアともにオープンソースのIntel系のアプリケーションが走るPCが出来上がる。
* ラズパイでIntel系のアプリケーションが走る。
* ドローンなどは恐らくIntel系のCPUを積んでいないが、ドローンなどでIntel系のLinuxアプリケーションが走るようになる。

続きは後で書きます。
Gatherのチャットをプログラマブルに取得する(2024年度以降) 🍇

## はじめに :grapes:

- バーチャルオフィスサービスの [Gather Town](https://gather.town) にはチャット機能がございます 💬
  - チャットなどを送受信できる WebSocket の API と[クライアントライブラリ](https://www.npmjs.com/package/@gathertown/gather-game-client)あり (当時)
    - Gather 上でやり取りした内容を自動で Slack や Google スプレッドシート :file:  へ残したり社内の発表で投稿されたコメントが流れる某動画サイト風の演出を行ったりするツールを作る際に便利でした :tv: 
- こちらの機能は[2024年4月頃にアップグレード](https://support.gather.town/hc/en-us/articles/25345398939924-Overview-of-Chat-for-Remote-Office-Spaces)され根本的にいろいろ変わったので今回は新しいチャット内容の取得方法をまとめます
  - 今後、前述のようなツールを作る際の役に立てばと思います (備忘録) :bow: 

---

## 新旧チャット機能で変わったこと

- チャット機能が [Sendbird | センドバード](https://sendbird.co.jp) という SaaS へ置き換えられました :bird: 
- これにより Slack のような絵文字 :thumbsup: :heart: :smiley:  によるリアクション機能や投稿したメッセージの編集機能 :pencil:  などが提供されるようになりました :tada: 
- 従来の API からはチャットを取り扱うことができなくなったので [Sendbird の Web API](https://sendbird.com/docs/chat/platform-api/v3/message/messaging-basics/list-messages) で取得する必要があります :muscle: :muscle: :muscle:

---

## 新 API でチャット内容を取得してみる

### [1] 予めチャットを投稿

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133081/74ed9b2d-3f2a-4e73-82b2-485311e95e59.png)

### [2] チャット内容を取得し jq で整形

※ `{}` 内の値は手っ取り早く開発者ツールで他の sendbird の API のペイロードを参考にしました

```zsh
curl 'https://api-{アプリケーションID}.sendbird.com/v3/{チャットの種類 会議室とかであれば group_channels で良い}/{チャンネルID}/messages?message_ts={1742635972086 などメッセージを取得したい時間帯の unix タイム}' \
  -H #省略
  -H 'content-type: application/json; charset=utf-8' | jq
```
↓ 取得できた :tada: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133081/9eb9705b-4479-419d-b24e-570187113cec.png)

---

## 応用

以前作った Gather 上のコメントやリアクションを Web サイトに流すツールをまた使えるよう修正できました :tada: 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133081/22085c18-b204-447b-9004-980268b559de.png)

---

## [余談] Gather のデータの副処理者としての Sendbird 🤝

| [2023年](https://web.archive.org/web/20231201152848/https://ja.gather.town/dpa) の [Data Processing Addendum](https://www.gather.town/dpa) の時点で既にアプリ内チャットの用途として記載あり |
| - |
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133081/73329750-c695-4bc7-b618-7ecda6269ce3.png) |

---

## [余談] Gather Help へのお問い合わせ :e-mail: 

- 窓口URL: https://support.gather.town/hc/en-us
- 一応 Gather として Sendbird をラップした感じの API がないかお伺いしてみた
- 結論としては該当するものは無いようだが notion 上にまとめられた [API ドキュメント](https://gathertown.notion.site/Gather-HTTP-API-3bbf6c59325f40aca7ef5ce14c677444) をご紹介いただけました :smile: 
  - ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/133081/c9ab690c-bc12-43a1-b7fd-6938aac8d7e5.png) 

---

## [余談] Sendbird セッショントークン API とクライアントライブラリ

### セッショントークン API

永続的にチャット内容を取得したい場合は必要かもしれない

https://sendbird.com/docs/chat/platform-api/v3/user/managing-session-tokens/issue-a-session-token

### クライアントライブラリ

node.js とかで開発する場合は使った方が良いかもしれない

https://www.npmjs.com/package/@sendbird/chat

---

## さいごに

とりあえず過去に作った Gather のチャットを取り扱うツールたちはこれで直せそうで良かったです :tada: :tada: :tada:
今後は前述であげた セッショントークン API や クライアントライブラリ 周りも検証できたらと思います :muscle: 
ここまでご高覧ありがとうございました！ :bow:
フロントエンド入門：HTMLの書き方がわからない人へ、実例とともに解説いたします

## はじめに
HTMLはWebページの構造を定義するための言語であり、正しい構造で記述することで、見やすく保守性の高いWebサイトを実現できます。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

この記事では、ホンダ社労士事務所のトップページHTMLを例に、その構成要素と役割を解説します。

## 書こうと思ったきっかけ
Webページを制作している際に「このタグって何のためにあるの？」「どうやってパーツを分けて構成するのが正解なんだろう？」と疑問に思うことがありました。

***具体的なコードをもとに整理することで、HTMLの構造理解を深めたいと思い、この記事を書くことにしました。***

## HTML構成の解説

### `<head>`要素
```html
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>ホンダ社労士事務所</title>
  <link rel="stylesheet" href="css/style.css">
  <link rel="stylesheet" href="css/index.css">
</head>
```
- ページの文字コード、レスポンシブ対応、タイトル、CSSの読み込みなど、基本設定をまとめています。

### `<header>` ヘッダー部分
```html
<header>
  <div class="header-title">
    <a href="index.html">
      <img src="images/logo.png" alt="ロゴ" style="height: 50px; margin-right: 1000px;">
    </a>
  </div>
```
- ロゴ画像を表示し、トップページへのリンクとして機能します。

#### ハンバーガーメニュー
```html
  <div class="hamburger" id="hamburger">
    <span></span>
    <span></span>
    <span></span>
  </div>
```
- スマホでのメニュー開閉用のアイコン（3本線）を表示。

#### ナビゲーションメニュー
```html
  <nav class="nav-menu" id="nav-menu">
    <a href="index.html">HOME</a>
    <a href="office.html">事務所案内</a>
    <a href="services.html">サービス案内</a>
    <a href="contact.html">お問い合わせ</a>
    <a href="support-a.html">就労支援A型</a>
  </nav>
</header>
```
- サイト内を移動するためのリンクをまとめたナビゲーション。

### `<main>` メインコンテンツ
```html
<main class="container">
```
- サイトの主要なコンテンツを格納する領域です。

#### 画像セクション
```html
<section class="top-image">
  <img src="images/bridge.png" alt="ホンダ社労士事務所の外観またはイメージ画像" />
</section>
```
- トップページ用の大きなイメージ。

#### 新着情報・お知らせ
```html
<section>
  <h2>新着情報</h2>
  <ul>
    <li><a href="info/20241226093859.html">2024.12.26 ホームページを開設いたしました</a></li>
    ...
  </ul>
</section>
```
- お知らせや更新情報をリスト形式で表示しています。

### `<footer>` フッター
```html
<footer>
  <p>&copy; ホンダ社労士事務所</p>
</footer>
```
- ページ最下部に事務所名や著作権表示などの補足情報を配置します。

### `<script>` JavaScript
```html
<script>
  const hamburger = document.getElementById('hamburger');
  const navMenu = document.getElementById('nav-menu');
  hamburger.addEventListener('click', () => {
    hamburger.classList.toggle('open');
    navMenu.classList.toggle('active');
  });
</script>
```
- ハンバーガーメニューをクリックしたときにメニューの表示・非表示を切り替える処理です。

## まとめ
このように、HTMLは要素ごとに役割を持たせて整理することで、可読性が高く保守もしやすい構造になります。

:::note warn
***特に `<header>` `<main>` `<footer>` の三分割を意識しながら、ナビゲーションやセクションの使い分けを覚えると、実務でも役立つサイト構成が自然と身につきます。***
:::

今回のコード例を参考に、自分なりに構成をカスタマイズしてみるのもおすすめです！
Pythonista3と Cursorで作る筋トレ記録用キーボード

## はじめに
![t-menu-manager-overview.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606169/68f66a69-828a-4694-a03d-c98a6da49bdc.gif)

ダイエットのために **筋トレを習慣化** しようと考え，メモアプリ（[**Obsidian**](https://obsidian.md/download)）で記録を取っていました．しかし，**ジムでスマホを使って記録するのが不便** でした．

### **記録の課題**
- 📱 **スマホのキーボードで数値を入力するのが面倒**
- 🤔 **前回の重量や回数を思い出せない**  
  - 🏋️ 筋トレ初心者であるため，**重量や回数を設定する際に前回の記録を基準にし，それを超えることを目標にしていた**
- 📝 **メモアプリでフォーマットを統一しようとすると，その分手間が増える**

---

### **解決策**
この課題を解決するため，[**Pythonista3**](https://apps.apple.com/jp/app/pythonista-3/id1085978097) の **キーボード拡張機能** を使って **カスタムキーボード** を作りました！ 

作成したソースコードは **GitHubで公開** しています． 
▶️ [GitHubリポジトリはこちら](https://github.com/keitao7gawa/t-menu-manager) 🚀

### **なぜPythonista3 + カスタムキーボード？ 🤔**
- **Webアプリではダメなの？ 🌐**  
  → 記録を [**Obsidian**](https://obsidian.md/) に直接保存したかったため，**ジムでの入力に最適なキーボード拡張が適切** だと判断．
- **iOSアプリ（Swift）で作らないの？ 📱**  
  → Swiftでアプリを作るのも手でしたが，**手軽に実装できることを優先**．
    **過去にPythonista3での開発経験があった** ため，こちらを選択しました．
## 開発環境 🛠️
- **📱 iPhone 15 Plus**：Pythonista3でキーボード拡張機能を実装
- **💻 MacBook Air M3**：Cursorで iCloudで同期 したコードを編集

---

### 🔄 **開発フロー**
1. **Cursorでコードを編集** ✍️  
2. **iCloudで自動的にiPhoneに同期** 🔄  
3. **Pythonista3で動作確認** 🛠️  
4. **実際に使用しながら改善** 🏋️‍♂️  

今回，コードエディタとして **[Cursor](https://www.cursor.com/ja)** を初めて使いましたが，その便利さに感動しました...！
特にボタンの配置など UIの調整は難しかったですが，実際のiPhoneのスクショを見せながらできるのが助かりました．
iCloudとの連携は多少ラグはありますが，**Macで編集 → iPhoneでテスト** の流れはスムーズに行えました．
反省があるとすれば，Macの iPhoneミラーリング機能を利用しなかったことです，もし利用していれば，さらに開発しやすくなったと感じています．
## 機能紹介 🚀
![keyboard_input.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606169/e0f2279c-94be-418c-9306-da5bde177377.png)

### 1. メニュー選択機能 🏋️‍♂️

- **部位タグ付きで種目を表示**（例：スクワット → [脚]）
- **ワンタップで選択**
- **テキストファイルでメニューを管理**（カスタマイズ可能）
	- **設定項目**：メニュー名 / ターゲット部位 / パラメータ（単位，ステップ，最大値）

### 2. パラメータ入力機能 🎛️
- **直感的な操作で素早く入力**
	- スライダーで数値を調整
	- プラス/マイナスボタンで微調整
	- **パラメータの単位はメニューごとに設定**
#### 🏆 **記録の可視化**
- **前回の記録を参考に調整**
- **最高記録を超えると文字が赤く変化** 🔴
- **パラメータが 0 の場合は記録ボタンを無効化**
### 3. 記録機能 📝
- **記録フォーマットを2種類用意**
	1. 種目名のみ  
		`- レッグプレス`
	2. 重量・回数付き  
		`- 80kg, 10回`
- **JSONファイルで記録を管理**
	- **前回記録と最高記録を保存**（履歴を活用）
## まとめ
Pythonista3のキーボード拡張機能を活用し，トレーニング記録用のカスタムキーボードを作成しました．開発には iCloudと Cursorを組み合わせ， iPhoneと Macの両方で効率的に作業ができるようにしました．実際に使ってみると，トレーニング中の記録がスムーズになり，前回の記録を意識しながらトレーニングできるようになりました．
ソースコードは [GitHub](https://github.com/keitao7gawa/t-menu-manager)で公開しているので，ぜひカスタマイズして活用してみてください！

**質問やフィードバックがあればコメントでお願いします！🙌**
**「いいね」していただけると励みになります！**
フロントエンド入門：レスポンシブ対応って何？CSSで画面サイズに応じたデザインを作ったので紹介してみる

## はじめに
スマートフォンやタブレットなど、さまざまな画面サイズでWebサイトが閲覧される現代では、"レスポンシブ対応" が欠かせません。

:::note warn
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

本記事では、CSSのメディアクエリを使ったレスポンシブ対応の具体的な実装方法について、コードとあわせて解説します。

## 書こうと思ったきっかけ
自分で作ったWebサイトをスマホで確認したときに、ナビゲーションがはみ出していたり、メニューが見づらくなっていたりすることがありました。

「PCでは完璧なのに！」と思って調べた結果、メディアクエリを使ったレスポンシブ対応に行き着いたため、忘れないようにまとめておきます。

## 内容の説明（レスポンシブ対応のCSSコード）
以下は、画面幅が768px以下のときに適用されるスタイルです。主にナビゲーションメニューをスマホ向けに切り替えるための設定です。

```css
@media (max-width: 768px) {
  .nav-menu {
    display: none;
    flex-direction: column;
    background-color: #fff;
    position: absolute;
    top: 70px;
    right: 20px;
    padding: 10px;
    box-shadow: 0 0 10px rgba(0,0,0,0.1);
    z-index: 1000;
  }

  .nav-menu.active {
    display: flex;
  }

  .menu-toggle {
    display: block;
  }

  .hamburger {
    display: flex;
  }
}
```

## 解説ポイント
- `.nav-menu`：通常は非表示にし、メニューが開かれたときだけ表示。
- `.nav-menu.active`：JavaScriptなどでクラスが付与されると表示される。
- `.menu-toggle`と`.hamburger`：PCでは非表示にし、スマホでは表示。
- `position: absolute` を使用し、画面右上にナビゲーションが展開されるように設計。

このような仕組みで、限られた画面スペースを有効活用し、使いやすいUIを実現できます。

## まとめ
レスポンシブ対応のCSSは、メディアクエリを活用することで簡単に実装できます。

:::note info
**特にナビゲーション周りはスマホでの使いやすさに直結するため、見落とさずに対応することが大切です。**
:::

今後は、レスポンシブだけでなく、アニメーションやARIA属性の付与なども取り入れながら、さらに洗練されたモバイルUXを目指していきたいと思います。
[AWS #39] AWS Trust & Safetyチーム

<!--
 <font color="c00000"></font> 赤
-->
## はじめに
お疲れ様です。:computer:
今回は**セキュリティ**分野にある<font color="c00000">**「AWS Trust & Safetyチーム」**</font>について見ていきたいと思います。


## AWS Trust & Safetyチーム
「AWS Trust & Safetyチーム」は、AWSのサービスとインフラストラクチャを利用する顧客とそのエンドユーザーの安全と信頼性を維持するための取り組みを担当しています。AWSリソースが <font color="c00000">**不正な目的で使用されている可能性がある場合**</font>に **「AWS不正使用レポートフォーム」** を使用してAWS Trust & Safrtyチームに連絡します。

### 何を報告するか
AWSリソースの利用者が次のような**不正行為**に関与している可能性があります。そんな時に、「Trust & Safetyチーム」がサポートしてくださります。

**・不適切なWebコンテンツ**
**・Eメールの不正行為**
**・不正なネットワークアクティビティ**
**・著作権侵害**

---
AWS Trust & Safetyチームは、顧客から提供された情報に基づいて報告された <font color="c00000">**インシデント調査と解決を行います。**</font> 報告は下記のURLからできます。

https://support.aws.amazon.com/#/contacts/report-abuse

### まとめ
:::note info
AWS Trust & Safetyチームチームは、AWSリソースが <font color="c00000">**不正な目的で使用されている可能性がある場合に調査を行ってくれる**</font>
:::

:::note info
報告は、**AWS不正行為報告フォームから行う**
:::

最後までお読みいただきありがとうございました！
>>**日頃より活用している参考書です。**
>> **「参考書」**
[**AWS認定クラウドプラクティショナー改定第3版（AWS Trusted Advisorは48ページ）**](https://aws.amazon.com/jp/about-aws/whats-new/2024/10/aws-trust-safety-center-re-post/)
>

> **「AWS公式サイト」**
[**AWS Trusted Advisor**](https://aws.amazon.com/jp/premiumsupport/technology/trusted-advisor/)

> **「資料」**
[**【そんなサービスがあったのか！と思った AWS のサービス**](https://zenn.dev/mn87/articles/5c0376f652eb71)
>
【試験対策】ビジネスメール詐欺（BEC）による金銭被害とは？事例・対策を解説！

✅ はじめに
近年、企業を狙ったビジネスメール詐欺（BEC: Business Email Compromise） による金銭被害が急増しています。
特に、役員や取引先になりすまし、送金を指示する手口 が多く、
応用情報技術者試験（午後）のセキュリティ分野 でも狙われやすいテーマです。

本記事では、
✅ ビジネスメール詐欺とは？
✅ 具体的な攻撃手法（事例）
✅ 被害を防ぐための対策
✅ 試験の出題ポイント
を解説します！

⸻
📌 ビジネスメール詐欺（BEC）とは？
🔹 概要
ビジネスメール詐欺（BEC） とは、
企業の経営者や取引先になりすまし、不正に送金させる詐欺 のことです。

攻撃者は、
	•	会社のメールアカウントを乗っ取る
	•	実在の人物になりすました偽メールを送る
といった手口で経理担当者や社員をだまし、不正送金をさせます。

🔹 なぜBECが増えているのか？
	1.	メールのやり取りを利用するため、攻撃が気づかれにくい
	2.	偽装メールが巧妙化し、見抜くのが難しい
	3.	海外取引やリモートワークの増加で、直接確認が取りにくくなっている

⸻
📌 具体的な攻撃事例
✅ 1. 取引先を装った偽請求書詐欺
	•	内容:
企業の経理担当者宛に、取引先になりすました偽の請求書 が届く。
	•	手口:
	•	取引先のメールアカウントをハッキング
	•	偽の振込先情報を記載し、企業に送金させる
	•	結果:
正規の取引と思い込み、数百万円～数億円が詐欺グループに送金される。

✅ 2. CEO なりすまし詐欺
	•	内容:
攻撃者が企業のCEO（社長）になりすまし、経理担当者に送金を指示 する。
	•	手口:
	•	CEO のメールアドレスを偽装し、「極秘の送金を頼む」などのメールを送る
	•	緊急性を強調し、疑う暇を与えずに送金させる
	•	結果:
企業の資金が海外の口座へ送金され、回収が困難に。

✅ 3. メールアカウント乗っ取り
	•	内容:
企業のメールアカウントが乗っ取られ、取引先や社員に偽の指示を送る。
	•	手口:
	•	フィッシングメールなどでメールアカウントの認証情報を盗む
	•	乗っ取ったアカウントから従業員や取引先に送金指示を出す
	•	結果:
社内や取引先の信頼関係を悪用し、不正送金を成功させる。

⸻
📌 被害を防ぐための対策
BECは「人をだます攻撃」なので、技術的な対策と社員教育の両方が重要 です。

🔹 1. メールのなりすまし対策
✅ SPF・DKIM・DMARCの設定
	•	SPF（Sender Policy Framework） → なりすましメールの送信元をチェック
	•	DKIM（DomainKeys Identified Mail） → メールの改ざんを防止
	•	DMARC（Domain-based Message Authentication, Reporting & Conformance） → SPF・DKIMのチェック結果に基づき、不正メールをブロック

✅ なりすましメールの警告表示
	•	企業のメールシステムに外部送信者の警告メッセージを表示 させる

🔹 2. 社員教育と送金ルールの強化
✅ 送金前の本人確認を徹底
	•	メールだけでの送金指示は受け付けない
	•	電話やビデオ通話での確認を義務化

✅ 不審なメールの特徴を周知
	•	メールアドレスの微妙な違い（「example.com」→「examp1e.com」など）
	•	「至急」「秘密」など、緊急性を強調する内容

🔹 3. メールアカウントのセキュリティ強化
✅ 二要素認証（2FA）の導入
	•	メールアカウントの乗っ取りを防ぐために、パスワード＋ワンタイムパスワード（OTP） を必須化

✅ パスワードの定期変更・管理強化
	•	使い回しを禁止し、パスワードマネージャーを活用

✅ フィッシング対策ソフトの導入
	•	怪しいメールを検出し、自動でブロック

⸻

📌 試験での出題ポイント
✅ 記述問題の対策
試験では、「ビジネスメール詐欺の手口と対策」を説明できるかが問われます。
以下のような問題が出る可能性が高い ので、しっかり対策しましょう。

Q1. ビジネスメール詐欺（BEC）とは何か？また、その被害を防ぐための対策を1つ挙げて説明せよ。

解答例:
BECとは: 企業の経営者や取引先になりすまし、不正送金を指示する詐欺。
対策: 送金前の本人確認を徹底する。メールのみでの送金指示を禁止し、電話などの別経路で確認することで被害を防ぐ。

Q2. メールのなりすましを防ぐための技術的な対策を1つ挙げ、説明せよ。

解答例:
対策: SPF（Sender Policy Framework）を設定する。
理由: 送信元IPアドレスの認証を行い、なりすましメールをブロックできるため。

⸻

✅ まとめ
	•	ビジネスメール詐欺（BEC）は、CEOや取引先になりすまし、不正送金を指示する詐欺
	•	攻撃者はフィッシングやメールアカウントの乗っ取りを利用し、正規のやり取りを装う
	•	送金前の本人確認、なりすましメール対策（SPF・DKIM・DMARC）、二要素認証の導入が有効
	•	試験では「手口」「リスク」「対策」をセットで理解し、記述問題に対応できるようにする！
フロントエンド入門：Webページの<head>タグ構成に少し混乱したので、役割を整理してみた

## はじめに

HTMLの`<head>`タグ内では、文字コードの指定やスタイルシートの読み込みなど、Webページの土台を構成する大切な情報を記述します。

:::note info
**個人の備忘録程度の走り書きとなっておりますが、温かい目で見守っていただければ幸いです。**
:::

今回は、ホンダ社労士事務所のWebサイトに実際に使用された`<head>`タグの構成とその役割について解説します。

## 書こうと思ったきっかけ

複数のCSSファイルをページごとに読み込む際、「読み込み順って影響あるの？」「どこまでが共通でどこが個別？」と混乱した経験がありました。

**初心者の方が理解しやすいように、自分の理解を整理するためにまとめました。**

## 内容の説明（<head>の構成と解説）

以下は実際に使用している`<head>`タグのHTMLコードです。

```html
<head>
  <meta charset="UTF-8" />
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  <title>ホンダ社労士事務所</title>
  <link rel="stylesheet" href="css/style.css">
  <link rel="stylesheet" href="css/index.css">
  <link rel="stylesheet" href="css/support-a.css">
</head>
```

### 各要素の解説
- `<meta charset="UTF-8">`
  - 文字コードをUTF-8に指定。日本語を含むコンテンツでは必須です。

- `<meta name="viewport" content="width=device-width, initial-scale=1.0">`
  - スマホなどの画面幅に合わせて表示を調整するための指定。レスポンシブ対応には欠かせません。

- `<title>`
  - ブラウザのタブや検索結果に表示されるページのタイトル。

- `<link rel="stylesheet" href="css/style.css">`
  - 全ページ共通の基本スタイルを記述したCSSファイル。

- `<link rel="stylesheet" href="css/index.css">`
  - トップページ専用のスタイル。style.cssの上に追加・上書きする内容。

- `<link rel="stylesheet" href="css/support-a.css">`
  - 就労支援A型ページ専用のスタイル。必要に応じて追加。

CSSは上から順に読み込まれるため、共通→ページ固有の順で書くと整理しやすく、効率的です。

## まとめ

`<head>`タグ内の構成は、Webサイト全体の安定性と可読性に直結する重要なポイントです。

:::note warn
***共通のCSSとページ固有のCSSを分けて管理することで、スタイルの再利用性が高まり、保守性も向上します。***
:::

今後は、SEO対策用の`<meta>`タグやSNSシェア用のOGPタグなども組み合わせて、より充実した構成にしていきたいと思います！
画像ファイルgraph.jpgをPythonで読み取りたい（２）

# 画像ファイルのグラフ値をPythonで数値として読み取りたい
前回実施した結果は，こちらです．




PythonのOpenCVライブラリを使うという意味では同じなのですが，
前回とは少し異なるやり方で，グラフ値の読み取りを実行してみました．

**＜読み取るグラフはこちら＞**

![torque.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1979979/4e0c57da-e418-4849-9004-3a1ec9ea828a.jpeg)

残念ながら，これもうまくいかなかったのですが，参考として残しておこうと思います．

```read_graph_cv2.py
# -*- coding: utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
import japanize_matplotlib

image = "torque.jpg"
k = 1
th = 100
y_min = 50
y_max = 110
x_min = 600
x_max = 7800

def get_profile():
    # 画像を読み込み、前処理を行う
    img = cv2.imread(image, 0)
    kernel = np.ones((k, k), np.uint8)
    ret, img = cv2.threshold(img, th, 255, cv2.THRESH_BINARY)
    img = cv2.dilate(img, kernel, iterations=1)
    img = cv2.erode(img, kernel, iterations=1)
    
    # 画像の高さと幅を取得
    h, w = img.shape
    
    # XYデータを格納するリスト
    profile = []
    
    # グリッド線と外枠を検出し、無視する
    edges = cv2.Canny(img, 50, 150)
    lines = cv2.HoughLinesP(edges, 1, np.pi / 180, threshold=100, minLineLength=100, maxLineGap=10)
    mask = np.ones_like(img) * 255

    if lines is not None:
        for line in lines:
            x1, y1, x2, y2 = line[0]
            cv2.line(mask, (x1, y1), (x2, y2), 0, 2)  # グリッド線と外枠を黒で描画

    img_without_grid = cv2.bitwise_and(img, mask)

    # 画像からデータポイントを抽出
    for i in range(w):
        line = img_without_grid[:, i]
        edge = [j for j in range(h - 1) if line[j] != line[j + 1]]
        if len(edge) < 1:
            val = 0
        elif len(edge) == 1:
            if edge[0] > h / 2:
                val = 0
            else:
                val = h
        else:
            val = h - sum(edge) / 2
        point = [i + 1, val]
        profile.append(point)
    
    # 座標変換を行う
    y = max(profile, key=lambda p: p[1])[1]
    for q in range(w):
        profile[q][0] = profile[q][0] * (x_max - x_min) / w + x_min
        profile[q][1] = (profile[q][1] * (y_max - y_min) / y) + y_min

    return profile

# 抽出したデータポイントを取得
data_points = get_profile()

# 抽出したデータポイントのx, y座標を取得
x_coords = [point[0] for point in data_points if x_min <= point[0] <= x_max and y_min <= point[1] <= y_max]
y_coords = [point[1] for point in data_points if x_min <= point[0] <= x_max and y_min <= point[1] <= y_max]

# オリジナルの画像を表示
plt.figure(figsize=(10, 6))
original_img = cv2.imread(image)
original_img_rgb = cv2.cvtColor(original_img, cv2.COLOR_BGR2RGB)
plt.imshow(original_img_rgb)
plt.title('Original Image')
plt.grid(False)
plt.show()

# 抽出したトルク曲線を表示
plt.figure(figsize=(10, 6))
plt.scatter(x_coords, y_coords, color='blue', marker='o', label='Torque Curve')
plt.title('Scatter Plot of Extracted Torque Curve (Ignoring Grid Lines and Outline)')
plt.xlabel('X座標')
plt.ylabel('Y座標')
plt.legend()
plt.grid(True)
plt.show()
```

パラメータ値のｋやthを変えて色々トライしてみましたが，中々に難しいですね．

![読み取り結果2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1979979/0aee848c-dfe4-4afb-a7e3-8fb31cd0aea2.jpeg)

前回よりは，ましか．．．

やっぱり行き着くところは．．．

https://note.com/docp3/n/n5c4e9a79585a
comelang version 25.0.3

Rustみたいなon_drop入れました。正直あまり好きな機能ではないですが。
まあ、open, closeなど、終了処理が必要な場合、Rubyみたいにメソッドチェインできますね。
そのおかげで以下のように書けます。

```
#include <comelang.h>
#include <comelang-pthread.h>

int main(int argc,char** argv)
{
    var li = new come_mutex<list<int>*%>([1,2,3]);
    
    var thread2 = come {
        sleep(3);
        
        li.lock().to_string().puts();  // on_drop call unlock()
    }
    
    var thread = come {
        li.lock().add(4); // on_drop call unlock()
        li.lock().add(5); // on_drop call unlock()
    }
    
    come_join(thread);
    come_join(thread2);
    
    return 0;
}
```
git resetと各種オプション、類似コマンド(restore/revert)との比較


## 本質：`git reset` とは？

- **ブランチが指すコミット（HEAD）を別のコミットに変更**する。
- その際、ステージングエリアやワーキングツリーに与える影響を** オプション（`-soft`, `-mixed`, `-hard`）で制御する。**⇒ コミットやステージングのやり直しができる**



## オプション別挙動

| オプション | コミット（HEAD） | インデックス | ワークリリ |
| --- | --- | --- | --- |
| soft | 指定したコミットに移動する | 現在の編集を保持 | 現在の編集を保持 |
| mixed | 指定したコミットに移動する | ステージング解除(当時のコミット内容に準拠) | 現在の編集を保持 |
| hard | 指定したコミットに移動する | ステージング解除(当時のコミット内容に準拠) | 当時のコミット内容に準拠 |

---

## 使えそうなオプションとユースケース

### ◾ `git reset --soft`

- **想定状況：**「コミットはしたけど、まだ手直ししたい」
- **使いどころ：** 途中でコミットしてしまったものを、まとめ直してコミットし直す
- **補足：** ステージング状態は維持されるので、即修正＆再コミットできる。

### ◾ `git reset` または `git reset --mixed`

- **想定状況：**「ステージングしすぎた、いったん全部外したい」
- **使いどころ：** ステージングが複雑になりすぎたとき
- **補足：** ファイルの変更内容は残るため、安全性は高い。

### ◾ `git reset --hard`

- **想定状況：**「とにかくすべてリセットしたい」
- **使いどころ：** pull での想定外のブランチにマージしたとき、ファイル変種段階で大幅にやらかしたとき

---

## git revert

* 目的：
「履歴を壊さずに過去の変更を取り消す」

* 挙動：
過去の変更履歴を打ち消すコミットを作る。
元のコミットはそのまま履歴に残るため、リモートブランチでも安全に使える。

* 例：
```
git revert HEAD~1
```

 * ポイント：
 直前のコミットを“逆の操作”で取り消す。
revert は履歴を改変しない。
公開済みのブランチでの「取消し」は必ず revert を使うべき。


###  注意：共有ブランチで `reset` は原則禁止。必ず `revert`する

- **共有ブランチで `reset` を行うと、他人の履歴を書き換えることになる。**
- → 代わりに `git revert` を使うことで、元の履歴を保持しつつ取り消しが可能。

例：

```bash
# 最後のコミットを取り消す（履歴を残す）
git revert HEAD
```

---
## git restore
* 目的：
「ワーキングツリーやステージングエリアの内容を元に戻す」(ファイル単位で変更を戻す)

* 主な使い方：
git restore file 
⇒	作業ツリー（ファイルの中身）を最新のコミットに戻す（未ステージに戻す）
git restore --staged file
⇒ステージングからファイルを外す（git add を取り消す）
例：
```
git restore --staged file.txt
→ git add file.txt を取り消す。
```

```
git restore file.txt
→ 作業中の変更を破棄（上書き）する。
```

* ポイント：
reset の安全版。
ファイル単位で戻せるので、細かい調整・ステージングのやり直しに最適。


## `reset` vs `restore` の個人的使い分け

| 目的 | 適切なコマンド | 理由 |
| --- | --- | --- |
| ステージング解除（`git add` を戻す） | 解除したいファイル数次第 | `reset` で一気に戻したいとき以外は`restore` 優先したほうが安全かも |
| 作業ファイルの変更を取り消す | `git restore <file>` | `reset` より意図が明確、思わぬ範囲への影響防止 |
| コミットごと取り消したい | `git reset --soft/mixed HEAD^` | `restore` では履歴を戻せない |





## `reflog` ＋ `reset` での復元

- **履歴が吹き飛んだように見えても**、`reflog` で戻せる

```bash

git reflog
# 例: HEAD@{2} などを確認して戻す
git reset --hard HEAD@{2}

```



## まとめ

コミット・ステージングのや直しに強力。

push済のコミットの取消は必ず `revert`、ステージングのや直しは `restore` を基本にする。
2025/3/25主にITとかセキュリティの記事

Next.jsの脆弱性CVE-2025-29927まとめ(3/23)
https://zenn.dev/t3tra/articles/c293410c7daf63

依存パッケージの脆弱性、放置してませんか？(3/22)
https://qiita.com/KoenigWolf/items/ac8dd36838b7e6603cc4

Microsoftの署名サービスが悪用されマルウェアに正規証明書付与(3/23)
https://reinforz.co.jp/bizmedia/75723/

Cloudflare、AIクローラーを”迷路”に誘い込む革新的防御技術「AI Labyrinth」を発表 – ボットを騙して時間とリソースを浪費させる新戦略(3/23)
https://innovatopia.jp/cyber-security/cyber-security-news/49937/

楽天証券の二段階認証設定を阻むマネーフォワード連携機能問題 – 金融機関によるAPI連携環境の整備遅れがもたらす重大なセキュリティ被害(3/23)
https://nikkeimatome.com/?p=55635

【伊藤が解説】セキュリティ神話崩壊、楽天証券の不正アクセス被害(3/23)
https://coin-otaku.com/topic/74642

楽天証券でフィッシング詐欺じゃないのにID・パスワードが流出の恐怖(3/23)
https://agora-web.jp/archives/250323005022.html

元教師ユーチューバー鬼丸征也が解説！楽天証券不正ログイン被害の実態(3/23)
https://news.livedoor.com/article/detail/28404343/

米国 NIST IR 8523（初期公開ドラフト） 刑事司法情報システムのための多要素認証： 刑事司法情報を保護するための実装上の考慮事項 (2025.03.13)(3/23)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/03/post-490e0f.html

米国 NIST NIST SP 1308（初期公開ドラフト） NIST サイバーセキュリティフレームワーク 2.0： サイバーセキュリティ、エンタープライズリスクマネジメント、要員マネジメント クイックスタートガイド (2025.03.12)(3/23)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/03/post-5315bd.html

オーストラリア ACSC DoS攻撃への準備と対応 (2025.03.17)(3/23)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/03/post-9bc710.html

Windows発の巧妙なフィッシング攻撃がMacにも波及　LayerX Labsが新たな脅威を警告(3/23)
https://reinforz.co.jp/bizmedia/75625/

フィッシング詐欺の仕組みとは？(3/23)
https://qiita.com/ARISA1115/items/1707619368827efbcdf4

生成AIや量子技術で生まれる新たな脅威とは？　企業に求められるセキュリティ対策のパラダイムシフト(3/24)
https://news.yahoo.co.jp/sponsored/kyndryl.secure_250324.html

米国 NIST SP 1800-33（初期公開草案）5G サイバーセキュリティ (2025.03.18)(3/23)
http://maruyama-mitsuhiko.cocolog-nifty.com/security/2025/03/post-a28e5f.html

グーグル、ロボットに「Gemini」の新型AIを搭載。物理世界での作業こなす(3/23)
https://wired.jp/article/googles-gemini-robotics-ai-model-that-reaches-into-the-physical-world/

Google Workspace の概要とメールセキュリティについて(3/24)
https://zenn.dev/_pochio_/articles/74e9bcefe7d0ae

Rustは文字列処理において常に有効なUTF-8であることを要求する(3/22)
https://qiita.com/yonaka15/items/cd9c135913cc1d91ab2c

Catoとは？ネットワークとセキュリティを統合した世界初のSASEプラットフォーム(3/23)
https://nikkeimatome.com/?p=55693

VPNからSASEへの移行―クラウドサービスの普及とリモートワークの一般化が促すZTNA(ゼロトラストネットワークアクセス)(3/23)
https://nikkeimatome.com/?p=55709

SASEとSSEの違いとは？セキュリティ機能のみに特化した「SSE」とネットワーク機能を統合した包括的な概念の「SASE」(3/23)
https://nikkeimatome.com/?p=55701

SASE関連用語まとめ：最新のネットワーク・セキュリティ統合アーキテクチャを理解するための基礎知識(3/23)
https://nikkeimatome.com/?p=55717

[FT]米、中国の技術脅威に対抗組織(3/23)
https://www.nikkei.com/article/DGXZQOCB190WC0Z10C25A3000000/
https://www.nikkei.com/article/DGKKZO87527640S5A320C2TM7000/

人口2000人の島国ニウエがスターリンク利用に警告―南太平洋の島しょ国でスターリンクに懸念と期待が交錯する理由とは？(3/23)
https://nikkeimatome.com/?p=55631

アメリカは中国と何を争っているのか　対岸の火事とは思えない「グレー戦争」の行方　　＜潮流快読＞中国系動画投稿アプリ「TikTok」巡る動向を読む(3/23)
https://www.iza.ne.jp/article/20250323-27KU7XKLIFNWHJCR5OWUCTG2LY/

ネットの自由と安全、米国後退でどう守る？ ライツコン台北で議論(3/23)
https://www.technologyreview.jp/s/357180/at-rightscon-in-taipei-activists-reckon-with-a-us-retreat-from-promoting-digital-rights/