OmniAICreator/Qiita-1.07M huggingface dataset:
これからのセキュリティトレンド（AI・量子コンピュータ）

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/5f65b711-ed0f-98e9-3ea6-7b74da7db205.png)


## AIや量子コンピュータ時代の脅威

技術の進化が加速する中、サイバーセキュリティも新たな挑戦に直面しています。特に、**人工知能（AI）**と**量子コンピュータ**は、従来のセキュリティ手法では対応が難しい新たな脅威をもたらしています。この進化に伴い、新しいセキュリティ対策が求められています。

本記事では、AIと量子コンピュータが引き起こすセキュリティの脅威と、それに対抗するための対策を解説します。

---

## 1. 人工知能（AI）の進化とセキュリティの脅威

AIの進化により、サイバー攻撃が高度化しています。一方で、防御手段としてのAIの活用も進んでおり、攻撃と防御の技術が競い合う状況です。

### 1.1 AIによるサイバー攻撃の高度化

AIは、攻撃者に以下のような強力なツールを提供しています：

- **フィッシング攻撃の自動化**: AIを活用し、ターゲットに合わせた個別のフィッシングメールを大量に作成。これにより、検出が難しくなります。
- **悪意のあるコードの生成**: AIが既存のマルウェアを学習し、その亜種を自動生成。新しい脅威が次々と生み出されます。
- **DDoS攻撃の最適化**: ボットネットをAIで効率化し、システムダウンを引き起こす攻撃が強化されます。

---

### 1.2 AIを用いたセキュリティ強化

AIは、防御側にも大きな利点をもたらします：

- **異常検出**: 通常のシステム動作を学習し、異常な挙動や攻撃の兆候を即座に検出。
- **自動対応**: 攻撃が検出されると、AIが適切な防御策を自動的に実行。

---

## 2. 量子コンピュータと暗号技術への影響

量子コンピュータは、膨大な計算を短時間で行う能力を持ち、現在の暗号技術に脅威をもたらしています。

### 2.1 量子コンピュータによる暗号解読の脅威

量子コンピュータは、以下のような方法で暗号技術を脅かします：

- **RSA暗号の解読**: Shorのアルゴリズムにより、RSA暗号や楕円曲線暗号（ECC）が短時間で解読される可能性があります。
- **データ漏洩リスク**: 量子コンピュータが普及する前に収集された暗号化データが、将来解読されるリスクがあります。

---

### 2.2 量子暗号とポスト量子暗号技術

これらの脅威に対抗するため、以下の技術が開発されています：

- **量子鍵配送（QKD）**: 量子力学の原理を利用して安全な鍵交換を行う技術。
- **ポスト量子暗号（PQC）**: 量子コンピュータに強い新しい暗号アルゴリズム（例: 格子暗号、多項式暗号など）。

---

## 3. まとめ

AIや量子コンピュータがもたらすセキュリティの脅威は、従来の対策では不十分です。一方で、これらの技術を活用してセキュリティを強化することも可能です。

企業や個人は、以下を実践する必要があります：

- **新技術の理解**: AIや量子コンピュータの特性を学び、リスクを認識。
- **新しいセキュリティ対策の導入**: AIベースの防御システムやポスト量子暗号技術を活用。
- **継続的な更新**: 技術進化に対応し、セキュリティ体制を見直し続ける。

AIや量子コンピュータ時代のセキュリティ対策は、今後ますます重要になるでしょう。これらの新しい技術を正しく理解し、効果的な対策を講じることで、より安全な環境を構築することが可能です。

---

## 参考リンク：AIや量子コンピュータ時代のセキュリティ脅威

