OmniAICreator/Qiita-1.07M huggingface dataset:
rex0220 横並びプラグイン 応用例2 年カレンダー

[rex0220 横並びプラグイン](https://qiita.com/rex0220/items/b24c41d6c3b6ce3f3d78)で、テーブルのカレンダーを並べて遊んでみました

# 概要

1年分のカレンダーを3ヶ月分ごとに並べています。
テーブルの行数・日にちの設定は、計算式プラグイン。
土日の色設定は、項目書式プラグインで行っています。

編集画面を開くと、12ヶ月分の計算を行うのでさすがに時間がかかります。
まあレコードを作ったら、編集はしないので問題はないと思います。

![2024-07-16_10h04_14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/cd2bff11-e9b7-e92b-9d84-54c6e2661d61.png)

- ページ全体

![2024-07-16_10h05_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/4bf798bd-3783-2da2-908c-fa2a408653cb.png)

- 編集画面

![2024-07-16_10h08_47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/c613a473-b53b-5057-32b4-bc2590130fc6.png)

# アプリ設定
テーブルコピー後の日～土のフィールドコード設定が面倒でした。

![2024-07-16_10h11_57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/6b889460-17b5-187b-8e26-8f736e9d8d00.png)


# 横並びプラグイン設定

テーブルにすべてチェックを入れて、3ヶ月分毎にテーブル罫線で区切りを入れています。
横並びの設定は、簡単です。

![2024-07-16_10h10_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/100572/5eb7526a-1a7d-aa50-5a95-2a3dea1c863c.png)
picoGym Exclusive writeup Bit-O-Asm-2

## Bit-O-Asm-2 (Reverse Engineering)

Can you figure out what is in the eax register? Put your answer in the picoCTF flag format: picoCTF{n} where n is the contents of the eax register in the decimal number base. If the answer was 0x11 your flag would be picoCTF{17}. Download the assembly dump here.

添付ファイル
・disassembler-dump0_b.txt

disassembler-dump0_b.txtをテキストエディタで開く。
```
<+15>:    mov    DWORD PTR [rbp-0x4],0x9fe1a
<+22>:    mov    eax,DWORD PTR [rbp-0x4]
```
rbp-0x4のところに0x9fe1aがあって、さらにそれをeaxに格納している。よって、eaxレジスタには0x9fe1a(654874)が入っている。

`picoCTF{654874}`
picoGym Exclusive writeup Bit-O-Asm-1

## Bit-O-Asm-1 (Reverse Engineering)

Can you figure out what is in the eax register? Put your answer in the picoCTF flag format: picoCTF{n} where n is the contents of the eax register in the decimal number base. If the answer was 0x11 your flag would be picoCTF{17}. Download the assembly dump here.

添付ファイル
・disassembler-dump0_a.txt

disassembler-dump0_a.txtをテクストエディタで開く。
```
<+15>:    mov    eax,0x30
```
eaxに0x30を移動させている(格納している)ので、eaxレジスタには0x30(48)である。

`picoCTF{48}`
【SCS-C02】AWS歴2年目の元アプリコンサルがSCSに合格した話

# はじめに
はじめまして。
この度、AWS Certified Security-Specialty（SCS-C02）に無事合格しましたので
備忘も兼ねて受験記録を残したいと思います。

#### この記事が想定している読み手は誰か
・SAAを取得しており、次にどの資格を取得するか悩んでいる人
・初めてSpecialty資格に挑もうとしている人
・SCSに挑みたいけどどう勉強すればよいか不安な人

#### 筆者について
・入社7年目
・入社後はアプリ導入の部署にいたが入社5年目の末に現在の部署へ異動
　※異動してから初めてAWSに触れたため、AWSの実務経験自体は入社2年目相当
・取得済みのAWS資格はSAA（2023年5月合格）のみ

#### なぜ先にAWSアソシエイト3冠を目指さなかったか
既にアソシエイト3冠を達成している人が現部署に多く、しかも3冠達成者の殆どが筆者より社歴が若い方ばかりのため
折角であればアソシエイト3冠は目指さず、より難易度の高い方へ最初から挑んでみるのもアリでは？と思ったのが一番の理由です。
元々はSAPを受けようとしていたものの、範囲が広く深度も深く~~心が折れたため~~Specialtyの中でも比較的易しいと言われているSCSに早々と切り替えました。

# 勉強時間や勉強方法について
1ヶ月弱
内訳:平日30分～1時間、休日2~5時間

メインは過去問演習やBlack Beltの確認に、通勤時間はUdemy視聴に充てました。
以下のコースが分かりやすかったです。
[AWS認定Specialty – Security（SCS-C02）試験 対策トレーニングコース](https://www.udemy.com/share/108B1E/ "AWS認定Specialty – Security（SCS-C02）試験 対策トレーニングコース")

ある程度サービスに関する理解を深められたら、[AWSの公式問題集](https://explore.skillbuilder.aws/learn/course/internal/view/elearning/15232/aws-certified-security-specialty-official-practice-question-set-scs-c02-japanese "AWS 認定セキュリティ - 専門知識の公式練習問題集")やUdemyの模擬試験集を周回していました。

# 重点的に勉強したトピック
個人的によく引っかかっていたのがKMSやIAMでした。
### **KMS**
#### ①カスタマーマネージドキーとAWSマネージドキーはどう使い分けるか
[キーのローテーションや管理主体の要件が問題文に記載されているはずなのでそこから判断する](https://docs.aws.amazon.com/ja_jp/kms/latest/developerguide/concepts.html#key-mgmt)
#### ②KMSとCloudHSMはどう使い分けるか
コンプライアンス要件がある場合やFIPS140-2レベル3への準拠が必要な場合はCloudHSMが正解

細々とした箇所は下記の記事を参考に復習を繰り返しました。

https://qiita.com/matuumo/items/f7022bed7af4e4ac7674

https://qiita.com/aminosan000/items/43c8b63dd02aa0552657

### **IAM**
#### ①明示的な拒否＞明示的な許可
[ポリシーの評価論理](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)にも記載されてる通り、アクセス許可判定においては明示的な許可（Allow）より明示的な拒否（Deny）が優先される
#### ②属性ベースのアクセス制御（ABAC）とロールベースのアクセス制御（RBAC）の使い分けについて
「リソースの増減が発生するたびにアクセス許可ポリシーを都度更新したくない」といった要件が含まれる場合は属性ベースのアクセス制御（ABAC）を使うのが望ましい
#### ③リソースへのアクセス・操作時に多要素認証（MFA）を強制するには
[AWSの情報センター](https://repost.aws/ja/knowledge-center/enforce-mfa-other-account-access-bucket)に記載がある通り、MFAデバイスによる認証を要求する条件をポリシーに追加する必要がある
Condition要素の書き方は覚えておかないとキツいかも？

https://qiita.com/aminosan000/items/49d11f95529907cee1dc

他にも、ポリシーやSCPの記述に関する問題が一定数出てくるのですが
SCPではPrincipalやNotPrincipal要素が使えない点など
落とし穴が多くかなり理解するのに時間がかかりました。
JSONの中身に関する出題は慣れの問題もありますし、何度も解いて覚えるしかないと思います。特に普段業務の中でJSONを扱わない方は猶更ですね。

また、SAAに比べると日本語での学習教材がかなり少ないので
英語版のコンテンツをフル活用する重要性を痛感しました。
長らく英語に触れていないのもあり、翻訳機能に終始助けられてばかりでした…。

# 結果
平日午前中にテストセンターで受験し、当日の19時頃にメールで結果が届きました。
合格ラインが750点/1,000点のところ結果は799点でした。ギリギリ。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3828605/51122b26-48da-9f6a-34b9-453f8ba53a9b.png)

試験時間は180分と結構余裕がありますので
既存知識でどうにもならなそうな問題や捨て問、回答に迷った問題は全て後で確認するフラグを付け
見直しのタイミングでじっくり確認するのが安牌かと思います。
筆者の場合、後から見返したら全体の4割近くにフラグが立ってました。
見直しに重点的に時間をかけたものの、時間切れになることはなく残り30分になったタイミングで退出できました。
時間配分でミスすることはあまりないかと思います。

# 今後について
AWSのよくある質問に記載されているロードマップに沿ってANS-C01を目指すか、
初志貫徹でSAP-C02にリベンジするか考えている最中です。
また何か合格したら受験体験記は書いてみようと思います。

拙文ではありますがお読みいただきありがとうございました。
[Flutter]Android Studioでエミュレーターを起動させようとすると"Unable to locate adb"が出る

## 初めに
　Flutterで開発したいアプリを思いついたが数年ぶりに触るので公式ドキュメントからVisual studioで作成しようとしたところつまづいたので備忘として。

## 現象
　公式ドキュメントに従ってVisual studioでエミュレータを起動しようとすると、画面が真っ暗なエミュレータが表示され、main.dartを実行するとエラーが発生してしまう、、

## 調査
　エラーログをググるといくつかヒットするが試してみてもうまくいかないため、そもそもAndroid studioで起動するか確認してみた。
→Android studioからでも起動せず、「Unable to locate adb」が表示された。

## 解消方法
　↓の記事で解決できた！
　https://teratail.com/questions/276597

 調査だけで半日ほど費やしてしまった、、基礎知識がないとエラーログをググるだけになってしまうのでそれぞれの用語も勉強しておく
第2期GIGAスクールに向けた Microsoft 365 運用管理ガイド | 第1章 GIGAスクール構想

[序章 ←](https://qiita.com/hisaho/items/b477f6ec8d181fb123eb)　　[→ 第2章 Microsoft 365](https://qiita.com/hisaho/items/d27ef3a813984359c3f0)

# 第1章 GIGAスクール構想

## 1.1 第1期GIGAスクール構想の概要

GIGAスクール構想第1期は、全ての児童生徒にICT環境を提供し、教育の質を向上させることを目的として、2020年度に開始されました。この構想は、日本全国の学校においてICTを活用した学習環境を整備するという大規模なプロジェクトであり、教育のデジタル化を推進する重要なステップとなりました。政府と自治体、学校が連携し、短期間で膨大な数の端末とネットワークインフラを整備するという、前例のない取り組みでした。

GIGAスクール構想の背景には、21世紀に求められる新たな学力観や社会の変化に対応するための教育改革の必要性がありました。デジタル技術を活用することで、児童生徒が主体的に学び、創造性を発揮できる環境を整備することが狙いです。さらに、教育の機会均等を実現し、地域格差を縮小するための手段としても位置づけられました。

## 1.1 第1期での主要な取り組みと成果

### 全児童生徒への1人1台端末の配布

GIGAスクール構想第1期の最大の成果の一つは、全ての児童生徒に対して1人1台の端末を配布したことです。この取り組みにより、児童生徒は家庭でも学校でも学習を続けることができ、学びの環境が大幅に拡充されました。特に、新型コロナウイルス感染症の影響でリモート学習が必要となった際に、この取り組みは大いに役立ちました。端末の配布により、オンライン授業やデジタル教材の利用が可能となり、学習の継続性が確保されました。

さらに、端末の利用は単にリモート学習にとどまらず、日常の授業においても活用されるようになりました。例えば、児童生徒は調べ学習やプレゼンテーション、プログラミングなど、さまざまな活動で端末を使用することができました。これにより、学習の幅が広がり、児童生徒の興味や関心に応じた学びが実現されました。

### インターネット接続環境の整備

また、学校における高速インターネット接続の整備も進められました。これにより、オンライン授業やデジタル教材の利用がスムーズに行えるようになり、ICTを活用した教育活動が一層促進されました。インターネット接続環境の整備は、GIGAスクール構想の重要な要素であり、学校内のネットワークインフラの充実が図られました。

具体的には、学校のWi-Fi環境の整備や、クラウドサービスの利用が進められました。これにより、教員と児童生徒がリアルタイムで情報を共有し、協働して学ぶことができる環境が整いました。また、遠隔地の学校間での連携や、外部の専門家によるオンライン授業の実施など、教育の可能性が広がりました。

## 1.2 第1期目で見えてきた課題と学び

### 技術的な課題

第1期では多くの成果が得られた一方で、技術的な課題も浮き彫りになりました。例えば、端末の設定や管理、トラブルシューティングなどに時間と労力がかかることが明らかになりました。多くの学校では、教員がこれらの技術的な問題に対応するために多大な労力を割かねばならず、本来の教育活動に集中する時間が減少するという問題が発生しました。

また、インターネット接続の安定性やセキュリティの確保といった面でも改善の余地があることが分かりました。特に、ネットワークの負荷が増大する中で、安定した接続を維持することが難しく、セキュリティ対策の強化が求められました。これにより、次期構想に向けては、技術支援や運用サポートの充実が必要であることが認識されました。

### 教育現場での運用課題

教育現場での運用に関しても、教員のICTスキルの向上や、端末を活用した効果的な授業の実施方法についての課題が見えてきました。多くの教員は、ICTを活用するためのスキルや知識が不足しており、研修やサポート体制の強化が必要であると感じました。また、児童生徒のICTリテラシー向上も重要な課題として認識されました。

さらに、端末を活用した授業の計画や実施において、効果的な教材や活動の設計が求められました。これにより、教員同士の情報共有や連携が重要となり、ベストプラクティスを共有するための仕組みが必要です。また、保護者や地域との連携も強化され、家庭と学校が一体となって児童生徒の学びを支える体制が求められました。

## 1.3 第2期目に向けての展望

### 教育改革に向けた定量的なKPIが公表

文部科学省は令和6年4月22日のデジタル行財政改革会議(第5回)で[**「子供たちと教師の力を最大限に引き出すためのデジタルを活用した教育の充実」と題した資料**](https://www.cas.go.jp/jp/seisaku/digital_gyozaikaikaku/kaigi5/kaigi5_siryou4.pdf) を公開しました。この資料では教育DXの推進やオンライン教育、民間人材の活用などが取り上げられています。具体的な取り組みとして、以下のポイントが挙げられています。

|達成目標|達成率|
|---|---|
|指導者用端末の整備|64.6%(R4)→100%(R6)|
|予備端末の整備|→80%(R7)→100%(R10)|
|インターネット接続環境の整備|97.8%(R4)→100%(R6)|
|十分な回線速度の確保|35.7%→100%(R7)|
|クラウド利用を前提としたセキュリティポリシーガイドラインの策定|49.1%(R5)→100%(R7)|
|クラウドを活用した校務DXの推進|5.5%(R5)→100%(R8)|
|FAX、押印の廃止|1.1%(R5)→100%(R7)|
|校務での生成AI活用|1.2%(R5)→50%(R7)|
|次世代校務システムの導入検討|63.4%(R5)→100%(R8)|
|児童生徒の端末の活用率(週3回以上)|小: 90.6%(R5)→100%(R6)、中: 86.5%(R5)→100%(R6)|
|デジタル教科書の活用|40.5%(R4)→80%(R8)→100%(R10)|

また ➊ 個別最適・協働的な学びの充実 ➋ 情報活用能力の向上 ➌ 学びの保証 ➍ 働き方改革への寄与 に関するアウトカムのKPIも設定されています。

これらの取り組みにより、子供たちと教師の学びや指導の質を向上させ、持続可能な教育環境を構築していくことが目指されています。

第2期GIGAスクール構想では、端末の買い替え以外にもこれらのKPIを達成するための施策をも考慮する必要があります。


[序章 ←](https://qiita.com/hisaho/items/b477f6ec8d181fb123eb)　　[→ 第2章 Microsoft 365](https://qiita.com/hisaho/items/d27ef3a813984359c3f0)
picoGym Exclusive writeup Picker I

## Picker I (Reverse Engineering)

This service can provide you with a random number, but can it do anything else? Connect to the program with netcat: $ nc saturn.picoctf.net 51123 The program's source code can be downloaded here.

添付ファイル
・Picker-I.py

とりあえず`nc saturn.picoctf.net 51123`を実行してみる。
```
> nc saturn.picoctf.net 51123
Try entering "getRandomNumber" without the double quotes...
==> getRandomNumber
4
```
指示通りに入力したら4が出てきた。
ソースコードを見てみる。
```python
def getRandomNumber():
  print(4)
```
という部分を見つけた。ユーザ定義関数を入力すると、そのまま実行されるらしい。フラグが出てきそうな関数を探すと、
```python
def win():
  # This line will not work locally unless you create your own 'flag.txt' in
  #   the same directory as this script
  flag = open('flag.txt', 'r').read()
  #flag = flag[:-1]
  flag = flag.strip()
  str_flag = ''
  for c in flag:
    str_flag += str(hex(ord(c))) + ' '
  print(str_flag)
```
という部分を見つけた。もう一度実行して`win()`と入力する。
```
> nc saturn.picoctf.net 51123
Try entering "getRandomNumber" without the double quotes...
==> win()
0x70 0x69 0x63 0x6f 0x43 0x54 0x46 0x7b 0x34 0x5f 0x64 0x31 0x34 0x6d 0x30 0x6e 0x64 0x5f 0x31 0x6e 0x5f 0x37 0x68 0x33 0x5f 0x72 0x30 0x75 0x67 0x68 0x5f 0x63 0x65 0x34 0x62 0x35 0x64 0x35 0x62 0x7d
```
hexが出てきたのでutf-8に変換。
フラグが得られた。

`picoCTF{4_d14m0nd_1n_7h3_r0ugh_ce4b5d5b}`
ORACLE MASTER Gold DBA【合格体験記】

## はじめに
上司にORACLE MASTER Gold DBAを取得してほしいと言われたので受けることにしました。
## 準備期間
2.5ヵ月

## 勉強方法
[オラクルマスター教科書 Gold DBA Oracle Database AdministrationII](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8-Gold-Oracle-Database-AdministrationII/dp/479817436X/ref=rw_dp_pbnx_fo_thb_6)を七周読みました。
[oracle社のブログ](https://blogs.oracle.com/oraclemaster/)も参考になりました。


## 試験の感想
[オラクルマスター教科書 Gold DBA Oracle Database AdministrationII](https://www.amazon.co.jp/%E3%82%AA%E3%83%A9%E3%82%AF%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%E6%95%99%E7%A7%91%E6%9B%B8-Gold-Oracle-Database-AdministrationII/dp/479817436X/ref=rw_dp_pbnx_fo_thb_6)の巻末問題より難しく感じました。
またオンライン受験をしたのですが、試験途中にトイレへ行けなかったのがしんどかったです。

## 反省点
座学8割で勉強してしまったので、実務ですぐ役に立つかといわれると正直厳しいです。もう少し実機を用いて勉強するべきでした。
また試験中に細かい違いなどが分からなかったりしたので、違いをひかくできるようにノートなどにまとめれば良かったです。

## おわり
次はデータベーススペシャリストに挑戦してみたいです。
ReacTalk #アプリ開発


![](https://yuis.xsrv.jp/images/ss/ShareX-240716T010932-jiSC84qP.gif)

↑ 操作感

![](https://yuis.xsrv.jp/images/ss/ShareX-240716T011828-x78psWbh.gif)

↑ 使用感

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/170548/01c9f36d-7775-b03a-2914-0dddae533052.png)

![](https://yuis.xsrv.jp/images/ss/ShareX-240716T013641-9mXbjAHY~chrome-ReacTalk_-_Google_Chrome.png)

↑ 外観 

とり急ぎのシェアですので、あしからず。

### 技術スタック

- Nginx, Mongo, Next.js v12, React.js, etc.

全集中の呼吸を維持しながら３日で作りました

[https://reactalk.com/](https://reactalk.com/?qt)

### 実装済み

- トーク機能, ユーザ登録, ユーザページ, プロフィール更新, トーク履歴, トーク編集

### 未実装

- フォロー等, いいね等, コメント等, トーク検索
- （モバイル）ユーザフレンドリーなビルダーの実装

### 免責

ただいま完全無保証でのご提供になります。
第2期GIGAスクールに向けた Microsoft 365 運用管理ガイド

# 目次

- [序章](https://qiita.com/hisaho/items/b477f6ec8d181fb123eb)
- [第1章 GIGAスクール構想](https://qiita.com/hisaho/items/b0c9dc567ce06abb6033)
- [第2章 Microsoft 365](https://qiita.com/hisaho/items/d27ef3a813984359c3f0)
- [第3章 アカウント管理](https://qiita.com/hisaho/items/86a2f144954fcc70bf61)
- [第4章 デバイス管理]
第2期GIGAスクールに向けた Microsoft 365 運用管理ガイド | 序章

# 序章

## 本書の目的と範囲

本書は、Microsoft 365を教育現場で効果的かつ安全に運用するための情報を提供することで、GIGAスクール構想の推進をサポートすることを目的としています。本書では、教育委員会、学校、システムインテグレーター（SIer）の関係者がMicrosoft 365の導入から運用、管理までの一連のプロセスを理解し、適切に実施するための具体的な方法と推奨される設定を詳細に説明します。

本書の目的は以下の通りです。

- **安全な運用の確立**
- Microsoft 365を使用する上で必要なセキュリティ設定やポリシーを確立し、児童生徒の個人情報を保護します。
- **運用効率の向上**
システム管理者が効率的に運用管理を行うためのベストプラクティスを提供します。
- **教育の質の向上**
教育現場でのMicrosoft 365の活用方法を示し、ICTを活用した教育の質を向上させます。
- **トラブルシューティングの支援**
よくあるトラブルや課題に対する解決策を提供し、スムーズな運用をサポートします。

本書は以下の範囲をカバーします。

- Microsoft 365の導入手順
- 初期設定とセキュリティ設定
- 利用者管理とアクセス制御
- データ保護とプライバシー管理
- 運用管理のベストプラクティス
- トラブルシューティングとサポート

## 対象読者

本書は主に以下の読者を対象としています。

- **教育委員会**
各学校のICT環境整備を担当し、Microsoft 365の導入と運用を統括する担当者。
- **学校**
実際にMicrosoft 365を使用する教師やシステム管理者、技術サポート担当者。
- **システムインテグレーター（SIer)**
- 教育委員会や学校と連携してMicrosoft 365の導入支援、運用サポートを行う技術専門家。

各読者層に対して、実践的でわかりやすい情報を提供し、それぞれの役割に応じた具体的な手順や設定方法を示します。これにより、各現場でのMicrosoft 365の効果的な活用を支援し、GIGAスクール構想の成功に寄与することを目指します。

----
[目次 ←](https://qiita.com/hisaho/items/8454cbf764b799301e25)　　[→ 第1章 GIGAスクール構想]()
unzip: 文字化け対策

こちらと同じことを行いました。
[unzipコマンドで日本語が文字化けした際の文字コード指定](https://qiita.com/daijinload/items/c2e5d3c7c62c3866ae07)

## 問題の再現

```text
$ unzip お見積り用資料.zip
Archive:  お見積り用資料.zip
  inflating: ВиМйР╧ВшЧpОСЧ┐/BLEГВБ[ГhТ╩РMОdЧl.pdf  
  inflating: ВиМйР╧ВшЧpОСЧ┐/ESP32ВЁЧШЧpВ╡В╜LEDУ_УФFWКJФнВ╔В┬ВвВ─.pdf  
  inflating: ВиМйР╧ВшЧpОСЧ┐/ESP32ГsГУГAГTГCГУ_LED_FW.xlsx  
 extracting: ВиМйР╧ВшЧpОСЧ┐/first.zip
 ```

 ## 解決策

 ```bash
 unzip -O sjis お見積り用資料.zip
 ```

実行結果

 ```text
$ unzip -O sjis お見積り用資料.zip
Archive:  お見積り用資料.zip
  inflating: お見積り用資料/BLEモード通信仕様.pdf  
  inflating: お見積り用資料/ESP32を利用したLED点灯FW開発について.pdf  
  inflating: お見積り用資料/ESP32ピンアサイン_LED_FW.xlsx  
 extracting: お見積り用資料/first.zip
 ```

 ## 確認したバージョン

 ```text
 $ unzip -v
UnZip 6.00 of 20 April 2009, by Debian. Original by Info-ZIP.
```
[Rails] any?メソッドとは？をまとめた

# any? メソッドとは
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/any=3f.html

配列の要素が、全て**偽**の場合、`false`を返します。
一つでも**真**の要素があれば、`true`を返すメソッドになります。

# 例

```rb
p [nil, true, 99].any? # => true
p [nil, false, 99].any? # => false
```

# ブロックを使用する
ブロックを伴う場合は、各要素に評価され、全て**偽**の場合、`false`を返します。
評価の時点で真を返した時点で、`true`を返します。

```rb
p [5, 10].any? {|v| v > 20 } # => false
p [5, 10].any? {|v| v > 6 } # => true
```


# 引数を使用する
引数を渡して、処理することもできます。

ブロックと同じで、引数で渡したオブジェクトと各要素が一致するか評価され、全て**偽**の場合、`false`を返します。
評価の時点で真を返した時点で、`true`を返します。

```rb
p [false, 100].any?(String) # => false
p ['test', 100].any?(String) # => true
```

## 正規表現も引数で渡せる
引数で、正規表現も使用することができます。
評価は、上記と変わらないです。

```rb
p ['hoge', 'fuga'].any?(/\d/) # => false
p ['hoge', '999'].any?(/\d/) # => true
```

# まとめ
要素を評価して、真偽値を返してくれる、非常に便利なメソッドになります。
おそらくRailsでは、if文などの条件式に使用することが想定されます。

皆さんの参考になれば、幸いです。
最後までご覧いただき、ありがとうございました。

# 参考文献
https://docs.ruby-lang.org/ja/latest/method/Enumerable/i/any=3f.html

https://pikawaka.com/ruby/any
mm vbaの基本 任意のシートの任意の列の値を別のシートの各行に数行間隔で貼り付け

・Sheet3のB列(1行目から5行目)の値をSheet4のA列に6行間隔毎で張り付ける。
```vba:qiita.bas
Sub CopyAndPasteWithInterval()
    Dim sourceWs As Worksheet
    Set sourceWs = ThisWorkbook.Sheets("Sheet3") ' コピー元のシート

    Dim targetWs As Worksheet
    Set targetWs = ThisWorkbook.Sheets("Sheet4") ' 貼り付け先のシート

    Dim sourceRow As Integer
    Dim targetRow As Integer
    Dim i As Integer

    sourceRow = 1 ' コピー元の開始行
    targetRow = 2 ' 貼り付け先の開始行

    For i = 0 To 4 ' 0から4までのループで、合計5行分を処理
        sourceWs.Cells(sourceRow + i, 2).Copy ' B列のsourceRow+i行目をコピー
        targetWs.Cells(targetRow, 1).PasteSpecial Paste:=xlPasteAll ' A列のtargetRow行目に貼り付け

        targetRow = targetRow + 6 ' 次の貼り付け先行は現在の行から6行後
    Next i

    Application.CutCopyMode = False
End Sub
```
バージョン管理の大切さを改めて実感したお話

# はじめに

顧客毎に環境を運用しているのですが、環境数が増えてくるとリリースの日程調整やリリース状況を管理する必要が出てきました。

# バージョン管理できていないとこうなる(一部)
- リリース時の手順を思い出すのに時間がかかったり想定外の作業が発生することにより、作業時間を多めに取っていたにも関わらずギリギリになってしまう



# 管理表にまとめている項目(一部)

- この環境はどのバージョンまでリリースしているのか

- 次のリリース予定日は調整できているのか

- リリースをする際に追加で必要な作業はあるのか、ある場合は手順書を載せておく


# おわりに
複数の環境を運用しているとバージョン管理の大切さを実感できました。
mm vbaの基本 列のコピー ペースト 挿入

- vbaで任意の列を複数列に張り付けたい場合(書式ごと）

```vbs:qiita.bas
Sub CopyAndPasteManyColumns()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet1") ' "Sheet1"を操作対象のシート名に変更してください

    Dim sourceColumn As String
    sourceColumn = "B" ' コピー元の列（例: "A"列）

    Dim startColumn As Integer
    startColumn = 2 ' 開始列のインデックス（B列は2）

    Dim numColumns As Integer
    numColumns = 10 ' コピーする列数

    Dim i As Integer
    For i = startColumn To startColumn + numColumns - 1
        ws.Columns(sourceColumn & ":" & sourceColumn).Copy
        ws.Columns(i).PasteSpecial Paste:=xlPasteAll
    Next i

    Application.CutCopyMode = False
End Sub

```

- vbaで任意の列を複数列に挿入したい場合

```vbs:qiita.bas
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Sheets("Sheet2") ' "Sheet2"を操作対象のシート名に変更してください

    Dim sourceColumn As String
    sourceColumn = "B" ' コピー元の列（例: "A"列）

    Dim startColumn As Integer
    startColumn = 3 ' 開始列のインデックス（B列は2）

    Dim numColumns As Integer
    numColumns = 10 ' 挿入する列数

    Dim i As Integer
    For i = startColumn To startColumn + numColumns - 1
        ws.Columns(sourceColumn & ":" & sourceColumn).Copy
        ws.Columns(i).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Next i
    'クリップボートのクリア
    Application.CutCopyMode = False
```
【Figma Widget】Figma Widgetで非同期処理を行う

## はじめに
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/390720/47be7427-1cba-0c67-4dd4-613b73c504bf.png)

みなさんは、Figma Widget を開発する際、非同期処理を行いたいと思ったことはありますか？

この記事では、Figma Widgetで非同期処理を行う方法について解説しようと思います。

## 非同期処理を行う

非同期処理を行うには、`waitForTask` という関数を使う必要があります。

`waitForTask` 関数は、引数に `Promis` を受け取り、`Promis` が解決されるまでウィジェットを維持します。

```ts
waitForTask(task: Promise<any>): void
```

`waitForTask` 関数の主な使用方法は、ウィジェットが挿入されたときにデータをフェッチすることです。
`useEffect` と組み合わせることで、iframe 経由でネットワークリクエストを行い、その応答をウィジェットの状態に保持できます。 

### 使い方
`waitForTask` 関数は、以下のように引数に `Promis` を渡します。
```tsx
waitForTask( new Promise(() => {
  /* 非同期処理 */
}))
```

## まとめ
この記事では、Figma Widgetで非同期処理を行う方法について解説しました。
ぜひこの記事を参考に、Figma Widgetで非同期処理を行なってみてください！

---

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

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

https://twitter.com/degudegu2510
値のコピペには気を付けよう

# はじめに
値の末尾に改行が入っていたことにより発生したエラーの解決に3日かかってしまったのでここで供養しておきたいと思います。

詳しいお話はこちらの記事で取り上げています。

https://qiita.com/does_not_exist/items/69531ee8c2d5e0ee9e8e

# 状況

①AWS SystemsManagerのパラメータストアにスクリプトで値を登録
②serverless deployを実行
③エラー：Unable to fetch information about "domain name"
The security token included in the request is invalid.

という状況でした。

トークンが不正でAPI Gatewayのカスタムドメインを取得できないよ、というエラーだったのでクレデンシャルや権限周りをひたすら確認していましたが、結果的にはパラメータストアに登録したカスタムドメインの値の末尾に改行が入っていたことが原因でした。

# なぜ改行が？

スクリプトを作成する際、パラメータストアに登録したい値をコピペでもってきていたようなのですがそのタイミングで改行が入ってしまっていたようでした。


# おわりに
登録した値が正しいかを確認すること、いつもと違う箇所がないかを確認することの大事さに気づかされたお話でした。
【TypeScript】typeof や keyof を組み合わせた型定義 

# はじめに
本記事では `typeof` や `keyof` を組み合わせて型を定義する方法とその注意点について紹介します。

TypeScript では独自の型を定義する方法として、`interface` と `type` がありますが、本記事では `type` を使用します。

# 型エイリアス
**型エイリアス**は、既存の型に別名を付けることができる機能です。`type` キーワードを使用して、型エイリアスを宣言します。型エイリアスは、コードの可読性を向上させ、複雑な型定義を簡略化するために使用されます。

```typescript
// 型エイリアスの宣言
type StringOrNull = string | null; // | で繋げてユニオン型を定義

let subtitle_1: StringOrNull = "Foo Bar";
let subtitle_2: StringOrNull = null;
```

# keyof や typeof を組み合わせた型定義 
本題である `typeof` や `keyof` を組み合わせた型定義を紹介します。

## typeof キーワード
`typeof` キーワードは、変数やオブジェクトの型を取得します。
```typescript
// user オブジェクトを定義
let user = { id: 10, name: "John Doe", is_verified: true };

// type User = { id: number; name: string; is_verified: boolean} と同義
type User = typeof user; 
```

`[]` を使用すると、オブジェクトのプロパティの型を参照することができます。この構文は、**インデックスアクセス型**（Index Access Type）と呼ばれます。
```typescript
// type UserId = number と同義
type UserId = User["id"];
// type UserIdAndName = number | string と同義
type UserIdAndName = User["id" | "name"];
```

## keyof キーワード
`keyof` キーワードは、オブジェクトのキーのユニオン型を生成します。インデックスアクセス型と組み合わせることもできます。
```typescript
// keyof と組み合わることも可能です。
// type UserProp = "id" | "name" | "is_verified" と同義
type UserProp = keyof typeof user;

// type UserValues = number | string | boolean と同義
type UserValues = User[UserProp];
// type UserValues = (typeof user)[keyof typeof user];
```
ただ、const アサーション（`as const`） を使用すると、`UserValues` は `string | number | boolean` ではなく、`10 | "John Doe" | true` になることに注意が必要です。
```typescript
let user = { id: 10, name: "John Doe", is_verified: true } as const;

// type UserValues = `10 | "John Doe" | true` と同義
type UserValues = (typeof user)[keyof typeof user];
// type UserValues = User[UserProp];
```
無料で使えるSolrインスタンス「KandaSearch-コミュニティ版」

## KandaSearchのコミュニティ版とは
KandaSearchでは、無料でApache Solrの検索エンジンインスタンスを作成・利用できるコミュニティプランをご提供しています。
推奨リソースの範囲内のご利用であれば、有料のスタンダードプランと比較して、機能・性能とも遜色はありません。また、セキュリティやデータの独立性も万全です。
コミュニティプランで作成した検索エンジンインスタンスを、以降の投稿ではコミュニティ版インスタンス、または単にコミュニティ版と呼ぶことにします。

コミュニティ版の推奨リソースにつきましては、以下のページでご確認ください。
[https://kandasearch.com/pricing](https://kandasearch.com/pricing)

## 特徴
それでは、コミュニティ版の主な特徴をご紹介します。

- 無料です！
- 利用期限はありません
- KandaSearchプロジェクト内に上限2個までコミュニティインスタンスを作成できます
- 最新バージョンのApache Solrを利用できます
- 有料のスタンダードプランと同等のApache Solrの機能を利用できます
- 商用/非商用にかかわらず本番環境として利用できます
- セマンティック検索を利用できます
- インデクシング時やクエリ時に少量のベクトル計算が可能です
- ヘルスチェック、モニタリング、ウイルススキャン、Webページクローラーの各機能は利用できません
- 一定期間（30日間等）使用しない場合、KandaSearchの監視機能によりインスタンスが削除されます
- 困ったことや質問は、コミュニティサポートフォーラムで解決できます。フォーラムの利用は無料です

いかがでしょうか？
無料とはいえ、決して有料版には劣らない機能・性能を提供していると自負しております。

## なぜ無料で利用できるのか？
それでは、なぜ、このような特徴を持つコミュニティ版を無料でご提供しているのか、簡単に説明させていただきます。

一言でいえばフリーミアムモデルによる戦略です。

上述の特徴の通り、コミュニティ版では基本機能をもれなく提供しご利用いただき、さらに高度な管理機能やハイパフォーマンスを得るためには有料プランをご契約いただきたいというモデルです。

そして、何よりも、当チームのメンバー全員が、皆様に検索エンジンについてもっと興味を持っていただき、検索エンジンの世界を楽しんでいただきたいと思っているからです。

## コミュニティ版の使い方
コミュニティ版インスタンスの作り方についてご説明します。

１．最初に、KandaSearchの無料のアカウント登録を行います。
KandaSearchのトップページへアクセスし、画面右上の「新規登録」をクリックして登録を行います。
[https://kandasearch.com/](https://kandasearch.com/)

登録確認メールを受け取るために、有効なメールアドレスが必要です。
所属の企業・団体・学校などの情報や、クレジットカード情報は不要です。
GitHub、Google、GitLab、LinkedInのソーシャルログインの利用も可能です。
このアカウントを使って、コミュニティサポートフォーラムへの投稿ができます。

確認用のEメールの件名は「Eメールの確認」で、送信元のアドレスは`no-reply@kandasearch.jp`です。
確認メールが届かない場合は、これらの情報を参考に迷惑メールフォルダーなどを探してみてください。

より詳しくは以下のリンクよりご確認ください。
[チュートリアル - 02. 検索エンジンの作成 - アカウントの作成](https://kandasearch.com/tutorial/025#%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90)

２．次のURLへアクセスして、KandaSearchの管理コンソールにログインします。
[https://ui.kandasearch.com/projects](https://ui.kandasearch.com/projects)

３．画面右上の「プロジェクトを作成する」をクリックして、プロジェクトを作成します。
プロジェクトはいくつでも作成できます。また、他のユーザーとの共有もできます。

より詳しくは以下のリンクよりご確認ください。
[チュートリアル - 02. 検索エンジンの作成 - プロジェクトの作成とメンバー追加](https://kandasearch.com/tutorial/025#%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8%E3%83%A1%E3%83%B3%E3%83%90%E3%83%BC%E8%BF%BD%E5%8A%A0)

４．左上のKandaSearchのロゴをクリックすると、作成済みプロジェクトの一覧が表示されますので、コミュニティ版を作成する対象のプロジェクト名をクリックして、プロジェクトビューへ移動します。

５．プロジェクトのオーバービューページが表示されますので、画面右上の「インスタンスを作成する」をクリックします。

６．「プラン選択」画面で「Communityエディション」を選択し「次へ」をクリックします。

７．「お支払い方法情報」では請求情報（請求先の名称やクレジットカード情報など）は不要です。「次へ」をクリックします。

８．「インスタンス情報」画面で、最低限、次の項目を指定し「次へ」をクリックします。
・インスタンス名（日本語もOK）
・インスタンスサブドメイン（半角英数字、ハイフン(-)のみ）
・許可IPアドレス

９．「最終確認」で表示されている内容に問題がないことを確認したら「確認」をクリックします。

上記の５～９についてより詳しくは以下のリンクよりご確認ください。
[チュートリアル - 02. 検索エンジンの作成 - インスタンスの作成](https://kandasearch.com/tutorial/025#%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%81%AE%E4%BD%9C%E6%88%90)

１０．インスタンスのオーバービューページへ移動しますので、インスタンスの完了を待ちます。インスタンスの作成には数分かかります。

以上でコミュニティ版インスタンスの作成作業は完了です。

Apache Solrをインストールするサーバーを用意することなく、わずか数分であなただけの検索エンジンインスタンスを構築できました。
このあと、コレクションを追加すると、ドキュメントの登録や検索ができるようになります。
コレクションの追加操作もKandaSearchの管理コンソールから行います。
type-challenges 中級編9: AnyOf、IsNever、IsUnion

# type-challenges 中級編9: AnyOf、IsNever、IsUnion

## はじめに

[GitHubのtype-challengesリポジトリ](https://github.com/type-challenges)は、TypeScript型システムの理解を深めるための型クイズ問題集です。高品質な型を作成することで、バグを減らし、プロジェクトの保守性を向上させることができます。今回も中級編から3つの問題に挑戦します。

### 1. AnyOf

この課題では、Pythonの `any` 関数に似た機能を型システムで実装します。配列を受け取り、配列の要素のいずれかが真の場合に `true` を返します。配列が空の場合は `false` を返します。

#### 例

```typescript
type Sample1 = AnyOf<[1, "", false, [], {}]>; // expected to be true.
type Sample2 = AnyOf<[0, "", false, [], {}]>; // expected to be false.
```

#### 私の回答

```typescript
type AnyOf<T extends readonly any[]> = 
  T[number] extends 0 | false | '' | [] | undefined | null | { [k in keyof T[number]]: never } ? false : true;
```

#### 解き方

- 配列 `T` の要素 `T[number]` が `0 | false | '' | [] | undefined | null | {}` のいずれかの場合、`false` を返します。
- それ以外の場合は `true` を返します。

:::note info
falseのパターンを羅列してあげればOK。
:::
:::note warn

空オブジェクトは`{}`ではなく`{ [k in keyof T]: never } `の形で示すことができます。
:::



### 2. IsNever

この課題では、入力型 `T` が `never` 型であるかを判定する型を実装します。`T` が `never` の場合は `true` を返し、それ以外の場合は `false` を返します。

#### 例

```typescript
type A = IsNever<never>; // expected to be true
type B = IsNever<undefined>; // expected to be false
type C = IsNever<null>; // expected to be false
type D = IsNever<[]>; // expected to be false
type E = IsNever<number>; // expected to be false
```

#### 私の回答

```typescript
type IsNever<T> = [T] extends [never] ? true : false;
```

#### 解き方

- `T` を配列でラップし、`[T]` が `[never]` にマッチするかをチェックします。
- マッチする場合は `true` を、マッチしない場合は `false` を返します。

:::note warn
`never`を判定する際は`[T] extends [never]`と`[]`で囲ってあげましょう
:::

### 3. IsUnion

この課題では、入力型 `T` がユニオン型であるかを判定する型を実装します。

#### 例

```typescript
type case1 = IsUnion<string>; // false
type case2 = IsUnion<string | number>; // true
type case3 = IsUnion<[string | number]>; // false
```

#### 私の回答

```typescript
type IsUnion<T, C extends T = T> = 
  (T extends T ? C extends T ? true : unknown : never) extends true ? false : true;
```

#### 解き方

- `T` を自己分配するために、`T extends T ?` を使用します。
- 分配された各部分型 `C` が元の `T` に一致するかをチェックします。
- 一致する場合は `false` を、一致しない場合は `true` を返します。

:::note info
Unionの配分を覚えてれば問題ありませんね
:::

### まとめ

このように、TypeScriptの型システムを理解し、実際に型を実装することで、より安全で保守性の高いコードを書くことができます。ぜひこれらの課題を解いて、型力UPしてみてください。

### 参考記事

- [TypeScript公式ドキュメント](https://www.typescriptlang.org/docs/)
- [type-challenges GitHubリポジトリ](https://github.com/type-challenges/type-challenges)
Svelteでショートカットを実装する

Svelteでショートカット実装する方法を紹介します。
以下のような実装となります。

```svelte
<script>
	function onkeydown(event: KeyboardEvent) {
		if (event.key in shortCutKeys) {
			event.preventDefault();
		}
		switch (event.key) {
			case shortCutKeys.Space:
                // 処理
				break;
			case shortCutKeys.Esc:
                // 処理
				break;
		}
	}
</script>

<svelte:window on:keydown={onkeydown} />
```

ショートカットのキーの場合、`preventDefault()`が実行されるように実装しています。

全てのキーを`prevetDefautl`する場合は、以下のように実装します。
```svelte
<svelte:window on:keydown|preventDefault={onKeyDown} />
```

因みに、`<svelte:window>`　は色々あるので、時間あるときに確認したいです。
https://learn.svelte.dev/tutorial/svelte-window
IBM i Services Directory : SYSIBMADM.Env_Sys_Infoビュー

このIBM i LPARのOS VER. CPUコア数、メモリサイズ等の構成情報を返します。
執筆時点で唯一SYSIBMADMライブラリー（スキーマ）に存在するIBM i サービスです。

## 概要
■表名：SYSIBMADM.ENV_SYS_INFO
■カテゴリ：通信サービス
■サポート：IBM i 7.2 Base, Enhanced: SF99702 Level 9
■参照URL（IBM i 7.5）：https://www.ibm.com/docs/ja/i/7.5?topic=services-env-sys-info-view

## 実行例

```
SELECT * FROM SYSIBMADM.ENV_SYS_INFO
```

実行例1です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/2c63aeee-aa54-b863-2acd-f4e8a01cf66a.png)


***OS_NAME : OS名。IBM i しかないですよね‥拡張予定ありの布石？***
***OS_VERSION : IBM i OSバージョン***
***OS_RELEASE ： IBM i OSのリリース***
***HOST_NAME : IBM i OSのTCP/IP上の(CFGTCP上の)ホスト名・ドメイン名***
***TOTAL_CPUS : このLPARプロファイルで利用可能な最大コア数***
***CONFIGURED_CPUS : このLPARに現在割当済みのコア数***
***CONFIGURED:MEMORY : このLPARに割当済みのメモリサイズ***
***TOTAL_MEMORY : このLPARに割当可能な最大サイズ？***
※インフォセンター記載は「システム上のメモリーの合計量 (メガバイト単位)。」

個人的にはOS_NAMEとメモリのカラム順序が逆じゃない？というのが気になりました・・(^^;
ESlintってどんなツール？

### ESLint の利点

- **コードの品質向上:** 構文エラー、潜在的なバグ、スタイル違反などを検出することで、コードの品質を向上させることができます
- **開発効率向上:** エラーを早期に発見することで、デバッグ時間を短縮し、開発効率を向上させることができます
- **チーム開発の円滑化:** コーディング規約を統一することで、チーム開発におけるコードの可読性と保守性を向上させることができます

### ESLint の仕組み

ESLint は、JavaScript コードを解析し、事前に定義されたルールセットに基づいてコードの違反を検出します。ルールセットは、ESLint の公式ルールセットや、ユーザーが独自に定義したルールセットを使用できます。

### Vue.js で ESLint を使用する方法

Vue.js で ESLint を使用するには、以下の手順で行います。

1. **ESLint のインストール:**
   ```bash
   npm install eslint --save-dev
   ```

2. **Vue.js プラグインのインストール:**
   ```bash
   npm install eslint-plugin-vue --save-dev
   ```

3. **ESLint 設定ファイルの作成:**
   ```bash
   npx eslint --init
   ```

   - プロンプトに従って、ESLint の設定を行います
   - Vue.js プラグインを使用することを選択します

4. **`.eslintrc.js` ファイルの編集:**
   ```javascript
   module.exports = {
     root: true,
     env: {
       browser: true,
       node: true,
       es2021: true,
     },
     extends: [
       'plugin:vue/essential',
       'eslint:recommended',
     ],
     parserOptions: {
       parser: '@babel/eslint-parser',
       requireConfigFile: false,
       ecmaVersion: 2020,
       sourceType: 'module',
       ecmaFeatures: {
         jsx: true,
       },
     },
     plugins: [
       'vue',
     ],
     rules: {
       // 独自のルールを設定する
     },
   };
   ```

5. **ESLint の実行:**
   ```bash
   npx eslint src/
   ```

### Vue.js で必要な ESLint ルール

Vue.js で ESLint を使用する場合、以下のようなルールが推奨されます。

- **`plugin:vue/essential`:**  Vue.js の基本的なルールセットです
- **`plugin:vue/recommended`:**  Vue.js の推奨ルールセットです
- **`plugin:vue/strongly-recommended`:**  Vue.js の強く推奨されるルールセットです
- **`vue/multi-word-component-names`:**  コンポーネント名の命名規則に関するルールです
- **`vue/no-unused-vars`:**  未使用の変数に関するルールです
- **`vue/no-use-v-if-with-v-for`:**  `v-if` と `v-for` の組み合わせに関するルールです
- **`vue/no-unnecessary-qualifier`:**  不要な修飾子に関するルールです



### まとめ

ESLint は、JavaScript コードの品質向上に役立つ強力なツールです。
あまり理解しないで使用するとよくわからないところでエラーが起きたりするのでeslintもしっかりと理解することで無駄な時間を避けることができます。
上記のルールの他にも[Vue公式](https://eslint.vuejs.org/rules/)で確認できますのでご自身のプロジェクトにあったものを選ぶといいと思います。
vue.js:入力フォームの共通化

Vue.js で開発を行う際に、入力フォームは様々な場面で利用されます。しかし、毎回同じような入力フォームのコードを書くのは面倒ですし、保守性も悪くなってしまいます。そこで、今回は Vue.js で入力フォームを共通化させたいと思います。

**1. 共通入力フォームコンポーネントの作成**

まず、`/InputComponent.vue` ファイルを作成し、共通入力フォームコンポーネントのコードを記述します。

```InputComponent.vue
<script setup>
import { defineProps } from "vue";

const props = defineProps({
  id: { type: String, required: true },
  label: { type: String, required: true },
  type: { type: String, default: "text" },
  modelValue: { type: [String, Number], default: "" },
  placeholder: { type: String, default: "" },
  error: { type: String, default: null },
});
</script>

<template>
  <div class="input-group">
    <label :for="props.id">{{ label }}</label>
    <input
      :id="props.id"
      :type="props.type"
      :value="modelValue"
      @input="$emit('update:modelValue', $event.target.value)"
      :placeholder="props.placeholder"
      :class="['input-field', props.error ? 'error' : '']"
    />
    <span v-if="props.error" class="error-message">{{ props.error }}</span>
  </div>
</template>

<style scoped>
.input-group {
  display: flex;
  flex-direction: column;
  margin-bottom: 1rem;
}

.input-field {
  padding: 0.5rem;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.input-field.error {
  border-color: red;
}

.error-message {
  color: red;
  font-size: 0.8rem;
}
</style>
```

**解説:**

- `id` プロパティ: 入力フィールドの ID を指定します
- `label` プロパティ: ラベルのテキストを指定します
- `type` プロパティ: 入力フィールドのタイプ (text, email, password など) を指定します
- `modelValue` プロパティ: 入力フィールドの値を双方向バインディングします
- `placeholder` プロパティ: プレースホルダーテキストを指定します
- `error` プロパティ: エラーメッセージを指定します
- `@input` イベント: 入力値が変更された際に、`update:modelValue` イベントを発行します

**2. 共通入力フォームコンポーネントの利用**

他のコンポーネントで `InputComponent.vue` を使用するには、以下のようにインポートして使用します。

```vue
<script setup>
import { ref } from 'vue';
import Input from './Input.vue';

const name = ref('');
const email = ref('');
const emailError = ref(null);

const submitForm = () => {
  // フォーム送信処理
  if (!validateEmail(email.value)) {
    emailError.value = '正しいメールアドレスを入力してください。';
  } 
};
</script>

<template>
  <div>
    <Input id="name" label="名前" v-model="name" placeholder="山田 太郎" />
    <Input id="email" label="メールアドレス" type="email" v-model="email" :error="emailError" />
    <button @click="submitForm">送信</button>
  </div>
</template>
```

**解説:**

- `Input` コンポーネントをインポートし、使用します
- `v-model` ディレクティブを使って、親コンポーネントのデータと入力値を双方向にバインディングします
- `error` プロパティを使って、エラーメッセージを表示します

**3. まとめ**

このように、共通入力フォームコンポーネントを作成することで、開発効率を向上させることができます。

- コードの重複を減らす
- 入力フォームのデザインを統一する
- 入力フォームの機能を拡張しやすくする
README.mdを理解してみる

README.md は、ソフトウェアプロジェクトの重要なファイルの一つです。
プロジェクトの概要、使い方、貢献方法などを記述し、プロジェクトに関わるすべての人が理解しやすいように情報を提供するファイルです。良い README.md は、プロジェクトの第一印象を左右し、開発をスムーズに進める上で重要です。

### README.md の役割

* **プロジェクトの概要説明:** プロジェクトの目的、機能、技術スタックなどを簡潔に説明します
* **使い方のガイド:** プロジェクトのインストール、設定、実行方法などを詳しく解説します
* **運用ガイド:** プロジェクトの運用方法、コーディング規約、プルリクエストの送り方などを説明します
* **よくある質問:** よくある質問とその回答をまとめることで、開発者やユーザーの疑問を解消します
* **ライセンス情報:** プロジェクトのライセンス情報を明記します

### README.md の書き方

1. **見出し:** 適切な見出しを使って情報を整理します。通常、プロジェクト名、概要、インストール、使い方、貢献などの見出しを使用します
2. **簡潔で分かりやすい文章:** 技術的な用語を避け、誰でも理解できる文章で記述します
3. **コード例:** 必要に応じて、コード例を記述して具体的な使い方を説明します
4. **画像や図表:** 画像や図表を使用することで、説明をより分かりやすくすることができます
5. **リンク:** 関連するドキュメントやウェブサイトへのリンクを張ります
6. **更新履歴:** README.md を更新した日時や内容を記載します

### よくある構成例

```markdown
# プロジェクト名

## 概要

このプロジェクトは、[プロジェクトの目的] を実現するためのものです。[プロジェクトの主な機能] を備えています。

## インストール

1. [プロジェクトの依存関係をインストールするコマンド]
2. [必要な設定を行うコマンド]

## 使い方

1. [プロジェクトを実行するコマンド]
2. [プロジェクトの主な機能の使い方を説明]
3. [コード例を記述]

## 運用

1. [プロジェクトのフォークを作成]
2. [変更を加える]
3. [プルリクエストを送信]など

## ライセンス

このプロジェクトは、[ライセンス名] ライセンスの下でライセンスされています。

## 更新履歴

* 2023/12/12: [README.md を更新]
```

### ツール

* **Markdown エディター:** Visual Studio Code、Atom、Typora など、様々な Markdown エディターが利用できます
* **GitHub:** GitHub は、README.md を表示する機能を提供しており、プロジェクトの情報を整理するのに便利です

### まとめ

README.md は、プロジェクトの理解を深めるの重要なガイドですが、疎かにされがちなためしっかりと理解を深めて誰でもわかりやすく、丁寧な README.md を作成することで、重宝されると感じました。
アジャイル・スクラム関連情報まとめ

# はじめに
この記事では、アジャイル・スクラムに関する情報をまとめています。
※今後も随時更新予定

# アジャイルソフトウェア開発宣言

https://agilemanifesto.org/iso/ja/manifesto.html

https://agilemanifesto.org/iso/ja/principles.html

# スクラムガイド

https://scrumguides.org/docs/scrumguide/v2020/2020-Scrum-Guide-Japanese.pdf

# Jonathan Rasmusson 著、西村直人・角谷信太郎 監訳、近藤修平・角掛拓未 訳「アジャイルサムライ――達人開発者への道」オーム社、2011

https://shop.ohmsha.co.jp/shopdetail/000000001901/

# 西村直人、永瀬美穂、吉羽龍太郎 「SCRUM BOOT CAMP THE BOOK【増補改訂版】 スクラムチームではじめるアジャイル開発」 翔泳社、2020

https://www.shoeisha.co.jp/book/detail/9784798167282

知識パートとストーリー込の実践パートのバランスがよく、理解しやすいです。

# 常松祐一「アジャイルプラクティスガイドブック チームで成果を出すための開発技術の実践知」 翔泳社、2023

https://www.shoeisha.co.jp/book/detail/9784798176826

開発面での具体例が特に豊富にあり、すぐに活かせる内容が数多くあります。

#  沢渡あまね、新井剛「ここはウォーターフォール市、アジャイル町 ストーリーで学ぶアジャイルな組織のつくり方」2020、翔泳社

https://www.seshop.com/product/detail/24086

ストーリーベースで読みやすいです。ストーリー内で出てくる課題は、自分も経験したことがあり、引き込まれました。

# Jeff Patton 著、川口恭伸 監訳、長尾高弘 訳「ユーザーストーリーマッピング」2015、オライリー・ジャパン

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

https://speakerdeck.com/kawaguti/userstorymapping

# アジャイルについて | Atlassian

https://www.atlassian.com/ja/agile

アトラシアンのアジャイルに関するガイド

# Agile Studio

https://www.agile-studio.jp/

# ふりかえり・レトロスペクティブ
ふりかえり・レトロスペクティブに関する情報は別途こちらの記事にまとめています。

https://qiita.com/Yasushi-Mo/items/0e1ffffcb060e602d624
AWS のLinux内にRubyをインストール


解決したいこと

AWS のLinux内にRubyをインストールをしたい

rubyのインストール時のエラーが発生し（ここは一旦解決）、
LinuxにSSH接続でログイン後、rubyのダウンロード中にSSH接続がpipe outしてしまうところで止まっています...

解決方法を教えて下さい。

試したこと

エラーの部分は、
tmpファイル内の容量不足だったので、容量増強でエラー解消

使用したコマンド
TMPDIR="${PWD}/tmp" rbenv install 3.1.2

SSH接続のpipe out部分

[ec2-user@ip-10-0-0-6 ~]{PWD}/tmp" rbenv install 3.1.2
==> Downloading ruby-3.1.2.tar.gz...
-> curl -q -fL -o ruby-3.1.2.tar.gz https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.2.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 19.6M 100 19.6M 0 0 84.0M 0 --:--:-- --:--:-- --:--:-- 84.1M
==> Installing ruby-3.1.2...
-> ./configure "--prefix=$HOME/.rbenv/versions/3.1.2" --enable-shared --with-ext=openssl,psych,+
-> make -j 1
client_loop: send disconnect: Broken pipe
katayamaisao@katayamaisaonoMacBook-Pro .ssh %

一歩進んで二歩下がっている...ぐぬぬ...
今時のエンジニア採用〜繋がりを大事に〜

# ごあいさつ
KDDIアジャイル開発センターで人事をしています渡邊です。
今回は人生で初めてのQiita投稿です！

きっかけは社内での情報共有の場で、エンジニアさんたちも人事情報とか欲してるよ！という一言から、『んじゃ書いてみよう！』というアジャイルなマインドから勇気を持って書いてみます:grin:

# エンジニア採用は最先端をいっている
採用の歴史って結構長いんですよね。
そんな中で、エンジニア採用は常に最先端をいっているように思っています。
エンジニアさん達は常に最新の技術に敏感で、そのお陰で常に【採用】というテーマにも敏感なような気がします。

# 2000年代までは紙媒体がメイン
ものすごくざっくりですが、PCが一般の家庭や会社に普及するまでの間は、求人や採用も紙媒体に頼っていました。今では紙で新聞を読む人が少なくなりましたが、昔は【三行広告】と言って三行で求人内容を記載して新聞に載せていました。（それだけの文量で内容を表せることもすごいですよね）

またそこから新聞と同時に折り込み広告と言われる新聞に入っているその企業の求人だけを掲載した単チラ（単独チラシ）が流行りました。
その後に、様々な企業の求人だけを集めた求人雑誌も世の中に出てきて、
今では考えられませんが、その雑誌を手にいれるのにお金を出して求人を探していた時代もあったものです。

# 2000年代以降
この頃から一気に世の中と同時に採用手法も変わってきます。
総合系の求人サイトが出来上がったり、色々な特化型の求人サイトができたり、もちろんこの頃からエンジニに特化したサイトが出来上がったりしました。
その後は、エージェント（人材紹介）が全盛期を迎え、ここでもエンジニアに特化したエージェントもでてきました。

# 最近では
SNSはもちろんですが、ダイレクトスカウトと言われる企業の方から声をかけるプッシュ型の採用が世間では主流になっています。
ただこうしてみると、エンジニア採用はいつも一足早く、
どの職種の採用より色々な手法を取りれいて採用活動をしているなぁと感じています。

ダイレクトスカウトと言われるサービスが出てきた時は、
一番盛り上がったのはエンジニア採用です。
またSNSができたときも、繋がりを持って採用してきたのもエンジニアの皆さんが最初に思います。

# 今後のエンジニア採用
ここからはあくまで私の見解です。
おそらくSNSでの採用やダイレクトスカウトも下火になると私は考えます。
またエージェントもおそらく一部の企業だけ残り衰退していくと思っています。

そんな中、コミュニティでの【繋がり】を持った採用が主流になるような気がします。
そしてそのコミュニティ活動で一番活発なのが、エンジニアの皆さんのコミュニティです。

採用や営業職などは、まだまだコミュニティがありません。事務系の職種だったりアルバイト系のコミュニティもほとんど見たことありません（自分が無知なだけかもしれませんが・・・笑）

つまりお互い（企業と人）が技術はもちろん採用を含めた情報発信をして
【繋がり】を持ち
その人に興味を持ち
そしてその企業に興味を持つ採用になってくると思います。
それがこういったコミュニティー活動からの採用に変わってくるのではないかと考えています。

うちもそういった方からの応募が最近増えてきています。
『誰々の記事をよく見るようになって企業を調べて応募してきました！』とか
『何々のイベントでの登壇で興味を持って応募しました！』を非常に多く見ることが多いです。

AIとか色々な技術がある中で、そういった技術を使うことは必要ですが
こういった情報発信はやはりいつの時代でも大事なんだなぁと思っています。

今後も技術スタックのような記事は書けませんが、エンジニア採用について色々と情報発信できたらなぁと思っています

最後までお読みいただいてありがとうございます！
login flowのまとめ

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめA～M](https://qiita.com/Keiji_otsubo/items/f3ddedee6793bf1576f8)



+ [フローから新規ユーザ作成した際の初回ログインメールの作成](https://qiita.com/Keiji_otsubo/items/49c0809ee88d0c3557b9)
+ [MFA Login Flow](https://qiita.com/Keiji_otsubo/items/946c4b1f3f6724bd5461)

+ [私のコミュニティ サイトには、ログイン フローがあります。コミュニティ サイトは、複数の言語で利用できます。登録時にサイト ユーザーの正しい言語を決定するために、フロー内の変数に言語パラメータを渡したいと考えています。](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007eq24e)

:::note
GetURL コンポーネントを使用して、これを実行することができました: https://salesforcetime.com/2023/09/07/a-flow-action-that-gets-the-url/
:::
【アウトプット】なぜQiitaに記事を投稿するの？

## はじめに
Qiitaはわからないことを調べた際にヒットしたら覗くなど、インプットのために利用していました。
会社でアウトプットのツールとして推奨されてからアウトプットのために始め、定期的に投稿しています。

私はもともと自分の成果物や意見を表に出すことが得意ではないのですが、**Qiitaは自分にとって非常に為になるもの**だと感じたので、苦痛と思わず続けられています:open_hands_tone1:
ただただ無心でやっていて、なぜQiitaを通じてアウトプットしているか今考えると○○○でやっているなあというところに最終辿り着いたのですが（こちらは後程！）、途中でもいろいろな想いが浮かんでいるのでそれらを深掘りしてみました。

**「なぜQiitaに記事を投稿しているのか？」**

これは周りのみなさんにも個人的に伺いたいところです。

## わたしがQiitaを定期的に投稿しているワケ
### ワケ①会社にスキルを把握してもらえる
社内エンジニアであればお仕事ぶりを直接見て評価してもらえますが、SESという業界柄、会社に自分のスキルを直に知ってもらう機会がないのが現状です。
（他の方の記事の盗作なら別の話ですが）**自分がどのようなことを吸収してスキルとして持っているか明示的に会社に伝えることができる**ため、利用しない手はないと思っています。

### ワケ②備忘録になる
日々調べては実践するの繰り返しで成功と失敗を多く経験している中、印象的なことは覚えているものの（少なくとも私の場合）すべてを脳に記憶できているわけではありません。
自分専用のまとめた記事をQiitaに投稿しておけば見返しやすくなります。

### ワケ③文章力や伝える力が身につく
作家になりたいわけではないのですが、エンジニアもこの能力は非常に役立つと思っています。
お客様へのご提案、内部レビュー、エンジニア同士の意見交換など、テキスト・口頭に限らずいかにわかりやすく相手に伝えられるか現在も試行錯誤しながらやっているので、Qiitaの記事作成の際に自然と練習になっています。

### ワケ④ポートフォリオになる
ワケ①と似ていますが、こちらは外部向けです。
Qiitaの記事を就活・転職活動で会社に提示しているというお話をちらほら見かけるのですが、イメージはそんな感じです。

のちに案件面談の際にスキルや人となりを知ってもらうための提示物になるかもしれないと仮定しています。
（と言いつつ、自信を持ってお見せできるものはまだ投稿できていないので頑張らねば。。）

### ワケ⑤会社が推している
冒頭でも述べましたが、会社が最近からQiitaを推奨しています。
評価制度の中に組み込まれることになり、表彰制度も導入されました。
表彰されると、Amazonギフトカードがもらえます！

"**頑張った分だけ褒めてもらえ、評価される**"と明示的に定義づけられているので、これに集中して頑張ろう！と明確な目標ができるかな思います。

### ワケ⑥Qiita記事にお世話になった恩返し
エンジニアになってからネットで調べ物をしているとなにかしらQiitaの記事がヒットし、解決の糸口になることがあります。
以前から為になるなあと感じていたのですが、Qiita登録をしてからは今度は自分が誰かのためになろうという思いで記事を投稿しています。
直接誰かのためになっているかはわかりませんが、助け合いになれてたらいいなと思っています。

### ワケ⑦知識のブラッシュアップになる
自他関わらず記事のコメント欄は、本当に為になります。
Qiitaを利用することで擬似的にコミュニティが広がったように感じ、もっと意見交換をしたいなと思っています。
私はまだ他の方の記事に対してアドバイス的なコメントはできない身なのですが、いつかできるようになりたいです。

### ワケ⑧Qiitaを分析するのがすこぶる楽しい
Qiitaにはまってからどんな記事が投稿されているかだけでなく、投稿しつつQiitaに張り付いて人気傾向などを自分なりに分析するのが楽しくなってきました。
もはや変態かもしれません。

とは言いつつ、いまだに読みは外れます。
まだまだです。

### ワケ⑨自己満
一番しっくりくるワケはこれです。
評価してもらうためでもなく、いいねをもらって承認欲求を満たすためでもなく、損得勘定の域を超えやりたいからやってます。

上記で述べたワケはもちろん嘘ではなくすべてひっくるめてこれなのかなと思ったのですが、一番最初に思い浮かんだのも最終的な結論に至ったのも「私はシンプルに自己満でやってるわ」でした。
「なら記事にするな！」というツッコミがきそうですが、これも自己満です。何卒ご承知おきくださいませ:upside_down:

会社の取り組みではあるものの、やるなら楽しくやりたいという気持ちがあり義務感で投稿しないようにしています。
現在週1ペースで投稿していますが、ストック（ネタ）がつきたら潔く更新頻度を落とすつもりです。

結果いろいろなメリットに繋がっていると感じているので、**"Qiitaに投稿すること自体が目的"とならない**ように気をつけ、日々向上心を持って続けようと思います。

## 最後に
今回は、私がQiitaを投稿するワケについてお話いたしました。
Qiitaに記事投稿しないなんて悪！とはもちろん思っていませんが、さまざまな利点があるので投稿したことない方には是非おすすめしたいです。

最後までお読みいただき、ありがとうございました:four_leaf_clover:
0からエンジニアを目指す人へ！モチベーションをずーーっと保つためのマインド　

### はじめに
今回はエンジニアを目指す方、今まさに目指している方へ学習中でもモチベーションを保ち続ける方法を書いていきたいと思います。

私はWebの学習を開始して3年という月日が経ちました。ちょうど子供が誕生して子育てと並行し、当初は学習時間はほとんどありませんでした。家族にも反対され、応援もしてもらえず、それでもなんとか空いた隙間時間で1～2時間学習していました。週にすると10時間学習できたかな？という感じでしたし、今でも学習時間は大きくとれていないのが現状です。

それでもクラウドソーシングから10件程お仕事を頂き紆余曲折ありましたが、クライアント様から良い評価を貰えいわゆる「0→1」を達成しました。その後は株式会社PRUMでアカデミー生としてバックエンドの学習にも着手（それまでWebデザイナーとして活動）しながら、今でも学習を続けています。

3年を振り返りいろいろありましたが、もちろんしんどいことはめちゃくちゃありましたし、分からないことだらけでどうしたら良いか分からないこともたくさんありましたが、「あ、もう学習辞めよう」とか諦めようと思ったことはほとんどありません。

自分の経験から何より大事なのは時間が取れなくても、誰が反対しても、少しづつでも良いから **続けることが大切！** という事を声を大にして言いたいです。とは言え、続けることがやっぱり一番難しいですよね・・

ってことで私が大切にしているマインドをいくつか紹介してみようと思います。どれか1つでも今後あなたがエンジニアを頑張ろう！と思えるモチベーションにつながれば幸いです。



## 他人と比較しない
まずこれが一番やっちゃいけないことです。ぶっちゃけ上を見ればあなたより出来る人なんてごまんといますし、駆け出しのころからベテランと同じように仕事が出来るなんて思うこと自体が間違いです。

よくTwitter(X)でも「3ヶ月で初案件受注！」「学習から半年で50万のお仕事頂きました！」みたいなツイートもよく見かけますが、ホントにそんなん出来る人は毎日10～18時間毎日学習できる人だったり、かつ相当時間が取れて才能もあって、それ以外はハッタリかましている奴です。

こういうのを見て「俺は半年たってもまだ1円も稼げていない！なんてダメなやつなんだー」って思っちゃダメです。今すぐTwitter閉じてください。大事なのは自分が少ない時間でも、その中から1％しか理解できなくても、その1%を理解できたことが素晴らしいんです。それを積み重ねていけば必ずエンジニアになれます。


## 出来たことだけを見つめ直す
先ほどの他人と比較しないことと重なりますが、大事なのは誰より出来たか、ではなく、昨日の自分と比べて何が出来るようになったかを見つめなおすのは非常に大事です。ぶっちゃけ学習していても分からないこと、出来ないことなんて鬼のようにあります。今日は何が出来なかったなんて数えてたら私も即効挫折します。

99％は理解できなかったけど、1％のこの部分を出来るようになった、理解できた。素晴らしいです！もう今日はそのことだけ考えて気持ち良く寝てください。


## 理解30％出来れば上等
先程1％の理解でもOK！ということをお話ししましたが、30％の理解が出来たものならかなり良い感じです。よく「60％の理解が出来たら先へ進め！」的な話がありますが、私的には30％理解できても先へ進んで良いと思います。

一番やっちゃいけないのが100％の理解を目指してProgateを何周もしたりして先へ進めないことです。100％の理解なんてぶっちゃけ不可能です。そして一番の挫折の原因です。

もし調べても、一所懸命理解しようとして分からなければ次へ進んじゃいましょう。ふと時間が経ってまた見返したときに「あ、そういうことか！」と突然理解できることもありますし、どんどん学習しているうちにふと繋がることもあったりします。


## 「助けて！」を言える習慣を付ける
スクールやメンターがいる環境でも挫折し、ドロップアウトする人の特徴で多いのが質問が出来ない人、もっと言ってしまえば「助けて！」が言えない人かなと思います。

いや、分かりますよ。質問って難しいですよね。特にプログラミング周りのことは。どんな環境でどんな実装をしてみて躓いて、何がわからなくて、どんな考えをもって、で今わからないのかってまとめるにもなかなかまとまらないですよね？

でも、**最悪そんなん良いから、「助けて！」って言えよ！**　って思う時があります。

挫折しかけているときはいわば溺れてる時と一緒です。溺れてんのに、なぜ自分は溺れているのか、自分は溺れないために何をすべきか、なぜ浮き輪を投げてほしいのか、なんて理由を言ってる暇はないです。はよ「浮き輪ください！」って言わんかい！！って感じです

だからと言って何も調べず考えず、「分かりません！どうしたら良いですか？」という丸投げもダメですが、キッチリまとめられない！2時間も3時間も考えて分からないならばその旨も含めて説明すれば理解してくれる人もいるはずです。

どうしてもダメなら浮き輪を投げてくれる人は周りにいるはずです。スクールや職場なら尚更。まずは手を差し伸べてほしいというhelpサインを出せる人になりましょう


## ライバルは思っているより少ない
他人と比較しないと通ずる話ですが、私は3年間学習してきて振り返ってみるとライバルって思ったより少なかったなと思います。なぜなら

* エンジニアという世界を軽く見て挫折してしまう人があまりに多い
* 深い理解を目指しすぎて、理解できない自分に絶望して辞めてしまう
* 質問が出来ずにスクールからドロップアウトしてしまう
* クラウドソーシングで仕事を受注できずに挫折してしまう
* 飽きる

当時私と同じくして学習をスタートした人も今は一体どれだけの人が学習を継続しているのだろう。多分2割以下だと思います。「稼げた～」「高単価の案件受注した～～」「エンジニアとして就職できた～」という人ですら後々ドロップアウトしてしまう人は数え切れません。

だからね。継続させしていれば他人と比較することも、ライバルがいることもあなたにとってあまり大きな問題じゃないんだよ、と言いたいです


## 終わりに
いかがだったでしょうか？ちょっと極論に走りすぎて暴論感がありますが、挫折するくらいなら多少暴論でも良いと思っています。1にも2にも挫折は敵、私はそう思っています。限られた学習時間で挫折せずに生きてこられたのはこれらのマインドですし、それでも一定の結果を得ることが出来た私の成果だと思っています。

エンジニアはマラソンと同じで、どんなに体力があって、どんなに燃えていても走ってれば疲れるのは共通です。フルマラソンを何秒で走ったかという記録を見るのはもうちょっと先にして、まずは走り切ったか、ということの方が初心者にはモチベーションにつながると思います。

あなたのエンジニアライフが楽しく向上していくことを願っています。
【Go言語】値レシーバ v.s. ポインタレシーバ

# はじめに

値レシーバとポインタレシーバどちらを使うべきかをこの記事では解説します。

# 値レシーバの例

[Go Playground](https://go.dev/play/p/45PS4ZLjgXd)

```go
type customer struct {
	balance float64
}

func (c customer) add(operation float64) {
	c.balance += operation
}

func main() {
	c := customer{balance: 100.0}
	c.add(50.0)
	fmt.Printf("balance: %.2f\n", c.balance) // balance: 100.00
}

```

customerのbalanceフィールドの値は変更されない。

ちなみにlinterの`staticcheck`を導入すると、以下のようなエラーが出る。

```txt
SA4005: ineffective assignment to field customer.balance (staticcheck)
```

# ポインタレシーバの例

[Go Playground](https://go.dev/play/p/xt2JGopkxO_f)

```go:ポインタレシーバ
type customer struct {
	balance float64
}

func (c *customer) add(operation float64) {
	c.balance += operation
}

func main() {
	c := customer{balance: 100.0}
	c.add(50.0)
	fmt.Printf("balance: %.2f\n", c.balance) // balance: 150.00
}
```

ポインタレシーバの場合は、ポインタ渡しとなる。
レシーバに対する変更は、元のオブジェクトに対して行われるので、customerのbalanceフィールが更新される。

# レシーバがポインタでなければならいとき

* メソッドがレシーバを変更する必要があるとき
* メソッドのレシーバがコピーできないフィールドを含むとき(syncパッケージの方の一部)

```go
type slice []int
func (s *slice) add (element int) {
    *s = append(*s, element)
}
```

# レシーバがポインタであるべきとき

* レシーバが大きな値のとき : 値渡しだとコピーされてしまうので

# レシーバが値でなければならいとき

* レシーバの不変性を強制する必要があるとき
* レシーバがマップ、関数、チャネルのとき

# レシーバが値であるべきとき

* レシーバが、変更する必要のないスライスのとき
* レシーバが小さな配列や、可変なフィールドを持たず必然的に値型であるtime.rime のような構造体のとき
* レシーバが int、float64、string といった基本データ型のとき

balanceは`customer`構造体に直接あるのではなく、ポインタフィールドから参照される別の構造体の中にある。

[Go Playground](https://go.dev/play/p/OxhwFTkJpeY)

```go
type customer struct {
	data *data
}
type data struct {
	balance float64
}

func (c customer) add(operation float64) { //←値レシーバを使う
	c.data.balance += operation
}
func main() {
	c := customer{data: &data{
		balance: 100,
	}}
	c.add(50.)
	fmt.Printf("balance: %.2f\n", c.data.balance) // balance: 150.00
}
```

この場合はレシーバが値でもbalanceフィールドが変更される。
しかし、明示するという意味では、ポインタレシーバを使用する方が好ましい。

# defer

メソッドに対して、deferを使用する場合、引数の評価について同じロジックが適用される。
つまり、レシーバはすぐに評価される。

以下は、値レシーバのメソッドをdeferで呼び出し、その後にレシーバを変更する例。

[Go Playground](https://go.dev/play/p/GT4TYl1GB3t)

```go
func main() {
	s := &Struct{id: "foo"}
	defer s.print() // sは即時評価される
	s.id = "bar"
}

type Struct struct {
	id string
}

func (s Struct) print() {
	fmt.Println(s.id) // foo
}
```

`s.id = "bar"`より先に、`defer s.print()`の`s`が評価されるので、代入されていることをdeferは見えません。

ポインタがレシーバの場合は、sが評価されるが、ポインタが参照している値が変更されているため、変更が反映される。

[Go Playground](https://go.dev/play/p/r-Yd306W-KL)

```go
func main() {
	s := &Struct{id: "foo"}
	defer s.print()
	s.id = "bar"
}

type Struct struct {
	id string
}

func (s *Struct) print() {
	fmt.Println(s.id) // bar
}
```



# まとめ

正当な理由がない限りは、値レシーバを使用する。
ただし、迷ったときはポインタレシーバを使う方がいい。

# 参考文献

1. https://100go.co/ja/#42
AWS SAA(SAA-C03) 合格体験記

## AWS SAA(SAA-C03) について
>AWS 認定ソリューションアーキテクト – アソシエイトは、幅広い AWS のサービスにわたる AWS テクノロジーに関する知識とスキルを示します。この認定の焦点は、コストとパフォーマンスが最適化されたソリューションの設計にあり、AWS Well-Architected フレームワークに関する深い理解を示します。この認定は、認定された個人のキャリアプロファイルと収益を向上させ、利害関係者やお客様とのやり取りにおける信頼性と自信を高めます。

引用元: 公式サイト
https://aws.amazon.com/jp/certification/certified-solutions-architect-associate/

### 試験概要
- 試験形式: 選択問題と複数選択問題
- 試験時間: 130分
- 試験費用: 150 USD
- 試験範囲:
    - レジリエントアーキテクチャの設計
    - 高パフォーマンスアーキテクチャの設計
    - セキュアなアプリケーションとアーキテクチャの設計
    - コスト最適化アーキテクチャの設計

:::note info
Tips
AWSの公式から割引になる特典が行われていたりするので、資格取得の際には是非チェックしてみてください！！
:::

## はじめに
この記事では、AWS認定ソリューションアーキテクト – アソシエイト（SAA-C03）試験について、受験の理由や学習方法、試験内容、感想を共有します。

## 受験した理由
CLFを合格したし次はSAA取るぞー！って感じで受けました。
SAAまで取れていれば業務においても役立つと感じましたし、中級資格でもあるためまずはSAAまで取ることが目標でした。

## 学習方法
CLF同様にUdemyでの学習を中心に進めました。
- 【SAA-C03版】これだけでOK！ AWS 認定ソリューションアーキテクト – アソシエイト試験突破講座
- 【SAA-C03版】AWS 認定ソリューションアーキテクト アソシエイト模擬試験問題集（6回分390問）

## 試験内容と感想
試験結果は...

ギリッギリで合格できました！！後1問間違えていたら落ちていましたね。。
![aws_saa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1495990/d6fa5756-5422-8c65-21dd-4675028f804c.png)

言い訳ですが、業務が忙しい時期と被ってしまって勉強時間が取れませんでした:sweat_smile:


試験は今回自宅でのオンラインで受験しました。
結構固まったり、ボタン押した後に2,3秒固まったりでかなりやりづらかったですね。。
PCスペックの問題かもですが、テストセンターが無難かもしれません。自宅で受けれるのは楽で良かったですが。

内容はUdemyの問題より文章が短く、模擬試験で行った内容と意外と齟齬があったというかというイメージでした。
ただ試験内容はCLFと比較すると圧倒的に難しいと感じました。

再度テキストや動画以外にも実際にサービスを触って理解を深めていきたいなと思いました。

## まとめ
AWS SAAの資格取得は大変ですが、取得することでAWSの知識を深めることができ、業務にも役立ちます。しっかりと準備して挑戦することをお勧めします。