OmniAICreator/Qiita-1.07M huggingface dataset:
【WordPress】Lightningのモバイルメニューのドロップダウン開閉ボタンにアニメーションをつける

# はじめに
私は普段Javaなどをメインにアプリケーション開発を行っていますが、ひょんなことから自社HP更改でWordPressを使用しての実装を任されました。
WordPressはまだ初めて触って1週間も経っていない状態のため、気づいたこと・使えそうなことは備忘も兼ねて記録しようと思います。

## 環境
- WordPress：バージョン6.7.2
- テーマ：Lightning G3（無料版）
- プラグイン（Lightningの推奨プラグイン）
    - VK All in One Expansion Unit
    - VK Block Patterns
    - VK Blocks

# モバイルメニューの子ページリスト
モバイルメニュー（ページ幅が992px未満のみ表示）では、メニューで設定したサブ項目がドロップダウンで表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2783959/30a22d7c-ca5d-4ccf-8405-234ade173f82.png)

## デフォルト
デフォルトでは「下矢印」⇔「×」でアニメーションなどはありません。
悪くはないのですが、個人的に「×」は下矢印に対応していないと感じ、
下矢印の「開く」ボタンを上下反転させ、「閉じる」ボタンとして使用することにしました。

![デフォルト.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2783959/d9268937-885d-4a62-a375-8630aaefb971.gif)
※カーソルで隠れてしまい見えにくく申し訳ありません。。。


## 矢印を上下反転させる
「×」の代わりに下矢印の画像を上下反転したものを使用します。

### 追加CSS
WordPress管理画面 → 外観 → カスタマイズ → 追加CSS を開き、以下のソースを追加します。

```css:追加CSS
/* モバイルメニューのドロップダウン開閉 */
.acc-btn.acc-btn-close {
	background: url(https://[WordPressアドレス]/wp-content/themes/lightning/_g3/inc/vk-mobile-nav/package/images/vk-menu-acc-icon-open-black.svg);
	transform: rotateX(180deg);
}
```

### 結果
上下がくるっと反転し開閉していることが分かりやすくなった！（気がします）

![上下反転.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2783959/94eb4e6c-2983-42a4-ae9e-359d1fae9e77.gif)


### 解説
「閉じる」ボタンに`background`で「開く」ボタンと同じ画像URLを指定します。
※「https://」に続くアドレスはサイトアドレスではなくWordPressアドレスなので注意してください。
　WordPress管理画面 → 設定 → 一般 から確認できます。

`transform`では要素の伸縮や移動を指定できます。
今回は回転に使用する`rotateX`でX軸に180°回転するように指定しました。
他の記述を同様に追加すれば、様々な動きが可能になりそうです。

CSSでは「閉じる」ボタンのみ装飾していますが、
開閉時のどちらもアニメーションしてくれるのはありがたいですね。
（すみません、理屈は分かりません。。。）

## 参考記事
`transform`の使い方はこちらの記事を参考にさせていただきました。

https://qiita.com/fumu238/items/6ca8a067fea273948212

# 最後に
地味で拙い記事でしたが、読んでいただきありがとうございました。
少しでもお役に立てれば幸いです。

WordPresには様々なテーマ・プラグインがありますが、無料版ではできることが限られます。
有料版の方が多機能ですが、追加CSSを使ってできるカスタマイズの幅はまだまだありそうです。
また発見があったときは記事にしたいと思います。
Proxmox VE 8にてアップデート後WebUIでログインできなくなってしまった対処法

# 概要
Proxmoxで自宅サーバーを構築しているPC（Mac mini）のアップデートをやってから再起動をしたら、何故かWebUIで2FAのコードを入力すると「Login failed」と出てログインできなくなってしまった。
WebUIはログインできないためrootのパスワードを疑ったが、SSHからはログインできるためProxmox側で何かエラーを起こしているのではないかと踏んだ。

# 構成
- Mac mini 2018
- ユーザーは2FAを追加済

## バージョン
- Proxmox 8.3.5
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294563/6ad6d531-bdc7-4e86-8ce0-b8d629336086.png)

# 原因
何かの拍子でProxmox側に保存されていた2FAの生成コードがうまく機能していなかった。

# 解決
SSHを用いていったんユーザーから2FAを削除することで解決した。

# コマンド

## 1 該当ユーザーのIDを確認する
```pveum user list```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294563/d042af98-30c6-4da5-8872-6b09eeaa8f13.png)

## 2 2FAを無効化する。
```pveum user tfa delete <ユーザーID>```

## 3 WebUIにて正常にログインできるか確認する
ログイン出来たらばんざい。

# 〆
家のインターネット環境が非常に悪いのにほとんどネットワーク越しに作業してるので電源をプチプチ切っていたら認証情報がぶっ飛んだんじゃないかと思う。**よい子はきちんとしたネットを使おうね！**

# 参考URL
- https://qiita.com/KEINOS/items/3ff667298b310a69f42c
よくクラスタ関連で認証サーバーまでたどりつけずエラーを吐くらしいが、当方はクラスタを構築しておらず、この記事で単純な認証サーバーのエラーだと考えれた。**Thank you!**
プログラミング不要でAIを業務に導入！

![Webinar Go-live｜Yamamoto Dify｜Main Banner V1.1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055898/3a4f593f-41ea-44d1-a3a6-7911fe7304d9.png)

Difyが実現する、シンプルかつ強力なAI活用とは？

❚　AIの力で、ビジネスの在り方が変わる時代に
AI（人工知能）はもはやIT部門にとどまらず、マーケティング、カスタマーサポート、会計、営業など、あらゆる部門で導入が進んでいます。ある調査によると、全体の72%の企業が、何らかの形でAIを業務に取り入れていると言われています。
しかしその一方で、期待通りの成果を出せたAIプロジェクトはわずか20%。
➞　なぜ、多くのAI導入が思うようにいかないのでしょうか？

❚　80%のAI導入が失敗する理由
問題はAI技術そのものではなく、AIをどう既存業務に組み込むかにあります。以下のような課題が、AI活用の妨げになっています：
 ・データの品質が不統一・未整備で、AIが正確に学習できない
 ・ソフトウェア開発に時間とコストがかかり、ビジネスのスピードに追いつかない
 ・AIに精通したエンジニアが社内におらず、導入や最適化が進まない
 ・現行システムとの連携が難しく、業務に支障をきたす
プログラミングができない、もしくはITリソースが限られている企業にとって、AI導入は特に大きな壁となっています。

❚　解決策：ノーコードでAIアプリを作れる「Dify」
Difyは、コードを書くことなく、チャットボットや自動ワークフロー、AIエージェントを簡単に作成できるオープンソースのAIアプリ開発プラットフォームです。
 LLM（大規模言語モデル）を活用して、直感的なUIでAIを構築できるのが大きな特長です。
Difyを活用することで：
 ・ノーコード／ローコードで、目的に合わせたAIアプリをすぐに開発可能
 ・CRMや社内システムとの連携もスムーズ
 ・数ヶ月かかっていた開発が、数日で完了
 ・高額な技術者に依存せず、コスト削減を実現
 ・非エンジニアのスタッフでも扱えるため、全社的なAI活用が進む

【無料ウェビナー開催】
アイデアをカタチに！Difyで加速するAI業務活用
Miichisoftは、Difyを使ったAIアプリ構築の実例を紹介する無料ウェビナーを開催します。
 社内チャットボットから業務支援AIまで、Difyの活用法を実演します。
 
🧩 当日の内容：
 ・Difyで業務プロセスを自動化するライブデモ
 ・よく使われる3つのAIモデルの紹介（RAGチャットボット、自動ワークフロー、インテリジェントエージェント）
 ・ノーコードで作るAIアプリ開発手法

👨‍💼 登壇者：
 山本 輝昭（AI戦略コンサルタント）
 ・フォーチュン・グローバル500企業の戦略顧問を歴任
 ・大手小売企業のグローバル財務改革を主導
 ・多数の企業にAI導入を支援
📅 開催日時： 2025年4月24日（木）16:00～17:00（日本時間）
 💻 形式： Zoom（オンライン）
 🎟 参加費： 無料（事前登録制）
 👉 参加申込はこちら

「AIを試したいけど技術的なハードルが高い」——そんな方にこそ最適な機会です。
 ぜひこの機会に、Difyで実現するスマートなAI活用をご体験ください！
PDF を PPT に変換することにまだ不安がありますか? 2 つの非常に効率的な方法を共有します。必ずあなたに合った方法が見つかります。


1️⃣ ワンクリック変換方法
👉 ComPDF オンラインツールを使用して、[PDF を PPT に直接変換します](https://www.compdf.com/pdf-tools/pdf-to-powerpoint#utm_source=referral&utm_medium=qiita_pdftoppt_20250408)。 PDF をアップロードし、数秒で PPT に変換します。 1 つの PDF は 1 つの PPT に対応し、レイアウトはほぼロスレスです。

レポート作成やコースウェアの整理に適しており、時間を大幅に節約できます。コンテンツの手動調整も可能
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789769/549153f6-c3e6-4c91-9c6d-03fa0b6f83b8.png)



2️⃣ AIインテリジェント変換方法👉
PDF​​データをJSONまたはテキスト形式に抽出し（ComIDPの[データ抽出ツ](https://www.compdf.com/demo/idp/document-extraction#utm_source=referral&utm_medium=qiita_pdftoppt_20250408)ールまたはその他のツールを使用）、AIツール（ iFlytek Zhiwenなど）を使用してPPT構造に整理します。ComIDPは、PDFファイル内のテキスト、画像、表、その他の要素の正確な抽出をサポートします。
👉 PPT AI生成ツール https://zhiwen.xfyun.cn/dashboard?type=document を直接使用します（コンテンツの認識と抽出の精度は保証されません）

利点は、選択できるテンプレートがあり、生成された PPT が横向き形式になることです。内容を再度理解し、PPT に書き込みます。しかし、現時点では AI は十分に賢くありません。 PPT の各ページの内容が適切かどうかを確認し、レイアウトの詳細を手動で調整する必要があります。レイアウトに対する要件が高く、時間に余裕がある場合にのみ適しています。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3789769/4a0f4d59-7260-4ea9-8d1d-d2b60dcd9208.png)
ハッカソン個人備忘録⑯：mysqlが「command not found」になるときの対処法【Intel/M1対応】

