OmniAICreator/Qiita-1.07M huggingface dataset:
【備忘録】Springスターター・プロジェクト(Spring Initializr)を使う時の注意点【Spring Boot, eclipse】

# Javaのバージョンが正しいか確認する！
![スクリーン ショット 2024-04-01 に 15.59.00 午後.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3735520/dcd82509-9117-0aa2-0e3f-35ae1b550de2.png)

この確認をし忘れて違うバージョンを選択していると、JREシステムライブラリがアンバインド済みになってしまい、

:::note alert
エラー: メイン・クラスcom.example.demo.~を検出およびロードできませんでした
原因: java.lang.ClassNotFoundException: com.example.demo.~
:::
:::note alert
型 java.lang.Class を解決できません。It is indirectly referenced from required type org.springframework.boot.autoconfigure.SpringBootApplication
:::
結果としてこのようなエラーが出てしまうかもしれない。

もし上のようなエラーが出たら↓の記事を参考にしていただきたい。
https://qiita.com/sekibouya/items/d3f91209d6d110b1e73e
UnityからUEに移行すればグラフィックが良くなると思ったらそう上手くも行かなかった話(VR)

## 目的
VRゲームにて、UnityからUEへ移行することによってグラフィックを強化し、没入感を高めたい。

## 検証バージョン
Unity 2022.3.2f1
UE 5.2

## 検証環境
Quest2

## 検証方法
Unity・UEどちらも単純なVR環境を用意し、同じオブジェクトを同様に配置してグラフィックを比較する。
テクスチャ品質なども同じ。
また、UE5でのLumen・Naniteは非有効。

## 画像比較
上がUnreal Engine、下がUnity

### 1
![com.epicgames.MyProject2-20230830-183040.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/ee9d1310-886d-95f1-e357-dd1cafded50a.jpeg)![com.Fignny.HauntedHouse-20230830-182942.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/b442ed4f-c724-9191-0f5b-f0037a2987e6.jpeg)

### 2
![com.epicgames.MyProject2-20230830-183049.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/e7059a90-d16d-d05b-deec-7cadaeb4898e.jpeg)
![com.Fignny.HauntedHouse-20230830-182952.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/5442eeb6-d9ad-b310-2285-452c67801f03.jpeg)

### 3
![com.epicgames.MyProject2-20230830-183054.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/22276a00-4831-1292-a75b-ac15b20c6473.jpeg)
![com.Fignny.HauntedHouse-20230830-183548.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/28ec7f38-0f4c-8d58-5cf9-b2144ea4292d.jpeg)

## 結論
元々がVR向けの軽量モデルということも理由としてあるだろうが、単にモデルを移しただけではグラフィックは向上しなかった。
Unreal Engine5は魔法のツールではない。

[Lumen・Naniteを有効化](https://qiita.com/kazuma_f/items/d1cb3f4f23e3265d2077)したり、UE用にテクスチャ品質を良くしたりといった調整をすれば、改善する可能性はある。

ただ、過度に調整をするとフレームレートで詰まる可能性はある。
Unityが70前後、Unreal Engineが60前後出ていたのでフレームレートの観点から言えばUnityの方が優秀。

## おわりに
弊社では現在、XRエンジニアを積極募集しています！
ご興味を持っていただいた方は以下のリンクからぜひお問い合わせください。
https://www.wantedly.com/companies/company_1847744/projects
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e61702d6e6f727468656173742d312e616d617a6f6e6177732e636f6d2f302f333632363338322f38383366666539642d353333662d303037312d356637312d6664653433333631636265312e706e.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758745/3b989aba-d68e-80b8-c20f-5b00a863bfac.png)
EBS・スナップショットの暗号化

## 初めに
本日は、EBS・スナップショットの暗号化に関して、記載させて頂きたいと思います。
作成の際の注意点もあげてますので、ぜひご参考にして頂けたら幸いです。

## 暗号化
目的：ボリュームやスナップショットを暗号化する事は機密性を高める為
→暗号化する際は、AWS KMSサービスを使用します。
※機密性とは？：決められた人だけが対象のデータにアクセスが出来る様にする事です

![スクリーンショット 2024-04-01 15.44.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744656/1f56f88a-dc6d-145b-0472-5d5c0694405b.png)

## 暗号化されるデータ
・ボリューム内の保存データ。
・ボリュームとインスタンス間で移動されるデータ。
・ボリュームから作成されたスナップショット。
・スナップショットから作成されたボリューム。

## 作成の流れ(注意点有り)
ボリュームの作成時に暗号化のオプションを有効にする。
![スクリーンショット 2024-04-01 14.55.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744656/eadf6454-3443-6cfb-ea49-bd133092a63b.png)

##### ※注意点
作成済みの未暗号化EBSボリュームから暗号化されたボリュームへとステータス変更は出来ません。
ただ、スナップショットからは、暗号化されたEBSボリュームは作成出来ます。
![スクリーンショット 2024-04-01 15.48.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3744656/479c74dc-f9e7-c919-931f-482abd4bf68c.png)

## 最後に
今回は暗号化に関して記載してみました。
皆様に読んでいただき、ご指摘部分がありましたら、教えて頂けると幸いです。
よろしくお願いします。
【メモ】SQSの受信とクリア


## SQS
### SQSの受信とクリア

```ruby:title: SQS　受信とクリア
aws sqs receive-message --queue-url https://sqs.ap-northeast-1.amazonaws.com/xxxxxxxxxx<アカウントID>/<SQSキュー名> --visibility-timeout 1 --max-number-of-messages 10
```
※2回実行すると、受信メッセージがクリアされDLQ行きになる

## まとめ
本稿が、SQSの受信とクリアを行いたい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)
【メモ】CloudWatchLogsインサイトの保存されたクエリの確認


## CloudWatchLogsインサイト
### 保存されたクエリの確認

```ruby:title: CloudWatchLogsインサイト　保存されたクエリの確認
pwsh --Command '(aws logs describe-query-definitions  | ConvertFrom-Json).queryDefinitions | sort-object name'
```

## まとめ
本稿が、CloudWatchLogsインサイトの保存されたクエリの確認を行いたい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)
【JavaScript】構造化データとは

# 構造化データ（Structured Data）とは
構造化データは、ソフトウェアと人間の両方が同じように効率的にアクセスできるように標準化された形式を持つデータです。
わかりやすくいうと売上データとか顧客データのような、あからじめデータの構造が決まっていて、行と列のある表形式で管理するのが簡単そうなデータのこと。
C#でWord文書をMarkdown形式に変換する方法（Doc、Docx、RTF、XMLなどの形式を含む）

文書の形式の多様性は、情報交換手段を豊かにしました。その中でもWord文書は、その強力な機能性から広く使われています。しかし、ネット上での共有、バージョン管理、コードの閲覧や編集などの面では、Markdown形式がその簡潔さ、読みやすさ、編集しやすさなどの特徴から独自の利点を示しています。Word文書をMarkdown形式に変換することで、文書の構造を簡素化し、余分な書式情報を削除し、さまざまなテキストエディタで内容を素早く表示および編集することができます。また、GitHubやGitLabなどのバージョン管理システムで文書をより良く管理およびメンテナンスすることや、HTMLやPDFなどのさまざまな出力形式を簡単に生成することもできます。本記事では、.NETプラットフォームでC#コードを使用して**Word文書をMarkdown形式に変換する方法**を紹介します。

- **[Word文書をMarkdown形式に変換する方法](#word文書をmarkdown形式に変換する方法
)**

