OmniAICreator/Qiita-1.07M huggingface dataset:
Squad(開発体制)で開発した話

これは[Hubble Advent Calendar 2023](https://qiita.com/advent-calendar/2023/hubble)の10日目[^1]の記事です。

# はじめに
Hubbleで業務委託としてフロントエンドを担当している[@beltway7](https://qiita.com/beltway7)です！

Hubbleでは、2022年からSquadを採用しており、実際にSquadを導入したことで、どんな開発をしているかの話をします。

# Squadって何？
元々Spotifyが採用していた組織体制で、チームを小さな分隊(Squad)に分けて開発することです。

HubbleのSquadについて詳しく知りたい方は、以下に詳細が記載されていますので、ご一読ください！

https://note.hubble-docs.com/n/n8197fcee132d

CTOとフロントエンジニア２人が爽やかな笑顔で映ってます。（ちなみにこの写真に私はいませんww）

そして、Squadを採用し、2つのチームが形成されました。
- NPSチーム：既存顧客のための開発にフォーカス
- NewMRRチーム：新規顧客獲得のための開発にフォーカス

# Squadで、どんな開発をしてるの？
NPS、NewMRRどちらも下記の流れで開発しています！

1. 機能開発のキックオフ
    1. PMから仕様と画面デザイン(Figma)の共有を受ける
    1. 開発期間、QA期間、本番リリース時期を決める 
1. 開発する
    1. 開発中に不明点があれば、関係者と検討
1. QA
    1. QAで開発した機能を確認
    1. 不具合あれば、この時に修正
1. 本番リリース

# Squadを採用して良かったこと

## 1. 関係者が絞られている
少ない人数でSquadを組んでるので、私が開発を担当するときは、PM、バックエンドエンジニア、フロントエンジニア（私）、QAの４人が最小人数になります。

メンバーが少ないことで、仕様を詰める時や、会話する必要がある時は、パッと集まることができるし、コミュニケーションコストも非常に低いです。

何かあれば、すぐにhuddle(Hubbleじゃないよ)で会話できます！

## 2. 自立性が出てくる
人数が少ないので、不明点などあれば、気づいた人がすぐ対応or声がけする気がしてます。

不明点をそのままにしておくと、結果、QA期間で不具合発覚して、急いで修正するのは、エンジニア側の負担になります。

なので、それぞれがしっかりと仕様を検討し、QAの時に「そういえば、〇〇は議論してなかったな」ってことは、ほとんどありません。

## 3. 目的がハッキリしてる
私が所属してるNewMRRチームは「新規顧客獲得のための開発にフォーカス」を目的にしてます。

目的がハッキリしてるのでPMだけでなく、エンジニア、QAも同じ目的を持っていると、議論をする時に空中戦になることを防げます。

目的がハッキリしていないと、仕様の議論で揉めるケースが結構あります（経験談）

# Squadを採用して悪かったこと
なし（今の所、思いつかないです）

# まとめ
Hubbleで初めて、Squadを体験しましたが、個人的には良いことばかりでした。

それに、[Squadの記事](https://note.hubble-docs.com/n/n8197fcee132d)にもあった通り、*既存顧客のための開発にフォーカス*と*新規顧客獲得のための開発*のように、別々の目的がある場合、Hubbleのようにチーム分けすると、それぞれ独立して開発できるため、議論しやすく、開発スピードも向上すると期待しています！！

明日は [power3812](https://qiita.com/power3812) さんです！

[^1]: 平日のみの投稿なので14日ですが、10日目の記事としています。
Laravel 学習におすすめのサイト・アカウントまとめ


[VISIONARY JAPAN Advent Calendar 2023](https://qiita.com/advent-calendar/2023/visionary-jp) 1日目の投稿です！！

https://qiita.com/advent-calendar/2023/visionary-jp

今日は [@y_onishi](https://qiita.com/y_onishi) さんの記事も投稿されています！
VISIONARY JAPAN の営業について紹介されているのでぜひチェックしてみてください！

https://qiita.com/y_onishi/items/2d68f3b87d4ed062e620


##  
今ままで自分が Laravel を学習してきた中で個人的によかったなと思ったサイトやアカウントをまとめてみました。

# Laravel Bootacamp
https://bootcamp.laravel.com/


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/934895/eb785cba-6876-eaa4-256a-13a350def7ae.png)
英語版のサイトにはなりますが、ブラウザの翻訳機能などを使えば問題なく進めることはできると思います！
この Laravel Bootcamp ではモダンなアプリケーションをゼロから構築する方法を学ぶ事が出来ます！
具体的には「Chirper」というマイクロブログプラットフォームを作成するチュートリアルが提供されています。
Bootcamp 内でもざっくり 3 つのコースに分かれています。
### 1. Blade
Blade は Laravel に含まれているテンプレートエンジンです。
### 2. Livewire
Liviwire は JavaScript を使用することなく Blade と PHP の記述のみで動的な機能を作れるライブラリです。
### 3. Inertia
Inertia はサーバーサイドのルーティングとコントローラを使用して、モダンなシングルページ、Vue や React アプリケーションを構築する事ができるものです。

上記 3 つそれぞれにチュートリアルがあるのが特徴です。
このチュートリアルをやることで Laravel の CRUD アプリ作成の体験をする事ができるのでおすすめです。

# Laravel の教科書
https://biz.addisteria.com/


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/934895/1c952925-81f3-3ab2-0f07-cf4cce209fac.png)
Laravel について発信している Junko さんという方が運営しているサイトです。
自分も Laravel を学び始めた時はこのサイトで学習をしてとてもお世話になりました。

基礎編は無料で上級編は有料となりますが、最後までやると 1 つのアプリが完成して Laravel の主要機能についての解説も詳しくされているのでおすすめです！

この方は Laravel の教科書以外にも Blog や YouTube などでも Laravel の情報発信をしているのでそちらもチェックしてみて下さい！

# Udemy
https://www.udemy.com/course/laravel-multi-ec/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/934895/84e73837-9a5c-dcad-8d61-c9c8fd1b3043.png)

この Udemy の教材を取り組むことでマルチログイン機能を構築し、ECサイトを作成することが出来ます。
Laravel の根幹となるサービスコンテナのことやサービスプロバイダについての解説もあります。
また、初心者向けの教材は Controller に詰め込んで記述してあるのがほとんどですが、この教材はサービスへの切り離し方も学ぶことができるのでおすすめです！
他にも以下機能を学ぶことが出来ます。
- メール送信処理
- 非同期処理（キュー & ジョブ）
- Stripe との連携方法
- ローカルスコープ

上記以外にも学べることはたくさんあるのでぜひ取り組んでみてください！！

# Taylor Otwell
https://twitter.com/taylorotwell

Taylor Otwell さんは Laravel の作者です。
Laravel の新機能についてやリリース日についてなどの最新情報を発信していたり、Laravel の Tips を発信していたりするので投稿をチェックする価値ありです 

Laravel についてもっと知りたいなと思ったら、Laravel の内部コードを見てみたり、Laravel の github のプルリクエストを見るのもすごく勉強になると思います。

https://github.com/laravel/framework

ちなみに私は、誰でもできる軽微な修正ですがプルリクエストを作成して、Taylor Otwell 氏にマージされました！
なので Laravel のコントリビュータといっていいはず！

https://github.com/laravel/framework/pull/45833


# PovilasKorop
https://twitter.com/povilaskorop

https://www.youtube.com/@LaravelDaily

https://github.com/povilaskorop

この方は PHP/Laravel のことについてつぶやいたり、YouTube ではほぼ毎日投稿していたりして、とても熱心に情報を発信しているので最新情報をキャッチアップすることが出来ます！！


# Laravel News
https://laravel-news.com/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/934895/f1ada5c3-dbd3-7c7f-682e-d1ffc8ab20f1.png)

Laravel News は、Laravelに関する最新のニュース、チュートリアル、イベント、プラグインなどの情報が提供されているサイトです。
Laravel の新機能やバージョンのリリース、ベストプラクティスに関する記事などが含まれていて、Laravel ユーザーにとって有益な情報が提供されています。
Laravel の最新情報をキャッチアップする際に使用しています！！

ぜひ、これらのアカウントやサイトを活用して Laravel 学習に役立ててみてください！！
AI-102試験対策のまとめ「Azure AI Visionによる不適切な画像の検出」

## はじめに
Azure AI Engineer Associate(AI-102)取得に向けた勉強でまとめた内容を本記事では投稿しています。
試験範囲の内容を私が勉強していく中で、
・忘れてしまっていた内容
・他の知識と絡めて理解した方が良い内容
・Microsoft Learnの読解に苦戦した内容
などをできるだけ分かりやすく簡潔にまとめることを意識しています。
Azureの勉強を一から始め、AI-102取得を目指している方の参考になれば幸いです。
※本記事の内容が必ず試験に出るわけではないこと、ご注意ください
※勉強しながら投稿しているため、追加で学んだことがあれば随時投稿内容を更新します。

## 試験対策のまとめ
### Azure AI Visionによる不適切な画像の検出
* Azure AI Visionでは、画像内の成人向け素材を検出可能  
⇒Analyze Image 3.2 APIを使用  
⇒`visualFeatures`クエリパラメーターに`Adult`値を追加することで可能
* 各コンテンツに対して0-1のスコアを持つコンテンツフラグが適用される
    - Adult：露骨に性的な内容で、その多くがヌードや性的な行為を描写したもの
    - Racy：性的なものを想起させるものの、Adultよりは性的に明白な内容が少ないもの
    - Gory：極端な暴力や血が描写されているもの

#### **Analyze Image 3.2 API**
* リクエストURL
    ```
    https://{endpoint}/vision/v3.2/analyze[?visualFeatures][&details][&language][&model-version]
    ```
* リクエストパラメーター(`visualFeatures`)
どの視覚的特徴タイプを返すかを示すカンマ区切りの文字列
    | 視覚的特徴のタイプ | 説明 |
    | --- | --- |
    | `Adult` | 画像がAdult/Racy/Goryにあたるかを検出 |
    | `Brands` | 画像内の様々なブランドを検出(おおよその位置も含む) <br>※英語でのみ利用可能 |
    | `Categories` | ドキュメントで定義された分類に従って画像コンテンツを分類 |
    | `Color` | アクセントカラー、ドミナントカラー、画像が白黒かどうかを決める |
    | `Description` | サポート言語で画像コンテンツを完全な文で説明 |
    | `Faces` | 顔が存在するかどうかを検出 <br>存在する場合は座標/性別/年齢を生成 |
    | `ImageType` | 画像がクリップアートであるか線画であるかを検出 |
    | `Objects` | 画像内の様々なオブジェクトを検出(おおよその位置も含む) <br>※英語でのみ利用可能 |
    | `Tags` | 画像コンテンツに関連する単語の詳細なリストを使用して画像にタグ付け |

* `Adult`パラメーターの応答
    - ブール型プロパティ(true/false)
        - `isAdultContent`
        - `isRacyContent`
        - `isGoryContent`
    - それぞれのカテゴリに対する信頼度スコア(0～1)
        - `adultScore`
        - `racyScore`
        - `goreScore`

<br>

* 参考
    - https://learn.microsoft.com/ja-jp/azure/ai-services/computer-vision/concept-detecting-adult-content
    - https://westcentralus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-2/operations/56f91f2e778daf14a499f21b

## 次の試験対策のまとめ
* **AI-102試験対策のまとめ「Azure AI Languageのカスタムテキスト分類における評価メトリック」**

https://qiita.com/fsd-jume/items/b9868e7406ff4ffb42b6

## 学習内容をまとめたページの一覧

https://qiita.com/fsd-jume/items/65aba5d5514e023fd66d
LPIC/Linux学習記録#5

〇自戒のための自己への宣誓
1. お前に足りないのはインプットだ！！！インプットしろ！！！インプットの奴隷になれ！！！
2. 記事の書き方とか今はどうでもいいから書け！！！インプットをアウトプットしろ！！！やる前からこだわりとか持つな！！！
3. 見られることとか評価されることとか気にするな！！！MECEとか構造化されてるかどうかとか気にするな！！！構造化はアウトプットの整地であって、インプットが足りないお前が手を出す領域ではない！！！ていうかお前頭良いんだからインプットに注力しろ！！歴史を刻め！！！歴史をまとめようとするな！！！未来を描け！！過去を清算するな若者め！！！！
4. 疑問を持つことを恥じるな！！！お前は頭はいいがインプットが足りない未熟者だ！！！インプットの奴隷になれ（再掲）！！！

〇学習記録
コマンドが保存されているディレクトリは、一般的に６つあるらしい。
bin: 一般ユーザー向けコマンド
sbin: 管理者向けコマンド

- /bin: 一般ユーザーでも実行可能な、基本的なシステムコマンド集。
- /sbin: 管理者向けのシステムコマンド集。
- /usr/bin: 一般ユーザー向けのアプリ・コマンド集。
- /usr/sbin: 管理者向けのアプリ・コマンド集。
- /usr/local/bin: システムディストリビューションに含まれていないソフトウェア（システムディストリビューションてなに）
- /usr/local/sbin: 管理者向けのアプリ・コマンドがあるらしい。

/usr/local/bin,/usr/local/sbinはよくわからん。サードパーティ製のアプリとかコマンドを入れたらここに配置されるみたいなことなのかな。システムディストリビューションっていうのは例えばubuntuとかrhelとかのLinuxディストリビューションそれぞれに既に備わってるもしくは想定されているもののことをいうのかね。

コマンドの場所を確認するのにwhichとwhereisがあるらしいけど、出力結果が異なるのとそこで出てきたコマンドの使い方がどこでわかるのかわからん。。
→whichは環境変数$PATHの中から探すらしい。whereisはbinary, source, manualから探すらしい。

aliasを使えば、コマンド+オプションや引数のセットにあだ名をつけれるらしい。
alias ll = "ls -la"とすれば、llを実行すればls -laが代わりに実行されるらしい。
[Selenium(python)]Edgeでスクレイピングする時のテンプレートmemo

# 環境
```
Python 3.10.11
```

```
selenium==4.4.3
webdriver-manager==4.0.1
```
2023年11月30日時点

# コード
```python:main.py
from selenium import webdriver
from webdriver_manager.microsoft import EdgeChromiumDriverManager
from selenium.webdriver.edge.service import Service

# Options
options = webdriver.EdgeOptions()
options.add_argument('--disable-extensions')
options.add_argument('--disable-gpu')
options.add_argument('--no-sandbox')
options.add_argument('--disable-dev-shm-usage')
options.add_argument('--enable-chrome-browser-cloud-management')

# driver
service = Service(executable_path=EdgeChromiumDriverManager().install())
driver = webdriver.Edge(service=service, options=options)

# 終了
driver.quit()
```

# 説明
#### 1. エラー対策

* `Service`と`--enable-chrome-browser-cloud-management`は使わないとエラー吐くので使っています。

#### 2. Options
* いろいろ無効にしているのは、AWSなどで使う時にメモリの消費量増えちゃうからです。
* heroku使ってた時、無効にしないとout of memoryになった経験から癖づいてます。

#### 3. ドライバーのパス
* ドライバーはローカルにダウンロードしない派なので、`EdgeChromiumDriverManager().install()`を使っています。

# 情報もとむ
これ以上に推奨される書き方あれば教えてほしいです誰か！

# selenium 4 使うときによく見るサイト
https://www.selenium.dev/ja/documentation/webdriver/troubleshooting/upgrade_to_selenium_4/
今、個人開発で作っているものをご紹介させてください!!

![スクリーンショット 2023-11-30 9.07.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/bd4b783e-612d-d288-6c58-42d88fa6ce1f.png)


:::note info
この記事は、<b>株式会社ゆめみの23卒 Advent Calendar 2023</b>のアドベントカレンダーになります！！
色々な種類の記事が投稿されるので、お楽しみに🤗
:::


https://qiita.com/advent-calendar/2023/yumemi-23-graduation

# 本題

こんにちは。いせりゅーです。
今回は、仕事とは別に趣味でやっている個人開発で作り始めていることをご紹介させていただきたいなと思っています。

# アプリ名（候補）

- <b>FoodGram</b>
- <b>Food Instagram</b>
- <b>Taste Journey</b>
- <b>Dish Diary</b>
- <b>Savor Scene</b>
- <b>Nosh Note:</b>


:::note info
いいアプリ名を募集中！！！！！
- 良さそうなタイトルを募集しています！お気軽にコメントください！
- 採用されるかもしれません！？
:::

# どんなアプリ
- 外食の経験を写真やレビューで共有できるソーシャルアプリ
- 自分が外食で食べたご飯を投稿することができる。
- 色々な人のご飯を閲覧することができる。


# 作ろうと思った背景
- インスタグラムなどで食べ物だけを見たいなと思ったりしていた。
- 自分の投稿でサブアカウントで食べ物の投稿をしている。
- 色々な食べ物の写真を一つのアプリで見たい。
- Supabaseを使いこなせるようになりたかった。

# スクリーンショット(開発段階)

- UIについては色々なアプリを参考にして、最高なものを作りたいですね。頑張ります🔥

| タイムライン| マイページ | 設定 |
|:-----------:|:------------:|:------------:|
| <img width="100%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/c1cbe3d5-d6c2-6d2a-eeb1-495b63a59baf.png">  | <img width="100%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/e36e6764-d296-d269-32f3-df30d96a4fbd.png"> | <img width="100%" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/4f4ee7fc-3e46-dd34-fcc1-0cf62bc6115e.png"> |




# 今後の展望
- LPサイトを作りたい。
- Eat to Earnのシステムを導入したい
- バッジなどを導入し、レビューや写真の投稿を促進
- テーマに基づいた食べ歩きチャレンジや写真コンテストを開催
- レストランとのパートナーシップ: 特別オファーや割引を提供するレストランと提携
- 広告モデルの採用: レストランや食品関連企業からのターゲット広告
- AIによる写真解析: 投稿された写真から料理を自動識別し、関連情報を提供
- 音声アシスタントの統合: 音声コマンドでアプリを操作できるようにする
- 健康志向の選択肢の強化: 健康的な食事オプションを強調し、栄養情報を提供

# 最後に
- 色々書いてみましたが、まずはリリースできることを目標に頑張っていきます🔥
- 応援してくれると喜びます！

参照リンク

https://github.com/iseruuuuu/food_gram_app



# ちょっとした宣伝


株式会社ゆめみの23卒のメンバーでアドベントカレンダーを作成しています。
新卒のフレッシュな記事がたくさん投稿予定なので、少しでも興味があれば購読いただけると幸いです！！


https://qiita.com/advent-calendar/2023/yumemi-23-graduation


<img width="1240" height="112" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/672609/6d8a7098-9aef-a19a-54fe-83a2d493e033.png" alt="YUMEMI New Grad Advent Calendar 2023">
dropboxのまとめ

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



+ [dropbox sign/hello sign expert](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007Pi1f4)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/ef057066-c8fe-e3ee-ecdf-76cd704b45ec.png)

:::note
The error "Value for editable custom_field is too long" typically occurs when the length of the value being passed for the custom field in this case 'Opportunity.Parent_Contact_Email__c' exceeds the maximum allowed length.
:::
Tips: Railsでポリモーフィック関連付けを使うときはインターフェースに依存した実装をするようにしよう

## この記事は何
Railsにはポリモーフィック関連付けという機能があります。

https://railsguides.jp/association_basics.html#%E3%83%9D%E3%83%AA%E3%83%A2%E3%83%BC%E3%83%95%E3%82%A3%E3%83%83%E3%82%AF%E9%96%A2%E9%80%A3%E4%BB%98%E3%81%91

この機能は使い方によっては便利な一方、依存を複雑化させる原因にもなりうるものです。
この記事では、ポリモーフィック関連を使うときにやりがちな「特定のモデルへの依存」を避けるテクニックをご紹介します。

ポリモーフィック関連の具体的な使い方はドキュメントや、以下の記事などをご参考ください。

https://qiita.com/sazumy/items/726e7097c6ca4a9ca6e3

https://qiita.com/itkrt2y/items/32ad1512fce1bf90c20b

## ポリモーフィック関連を使っている時に起こること
ポリモーフィック関連を使っていると、特定のモデルの場合にのみ実行したくなる処理などが生まれた時に、以下のような実装をしてしまうことがあります。

```rb
class Like < ApplicationRecord
  belongs_to :like_user, User
  belongs_to :liked_user, User
  belongs_to :item, polymorphic: true
  after_create :log_liked_data, if: :article?

  def log_liked_data
    item.track(user: like_user)
  end

  def article?
    item.is_a?(Article)
  end
end

class Article < ApplicationRecord
  has_many :likes, as: :item
end

class Question < ApplicationRecord
  has_many :likes, as: :item
end
```

このような実装は、正しくは動きますが、本来Like側では依存するべきではないArticleに依存した処理になってしまっており、依存関係が複雑化してしまっています。
このような実装はバグも生みやすくなり、できれば避けた方が良い実装です。

## 解決方法
このような問題を解決する方法は、SOLID原則でいう、いわゆる「インターフェース依存の原則」と「依存関係逆転の原則」を適用した実装にしていきます。

実装する流れは以下の通りです。

- Likeもしくは同じネームスペース内に、moduleでインターフェースの定義を行う
- ポリモーフィック関連で依存する側のモデルに、実装したインターフェースをincludeし、処理の実装を行う
- Likeはmoduleで定義したインターフェースにのみ依存するように実装を変える

コードにすると以下の通りです。

```rb
class Like < ApplicationRecord
  belongs_to :like_user, User
  belongs_to :liked_user, User
  belongs_to :item, polymorphic: true
  after_create :create_side_effect

  def create_side_effect
    item.like_create_side_effect(like: self)
  end

  module Likable
    extend ActiveSupport::Concern
    
    included do
      has_many :likes, as: :item
    end

    def like_create_side_effect(like:)
      raise NotImplementedError
    end
  end
end

class Article < ApplicationRecord
  include Like::Likable

  concerning :Likable do
    def like_create_side_effect(like:)
      Tracker.track(user: like.like_user, target: self)
    end
  end
end

class Question < ApplicationRecord
  include Like::Likable

  concerning :Likable do
    def like_create_side_effect(like:); end
  end
end
```

## まとめ
ポリモーフィック関連は、依存先を抽象化するテクニックです。
抽象化する場合は、特定のモデルに依存するような処理は基本的に書かずに、インターフェースに依存するような実装をするようにしましょう。
IBM i アーキテクチャー：単一レベル記憶：シングル・レベル・ストレージ(SLS) その2

 [SLS その1](https://qiita.com/gomAnomalocaris/items/311f6417d68737dbdc23) の1の続きです。
## IBM i SLSの動作

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/954ac617-e08c-44b7-7b18-5a6afd78f0e6.png)

SLS（シングル・レベル・ストレージ）アーキテクチャーは物理的なストレージに依存しないアドレッシングメカニズムです。メインメモリとストレージ装置を単一の記憶域として扱います。
すなわち、
　1). SLSによるアドレッシングはデータ（オブジェクト）の物理的な位置、システムに実際に接続されているストレージ装置のタイプ（例：NVMe, SSD, HDDやストレージ製品型番）、台数と完全に独立しています。
 　→ゆえに、例えばIBM i のバックアップデータは保管元のH/W構成と全く異なるH/WやクラウドのIBM i SaaS（PowerVS）などにすべて復元することが可能です。（※厳密には復元先のH/Wや環境がバックアップしたIBM i OSバージョンをサポートするものである必要がありますが、POWERハードウェアのライフサイクルの長さとIBM i のサポートサイクルの長さを考慮するとかなり融通が利くと思います）
  2). SLSの対象はデータベースレコードのみならず、OSやユーザーアプリケーションなどプログラム・コード全般、その他IBM i システム上の全てのデータ（オブジェクト）で、SLSによるページングの対象になります。

IBM i ではメインメモリを増やせば増やした分だけ100%使い切る、という事も言えます。無制限にではありませんが一定レベルまではパフォーマンス向上にも貢献します。この辺りは他のOSとは一線を画す部分だと思います。

## IBM i(SLS)はメイン・メモリー上にロードされた,ただ1つのプログラムオブジェクトとデータベースレコードが複数のジョブで共有される
SLSがパフォーマンス向上に寄与する、データレコードの取り扱い方も説明します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1011394/19b00ecf-00a7-e501-f8f9-0eaea42326ff.png)