## はじめに
MacでMySQLクライアントをインストールしたにもかかわらず、`mysql` コマンドが使えないという状況に直面する人は少なくありません。

:::note warn
**特にIntel MacとApple Silicon Macでパスの扱いが異なるため、混乱が生じがちです。**
:::

本記事ではその原因と解決方法をまとめています。

## 書こうと思ったきっかけ
開発環境構築中、`mysql` コマンドがどこにも見つからず作業が進められなかったことがありました。

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

似たような問題で悩んでいる方が多いと感じたため、備忘録も兼ねてこの記事を書くことにしました。

## Macでmysqlコマンドが見つからないときの対処法

Homebrew経由でMySQLクライアントをインストールした後に、`mysql` コマンドが見つからないというエラーが出ることがあります。以下は、実際のやり取りと原因、そして解決方法をまとめた記事です。

---

### 発生したエラー
```bash
 ~/Desktop   mysql --version
zsh: command not found: mysql

 ~/Desktop   mysql -version
zsh: command not found: mysql

 ~/Desktop   mysql -h xxx.ap-northeast-1.rds.amazonaws.com -u youruser -p
zsh: command not found: mysql
```

---

### 原因の調査

`which mysql` コマンドで確認しても `mysql not found` となり、`/opt/homebrew/opt/mysql-client/bin` にもディレクトリが存在しませんでした。

しかし、以下のコマンドで確認すると `/usr/local/opt/mysql-client/bin` にしっかりと mysql 関連コマンドが存在していました。

```bash
 ~/Desktop   ls /usr/local/opt/mysql-client/bin
mysql                     mysqladmin                mysqlimport
mysql_config              mysql_config_editor       mysqlbinlog
mysql_secure_installation mysqldump                 mysqlshow
```

つまり、**MySQLクライアントはインストール済みだが、パスが通っていなかった**ということになります。

---

### 解決方法

1. `.zshrc` ファイルを開き、以下のパスを追加します：

```bash
export PATH="/usr/local/opt/mysql-client/bin:$PATH"
```

2. その後、ターミナルで以下を実行して設定を反映させます：

```bash
source ~/.zshrc
```

3. 正しく設定されたか確認：

```bash
which mysql
mysql --version
```

---

### 解説：なぜこうなった？

Apple Silicon（M1/M2）MacではHomebrewのデフォルトパスが`/opt/homebrew/`になりますが、Intel Macでは`/usr/local/`になります。

最初に設定していた以下のパス：

```bash
export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"
```

これはApple Silicon向けのパスであり、Intel Mac環境では正しく機能しません。今回はIntel Macだったため、正しいパスである：

```bash
/usr/local/opt/mysql-client/bin
```

を指定することで解決しました。

---

### 接続確認

設定後、以下のコマンドでMySQLに接続できるか確認します：

```bash
mysql -h xxx.ap-northeast-1.rds.amazonaws.com -u youruser -p
```

パスワードを求められたら、正常に接続できている証拠です。

---

## まとめ

- `mysql: command not found` が出たら、まずパスが正しいか確認
- Macのチップ（Intel / M1 / M2）によりHomebrewのパスが異なる
- パスを `.zshrc` に正しく追記し、 `source ~/.zshrc` で反映
- 同様のエラーでつまずいている人は意外と多いので、冷静にパスの確認から進めましょう

同様の問題に直面した方の参考になれば幸いです！
MySQLの外部アクセスを試してみた

この記事では、

https://qiita.com/tk_miya/items/175192da46d7540b2a95

で作成したOCIコンピュート上のMySQLへの外部アクセスを試してみます。

新規ユーザを作成(接続対象ユーザが未作成の場合):

```sql
create user 'testuser'@'%' identified by 'WelCome123#123#';
```

* 外部アクセスのIPを絞る場合は「%」部分に任意のアドレスを指定する

新規ユーザに権限を付与する:

```sql
grant all privileges on *.* to 'testuser'@'%';
```

OSのfirewallでポートを許可する:

```sql
sudo firewall-cmd --permanent --add-port=3306/tcp
```

```sql
sudo firewall-cmd --reload
```
確認:
```sql
sudo firewall-cmd --list-ports
```

```sql
[opc@mysqlsource ~]$ sudo firewall-cmd --list-ports
3306/tcp
```

別の環境から外部接続を試す:

```sql
mysql -h <コンピュートのIPアドレス> --port <ポート番号> -u <ユーザ名> -p
```

```sql
[opc@mysqltarsrv ~]$ mysql -h 10.0.0.5 --port 3306 -u root -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 27
Server version: 8.4.3 MySQL Community Server - GPL

Copyright (c) 2000, 2024, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>
```

接続確認コマンド:

```sql
mysqladmin ping -h 10.0.0.5 --port 3306 -u root -p
```

```sql
[opc@mysqltarsrv ~]$ mysqladmin ping -h 10.0.0.5 --port 3306 -u root -p
Enter password: 
mysqld is alive
```

いｊ
ハッカソン個人備忘録⑮：Homebrewで始める！MySQLクライアントの導入とRDS接続まで整理してみた

## はじめに

Amazon RDS はクラウド上で簡単にデータベースを利用できる非常に便利なサービスですが、初めて接続する際には手順や環境設定で戸惑うことがあります。

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

この記事では、Mac 環境における RDS（MySQL）への接続方法について、コマンドラインでの接続方法からエラーへの対処法までを解説します。

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

あるとき、RDS に接続しようとして `mysql: command not found` のエラーに出会い、意外と環境構築がスムーズにいかないことに気づきました。自分自身の備忘録として、また同じような悩みを持つ方の助けになればと思い、この記事をまとめることにしました。

---

Amazon RDS の MySQL に接続するための手順をまとめました。対象の RDS インスタンスは以下のとおりです：

```
RDSのエンドポイント名
```

---

## 1. 接続コマンド
RDS（MySQL）に接続するには、以下のような `mysql` コマンドを使用します：

```bash
mysql -h RDSのエンドポイント名 -u ユーザー名 -p
```

### 各オプションの意味：
- `-h`：ホスト名（RDSのエンドポイント）
- `-u`：MySQLのユーザー名
- `-p`：パスワード入力を求めるプロンプトが表示されます

### 例：ユーザー名が admin の場合
```bash
mysql -h RDSのエンドポイント名 -u admin -p
```
パスワードを入力すれば、RDSのMySQLに接続できます。

ポートを明示的に指定したい場合は `-P` オプションを追加します（MySQL のデフォルトポートは 3306）：

```bash
mysql -h RDSのエンドポイント名 -P 3306 -u admin -p
```

---

## 2. "mysql: command not found" のエラーが出た場合

Mac のターミナルで `mysql` コマンドが見つからない場合、MySQL クライアントがインストールされていない可能性があります。

### ✅ 対処方法：MySQL クライアントのインストール

### 方法①：Homebrew を使ってインストール（おすすめ）

1. Homebrew が入っているか確認：
```bash
brew --version
```

2. 入っていない場合は以下でインストール：
```bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

3. MySQL クライアントをインストール：
```bash
brew install mysql-client
```

4. パスを通すために `.zshrc` に以下を追記：
```bash
export PATH="/opt/homebrew/opt/mysql-client/bin:$PATH"
```

5. 設定を反映：
```bash
source ~/.zshrc
```

6. 再度確認：
```bash
mysql --version
```

---

## 3. 接続できないときのチェックリスト
- セキュリティグループのインバウンドルールで、3306 番ポートが許可されているか
- アクセス元の IP アドレスが許可されているか
- DB インスタンスが起動しているか

---

## まとめ

Mac 環境で RDS に接続するには、まず MySQL クライアントを正しくインストールし、基本的なコマンドを覚えておくことが大切です。

:::note warn
***また、接続できないときにはセキュリティ設定やインスタンスの状態もあわせて確認しましょう。***
:::

この記事が、スムーズなRDS接続の一助となれば幸いです！
単語のカウントFINAL問題　Map.keys()でシンプルに！

これまで解いてきたことを活かして、単語のカウント最終問題を解いたから解説するよ！

## <br>📌 問題概要

与えられた半角スペース区切りの単語列から、
登場順に単語とその出現回数を出力する。

<br>💡 入力例
```
red green blue blue green blue
```
✅ 出力例
```
red 1
green 2
blue 3
```

https://paiza.jp/works/mondai/c_rank_skillcheck_archive/word-count


## <br>💥 初めの実装（標準入力省略）
前回のコードをつかって
```js
const words = input.split(" ");
const dict = new Map();
const order = []; // 単語の出現順を記録

words.forEach(word => {
    if (!dict.has(word)) {
        dict.set(word, 0);
        order.push(word);
    }
    dict.set(word, dict.get(word) + 1);
});

// 出現順に単語とカウントを出力
order.forEach(word => console.log(word, dict.get(word)));
```


## <br>✨ 改善版コード

🚀 改善ポイント

✅カウントの初期化を `set(word, 0)` せずに `set(word, 1)` にする
　 初回の `set` 時に `0` にして、すぐに `+1` するのは無駄
　 `set(word, 1)` にすれば `+1` の処理が不要になる
<br> ✅ `order` を配列ではなく `Map.keys()` を使う
 　`order` 配列を使わなくても `Map.keys()` でキーの順番を保持できる
 　`Map` はキーを挿入順に保持する特性があるので `order` は不要

```js
const words = input.split(" ");
const dict = new Map();

words.forEach(word => {
    dict.set(word, (dict.get(word) || 0) + 1);
});

// 挿入順に単語と出現回数を出力
for (const word of dict.keys()) {
    console.log(word, dict.get(word));
}
```

### <br>🛠 改善点の説明
✅カウントの初期化を `(dict.get(word) || 0) + 1` で処理
 　`dict.get(word) || 0` により `undefined` の場合は `0` にする
 　`set(word, (dict.get(word) || 0) + 1)` にすれば `if` 文不要

✅`order` を削除し、`dict.keys()` を使う
 　`order` を作らなくても `Map.keys()` で挿入順にアクセス可能

✅`forEach` ではなく `for…of` を使う


### <br>💡 まとめ

Map の特性を活かせば、余計な変数を減らせてコードがスッキリ！ 「データ構造の理解 = コードの最適化」 だと実感した。

<br><br>[🔗 僕の失敗談と解決話！](https://paizabeginner.wordpress.com/2025/04/08/paiza%e3%81%a7%e5%9f%ba%e6%9c%ac%e3%83%9e%e3%82%b9%e3%82%bf%e3%83%bc%ef%bc%9a%e5%8d%98%e8%aa%9e%e3%81%ae%e3%82%ab%e3%82%a6%e3%83%b3%e3%83%88final%e5%95%8f%e9%a1%8c/)
英語の勉強になる。おすすめプロンプト


```text
前置きは不要です。送られた写真に基づいて、英語長文を作成してください。
```
```text
前置きは不要です。即座に英語長文を作成してください。Certainlyもいらない。
```
```text
前置きは不要です。即座にTOEIC英語長文を作成してください。Certainlyもいらない。
出力形式  
スラッシュ和訳のみを出力する。  

