OmniAICreator/Qiita-1.07M huggingface dataset:
自己紹介とPCの選択

# あいさつ

始めまして！ hotate_2235です！
普段は生物系の研究室で研究をしている修士２年です。
現在はLLMとかの情報収集をしつつ暮らしています。

今回、新しいPCを買ったので、それに合わせて環境構築の話などをいろいろしたいなと思ってアカウントを作りました。
まずは、購入したPCについての話をしていきます。

## 新しいＰＣ
大学入学と同時に購入したＰＣをずっと使っていたんですが、バッテリーが限界になったので、新しいＰＣを買いました。
その際に考えていたことなどについてまとめておきます。
# 前世代のPC
大学入学と同時に購入したパソコンは以下の通りです

macbook air(2018)
cpu : intel core i5 8210Y(2コア)
RAM : LPDDR3 8GB
SSD : 256 GB

選択理由：大学生協で扱ってたから

よかった点
キーボードとかが打ちやすい(特に、英数字と日本語切り替えボタンがあってやりやすい)

悪かった点
OSがwindowsじゃない
端子がusb-c二つしかない(+イヤホンジャック)
(FMA3?に対応してないせいでPytorchが入らない)

反省点
もっとコスパのいいやつを買えばよかった(HP envyなど)
PC知識がもっとあればよかった

以上の点を踏まえて、次世代のPCを探していました。

# いいPCを探して
2022年ごろからいいものを探し始め、候補としては

cpu : ryzen7 6800U/7840U/8840U
RAM : 16GB~
SSD : 512GB~
display : 1920*1200以上、300nit以上
値段 : ~15万円
バッテリー : 多め(少なくとも50Wh以上)

を見積もっていました。
理由としては、6800U以降からグラフィック性能が上がり、ちょっとゲームできる、みたいなものが欲しかったというのが大きかったです。
加えて、最低限メモリ16ストレージ512は必須だと思ってました。(現状256でかなり怪しかったので)
ディスプレイに関しては、300 nitあれば最低限何とかなるというのを見たので、それを参考にしました。

まとめると、ある程度の内臓グラフィック性能を持ちつつ、ある程度のストレージとメモリを持ちつつ、ディスプレイもある程度ある、というのを探してました。
候補としては、例えばZenbookS13 OLEDやHP Pavilion-Aero(be)なども近かったが、値段やバッテリーで違うなとなった。
(Aeroのほうは友人が買って毎日ストファイしてる。楽しそう。)

# ゴール
最終的には以下を購入した
ASUS Zenbook 14 OLED (UX3405)
cpu : intel core ultra5 125H
RAM : 16GB LPDDR5X
SSD : 512 GB(2TBに換装)
display : 1920*1200, 600nit(OLED)

選択理由
１，cpu
 LP-E coreのおかげで、ryzenのものよりバッテリー駆動時間がかなり長くなっているという情報を得たから
２，display
もともと使ってたmacがかなり明るいdisplayだったので、それに近しいものを選びたかった
３，値段
１４万以下で安かった(Lenovoはキートップの形が好きじゃないのでなし)
４，ASUSあんしん保証
無料登録によって、理由を問わない故障でも保証がきくとのことだったので、cpuとかのスペックはそこまで必要ないけどストレージは大きくしたい、という欲求をローリスクで満たせるから
(ssdはKIOXIAのEXERIA Plus G3 2TBにした。パソコン工房で精密ドライバーとUSBメモリと合わせて2万くらい。安かった。)

よかった点
スペックが高い(軽いゲームもできる)
バッテリーもちが割といい感じ (バッテリー自体も大きいのが効いてる)
ストレージ交換でほしいスペックにできた。 (2TBがデフォなPCはほぼないし、自分でカスタマイズできると安くてよき)

悪かった点
ショートカットがmacと違いすぎる (5年も別OS使ってたらそりゃそっちに慣れる)
RAMが足りなかった (windowsがデフォで7GB近く持ってくのは想定外)
パソコン表面に汗などのよごれがついたときにめっちゃ目立つ (樹のシートなるものを貼ったり、PC shieldなるコーティングを塗ったりした)

## まとめと留意事項
PC選び、本当に情報が多すぎて大変！！！
ただいろいろ調べて少し詳しくなったので、次回以降はより満足度の高いものを選べるはず
(買い換えた直後にcopilot+PCとか言い始められて泣いた snapdragon X EliteだのLunar LakeだのStrix pointだのじゃないと対応しないらしいので、悲しいねって感じ)

留意事項
購入直後は発熱がやばかったが、プロセッサの電源管理から、最大のプロセッサ状態を100から99に変更したことでましになった。
windowsのOS内部にある、one driveというフォルダは、デフォでデスクトップとかピクチャとかの親フォルダになっているので、それを消すとかなりのものがバグって泣きを見るはめになる。(windowsに紐づいたMSアカウントのドライブにデータがあったので、そこから回収して何とかなった)
エンジニア1年目の議事録作成のコツ

# はじめに
私はエンジニアとして働き始めてから約半年で上流工程の議事録作成の業務を任されました。その時過去に経験してきたこと役に立ったので、どのようにすれば議事録を円滑に作成できるのか共有したいと思います。

主観が入っているので、あくまで参考程度にしてください。

# 議事録とは
議事録とは簡単に言うと「**会議の内容を要約する**」ということです。会議進んだ内容、とくに「**期限・期間・責任範疇**」の3点が議事録には大事な要素だと私は考えています。

# 議事録作成のコツ
ここからは私が思う議事録作成のコツは主に2点あります。ひとつは「挑戦してみること」、もうひとつは「要約できるようになること」です。


注意していただきたいのは、2つ目の「大事なことをメモできるようになること」には大変な時間がかかります。私の経験でいうと200時間くらいかかったと思います。焦らず身に着けていきましょう。

## 挑戦してみること
まずは会議前に資料をサラッと呼んできましょう。内容を把握した後は、会議に参加してとにかく**どんなことでもメモするような勢い**で議事録を作成しましょう。この時議事録を作成するツールについては、上司や上長に判断を仰いでから、自分がすばやく作成できるツールを選定して作成しましょう。議事録を作成したら上司や上長にフィードバックをもらってください。ダメ出しをされてしまうと思うので、何がダメなのかをうかがってからメモして、再び修正してからOKをもらうまでは提出し続けてください。

このときモチベーションを落とさないように「**最初から完璧なものは作れないと認識すること**」と、「**上司や冗長に迷惑をかけると思わず、積極的にコミュニケーションをとること**」を意識してください。

## 要約できるようになること
まずは大事なことをメモできるように、会議の内容に注目しましょう。私はとくに「**どのような議題を進めているのか**」、「**いつまでにやらなければいけないのか**」、「**いつからいつまで行うのか**」、「**この責任はだれが持つのか**」に気を付けてメモするようにしています。

私は次に会議が終了した後に、内容をまとめる時間を作ってメモした内容から要約文を議事録として作成します。要約文を作成する理由としては**役員や幹部の人たちが一目で内容を見て把握できるようにするためです**。

これは実体験ですが、要件定義をしてからしばらく時間がたってしまうと、認識が変わってしまう恐れがあります。そんな時に議事録の要約された内容があれば円滑にかつ炎上せずにことを回避することができます。なので、内容をまとめる時間をしっかり確保して作成しておきましょう。

# 議事録ができるとほかのことにも役立つ
議事録がうまく作成できるようになると役に立つことがあります。私は2点あって、ひとつは「**報連相のときに利用できる**」、もうひとつは「議事録を通して**会議の主催者にフィードバックができる**」ことです。

## 報連相のときに利用できる
意識しながら議事録を作成していくと「ロジカルシンキング」と「クリティカルシンキング」の力を意図せず身に着けていけると思います。ロジカルシンキングとはいわゆる「**考える力**」です。クリティカルシンキングはいわゆる「**いろんな意見を参考に自分の客観的な意見述べる力**」です。報連相は短時間で分かりやすく説明する必要があるので、この2つの力は役立ちます。

## 会議の主催者にフィードバック
意識しながら議事録を作成していくと、大事なことをメモできるようになるので会議へのフィードバックもできます。とくに会議ではいかに密度が濃くて有意義な会議を進められるかによって、要件定義の期間や完成度が全く別物なくらい変わってきます。


もし1つの会議で大事な内容があまりにも少ないと時間を無駄に消費してだけになってしまいます。その時にダメ出しをすることで、次回どのように会議を進めていけばよいのかとかのコミュニケーションの活性化にもつながると思います。

# どのように身につければいいのか
ここまで議事録作成のコツについては解説してきましたが、わからないこともあると思います。そこでこの章から私が行ってきた勉強方法について共有したいと思います。私が行ってきたことは主に5つあります。

- **国語のセンター試験の過去問で要約力を身に着ける**
- **読書してメモする癖をつける**
- **日記を書く**
- **メモをまとめるノートを作成する** 
- **AIにフィードバックをもらう**

## 国語のセンター試験の過去問で要約力を身に着ける
国語のセンター試験は要約された文章を見つけられるかどうかという力を鍛えられます。特に現代文と小説は要約や人の気持ちをどのように言い換えられているのかというのが問題で出されているので鍛えられると思います。私は社会人になる前取り組む機会が何度もあったので、鍛えられました。

