OmniAICreator/Qiita-1.07M huggingface dataset:
【ルール説明・production】fqcn

こちらの記事は[Ansible lint Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ansible-lint) 25日目の記事になります。

今回はルール [fqcn](https://ansible-lint.readthedocs.io/rules/fqcn/) について説明します。

### fqcn

[fqcn](https://ansible-lint.readthedocs.io/rules/fqcn/) は Ansibleコンテンツで Action やモジュール等を利用する際 FQCN (fully-qualified collection names) で記述されているか検証します。

現在のところは`experimental`のため [fqcn](https://ansible-lint.readthedocs.io/rules/fqcn/) に違反していると警告が出力されエラーにはなりません。

[fqcn](https://ansible-lint.readthedocs.io/rules/fqcn/) は以下の３つの分類があります。

* fqcn[action]
* fqcn[action-core]
* fqcn[canonical]

### fqcn[action]

[Action プラグイン](https://docs.ansible.com/ansible/latest/plugins/action.html) が FQCN で記述されているか検証します。

#### 問題のあるコード

```ini:ansible.cfg
[defaults]
    # FQCN で記述されていない
    callbacks_enabled = profile_tasks 
```

#### 修正されたコード

```ini:ansible.cfg
[defaults]
    # FQCN で記述する
    callbacks_enabled =  ansible.posix.profile_tasks
```


### fqcn[action-core]

`ansible.legacy`コレクションおよび`ansible.builtin`コレクションが利用されている時に FQCN で記述されいるか検証します。

#### 問題のあるコード

```yaml
---
- name: Example playbook
  hosts: all
  tasks:
    - name: Create an SSH connection
      shell: ssh ssh_user@{{ ansible_ssh_host }} # <- FQCN で記述されていない
```

#### 修正されたコード

```yaml
---
- name: Example playbook (2nd solution)
  hosts: all
  tasks:
    - name: Create an SSH connection
      # FQCN で記述する
      ansible.builtin.shell: ssh ssh_user@{{ ansible_ssh_host }}
```

### fqcn[canonical]

Ansible の外部モジュールや外部コレクションで FQCN が正しく表記されているか検証します。

多くの Ansible コレクションではモジュール名やコレクション名が古い FQCN で記述されていても名前解決されます。しかしコレクションのバージョンが上がればそれまで機能していた名前解決の仕組みが削除される可能性もあるためコレクションのバージョンに合わせて FQCN も更新します。

注意点として`fqcn[canonical]`を有効にするには該当するコレクションがインストールされているか [Ansible Community Package](https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html) のインストールが必要になります。


#### 問題のあるコード

```yaml
---
- name: Example playbook
  hosts: all
  tasks:	
    - name: Get bucket keys
      amazon.aws.aws_s3: # <- Ansible 7.0.0 では amazon.aws.aws_s3 は削除されたが名前解決されるため動作する
        bucket: mamono210
        mode: list
      register: aws_s3_bucket_keys
```
#### 修正されたコード

```yaml
---
- name: Example playbook (2nd solution)
  hosts: all
  tasks:
    - name: Get bucket keys
      amazon.aws.s3_object: # <- amazon.aws.s3_object へ変更する
        bucket: mamono210
        mode: list
      register: aws_s3_bucket_keys
```

### 参考サイト

* [fqcn — Ansible Lint Documentation](https://ansible-lint.readthedocs.io/rules/fqcn/)
pythonでWeb系な企業に入るなら読んでて欲しい本4選とその理由

※新卒1年目の若造が書いた記事です。

皆さん、一回はこのような質問をしたことがありませんか？「勉強したいのですがどのような本がおすすめでしょうか？」
今回はWebエンジニアとして1年弱働いた筆者が読んでおいてよかった・入社する前に読んだほうがよかった・

ツイッターをふと見ていたらこのようなことがあったのでもちろん時間との相談で、筆者個人としては人と会話する時間や自分の別な趣味を楽しむことも己の人生や興味を広げるうえで不可欠だと思いますのでそこは相談でやってみてください。

https://twitter.com/m_morise/status/1606471166084124672?s=20&t=S9z10iMe6lu2mAhEkK-QjA

今回選定した本はすべて持ち運びに便利なB5版の書籍ですので電車の隙間時間などにスマホの代わりに広げてみるのはいかがでしょうか？

1. リーダブルコード
リーダブルコードをお勧めする理由はエンジニアの命名に関する慣習を知っていることでコードリーディング・コーディングレビュー双方で楽になるからです。例えばあまりにも一般的な名詞を使ってはいけないということを知っていればDBに`key`というカラム名を設計することを避けることができます。このように「そんなことある？？？」みたいなトラップを避けるうえでもリーダブルコードを読むことを強くお勧めします。

1. Python実践入門・みんなのPython
各言語の初心者向けの入門書を1冊通しておくと便利です。この本は「B5版等の持ち運びがしやすい本である」ことを強くお勧めします。なぜならば、隙間時間に少しずつ読み進めてSyntaxの復習をするのが目的であるからです。

1. C#/Javaの入門書
C#/Javaを選んだ理由ですが「オブジェクト指向の本が基本的にこの言語（の古い実装）を対象にしており、静的型の機能に依存しているため静的型についてのドメインなのか違うのかの判断に必要不可欠だから」です。また近年型の良さが見直されているため型の入門・型システムなしの言語の喜びと辛さを体感するうえでもC#やJavaを知っていて損はないでしょう。
1. Webを支える技術
業務でWebアプリケーションを作っていると内部外部問わずAPIを利用する機会が増えます。また、スキルアップのための個人開発をするうえでもAPIをたたくことや設計することによってできるようになる（コラボレーションしやすくなる）幅が大きく増えます。そのため、RestAPIの歴史や嬉しさについて1冊本を読んでおくことがおすすめです。

その他の本について選び方を強いて言うならば、オライリーの訳本や著者をGoogle検索し技術雑誌などの寄稿経験やQiita・Zennの記事などを読んでみてから買うと後悔の少ない本を読めるかなと思います。輪読会をやってみたいといって人に相談してみることもおすすめです。

ではよい年末年始の趣味プログラミング・読書ライフを
2022年10月上旬いいねをいただいたQiita(206)記事16

2022年１０月上旬　いいねをいただいた記事　16

2022 いいねをいただいた記事ランキング(O.K.版)  Calendar 2022
https://qiita.com/advent-calendar/2022/goods

#  Calendar 2022

今年企画した４つのAdvent Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Advent Calendar 2022
https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.
https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Calendar 2022
https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>
https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1

2022 いいねをいただいた記事ランキング(O.K.版) t Calendar 2022
https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16
https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.)Calendar 2022
https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。
https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

Calendar2022 報告
https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b

誤差の評価が苦手（専門分野以外）
https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
### 文書履歴(document history)
ver. 0.01 初稿 20221225
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
2022年10月下旬いいねをいただいたQiita(207)記事16

2022年１０月下旬　いいねをいただいた記事　16


2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/goods

#  Calendar 2022

今年企画した４つのAdvent Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Advent Calendar 2022
https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.
https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Calendar 2022
https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>
https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1

2022 いいねをいただいた記事ランキング(O.K.版) t Calendar 2022
https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16
https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.)Calendar 2022
https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。
https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

Calendar2022 報告
https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b

誤差の評価が苦手（専門分野以外）
https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f

 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞
### 文書履歴(document history)
ver. 0.01 初稿 20221225
### 最後までおよみいただきありがとうございました。
いいね　💚、フォローをお願いします。
#### Thank you very much for reading to the last sentence.
Please press the like icon 💚　and follow me for your happy life.
2022年１１月上旬　いいねをいただいた記事　16

2022年１１月上旬　いいねをいただいた記事　16

2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/goods

# Advent Calendar 2022

今年企画した４つのAdvent Calendarと、それぞれの記事一つをご紹介します。

AUTOSAR Advent Calendar 2022

https://qiita.com/advent-calendar/2022/autosar

AUTOSAR References to ISO, IEC, ITU, IEEE, RFC and SEA etc.

https://qiita.com/kaizen_nagoya/items/d7d252211e10a79516df

Automotive Handbook Advent Calendar 2022

https://qiita.com/advent-calendar/2022/automotivehandbook

Basic principles, ボッシュ自動車handbook(英語)11版まとめ<2>

https://qiita.com/kaizen_nagoya/items/24a1ba5da3d09b2a95d1


2022 いいねをいただいた記事ランキング(O.K.版) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/goods

2022年１月下旬　いいねをいただいた記事　16

https://qiita.com/kaizen_nagoya/items/0ee589a8edaeab24fd2a

AdCale(O.K.) Advent Calendar 2022

https://qiita.com/advent-calendar/2022/adventcalendar2022

「会議は15分未満」に。小耳にはさんだ話。

https://qiita.com/kaizen_nagoya/items/510c47c5d1e8d03145db

AdvencCalendar2022 報告

https://qiita.com/kaizen_nagoya/items/5b4b99cb9ad571f4094b


誤差の評価が苦手（専門分野以外）

https://qiita.com/kaizen_nagoya/items/cc3a50827b24ab80985f



 ＜この記事は個人の過去の経験に基づく個人の感想です。現在所属する組織、業務とは関係がありません。＞


# 文書履歴(document history)
ver. 0.01 初稿 20221225
新卒エンジニアが技術的なアウトプット活動を習慣化した所感

## 概要
新卒一年目のエンジニアがLTや技術記事の執筆などの技術に関するアウトプットを継続的に行った結果、
「どのようなことを感じたか」「どのようなことが起こったか」について記述します。


## 今年行ったアウトプット

- 社内ドキュメントの作成 (20件)
- Qiitaアドベントカレンダー (27本)
- 社外LT登壇 (1回)
- 社内LT登壇（2回）
- もくもく会や勉強会などのイベント参加

## 良かったこと

### 自身のアウトプットを業務で役立てることができた

「あれのやり方ってなんだっけ・・？」→「そういえば自分でドキュメントにまとめていたわ！」
といったように、作業手順や技術的な知識について思い出す必要性があった時に自分の書いた技術記事や社内ドキュメントが役に立つことが何度かありました。

また、業務中に技術的な質問をされた際に、**自分の書いた技術記事を共有**して説明するという経験も何度かありました。

このように「自分自身の技術ノート」としてアウトプットを役に立てることができました。

### 社内での注目度向上
技術記事を書いたり、LTに登壇するなどを何度か行っていると
「とにかくアウトプットをしている人」という印象を持たれ、普段業務で直接関わらない方にも覚えてもらうことができます。

社内での注目度が上がり、他の部署やチームの方との接点が増えた結果、
**技術的な情報交換**をしたり、食事に誘われるなどの**社内での人脈拡大**といった効果を得ることができました。

### 自身の成長を可視化することができた
自分の書いた記事一覧や登壇記録を振り返ってみると、
「今年はAWSやTerraformについてたくさん学べたな」
といったように、一年間で具体的にどのようなスキルアップを図れたかを可視化することができました。

これによって自身の**学習意欲の向上**に繋がり、「もっと技術的な知識を得てたくさんアウトプットできるようになろう」というモチベージョンアップを図ることができました。


## もっとこうしたら良いかも

### 参加型コンテンツを作る
技術記事の執筆やLT大会への登壇だけではなく、**ハンズオン**や**勉強会**の開催などの参加型コンテンツを作るといったことにもっと挑戦したいと思いました。
参加型のコンテンツだと人との接点が増えるため、参加者同士との交流・意見交換といった**機会の創出効果**が得られるという期待ができます。

毎年入ってくる新卒エンジニアに向けたAWSのハンズオンを作るなど、社内でできそうなことから始めていきたいと考えています。


### 社外でより多くのアウトプットを行う
社外でのLT登壇や技術的な勉強会の主催(or 参加)といった機会を増やせば、
社内以上に色々な方と関わる機会が生まれ、**自社内でのコミュニティだけでは知り得ない知見**を得られる可能性が高まります。

今年は社内LT大会への登壇や技術ドキュメントの作成が多かったですが、来年はより多くの社外アウトプットができると良いと思います。




## まとめ

人目に見えるアウトプットを行うことは多くの時間やプレッシャーがかかりますが、得られるものも多いと思いました。
来年はより質の高いアウトプットを多く行えるよう、引き続き技術的な学習を続けていこうと思います。

また。来年もQiitaのアドベントカレンダー企画に参加しようと思います。
（全部俺カレンダーはネタが浮かばずなかなかキツかったので、来年はやらないかも）
（その代わり色々なテーマのイベントカレンダーに登録したいと思います）

それではみなさん、良いお年を！
2022年の振り返りをしてみる

# はじめに

こんにちは、そいちろです。
2022年もXR漬けの1年でした。
最初は趣味でVRゲームから入ったXR界隈、特に今年は仕事としてXRに関わる割合が増えたな～と、しみじみしてます。

2022年の振り返りとして、XR関係無いものも織り交ぜつつ、公開できるものを一部ゆるっと紹介してみます！（いいネタが思いつかなかった…😇）

本記事は「Qiita x エンジニアカフェ共催！今年がんばった技術（と好きなラーメンと麺のかたさ） Advent Calendar 2022」の21日目の記事です。
が、慌てて25日に投稿してます。遅くなってゴメンナサイ…🙇

# 引っ越し
春頃に引っ越し。
この機会を逃すまいと、新居と旧居をLiDARスキャン。
![IMG_0166 (1).jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215186/6e6f210e-6e4c-ca6a-798d-7f972e559bb8.jpeg)

家具、家電をAR試し置き。内覧時に出来たのすごく良かった。
![IMG_0169.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215186/14401550-c46c-4a4b-7a38-e6e5decfd16c.jpeg)

家具配置のシミュレーション。
便利すぎて展示会のブースレイアウト設計でも使った。

http://www.sweethome3d.com/ja/

![ScreenShot146 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215186/2f59485c-3ae2-7d15-c0f0-3d36225ef100.png)

一人称視点のカメラも用意されててすごい。

![ScreenShot149.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215186/cdf3e8e8-434e-3dcf-fa99-f75f600d1553.png)


# コミュニティ×お仕事
コラボイベントを企画。本業でもこういうのしたいな。

https://fukuoka-xr-club.connpass.com/event/248419/

# 10GB回線開通
引っ越し時点では対応してなかったBBIQの10ギガコースに変えてみた。

https://www.bbiq.jp/hikari/internet/10giga/

ルーターが高かった…！

https://kakaku.com/item/K0001320276/

変更前は800Mbpsとかだったはず。
もうちょっと出てほしかったけど、とりあえず満足。
Steamで重量級のゲームをダウンロードするときも爆速で気持ちいい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215186/e9cc7d5d-1145-99c4-b325-daa8aa1c87b5.png)

# 記事執筆
今年書いたものからいくつかピックアップ。

### 「モバイルMRカメラ」解説
iPhoneでMR動画撮れちゃうのすごいよなぁ…。

https://www.moguravr.com/quest-mobile-mr-camera/

### 「Reverb G2 Omnicept Edition」ハンズオンレビュー
超レアデバイスをお借りして、じっくり体験できる役得なお仕事でした。

https://www.moguravr.com/reverb-g2-omnicept-edition-hands-on/

### 「HoloLab Conference 2022」イベントレポート
10時間近い動画を全部観るの大変だった…。

https://www.moguravr.com/hololab-conference-2022-report/

### パススルーピアノ学習アプリ「PianoVision」
たまたま自宅に電子ピアノがあったのでお試し。

https://www.moguravr.com/pianovision/

### 実は連載してる「週刊VRウォッチ」

https://thinkit.co.jp/series/5736

### 3Dスキャンアプリ「WIDAR」
ハコスコの展開するECメタバース「メタストア」のオウンドメディア「メタバースマガジン」でいくつか執筆。

https://meta.hacosco.com/blog/2022/11/metaverse-business/

https://meta.hacosco.com/blog/2022/12/free-3d-scan-app-wider-try-01/

https://meta.hacosco.com/blog/2022/12/free-3d-scan-app-wider-try-02/

# ハリガネ頼んで「うちはバリカタまでなんですよ～」と言われがち
泡系が好き。
最近は替え玉一回で満足してしまう。

https://www.ikkousha.com/store-sohonten

http://www.hakata-issou.com/

https://tabelog.com/fukuoka/A4001/A400203/40042679/

https://tabelog.com/fukuoka/A4001/A400102/40043172/

# おわりに
2022年、仕事ばっかりで個人開発がほぼゼロだったのが反省点。
2023年は個人開発とそのアウトプットを頑張るぞ。
MariaDB/データ保守用SQL（insert文）の作り方整理

## はじめに
今回は、MariaDBの「insert」文だけとりあげます。
動作確認環境はWindowsのMariaDB10.3です。
イメージは複数の環境に展開しているマスターテーブルのデータ更新スクリプトです。
初期設定もあるので、全件のinsertスクリプトを用意しておく必要があるのですけど、既存環境だと重複エラーになるので差分だけ適用しないといけない・・でも、環境ごとに微妙に違うので、めんどくさい・・という状況で、いかに楽をするかがテーマです。
## まずは普通のinsert文
サンプルに使うテーブルは以下のCreate文で作りました。
```
CREATE TABLE `test_master` (
	`id` INT(11) NOT NULL,
	`code` VARCHAR(20) NULL DEFAULT NULL,
	`name` VARCHAR(256) NULL DEFAULT NULL,
	`updated` TIMESTAMP NOT NULL,
	PRIMARY KEY (`id`) USING BTREE
);
```
ここにまず以下の3行をインサートします。
```
insert into test_master (id,code,name,updated) values (1,'t100','namet100',current_timestamp());
insert into test_master (id,code,name,updated) values (2,'t200','namet200',current_timestamp());
insert into test_master (id,code,name,updated) values (3,'t300','namet300',current_timestamp());
```
## 重複無視して追加だけinsert
上記に以下の1行を追加します。
```
insert into test_master (id,code,name,updated) values (4,'t400','namet400',current_timestamp());
```
このままだと、前の３行は重複エラーになるので、エラーを無視させるために、以下のように「IGNORE」キーワードを追加します。
```
insert IGNORE into test_master (id,code,name,updated) values (1,'t100','namet100',current_timestamp());
insert IGNORE into test_master (id,code,name,updated) values (2,'t200','namet200',current_timestamp());
insert IGNORE into test_master (id,code,name,updated) values (3,'t300','namet300',current_timestamp());
insert IGNORE into test_master (id,code,name,updated) values (4,'t400','namet400',current_timestamp());
```
こうすると重複が「Warning」になって、重複でも停止せずスキップされて、最後の追加行だけが「insert」されるようになります。
## 重複したら「update」したい行がある
ここで「id=2」の行だけnameを「updated_namet200」に変更しました・・というケースです。
ようするに、なければそのまま「insert」したいけど、重複する行があったら「name」だけ更新したい・・というパターンです。
2行目の「IGNORE」をとって、「ON DUPLICATE KEY UPDATE name='updated_namet200'」を追加して書き換えます。
```
insert into test_master (id,code,name,updated) values (2,'t200','updated_namet200',current_timestamp())ON DUPLICATE KEY UPDATE name='updated_namet200';
```
これによって、スクリプト全体は以下のようになります。
```
insert IGNORE into test_master (id,code,name,updated) values (1,'t100','namet100',current_timestamp());
insert into test_master (id,code,name,updated) values (2,'t200','updated_namet200',current_timestamp())ON DUPLICATE KEY UPDATE name='updated_namet200';
insert IGNORE into test_master (id,code,name,updated) values (3,'t300','namet300',current_timestamp());
insert IGNORE into test_master (id,code,name,updated) values (4,'t400','namet400',current_timestamp());
```
これでいつ流しても、Warningはでますが、なければ「insert」あれば、スキップもしくはupdateというスクリプトができました。
まあ、簡単なことですが・・。
こういう「ちょっと楽する」工夫が意外にきいてきます。
ではでは。
面談でより良いアウトプットを行う方法

# はじめに

この記事は[Qiita史上最多記録をつくろう！アウトプットはいいぞカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/output)の25日目の記事です。

今回はアウトプットはいいぞ！というアドベントカレンダーに参加させていただきました。
日常的なアウトプットシーンは様々ですが、みなさんはアウトプットに関してどういった場面をイメージされますでしょうか？
エンジニアであれば、勉強会などの意識的に行うアウトプットもありますが、雑談中の近況報告など、無意識でのアウトプットシーンもありますよね。
日常的に行われているアウトプットですが、面談もアウトプットシーンのひとつだと思います。
今回はこの面談において、より良いアウトプットを行う為の方法をご説明したいと思います。

# 面談とは何なのか？
面談でより良いアウトプットを行う為の方法を説明をすると述べておいて、このタイトルは矛盾していますね、、、？:thinking:
そんな声が聞こえてきそうですが、回答としてはNOになります。

面談において、より良いアウトプットを行う為には、まず面談とは何かを理解する必要があります。

IT業界にいる方であれば、面談をご存知の方は多いですよね。
企業内で行われている1on1やキャリア相談なども面談のひとつと言えるでしょう。
フリーランスの方であれば、現場参画前には多くの場合、面談がありますよね。

ただ、そもそも面談って何だかご存知ですか？
日常的に行われている面談も打ち合わせ程度に考えていらっしゃる方がほとんどではないでしょうか。

まず、面談という単語を分解してみると、【**面会**】と【**談話**】という単語に分かれます。
面会とは人に会う事、そして談話とはくつろいで会話を交わす、盛んに喋る、打ち解けて語り合うという事になります。

つまり面談とは、**相手と対等であり、目線を合わせながら談話という形で語り合い情報交換を行う場**を指します。

どうでしょう、上記を頭の片隅に置いておく事で、面談の敷居がグッと低くなりませんか？
面談を面接と同じだと勘違いする方がいらっしゃいますが、上記から全く異なる事がわかりますよね。

この感覚を持つ事で相手と目線を合わせる事ができ、自然な形でアウトプットを繰り広げる事ができるというわけです。

是非面談の場では不自然に演じてしまうなどお困りの場合には、一度面談とは何かを考えてみてください。

# 面談中のコミュニケーションに彩りを
上記で面談とは何かをご説明をしました。
面談はお互いに対等であるという感覚を持つことで、面談の敷居がグッと下がり、より良いアウトプットを行う為の準備整った状態です。

では次に面談中のコミュニケーションにフォーカスを当てたいと思います。
日常的に面談を実施されている方は少し思い出してみてほしいのですが、面談は閉鎖的な空間で且つ少数で行うケースが多く、コミュニケーションが定型的になりやすいと感じませんか？
まして昨今では、リモートワークの普及から直接会って面談する機会も減っており、より相手との距離感を感じづらいと感じる方は多いかもしれません。

自己表現のない定型的なコミュニケーションが展開されている面談が進んだとしても、表面的な回答や感情のない問いしか生まれず、より良いアウトプットが可能な状況とは程遠い状態であるといえます。

雑談で考えるとわかりやすいですが、感情のないコミュニケーションは一目瞭然ですし、この状態でスムーズなアウトプットは難しいですよね。
逆に身振り手振りを織り交ぜてみたり、ふくよかに感情や想いを込める事でお互いのコミュニケーションに奥行きが生まれ、自然な形で会話に彩りが生まれます。

上記状態を面談中に作る事ができれば、定型的だった会話に奥行きが生まれ、双方で蟠りを残さずアウトプットの場として最良の結果が得られるはずです。

面談はどうしても表面的なコミュニケーションに陥りがちですが、受けているものがビジネス的な面談だったとしても双方で知りたい事があるのは同じです。
ここに上下は存在していないはずなので、恐れる事なくコミュニケーションに感情という名の自己表現を取り入れてみてください

きっと面談が終わった際には、より良いアウトプットだったと感じる事ができるはずです。

# さいごに
投稿日がクリスマスという事で、普段外であまり話す事がない面談に対してまとめてみました。
社内でも面談に対して話す事がありますが、やはり面談と聞くと少しハードルの高さを感じる方が多いようです。
面談を対等だと捉える事ができれば、面談に臆する事なく自然な形でアウトプットのやりとりができるようになるはずです。
いきなりご自身での面談の捉え方を変えることは難しいかもしれませんが、少しずつ良い方向に向いてくよう、この記事を活用していただけますと幸いです。
pytorchにおける最適化手法の観察


# はじめに
ディープラーニングによく使われている最適化手法がどのような動作をするのか気になったので、ライトコードさんの記事を参考に試してみました。

環境
WSL
ubuntu 22.04
python3.10.6
jupyter

# コード

``` as
%matplotlib inline
%matplotlib widget
from torch import optim
import matplotlib.pyplot as plt
from matplotlib.colors import LogNorm
import numpy as np
import torch

#各データの格納リスト
classes = ['SGD', 'Momentum', 'Adagrad', 'RMSprop', 'Adadelta', 'Adam']
x_list = {}
f_list = {}
optimizers = {}
 
#各種optimizer毎に関数の最適化を行う
for key in classes:
  x_list[key] = np.empty((0, 2))
  f_list[key] = np.empty((0))
  #更新パラメータ（x, y）の初期値
  init = [-3., -2.]
  x = torch.tensor(init, requires_grad=True)
  params = [x]
  
  #学習率
  lr = 1
  #各optimizerの定義
  optimizers['SGD'] = optim.SGD(params, lr=0.001)
  optimizers['Momentum'] = optim.SGD(params, lr=0.001, momentum=0.5)
  optimizers['Adagrad'] = optim.Adagrad(params, lr)
  optimizers['RMSprop'] = optim.RMSprop(params, lr=0.01)
  optimizers['Adadelta'] = optim.Adadelta(params, lr)
  optimizers['Adam'] = optim.Adam(params, lr)

  #関数定義(ビール関数)
  f  = lambda x: (1.5 - x[0] + x[0]*x[1])**2 + (2.25 - x[0] + x[0]*x[1]**2)**2 + (2.625 - x[0] + x[0]*x[1]**3)**2
  
　#関数の出力に対して勾配を求め、optimizerで更新を繰り返す
  for i in range(1000):
    optimizers[key].zero_grad()
    out = f(x)
    out.backward()
    optimizers[key].step()
    x_list[key] = np.vstack([x_list[key],np.array([x.detach().numpy()])])
    f_list[key] = np.append(f_list[key],np.array([out.detach().numpy()]), axis = 0)

#グリッドの計算
xmin, xmax= -5, 5
ymin, ymax= -5, 5
xstep = (xmax - xmin)/50
ystep = (ymax - ymin)/50
x_grid, y_grid = np.meshgrid(np.arange(xmin, xmax + xstep, xstep), np.arange(ymin, ymax + ystep, ystep))
z = f([x_grid,y_grid])

#グラフの出力
fig = plt.figure(figsize=(10, 7))
i = 1
for key in classes:
  ax = fig.add_subplot(2, int(len(classes)/2), i, projection='3d')
  ax.set_title(key, fontsize=8)
  ax.set_xlabel('x', fontsize=8)
  ax.set_ylabel('y', fontsize=8)
  ax.set_xlim(xmin, xmax)
  ax.set_ylim(ymin, ymax)
  ax.view_init(elev=50, azim=-10)

  ax.plot(init[0], init[1], 'x') #初期位置
  ax.plot(3, 0.5, '+') #ゴール(ビール関数)
)
  ax.plot(x_list[key][:,0],x_list[key][:,1],f_list[key][:],"ro-", ms=1)
  ax.plot_surface(x_grid, y_grid, z, cmap='jet',norm=LogNorm(), alpha = 0.5)

  i += 1
```
# 結果
![Figure 5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2951246/52465324-84a7-e711-d401-0f9119c19e14.png)

検証に最適化のテスト関数であるBeale関数を使用しました。
xマークが初期値、
+マークがゴールになります。
関数のハイパーパラメータによって結果は変わるので、
各手法にどんな傾向があるのか観察することができました。

ほかにも様々な最適化手法があるので、試してみるのも面白いです。

# 参考文献

https://rightcode.co.jp/blog/information-technology/torch-optim-optimizer-compare-and-verify-update-process-and-performance-of-optimization-methods

http://louistiao.me/notes/visualizing-and-animating-optimization-algorithms-with-matplotlib/

https://pystyle.info/pytorch-sgd/
登録セキスペに合格しました（情報処理安全確保支援士）

## この記事について
令和4年度秋期の情報処理安全確保支援士試験に合格したため、体験記として試験対策をまとめておこうと思います。学習の一助となりますと幸いです。

## バックグラウンド
筆者のスペックは以下の通り
- 私立文系卒
- 第二新卒で未経験インフラエンジニア
- 主な業務はネットワークの設計・構築（執筆時点でエンジニア歴4年）

また、セキスペ合格前の IPA の取得資格は以下の通り
- 基本情報（令和元年 秋期）
- 応用情報（令和3年 秋期）
- ネットワークスペシャリスト（令和4年 春期）

その他、 CCNP とか AWS 資格とかをちょこちょこ取ってます。

## 情報処理安全確保支援士（登録セキスペ）
試験の詳細、出題形式等は [IPA公式サイト](https://www.jitec.ipa.go.jp/1_11seido/sc.html) をご確認ください。
また、令和5年度秋期からは試験の形態が変更され、[午後Ⅰと午後Ⅱが統合されるようです](https://www.ipa.go.jp/about/press/20221220.html)。今から学習するなら、易化を予想して改定後を目指すのも有効かもしれませんね。

## 受験結果
以下の通りとなりました。

|時間区分|  得点|
|:------|-----:|
|午前Ⅰ |   免除|
|午前Ⅱ |   88点|
|午後Ⅰ |   89点|
|午後Ⅱ |   95点|

後半はダレつつも、三か月くらいは試験対策をしていたので割と安定して取れていました。
業務内容と被るからと余裕こいてたネスぺよりも結果は良かったです。
（どの資格試験でも言えることですが）時間を確保してやり方さえ間違えなければ合格はそこまで難しくないのかな、という印象です。

## 試験対策
身も蓋もない言い方ですが、基本は暗記と反復でした。
ひたすら基本知識を身につけて語彙を増やし、ひたすら長文問題を解いて傾向・問題のクセ・解答のコツをつかむことが一番確実なのではないでしょうか。
なので、実感として試験対策で一番大切だったのは

1. スケジュールの作成
1. 勉強時間の確保

でした。勉強時間の確保は各自で調整するしかありません。筆者の場合は平日はできるだけ1時間以上、休日も最低3時間は確保できるようにしました。


### 試験対策スケジュールと教材

以下は筆者の場合の計画の立て方です。
まずは、対策期間を三か月に設定しました。秋期試験は10月なので、7月くらいから勉強を始めた形です。専門外のセキュリティ分野のため、ネスぺよりは余裕を持って挑む気持ちでした。
次に、教材として以下の書籍を購入しました。（リンクは各出版社）

- [マスタリングTCP/IP 情報セキュリティ編（第2版）](https://www.ohmsha.co.jp/book/9784274228797/)
- [2022 情報処理安全確保支援士「専門知識+午後問題」の重点対策](https://www.itec.co.jp/store/products/detail.php?product_id=3781)

「マスタリング TCP/IP」シリーズはネットワークエンジニアとしてお世話になっており、情報セキュリティ編の改版がちょうど2022年の6月に発売されたため、基礎知識を固める地盤として購入しました。基本から応用まで体系的にまとめられ、セキスペの試験範囲も概ねカバーできており非常に有用でした。

「重点対策」シリーズは応用とネスぺで使っていたので今回も問題・解説集として使用することに。過去問は公開されていますが、個人的に、問題のクセと解答のコツをつかむには解説付きの参考書がないと難しいと思っています。問題集は解説がしっかりしたものなら上記以外でも問題ないかと（情報処理安全確保支援士ドットコムに [おすすめ参考書](https://www.sc-siken.com/sctext.html) が挙げられています）。

なお、試験対策で使用した教材は上記と午前対策でおなじみの [過去問道場](https://www.sc-siken.com/sckakomon.php) のみです。IPA 試験は年2回実施で問題数も少ないので、一つの問題集を読み込んだ方が対策として有効でしょう。

後は以下の計画を立て、実行していきました。

- 7月中旬～8月上旬: マスタリング TCP/IP を読み込む（2週）。
    - 最初はざっくりと目を通すように読む
    - 次に改めて一字一句を読み込む。覚えにくそうなところはノートに書く
- 8月中旬～9月中旬: 問題集を読み込む（3週）
    - 最初はざっくりと目を通すように読む（問題も解答を見ながら読む。考えない）
    - 次に知識解説、問題解説をしっかりと読み込む。暗記項目はノートに書いて覚える
    - 最後に解答を見ずに問題を解いて確認をしていく。詰まったところや不安なところは改めて解説や TCP/IP を読んで解消する
- 9月下旬～10月中旬（本番）: 午後の過去問5年分（春秋、午後Ⅰ・Ⅱで計50問）に挑戦する
    - 本番に慣れる練習の気分で、時間を測って解いていく
    - 隙間時間には過去問道場、「重点対策」付録で午前問対策

上記はあくまで筆者の場合です。
「とにかく暗記してたくさん問題を解く」が最適解と思っており、読んで書くことが一番効率的に暗記できたので、このような形に落ち着きました。

### 勉強中に気を付けたこと

細かい点は気にしすぎないことです。
午後は論述問題が中心なので、どう答えればいいか悩む、自身の答えと解答例との文言の違い等が気になります。それらを無視して、とにかく問題を解くことに集中し、分からないことはすぐに諦めて解説を見るようにしました。
午後問で全く同じ問題が出題されることはまずないので、細かい文言より、長文でどういったことが問われやすいか、どのような解答が好まれるかの感覚を得る方が優先です。また、知識不足や経験不足で分からないものを考えるより、問題を解く回数を増やした方が手っ取り早いでしょう。本番試験では時間も限られるので、その点も意識していました。

細かい点に囚われて時間を無駄にしないために、**制限時間を設けること** と **解答する時間より解説を読む時間を優先すること** の二つはなんとなく意識していました。


## 最後に

「試験対策をして取得した資格に意味はあるのか」というのはよく議論になります。
筆者としては、今回のセキスペの「試験対策」は非常に良い体験だったと思っています。
情報セキュリティの知識は業種に関わらず身に着けてしかるべきものでしょう。ただ、全く目的もない状態で知識を得ようとしてもなかなか難しいものです。資格取得を目的としなければ、参考書や問題の解説にここまでしっかり目を通すことは、なかったかもしれません。
執筆時点で合格発表はつい先日ですが、試験前から試験本番以降まで、業務でもセキスペで問われるような知識が必要になることはありました。また、他社のインシデント情報などに対しても、視野が広がったように思います。
今回の合格が、「より良い意味」となることを期待しています。
Google UXデザイン：レスポンシブWebサイトとは

# はじめに

わたしが[Google UX Design Certificateで得られた素晴らしい体験][google]を、特に重要だと思われるポイントを小さく分割して、わかりやすく簡潔に紹介していきます。

興味があれば、ぜひ Google UX Design Certificateを受講してみてください。

[google]: https://qiita.com/mapami/items/7a0d0a3d4661c50f8bec

https://www.coursera.org/professional-certificates/google-ux-design

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/6a4c4f5e-8148-b120-42be-7acb1cd54a86.png" width="800">

<details><summary>これまでの振り返り</summary>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/d371bce4-836a-0ba5-fd7d-9d2e55f1b909.jpeg" width="700">

</details>

# レスポンシブWebデザインとは

***<font color="MediumVioletRed">『デバイスのサイズに応じてWebサイトが自動的に変化すること』</font>***

レスポンシブWebデザインは、携帯電話のような小さな画面には小さく表示され、デスクトップパソコンのような大きな画面には大きく表示されます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/d5c24505-3a17-2817-26d7-e8037b3cc4bc.png" width="650">

レスポンシブWebデザインは、多くの場合、Webサイトのサイズを変更するだけではありません。

UXデザイナーは、ウェブサイトのデザインを計画する際、各ページの要素がさまざまな画面サイズにどのように対応するかを検討する必要があります。画面が小さいとスペースが狭くなるため、レスポンシブWebサイトでは要素の表示位置を変更することもあります。

#### サンプル

例えば、デスクトップ版のウェブサイトでは、画面の上部に人気のページが表示されることがあります。モバイル版では画面上部にスペースがないため、人気ページをハンバーガーメニューの中にまとめて表示することができます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/9854f56b-b19e-981a-ddb1-8c01a89498a0.png" width="650">

同じウェブサイトの複数のバージョンをデザインすることは、より多くの時間を要しますが、人々がどのデバイスでもウェブサイトを使用できるようにするものです。


2019年の調査によると、インターネット上には1億8500万以上のアクティブなWebサイトがあり、毎秒ごとにさらに多くのWebサイトが作成されていることがわかりました。これだけ多くのアクティブなウェブサイトがあり、さらにウェブサイトが作られる速度も速く、携帯電話を持つ人の数も多いので、どのデバイスでも使いやすいウェブサイトをデザインできる専門家の市場は大きいのです。つまり、多くの企業がレスポンシブWebサイトを必要としているのです。

900人以上のUXデザイナーを対象にした調査では、90%が最近ウェブサイトまたはウェブベースのアプリケーションを手がけたことがあると回答し、76%が最近モバイルアプリを手がけたことがあると回答しています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2358573/c9190851-f46d-4e62-f24e-fbc0596b35c7.png" width="500">
SQLが遅い時の対処法

# 背景
勤務先の自社システムが最近アクセス過多（sqlの発行回数が多くて）
サーバーダウンしてしまった。
流石にこれはよろしくない。
sqlの書き方ならわかるが、処理速度などに関しては知識がほぼ０の自分であるが、
調べたことをアウトプットのため、書くことにする。

まだほぼ無知な状態なのでそれはこうだよ！ここ違うよ！ということありましたら
コメントに書いていただけますとありがたいです。

# 対処法



##### ①インデクスを貼る

インデクスを貼った方がいいよ、とはよく言われてることだろう。
もうよく知られたことかもしれないけれど、
インデクスとは、本に例えると索引、目次みたいなものだろう。
例えば投資に関する本を買って、
特にNISAについてピンポイントで知りたいとする。

本を最初からざっと毎ページ目を通しているとめちゃくちゃ時間がかかる。
でも、最初から索引ページを見て「NISA」の文字を調べて本のどこに
書いてあるか、が分かればそのページまでひとっ飛びでいくことができる。

つまりsqlでもインデクスとは処理速度を早くしてくれる機能のことである。


例えば以下のusersテーブルで名前検索しようとする。
単純に
` select * from users where name ='山田花子';`
![スクリーンショット 2022-12-25 18.23.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462069/6a0f2377-ed48-aa07-c037-d9682b48d874.png)

とでも書こうならば、テーブルフルスキャンと言って
テーブルを全行検索することになりデータが多いほど時間がかかる。

これを防ぐため、今回を例にインデクスを貼るのなら
「name」にはることになる。
インデクスを貼ることによてインデクステーブル（索引テーブル）が別途作られる。

name = 山田花子について検索するとき、
まず索引を確認して、usersテーブルのどこにあるかを探す。
それをすることで、ピンポイントで検索することができて、
処理速度を速めることができる。



##### ②sql実行計画を確認
①のインデクスをつけても、あんまり速度が改善されないな〜となったらば
次に「sql実行計画」を確認する。

実行計画とはなんぞや？というと、
まずsqlは実行しても実際に処理が行われるまで以下の図の段階を踏んでいる。

・パーサー　：　文法的エラーないか？対象のテーブルがそもそも存在するか？とか等をチェック
・オプティマイザー　：　発行したsqlを実行するのに最も効率的な方法はないか？と候補を複数作成
・実行計画　：　最終的に結論付いた計画１つを実行する

![スクリーンショット 2022-12-25 18.38.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462069/ad85415a-b8f8-8f4c-2d9f-2abe4b731921.png)


このように実際どんなsql処理が実行されたのか？というのが実行計画というものである。


そして実行計画はSQL分の先頭に` explain ` を書くことによって確認できる。

詳細は今回は省略させていただく。
↓の記事に詳しく説明されてあります！

https://qiita.com/tsurumiii/items/0b70f1a1ee0499be2002

```
mysql> explain select * from users where company_id = 2\G;
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: users
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 30543
     filtered: 10.00
        Extra: Using where
1 row in set, 1 warning (0.00 sec)

```



##### ③パーティションを貼る
そして、最後、実行計画を見ても
なんかまだだな〜と思った時はデータベースのパーティションというものを確認する。


パーティションとは何か？というと
テーブルを内部的になんらかのルールに振り分けて、そこにデータを分割する仕組み
のことである。

下の図は「リストパーティション」と言って、
キーカラム（今回は都道府県）を固定値で管理するやり方で、
47パーティションが作成され、
usersテーブルid = 1 と 2はprefecture_id = 1(北海道）
なので「1: 北海道」のパーティションにレコードが入ることになる。
usersテーブル　id = 3　はprefecure_id = 2なので　パーティション2:東京にレコードが入る。


` select * from users where prefecture_id = 2`　という
sqlが発行されたら、prefecture_id = 2(東京）のパーティションだけを
確認よくて、テーブルを全件検索（フルスキャン）する必要がなく
処理時間が早くできる、という仕組みである。


![スクリーンショット 2022-12-25 18.50.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/462069/d60887a4-b659-1fd2-0a48-19e6f62571b4.png)





### 参考文献等

以下参考にさせていただきました！

https://atmarkit.itmedia.co.jp/ait/articles/0901/29/news152_2.html
https://youtu.be/Aur62VsPrHg
Railsで日時比較をする際に型が違って焦った話

# この記事で伝えたいこと

Railsで日時比較をするときには日付の型を確認しようと言う話をします。

# 日時に応じて挙動が変わる処理の実装

WEBアプリケーションを開発していると、特定期間のみキャンペーンのバナーを表示させたいというような、期間などの時刻で動作する機能を開発する必要があります。
かつての僕は「その時間になったら手動でデプロイするのかな」と思っていたこともあったのですが、コードの中に時間による分岐を入れれば自動で機能がアクティブになることを教えてもらいました。

そんな僕が書いたコードが下記のような分岐です。

```ruby
  Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
```

しかし、2022年12月1日0:00(JST)になってもこれではうまく動作しませんでした。

```ruby
[2] pry(main)> Time.zone.now.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
=> false
```

# RubyとRailsぞれぞれの日時の型

どうしてこうなるのか少し調べてみると、RailsやRubyにはそれぞれたくさんの日時の型があることがわかりました。

> Railsアプリケーションでは「システムまたは環境変数に設定されたタイムゾーン」と「application.rbに設定されたタイムゾーン」の2種類があります。
どちらも同じ設定になっている場合は問題が起きることは少ないですが、設定が異なっていると予期せぬ結果になる場合があります。

https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c#rails%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%BF%E3%82%A4%E3%83%A0%E3%82%BE%E3%83%BC%E3%83%B3%E3%81%AE%E6%89%B1%E3%81%84%E3%82%92%E6%95%B4%E7%90%86%E3%81%99%E3%82%8B

冒頭の処理で使った`Time.zone.now`と`Date`の型をそれぞれ見てみると異なる型を使っていました。
```ruby
[1] pry(main)> Time.zone.class
=> ActiveSupport::TimeZone
[2] pry(main)> Date.new(2022,12,01).class
=> Date
```

# 型を揃えた分岐にすることで解消

比較する型をどちらかにそろえれば解消できました。

## Time.zone.localに合わせる

`Time.zone.now`に合わせて`ActiveSupport::TimeWithZone`を使うようにすれば解消できました。

```ruby
[1] pry(main)>  Time.zone.now.between?(Time.zone.local(2022, 12, 01), Time.zone.local(2022, 12, 31)
=> true
[2] pry(main)> Time.zone.local(2022, 12, 01).class
=> ActiveSupport::TimeWithZone
```

## Dateに合わせる

または`Date`に合わせる方法もあります。

```ruby
[1] pry(main)> Time.zone.today.between?(Date.new(2022, 12, 01), Date.new(2022, 12, 31))
=> true
[2] pry(main)> Time.zone.today.class
=> Date
```

こうしてどちらかに揃えたことで意図するシステムの動作を担保することができました。

# 感想
今回はタイムゾーンが`Date`型に反映されなかったためエラーになってしまったようですが、どこでその分岐が起きたのかはまだ調査中になります。
仮説としてRailsの`TimeWithZone`での`between`メソッド内部でutcによる比較になっている可能性がありそうでした。

https://github.com/rails/rails/blob/8015c2c2cf5c8718449677570f372ceb01318a32/activesupport/lib/active_support/time_with_zone.rb#L269-L271


ちょっとこのあたりだいぶ複雑でまだまだ理解ができていないと感じています。
もしもこのあたりご知見があるかたいらっしゃればコメントいただけると幸いですmm

# 参考

https://qiita.com/YumaInaura/items/f0db20bc125cada554a1
2022年あまねアドベントカレンダー閉会宣言

みなさまメリークリスマス！
そして、25日間続けてきた個人アドベントカレンダーもようやく最後の記事になリます！

https://qiita.com/advent-calendar/2022/amane

長い道のりですがなんとかここまで来ることができました、、！
どのように継続したか、大変だったことについては昨日すでに投稿したので、今日はここまで24日分の自分が書いてきたものの眺めての感想を書いてみたいと思います。

https://qiita.com/isaka1022/items/e17139df50c8542e8c2f


# 1年振り返ってよかったこと
## 触る技術の幅が増えている

学生のころからずっとRailsでの開発を続けてきていたのですが、今年になってGoやPythonを使った開発も少しずつするようになりました。

他の言語を学ぶのは初めてでしたが、学びながらできることも増えてきて、アウトプットもできるようになれたことは素直に嬉しいですし、やりがいになります。


## Railsに関しても知識がついたおかげで、言語化して発信できるようになった

一番得意なRubyやRailsについても、あまり単純なところで詰まったりすることはなくなり、公式ドキュメントやGitHubのコードを読みながら理解できることも増えてきました。

他の言語で実装したり、学んだりするときにも「Rubyでの〇〇」「Railsでの〇〇」といったようなアイデアの出し方になることが多く、ちゃんと身についている感覚があってこれも嬉しいです。

https://qiita.com/isaka1022/items/0a75da951628350e3eee

## 働き方で意識的に動けている気がするし、それを言語化できる

また、今回はなるべく技術的な投稿を増やそうと最初に意識しましたが、だいたい1/3くらいは働き方や新卒の時に意識してきたことの話になりました。

最近ではインターン生のメンターも行うようになり、新卒で詰まりやすいポイントや「こうすればいいのに」と思うところをそのまま投稿にしやすいということもありますが、それでも自分が同じく最初に詰まったことや日頃意識していることを改めて言語化できることはよかったですし、最初に比べて自分の成長実感にもつながってよかったです。


## アウトプットを出すためにコードを書くこと

最後は今回初めて自分が伝えたいことをベースにサンプルコードを用意することがありました。詰まった時の環境が業務ドメインに関わる箇所だったりすると、そのままソースコードを公開はできないからです。

https://qiita.com/isaka1022/items/4b37481ec216e2fbf507

普段の勉強で書籍などのサンプルコードなら抽象概念を学ぶ、ということはやっていますが、逆に抽象的なことを伝えるために具体的なコードを書くということは今までやったことがなかったので新鮮でした。

# 今年の反省
## 初心を忘れている

一方で、昨年の働き方を振り返った時に、最初は意識していたけどおざなりになっていたことなども見つかり、これは改めて意識しようと思いました。
来年からはまた意識を改めて、新卒のときにやっていて本当は継続したほうが良いことを再度始めてみたいと思います。

https://qiita.com/isaka1022/items/19cf7ab288378cb71253


## 解決してきた問題がまだ小さい

今回の書いた技術的な記事については、小さかったりニッチなものが多い印象があります。
もっと普遍的だったり、規模が大きい課題について自分の技術力を使って解決するような取り組みがあってもよいと感じました。

さらには、今回投稿した内容にはあまり傾向がなく、初学的な内容も多かったと思うので、今後は何か軸があっても良いかもと思いました。より興味分野を深めるような学習がしたいです。


# 来年の豊富

来年も、まだまだエンジニアとして思い切り働く姿勢は変わらないと思います。
ただ、今回のアドベントカレンダーを通して「何の課題を解決したか」の重要性はすごく感じたので、来年以降の開発においては今自分が何をしようとしているのか、どんな課題に対してアプローチしているのかを今まで以上に意識しようと思います。

## 発信機会はもっと増やしたい

今回のアドベントカレンダーで初めてこんなにアウトプットを出したので、アウトプットを出すハードルはものすごく下がりました。
せっかく慣れたので、ぜひ来年はこれを継続していきたいです。
これまでは簡単なLTの登壇が主でしたが、これでブログ等での発信もできるようになったので、引き続きやっていきます。
めざせ月一回の更新！

そしてそのためにも、今まで以上に興味がある技術についてはピッパっと、まずは素早く触ってみながら知見を得ることができたら嬉しいです。


## コードを書く量を増やしたい

アタリマエのことですが、今回発信することができたネタは自分でコードを書いて試行錯誤をしながら得られたものが多いです。
今回技術的な発信の内容が1/3になったのはまだまだコードを書く時間が少なかったからな気もするので、写経などではない自分の頭で考えてコードを書く時間を意識的に増やしたいと思います。
そしてそのために、久しくできていたかった個人開発もコツコツと再開できたら、と考えています。

# まとめ

アドベントカレンダーを通して今年のふりかえりと来年の目標を宣言させていただきました。
後半などはあまり時間が取れず、粗削りで出してしまった記事などもあるので、そちらはまた年明けなどに継続してアップデートしていければと思っています。

また来年以降も頑張ります！
特定のブランチにpushされたらGithub Actionsを使ってs3に自動デプロイする

Github Actionsを使ってプッシュされた内容をs3に自動で反映します。（作業時のメモなので抜け漏れがある可能性があります。検証用環境を用意してお試しください。）

## 前提条件

Githubに検証用リポジトリが用意されている

## s3にバケットを用意

ファイル配置用にs3上にバケットを新規作成します。
![スクリーンショット 2022-12-25 17.22.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186181/c3130832-e656-6c0d-c856-7f7ac5121902.png)
バケット名は任意の名前、そのほかの設定はデフォルトのまま進めます。必要に応じて各種設定は調整してください。

## IAMユーザーを用意

バケット操作用のIAMユーザーを新規追加します。

追加するユーザーには用途に応じて権限を絞ったポリシーをアタッチします。
参考：[Amazon S3のアクセスに必要な最低限のIAMポリシーの設定](https://www.jpcyber.com/support/minimal-iam-policy-to-access-amazon-s3)

ユーザー作成時に生成される`アクセスキーID`と`シークレットキー` はこの後の手順で利用するので控えておいてください。


## GitHub Secretsの設定

前の手順で用意した`アクセスキーID`と`シークレットキー`をGithub Secretsに登録します。

作業リポジトリの`settings` > `Actions` へアクセスし、`new repository secret`から登録を行います。
![スクリーンショット 2022-12-25 17.39.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186181/d9794286-3816-afd7-3b41-3ecbd5acfb84.png)
![スクリーンショット 2022-12-25 17.45.13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186181/6d57fcec-1c53-80a7-94dc-f3891b4c80b3.png)

```
## Secret1
name:AWS_ACCESS_KEY_ID
secret:{{IAMユーザー作成時に控えたアクセスキーIDを保存する}}

## Secret2
name:AWS_SECRET_ACCESS_KEY
secret:{{IAMユーザー作成時に控えたシークレットキーを保存する}}

```

## GitHub Actions設定用にyamlファイルを作成

対象のリポジトリ直下に`.github/workflows`という名前でディレクトリを新規作成し、その中にyamlファイルを配置します。
```
name: Upload to S3
on:
  push:
    branches:
      - release

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Deploy
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: aws s3 sync --region ap-northeast-1 ./src/ s3://[バケット名]/ --delete
```

- `${{ secrets.AWS_ACCESS_KEY_ID }}`と`${{ secrets.AWS_SECRET_ACCESS_KEY }}`の記載で、登録したIDとキーを取得します
- バケット名は初めに作成したファイル配置用の名前を入れます
- 対象のブランチを変更する場合は`branches`の値を変更します


以上の設定で、`release`というブランチにプッシュされた際にGithub Actionsが発火し、`/src`ディレクトリの中身がs3に反映されます。


## うまく動かない場合確認する箇所

### GithubのPersonal access tokensにworkflowの権限が付与されているか

`git push`する際に権限エラーが出た場合、GithubのPersonal access tokensの権限を確認しましょう。
参考：[GitHubActionsで自動ビルドする際、Tokenのスコープでつまづいた話](https://zenn.dev/urasaku77/articles/dd94110dd1041a)
![スクリーンショット 2022-12-25 18.19.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186181/814a3a22-fa5d-2342-bb3d-39884af53e64.png)

### IAMユーザー ポリシーの`Resource`のスコープは適切か

今回作成した検証用の環境で動いたが、実際の環境に適用した際に動かなくなった場合はIAMユーザーのポリシーの`Resource`のスコープを確認しましょう。テスト用のバケットのみを指定している場合、他のバケットでは権限の問題でエラーになります。
参考：[複数のアカウントのバケットポリシーの設定](https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-set-bucket-policy-for-multiple-accounts.html)

### yamlファイルのawsコマンドで指定しているパスは適切か

今回のyamlファイルの設定では`/src`ディレクトリ配下のファイルを反映しています。反映するディレクトリのパスが変わる場合、併せてyamlファイルの修正しましょう。
クリスマスだからデータ活用の夢や希望について語るんだ。

メリークリスマス！2022年12月25日ですね。いかがお過ごしでしょうか?
株式会社DATALE 代表取締役 板谷越 (いたやごし) です。こんにちわ。

さて、Qiitaで投稿するのは初です。
最初で最後になるかもしれませんが、クリスマスなので、データ活用の夢や希望について、限りなくポエミィに語ってみたいと思います。

# はじめに
**本書はポエム**なので、構造的なノウハウ的ネタは一切含まれておりません。
比較的泡の出るお酒あたりを片手に、**ふわっ**と読んで頂ければと思います。

# データ活用、って聞いて
皆さん「データ活用」って聞いたり、声に出したりしたときどんな顔してますか?
丹田あたりに力入ってしまい、軽く息止めつつ「データ活用…ゥ」みたいになってませんか?
仕事で関わっている人が多いので、ある程度致し方ないのかもしれませんが、
満面の笑みで (ないし微笑んで) 「***データ活用❤（わくわく！）***」ってなって欲しい、って私はいつも思うのです。

# データ活用の歴史、って
データ活用のあけぼの、といっても色々あるのですが、個人的にインパクトがあったのは
ナイチンゲールと統計のエピソードです。本記事はこの話を主題と致します。
[わかりやすい解説①](https://www.stat.go.jp/naruhodo/15_episode/episode/nightingale.html
)
[わかりやすい解説②](https://data.wingarc.com/nightingale-and-statistics-30982)
[書籍：統計学者としてのナイチンゲール](https://amzn.asia/d/7BGjgPq)

詳しくは↑のリンク先を是非読んで頂ければと思いますが、概要をお話します。（漫画チックに語るので、ご容赦を)
クリミア戦争時（1853〜56年）の野戦病院で、一人でも多くの人を救いたいという強い想いを持っていたナイチンゲールさん。しかし現場では、ガンガン人が亡くなっていく、死因も死亡率も記録からして杜撰そのもの。
1850年代のヨーロッパではまだ公衆衛生という概念が確立しておらず、
煙で燻してみたり、ニンニク吊るしてみたり、神に祈ったり、そういう時代です。
元々高い教育を受けていた彼女、 
***これではアカン！！！なんでや･･･なんでこんなに亡くなってしまうのや！！*** 
と思ったのでしょう、時期と死亡者数を死因と共に記録を始めました。
以下が有名な「鶏のとさか」グラフです。(正確には、後日お上に訴えるために分かりやすく可視化したグラフ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/80652/196a6e39-f457-40ed-76e8-c8fd99866e9b.png)

色が死因を示しており、
赤：戦闘で死亡
黒：その他の原因で死亡
青色：伝染病で死亡 (予防もしくは軽減可能な死因)
なのですが、さて、皆さん、グラフ見て･･･何か気づきましたか?
そう、***相当量の人間が、戦闘そのものではなく、怪我から発症した伝染病で、その命を落としていた***のです。
「なぜ伝染病が感染するのか?」
ベッド別の記録から「近くの人が感染する」「何故･･･?」
色々なことを現場で試すのですが、最も効いたのが、看護師自身と周辺の『殺菌的行為』でした。
使ったガーゼ等は煮しめる、看護師の手をしっかり洗う、髪の毛を落とさない、等。

***結果、4割以上もあった傷病兵の死亡率は、1割以下へと劇的に減少。***

今ではナースの象徴になっている「帽子みたいなもの」は、
おしゃれではなく、「衛生概念」を直接的に表現したものなのです。***熱い！***

# ナイチンゲールの目に、何が映っていたのか
ここからは完全に想像なのですが、
きっと彼女の胸にあったのは、「***助けたい、助かって欲しい***」というシンプルな想いで、
その目には、「***眼の前の事実と、その先にきっとある希望***」を映していたはず。
（絶対原因があるハズや･･･、事実から観察するんや、諦めへん、諦めへんでーー！！！みたいな）
そして、必死で記録し、仮説を立て、実行し、観察し、改善し、最後「可視化」で国と歴史を動かした。(※1)

# 「ナイチンゲール、スゲェ！」
というこの話は1850年代の話でしたが、2022年の現代でも、何も本質は変わってないと思います。
今この記事を読んでいる皆さん、データの先に何を願いますか?何をその目に映しますか?
目に見えるデータ、まだ目に見えないデータ、その先の未来が、願いと希望に満ちたものになることを祈りつつ、筆を置きます！
***メリークリスマス！！！！***


[筆者のTwitter ※フォローしてもらえるとめっちゃ喜びます。](https://twitter.com/hogeitayan)


※1
彼女自身、直接ヴィクトリア女王に接見できる身分だったり、知人の夫が当時の戦時大臣だったりしたこともあり、ではありますが、最終的に公衆衛生に関して国を動かしたのは、前述の「鶏のとさか」グラフ等のレポートでした。
mlagents-learnをすると「AttributeError: module 'numpy' has no attribute 'float'」と怒られる

#### 現象（あらすじ）
前回の記事の続き

https://qiita.com/magical-yaya/items/235fa1d248c7ea608bb8

でインストールできてウキウキまじかるであったが、また足止めを食らったのであった

#### 環境
MacBook Pro （Apple M1 Pro)
iTerm

#### 結論
numpyをアンインストールして
numpy 1.19 をインストールする

#### 方法
```
pip uninstall -y numpy
pip install numpy==1.19
```

#### 原因・補足
どうやらml-agentsが利用している、numpyのバージョンにfloatというattributeが存在しないらしい
現在インストールされているバージョンは、numpy 1.24.0だったのでバージョンを下げることで対応しました

https://github.com/numpy/numpy/releases

##### そもそも、Numpyとはなんぞや？
> AI(人工知能)の進化によって近年注目度を増しているのが機械学習という、コンピューターに学習させる技術です。そして、Pythonでの機械学習の計算をより速く、効率的に行えるようにする拡張モジュールが「NumPy」です。

https://udemy.benesse.co.jp/data-science/ai/python-numpy.html

らしいです
M5Stack用SCD40搭載CO2ユニットを用いて、デスク周りのCo2濃度を可視化する

## 動機
・ちょうど先日Co2センサーを購入した際に、シンプルなサンプルコードがなくて自作したので、せっかくなので投稿
・アドベントカレンダーに空きがあるのも見つけたので、カレンダーとしても投稿。
＞＞[M5Stack Advent Calendar 2022](https://qiita.com/advent-calendar/2022/m5stack)

## 完成物
・モニター脇とスマホ画面(Ambient）からCo2濃度が確認できる。
<img width="100" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/9d20fc68-d67f-0d8f-8a60-654c4e973900.png">
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/360ba3cc-64be-187e-9c32-920bcd65167e.png">

・Co2濃度が高くなる色が変わる。(通常時、1500ppm以上で黄色、2500ppm以上で赤色)
<img width="150" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/a06dc4f1-4136-7d32-19b4-a9198fefc89e.png">
<img width="150" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/aa5be132-b221-b282-d9f0-434af7de22fb.png">

・LINEでCo2濃度が高すぎたときは通知もできる！
<img width="150" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/c303144b-8220-ff5f-9a8f-3148fa3a0606.png">


## 使ったCo2センサー
<img width="300" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/a1403eda-e998-a0f4-91b5-f28d0819bec9.png">


## 構成
### ハードウェア
・[M5stackC Plus](https://www.switch-science.com/products/6470)
・[M5Stack用SCD40搭載CO2ユニット](https://www.switch-science.com/products/8496)

### ソフトウェア
・[M5Burner](http://docs.m5stack.com/en/download)
・[UIFLOW](https://flow.m5stack.com/)
・[Ambient(Co2濃度可視化用)](https://ambidata.io/)
・[IFTTT(LINE連携用)](https://ifttt.com/explore)

## コード
<img width="600" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/498912/a3e3bbb0-9008-5841-cacf-1bfc297b9115.png">


## Githubにも上げました。(UIFLOWのm5f形式)
・ご自身で使用なさる場合は、WifiとIFTTT部分は適宜書き換えてください。
https://github.com/kawasaki3/M5stack_Co2

## 詰まったポイント
・AmbientとEzData（M5stack社製データ可視化ツール）を同時に使おうとすると、ハードウェア側でエラーが発生してしまうこと。どう回避すればいいんだろ？

## 最後に
換気も自動でやりたいから、家のデジタルツイン作って、アクチュエータと連動させても面白そう。
JavaScriptについて


# はじめに
この記事は[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)です。
このカレンダーでは、なんとなくわかった気になっている、Webの知識をおさらいするカレンダーです。
興味をもし持ってくださった方は、購読いただけると嬉しいです！

今回はJavaScriptについて説明します！

## JavaScriptとは
Webページで複雑な機能を提供するためのプログラミング言語です。
HTMLで、文書の構造を示し、CSSで見た目を装飾し、JavaScriptで動きをつけます。

例えば、
Qiitaでいいねボタンを押すと即座に数字が反映されたり、通知が届いたりするのはJavaScriptの機能を使用して実現されています。

JavaScriptはECMAScriptという標準規格によって基本的な使用が決められています。
かつて、ブラウザによって仕様の違いが大きく、統一するためにECMA Internationalという団体によってこの標準規格が作成されました。

JavaScriptの規格のバージョンをES5, ES6などと表現することもあるので、覚えておきましょう。

この規格のバージョンが対応されているかによって、同じ処理でも書き方が違ったり、ブラウザによっては動かなかったりすることもあるので、
注意しましょう。

[Can I use](https://caniuse.com/)というサイトでブラウザの対応状況を見ることができるので、そちらからチェックしてください。


### 読み込み方法
`<script>`タグを使用します。
下記のように直接囲んで読み込むやり方と`<script src="js/hoge.js"></script>`のように、ファイルを読み込むやり方があります。

```javascript
<script>
 alert('hello world')
</script>
```

### JavaScriptを覚えていく上で
JavaScriptは色々できるので、学習を始める際に、何をしたらいいんだろう？と最初はなるかと思います。
個人的にまずここから試していくと良いと考えているのは、DOM操作です。
(DOMについては[こちら](https://qiita.com/yutaroud/items/1faf3288d2ce3d835654)で説明しているので、参照ください)

文字の色を変えたり、内容を変えてみましょう。


```html
<p id='hoge'>ハローワールド</p>
```

```javascript
document.getElementById('hoge').innerText = 'ヘローワールド'; // 文字がヘローワールドに変わる
document.getElementById('test').style.color = 'blue' // 文字が青色に変わる;
```

DOM操作に慣れてくると、じゃあこの文字をクリックしたらこういう動きを付けよう、だとか
色々な表現方法を少しずつ取り入れていくことができるようになると思います。
 
# まとめ

以上、JavaScriptについての説明でした！

[Webの基礎をおさらいカレンダー Advent Calendar 2022](https://qiita.com/advent-calendar/2022/basic_review)でした。
興味をもし持ってくださった方は、購読いただけると嬉しいです！

## 参考文献
[JavaScript Primer](https://jsprimer.net/)
2022年最新版！DevContainerを用いて簡単に環境構築

## devContainerを使って簡単に環境構築！

最新のVSCodeではDevConteinerの最初のセットを選ぶところではプログラミング言語ごとのセットを選ぶことができません。必ずShow All Definitionsをクリックしてから使いたいプログラミング言語名（今回はC＃7系を使いましょう）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163357/87653fd9-af60-3394-73f5-a6aff853dd87.png)

ちなみに次回からはターミナルから`devcontairer .`でDevContainerを起動できるようになります。便利。
今回確認したDevContainerで使える言語・フレームワークのリストは以下になります。※はDevConteiner公式ではなく有志が開発・メンテナンスを行っている言語・フレームワークとなります（2022年12月調べ・一部）

インフラ系統
- Ansible
- Kubernetis(Mimikube等）

データ分析・テキスト処理
- Anaconda（Anaconda,Miniconda）
- jekyll
- Julia※
- Bash※
- PowerShell
- Perl※
- R※

Webフロント
- Vue ※
- Elm※

型システムを持っていない（いわゆる動的型）Web系言語
- NodeJS
- Deno※
- PHP
- PyPy※
- Python3
- Ruby（Ruby on Rails の公式は`Ruby on Rails& Postgres`であることに注意）

型システムを持っている言語
- Java(11,8)
- C#(.Net)
- C++
- Go
- Rust

関数型言語
- Haskell※
- F#
- Elixir※

その他
- Azure Functions※
- Dart※
- Swift※

---

DevContainer関連の記事は2つ出しているので是非見てください
https://qiita.com/yuriacats/items/e71b3a774cffc263d527
https://qiita.com/yuriacats/items/c9e1b25172e70e220ea1
OutlookとTimeTreeをPower Automateで連携してみた。～続き～

OutlookとTimeTreeをPower Automateで連携の記事の続きです！

# Power Automateの内容
### 2.TimeTreeから情報を取得
#### 2-4.認証ユーザー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/255d56ad-0fd2-8f59-679a-b72827480a67.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/9d4d681a-a53b-5446-82b2-c0fb5c9895da.png)
HTTPアクションを使い、以下で取得します。
方法：GET
URL：https://timetreeapis.com/calendars/SmnAoo3KkLvw?include=labels,members
ヘッダー：出力(データ型、APIバージョン、認証)

#### 2-5.データの整形
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/5de3b53e-f903-8927-af8e-0f630029fdbb.png)
```
{
  "data": {
    "attributes": {
      "category": "schedule",
      "title": "件名(Outlook)",
      "all_day": false,
      "start_at": "開始時間(Outlook)",
      "start_timezone": "UTC",
      "end_at": "終了時間(Outlook)",
      "end_timezone": "UTC",
      "description": ""
    },
    "relationships": {
      "label": {
        "data": {
          "id": "1234,1",
          "type": "label"
        }
      },
      "attendees": {
        "data": [
          {
            "id": "自分のID",
            "type": "user"
          }
        ]
      }
    }
  }
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/ce934645-5bd5-89e5-9434-3ee8072ca001.png)
タイトル、時間をOutlookに置き換える
title：件名(Outlook)
start_at：開始時間(Outlook)
end_at：終了時間(Outlook)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/a3822cf9-3f33-ca14-a6ad-76f593d07c3e.png)
idに認証ユーザーで取得できる自分のIDを記載
id：自分のID

### 3.フローからTimeTreeへ登録
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/8459ed4c-70fd-3634-e119-ca067baa7ec8.png)
HTTPアクションを使い、以下で追加します。
方法：POST
URL：https://timetreeapis.com/calendars/SmnAoo3KkLvw/events
ヘッダー：出力(データ型、APIバージョン、認証)
本文：出力(Data整形)

# まとめ
HTTPコネクタを使いたくて、HTTPコネクタで情報を取得しましたが、カスタムコネクタを作成して、情報を取得してもいいですねー。
連携したおかげで、登録の手間がなくなったり、ほかの人と共有することもできるので、自分のタイミングで確認できることが、個人的にうれしかったです。
何か手間だなと感じているサービスにAPIがあったら、Power Automateで連携できるので、ぜひ試してみてください。
jQueryについての自分なりの所感

jQueryは以下の2つの側面を有した時代を象徴するJavaScriptライブラリーでありましたがそれぞれ技術の進化によりより良い手段が提供されてしまったがゆえにあまり利用されなくなりました。
- ブラウザ間の仕様の差分を吸収するJavaScriptサブセット
- わかりやすいDomライブラリーのラッパー


## ブラウザの進化

そもそも、なぜjQueryが使われていたのかそれは「ブラウザごとの差分を吸収できる」からでした。しかし~~最新のJSやCSSの仕様に対応せず独自路線を突き切る憎き~~IEのサポートも終了し主要ブラウザは、Chroniumベースもしくは最新仕様に追従しているブラウザのみとなりました。そのことにより「ブラウザ差分を吸収するライブラリー」としてのjQueryは大方役割を終えたといってもよいでしょう。


## 宣言的UIと仮想DOMいう発想

jQueryの時代にはJavaScriptはDOMAPIでDOMを命令的にDOMを扱っていました
それに対しCSS、HTMLは**結果の性質の集まりを扱っていました。** この状況に一石を投じたのがReactというライブラリーです。これはJSXというDOMを扱うDSL(?)によって宣言的にUIを扱うことを可能にしました。宣言的にDOMを扱うことでコードベースで結果のDOMを理解することが容易になりコードの保守性が上がります。これがjQueryとの決定的な差になります。

さて、なぜ宣言的UIができるようになったのでしょうか？それは「仮想DOM」の存在によって宣言的UIの致命的なデメリットであった「命令型よりあまりにもパフォーマンスが悪い」というものを打ち消してしまったからです。「宣言的UIが現実的なパフォーマンスでjavascriptに組み込めるようになった。」この事実がJavaScriptライブラリーというゲームを大きく転換したものだといえるでしょう。

## jQueryは不要なのか

筆者は「歴史的に必要なものであったが役割を終えたライブラリー」であると考えております。なぜならばjQueryは便利なSyntaxをたくさん保有し宣言的なJavaScriptのサブセットとしてはスタンダードの地位を築きました。しかしながら親であるJavaScriptも進化しjQueryの「サブセットの大きさが大きい」という問題がjQueryのメリットを上回ってしまっているように思ってしまいます。
また、宣言的UIというものがあるというものを踏まえて「それでも命令型でしかできないコード」があるとするならばより軽量なJavaScriptのサブセットを使うべきなのかなと思います。その点で「ブラウザロード時にダウンロードする全部入りの大きなライブラリー」はもう終焉が近いのかなと筆者は考えております。
OutlookとTimeTreeをPower Automateで連携してみた。

OutlookとTimeTreeをPower Automateで連携してみたので、その紹介と内容を書いていきたいと思いますー

全体図はこんなもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/ff8edb0b-aebb-cf2a-d4b1-cb6ebdcfbff5.png)

今回は、HTTPを使いました！

# TimeTreeって何？
簡単に言うと、ほかの人とシェアすることができるカレンダーアプリになります。

私が好きな機能紹介
・ 予定がある朝に、今日の予定が通知される
・ 登録が手軽にできる
・ 誰が登録したのか一目でわかる

# 簡単な仕組み
Outlookに予定を入れたら、Power AutomateでTimeTreeに情報を取得しに行き、その取得した情報をもとにOutlookの予定をTimeTreeに登録する
グループ1「Outlookから予定を取得」
```mermaid
graph TD;
    Outlook-->PowerAutomate;
```
グループ2「TimeTreeから情報を取得」
```mermaid
graph TD;
    PowerAutomate-->TimeTree;
    TimeTree-->PowerAutomate;
```
グループ3「フローからTimeTreeへ登録」
```mermaid
graph TD;
    PowerAutomate-->TimeTree;
```
# Power Automateの内容
### 1.Outlookから予定を取得
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/a3967df7-d436-2cf8-0170-6712b1cf037a.png)
Outlookに予定が追加されたら動かしたいので、Outlookのトリガーを使用。
今回取りたい予定が入る場所が予定表なので、予定表を選択しています。

### 2.TimeTreeから情報を取得
#### 2-1.データ型、APIバージョン、トークンを指定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/ad845092-0817-9ffb-f247-1316ba0227c5.png)
データ整形のアクションを使い、TimeTreeのデータ型、APIバージョン、トークンを指定しています。
Content-Typeは、TimeTree API ドキュメントに記載されているアプリケーション/ジェイソンを指定しています。
Acceptは、すべてのAPIリクエストはv1バージョンとして、取り扱われると記載されていますが、明示的に指定することを推奨しているので、追加しています。
Authorizationは、APIリクエストの際に必要な自分のトークンを追加しています。

[データ型：Content-Type](https://developers.timetreeapp.com/ja/docs/api/overview#schema)
[APIバージョン：Accept](https://developers.timetreeapp.com/ja/docs/api/overview#api-versioning)
[トークン：Authorization](https://developers.timetreeapp.com/ja/docs/api/overview#authentication)

#### 2-2.認証ユーザー
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/9d4d681a-a53b-5446-82b2-c0fb5c9895da.png)
HTTPアクションを使い、以下で取得します。
方法：GET
URL：https://timetreeapis.com/user
ヘッダー：出力(データ型、APIバージョン、認証)

#### 2-3.カレンダーリスト
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/404009/d598d54a-9488-4437-aa6c-e17f3f05a7a3.png)
HTTPアクションを使い、以下で取得します。
方法：GET
URL：https://timetreeapis.com/calendars?include=labels,members
ヘッダー：出力(データ型、APIバージョン、認証)

# 次回
まだまだ続きます！
これ作ったおかげで、個人的に便利になった！