OmniAICreator/Qiita-1.07M huggingface dataset:
【rails】Rails + DevContainer + Tailwind CSS環境でbin/devがGem::FilePermissionErrorになる原因と対処法


## はじめに

Rails 8 + DevContainer 環境で `tailwindcss-rails` を使って開発を始めようとしたところ、`bin/dev` 実行時に以下のようなエラーに遭遇しました：

```
Installing foreman...
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/local/... directory.
```

この記事では、このエラーの原因と解決策を明確に解説します。

---

## 前提環境

- Rails 8.0.2
- Node 24
- tailwindcss-rails 3.3.1（Tailwind CSS v3 対応）
- DevContainer（Docker ベース）
- foreman を使用して bin/dev で Rails サーバーと Tailwind ビルドを同時起動

---

## 通常の tailwind を rails で反映させる方法

### 1. Gemfile に tailwind-rails 3.3.1 を入力

```
gem "tailwindcss-rails", "3.3.1"
```

### 2. rails tailwindcss\:install を実行

```
rails tailwindcss:install
```

### 3. bin/dev を実行

→ ここで失敗。

## エラーの原因

### 1. `bin/dev` による foreman のグローバルインストール処理

デフォルトの `bin/dev` には以下のような処理が含まれています：

```sh
if ! gem list foreman -i --silent; then
  echo "Installing foreman..."
  gem install foreman
fi
```

これは「foreman がグローバル gem 環境にインストールされていない場合、自動でインストールする」という処理です。

しかし、**DevContainer などの環境では **********************\*\*\*\*************************\*\*************************\*\*\*\*************************`/usr/local/...`************************\*\*************************\*\*\*\*************************\*\************************* への書き込み権限がないため、 ************************\*\*************************\*\*\*\*************************\*\*************************`gem install`************************\*\*************************\*\*\*\*************************\*\************************* が失敗\*\*します。

その結果、以下のようなエラーが発生します：

```
Gem::FilePermissionError: You don't have write permissions...
```

また、foreman を Gemfile で管理していても `gem list` はグローバル gem しか見ないため、毎回「未インストール」と誤判定されてしまいます。

---

## 正しい解決方法

### ✅ Gemfile で foreman を管理

```ruby
gem "tailwindcss-rails", "3.3.1"

group :development do
  gem 'foreman'
end
```

### ✅ bundle install

```bash
bundle install
```

### ✅ `bin/dev`を修正

以下のように、`gem install foreman` の自動処理を削除し、 `bundle exec` を明示します：

```sh
#!/usr/bin/env sh

export PORT="${PORT:-3000}"
export RUBY_DEBUG_OPEN="true"
export RUBY_DEBUG_LAZY="true"

# foremanはGemfileで管理しているためbundle execで呼び出す
exec bundle exec foreman start -f Procfile.dev "$@"
```

### ✅ tailwindcss のセットアップ

```bash
rails tailwindcss:install
```

これにより `application.tailwind.css` や `tailwind.config.js` などが生成されます。

---

## まとめ

| 課題                             | 解決策                                                  |
| -------------------------------- | ------------------------------------------------------- |
| `gem install foreman` が失敗する | Gemfile に書いて `bundle install` で管理する            |
| `bin/dev` が毎回失敗する         | `gem install` 処理を削除し `bundle exec foreman` に変更 |
| foreman が見つからない           | `bundle exec` を使うことで Bundler 環境を明示           |

この方法で、DevContainer や CI 環境でも安定して Rails + Tailwind CSS の開発が行えるようになります。

---
Power BI ServiceでBearer認証APIを更新できない問題

## はじめに