## 読書をしてメモする癖をつける
まずは読書をする機会を増やしましょう。私はライトノベルが好きでそこからいろいろなジャンルの本を読むようになりましたが、ページが薄い簡単な本から読み進めていって、だんだん読めるようになってきたら次はメモをする。のように段階を踏んで行っていくのがよいでしょう。最近では、思考力を身に着けるための本もたくさん出版されているので、それの一章くらいをしっかりと読み込んで太文字部分をメモすることもおすすめです。

## 日記を書く
一日にあったことをできるだけメモすることも、議事録を作成するうえでは役に立つと思います。特に話のペースが速くてメモできない状況などが続いた場合、素早くメモを取ることももちろんですが、記憶をたどって思い出してメモすることも思考力を鍛えられます。

## メモをまとめるノート作成
メモができてもそこから情報がうまく抜き出せないと意味がないです。思考力を鍛えるためにメモの中から大事そうなものを抜き出してまとめる力を身に着けましょう

## AIにフィードバックをもらう
私もよく利用していますが、自分のメモした内容から要約文を作って、そのあとに自分の要約と比較するというのも思考力を鍛えるにはうってつけの方法です。AIと対話形式で勉強していけるのですごくおすすめです。

# 時間がなければAIに議事録を書いてもらうのもアリ
最近では、Web会議にAIを参加させて要約文を作成してもらえるようなサービスや、会議を録画してその内容を要約してくれるようなサービスが、クラウドファンディング形式などで発達してきました。お金はかかってしまいますが、時間を重視したいような人にとっては非常に便利なツールかもしれません。
Kintoneで開始日・終了日から月数を基本機能だけで計算したい

KintoneでDatedifみたいな日付計算がしたい！でも日付計算のためだけに有料プラグインの導入は無理！という方のためにKintoneの基本機能のみで開始日から終了日までの月数を計算する方法をご紹介します。

### 使用例
営業部が分析のために月額固定費を請求する商品の開始日から終了日までの総月数を知りたい。

### 条件
2024/6/1～2024/6/15 は1カ月と計算する（日割り計算なし）
2024/6/1～2024/7/1 は2か月と計算する（翌月を跨げば自動的に+1か月とする）
2024/6/1～2025/5/31 は12か月と計算する
2024/6/1～2025/6/1 は13カ月と計算する

### Kintone画面
![2024-06-03 10_24_44-アプリの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283701/fd23324a-d170-8806-c510-e3f946f18c61.png)
※フィールド名とフィールドコードは同じとします
※(1)(2)(3)(4)は完全に計算用なので、できれば非表示したいですね。（基本機能には、非表示機能はないです。たぶんCSSを使えばできるのかな？まだ試していないです）

(1) YEAR開始日
```Kintone計算式
DATE_FORMAT(開始日,"YYYY","Etc/GMT")
```
![2024-06-03 10_30_18-アプリの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283701/d0088fa2-bc92-bde3-f643-b5b7de825ff5.png)

(2) YEAR終了日
```Kintone計算式
DATE_FORMAT(終了日,"YYYY","Etc/GMT")
```

(3) MONTH開始日
```Kintone計算式
DATE_FORMAT(開始日, "M", "Asia/Tokyo")
```

(4) MONTH終了日
```Kintone計算式
DATE_FORMAT(終了日, "M", "Asia/Tokyo")
```

(4) 経過月数計算
```Kintone計算式
IF(YEAR開始日*12+MONTH開始日 <= YEAR終了日*12 +MONTH終了日, (YEAR終了日-YEAR開始日)*12+MONTH終了日-MONTH開始日+1,(YEAR開始日-YEAR終了日)*12+MONTH開始日-MONTH終了日+1)
```
![2024-06-03 10_32_31-アプリの設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283701/1f986585-1531-50b4-dc74-704937e7161a.png)

### 完成！　試してみます
![2024-06-03 10_40_45-テストサンドボックス - 新しいレコード.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/283701/84dfb537-bfbf-ae5e-522d-d99195a1f8a6.png)

### ChatGPT様様です。
計算は大の苦手のため、途方に暮れていたのですがChatGPTに相談したらすぐにアイディアを出してくれました。まだそこまで使い込んでいませんので、もしかしますと計算がうまくいかないパターンがあるかもしれませんが、ご参考になれば幸いです。
Windowsのコマンドプロンプトでメモリーの詳細情報を取得

# 概要

余計なソフトを実行したくないし、端末のケースを直接開いたりもしたくない。
Windows標準機能でメモリーの詳細情報を取得したい。

# やり方

```bat:
wmic memorychip
```

# 参考サイトさん

https://www.pckujira.jp/blog/blog/content/7883/#:~:text=Windows%E3%81%AB%E3%81%AF%E3%80%8Cwmic%20memorychip,%E6%83%85%E5%A0%B1%E3%81%8C%E5%87%BA%E3%81%A6%E3%81%8D%E3%81%BE%E3%81%99%E3%80%82

# バージョン

Microsoft Windows [Version 10.0.22631.3672]
Power Automateを活用、メール->Slack->スマートウォッチでメール概要をリアルタイムで把握

# 目的
業務メールが届いた際に、わざわざメールを開かないでも誰からどんなタイトルのメールが届いているかをリアルタイムで把握したい。

# 理由
昔は常にクライアント版Outlook開いていたが、Slackでの連絡が基本になってからは必要なときだけWeb版を開く様になった。
そうした所、リアルタイムでメールに気がつけなくなった。
できればSlackに通知を集約し、わざわざメーラーを常に見張らなくても良いようにしたく代替策を検討。
企業情報のため個人の携帯端末にメール通知や転送はできないため、リアルタイムで知るすべを考えた。

# どのように行うか？
* Power Automateでメールを検知、イベントをSlackへ投稿
* スマートフォンでSlack通知を受け取る
* （あればなお良い）スマートウォッチで

# 必要なもの
* Power Automateが使えるアカウント
* Slackアカウント
* メールアカウント
* スマートフォン
* （あればなお良い）スマートウォッチ

# 事前準備
* SlackとPower Automateの連携設定
* Slackにメール通知を飛ばす鍵付き専用チャンネルを用意
* スマートフォンやスマートウォッチでSlack通知を受け取れるようにしておく

# フロー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144307/3c707508-63b2-5df4-8c81-19feca2dcaac.png)

1. 新規メール通知のアクションを配置（画像はOutlookですが、他のメールでも問題なし）
1. Slackのメッセージ通知アクションで、事前に用意したチャンネルへ差出人と件名を通知（Outlookではプレビューという機能もあるので合わせて通知）

# 結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/144307/67eba1b9-a537-578a-6368-bed555ca6c22.png)

# 注意点
メールが多い人は軒並み通知が届いてしまうので、フォルダ分けするか、条件を特定して通知のような対応が必要
Railsであれば便利なコマンドTips

## 環境
Ubuntu20.4
Rails 5.2

## はじめに
railsコマンドのオプションには用意されていないが、あれば便利なコマンドを作成してみました。

## 内容

#### その１

schema.rbの中から、テーブルの一覧を抽出するコマンドです。
app/modelsの配下のファイル一覧を参照してもいいでしょうけど・・・。

```
$cat ./db/schema.rb | grep create_table | awk '{print $2}' | tr -d [,\"] | nl
```

このようなイメージの表示となります。

```結果.rb
 1  table_aaaaa
 2  table_bbbbb
 3  table_ccccc
 4  table_ddddd
 ```

#### その２

マイグレーションファイルの日付と時間を見やすく成形して表示するコマンドです。

```
$ls -l ./db/migrate/ | awk '{print $8}' | sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})_(.*)/\1-\2-\3-\4:\5:\6 \7/'
```

このようなイメージの表示となります。

```結果.rb
# Before
20220809075253 create_table_aaaaa.rb
20220809075456 add_column_table_aaaaa.rb
20220809075812 change_column_table_aaaaa.rb
20220809082542 create_table_bbbbb.rb
20220809082619 add_column_table_bbbbb.rb
20220809082631 change_column_table_bbbbb.rb

# After
2022-08-09 07:52:53 create_table_aaaaa.rb
2022-08-09 07:54:56 add_column_table_aaaaa.rb
2022-08-09 07:58:12 change_column_table_aaaaa.rb
2022-08-09 08:25:42 create_table_bbbbb.rb
2022-08-09 08:26:19 add_column_table_bbbbb.rb
2022-08-09 08:26:31 change_column_table_bbbbb.rb
```

#### その３

このようなやり方もあります。マイグレーションファイルがupされていることが前提となっています。

```
$rails db:migrate:status | sed 's/up     \([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1-\2-\3 \4:\5:\6/'
```

このようなイメージの表示となります。

```結果.rb
#Befor
up    20220809075253 Create table aaaaa
up    20220809075456 Add column table aaaaa
up    20220809075812 Change column table aaaaa
up    20220809082542 Create table bbbbb
up    20220809082619 Add column table bbbbb
up    20220809082631 Change column table bbbbb

# After
2022-08-09 07:52:53 Create table aaaaa
2022-08-09 07:54:56 Add column table aaaaa
2022-08-09 07:58:12 Change column table aaaaa
2022-08-09 08:25:42 Create table bbbbb
2022-08-09 08:26:19 Add column table bbbbb
2022-08-09 08:26:31 Change column table bbbbb
```

