OmniAICreator/Qiita-1.07M huggingface dataset:
【コピペ用】ひらがな、カタカナ、濁音・半濁音（合成済み文字、結合文字列）

## ひらがな
範囲：`U+3040`〜`U+309F`

```:すべて（結合文字（U+3099〜U+309A）を除く）
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔゕゖゖ゙゛゜ゝゞゟ
```

```:平仮名 / Hiragana letters（U+3041〜U+3094）
ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをんゔ
```

```:小書き / Small letters（U+3095〜U+3096）
ゕゖ
```

```:濁音・半濁音 / Voicing marks（U+3099〜U+309C）（結合文字（U+3099〜U+309A）を除く））
゛゜
```

```:繰り返し記号 / Iteration marks（U+309D〜U+309E）
ゝゞ
```

```:縦書き合字 / Hiragana digraph（U+309F）
ゟ
```

## カタカナ
範囲：`U+30A0`〜`U+30FF`

```:すべて
゠ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ・ーヽヾヿ
```

```:片仮名句読点 / Katakana punctuation（U+30A0）
゠
```

```:片仮名 / Katakana letters（U+30A1〜U+30FA）
ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ
```

```:接続記号と長音記号 / Conjunction and length marks（U+30FB〜U+30FC）
・ー
```

```:繰り返し記号 / Iteration marks（U+30FD〜U+30FE）
ヽヾ
```

```:縦書き合字 / Katakana digraph（U+309F）
ヿ
```

## 濁音・半濁音
Unicodeにおける濁音・半濁音の表現は2種類存在する。
### 1. 合成済み文字（Precomposed Character）
１つの文字コードで表現され、「基底文字（Base Character）」と「結合文字（Combining Character）」に分解可能な文字のこと。

```:平仮名・濁音
がぎぐげござじずぜぞだぢづでどばびぶべぼゔゞ
```

```:平仮名・半濁音
ぱぴぷぺぽ
```

```:片仮名・濁音
ガギグゲゴザジズゼゾダヂヅデドバビブベボヷヸヹヺヴヾ
```

```:片仮名・半濁音
パピプペポ
```

### 2. 結合文字列（Combining Character Sequence）
「基底文字（Base Character）」と「結合文字（Combining Character）」の組み合わせで1文字を表現した文字列のこと。Macでは結合文字列が使用されることがある。

※結合文字列はUCSの用語「Composite Sequence」と同義であり、日本語で「合成列」「合成文字」と表記される場合もある。


```:平仮名・濁音
がぎぐげござじずぜぞだぢづでどばびぶべぼゔゞ
```

```:平仮名・半濁音
ぱぴぷぺぽ
```

```:片仮名・濁音
ア゙ガギグゲゴザジズゼゾダヂヅデドバビブベボヴヷヸヹヺヾ
```

```:片仮名・半濁音
パピプペポ
```

## 関連用語
### Unicode正規化における合成と分解
+ **合成（Composition）**：結合文字列 → 合成済み文字
+ **分解（Decomposition）**：合成済み文字 → 結合文字列

### Unicodeの等価性
+ **正準等価性（Canonical Equivalent）**：視覚的および機能的に等価
（例）合成済み文字と結合文字列、互換漢字と対応する統合漢字
+ **互換等価性（Compatibility Equivalent）**：視覚的にも機能的にも異なりうる
（例）全角文字と半角文字、上付き文字、下付き文字

### Unicode正規化
+ **NFC（Normalization Form Composition）**：正準等価性によって分解される
+ **NFD（Normalization Form Decomposition）**：正準等価性によって分解され、再度合成される
+ **NFKD（Normalization Form Compatibility Decomposition）**：互換等価性によって分解される
+ **NFKC（Normalization Form Compatibility Composition）**：互換等価性によって分解され、正準等価性によって再度合成される


## 参考ページ

https://www.asahi-net.or.jp/~AX2S-KMTN/ref/unicode/u3040.html

https://www.asahi-net.or.jp/~AX2S-KMTN/ref/unicode/u30a0.html

https://emasaka.blog.fc2.com/blog-entry-1407.html

https://tama-san.com/unicode-normalize-confusion/

http://nomenclator.la.coocan.jp/unicode/normalization.htm

http://ognac.cocolog-nifty.com/blog/2019/09/post-fbd8a3.html
JavaScriptでTODOリストを作ってみた part.2

こんばんは！gamubaruです！

引き続きTODOリストの作成をしたいと思います！
今回は、TODO追加したリストに編集ボタンと削除ボタンを付ける仕様を作成していきます！

では製造します！
よろしくお願いします！！

１.ボタン作成
-
編集ボタンと削除ボタンの作成
```js
    // ボタンを作成
    const editBtnElm = document.createElement('button')
    const delBtnElm = document.createElement('button')
    // ボタンの名前
    editBtnElm.textContent = '編集'
    delBtnElm.textContent = '削除'
```
createElementメソッドでボタン要素を作成して、
作成したボタンに名前をつける。

↓createElementメソッドはこんな感じ
![スクリーンショット 2024-10-09 003914.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3904515/4472f103-f8c7-9868-ee05-c9b093ffb3c0.png)
ボタンタグが作成される

２．liに追加
-
先ほど作成したボタンを前回作成した、liタグに追加する
```js
    //　li要素に追加？？
    liElm.appendChild(editBtnElm)
    liElm.appendChild(delBtnElm)
```
<a href="https://developer.mozilla.org/ja/docs/Web/API/Node/appendChild">appendChild</a>についてはこちらをどうぞ！



完成した画面はこんな感じ
![スクリーンショット 2024-10-09 004240.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3904515/ba009b43-8f8f-a27a-667f-cc0df97f469d.png)

３．ちょっとここで！
-
編集機能や削除機能を実装する前に、
createElementが冗長しているので、まとめたいと思います。
下記のように、要素作成を関数にする。
```js
 const createElement = (tagName,text) =>{
    const elm = document.createElement(tagName)
    if (text !== undefined){
        elm.textContent = text
    }
    return elm
 }

```
呼び出したい場合は下記のようにする
```js
 const editBtnElm = createElement('button','編集')
```
これで少しすっきりしました
```js
 const liElm = createElement('li',todoValue)
 const editBtnElm = createElement('button','編集')
 const delBtnElm = createElement('button','削除')
```

本来はli作成の関数、botton作成の関数と分けるべきだが、
今のところ同じよう書きました。（今後も修正していきます）


いったん以上！あざした！
OSSライセンスの種類

# OSSライセンスとは
ソフトウェアの利用許諾契約書（ライセンス）の一種で、ソースコードの入手、利用、改変、再配布等の内容を示したものです。

以下のサイトにオープンソースの定義が記述されています。

 https://opensource.jp/osd/osd19/

簡単に言うと
* ソースコードが公開されている
* 再配布、改変してよい
* 誰でも利用してよい

というものです。
ライセンスの種類によって条件が増えます。

# OSSライセンスの種類
OSSライセンスは大きく3つに分類されます。

## 非コピーレフト
+ OSSライセンスのソースをライブラリとして呼び出したソースコードの公開が**不要**
+ OSSライセンスのソースを改造したソースコードの公開が**不要**

### MITライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* 著作権表示とライセンス条文と無保証である旨をソフトウェアの重要部分（ヘッダ部など）に記載する必要あり
* 複製・改変後のソースコードの公開義務なし

### BSDライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* 著作権表示とライセンス条文と無保証である旨をソフトウェアの重要部分（ヘッダ部など）に記載する必要あり
* 複製・改変後のソースコードの公開義務なし
* 開発者または他の利用者の名前を許可なく使用してはならない

### Apacheライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* Apacheライセンスのコードが利用されている旨を知らせる必要がある（改版した場合は改版した旨も知らせる必要あり）
* 複製・改変後のソースコードの公開義務なし
* 特許ライセンスが付与される（ただし特許権行使をするとライセンスは失効する）

## 準コピーレフト
+ OSSライセンスのソースをライブラリとして呼び出したソースコードの公開が**不要**
+ OSSライセンスのソースを改造したソースコードの公開が<font color="red">**必要**</font>
※公開したソースコードも同ライセンスのOSSとなる

### MPLライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* 著作権表示とライセンス条文と無保証である旨をソフトウェアの重要部分（ヘッダ部など）に記載する必要あり
* 複製・改変後のソースコードの公開義務あり
* MPLライセンスを適用したソフトウェアを改造したソフトウェアはMPLライセンスとして公開する必要がある
* MPLライセンスを適用したソフトウェアを利用したソフトウェアは独自のライセンスで公開することが出来る

### LGPLライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* 著作権表示とライセンス条文と無保証である旨をソフトウェアの重要部分（ヘッダ部など）に記載する必要あり
* 複製・改変後のソースコードの公開義務あり

## コピーレフト
+ OSSライセンスのソースをライブラリとして呼び出したソースコードの公開が<font color="red">**必要**</font>
+ OSSライセンスのソースを改造したソースコードの公開が<font color="red">**必要**</font>
※公開したソースコードも同ライセンスのOSSとなる

### GPLライセンス
* 商用利用可能（無償かつ無制限に使用可能）
* 利用に伴い作成者はいかなる責任も負わない
* 著作権表示とライセンス条文と無保証である旨をソフトウェアの重要部分（ヘッダ部など）に記載する必要あり
* 複製・改変後のソースコードの公開義務あり
* GPLライセンスが適用されたプログラムを用いて作られたソースコードの公開義務あり
* GPLライセンスを適用したソフトウェアを頒布する際にGPLライセンスで書かれている以上の条件を課すことは出来ない
ALBのアクセスログをAthenaを使って分析する