IBM i のメインメモリは上記のように論理的に分割されていて、多様なプログラムや実行形態が混在してもパフォーマンスが常に最適になるような調整が行われます。
上の例はデフォルトのメインメモリ論理分割法で4つに論理分割されています。プール2 *BASEにはOSやユーザーがバッチ投入したプログラムや、たとえばODBC/JDBCでIBM i 外からリクエストされたSQLを処理するプログラム等が実行されます。プール2のバッチJOB1が顧客マスターをREADすると対象のレコードはメインメモリのプール2にロードされます。このデータは更にバッチJOB1用のPAG内にコピーされてプログラム（JOB1）内で処理されます。
このとき、別な5250対話JOB2が同じ顧客マスターのレコードをREADした場合、プール2上にロードされているデータを自身のPAG内にコピーして使用できます。
このように一旦メインメモリにロードされたデータを複数のジョブから共有でき、しかるべきタイミングでストレージ書き出ししたり、複数ジョブ間でのデータ更新の競合制御（排他制御）などはOSが担ってくれます。たとえばバッチJOB1が顧客マスターをINPUTファイルとしてOPENしている場合、他のジョブ（5250 JOB2など）はUPDATE可能でREADできます。バッチJOB1がINPUT/OUTPUTとしてOPENしている場合はレコードロックがかけられ、他のジョブがUPDATEモードでレコードをREADしようとするとLOCK WAITで待機します。（INPUTモードでのREADは可能）