#### その４（補足）

ちょっとしたテクニックとなります。Railsを動かしている最中に、rails cでデータベースの中身を確認したり、rails routes でルートが正しく設定されているか、確認する場合があるかと思います。そんなときは、Railsを始めからバックグラウンドで実行させておくと、Railsをいちいち停止させることなく、フォアグランドでコマンドを実行することができます。

バックグラウンドで実行させるには、コマンドの後ろに&を１つつけるだけです。

```
$rails s &
```
enumerize が適用されているカラムに定義外の値が入るとデフォルト値固定になる

以下のように定義されている場合に

```ruby
class User
  enumerize :status, in: {
    authorized: 1,
    invalid: 2,
  }, default: :authorized, scope: true
end
```

以下のようにレコードを登録してみる。

```
+-----+--------+
| id  | status |
+-----+--------+
|   1 |     99 |
+-----+--------+
```

このレコードを ActiveRecord を通して取得してみると

```ruby
pry(main)> User.find(id: 1).status
=> "authorized"
```

`authorized` として取得される。元の値を取得しようとしても

```ruby
pry(main)> User.find(id: 1).status_before_type_cast
=> 1
```

と `authorized` の値になっている。デフォルトが `authorized` で指定されているためで `default` 指定をなくせば `nil` になる。

通常はこのような値が入ることはないが、１つの DB に対し複数のシステムから接続するとたまに規定外の値が入ることがあるため調査。


<!--
---

該当コード


```ruby:enumerize-2.4.0/lib/enumerize/value.rb
# frozen_string_literal: true

require 'i18n'
require 'active_support/inflector'

module Enumerize
  class Value < String
    include Predicatable

    attr_reader :value

    def initialize(attr, name, value=nil)
      if self.class.method_defined?("#{name}?")
        warn("It's not recommended to use `#{name}` as a field value since `#{name}?` is defined. (#{attr.klass.name}##{attr.name})")
      end

      @attr  = attr
      @value = value.nil? ? name.to_s : value

      super(name.to_s)

      @i18n_keys = @attr.i18n_scopes.map { |s| :"#{s}.#{self}" }
      @i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}"
      @i18n_keys << :"enumerize.#{@attr.name}.#{self}"
      @i18n_keys << ActiveSupport::Inflector.humanize(ActiveSupport::Inflector.underscore(self)) # humanize value if there are no translations
      @i18n_keys
    end

    def text
      I18n.t(@i18n_keys[0], :default => @i18n_keys[1..-1]) if @i18n_keys
    end

    def ==(other)
      super(other.to_s) || value == other
    end

    def encode_with(coder)
      coder.represent_object(self.class.superclass, @value)
    end

    private

    def predicate_call(value)
      value == self
    end
  end
end
```


```ruby:enumerize-2.4.0/lib/enumerize/predicatable.rb
# frozen_string_literal: true

module Enumerize
  module Predicatable
    def respond_to_missing?(method, include_private=false)
      predicate_method?(method) || super
    end

    private

    def method_missing(method, *args, &block)
      if predicate_method?(method)
        predicate_call(method[0..-2], *args, &block)
      else
        super
      end
    end

    def predicate_method?(method)
      method[-1] == '?' && @attr && @attr.values.include?(method[0..-2])
    end
  end
end

```
-->
既存のDataFrameを加工したデータをDataFrameに追加


## はじめに
既存のDataFrameを加工したデータをDataFrameに追加 に関しての備忘録。

## 🦁<INS>**結論**</INS>🦁
既存のDataFrameを加工したデータをDataFrameに追加する場合には加工したデータをDataFrameに置換してから使う方が良い。

元データをそのまま保存できるなどの理由からDataFrame同士の結合の方が良い。

:::note info
押さえておくべき点
* appendメソッドにて既存のDataFrameに別のDataFrameを追加する。
* concatメソッドにて複数のDataFrameできる。
* 新しいデータのインデックスが重複しないようにする必要がある。
:::  
***

:::note warn
利用シーン
*  データの集計: 月ごとのデータを年度ごとのDataFrameに追加。
:::  
***

:::note alert
注意点
*  大量のデータを追加する場合、処理時間が長くなることがある
* インデックスが重複するとデータの整合性が崩れる。
* 追加するデータの型が一致しているか確認する必要あり。
* appendは新しいDataFrameを返すため、元のDataFrameは変更されない。
:::  

## <INS>**DataFrameに追記する例**</INS>

```py
import pandas as pd

# 基本のDataFrameを作成
data = {'名前': ['Alice', 'Bob']}
df = pd.DataFrame(data)
print("基本のDataFrame:")
print(df)

# 名前に「さん」を追記した新しいDataFrameを作成
new_data = df['名前'].apply(lambda name: name + 'さん')
new_df = pd.DataFrame({'名前': new_data})
print("\n名前に「さん」を追記した新しいDataFrame:")
print(new_df)

# 元のDataFrameに新しいDataFrameを追記
df_combined = pd.concat([df, new_df], ignore_index=True)
print("\n元のDataFrameに新しいDataFrameを追記した結果:")
print(df_combined)
```

## まとめ✍️
DataFrameの元データを加工して使用する場合には処理を加えた後にDataFrameに変換してから結合する方が良さそう。
元データを残すことで再利用性も高くなる。
Qiita GA4でユーザートラッキングを行う

## 概要

下記の記事を参考にQiitaの情報をGA4で取れるようにしてみたので簡単にメモする。

https://help.qiita.com/ja/articles/qiita-google-analytics

## 前提

すでにGAのアカウント作成が完了していること。

## 方法

1. GA4の画面を開く
1. 左下の歯車マークをクリックする

    ![CleanShot 2024-06-03 at 09.52.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/06c5b24b-2162-a8fb-d5e3-28c1c70eabc5.png)

1. 「作成」をクリックし、「プロパティ」をクリックする

    ![CleanShot 2024-06-03 at 09.53.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/985412cb-7552-04e6-8492-1082bdd31176.png)

1. 下記のように設定する
    - プロパティ名：任意の文字列
    - タイムゾーンの国：日本
    - 通過：日本円

    ![CleanShot 2024-06-03 at 09.54.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/ced8c194-da81-d641-0f6d-983b01d47a43.png)


1. 次画面で下記のように設定する
    - 業種：任意の内容（筆者はその他を選択）
    - ビジネスの規模：任意の内容（筆者は小規模を選択）
1. ビジネス目標は「ユーザーの行動の調査」を選択
1. プラットフォームの選択は「ウェブ」を選択
1. データストリームの設定画面で下記の様に設定
    - ウェブサイトの URL: qiita.com
    - ストリーム名: (任意の名前)
1. ウェブストリームの詳細で「測定ID」をコピー

    ![CleanShot 2024-06-03 at 09.58.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/b51a6ccd-a018-18aa-e984-8ead00bd66fc.png)

1. Qiitaで設定をひらき、サイドバーの「Googleアナリティクス設定」をクリック
1. コピーした「測定ID」を貼り付けて保存

あとはGA4の方でリアルタイム計測で、自身のQiitaの記事などにアクセスし、カウントされることが確認できれば疎通確認完了
【Oracle】全テーブルから任意の文字列を部分一致で検索する

# はじめに

この前 `Oracle DB` のテーブル内から特定の文字列を探し出さなきゃいけなかったことがあり、対象のテーブルとカラムを探し出す `PL/SQL` 作って実行しました。

# 実行環境
- Oracle：19c Standard Edition 2 Release 19.0.0.0.0
- DBeaver：24.0.5.202405191503

# 特定の文字列を横断検索するPL/SQL

`hoge` をいれかえたら検索できます。

```plsql:OracleDB内の全テーブル/カラムから'hoge'を探すPL/SQL
SET SERVEROUTPUT ON SIZE 1000000;
DECLARE
  match_count INTEGER;
  v_search_string VARCHAR2(255) := 'hoge';
BEGIN
  FOR t IN (SELECT atc.owner, atc.table_name, atc.column_name 
            FROM all_tab_columns atc
            JOIN all_tables at ON atc.table_name = at.table_name AND atc.owner = at.owner
            WHERE atc.data_type LIKE '%CHAR%') LOOP
    BEGIN
      EXECUTE IMMEDIATE
        'SELECT COUNT(*) FROM "' || t.owner || '"."' || t.table_name ||
        '" WHERE "' || t.column_name || '" LIKE :1' INTO match_count
        USING '%' || v_search_string || '%';
      IF match_count > 0 THEN
        dbms_output.put_line('Table: ' || t.table_name || ', Column: ' || t.column_name || ', Matches: ' || TO_CHAR(match_count));
      END IF;
    EXCEPTION
      WHEN OTHERS THEN
        dbms_output.put_line('Error occurred > Table: ' || t.table_name || ', Column: ' || t.column_name || ' - ' || SQLERRM);
    END;
  END LOOP;
