OmniAICreator/Qiita-1.07M huggingface dataset:
TextMate における文字色一覧

一覧がないと分かりづらいと思ったので作成。
それぞれの機能は度外視で、色のみ知りたい人向けです。
# 一覧
![スクリーンショット 2022-06-14 20.07.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708729/91359fd2-a04c-dad1-0fae-3dc81b64afc0.png)
![スクリーンショット 2022-06-14 20.07.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2708729/f55fd76e-5e7b-b79d-6d23-89d444240a8d.png)

# コピペ用

```
[
    "normal",
	"comment",
	"comment.block",
	"comment.block.documentation",
	"comment.line",
	"comment.line.double-dash",
	"comment.line.double-slash",
	"comment.line.number-sign",
	"comment.line.percentage",
	"constant",
	"constant.character",
	"constant.character.escape",
	"constant.language",
	"constant.numeric",
	"constant.other",
	"constant.regexp",
	"constant.rgb-value",
	"constant.sha.git-rebase",
	"emphasis",
	"entity",
	"entity.name",
	"entity.name.class",
	"entity.name.function",
	"entity.name.method",
	"entity.name.section",
	"entity.name.selector",
	"entity.name.tag",
	"entity.name.type",
	"entity.other",
	"entity.other.attribute-name",
	"entity.other.inherited-class",
	"header",
	"invalid",
	"invalid.deprecated",
	"invalid.illegal",
	"keyword",
	"keyword.control",
	"keyword.control.less",
	"keyword.operator",
	"keyword.operator.new",
	"keyword.other",
	"keyword.other.unit",
	"markup",
	"markup.bold",
	"markup.changed",
	"markup.deleted",
	"markup.heading",
	"markup.inline.raw",
	"markup.inserted",
	"markup.italic",
	"markup.list",
	"markup.list.numbered",
	"markup.list.unnumbered",
	"markup.other",
	"markup.punctuation.list.beginning",
	"markup.punctuation.quote.beginning",
	"markup.quote",
	"markup.raw",
	"markup.underline",
	"markup.underline.link",
	"meta",
	"meta.cast",
	"meta.parameter.type.variable",
	"meta.preprocessor",
	"meta.preprocessor.numeric",
	"meta.preprocessor.string",
	"meta.return-type",
	"meta.selector",
	"meta.structure.dictionary.key.python",
	"meta.tag",
	"meta.type.annotation",
	"meta.type.name",
	"metatag.php",
	"storage",
	"storage.modifier",
	"storage.modifier.import.java",
	"storage.modifier.package.java",
	"storage.type",
	"storage.type.cs",
	"storage.type.java",
	"string",
	"string.html",
	"string.interpolated",
	"string.jade",
	"string.other",
	"string.quoted",
	"string.quoted.double",
	"string.quoted.other",
	"string.quoted.single",
	"string.quoted.triple",
	"string.regexp",
	"string.unquoted",
	"string.xml",
	"string.yaml",
	"strong",
	"support",
	"support.class",
	"support.constant",
	"support.function",
	"support.function.git-rebase",
	"support.other",
	"support.property-value",
	"support.type",
	"support.type.property-name",
	"support.type.property-name.css",
	"support.type.property-name.less",
	"support.type.property-name.scss",
	"support.variable",
	"variable",
	"variable.language",
	"variable.name",
	"variable.other",
	"variable.parameter"
]
```
公開鍵暗号方式って何？

# はじめに
私たちが普段何気なく使っているインターネットは、様々な脅威に晒されています。そのうちの一つが、**データを盗み見られる**ことです。

しかし、データや通信は**暗号化**によって安全に送信、受信することができます。

この記事では、暗号化方式の一つである**公開鍵暗号方式**について解説します！




# この記事のゴール
この記事では、以下の内容が理解できることを目標としています。
+ 暗号化と復号化とは
+ 公開鍵暗号方式の仕組み
+ 共通鍵暗号方式との違い



# 暗号化と復号化
暗号化：第三者が読み取れないようにデータを変換すること
復号化：暗号化されたデータを元に戻すこと
![暗号復号.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668385/08216f31-9cc8-1343-8fd9-1443f2ca55f8.png)


例）
元の文章：**大好きです！**
**↓**暗号化
暗号化された文章：**tq2y-hwpcutnseiorhcob**
**↓**復号化
元の文章：**大好きです！**



