OmniAICreator/Qiita-1.07M huggingface dataset:
glTFの拡張形式

glTFの基本構造はデータ構造を定義するJSON部分と、画像やメッシュなどのバイナリデータを含むバイナリデータ部に分けられる。
glTFは拡張可能なので、様々なベンダーが様々に拡張している。

この記事では***いわゆる***「VRSNS」ベンダーが開発する拡張を簡単にまとめる。

## VRM

業界の中では有名な形式。主導するVRMコンソーシアムは厳密には委員会のような形式をとっているのでVRSNSベンダーではない。

## PITM

Clusterが定義する内部形式。glTFを基にしているとされる。
https://docs.cluster.mu/creatorkit/pitm/overview/

単独のファイルで完結する必要があるとされることから、glb形式でならなければならないことが推定される。

拡張部分の情報にはMToonの情報やCluster Scriptなどが入っていると思われる。

## Sutera Package
SuteraVRが提唱するファイル形式。厳密には拡張形式ではなく、glTFを包む梱包形式だが比較のために参照する。
参考: https://github.com/SuteraVR/Specifications/pull/63
カプセル化とは

>プロトコルの持つ役割の中で最も大きいものが`「カプセル化」`と`「非カプセル化」`です。ネットワークの通信では、OSI参照モデルの`レイヤーを超えるたびに、データを入れ物（カプセル）に入れたり出したり`します。`カプセルに入れる処理がカプセル化`、`カプセルから取り出す処理が非カプセル化`です。これら２つの処理は、ロシアのお土産で有名なマトリョーシカ人形とよく似ています。カプセル化と非カプセル化は、アプリケーションデータを送り出すサーバーと受け取るクライアントについて考えると理解しやすくなります。以下、その流れを見ていきましょう。

>サーバーで行う処理がカプセル化です。サーバーはレイヤーの上流から下流に向けて、`カプセル化の処理を行い、転送用のデータを作っていきます`。サーバーアプリケーションは、アプリケーションデータを作ると、`そのままの状態でトランスポート層に渡します`。トランスポート層は、受け取ったアプリケーションデータを`TCP/UDPのカプセル（セグメント）に入れて、ネットワーク層に渡します`。ネットワーク層は、受け取ったセグメントを`IPのカプセル（パケット）に入れて、データリンク層に渡します`。データリンク層は、受け取ったパケットを`イーサネットのカプセル（フレーム）に入れて、物理層に渡します`。物理層は受け取ったフレームを、信号に乗せやすいビットに変換した後、電気信号や光信号にして送ります。
　それに対して、クライアントで行う処理が非カプセル化です。クライアントはレイヤーの下流から上流へ向けて非カプセル化の処理を行い、オリジナルのアプリケーションデータに戻していきます。物理層で電気信号、光信号を送ると、ビットに変換した後、フレームにして、データリンク層へと渡します。データリンク層は、受け取ったフレームからパケットを取り出して、ネットワーク層へと渡します。ネットワーク層は受け取ったパケットからセグメントを取り出して、トランスポート層へ渡します。トランスポート層は、受け取ったセグメントからデータを取り出して、オリジナルのアプリケーションデータをクライアントアプリケーションに渡します。

 # データの呼び名の違い
 >「フレーム」、「パケット」「セグメント」という呼び名は、OSI参照モデルのどの階層のデータであるかを示しているだけです。

* レイヤー5〜7はアプケーションデータ
* レイヤー4はセグメント 
* レイヤー3はパケット
* レイヤー2はフレーム

https://www.sbcr.jp/product/4797386677/

# 感想
階層の違いでデータの呼び方が違うことがわかったのでスッキリした。
【Flutter】dart-define-from-fileの環境変数をAppDelegate.swiftで使う




## 環境
Flutter 3.19.6
Dart 3.3.4
M2 mac Sonoma 14.5
xcode Version 15.3

## 課題

どうしてもアプリ起動時にAppdelegate.swiftにdart-define-from-fileで定義している環境変数を渡したかった。ただし.envとか使った方が圧倒的に楽そうではある。

↓この記事が非常に参考になった。chatGPTが相決してくれなかったことを解決してくれた。AIばっかりに頼っていてはいけないかもしれない。

https://qiita.com/nonoik/items/0c676a278558a1ee3ebc#%E4%BD%9C%E3%82%8B%E3%82%82%E3%81%AE%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6

## 解決方法

/libディレクトリ内の任意の場所に環境変数の橋渡しをするためのファイルを作る（別にmain.dartに直接書いても構わない）。
`MethodChannel()`には任意の文字列を渡す。これはAppDelegateでも同じ文字列を使うのでわかりやすい名前をつけるのがいい。
`platform.invokeMethod(methodName, arguments)`でAppDelegateから関数を呼ぶ。channelと同様`methodName`はわかりやすい名前をつける。`arguments`に値を渡すことでAppDelegate内でその値を利用することができる。

:::note info
ただし、MapかListを渡す時はそれぞれ`invokeMapMethod()`、`invokeListMethod()`と別の関数を使う。
:::


```dart:lib/env_bridge.dart
import 'package:flutter/services.dart';
import 'package:flutter/foundation.dart';

class EnvBridge {
  // AppDelegate.swiftから処理を実行するためのchannelを宣言
  static const platform = MethodChannel('envBridgeChannel');

  // main.dartから呼ぶ
  static Future<void> sendEnvironmentVariableToAppDelegate() async {
    const key =
        String.fromEnvironment('key', defaultValue: 'noSuchKey');

    try {
    // AppDelegateで登録した処理を行う
      await platform.invokeMethod('setEnvironmentVariable', key);
    } catch (e) {
      debugPrint('failed to set googlemaps api: $e');
    }
  }
}
```

flutterコードか実行するための処理をAppDelegateに登録する。
`FlutterMethodChannel()`のnameには`EnvBrigde`に書いたものと同じものを書く。
`channel.setMethodCallHandler()`で任意の処理を登録する。`methodCall.arguments`でFlutterで渡された引数を受け取ることができる。ビルド時に怒られるので`as! String`でキャストする。数値などを渡す時は適宜対応する。

```diff_swift:ios/Runner/AppDelegate.swift
import UIKit
import Flutter

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {

+    let controller : FlutterViewController = window?.rootViewController as! FlutterViewController
+    let channel = FlutterMethodChannel(
+      name: "envBridgeChannel",
+      binaryMessenger: controller.binaryMessenger
+    )

+    channel.setMethodCallHandler({
+      (methodCall: FlutterMethodCall, result: @escaping FlutterResult) -> Void in
+        if (methodCall.method == "setEnvironmentVariable") {
+            let value = methodCall.arguments as! String
+            // 環境変数を受け取って何かする。
+            print(value)
+        }
+    })

    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

```

main関数からEnvBridgeで定義した関数を呼ぶことで、AppDelegateの処理を実行する。結果としてFlutterから値を渡してSwiftで環境変数を使った処理を実行することができる。

Androidの時に不測の処理をすると困るので一応iosの時だけ実行するようにしておく。

```diff_dart:lib/main.dart
+ import 'package:flutter/services.dart';
+ import 'env_bridge.dart';

- void main() {
+ Future<void> main() async {

+    if (Platform.isIOS) {
+        await EnvBridge.sendEnvironmentVariableToAppDelegate();
+    }

    runApp(const MyApp())
}
```
Rails ActiveRecordの自己結合：タスク管理アプリ

## 読んで欲しい人
- Railsで自分のテーブルを参照してリレーションを組みたい人
- 例：Userモデル内でそれぞれ役職があって、その関係性を表現したい！
  - 上司と部下
  - プロジェクトとタスク
- 過去の俺
## 今回のケース
- タスク管理アプリでTaskがTaskを無限に持てるようにしたいなぁ
## やり方
```ruby
class Task < ApplicationRecord
  has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy
  belongs_to :parent, class_name: 'Task', optional: true
end
```
## 解説

```ruby
has_many: sub_tasks, class_name: 'Task', foreign_key: 'parent_id', dependent: :destroy
```

- TaskはTaskを複数持てるをそのまま、has_many :tasksと記述すると分かりづらいので`has_many: sub_tasks`で名前を変更している
- `class_name: 'Task'`でTaskクラスを参照するように指定。実際には`sub_task`モデルなど存在しないので
- sub_taskは`parent`として外部キー（親タスク）を指定する `foreign_key: 'parent_id'`
- `dependent: :destroy`親タスクが消えたが、小タスクも消える

```ruby
belongs_to :parent, class_name: 'Task', optional: true
```

- `belongs_to :parent` Taskは親タスクに所属している
- `class_name: 'Task'` 実際はparentなんてないからちゃんとTaskクラスを指定する
- `optional: true` 最初に追加するTaskは親タスクが存在しないので、親がいなくてもTaskは生成することができる

## 感想

- 意外とタスクを無限に追加できるタスク管理アプリは考慮しなくてはいけないことが多い（経験不足）
- じゃあコントローラとかどう書くのかはわからないので、またできたら書きます

## 参考

https://railsguides.jp/association_basics.html#%E8%87%AA%E5%B7%B1%E7%B5%90%E5%90%88
Catapult REST Endpoints Handbook

# はじめに

こんにちは。だい（@ishidad2）です。
晴れ時々Symbolということでいつも通り、Symbolネタの記事を書いていこうと思います。

今回、Catapult REST Endpoints Handbookというものを執筆し始めました。

# 対象読者

この記事の対象読者としては、最低限以下の要件を満たす人を対象としています。

- Javascriptなど何かしらのプログラミング言語を使える人
- SymbolSDKを使ってトランザクションが発行できる人
- SymbolのREST APIを使ってデータの取得を行う人

