OmniAICreator/Qiita-1.07M huggingface dataset:
クライアントサイドからの環境変数へのアクセスを制限する

:::note info
viviON グループでは、DLsite や comipo など、二次元コンテンツを世の中に届けるためのサービスを運営しています。
ともに働く仲間を募集していますので、興味のある方は[こちら](#一緒に二次元業界を盛り上げていきませんか)まで。
:::

## 概要
クライアントサイドからの環境変数へのアクセスを制限してセキュリティを強化する。

## 環境
FW：Nuxt3
言語：Typescript

## 実現方法
環境変数の設定時にpublicとprivateを使い分けることで実現します。
Nuxt3 では以下の 2 パターンで環境変数を設定することができます。
- public：クライアントサイド、サーバーサイドどちらからでの参照可能な環境変数
- private：サーバーサイドのみ参照可能な環境変数

機密情報を含む環境変数を定義をしたい場合には、privateを利用してクライアントサイドから取得できないようにします。

:::note warn
privateに設定した環境変数はクライアントサイドから参照しようとしても値が取れないので、publicからprivateに変更する場合は影響範囲を確認しましょう！
:::

## 使い分けるメリット
- セキュリティの強化
- クライアントサイドとサーバーサイドの役割分担
- クライアントに送るデータが減るのでパフォーマンス向上（大きな向上は見込めません）

## 環境変数使い分けの例
**publicの例**
- APIのエンドポイント
- アプリケーション名やバージョン

**privateの例**
- APIの秘密鍵
- データベース接続情報
- 外部サービスのシークレットキー

## 実装
- 環境変数の設定（nuxt.config.ts）

```ts
export default defineNuxtConfig({
  runtimeConfig: {
    // private
    apiSecret: process.env.API_SECRET,

    // public
    public: {
      apiBase: process.env.API_BASE,
    }
  }
})
```

- 環境変数の参照

```ts
const runtimeConfig = useRuntimeConfig()
console.log(runtimeConfig)
```

**サーバーサイドからの参照**
&ensp;public/privateともに参照可能
&ensp;![サーバーサイド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636800/1059920c-09b3-3868-7dbc-846bdd71201b.png)

**クライアントサイドからの参照**
&ensp;publicのみ参照可能（privateへのアクセスはundefinedになります）
&ensp;![クライアントサイド.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3636800/cb557dc4-858f-961b-46d2-7ce207519ccc.png)

## 環境変数の命名規則
ここまでの対応とともに、命名規則を統一することでよりセキュリティやメンテナンス性を高めることに繋げることもできます。

（例）
&ensp;`NUXT_PUBLIC_` を public 用の環境変数の接頭辞として利用
&ensp;`PRIVATE_` を private 用の環境変数の接頭辞として利用


## まとめ
実装は簡単なので、環境変数で定義したい値をどう管理するかを決められればセキュリティ強化可能です。
環境変数は機密性の高い情報を含むことも多いので、アプリケーションに合わせて丁寧に管理しましょう。

## Appendix
公式ドキュメント

https://nuxt.com/docs/guide/going-further/runtime-config

# 一緒に二次元業界を盛り上げていきませんか？
株式会社 viviON では、フロントエンドエンジニアを募集しています。

https://vivion.jp/recruit/

また、フロントエンドエンジニアに限らず、バックエンド・SRE・スマホアプリなど様々なエンジニア職を募集していますので、ぜひ採用情報をご覧ください。
vscode python pylanceのmoduleに関する警告文を消す

# やりたいこと
vscodeのpythonファイルにおけるimport分に波線が下につくのを消したい。dockerや仮想環境を使う場合は目障りでしかないため

# 結論
setting.jsonに以下の分を追加する
```
"python.analysis.diagnosticSeverityOverrides": {
    "reportMissingModuleSource": false,
    "reportMissingImports": false,
}
```

# 説明
pylanceにあるpyrightの機能のひとつらしい
pylanceをinstallするとpyrightも自動でinstall

# 解決手法
波線にマウスをホバー → reportMissingModuleSoruceですよ
生成AIに"vscode pylance report MissingModuleSource disable"と尋ねる。完
目標に期限がない場合は失敗を認識できない

# はじめに
※ワールドトリガーのネタバレを含みますのでご注意ください
ワールドトリガーという漫画をご存知でしょうか？

第246話・第247話で、特に心に刺さったセリフがあったので、ここに残しておきます。

>「目標に期限がない場合、失敗を正しく認識できない場合があるという」
「人は失ったもの確認することで失敗を認識できる」
「目標に向けて費やしてきた時間労力資金・・・・・信用や評価を失ったと自覚することで目標の達成が失敗したと認識できる」
「だが目標達成の期限を決めなければ成功か失敗の判定を無限に先送りにすることができる」
「つまり、注ぎ込んだものは成功すれば帰ってくるのだから、まだ何も失っていないと思うことも可能なわけです」
「そして期限を決めないということはすなわち失われる時間の重みに目を瞑るるということ」
「物も時間も失ったことを認識できな場合、現実的な反省や改善は望むべくもありません」
「これを足踏みと言いいます」
・・・省略
「他人の答えを集めたところで己の経験にはならない」
「人はそれぞれ条件が異なる」
「表面を真似ることはできても、中身までは真似ることはできない」
「己を知り適正な段階に挑戦することで解決する」

— 『ワールドトリガー』第246話・第247話より引用

# 印象に残った点
1. 目標達成に期限がないと、成功か失敗の判定を無限に先送りにできる
目標に期限がなければ、「まだ本気を出していないだけ」と自分を甘やかし続けることができる。
仕事の目標は評価につながるため意識するものの、個人的な目標は誰にも宣言していないため、つい先延ばしにしがち。

2. どうすれば目標に近づけていけるか
細かく細分化する。
いきなり大きな目標に挑戦するのではなく、細かく分けて一歩ずつ達成していくことが大切。
小さな成功を積み重ねることでスキルアップし、最終的に大きな目標へ到達できると考えている。


3. 他人の答えを集めたところで己の経験にはならない
本を読んだり動画を見たりするだけで満足し、実践しないことが多い。
どれだけ知識を得ても、行動しなければ意味がない。
「使えそう」と思ったことは、すぐに実践する意識が必要。

# 感想
特に印象に残った言葉を抜粋しましたが、個人的にこのセリフを言われているキャラに強く共感した。

チームの中にすごい人がいて、自分の実力を超えたことに挑戦し、うまくいかない──そんな状況が自分にもよくある。
例えば、AIやハッカーに憧れて勉強しようとするものの、基礎を知らないままフレームワークやツールに頼ってしまう。
結果、応用がきかず、問題が起きても原因が分からず、結局は周囲の助けで終わってしまう。

「すごい人になりたい」と思い、自己啓発本を読んだり、成功者の習慣を真似してみたりしてみた。
でも、途中で実践しなくなったり、ダラダラ過ごしてしまうことが多い。
これはまさに「目標の期限を決めていない」ことが原因なのだと気づきました。

これからは、目標を細かく設定し、期限を決めて、一つずつ達成していく意識を持ちたいと思う。

# おまけ
この話を読んで今後していきたいこと

・記事投稿（週1本）
・資格取得（応用情報 7年度秋季試験）
・TOEIC（700点くらい　2025年12末まで）
・開発系のスキルアップのための開発
　この辺りを深掘りしていく
・月1冊本読む
ついに動き出した！イベントデータ取得とUI完成の開発日記⚙️


# 開発日記13日目：イベント一覧画面が完成！アプリが動き始めました！📱✨
---

群馬県民がもっと地元イベントを楽しめるように！イベント発見アプリ「**Gunma Navi**」を個人開発している🐮です！

---

🎮 **今日達成した"ゲームで言うと"**

「初めてのモンスターを倒して、経験値をゲットした感じ」⚔️🌟

---

🌟 **今日のハイライト**

✅ **イベント一覧画面のUIを作成！**

✅ **バックエンドからイベントデータを取得する処理を実装！**

---

🛠 **今日の作業内容**

1. **イベント一覧画面のUIを作成**

   デザインを考えるのは楽しい反面、ユーザーにとって見やすく、使いやすいインターフェースを作るのは難しいですね。

   - **色合いやレイアウトの決定**

     - 群馬の自然豊かな雰囲気を伝えるために、緑を基調とした配色にしました。

     - イベント情報が一覧で見やすいよう、カード形式で表示することに。

   - **アイコンや画像の選定**

     - 各イベントのカテゴリに合わせたアイコンを配置し、パッと見で内容が分かるように工夫しました。

     - 画像の扱いには気をつけて、読み込み速度への影響を最小限に抑えました。

2. **バックエンドからイベントデータを取得する処理を実装**

   フロントエンドとバックエンドの連携を初めて実装する日！ワクワクと同時にドキドキも。

   - **APIの呼び出し**

     - 先日設計したAPIエンドポイント`/api/events`を呼び出し、イベントデータを取得。

     - 非同期処理を上手く組み込んで、データ取得中のローディング表示も実装しました。

   - **データの表示**

     - 受け取ったJSONデータを解析し、イベント一覧画面に動的に表示することに成功！

     - 日付や場所、タイトルなどの情報が正しく表示されると、達成感がありますね。

---

🔍 **実装のポイントと工夫**

1. **ユーザーエクスペリエンス（UX）の向上**

   - **スムーズな画面遷移**

     - React Navigationを使用して、他の画面への遷移をシームレスにしました。

   - **データ取得中のフィードバック**

     - ローディングスピナーを表示し、ユーザーに待ち時間を感じさせない工夫。

2. **エラー処理の実装**

   - **ネットワークエラーへの対策**

     - データ取得に失敗した場合のエラー表示を実装。

     - ユーザーに再試行を促すボタンも設置しました。

   - **データ無しの場合の対応**

     - イベントが存在しない場合でも、適切なメッセージを表示するように。

---

🗾 **群馬愛ある開発のこだわり**

「イベント情報には、地元の写真を盛り込んでいます！  
草津の温泉や、赤城山の美しい景色を見ながら、次の週末の計画を立てていただけたら嬉しいです！🗻♨️」

---

💬 **読者のみなさんに質問！**

「一覧画面で特に重視するポイントは何ですか？  
例えば、情報量、見やすさ、デザインなど。  
皆さんのご意見を取り入れて、より良いアプリにしていきたいです！😊」

---

💡 **今日の気づきと学び**

**成功した点**

- **フロントエンドとバックエンドの連携**

  - 実際にデータが動いて表示されると、開発が一気に進んだ感じがします！

- **UI/UXの改善**

  - ユーザー視点で考えることで、より使いやすいデザインに近づけたと思います。

**改善が必要な点**

- **データ量の最適化**

  - 画像の読み込みに時間がかかる場合があるので、圧縮やキャッシュの活用を検討します。

- **コードの整理**

  - 急いで実装した部分があるので、後でリファクタリングして可読性を高めたいです。

---

🚀 **次回予告：イベント情報の表示機能を実装（後半）！**

- **イベント詳細画面のUIを作成**し、詳しい情報を見られるようにします。

- **選択されたイベントの詳細データを取得**し、画面遷移も実装！

- ますますアプリらしくなってきました！楽しみです！🔥

---

✨ **今日のひとこと**

初めて画面にデータが表示された瞬間、「おおっ！」と思わず声が出てしまいました！  
これまでコツコツと準備してきた成果が形になるのは、本当に嬉しいですね。  
まだまだやることは山積みですが、一歩一歩進んでいきたいと思います！💪

---

最後までお読みいただきありがとうございます！

皆さんの応援やフィードバックが本当に励みになります。  
コメントやいいね、お待ちしています！😊

明日も引き続き頑張りますので、よろしくお願いします！では、また明日〜！👋

---
Raspberry Pi 5 でのカメラモジュール利用方法

Raspberry Pi 5 に 公式の「Raspberry Pi カメラモジュールV3(NoIR)」(Camera Module 3)を繋いだら認識しなかったので、解決方法をメモしておきます。

先に結論を書くと、最新のOS(Raspbian)ではカメラを自動認識するようになったと書かれているのですが、実際は自動認識できず、手動で設定を書き換える必要があったのでした。

## 物理接続
「Raspberry Pi カメラモジュールV3」には Raspberry Pi 5用のケーブルが同梱されていません。
本体側のMIPIインターフェイスコネクタのピッチが、Raspberry Pi 4 までとは異なるためです（5やZeroは 0.5mmピッチ、4までは 1.0mmピッチ)。
「Raspberry Pi 5 FPCカメラケーブル」を別途購入する必要があります(同等品でも可)。

