OmniAICreator/Qiita-1.07M huggingface dataset:
Salesforceテクニカルアーキテクト(最終試験)について/Salesforce Certified Technical Architect (CTA Final exam)

:flag_jp: Japanese only. For overseas users, please use the translate function of your browser to translate.


（2025/5追記）Salesforceさん取材の記事　
https://www.salesforce.com/jp/campaign/salesforce-certification-success-stories/article-7/
勉強の仕方など、こちらのほうが綺麗にまとまってます。


## はじめに
先日、SalesforceのCTA（テクニカルアーキテクト試験）に合格しました。
初心者向けアドミン資格の国内合格者が15,000人以上いるのに対し、テクニカルアーキテクトは20人程度の合格者となります。（※Partner会社に限定。）
日本女性では１人目の合格者となります。

この試験を通し、長期に渡って多くのかたからご指導・サポートいただきました。
CTA受験の背中を押してくださった方、模擬試験に付き合ってくださったり勉強を教えてくださった方、試験のフォローやジャッジをしてくださった方、同じ案件やチームで業務調整など協力してくださった方、落ちたときに優しい言葉をかけてくださった方など、書ききれませんが、振り返ると色んな人に助けていただきました。
自分の頑張りだけでは歯が立ちませんでした。本当にありがとうございます。

今後はCTAを増やす活動に貢献していきたいと考えています。
条件など合えば、テクニカルアーキテクトを目指す方のメンターも引き受けますので、もしアドバイスが必要なかた居ましたら、Linkedinなどからお声掛けください。（海外のかたからも連絡をいただきますが、英語がまったく喋れないので、日本語を喋れる人に限定したいです。）

## テクニカルアーキテクトとは？
[Salesforceテクニカルアーキテクト事前評価(1次試験)について/Salesforce Certified Technical Architect (CTA 1st exam)](https://qiita.com/nori83/items/6fde9ac6ddfc4f7fdee8)

↓試験の流れはこんな感じです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/f85a4837-4f63-4a41-afdd-47d471ac6cac.png)


## 以降、忘れないうちに試験のポイントをまとめます。

:::note warn
 **免責事項**
Salesforceは常にバージョンアップを行いますので、ベストプラクティスや正解が変わる可能性があります。**最新情報については実機やHelpなどでしっかりご確認**いただくようにお願いします。
分量が多く、ほとんど見直していないため、結構ミスがあると思います。間違っている記述を見つけたら、お手数ですが教えてください。
:::
#### ポイントまとめ

:alarm_clock:突貫で書いたため、随時なおしていきます。