この記事では、[Spire.Doc for .NET](https://jp.e-iceblue.com/download/spire-doc-for-net.html)を使用します。公式ウェブサイトから入手するか、NuGetを通じて取得できます：`PM> Install-Package Spire.Doc`。

[無料ライセンスの申請](https://www.e-iceblue.com/TemLicense.html)

## Word文書をMarkdown形式に変換する方法
Markdownファイルでは、リンク形式で画像が保存されるため、文書内の画像は直接Markdownファイルに変換することはできず、別途処理する必要があります。変換に使用する文書は、Markdownでサポートされていないコンテンツ形式ができるだけ含まれないようにする必要があります。

`Document.LoadFromFile(string fileName, FileFormat fileFormat)`メソッドを使用して、ファイルからWord文書、RTF文書、XML文書、WPS文書などの形式の文書を読み込み、`Document.SaveToFile(string fileName, FileFormat.Markdown)`メソッドを使用してこれらの文書をMarkdown形式に変換して保存することができます。

以下に詳細な手順を示します：
1. `Spire.Doc`名前空間をインポートします。
2. `Document`オブジェクトを作成します。
3. `Document.LoadFromFile()`メソッドを使用してWord文書を読み込みます（`FileFormat`で形式を指定）。
4. `Document.SaveToFile()`メソッドを使用して文書をMarkdown形式に変換して保存します。
5. リソースを解放します。

**コード例：**
```c#
using Spire.Doc;

namespace MdToDocx
{
    class Program
    {
        static void Main(string[] args)
        {
            // Documentオブジェクトの作成
            Document doc = new Document();

            // Word文書の読み込み
            doc.LoadFromFile("サンプル.docx", FileFormat.Docx);

            // 文書をMarkdown形式に変換して保存
            doc.SaveToFile("WordからMarkdownへの変換.md");
            doc.Close();
        }
    }
}
```

**変換結果：**
![Word文書をMarkdown形式に変換する方法](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278784/f49eaa28-db2d-6b77-53db-d2575f5ddf39.png)

この記事では、.NETプラットフォームでC#コードを使用してWord文書をMarkdown形式に変換する方法について説明しました。

より多くのWord文書の操作や変換チュートリアルについては、[Spire.Doc for .NETのチュートリアル](https://jp.e-iceblue.com/tutorials/net/spire-doc-net/doc-net-program-guide-content.html)ページをご覧ください。

問題が発生した場合は、[Spire.Docフォーラム](https://www.e-iceblue.com/forum/spire-doc-f6.html)で技術サポートを受けることができます。
【LLMの研究者向け】400本を超えるLLMに関する論文のリストを公開・更新しています

![Screenshot 2024-04-01 at 13.37.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2842632/5b0b3b9f-27d0-b22f-a287-e71c6dd8713b.png)

https://github.com/shure-dev/Awesome-LLM-related-Papers-Comprehensive-Topics

自身の研究のためにLLMに関する論文を表形式でまとめています。
このレポジトリでは特にさまざまな分野の論文を表にする(Comprehensive)ことを目的としています。具体的には以下のキーワードに注目しています。

> CoT / VLM / Quantization / Grounding / Text2IMG&VID / Prompt / Reasoning / Robot / Agent / Planning / RL / Feedback / InContextLearning / InstructionTuning / PEFT / RLHF / RAG / Embodied / VQA / Hallucination / Diffusion / Scaling / ContextWindow / WorldModel / Memory / ZeroShot / RoPE / Speech


GitHub上には既に同様のレポジトリが多数存在しておりますが、LLMに関する多岐にわたる領域を網羅したレポジトリが少ないということに気付きました。このため、私はこのレポジトリを公開することを考えました。

使用用途としては研究のアイデアが思い浮かばない時などにインスピレーションを得る、などがあるかなと思っています。意外と関係のないトピックの論文が良いアイデアを生むきっかけになることはあるかなと思います。実際、自分はこのリストに結構お世話になっています。適当にタイトルを眺めるだけでも色々なことが見えてくる時がありました。特にSurvey論文は重要かなと思います。

Notionで表を公開しています。カテゴリに対してフィルター機能などを使えばより見やすくなるかと思います。

GitHub上のIssueで意見をお待ちしております。掲載して欲しい論文があればプルリクエストを送っていただくと大変嬉しいです。

追記
現在私のGitHubアカウントがBAN状態にありこの記事で紹介しているレポジトリが見れない状態が続いております。復旧次第また報告します。
Notionの表へのリンクだけここに記載します。

https://potent-twister-29f.notion.site/b0fc32542854456cbde923e0adb48845?v=e2d14d2ef0c848f5a1d5b71f9977d7c5&pvs=74
年収を最大化するエンジニア転職戦略

![PlusX-ver2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758829/0af7daf3-c83c-0e5d-cf3a-50771e88d419.png)


今回は「転職希望のエンジニア向けウェビナー」のご案内です。
テーマは「年収を最大化するエンジニア転職戦略」になります。

現在転職活動中だがなかなか思った成果が得られないエンジニアの方、
あるいは今後のキャリアアップに向けて転職戦略を検討中の方はぜひご登録ください。

ウェビナー特設LP
https://www.vincere.io/ja-ja/blog/%E5%85%B1%E5%82%AC%E3%82%A6%E3%82%A7%E3%83%93%E3%83%8A%E3%83%BC%E9%96%8B%E5%82%AC%E3%81%AE%E3%81%94%E6%A1%88%E5%86%85-%E5%B9%B4%E5%8F%8E100%E4%B8%87%E5%86%86%E4%BB%A5%E4%B8%8Aup%E3%81%AE%E6%88%90%E5%8A%9F%E4%BE%8B%E3%81%8B%E3%82%89%E8%AA%AD%E3%81%BF%E8%A7%A3%E3%81%8F%E3%83%BC%E5%B9%B4%E5%8F%8E%E3%82%92%E6%9C%80%E5%A4%A7%E5%8C%96%E3%81%99%E3%82%8B%E3%82%A8%E3%83%B3%E3%82%B8%E3%83%8B%E3%82%A2%E8%BB%A2%E8%81%B7%E6%88%A6%E7%95%A5/

【テーマ】
現在の転職市場においてエンジニアは圧倒的に売り手有利の状況です。
ただし、そういった市場の状況と「実際に今後のキャリアアップや年収増に繋がる転職」ができるかどうかは別問題。
上位レイヤーになればなるほど1回の転職でのミスがその後のキャリアに大きな影響を及ぼしかねません。
本セミナーではエンジニアハイレイヤー専門の転職エージェント「PlusX」のCEO・藤本様をお呼びし、エンジニアの方が後悔しない転職戦略の作り方を伝授します。

【Webinarプログラム概要】
開催日：2024年4月11日(火)　19:00〜20:00
視聴方法：GoogleMeet（オンライン）
主催：Vincere社 、合同会社PlusX
ウェビナー参加フォーム（LPからも参加可）
https://docs.google.com/forms/d/e/1FAIpQLSdio5b3Fph7YTUxHUjeo6dE609m0I2rtEAeKv6K8VHInccqyQ/viewform

【ウェビナー内容】
エンジニアの年収アップ転職の必要条件
転職エージェントの選び方
Plus X社が提供できる価値
エンジニア転職の成功事例・失敗事例

【ターゲット（こんな方におススメ）】
最近転職活動を始めたが、キャリアアップに繋がるか不安
今後EMやVPoEを目指したいが、会社・事業の選び方がわからない
転職活動を始めるかどうか迷っている
良い転職エージェントに当たったことがないので、選び方を知りたい

ご不明点等ございましたら、お気軽にご連絡ください。
※応募の状況によって、申し込みは予告なく締め切る場合があります。予めご了承ください。

ーーーーーーーーーーーーー

■注意事項
・参加が難しくなった場合は、お早めにキャンセル頂きますようよろしくお願い致します。
（※キャンセルの場合は、sho.tsukahara@theaccessgroup.comまでご連絡ください）
・当日のセミナーの録音、動画撮影はご遠慮ください。

■個人情報保護方針について
今回ご提供いただく個人情報はVincereの両社が取り扱い、個人情報保護方針に基づき厳重に管理いたします。

Vincere ：プライバシーポリシー
https://www.vincere.io/ja-ja/privacy/

Vincere公式HP：
https://www.vincere.io/ja-ja/
【Julia】インストールからjlファイルの実行まで

# はじめに
**Julia** とは、**科学計算や数値計算、データ解析**などの用途に特化したプログラミング言語です。Julia の特徴的な点としては、**C言語に匹敵する計算性能**を持ちながら、**Python のように書きやすい**点（例えば、変数の型を逐一宣言する必要がないなど）が挙げられます

Github を漁っていた際に、この Julia を用いた数値流体力学のソースコードを発見しました。ただ、Julia はまだ **比較的新しいプログラミング言語 ** であり、これを実行するための環境設定についてまとめられているものが見つかりませんでした。そこで今回の記事では、**Julia のインストールから実行まで** の流れをまとめておきます。

## Julia のインストール
　Julia のインストールは非常に簡単です。[Juliaの公式ページ]("https://julialang.org/downloads/")から各自の OS に合わせたものをダウンロードしてください。私は M3 mac を使用しているため、
 
## Julia の起動
　Finder の Application に Julia-1.10 がダウンロードされているため、これを起動することで Julia が起動し、Julia の **REPL**(Read-Eval-Print-Loop)が開きます。
 
<img width="500" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3743858/4e154d50-194e-181b-8e20-eafe3ef092bb.png">

REPL とは Julia との **対話型環境** であり、Julia のコードを入力すると、それに対して結果が表示されます。REPL では直接コードを書き込むだけではなく、ソースコードをインポートして実行させることも可能です。その手法について、続いて説明していきます。

## Julia で記述したソースコードのREPLでの実行
REPL で Julia のソースコードファイル（拡張子は **.jl** ）を実行するのは、REPL で
```julia:ファイルの実行＿誤
include("⚪️⚪️.jl")
```
というコマンドを入力するだけで実行が可能です。ただ、今回これを実行したところディレクトリが誤っていたため以下のエラーが出ました。
```julia:エラー
ERROR: SystemError: opening file "/Users/[ユーザー名]/main.jl": No such file or directory
```
ということでファイルの実行のコマンドをファイルパスを含んだ形に書き換えて実行しました。例えば、デスクトップに実行ファイルを保存した際には以下のようになります。
```julia:ファイルの実行_正
include("⚪/Users/[ユーザー名]/Desktop/⚪️⚪️.jl")
```
基本的にはこのようにしてソースコードを実行します。ただ、実行したファイル内で用いられているパッケージをインストールしていないため、これではまだファイルの実行はうまくいきません。次節で Julia におけるパッケージとその使用方法について説明します。

## Julia とパッケージについて
Julia において、標準ライブラリに含まれない機能を用いるために **パッケージ** というものを導入する必要があります。パッケージの管理はパッケージマネージャーである **Pkg** を用いて行います。

このことを知らずに先ほどのファイルを実行しようとしたところ、以下のようなエラーが。
```julia: エラー内容
LoadError: ArgumentError: Package Plots not found in current path.
- Run `import Pkg; Pkg.add("Plots")` to install the Plots package.
```
簡単に言えば、先ほどのファイルを実行するには **Plots** というパッケージが必要であるとのこと。調べてみたところ、Plots は Julia で **データの可視化** を行う際に用いられる基本的なパッケージでした。
ということで、エラーの指示に従って以下を実行してみます。
```julia:パッケージのインストール
import Pkg; Pkg.add("Plots")
```
これを実行すると、無事に Plots パッケージがインストールされました。パッケージのインストールが完了した上で、先ほどと同様にファイルの実行のコマンドを入力すると、無事ファイルが実行されます。

# まとめ
julia の本当に基礎的な部分に絞って Julia の使用方法についての説明を行いました。ファイルの実行の方法はREPLを使用しない方法などもありますので、今回は Julia の特徴でもある REPL　を用いた方法を説明しました。この記事がどなたかの助けになったらと思います。
XAMPPをインストールしたけど、立ち上がらない（Mac Book 編）

## MacBookでXAMPPが立ち上がらない・機能しない
MacbookでXAMPPをインストールにしたにもかかわらず、XAMPPが立ち上がらない場合の解決方法をまとめてみました！

## 参考サイト
私が解決するにあたって参考にしたサイトです。こちらも併せて確認するとばっちしだと思います👌

https://note.com/sharky_baby/n/n412d893b6db8

https://note.com/araisan_cu/n/ne839b4765935

## MacbookでXAMPPをインストールにしたにもかかわらず、XAMPPが立ち上がらない。

公式サイトからXAMPPをインストールしたけど、下記のようにXAMPPを立ち上げることができませんでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673349/6f21f924-1541-cfa8-fd87-22b0a30585bf.png)

参考サイトをもとに以下の手順やってみると、無事解決しましたー！
1. 画面上部にある「マーク」からシステム設定または「歯車⚙️のマーク」を選択する。
2. メニューバーにある「プライバシーとセキュリティ」→セキュリティ欄にある「ダウンロードしたアプリケーションの実行許可」を **APP Store と確認済みの開発元からのアプリケーションを許可にする**にチェック☑️する。
3. すると、、「このまま開く」が出てくるので、そちらをクリックする。
4. Macbook用の「ユーザー名」と「パスワード」を入力して「OK」し、進めていくとインストール完了です！！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3673349/8ac4a46b-b5ce-1dcc-64cd-8f10143a7587.png)

以上！！

## 気づいたこと
PHPのXAMPPをインストールするのは初めてだったので、立ち上がらない時は「えぇーーーー😭」と思いました。ネット上で検索してもWindows版の内容が多くてかなり詰みを感じまていましたが、なんとか立ち上がって嬉しかったです😄
もし同じ現象が起きて詰んでいる方がいましたら、ぜひこちらの記事または参考サイトから試してみてくださいね👍
今後は、Rubyで作成したWebアプリをPHPで作成してみようと思います！
引き続きよろしくお願いいたします。。
MacBookでXAMPPのMySQLが機能しない。。

## MacBookでXAMPPのMySQLが機能しない（Macbook編）
公式サイトからXAMPPをインストールしたけど、MySQLがSTOPになって機能しない場合の解決方法をまとめてみました！

## 参考サイト
私が解決するにあたって参考にしたサイトです。こちらも併せて確認するとばっちしだと思います👌

https://note.com/araisan_cu/n/ne839b4765935

## ターミナルを準備する
私はVScodeを利用していたのでVScodeでターミナルを立ち上げて、以下のように操作しました。

1.brew services listで自動起動を確認する。

```
~$ brew services list 
```
2.私の場合は、**mysql started** と表示されていました。

3.以下のように、自動起動を止めます。

``` 
brew services stop mysql
```

4.XAMPPへ戻り（またはXAMPPを起動して）、XAMPPのMySQLのスタートボタンを押すと無事に起動できました！

以上！！
A symbol name was expected! A reserved keyword can not be used as a column name without backquotes. (near "varchar" at position 2022)

phpmyadmin でCSVファイルをインポートしようとしたらエラー。


> エラー
> 静的解析:
> 
> 解析中に 3 個のエラーが見つかりました。
> 
> 1. A symbol name was expected! A reserved keyword can not be used as a column name without backquotes. (near "varchar" at position 2022)
> 1. Unexpected beginning of statement. (near "21" at position 2030)
> 1. Unrecognized statement type. (near "DEFAULT CHARACTER SET" at position 2035)





![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/ccb5365d-57f3-bf6a-d50e-26c201d350a4.png)

# 環境

> mysql Ver 15.1 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64) using EditLine wrapper
> 母艦 Ubuntu22.04 LTS

# 解決

csv ファイルを見てみたら、CQ列は空のはずだけれども、なにか入っているようだ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/e7d7a161-9009-3ef9-6a0e-32479eae6007.png)