接続は裏表を間違えないよう、しっかりと取り付けてください。

<div style="display: flex;">
  <img width="128" height="128"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777108/4841931f-139b-cf64-e7f2-00832f907962.png" alt="カメラ表">
  <img width="128" height="128" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777108/5b2cbd78-1bd9-b24a-7525-f4f95481dd95.png" alt="カメラ裏">
  <img width="128" height="128" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777108/8265b5b5-f393-ab86-159e-f83cde381a7e.png" alt="本体側">
</div>

## カメラモジュール認識

カメラを取り付け、Raspberry Pi を起動すると、公式情報では自動で認識するはずですが実際は認識しません。
また、過去のOSでは raspi-config の Interface Options メニューからカメラの設定を行えたのですが、今は項目が削除されています。

<img width="256" height="128"  src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777108/d6058469-aa2e-735d-bf57-f659ad68f29c.png" alt="raspi-config">

そのため、設定ファイルを手作業で編集する必要があります。

## config.txt を編集

ファームウェアの設定ファイル config.txt を直接テキストエディタで編集します。

```bash:bash
sudo nano /boot/firmware/config.txt
```

変更は2行だけです。
<code>camera_auto_detect=1</code> と書かれているところを
<code>camera_auto_detect=0</code> に変更(自動認識をOFFにしている)

公式Camera Module 3 の場合は下記の行を追加(カメラセンサ名を指定)
<code>dtoverlay=imx708,cam0</code>

変更後はこのようになります。
```text:config.txt
camera_auto_detect=0
dtoverlay=imx708,cam0
```

変更が終わったら保存します。

## リブート

カメラを認識させるために、システムをリブートさせます。
```bash:bash
sudo reboot
```

## 接続確認

カメラがシステムに認識されているか確認します。
確認に libcamera-hello コマンドを利用します。
```bash:bash
libcamera-hello --list-cameras
```

次のように表示されたら成功。

![スクリーンショット 2025-01-29 11.14.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3777108/e87cadbb-28d8-4a29-7e1e-0507eb399c0b.png)

## 撮影テスト

libcamera-still コマンドを使って、静止画撮影をしてみます。

```bash:bash
libcamera-still -o image.jpg 
```

実行すると画面全体にカメラ映像が表示された後にファイル image.jpg が保存されます。
ファイルマネージャで image.jpg のアイコンをダブルクリックすると撮影した画像が表示されます。

## カメラ操作コマンド補足

Raspberry Pi 5 では、libcamera-* コマンドではなく、rpicam-* コマンドが推奨されているようです。

例えば、上記の libcamera-hello は rpicam-hello に、libcamera-still は rpicam-still になります(機能は同じ)。

現在(2025年1月)は両方とも使えますが、将来 rpicam-* だけになるかもしれませんのでお気をつけください。

(おしまい)
SORACOM通信量をSIMごと月ごとで一括で確認したい

「SORACOM通信量をSIMごと月ごとで一括で確認したい」

あると思います。

すぐに思いつくのは、SIMごとにこのページを開けて確認してという作業ですが、大変すぎます。
![スクリーンショット 2025-01-29 12.06.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645077/0fd25b8a-923f-a73b-5c63-3f193281339f.png)