END;
```

# 実行結果

んへぇーすげー！

```terminal
Table: HOGE_TBL, Column: HOGE_VALUE, Matches: 1
Error occurred > Table: FUGA, Column: FUGA - ORA-XXXXX: エラーメッセージ
Error occurred > Table: PIYO, Column: PIYO - ORA-XXXXX: エラーメッセージ
Table: HOGE_REQUEST, Column: HOGE_URL, Matches: 4140
Table: HOGE_EMP, Column: NAME, Matches: 5
```

# 注意点

- DBの中身が宇宙（巨大の意）すぎて実行に1時間かかりました
- ビュー / マテリアライズド・ビューは検索対象外にしています

# 参考

https://forums.oracle.com/ords/apexds/post/jykscs-4062

https://docs.oracle.com/cd/E16338_01/server.112/b56311/statviews_2117.htm
SAP S/4HANA cloud public editionの特徴

## はじめに

SAP S/4HANA cloud public edition(以降 SAP public cloud)は、SAPのERPソフトウェアであるSAP S/4HANAのクラウドベースバージョンです。
SAPの基幹業務プロセスをリアルタイムで管理するための、拡張性と柔軟性に優れたユーザーフレンドリーなソリューションを企業に提供するために設計されています。
本ブログでは、SAP public cloudの特徴を説明することで、ブログをご覧の方にSAP public cloud導入時のご参考にしてもらえたらと思います。


## 特徴

①SAP社の長年の経験の積み重ねが集約されたシステム
SAP社のERPのパッケージを導入してきた会社は、国内だけでも2000社前後(※1)あると言われています。
また、SAP public cloudは、SAP社が力を入れて開発していくと明言しているシステムになります。(※2)
そのため、SAP社が最適であると想定した実績を元に提示しているのがSAP public cloudと言えます。

※1：<a href= "https://active.nikkeibp.co.jp/atclact/active/17/040600264/040900001/" target="_blank" >2025年問題、SAPユーザー2000社に迫る｜日経クロステック Active</a>

※2：<a href= "https://ascii.jp/elem/000/004/107/4107984/" target="_blank" >SAP「今後はパブリッククラウド版のS/4HANAが第一の選択肢」</a>




②既にシステムが存在
システムが既に存在しているため、机上の話ではなく、実際にシステムを操作して、何ができるのかを確認できます。
もちろん、システムが想定する業務フローも存在しています。
システムを導入する上で業務を考えることは、時間がかかりますが、システムが提案する業務フローに委ねることで検討する工数を削減できます。
また、SaaSでのサービス提供のため、サーバ費用が含まれており、サービス開始までの時間が短縮できます。
導入後もセキュリティパッチの反映等をSAP社に任せられるため、維持にかかる費用も削減できます。
このことにより、Total Cost of Ownership(TCO)削減につながります。
※TCO：システムにおける初期費用と維持・管理に関わるすべてのランニングコストの総額。





③社会の変化に追随
システム導入をした段階が最高到達点ではなく、今後のSAP public cloudの更新を適用して、システムが進化することをコンセプトとしております。
※各国毎の法律変更等にも随時更新することで、対応しています。



## まとめ


ここまで、SAP public cloudの特徴を一部ではありますが、記載いたしました。
特徴(メリットと言い換えてもいいかもしれません。)を享受するためには、Fit to Standard(F2S)の考え方を全うする必要があります。
※Fit to Standard(F2S)：SAP public cloudの標準機能を生かし、システムで提示されている業務に合わせるERPの導入方法です。

ですが、経営層が参照したい情報を出力する見える化や、別システムへの連携等、SAP社から業務フローをバリエーションも多く提供いただいているものの、標準機能だけでは、対応できない部分もあるかと思います。
その場合は、追加開発で補うことができます。
今までの業務フロー検討にかけていたコストを参照系を充実させることに使うことで、経営層がリアルタイム情報を参照し、現在の経営情報を判断する指針にすることも可能です。
弊社は、BTP(SAP Business Technology Platform)での開発に知見があるため、上記で記載したような機能を補うことができます。
今後は、こちらのBTPを使用して、何ができるのかをブログとして挙げていきたいと思いますので、ご参考になればと思います。


## おわりに



ERPパッケージの導入といえば、会社の重要な転換期になります。
そこで、現行の業務内容に合わせたシステムの導入では、会社は、今までと変わりません。
そのため、Fit to Standardの導入手法を使い、業務をシステムが提案した内容に合わせることで、コストを削減しつつ、最新の業務を行えるシステムの導入を検討してはいかがでしょうか？
自然言語処理のための事前準備（Windows）

# 投稿の背景
「[つくりながら学ぶ！PyTorchによる発展ディープラーニング](https://www.amazon.co.jp/%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-PyTorch%E3%81%AB%E3%82%88%E3%82%8B%E7%99%BA%E5%B1%95%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%B0%8F%E5%B7%9D%E9%9B%84%E5%A4%AA%E9%83%8E/dp/4839970254)」を読んでいて、MeCabを用いた自然言語処理の話が出てきました。しかし、当該書籍は開発環境にLinuxを想定しており、Windows用のコマンドが記載されていなかったので、Windows, Pythonで動くMeCab, NEologdのインストール手順を書き残しておきます。

# MeCabインストール
[金子邦彦研究室のWebページ](https://www.kkaneko.jp/ai/win/mecabinst.html)に従ってインストールを進めてください。念のため、私が取り組んだ行動を記します。
- [MeCabのWebページ](http://taku910.github.io/mecab/)からmecab-xxx.exeをダウンロードし、実行してMeCabをインストールする（文字コードはUTF-8を選択した）
- Windowsのシステム環境変数に`c:\Program Files (x86)\Mecab\bin`を追加し、パスを通す

エディタの文字コードとMeCabの文字コードを合わせないと文字化けが起こるので要注意。今回はUTF-8で合わせてある。


# MeCabに辞書を追加する
[WindowsでNEologd辞書を比較的簡単に入れる方法ーユーザー辞書編](https://qiita.com/zincjp/items/c61c441426b9482b5a48)に従って作業を進めてください。念のため、私が取り組んだ行動を記します。

## 1
適当なディレクトリfooで以下のコマンドを実行する。そうすると、foo直下にmecab-ipadic-neologdフォルダが生成される。
```
$ git clone --depth 1 https://github.com/neologd/mecab-ipadic-neologd.git
```
## 2
[7zipのWebページ](https://7-zip.opensource.jp/)から7zipをダウンロードする。
Windowsのシステム環境変数に`C:\Program Files\7-Zip`を追加し、パスを通す。
以下のコマンドを実行する。
```
# .../seed
$ 7z X *.xz
```
## 3
以下のコマンドを実行する。そうすると、`c:\Program Files (x86)\MeCab\dic\ipadic`フォルダ直下にNEologd.20200910-u.dicファイルが生成される。文字コードはUTF-8で合わせる必要がある。「20200910」の部分は適宜変更。
```
# .../seed
$ mecab-dict-index -d "c:\Program Files (x86)\MeCab\dic\ipadic" -u NEologd.20200910-u.dic -f utf-8 -t utf-8 mecab-user-dict-seed.20200910.csv
```
## 4
`C:\Program Files (x86)\MeCab\dic\NEologd`フォルダを作成し、seedフォルダ直下にあるNEologd.20190128-u.dicファイルをNEologdフォルダ直下に移す。管理者権限が必要。
## 5
`C:\Program Files (x86)\MeCab\etc\mecabrc`ファイルに次の行を追加する。行頭に「;」が含まれるとコメントアウト扱いになる（？）ので注意する。これも管理者権限が必要。
```
dicdir =  $(rcpath)\..\dic\ipadic
userdic = C:\Program Files (x86)\MeCab\dic\NEologd\Neologd.20200910-u.dic
```

# 確認
まずは辞書を指定しないで実行する。
```python
import MeCab

m_t = MeCab.Tagger('-Ochasen')

text = '機械学習が好きです。'

print(m_t.parse(text))

# 機械	キカイ	機械	名詞-一般		
# 学習	ガクシュウ	学習	名詞-サ変接続		
# が	ガ	が	助詞-格助詞-一般		
# 好き	スキ	好き	名詞-形容動詞語幹		
# です	デス	です	助動詞	特殊・デス	基本形
# 。	。	。	記号-句点		
# EOS
```
次に、辞書NEologdを指定して実行する。
```python
import MeCab

m_t = MeCab.Tagger('-Ochasen -r "C:\Program Files (x86)\MeCab\etc\mecabrc"') # -d ではなく -r

text = '機械学習が好きです。'

print(m_t.parse(text))