マネーフォワードi社が提供する [Admina](https://admina.moneyforward.com/jp) というSaaS管理サービスを利用して社内アカウント管理を行っていますが、標準機能では部署単位の絞り込みや集計ができません。

そこで、Adminaが提供しているREST APIと、社内のSharePointリストをPower BIで組み合わせて、**部署別にアカウント管理ができるダッシュボード**を構築することにしました。

Power BI Desktopでレポートの作成までは順調でしたが、「せっかくなら共有とスケジュール更新もしたい」と思い、Power BI Serviceに発行したところ、**資格情報エラーやスケジュール更新不可の問題**に直面。
その解決までの試行錯誤と、突破口となった「接続テストをスキップ」機能の使い方を備忘としてまとめます。

---

## 実現したかったこと

* APIキー + Bearer認証のREST APIからアカウント情報を取得
* Power BI Desktopで部署別管理レポートを作成
* Power BI Serviceに発行して、スケジュール更新＆共有を実現

---

## ハマった現象

Power BI Desktop では以下のようなコードで問題なく動作していました。

```m
let
    Source = Json.Document(
        Web.Contents(
            "https://api.itmc.i.moneyforward.com",
            [
                RelativePath = "endpoint",
                Headers = [ Authorization = "Bearer MY_API_KEY" ]
            ]
        )
    )
in
    Source
```

ところが、Power BI Service に発行後、セマンティックモデルの資格情報設定で次のようなエラーが発生：

```
データ ソースの資格情報の更新に失敗しました:
The credentials provided for the Web source are invalid.
(Source at https://api.example.com)
```

さらに、スケジュール更新の設定画面では：

```
現在、以下のデータ ソースが更新をサポートしていないため、
このセマンティックモデルの更新をスケジューラできません:
・ Query1 のデータソース
```

と表示され、定期更新自体が不可能な状態になってしまいました。

---

## 原因の本質

調査の結果、以下のPower BI Serviceの仕様が原因であることが分かりました：

* Power BI Service は `Web.Contents()` に指定された **BaseUrl に対して、認証なしのGET/HEADリクエストで接続テスト**を行う
* このとき `404 Not Found` が返ると、「接続できない＝更新対象外」と判断されてしまう
* さらに匿名認証を設定しても、**`Authorization` ヘッダーがService上で破棄されることがある**

つまり、**認証が必須なAPI**であっても、**認証前にPower BI Serviceが勝手に接続可否を判定してしまう**ことが、スケジュール更新不可の根本原因でした。

---

## 試したこと（全滅）

* `RelativePath` を使わず、URL全体を `Web.Contents` の第1引数に渡す
  → Power BI Service側で「動的URL」と判定されスケジュール更新不可

* `BaseUrl` を深めに設定し、`RelativePath` にエンドポイントを指定
  → URL構成としては正しいが、依然として接続テストで弾かれる

* データソースの資格情報を「匿名」、プライバシーレベルを「組織」に設定
  → 変化なし、資格情報エラーのまま

結果、どれを試してもスケジュール更新は有効になりませんでした。

---

## 解決策：「接続テストをスキップ」を有効化

最終的に解決に導いたのは、Power BI Service 上のセマンティックモデル設定にある、

> データ ソースの資格情報 > 資格情報を編集 > 「接続テストをスキップする」

にチェックを入れるだけ。

これだけで、**接続テスト時に認証なしでBaseUrlにアクセスされる処理がスキップされ、正常に認証付きAPIへアクセスできるようになりました。**

このUI操作は内部的には、以下のMコードのように `Web.Contents()` に `SkipTestConnection = true` を指定したのと同等の意味を持ちます。

```m
let
    Source = Json.Document(
        Web.Contents(
            "https://api.example.com",
            [
                RelativePath = "endpoint",
                Headers = [ Authorization = "Bearer MY_API_KEY" ],
                SkipTestConnection = true
            ]
        )
    )
in
    Source
```

---

## スケジュール更新も成功

この変更後、Power BI Desktop から再発行してみたところ：

* 資格情報設定画面での接続エラーが消えた
* スケジュール更新の設定が可能になった
* 無事、APIからの定期データ取得が自動化できた！

---

## 注意点と補足

* `SkipTestConnection=true` は [公式ドキュメント](https://learn.microsoft.com/ja-jp/powerquery-m/web-contents) に明記されていない「非公開の挙動」に分類されます
* 今後のアップデートで動作が変わる可能性があるため、**本番利用時は十分に検証したうえでの採用を推奨**
* より堅牢に運用したい場合は、以下のような構成も検討余地あり：

  * API Gateway で `Authorization` ヘッダーを不要にするプロキシ層を用意
  * Power Query SDK による `.pqx` カスタムコネクターで認証制御を実装

---

## おわりに

Power BI Desktop で完璧に動いていたものが、Power BI Service に載せたとたん動かない……。
よくある話ですが、今回は **「テスト接続をスキップする」チェック一つ**で救われました。

この記事が、同じようなエラーで悩んでいる方の助けになれば嬉しいです。
Ubuntu20.04にてPHPのばーじょん指定で、imagick gdインストール

通常のインストール
 ```
apt install php-imagick -y
```
対してPHP7.3を指定してインストール
```
apt install php7.3-imagick -y
```
下記コマンドにて確認。
```
php -m |grep imagick
imagick
```
gd インストール
```
apt install php-gd
バージョン指定
apt install php7.3-gd
php -m |grep gd

```
表示でOK。
ブラウザphpinfoにて下記確認。
 <img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101462/d1864b54-f20d-4b6f-a454-cdd03cec0d01.png" width="70%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/101462/c25f48d1-ce01-46c3-8d53-dabd892f55d8.png" width="70%">


下記サイト参照。
https://www.kwonline.org/memo2/2021/10/26/install-imagick-on-ubuntu-20_04/
＜太治奨揮＞エンジニア初心者が成長するためのマインドセット5つ

こんにちは、太治奨揮です。

前回は「エンジニア初心者がスキルアップするための実践的な方法」についてお話ししましたが、技術力を向上させることはもちろん大切です。それと同時に、エンジニアとして成長するためには「マインドセット」も非常に重要です。

今回は、エンジニア初心者が成長するために心に留めておくべきマインドセットを5つご紹介します。これらを意識することで、あなたのキャリアが大きく加速すること間違いなしです。

１　失敗は学びのチャンスと捉える
エンジニアの道を歩んでいると、必ずと言っていいほど壁にぶつかります。エラーやバグ、予期しない問題に直面することも多いでしょう。しかし、失敗を「ネガティブな経験」と捉えるのではなく、「学びのチャンス」として活用することが重要です。

例えば、エラーが発生したときにすぐに諦めずに、どこで間違ったのか、どうすれば解決できるのかを考えることで、次回のトラブルシューティング能力が高まります。失敗を恐れず、問題解決に向けて取り組む姿勢こそが成長に繋がります。

２　自分のペースで成長する
エンジニアの世界には多くの情報が溢れており、ついつい焦ってしまうこともあります。周りの進捗を見て「自分はまだこんなレベルだ」と落ち込むこともあるでしょう。しかし、他人と比べず、自分のペースで成長することが最も重要です。

スキルアップには時間がかかりますし、焦って成果を求めることは逆効果になることもあります。小さな進歩でも自分で認めて、少しずつ着実にスキルを積み上げていくことが大切です。

３　目標を明確に設定する
エンジニアとしての成長を実感するためには、具体的な目標を設定することが不可欠です。漠然と「上手くなりたい」と思っていても、成長の指針が見えません。

例えば、「次の3ヶ月でReactを使ったWebアプリを作成する」「今年中にアルゴリズムを理解する」「毎日1時間コードを書く」など、目標を明確にして、そのために必要なステップを計画的に進めることが大切です。目標達成のために努力を積み重ねることで、自然と成長を実感できます。

４　質問することを恐れない
エンジニアの仕事では、分からないことに直面することがほとんどです。「質問するのは恥ずかしい」「自分で解決したい」と思うかもしれませんが、質問は成長の近道です。

最初は自力で解決することも重要ですが、行き詰まったときには早めに質問をしましょう。分からないことをそのままにしておくと、効率的に学習が進まなくなります。質問することで、他のエンジニアから新たな視点や知識を得られ、自分の成長に繋がります。

５　持続可能な学習習慣を作る
エンジニアとして成長し続けるためには、持続可能な学習習慣を作ることが重要です。どんなにモチベーションが高くても、学習習慣が続かなければ意味がありません。

毎日少しでもコードに触れる、週に一度技術ブログを読む、月に一度オンライン勉強会に参加するなど、自分に合ったペースで学びを続けることが大切です。継続することで、少しずつスキルが身についていき、成長を実感できるようになります。

まとめ
エンジニアとして成功するためには、技術的なスキルだけでなく、マインドセットが非常に重要です。以下の5つのマインドセットを意識することで、確実に成長することができます。

失敗を学びのチャンスと捉える

自分のペースで成長する

目標を明確に設定する

質問を恐れず、積極的に行う

持続可能な学習習慣を作る

これらを実践することで、技術的なスキルアップに加えて、エンジニアとしての自信も深まります。エンジニア初心者の方は、ぜひこれらを心に留めて、日々の学びを深めていきましょう！
あaaa

import streamlit as st
import pdfplumber
import pandas as pd

def extract_tables_with_titles(pdf):
    results = []

    for page_num, page in enumerate(pdf.pages):
        text = page.extract_text()
        tables = page.extract_tables()

        for i, table in enumerate(tables):
            # テーブルをDataFrame化（ただし今回は中身表示しない）
            if len(table) < 2:
                continue  # ヘッダーと1行以上必要

            headers = table[0]
            table_df = pd.DataFrame(table[1:], columns=headers)

            # ページ内のテキストを行ごとに分割
            lines = text.split('\n') if text else []
            table_title = f"Table_{page_num+1}_{i+1}"
            description = "No description found."

            # タイトルと説明候補を前後の行から推定
            for j, line in enumerate(lines):
                if all(h in line for h in headers[:1]):  # ヘッダーの一部が含まれる行を検出
                    if j > 0:
                        table_title = lines[j-1].strip()
                    if j+1 < len(lines):
                        description = lines[j+1].strip()
                    break

            results.append({
                "table_title": table_title,
                "description": description
            })

    return results

def main():
    st.title("PDF内の表と説明抽出アプリ（PDFPlumber使用）")

    uploaded_file = st.file_uploader("PDFファイルをアップロード", type=["pdf"])

    if uploaded_file:
        with pdfplumber.open(uploaded_file) as pdf:
            extracted_info = extract_tables_with_titles(pdf)

        if extracted_info:
            df = pd.DataFrame(extracted_info)
            st.subheader("抽出されたテーブル情報")
            st.dataframe(df)
        else:
            st.warning("表が見つかりませんでした。")

if __name__ == "__main__":
    main()
CIS AWS Foundations Benchmark v5.0.0 の変更点

## はじめに
2025/3/31 にリリースされた CIS AWS Foundations Benchmark が v5.0.0 について、v4.0.0 からの変更内容をまとめました。

:::note
解説部分の記載は私見や所感などを含みますのでご注意ください。完全な変更内容はオリジナルの PDF をご参照ください。
:::

v4 → v5 はメジャーバージョンが上がった一方で、新規に追加された項目はなく、軽微な変更に留まっているように見受けられます。

v4.0.0 以前の変更点を確認されたい方は [過去記事](https://qiita.com/hayao_k/items/a15cceb8086c7eb49413#%E9%81%8E%E5%8E%BB%E8%A8%98%E4%BA%8B) も参照いただければと思います。

## CIS AWS Foundations Benchmark とは
米国の非営利団体である CIS (Center for Internet Secuirty) が公開している AWS アカウントの基本的なセキュリティを実装するための技術的なベストプラクティスです。

CIS は 各種 OS、サーバー、クラウド環境などを強化するためのガイドラインとして多数の CIS Benchmark を発行しており、PCI DSS などのコンプライアンス要件で業界標準のベストプラクティスとの記載があった場合などに参照されます。

CIS AWS Foundations Benchmark は CIS のサイトから PDF 形式でダウンロードできます。ライセンスは CC BY-NC-SA (Creative Commons Attribution-NonCommercial-ShareAlike) です。

https://www.cisecurity.org/benchmark/amazon_web_services

## 3 Logging
### 変更があった項目
#### 3.1 Ensure CloudTrail is enabled in all regions (Automated)
参考訳: すべてのリージョンで CloudTrail が有効化されていることを確認する

Assessment Status (評価ステータス) が Automated から Manual に変更されました。

監査手順及び修復手順には変更ありません。

#### 3.4 Ensure that server access logging is enabled on the CloudTrail S3 bucket (Manual)
参考訳: CloudTrail の S3 バケットでサーバーアクセスログが有効であることを確認する

Assessment Status (評価ステータス) が Automated から Manual に変更されました。

監査手順及び修復手順には変更ありません。

## 5 Networking
### 変更があった項目
#### 5.1.2 Ensure CIFS access is restricted to trusted networks to prevent unauthorized access (Automated)
参考訳: 不正アクセスを防止するため、CIFS アクセスが信頼できるネットワークに限定されていることを確認する

Assessment Status (評価ステータス) が Manual から Automated に変更されました。

CLI での監査、修正手順において FromPort ではなく、ToPort を使用することで port 445 へのｍアクセスを明示的に確認するよう変更されました。

```
aws ec2 describe-security-groups --region <region-name> --group-ids <security-group-id> --query 'SecurityGroups[*].IpPermissions[?ToPort==445].{CIDR:IpRanges[*].CidrIp,Port:ToPort}'
```



## 過去記事
https://qiita.com/hayao_k/items/fed7c07c9f05c445ce1f

https://qiita.com/hayao_k/items/cd8a0589782b981cc442

https://qiita.com/hayao_k/items/81bd073c53b916993177

https://qiita.com/hayao_k/items/e41a016942e32f9aa8a9

https://qiita.com/hayao_k/items/8272f4a8be785cc2a98a

https://qiita.com/hayao_k/items/f1c518da2ce8490447b1
ChatGPT活用でブログレビュー作業を効率化してみた

「時間がかかる」「見落としが多い」「表現が揃わない」──ブログ記事のレビューに、そんな悩みはつきものです。

もしその作業が、SEOに強いプロの目線で、自動かつ正確に処理できたらどうでしょう？

今回は、そんな理想を実現するために私が作成したChatGPT用プロンプトをご紹介します。SEOの専門家としての視点を取り入れ、文章の修正・最適化を効率良く進められるように設計しました。

> ※使用ツール：ChatGPT（GPT-4oモデル）
> ※本記事の内容は、2024/10/21時点の仕様です。

# プロンプトの概要
このプロンプトの目的は、SEOに配慮しつつ、文章を効率的に見直して修正することです。
以下の要点を踏まえた修正が行われるように設計しています。

* 文法的な誤りを修正しつつ、SEOに基づく自然な表現に最適化する
* 不適切な句読点や冗長な表現を削除し、簡潔で読みやすい文章に整える
* 文体の統一を図り、適切な敬語や表現を維持する

また、ブログレビューの際に指摘されがちな細かな部分、例えば句読点の位置や文体の揺れに対して、効率的かつ正確なフィードバックを提供します。

# プロンプト
今回作成したプロンプトは次の通りです。

```
あなたは、SEOの専門家兼プロのコンテンツライターです。
以下の手順に従って、ブログの記事をレビューしてください。
​
# 実行手順:
1.まず最初に、記事の内容と記事の情報を私が提供します。
2.受け取った情報に基づいて、記事を修正してください。
​
# 補足
・句読点の打ち方に不自然な点がある場合は修正してください。
・慣用句やことわざ、専門用語の表現に誤りがあると考えられる場合は修正してください。
・数字とアルファベットは半角に統一してください。
・文法的な誤り、文章の表現が不適切な部分、スペルミスやタイプミスを見つけて正確な表現に修正してください。
・適度で適切な敬語が使われているか確認し修正してください。
・主語と述語の関係がねじれていないか確認し修正してください。
・文体が一貫しているか確認し修正してください。
・文章の読みやすさを向上させるため、より自然で適切な表現に変えられる箇所を修正してください。
・文と文のつながりや論理的な流れに問題がある部分を確認して修正してください。
・一つの文章が程よい長さで書かれており、長くとも60字程度で収まっているか確認し修正してください。
【重要】最後にその修正前と修正後の箇所だけを比較できるように箇条書きで示してください。
その結果とともに校正のポイントや注意点を教えてください。修正前の全文を表示してはいけません。
```

# 実行結果
このプロンプトを使用し、実際にブログのレビューを行いました。

プロンプトが生成した結果は、文法の誤りに加え、SEOの観点から見た冗長な表現や表記ゆれも改善されていることが確認できました。また、文章の流れや繋がりがスムーズになり、読みやすさが向上しています。

実行結果は次の通りです。
![画像1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/472b48cd-f170-4c9d-94e2-241223f03e75.png)

上記の結果を基に、実際の記事は以下のように修正しました。（一部抜粋）
※「修正前」はインプットデータの文章を記載し、「修正後」はその文章の修正案を記載しています。

![画像2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2629176/71cf00fe-3d25-446e-bdc5-f07704018497.png)


# まとめ
今回作成したプロンプトの活用により、ブログレビュー作業の効率が大幅に向上しました。
特に、表現の自然さや文体の統一、読みやすさの向上に重点を置いた修正が行われることにより、読者にとって理解しやすい文章に仕上げることができると思います。また、冗長な部分の省略や、適切な表現への置き換えが迅速に行われるため、レビュー作業の負担が軽減されるというメリットも感じられました。

# 最後に
テンダでは、「こんなプロジェクトに挑戦したい」「こんなチームで働きたい」「理想のチームを創りたい」と願う仲間を求めています。
カジュアル面談も随時受付中です。ぜひ一度お話ししましょう！:sunny:

[募集職種一覧](https://hrmos.co/pages/tenda/jobs)
[カジュアル面談の申込](https://hrmos.co/pages/tenda/jobs/031002/apply)
[テンダで働く人や社風について](https://note.com/tenda_recruit)
[テンダのMicrosoftサービス](https://mssp.tenda.co.jp/)
【Rails初学者】add_index 使いどころをアプリ開発と照らして考えてみたい

# 『indexって何？』
〜使いどころをアプリ開発と照らして考えてみたい〜

## はじめに
開発中のアプリで「indexって付けたほうがいいのかな？」と悩みました。
調べるうちに、indexは便利だけど万能ではないということ、ちゃんと理解して張らないと逆効果になることもあると知り、この記事を自分への備忘録として残しておきます。

---

## そもそも`index`ってなに？
index（インデックス）とは、データベースの「検索用の目次」みたいなもの。
大量のデータから特定の値を探すときに、パッと探せるようになるらしい。
## 例：ユーザー名から検索したいとき

```ruby
User.find_by(name: "千葉さん")
```
`name`に`index`を張っていないと、全ユーザーの`name`を順番に1つずつ見ていく処理（全件検索）となる。
これが、たくさんいたら時間がかかる。
`index`を張っておくと、アルファベット順やあいうえお順に並んだ「目次」から即検索できるようになって、読み込みが速くなる。

## `index`のメリット・デメリット
| メリット                        | デメリット                    |
| --------------------------- | ------------------------ |
| 検索が爆速になる                    | 書き込み（INSERT/UPDATE）が遅くなる |
| `find_by` や `where` の検索が高速化 | 使わないカラムに張っても意味がない        |
| 重複禁止（unique）にも使える           | テーブル構造が複雑になることも          |

## Railsでの`index`の張り方
マイグレーションファイルを作成
```ruby
rails generate migration add_index_to_users_email
```

中身はこうなる
```ruby
class AddIndexToUsersEmail < ActiveRecord::Migration[6.0]
  def change
    add_index :users, :email, unique: true
  end
end
```

## 自分のアプリでの使い所を考える
私のアプリでは、日々の記録を蓄積し、必要に応じて共有できる設計を考えています。
その中で、indexをどこに張るべきかを様々な記事を読み悩みました。

## 使ってみたいと考えたときの`index`
- `users.email`→ Deviseでログインに使うので、必ず検索される。UNIQUE付きで張る
- `records.user_id`→ ユーザーごとの記録を一覧表示するので、検索高速化に必要かなあと思う。
- `departments_users.department_id`→ 特定のカテゴリで絞り込む操作があるため、張っておこうかな。

## いらなそう
- `users.notification_enabled（boolean)`→ `true/false`の2値しかないので意味がない
- `tags.name`→ 検索頻度が低い場合は優先度低め

## 最後に自分へ一言
「全部にindex張らないようにs」
ちゃんと使い所を見極めて張る。
これからも、読み込み・書き込みのバランスを考えながら設計していく。

## 参考
楽々ERDレッスン
[参考](https://tech.tabechoku.com/entry/2021/02/10/121212)
[参考](https://qiita.com/seiya1121/items/fb074d727c6f40a55f22)
Fedora 41 への DaVinci Resolve 19 導入

# Fedora 41 への DaVinci Resolve 19 導入

DaVinci Resolve 19 を Fedora 41 にインストールしたときの手順です。
※Fedora42でのインストールも確認済み

## 1. 動作環境

- PC: Ryzen 7 5700X
- GPU: AMD Radeon RX 6600
- OS: Fedora 41 

## 2. DaVinci Resolve のインストール

### 2.1. ダウンロードと展開

1.  **DaVinci Resolve のダウンロード**
    Blackmagic Design の公式サイトから `DaVinci_Resolve_19.1.4_Linux.zip` をダウンロードします。

2.  **ZIP ファイルの展開**
    ダウンロードした `DaVinci_Resolve_19.1.4_Linux.zip` ファイルを展開します。
    

### 2.2. インストーラーの実行

1.  **ターミナルを開き、展開したフォルダへ移動**
    ターミナルを起動し、先ほど展開して作成された DaVinci Resolve のフォルダに移動します。
    
    ```bash
    cd ~/Downloads/DaVinci_Resolve_19.1.4_Linux
    ```

2.  **インストーラーの実行**
    以下のコマンドを実行して、DaVinci Resolve インストーラーを起動します。

    ```bash
    sudo SKIP_PACKAGE_CHECK=1 ./DaVinci_Resolve_19.1.4_Linux.run -i
    ```
    -   `SKIP_PACKAGE_CHECK=1`: DaVinci Resolve は特定の古いライブラリバージョンを要求することがありますが、Fedora のような最新システムではこれらが原因でインストールに失敗することがあります。この環境変数を設定することで、一部の依存関係チェックをスキップし、インストールを試みます。
    -   `-i`: インストーラーをインタラクティブモードで起動し、インストールプロセスを進めます。

    画面の指示に従ってインストールを完了してください。

### 2.3. インストール後の調整

1.  **ライブラリの競合回避**
    DaVinci Resolve に同梱されている一部のライブラリ (例: `libgio`, `libglib`, `libgmodule`) が、システムのライブラリと競合して起動問題を引き起こすことがあります。これを回避するため、Resolve 内の該当ライブラリを別の場所に移動させます。

    ```bash
    cd /opt/resolve/libs/
    sudo mkdir Libs_backup
    sudo mv libgio* Libs_backup/
    sudo mv libglib* Libs_backup/
    sudo mv libgmodule* Libs_backup/
    ```
    
2.  **追加ライブラリのインストール**
    DaVinci Resolve の動作に必要な追加のライブラリをインストールします。

    ```bash
    sudo dnf install apr apr-util libxcrypt-compat
    ```
    -   `apr` と `apr-util`: Apache Portable Runtime ライブラリです。
    -   `libxcrypt-compat`: 古いプログラムとの互換性のために `libcrypt` API を提供します。

## 3. AMD GPU 向け設定 (ROCm の導入)

AMD Radeon GPU (RX6600 など) を使用している場合、OpenCL や HIP を介した GPU アクセラレーションのために ROCm (Radeon Open Compute platform) の導入が推奨されます。

1.  **ユーザーを `render` および `video` グループに追加**
    GPU ハードウェアへのアクセス権をユーザーに付与します。

    ```bash
    sudo usermod -a -G render,video $LOGNAME
    ```

2.  **ROCm パッケージのインストール**
    ROCm の主要なコンポーネントをインストールします。

    ```bash
    sudo dnf install rocm-hip rocm-opencl
    ```
    オプションで、開発用ヘッダーなどもインストールできます (通常は上記で十分な場合があります)。
    ```bash
    sudo dnf install rocm-hip-devel
    ```

3.  **ROCm インストールの確認**
    ROCm が正しくインストールされ、GPU が認識されているかを確認します。

    ```bash
    rocminfo
    ```
    コマンドの実行結果に、ご使用の GPU (例: gfx1032, RX 6600) の情報が表示されれば、ROCm の設定は成功です。

## 5. おわりに

Fedora への DaVinci Resolve 19 のインストールは完了です。
統計検定1級　2023　統計応用(理工学)　問3　解説

![img20250521_11462393.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/fa8d5bc0-424f-4b37-a0ef-dea9140dd46e.jpeg)
![img20250521_11464908.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/ab15a459-e084-4d1c-bc9b-2c06dbc78f52.jpeg)
![img20250521_11473629.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3576811/54cf5805-7a6d-4080-98b5-7ae91b98ec39.jpeg)
outlookを使いこなすぞ（基礎）

## Office365 Outlook
　いままでそんなに触れてこなかった分野です。

ExcelやPowerPointは資料作りや資料データを作るのにだいぶ活用させていただきましたが、outlookは正直つかってなかったといってよいほど使ってなかった。最近使えそうなことに気づいて使っていきながら発信も加えていきたいと思う。

## システム部で作った連絡先CSVのインポート

1.Peopleをクリック
![スクリーンショット 2025-05-22 102037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/10c2f7e4-a736-414c-b138-020e89dd31b9.png)


2.連絡先の上で右クリック
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/dc72f85d-59f0-4f06-a407-1fec221f6352.png">


3.新しいフォルダを作成
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/71f0ca66-db63-47f8-b633-b8d1094d7aea.png">

4.shinnというフォルダを作成
<img width="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/f2c35ec3-66d5-4a4b-8333-cb90ad03df84.png">


5.outlook起動
<img widt="300" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/e1a4be36-b678-4b9f-823e-a21f08f35f4e.png">


6.サイドバー（左）で「メール」選択

7.「ファイル」選択

8.開くエクスポートクリック
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/9831c92e-88b2-4213-9077-10a8fe8b2b8b.png">

9.インポートエクスポートを行う
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/6aedb0c6-319c-4fb1-9af2-a2fba7a819da.png">

10.他のプログラムまたは、ファイルからのインポート
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/d7e27ade-7082-4f30-a1af-2aab17e572af.png">

11.テキストファイル　（コンマ区切り）選択
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/e573b0ef-06f3-45ca-a699-eb7068eeae0c.png">

12.参照で連絡先CSVファイルを選択
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/81817ae5-2bdd-458e-973f-7b6adbaadd6e.png">

オプションは
重複した場合（１番上）インポートデータ（全）＋重複していない元データ
重複しても（２番目）インポートデータ（全）＋元データ（全）
重複する（３番目）重複していないインポートデータ＋元データ（全）

13.参照からCSVファイルを選択
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/ed4eebc3-d442-49c3-b46a-7f4588834437.png">

14.次へ
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/9d74e277-8e0a-4a4d-9e75-4fe23c3aca22.png">

15.複数ある場合は使いたいメールアドレス内の連絡先にある作ったフォルダを選択
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/92307ba7-ac50-461d-b0f4-dd556d3e01e9.png">


16.以下の処理を実行します：以下の枠の選択したCSVの先頭にチェックを入れる
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/136fe1fd-7675-4be0-8a88-ec486f74f51b.png">

17.グレーアウトしていたフィールドの一致が選べるようになる。
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/567a9df7-dd6f-48fe-a6f0-3ed907ae397c.png">

18.フィールドの一致を選択する
<img width="450" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/bd3986eb-e73c-419b-b017-93b9884ee76a.png">

19.文字化け発生
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/960935/c3f3f1c7-9cc3-4cc2-98aa-97a2b6c1a264.png)

基礎２「えんこーど」へ
PostgreSQLの照合順序をクエリ単位で指定する

## 環境
PostgreSQL12

## 文字セットを設定する

PostgreSQLで利用される文字セット（エンコーディング）は、initdbのタイミングで指定することができます。

特に指定しなければ、OSのlibcが提供しているロケールがデフォルでがセットされることになります。

たいてい、OSのロケールは、ja_JP.UTF-8（触っていなければen_US.UTF-8）がセットされているはずなので、PostgreSQLにもそのまま引き継がれているはずです。

また、createdbでデータベースを作成するときに、各データベース単位でロケールを指定することもできます。指定しなければ、initdbをしたときに設定した文字セットがそのまま引き継がれます。

データベース全体の文字セットを確認する方法です。
```
#SHOW LC_COLLATE;
 lc_collate
-------------
 en_US.UTF-8
```

データベース全体の文字セットはpg_settingsのシステムカタログに設定されているため、つぎのSQLで確認することもできます。

```
#select name, setting from pg_settings where name = 'lc_collate';
    name     |   setting   
-------------+-------------
 lc_collate  | en_US.UTF-8 
```

データベース単位でセットされている文字セットを確認する方法です。

```
>psql -l
                                         List of databases
          Name           |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-------------------------+----------+----------+-------------+-------------+-----------------------
 postgres                | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 hoge_development        | vagrant  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 hoge_production         | vagrant  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 hoge_test               | vagrant  | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0               | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                         |          |          |             |             | postgres=CTc/postgres
 template1               | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
                         |          |          |             |             | postgres=CTc/postgres
(6 rows)
```

## 文字セットの一覧

PostgreSQLで設定できる文字セットの一覧はつぎのSQLで確認することができます。このシステムカタログでセットされている値を使うことになります。

```
#select * from pg_collation;
```

## icuロケールとは？

PostgreSQL10より組み込まれたicuロケールを利用したい場合は、利用するロケールを明示的に指定する必要があります。

icuとはInternational Components for Unicodeのことで、国際標準に対応したロケールのようです。これからのデファクトスタンダードとなるのだろうか？

ソートデータの中に、全角ひらがな、半角ひらがな、全角カタカナ、半角カタカナ、アルファベット、数字などが混在する場合、libcロケールとはソート順が微妙に異なってくるようです。

それにしても、あまりこだわる部分ではないような気はしますが、こんなところにこだわりが出てくるような業務はどのような業界なんだろう・・・


## クエリ―単位で文字セットを指定

クエリ―単位で文字セットを指定することもできます。データベースの文字セットがen_US.utf8で設定されているが、アプリからjp_JP.utf8でソートさせたいような場合に、細工をかけることができます。

本番環境と開発環境とで文字セットが異なっている場合、日本語を扱っていると、微妙にソート順が異なるケースに出くわすことがあります。

そのような場合は、クエリー単位にカスタマイズをしてやり過ごすしかありません。Order By句で各カラムごとにCollateで指定してやると実現できます。

en_US.utf8の文字セットでソートさせる場合

```sql
Order By colum1 Collate "en_US.utf8"
```

jp_JP.utf8の文字セットでソートさせる場合

```sql
Order By colum1 Collate "jp_JP.utf8"
```

このようにカラムごとに混在させることもできます。（こんな使い方はないでしょうが・・・）

```sql
Order By colum1 Collate "jp_JP.utf8", colum1 Collate "en_US.utf8"
```
PHPで学ぶ「セッション認証」と「フラッシュメッセージ」の仕組み

## はじめに

今日は、PHPを使ってログイン認証システムとフラッシュメッセージの仕組みについて理解が深まった。この記事では、その学びを整理する。

---

## セッションの基本

PHPでセッションを使うには、必ず `session_start()` を呼ぶ必要がある。これにより `$_SESSION` が有効になり、セッションデータの作成または復元が行われる。

### セッションIDがない（初回アクセス）

* PHPが自動でランダムなセッションID（ハッシュ値）を生成
* `$_SESSION` にデータを書き込むと、そのセッションIDに紐づくデータがサーバー側のストレージに保存される

### セッションIDがある（2回目以降）

* PHPはクッキーからセッションIDを取得
* 対応するセッションデータが存在すれば、`$_SESSION` に復元され、スクリプト内で自由に使えるようになる

---

## ログイン認証の流れ

ログイン認証は、セッションに特定のキーと値が存在するかどうかで判断できる。
例えば、キーが `user_id` の場合

### ログイン処理時

* フォームから送られたデータを検証
* 正しいユーザーであれば、`session_start()` を呼んで `$_SESSION` を作成し、`user_id` をキーとして保存する

### ログイン済判定時

* 次回以降のリクエストで `session_start()` によって `$_SESSION` が復元される
* `$_SESSION['user_id']` が存在すればログイン済と判定できる
* `user_id` の値が実際のユーザーIDであれば、そのIDをもとにユーザー情報を取得し、認証状態を管理するクラスなどに保持する

このようにして、セッションベースの認証管理が実現できる。

---

## フラッシュメッセージの仕組み

今回特に印象的だったのは、フラッシュメッセージがセッションの仕組みを活用しているという点。

具体的には以下のように実装される。

1. セッションに `$_SESSION['flash']['success']` や `$_SESSION['flash']['error']` のような形式でメッセージを保存
2. 表示時に `getFlash('success')` のような関数で取得
3. 取得と同時にそのキーを `unset()` して削除

これにより、「次のリクエストだけ表示され、その後は消える」というフラッシュメッセージの仕様が自然に実現できる。

---

## まとめ

* `session_start()` でセッションデータの作成または復元が行われる
* セッションは `$_SESSION` にデータを保存することで、リクエスト間の状態を保持できる
* 認証はセッションキーとその値の有無で判断し、必要に応じてユーザーデータを取得して再利用する
* フラッシュメッセージは、セッションを使った一時的なデータ管理として非常に有効

---

## おわりに

フレームワークを使わなくても、セッションとロジックだけでここまで認証システムを構築できることに感動した。PHPのセッションの仕組みを知ることで、フレームワーク内部の挙動にも納得感が生まれるようになった。
【AWS DataSync × CloudWatch】データ転送エラーを自動検出して通知する方法

# 【AWS DataSync × CloudWatch】データ転送エラーを自動検出して通知する方法

大量データの転送やバックアップに便利な **AWS DataSync**。  
でも、**転送エラーが起きても気づかない**まま放置されると、大事なデータが失われる可能性も。

そこで今回は、**DataSyncで転送失敗時に自動で通知を飛ばす方法**を、CloudWatchとSNSを組み合わせて解説します。

---

## 🔸 この記事でできること

- DataSyncの**転送タスク失敗を検知**
- CloudWatchでアラームを作成
- SNS（Simple Notification Service）で**メール通知 or Slack通知**

---

## 🔧 前提条件

- AWSアカウントがある  
- DataSyncタスクをすでに作成済み  
- 通知先メール or Slack Webhook URL を準備済み（どちらか）

---

## ✅ 手順概要

1. CloudWatch メトリクスを確認  
2. アラーム条件を設定（失敗イベント）  
3. 通知用のSNSトピックを作成  
4. SNSとアラームを連携  
5. 通知が届くかテスト

---

## ① CloudWatchでDataSyncのメトリクスを確認

DataSyncは転送タスクごとに以下のメトリクスを提供しています。

- `TaskExecutionStatus`  
- `BytesTransferred`  
- `FilesSkipped`  
- `FilesFailed` ← ❗️ここを使います！

---

## ② アラームの作成（転送失敗を検知）

1. AWSコンソール → **CloudWatch**  
2. 左メニューから「**アラーム**」→「**アラームの作成**」  
3. 「メトリクスを選択」→「DataSync」→「Task → TaskExecution → FilesFailed」  
4. 該当のタスクを選択し、次へ  

### 設定例：

| 項目         | 設定値例               |
|-------------|------------------------|
| 統計        | Sum（合計）            |
| 期間        | 5分                    |
| 条件        | FilesFailed > 0       |
| 通知        | SNSトピック（後述）を指定 |

---

## ③ SNSトピックを作成（通知チャネル）

1. AWSコンソール → **SNS**  
2. 「**トピックの作成**」をクリック  
3. トピック名：`datasync-alert-topic` など  
4. 通知方法に応じて以下のサブスクリプションを追加：

### 📩 メール通知の場合：

- プロトコル：Email  
- エンドポイント：受信したいメールアドレス  
- 届いたメールの確認リンクをクリックして有効化

### 💬 Slack通知の場合（Webhook）：

1. Slackの [Incoming Webhook](https://api.slack.com/messaging/webhooks) を作成  
2. プロトコル：HTTPS  
3. エンドポイント：SlackのWebhook URL  
4. Lambda関数でJSONフォーマットを整形した通知を送る構成もおすすめ（後述）

---

## ④ CloudWatchアラームとSNSを紐付ける

アラーム作成画面で「通知の送信先」として、上記SNSトピックを選択するだけでOKです。

---

## 🔁 オプション：Slack通知をきれいに整形する（Lambda）

SNS → Lambda → Slack にすると、Slack通知をJSONで見やすく整形できます。  
必要ならテンプレートコードも提供できます（希望があればお知らせください）。

---

## ✅ テスト方法

1. DataSyncのタスクを**意図的に失敗させる**（例：SMB接続先を無効化）  
2. CloudWatchで `FilesFailed > 0` を検知  
3. SNS → メールまたはSlackに通知が届くか確認！

---

## 🔗 参考リンク

- [AWS DataSync 公式](https://aws.amazon.com/jp/datasync/)  
- [CloudWatch アラーム作成ドキュメント](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html)  
- [SNSトピックとSlack連携の公式ガイド（Webhook）](https://api.slack.com/messaging/webhooks)

---

## 📌 まとめ

DataSyncは便利なサービスですが、**失敗通知を仕込んでおかないと運用上のリスクが高まります。**  
CloudWatchとSNSを組み合わせることで、**転送エラーをリアルタイムで把握**でき、対処もスムーズになります。

S3へのバックアップや業務データの転送を扱う方は、ぜひ導入してみてください！

---

📘 AWS運用系Tipsも今後投稿予定です。この記事が役に立ったら、ぜひいいね＆フォローお願いします！
スミレ畑、やってみた。

# 概要
日本語プログラミング言語、スミレ畑、見つけたので、やってみた。

# 参考にしたページ

https://sum.irelang.jp/play/2.1/

# 写真

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18104/9bb6dad3-5cc7-4b32-a2ff-76c69b55be87.png)

# サンプルコード

```
【サイズ】で、コッホを描く手順
	ポチを、５だけ進める
	サイズが、2より小さいなら、抜け出す
	サイズ-1で、コッホを描く
	ポチを、-60度回転する
	サイズ-1で、コッホを描く
	ポチを、120度回転する
	サイズ-1で、コッホを描く
	ポチを、-60度回転する
	サイズ-1で、コッホを描く
終わり

キャンバスに、カメを作って、ポチとする
ポチの位置は{300,550}
ポチの線色は「スカイブルー」
ポチの太さは、5
5で、コッホを描く

```

以上。
C#のListBoxクラスを使ったカーソルを固定する実装方法

# [結論]↑↓キーを押下してもカーソルが移動しない実装方法

```
private int selectedIndex;

protected void listBox_SelectedIndexChanged(object sender, EventArgs e)
{
    this.shDetailListBox.SelectedIndex = this.selectedIndex;
}
```
1. ユーザーが↑↓キーを押下すると、ListBox が自動でインデックスを変更 → SelectedIndexChanged イベントが発生する。

2. そのイベントの中で、SelectedIndexを元の値に戻している。

3. 結果、ユーザーがいくらキーを押してもインデックスが変わらないように見える。


# そもそもListBoxクラスとは
項目のリストを表示するコントロールを表す。

# SelectedIndexプロパティについて
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3810312/bb0dbe64-afca-4939-b722-87868b4034c2.png)

SelectedIndexプロパティを使えば、選択されている項目のインデックス番号を取得できる。インデックス番号は、一番上の項目が 0 で、その下が 1 となります。選択された項目がなければ、-1になる。





# 参考

https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.listbox?view=windowsdesktop-8.0

https://learn.microsoft.com/ja-jp/dotnet/api/system.windows.forms.listbox.selectedindex?view=windowsdesktop-8.0#system-windows-forms-listbox-selectedindex

https://dobon.net/vb/dotnet/control/lbselectitem.html
猿でもわかるAIビジネス活用シリーズ 🐵📊 AIで競合の動向をリアルタイムに追跡する方法

 
## AIで競合の動向をリアルタイムに追跡する方法【実装付き解説】

---

## 🧩 はじめに：なぜ「競合分析 × AI」が重要なのか？

ビジネスの世界において、競合他社の動きを「いち早く察知」し、「適切に対応する」ことは、勝ち続けるためのカギです。
しかし、手動での競合調査は時間がかかり、精度にも限界があります。

> 💡 そこで登場するのが **AIによる自動化された競合動向追跡**。

この記事では、AIを活用して**競合の動きをリアルタイムにモニタリングする方法**を、実装付きでわかりやすく解説します。
誰でも真似できるよう、**Python・自然言語処理・クラウドインフラ**を組み合わせた現場で使える構成を紹介します。

---

## 🔍 技術概要：何をどう使うか？

本記事で紹介するシステムは、以下の技術を用いて構築します。

| 技術要素            | 内容                                  |
| --------------- | ----------------------------------- |
| **NLP（自然言語処理）** | ニュース記事やSNS投稿から意味のある情報を抽出            |
| **クローリング**      | 競合他社のWebサイト・ニュース・X（旧Twitter）からデータ取得 |
| **LLM API**     | 得られたテキストから要約・分類（OpenAI GPTなど）       |
| **クラウド基盤**      | AWS Lambda + DynamoDB でスケーラブルに動作    |

---

## 🛠 実装ステップ：実例で学ぶリアルタイム競合分析

### ① 情報収集：競合のニュースやSNSをクローリング

#### ▷ Pythonで簡易クローラーを作成（例：Google News）

```python
import requests
from bs4 import BeautifulSoup

def fetch_google_news(query):
    url = f"https://news.google.com/rss/search?q={query}"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, features="xml")
    return [(item.title.text, item.link.text) for item in soup.findAll("item")]

results = fetch_google_news("競合企業名 OR 製品名")
for title, link in results:
    print(f"{title} - {link}")
```

---

### ② NLP + AI要約：LLMで重要トピックを抽出

#### ▷ OpenAI GPT APIで要約処理を実施

```python
import openai

openai.api_key = "your_api_key"

def summarize_article(content):
    response = openai.ChatCompletion.create(
        model="gpt-4",
        messages=[
            {"role": "system", "content": "競合分析のアシスタントです。重要なビジネスインサイトを要約してください。"},
            {"role": "user", "content": f"以下の文章を要約してください:\n{content}"}
        ]
    )
    return response['choices'][0]['message']['content']

summary = summarize_article("記事本文...")
print(summary)
```

---

### ③ データ保存と可視化

* DynamoDBに保存し、過去の傾向も追えるように
* StreamlitやTableauで可視化すれば、ビジネスチームもすぐ理解

---

## 💡 実践Tips：現場で使える工夫と落とし穴

### ✔️ 実務上のコツ

* **競合キーワードは事前にリスト化**しておく（社名だけでなく製品名・役員名も）
* GPTは**プロンプト設計が命**：ビジネス文脈で要約するよう明示的に指定する
* **AWS Lambdaで定期実行**すれば、インフラコストを抑えつつ常時監視が可能

### ❌ よくある失敗

| 失敗例              | 対策                         |
| ---------------- | -------------------------- |
| 関係ない記事も大量に拾ってしまう | クエリの絞り込みや後処理フィルターを工夫する     |
| 要約結果が曖昧          | GPTに「箇条書きで」「5文以内で」など制約を与える |
| APIコストが高くなる      | キャッシュを導入、要約頻度を調整           |

---

## 🚀 応用・発展編：さらに高精度な競合分析へ

* **Sentiment Analysis**を導入すれば、「ポジティブ／ネガティブ動向」も判定可能
* 企業の**IR資料・特許情報**を組み合わせて、より本質的な洞察を得る
* データ基盤（DataLake）＋BIツールとの連携で経営陣へのレポートも自動化可能

---

## 🧭 まとめ：AI競合分析の可能性と限界

### ✅ メリット

* 人手をかけず、**広範囲な情報収集と要約が可能**
* 異なる情報源を統合し、**リアルタイムの意思決定支援が可能**

### ⚠️ 注意点

* 情報の信頼性・出典を確認する仕組みが必要
* 現時点では**人のチェックを完全に置き換えることは難しい**

---

## 🎯 最後に：すぐに試してみよう！

この記事で紹介した技術スタックは、どれも**無料枠でスタート可能**です。
まずは**自社製品名や競合名でニュースを収集し、GPTで要約**してみましょう。

> 🔧 技術でビジネスの競争力を高める、そんな実感を持てるプロジェクトになるはずです。

---

🧠 次回は「AIを使った新製品開発の支援とは？」にチャレンジします！お楽しみに。
フォロー・スキ・コメントもお待ちしております！
猿でもわかるAIビジネス活用シリーズ 🐵📊 BtoB企業におけるAI活用のユースケース

 

## 1. 🧭 はじめに：BtoB企業でもAI導入が必須の時代

昨今、AIの導入はBtoC領域だけではなく、**製造業、物流業、SaaSプロバイダ、法人営業チーム**など、BtoB企業にも急速に広がっています。

なぜ今、BtoBでもAI活用が求められているのでしょうか？

* データの蓄積が進んでおり、AI学習に十分な量と質を持つようになった
* 業務の属人化を防ぎ、再現性の高い成果を出す必要性が高まっている
* ChatGPTなどの登場により、AI技術の民主化が進んでいる

---

## 2. 🤖 BtoB領域での代表的なAIユースケース

### 📌 ユースケース一覧（実例）

| 分野      | ユースケース           | 活用されるAI技術         |
| ------- | ---------------- | ----------------- |
| 法人営業    | 顧客スコアリング         | 機械学習（分類モデル）       |
| マーケティング | 顧客セグメンテーション      | クラスタリング（教師なし学習）   |
| 製造業     | 異常検知、設備保守予測      | 時系列予測、Autoencoder |
| ロジスティクス | 配送ルート最適化         | 強化学習、数理最適化        |
| SaaS業   | チャーン予測（解約リスクの検知） | ランダムフォレスト、XGBoost |

---

## 3. ⚙️ 顧客スコアリングの実装例（法人営業向け）

ここでは、法人営業チームで\*\*「どの顧客にアプローチすべきか？」\*\*を判断するための「**顧客スコアリングモデル**」をPython＋scikit-learnで実装してみましょう。

### 🧪 使用ライブラリと前提

```bash
pip install pandas scikit-learn matplotlib seaborn
```

### 🧾 入力データ（例）

```csv
company_id,last_contact_days,industry_size,email_open_rate,deal_closed
C001,5,large,0.45,1
C002,30,small,0.10,0
C003,15,medium,0.30,1
...
```

### 💡 モデル構築コード

```python
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import classification_report

# データ読み込み
df = pd.read_csv("customer_data.csv")

# カテゴリ変換
df['industry_size'] = df['industry_size'].map({'small': 0, 'medium': 1, 'large': 2})

# 特徴量と目的変数
X = df[['last_contact_days', 'industry_size', 'email_open_rate']]
y = df['deal_closed']

# データ分割
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデル学習
clf = RandomForestClassifier(n_estimators=100)
clf.fit(X_train, y_train)

# 評価
y_pred = clf.predict(X_test)
print(classification_report(y_test, y_pred))
```

### 🧮 解釈のポイント

* 特徴量重要度を可視化することで、**どの要素が契約決定に寄与したか**が理解できます。
* 一定のしきい値を超えた確率を持つ企業を「優先ターゲット」として営業チームに提示可能。

---

## 4. 🛠️ 現場で役立つTipsとよくある落とし穴

### ✅ 実務Tips

* **最初は簡易的なロジックでもOK！**
  → 最初からMLを使う必要はありません。ルールベース＋徐々にMLへと移行が◎

* **業務フローにどう組み込むかが重要**
  → SalesforceやNotionなどとの連携が鍵。

* **現場の信頼を得るには「説明可能性」も重視**
  → SHAPやLIMEを使って、なぜそのスコアが出たのかを説明。

### ⚠️ よくある失敗例

| 失敗パターン            | 回避策                |
| ----------------- | ------------------ |
| モデルは良くても業務に組み込めない | 実装より先に「業務フロー設計」が必要 |
| データがバラバラ          | データクレンジング工程をきちんと設計 |
| 属人化して引き継げない       | コードとドキュメントの整備が必須   |

---

## 5. 🚀 応用編：スコアリングから自動アクションへ

スコアリングの先には「**自動化**」があります。

* 高スコア顧客に対して自動でメール送信
* 営業担当者にSlack通知
* 定期的にスコアを再計算してCRMに連携

例えばPythonでSlack通知する例：

```python
import requests

def notify_slack(message):
    url = "https://hooks.slack.com/services/XXX/YYY/ZZZ"
    payload = {"text": message}
    requests.post(url, json=payload)

notify_slack("優先顧客C001にアプローチしてください！")
```

---

## 6. 📌 まとめ

| 項目       | 内容                       |
| -------- | ------------------------ |
| ✅ メリット   | 売上向上、営業の効率化、定量的判断が可能に    |
| ⚠️ デメリット | データ整備や業務連携にコストがかかる       |
| 🔮 今後の展望 | RAGや生成AIとの統合で、提案資料まで自動生成 |

---

## 👋 最後に

BtoB領域でも、AI活用は今や競争力そのものです。この記事をきっかけに、\*\*「うちの会社でもやってみようかな」\*\*と思っていただけたら幸いです。

もし実装で困ったり、もっと発展的な構成を知りたい方は、コメントで気軽に聞いてくださいね！
猿でもわかるAIビジネス活用シリーズ 🐵📊 中小企業が陥りがちなAI導入の失敗パターンとは？

 
## 1. はじめに：なぜ中小企業のAI導入は失敗しやすいのか？

最近、「うちもAIを導入しないと時代に取り残されるのでは？」と感じている中小企業の経営者・現場エンジニアが増えています。しかし、**実際にはPoC（概念実証）止まりで終わったり、現場に定着せず頓挫したりするケースが後を絶ちません**。

このような失敗の多くは、**技術的な限界ではなく、導入プロセスや目的設定、体制構築に原因がある**ことがほとんどです。

本記事では、中小企業の現場に即した視点で「ありがちなAI導入の失敗パターン」と、それを回避するための**実践的なアプローチ・コード例・現場のノウハウ**を紹介します。

---

## 2. 概要：中小企業のAI導入で押さえるべき基本原則

### 2.1 SMEのAI導入が難しい背景

* **人的リソースの制約**（データサイエンティスト不在）
* **データ量や質が不十分**
* **ROI（投資対効果）が不明確**
* **ベンダー任せでブラックボックス化**
* **現場との乖離**

### 2.2 成功の鍵：スモールスタートと社内理解

* **明確な業務課題に絞ってPoC**
* **Explainableなモデル選定**
* **データ可視化とフィードバックサイクルの設計**

---

## 3. 実践編：AI導入でやってしまいがちな失敗パターンと改善例

### パターン1：最初から複雑なDeep Learningモデルを選んでしまう

#### ❌ 失敗ケース：

「画像から商品の欠陥を検出したい」というニーズに対して、ResNetベースの大規模CNNを使おうとしたが、精度が出ない上に運用が難航。

#### ✅ 解決アプローチ：まずは軽量モデル＋ルールベースの併用

```python
# OpenCVで簡易なエッジ検出ベースの不良品検出
import cv2
import numpy as np

img = cv2.imread('product.jpg', 0)
edges = cv2.Canny(img, 100, 200)

if np.sum(edges) > 5000:
    print("異常の可能性あり")
else:
    print("正常")
```

このように、**まずは非AI技術＋しきい値ロジックから始める**ことで、問題の定義が明確になり、AIモデルの必要性・性能要件も整理されやすくなります。

---

### パターン2：業務フローにAIが統合されていない

#### ❌ 失敗ケース：

チャットボットを導入したが、顧客は結局「電話で直接聞いた方が早い」と離脱。

#### ✅ 解決アプローチ：人の業務とAIの役割分担を可視化する

```mermaid
flowchart TD
    A[ユーザーの問い合わせ] --> B[チャットボットが対応]
    B -->|FAQにマッチ| C[自動応答]
    B -->|該当なし| D[人間の担当者へエスカレーション]
    D --> E[CRMに記録]
```

**AIが100％を目指すのではなく、70％を担い、残り30％を人がサポートするハイブリッド運用**を目指すのが現実的です。

---

### パターン3：目的が「AI導入」そのものになっている

#### ❌ 失敗ケース：

「AI導入プロジェクト成功！」と報告したが、実業務のKPI（問い合わせ件数の削減など）に一切インパクトがなかった。

#### ✅ 解決アプローチ：業務KPIから逆算してAIの役割を定義する

例えば：

| 業務課題        | 計測可能なKPI | 可能なAIアプローチ     |
| ----------- | -------- | -------------- |
| クレーム対応遅れ    | 平均初期対応時間 | 自然言語分類による自動仕分け |
| 書類チェック工数が多い | 作業時間     | OCR＋ルールベースエンジン |

---

## 4. 現場ノウハウ：実際に導入して気づいたこと

### 💡Tips：

* **まずは1人の「AIチャンピオン」を社内に立てる**
* **Google SpreadsheetやAirtableなどノーコードとの連携から始める**
* **クラウドサービス（例：Vertex AI, Azure ML, Amazon SageMaker）でPoCを簡易化**

### ⚠️ よくある落とし穴：

* PoCで作ったノートブックがそのまま「本番化」されてしまう
* データの前処理やクリーニング工程が属人化する
* 現場担当者の協力が得られない

---

## 5. 応用展開：AI導入を持続可能にするために

* **MLOpsの導入（Data Drift検知、自動再学習パイプライン）**
* **自社データを活かした継続的な改善PDCA**
* **LLM（大規模言語モデル）を活用した社内文書ナレッジ検索などの応用も視野に**

---

## 6. まとめ：中小企業でも「地に足の着いたAI活用」を

### ✅ 中小企業のAI導入で大切なのは…

* 技術よりも「業務との接続」
* ハイスペックよりも「スモールスタート」
* 導入完了よりも「継続運用」

> AIは魔法の杖ではありません。ですが、**適切な設計と現場目線の工夫があれば、十分に業務改善の武器になります**。

---

## 📎参考リンク・リソース

* [Google Cloud - Vertex AI](https://cloud.google.com/vertex-ai)
* [FastAPIによる簡易AIサーバの構築方法（Qiita）](https://qiita.com/)
* [中小企業のAI導入事例（IPA）](https://www.ipa.go.jp/)

---

この記事が、あなたの現場でのAI導入の一歩となれば幸いです。コメントやフィードバックも大歓迎です！
【Power AutomateDesktop】ユーザフォームで入力した内容をExcelに転記する

## 概要
Power Automateの学習も兼ねてフォームから入力した内容を
Excelに転記するフローを作成してみました。

## やりたいこと
・フォームに入力した内容をExcelに転記

## 環境
・Power AutomateDesktop
学習目的なので無料版を使用しています。

## 事前準備
・転記用のExcel
このような感じで項目行のみ記入しています。
作成したフローで各項目に転記されていきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/7db6d9cb-0915-4a77-90f7-8b7c1940531e.png)



## フローの構成
こんな感じです。
もっと工夫すればよりスッキリ作成できるかもしれません。
興味のある方はチャレンジしてみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/9b15de34-ff96-40ad-bf0c-3c5701e36946.png)


## フローの中身
##### ステップ 1\. ユーザフォームの表示
ここでユーザフォームの内容も設定しています。
設定する内容は転記するExcelの項目の順番に合わせています。

##### ステップ 2\. 変数の設定
ユーザフォームで入力した内容を変数として設定します。
今回のフローでは項目に「数量」、「単価」があり
その積算値を計算させています。

##### ステップ 3\. リストの作成
この後のステップで「繰り返し処理」をおこなうため、
その処理に必要なリストを作成します。
ユーザフォームで入力した内容を変数として設定します。

##### ステップ 4～13\. 項目をリストに追加
ユーザフォームの項目をステップ3で作成したリストに追加します。
このステップもこの後の「繰り返し処理」で使用します。

##### ステップ 14\. Excelを起動
転記用のExcelを起動させます。

##### ステップ 15\. Excelワークシートから最初の空の列や行を取得
データが入っていない最初の列や行を取得します。

##### ステップ 16\. Excelワークシートから読み取る
ステップ15で取得した列、行からデータが入っている
最終列、最終行を取得します。
最終行、最終列を取得しておくことで
追加したデータが既存のデータを上書きしないようにします。

##### ステップ 17\. 変数の設定
繰り返し処理に必要な変数を設定しておきます。

##### ステップ 18～21\. 繰り返し処理
ステップ3で作成したリストの内容を読み込んで
Excelに書き込みます。

##### ステップ 22\. Excelを閉じる
転記用のExcelを閉じます。
閉じるときに保存の有無も設定できますが、今回は保存して閉じます。

## フローの実行
実行をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/fdcf9c4f-dd6d-4a27-938f-a6b54afbf4e7.png)

このようなフォームが表示されるので入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/5ab64b8f-45f8-4a44-948c-cedb25cdec8e.png)

入力したら実行をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/6df7bf9d-15b5-4a3d-ba74-310386ebe5ac.png)

転記されました。
金額の項目はステップ2で設定した変数で計算させています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/bc4f972b-f750-43e4-befc-8388a12b0cfa.png)

追加もできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/0e2b54fa-7d89-4a19-8856-c835bdef5fd4.png)

:::note
補足
見栄え上セルの幅を修正していますが、
罫線やセルの幅を自動修正したい場合は処理の中にExcelマクロ(VBA)で
処理を追加しておくとより効率的になると思います。
:::

## まとめ
今回は無料版での検証でしたが、
有償版だとTeamsやOutlookに通知したりSharePoint上に転記など
より作業の効率化につながると思います。
また、フローの作成もあらかじめいろいろなメニューが用意されているので、
コードがよく分からない、知識がなくても
パズルのように組み合わせて作成できるので、
取り掛かりやすいかと思いました。
【Power AutomateDesktop】変数使用するときの注意点

## 概要
Power Automateでフローを作成していたときに
以下のエラーに悩まされていたので、
解消方法と注意点を残しておきます。

## 悩まされたエラー
・やろうとしたこと：セルの範囲取得
・出てきたエラー：引数'EndRow'は整数値である必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/8e9c4c4c-a976-4b21-b71a-079203abc2b7.png)

## エラーの原因
フロー作成時に「Power Fx」を有効にしていて、
変数の書き方が正しくなかったため。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/163c74b5-aac9-4a86-abe9-dd7e27785a25.png)


:::note warn
注意事項
「Power Fx」についてここでの説明は割愛します。
:::

## 解決方法
変数の書き方を修正しました。
修正後、再度実行し動作できました。
(修正前)%変数名%
(修正後)=変数名

## 補足
フロー作成時に「Power Fx」を有効にするか設定できるので、
設定しない(有効にしない)場合は%変数名%で動作します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4050047/f40ccca6-dcc5-4ee2-8a03-110f474a3415.png)
PowerAppsでのJSON解析メモ

Power AppsでJSONの解析をしてみます。ParseJSON関数を使うみたいです。

https://learn.microsoft.com/ja-jp/power-platform/power-fx/reference/function-parsejson

Power AutomateでAPIアクセスしたレスポンス解析などで利用するシーンが多いはず

## 利用JSON

```json
{"age":120, "name":"nobi"}
```

## 変数にセット

- ボタンなどを使ってjsonStr変数にセット

> ![CleanShot 2025-05-22 at 09.31.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/b026a771-a46d-4843-aebf-45f141c18f89.png)

```
Set(jsonStr,"{""age"":120,""name"":""nobi""}");
```

## ラベルで表示

- 文字列

```
Text(ParseJSON(jsonStr).name)
```

- 数値

```
Value(ParseJSON(jsonStr).age)
```


## ラベル更新

ボタンなどで

```
Set(jsonStr,"{""age"":120,""name"":""nobi""}");
UpdateContext({company: Value(ParseJSON(jsonStr).age)})
```

## Power Automateからのレスポンス - GPT

画像を送信して裏で処理をする式を書いてます。

とあるフロー（のびすけPAフロー）でOpenAIのAPIで画像解析をしてレスポンスを取得しています。

```
Set(responseJson, 'のびすけPAフロー'.Run(
    Substitute(JSON(UploadedImage2.Image,JSONFormat.IncludeBinaryData),"""","")
).response);

UpdateContext({newLabelText: responseJson});
```

こんな雰囲気のJSONが返ってきます。

> ![CleanShot 2025-05-22 at 10.20.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/b570c4c9-5eff-489a-9175-efe740d27989.png)

### 1. 文字列からcontentを取得

こんな雰囲気の文字列ですが、これをまずはcontentの中身を取りたいですね。

```json
{
    "role":"assistant",
    "content":"{\n  \"会社名\": \"STARBUCKS\",\n  \"住所\": \"神田駅前店 TEL 03-3251-7039\",\n  \"日付\": \"2023/04/28 18:54:29\",\n  \"金額\": 510\n}",
    "refusal":null,"annotations":[]
}
```

`responseJson`という名前の変数にJSON文字列がいるので、取得はPaserJSONにかけて`content`のキーを指定

```
Set(contentJson, Text(ParseJSON(responseJson).content));
```

> ![CleanShot 2025-05-22 at 10.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/05c69dfe-960c-4c70-a8ba-b928bb20d360.png)

こんな感じで取れました。

### 2. contentの中身の解析

```json
{
  "会社名": "STARBUCKS",
  "住所": "~~"
}
```

というJSONから`会社名`のキーの値（`STARBUCKS`）を取りたいです。

```
Set(companyText, Text(ParseJSON(contentJson).会社名));
```

最後ラベル更新もしたらスタバの文字列が表示されます。

```
UpdateContext({newLabelText: companyText});
```

> ![CleanShot 2025-05-22 at 10.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/35387/9ca22dec-7d19-4be8-b8b3-124249e22615.png)
生成AIでプログラミングするときに絶対やるべき１ネタ

AIを使いながらコーディングするときにやってほしい指示を１つ紹介します。初心者から上級者まで全員に共通

## タイポを修正して これ大事

みんな英語で変数やクラス名など作っていると思いますが、そのスペル絶対合ってるって自信ありますか？ 英語ネイティブだってタイポするんですから、日本人が間違えない訳ありません。

生成AIでコードを書いてもらうと、タイポをベースにそのまま書いてくれたりするので、特に問題なく動くことが結構多いです。しかし、ファイル数が多くなったり、複数人で開発するようになると話は変わってきます。

正しいスペルを書いた人がなぜか動かない！

っという問題に直面して無駄なバクを探す必要が出てきます。

初期段階でタイポを潰しておけば今後のミスも防げます。ほんの小さなどうでもいいことですが、

たった一言「タイポがあるか確認して」って確認するだけ。これでエラーが防げるなら１分程度の時間やすいものじゃないですか？

初心者に多い間違いかもしれませんが、タイポは誰にでもあります。自動でコード補完してくれるので大丈夫だと思っていても、あなたじゃなくて他の人が入力しミスしているかもしれません。

コード補完のお陰で逆に気が付きにくかったりするので、新しいファイルを作成するときだけでもチェックすることをお勧めします
【Linux】マウントってなんだ？？？

:::note info
前に一回調べたが、結局忘れたのでまとめる...笑
:::

## マウントってなんだ・・・？？？
### ずばり・・・
外部デバイス上のファイルシステムをOSのファイルツリー（ディレクトリ階層）の特定の位置（これをマウントポイントという。）に**接続**し、その内容を操作可能とする仕組み。

具体的には、`mount`コマンドを実行すると、カーネルが処理を行い、デバイス（例：HDDやSSDのパーティションやUSBメモリ）を指定したディレクトリに関連付ける。

逆に、マウントを解除したい場合は`unmount`コマンドで切断することで、安全に取り外しを行う事が出来る。

### マウントポイントの役割
物理デバイスやイメージファイルの内容を表示する「入口」となるディレクトリ。
例：`/mnt/usb`や`/media/cdrom`などが一般的。

**一回、マウントされるとマウントポイント以下のファイル・ディレクトリを通常のファイルシステムと同様に操作可能。**

### マウントのメリットと注意点
・マウントすると、実際のメディアを物理的に取り出す事なくファイルにアクセス出来るため、仮想環境でのOSインストールやデータ共有がスムーズになる。
・ただし、マウント中のISOやUSBなどは仮想マシンから書き込み中のデータが完了する前に切断するとデータ損失の恐れがあるので、`unmount`で安全に外す事が重要。



## 参考文献（参照日2025年5月22日）

https://en.wikipedia.org/wiki/Mount_%28Unix%29

https://phoenixnap.com/kb/linux-mount-command

https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/5/html/deployment_guide/chap-using_the_mount_command
常に最前面にいる簡易メモ帳をPowerShellのワンライナーで実現

これ

```powershell
Add-Type -AssemblyName System.Windows.Forms; $f=New-Object Windows.Forms.Form; $f.Text=' '; $f.FormBorderStyle='Sizable'; $tb=New-Object Windows.Forms.TextBox; $tb.Multiline=$true; $tb.Dock='Fill'; $tb.Text='ここを編集'; $f.Controls.Add($tb); $f.TopMost=$true; $fs=12; $tb.Font=New-Object System.Drawing.Font('Meiryo',$fs); $tb.Add_KeyDown({if($_.Control -and $_.KeyCode -eq 'Oemplus'){$global:fs++}elseif($_.Control -and $_.KeyCode -eq 'OemMinus'){$global:fs--}; if($global:fs -lt 6){$global:fs=6}; $tb.Font=New-Object System.Drawing.Font('Meiryo',$global:fs)}); $f.ShowDialog()
```

powershellのワンライナーなので、一回打てばあとはヒストリーからもってくればいいだけ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53489/f845b4a3-8d8f-4949-b2ea-dcb366d17e39.png)


文字の拡縮の機能も付けてるのでこれで十分。タイトルバーを消してミニマムのUIにしようとすると移動やサイズ変更がしづらくなるので結局は普通のウィンドウにするのが無難。

動作している様はこれ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53489/233ab2f0-35e7-4f98-b3d4-c7f67c3f9c1a.png)

