OmniAICreator/Qiita-1.07M huggingface dataset:
【簡単Kubernetes】【kubectl】kubectl get コマンド完全ガイド ～ Pod や Deployment の取得方法まとめ ～


Kubernetes クラスタのリソースを確認する際に、最も頻繁に使用されるコマンドの一つが `kubectl get` です。本記事では、`kubectl get` コマンドの基本から応用まで、よく使うオプションや書き方の違いをまとめます。

---

### 🔹 基本構文

```bash
kubectl get <リソースタイプ> <リソース名> [オプション]
```

例：
```bash
kubectl get pod pod1
```
→ `pod1` という名前の Pod を取得する。


---

### 🔹 Pod の取得（いろいろな書き方）

```bash
kubectl get pod pod1
kubectl get pods pod1
kubectl get po pod1
```

| コマンド                     | 説明                     | 備考             |
|----------------------------|--------------------------|------------------|
| `kubectl get pod pod1`    | Pod の正式な書き方       | ✅ 標準・推奨     |
| `kubectl get pods pod1`   | 複数形（pods）でもOK     | ✅ よく使われる   |
| `kubectl get po pod1`     | `pod` の省略形（alias）  | ✅ CLI 操作で便利 |


---

### 🔹 Deployment の取得

```bash
kubectl get deployments
kubectl get deploy
kubectl get deploy -n kube-system
kubectl get deploy --all-namespaces
```

| コマンド                                     | 説明                                           |
|--------------------------------------------|------------------------------------------------|
| `kubectl get deployments`                  | 現在の Namespace に存在する Deployment 一覧を取得 |
| `kubectl get deploy`                       | `deployments` の省略形                         |
| `kubectl get deploy -n kube-system`        | `kube-system` Namespace の Deployment を取得    |
| `kubectl get deploy --all-namespaces`      | すべての Namespace の Deployment を取得        |

> 💡 `-A` は `--all-namespaces` の省略形です。


---

### 🔹 Namespace の指定

Kubernetes では、リソースは Namespace ごとに管理されています。
Namespace を指定しない場合、現在のコンテキストで設定されている Namespace のみが対象になります。

```bash
kubectl get pods -n default
kubectl get pods -n kube-system
```

---

### 🔹 まとめ

- `kubectl get` はリソース確認の基本コマンド。
- リソースタイプには省略形（例：`po`, `deploy`）も使える。
- `--all-namespaces` でクラスタ全体の状態を確認可能。
- Namespace の指定は `-n <namespace>`。

---

### 📌 よく使うチートシート

```bash
kubectl get po                         # 現在の Namespace の Pod 一覧
kubectl get po -A                      # 全 Namespace の Pod 一覧
kubectl get deploy -n kube-system     # kube-system の Deployment
kubectl get svc                        # Service 一覧
kubectl get nodes                     # Node 一覧
```

---

ご参考になれば幸いです 🙌  
Kubernetes 初心者から中級者へのステップアップにぜひお役立てください。
コンパイル型とインタプリタ型

## コンパイル型とインタプリタ・スクリプト型

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3978560/2eb9c09e-261e-4c87-bbd0-9d7361bcfbcf.png)

### 例で理解する：料理に例えると

+ コンパイルは、料理のレシピを一度全部調理して、完成した料理を一気に提供するようなイメージです。
  + まずは一通り全ての材料を用意して、調理が終わってから料理を出すため、準備には時間がかかりますが、完成した料理はそのまま素早く提供できるので、出された後は速く食べられます。

+ インタプリタは、レシピを1行ずつ読み上げながら、材料を切ったり炒めたりして、できたらすぐに食べさせるようなイメージです。
  + 調理が進むごとにその場で食べられるので、すぐに作業が進みますが、毎回レシピを読んで行動するため、全体的に時間がかかります。

### まとめ

+ コンパイルは、ソースコード全体を一度に機械語に翻訳し、実行可能なバイナリファイルを生成する方式。
  + 一度コンパイルすれば、プログラムの実行は速く、コンパイル時にエラーもチェックされますが、再コンパイルが必要なため、開発サイクルは遅くなります。

+ インタプリタは、プログラムを逐次解釈して実行する方式。
  + ソースコードを書いてすぐに実行できるので開発の試行錯誤がしやすいですが、毎回解釈するため、実行速度は遅くなる傾向があります。

### 参考
:::note info
+ コンパイル型 → Dart
+ インタプリタ型 → Python
※ コンパイル → ビルド の実行順。
:::

### 追記
トレバー・バウアー（Trevor Bauer）のYoutube、おもろい。