具体例：
"I am writing / a Python program / to perform arithmetic operations."
私は書いています。/ Pythonプログラムを / 算術演算を行うために。  

見出しとして「Slashed Translation:」を付ける。  

English Textは出力しない。Slashed Translationのみ出力する。


```
```text
要件定義
写真に基づいた英語長文の作成  
送られた写真の内容を基に、英語で長文を作成する。  

写真の内容を解説する形で英語長文を作成する。

英語長文をスラッシュ和訳で解釈  
作成した英語長文を細かく区切ってスラッシュ（/）で分割する。  

各区切りに対して日本語訳を対応させ、スラッシュ和訳形式で出力する。  

スラッシュの数は多めに設定し、細かく分割する。  

ピリオド（.）が来たら改行する。

出力形式  
スラッシュ和訳のみを出力する。  

具体例：
"I am writing / a Python program / to perform arithmetic operations."
私は書いています。/ Pythonプログラムを / 算術演算を行うために。  

見出しとして「Slashed Translation:」を付ける。  

English Textは出力しない。Slashed Translationのみ出力する。

前置きの省略  
前置きや説明は不要で、直接スラッシュ和訳を出力する。



```



![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4043781/856edee3-6509-454d-acb1-a8c2ebd50660.png)


https://translate.google.com/?sl=en&tl=ja&op=translate
Git初心者のための最低限の参考書

## Git初心者のための参考書

### 1. Gitとは
Gitは「バージョン管理システム」の一種で、誰が・いつ・どのファイルに・どんな変更を加えたかを記録できます。

#### バージョン管理のメリット
- 履歴を時系列で残せる
- 以前の状態に戻せる
- チームでの共同作業が容易

#### 簡単なLinuxコマンド
```bash
ls       # ディレクトリの内容表示
ls -a    # 隠しファイルも含めて表示
mkdir    # ディレクトリ作成
rm       # ファイル削除
cp       # ファイルコピー
mv       # ファイル移動/名前変更
```

---

### 2. Gitを始める

#### 新規プロジェクトをGitで管理する
```bash
git init  # リポジトリ新規作成
```
- リポジトリとは：変更履歴を保存する場所

#### 既存のプロジェクトをGitで管理する
プロジェクトフォルダに移動して：
```bash
git init
```

---

### 3. Gitの基本ワークフロー
```bash
git add ファイル名     # ステージングエリアへ追加
git commit -m "メッセージ"  # ローカルに保存
git push origin master    # リモートリポジトリへ送信
```

#### ステージングエリアとは？
複数の変更の中から、どれをコミットするか選べる中間エリア。
```bash
git add .  # すべての変更をステージングエリアへ
```

#### コミットメッセージの書き方
```
1行目：変更内容の要約
（2行目：空行）
3行目：変更理由や詳細説明
```

#### 状況確認
```bash
git status  # 現在の状態（変更点）を確認
```

---

### 4. 変更履歴を確認
```bash
git log         # 詳細ログ
  --oneline     # 一行表示
  -p            # 差分も表示
  -n 3          # 直近3つのログ
```

---

### 5. 差分の確認
```bash
git diff           # 作業中の変更

# ステージとの差分
git diff --staged