簡単にできそうでいて、SORACOMコンソール画面内で`ダッシュボード`やら`SIM管理`やら、はたまた「[SORACOM API リファレンス](https://users.soracom.io/ja-jp/tools/api/reference/#/Stats/getAirStatsOfOperator)」やら、探し回ってしまったのでメモ。



## 「サービス利用履歴」にアクセス

### メニューから

メニューから「ログと統計」→「サービス使用履歴」とアクセスすれば、欲しいものはそこにあります。

![スクリーンショット 2025-01-29 11.22.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645077/70651b6b-f441-1117-21ba-2333d01e5de3.png)


![スクリーンショット 2025-01-29 11.22.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645077/a348fa34-dff8-35bf-52da-41543ddc0bea.png)


### URLから

`https://console.soracom.io/service_usage_history`

## 計算する

上り下り合計値が必要なら、`uploadByteSizeTotal`と`downloadByteSizeTotal`を足してあげれば良い。
LambdaのAWSベースイメージ (Amazon linux 2023)にChromeを入れてCapybara

推敲していない雑なコードの記事です。すみません。

LambdaでCapybaraやplaywrightするためにchrome入れないといけないですが、Amazon Linux 2023にいれる方法がなかなかなく、さらにRubyでnokogiriとcapybaraで動かすのに苦労したので備忘録です。

結構調べて試行錯誤しないといけなかったので共有です。
実際は使わなかったので細かい調整はおまかせします。確実に不要な部分があります。

---

```docker:Dockerfile
FROM public.ecr.aws/lambda/ruby:3.3

# google-chome
ADD google-chrome.repo /etc/yum.repos.d/google-chrome.repo
RUN rpm --import https://dl.google.com/linux/linux_signing_key.pub
RUN dnf install -y google-chrome-stable

RUN dnf install -y make automake gcc gcc-c++ kernel-devel
RUN dnf install -y libxml2 libxml2-devel libxslt libxslt-devel zlib-devel xz patch
RUN dnf install -y tar

# Copy Gemfile and Gemfile.lock
COPY Gemfile Gemfile.lock ${LAMBDA_TASK_ROOT}/

# Install Bundler and the specified gems
RUN gem install bundler:2.5.18 && \
    bundle config set --local path 'vendor/bundle' && \
    bundle install

# Copy function code
COPY lambda_function.rb ${LAMBDA_TASK_ROOT}/

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "lambda_function.LambdaFunction::Handler.process" ]
```

```ruby:lambda_function.rb
require 'selenium-webdriver'
require 'capybara'
module LambdaFunction
  class Handler
    def self.process(event:,context:)
      options = Selenium::WebDriver::Chrome::Options.new
      options.add_argument("--user-data-dir=/tmp/abc")
      options.add_argument('--headless=new')
      options.add_argument('--disable-site-isolation-trials')
      options.add_argument('--window-size=1920,1080')
      options.add_argument('--no-sandbox')
      options.add_argument('--disable-extensions')
      options.add_argument('--disable-notifications')
      options.add_argument('--disable-popup-blocking')
      options.add_argument('--disable-web-security')
      options.add_argument('--disable-dev-shm-usage')
      options.add_argument('--disable-site-isolation-trials')
      options.add_argument('--disable-features=Translate')
      options.add_argument('--restore-last-session')
      Capybara.register_driver :app_selenium_chrome_headless do |app|
        Capybara::Selenium::Driver.new(app, browser: :chrome, options: options)
      end
      session = Capybara::Session.new(:app_selenium_chrome_headless)
      session.visit "https://example.com"
      puts session.html
      session.save_screenshot("screenshot.png")
      session.quit

      "Hello from Lambda!" + session.html
    end
  end
end
```

```ruby:Gemfile
source 'https://rubygems.org'

gem 'aws-sdk-lambda'
gem 'aws_lambda_ric'
gem 'capybara'
gem 'selenium-webdriver'
gem 'nokogiri', force_ruby_platform: true
```

```:google-chrome.repo
[google-chrome]
name=google-chrome
baseurl=http://dl.google.com/linux/chrome/rpm/stable/$basearch
enabled=1
gpgcheck=1
gpgkey=https://dl-ssl.google.com/linux/linux_signing_key.pub
```

実行手順は元記事を参照してください。
ローカル実行までしか試していません。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/ruby-image.html#ruby-image-clients
【ChatGPT】にちょっとした悩みを相談に乗ってもらうためのPromptをご紹介です。

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

　今回は、ChatGPTにちょっとした悩みを相談に乗ってもらうためのPromptをご紹介です。

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

　今回は、
　　ChatGPTに
　　　ちょっとした悩みを
　　　　相談に乗ってもらうための
　　　　　Promptをご紹介です。

　こちらのPromptは、
　　谷口恵子さんが
　　　ポストしてくださいました。
　　　　[タニケイさんポスト](https://x.com/Tanikei0713/status/1884189115991875970?t=TQ1n0xH0fHchDExxoyU1nA&s=19)

　タニケイさんこと
　　谷口恵子さんは、
　　　『AI英語革命 ChatGPTで英語学習を10倍効率化』（リチェンジ出版社）
　　　　という書籍を執筆されました。

　この書籍は、
　　ChatGPTを使った、
　　　英会話、リーディング、
　　　　ライティング、リスニングなど
　　　　　7つのカテゴリで
　　　　　　具体的な活用法を
　　　　　　　解説しています。
***
　今回のPromptが、こちら。
　　悩み事を＊＊＊に入力して、
　　　送信してください。
```Text:悩み事の相談Prompt
あなたは私の親しい先輩です。私が話したくなるように親しみを込めて、カジュアルな口調で、私と会話してください。私の悩みに対していきなりアドバイスをするのではなく、まずは私の状況や思いを詳しく聞いてください。   

【私の悩み】
＊＊＊
```

　このPromptは、
　　軽い感じでのやり取りで
　　　親身になって、
　　　　受け手をしてくれます。

　ある程度、
　　やり取りをして終えたら、
　　　それまでのやり取りを
　　　　まとめてもらいましょう。
```Text:まとめPrompt
ここまでの話をまとめて
```

　軽い悩みならば
　　このやり取りで
　　　軽減されることでしょう。

　重い悩みは、
　　具体的な提案を
　　　してくれるかも
　　　　しれません。

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

　今回は、ここまで。
iRICの表示が崩れる際の対処方法

# はじめに
こんな感じでiRICのアイコンや文字のサイズがチグハグではみ出ていたり表示が崩れて困っていませんか？
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/accd0599-2ae3-fcea-e816-ff9064423be0.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/5c9734cd-b712-75ac-bc51-5657e05a8305.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/9fcf79e0-0a5d-445c-cb68-ec3713083972.png)

一部の文字やアイコンはめっちゃ大きいのに、小さい文字もあったりしてとても見づらいですよね。
なにより可視化結果の部分が小さくて困ってしまいます。

今回はこんな状況に対処していきましょう。

# そもそもの原因
**結論から言うとWindowsのディスプレイ設定の表示スケールまたは解像度が原因です。**

近年、15.6インチ4Kモニタのノートパソコンなんかもありますし、モニタが小さくてもFHD(1920×1080)だったり4K(3840×2160)だったり高性能（dpi[^1]が高い）ですよね。

[^1]:Dots per inch: 1インチあたりのドット数、または画素密度。モニタが小さくて解像度が高いとDPIが高くなる

そんな高DPIのモニタを等倍で使用していると、文字やら何やらすべてがとても小さく表示されてしまいます。なので、高DPIのノートパソコンなんかではデフォルトで表示スケールが大きく設定されていたりします。

私の環境は13.3インチのFHDモニタですが、推奨設定が150%になっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/832ee603-51c4-684b-3f18-8cb276ad9309.png)


この設定でiRICを起動した場合が冒頭の混沌とした画面となりますが、windowsの表示スケールとiRICの相性が悪くこのような状況になっています。

モニタのサイズや解像度、アスペクト比やPCの機種等にもよって状況が変わるようで、この表示スケールが125%や150%でも表示が崩れない方もいるようですが、崩れている方のほとんどの原因はこの表示スケールだと思われます。

# 対処方法
**windowsのディスプレイ設定で、表示スケールを変更してiRICを再起動すれば直るケースがほとんどです。**
100%に設定すればほとんどの方は問題が解決できるかと思います。

以下はFHD解像度で表示スケールを100%にした画面です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/ca43a897-4d33-82d7-dae4-2d6d0eed0332.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/4444c821-74ba-00a0-19a1-a9088a9f221a.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/89bee6d1-5853-4bf4-78ce-2de640e334a1.png)

## 文字やアイコンが小さくて見えない場合
モニタのサイズや個人の目の具合にもよりますが、iRICはFHD(1920×1080)の等倍(100%)表示で大体使いやすいようになっていると思います。

私は13.3インチモニタでこの設定であれば支障なく操作できるのですが、
人によっては、文字やアイコンが小さくて困るという方もいるかなと思います。

そういった場合はスケールではなく、windowsの設定のディスプレイの解像度を小さな値にすると表示の崩れを防ぎつつ画面を大きく表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/c243ade5-43f9-a942-12be-0b2786e2ef8b.png)

以下は解像度設定をFHD(1920×1080)からHDTV(1280×720)まで下げた(2/3倍)状態です。
表示スケールを3/2倍(150%)にしたのと同義ですが、この方法では冒頭と違って整った表示になっているのがわかるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/4d9c4914-f2a4-657a-1b2b-03aaf861fddf.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8b0b9493-a7c4-b006-e0c9-473047508247.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/8dddcf41-d537-3698-5891-9145d346b3c3.png)

# まとめ
* iRICのレイアウトがおかしいときはまずディスプレイ設定の表示スケールを100%にしましょう
* 高DPIモニタで文字等が小さくて困る際にはディスプレイ設定の解像度を落としましょう

以上です、では快適なiRICライフを！

# おまけ
各設定での表示の比較画像です。
画像サイズは同じモニタで見ることを想定して同じサイズにそろえています。

![2025-01-29_09h58_11_mix_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2626673/d51c0a76-eaba-f991-5d42-6ce68cf49aae.png)
Supabaseとは？初心者向けに分かりやすく解説！

近年、アプリ開発を簡単にする「BaaS（Backend as a Service）」の人気が高まっています。その中でも、オープンソースの「**Supabase**」は、Firebaseの代替として注目されています。
この記事では、**Supabaseの基本概要、できること、具体的なユースケース**について、初心者にも分かりやすく解説します！  
※この記事は、ChatGPTの出力を基に作成しています。

---

## **🚀 Supabaseとは？**
Supabase（スーパーベース）は、**PostgreSQLをベースにしたオープンソースのバックエンドサービス**です。  

✅ **Firebaseの代替として利用可能**  
✅ **SQLベースでデータ管理がしやすい**  
✅ **認証・リアルタイム・ストレージなどの機能が充実**  

Supabaseを使えば、**バックエンドを自分で開発することなく、すぐにデータベースやユーザー認証を導入できます！**  

---

## **💡 Supabaseでできること**
Supabaseは、以下のような主要なバックエンド機能を提供しています。

### **1. データベース（PostgreSQL）**
- Supabaseはリレーショナルデータベース（RDB）である**PostgreSQL**を使用  
- **SQLで簡単にデータを管理**できる（FirebaseのFirestoreはNoSQLで扱いが難しい）  
- GUIツールでデータベースを管理でき、初心者でも使いやすい  

### **2. 認証（Auth）**
- **Google・GitHub・メール認証などを簡単に実装**  
- OAuth、Magic Link（メールリンク認証）、二要素認証（2FA）にも対応  

### **3. リアルタイム機能**
- **データが即座に更新されるリアルタイム通信が可能**  
- チャットアプリや通知機能の実装に最適  

### **4. ストレージ（Storage）**
- **画像・動画・PDFなどのファイルをクラウドに保存**できる  
- ファイルのアクセス権限（パブリック or プライベート）も設定可能  

### **5. サーバーレス関数（Edge Functions）**
- Firebase Cloud Functionsのように、**バックエンドロジックをサーバーなしで実行**できる  

---

## **💎 Supabaseのメリット・デメリット**
### **✅ メリット**
✔ **無料プランで利用可能**（制限はあるが個人開発には十分）  
✔ **SQLが使えるので、データ管理がしやすい**  
✔ **オープンソースで自由度が高い**  
✔ **リアルタイム機能が強力**  

### **❌ デメリット**
❌ **Firebaseほどの成熟度はない**  
❌ **無料枠を超えると有料プランが必要**  
❌ **Edge Functionsはまだ開発途中の機能が多い**  

---

## **🔥 Supabaseの具体的なユースケース**
Supabaseを活用すると、以下のようなアプリやシステムを簡単に作れます。

### **1. ユーザー認証付きWebアプリ**
✅ 会員登録・ログイン機能（Google, GitHub, Emailなど）  
✅ ユーザー情報のデータベース管理  

💡 **活用例**  
- **会員制のブログサイト**  
- **SNSのようなユーザーアカウント付きアプリ**  
- **管理画面（ダッシュボード）付きのWebアプリ**  

---

### **2. チャットアプリ（リアルタイム通信）**
✅ メッセージをリアルタイムで送受信  
✅ 既読・未読の管理  