CQ列を削除して解決。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/b629ac5c-80f9-69e2-8bde-61b189127617.png)
wineからUbuntuのディレクトリを参照する【備忘録】

wineにA5M2を入れて、SQLiteをつなげようと思ったときにUbuntu側のディレクトリの参照方法がぱっとわからなかったのでメモ。

- バージョン情報  <br>
    <table>
        <tr>
            <td>Ubuntu</td>
            <td>22.04.4 LTS</td>
        </tr>
        <tr>
            <td>wine</td>
            <td>9.0</td>
        </tr>
    </table>



wineではUbuntuのルートディレクトリをZドライブに当てるらしい。
ただそれだけ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3591292/c9395806-0856-b648-bc64-64aad5996f0e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3591292/d3df898a-6cb4-4cce-84ed-bf9e0a035383.png)
#defineが意外に便利な件について

:::note warn
ここで出てくるコードは、バグなどは考慮していません。
そのまま流用するのはおやめください。
:::
# マクロは便利
#defineマクロがまじで便利です。といっても活用できる場面は限られてますが。
# 例
## 省略前
たとえば、入力された言葉に応じて返す言葉を返す簡素なプログラムがあったとしましょう。

```cpp:言葉を返すプログラム.cpp
#include <iostream>
using namespace std;

int main(){
    char* input[255]; //入力を保存する変数
    while(true){
        cin.getline(input, 255);
        switch(input){
            case "つらい":
                cout << "そうなんだ... 頑張れ！" << endl;
                break;
            case "プログラミング面倒くさい":
                cout << "だよね！" << endl;
                break;
            case "ハハハハハ！　人がゴミのようだ！":
                cout << "ム〇カの真似ですか？w" << endl;
                break;
            case "眠い":
                cout << "PC触ってないでさっさと眠れや" << endl;
                break;
            case "俺のYoutubeチャンネル登録してよ！":
                cout << "残念、私はアプリなのでそんなことできません。" << endl;
                break;
            case "もう会話終わる":
                cout << "じゃあね！" << endl;
                return 0;
        }
    }
}
```
同じような処理が多いですよね。新たに追加するにはコピペしてまた同じようなことを書かないといけないし、これだと改行方法を変えたりcoutをprintfに変えるのが大変です。
**そこで#define!**
コードの先端ぐらいにこのようなコードを追加します。
```cpp
#define Kaiwa(input, answer) case input: cout << answer << endl; break;
```
これはマクロです。これはマクロはマクロでも、関数みたいに使えます。
どんな風に展開されるかというと
```cpp:展開元.cpp
#define Kaiwa(input, answer) case input: cout << answer << endl; break;
Kaiwa("おはよう！","おはようございます！");
```
```cpp:展開後.cpp
case "おはよう！": cout << "おはようございます！" << endl; break;
```
defineマクロは、このように色々なものを省略できます！
使い方は上手く説明できないので、検索してほしいです。
では、一番最初のコードを#defineで省略すると...
## 省略後
```cpp:省略した言葉を返すプログラム.cpp
#include <iostream>
using namespace std;
#define Kaiwa(input, answer) case input:cout<<answer<<endl;break;

int main(){
    char* input[255]; //入力を保存する変数
    while(true){
        cin.getline(input, 255);
        switch(input){
            Kaiwa("つらい","そうなんだ... 頑張れ!");
            Kaiwa("プログラミング面倒くさい","だよね！");
            Kaiwa("ハハハハハ！　人がゴミのようだ！",
                        "ム〇カの真似ですか？w");
            Kaiwa("眠い","PC触ってないでさっさと眠れや");
            Kaiwa("俺のYouTubeチャンネル登録してよ！",
                        "残念、私はアプリなのでそんなことできません。");
            case "もう会話終わる":
                cout << "じゃあね！" << endl;
                return 0;
        }
    }
}
```
このように省略できました。
## 文字にする
また、文字列型じゃなくても、#defineで文字列にすることもできます。
その方法は、このようにします。
```cpp
#define toStr(data) #data
```
こうすると文字にできます。
使い方の例
```cpp:#~~~の使用例.cpp
#include <iostream>
#define input(value) cout<< #value <<"の値を入力してください:";cin>>value;
int main(){
    int max, min;
    cout << "乱数を生成します。設定を入れてください。" << endl;
    cout << "maxは最大値、minは最小値です。" << endl;
    input(max); //展開後： cout<< "max" <<"の値を入力してください:";cin>>max;
    cout << endl;
    input(min); //展開後： cout<< "min" <<"の値を入力してください:";cin>>min;
    cout << "乱数は、" << Math.random() % (max - min) + min << "ですね。";
    return 0;
}
```
詳細は調べてほしいです。
# まとめ
#defineは、同じような処理、文が続くようなものにはガンガン使いましょう。