# 公開鍵暗号方式の仕組み
公開鍵暗号方式では、**暗号化に公開鍵**、**復号化に秘密鍵**を使用します。
それぞれの鍵は対になっており、**受け取る側が公開鍵を秘密鍵を作成します。**
受け取る人だけが秘密で持つ**秘密鍵**、暗号化してもらうために公開する**公開鍵**
![暗号復号.drawio (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668385/cb435ef1-31b1-af1f-d1d0-619c8099dda8.png)

アリスからボブへデータを送る場面を例に考えましょう。
| 手順 | アリス |  ボブ |
|:-:|:-:|:-:|
| 1 | - | 秘密鍵と公開鍵を作成する |
| 2 | - | 秘密鍵を手元に置き、アリスに公開鍵を公開する |
| 3 | 公開鍵でデータを暗号化 | - |
| 4 | 暗号化されたデータをボブに送る | - |
| 5 | - | 暗号化されたデータをアリスから受け取る |
| 6 | - |  受け取ったデータを**秘密鍵**で復号化 |




# 共通鍵暗号方式との比較
公開鍵暗号方式に対して、**共通鍵暗号方式**というものがあります。

公開鍵暗号方式では**暗号化と復号化に別々の鍵を使用する**のに対して、共通鍵暗号方式では**暗号化と復号化に同じ鍵を使用します**。
公開鍵暗号方式では暗号化と復号化に別々の鍵を使用するので、共通鍵暗号方式よりも**安全**です。しかし、アルゴリズムが複雑になるため、**処理速度が落ちてしまいます**。

|  | 共通鍵暗号方式	| 公開鍵暗号方式 |
|:-|:-|:-|
|  処理速度 | 早い  | 遅い  |   
| 鍵の管理  |  煩雑 |  簡単 |   
|  安全性  |  解読されやすい |  解読されにくい |   

また、「共通鍵方式は鍵の共有が安全ではない」「公開鍵方式は処理時間がかかる」というお互いのデメリットを解消した暗号方式のことを**ハイブリッド暗号方式**と呼びます。

ハイブリット暗号方式は、**公開鍵暗号方式と共通鍵暗号方式を組み合わせた暗号方式**です。




# 終わりに
共通鍵暗号方式についての記事もよかったら見てみてください！
https://qiita.com/r_1204/items/54cd0ea3e8a4d3502f5f
共通鍵暗号方式って何？

# はじめに
私たちが普段何気なく使っているインターネットは、様々な脅威に晒されています。そのうちの一つが、**データを盗み見られる**ことです。

しかし、データや通信は**暗号化**によって安全に送信、受信することができます。

この記事では、暗号化方式の一つである**共通鍵暗号方式**について解説します！




# この記事のゴール
この記事では、以下の内容が理解できることを目標としています。
+ 暗号化と復号化とは
+ 共通鍵暗号方式の仕組み
+ 公開鍵暗号方式との違い



# 暗号化と復号化
**暗号化**：第三者が読み取れないようにデータを変換すること
**復号化**：暗号化されたデータを元に戻すこと
![暗号復号.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668385/08216f31-9cc8-1343-8fd9-1443f2ca55f8.png)

例）
元の文章：**大好きです！**
**↓**暗号化
暗号化された文章：**tq2y-hwpcutnseiorhcob**
**↓**復号化
元の文章：**大好きです！**



# 共通鍵暗号方式の仕組み
共通鍵暗号方式では、暗号化と復号化に同じ鍵（共通鍵）を使用します。
![暗号復号.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2668385/63db82b7-c3b2-ec38-725c-89161b713c3d.jpeg)

アリスからボブへデータを送る場面を例に考えましょう。
| 手順 | アリス |  ボブ |
|:-:|:-:|:-:|
| 1 | 送るデータを**共通鍵**で暗号化  | - |
| 2 | 暗号化されたデータをボブに送る | - |
| 3 | - | 暗号化されたデータをアリスから受け取る |
| 4 | - |  受け取ったデータを**共通鍵**で復号化 |



# 公開鍵暗号方式との比較
共通鍵暗号方式に対して、**公開鍵暗号方式**というものがあります。

共通鍵暗号方式では**暗号化と復号化に同じ鍵を使用する**のに対して、公開鍵暗号方式では**暗号化と復号化に別々の鍵を使用します**。
公開鍵暗号方式では暗号化と復号化に別々の鍵を使用するので、共通鍵暗号方式よりも**安全**です。しかし、アルゴリズムが複雑になるため、**処理速度が落ちてしまいます**。

|  | 共通鍵暗号方式	| 公開鍵暗号方式 |
|:-|:-|:-|
|  処理速度 | 早い  | 遅い  |   
| 鍵の管理  |  煩雑 |  簡単 |   
|  安全性  |  解読されやすい |  解読されにくい |   

また、「共通鍵方式は鍵の共有が安全ではない」「公開鍵方式は処理時間がかかる」というお互いのデメリットを解消した暗号方式のことを**ハイブリッド暗号方式**と呼びます。

ハイブリット暗号方式は、**公開鍵暗号方式と共通鍵暗号方式を組み合わせた暗号方式**です。


# 終わりに
公開鍵暗号方式についての記事もよかったら見てみてください！
https://qiita.com/r_1204/items/a2be670b80e159ca6de4
ロジスティクス・ビジネス「物流自動制御のための正しいデータ管理」を読んで考えたこと

## はじめに
この記事では、月刊ロジスティクス・ビジネス「物流自動制御のための正しいデータ管理」を読んで、自分が考えたことを書いています。
物流関係者（WMS開発者や物流企業のIT系担当者の方々）や、物流現場の実情やWMSに少し興味があるなという方にぜひ読んでいただきたいです。
後述の自己紹介にもありますが、筆者はエンジニア業務未経験のため、倉庫側（WMSのユーザー側）としての視点からの意見が多くなっていると思います。

## 読んだ記事について
誌名：月刊ロジスティクス・ビジネス 2022年5月1日発行 第22巻2号　p.50-52
記事タイトル：物流自動制御のための正しいデータ管理
著者名：シーオス 松島 聡 代表　今井義徳 執行役員


## 自己紹介
2022年に株式会社ダイアログに入社し、5月よりエンジニアチームに配属された社会人2年目の者です。
ダイアログではWMS（倉庫管理システム）を切り口に、物流業界のIT化やDX化のための事業を展開しています。
私は前職で物流倉庫内での事務管理業務を行っていたため、エンジニア経験ゼロからのスタートです。そのため、現在は研修などを通して知識をインプットしています。
エンジニアとしての視点はまだあまり持てないかもしれませんが、前職での経験も活かして、今回の記事を書いていきたいと思います。


## 記事を読んで考えたこと
#### 読み終わった時、心に残ったこと
自動化や効率化のためのシステムの開発においては、今まで蓄積された実績データが重要である（機械学習における学習データとして活用できるため）
=> 活用できる実績データを蓄積するためには、データの標準化やそのためのクレンジングが重要である
ということが、この記事を読んで特に強く心に残りました。

#### 物流倉庫から標準化されたデータを取得するためには
自分の考えとして、倉庫の作業員やデータ登録者が標準化データを入力しやすいようなWMS（＝倉庫管理システム）の仕様の構築が必要だと思います。
この視点から色々と考えていきます。

#### データが標準化されていないと感じた体験談
前職で用いていたWMSでも、貨物の入庫登録やマスタ登録の際にさまざまな登録項目があったが、入力の仕方が統一化されていないことが多かった気がします。
例えば、
* 備考欄などの文字列として入力すべき項目に、ロケーション番号や商品管理番号などの数値や英数字を入れてしまう
* 単位の表記がバラバラ
* 半角や全角が統一化されていない　　・・・etc

などがあリました。この原因としては、
* 荷主や商品によって登録するデータ項目が異なり、標準の登録項目では入力しきれない場合に仕方なく備考欄や他の入力項目に様々な入力形式でデータ入力をしてしまう
* 単位が手入力の項目がある
* 半角でも全角でも登録できてしまう項目がある

というような問題があると思います。

この問題は、見づらさや管理のしずらさからミスに繋がる可能性があるのはもちろんのこと、実績データを機械学習の学習データにするなどの、データの更なる活用を進めていく上での足かせとなってしまうはずです。

#### 標準化データを蓄積するにはどのようなWMSが良いのか
* あらかじめ決められた入力形式でないと確定ができないようにする
* 商品マスタ登録で管理単位登録を必須にして、入庫登録の際はマスタの単位情報が自動で入るようにする
* 入力項目を簡単に増やせるようにする（倉庫または荷主側で項目をセレクトできるような仕組み）

一例ですが、このような方法があるのではないでしょうか。

## 今後、自分が意識したいこと
　これらのことを踏まえて、さらなる物流DXを推進していくために、標準化されたデータ入力を登録者が自然と行えるようなWMSの仕様や制御を意識して、開発ができるようになりたいと思いました。
また、WMSの開発だけでなく、蓄積されたデータをどのように活用していくかについても考えていくことも重要だと改めて気づくことができました。
AWS SAA-C02 合格体験記

# 0. はじめに
はじめまして、今年の9月になくなるAWS SAA-C02の資格をとりました。試験の感想について記事を投稿します
# 1. 受験目的
- 自分は2年くらいAWSのサービスを触ったことがありますがAWSのサービスが山のように毎月追加されるので、AWSサービスについてどれくらい知っているか、つまり理解度を確認するために試験を受けてみたかったです。
- 自分がよく使ってるサービス
    - Elastic Beanstalk, Lambda
    - RDS, DynamoDB
    - CloudWatch
    - SQS
# 2. 学習期間
あまり正確ではないですが恐らく１ヶ月です。勉強時間は
- 平日の朝 10~20分
- 週末 2,3時間
- 試験の2日前 40時間
# 3. 学習方法
私は全部Udemyで勉強します。勉強した2つのコースを紹介します。コースを選択基準はUdemy上の評価ですね。因みに両方コースの評価はめちゃ高いです。
- [Ultimate AWS Certified Solutions Architect Associate 2022](https://www.udemy.com/share/102CPB3@hrwfDeGJgOjHYIPLab801E1gdlAiUkyzVcK5RXs53kStoveK-lkZqxCMhDzqXUw8/)
    - このコースはたくさんAWSのサービスの基礎を紹介します。sectionで分けてサービスについて細かく動画で紹介します
    - sectionが終わった後に理解を確認するためミニテストがあります。
- [Practice Exams | AWS Certified Solutions Architect Associate](https://www.udemy.com/course/practice-exams-aws-certified-solutions-architect-associate/)
    - 模擬試験が6つあるコースです。上のコースがある程度できたらこのコースに進んだ方がいいと思います。上のコースは確かに途中で飽きました。覚えるために模擬試験に挑戦したほうがいいと思います。
    - このコースの凄さは質問に対する答えを一つずつ説明してくれる。なぜかこれが正解、なぜかこれダメを全部書いてあるので、理解度がもっと高めると思います
    - 嘘ではないですが、このコースにある問題は実際試験にも出ました。めちゃラッキー🤞と思いました。

# 4. 試験内容

>AWS Certified Solutions Architect – Associate は、AWS における、可用性があり、コスト効率が高く、高耐障害性で、スケーラブルな分散システムの設計に関する 1 年以上の実務経験を持つ方を対象としています。

AWS公式サイトに書いてある4つ観点が全ての問題の内容になります。それぞれの観点で問題量が異なります。写真を参考してください
![Screen Shot 2022-06-14 at 19.37.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/185389/2ea9b7dd-3f2a-b217-9b0a-0ff46a28e9db.png)

後、一つの問題の点数はそれぞれ異なります。どうやって採点するのかはAWS側で決められます。試験の結果はほぼ試験終わった後にすぐにわかるってAWS公式サイトに書いてありますが、私は今回の結果がすぐに出なかったです。12時に終わったのに18時くらいに結果通知のメールがきました。

以上です。ありがとうございました。
【Laravel】フリーメールかを判定する関数を自作してみた

Laravelになかったので「Freemail」というフリーメールかどうかを判定するRailsのライブラリを参考に自作してみた。
## 環境
Laravel v9.5.1 (PHP v8.1.3)


## 実装


1. フリーメールのドメインを配列で返すよう```FreeEmail```モデルで定義

オブジェクト指向の観点からするとクラスにするまでもないが、まあよしとする。


```app/Models/FreeEmail.php
class FreeEmail
{
  public static function list(): array
  {
    return [
      "0-mail.com",
      "027168.com",
      ...
    ]
  }
}
```

2. Emailクラスに、emailからドメインを取る```fqdn```関数とフリーメールかどうか判定する```isFreeEmail```関数を定義

```app/Models/Email.php
class Email
{
  private $email;

  public function __construct(string $email)
  {
    $this->email = $email;
  }

  public function fqdn(): string
  {
    return substr($this->email, strrpos($this->email, '@') + 1);
  }

  public function isFreeEmail(): bool
  {
    return in_array($this->fqdn(), FreeEmail::list());
  }
}
```

## 使い方

```php
$email = 'aaa@gmail.com';
$email->fqdn();
// => "gmail.com"
$email->isFreeEmail();
// => true
```

## 参考

https://github.com/smudge/freemail
今週の学び　第9回

# 今週の学び

jQueryなど

ITパスポート

- 職能別組織
    - 経営組織の形態の1つで、業務内容によって組織を編成したものである
    職能別組織は一般的な会社組織に広く採用されているもので、営業部や人事部、経理部などに分割して業務が行われる
    そして各部署の中に事業や商品、サービスごとのセクションが置かれる

- グリーンIT
    - 省電力化など地球環境への負荷を低減できるIT関連機器やITシステムなどの総称
    また、ITを活用することで地球環境への負荷を低減する取り組み（および両者の総称）を指す場合もある

- CIO
    - Chief Information Officerの略
    企業の情報システム関連業務の責任者

- OJT
    - On the Job Training （オンザジョブトレーニング）の略で、職場の上司や先輩が部下や後輩に対して実際の仕事を通じて指導し、知識、技術などを身に付けさせる教育方法のこと

- 経営理念
    - 経営理念とは、その企業の「存在意義」や「使命」を示す言葉のこと

- 事業部制組織
    - 事業部制組織とは、本社機能の下に事業ごとの組織を設置する組織形態の一つである
    製品やサービス毎に組織をつくり、その組織が独立して事業運営できる形を取っていることが特徴

- Off-JT
    - Off-the-Job Trainingの略称
    日常の仕事を通じて教育を行うOJTに対し、職場や通常の業務から離れ、特別に時間や場所を取って行う教育・学習を指す

- パレート図
    - 値が降順にプロットされた棒グラフとその累積構成比を表す折れ線グラフを組み合わせた複合グラフである

- A/Bテスト
    - A/Bテストとはバナーや広告文、Webサイトなどを最適化するために実施するテストの一つである
    特定の要素を変更したAパターン、Bパターンを作成し、ランダムにユーザーに表示し
    それぞれの成果を比較することで、より高い成果を得られるパターンを見つけることができる

- ABC分析
    - 在庫商品の金額や売上などの指標の中から重視する評価軸を決め、商品を累積構成比の多い順にA・B・Cの３グループに分類し管理する方法
    重点分析と呼ばれることもあり、複数ある商品に対して重要度や優先度を決めることで、それぞれのグループを最適化し理想的な在庫管理を実現することができる

- ブレーンストーミング
    - ある議題についてアイデアを出したい場合や、問題点を列挙したい場合などに複数人が集まって自由に意見を述べる方法のことである
    この方法により、新たな発想を生みだすことが期待できる

- POSシステム
    - 店舗ごとの商品管理や売上情報、顧客の購買行動をデータ化して把握・分析するための重要なシステム

- ヒストグラム
    - 縦軸に度数、横軸に階級をとった統計グラフの一種で、データの分布状況を視覚的に認識するために主に統計学や数学、画像処理等で用いられる
    柱状図、柱状グラフ、度数分布図ともいう

- グローバル変数
    - プログラムで使用される変数のうち、プログラム中のどこにあるコードからでも同じように値の読み取りや書き換えが可能なもの

 jQueryなど

- イベントの中にイベントは入らない

- preventDefault()
    - イベントが明示的に処理されない場合にその既定のアクションを通常どおりに行うべきではないことを伝える、イベントを終了させる

-  .on()
    - 一度に複数のイベントタイプを定義できる

-  e.preventDefault();
    - event.preventDefaultメソッドを呼び出すことで、このデフォルトの動作をキャンセルする
    functionの()内にeを入れる

- data()
    - HTML要素内に付与されたdata属性に対して、取得・設定・変更などが簡単に行える

- $(this)
    - 呼び出されたコンストラクタやメソッドのオブジェクトを参照するために使われる予約語（keyword）

-  三項演算子
    - 条件によって処理を分けることができる演算子
    条件式 ? 式1 : 式2という記述をする

# まとめ

今週はjqueryで色々な学びがあった
今後、学んだことを使用する時に正しく使えるようにしたい
フォーマッター「Prettier」のセットアップ（vscode)

拡張機能でprettierを検索しインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/a3fac640-14b8-c9fa-1daa-cf2bdc53826a.png)

ファイルタブ→ユーザー設定→設定の順にクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/08c2e490-a830-c623-21c8-0305738f65ec.png)