# 最新コミットとの違い
git diff HEAD
```

---

### 6. GitHubと連携（リモートリポジトリ）

#### リモートリポジトリを登録
```bash
git remote add origin https://github.com/user/repo.git
```

#### プッシュ
```bash
git push origin master  # masterブランチを送信
```

#### ブランチを指定してプッシュ
```bash
git push origin feature  # featureブランチを送信
```

---

### 7. Gitで管理したくないファイル
`.gitignore` に記述。
```text
# 例：
*.log
.env
node_modules/
```

すでにコミットしたものを外すには：
```bash
git rm --cached ファイル名
```

---

### 8. ファイル操作とGit

#### ファイル削除
```bash
rm ファイル名
```
Gitで反映させるには：
```bash
git rm ファイル名
git commit -m "delete file"
```

---

### 9. ブランチとマージ（チーム開発）

#### ブランチとは？
作業の分岐（並行作業が可能）
```bash
git branch 新しいブランチ名   # ブランチ作成
git checkout 新しいブランチ名 # ブランチ切り替え
```

#### マージとは？
他のブランチの変更を現在のブランチに統合
```bash
git checkout main
git merge feature  # featureブランチをmainに統合
```

#### コンフリクト（衝突）の解消
- どちらの変更を残すか手動で編集
- 編集後：
```bash
git add 衝突したファイル
git commit -m "resolve conflict"
```

---

### 補足：GitHubにリポジトリをプッシュする手順（新規）
1. GitHubで新しいリポジトリを作成
2. 表示されたコマンド群をコピー：
```bash
git remote add origin https://github.com/ユーザー名/リポジトリ名.git
git branch -M main
git push -u origin main
```

---

### まとめ図（基本の流れ）
```text
[作業ディレクトリ] -- git add --> [ステージ] -- git commit --> [ローカルリポジトリ] -- git push --> [リモートリポジトリ]
```

この流れを何度も練習しながら覚えていきましょう！
Windowsショートカットキー 

、**Windowsのタブ・ウィンドウ操作に関するショートカットキー50選** をマークダウン表形式でまとめました。  

---

##  Windows タブ・ウィンドウ操作ショートカットキー 一覧（50個）

| #  | 操作内容 | ショートカットキー |
|----|----------|--------------------|
| 1  | 次のタブに移動 | `Ctrl + Tab` または `Ctrl + PgDn` |
| 2  | 前のタブに移動 | `Ctrl + Shift + Tab` または `Ctrl + PgUp` |
| 3  | 最後のタブに移動 | `Ctrl + 9` |
| 4  | 1～8番目のタブに移動 | `Ctrl + 1` ～ `Ctrl + 8` |
| 5  | 新しいタブを開く | `Ctrl + T` |
| 6  | タブを閉じる | `Ctrl + W` または `Ctrl + F4` |
| 7  | 閉じたタブを復元 | `Ctrl + Shift + T` |
| 8  | 新しいウィンドウを開く | `Ctrl + N` |
| 9  | シークレットウィンドウを開く | `Ctrl + Shift + N` |
| 10 | アドレスバーにフォーカス | `Ctrl + L` または `Alt + D` |
| 11 | ページを再読み込み | `Ctrl + R` または `F5` |
| 12 | 強制再読み込み | `Ctrl + Shift + R` または `Ctrl + F5` |
| 13 | ページ内検索 | `Ctrl + F` |
| 14 | 検索バーから検索 | `Ctrl + E` または `Ctrl + K` |
| 15 | ページを保存 | `Ctrl + S` |
| 16 | 印刷ダイアログを開く | `Ctrl + P` |
| 17 | ダウンロード表示 | `Ctrl + J` |
| 18 | 履歴を開く | `Ctrl + H` |
| 19 | ブックマークマネージャー | `Ctrl + Shift + O` |
| 20 | ブックマーク追加 | `Ctrl + D` |
| 21 | ページをズームイン | `Ctrl + +` |
| 22 | ページをズームアウト | `Ctrl + -` |
| 23 | ズームリセット | `Ctrl + 0` |
| 24 | 全画面表示 | `F11` |
| 25 | 開発者ツール | `Ctrl + Shift + I` または `F12` |
| 26 | ソースを表示 | `Ctrl + U` |
| 27 | ページの先頭にスクロール | `Home` |
| 28 | ページの末尾にスクロール | `End` |
| 29 | スクロールダウン | `Space` |
| 30 | スクロールアップ | `Shift + Space` |
| 31 | 前のページに戻る | `Alt + ←` |
| 32 | 次のページに進む | `Alt + →` |
| 33 | 検索候補を選択 | `↓` または `↑` |
| 34 | URLを新しいタブで開く | `Alt + Enter`（アドレスバーで） |
| 35 | 新しいフォルダを作成 | `Ctrl + Shift + N`（エクスプローラー） |
| 36 | 現在のウィンドウを閉じる | `Alt + F4` |
| 37 | アプリを切り替える | `Alt + Tab` |
| 38 | 仮想デスクトップ切り替え | `Ctrl + Win + → / ←` |
| 39 | 新しい仮想デスクトップ | `Ctrl + Win + D` |
| 40 | 現在の仮想デスクトップを閉じる | `Ctrl + Win + F4` |
| 41 | タスクビューを開く | `Win + Tab` |
| 42 | スナップ（左半分） | `Win + ←` |
| 43 | スナップ（右半分） | `Win + →` |
| 44 | デスクトップの表示 | `Win + D` |
| 45 | スクリーンショット（全体） | `Win + PrtSc` |
| 46 | スクリーンショット（選択範囲） | `Win + Shift + S` |
| 47 | クリップボード履歴 | `Win + V` |
| 48 | 絵文字パネルを開く | `Win + .` または `Win + ;` |
| 49 | 設定を開く | `Win + I` |
| 50 | タスクマネージャーを開く | `Ctrl + Shift + Esc` または `Ctrl + Alt + Del` →

---
ゼロから作る！WordPressオリジナルテーマ開発の基本構造とテンプレート階層を理解する

# はじめに

この記事では、WordPressのオリジナルテーマを「自作」してみたい中級者向けに、テーマの基本構造やテンプレート階層、ファイル分割の考え方を解説します。

公式テーマに頼らず、自分のデザインや設計でテーマを構築するための第一歩となる内容です。

---

# ✅ 前提知識

- HTML/CSSの基礎知識がある
- PHPの基本文法がわかる
- WordPressがローカル環境にインストールされている（例：Local, MAMP, XAMPP）

---

# 📁 1. テーマフォルダを作成する

まず、`wp-content/themes/` に自分のテーマ用フォルダを作成します。  
ここでは `mytheme` としましょう。
wp-content/themes/mytheme/

最低限必要なファイルは以下の2つです。

- `style.css`
- `index.php`

### 🎨 style.css の例

```css
/*
Theme Name: My Custom Theme
Theme URI: https://example.com
Author: Your Name
Description: 自作のWordPressテーマです
Version: 1.0
*
```

このヘッダーコメントを記述することで、WordPressの管理画面「外観 > テーマ」に表示されるようになります。

# 🧱 2. テーマのテンプレート階層を知ろう
WordPressは、表示するページの種類に応じてテンプレートファイルを自動的に選びます。これを「テンプレート階層」と呼びます。

例：
投稿詳細ページ → `single.php`

固定ページ → `page.php`

カテゴリ一覧 → `category.php`

アーカイブ → `archive.php`

それらがない場合のフォールバック → `index.php`

テンプレート階層図

https://ja.wordpress.org/team/handbook/theme-development/basics/template-hierarchy/

階層構造を理解しておくことで、表示されるテンプレートを意図通りに制御できます。

🧩 3. テンプレートファイル
テーマ開発では以下のテンプレートファイルを分割して構成するのが基本です。

header.php → HTMLの `<head>`やナビゲーションなど

footer.php → フッター

sidebar.php → サイドバー（必要に応じて）

index.php → メインのコンテンツ部分（ループ含む）

呼び出し方の例
```php
<?php get_header(); ?>

<main>
  <!-- メインコンテンツ -->
</main>

<?php get_sidebar(); ?>
<?php get_footer(); ?>
```
# 🔁 4. ループの基本（The Loop）
WordPressのコンテンツ出力は「ループ（The Loop）」という構文で行われます。

```php
<?php if (have_posts()) : ?>
  <?php while (have_posts()) : the_post(); ?>
    <h2><?php the_title(); ?></h2>
    <div><?php the_content(); ?></div>
  <?php endwhile; ?>
<?php else : ?>
  <p>記事が見つかりませんでした。</p>
<?php endif; ?>
```
これを理解すると、投稿の一覧や詳細ページを自由にカスタマイズできます。

# 🛠️ 5. functions.phpでテーマ機能を追加する
functions.php に記述することで、テーマにさまざまな機能を追加できます。

例：タイトルタグとサムネイルを有効化
```php
<?php
function mytheme_setup() {
  add_theme_support('title-tag');
  add_theme_support('post-thumbnails');
}
add_action('after_setup_theme', 'mytheme_setup');
```
# 🖥️ 6. テーマの有効化と確認
作成したテーマは、WordPress管理画面の「外観 > テーマ」から有効化できます。
有効化後は、トップページや投稿ページを表示して、テンプレートが正しく機能しているか確認しましょう。

#  7. よくあるミスとデバッグTIPS
style.css のヘッダーコメントがない
→ テーマとして認識されません。

functions.php に文法エラーがある
→ サイトが真っ白に（error_log を確認しましょう）

テンプレートファイル名のスペルミス
→ 意図しないテンプレートが表示されます。

# 📌 まとめ
この記事では、WordPressオリジナルテーマを作るための基本的なステップと知識を紹介しました。

- テーマのフォルダと最低限のファイル
- テンプレート階層の考え方
- 各種テンプレートファイルの役割
- ループと関数の使い方
- よくあるトラブルとその対処法
便利なTeams小技

ちょ～～～今更な小技紹介。
逆に振り返りの意味も込めて・・・。

## 便利なTeamsショートカット

▽チャット

 - Shift Enter：改行

私はめんどうなので、チャット画面の右下にある✏マークを押してEnterで改行してます。

- Ctrl+Shift+X：作成ボックスの展開

 Enter押して途中送信してしまうのを防げる


- Shift+＞：引用書式(メッセージの引用時に便利)

- @c(チャネルのc) :　チャネル内全員にメンション 

「@+チーム名」もしくは @+「チーム」という文字でも可能！

▽ 通話

- Ctrl+Shift+M:ミュートの切替

## 予めTeams会議の録画と文字起こしをセットする

1  Outlookで会議予約時に「会議オプション」をクリック

2.「レコーディングと文字起こしを自動的に行う」にチェックを入れる

すると会議終了後に会議タイトルでチャットグループが作られ、そのグループに録画や文字起こしの内容がまとめてきます！

この機能を基本的にONにしておけば、参加できなかった人に会議の内容を共有できます。

※要約機能は現時点では有料（TeamsPremiumのライセンスが必要）
個人的にはAIを使った要約機能が非常にわかりやすくてサイコー！なので、ぜひとも導入してほしいと思いました！！
非同期でOpenWeatherMap APIを呼び出してみた【Spring WebFlux】

## はじめに
Spring Bootでは、これまで`RestTemplate`が主流でしたが、現在は**非同期・ノンブロッキング**な`WebClient`への移行が推奨されています。  
本記事では、気候関連情報取得する**OpenWeatherMap API**を題材に、`WebClient`で外部APIを非同期に呼び出す方法を紹介します。

---

## なぜWebClientなのか？（RestTemplateとの違い）

| 項目 | RestTemplate | WebClient |
|------|--------------|-----------|
| I/O | ブロッキング | ノンブロッキング |
| スレッド使用量 | 多い | 少ない |
| リアクティブ対応 | × | ○ |
| 今後のサポート | 非推奨 | メイン推奨 |

WebClientはSpring WebFluxのリアクティブな世界と相性が良く、パフォーマンスやスケーラビリティの面でも有利です。

---

## プロジェクトの準備

本記事では`build.gradle`を使用：

```groovy
dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
}
```

---

## OpenWeatherMap APIの概要

- エンドポイント: `https://api.openweathermap.org/data/2.5/weather`
- パラメータ:
  - `q`：都市名（例：Tokyo）
  - `appid`：APIキー
  - `units`：`metric`で摂氏表示

---

## DTO

```java
public record WeatherResponse(String name, Main main, Weather[] weather) {
    public record Main(double temp) {}
    public record Weather(String main, String description) {}
}
```

## Controller

```java
@RestController
@RequestMapping("/api/weather")
public class WeatherController {

    private final WeatherService weatherService;

    public WeatherController(WeatherService weatherService) {
        this.weatherService = weatherService;
    }

    @GetMapping
    public Mono<WeatherResponse> fetchWeather(@RequestParam String city) {
        return weatherService.getWeather(city);
    }
}
```

リクエスト例：  
`GET /api/weather?city=Tokyo`

---

## Service

```java
@Service
public class WeatherService {

    private final WebClient webClient;

    public WeatherService(WebClient.Builder builder) {
        this.webClient = builder.baseUrl("https://api.openweathermap.org/data/2.5").build();
    }

    public Mono<WeatherResponse> getWeather(String city) {
        return webClient.get()
                .uri(uriBuilder -> uriBuilder
                        .path("/weather")
                        .queryParam("q", city)
                        .queryParam("appid", "YOUR_API_KEY")
                        .queryParam("units", "metric")
                        .build())
                .retrieve()
                .bodyToMono(WeatherResponse.class);
    }
}
```



---

## 実行結果例

```json
{
  "name": "Tokyo",
  "main": {
    "temp": 23.4
  },
  "weather": [
    {
      "main": "Clear",
      "description": "clear sky"
    }
  ]
}

```

---

## まとめ

- WebClientは非同期・ノンブロッキングで高性能
- `Mono<String>`だけでなくDTOにマッピングして使用も可能
Excelではてなマーク(?)とアスタリスク(*)を検索する方法

### Excelではてなマーク(?)とアスタリスク(*)を検索する方法
Excelでははてなマーク(?)とアスタリスク(*)はワイルドカードとして、任意の文字を表すことができます。
よって、はてなマーク(?)とアスタリスク(*)を検索したい時は、そのまま入力しちゃうと任意の文字に当てはまってしまうためうまく検索できません。

はてなマーク(?)とアスタリスク(*)を検索したい場合は、その文字の前に半角のチルダ (~) を付けます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/159211/595ef131-cc38-4a8f-8b3d-b0967ab0f495.png)
【簡単AWS】【AWS EC2】 AWS EC2 の基本運用とセキュリティ対策（鍵の管理編）

AWS EC2（Elastic Compute Cloud）は、柔軟な仮想サーバーを提供する強力なサービスです。しかし、EC2 インスタンスへのアクセス管理、特に「キーペア（SSH 鍵）」の管理は、セキュリティの観点で非常に重要です。

この記事では、EC2 の基本概念に触れつつ、**SSH 鍵の適切な管理方法とよくあるミス、ベストプラクティス**について解説します。

---

## ✨ 1. EC2 の基本概念と鍵の役割

### 🔹 EC2 インスタンスとは？

- AWS 上で動作する仮想サーバー。
- 必要に応じて自由に作成・停止・削除可能。
- VPC や Security Group などと連携してセキュアなネットワーク運用が可能。

### 🔑 キーペア（Key Pair）とは？

- EC2 に SSH でログインするための「公開鍵・秘密鍵」のペア。
- インスタンス作成時に「キーペアを指定」し、秘密鍵（`.pem`）をダウンロード。
- この鍵を利用して、ターミナルからログインを行う。

✅ **例：SSH 接続コマンド**
```bash
ssh -i ~/Downloads/my-key.pem ec2-user@<インスタンスのパブリックIP>
```

---

## ⚠️ 2. よくある鍵管理のミスとリスク

### ❌ 秘密鍵ファイルの紛失・漏洩

- `.pem` ファイルを失うと、そのインスタンスにアクセスできなくなる。
- GitHub などに誤ってアップロードすると、**即座に第三者にアクセスされるリスク**がある。

✅ **対策**
- `.pem` ファイルは厳重に保管（外部共有ストレージに置かない）。
- 誤って公開した場合は、**すぐにインスタンスの鍵を変更**または削除。

---

### ❌ 同じ鍵を複数人で使い回す

- チームで 1 つのキーペアを共有するケースは、**誰がアクセスしたか追跡不可能**。
- セキュリティインシデント時の責任の所在が不明確に。

✅ **対策**
- 各ユーザーごとに別のキーペアを作成。
- EC2 上にユーザーごとの公開鍵を登録する。

✅ **例：authorized_keys に追加**
```bash
# ユーザー作成と鍵登録の例
sudo adduser dev_user
sudo mkdir /home/dev_user/.ssh
sudo echo "ssh-rsa AAAA...." >> /home/dev_user/.ssh/authorized_keys
sudo chown -R dev_user:dev_user /home/dev_user/.ssh
```

---

### ❌ 鍵のパーミッション設定ミス

- `.pem` のファイルパーミッションが厳しくないと、SSH 接続でエラーが出る。

✅ **対策**
```bash
chmod 400 my-key.pem
```

---

## ✅ 3. EC2 鍵管理のベストプラクティス

### 🔐 秘密鍵の厳重管理

- `.pem` ファイルは **パスワード付き ZIP にして暗号化保存**も有効。
- 個人端末に保管する際も、**アクセス制限された場所に保存**。

---

### 👥 ユーザーごとに SSH 鍵を分離

- 開発チーム・管理者ごとに個別の鍵を発行。
- 共有を避け、ユーザーが変更・退職したらすぐに該当鍵を削除。

---

### 🔄 定期的な鍵のローテーション（更新）

- 長期間使用する鍵は、セキュリティ向上のため定期的に更新。
- 古い鍵は `authorized_keys` から削除。

---

### 🛡️ EC2 Instance Connect や Systems Manager Session Manager の活用

鍵を使わずにブラウザから EC2 にアクセスできる代替手段：

- **EC2 Instance Connect**：IAM によるアクセス制御が可能。
- **Systems Manager Session Manager**：ポート開放・鍵不要、操作ログも残せる。

✅ **メリット**
- SSH ポート（22番）を閉じた状態で管理可能。
- ネットワーク経由の攻撃リスクを大幅に低減。

---

## 📝 4. まとめ

✅ **EC2 へのアクセス管理はセキュリティの要**です。  
✅ **SSH 鍵の適切な取り扱い、個人単位での運用、鍵の定期更新**が必要不可欠。  
✅ **Instance Connect や Session Manager の活用で、より安全な運用が可能**です。

EC2 のセキュリティ運用を強化し、安全で信頼性の高いクラウド環境を目指しましょう！🔒

---

**この記事が役立ったら LGTM 👍 やコメントでぜひ教えてください！**  
**AWS EC2 やセキュリティに関するご質問もお気軽にどうぞ！**
MDA の アクセスポリシー設定

# MDA のアクセスポリシー設定にハマった
アクセスポリシーを作成しようとしたら、こんな画面が表示されポリシーを作成できない
Learn に沿って Entra ID に条件付きアクセスポリシー設定してもポリシーが作成できない

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/571eafd2-9c9d-4812-a581-525fd128386e.png)

# 解決方法
Entra ID の条件付きアクセスポリシーで、MDA を管理するのに使用するアカウントを指定する必要があった。
Learn にも載ってないし、ネット上色々漁っても書いてないし、こんなのわからんって…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/608df67a-40af-4a90-9ab4-6d4b1a5b6a8f.png)

この2つのアプリを入れておけば MDA は含まれている

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/5c7c8703-63bf-4d40-9b4b-c78ea901784f.png)

一応他の設定情報も掲載

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/a89ba2c4-a4cf-4dc9-ae9a-289e1562463b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/605bd17c-4812-442f-b0c0-2cde7daba8ee.png)

この設定を入れると Learn のいうオンボードが完了する
Defender ポータル > 設定 > クラウドアプリ > 接続されているアプリ > アプリの条件付きアクセス制御アプリ
サインアウト → サインインの実施により連携されたアプリが表示されるようになり、MDA のアクセスポリシーの作成ができるようになる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/c8451942-a871-4b77-8548-4ca9e0f4d7b2.png)

MDA のアクセスポリシーが作成できるようになｔｔ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4016871/0d88d7dd-d4a3-4583-86a4-36ee2f56acfe.png)


＊本稿は、個人の見解に基づいた内容であり、所属する会社の公式見解ではありません。また、いかなる保証を与えるものでもありません。正式な情報は、各製品の販売元にご確認ください。
【Web制作】1年目エンジニアの時に静的ページの作成で意識・実践していたこと

## はじめに

未経験での転職をし、約1年ほどWeb制作に携わる中で、個人的に静的ページを作成する上で気をつけていることや意識していること・これまでやってきたことをまとめました。

:::note warn
この記事は、あくまで個人的な意見です。
:::


## 1. ページの構造設計を徹底する

### 設計思想の重要性

以下の理由からページの構成をちゃんと考えられるようにするという練習を最初のうちはしていました。

- 余分なスタイルの排除につながる
- 保守性・拡張性の向上
- コードの可読性向上
- 後からの修正が容易になる

例えば、「この要素は何のためにあるのか」「このグループはどういう関係性を持っているのか」を明確に理解しておくことで、無駄なスタイルを当てることなく効率的なコーディングができると思っています。

### 図に起こして考える練習

僕が今までやってきたWeb制作案件ではHTML、CSS（SCSS）がメインのものが多かったため、HTML構造についてや、CSS設計について考える練習をすることが多かったです。

Reactのようなコンポーネント化という概念はありませんでしたが、CSS設計さえうまくできていれば同じコードを書かずに済むので、作成するページのどこが共通化できそうか？とか、どこの要素をまとめればなるべく少ないコード量で実現できるかなどを頭で考えられるようになるまでは、図に起こして考える練習をしました。

具体的な図の作成方法としては：

1. ページを大きなブロックに分割する（ヘッダー、メイン、サイドバー、フッターなど）
2. 各ブロック内の要素を階層構造で整理する
3. 共通要素や繰り返し要素を特定する
4. 各要素に対して適切なHTMLタグを考える
5. 必要なCSSクラスの構造を設計する
↓実際に使用していたものは削除してしまったのでイメージを以下に添付しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3746825/eeb9f2dc-9905-40dd-97b6-0a9c2af49e5f.png)

個人的には最初のうちはコードを書く前に上記のように構造を明確にすることで、実装段階での混乱や手戻りを大幅に減らすことができたと思っています。

## 2. 公式の情報などを理解し、忠実になる

**CSS設計の基本原則** 
CSS設計にはいくつかの確立された手法があります：

- **BEM (Block, Element, Modifier)**  
- **FLOCSS (Foundation, Layout, Object)**  とか

上記の設計思想のように、すでに手法として確立しているものは、それなりの理由があるし実際やってみて使いやすいという面もあるので、不要な再開発はせず、ちゃんと設計思想を理解してそれを実践することが結局早く・綺麗にコーディングするという面でいいのかなと考えているため、それを意識しています。

## 3. AIを駆使した効率的な学習

便利なことに今の世の中には、ChatGPTやClaudeなどのいった優秀なAIが存在します。誰もがいうことかもしれませんが、これを活用しない手はないので、僕は実際に使ってコーディングや練習をすることが多いです。

練習をする時に、自分が実際に使っていたやり方は：

1. **とりあえず自分でコーディングしてみる**  
   自分の知識でベストと思われる方法でコードを書く

2. **AIにコードレビューを依頼する**  
   書いたコードをAIに投げて、「セマンティックなコーディングに変換してみて」や「適切なスタイル・無駄のないスタイルに変えてみて」などのプロンプトで改善案をもらう
   
   具体的なプロンプト例：
   ```
   ・「このHTMLコードをより適切なセマンティックタグを使用して改善してください。SEOとアクセシビリティの観点からアドバイスもください。」
   ・「このCSSコードをBEM設計に沿って最適化してください。無駄なスタイルがあれば指摘してください。」
   とか
   ```

3. **改善案を分析する**  
   AIからの提案を見て、なぜこの部分にこのタグを使うのか、このスタイルを当てるのかを公式の情報を見ながら考える＋理解する

5. **理解して実践に活かす**  
   理解したことを次のコーディングに活かす

このプロセスを繰り返すことで、ただコードの書き方だけでなく、「なぜそのコードが適切なのか」という理解が深まり、より質の高いコーディングができるようになります。

## まとめ：静的ページ制作で意識していること

静的ページ制作を正確に早く作るという点において、大事なのは作成するページの構造をちゃんと捉えていい設計をするということだと思ってます。

ページの構造を正確に理解し、設計した上でコーディングをすることで：

- 無駄なスタイルを当てなくて済む
- メンテナンス性が向上する
- コードの可読性が向上する
- 後からの修正や拡張が容易になる

また、セマンティックなHTMLとCSS設計の基本原則を理解し実践することで、より良いWebページを効率的に作成することができると思っています。

僕個人的には、結局『量』をこなすことが一番の上達への方法だと思ってます。
その上で、それぞれに合う方法もあると思うので、どうやったら早くいいコードが書けるのかを考えながらやるのがいいと思ってます。
（この辺りは、良書と呼ばれている本を読んで参考して取り入れるというのもやってます。）

以上、読んでいただきありがとうございました🙌🏼

### 参考にしていた書籍
 - [Good Code, Bad Code ～持続可能な開発のためのソフトウェアエンジニア的思考](https://www.amazon.co.jp/Good-Code-Bad-%EF%BD%9E%E6%8C%81%E7%B6%9A%E5%8F%AF%E8%83%BD%[…]220e70923fc8a249b51b06cf1962&language=ja_JP&ref_=as_li_ss_tl)
- [良いコード/悪いコードで学ぶ設計入門 ―保守しやすい 成長し続けるコードの書き方](https://www.amazon.co.jp/%E6%94%B9%E8%A8%82%E6%96%B0%E7%89%88-%E8%89%AF%E3%81%84%E3%8[…]&mcid=87444c34a1c83502a1fcceec09bcc6e5&qid=1744101747&sr=8-1)
Salesforceの関連リストにデータモデルオブジェクト[DMO]を表示 (DataCloudハンズオン - Coral Cloud #6)

前回は、複数のソースから取り込んだ重複する個人を、ID解決ルールセットを作って、統合プロファイルにてマージする方法を紹介しました。

https://qiita.com/Mijinko-kun/items/dd3163bea0d670645d8e

今回は、Salesforceから統合データにアクセスします。


以下のワークショップ[Exercise 6]の手順に沿って、操作を行います。

https://developer.salesforce.com/agentforce-workshop/data-cloud/6-access-unified-data


## Salesforceに関連リストを作成

Coral Cloud Resortsアプリケーションを開きます。

取引先責任者を開き、Sofia Rodriguez の連絡先をクリックします。

グローバルサーチで検索すると便利です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/c4d9c760-761b-4770-bf99-190c53a8a9ff.png)

関連リストに予約がないことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/6c300f87-6fca-4c3b-957d-d77e73654d3e.png)

[オブジェクトを編集]を選択します。[ページを編集]ではないところがポイントです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/111dc23a-48b0-40a0-80bc-649a82e56f87.png)

### Data Cloud 関連リストの追加

[Data Cloud 関連リスト]メニューを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/e1a1934c-4d28-4773-b810-a1dd7a713e75.png)

[新規]から**Data Cloud専用の関連リスト**を作成します。

Reservationを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/0cc66084-cf46-4c14-9b08-0f147c5d8118.png)


2項目にチェックを入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/935f7b94-b6e6-4dda-9cd8-b2881d45086c.png)


### ページレイアウトの変更

`Contact Layout`を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/337de8b6-a4ac-4d3e-8383-f8e3ae10c391.png)

一番下の`Reservation`をクリックします。

列を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/7de4e60e-8844-4129-844c-f531daaeebaa.png)

保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/ddb7da5e-4afb-4d35-90cc-fdf3df65a390.png)

## 確認

Reservation項目が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2716146/a60694b7-3dd1-4d5c-b90b-91e3aa87b1fb.png)

なお
> リストが空であることに気付くかもしれません。これは、Data Cloud で予約を大規模エンゲージメント オブジェクトとして分類したためです。デフォルトでは、このタイプのオブジェクトには過去 7 日間のデータのみが表示されます。

とのことなので、現段階では、空で問題ありません。
Ubuntu利用でmssql-toolsが見つからないと言われる

タイトル通り。
```
Unable to locate package mssql-tools
```
GitHub Actionsにおいて、ubuntu-latest利用でmssql-toolsをインストールして利用していた。
ある日、動かなくなり……どうやら、mssql-toolsは「mssql-tools18」と置き換わり、GPGキーのインポートとリポジトリの登録が必要になっていた模様。
リポジトリの登録を行うにあたりubuntuはlatestを使うのではなくバージョンを固定することにした。
今回は24.04。
## 1.パブリック リポジトリの GPG キーをインポート
```
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
```
## 2.Microsoft Ubuntu リポジトリを登録
Ubuntu 24.04の場合は以下。バージョンによって数字は変えること。
```
curl https://packages.microsoft.com/config/ubuntu/24.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
```
### 3. インストールを実行
```
sudo apt-get update
sudo apt-get install mssql-tools18
```
めでたし。
## sqlcmdのパスも変わっている
Microsoft SQL Server - Ubuntu based images(https://hub.docker.com/r/microsoft/mssql-server)
こいつに入ってるsqlcmdのパスも18がつくようになっている。
### 以前
/opt/mssql-tools/bin/sqlcmd
### 今
/opt/mssql-tools**18**/bin/sqlcmd