💡 **活用例**  
- **カスタマーサポートのチャットツール**  
- **チーム向けのリアルタイムメッセージングアプリ**  
- **ライブストリーミングのコメント機能**  

---

### **3. タスク管理アプリ（TODOリスト）**
✅ タスクの追加・更新・削除（CRUD操作）  
✅ ユーザーごとに異なるタスクを表示  

💡 **活用例**  
- **個人用のTODOリストアプリ**  
- **チーム向けのタスク管理ツール**  
- **リマインダーアプリ**  

---

### **4. eコマース（ECサイト）**
✅ 商品情報のデータベース管理  
✅ ユーザーの購入履歴の保存  
✅ 画像（商品写真）のアップロード  

💡 **活用例**  
- **オンラインショップ**  
- **デジタルコンテンツ販売サイト**  
- **サブスクリプション型のサービス**  

---

### **5. 掲示板・Q&Aサイト**
✅ ユーザー投稿型の掲示板  
✅ コメント機能の追加  

💡 **活用例**  
- **匿名掲示板**  
- **技術系Q&Aサイト（Stack Overflowのようなもの）**  
- **レビュー投稿サイト**  

---

### **6. データ可視化ダッシュボード**
✅ データの収集・保存  
✅ データのグラフ表示  

💡 **活用例**  
- **ビジネス向けの分析ダッシュボード**  
- **IoTデバイスのデータ可視化**  
- **スポーツチームの試合データ分析**  

---

### **7. モバイルアプリのバックエンド**
✅ ユーザー認証（ログイン・サインアップ）  
✅ データベースとの連携  
✅ 画像や動画のアップロード  

💡 **活用例**  
- **フィットネス記録アプリ**  
- **日記・メモアプリ**  
- **レシピ共有アプリ**  

---

### **8. ファイル共有・クラウドストレージ**
✅ 画像・動画をアップロード＆ダウンロード  
✅ ファイルのアクセス制御  

💡 **活用例**  
- **写真共有サービス**  
- **企業向けのファイル管理システム**  
- **ポートフォリオサイト**  

---

## **🎯 Supabaseはこんな人におすすめ！**
✅ **Webアプリを作りたいが、バックエンドを自分で構築したくない人**  
✅ **Firebaseを使いたいが、NoSQLが苦手な人（SQLが使いたい人）**  
✅ **個人開発・スタートアップで手軽にサービスを作りたい人**  

---

## **🎉 まとめ**
Supabaseは、**Firebaseの代替として注目されるオープンソースのBaaS**です。認証・データベース・リアルタイム通信などの機能を備えており、Webアプリの開発を大幅に簡略化できます。  

**「バックエンドの構築は面倒だけど、自由にデータを管理したい！」** という方にとって、Supabaseは最適な選択肢です！💡✨
コンテナを終了したのにポートが占有されたままになるのを解決する方法

docker-composeを起動する際に、下記のようなメッセージが出て起動に失敗することがあります。
この場合だと、3306ポートが使用済みなので起動できないということですね。
```
Error response from daemon: driver failed programming external connectivity on endpoint api-mysql-1 (842426d34d674221b2e025551367628d2bc6ffd4ab4aae0eed927e6d6ecd3dca): Bind for 0.0.0.0:3306 failed: port is already allocated
```

そこで、一般的には3306ポートを使用している他のコンテナを探しそれを停止すれば問題は解決するはずなのですが、今回はそれでも解決しなかったので別の方法を試しました。

以下、手順です。

1.コンテナをすべて停止する。
起動中のすべてのコンテナを停止します。

2.Dockerのプロセスをすべて停止する。
タスクマネージャー（ctrl + shift + esc)を開き、Dockerと名前の付くものをすべて停止します。
・Docker Desktop
・Docker Desktop Backend
・Docker Desktop Extensions

3.WSLを停止する
Power shellで以下のコマンドを実行します。
```wsl --shutdown```

4.Docker Desktopを再起動する
いつも通りの方法でDocker Desktopを起動します。

5.再度docker-composeを実行する
これでうまくいっていれば無事に立ち上がると思います。
[Linux][directory][command] 共有ライブラリ_/etc, ldd, ldconfig, LD_LIBRARY_PATH

# ディレクトリ一覧
|ディレクトリ|説明||
|:--|:--|:--|
|`/usr`|設定ファイル||
|`/usr/lib`|設定ファイル||
|`/etc/ld.so.conf`|設定ファイル||
|`/etc/ld.so.cache`|`/etc/ld.so.conf`のキャッシュファイル||

# コマンド一覧
|コマンド|由来|説明|
|:--|:--|:--|
|`ldd`|list dynamic dependencies|実行ファイル(プログラム)が必要としている共有ライブラリを調べる|
|`ldconfig`|library directory configure|`/etc/ld.so.conf`に基づいてキャッシュファイル(`/etc/ld.so.cache`)を更新する|

# その他のディレクトリも検索対象に追加したい場合
共有ライブラリの検索パスを設定する環境変数: `LD_LIBRARY_PATH`

# 参考リンク
- [ldconfig - 共有ライブラリのリンクと検索キャッシュの作成](https://linuxcommand.net/ldconfig/)
- [Linux - Library](https://www.infraexpert.com/infra/linux07.html#:~:text=%E2%97%86%E3%80%80%E5%BF%85%E8%A6%81%E3%81%A8%E3%81%AA%E3%82%8B%E5%85%B1%E6%9C%89%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E6%A4%9C%E7%B4%A2)

# Ping-t
- [3425_ldconfig, /etc/ld.so.cache](https://mondai.ping-t.com/question_subjects/31/question_sessions/31216102/progressing_questions/478329133)
- [3426_ldconfig, /etc/ld.so.conf](https://mondai.ping-t.com/question_subjects/31/question_sessions/32375836/progressing_questions/496046626)

- [3018_ldd](https://mondai.ping-t.com/question_subjects/31/question_sessions/30188717/progressing_questions/462490501)
- [3427_LD_LIBRARY_PATH](https://mondai.ping-t.com/question_subjects/31/question_sessions/31357762/progressing_questions/480478550)
【AWS Health】AWSマネージド通知の一般提供開始のお知らせ

# はじめに
こんにちは。株式会社ジールの[@yakisobapan](https://qiita.com/yakisobapan)です。

AWS User Notificationsにて、**AWS マネージド通知の一般提供**が発表されました。

# 目次
 - アップデート内容
 - やってみた
 - 所感


# アップデート内容
:::note info
ひとことで
・AWS Healthの通知*が、CloudWatchアラームなどのカスタム通知と一元的に「通知センター」で管理・確認可能になった
　*AWSリソースに影響するイベント情報
・特定の通知カテゴリの購読解除が簡単に設定可能。主要連絡先や代替連絡先ごと調整できる
:::
AWSマネージド通知において、通知センターへの表示&確認と、AWSマネージド通知の送信先のカスタムが提供されるようになりました。

>アマゾンウェブサービスは、AWS マネージド通知の一般提供を発表します。これは、お客様が AWS Health 通知を受信して​​管理する方法を強化する AWS ユーザー通知の新機能です。この機能を使用すると、コンソール通知センターで、CloudWatch アラームなどのカスタム通知とともに、デフォルトの AWS Health 通知を表示および変更できます。
（2025/01/27 What's New with AWS?より）

https://aws.amazon.com/about-aws/whats-new/2025/01/general-availability-aws-managed-notifications/


# やってみた

**AWS Health通知の有効化**

- AWS User Notificationsへ移動
　「AWSマネージド通知サブスクリプション 新規」 という項目が追加されています。
　「AWS Health通知を有効にする」を押下することで、AWSマネージド通知機能が利用できるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/a6620408-9569-e87c-4e11-bd0035617c3e.png)

- 有効化後

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/2fc1971b-ae1b-c9a4-71bf-986d8a901b4f.png)


**通知センターへの表示&確認**

- マネジメントコンソールへログインしベルマークを押下
　「AWSマネージド」という項目が追加されています。今まではなかったようです。
　※この画面でAWSマネージド通知を確認するには、AWS Health通知の有効化を行う必要があります。
 
- AWSマネージドタブに表示される通知としては、以下のようなものです
・運用イベント
サービス停止情報　：特定リージョンやサービスに影響する障害
パフォーマンス低下：サービスのレスポンスが通常より遅くなっている場合
メンテナンス通知　：計画されたメンテナンスに関する案内<br>
・セキュリティ通知
セキュリティ脆弱性　　：利用中のサービスに影響を与える脆弱性の警告
セキュリティ関連の更新：AWSが推奨するセキュリティ設定や変更に関する情報<br>
・サービス更新情報
新機能リリース通知：サービスに追加された新しい機能
廃止予定通知　　　：サービスやAPIのサポート終了予定<br>

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/dac6c901-bddb-bdb7-3280-f9c6d3c998e2.png)


**AWSマネージド通知の送信先のカスタム**

- サブスクリプションの管理より各通知の配信先を設定
　今回は請求（Billing Notification）のサブスクリプションを確認してみます。
　その他の通知についても手順は同じで、通知カテゴリごとにカスタムできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/c83a8320-676e-19e8-970d-085072e96ed6.png)

- アカウント連絡先に設定された連絡先や、配信チャネルを設定して、指定の宛先へ通知
・アカウント連絡先
AWS Billing and Cost Managementで設定されている連絡先へ通知を行う設定<br>
・配信チャネル
任意の配信先（Eメール、モバイルデバイス、SlackやTeams等チャットチャネル）へ通知を行う設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/6ae9e354-283b-7a33-bc39-8735cff7907a.png)

・アカウント連絡先
AWS Billing and Cost Managementで設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/e0cf1e92-fd47-16ed-642c-4e8ca58f6361.png)

・通知チャネル
AWS User Notificationsで設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/908ac45b-d8ac-a69a-3d72-6c199a216b6a.png)