## メインメモリ上で更新されたデータをストレージに書き出すタイミング
これは主に以下があります。
 1). ファイルのFULL CLOSE時
 2). RPGの強制書き出し命令 FEOD実行時
 3). メインメモリの新たなページインの領域が無くなった場合にLSU(Least Recently Used)アルゴリズムでページアウト対象になった場合
 4). データベーステーブル(PF,物理ファイル)に指定されたFRCRATIOパラメーターの指定に合致する場合

## SLSのパフォーマンス上のメリット

・メインメモリ上にロードされたデータやプログラム・コードは複数のジョブ（ユーザーが実行するプログラム）から共用される。ゆえにメインメモリの必要量を低減できる
・一度メインメモリにロードされると他のジョブであっても二回目のストレージからのデータ読み出しが不要になるためストレージのビジー率（アームビジー率）を低減できる
・他のユーザー・ジョブがロード済のデータ・プログラムを使用できる場合、ストレージへのI/O時間を短縮できレスポンス向上が期待できる

## SLSを効率的に動作させるための条件

※SLSを効果的に機能させるためには（パフォーマンスをよくするためには）メインメモリ全体がキャッシュ的に再利用できるように十分に大きなサイズを有している必要があります。システム負荷に相応なメインメモリが搭載されていない場合、パフォーマンス劣化を引き起こします。

## メインメモリが足りているか？の確認はどうやって？
メインメモリのサイズはシステム負荷に見合った容量までであれば増やした分だけパフォーマンスは向上します。ですが過剰に搭載してもパフォーマンス向上はあまり期待できません。メインメモリの過不足は実際のシステムでパフォーマンスデータ（収集サービス）を取得すれば、Navigator for iで簡単に確認が可能です。
参考URL: 
【できるIBM i 7.4解剖】第4回 「IBM i 7.4 サイジングTipsと最新のパフォーマンス分析ツールご紹介」 https://www.i-cafe.info/column/serials/dekiruibmi_no4
3. Navigator for i のメニューのパフォーマンスからパフォーマンス分析を実施