## はじめに

障害時にALBのアクセスログを素早く分析できるようになりたいと思い手を動かしながら解説していきます。

## やること
S3に保存したALBのアクセスログを、Athenaを使って分析する。

## 必要な工程

大きく分けると以下になります。
- データベースを作成する
    - https://docs.aws.amazon.com/ja_jp/athena/latest/ug/step-1-create-a-database.html
- テーブルを作成する
    - https://docs.aws.amazon.com/ja_jp/athena/latest/ug/create-alb-access-logs-table-partition-projection.html
- クエリする
    - https://docs.aws.amazon.com/ja_jp/athena/latest/ug/query-alb-access-logs-examples.html

正直公式の解説が丁寧すぎたので解説は必要ないかもなのですが、実施してみてわかりにくかったことをいくつか書いていきます。

## データベースを作成する
これはAthenaで使用するデータベースを作成します。
次に作成するテーブルをこのデータベースの中に作成することになります。
この時、保存先のS3に対しての設定で、
”Assign bucket owner full control over query results”
というチェックボックスにチェックを入れないとクエリ結果が正しくS3に保存されないので注意が必要です。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/step-1-create-a-database.html


## テーブルを作成する

これは公式がALB用のクエリを用意してくれているのでそのまま使用しました。
S3に保存されているALBのアクセスログのデータをクエリする際に必要なカラムを用意してくれます。
location,account id,regionを自身の環境に合わせて編集すればそのまま使用できます。
https://docs.aws.amazon.com/ja_jp/athena/latest/ug/create-alb-access-logs-table-partition-projection.html

## クエリする
```
SELECT COUNT(request_verb) AS
 count,
 request_verb,
 client_ip
FROM alb_access_logs
GROUP BY request_verb, client_ip
LIMIT 100;
```
とりあえず上記のクエリで、HTTPメソッドと、クライアントIPの上位100でクエリを叩いたところいくつかメソッド毎にクライアントIPも表示されました。

## 終わりに
正直今回の練習では、公式の解説どおりに実行しただけなので、じゃあこれを実際の障害発生時にどうやって活かそうか？みたいなところまで理解できていないので、次回にいろいろなパターンでクエリを叩いてみて検証してみようと思います。
Pythonのオブジェクト指向プログラミング導入

本日から、学習を進めていくうえで自分が新たに学んだことをアウトプットする場として投稿をしていきたいと思います。
今まで逃げてきていたオブジェクト指向プログラミングの学習を始めていきたいと思います

## そもそもオブジェクト指向プログラミングとは
クラスという設計図をもとにオブジェクト（インスタンス）を生み出して、コードを組み立てていく手法のこと

クラスという枠組みを作って、様々な部品を追加していくようなイメージ

オブジェクト指向プログラミングを行うにあたって重要なクラスの要素は、大きく次の２つがある
* インスタンス変数
* メソッド

これら２つの要素について、人に関する情報を持っているPersonクラスを用いて説明する

１．インスタンス変数
名前の通り、インスタンスに属する変数のこと

Personクラスなら、name(名前)やage(年齢)、height(身長)などがあるだろう

インスタンス変数は次のように追加する
```python
class Person:
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height
```
ここで新しく出現した、def __init_　は初期化メソッドと呼ばれ、クラスという設計図をもとに新たなインスタンスを作る際に使用されます。
また、引数のselfは新たに作ろうとしているインスタンス自体を表しています。

例えば、今、新しく Person1 という名前のインスタンスを作成しようとしている場面を考えてみましょう。

その場合、selfはPerson1を表していることになります
self.name = name　などの箇所は、Person1のnameには引数のnameを代入してくださいといった命令になります。

同様にして、新たにインスタンスを作成するごとに、都度selfがそのインスタンスを表すことになります。

つまり、新たにインスタンスを作成することでselfが毎回初期化されるようなイメージ

インスタンス変数には、インスタンス名.　でアクセスできる
```python
Print(Person1.name) 
```
2.　メソッド
メソッドとは、クラスの中で定義された関数のことを指します

メソッドを使用する大きなメリットとして、インスタンス変数を呼び出す際の共通的な処理を記述する手間を省けることが挙げられます

例えば、「私の名前は～で、身長は～で、年齢は～です」という文章を出力するために、都度同じコードを記述することは無駄です。

そこで、共通する処理を、一つのメソッドとしてクラスの中にまとめることができます。

名前、身長、年齢を表示するためのintroduceメソッドを追加する
```python
class Person:
    def __init__(self, name, age, height):
        self.name = name
        self.age = age
        self.height = height
    def introduce(self):
        print(f'私の名前は{self.name}で、年齢は{self.age}で、身長は{self.height}です')
```
メソッドを記述する際も、初期化メソッドの時と同様に、引数の先頭にselfを指定します
知っておくと役立つGitコマンドのオプション

自分の業務でよく使うGitコマンドのオプションを共有します。

## git-branch
- `--merged`: 既にマージしたブランチを見たい
- `-m`: ブランチの名を再設定したい時
- `-d`: ブランチを削除 

## git-commit
- `--amend`: 直前のコミットを修正したい際に使います。ミットメッセージを変更したり、コミットに追加の変更を加えたりすることができます。

メッセージを修正する際
```
$ git commit --amend -m "新しいコミットメッセージ"
```

追加の変更を加える際
```
$ git add file
$ git commit --amend
```

-  `--amend --reset-author`: authorをリセットして、現在のGitユーザー情報で上書きしたい際に使います。

## git-log

- `--graph`: ブランチがどうのように分岐・統合されたのかを見たい時
- `--follow`: ファイルのリネーム前の履歴を見たい時
- `--stat`: コミットでの変更されたファイルを見たい時

## git-push
- `--force-with-lease`: 強制的にプッシュを行う際に安全性を高めるために使われます。

## git-rebase

### git rebase

`git rebase branch_1 branch_2`はbranch_bのコミット履歴を、ブランチbranch_aの最新のコミットに基づいて再構築するために使用される

```
      A---B---C branch_2
     /
D---E---F---G branch_1
```
rebaseを実行すると、

```
              A’---B'---C' branch_2
             /
D---E---F---G branch_1
```
になります。

branch_2のコミットはbranch_1のコミットの上に適用されます。

### git rebase --onto

branch_3のベースはbranch_2ですが、branch_1に移動させたい場合は、`--onto`を使います

```
  o---o---o---o---o  branch_1
       \
          o---o---o---o---o  branch_2
                           \
                            o---o---o  branch_3
```

`git rebase --onto branch_1 branch_2 branch_3`を実行すると、

```
  o---o---o---o---o  branch_1
       \           \
        \           o'---o'---o'  branch_3
         \           
          o---o---o---o---o  branch_2
                           
```
になります。

### 他のオプション
- `--abort`: リベース前の状態に復元します
- `--autostash`: 自動でstashします
- `--committer-date-is-author-date`: コミットの日付を著者日（元の作成日）と同じになるように設定します

## git-reset

- `--soft`: 変更内容はステージされた状態のまま残ります
- `--hard`: 最後のコミットとその変更内容は完全に取り消され、元に戻せません



## 参考文献
https://git-scm.com/docs/git-rebase
アカデミック版Gurobiライセンスの取得方法(Python)

##  概要
数理最適化のソルバーであるGurobiは、一般には非常に高価なソフトウェアですが、教員や学生などに向けては「アカデミック版」のライセンスが無償で提供されています。
本記事では、アカデミック版のGurobiをインストールし、ライセンスファイルを取得し、Visual Studio CodeにてPythonと共に利用する方法を(自分の覚え書として)説明します。


### 米国版公式ページ
こちらにて、取得手順が解説されています。
https://www.gurobi.com/features/academic-named-user-license/

## 取得方法
### **1. Gurobiのアカウントを作成し、ログイン**
https://portal.gurobi.com/iam/register/

上記のリンクにて、メールアドレスや名前、国、所属機関等を入力し、アカウントを作成します。
アカウント作成後、設定したメールアドレスとパスワードを元にログインしてください。

### **2.自分の環境に合わせたインストーラをダウンロード**
https://www.gurobi.com/downloads/gurobi-software/

次に、自分の使用するPCに合わせた最新のインストーラをダウンロードします。
(Windows, macOS, Linuxなど)
ダウンロード完了後はインストーラの指示に従って、ソフトウェアをダウンロードします。

### 3. アカデミックライセンスの申請
:::note warn
ライセンスの申請は所属機関のネットワークに接続している必要があります。VPN接続でも大丈夫なようです。
:::
https://portal.gurobi.com/iam/licenses/request/?type=academic

次に、User Portalよりアカデミックライセンスを申請します。
ACADEMICタブの「Named-User Academic」のGENERATE NOW!ボタンを押すと、grbgetkeyが取得できるのでコピーしておきます。
(例:grbgetkey ae36ac20-16e6-acd2-f2424da6e765fa0a)

### 4. grbgetkeyをコマンドプロンプト等で実行
先ほどコピーしたgrbgetkeyを、Windowならコマンドプロンプト、macなら、ターミナルにて実行します。

### 5. Visual Studio Codeにて環境を追加し同期する
 Visual Studio Code の「ターミナル」メニューの中にある「新しいターミナル」をクリックし、ターミナルを開きます。
 (自分はPythonのパッケージ管理にryeを利用しているので)以下の操作により、gurobipyを追加します。
 rye以外を利用している方は自分の環境に合わせて操作してください。

 ```
 $ rye add gurobipy
  ```
  ```
 $ rye sync 
   ```

   以上より、アカデミック版Gurobiの導入が完了しました。
   ipynbファイルを作成し、gurobipyをimportすることで使用できます。
   なお、gurobipyはgpと名付ける慣習のようです。
   ```
 import gurobipy ad gp
  ```