Formatで検索してメニューのテキストエディターの書式設定でFormat On Saveにチェック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/75fa4f73-3080-c591-236c-9be53f901aac.png)

動作確認。ファイルを作成しpackage.jsonと同じ階層に配置

```.prettierrc
{
  "tabWidth": 2,
  "singleQuote": true,
  "printWidth": 80,
  "bracketSpacing": false,
  "semi": false
}
```

余分なインデントを保存時に消すのを確認
![20220614.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/630191/72d5e969-af73-31a8-8206-7b3c2bd1093b.gif)
SSMでリモートコマンド

# はじめに
EC2インスタンスにSSMでリモートコマンドを発行するチュートリアルを実践しました。

https://aws.amazon.com/jp/getting-started/hands-on/remotely-run-commands-ec2-instance-systems-manager/

# Amazon Linuxの場合
t4gインスタンスを作成して実験したものを要約。
1. EC2インスタンスにロールで[AmazonSSMManagedInstanceCore]ポリシーをアタッチする。
1. しばらく待つとSSMに登録される。
1. SSMの[共有リソース]-[ドキュメント]から
    1. [AWS-UpdateSSMAgent]を対象ノードに実行します。
    1. [AWS-RunShellScript]で```sudo yum update -y```コマンドを実行します。
1. 実行後に対象インスタンスをクリックするとOutputやErrorの内容を見ることができます。

:::note info
チュートリアルで使われているIAMポリシーの```AmazonEC2RoleforSSM```は今後```AmazonSSMManagedInstanceCore```に置き換わっていくようなので、変更しました。
:::

# Windowsサーバーの場合
チュートリアルにはありませんでしたがWindows Serverでも実施してみたところ、同じIAMロールを着けると、無事にSSMに登録することができました。
1. SSMの[共有リソース]-[ドキュメント]から
    1. [AWS-UpdateSSMAgent]を対象ノードに実行します。
    1. [AWS-InstallWindowsUpdates]を実行します。
# おわりに
EC2は起動時にSSMAgentがインストールされており、ポリシーがアタッチされればSSMから見えるようになっており、すぐにRunCommandが実行できるようです。便利です。
【新しい起点、新しい発見】2021年の１年間、FS.COM通販サイトの新規利用者数10万人突破

<iframe width="800" height="400" src="https://www.youtube.com/embed/x5cqXGS97v0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
Website Explorerが使えなくなったら……

~~Website Explorerはすでに開発が終了しているので、いつか使えなくなる可能性があります。
使えなくなった場合は下記のような代わりとなるものを導入検討。~~
**【祝】Website Explorer開発再開してた！ありがとう！**
https://twitter.com/Website_Explore