## 物理的なストレージ管理はどのようになっている？
ストレージ装置はASPと呼ばれる、いわゆるLUNですね、で管理されています。ASPの解説記事はこちらをどうぞ。

IBM i 駆け出し日記：IBM i のストレージ管理(ASPについての理解)
https://qiita.com/koga39chan/items/09a9dae7be30f05e8d15
Macで周期的に音を鳴らして仕事の効率を上げる

# この記事の目的
プログラムを書いている最中に、集中しずきて時間を忘れる時がありますよね。
周期的に現実世界に戻るためのプログラムになります。

# 実装

``` sh:worktimer.sh
#!/bin/sh
while true
do
    echo "Sounds" && (afplay /System/Library/Sounds/Ping.aiff)
    sleep 900
done
```

# 実行例

HOMEに設置してパーミッションを変更
```
./worktimer.sh
```

# 終わりに
MTGやタスク確認、連絡確認が遅れるのは集中型プログラマーのデメリットなので対策しましょう。
是非調べて作ってみてください。
【初心者にも分かりやすく】メタプログラミングって何?

## はじめに
**メタプログラミング**について、みなさん聞いたことありますか?
僕は聞いたことはあるけど、何なのか少し前までは知りませんでした。

👨「フレームワークや言語を作るためのプログラミングのこと...?」

みたいな理解でいました。

今回は自分自身の勉強も兼ねて記事にまとめさせていただきます！

## メタプログラミングとは?
以下wikipediaより引用
>メタプログラミング (metaprogramming) とはプログラミング技法の一種で、ロジックを直接コーディングするのではなく、あるパターンをもったロジックを生成する高位ロジックによってプログラミングを行う方法、またその高位ロジックを定義する方法のこと。主に対象言語に埋め込まれたマクロ言語によって行われる。

少し噛み砕いていうと、**コード自身を生成する(関数を新しく定義する、変数を作る)コードを書くこと**です。
「ロジックを生成するロジック」とも言われたりします。

これだけでは「だからどういうこと??」となると思うので**Ruby**で例を出していきます。

**通常の関数定義**から見てみましょう。

```rb
class Car 
  def running_sound
    p 'ぶおーん'
  end
end

sedan = Car.running_sound
sedan.running_sound #=> "ぶおーん"
```

よく見る def　を使用して関数定義を行うやり方ですね。

もう一例出してみましょう。

```rb
class Car
  def toyota(name)
    p "toyota:" + name
  end 

  def matsuda(name)
    p "matsuda:" + name
  end

  def suzuki(name)
    p "suzuki:" + name
  end
end

car = Car.new
car.toyota("prius") #=> "toyota:prius"
```
上を見てどう思うでしょうか?

**・ 共通化できないのか?**
**・ 定義している関数の役割が類似してる**
**・ 後から他のメーカーを追加したら新たに関数を作らないといけない**

など面倒なことが多いですよね(~~インスタンス変数にname定義したいと思いますが、今は気にしないでください~~)



**動的に関数定義**、所謂メタプログラミング的な記述方法をしてみましょう！

```rb
class Car
  %w(toyota matsuda suzuki).each do |maker|
    define_method(maker) do |name|
      p "#{maker}:" + name
    end
  end
end

car = Car.new
car.toyota("prius") #=> "toyota:prius"
```

上記を見るとわかる通り、メタプログラミングすることによって下記の点が改善されました。
**・ 定義している関数の役割が類似している箇所は共通化。**
**・ 配列に要素を追加するだけでメソッドを追加**

## まとめ
いかがでしたでしょうか。

今回は、メタプログラミングについてコードを交えて分かりやすくまとめました。
今回の記事が多くの方に参考になったら幸いです。

## 参考資料
https://www.youtube.com/watch?v=3r0NzOdIldw

https://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0#:~:text=%E3%83%A1%E3%82%BF%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%20(metaprogramming)%20%E3%81%A8%E3%81%AF,%E3%83%9E%E3%82%AF%E3%83%AD%E8%A8%80%E8%AA%9E%E3%81%AB%E3%82%88%E3%81%A3%E3%81%A6%E8%A1%8C%E3%82%8F%E3%82%8C%E3%82%8B%E3%80%82
CGIとAPサーバーの違い

# CGIとAPサーバーの違い

ウェブアプリケーションの世界において、CGI（Common Gateway Interface）とAPサーバー（Application Server）は、それぞれ異なる役割を担い、ウェブサイトの機能性を大きく左右します。しかし、これらの技術の違いや特徴を理解するのは初心者にとって難しいかもしれません。そこで、この記事ではCGIとAPサーバーの基本的な違いとそれぞれの特徴について解説します。

## CGIとは

CGIは、ウェブサーバーと外部のアプリケーションやスクリプトとの間のインターフェースです。この技術はウェブサーバーがクライアントからのリクエストに応じて外部プログラムを実行し、その結果をウェブページとしてクライアントに返す際に使用されます。

### CGIの特徴

- **独立性**: CGIスクリプトは、ウェブサーバーから独立して動作するため、様々なプログラミング言語で書くことができます。
- **シンプルさ**: CGIはシンプルな仕組みであり、小規模な動的ウェブページの作成に適しています。
- **リソース使用**: しかし、各リクエストに対して新しいプロセスが生成されるため、大量のトラフィックがある場合にはリソースを大量に消費することがあります。

## APサーバーとは

APサーバーは、アプリケーションサーバーのことで、ビジネスロジックやデータベースとの連携など、ウェブアプリケーションの動的な部分を担います。これはクライアントからのリクエストに基づいて必要な処理を行い、その結果をウェブサーバーに返し、クライアントに表示されるウェブページを生成します。

### APサーバーの特徴

- **複雑なアプリケーションの処理**: APサーバーは、複雑なビジネスロジックやトランザクション処理を扱うことができます。
- **スケーラビリティ**: 大規模なアプリケーションや多数の同時アクセスに対応できるように設計されています。
- **セキュリティ**: セキュリティ機能を内蔵し、安全なトランザクションを実現します。

## CGIとAPサーバーの比較

両者の主な違いは、処理の複雑さとスケーラビリティにあります。CGIは単純な動的ページの生成に適しているのに対し、APサーバーはより複雑なアプリケーションや大規模なトラフィックに対応できる設計になっています。

### どちらを選ぶべきか

- **小規模なウェブサイト**: CGIを使用してシンプルな動的コンテンツを生成することができます。
- **大規模な企業アプリケーション**: 複雑なビジネスロジックやデータベース連携が必要な場合、APサーバー

の使用が適しています。

## まとめ

CGIとAPサーバーは、それぞれ異なる種類のウェブアプリケーションに適しています。適切な技術を選択することで、効率的で安全なウェブアプリケーションを構築することが可能です。プロジェクトの要件に応じて、最も適した方法を選ぶことが重要です。
Pythonで開発したAppを遷移する方法

:::note info
自分勉強のメモ、ご参考まで
:::

## 本文

**(1) インストール済みパッケージより、requirements.txtファイルを作成**

```bat
#requirements.txtを作成
pip freeze > requirements.txt
```


**(2) 必要なパッケージをダウンロード**

```bat
#プロキシ設定
set HTTP_PROXY=http://proxy.xxxxxxxx.co.jp:8080
set HTTPS_PROXY=http://proxy.xxxxxxxx.co.jp:8080

#requirements.txtにより、パッケージをダウンロード
pip download -d ./packages -r requirements.txt
```

**(3) パッケージを移動先PCにコピーし、下記のようにインストール**

```bat
pip install --no-index --find-links=./packages -r requirements.txt
```

## 注意事項

:::note info
**wheel** パッケージ は先にインストールかもしれません
:::

:::note info
Windows環境では、**VC_redist.x64.exe** 必要かもしれません
https://learn.microsoft.com/ja-jp/cpp/windows/latest-supported-vc-redist?view=msvc-170
:::
cv2.VideoWriterでH264 codecを使う。

# mp4vはブラウザで再生できない。

cv2.VideoWriterを使って動画を書き込む際、codecにmp4vを使うと、書き込んだ動画をブラウザで再生できない🥺

```python
cv2.VideoWriter_fourcc(*'mp4v') #　ブラウザで再生できないファイルになる
```

ブラウザで再生できる**h264** codecを採用する必要があるです。

# pip で入れたOpenCVではh264が使えない。

ということで、H264を使いたいですが、以下のようにH264を設定すると、pip install したOpenCVではH264を使えないので、書き込めない🥺🥺

```
cv2.VideoWriter_fourcc(*'avc1') # h264設定のavc1は書き込めない
```

# 解決方法

なので、pipではなく、以下の方法でOpenCVを入れます。

```shell
pip uninstall opencv-python
sudo apt install build-essential cmake git python3-dev python3-numpy \
libavcodec-dev libavformat-dev libswscale-dev \
libgstreamer-plugins-base1.0-dev \
libgstreamer1.0-dev libgtk-3-dev \
libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev \
libopencv-dev x264 libx264-dev libssl-dev ffmpeg


python -m pip install --no-binary opencv-python opencv-python
```

無事h264で書き出せました。
colab環境です。

![Nov-30-2023 09-01-15.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/8b3f0df5-1681-b969-c71e-9f3d84fd750c.gif)
PowerApps コネクタで躓いたすべての人へ、データ連携できなくて泣いた同志よ！

## コネクタで躓いた人 躓くかもしれない 全ての人へ