# 機械学習	キカイガクシュウ	機械学習	名詞-固有名詞-一般		
# が	ガ	が	助詞-格助詞-一般		
# 好き	スキ	好き	名詞-形容動詞語幹		
# です	デス	です	助動詞	特殊・デス	基本形
# 。	。	。	記号-句点		
# EOS
```
辞書未指定だと機械学習という単語は「機械」「学習」と認識されてしまうが、辞書NEologdを指定すると「機械学習」という1つの単語として認識されている。

# 参考
- [つくりながら学ぶ！PyTorchによる発展ディープラーニング](https://www.amazon.co.jp/%E3%81%A4%E3%81%8F%E3%82%8A%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6-PyTorch%E3%81%AB%E3%82%88%E3%82%8B%E7%99%BA%E5%B1%95%E3%83%87%E3%82%A3%E3%83%BC%E3%83%97%E3%83%A9%E3%83%BC%E3%83%8B%E3%83%B3%E3%82%B0-%E5%B0%8F%E5%B7%9D%E9%9B%84%E5%A4%AA%E9%83%8E/dp/4839970254)（Amazonページにリンクしています）
- [金子邦彦研究室のWebページ](https://www.kkaneko.jp/ai/win/mecabinst.html)
- [WindowsでNEologd辞書を比較的簡単に入れる方法ーユーザー辞書編](https://qiita.com/zincjp/items/c61c441426b9482b5a48)
SAP Cloud Transport Managementを利用したiFlowの移送についての概要

# はじめに
今回SAP Integration Suiteで作成したiFlowを、SAP Cloud Transport Managementを利用してソース環境からターゲット環境へ移送しました。
その概要について、記載します。

# SAP Cloud Transport Managementとは
SAP Cloud Transport Management（cTMS）サービスとは、クラウドベースのソリューションで開発成果物やアプリケーション固有のコンテンツの移送を管理するサービスです。
SAP Cloud Transport Managementサービスを利用すると、異なる環境のアカウント間でソフトウェア成果物の管理が可能となり、アプリケーション成果物やそれぞれのアプリケーション固有のコンテンツをソースシステムからターゲットシステムに移送ができます。

# iFlowを移送するには
以下図のように設定を行うことで、SAP Integration Suiteで作成したiFlowをソース環境からターゲット環境へ移送することができるようになります。
設定用サブアカウントは、ソースまたはターゲット環境とまとめることも可能です。
また図ではソース環境からターゲット環境への移送のみとなっておりますが、接続設定を追加すれば
ソース環境→ターゲット環境（検証）→ターゲット環境（本番）
というようなスリーランドスケープでも移送が可能です。
※図の設定はCloud Foundry環境ベースのサブアカウントで行う必要があります。
![ctms01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/486466/d959b378-d7d0-b12d-a925-853799a1d34f.png)

# 実際に移送してみて
これまでiFlowを移送する場合は手動でエクスポート・インポートを行い、外部パラメータを再設定する必要があるなど、オペレーションミスが起こりやすい手順でした。
SAP Cloud Transport Managementサービスを利用すると設定が手間な部分もありますが、一度設定さえすれば外部パラメータなどの設定を引き継いだまま、容易かつ柔軟に移送が可能となります。

# 終わりに
SAP Cloud Transport Managementサービスを利用することで、容易なiFlowの移送が可能となりました。
実際の設定手順については、また機会があればまとめたいと思います。
【ruby初心者向け】基本的な名前の書き方を知りたい！

# 名前をつける時の命名規則ってどれ使うんだっけ？
rubyのプログラミングの勉強を始めたての方だと、変数名や関数名などの命名をどうすればいいか分からない...命名規則って何？？？って思う人が多いと思います。僕もそうでした。

プログラミングで使われる一般的な命名規則は5種類あります。
- スネークケース
　アンダーバーで小文字の単語を繋げる
　例：example_test
- スクリーミングスネークケース
　アンダーバーで大文字の単語を繋げる
　例：EXAMPLE_TEST
- キャメルケース
  - ローワーキャメルケース　（キャメルケース）
  　最初の単語の先頭を小文字に、2番目以降の単語の先頭を大文字にして繋げる
  　例：exampleTest
  - アッパーキャメルケース　（パスカルケース）
  　単語の先頭を大文字にして繋げる
  　例：ExampleTest
- ケバブケース（ハイフンで小文字の単語を繋げる）
　例：example-test

うーん、どれを使えばいいか分からん...
パッと見て、そう思った人がいるはず...
なので、場合ごとの命名方法を１分で分かるようにまとめてみました！
ぜひ活用してみてくださいね。

## ファイル名 ： スネークケース
```ruby
ruby_sample.rb
```
## ディレクトリ名 ： スネークケース
```ruby
ruby_sample/src/sample_calc.rb
```
## 変数名 : スネークケース
```ruby
sample_a = 0;
```
## メソッド名 : スネークケース
```ruby
def sample_puts
    puts 'hello!'
end
```ruby
## クラス名 : パスカルケース
```
class SamplePuts
    def sample_puts
        puts 'hello!'
    end
end
```
## モジュール名 : パスカルケース
```ruby
module SamplePuts
    def sample_puts
        puts 'hello!'
    end
end
```
## 定数名 ： スクリーミングスネークケース
```ruby
DEFAULT_SAMPLE = 0
```

## [Tips] 真偽値を返すメソッド ： メソッド名末尾に？をつける
```ruby
def is_str_sample?(s)
    s == 'sample'
end
```
## [Tips] 破壊的メソッド ： メソッド名末尾に!をつける
破壊的メソッドとは？　：　呼び出したオブジェクトの状態が変更されてしまうメソッド
```ruby
def str_upcase!(s)
    s.upcase!
end

a = 'sample'
#変数aの値も変更されてしまう
b = str_upcase!(a) #=> "SAMPLE"
a                  #=> "SAMPLE"
```

# まとめ
いかがでしょうか？
これで、どの場合にどの命名規則を使えばいいか迷うことはないはずです。
（※チームで開発している場合、プロジェクトのコード規約によって多少異なることがあるので、要確認！！）
忘れたとしてもこの記事を見れば大丈夫！
少しでもあなたの役に立てたのなら幸いです。
良いプログラミング生活を！！！

## 参考文献
[プロを目指す人のためのRuby入門［改訂2版］](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%82%92%E7%9B%AE%E6%8C%87%E3%81%99%E4%BA%BA%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AERuby%E5%85%A5%E9%96%80%EF%BC%BB%E6%94%B9%E8%A8%822%E7%89%88%EF%BC%BD-%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E3%81%8B%E3%82%89%E3%83%86%E3%82%B9%E3%83%88%E9%A7%86%E5%8B%95%E9%96%8B%E7%99%BA%E3%83%BB%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E6%8A%80%E6%B3%95%E3%81%BE%E3%81%A7-Software-Design-plus-%E4%BC%8A%E8%97%A4-ebook/dp/B09MPX7SMY?ref_=ast_author_mpb)
php7*  ->  php8* に上げた時の、urlencode 対策

## ■背景
・phpを7.* から 8.* にアップデートしたら、urlencode()関数がエラーになったので、自作関数を作成し、一括置換して対応。

## ■エラーメッセージ
#### ・Deprecated: urldecode(): Passing null to parameter #1 ($string) of type string is deprecated in C:\************* .php on line 9999 

![スクリーンショット (1169).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/9caa669a-0fdd-5e2a-1d2d-971a32124236.png)

## ■ 対応関数
```function.php

// === PHP 8 対応 urlencode()
function UrlEncode_Val_Check($data)
{
    if ($data != "") {
        $data_encode = urlencode($data);
        return $data_encode;
    } else {
        return $data = "";
    }
}

```
## ■ 使い方
urlencodeをUrlEncode_Val_Checkに置換するだけ

```index.php

    echo '<tr style="background: green;" data-href="./five.php?select_day=' . UrlEncode_Val_Check($select_day) .
                                            '&souko_code=' . UrlEncode_Val_Check($select_souko_code) .
                                            '&unsou_code=' . UrlEncode_Val_Check($select_unsou_code) .
                                            '&unsou_name=' . UrlEncode_Val_Check($Picking_VAL['Unsou_name']) .
                                            '&shipping_moto=' . UrlEncode_Val_Check($Picking_VAL['shipping_moto']) .
                                            '&shipping_moto_name=' . UrlEncode_Val_Check($Picking_VAL['shipping_moto_name']) .
                                            '&Shouhin_code=' . UrlEncode_Val_Check($Picking_VAL['Shouhin_code']) .
                                            '&Shouhin_name=' . UrlEncode_Val_Check($Picking_VAL['Shouhin_name']) .
                                            '&Shouhin_num=' . UrlEncode_Val_Check($Picking_VAL['Shouhin_num']) .
                                            '&Tokuisaki=' . UrlEncode_Val_Check($Tokuisaki_name) .
                                            '&tana_num=' . UrlEncode_Val_Check($Picking_VAL['Tana_num']) .
                                            '&case_num=' . UrlEncode_Val_Check($Case_num_View) .
                                            '&bara_num=' . UrlEncode_Val_Check($Bara_num_View) .
                                            '&shouhin_jan=' . UrlEncode_Val_Check($shouhin_JAN) .
                                            '&tokki_zikou=' . $Picking_VAL['tokki_zikou'] .
                                            '&Denpyou_SEQ=' . UrlEncode_Val_Check($Picking_VAL['Denpyou_SEQ']) . // 伝票 SEQ
                                            '&now_sql=' . $encoded_sql_one_tokki . '">';