最後まで見てくれてありがとうございました。なにかありましたらコメントよろしくお願いします。
今さらGitの概要についてまとめてみた

# 今更Gitの構造についてまとめ

## Gitとは
単独でも複数人でも、ある時点でのファイルの変更内容を保存していくためのツール。
リポジトリと呼ばれるコードの変更を保管する場所（仮想の倉庫みたいなものをイメージしてください）へローカルの変更差分を放り込んで行き、過去へ遡及して変更履歴を管理できます。

大変お恥ずかしながら上記のような概念的な理解しかできておらず、自身の頭の中で一連の流れをイメージできていないことを自覚したので、今回は図に起こす事をメインに記事を作成しました。

## 早速図に書いてみる

図に起こす前にGitで主に使用する用語についてもまとめておきます。

・リモートリポジトリ
後述しますが、自身のローカルPCではなくGithub上に存在するファイル置き場の事です。

・ローカルリポジトリ
リモートリポジトリから自身のローカル環境に丸っとコピー（クローンともいう）してきたもの。
リモートの中身をそのまま複製したものというイメージで大丈夫です。
開発自体はこれをメインに進める形となります。

・ブランチ
英語で枝の意。
Gitの代名詞とも言える機能です。メインとなるリポジトリから分岐させて（「ブランチを切る」という言い方をします）他の開発メンバーと自身の変更が競合しないようにするための機能です。フロント側↔︎バック側のような同時に別々の領域を各々開発する際にも使用。枝分かれしたものを合流（マージと言います）させ、最終的に1つのプロダクトになります。
川の本流がリモートリポジトリ、支流がブランチでそれが合流するような画を想像してください。

・マージ
変更した差分をメインのリポジトリに上書きすること。
リモートリポジトリ　⇨　ローカルリポジトリ
ローカルリポジトリ　⇨　リモートリポジトリ
いずれの場合でも同じようにマージと呼称します。
但し、リモートリポジトリにホイホイマージできてしまうと思わぬ事故に繋がりかねないので、
ローカルリポジトリ　⇨　リモートリポジトリの場合はマージの前にプルリクエストという確認作業を挟みます。

・コミット
ローカルで加えたファイルへの変更をローカルに保存すること。
ゲームで例えるとRPGのセーブ機能みたいなもんだと思ってください。
「HTMLで要素を追加した」だとか、「関数を別のファイルに移動させて処理をまとめた」だとか、そういった変更を1つ1つコミットしていくことでコードの変遷を辿ることができるようになります。
勿論複数の編集をまとめてコミットすることも可能ですが、変更分が分かりにくくなって後で自分の首が締まるのでお勧めしません。ちなみに１行改行しただけでも「変更差分」として見なされます。

・プッシュ
ローカルの変更分をリモートへ同期させること。
ローカルでコミットされた変更差分をプッシュすることでリモートへマージすることができるようになります。

上に記載したような用語が多い上、少し構造がややこしい部分があるので、一旦図解してみます。