# Catapult REST Endpoints Handbook とは？

 - [Catapult REST Endpoints Handbook](https://gist.github.com/ishidad2/573c291006902e8bd2e8eb1c0151556f)

Symbolブロックチェーンは、企業や開発者に強力なツールを提供する先進的なブロックチェーンプラットフォームですが、その機能の広範さゆえに、APIを正確に理解し活用するにはガイドが必要です。

本書は、以下の点に重点を置いて構成されています。

- 実践的なエンドポイントの使用方法
- 開発者視点からのトラブルシューティングや応用技術

このハンドブックは、Symbolブロックチェーンを使ったアプリケーション開発を目指す開発者が、ブロックチェーン操作を効率的かつ確実に行えるようにサポートすることを目的としています。

このハンドブックは随時、更新していこうと思っています。
もし、ネタがあれば[X](https://x.com/ishidad2)（旧[Twitter](https://x.com/ishidad2)）までどしどしDMしてください。
【緊急！AWSを守れ！】知らなきゃ危険なDDoS攻撃の対策法

## はじめに
こんにちは、uiroleです！
今回は、AWS SCS認定試験でも頻出の DDoS攻撃 について、その危険性と対策法を詳しく解説します。
この記事を読んで、AWSを守るための知識を身につけましょう！

## DDoS攻撃とは？

DDoS（Distributed Denial of Service）攻撃 とは、複数のマシンからターゲットのサーバーやサービスに対して過剰なリクエストを送り、サービスをダウンさせる攻撃手法です。
この攻撃によって、**正常なユーザーがサービスを利用できなくなり、企業に多大な損失をもたらす**可能性があります。

## DDoS攻撃の主な種類

| 種類| 特徴| 
|:-----------|:------------|
| ボリュームベース攻撃 | 大量のトラフィックを生成し、ターゲットの帯域を圧迫します。|
| プロトコル攻撃| TCP/IPスタックの脆弱性を突き、サーバーやネットワーク機器のリソースを消費させます。|
| アプリケーション層攻撃| 特定のアプリケーションに対して大量のリクエストを送り、サービスをダウンさせる攻撃です。|

## DDoS攻撃の影響

DDoS攻撃が成功すると、以下のような影響が考えられます。
- サービス停止によるビジネスの損失
- 顧客の信頼性低下
- ブランドイメージの悪化

## AWSにおけるDDoS対策

AWSは、DDoS攻撃からアプリケーションを保護するための多くのサービスを提供しています。
以下に具体的な対策法を紹介します。

### 【1. AWS Shieldを利用する】

AWS Shield は、DDoS攻撃からの保護を提供するサービスで、2種類あります。

| 種類| 特徴| 
|:-----------|:------------|
| AWS Shield Standard | すべてのAWSユーザーに自動的に提供され、ボリューム攻撃やプロトコル攻撃に対処します。|
| AWS Shield Advanced | より高度な保護が必要な場合に使用し、攻撃の監視やレポート機能が提供されます。|


### 【2. Amazon CloudFrontを活用する】

Amazon CloudFront は、コンテンツ配信ネットワーク（CDN）で、DDoS攻撃の影響を緩和します。
CloudFrontを利用することで、エッジロケーションでトラフィックを処理し、**オリジンサーバーへの負荷を軽減できます。**

### 【3. AWS WAFの導入】

AWS WAF は、Webアプリケーションに対する不正アクセスを防ぐファイアウォールです。
特定のルールを設定して、DDoS攻撃に利用される可能性のあるトラフィックをフィルタリングできます。

### 【4. Auto Scalingの活用】

Auto Scaling を使用して、DDoS攻撃時にリソースを自動で増やすことができます。
これにより、攻撃による影響を最小限に抑えることが可能です。

### 【5. VPCのセキュリティ強化】

VPCを利用して、ネットワークレベルでのセキュリティを強化します。セキュリティグループやネットワークACLを設定することで、不要なトラフィックを制御できます。


### 【6. Elastic Load Balancing（ELB）でトラフィックを分散】

ELBは、受信トラフィックを複数のインスタンスに分散させるためのサービスで、DDoS攻撃による負荷集中を防ぎます。
ELBを活用することで、高トラフィック時にも安定したサービス提供が可能です。

| 機能| 特徴| 
|:-----------|:------------|
| トラフィックの分散| 複数のインスタンスに負荷を分配することで、過負荷によるシステム障害を回避しやすくなります。|
| Auto Scalingとの併用 | uto Scalingと連携させることで、DDoS攻撃時に一時的にインスタンスを増加させ、サービス停止を防ぐことができます。|

::: note info
Webアプリケーションの公開時には、Amazon CloudFrontとELBを併用し、DDoS攻撃の入口となりやすいエッジロケーションと負荷分散を組み合わせることで、セキュリティを強化できます。
:::

## まとめ

DDoS攻撃はAWS環境における重大な脅威ですが、AWSが提供するさまざまなサービスを活用することで、効果的に防ぐことができます。事前に対策を講じ、万全な体制を整えることで、DDoS攻撃のリスクを大幅に低減できるでしょう。

この記事が、AWSを守るための参考になれば幸いです。
もし役に立ったと思ったら、いいねやフォローをよろしくお願いします！コメントもお待ちしています！
初心者によるReact,Node.js,MySQLの接続

## はじめに
React,Node.js,MySQLを使ってデータベースをフロントエンドを接続し、データを画面に表示する手順を説明します。⚠︎初心者なので不備があれば指摘してください！！
### 必要なツールのインストール
以下のツールをインストールします。
* Node.js
* MySQL
* Vite
#### ViteでReactプロジェクト作成
1. プロジェクトフォルダを作成し、clientとserverフォルダを作ります。
2. clientフォルダ内で以下のコマンドを実行し、ViteでReactプロジェクトを作成します。
```
npm create vite@latest .
npm install
npm run dev
```
## MySQLでデータベースとテーブル作成
次に、MySQLでデータベースとテーブルを作成し、サンプルデータを挿入します。
MySQLにログインし、以下のコマンドを実行してデータベースとテーブルを作成します。
```ruby:sql
CREATE DATABASE my_project_db;
USE my_project_db;

CREATTE TABLE items (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255) NOT NULL
);

INSERT INTO items (name) VALUES ('Item 1'),('Item 2'), ('Item 3');
```
## Node.js(Express)でMySQLからデータを取得
### Node.jsプロジェクトのセットアップ
次にNode.jsを使って、MySQLからデータを取得するAPIを作成します。
serverフォルダ内でNode.jsプロジェクトを初期化し、必要なパッケージをインストールします。
```
npm init -y
npm install express mysql2 cors nodemon
```
server/server.jsに以下のコードを追加してMySQLからデータを取得するAPIを作成します。パスワードとデータベースは各自変更してください。
```ruby:server.js
const express = require('express');
const mysql = require('mysql2');
const cors = require('cors');

const app = express();
const port = 3000;

const connection = mysql.createConnection({
  host: 'localhost',
  user: 'root',
  password: 'your_password',
  database: 'my_project_db'
});

app.use(cors());

app.get('/items', (req, res) => {
  connection.query('SELECT * FROM items', (err, results) => {
    if (err) {
      return res.status(500).send('Database query error');
    }
    res.json(results);
  });
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});
```
サーバーを起動し、確認します。
```
nodemon server.js
```
ブラウザで`http://localhost:3000/items`にアクセスすると、挿入したデータが表示されます。
## Reactでデータを表示
次に、Reactを使ってAPIからデータを取得し、画面にリスト表示します。
`client/src/App.jsx`に以下のコードを追加します。
```ruby:App.jsx
import { useState, useEffect } from 'react';

function App() {
  const [items, setItems] = useState([]);

  useEffect(() => {
    fetch('http://localhost:3000/items')
      .then(response => response.json())
      .then(data => setItems(data))
      .catch(error => console.error('Error fetching data:', error));
  }, []);

  return (
    <div>
      <h1>Items List</h1>
      <ul>
        {items.map(item => (
          <li key={item.id}>{item.name}</li>
        ))}
      </ul>
    </div>
  );
}

export default App;
```
React開発サーバーを起動し、ブラウザでリストが表示されればOKです。
```
npm run dev
```

# まとめ
この記事では、React,Node.js,MySQLを使ってデータベースとフロントエンドを接続し、データを表示する手順を説明しました。わかりづらいところや間違っているところがあるかもしれませんが、アウトプット練習ということで多めに見てください🙏
ドメイン貧血症はなぜ「貧血症」？

以前、ドメインモデル貧血症について話しているときに「なぜ貧血症？」と思い、考えたことをまとめたいと思います。

### ドメインモデル貧血症ってなに？

ドメインモデル貧血症とは以下の特徴がある状態です。
* オブジェクト指向プログラミングにおいて、ドメインモデルが十分なビジネスロジックを持たない
* ビジネスロジックが本来それを持つべきドメインモデルの外部に散らばってしまっている状態

ドメインモデル貧血症になることで以下の問題があります。
* 可読性やメンテナンス性の低下：業務ロジックが分散することで、コードの可読性が下がり、モデルがどのように動作するか理解しにくくなる
* 再利用性の低下：ロジックが一箇所にまとまっていないため、他のプロジェクトや部分で再利用しにくくなる
* 不完全なカプセル化：ビジネスロジックを本来持つべきドメインモデルが持たないことで、本来公開すべきでない情報を公開しなければいけなくなる

### なぜ貧血症？

「ドメインモデル貧血症(Anemic domain model)」という言葉を初めて使ったのはマーティン・ファウラーとのこと。([英語版Wikiより](https://en.wikipedia.org/wiki/Anemic_domain_model))

ドメインモデル貧血症の本質は「本来ドメインモデルが持つべきビジネスロジック不足していることで設計が貧弱になる」という部分だと考えます。
そして、ビジネスロジックを「血液」、設計を「人体」になぞらえることで「貧血症」と表現したのではないかと考えます。
そのため、もしマーティン・ファウラーの気分がことなり、ビジネスロジックを「水分」とすると、「脱水症」、ビジネスロジックを「栄養」とすると、「栄養失調」になっていた可能性もあるんじゃないかなと思います。
IBM Power10 (オンプレミス)で PowerVC を使用した仮想マシンの複製

#### はじめに

PowerVC で既存の仮想マシンを複製するという機能を確認したログです。

<br>


https://www.ibm.com/docs/ja/powervc-cloud/2.2.0?topic=machines-clone-virtual

> クローン仮想マシン機能で新しい同一仮想マシンを作成できます。 同じ CPU、メモリー、可用性優先順位、ボリュームなどを持つ既存の仮想マシンのコピーを作成できます。


前提等は上記のマニュアルをご確認ください。

<br>

想定のユースケース：
オンプレミス環境でも同じ設定が入った仮想マシンを手軽に複数作成したい場合など
(システムバックアップのリストアより早く作成できます。)

---

#### 環境

* オンプレミス環境

　Server筐体： S1012(9105-41B)
　ストレージ：  FS5015
　PowerVC 2.2.0
　複製する仮想マシン：AIX 7.3
 　　　-> sys0 の clouddev = 1　設定

---
#### 仮想マシンの複製


元のVMが起動状態で実施しています。

結果的には起動状態でも複製できることが確認できましたが、
基本的には、静止点を確保するために仮想マシンを停止して実行することが推奨されると思います。


PowerVC GUI より、仮想マシン-VMリスト- 対象のVMの詳細を表示

![スクリーンショット 2024-10-25 16.25.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/2ad2a474-3719-6595-fd7b-1c7833d92d85.png)

"アクション" -> "複製" を押します。

![スクリーンショット 2024-10-25 16.26.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/32428b59-7b1c-e0f3-d9b7-75a10fe3329c.png)


画面遷移直後は以下の表示です。

![スクリーンショット 2024-10-25 16.27.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/f0814f31-4f2f-4573-4460-92a3d2adbbbd.png)

詳細設定値を追加

![図0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/122ae233-20b0-c3d2-ce0c-75bbacee3e58.png)



ネットワーク: VLAN11 を設定。IP指定なし。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/b223812a-fe1c-85ee-b644-a40986b63fed.png)


この仮想マシンは boot ボリューム１つです。
データボリュームがあれば、選択複製できると思います。

![図2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/179ef575-33d8-8447-eb7d-2b521f9ded45.png)


=> VMの複製を実行

無事、testvm1_clone が作成されています。

![図1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/517421/20f85b3d-145d-d629-2dba-2ac0e8727319.png)



少し時間をおいて複製したVMにログイン。

```
*******************************************************************************
*                                                                             *
*                                                                             *
*  Welcome to AIX Version 7.3!                                                *
*                                                                             *
*                                                                             *
*  Please see the README file in /usr/lpp/bos for information pertinent to    *
*  this release of the AIX Operating System.                                  *
*                                                                             *
*                                                                             *
*******************************************************************************
# hostname
testvm1-clone
# uptime
  03:20AM   up 28 mins,  1 user,  load average: 3.00, 3.11, 2.71
```

ログインも無事できました! 


---
#### おわりに

<br>

PowerVCのVM複製機能の有用な使い方として、サーバ筐体移行なども考えられそうです。
ストレージ筐体は、ボリューム・コピーの対象ストレージ・プールの縛りなどがあるので別途考慮が必要と思います。


<br>

以上です。
【Git】ローカルにないブランチの最新を、作業ブランチに取り込みたい

初投稿です

# これは何
自作したブランチで作業していて、mainブランチの最新を取り込むときに躓いたので、備忘録です。


# 事象1
mainブランチをcheckoutしたかった。
```
git checkout main
```
以下エラーが発生した。
```
error: pathspec 'main' did not match any file(s) known to git
```

調べたところ、ローカルにmainブランチが存在しないのが原因らしい。
強制的にfetchする。
```
git config remote.origin.fetch "+refs/heads/*:refs/remotes/origin/*"
git fetch origin
```

# 事象2
事象1でfetchまで完了したあと、再度checkoutしたところ別なエラーが発生した。
```
Please commit your changes or stash them before you switch branches.
```
これは、ローカルの資材にcommitしていない変更があるエラーらしい。
解決するには2パターンある。  
<br>
1\. ローカルの変更を一時退避する場合
```
git stash
```
2\. ローカルの変更を取り消す場合
```
git checkout .
```

上記どちらか実行後に、漸くcheckoutに成功！

# その後の手順
ローカル上のmainブランチを最新化する。
```
git pull origin main
```

作業ブランチに切り替える。
```
git checkout 作業ブランチ名
```

mainブランチと作業ブランチをマージし、mainの最新情報を取り込む
```
git merge main
```

地道にGitと仲良くなれればと思います(´・ω・`)

# 参考サイト

https://qiita.com/konweb/items/061475d6376db957b3c4

https://zenn.dev/n_haru2/articles/6d08cc32b6dc9d

https://qiita.com/hasht/items/bbdd1763aae7f9f614ee
RARP

>RARP（Reverse Address Resolution Protocol）は、MACアドレスからIPアドレスを取得するための通信プロトコルのことを言い、 
IPアドレスからMACアドレスを取得す「ARP」とは逆の動作のため「Reverse」と付けられています。 
>
>主にディスクレスパソコンのように外部記憶装置を持たない機器に利用されます。 
>
>ディスクレスパソコンなどの機器ではIPアドレスを保存することが出来ないため、 
ネットワークに参加する段階では自身のMACアドレスしか分かりません。 
>
>その場合、自身のIPアドレスを知る手段として「RARP」を利用します。

https://www.e-bcc.co.jp/glossary/network/r/rarp/

### ディスクレスパソコン
>ディスクレスPCとは、ハードディスクを持たないパソコンのことである。
ディスクレスPCは企業のクライアント端末に用いられることが多い。 機密データなどが入っているハードディスクをユーザーから物理的に切り離すことで、情報漏洩の防止が期待できる。 クライアント端末からのアプリケーション操作などはすべて中央のサーバーで処理されるため、メンテナンスはサーバーのみで良く、従来かかっていたクライアントのメンテナンスコスト削減が可能である。 しかし、中央のサーバーで処理されることにより、通常のパソコンと比べてパフォーマンスは落ちる。 このため、動画・画像などのデータを処理する業務には適していない。 ディスクレスPCの実現方法にはいくつかの種類がある。 例えば、サーバールームにクライアントPCを集約するブレードPC型や、ベンダー独自のプロトコルを使ってクライアント端末とサーバー間の通信を実現する方法などがある。

https://japan.zdnet.com/glossary/exp/%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%B9PC/?s=4#:~:text=%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AC%E3%82%B9PC%E3%81%A8%E3%81%AF%E3%80%81%E3%83%8F%E3%83%BC%E3%83%89%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF,%E5%AE%9F%E7%8F%BE%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95%E3%81%AA%E3%81%A9%E3%81%8C%E3%81%82%E3%82%8B%E3%80%82

weblioだけど面倒臭かった。

ハードディスクがないとIPアドレスも保存できないのか。
記事が見つからなかった。
初心者向けAWSの社内研修の実現に向けて

### はじめに
堀チームでは、AWSを触ったことがない初心者に対して社内研修の作成を行いました。
AWSの各サービス(VPC,IAM,EC2,ELB,RDS)や構築の仕方について理解してもらうことを研修の目的としています。特にIAMによる権限やELBによる可用性の重要性を知ってもらいたいと考えております。実際に以下のサービスを使用してサーバやデータベースを構築していきます。

### 使用するAWSのサービス

1. **VPC（Virtual Private Cloud）**
   - VPCは、クラウド上に仮想的なネットワークを構築するためのサービスです。ユーザーは自分自身のIPアドレス範囲、サブネット、およびネットワークゲートウェイを定義することができ、ネットワークアクセス制御リスト（ACL）やセキュリティグループなどのセキュリティ設定を構成することもできます。

2. **EC2（Elastic Compute Cloud）**
   - AWS上でLinuxやWindowsなどのOSを使った仮想サーバーを構築することができます。

3. **RDS（Relational Database Service）**
   - マネージド型のリレーショナルデータベースサービスです。DBインスタンスを簡単に立ち上げ、運用することができます。

4. **ELB（Elastic Load Balancer）**
   - 複数のEC2インスタンスへのトラフィックを負荷分散するためのサービスです。これにより、システムの可用性が向上し、ユーザーが常にアクセス可能な環境を維持することができます。

5. **IAM（Identity and Access Management）**
   - IAMは、AWSリソースへのアクセスを安全に管理するためのサービスです。ユーザー、グループ、ロールを作成し、それぞれに対して細かいアクセス権限を設定することができます。

### システム構成図

研修で構築する最終的な構成図は以下になります。
![素材.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2768823/48e92b45-6c1e-892c-a6b0-e2eddce6edc1.png)


### 特に重要性高いサービスについて
#### ELBと可用性の重要性

ELB（Elastic Load Balancer）を設定することについて、以下の重要性があります。
  - 可用性
複数のEC2インスタンスへのトラフィックを効率的に分配します。
これにより、特定のインスタンスに過負荷がかかることを防ぎ、全体の可用性を向上させます。
また、EC2インスタンスが障害を起こした場合、ELBは自動的に他の正常なインスタンスにトラフィックを切り替えるため、ユーザーに対するサービスの中断を最小限に抑えることができます。

#### IAMとセキュリティの重要性

IAM（Identity and Access Management）を設定することについて、以下の重要性があります。
   - 細かいアクセス管理
IAMを使用すると、ユーザーやアプリケーションごとに異なるアクセス権限を設定できます。たとえば、開発者にはEC2インスタンスを起動・停止する権限を与え、一方でデータベース管理者にはRDSインスタンスへのアクセス権限のみを与えることができます。これにより、各役割に必要な権限だけを付与し、セキュリティリスクを低減します。

   - 多要素認証（MFA）
IAMでは、多要素認証を設定することで、アカウントのセキュリティを強化できます。たとえば、AWS管理コンソールにログインする際にパスワードを加え、第三者がアクセスするのを防ぎます。


### まとめ
今回AWSの基礎について研修向けに形を作ることができたと感じております。
今後は、研修内容をさらにブラッシュアップしてより初心者にも分かりやすい内容を目指していきたいと思います。

### 参考
   - 【2024年版】AWS全サービス一覧表！324サービスを解説
https://srest.io/blog/aws-all-service
   - AWS公式リファレンス
https://docs.aws.amazon.com/
プログラミングを「学ぶ」ことがつまらないのは当然

# プログラミングを学ぶことはつまらない
プログラミングを学ぶのは本当につまらない。
私自身はプログラマーを数年やってきたが、
参考書や教科書を買ってきて新しい言語を学ぶのはいまだに嫌いだし、つまらないと思う。
でも、その先にあるアプリづくりに関してはまぁまぁ楽しいと思う。
それが何故か？
ふと思ったので書いてみた。

# 異常に長いチュートリアル

 ### プログラミングを学ぶことをゲームに置き換えてみた。
ゲームをプレイし出したとき、大体のゲームでは最初にチュートリアルがある。
こう操作するとこうなりますよ！を体験しながらキャラを動かしていく。
正直、この時間が嫌いな人って結構いると思う。
__「早く本編やらせてくれよ！」__
私もその一人だ。
ただ、ここである程度感覚を掴んでおかないと、その先には進めない。
手探りで操作方法を見つけていくよりは、チュートリアルで学んだ方が早い。
そんなことは分かってる。
それでも __めんどくさいのは変わらない。__
何故ならとてもつまらないから。
早く終わってほしいもの。それがチュートリアルだ。

### プログラミングの参考書を読むことはチュートリアル
プログラミングをすることの目的はアプリやシステムを作ることなのは間違いない。
そのために記法や仕組みを学ぶ。
これはゲームにおけるチュートリアルに相当するものと言える。
__ゲームとの最大の違いはこの長さ、量。__
プログラミング言語の本を見たことがある人なら分かるだろうが、
異常に分厚い。全然終わらない。
そしてひとつひとつ新しいものが出るたびに「よく分からん」となる。
精神的にはちょっとしんどい。
__「分かる」「出来る」が人間の楽しさの源なのに、そこに全然至れない。__
アプリやシステムを作りたいのに、そのスタートに立つまでが長すぎる。
つまり、ずーーっとチュートリアルをやらされていて、全然本編が始まらない。
__だからつまらないんだろう。__

## プログラミングに挫折するのは仕方ない
こんなにもつまらないものがこんなにも長く続く。
そりゃ、挫折する人も出てくる。
しかもこんなに大変なのに、実務ではこれ以上のレベルを求められる。
__こんなものを毎日勉強しないといけないのか？__
そう思ってしまう。
だが、ここさえ乗り越えて感覚を掴めれば、なんとかなる。

## なんとかなる
この最高につまらない分厚い本を一度手を動かしながら読み切ってみる。
これでなんとなくの操作は分かったはず。
__詳しい書き方は覚えていなくとも「こういうことができる機能があるんだな」というのは脳がしっかり覚えていてくれるから大丈夫。__
そして並行してアプリを一つ作ってみる。（なんでもいい）
すると、
「あっ！この記法ここで使うんじゃないか」
「これを組み合わせれば目的の機能を実現できるんじゃないか」
閃きが生まれる。
__これで学んできた技が「自分のモノ」になった。__
この瞬間が気持ちいい。
こうやって出てきた書き方やパターンはもう二度と忘れない。
どこかで絶対に活きる。
私はこの瞬間が好きだからプログラマーを続けているのかもしれない。

# おまけ
### 実務で役に立てるか？という不安
どんな人でも立てると思う。
この最高につまらないチュートリアルを苦しみながら乗り越えた人ならきっと。

おそらく最初は
技術に自信アリという振る舞いをした面々にぼこぼこにされる。
私はされた。本当に悔しかったし、この業界を嫌いになりかけた。

でも数年やってみて分かるのは
__「その人が正しいと思うことを言ってるだけ」で、__
__「実際にその人が正しいわけじゃない」ってこと。__
そういう人たちは
__自分のことを正しいと思わせるように言うのが得意__ なのだ。

仕様を満たしていればコードの書き方に正解なんてない。
よりベターな書き方があるってだけで、そのベターを押し付けているに過ぎない。

せっかくあんなつまらないチュートリアルを終えたんだから、
そういう人たちに惑わされず（いいところだけ吸い尽くして）楽しくアプリを作っていけばいい。
そのうちに技術も身についてくる。

やっとゲーム本編に突入できたのに、
楽しまないなんて損。
あのチュートリアルはゲーム本編を楽しむためのものだから。
とりあえず、キャリアの棚卸しをするのに、 プロマネ試験の午後Ⅱを解いてみるのはいいかもしれない

# 思えば遠くにきたもんだ

結婚、育児、マンション購入、世間的に評価されるなんらかの受賞、評価されるアウトプット……。

このトシ（30代）になってくると、周りの人間との差がだいぶ浮き彫りになってきました。

さてさて、真面目に生きてはいると思うんですが、どっかでなんかの表紙に詰むのか、あるいはきちんとした努力をしていていつか報われるのか、まったくそんなことは関係がなく、「善良に暮らしていれば好きな暮らしはできる」というのは幻想にすぎないのか……！？

とりあえず……選挙にはいきました。

すごい人は、もう、すごいままで、転職活動をしなくてもしれっとお声がかかってちゃっとキャリア変えてるなという感じがします。

このへん、凡人の悩みである……。

いまのところエイッと転職する勢いはないものの、「キャリアの棚卸しくらいはしておくか……」と思って、たまに職務経歴書をこねています。

# キャリアの棚卸しをしよう

https://tenshoku.mynavi.jp/knowhow/caripedia/141/

マイナビ転職さんによると、
>キャリアの棚卸しとは、社会人経験を振り返り、職務内容や実績などを整理すること

らしいです。

ちなみに、本来の棚卸しは、企業や店舗が抱える商品や製品、部品などの在庫数を調べることです。

https://www.yayoi-kk.co.jp/kaikei/oyakudachi/inventory/

# プロマネ試験の午後Ⅱ（論文）の論述を１個仕上げてみるといいかもしれない

プロジェクトマネージャー試験とは、IPAの定める情報試験の高度試験です。飛ばして受けることもできますが、基本情報、応用情報、もうちょっと細分化された高度試験……の、中の一つです。

さいきん、プロジェクトマネージャー試験を受けたのですが、午後Ⅱが……つまり論文試験が全然できませんでした。
文章をつらつら書くことだけは自信があったので、ショックでした。
練習もしてた、けどぉ！
時間、全然たりねぇ……！

（私のような）文系から国語力を取ったら……。もう句読点しか残らねぇ……。
ええん……、、、、、、、、、、、、、、、、、、。。。。。。。。。。。。。。。。

それはそれとして、このプロジェクトマネージャーの試験のために、一個、論述を仕上げてきたんですが、それがキャリアの棚卸しの役に立ったと思います。

（きっちり、書ければよかったのですが！！！）

1個、ネタを持っておくのと、勉強を両立させることができて、良さそうです。

### 「論述の対象とするプロジェクトの概要」を埋めてみる

アンケートというか、これから論述するプロジェクトについての概要を説明するための紙が配られます。

とはいえ、プロマネ試験では、本当のことを書かなくてもいいとされています。といいますのも、この試験、小学生でも受けることはできますし、「あなたの経験から述べなさい」と書かれていますがまさか小学生に述べようもございません。

私も、プロジェクトマネージャー試験を受けたはいいものの、プロジェクトマネージャーの経験自体は乏しく、仕事を割り振って後輩に任せたことがあるくらいなんですが、盛りに盛って書きました。良い感じのストーリ、良い感じのロジックをくみ上げ、1個か2個、虚実交えて出していくことになります。

もちろん、虚を交えると転職の面接では使えませんが、核となる部分はあると思います。工数、費用、稼働時間はともかく私が管理したことはないのですが、それでもなんかひねり出さないといけません。考えたこともなかったので、とても役に立ちました。

というわけで、プロジェクトマネージャー試験の午後Ⅱ、この「論述の対象とするプロジェクトの概要」を埋めてみるのはとても役に立ちました。
Backlog のデータを Yellowfin で可視化 with CData

## はじめに
プロジェクト管理ツールとして国内でよく利用されている Backlog のデータを、Yellowfin で可視化してみようと思います。

## Backlog 側の準備
#### API Key の入手
下記を参考に、Yellowfin から Backlog に対して JDBC コネクタで接続する際に必要な、API Key を入手します。API Key は、JDBC 接続文字列を作成する際に必要となります。

https://support-ja.backlog.com/hc/ja/articles/360035641754-API%E3%81%AE%E8%A8%AD%E5%AE%9A

## JDBC コネクタ
#### JDBC コネクタの入手
今回は CData の Backlog JDBC コネクタ評価版を利用します。まずは下記 URL にアクセスし、対応データソースから Backlog を選択します。

https://www.cdata.com/drivers/

その後、[ダウンロード] > [ダウンロード評価版] > [ダウンロード Windows Setup (.exe)] の順に進み、BacklogJDBCDriver.exe をダウンロードします。

BacklogJDBCDriver.exe を実行すると、デフォルトで以下にファイルが解凍されます。
`C:\Program Files\CData\CData JDBC Driver for Backlog 2024`
lib フォルダに以下のようなファイルが存在します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/647ecd8a-5eae-bb52-a4b1-b3d1b6c66465.png)

#### コネクタのインストール

ライセンスファイル cdata.jdbc.backlog.lic を zip ファイルに圧縮した後、cdata.jdbc.backlog.lic.zip をcdata.jdbc.backlog.lic.jar に名称変更します。プラグイン管理画面で .jar か .yfp ファイルしか登録できないことへの対応です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/39ca1426-c1e8-62f9-5ddf-7bef250594ca.png)

Yellowfin 画面から [管理] > [プラグイン管理] > [追加] と進み、cdata.jdbc.backlog.jar をドロップして追加した後、「さらに追加」を選択して、cdata.jdbc.backlog.lic.jar を追加します。結果、以下のように、実行ファイルとライセンスファイルの両者を合わせて登録します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/4a52e8f7-3594-496b-b50a-1a8e6d0f860d.png)

## データソース
Yellowfin からは一般 JDBC データソースを利用します。一般 JDBC データソースを利用するための接続文字列は、CData の機能を使って生成すると便利です。
cdata.jdbc.backlog.jar をダブルクリックすると、下記の画面が表示されます。こちらで接続テストをした後、接続文字列をコピーして利用すると楽ちんです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/8b9cae15-a51f-dd48-0e00-d261638bdd0c.png)

Yellowfin 画面から [管理] > [プラグイン管理] > [追加] と進み、[新規データ接続] で [データソースを選択] から [データベース] を選択します。
新規接続の設定画面から、以下を参照に新規接続を作成します。
|項目|設定値|
|---|---|
|名前|Backlog|
|データベースタイプ|一般 JDBC データソース|
|JDBC ドライバー|cdata.jdbc.Backlog.BacklogDriver(Backlog)|
|接続文字| jdbc:backlog:URL=https://xxx.backlog.com/;ApiKey=***************;|

[テスト接続] ボタンを押下し、テスト接続が成功すればひとまず大丈夫です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/eaba0de5-3c34-1213-c15c-0c88c73ea237.png)

## ビュー作成
[こちら](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294284)を参考に、ビューを作成します。
Backlog に接続すると、55 個のテーブルとビューが見えてきます (2024 年 10 月 25 日現在) 。この中から、Projects と Issues を IssueKey で連携します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/16e90d6c-6a81-b8b1-19b4-2777022828ce.png)

## レポートの作成
[こちら](https://wiki.yellowfin.co.jp/pages/viewpage.action?pageId=2294086)を参考に、レポートを作成します。
横軸に IssueTypeName、縦軸に ActualHours の集計値、棒の内訳に StatusName を配置すると、下記のような積み上げ棒グラフが作成できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2128512/a5a73da6-5355-73f1-ede8-f6df84078b8c.png)

## 最後に
Yellowfin で Backlog のデータを可視化することで、既に完了したプロジェクトや進行中のプロジェクトも含め、複数のプロジェクトをまたいだ分析が可能となります。
そのため、PMO が利用すると便利なコンテンツが作成できそうです。

では皆様、良いデータ分析を! See you then!
インターネット回線の種類

# 光回線
>光回線は、`光ファイバーケーブルを使用した高速なインターネット通信網`です。光ファイバーケーブルは、石英ガラスなどでできた透明で細かい繊維で構成されており、ナイロンなどで束ねられることで、`光信号を伝送できる光ファイバーケーブル`になります。
>
>`デジタルデータを光信号に変換し、光ファイバーケーブルを介して通信`することで、大容量のデータを高速で送受信できます。光回線は電磁波の影響を受けない特徴があり、`電話回線(ADSL回線)よりも安定した通信が可能`です。
>
>光回線は高速の通信環境や大容量データの取り扱いが必要な場合におすすめです。利用には回線の引き込み工事が必要になる場合があります。工事のスケジュール調整などは必要になりますが、光回線を導入すれば、高速かつ安定したインターネット接続を楽しめるようになります。

# ADSL回線
>ADSLは「Asymmetric Digital Subscriber Line(非対称デジタル加入者線)」の略称です。光回線の普及以前には主流のインターネット回線であり、`電話回線を用いて接続`します。既存の電話回線があれば工事が不要なため、一般家庭でも導入しやすいのが特徴です。
>
>ちなみに「非対称」とは、`送信・受信の通信速度が異なる`ことに由来します。通信速度は、通信地点から基地局までの距離で変動する性質があり、遠いほど速度が落ちます。なお、送受信ともに、現在主流である光回線のほうが、通信速度は高速かつ安定しています。
>
>ADSLはインターネットの普及に大きく貢献した通信技術であり、2000年代前半時点では従来のダイヤルアップ接続よりも高速かつ常時接続できる点が大きなメリットでした。しかし、現在では光回線やモバイル回線など、品質や機能性でより優れた回線が普及したため、利用者数は減少傾向にあります。サービス事業者も新規受付を停止している状況であり、2023～2025年までには提供の終了が告知されています。

# CATV回線
>CATV回線は、ケーブルテレビの有線回線を利用してインターネットに接続します。一般的には、ケーブルテレビや電話接続サービスとセットで利用でき、地上波放送や衛星放送などの受信とともにインターネット接続が可能です。テレビの電波が届かない、光回線が利用できない地域・建物で利用されることがあります。
>
>CATV回線に用いられる同軸ケーブルは、`光ファイバーケーブルと比べて通信速度が遅く、とくにアップロードが遅い傾向`です。`ノイズの影響を受けやすく、混雑によって通信速度が落ちやすい`など、安定度に欠けるデメリットがあります。

# モバイル回線
>モバイル回線は、`基地局の電波`を利用してデータ通信を行う回線です。携帯電話会社が提供するスマートフォンやタブレット向けの通信回線であり、4Gや5Gなどの通信規格が存在します。各携帯電話会社の`基地局から電波が届く範囲内であれば、無線でインターネットの利用が可能`です。
>
>モバイル回線の利用形態には種類があり、スマートフォン以外ではモバイルWi-Fiルーターやホームルーターなどを使って通信をします。専用の無線通信機器を使うため、自宅の回線工事をする必要はなく、機器が届いたその日に利用可能です。モバイルWi-Fiルーターは持ち運びが可能なため、外出先で手軽にインターネットを利用できるメリットがあります。
>
>モバイル回線は携帯電話会社や契約プランによって通信容量の上限が決められており、上限を超えると通信速度に制限がかかります。また、無線通信のため、建物の構造やほかの電波の影響を受けやすく、通信が不安定になる場合があります。頻繁に大容量の通信をする場合や、安定・高速な通信がしたい場合には向きません。

https://www.ntt.com/business/services/network/internet-connect/ocn-business/bocn/knowledge/archive_167.html#:~:text=1.%20%E5%85%89%E5%9B%9E%E7%B7%9A,%E5%90%91%E3%81%8D%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82
$request->input('key')は何をやっているの

Laravelでのapi実行が知りたく、api.phpから処理を追っているときに、controllerで`$request->input('hogehoge')`みたいなことを良くしていたためどういうメソッドかまとめる。

## inputメソッド
`$request->input('key')`はどうやらリクエストに含まれる入力パラメータの値を取得しているようだ。
以下の場合、limitというパラメータを探してきて、その値を$limitに入れている。
```php
$limit = $request->input('limit');
```
例えば以下のようなリクエストのURLがあった場合
```
http://XXXXXX.com/api/test-api/XXXXXX?limit=10
```
limit=10が設定されているため$limitには10が返される。
## デフォルト値
ちなみに、inputメソッドには第二引数としてデフォルト値を指定できる。
```
$limit = $request->input('limit', 0); // limitがない場合は0を返す
```
## まとめると
`$request->input('offset')`は、HTTPリクエストからパラメータの値を取得するためのメソッドだな
PPPとは

>PPP（Point-to-Point Protocol）は、`コンピューター同士が1対1の通信を行うための規約`を定めたプロトコルです。「どのような手順で」「どのようなデータ形式で」通信を行うのかなどを定めています。
インターネット標準化組織IETF（Internet Engineering Task Force）によって標準化されており、OSI参照モデルでは第2層（データリンク層）に該当するプロトコルです。`電話回線などの回線を利用した通信方式の一つ`であり、`ルーター同士の接続やダイアルアップ回線、ADSL回線を使ってインターネットに接続する際`に利用されています。
>
>光回線が主流となった現在では、イーサネット上でPPPのデータをやり取りする`PPPoE（PPP over Ethernet）`が利用されています。また、さらに高速な通信を実現するための接続方式として、近年では`IPoE（IP over Ethernet）`が利用されるようになりました。
>
>PPPやPPPoEではパケットを`カプセル化してトンネリング`された上でISP事業者に送られますが、IPoEではパケットはそのままISP事業者に送られます。PPPoEでは時間により回線混雑の影響を受けやすいデメリットがありますが、IPoEは`混雑の影響を受けにくく、通信速度も向上`します。

https://www.ntt-west.co.jp/business/glossary/words-00120.html



* ADSL回線とは

https://qiita.com/masatom86650860/items/0bf8ce0cfd753f345ccc

* PPPoE、IPoEとは

https://qiita.com/masatom86650860/items/4b5e6ca01790e4e47f20

* ルーター同士の接続
物理層では電気信号を正確に送れるようしたようにデータリンク層は違うLAN同士で通信できるように道を作るためにしたのか。それがPPPなのかな。

>PPP 接続は、2つのシステムが電話回線を通して物理的に接続したときに存在することになります。 1つのシステムを他のシステムに接続するには、PPPを使用することができます。 例えば、支社と本社の間に PPP 接続が確立されると、これらのオフィスはどちらも、`ネットワークを介してもう一方のオフィスにデータを転送できる`ようになります。
>
>PPP は、メーカーの異なるリモート・アクセス・ソフトウェア間の相互運用を可能にしています。 PPP ではまた、複数のネットワーク通信プロトコルが同じ物理通信回線を使用することもできます。

https://www.ibm.com/docs/ja/i/7.3?topic=concepts-what-is-ppp#:~:text=PPP%20%E6%8E%A5%E7%B6%9A%E3%81%AF,%E3%82%82%E3%81%A7%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

>遠隔地にあるコンピュータを一対一で接続するためのプロトコルです。さまざまな通信ハードウェアに対応できるように設計されており、`電話回線を利用するダイアルアップPPP`、`イーサネットを利用するPPPoE`などのバリエーションがあります。

https://www.sbcr.jp/product/4797396072/

使用するケーブルによって接続規格が違う
Amazon Linux 2023

# AWS Linux 3世代
AWSが独自に提供しているLinux OSが３世代あります。
1. Amazon Linux 1 (2023年 EOL)
2. Amazon Linux 2 (2025年 EOL)
3. Amazon Linux 2023 (latest)
:sun_with_face: 「Amazon Linux 3」のような単純な名称にならず良かった
:thunder_cloud_rain:「Amazon Linux 2」と「Amazon Linux 2023」がどちらが最新かな？と最初は疑問があった。

# Amazon Linux 2023
ベースとなるOSがRedHatからFedoraへ変更したため、パッケージ管理ツールもyumからdnfへ変更になりました。
しかし、yumコマンドはそのまま使えます。dnfへのポインターとして生きています。

[Package management tool][ref0]

[ref0]: https://docs.aws.amazon.com/linux/al2023/ug/package-management.html

これからパッケージ管理ツールを勉強することなら、dnfを使いましょう。

# AWS Linux 2023 と Fargate for Amazon ECS
## AWS ECS
Amazon ECSは、Dockerコンテナを管理するためのフルマネージドサービスです。
EC2起動タイプとFargate起動タイプの2種類があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/56bbcf5f-f18e-57d2-4f5e-571d3c75c28b.png)

### EC2起動タイプ
利用者が自分でサーバリソースを管理するタイプです。
サーバを作成する際に利用可能なAmazon Machine Image (AMI)として、Amazone Linux 2023を選択できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/3b4ee87a-f6d9-a186-5e94-e8be8593b657.png)

### Fargate起動タイプ
Serverlessなので、AMIを選択不要です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/42e88102-fe4b-696e-cea4-4b422cbca607.png)

以下の記事から見ると、AWS Linux 2023がサポートされていないし、今後サポートされる計画もないです。(Bottlerocketを採用する可能性が高い)

[[ECS] [request]: Support Amazon Linux 2023 for underlying hosts on Fargate][ref1]

[ref1]: https://github.com/aws/containers-roadmap/issues/2285

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/449d6b37-30ef-adec-a3c9-ae7360f1f4ae.png)


## Fargateタイプ + Amazon Linux 2023
AWS Fargateでは、Amazon Linux 2023をコンテナのベースイメージとして使用できます？
答え：できます。

### コンテナのベースイメージとは
Dockerfileに記載される「FROM ...」のことです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/cbd0c3fc-4134-c620-d63d-5ece5ce58dba.png)

基本的なファイルシステムのテンプレートで、コンテナアプリケーションが依存するOSやライブラリを含んでいます。ホストOSの依存性がないです。

### コンテナ構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3470230/2e03c3ae-ce76-2af7-fce8-7cccd650703d.png)

① AWS Fargate基盤で利用するOS
② ベースイメージが入っている。AWS Fargate基盤上稼働するコンテナに利用される。

①と②は別々のものです。
①には、Amazon Linux 2023を利用できないが、
②には、自分が作成するアプリケーション次第です。


# おまけ

Node.js Docker Imageのベースイメージが有償サポートなしのalpineであり、商用した際に社内のルールに引っ掛かったため、Amazon Linux 2023でベースイメージを作成しました。
Dockerfileの一部が以下の通りです。
```
FROM amazonlinux:2023.6.20241010.0

RUN yum update -y && \
    curl -fsSL https://rpm.nodesource.com/setup_20.x | bash && \
    yum install -y nodejs

RUN yum install shadow-utils -y \
    && groupadd -r node -g 1000 \
    && useradd -u 1000 -r -g node -m -d /opt/node -s /bin/sh -c "node user" node
```
【初投稿】フリーランスエンジニアまで頑張ります！！

始めまして！　Orangeといいます！
最近プログラミングの勉強を始めました！

そこで自分のアウトプットとか気になったこと、気まぐれで投稿したいことなど気ままにやっていこうと思います！



☆現在の僕の話
さて、【初投稿】ということなので、現在の僕の話をしていこうと思います。
現在僕は、インフラ系の運用保守業務を行っていると思っています。

なぜ「思っています」と表したかというと、新卒未経験で配属された業務で、導入研修後すぐ配属になりました。
右も左もわからないまま業務に着き、自分で資料を見つけ、なんとな～く「運用っぽいことをやっているんだよな？」というのが今の感覚です。

多分こんな感じだよなって意味の「思っています」なのです。



☆PCを買いました！
そして！最近僕はゲーミングPCを買いました！
用途として、
・仕事に使いたい
・自分の勉強に使いたい
・新しく何か始めたい
・ゲームもしたい
という感じで買っちゃいました！　だいぶ思い切りました笑

PC買ったら、割とずっとPCの前にいるので、勉強なりゲームなりを長い時間しているようになりました！
なので、かなりモチベーションにもつながっている感じがしてます！

ただ怖いのは、電気代ですね・・・。
来月どれくらいかかったのかきになるところです。



☆現在している勉強
現在はPythonと高校数学をやっています。
Pythonは、まだ基礎的なところを本を買ってやっているような感じです。
わからなけば、自分で調べるなり生成AIに解説してもらって自分のインプットにつなげてる感じです。

高校数学は、Xで見つけた東大の人が高校数学を開設資料みたいなのを見つけて、それでちょこちょこ勉強してます。
大学ではほとんど数学に触れなかったので、ひっさしぶりに数学に触れたらみごとに何も覚えてなかったです笑
なので１から学ぶ気持ちでやってます。



☆これからのこと
これからどうしていくかってことなんですけど、
まず、Pythonでポートフォリオとかアプリとか作ってみようかなと思っています。
そして、データベースとかもろもろの勉強もしていこうとも考えています。
なので、よかったらおすすめの技術書とかあれば教えていただけると飛び跳ねるくらいうれしいです！！！！！

仕事に関してですが、年始から転職します！
会社は決まっていて、開発の会社に転職します。
もともと開発がやりたくてIT系を目指したので、０から学ぶ気持ちで頑張ります！



☆目標☆
目標は「フリーランスになる」です！
厳しいのはわかってるつもりではあります。
ですが、自分の時間を使い方次第で自由に使えることにあこがれを持っているため、あまり会社にずっといるみたいな働き方は今後の人生において僕は違うなと思い、フリーランスを目指します！

１つ問題は、「継続力」ですね。
ここは僕が一番苦手なところになってくるので、習慣化していくことで「やらないこと後気持ち悪い状態」に持っていけたらいいなと思っています。

まあ、追い詰めすぎず気長に気楽に楽しんでいこうと思います！！

長々と自分語りをしましたが、皆さんエンジニアライフ楽しんでいきましょう！！
ギャラリーに Filter 関数を使ってみる

## はじめに
BizOptimars のいのうえです。
今回は Filter 関数の基本的な使い方を紹介いたします！

## 用意したもの
SharePoint Lists を 1 つ作成しました。
画像のようにデータを入れておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/188f3439-4a7a-333d-db72-e5a29f790323.png)

| 列名 | データ型 |
|:-:|:-:|
| タイトル  | テキスト  |
| ステータス  | 選択肢  |

## 選択肢列でフィルターをかける
先ほどのリストをデータソースとしたギャラリーを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/b09c068f-33c1-6682-dd50-be3b504fbcd3.png)


まず、「ステータスが **承認** のもの」という条件式を入力します。
以下のように書きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/c3cfb667-42b5-1f06-c239-713b2e50746a.png)

```
Filter(データソース名,列名.Value="承認済み")
```

ポイントとしては、選択肢型の列は列名の指定だけでなく、列名の後に ".Value" と入れる必要があります。

承認済みのものだけ表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/ce4c319f-ae5f-5445-12aa-5cc1d5931662.png)

## 選択肢列とテキスト列でフィルターをかける
次にステータスとタイトル、2 つの条件式を入力します。

Filter 関数は、カンマを入れることで複数条件にすることができます。
「ステータスが **承認済み** かつ、タイトルが **test1** のもの」にする場合は以下のような式になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/538e1333-419c-55f8-4fff-126223f18375.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/6472d3d8-60e0-3e99-d80f-6a6eaf87546f.png)

```
Filter(データソース名,列名.Value="承認済み",列名="test1")
```

## おわりに
今回は簡単な条件式にしましたが、例えば条件になる値をテキストボックスや変数で指定するなど、
様々使い方ができますので、ぜひ試していただければと思います！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1966048/be42f2f9-8386-3339-d16d-647a1a2c9518.png)
【Ruby】メソッドとは

# はじめに
こんにちは、現在アメリカの大学に行って語学を学びながらソフトウェアエンジニアになるために独学で勉強しているものです。
本日はRubyを勉強しているとよく出てくる、メソッドについて整理していきます。
というのも、現在progate→ゼロから分かるRuby→たのしいRubyと段階を追って勉強しているのですが、メソッドを深堀したり自分の中での定義を確立する機会がありませんでした
改めて時間をとってメソッドについてまとめていきたいと思います。

# メソッド
メソッドは、オブジェクトに対して行える処理や動作を定義するものです。
Rubyではメソッドはオブジェクトの動作を記述し、オブジェクトに対して呼び出すことができます。
Rubyのメソッドは、基本的に「メソッド名と引数を受け取って、特定の処理を行い、結果を返すもの」として機能します。
また、メソッドは大きく3つの種類に分類されます。

* 関数メソッド
* インスタンスメソッド
* クラスメソッド

### 関数メソッド
Rubyでは、特定のクラスに属さないメソッドを定義することもできます。
これを関数メソッドと呼び、トップレベルで定義されたメソッドとして機能します。
つまり、オブジェクトやクラスに属するのではなく、どこからでも呼び出すことができるようなメソッドです。
```ruby:method.rb
# メソッドの定義
def greet(name)
  "Hello, #{name}!"
end

# メソッドの呼び出し
puts greet("Alice")  # => "Hello, Alice!"
```
上記の例では、`greet`というメソッドが引数`name`を受け取り、それを使って挨拶文を生成して返しています。
ちなみに`Alice`を実引数、`greet(name)`の`name`を仮引数といいます。
これらの説明が聞きたい方はこちらの記事をどうぞ

https://qiita.com/Taira0222/items/3aca35ddbbf7c76cb6ae

### インスタンスメソッド
```ruby:method2.rb
class Animal
  def initialize(name)
    @name = name  # インスタンス変数に名前を保存
  end
  
  def speak
    puts "#{@name} is making a sound!"
  end
end

# Animalクラスのインスタンスを生成
dog = Animal.new("Dog")
cat = Animal.new("Cat")

# インスタンスメソッドを呼び出す
dog.speak  # => Dog is making a sound!
cat.speak  # => Cat is making a sound!
```
`class`内のメソッドをインスタンスメソッドといい、下記でいうと`Animal`クラス内に定義された`initialize`や`speak`メソッドを指し、単なるメソッドと呼び出しの方法が異なります。
例えば、`dog.speak`という呼び出しで、`dog`インスタンスの`@name`変数を利用して「Dog is making a sound!」というメッセージが表示されます。
同様に、`cat.speak`で「Cat is making a sound!」となります。

ここで上記コードの理解度を深めるために補足説明ですが、`Animal`クラスでは、`initialize`という特殊なメソッドが定義されています。
`initialize`メソッドはクラスからインスタンスが生成されたときに自動的に呼び出されるメソッドで、インスタンスごとに固有のデータをセットするために使われます。
この場合、`@name`というインスタンス変数に`Dog`や`Cat`といった名前を保存しています。
このインスタンス変数`@name`は、そのインスタンスごとに異なる値を持つことができるため、異なる動作（`speak`メソッドで名前を使って出力される）をインスタンスごとに行うことが可能になります。

### クラスメソッド
続いて、2つめのクラスメソッドについて説明していきます
```ruby:class1.rb
class Animal
  def self.general_info
    puts "Animals are living creatures."
  end
end

# クラスメソッドを呼び出す
Animal.general_info  # => Animals are living creatures.
```
クラスメソッドはselfを使って定義され、インスタンスを生成する必要がありません。このメソッドはクラスそのものに対して呼び出されます。
インスタンスメソッドは`インスタンス.メソッド`でしたが、クラスメソッドの場合は`クラス.メソッド`であることとメソッドを定義する際に`self`を忘れずにつけましょう。

### 補足
どうやら、クラスメソッドの場合は`self.general_info`と記載するのではなく以下のようにするのが一般的なようです
```ruby:compliment.rb
class Animal
  class << self
    def general_info
      puts "Animals are living creatures."
    end
    
    def common_traits
      puts "Animals need water and food to survive."
    end
  end
end
```
このように、`class << self`のブロック内にまとめると、複数のクラスメソッドが並ぶことを示しやすくなるため、読み手にとっても「この部分はクラスメソッドの定義である」と直感的に理解しやすくなります。
また、クラスメソッドが変更しやすかったり(メンテナンス性向上),可読性の観点からこの方法が好まれるようです。

# まとめ
この記事では、Rubyのメソッドについて基本的な知識を整理しました。
メソッドはオブジェクトの動作を定義する重要な要素であり、Rubyでは以下の3つに分類されます。

* 関数メソッド
クラスに属さず、トップレベルで定義されるメソッド。
* インスタンスメソッド
クラス内で定義され、特定のインスタンスに対して動作するメソッド。
* クラスメソッド
クラス自体に対して定義され、インスタンスを生成せずに利用できるメソッド。
「冷たい」アーティファクト: 青色レーザースキャナーの顕微鏡探査の旅

スキャン技術には常に不思議な魅力がありますが、特に「青色レーザー」が登場するときはその技術が顕著です。ブルーレーザースキャナーは普通のスキャン装置ではありません。これがスーパーマーケットのバーコードをスキャンするための「アップグレード版」だと思うなら、それは間違いです。これは細部を捉えるための強力なツールであり、肉眼では見えない細部まで含めて、物体の表面構造を確認するのに役立ちます。では、青色レーザー スキャナーが特別な理由は何でしょうか?

なぜ「青」を選んだのか？
まずは色の秘密を理解しましょう。レーザーの色は 1 つだけではなく、レーザーの色が異なれば波長も異なります。青色レーザーの波長は赤色レーザーや緑色レーザーよりもはるかに短く、約 450 ナノメートルです。波長が短いほど精度が高く、物体の細部をより正確に捉えることができます。したがって、青色レーザーは、複雑な形状や緻密なテクスチャを持つ表面、特に暗い素材、滑らかな素材、さらには反射性の素材をスキャンする場合に特に優れた性能を発揮します。

スキャンの精度と速度に関して双方にとって有利な状況
ブルーレーザースキャナーの最大の利点の1つは、「高精度」と「高速キャプチャ」の組み合わせです。部品上の複雑なパターンと小さな溝が、あたかもその物体が透明な「データ コート」を着ているかのように、青色レーザーではっきりと「見える」ことを想像してください。さらに、青色レーザー スキャナはスキャンが速く、多くのモデルは短時間で数百万のデータ ポイントをキャプチャできます。これは、スキャン精度が高いだけでなく、スキャン効率も優れていることを意味し、大量のデータ収集が必要な産業シナリオに適しています。

幅広い用途、ほぼ万能
航空宇宙から自動車産業、芸術作品のデジタル保存に至るまで、青色レーザー スキャナーはさまざまな産業に導入されています。たとえば、自動車製造では、青色レーザー スキャナーを使用して自動車部品の寸法精度を検出し、各部品がミリメートル レベルで正確であることを確認し、組み立て中のエラーを回避します。文化遺物保護の分野では、文化遺物に触れることなく彫刻や建築の詳細をキャプチャし、デジタルアーカイブを生成できます。

ブルーレーザーの「高い冷たさ」には小さな欠点もあります
もちろん、青色レーザー スキャナーは完璧ではありません。波長が短く精度が高いため、装置が比較的高価で敷居が高い。さらに、周囲光の影響を非常に受けやすいため、スキャンデータの精度を確保するには、通常、スキャン時に光環境を制御する必要があります。

ブルーレーザースキャナー：テクノロジーとアートの二重体験
つまり、ブルー レーザー スキャナーは、ハイテクと精密な芸術を組み合わせた魔法のデバイスであり、細部のキャプチャ、効率の向上、非接触スキャンの実現に革命的な進歩をもたらしました。それは、ミクロの視点から世界の裏側を明らかにする「精密探偵」のようなものです。高価で操作には多少の工夫が必要ですが、その性能は極めて高精度が要求される分野においてはまさに「高冷品」の名にふさわしいものです！

したがって、高精度で複雑な表面スキャンの必要性でいつか壁にぶつかった場合は、青色レーザー スキャナーを試してみるとよいでしょう。これは、あなたが必要とする「完璧な魔法のツール」になるかもしれません。

https://www.revopoint3d.com/collections/3d-scanners
Next.js 15 に shadcn/ui をinstallするときのエラー解決

# はじめに
通常通りにinstallしようとすると依存関係のエラーが出力されますが、
出力してくれているオプションつければinstallできます:bird:

# 問題
こんな感じでNext15にshadcnをinstallしようとすると依存関係のエラーが出力されます。
```
npx create-next-app@latest my-app
cd my-app
npx shadcn@latest init
```
```
Something went wrong. Please check the error below for more details.
If the problem persists, please open an issue on GitHub.

Command failed with exit code 1: npm install tailwindcss-animate class-variance-authority lucide-react @radix-ui/react-icons clsx tailwind-merge
npm ERR! code ERESOLVE
npm ERR! ERESOLVE unable to resolve dependency tree
npm ERR! 
npm ERR! While resolving: my-app@0.1.0
npm ERR! Found: react@19.0.0-rc-69d4b800-20241021
npm ERR! node_modules/react
npm ERR!   react@"19.0.0-rc-69d4b800-20241021" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! peer react@"^16.x || ^17.x || ^18.x" from @radix-ui/react-icons@1.3.0
npm ERR! node_modules/@radix-ui/react-icons
npm ERR!   @radix-ui/react-icons@"*" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
```

# 解決方法
shadcn のinstallコマンドに --legacy-peer-deps をつけるだけでOK！
```
npx create-next-app@latest my-app
cd my-app
npx --legacy-peer-deps shadcn@latest init
```
# おわりに
少々面倒ですが、コンポーネントのinstall時にも必要なのでご注意を！

```
npx --legacy-peer-deps shadcn@latest add button
```

# 追記
公式がFix方法を載せていたので置いておきます
https://ui.shadcn.com/docs/react-19
# 参考
https://github.com/shadcn-ui/ui/discussions/3988
三項演算子の使い方について（初心者向け）

# はじめに
この記事は三項演算子の使い方について学習した際の備忘録です

修正点および加筆が必要な場合は都度更新します

## 三項演算子とは？
三項演算子は、条件式を使って値を選択するための演算子で、?（疑問符）と :（コロン）を使って表現します。一般的な構文は以下の通りです。
```js
条件式 ? 真の場合の値 : 偽の場合の値
```

## 基本的な使い方

例えば、数値が10以上かどうかを判定し、その結果に応じてメッセージを返す例の場合
```js
let number = 15;
let message = number >= 10 ? "10以上です" : "10未満です";
console.log(message);  // 出力: 10以上です
```

### ネストされた三項演算子

三項演算子は、入れ子にすることも可能です。ただし、可読性が低くなるため、使いすぎには注意が必要です。
```js
let score = 85;
let grade = score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : "D";
console.log(grade);  // 出力: B
```

### 関数内での利用
三項演算子は関数内でも使用できます。
```
function checkAge($age) {
    return $age >= 18 ? "成人です" : "未成年です";
}

echo checkAge(20);  // 出力: 成人です
echo checkAge(15);  // 出力: 未成年です
```

## 注意点
### 可読性を考慮
複雑な条件式やネストした三項演算子を多用すると、コードが読みづらくなる場合もあります。そのため、必要に応じて通常の if 文を使い分けることが推奨されます。

### 型に注意
三項演算子は、条件式が真か偽かで異なる値を返すため、返される値の型に注意が必要です。異なる型の値を返すと、予期しない動作をする可能性があります。

## まとめ
三項演算子は、条件に基づいて簡潔に値を選択するための便利なツールです。基本的な使い方をマスターすると、コードをよりシンプルに保つことができます
pythonのmysqlclientで「（2026, 'TLS/SSL error: SSL is required, but the server does not support it'）」エラーが出る

pythonのmysqlclientを使用したmysql接続で、「（2026, 'TLS/SSL error: SSL is required, but the server does not support it'）」というエラーが出て、mysqlに接続できなくなってしまった際の対処メモ。


パソコンを交換し、新に開発環境を構築したところ、下記のようなエラー出てしまいpythonからmysqlclientを使用したmysql接続ができなくなってしまった。
```
MySQLdb.OperationalError: (2026, 'TLS/SSL error: SSL is required, but the server does not support it')
```

エラー内容からして、恐らく原因は何らかの理由でSSL接続が必須となってしまっている模様。
現在インストール済みのmysqlclientのバージョンを「pip list」で確認。
```
mysqlclient 2.2.5
```

現在の「2.2.5」から「2.1.1」へバージョンをダウングレード。
```
pip install mysqlclient==2.1.1
```

以上の対応で、いったんエラーは消え、接続ができるようになった。
Railsで`before_filter`が`before_action`に変更された理由と対処法



## はじめに

Rails 5以降で、`before_filter`が廃止され、`before_action`に変更されました。この変更により、古いコードをそのまま使おうとするとエラーが発生します。この記事では、この変更の理由と簡単な対処法を紹介します。

## 変更の理由

- **一貫性**: 他のフィルタ（`after_action`や`around_action`）と命名を統一するために変更されました。
- **直感的な名前**: `before_action`という名前の方が、アクションの前に実行するという意味が明確です。

## 対処法

`before_filter`を使用している場合、`before_action`に置き換えるだけです。

### 変更例

**変更前**:
```ruby
before_filter :authenticate_user
```

**変更後**:
```ruby
before_action :authenticate_user
```

このように、`before_filter`をすべて`before_action`に書き換えてください。

### 一括置換

複数のファイルで使用している場合、以下のコマンドで一括置換ができます。

```bash
grep -rl 'before_filter' app/ | xargs sed -i '' 's/before_filter/before_action/g'
```

## まとめ

`before_filter`はRails 5以降で廃止されましたので、`before_action`に変更することでエラーを解消できます。これで、Railsのアップデートも安心して進められます。
ロジスティクスにおける生成AIのトップユースケース

[サプライチェーンとロジスティクス・マネジメント](https://www.dataiku.com/solutions/supply-chain-logistics/?_gl=1*l6vl9l*_gcl_aw*R0NMLjE3Mjk0NzYzOTQuQ2p3S0NBancxTks0QmhBd0Vpd0FWVUhQVUltandBdVlPY2xfQXpZYnU4Zk45Rzg3aG40ZEJ3UXU3WGRfY3pnLU40RDl6SXYtRlFkajdSb0MzcDRRQXZEX0J3RQ..*_gcl_au*MTg0NjY1Mjg0Ny4xNzIyMzI4NDQ5*_ga*MjE4NDI2ODg1LjE3MjIzMjg0NDk.*_ga_B3YXRYMY48*MTcyOTgyMjY2Ni4yMjQuMC4xNzI5ODIyNjc0LjUyLjAuMA..)は、複雑さと課題に満ちている。複雑な輸送会社との関係の管理から、グローバルな輸出入規制の管理まで、この業界は課題に満ちている。これらのハードルは、異なる地域間のダイナミックでしばしば不透明な要件と相まって、企業は不測の事態に備えた計画を採用せざるを得ない。

どの業界も、今ある制約や義務の中で最善の決断を下し、ファースト・マイルからラスト・マイルまでの配送を改善するあらゆる機会を捉えようとしている。データオントロジーやルート最適化のようなトピックは、ロジスティクスで一般的な構造化データを使用して意思決定に情報を提供することを目指しているが、最近では生成AI（GenAI）への注目が高まっている。

顧客が生成AIをロジスティクスの課題に利用する機会を見出している3つの主要分野を掘り下げてみよう：

## 1. 検索支援型生成（RAG）によるローディングプランの最適化

あなたのローディングプランは最適化されているだろうか？多くはそうではない。[MIT Sloan Management Review](https://mitsloan.mit.edu/ideas-made-to-matter/how-artificial-intelligence-transforming-logistics)によると、「米国のトラックは平均して約30％が空車であり、時間と燃料を浪費し、不必要な二酸化炭素排出につながっている」。キャパシティの最適化は、すべての組織にとって重要な目標だが、そのためには、ソルバーやアルゴリズム以上のものが必要だ。コーディネーター、プランナー、ディスパッチャーに分かりやすいアドバイスを提供する必要がある。

意思決定者の意思決定をサポートすることが重要となる。生成AIは、最適化とAIを理解しやすくし、これを行うための素晴らしい方法を提供する。[RAGモデル](https://blog.dataiku.com/retrieval-augmented-generation-in-plain-english)は、複雑なものを単純化し、ローディングプランとルートを最適化できるように、洞察と推奨を表面化するアクセス可能な方法を作成する。これは行動を起こし、価値を生み出すことにつながる。

## 2. 輸送回廊における路面リスク

どの輸送回廊が最大のリスクをもたらすか把握しているだろうか？また、不測の事態に備えた計画を立てているだろうか？

[ハリケーン・ヘリーン](https://www.transflo.com/blog/the-impact-of-hurricane-helene-on-transportation-and-the-supply-chain)は、予兆があったにもかかわらず、本質的に複雑で相互依存的なサプライチェーンは、依然としてもろく、混乱しやすいことを最近明らかにした。こうした混乱は、地域、製品ライン、サプライヤー、配送センター、そしてそれ以外によっても異なる。地政学的な変動要因やミクロ・マクロ経済的なストレス要因のすべてが、刻々と変化する不確実性の環境を助長している。この複雑性を管理し、輸送や配送のリスクを特定するために、インターネット、年次報告書、ニュース記事を精査するために生成AIを使用しているメーカーもある。

ある大手物流会社は、サプライチェーン・チームがより強固な緊急時対応計画を作成できるように、このテクノロジーを使ってリスクのあるルートや輸送経路に素早くフラグを立てている。 また、計画チームはこのリスク評価情報を使って、顧客サービスと期待をよりよく管理し、最終顧客に混乱を迅速に伝える。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1196881/130504b5-303e-719e-e406-d65a7a62af35.png)


## 3. ウェアハウスとロジスティクスにおけるデータ品質の向上

あなたのデータハウスは整ってるだろうか？おそらくそうではないと推察される。特にロジスティクスと倉庫管理においては。

多くのロジスティクス業務では、倉庫や輸送会社のログのような乱雑で構造化されていないデータソースを扱っています。従来のシステムは、その自由形式の性質のために、このデータを効果的に活用するのに苦労している。しかし、生成AIは無秩序なテキストを構造化された利用可能な情報に変えることができる。

例えば、ある[製薬会社は生成AIを使ってメンテナンスログから特定の故障情報を抽出](https://www.ey.com/en_us/coo/how-generative-ai-in-supply-chain-can-drive-value)している。これにより、同社は機器の修理に必要な部品や工具を特定し、初回修理率を向上させ、倉庫機械の修理時間を短縮することができる。その利点は明確である。業務効率の向上とダウンタイムの削減であり、全てはデータ品質の向上のおかげである。

## ロジスティクスとサプライチェーンにおける生成AIによる効率化の推進

サプライチェーンオペレーションとロジスティクスの課題が進化し続ける中、生成AIはオペレーションを最適化し、リスクを表面化し、[データ品質を向上](https://www.dataiku.com/ja/%e8%a3%bd%e5%93%81/%e3%81%ae%e4%b8%bb%e8%a6%81%e6%a9%9f%e8%83%bd/%e3%83%87%e3%83%bc%e3%82%bf%e5%93%81%e8%b3%aa/)させる強力なツールとして台頭している。トラックの空車率の削減、危険な輸送経路の特定、非構造化データの実用的な洞察への変換など、生成AIはサプライチェーン全体の効率性、回復力、価値を高めるソリューションを提供します。ロジスティクスの未来はここにあり、それはAIによって支えられている。

原文: [Top Generative AI Use Cases in Logistics](https://blog.dataiku.com/top-generative-ai-use-cases-in-logistics)