Flutter環境構築にあたってバージョンを確認しておくべきツール

| ツール | 確認コマンド |
|:-:|:-:|
| Flutter SDK | flutter --version |
| Dart SDK | dart --version |
| Xcode | xcodebuild -version |
| CocoaPods | pod --version |
| Android Studio | android-studio --version |
| Android SDK | sdkmanager --list |
| Gradle | gradle -v |
| JDK | java -version |
yukicoder No.2791 Beginner Contest 解説

[問題文](https://yukicoder.me/problems/no/2791)

# 解説
まず、次のようなdpを考える。
$dp[i]=$ レートを $i$ にするための方法
遷移は次のようにできる。
$dp[i]=\displaystyle\sum_{j=0}^{i-K}dp[j]$
ただし、この方法だと状態数が$N$、遷移に$O(N)$かかってしまうので、間に合わない。
ただ、今回の遷移は区間の総和を高速に求めたいので、累積和が有効。
$dp[i]=$レートを$i$**以下**にするための方法
$dp[i]=dp[i-k]+dp[i-1]$
これなら、遷移が $O(1)$ でできる。
よって、答えが$O(N)$で求まる。

# C++での解答例
```C++
#include <bits/stdc++.h>
using namespace std;
#define mod 998244353

int main() {
  int n, k;
  cin >> n >> k;
  vector<int> dp(n+1, 0);
  dp[0] = 1;
  for(int i = 1; i <= n; i++) {
    if(i >= k)dp[i] = dp[i - k];
    dp[i] += dp[i - 1];
    dp[i] %= mod;
  }
  cout << dp[n] << endl;
}
```
【Servicenow】Washington DCリリース「カタログアイテムの質問の値を設定する」

# はじめに
みなさんこんにちは、三井情報株式会社です。
Washington DCバージョンにて追加された、カタログアイテムの新機能「カタログアイテムの質問の値を設定する」を紹介します。

# 概要
ServiceNowではカタログアイテムを用いて申請の仕組みを作成することができ、フローと合わせることで申請の承認を行うこともできます。Washington DCバージョンではカタログアイテムの新機能として、カタログUIポリシーアクションを用いて質問の値を設定することができるようになりました。

# 事前準備
カタログアイテムを1つ用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/339e07b7-3994-728b-a142-44d6b0dd09ec.png)

「Type」が「Yes/No」の変数を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/0b0b03fe-f751-2fb6-e006-378686fcd361.png)

次に「Type」が「Single Line Text」の変数を作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/a240d723-1d7b-e3cf-7cea-6e63217ef574.png)


# カタログアイテムの質問の値を設定する
準備が完了したら、カタログアイテムの質問の値を設定します。
カタログアイテムの「Catalog UI Policies」タブから「New」を押下し、カタログUIポリシーを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/6fe5cf3a-d9e0-4bb9-58bb-fe1f867434fd.png)

準備にて作成した「Type」が「Yes/No」の質問にて、「No」を選択した際に動くように設定し、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/0fbaf2ed-dacc-7cc2-eb30-2b8f2dd1a92e.png)

一度「Save」または「Submit」などで保存した後はカタログUIポリシーアクションがカタログUIポリシー画面の下部に表示されるため、次は「Catalog UI Policy Actions」の「New」を押下してカタログUIポリシーアクションを新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/6d707646-2d0b-585d-317d-6a73d5660958.png)

ここで今回ご紹介するWashington D.C.バージョンの新機能が登場します。
新たに「Value action」と「Field message type」が追加されており、それぞれプルダウンから「Leave alone」以外を選択することで「Value」と「Field message」が表示されます。
「Value action」の「Value」を設定することで質問（変数）に自動で入る値を、
「Field message type」の「Field message」を設定することで質問の直下に表示されるフィールドメッセージを設定することができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/7ba6c833-1c35-29a4-c197-10d439735a57.png)

実際にサービスポータルからカタログアイテムを開いて確認します。
「Type」が「Yes/No」の質問にて「No」を選択してみると、自動で「申請理由」の方に値が入り、フィールドメッセージが表示されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/385f2650-559d-17d6-e902-be8ac1eebd57.png)

「No」を選択した後に「Yes」に切り替えてみます。
フィールドメッセージは非表示になりましたが、現時点では値のクリアなどは実装していないため、値はそのままです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/2760079e-54bb-03dc-f51a-d5b3de85e7a0.png)


# カタログアイテムの質問の値をクリアする
同じく新機能を使って値のクリアを実装してみます。
今度は「Type」が「Yes/No」の質問にて「Yes」を選択した際に動くように設定し、保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/9bc06624-8a0d-47c4-4501-8c586ad9bc7f.png)

「Value action」にて「Clear value」を選択し、「Yes」を選択した際には値がクリアされるように設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/03091789-cc5c-cc68-c1c6-8859a172ac33.png)

再度サービスポータルからカタログアイテムを開いて確認します。
「Type」が「Yes/No」の質問にて「No」を選択してみると、自動で「申請理由」の方に値が入り、フィールドメッセージが表示されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/be89b63b-63d6-ff59-74d1-a47f06fa801c.png)

「No」を選択した後に「Yes」に切り替えてみます。
今度は「Clear value」を設定しているため、ちゃんと「申請理由」の値がクリアされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599899/63f89ad1-8a13-1de1-adb2-42f56d6eedb2.png)



# おわりに
今回は「カタログアイテムの質問の値を設定する」についてご紹介しました。
最後まで読んでいただき、ありがとうございました。
【備忘録】WordPressで記事が消えた場合の確認ポイントと復元方法

WordPressで記事が突然消えてしまった場合、パニックになる必要はありません。以下の手順で確認と復元を試みることができます。

## 1. WordPressの管理画面で確認

### ゴミ箱の確認
- 管理画面 > 投稿 > ゴミ箱 を確認
- 記事が見つかった場合は「復元」をクリック

### 下書きの確認
- 管理画面 > 投稿 > 下書き を確認
- 状態が誤って「下書き」に変更されている可能性あり

## 2. データベースの確認

### phpMyAdminを使用
1. ホスティング管理パネルからphpMyAdminにアクセス
2. WordPressデータベースを選択
3. `wp_posts`テーブルを確認（プレフィックスが異なる場合あり）
4. 以下のSQLクエリを実行：

   ```sql
   SELECT * FROM wp_posts 
   WHERE post_type = 'post' 
   AND (post_status = 'trash' OR post_status = 'draft' OR post_status = 'pending') 
   ORDER BY post_modified DESC
   ```

5. 見つかった記事を復元する場合：

   ```sql
   UPDATE wp_posts 
   SET post_status = 'publish' 
   WHERE ID = [該当する投稿のID]
   ```

## 3. バックアップからの復元

### .wpressファイルの利用
1. 最新の.wpressファイル（All-in-one-Wp-Migrationのバックアップファイル）を見つける
2. WordPressのインポート機能を使用して復元

### Time Machine（Mac）からの復元
1. Finderを開き、.wpressファイルがあった場所に移動
2. 時間表示アイコンをクリック（または `Cmd + Y`）
3. タイムラインでファイルが存在した時点まで戻る
4. ファイルを選択して「復元」をクリック

### Windowsのファイル履歴機能
1. 設定 > 更新とセキュリティ > バックアップ に移動
2. 「ファイル履歴からファイルを復元」を選択
3. バックアップした時点を選び、.wpressファイルを見つけて復元

## 4. プラグインの利用

### バックアッププラグイン
- All-in-One WP Migration、UpdraftPlus、BackWPupなどのプラグインを利用している場合、そこから直接復元可能

## 予防策

1. 定期的なバックアップの実施
2. 複数の場所にバックアップを保存（ローカル、クラウド等）
3. バックアッププラグインの利用
4. 重要な更新前には必ずバックアップを取る

## まとめ

WordPressの記事が消えた場合、パニックにならず冷静に対応することが重要です。上記の手順を順番に試すことで、多くの場合、記事を復元することができます。また、日頃からの適切なバックアップ管理が、万が一の際の強い味方となります。定期的なバックアップの重要性を再認識し、適切なバックアップ戦略を立てることをお勧めします。
LPIC-1 101(Version: 5.0) 合格体験記

# はじめに
実務経験半年の私が、LPIC-1 101試験に合格するまでに行った学習内容を記録している記事です。
**2週間で約30時間**で合格しました。
本記事がどなたかの参考になれば幸いです。