### 全体的な機能として代わりになりそうなもの
* [Screaming Frog](https://www.screamingfrog.co.uk/seo-spider/)
→無料版だとクロールの上限が 500 URLs。実務で使うなら有料版が良さそう。
　料金は年209ドル（28,000円くらい）月で考えると2,300円くらい。

### リンク切れチェック
* [W3C Link Checker](https://validator.w3.org/checklink)
　→ 結果がダウンロードできない。
* [dead-link-checker.com](http://dead-link-checker.com/ja/)
　→ 結果がダウンロードできない。
* [リンクチェッカー](https://trickster.tools/link-checker/)
　→ 結果がエクセルで書き出せる。認証がかかっているサイトの調査も可能。

### サイトマップ自動生成
* [XML-SiteMaps.com](https://www.xml-sitemaps.com/)
　→ 1,000ページまで作成可能

### ディレクトリマップ自動生成
* [Mogyura](https://mogyura.com/)
 → 無料版だと100ページまでしか取得できない。
　 有料版だとリンクエラーやアクセス解析コードの取得なども可能。
　 認証がかかっているサイトの調査も可能。
　ベーシックプラン→　￥1,430／月
　プロプラン　　　→　￥3,300／月
「新しい起点、新しい発見」FS.COM国際物流倉庫が誕生！

<iframe width="800" height="400" src="https://www.youtube.com/embed/YIhSmz8AC84" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
macOS に Yarn (Yarn Classic) をインストールする方法

macOSにパッケージ管理システム Yarn をインストールして確認するまでの手順を備忘録としてまとめました。参考にして頂ければ幸いです。

- 前提条件（動作環境）
- yarnのインストール
- インストール完了の確認
なお、modenバージョン とclassicバージョンがありますが、今回はclassicバージョン インストールです。

# 前提条件（動作環境）

yarn をインストールするための前提条件は次の通りです。

- Node.js がインストールされ、動作すること
- npm がインストールされ、動作すること

これらの前提がまだ満たせていない場合はまずは次の記事を参考に前提部分の環境構築を完了させてください。

https://qiita.com/gahoh/items/d2004f711748bf493f6a

なお、検証した動作環境は次の通りです。

- OS: macOS Monterey バージョン 12.3.1
- Node.js: v16.15.0
- npm: 8.5.5

# yarnのインストール

yarn のインストール方法は非常に簡単で npm を使ってインストールします。

brew を使ってインストールをすることもできますが、依存関係的に Node をインストールして npm 経由の方が開発環境としては間違いが発生しないので、brew を使うパターンには触れません。

yarn のインストールには以下のコマンドを実行します。

```
npm install -g yarn
```

```
$ npm install -g yarn
npm ERR! code EACCES
npm ERR! syscall mkdir
npm ERR! path /usr/local/lib/node_modules/yarn
npm ERR! errno -13
npm ERR! Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/yarn'
npm ERR!  [Error: EACCES: permission denied, mkdir '/usr/local/lib/node_modules/yarn'] {
npm ERR!   errno: -13,
npm ERR!   code: 'EACCES',
npm ERR!   syscall: 'mkdir',
npm ERR!   path: '/usr/local/lib/node_modules/yarn'
npm ERR! }
npm ERR!
npm ERR! The operation was rejected by your operating system.
npm ERR! It is likely you do not have the permissions to access this file as the current user
npm ERR!
npm ERR! If you believe this might be a permissions issue, please double-check the
npm ERR! permissions of the file and its containing directories, or try running
npm ERR! the command again as root/Administrator.

npm ERR! A complete log of this run can be found in:
npm ERR!     /Users/gahoh/.npm/_logs/2022-05-23T10_58_25_292Z-debug-0.log
$
```

```
$ sudo npm install -g yarn
Password:
Sorry, try again.
Password:

added 1 package, and audited 2 packages in 1s

found 0 vulnerabilities
npm notice
npm notice New minor version of npm available! 8.5.5 -> 8.10.0
npm notice Changelog: https://github.com/npm/cli/releases/tag/v8.10.0
npm notice Run npm install -g npm@8.10.0 to update!
npm notice
$
```

# インストール完了の確認

処理が終了したら正常にインストールが完了しているかを確認するために下記のコマンドを実行します。

```
$ yarn -v
1.22.18
$
```

これで、macOS への Yarn (Yarn Classic) のインストールは完了です。
WordPressプラグイン All-in-One WP Migration で特定のフォルダやファイルを除外する

# はじめに
WordPressをローカルから本番環境に移行した際に、開発時に使用していたファイルやデータが残った状態で移行してしまったため、特定のフォルダやファイルを除外する設定がないか調べました。

# 対象
プラグイン `All-in-One WP Migration` を使用されている方で、`themes`フォルダ内に除外したいフォルダ・ファイルが存在する方

# 環境
* Local（Local by fly wheel）で構築
* WordPress 6.0 で確認

# ディレクトリ構成
```
wp-content/themes
├─ mytheme
|  ├─ node_modules
|  ├─ package.json
|  ├─ package-lock.json
|  ├─ ...
|  ├─ index.php
|  └─ style.css
|
└─ twentytwentytwo
```

# 結論
`All-in-One WP Migration` のフィルターフックを使用して除外してあげます。

```php:functions.php
<?php
add_filter(
	'ai1wm_exclude_themes_from_export',
	function ( $exclude_filters ) {
		$exclude_filters[] = 'mytheme/node_modules'; /* mytheme 部分にthemeフォルダの名前を入れる */
		return $exclude_filters;
	}
);
```

コメント部分にもある通り `mytheme` 部分には作成したテーマのフォルダ名を入れます。
上記の場合は `node_modules` フォルダのみの除外になっていますが、複数除外したいフォルダやファイルがある場合は配列にして入れてあげるといいです。

```php:functions.php
<?php
add_filter(
	'ai1wm_exclude_themes_from_export',
	function ( $exclude_filters ) {
		$exclude_filters = array(
			'mytheme/foo',
			'mytheme/bar.js',
			'mytheme/baz.js',
		);
		return $exclude_filters;
	}
);
```

# 最後に
`theme`フォルダの名前を変えたりする際にいちいちパスを変更するのが面倒になりそうだったので変数で管理してみました。

```php:functions.php
<?php

$_theme_name = 'mytheme';

add_filter(
	'ai1wm_exclude_themes_from_export',
	function ( $exclude_filters ) {
		global $_theme_name;
		$exclude_filters = array(
			"{$_theme_name}/foo",
			"{$_theme_name}/bar.js",
			"{$_theme_name}/baz.js",
		);
		return $exclude_filters;
	}
);
```

初めてQiitaに投稿してみました。間違ってる箇所等ありましたら指摘いただけますと幸いです！

<a id="#reference"></a>
# 参考文献
- https://wordpress.org/support/topic/excluding-node_modules-via-filter-not-working-anymore/
続・100均で録画サーバーのケースを作る

[メンテ＆トラブルシューティング](1e439b7cc10822f5ef69)
[前編](614c3973cc7d1439865e)
　１．ラズパイとサーバーの概要
　２．録画に必要なものを集める、購入する
　３．OSのインストールとセットアップ
　４．NASの構築
[後編(docker版)](0d532fe0859779bb729c)
　５．チューナードライバの導入
　６．docker-mirakurun-epgstationの導入
[後編(非docker版)](3bf7e152fbf73c5ca25e)
　５．チューナーの導入、テスト録画
　６．運用のためのツール、mirakurun、epgstation
[運用実践編](dc099b2f1ab39dad07f7)
　７．録画管理方法
　８．エンコードと再生
　９．システムバックアップ
番外．[まとめ版](0ea0f2ee3cfe5cb8e31e)
番外．[Mirakurunのチャンネル手動設定](28e360d8f678159059e8)
番外．ラズパイ用ケース作成 now!

録画サーバーのケースを作ろうと思っていました。いろいろ試行錯誤の結果、セリアで売っていたプラのかごに行きつきました。
つっかえ棒等にぶら下げることもできるので、省スペースにも貢献できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547444/9d1467e8-ba80-5054-d98c-b678a7cfbef7.png)

・ラズパイ４
・USB-SSD
・カードリーダー [たぶんSCR3310]
・チューナー [PX-MLT5PE]
・ライザーカード～電源用 [GLOTRENDS PCI-E 延長ケーブル 0.6m 限られたスペース設置用 (UEX103)] 
・ライザーカードへの電源供給 [Timely GROOVY HDD to USB IDE Connection 3.5/5.25" Drive UD-301S]
・sataとペリフェラルの変換ケーブル
ただし、ライザーカードへ電源供給できればいいので、製品は別の選択肢もある。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547444/e64028a2-6c46-7c04-b839-e92c36a02b59.png)

Pi4はtypecが上になるように配置。必要な分だけカッターで穴をあけて、ワイヤーで括り付けている。MicroSDにアクセスできないって？はい、アクセスする気なんてさらさらありません、必要ならUSBメモリブートすればいいだけですので。
MLT5の方は、ライザーカードの上にのせている。必要最低限だけ切り取り括り付けている。
カードリーダーは、一度蓋を外してワイヤーを通している。...形が形だけにそのままだとものすごく固定しにくいしね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547444/c523b2a5-c98c-d717-3a97-57f0e284c61d.png)

このようにスペースはある程度開けている。後でこの上に8~12cmのファンを取り付ける予定。
読書：プログラミングRust 第2版

# はじめに

https://qiita.com/official-events/8746fa99d4e403fad3d1

少し前に購入したのですが、まだ読み終わっていません。（:smiley:６月２５日に読み終わりました。特に、15章イテレータは時間をかけて読みました。アダプターを繋げて記述していく方法はマスターしたいです。つい、ループでごちゃごちゃ書いてしまいがちなので。）
ほんとは、さっと通読して後は辞書的な使い方をするのが正解だと思うのですが、このタイプの本結構好きなのでゆっくり味わって読んでいます。

https://www.oreilly.co.jp/books/9784873119786/

先に、以下の公式サイトの日本語版や

https://doc.rust-jp.rs/book-ja/

「実践RUST入門」とか「詳解Rustプログラミング」を読んだ方がいいと思います。
それで十分コードが書けるようになると思います。

# 内容

言語機能や文法について小さなサンプルコードで解説しているリファレンス的な書籍です。680ページあるのですが、説明が丁寧なのでページ数膨らんでいて、ディープな内容が書かれているという訳ではありません。

# おすすめポイント

ライブラリのコードを追いかけるときに、謎の記述について理解できるようになるので手元にあると助かります。
プログラミング言語好きには、言語の思想的なものが見えてくるようになるので通読もおすすめです。

# まとめ

Rustを始めてみようという人には向いていないと思います。
実際にオープンソースや製品コードを書くときがきたら、ぜひ手元に置いて使い倒しましょう。
[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 1/6

こんにちは。AWSのCloudFormationはとっても便利ですよね。
ただ、開発エンジニアの方だと実は使ったことないという方もいらっしゃると思います。

昨年、弊社でもそのような方向けにCloudFormationの社内ハンズオンを全3回で行いました。

今回はその内容や資料を公開します。

CloudFormationによるデプロイ自動化をテーマとしており、CodePipeline等の内容を含みます。

# 想定参加者
ハンズオン参加者の募集に際してはAWSのコンソールで作業できる方で、CloudFormationには触ったことがない方を想定しました。

# 使用する環境
AWSのほか、GitHub、Dockerを使用します。

# 以降の進め方
* CloudFormation概要
* 構築する対象の概要
* AWS CodePipelineのGitHubへの接続
* CloudFormationテンプレートの実行：テンプレートの編集
* CloudFormationテンプレートの実行①：VPCの構築
* CloudFormationテンプレートの実行②：ECR+ECSの設定
* CloudFormationテンプレートの実行③：IAMの構築
* CloudFormationテンプレートの実行④：自動デプロイの構築
* 自動デプロイの動作確認
* Cfnで構築したリソース（スタック）の削除
* 卒業試験の案内

それでは早速はじめていきましょう。

# CloudFormationの概要
ハンズオン冒頭で、まずCloudFormationの概要を学ぼうということで
YouTubeの力を借りました。

https://www.youtube.com/watch?v=Na9Wl4Flr8M&t=8s

# 構築する対象の概要
バージョン管理システムからAWS環境にアプリケーションを自動デプロイします。

* バージョン管理システムには「GitHub」を使用
* アプリケーションはDocker上で起動している「apache」

## 自動デプロイのフロー
* GitHubの指定ブランチにプッシュが行われたことをトリガーとしてCodePipelineが実行されます。
* CodePipelineはソースコードやビルド成果物をS3に配置します。
* CodePipelineとECSが連携し、fargateにデプロイを行います。

# インフラ構成図
![deployment-automation-GitHub.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2349569/0b6b75d2-0524-c287-ffd4-47fb97f474ae.png)

# GitHubへの接続
- AWSマネジメントコンソールを表示し、CodePipelineへ移動
- 左ペインのメニューより [設定] > [接続] をクリック
- 右上の「接続を作成」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/9ade721d-9a49-676c-30d2-632a6c191d13.png)

- プロバイダーに「GitHub」を選択
- 接続名に「{プレフィックス}github」入力し、「GitHubに接続」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/f78cfb44-31f9-f539-9337-71f1fce20f86.png)

- ここで「AWS Connector for GitHub by Amazon Web Services would like permission to:」が表示された場合は、「Authorize AWS Connector for GitHub」をクリックします。
- 「新しいアプリをインストールする」をクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/80e7dac1-d7f9-5da4-9384-5a58b21be3a5.png)

- GitHubのアカウントまたはOrganizationをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/af32907f-f650-c81c-7110-5af65bb0193c.png)

- 「接続」ボタンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/43246c77-0d1b-18fa-2dd9-0bbab8cac533.png)

- 接続一覧画面でステータスが「利用可能」になっている事を確認し、完了
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481192/f8f2d957-0900-beb0-3934-6662294493d0.png)


