OmniAICreator/Qiita-1.07M huggingface dataset:
Flutter 環境構築からサンプルコード実行までの手順

## Flutterの環境構築からサンプルコード実行までの手順

### 1. Flutter SDKのインストール

Flutter SDKをインストールします。以下の公式ドキュメントを参考に、OSに合わせてインストールしてください。

https://flutter.dev/docs/get-started/install

### 2. Flutterコマンドのパスを通す

Flutterコマンドを使えるようにするため、`flutter/bin`のパスを環境変数に追加します。

例えば、bashを使っている場合は、`~/.bash_profile`ファイルに以下の行を追加します。

```
$ export PATH="$PATH:[flutterのインストールパス]/bin"
```

### 3. Flutter doctorの実行

Flutter doctorコマンドを実行して、Flutter SDKが正しくインストールされているか確認します。

```
$ flutter doctor
```

もし、必要なライブラリやツールが足りない場合は、Flutter doctorがそれらを自動でインストールするように促します。インストールされるまで、待ちます。

### 4. Flutterアプリの作成

以下のコマンドを実行して、新しいFlutterアプリを作成します。
```
$ flutter create my_app
```

ここで、`my_app`は任意のアプリ名です。

### 5. アプリを実行する

作成したアプリを実行するために、`gallery/`ディレクトリに移動して、ターミナルで以下のコマンドを実行します。
```
$ flutter run
```

このコマンドを実行すると、Android エミュレータまたは接続された Android デバイス上でアプリが起動します。

ここで、iOS アプリを起動する場合は、以下のコマンドを実行します。
```
$ flutter run -d <iOS device id>
```

iOS デバイスの ID は、`flutter devices`コマンドで確認できます。

以上で、Flutterの環境構築からサンプルコード実行までの手順が完了しました。
お疲れ様でした！
Rubyで条件式を省略するためのテクニック

### 自己紹介
はじめまして、junpei314です。よろしくお願いします。
普段は、アルバイトでScratchというヴィジュアルプログラミング言語を小学生を相手に教えています。
生徒のために教材として自作ゲームを制作する機会が多く、そこからプラグラムの面白さにハマりました。
今はより本格的なWebサービスの開発をしてみたいと考え2023年4月頭から本格的にRubyを学習し始めています。

### これから投稿する記事の方針
アウトプットの一環として、私と同じ様なプログラミング初心者の助けになるようなTipsや自分の勉強したことのアウトプット、エラーの原因や解決方法などなど備忘録的なものを投稿していきます。また、オリジナルのWebアプリも制作していく予定なのでその様子も投稿できればと思います。

## はじめに
さて、記念すべき初投稿はどんな面白いことを書いてやろうか。
PCの前で張り切ってみたはいいものの、そもそもQiitaは技術ブログ。
当然ですが何の変哲もない初心者向けTips的な内容にしようと思います。

## 条件式を省略するためのいくつかのテクニック
プログラミングを始めてすぐに出てくる条件式。いろんなところで使いますよね。
便利すぎてついつい何回も使ってしまい、気づいたらネストがめちゃくちゃ深くなってしまった、なんてことありませんか？
自分で書いておいてなんですが、私自身気づいたら条件分岐だらけで複雑なコードになってしまったなんてことがよくあります。そこで今回は復習がてら条件式を省略する方法をいくつか紹介していきたいと思います。


#### 例題1
早速ですが、例題を作成してみました。
下記のコードを省略するには三項演算子という構文が使えます。
```ruby:before
x = 5
if x > 0 
  'positive'
else
  'negative'
end
```
##### 条件演算子（三項演算子）
`条件式?真の場合の値:偽の場合の値`という形で使用します。処理を行うわけではなく値を返すだけであることに注意が必要です。
```ruby:after
x = 5
y = x > 0 ? 'positive' : 'negative'
```
#### 例題2 
２つ目の例題は下記の通り。このコードを省略するにはいくつかの方法があります。
```ruby:before
x = 5
if x > 0
  puts 'x is positive'
end
``` 
##### 論理演算子
`条件式 && 真の場合の処理`または`条件式 || 偽の場合の処理`という使い方をします。
```ruby:after
x = 5
x > 0 && puts("x is positive")
```
偽の場合の処理では``条件式 || 偽の場合の処理``を使います。
```ruby:after
x = -5
x > 0 || puts("x is positive")
```
##### インライン`if`（修飾`if`）
`処理 if 条件式`という使い方をします。     
```ruby:after
x = 5
puts "x is positive" if x > 0
```
偽の場合の処理では`処理 unless 条件式`という使い方をします。
```ruby:after
x = 5
puts "x is positive" unless x <= 0
```

# まとめ
今回は**if条件式**の省略方法として**条件演算子**や**論理演算子**、**インラインif**を紹介しました。
単純なif条件式であればこれらの構文を使うことでコードのまとまりが良くなります。
ただ、**条件演算子**に関しては使い方によっては**逆にコードの可読性が低下する場合がある**ため、注意しながら使用しましょう。


#参考URL
[Ruby 3.2 リファレンスマニュアル  演算子式](https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html)
【ITパスポート】水産系の大学生が受けてみた！

# はじめに
2023年の3月末にITパスポートを受けた。
ITパスポートとはなんなのか、私がどのような勉強をしたのかなどを書き残しておく。
これから受験する人の参考になれば良いな。

# ITパスポートについて
ITパスポートとは、**ITに関する基礎的な知識が証明できる国家試験**だ。
* 試験方式：**CBT方式**（パソコンで受け、試験終了後その場で点数が分かる）
* 受験料：**7,500円**（2023年4月現在）
* 試験時間：**120分**
* 問題数：**100問**（ストラテジ系：約35問、マネジメント系：約20問、テクノロジ系：約45問）　
* 合格点：**全体で600/1000点以上**かつ**各分野別評価点が300/1000点以上**

ここで注意なのが、**1問10点の単純な配点ではない**ということ！問題数は100問だが、採点されるのはそのうちの92問！どの問題が採点されないかは分からなくなってるよ。だから、何問正解とかではなく、全体を1000点満点として換算されてるんだね。最初、この配点の意味が理解できずに戸惑っちゃった。笑

# なぜ受けたのか
水産系の大学なので授業では全くITの勉強をしていないけど、独学でPython触ってみたりWebサイトのコーディングをしたり。
せっかく学んでるし、なにか資格がほしいと思ったから知識をつけるために受験することに決めた。
色彩検定とかも迷ったけど、ITパスポートの方が幅広く使えそうだと思って最初に受けた。合格率も高かったしね。

# 勉強方法や期間
勉強に使ったのは
* [2022年度版 ニュースペックテキスト ITパスポート](https://tacpub.jp/list/detail.php?bc=110439)（参考書）
* [ITパスポート試験ドットコム](https://www.itpassportsiken.com/ipkakomon.php)（ウェブサイト）
の2つ！
参考書は2ヶ月前くらいから読んでたけど、だらだらしてて結局読み終わらず。テクノロジ系の後半とマネジメント系が読めなかった。
試験2日前になって、これじゃやばいと思い、ウェブサイトの過去問道場で解きながら覚えることに。本番形式で練習してみようとやってみたら全体で605／1000点。ギリギリすぎる。
マネジメント系が4～5割だったので、とりあえずその分野だけ過去問ぶん回した。参考書読んでないからそりゃ知識ないよね。試験前日の夜はこれで終わり。
試験当日は電車の中で全分野の過去問をやった。電車で20分くらいだったからほとんど出来てないけど。

# 結果

結果は**合格**！やったー！ギリギリ受かった！試験を受けているときは手応えがなかったので、結果を見るときすごいドキドキした。まだ合格証明書は届いていないけど、ホームページの合格者一覧に番号があった。点数はこんな感じだった。

| 分野 | 点数 | 
|:-----------:|:------------:|
|ストラテジ系|605/1000点|
|マネジメント系|765/1000点|
|テクノロジ系|535/1000点|
|総合|640/1000点|

前日に過去問ぶん回したおかげでマネジメント系が一番高かった！笑
テクノロジ系はかなり低い･･･

# おわりに
もともと知識をつけるために受験したのに、結局合格ギリギリ程度になってしまった。
合格はしたけど不完全燃焼感がすごい。笑
それでも資格を取ったのは初めてなので嬉しい！！！
知識が残っているうちに、「復習＋少し詳しい内容」を勉強して基本情報技術者の資格も取っちゃいたいな～～
**基本情報技術者試験もCBT方式になったので、ITパスポート合格の流れで取っちゃうのが一番コスパ良さそう！オススメ！まだ取ってないけど！**

以上、水産系の大学生によるITパスポート合格体験記でした～
VSCodeの文字列検索で改行コードを確かめるな高校

VSCode派の皆さんこんにちは！
Sakura Editer派、Vim派、その他いろいろ派の皆さんもこんにちは。
テキストエディタはみんなちがって、みんないい。

本稿では世にも奇妙な改行コードにまつわる怪談について語らせていただく。
これは実際に起きた本当の話である。

# 改行コードについて
まずは簡単に改行コードについておさらい。
改行コードには３種類あります。簡単に表にするとこんな感じ。
|種類|正規表現|使用OS|
|:-:|:-:|:-:|
| CR   |`\r`|昔のMac |
| LF   |`\n`|最近のMac、Linux|
| CRLF |`\r\n`|Windows|

# VSCodeでグレップしてみる
試しにあるドキュメントファイルを`\n`でグレップしてみます。
ちゃんと正規表現の検索をOnにしてくださいね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303978/128d0a64-b4c0-5888-853a-becd9c5d318d.png)
各行末に`\n`があるのがわかりますね。

続いて`\r`でグレップしてみましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303978/55a09889-8cd2-9bfe-0f7d-a8d4801e7b32.png)
行末に`\n`があって`\r`がないのでLFにな・・・っていません。実は。