常に最前面に表示されるので「プレゼン中に指摘があったことをメモ」という用途がしっくり。
あとはスクショをとるときの説明用吹き出し。

PowerShellのワンライナーにこだわっているのは「追加インストールができないPCでの便利ツール」を目指しているから。誰もプレーンテキストをブロックすることはできない。
【大嶋淑之】地域の風景を映像で伝える｜新潟発・フリーランス動画制作の挑戦

新潟でフリーランス動画制作を行う大嶋淑之が、地域に密着した映像制作の魅力についてお伝えします。新潟の自然美や文化的背景を反映させた映像作品を手がける彼のサービス内容と、地域の特性を最大限に活かしたコンテンツ制作についてご紹介します。

目次
大嶋淑之の新たな挑戦

新潟で映像制作の魅力を再発見

目指すべき映像制作の方向性

フリーランスとして活動する強み

提供する映像制作サービス

新潟の魅力を映像で表現

実績紹介

サービス利用方法とお問い合わせ

1. 大嶋淑之の新たな挑戦
新潟で活躍するフリーランス動画制作クリエイター、大嶋淑之が手掛ける映像制作の魅力は、その地域密着型のアプローチにあります。彼の新しい挑戦として、地域の特性を活かしつつも、企業や個人のメッセージをより強く、視覚的に伝える映像制作に注力しています。大嶋の映像制作は、どんなジャンルでもその土地の風景や文化を色濃く反映させ、視覚的に印象に残る作品を作り出しています。