- [LPIC-1 Exam 101](https://learning.lpi.org/ja/learning-materials/101-500/)</br>

後日、LPIC-1 102試験を受験し、こちらも合格することができました！</br>
LPIC-1 102試験の合格体験記は[こちら](https://qiita.com/beagle_masato/items/a44a441a1758014d500c)

## 受験時の私のスペック
- エンジニア歴半年(Python, AWS)
- 保有資格：AWS SAA
- WSLでUbuntuをWindowsPCに入れていたが、ファイル管理のみでLinux知識はほぼ0

## なぜ受験するのか
- 新しく入場する現場ではIaCツールを使用した自動化の業務をすることになり、Linuxの基礎知識が必要であると考えたため

## 学習内容
**ping-tの最強WEB問題集のみ**</br>
 [ping-t](https://mondai.ping-t.com/g/question_subjects#content-large_category_3)</br>
書籍よりもPCやスマホの方がハードルが低く感じられる性格のため、WEBで学習ができるこちらのサイトを利用しました。
</br>
全体を通して2周し、不安なトピックのみ3周しました。
</br>
また、このサイトのAIアシスタントが優秀なため、そちらを積極的に活用しました。</br>
最終的な理解度として、ping-tの問題が9割正解できる程度の状態で試験に挑みました。

### 学習時間
2週間で約30時間の学習をしました。

## 結果
620/800で合格することができました！

## 本番の問題の感覚
想像していたよりも簡単に感じました。本番の問題はping-tの問題集よりも少し難しい程度と予想して受験しましたが、ping-tの問題集と同じくらいの難易度に感じました。</br>
</br>
ただ、選択肢形式の問題でなく、入力形式の問題は自身がなかったです(正解しているかどうかは分かりませんが、恐らく正答率は低いです)。</br>
</br>
ping-tにコマ問という入力形式の問題に対応した問題があるので、不安な方はそちらも合わせて学習すると、万全の状態で試験に挑むことができると思います。ただ、コマ問をせずとも、十分合格可能です。

## 合格を目指すにあたってのTips
とにかく全体感を掴むことが重要だと思います。</br>
</br>
本試験はコマンドだけでなく、システムの内部がどのように動作しているかを問われる問題も出題されるため、1対1対応の暗記ではなく、根本的な理解をすることが効率的に合格するための近道になると思います。</br>
</br>
そのためにも、分からない問題ばかりで苦しいかと思いますが、早めに問題集を1周して全体感を掴み、その後深く理解をして点と点をつなげていくというアプローチをとった方がいいかなと思いました。</br>
</br>
私は書籍に少し抵抗があるため、ping-tを選択しましたが、優良な書籍も多数存在します。書籍に抵抗のない方は書籍で全体感を掴むのもありだと思います。

## 最後に
本記事をお読みいただきありがとうございました。</br>どなたかの参考になれば幸いです。
Redux DevTools 使ってみた

## Redux DevToolsとは
Redux DevToolsは、Reduxの開発に役立つブラウザ拡張機能の一つ。
Redux DevToolsを使用することで、状態(state)を可視化することができます。Reactの開発中やテストで活躍しており紹介したいため記事にします。

## 導入方法
1. 以下リンクよりインストール
   https://chromewebstore.google.com/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd?hl=ja

2. storeの記述の部分に以下のように記述(toolkit未使用)
   ```React 
   const store = createStore(
   Reducers,//作成したReducers
   window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()
   );
   ```
3. storeの記述の部分に以下のように記述(toolkit ver)
   ```React
   const store = configureStore({
   reducer: { myred: MyReducer },//作成したReducers
   devTools: process.env.NODE_ENV !== "production",
   });
   ```
4. 開発者ツールを開く
   windows:Ctrl + Shift + I , F12
   Mac:md + Option + J
   
5. 以下の画像の赤いマークを押下
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795220/d7a294f7-c317-043a-7d4e-4725f3ca7cec.png)

6. Reduxを選択

7. Redux DevToolsが立ち上がる
   ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/795220/11825138-024c-3ae7-16bb-4f9a488a283b.png)

## 実際に見てみる
右上部のタブをStateにするとstoreに保存されているStateが表示される。
また、chartに変えたりすると視覚的にコンポーネントのつながりが見える。
再生ボタンを押すことで、左側にならんだアクションを動作させることができる

## 最後に
以上がRedux DevToolsの簡単な導入事例になります。詳しく調べたい方は以下の記事を参考にしてください。
https://dev.classmethod.jp/articles/redux-devtools/
https://github.com/zalmoxisus/redux-devtools-extension
投稿 100 フェールソフト 2024/10/07

本日の勉強時間　3.5H

フェイルソフト（フェールソフト）とは、故障箇所を切り離すなど被害を最小限に抑え、機能低下を許しても、システムを完全には停止させずに機能を維持した状態で処理を続行（縮退運転）する設計のこと。
ruby eachとmapの違い

mapは既存の配列に情報を加工したいとき、eachは計算如何によっては新しい配列に情報を格納することがある場合とで使い分けられる

    def validEmailList(emailList)
      arr=[]
      def isEmailValid(email)
          count = email.count("@")
          strIndex = email.index("@")
          slice = email.slice(strIndex..-1)
          if email.include?(" ") || count > 1 || strIndex == 0 || !slice.include?(".")
              return false
          else
              return true
          end
      end

      emailList.each{ |email|
          if isEmailValid(email)
              arr << email
          else
              puts "no"
          end
      }
      return arr

    end
【PHPからRuby学習】nilってnullと違うんですか？と思ったので備忘録

PHP4年生からRubyを学び始めた初心者です。

PHPと似ているところがあるよ〜ってインターネットで見たので学んでみるか(^o^)
という安易な気持ちで学び始めたが、なんかちょこちょこ違うぞ...となっている。

今回はnilについて学んだのでメモとしてアウトプット。

## 結論
nullと同じか？と思って調べてみた

**ほぼ同じっぽい。**
でも、nilはNilClassというクラスのオブジェクトらしい。
Rubyではすべての値をオブジェクトとしているからnilもオブジェクトになる。

オブジェクトが所属しているクラスのメソッドでnil判定ができる。

### 判定できるメソッドについて
### `nil?`
対象のオブジェクトが`nil`だったらtrueを返す。
それ以外であればfalseを返す。

### `empty?`
対象のオブジェクトが空文字と空配列の時にtrueを返す。
値が存在している場合はfalseを返す。

また、nilで使用するとエラーが発生する。(NoMethodError)

```

nil.empty?      => undefined method `empty?' for nil:NilClass

```

NilClassにはないメソッドだから判定できないっすってことですね。

### `blank?`
対象のオブジェクトが`nil`、空文字、空配列、半角スペース`''`の時に
trueを返す。

値が存在している場合はfalseを返す。

結構、判定が甘いというか対象の範囲が広い気がする。

https://qiita.com/uw9623/items/851ac5f71e316834c0fa#comment-58aae9f4efab3ca839c4

上記のコメント参照させてもらう。
> blank? は空白文字からなる文字列でも true を返します。
> ```
>
> "\x20\t\r\n\u00A0\u2002\u3000".blank?
> # => true
>
> ```
空白文字でもtrueになるっぽい。

### `present?`
対象のオブジェクトが存在しているかどうかで使用するメソッド。
`blank?`の逆の判定を行う。

対象のオブジェクトが存在している場合にtrueを返す。
対象のオブジェクトが`nil`、空文字、空配列、半角スペース`''`の時にfalseを返す。

## 参考
https://docs.ruby-lang.org/ja/3.3/doc/spec=2fobject.html

https://docs.ruby-lang.org/ja/latest/method/Object/i/nil=3f.html

https://railsdoc.com/page/empty

https://qiita.com/uw9623/items/851ac5f71e316834c0fa
【Git】追跡を維持してファイルやフォルダの名称を変更する方法

## はじめに

単にファイル名やフォルダ名を手動で変更した場合、Gitはその変更を認識せず、元のファイルが削除されたと新しいファイルが追加されたとみなします。
ファイルやフォルダの名称を変更しても変更を追跡し続けるためには、`git mv`コマンドを使用して名称変更をする必要があります。

## `git mv`の構文

```shell
git mv [-v] [-f] [-n] [-k] <source> <destination>
```

- `<source>`: 移動または名前変更したいファイルまたはディレクトリのパス
- `<destination>`: 新しいファイル名または移動先のパス

オプションについては以下参照

https://git-scm.com/docs/git-mv

### ファイル名の変更

例えば、`old_name.txt` というファイルを `new_name.txt` に名前変更する場合、次のようにします。

```bash
git mv old_name.txt new_name.txt
```

### フォルダ名の変更

`old_directory/` というディレクトリを `new_directory/` に移動する場合、次のようにします。

```bash
git mv old_directory/ new_directory/
```

### ファイルの移動

ファイルを他のディレクトリに移動することもできます。
`file.txt` というファイルを `subdir/` というサブディレクトリに移動する場合、次のようにします。

```bash
git mv file.txt subdir/
```

## 注意点

- ファイルやディレクトリを移動または名前変更した後、自動的に変更をステージングします。これにより、`git add` を手動で実行する必要がありません
- 移動先のパスが既に存在する場合、`git mv` はエラーを返します
ブロックとインライン

## インライン要素
自分の幅分しかとらない。

- `a`タグ
- `img`タグ

## ブロックレベル要素

- `p`タグ

### div要素
*コンテンツ分割要素*

| いろんな要素をグルーピングする。 |
|CSSでデザインするときに重宝する。|


### span
*`div`と同じく汎用的に使うが、インライン要素*

文章内を赤文字にする場合、`span`で特定の文字を囲み、cssで文字色を赤にする。
メディアとして使う（ボタンのようなみため）にする場合にも重宝している。

## その他紹介

`sup` //上つき要素 *数字や引用を使う時*
![スクリーンショット 2024-10-08 18.55.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870482/310a1f89-a417-9264-7e6d-69c5aa54ccb1.png)

`sub` //化学式を表現したいとき
![スクリーンショット 2024-10-08 18.57.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3870482/8236f627-d8f9-2cff-5369-36774414d509.png)

## セマンティックな要素
*SEO対策になる*

### main要素
注意事項：検索、ナビ、ロゴなどはメインから除かないといけません。

### nav要素
*目次、サイドメニューなど*

### section要素
`div`よりも*自立した要素*を表す

### article要素
文書、ページ、アプリケーション、サイトなどの中で自己完結しており、（集合したものの中で）個別に配信や再利用を行うことを意図した構成物を表します。

### aside要素
サイドバーやコールアウトボックスなどを表現するためによく使われます。

### header・footer要素
ナビ、ロゴを含んでいる

### time要素
機械可読な形式の日付を記述することができ、検索エンジンの結果を改善したりリマインダーなどの独自機能に使用したりすることができます。

### figure要素
`figure` は HTML の要素で、図表などの自己完結型のコンテンツを表し、任意で <figcaption> 要素を使用して表されるキャプションを付けることができます。図、すなわちキャプションとその中身は一単位として参照されます
```
<figure>
  <img src="/media/cc0-images/elephant-660-480.jpg" alt="Elephant at sunset" />
  <figcaption>An elephant at sunset</figcaption>
</figure>
```
Basic認証のログイン・ログアウト(ちょい裏技)

## 概要

今回は通常ではないBasic認証のログイン・ログアウト方法をご紹介します。

## Basic認証 ログイン方法

URLのホスト名の前に `[username]または[userid]` + `:` + `[password]` + `@` を挿入

例)

`https://username:password@example.com`

`https://userid:password@example.com`

## ログアウト方法

URLのホスト名の前に適当な `[username]` + `@` を挿入

例)