Trevor Bauer：[YouTube](https://www.youtube.com/@BauerOutage)
Google Cloud のサーバーレス App Engine と Cloud Run を比較してみた

# はじめに

[先日GAEでハンズオンを行った](https://qiita.com/take-yoda/items/68d89eb8954aa920e860)ので、「今度はGoogle Cloud Runで試してみよう」と思い、公式リファレンスを読み進めていたのですが、「Cloud RunとGAE フレキシブル環境って何が違うの...？」と、よく分からなくなってしまいました。
そこで、私自身の思考整理を兼ねて、GAE スタンダード環境・フレキシブル環境と、Cloud Runの特徴を整理します。

# 比較表
|特徴|GAE スタンダード環境|GAE フレキシブル環境|Cloud Run|
|:--|:--|:--|:--|
|自動スケーリング|対応|対応|対応|
|スケール・トゥ・ゼロ|対応|非対応|対応|
|最大インスタンス数|2147483647|明確な上限なし[^1]|明確な上限なし[^2]|
|課金|インスタンス時間|インスタンスのvCPU等リソース使用量|インスタンスベース or リクエストベースの従量課金|
|無料枠|あり|なし|あり|
|vCPU|最大1コア(4.8GHz、vCPU 2コア程度)|最大80コア[^3]|最大8コア|
|メモリ|最大3GB|vCPUあたり最大6.5GB[^3]|最大32GB|
|実行環境|サンドボックス|Dockerコンテナ|Dockerコンテナ|
|ソースのデプロイ|可|可|可|
|コンテナイメージのデプロイ|不可|可|可|

詳細は以下の公式ドキュメントをご参照ください。

https://cloud.google.com/appengine/migration-center/run/compare-gae-with-run?hl=ja

# 所感

Cloud RunはGAEを改善するために設計されたものだそうですが、手軽さはGAE スタンダード環境に軍配が上がりそう。GAE フレキシブル環境との比較になると、Cloud Runの方が上位互換に近い印象があるため、用途に応じて、GAE スタンダード環境とCloud Runのいずれかを使い分けるのが良さそうです。

[^1]:プロジェクト毎の、「数量に基づく割り当て」の設定に依存する。
[^2]:デフォルトは100。サービスに割り当てるCPUとメモリのサイズで上限値も変動する。
[^3]:カスタムマシンタイプのVMではさらに大きなサイズあり。
【そうだったんだ！】MITライセンス

## MITライセンスって？
自分の公開しているソースコードを第三者が使用する時、
- 誰でも自由に使っていいよ
- 改造してもいいよ
- 再配布してもいいよ
- 作者は責任取らないよ

みたいな決まりを明記しているもの。

どういうものなのか分かりやすく説明してくれてるのは以下の記事
[MITってなんなのさ](https://qiita.com/takobuta_dev/items/120e710ab99721e98f8d)

## 誰のため？
→**コードを使う人のため**

ちょっと法律的な話になりますが、これを書くのは著作権の扱いを明確にするためです。

### MITを書かないと?
書かない場合、著作物は著作権で保護されたものになります。
ということは、作者はコードを使った人を訴えることができる！！

## MITライセンスを書こう！
せっかくみんなのために作ったコードもライセンスが明記されてないと、使う側は**怖くて使えない**。
「自由に使って！」と言ってあげることで安心してソースコードを使えるようになるわけですね、、、

## 他にもあるの？
MITライセンス以外にもちょっと縛りが強いものとか色々あるみたい。
例えばGPL-3.0のライセンスなんかは、必ずソースコードをオープンにしないといけなかったり、Unlicenseは、著作権自体を放棄して、マジで自由にしていいよみたいのもあったり。
「敬具」みたいな感じでMIT使ってたりしたけど探せばいろんなライセンスがあるんですね。。。
https://opensource.org/licenses
認定試験をお得に受ける方法

## はじめに

AWS,CNCFの資格を多数取得した際に知った、試験をお得に受ける方法を残しておきます。特に裏技的なものはなく、公式が提出してくれる割引制度の使い方のレクチャーとなります。

## 免責事項(Disclamer)

:::note warn
* 本投稿は受験当時の情報となります。受験を検討する際は最新の情報の確認をお願いします。
* 本投稿は個人の所感です。
    * 所属する企業や団体は関係ありません。
    * 情報の利用は自己責任でお願いします。
:::

## AWS認定

### 試験合格者向けの50%オフクーポン

* AWS認定試験に合格すると、次の認定試験に使える50%オフクーポンをもらえます。
* クーポン使って受験してまた合格するとまたクーポンもらえるので、うまくやればずっと50%オフで受験できます。
* 手順
    * https://www.aws.training/Certification にアクセスしログインします。
    * 以下画面左ペインの[BENEFITS]-[Certification benefits]をクリックします。
    ![AWS2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4007225/9efea786-5a9e-4d79-88f0-7403d642d430.png)
    * クーポン画面になるので、[50% Discount on your next Exam]のうちActiveなものを選び、[CLAIM BENEFIT]をクリックします。
    * クーポンコードが表示されるので、AWS認定購入時にクーポンコードを使用します。

## CNCF認定(kubernetes等)

### LinuxFoundationが開催するセール

* CNCFの認定試験はLinuxFoundationが主催しており、たまに認定試験のセールを実施しています。
* https://training.linuxfoundation.org/ にアクセスすると、セールが表示されることがあるのでそれを確認します。割引内容はセールによって異なるので、ここでは割愛します。
* セール頻度
    * セールは1-2か月に1回くらい開催され、40%オフくらいになるイメージです。
    * 比較的大きなセールとして、12月のサイバーマンデーがあり、この際は50%オフくらいになります。
* 認定試験を購入するタイミングと受験するタイミング
    * 認定試験を購入するタイミングと、受験するタイミングは分けることができます。認定試験は購入してから12か月有効です。
    * 例えば、2024/12月にセールで認定試験を購入しておき、翌年4月に受験するとかも可能です。

### いつでも使える30%オフクーポン
* いつでも使える30%オフクーポン情報を教えてもらったので追記しておきます。文書を見る限り、期限などもないようです。
    * https://github.com/CloudNativeStudyGroup/Linux-Foundation-Coupons

### 試験を受けるとたまるポイントを使っての割引

* LinuxFoundationの認定試験を何度か受けると、ポイントがたまって50%オフクーポンをゲットすることができます。
* 手順
    * https://training.linuxfoundation.org/ にアクセスします。
    * 以下画面右上の[My LF Profile]-[Manage My LF Profile]をクリックします。
    ![LF1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4007225/1781ff42-e607-4d6c-b868-6f754c27fd76.png)
    * 以下画面中央の[Training Coupons]をクリックします。
    ![LF3.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4007225/df0a860e-a5fb-402a-aac8-3b2777d58413.png)
    * 以下画面の上部にReward Pointsが表示されています。このポイントを500ポイント使って、画面下部のReedemable Couponsから50% OFFクーポンを獲得します。
    ![LF4.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4007225/6c91aeb6-8f29-4f8f-878a-e418399f52a8.png)
    * クーポンコードが表示されるので、認定購入時にクーポンコードを使用します。

## 受験記

* 私が過去に受けた認定試験の受験記です。よければ参考にしてください。
    * [クラウド系資格 受験記目次](https://qiita.com/synn/items/e26a33f3ae04f2de3bf6)
LoLのFPSが60固定されていた原因

久々にLoLを起動したらFPSが60に固定されていました。
何もしてないのに壊れた状態だったけど、解決したので備忘録として残しておきます。
結論としては設定ファイルが問題でした。

```game.cfg
[ItemShop]
NativeOffsetY=-0.0194
CurrentTab=1
NativeOffsetX=0.1443

[Highlights]
ScaleVideo=720
VideoQuality=0
VideoFrameRate=60 ←ここを好きなリフレッシュレートに変える
AudioQuality=1

```
game.cfgはデフォルトだと
C:\Riot Games\League of Legends\Config\game.cfg
にあるみたいです。
急にFPSが下がってしまったけど原因がわからんという方は一度お試しください。
フォームに入力しても反映されない

フォームに値を入力し、ボタンを押しても正常に動作しないことが発生した。

以下はフォーム入力し、ボタンを押下した後のログ
```
Started POST "/result" for ::1 at 2025-05-07 13:47:05 +0900
Processing by HomesController#result as TURBO_STREAM
  Parameters: {"authenticity_token"=>"[FILTERED]", "content"=>{"word"=>"おはようございます"}, "commit"=>"変換"}
  Rendering layout layouts/application.html.erb
  Rendering homes/index.html.erb within layouts/application
  Rendered homes/index.html.erb within layouts/application (Duration: 0.6ms | Allocations: 181)
  Rendered layout layouts/application.html.erb (Duration: 44.4ms | Allocations: 1277)
Completed 200 OK in 64ms (Views: 46.1ms | ActiveRecord: 0.0ms | Allocations: 1896)
```
原因は2行目の「result as TURBO_STREAM」の部分だった。

turbo_streamで画面を動かしたい場合、Turbo_stream形式のファイル(result.turbo_stream.erb)を用意する必要がある

⇒それが存在せず、結果として何も返せていない状態

解決策として、TurboStreamを無効化した。
```
<%= form_with url: "/result", method: :post, model: @content, data: { turbo: false } do |f| %>
  <%= f.text_area :word, placeholder: "ここに入力" %>
  <%= f.submit "変換" %>
<% end %>
```
data: { turbo: false }を付け足すことで、正常に動作した。
クリップボードにコピーするバッチ【Windows】

## 1.はじめに
クリップボードに指定単語をコピーするためのバッチ
スタートアップフォルダに配置するとWindows　＋　R　で実行できて便利

## 2.クリップボードにコピーバッチ（改行あり）
```clip.bat
rem クリップボードにコピー（改行あり）
echo abcde! | clip
```
* remはコメント
* echoは標準出力
* clipでクリップボードにコピー
* 最後に改行が含まれた状態でクリップボードにコピーされる

実行結果
```
abcde!

```

## 3.クリップボードにコピーバッチ（改行なし）
```clip2.bat
rem クリップボードにコピー（改行なし）
SET /P　<NUL　=　"abcde!" | clip
```
* remはコメント
* SET /P　<NUL　=　""　で改行なし（""で囲わないと半角スペースが入るかも）
* clipでクリップボードにコピー
* 改行なしの状態でクリップボードにコピーされる

実行結果
```
abcde!
```
シンプルな名前付きMutexで排他制御

## はじめに
複数プロセス間でリソースを排他制御するため名前付きMutexで作ってみました。
環境はWindows、C言語です。

## コード
```C:C
// mutexのテスト

// 「シグナル状態」とは、そのミューテックスオブジェクトが
// どのスレッドにも所有されていない、つまりリソースが
// 利用可能である状態

#include <windows.h>
#include <stdio.h>
#include <unistd.h>
#include <time.h>

#define PRINT_WITH_TIME(fmt, ...)                               \
    do                                                          \
    {                                                           \
        time_t rawtime;                                         \
        struct tm *timeinfo;                                    \
        char buffer[9];                                         \
        time(&rawtime);                                         \
        timeinfo = localtime(&rawtime);                         \
        strftime(buffer, sizeof(buffer), "%H:%M:%S", timeinfo); \
        printf("[%s] " fmt, buffer, ##__VA_ARGS__);             \
    } while (0)


int main()
{
    HANDLE hMutex, oMutex;
    BOOL ret;
    DWORD res;
    char *mutexName = "NameOfMutexObject";

    // createMutex
    hMutex = CreateMutex(NULL, FALSE, mutexName);
    PRINT_WITH_TIME("called CreateMutex(). hMutex=0x%x\n", hMutex);
    if (hMutex == NULL) {
        printf("CreateMutex() エラー GetLastError: %d\n", GetLastError());
        exit(-1);
    }

    // WaitForSingleObject
    PRINT_WITH_TIME("before call WaitForSingleObject().\n");
    res = WaitForSingleObject(hMutex, INFINITE);
    PRINT_WITH_TIME("after  call WaitForSingleObject(). Result=0x%x\n", res);
    if (res != WAIT_OBJECT_0) {
        printf("WaitForSingleObject() エラー GetLastError: %d\n", GetLastError());
        exit(-1);
    }

    // OpenMutex
    oMutex = OpenMutex(MUTEX_ALL_ACCESS, FALSE, mutexName);
    PRINT_WITH_TIME("called OpenMutex(). hMutex=x%x\n", oMutex);
    if (oMutex == NULL) {
        printf("OpenMutex() エラー GetLastError: %d\n", GetLastError());
        exit(-1);
    }

    /* 実際はファイル更新操作 */
    sleep(15);

    // CloseHandle
    ret = CloseHandle(oMutex);
    PRINT_WITH_TIME("called CloseHandle(). ret=0x%x\n", ret);
    if (ret == 0) {
        printf("CloseHandle() エラー. GetLastError: %d\n", GetLastError());
        exit(-1);
    }

    // ReleaseMutex
    ret = ReleaseMutex(hMutex);
    PRINT_WITH_TIME("called ReleaseMutex(). ret=0x%x\n", ret);
    if (ret == 0) {
        printf("ReleaseMutex() エラー. GetLastError: %d\n", GetLastError());
        exit(-1);
    }

    return 0;
}
```

## 実行結果
コードをビルドして、a.exeを作成。２つのコマンドプロンプトを起動し、それぞれほぼ同時にa.exeを起動する。
```:コマンドプロンプト１
>a.exe
[13:29:26] called CreateMutex(). hMutex=0xa4
[13:29:26] before call WaitForSingleObject().
[13:29:26] after  call WaitForSingleObject(). Result=0x0
[13:29:26] called OpenMutex(). hMutex=xa8
[13:29:41] called CloseHandle(). ret=0x1
[13:29:41] called ReleaseMutex(). ret=0x1

>
```

```:コマンドプロンプト２
>a.exe
[13:29:28] called CreateMutex(). hMutex=0xa4
[13:29:28] before call WaitForSingleObject().
[13:29:41] after  call WaitForSingleObject(). Result=0x0
[13:29:41] called OpenMutex(). hMutex=xb4
[13:29:56] called CloseHandle(). ret=0x1
[13:29:56] called ReleaseMutex(). ret=0x1

>

```
確かに、コマンドプロンプト２で実行したa.exeがウェイトしているのを確認。
以上。
5月のVBAユーザー定義関数

```
'配列取り出し
Function GetItemByIndex(inputStr As String, index As Integer) As String
    Dim items() As String
    items = Split(inputStr, ",")
    
    If index >= 1 And index <= UBound(items) + 1 Then
        GetItemByIndex = items(index - 1)
    Else
        GetItemByIndex = ""
    End If
End Function

'配列重複削除
Function RemoveDuplicatesCSV(inputStr As String) As String
    Dim items() As String
    Dim dict As Object
    Dim i As Integer
    Dim result As String

    Set dict = CreateObject("Scripting.Dictionary")
    items = Split(inputStr, ",")

    For i = LBound(items) To UBound(items)
        If Not dict.exists(Trim(items(i))) Then
            dict.Add Trim(items(i)), True
        End If
    Next i

    RemoveDuplicatesCSV = Join(dict.keys, ",")
End Function
```
スタートアップフォルダを開くバッチ【Windows】

## 1.スタートアップフォルダ
```
C:\Users\[ユーザ名]\AppData\Local\Microsoft\WindowsApps
```

## 2.スタートアップフォルダを開くバッチ
スタートアップフォルダに下記のバッチを配置する。
Windows　＋　R　で実行できるようになる。
`ファイル名：[ファイル名].bat`

バッチファイルの中身
```my.bat
rem スタートアップフォルダを開く
start explorer "C:\Users\[ユーザ名]\AppData\Local\Microsoft\WindowsApps"
```
* remはコメント
* start explorerで指定フォルダを開く
* うまく実行できない場合はファイルの文字コードを確認する（フォルダ名に日本語がある場合はANSIで保存した方がいいかも）
MacBookでPHP開発環境を作る：MAMPを使った最新ガイド

### はじめに

PHPはWebサーバー上で動作するスクリプト言語です。そのため、単純にMacにインストールしただけではブラウザでPHPファイルを実行できません。
ローカル環境でPHPを動かすためには、ApacheやMySQLなどを一緒に管理できるMAMPのようなローカルサーバー環境が必要です。

この記事では、MacBook（macOS最新バージョン）でPHPの開発環境を簡単に構築できる方法として、**MAMP** を使う手順を紹介します。
初心者でも手軽にローカルサーバーを立ち上げ、ブラウザ上でPHPを動かせるようになることをゴールにしています。

### なぜMAMPを使うのか？

MAMPはMac用のオールインワン型ローカルサーバー環境です。Apache、MySQL、PHPが一括で管理でき、GUIベースで設定変更も可能。Homebrewなどのコマンド操作に自信がない人でも扱いやすいのが特徴です。

### 前提条件

* MacBook（macOS 最新版）
* インターネット接続
* 基本的なPC操作ができること

### ステップ1：MAMPをダウンロード・インストール

1. [MAMP公式サイト](https://www.mamp.info/en/) にアクセスします。
2. 最新のMAMP（無料版）をダウンロードします。
3. ダウンロードしたインストーラーを実行し、画面の指示に従ってインストールします。
4. インストール後、`/Applications/MAMP` フォルダにMAMPアプリが追加されていることを確認します。

### ステップ2：MAMPを起動

1. `/Applications/MAMP/MAMP.app` を起動します。
2. MAMPの管理画面が表示されます。
3. 「Start」ボタンをクリックすると、ApacheとMySQLサーバーが起動します。
4. ブラウザで `http://localhost` にアクセスし、MAMPのウェルカムページが表示されればOKです。

### ステップ3：PHPスクリプトを実行してみよう

1. `/Applications/MAMP/htdocs` フォルダに移動します。
2. `hello.php` というファイルを作成し、以下の内容を保存します：

   ```php
   <?php
   echo "Hello, MAMP!";
   ```
 

3. ブラウザで `http://localhost:8888/hello.php` にアクセスし、「Hello, MAMP!」と表示されれば成功です。
※ポートの設定を変えている場合は、8888を設定したポートに変えてください。

※PHPのスクリプトは閉じタグ ?> がなくても実行可能です。特に、純粋にPHPコードだけを書いている場合（例：<?php echo "Hello, MAMP!"; のような場合）は、閉じタグを省略することが推奨されることがあります。

なぜなら、閉じタグの後に不要な空白や改行があると、それがブラウザに送信され、意図しない出力やエラーの原因になることがあるからです。そのため、特にPHPのみのファイル（HTMLとの混在がない場合）では閉じタグを付けないほうが安全とされています。

### ステップ4：PHPバージョンの確認・変更

MAMPでは複数のPHPバージョンが用意されており、GUIから切り替え可能です。

1. MAMPを開きます。
2. 「PHP version」のプルダウンメニューから希望のPHPバージョンを選びます。
4. サーバーを再起動すれば新しいバージョンが反映されます。



### よくあるトラブルと対処法

* \`\`\*\* にアクセスできない\*\* → サーバーが起動しているか、ファイアウォール設定を確認
* **PHPバージョンが反映されない** → サーバー再起動を忘れていないか確認

### まとめ

MAMPを使えば、MacBook上に簡単かつ安定したPHP開発環境を作れます。GUI操作中心なので初心者にも扱いやすく、MySQL連携や複数バージョンの切り替えも簡単です。

### 参考リンク

* [MAMP公式サイト](https://www.mamp.info/en/)
* [PHP公式サイト](https://www.php.net/)
* [phpMyAdmin](https://www.phpmyadmin.net/)
DB インスタンスごとデータを消してしまったエンジニアの記録

## はじめに
Google Cloud の Cloud SQL がサポートしている [PostgreSQL 12 以前のメジャーバージョンが 2025 年 5 月 1 日以降拡張サポートに変わり](https://cloud.google.com/sql/docs/db-versions#database-version-support)，[追加料金が発生してしまう](https://cloud.google.com/sql/pricing#extended-support-pricing)ため，担当プロダクトの PostgreSQL バージョンアップをする必要がありました．バージョンアップ自体は Terraform 経由で行う手順となっていましたが，（自分の）想定外の挙動により開発環境のデータを DB インスタンスごと消してしまった話を共有します．

## 何をしたのか
元々 Terraform で管理されていた担当プロダクトの Cloud SQL は以下のように定義されていました．
```hcl
resource "google_sql_database_instance" "main" {
  name = "cloudsql_instance_POSTGRES11"
  database_version = "POSTGRES11"
  ...
}
```

このリソースを以下のように更新しました．
```hcl
resource "google_sql_database_instance" "main" {
  name = "cloudsql_instance"      # 名前も合わせて変更
  database_version = "POSTGRES15" # PostgreSQL15 に更新

  # インプレースバージョンアップするため削除保護を無効化する
  deletion_protection = false
  deletion_protection_enabled = false
  ...
}
```

上記の変更を適用した後，**中身が空っぽなデータベース**だけが残ってしまいました．．．

## terraform plan には書いてあった
この時の terraform plan は以下のようになっていました．適用前にも確認はしていましたが，IP が変わりそうで接続情報を更新しないと，ぐらいにしか認識できていませんでした．
```hcl
  # google_sql_database_instance.main must be replaced
-/+ resource "google_sql_database_instance" "main" {
      ~ name             = "cloudsql_instance_POSTGRES11" -> "cloudsql_instance" # forces replacement
      ~ database_version = "POSTGRES_11" -> "POSTGRES_15"

      ~ private_ip_address = "192.168.xxx.xxx" -> (known after apply)
      ...
    }
```

terraform plan コマンドの実行結果は以下の表にあるような表示が用いられます．
| 操作 | サマリ表記 | Change Result 記号 |
| --- | --- | --- |
| 追加 | `Create` | `+` |
| 削除 | `Delete` | `-` |
| 置換 | `Replace` | `-/+` |
| 更新 | `Update` | `~` |

今回適応されていた「置換」の操作は，削除したのちに追加する挙動になっています．つまり，データが入っているインスタンスを削除した後に，新しくインスタンスを作成したため，データがないデータベースが残りました．また，今回想定していたインプレースバージョンアップの場合，「更新」操作が適応されるはずで，同じインスタンスを保ちながら PostgreSQL のバージョンを上げてもらえるものでした．

## 今後への対策
今回データを消してしまった環境は幸いにも開発環境でしたが，今後同じようなことが起こらないように対策を考えました．予防策の一つとしてまず，自分と同じ境遇の人に向けた terraform plan の読み方を含めた Terraform で気をつけるべき点を記載したドキュメントを作成し，エンジニア全体に周知をしました．

また後日発覚したのが，インプレースアップデートに削除保護を無効化する（リソースの更新時に追記していた `deletion_protection = false` と `deletion_protection_enabled = false`）必要がなかったことです．インスタンスを削除する必要がない限り，削除保護を有効のままにしておけるのも予防策となりました．

最後に，[2025 年 2 月リリース](https://cloud.google.com/sql/docs/release-notes#February_20_2025)の [final backup](https://cloud.google.com/sql/docs/postgres/backup-recovery/backups#final-backups) 及び，[2025 年 3 月リリース](https://cloud.google.com/sql/docs/release-notes#March_24_2025)の [retained backup](https://cloud.google.com/sql/docs/mysql/backup-recovery/backups#retained-backups) から，Cloud SQL インスタンスに紐づかないバックアップを作成することができるため，最悪事後に復元の手段が取れそうです．

> 当時，Cloud SQL インスタンスを削除してしまうと，そのリソースに紐づいているバックアップも削除されてしまいました．[削除されたインスタンスのバックアップは Google Cloud で 4 日間保持している](https://cloud.google.com/sql/docs/mysql/backup-recovery/backups#recovery-backups)ので，それまでに [Google Cloud カスタマーケア](https://cloud.google.com/support?hl=en)にお問い合わせする方法しかありませんでした．

## まとめ
Terraform 操作の失敗から大きな学びを得られました．データベース周りは気をつけましょう！
WarpのAI Agentを使いこなす！開発効率を爆上げする活用例3選

## はじめに
最近注目されているモダンなターミナル「Warp」には、ChatGPTをベースにしたAI Agentが搭載されており、コマンドラインでの作業をより効率的に、そして直感的にしてくれます。

本記事では、このWarpのAI Agent機能を実際にどう活用できるのか、3つの具体例を通して紹介します。普段の開発における「ちょっと助けが欲しい」瞬間を強力にサポートしてくれるWarp AI Agentの魅力をぜひ体感してください。

## Warp AI Agentとは
https://docs.warp.dev/features/warp-ai/agent-mode

**ターミナルアプリ「Warp」に搭載されているAIアシスタント機能**です。
コマンドの補助生成やエラー解釈と実行など、いままでユーザーがしていたことを代行してくれます。

## 活用事例1　検索
ディレクトリやファイルの検索にAI Agentを使用してみます。
以下のディレクトリ構造を考えてみましょう。
```
/Users/{user_name}/Documents/laboratory
├── sample-A
├── sample-B
└── sample-C
```

それぞれsampleから始まるディレクトリが存在しますが、それぞれを一つのプロンプトで名前とパスまで表示させてみます。

### プロンプト
今回このようなプロンプトを与えました。
```
laboratoryディレクトリ内でsampleから始まるディレクトリの名前とパスを教えて欲しい
```

### 結果
結果はこのようになりました。求めていた通りの答えが返ってきました。
```
1. sample-A
   パス: /Users/{user_name}/Documents/laboratory/sample-A

2. sample-B
   パス: /Users/{user_name}/Documents/laboratory/sample-B

3. sample-C
   パス: /Users/{user_name}/Documents/laboratory/sample-C
```

コマンドでできないこともないですが、AI Agentだとコマンドを書くことなく結果を得ることができます。
また多少の表記揺れがあっても、AI Agentが読み取ってくれます。

## 活用事例2　テンプレートの生成
ソフトウェア開発において、最初の雛形（テンプレート）となる構成やコードを自動生成する場面は多いですよね。これもAI Agentに任せればコマンドを打たずともテンプレート作成をしてくれます。

### プロンプト
たとえば、以下のようなプロンプトを与えます。
```
xxxディレクトリ内にviteのvanilla + typescriptテンプレートを作成してほしい。
```

### 結果
すると自動でディレクトリ内に要望通りのviteテンプレートが作成されています。さらに`npm install`まで行ってくれるのであとはサーバー起動するだけで終了です。
```
Vanilla + TypeScriptのViteプロジェクトが正しく作成されました。プロジェクトの構造は以下の通りです：

/Users/k-logi24/Documents/laboratory/sample-B/
├── index.html（メインのHTMLファイル）
├── package.json（プロジェクト設定）
├── tsconfig.json（TypeScript設定）
├── public/
│   └── vite.svg（Viteのロゴ）
└── src/
    ├── counter.ts（カウンター機能）
    ├── main.ts（メインのTypeScriptファイル）
    ├── style.css（スタイルシート）
    ├── typescript.svg（TypeScriptのロゴ）
    └── vite-env.d.ts（Vite環境の型定義）
```

## 活用事例3　エラー解釈と対処法の提案
npmを使ってパッケージをインストールに以下のエラーが出ました。
```
npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or
npm error later to generate a package-lock.json file, then try again.
```
AI Agentに解決してもらいましょう。

### プロンプト
```
npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or
npm error later to generate a package-lock.json file, then try again.

エラー原因の特定と解決をして欲しい
```

### 結果
原因を導き、ヒントを教えながらエラーを解消してくれました。

```
原因が特定できました。package-lock.jsonファイルが存在しないことが確認できました。

解決手順を説明します：

1. このエラーが発生する主な理由：
•  プロジェクトにpackage-lock.jsonが存在しない
•  gitでクローンした際にpackage-lock.jsonが含まれていなかった
•  誤ってpackage-lock.jsonを削除してしまった
2. 解決方法：
•  まずnpm installを実行してpackage-lock.jsonを生成する必要があります
•  その後でnpm ciを実行できます

では、npm installを実行してpackage-lock.jsonを生成しましょう。

...
```

## さいごに
WarpのAI Agentは、開発者にとって第二の相棒のような存在になり得ます。特に、あいまいなコマンド操作やエラー対応に強く、「こうしたい」を即座にコマンドへ落とし込めるのが最大の魅力です。

まずはWarpをインストールして、日々の開発に取り入れてみてはいかがでしょうか？

## GoQSystem採用情報
GoQSystemでは一緒に働いてくれる仲間を募集中です！

https://goqsystem.recruit.site/?qiita=3094bc58203db664d72b
ノーコードで完結！DatabuttonによるFirebase連携とAnalytics設定完全ガイド

⸻


# ノーコードで完結！DatabuttonによるFirebase連携とAnalytics設定完全ガイド（2025年版）

こんにちは。この記事では、ノーコード開発ツール **[Databutton](https://databutton.com/?via=takahiro19)** を活用して、**Firebase Firestore との連携**および **Google Analytics（Firebase Analytics）** の設定を行う方法を、完全ガイド形式でご紹介します。

Firebaseの強力な機能を、コードを書かずにここまで使える！  
そんな可能性に満ちた組み合わせを、ぜひ体感してください。

---

## 🎯 このガイドの対象

- ノーコードでアプリを作ってみたい方
- DatabuttonでFirestoreを使いたい方
- ユーザーの動きをFirebase Analyticsで把握したい方
- でも **「コードは書きたくない」** という方

---

## 🛠 使用するもの

- **[Databutton](https://databutton.com/?via=takahiro19)**：GUIベースでWebアプリが作れるノーコードツール
- **Firebase**：Googleが提供するアプリ開発バックエンド
  - Firestore（NoSQLデータベース）
  - Google Analytics（ユーザー分析）

---

## 🔌 Firestoreとの連携（ノーコード）

### ✅ ステップ1：Firebaseのサービスアカウントを取得

Firebaseコンソールから、サービスアカウントキー（.json形式）を取得します。

### ✅ ステップ2：Databuttonにキーを登録

Databuttonの「Secrets」機能を使って、安全にキーを保管します。

### ✅ ステップ3：Firestoreとのやり取りをGUIで実装

Databuttonの**ノーコードバックエンドエージェント**を使って、Firestoreのデータ読み書きを構築できます。  
クエリの実行、データの保存、一覧表示などもGUI上の設定で完了します。

---

## 📊 Firebase Analytics（Google Analytics）の設定

### ✅ ステップ1：FirebaseでAnalyticsを有効にする

プロジェクトの「統合」タブから、Google Analyticsを有効化します。  
これにより、イベント計測用のID（G-XXXXXXX）が自動発行されます。

### ✅ ステップ2：Databuttonでノーコードイベント送信

Databuttonでは、特定のページ表示やボタン操作などに対して、**GUIベースでイベント送信処理**を設定できます。  
コードを一切書かずに、**「ページビュー」「検索」「クリック」などをFirebase Analyticsに記録**できます。

---

## 📈 ユーザー行動の可視化

Firebaseの分析ダッシュボードで、以下のようなデータが確認できます：

- 日別アクティブユーザー数
- イベント発生回数の推移
- デバイスや国ごとのアクセス状況
- 特定イベントごとのコンバージョン分析

ノーコードアプリでもここまで分析できるのか…と驚くはずです。

---

## 💡 活用例（完全ノーコード）

| 機能                         | ノーコードでの実現方法                          |
|------------------------------|-----------------------------------------------|
| フォーム入力をFirestoreに保存 | Databuttonの入力フォーム＋バックエンドエージェント |
| ページ閲覧をAnalyticsに記録   | ページ表示時にGUIでイベントを設定               |
| ユーザーの検索操作を分析      | 検索イベントをAnalyticsに送信                   |
| アクセス数のグラフ表示        | Firebaseのダッシュボードを活用                 |

---

## ✅ まとめ

- **Databutton × Firebase** の組み合わせは、ノーコードでも本格的なWebアプリ構築を可能にします。
- Firestoreに安全かつスムーズにアクセス可能。
- Google Analyticsとの統合で、ユーザーの動きが可視化され、改善に役立ちます。
- 何より、**一行もコードを書かずにここまでできる！** という点が大きな魅力です。

---

## 🔗 関連リンク

- 👉 [Databutton（公式）](https://databutton.com/?via=takahiro19)
- 👉 [Firebase Console](https://console.firebase.google.com/)
- 👉 [Firebase Analytics公式ドキュメント](https://firebase.google.com/products/analytics)

---

## 🙌 最後に

ノーコードでも、ここまでできる時代です。  
この記事が参考になったら、**いいね・ストック・フォロー**をお願いします！  
また、わからないことがあればお気軽にコメントください 😊


⸻
【Power Apps】ドロップダウン＆コンボボックスの色変更まとめ（FillやColorの扱いについて）③

# はじめに
Power Apps でドロップダウンやコンボボックスを使う時、
見た目を整えたいけどどのプロパティを触れば色が変更するかなどが
初見では分かりづらいと思います:sweat_drops:

本記事では以下のような色・スタイルのプロパティについて
わかりやすくまとめていきたいと思います！

### :arrow_down_small:①と②の記事はこちら:arrow_down_small:

https://qiita.com/Sanwa_Paint/items/55caf99eae08246b6c64

https://qiita.com/Sanwa_Paint/items/b59447ad54c6c3066c96


## コンボボックスならではの色変更
①と②の記事ではドロップダウンとコンボボックス共通で使用できるプロパティについて
説明を行っていましたが、今回はコンボボックスのみに出現するプロパティについて
説明を行っていきたいと思います。

:triangular_flag_on_post: **SelectionTagColor　選択したタグの色**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/54a1d659-7546-4ca5-8032-81f343e3a55f.png)

`SelectionTagColor` プロパティを `Color.Black` から `Color.Green` に変更してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/813d5771-646a-458f-a67a-afc6bb47c322.png)

:triangular_flag_on_post: **SelectionTagFill　選択したタグの背景色**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/9643178b-7a7c-4373-8737-57f5ff95d54e.png)

`SelectionTagFill` プロパティを `Self.HoverColor` から `Color.Pink` に変更してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/0f285cff-9693-4193-8dc4-048a2a0a6c9e.png)

このようにコンボボックスは複数選択が可能なので
選択したタグに対しての色付けが可能となります。

## そのほかの色変更ワンポイントテクニック:point_up:
ドロップダウンやコンボボックス共通で使用できる色変更のコツについてご紹介します。

例えば `Fill` を `Color.LightBlue` に設定しておき、Fill の色を基準にして
`PressedFill` や `HoverFill` の色に濃淡をつけて設定したいときの設定をご紹介します！

ここに `Fill` を `Color.LightBlue` に設定したドロップダウンがあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/da1db4ef-fe8c-4102-8774-4c42501899f3.png)

このドロップダウンの `HoverFill` のプロパティを以下のように設定します。
```ruby:HoverFill
ColorFade(Self.Fill,50%)
```
Seif.Fill はここでは `Color.LightBlue` のことを指します。
第二引数の50%は、基準の色に対してのフェードするパーセンテージを入力します。
正の数は明るくなり、負の数を入力すると暗くなります。

設定後に結果を見てみましょう。
コントロール上に合わせると Fill の色を基準に明るくなったことが分えんこうかります。
このようにしておくことで、Fillの色さえ変更を行えばおのずと他の色設定にも変更が適用されるので非常に便利です。
慣れてきたらどんどんと駆使していきましょう！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3719434/0a3bf222-05c4-4b5e-b509-73a85604be64.png)

## まとめ
以上、よく使用するドロップダウンやコンボボックスの視覚的なカラー変更についての説明を行ってきました！
基本的な使い方ではあるので、これを抑えて慣れていけば作業時間の短縮にもなったりするはずです。
他にも気付いたことがあれば随時記事を更新していきますので
ぜひご参考にしてみてください！！！
Windowsが復活した話

# Windows修復記＃２
## あらすじ
バックアップが遅いのはファイルの形式とか、数が多いからっぽい。ただあそこまで遅いのはどうなんだ。

さて、~~途中でubuntuも壊れたりして大変だったけれど、~~**なんやかんやあって**Windowsが復活しました。

## 対応録
### 解決へ
前回は特にほかの方法を模索せずにバックアップに全力を挙げていたのですが、改めて状況を整理すると、
- Windowsのパーティションは健在
- 起動時のGRUBメニューにおける**WindowsのエントリがMemory testに上書きされていた**

はい、これを忘れていましたよね。Windowsのブート情報探して、GRUBに反映できないか試しましょう
   >これを最初に試すべきだった
```
sudo os-prober
sudo update-grub
```
実行。
一行目のほうで、WindowsBootManagerが検知できた。壊れていなかったようだ。
二行目、なぜかFoundしない。
```
Warning: os-prober will not be executed to detect other bootable partitions.
Check GRUB_DISABLE_OS_PROBER documentation entry.
```

これは...覚えがあるぞ:sweat:
設定ファイルを編集する。
```
sudo nano /etc/default/grub
```
これで開いたところから、`GRUB_DISABLE_OS_PROBER`の行を探す。
```
#GRUB_DISABLE_OS_PROBER=false
```
あった。コメントアウトしてる。はずして`false`になっていることを確認して閉じる。
>`Ctrl+O`で保存`Enter`で決定、`Ctrl+X`で終了する。
```
sudo update-grub
```
を再び実行。
```
Found Windows Boot Manager on /(存在するディレクトリ名)
```
の行があることを確認。これでWindowsの起動情報がGRUBに追加できた。
このまま再起動すれば、Windowsが起動できるようになったはず。

...開いた。これにてWindowsが起動しなくなった件は**解決**。

## 反省
はい、今回の原因について、
```
GRUB_DISABLE_OS_PROBER=false
```
これが**コメントアウトされていたのが原因**ということになる。
これによって、GRUBがほかのOSを探す設定が無効に（`os-prober`が動かなく）なって、Windowsが検知されていなかったというオチだ。

#### なぜおこったのか
これはちゃんと自分のせい。
最近ubuntuが壊れがちで、GRUBまわりをいじっていたので、そのせい。
**素人が下手にいじらないほうがいい**と学んだ。
ただ最初のSSDがnanになった原因は不明のままである。接続不良が有力。

## 総括
とはいえ今回の件は非常に勉強になった。Windowsの消失という重大インシデントは心労がたまったが、これを解決するために非常に多くの知識を身につけられた（？）。
学習を進めて、次はほかの原因であったとしても迅速に解決できるようになろうと思案した。
【Rails】railsでawsのs3を使用するときの設定


# はじめに

こんにちは。アメリカに住みながら、独学でエンジニアを目指している Taira です。
本日は Rails チュートリアルで出てきた AWS S3 を使う際の`require: false`の意味と必要性についてまとめておきたいと思います

# Rails で AWS S3 を使う際の`require: false`の意味と必要性

Rails アプリで画像アップロードを行う際に AWS S3 を利用する場合、Gemfile に以下のように記述することがあります。

```ruby
group :production do
  gem 'aws-sdk-s3', '1.114.0', require: false
end
```

この記述には 2 つの意図があります。

---

## 1. `require: false`の意味

Ruby の`require` は、外部ライブラリや gem を読み込んで現在のプログラムで使えるようにするための文です。

Bundler は Gemfile に記述された gem を自動的に require するようになっていますが、`require: false`を付けることで、自動で require されなくなります。

これは下記のような理由で便利です。

- Rails 起動時のパフォーマンス向上
- 利用場面を限定したい
- require 順の制御

---

## 2. `group :production` の意味

この記述は、その gem を「本番環境のみ」で使うことを示します。

S3 は主に本番環境で画像やファイルを保存するために使われますが、開発時はローカルディスクで十分なため、ローカルにはインストールしないようにするのが理想的です。

---

## 3. `bundle config set --local without 'production'`

このコマンドは、「production グループに含まれる gem をインストールしない」ようにする Bundler の設定です。

これを実行した後に`bundle install`すれば、aws-sdk-s3 はローカルにはインストールされません。
そもそも、ローカルにインストールしない理由は、AWS の S3 を実際に使用するのは本番環境のみでローカル環境(開発環境)では使用しないからです。

---

## 4. Active Storage の場合は`require` 不要

**Active Storage は自動で`aws-sdk-s3`を require する**ため、開発者が自分で`require 'aws-sdk-s3'`を書く必要はありません。

つまり：

- **Active Storage で画像を S3 にアップするだけなら`require: false`のままで OK**
- しかし、**自前で S3 を操作するスクリプトを書く場合は`require 'aws-sdk-s3'`が必要**

---

## 5. まとめ

| 条件                        | `require` 必要なし | `require` 必要あり            |
| --------------------------- | ------------------ | ----------------------------- |
| Active Storage で S3 を使う | ○ (Rails が自動)   | -                             |
| 自前で S3 にアップロード    | -                  | ○ `require 'aws-sdk-s3'` 必要 |
Qiita アップデートサマリー - 2025年 4月

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88/80f67d1a-8ffa-4543-93c3-6ed61490997d.png)


## **はじめに**
Qiitaでは、エンジニアのみなさんからの声をもとに、日々開発を続けています。
この記事では、2025年4月にリリースした機能や最新のお知らせについてご紹介します。

Qiitaでアップデートやバグ修正をリリースしたら、[リリースノート](https://qiita.com/release-notes)、[Qiita 公式 Twitter](https://twitter.com/Qiita)、[Qiita Blog](https://blog.qiita.com/)でお知らせしています。

また、Qiitaへの質問や機能の要望などがありましたら、[Qiita Discussions](https://github.com/increments/qiita-discussions) へご投稿ください。

## **Markdownパーサーの新たな互換性サポートの導入を行いました**
*2025年4月9日リリース*

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88/98b7c418-fc3f-49fd-853a-eaa3bba8b75c.png)


Qiitaでは、2022年2月にMarkdownパーサーの変更を行いましたが、それ以前の記事の表示が崩れないように新たな互換性サポートの導入を行いました。

詳細は[こちらのQiita Blog](https://blog.qiita.com/markdown-parser-compatibility-support-introduce-202504/)の記事をご参照ください。


## **ストックのシェア機能をベータ版として提供中です**
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/88/df98ac65-6764-40e1-97cd-14b9fd42b36e.png" width="100%" alt=""/>

*2025年3月27日リリース*

これまでQiitaのストックは、記事を個人で保存し、活用するための機能として提供してきました。
しかし、「ストックを共有したい」「シリーズものの記事をまとめて紹介したい」 といったご要望を、ユーザーヒアリングや[Qiita Discussions](https://github.com/increments/qiita-discussions) などを通じて多くいただいていました。

そこで今回、ストックした記事を簡単にシェアできる新機能を追加しました！

「**ストックのシェア機能**」を使うことで以下のようなことができます。

- シリーズものの記事や関連記事をまとめて公開
- 役立つ記事をストックし、仲間と共有
- 「これは読んでおくべき！」という記事を、より多くの人に勧められる

新機能を活用すれば、より多くの人に価値ある記事を届けることができます。
Qiitaは、記事がより多くの人に届き、知見が広がることで、技術コミュニティがさらに発展すると考えています。
まずは気になる記事をストックし、シェアしてみてください！✨

ストックのシェア機能の詳しい使い方は、[Qiita Blog](https://blog.qiita.com/stock-share-beta/)で紹介しています。

https://blog.qiita.com/stock-share-beta/


## **RubyKaigi 2025 参加レポートを公開しました**

2025年4月16日から18日の3日間に渡って愛媛で開催された 「RubyKaigi 2025」に、Qiita株式会社から5名のスタッフが参加しました。

会場の様子やメンバーが印象に残ったセッションなどを紹介しているので、ぜひご覧ください🍊

https://qiita.com/official-columns/event/202505-rubykaigi2025-report/

また、Qiita・OPTiM・メドレーのRubyKaigi 2025 スポンサー3社の合同アフターイベントを開催します！
RubyKaigi・松山の思い出や、Ruby で最近してることを話したい・聞きたい方はぜひご参加ください🍺

お申し込みはconnpassから 🔽

https://increments.connpass.com/event/351891/

## **Qiita Tech Festa 2025 キックオフLIVEを開催します**
キックオフLIVEでは、毎年夏に開催していた「Qiita Engineer Festa」をリニューアルした「Qiita Tech Festa」のイベント内容をお伝えします！

様々な新企画紹介や、「Qiita Tech Festa」の楽しみ方・魅力をたっぷりご紹介するので、ぜひご参加ください🏃‍♂️


お申し込みはconnpassから 🔽

https://increments.connpass.com/event/353210/
猿でもわかるAIの倫理・リスクシリーズ 🐵⚠️AIと伝統産業の共存課題




## 1️⃣ はじめに：AI時代における伝統の価値とは？

近年、AI技術の進化は目覚ましく、製造・農業・アート・教育といった幅広い分野に活用が進んでいます。特に「業務効率化」や「最適化」においてAIの力は強力ですが、その一方で**伝統的な手仕事や技能、地域文化を破壊してしまうリスク**も見逃せません。

例えば、伝統工芸の現場では、「AIによるデザイン自動生成」や「製造ロボットの導入」により、熟練職人の仕事が減りつつあるという声も上がっています。

> 👉 **AIは果たして伝統産業を救うのか？ それとも淘汰するのか？**

この問いに対し、本記事では「AIと伝統産業の共存」に焦点を当て、技術者の視点から課題と解決策を深掘りします。

---

## 2️⃣ 技術概要：AI導入の実態と代表的な技術

伝統産業にAIを導入する際に使われる主な技術は以下の通りです：

| 技術                          | 活用例                       |
| --------------------------- | ------------------------- |
| 画像認識（Computer Vision）       | 手作業による品質検査を自動化（例：陶器のヒビ検出） |
| 自然言語処理（NLP）                 | 商品説明文やストーリーの自動生成          |
| 生成AI（Stable Diffusion, GPT） | 工芸品のデザイン提案やキャッチコピー作成      |
| ロボティクス + AI                 | 染色や成型の補助作業をロボットが学習        |

これらの技術は便利な一方で、「人間の熟練技術・美意識」とぶつかる場面も多く、単純な自動化では済まない繊細な調整が必要です。

---

## 3️⃣ 実装例：AIで伝統工芸デザインを支援する（Python + Stable Diffusion）

ここでは、**伝統的な着物デザインの支援ツール**を構築する簡単な例をご紹介します。
Stable DiffusionとGradioを使い、AIが生成した和柄を職人に提案するインターフェースを構築します。

### 💻 使用ライブラリ

```bash
pip install diffusers transformers gradio torch
```

### 🧵 コード例

```python
from diffusers import StableDiffusionPipeline
import torch
import gradio as gr

# モデル読み込み
pipe = StableDiffusionPipeline.from_pretrained(
    "CompVis/stable-diffusion-v1-4",
    torch_dtype=torch.float16
).to("cuda")

# 生成関数
def generate_kimono(prompt):
    image = pipe(prompt + " 和柄, 日本の伝統デザイン, 高精細").images[0]
    return image

# インターフェース
gr.Interface(
    fn=generate_kimono,
    inputs=gr.Textbox(label="キーワード（例：桜、波、鶴など）"),
    outputs="image",
    title="AI着物デザイン生成ツール"
).launch()
```

### ✅ 出力例

（※図1：桜をモチーフにした和柄生成例）
（※図2：鶴と波を組み合わせたデザイン提案）

このように、**AIは職人のインスピレーションを刺激する道具**としても使えます。

---

## 4️⃣ 実務でのコツと落とし穴

### 💡 実務での活用ポイント

* **補完として使う**：AIはあくまで案出しや下書きレベル。最終判断は人間が行うべき。
* **職人との対話を重視**：UI/UXは非エンジニアでも触りやすいようにする。
* **モデルチューニングは慎重に**：日本文化特有の文脈を反映するには、LoRAやDreamBoothでの微調整が効果的。

### ⚠️ よくある課題・誤解

* 「AIが全部やってくれる」→✖️職人の知見なしでは完成度が落ちる
* 「伝統＝アナログ」→✖️むしろ職人ほどAIツールでの表現が奥深くなることも
* 「文化盗用」→✖️オープンなモデルには注意（著作権・倫理的配慮が必要）

---

## 5️⃣ 応用編：地域密着型AI × クラウド連携

地方の工房や小規模な伝統産業の現場では、**クラウドインフラを活用することでAI活用のハードルを下げる**ことが可能です。

### 🌐 応用アーキテクチャ例（図3）

* 🎨 UI：Gradio on Streamlit / FastAPI
* 🧠 AI：Fine-tuned Stable Diffusion on AWS SageMaker
* ☁️ データ保存：S3 / Firestore
* 👥 連携：Slack通知 or LINE APIで職人とやりとり

> このようにクラウドとノーコード要素を組み合わせることで、\*\*「現場主導のAI利活用」\*\*が実現できます。

---

## 6️⃣ まとめ：共存の鍵は「補完」と「共創」

### ✅ AI活用のメリット

* 作業補助で職人の負担軽減
* 若手後継者の興味を引く
* 海外展開・マーケティング支援

### ❌ 注意すべき点

* 職人文化の置き換えにしないこと
* 訓練データやモデルの倫理的配慮
* 地域・伝統の文脈を尊重

---

## 🔮 おわりに：未来のものづくりへ

AIは「伝統を壊す敵」ではなく、「継承と革新を支えるパートナー」になる可能性を秘めています。
技術者としても、ただ効率化を目指すのではなく、**文化の継承・地域の価値を守る**視点を持つことがこれからの社会に求められる姿勢です。

---

ご希望があれば、図版（例：和柄生成例・アーキテクチャ図）も10枚までご提供できます。画像化しますか？
Excelですべてのシート倍率を100%にし、カーソルをA1に移動するマクロ

## Excelですべてのシート倍率を100%にし、カーソルをA1に移動するマクロ

### マクロをアドインとして登録する手順
[Excelを便利に！アドインの作成
](https://qiita.com/mj69/items/2dcf8637198f87463a8a)

### マクロ

```vb
Sub A1()
    Dim ws As Worksheet
    Application.ScreenUpdating = False
    
    For Each ws In ThisWorkbook.Worksheets
        ws.Activate
        ws.Zoom = 100
        ws.Cells(1, 1).Select
    Next ws

    Application.ScreenUpdating = True
End Sub

```
【ChatGPT】を使った専門文書簡略化Promptによる難読文書の理解です。


　どうも、カーブミラーです。

　今回は、ChatGPT（生成AI）を使った専門文書簡略化Promptによる難読文書の理解です。論文ベースになります。

:::note info
本記事は、ChatGPT（Plus版）
で行なっております。
画像はありません。あしからず。
:::
　ChatGPT等の動作状況を知らせる
　　OpenAIのステータスページ。
　　　[OpenAIステータス](https://status.openai.com/)
***
　こちらも載せますね。
　　[ChatGPTが使えない？ログインできない・反応しない原因やエラー時の対処法を解説](https://aismiley.co.jp/ai_news/chatgpt-error-resolution-explanation/)
***
　著作権法については
　　こちらを参照するのが
　　　良いのではないかと。

　文化庁レポートをもとにした
　　著作権法についての動画（約20分）
　　　[かいちのAI大学　【警告】ChatGPTの画像生成は危険です...【4o Image Generation】](https://youtu.be/8VLUnG-iyo0?si=rAfjMboqmNqppDGq)
***
　では、さっそく【本題】です。

　今回は、
　　ChatGPT（生成AI）を使った
　　　専門文書簡略化Promptによる
　　　　難読文書の理解です。

　私が記事を書く際に
　　科学論文などを読んで
　　　自分なりの解釈をすることが
　　　　多々あります。

　その際に役立つのは、
　　ChatGPTをはじめとする
　　　生成AIです。

　論文をもとに
　　記事にしてもらうと
　　　比較的論文の理解が
　　　　高まります。

　これは経験則でしたが、
　　実際に実験がなされ、
　　　確認されました。

　それが
　　今回の論文になります。

　[arXiv：LLM-based Text Simplification and its Effect on User Comprehension and Cognitive Load](https://arxiv.org/abs/2505.01980)

　タイトルは
　　『LLMによるテキスト簡素化と
　　　　ユーザーの理解、
　　　　　および認知負荷への影響』
　　　　　　と書かれています。

　詳細は、
　　省きますね。

　その論文の中に
　　Promptがありましたが、
　　　少しだけ手を加えました。

　文章の与え方と
　　記事化することを
　　　修正・追記しただけです。

　もとのPromptだと
　　文章の与え方が“以下の”だったため
　　　“与える”にして、
　　　　与える形式に
　　　　　アップロードも加えた形です｡

　また、
　　記事化せずに
　　　実行すると、
　　　　段落のない文章になり、
　　　　　非常に読みづらかった。

　この二点の
　　修正・追記のみ。
***
　こちらが
　　そのPromptです。
```Text:専門文書簡略化Prompt
与える文章を、小学6年生でも簡単に理解できるように簡略化・記事化してください。元の意味は保ちつつ、より簡単な言葉と文の構造を使ってください。重要な情報は省かないでください。出力は簡略化された文章のみとしてください。
```

　使い方
　❶入力枠に上記Promptを入力・送信
　❷文書のコピペ、URLリンク、または
　　　PDFファイルの指定のいずれか
　❸送信

　❶と❷は、
　　一緒の入力でも、構いません。
　　　その場合は、
　　　　一行の空白を空けて
　　　　　コピペしてください。

　また、
　　“小学6年生”とありますが、
　　　各自でご自分のレベルに合わせて
　　　　変更してください。

　“小学6年生”で生成すると、
　　少し難しい漢字が
　　　ひらがなだったり
　　　　漢字だったりします😅

　以下が、このPromptを使って
　　本論文を簡略化したものになります｡

***（Prompt実行結果）***
### 難しい文章を分かりやすくするAIの研究

インターネットにはたくさんの情報がありますが、内容が難しすぎて読んでも意味が分からないことがあります。特に、医学や法律、科学のような専門的な話は、大人でも分かりにくいことがよくあります。

そこで、Googleの研究チームは「難しい文章を、意味を変えずに分かりやすくするAI」を作る研究をしました。このAIは、「Gemini（ジェミニ）」という仕組みを使って、文章をできるだけ元のままにしながら、やさしい言葉や短い文に言い換えることができます。

研究では、4,563人の人に31種類の文章を読んでもらいました。ある人には元の難しい文章を読んでもらい、別の人にはAIがやさしく書き直した文章を読んでもらいました。そして、それぞれの人に内容についてのクイズを出しました。

結果は、やさしく書かれた文章を読んだ人のほうがクイズに正しく答えられることが分かりました（約4%アップ）。特に医学の内容では、正解率が約15%も上がりました。さらに、「読みやすかったか」や「自信を持って答えられたか」なども聞いたところ、やさしい文章を読んだ人のほうが「分かりやすかった」と感じていました。

この研究から分かったことは、AIを使って文章を分かりやすくすると、多くの人が内容を正しく理解できるようになるということです。これによって、難しい情報も誰でもアクセスしやすくなりそうです。
***

　読んでわかるとおり、
　　論文で使用された生成AIは、
　　　GoogleのGeminiです。

　ですが、
　　主要な生成AIならば
　　　なんの問題もないかと思います。

　まぁ、
　　生成AIだから
　　　ハルシネーションの危険性は
　　　　可能性としてありますので
　　　　　注意は必要ですが😅

　みなさんの
　　作品制作の糧に
　　　なれば、幸いです。

　今回は、ここまで。
Excelですべてのヘッダとフッタを削除するマクロ

## Excelですべてのヘッダとフッタを削除するマクロ

### マクロをアドインとして登録する手順
[Excelを便利に！アドインの作成
](https://qiita.com/mj69/items/2dcf8637198f87463a8a)

### マクロ
すべてのシートのヘッダとフッタを削除する
```vb
Sub ヘッダフッタ削除()
    Dim ws As Worksheet
    For Each ws In ActiveWorkbook.Sheets
        ws.PageSetup.LeftHeader = ""
        ws.PageSetup.CenterHeader = ""
        ws.PageSetup.RightHeader = ""
        ws.PageSetup.LeftFooter = ""
        ws.PageSetup.CenterFooter = ""
        ws.PageSetup.RightFooter = ""
    Next ws
    MsgBox "すべてのヘッダとフッタを削除しました", vbInformation, "完了"
End Sub

```

開いているアクティブなシートのみ削除する
```vb
Sub ヘッダフッタ削除()
    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
    End With
    MsgBox "アクティブなシートのヘッダとフッタを削除しました", vbInformation, "完了"
End Sub
```
Debian/Ubuntuのすべてのパッケージを自動的に最新にする

初投稿なので小ネタ。[自分のサイトにも載せた話題](https://tech.matchy.net/archives/1679)とだいたい同じ。

DebianやUbuntuのサーバーでインストールされているパッケージをPPAなどのサードパーティのヤツも含めてとにかく全部自動的にアップデートするための設定を行う。

まず/etc/apt/apt.conf.d/20auto-upgradesに以下の記述がなければ追記する。

```
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
```

次に/etc/apt/apt.conf.d/52unattended-upgrades-localというファイルを作って以下のような内容を記述する。

```
Unattended-Upgrade::Allowed-Origins {
        "*:*";
}

Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
```

上記の「* : *」(実際はスペースなし) の指定がとにかくなんでもかんでもアップデートするという指定だ。もちろん設定ファイルがコンフリクトするヤツとかはアップデートされずに引っかかっていることはあるのでたまにサーバーにログインして確認しよう。

その下の3行はそれぞれ「apt autoremoveに相当する処理を実行する」「カーネルとかアップデートされたらリブートする」「リブートするのは午前4時」という指定だ。

本番運用のサーバーでは結構乱暴な設定かもしれないので、真似する方はご注意。
Excelですべてのフォントとフォントサイズを統一するマクロ

## Excelですべてのフォントとフォントサイズを統一するマクロ

### マクロをアドインとして登録する手順
[Excelを便利に！アドインの作成
](https://qiita.com/mj69/items/2dcf8637198f87463a8a)

### マクロ
すべてのシートに対してフォントを[Meiryo UI]に、フォントサイズを[9pt]に変更する
```vb
Sub フォント変更()
    Dim ws As Worksheet
    Dim cell As Range
    
    ' 全てのワークシートに適用
    For Each ws In ThisWorkbook.Sheets
        ws.Cells.Font.Name = "Meiryo UI"
        ws.Cells.Font.Size = 9
    Next ws
    
    MsgBox "すべてのフォントを変更しました!", vbInformation, "完了"
End Sub

```

開いているアクティブなシートにのみ適用する
```vb
Sub フォント変更()
    Dim ws As Worksheet
    Set ws = ActiveSheet ' 現在アクティブなシートを取得
    
    ws.Cells.Font.Name = "Meiryo UI"
    ws.Cells.Font.Size = 9
    
    MsgBox "アクティブなシートのフォントを変更しました!", vbInformation, "完了"
End Sub
```
猿でもわかるAIの倫理・リスクシリーズ 🐵⚠️AIによる文化消滅リスク




## AIによる文化消滅リスクと、その技術的対処法

---

### 🧭 1. はじめに：AIは文化を守るのか、壊すのか？

生成AI、翻訳AI、リコメンドAIなど、AIは私たちの日常やビジネスに急速に浸透しています。しかし便利さの裏には、「少数言語が淘汰される」「文化的な多様性が失われる」といった副作用も見え始めています。

特に自然言語処理（NLP）分野では、主要言語（英語、中国語など）のデータが大量に学習される一方で、地域独自の言語や文化表現が反映されないケースが多く、これは“文化的アルゴリズムバイアス”と呼ばれる問題の温床となっています。

この記事では、**AIによる文化消滅リスク**を技術的視点から掘り下げ、**実際の事例やコードを通じて、どう対処できるか**を紹介します。

---

### 🌐 2. AIが引き起こす文化消滅リスクとは？

#### ■ 現象の例：

* **マイナー言語が生成AIに学習されない** → 結果としてAIが誤った翻訳や“文化無視”の応答を返す。
* **YouTubeやSNSの推薦アルゴリズム** → グローバルトレンドばかり表示し、地域文化の可視性が低下。
* **画像生成AIによる伝統的衣装の“標準化”** → 多様性のある美意識やスタイルが平準化される。

#### ■ 技術的背景：

* 学習データの偏り（英語中心のコーパス）
* 評価指標の画一性（BLEUやF1などが文化的要素を無視）
* モデル設計での多様性非考慮

---

### 🛠️ 3. 対処法：文化的多様性を守るAI設計（実装付き）

ここでは、Python＋HuggingFace Transformersを使った、**多言語対応のNLPモデル調整**の簡易デモを行います。

#### ✅ 目的：

地域言語（例：アイヌ語）の翻訳精度を高めるため、微調整を行う。

```python
from transformers import MarianMTModel, MarianTokenizer, Seq2SeqTrainer, Seq2SeqTrainingArguments, Dataset
import pandas as pd

# 1. ローカルの少数言語データ（例：Ainu語→日本語）を読み込む
data = pd.read_csv("ainu_ja_dataset.csv")
dataset = Dataset.from_pandas(data)

# 2. トークナイザーとモデル（多言語ベース）をロード
model_name = "Helsinki-NLP/opus-mt-mul-en"
tokenizer = MarianTokenizer.from_pretrained(model_name)
model = MarianMTModel.from_pretrained(model_name)

# 3. トークン化
def tokenize_function(example):
    return tokenizer(example["source"], text_target=example["target"], truncation=True)

tokenized_datasets = dataset.map(tokenize_function)

# 4. 学習設定とTrainer
training_args = Seq2SeqTrainingArguments(
    output_dir="./results",
    per_device_train_batch_size=4,
    num_train_epochs=3,
    logging_dir="./logs",
    save_strategy="epoch",
)

trainer = Seq2SeqTrainer(
    model=model,
    args=training_args,
    train_dataset=tokenized_datasets,
    tokenizer=tokenizer,
)

trainer.train()
```

#### 📌 注意点：

* データ数が少ない場合は、**LoRAやPEFT**の活用が有効
* 単語レベルでの文化的表現（例：方言）を扱うなら、**トークナイザーの再学習**も推奨

---

### 🧠 4. 現場で役立つTIPS & よくあるミス

| 項目        | 内容                                          |
| --------- | ------------------------------------------- |
| ✅ よく使う技術  | SentencePiece、LoRA、PEFT、HuggingFace Trainer |
| ⚠️ よくあるミス | “翻訳精度”だけで評価してしまい、文化的表現の逸脱を見逃す               |
| 💡 おすすめ戦略 | ローカルの言語研究者と協力してアノテーション基準を作る                 |

---

### 🚀 5. 応用例：地域文化保存のためのAI活用

* **博物館向けチャットボット**：地域方言に対応したNLPモデルを導入
* **AIナレーション**：地元の伝承や民話を自然なイントネーションで読み上げ
* **文化イベントの自動翻訳**：多言語対応字幕生成（Whisper + MarianMT）

---

### 🔚 6. まとめ：文化と技術のバランス

#### ✅ メリット

* 少数文化の可視性が向上
* AIの公平性・多様性の強化

#### ⚠️ デメリット

* データ収集・ラベリングに手間がかかる
* 評価指標が文化的バイアスを測れない

#### 🔮 今後の展望

* \*\*文化多様性評価指標（Cultural Fairness Metrics）\*\*の研究が進行中
* グローバルモデルからローカル特化モデルへの分岐も進む

---

### 📎 補足リンク・参考資料

* [HuggingFace Multilingual Models](https://huggingface.co/models?language=multilingual)
* [AIによる言語絶滅リスクに関するUNESCOのレポート](https://unesco.org/)
* [LoRAとPEFTの基礎解説（Qiita記事）](https://qiita.com/)

---

💬 **皆さんの地域の文化や言語を守るAI活用事例があれば、ぜひコメントで共有してください！一緒に“文化に優しいAI”を目指しましょう！**

---

ご希望があれば、このブログ記事に図解（10枚）も追加できます。図の例：

* AI翻訳モデルの文化的偏りの図解
* 少数言語のモデル分布
* トークナイザーが起こす文化的逸脱のパターン図

図を追加しましょうか？
コード書かない人間がQiitaで発信したくなった理由とその中身

## はじめまして！

これまで何度もQiitaに助けられてきましたが、  
最近になって「自分も書けるんじゃ…？」とふと思い、筆をとってみました。

現在、業務DXや業務設計まわりを中心に副業でのフリーランス活動を画策中です。  
エンジニアのようにコードベースのポートフォリオは持ちにくい分、Qiitaでの発信を通じて、  
自分のナレッジや思考の整理をしていければと思っています。

世には“悩めるPM”や“要件定義で目が泳ぐ人”も多いはず。  
そんな方々と「あるある」と共感しながら、少しでもお役に立てる内容を目指します。

AIと壁打ちしながら整理してきた思考ログの一部、アウトプットしていきます。

## 書いていきたいこと（予定）

### 💼 要件定義・業務設計
- 提案が通らない時の構成の工夫
- 要件定義が「伝わらない」問題とその対処法
- 業務フローをどう整理するか、どこまで書くか

### 📊 可視化・KPI設計
- Google SheetsでつくるKPIダッシュボード
- 「LTV？なにをどう見るの？」という状態からのBI設計
- 成果を“実感”に変える指標の伝え方

### 🧩 現場とのギャップあるある
- システムと業務の“橋渡し役”ってこういうこと
- 「それって誰がうれしいの？」と聞きたくなる瞬間集
- 提案書が空振りする理由トップ5（と対策）

### 🛠️ フリーランス活動ログ
- 初めての提案書で工夫したこと
- 営業文面・料金設計・資料づくりのリアル
- “中の人視点”で支援するとはどういうことか？

---

## おわりに

最初から全部書ける気はしてないですが、1つずつ、  
“現場あるある”や“モヤっとポイント”をほどいていけたらと思います。

共感・コメント・ツッコミ歓迎です。
Excelでセルのスタイルを削除するマクロ

## Excelでセルのスタイルを削除するマクロ

### マクロをアドインとして登録する手順
[Excelを便利に！アドインの作成
](https://qiita.com/mj69/items/2dcf8637198f87463a8a)

### マクロ
デフォルト以外のセルのスタイルを削除する
```vb
Sub セルのスタイル削除()
    Dim style As Style
    Dim defaultStyleName As String
    defaultStyleName = "標準" ' 日本語版のExcelでは「標準」、英語版では「Normal」

    For Each style In ActiveWorkbook.Styles
        If style.Name <> defaultStyleName Then
            On Error Resume Next
            style.Delete
            On Error GoTo 0
        End If
    Next style

    MsgBox "カスタムセルスタイルが削除されました。", vbInformation, "完了"
End Sub

```
Excelで非表示の名前を表示して削除するマクロ

## Excelで非表示の名前を表示して削除するマクロ

### マクロをアドインとして登録する手順
[Excelを便利に！アドインの作成
](https://qiita.com/mj69/items/2dcf8637198f87463a8a)

### マクロ
非表示となっている名前を表示状態にし、Print_AreaとPrint_Titles以外のすべての名前の定義を削除する
```vb
Sub 名前削除()
    Dim nm As Name
    Dim i As Long

    ' コレクションから項目を削除するため、逆順ループを使用
    For i = ActiveWorkbook.Names.Count To 1 Step -1
        Set nm = ActiveWorkbook.Names(i)
        
        ' 非表示の名前を表示状態にする
        If nm.Visible = False Then
            nm.Visible = True
            Debug.Print "非表示だった名前を表示: " & nm.Name
        End If
        
        ' 名前が「Print_Area」または「Print_Titles」を含む場合は残し、それ以外は削除
        If InStr(1, UCase(nm.Name), "PRINT_AREA", vbTextCompare) = 0 And _
           InStr(1, UCase(nm.Name), "PRINT_TITLES", vbTextCompare) = 0 Then
            nm.Delete
        End If
    Next i
    
    MsgBox "Print_AreaとPrint_Titles以外の名前を削除しました。"
End Sub
```
Excelを便利に！アドインの作成

## Excelを便利に！アドインの作成

### 概要
エクセルで資料を作成後に提出する際、他の案件で使用したエクセルをコピーして使いまわしていたりすると「セルのスタイル」や「名前の定義」に他のお客様名などが残ったままになっている場合があります。
毎度確認して削除するのも大変なので、マクロをアドインとして登録して作業時間を短縮する方法を紹介します。

### マクロ
1. [すべてのシート倍率を100%にし、カーソルをA1に移動する](https://qiita.com/mj69/items/7bf6c436c1e4563b0667)
1. [名前の定義を削除](https://qiita.com/mj69/items/64b40318020e6acb0ae6)
1. [セルのスタイルを削除する](https://qiita.com/mj69/items/44acdf4161a4c07bd73e)
1. [すべてのフォントとフォントサイズを統一する](https://qiita.com/mj69/items/25e365c185690a930006)
1. [すべてのヘッダとフッタを削除する](https://qiita.com/mj69/items/1635b3ef6066dfaba717)



### マクロをアドインとして登録する手順
エクセルに開発タブがない場合は、[ファイル]-[その他]-[オプション]-[リボンのユーザ設定]を開き、開発にチェックを入れる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/7e674ad6-8db8-4e3e-8841-abeb78f1354e.png)

開発タブの[Visual Basic]を開く
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/06646161-0ff2-4ff4-824a-d5de2a69219b.png)

Alt+I+Mを押下しモジュールを追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/962c0519-e1aa-4aa9-a272-5a7c38c3e0e2.png)

マクロを貼り付けて保存を選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/9bcb325e-006b-428b-a72e-c5d779191184.png)

保存時に[ファイルの種類]を[Excelアドイン]に変更しすることで保存先が[C:\Users\ユーザー名\AppData\Roaming\Microsoft\AddIns]に設定されるので、任意のファイル名を設定して保存する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/dde11909-fbe4-4a28-9800-a3d1caf96ecb.png)

[ファイル]-[その他]-[オプション]-[リボンのユーザ設定]を開き、右下の[新しいタブ]を選択して、新しいタブと新しいグループを作成する。（タブ、グループ名は任意で設定する）
[コマンドの種類]を[マクロ]にして保存したマクロを選択した状態で[追加>>]を選択して新しいグループに追加
[OK]を選択してオプション画面を閉じる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/61b09f6a-0724-462b-90c5-ee7939ebed26.png)

追加した新しいタブにマクロが追加されていることを確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/298070/bccabf4f-06c2-4df5-a716-6d3a7d5ec3db.png)