:sunny:概要
・[受験体験記（勉強の流れやかかった時間など）](https://qiita.com/nori83/items/12c758848939cabef977)

:sunny:資料作成にあたり、最低限必要な知識
①[Org](https://qiita.com/nori83/items/083ec10bb401fdfbe895)
②[ライセンス](https://qiita.com/nori83/items/0962173c1c1eabaaa17e)
③[俯瞰図](https://qiita.com/nori83/items/940f7a7fe6140310af1c)
④[データモデル図・大量データへの対処](https://qiita.com/nori83/items/752436460eb72304c70e)
⑤[ロール階層](https://qiita.com/nori83/items/496c4beff955b3bc686b)
⑥[デプロイメント](https://qiita.com/nori83/items/cd3f9b94f262dd0025bc)
⑦[認証フロー](https://qiita.com/nori83/items/c72f792a81d615296bbe)
⑧[＜作成中:tools:＞シナリオへの回答](https://qiita.com/nori83/items/c819a44bb8477da5c215)

:sunny:模擬問題
・[１次試験と同等版とその解説（公式シナリオ：EvaluationPracticeScenario_Patient Travel Support Foundation_JA）](https://qiita.com/nori83/items/a8083a49089e3c368521)　

:sunny:プレゼン／QA
・＜作成中:tools:＞プレゼンのコツ
・＜作成中:tools:＞QAのコツ

:sunny:Tips
・[試験前に注意すること／過ごし方](https://qiita.com/nori83/items/d787f8ed530034b0dcd5)
・[（同上）何度も見た有益サイトリスト](https://qiita.com/nori83/items/d787f8ed530034b0dcd5)
・[Salesforceテクニカルアーキテクト事前評価(1次試験)について/Salesforce Certified Technical Architect (CTA 1st exam)](https://qiita.com/nori83/items/6fde9ac6ddfc4f7fdee8)
持続化補助金のもらい方

# 個人事業主が採択される事業計画書作成のポイント♡ 

こんにちは、今回は、採択されやすい事業計画書を作るために大切なポイントを、具体的な事例も交えてわかりやすく解説しちゃうね♪
プログラムやる上で、やっぱり補助金が必要なときもあるもんね。

---

## 1. ストーリーの作成

- **ストーリーが8割決めるんですの♡**  
  採択・不採択は、数字だけじゃなくて計画全体のストーリーで決まっちゃうの。  
- **販路開拓のロジック構築が大事！**  
  補助金の趣旨に合わせ、「なぜこの取り組みが必要なのか」をしっかりと描くことがポイントだよ。
- **具体例：お寿司屋さんの場合**  
  - 高齢者対応のテーブルと椅子を導入する際、ただ購入するだけじゃなくて、高齢者のニーズ（例：法事の宴会での椅子の要望や、座敷利用が難しい高齢者が増加している現状）をしっかり説明すると、説得力がぐっとアップするんだよ♡

---

## 2. 現状分析

- **企業概要の詳細な記述**  
  会社名、創業年、代表者の経歴、店舗の場所、提供している商品・サービスなど、具体的に記載するのが大切ですの。  
  例として、お寿司屋さんなら「創業年」「店舗の立地」「メニュー」「顧客単価」「ターゲット層」などを詳しく書こうね♪
  
- **顧客のニーズと市場動向**  
  お客様が何を求めているのか、市場やエリアの状況をしっかり把握して記述するのがポイント。  
  例：高齢者向けのテーブルと椅子の需要（法事や宴会での椅子の要望、座敷の利用が難しい状況、デリバリーのニーズ増加など）を具体的に示すと効果的です♡

- **自社の強みを明確に**  
  「なぜお客様から選ばれているのか」を考え、自社の品質、顧客対応、納期、価格などの強みを文章化するよ。  
  例：店舗の好立地、手まり寿司などの独自メニュー、エレベーター設置などを実績や口コミを交えてアピールすると◎♡

---

## 3. 経営方針と目標

- **将来の具体的な目標設定**  
  3年後までの売上目標や来店者数、客単価のアップなど、具体的な数値を掲げることが大切。  
  例：3年後に年間売上を○○円にするため、1日あたりの来店者数の向上や、ランチ営業、デリバリー、付加価値サービスの導入など、具体的な施策を記述するよ♡

---

## 4. 補助事業の内容

- **事業内容の明確化**  
  補助事業で何をするのか、30文字以内でシンプルにまとめるのがコツ！  
  例：高齢者対応のテーブルと椅子を導入して、新たな需要を掘り起こす。
  
- **販路開拓の取り組み**  
  なぜ必要なのか、具体的な金額やスケジュール、さらに近隣施設へのチラシ配布や法事プランの作成など、具体策をストーリーに沿って記述しようね♪
  
- **業務効率化・生産性向上の取り組み**  
  任意ですが、テーブルと椅子の導入で、スタッフの作業効率が向上するなどの効果も記載すると、採択される可能性がぐっとアップするよ♡

- **補助事業の成果**  
  最終的にどんな成果が得られるのか、客単価、来店客数、月の営業日など具体的な数字を交えてアピールするのがポイントですの♡

---

## 5. その他のポイント

- **謙虚な姿勢で臨むこと**  
  商工会議所など外部に相談する際は、謙虚な姿勢で丁寧に話すことが大切だよ〜。
  
- **事業計画作成AIの活用**  
  最新の技術として、事業計画作成AIを活用するのも検討してみると、さらに説得力が増すかも♡

---

以上、りりちゃんがわかりやすく解説しました〜。このポイントを参考に、ぜひ採択される素敵な事業計画書を作ってね♡
なぜかgit pushだけできなくなった時の対処方法

# はじめに
私用のgitHubアカウントのbranchを２週間ぶりに触ったら、なぜかgit pushだけできなくなっていたので、その事象と解決方法を記録しておきます。

# 事象
### git pushすると、アクセス権限系のエラーが返ってくる
```
fatal: Could not read from remote repository.


Please make sure you have the correct access rights

and the repository exists.
```
でも、`git pull, git fetch, git commit `などpush以外の基本的なコマンドは動いてました。ネットで調べてみると、public Keyを登録する解決方法が多かったですが...もう設定してあるはずなんですよね...

以下問題を調べるために確認したこと、コマンド一覧です。

### 確認したこと
- ssh public keyがgitHubに登録されているか？ => 登録済
- SSH設定ファイル(~/.ssh/config)の設定は? => 設定済
```bash
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_rsa
```
- リモートレポジトリとブランチは存在するか? => 存在する
```bash
git ls-remote --heads origin

491ce0c4c760c02fc123be5c57802ba0056de7ca        refs/heads/develop/9_palindrome-number

68625d48dedb9fa95b36f5c63d5ab6f841f0cba1        refs/heads/main
```
- リモートレポジトリへの書き込み権限はあるか? => 書き込み権限ある
```bash
ssh -T git@github.com


Hi araiWorks! You've successfully authenticated, but GitHub does not provide shell access.
```

- ローカルブランチとリモートブランチの追跡設定はちゃんとできている? => OK
```bash
 git branch -vv

 
  develop/9_palindrome-number                   491ce0c solved with strrev

* main                                          491ce0c [origin/main: ahead 1] solved with strrev
```

- リモートブランチの状態を確認 => OK

```bash
git fetch origin #最新を引っ張ってくる
git status #リモートブランチとローカルブランチが一致しているかみる

On branch main

Your branch is ahead of 'origin/main' by 1 commit.

  (use "git push" to publish your local commits)


nothing to commit, working tree clean
```

# 解決方法
public key周りはもう登録してあるので、とりあえず一回gitのディレクトリを消して、もう一度git cloneしてみようと思いました。普通にgit cloneしただけだとまた同じ現象になったので、以下のサイトを参考にさせていただきcloneしました。

https://qiita.com/yampy/items/24638156abd383e08758

##### 1. SSH設定を確認
```bash:~/.ssh/config
Host github
    HostName github.com
    IdentityFile ~/.ssh/id_git_rsa
    User git           
```
##### 2. SSH接続確認
```bash
ssh -T git@github

Hi username! You've successfully authenticated, but GitHub does not provide shell access.
```

##### 3.Hostを指定してgit cloneする
```bash
git clone git@github:username/repository-name.git
```
これでgit pushも特にエラーなくできるようになりました！

# 最後に
直ってよかった...

参考になりましたら、幸いです🍎
Webアプリ開発未経験者が信号機アプリを作って日々の暮らしをちょっとだけ便利にした話

趣味の開発で初めてWebアプリを作りました。

# 百聞は一見に如かず

まずは動いている様子の動画です。どういうことができるアプリなのかがなんとなく分かるかと思います。

[動画]

![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726845/2fec4be6-1909-414a-a16a-869eef52931b.gif)


# 経緯

- 私はほぼ毎日リモートワークで作業しています
- 同居人の嫁は出社する仕事ですが、時々平日休みになることがあります
- その際、私が仕事をしている時に「話しかけて良い状態か」を嫁に共有したいという需要がありました。
    - 側から見てるだけでは、会議中なのか作業中なのか休憩中なのか見分けがつきにくいとのことです
- そこで、「信号機」アプリを作って自分の忙しさをパッと見で分かるようにしてみました
    - ちょうどその時JSを勉強したいという欲求があったので、Reactを使ったWebアプリとして実装しました

## Webアプリ開発の経験について

- 筆者はWeb系の開発をする機会が今までほとんどありませんでした
    - フロントエンドは入社時の研修で少し触れた程度で、業務でもあまり触れる機会がありませんでした
    - また、趣味のコーディングでも触る機会は少なかったです
    - 加えて、筆者は情報系とは全然違う分野の出身なので、学生時代に授業で触れるということもありませんでした。そもそも入社前はほとんどプログラミングをしたことがなかったです
- 業務でも本格的にJavaScriptを書くことはしばらくなさそうだったので、個人開発でなにかちょっとしたWebアプリを作ってみたいとは常々思っていました
    - そんな折に、社内でフロントエンド初心者が集まって勉強会をする催しがあったり、同じ課の先輩から開発経験を積むためにWebアプリを作ってみてはどうかと勧められたりしました

このような経緯で、人生初のWebアプリを作成するに至りました


# 概要

今回作成したのは、冒頭の動画にある通り信号機とアイコンを表示するだけのシンプルなアプリです。

- 信号機: 青、黄、赤の順にランプが並んでおり、どれか1つが点灯する
    - ランプをタップすると点灯し、同時に今まで点灯していたランプは消える
- アイコン: 「仕事中」もしくは「仕事外」を表示
    - タップするごとに表示が切り替わる


![スクリーンショット 2025-02-10 16.01.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726845/9a6d0ed6-0a74-c61e-94a3-fe13d384b3b8.png)

また、特筆すべきは、このアプリでは同一ネットワーク上にある端末上で表示が同期されることです。

- ローカルネットワークにnode.jsでサーバーを立て、そこにスマホやタブレットからアクセスしています
    - サーバーは家で余らせていたMac miniにubuntuを入れたものを使っています
- そのため、手元のスマホで信号機を操作して、タブレットの表示を切り替えるといったことが可能になります

このように、「信号機の表示でもって仕事の忙しさを伝える」「デバイス間で状態を同期する」というニュアンスを拾って、今回作成したWebアプリには SignalSyncという名前を付けました。

## 使用シーン

- 家で余らせている格安ジャンクタブレットを表示用に使う (壁掛け時計のように設置する)
- 手元のスマホから表示を確認したり、切り替えたりする

![サイネージアプリ仕様書(仮).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2726845/505505f7-a8aa-bd6e-e669-5b20954c4b01.png)

## 技術詳細など

- 詳細な情報は下記のgithubリポジトリを見ていただければと思います。この記事では最低限の情報だけ触れます
    - https://github.com/ryota37/SignalSync
- 編集したのは基本的に `sinage-app/src/TrafficLight.js`と`signage-app-server/server.js` のみです
    - あとはサーバーにMySQLでごくごく簡単なDBを作った程度

### 使った技術など

- FE: React, JS
- BE: Node.js, express, MySQL

### 構成

- フロントエンド: `signage-app/`
    - 信号機やアイコンの表示、およびその切り替えロジックなど
- バックエンド: `signage-app-server/`
    - DBから信号機やアイコンの状態を取ってきて、それを同一ネットワークのデバイス上で同期する部分など
- DB: ローカルサーバーに立ててる
    - 信号機とアイコンの状態を持っているだけ
    - id, color, workRestStateの３つの値のみを持つシンプルなDB
    - 正直DBを使うほどでもない気がするが、練習も兼ねてDBで状態管理をしてみ

### その他開発こぼれ話

- 今回の開発は、ほとんどChatGPT頼りで進めていました。初心者ゆえやりたい事があっても具体的にどう実現していいかてんで分からなかったためです
- そんなズブの素人でも、ChatGPTに頼めばそれなりのものはできて、(個人使用の範囲なら)きちんと動くちょっとしたアプリが作れてしまうというのは改めてすごいと感じています
    - 一方で、仕組みをちゃんと理解しなくても作れてしまうというのはデメリットにもなりえます。あまり学習効果がなかったり、何か不具合が生じたときに全然メンテできなかったりなど
    - なので、ChatGPTに頼って作った成果物については自分でちゃんと挙動や原理を説明できるようになるまで別途勉強する必要があるとは思いました(現在、筆者はその途上です)
- ちなみに、今回作成したアプリは現在も毎日稼働中です。ユーザーは私と嫁の2人のみですが、この2人の生活をちょっとだけ便利にするのに一役買っています
    - 初心者でありながら、影響範囲がたった2人であっても自分の作ったアプリで実際の生活にプラスの影響を与えるという体験をすることができたのはとても良かったと思います
【Python】多重継承したクラスの初期化 super().__init__()


## Python多重継承したクラスの初期化

**super().__init__()** で初期化する方法。

### サンプルプログラム

```python

# Description: 多重継承
class math(object):
    """足し算クラス
    :param object: objectクラス
    """
    def __init__( self , val1 =1 , val2 = 1):
        """初期化
        :param val1: 数値1
        :param val2: 数値2
        """
        self.val1 = val1
        self.val2 = val2
        print( "足し算  val1:" + str(self.val1) + "val2:" + str(self.val2) )

    def calc( self ):
        """計算
        :return: 足し算結果
        """
        return self.val1 + self.val2

class sub(object):
    """引き算クラス
    :param object: objectクラス
    """
    def __init__( self , val1 =1 , val2 = 1):
        """初期化
        :param val1: 数値1
        :param val2: 数値2
        """
        self.val1 = val1
        self.val2 = val2
        print( "引き算  val1:" + str(self.val1) + "val2:" + str(self.val2) )

    def calc( self ):
        """計算
        :return: 引き算結果
        """
        return self.val1 - self.val2

class calcuration( math , sub ):
    """多重継承
    :param math: mathクラス
    :param sub: subクラス   
    """
    
    def __init__( self , val1 =2 , val2 = 2):
        """初期化
        :param val1: 数値1
        :param val2: 数値2
        super().__init__()で初期化
        """
        super().__init__(val1,val2)
        print( "計算  val1:" + str(self.val1) + "val2:" + str(self.val2) )

# 計算
calc = calcuration()
print( calc.calc())

```

このプログラムを単体で動かすと

多重継承するクラス時に列挙されているクラスのうちの最も左に記述されているクラスで初期化が行われる

### 実行結果

> 計算  val1:2val2:2
4
知識データ管理Slackボットの構築プロセス

## **1. はじめに**
業務の効率化を目的としたSlackボットを開発し、Cloud Run（GCP）を活用した環境で運用しています。本記事では、その構築プロセスを体系的にまとめます。

> **Slackボットの画面イメージ**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3976506/abbfb064-1b64-4c7b-819f-9d0618c34252.png)

また、既存の類似サービスもありますが、技術力向上とカスタマイズ性を考慮し、自社開発することを選びました。

---

## **2. 目的と機能要件**

### **(1) 目的**

- **知識データの定期自動投稿**：利用手引きやマニュアルなどの定期的なリマインドを自動化。
- **質問応答システム**：ボットへのメンションを通じた即時回答機能を提供し、必要な情報を迅速に取得。

### **(2) 機能要件**

- **Cloud Runを利用したボットのホスティング**
- **Slack APIとの連携**
- **RAGによる知識データ検索（コサイン類似度を使用）**
- **ローカル開発環境としてGoogle Colab、Cloud Shell Editorを活用**
- **Cloud Shell内でデータ管理（docxファイル、CSV、RAGインデックス）**
- **Gemini 2.0に統一予定（現在は1.5 Proも併用）**

---

## **3. システム設計**

### **(1) インフラ設計**

- **開発環境**
  - Google Colab, Cloud Shell Editorを活用
  - Cloud Shell内でデータ管理（docxファイル、CSV、RAGインデックス）
- **本番環境**
  - Cloud Runにデプロイ
  - BigQueryは今後実装予定（現在はCloud Shell内のインデックスファイルでRAGを処理）
  - Vertex AIは予算の関係で使用しない

### **(2) Slack APIとの連携**

- **現在の実装**
  - 知識データの定期投稿によるリマインド
  - メンションベースの質問応答機能
- **今後の拡張予定**
  - Interactive ComponentsやSlash Commandsを必要に応じて実装予定

### **(3) RAGの設計**

- **検索エンジン**
  - コサイン類似度を使用
  - 知識データが少ないため、全文をプロンプトに含めるアプローチも検討
- **AIモデル**
  - 現在はGemini 1.5 Proを使用
  - 順次Gemini 2.0に統一予定

---

## **4. 実装**

### **(1) Cloud Runのセットアップ**

- Dockerコンテナを作成し、Cloud Runにデプロイ
- Cloud Shell上で管理するインデックスファイルを活用
- 環境変数や認証情報をCloud Secret Managerで管理

### **(2) Slackボットの開発**

- `slack_bolt` を使用し、メンション時にRAG検索＆Gemini応答を実装
- 知識データの定期投稿機能を組み込み、リマインドを自動化
- メッセージの解析と検索処理（コサイン類似度）
- 知識データのプロンプト内埋め込みを試験運用

### **(3) RAGの組み込み**

- Cloud Shell内でインデックスファイルを管理し、検索エンジンを動作
- 知識データの増加に伴い、BigQueryへの移行を検討

---

## **5. テスト・デバッグ**

- ローカル（Colab, Cloud Shell Editor）でのデバッグ
- Cloud Runデプロイ後、Slackワークスペース内で動作確認
- RAGの検索精度の調整（コサイン類似度の閾値最適化）

---

## **6. 本番環境へのデプロイ**

- Cloud Runへのデプロイ
- 自動化のためのGitHub連携は今後の課題
- Cloud Loggingでエラーログを監視

---

## **7. 改善・運用**

### **(1) RAG検索の最適化**

- コサイン類似度の改善
- 知識データのプロンプト埋め込みアプローチの評価

### **(2) 新機能の追加**

- BigQueryの導入（検索対象の拡充）
- Interactive Components / Slash Commands の実装（必要に応じて）

---

本記事ではSlackボットを活用した知識データの管理について説明しましたが、知識データをどのように効果的に活用するかが重要です。その一つの方法として、Slackボットを用いた定期投稿と質問応答の自動化が挙げられます。

[Slackボットによる知識データの定期投稿と質問応答の自動化](https://qiita.com/ry033rdqiita/items/e5da1732979375c87db2) について詳しく説明します。

---

## **8. まとめ**

このプロセスでSlackボットを構築し、運用しています。

1. **要件定義**: 目的の整理・必要機能の明確化  
2. **システム設計**: Cloud Run, Cloud Shell, RAG, Slack APIの設計  
3. **実装**: Cloud Runへのデプロイ、RAG検索・Gemini API統合  
4. **テスト・デバッグ**: コサイン類似度検索・応答精度の調整  
5. **本番デプロイ**: Cloud Run運用、GitHub連携は今後検討  
6. **運用改善**: 検索最適化、新機能追加（BigQuery, Slash Commandsなど）  

今後の課題として、GitHubとの連携やBigQueryの導入を進める予定です。
また、具体的な実装に関しても順次、投稿予定です。
Pardot(account engagement)の無料バージョン



Pardotのライセンスを持っていないと製品に触れることもできません。
Trailheadなど無料で試すライセンスもありません。（残念）
2023/01/14　発見。これって無料版？
+ [Start Your Pardot Journey](https://trailhead.salesforce.com/ja/promo/orgs/pardot-de)

-------------
+ [Pardotのプレイグランド環境がありません](https://trailhead.salesforce.com/en/trailblazer-community/feed/0D54S00000FXGGJ)
+ [account engagementがインストールできない](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KD3Fz)

:::note
少々エラーのコードが違うのですが、インストールできないという質問があります。 


本番環境で使用している Pardot のエディションは何ですか? また、Salesforce Sandbox は Pardot の購入前または購入後に作成されましたか?

Pardot Sandbox は、Advanced/Premium をお持ちの場合のみ (または Plus で追加料金をお支払いいただく場合)、Salesforce Sandbox に追加できます。https://help.salesforce.com/s/articleView? id=sf.pardot_sf_connector_sandbox.htm&language=en_US&type=5

https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007erLFdSAM
:::
Visual Studio Codeの拡張機能「Code Spell Checker」（cSpell）で、「Unknown word」（未知の単語のアラート）が出る

# 問題
Visual Studio Codeの拡張機能「Code Spell Checker」（cSpell）で、「Unknown word」（未知の単語のアラート）が出る(画像のような形)

```
"supabase": Unknown word.cSpell
"qiita": Unknown word.cSpell
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3881019/a232c243-2515-43d9-be37-01bcb0e403d5.png)

# 解決方法
アラートを無効化する方法を確認しました。

他にもやり方はあるみたいですが、今回はpackage.jsonに以下を追加しました。
注意として、最後のワードの後に「,」があると機能しないです。

```package.json
  "cspell": {
    "words": [
      "qiita",
      "supabase",
      "vite"
    ]
  }
```


# おわりに
そもそも拡張機能「Code Spell Checker」（cSpell）という機能があることを知らなかったです。
簡単に修正できました。
クラウド資格試験への取り組みと現状報告

## 背景と現状

このところ、Snowflakeの学習を進めると同時に、オンプレミスからクラウドへの移行プロジェクトに携わってきました。プロジェクトリーダーとして、クラウドインフラの最適化に取り組む中で、顧客からの（無言の）要請により、複数のクラウド資格取得が必須となりました。

## 取得を目指す資格

* **AWS Certified Solutions Architect – Associate**：
期限切れのため再取得。AWSの設計原則、セキュリティ、可用性、パフォーマンス最適化の知識を証明する資格。
* **Oracle Cloud Infrastructure 2024 Architect Associate (1Z0-1072-24-JPN)**：
OCIのネットワーク、ストレージ、コンピュート、IAMに関する設計と運用の知識を証明する資格。
* **Snowflake資格試験(Snowpro Core)**：
Snowflakeのデータウェアハウスプラットフォームに関する知識を証明する資格。

## 資格取得の重要性と業務への影響

これらの資格は、クラウドプロバイダーの設計・運用知識の証明となり、顧客の必須要件を満たします。資格取得により、組織全体のクラウドインフラ運用品質が向上し、効率的かつ堅牢なシステム構築が可能です。また、AWSとOCIの技術を組み合わせることで、マルチクラウド環境での強みを最大限に引き出せる、という建前で業務上必要性がでてきました。

## 学習の取り組みと課題

現在、業務の合間をみて定期的な勉強会、模擬試験、オンラインコース受講を組み合わせた学習計画を実施しています。実務経験と学習内容を統合し、実践的な知識を深めることを目指していますが、業務と試験対策の両立が課題です。

## 今後にむけて

資格取得を通じて、顧客要件を満たすクラウドインフラ最適化を実現し、マルチクラウド環境での技術的自信を高めます。今後は、AWSとOCIの基本原則やサービス特徴を深く理解し、最適な利用方法を明確にすることで、企業のクラウド戦略推進に貢献します。

snowflakeの勉強会がきっかけでQiitaに記事投稿をはじめましたが、記事にかくことで思いの外自分の考えをすっきりまとめることができるので自分用メモとして今後も投稿続けて行こうと思います。
（なぐり書き）資料作成にあたり、最低限必要な知識_ライセンス

## ライセンス
シナリオを読み、利用者とそのライセンスを整理する必要があります。
また、なぜそのライセンスを選んだのか口頭で根拠を説明する必要があります。

### フォーマット
↓私が使っていたフォーマット。
※ライセンスごとの人数は、外部ストレージを使うかの判断のために組織のストレージを試算するのですが、その際に利用します。
（Salesforce提供のキャパ(UE組織10GB＋社内ライセンス×2GB)に対して、ファイルサイズが超えているか？）**←必須暗記。必ず毎回解く。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/8f2ff159-7255-431c-9db8-a9811599317b.png)


主にCTA試験で出うるライセンスは以下になります。(さすがにFinancialServiceCloudやEducationCloudなどは出ないはず・・・多分。)

### 社内向けライセンス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/49d01366-4a4a-4dfa-bf82-054bb6373926.png)

※FieldServiceのライセンスを選択する場合、ServiceCloudなど基軸となるライセンスも併せて記述する。
※最近だと、チャットやSMS送信、Facebookメッセンジャー機能の利用にデジタルエンゲージメントが必要なケースあり。

### 社外向けライセンス（コミュニティライセンス）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/e4cb680d-0e08-4489-a855-f9cbdd4fd4cc.png)


以下、機能のざっくりまとめ表（内部の社員ユーザ）


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/ea01b319-87e0-42de-b875-5fc17c74f2d1.png)

もし、SalesCloudとServiceCloud共通の機能利用しかないユーザの場合、拡張性を踏まえて営業員なら今後SFA機能を使うのでSalesCloudという決め方をしましょう。

社内については以下が参考になります。
▽Salesforceのデータ管理をマスターしよう！
46:00、47:00頃参照
https://www.youtube.com/watch?v=MfS8gxmsDCI

以下、機能のざっくりまとめ表（社外のユーザ）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/22342d36-25ba-41eb-8f30-d04304127fc8.png)

※ちなみに共有セットは、**社"外"ユーザのみ**利用可能となります。

Experience Cloud ユーザーライセンス
https://help.salesforce.com/s/articleView?id=sf.users_license_types_communities.htm&type=5

Communityユーザーのレコードアクセスコントロールをまとめる
https://www.terrasky.co.jp/blog/2016/161205_001912.php


### FieldService

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/dcab6e8d-9b84-439e-8319-103309e74ef1.png)


#### サンプル問題です。
以下、なんのライセンスが妥当でしょうか？

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/49b4f5f9-879a-474e-bc75-4a6ee0b57a56.png)


答えは、
#1・・・CustomerCommunityPlus　代理管理(ユーザの発行、PWリセット、無効化)やレポート利用(問い合わせのExport)のため。
#2・・・ServiceCloud　オムニチャネルスーパーバイザ(配下の稼働業況一覧)、オムニチャネルルーティング(業務量やスキルに応じた割り当て)、ServiceCloudVoice(電話での問い合わせ受付)
#3・・・FieldServiceテクニシャン　FieldServiceアプリ(デイビュー(一日の流れ)、ルート表示、オフライン、バーコード読み取り、サービスレポートへのサイン(お客さんのモバイル上でのサイン))


▽（参考）私が書いたイマイチな記事
https://qiita.com/nori83/items/ea526e0d05efae1a9552
macのBlenderのPythonにパッケージをインストールする方法

## 概要

macOS Sequoia 15.3.1の[Blender](https://www.blender.org/)4.3に、何らかのパッケージをインストールする方法を紹介します。

## インストール

ここでは、例として`more-itertools`をインストールします。

最初にキー入力の手間を省くため、インストール先のシンボリックリンクを作成します。

```sh:zsh
cd
ln -s Library/Application\ Support/Blender/4.3/scripts/addons
```

`ls -H addons`でインストール済みのアドオンを確認できます。
今回の方法は、アドオンと同じ場所にパッケージをインストールします。

インストールは次のようにします。

```sh:zsh
pip3 install more-itertools -t addons
```

次のように確認してみましょう。

```sh:zsh
pip3 list --path addons
```

```output:出力
Package        Version
-------------- -------
more-itertools 10.6.0
```

Blenderを起動して、Scriptingワークスペースで、`import more_itertools`でインポートできることを確認してみましょう。

## アンインストール

アンインストールするには、次のようにフォルダを直接削除してください。

```sh:zsh
rm -r addons/more_itertools
rm -r addons/more_itertools-10.6.0.dist-info
```

なお、作業が終わったら、シンボリックリンクは削除してください。

```sh:zsh
rm addons
```

## pip3についての補足

`pip3`は、macOSにプリインストールされているPython3.9用のものです。
BlenderのPythonとは別物ですが、今回は問題なく使えたので利用しています。

もし、BlenderのPythonのpipを利用したい場合は、`pip3`の代わりに下記を使ってください。

```
/Applications/Blender.app/Contents/Resources/4.3/python/bin/python3.11 -m pip
```

## addonsフォルダを使う理由

BlenderのPythonでインポートできるパッケージの場所は、次のように確認できます。

```python:BlenderのScriptingワークスペース
import sys
sys.path
```

```output:出力（改行を追加）
[
    '/Applications/Blender.app/Contents/Resources/4.3/scripts/startup',
    '/Applications/Blender.app/Contents/Resources/4.3/scripts/modules',
    '/Applications/Blender.app/Contents/Resources/4.3/python/lib/python311.zip',
    '/Applications/Blender.app/Contents/Resources/4.3/python/lib/python3.11',
    '/Applications/Blender.app/Contents/Resources/4.3/python/lib/python3.11/lib-dynload',
    '/Applications/Blender.app/Contents/Resources/4.3/python/lib/python3.11/site-packages',
    '/Applications/Blender.app/Contents/Resources/4.3/scripts/freestyle/modules',
    '/Users/Your Name/Library/Application Support/Blender/4.3/scripts/addons/modules',
    '/Applications/Blender.app/Contents/Resources/4.3/scripts/addons_core',
    '/Users/Your Name/Library/Application Support/Blender/4.3/scripts/addons'
]
```

この中のどれかにインストールすれば使えることになります。
しかし、`/Applications`以下のフォルダはSIP（System Integrity Protection）で保護されているので、今回はユーザーのフォルダのaddonsを使いました。

単純に`pip3 install`すると、通常のインストール先（`/Applications`以下）にインストールできず、次の1行目のようにメッセージがでて、別の場所に正常にインストールされます。しかし、そのインストール先は`sys.path`にないので、インストールしてもBlenderで使うことはできませんので、注意してください。

```output:出力
Defaulting to user installation because normal site-packages is not writeable
Collecting more-itertools
...（中略）
Successfully installed more-itertools-10.6.0
```

以上
PHPで「変数の初期化とNULL」の動作を確認してみた。

# 概要

PHPで「変数の初期化とNULL」の動作を確認してみました。
以下のページを参考にしました。

https://www.javadrive.jp/php/var/index2.html

# 実装

以下のファイルを作成しました。

```sample.php
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
print $name.'さん<br />';
?>
</p>

</body>
</html>
```

以下のコマンドを実行しました。

```
$ php sample.php 
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
PHP Warning:  Undefined variable $name in sample.php on line 13
さん<br /></p>

</body>
</html>
```

# まとめ

何かの役に立てばと。
「フローが終了しました」というメッセージを削除する方法


+ [フロー実行完了時のメッセージについて](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KhsAs)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/328136/794b5d46-5e5d-4519-bb40-21eb29f02091.png)


:::note
以下のアイデアの中でいくつかの回避策が提案されています。 

+ クイックアクションまたはカスタムボタンから画面フローを起動する方法もあるようです。 

+ ヘッダーやフッターのない、記述された Aura コンポーネントを含む画面を追加しました。これにより、画面フローを閉じるイベントが起動されます。

+ ボタンから自動起動フローを起動する場合に使用できるパラメータがあります - retURL。ボタン URL にすでに ? がある場合は、最後に&retURL={! Opportunity.Id } を追加します。 [元のレコードの ID は{! Opportunity.Id }です]

結果は次のようになります - /flow/flow_name?varOpportunityId={! Opportunity.Id }&retURL={! Opportunity.Id }

https://ideas.salesforce.com/s/idea/a0B8W00000GdeS5UAJ/prevent-your-flow-finished-in-screen-flows
:::
（なぐり書き）資料作成にあたり、最低限必要な知識_デプロイメント

・資料作成にあたり、最低限必要な知識_デプロイメント
どのようにしてテストやデプロイを効率化するのか、テストはどのように実施するのか、Sandboxやブランチの構成はどう定義するか説明する必要があります。（人によってフォーマットが違いますが、私の場合、デプロイで語るべきCoE/エグゼクティブスポンサー/CCB/ステコミ/開発手法などはワードの本文中のデプロイメントセクションで回答しています。（なので個別に資料は作らない。））

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/10e1f6f1-c5bc-4860-b14c-190660dc2221.png)

#### どのようにしてテストやデプロイを効率化するのか
サンプル問題を見ると、例えば「直接本番環境に資材をデプロイしている、各開発者が個別にツールを使って開発をしている、テスト工数が相当かかっており、デプロイのスピードを速めたいユーザ要望がある」などデプロイ／資源管理方式に関する課題記述がされている傾向にあります。
今回は小規模ではなく、エンタープライズ（大規模）向けの開発となるため、Gitを使った資源管理による品質向上（デグレ漏れ・資源トラック）や、開発者のCLIの活用（PMD(自動ソースコードチェック)などExtensinoの活用）、工数削減・品質向上を目的としたJenkinsなど活用した自動デプロイ／自動テストの実施を提案する必要があります。（Gitに資源をPushすると、Wehbookの仕組みでJenkinsが検知し、CLIを実行する流れ。）　※別にこれだけが正解じゃないので、Bitbucketとか自分が過去使ったことあるツールを選択したほうが安全です。


#### （参考）Sandboxやブランチの構成、資源の流れ＞　自信なし
まず、最初に凡例を説明します。（上段が各工程ごとのSandbox構成、下段がブランチ戦略である）
①	そのうえで、Mainから資源をDevelopブランチに取得し、②各開発者がFeatureブランチへ取得、③開発・UT環境で開発が完了すると、④開発者はDevelopブランチにマージリクエスト依頼。⑤マージリクエスト依頼を受けて、レビューアーは資源を確認し、問題なければDevelopブランチへPushする。⑥DevelpブランチにPushされると、各環境に自動デプロイが実行。（UAT環境は、ユーザさんが利用していたりするので、タイミングは自動じゃないと考えます。）すべての開発が終わったら⑦MainブランチにPushし、⑧手動で本番環境に資材デプロイを行う。（プロファイルや認証など手動設定が残るため。）

#### その他補足事項
要件に応じて以下も提案しましょう。
・緊急で障害が発生したときのHOTFIXブランチの運用
・並行で案件が動いている際のReleaseブランチの運用
npmの基本概念についてまとめた

# npmとは

npm（Node Package Manager）は、JavaScriptのパッケージ管理ツールです。ライブラリのインストールや更新、スクリプトの実行を簡単に行うことができます。

## パッケージとは

パッケージとは、特定の機能を提供する**便利なツールやライブラリの集合体**です。JavaScriptの開発では、必要な機能を持つパッケージをインストールして利用します。

例えば、以下のようなパッケージがあります。

- `react`：Reactフレームワークのコアライブラリ
- `jest`：テストを実行するためのツール

npmを使うことで、これらのパッケージを簡単に管理できます。

## npmを実行してみよう

npmを実際に使ってみることで、どのように動作するのかを確認できます。

### 1. npmのバージョンを確認する

まずは、npmがインストールされているか確認しましょう。

```
npm -v
```

このコマンドを実行すると、npmのバージョンが表示されます。

### 2. プロジェクトの初期化

新しいプロジェクトでnpmを使う場合、`package.json` を作成します。

```
npm init -y
```

このコマンドを実行すると、デフォルトの設定で `package.json` が生成されます。

### 3. パッケージをインストールする

試しに `jest` というテストフレームワークをインストールしてみます。

```
npm install --save-dev jest
```

インストールが成功すると、`node_modules` フォルダが作成され、`package.json` に依存関係が追加されます。

### 4. インストールしたパッケージを使う

次に、Jestを使ったシンプルなテストを実行してみます。

`test.js` を作成し、以下のようにテストを書きます。

```javascript
describe("Sample Test", () => {
  it("should return true", () => {
    expect(true).toBe(true);
  });
});
```

テストを実行するには、以下のコマンドを使います。

```
npm test
```

これで、Jestを使った基本的なテストの実行ができます。

### 5. パッケージのアンインストール

不要になったパッケージを削除する場合は、以下のコマンドを実行します。

```
npm uninstall jest
```

これで、npmの基本的な操作を試すことができます。

## まとめ
- npmはJavaScriptのパッケージ管理ツール
    - 環境構築が簡単になる（`npm install` でセットアップ）
    - 依存関係やバージョンを適切に管理できる
    - `npm run` でスクリプトを簡単に実行できる
    - 不要なパッケージを整理できる
（なぐり書き）資料作成にあたり、最低限必要な知識_俯瞰図

残：
　・（ファイル）追加ストレージ購入 vs FilesConnect vs AWSS3など外部ストレージ
　・（データ）BigObject vs AWSS3やDWHなど外部ストレージ
　・上記をSalesforce上で見たい時の考慮事項（SalesforceConnectやLWCでの画面構築）


作成中

## 俯瞰図
システム俯瞰図（構成図・鳥観図）をスライドにまとめる際に、凡例の記述が必須です。
廃止すべきシステムなのか、それは新規なのか、データ移行の流れ、システム連携の流れなど記述が必要です。
また、本資料上にデータ移行におけるベストプラクティスを提案する必要があります。（これは人によって流派があって、別スライドに切り出して細かく説明される方もいます。私のやりかたは最低限なので、あまりいい例じゃないかもしれません。）

↓多分これが正解なやりかた
[（参考）CTA Mock Presentation - Universal Parcel Lockers with Emily McCowan](https://www.youtube.com/watch?v=JeRKgGj9HEk)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/97b10ece-b608-480f-bdf9-d1d38cba9bc1.png)
※後段にも記述していますが、最後、システム連携の線とデータ移行の線は、黒で統一しました。

俯瞰図の記述について
以下を文中から読み解き、記述・口頭での回答が必要です。
　・システムの配置。それは廃止されるのか？新しいシステムなのか？
　・システム連携の流れ、データ移行の流れ
　・ミドルウェアの目的とどこで使うのか？
　・認証やAppExchangeなどの外部システム・アプリの記述（本当はモバイルとかも切り出したほうがいいんだと思います。）
　・(NiceToHave)オンプレとクラウドで配置を分ける
※加えて、オンプレか否かで分けるかたや、モバイルを切り出すかたもいます。

具体的な問題と、俯瞰図の反映は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/6fc9a1b4-e29b-4a30-993d-339416ebcfc2.png)

注意点としては、AppExchangeを活用する場合はデータや通信の流れ、設定方法をざっくりでも把握しておく必要があります。（ジャッジからQAされる可能性があるためです。）
例えば、Chargentを活用する場合、PIIの情報やトークン化の処理はどこで行われますか？という質問が飛ぶケースがあります。（PII情報やトークン化の処理はSalesforceに持たず、決済サービスで持つのが一般的です。初期のクレカの入力は、JavaScriptでの通信を行い、Salesforceのサーバサイドの処理は通らないようにします。）
話し方としては、まず凡例の説明⇒俯瞰図の中（例：今回ETLは、非同期処理で大量データの扱いが得意であるため、データ移行やアーカイブ、複雑なバッチ処理に利用します。ESBはシステム連携を行います。既存のCRMは、今後の拡張性がないと書かれていうため、廃止し、Salesforceに移行します。・・・）の説明という流れです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/58e8fb7e-ee80-4302-b9aa-e7daef2bf724.png)

#### :writing_hand_tone4:最終試験前に上記から変えたこと
・最後、色々周囲と相談し、データ移行の赤い線はやめ、システム連携と同じに統合しました。
・アーカイブ先として、ETLからAWSS3への流れを図に書くようになりました。（月次などでETLで定期的にAWS S3へデータを登録し、Salesforceの古いデータは削除。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/29a26ba5-46b4-4554-854d-ac56fde403bb.png)


#### その他注意事項　Canvas
結構Canvasが出るので、ご注意ください。（インテグレーションパターンガイドには載っていない。）
https://qiita.com/nori83/items/d702eab7657c78996ac8
初心者エンジニアに最初に読んでほしい工数見積もりの話

# はじめに
私は、未経験から入社して2ヶ月のエンジニアです。
今回は、そんな初心者エンジニアが研修課題を進めていくに当たって学んだ、工数見積もりについてお伝えしていきます。

# 経緯
この記事は、私の失敗談に基づきます。
私は研修課題のスケジュール管理にガントチャートを用いていたのですが、具体的工程やそれぞれの難易度など何も分からない私は、「このタスクはこんくらいかかるかな〜」と __完全に感覚で、無根拠に__ 工数見積もりを行っていました。
そのため遅延が発生し、更にその際のリスケジュールまで感覚で行ったために更なる遅延が発生し...というループに陥ってしまい、見兼ねた上司に見積もり方法を教わることで、やっと無理のないスケジュールを組むことができました。
以下では、その方法と効果、参考として調べた他の見積もり方法を記しています。私のような初心者エンジニアの糧になれば幸いです。

# 問題点
そもそも、なぜ遅延を繰り返してしまったのでしょうか。
### 1. 各タスクが大きすぎた
起票していたタスクの粒度が大きすぎました。
どのようなことをやっていくのか、が見えていないと見積もることはできません。
粒度が大きすぎると詳細な工程が見えて来ないため、精度の高い見積もりを実現できませんでした。

### 2. 工数を感覚で測っていた
「多分このくらい」で工数を決めていました。
経験者ならこれでカバーできる割合も多いでしょうが、ほぼ全ての工程が未経験である私の感覚が、あてになるはずもありません。

### 3. スケジュールに余裕がなかった
1日の稼働時間と工数を、完全に等しく設定していました。
実際には思うようにいかないのが常であり、アクシデントの想定が不足していました。

# 見積もり方法
以上の問題点を解消する方法です。
### a. タスクの細分化
「1. 各タスクが大きすぎた」に対するアクションです。
タスクの粒度を細かくしていきます。それぞれのタスクの実装過程を追っていき、ある程度の単位で書き出していきます。上司からは、2時間で終わるタスクに分割するのがよいと言われました。
ただ、この時点で分割を行っても、依然として感覚に依存しているだけです。過程を追うのは想像でしかありません。以下の②の工程を踏むまでは、あくまで仮分割として行います。

### b. 着手してかかった時間 / 完了率
「2. 工数を感覚で測っていた」に対するアクションです。
いよいよ、感覚ではなく論理に基づいて見積もりをする段階です。
仮分割した各タスクを、少し齧ってみます。最後まで見通しが立った段階で止め、`それまでにかかった時間 / そのタスクの完了率`を計算すれば、全体の工数が分かります（30分で全体の2/5が終わったなら、`30 / (2/5) = 75`分かかる）。
このとき、仮分割した1タスクが実は2時間で終わらないものだったと分かったなら、更に細分化する必要があります。
着手することにより、見積もりの段階で実装の方針が立つので、開発前に全体像を把握できることもメリットです。

### c. バッファを設けて起票
「3. スケジュールに余裕がなかった」に対するアクションです。
工数見積もりが終了したら起票しますが、この際、稼働時間と工数を完全に対応させるのは望ましくないです。見積もりはあくまで見積もりであり、全てのタスクがその通りに終わるわけではありません。そのため、稼働時間に対して少なめのタスクを充てるべきです。
私は上司から、（mtgなどを除いて）1日6.5h稼働として、2-3タスク（= 4~6h分）を充てるよう助言を受けました。

# 効果
先述の通り見積もりはあくまで見積もりであり、その通りに事が進むわけではありません。それでは、見積もりを行う効果はどこにあるのでしょうか。

### 報告・管理のしやすさ
1タスク2時間と決まっているので、見積もりに対するその日の進捗を報告しやすくなりました。報告を受ける側からしても、管理しやすいのではないかと思います。
私はまだ社内のテクニカルディレクターとコミュニケーションを取る機会はないですが、そういった方々や、営業、ひいては顧客への報告にも役立つことでしょう。

### 不安の解消
個人的には、この点が最も大きかったです。
入社初のタスクということもあり、「これ、いつ終わるんだろう」と毎日不安な気持ちで退社していました。見積もり後は、終わりが明確に見えたことで現状の到達割合が可視化され、毎日の進捗に実感を持つことができました。

# その他の見積もりの方法
今回行ったのはボトムアップ見積もり法と言うようです。
他にも見積もりの方法があるのではと気になったので、調べてみました。

### 類推法
- 過去の類似プロジェクトの工数を参照して、現在のプロジェクトに応用する
- ただし、機能要件や性能が異なる部分は経験や勘頼りになってしまう

### 3点見積もり法
- 楽観値・最可能値・悲観値の3点から見積もる
    - 楽観値 / 悲観値：円滑に進んだ / 進まなかった場合の工数
    - 最可能値：実際に必要とされる現実的な工数
- `(楽観値 + 4×最頻値 + 悲観値) / 6`で計算する

# おわりに
正しい見積もりの方法が分かったとはいえ、経験や知識不足から、精度がまだ追いついていない状態です。
今後繰り返す中で徐々に精度を向上させ、自分は安心して開発を進められる、かつ上司などの管理者は私の進捗を正確に把握できるような、見積もりを目指します。
最後まで読んでいただきありがとうございました。

# 参考
https://qiita.com/taku-0728/items/7a2f0919ce375bbb48f7
Serialized Fieldを３分で理解する



![SS 192.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/565043/a41cd967-f549-8677-1efa-2e99bf69518d.png) Privateをインスペクタに表示するためだけのもの？

## UnityのSerialized Fieldとはなにか？

Unityを使っているとSerialized Fieldを使う例がたまに出てきます。
Privateに設定した変数はインスペクタには表示されませんが、Serialized Fieldに指定することで表示できるとのことです。
...が、表示するだけであればPrivate変数をインスペクタ表示用に準備したPublic変数に毎フレーム代入すればよいような気もします。

Serialized Fieldがなぜ使われれるのか、ちょっと調べてみました。

## そもそもシリアライズってなんのこと？

**シリアライズとは、Unity上ででオブジェクトの状態（変数の値など）をファイル（シーン、Prefab、アセットなど）に保存できる形式に変換する仕組み** のことだそうです。

通常、public変数はUnityのシリアライズ対象となるため、エディタ上で値を設定すれば、その設定値はシーンファイルやPrefabに保存され、Unityを再起動しても保持されます。

一方、private変数の場合、通常はインスペクタに表示されず、値の設定することもできません。またシリアライズされず、値はコード内で設定したもののみが保持されます。

このため、エディタ上で変数を設定して再起動後も値を保持したい場合は、publicとして宣言するか、privateの場合は[SerializedField]を使用する必要があるわけです。


## Serialized Fieldの使い方

```c#
using UnityEngine;

public class Example : MonoBehaviour
{
    // private変数ですが、[SerializeField]属性を付けることでインスペクタに表示されます。
    [SerializeField]
    private int score = 10;

    // GameObject型の変数も同様に、インスペクタから参照を設定できます。
    [SerializeField]
    private GameObject targetObject;

    void Start()
    {
        // エディタ上で設定されたscoreの値を利用
        Debug.Log("Score: " + score);

        if (targetObject != null)
        {
            Debug.Log("Target Object Name: " + targetObject.name);
        }
    }
}

```

このような形で、変数宣言の一行前に **[SerializeField]** と記せばSerializeFieldが有効になります。簡単です。

## Serialized Fieldを使うと何がうれしい？

#### ① プログラマ以外がパラメータをさわる開発でうれしい

変数を外部からアクセス可能な変数（public）に設定すると、書き換えが自由になるため誤動作の原因となります。そのため、変数をprivateに設定し、外部からのアクセスはpublicに設定した関数経由でのみ許可するカプセル化が一般的です。しかしインスペクタに該当の変数の値は表示されず、インスペクタからの書き換えもできません。

Serialized Fieldを使えば変数はprivateのままで、Unityエディタのインスペクタに表示されます。
つまり、プログラマーにとっては内部実装を守りつつ、デザイナーにとってはコードに手を加えずにパラメータを直感的に調整できる、というイイトコドリとなります。

#### ② データの永続性がうれしい
変数の値がエディタで直接編集できると、ゲームの挙動を確認・調整しやすくなりますが、Serialized Fieldであれば、前述のようにprivate変数であってもpublic変数同様に保持されます。

エディタ上で設定した値はPrefab（.prefab）やシーンなどに保存され、Unityが自動的に読み込んでくれるようになるそうです。
これにより、再起動やビルド後も設定が保持され、プロジェクト全体の一貫性が保たれます。
C++やPythonでは、同様の永続化を自前で実装する必要があるため、この仕組みは非常に手間を省ける点です。

## インスタンスとシリアライズの関係

#### インスタンスの変数もシリアライズされるか？

ゲームオブジェクトにスクリプトがアタッチされると、そのスクリプトの「インスタンス」が作られます。
インスタンス生成時に、保存されているシリアライズされたデータから各フィールドの値が復元され、各インスタンスの変数に反映されます。

複数のゲームオブジェクトに同じスクリプト（クラス）がアタッチされていた場合でも、各インスタンスはシリアライズされた値を持ちます。エディタ上で異なる値を設定すれば、それぞれのインスタンスが異なる動作や状態を持つことができます。

#### コード側の初期値 vs シリアライズされた値
スクリプト内でフィールドに初期値を設定していても、エディタで値を変更すると、その変更値がシリアライズされ、インスタンス生成時にそちらが優先されます。つまり、コードに記述した初期値は、エディタで設定した値があれば上書きされます。とのことです。


    
## 結論

**private変数をインスペクタで編集させたい場合には、[SerializeField]を指定すればOK。**

調べながら書いた記事なので間違いや他のメリット、デメリットがあればぜひご指摘ください。

## 参考

この記事を書き終わってから改めて調べ直したら...よいまとめ記事がありました。
最初の検索でなぜ見逃したのか不明ですが、ありがとうございます。

https://qiita.com/makopo/items/8ef280b00f1cc18aec91

https://tech.pjin.jp/blog/2021/12/23/unity-serializefield

本家マニュアル

https://docs.unity3d.com/6000.0/Documentation/ScriptReference/SerializeField.html
（なぐり書き）資料作成にあたり、最低限必要な知識_ロール管理

ロール階層をスライドにまとめる際に、凡例の記述が必須です。
社内ユーザの内部ロールなのか、社外の外部ユーザのロールなのか識別します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/f6735a12-b7af-44c3-84c4-ab524c3ab685.png)

**ロール階層の記述について**
主にシステムに関する利用者の説明や、アクセス権限個所の説明からロール階層要件を抜粋します。
具体的な問題と、ロール階層の反映は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/ab45f50f-e759-4aed-83b6-8008f61265f5.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/da5be1f4-e695-48ea-9161-c7c954301511.png)

あまり捻った問題はないので、基本問題文に沿って、地域や役職を書き出せし、アクセス権限要件と整合性をとることにより、ロール階層は定義できます。

注意点
　・CustomerCommunityはロールが使えない。（ロールや共有ルールは処理に時間がかかる。CCは共有セットのみで、一般的に権限処理の速度が高速と考えられるため、大量ユーザ(1億人以上の利用など)に対応している。）
　・ユーザに対して、ロールは１つしか割り当てることができない。もし複数地域の割り当てや、ロールとは別軸の割り当てをしたいならば、テリトリ機能の活用を検討する。（ただしテリトリは取引先、商談、ケースなど一部機能しか対応していない点を注意）
　・共有ルールの定義数には上限がある（現時点1テーブル300まで。500に拡張可能。）ため、ロール数が多くなった場合は共有ルールの利用が最適か検討を行う。（主にアクセス権限の問題文）
（なぐり書き）資料作成にあたり、最低限必要な知識_認証フロー

認証フローは以下3パターンを確実に暗記する必要があります。（最低限必要な知識。）

SP開始のSAMLSSO
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/77a069d9-41a5-4231-8bcf-9b8d073901ed.png)


Idp開始のSAMLSSO
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/3e39cd32-049c-44da-9dad-ea630a8192e7.png)


ソーシャルサインオン（OpenIDConnect）
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/55fa30c6-8963-4ad7-9b9d-67066ca32de7.png)

↓私のフローよりこっちのほうが多分正しい・・・
[認証フロー Cloud Sundial](https://cloudsundial.com/salesforce-sso-flows)


そのほかにサーバ間で認証する際のJWT(ジョット)、SAMLなどが使えないような古い環境や固有のセキュリティが必要な際に検討されるSOAPの代理認証や、Salesforceオーセンティケータ、認証コードを飛ばす方式など、いろいろなパターンが出ますが、上記3パターンは最低限の必須キャッチアップ事項です。
[Salesforceで適切なOAuthフローを選べるようするには](https://base.terrasky.co.jp/articles/ecEXW)

認証フローに加えて、認証の設定方法についても理解する必要があります。（私は実機で設定を行い、設定の流れを確認しました。また併せて画面からどう操作されるのかも確認しました。）

IDトークンって？認可コードって？RPって？公開鍵って？SAMLレスポンスって？IDストアが複数ある場合どういうアーキになるの？SP開始だと持ちまわすパラメータは？という質問が飛ぶケースがありますので、ただ暗記するのではなく、それぞれの用語の意味や、どういった理由からトークンを双方受け渡すのかなど理解しておく必要があります。

私は技術に詳しい友人から勧められたActiveDirectoryの本を1冊読むのと、QiitaやWeb記事で認証認可・SAMLなどの説明を読み込み、用語の暗記を行いました。実機で実際にSSOの設定もしました。（Salesforce間のSSO設定やFacebookとのソーシャルサインオンなど。）また、Identity資格の復習も必須です。

[Salesforce のIDとアクセス管理 をマスターしよう！ 〜 認定 Identity and Access Management 試験のポイント](https://www.youtube.com/watch?v=9eDI8SI3hhs)
（なぐり書き）資料作成にあたり、最低限必要な知識_Org

### Orgの解き方
シナリオを読み、以下のようにSalesforceの組織構成について、単独(1Org・シングルオルグ・単独環境)でいくか、マルチオルグでいくか選択し、なぜそれを選択したか根拠を示す必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/450298/557e37a2-98a4-e815-9366-097c5902b92f.png)

稀にマルチオルグが回答になるケースがあると思いますが、例えば権限など規制要件やあまりにもデータ量が多すぎてガバナ制限を考慮すると組織を分けざるを得ないケースが該当します。分け方としては、地域やビジネスユニット単位が多いです。


以下、Orgを判断・検討するための判断軸の例です。

### ＜機能＞
・レポートやChatter、レコードの共有機能というのは組織単位で使える機能となります。（他SalesforceOrgのデータを、標準レポートで参照することはできませんよね。）
ですので、1OrgであればレポートやChatterなどコラボレーション機能を活用できる点や、レコードの共有など組織内で行える点がメリットとなります。
　→一方 裏を返すと、マルチOrgにしてしまった場合、組織を跨いで上記機能が使えないので、そこがデメリットとなります。
・よくあるのが複数の国が利用しており、各言語に応じてシステム上のラベルを切り替えたい・通貨を切り替えたい要件がありますが、トランスレーションワークベンチやマルチ通貨で対処ができますので、その要件ではマルチオルグにする判断基準にはなりえません。（左記機能を利用する場合、何か制約はあるか？を突っ込まれるケースもあります。使う機能はすべてメリデメや根拠を聞かれる可能性があると考えたほうがいいです。（例：マルチ通貨は一度有効化すると無効化できないので、Sandboxで影響確認してから有効化を決めるべきである、など。））

### ＜LDV/ガバナ＞
大量データを扱う場合はガバナ制約に抵触する可能性が高まります。（組織単位でガバナ制約の上限が定義されているためです。https://developer.salesforce.com/docs/atlas.ja-jp.salesforce_app_limits_cheatsheet.meta/salesforce_app_limits_cheatsheet/salesforce_app_limits_platform_apexgov.htm）
例えば、インターフェースだとAPIコール数（SalesforceのAPIを叩ける回数制限）であったり、検索だとデータのクエリで5万件までしか取得できないなどです。組織単位で存在する制限ですので、組織が分かれるとデータ量が分散され、当然ガバナ制限に抵触しづらくなる・扱うデータも少なくなります。
→ですので、1組織でアーカイブなどしても対処できないような大量データを扱う場合や規制要件で同じ組織にできない場合、マルチOrgになり得ます。

### ＜連携・認証＞
1Orgの場合に、連携や認証がシンプルになります。
逆に複数のSalesforce組織がある場合、想像してほしいのですが、顧客マスタの持ち方や、ナレッジのような一元管理したいマスタの持ち方、認証マスタの持ち方など、考慮事項・検討が増えるに加えて、認証設定や共通資材の構築などそれぞれの組織にて行うので、開発やテストも当然増えていきます。
また、システム連携についてもミドルウェアでルーティングやフォーマット変換が発生し、複雑な仕様となります。仕様変更の際にも複数組織に影響調査や開発・テストが必要になるケースがあります。キーの持ち方も考慮が必要でしょう。

### ＜サポート管理工数＞
仮にSalesforce組織が複数になった場合に、コールセンターの管理工数が増えるように思います。（コールセンターの定義の単位にもよりますが、組織ごとに画面や機能、マニュアルなど必要になります。）
操作／管理するシステムが二重になるケースもありますし問い合わせがシステムによって分かれるので、うまくサポート担当に業務割り当てるなど、なかなか管理する側も難しいかと思います。
→ですので、1Orgであればこういったサポート管理工数が低減になる点もメリットです。

### ＜デプロイ工数＞
古いCRMなどを廃止し、Salesforceに移管するシナリオが多いのですが、その際にレコードタイプやパスなど使い、プロセスやレイアウトの標準化を行うかと思います。（せっかく新しいシステムにするなら、汎用的でメンテナンスしやすい作りにしたいですよね。汎用的にすればワークフローのステータスをレポートで一元管理できたり、保守しやすいなどメリットがあると思います。ですので、古いCRMシステムが複数あって、それぞれ個別にプロセス定義していたとしても、Salesforce移管タイミングで標準化できるところは標準化していきたいものです。）
標準化する前提において、組織がわかれてしまうと、重複資材が増えてしまい、テスト工数やデプロイ工数など組織ごとに二重で発生してしまうケースがあります。これがマルチOrgのデメリットにあたると考えます。
**※ちなみに古いCRMがSalesforceだったりするケースもあるので、ここは試験前に色々なパターンのシミュレーションをしておいたほうがいいです。**

### ＜規制要件＞
規制要件により、明確に同一組織に他国のデータを持ってはならないなどシナリオに書かれていた場合、組織を分けざるを得ません。マルチOrgとなります。


上記以外にも軸があると思いますが、とにかく時間のない試験で、あまり時間をかける箇所じゃないと思いますので、プレゼンの際にはさらっと1分くらいで結論と根拠を話せるようにしておく必要があります。
また、もしQAで突っ込まれた時には、背景を即座に話せないといけません。

また、単純に新システムにおいて１Orgかマルチか問われるケースと、既存ですでにOrgがいて、それを統合するか否か問われるケースがあります。既存がSalesforceであるケースもあるかもしれません。
（個人的には、既存はだいたいパイロットだったり複雑に拡張性なく作られている前提が多いと思いますので、標準化などのメリットを伝えて、新システムに移行するケースが多いです。既存はｈ）

★参考になるURL
▽Salesforceの組織戦略（Org Strategy）について考える
https://base.terrasky.co.jp/articles/STo3R

▽いまいちだけど、関連資料
https://qiita.com/nori83/items/921d3f1d56b84b4afe6c
ゲストユーザが レコード アクセスには、ゲスト共有ルールも必要です。



+ [Guest User Record Access Development Best Practices](https://www.learnexperiencecloud.com/article/Guest-User-Record-Access-Development-Best-Practices)

:::note
ゲストユーザを使用する組織のデータセキュリティを強化するため、Salesforce ではいくつかの改善を行っています。このトピックをスタートポイントとして、すべてのセキュリティの改善と更新 (適用のタイムラインや変更に向けた準備など) について理解してください。
:::


+ [Community Guest user cannot access the record through the flow even it has the flow access and object read and create access](https://trailhead.salesforce.com/trailblazer-community/feed/0D54V00007ahRBZ)

:::note
For guest record access, you also need guest sharing rule. Just object level read access won’t be sufficient.

ゲスト レコード アクセスには、ゲスト共有ルールも必要です。オブジェクト レベルの読み取りアクセスだけでは十分ではありません。
:::

[ゲストユーザー共有ルールの作成](https://help.salesforce.com/s/articleView?id=sf.security_sharing_rules_guest.htm&type=5)

ゲストユーザー共有ルールは、特別な条件ベースの共有ルールであり、認証されていないゲストユーザーにレコードへのアクセス権を付与するための唯一の方法です。ゲストユーザー共有ルールでは、参照のみアクセス権を付与できます。

ゲストユーザーにレコードアクセスを許可するためには、ゲストユーザー共有ルールを作成する必要があります。ゲストユーザー共有ルールタイプは、ログイン情報のないユーザーにアクセス権を付与するものです。ゲストユーザー共有ルールを作成すれば、共有ルールの条件に一致するすべてのレコードに、誰もが無制限にすぐさまアクセスできるようになります。Salesforce データを保護し、ゲストユーザーが必要な情報にアクセスできるようにするために、このタイプの共有ルールの作成に関するすべての使用事例と影響を検討してください。データの機密性に適したセキュリティコントロールを実装します。デフォルト設定からのこの変更により、認証されていないユーザーにデータが漏洩した場合でも Salesforce は責任を負わないものとします。




+ [ゲストユーザーのセキュリティポリシーとタイムライン](https://help.salesforce.com/s/articleView?id=sf.networks_guest_policies_timelines.htm&type=5)

ゲストユーザーには、データへの参照アクセス権より強力なアクセス権を付与することはできません。


# フローでも同じ

+ [エクスペリエンスクラウドでのデータテーブル表示について](https://qiita.com/Keiji_otsubo/items/55ebc9c634a3216f3990)
Gift Entry のまとめ



+ [Gift Entry returns error "a component error has occurred" during Process Batch](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000E9YqB)

|【ギフトエントリー】 | |
|:------------------------------------------------------|:-------------------------------------------|
|[ギフトエントリーバッチを突然実行しようとすると、このエラーが発生します。npsp：SOQLクエリが多すぎます：101](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000BuP6eSAF)|[バッチレコードがロードされない ギフトエントリ](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000E99j4)|
|[ギフトエントリーバッチのデフォルト-チェックボックスはサポートされていません](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000Fxkq3)|[再処理時に重複する機会を作成するギフトエントリ](https://trailhead.salesforce.com/ja/trailblazer-community/feed/0D54S00000G5J9m)|

# ライセンス

+ [ユーザーの 1 人にパートナー コミュニティ ライセンスを使用していますが、このライセンスではGift Transaction、Gift Commitment、Gift Soft Creditオブジェクトへのアクセスが許可されません。権限セットを使用してアクセスを許可しようとしましたが、「ユーザー ライセンスでは権限が許可されていません」というエラーが返されました。パートナー コミュニティ ライセンスにこれらのオブジェクトへのアクセスを割り当てることができるかどうか知っている人はいますか? ](https://trailhead.salesforce.com/trailblazer-community/feed/0D5KX00000KBtT9)

:::note
リンクを確認してください。

https://help.salesforce.com/s/articleView?id=release-notes.rn_permissions.htm&release=252&type=5

 パートナー コミュニティ ライセンスでは、ギフト トランザクション、ギフト コミットメント、ギフト ソフト クレジット オブジェクトへのアクセスはサポートされていません。コミュニティ プラス ライセンスに切り替えるか、カスタム オブジェクトを使用することが解決策になる可能性があります。 
 :::
ChatGPTとCopilot Editで個人 iOS アプリを公開するまでの記録

# はじめに

個人的に作りたいアプリはあったのですが、なかなか手を付けられずにいました。
会社ではCopilot Editやエージェント(Copilot Agent)を使い始めており、「これを使えばサクサク作れるのでは？」と思い挑戦してみました。
この記事ではその開発の流れを紹介します。※アプリのアイデア出しやプロンプト作成にはChatGPTを活用しました。

## Copilot Editとは

従来のCopilot Chatではチャットで指示を出すとコードが提示され、それを手動でコピー・ペーストする必要がありました。
しかしCopilot Editではチャットで指示すると、直接コードを編集・生成してくれます。

## 料金

Copilot ChatをIDEから利用するには、Copilot Proプランが必要です。
個人向けプランは月10ドル、年払いなら100ドルです。私は「年間15,000円程度で使えるならむしろお得」と思い、課金しました。（初回30日間は無料）

https://docs.github.com/ja/copilot/about-github-copilot/subscription-plans-for-github-copilot#user-content-fn-3

# 開発の流れ

ざっくり以下の手順で開発しました。
	1.	ChatGPTでアプリ名と必要な機能を決める。
	2.	XcodeでiOSアプリのプロジェクトを作成する。
	3.	ChatGPTに「Copilot Editで実装を依頼するためのプロンプト」を作ってもらう。
	4.	プロンプトを調整し、VS CodeのCopilot Editで実行。→ 修正を繰り返しながら形にしていく。
	5.	GPTにレイアウト・デザインの改善案をもらい、UIを調整する。
	6.	GPTにアプリアイコンを依頼する。
	7.	App Store Connectにアップロードして申請・公開。

# AI活用

### ChatGPTにアプリ名やファーストリリースで必要な機能を相談

アプリのアイデアは決まっていたので、ChatGPTと壁打ちしながら最小の機能を整理しました。

* 親の感情記録アプリというのを作ろうとしているのですがXcodeプロジェクト名の候補を教えてください
* ノートアプリのような感じで記録できるのが良いと思いますがファーストリリースとしてはどんな機能が必要だと思いますか
* 毎回フリーテキストで入力させるの結構手間じゃない？
* ３回もタップするの大変じゃない？（しつこいけど）

### Copilot Editを使うつためのGPTにプロンプトを作ってもらう

雑な指示ですが、相談していたチャット上で「というわけでプロンプトください」と伝えます。

* チャットの流れで、「Copilot Editで実装をやらせたいので、プロンプトを作ってくれない？」と依頼。
すると、以下のようなプロンプトが生成されました。

```
// EmotionInputView.swift
// SwiftUI を使用して親の感情記録アプリの入力画面を作成する
// 
// **要件**
// ✅ ユーザーは「感情」をボタンで選択できる（必須）
// ✅ 「子どもの行動」「自分の行動」はチェックボックス（任意）
// ✅ 「メモ」は自由記述（任意）
// ✅ 「保存」ボタンは常に画面下に固定される
//
// **UI レイアウト**
// - 感情ボタン（最上部・横並び）
// - 子どもの行動チェックボックス（複数選択可能）
// - 自分の行動チェックボックス（複数選択可能）
// - メモ入力欄（シンプルな TextEditor）
// - 「保存」ボタン（画面下に固定）
//
// **注意点**
// - StateObject などを使い、選択データを管理する
// - レスポンシブなデザインにし、タップしやすいサイズで配置する
// - SwiftUI の ScrollView を活用し、画面がスクロール可能な構成にする
//
// **コードの作成を開始**
```

これに対して、私はプロジェクトの構成に関する注意点を追加しました。

```
// **注意点**
// - ContentViewは入力した情報を一覧表示するViewです。このViewは作成済みですが、Swift Data有りで作ったデフォルトのプロジェクトのままになっている。
//   - そのため既にあるItem.swiftは使わずSwift Dataを使用したEmotion.swiftを作成し、データ保存を行なう。
```

これをCopilot Editのチャット欄に貼り付け、作業を進めました。
ほぼ叩き台のコードにはなったので細かい部分は追加指示や自分で修正しました。

GPTにレイアウト・デザインの改善案をもらう

Copilot Editで作成したUIは標準的な見た目だったため、スクリーンショットとコードをGPTに貼り付け、デザインの改善案をもらいました。

```
こんな感じの見た目にしたのですが、デザインをもっと使いやすいようにしたい

実装はこれです。

import SwiftUI
...
```

やり取りを重ねてデザインを調整しアイコンもGPTに作成してもらいました。
その後App Storeに申請し、無事に公開されました。

https://apps.apple.com/jp/app/%E8%A6%AA%E3%81%AE%E6%84%9F%E6%83%85%E3%83%8E%E3%83%BC%E3%83%88/id6742066271

# 最後に

ストアのスクリーンショットを見ていただくと分かる通り、まだシンプルな見た目です。
しかし、私は以前から「個人アプリを作って公開し、たまにコードメンテナンスをしたい」と思っていました。
ただ`案出し→設計→実装→テスト→公開`という流れは時間がかかり、なかなか手をつけられませんでした。

今回生成AIを活用することで、大幅に時短できました。
理想的なコードを一発で作ってくれるわけではないですが、プロンプトの工夫次第で、個人開発でも十分に恩恵を受けられると実感しました。
【🔰向け】つよくなりたい鬼の子たちへ【マインドセット】

# あなたはすでに強い
？なんで
？どうして
？よくわからん

## なんで？
？ あ
？ ま
？ るう
？ がむううううう

## わからない徹夜
？ ね
？ て
？ く
    ださーーーい ！！！！！！！！！！！

# よく寝なさい
‐ 早起きは三文の解く
‐
‐
‐
‐
‐
‐ 7時間睡眠

# おやすみぷんぷん
    海辺の女の子
    
    > いにお先生
「知能とはなにか ヒトとAIのあいだ」要約 by Grok3

拙著「知能とはなにか　ヒトとAIのあいだ」について[Grok3に紹介してもらいました](https://x.com/i/grok/share/X4F031mxJuw1xzjLE79bJ0aZF)。

「知能とはなにか ヒトとAIのあいだ」は、田口善弘氏による著作で、2025年1月23日に講談社現代新書から出版されました。著者は中央大学理工学部の教授で、機械学習や物理学の専門家として知られています。この本は、現代における生成AIの急速な進化を背景に、「知能とは何か」という根源的な問いを再考する内容となっています。
# 本の概要
本書では、AI（人工知能）と人間の知能の違いや共通点を科学的かつ哲学的な視点から探求しています。特に、ChatGPTに代表される生成AIが持つ汎用性やその能力が人類に与える影響について考察しつつ、AIが自我や意識を持つ可能性や、いわゆる「シンギュラリティ（技術的特異点）」が実現するかどうかを議論しています。著者は、現在の生成AIの延長線上では人類に匹敵する知能や自我を持つAIは誕生しないと主張し、その理由としてAIと人間の知能が本質的に異なることを挙げています。
# 主な内容
本書は全9章で構成されており、以下のようなテーマが扱われています：
* 生成AIの現状とその影響（第0章「生成AI狂騒曲」）
* 知能研究の歴史的背景（第1章「過去の知能研究」）
* 深層学習から生成AIへの進化（第2章）
* 脳と知能の関係（第3章「脳の機能としての『知能』」、第4章「ニューロンの集合体としての脳」）
* 生成AIの仕組みと限界（第5章「世界のシミュレーターとしての生成AI」）
* 人間の脳が持つ学習能力の特異性（第6章「なぜ人間の脳は少ないサンプルで学習できるのか？」）
* 物理学的な視点からの考察（第7章「古典力学はまがい物？」、第9章「非線形系非平衡多自由度系と生成AI」）
* 今後の知能研究の展望（第8章「知能研究の今後」）
# 特徴と魅力
* 物理学者の視点: 著者の専門である物理学の知識を活かし、AIを「非線形非平衡多自由度系」として捉える独自の視点が特徴的です。これにより、技術的な解説だけでなく、知能の本質に迫る深い議論が展開されています。
* 一般向けのわかりやすさ: 専門的な内容を扱いつつも、講談社現代新書らしい平易な文体で書かれており、AIに詳しくない読者にも理解しやすい工夫がされています。
* 哲学的問いかけ: 「知能とは何か」という曖昧な概念を再定義しようとする試みは、技術論を超えた思索を促します。
# 著者の主張
田口氏は、生成AIが人間の脳よりも膨大なデータを効率的に処理できる一方で、人間の知能が持つ柔軟性や少ないデータから学習する能力とは異なる特性を持つと指摘します。また、AIが自律的に改良を繰り返し人類を超えるというシンギュラリティの仮説に対して懐疑的な立場を取り、その根拠を脳とAIの構造的・機能的な違いに求めています。
# 読者層
この本は、AIに関心のある一般読者から、科学技術や哲学に興味を持つ人々まで幅広い読者層に推奨されます。特に、生成AIの急速な進展に戸惑いや興味を感じている人にとって、知能の本質を考えるきっかけとなるでしょう。
#出版情報
* 著者: 田口善弘
* 出版社: 講談社（現代新書）
* 発売日: 2025年1月23日
* ページ数: 208ページ
* 価格: 1,012円（税込）
* ISBN: 978-4-06-538467-1

この本は、AIと人間の知能をめぐる混沌とした現状を整理し、読者に新たな視点を提供する一冊として注目されています。興味があれば、ぜひ手に取って読んでみてください。
<Terraform>LAMP環境自動構築


# まえがき
Terraformの学習用に作成しました。
Linuxのローカル環境で実行しています。


# 事前準備
```bash
$ sudo dnf install terraform -y
$ terraform --version
$ vi variables.tf       #内容は以下へ記載
$ vi terraform.tfvars   #内容は以下へ記載
$ vi main.tf            #内容は以下へ記載
```

# TerraformでLAMP環境自動構築

```terraform:variables.tf
variable "server_ip" {
  description = "ターゲットLinuxサーバのIPアドレス"
  type        = string
  default     = "127.0.0.1"
}
```
```terraform:terraform.tfvars
server_ip = "127.0.0.1"
```

```terraform:main.tf
provider "local" {}

resource "null_resource" "install_lamp" {
  provisioner "local-exec" {
    command = <<EOT
      sudo yum update -y
      sudo dnf install -y httpd mariadb-server php php-mysqlnd
      sudo systemctl start httpd
      sudo systemctl enable httpd
      sudo systemctl start mariadb
      sudo systemctl enable mariadb
      echo '<?php phpinfo(); ?>' | sudo tee /var/www/html/index.php
      sudo systemctl restart httpd
    EOT
  }
}
```
```bash
$ terraform init
$ terraform plan
$ terraform apply
$ sudo systemctl status httpd
$ curl http://localhost/:80
```
paizaラーニングレベルアップ問題集の【半角スペース区切りの入力】をやってみた。

paizaラーニングレベルアップ問題集の【半角スペース区切りの入力】をやってみました。
- - -
##### 問題
###### 1つの入力
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__split_input_step1
###### 半角スペース区切りの2つの入力
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__split_input_step2
###### 半角スペース区切りの3つの入力
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__split_input_step3
###### 半角スペース区切りの10個の入力
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__split_input_step4
###### 半角スペース区切りの1,000個の入力
https://paiza.jp/works/mondai/stdin_primer/stdin_primer__split_input_boss
- - -
5問とも同じコードで正解してみます。
- - -
##### C
```c
#include <stdio.h>

int main(void){
    char s[11];
    while (scanf("%s", s) == 1)
        puts(s);
    return 0;
}
```
- - -
##### C++
```cpp
#include <iostream>
using namespace std;

int main(void){
    string s;
    while (cin >> s) cout << s << endl;
    return 0;
}
```
- - -
##### C#
```cs
using System;

class Program
{
    public static void Main()
    {
        foreach (string s in Console.ReadLine().Split()) Console.WriteLine(s);
    }
}
```
- - -
##### Go
```go
package main
import "fmt"

func main(){
    var s string
    for i, err := fmt.Scan(&s); err == nil && i == 1; i, err = fmt.Scan(&s) {
        fmt.Println(s)
    }
}
```
- - -
##### Java
```java
import java.util.*;

public class Main {
	public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
	    for (String s : sc.nextLine().split(" "))
	        System.out.println(s);
        sc.close();
	}
}
```
- - -
##### JavaScript
```js
require("fs").readFileSync("/dev/stdin", "utf8").trim().split(' ').forEach((s) => console.log(s));
```
- - -
##### Kotlin
```kotlin
fun main() {
    for (s in readLine()!!.split(" ")) println(s)
}
```
- - -
##### PHP
```php
<?php
    foreach (explode(' ', trim(fgets(STDIN))) as $s)
        echo $s, PHP_EOL;
?>
```
- - -
##### Perl
```pl
for (split ' ', <STDIN>) {
    print "$_$/";
}
```
- - -
##### Python3
```py
for s in input().split():
    print(s)
```
- - -
##### Ruby
```rb
gets.chomp.split.each do |s|
    puts s
end
```
- - -
##### Scala
```scala
import scala.io.StdIn._

object Main extends App{
    for (s <- readLine().split(" ")) {
        println(s)
    }
}
```
- - -
##### Swift
```swift
for s in readLine()!.split(separator: " ") {
    print(s)
}
```