OmniAICreator/Qiita-1.07M huggingface dataset:
[Dify]ローカルのLangfuseをローカルのDifyに繋げる

## はじめに

ローカルのLangfuseをローカルのDifyに設定する時一箇所工夫する必要があったので記録用に残します。

## Langfuse設定
https://langfuse.com/docs/deployment/local

ではまず以下に従って、dockerコンテナの立ち上げてください。
```
# Clone the Langfuse repository
git clone https://github.com/langfuse/langfuse.git
cd langfuse
 
# Start the server and database
docker compose up
```

そうするとhttp://localhost:3000
で立ち上げることができるので、アカウントを作成してログインしてください。
そうすると以下のような画面が表示されます。
![スクリーンショット 2024-07-06 10.46.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/1bd59729-39bb-73a8-a96b-fb1809412f0c.png)

そしたら[New project]からプロジェクトを作成してください。
作成したら、以下のような画面になるので、[Create new API keys]をクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/2dd6ada5-4079-3932-26a9-de6b6d3d728a.png)

そうすると以下のようにAPIkeyたちが作成されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/5adf575e-e92c-58dc-5364-a872032c8b10.png)

## ngrokでhttpsに変換

ngrokをまずinstallしてください。
その後に以下を実行してください。
```ngrok
ngrok http 3000

```

以下のように表示されます。その時赤枠のURLをDifyの設定で使用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/11aed20e-ef52-2b85-2302-baf89ca9c5ba.png)

## Difyでの設定

Chatbotかなんかを作成して、設定のページに移動してください。そうすると画面上部に以下のような設定部分が出てきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/cd9f04e6-6ac4-0ae4-09d1-0f582349378d.png)

そしてLangfuseを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/f0c75f64-ddcb-74cc-6120-b1959ea57dfd.png)

そして設定に関してはPublicKeyとSecretKeyに関してはLangfuseで作成した設定を入れてください。
Hostに関しては、localhost:3000は入れないでください。
**ngrokを使った時に生成されたURLを使用してください。**
※ DifyではHost部分でhttpを使えないようにしているみたいです。

![スクリーンショット 2024-07-06 11.00.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/f231007b-7e44-39a4-24a4-1f9f9c1094f8.png)

これで完成です。ただこれだとngrokを切るたびにホスト名も変わってしまうのが注意点です。



## 確認
以下のように聞いてみました。
![スクリーンショット 2024-07-06 11.00.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/9716f2f4-8716-9274-9a08-b03288f63c27.png)

Langfuseで受け取れていますね！

![スクリーンショット 2024-07-06 10.59.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376115/b42a9d02-e4ed-1625-6d81-df59630351df.png)

## 最後に

今回はローカルで立ち上げたLangfuseをローカルのDifyに接続しました。
DifyではHost部分でhttpを使えないようにしているみたいなのでngrokで設定を挟んでいます。
これでLangfuseを使い倒せますね。

Xやってるので気になる方はフォローお願いします。
https://x.com/hudebakonosoto
IsaacSimで四足歩行ロボットを動かしてみる