## 参考
Linux に SQL Server コマンドライン ツール sqlcmd および bcp をインストールする
https://learn.microsoft.com/ja-jp/sql/linux/sql-server-linux-setup-tools?view=sql-server-ver16&tabs=ubuntu-install
SaaS/PaaS/IaaS

## SaaS(Software as a Service)
クラウド上のソフトウェアを利用できるサービス

### 身近な例
- Gmail
- Google Docs
- Slack

### メリット
- メンテナンス不要
- ネット環境さえあればどこでも使える
- 月額制が多く、導入コストが低い

### デメリット
- ネット接続が必須
- データ移行が難しい
- 仕様はサービス提供者に依存するため、カスタマイズが難しい

### 向いているケース
- 手軽にツールを使いたいとき（例：メール、会計、営業管理）
- 開発やインフラの手間を省きたいとき
- 複数人で同時に使いたいとき（チーム作業）

## PaaS(Platform as a Service)
クラウド上のプラットフォームを利用できるサービス

### 提供するもの
開発環境寄り
- 仮想サーバー（OS込み）
- データベース（MySQL、PostgreSQLなど）
- ランタイム環境（Node.js、Python、Rubyなど）
- 自動スケーリング、ログ管理、デプロイ機能 など

### 身近な例
- Google App Engine：自動スケーリング対応、GCPと統合
- AWS Elastic Beanstalk：Webアプリケーションのデプロイとスケーリングを支援するサービス
- Azure App Service：Webフロント、REST API、モバイルアプリのバックエンド機能を一括でホスティングできるプラットフォーム

