OmniAICreator/Qiita-1.07M huggingface dataset:
ファイルの検索（連載第3回/25回）

# はじめに
Linuxでは多くのコマンドを使ってファイルを検索することができます。ここでは、最も一般的な `find`、`grep`、`locate` の使い方を紹介します。

# コマンド説明
#### `find` - ファイルとディレクトリの検索
`find` コマンドは、指定されたディレクトリ以下にあるファイルやディレクトリを検索するための強力なツールです。

**主なオプション**
`-name` : 名前に基づいて検索
`-type` : 検索対象のタイプ（f はファイル、d はディレクトリ）
`-size` : ファイルサイズに基づいて検索

```powershell
# /path/to/search ディレクトリ以下のファイルを検索します。
find /path/to/search -name "filename"
# /home/user ディレクトリ以下の .txt 拡張子を持つ全てのファイルを検索します。
find /home/user -name "*.txt"
```

#### `grep` - テキスト検索
`grep` コマンドは、ファイルの内容から特定のパターンを検索するために使用されます。

**主なオプション**
`-r` : ディレクトリ内のファイルを再帰的に検索
`-i` : 大文字と小文字を区別せずに検索
`-n` : 一致した行番号を表示

```powershell
# /path/to/file ディレクトリで "search_pattern" というパターンを検索します。
grep "search_pattern" /path/to/file
# /home/user/projects ディレクトリ以下の全てのファイル内で "TODO" というパターンを検索します。
grep -r "TODO" /home/user/projects
```

#### `locate` - 高速ファイル検索
`locate` コマンドは、事前に作成されたデータベースを利用して、高速にファイルを検索します。初めに updatedb コマンドを実行してデータベースを更新する必要があります。

**主なオプション**
`-i` : 大文字と小文字を区別せずに検索
`-r` : 正規表現を使用して検索

```powershell
# システム上の全ての .pdf ファイルを検索します。
locate "*.pdf"
```
# おわりに
これらのコマンドを組み合わせることで、Linux上で効率的にファイルを検索することができます。
目的としているファイルを探すのに手間取ってしまう時は一度利用したコマンドは再利用できるようメモしておくと便利です。

次の記事では、パーミッションと所有権の管理について説明します。

https://qiita.com/yu1016/items/99789526531e8c12fc98

一覧

https://qiita.com/advent-calendar/2024/pig
autoppt.com：簡単に魅力的なプレゼン資料を作成


はじめに
プレゼン資料の作成は、手間がかかる作業です。特にデザインや構成を考えるのは骨が折れます。そんな悩みを解消するのが autoppt.com。このツールは、AIでプロ仕様のスライドを瞬時に生成します。この記事では、その使い方と活用法を紹介します。

autoppt.comとは
autoppt.com は、以下の特徴を持つオンラインツールです：
![Autoppt product home page.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3948159/56166607-4b41-0baf-2660-edf10e78fd18.png)



AIによる自動生成：入力内容をもとに、すぐにスライドを作ります。
多彩なテンプレート：ビジネスや教育など、あらゆる場面で役立ちます。
直感的な操作：初心者でも簡単に使えます。
時間短縮：デザイン調整の手間を省きます。
利用手順
サイトにアクセス
autoppt.com でアカウントを作成し、ログインします。

プロジェクトを作成
「新しいプロジェクト」をクリック。テーマや目的を入力します。

<a href="https://autoppt.com/">AIがスライド生成</a>
AIが自動でスライドを作ります。後から編集も可能です。

内容を調整
プレビューを確認し、必要ならテキストや画像を変更します。

ダウンロード＆共有
完成した資料をダウンロード。チームと共有できます。

autoppt.comを使う理由
スピード：短時間で資料を仕上げられます。
高品質：デザインに不安があっても問題ありません。
柔軟性：テンプレートを自由にアレンジ可能です。
結論
autoppt.comは、プレゼン資料を効率よく作成できる画期的なツールです。時間を節約しながら、プロフェッショナルな仕上がりを実現します。忙しい日々の強い味方になるでしょう。ぜひ一度試してみてください！

公式サイト：https://autoppt.com/

フィードバックを歓迎します！
この記事が役立ったら、「いいね」やコメントをお願いします。autoppt.comの活用例もぜひ共有してください！
PythonでMarkdownファイルをWordドキュメントに変換する方法

コンテンツ制作者は、自身の作品を異なる形式で多様な読者に共有する必要があることがよくあります。Markdownは、軽量で簡潔かつ読みやすい記法であるため、文書やブログ記事の執筆に広く使用されています。しかし、複雑な文書を作成する際には、Markdownの機能では十分でない場合があります。一方で、Wordは豊富なレイアウトオプションとプロフェッショナルな外観を提供するため、**Markdown形式の記事をWordドキュメントに変換する**ことで、より複雑な文書を作成しつつ、内容の一貫性と美しさを保つことが可能になります。

Pythonを使用してこの変換プロセスを実現すれば、大量の文書を自動的に処理できるため、効率が大幅に向上します。本記事では、**Pythonを使ってMarkdownファイルをWordドキュメントに変換する方法**を紹介します。