`https://hoge@example.com`

## おまけ

これができると、ブルートフォースアタックし放題じゃ。。。
KDE Plasmaにテーマを入れて見た目を変える

# KDE Plasmaにテーマを入れて見た目を変える  
今回はKDE Plasmaのグローバルテーマというものを利用して、ウィンドウの見た目などを変更する方法について紹介していきたいと思います。

先に結果を見せると、以下のような見た目になります。

### Before  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/3fdff0b5-e58e-b8b3-8ddb-b859c45d3696.png)

### After  
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/e81fe31d-6ddd-be44-ef04-36a060aea567.png)

# テーマをインストール  
:::note warn  
KDE Plasmaのグローバルテーマはアドオンのようなもので、任意のコードを実行することができてしまいます。  
グローバルテーマをインストールする際は自己責任でお願いします。  
:::  
まずは、「KDEシステム設定」を開きます。

<img width="400px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/8b6c1484-876c-6ab3-0d5e-50912b347708.png">

その後、「色とテーマ」をクリックしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/37d2603a-1f07-b798-0db8-94ca0b0c36b0.png)  
「グローバルテーマ」というページに移動するので、右上の「新規入手」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/d87264ff-e4f0-011a-f3d9-b9d9e2604021.png)  
公開されているテーマの一覧が出てくるので、お好きなテーマを選択します。

今回は「Vivid-Dark-Global-6」というテーマを使用していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/6c620866-54cd-a08a-70ed-7bd73447e452.png)  
使いたいテーマを選択し、右上の「インストール」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/98a03379-9a15-cb2c-4c29-8dea577563dc.png)  
※テーマによってはこのようにパスワードを聞かれることがあります。

# テーマを適用  
インストールができたら、次はテーマを適用していきます。  
テーマを適用するには、先程の画面の右上の「使用する」というボタンをクリック、もしくは以下の画像のように「グローバルテーマ」のページから適用ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/edb560ca-d320-992b-fc89-5c1a6a107e1d.png)

# おまけ  
このテーマにはVivid-Blur-Darkという、タイトルバーなどに半透明なぼかしを付けられる「ウィンドウの装飾」があるようなので、以下の画像のように選択しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/4af3d76a-e629-7b71-b676-fb61f74fa5e0.png)

その後、KDEシステム設定の「ウィンドウの管理」→「デスクトップ効果」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/9a799dfd-ff50-e5a4-2bdc-37c3a60974c4.png)

外観の中にある「ぼかし」をONにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/e807f50f-a462-5483-0dbe-f72e6096aea4.png)  
これで、タイトルバーなどの背景にブラーがかかるようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3901368/3bf4e268-6967-6a63-3428-d041fc642cb3.png)

# あとがき  
今回はKDE Plasmaの見た目をカスタマイズする方法について解説しました。  
数十分で急いで書いた記事なので、もしかしたら足りない点や誤字があるかもしれません。  
もし間違いがあれば、コメントで教えていただけると幸いです。
# マーケティング分析とは？ わかりやすく説明 #

# マーケティング分析とは？ #

　マーケティング分析とは、「 **商品やサービスをどのようにして顧客に届け、効果的に売るかを考えるためのデータ分析** 」です。分析を通じて、顧客をどのようにターゲットにするか、どんな宣伝や広告が効果的か、そして価格やプロモーションをどう設定すればいいかなどを計画します。

### カスタマージャーニー設計 ###

顧客が商品やサービスを知り、購入するまでの流れを「カスタマージャーニー」といいます。マーケティング分析では、この流れをデータを使って詳しく調べ、どの段階で顧客にアプローチすればいいかを考えます。これにより、より多くの顧客を獲得しやすくなります。

### 広告効果の測定
テレビやウェブ広告などの宣伝活動が、顧客にどのような影響を与えたかを測定する方法です。広告を出した後、顧客がその商品にどれだけ興味を持ったか、どんな行動を取ったかを分析し、次回の広告戦略を改善するための材料にします。

### デジタルマーケティングKPI分析
KPI（重要な業績指標）とは、マーケティングの成功度を測るための基準です。たとえば、「どれだけ多くの人が広告を見て、実際に購入に至ったか」などのデータを基に、マーケティング活動が効果的かどうかを判断します。これにより、売上を最大化するためにどのKPIに注目すべきかが分かります。

### 価格分析
商品の価格は、売上に大きく影響する要素です。マーケティング分析では、ターゲット顧客がどの価格を魅力的と感じるかを調査します。アンケートなどを使い、どのような価格設定が消費者にとって納得のいくものか、また自社の利益を最大化できるかを探ります。

### 潜在顧客分析
潜在顧客とは、まだ自社の商品を知らないけれど、知れば購入の可能性がある人々のことです。潜在顧客を見つけ出し、どのようにアプローチすれば自社の商品に興味を持ってもらえるかを分析します。これにより、新しい顧客を獲得しやすくなります。

### ターゲットペルソナの特定
ペルソナとは、自社の商品やサービスを買いそうな「理想的な顧客像」のことです。ペルソナを明確にすることで、その顧客層に最適な広告や販売戦略を立てやすくなります。たとえば、年齢や性別だけでなく、ライフスタイルや趣味なども考慮して設定します。

### 消費者行動分析
消費者がどのような理由で商品を購入したのか、その心理や行動パターンをアンケートなどで調査し、分析します。これにより、どんなプロモーションが効果的か、どんな商品が消費者に好まれるのかを予測でき、販売戦略の改善に役立てます。
AI検索エンジンまとめ

# はじめに
[@kat_log](https://twitter.com/kat__log "Twitter")と申します。

いろんなAI検索エンジンまとめメモの共有です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/e6bb1b7a-8490-5013-62e2-2b85ce13ffb7.png)

# Perplexity
AI検索エンジンの王道ツールですね！

https://www.perplexity.ai/

# Genspark
回答速度は速くないですが多角的な視点から分析してくれるのが特徴！

https://www.genspark.ai/

# Felo
日本発のサービスです！

https://felo.ai/search

# Phind
開発者向けのAI検索エンジンです！

https://www.phind.com/search?home=true

# You.com
広告を表示せず、プライバシー保護を重視しているサービスです！

https://you.com/?chatMode=default

# iAsk AI

https://iask.ai/

# おまけ
## Arc Search

https://arc.net/search

## Andi Search

https://andisearch.com/

# 結論
いろんなAI使いましょう〜🙌
カスタマーアナリティクスについてまとめてみたい

**カスタマーアナリティクスとは？**

カスタマーアナリティクスとは、顧客のデータを分析して、ビジネスに役立つ新しい発見を得るための手法です。このデータ分析を通じて、顧客との関わり方を見直したり、マーケティング戦略を改善したりすることができます。たとえば、どうすれば新しい顧客を獲得できるか、休眠状態の顧客を再び活性化させられるか、そして顧客が他のサービスに流れてしまうのを防ぐにはどうしたらよいか、といった課題に対する解決策を見つけることができます。

**顧客行動の分析**
顧客の購買データを分析して、一人一人がどのような行動をしているかを理解します。これにより、例えば「どの商品を一緒に買うことが多いか」や「どの商品を次におすすめできるか」を予測でき、売り上げの増加を目指す戦略をサポートします。

**顧客生涯価値（LTV）の分析**
LTV（Life Time Value）とは、顧客がその企業にどれだけ利益をもたらしてくれるかを予測するための指標です。企業は新しい顧客を獲得するために多くのコストをかけますが、顧客が長く取引を続けるほど利益が増えるため、その顧客がどれだけの価値を持っているかを知ることは非常に重要です。LTVを高めることで、企業は長期的に利益を最大化するための投資をより効果的に行うことができます。

**顧客セグメンテーション（顧客グループの分類）**
顧客を属性や購買パターンごとにグループ分けする手法です。例えば、似たような購入傾向を持つ顧客を一つのグループにまとめ、そのグループに合った商品やサービスを提案することで、効果的なマーケティング戦略を立てられます。これにより、よりターゲットを絞った広告やキャンペーンが可能になります。

**商品分析**
自社の商品が市場の中でどのような位置にあるのか、強みや弱みは何かをデータに基づいて分析します。この分析を通じて、売上を伸ばすためにどのような商品が特に強く、どの商品が改善の余地があるかを把握することができます。

**顧客満足度の分析**
顧客がどの程度満足しているかを、Webアンケートなどを通じて調査し、その結果をもとに改善策を見つけます。たとえば、どの要素が満足度に最も影響を与えているのかを特定し、それを改善するための具体的なアクションを考えます。このプロセスには、アンケートの設計から、結果の分析、そしてその解釈までが含まれます。
AWS SAA(SAA-C03) 合格体験記