# 1. はじめに
先日投稿したの記事[IsaacSimでLIMO（無人走行UGV）をROS2で動かす](https://qiita.com/bebebefu/items/febee72d7cf60ffd08de)で、四足歩行ロボットを試してみたいとしておりましたが、Isaac Simの記事を調べたところ以下のサイト[[1]](#参考記事やサイト)でサンプル的なものを用意していることがわかりました。

https://docs.omniverse.nvidia.com/isaacsim/latest/features/robots_simulation/ext_omni_isaac_quadruped.html

というわけで今回は上記の記事で公開されておりますUnitree A1を読み込んでキーボードで動かすデモを、私の環境で試してみたのが本記事の内容になります。

やっていることは上記の「Quadruped Extension」で紹介されている内容をそのまま実行しただけで、自分なりのアレンジは何もしてないです。しかしUnitree A1の動きが[[1]](#参考記事やサイト)のサイトで公開されている動画とちょっと違うようにも見えましたので、結果のところに私の環境で動かしたときの動画も入れておきます。

**注**：Standalone Examplesで紹介されている「a1_vision_ros2_standalone.py」も試してみたのですが、私の環境では読み込むことができませんでした。

# 2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OS: Ubuntu22.04(WSL2ではなくPCに直接インストール)
- Isaac Simバージョン: 4.0(2023.1.1では読み込むのに時間がかかりすぎ4.0の方を使いました)
- Nvidia Driver: 535 

# 3. 手順及びシミュレーション結果
## 3.1 Isaac Simの起動
書く必要もないぐらいですが、Omniverse Launcherから以下の図で赤枠で示したところをクリックして起動します。

![Screenshot from 2024-07-06 09-55-15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/b48012ae-d51d-9c5c-0c91-c9db01dc1ddd.png)

![Screenshot from 2024-07-06 10-31-13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/a81315cf-5e9e-3e7a-7220-c2d5273bc6de.png)


## 3.2 Unitree A1のモデルの読み込み
以下の図において赤枠で囲んだ"Isaac Examples"をクリックした後に黄枠で囲んだ"Quadruped"を選択します。

![Screenshot from 2024-07-06 10-09-19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/15bc5e45-c512-5ba5-1046-fa9a3960217c.png)

そうすると以下の図において赤枠で囲んだダイアログが出てきますので、黄枠で囲んだ"LOAD"をクリックします。

![Screenshot from 2024-07-06 10-09-32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/a30e7597-109a-69b5-ce21-77f6e50ada06.png)

そうしますと以下のようなUnitree A1のモデルが読み込まれます。

![Screenshot from 2024-07-06 10-11-21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3581920/a7e1a804-b4ec-467a-95b0-5cf4590996f1.png)


## 3.3 Unitree A1のモデルの読み込み
ここで▶ボタンを押してシミュレーションを開始した後に、up arrow キーボードを押して前進させた後にDown Arrowキーボードを押して後進させたときの動画を以下に示します。すごく遅いですが、前進と後進をしていることがわかります。[[1]](#参考記事やサイト)で紹介されている動画と比べてローリングが大きいなと印象です。

<iframe width="560" height="315" src="https://www.youtube.com/embed/R2goH8Vhqt4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

# 4. まとめ
[[1]](#参考記事やサイト)の記事の手順により、私の環境でも四足歩行ロボットUnitree A1のモデルを読み込み、キーボードによる遠隔操作で動かすことはできました。今後は他の四足歩行ロボットモデル（Unitree GO1やUnitree Go2)でも同じことができるのかや、ROS2で四足歩行ロボットを動かすことなどについて取り組んでいきたいと考えています。
（ROSやROS2で四足歩行ロボットをIsaac Simで動かすことについて調べてはいるんですが、すごくハードルが高そうで、、だれか教えてほしいなあと思っています。）

# 参考記事やサイト
[1][Quadruped Extension](https://docs.omniverse.nvidia.com/isaacsim/latest/features/robots_simulation/ext_omni_isaac_quadruped.html)
wslでelixir その152

# 概要
wsl(wsl2じゃない)で、elixirやってみた。
練習問題やってみた。

# 練習問題
Livebookで、nodeでセッション間をつなげ。

# 手順

# セッション０で、確認

```
{node(), Node.get_cookie()}


```
```
{:"7w7unpqp-livebook_b37bas7g@DESKTOP-6CLR6AB",
 :c_owz8V_XuIYyFiG5fyUAsloqWiy2Pfcca9QvLPYfXycSXRkMXxrdt}

```
# セッション１で、確認

```
{node(), Node.get_cookie()}


```
```
{:"fvj6cxmm-livebook_b37bas7g@DESKTOP-6CLR6AB",
 :c_owz8V_XuIYyFiG5fyUAsloqWiy2Pfcca9QvLPYfXycSXRkMXxrdt}

```
# セッション１からセッション０へつなぐ。

```
:pong = Node.ping(:"7w7unpqp-livebook_b37bas7g@DESKTOP-6CLR6AB")

```

# セッション１からセッション０の関数を実行する。

```
Node.spawn_link(:"7w7unpqp-livebook_b37bas7g@DESKTOP-6CLR6AB", fn -> 
	node() 
	|> IO.puts() 
end)
```

```
7w7unpqp-livebook_b37bas7g@DESKTOP-6CLR6AB
```

以上。
【Docker】Dockerを使い始めてわかった便利さとメリット

# はじめに
最初にDockerのコードを見た時や環境構築でエラーが続出し、全く立ち上がらなかった時、「**Dockerは難しそうだし、触りたくない**」と思っていました。

しかし、全くの初心者から一通りDockerを使って開発を進めるうちに、その便利さやメリットが少しずつ分かってきました。ここでは、私が実感したDockerの良さについてまとめます。

https://www.docker.com/ja-jp/

# 環境構築さえしてしまえばこちらのもの
Dockerで一度環境構築を済ませてしまえば、開発がかなりスムーズに進みました。

ここでは特に「**異なるOS間でも開発できること**」と「**バージョン変更が容易に行えること**」の2点に注目してまとめています。

### 異なるOS間でも開発できる
Dockerを使うことで、**Linuxベース**の開発環境を用意することができるのだとわかりました。

これにより、開発者が異なるOS（Windows、macOS等）を使用していても、同じ環境で開発を進めることができて、**OSの違いによる不具合や動作の違い**を気にすることなく、開発へ集中できるようになるのだと理解しました。

![Fishing.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3772961/7471178f-e68f-6e7f-e592-a164c623ce7c.png)


通常、Linuxを導入するには「**VirtualBox**」を使用する必要があったり、WindowsとmacOSで開発環境が異なったりしますが、Dockerを使えばこれらの問題を解決できるため、非常に便利だと感じました。

https://www.virtualbox.org/

### バージョン変更も容易に行える
Dockerfileやcompose.ymlを編集することで、使用するプログラミング言語やライブラリのバージョンを簡単に変更できることがわかりました。

通常なら、rbenvやnode、yarnなどをコマンドで変更しなければならないのですが、Dockerでは記述をするだけでバージョン変更ができるため、非常に感動しました。

これにより、新しいバージョンのリリースに対応したり、プロジェクトごとに異なるバージョンを使用したりすることが容易になりました。

### チーム開発をするなら必須

これらから見えてきたのはチーム開発においてもDockerは非常に有用だと感じました。

Dockerを使用せずに環境構築を行うと、各開発者の環境に依存する部分で不具合が発生したり、設定ミスが起こったりする可能性が高まるだろうと思いました。

しかし、Dockerを使用することで、全員が同じ環境で開発を進めることができるため、環境の違いによる問題を防ぐことができるんだなと思いました。

まだチーム開発はやったことありませんが、その際にDockerが役立つのだろうとワクワクしています。

# 初学者のDocker学習におすすめ本

Dockerの学習では「[Docker&仮想サーバー完全入門](https://www.amazon.co.jp/Docker-%E4%BB%AE%E6%83%B3%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E5%AE%8C%E5%85%A8%E5%85%A5%E9%96%80-Web%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%82%BF%E3%83%BC%EF%BC%86%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E3%81%AE%E4%BD%9C%E6%A5%AD%E3%81%8C%E3%81%AF%E3%81%8B%E3%81%A9%E3%82%8B%E9%96%8B%E7%99%BA%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89%E3%82%AC%E3%82%A4%E3%83%89-%E3%83%AA%E3%83%96%E3%83%AD%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9/dp/4295015318)」が非常にわかりやすかったです。気になる方は目を通してみてください。

https://www.amazon.co.jp/dp/4295015318

zennのこちらの記事(書籍)もかなりおすすめです。すごくわかりやすくイメージがつかめました。

https://zenn.dev/suzuki_hoge/books/2022-03-docker-practice-8ae36c33424b59/viewer/1-1-readme

# おわりに
初めはDockerに対して抵抗感がありましたが、実際に使ってみると、その便利さを実感することができました。

今ではDockerが開発を容易に進めるために必要なツールであると理解し、Dockerに対するイメージが変わりました。これからもDockerを活用し、さらにスキルを磨いていきたいと思います。

また、本記事より感じたことや気づいた点などありました教えていただけますと幸いです。
FANUC PMCプログラミング入門(第4回)

# FANUC PMCプログラミング入門(第4回)

> 放置気味アカウントですが毎年4～6月になるといいねを付けてくれたり、ストックしてくれるユーザがいます。ありがとうございます。3年ぶりの新規記事投稿です。まだ未完成ですがゆっくり追記していきますので気長にお待ちください。

## CNC機能との連携

第1回記事で記載している通りPMCはCNC内臓であるという点が大きな特徴です。そのため一般的なPLCと異なりCNCと連携する機能が提供されています。

- 代表的な機能
  - F/G信号による連携
  - ウインドウ命令
  - 外部データ入力命令
  - 軸制御命令
  - 位置信号出力

今回はこれらCNC機能との連携について紹介します。

## F/G信号による連携

モータを制御するCNC機能と連携する際にF/G信号で通信を行います。

![FG_signal.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390544/d7dc05a4-8fc6-deb3-1d8f-b4010012fc21.png)

非常停止ボタンの入力をCNCへ通知しモーターを停止させたり、CNCの運転状態を操作盤のLEDに表示するなどX/YとF/Gの受け渡しを行うシーケンスプログラムを作成し、オペレータの操作による機械制御の大半を実現することができます。

F/G信号はCNCの結合説明書で確認することができます。機械の種類（マシニングセンタ、旋盤、モータ軸数）などで使用する信号のアドレス、個数が異なるため注意してください。

## ウインドウ命令による連携

F/G信号は運転状態、モード、停止信号など1bit(BOOL)データのデータ交換に使用します。
それに対してCNCのパラメータや軸速度、位置、実行中のプログラム番号など数値などで表現するCNCの情報をPMCで読書きする場合には**ウインドウ**命令を使用します。

ウインドウはPMCとCNC間のデータ交換のインターフェイスです。

![WIND-ページ1.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390544/907d4229-c541-ea1d-a116-42c6e8703239.png)

ウインドウ命令は命令呼出し直後(1スキャン内)にデータ交換が完了する高速タイプと、要求をかけてから次スキャン以降に結果が返ってくる低速タイプの2種類があります。

ウインドウ機能のデータアクセスは機能命令51および52のWINDR(読出し), WINDW(書込み)を使います。

![WIND-ページ2.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390544/2f69e817-9fbf-302c-85b7-15e42ac5b556.png)

WINDR,　WINDWともにパラメータは1つだけです。
パラメータに設定する連続する信号領域へ制御データを格納します。ウインドウ機能を実行すると結果データが同じ信号領域に書き込まれます。C言語で言えば配列データをポインタを受け渡す入出力引数のような使い方をします。

パラメータにはR信号(内部リレー)アドレスやD信号(データ)アドレスがよく使います。

| 信号 | 特徴 　|     |
|-----|----|-----|
| R信号    | 機械の電源断で設定値が消える。ラダーで制御データを作成する必要がある   |
| D信号    | 電源断時にデータが残る。ラダーで制御データを作成するか、PMCパラメータとして制御データを設定する |

ラダーで制御データを作成する場合は[データ転送命令](https://qiita.com/oshino_maru/items/5cf3663cb06703bf11c3#%E3%83%87%E3%83%BC%E3%82%BF%E8%BB%A2%E9%80%81%E5%91%BD%E4%BB%A4)を使います。毎スキャン実行する必要はないので起動時の1回だけ設定するようにしましょう。また開発時にはR信号で制御データを変更しながら動作確認し、うまくCNCとのデータ交換ができたらD信号に切り替えるといった使い分けも可能です。

### ウインドウ機能を制する者がPMCを制する

というかウインドウ機能がPMCラダープログラムで一番難しいです。これができたら一人前のPMCエンジニアと言っていいでしょう。

ウインドウ命令は重要な機能ですがラダーのデバッグ時に制御データ・結果データを解析する手間があったり、一見してそのネットで何のデータのやり取りをしているのかがわかりづらいため使いこなすのが難しいです。

> (実行結果のコイルが立たないときは、そもそもそのネットを実行しているのか、パラメータに指定した制御データが悪いのか、CNC側の設定が悪いのか切り分けが必要)

処理内容を実行結果の書き込み先コイルに設定する信号のコメント(ネットの右側にコメントが表示されます)、ネットコメント(ネットとネットの間に入れるコメント)に残すことが重要です。

また、よく使うウインドウ機能はファンクションブロックにするなどして実行状態・実行結果の見える化をすると扱いやすくなります。またFANUC LADDER-IIIのインストールディスクにはそういったファンクションブロックがライブラリとして格納されているため、参考にするのもよいでしょう。

---

(以下作成中)

## CNC系統とPMC系統について

## 外部データ入力

## ラダープログラムによる軸制御

## 位置信号出力

---

[目次へ](https://qiita.com/oshino_maru/items/0ae69da0c668efd5061c)
Flutter Game Demoやってみた

# 導入
今回は、FlutterでGameを作成することができ、そのDemoがあったので、手順にしたがって作成してみました。
自分なりの応用などはなく、ただ写経しただけになります。

# 使用したサイトや関連情報
こちらのサイトにDemoがあったので、こちらに沿ってDemoアプリを作成しました。

https://codelabs.developers.google.com/codelabs/flutter-flame-forge2d

ライブラリとして重要なのは、`flame`というFlutterの2Dゲームエンジンのようでした。

https://flame-engine.org/

ただ、今回は「Flutter」でゲーム作成をするという体験をしたかったのですが、Flutterは3Dグラフィックに対するサポートは乏しく、3Dゲームを作成するには、Unityなどで作成したゲームを以下のライブラリ等でFlutterに埋め込むことになるそうです。

https://pub.dev/packages/flutter_unity_widget

とはいえ、Flutterで2Dゲームが作れるだけでもワクワクするので、上にあるDemoを作成しました。

# 作成

Demoは手順に従えば問題なく、作成できました。
とくに難しいことはありませんが、`flame`ライブラリの使用は初めてだったので、詳細まで理解しようとするとかなり時間がかかりそうな印象でした。

また、私の開発環境は以下の通りですが、おそらく`flame`関連のライブラリのバージョンが上記のサイトと異なることが原因で、コードをコピペしていくと、1箇所だけコンパイルエラーとなりました。
そのため以下のように修正しています。ただ、それ以外は完全にコピペで動かすことができました。

```pubspac.yaml
dependencies:
  characters: ^1.3.0
  equatable: ^2.0.5
  flame: ^1.15.0
  flame_forge2d: ^0.16.0+5
  flutter:
    sdk: flutter
  xml: ^6.5.0
```

- 修正箇所

```diff_dart:game.dart
class MyPhysicsGame extends Forge2DGame {
  MyPhysicsGame()
      : super(
          gravity: Vector2(0, 10),
-          camera: CameraComponent.withFixedResolution(width: 800, height: 600),
+          cameraComponent: CameraComponent.withFixedResolution(width: 800, height: 600),
        );
```

## できたもの

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1655179/fa803834-7640-7928-86eb-f2d22fdbbcd5.gif)

丸いキャラクターを飛ばして、四角い敵を倒すゲームです。
重力などもしっかり聞いている感じがあってゲームを作った感はありますね。
リスタート等がないので、再度始めたりするには、アプリをキルする必要がありますが、ゲームとしては完成しました。

# 所感

まず、マイナス面から。
覚える要素が多い。通常Flutterを触ってアプリ開発していても出会わないクラスやライブラリを使用するため、ある程度の慣れが必要に感じました。

また今回は用意されたアセットを利用したのですが、結局のところゲームはデザインが重要で、そこが難点に感じました。
お絵描きが得意な人はいいかもしれませんが、私はあまり得意ではないので、1から作るとすると、そこがネックに感じました。
一方で、画像生成AIの普及により、画像を作成することのハードルは低くなっていると思うので、もしかしたらAI利用で、そこの障壁はクリアできるかもしれません。

プラス面。
完成して動かせた時の嬉しさや楽しさが大きいです。
普通にアプリ開発でも同じことが言えますが、その度合いがゲーム開発の方が強いように感じました。
よくある言語のチュートリアルでTODOリスト作りました、という時の気持ちとは異なり、より新しいものを作りたい気持ちになりました。

# 終わりに

今回のDemoを通じて感じた「ゲームを作る楽しさ」は、アプリ開発の新たな視点を与えてくれる気がしました。今後も新しい技術やライブラリを学びながら、自分なりのオリジナルゲームの開発に挑戦していけたらと思います。
PostgreSQLのキー重複時の上書き更新（UPSERT）する方法

いつも忘れるので、備忘録

# 公式
https://www.postgresql.jp/docs/11/sql-insert.html

このあたり
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3778585/4e4942d6-610e-218a-5178-59de0e3f8dfa.png)

# 使い方

```使い方
INSERT
INTO ★ここに登録先のテーブル名★ (
    ★カラム名一覧★
)
SELECT
    ☆登録元テーブルのカラム名や設定値☆
FROM
    ☆登録元テーブル名☆
WHERE
    ☆登録元テーブルでの抽出条件☆
ON CONFLICT
ON CONSTRAINT ☆登録元テーブルのキー制約名（テーブル名_pkeyとか）☆
DO NOTHING;
```
【VSCode】コマンドパレットで配色テーマを設定する手順

## はじめに
VSCodeで配色テーマを設定する際、ファイル>ユーザ設定から配色テーマを選ぶ手順は既に色々投稿されていましたが、コマンドパレットからも配色テーマを選ぶことが出来たのでその手順を紹介したく、本記事を投稿しました。

## コマンドパレットでテーマを設定する手順

### ①「CTRL + SHIFT + P」 でコマンドパレットを呼び出す

![コマンドパレット1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816911/1c79906b-4821-a2da-9643-0153ffc1e77f.jpeg)


### ②コマンドパレット検索欄で「Color Theme」と検索し、「Preferences:Color Theme」を選択
![コマンドパレット2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816911/c632d07a-281b-2246-7150-f22fe832361c.jpeg)


### ③Themeのリストから、選びたいテーマを選択
（本記事では「Solarized Dark」を選択しました）

![コマンドパレット4.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816911/f0b6d585-d46e-4dec-5235-7193f67fc22e.jpeg)


## 参考文献
本記事は以下情報を参考にして執筆しました。

https://and-engineer.com/articles/Y-h48BAAACIANylV#heading2-1
エクセル 列 アルファベット 列名 一覧 テキスト 100列目まで 縦書き・横書き【2024年最新】

## アルファベット（横書き）
タブ区切りになっていますので、コピペすると1セルに1列名が入ります。

```plaintext
A	B	C	D	E	F	G	H	I	J	K	L	M	N	O	P	Q	R	S	T	U	V	W	X	Y	Z	AA	AB	AC	AD	AE	AF	AG	AH	AI	AJ	AK	AL	AM	AN	AO	AP	AQ	AR	AS	AT	AU	AV	AW	AX	AY	AZ	BA	BB	BC	BD	BE	BF	BG	BH	BI	BJ	BK	BL	BM	BN	BO	BP	BQ	BR	BS	BT	BU	BV	BW	BX	BY	BZ	CA	CB	CC	CD	CE	CF	CG	CH	CI	CJ	CK	CL	CM	CN	CO	CP	CQ	CR	CS	CT	CU	CV
```

## アルファベット（縦書き）
改行区切りになっていますので、コピペすると1セルに1列名が入ります。

```plaintext
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
AA
AB
AC
AD
AE
AF
AG
AH
AI
AJ
AK
AL
AM
AN
AO
AP
AQ
AR
AS
AT
AU
AV
AW
AX
AY
AZ
BA
BB
BC
BD
BE
BF
BG
BH
BI
BJ
BK
BL
BM
BN
BO
BP
BQ
BR
BS
BT
BU
BV
BW
BX
BY
BZ
CA
CB
CC
CD
CE
CF
CG
CH
CI
CJ
CK
CL
CM
CN
CO
CP
CQ
CR
CS
CT
CU
CV
```


## より多くの列名（アルファベット）を用意したい場合
こちらの記事で、素晴らしい関数を紹介されています。ぜひご覧ください。
[エクセル関数で列の番号でなく、列のアルファベットを取得する方法](https://itwebkatu.com/excel-get-column-alphabet/#:~:text=%E3%81%A8%E6%80%9D%E3%81%84%E3%81%BE%E3%81%99%E3%80%82-,%E6%AC%A1%E3%81%AB%E3%80%81%E6%B1%8E%E7%94%A8%E6%80%A7%E3%81%8C%E9%AB%98%E3%81%84%E3%81%8C%E5%B0%91%E3%81%97%E9%9D%A2%E5%80%92%E3%81%AA%E6%96%B9%E6%B3%95,-%3DLEFT(ADDRESS(ROW) )

### その他
Googleスプレッドシートでも利用可能です。

### なぜこの記事を書いたのか？
列のアルファベットをパッと用意したいときに、下記のような表形式の一覧だとコピペがしにくい…… :(
|列番号|アルファベット|
|:-|:-|
|1|A|
|2|B|
|3|C|

一発で、アルファベットだけコピペさせて欲しいと思いましたので、自分で作りました。


#### どうでもいいこと
記事タイトルがアマゾンの商品みたいだ
複数Macでベンチマーク

# 複数の異なるMacでベンチマーク
小生、4台のMacを所持している。
1. Macbook Air 11inch (Intel Core i7 2GHz, 8GB)
1. Mac mini (Intel Core i5, 2.6GHz, 16GB)
1. Macbook Air 13inch (Intel Core i5, 1.8GHz, 8GB)
1. Mac mini (Apple M2 3.49GHz?, 24GB)

これらをベンチマーク（比較）してみた。

## 手法
こちらの記事「[UTMでARMとx64とを比較](https://qiita.com/infinite1oop/items/89cd5b05b9cd0ef275d0)」で用いた下記手法により比較を行った。
- Unixbench
- ネットワークスタック
    - ping
    - iperf3

### Unixbench
最後に表示されるスコアを利用。MacでUnixbenchを行うにはパッチをあてる必要があるようだ。下記記事参照。
- [X（旧ツイッター）](https://twitter.com/asfdrwe1/status/1334464279253118976)
    - [パッチ](https://pastebin.com/raw/Faptu9vJ)

また、Mac(ARM)では、途中でNGとなり（理由不明）。docker上で実施。
- ubuntu(ARM)
- ubuntu(x64)（ロゼッタ）

さらに、デフォルトでは途中でNGとなり、-iオプション（繰り返し回数）を指定した。
```
./Run -i 5
```
実行結果は下記となる。
```
System Benchmarks Index Values               BASELINE       RESULT    INDEX
Dhrystone 2 using register variables         116700.0   74316882.7   6368.2
Double-Precision Whetstone                       55.0      17517.1   3184.9
Execl Throughput                                 43.0       1019.1    237.0
File Copy 1024 bufsize 2000 maxblocks          3960.0     792366.2   2000.9
File Copy 256 bufsize 500 maxblocks            1655.0     217229.5   1312.6
File Copy 4096 bufsize 8000 maxblocks          5800.0    2244655.5   3870.1
Pipe Throughput                               12440.0     942253.8    757.4
Pipe-based Context Switching                   4000.0     267796.8    669.5
Process Creation                                126.0       3073.2    243.9
Shell Scripts (1 concurrent)                     42.4       5164.2   1218.0
Shell Scripts (8 concurrent)                      6.0        784.2   1307.0
System Call Overhead                          15000.0     745399.7    496.9
                                                                   ========
System Benchmarks Index Score                                        1139.3
```
それぞれで3回実施したときのスコアの平均値をデータとした。

### ネットワークスタック
ループバックで実施。こちらは、docker未使用。
#### ping
```
$ ping -c 100 127.0.0.1
```
結果例は下記となり、
```
--- 127.0.0.1 ping statistics ---
100 packets transmitted, 100 received, 0% packet loss, time 99375ms
rtt min/avg/max/mdev = 0.146/0.690/1.321/0.238 ms
```
平均値（avg）をデータとした。

#### iperf3
```
$ iperf3 -s # Server

$ iperf3 -c 127.0.0.1 -t 100 # Client
```
サーバー側の結果は下記となり、
```
[ ID] Interval           Transfer     Bitrate
[  5]   0.00-100.00 sec   320 GBytes  27.5 Gbits/sec                  receiver
```
このBitrateをデータとした。

## 比較
結果は下記となった。
||UnixBench|ping(ms)|iperf3(Gb/s)|
|---|---|---|---|
|Air11(i7 2GHz, 8GB)|1185|0.175|27.5|
|Mini(i5 2.6GHz, 16GB)|1295|0.085|31.7|
|Air13(i5 1.8GHz, 8GB)|1290|0.116|34.4|
|Mini(M2 3.49GHz, 24GB) docker_ARM|12138|N/A|N/A|
|Mini(M2 3.49GHz, 24GB) docker_x64|3269|N/A|N/A|
|Mini(M2 3.49GHz, 24GB)|N/A|0.141|140|

M2 MacのPerformanceが際立っているようだ。pingの結果はあまり参考にならない（意味がない）かもしれない。

EOF
CSRとSSR

## CSR
client side renderingの略。
名前の通り、クライアント側でレンダリングをする。

### 流れ
1. サーバから枠組みのhtmlとjsが来る
1. クライアントで、jsを実行して、htmlを完成させる

なので、描画が開始されてから、描画が完了するまでの間に差がある。

### 利点
- サーバとクライアントのコードを明確に分離できる
- webアプリケーション全体が最初のリクエストでロードされるため、その後サーバにリクエストする必要がない

### 欠点
- webクローラとの相性が悪い
webクローラは最初にロードされたhtmlのみを解析するが、CRSの場合はほとんど空なので、きちんと解釈されない。
- 最初にページがロードされるまで少し時間がかかる
- イベント発生時にAPIを使用してデータを取得すると、時間がかかるかも

## SSR
server side renderingは、サーバ側でリクエストに応じて完全なhtmlを生成する。
クライアントはそれを受け取って、表示するだけ。
SSRではすべてのリクエストが独立しており、すべて1から処理して生成する必要がある。

### 利点
- CSRに比べてjsが少なくなるため、描画が完了するまでが早い
- webクローラとの相性が良い

### 欠点
- TTFBが遅い
- ちょっとした動作でもすべてロードする必要がある
Docker内でFastAPIを使うときのログ出力

# 概要

FastAPIでアプリケーションを作成しDockerで動かす際に、標準出力へログを出す方法を記載します。

`logging`モジュールか`print()`で行います。

# 環境

Python：3.12
FastAPI：0.111.0
Docker：26.1.1, build 4cf5afa

# print()で行う場合

簡易的なログ出力であれば、`print()`で可能です。

```python
from fastapi import FastAPI
from pydantic import BaseModel


class Item(BaseModel):
    name: str


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    print(f"print: {item.name}")
    return {"return": f"hello {item.name}"}
```

```bash:出力結果
print: hogehoge
```

:::note info
以前はprint()だと標準出力されない現象があったようです。[^1]
Python3.12で検証したところ、普通に出力されました。
:::



# loggingモジュールを使う場合

FastAPIで`uvicorn`というWebサーバが動作しています。
そのなかですでに`logging`を使っているため、`logging.getLogger`でインスタンス化します。

```python
from fastapi import FastAPI
from pydantic import BaseModel
import logging


logger = logging.getLogger("uvicorn.myapp")


class Item(BaseModel):
    name: str


app = FastAPI()


@app.post("/items/")
async def create_item(item: Item):
    logger.info(f"logging: {item.name}")
    return {"return": f"hello {item.name}"}
```

```bash:出力結果
INFO:     logging: hogehoge
```

# 参考

[\[小ネタ\]uvicornとlogging](https://zenn.dev/techflagcorp/articles/8d6327311e1e9f)



[^1]:以下の記事に記載されています。
[Why doesn't Python app print anything when run in a detached docker container?](https://stackoverflow.com/questions/29663459/why-doesnt-python-app-print-anything-when-run-in-a-detached-docker-container)
WindowsのVSCodeでshファイル編集したら動かなくなることがある件

みなさん、WindowsのVSCodeでshファイル編集しててこんなことありますか？
```sh
$ ./shell.sh
bash: ./shell.sh: /bin/sh^M: bad interpreter: No such file or directory
```
**^Mってなんやねん！**
こんなことで一日を無駄にする人もいるでしょう。
## 原因
とりあえずVSCodeの右下をご覧ください。![2024-07-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744180/88f707d2-da51-bfde-32a1-9dc50a1a9be4.png)
これ、CRLFのところ、改行コードがCRLFになってるんです！
#### CRLFとは
CRLFは改行コードの一種で、`\r\n`、16進数で`0x0D0A`で改行するタイプになっています。
CRはキャリッジリターン(`\r`、16進数`0x0D`)でカーソルを先頭に移動する特殊文字、
LFはラインフィード(`\n`、16進数で`0x0A`)でカーソルを次の行に移動する特殊文字という意味。
これの`\r`が厄介で、Ubuntuなどで実行すると`\r`が改行ではなく通常文字のように認識されてしまい、`#! /bin/sh`を`#! /bin/sh(0x0D)`という風に認識されてしまいます。
## 改善
簡単です。右下のCRLFをクリックすると改行コードを指定できるので、そこからLFを選べばいいだけです。
![2024-07-06 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744180/06416cfc-6ac9-ee28-5890-73114fe68ff0.png)
簡単です。心当たりのないシェルエラーとかはこれを疑いましょう。
【React×Typescript環境構築】初学者によるメモ

# はじめに
Udemyの学習をするために自身でReactとTypescriptの環境構築を行いました。

現場ではViteが主流という話もあるので、それでも問題ないという方はこのやり方でやってみてください。

# 手順
具体的な手順をまとめています。

## 事前準備
nodeとyarnがインストールされているか確認
```
$ node -v
$ yarn -v
```
インストールされていない場合は、以下のリンクからインストールします。
- nodeのインストール

https://nodejs.jp/

- yarnのインストール

https://chore-update--yarnpkg.netlify.app/ja/docs/install

## Reactのプロジェクトを作成
ターミナルにて**cd**コマンドでプロジェクトの作成先に移動します。
```
$ cd [フォルダ名]
```
プロジェクト先に移動したら以下のコマンドを実行してプロジェクトを作成します。
```
$ npx create-react-app [プロジェクト名] --template typescript
```
**[プロジェクト名]** は変更してください。
**Happy hacking!** というメッセージが出たら完了です。


# プロジェクト起動
## 1.VS Code起動
ターミナルで下記を打ってVS Codeを起動します。
```
$ code .
```
起動できない方は下記のような記事を参考にvscodeで設定を行ってください。

https://qiita.com/syo19961113/items/aaceb2598e7a31a28934

## 2.ローカル表示

VS Code上で「**Command + J**」でターミナルを開いて、下記コマンドを打ちます。
```
$ yarn start
```

これで http://localhost:3000/ を開いて下記のような表示ができていると成功です。

[![Image from Gyazo](https://i.gyazo.com/d6b586d9d69b511df588e2dd1d17b434.png)](https://gyazo.com/d6b586d9d69b511df588e2dd1d17b434)

## 3.停止

「**control + C**」でローカル表示を停止にすることができます。

## 4.フレームワークの導入
各種フレームワークの公式サイトを参考に下記のように**yarn**でインストールすると成功します。
```
yarn add ライブラリ名 ライブラリ名 ライブラリ名
```
**package.json**にインストールしたライブラリがあれば成功です。

## 5.Github連携

### 1.リポジトリ作成

**Repository name**を入力し、PublicとPrivateはどちらでも良いので選択し「**Create repository**」ボタンを押して作成します。

[![Image from Gyazo](https://i.gyazo.com/9e043323848547328819b125636f5d45.png)](https://gyazo.com/9e043323848547328819b125636f5d45)

### 2.連携
#### 1.Gitの初期化
```
$ git init
```
次のようなメッセージが出ます。
```Reinitialized existing Git repository in プロジェクトパス```

#### 2.全てのファイルをステージに追加
```
$ git add .
```

#### 3.コミット
```
$ git commit -m "first commit"
```

#### 4.GitHubリポジトリをリモートとして追加
```
$ git remote add origin [SSHをコピペ]
```

#### 5.連携の確認
```
$ git remote -v
```
次のように表示されたら成功です。

```
origin  git@github.com:アカウント名/プロジェクト名.git (fetch)
origin  git@github.com:アカウント名/プロジェクト名.git (push)
```

#### 6.プッシュ
プッシュします。
```
git push -u origin main
```
次のようなエラーが発生したらローカルにmainブランチがないことでエラーになっています。
```
error: src refspec main does not match an
```
メインブランチを切って、プッシュします。
```
git checkout -b main
git push -u origin main
```
これで問題なく草も生やせます。
# おわりに
Reactのバージョンによってはうまく起動しないこともありますが、この記事を参考に環境構築がスムーズに進められればと思っております。

# 参考
https://note.com/bluecode_inc/n/n185d41d24adb

https://qiita.com/sanogemaru/items/05c2e9381d6ba2d9fccf
SQL（だけじゃないけど）エスケープ一覧

全部じゃないけど備忘録
以下記載の方法は、どちらでも実行できるので好みで選択してください。

# 1こずつ

| 意味       | 変換         |
|:---------- |:------------|
| <          | \&lt; |
| <=         | \&lt;= |
| >          | \&gt; |
| >=         | \&gt;= |

# めんどくさい場合

```書き方
<![CDATA[ ★★ ]]>
```

★の場所に記号を入れる。

例えば以下みたいな感じ。こっちの方が見やすい。
| 意味       | 変換         |
|:---------- |:------------|
| <          | \<![CDATA[ < ]]> |

SQL全体囲えるらしいけど、やった事ない。
【Figma Plugins】業務を効率化するためにFigmaのPluginを作った話

## はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/4c6579ab-4449-0147-6cf8-c6de08fb79b9.png)

みなさんは、デザインする業務をもっと効率的に行いたいと思ったことはありますか？
今回は、Qiitaで作ったFigmaのPluginを紹介しようと思います。

## IssueSynker
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/5959bbbe-c246-a017-f483-301661f64c81.png)


今回作ったFigmaのPluginは、「**IssueSynker**」 というプラグインです。

IssueSynkerでは以下のことができます。

+ Figmaファイルのテンプレートをボタン1つで生成してくれる
+ Figmaのサムネイルをボタン1つで変えてくれる


### ○ Figmaファイルのテンプレートをボタン1つで生成してくれる
「Figmaファイルのテンプレートをボタン1つで生成してくれる」 は、issueに着手するフローをもっと便利にするため、開発しました。

#### 今までのフロー
Qiitaでは、issueを進めるにあたって、デザイナーが手動で以下のフローで行っています。

1. **テンプレート用ファイルを複製**
1. **Github Issueのタイトルを以下のように修正**
    + `${Repository Name}#${Issue Number} - ${Issue Title}`
    + 例） `qiita-design#1234 - issueタイトル`
1. **テンプレートにgithubのリンク・ドキュメントのリンクを入れる**
1. **サムネイルを修正**
    + サムネイル コンポーネントのプロパティを修正
    + Github Issueのタイトルを入力
    + Github Issueのissue番号を入力
1. **Github IssueにFigmaのURLと関係のあるドキュメントのリンクをコメントする**

このように、Issueを進める準備行っているので、毎回準備に10分〜15分ほどかかっていました。

#### プラグインでやってくれること
この辺りのフローを簡単にするため、このプラグインでは、GithubのIssueのURLとドキュメントのURLを入力し、ボタンを押すことで、以下のことを行ってくれるようにしました。


1. **必要なページ作成の生成**
    + 「作業用ページ」「サムネイル用ページ」を生成する
1. **ファイル整理に必要なコンポーネントを生成**
    + デザインデータを整理するためのラベルやコンポーネントを生成する
    + Githubのリンクやドキュメントのリンクをドキュメントに追加する
1. **Github Issueに合わせて、サムネイルを生成**
    + リポジトリに合わせて、サムネイル コンポーネントのプロパティを修正する
    + Github Issueのタイトルを入力をサムネイルに反映する
    + Github Issueのissue番号をサムネイルに反映する
1. **Github Issueにコメントする**
    + FigmaのデザインデータとドキュメントのURLをGithubのIssueにコメントする


Issueを進める準備が5分程度になりました。（マジ便利。）

Qiitaでは、1週間で10issueのデザインデータを作成しているので、
1ヶ月でだいだい80分の作業が効率化されました 🎉
（4週間 * 10issue * 10分 = 80分）



### ○ Figmaのサムネイルをボタン1つで変えてくれる
「Figmaのサムネイルをボタン1つで変えてくれる」は、副次的な機能になります。

Qiitaでは以下のタイミングでサムネイルを変更しています。

+ デザインが完了した時
+ 機能がリリースされた時
+ 開発しなくなった時

そのため、毎回サムネイル用のファイルを開いて、サムネイル用コンポーネントのプロパティを変えるのは大変です。
そのため、Pluginからボタン1つで変えられるようにしています。


## 公開について
このプラグインは、社内のみで使うことを前提に作っているため、component Key やthumbnail componentのプロパティなどが固定値になっているため、公開することは考えてないです。 🙏

Qiita社内では、githubにこのプラグインのリポジトリを作り、各自でCloneして、使っています。

## 今後の展望
今後は以下のような機能を追加しようと思っています。

+ Quick Action（`command + /`） からプラグインを実行できるようにする機能
+ Figma Pluginから、GitHubのIssueをCloseできるようにする機能
+ メンバーから感想を聞いて改善する 

## まとめ
この記事では、Qiitaで作ったFigmaのPluginを紹介しました。
このプラグインは、公開しているわけではないですが、デザイナーの皆さんの参考になればと思います。

---

最後まで読んでくださってありがとうございます！

普段はデザインやフロントエンドを中心にQiitaで記事を投稿しているので、ぜひQiitaのフォローとX(Twitter)のフォローをお願いします。

https://twitter.com/degudegu2510
ログを取る を知る



#### ソフトウェア開発者の業務の大部分は、監視、トラブルシューティング、デバッグ
>ログ記録により、このプロセスがはるかに簡単かつスムーズになります。


https://www.quora.com/Why-is-Logging-an-important-part-of-Software-Development#:~:text=%E3%83%AD%E3%82%B0%E8%A8%98%E9%8C%B2%E3%81%AB%E3%82%88%E3%82%8A%E3%80%81%E3%81%93%E3%81%AE%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%8C%E3%81%AF%E3%82%8B%E3%81%8B%E3%81%AB%E7%B0%A1%E5%8D%98%E3%81%8B%E3%81%A4%E3%82%B9%E3%83%A0%E3%83%BC%E3%82%BA%E3%81%AB%E3%81%AA%E3%82%8A%E3%81%BE%E3%81%99


# ログとは
#### 問題(トラブルシューティング)解決に非常に役立つ情報
>何かを記録すること、あるいは、記録した物それ自体

https://wa3.i-3-i.info/word1415.html

##### 記録を残すことを「ログを取る」という

# ログを取る理由
#### デバッグとトラブルシューティング
- __問題の特定__ __:__ エラーが発生した場合、ログは問題の正確な場所と原因を特定する
- __バグの追跡__ __:__ ログには変数値、関数呼び出し、その他のイベントが記録されるため、バグにつながる一連のアクションを追跡しやすくなる


上記のほかにも様々な理由があります。
一つ目のリンクをご参考に:relieved:

# 効果的なログ記録の実装
- __一貫性__ __:__ すべてのログ メッセージに一貫した形式を使用
 <br></br>


- __詳細__ __:__ さまざまなログレベル (INFO、DEBUG、ERROR など) を使用してメッセージを分類
<br></br>

- __集中化__ __:__ さまざまなソースからのログをログシステム(単一の統合システム, プラットフォーム)に収集し、管理と分析を容易にする
<br></br>

- __ログの保持__ __:__ ログの保持とローテーションを実装して、ストレージ スペースを効率的に管理
<br></br>

- __セキュリティ__ __:__ ログデータが改ざんされたり、権限のないユーザーによってアクセスされたりしないように保護


# さいごに
『ログを制する者はプログラミングを制する』:basketball:??
フォントサイズを決める方法について

# はじめに

サイトのフォントサイズの決め方として、「タイプスケール」を用いる方法があるようです。

画面のモック作成中、フォントサイズに迷うことがあったので共有です。

# **STEP1 タイプスケールの比率の大きさを決める**

大きいとメッセージが強調されて、小さいと一覧性が高まる

- 広告やマーケティングサイトを作りたい　⇒　メッセージを強調するため、比率を大きくする
- ECサイト ・ アプリを作りたい　⇒　より多くの情報を配置できるよう、比率を小さくする

# **STEP2 タイプスケールの比率のルールを決める**

<タイプスケールの比率のルール >、

- ***1. 乗算のルール （一定の倍率で大きくなる・小さくなる）***
- ***2. 加算のルール（一定数ずつ大きくなる・小さくなる）***

通常は乗算のルールに従えばいいそうですが、複雑な業務アプリを作る場合は、加算のルールに従うと良いようです。

UIガイドラインではフォントについて、

12px・・・Sub Text

14px・・・Main Text

16px・・・Main Text

18px・・・Title

24px・・・Special Text

と記載されているので、おおむね2. 加算のルールに従っています。

# **実際に触れるサイト**

https://typescale.com/

↑のサイトでは、ベースになるフォントサイズに合わせてタイプスケールを自動で決めてくれます。

（使い方は[こちら参照](https://coliss.com/articles/build-websites/operation/design/online-visual-type-scale.html))

# 参考

https://note.com/hirotoarakawa/n/n6924a725d584
Pixel端末でタスクボタンが反応しなくなることがある話

# 概要
一部のAndroid端末を「3ボタンナビゲーション」モードで利用し、かつサードパーティー製のホームアプリ（私はNova Launcher利用中に本問題発生）を利用していると、時々タスクボタンが反応しなくなる。（2022年以降、私が利用してきた全てのPixcel端末で本問題は継続して発生中）
本記事では、その問題に対する一時的な解決方法について記載している。



# 問題が確認された端末
Pixel 6a、Pixel 7a、Pixel 8



# 原因
過去に、似た問題に遭遇しグーグルサポートに問い合わせた人がいるようで、その時の回答では、どうやらデフォルトのホームアプリ以外を利用すると発生するバグでありホームアプリ側の問題との事。
一方、ホームアプリ側のバグとGoogleは主張しているが複数のホームアプリで同様の問題が見受けられ・・・
※なお他社端末、OPPO Reno 7A、Galaxy Tab S8+、Xperia XZ3、Galaxy A23 5G利用中、この問題は一切確認されていない。


# 一時的な解決方法
### ①再起動
だいたいの問題は再起動すれば治る。

### ②サードパーティー製ホームアプリの強制終了
再起動したくない人向けの方法。
1.設定を立ち上げデフォルトフォームアプリを「Pixel Lancher」に変更。
2.設定 ⇒ アプリからサードパーティー製ホームアプリを強制終了
3.設定を立ち上げデフォルトフォームアプリをサードパーティー製ホームアプリに変更。
少し面倒くさいが2番だけだとこの症状は治まらず、この手順が安定している。

### ③一度すべてのタスクをキル
設定 ⇒ システム ⇒ ナビゲーションモード から、ジャスチャーナビゲーション　に一度切り替える。
その後すべてのアプリを終了させ、ナビゲーションモードを3ボタンナビゲーションに戻す。


# 最後に
本記事に挙げる解決方法で一時的にこの問題は治まる。しかし、本問題が不定期に再発する事が確認されている。
根本的な解決方法が判明すると嬉しいが、同じ問題で困ってる人がいれば参考までに。
【pnpm】package.json で pnpm のバージョンを指定する場合、engines と packageManager どっちに書くかね

以前、こういう試みをした時に、たくさんのリポジトリのパッケージマネージャーを pnpm に置き換えていくことをしました。

https://qiita.com/shin_moto/items/0659a4f3836dc1e81762

その時に、package.json で使用するパッケージマネージャー及びバージョンを指定する場合、複数のやり方があることを知りました。

## engines フィールドに書く

```package.json
"engines": {
  "pnpm": ">=8"
}
```
こちらに書くメリットとしては、
- 柔軟なバージョン指定が可能。例えば、">="を使って最小バージョンを指定できる
- Node.jsのバージョンなど、他のエンジン要件も同時に指定できる

などでしょうか。

## packageManager フィールドに書く
```package.json
"packageManager": "pnpm@9.4.0"
```
メリットとしては、
- プロジェクトで使用する正確な pnpm バージョンを指定できる
- Corepack と互換性があり、プロジェクトごとに指定のバージョンの pnpm に切り替えることができる

かなと思います。逆にパッチバージョンまで細かく指定したくないという場合は packageManager ではそれが出来ません。

## で、どっちを使いますか

あくまで私のケースですが、結論は packageManager フィールドを使用することにしました。

### 理由1
チーム管轄で多くのプロジェクトを管轄しており、どうしても pnpm のバージョンが揃わないケースも想定されます。
なので、Corepack でシュッとバージョン切り替え出来るのは大きなメリットと考えます。

FYI：https://nodejs.org/api/corepack.html#supported-package-managers

### 理由2
GHA のフローの中で pnpm を導入する際、packageManager フィールドを設けておけば、バージョンをベタ書きしなくても済みます。

以下、pnpm オフィシャルで紹介されている actions の書き方の引用ですが、

```.github/workflows/NAME.yml
name: pnpm Example Workflow
on:
  push:

jobs:
  build:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        node-version: [20]
    steps:
    - uses: actions/checkout@v4
    - name: Install pnpm
      uses: pnpm/action-setup@v4
      with:
        version: 9
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'pnpm'
    - name: Install dependencies
      run: pnpm install
```

https://pnpm.io/ja/continuous-integration#github-actions

で、pnpm/action-setup の README を見ると、

>version
Version of pnpm to install.
>
>Optional when there is a packageManager field in the package.json.
>
>otherwise, this field is required It supports npm versioning scheme, it could be an exact version (such as 6.24.1), or a version range (such as 6, 6.x.x, 6.24.x, ^6.24.1, *, etc.), or latest.

https://github.com/pnpm/action-setup?tab=readme-ov-file#setup-pnpm

version 指定は packageManager フィールドがない時以外は必須なので、
つまり packageManager の内容を参照させることが出来るので、日々のバージョン更新も package.json だけ更新すれば良くなります。


雑ですが、こんな感じ
```.github/workflows/NAME.yml
name: pnpm Example Workflow
on:
  push:

jobs:
  build:
    runs-on: ubuntu-22.04
    strategy:
      matrix:
        node-version: [20]
    steps:
    - uses: actions/checkout@v4
    - name: Install pnpm
      uses: pnpm/action-setup@v4
      with:
        package_json_file: package.json
    - name: Use Node.js ${{ matrix.node-version }}
      uses: actions/setup-node@v4
      with:
        node-version: ${{ matrix.node-version }}
        cache: 'pnpm'
    - name: Install dependencies
      run: pnpm install
```

以上により、現状は packageManager で運用していこうかなあという感じです。
【React】5分で理解！useEffectで関数の実行タイミングを探ろう

# はじめに
Reactを学び始めたとき、useEffectのことがよく分かりませんでした。useEffectは、アプリがデータを取得したり、自動で何かを更新したりする時に使います。これを上手に使えるようになるには、useEffectがどんな時に動くのかを理解することがとても重要です。この記事では、useEffectの基本的な使い方を簡単に説明します。これを読んで、useEffectをもっと上手に使えるようになってほしいと思います。

# 対象読者
- ReactでuseEffectを取り敢えず使っている
- useEffectで関数の実行タイミングを確認したい

# useEffectの基本構文
useEffectはReactの関数コンポーネントで副作用を扱うために使います。ここでいう「副作用」とは、コンポーネントの普通のレンダリングプロセスとは別に行われる操作のことを指します。これには、データの取得、DOMの手動操作、ログの記録などが含まれます。

```jsx
useEffect(() => {
  // 実行する副作用
}, [依存配列]);
```
- **第一引数**：副作用を実行する関数。
- **第二引数**：依存配列。この配列内の値が変化するたびに副作用が再実行されます。空の配列 [] を渡すと、コンポーネントの初回レンダリング後に一度だけ実行されます

# 副作用の実行タイミング
依存配列の内容に応じて副作用の実行タイミングが変わります。

例えば、以下のコードはFirestoreからデータを取得し、コンポーネントが初回レンダリングされた後に、一度だけこのデータを取得します。

この例では、`console.log`を使用して、useEffectがどのタイミングで副作用を実行するかを観察できます。このようにログを活用することで、副作用の実行タイミングを直感的に理解することが可能です。


```jsx
// Firestoreからデータを取得する関数
  const fetchCareers = async () => {
    try {
      console.log("データ取得を開始します"); // ここを追加
      const querySnapshot = await getDocs(collection(db, "careers"));
      const careersData = querySnapshot.docs.map((doc) => ({
        id: doc.id,
        ...doc.data(),
      })) 
      console.log("データ取得が完了しました:", careersData);　// ここを追加
      setCareers(careersData);
    } catch (err) {
      console.error("Error fetching careers:", err);
    }
  };

  useEffect(() => {
    console.log("コンポーネントがレンダリングされました。"); // ここを追加
    fetchCareers();
  }, []);
```

実際に、画面で実行タイミングを確認しましょう。

`Carrers` をクリックして、遷移先のページ（コンポーネント）がレンダリングされたときに、右側のコンソールに以下の実行順でログが出力されたのが確認できました！

① コンポーネントがレンダリングされました。
② データ取得を開始します
③ データ取得が完了しました


![タイトル5.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3536873/eff2595b-1860-a264-33ad-56a578137eb6.gif)

# おわりに
今回は、useEffectの第二引数に空の配列を指定した場合にいつ実行されるのか？に焦点を置いて、ご説明しました。さらに、理解を深めるには第二引数に色々な値を依存配列に入れて試してみてください。

最後まで読んでいただきありがとうございました！
【Rails7】to_sでwrong number of arguments (given 1, expected 0) (ArgumentError)が発生する

## はじめに
Rails7にアップデート中、to_sを使用している部分でエラーが発生したので、解消方法をまとめていきます。

## 問題
エラー内容
```ruby
date = DateTime.now
puts date.to_s(:db)

`to_s': wrong number of arguments (given 1, expected 0) (ArgumentError)
```

## 解決方法
to_sをto_fsに変更することで解消します。

```ruby
date = DateTime.now
puts date.to_fs(:db)
```

## 参考
https://scrapbox.io/ukuh1r8-86980398/Rails7%E3%81%8B%E3%82%89Active_Support%E3%81%AE%E4%B8%80%E9%83%A8%E3%81%AEto_s%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89%E3%81%ABformat%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%AE%E3%81%8Cdeprecated%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%9F
PHPで.propertiesファイルを使う

## プロパティファイル好きです！

こんばんは！私はとある大手企業で教育関係のお仕事をしています。

最近はJavaの新卒研修に参加して講義をしました。

はじめて3カ月も講義をして何より**自分が１番学んでました！**


## JavaといえばgradleかMaven！

JavaではXMLなMavenと.propertiesファイルのようなものを使うGradleの２択だった気がします。

JavaはYAML使わずにXMLのほかにpropertiesを使うことが多かった気がします。

しかし、PHPではほとんど使いません。

## そもそもPHPを使っている人がいない

みなさんPythonを使っているし私もFlaskやDjangoを使ってきました。

しかし問題があって、**PythonはWebと相性がそこまでよくない**というところがあります。

つまり、われわれがVPSを借りてウェブのサービスを始めようとなったときに

ほぼ100パーセント使うのが**Apache**となっており、PythonもいけるんですがPHPと比べると格段に面倒くさいです。

## Javaの習得は絶望的

研修ではJavaをやっていましたがどんな演習でもその基となるアプリの見本がなければ何もできない状態です。それにJavaの場合@WebServletのパス名がダブっただけで**サーバーが起動しません**

## PHPでpropertiesをよむコードがこちら

こちらがPHPでpropertiesファイルを読み込む方法になります。

```php
<?php
// Function to parse the properties file
function parse_properties($file) {
    $properties = array();
    if (file_exists($file)) {
        $lines = file($file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        foreach ($lines as $line) {
            if (strpos($line, '=') !== false) {
                list($key, $value) = explode('=', $line, 2);
                $properties[trim($key)] = trim($value);
            }
        }
    }
    return $properties;
}

// Path to your properties file
$propertiesFile = 'database.properties';

// Parse the properties file
$dbProperties = parse_properties($propertiesFile);

// Retrieve database connection details
$host = $dbProperties['db.host'] ?? 'localhost';
$dbname = $dbProperties['db.name'] ?? '';
$username = $dbProperties['db.username'] ?? '';
$password = $dbProperties['db.password'] ?? '';

// Create PDO connection
try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch(PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>
```

## 世の中の9割はPHPで動いてます。またPHPプログラマに光が差してくるでしょう。

SpringBootもやってみましたがJTLとか勝手に裏でSQLを作ってくれるのですがやっぱり結合とかするとすぐ複雑化してわけわからなくなります。仕様変更もしょっちゅうあり、Qiitaに書いてある記事の内容で動かないなんてザラです。

100年後にはきっとPHPしか生き残らないと思ってます。今はコールドスリープして趣味でPHPを楽しみながら時代を待ちましょう。
よわよわエンジニアだけど、ノリでICFP2024に初めて参加した話


## はじめに
ICFPに初めて参加した感想です。私は業務上プログラミングを行うことは少ないが、社内で募集がかかっていたこともあり、この手のチームで参加するコンテストに参加したことがなかったので参加してみた。

## ICFP
72時間なんでもありのコンテストとなります。今年は、いくつかの問題カテゴリ対して10-20前後の問があり、それぞれ解答のみを提出してスコアを競う形式でした。

## 前日
今の会社へ入社したてだったため、取り敢えず環境構築した。Python、Node.js、Rust辺りが使えるようにした。因みにRustはよく分かってない。
結果からいうと、この環境構築はあまり意味なかった。

## 初日
いざ、コンテストが始まった、英語の問題をチームで読み解く。しかし、私は正直理解できていなかったが、よく分からない言語（後にICFP言語と呼ばれてた）とコミュニケーションをとり、問題を解いていくようだった。

こんな感じの言語
`B$ B$ L# L$ v# B. SB%,,/ S}Q/2,$_ IK`

それぞれ、先頭文字列に役割があり、LISPライクなコンパイラ必要だった。途中まで作成したが、チームの方がコンパイラを作成されたので、それをそのまま使うことにした。
初日から暗雲低迷なコンテストが始まったという印象でした。

## 2日目
何種類かの問題に分かれており、それぞれに問題数があることを知った。初日で大分心折れてアルゴリズム面では太刀打ちできなことを悟ったが、それでも解けそうな3dという問題にトライした。

問題例）

いかのような問題文が与えられる。
```text
Input
1 <= A <= 100

Output
The factorial of A. A! = 1 * 2 * .. * (A - 1) * A

Example
A = 5 Answer = 120
```

解答は以下のようなマスを作成して提出する。記号に各種のオペレーター（四則演算的な）があり、処理順のワープもある。解答までのイメージとしては、大学の授業で回路組んでいるときに近かった。

しかし、特に解答のためにプログラムを書く必要なく、紙と鉛筆されあれば十分という、うってつけの問題だった。

```
. . . . 0 . . . .
. B > . = . . . .
. v 1 . . > . . .
. . - . . . + S .
. . . . . ^ . . .
. . v . . 0 > . .
. . . . . . A + .
. 1 @ 6 . . < . .
. . 3 . 0 @ 3 . .
. . . . . 3 . . .
```

この時点では、問題の意味は分かってもどういう思考プロセスで解いたらよいかさっぱりだった。ノリで参加したことを後悔してきた。

## 3日目
昨日に続き、3dにトライした。チームメンバーが提出した解答をテスト→少しいじるを繰り返した。なんとなくこんな感じか？ぐらいのテンションで出した解がチームスコアを更新した。

ここから怒涛のスコア更新が始まった。謎の脳内パラダイムシフトにより、ベストスコア（1位！）も獲得できた。コンテスト終了時点に2位となっていたが、

ちなみに、全くプログラムを書かなかった。

## 4日目
この日は普通に仕事だった。しかし、問題がずっと脳内シミュレートされ全く集中できなかったといっても差し支えかない。この日の仕事が、自動化された操作をひたすら見守るだけという、よわよわエンジニアらしいタスクで助かった。

仕事終わり次第、解答を提出したら無事に何問かスコアを更新することができた。


## 感想
**実装力がなさ過ぎて全くプログラム書かなかったけど、普通に楽しめた。** 終始チームメンバーが作成した提出用のプログラムを使っていた。実装力の無さが浮き彫りになったので、より精進しないとな感じた。ただ、3dという問題があったおかげでICFPの面白さを一部かじることができた
SID を SecurityID（Domain\User） に変換する [ Windows イベントログ イベントビューア ]

# 概要
イベントログ等に含まれる
`SID`の値を可読できる内容（ドメイン\ユーザーの形式）に変換したい


# コマンド例
## サンプル1（Powershell）
※SIDが含まれるイベントログを**出力したPC**で以下を実行する

`Powewrshell` で上から実行していく。

`$SID` の値は変換したい実際のSIDの値に置き換えて実行する。

```powershell:powershell
$SID = "S-*-*-********-*****-*****-****"
$objSID = New-Object System.Security.Principal.SecurityIdentifier($SID)
$objUser = $objSID.Translate([System.Security.Principal.NTAccount])
$readableSecurityID = $objUser.Value

Write-Output "$SID : $readableSecurityID"
```
```powershell:出力例
S-1-5-********-*****-*****-**** : HogeHost\PiyoUser
```

## もっとシンプルにしたやつ（Powershell 2行）
$SIDを手書きすればワンライナーもいける

```powershell:
$SID = "ここにIDを入れて実行"
 (New-Object System.Security.Principal.SecurityIdentifier($SID)).Translate([System.Security.Principal.NTAccount]).Value
```



## 引数でSID渡して処理するスクリプト（.ps1）

```powershell:SidToSecurityId.ps1
param (
    [Parameter(Mandatory=$true, Position=0)]
    [string]$SID
)

function Convert-SidToReadableName {
    param (
        [Parameter(Mandatory=$true)]
        [string]$SID
    )
    
    try {
        $objSID = New-Object System.Security.Principal.SecurityIdentifier($SID)
        $objUser = $objSID.Translate([System.Security.Principal.NTAccount])
        return $objUser.Value
    }
    catch {
        return "変換できませんでした: $SID"
    }
}

$readableName = Convert-SidToReadableName -SID $SID

Write-Output "$SID : $readableName"
```

## イベントログ一括変換表示スクリプト（.ps1）
イベントログのファイルパスを引数で渡して、ログMessage内容からSIDを検出して一括で変換してリスト表示する（一意なものに絞り込んで表示）

※動作保証なし:sweat_smile:

```powershell:LogToSecurityIds.ps1
param (
    [Parameter(Mandatory=$true)]
    [string]$CsvPath
)

# 入力ファイルの存在チェック
if (-not (Test-Path $CsvPath)) {
    Write-Error "指定されたCSVファイルが見つかりません: $CsvPath"
    exit 1
}

# SIDを変換する関数
function Convert-SidToName {
    param([string]$SID)
    try {
        $objSID = New-Object System.Security.Principal.SecurityIdentifier($SID)
        $objUser = $objSID.Translate([System.Security.Principal.NTAccount])
        return $objUser.Value
    }
    catch {
        return "変換不可: $SID"
    }
}

# CSVファイルを読み込む
$events = Import-Csv -Path $CsvPath

# ユニークなSIDとそのユーザー名を保持するためのハッシュテーブル
$sidDictionary = @{}

# 各行を確認
foreach ($event in $events) {
    # SIDのパターンを定義
    $sidPattern = 'S-1-5-\d+-(\d+-){1,14}\d+'

    # SIDに該当する記述があるか確認
    $sidMatches = [regex]::Matches($event.Message, $sidPattern)

    if ($sidMatches.Count -gt 0) {
        foreach ($sidMatch in $sidMatches) {
            $sid = $sidMatch.Value

            # SIDを変換
            $name = Convert-SidToName -SID $sid
            # SIDの検出ごとにSID出力をしたい場合は有効にする↓
            # Write-Output "$sid : $name"

            # ユニークな結果を保持するためにハッシュテーブルを使用
            if (-not $sidDictionary.ContainsKey($sid)) {
                $sidDictionary[$sid] = $name
            }

        }
    } else {
        # 各行ごとにSIDが見つからなかった場合に通知を出力したい場合は有効にする↓
        # Write-Output "SID not found"
    }
}

# ユニークな結果を配列に変換
$results = $sidDictionary.GetEnumerator() | ForEach-Object {
    [PSCustomObject]@{
        SID = $_.Key
        Name = $_.Value
    }
}

Write-Output "`nResults: "
$results
```



# 参考

https://yomon.hatenablog.com/entry/2015/06/19/183522
Windowsでhistory, ls, mkdir, touch, whichコマンドを使えるようにする

## はじめに

ふとMacからWindowsを使う必要が出てきたのですが、使い慣れたコマンドが使えなかったので、作りました。
多分車輪の再発明な気はするのですが自分のメモです

## 適当なディレクトリにbatファイルを作っていく

私はCディレクトリ直下に、my_scriptsというフォルダをつくり入れていきました。
C:\my_scripts

まずはtouchコマンドを作ります。
フォルダ上で右クリックをして新規作成を押し、テキストファイルを作って
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076333/ca0b3437-0dff-5362-802f-825f3aeb0a88.png)
メモ帳で開き、下記をコピペします
```
@echo off
if "%~1"=="" (
    echo Usage: touch filename
    exit /b 1
)

set filename=%~1

if not exist %filename% (
    type nul > %filename%
) else (
    copy /b %filename% +,, %filename%
)
```

そして、保存後、ファイルの拡張子をtouch.batと変更します。

↓Githubに載せたので、Cloneするのが早いと思います。
https://github.com/ironikot/linux_script_for_windows/tree/main

最低限の動きしかしないので、適当に加筆修正いただけると幸いです。

## 環境変数の設定

環境変数PATHに追加します。例えば、バッチファイルをC:\my_scriptsフォルダに保存した場合、このフォルダを環境変数PATHに追加します。

環境変数PATHの追加手順:
「スタートメニュー」 → 「システム」 → 「システムの詳細設定」 を開きます。
「詳細設定」タブで「環境変数」ボタンをクリックします。
「システム環境変数」の中から「Path」を選択し、「編集」ボタンをクリックします。
新しいエントリを追加し、バッチファイルを保存したフォルダ（例：C:\my_scripts）のパスを入力します。


## ほかのコマンドでも繰り返す

パスを上記で通したので、touchコマンドが使えるようになっているはずです。
コマンドプロンプトで
`touch ls.bat`、`touch mkdir.bat`とファイルを作って編集していきます。

下記のGitにスクリプトが書いてあるのでCloneする・コピペしてください。
https://github.com/ironikot/linux_script_for_windows/tree/main

以上です。
macユーザーがWindowsを使うことになったのでPythonを使えるようにしてみる話

## はじめに

WindowsでのPythonの環境の構築は結構クセがあったので、メモします。
Pythonのバージョンをころころ変えられるようになりながら、poetryを使えるようになるのがゴールです


環境
- OS 
    - Windows 10 Pro for Workstations
- version
    - 22H2
- CPU
    - Intel(R) Xeon(R) CPU E3-1505M v6 @ 3.00GHz   3.00 GHz

## Pythonを消していく

コマンドプロンプトでPythonの参照先を見ると、Windowsのアプリストアになっているので、[こちら](https://qiita.com/IoriGunji/items/290db948c11fdc81046a#python%E3%82%A2%E3%83%97%E3%83%AA%E5%AE%9F%E8%A1%8C%E3%82%A8%E3%82%A4%E3%83%AA%E3%82%A2%E3%82%B9%E3%81%AE%E8%A8%AD%E5%AE%9A)の記事を参考に変えていきます。
（which pythonではなく、where pythonでみれます）
アプリ実行エイリアス、をクリックして、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076333/0ec4efbd-a135-09c9-f577-2014516a2b03.png)

Pythonをオフにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1076333/80b5699c-c61e-665a-c6ca-b795d3adffad.png)

## scoopのインストール

brew的なものをインストールします。
PowerShellをひらいでインストールします。管理者権限は不要です。
手順は[こちら](https://qiita.com/rhene/items/a5616857981293d06940#%E6%89%8B%E9%A0%86)の記事を参考にします。

任意のPythonを選べるようにするには[こちら](https://qiita.com/rhene/items/a5616857981293d06940#%E8%A3%9C%E8%B6%B3---python%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6-%E3%81%9D%E3%81%AE1)を参考にします。

## pipxとPoetryのインストール

poetryを入れるためにpipxを入れます。下記記事でPoetryも入れているので、進めていきます。
[こちら]の(https://dev.classmethod.jp/articles/poetry-install-with-pipx/#:~:text=pep%2D514.reg%22-,pipx%E3%82%92%E5%85%A5%E3%82%8C%E3%82%8B,-%E6%AC%A1%E3%81%ABpipx%E3%82%92)記事を参考にします。


これで完了です。
Dateオブジェクトを使って、日時情報を取得しよう

## 現在の日時を取得する
`Date`オブジェクトの引数を指定しない（空）ことで、現在の日時を取得する`Date`オブジェクトのインスタンスを作成します。
``` javascript: sample.js
const currentDate = new Date()
console.log(currentDate)
```
``` javascript: 出力結果（2024-07-06 08:15:51現在）
Sat Jul 06 2024 08:15:51 GMT+0900 (日本標準時)
```

## 特定の日時を取得する
`Date`オブジェクトのインスタンスを作成します。
このとき、特定の日時を表す引数を指定します。
``` javascript: sample.js
const dateObject = new Date(2022, 9, 27, 17, 20, 15)
console.log(dateObject)
```
::: note warn
Dateオブジェクトの第2引数では月を指定しますが（上記例の「9」）、
0（=1月）から始まることに注意。
そのため、第2引数と実際の月の対応は以下のようになる。
- 0→1月（Jan）
- 1→2月（Feb）
- 2→3月（Mar）
...
- 9→10月(Oct）
...
:::

``` javascript: 出力結果
Thu Oct 27 2022 17:20:15 GMT+0900 (日本標準時)
```
※追記
Dateオブジェクトの引数は、上記以外の形式でも指定可能です。
例えば、
``` javascript: sample.js
const dateObject = new Date("1991-10-03T02:30:32.999+09:00")
console.log(dateObject)
```

``` javascript: 出力結果
Thu Oct 03 1991 02:30:32 GMT+0900 (日本標準時)
```

その他の形式については[こちらのサイト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date#%E6%97%A5%E6%99%82%E6%96%87%E5%AD%97%E5%88%97%E5%BD%A2%E5%BC%8F:~:text=%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82-,%E6%97%A5%E6%99%82%E6%96%87%E5%AD%97%E5%88%97%E5%BD%A2%E5%BC%8F,-%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%81%97%E3%81%A6 "MDH_Date_format")の「日時文字列形式」を参照ください。

## Dateオブジェクトのインスタンスメソッドを使用し、日時情報の一部を取得しよう
Dateオブジェクトには様々なインスタンスメソッドが存在します。
その中から、日時情報が取得できるインスタンスメソッドを使って、よく見ることがある表示形式で日時情報を出力します。

``` javascript: sample.js
const setDate = new Date('2022-10-27')
const setYear = setDate.getFullYear()  //年を取得
const setMonth = setDate.getMonth() + 1  //月（0~11）のインデックスを取得。+1することで、後述の配列に沿ったインデックス番号としている。
const setDay = setDate.getDate()  //日を取得
const setDayOfWeek = setDate.getDay()  //曜日(0~6)を取得。

console.log(
  `${setYear}/${setMonth}/${setDay}(${['日', '月', '火', '水', '木', '金', '土'][setDayOfWeek]})`
)
```

``` javascript: 出力結果
"2022/10/27(木)"
```

その他のインスタンスメソッドについては[こちらのサイト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89 "MDH_Date_instanceMethod")を参照ください。
RFPとは？メリットや注意点、作成の流れを分かりやすく解説！–情報システム部門を刺激するメディア「情シスのじかん」より

「情シスのじかん」は、情報システム部門のプロフェッショナルを対象としたメディアです。実務に役立つノウハウや革新的なアイデアを提供し、学びとネットワーキングの場を提供することを目指しています。最新の技術動向やベストプラクティス、成功事例を通じて、情シス担当者のスキルアップをサポートします。

ここで、Qiitaの読者の皆様向けに、「情シスのじかん」で公開された記事をピックアップ＆サマリ紹介します！Qiitaは技術者向けの情報共有プラットフォームとして、より実践的で具体的な技術情報を提供する場です。情シスのじかんは、特に情報システム部門に特化した内容を中心にしていますが、両者の強みを活かして、プロフェッショナルの皆様に有益な情報をお届けします。

### RFPとは？メリットや注意点、作成の流れを分かりやすく解説！
![rfp.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/db76a6bd-f3e3-b714-a797-f611ec923d41.jpeg)

本記事はRFP（提案依頼書）を知りたいユーザー向けの記事です。RFPにて記載する内容や、RFIやRFQとの違いを紹介するとともに、作成する目的や作成するメリット、RFP作成の流れも取り上げていますので、ぜひ参考にしてください。

https://josys.wingarc.com/josys-keyword-request-for-proposal

### 情報システム部門を刺激するメディア「情シスのじかん」とは？
![情シスのじかんbyWingArc1st (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3816554/89afaa7e-b941-a10a-c813-8485daca4502.png)

初めまして、『情シスのじかん』です。
遂に、日本中の情シス部門のあなたを刺激するメディアが発足します！🚨
さぁ、テクノロジーを飼い慣らし、仕事や生活の質を向上させ、一緒に未来を切り拓きましょう。皆様の生活リズムに合わせた情報発信で、常に寄り添い、共に未来を切り拓くためのメディアです。

ぜひ、情報システム部門の皆様の活動の取材をさせてください。

https://josys.wingarc.com/about