- 設定後
・アカウント連絡先
「請求に関する連絡先」に紐づいた配信先へ配信されるようになります。
・配信チャネル
「配信チャネル」で設定した配信先へ配信されるようになります。

 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2737731/f4810930-ca1a-dab9-31ef-308d14648d21.png)



# 所感
今回のアップデートで、AWS Healthからの各種通知を確認しやすくなり、通知先の管理も容易にできるようになりました。AWSアカウントの管理や運用を行うユーザーや、AWS上に構築しているシステムの運用者にとって、嬉しい内容だと考えます。

# 参考
https://docs.aws.amazon.com/notifications/latest/userguide/what-is-service.html
Javaで「テキストフィールドにツールチップを表示する」の動作を確認してみた。

# 概要

Javaで「テキストフィールドにツールチップを表示する」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/tutorial/jtextfield/index14.html

# 実装

以下のファイルを作成しました。

```JSample14_1.java
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JPanel;
import java.awt.Container;
import java.awt.BorderLayout;

class JSample14_1 extends JFrame{

  public static void main(String args[]){
    JSample14_1 frame = new JSample14_1("MyTitle");
    frame.setVisible(true);
  }

  JSample14_1(String title){
    setTitle(title);
    setBounds(100, 100, 600, 400);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextField nameText = new JTextField("Yamada", 40);
    nameText.setToolTipText("Please enter your name");
    JTextField ageText = new JTextField("20", 40);
    ageText.setToolTipText("Please enter your age");

    JPanel p = new JPanel();
    p.add(nameText);
    p.add(ageText);

    Container contentPane = getContentPane();
    contentPane.add(p, BorderLayout.CENTER);
  }
}
```

以下のコマンドを実行しました。

```
$ javac JSample14_1.java 
$ java JSample14_1 
```

実行結果は以下の通りでした。

![Screenshot from 2025-01-29 11-04-31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3192024/489dc1a0-1866-c44c-87c0-cffc8cae8744.png)

# まとめ

何かの役に立てばと。
【学習】SQLiteのデータ型について— 他のDBと何が違うのか？

## はじめに
SQLiteは、データの型（データ型）の扱いがほかのデータベースとはちょっと違うことをつい最近知りました。今回は、そんなSQLiteのデータ型について調べてことをアウトプットしたいと思います

**👇参考サイト**

https://www.sqlite.org/datatype3.html


## 1. SQLiteのデータ型は、いい意味で「ゆるい」？
多くのデータベース（MySQLやPostgreSQLなど）は、カラムごとにデータの型が決まっていて、それ以外の型のデータは入れられないようになっています（**これを「静的型付け」といいます**）。

ですが、**SQLiteは「動的型付け」** という方法を採用しています。つまり、**カラムの型はあくまで「おすすめ」** であり、実際にはどんなデータ型でも入れることができるという事実。

例えば、通常のデータベースではエラーが発生：
```sql
CREATE TABLE users(id INTEGER, name TEXT);
INSERT INTO users(id, name) VALUES ('abc', 123); -- エラー！
```

「id」は整数型（INTEGER）なので、文字列（'abc'）を入れようとするとエラーになります。

でも、SQLiteならエラーは発生しない？！：
```sql
CREATE TABLE users(id INTEGER, name TEXT);
INSERT INTO users(id, name) VALUES ('abc', 123); -- エラーにならない！
```

「id」は本来INTEGER型のカラムですが、文字列（'abc'）を入れることができてしまいます。SQLiteはカラムの型を強制しないので、柔軟にデータを扱えるのが特徴です。扱いには注意が必要です‼

---

## 2. SQLiteのデータ型（ストレージクラス）

SQLiteのデータ型は5つだけです。
私自身調べる前はENUM型を使えるものだと思っていました💦

| ストレージクラス | 説明 |
| --- | --- |
| **NULL** | 値が空（NULL）のとき |
| **INTEGER** | 整数（0, 1, -5, 100 など） |
| **REAL** | 小数（3.14, -2.718, 1.5e10 など） |
| **TEXT** | 文字列（'Hello', '123' など） |
| **BLOB** | そのままのデータ（画像やファイルなど） |

たとえば、「年齢（age）」というカラム。本来は整数（INTEGER）を入れるべきですが、SQLiteでは文字列でも保存できてしまいます。

```sql
CREATE TABLE users(age INTEGER);
INSERT INTO users(age) VALUES ('25'); -- エラーにならない！
```

このように、SQLiteはデータ型に対して、いい意味で柔軟に対応してくれます。

---

## 3. SQLiteには「型の傾向（型親和性）」がある

SQLiteはカラムの型を強制しませんが、カラムごとに「どんな型をおすすめするか」という設定があります。これを **型親和性（Type Affinity）** といいます。

SQLiteの型親和性は以下の5種類です。

| 型親和性 | 説明 |
| --- | --- |
| **TEXT** | 基本は文字列として保存される |
| **NUMERIC** | 数値か文字列として保存される（基本は数値） |
| **INTEGER** | 数値として保存される（整数を優先） |
| **REAL** | 小数として保存される |
| **BLOB** | そのままのデータとして保存される（変換なし） |

たとえば、次のようにカラムを作ったとします。

```sql
CREATE TABLE test(a TEXT, b NUMERIC, c INTEGER, d REAL, e BLOB);
```

この場合、それぞれのカラムの動作は次のようになります。

```sql
INSERT INTO test(a, b, c, d, e) VALUES (123, '456', '3.14', 500, X'1234');
```

| カラム | 保存される値 | 説明 |
| --- | --- | --- |
| a (TEXT) | '123' | 123 は文字列として保存される |
| b (NUMERIC) | 456 | '456' は数値に変換される |
| c (INTEGER) | 3 | '3.14' は整数部分だけ保存される |
| d (REAL) | 500.0 | 500 は小数として保存される |
| e (BLOB) | X'1234' | そのまま保存される |

このように、型親和性によってデータが変換されることがあります。

---

## 4. SQLiteの「日付・時刻」データ型

SQLiteには **日付・時刻専用の型はありません**‼

その代わり、3つの方法で保存できます。

| 形式 | 例 | 説明 |
| --- | --- | --- |
| **TEXT** | '2025-01-29 12:34:56' | ISO8601形式（YYYY-MM-DD HH:MM:SS） |
| **REAL** | 2459580.023 | ユリウス日（過去の天文学的な日付表現） |
| **INTEGER** | 1706530496 | Unix時間（1970年1月1日からの秒数） |

たとえば、現在の日付をTEXTで保存する場合はこう書きます。

```sql
INSERT INTO logs(created_at) VALUES (DATETIME('now'));
```

`DATETIME('now')` を使うと、現在の日付が `"YYYY-MM-DD HH:MM:SS"` 形式で保存されます。

---

## まとめ

- **SQLiteは「動的型付け」なので、カラムの型に関係なくどんなデータでも入れられてしまうかもしれない**
- **ストレージクラス（基本のデータ型）は5つ：NULL, INTEGER, REAL, TEXT, BLOB**
- **カラムごとに「型の傾向（型親和性）」があり、データが自動変換されることがある**
- **日付・時刻型もないが、TEXT・REAL・INTEGERの3種類で保存できる**

SQLiteは柔軟にデータを扱えるので、カラムの型にとらわれすぎず、使いやすい形でデータを保存できる反面、使用しづらさもあるのかな？と感じました💦
MYSQLと名前が似ているから同じものだと思い込んでの使用は危険だな、とも感じました。
今回の記事が何か参考になれば幸いです。
[Linux] GRUB 2

# 起動プロセス
```mermaid
graph TD
  A((電源ON))
  A --> B[ファームウェア<br>（BIOS/UEFI）]
  B --> C[パーティション形式<br>（MBR/GPT））]
  C --> D[ブートローダ（GRUB/GRUB2）]
  D --> E[カーネル]
  E --> F[初期化システム（initシステム）]
  F --> G((ログイン画面表示))

  classDef step1 fill:#f2f2f2,stroke:#333,stroke-width:2px;
  classDef step2 fill:#e6f7ff,stroke:#333,stroke-width:2px;
  classDef step3 fill:#e6ffe6,stroke:#333,stroke-width:2px;
  classDef step4 fill:#ffffe6,stroke:#333,stroke-width:2px;
  classDef step5 fill:#ffebcc,stroke:#333,stroke-width:2px;

  class B step1
  class C step2
  class D step3
  class E step4
  class F step5

  B:::step1 -->|ハードウェアの初期化、POST（Power On Self Test）| B
  C:::step2 -->|MBR/GPTによるパーティション情報の読み取り、<br>ブートローダの位置特定| C
  D:::step3 -->|GRUB/GRUB2がカーネルを選択・メモリに読み込む、<br>カーネルを起動| D
  E:::step4 -->|カーネルがシステムリソース（プロセス・メモリ管理など）を初期化、<br>デバイスドライバを読み込む| E
  F:::step5 -->|initシステム（systemdなど）がサービスを開始、<br>ユーザーのログイン画面を表示| F
```

# GRUB 2の概要
- ストレージ（HDDなど）から、OSのカーネルイメージをメモリにロードし、カーネルを実行する
- バージョン`1.9x`系

# ブートローダで設定できること
- 設定ファイルは`/boot/grub/grub.cfg`<INS>**←直接編集できない**</INS>
- `/etc/default/grub`または`/etc/grub.d`で設定、`grub-mkconfig`コマンドで実行

|`/etc/default/grub`の<br>パラメータ|説明|
|:--|:--|
|GRUB_TIMEOUT|メニューを表示している時間（秒）|
|GRUB_DEFAULT||
|GRUB_CMDLINE_LINUX||