この方法では、[Spire.Doc for Python](https://jp.e-iceblue.com/introduce/spire-doc-for-python.html)を使用します。PyPIから以下のコマンドでインストールしてください：`pip install spire.doc`。

[無料ライセンスを申請](https://www.e-iceblue.com/TemLicense.html)

## PythonでMarkdownファイルをWordドキュメントに変換する手順

Spire.Doc for Pythonを使用すると、`Document.LoadFromFile(str: fileName, FileFormat.Markdown)`メソッドを用いてMarkdownファイルを直接読み込むことができます。また、`LoadFromStream`メソッドを使用してバイトストリームからも読み込むことが可能です。その後、`Document.SaveToFile(str: fileName, FileFormat.Docx)`メソッドを使ってMarkdownファイルをWordドキュメントに変換して保存するか、`SaveToStream`メソッドを用いてバイトストリームに変換することができます。

### 操作手順：
1. 必要なモジュールをインポートします。
2. `Document`オブジェクトを作成します。
3. `LoadFromFile`または`LoadFromStream`メソッドを使って、ファイルまたはストリームからMarkdownファイルを読み込みます。
4. `SaveToFile`または`SaveToStream`メソッドを使用して、MarkdownファイルをWordドキュメントに変換し、ファイルまたはストリームに保存します。
5. リソースを解放します。

### **コード例**

以下はMarkdownファイルをWordドキュメントに変換する基本的なコード例です：
```python
from spire.doc import Document, FileFormat, IParagraphStyle, Stream

# ドキュメントインスタンスを作成
doc = Document()

# Markdownファイルを読み込む
# ファイルから読み込む
doc.LoadFromFile("G:/Documents/Sample6.md", FileFormat.Markdown)
# バイトストリームから読み込む
# doc.LoadFromStream(Stream: stream, FileFormat.Markdown)

# MarkdownファイルをWord文書に変換して保存
doc.SaveToFile("output/MarkdownToWord.docx", FileFormat.Docx)

# バイトストリームに変換して保存
# stream = Stream()
# doc.SaveToStream(stream, FileFormat.Docx)
# wordBytes = stream.ToArray()

# リソースを解放
doc.Dispose()
```

### **変換前のMarkdownファイル**
![PythonでMarkdownをWordに変換する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/b1b30c18-22ec-9b40-4005-da82ed57120d.png)


### **変換後のWordドキュメント**
![PythonでMarkdownをWordに変換した結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/28817e5d-2f1a-6ff0-dc9e-2b957ba2b98b.png)


本記事では、Pythonを使用してMarkdownファイルをWordドキュメントに変換する方法を紹介しました。このプロセスを活用することで、MarkdownのシンプルさとWordの高度なレイアウト機能の両方を活かした効率的な文書作成が可能になります。
railsのターミナルのコマンドでDBに一気にデータを追加する方法

# はじめに

この記事は、株式会社スピードリンクジャパン Advent Calendar 2024 の1日目の記事です。
今回は、Railsアプリを開発していると、「既にDBにデータがあるけど、追加で複数のデータを一気に登録したい」という状況がよくありました。この記事では、Railsコンソールを使って、簡単かつ効率的にデータを一括追加する方法を解説します。

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

# 1. まとめてデータを登録する方法
まず例として、Userモデルがあるとします。現在、データベースには以下のようにuser_id: 1のユーザーだけが登録されています。
| ID  | Name   | Email              | Age |
| --- | ------ | ------------------ | --- |
| 1   | user1  | user1@example.com  | 25  |

ここにid: 2からid: 10のユーザー情報を一気に追加したい場合を考えます。以下の方法を使えば、この操作を数分で完了できます。

### 手順
1. Railsコンソールを起動
    ターミナルで以下のコマンドを実行してRailsコンソールを起動します
    ```
    bin/rails console
    ```
2. データを一括作成
    以下のコードをRailsコンソールで実行します
    ```
    (2..10).each do |i|
      User.create!(
        id: id,
        name: "User#{i}",
        email: "user#{i}@example.com",
        age: 20 + i
      )
    end
    ```


# 2. データが正しく登録されたか確認する方法
1. レコード数を確認
    以下を実行して、合計10人分のデータがあることを確認します
    ```
    User.count
    #=> 10
    ```
2. 追加したデータの内容を確認
    次に、id: 2からid: 10のデータを確認します
    
    ```
    User.where(id: 2..10).each do |user|
      puts "ID: #{user.id}, Name: #{user.name}, Email: #{user.email}, Age: #{user.age}"
    end
    ```
出力結果（例）
```
ID: 2, Name: User2, Email: user2@example.com, Age: 22
ID: 3, Name: User3, Email: user3@example.com, Age: 23
ID: 4, Name: User4, Email: user4@example.com, Age: 24
...
[MySQL] マスターじゃないユーザで他ユーザのPASSWORD変更するための最小権限

本記事は **『[Medley（メドレー） Advent Calendar 2024](https://qiita.com/advent-calendar/2024/medley)』** の **11日目** の記事です🎄

# はじめに

株式会社メドレーの森川です。
普段はインフラ・SRE関連のタスクをメインに業務をしております 🛠️

マスターじゃないMySQLユーザで他のユーザのパスワードを変更させようとしたことがありました。
その際に権限設定で学びがあったので備忘録として記します。

**※ MySQLのバージョンは 8系(8.0.34) を想定した内容となっています**

# 前提

以下のようなユーザが作成済みであるとします。

ユーザ名|役割
---|---
root|マスターユーザ
my_user|今回の軸となる「他ユーザのパスワード変更」を実行するユーザ
app_user|（なんでもいいが想定として）アプリケーションで使用するためのユーザ

`my_user`の現在の権限は以下のようになっているとします。
（`my_user`が CREATE USER されたばかりの状態）

```sql
-- show grants for 'my_user'@'%';
-- 実行結果

GRANT USAGE ON *.* TO `my_user`@`%`
```

# 目的

 **「`my_user`を使用して`app_user`のパスワードを変更する」** とします。

# 必要な権限

`my_user`に以下のように権限を与えることで、他のユーザのパスワードを変更することが可能となりました。

```sql
GRANT UPDATE ON mysql.* TO 'my_user'@'%';
```

```sql
-- SHOW GRANTS FOR 'my_user'@'%';
-- 実行結果

GRANT USAGE ON *.* TO `my_user`@`%`
GRANT UPDATE ON `mysql`.* TO `my_user`@`%`

-- SET PASSWORD FOR 'app_user'@'%' = 'XXXXXXXXXXXX';
-- 実行結果

Query 1 OK: 0 rows affected
```

上記が最小権限です。

SELECT権限もあるほうが確認作業時に都合が良かったので、SELECT権限を追加した設定としました。

```sql
GRANT SELECT,UPDATE ON mysql.* TO 'my_user'@'%';
```

```sql
-- SHOW GRANTS FOR 'my_user'@'%';
-- 実行結果

GRANT USAGE ON *.* TO `my_user`@`%`
GRANT SELECT, UPDATE ON `mysql`.* TO `my_user`@`%`
```

`SELECT`, `UPDATE` の有無によるパスワード確認・変更の実行可否については以下の表の通りとなりました。

![kengen_matome.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/204349/8736beee-aadf-b975-e15e-bf2ca060a105.png)


# ダメだった権限設定方法

検証中に以下のような権限の設定も試しましたが、どれも目的は達成できませんでした。

```sql
-- alter user 権限を付与してみた、がダメ
GRANT ALTER USER ON *.* TO 'my_user'@'%';

-- DB・テーブルの指定をなくしてみた、がダメ
GRANT ALTER USER TO 'my_user'@'%';

-- userテーブルに限定させようとした、がダメ
GRANT UPDATE ON mysql.user TO 'my_user'@'%';
```

# さいごに

マスターじゃないMySQLユーザで他のユーザのパスワードを変更する場合の最小権限についてまとめました。どなたかの参考になれば幸いです！
また、より適した権限設定などありましたら教えていただけると嬉しいですmm

明日 12/12(木) は @Kirika さんによる弊社主催のイベントについての記事とのことです！お楽しみに✨

# We’re hiring!

メドレーでは各種エンジニアを絶賛募集中です！
カジュアル面談いつでもWelcomeですので、どうぞお気軽にお問い合わせください⛄️

https://www.medley.jp/jobs/
Enumerableモジュール

# モジュールをincludeするとそのメソッドを使うことができる
```rb
irb(main):001> Array.include?(Enumerable)
=> true
irb(main):002> Hash.include?(Enumerable)
=> true
irb(main):003> Range.include?(Enumerable)
=> true

irb(main):006> Array.method_defined?('each')
=> true
irb(main):007> Hash.method_defined?('each')
=> true

irb(main):009> Array.method_defined?('each')
=> true
```
>Enumerbleモジュールをincludeして、モジュールに定義されたメソッドを使えるようにする条件はたった一つだけです。それはinclude先のクラスでeachメソッドが実装されていることです。

> このモジュールに定義された５０を超えるメソッドが一気に手に入るわけです。

```rb
irb(main):010> [1, 2, 3].map{ |n| n * 10}
=> [10, 20, 30]
irb(main):011> {a: 1, b:2, c:3}.map{ |k,v| [k,v *10]}
=> [[:a, 10], [:b, 20], [:c, 30]]

irb(main):013>
irb(main):014> (1..3).map{|n| n*10}
=> [10, 20, 30]
irb(main):015> [1,2,3].count
=> 3
irb(main):016> {a: 1, b:2, c:3}.count
=> 3
irb(main):017> (1..3).count
=> 3
```
https://gihyo.jp/book/2017/978-4-7741-9397-7

>クラス・モジュールの継承リスト: BasicObject>Kernel > Object > Enumerable > Array 

https://docs.ruby-lang.org/ja/latest/class/Array.html#:~:text=%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%BB%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%AE,Array

# Enumerableモジュールに使用可能メソッドを確認
```rb
irb(main):022> Enumerable.method_defined?("map")
=> true
```
https://docs.ruby-lang.org/ja/latest/method/Module/i/method_defined=3f.html

# 感想
モジュールやクラスのことを知ることできたから
Rubyリファレンスマニュアルが読みやすい
【PHP】スーパーグローバル変数$_FILES

# スーパーグローバル変数$_FILES

入力フォームでファイルを添付する機能があるかと思います。
このファイル添付時に使用する変数の **$_FILES** の解説をします。

## $_FILESとは
$_FILESとは、PHPの定義済み変数のひとつで、POSTメソッドでアップロードしたファイルの情報を格納した二次元配列となっている。

## 使い方
$_FILESは、二次元配列になっている。
1つ目のキーは、入力フォームのファイル送信欄の「name」属性値。
2つ目のキーは、**name**、**type**、**size**、**tmp_name**、**error**のいづれかである。
例えば、ファイル送信欄の「name」属性値が「systemFile」であれば、下記となる。

```php:二次元配列
// ファイルの名前
$_FILES['systemFile']['name']
// ファイルのMIME型（MIMEタイプとはファイルの種類の情報を表すもので「png」「jpeg」等）
$_FILES['systemFile']['type']
// ファイルのサイズ（バイト単位）
$_FILES['systemFile']['size']
// テンポラリファイル（一時的に保存されるファイル）
$_FILES['systemFile']['tmp_name']
// ファイルアップロードに関するエラーコード
$_FILES['systemFile']['error']
```
ファイルアップロードに関するエラーコード
+ 0 :エラーなし。ファイルアップロード成功。
+ 1 :ファイルサイズが「php.ini」の「upload_max_filesize」の値を超えている。
+ 2 :ファイルサイズが送信フォームで指定した「MAX_FILE_SIZE」の値を超えている。
+ 3 :一部しかアップロードされなかった。
+ 4 :アップロードされなかった。
+ 6 :テンポラリフォルダがない。
+ 7 :ディスクへの書き込みに失敗。
+ 8 :PHP拡張モジュールがファイルアップロードを中止。



HTMLの`<form>`タグで「**method属性をPOST**」、「**enctype属性をmultipart/form-data**」にしなければならない。

## サンプル
```php:遷移前
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>$_FILESサンプル</title>
</head>
<body>
    <h1>画像のアップロード前</h1>
    <p>下記画像アップロード</p>
    <img src="https://1.bp.blogspot.com/-hk-wB0PZBjo/XyZ_RMcHCyI/AAAAAAABaZ4/iEm-0O-3lZYFXHypV3vxNoD83GDt8OPKQCNcBGAsYHQ/s1600/computer_shigotoscreen_back_man.png" width="200" height="200" >
    <form method="post" action="bbb.php" enctype="multipart/form-data">
        <input type="file" name="systemFile"> <br>
        <input type="submit" value="送信">
    </form>
</body>
</html>
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/46ce4536-e362-1c09-a5a8-dcb1296683da.png" width="500">

```php:遷移後
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>$_FILESサンプル</title>
</head>
<body>
    <h1>画像のアップロード後</h1>
    <p>画像アップロード情報</p>
    <p>ファイル名：<?php echo $_FILES['systemFile']['name'] ?></p>
    <p>ファイル形式：<?php echo $_FILES['systemFile']['type'] ?></p>
    <p>ファイルサイズ：<?php echo $_FILES['systemFile']['size'] ?></p>
    <p>tmpファイル：<?php echo $_FILES['systemFile']['tmp_name'] ?></p>
    <p>エラー情報：<?php echo $_FILES['systemFile']['error'] ?></p>
</body>
</html>
```
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2660506/498358a1-b685-57d8-98ab-80fcf3672c6b.png"width="500">

## 参考
[PHP マニュアル 言語リファレンス ](https://www.php.net/manual/ja/reserved.variables.files.php)
[【初心者向け】$_FILESで画像をアップロードする方法](https://webukatu.com/wordpress/blog/20969/)

<br>
著者: E.R (株式会社ウィズツーワン)
ミドルウェアってなんだっけ？

エンジニアになって半年ですが、「ミドルウェア」って結局なんだっけ？となったので、調べてみました。

## 1. ミドルウェアとは？

OSとアプリケーションの間で立ち回るソフトウェアで、OSほど汎用的ではないものの、多くのアプケーションで必須となるシステムを担っているそうです。

## 2. ミドルウェアの種類

代表的なミドルウェアに、webサーバ、アプリケーションサーバ、データベース管理を担うミドルウェアがあるそうです。これら３つは「web三構造」と呼ばれる、代表的なWebアプリの構造を構成しいます。

他にも、システムのバックアップやシステムの監視、サーバの冗長化など、「運用ミドルウェア」と呼ばれるミドルウェアがあります。確かに、OSが担う役割ではないけれど、アプリケーションを動かす際には必須の機能ですね。

## 3. web３構造

先述した通り、webサーバ、アプリケーションサーバ、データベース管理サーバの３つのミドルウェアで構成されるシステムを、「web３構造」と呼ぶそうです。１つ１つの役割を簡単にみていきます。

### a. webサーバ

ユーザーのリクエストに応じて、ページを表示するためのファイルを返すためのサーバです。代表的なものには、apacheやnginxがあります。毎回同じページを返す場合は、webサーバのみで完結しますが、リクエストによって表示内容が変わる場合（動的コンテンツ）、アプリケーションサーバに問いかけて、情報を得る役割も担います。

### b. アプリケーションサーバ

アプリケーションの実行環境を提供するサーバです。動的なコンテンツを生成し、webサーバを介してwebページに表示することができます。また、動的コンテンツだけではなく、DBにある特定のデータを表示したい場合には、データベース管理サーバに問い合わせ、データを取得することができます。

### c. データベース管理サーバ

DBMS（データベース管理システム）が稼働するためのサーバ。データの一元管理をしていて、データの保存や更新、バックアップを行うことができます。アプリケーションサーバからデータを要求された時は、DBMSで特定のデータを取得することができます。

## 4. まだまだありそうミドルウェア

私は、現在Djangoを使った開発を行っていますが、settings.pyを覗きに行くと、色々なミドルウェアが登録されています。djangoの`SecurityMiddleware` とか、 `SessionMiddleware` とか…。この辺りは、まだノータッチなので、引き続き勉強して、次の記事でまとめてみます。
MW WP form に スパムメールがたくさん来るので追記したコード

MW WP form に スパムメールがたくさん来るので追記したコードです。
「https://」「http://」を禁止文字に設定しました。
よかったらいいねください🙇‍♂️🙇‍♂️🙇‍♂️

＜追記＞
functions.php に追記するだけです。
ショートコードの mw-wp-form-〇〇 の部分が 今は、「47」です。
お気をつけください。

```PHP themes/functions.php
/**
 * 禁止文字バリデーションルールを設定
 */
function coop_applicate_validation_rule($Validation, $data) {
    $Validation->set_rule('textarea', 'prohibited_words'); // チェック対象フィールド名を変更
    return $Validation;
}
// ここでフォームIDを変更してください（例: mw-wp-form-47）
add_filter('mwform_validation_mw-wp-form-47', 'coop_applicate_validation_rule', 10, 2);

/**
 * 禁止文字バリデーションルールを登録
 */
function my_validation_rule( $validation_rules, $key ) {
    // 禁止文字チェックルールを追加
    $validation_rules['prohibited_words'] = new MW_WP_Form_Validation_Rule_Prohibited_Words($key);
    return $validation_rules;
}
add_filter('mwform_validation_rules', 'my_validation_rule', 10, 2);

/**
 * 禁止文字チェックのバリデーションルールクラス
 */
class MW_WP_Form_Validation_Rule_Prohibited_Words extends MW_WP_Form_Abstract_Validation_Rule
{
    protected $name = 'prohibited_words';
 
    public function rule( $key, array $options = []) {
        $value = $this->Data->get( $key );
        if ( !MWF_Functions::is_empty( $value ) ) {
            // 禁止文字のリスト
            $prohibited_words = ['https://', 'http://']; // ここに禁止したい文字列を追加

            // 禁止文字が含まれているかをチェック
            foreach ($prohibited_words as $word) {
                if (strpos($value, $word) !== false) {
					$message_str = "お問い合わせが混み合っているため送信できません。しばらくたってからお願いします。";
                    return $message_str; // エラーメッセージを返す
                }
            }
        }
        return null; // 問題がなければ null を返す
    }

    public function admin( $key, $value ) {}
}


```
ゼロから最速最強でGitHubにソースコードを公開！【VSCode】

# 対象とする人
- とりあえずGitHubにリポジトリを作って、ソースコードを公開したい！
- できればコマンドじゃなくてGUI操作で作業したい！

#  前提条件
- GitHubのアカウントは持っていて、ログインできる
- VSCodeがインストール済み

# 最速でGitHubにソースコードを公開するまで
### GitHub上にリポジトリを作成
1. [GitHub](https://github.com)にアクセスする(未ログインの場合はログインする)
　
1. 次の図の赤枠部分に必要事項を入力
    ![スクリーンショット 2024-11-29 17.25.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855211/f5dc44ef-1aae-737e-52f0-758de77da5e8.png)
    
    "Repository name": リポジトリの名前(プロジェクトの名前などにする)
    "Public/Private": Public(公開) / Private(非公開)
    　
1. 緑色の「Create a new repository」をクリック
　
1. 以下の画面が表示されたらリポジトリの作成は完了
    ![スクリーンショット 2024-11-29 17.31.51-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855211/a2ab26b8-9796-04dc-bd3a-51c31d5ebf79.png)
    　
1. 上の図の赤枠で囲ったボタンをクリックして、内容をコピーしておく(後で使う)

### VSCodeでローカルリポジトリの作成
1. 作業用のディレクトリを新規作成し、VSCodeで開く
1. VSCodeでターミナルを開く
1. 先ほどコピーした内容を貼り付けて`Enter`
1. 以下のように表示されることを確認
 
    ```[bash]
    Initialized empty Git repository in /Users/user/path-to-your-repository/.git/
    [main (root-commit) a607303] first commit
     1 file changed, 1 insertion(+)
     create mode 100644 README.md
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 245 bytes | 245.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
    To https://github.com/GitHubUser/your-repository.git
     * [new branch]      main -> main
    branch 'main' set up to track 'origin/main'.
    ```
    　
1. 先ほどGitHubに作ったリポジトリのページをブラウザで開く
    以下のようなページが表示されていれば成功
    ![スクリーンショット 2024-11-29 17.42.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855211/2922bb4a-03c6-47a6-8974-344c936ccfc1.png)

### ソースコードを編集してGitHubで公開
1. VSCodeで先ほど作成した作業用ディレクトリを開く
　
1. ソースコードを編集する、もしくはファイルを追加する
　
1. VSCodeの最左端のアイコンから「ソース管理」(たぶん上から3番目)のアイコンをクリックすると以下のような画面が表示される
    ![スクリーンショット 2024-10-29 18.59.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855211/ff93897c-8f13-42cc-5131-869405374f44.png)
    　
1. 図の赤枠で囲ってある「+」マークをクリックする
    　
1. 下の図にしたがって操作する
    ![スクリーンショット 2024-10-29 19.09.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855211/83e05b54-18fb-7bb1-b4a9-3a9c849096f2.png)
    コミットメッセージには、ファイルの変更内容を簡潔に記載する

これで完了！

# まとめ
VSCodeを使って、最速最強でGitHubにソースコードを公開できました！

(注意事項)
1. 今回は最速最強を優先してhttps通信を使用しています。しかしながら、SSHによる通信のほうが安全というお話もあります。 (GitHubの推奨はhttps通信です)
1. 今回はmainブランチに直pushしています。mainブランチを保護するにはブランチを分けましょう。
ファイルとディレクトリの基本操作（連載第2回/25回）

# はじめに

Linuxでのファイルとディレクトリの基本的な操作方法を紹介します。
これらのコマンドは日常的な作業で頻繁に使用されます。

# コマンド説明
#### `touch` - 空ファイル作成
`touch` コマンドを使用すると、空のファイルを簡単に作成できます。
```powershell
# 例
touch ファイル名
# 空の myfile.txt ファイルを現在のディレクトリに作成します。
touch myfile.txt
```

#### `echo` - ファイルにテキストを追加しながらファイルを作成
`echo` コマンドを使用して、ファイルにテキストを追加しながらファイルを作成することもできます。

```powershell
# 例
echo "テキスト" > ファイル名
# このコマンドは、myfile.txt に "Hello, World!" というテキストを含むファイルを作成します。
echo "Hello, World!" > myfile.txt
```

#### `cat` - 複数行のテキストをファイルに追加しながら作成
`cat` コマンドを使用して、複数行のテキストをファイルに追加しながら作成することができます。

```powershell
# コマンドを実行した後に入力したテキストをファイルに保存できます。
# 終了するには、Ctrl + D を押します。

# 例
cat > ファイル名
# このコマンドは、myfile.txt に "This is line 1.", "This is line 1." というテキストを含むファイルを作成します。
cat > myfile.txt

# 実行後に次のように入力します：
This is line 1.
This is line 2.
Ctrl + D
# これにより、myfile.txt に入力した内容が保存されます。
```

#### `nano` `vim` - テキストエディタを使用する
例えば、`nano` や `vim` などのテキストエディタを使用して新しいファイルを作成し、編集することもできます。

```powershell
# nano を使用する：
# エディタが開いたら、テキストを入力して Ctrl + X、Y、Enter を押して保存します。
nano myfile.txt

# vim を使用する：
# エディタが開いたら、i を押してテキスト入力モードに入り、
# テキストを入力した後に Esc キーを押して :wq と入力し、Enter を押して保存して終了します。
vim myfile.txt
```

#### `ls` - ファイルとディレクトリの一覧表示
`ls` コマンドは、ファイルとディレクトリの一覧表示が行えます。


```powershell:
# リスト表示
ls
# 詳細情報を含むリスト表示
ls -l
# 隠しファイルも含めて全てのファイルを表示
ls -a 
```    

#### `cd` - ディレクトリの移動
`cd` コマンドは、現在の作業ディレクトリを変更します。
```powershell
# 指定ディレクトリへの移動
cd /path/to/directory
# 便利なショートカット    
# ホームディレクトリに移動
cd ~ 
# 一つ上のディレクトリに移動
cd .. 
```
#### `pwd` - 現在のディレクトリの表示
`pwd` コマンドは、現在の作業ディレクトリのパスを表示します。
```powershell
# 現在の作業ディレクトリのパスを表示
pwd
```
#### `mkdir` - 新しいディレクトリの作成
`mkdir` - コマンドは、新しいディレクトリを作成します。
```powershell
# 新しいディレクトリを作成
mkdir new_directory
# 必要な親ディレクトリも含めて作成
mkdir -p /path/to/directory
```

#### `rm` - ファイルの削除
`rm` - コマンドは、ファイルを削除します。
```powershell
# ファイルを削除
rm filename
# ディレクトリとその中身を再帰的に削除
rm -r filename
# 削除前に確認のプロンプトを表示
rm -i filename
```
# おわりに
不慣れなコマンド、特に `rm` コマンドのような削除系は「もし間違えてしまったら・・」と怖くて気軽に試しにくいと思うのでWSLで試す使い方をすると便利だと思います。

次の記事では、ファイルの検索について詳しく説明します。

https://qiita.com/yu1016/items/ef44fd4be9b621c16bea

一覧

https://qiita.com/advent-calendar/2024/pig
CTOとは？定義・業務内容・目指すためのステップ

#### **はじめに**
現代の企業では、技術がビジネスの成否を左右する重要な要素となっています。その中で、企業全体での技術の方向性を示し、経営と現場を結びつける役割を担うのがCTO（Chief Technology Officer；最高技術責任者）です。本記事では、CTOの具体的な役割や業務内容を掘り下げるとともに、目指すために必要な力や道筋を詳しく解説します。

---

### **CTOの役割とは**
CTOは、技術戦略の立案から実行、技術チームの統括、経営陣との連携まで多岐にわたる役割を担います。

- **技術戦略の立案者**  
  企業の経営目標を達成するための技術戦略を策定し、新技術の活用や競争優位性の構築を図ります。具体的には、AIやIoTを活用した新規事業の立ち上げや、既存製品の技術アップデートなどがあります。

- **技術と経営の架け橋**  
  経営者のビジョンを技術的に実現するための具体的な方策を提示します。例えば、製造業においてはDX推進、IT企業ではプロダクトロードマップの策定などが含まれます。

- **イノベーションの推進者**  
  技術革新をリードし、企業が市場で競争力を維持・向上できるよう、最新技術の導入と実践を担います。

- **人材育成の責任者**  
  技術チームの構築・育成も重要な業務です。技術者が成長し続けられる環境を整えることが求められます。

---

### **CTOの主な業務内容**
CTOの業務内容は多岐にわたります。業務内容を以下に分類し、具体例を交えて解説します。

#### **1. 技術戦略の策定と実行**
企業の将来を見据えた技術戦略を立案し、実行することがCTOの主業務です。具体的には次のような活動が含まれます：
- **市場動向と技術トレンドの把握**  
  例：クラウドサービスの普及を背景に、オンプレミスからクラウドへの移行戦略を主導。
- **投資判断**  
  新しい技術にどの程度の資源を割くかを決定。例：機械学習モデルの導入に数千万円を投資し、業務効率を20%改善。

#### **2. 製品開発の技術的指導**
製品やサービスの開発において、技術的な方向性を示します。
- **技術スタックの選定**  
  例：ウェブアプリの構築にReactを採用するか、Vueを採用するかの判断。
- **品質管理**  
  コードレビューやテストプロセスの構築を指導。

#### **3. 技術チームのマネジメント**
技術者の採用、育成、評価を通じて、組織全体のパフォーマンスを向上させます。
- **エンジニアリング文化の構築**  
  例：スプリントレビューや1on1ミーティングを導入し、エンジニアの意欲を高める。
- **キャリア開発**  
  若手エンジニアが成長できる研修制度の整備。

#### **4. 経営陣との連携**
技術戦略と経営戦略を結びつける役割を果たします。
- **意思決定の技術的サポート**  
  例：新規事業の可否を判断する際に、技術的課題を明確化。
- **経営目標の達成**  
  売上目標に直結する技術的施策の実施。

---

### **CTOに求められるスキルと知識**
CTOになるためには、多岐にわたるスキルが必要です。それぞれのスキルを具体的に見ていきましょう。

#### **1. 技術力**
- **深い専門知識**  
  AI、クラウド、セキュリティなど、自社事業に必要な専門技術の知識が必須です。
- **技術の幅広い知見**  
  例：Webアプリケーション、インフラ構築、データベース設計の全体を理解し、最適な選択ができる力。

#### **2. ビジネススキル**
- **経営的視点**  
  ROI（投資対効果）を考慮した技術戦略の策定能力。
- **プロジェクト管理**  
  複数のプロジェクトを同時進行で管理する能力。

#### **3. リーダーシップとコミュニケーション**
- **チームを導く力**  
  技術チームを牽引し、全員の目標を統一する。
- **対話力**  
  技術者と経営陣の両方と効果的にコミュニケーションを取る力。

---

### **CTOを目指すキャリアパス**
CTOを目指すためには、以下のキャリアステップが考えられます。

#### **1. エンジニアとしての基礎固め**
- **現場での実務経験**  
  例：開発、テスト、運用保守などを実践。新規事業を提案するための経験を積みます。

#### **2. チームリーダーやプロジェクトマネージャーの経験**
- **リーダーシップの習得**  
  テックリードやマネージャーとしてチームを率いる経験を積みます。

#### **3. 技術戦略家としての経験**
- **全体視点を持つ訓練**  
  技術の枠を超えた企業としての戦略的な技術の意思決定を経験します。

---

### **まとめ**
CTOは技術と経営の架け橋であり、企業を支える重要な役割を担っています。技術者としての基礎力だけでなく、経営的な視点やリーダーシップを磨くことが不可欠です。CTOを目指すためには、段階的に経験を積み重ね、幅広い知識とスキルを培っていくことが求められます。
「納期は動かせません！」問題に動じないための5つの対策

こんにちは！いつの間にか40を過ぎたIT関係を仕事にするおじさんです。

プロジェクトの終盤に差し掛かると必ず出てくる「これ、予定通り終わらないね…」の一言。そこでクライアントに相談すると、返ってくるのが例の決まり文句：

**「納期は動かせません！」**

私たちはこれまで調整に調整を重ねてきたのに、相手は何食わぬ顔で「上司が…」なんて。とはいえ、私たちも無理難題を押し付けたくないですよね。

今回は、**納期**に関するお決まりのトラブルを少しでも回避するための**5つの対策**をお伝えします。

これであなたも、「**納期は絶対**」と言われた時に笑って対応できるかもしれません！

# 対策1: リスクを「見える化」し、納期前に早めの相談を

まず最初のポイントは、プロジェクトの進行とともにリスクを **「見える化」** することです。これができると、問題が起きた時にすぐ「今のままでは納期が厳しい」と早めに相談でき、クライアントも心構えができるようになります。

## 具体的なやり方

- プロジェクトの初期段階から、主要なタスクやマイルストーンを設定し、それぞれに **「リスク」** と **「予定進行状況」** を可視化する。
- リスクが高くなってきた段階で、クライアントに共有。進捗管理ツールや **ガントチャート** を使って、全体の進行状況を視覚的に分かりやすく示します。

こうすることで、もし遅延リスクが高まっても **「見える化」** で事前に認識できるため、相手も「納期厳しいかな」と共通理解を持ちやすくなります。おじさんも何度も経験してきましたが、リスクが高い部分を早めに見せるだけでも、クライアントも「少し調整が必要かも」と考えてくれることが増えました。

# 対策2: 「バックアッププラン」を事前に立てておく

次に重要なのが、**「バックアッププラン」** を用意しておくことです。つまり、**「最悪の事態が来たらこう対応します」** と、予備の計画を持っておくのです。プランBなんて呼ばれたりもしますよね。このプランがあると、クライアントが納期を絶対動かさないと言っても、こちらの対応策を提示できるため、相手も「それならそうしよう。」と理解を得やすくなります。

## 具体的なやり方

- プロジェクトの初期段階で、代替案として **「もし遅れが発生した場合の対応プラン」** をいくつか準備。
  - たとえば、外部リソースを借りるために予備予算を調整しておき、SES企業とパイプを作っておく。
  - タスクを並行処理に変更することが可能なように準備しておく。

- クライアントとの打ち合わせで **「このような事態にはこのようなプランがあります」** と説明し、納得を得ておくことで、プロジェクト進行時の変更にも柔軟に対応できます。

おじさんも初めは **「わざわざプランBを立てるなんて手間じゃないか？」** と思っていましたが、いざとなった時に相手が納得してくれやすく、実際にいくつかのプロジェクトで助けられた経験があります。

# 対策3: **「優先順位付け」を交渉材料にする**

プロジェクトの全てが重要かというと、そうでもありません。納期が難しい場合には、タスクに **「優先順位付け」** をしてクライアントと交渉してみましょう。**「全てを同時進行ではなく、まず最も重要なところを優先して進める」** ことを提案し、後回しにできるものを明確にすると、相手も納期の調整を考えてくれるかもしれません。

## 具体的なやり方

- 例えば、**「この機能を優先すると全体のリリースが早くなります」** と伝え、クライアントにもそれに合わせて調整してもらう。
- 優先度の低いタスクについては **「次のアップデートで対応しましょう」** など柔軟な提案も加えます。

おじさん的には、全てを詰め込もうとするとかえって混乱することもありますし、分けることでお互いに気持ちの余裕も生まれます。無理をせずに **「優先順位の再確認を」** と伝えるだけで、意外と納期も現実的になっていくものです。

# 対策4: **定期的に「進捗報告」を行い、こまめに調整を**

特に大切なのが、定期的な **「進捗報告」** を行うことです。これにより、遅延やスケジュールのズレが生じた際に **「納期厳しいかも」** といち早く察知できるため、早めに対策を打てます。**「スムーズな進行のために、進捗報告は欠かさない」** を習慣にしておきましょう。

## 具体的なやり方

- 週1回、もしくは隔週で **進捗報告** を行い、現在の状況や今後の見通しについてまとめた資料を提出。
- 報告書には **「今後リスクがありそうなタスク」** についても触れ、あらかじめクライアントと共通認識を持ちます。

おじさん的には、この **進捗報告** を怠らないことで **「今回は厳しいな」** と感じたらすぐに相談に乗ってもらいやすくなりました。意外とクライアントも **「進捗報告のおかげで安心」** と言ってくれることが増えました。

# 対策5: **「納期は絶対動かせません」を先読みして準備する**

最後の対策として、**「納期が絶対動かせない」** という前提で計画を立てることをお勧めします。実際、**「納期の延長ができません」** と言われるのはよくあることで、これに慣れておくと計画の段階で余裕を持たせたスケジュールを組むようになります。

## 具体的なやり方

- スケジュールの段階で **「安全マージン」** を設け、万が一の遅延を見越した期間を設定する。
- 各タスクに **「バッファー」** を設け、計画より早めに終わらせる余裕を作っておく。

この考え方にすると、実際に納期が厳しくても冷静に対処できますし、クライアントも **「納期を守ってくれた」** と信頼を寄せてくれます。おじさんも **「できれば納期を延ばしたい」** と思いがちですが、この対応で **「納期絶対」** と言われても慌てずに進められるようになりました。

# おわりに

いかがでしょうか？**「納期は動かせません！」** の壁に何度も当たってきた経験から、対策を積み重ねてきました。プロジェクトを進めるうえで重要なのは、やはり余裕をもってリスクを予測し、準備を整えておくことです。そうすることで、納期が厳しくても冷静に対応でき、お互いが納得してプロジェクトを完遂できます。

**他の視点やアイデアがあれば、ぜひシェアをお願いします！** 次回のプロジェクトでも、少しでも**納期のストレスを減らして**頑張っていきましょう！
SwiperのSwiper instanceは、new Swiper実行時以外でもアクセスできる

案件で使われてたなーって懐かしく思って、ドキュメントを見てたら気づいたこと。

https://swiperjs.com/swiper-api#initialize-swiper

API Docsに書いてあるけどSwiper Instanceを作成後、swiperContainerのswiperプロパティにSwiper Instanceが格納される。
そのため、例えば共通のJavaScriptで`new Swiper`を実行していてページ側から返り値にアクセスできない状態であっても、下記の例のようにdocument.querySelectorなどでswiperContainerであるHTML要素を取得し、そのswiperプロパティからSwiper Instanceにアクセスしてスライダーの枚数を動的に変更できる。

<p class="codepen" data-height="300" data-default-tab="html,result" data-slug-hash="VYZYMmB" data-pen-title="Untitled" data-user="SinkingSeaWheat" style="height: 300px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;">
  <span>See the Pen <a href="https://codepen.io/SinkingSeaWheat/pen/VYZYMmB">
  Untitled</a> by sinkingseawheat (<a href="https://codepen.io/SinkingSeaWheat">@SinkingSeaWheat</a>)
  on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://cpwebassets.codepen.io/assets/embed/ei.js"></script>

ドキュメントの下側のメソッドとかばっかり見てたから気づかなかった…
Azureでメールを送信してみる(準備編)

# Azureでメールを送信してみる(準備編)

プログラミングのとこだけ書こうと思ったら先にAzureの準備をしとかないといけないことに気が付いたので準備編。

## Azureアカウントの取得

さすがに説明不要だと思うので適宜アカウントを取得してください
[https://azure.microsoft.com/ja-jp](https://azure.microsoft.com/ja-jp)

## リソースグループの作成

リソースグループというのはものすごく大雑把に言うと「Azureで使用するサービスの格納場所」みたいな感じです。
統合開発環境なんかでいうところのプロジェクトと言い換えてもいいかもしれないです。

ログインしたらポータル画面に入ってるはずですので、画面の上の方にあるでっかい＋アイコンを選択します。
検索用っぽいテキスト入力欄が出てくるので、「リソースグループ」で検索して出てきたのを選択します。

作成ボタンを押すとなんか入力画面っぽいのが出てくるはずなので、適当に入力します。

- プロジェクトの詳細
  - サブスクリプション
    - [ここはデフォルトのままでいいはずです]
  - リソースグループ
    - [わかりやすい名前を付けます。アルファベット推奨。]
- リソースの詳細
  - リージョン
    - [どこに置くかという指定項目です。料金に差があるかもしれないので確認を推奨。]

あとは特に指定することもないのでOKを押していきます。

## メールサービスを作成

ちょっとややこしいですが、「通信サービス」の中の「メールサービス」という扱いになっています。
公式のドキュメントとか見ると「email Communication Service」というのがありそうなんですが、なんかちょっと変わっちゃってるっぽいです。

Azureのポータルからまたでっかい＋ボタンを押して「通信サービス」で検索します。
するとなぜか出てこないと思いますが、「Communication Services」というのが「通信サービス」です。
(いっそ翻訳しないでくれた方がわかりやすいのですが。。。)
作成ボタンを押して適当に作成していきます。

- サブスクリプション
  - [ここはデフォルトのままでいいはずです]
  - リソースグループ
    - [さっき作成したリソースグループを選択します]
- インスタンスの詳細
  -リソース名
    - [なんか適当に入力します。ここもアルファベット推奨]
  - データの場所
    - [リソースグループの場所と一致しなくても動作するっぽいですが、同じ場所にしておいた方が安全かもしれません]

あとはガイドされるままに進んでいくとリソースとして作成されます。

## メールサービスの設定

ここからがちょっと人によって変わります。
単にテストするだけならAzureドメインのままでもいいですが、開発環境とかだと専用ドメインがあったりするかもしれません。
なので若干大雑把ですが次の行先だけガイドとして残しておきます。

とりあえずまずはポータルから「通信サービス」を選択して作成したリソースを選択し、「メール」のところを開きます。

### 無料のAzureドメイン(要するにマイクロソフト保有のドメインでやる)

「メールを試す」の方を開きます。
「メールの送信元」を開くと「無料のAzureサブドメインを接続する」というのが出てきます。
この中の「電子メールサービス」を「メールサービスの追加」にすると新規でいろいろ作成して紐づけてくれます。
あとは項目に入力していけばいいはずです。

### 独自ドメイン(自分たちがDNSの設定を変更できる)

「ドメイン」の方を開きます。
真ん中にでかでかと「ドメインを接続する」というボタンがあるので、それを選択します。
あとは項目に入力していけばいいはずです。

## メール通信サービス

ドメインの設定まで終わったころにポータルに「メール通信サービス」というのが増えていると思います。
これが出てきていればたいていの場合大丈夫だと思いますが、大丈夫じゃなかった場合はAzureのサポートに問い合わせて大丈夫なようにしてください。

## テスト送信

ポータルから通信サービスに行って作成したリソースを選択します。
メールを開くとさっきも見たような「メールを試す」というのがあるので、それを選択します。
あとは適当にドロップダウンから選択して「send」を押すだけなので、ここは苦労することもないと思います。

### メールが届かない時

微妙な話なんですが、独自ドメインを使用しているときはSPFやDKIMを設定していても届かない時があります。
どうも一部のメールフィルタリングサービスはAzureのメール通信サービスから来たメールを弾いてしまうようです。
どうにも届かないなというときはgmailやoutlookあたりにメールアドレスを用意してやるとそっちなら受信できます。

### ところで送信元メールアドレスってどうやって追加するの？

これがですね、どうもポータルからは操作できないようになってるみたいです。
ドキュメントとかはまだ「ポータルからAddボタンで増やせる」って書いてあるんですが、現時点ではどうもできなくなっているみたいです。
(フォーラムでもできるのできないのでなんか喧嘩してた。)
[https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-multiple-senders?pivots=platform-azp](https://learn.microsoft.com/ja-jp/azure/communication-services/quickstarts/email/add-multiple-senders?pivots=platform-azp)

同じドキュメントの中で「Azure Portal」のタブの横に「Azure CLI」というタブがあります。
こっちのタブで表示されるコマンドの方はまだ使えるようですので、こっちで送信元メールアドレスを追加しましょう。
君のSPAがもっさりなのは○○のせい

この記事は [レコチョク Advent Calendar 2024](https://qiita.com/advent-calendar/2024/recochoku) の2日目の記事となります。



# デモ

まずは以下2つのデモサイトをお試しください。

一覧ページと詳細ページを持つ一般的なWebサイトの例ですが、
どちらも意図的に低速なWebサイトを演出しています。

[デモサイトA](https://demo.laineus.com/spa-async/demo1.html)

[デモサイトB](https://demo.laineus.com/spa-async/demo2.html)

# どちらがよりストレスでしたか？

デモAは食べ物がクリックされると必要なデータの取得を開始し、**取得が完了したら詳細ページへ遷移**しています。

デモBは食べ物がクリックされると**即座に詳細ページへ遷移し、データの取得が完了したらコンテンツを表示**します。

また、詳細ページでのsubmitボタン押下時の挙動も同様です。

どちらも通信にかかる時間は同じですが、操作感には違いがあったのではないでしょうか？

# ユーザー操作には即時レスポンスを返そう

### デモA

押下から通信完了(2秒)後に画面が反応

![ページ 1.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/08771c23-40ce-010d-8cdb-f933e48a6a63.png)

:::note alert
リンク押下から画面の反応までラグがありもっさり感じる
:::

:::note alert
読み込み中であることが分からない
:::

### デモB

押下直後に画面が反応

![ページ 1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/1b777347-6484-3c42-30eb-ff99f3f2f392.png)

:::note info
リンク押下で即時画面に反応があり押し応え良好
:::

:::note info
読み込み中であることが認識できる
:::

デモは違いが分かりやすいように通信時間を2秒と極端にしましたが、では速度自体を改善して0.2秒にできたらよいのかというと、それでもやはり遅すぎで、もっさり感じると思います。

ボタン押下への反応としては、**通信時間に依存せず次フレームで即時反応を返す**のが最も快適です。

また、即時画面を遷移させていたとしても、通信完了まで真っ白な画面で待機させてしまっていては読み込み中であることが伝わりません。

ローディングのインジケーターや[スケルトンスクリーン](https://qiita.com/kanachimu/items/481c2459ef4ec298f47f)を表示しましょう。

# UIはユーザーとのコミュニケーション手段

この例は人間同士のコミュニケーションにも置き換えられます。

![Screenshot from 2024-11-09 23-41-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/74d7d6dd-fc29-c760-ce0f-de97802a0046.png)


このトナカイ（＝Webサイト）は仕事のスピードの改善（パフォーマンスチューニングやスペックアップ）をするよりも先に、まずコミュニケーションのとり方を見直したほうがいいでしょう。

![Screenshot from 2024-11-09 22-33-24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151137/295260a6-8ff1-6f2e-60c7-02ae87ee6798.png)

:::note info
UIを操作するユーザーの気持ちを想像し、システムとユーザーが適切なコミュニケーションをとれているか考えましょう。
:::

# Nuxtユーザーは特に注意

Nuxt製を公言しているWebサイトの挙動を見ると、有名サービスを含めた多くの事例でデモAのようなルーティングになってしまっています。

これはNuxt標準の非同期通信用の関数が、デフォルトでルーティングをブロックする仕様によるものと思います。

これらの関数はLazyオプションを有効にすることによってルーティングがブロックされなくなります。

```diff
- useFetch(..)

+ useFetch(.., { lazy: true })
// or
+ useLazyFetch(..)
```

```diff
- useAsyncData(..)

+ useAsyncData(.., { lazy: true })
// or
+ useLazyAsyncData(..)
```

# まとめ

SPAをはじめ、近年のWebサイトは非同期通信を多用します。
その際、以下のポイントに注意しましょう。

:::note info
ユーザーの操作に対し即時レスポンスを返そう
:::

:::note info
 読み込み中であることを示そう
:::

デザインデータには含まれていない部分だったりすると思いますので、エンジニアが非同期処理の実装の際に気づけるといいんじゃないかと思います。

それでは、お読みいただきありがとうございました。
おわりに今年のクリスマスソングをどうぞ→『[Baby Blue (Badfinger)](https://youtube.com/watch?v=33oAuvbRg-c)』

---

明日の [レコチョク Advent Calendar 2024](https://qiita.com/advent-calendar/2024/recochoku) は3日目『【iOS】SwiftUIで画面キャプチャからコンテンツを保護する』です。お楽しみに！
ポストMI (マテリアルズ・インフォマティクス)

# MI
従来の材料開発は知識、経験、能力に依存していた。ニーズに対して理論計算を行い、既存研究を探して実験を繰り返しながら材料を試作し、物性評価を進めるという手間と時間のかかるプロセスであった。

MI(マテリアルズ・インフォマティクス)とは、計算科学や情報科学によって材料(マテリアル)開発のスピードをアップさせる試みである。近年、計算科学にAIや機械学習を利用する傾向にある。

MIでは物性の特性をコンピュータ上で計算させたり、あるいは過去のシミューレションデータや論文データを機械学習によって分析させたりすることによって、材料探索を進めることで材料開発をスピードアップさせることができる。

# 量子化学計算
量子化学計算は分子シミュレーション技術の一つである。分子シミュレーションは、化学物質の構造をもとに物理学の原理に従い計算する技術で、量子化学計算、分子動力学計算、粗視化分子動力学計算などがある。量子化学計算は原子や分子の構造や性質を電子状態から解析する手法であり、経験的なパラメータを用いない場合は第一原理計算とも呼ばれる。分子動力学計算では原子や分子の運動を力学法則に基づいて解析する。粗視化動力学計算は高分子など分子サイズがより大きな場合に、あるまとまった原子の集団を原子集合体として簡略化して解析する手法である。

量子化学計算は、「物質の性質、反応性は、その物質の電子状態がわかれば予測できる」という前提に基づき、シュレーディンガー方程式を解いて電子状態を求めるものである。電子状態がわかることによって、最安定構造、エネルギー値、電荷分布、結合距離、各振動モード、紫外可視吸収スペクトル、対称性などがわかる。つまり、量子化学計算は電子状態から材料の構造や性能を計算できる。

シュレーディンガー方程式はハートリーフォック法によって近似的に解いていたが、DFT法(密度汎関数法)が考案されて以降はDFT法が主流となっていた。DFT法は1927年に発表されたトーマス・フェルミ理論(電子密度だけでハミルトニアン演算子を表わすことができる)を基礎理論とし、1964年にホーエンベルグ・コーン定理によってトーマス・フェルミ理論の正しさが立証され、1965年に発表されたコーン・シャム方程式を用いることによって計算可能になったという歴史的経緯がある。

# ポストMI
前述のように従来のMIにおいてはAIや機械学習がとり入れられてきたが、ポストMIにおいては、計算データベース(既存の計算データ)[^1]を用いてQCBM(Quancum Circuit Born Machine:量子回路ボルンマシン)などによる量子機械学習)で物性を推定し、推定結果を量子化学計算する際にも量子コンピュータを活用する試みである。従来の「量子化学計算」と区別するために量子コンピュータを利用した量子化学計算をここでは「量子量子化学計算」と呼ぶ。

古典コンピュータで量子化学計算を行う場合、よく用いられるのは前述のDFT法である。たとえば、ある原子核配置をとる分子のエネルギーの近似値を計算する場合、分子や原子の数が”N”とすると、その計算量は”Nの3乗”に比例して増加する。さらにDFTを使って分子や原子の構造が最も安定する原子核配置を見つけようとする場合、原子核配置のそれぞれについてエネルギーを計算し、その値が最も小さくなる原子核配置を探索する必要がある。原子核配置のバリエーションは原子数に対して指数関数的に増えるため、その計算量も指数関数的に増大し、古典コンピュータで量子化学計算を行うことは非現実的である。

現在、動作可能な量子コンピュータであるNISQ(Noisy intermediate-scale quantum)で量子化学計算を行う場合は、VQE(Variational quantum eigensolver:変分量子固有ソルバー)[^2]が用いられる。VQEは、量子コンピュータで波動関数生成とエネルギー計算、古典コンピュータで変分パラメータの最適化を行うハイブリッド型である。ただし、変分的最適解を得るにはDFTと同様に指数関数的な計算量が必要であり、近似波動関数計算は古典コンピュータでも多項式で実行可能であるため、現時点では NISQ で量子化学計算を行うことも非現実的である。

これらに対して、FTQC(Fault-tolerant quantum computing)型の量子コンピュータが実現されれば、 QPE(量子位相推定:Quantum phase estimation)[^3]やPITE[^4]を実行できるようになる。たとえば、 PITEを量子化学計算に適用して、分子や原子の構造が最も安定する原子核配置を見つけようとした場合、計算量の増え方は”Nの2乗程度”となり、量子コンピュータで量子化学計算を行うことに現実味を帯びてくるので、FTQCの実現が待たれる。


[^1]:計算データベースの例
    ・ChemTube3D:量子化学計算で得られた遷移状態のデータ
    https://www.chemtube3d.com/
    ・CCCBDB(Computational Chemistry Comparison and Benchmark Database):1,799分子の実験値及び計算値
    https://cccbdb.nist.gov/
    ・日本蛋白質構造データバンク(PDBj:Protein Data Bank Japan):生体高分子の構造データベース
    https://pdbj.org/
    ・Chem Tube3D:基本的な有機化学反応の遷移構造
    https://www.chemtube3d.com/
    ・BSE(Basis Set Exchange):500種類以上の基底関数
    https://www.basissetexchange.org/

[^2]:VQE
    AiSpirits,いちから始める量子コンピュータ「量子アルゴリズムVQE(Variational Quantum Eigensolver）)」
    https://aispirits.com/2021/04/16/%e9%87%8f%e5%ad%90%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0-vqevariational-quantum-eigensolver%ef%bc%89/

[^3]:QPE
    AiSpirits,いちから始める量子コンピュータ「量子アルゴリズム　量子位相推定(QPE)」
    https://aispirits.com/2021/04/16/%e9%87%8f%e5%ad%90%e3%82%a2%e3%83%ab%e3%82%b4%e3%83%aa%e3%82%ba%e3%83%a0-%e9%87%8f%e5%ad%90%e4%bd%8d%e7%9b%b8%e6%8e%a8%e5%ae%9aqpe/

[^4]:PITE
    Cornell University, arXiv quant-ph
    「Exhaustive search for optimal molecular geometries using imaginary-time evolution on a quantum computer.」
    https://arxiv.org/abs/2210.09883
分散並列Prolog

# シンプルイズベスト
N-Prologの拡張として取り組んでいた分散並列機能が動き出しました。ご紹介します。Prologの並列と言えばParlogやGHC、KL1などが有名です。これらは節の本体部をAND並列、あるいはOR並列をすることで実現していました。しかし、これはかなり大変です。私もGHCを実装しようと頑張ってみたのですがそのあまりの複雑さにめげてしまいました。今回、私が取り組んでいるのは極めてシンプルなものです。コード中の並列実行可能な部分を人間が取り出してコード化するという手法です。エジンバラPrologの仕様の範囲内で慣れ親しんだPrologで分散並列をやろうというものです。

# 例コード
まずはこのコードをご覧ください。

```prolog

para(X) :- list50(Y),psort(Y,X).

psort([Pivot|Rest], Sorted) :-
    partition(Pivot, Rest, Left, Right), 
    dp_and([qsort(Left, SortedLeft), qsort(Right, SortedRight)]),       
    append(SortedLeft, [Pivot|SortedRight], Sorted). 

seq(X) :- list50(Y),qsort(Y,X).

qsort([], []).
qsort([Pivot|Rest], Sorted) :-
    partition(Pivot, Rest, Left, Right), 
    qsort(Left, SortedLeft),          
    qsort(Right, SortedRight),       
    append(SortedLeft, [Pivot|SortedRight], Sorted). 

partition(_, [], [], []). 
partition(Pivot, [H|T], [H|Left], Right) :-
    H =< Pivot,  
    partition(Pivot, T, Left, Right).
partition(Pivot, [H|T], Left, [H|Right]) :-
    H > Pivot,  
    partition(Pivot, T, Left, Right).

% List of 50 elements for another test
list50([27, 74, 17, 33, 94, 18, 46, 83, 65, 2, 32, 53, 28, 85, 99, 47, 28, 82, 6, 11,
        55, 29, 39, 81, 90, 37, 10, 0, 66, 51, 7, 21, 85, 27, 31, 63, 75, 4, 95, 99, 11, 28, 61,
        74, 18, 92, 40, 55, 59, 8]).
```

psortというのが分散並列版のクイックソートです。qsortは逐次処理版です。ご注目いただきたいのはdp_and/1 という述語です。これはリスト中の述語を複数の子機にTCP/IPで渡して並列計算します。そして結果をTCP/IPで受け取って変数をunifyするというものです。

結果をご覧ください。

![bandicam 2024-11-29 17-10-02-832.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/d9994037-5b75-5f4f-03fb-a1bcfd01ed97.jpeg)

予め子機2台をネットワークモードで起動しておきます。そして親機からdp_create/1を使ってIPアドレスにより子機との通信を確立します。その後、子機も含めて全機でコンパイルして、全機にconsultします。

para/1は並列実行した結果です。seq/1は逐次実行の結果です。同じソート結果が得られています。


# オーバーヘッド
このような粒度の小さいコードの実行ですとオーバーヘッドがバカになりません。並列分散の方が遅くなってしまうのは仕方のないことです。


![bandicam 2024-11-29 17-10-15-777.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/33927/1b6cb91e-e278-c018-4a2c-f8490103362a.jpeg)


しかし、粒度の大きな問題ですと威力を発揮するはずです。例えばボードゲームの先読みです。あるいは数学の群論、位相の問題で手間のかかるものです。9Queensを９つに分解して並列実行すると台数効果が得られるはずです。

だんだんと面白くなってきました。ご興味ありましたらご自分でも動作させてみてください。複数のLinuxマシンがあれば再現できます。ラズパイでも動作可能です。さあ、いよいよ並列の時代です。Prologの復活はあるかな？

https://github.com/sasagawa888/nprolog
ポストファイナンス3PL

# ファイナンス3PL
周知のように3PL(Third Party Logistics)とは、物流業務(調達物流、工場内物流、販売物流(在庫管理・輸配送管理)、静脈物流(産業廃棄物、返品、修理品))を第三者(多くの場合、運送業者)に委託することである。
物流機能だけである3PLに金融機能を付加したものがファイナンス3PLと呼ばれており、日本でファイナンス3PLが始まったのは2009年とされている[^1]。

ファイナンス3PLとは、物流事業者やフォワーダ(乙仲)が、荷主のもつ債権を買い取り、早期資金化するサービスで、物流金融とも呼ばれる。物流事業者が買い取った債権は、保険会社へ再譲渡(リファクタリング)することにより、リスクを軽減している。
物流事業者が債権を買い取るのではなく、金融機関が買い取る場合は、サプライチェーンファイナンス(SCF)もしくは、金融物流と呼ばれることもあるが、明確な使い分けは確立されていないので、本稿ではファイナンス3PLとして述べていく。なお、ファイナンス3PLといったサービスを利用するのではなく、自社で債権の買い取りを金融機関に依頼することをファクタリングと呼ぶ(この用語の使い分けも明確なものはなく、ファイナンス3PLも含めてファクタリングと呼ぶ場合もある)。

# 4PL
一方、これまで概念的であった4PL(4th PL)もairhouse[^2]というスタートアップが出てきて、社会実装された。
4PLとは、取扱高や与信などの関係で直接3PLを利用できなかったSMB(Small to Medium Business:中堅・中小企業)を4PLが介在することで3PLを利用できるようにしたサービスで、今後、成長が期待されるD2C(Direct to Consumer:製造者がダイレクトに消費者と取引をする)には欠くことのできないサービスである。

# ファイナンス4PL
4PLの社会実装に伴い、ポストファイナンス3PL、つまりファイナンス3PLを4PL化したファイナンス4PLの実現が見えてきた。ファイナンス4PLは、単に3PLを利用できない事業者に、物流機能と金融機能を提供するだけでなく、即時決済の可能性を示唆しており、各ステークフォルダのリスクをより軽減する。

ファイナンス4PLの実現にあたっては、みずほ銀行ら[^3]が従来のサプライチェーンを変えずに、つまりファイナンス3PLとして、物流業界の輸配送代金の早期資金化を実現するために、ブロックチェーン技術を使ったように、ファイナンス4PLにもブロックチェーンをプラットフォームとして利用することで信頼性を担保する必要がある。

また、グローバルな物流網から最適な配送ルートを決定するためには高速リアルタイム処理が必要であり、リザバーコンピューティング(再帰的ニューラルネットワークの特殊なモデルを一般化した概念)のような技術が実用化されれば、ファイナンス4PLのサービスがリリースされるのも遠くはない。なお、リザバーコンピューティングについては、稿を改めに言及したい。


[^1]:ファイナンス3PL
e-LogiT.com　物流ニュース 「エフロジ・フィナンシャル・パートナーズ／日本初の“ファイナンス型３ＰＬ”　サービスを開始」
https://www.e-logit.com/loginews/20090604×04.php

[^2]:4PL airhouse
https://www.airhouse.io/

[^3]:みずほ銀行ら
DIGITAL X 「みずほ銀行、物流の輸配送代金の早期資金化に向けたブロックチェーン技術を実証実験」
https://dcross.impress.co.jp/docs/usecase/002062.html
天秤AIのやり取りをGitHubにプッシュする

気になったことがあったら、すぐに天秤AIの三銃士(GPT-4o、Gemini、Claude)にまとめて聞いているけど、履歴をちゃんと管理しておきたいのでGit管理することにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25049/fc8b8901-6496-5c72-73e5-263373c9bf41.png)

できるだけ簡単にしたいので、履歴をダウンロードしたらファイルの右クリックでpushできるように右クリックメニューをカスタマイズ。

やり方は天秤AIに聞いたらGPT-4oが良い回答だったのでこちらを採用。以下抜粋。

---
コマンドプロンプトから実行できるようにする方法を解説します。バッチファイルでは、基本的に同様の手順を踏むことができますが、Windowsのcmd命令を用いて記述します。

以下は、上記のPowerShellスクリプトをバッチファイルに変換した例です：

### バッチファイルの例 (`upload_to_github.bat`)：

```bat
@echo off
setlocal

rem 引数として渡されたファイルのパスを取得
set "filePath=%~1"

rem ローカルGitリポジトリのディレクトリ
set "localRepoPath=C:\path\to\your\local\repository"
set "copyDestinationPath=%localRepoPath%\%~nx1"

rem リポジトリディレクトリに移動
cd /d "%localRepoPath%" || exit /b

rem 最新の状態を取得
git pull origin main || exit /b

rem ファイルをコピー
copy /Y "%filePath%" "%copyDestinationPath%" || exit /b

rem 変更をステージング
git add "%copyDestinationPath%" || exit /b

rem コミット（コミットメッセージを適宜変更）
set "commitMessage=Added file: %~nx1"
git commit -m "%commitMessage%" || exit /b

rem リモートにプッシュ
git push origin main || exit /b

echo ファイルはリモートリポジトリに正常にプッシュされました。

endlocal
```

### 使い方

1. **バッチファイルの作成**
   - 上記のスクリプトをコピーして、`upload_to_github.bat`という名前で保存します。ファイルパスを変更する際には「バッチファイル」と「.bat」の2種類の拡張子があるので、間違えないように注意してください。

2. **`SendTo`フォルダに配置**
   - `upload_to_github.bat`を`C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\SendTo`に配置します。これで、ファイルを右クリックし「送る」メニューからこのバッチを選択できるようになります。

3. **`localRepoPath`の修正**
   - `localRepoPath`を実際のローカルリポジトリのパスに置き換えてください。

4. **ブランチ名の確認**
   - スクリプトではGitのデフォルトブランチを`main`としています。異なる場合は適宜変更してください。

5. **認証情報**
   - GitHubにプッシュするための認証情報がコマンドプロンプトからアクセスできるように設定されていることを確認してください（SSHキーやGit Credential Managerなどを使用）。

- バッチファイルを利用することで、より簡単にファイルをリモートリポジトリにプッシュできるようになります。各ステップでエラーが発生した場合は、コード内の`exit /b`がエラーハンドリングを行い、処理を中断します。必要があれば、追加のエラーハンドリングやログを追加してデバッグしやすくすることができます。
---

天秤AIから履歴をダウンロード
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25049/39b88afe-4149-4a36-f21f-5ea6aae0e558.png)

ダウンロードフォルダからファイルを選択して右クリックの「送る」から作成したバッチのショートカットを選択するとコミットできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25049/6a0b4e57-80a3-37c0-2548-106439fda522.png)
ラベルを付け替えながら宛先まで送る

# LSR(Label Switch Router:ラベル・スイッチ・ルーター）
>MPLSパケットがLSR(Label Switch Router:ラベル・スイッチ・ルーター）に届くと、`ラベルをインデックスとしてテーブルを参照することで、出力先のリンクと新たなラベルが決定`される。

### 区別するためにラベルを付け直す
>`このラベル交換は、全ての仮装回線ネットワークで用いられている`。ラベルは`ローカルな意味しか持たず`、２つの異なるルーターが互いに無関係なパケットに同一のラベルが付与されることがある。フォワーディング先のルーターで`これらを区別できるようにするため、すべてのホップでラベルの付け直しを行う`必要がある。

# LER（Label Edge Router:ラベル・エッジ・ルーター）
>ホストやルーターの多くはMPLSを解釈できないため、いつ、どうのようにしてパケットにラベルを付加するのかという問題が出てくる。これは、IPパケットがMPLSネットワークの境界に到達した地点で行われる。

### MPLSネットワークを通るためラベルを追加する
>図5-63のLER（Label Edge Router:ラベル・エッジ・ルーター）が宛先IPアドレスやその他のフィールドを調べてパケットが通過すべきMPLS経路を決定し、パケットの先頭に適切なラベルを追加する。
### MPLSネットワーク内ではラベルを用いてパケットのフォワーディングを行う
>MPLSネットワーク内では、このラベルを用いてパケットのフォワーディングが行われる。

### MPLSネットワークの外へ出るとラベルは取り除かれる
>MPLSの反対側の境界に到達すると、ラベルはその役割を終え、パケットから取り除かれる。その先のネットワークからは、再び通常のIPパケットとなる。

# 同一のルーターやLANをエンドポイントに持つフローをFECに括る
>従来の仮装回線と異なる点は、`集約のレベル`である。フローごとに全く異なるラベル集合を用いることも確かに可能であるが、`同一のルーターやLANをエンドポイントに持つフローはグループ化`し、単一のラベルを用いる方が一般的である。一つのラベルにグループ化されたフローは同一の`FEC(Forwarding Equivalence Class:転送等価クラス)`に属すると言われる。これらのパケットは`すべて同じように転送される`ため、FECによって、パケットの行き先だけではなく、DiffServにおけるサービス・クラスを扱うこともできる。

# 仮装回線ルーティングでラベルとIPアドレスでフローを識別できるため最終的な宛先まで届けられる
>`従来の仮装回線ルーティングでは、最終的な宛先でフローを識別できなくなる`ため、`エンドポイントが異なる複数の経路を同一の仮装回線番号でグループ化できない`。一方、`MPLSでは、パケットがラベルに加えて最終的な宛先アドレスを持ち続ける`。ラベルヘッダーはラベル付けされた経路の終点で取り除かれ、そのあとはネットワーク層の宛先アドレスを用いた通常の方法でフォワーディングされる。

https://bookplus.nikkei.com/atcl/catalog/23/03/16/00728/
基本情報技術者試験向けかもしれない問題集

AIを使って問題を作成しています。


### Prompt:
`ITパスポートもしくは基本情報技術者試験に出てきそうな問題を作ってください。`


### 問題1 (プロジェクト管理)
プロジェクト管理の手法として知られる、タスクの依存関係を示す図はどれか。

1. ガントチャート
1. PERT図
1. ベン図
1. フローチャート

<details> <summary>解説</summary> 正解: 2. PERT図 解説: PERT図 (Program Evaluation and Review Technique) は、タスクの依存関係とスケジュールを視覚的に表現するために使用されます。 </details>

### 問題2 (ネットワーク)
以下のプロトコルのうち、ファイル転送に使用されるものはどれか。

1. HTTP
1. FTP
1. SNMP
1. SMTP

<details> <summary>解説</summary> 正解: 2. FTP 解説: FTP (File Transfer Protocol) は、ネットワーク上でファイルを転送するために使用されるプロトコルです。 </details>

### 問題3 (データベース)
データベースの設計において、ER図の「E」が表すものはどれか。

1. エンティティ
1. エレメント
1. エクスポート
1. エンコード

<details> <summary>解説</summary> 正解: 1. エンティティ 解説: ER図 (Entity-Relationship Diagram) では、「E」はエンティティを表し、データベース内の実体を示します。 </details>

### 問題4 (セキュリティ)
パスワードの強度を高めるために推奨される対策はどれか。

1. 短いパスワードを使用する
1. 同じパスワードを複数のサイトで使用する
1. パスワードに英数字と記号を含める
1. パスワードを紙に書いて保管する

<details> <summary>解説</summary> 正解: 3. パスワードに英数字と記号を含める 解説: パスワードの強度を高めるためには、英大文字、小文字、数字、および特殊文字を組み合わせることが推奨されます。 </details>

### 問題5 (アルゴリズム)
バブルソートアルゴリズムの特徴として正しいものはどれか。

1. 最小要素を見つけて前に移動させる
1. 隣接する要素を比較して交換する
1. 中央の要素を基準に分割する
1. ハッシュテーブルを使用する

<details> <summary>解説</summary> 正解: 2. 隣接する要素を比較して交換する 解説: バブルソートは、隣接する要素を比較し、必要に応じて交換することでリストをソートするシンプルなアルゴリズムです。 </details>

### 問題6 (ハードウェア)
ストレージデバイスの中で、最も高速なデータ読み書きが可能なものはどれか。

1. HDD
1. フロッピーディスク
1. CD-ROM
1. SSD

<details> <summary>解説</summary> 正解: 4. SSD 解説: SSD (Solid State Drive) は、HDD (Hard Disk Drive) よりも高速なデータ読み書きが可能なストレージデバイスです。 </details>

### 問題7 (ネットワーク)
IPv4アドレスの最大長はどれか。

1. 32ビット
1. 64ビット
1. 128ビット
1. 256ビット

<details> <summary>解説</summary> 正解: 1. 32ビット 解説: IPv4アドレスは32ビットのアドレス形式で構成され、約42億個のユニークなアドレスを提供します。 </details>

### 問題8 (情報セキュリティ)
サイバー攻撃の一つであるDDoS攻撃に関する説明として正しいものはどれか。

1. ウイルスを使って個人情報を盗む攻撃
1. サーバーに大量のリクエストを送ってサービスを停止させる攻撃
1. 不正なソフトウェアをインストールする攻撃
1. 電子メールを使って詐欺を行う攻撃

<details> <summary>解説</summary> 正解: 2. サーバーに大量のリクエストを送ってサービスを停止させる攻撃 解説: DDoS (Distributed Denial of Service) 攻撃は、複数のコンピュータからサーバーに大量のリクエストを送信し、サービスを過負荷にして停止させる攻撃です。 </details>

### 問題9 (システム開発)
システム開発において、ウォーターフォールモデルの代替として使われることが多い手法はどれか。

1. スクラム
1. カスケード
1. スパイラル
1. インクリメンタル

<details> <summary>解説</summary> 正解: 1. スクラム 解説: スクラムは、アジャイル開発手法の一つであり、ウォーターフォールモデルの代替として使用されることが多いです。短期間のスプリントを繰り返し、継続的に改善を行います。 </details>

### 問題10 (プログラミング)
データ構造の一つであり、LIFO (Last In, First Out) 方式で要素を取り出すものはどれか。

1. キュー
1. スタック
1. リスト
1. ツリー

<details> <summary>解説</summary> 正解: 2. スタック 解説: スタックは、LIFO方式 (最後に入れたものが最初に出る) でデータを取り出すデータ構造です。プログラムの実行や逆ポーランド記法の計算などで使用されます。 </details>
基本情報技術者試験向けかもしれない問題集

AIを使って問題を作成しています。


### Prompt:
`ITパスポートもしくは基本情報技術者試験に出てきそうな問題を作ってください。`


### 問題1 (プロジェクト管理)
プロジェクトのリスク管理において、リスクの発生確率と影響度を評価するために使用されるものはどれか。

1. SWOT分析
1. PERT図
1. リスクマトリックス
1. ベンチマーキング

<details> <summary>解説</summary> 正解: 3. リスクマトリックス 解説: リスクマトリックスは、リスクの発生確率と影響度を評価し、リスクの優先順位を決定するためのツールです。 </details>

### 問題2 (ネットワーク)
IPv6アドレスの形式はどれか。

1. 32ビット
1. 64ビット
1. 128ビット
1. 256ビット

<details> <summary>解説</summary> 正解: 3. 128ビット 解説: IPv6アドレスは128ビットのアドレス形式であり、より多くのデバイスをインターネットに接続できるように設計されています。 </details>

### 問題3 (データベース)
正規化の目的として正しいものはどれか。

1. データの重複を減らす
1. クエリの速度を向上させる
1. データのバックアップを取る
1. データベースの容量を増やす

<details> <summary>解説</summary> 正解: 1. データの重複を減らす 解説: 正規化は、データの重複を減らし、データの整合性を保つための手法です。これによりデータベースの効率的な運用が可能になります。 </details>

### 問題4 (セキュリティ)
SSL/TLSを使用していないHTTP通信に対して行われる攻撃はどれか。

1. フィッシング
1. 中間者攻撃
1. パスワードクラック
1. サイドチャネル攻撃

<details> <summary>解説</summary> 正解: 2. 中間者攻撃 解説: 中間者攻撃は、SSL/TLSが使用されていないHTTP通信に対して行われ、通信内容が盗聴または改ざんされるリスクがあります。 </details>

### 問題5 (アルゴリズム)
再帰関数に関する説明として正しいものはどれか。

1. 1回のみ呼び出される関数
1. 自身を呼び出す関数
1. 実行速度が最も速い関数
1. 入力に依存しない関数

<details> <summary>解説</summary> 正解: 2. 自身を呼び出す関数 解説: 再帰関数は、自身を呼び出すことによって問題を分割し解決する関数です。通常、基底条件を持ち、それに到達することで再帰呼び出しが終了します。 </details>

### 問題6 (ハードウェア)
データを一時的に記憶し、CPUとメインメモリの間でデータの転送速度を改善するために使用されるメモリはどれか。

1. ROM
1. HDD
1. キャッシュメモリ
1. 仮想メモリ

<details> <summary>解説</summary> 正解: 3. キャッシュメモリ 解説: キャッシュメモリは、CPUとメインメモリの間に位置し、データの転送速度を改善するために使用される高速な揮発性メモリです。 </details>

### 問題7 (ネットワーク)
インターネット上でドメイン名をIPアドレスに変換するためのシステムはどれか。

1. DNS
1. DHCP
1. FTP
1. SMTP

<details> <summary>解説</summary> 正解: 1. DNS 解説: DNS (Domain Name System) は、インターネット上でドメイン名をIPアドレスに変換するシステムです。これにより、人間にとって覚えやすいドメイン名を使用してインターネットリソースにアクセスできます。 </details>

### 問題8 (情報セキュリティ)
以下のうち、物理的なセキュリティ対策として適切なものはどれか。

1. ファイアウォールの設置
1. データ暗号化の実施
1. バイオメトリクス認証の導入
1. ウイルス対策ソフトのインストール

<details> <summary>解説</summary> 正解: 3. バイオメトリクス認証の導入 解説: 物理的なセキュリティ対策として、バイオメトリクス認証（例：指紋認証や顔認証）の導入が効果的です。これにより、許可された人物のみが物理的な施設やシステムにアクセスできるようになります。 </details>

### 問題9 (システム開発)
アジャイル開発のスプリントレビューで行うことはどれか。

1. 次のスプリントの計画を立てる
1. スプリントの進捗を確認し、成果物を発表する
1. スプリントのタスクを割り当てる
1. プロダクトバックログの作成

<details> <summary>解説</summary> 正解: 2. スプリントの進捗を確認し、成果物を発表する 解説: スプリントレビューでは、スプリントの進捗を確認し、成果物をステークホルダーに発表します。このフィードバックを基に、今後の改善点を見出します。 </details>

### 問題10 (プログラミング)
次のプログラム言語のうち、オブジェクト指向プログラミング言語であるものはどれか。

1. C
1. COBOL
1. Java
1. Assembly

<details> <summary>解説</summary> 正解: 3. Java 解説: Javaは、オブジェクト指向プログラミングをサポートする言語であり、クラスやオブジェクトを使用してプログラムを構築します。 </details>
基本情報技術者試験向けかもしれない問題集

AIを使って問題を作成しています。

### Prompt:
`ITパスポートもしくは基本情報技術者試験に出てきそうな問題を作ってください。`

### 問題1 (ネットワーク)
以下のプロトコルのうち、電子メールの送受信に使用されるものはどれか。

1. HTTP
1. FTP
1. SMTP
1. Telnet

<details> <summary>解説</summary> 正解: 3. SMTP 解説: SMTP (Simple Mail Transfer Protocol) は、電子メールの送信に使用されるプロトコルです。受信にはPOP3やIMAPが使用されます。 </details>

### 問題2 (データベース)
リレーショナルデータベースにおいて、データの整合性を保つために使用されるキーはどれか。

1. 外部キー
1. 主キー
1. 副キー
1. 並列キー

<details> <summary>解説</summary> 正解: 2. 主キー 解説: 主キー (Primary Key) は、テーブル内の各レコードを一意に識別するためのフィールドであり、データの整合性を保つ役割を果たします。 </details>

### 問題3 (セキュリティ)
コンピュータウイルスに感染した場合に行うべき最初の対策はどれか。

1. ウイルス対策ソフトの定義ファイルを更新する
1. コンピュータをシャットダウンする
1. インターネット接続を切断する
1. ウイルス対策ソフトでスキャンを実行する

<details> <summary>解説</summary> 正解: 3. インターネット接続を切断する 解説: ウイルス感染が疑われる場合、まずネットワーク接続を切断することで、ウイルスが他のシステムに拡散するのを防ぐことが重要です。 </details>

### 問題4 (アルゴリズム)
以下のうち、線形探索アルゴリズムとして正しいものはどれか。

1. バイナリサーチ
1. リニアサーチ
1. ハッシュサーチ
1. 木探索

<details> <summary>解説</summary> 正解: 2. リニアサーチ 解説: リニアサーチ (Linear Search) は、データセットを順番に確認して目的の要素を探す探索アルゴリズムです。 </details>

### 問題5 (ソフトウェア開発)
アジャイル開発の特徴として正しいものはどれか。

1. 長期間の詳細な計画に基づいて進行する
1. 順次進行で各フェーズを完了させる
1. 定期的にソフトウェアのリリースとフィードバックを得る
1. 決められた手法に厳密に従う

<details> <summary>解説</summary> 正解: 3. 定期的にソフトウェアのリリースとフィードバックを得る 解説: アジャイル開発は、短い開発サイクルでソフトウェアをリリースし、フィードバックを得ながら進行することが特徴です。 </details>

### 問題6 (ハードウェア)
メモリの種類で、揮発性メモリに分類されるものはどれか。

1. ROM
1. HDD
1. RAM
1. SSD

<details> <summary>解説</summary> 正解: 3. RAM 解説: RAM (Random Access Memory) は揮発性メモリであり、電源が切れるとデータが消失します。 </details>

### 問題7 (ネットワーク)
OSI基本参照モデルの第3層に該当するものはどれか。

1. 物理層
1. データリンク層
1. ネットワーク層
1. トランスポート層

<details> <summary>解説</summary> 正解: 3. ネットワーク層 解説: OSIモデルの第3層はネットワーク層であり、パケットのルーティングや転送を担当します。 </details>

### 問題8 (情報セキュリティ)
HTTPSで使用される暗号化技術はどれか。

1. AES
1. RSA
1. DES
1. MD5

<details> <summary>解説</summary> 正解: 2. RSA 解説: HTTPSは公開鍵暗号方式であるRSAを使用して、データの暗号化と安全な通信を実現します。 </details>

### 問題9 (システム開発)
ウォーターフォールモデルの特徴として正しいものはどれか。

1. フェーズが並行して進行する
1. 各フェーズが順次進行する
1. 短いサイクルで反復する
1. フィードバックループが多い

<details> <summary>解説</summary> 正解: 2. 各フェーズが順次進行する 解説: ウォーターフォールモデルは、各フェーズが順次進行する開発モデルであり、フェーズごとに完了してから次のフェーズに進みます。 </details>

### 問題10 (プログラミング)
プログラムのロジックを視覚的に表現するために使用される図はどれか。

1. ER図
1. フローチャート
1. ガントチャート
1. PERT図

<details> <summary>解説</summary> 正解: 2. フローチャート 解説: フローチャートは、プログラムのロジックやフローを視覚的に表現するために使用される図です。 </details>