# はじめに
AWS Certified Solutions Architect - Associate(SAA)を **20日(63時間)** で合格するまでの勉強方法、使用した教材等を記します。また、SAAを取得したいが、何をすればいいか分からないという方に向けて、おすすめの勉強方法等を提示したいと思います。
この記事が誰かの役に立てればと思います。
※本記事は2024年5月に投稿した記事を再掲したものです。

※AWS SAAとは([AWS公式サイト](https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/))
## 私の勉強開始前の知識レベル
- AWS CLFの資格 取得済み
- 実務で2週間程度コンソール画面を触っていた

AWS CLFの学習に関しての[記事](https://qiita.com/beagle_engineer/items/02ddaf182c04ca43c801)も書いています。

## 学習ルート
以下の手順で学習を進めました。

- **Step 1： kindleの書籍で340問を2周解く(1問1答)**　- 問題集が削除されていました...
ただ、同じようなの問題集がKindleにあると思います！(無責任ですみません...)

- **Step 2： Udemyの問題集を解く(①〜⑤のみ)**　 - [Udemy問題集](https://www.udemy.com/course/aws-knan/?couponCode=LEADERSALE24B)

- **Step 3： Ping-tの問題集を解く(試験レベルのみ)**　 - [Ping-t問題集](https://mondai.ping-t.com/g/question_subjects#content-large_category_2)
___
### 実際の学習時間
- **Step 1(kindleの問題集)**： 2周 (30時間)
- **Step 2(Udemyの問題集)**： 模試①〜⑤ 各1周 (25時間)
- **Step 3(Ping-tの問題集)**： 試験レベル1周＋解けなかったところ1周 (8時間)

## なぜこの問題集をしたのか
お金をあまりかけたくなかったため、これら問題集をしました。</br>
AWS CLFを取得済みであるため、教科書等でのインプットはしませんでした。AWSのサービスについて最低限の知識は持っていたため、いきなり問題集をといても全くわからないと言うことはなく、進めることができました。CLFレベルの知識を持っている方はいきなり問題集を解いていった方が効率的かもしれません。</br>
ただ、私の場合、問題を多く取り組みすぎて、深く理解することができていなかった部分もありました。不安な内容がある場合は、公式ドキュメントや参考書を見て理解していく方がいいです。


## 試験の結果
以上の勉強内容、勉強時間で試験に挑んだ結果、合格できました。</br>
130分の試験時間で念入りに見直しをして、残り10分程度で退場しました。
スコアは803/1000でした！

## おすすめの勉強方法
やはり問題をこなすことに限ると思います！<br>
私が複数の問題集をやった結果、Ping-tの問題集が最も試験の内容に近いと感じました。そのため、Ping-tの問題集をやりこむことをお勧めします！Ping-tは解説に図が載っており、分かりやすく、なおかつ試験の内容に近いのでおすすめです！<br>
ただ、欠点をあえて挙げるのであれば、本番レベルよりも少し優しめの問題が多いかなと言う印象であったため、Ping-tをやりこんだ上で不安だったらUdemyの問題集に取り組むと良いと思います。Udemyは複雑な問題が多く、点数が取りにくいですが、しっかり取り組むと本番が少し簡単に思えるので、おすすめです！（時間がない場合はPing-tのみでいいかもしれません）

## 最後に
SAAの取得は、CLFと違いしっかりとサービス間の繋がりを知っていないと解けない問題が多く、なかなか難しいです。しかし、SAAで培った知識はAWSの理解にとても役立つものだと思います！SAAの取得を強くお勧めします！
この記事がどなたかの参考になれれば幸いです。
Ebitengineのシーンマネージャーを作ってみた

# これは何？

ゲームを作ろうとすると複数の画面(シーン）を遷移する必要がありますが、実際に管理部分を作っていると結構大変なのでパッケージにして使いやすくしてみました。
（下の例のように、同じ画面同士で遷移し合うような時に何も考えないと循環参照とかがめんどくさくて死ぬ）

# コード

```go
package main

import (
	"image/color"
	"log"

	"github.com/hajimehoshi/ebiten/v2"
	"github.com/hajimehoshi/ebiten/v2/ebitenutil"
	"github.com/hajimehoshi/ebiten/v2/inpututil"
	"github.com/krile136/sceneManager/game"
	"github.com/krile136/sceneManager/game/effectType"
	"github.com/krile136/sceneManager/game/effects"
)

func main() {
	game := game.MakeGame(320, 240)

	game.SetInitScene(&Top{})
	game.AddScene(&Next{})

	ebiten.SetWindowSize(640, 480)
	ebiten.SetWindowTitle("Hello, SceneManager!")
	if err := ebiten.RunGame(game); err != nil {
		log.Fatal(err)
	}
}

// Top Scence
type Top struct{}

func (t *Top) Init() error {
	return nil
}

func (t *Top) Update() error {
	if inpututil.IsKeyJustPressed(ebiten.KeyEnter) {
		outSceneEffect := &effects.SceneEffect{
			Type:  effectType.CircularClosing,
			Clr:   color.RGBA{R: 24, G: 235, B: 249, A: 255},
			Frame: 60,
		}

		inSceneEffect := &effects.SceneEffect{
			Type:  effectType.CircularOpening,
			Clr:   color.RGBA{R: 24, G: 235, B: 249, A: 255},
			Frame: 60,
		}

		op := &game.TransitionOptions{
			OutSceneEffect: *outSceneEffect,
			InSceneEffect:  *inSceneEffect,
		}
		game.Change("Next", op)
	}

	return nil
}

func (t *Top) Draw(screen *ebiten.Image) {
	ebitenutil.DebugPrint(screen, "top!")
}

// Next Scene
type Next struct{}

func (n *Next) Init() error {
	return nil
}

func (n *Next) Update() error {
	if inpututil.IsKeyJustPressed(ebiten.KeyEnter) {
		outSceneEffect := &effects.SceneEffect{
			Type:  effectType.FadeOut,
			Clr:   color.RGBA{R: 0, G: 0, B: 0, A: 255},
			Frame: 30,
		}
		inSceneEffect := &effects.SceneEffect{
			Type:  effectType.FadeIn,
			Clr:   color.RGBA{R: 0, G: 0, B: 0, A: 255},
			Frame: 30,
		}

		op := &game.TransitionOptions{
			OutSceneEffect: *outSceneEffect,
			InSceneEffect:  *inSceneEffect,
		}
		game.Change("Top", op)
	}
	return nil
}

func (n *Next) Draw(screen *ebiten.Image) {
	ebitenutil.DebugPrint(screen, "Next!")
}
```

# 動かすとどうなるの？

- Top画面からNext画面
    - 画面の中央に向かって円が狭まっていき、切り替えと同時に円が広がってNext画面が開きます
- Next画面からTop画面
    - フェードアウト/フェードインをして画面が切り替わります

# リポジトリ

https://github.com/krile136/sceneManager

よかったらスター押していってね⭐️
React初心者がStyled-Componentsを使って思ったこと

## 初めに
先日初の制作物として自分用のポートフォリオサイトを公開しました。

その時に使っていたStyled-Componentsについてまとめていきます。

## 自己紹介
こんにちは。yabuです。

今年大学に入りプログラミングの勉強を始め、少しずつプログラミングがどんなものなのか、プログラミングで何をすることができるのかがわかってきました。

今の制作物はポ－トフォリオサイトのみですがこれからたくさん作っていきたいと思っています。

この記事は備忘録や自分で成長を感じるため、そしてなによりもアウトプットのために書いています。

おまけに共有できたらなと思っています。

初心者視点だとこのような考えもあるのだな程度に見ていただけたら幸いです。

## Styled-Componentsとは?

まずStyled-Componentsって何と思われた方がいるかもしれません。その方のために少しだけ説明させていただきます。

Styled-ComponentsとはCss in Js のうちの一つ。　Javascript内にCssを書いても動作するようなプログラミング方法です。

これを使うことによって要素に名前を付けて見やすくなったり要素ごとにCssをかき分けたりできます。



本来ならreturnないに下のような形で書くと思います
```App.jsx
<div className='Profile'>
    <h3>My Name</h3>
    <p>My Profile</p>
</div>
```

```App.css
.Profile{
    background-color:#f9f9f9;
    padding:20px;
    border-radius:5px;
}
.Profile h3{
    font-size:40px;
}
.Profile p{
    font-size:8px;
}
```

このように書くと思いますが、Styled-Componentsではまずはインストールします。

```
npm install styled-components
```

これでインストール出来たら下のように記述して、コードを書いていきます。

```App.jsx
import React from 'react';
import styled from 'styled-components';

const ProfileContainer = styled.div`
background-color:#f9f9f9;
padding:20px;
border-radius:5px;
`
const Title = styled.h3`
font-size:40px;
` 
const Description = styled.p`
font-size:8px;
`

const App = () => {
    <ProfileContainer>
    <Title>My Name</Title>
    <Descripion>My Profile</Descripion>
    </ProfileContainer>
}

export default App;
```

このように記述します。
それでは感想を次のところで書いていきます。
## メリットに感じたこと

メリットに感じたことはclassの名前を考えることがなかったので簡単だった。
これはとても自分にとってはメリットでした。

一目で何を書いているタグなのかがわかりやすく情報の管理が適切にできた。
これも重要で、分かりやすいことでタグの中に`<ListContainer>`とかがあれば、
ここにlistがたくさんあるんだなーなどと感覚で分かるようになるのでかんがえることが減ってやる気も維持できます。

そして、Cssファイル分の一つのファイルが減ること。
また、Reactはコンポーネントとしてファイルが増える傾向がある？？ので一つ一つのCssのファイルを減らせるのならこれだけで多くのメリットなのではないでしょうか。
## デメリットに感じたこと
こちらがとても大きく感じましたが、初心者ゆえのものだと思うのであまり気にしなくてもいいでしょう。

Cssでいうところの
*{}がわからず作りずらかった。
そして、レスポンシブ対応がしずらかったことと、
ひとつひとつのものにstyledを付けるのが少しめんどくさかったということ。
これら３つが目立ったが、上手なプログラマーはこの課題をどのように解決してコードを書いているのか、気になっています。
それらを調べて、脱初心者を目指します！！
## 最後に
今回はサイトを作るときにStyled-Componentsを使ってメリットデメリットを感じながら作っていまして、わたしにとってはcssファイルを共有して、インポートしてしまった方法が一番楽に感じました。ほかにもcssを付ける方法があるのでそれもしてみようかなと思います。
kubernetesのいろんなリソースの話

## service
deploymentを更新した時にpodが作り変わるとpodのIPアドレスも変わっちゃうのでアクセスするのがめんどくさい！deploymentはIPアドレスを持ってないので。
そこで使えるのが**service**。いい感じにpodへの橋渡しをしてくれる。
serviceにもいろんなtypeがある。
**1.ClusterIP**
デフォルトで設定されてるやつ。クラスタ内部のIPアドレスでservice公開。クラスタ内部のみ疎通可能
**2.Nodeport**
全てのNodeのIPアドレスで指定したポート番号を公開。つまりクラスタ外からもアクセスが可能になる。
他にもあるけど自分で調べてくれよな

ちなみに
デバッグの順番はアプリケーションの近くから分けてやろうな。
pod > replicaset > deployment > service > ingress

## ConfigMap
環境変数など、コンテナ外部から値を設定したい時に使うリソース。例えば環境ごとに異なるデータベース名だったりユーザー名とか。
二つのやり方があるよ
**1.コンテナの環境変数として読み込む**
例）configmapでPORTを変換してApplyするとDeploymentのPORTを書き換えられる。つまり環境変数をconfigmapから変えられるってこっちゃ。けどこれはアプリケーションの再作成が必要やねん。そこで二つ目や
**2.Volumeを使ってアプリケーションのファイルとして読み込む**
Volumeってなんですか。podに設定できて、消したくないファイルを保存したり、pod間でファイルを共有したりするファイルシステムを利用するのに使う。
やり方的にはボリュームを使ってコンテナに設定ファイルを読み込ませる。（他にもあると思います）こっちのやり方だとアプリケーションの再作成が必要ないから本番環境でも現実的だと思う。知らんけど

## Secret
ConfigMapにあげたくない秘密を入れるリソース。Configmapと権限を分けることで見られたくない情報をこっちに書くみたいな使い方ができるんだなも
SecretのデータはBase64でエンコードして登録する必要があります。echo -n <エンコードしたい文字列> | base64 みたいな感じで。
これもやり方が二つあって、configmapと同じなので省略。

## Job
一回限り実行したいpodに利用する。実行するとpodの実行が成功するまで指定した回数リトライを実行する。
## CronJob
Jobを定期的に実行するためのリソース
CronJob　　　　　Job　　　　　pod
1分ごとに　　＞　Aアプリ　＞　Aアプリ
Aアプリ実行　　　実行
みたいな感じ。
マニフェストのscheduleにいつJobを実行するのかを書く。LinuxのCronと同じ書き方。
***** 左から分、時、日みたいな感じで、*は最初から最後って意味。例えば分だったら0~59
たとえば * /2 * * * * みたいな感じだと2分ごとに実行するよーって意味。このCronJobを実行すると2分ごとにJobができてそのJobが一つPodを作る

こんなところですわ。linuxの勉強せな
CSSで扱う長さの単位（em, rem, lh, rlh）

## はじめに

cssで長さを指定するとき、`10px`みたいに絶対的な値を指定することもできますが、`em`や`lh`などで相対的な値を指定することもできます。

相対的な長さを指定するための単位について整理してみます。

情報元はMDNのこのページです。

https://developer.mozilla.org/ja/docs/Learn/CSS/Building_blocks/Values_and_units

## `em`と`rem`

結論から言うと`em`は「**親要素**のフォントサイズに対する相対値」で、`rem`は「**ルート要素**（通常は`<html>`）のフォントサイズに対する相対値」です。`rem`は`root em`の意味。

具体的に言うと、`1.3em`は「親要素のフォントサイズの1.3倍」であり、`0.9rem`は「ルート要素のフォントサイズの0.9倍」になります。

先程リンクを貼った情報元ページの『em と rem』にあるサンプルが分かりやすいので引用しますが、`em`でサイズを設定した要素が入れ子になっていると、ネストが深くなるたびに文字サイズが変わります。`1.3em`であれば、子は親の1.3倍、孫は子のさらに1.3倍、という具合です。

![スクリーンショット 2024-10-08 13.08.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760224/4ed5a271-1339-8011-38fb-770514159cf9.png)

### 使い分け

`em`は親要素に対する相対値、つまり構造の影響を受けるので、あとあとHTMLの構造が変わったり入れ子が深くなったりした際に、当初の想定とは違うフォントサイズになってしまう可能性があります。

ページ全体のフォントサイズは決まっていて、特定の箇所では大きさを変えたい、みたいなシンプルな要件であれば`rem`の方が扱いやすいと思います。


### 余談: `em`の由来

`em`はもともと活字組版において使われていた長さの単位で、名前の由来は大文字の'M'のようです。昔は`M`が縦横いっぱい使っていたので、長さの単位になっていたのだとか。

https://ja.wikipedia.org/wiki/Em_(%E5%8D%98%E4%BD%8D)


## `lh`と`rlh`

`lh`と`rlh`は行の高さを相対的に指定するための単位。`lh`は「要素そのものの行の高さに対する相対値」で、`rlh`は「ルート要素（通常は`<html>`）の行の高さに対する相対値」。'r'がついていればルート要素に対する相対値になるのは`rem`と同じです。

つまり、`1.5lh`は「その要素の行の高さの1.5倍」であり、`0.5rlh`は「ルート要素の行の高さの0.5倍」ということです。

これもMDNのページの『行の高さの単位』にあるサンプルですが、こういうテキストの高さに関連する装飾で使えそうです。

![スクリーンショット 2024-10-08 14.12.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760224/6c8caabc-4348-b48e-1a3a-91b1eef578c4.png)

### 余談: `lh`の由来

`lh`はシンプルに`line-height`の略ですね。
AWS Cloud Quest がAWS入門者におすすめできるか確認する

# 1 はじめに
- 部署に「AWSこれから始めたいです」という人が加入した。「AWS Cloud Quest」という、入門者が楽しく学べるサービスがあるらしい、という噂を聞いたため、自分で実際にやってみて、おすすめできるかを確認する。

# 2 AWS Cloud Quest とは？（自分の理解）
- 公式　https://aws.amazon.com/jp/training/digital/aws-cloud-quest/
- 公式の説明だけだと何だかよく分からないため、実際に試した人のブログなどを見て予習した。
    - [AWS Cloud QuestでAWSの基本サービスを復習してみた](https://tech.dentsusoken.com/entry/2024/04/30/AWS_Cloud_Quest%E3%81%A7AWS%E3%81%AE%E5%9F%BA%E6%9C%AC%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%BE%A9%E7%BF%92%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F)
    - [AWS Cloud Questをやってみた](https://www.cloudbuilders.jp/articles/1234/)
- おおよそ以下のような感じと理解した。
    - いろいろなコースがあって、Cloud Practitionerコースだけ無料公開されている。(他のコースはサブスク課金が必要)
    - Cloud PractitionerコースではEC2インスタンス起動などの基本的な概念が学べて、なかでAWSマネコン操作のハンズオンもある。
    - アバターを作って3Dの街を探検・開発するロールプレイング要素もある。
- 自分でやらないでおすすめするのも心苦しいので、無料のCloud Practitionerだけ実際にやってみることにした。
- 見た目はいろいろ冒険できそうな感じで楽しそう！

![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189302/03ed0b5c-531d-d50f-20dd-1368e12cec95.png)

# 3 Cloud Practitioner コースをやってみる

## 3.1 基本的な流れ
- 困っている人と話すと課題が提示され、学習開始となる。
- 課題は以下のサイクルで1セット。
    - 学習：　これから学ぶ構成の説明、使用するAWSサービスの説明
    - 計画：　設定する内容の説明
    - 実践：　AWSマネコンを開き、ステップバイステップの詳細な手順書に従い、実際に設定を行う
    - DIY：　引き続きAWSマネコンで、自分で手順を考えて追加の設定を行う
- 課題をクリアして再度困っていた人と話すと、お礼されて町が発展したり自分のレベルが上がったりする 。

## 3.2 課題の概要
- Cloud Practitionerコースの課題は12セットあり、概要は以下。

|課題|概要|
|---|---|
|クラウドコンピューティングの基本 | S3でWebホスティング | 
|  コンピューティングの基礎  |  EC2インスタンス(Webサーバ)を起動  | 
|  クラウドのコスト見積もり  |  Pricing Calculatorでコスト概算見積もり  |
|  ネットワークの概念  |  EC2インスタンス(Webサーバ)へのアクセスをInternetGatewayやSecurityGroupを設定して実現 |  
|  VPCへの接続  |  VPCピアリングで別VPC間のインスタンスの通信を実現 |　
|  リレーショナルデータベースの実装  |  RDS及びリードレプリカを作成  |　
| セキュリティのコアコンセプト | EC2Readonlyアクセス権を持つIAMグループを作成し、グループにIAMユーザを所属させる|
| クラウド上のファイルシステム | EFSファイルシステムを作成しEC2インスタンスからマウント |
| アプリケーションの自動修復とスケーリング | オートスケーリンググループを作成し、自動で台数を変更する設定を実施|
| 高可用なウェブアプリケーション | LB配下のEC2オートスケーリンググループを複数AZにまたがって配置|
| NoSQLデータベースの実装支援 | DynamboDBにテーブルやアイテムを作成|



## 3.3 所要時間
- 私は一応AWSそれなりに触っているので、「これ初めてやるな～」という操作はなかったし、何をやっているのかも理解できた。その状態で1セット30分くらい。
- もしきちんと説明を読みながら、初見の操作をするとした場合、1セット1時間以上かかりそうな感じ。

# 4 所感
- 良かった点
    - 実際にAWSマネコン操作ができるので、書籍や机上だけでの学習と比較して理解が進みやすい。
    - 自分のAWSアカウントでやるわけではないため、AWS利用料やセキュリティの心配をしなくてよい。（特に入門者の場合、インスタンスを起動しっぱなしにする費用リスクや、ソースアドレス0.0.0.0/0でアクセス許可してしまうなどのセキュリティリスクがあるため）
    - 完全に手順通りにAWSマネコンで操作する(実践)⇒その操作を応用して、自分で考えて追加の操作をやってみる(DIY)、という流れになっており、後者の部分は自分で考えなければならず、そこが勉強になると思った。（例：RDSのセクションの場合、1台目のRDSインスタンスは手順通りに作成すればよいが、その後「リードレプリカを追加せよ」という課題が出て、それは自分で手順を探して対応しないといけない）

- 残念な点
    - 3Dワールドの表示のため、そこそこのPCスペックが要求される（PCによっては起動できなかったり、できても動作が重かったりした）。手元のPC(2021年製、CPU Ryzen 7, MEM 16GB)でも3Dワールド部分のロードや表示はややもっさりする感覚。そのため、あまり3Dワールドを探検する意欲が湧かなかった。

- 入門者におすすめできるか？
    - 入門者で、これからCloud Practitionerとかにチャレンジしようかな？という場合には、AWSの基本的なサービスの使い方が実際のマネコン操作で学べるため、おすすめできるコンテンツと感じた。（「まずこのコースを一通り終わらせてみよう！」というのにはちょうどよい感じ。）
【Laravel】XServerでメールをJobで送信するようにする

# はじめに

こんにちは、エンジニアのkeitaMaxです。

Xserverでメールを送る処理を作成したいと思った時の話です。

本当はSupervisorで動かしたかったのですが、XServerだと動かすことができなさそうだったので困った話です。

Lravael10を使用しました。

# 実装方法

XServerのCronを設定して、Laravelのスケジューラを動かし、
スケジューラに設定してあるqueueを動かす＋リスタートするバッチを動かすようにします。

# XServerのCron設定

まずXServerのCron設定からCron設定追加をします。

毎分動かすようにするので以下のようにします。

![スクリーンショット 2024-10-08 22.07.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3715123/d87c3f86-24fa-00d6-e680-b45b025ed874.png)


```
cd /home/xxxxxxxx/hack/src && /usr/bin/php8.2 artisan schedule:run >> /dev/null 2>&1
```
phpは自分のバージョンを記載してください

またxxxxxxxxは自分のXserverのIDを入れてください。`xs〜〜〜〜`みたいなやつです。

# Laravelの設定

`app/console/Kernel.php`に以下を追加します。

```php:Kernel.php
<?php

namespace App\Console;

use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;

class Kernel extends ConsoleKernel
{
    /**
     * Define the application's command schedule.
     */
    protected function schedule(Schedule $schedule): void
    {
        $schedule->command('queue:restart')->everyMinute(); // 追加
        $schedule->command('queue:work')->everyMinute(); // 追加
    }

    /**
     * Register the commands for the application.
     */
    protected function commands(): void
    {
        $this->load(__DIR__.'/Commands');

        require base_path('routes/console.php');
    }
}

```

これで準備万端です。

# 動かす

ソースをXServerにあげると動くようになり、メールが送られます。



# おわりに

この記事での質問や、間違っている、もっといい方法があるといったご意見などありましたらご指摘していただけると幸いです。

最後まで読んでいただきありがとうございました！

# 参考

https://memoryclip.uchiida.com/2022/09/run_laravel_queue_worker_with_cron/
supabase.jsでsupabaseUrlを受け取れず、chrome devツールに「Error: supabaseUrl is required.」が出ている

# はじめに
supabaseからのデータを、subapase-clientを利用して使用しようとしたが、うまくいかなかった

# 問題
supabase.jsでsupabaseUrlを受け取れず、developerツールに以下エラーが出ている。

- src/utils/supabase.js
```
import { createClient } from "@supabase/supabase-js";

console.log("import.meta.env", import.meta.env);

const supabaseUrl = import.meta.env.VITE_SUPABASE_URL;
const supabaseKey = import.meta.env.VITE_SUPABASE_ANON_KEY;

console.log("supabaseUrl", supabaseUrl);
console.log("supabaseKey", supabaseKey);

const supabase = createClient(supabaseUrl, supabaseKey);

export default supabase;
```

```
Error: supabaseUrl is required.
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881019/0a149f73-7ac9-a068-c663-d7a80179d1ba.png)


# 解決方法
.envのディレクトリを間違えていた。
src/.envとなっていたが、.envとプロジェクトのルートに置くべきだった。

誤り(src/.envになっている)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881019/b035b2a0-91da-604f-cc68-4415e1a8e17a.png)


# おわりに
かなり時間がかかってしまいました。
.envのディレクトリにも気をつけるようにします。
AWS CLF(CLF-C02) 合格体験記

# はじめに
実務未経験から最短でAWS CLFを取得する方法を考え、実践した話です。
**6日間、25時間**の学習で合格しました。
※本記事は2024年4月に投稿した記事を再掲したものです。

- [AWS Certified Cloud Practitioner](https://aws.amazon.com/jp/certification/certified-cloud-practitioner/)

## 私のスペック
- 理系大学院卒(非情報系)
- PCに抵抗はないが、IT技術は全くと言っていいほど知らない

## なぜ受験するのか
- AWSが新卒入社した会社で使われている技術であったため
- 研修の1つの達成目標であったため

## 学習計画
なるべく単純でお金のかからない学習方法を考えました。
- **Step 1: AWS Skill Builderの動画を見る**
  　- [AWS Cloud Practitioner Essentials](https://explore.skillbuilder.aws/learn/course/1875/aws-cloud-practitioner-essentials-japanese-na-ri-ben-yu-shi-xie-ban)

- **Step 2: AWS認定資格 WEB問題集＆徹底解説で問題を解く**
  　- [AWS CLF問題集](https://aws-exam.net/clf/)

- **Step 3: 理解できなかった点はAWS公式ドキュメントを参照**

### 実際の学習時間
- **AWS Skill Builderの動画**: 1周 (8時間)
- **AWS CLF問題集**: 2周+2周目の間違った問題 (16時間)
- **AWS公式ドキュメントを参照**: 1時間

所要日数：6日

## 本番の問題の感覚
本番の試験は、「AWS認定資格 WEB問題集＆徹底解説」の問題を完璧に答えられるようになっていれば問題なく解ける難易度でした。同じ問題が出て、即答する問題もありました。

ただ、AWS Cloud Adoption Framework（AWS CAF）というサービスと取り扱った問題が3問出ましたが、「AWS認定資格 WEB問題集＆徹底解説」では取り上げられていません。
そのため、準備万端の状態で試験に挑みたい方は、他の教材or問題集をやった方がいいです(オーバーワークな気もしますが)。

## 短期間の合格を目指すにあたってのTips
短期間で合格を目指すには、インプットだけの時間は最低限に抑え、問題演習をしながら、必要な部分のみ繰り返しインプットをするというに時間の使い方をする必要があると思います。
そのため、「AWS Skill Builder」の動画を見るのは1度だけにするのが良いかと思います。

## 最後に
AWS CLFの取得は、十分な勉強と準備が必要ですが、やれば誰でも合格できる試験だと思います。
本記事がどなたかの参考になれば幸いです。
Azure Cosmos DB データエクスプローラーで、データ表示した際のデータの「Refresh」方法

# 背景

データエクスプローラーUIがちょっと新しくなった感じなんだけど、非情に小さな「Refresh」ボタンに騙されたので、対処法と共に、備忘録

# 何が問題か？

Queryを記述した場合は、[Execute Query ▷ ] があるので問題ないけど、Container - items を選択して表示した場合、データの更新ボタンが無いのが問題。
F5, CTRL+R でページ更新はしたくもないし・・
<br>
ということで、探してみたが・・

- Refresh (更新) ボタンが、ぱっと見ない。
- 見つけた！と思ったら小さすぎる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/94afc7a9-b1d4-4360-0f49-73f5587284e5.png)

- と思ったら、これ、実は<font color=red>メニュバーの更新</font>?。目的がよくわからない・・

# データの更新の仕方

一応、２つほど見つけたが、なんか納得いかない

## 1. ・・・メニューから、[ Refresh ]

Refresh ぐらい簡単に押させてください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/2f5e30aa-e957-a93b-d20e-c02822299625.png)

## 2. [ Edit Filter ] で、編集せずに、即座に [ Apply Filter ]

二回押すだけだから、まぁ、楽ではあるけど・・本来の目的とは違うよね？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120072/a408ded4-e658-0fe5-172c-a45b15fff54b.png)

# あとがき

いっそ bookmarklet で、[ apply filter ] か、[ Refresh ] を追加させた方がよかったのかもしれない