# Ping-t
- [3656](https://mondai.ping-t.com/question_subjects/31/question_sessions/30188717/progressing_questions/462490495)
- [3677](https://mondai.ping-t.com/question_subjects/31/question_sessions/30188717/progressing_questions/462490494)
OCI Cloud Free Tier をもぎ取れ その21

# 概要
OCI Cloud Free Tierを取得してみた。
ubuntuに wordpressをインストールした。
youtubeを投稿してみた。

# 手順

/yでyoutubeブロックが出る。

urlを打ち込む。

# 成果物

http://ohisama.f5.si/index.php/2025/01/29/test6/

以上。
Windowsバッチ(.bat)学習メモ　FINDコマンド

FINDコマンドは、ファイル内に記載されている内容に対して検索をかけ、結果を抽出することが可能。

##### 実演用ファイル（１）
```:zanpakuto.txt
厳霊丸
五形頭
侘助
凍雲
飛梅
蛇尾丸
```
##### 実演用ファイル（２）
```:zanpakuto_eng.txt
Gonryoumaru
Gegetsuburi
Wabisuke
Itegumo
Tobiume
Zabimaru
```

<br>


## ファイルから、ある文字を**含む**行のみを抽出する
find "検索したい文字列" 検索対象ファイル名`
例：find "丸" zanpakuto.txt
```:コマンド実行結果
---------- zanpakuto.txt
厳霊丸
蛇尾丸
```

## ファイルから、ある文字を**含まない**行のみを抽出する
find **/v** "丸" zanpakuto.txt
```:コマンド実行結果
---------- zanpakuto.txt
五形頭
侘助
凍雲
飛梅
```

## 抽出した結果に、抽出元における**行番号**をつける
find **/n** "丸" zanpakuto.txt
```:コマンド実行結果
---------- zanpakuto.txt
[1]厳霊丸
[6]蛇尾丸
```

## ファイルから、**大文字小文字の区別なく**抽出する
find /n **/i** "I" zanpakuto_eng.txt
```:コマンド実行結果
---------- zanpakuto_eng.txt
[2]Gegetsuburi
[3]Wabisuke
[4]Itegumo
[5]Tobiume
[6]Zabimaru
```
テストサイズに対する覚書

# モチベーション
テストを実施する際に、UT(単体テスト）、IT(結合テスト)などそれぞれ工程はあるが、
具体的にどんなテストを書くかそれぞれの認識が違うため、すり合わせが大変。

googleで提唱されている、small、middle、largeテストでテスト分類をして認識齟齬を無くしたい
https://testing.googleblog.com/2010/12/test-sizes.html

# テストサイズとは？
テストサイズとは、リソースの量や実行場所、実行時間などによって分類する方法。
以下のような分類があります。

## small
モジュール単位(単一のソースファイル)に対してテストを行うもの別なモジュールとの連携はモックを利用する。

## middle
単一のマシンに閉じた環境であれば外部リソースの利用を許容するテストです。
データベースは、dockerで立ててテストデータは、テスト担当者が作る。
ファイル転送など、別のPCへアクセスするものはモックを利用する。
クラウドへのアクセスも、ローカルPC上でテストできればテスト対象となるが、クラウドを直接使うようなテストは対象外とする。

## large
自動テストからリモートマシンへのネットワークアクセスなども許容するテストです。
モックを使わず、全て本物を使用してテストを行う。
テストのロボット（playwrightなど）を使って実施する。

# どこを重点的にやるか
テストレベルにおいて理想的な比率を示したものをよくテストピラミッドと表現します。
上に行くほどテストのケース数が少ない方が、テスト効率が良いという考えです。
実際、E2Eテストが一番重いので、量が多いとなかなか自動テストが終わらなくマージできないといったプロジェクトもありました。
このテストピラミッドに対応したテストを計画することが基本と考えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003663/4fc9b5c6-3a2d-22d7-26c1-8195db6edc20.png)


# どこを重点的にやるか（アレンジ）
最近のプログラムではライブラリが充実しており、複雑なプログラムを書く機会が少ないと感じています。
個人的にはmiddleテストを重点的にやった方が、不具合が取れると考えています。
なので、テストピラミッドではなく、テストトロフィーを推奨します。
これにより、機能の仕様確認に近いテストが多く実施され品質の保証がしやすくなると考えています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3003663/57b39f8a-eec5-cfa0-3101-82075842d98a.png)
*saticはlinterなどの静的解析を指す

# 各工程でのテスト
UT、ITでそれぞれどんなテストを実施するかについてですが、
UTは、smallテストと、middleテストを実施するのが良いと考えています。
理由としては、この工程ではできるだけ不具合を取りたいのでmiddleテストまで含めたい考えです。

ITでは、largeテストを実施を考えています。
シナリオを作ってテストするのがlargeテストですが、実施コストが高いので王道パターンを自動テストに組み込み実施するのが良いと考えています。
個人的な備忘録：WindowsのShift_JISとLinuxのUTF-8における文字コードの違いと簡単な変換方法について

## はじめに
WindowsとLinuxでは、デフォルトで使用される文字コードが異なります。

:::note warn
***そのため、ファイルの文字化けや互換性の問題が発生することがあります。***
:::

本記事は個人的な備忘録としてまとめたものです。***その点をご理解いただければ幸いです。***

## 文字コードの違いに苦戦した経験がある
過去にLinuxで作ったおみくじアプリを、Windowsで再現しようとした際に苦戦した経験があります。

:::note alert
**そのとき、全くうまく動作せず、原因を追求した結果、OSごとの文字コードの違いが原因であることがわかりました。**
:::

些細な違いに思えますが、それだけでアプリが動かないという問題が発生したため、文字コードの扱いには非常に苦労した記憶があります。

**過去に苦労した技術検証**

https://qiita.com/free-honda/items/b40f98bd14d15c59eac1

https://qiita.com/free-honda/items/ab2c897db42805fa986b

## WindowsとLinuxのデフォルト文字コードの違い

**Windows**

- **デフォルトの文字コード**: Shift_JIS (CP932)
- **日本語環境**: 一般的に Shift_JIS (MS932とも呼ばれる) が使用される。
- **PowerShell や コマンドプロンプト（cmd）**:
  - 既定では Shift_JIS (CP932) が使われる。
  - UTF-8 を使うには手動で変更が必要。

**Linux**

- **デフォルトの文字コード**: UTF-8
- **特徴**:
  - ほとんどのLinuxディストリビューションでは、デフォルトで UTF-8 を使用。
  - システム全体の文字コードが統一されていることが多い。

## 文字コードの違いによる影響

ここでは、簡単に自分なりに知識整理として表形式でまとめてみましたので、参考にしてみてください

# Windows (Shift_JIS, CP932) と Linux (UTF-8) の比較

| 項目                 | Windows (Shift_JIS, CP932)                             | Linux (UTF-8)                          |
|----------------------|--------------------------------------------------|----------------------------------|
| **日本語対応**      | 一部の記号が異なる (例: `～`, `―`, `￠`)               | 広く標準化されており、ほぼすべての記号に対応 |
| **互換性**          | LinuxでShift_JISのファイルを開くと文字化けすることがある | UTF-8は多くのOSで標準対応             |
| **エンコーディング変更** | `chcp 65001` (UTF-8) に切り替え可能                    | `iconv` や `nkf` コマンドでShift_JISに変換可能 |


## ここまでの簡単なまとめ

- **Windows** は `Shift_JIS (CP932)`、**Linux** は `UTF-8` をデフォルトで使用する。
- **LinuxでWindowsのShift_JISファイルを開くと文字化けする可能性がある**。
- `iconv` や `nkf`、**Python** を使ってエンコーディングを変換可能。
- **クロスプラットフォームでの開発では、UTF-8を統一して使用するのがベスト**。


## 文字コード変換の方法

### WindowsでShift_JIS → UTF-8 に変換

**PowerShellを使用**

```powershell
Get-Content file_sjis.txt | Set-Content file_utf8.txt -Encoding utf8
```

- Get-Content

  指定されたファイル (`file_sjis.txt`) の内容を取得します。  
  内容はテキストデータとして出力されます。

- パイプ (|)

  `Get-Content` から出力されたデータを次のコマンドに渡します。

- Set-Content

  `Get-Content` から受け取ったデータを新しいファイルに書き込みます。  
  `-Path` オプションで出力先のファイル名 (`file_utf8.txt`) を指定します。  
  `-Encoding utf8` オプションで文字コードを UTF-8 に指定します。


**Pythonを使用**

```py
with open("file_sjis.txt", "r", encoding="cp932") as f:
    text = f.read()

with open("file_utf8.txt", "w", encoding="utf-8") as f:
    f.write(text)
```

**このスクリプトがやっていること**

- Shift_JIS (CP932) のファイル (`file_sjis.txt`) を開いて中身を取得する
- 取得したデータを UTF-8 でエンコードし直して、新しいファイル (`file_utf8.txt`) に書き込む

### LinuxでUTF-8 → Shift_JIS に変換

**`iconv` コマンドを使用**

```bash
iconv -f UTF-8 -t CP932 file_utf8.txt > file_sjis.txt
```

**`nkf` コマンドを使用**

```bash
nkf -s file_utf8.txt > file_sjis.txt  # -s は Shift_JIS
```

## まとめ
最後までお読みいただき、ありがとうございました。今回は基本的な内容を簡単にまとめましたが、自分自身の振り返りの良い機会にもなりました。

:::note warn
**今後も、こうした基礎的な内容を丁寧にアウトプットしながら、知識を確実に定着させていきたいと考えています。**
:::

***この内容が、どなたかの技術の支えや学習の参考になれば幸いです。***
NCA-AIIO(NVIDIA Certified Associate AI Infrastructure and Operations)に合格しました

## はじめに
職場でNVIDIAの有償研修を受講する機会をいただいたので、AIの基礎コースである「AI Infrastructure and Operations Fundamentals」を受講し、その流れで認定資格のNCA-AIIO(NVIDIA Certified Associate AI Infrastructure and Operations)を受験し合格できたので、その記録を残します。

## AI Infrastructure and Operations Fundamentalsとは
NVIDIA Academyで提供されている研修コースで、AIの基礎からNVIDIAの提供するソリューションや製品ポートフォリオまで学べるオンデマンドの研修です。（所要時間：約6時間）
大きく分けて、以下の３つのパートに分かれています。
- Introduction to AI
- AI Infrastructure
- AI Operations

## NCA-AIIO(NVIDIA Certified Associate AI Infrastructure and Operations)とは
AIの基盤と運用についての基礎的なエントリーレベルの認定資格です。
60分で50問の問題が出題されます。
試験範囲は以下となっています。
- Accelerated computing use cases
- AI, machine learning, and deep learning
- GPU architecture
- NVIDIA’s software suite
- Infrastructure and operation considerations for adopting NVIDIA solutions

詳細は以下のリンク先の試験ガイドに記載があります。

https://www.nvidia.com/en-us/learn/certification/ai-infrastructure-operations-associate/

## 勉強方法
上記のオンデマンド研修を業務の合間に受講しました。
その他、試験ガイドにReview These Additional Materialsのリンクがあるので、理解が足りてないと思うところはそちらを参照しました。

## 受験
申し込みはCertiverseから。
オンデマンド研修もそうでしたが、全て英語です。
オンライン試験なので自宅で受験しました。

https://www.certiverse.com/#/store/nvidia

## 結果
無事合格できました。
オンデマンド研修の内容でほぼカバーされていると感じました。
有効期限が2年ということなので、今後もキャッチアップしていきたいと思います。

https://www.credly.com/badges/e90af80f-6e07-4a2f-a816-01c4ed10b5c5/public_url
【思考法・考え方】プレゼン思考　プレゼンを制する者は、ビジネスを制する

【思考法・考え方】プレゼン思考　プレゼンを制する者は、ビジネスを制する
<iframe width="560" height="315" src="https://www.youtube.com/embed/3M7Pibv1hLI?si=DZs2wLKgP8snbtPD" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
エンジニアしながら芸人してたら「ウチのガヤがすみません！」に2回出れた

# はじめに
<font color="black"><b>普段、IT企業で働いている「プログラマー芸人・ジンバ」と申します。</b><font color="black">
平日は正社員でエンジニアとして働いていて、夜や土日は芸人としてライブに出ています。
自作アプリやゲームを用いたネタをしています。

https://youtu.be/7w4dPVcd2-Y

この度、ヒロミ＆フット後藤さんがMCでゲストをおもてなす番組<font color="red"><b>「ウチのガヤがすみません！」</b><font color="black">のお正月特番に出演しました。
![スクリーンショット 2025-01-20 22.27.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/3ca6a9ca-15e9-6294-a031-89ec1d1fe6e6.png)


2024年7月にも出演したので2連続出演となります。
通常の芸人との違い、エンジニアの仕事への影響などを書き記します。


# ウチガヤで何を披露したのか
ヒロミ＆フット後藤＆ゲストの皆さんがキャラとして登場する格闘ゲームを披露しました。

1回目の出演ではコントローラーで操作しましたが、

2回目は体の動きに合わせてキャラも動く格闘ゲームを作りました。

![スクリーンショット 2025-01-25 19.18.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3574599/69f7d8a8-feab-2ea1-32b0-7821d8d75cea.png)


スタジオでも大盛り上がりでした。


# 普段のエンジニアの仕事は？
エンジニアの仕事について記します。
<ul>
<li><font color="red"><b>受託開発のSIer</b><font color="black">
<li>VRアプリやドローンを操作するアプリを開発(会社全体では予約アプリや会員システムの開発が多い)
<li>ゲームは無いです
<li>フレックスタイム制(平日夜にオーディションがあったら抜けやすいのはありがたい)
</ul>

# 普段の芸人活動は？
芸人活動について記します。
<ul>
<li>松竹芸能に所属
<li>自作アプリやゲームを用いたネタをしています
<li>芸歴4年目(20歳で始めたので若い方)
</ul>


# 会社員なのに芸人活動OKなのか？
<b>副業申請</b>を出したのでOKです。
実は社会人になって1年ぐらい芸人やってることを隠してたのですがYouTubeきっかけでバレました。

# 仕事と両立するのは大変ではないのか？
これがよく聞かれるのですが、結論<font color="blue"><b>「アルバイトとそんなに変わらないのでは？」</b><font color="black">と答えています。
アルバイトしながら芸人活動している人がほとんどですが、「夜勤で10時間働いた」「8連勤」みたいな話を聞きます。何ならアルバイトの方がキツイのでは？
正社員しながら芸人活動するメリットとしては
<ul>
<li>収入が安定する
<li>キャラ付け(医者芸人、プログラマー芸人、〇〇芸人など)
<li>芸人を辞めた後も職がある
</ul>
正社員しながら芸人活動するデメリットとしては
<ul>
<li>平日昼間のオーディションに参加しにくい
<li>副業禁止のところだとそもそも芸人活動ができない
</ul>
だと僕は思っています。この辺の話は以下の動画をご覧ください。

【働きながらできる！】兼業芸人のススメ 
https://youtu.be/6APOuG6MYsU

# なぜコンビを組んで漫才をしないのか
これはどちらか言うと芸人によく聞かれます
理由は明確にあります。
<ul>
<li>コンビでネタ合わせするのがめんどくさい、イライラする
<li>相手を自分の都合に合わせてもらうのが申し訳ない
<li>プログラマー芸人であることで、芸歴早めにテレビに出れた(コンビだったら10年かかっても出れなかったかも)
</ul>


# プログラマー芸人のデメリットは
ここまで聞くと良いことづくしですが、デメリットもあります。
<ul>
<li><font color="blue"><b>爆発的に売れるのは難しいか(M-1とかの方が引きがある</b><font color="black">
<li>コンビの方がMCやロケの仕事が回ってきやすい(ボケ・ツッコミ両方いた方がいい)
</ul>
この中でも僕はメリットが大きいと思った、ということです。

# まとめ
伝えたいことを書き記しました。何か質問あればコメントお願いします。
またイベントの司会等ご依頼ありましたら、ジンバのSNSまたは松竹芸能にご連絡お願いします。
【WSL2】Cursor が立ち上げられなくなった

# 前提条件
WSL2 上で `cursor` コマンドで Cursor を立ち上げられるようにしています。


# 遭遇した事象
いつもと変わらず `cursor` コマンドを叩くと、下記のようなエラーが発生し、Cursor が立ち上げられなくなってしまいました。

```sh:wsl2
node:internal/modules/cjs/loader:1235
  throw err;
  ^

Error: Cannot find module 'C:\Users\***\AppData\Local\Programs\cursor\resources\app\out\cli.js'
    at Module._resolveFilename (node:internal/modules/cjs/loader:1232:15)
    at Module._load (node:internal/modules/cjs/loader:1058:27)
    at c._load (node:electron/js2c/node_init:2:16955)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:188:12)
    at node:internal/main/run_main_module:28:49 {
  code: 'MODULE_NOT_FOUND',
  requireStack: []
}

Node.js v20.18.1
```


# 調査
エラー内容を見るに、Cursor を立ち上げるためのモジュールが足りていないとのことです。
ただ、該当のモジュールをどのようにリインストールするかは分かりませんでした。


# 解決策
大人しく、Cursor をリインストールすることにしました。

```sh:コマンドプロンプト
# 既存の Cursor をアンインストール
winget uninstall Cursor

# 再インストール
winget install Cursor
```

上記の手順で、無事立ち上がるようになりました。


# まとめ
エラーの発生原因については謎ですが、立ち上がるようにはなったのでよしとします。
同様のエラーに遭遇した方の参考になれば幸いです。
Excelベースの管理資料をPower BIに統一する方法

# はじめに

こんにちは！
記事をご覧いただきありがとうございます。
本記事では、Excelで管理していたデータをPower BIに統一する方法について解説します。
Excelを使ってデータ管理をしている方の中には、手動更新の手間や可視化の限界を感じている方も多いのではないでしょうか？Power BIを導入することで、データの自動更新や視覚的なダッシュボード作成が可能になり、業務の効率化が期待できます。
ぜひ最後までご覧ください！

# 目次
4.  [Power BIとは](#power-biとは)
1. [Excelベースの管理資料をPower BIに統一するメリット](#excelベースの管理資料をpower-biに統一するメリット)
4. [移行手順](#移行手順)
4.  [最後に](#最後に)


# Power BIとは
Power BIはMicrosoftが提供するBI（ビジネスインテリジェンス）ツールで、データを可視化し、レポートを作成するために使用されます。
特に、直感的な操作でダッシュボードを作成できる点が魅力です。

Power BIには、以下の3つの主要なコンポーネントがあります。

Power BI Desktop: データの取り込み、モデリング、可視化を行うツール。

Power BI Service: Web上でレポートを共有・管理できるサービス。

Power BI Mobile: スマートフォンやタブレットでレポートを確認。



# Excelベースの管理資料をPower BIに統一するメリット
Excelで管理していたデータをPower BIに統一することで、以下のようなメリットがあります。

✅ 自動更新が可能になり、手作業を削減できる
✅ 一元管理することでデータの整合性を確保
✅ リアルタイムでのデータ共有が可能
✅ 高度な可視化と分析ができる

Excelでは、手作業でのデータ更新や複数ファイルの管理が大変ですが、Power BIではこれを効率化できます。
# 移行手順

### 1. 現在のExcelデータの整理
不要なデータを削除し、必要な項目を整理する
データ形式を統一する（例：日付や数値フォーマット）

### 2. Power BIにデータを取り込む
Power BIの「データを取得」からExcelを選択し、取り込む

### 3. データのモデル化
関係のあるデータを結合し、分析しやすい形にする
DAX関数を使ってカスタム集計を行う

### 4. ダッシュボードを作成する

必要な指標をグラフやテーブルで可視化
ユーザーが見やすいデザインを意識する

### 5. 自動更新の設定
Power BI Serviceでスケジュール更新を設定し、最新データを反映

# 最後に
Power BIを導入することで、Excelベースの管理資料の課題を解決し、より効率的なデータ管理が可能になります。
【JavaScript】/*#__PURE__*/`アノテーションについて

# /*#__PURE__*/`アノテーションとは
BabelによるJavaScriptの変換において、関数が純粋関数であることを示す。

## 純粋関数
入力値が同じなら、必ず出力値が同じになる関数。条件は次のとおり。
- 入力値に依存しない
- 入力値を変更しない
- 外部の状態を変更しない


## Babel
JavaScriptのコンパイラであり、主に以下の目的で使用される。

### 最新のJavaScript機能のトランスパイル
最新のJavaScript（ES6以降）の機能を、古いブラウザでも動作するようにトランスパイル（変換）する。これにより、開発者は最新のJavaScript機能を使用しながら、古いブラウザとの互換性を保つことができる。

### JavaScriptの構文変換
JSXやTypeScriptなど、JavaScriptの拡張構文を標準のJavaScriptに変換する。

### プラグインとプリセットの利用
Babelはプラグインとプリセットを使用して、特定の変換を行う。
例えば、`@babel/preset-env`は、指定した特定の環境に応じて必要な変換を自動的に適用する。

Babelの主な機能
トランスパイル: 最新のJavaScriptコードを古いバージョンのJavaScriptに変換します。
プラグイン: 特定の変換を行うためのプラグインを使用できます。
プリセット: 一連のプラグインをまとめて適用するためのプリセットを使用できます。

## /*#__PURE__*/`アノテーションのメリット
このアノテーションを付けることで、Babelは関数の呼び出しを最適化してくれる。
最適化に関数具体的な内容は次のとおり。

### コードの軽量化
Babelは不要なコード（デッドコード）を削除したり、コードを短縮したりすることで、トランスパイル後のファイルサイズを軽量化することができる。これにより、ページの読み込み時間が短縮され、UXが向上する。

### パフォーマンスの向上
純粋な関数の結果をキャッシュできるようになる。これにより、同じ計算を繰り返す必要がなくなり、パフォーマンスが向上する。

### 純粋関数の結果の再利用
複数の箇所で純粋関数を使用している場合、Babelは同じ出力結果を再利用してくれる。

### モジュールの最適化
BabelはES6モジュールをCommonJSモジュールに変換できる。これにより、モジュールのロードが効率化され、パフォーマンスが向上します。

:::note warn
純粋でない関数に対して/*#__PURE__*/アノテーションを付けると、キャッシュや出力結果の再利用による予想外の動作になるので注意。
:::
[ServiceNow] Impersonate User（ユーザーのなりすまし）機能とは？

※この記事はServiceNow初心者が学習用のために記載した記事です。内容について誤っている場合がございます。不足点などございましたらコメントいただけますと幸いです。

# Impersonate User（ユーザーのなりすまし）機能とは？
- 管理者（admin ロールを持つユーザー）が別のユーザーとしてログインし、そのユーザーの権限やロールでServiceNowを操作できる機能
- 管理者が別のユーザー視点でServiceNowを操作・テストできる機能

# 使用例
- ユーザーの権限確認
    - 特定のユーザーが必要なモジュールや機能にアクセスできるか確認する
        - 例：「ITILロールを持つユーザーがインシデントを作成・更新できるか？」
- トラブルシューティング
    - 「あるユーザーが特定の機能を使えない」と報告を受けた場合、そのユーザーの視点で再現テストができる
- ユーザーエクスペリエンスの確認
    - 標準ユーザー（外部ユーザー）、管理者、エージェントなど異なるロールを持つユーザーの画面がどう見えるかをチェック
- ワークフローやUIポリシーのテスト
    - 特定の条件でボタンが非表示になるか、フォームの自動入力が正しく動作するかを確認

# 使用方法
- 画面右上のアイコン右横のセレクトボックスを押下
- 「Impersonate User」を押下
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/d85710c1-19d1-e5b2-e73e-fbd4dad9da69.png)
- 「Search for user」でなりすますユーザーを選択
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/6a3d857a-ee06-08d3-25f9-901b5d462602.png)
- 選択したユーザーのViewと権限で操作できる
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/a180b051-843d-45ed-19e0-f880dfdfd4c5.png)
- 解除するときは、画面右上のアイコン右横のセレクトボックスから、「End Impersonation」を押下
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/60ec4359-5f94-a474-9988-1d4fb3dcbd7c.png)