2. 新潟で映像制作の魅力を再発見
新潟という地域は、その豊かな自然や多様な文化、そして四季の変化が大きな魅力です。大嶋淑之は、この新潟の魅力を映像にうまく落とし込んでいます。例えば、新潟の壮大な山々、広大な田園風景、雪景色などは、映像制作において独特の美しさと強いインパクトを与えます。また、地元の伝統行事や地域イベントなども、映像に深みを加える要素となり、視聴者に新潟の文化をしっかりと伝えています。

3. 目指すべき映像制作の方向性
大嶋淑之が目指している映像制作は、ただの美しい映像を作ることにとどまりません。彼は、クライアントの意図をしっかりと汲み取り、そのビジョンに基づいた映像を提供することを最優先にしています。特に企業のプロモーションやSNS向けのコンテンツ制作においては、ターゲット層に合わせたストーリーテリングを行い、メッセージがより強く伝わるように映像を作り上げています。大嶋が提供する映像は、ただの「広告」ではなく、視聴者の心に響く「体験」として映像を提供しています。

4. フリーランスとして活動する強み
フリーランスとして活動する最大の強みは、柔軟な対応力と個別のニーズに合わせた制作ができる点です。大嶋は、クライアント一人ひとりとの密なコミュニケーションを大切にしており、プロジェクトごとに最適な映像作りを行っています。また、フリーランスだからこそ、納期を守ることや、追加修正への迅速な対応が可能です。クライアントとの長期的な信頼関係を築き上げていくことが、彼の最大のモットーです。