PowerApps位しか社内で自作できる業務改善デジタルツールが無いので、Microsoftさんのモノの言い方が回りくどくて全然親切じゃなくてお高く留まってる感じが悔しいので、絶対なんか便利なモノ作りたい！と意気込んでみたものの

アプリとデータを繋げるコネクタ接続の方法で躓き悔しい思いをしましたのが一年前 なんとか業務改善ツールはできたんですけど 僕はPowerAppsのことが嫌いになりました

そんな大嫌いなPowerAppsの使い方について最近セミナーで話をさせていただいたんですけど、やっぱりコネクタのところは「なんとなく頑張ってください！」で逃げてしまいました

今回 ”禊”  としてコネクタ接続の方法を
初めての人にでも分かるように記事を書きたいと思います

## データの追加
PowerAppsの左側 よくあるデータベースのマークをクリックするとデータの追加ボタンが現れます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/dbfa7ae0-171f-5fe6-03eb-6b186d857565.png)
勢いよくボタンを押すと データソースの選択画面が表示されます 
まだワクワク気分ですね

テーブルやAIモデルのトグル内は これを読んでいる位の無垢な子らは
とりあえず無視しましょう 
初心者はまずは”コネクタ”です

## っていうか その前に SharePointにデータ保存先をつくりましょう
新しくデータリストを作りたいのでSharePoint で 画面左、もしくは画面下部にある作成ボタンから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/e376db17-0d1e-3180-fce9-2d0a6c2088b9.png)これです
スプレッドシートExcel（権限が無ければ無理）か
リストを作成します 保存先は ”マイリスト”でOKです

例えばタスク管理アプリなら タスクID、項目、内容、期限、担当者などの列を追加します
データの保存先ができので コネクタでアプリと接続します
PowerAppsに戻る前にリスト作成画面のURLをコピーしておいて下さい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/8197c0d1-2b8a-2cf5-e1fd-cbe5b7ad378f.png)

## いよいよコネクタ！
PowerAppsのアプリ作成画面で データ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/7eb2fbc1-495c-b593-fc4a-6c96734f260a.png)押して
データの追加押してコネクタから”SharePoint”を選択
※注意！ ”SharePointサイト” ではない

すると
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/a6a38628-52aa-6ea1-f77d-a3956db8e6a7.png)
に先程作ったリストのURLを貼り付け 任意のリストを選択します

これで例えば 垂直ギャラリーをアプリに配置したら データソースの選択の際
アプリと連携させたリストが接続できると思います
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/d3a5f47a-7de6-b11c-be4a-f5e6e8ed2b69.png)

あとは垂直ギャラリーのフィールドを整える
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2617007/02a89cca-62ce-5542-02d7-579ab84822d4.png)

垂直ギャラリーのプロパティの ”フィールド” からどの枠に何の列の情報を入れるか割り当てればOK

## OneDriveに保存したExcelに接続するときは  Excel内の表を必ずテーブル化しておくこと！！！！
URLって何の？SharePoint のURL？
SharePointってそもそも何？
コネクタ多すぎ！って最初はイラっと来ること間違いないんですが
触っているうちに何となくくアプリが出来てしまうと思うので
さすがローコード！  Microsoft！
### 






Dataverseってのは下記サイトとか見て頑張ってください(^_^)v
テーブル作成や更新などにSQL文を必要としない
高度なセキュリティ機能を兼ね備える
Web APIやSDKも提供されているため、Power Platform・Dynamics 365以外とのデータ連携も可能
と とにかく凄い奴なんです

https://devlog.mescius.jp/dataverse-create-table/
Zapierとの連携