```
cloudflared tunnel のログ出力オプション

cloudflared (Cloudflare Tunnel) には、サポート問い合わせ用途でログ出力オプションが用意されている。

[How do I contact support?](https://developers.cloudflare.com/cloudflare-one/faq/cloudflare-tunnels-faq/#how-do-i-contact-support)

## ログ関連のオプション

- 公式ドキュメント
	- [Tunnel run parameters · Cloudflare Zero Trust docs](https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/configure-tunnels/tunnel-run-parameters/#logfile)
- logfile とは別に log-directory オプションが利用できる
- 標準出力の抑止設定、ファイルサイズ指定などのオプションは現時点では用意されていない
	- [\[Feature Request\] Add a logsize argument · Issue \#518 · cloudflare/cloudflared](https://github.com/cloudflare/cloudflared/issues/518)

```
   --loglevel value                                    Application logging level {debug, info, warn, error, fatal}. At debug level cloudflared will log request URL, method, protocol, content length, as well as, all request and response headers. This can expose sensitive information in your logs. (default: "info") [$TUNNEL_LOGLEVEL]
   --transport-loglevel value, --proto-loglevel value  Transport logging level(previously called protocol logging level) {debug, info, warn, error, fatal} (default: "info") [$TUNNEL_PROTO_LOGLEVEL, $TUNNEL_TRANSPORT_LOGLEVEL]
   --logfile value                                     Save application log to this file for reporting issues. [$TUNNEL_LOGFILE]
   --log-directory value                               Save application log to this directory for reporting issues. [$TUNNEL_LOGDIRECTORY]
```

# オプション指定による挙動の違い

Version 2024.5.0 で確認。

## デフォルト(オプション未指定)

- 標準出力

```
tunnel --no-autoupdate --hello-world
```

## --logfile

- 標準出力＋指定したログファイルに出力
- ログローテーションは **行われない**

```
tunnel --no-autoupdate --hello-world --logfile /var/log/cloudflared/cloudflared.log
```

## --log-directory

- 標準出力＋指定したディレクトリに `cloudflared.log` を出力
- ログローテーションが行われる
	- 1MiB 毎に以下のファイル名にローテーションされ、 5ファイル保持
	- cloudflared-YYYY-MM-DDTHH-MM-SS.sss.log

```
cloudflared tunnel --no-autoupdate --hello-world --log-directory /var/log/cloudflared
```

### コード上定義箇所

```
# https://github.com/cloudflare/cloudflared/blob/master/logger/configuration.go#L40
	const RollingMaxSize = 1    // Mb
	const RollingMaxBackups = 5 // files
	const RollingMaxAge = 0     // Keep forever
	const defaultLogFilename = "cloudflared.log"
```
【Java】拡張for文を覚える

拡張for文が通常のfor文よりわかりづらかったので、覚えるための自分用メモです。

# 拡張for文とは？
配列やコレクションの要素を1つずつ取り出す際のfor文を、省略して記述する方法です。
省略することで、スッキリしたコードになります。

## サンプルプログラム
通常のfor文で配列の要素を1つずつ取り出す記述は、以下のとおりです。
```java:Main.java
public class Main {
    public static void main(String[] args) {
        int[] numbers = {0, 1, 2};
        for(int i = 0; i < numbers.length; i++) {
            System.out.println(numbers[i]);
        }
    }
}
```
**実行結果**
0
1
2

これを拡張for文で書き直すと、以下のようになります。
```java:Main.java
public class Main {
    public static void main(String[] args) {
        int[] numbers = {0, 1, 2};
        for(int num : numbers) {
            System.out.println(num);
        }
    }
}
```
**実行結果**
0
1
2

for文と違って、別の変数に配列の要素を代入しながら繰り返しするんですね。
jinja2についてまとめてみました。



## はじめに
jinja2に関しての備忘録。

## 🦁<INS>**結論**</INS>🦁
テンプレートにデータを埋め込むことができるライブラリ。
htmlを自動生成したりできる。

:::note info
押さえておくべき点
* 変数埋め込み：テンプレート内で{{ 変数 }}という形式でPythonの変数を埋め込むことができる。
* 条件分岐：{% if 条件 %}…{% endif %}という形式で条件分岐ができる。
* ループ：{% for アイテム in リスト %}…{% endfor %}という形式でループ処理ができる。
* フィルタ：{{ 変数|フィルタ }}という形式で変数に対して特定の処理を行うことができる。
:::  
***

:::note warn
利用シーン
*  ウェブサイトの動的なページ生成：ウェブアプリケーションで、ユーザーごとに違う内容のページを生成する。
* メールテンプレートの生成：ユーザー名や特定の情報を含むカスタマイズされたメールを送る。
* レポートの自動生成：データに基づいて自動的にレポートを作成する。
* 設定ファイルの生成：多くの設定項目を持つ設定ファイルを自動で作成する。
* ドキュメントの生成：大量のテキストデータをテンプレートに基づいて自動生成する。
:::  
***

:::note alert
注意点
*  互換性：Jinja2はPythonのバージョンや他のライブラリと互換性があるか確認する必要がある。
* 範囲選択内でループ処理した場合には、追記されていく。
* ディレクトリの選択はパスではなくメソッドを使う。
:::  

## <INS>**Jinja2の主な機能**</INS>

## <INS>**テンプレートの書き方**</INS>
追記したい部分に
{{ title }}を記載

ループ処理するスタート箇所に
{% for item in items %}を記載

ループ処理終了する箇所に
{% endfor %}を記載

```html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
    <h1>{{ heading }}</h1>
    <ul>
    {% for item in items %}
        <li>{{ item }}</li>
    {% endfor %}
    </ul>
</body>
</html>
```


## <INS>**Python 使用例**</INS>

```py
from jinja2 import Environment, FileSystemLoader

# テンプレートファイルが置かれているディレクトリを指定
file_loader = FileSystemLoader('templates')
env = Environment(loader=file_loader)

# テンプレートファイルの読み込み
template = env.get_template('template.html')

# テンプレートに埋め込むデータ
data = {
    'title': 'Jinja2の紹介',
    'heading': 'Jinja2でHTMLを作成しよう',
    'items': ['りんご', 'みかん', 'バナナ']
}

# テンプレートをレンダリング（データを埋め込んでHTMLを生成）
output = template.render(data)

# 生成されたHTMLをファイルに保存
with open('output.html', 'w', encoding='utf-8') as f:
    f.write(output)
```

## まとめ✍️
テキストを動的に扱う際にはjinja2の利用頻度は高そう。
扱いもしやすいのでこれからどんどん使って身につける。
VS Code Extensionで認証を扱う

# はじめに

もろもろとやりたいことがVS Code Extensionであるのですが、どうやったら認証情報を取り扱えるかの情報が以下くくらいしか見つけられず、動作を確認したので備忘メモとして残します。

https://www.eliostruyf.com/microsoft-authentication-provider-visual-studio-code/

# 標準の認証プロバイダー
VS Code には標準で以下の認証APIがあります。

https://code.visualstudio.com/api/references/vscode-api#authentication

### getSession

`getSession(providerId: string, scopes: readonly string[], options: AuthenticationGetSessionOptions & {createIfNone: true}): Thenable<AuthenticationSession>`

指定されたスコープに一致する認証セッションを取得します。`providerId`で指定されたプロバイダーが登録されていない場合、またはユーザーが拡張機能と認証情報を共有することに同意しない場合は拒否されます。同じスコープを持つ複数のセッションが存在する場合、ユーザーにはどのアカウントを使用するかを選択するためのクイックピックが表示されます。

現在、エディタに組み込まれている拡張機能から提供される認証プロバイダーは、GitHubとMicrosoftの2つのみです。それぞれの`providerId`は 'github' と 'microsoft' です。

#### パラメータ

- **providerId: string**
  - 使用するプロバイダーのID

- **scopes: readonly string[]**
  - 要求される権限を表すスコープのリスト。これらは認証プロバイダーに依存します。

- **options: AuthenticationGetSessionOptions & {createIfNone: true}**
  - 使用する`AuthenticationGetSessionOptions`

#### 戻り値

- **Thenable<AuthenticationSession>**
  - 認証セッションに解決されるThenableオブジェクト


# GitHub の認証

GitHubの認証を使う場合、プロバイダーIDに"github"を指定します。createIfNoneをtrueにしておくと、認証がなければ、自動的にGitHubの認証が確認され、ログインすると認証情報が取得できます。

```typescript
const session = await vscode.authentication.getSession('github', ['repo'], { createIfNone: true })
```

`session`には以下のようにアクセストークンを含んだ情報が入っています。

```console
accessToken:'アクセストークン'
account:{label: 'ログイン名', id: ログインID}
id:'ID'
scopes:
(1) ['User.Read']
```

# マイクロソフトアカウントでの認証

マイクロソフトアカウントでの認証は、プロバイダーIDに"microsoft"を指定します。GitHubと同じく自動的にマイクロソフトアカウントの認証が確認されます。

```typescript
const session = await vscode.authentication.getSession('microsoft', ['User.Read'], { createIfNone: true })
```

無事認証すると以下のようなsessionが取れています。GitHub同様にこのアクセストークン/IDトークンを使えますね。

```console
accessToken:'アクセストークン'
account:{label: 'アカウント名', id: '--------------------------', type: 'aad'}
id:'---------------------------------------------------------------------------------------'
idToken:'IDトークン'
scopes:
(1) ['User.Read']
```

# 自前のEntraID アプリケーションでの認証

上2つの認証方法でやりたいことの大部分はできるのですが、APIをEntraIDのエンタープライズアプリで保護した場合の認証は以下のように取得できます。
なお、Entra IDのアプリ登録として、ネイティブクライアント＆リダイレクトURIを`https://vscode.dev/redirect`としておく必要があります。

```typescript
const session = await vscode.authentication.getSession('microsoft', [
    "VSCODE_CLIENT_ID:クライアント（アプリ）ID",
    "VSCODE_TENANT:テナントID", //マルチテナントの場合はcommon
    'User.Read'
  ], { createIfNone: true });
```