- [AI and Cybersecurity: Challenges and Opportunities](https://www.cio.com/article/284729/ai-and-cybersecurity-challenges-and-opportunities.html)
- [Quantum Computing and Its Impact on Security](https://www.ibm.com/topics/quantum-computing)
- [Post-Quantum Cryptography - NIST](https://csrc.nist.gov/projects/post-quantum-cryptography)
- [AI for Cybersecurity: An In-Depth Guide](https://www.darkreading.com/ai-for-cybersecurity)

---
envファイルからAPIキーを呼び出してOpenAIのAPIを使う

React Nativeでアプリ開発を進める中で、APIキーや環境ごとの設定値を管理する必要が出てきます。このような場合、**react-native-config**を使用すれば簡単に.envファイルを利用して環境変数を管理できます。
# 手順
導入はいつも通りのnpm installで。

```terminal
npm install react-native-config // ライブラリのインストール
cd ios && pod install && cd .. // iosのリンク
```

プロジェクトのディレクトリ直下に.envファイルを作成し、APIキーを記述します。

```(.env)
OPENAI_API_KEY=<APIキー>
```
！！.gitignoreにて.envファイルを管理対象外に設定するのを忘れずに！！
```(.gitignore)
.env
```

.tsxファイルでreact-native-configのインポートをすれば、完了。

以下はChatGPTのAPIでの呼び出し例。

```typescript
import Config from 'react-native-config';

const completion = await fetch('https://api.openai.com/v1/chat/completions', {
	method: 'POST',
	headers: {
		'Content-Type': 'application/json',
		'Authorization': `Bearer ${Config.OPENAI_API_KEY}`, // APIキー呼び出し
	},
	body: JSON.stringify({
		~~省略~~
	}),
});
```

# まとめ

react-native-configはモバイルアプリのネイティブに直接埋め込みを可能にしているので、このままリリースするにはリスクが高すぎます（基本的にAPIキーはサーバー管理）。しかし、開発初期段階で素早く検証するには便利なライブラリですね。

ちなみに似たライブラリにreact-native-dotenvがありますが、主にWebをターゲットにする場合用いられるようです。時間があればそちらも記事にしたいと思います。
センサアクチュエータの電圧変換ブロック早見表

## 1. はじめに
センサ出力を意味のある単位に変換するのは基本中の基本なわけですが，その分何度もブロックを配置することになります．
よく使うデバイスのSimulinkモデルはすぐ使えるようにしておくに越したことはありません．
そのため，早見表としてまとめておきました．
随時追記していきます．

## 2. 一覧
### センサ
|種類|型番|ブロック図|
|---|---|---|
|圧力|ISE30A|![スクリーンショット 2024-12-24 190103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/8d812121-f374-93ab-9c5f-ccf96cf0f2e1.png)|
|流量(仮)|PFM750|![スクリーンショット 2024-12-24 190114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/02874230-ffe6-4bb4-3031-acf9d4eb4222.png)|
|レーザ(仮)|HG-C1200|![スクリーンショット 2024-12-24 190128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/29879eb5-6a33-ccff-2183-08acd5b3a70e.png)|

### アクチュエータ
|種類|型番|ブロック図|
|---|---|---|
|比例電磁弁|ITV2050|![スクリーンショット 2024-12-24 190039.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/30cc9f6c-2fed-e6b3-cc0c-f26081dde843.png)|

## 3. おわりに
オリジナルのSimulinkのtoolboxが作成できたらと考えています．
envファイルってなんだ？

プログラミングやアプリケーション開発を進める中で、「.envファイル」はほぼ必須になるのではないでしょうか⁇
本記事では、.envファイルの基本とその使い方について解説します。
# **.envファイルとは⁇**
.envファイルとは、アプリケーションで使用する「環境変数（environment variables）」を定義するためのテキストファイルです。これにより、アプリケーションの設定や機密情報をコードから分離して管理できます。
# 何を管理するか⁇

主な管理対象に、以下のような情報が挙げられます。
- APIキー（**外部サービスを利用するための認証情報）

```
API_KEY=<APIキー> // 各種サービスで発行されるキーを入力
```

- データベース接続情報

```
DB_HOST=localhost
DB_USER=root
DB_PASS=password
```

- アプリケーションの設定

```
PORT=3000
NODE_ENV=development
```

# なぜ.envファイルを使うか⁇

1.**セキュリティの向上**

コード内に直接APIキーやパスワードを書き込むと、それらがGitなどのバージョン管理システムで漏洩するリスクがあ離、.envファイルに分離することで、このリスクを軽減する。

2.**環境ごとの設定切り替えが簡単**

開発・テスト・本番環境ごとに異なる設定を.envファイルで管理すれば、環境ごとに設定を簡単に切り替えられる。

# 使い方

プロジェクトのルートディレクトリに.envファイルを作成

```
touch .env　　// .envファイルを作成
vim .env 　　 // 環境変数を記載
npm i dotenv // Node.jsで環境変数を読み込むライブラリ
```

```
console.log(process.env.API_KEY); // .envに設定したキーで呼び出し
```

！！.envファイルはGit管理対象外にすることを忘れず！！
react-native-vector-iconがシミュレーターで”？”になる

React Nativeのreact-native-vector-iconsを使用していると、iOSシミュレーターでアイコンが表示されずに"?"となることがあります。この問題は、カスタムフォントが正しくプロジェクトに追加されていない場合に発生します。本記事では、この問題を解決する方法を解説します。

※react-native-vector-iconsがインストールされていること。未インストールの方は以下をしてください。

```
npm i react-native-vector-icons
cd ios && pod install && cd ..
```

# **1. 解決方法**

以下の手順で問題を解消できます。
## **Step 1: フォントファイルをXcodeに追加**

1. **フォントファイルの確認**
    
    react-native-vector-iconsのフォントファイルは、プロジェクトのiosディレクトリ内に自動的に配置されています。具体的には、以下の場所を確認します：
    
    ```
    <YourProject>/ios/Fonts/
    ```
    
2. **Xcodeでフォントファイルを追加**
    
    XcodeでiOSプロジェクトを開き、左側のプロジェクトナビゲータで、プロジェクト名を選択。
    
    1.で確認したプロジェクトのFontsディレクトリ内にある必要な.ttfファイル（例: AntDesign.ttf）を、XcodeのプロジェクトのFontsディレクトリにドラッグ＆ドロップします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/f5782d08-4a4c-365c-ebd1-7757dc9ca93b.png)

    
3. **コピー設定の確認**
    
    ファイルを追加するときに、「Copy items if needed」にチェックを入れ、正しくコピーされるようにします。
    

## **Step 2: Info.plistにフォントを登録**

1. Info.plist**を編集**
    
    プロジェクトのInfo.plistファイルを開きます。
    
2. Fonts provided by application**を追加**
    
    Custom iOS Target Propertiesに移動し、新しいキー`Fonts provided by application`を追加します。
    
    配列内に、追加したフォントファイル名（例: AntDesign.ttf）を入力します。
    
![image(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/22e0f4ba-96a9-d7c2-6529-03c65b3363a4.png)

    

## **Step 3: シミュレーターをリビルド**

1. **プロジェクトをクリーン**
    
    以下のコマンドを使用してプロジェクトをクリーンにします：
    

```
cd ios
xcodebuild clean
cd ..
```

1. **アプリを再ビルド**
    
    以下のコマンドで再度アプリを起動します：
    

```
npx react-native run-ios
```

これでエラーや異常なくアイコンが表示されているはずです！

もし正しく表示されない場合は、コードにミスがある可能性が高いのでそちらを確認してください。
継続的なセキュリティ改善計画

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/241d7367-2d89-79fd-f76a-c0b662288ad9.png)


## PDCAサイクルの適用方法

セキュリティは一度設定すれば完了というものではなく、常に進化し続けるものです。新たな脅威や攻撃手法が日々登場している中で、セキュリティ対策を一貫して強化し続けるためには、継続的な改善が不可欠です。そのための効果的なアプローチの一つが、**PDCAサイクル**（Plan-Do-Check-Act）です。

本記事では、セキュリティ対策にPDCAサイクルを適用する方法について解説します。

---

## 1. PDCAサイクルとは？

PDCAサイクルは、品質管理や業務改善のために広く使用されるフレームワークで、以下の4つのステップから成り立っています：

- **Plan（計画）**: 改善すべき課題を特定し、それに対する目標や対策を計画します。
- **Do（実行）**: 計画した対策を実施し、その実行状況を記録します。
- **Check（確認）**: 実行した対策の効果を評価し、問題点を洗い出します。
- **Act（改善）**: 評価結果に基づいて、さらなる改善策を講じて次のサイクルに備えます。

このサイクルを繰り返すことで、セキュリティ対策を段階的に強化し、常に最新の脅威に対応できるようになります。

---

## 2. セキュリティ改善計画におけるPDCAサイクルの適用方法

### 2.1 Plan（計画）: セキュリティ目標の設定

最初のステップは、セキュリティ対策の改善目標を設定することです。この段階では、組織の現在のセキュリティ状況を評価し、リスクアセスメントを行ってセキュリティ上の弱点や課題を特定します。

- **リスクアセスメント**: 脅威、脆弱性、影響を評価し、重要な資産を特定します。
- **目標設定**: 攻撃から守るべきリソースや、最小限のセキュリティ基準を定めます。
- **優先順位の設定**: リスクの影響度や発生可能性に基づいて、最も重要な課題から優先的に取り組みます。

---

### 2.2 Do（実行）: セキュリティ対策の実施

次に、計画で定めたセキュリティ対策を実行します。この段階では、具体的な対策を導入し、社内全体で実施します。

- **対策の導入**: ファイアウォール、侵入検知システム、アクセス管理などを実施します。
- **教育と訓練**: 社員へのセキュリティ教育を行い、意識を高めます。
- **ツールの導入**: セキュリティツールやソフトウェアを導入してシステムを保護します。

---

### 2.3 Check（確認）: セキュリティ対策の効果測定

実施した対策が効果的であるかどうかを評価します。この段階では、セキュリティ監視システムやログ解析ツールを活用して、対策の効果を測定し、問題点を把握します。

- **監視とログ分析**: セキュリティイベントやアラートを解析します。
- **脆弱性スキャン**: 定期的にスキャンを行い、新たな脅威や脆弱性を発見します。
- **インシデント対応**: 発生したセキュリティインシデントを調査し、原因を特定します。

---

### 2.4 Act（改善）: 改善策の実施

確認の結果、問題点が見つかった場合、その改善策を講じます。次のサイクルに向けて準備を行います。

- **改善策の実施**: パッチ適用やシステムのアップデートを行います。
- **プロセスの見直し**: セキュリティ方針を見直し、効率的で効果的な方法を導入します。
- **教育の強化**: 従業員への再教育や新たなトレーニングプログラムを実施します。

---

## 3. PDCAサイクルを効果的に運用するためのポイント

PDCAサイクルを効果的に運用するためには、以下のポイントを意識することが重要です。

- **定期的なサイクルの実施**: 一度実施したら終わりではなく、定期的にPDCAサイクルを回します。
- **データ駆動型アプローチ**: ログやアラートデータを活用し、定量的なデータに基づいて判断を行います。
- **全社的な協力**: セキュリティ改善は組織全体で取り組むべきです。
- **迅速な対応**: 脆弱性やインシデントが発生した場合、迅速に対応し、次のサイクルに反映させます。

---

## 4. まとめ

PDCAサイクルをセキュリティ対策に適用することで、組織はセキュリティを継続的に改善し、最新の脅威に適応することができます。セキュリティは動的であるため、定期的に評価・改善し続けることが重要です。PDCAサイクルを活用し、段階的に強化することで、組織全体の安全を守ることができるでしょう。

---

## 参考リンク：PDCAサイクルと継続的セキュリティ改善

### 1. [ISO/IEC 27001:2013 - Information security management systems](https://www.iso.org/isoiec-27001-information-security.html)
ISO/IEC 27001は、情報セキュリティ管理システム（ISMS）の国際規格で、PDCAサイクルをセキュリティ管理に組み込む方法が解説されています。

### 2. [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
NISTのサイバーセキュリティフレームワークは、リスク管理とセキュリティ改善におけるベストプラクティスを提供しています。

### 3. [SANS Institute - Security Operations and Response](https://www.sans.org/cyber-security-courses/security-operations-and-response/)
SANS Instituteのリソースで、PDCAサイクルを活用したセキュリティ運用を学べます。

### 4. [ITIL 4: A Guide to the ITIL Service Value System](https://www.axelos.com/certifications/itil-4-foundation)
ITIL 4は、ITサービス管理のフレームワークで、PDCAサイクルを活用してサービス品質を向上させます。

### 5. [DevOps and Security: A Guide to Integrating DevSecOps](https://www.devops.com/devsecops-guide/)
DevSecOpsを用いて、セキュリティを開発サイクルに組み込む方法を学べます。

---
react-nativeでポート8081起因のビルドエラー

# エラー内容
ポート8081がすでに他のプロセスで使用されているため、React Nativeの開発サーバーが起動できないエラーが発生。
※動作環境はmacOS
```jsx
info Welcome to React Native v0.76
info Starting dev server on port 8081...
error listen EADDRINUSE: address already in use :::8081.
```
対応は、**ポートを使用しているプロセスを特定して終了**して再起動すれば直ります。
1.以下のコマンドをターミナルで実行して、ポート8081を使用しているプロセスを特定
```jsx
lsof -i :8081
```
2.PIDの値（例: 12345）がそのプロセスのIDです。このプロセスを終了
```jsx
kill -9 12345
```
# なんでポート8081関連のエラー？
React Nativeでは、**Metroバンドルサーバー**というツールが動作する際にポート8081を使用します。このMetroバンドルサーバーは、React Nativeアプリの開発環境において重要な役割を果たしています。
# Metroバンドルサーバーとは？
Metroバンドルサーバーは、以下のような役割があります。
1. **コードバンドルの生成:**
    アプリが起動するとき、MetroはJavaScriptコードを一つのバンドルにまとめる。
    例えば、index.jsやApp.tsxなどを解析し、依存関係を解決して実行可能な形式にする。 
2. **リアルタイムリロード:** 
    開発中にコードを変更すると、Metroは変更を検知して更新内容をアプリに反映する（Hot ReloadingやFast Refresh）。
3. **アセットの提供:**
    画像やフォントなどの静的リソースをアプリに提供する。
# なんでビルド時にポート8081が必要なのか？
1. **コードの供給:**
    ビルドプロセスでは、Metroサーバーを介して最新のJavaScriptコードがエミュレーターまたは実機に送信される。
2. **リアルタイム性:**
    開発中のアプリは、Metroサーバーに依存してコードやアセットを取得します。ビルド中もこのプロセスが必要になる。
3. **エミュレーターとの接続:**
    エミュレーターはMetroサーバーからコードや更新情報を受け取るため、ポート8081が開放されている必要がある。
    
### 余談
そういえばターミナルで`npx react-native run-ios`と打つと、以下画像のように別ターミナルで開かれますね。これがMetroサーバー起動画面だったこと、このエラーで知りました。。
![IMG_1221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/7877916c-0b99-606e-b902-f917c577b498.png)
MoviePyででるカスエラーを解決しよう

# [Python] MoviePyででるカスエラーを解決しよう

## はじめに
Python で手軽に動画編集や音声抽出を行いたいときに便利なライブラリとして **MoviePy** があります。しかし、なんか最近のバージョンは呼び出してもエラーが起きます。なんでかは知りません。
そしてあまりにこのことを忘れて毎回エラー起きてブチギレるので、自分のためにも記事を作成しました。

この記事では、MoviePy のよくわかんないけど治る解決法を。

---

## 1. MoviePy のインストール方法

### 1-1. 基本のインストール

```bash
pip install --upgrade pip
pip install moviepy
```
まずは通常の手順でインストールしてみましょう。これで多くの場合、最新バージョンの MoviePy がインストールされます。

### はい、これでエラーが出る人、解決方法教えます。
## 1-2. バージョンを固定する
なんか以下のバージョンだといけます。なんでかは知らない。詳しい人に聞いてネ...

```bash
pip install "moviepy==1.0.3"
```
これでおっけー。開発がんばって。
【Java Gold】継承絡みのメソッド呼び出しを整理させてくれ

```Sample.java
public interface A {
    void test();
}

public class B implements A {
    public void test() {
        System.out.println("B");
    }
    public void specificMethod() {
        System.out.println("Specific to B");
    }
}

public class Main {
    public static void main(String[] args) {
        A a = new B();
        a.test();               // OK: 実行結果は"B"
        a.specificMethod();     // NG: コンパイルエラー
    }
}
```

早速ですが、上の結果に違和感はありませんか？
ないならここから先は読む必要がありません。

* ###### A型なのになんでBクラスのtest()が呼ばれてるんだろう？
* ###### new B()してるのになんでBクラスのspecificMethod()を呼べないんだろう？
これがあやふやになってる人は読んでください。


# なぜA型なのにBクラスのtest()が呼ばれているの？
Javaにおいて、変数の型(コンパイル時の型) と 実際のインスタンス(実行時の型) は区別されます。今回の例では変数 `a` は `A` 型ですが、実際のインスタンスは `new B()` で作られているため、JVMは実行時の型 である `B` の `test()` メソッドを呼び出します。
このように、オーバーライドされたメソッド呼び出しは実行時型を基準に決まる(動的バインディング) ため、`A` の `test()` ではなく `B` の `test()` が呼ばれるというわけです。

```java
A a = new B(); 
a.test(); // 実行時にBクラスのtest()が呼ばれる
```
#### どうしてコンパイル時と実行時で違いが出るの？
コンパイル時: 
>変数 `a` は `A` 型として扱われるため、「`a` から呼び出せるメソッド = `A` に定義されているメソッド」と判断される。

実行時:
>実際には `new B()` で作成されたインスタンスなので、「呼び出すメソッド本体 = `B` でオーバーライドした `test()`」が使われる。

Javaのメソッド呼び出しは基本的に「変数の型」ではなく「実行時のオブジェクト型」をもとにどのメソッドを呼ぶかが決定されます。これが「動的バインディング(ポリモーフィズム)」というやつらしいです。

# なぜnew B()してるのにBクラスのspecificMethod()を呼べないの？
一方で、メソッドが呼び出せるかどうか は コンパイル時 に「この変数の型が何か」によって決まります。変数 `a` は `A` 型なので、コンパイラが「`A` に定義されていないメソッドを呼び出してるやんけ:rage:」と判断し、コンパイルエラー となります。

```java
A a = new B();
a.specificMethod(); // コンパイルエラー: AにはspecificMethod()がない
```
#### じゃあ呼びたい場合はどうするの？
`B` クラスのメソッドを呼びたいのであれば、以下のように変数の型を `B` にするか、キャスト によって `B` 型であることを保証する必要があります。

```java
// 方法1. 変数をB型にする
B b = new B();
b.specificMethod(); // OK

// 方法2. キャストを使う
A a = new B();
((B)a).specificMethod(); // OK (実行時に本当にB型か確認される)
```
実際には `a` が `B` 型のインスタンスであるときだけ `(B)a` は成功します。
もし他の実装クラス（例: `C`クラス）だった場合は `ClassCastException` が発生します。

# まとめ
* ###### 実行時のメソッド呼び出しは、実行時の型が優先される（動的バインディング）。
⇒　だから `A` 型変数でも `B` の `test()` が呼ばれる。

* ###### コンパイル時のメソッド参照は、変数の型にあるメソッドしか呼べない。
⇒　だから `A` 型変数では `A` インターフェースにないメソッド `specificMethod()`を呼べない。
年末だし、Boxの棚卸しをしよう（外部ユーザーとオープンリンク）

今はクリスマスの真っ只中ですが、終わればもうすぐ年末。年末といえば大掃除:bamboo:
年末はデスクの周りを掃除したりするかもしれませんが、Boxでも棚卸しをしませんか？

棚卸しで浮かぶのは、以下２つなので、これらについて書いていきますね:v:
- 外部ユーザー（コラボレーション）
- オープンリンク（共有リンク）

# 外部ユーザーの整理
外部ユーザーの整理では、管理コンソールの「ユーザーとグループ」と「レポート」を利用します。

### ユーザーとグループ
ユーザーとグループは管理対象ユーザーを作成・削除するのに使うケースがメインかもしれませんが、外部ユーザーを管理するのに便利な機能が追加されているので、紹介します。

外部ユーザー（管理コンソール　▶　ユーザーとグループ）のページは2024/12/25時点で、新しいUIへの切り替えに向けて機能の追加が進められています。

外部ユーザーのページにアクセスすると、右上に「新しいデザインを試す」or「新しいデザインを試す」が表示されているので、新UIと旧UIの切り替えができます。今回は新UIをベースに話します。

新UIの検索窓では、名前、メアド、ドメインで外部ユーザーを検索できます。
例えば、フリーのドメイン（gmailやyahooなど）や競合会社のドメインを検索して、想定されないユーザーがいないかをチェックしてみるのもありですよね！
また、テーブルに最終アクティブ日が表示されるので、古いユーザーも削除の候補になるかもしれません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953296/aeda1d59-dc98-a805-62a9-8b61b1e1756f.png)


気になる外部ユーザーをクリックすると、コラボレーション情報も確認し、必要に応じて権限を変更できます。（「編集」ボタンを押すと変更メニューがでてきます）
もしすべての権限をなくしても良い場合は、右上の「⋯」ボタンして「外部ユーザーの削除」をクリックすることですべてに権限がなくなります。（ユーザー自体は消えませんので安心を）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3953296/9bbee3b7-98e9-c926-bd6c-e98ed5f54616.png)



### レポート
コラボレーションレポートも外部ユーザーのコラボレーションの状況を把握するのに便利です。コラボレーションレポートは、コラボレータの種類でフィルタできるので、「外部ユーザー」を指定して出力するのがオススメ。

出力したら、エクセルなどの表計算をソフトを使って、ドメインなどで絞り込んで、不要な権限が付与されていないかを確認します。もし招待した人の情報も表示されるので、必要に応じてその人に相談しましょう。

レポートでは以下の項目が含まれてます（他にもたくさんあるよ。詳細は[こちら](https://support.box.com/hc/ja/articles/4415091266963--%E3%82%B3%E3%83%A9%E3%83%9C%E3%83%AC%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88 "[コラボレーション] レポート")）
- コラボレーションID
- パス
- 項目名 (ファイルまたはフォルダの名前)
- 項目の種類
- コラボレータ名
- コラボレータのログイン (メアド)
- コラボレータ権限
- 招待主のメールアドレス
- 招待日



# オープンリンクの整理
オープンリンクもすべてが悪ということではないのですが、仮にオープンリンクでパスワードを設定するルールがあった場合、共有リンクのレポートを使うことで棚卸しが出来ます

共有リンクレポートは、フィルタせずに出力して、エクセルなどの表計算をソフトを使って整理していくのが多いと思います。今回の場合だと、「派生後ステータス」と「パスワードの設定」の列を使ってフィルタすることで、オープンリンクでパスワード設定の無いリンクを抽出できます。

レポートでは以下の項目が含まれてます（他にもたくさんあるよ。詳細は[こちら](https://support.box.com/hc/ja/articles/4415098138899--%E5%85%B1%E6%9C%89%E3%83%AA%E3%83%B3%E3%82%AF-%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88 "[共有リンク] レポート")）
- パス
- 項目名 (ファイルまたはフォルダの名前)
- 項目の種類
- 派生後ステータス
- 共有リンクのURL
- パスワードの設定
- 権限

:::note info
リンクの公開範囲を確認する場合は、「ステータス」ではなく、「派生後ステータス」を確認してください。Shieldなどの設定の影響を踏まえた公開範囲が「派生後ステータス」に表示されますので。
自動化ツールを活用したセキュリティ対策

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/f8022c93-bca7-7cb0-5bf7-cbd75c0b93b3.png)


## CI/CDにおけるセキュリティ自動化の方法

ソフトウェア開発の現場では、継続的インテグレーション（CI）と継続的デリバリー（CD）が一般的となり、コードの変更を迅速に本番環境に反映することが可能になりました。この効率的な開発プロセスは、スピードを向上させる一方で、セキュリティ上のリスクも伴います。特に、脆弱性が本番環境で悪影響を及ぼす前に発見し、対処することが重要です。その解決策として、セキュリティを開発フローに統合する「DevSecOps」の考え方が注目されています。

本記事では、CI/CDにおけるセキュリティ自動化の方法を具体的に解説します。

---

## 1. セキュリティ自動化の重要性

CI/CD環境では、コードの変更が頻繁に行われ、リリースが迅速に進みます。しかし、手動でセキュリティチェックを行うのは非効率であり、脆弱性が見逃される可能性も高まります。自動化されたセキュリティチェックを組み込むことで、以下の利点が得られます：

- **脆弱性の早期発見**: 問題を開発初期段階で修正可能。
- **リリースサイクルの短縮**: セキュリティテストを迅速化。
- **全体的なセキュリティ強化**: 自動化により人的ミスを削減。

---

## 2. セキュリティ自動化の主な手法

以下は、CI/CDパイプラインにセキュリティを組み込むための主要な手法です。

### 2.1 静的解析ツール（Static Analysis）

静的解析ツールは、コードがリポジトリにコミットされる際に実行され、コード品質や脆弱性を検出します。

- **ツール例**: SonarQube、Checkmarx、Veracode
- **検出対象**: SQLインジェクション、クロスサイトスクリプティング（XSS）など

---

### 2.2 動的解析ツール（Dynamic Analysis）

動的解析ツールは、実行中のアプリケーションを検査し、ランタイム環境で脆弱性を特定します。

- **ツール例**: OWASP ZAP、Burp Suite
- **主な検出例**: 認証の問題、セッション管理の脆弱性など

---

### 2.3 コンテナセキュリティ

コンテナイメージに含まれる脆弱性をスキャンし、デプロイ前に検出します。

- **ツール例**: Clair、Anchore、Trivy
- **重要性**: 開発から本番環境までの一貫したセキュリティ管理。

---

### 2.4 秘密情報の管理

コードや設定ファイルにハードコードされたパスワードやAPIキーを検出し、適切に管理します。

- **ツール例**: HashiCorp Vault、AWS Secrets Manager、GitGuardian
- **効果**: 機密情報の漏洩リスクを削減。

---

### 2.5 脆弱性管理ツール

依存関係やサードパーティライブラリの脆弱性をスキャンします。

- **ツール例**: Snyk、Dependabot、WhiteSource
- **メリット**: オープンソースソフトウェアのセキュリティリスクを早期に特定。

---

## 3. セキュリティテストの自動化の実装例

### ステップ1: リポジトリへのプッシュ時に静的解析ツールを実行
- **例**: SonarQubeを使ってコードをスキャン。

### ステップ2: ビルド時に動的解析ツールを実行
- **例**: OWASP ZAPで実行時の脆弱性をチェック。

### ステップ3: コンテナイメージの脆弱性スキャン
- **例**: ClairやTrivyを使用。

### ステップ4: 依存関係と脆弱性のスキャン
- **例**: Snykでライブラリをチェック。

### ステップ5: 秘密情報の管理
- **例**: GitGuardianでリポジトリをスキャン。

---

## 4. まとめ

セキュリティ自動化は、CI/CDプロセスを安全かつ効率的にするために欠かせません。これにより、開発とセキュリティを統合したDevSecOpsの実現が可能になります。自動化ツールを活用し、全体的なセキュリティ体制を強化することが重要です。

---

## 参考リンク

- [OWASP DevSecOps Project](https://www.owasp.org/index.php/DevSecOps)
- [Snyk - Developer-Friendly Security](https://snyk.io/)
- [SonarQube](https://www.sonarqube.org/)
- [OWASP ZAP](https://owasp.org/www-project-zap/)
- [Trivy - Container Security](https://github.com/aquasecurity/trivy)
- [HashiCorp Vault](https://www.hashicorp.com/products/vault)

---
そもそもdSPACEとは

## 1. はじめに
Qiita Advent Calendar 2024の23日目の記事です．
そもそもdSPACEとは何か説明をしていなかったのでここで書いておきます．

## 2. dSPACEとは
そもそもdSPACEはリアルタイムシミュレーションとハードウェアインザループ（Hardware-in-the-Loop, HIL）システムを専門とするドイツの企業であり、その会社が提供する技術プラットフォーム全体のことを指します。
特に自動車業界で使われるとか．筆者は研究室で使用しています．
MATLABとの相性が高いので研究開発に持ってこいのシステムではあるのですが，その分お値段はなかなかします．

マザーボードに挿すds1104ボードやMicroLabBoxなどのプラットフォームは端的に言うと超高級なArduinoです．
ADCの分解能やノイズ耐性を相まって現実的にArduinoの10倍の精度でセンサ値を扱えたりします．

デスクトップ型のdSPACEもあり
ADCボード, DACボード, Encoderボード, ds1007などを組み合わせて使用することも可能です．

## 3. システムイメージ
よく使うdSPACE ControlDeskのシステムイメージはこんな感じです．
ちなみに，ControlDeskはリアルタイム制御システムのモニタリング，制御，データ取得を行うためのプラットフォームです．

![画像7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2654082/6e3e1870-43a8-316d-8cc3-9f5797d8f174.png)
重大インシデント対応プロセス

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/4478a0b9-1f6a-a133-8b6e-b5ecc04de3d1.png)





サイバー攻撃やシステム障害などの重大インシデントが発生した場合、迅速かつ効果的な対応が必要です。インシデント発生後の対応フローを整理することで、被害を最小限に抑え、組織の復旧力を高めることができます。本記事では、インシデント対応の基本的なプロセスを紹介します。

## 1. インシデントの認識

インシデントが発生したことを最初に認識することが重要です。これには、監視ツールやアラートシステムを活用して、異常を早期に発見することが求められます。

- **異常検知**: 通常のシステム動作から逸脱した挙動を検出します。
- **アラートの確認**: システムやネットワークの異常をアラートで通知し、詳細を確認します。

## 2. インシデントの分類と優先度設定

インシデントを迅速に分類し、対応の優先度を決定します。重大度や影響範囲に基づいて、最も緊急な対応が必要なインシデントから優先的に対処します。

- **インシデント分類**: 例えば、データ漏洩、システムダウン、マルウェア感染などの分類。
- **優先度設定**: 影響範囲（個人情報、システム稼働など）を基に優先順位をつけ、緊急度に応じて対応します。

## 3. 初期対応と封じ込め

インシデントの被害拡大を防ぐため、初期対応を行います。攻撃者がシステムにアクセスし続けないよう、封じ込めが重要です。

- **封じ込め**: 感染源や攻撃経路を特定し、被害を拡大させないように遮断します。
- **システム隔離**: 攻撃を受けているシステムをネットワークから切り離して、他のシステムへの影響を最小限に抑えます。

## 4. 根本原因の調査と修復

インシデントの原因を特定し、再発防止策を講じることが必要です。このステップでは、詳細な調査を行い、脆弱性を特定して修復します。

- **原因調査**: ログ解析やネットワークトラフィックの監視により、原因を特定します。
- **修復作業**: セキュリティパッチの適用や脆弱性の修正を行い、システムを元の状態に戻します。

## 5. 回復と復旧

インシデントの影響を受けたシステムやサービスを回復させるため、データの復旧やシステムの復元を行います。

- **バックアップの復元**: 被害を受けたデータやシステムをバックアップから復元します。
- **システム検証**: 復旧後、システムが正常に動作するかを確認し、再発防止策が有効かをチェックします。

## 6. コミュニケーションと報告

インシデント対応中は、関係者と適切にコミュニケーションを取り、進捗状況や対応結果を報告することが重要です。特に法的義務がある場合は、適切な報告を行う必要があります。

- **関係者への通知**: インシデント発生の経緯、影響、対応状況を社内外の関係者に通知します。
- **法的報告**: 個人情報流出など、法的に報告が義務付けられている場合、適切な機関へ報告します。

## 7. 事後評価と改善

インシデント後には、対応プロセスを評価し、改善点を洗い出して次回の対応に生かします。定期的に訓練を行い、インシデント対応の準備を整えておくことも重要です。

- **事後評価**: インシデント対応の効果を振り返り、改善点を洗い出します。
- **改善策の実施**: 発見された脆弱性への対策、対応フローの見直しを行い、次回に活かします。

---

インシデント対応のプロセスは、迅速かつ適切に実行することが組織のセキュリティを強化し、被害を最小限に抑える鍵となります。これらのステップをしっかりと踏んで、今後のインシデントに備えた対応体制を整えましょう。

## 参考リンク

以下は、インシデント対応についてさらに学ぶために参考となるリンクです。

- [NIST Cybersecurity Framework](https://www.nist.gov/cyberframework)
- [SANS Incident Handling](https://www.sans.org/incident-handling)
- [OWASP Incident Response Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Incident_Response_Cheat_Sheet.html)
- [ISO/IEC 27035 - インシデント管理に関する国際規格](https://www.iso.org/standard/44375.html)
- [JNSA インシデント対応ガイドライン](https://www.jnsa.org/)
- [CIS Controls](https://www.cisecurity.org/controls/)
- [Forrester Research - Incident Response](https://go.forrester.com/research/)

これらのリソースを活用して、インシデント対応のスキルをさらに深め、組織のセキュリティ体制を強化しましょう。
Nest.jsのProviderとは

# はじめに
AdventCalendar2024 最終日。1人で走り切ったらもらえるQiitaのTシャツがほしくて毎日頑張って記事を書いてきました。

初めてこういうイベントに参加して記事を書きましたが、こういうのは事前の準備がないと内容が薄いなと感じたので、次参加するときはもっと良い内容を書けるようにしたいなと思った次第です。（今回は12/1に勢いで参加したので…）

余談はさておき、本編に入っていきます。
今回はNest.jsのProviderについて勉強したのでまとめていきます。

# Providerとは
サービス・リポジトリ・ファクトリ・ヘルパー等のインスタンスを提供するための基本的な構成要素。

使いたいModuleで定義する必要がある。

```javascript:Service
import { Injectable } from '@nestjs/common';
import { Cat } from './interfaces/cat.interface';

@Injectable()
export class CatsService {
  private readonly cats: Cat[] = [];

  create(cat: Cat) {
    this.cats.push(cat);
  }

  findAll(): Cat[] {
    return this.cats;
  }
}
```

```javascript:Module
import { Module } from '@nestjs/common';
import { CatsController } from './cats/cats.controller';
import { CatsService } from './cats/cats.service';

@Module({
  controllers: [CatsController],
  providers: [CatsService],
})
export class AppModule {}
```

## 依存性注入
**依存性注入（Dependency Injection、DI）**　とは、オブジェクトがその依存関係を自分で作成するのではなく、外部から提供される設計パターンである。

DIを使わない場合、自分でインスタンス作成をする必要があるが、使う場合は以下のように宣言することで外部から簡単にインスタンスを取得できる。

DIを使いたい場合は`@Injectable()`を使ってそのProviderを定義する必要がある、

```javascript
// DIを使わない場合
class CatsController {
  private catsService: CatsService;

  constructor() {
    this.catsService = new CatsService(); // 自分でインスタンスを作成
  }
}


// DIを使う場合
@Injectable()
class CatsService {
  // CatsServiceのロジック
}

@Controller('cats')
class CatsController {
  constructor(private readonly catsService: CatsService) {} // 外部から注入

  // CatsControllerのロジック
}
```

## スコープ
Providerは**スコープ**と呼ばれるライフタイムがある。

スコープには以下の3種類がある。
1. `DEFAULT`：アプリケーション全体（起動から終了まで）で一度だけインスタンス化され、全てのリクエストで同じインスタンスが共有される
1. `REQUEST`：各リクエストごとに新しいインスタンスが作成される。同じリクエスト内ではインスタンスは共有される
1. `TRANSIENT`：依存関係が要求されるたびに新しいインスタンスが作成される。同じリクエスト内だったとしてもリクエスト内で複数回依存関係が要求された場合はその回数だけ作成される

## オプションプロバイダー
依存関係が必ずしも存在しなくても良い場合（例えばアプリケーションに必須の動作ではない）に使用する。

`@Optional()`を使って定義する。

```javascript
import { Injectable, Optional, Inject } from '@nestjs/common';

@Injectable()
export class HttpService<T> {
  constructor(@Optional() @Inject('HTTP_OPTIONS') private httpClient: T) {}
}
```

## プロパティベースのインジェクション
これまでのものはコンストラクタを介してプロバイダーが注入されていたが、プロパティに直接依存関係を注入する方法。

`@Inject`を使って定義する。

```javascript
@Injectable()
class CatsService {
  // CatsServiceのロジック
}

@Injectable()
class DogsService {
  // DogsServiceのロジック
}

@Injectable()
class AnimalService {
  @Inject(CatsService)
  private readonly catsService: CatsService;

  @Inject(DogsService)
  private readonly dogsService: DogsService;

  someMethod() {
    this.catsService.someMethod();
    this.dogsService.someMethod();
  }
}
```

ただし、クラスが他のクラスを継承していない場合はコンストラクタによる依存性注入を行った方が良い（`@Inject()` と `constructor()` + `@Injectable()`はほぼ同じ）。

理由としては以下が挙げられる。

- 明示的な依存関係の宣言
- 可読性の向上
- テストの容易さ


# 参考

https://docs.nestjs.com/providers
【ツール比較】CanvaとMiricanvasでクリスマスカードを作ってみた

こんにちは、ふるすです。
自他ともに認めるCanva大好きマンなわたしですが、「Miricanvas」というツールの存在を知り、今回比較してみたいなと思います。

https://qiita.com/furusu_y/items/7031987828ffc425c060

以前Canva関連の記事も書いています:star2:

## Miricanvasとは？

2020年に韓国で誕生したデザインツールです。日本語にも対応しており、ぱっと見たところUIはCanvaと似ていて使いやすそうです。

料金や素材数などはコチラの記事できれいにまとめられていました。素材数はCanvaのほうが8倍ほど多いようです。

https://mamalifehacker.com/working_mom/miricanvas_vs_canva/

## クリスマスカード作り

アドカレの記事ということもあるので、今日は2つのツールでクリスマスカードを作りながら違いを見ていきます！

作成物のイメージとルールは下記の通り。

・赤背景
・メリークリスマスのロゴ
・サンタさん
・トナカイ
・インスタのストーリーをイメージ(サイズも1080×1920)
・20分以内で作成する

**Canva**

![スクリーンショット 2024-12-25 221629.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/652653ce-1374-cd85-8f2f-bae7a08e028c.png)



毎度のことながらクリスマスの素材、豊富…！ストーリーのテンプレもたくさんあり、一から作る必要が全くないくらいです。
直観的にやりたいことを実現できるのが本当にいい。すき。

**Miricanvas**

![スクリーンショット 2024-12-25 212819.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/c1c62248-2cf6-7181-ae90-548432802574.png)

作成画面はこちら。Canvaと似ているので、慣れている方はすぐに制作に取り掛かれるでしょう。

![スクリーンショット 2024-12-25 214727.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/daaf45d3-0d93-9e92-0264-dda3e6a0d2d5.png)

ここからぱっとサイズ変更できるのがめちゃくちゃ使いやすい。

![スクリーンショット 2024-12-25 215019.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/be95e3f4-9ef5-bf66-2b3b-8690af02f780.png)

AI生成もらくらく。ためしにクリスマスの背景、赤い色と入れたらこんな感じの画像を作ってくれました。

![スクリーンショット 2024-12-25 2128.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/4a71dce5-1238-0a08-e095-d44eb13f6c05.png)

ロゴのカーブをもう少し強くしたいのですが、編集箇所が見当たらず別のイラストに変更。

![スクリーンショット 2024-12-25 220624.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/a1a64970-ca2f-fd79-bea0-b1bd838e8821.png)

**完成！**
はじめて利用するツールでしたが、やはりCanvaに似ているため作成しやすかったです。
Canvaを使ったことなくてもある程度直感的にできる気がします。

## 実際に使ってみてどう？
好みもあるかもしれませんが、やはり素材数が圧倒的に多いCanvaのほうが選択肢が増えるので制作はしやすそうです。Mericanvasも種類豊富なのですが、ポップなイラスト素材が多く、大人っぽいデザインにしようとするとなかなかいいものが見つかりませんでした。
また、Mericanvasのほうは韓国語のロゴや素材がたくさん出てきたので、若者向けやトレンド感を意識したものは作りやすいかもしれません。
いずれにせよ、デザイン知識がなくても個人で、それも短時間で制作ができるなんていい時代だなぁ。


ここまでお読みいただきありがとうございました！
Qiita Advent Calendar25記事達成してみて

# Advent Calendar 2024: Flutterメインで25記事書いてみた！

## はじめに

今年初めてAdvent Calendarに参加して、25記事書き切りました！
その中の8割くらいはFlutterの記事でした。

## 書いた記事のジャンル

- Flutter基礎（開発環境、ウィジェット）
- レイアウト関連（Container、Row/Column）
- 状態管理
- アニメーション
- その他（APIとの連携、データベース）

## 良かったこと

- 年末は休みが多くて、じっくり記事が書けた
- Flutterの基礎を体系的に学び直せた
- 書きながら自分の理解も深まった
- コメントやいいねをもらえて嬉しかった

## 大変だったこと

- 初めの頃は、毎日の更新が不安だった
- トピックを考えるのに時間がかかった
- コードサンプルの準備が意外と大変だった

## 来年に向けて

- 来年もチャレンジしたい！
- 今度はもっと実践的な内容を増やしたい
- サンプルアプリを作りながら解説する記事も書きたい

みなさん、25日間ありがとうございました！
来年もよろしくお願いします！
【ORACLE】GROUP BYで指定したカラム以外はORDER BYできない

## 概要

表題の通り、ORACLEでGROUP BYで指定したカラム以外をORDER BYで使用するとエラーが発生します。その例を挙げて対応策をまとめます。

:::note warn
MySQLではエラーにならないものの、MySQL独自の機能のため使用する場合は明示的に集約関数を使用することを推奨します。
:::

## 例

売上（sales）からユーザーIDごとの売上金額(amountの合計)を取得し、売上金額の降順に並べる例。

```sql
SELECT
    user_id,
    SUM(amount) total
FROM
    sales
GROUP BY
    user_id
ORDER BY
    amount DESC;
```

この場合、amountはGROUP BYで使用していないため以下のエラーになります。
```
SQLSTATE[HY000]: General error: 979 OCIStmtExecute: ORA-00979: GROUP BYの式ではありません。
```

## 対応策

以下のように、SUM(amount)をORDER BYに指定することでエラーを解消することができます。

```sql
SELECT
    user_id,
    SUM(amount) total
FROM
    sales
GROUP BY
    user_id
ORDER BY
    SUM(amount) DESC;
```

## まとめ
- ORACLEでは、GROUP BYで指定したカラム以外をORDER BYに指定するとエラーが発生する
- MySQLではエラーは発生しないが意図しない結果を取得する可能性がある
- いずれも集約関数を明示的に記述する
行ったサウナをMapで一括管理したい♨️

# 個人的に行ったサウナをマップで管理するアプリを個人開発してみた♨️

こんにちは！
今回は個人開発でサウナマップアプリを作成してみたので、シェアします。
ざっくりとまとめてみたので、ラフな感じで読んでいただければ幸いです！

### 開発の背景

ここ数年、サウナにハマっていて「行ったことのあるサウナの情報をもっと簡単に整理できたらなぁ」と思ったのがきっかけです。

作りたいものはこんな感じ：

- LINEで送ったサウナ情報を自動で管理
- Googleスプレッドシートにデータを保存（DBとして使用）
- Googleマップ上にサウナの場所とコメントを表示

簡単な個人利用ツールとして開発してみました😎

### 構成はこんな感じ

今回使った技術はこちら：
![スクリーンショット 2024-12-25 21.58.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049676/dbc8fcb3-cdf7-a8d4-23cc-7529b6013489.png)

### 使ってみた感じ
専用のLINEビジネスアカウントにサウナ情報を渡すと、ターボばばあがスプシに情報を保存してくれます😻
![スクリーンショット 2024-12-25 21.49.37.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049676/34571ac4-4f54-f614-f375-fbf8610a4f36.jpeg)

逆に関係ないことをチャットすると、怒られます笑
![スクリーンショット 2024-12-25 21.50.22.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049676/d8436544-9a79-2d59-d22c-f9ceca511331.jpeg)

Mapに表示されるようになります🗾
![スクリーンショット 2024-12-25 22.11.55.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1049676/f90ae7aa-d9cb-dfe4-9ed3-6a482be07224.jpeg)



### まとめ

友達や恋人とのグループLINEにターボババアを招待すれば、グループで行ったことのあるサウナをマップで一括管理もできます♨️


開発にかかった時間(おおよそ2h)
内訳
実現するための技術検討：30min
GASでの開発、LINE連携、デプロイ：1.5h


今回インスパイアを受けた記事。
とあるLT会でお知り合いになった[モリタロウさんの投稿](https://qiita.com/lyd-ryotaro/items/859b65e70c73ea2cb533)からインスパイアを受けました🌲ありがとうございます🙇‍♂️


最後まで読んで頂き、ありがとうございました！
【C#】継承についてざっくり学ぶ

# はじめに
この記事は[Hamster Output Advent Calendar 2024](https://qiita.com/advent-calendar/2024/game_hamster)の22日目の記事です！

今さらですが、継承をあまり使ったことが無かったので勉強したいと思います。

# 参考にしたリンク

https://zenn.dev/daichi_gamedev/articles/ecde26bdbca887#%E8%A6%AA%E3%82%AF%E3%83%A9%E3%82%B9%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%8D%E3%83%B3%E3%83%88%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AF%EF%BC%9F

# 継承って
1つのスクリプトを元に新しいスクリプトを作ることができる機能で、処理を再利用したい時に使う...ふむふむ何で今まで使って無かったんだ...自分は?

UnityだとMonoBehaivourとかまさにそうですね。StartとかUpdateを色んな場所で再利用してます。

# 試しに作ってみる

### ・継承元を作る

ここで、継承で使うprotectedというアクセス修飾子やvirtualというキーワードがでてきます。
```C#
using UnityEngine;

public class TestBase : MonoBehaviour
{
    protected void TestMethod()
    {
        Debug.Log("TestBase TestMethod");
    }

    public virtual void Log()
    {
        Debug.Log("TestBase Log");
    }
}
```

### ・protected
継承先ではpublicとして扱い、それ以外ではprivateとして扱われる

### ・virtual
継承先で上書き変更ができる

### ・継承先を作る

そして継承元を利用するクラスを作りました。Unity公式が出しているデザインパターンのサンプルでSingletonも継承でSingletonにすることができるというのもありました。

継承して面白いなと思ったのが継承元の継承先の内容が使える事ですかね...Testクラスが継承しているのはTestBase何ですが、MonoBehaviourのメソッドが使えるんですよね...

変数を継承元に用意しても、継承先で利用することも可能...だと...便利

```C#
public class Test : TestBase
{
    private void Start()
    {
        // 継承元のメソッドを呼び出す
        TestMethod();
        Log();
    }

    private void Update()
    {

    }

    // Baseのメソッドを上書きした
    public override void Log()
    {
        Debug.Log("Test Log");
    }
}
```

# 他クラスからの参照方法
TestBaseを元としているので、TestBaseを型にしてTestを取得することもできます。
```C#
public class Banana : MonoBehaviour
{
    private void Start()
    {
        TestBase testBase = GetComponent<Test>();
    }
}
```

# まとめ
再利用したい時に継承は物凄く使いやすい。ただ、継承元を少し改良したいとなった時に、継承しているクラスが多いと変更が難しくなりそうだと感じた。
社内教育プログラムの設計方法

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/478a6641-4523-6587-6db1-aec076db2b31.png)


効果的なセキュリティ教育プログラムを設計し、従業員の意識とスキルを向上させることは、組織全体のセキュリティを強化するために欠かせません。本記事では、効率的なセキュリティ研修を設計・実施するための具体的な手順とポイントを紹介します。

## 1. 教育プログラムの目標を明確化する

### 1.1 セキュリティ研修の目的を設定
- フィッシングメールを見分ける能力を高める。
- パスワード管理やデータ取り扱いに関する基本的な理解を深める。
- サイバー攻撃の兆候を認識し、迅速に報告できるようにする。

### 1.2 対象者ごとに目標を調整
- **全従業員向け**: 基本的なセキュリティルールと日常的な対策。
- **技術者向け**: 高度な脅威モデルやインシデント対応手法。
- **経営層向け**: リスク管理と意思決定に必要な知識。

## 2. コンテンツの設計

### 2.1 教育内容の選定
1. **基本的なセキュリティ対策**:
   - 強力なパスワードの作成方法。
   - 多要素認証（MFA）の使用。
   - デバイスのロックやソフトウェア更新の重要性。

2. **具体的な脅威例**:
   - フィッシング攻撃の手口。
   - マルウェアやランサムウェアのリスク。
   - 社内ネットワークでの不審な活動の例。

3. **緊急対応手順**:
   - インシデント発生時の報告フロー。
   - データ漏洩やシステム障害への初期対応方法。

### 2.2 実践的な演習
- フィッシングメール模擬訓練を実施。
- 仮想環境でインシデント対応のシミュレーション。

## 3. 教育形式の選択

### 3.1 対面研修
- グループワークやディスカッションを通じて、従業員間の理解を深める。

### 3.2 オンライン研修
- Eラーニングプラットフォームを利用して、柔軟な学習環境を提供。

### 3.3 ハイブリッド形式
- 対面とオンラインを組み合わせて、多様なニーズに対応。

## 4. 効果測定とフィードバック

### 4.1 成果の評価
- テストやアンケートを実施し、従業員の理解度を確認。
- 模擬攻撃（例: フィッシングメールテスト）の結果を分析。

### 4.2 フィードバックの活用
- 従業員からのフィードバックを収集し、研修内容を改善。
- 新しい脅威や技術に対応するため、プログラムを定期的に更新。

## 5. 継続的な取り組み

### 5.1 定期的な研修の実施
- セキュリティ教育を年1回以上実施。
- 新入社員向けに初期研修を提供。

### 5.2 セキュリティ意識向上の活動
- 社内ニュースレターで最新のセキュリティ情報を共有。
- クイズやキャンペーンを通じて、従業員の関心を引き付ける。

## 参考リンク

- [IPA 情報セキュリティ教育プログラム](https://www.ipa.go.jp/security/education/) - 情報セキュリティに関する日本の公式教育資料。
- [NIST Cybersecurity Workforce Framework](https://www.nist.gov/itl/applied-cybersecurity/nice/nice-framework) - サイバーセキュリティ教育のためのフレームワーク（英語）。
- [SANS Security Awareness Training](https://www.sans.org/security-awareness-training/) - 従業員向けセキュリティ教育のリソース（英語）。
- [OWASP Security Education Resources](https://owasp.org/) - OWASPが提供するセキュリティ教育用のツールと資料。

## まとめ

効率的なセキュリティ教育プログラムは、従業員の知識とスキルを向上させ、組織全体のリスクを低減します。目標を明確にし、効果的なコンテンツと形式を選択することで、持続可能で成果のある教育を実現しましょう。本記事の内容を参考に、御社に合ったセキュリティ教育プログラムを設計してください。
2024年に読んだ本と個人的読書術

# 今年読んだ本

- この世界が消えたあとの科学文明のつくりかた/ルイス・ダートネル
- △眼の誕生/アンドリュー・パーカー
- 世界の民族衣装をたずねて/市田ひろみ
- △ご冗談でしょう、ファインマンさん/R・P・ファインマン
- △われはロボット/アイザック・アシモフ
- △三体X 観想乃宙/宝樹
- 折りたたみ北京/ケン・リュウ

その他、国語の教科書に掲載されている文章など

△：途中まで読んだ本

## 今年のおすすめ本
- 折りたたみ北京
    - 7作家の13作品を収録した、現代中国の短編SFアンソロジー
    - 個人的に好きな収録作品
        - 百鬼夜行街、童童の夏/夏茄
        - コールガール/糖匪
        - 童童の夏は、現実に起こるかもしれない展開で夢があると感じた
        - これらの作品に限らず、SFの枠に縛られない自由なジャンルの作品が多く、情景描写も綺麗で読みやすかった

# 読書術
### 脳がエネルギーに満ちあふれているとき
- 文章から映像を想像しながら読む
    - AIで文章から画像や映像を生成するのを脳内でやるイメージ
    - 頭に入りやすい
    
### 疲れて頭が回らないとき
- 流し見でもとりあえず読む、回復したら読み直す
    - 回復したときに読み直すと文章の理解度が上がる
- 読む場所や時間はあまり選ばない
    - 図書館で借りて読んだ本が多いので、じっくり読む場合は条件を選んでいると途中までしか読めない

### その他
- 読む場所や時間はあまり選ばない
    - 図書館で借りて読んだ本が多いので、じっくり読む場合は条件を選んでいると途中までしか読めない

# 今年の読書を振り返って&来年の読書目標
- だいたい途中まで読んで止まっていて、実質的な読書量が少なかった
    - 読書する時間を取るなどして、途中まで読んだ本もこれから読む本も読破したい
- 図書館で借りている期間がじっくり読むには短かった
    - 親戚から頂いた図書カードが余っているので、本をたくさん買ってじっくり読みたい
- 本棚など、自分だけの読書環境を整える
- 読んだ本が小説に偏っていた
    - 色々な分野の本に手を出したい
セキュリティ設定を強化する実践例

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/726c65f1-9668-b9e1-3f8a-bf431c2b5eef.png)


セキュリティ設定を適切に強化することで、サイバー攻撃のリスクを大幅に軽減できます。本記事では、具体的な設定方法として、パスワードポリシーやデータ暗号化を中心に、実践例を紹介します。

## 1. パスワードポリシーの設定

パスワードは、システムやアカウントへの不正アクセスを防ぐ最前線の防御です。以下のポイントを参考に、強力なパスワードポリシーを導入しましょう。

### 設定例

1. **最低文字数を設定**:
   - パスワードは最低12文字以上に設定。

2. **複雑性を要求**:
   - 大文字、小文字、数字、特殊文字を含む。

3. **パスワードの有効期限を設定**:
   - 90日ごとの変更を推奨。

4. **禁止パスワードリスト**:
   - 「123456」「password」などの一般的なパスワードを使用禁止にする。

### 実装方法

- **Windows Server**:
  - グループポリシーエディタで「アカウントポリシー」→「パスワードポリシー」を設定。
- **Linux**:
  - `/etc/security/pwquality.conf`を編集して条件を設定。

## 2. データ暗号化の導入

暗号化は、保存中（at-rest）および転送中（in-transit）のデータを保護する重要な手段です。

### 設定例

1. **保存中のデータ**:
   - データベースやストレージの暗号化（例: AES-256）。

2. **転送中のデータ**:
   - HTTPSを使用してウェブ通信を保護。
   - TLS 1.2またはTLS 1.3を採用。

3. **ファイル暗号化**:
   - 重要なファイルはPGPやBitLockerを使用して暗号化。

### 実装方法

- **クラウドストレージ**:
  - AWSでは、S3バケット暗号化を有効化。
  - Azureでは、Storage Service Encryptionを設定。
- **SSL/TLS証明書**:
  - 信頼できる認証局（CA）から証明書を取得してインストール。

## 3. アクセス制御の強化

不正アクセスを防ぐため、権限やアクセスルールを適切に設定する必要があります。

### 設定例

1. **最小権限の原則を適用**:
   - 必要最小限の権限のみを付与。

2. **リモートアクセスの制御**:
   - VPNや多要素認証（MFA）を使用。

3. **アカウントロックアウトポリシー**:
   - 一定回数のログイン失敗後にアカウントをロック。

### 実装方法

- **IAM（Identity and Access Management）**:
  - AWS、Azure、GCPでIAMポリシーを活用。
- **リモートデスクトップ**:
  - RDP接続時にNLA（Network Level Authentication）を有効化。

## 4. ログと監視の設定

セキュリティインシデントを迅速に検知するため、ログと監視を適切に設定します。

### 設定例

1. **ログの保存期間を設定**:
   - 最低6か月間ログを保存。

2. **リアルタイムアラートの設定**:
   - SIEM（Security Information and Event Management）を使用。

3. **不正アクセスの検知**:
   - IDS/IPS（侵入検知/防止システム）を導入。

### 実装方法

- **クラウド**:
  - AWS CloudTrailやAzure Monitorを利用。
- **オンプレミス**:
  - SplunkやELKスタックを使用してログを収集・分析。

## 参考リンク

- [NIST Password Guidelines](https://pages.nist.gov/800-63-3/sp800-63b.html) - 最新のパスワード管理に関するガイドライン。
- [OWASP Cryptographic Storage Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Cryptographic_Storage_Cheat_Sheet.html) - 暗号化のベストプラクティス。
- [AWS Security Documentation](https://aws.amazon.com/security/) - AWSのセキュリティ設定ガイド。
- [Azure Security Best Practices](https://docs.microsoft.com/en-us/azure/security/) - Azureにおけるセキュリティベストプラクティス。
- [Splunk Documentation](https://docs.splunk.com/) - ログ管理と分析に関する情報。

## まとめ

セキュリティ設定を強化することで、サイバー攻撃のリスクを低減できます。パスワードポリシーの設定やデータ暗号化、アクセス制御、ログ監視など、基本的な対策を徹底し、継続的に見直すことが重要です。本記事を参考に、組織や個人のセキュリティを強化しましょう。
videoタグでmp4動画を再生する動画プレイヤーを作成してみる

# はじめに
本記事では、HTMLのvideoタグを使用してブラウザで動画を再生する実装を行います。スタイリングにはTailwindCSSを使用し、ReactとViteで環境を構築します。

# 環境
- react：18.3.1
- tailwindcss：3.4.14
- vite：5.4.8


# ゴール
![tset_qi2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/44b6af62-5147-f32d-82fd-1185fea6ac66.gif)

動画がブラウザに表示されてること、再生できることを確認する




# 1. コンポーネントの作成

動画表示のためのコンポーネントを作成していきます。
videoタグで動画プレーヤーの設定を行い、sourceタグでは再生する動画ファイルとその形式を指定しています。

```jsx:App.js
const App = () => {
  return (
    <div className="flex items-center justify-center min-h-screen w-full bg-blue-900 p-4">
      <div className="w-full max-w-4xl aspect-video  overflow-hidden shadow-lg">
        <div className="relative w-full h-full ">
          <video
            className="absolute inset-0 w-full h-full object-contain "
            controls
            controlsList="nodownload"
            autoPlay
            loop
            muted
          >
            <source src="samplemv_q1.mp4" type="video/mp4" />
          </video>
        </div>
      </div>
    </div>
  );
};

export default App;
```

上記で使用してる `video` タグの属性は次の通りです。

- `controls`：再生、一時停止、シークバー、音量などの標準的なビデオコントロールを表示
https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#controls

- `controlsList`：`nodownload`を指定し、ダウンロードボタンは使わないので非表示にしています
https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#controlslist

- `autoPlay`：データの読み込みが完了したら自動再生を開始
https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#autoplay

- `loop`：動画を繰り返し再生
https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#loop

- `muted`：初期状態が消音
https://developer.mozilla.org/ja/docs/Web/HTML/Element/video#muted

:::note info

再生したい動画ファイル（mp4形式）は publicディレクトリに配置しておいてください。

:::



# 2. ブラウザで確認

ブラウザで動作を確認します。

```
npm run dev
```

![tset_qi2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/dcda4e8d-8c19-2f55-da96-9c178deaec08.gif)


# 参考リンク

https://developer.mozilla.org/ja/docs/Web/HTML/Element/video

https://developer.mozilla.org/ja/docs/Web/HTML/Element/source
【TailwindCSS】ユーティリティファーストが意味するのは何か

## TailwindCSSとは
TailwindCSSは、ユーティリティファーストの考え方を基本とした現代的なCSSフレームワークです。従来のBootstrapなどのフレームワークが事前定義されたコンポーネントを提供するのに対し、TailwindCSSは小さな機能単位のユーティリティクラスを提供し、それらを組み合わせることで柔軟なデザインを実現します。

## ユーティリティクラスとは
ユーティリティクラスは、単一の目的を持つCSSクラスです。各クラスは特定のスタイルプロパティを表現し、以下のように直感的な命名規則に従っています。

```index.html
<div class="text-center mt-4 bg-blue-500 text-white p-4">
  <!-- text-center: テキストを中央揃え -->
  <!-- mt-4: 上マージンを4単位分設定 -->
  <!-- bg-blue-500: 背景色を青に設定 -->
  <!-- text-white: テキスト色を白に設定 -->
  <!-- p-4: パディングを4単位分設定 -->
  Hello World
</div>
```
WindyCSSやBlumaなど他のCSSフレームワークでもユーティリティークラス自体を採用しているものはあります。

## ユーティリティファーストが意味するものとは
ただTailwindCSSが他と違うのは「**ユーティリティファースト**」と謳っている点です。
ユーティリティファーストは、以下の特徴と考え方を備えたコンセプトだと思います。

### 1. 開発アプローチの変革

- カスタムCSSの作成を最小限に抑える
- 既存のユーティリティクラスを組み合わせてデザインを構築
- HTMLファイル内でスタイリングを完結させる

### 2. 主要なメリット

- 開発速度の向上: 既存のクラスを使用することで、CSSの記述時間を削減
- 保守性の向上: 統一された命名規則により、コードの理解と管理が容易
- 一貫性の確保: 定義済みのユーティリティクラスにより、デザインの一貫性を維持
- 柔軟性: プロジェクト固有のニーズに応じた柔軟なカスタマイズが可能

### 3. 実践的な考慮点

- HTMLが長くなり可読性が落ちる可能性がある。コンポーネント化やテンプレート化を検討
- チーム開発では命名規則の統一が重要
- レスポンシブデザインにも対応した豊富なユーティリティクラスを活用

### 4. 従来の手法との違い

- カスタムCSSの作成よりもユーティリティクラスの活用を優先
- スタイルの再利用性が高く、CSSファイルの肥大化を防止
- 直感的な開発が可能で、即座に視覚的なフィードバックを得られる

上記の観点から、TailwindCSSはモダンな開発にとてもあっていて、特に迅速な開発とメンテナンス性の向上が求められるプロジェクトには相性がいいと思います。

## まとめ
今回は、TailwindCSSのユーティリティファーストという特徴に着目しました。
ただのユーティリティクラスを持つフレームワークではなく、ファーストというコンセプトは大きな違いを意味すると思います。

TailwindCSSには`@apply`機能やconfigファイルなどある程度のカスタムができるようになってはいますが、あくまでユーティリティクラスを使い回してUIを構築していくというのがそもそものコンセプトだと思います。

その為このTailwindCSSというフレームワークを使用する際は、個人的にデザイナーさんとエンジニア共同でTailwindCSSについて理解を深めるのが不可欠なのでは無いかと思いました。

本記事を読んでいただきありがとうございました！
イースターエッグなどに使えそうなスタイルを考えてみた

## この記事の概要

目的もなくコードを触っていたら、イースターエッグ（ゲームやソフトウェアの隠し要素）的に使えそうなスタイルができました。

あまり詰められていませんが、これをベースに何か面白い表現も作れそうな気がしています。

## 完成形

ライト（マウスカーソル）を動かして、カーソルのある部分だけ文章が読める、というものです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214677/43c9c6bb-4795-abc5-4b1a-9bb529a198a2.gif)

## コード

<p class="codepen" data-height="600" data-default-tab="html,result" data-slug-hash="XJrgoMo"</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>

関係のある部分だけ抜き出しています。

```html:HTML
<body>
  <div class="container">
    <div id="stalker1" class="stalker background"></div>
    <div class="contents">
      <p>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
      </p>
      <p>
        Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
      </p>
      <!-- 以降文章が続く -->
    </div>
    <div id="stalker2" class="stalker foreground"></div>
  </div>
</body>
```

```css:CSS
body {
  cursor: none;
}

.container {
  --color: #1e1e1e;
  background-color: var(--color);
  color: var(--color);
}

.contents {
  position: relative;
}

.stalker {
  --size: 240px;
  pointer-events: none;
  position: fixed;
  width: var(--size);
  height: var(--size);
  border-radius: 50%;
  top: calc(-1 * var(--size) / 2);
  left: calc(-1 * var(--size) / 2);
  background: rgb(255 255 255 / 0.5);
  mix-blend-mode: screen;
  transition: transform 50ms ease-out;
}

.stalker.background {
  filter: blur(96px);
}

.stalker.foreground {
  filter: blur(32px);
}
```

```javascript:JavaScript
const stalkers = ["stalker1", "stalker2"];

document.addEventListener("mousemove", (e) => {
  stalkers.forEach((id) => {
    const stalker = document.getElementById(id);
    stalker.style.transform = `translate(${e.clientX}px, ${e.clientY}px)`;
  });
});
```

## 解説

デフォルトでは背景も文字色もまったく同じ色なので、目を凝らしても読めません。

マウスストーカーとして、背景だけを照らすものと、背景と文字を両方照らすものの2つを用意します。
また、背景だけを照らすものはボケを大きくし、前景を照らすものはボケを小さくし、光の当たった表情を若干リアルに表現しています。
（マウスストーカーそのものはよくある作りなので、特に解説することもありません。）

`z-index`を使っても良いですが、今回は単に要素の順番に気をつければ良いだけだったので使っていません。

一応カスタムプロパティを使って再利用できる部分はしながら書いています。
個人的git小ネタ

時々自分が忘れてしまうGitコマンドを備忘録として残します。
### push先のブランチ名省略
デフォルトの設定では以下のようにローカルブランチ名とリモートブランチ名をコマンドで打たなければなりません。
```jsx
git push origin feature/name/taskName
```
しかし毎回打つのはめんどくさい＆ミスが怖い
なので、今ローカルでいるブランチ名と同じ名前のリモートブランチにpushする方法が以下。
```jsx
git config --global push.default simple
git push // ローカルがmainブランチにいれば、origin/mainにpushしてくれる
```
### ローカルのブランチ名変更
```jsx
git branch -m <変更前のブランチ名> <変更後のブランチ名>
```
または、今いるブランチ名を変更したい場合は<変更前のブランチ名>は不要
```jsx
git branch -m <変更後のブランチ名>
```
### リモートの向き先変更
```jsx
git remote -v // 今の向き先確認
git remote set-url origin <新しい向き先>
git remote -v // 新しく設定した向き先確認
```
### fetchとpushの向き先を別にする
```jsx
git remote set-url --push origin <新しいpush先>
```
### configを確認
```jsx
git config -l // config一覧
git config <確認したい項目> // 例えばuser.name、http.proxyなど
```
中小企業向け基本セキュリティーチェックシート

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/a4662eed-aa8d-e374-ff9e-5f3031f2a18b.png)



中小企業は、リソースが限られているため、セキュリティ対策が後回しになりがちです。しかし、セキュリティ事件が発生すると、事業への影響が大きく、信頼の損失や法的リスクにつながります。本記事では、リソースが限られている中小企業向けに、優先順位を設定したセキュリティチェックシートを提供します。

## 優先順位に基づいたセキュリティ対策

### 1. 基本的なセキュリティ設定（高優先度）

#### 1.1 パスワード管理
- 強力なパスワードポリシーを導入する。
- すべてのアカウントに多要素認証（MFA）を設定する。
- パスワード管理ツールを活用して安全に保管。

#### 1.2 データのバックアップ
- 重要なデータは定期的にバックアップを取る。
- オフラインの場所にバックアップを保存し、ランサムウェア攻撃に備える。

#### 1.3 ソフトウェアの更新
- オペレーティングシステム、アプリケーション、デバイスのファームウェアを定期的に更新。
- 自動更新機能を有効にしておく。

### 2. ネットワークセキュリティ（中優先度）

#### 2.1 ファイアウォールの導入と管理
- 企業用のファイアウォールを設定し、不正アクセスを防止。
- セキュリティポリシーを適切に設定し、定期的にルールを見直す。

#### 2.2 VPNの使用
- リモートワークの際はVPNを使用して安全な通信を確保。
- 古いプロトコル（例: PPTP）は使用せず、IKEv2やOpenVPNを選択。

#### 2.3 ゲストネットワークの分離
- ゲスト用のWi-Fiネットワークを設定し、社内ネットワークと分離する。

### 3. 従業員教育（中優先度）

#### 3.1 セキュリティ意識向上
- フィッシングメールの見分け方をトレーニング。
- 基本的なセキュリティガイドラインを共有。

#### 3.2 継続的な教育プログラム
- 定期的にセキュリティワークショップを開催。
- 新しい脅威や対策について従業員に通知。

### 4. 高度な対策（低優先度）

#### 4.1 エンドポイントセキュリティ
- すべてのデバイスにアンチウイルスソフトをインストール。
- モバイルデバイス管理（MDM）を導入してBYOD（個人デバイス利用）の安全性を確保。

#### 4.2 侵入検知システム（IDS）の導入
- ネットワークの異常を監視し、即時対応する。

#### 4.3 セキュリティポリシーの策定
- 企業全体で従うべきセキュリティポリシーを文書化。
- 定期的にポリシーを更新し、適用状況を監査。

## 実践のポイント

1. **優先順位を明確に**:
   - リソースが限られている場合は、最も重要な領域から取り組む。

2. **外部リソースを活用**:
   - セキュリティベンダーやコンサルタントを活用して、費用対効果の高い対策を実施。

3. **継続的な改善**:
   - 1回限りの対策ではなく、定期的に見直し、最新の脅威に対応する。

## 参考リンク

- [IPA 中小企業向け情報セキュリティ対策ガイドライン](https://www.ipa.go.jp/security/fy26/mid-small/outline.html) - 中小企業のセキュリティ対策に特化したガイドライン。
- [NIST Small Business Cybersecurity Corner](https://www.nist.gov/itl/smallbusinesscyber) - アメリカ国立標準技術研究所が提供する中小企業向けセキュリティ情報。
- [Microsoft 中小企業向けセキュリティリソース](https://www.microsoft.com/security/small-business) - マイクロソフトが提供する中小企業向けのセキュリティツールとリソース。
- [Cisco Small Business Security Solutions](https://www.cisco.com/c/en/us/solutions/small-business.html) - 中小企業のためのネットワークセキュリティソリューション。

## まとめ

中小企業にとって、限られたリソースでセキュリティ対策を行うのは大きな課題です。しかし、本チェックシートを活用して優先順位を明確にし、基本的な対策から着実に進めることで、リスクを大幅に軽減することができます。まずは最も優先度の高い項目から着手し、堅牢なセキュリティ体制を築きましょう。
Rust と TOML


# はじめに

Rust のプロジェクトを効率的に管理するためには、設定ファイルの理解が欠かせません。Rust の**ビルドツール兼パッケージ管理ツール**である **Cargo** は、設定ファイルとして **TOML 形式**を採用しています。

この記事では、TOML と Cargo.toml について説明します。

# TOML

**[TOML（Tom's Obvious, Minimal Language）](https://toml.io/en/)** は設定ファイルのフォーマットの 1 つです。`.toml` の拡張子をもちます。

Rust の **cargo** では、プロジェクトの設定を `TOML` 形式で記述します。

`TOML` の基本的な構文は、**キー**と**値**の組み合わせからなり、**テーブル**を使って階層的な構造を表現します。

以下は簡単な TOML ファイルの例です。

```toml:example.toml
[owner]
name = "John Doe"
dob = 1998-01-21

[database]
server = "localhost"
port = 8080

# This is a TOML comment
```

この例では、`owner` テーブルと `database` テーブルがあり、それぞれのテーブル内でキーと値が指定されています。以下のような階層構造を持ちます。

```:階層構造
    ┌── owner/
    │   ├── name: "John Doe"
    │   └── dob: 1998-01-21
    └── database/
        ├── server: "localhost"
        └── port: 8080
```

テーブル名やキー名は、**大文字と小文字を区別**します。

値は、以下のいずれかの種類である必要があります。JSON よりも種類が多いです。

- **文字列**（UTF-8 文字）: `"fruit"`, `'C:\Users\nodejs'`
- **整数**: `32`, `-7`
- **浮動小数点数**: `3.14`, `1e07`
- **ブール値**: `true`, `false`
- **オフセット付き日時**: `2020-05-27T00:32:00-07:00`
- **ローカルの日時**: `1979-05-27T07:32:00`
- **ローカルの日付**: `1979-05-27`
- **ローカルの時刻**: `07:32:00`
- **配列**: `[ 0, 1, 2 ]`, ` [ [ 0, 1 ], ["x", "y", "z"] ]`
- **インライン テーブル**: `{ first = "Taro", last = "Yamada" }`

また、**ハッシュ記号** (`#`) で**コメントを記述**することもできます。

TOML の細かな仕様については [TOML: v1.0.0](https://toml.io/ja/v1.0.0) を参考にしてください。

:::note
Cargo ではテーブルは**セクション**、キーは**フィールド**と呼ばれています。
:::

# Cargo.toml

`Cargo.toml` は cargo の設定ファイルで、プロジェクトの依存関係やビルド構成がここで管理されます。

```toml:Cargo.toml
[package]
# プロジェクトの実際の名前 (プロジェクトのディレクトリ名やGitのレポジトリ名と同じである必要はない)
name = "hello_world"
# プロジェクトのバージョン (セマンティック・バージョニングを採用)
# 詳しくは https://semver.org/ を参照
version = "0.1.0"
# プロジェクトがどのバージョンの Rust を対象としているかを明示
edition = "2021"

[dependencies]
# 依存関係を管理
```

`[package]` セクションにはプロジェクトのメタデータを設定します。必須なフィールドは `name` フィールドのみです。

- `name` フィールドの値は`英数字`または `-` または `_` のみで構成されている必要があります。
- `version` フィールドのデフォルトの値は `0.0.0` です。パッケージを公開する場合にはこのフィールドは必須です。
- `version` フィールドでは、プロジェクトがどのバージョンの Rust を対象としているかを明示します。

`[dependencies]` セクションはプロジェクトが依存するクレート（ライブラリ）を指定します。

## 依存関係の追加・バージョン指定

- **依存関係の追加**
  新しい依存関係を追加するには、`[dependencies]` セクションにクレート名とそのバージョンを指定します。

```toml
[dependencies]
# time クレートのバージョン 0.3.36 を追加
time = "0.3.36"
```

- **バージョン指定**
  バージョン指定には複数の方法があります。固定バージョン指定、範囲指定などがあります。

```toml
# 固定バージョン指定
# バージョン 0.3.36 のみを使用することを示す
time = "0.3.36"

# 範囲指定
# バージョン0.3.x（例えば、0.3.0、0.3.1、0.3.36など）の最新バージョンを選択
time = "0.3"
```

他にも、比較演算子や波ダッシュ、キャレットを使用した指定方法があります。

# 参考資料

Cargo に関する仕様については [The Manifest Format - The Cargo Book](https://doc.rust-lang.org/cargo/reference/manifest.html) や [Specifying Dependencies - The Cargo Book](https://doc.rust-lang.org/cargo/reference/specifying-dependencies.html) を参考にしてください。

セマンティック・バージョニングについては [Semantic Versioning](https://semver.org/) を参考にしてください。