[まとめページに戻る](https://qiita.com/Keiji_otsubo/items/60afc2a8d211b6f7d89f)
[まとめN～Z](https://qiita.com/Keiji_otsubo/items/92f92bb9f668ca9688be)




+ [【訳すこと】Salesforce on Zapier](https://zapier.com/help/doc/common-problems-with-salesforce-on-zapier) 

+ [Error turning Zap on: Your Salesforce account connection is stale](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007RfjNT)

:::note
既知の問題みたいです。再接続すれば解消するようなことが回答されています。


It might be that your connection was marked as "stale" and needs to be reconnected one last time. You can do that in the Zapier Editor, or directly here by using the ... button next to the connection. Also, please make sure you are using CallRail 1.2.2 (which is the newest version of the app).

https://community.zapier.com/troubleshooting-99/error-turning-zap-on-your-callrail-account-connection-is-stale-23791
:::


# 接続エラー

+ [Zapier/Salesforce Connection error auth is expired](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007clYee)

:::note
Between your help and Zapier support I was finally able to connect Zapier and Salesforce. The change that Zapier suggested I made in Salesforce was to uncheck the two boxes below which are under session settings, I unchecked the boxes and went back to Zapier, and successfully connected to Salesforce. Now I have a new question, are there any ramifications that I have to look out for with these two boxes unchecked? I am looking into what exactly these two mean, but I thought I ask. Thanks Again.

+ Lock sessions to the IP address from which they originated
+ Lock sessions to the domain in which they were first used

あなたの助けと Zapier サポートのおかげで、ようやく Zapier と Salesforce を接続することができました。Zapier が Salesforce で行うよう提案した変更は、セッション設定の下にある以下の 2 つのボックスのチェックを外すことでした。ボックスのチェックを外して Zapier に戻り、Salesforce に正常に接続できました。ここで新たな質問があります。この 2 つのボックスのチェックを外すことで、注意すべき影響はありますか? これら 2 つの意味を調べていますが、質問しておこうと思いました。ありがとうございました。

+ セッションを発信元のIPアドレスにロックする
+ セッションを最初に使用されたドメインにロックする
:::
AWS DMSを用いた耐障害性を考える

# はじめに
この記事はDevOps on AWS大全の一部です。
DevOps on AWS大全の一覧は[こちら](https://qiita.com/tech4anyone/items/b06f88035d27c6ef13b2)。

この記事ではAWS DMSを耐障害性の観点から超詳細解説しています。

具体的には以下流れで説明します。

- AWS DMSとは
- AWS DMSを用いたディザスタリカバリ
- AWS DMSを用いる時のベストプラクティス

AWSの区分でいう「Level 200：トピックの入門知識を持っていることを前提に、ベストプラクティス、サービス機能を解説するレベル」の内容です。

# この記事を読んでほしい人
- AWS DMSを採用するときのベストプラクティスを説明できるようになりたい人
- DBの耐障害性に不安を感じている人
- AWS Certified DevOps Engineer Professionalを目指している人

# AWS DMSとは
Amazon Web Services Database Migration Service（AWS DMS）は、異なるデータベースエンジン間でのデータの移行、変換、同期を可能にするフルマネージドなデータベース移行サービスです。

![](https://storage.googleapis.com/zenn-user-upload/4a21741d2d1d-20231130.png)

AWS DMSを使用することで、既存のデータベースをAWS上の異なるデータベースエンジンに簡単かつ効果的に移行できます。
そのため、アプリケーションのクラウドへの移行、データウェアハウスの構築、データの統合など、様々なシナリオに対応できます。

また、AWS DMSは、AWS DMSにAWS Schema Conversion Tool（AWS SCT）を利用したデータベースエンジン間でのデータ変換やフィルタリングをサポートしています。
これにより、異なるデータベースエンジン間でのデータ型や構造の違いを補正し、移行プロセス中にデータの整合性を保つことができます。

![](https://storage.googleapis.com/zenn-user-upload/ffcb9ba1d3ea-20231130.png)

AWS SCTは、異なるデータベースエンジン間でのスキーマ変換を簡素化し、自動化するためのツールです。
AWS SCTは、オンプレミスデータベースや他のクラウドプロバイダからAmazon Aurora、Amazon Redshift、Amazon RDSなどAWSのデータベースサービスにデータを移行する際のスキーマ変換プロセスを支援します。

AWS SCTを利用する際には変換後のスキーマが正確であることを確認するために、変換されたスキーマの検証を行うことが重要です。
AWS SCTは変換プロセスの透明性を提供しますが、自動であるため意図しない変換が行われてしまうことがあります。
そのため、検証を通じてデータの整合性を確保し、移行後のシステムの安定性を向上させます。

# AWS DMS for Advance
## サポートされるデータベースエンジンの理解
AWS DMSは多くのデータベースエンジンと互換性がありますが、全てのデータベースエンジンに対して同じような機能や性能が提供されるわけではありません。

データベースエンジンごとにサポートされる機能や最適な構成が異なるため、移行プロジェクトを開始する前にサポートされるデータベースエンジンの特性を理解することが重要です。

## ターゲットデータベースのパフォーマンステスト
データ移行が完了した後も、AWS DMSによって同期されたデータがターゲットデータベースで期待通りのパフォーマンスを発揮するかどうかを確認することが重要です。

パフォーマンステストを行い、適切な設定やインデックスを検討することで、本番環境でのスムーズな運用が期待できます。

# AWS DMSを用いたディザスタリカバリ
## ソースDBとターゲットDBの同期
AWS DMSは、データベースの変更をトリガーとして、ソースデータベースとターゲットデータベースを同期させることができます。

![](https://storage.googleapis.com/zenn-user-upload/36f784e880dd-20231130.png)

これにより、リアルタイムでのデータ同期が可能となり、データベースの冗長性と可用性を向上させます。

障害が発生した場合でも、ソースとターゲットが同期しているため、瞬時に切り替えてサービスの継続性を確保できます。

## AWS DMS自体の冗長性
AWS DMSを使用する際、データ移行プロセスは冗長でフォールトトレラントなアーキテクチャに基づいています。

データ移行中にエラーが発生した場合でも、自動的にリトライが行われ、データの整合性が保たれます。
これにより、データ移行プロセス中のエラーに強いディザスタリカバリメカニズムが提供されます。

# まとめ
この記事ではAWS DMSを耐障害性の観点から超詳細解説しました。

- AWS DMSとは
- AWS DMS for Advance
- AWS DMSを用いたディザスタリカバリ

次回はAutoScalingを用いた耐障害性を考えます。
いくつかグラフをまとめてみました

### はじめに
学生の頃グラフをなんとなく使っていましたが、仕事でグラフを使って説明する際にグラフの適切な使い方や見せ方などなかなか思いつかなかったので、よく使うグラフのユースケースや特性をまとめてみました。
筆者の主観が強く入った内容となっているため参考にする際には他の情報と合わせてみるようにしてください。

### グラフ

#### 折れ線グラフ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524923/e3ae8067-38b9-a0dc-7a19-9572091f6a6b.png)


折れ線グラフはデータを線で結んで表示するグラフで、時間経過に伴うデータの変化を見るのに適しています。株価・気温などの変動を視覚化するのに使われ、傾向などがわかりやすくなります。
長期間のデータに適していると個人的に考えています。
気温のデータに関して、近年温暖化が進んでいると言われていますが、その時に100以上前からの気温おデータを折れ線グラフで表示して上昇傾向にあるとよく示されていると思います。10年程度のデータだと一時的な変化の可能性も捨てきれないため、傾向を掴むためにはできるだけ長期的なデータを用意する必要があるかと思います。
#### 棒グラフ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524923/e5a3f836-f325-2804-9a7f-285ee3c01f84.png)

棒グラフは棒の高さでデータの大小を表したグラフで、異なるカテゴリーの数値データを比較するのに適しています。棒グラフは単純なデータの比較に関しては、折れ線グラフよりも視覚的にわかりやすいですが、複数のデータを時系列で表示するとそれぞれの棒が細くなってしまい見にく具なってしまいます。データが複雑になる場合は他のグラフを使うことをお勧めします。
ユースケースとしては、スコアや成績などを可視化するのに適していると考えています。具体的には年齢ごとのスコアを棒グラフで表示することなどが適していると考えています。
#### 散布図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524923/17c79bc0-901e-a688-a373-291bf3326a95.png)

散布図は一つの軸に一つの変数を置き、データの関係を視覚化するのに適しています。各点は二つの変数の値を表しています。
またデータがどのように分布しているかが直感的にわかります。
散布図は変数間の相関を見ることができ、エクセルなどで散布図を作成した場合は近似曲線などを表示することができます。近似曲線は各点を最も近い形で通る曲線のことでこれがわかると散らばったデータの傾向がわかるようになります。
ユースケースは気温とアイスクリームの売り上げの関係のようなものが挙げられると思います。実際に検証したわけではありませんが、気温が上がれば売り上げが良くなる傾向が出るというのは想像できるのではないかと思います。
ただし偽の相関関係には注意が必要です。これは統計的には相関が認められるが実際には因果関係がないまたは相関関係が偶然であると考えられるものを指します。例えばアイスクリームと水難事故の件数の関係です。これは気温の上昇が共通の原因であるが、この二つの関係があるように見えてしまいます。データの選択または結果を見て本当に正しいかを判断する必要があります。
#### ヒストグラム
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524923/18d3b258-53b7-4307-cab3-c8642bdae82a.png)

ヒストグラムはデータがどのように分布しているかを視覚的にしたグラフで、データがどの値の範囲に集中しているかなどがわかります。
棒状で表示されている各階級のグラフはビンと呼ばれています。
各ビンの高さは、その便に表示されている値の範囲のデータ数を示しており、視覚的にかなりわかりやすくなっています。
またヒストグラムの形状から正規分布か左右が非対称でどこかに集中しているかなど傾向がわかります、
ユースケースは、あるコミュニティの年齢の分布などを表示するのに適しています。そのコミュニティに属している人の年齢の分布や傾向が一目でわかります。
#### 箱ひげ図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3524923/781cc259-aaee-6d5f-99a6-bd5ba495616a.png)

箱ひげ図はデータの分布を視覚的にしたグラフで、データの最大値、最小値、中央値、四分位数、外れ値を示すことができます。
四分位数は箱の下の面から第一四分位数、真ん中の線が第二四分位数、箱の上の面が四分位数となっており、それぞれ全体のデータの25%,50%,75%に該当します。
ユースケースは、異なる学校で同じ模試のテスト結果を比較する時などに使用することなどに適しています。それぞれの学校のテスト結果の分布。最高得点者、採点得点者、中央値などが一目で比較できます。

### まとめ
このようにグラフにはそれぞれ視覚的にわかることが大きく異なります。
このことから自身が持っているデータや知りたい内容を考えた上でグラフを選択することが重要だと改めて感じました。
今回は自分がよく使ていたグラフを中心にまとめてみましたが、他にもグラフはたくさん存在しています。
機会があれば一度も使ったことのないグラフも使ってみて紹介できればと思います。
【UE5/UE4】C++ビルド時の"[Upgrade]"ログについて

# はじめに
この記事では、C++を使用した Unreal Engine 5/4（以下UEと表記）プロジェクトでビルドをする際に出力されるログのうち、表題の"[Upgrade]"ログについて軽く解説します。

## この記事に対応するバージョンについて
UE5.3をベースに紹介しますが、過去バージョン(UE4時代まで)に遡っても通用する内容がほとんどです。
また、Visual Studio ビルド環境にて記事を作成していますが、記事内の範囲ではコンパイラや OS などの環境によって変化はありません。

## 対象読者
コードプラグイン開発や UE のバージョンアップに対応したいプロジェクト等、 UE の C++ プロジェクトで開発している方

## この記事で紹介しないこと
* ツールチェインやコンパイラなどの導入・更新方法
* C++プロジェクトファイルの生成方法
* [UBT](https://docs.unrealengine.com/5.3/ja/unreal-build-tool-in-unreal-engine/ "UnrealBuildTool") について
* ターゲットファイル（``*.target.cs``）、ビルドファイル（``*.build.cs``）の書き方

# 本題
C++プロジェクトをビルドする際に以下のような領域が出力されることがあります。

:::note warn
以下の例はデフォルトで作成されたC++プロジェクトをビルドした際のログです。
過去の環境からバージョンを上げてきたプロジェクトなどでは内容が異なる場合があります。
:::

```
[Upgrade]
[Upgrade] Using backward-compatible include order. The latest version of UE has changed the order of includes, which may require code changes. The current setting is:
[Upgrade]     IncludeOrderVersion = EngineIncludeOrderVersion.Unreal5_0
[Upgrade] Suppress this message by setting 'IncludeOrderVersion = EngineIncludeOrderVersion.Latest;' in MyProject53Editor.Target.cs.
[Upgrade] Alternatively you can set this to 'EngineIncludeOrderVersion.Latest' to always use the latest include order. This will potentially cause compile errors when integrating new versions of the engine.
[Upgrade]
```

これは UBT による出力で、使用している現在の UE のバージョンに合わせた設定を推奨しているログとなります。

UE のバージョンによって C++ ビルドを行う際に行われる（ UBT による）プリプロセスが異なっていることがあり、この領域ではそれを説明されています。

原則として**この推奨設定に従わなくてもよく**、実行の挙動に変化が起こることは殆どありません。

しかし、推奨設定に従うことで C++ ビルドの速度が早くなるなどの恩恵が得られるため、基本的には推奨設定に従うのが良いでしょう。
ですが、インクルードファイルパスの扱いやインクルード順序の変化などに起因するコンパイルエラーが発生する場合もあるため、既存のプロジェクトにて対応する場合は注意してください。

## 基本的な対応方法

上記のログでは「``MyProject53Editor.Target.cs`` に ``IncludeOrderVersion = EngineIncludeOrderVersion.Latest;`` を記述してください」とあります。
これはそのまま ``MyProject53Editor.Target.cs`` へ追記することでこの領域は表示されなくなります。
基本的に記載されている指示に従うだけで OK です。簡単ですね。

:::note warn
プロジェクトには ``MyProject53.Target.cs`` もありますが、こちらはパッケージビルド時に使用されるファイルで、基本的にこちら側にも同様に追記する必要があります。
:::

# その他のケースなど

## 設定が競合した場合

ターゲットファイル及びビルドファイルには様々なビルドオプションを記述可能ですが、設定によっては別のビルドオプションと競合し、それが"[Upgrede]"ログとして出る場合があります。

この場合もログに従って修正する必要がありますが、もちろんそのままでも殆どの場合競合した片方の設定が無視されビルドは通ります。

## 推奨設定に切り替えるとエラーが出る場合

開発環境によっては推奨設定ではエラーが発生する場合があるようです。（私はコンパイラがスタックオーバーフローエラーを起こした例があります）
大抵の場合は**コンパイラやツールチェインのバージョンを更新することで解消します**が、どうしても解消しない場合は ``DefaultBuildSettings`` の値を変えるなど、過去の最適化設定に切り替えることで対応出来る場合があります。（もちろん"[Upgrede]"ログの催促がでますが…）

:::note info
ビルドログの最初の数行に使用されるツールチェインやコンパイラのバージョンが出力されます。
公式ドキュメントの対象バージョンのリリースノートや[開発のセットアップ](https://docs.unrealengine.com/5.3/ja/setting-up-your-development-environment-for-cplusplus-in-unreal-engine/ "開発のセットアップ")に対象（互換性のある）バージョンの記載があるのでそれに合わせて更新対応を行ってください。
:::

# さいごに（余談）

今年もアドベントカレンダーに参加できましたが、実はネタを持って参加したわけではなかったため内容がちょっと薄いです。
まぁ1日目の記事ということで…
Webビューアプリとネイティブアプリの違い

# Webビューアプリとネイティブアプリの違い

現代のテクノロジーの進展に伴い、私たちの生活は多種多様なアプリケーションによって支えられています。アプリケーションは大きく分けて「Webビューアプリ」と「ネイティブアプリ」という二つのカテゴリーに分類されます。この記事では、これらのアプリの違いと各々の特徴について詳しく解説します。

## Webビューアプリの特徴

Webビューアプリは、インターネットブラウザを介してアクセスするアプリケーションです。以下はその主な特徴です。

### プラットフォーム独立性
- Webビューアプリは、ブラウザ上で動作するため、使用するデバイスやオペレーティングシステムに依存しません。その結果、様々な環境で同じユーザー体験を提供できます。

### 更新の容易さ
- アプリの更新がある場合、サーバー側で更新を行うだけで、ユーザーは最新版をブラウザでリロードすることで利用できます。これにより、ユーザーが自分でアプリを更新する必要がなくなります。

### インストール不要
- ブラウザ経由でアクセスするため、アプリをデバイスにインストールする必要がありません。

## ネイティブアプリの特徴

ネイティブアプリは、特定のオペレーティングシステムやデバイス用に開発されたアプリケーションです。以下はその主な特徴です。

### 高いパフォーマンス
- デバイスのリソースを直接利用するため、処理速度や反応速度が高速です。また、より洗練されたユーザーインターフェイスを提供できます。

### オフライン機能
- インターネット接続がなくても動作可能な場合が多く、オフラインでの使用が可能です。

### デバイス機能の利用
- カメラ、GPS、加速度計など、デバイス固有の機能を活用できます。

## Webビューアプリとネイティブアプリの比較

Webビューアプリとネイティブアプリは、それぞれにメリットとデメリットがあります。以下にそれぞれを比較してみましょう。

### 利便性とアクセシビリティ
- Webビューアプリは、デバイスやOSに依存しない汎用性を持ち、インストールの手間が省けます。一方で、ネイティブアプリは高いパフォーマンスとオフライン機能を提供します。

### 開発コストとメンテナンス
- Webビューアプリの開発は一般的にネイティブアプリよりもコストが低く、メンテナンスも簡単です。しかし、ネイティブアプリはプラットフォームごとに最適化された体験を提供することができます。

### ユーザーエクスペリエンス
- ネイティブアプリは、流れるようなアニメーションやジェスチャー操作など、高度なユーザーインターフェイスを提供できます。Webビューアプリは、ブラウザの制約の中で最適化された体験を提供します。

## まとめ
Webビューアプリとネイティブアプリは、それぞれに独自の利点と制約があります。選択は、アプリケーションの目的、対象ユーザー、予算、開発リソースなど、多くの要因に基づいて行われるべきです。理解と適切な選択により、より効果的なアプリ開発が可能になります。
HTTP1.1とHTTP2の違いと進化

# HTTP1.1とHTTP2の違いと進化

インターネットの世界では、Webページやアプリケーションとサーバー間の通信が日々行われています。この通信の基盤となるのがHTTP（HyperText Transfer Protocol）です。時代と共に進化してきたHTTPには、主にHTTP1.1とHTTP2という二つの主要なバージョンがあります。この記事では、これらのバージョンの違いとそれぞれの特徴について解説します。

## HTTP1.1 の特徴

HTTP1.1は1997年に導入され、現代のWeb通信の基盤を築きました。以下はその主な特徴です。

### キープアライブ
- 一度のコネクションで複数のリクエストとレスポンスを行うことが可能です。これにより、都度コネクションを確立する必要がなくなり、通信の効率が向上しました。

### パイプライン
- 一つのレスポンスが完了する前に、複数のリクエストを送信できる機能です。しかし、リクエストの順序に依存する「ヘッド・オブ・ライン・ブロッキング」の問題が残りました。

## HTTP2 の進化

HTTP2は2015年に公開され、HTTP1.1に比べて大幅なパフォーマンス向上が図られました。

### ストリーム
- 一つのコネクション内で複数の仮想コネクション（ストリーム）を作成し、それぞれ独立して通信が可能になりました。これにより、ヘッド・オブ・ライン・ブロッキングの問題が解消されました。

### バイナリ形式
- HTTP2では、テキストベースではなくバイナリ形式でデータを送受信します。これにより、処理速度が向上し、エラー発生のリスクも低減しました。

### ヘッダー圧縮(HPACK)
- 重複するヘッダー情報を毎回送信する代わりに、変更された部分のみを送信することで、データ量を削減しました。

### サーバープッシュ
- サーバーがクライアントの次のリクエストを予測し、必要なリソースを事前に送ることができるようになりました。これにより、ページの読み込み時間が短縮されます。

## まとめ
HTTP1.1はWeb通信の基本を確立しましたが、時代の変化と共に新たな課題が浮上しました。それに応える形で登場したHTTP2は、パフォーマンスの向上、通信の効率化、そしてよりスムーズなWeb体験を実現しています。この進化により、ユーザーは高速で快適なインターネット環境を享受できるようになりました。
いろんなハードディスク関連ワード解説

# いろんなハードディスク関連ワード解説

コンピュータの世界では、様々な部品がそれぞれの役割を果たしています。特にデータの保存に関しては、ハードディスクの役割が重要です。今回は、コンピュータの基本部品と、さまざまな種類のハードディスクについて解説します。

## 基礎部品とその役割

### 1. ハードディスク - 収納BOX
- ハードディスクは、コンピュータのデータやプログラムを永続的に保存する場所です。これを一般的な収納ボックスに例えると、大量のデータを整理して保存するためのスペースとなります。

### 2. CPU - 人間の脳みそ
- CPU（中央処理装置）は、コンピュータの指示を処理し、様々な操作を実行します。これは人間の脳に相当し、コンピュータの思考や判断の中心です。

### 3. メモリ - 作業する机
- メモリ（RAM）は、コンピュータが現在行っている作業やプロセスを一時的に保存します。これは作業机のようなもので、現在行っている作業のための一時的なスペースを提供します。

## いろんなハードディスク

### 1. 外付けハードディスク - 持ち運べるハードディスク
- 外付けハードディスクは、コンピュータの外部に接続して使用するタイプです。ポータブルハードディスクとも呼ばれ、持ち運びが可能ですが、データの転送速度は内蔵型に比べて遅い場合があります。

### 2. 内蔵ハードディスク - PC内に標準でついてるもの
- 内蔵ハードディスクは、コンピュータ本体内に組み込まれているタイプです。これはコンピュータの基本的なストレージ装置として機能します。

### 3. HDD - 円盤型のハードディスク
- HDD（ハードディスクドライブ）は、磁気を使用してデータを保存する伝統的なハードディスクです。回転する円盤にデータを記録します。

### 4. SDD - メモリタイプの振動に強いハードディスク
- SSD（ソリッドステートドライブ）は、フラッシュメモリを使用してデータを保存するハードディスクです。振動に強く、読み書きの速度が非常に高速です。

## まとめ
ハードディスクは、コンピュータの重要なデータを保存するための要素です。それぞれのタイプは異なる特性を持ち、使用する目的や環境によって選ぶことが大切です。HDDは伝統的でコスト効率が良い一方、SSDは高速で信頼性が高いです。また、外付けハードディスクは携帯性に優れています。これらの理解を深めることで、より効率的なコンピュータ活用が可能になります。
【AWS re:Invent 2023 】ワークショップ系セッションでのコツ

# はじめに
2023年11月28日（現地時間）は re:Invent 2023の2日目です。
皆様、いかがお過ごしでしょうか。

宿泊しているホテルの真横がライブハウスで、夜中の2時前後まで爆音の演奏が聞こえてくる音楽好きには堪らない環境で寝泊まりしていることもあり、私はとても寝不足です:angel:

そんな寝不足な中、2日目にワークショップを体験してきたので、その時に感じたコツを書きたいと思います。
会期中、来年以降の re:Invent の参考にしてください。

# 2日目に参加したワークショップ
参加したワークショップの内容は以下の通りです。

セッション ID: SVS303-R1 
タイトル：Building secure serverless applications workshop
所要時間：2時間
レベル：Level 3

>【セッション概要】
>Get hands-on and learn techniques to secure a serverless application built with AWS Lambda, Amazon API Gateway, and Amazon Aurora. This workshop covers AWS services and features that you can utilize to improve the security of a serverless application in 5 domains: identity and access management, infrastructure, data, code, and logging and monitoring. Finally, explore new features including integrations with Amazon Inspector and Amazon GuardDuty. You must bring your laptop to participate.
>
Lambda、 API Gateway、Amazon Aurora で構成されるサーバーレス アプリケーションを手を動かしながら構築する内容で、このワークショップに参加したのは、普段の業務でサーバレスアプリケーションを実際に構築する機会が少ないためでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822205/e9a4c848-2c8c-073c-b5e8-f339e66c1472.png)


予約枠は既に埋まっており当日のウォークアップに並びましたが、ギリギリ参加することが出来ました！
とても気になるワークショップが予約出来ない状況であっても、ダメもとでウォークアップに並ぶのが良いと感じました！

## ワークショップの内容
| ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822205/5fb953a6-de6e-70e8-444c-2bd618327cad.png)|
|:--|

ワークショップでは専用のAWS環境が参加者に提供され、ワークショップ資料を参照しながらステップバイステップで各自が進めていくスタイルです。ブラウザの翻訳機能を使うことが可能なので、英語がわからない場合でも安心してチャレンジすることができます！
これは他のワークショップでも同様ですね！
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822205/96a6a1fb-7539-a951-16f2-bab6928f20c3.png)|
|:--|

ワークショップ資料はこのようになっています。
日頃からAWSの公式ドキュメントに慣れている人なら、親しみやすい形式だと思います。
|![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822205/02dfc929-6310-9abc-2cd1-dbc119424826.png)|
|:--|

## 完走を目的にせずに気になることがあればSAへ質問
モクモクと集中してワークショップを進めるのはアリですが、気になることがあれば会場の中にいるその道のプロであるソリューションアーキテクト（SA）へ積極的に質問するのが良いと感じました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2822205/7353fd23-67de-1d11-2a62-85224023ff70.png)


完走を目的にして単純に作業をするだけは理解は浅いものになるので、

- この理解で正しいか
- 特定のケースではどう対応すればいいか

といった観点でSAに質問するとより理解が深まると感じました。

ちなみに私は英語がほぼほぼ話せない、かつ寝不足で頭が回らなかったこともあり、単語を組み合わせた簡単な質問にとどまりました。
SAの方がいろいろ補足してくれたものの正直まったく聞き取れなかったですが、SAとの交流はワークショップに参加する醍醐味の１つと言えるかと思います。


# ワークショップの体験をより良くするために

-  予約枠が埋まっていても、ウォークアップで参加可能（な場合がある）
-  英語が苦手な場合、ワークショップ資料は翻訳機能を活用
-  気になるポイントがあればSAへ質問

# 最後に
前回の記事でも書きましたが、AWS re:Invent は学びの場です。
話を聞くだけではなく、手を動し、AWSに関わる人たちと交流をすることも重要、と感じました！

ワークショップは結構疲れがたまるので、認定者ラウンジでリラックスするのを忘れずに！

https://qiita.com/masaki_seyama_POHD_CCoE/items/06c28775e84cc1430761

また会社の会社のメンバーがワークショップ体験記を書いているので、ぜひ読んでみてください！

https://qiita.com/mizuki_hori_POHD_CCoE/items/23197014ba3ab7500174
ログイン時にユーザーIDを遷移先に渡す

### はじめに

個人開発メモ📝
認証後、ユーザーIDを遷移先に渡す方法を備忘録として残します。

### laravel側のコントローラーで、ユーザーIDを返す

```
// 検証後のデータを認証
if(Auth::attempt($loginUser)) {
  // ユーザー情報を取得
  $user = Auth::user();
  return response()->json([
   'userId' => $user->id,
   'message' => '認証成功',
   'redirectTo' => '/calender',
  ], 200);
};
```

:::note info
Auth::user()は、ユーザー情報のオブジェクトを返しているので、$user内にはユーザー情報が入っています。
$user->idとすることでユーザー情報のオブジェクトからidを取得しています。
:::

### フロントでレスポンスデータを受け取り、ローカルストレージにIDを保存する

```
const handleSubmit = async(event) => {
  event.preventDefault();
  try {
    const response = await fetch(apiUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify(loginForm)
    });
    const responseLoginData: loginUserData = await response.json();
      // ユーザーIDをローカルストレージに保存し、カレンダーページへ遷移
      if(responseLoginData) {
        localStorage.setItem('userId', responseLoginData.userId.toString());
        window.location.href = responseLoginData.redirectTo;
      }
    } catch(error) {
      console.log(error);
  };
};
```

:::note alert
クライアント側に保存されるので注意が必要ですが、今回はユーザーIDのみなのでローカルストレージに保存しました。
:::

### 遷移先でユーザーIDの確認

```
// ローカルストレージに保存されているIDの確認
const userId = localStorage.getItem('userId');
console.log('保存されていたユーザーID：', userId);
```

![スクリーンショット 2023-11-30 6.16.24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3513569/623e833b-3d0c-8bcf-921e-97875c4310c8.png)

遷移先でユーザーIDの確認ができました。
今度はこのIDを使用して、そのユーザーのデータを表示できるようにしていきます。
CodeCatalystでAmazon Qを有効化する際の設定tips

## Intro
昨日、会社ブログにCodeCatalyst + Amazon Qで何ができるか、どういうインパクトがありそうかという内容で記事を上げたのですが、(興味があれば見てみてください)
[[re:Invent 2023 レポート] AWS CodeCatalyst & AWS Qで全ての開発にAIをシームレスに統合する(preview)](https://www.beex-inc.com/blog/aws-codecatalyst_and_q)
CodeCatalystでAmazon Qを有効化する際にいくつか必要な設定がありましたので、備考的にまとめておきます。(会社ブログに書くほど内容なかったので、Qiitaで補足します。)

## 設定内容
1. Amazon Qの有効化
CodeCatalystのSpace>SettingsからGenerative　AIを選択、"Projects in this space can access generative AI features"をONにします。
![スクリーンショット 2023-11-29 10.49.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/8e322531-42f6-2cf6-6138-3c59efe5babb.png)

1. CodeCatalystのTier設定で課金が選択できるようにする(この手順がないと3の手順でエラーになります。)
CodeCatalystのSpace>SettingsからBillingsを選択、右上にある"Manage billing in AWS"でAWSコンソールのCodeCatalyst画面へ遷移します。
![スクリーンショット 2023-11-29 10.38.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/cb2f7124-444e-23fd-98e8-7be3063543aa.png)
この画面からBilling DetailsのEditボタンを押下し、PAIDにチェックを入れてUpdateします。
![スクリーンショット 2023-11-29 10.37.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/c6c102fe-eb22-151b-039e-d70fc164a22e.png)
![スクリーンショット 2023-11-29 10.38.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/a0b97b97-842d-db09-ab3e-9ba451aa1a69.png)


1. CodeCatalystのTier設定でStandard以上のTierに変更する。
CodeCatalystの画面へ戻り、"Change Billing Tier"ボタンを押し、Standard tier以上を選択する。
![スクリーンショット 2023-11-29 10.38.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/a0737738-5dde-d229-a875-09a10f85c31d.png)
![スクリーンショット 2023-11-29 10.39.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/d3734006-3c1f-472f-3a59-91ad5a49d816.png)

そもそもAmazon Qを使用するのにStandard Tier以上が必要というのはまだCodeCatalystのDocumentationには記載がされていなさそうで、(以下Amazon Q有効化に関するドキュメントページでは1の手順のみ記載がある)
[Managing generative AI features in Amazon CodeCatalyst](https://docs.aws.amazon.com/ja_jp/codecatalyst/latest/adminguide/managing-generative-ai-features.html)
Standard Tier以上がいるというのはBilling Tierを変更した画面の下の方にしかAmazon Qの利用上限が記載が見当たらなかったです。
![スクリーンショット 2023-11-29 10.39.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/d6fef16c-8bb7-f43f-5bb4-c12fc6c6305f.png)

## Conclusion
Amazon Q自体が発表されて間がないので、まずは自分の手を動かしながら挙動とかできることを理解しなきゃなぁと改めて思いました。個人的に、このサービスの組み合わせはそれをしてもお釣りが返ってくると思うという話は会社ブログにしているのでぜひ読んでみてください。
VScodeでC#を実行する

# １．まずは.NET SDKをダウンロードしてインストーラーを実行

https://dotnet.microsoft.com/ja-jp/download/dotnet/sdk-for-vs-code?utm_source=vs-code&amp;utm_medium=referral&amp;utm_campaign=sdk-install

# ２．VScodeでの操作
①プロジェクトを作成：ターミナルで以下を実行
```
dotnet new console
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432250/c8516984-bc5b-b2d3-0ba5-4bcb1848930e.png)

このようになる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432250/e95b180b-8354-2fba-50c3-7973c9d1b77b.png)

ここのprogram.csにコードを書いて実行していく。
※別のcsファイルを作成して実行した場合エラーが吐かれたのでprogram.csを書き換えるのが安定だと僕は思ってます。

②コードの実行：ターミナルで以下を実行

```
dotnet run
```
例えばこのようなコードを実行すると
```Program.cs
// See https://aka.ms/new-console-template for more information
//Console.WriteLine("Hello, World!");

using System;

class Program
{
    static void Main()
    {
        int number = 5; // 例として5を使用
        int result = AddOne(number); // AddOneメソッドを呼び出し
        Console.WriteLine("Result: " + result); // 結果を表示
    }

    static int AddOne(int number)
    {
        return number + 1; // 引数に1を加算して返す
    }
}
```
このように返ってくる
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432250/fcc7acb5-80a8-7b0b-d2a5-2074662dc2ff.png)

③バージョンの確認（今さらとか言わない）
```
dotnet --version
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3432250/b3ef5add-1451-ae5a-018e-4296c89cd374.png)

# 参考記事

https://usimaru.net/vscode-install-cs/