5. 提供する映像制作サービス
大嶋淑之の提供する映像制作サービスは、企業から個人、地域のイベントまで幅広い分野に対応しています。以下のサービスがあります：

企業プロモーション動画制作
企業のブランドやサービスをターゲットに合わせた映像で紹介し、視覚的に魅力的なコンテンツを提供します。

SNS用ショート動画制作
インパクトのある短尺動画を制作し、SNSに最適なコンテンツを提供します。特に、地域の魅力を伝えるPR動画に強みがあります。

イベント・セミナーの撮影と編集
地域のイベントやセミナーを撮影し、その後の編集で、参加者に価値のあるコンテンツを作成します。

映像編集・モーショングラフィックス
既存の映像素材をさらに魅力的に仕上げる編集作業を行い、モーショングラフィックスやアニメーションを取り入れた映像制作も対応可能です。

6. 新潟の魅力を映像で表現
新潟は四季折々の美しい風景が広がる地域です。大嶋は、この土地の自然美を映像に反映させることに力を入れています。春の桜、夏の祭り、秋の紅葉、冬の雪景色など、どの季節でも映像に彩りを加える素材が豊富です。また、新潟の特産品や地元の食材をテーマにした映像制作も行い、視覚的にインパクトがあり、なおかつ地域の魅力を存分に伝えています。

7. 実績紹介
大嶋淑之がこれまでに手掛けた映像作品には、新潟の観光地や地元の企業のプロモーション動画、SNSコンテンツ、地域イベントの記録映像などがあります。特に、地域活性化を目的とした映像作品は、多くの視聴者に感銘を与え、地域の魅力を新たに発見させるきっかけとなっています。

8. サービス利用方法とお問い合わせ
大嶋淑之への映像制作依頼は、以下の方法で受け付けています：

メールでのお問い合わせ
ご依頼内容や詳細をメールでお送りください。

お電話でのご相談
直接お電話いただき、具体的なプロジェクトについてご相談いただけます。

SNSでの連絡
大嶋淑之のSNSアカウントからも、気軽に連絡いただけます。

新潟での映像制作をお考えの方は、ぜひ一度ご相談ください。