せっかくなのでダメもとで`\r\n`もグレップしてみましょうよ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303978/88df60e9-61e3-88de-8a69-885265858780.png)
まぁなんもかからないですよね。

よく見るとVSCodeの改行コードはCRLFになってましたね！
![vscode-crlf.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/303978/17294517-e32b-2c7d-5e4b-29ff514e1c33.png)
ちなみにここをクリックするとLFなどに切り替えることができます。
VSCodeの力ってスゲー！

？「あれ、でもCRLFなら`\r`とか`\r\n`が引っかかるはずでは？」

# VSCodeの改行検索の仕様
こちらを参考にしてください。

https://github.com/microsoft/vscode/issues/31449#issuecomment-339599065

翻訳するとこんな感じ。
>検索ウィジェットで、正規表現モードでファイル内のEOL列（`\n`または`\r\n`）をターゲットにすることができます。`\r\n`のEOLシーケンスの`\r`のみをターゲットにすることはできません。これは、誤って混在した行末が作成されるのを防ぐために実施しています。

つまり`\r`でグレップできないのは意図的な仕様ということでした。
改行コードに寄らず改行は`\n`のみでグレップできます。

これで改行コードを変換したいとき、グレップによる置換はできないことがわかりましたね。
したがって、１ファイルずつWindow右下のボタンをポチポチして変換することになりそうですね

:::note info
VSCodeで改行コードを変更するときは右下のCRLF（またはLF）ボタンをクリックして変更しましょう！
:::

# まとめ
筆者はグレップでまとめて置換！みたいなのを別のエディタでやってたので、無意識にグレップによる置換を試みて爆散しました。
意外と落とし穴なので、皆様も気を付けてください。
NetlifyにReact+TypeScriptをデプロイする

## 概要

手短に伝えると以下の流れ。
（React, TypeScript, Vite, yarnで開発。npmへの置き換えも多分可能）

1. Netlifyに登録
2. yarnコマンドなどでbuild
3. buildして出てきたフォルダ (dist) をそのまま手動で上げる
4. 環境変数を設定
5. 完成
6. (オプション) ドメイン名を `{被らない任意の文字}.netlify.app` という制約で無料で好きに変えられる

(備考) Netlifyはデフォルトでhttpsになっていて優秀です

## 背景
フロントエンドもそろそろ勉強しておこうということで、React + TypeScript + Vite + yarnで簡単なSPA (シングルページアプリケーション) に挑戦しました。
開発が終わっていざデプロイしようと思ったら、意外と手間取ってしまったので記録しておこうと思います。

ここでは、いろいろ試して、最終的に手動デプロイで上手くいった方法を紹介します。

デプロイ初心者の僕が、色々試行錯誤して1時間ほど右往左往しているうちに、やっとNetlifyにデプロイできた、最初の方法です。



## Netlifyに登録

僕はGitHubで連携させて登録しました。他にもGitLabとか色々あるみたいです。

## yarnコマンドなどでデプロイ

一旦Netlifyから離れて、自分の開発した環境でbuildします。(`yarn build`)

buildして出てきたフォルダ (yarnだとdistが自動で出てくる) を使います。

このbuild段階でできているか確認したかったら、そのままでは見られないので以下の記事を参考に `serve -s build` で確かめます。
(生成したフォルダ名がdistなら、`serve -s dist`)