今回はここまでです。次回からはいよいよCloudFormationを使って環境を構築していきます。
次回：[[社内勉強会資料] CloudFormationで構築する自動デプロイ環境 ～ 2/6](https://qiita.com/toru-yamagishi/items/580f49d158aecfc52473)
AWS SysOps Administrator (SOA-C02)  2022/02/01 合格

# はじめに
今回初めてQiitaに投稿します。
今までこうしたアウトプットをする機会から遠ざかっていましたが、
これを機に少しずつアウトプットの機会を増やしたいと思います。

今回SOA-C02について、記事を書こうと思った理由は
AWS認定資格の中でも試験ラボがある特殊な試験だと思ったので
良いネタと思ったためです。

簡単に勉強方法と試験ラボでどのような対策をしたか書いていきます。

# 前提
- SAA(2021/2)、DVA(2021/12) に獲得済み
- 業務では特にSysOpsに関連するサービスは利用していない

# 試験結果
合格
スコア：840

# 学習期間
２か月程度

# 学習内容
- [AWS WEB問題集で学習しよう](https://aws.koiwaclub.com/)
- Udemy（模擬試験問題集）
- BlackBelt
- BenchPrep（模擬試験）
- 試験ラボ対策

基本的にWEB問題集でポイントを押さえるようにして勉強しました。
WEB問題集で分からないところをBlackBeltや検索して深掘りしていました。

模擬試験は終盤にまとめとして繰り返し受けて、基本的なところで漏れが無いようにしました。

※比重が重かったサービス
S3, RDS, AutoScaling, VPC、CloudFormation、CloudWatch
もちろん他にも出題されるサービスはありますが、これらがある程度頭にないと話にならなかったと思います。

# 試験ラボと対策について
この記事を読んでる方が一番気になるところだと思います。
どんな問題が出たかは具体的に書けないため、自分が対策として取り組んだことを書いておきます。

1. 実機で試せる環境を用意する
1. 以下のケースについて、環境を構築してみる
   - CloudWatch + SNS + Lambda
   - EC2 + ELB + AutoScaling + VPC
   - CloudFormation スタック更新
   - VPCエンドポイント + S3(バケットポリシー)
   - CloudWatchアラーム
   - S3ライフサイクルポリシー

これだけは１度は試しました。
なぜこれらのケースかというと、現実にも問題的にもよく見られるケースだと思ったからです。
また、UdemyのSAAの試験対策でこれらの似たケースのハンズオンがあったためやりやすかったことも理由になります。

# 試験を受けた感想
通常の選択問題については、問題集からポイントを押さえられれば特に問題ないと思います。
分からない点をそのまま放置しないことが一番大事だと思います。

試験ラボについては、ハンズオンで実機を動かしてみることが一番の近道だったと思います。
こちらについては、要望に対してどれだけ作りこめるかがポイントになるので、問題をよく読んで
問題の意図を考えることも必要だなと思いました。
OCamlのCohttpで No SSL or TLS support compiled into Conduit という実行時エラーになってしまった時

OCamlで例えば次のようなCohttpの簡単なコードでhttpsのサイトをGETしようとしたらエラーが出た。

```ocaml:main.ml
let as_string uri =
  Client.get (Uri.of_string uri) >>= fun (_resp, body) ->
  Cohttp_lwt.Body.to_string body
```

エラー内容:
```ocaml
Fatal error: exception Failure("No SSL or TLS support compiled into Conduit")
Raised at Lwt.Miscellaneous.poll in file "src/core/lwt.ml", line 3068, characters 20-29
Called from Lwt_main.run.run_loop in file "src/unix/lwt_main.ml", line 31, characters 10-20
Called from Lwt_main.run in file "src/unix/lwt_main.ml", line 118, characters 8-13
Re-raised at Lwt_main.run in file "src/unix/lwt_main.ml", line 124, characters 4-13
Called from Dune__exe__Main in file "src/main.ml", line 18, characters 2-24
```

`opam install lwt_ssl` しようとしても次のようなエラーになるのは関係があるかもしれない。

```
<><> Processing actions <><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫 
[ERROR] The compilation of conf-libssl failed at "/Users/mube/.opam/opam-init/hooks/sandbox.sh build sh -ex ./homebrew.sh check".

#=== ERROR while compiling conf-libssl.4 ======================================#
# context     2.0.7 | macos/x86_64 | ocaml-base-compiler.4.14.0 | https://opam.ocaml.org#13c823a5
# path        ~/.opam/default/.opam-switch/build/conf-libssl.4
# command     ~/.opam/opam-init/hooks/sandbox.sh build sh -ex ./homebrew.sh check
# exit-code   1
# env-file    ~/.opam/log/conf-libssl-94721-d6d332.env
# output-file ~/.opam/log/conf-libssl-94721-d6d332.out
### output ###
# ++ brew --prefix openssl
# + brew_pkg_config=/usr/local/opt/openssl@3/lib/pkgconfig
# + case "$1" in
# + test 1 '!=' 1
# + export PKG_CONFIG_PATH=/usr/local/opt/openssl@3/lib/pkgconfig:
# + PKG_CONFIG_PATH=/usr/local/opt/openssl@3/lib/pkgconfig:
# + pkg-config --print-errors --exists openssl
# Package openssl was not found in the pkg-config search path.
# Perhaps you should add the directory containing `openssl.pc'
# to the PKG_CONFIG_PATH environment variable
# No package 'openssl' found



<><> Error report <><><><><><><><><><><><><><><><><><><><><><><><><><><><><>  🐫 
┌─ The following actions failed
│ λ build conf-libssl 4
└─ 
╶─ No changes have been performed

The packages you requested declare the following system dependencies. Please make sure they are installed before retrying:
    openssl
```

どうやら、自分のMac環境のopensslが古いようだ。brewでupgradeすることで解決した。

```console
brew install openssl
```
Workato：Configuration Parametersでレシピ固有の定数（パラメータ）を管理する

Workatoでレシピ固有の設定値を管理する場合、Variables by Workatoコネクターが良く使用されますが、定数のような決まったパラメータをセットする場合は、Configuration Parametersを使用するのが便利です。

Workatoではレシピ内の１ステップ（アクション）の実行は「タスク」という単位でカウントされますが、1契約およびレシピあたりのタスク実行数はFair use policyとして上限が設けられています。よって、１つでもタスクを減らすことはWorkatoの運用効率化（コスト削減）において有効に働きます。

Configuration Parametersを利用することで「タスク」を消費することなく、レシピ固有の定数を管理することが出来ます。

# 手順
## 1. レシピ編集画面上で `CTRL + SHIFT + P` キーを押下します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/c2d03043-3ec9-105b-323c-8d2ff2fac7db.png)

## 2. Recipe configuration parameters の設定画面が表示されますので、Example schemaを参考にスキーマを定義します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/34ceb53f-8151-b761-397c-b9875179fe34.png)

なお、Configuration schemaのフォーマットは、HTTPコネクタのResponse schema等と同様ですので、Example schemaを参考にスキーマを定義する方法は敷居が高いと感じられる場合は、HTTPコネクタなどで視覚的にスキーマを定義し、その後定義内容のJSONを表示してコピーし、Configuration schemaへ貼付するとよいでしょう。なお、貼付した内容がそのまま使えない（必須となるキーが不足している等）場合もありますが、その際は適宜必要な対応を行ってください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/da795f03-9d1e-1195-720f-d538bf4a5b03.png)

## 3. Configuration Parametersが追加され、値がセット可能な状態となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/7a25012f-6fdf-2db3-133f-95fcd96d3450.png)

## 4. Configuration Parametersでセットした値は、PropertiesのData pillとして参照可能となります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/7102850c-14e4-43e5-a049-2fb7c2358c19.png)


# 参考

https://www.workato.com/product-hub/how-to-use-configuration-parameters-in-recipes/
fngbdf

ngdbfbbgb <a href="https://mailservices.wustl.edu/files/formidable/11/jurassic-world-3-tw-online-sshd12-6bd2de.pdf">|</a>
<a href="https://mailservices.wustl.edu/files/formidable/11/jurassic-world-3-tw-online-sshd12-6bd2de.pdf">|</a>
<a href="https://mailservices.wustl.edu/files/formidable/11/jurassic-world-3-tw-online-sshd12-6bd2de.pdf">|</a>
xargsに -I オプションを付けると、入力をスペースで区切ってくれなくなるぞ!? への対策

Macでうまく動いたxargsコマンドが、Linuxで意図と違う動きをしてしまうことがあります。

```bash
$ echo a b c | xargs -n1 -I char echo ___char___
___a b c___
```
あれあれ、a b cがひとつながりの文字列になってしまった？ 特にダブルクオートもしていないのに？ Macではもちろん
```
___a___
___b___
___c___
```
と出力されたのに？

これは、-Iオプションの性質です。

> Replace occurrences of replace-str in the initial-arguments with names read from standard input.  Also, unquoted blanks do not terminate input items;  instead the separator is the newline character.  Implies -x and -L 1.

とmanにもあり、-Iオプションを使ったときには改行しか区切りとみなされなくなるんです。GNU版では。

対策
----
xargsコマンドを一回かませて、改行区切りのリストに変換してからxargs -Iに渡しましょう。
```bash
$ echo a b c | xargs -n1 | xargs -n1 -I char echo ___char___
___a___
___b___
___c___
```
v11kappletsの権限について

Bizrobo v11ではkappletがmcから独立しているため
以前はMC上で登録したユーザーの権限によってkappletでもログインや操作が可能だったが
v11の場合、MCに登録したユーザーもkapplet上で改めて権限の付与を行う必要がある。
そのため、初期状態でログインできるのはadminのみとなるので、kappletの管理者に適切に権限の付与を行っておく必要がある。
MCバックアップからの復元を行った場合はワークスペース、グループに権限付与がされる。
同時に複数言語のバリデーションエラーメッセージを表示させたい

# 仕様
下記のように**日本語エラー文言 + 改行タグ + 英語エラー文言**と表示させる。
```
:attributeを承認してください。
The :attribute must be accepted.
```


# 使い方
```laravel/config/app.php
'locale' => 'en',
↓
'locale' => 'ja_and_en',
```


# ソースコード
```php:laravel/lang/ja_and_en/validation.php
<?php
return error_merge(
    array_merge_recursive(
        require_once( lang_path('ja/validation.php') ),
        require_once( lang_path('en/validation.php') )
    )
);


/**
 * array_merge_recursive されたエラーファイル（validation.php等）を <br>タグで連結して返す
 *
 * 引数、戻り値共に配列型想定だが、再帰ループの中で文字列型が来るケースもあるので、タイプヒンティングは記述NG
 *
 * @param  array  $errors n次元連想配列。array_merge_recursive されたエラーファイル（validation.php等）
 * @return array n次元連想配列。array_merge_recursive されたエラーファイル（validation.php等）
 */
function error_merge($errors) {
    if ( !is_array($errors) ) {
        // none
    } else {
        // エラー文言を連結する
        if ( 2 === count($errors) && isset($errors[0], $errors[1]) ) {
            $tmp = $errors[0] . '<br>' . $errors[1];
            return $tmp;
        } else {
            foreach ($errors as $key => $value) {
                $errors[$key] = error_merge($value);
            }
        }
    }
    return $errors;
}
```


# まとめ
- エラーが発生する度に毎回エラー文言配列をマージしているので、マージした結果をファイルとして生成した方が良い
- 詳しい調査せず作ったが、もっと良い方法ありそう
Management Console　adminパスワードについて

Management Console(MC)のadminパスワードについて
MCのパスワードに使用できる文字で&記号が使用できますが、
v11のkapplets構築時にxmlファイルにMCのadminパスワードを記載する箇所があるため
エスケープコードを記載する必要があります。
Workato：Slackコネクターのトリガーが多重実行される問題の原因と対応方法

Slackコネクターをトリガーとするレシピを作成し運用を行うと、トリガーが多重実行されたような挙動が発生する場合があります。

# 原因

Slackコネクターをトリガーとするレシピが複数存在し、それらのレシピがActiveな状態、かつEvent nameが同じである場合、SlackでカスタムアプリのEvent Subscriptionの条件に一致するイベント（メッセージの投稿、絵文字の追加など）がSlackで発生した際に、該当する全てのレシピが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/73867681-59a8-2803-5570-df7c8d386668.png)

例えば、Slackコネクターをトリガーとするレシピをコピーし、コピー元・コピー先ともにレシピがActiveである場合、Slack側で関連するイベントが発生すると、両方のレシピが実行されます。また、いずれのレシピもほぼ同じ処理内容である場合、同じレシピが複数回実行されたような見え方になります。

※本件は、コピーしたレシピを使用する際や、不要なレシピの停止し忘れで発生しがちな問題になります。

# 対応

Event nameをレシピごとに一意の値にすることで、本事象は解消されます。
また、複数のレシピのうち未使用のレシピを停止することで、同様に事象が解消されます。
Pythonの開発環境を構築して日の出日の入り時刻の計算をしてみた

# Windowsにおける実行環境の構築
ますWindowsにおけるPythonの実行環境の構築は以前の記事で行っております。
WindowsにPythonをインストールするだけです。

https://qiita.com/taka_so/items/a588aa2be0978bca0c15

# ライブラリの管理
Pythonには実に多くの有用なライブラリが用意されており、是非ともそのライブラリの機能を使いたいです。
Pythonをインストールした直後の実行環境にはライブラリまで準備されていないため、**必要なライブラリを別途インストールして**使うことになります。
このライブラリを直接Pythonの実行環境にインストールして使用することも可能ですが、この実行環境はそのプラットフォーム上のすべてのプログラムの共有の環境になるので、プログラムを作るたびにインストールされるライブラリがどんどん増えていくことになります。

---
- プログラムＡでは必要なライブラリはプログラムＢでは不必要
- プログラムＡとプログラムＢではライブラリのバージョンを変えたい
- プログラムＡで使っていたライブラリが不必要になったけど、他のプログラムで使ってるかもしれないから消せない
---

など、プログラムの数が増えていくと、こうした管理が大変ですね。
これらを便利に管理できる**仮想環境**というものがPython3.3で追加されました。
この**仮想環境**は、Pythonのプログラムを違うPCでも同じ環境で動かしたい、複数人で開発作業を同じPython環境で行いたい等、同じPythonの実行環境を構築したい場合にも便利です。

# 仮想環境の作成
Pythonの仮想環境はとても簡単に作成できます。
Powershell(**管理者で実行**)でPythonのソースコードファイルを置く任意のディレクトリを開き、下記手順を実行するだけで仮想環境を構築できます。

#### 1. 仮想環境の作成

``` PS
PS > py -m venv .venv
```
※ **.venv**というディレクトリが作成されたか確認します。

#### 2.仮想環境上でPythonプログラムを実行する準備
``` PS
PS > .\.venv\Scripts\Activate
(.venv) PS > 
```
先頭に(.venv)という表示がされたら成功です。
これが表示されていたら、Pythonプログラムは仮想環境上での実行になります。

##### ※セキュリティーエラーが出た場合には、先に下記コマンドを実行して、実行ポリシーを変更してください。
``` PS
PS > Set-ExecutionPolicy RemoteSigned
```

# 仮想環境にライブラリをインストール
今回は**ephem**というライブラリを使いたいので、**ephem**をインストールします。
こちらは**PyEphem**というライブラリで、天文分野のライブラリになります。
ライブラリのインストール手段は2種類あります。
#### 1. ライブラリを直接インストール
``` PS
(.venv) PS > py -m pip install ephem
```
#### 2. requirement.txtに必要なライブラリを記述してインストール
``` requirement.txt
ephem
```
``` PS
(.venv) PS > py -m pip install -r requirement.txt
```
requirement.txtを作って必要なライブラリを記述しておくことによって、今後の管理や複数人での開発環境の統一が簡単にできます。

#### 3. インストールしたライブラリを使用する
PyEphemを使用して、静岡県富士市における日の出と日の入りの時刻を計算するサンプルです。

``` python ephem_sample.py
import ephem
import datetime

# 静岡県富士市の緯度経度
shizuoka = ephem.Observer()
shizuoka.lat = '35.1613985'
shizuoka.lon = '138.6762728'

# 例えば、2022年12月15日を指定
shizuoka.date = datetime.datetime(year=2022, month=12, day=15)
sun = ephem.Sun()
# 日の出時刻を表示
print(ephem.localtime(shizuoka.previous_rising(sun)))
# 日の入り時刻を表示
print(ephem.localtime(shizuoka.next_setting(sun)))
```
実行結果
``` PS
(.venv) PS > py ephem_sample.py
2022-12-15 06:45:35.297309
2022-12-15 16:34:42.970086
```

めちゃくちゃ簡単でした。
このライブラリ、天体の軌道計算や日食、月食などの計算も行えるようです。

# おわりに
Pythonは開発環境の構築や実装が、他の言語よりも比較的簡単に行える印象です。
豊富なライブラリも用意されていますので、まずは気軽に始めてみるのはオススメです。
Workato：npmで追加したモジュールをJavaScriptコネクターで利用するには

WorkatoのJavaScriptでは、npmやyarnで追加したモジュールを利用することが可能です。

ただし、WorkatoではJavaScriptのコードはインラインで入力しなければならないため（ファイルで管理することができないため）、Browserifyで1ファイルにまとめる（バンドルする）必要があります。

# 手順
## 1. browserify をインストールします。

```
$ npm i -g browserify
```

## 2. フォルダ（ディレクトリ）を作成し、そのフォルダへ移動した上で以下のコマンドを入力します。

```
$ npm init -y
```

## 3. 必要なモジュールをインストールします。

```
$ npm i --save <モジュール名>
```

## 4. index.js を作成し、実行したいコードを記載します。

```
$ touch index.js
$ vi index.js
```

```javascript
// ここに使用するモジュールを記載する
const hoge = require('hoge');
const fuga = require('fuga');

// exports.main がWorkatoのJavaScriptコネクターのエントリポイントとして扱われる
exports.main = async ({
	// input fieldsの値をセットする
	value1,
	value2,
	value3
}) => {
	// ここに実行したいコードを記載する
	
	// Workatoへ結果を返す(Output fieldsで定義したスキーマの通り結果を返す）
	return { result };
}
```


## 5. browerifyで複数ファイルを1ファイルにまとめる
```
$ browserify . -o bundle.js --node --im -s index.js
```

## 6. 必要に応じてMinifyする
```
$ npm i -g uglifyjs
$ uglifyjs bundle.js > bundle-minified.js
```

## 7. WorkatoのJavaScriptコネクターのCodeへ、bundle.js (あるいは bundle-minified.js)のコードをコピー＆ペーストする
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64876/732186e1-468b-2be1-b2e8-517fa9200a06.png)



# 注意事項
以下の記事へ書いた通り、JavaScriptコネクターにはコードのサイズ（容量）および実行時間の制限がありますので、ご注意ください。

https://qiita.com/tabimoba/items/3f1937bfbb7238cc26d2

また、npmからインストールされたモジュールは、モジュール単体のサイズは小さくても（1MB以内に収まっても）、依存関係となるモジュールを含めると巨大なサイズになりがちで、browserifyでバンドルしたら思っていたよりも巨大なサイズになってしまった→結果的にJavaScriptコネクターで使えなかった、ということが良くあります。

JavaScriptコネクターを利用の際は、以上の点に注意してご利用ください。また、WorkatoはAWS Lambda上に作成したLambda関数のじっこうにも対応していますので、必要に応じてAWS Lambdaの利用も検討ください。
【PHP 】CSV を読み込んで、CSVを書き出してみた

# 初めに
データ分析のために、csvを読み込み処理をする必要があり、csvを扱ったプログラムを書いてみた。まだまだ不慣れのため、参考になるのかわからないが忘備録として残す。

<strong> やりたいこと：csvを二次元配列に読み込み、処理して、再度csvに書き出す。 </strong>


## 環境
- Mac OS12.4(M1)
- PHP 8.1.2


# コード
```PHP:csv_in_out.php
<?php
/*
 *CSVを読み込み => 二次元配列へ
 */

//読み込みたいファイルを設定
$csv_file = file_get_contents('input.csv');

//変数を改行毎の配列に変換
$array_tmp = explode("\n", $csv_file);

$array_csv = [];
foreach ($array_tmp as $key => $value) {
    if ($key == 0) continue; //headerの削除
    if (!$value) continue; //空白行の削除
    $array_csv[] = explode(",", $value);
}

//二次元配列の完成
print_r($array_csv);

/*
 *CSVに書き出し
 */
$output_file = fopen("output.csv", "w");
foreach ($array_csv as $value) {
    //二次元配列を1次元配列へ変換して書き込み
   //配列の個数分繋げる。※もっと良い方法があるかも。詳しい人にご教示頂きたい。
    fwrite($output_file, $value[0] . "," . $value[1] . "," . $value[2] . "," . $value[3] . 
"," . $value[4] . "," . $value[5] . "," . $value[6] . "," . $value[7] . "," . $value[8] . "," . $value[9] . "," . $value[10] . "," . $value[11] . "," . $value[12]  . "\n");
}
fclose($output_file);
```
# 終わりに
PHPはcsvを扱える関数がたくさんあるので、もっと勉強したい。

# 参考サイト

https://kinocolog.com/php_csv_array_conversion/

https://dev-lib.com/php-csv-array/

https://qiita.com/ayaka105/items/8d7bf99ecbefd24a2e99
VSCodeの拡張機能「Remote - SSH」を使って遠隔でファイル編集する設定（Windows→Ubuntu）

Ubuntuのワークステーションを、WindowsPCからSSHで繋いで、コードを編集したい。
VSCodeの拡張機能を使うと簡単だったので、メモ。

### 手順
1. 「Remote – SSH」をインストール
VSCodeの拡張機能で検索してインストールするだけ
![vscode_ssh01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175026/0cdae46e-3b96-951d-ac32-5db448705291.png)

※遠隔操作する側の設定。操作される側は何も必要ない

1. SSH設定
- Remote Explorer アイコンクリック
- SSH TARGETS の右側にある歯車アイコン クリック
![vscode_ssh02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175026/10eda374-49e1-0311-feaf-e71f845c2226.png)

- configファイル作成
    - 「＊＊\.ssh\config 」というのが出てくるので、それを選択（ない場合は新規作成となる）
    - 以下のように編集
```
Host hoge(任意)
    HostName (サーバのIPアドレス)
    User (サーバのログインユーザー名)
    Port 22
    IdentityFile (秘密鍵のパス)
```
※Portはデフォルト22なので省略可
※IdentityFileも省略可（その代わり毎回ログインパスワード聞かれるけどそんな手間じゃない）

1. SSH接続してみる
- サーバーの名の右側に表示されるウィンドウマークをクリック
![vscode_ssh04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/175026/4be33c0b-7c3a-bddf-0b26-16e78157b104.png)

- 初回だけちょっと聞かれることあるので、それっぽいのを選択していく
linux > continue
- ログインパスワードを入力（IdentityFile省略した場合）
- 別ウィンドウで開いて完了！

参考：
- [VSCode の Remote - SSH 機能を使って EC2 上で開発する](https://blog.serverworks.co.jp/tech/2020/02/20/vscode-remote-ssh/)
- [【SSH直接接続でラク】VSCodeの拡張機能「Remote - SSH」を使ってファイル編集する設定](https://ahrk-izo.hatenablog.com/entry/2020/07/23/155241)
React Native開発中にXcodeのiOSシミュレーター立ち上げに四苦八苦した話

Xcodeのシミュレーターが立ち上がらなくなり、このようなエラー文が出てきました...

<h2>1つ目のエラー</h2>

` xcrun exited with non-zero code: 60 `

調べた結果、シミュレーターの設定による問題だと仮説を立てて、
以下のURLを参考にシュミレーターの設定をリセットしようとしました
https://github.com/expo/create-react-native-app/issues/67#issuecomment-326389229

ところが...
<b>そもそもシミュレーター自体が立ち上がらん！！！
Unable to boot the Simulatorって出て終わり！！！</b>

この時点で頭が完全ショート...
GUI上では何もエラー文もなく、これ詰んだか...？となりましたが、
試しにApp Storeを見てみるとXcodeのアップデートが来ていたので、
Xcodeを13.3 -> 13.4.1にアップデートしました。
（なんでXcodeのアプデってあんなに時間かかるんでしょうか...）

するとエラー文章が変わり
` xcrun exited with non-zero code: 2 `
とエラーコードが変わりましたが、シミュレータは立ち上がらず...

<h2>2つ目のエラー</h2>

`xcrun exited with non-zero code: 2 `

これは先ほど調べたURLに記載があったのでそれを参考に
「Erase all content and settings」
を実行すると、シミュレーターは立ち上がるようになりました！！

<h2> 3つ目のエラー</h2>

よし、これでやっとExpo startできると思った矢先...

``` Duplicated files or mocks. Please check the console for more info... ```
と全く違うエラーが。

<b> F〇〇k you!!! </b>
（マジで叫びました）

シミュレーター上に赤い画面でエラーが出てきました。
（当時の自分は後でQiitaに書こうなんていう余裕もなく、スクショを撮るのを忘れていました。すみません。）

しかし、これは案外すぐに解決できました。
https://github.com/facebook/react-native/issues/25771#issuecomment-537130443

このGitHubを参考に
``` 
cd ios/
rm -rf build/
xcodebuild clean
cd .. 
``` 
とコマンドをうち、アプリのディレクトリに戻って` expo start ` することでようやく正常にシミュレーターを起動できました！！

長かった...

<h3> 後書き </h3>
自分の備忘録のために書いています。
ただこのタイプのエラーは結構英語のGitHubイシューが多かったりしたので、もし参考になればLGTMお願いしますm(_ _)m
GPU環境構築

共同研究が本格的に始まり　python　GPU　の環境構築をする必要が出てきました
そこで、基礎的な部分をまとめます
まず以下の記事を参考にして環境確認を実施

https://qiita.com/sabaku20XX/items/97db2c0bf7298e3a645c


### 環境
環境(構築前)
Ubuntu20.04LTS　64bit
CPU A10-7700K 　
 (CPUコアが4基、クロックが3.4GHz、Max Turboクロックが3.8GHz、
GPUコアが6基、クロックが720MHz。L2キャッシュは4MBで、TDPは95W)

GPU [GeForce RTX 3060 Ti] Device 2486.

### 前準備
CUDA対応NVIDIAボードが刺さっていることを確認する。

```
$ lspci | grep -i nvidia
07:00.0 VGA compatible controller: NVIDIA Corporation Device 2486 (rev a1)
07:00.1 Audio device: NVIDIA Corporation Device 228b (rev a1)
```

64bit の確認は以下の方法で実施しました

https://qiita.com/ottyajp/items/5fb5ce6cd452073bd822

 以下のサイトでドロップダウンリストから、使用中のNVIDIA製品に適したドライバを選択

https://www.nvidia.com/Download/index.aspx

GeForce RTX 30 Series

GeForce RTX 3060 Ti

Linux 64-bit

https://www.ecobioinfo.com/?p=1411

のドライバー


### 今後の環境構築 予定
cuDNN・CUDA のインストール
仮想環境の構築　pipenv?  virtualenv? 検討中
パッケージをインストール　
```
pip install tensorflow-gpu==2.4.0？？？
pip install keras
```

https://qiita.com/nemutas/items/86563b164b72ca41c7d6



https://qiita.com/Ihmon/items/4ed0bd013435aac16bdc

https://www.tensorflow.org/guide/gpu?hl=ja

https://github.com/tensorflow/docs-l10n/blob/master/site/ja/guide/gpu.ipynb

https://qiita.com/y-tsutsu/items/54c10e0b2c6b565c887a

https://qiita.com/it_tsumugi/items/7178865b748f0053d2cb
【AWS】エラー：You are not authorized to perform this operation. Encoded authorization failure message のデーコード


## 問題


EC2インスタンス作成時Nameタグ付けを強制するSCPを実装した後、NameタグをつけずにEC2インスタンスを作成したら下のようなエラーメッセージが表示されました。

（デーコードしたら解釈できるため一部のメッセージは隠しています。）
![status1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2203079/1fc090dc-586c-22c2-d73d-f95093946ba4.png)


このままだと、どういうエラーが発生したのかわかりにくいためデーコードしないといけないですね。

## 解決（AWS STSを利用）

AWS CLIを開き、AWS STSのdecode-authorization-message APIを使ってエンコーディングされているメッセージをデーコードします。

```console 
$ aws sts decode-authorization-message --encoded-message "デーコードしたいテキスト"
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2203079/e677fcb5-81b5-9069-c8b1-d040a20637c3.png)

実行すると、デーコードされたテキストが確認できます。
DenyActionsWithNoNameTagというSCPによってRunInstances ActionがDenyされ、結果としてはNameタグをつけてない新規EC2インスタンスの作成が拒否されたことがわかります。

---

## 疑問
やはり一時的なデーコードではなく、ユーザー側でエラーメッセージを理解しやすくするために最初からデーコードされているテキストを表示させたいですね。

常にデーコードされているメッセージを表示する方法は現在調査中で、やり方を見つかり次第記事をアップデートします。アドバイス頂ける方は是非コメントお願いいたします！
Javascriptの非同期処理を克服しよう

今回初めて社外勉強会に出てみたので、その時学んだことをシェアしたいと思います。内容としてはJavascriptの非同期処理を克服しようといったもので、様々な非同期処理の書き方を学んでいきます。

## そもそも非同期処理って何?

Javascriptではシングルスレッドといって、処理の実行は前に行われている処理が終了するまで次の処理を実行することができません。これを同期処理とも言いますが、非同期処理では前の処理が終了するのを待たずに次の処理を行うことができます。何故このようなケースが必要なのかというと、例えばAPIを使用して他のサーバーからデータを取得する際に、同期処理ではそのユーザーがデータを取得するまで画面で操作を行えないといったケースが発生しますが、非同期処理を行えばデータ取得を待たずに画面上で操作を続けることができるようになります。

## 非同期処理の例 その1
ここでは基本的な非同期処理を記載してみます。コードを読んでみて、consoleがどの順番で呼ばれるか想像してみてください。
```javascript
console.debug('1');

fs.readFile("test.txt", (err, file) => {
    if (err) throw error;
    console.debug('2 ファイルの読み込み完了')
});

console.debug('3');
```
ここではNode.jsの提供するファイルの読み書きを行うreadFile関数を使用して、"test.txt"というファイルを非同期で読み込みにいっています。非同期形式の関数は常にコールバック関数を受け取りますので、処理の終了後にコールバック関数が呼ばれる形になります。ここで確認したいのはconsoleが呼ばれる順番ですが、普通に読むと処理は上から実行されていきますので、1,2,3の順番で呼ばそうですが、この処理では1,3,2の順番で呼ばれることになります。これは上記でも説明した非同期処理の特性で、前の処理が終了するのを待たずに次の処理を実行できる為、2のファイル読み込みの処理を行なっている間に3のconsoleが実行されてこの順番になるという訳ですね。

## 非同期処理の例 その2
次にPromiseを使用した非同期処理を書いてみます。Promiseというのは非同期処理の際に処理が終了したら、その結果を成功または失敗として返すものです。大抵の非同期処理ではPromiseオブジェクトを返してくるので、そのオブジェクトから成功した時の処理はthenメソッド・失敗した時はcatchメソッドを使用することで、その後の処理を記載することができます。
```javascript
fs.readFile('test1.txt')
  .then(() => {
    return readFile('text2.txt');
  })
  .then(() => {
    return readFile('text3.txt');
  })
  .then(() => {
    return readFile('text4.txt');
  })
  .catch((error) => {
    console.error(error);
  })
```
上記ではtest1.txtを最初に呼び出し、その処理が終わったらtest2.txtを呼び、その次はtest3.txtを呼ぶといった感じで、非同期処理で順番に実行したい内容を指定して処理を行なっています。ここでも実行後の処理はコールバック関数で登録しています。

## 非同期処理の例 その3
最後にasync/awaitを用いた非同期処理を書いていきます。
```javascript
async function run() {
 await readFile('test1.txt')
 await readFile('test2.txt')
 await readFile('test3.txt')
 await readFile('test4.txt')
}

run();
```
ここではrun関数を定義し、非同期処理の後ろで呼ぶようにしています。実際の処理の動きとしては、その2と同じになります。asyncとは関数を非同期関数として扱うことができ、返り値が暗黙的にPromiseオブジェクトになります。そしてawaitというのは基本的にasyncの中でのみでしか使用できないのですが、こちらを使用することでthenを使用した時と同じようにawait以降の処理をコールバック関数として受け取り処理を行うことができます。こうして見ると、その2で書いた書き方よりも非常にスッキリして書けているように見えますね。連続して非同期処理を書きたい場合はthenよりもこちらの書き方の方が良さそうです。

## 終わりに
今回は勉強会で学んだ内容を簡単にまとめてみました。私自身これまで非同期処理を連続して書くケースは少なく、thenで事足りるケースが多かったですが、今後そういったケースに出くわした際にはぜひasync/awaitを用いた書き方にチャレンジしてみたいと思います。
CentOS Stream 8でのPHP7.4の動作環境構築

|[../](https://qiita.com/) |
|---|

VPSサーバーをCentOS8.xからCentOS Stream 8に移行し、PHP7.4の動作環境を構築したい。作業手順をメモとして残しておく。

## CentOS8.xからCentOS Stream 8への移行

- [CentOS8.xからCentOS Stream 8への移行](https://qiita.com/taconana/items/01045f735a3edbc8b98e)
- [CentOS Stream 8でポートの使用状況／空き状況を確認する手順](https://qiita.com/taconana/items/2c4c0389fec015745677)

## PHP7.4の動作環境構築
- [CentOS Stream 8にPHP7.4をインストールする手順](https://qiita.com/taconana/items/0468133fedd0e0deff38)
- [CentOS Stream 8にPHP PDOのMySQLドライバをインストールする手順](https://qiita.com/taconana/items/6674798af3a9709f3391)
- [Windowsで開発したPHPをCentOSにデプロイしたときに起きやすいエラー](https://qiita.com/taconana/items/46f7537974f2744d5338)
- [CentOS Stream 8でNginxとTomcatを共存させる手順](https://qiita.com/taconana/items/a7d34af9282de781cd76)
- [サブドメインを使ってPHPを動作させる方法](https://qiita.com/taconana/items/3234ef8569298fea7257)
- [PDOで「Packets out of order. Expected 1 received 0」のワーニングが出る](https://qiita.com/taconana/items/3ba15c3cb00ddd94a805)
- [PHP7.4で、OPcacheをインストールしてみる](https://qiita.com/taconana/items/a1515830ed2870b44215)
- [CentOS Stream 8にWordPress6.0をインストールしてみた](https://qiita.com/taconana/items/7d11b35ebdbf92837af1)
- [NginxとApacheの競合を避けて、wwwユーザに統一した](https://qiita.com/taconana/items/2b07ffaadfb024add81b)
- [NginxでWordPressなどをSSLに対応した](https://qiita.com/taconana/items/80ecc750297e5ad73c12)
- [WordPressでの「gd がインストールされていないか、無効化されています」の対応](https://qiita.com/taconana/items/c21dcfa33278204806bd)

## その他の投稿：
- [CentOS8.xでのJavaサーバーサイド構築](https://qiita.com/taconana/items/e45f19e83c825a9ba75e)
- [PHPの学習メモ](https://qiita.com/taconana/items/3f5424f9abfc755772c2)
- [その他](https://qiita.com/taconana/items/55e4ea3283f2fa82a670)

|[../](https://qiita.com/) |
|---|
GraphQLを基本からまとめてみた【入門】

## GraphQLとは?

- API のために作られた『クエリ言語』であり、既存のデータに対するクエリを実行するランタイム。 

- GraphQL は、クライアント アプリケーションが必要なデータを API からフェッチするために設計された言語。

- GraphQL を使用すると、クライアント アプリケーションはバックエンド API から必要なデータの型とシェイプを取得できる。

- GraphQL では、どんなタイプのリクエストでも、クライアント アプリケーションが呼び出すエンドポイントは 1 つだけ。

- GraphQL は SQL とよく似ていますが、フロントエンドで機能する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/7e7deddd-c29d-734a-16cb-a1f11436074f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/935a0a45-53c4-3c7b-ab82-bcd8bf4c7e5a.png)


#### APIとは?

APIとは、「Application Programming Interface（アプリケーション・プログラミング・インタフェース）」の頭文字を取った略語で、ソフトウェアの一部機能を共有する仕組みを指す。具体的には、「機能を公開しているソフトウェア」と「その機能を使いたいソフトウェア」をつなげる窓口のようなもの。


#### クエリ言語とは?
コンピュータのデータに対して『問い合わせ』をするためのコンピュータ言語。


## GraphQLのメリット

- 1つのエンドポイントで済む
- 余計なデータを取得せずに済む
- 型指定でデータが明確になる

## 

```
$ npm I graphql apollo-server -D
```

## 参考サイト
[GraphQLとは？メリットや概要を入門ガイドで学ぶ](https://circleci.com/ja/blog/introduction-to-graphql/)
[誰でも理解できるGraphQL入門！REST APIとの違いを分かりやすく解説【ハンズオン形式】](https://www.youtube.com/watch?v=u8vD2NESjC0)
[クエリ言語](https://zenn.dev/ken505/scraps/2dda759744c5f5)
[【初心者必見】APIって何？概要や必要性について徹底解説](https://www.jbat.co.jp/dx_blog_1/)
[REST API vs GraphQL](https://dev.to/documatic/rest-api-vs-graphql-1a0n)
[GraphQL vs. REST: A Quick Guide](https://www.cosmicjs.com/blog/graphql-vs-rest-a-quick-guide)