以下のように上記２つと同様にアクセストークン/IDトークンが取得できます。

```console
accessToken:'-----------------------------------------------------'
account:{label: 'アカウント名', id: '---------------------------------', type: 'aad'}
id:'----------------------/------------------------'
idToken:'------------------------------------------------------------------'
scopes:
(3) ['VSCODE_CLIENT_ID:クライアントID', 'VSCODE_TENANT:テナントID', 'User.Read']
```

# おわりに
VS Code Extensionで認証を扱いたい！となったのですが、msal-nodeを使うというような情報もあったりする中で、VS Code APIをつかって簡単にトークンが取得できましたので、やり方と合わせてのメモとなります。
大学時代の部活でITによる課題解決をした経験　その②

大学時代に所属していた吹奏楽部で、見つけ出した課題をITで解決していった事例2つ目です。
1つ目は[こちら](https://qiita.com/gomaabura/items/ed5bdb729e8dd78b0fe9)。

# 見つけた課題
私の所属していた吹奏楽部では、年に数回定期演奏会をやっていました。
そこでアンケートを取っていたのですが、集計方法がなんと**手作業**でやっていたようでした。
「ようでした」というのは、自分はその手作業集計に実際に参加していないからなのですが、、手作業でやっているっぽい光景は見たことがあります。流石にグラフ等はオフィスソフトで作成していましたが、元データは見たことが無かったです。

# 解決方法
単純に**Excelを使用して集計**することにしました。
ざっくり手順は以下の通りです。

1. アンケート1枚に対し1行でデータを入力していく
1. 別シートにCOUNTIFなどの関数を用いて集計表を作成
1. それぞれのデータ特性にあったグラフを作成し、Wordで報告書作成

正直、めちゃくちゃ普通だと思います。
ただ皆さん(特に文学部とかの文系の方)、思い出してください。大学時代にExcelってまともに使うことってあったでしょうか？
自分は統計関係の授業を取ったりした時以外必要無かったです。
つまり、文系大学生のExcelスキルってそんなもんなのです。

ここで、元データのExcelファイルと報告書のWordファイルだけ引き継いでいったら、確実に手作業に戻っていくことでしょう。
そこで手順1、2の部分は**マニュアルを作成**することにしました。そしてマニュアルを使用して後輩に説明し、一緒に集計作業をしました。
無事にIT化したアンケート集計作業を引き継げたわけです。

これで手作業アンケート集計問題は解決しました！

# おわり
今回はマニュアルを作成して引き継ぐところまで、無事やり遂げることができました。
この作業をしていた係内での話だったので、できたのだと思います。

# おまけ
ちょろっと話にもありましたが、自分は統計関係の講義を取っていました。そこでこの演奏会のアンケートを使用してレポートを書いたりもしました。
テーマは「お客様の属性によって、聞きたい曲のジャンルが違うのかどうか」ということです。(曲のジャンルというのは、がっつり吹奏楽曲！なのか、JPOPなのか、みたいなことです。)
これはExcelで集計するようにしなかったらできないことです。
手作業集計をしていた時は、恐らく設問ごとの集計しかしていなかったと思いますので。。

データ分析の観点からしても、作業をIT化していくのが必須だったのだと思いました。
Next.jsに画像を貼る


シリーズのトップは↓こちら

https://qiita.com/every-month/items/a6a9f481ac31eb695d25

前回の記事は↓こちら

https://qiita.com/every-month/items/983587bbdeec91b438c9

たまたまプライベートで人にTypeScriptでAppRouterなNext.jsを叩き込む機会がありまして、せっかくなので再びこの場をお借りしていっしょに復習します。

## 前前回のポイント（再掲）（抜粋）

- `npm run dev`
    - （作ってる途中の）Next.jsを動かす
    - だいたい`http://localhost:3000`で見れる
- `src/app/pages.tsx`
    - ここがページの内容になる
    - これからはここにオリジナリティーを出す
- TSXでは`<>`と`</>`で囲むとひとまとめにできる
    - フラグメントといいます


## 今回のポイント

- 画像を貼る方法はいくつかある
    - そのうち２つを紹介
        - `public/画像のファイル名`のように配置する方法
        - 画像を`import`して使う方法
- TSXのHTMLみたいな部分で変数や値を使うときは`{`と`}`で囲む
    - これはよく使います！

## 画像を準備する

![image.png](https://s3-ap-northeast-1.amazonaws.com/qiita-image-store/0/3782801/a3f06cbfc72d8e36f6812095475eca42725916fd/large.png)

これでいいや、名前は短いほうが入力が楽です。

これを２箇所に置きます。
私は`public/icon_in_public.png`と`src/app/icon_in_app.png`としました。

## 共通：準備＋確認

`src/app/page.tsx`を開きます。

```tsx:src/app/page.tsx（抜粋）
import Image from "next/image";
```

上のほうにこの行がまだあることを確認します。この行があるからこそNext.jsらしく画像を貼れます。無ければ書いておきます。

## 方法その１：`public`フォルダに入れる方法

```tsx:src/app/page.tsx（抜粋）
  return (
    <>
      Hello World
      <Image src="/icon_in_public.png" alt="icon" width={50} height={50} />
    </>
```

↑このように、`<>`と`</>`の間のきりのいいところに、`<Image src="/画像のファイル名" alt="画像の説明" width={お好みのサイズ感（幅）} height={お好みのサイズ感（高さ）} />`のように書きます。幅と高さは***必須***です。省略できません。

## 方法その２：`import`して使う方法

```tsx:src/app/page.tsx（抜粋）
import icon from './icon_in_app.png';
```

↑このように`import なんか名前をつける from './画像のファイル名';`

```tsx:src/app/page.tsx（抜粋）
  return (
    <>
      Hello World
      <Image src={icon} alt="icon" />
    </>
```

↑このように、`<>`と`</>`の間のきりのいいところに、`<Image src={さっきつけた名前} alt="画像の説明" />`のように書きます。幅と高さは***必須ではありません***。省略できます。

TSXのHTMLみたいな部分では、変数や値を`{`と`}`で囲むことによって、その場で使うことができます。

## 両方やってみる

```tsx:src/app/page.tsx
import Image from "next/image";
import icon from './icon_in_app.png';

export default function Home() {
  return (
    <>
      Hello World
      <Image src="/icon_in_public.png" alt="icon" width={50} height={50} />
      <Image src={icon} alt="icon" />
    </>
  );
}
```

せっかくなので両方やってみました。

忘れずに保存して、`npm run dev`を動かしていなければ動かして、ブラウザで確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782801/32856967-13fe-d5a5-56dd-edbd2bb5188a.png)

このような画面が出ました。画像が２つ表示されていますね🎉

今回はここまでにしました✨

## 今回のポイント

- 画像を貼る方法はいくつかある
    - そのうち２つを紹介
        - `public/画像のファイル名`のように配置する方法
        - 画像を`import`して使う方法
- TSXのHTMLみたいな部分で変数や値を使うときは`{`と`}`で囲む
    - これはよく使います！

## 参考

https://nextjs.org/docs/pages/building-your-application/optimizing/static-assets

https://nextjs.org/docs/pages/building-your-application/optimizing/images
ITパスポート コンピュータの構成とCPU

・コンピュータの構成
コンピュータのハードウェアは、制御装置、演算装置、記憶装置、入力装置、出力装置の五つの要素から構成されている

・CPU
制御装置と演算装置を合わせた名称
・マルチコア
複数のコア（演算回路）を搭載したもの
・クロック周波数
CPU内はたくさんの回路で構成され、各回路間の処理にずれが生じないように、同期をとるための周期信号（クロック信号）に合わせて各回路が動作している
クロック信号が１秒間に繰り返される回数をクロック周波数という
・ターボブースト
特定のコアに負荷がかかると、許容発熱量や消費電力量に余裕があれば、そのコアだけ一時的にクロック周波数を上げる

・GPU
3Dグラフィックスなどの画像処理に特化した装置

・バス
コンピュータ内の装置間を結び、データや制御情報などのやり取りのために共有される伝送路
IBM i Services Directory : QSYS2.ACTIVE_JOB_INFO テーブル関数のサンプル2

[こちら](https://qiita.com/gomAnomalocaris/items/385832bab2fdf89770f9)で書いたACTIVE_JOB_INFO関数のサンプルをご紹介します。
今回の例は全て[IBM Document(旧IBM i インフォセンター）](https://www.ibm.com/docs/ja/i/7.4?topic=services-active-job-info-table-function)に記載があります。
※以下の3例のうち③のみIBM i 7.4版に記載、IBM i 7.5版ドキュメントでは消えていますが、IBM i 7.5でも使えました。

## ACTIVE_JOB_INFO サンプル① ： 指定したジョブ名で、ディスク使用率上位10個を抜き出す

IBM Document(インフォセンター)記載のサンプルではODBC/JDBCサーバージョブ QZDASOINITの上位10個を抜き出します。
他にも ***対話型ジョブQPADEVxxxx*** や, ご自身の会社システムに固有のジョブ名等を使えると思います。

```
SELECT JOB_NAME, AUTHORIZATION_NAME, ELAPSED_TOTAL_DISK_IO_COUNT, ELAPSED_CPU_PERCENTAGE 
FROM TABLE(QSYS2.ACTIVE_JOB_INFO(
            JOB_NAME_FILTER => 'QZDASOINIT',
            SUBSYSTEM_LIST_FILTER => 'QUSRWRK')) X
ORDER BY ELAPSED_TOTAL_DISK_IO_COUNT DESC
FETCH FIRST 10 ROWS ONLY;
```

実行例はこちらです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/fe76bee7-7c2f-e5ec-c131-208edc1dd9e7.png)

むー、見事にすべてのデータが0パーセントですね。^^;実はこのコマンドは***初回実行時に統計が開始されるため初回の数値は必ずゼロになります。*** 適切な時間をおいて再実行するとその期間の統計データを下記のように、、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/12b4098a-24a5-d954-fc67-a47dac8478e6.png)


値が返されました。・・・値がちっさいのは・・・テスト機で特にこの時間全く使っていないのでご了承ください…^^;
ちなみに統計をリセットするには reset-statistics パラメーターを使用します。
ODBC/JDBCジョブでテーブルに適切なインデックスが無いとテーブルスキャン（全件READ）が発生する場合があるので、その兆候を補足できると思います。
なかなか実用的なサンプルですね。

## サンプル② ： 活動中のジョブでテンポラリーストレージを大量使用している順にリストする

これは読んで字のごとしです。
さっそく実行してみます。

```
SELECT JOB_NAME, AUTHORIZATION_NAME, TEMPORARY_STORAGE, SQL_STATEMENT_TEXT
FROM TABLE (QSYS2.ACTIVE_JOB_INFO(DETAILED_INFO=>'ALL')) X
    WHERE JOB_TYPE <> 'SYS' 
ORDER BY TEMPORARY_STORAGE DESC;
```

実行結果は下記です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/d2af75e8-0559-6ed6-338a-b43aac2c86a7.png)

ユーザー名のつぎに、テンポラリーストレージの使用量が表示されています。単位はおそらくMBだと思います。
***ここでのポイントは（ODBC/JDBCジョブ等で）実行されたSQLステートメントも表示されている点です。*** サンプル①と同様にSQLパフォーマンスの問題判別ではテンポラリーストレージのサイズを測る事が有効な場合もあると思いますので有用なサンプルだと思います。

## サンプル③ ： ジョブ名を ユーザー名 + ジョブ名 + 番号 に分割する

ご存じのようにIBM i上で全てのジョブは 下記例のように
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/45674713-ddf9-befd-ce75-78c9b066310b.png)