もしserveがインストールされていなければ、`npm install -g serve`をしてから実行します。
[Production BuildしたReactアプリをローカル環境で実行する](https://dev.classmethod.jp/articles/run-a-production-built-react-app-in-a-local-environment/)

## buildして出てきたフォルダをそのまま手動で上げる

このフォルダで何をあげたらいいのか悩みました。（ここで時間を溶かしました、、）

結論から言うと、手動で上げるなら先ほど生成したフォルダ (`dist`フォルダ) をアップロードします。


![CleanShot 2025-02-18 at 18.10.26@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/899381/619d5316-d291-4ad3-bd5d-55a14f6bd691.png)


アップロードできたら、プレビューで確認します。

![CleanShot 2025-02-18 at 18.10.48@2x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/899381/6f1b74d5-a6f1-495d-864b-f92749675d71.png)



## 環境変数を設定

例えば、viteを使っているなら先頭にVITE_をつけるなどがありますが、少なくともNetlifyへの手動デプロイでは開発環境で動く変数名のままで大丈夫です。（のはずです）

## 完成

数十秒待つとURLが表示されます。

## (オプション) 無料でドメイン名を変更する

`{被らない任意の文字}.netlify.app` の制約の中で好きに変えられます。制約なく、自分の独自ドメインを確保して設定する方法もあるみたいですが、僕は面倒だったのでこのくらいが妥協点かなと思いました。

制約はあるにしても、ドメイン名を選べるのいいですよね

以上です。何かあれば更新します。

## 参考

[Production BuildしたReactアプリをローカル環境で実行する](https://dev.classmethod.jp/articles/run-a-production-built-react-app-in-a-local-environment/)

[HOW TO DEPLOY REACT VITE APPS TO NETLIFY](https://eternaldev.com/blog/how-to-deploy-react-vite-apps-to-netlify/)
GWの休みに勉強しよう！！！有名IT企業の研修資料まとめ

## 勉強について
エンジニアの皆さん。エンジニア以外の皆さん。
・勉強しようと思っているけど、何を勉強したらいいかわからない
・ネットを漁っても良質な教材が出てこない
・他人がどんなことをしているか気になる
こんなお悩みありませんか？
今回は、有名企業の研修資料をまとめましたので、勉強のネタにしてみてはいかがでしょうか？
新人、ベテラン関係ありません！
GWに暇を持て余したら、こちらをご覧くださいね

## サイボウズ
サイボウズです。
22年度の内容が公開されていました。

https://blog.cybozu.io/entry/2022/06/23/170000

■モバイルアプリ開発
■サイボウズのアジャイル・クオリティ
■MySQL - テストデータが偏るということ
■モブに早く慣れたい人のためのガイド
■テクニカルライティングの基本
■ソフトウェアテスト
■セキュリティ
■ソフトウェアライセンス
講義資料と講義動画まで公開されています。
資料が苦手な人でも学習が捗りますね。

## ラクス
こちらは、研修がかなり長く2ヶ月半もの研修期間をとっているようで
研修の集大成となる「技術研修発表会」の模様が記されています。

https://tech-blog.rakus.co.jp/entry/20220701/training

■サーバーサイド
- Java
- Spring boot
- Thymeleaf
■フロントエンド
- HTML
- CSS
- JavaScript
- jQuery
- Ajax
主に、web周りの技術に関して研修が行われたようです。
チームごとにアプリケーション作成し、それぞれのチームの意見が
あって面白いです。
## MIXI
あのスマホアプリで人気のあるmixiです。

https://mixi-developers.mixi.co.jp/21-technical-training-a0bcdbf9bca0

■git研修
■データベース研修
■設計・テスト研修
■iOSアプリ開発研修
■Androidアプリ開発研修
■フロントエンド研修
■ゲーム開発（Unity）研修
スライド資料と動画も付属していますし、
native appsにも対応した研修内容となっています。
## SEGA
SEGAはゲーム会社なので、数学についての資料を展開していますね。

https://techblog.sega.jp/entry/2021/06/15/100000

基礎線形代数講座について記述されています。

第１講　イントロダクション
第２講　初等関数
第３講　ベクトル
第４講　行列 I：連立一次方程式
第５講　行列 II：線形変換
第６講　行列 III：固有値・対角化
第７講　回転の表現 I
第８講　回転の表現 II

ゲーム会社なので、数学に重きを置いた内容になっています。
## AI Shift
SQL研修の内容は、基本的には大学のデータベース講義で取り上げられるような基礎的なものです。まずは「データベースとは」という問いから始まり、簡単なRDBMSの歴史を振り返りました。
とのこと。

https://www.ai-shift.co.jp/techblog/1980

SQL講習ですが、歴史まで遡って取り上げている研修資料は珍しいのではないでしょうか？
データベースの設計についても触れています。
## GMOペパボ
https://tech.pepabo.com/2022/12/02/newbie-training-2022/

幅広い開発研修を行なっていて、
セキュリティや機械学習に関しての資料もたっぷり。
いやはや、本当に質の高い資料になってます。
## Applibot
これはすごい！
全11回の講義が無料で見放題！
講義&ハンズオン形式で、現場社員からゲーム開発に必要な技術について学んでもらい
全11回の実施で、22年度の内容は以下のようになっております。

第1回 モバイルゲーム開発概観
第2回 ゲームエンジン
第3回 データ設計
第4回 システム設計
第5回 テスト
第6回 チームビルディング
第7回 アルゴリズム
第8回 データ構造
第9回 通信
第10回 パフォーマンスチューニング
第11回 UNIXコマンド講座

https://blog.applibot.co.jp/2023/03/29/training-2/

## その他
研修資料ではないですがAmazonが出している資料です。
サイバーセキュリティに関して学べるので、エンジニア以外の方もぜひ！
UIもサイバーぽくかっこいい！

https://learnsecurity.amazon.com/en/index.html

## 最後に
色々な企業が資料を公開してくれています。
初級者中級者問わず、GWやお休みの日に一度目を通してみてはいかがでしょうか？

https://twitter.com/obg_ocr
「弊社でも様々な研修をスキルに応じて行っております。
　是非TwitterのフォローやDM、マシュマロでの問い合わせもお待ちしております！」
[AWS Q&A 365][Redshift]AWSのよくある問題の毎日5選 #35

# 1. Amazon Redshiftで利用可能なスナップショットの2つのタイプは何ですか？
答え：Amazon Redshiftで利用可能なスナップショットの2つのタイプは、自動および手動です。

# 2. Amazon Redshiftはどのようにしてスナップショットを保存しますか？
答え：Amazon Redshiftは、暗号化されたSecure Sockets Layer（SSL）接続を使用して、Amazon S3内にスナップショットを保存します。

# 3. Amazon Redshiftで自動スナップショットが取得されるタイミングを制御できますか？
答え：はい、Amazon Redshiftで自動スナップショットが取得されるタイミングを制御するためのスナップショットスケジュールを作成できます。

# 4. Amazon Redshiftでスナップショットの進行状況をどのように監視できますか？
答え：AWSマネジメントコンソールでスナップショットの詳細を表示するか、CLIまたはDescribeClusterSnapshots APIアクションでdescribe-cluster-snapshotsを呼び出すことにより、スナップショットの進行状況を監視できます。

# 5. AWSバックアップとは何ですか？そして、Amazon Redshiftとどのように機能しますか？
答え：AWSバックアップは、クラウド内およびオンプレミスでのAWSサービス全体のデータ保護を一元化および自動化するのに役立つ完全に管理されたサービスです。 Amazon Redshift用のAWS Backupを使用すると、異なるAmazon Redshiftリソースのデータ保護ポリシーを設定し、1か所でアクティビティを監視し、手動プロセスなしでバックアップタスクを自動化および統合できます。 AWSバックアップは、Amazon Redshiftの手動スナップショットの作成を自動化し、バックアッププランで指定する暗号化されたバックアップボールトにこれらのスナップショットを安全に保存します。
[AWS Q&A 365][Redshift]Daily Five Common Questions #35

# 1. What are the two types of snapshots available in Amazon Redshift? 
Answer: The two types of snapshots available in Amazon Redshift are automated and manual. 

# 2. How does Amazon Redshift store snapshots? 
Answer: Amazon Redshift stores snapshots internally in Amazon S3 using an encrypted Secure Sockets Layer (SSL) connection. 

# 3. Can you control when automated snapshots are taken in Amazon Redshift? 
Answer: Yes, you can create a snapshot schedule to control when automated snapshots are taken in Amazon Redshift. 

# 4. How can you monitor the progress of snapshots in Amazon Redshift? 
Answer: You can monitor the progress of snapshots by viewing the snapshot details in the AWS Management Console, or by calling describe-cluster-snapshots in the CLI or the DescribeClusterSnapshots API action. 

# 5. What is AWS Backup and how does it work with Amazon Redshift? 
Answer: AWS Backup is a fully managed service that helps you centralize and automate data protection across AWS services, in the cloud, and on premises. With AWS Backup for Amazon Redshift, you can configure data protection policies and monitor activity for different Amazon Redshift resources in one place, and automate and consolidate backup tasks without any manual processes. AWS Backup automates the creation of Amazon Redshift manual snapshots and securely stores these snapshots in an encrypted backup vault that you designate in your backup plan.
特許情報取得APIの提供情報拡大対応 easy_patentsアップデートの内容について

# 概要
　特許取得情報APIの特許の一部情報の追加提供と、意匠・商標の提供開始に対応したeasy_patentsのアップデートの解説

# インストール/アップデート方法
```
pip install easy-patents==1.0.9
```
[インストール方法の詳細はこちら](https://qiita.com/easypatents39/items/d069d003b52e8c87873f)


# アップデート内容

## 1. 以下の関数を追加
```py
#J-PlatPatの固定アドレスの取得
jpp_fixed_address(case_number, law="patent", reget_date=1)

#国際出願番号に紐づくPCT出願の日本国内移行後の出願番号を取得
international_application(case_number, reget_date=1)

#国際公開番号に紐づくPCT出願の日本国内移行後の出願番号を取得
international_publication(case_number, reget_date=1)
```

## 2. 関数の引数を追加
app_progressなどに、lawパラメータを追加。
（※特許にしかないAPIについては、lawパラメータは追加していない)
lawには、"patent", "design", "trademark"のいずれかを指定する。lawパラメータを省略した時には、"patent"が指定される。

### 特許情報の取得の例
```py
app_progress("2020-8423", law="patent")
```

上記は以下のlawパラメータ省略時と同じ。

```py
app_progress("2020-8423")
```

### 意匠情報の取得の例
```py
app_progress("2022012584", law="design")
```

### 商標情報の取得の例
```py
app_progress("2018009480", law="trademark")
```

## 3. データの再取得のデフォルト値を変更
reget_dateのデフォルト値を30としていたのを、データの日次更新に鑑み、1に変更

## 4. 出願番号などの変換について
引数で指定された出願番号などは、半角に変換される。
また、lawがpatentの場合は、特願、特開、特表、特許の文字が無視される。
また、lawがdesignの場合は、意願、意匠登録の文字が無視される。
また、lawがtrademarkの場合は、商願、商標登録の文字が無視される。
区切り文字/と-がある場合、その右側が6桁になるように0埋めされる。

# 関数名と引数の一覧
```py
# 指定された特許出願番号に紐づく経過情報の一覧の取得
app_progress(case_number, law="patent", reget_date=1)

# 指定された特許出願番号に紐づく経過情報（優先権基礎情報、原出願情報、分割出願群情報を含まない）の取得
app_progress_simple(case_number, law="patent", reget_date=1)

# (特許のみ) 指定された特許出願番号に紐づく分割出願情報の取得
divisional_app_info(case_number, reget_date=1)

# 指定された特許出願番号に紐づく優先基礎出願情報の取得
priority_right_app_info(case_number, law="patent", reget_date=1)

# 指定された申請人コードで申請人(出願人・代理人)氏名・名称の取得
applicant_attorney_cd(code, law="patent", reget_date=1)

# 指定された申請人氏名・名称を完全一致検索で、申請人(出願人・代理人)コードの取得
applicant_attorney(name, law="patent", reget_date=1)

# 出願番号に紐づく案件番号の取得
application_reference(case_number, law="patent", reget_date=1)

# (特許のみ)公開番号に紐づく案件番号の取得
publication_reference(case_number, reget_date=1)

# 登録番号に紐づく案件番号の取得
registration_reference(case_number, law="patent", reget_date=1)

# 指定された出願番号に対応する実体審査における特許申請書類の実体ファイル（意見書・手続補正書）の取得
app_doc_cont_opinion_amendment(case_number, law="patent", reget_date=1)

# 指定された出願番号に対応する実体審査における発送書類の実体ファイルの取得
app_doc_cont_refusal_reason_decision(case_number, law="patent", reget_date=1)

# 指定された出願番号に対応する拒絶理由通知書のファイルを取得
app_doc_cont_refusal_reason(case_number, law="patent", reget_date=1)

# (特許のみ)指定された出願番号に紐づく引用文献情報の取得
cite_doc_info(case_number, reget_date=1)

# 指定された出願番号に紐づく登録情報の取得
registration_info(case_number, law="patent", reget_date=1)

# 指定された出願番号に紐づくJ-PlatPatの固定アドレスの取得
jpp_fixed_address(case_number, law="patent", reget_date=1)

# (特許のみ)国際出願番号に紐づくPCT出願の日本国内移行後の出願番号を取得
international_application(case_number, reget_date=1)

# (特許のみ)国際公開番号に紐づくPCT出願の日本国内移行後の出願番号を取得
international_publication(case_number, reget_date=1)
```

# 制限など
## 関数の動作について
applicant_attorney()について特許庁の例に従ったテストをしてみたが、意匠のサンプルにおいて対象のデータはありませんとのステータスコードが返ってきていて、正常動作を確認できていない。スペースの指定の仕方などで問題がある可能性があるが、正確な原因は不明である。使用されるときには十分にテストすること。

## 既存のキャッシュファイルについて
easy_patentsがインストールされているディレクトリのdataディレクトリ配下の構成を変えた。

### 変更前
data/案件番号/....

### 変更後
data/法域/案件番号/....

変更前のデータは使用しないため、削除を推奨する。（現状、手動削除のみ可能）
30億パラメータのDolly 2.0をGeForce RTX 2080Tiで試してみた。

今日、話題のDatabricksのDolly 2.0をGeForce RTX 2080Tiで試してみました。

使ったのは30億パラメータ版です。
実験に使ったマシンのスペックは：
10th Gen. Core i5 12 Threads, 64GB RAM, Geforce RTX 2080Ti 11GB

下にテストの際のYouTubeの動画を貼っときます。
<iframe width="560" height="315" src="https://www.youtube.com/embed/hWB5ssg1Cgg" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" loading="lazy" allowfullscreen></iframe>

6GB弱ぐらいのVRAMを消費していました。
![nvidia-smi-dolly2-4-20-2023.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13264/f34401b9-016a-927e-bf54-f702afd41cd3.jpeg)
【就活】僕が使った就活エージェント全部解説＆得点付けた

# はじめに
就活が終わりました。

就活でお世話になったエージェントを100点満点で評価しつつ紹介しようと思います。

**要約**と**そのほか就活に便利なものたち**は見てほしい

---

# 目次

- 要約
- エージェント紹介
    - OfferBox
    - TechFUL
    - サポーターズ
    - Paiza
- そのほか就活に便利なものたち
    - OpenWork
    - yagish
    - Notion
    - Qiita
    - Twitter

---

## 要約

とにかく自己肯定感を上げて自信を付けることが大事だと思った。

まだエージェント使ったことないor就活ほとんどしてないなら**TechFUL**おすすめ

マイナビとかで自分で求人探すのが苦手なら**OfferBox**や**TechFUL**おすすめ

プログラミング得意なら**TechFUL**や**Paiza**おすすめ。ひたすら問題解こう

技術や知識磨きたいなら **サポーターズ（技育CAMP）** おすすめ

---

# OfferBox

https://offerbox.jp/?_ga=2.175469729.2032398371.1681994170-445156533.1674641401

## 📝一言紹介

就活版マッチングアプリ！一番オススメ

## 得点：90点

- **自己肯定感**がかなり上がる。
    - オファーと同時にこんな感じで声かけてくれる。![Untitled.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666100/91db9364-cc2e-cbc6-4359-a6486211809d.png)     
- 自己分析、他己分析が充実していて、**就活以上に自分を見直す**いいきっかけになる
- ユーザのユニーク情報を記入する欄があり、そこに今までの大会の成績とかいろいろかける。
    - 面接の雑談に繋がったこともあった
- 企業に求めるポイントを多く書ける
    - それを元にオファーを送ってくるので、**条件が合致**していることが多かった
- 簡単日程調整という機能がある
    - 自動で**面接の日程などを管理してくれる**。小さいことだけどかなり便利だった

## 使ってみて

まずは説明会かカジュアル面談が多いので、ＩＴ業界の中で自分が**どういった分野に興味を持つのか**知るため、また**場慣れをするため**に、説明会やカジュアル面談を受けまくった。

実際に選考に進むことも何度かあり、**フィードバック**も丁寧にもらえた印象

---

# TechFUL

https://techful-programming.com/

## 📝一言紹介

最初に使うエージェントにどうぞ！

## 得点：70点

- 中の人との個人面談
    - **履歴書をほとんど作ってくれる**
    - かなーーーーーり**親切**に就活の相談に乗ってくれる（人にもよるかもね）
    - 頻度も高い
    - 選考に進む**企業に合わせた面談**をしてもらえる
- プログラミングの練習に良い
    - 競技プログラミングも兼ねている
        - **大会**や常設の問題も多数あり、大会でいい成績をおさめると他のエージェントでも使える実績となる。
        **初心者向け**（学生専用だから？）で、大会は比較的楽に好成績を残せると思う。
        - 好成績を出すと、特典が出る（**いきなり社長面接**とかもあったりする。）

## 使ってみて

エージェントの人がとにかく**親切**だった。
**就活のきっかけ**はTechFULのおかげで作れた
無限に競技プログラミングの問題解いてるだけで実績にもなる
TCCというコンテストの成績が、面接でかなり高評価をもらえてた印象

---

# サポーターズ

https://talent.supporterz.jp/

## 📝一言紹介

就活というより**イベント**豊富！スキルある人やスキル伸ばしたい人にオススメ

## 得点：85点

- 支援**金**が貰える！
    - 対面の面接やイベントへの参加でお金がもらえる。
    - 僕は5000円くらいしかもらってない
- イベント豊富
    - 企業探し以上に、**ハッカソンや学習会、講習**など、イベントが豊富。
    - イベントに参加した経験は就活でものすごく活きた
    
    [技育CAMP](https://talent.supporterz.jp/geekcamp/)👈これが**最強**。
    
- プログラミングスキルを入力する欄が十分にある
    - 頑張ったことアピールできる
- 大量の企業の紹介が来るので、どの会社から受けたらいいか分からず、就活にはあまり繋がらなかった
- サポーターズの中の人との個人面談があったが、それはやんない方がいい。
    - 気になる企業の気になる度を入力しろってやつがめちゃめんどい

## 使ってみて

これのおかげで勉強頑張れた。早く登録しときゃよかった

エンジニアとしての成長にかなり貢献してくれた。

特に初心者向けのハッカソンや学習会に感謝！

就活に直接的にはあまり役立たないかな


---

# Paiza

https://paiza.jp/

## 📝一言紹介

プログラミングが得意な人におすすめ！

## 得点：70点

- **競技プログラミング**がベースの就活サイト
    - 難しい問題を解くとランクが上がる
    - ランクが上がるとよりレベルの高いエンジニアを求める企業からお誘いが来る
    - そのお誘いに乗るとお金がもらえることもある
- **履歴書ビルダー**という機能があり、割と楽に履歴書をかけた
- 通常のスカウトのほかに**ゴールデンスカウト**というものがあり、自己肯定感UPに繋がる
- **選考フローにコーディングテスト**が含まれる企業も多く、楽しい人は楽しい。

## 使ってみて

Bランクくらいまでは簡単な割に得することが多いので、プログラミング得意な人はやり得

スカウトしてくる企業の平均年収が高く、逆に気が引けてしまった

競プロが楽しくてやってた

# 他、就活に便利なものたち

## OpenWork

[](https://www.vorkers.com/my_top)

**社内の人のクチコミ**が見れる。
評価件数が少ない場合も結構あるので、
セットで確認した方がいい

## yagish

https://rirekisho.yagish.jp/

めちゃ**便利な履歴書ビルダー**

ほんっとに便利。

## Notion

https://www.notion.so/ja-jp

この記事もNotionで書いてる。

授業中のメモや就活のメモにめちゃ便利。楽にきれいにかける。多分一生使う

オンライン上にデータを置けるから、違うPCでも開けるし編集できる

## Qiita

https://qiita.com/

勉強したことアウトプットしてたら企業にかなり高評価もらえた

## Twitter

リンク張る必要なし

たまに企業から直接お誘いがくる。
Next.js + ECS における環境変数の設定

## きっかけ

ECSは起動時、コンテナに環境変数を受け渡すことが可能です。

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/taskdef-envfiles.html

Next.jsをECSで動かす際に、必要な環境変数をこの機能で受け渡そうとしたのですが、うまくいきませんでした。

## 原因
https://zenn.dev/ttani/articles/nextjs-ecs-env

>NEXT_PUBLIC_から開始される環境変数については、ビルド時に設定されるものなので、コンテナ起動後に使用されるタスク定義で環境変数を設定しても使用できません。

`npm build` したタイミングで`.env.production`にある必要があるんですね。。。
よく考えたらそれはそうです。

上記記事ではAWS Codeシリーズを使った対策が記載されていますが、あいにく私はコードシリーズが大の苦手なのです・・・。できればDockerfileだけで完結させたい・・・。


## 対応

https://github.com/Droplr/aws-env

を使いました。
これはgoで書かれたパッケージで、ParameterStoreにある環境変数を取得し展開します。
`.env.production` に展開するのであればこんな感じ

```bash
aws-env --format=dotenv > .env.production;
```

Dockerfileでビルド時に上記コマンドを実行し、環境変数を展開します。

```Dockerfile:Dockerfile
FROM node:latest

ARG ENV=dev
ENV ENV=${ENV}

ARG AWS_ACCESS_KEY_ID
ARG AWS_SECRET_ACCESS_KEY
ARG AWS_REGION
ARG AWS_ENV_PATH

WORKDIR /code

COPY . .

RUN if [ "$ENV" = "prod" ]; then \
      wget https://github.com/Droplr/aws-env/raw/master/bin/aws-env-linux-amd64 -O /bin/aws-env && \
      chmod +x /bin/aws-env && \
      AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID \
      AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY \
      AWS_REGION=$AWS_REGION \
      AWS_ENV_PATH=$AWS_ENV_PATH \
      aws-env --format=dotenv > .env.production; \
    fi

RUN npm update -g npm && \
    npm install && \
    npm run build

EXPOSE 3000

CMD "sh" "-c" "npm run start"
```

GitHubActionsでbuildする時は以下のようにアクセスキーを渡しつつ実行します。

```yml:deploy.yml
        run: |
          docker build -t $ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG \
            --build-arg AWS_ACCESS_KEY_ID=${{ secrets.AWS_ACCESS_KEY_ID }} \
            --build-arg AWS_SECRET_ACCESS_KEY=${{ secrets.AWS_SECRET_ACCESS_KEY }} \
            --build-arg AWS_REGION=ap-northeast-1 \
            --build-arg AWS_ENV_PATH=${{ secrets.AWS_ENV_PATH }} \
            --build-arg ENV=prod \
            .
```

IAMポリシーは参照するParameterStoreのパスに対して以下のように設定します。

```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ssm:GetParametersByPath",
            "Resource": "arn:aws:ssm:ap-northeast-1:235087485205:parameter/path/to/parameter/*"
        }
    ]
}
```

## 結論

シンプルな分すごい使いやすいパッケージですね。
サーバーサイドの環境変数であれば`eval $(aws-env)` を実行するだけで展開可能です。
ECSの環境変数でParameterStoreのパスとリージョンを設定し、コンテナ起動時のコマンドを`bash -c "eval $(aws-env) && npm start"`のようにうまく上書きします。
PDFのレイヤーを一部offにしたファイルを作る

MacのプレビューアプリはPDFを操作するのに地味に便利なんですが、１つ、AdobeAcrobat Readerに劣る点があり、それはレイヤーのon/offができないということです。私は海外の洋裁型紙をpdfでダウンロードして買うことが多いんですが、幾つものサイズのレイヤーが１つのファイルに入っていて、ユーザーは使わないレイヤーをoffにして印刷することを期待されていることがあります。これがMacのプレビューで出来ないのでちょっとストレスでした。このためだけにAdobe製品を入れるなんてあんまり気が向きません。

Google Colabで簡単なPythonコードを書いて、いらないレイヤーをoffにしたpdfファイルを作る方法が分かりましたのでメモっておきます。

まず、PyMuPDFをインストールします。

```python 
!pip install pymupdf 
```
どんなレイヤーがあるのかまず見てみましょう。
```python
import fitz
doc = fitz.open("input.pdf")
doc_ocgs = doc.get_ocgs()
print(doc_ocgs)
```
私の手元の洋裁型紙ではこんなオブジェクトが返ってきました。
```python
{20: {'name': 'LARGE', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}, 
21: {'name': 'MEDIUM', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}, 
22: {'name': 'SMALL', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}, 
23: {'name': 'XS', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}, 
24: {'name': 'Pattern information', 'intent': ['View'], 'on': True, 'usage': 'Artwork'}, 
25: {'name': 'Layout information', 'intent': ['View'], 'on': True, 'usage': 'Artwork'}, 
26: {'name': 'Numbers', 'intent': ['View', 'Design'], 'on': True, 'usage': 'Artwork'}}
```
私はSMALLサイズのレイヤーだけonにしたいので、LARGE、MEDIUM、XSサイズは消して、pdfを保存したいと思います。表示をoffにしたいレイヤーを数字の20、21、23番で指定しています。それ以外のレイヤーはベースとしてonのままにしています。
```python
doc.set_layer(-1, off=[20,21,23], basestate="ON")
doc.save("output.pdf") 
```

以上です！
MacのプレビューアプリだけでPDFを扱って生きていきたいが、一部のレイヤーをoffしたい時用の便利スクリプトでした。
ssh 接続トラブル対処 (kex_exchange_identification: read: Connection reset by peer)

こんにちは。
ssh 接続ができなくなり、対処の結果、接続復活できました。

#### 状況・対処 ####
この接続トラブルは、停電により、ホスト機が止まり、手動で起動した後に発生しました。

行った対処は、ホスト機をシャットダウン・LANケーブルを一旦抜く・再起動です。


#### ssh 接続トラブル状況 ####
ssh 接続トラブル時の状況は、

```console
$ ssh user@host
kex_exchange_identification: read: Connection reset by peer
$
```
jQueryを使ってWebSocketを実装する方法

この記事では、リアルタイム通信が可能なWebSocketプロトコルを使用して、シンプルなチャットアプリをJavaScriptとjQueryで実装する方法を説明します。

# 1. HTMLファイルを作成
まず、メッセージの入力と表示用の要素を追加したHTMLファイルを作成しましょう。また、jQueryのCDNを追加します。

```html:indx.html
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>WebSocket Chat with jQuery</title>
</head>
<body>
    <div id="messages"></div>
    <input type="text" id="inputMessage" placeholder="メッセージを入力">
    <button id="sendButton">送信</button>

    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="app.js"></script>
</body>
</html>
```

# 2. JavaScriptファイルを作成
次に、`app.js`ファイルを作成し、WebSocketを使って通信するためのJavaScriptコードを記述します。jQueryを使ってDOM要素の取得やイベントリスナーの追加を行います。

```javascript:app.js
// WebSocketサーバーのURLを指定
const webSocketServerURL = 'ws://your-websocket-server-url';

// WebSocketオブジェクトを作成
const socket = new WebSocket(webSocketServerURL);

// DOM要素を取得
const $messagesDiv = $('#messages');
const $inputMessage = $('#inputMessage');
const $sendButton = $('#sendButton');

// WebSocketが接続されたときの処理
socket.addEventListener('open', (event) => {
    console.log('WebSocket接続が開かれました: ', event);
});

// WebSocketでメッセージが受信されたときの処理
socket.addEventListener('message', (event) => {
    const receivedMessage = event.data;
    const messageElement = $('<div>').text(receivedMessage);
    $messagesDiv.append(messageElement);
});

// メッセージ送信ボタンがクリックされたときの処理
$sendButton.on('click', () => {
    const message = $inputMessage.val();
    socket.send(message); // WebSocketを使ってメッセージを送信
    $inputMessage.val('');
});

// WebSocketが切断されたときの処理
socket.addEventListener('close', (event) => {
    console.log('WebSocket接続が閉じられました: ', event);
});

// WebSocketでエラーが発生したときの処理
socket.addEventListener('error', (event) => {
    console.error('WebSocketエラーが発生しました: ', event);
});
```

これで、シンプルなWebSocketチャットアプリが完成しました。ただし、この例ではWebSocketサーバーの実装が含まれていません。WebSocketサーバーを実装するには、Node.jsやPythonなどのサーバーサイード言語を使用して実装することができます。WebSocketサーバーの実装方法は、使用する言語やフレームワークによって異なります。


# 3. 最後に
この記事では、jQueryを使用してWebSocketを実装する方法を紹介しました。リアルタイム通信が可能なWebSocketは、チャットアプリだけでなく、通知やゲームなどさまざまなアプリケーションで活用できます。ぜひ、WebSocketを使ったアプリケーションの開発に挑戦してみてください。
ブラウザでZIPファイルを解凍する方法: JSZipとjQueryを使った実装

この記事では、ブラウザでZIPファイルを解凍する方法を説明します。JavaScriptのライブラリであるJSZipとjQueryを使用して、簡単にZIPファイルの解凍を実行できます。

# 必要なライブラリ
まず、以下の2つのライブラリが必要です。

1. [JSZip](https://stuk.github.io/jszip/) - JavaScriptでZIPファイルを解凍するためのライブラリ
2. [jQuery](https://jquery.com/) - DOM操作を簡単に行うためのJavaScriptライブラリ

# 実装
以下は、.zip ファイルを選択できる input file タグと、選択されたファイルを解凍するボタンがあります。ファイルが選択されると、解凍ボタンが有効になり、クリックするとファイルが解凍され、データがコンソールに表示されます。ただし、この例ではファイルの内容はブラウザのコンソールに表示され、実際にファイルとして保存はされません。

```html:index.html
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ZIP File Decompression with JSZip and jQuery</title>
    <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.7.1/jszip.min.js"></script>
</head>

<body>
    <input type="file" id="file-input" accept=".zip">
    <button id="decompress-button" disabled>Decompress</button>

    <script>
        $(document).ready(function () {
            const $fileInput = $('#file-input');
            const $decompressButton = $('#decompress-button');

            $fileInput.on('change', function () {
                if (this.files.length > 0) {
                    $decompressButton.prop('disabled', false);
                } else {
                    $decompressButton.prop('disabled', true);
                }
            });

            $decompressButton.on('click', async function () {
                const file = $fileInput[0].files[0];
                if (!file) {
                    alert('No file selected.');
                    return;
                }

                try {
                    const fileContent = await file.arrayBuffer();
                    const zip = new JSZip();
                    await zip.loadAsync(fileContent);

                    for (const fileName in zip.files) {
                        const file = zip.files[fileName];
                        if (!file.dir) {
                            const content = await file.async('text');
                            console.log(`File: ${fileName}\nContent:\n${content}\n`);
                        }
                    }

                    alert('Decompression complete. Check console for output.');

                } catch (error) {
                    console.error('Error decompressing file:', error);
                    alert('Error decompressing file. Check console for details.');

                }
            });
        });
    </script>
</body>

</html>
```

# 使い方
1. 上記のHTMLコードをindex.htmlなどのファイル名で保存して、ブラウザで開きます。
2. ".zip"ファイルを選択するためのinput type="file"エレメントが表示されます。適切なZIPファイルを選択してください。
3. ファイルが選択されると、「Decompress」ボタンが有効になります。ボタンをクリックすると、ZIPファイルが解凍され、コンソールにファイルの内容が表示されます。

# 注意点
この実装では、ブラウザのコンソールに解凍されたファイルの内容が表示されるだけで、実際にファイルとして保存はされません。ローカルファイルシステムへのアクセスはブラウザのセキュリティ制限により制限されているため、解凍されたファイルをローカルに保存するには、サーバーサイドのプログラムやブラウザのFile System APIを使用する必要があります。

# まとめ
JSZipとjQueryを使用して、ブラウザでZIPファイルを簡単に解凍できることを確認しました。この実装は、ファイルの内容を確認したり、クライアントサイドでデータの前処理を行う際に便利です。ただし、解凍されたファイルの保存には追加の手順が必要です。
java初心者が行く～コンストラクタ～

# はじめに
最近暖かくなってきましたね．社会人になって一ヶ月たちそうです．5月病にならない程度にのんびりと勉強していこ～
java初心者が備忘録的に書いてます．間違ったことを書いてても責任はとらないよ！

# コンストラクタとは
コンストラクタとはクラスがnew（インスタンス化）された直後に自動的に実行される性質のことを言う．
いままでだとクラスをnewした後にいちいち初期化しないといけなかった．
コードで言うと以下の感じ．

例えばこのようなクラスがあったとする．
```java
public class Sample{
    int num;
    public void number(){
        System.out.println(this.num);
    }
}
```
コンストラクタを用いないと実行するたびに初期化が必要．

```java
public class Main{
    public static void main(String[] args){
        Sample number = new Sample();
        number.num = 100;//これがいちいち面倒
        System.out.println(number.num);
    }
}
```
コンストラクタはここを自動でしてくれる．

# コンストラクタの書き方
コンストラクタは以下のように書く

```java
pblic class クラス名{
    クラス名(){
            自動で行いたい処理処理
        }
}
```
これを先ほどのコードに合わせて書くと

```java
public class Sample{
    //sampleの属性を書ける
    int num;
    public void number(){
        System.out.println(this.num);
    }
    public Sample(){
        this.num = 100;
    }
}
```

となる．

必然的にMainクラス内の初期化はいらなくなり，最終的なプログラムファイルはそれぞれ

```java
public class Main{
    public static void main(String[] args){
        Sample number = new Sample();
        System.out.println(number.num);
    }
}
```

```java
public class Sample{
    //sampleの属性を書ける
    int num;
    public void number(){
        System.out.println(this.num);
    }
    public Sample(){
        this.num = 100;
    }
}
```

となる．
インスタンス化が一つだけだとありがたみが少ないが沢山インスタンス化を行う場面では効果を発揮する！（らしい）

ちなみにコンストラクタは引数を持つこともできる．

```java
public class Main{
    public static void main(String[] args){
        Sample hello = new Sample("こんにちは");
        System.out.println(hello.hello_1);
    }
}
```

```java
public class Sample{
    //sampleの属性を書ける
    String hello_1;
    public void introduction(){
        System.out.println(this.hello_1);
    }
    public Sample(String str){
        this.hello_1 = "こんにちは";
    }
}
```

コンストラクタはこんな感じ．いつかありがたみを感じることが来るだろう，，
【SwiftUI】Textのサイズを知る

# はじめに
3日前に「もっと見る」機能を作りました。

https://qiita.com/SNQ-2001/items/215dfbc457e0e5b0bc1e

本当はTwitterのようにTextの一番後ろにもっと見るを表示したかったのですが、力不足で実現できませんでした。
その時にTextのサイズを知る方法を知ったので記録しておきます

# 実装
```swift
import SwiftUI

struct ContentView: View {
    @State private var text = ""
    var body: some View {
        VStack(spacing: 50) {
            Text(text)
                .font(.system(size: 15))
                .background(GeometryReader { proxy in
                    Color.red.preference(key: SizePreferenceKey.self, value: proxy.size)
                })
                .onPreferenceChange(SizePreferenceKey.self) { size in
                    print("width: \(size.width), height: \(size.height)")
                }
            
            TextField("", text: $text)
                .textFieldStyle(.roundedBorder)
        }
        .padding(.all)
    }
}

struct SizePreferenceKey: PreferenceKey {
    static var defaultValue: CGSize = .zero
    static func reduce(value: inout CGSize, nextValue: () -> CGSize) {
        value = nextValue()
    }
}
```

# おわり
そのうちTwitterのようなもっと見るを作りたいです
【初投稿】Linuxコマンドで特定のファイル郡を別フォルダにまとめてコピーする

## はじめに
これがQiita初投稿です。
エンジニアになって3年目、ずっとQiitaにお世話になってはいましたが、技術記事と言う形でOutputすることはできていませんでした。ただ、業務中にやってきた技術内容をNotionをまとめてきたので、これから頑張ってアップしていこうと思います。

# やりたいこと

あるディレクトリに様々な拡張子ファイルが含まれており、これをコマンド一発叩くだけで別フォルダに移したい。

もちろんいろいろやり方はあるので複数例を提示する。

この方法を応用すれば、コピー以外にも他にもできることがある。

# ユースケース

<aside>
💡 特定のフォルダにはPythonスクリプトとjpgファイルが含まれている。このフォルダからjpgファイルだけを別フォルダにコピーしたい。

</aside>

## やり方１：cpコマンド、findコマンドを使用

```bash
find /path/to/source/folder -maxdepth 1 -type f -name "*.jpg" -exec cp {} /path/to/destination/folder \;
```

- **`find`**：ファイル検索ユーティリティ。フォルダ内のファイルを検索する。
- **`/path/to/source/folder`**：検索するフォルダのパスを指定する。このパスには、スクリプトとjpgファイルが含まれているフォルダを指定します。
- **`maxdepth 1`**：フォルダ内のサブフォルダを検索しないようにする。つまり、検索は指定されたフォルダの直下のファイルに限定される。
- **`type f`**：ファイルの種類を指定する。この場合、ファイルのみを検索する。
- **`name "*.jpg"`**：検索するファイル名を指定する。この場合、拡張子が「.jpg」のファイルのみを検索する。
- **`exec cp {} /path/to/destination/folder \;`**：検索されたファイルに対して実行するコマンドを指定する。この場合、検索されたファイルを別のフォルダにコピーするために、**`cp`**コマンドを使用する。 `{}`は、検索されたファイルの名前に置き換えられる。最後の `\;` は、このオプションの終了を示す。

## やり方２：rsyncコマンドを使用

個人的に、上記ユースケースではこれがお気に入り。

```bash
rsync -avz --include="*/" --include="*.jpg" --exclude="*" /path/to/source/folder/ /path/to/destination/folder/
```

- **`rsync`**：ファイルの同期を行うコマンド。今までリモート相手にしか、使用することないと考えていたが、**ローカル内完結でも使うことができる**とは！
- **`avz`**：`rsync`コマンドのオプションを3つ組み合わせたもの。
    - **`a`**：アーカイブモード。ファイル属性を保持してコピーする。
    - **`v`**：詳細モード。ファイルのコピーを詳細に表示する。
    - **`z`**：圧縮モード。ファイルを圧縮して転送する。
- **`-include="*/"`**：指定されたフォルダを含める。
- **`-include="*.jpg"`**：拡張子が「.jpg」のファイルを含める。
- **`-exclude="*"`**：上記の条件に当てはまらないすべてのファイルを除外。
- **`/path/to/source/folder/`**：コピー元のフォルダを指定する。最後にスラッシュ（/）が必要。
- **`/path/to/destination/folder/`**：コピー先のフォルダを指定する。最後にスラッシュ（/）が必要。

### jpgファイルだけでなくjpegファイルも含めたいとき

以下のようにする。

- **`--include`**オプションで`.jpg`*と指定している箇所を*`.jpg`と`*.jpeg`の両方に変更
- **`--exclude`**オプションを削除

```bash
rsync -avz --include="*/" --include="*.jpg" --include="*.jpeg" /path/to/source/folder/ /path/to/destination/folder/
```

## やり方３：findコマンド、xargsコマンド、cpコマンドを使用

```bash
find /path/to/source/folder -maxdepth 1 -type f -name "*.jpg" | xargs -I{} cp {} /path/to/destination/folder
```

パイプ（｜）前まではやり方１と同じなので割愛。

- **`xargs`**：標準入力からのデータを引数にしてコマンドを実行するために使用する。
- **`-I{}`**：**`xargs`**コマンドが入力の各行を引数に変換する際に、**`{}`**というプレースホルダを使用することを指定する。このプレースホルダは、**`cp`**コマンドで使用されることになる。

# おまけ：`args`と`xargs`

`**args**`は指定されたコマンドに引数リストを渡すために使われるが、**`xargs`**は標準入力から引数文字列を受け取り、それを指定されたコマンドの引数として解釈される。

```bash
$ echo foo bar baz | xargs echo
foo bar baz
```

**`echo foo bar baz`**コマンドが実行され、パイプラインで渡されたデータが標準入力から引数として渡される。

```bash
$ ls | xargs rm
```

**`ls`**コマンドで出力されたファイルリストを**`xargs`**コマンドに渡し、**`rm`**コマンドに引数として渡している。
System.Net トレースを Application Insights に送る方法について

# 概要
.NET Framework アプリケーションを対象に、System.Net トレース (System.Net 名前空間に関するネットワークトレース) を有効化し、ログファイルではなく Application Insights に送信する方法を紹介します。

具体的には System.Net 名前空間内のトレースなので、以下に書いてあるように、HttpClient だけでなく、Socket や HttpWebRequest、FtpWebRequest、HttpListener、WebSocket など様々なクラスに関するトレースを出力することができます。また、.NET Framework アプリケーションといってもコンソールやデスクトップアプリなどに限った話ではなく、例えば ASP.NET アプリから何らかの外部アプリに HttpClient で HTTP リクエストを行っている場合などにも有効なトレースです。(IIS 上の ASP.NET がリッスンしている側の通信の話ではないことにご注意ください)

https://learn.microsoft.com/ja-jp/dotnet/framework/network-programming/enabling-network-tracing

# 方法
今回は Visual Studio 上の ASP.NET ローカルアプリと想定して記載します。

## 構成ファイルの追記
以下にあるように、\<system.diagnostics> に関する設定を構成ファイルに追記します。

ただし、以下の例は machine.config が例になってますが、これはそのサーバー上の該当の .NET Framework のバージョンの全てのアプリに影響してしまいます。

そのため、設定はアプリごとに差し込むようにすることをお勧めします。ASP.NET アプリケーションなら web.config、.NET Framework アプリなら app.config に <system.diagnostics> の同内容を差し込みます。また、.NET Framework アプリのビルド後の exe に差し込みたいのであれば、*.exe.config に差し込むこともできます。

https://learn.microsoft.com/ja-jp/dotnet/framework/network-programming/how-to-configure-network-tracing#configure-network-tracing

## ログのレベルの変更

また、ロギングのレベルも変更でき、また一部の名前空間だけに限定することもできます。

```
<switches>
    <add name="System.Net.WebSockets" value="Information"/>
</switches>
```

System.Net トレースの各レベルに関する switch の Level については実装やリファレンス的には以下の部分に当たります。(SourceLevels)

https://referencesource.microsoft.com/#System/compmod/system/diagnostics/SourceSwitch.cs,21
https://referencesource.microsoft.com/#System/compmod/system/diagnostics/SourceLevels.cs,13
https://learn.microsoft.com/ja-jp/dotnet/api/system.diagnostics.sourcelevels?view=netframework-4.8.1#fields

## Application Insights に飛ばすように変更する
まず今回はローカルの Visual Studio の ASP.NET アプリということで、以下のように簡単に Application Insights を自動追加することができます。

https://learn.microsoft.com/ja-jp/azure/azure-monitor/app/asp-net#add-application-insights-automatically

さらに、上部の System.Net トレースのリファレンス通りにやるとローカルのログファイルに書き込まれます。これは Application Insights に飛ばします。これによって Logs (Log Analytics) 経由でクエリ検索をかけることもできるようになります。

```
<configuration>
...
  <system.diagnostics>
    <sources>
      <source name="System.Net.Http">
        <listeners>
          <add name="myAppInsightsListener" />
        </listeners>
      </source>
    <switches>
      <add name="System.Net.Http" value="Verbose" />
    </switches>
    <sharedListeners>
           <add name="myAppInsightsListener" type="Microsoft.ApplicationInsights.TraceListener.ApplicationInsightsTraceListener, Microsoft.ApplicationInsights.TraceListener" traceOutputOptions="ProcessId, DateTime" />
    </sharedListeners>
    <trace autoflush="true">
    </trace>
  </system.diagnostics>
...
</configuration>
```

#### 留意事項

ただし、Application Insights  はインジェスト量がかなりの数になる可能性もあるため、検証環境で事象再現時のみに取得するなど工夫するとよいです。また、送信内容については事前にオンラインにアップしていいものかはローカルで確認しておくことをお勧めします。また、そもそもローカルで十分である場合は公式サンプル通り、ローカル出力を検討しましょう。
Laravelでテーブルの削除・変更を行った際のエラー（SQLSTATE[HY000]: General error: 1364 Field '〇〇' doesn't have a default value）


# バージョン
Laravel Framework 9.52.5
PHP 8.2.4

# やりたかったこと
Laravelにてデータテーブルのカラムに(user_id)的なものを追加

# エラー

その際にデフォルトのカラムであるnameを削除し忘れており

```
SQLSTATE[HY000]: General error: 1364 Field 'name' doesn't have a default value
```

と出た

# 解決策
自分はnameの方はもう使わない想定だったので

```
php artisan make:migration drop_column_users_column --table=users
```
でusers削除のためのマイグレーションを作成
```users_column.php
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->dropColumn('name'); #追加

        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            //
            $table->boolean('name')->default(false); #追加

        });
    }
};

```

```
php artisan migrate 
```

して削除した。

今後はこのやり方が応用できるか分からないのでカラムのバリデーションを変更したりしていく。
【Chat GPT 】LINEアカウントにChat GPT を組み込むコードを生成してもらった結果

Chat GPTをLINEに紐付けてるTweetを過去に見たんですが、わたしでもやってみたい、、！
と思いながらも色々調べるのは時間が惜しいというわがままな考えから

そうだ、Chat GPTにやってもらおう

ということでお願いしてみました。

![スクリーンショット 2023-04-20 21.13.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2030574/26a48ffb-7f37-12e5-b28a-01f04614dca2.png)

そこで出てきたのが以下のコード

```python:
import os
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import openai

app = Flask(__name__)

# LINE API設定
line_bot_api = LineBotApi(os.environ.get('LINE_CHANNEL_ACCESS_TOKEN'))
handler = WebhookHandler(os.environ.get('LINE_CHANNEL_SECRET'))

# OpenAI API設定
openai.api_key = os.environ.get('OPENAI_API_KEY')

# メッセージ受信時の処理
@app.route("/callback", methods=['POST'])
def callback():
    # LINEからのリクエストかどうかを検証
    signature = request.headers['X-Line-Signature']
    body = request.get_data(as_text=True)
    try:
        handler.handle(body, signature)
    except InvalidSignatureError:
        abort(400)
    return 'OK'

# テキストメッセージの受信時の処理
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
    # LINEのユーザーIDとメッセージの取得
    user_id = event.source.user_id
    message = event.message.text
    
    # OpenAI APIを使用して応答メッセージを生成
    response = openai.Completion.create(
        engine="davinci", prompt=message, max_tokens=60
    )
    text = response.choices[0].text.strip()
    
    # LINEに応答メッセージを送信
    line_bot_api.push_message(user_id, TextSendMessage(text=text))

if __name__ == "__main__":
    app.run()

```

人のやることが減るのよすぎる！！！

もう駆け出しエンジニアレベルの人材が要らなくなるって！！！（わたしだｗ）



ちょっと極端過ぎましたが、悩みどころがあるときの相談相手にもなりそうなので、躓いてエンジニアを諦めかけた人はChat GPTに相談してみてね٩꒰ ˘ ³˘꒱۶~♡


今月から案件変わって新しいことを覚えていってるので、落ち着いたらゆっくり触りたいなー！
オリジナルふりかえり手法「ピザパーティー」

# はじめに

最近転職をして「ふりかえり」にかなり親しみを感じるようになりました
私の会社では各チーム毎週末ふりかえりをする文化があります
ファシリテーターは別のチームの人に担当してもらうのがルールとなっており、私も今月で3ヶ月目となりファシリテーターをやる権利が手に入りました

前職でもアジャイルを色々と進めており、現職に入ってふりかえりが更に好きになりました
そこで目標として「最高のファシリテーターを目指す」と会社全体で宣言しました

そんな第一回の初めてのふりかえりでやったオリジナル手法「ピザパーティー」がかなり手応えを感じたので紹介します

# ピザパーティーとは

ピザパーティーは[FunRetrospectives](https://www.funretrospectives.com/)の[Easy As Pie](https://www.funretrospectives.com/easy-as-pie/)を日本風に更に使いやすくアレンジしたものになります

日本では元ネタのパイが馴染みがないことから、それをモチーフに自分なりにアレンジを加えています

ふりかえりの型でいう、「多角的にふりかえる」にとても向いています！

# やりかた

私がやった際にはオンラインだったので以下のようなボードを作成しました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/440adadf-f119-6b92-26db-7efc88bbccf9.png)

実際にやる際には模造紙やホワイトボードに大きな5枚切りのピザを書きましょう

それぞれのピザにはラベルがあります

### 1. よかったピザ
チームが継続的に行うことや楽しかったことを付箋に書いて貼っていきます

### 2. ありがとうのピザ
誰かやなにかに対する感謝を書いて貼っていきます

### 3. 学びのピザ
学びや新たな気付きについて付箋に書いて貼っていきます

### 4. 食べちゃうピザ
まさにいまピザをとろうとしています
なので、チームの妨げやネガティブなこと、取り除きたいものを付箋に書いて貼っていきます

### 5. これからのピザ
ストレッチゴールや空想的なアイデア、「不可能」と思われるアイデアを付箋に書いて貼っていきます

それぞれのピザに対して3分ほど時間を図って書いてもらいます

# コツやポイント

このピザパーティーには以下のこだわりがあります

### 導入で世界観に入り込ませる

「このピザを食べる人は具材たっぷりを望んでいます」「付箋は具材なので思いついた些細なこともとにかく書きましょう」

というようにしています。このようにいうことで付箋をたくさん書いてくれるようになります

付箋がたくさん貼られると付箋が具材のようになりピザらしくなります！


### ピザごとに時間を区切る

ふりかえりでは好きな項目について付箋を書いていくという方法もあります(タイムラインでKPTなど)
しかしこのピザパーティーでは時間を区切ってそれぞれの項目について付箋を書くようにしてもらっています
こうすることですべてに平等に時間がかけられるので「よいところを伸ばす」「未来について考える」につながる付箋が多くはられるので多角的にふりかえることができます。

(会社では問題解決のふりかえりが多かったので「良いところを伸ばす」ふりかえりがしたく、このようにしました)

多角的なのがパーティー感あります🎉


# 実際にやってみて

時間を区切ったことでそれぞれ同じくらいの付箋がでていました
また感謝で大げさに感謝してくださいと伝えたので「犬」に感謝している人もでてきました(笑)
感謝はとにかくすることが大事なのでよかったです

未来についても、ぶっ飛んだアイデアがでていて発散できていました

最後にふりかえりのふりかえり(ふりふり)をしたところ、「ピザ面白かった」「感謝がとてもよい」「ピザごとに時間が区切られているのがよかった」などかなりポジティブな感想をいただきました

# おわりに

最近ひたすら**ふりかえりAM**を聞いたり、vivaさんの本を読んだりしています
いつかこの手法がふりかえりとして面白いと紹介してもらったり、これからの私のふりかえりの経験やオリジナルの手法をふりかえりカンファレンスやふりかえりAMで話せたらいいなと思いこの記事を書いてみました

引き続きふりかえりを頑張っていきたいです
ふりかえり界隈で知名度を上げていけたらと夢見ています！ふりかえり最高！

# 参考

https://www.funretrospectives.com/

https://www.funretrospectives.com/easy-as-pie/
vimで複数行削除

vimを普段触ることが少ないのですが、
時々設定をするときに、バックスペースで一文字ずつ消していたので、調べてみたら当然複数行削除できるんですね、、、

# vim複数削除

* 行数 + dd
例えば、10 + ddと打つと、選択しているところから10行分削除できます。

また、
* 「V」（Shift + v）
これを押すと、行単位のビジュアルモードに切り替え、同じように複数削除できます。

なぜもっと、早く調べなかったのか、、、
以下はより詳しい参考になる記事です。

https://howpon.com/20696
NextJSコールスタック(?)メモ

# まず、問題のコード

```tsx
function PageElementIndex(props) {
    return (
        <div>
            <ul>
                {props.news.map((item) => {
                    return (
                        <li>
                            {item.id}:{item.title}:{item.content}
                        </li>
                    );
                })}
            </ul>
        </div>
    );
}
```

# んで修正したコード
```tsx
function PageElementIndex(props) {
    return (
        <div>
            <ul>
                {props.news?.map((item) => {
                    return (
                        <li>
                            {item.id}:{item.title}:{item.content}
                        </li>
                    );
                })}
            </ul>
        </div>
    );
}
```

なにが違うかっていうとnews.mapに?を追加しただけです。

なんでなのか分かりませんが、どうやらReactのレンダリングや関数の実行の順番の影響なようです。。。

## 参考記事

https://zenn.dev/kantafukazawa/articles/742ae144c2f43e
Gitでpatchをapplyするとunrecognized inputエラーが出る

# はじめに

仕事でGitHubが利用できなくなり、diffをパッチで適応するときにつまづいたことについてまとめていきます

# 問題

パッチをapplyしたところ以下のエラーがでました

```
$ git apply ~/Downloads/20230420_diff.patch
error: unrecognized input
```

# 解決方法

これはpatchが空もしくは変更点がないときに表示されるエラーです
今回は空だったのが原因でした

Slackにファイルを貼り付けていたのですが、空なのでSlackでもエラーがでていたのでそこでも今回は気づけました

しっかりコミットまでしてからdiffを出しましょう

# 参考

https://qiita.com/RAWSEQ/items/eae09d5a55e9ed1e527e
Trait Axum::response::IntoResponseに関する考察

## 背景
- $20 USDはらってGPT-4とRustでペアプロをしていた
- GPT-4君、2021年9月までしか学習してない
- 中途半端に本のコードを写経していただけだったのでハンドラの返り値の型の設定とかわかんね

→ ドキュメントを見に行こう
> Trait for generating responses.
> 
> Types that implement IntoResponse can be returned from handlers.
(https://docs.rs/axum/0.6.16/axum/response/trait.IntoResponse.html より引用)

あれいままで気にしてなかったけどこれちゃんとやんないといけないやつだな……？
というか今まで適当に自作構造体を適当にJSON変換してハンドラに返答させてたけどなんでこれ動くんだ……？

## 仮説
- 書籍で`IntoResponse`のトレイトの実装を考えたことはなく、せいぜいハンドラの返り値で`-> Result<impl IntoResponse, StatusCode>`とかしていた。
- ハンドラでかえすときは大抵`Ok((StatusCode, Json(Hoge))`とかしてたので、`Json()`が`IntoResponse`の振る舞いを定義してるならJSONに変換できる構造体、ってことにしておけばレスポンスの本体に加工できるのでは？

## 探すもの

- `axum::Json`の`source`に`impl IntoResponse for Json`が存在してれば勝

## やったこと

まず [docs.rsのaxum](https://docs.rs/axum/0.6.16/axum/index.html) に行きます(執筆時最新バージョンを参照)

https://docs.rs/axum/0.6.16/axum/struct.Json.html

件のページを見つけたので、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606626/9ecfdfd0-fe09-e57d-d3af-c1635c85cdcb.png)

IntoResponseを探します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/606626/761de407-4ac6-3ea9-9c23-393118e1da8b.png)

[source](https://docs.rs/axum/0.6.16/src/axum/json.rs.html#184-207)を見に行きます。Rustのドキュメント集はコード参照持ってきてくれるのがすごくすごいですね。

```rs
impl<T> IntoResponse for Json<T>
where
    T: Serialize,
{
    fn into_response(self) -> Response {
        // Use a small initial capacity of 128 bytes like serde_json::to_vec
        // https://docs.rs/serde_json/1.0.82/src/serde_json/ser.rs.html#2189
        let mut buf = BytesMut::with_capacity(128).writer();
        match serde_json::to_writer(&mut buf, &self.0) {
            Ok(()) => (
                [(
                    header::CONTENT_TYPE,
                    HeaderValue::from_static(mime::APPLICATION_JSON.as_ref()),
                )],
                buf.into_inner().freeze(),
            )
                .into_response(),
            Err(err) => (
                StatusCode::INTERNAL_SERVER_ERROR,
                [(
                    header::CONTENT_TYPE,
                    HeaderValue::from_static(mime::TEXT_PLAIN_UTF_8.as_ref()),
                )],
                err.to_string(),
            )
                .into_response(),
        }
    }
}
```

仮説はあっていました。やったね！

## 余談

宝さがしみたいでおもろかった。
VSCodeでReactが解決できずにエラーになる

# はじめに

久しぶりにVSCodeでReactをかこうとしたところ困ったのでまとめます

# 問題

Reactのプロジェクトを作ったところ以下のようにVSCodeでエラーがでていました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/c334b07a-0314-0989-cb1b-039b1cc09c2c.png)

いままで何度もReactを書いてきたはずなのに今回何故かエラーがでました

# 解決方法

denoの拡張機能を入れていたのが原因でした

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/810513/02842b25-c58b-c3bf-81c9-36ea369ffc08.png)

これをオフにすることで解決しました

# おわりに

Denoをやるときとで使い分けないといけないのはふべんにかんじました
Ubuntuでdocker-composeでElasticSearchを起動するとbuildで止まる

# はじめに

Ubuntuを利用していて毎度気になっていたことを最近解決できたのでまとめます

# 問題

UbuntuでDocker(docker-compose)を使ってElasticSearchをビルドするとなぜかビルドフェイズで止まってしまい、エラーもでずずっとビルドをし続けるという減少が起きていました

Macを利用している方は問題なくビルドができており、困っていました

# 解決方法

原因はメモリが足りないことでした
以下を設定することでうまくいくようになりました

```bash
$ sudo vi /etc/sysctl.conf

# 以下を末尾に追加
vm.max_map_count=262144

$ sudo sysctl -p
```

# おわりに

今回は未来の自分用に簡単にまとめてみました
ElasticSearchについてはまだよくわかっていないです

# 参考
https://stackoverflow.com/questions/67528888/1-max-virtual-memory-areas-vm-max-map-count-65530-is-too-low-increase-to-a