# 注意点
- 監査ログに記録される
    - なりすまし操作は監査ログ（Audit Logs）に記録されるため、誰がいつどのユーザーになりすましたかが追跡可能
- パスワード変更はできない
    - Impersonate Userを利用しても、そのユーザーのパスワード変更やセキュリティ設定の変更はできない
Data Stream での取り込みエラーと更新失敗

[Data Cloudのまとめに戻る](https://qiita.com/Keiji_otsubo/items/ce366c02186b6bb5b39b)

---------------

+ [【ヘルプ】取り込みエラーと更新失敗](https://help.salesforce.com/s/articleView?id=sf.c360_a_refresh_history.htm&type=5)

  + Salesforce CRM データストリームは、項目権限とオブジェクト権限が欠けているために失敗する可能性があります。エラーをダウンロードするには、データストリームの [更新履歴] タブに移動してエラーをクリックし、エラーメッセージファイルをダウンロードします。

+ [1 つのオブジェクトのレコードをインポートする権限がありません。Salesforce 管理者に問い合わせて、次のオブジェクトを使用できるようにしてください。 Knowledge__kav 1 フィールドが使用できません: ArticleMasterLanguage](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ig6E8)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/f7bfb8ff-b9cf-426c-85f5-d046014e8715.png)



### エラーメッセージは以下の方法でダウンロードできる？

+ [【ヘルプ】データ クラウド: オブジェクト フィールド/オブジェクト エラーの欠落による Salesforce CRM コネクタ エラー](https://help.salesforce.com/s/articleView?id=000395797&type=1)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/eae6a80c-dcba-2715-97fd-2148cda8d092.png)

### エラーになったレコードにアクセスするには？

+ [【ヘルプ】Monitoring Data Stream Problem Records](https://help.salesforce.com/s/articleView?id=data.c360_a_datastream_dlo_problem_record.htm&type=5)

# 関連する質問

+ [How to access Data Stream Refresh History Error Message](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000Kgm31)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/1555443b-9a2a-7360-6671-ac4d52728fd2.png)

+ [Error: While ingest Files from Salesforce Objects to Data Cloud](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000MYRHY0A5)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/0d12a1e8-79a1-4316-8d61-7cccf6d2b2be.png)

:::note
Even I got the error as above and I followed the below steps which resolved it. 

+ Setup | Permission Sets | Data Cloud Salesforce Connector | App Permissions | Enable "Query Non Vetoed Files"
+ Setup | Permission Sets | Data Cloud Salesforce Connector | App Permissions | Enable "Allow View Knowledge"
+ Setup | Salesforce Files | General Settings | Salesforce Files Settings | Ensure "Enable Files to be ingested into Data Cloud" is selected
+ Setup | Installed Packages | Salesforce Standard Data Model | Ensure SSOT package version is 1.68 or higher.
:::



# 数式

+ [Trailhead プレイグラウンドでの作業 - 事前設定された Salesforce CRM などの Trailhead データ ソースを使用すると、DLO に数式フィールドを作成するオプションが表示されます。しかし、csv からデータ ストリームと DLO を作成すると、数式フィールドを追加するオプションが表示されなくなります。なぜでしょうか。    ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000PXIbn)

:::note
この制限により、数式フィールドを追加できないと思われます。 


データ ストリームの更新が利用できません
ローカル ファイルから作成されたデータ ストリームは更新できません。 

https://help.salesforce.com/s/articleView?id=data.c360_a_upload_csv_file_limitations.htm&type=5
:::
プロファイルを作成して複数のセッションで操作する：Chrome小技

# 目的
複数のアカウントで操作する

# 使用例
- 管理者と外部ユーザーなど、複数のアカウントで操作したいとき
- 情シスの業務でアカウントを作成するとき

# 操作方法
- Chromeの場合、右上のプロフィールボタンを押下
- 新しいプロファイルを追加
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/bc05e8be-a175-416a-abd7-6e6e3df4ce8a.png)
- アカウントなしで続行を押下
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/6c0b43e0-8392-0d9b-1dd3-d6c8da1358de.png)
- Chromeのホーム画面に遷移
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624279/08dd487e-f436-3790-09e5-cf3e96fa4e78.png)
- ここから任意のURLを叩くと、セッションが切れているので、ログインしてみてください

# 補足
- シークレットモードではだめか？
- シークレットモードでも別セッションに切り替わるが、以下の場合は新しいプロファイルを作成するほうがよい
    - 同じセッションを利用する場合
    - 同じ複数のサイトを開く場合
- 理由
    - 以下の機能がプロファイルごとに使用できるため
    - ブックマーク機能：毎回開くサイトをブックマークバーに保存しておくことが可能
    - Googleパスワードマネージャー：同じセッションにログインする場合、毎回パスワードを入力しなくてよい