### メリット
- サーバー構築やOS更新が不要
- 自動スケーリング
- 簡単にデプロイができ、git pushするだけで公開できるサービスも多い

### デメリット
- あるプラットフォームに依存すると、将来的な切り替えが難しい
- セキュリティ、パフォーマンスはベンダーに依存

### 向いているケース
- アプリを早くリリースしたいスタートアップ
- 小〜中規模のWebアプリを構築したいとき

## IaaS(Infrastructure as a Service)
クラウド上のインフラストラクチャ（基盤）を利用できるサービス

### 提供されるもの
基盤寄り
- 仮想サーバー（VPS）：インターネット経由で管理可能な仮想マシン
- ストレージ：データをクラウド上に保存するディスクスペース
- ネットワーク：仮想ネットワーク、IPアドレス、ロードバランサーなど
- バックアップ・リカバリ：データ保護のためのバックアップ機能
- オートスケーリング：リソースを需要に応じて自動で調整する機能

### 身近な例
- AWS EC2
- Google Compute Engine
- Microsoft Azure

### メリット
- 物理サーバーを購入せず、必要な時だけ使うため、初期投資が不要
- インフラ管理の簡素化
- スケーラビリティ
- 外部のベンダーがインフラ管理をするため、災害時のリスク分散を行える

### デメリット
- インフラの設定や管理は自分で行う必要があり、運用負荷がかかる
- インターネット障害時に利用できない

### 向いているケース
- 大規模なWebアプリケーションのインフラを柔軟に運用したいとき
- トラフィックの増減が予想されるサービスのホスティング
- 短期間でサーバーインフラを立ち上げたい場合

## まとめ
SaaS、PaaS、IaaSはいずれもクラウドサービスの形態であり、手軽なソフト利用からアプリ開発、柔軟なインフラ構築までニーズに応じて選べます。用途や規模、技術力に応じて最適なサービスを使い分けることで、効率よくシステム運用が可能です。
【応用情報】リスクマネジメント

## リスクマネジメント
　リスクマネジメントにおけるリスクへの対応活動の流れは、概ね次のようになる。ここでは、それぞれの活動（プロセス）で行われる主な内容をまとめておく。
 
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/99ae16c6-fbbb-4d71-884b-efec690c37fe.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/387980/7be5e489-758d-44c2-b3e4-3de22d680ef0.png)



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

## 参考文献
令和06-07年 応用情報技術者 試験によくでる問題集【午後】 単行本（ソフトカバー） – 2024/3/22
大滝 みや子 (著)
p.587
FleetからCursorへ──KMP開発効率アップのための挑戦記① 初めての導入編

# FleetからCursorへ ─ KMP開発効率アップのための挑戦記

最近までChatGPTでのコード生成 & JetBrainsのFleetを使ってKotlin Multiplatform（KMP）開発をしていたんですが、「もっと開発効率を上げられないかな？」と思い始め、**Cursor**への移行を試してみることにしました。

Fleet＋JetBrains AI Pro（月額約10ドル）の組み合わせでもサポートはあるんですが、**「爆速で効率上がった！」という実感はあまりなかった**んですよね。そんな中、最近話題のCursorでAndroidを開発している方がいるという話を聞き興味を持ち、弊社も元々Web側の開発では利用していて可能性を感じていたので、「これならもしかして…？」と思い模索することにしました。

---

## Cursor × KMPはアリなのか？

今回取り組み始めたのは「**CursorでKotlin Multiplatform（KMP）開発を進める**」というテーマ。  
ただ、日本語でその組み合わせの事例ってあまり出てこないんですよね。

> 「噂では聞くけど、実際どうなんだろう？」

そんなところを、自分の手で試していく形になります。