![Untitled (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/bf469dd0-4bfb-2d30-18ff-1db308a2a3bd.png)

上記の図におけるリモートは便宜上masterと呼称していますが、実際の表記はmainです。
一昔前だとmaster（リモート）とslave（ローカル）といった呼び分けがされていたそうですが、slave=奴隷という呼称は差別的な意味合いを連想させるということで現在の呼び方に変わったようです。

master(リモート)
↓
origin/main（ローカル）
↓
main(ローカルのmainブランチ)
↓
各作業ブランチ

階層（というと語弊があるかもしれませんが）的に表現するとこんな感じです。


## Gitコマンド　リモート　⇨　ローカル
矢印の横にあるgitが頭につく文字列はGitコマンドといい、ターミナルで叩けば上記の作業をCLI上で行うことができます。

```
# ①リモートから差分をダウンロードする（上書きはしない）
git fetch
```
```
# ②リモートからfetchした差分をローカルに上書きする
git merge
```

コマンドラインベースでのみ作業を行う場合は上記の手順でリモート↔︎ローカルの差分を確認してからマージできます。
差分をそのままローカルに上書きしてもOK！という場合は以下のコマンドであれば1回で済ませることも可能です。

```
# ①と②を同時に実行する
git pull
```
## 差分の避難（スタッシュ）

こちらはローカル⇨リモートへの変更を反映させる際の構造を大まかに図解したものです。

![スクリーンショット 2024-04-01 14.54.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3511203/c1ff1c13-40ff-da58-375c-fbaba07e3aa7.png)

開発中には作業ブランチで加えた変更を「消したくない・・・けどコミット（保存）も一旦せずに残しておきたい」というような状況もままあります。
そんな時に重宝するのがスタッシュ（stash）という機能です。

文字通り変更を加えた差分を傍に一旦置いておいて、必要であれば復元（restore）してコミット、やっぱり要らん！となったらそのまま削除（discard）することも可能です。
コミットやプッシュに比べるとやや限定的な場面での使用になるのですが、いざ使おうとすると意外と仕組みが分かりにくいので図にしてみました。

## 参考にしたサイト
[Githubとは？](https://www.fujitsu.com/jp/products/software/resources/feature-stories/cloud/github-overview/)
Concrete CMS: デバッグに便利な リクエストデバッガーコードサンプル

Concrete CMS のデバッグを行う際に、サーバーの環境設定がうまくいっているか、Concrete CMS の入っている Apache や Nginx にどのようなリクエストが届いているかを解析したい場合があります。

その際、以下のコードを `application/bootstrap/app.php` に加えて、リクエストのデバッグを手軽に行え流用にします。

`$key === 【ランダムな英数字の文字string】` の英数字の部分はパスワード的な役割をしています。48文字以上のランダムな英数字を生成して文字列 (string) として置き換えてください。

そうすると、以下の URL にアクセスすると、サーバーに届いているリクエストを可視化してくれます。

```
[Concrete CMS]/ccm/debug/request/[ランダムな英数字の文字string]
```

Concrete CMS の環境編集、カノニカルURL、キャッシュ設定などの CMS の設定情報を出力します。
追加で Config の値を表示したい場合は、適宜、Config の値を追加してください。


以下のサンプルコードは @hissy がベースを作り、Katz が一部改修を加えたものです。

```application/bootstrap/app.php
<?php

if ($app->isInstalled()) {
    /** @var \Concrete\Core\Routing\Router $router */
    $router = $app->make('router');
    $router->get('/ccm/debug/request/{key}', static function ($key) use ($app) {
        # Generate random key strings / ここをランダムな英数字に変換する
        if ($key === 【ランダムな英数字の文字string】) {
            $content = '<dl>';
            $content .= sprintf('<dt>Environment</dt><dd>%s</dd>', $app->environment());
            $content .= sprintf('<dt>Canonical URL</dt><dd>%s</dd>', (string) URL::to('/foo'));
            $content .= sprintf('<dt>Block Cache</dt><dd>%s</dd>', ($app['config']->get('concrete.cache.blocks')) ? t('Yes') : t('No'));
            $content .= sprintf('<dt>Override Cache</dt><dd>%s</dd>', ($app['config']->get('concrete.cache.overrides')) ? t('Yes') : t('No'));
            $content .= sprintf('<dt>Full Page Cache</dt><dd>%s</dd>', ($app['config']->get('concrete.cache.pages')) ? t('Yes') : t('No'));
            $request = Request::getInstance();
            $content .= sprintf('<dt>Request Detail</dt><dd>%s</dd>', nl2br((string) $request));
            $content .= sprintf('<dt>Port</dt><dd>%s</dd>', $request->getPort());
            $content .= sprintf('<dt>Scheme</dt><dd>%s</dd>', $request->getScheme());
            $content .= sprintf('<dt>Secure</dt><dd>%s</dd>', ($request->isSecure()) ? t('Yes') : t('No'));
            $content .= sprintf('<dt>Trusted Proxy</dt><dd>%s</dd>', ($request->isFromTrustedProxy()) ? t('Yes') : t('No'));
            foreach ($request->server->all() as $key => $value) {
                $content .= sprintf('<dt>%s</dt><dd>%s</dd>', $key, $value);
            }
            # Sample Output
            ## Output Config value of `example.api.uri`
            // $content .= sprintf('<dt>Config example (example.api.uri)</dt><dd>%s</dd>', $app['config']->get('example.api.uri'));
            $content .= '</dl>';
            return new Response($content);
        } else {
            return new Response('', Response::HTTP_FORBIDDEN);
        }
    });
}
```
clang/emscripten + WebAssembly の役に立たない小ネタ

## WebAssembly Custom Section を書き出す

インラインアセンブリでの、**.custom_section** で始まるセクションが WebAssembly Custom Section として出力される。
C/C++ ソースコードでは `__attribute__((section(".custom_section.(任意の名前)")))` と同等のはずだが、これで修飾したセクションは WebAssembly Data Section に乗ってしまうため、C/C++ の範囲での記述方法はない。

```asm:インラインアセンブリ
.section .custom_section.my_data,"",@
    .asciz "Hello, WebAssembly"
```

```wat:出力
(module
  ;; custom section "my_data", size 19
)
```

## WebAssembly ネイティブな setjmp/longjmp

コンパイルフラグに `-mllvm -wasm-enable-sjlj` を追加することで、setjmp/longjmp を WebAssembly Exception Handling にマッピングするコードを出力できる。
emscripten では JavaScript での例外処理/setjmp/longjmp を無効化する必要があるので、コンパイルフラグに `-sSUPPORT_LONGJMP=wasm -sDISABLE_EXCEPTION_THROWING=1` を指定する。

```C++:ソース
# include <stdio.h>
# include <setjmp.h>

jmp_buf t;

void test() {
    longjmp(t, 1);
}

int main() {
    if (setjmp(t) == 0) {
        test();
    } else {
        printf("Jumped!\n");
    }
    return 0;
}

```

### 参照

- [emscripten C setjmp-longjmp Support](https://emscripten.org/docs/porting/setjmp-longjmp.html?highlight=setjmp#webassembly-exception-handling-based-setjmp-longjmp-support)

## extenref/funcref を使う

extenref/funcref はそれぞれ `__externref_t` と `__funcref` を修飾した関数ポインタにマッピングされている。

```C++:externref
__attribute__((import_name("receive_object")))
__externref_t receive_object(void);

__attribute__((import_name("send_object")))
void send_object(__externref_t);

int main() {
    send_object(receive_object());
    return 0;
}
```

```C++:funcref
using main_fp_t = int (*__funcref)();

int main() {
	return 0;
}

__attribute__((used))
extern "C" main_fp_t exportMainAsFuncRef() {
    // WebAssembly での関数ポインタの正体は WebAssembly Table Index
    auto main_fp = &main;

    __asm(R"(
        local.get %0
        table.get __indirect_function_table
        return
    )" 
    : : "r"(main_fp));
}
```

なお、関数ポインタを直接 funcref に変換することはできない模様。

```C++
__attribute__((used))
extern "C" main_fp_t exportMainAsFuncRef() {
 	return (main_fp_t)&main;
}
// Cannot select: 0x2004f5a0ad8: funcref = addrspacecast[0 -> 20]
```

## WebAssembly Table を定義する

```cpp:C/Cpp
// static で 0 サイズな __externref_t のグローバル変数の配列が WebAssembly Table になる
static __externref_t table[0];

// 組み込み関数も用意されている
__builtin_wasm_table_grow(table, __builtin_wasm_ref_null_extern(), 1);
```

```asm:アセンブリ
subtable:
    .global subtable
    .tabletype subtable, funcref, 1
```

## clang/emscripten を使ってできないこと

- start function の指定
生成AIで GitHub Actions のワークフローを作成する

# 伝えたいこと
- 生成 AI はプログラミング以外にも使える
- ワークフローの yaml 生成をサポートしてもらう

# 概要
- GitHub Actions はワークフローを YAML 形式で定義して実行することができる
- テキスト形式になるので生成 AI のサポート受けやすい


# 実例
### GPT-4 Turbo を使った例
```:プロンプト
GitHub Actions で利用するワークフローを作りたい。yaml ファイルを生成して。要件は以下。
- python を利用
- 手動実行
- sample.py を実行する
```

```yaml:生成されたYAML
name: Manual Python Script Execution

on:
  workflow_dispatch: # このワークフローは手動でトリガーされます

jobs:
  run-python-script:
    runs-on: ubuntu-latest # 最新の Ubuntu ランナーを使用
    steps:
    - name: Checkout repository
      uses: actions/checkout@v3 # リポジトリのコードをチェックアウト

    - name: Set up Python
      uses: actions/setup-python@v4
      with:
        python-version: '3.x' # Python 3.x を使用

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        # 必要な依存関係があればここでインストールします

    - name: Run sample.py
      run: python sample.py # sample.py スクリプトを実行
```
runs-on は環境に合わせて変更していく。
そのまま実行可能なものが生成された。

定期実行も可能だが UTC で指定する必要がある。
日本時間でを強調しての生成にも成功した。
```:プロンプト
日本時間で毎週火曜日の午後2時からワークフローを実行させるには?
```
```yaml
on:
  workflow_dispatch:

  schedule:
    - cron:  '0 5 * * 2' # 毎週火曜日の05:00 UTCに実行（日本時間の午後2時）
```

フロー失敗時にslack通知したいケース

```:プロンプト
処理が異常終了した場合に slack 通知したい場合はどうすれば良い?
```

```yaml
(省略)
    - name: Run sample.py
      run: python sample.py
      continue-on-error: true # エラーが発生しても次のステップに進む

    - name: Notify Slack on failure
      if: ${{ failure() }} # 前のステップでエラーが発生した場合にのみ実行
      uses: 8398a7/action-slack@v3
      with:
        status: ${{ job.status }}
        fields: workflow,job,commit,repo,ref,author,took # 通知に含めるフィールド
        author_name: GitHub Actions
      env:
        SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} # GitHub Secrets から Webhook URL を取得
```
slack 通知に使用するアクションも色々あるが対応してくれた

GitHub Copilot でチャットから指示した場合も同等の結果を得ることが出来た。
Wheneverのタイムゾーン適用

### はじめに
Railsアプリケーション開発時に、Whenever gemを使用してCronジョブをスケジューリングすることは非常に一般的です。しかし、サーバーのタイムゾーンとアプリケーションのタイムゾーン設定が異なる場合がよくあります。このような状況でWhenever gemを使用する際にタイムゾーンを適切に扱う方法について説明します。

### 基本設定の問題点
Railsアプリケーションで`config.time_zone`を設定しても、Whenever gemを使用して設定したCronジョブはこのタイムゾーン設定を自動的に認識しません。例えば、アプリケーションがAsia/Tokyoに設定されている場合、毎日9時30分にジョブをスケジューリングするためには、サーバーのタイムゾーン設定に合わせて時間を調整する必要があります。

### 対策
Whenever gemを使用する際にRailsアプリケーションのタイムゾーン設定を明示的に適用したい場合は、以下のようにTime.zone.parseメソッドを使用してタイムゾーンを処理することができます。

```ruby
require File.expand_path('../config/environment', __dir__)

every :day, :at => Time.zone.parse('09:30am').utc do
  rake "leave_reminder:daily"
end
```

この方法は、Railsアプリケーションのタイムゾーン設定をCronジョブに適用したいときに役立ちます。このようにタイムゾーンを明示的に指定すると、Wheneverがスケジューリングする際にそのタイムゾーンを考慮してCronジョブを登録します。

## 参考
https://github.com/javan/whenever/issues/662
【メモ】CloudShell/Git 初期設定

## 本記事で実現できること
CloudShell初期設定を行う

## CloudShell事前確認
### 事前確認
リージョン選択で作業対象のリージョンが選択されていることを確認する
※別リージョンを選択していると、別リージョンにCloudFormationスタックが作成される
※CloudFormationスタックが正常に作成された際、
　リソースが想定の場所に作成されているか必ず確認する
![【AWS-IAM】アカウント棚卸時に、新規参画者のアカウントを作成したい (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/8e72a78d-4c73-9b88-807e-9f9dcd0eb3bb.png)


## CloudShell日本語化
### 日本語パックのインストール
```ruby:title: 日本語パックインストール
sudo yum install glibc-langpack-ja
```
CloudShellはhomeディレクトリ以外は永続化されないので、
後述するbash_profileに記載が良さそう

bash_profile記載例
```ruby:title: bash_profile記載例
Count=$(sudo yum list installed | grep -c glibc-langpack-ja)
if [ $Count -eq 0 ] ; then
        sudo yum install glibc-langpack-ja -y
fi
```

## アカウント環境の設定
### bash_profile編集
末尾に以下を追加

```ruby:title: bash_profile編集
$ vi ~/.bash_profile
export LANG="ja_JP.utf8"
export LANGUAGE="ja_JP:ja"
export LC_ALL="ja_JP.utf8"
 
export TZ="Asia/Tokyo"
```

### vim設定
末尾に以下を追加

```ruby:title: vim設定
vi ~/.vimrc
:set encoding=utf-8
:set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
```

### gitの日本語文字化け対応
リポジトリ内で以下のコマンドを実行

```ruby:title: git設定
cd ~/<Gitリポジトリ名>
git config --local core.quotepath false
```


### gitの初期設定
初期設定

```ruby:title:一般的な設定
$ git config --global user.email "xxxxxxx@scsk.jp"
$ git config --global user.name "xxxxxxxx.yyyyyy"
$ git config --global push.default simple
```


### CodeCommitのgitアカウント設定
CodeCommitのgitアカウント設定

```ruby:title:アカウント設定
$ vi ~/.netrc
machine git-codecommit.ap-northeast-1.amazonaws.com
login w99999-at-nnnnnnnnnnn
password XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
```

### gitのクローン
gitのクローン

```ruby:title:gitのクローン
git clone https://git-codecommit.ap-northeast-1.amazonaws.com/v1/repos/<Gitリポジトリ名>
```

### gitの最新取得
gitの最新取得

```ruby:title:gitの最新取得
git pull --progress -v --no-rebase "origin"
```

## まとめ
本稿が、CloudShell/Git 初期設定を行いたい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)
Git&GitHubの学習①

## はじめに

Git&GitHubの独習を始めました
あくまでも個人学習用備忘録なのであしからず（かなり省略が多いです）
GitHubのアカウントは既に作成済みのものとします

## Gitの設定

Gitのインストールの説明は省略します
コマンドはGit bashを使用しています

①ユーザー名の設定
```git
git config --global user.name "名前"
```

②メールアドレスの設定
```git
git config --global user.email "メールアドレス"
```

③設定内容を確認
```git
git config --list
```

④エディタの登録（今回はVisualStudioCode）
```git
git config --global core.editor "code --wait"
```

:::note info
別のエディタを登録したい場合は"code"の箇所にそのエディタのPATHを登録
:::

③エディタの設定を確認
```git
git config core.editor
```

## GitとGitHub間の認証方法

GitとGitHub間の認証方法には
SSH方式とHTTPS方式の２方式あるが
SSH方式の方が主流だそう

というわけでSSH Keyを生成
```git
ssh-keygen -t ed25519 -C "メールアドレス"
```

これで生成されたKeyのアドレスを確認しておくこと

続いてパスフレーズの設定を要求されるので入力します

終わったら生成した公開鍵をクリップボードにコピーします
```git
clip < "先ほど生成されたKeyのパス"
```

あとはGitHubのWebページでSettings → Keys と進んで
ペーストして完了です。

## フォークからクローンまでの手順

と言ってもフォークの手順はここでは省略
GitHub上でフォークしたいリポジトリの[fork]ボタンを押すだけです

フォークしたリモートリポジトリのクローンを行うには
まずフォークした先のリポジトリのページで[Code]→[SSH]→[コピーアイコン]を押していき
クローン時に必要なURLをコピーします

クローンしたいディレイクトリに移動しクローンを実行
```git
git clone "先ほどコピーしたリモートリポジトリのURL"
```

あとはクローンしたリポジトリのディレクトリに移動し
```git
code .
```
でVSCodeを起動して開発を行っていきます。

今回は以上です。
【JavaScript】JSONとは

# JSONとは
JSON（JavaScript Object Notation）は、データの構造を表現するための軽量なデータ交換フォーマットのことで、JSONは人間にも機械にも読みやすく、理解しやすいテキストベースの形式で表現されます。
主に、データのやり取りや保存に使用されます。
【Privacy Manifests】レポートがうまく出力できない時の対処方法

# はじめに
<!-- 発端や概要を記載 -->
前回の投稿で、Privacy Manifests対応でやることを投稿させていただきました。

https://qiita.com/propagandazm/items/b553cb3d4dd8214def08

で、実際にデモアプリとデモフレームワークを作ってやってみました。
少しつまずいた点があったので忘備として残します。

最近、[Alexandros]を懐かしみながら聴いています。
高校生の頃、[Champagne]から改名するあたりまで聴いてました。
そんなこと書くと年齢バレるか。

# 目次
<!-- タイトルとアンカー名を編集 -->
- [結論](#Conclusion)
- [（躓き１）レポートが出力できない](#Chapter1)
- [（躓き２）xcframeworkのマニフェストが反映されない](#Chapter2)
- [最後に](#Finally)

<!-- 各チャプター -->
<a id="#Conclusion"></a>
# 結論

躓きポイントに気を付けることで、想定通りのレポートを出力することができました。

![スクリーンショット 2024-04-01 12.50.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/f8a7e294-b26a-bd4b-cc6f-510a62da00b8.png)

:::note warn
本記事ではレポートの出力方法は記載しません。
記載方法については、以下記事などをご参照ください。

<a href="https://zenn.dev/akatsuki174/articles/df5f2323659db7#%E3%83%97%E3%83%A9%E3%82%A4%E3%83%90%E3%82%B7%E3%83%BC%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88">Get started with privacy manifests ざっくりまとめ</a>

:::


<a id="#Chapter1"></a>
# （躓き１）レポートが出力できない

### 事象
「Archive→レポート出力」をしようとすると、
以下のエラーが出て出力できない。

```
The archive does not contain any `PrivacyInfo.xcprivacy` files.
```

![スクリーンショット 2024-04-01 13.17.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/e7175c7d-e909-70da-f63d-922505f2f3eb.png)

### 原因

`PrivacyInfo.xcprivacy`がプロジェクトのターゲットファイルから外れていました。
ファイル詳細から、`Target Membership`で設定しましょう。
以下の赤枠部分です。

![スクリーンショット 2024-04-01 10.49.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/cc9ffaca-3960-2999-cc86-49e2a32e3de2.png)

（補足）
実は`PrivacyInfo.xcprivacy`を作成する際にもできます。
はい、僕が悪かったです。

![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/b4f782b2-3b7c-9135-f7d3-0b96db3e1606.png)

<a id="#Chapter2"></a>
# （躓き２）SDKのマニフェストがレポートに反映されない
### 事象

うちのアプリはSDK（xcframwrork）を組み込んでいました。

![スクリーンショット 2024-04-01 13.28.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/502af750-6f39-2fc3-1d74-89851598b4bf.png)

 SDKにも`PrivacyInfo.xcprivacy`に設定があるのですが、
 アプリのレポートに反映されない。。

![スクリーンショット 2024-04-01 13.32.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/7b068d94-1910-6cbb-7d17-9d162530e827.png)

### 原因

アプリへのSDKの組み込み方が問題でした。
`Do Not Embed`から、`Embed Without Sign`または`Embed & Sign`に変更することで
レポートへ反映されるようになりました。

![スクリーンショット 2024-04-01 13.40.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/6ead2cc4-032c-bd14-0bc7-43d6277bbed9.png)

レポート出力結果

![スクリーンショット 2024-04-01 13.40.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3758686/0bc78174-bf5c-24e5-9ab8-705e10f1b14c.png)


<a id="#Finally"></a>
# 最後に

あくまで、僕が開発に関わっているアプリで躓いた箇所を取り上げました。
他にも様々な躓きポイントがあると思いますが、
みんなで共有して少しでも楽していきましょう〜
AWSのゲートウェイ、どこに接続して、どんな目的で使用するのかの備忘録

### インターネットゲートウェイ
どこに接続：パブリックサブネット
どんな目的：双方向にインターネット接続したい時
設定方法：VPCにアタッチ

### NATゲートウェイ
どこに接続：パブリックサブネット
どんな目的：プライベートサブネットがセキュアにインターネット接続したい時(一方通行）
設定方法：一般的にパブリックサブネットに配置、プレイベートサブネット内に配置

### 仮想プライベートゲートウェイ
どこに接続：VPC
どんな目的：オンプレミス環境とVPCを繋げたい時
設定方法：オンプレミス側にカスタマーゲートウェイを設定し、VPC側に仮装プライベ０とゲートウェイを設定することで、オンプレミスとVPC　の通信を行う、通信はVPN経由で行う。

### トランジットゲートウェイ
どこに接続：複数のVPC(とオンプレミス)
どんな目的：VPCが複数ある、プラスオンプレミスとも接続させたい時
設定方法：トランジットゲートウェイにVPCをアタッチし、アタッチしたVPCにルートを追加し、他のVPCと通信する

### カスタマーゲートウェイ
どこに接続：オンプレミス
どんな目的：オンプレミスとVPCを繋げたい時
設定方法：カスタマーゲートウェイの名前を入力し、オンプレミス側のVPNデバイスの外部IPアドレスを入力、VPN接続のタイプを選択する。オンプレミスとVPCとの通信は基本VPN接続またはDirect Connect。


以上となります。ここまでお読みいただきありがとうございました。
ここは違う、ここはこの方が？等々ございましたらご指摘いただけますと幸いです。
npmでECONNREFUSEDと言われたときの対策

今日はちょっとnpmでPlaywrightを違う環境にインストールしようとしたときに起きたことを
まとめておく。
症状としては下記と同じだ。

https://qiita.com/masakinihirota/items/0b2a4b34738f4d246780

https://qiita.com/raiga0310/items/ba198156cfb5a5f8462b

私の環境で起きている状況としては、
pingは返ってこないのに、ブラウザでは見れている状態。
原因としてはプロキシの設定だったのだが、困ったことにプロキシはOFFだったため
使っていないのだ。

しかし、実はプロキシ設定の不備が原因だった。
どういうことか。

まず、以前はプロキシはONだった時代があり、その時に設定はもともとあった。
しかし、現在プロキシはOFFにして使わないままだったが、設定は削除はしておらずそのままだった。

そして、npmをインストールしたときに、npmはWindowsのプロキシ設定がOFFになっているにも関わらず、設定があったためそのままプロキシを通して実行するようになってしまったらしい。

そのため、npmからプロキシ設定を全部削除することで解決した。

```
npm -g config delete proxy
npm -g config delete https-proxy
npm -g config delete registry
```

取り急ぎメモ。

＊＊＊

環境変数をたくさん使っていると、
ときどき、古いものを削除して新しいものをダウンロードするときとかに
古いところのパスが環境変数に残って
新しいものを起動させるときに邪魔になったりします。
なので古いものはアンインストールしたら消しておきたいですね。

＊＊＊

ちなみにplaywrightをインストールしてからも
いろいろあって

pip install playwrightしたり、
もともとあるpythonコードを動かそうとすると
retryとかpython-dateutilとかもpip installしないと
全く動かなかったりと、あります。
今全部pipでインストールしてやっと前の環境と同じ実行環境になりました。

このプログラムを動かすのに必要なライブラリってのを
依存関係、というらしいですね。
実際にエラーにあってはじめてこういうことかと実感しました。

依存関係をすべてインストールできればいいんですが
たしかパッケージ化すればいいという感じでPython試験を受けるときに学んだ気がします。

今はそこまでやってませんが、今後の時のために調べておかないと。。。
とりあえずメモです。
CSSで使用する 大きさ・長さ の単位まとめ

CSSを始めてみると，サイズ指定などの際，以下のように多くの候補が出てきて何を使用するのが良いか？分からなくなることがあると思います．

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3759397/be5c0043-78a1-cd16-9435-a9373d6c5521.png)

そこで，私なりにCSSでの単位についてまとめました．


## CSSで多く使用する単位一覧


### 物理的な長さ
| 単位 | 説明 | 使用例 |
|------|------|---------|
| px   | ピクセル単位。画面上のドット数を表す。 | width: 200px; |
| cm   | センチメートル。実際の長さを表す。 | height: 10cm; |
| mm   | ミリメートル。センチメートルの千分の一。 | margin: 5mm; |
| in   | インチ。1インチは2.54センチメートル。 | font-size: 0.5in; |
| pt   | ポイント。印刷業界で使用される単位。1ポイントは1/72インチ。 | font-size: 12pt; |
| pc   | パイカ。ポイントの12分の1。 | margin: 1pc; |


### 相対的な長さ
| 単位 | 説明 | 使用例 |
|------|------|---------|
| %    | 親要素に対する割合を表す。 | width: 50%; |
| em   | フォントサイズに対する相対的な長さ。 | margin: 1em; |
| rem  | ルート要素のフォントサイズに対する相対的な長さ。 | font-size: 1.2rem; |
| vw   | ビューポートの幅に対する割合。 | width: 50vw; |
| vh   | ビューポートの高さに対する割合。 | height: 80vh; |
| ex   | x-height (小文字文字の高さ) を基準とする相対的な長さ。 | font-size: 2ex; |
拡張子を変更しファイルを移動させる

---
#### PowerShell ISEを開き記述し、実行したいフォルダに保存する
---
```
# Excel アプリケーションオブジェクトを作成
$excel = New-Object -ComObject Excel.Application
$excel.Visible = $false

# カレントディレクトリ内のすべての .xls ファイルを取得
$xlsFiles = Get-ChildItem -Path .\*.xls

# 各 .xls ファイルに対して処理を実行
foreach ($file in $xlsFiles) {
    $filePath = $file.FullName
    $newFilePath = $filePath -replace "\.xls$", ".xlsx"

    # ワークブックを開く
    $workbook = $excel.Workbooks.Open($filePath)

    # .xlsx 形式で保存
    $workbook.SaveAs($newFilePath, 51) # 51 は .xlsx 形式を意味する
    $workbook.Close()
}

# Excel アプリケーションを閉じる
$excel.Quit()

# COM オブジェクトのリリース
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
Remove-Variable excel
```
---
#### メモ帳を開き.batで保存する
---
```
# Excelファイルの移動
@echo off

REM File move

REM xlsフォルダが存在しない場合にのみ作成
if not exist "xlsx\" mkdir xlsx

REM .xlsファイルをxlsフォルダに移動
move /-Y *.xlsx .\xlsx\

exit
```

---
### 作業手順
---
#### 1.フォルダに.xlsファイルを格納する
#### 2.PowerShellを開きPS1を実行する
#### 3.batchファイルを実行する
---
LINEに送信通知を送信できるGoogle Forms

LINE Botを開発している過程で、Google Formsからの送信があった際にLINEに通知が送信される機能が必要になり、GASでコードを作成しました。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/5cbc64dd-140c-e27b-f062-2cea62f2d711.png)


Google Formsを作成したらスクリプトを開き、下のコードを貼りつけてください。
```main.gs
function notifyLineBot(event) {
  var itemResponse = event.response.getItemResponses();
  var name = itemResponse[0].getResponse();
  var roomNumber = itemResponse[1].getResponse();
  var position = itemResponse[2].getResponse();

  // LINE BotのアクセストークンとユーザーIDを設定
  var accessToken = 'ここに入力'; // アクセストークン
  var userId = 'ここに入力'; // ユーザーID

  // LINEに送信するメッセージを作成
  var message = `${name}様からフォームの提出がありました。`;

  // LINEに通知を送信
  var url = 'https://api.line.me/v2/bot/message/push';
  var headers = {
    'Content-Type': 'application/json; charset=UTF-8',
    'Authorization': 'Bearer ' + accessToken
  };
  var pushData = {
    'to': userId,
    'messages': [
      {
        'type': 'text',
        'text': message
      }
    ]
  };
  var options = {
    'method': 'post',
    'headers': headers,
    'payload': JSON.stringify(pushData)
  };
  UrlFetchApp.fetch(url, options);

}
```

LINEのアクセストークンとユーザーIDの入力が必要になります。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/b48d4ea2-0d42-511e-1173-c26280afbd91.png)


Google Formsの形式は自由ですが、このコードはフォームの冒頭に氏名を入力する形が前提になっています。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/aac4fa96-b15c-6577-8050-069e595c516c.png)

トリガーを下図のように設定します。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/80454826-e2bf-f1c0-1c0e-38103fc5d073.png)

初回起動前に、下図のようにデプロイを行い、アカウントの認証を行ってください。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/c306f8e7-dc52-23c6-89d3-1f39cdfa75d9.png)

ただし、デプロイはしてもLINE DevelopersのWebhookにリンクさせる必要はありません。

関数はトリガーで実行される為、LINE Developersへの連携は不要です。

LINEとの連携例としては、下図のようにまずGoogle Formsへのリンクに誘導し、フォームの送信が行われると、LINE側に通知が来るようになります。
![タイトルなし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661150/0cb12957-c576-db94-4f3d-8ad9f0dc82d6.png)
静的サイトを作りたい

# 静的サイトを作りたい

静的なサイトを作って生活費のために小銭を稼ぎたいと思っている今日この頃
セイ的と言ってもstaticの方ね、という鉄板ギャグが大ウケしていた現場が懐かしく思う今日この頃

手前、駆け出し者でありますが、興味があるのはWEBアプリの技術
でも現実の社会で、多く求められているのは静的なサイトだったりします。

一時期、WordPressでチャチャット作ったサイトを納品する手法が流行っていましたが、どうもうまくデザインが出来ない。ブロックエディタという代物、本当にイライラする。
解説ページなど見ても、デザインにこだわる場合はCSSの勉強が必要です！とだけ書いてあり、ナンジャコリャー！な状況であったりします。まあ、お手軽CMSですから仕方ない。

試しに作って放置してたWordPress製のマイブログ、頻繁に攻撃にあってメールで知らせてくれる。誰かがadminでアクセスしようとしたよって。
けしからんと思いつつ、私もこのサイトWordPress制だろって思ったら、ログインページにアクセスしたりしてる、、、

ということで、静的サイトを作りたいと題名を書きましたが、目的としては中小企業や個人事業主向けにちょっと凝った名刺目的のHPやLPを作ってあげたいというのが意図するところ。

### 選択肢
1. WordPress
1. Dreamweaver
1. HTML, CSS, JavaScript直打ち & PHP
1. HTML + Bootstrap & PHP
1. Nuxt.js
1. Hugo

格安運用をするために、XAMPP環境のレンタルサーバーでの運用を想定しています。

## 1 WordPress
一時期、ホームページ作ります業者でよく使われたCMS

WordPress界隈に足を運ぶとアフィリエイト界隈の人たちがしきりに勧めている印象
SEO対策で色々と手法が確立していたりするからなのかな。

ほとんどのレンタルサーバーは簡単インストール機能がついていて、MySQLとの接続設定もしなくても一瞬で構築できてしまうので簡単お手軽
構築さえできてしまえば、あとはGUI操作でぽちぽち

私も一時期使ったことがありますが、デザインがとてつもなくやりづらい印象
エディタでこだわり出すと融通の効かなさに発狂しそう。
こだわりたければCSSを別で適用する必要あり。
名刺HPやLPなんだからある程度自由にデザインできなくちゃ

気に入ったテンプレートデザインがあって、そのデザインでブログを書くならありですが、名刺HPやLPには不向き

納品後にある程度放置したいので、WordPressだとセキュリティ面もちょっと怖い

## 2 Dreamweaver
今はAdobeの製品
更新されてないし、高いし、使いこなせなさそうなので除外

## 3 HTML, CSS, JavaScript直打ち & PHP
フレームワークを使わずに、全部一から静的サイトを作る方法
どういうことをやればいいかの流れはわかるのだが、綺麗なデザインを作り切る自信がない。
無理

一時期、駆け出しの人たちがHTMLを勉強してたら、それはプログラミング言語じゃない！マークアップ言語だ！みたいな論争が起きてましたね。
HTMLとCSSを駆使して、綺麗なサイトを作るWEBデザイン界隈の人たちはすごいと思います。
私にはできない。

## 4 HTML + Bootstrap & PHP
これも少し前に流行りましたね。
知り合いが業者から納品されたサイトを見てみたら、BootstrapのCDNが利用されていました。

グリッド使えば、お手軽で、レスポンシブルで、誰でも簡単に綺麗なデザインができてしまいます。みんな同じデザインですが、、、
今は、Tailwind CSSでしっかりとオリジナルのデザインを作ろうという流れが強いみたいですね。
なので、これも無し

## 5 Nuxt.js
VueベースのJavaScriptフレームワーク
静的サイトを簡単にgenerateできる。ちょっと感動しました。
JavaScriptフレームワークは食わず嫌いしていたので、全然知識がなく、静的サイトの作成前に勉強の時間を要してしまう。
使ってみたいな、と思いつつも泣く泣く除外

## 6 Hugo
最近、見つけてこれだ！と思った技術
静的サイトジェネレーターとも呼ばれるもの。

[Hugo公式サイト](https://gohugo.io/ "Hugo Home")

当面、駆け出し者の私の相棒は静的サイトジェネレーターになりそうです。
Hugoの公式で用意されているテーマを使って静的サイトを作ることにします。

Hugoの使い方はまだ別の記事で書きます。


### 終わりに
グーグルも最近はサイトの表示速度の速さなどを重視しているようです。
環境に配慮してクローラーが来る回数も減るやらなんやら。
だから、WordPress全盛期のように数多のプラグインを駆使して、クローラーにサイトの更新情報を教えたりするのがそこまで効果的でなくなるのかな？
anyConnectのログインを自動化させる

# はじめに
在宅勤務をしている人の多くはVPN接続が必要だと思います。私にとって、毎回パソコンを起動するたびにログインしてVPNに接続するのは本当に面倒です。今日はCiscoのAnyConnectを例に、バッチを使用して自動化を実現する方法を見てみましょう。
# 今日の主役：vpncli.exe
vpncli.exeは、コマンドラインインターフェースを通じてVPN接続を管理するための実行可能ファイルです。特にCiscoのAnyConnect VPNクライアントにおいて、この実行ファイルを使用して接続、切断、ステータス確認などの操作をコマンドラインから実行できます。これにより、GUIを使用せずにVPN接続の自動化やスクリプト化が可能になります。

今日はvpncli.exeを使ってVPN接続を自動化したいと思います。
# バッチを作る
下記のようにバッチを作成します。

```batch:autoAnyConnect.bat
@echo off
taskkill -im csc_ui.exe -f
cd "C:\Program Files (x86)\Cisco\Cisco Secure Client\"
echo Connecting to VPN...
vpncli.exe -s < script.txt
```

:::note warn
vpncli.exeの実際の保存場所は異なる場合がありますので、実際の状況に応じて調整してください。
:::
下記のようにscript.txtを作成し、「C:\Program Files (x86)\Cisco\Cisco Secure Client\」の下に張り付けます。

:::note warn
貼り付け先はvpncli.exeの保存場所に合わせてください。
:::
```text:script.txt
connect <接続先のドメイン名またはIPアドレス>
<AnyConnectのユーザ名>
<AnyConnectのパスワード>
```
これでautoAnyConnect.batをクリックするだけでVPN接続を実施してくれます！
# 起動時実施するためには
Windowsキー）と「R」キーを同時に押すと、「ファイル名を指定して実行」ウィンドウが開きます。「shell:startup」を入力しOKボタンを押すとStartupフォルダが開けます。
![startup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3760374/0a0d0753-517a-cd5e-37b5-02408ccae08a.png)
StartupフォルダにautoAnyConnect.batを貼り付けると毎回起動時実行してくれます。
# 終わりに
この記事では、在宅勤務でVPN接続が必要な方々向けに、CiscoのAnyConnect VPNクライアントを使用した接続プロセスの自動化方法を紹介しました。コマンドラインツールvpncli.exeを用いたバッチファイルの作成から、スタートアップに追加することでPC起動時に自動接続する設定まで、手順を詳しく解説しています。この自動化により、VPN接続の手間を省き、よりスムーズで効率的な在宅勤務環境を実現できます。
jestで要素が存在しないことをテストしたい

jestである条件下で表示されない要素があり、その場合に該当の要素が存在しないことをテストしたい。

## 初期のコード
```.jsx
it ('テスト', () => {
  const sampleComponent = ~~;
  const sampleComponent.getByText('非表示アイテム');

  expect(sampleComponent).not.toBeInTheDocument();
});
```

これだと、getByTextでその要素は取得できないよって怒られてしまう。

## 変更したコード
```.jsx
it ('テスト', () => {
  const sampleComponent = ~~;
  const sampleComponent.queryByText('非表示アイテム');

  expect(sampleComponent).not.toBeInTheDocument();
});
```

queryByTextを使った。
こうすればテストができる。
MobaxtermでSSHリモートサーバーログインできるのにVSCodeではログインできない


# 問題

2,024年２月くらいからMobaxtermではSSHでリモートサーバーに接続できるのに、なぜかVSコードでは同じSSH接続先に接続できない
・Configファイルは正しいはず（Mobaxtermでは接続できているので）
・最新版のVSコードではバージョン的に問題があったとおもいすでに前のバージョンに戻している
・VSコードでは以前は接続できた


# 原因

MobaxtermとVSCode上での基本的な設定は同じでConfig

唯一異なったのは、Passphrase（パスフレーズ）がMobaxtermではしっかり求められていたのに対してMobaxxtermは求められていない。鍵設定関連で問題があるorＶＳコード上の何かが問題があるはず。
（今回は鍵でした）



# 解決方法

せつぞくできたときとできなくなったあとでなにがそのサーバー上で変わったかを理解してそのあとに必要なアクションを起こす

私の場合鍵がMobaxterm上Puttyフォーマットで作られたKeyだったというのが原因でした！Mobaxtermでキー作るとそうなってしまうようで。新しい鍵をしっかりMobaxtermから入って.サーバー内のsshにファイルおいたらうまくVSコードでもログインできました（鍵は二つ以上おいても問題ないのですでに置いてあった鍵の上に書いた形。同じドキュメントで）

https://stackoverflow.com/questions/66160457/vscode-remote-ssh-cannot-identify-private-key-file

PuTTY形式の鍵を使用すると、OpenSSH(Windows)で問題が発生することがわかりました。
MobaXtermやPuTTYの代わりにコマンドプロンプトでssh-keygenコマンドを使用したら直りました。





# メモ・備考

上記が原因だったけど、確認した準は

・VSコードのDegrade（昨年のバージョンを使用中）
・Remote-SSHのDegrade
・Configファイルの体裁整え
・公開鍵と秘密鍵の設定見直し
・RemoteSSHのアンインストール→再インストール
・シンプルにPC再起動
【AWS-IAM】アカウント棚卸時に、離任者のアカウントを削除したい

![【AWS-IAM】アカウント棚卸時に、新規参画者のアカウントを作成したい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/ef445259-f739-4aeb-9395-8ac70da97eca.png)



## 本記事で実現できること
アカウント棚卸時に、離任者のアカウントを削除する

## 前提
- AWSマネコンはログイン済み
- 2024.1.17 時点でのコンソールのUIになります

## 簡単な解説
全部で5フェーズ

①ホーム画面で、画面上部検索欄に[**IAM**]と入力。
　出てくるサービスの中から[**IAM**]をクリック

![AmazonSQS 障害時DLQに転送されたキューをSQSに再送したい(DLQ再処理)のコピー (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/080b3166-ce95-28ce-0536-cf33663e8816.png)


②左画面で[**ユーザー**] を選択後、右画面から削除対象のIAMユーザーのユーザー名にチェックを入れる。

![【AWS-IAM】担当者の役割変更、及び、リリース時に アカウントの権限を変更したい.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/123bbc75-b861-655f-e572-1dbc73b21c3a.png)


③[**削除**]をクリックする
![【AWS-IAM】担当者の役割変更、及び、リリース時に アカウントの権限を変更したい (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/ae2bfc04-f193-b7da-9c7f-65e91c5c106e.png)



④テキスト入力フィールド(赤枠部分)にユーザー名を入力し、
　[**ユーザーを削除**]をクリックする。

![【AWS-IAM】担当者の役割変更、及び、リリース時に アカウントの権限を変更したい (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/9ebb3287-e0aa-5bfc-2888-e4e16d79e8bd.png)



⑤正常に削除された旨のメッセージが出力される。
　対象ユーザーが一覧から削除されていることを確認する。


![【AWS-IAM】担当者の役割変更、及び、リリース時に アカウントの権限を変更したい (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3754524/019c1daf-6edc-2ab8-d3e0-caedd00515f5.png)

## まとめ
本稿が、IAMで離任者のアカウントを削除したい方の参考になれば嬉しいです。

ITエンジニア向け、AWS資格取得を目指す方向けに個人ブログで記事も投稿していますので、
合わせて読んでもらえると嬉しいです。
[ことなの学校(個人ブログ)](https://kotona-school.com)

更によりレベル感の高そうなAWS関連の発信はZennの方で行います。
こちらももしよければフォロー、ご確認いただけると嬉しいです。
[Zenn個人アカウント](https://zenn.dev/tomo_itbizblog)

Twitterでも役立つ情報を発信しますのでフォローしてもらえると嬉しいです 
→ [@tomo_ITBizBlog](https://twitter.com/tomo_ITBizBlog)