ジョブ名+ユーザー名+連番で識別されますが、***OSコマンドでジョブ名を取得した際、連番/ユーザー名/ジョブ名で取得されてしまい*** 、ユーザーがプログラムでハンドリングするのはちょっと面倒です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/0d0fad98-7111-1d2f-b5c9-393824740335.png)

ということでOSコマンドで取得できるジョブ名を3つの要素に分解するサンプルがこちらです。
```
SELECT SUBSTR(JOB_NAME,1,6) AS JOB_NUMBER,
       SUBSTR(JOB_NAME,8,POSSTR(SUBSTR(JOB_NAME,8),'/')-1) AS JOB_USER,
       SUBSTR(SUBSTR(JOB_NAME,8),POSSTR(SUBSTR(JOB_NAME,8),'/')+1)  AS JOB_NAME
FROM TABLE (QSYS2.ACTIVE_JOB_INFO()) AS X;
```

実行結果は、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/4e9a5d8b-7272-da66-a5ac-d758d0b81266.png)

となりました。これならユーザープログラムでも利用しやすいと思います。これも使い勝手の良いサンプルではないでしょうか。

いろいろなところに使えるサンプルが埋もれているので、また発掘してご紹介したいと思います。
Sloc Cloc and Codeを使ってソースコードの行数数えてみた

# はじめに
業務の一環で、[Sloc Cloc and Code (scc)](https://github.com/boyter/scc?tab=readme-ov-file#sloc-cloc-and-code-scc)を使ってソースコード量を数えることになったので、備忘録として残します。(WSL)

# 目次
1. [使用したツール](#使用したツール)
1. [セットアップ](#セットアップ)
    1. [インストール](#インストール)
       1. [Homebrewをインストールしていない方向け](#Homebrewをインストールしていない方向け)
    1. [実行](#実行)

# 使用したツール
- [Sloc Cloc and Code (scc)](https://github.com/boyter/scc?tab=readme-ov-file#sloc-cloc-and-code-scc)
- [Homebrew](https://brew.sh/)
# セットアップ
## インストール
Go GetやSnap等で取得できるとのことでしたが、今回はHomebrewを使ってインストールしました。
※Homebrewをインストール済みの方は[こちら](#Homebrewインストール済みの方向け)からご覧ください。

### Homebrewをインストールしていない方向け
1. [公式サイト](https://brew.sh/)に遷移します
2. 下記のコマンドをターミナルで実行します
```
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
3.パスワードが求められるので入力します。
4. 処理が終わると、「 Next steps: 」が出力されるので、出力された内容に合わせてコマンドを実行していきます。

### Homebrewインストール済みの方向け
1.  ターミナルを開きます。
2.  以下のコマンドを実行します。


```
$ brew install scc
```
ダウンロードが開始されるので終わるまで待ちます。

3.以下のコマンドを実行してダウンロードができていることを確認します。
```
scc --version
```

sccのバージョンが表示されれば準備完了です。



## 実行
1. ターミナルでソースコードがあるディレクトリに遷移します。(cd ○○等)
1. 以下を実行すると、ソースコードの行数と言語がテーブルで出力されます。※[参考](https://github.com/boyter/scc?tab=readme-ov-file#usage)
```
$ scc
```

また、以下を実行するとCSV形式として出力されます。

```
$ scc -f csv
```

# おわりに
インストール後はコマンドを叩くだけでソースコード量が出力されるのでとても便利でした。
皆さんもぜひお試しあれ！
Yamada UIを使ってミニアプリつくってみた

# はじめに
気になっていた**Yamada UIを使って簡単な一言日記アプリ**をつくってみました！
なお、これまでに使用したことがあるUIコンポーネントライブラリはChakura UIくらいです。
**私自身CSSやデザインの学習経験は全くない**ので、今回のアプリにおいてもかなり雑な印象を受けるかと思いますが、あくまでもYamda UIを使ってみたかっただけなので、温かい目で見ていただけると幸いです。。
今回の使用言語はReact×TypeScriptです。
# Yamada UIとは（ざっくり）
日本人の山田さんが開発されたUI コンポーネントライブラリです。
他のUIコンポーネントとの違いや詳細等は下記に簡潔にまとめられています。

https://github.com/yamada-ui/yamada-ui/blob/main/README.ja.md

# 使ってみた感想


## <font color="Red">**１．公式ドキュメントが日本語＆説明が丁寧**</font>

前述のとおり、開発者が日本人なので**基本的にすべて日本語**でした。
また、山田さんのドラゴンボール好きが興じて**ちょくちょくドラゴンボール要素が盛り込まれています（笑）**
また、**props・component毎に使用例やサンプルコードが載っています。**
このままコピペで使用できてしまうので**初学者にとってすごくありがたい**ですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675500/035e1696-3446-6ef2-4a62-4e6226f20f9e.png)


## <font color="Red">**２．カラーモードやアニメーションが簡単に実装できる**</font>


**よく凝ったサイトで見かけるような機能を簡単に実装**できます。
今回は**カラーモードとアニメーションの機能**を実装してみました。

**～カラーモード～**
ほぼサンプルコードをコピペするだけですが、下記記事にやり方を載せています。

https://qiita.com/AK_React/items/9dbedfd852d5c6623074

**～アニメーション～**

こちらも**すでにサンプルコードが用意されているので、自由に使いまわせます。**

https://yamada-ui.com/ja/styled-system/animation#css%E3%82%A2%E3%83%8B%E3%83%A1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3

試しに「スクロール」の動きを実装してみました。（ほぼサンプルコードのままです）

![一言日記デモ.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675500/a4ee3c04-4ac5-982a-320c-fc596795698c.gif)

## <font color="Red">**３．カラーパレットを使って直感的にカラーの選定ができる**</font>
色の組み合わせってなかなか難しいですが、**Yamada Colorsでは同系色の提案や色のカスタムが簡単にできます。**

https://yamada-colors.app/

Generatersで検索した色に対して異なるトーンの色味を提案してくれたりします。
めっちゃ便利で見ているのも楽しいです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3675500/9593b46a-f4dd-bd1b-4659-9e911f4765ac.png)

# おわりに　

以上、Yamada UIを使ってみた感想でした。
公式ドキュメントが読みやすくて充実しているので、初学者の方にもおすすめです。
UI周り勉強してもっと使いこなせるようになりたい！と思いました。
# 参考

https://yamada-ui.com/ja/getting-started
wordpress で user パスワードを update した


フォーマット
```SQL:sql
UPDATE ユーザーテーブル SET user_pass = MD5('新しいパスワード') 
WHERE user_login = 'ユーザー名';
```

MD5 指定があります。
DB 指定やサンプル

```SQL:sql
UPDATE exampledb.wp_users SET user_pass = MD5('password') 
WHERE user_login = 'pugiemonn';
```