導入の基礎にあたっては、以下の海外記事とかがあったので、この記事に譲ります 
👉 [Integrating Cursor with Kotlin Multiplatform](https://medium.com/picsart-engineering/integrating-cursor-with-kotlin-multiplatform-kmp-kmm-85bc005d05ce)

---

## ちょっとしたつまずきポイント

導入自体は概ねスムーズだったんですが、1点だけ気になることが。

- **モバイル系の拡張機能の検索に時間がかかる?...**  
　→ 過去にWeb系PJで導入した時はもっとサクサクだった気がするけど、今日だけ？
 結構遅かったので、バグなのか不安になりました。もし同じ人がいたあら、気長に待ってみてください

---

## 実際のコーディング：Fleetプロジェクトの移行

まずはFleetで進めていた既存PJをCursorで開いて開発スタート。  
以下の記事が参考になりました。

📘 [Qiita: Cursorの初期設定](https://qiita.com/kota33/items/20a884cbd969cf1ce087)

基本的には、Web開発・モバイル開発の時、双方で大きく実装の仕方は変わらないフローでした。
私は、右側のチャット部分で相談しながらコードを書く or コード部分でCommand+Kにて直接修正指示を出すの2パターンがメインの利用方法で、これはモバイルでも有効に使えました

---

### 試したプロンプト（一例）

今回は、Chat機能における**初回限定サジェストUIの追加**というタスクにトライ。

```text
このページにおいて、初回のみサジェストを表示したい。
サジェストはこの4つなので、stringのリソースとして用意してほしい。
recommend_reply_list = ["ちょっと話聞いて欲しい","モヤモヤする話聞いて!","イライラする話聞いて!","食べ物の相談を聞いて!"]

サジェストのUIは添付の画像を参考にしてください。
```

#### 出力結果と感じたメリット

出力の完成度は**5割くらい**。  
完全自動とは言い難いけど、**自分で1から書くよりは確実に速い！**

特に感動したのがこの点👇

> Fleet + ChatGPTでやっていた頃のように、  
> `コードをコピペ→AIに渡す→戻して貼り直す` の流れが**一切不要**！

Cursorでは、対象ファイルを `@ファイル名` で指定すれば、**そのままSidebar上で生成・反映できる**ので、ものすごく楽です。

#### 細かい課題感
- 類似コード渡すだけでは、既存ルールに則ってくれていない（Atomic Design）
- 周辺の類似実装に比べ、少し共通化の粒度が大きすぎる
- 既存のAtomのパーツとかを使えていない
- AIコーディング後、なぜかコードの編集ができなかったりで挙動が不明瞭
- コードジャンプできない

パッと感じた細かい手触り感、課題はこの辺り。
細かいけど、これらをやれないと実用性がChatGPT生成やJetBrains AI Proの方が良いかなという印象なので、この壁を超えたい。

これらは改善できそうな気配を感じるので、少しずつ調整していきたいです。
もし、修正方法などご存知の方いたら教えてください:runner:

また修正したら都度まとめていけたらと思います。

#### 注意事項
自身では解消が不可なので課題感には書きませんでしたが、
Preview機能はどうやってもCursorでは使えない様です。
そのため、ある程度コーディングしながら、別ディスプレイで開いておいたFleetでPreviewして確認する。みたいなやり方が今の所、僕がやっている方法です。

---

## 今後に向けた期待と課題

もちろん、**指定が曖昧だと出力もそれなり**という課題はありますが、  
プロンプト設計の精度を上げたり、PJ内の**コーディングルールを整備する**ことで、  
**「ChatGPTや手打ち&JetBrains AI Proより早い＋品質も良い」**という未来が見えてきました。

個人的には、そこまで遠くない未来でベストにできるんじゃないかなという感覚でした。

特にKMP開発はCursor事例が少なくて不安もあったんですが、  
**実際触ってみると「普通にいける可能性あるやん！」という手応え**があったので、課金して、どんどんやっていこうと思います。

逐一更新していくので、また読んでもらえたり、応援してもらえたら嬉しいです！
また、KMP仲間も探しているので、気軽にコメントしてもらえたら嬉しいです！

---

## ✅ まとめ

- ChatGPT + JetBrains Fleet＋AI ProからCursorへ移行開始
- コーディング速度は体感でめっちゃ向上しそう
- Kotlin Multiplatform（KMP）との組み合わせも致命的な問題はなし
- コーディングルールとプロンプト次第で大きく化けそう
- 「コード書くだけ」よりも、「Cursorで組み立てる」時代を早く作る

---

## 🙋‍♂️ コメント歓迎！

Cursor × KMP で開発している方、  
もしくはこれから始めてみようという方、  
こんな方法やtiosおすすめだよという方、
もし気になることがあれば、ぜひコメントください！

体験共有、Tips、ノウハウなど、ゆるく話せたら嬉しいです〜！
ナレッジマネジメントを進めてるなう①

※筆者個人の意見/主張で、チームを代表するものではありません。

現在、コンサルティングファームで、ナレッジマネジメントを推進しています。
そこで感じたことを何回かに分けて書いていきます。

初回は、「何故ナレッジマネジメントをやるのか？」

## 前提：強みは一人一人に宿るもの
私は某総合系コンサルティングファームで、主にDX/デジタル化推進を支援するチームに所属してます。DX戦略からデザイン、IT資産の運用や現場の業務改善といった"泥臭い"PJまでが混在する数百名規模チームです。

コンサルティングも、エンジニアリングも、ある種の職人技。
強みや個性は一人一人のメンバーに依存するもので、依存するべきだと(私は思っています)。

強みや経験を引き継ぐ過程も、職人が弟子に受け継ぐように、言語化されない物語を渡していく道のり。

## とは言え、何かできるでしょ(したほうがいいいでしょ?)
とは言え、そうは言ってられない事情もあります。

・顧客ニーズに応じた、組織の拡大(メンバーの増加)
・社会変化による、PJ/支援内容/検討事項の拡大・複雑化
・文化変化による、働き方/労働へのとらえ方の多様化・・・・etc

沢山の変化の中で、自分や誰かの経験/強みを他者に引き継ぐ必要がある…(そして、ますます強まっている)と感じています。

何より、毎回失敗から学ぶ必要がないのでは？と思っています。
失敗は成功の母であり、失敗から人は沢山のことを学びます。ただし、時代が経っても、変わらないものもあり、そこを毎回繰り返す必要はない、と思うのです。当然、PJ/顧客/社会のために、不健康な失敗は発生させるべきでないという前提もあります。

そして、何より自分たちが「巨人の肩の上に立っている」ことを認識して、もう少し上の景色を見ることができれば…という気持ちを感じています。(私の好きなミュージシャンの言葉の引用）

https://blog.intheblueshirt.com/entry/2019/01/19/022856

## データと組織・メンバ理解
今私は、DX/デジタル化推進チームで、以下のナレッジマネジメント活動を推進しています。

①成果物のナレッジ化
・・プロジェクトに登場する成果物、方法論、各種の関連資料等のナレッジ化、一覧化・・・など

③導線/運用の整備
・・・メンバがアクセスしやすいような導線や、チームとしての運用(ツール活用も含む)整備・・など

上記を実施してい思うのは、ナレッジマネジメントとは「データと組織・メンバーを理解する」ことです。
・どのようなデータがチーム内に流れていて、それがどこで活用されている/されていないのか？
・どのようなデータをチーム内に注入すると、PJや組織に変化が生じるのか？
・今後どのようなデータが必要になるのか？
・今メンバーは何で困っているのか？その先にいる顧客が抱えている課題は？
・今後チームが注力したいテーマは・・・・etc

そのような、データと組織・メンバ理解を進める過程で、感じたことを今後は書いていきたいと思います。
キーワードとしては、以下の5つです。

・ナレッジの導線（使われなきゃ意味ないっしょ)
・役割と構造
・スピード⇔品質
・切り口と生々しさ
・目標/進め方


※余談
超相対性理論でも関連する話がされていましたね。。。

https://podcasts.apple.com/jp/podcast/195-%E4%BB%96%E8%80%85%E3%81%AE%E4%BD%93%E9%A8%93%E3%81%AE%E8%A8%98%E6%86%B6%E3%81%AF%E3%81%84%E3%81%8B%E3%81%AB%E5%8F%97%E3%81%91%E7%B6%99%E3%81%92%E3%82%8B%E3%81%AE%E3%81%8B-%E3%82%B2%E3%82%B9%E3%83%88-%E6%A4%8B%E6%9C%AC%E6%B9%A7%E4%B9%9F%E3%81%95%E3%82%93-%E3%81%9D%E3%81%AE1/id1567192930?i=1000693724365
プログラミングスクール講師に向いている人/向いていない人

## はじめに

本記事ではプログラミングスクール講師をやってみて感じた、
講師に"向いている人"、"向いていない人"についてお話しします。
興味がある方の参考になれば幸いです。


## 講師になった経緯
クラウドソーシングサイトでスカウトされました。
本業の稼働時間が減ったタイミングだったので、ちょうどいいと思い、講師になりました。
（それくらい気軽になれるものです）
ちなみに、社員ではなく業務委託契約です。


## どんな仕事？
※あくまで私の経験です。

受講生にはマンツーマンで指導を行います。
（講師1人に対して、複数人の受講生を担当します。）

進め方は、受講生には学びたい分野のカリキュラムが与えられ、1年（or半年など）の間、定期的にビデオ通話でレッスンを行っていく形です。（カリキュラムは講師が用意する場合あり）

おそらく世の中のオンラインプログラミングスクールは、たいてい上記のような感じです。

私の場合は宿題も出すので、赤ペン先生的な役割も担いました。
教材はスクールが用意したものを使いますが、別の教材を用意してもよいスクールもあるようです。

予定していた期間（もしくはレッスン回数）を終えると、受講生は無事卒業ということになります。


## 向いている人
※講師に技術力はたいして問われません。

#### 教えることが好きな人
プログラミングスクールは基本マンツーマン指導で、1年や半年など長期間でレッスンを行うことが多いです。
期間の途中で指導を投げ出すことは基本的には許されません。
指導が好きでないとおそらく長続きしないでしょう。

#### 当たり前だと思っていることを上手く説明できる人
突然ですが、以前このような会話をしました。
```
後輩「"hoge"ってなんですか？」
私　「"hoge"は... "hoge"だよ」
後輩「？」
※「hoge（ほげ）」は、プログラミング言語などで意味のない文字列として使われる言葉です。メタ構文変数の一種で、特に意味がないことを暗黙の了解としている名称です。﻿
```


当時は当たり前のことだと思っていて、これを上手く説明できませんでした。
受講生からは素朴な質問も多くいただきます。
相手にわかる言葉で、丁寧に説明しないといけません。

#### 世間話がうまい人
受講生は不安でとても緊張しています。
私の場合はレッスンの初めに1分程度世間話をしていました。（俗にいうアイスブレイクというやつです。）
時事ネタや受講生の出身地の話など、話の引き出しが多い方は生徒の緊張をほぐすのも上手だと思います。


## 向いていない人
#### スケジュールを守れない人
講師にはNG行為なるものがいくつかあります。
代表的なものだと、"遅刻NG"、"ドタキャン(急なリスケ)NG"、"レス漏れNG"があります。

忙しいからと言って、NG行為が許されるはずもありません。
受講生の方こそ、本業の合間を縫って時間を確保し、かつ、お金を払ってレッスンに望んでいます。

自身のスケジュール管理が苦手な方は講師に向きません。


#### 短気な人
すぐにイラつく人は講師に向いていません。
正直に言うと、"何度も言ったのに何故わかってくれないんだ"と受講生に思うことがレッスン中にありました。

これはマネジメントにおいてでも言えることですが、自分ができることを他人ができる保証はどこにもありません。
人を育てるためには、その人の立場になってあげないと、成長はたいして見込めないでしょう。



## 私のその後
私は本業が忙しくなり、やむなく講師を辞めました。
（もちろん途中で投げ出すことなく、生徒を卒業まで見送りました。）

ですが、また機会があればいつか挑戦したいと思います。
コード未経験のインフラエンジニアが独学でPythonを学び、副業デビューできた話

もともとインフラの運用保守やってたんだけど、正直コードとかは全然触ったことなくて。
それでも「Pythonならワンチャンいけるんじゃ？」って軽いノリで始めたら、意外といけた！って話です。

## なんでPythonだったのか
クラウドエンジニア目指してるんで、IaCとかでインフラ自動化したいなと思ってたんですよね。
で、どの言語がいいかなーって探してたら、Pythonがわりと独学しやすいらしいって聞いて。

調べたら自動化だけじゃなくてスクレイピングとか、業務効率化にも使えるし。
「これ覚えたら副業にも使えそうじゃん！」ってことでPythonに決定。

## Udemyで学んで、とにかく手を動かす
勉強は基本Udemy。けど正直、動画見るだけじゃピンとこなくて。
結局、自分でコード書いてみて、エラー出してググって直しての繰り返しが一番身になった感じ。

やってみると「案外こんなもんか」って思えたし、ちょっとずつ動くようになるとめっちゃ楽しくなってきた。

## エラー？ChatGPTに聞けばだいたいなんとかなる
エラーはまあまあ出まくるけど（笑）、基本はChatGPTに聞きまくり。
それでもわからんときは公式ドキュメント読んだりして。
なんだかんだで詰まりながらも前に進めた。

## 初案件はクラウドワークスでゲット！
勉強してばっかりじゃつまんないし、「もうやってみよう！」って感じでクラウドワークスに登録。
とりあえず自分ができそうな案件を見つけて、半額くらいの値段でガンガン応募しまくったら、いきなり取れました！

やってみると意外といけるもんで。スクレイピングとかファイルの自動化とか、コツコツ案件こなしてたら、向こうから声かけてもらえるようにもなってきた。

## 副業やってみた結果
スキルも上がるし、おまけに収入も増えるしで、正直いいことしかない。
最初は不安だったけど、やってみて大正解だったなーって思ってます。

## 今後の目標
今は個人開発もやってるんで、次はサイト制作の案件にも挑戦していきたい！
Pythonベースでいろいろできるようになったから、仕事の幅をどんどん広げていきたいですね。

## まとめ
コード未経験でも、Pythonなら意外となんとかなった！
今後も副業続けながらスキルアップして、もっと面白い仕事をしていきます！
40代新入社員、はじめてのDjango

## はじめに

Web開発企業の40代新入社員がDjango学習をした際の記録です。

## 記事を書こうと思った理由
- アウトプットが知識の定着になるなら、同時並行で進めてしまえば一石二鳥！🐥🐥
- 年齢もアレなので、習得のスピードアップを図りたい！

## わたしについて

- 年齢：41歳
- 職歴：飲食、介護士、デザイン会社、フリーランスなどを経てWeb開発「Jr.」👶
- Web制作歴：4年目
- Web開発経験：なし

## この記事の対象者

- Django初学者
- 同じUdemyコース「[Python + Django5 Djangoを基礎から応用まで、アプリケーション開発マスターpython付き](https://www.udemy.com/course/python-django-web/?utm_source=adwords&utm_medium=udemyads&utm_campaign=Search_DSA_Alpha_Prof_la.JA_cc.JP&campaigntype=Search&portfolio=Japan&language=JA&product=Course&test=&audience=DSA&topic=Python&priority=Alpha&utm_content=deal4584&utm_term=_._ag_167497668438_._ad_711539479579_._kw__._de_c_._dm__._pl__._ti_dsa-2346969404548_._li_1009401_._pd__._&matchtype=&gad_source=1&gbraid=0AAAAADROdO0rDAmPXWxS4CqbA-TwtajoY&gclid=Cj0KCQjw782_BhDjARIsABTv_JD6--S8kM05bboCvLeohpkFypaTLyc3k3gEhrP7f8jzCqfuGhYcps0aAozDEALw_wcB&couponCode=V2JPLETSLEARN)」受講者

## おことわり

- コース全てについての記事があるわけではありませんのでご容赦ください🙏

## 動作環境

- OS：macOS Sequoia 15.3.2
- エディター：Cursor0.48.7 (Universal), VSCode Version: 1.96.2
- 言語：Python 3.13.2
- フレームワーク：Django 5.1.7

## 参考教材

https://www.udemy.com/course/python-django-web/?utm_source=adwords&utm_medium=udemyads&utm_campaign=Search_DSA_Alpha_Prof_la.JA_cc.JP&campaigntype=Search&portfolio=Japan&language=JA&product=Course&test=&audience=DSA&topic=Python&priority=Alpha&utm_content=deal4584&utm_term=_._ag_167497668438_._ad_711539479579_._kw__._de_c_._dm__._pl__._ti_dsa-2346969404548_._li_1009401_._pd__._&matchtype=&gad_source=1&gbraid=0AAAAADROdO0rDAmPXWxS4CqbA-TwtajoY&gclid=Cj0KCQjw782_BhDjARIsABTv_JD6--S8kM05bboCvLeohpkFypaTLyc3k3gEhrP7f8jzCqfuGhYcps0aAozDEALw_wcB&couponCode=V2JPLETSLEARN


## つづき

https://qiita.com/koreyuki_akao/items/e9a4739e2ef84e19e133
【応用情報】リスクへの対応戦略

## はじめに
　リスクには、発生した場合にマイナスの影響を及ぼす"マイナスのリスク（脅威）"と、プラスの影響を及ぼす"プラスのリスク（好機）"がある。

## プラスのリスクへの対応戦略
### 活用
リスク（好機）を確実に実現出来るよう対応をとる。

### 共有
好機を得やすい能力の最も高い第三者と組む。

### 強化
好機の発生確率やプラスの影響を増大させる。

### 受容
特に何もせず好機が到来すれば受け入れる。

## マイナスのリスクへの対応戦略
### 回避
リスク発生の要因を取り除いたり、プロジェクト目標にリスクの影響を与えないためにプロジェクト計画を変更する。

### 転嫁
リスクの影響を第三者へ移す。例えば、保険をかけたり、保証契約を締結するという方法がある。

### 軽減
リスクの発生確率と発生した場合の影響度を受容出来る程度まで低下させる。

### 受容
リスクの軽減や回避のための策を取らない（特に何もしないでリスクが発生したときにその対応を考える）

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

## 参考文献
令和06-07年 応用情報技術者 試験によくでる問題集【午後】 単行本（ソフトカバー） – 2024/3/22
大滝 みや子 (著)
p.582,583
未経験がZabbix構築でハマった5つのポイントと解決策まとめ（Ubuntu Server 22.04 + Zabbix 7.0 LTS）


# はじめに

インフラエンジニア志望の未経験者として、自宅の仮想環境（VirtualBox）上に **Zabbix 7.0 LTS（Ubuntu Server 22.04）** を構築しました。  
その中で、いくつものエラーや構成ミスに遭遇し、**公式手順だけでは乗り越えられない壁**がありました。

本記事では、**Zabbix構築で初心者が実際にハマったポイントと、その解決策**を5つ厳選してまとめます。  
「これからZabbixを学習してみたい」「構築で毎回詰まる」という方の参考になれば幸いです。

## 環境情報

- OS：Ubuntu Server 22.04 LTS
- Zabbix：7.0 LTS（Web GUI含む）
- Webサーバ：Apache2
- DB：MariaDB
- インストール方式：CLIのみ（GUIやDocker未使用）

## ①：MariaDBが起動しない／初期化できない

### 症状：
- `systemctl start mariadb` → ステータスは `active` でも、Zabbix側からDB接続できず失敗
- `/var/lib/mysql` が空のまま

### 原因と対処：
```bash
sudo mariadb-install-db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
sudo systemctl restart mariadb
```

## ②：ApacheのMPMモジュール競合エラー

###  症状：
```
AH00534: apache2: Configuration error: MPM module not enabled
```

### 原因と対処：
```bash
sudo a2dismod mpm_event
sudo a2enmod mpm_prefork
sudo systemctl restart apache2
```

## ③：`zabbix-apache-conf` の構成が壊れている

### 症状：
Apache起動エラー。`zabbix-apache-conf` パッケージ破損。

### 解決策：
```bash
sudo apt-get install --reinstall zabbix-apache-conf
sudo apache2ctl configtest
sudo systemctl restart apache2
```

## ④：Zabbix Server が起動してもWebでエラー

### 症状：
「Cannot connect to the database」

### 原因と対処：
```bash
sudo mysql -u root -p
GRANT ALL PRIVILEGES ON zabbix.* TO zabbix@localhost IDENTIFIED BY 'zabbix_password';
FLUSH PRIVILEGES;
```

## ⑤：Zabbix GUIが出ない／404になる

### 原因と対処：
```bash
sudo a2enconf zabbix.conf
sudo systemctl reload apache2
```

## まとめ

| No. | ハマりポイント | 対処 |
|-----|----------------|------|
| ① | MariaDBの初期化不足 | `mariadb-install-db` を手動で実行 |
| ② | ApacheのMPM競合 | `mpm_event` を無効に、`mpm_prefork` に切り替え |
| ③ | Apache conf破損 | `zabbix-apache-conf` の再インストール |
| ④ | DB接続エラー | `zabbix.conf.php` 設定＋MySQL権限確認 |
| ⑤ | GUI表示されない | `a2enconf` 忘れ＋DocumentRoot設定ミス |

## 最後に

構築のエラーは“そのまま現場の障害対応力”につながる最高の学習素材。  
今後はZabbixを使って、**Ping監視・リソース監視・ログ監視・アラート通知**まで学習を広げていきます。

## 参考リンク

- [Zabbix公式構築ガイド（Ubuntu）](https://www.zabbix.com/download?zabbix=7.0&os_distribution=ubuntu&os_version=22.04&components=frontend)
- [Zabbixドキュメント](https://www.zabbix.com/documentation/current/manual)
ArchLinux Xfce4+i3-wm環境でのターミナルを透けさせる

初投稿失礼します。

つい最近、linuxの沼にハマりArchLinux盆栽を育て始めました。
Linux初学者のため、生暖かい目で見ていただけると幸いです。

Xfce4とi3-wmの統合環境でおしゃれなスケスケターミナルを導入しようとし、
少しだけつまずいたので備忘も兼ねて残します。

簡潔に説明しますと、ターミナルやconkyなどの透明化が反映されない場合は
コンポジットマネージャーがインストールされているかご確認ください。

ArchWikiのconkyの記事を参照してもらうと、コンポジットマネージャーの一覧が記載されたリンクがあるかと思います。

私はXcompmgrをインストールしただけで、途端に透明化設定が反映されました。

ArchLinuxを触っていると、
他のOSではプリインストールが当たり前で、存在すら知らなかったツールに出会い日々勉強になります。

皆さんも良いArchLinux盆栽ライフを！


![スクリーンショット_2025-04-08_16-01-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4055691/44dbae27-0476-4b9f-aafc-75d40afc53e4.png)