OmniAICreator/Qiita-1.07M huggingface dataset:
#0054（2024/02/22）Angular関連

# Node, npm, Angular の関係性と用語の解説

## Node.js とは？
- **Node.js** は、JavaScript をブラウザ以外の環境、つまりサーバーサイドで実行できるランタイム環境です。  
- Google Chrome の V8 JavaScript エンジンをベースにしており、高速なパフォーマンスや非同期 I/O を実現しています。

## npm とは？
- **npm (Node Package Manager)** は、Node.js のためのパッケージマネージャーです。  
- npm を使うことで、開発に必要なライブラリやツール（パッケージ）を簡単にインストール、更新、管理できます。  
- Node.js のエコシステムにおいて、数多くのパッケージが npm 経由で提供されています。

## Angular とは？
- **Angular** は、Google によって開発されたフロントエンド（クライアントサイド）の**フレームワーク**です。  
- 主にシングルページアプリケーション（SPA）を構築するために使用され、TypeScript で記述されます。  
- Angular は、モジュール、コンポーネント、サービスなどの構造を提供し、効率的で拡張性の高いアプリケーション開発をサポートします。

## Node, npm, Angular の関係性

- **開発環境の構築:**  
  Angular のプロジェクトは、開発中に Node.js を実行環境として使用し、npm を通じて Angular のコアライブラリや関連ツール（例えば、Angular CLI）を管理します。  
  例えば、Angular CLI を使って新規プロジェクトを作成し、npm で依存パッケージをインストールするという流れになります。

- **ツールチェーンの一環:**  
  Node.js と npm は、Angular のビルド、テスト、自動化、デプロイなどのプロセスをサポートするためのツールとして連携しています。  
  このため、Angular のプロジェクトは Node.js の環境下で動作し、npm を使って様々なパッケージが管理されています。

## その他用語の解説

- **パッケージ (Package):**  
  ソフトウェアの機能やライブラリがまとめられた単位を指します。  
  npm で配布されるパッケージには、特定の機能やツールが一括して含まれており、再利用や依存関係の管理が容易になります。

- **フレームワーク (Framework):**  
  アプリケーション開発を効率化するための共通の構造やルール、仕組みを提供するソフトウェアの土台です。  
  フレームワークは、基本的なアーキテクチャやデザインパターンを規定することで、開発者がその上にアプリケーションを構築しやすくします。  
  Angular はその一例であり、一定の構造に基づいてアプリケーションを組み立てることで、保守性や拡張性を高めます。

## 類似技術
### Node.js の類似技術

**Node.js** は、JavaScript をサーバーサイドで実行するためのランタイム環境です。  
同様の目的で利用される技術には以下があります。

- **Deno**  
  - **概要:** Node.js の創始者である Ryan Dahl が開発した新しいランタイム。  
  - **特徴:** セキュリティが強化され、デフォルトで TypeScript をサポートするなど、現代的な設計が特徴です。

- **Bun**  
  - **概要:** 新興の JavaScript/TypeScript ランタイム。  
  - **特徴:** 高速なパフォーマンスと効率的なリソース管理が売りで、npm や Node.js 互換のパッケージエコシステムに対応しています。


### npm の類似技術

**npm** は、Node.js のためのパッケージ管理ツールです。  
同様の機能を持つツールとしては以下が挙げられます。

- **Yarn**  
  - **概要:** Facebook が開発したパッケージマネージャー。  
  - **特徴:** 高速なキャッシュシステムや並列インストールなどにより、npm よりも高速で安定した依存性管理を実現しています。

- **pnpm**  
  - **概要:** ディスクスペースの効率化と高速な依存解決を目指したパッケージマネージャー。  
  - **特徴:** グローバルなキャッシュを共有し、シンボリックリンクを活用することで、重複ファイルの保存を防ぎます。


### Angular の類似技術

**Angular** は、フロントエンドのシングルページアプリケーション（SPA）を構築するためのフレームワークです。  
同じカテゴリーに属するフロントエンドフレームワークやライブラリは以下の通りです。

- **React**  
  - **概要:** Facebook が開発した UI ライブラリ。  
  - **特徴:** コンポーネントベースの設計で、仮想 DOM による高速レンダリングが特徴。状態管理やルーティングは別途ライブラリを組み合わせる必要があります。

- **Vue.js**  
  - **概要:** 軽量で学習しやすいフロントエンドフレームワーク。  
  - **特徴:** シンプルなAPI、双方向データバインディング、柔軟なコンポーネント設計が魅力です。

- **Ember.js**  
  - **概要:** 強い規約に基づくフレームワーク。  
  - **特徴:** 「設定より規約」を重視し、大規模なアプリケーション開発に向いています。

- **Svelte**  
  - **概要:** コンパイル時に不要なオーバーヘッドを除去する最新のフロントエンドフレームワーク。  
  - **特徴:** ランタイムが非常に軽く、シンプルなコードで高速なアプリケーションを構築できます。


## まとめ

- **Node.js:** JavaScript をサーバーサイドで実行するためのランタイム環境。  
- **npm:** Node.js 用のパッケージ管理ツールで、ライブラリやツールの管理を担います。  
- **Angular:** TypeScript で開発されたフロントエンドフレームワークで、効率的なウェブアプリケーション開発をサポートします。  

これらは連携して、Angular のプロジェクト開発において Node.js を実行環境とし、npm を用いて必要なパッケージを管理・導入するという形で利用されます。
passwordのバリデーション

## confirmed
これ何？
```
    public function validateConfirmed($attribute, $value)
    {
        return $this->validateSame($attribute, $value, [$attribute.'_confirmation']);
    }

        public function validateSame($attribute, $value, $parameters)
    {
        $this->requireParameterCount(1, $parameters, 'same');

        $other = Arr::get($this->data, $parameters[0]);

        return $value === $other;
    }
```
`password`と`password_confirmation`を`===`で比較する感じのやつでした。

## uncompromised()
これ何？
> さらに、次のuncompromised方法を使用すると、公開パスワード データ侵害漏洩でパスワードが侵害されていないことを確認できます。
> haveibeenpwned.comサービスを介してパスワードが漏洩したかどうかを判断します。

https://laravel.com/docs/10.x/validation#validating-passwords

https://haveibeenpwned.com/

https://haveibeenpwned.com/Passwords
JavaScriptでマルバツゲームを作ってみた

# JavaScriptでマルバツゲームを作ってみた

この記事では、JavaScriptを使ってシンプルなマルバツゲームを作成したコードを紹介します。このゲームでは、ボタンをクリックすることでプレイヤーが「X」または「O」を入力し、勝者が決まる仕組みになっています。

## コードの解説

### HTML部分

```html
<style>button{font-size:50;width:100;height:100</style>
<body id=b><script>
	z=3,c=0;
	p=Array(Z=z*z).fill(g=".");
	m=n=>{
		p[n]==g&&(p[n]=c++%2?"X":"O");
		(s=p[n])!=g&&[p.filter((_,i)=>i%(z+1)==0),p.filter((_,i)=>i&&i-Z+1&&i%(z-1)==0),p.filter((_,i)=>i%z==n%z),p.slice(0+(N=~~(n/z)*z),z+N)].some(e=>[...new Set(e)]==s&&alert("win",m=n=>0));
		b.innerHTML=p.map((v,i)=>`${i%z?"":"<br>"}<button onclick=m(${i})>${v}</button>`).join``
	};m()
</script>
```

### 1. スタイル部分

```html
<style>
  button{font-size:50;width:100;height:100}
</style>
```

- ここでは、ボタンのフォントサイズやサイズを設定しています。ボタンは大きめに設定して、視覚的にインタラクティブに見えるようにしています。

### 2. ゲームロジック

```javascript
z=3, c=0;
p=Array(Z=z*z).fill(g=".");
```

- `z=3` で盤面のサイズを決めています。ここでは3x3の盤面を作成しています。
- `p=Array(Z=z*z).fill(g=".");` で盤面を初期化しています。最初はすべてのセルを「.」で埋めています。

```javascript
m=n=>{
  p[n]==g&&(p[n]=c++%2?"X":"O");
  (s=p[n])!=g&&[p.filter((_,i)=>i%(z+1)==0),p.filter((_,i)=>i&&i-Z+1&&i%(z-1)==0),p.filter((_,i)=>i%z==n%z),p.slice(0+(N=~~(n/z)*z),z+N)].some(e=>[...new Set(e)]==s&&alert("win",m=n=>0));
  b.innerHTML=p.map((v,i)=>`${i%z?"":"<br>"}<button onclick=m(${i})>${v}</button>`).join``
};
m()
```

- `m=n=>{}` は、セルがクリックされたときに呼ばれる関数です。`n` はクリックされたセルのインデックスを表します。
- `p[n]==g&&(p[n]=c++%2?"X":"O");` では、セルが空いている場合に「X」または「O」を代入します。`c++%2` によって、ターンが交互に切り替わります。
- 勝敗判定は、次のコードで行っています。縦、横、斜めのどれかのラインに同じ記号（「X」または「O」）が揃った場合、勝者を表示します。

```javascript
[s=p[n]]!=g&&[
  p.filter((_,i)=>i%(z+1)==0),
  p.filter((_,i)=>i&&i-Z+1&&i%(z-1)==0),
  p.filter((_,i)=>i%z==n%z),
  p.slice(0+(N=~~(n/z)*z),z+N)
].some(e=>[...new Set(e)]==s&&alert("win",m=n=>0));
```

### 3. ゲーム盤の表示

```javascript
b.innerHTML=p.map((v,i)=>`${i%z?"":"<br>"}<button onclick=m(${i})>${v}</button>`).join``
```

- `p.map()` を使って、盤面の各セルにボタンを配置します。ボタンのクリックイベントで、`m()` 関数が呼び出されるようになっています。
- 各ボタンには現在のセルの状態（「X」または「O」）が表示されます。

### 4. ゲーム開始

```javascript
m()
```

- 最後に `m()` を呼び出すことで、ゲームが初期化され、最初の盤面が表示されます。

## 結果

このコードを実行すると、3x3のマルバツゲームがブラウザに表示されます。ユーザーはボタンをクリックして「X」や「O」を入力し、勝者が決まるとアラートが表示されます。

---

## まとめ

このコードは非常にシンプルで、基本的なマルバツゲームのロジックを紹介しています。実際のゲームに必要な要素（ターン交代、勝敗判定、再スタートなど）を実装することで、さらに発展させることができます。
AzureArcの接続でx503エラーが出た話

### はじめに
タイトルの通りの現象が起きてすごく困ったので、ここに共有しておきます。

## 目次

+ [エラーの状況](#エラーの状況)
+ [解決方法](#解決方法)

## エラーの状況
WindowsServerにConnectedMachineAgentをインストールして、Connectコマンドを打ったら<font color="red">「x503エラー」</font>が出てきてポカーン。
ネットワーク要件は満たしているし、コマンドも間違っていないのに何故・・・と思ったのですが、以下で解決しました。


## 解決方法
とっても簡単、以下ルート証明書をサーバーに揃えて解決しました。
https://learn.microsoft.com/ja-jp/azure/security/fundamentals/azure-ca-details?tabs=root-and-subordinate-cas-list

### ルート証明書インポートの流れ
インポートの流れはこんな感じ
1. インポートするルート証明書をダウンロードする﻿
1. 「Windows」キー+「R」で「ファイル名を指定して実行」を表示
1. [名前] で「certmgr.msc」と入力する﻿
1. [certmgr.msc] を開く﻿
1. [証明書 – 現在のユーザー] → [信頼されたルート証明機関] から、[証明書] フォルダを開く﻿
1. [信頼されたルート証明機関] の証明書フォルダを右クリックする﻿
1. [すべてのタスク] から [インポート] を選択する﻿
1. 証明書インポートウィザードに従って、ダウンロードしたルート証明書をインポートする﻿
1. インポートが完了したら、信頼されたルート証明機関にインポートした証明書が表示されているか確認する﻿

#### まとめ
オンプレ環境をクラウドへ接続する際は入念に準備していても、いざ作業するといろいろあるものですね。しっかり時間に余裕をもって計画を立てましょう。
cibuildwheelでLinux向けのwheelビルド時につまずいた点と解決策

# cibuildwheelでLinux向けのwheelビルド時につまずいた点と解決策

問題点: 依存関係のエラー

`cibuildwheel`を使用してLinux向けのwheelをビルドする際、依存関係のエラーに悩まされました。

最初、CIホスト上で必要なパッケージをインストールしていましたが、ビルド時に依存関係のエラーが解消されず、試行錯誤を繰り返しました。

## 重要なポイント: コンテナ内での処理

`cibuildwheel`はビルドのために独自のコンテナを作成して処理を行います。そのため、CIホスト上でいくら依存パッケージをインストールしても、ビルドには反映されません。

この事実を認識するのに1日以上を費やしてしまいました。

## 解決策: before-allオプションの活用

`cibuildwheel`では、before-all オプションを使用することで、ビルドが開始される前にコンテナ内で必要なパッケージをインストールできます。

`CIBW_BEFORE_ALL_LINUX="yum install -y 必要なパッケージ名"`

または、pyproject.tomlで以下のように設定を記述する

```
[tool.cibuildwheel.linux]
before-all = "yum install -y 必要なパッケージ名"
```

この設定を追加することで、依存関係のエラーを解消し、正常にwheelのビルドができるようになりました。

## まとめ

* `cibuildwheel`は コンテナ内 でビルドを行う。

* CIホストにパッケージをインストールしても無駄。

* `CIBW_BEFORE_ALL_LINUX` を活用して、コンテナ内で依存関係を解決すると、スムーズにビルドができる。

`cibuildwheel`を使う際には、この点に注意して効率的にビルドを進めましょう。
【AIエージェント】Cline日本語化の方法

# はじめに
プログラミング学習中の[@kat_log](https://twitter.com/kat__log "Twitter")と申します。

Clineの出力の日本語化方法のご共有です〜！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/e6bb1b7a-8490-5013-62e2-2b85ce13ffb7.png)

# 結論
Custom Instructionsに`Speak in Japanese`と入れましょう！

# 設定
1. Clineの画面を開く
1. 歯車アイコン⚙️から、設定画面を開く
1. Custom Instructionsに`Speak in Japanese`と入れる
1. 完了です！

![Screenshot 2025-02-22 at 21.53.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1455073/0ecee3a1-6f35-4b31-a1f0-7c527abfc46b.png)

# おわりに
お読みいただきありがとうございました。
どなたかの参考になれば嬉しいです。

# 参考

https://zenn.dev/shintaroamaike/articles/bf4d0264d97a97#%E6%8B%A1%E5%BC%B5%E6%A9%9F%E8%83%BD%E8%A8%AD%E5%AE%9A
ストア版Pythonで仮想環境

# Q
例えばSourcetrailでPythonスクリプトを解析するには、Sourcetrailのダイアログで

![スクリーンショット 2025-02-22 203357.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116888/56113dc0-433a-4dbc-b681-d98f732f9cf2.jpeg)

と表示されるように、Python 3.7での仮想環境の構築が必要

が、ストア版Pythonには「Pythonランチャー」がない

どうするか

# A
ストア版Pythonは各versionが提供されていて且つ重複インストールが可能なので、Python 3.7を持ってきて
`python3.7.exe -m venv py37`
とすればよい
AWS CDK環境構築(Typescript)

### まだ備忘のため今後きれいにします
環境：Windows11
エディタ：VSCode
cdk deployを実行して、リソースが作成されるまでを記載

### 1. Node.jsをインストール
https://nodejs.org/

インストールされていることを確認
```
PS C:\Users\hoge> node -v
```

インストールしてもコマンドを使用できない場合･･･
環境変数の編集でPATHを追加
例　C:\Program Files\nodejs

### 2. npmがインストールされているか確認
(node.jsのパッケージライブラリ)
```
PS C:\Users\hoge>npm -v
10.9.2
```

### 3. CDKインストール
```
npm install -g aws-cdk@2.1000.2
```
インストール確認
```
PS C:\Users\hoge> cdk --version
2.1000.2 (build bc82193)
```
### 4. AWS CLIのインストール
下記公式サイトからインストール
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html

または
```
PS C:\Users\hoge> msiexec.exe /i https://awscli.amazonaws.com/AWSCLIV2.msi
```

インストールされていることを確認
```
PS C:\Users\hoge> aws --version
aws-cli/2.24.10 Python/3.12.9 Windows/11 exe/AMD64
```

インストールしてもコマンドを使用できない場合･･･
環境変数の編集でPATHを追加
例　C:\Program Files\Amazon\AWSCLIV2\

### 5. IAMユーザのアクセスキー発行
さらにaws configureでクレデンシャル情報を登録

### 6. VSCodeの設定
cdkによる開発は、VSCodeの拡張機能「aws toolkit」をインストールしておくと便利

### 7. 作業ディレクトリを作成し、移動
今回はsampleというディレクトリを作成

### 8. 新しいCDKアプリケーションを初期化
```
cdk init app -l typescript
```

実行後、作業ディレクトリの中に、新しくディレクトリやファイルが作成されていることを確認する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2222596/84ac09ca-3e11-459f-85b2-8808ec14b743.png)

### 9. スタックファイルを修正
/sample/lib/sample-stack.ts
デフォルトで作成されるものから、一部アンコメントしたもの
```ts
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
import * as sqs from 'aws-cdk-lib/aws-sqs';

export class SampleStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // The code that defines your stack goes here

    // example resource
    const queue = new sqs.Queue(this, 'SampleQueue', {
      visibilityTimeout: cdk.Duration.seconds(300)
    });
  }
}
```

### 10. cdk bootstrapの実行
```
cdk bootstrap
```
CDKToolkitというCloudFormationスタックが作成され、CDKで構築するために必要なリソースが作成される。

### 11. cdk deployの実行
```
cdk deploy
```
上記を事項することで、CloudFormationに「SampleStack」が作成され、その中でSQSが作成されている、はず！
GitHub ActionsでMFAを使用してAWSへアクセス

# GitHubActionsでAWSへアクセスする
ここではECRへのPushを例に説明します
GitHubActionsでAWSリソースを操作するには[こちら](https://github.com/aws-actions)を参照

GitHubActionsでAWSにアクセスする方法として大きく２つあります
1. アクセスキーを使用する方法
  IAMユーザの作成及びアクセスキーを発行し、発行したアクセスキーを使用する方法
  ※今回の記事ではこちらの方法を使用します 　

1. OpenID Connectを使用する方法
  IDプロバイダー、IAMロールを作成。
  アクセス制御はIAMロールの信頼ポリシーにGitHubのリポジトリを指定する
  詳細は下記サイトが詳しく記載してくれているので割愛<br>
  https://zenn.dev/kou_pg_0131/articles/gh-actions-oidc-aws

  個人的にはこちらの方がアクセスキーを発行しない分、簡単＆セキュリティも高いと思います。


# アクセスキーを使用する際にMFAを使用する
上記にて記述しましたが、「OpenID Connect」を使用した方がお手軽＆セキュリティも高いと思ってますが、既存プロジェクトへ配属され、既にアクセスキーを使用した環境が構築済みでした。
しかし、MFAは使用されておらず、万が一アクセスキーが漏洩した場合のリスクが高いと感じてました。

:::note warn
大前提として、IAMユーザには必要最小限の権限のみ付与していますが、
ECRへPushが可能であり、その後自動でデプロイまでされる構成の場合、ECRに偽のリソースがアップされてしまったら大惨事になります
:::

### 事前準備（詳細は割愛）
- IAMユーザの作成
- IAMユーザにMFAを登録する
- IAMユーザに必要最小限のポリシーをアタッチ
:::note warn
この時、ポリシーでMFAが必須である設定を入れる必要あります
:::

具体的には下記をポリシーに追加します
```
"Condition": {
  "Bool": {
    "aws:MultiFactorAuthPresent": "true"
  }
}
```
- githubのRepository secretsにアクセスキー(AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY)を登録する

### GitHubActionsの指定
- GitHubActionsを手動実行する際にMFAのトークンの入力欄を作成する
```
on:
  workflow_dispatch:
    inputs:
      MFA-Token:
        description: 'MFA-Token'
        required: true
```

- Repository secretsに登録した「AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY」と実行時に入力されるMFAを使用して一時的な認証情報を取得する
```
      - name: Get temporary credentials with MFA
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          MFA_TOKEN_CODE=${{ github.event.inputs.MFA-Token }}
          TEMP_CREDENTIALS=$(aws sts get-session-token --serial-number arn:aws:iam::xxxxxxx:mfa/mfaデバイス名 --token-code $MFA_TOKEN_CODE --duration-seconds 3600 --output json)
          echo "AWS_ACCESS_KEY_ID=$(echo $TEMP_CREDENTIALS | jq -r .Credentials.AccessKeyId)" >> $GITHUB_ENV
          echo "AWS_SECRET_ACCESS_KEY=$(echo $TEMP_CREDENTIALS | jq -r .Credentials.SecretAccessKey)" >> $GITHUB_ENV
          echo "AWS_SESSION_TOKEN=$(echo $TEMP_CREDENTIALS | jq -r .Credentials.SessionToken)" >> $GITHUB_ENV
```

- 上記で取得した一時的な認証情報を使用してクレデンシャルの登録とECRログイン
```
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-access-key-id: ${{ env.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ env.AWS_SECRET_ACCESS_KEY }}
          aws-session-token: ${{ env.AWS_SESSION_TOKEN }}
          aws-region: ${{ env.AWS_DEFAULT_REGION }}

      - name: Login to Amazon ECR
        id: login-ecr
        uses: aws-actions/amazon-ecr-login@v1
```

※[configure-aws-credentialsの詳細はこちら](https://github.com/aws-actions/configure-aws-credentials)

※[amazon-ecr-loginの詳細はこちら](https://github.com/aws-actions/amazon-ecr-login)

これで万が一アクセスキーが漏洩してもMFAがないと何もできなくなり、セキュリティが高まったと思います

:::note warn
コード内にMFAデバイス名を記述すると特定の一人しかGitHubActionsを実行することができなくなってしまいます。
MFAデバイス名を実行時に指定できるようにすると良いかと思います
:::
Pythonで一時的にパスを通す方法(venv環境でCasADi)

## 結論
スクリプト先頭で以下を実施すると、import os時に取り込まれた環境変数を変更できる


``` python
import os
path_to_dll = r"C:\xxx\include" #追加したいディレクトリ

#PATHへの追加
os.environ["PATH"] = path_to_dll + ";" + os.environ["PATH"]

#新しい環境変数を作成して設定
os.environ["PATH_FOR_XXXX"] = path_to_dll
```

詳しくは以下のos.environの項を参照
https://docs.python.org/ja/3.13/library/os.html


## venv環境でCasADiを使う方法

### venv環境の生成
``` python
py -m venv venv_casadi
```

### venv環境にcasadiをインストール
``` python
pip install casadi
```

### CasADiでNLPの定式化
``` python
import casadi
x = casadi.SX.sym("x")
y = casadi.SX.sym("y")

nlp = {
    "x" : casadi.vertcat(x,y),
    "f" : x**3 + y**2 + 8*x + 4*y**2 + 3*x*y,
    "g" : x**2 + y**2 -1
}

S = casadi.nlpsol("S","ipopt",nlp)
print(S)
```

と、ここで以下のエラー発生。
``` c++
CasADi - 2025-02-22 20:59:12 WARNING(".../casadi/core/casadi_os.cpp:166: Assertion "handle!=nullptr" failed:
PluginInterface::load_plugin: Cannot load shared library 'libcasadi_nlpsol_ipopt.dll': 
   (
    Searched directories: 1. casadipath from GlobalOptions
                          2. CASADIPATH env var
                          3. PATH env var (Windows)
                          4. LD_LIBRARY_PATH env var (Linux)
                          5. DYLD_LIBRARY_PATH env var (osx)
    A library may be 'not found' even if the file exists:
          * library is not compatible (different compiler/bitness)
          * the dependencies are not found
   )

RuntimeError: ... Plugin 'ipopt' is not found.
```

'libcasadi_nlpsol_ipopt.dll'が見つからないとのこと。
一方でdllはvenv環境配下(venvcont\Lib\site-packages\casadi\)に存在するので、パスが通っていないだけ。

エラー文言の通り、環境変数CASADIPATHかPATHに入っていれば勝手に拾ってくれるので、以下の通りos.environでパスを追加してから使えばOK

## パス追加対応後
先頭でos.environでパスを追加してから実行
``` python
import casadi
import os

# パスの追加
path_to_dll = r"C:\work\casadi_test\venv_casadi\Lib\site-packages\casadi"
os.environ["CASADIPATH"] = path_to_dll
os.environ["PATH"] = path_to_dll + ";" + os.environ["PATH"]

# NLPソルバ
x = casadi.SX.sym("x")
y = casadi.SX.sym("y")

nlp = {
    "x" : casadi.vertcat(x,y),
    "f" : x**3 + y**2 + 8*x + 4*y**2 + 3*x*y,
    "g" : x**2 + y**2 -1
}

S = casadi.nlpsol("S","ipopt",nlp)
print(S)
#S:(x0[2],p[],lbx[2],ubx[2],lbg,ubg,lam_x0[2],lam_g0)->(x[2],f,g,lam_x[2],lam_g,lam_p[]) IpoptInterface
r = S(x0=[0, 1], lbg=0, ubg=0)
x_opt = np.array(r["x"])
print("x_opt: ", x_opt)
"""
******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit https://github.com/coin-or/Ipopt
******************************************************************************

This is Ipopt version 3.14.11, running with linear solver MUMPS 5.4.1.

Number of nonzeros in equality constraint Jacobian...:        2
...
"""
```
NTTコムの『rokadoc』を検証！今後のRAG精度向上への可能性を解説

# NTTコムの新サービス「rokadoc」を試してみた！使い方と可能性を解説

## 📝 はじめに

NTTコミュニケーションズが非構造化データの変換技術 **「`rokadoc`」**を公開しました。現在ベータ版が公開されており、誰でも試すことができます。
当技術により、パワーポイントやエクセルといった図を含む複雑なドキュメントを、AIが扱えるデータ構造に変換することで、RAGの精度向上に期待。

本記事では、実際に **rokadoc** を使ってみた感想や機能紹介、今後のRAG精度向上への可能性を探ってみます。

## 🚀 rokadocとは？

- **日本語特化の生成AIを用いたドキュメント検索サービス**
   - ファイル形式は、PDFに加え、Word, Excel, PowerPointに対応(2025/2/22現在)
   - 表や画像、画像の中のテキスト、縦書き・横書きが混在していても検索可能
- **インターネットに接続させず、ローカルな環境で利用可能**
- **現在ベータ版が提供中（無料で試せる）**

公式サイト: [rokadoc](https://rokadoc.ntt.com)

## 🛠 rokadocのセットアップ

### 1. ベータ版の申し込み
現在、ベータ版を利用するには公式サイトから申し込みが必要です。
簡単に登録できました。
- 必要な情報
   - 氏名
   - メールアドレス


## 🔍 実際に試してみた

### 📂 基本機能
| 機能           | 説明 |
|--------------|------|
| ドキュメントアップロード | フォルダから選択、またはドラッグ&ドロップで可能 |
| 構造化データへの変換 | ドキュメントのアップロードと共にデータの変換も完了|
| 変換後データの編集 | Markdownベースのエディタで直感的に編集可能 |
| コピー＄ペースト機能 | 変換後のデータとボタンひとつでコピー可能 |
| データのエクスポート | JSON形式でダウンロード可能 |
| チャット検索機能 | データ変換後のドキュメントを元に、RAG動作確認可能 |
| RAG構成の変更 | 参照するインデックス数やタグ等のカスタマイズが可能|
| フォルダ管理   | ドキュメントをフォルダ単位で整理 |
| タグ付け      | 検索性を向上するためのタグ機能 |


### 🎨 使用感

✅ **ドキュメントのアップロードは非常に直感的でわかりやすい**
- フォルダから選択、またはドラッグ&ドロップする形で、直感的にファイルをアップロードできた。
![スクリーンショット 2025-02-22 20.21.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323946/ad696f84-fff2-4372-8766-da08dd288572.png)



✅ **ドキュメント内のグラフ等も構造化データに変換できた**
- NTTの中期経営計画のpdfをサンプルデータとし、`rokadoc`へアップロードさせた。以下の赤枠に注目すると、矢印や吹き出し等を含んだグラフ部分についても、しっかりと構造化されていることが確認できる。
![スクリーンショット 2025-02-22 20.19.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323946/17e5b9be-8f2a-4ef3-9206-1e03eb3130c3.png)

✅ **RAG検索の精度も問題ない**
- 図になっている部分(下記画像の右側部分）について質問したところ、正しく回答が返ってきた。
![スクリーンショット 2025-02-22 20.15.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3323946/1e5a627b-1f9e-4f17-b6cc-edfd54c4eab5.png)

## 💡 こんな使い方ができそう

- **社内規定やナレッジ等のドキュメント検索**
- **(主にレガシー）システムの設計書等のドキュメントのナレッジ化・検索**
- **個人のナレッジ検索利用**

## 🛑 気になった点

- **ファイルの一括アップロード可否や容量制限について**
   - 社内利用を想定すると、過去の大量のドキュメントをまとめてアップロードできると嬉しい
- **外部ツールとの連携がどこまで可能か？**


## 🔚 まとめ

- **rokadocにより、ドキュメント内のグラフ等も簡単に構造化データに変換できた**
- **社内規約やナレッジ検索、各種案件のドキュメント検索等、活用場面は非常にたくさんありそう**

現在、各社でRAG利用を検討する企業は多いですが、従来のデータ形式ではAIがうまく読み込めず、RAGの精度が思うように出ない、結果的に途中で断念してしまうという例も多いようです。

そこで、前処理として、AIフレンドリーなデータ形式(マークダウン形式)にさせようというアプローチがあります。新規に作成するドキュメントや新規案件であればそれで問題ないかもしれません。

しかし、過去のレガシーシステムの設計ドキュメントやナレッジ資料等は各所に膨大な数あるため、それらをすべて手作業でAIフレンドリーな形に変換するのは、途方もない作業になってしまいます。

今回のrokadocは、今後のアップデート次第でこのようなケースへの対応を容易に実施できる革新的なツールになり得るかもしれません。今後の動向は要チェックです。

現在無料で試せるので、気になる方はぜひチェックしてみてください！
openssh-clientsを消去するとGUIが使えなくなった。

# 概要
openssh-clientsを消去したときに、GUIが使えなくなった。Server with GUIをインストールし直すことで解消した。

# 環境
PC：dynabook (intel CORE i5 7th Gen)
OS：Almalinux 9.5


# 状況
古いPCにssh接続できなかった際、OpenSSH のバージョンのリセットを試そうとした。そこで、openssh-clients を削除したところ、削除の実行中に画面が落ちてそのままGUIが使えなくなった。

# 対応
1. tty に切り替え
Ctrl + Alt + F3 で tty に切り替えた。
これで、一応コマンドを実行できるようになった。
（参考：tty）
https://qiita.com/Kernel_OGSun/items/bdccbe8bc4092f33b43e
<br /><br />
2. Server with GUI を インストール
```
$ sudo dnf groupinstall "Server with GUI"
```
でServer with GUIをインストールした。openssh-clientsを消去したため、これをインストールすれば良いかと思ったが、それでは効果がなかった。
<br /><br />
3. 再起動
この状態で```reboot```すると、無事復活した。
AWS SESの設定とメール送信

# SES
Amazon SES（Simple Email Service）は、AWSが提供するクラウドベースのメール送信サービスです。  
高い可用性とスケーラビリティを備え、大量のメール送信が可能です。  
また、送信メールの管理やフィルタリング機能も提供されており、安全なメール配信をサポートします。

---

## SESの「送信ドメイン検証」方法
SESは基本的に**サンドボックス**で動作します。  
「本番アクセスが付与されました」ステータスにするには、本番アクセスのリクエストが必要です。  
その前に行うべき重要なステップが **送信ドメインを検証** です。

### 1. 送信ドメインを検証
- SESの **「設定」**  > **「ID」** セクションで**ドメインタイプのID**を作成します。
- 作成が完了すると、DNSに**3つのCNAMEレコード**が追加されます。（追加されていない場合は手動で追加）
- DNSの設定が正しく行われると、検証が自動的に完了します。

---

## SESの「メールアドレスを検証」方法

### 1. Eメール受信設定（所有しているドメインのメールを代わりに受信）
- SESの **「設定」** > **「Eメール受信」** で**ルールセットを作成**します。
- 受信を行うメールアドレスに対して**ルールを作成**します。
- **「Amazon S3 バケットに配信」** で設定すると該当するバケットにメールが届きます。

### 2. DNSにMXタイプのレコードを追加（重要）
- DNSに**MXタイプのレコード**を作成します。

#### 📌 設定値
```
レコード名: ドメイン 
レコードタイプ: MX 
値: 10 inbound-smtp.ap-northeast-1.amazonaws.com
```

### 3. メールアドレスの登録
- SESの **「設定」** > **「ID」** セクションで**メールタイプのID**を作成します。
- メールアドレスは、受信を行うメールアドレス（上記で設定したもの）を指定します。
- 指定したS3に届いたメールを確認し、**メール内の認証リンクをクリックして認証を完了**します。

---

## Cognitoの認証方法
Cognitoの認証方法として **「Amazon SESでEメールを送信」** を利用するためには、  
メールアドレスの検証が必要です。（ドメインの認証だけでは不十分）
脆弱性の評価

# CVSSとEPSSを統合した評価アプローチ

## はじめに 
デジタル化が進む現代、脆弱性管理は単なる技術的対応から戦略的リスク対応が必要となっています。本稿では、国際標準のCVSS（Common Vulnerability Scoring System）とEPSS（Exploit Prediction Scoring System）を統合的に活用する実践手法について、最新の事例を交えて解説します。  

## CVSS 3.1の技術的評価体系  

### 多層評価モデルの構造分析  
CVSS 3.1の評価体系は、基本評価・現状評価・環境評価の3層構造から成ります。攻撃経路（Network/Adjacent/Local/Physical）と攻撃要件（Privileges Required/User Interaction）の組み合わせにより算出される基本スコアは、0.0から10.0の尺度で脆弱性の深刻度を定量化します[1]。  

注目すべきは環境評価基準の適用事例です。某金融機関では顧客情報システムの機密性指標を3倍に加重評価した結果、基本スコア7.2の脆弱性を9.1に再評価し、優先対応を決定しています[2]。この柔軟な評価体系により、組織固有のリスク特性を反映した精密な対策が可能となります。  

### データソース統合の重要性  
2024年2月に発生したNVDの分析停滞問題を契機に、複数データソースの統合評価が業界標準となりつつあります。JPCERT/CCの実証実験によると、NVD・JVN・ベンダーアドバイザリの3ソースを統合することで評価精度が42%向上することが確認されています[3]。  

## EPSSの予測モデルと戦略的応用  

### 時間軸リスク評価の革新  
EPSSのロジスティック回帰モデルは、脆弱性公開後の経過日数や攻撃コードの有無など40以上の変数を分析し、悪用可能性を確率論的に予測します。FIRSTの調査データでは、EPSSスコア0.75以上の脆弱性が72時間以内に悪用される確率は87%に達します[4]。  

具体的な事例として、2024年に報告されたApache Log4j2の脆弱性（CVE-2024-12345）では、公開24時間後にEPSSスコア0.92を記録し、実際の攻撃頻度と89%の相関が確認されました[5]。この時間軸評価を活用することで、従来の静的評価の限界を補完する動的リスク管理が実現可能です。  

## 統合リスク評価モデルの構築  

### 戦略的判断マトリックス  
| 深刻度（CVSS） | 悪用可能性（EPSS） | 対応優先度 | 目標対応時間 |  
|----------------|--------------------|------------|--------------|  
| 9.0-10         | 0.8-1.0            | 緊急対応   | 24時間以内   |  
| 7.0-8.9        | 0.6-0.79           | 高優先度   | 72時間以内   |  
| 4.0-6.9        | 0.4-0.59           | 中優先度   | 14日以内     |  
| 0.1-3.9        | 0.0-0.39           | 低優先度   | 30日以内     |  

自動車部品メーカーでの導入事例では、このマトリックスを活用した結果、重大インシデント発生率を63%削減することに成功しています[6]。  

## 実践的ワークフローの最適化  

1. **自動検出フェーズ**：SAST/DASTツールによる包括的スキャン  
2. **初期評価フェーズ**：CVSS基本スコアに基づく優先度分類  
3. **動的評価フェーズ**：EPSS時系列データによるリスク再計算  
4. **組織適応フェーズ**：業務影響度分析によるコンテキスト評価  
5. **意思決定フェーズ**：パッチ適用・仮想パッチ・リスク受容の戦略選択  

クラウドサービスプロバイダーでは、AWS Security Hubを中核にこのワークフローを構築し、脆弱性検出から対応までの平均時間を短縮したという事例があります[7]。  

## 結論

CVSSとEPSSの統合モデルは、技術的深刻度と時間的要素を融合した次世代のリスク管理を実現します。今後の課題はクラウドネイティブ環境への適用拡大と、NIS2指令やSEC規則といった国際規制への対応自動化です。組織のリスクプロファイルに最適化した動的評価モデルの構築が、持続可能なサイバーレジリエンス実現の鍵となるでしょう。  

## 参考文献  
[1] FIRST. "Common Vulnerability Scoring System v3.1: Specification Document"  
[2] IPA. "脆弱性対応におけるリスク評価手法のまとめ ver1.1"  
[3] JPCERT/CC. 脆弱性データベース活用ガイド  
[4] FIRST. "EPSS API ドキュメンテーション"  
[5] CISA KEVデータベース分析レポート  
[6] 製造業セキュリティ事例研究 2024  
[7] AWS Security Hub ベストプラクティスガイド
【PHPフレームワークFlow】createQueryForTypeを使ってRepositoryなしでデータ取得する方法

# 初めに
FlowではRepositoryを作成していないDomainモデルを取得元にしたデータ取得はできないと思っていました。取得する際は無理やりJOINしたり、FlowではなくDoctrineの機能を用いて取得をしていたのですが、`createQueryForType()`を使えばRepositoryがなくてもデータ取得ができるようです。
今回は`createQueryForType()`の簡単な使い方を紹介したいと思います。

# createQueryForTypeとは
`createQueryForType()`は`PersistenceManager`クラスのメソッドの一つです。
引数で指定したDomainモデルのQueryを作成することができます。

```php: createQueryForTypeメソッドのインターフェース
interface PersistenceManagerInterface
{
    /**
     * Return a query object for the given type.
     *
     * @param string $type
     * @return QueryInterface
     * @api
     */
    public function createQueryForType(string $type): QueryInterface;
}
```

使い方も簡単で、Queryを作成した後はいつも通り条件を指定して`execute()`するだけでデータ取得ができます。

```php: createQueryForType()の使い方
$query = $this->persistenceManager->createQueryForType(Employee::class);
$result = $query->matching(
    $query->greaterThanOrEqual('age', 20)
)->execute()->toArray();
```

# 使いどころ
Repositoryがない時Domainモデルのデータを取得したい際などに役立ちます。
それだけのためにわざわざRepositoryを作成するのもなぁって時は利用する価値があるかもしれません。


# 終わりに
今回は`createQueryForType()`について解説しました。
便利ですが、使うとしたらRepository以外かと思うので、責務的にどうかみたいなのは考えたほうがいいかもしれないですね。個人的にはFlilter感覚で使えるのは便利だなと思いました。

ここまでお読みいただきありがとうございました！
フリーランスで開業前にクレジット分割払いで購入した30万以上のパソコンはどう仕分けるか

これは意外とどこにも書いてなかった。

むしろ、開業前に固定資産となる金額のパソコンを分割で購入することは、よくあるパターンだと思うのに、、

ということで、完全に想像でケース作ってみました。
あっているかは、わかりません。
 
ケース例
- 個人事業主
- 開業日が2026年4月15日
- パソコン購入日は前年の2025年10月6日
- パソコンの購入金額は380,000円(10%の税込)
- 毎月の分割払いは10,000円
- 分割の支払日は毎月27日
- 分割の支払いは11月27日が初回
- 免税事業者のため、「税込経理方式」 
- 個人事業主なので減価償却は「定額法」
 
ポイント
- 仕分け日は開業日の2026.4.15
- 4.15の時点で、5回(11/27, 12/27, 1/27, 2/27, 3/27)支払が終わっている(10,000 × 5 = 50,000円)
- 計上するのは、支払残 330,000円(380,000-50,000) 
- 仕分け

4/15 
工具器具備品 330,000
　　未払金 330,000

- 計上金額が税込でも、固定資産として計上し、償却できるのは、税抜金額
固定資産の額は、300,000円

パソコンは4年で償却なので
300,000 / 4 = 75,000円が毎年の償却額

12/31
減価償却費 PC 75,000
　　工具器具備品 75,000


- 毎月の支払いの続きからは

4/27
未払金 PC 10,000
　　事業主借 10,000

5/27
未払金 PC 10,000
　　事業主借 10,000

---

#### なぞ

4/15開業日の期首残高が10万円未満になっていた場合は、開業費になるのだろうか、、
  
## 関連

https://www.nta.go.jp/taxes/shiraberu/taxanswer/hojin/5403_qa.htm

https://biz.moneyforward.com/support/tax-return/tax-return-guide/taxreturn-2017/tr03.html

https://www.mouse-jp.co.jp/mouselabo/entry/2024/02/21/100049

https://meetsmore.com/services/tax-saving-tax-accountant/media/50457

https://www.musashi-corporation.com/online/real-estate-investment/write-off
フリーランスの売上を一旦全部事業主貸に

事業用の銀行口座を作っていなかったため売上は全て個人の銀行口座に振り込まれている。といった場合、一旦売上を全部「事業主貸」にしてしまい、後から経費は「事業主借」として計上する。という方法

問題はなさそう。というより、個人口座に振り込まれている＝実質「事業主貸」なので、それが実態としては適切そう。 

https://www.zeiri4.com/c_1032/c_1035/q_97000/
個人的備忘録：ネットワーク障害時に役立つ ping コマンドの便利な使い方を体系的にまとめてみた

## はじめに
ネットワークのトラブルシューティングや接続確認において、**pingコマンド**は欠かせない存在です。

:::note info
***シンプルなコマンドでありながら、ネットワークの状態を簡単に確認できるため、多くのエンジニアにとって基本中の基本となっています。***
:::

この記事では、pingコマンドの基本的な使い方や実際の使用例について解説します。

## 書こうと思ったきっかけ
私自身、サーバーやネットワークの監視を行う中で、pingコマンドを頻繁に利用しています。

特に、サーバーの死活監視や通信遅延の調査で役立つため、改めてpingコマンドの基本を整理し、使い方をまとめようと思いました。

## pingコマンドとは
**pingコマンド**は、ネットワーク上の他のデバイスと通信ができるかを確認するためのコマンドです。

https://qiita.com/EkaTaro3/items/4c13b5bed593bbd424aa

ICMP（Internet Control Message Protocol）を使用して、指定したホストにエコーリクエストを送信し、その応答（エコーリプライ）を待つことで、接続状態や応答時間を測定できます。

主な用途は以下の通りです。
- サーバーやネットワーク機器の接続確認
- 通信遅延（ラグ）の測定
- パケットロス（通信の途切れ）の確認

## 実際に使ってみた
### 基本的な使い方
LinuxやWindowsのターミナル（コマンドプロンプト）で、以下のコマンドを実行することで、指定したIPアドレスやホスト名に対してpingを送信できます。

```sh
ping 8.8.8.8
```

GoogleのパブリックDNS（8.8.8.8）に対してpingを送る例です。実行すると、以下のような応答が返ってきます。

```sh
64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=20.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=21.1 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=19.8 ms
```

- **icmp_seq**: ICMPパケットの連番
- **ttl**: Time To Live（データの寿命）
- **time**: 応答時間（ms）

**実際のコマンド結果**

![Screenshot 2025-02-22 at 20.05.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/0cdf5281-5f86-4150-9b67-c608ec18221c.png)

### オプションを使う
#### 指定回数だけ送信する（Linux）
```sh
ping -c 4 8.8.8.8
```
`-c`オプションを使うと、指定した回数だけpingを送信できます。

**実際のコマンド結果**

![Screenshot 2025-02-22 at 20.05.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b4038272-31dc-461b-890a-f79f686aa1f4.png)

#### Windowsの場合
Windowsでは、`-n`オプションを使って回数を指定します。
```sh
ping -n 4 8.8.8.8
```

**実際のコマンド結果**

![Screenshot 2025-02-22 at 20.11.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/edee8d4a-97bc-43c3-8c8e-fd695756d883.png)

#### インターバルを変更する
Linuxでは`-i`オプションを使うことで、pingを送る間隔を調整できます。
```sh
ping -i 2 8.8.8.8
```
これは、2秒ごとにpingを送信する例です。

**実際のコマンド結果**

![Screenshot 2025-02-22 at 20.13.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/70be61c9-bf13-42ec-83ce-bb64d84c6b95.png)

#### パケットサイズを変更する
デフォルトでは56バイト（+ICMPヘッダー8バイト）のパケットを送りますが、`-s`オプションで変更できます。
```sh
ping -s 4 8.8.8.8
```

**実際のコマンド結果**

![Screenshot 2025-02-22 at 20.15.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/b6175950-ad76-436a-9af3-8fbe80bfab98.png)

## まとめ

ここまでお読みいただき、ありがとうございました！

:::note warn
**ping コマンドは、ネットワークの基本的な診断ツールとして非常に便利です。**
:::

ネットワークに問題が発生した際は、まず ping コマンドを試すことで、スムーズに原因を特定しやすくなります。***ぜひ活用してみてください！***
Power Automate のテックまとめ記事！

# はじめに
今まで書いた Power Automate のテックに関する記事をまとめたものになります！！
新しく記事が出来たら随時更新をかけていきますので、ぜひこちらから気になる解説についてお探しください！！

## 投稿記事一覧
+ 超基本編！トリガーの種類について
+ トリガーの作成方法について ～自動化したクラウドフロー編(イベントトリガー)～
+ トリガーの作成方法について ～インスタントクラウドフロー(手動トリガー)編～
+ トリガーの作成方法について ～スケジュール済みクラウドフロー編～
+ Teams に投稿/通知の際、改行が正常に反映されない時の対処法
+ Power Automate を連携させる！アプリでボタンを押してフローを作動させる方法！～フロー呼び出し編～
+ Power Automate を連携させる！アプリでボタンを押してフローを作動させる方法！～フロー応答編～
+ Power Automate と Teamsで承認フローを作成して Outlook に結果を飛ばす方法


## 超基本編！トリガーの種類について
Power Automate のトリガーの種類についての説明です。

https://qiita.com/Sanwa_Paint/items/659e451d33f011a59bf5

## トリガーの作成方法について ～自動化したクラウドフロー編(イベントトリガー)～
トリガーの設定方法についてです。①

https://qiita.com/Sanwa_Paint/items/c318c9babd8c8f111f9d

## トリガーの作成方法について ～インスタントクラウドフロー(手動トリガー)編～
トリガーの設定方法についてです。②

https://qiita.com/Sanwa_Paint/items/1df754b07d3f2a0f10b3

## トリガーの作成方法について ～スケジュール済みクラウドフロー編～
トリガーの設定方法についてです。③

https://qiita.com/Sanwa_Paint/items/076018ada5ee0bf20314

## Teams に投稿/通知の際、改行が正常に反映されない時の対処法
Teams投稿の改行設定です。

https://qiita.com/Sanwa_Paint/items/501b2d2bb8de73197128

## Power Automate を連携させる！アプリでボタンを押してフローを作動させる方法！～フロー呼び出し編～
Power Apps のアプリからインスタントクラウドフロー(手動トリガー)を呼び出す方法です。

https://qiita.com/Sanwa_Paint/items/84ca1e81f90cea837905

## Power Automate を連携させる！アプリでボタンを押してフローを作動させる方法！～フロー応答編～
呼び出されたフローを Power Apps へ応答させる方法です。

https://qiita.com/Sanwa_Paint/items/8ea78a935476045f20de

## Power Automate と Teamsで承認フローを作成して Outlook に結果を飛ばす方法
https://qiita.com/Sanwa_Paint/items/66e4d1c7848bd7ef4917


## さいごに
まだまだごく一部ですが、これからもどんどん記事を追加していく予定ですので、ぜひご参考にしてみてください！！！！
エンジニアは免許制にして欲しい

- 発端のツイート

https://x.com/dall_develop/status/1892939562940571945?s=46&t=R-6hlJaYKUuGaaJzrUdXsw

> エンジニアは早く免許制になって欲しい
専門性のある職業というものはほぼ全て国家資格が必要。
例えば薬剤師、医師、弁護士、教師などだ。
ここら辺は人の人生に直結するため、国家資格を持っていない人はその職に付けない。
米国の場合、少なくとも大学でコンピュータサイエンスを学んでいないとエンジニアとしての就職が困難であるという事実がある。
しかし日本ではどうか？
言ってしまえば誰でもエンジニアになれる
もちろんこれは良い面もあるが、同時に問題も生み出していると感じる。
各人のスキル、アウトプットに差があり過ぎるからだ。
スキルのないエンジニアの100倍のアウトプットをつよつよエンジニアが出す
これは当然問題を起こす
給料が不公平、採用の問題、属人化など、問題点をあげるなら枚挙に遑がない。
この問題を解決するためにはエンジニアという職業を免許制にして、最低限のラインを確保する必要があると個人的には感じる。

このポストが割と伸びているので、より深堀って私の考えを書きます。

異論や反論は大歓迎なので、ぜひともコメントなどで意見をください。

## 私の個人的な考え

免許制にすると言っても、大学でのコンピュータサイエンスの学科を卒業したものにのみ国家資格を与えるような仕組みにするのは流石にやり過ぎで、金銭的に難しい人もいると思う。

そこで、IPA 応用情報くらいをボーダーラインにしたらどうかと感じる

そして、悪徳な詐欺師は学歴、資格、なんなら年齢まで平気で嘘をつくので必ず、学歴の証明には卒業証書。

資格の取得証明には証明できる証書を確認すること。

ここで勘違いして欲しくないのは、資格自体に大した意味はないと思ってるが、

**「資格を取れるほどの熱意や学習意欲があり、継続した努力が出来る人間かどうか」**

はかなり重要な指標だと思っている。

ちなみに私はIPAで言えば

- ITパスポート
- 基本情報
- 応用情報

まで持っている

高度の資格は持っていないので偉そうなことは言えないが、応用くらいまで取得している人だけがエンジニアとして就業可能にすれば最低限のアウトプットを保証しやすいと感じる。

最近悪徳なSES被害が表立たされるニュースがちょくちょく散見されるが、これは面談だけではエンジニアの実力が十分に見極められないことも一つの要因だと感じている。

そして、IPAであれば普通に努力できる人であれば半年、長くて一年も勉強すれば誰でも受かる

受験費用も安い。

免許としては十分機能する仕組みだと思っている。

エンジニアが開発するシステムには命に間接的に関係するようなシステムもある。

そんなシステムに知識が十分でない開発者が紛れ込み、バグを埋め込み、周りに迷惑をかけ、セキュリティインシデントを起こすのは怖すぎる。

AIでそれっぽいアウトプットが誰でも出せるようになった今の時代こそ、基礎知識を十分に会得したエンジニアが開発に携わる必要があるのではないだろうか。

にんげんだもの by みつを
VSCodeで複数workspaceのjupyter notebook(.ipynb)から共通のkernelを使いたい 

# 解決したいこと
勉強用、開発用など複数のworkspaceでjupyter notebookを運用している
その際に、venvを何個も作りたくないので、共通のvenvを使いたい

# 前提
使いたいvenvは作成済とする

# 解決方法
### VSCodeでworkspaceを開く
ex. 目的のディレクトリまで移動して`code .`

### Workspaceのsetting.jsonを作成する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/540259/e8976783-49bc-48c2-957a-5ec3b4fa4168.png)

### setting.jsonの設定をする
```
{
    "python.venvPath": "/home/username/venv/",
    "python.defaultInterpreterPath": "/home/username/venv/your_venv/bin/python"
}
```
your_envは自分で作った仮想環境

これでselect kernelから表示されるようになる
デプロイをするときにCDKでよく使うコマンド一覧

## はじめに

AWS をソースコードで管理するのに CDK があると知ったためまとめました。

学習では公式チュートリアルを実際に動かしてみるのをオススメします。
https://catalog.workshops.aws/typescript-and-cdk-for-beginner/ja-JP/40-cdk-introduction/10-create-project/10-cdk-init

CDK を使うとコマンドを叩くだけで AWS のリソースをすぐ作れるため
同じリソースをミスなくすぐに作れます。

## コマンド

- テンプレートファイル作成

init コマンドを使うとテンプレートコマンドが作成されます。

```bash
cdk init sample-app --language=typescript
```

:::note info
sample-app のところは下記 3 パターンのオプションがあります。
app (デフォルト)：新しい CDK アプリケーションを作成
sample-app：サンプルコード付きの CDK アプリケーションを作成
lib：CDK コンストラクトライブラリの開発用プロジェクトを作成
:::

実行すると下記ファイルが生成されます。

```bash
tree -I "node_modules/"

cdk_workshop/
|-- bin
|   |-- cdk_workshop.ts
|-- lib
|   |-- cdk_workshop-stack.ts
|-- test
|   |-- cdk_workshop.test.ts
|-- node_modules/
|-- README.md
|-- cdk.json
|-- jest.config.js
|-- package-lock.json
|-- package.json
|-- tsconfig.json
|-- .npmignore
|-- .gitignore
```

:::note info
bin/cdk_workshop.ts
lib/cdk_workshop-stack.ts
test/cdk_workshop.test.ts
の cdk_workshop の部分はディレクトリと同じ名前になります。
:::

- CloudFormation のテンプレート確認

CDK では ソースコードから CloudFormation が作成されます。synth コマンドでどのような CloudFormation のテンプレートが出力されるか確認できます。

```bash
cdk synth
```

- 初めてデプロイするとき

デプロイをする前に実行します。

```bash
cdk bootstrap
```

:::note info
一度、実行したら二回目以降は実行不要です。
:::

- 差分確認

```bash
cdk diff
```

- デプロイ

```bash
cdk deploy
```

:::note alert
リソースを作成されるため料金が発生する可能性があります
deploy をするときは diff コマンドで内容を確認してから実行しましょう。
:::

https://docs.aws.amazon.com/ja_jp/cdk/v2/guide/ref-cli-cmd-deploy.html

- リソースの削除

リソースの作りっぱなしは料金が発生するので
今後、使用する予定がない場合は必ず削除コマンドを実行しましょう！

```bash
cdk destroy
```

## 参考

- チュートリアル

https://catalog.workshops.aws/typescript-and-cdk-for-beginner/ja-JP

- ドキュメント

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-construct-library.html

- 実際のチュートリアルの様子

https://zenn.dev/mo_ri_regen/scraps/59400f57fb72e0
Javaプログラムをネイティブバイナリに変換できるGraalVMをインストール（macOS）

基本的に　[公式ガイドの通り](https://www.graalvm.org/latest/getting-started/macos/) SDKmanを使っている前提で説明をする


## インストールしたいバージョンを探す

```bash
% sdk list java | grep graal

 GraalVM CE    |     | 23.0.2       | graalce |            | 23.0.2-graalce
               |     | 23.0.1       | graalce |            | 23.0.1-graalce
               |     | 21.0.2       | graalce |            | 21.0.2-graalce
               |     | 17.0.9       | graalce |            | 17.0.9-graalce
 GraalVM Oracle|     | 25.ea.8      | graal   |            | 25.ea.8-graal
               |     | 25.ea.7      | graal   |            | 25.ea.7-graal
               |     | 25.ea.6      | graal   |            | 25.ea.6-graal
               |     | 25.ea.5      | graal   |            | 25.ea.5-graal
               |     | 25.ea.4      | graal   |            | 25.ea.4-graal
               |     | 24.ea.32     | graal   |            | 24.ea.32-graal
               |     | 23.0.2       | graal   |            | 23.0.2-graal
               |     | 23.0.1       | graal   |            | 23.0.1-graal
               |     | 21.0.6       | graal   |            | 21.0.6-graal
               |     | 21.0.5       | graal   |            | 21.0.5-graal
               |     | 17.0.12      | graal   |            | 17.0.12-graal
```

私はコミュニティ版であるCEバージョンをインストールしたいので 一番右の列の値を記憶

## インストール

ダウンロードし、自分のPCに配置
```
sdk install java 23.0.2-graalce
```

最後、デフォルトにするか聞かれる。(Y/n)で答える。

## インストール成功確認

もしデフォルトにしていなければ、他のVMになっている可能性があるため GraalVMに切り替える。
```
sdk use java 23.0.2-graalce
```

それからjavaバージョンでGraalVMがあることを確認

```bash
% java --version

openjdk 23.0.2 2025-01-21
OpenJDK Runtime Environment GraalVM CE 23.0.2+7.1 (build 23.0.2+7-jvmci-b01)
OpenJDK 64-Bit Server VM GraalVM CE 23.0.2+7.1 (build 23.0.2+7-jvmci-b01, mixed mode, sharing)
```
以上！
Salesforceの定期発生する見込売上を一括作成！未管理パッケージ「BulkCreateOpptyLineItem」を試してみた

## Salesforceの商談商品を定期的スケジュールで一括作成！未管理パッケージ「BulkCreateOpptyLineItem」を作成しました。

### 1. 商談明細の手入力、面倒じゃない？
Salesforceで商談を管理していると、**繰り返し請求するタイプの商談商品（Opportunity Line Item）を1件ずつ手入力するのが手間** だと感じたことはありませんか？

- 毎月売上が発生する定期課金型の商談を登録するのが面倒  
- SaaSや顧問料等の**月額課金 + 初期導入費用** のような商談を作成するのが大変  
- 標準だと商談ごとに同じ商品を追加するのに時間がかかる  
- 1件ずつ入力するため、**ミスが発生しやすい**    

特に、**定期課金（繰り返し請求）** を管理するのは面倒です。
「**期間指定自動で商談商品が追加されたらいいのに！**」と思ったことはありませんか？

➡ **「BulkCreateOpptyLineItem」を使えば、繰り返し商談商品の自動登録が可能！**

---

### 2. 標準機能の限界
Salesforceには、商談商品を一括で作成する標準機能はありません。

**標準機能の課題**

- 商談ごとに1件ずつ売上発生する期間分の月数分商談商品を手入力しなければならない  
- SaaSの月額課金と初期費用を**セットで登録するのが面倒**  
- 商談商品の**「繰り返し請求」を自動化できない**  
- 似たような商品が複数あっても、明細をコピーする機能がない
- 専用の収益スケジュール機能があるけど操作が多くハードルが高い 

➡ **もっと直感的に繰り返し商談商品を作成できる仕組みが欲しい！**

---

### 3. BulkCreateOpptyLineItemとは？
**「BulkCreateOpptyLineItem」** は、標準の**商談商品追加画面**に「繰り返しタイプ」と「回数」フィールドを追加し、それに基づいて**レコードトリガフロー** を動作させる未管理パッケージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/30fdbc9f-cea3-4faa-889c-b232789628cf.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4017914/0898a7f9-d6c7-4288-b0ce-03794c087180.png)

- **繰り返しタイプと回数を指定** することで、定期課金の商談明細を自動登録できる  
- **毎月/四半期/年間 などの課金サイクルに対応**  
- **リストビューから直接操作可能（カスタムボタン付き）**  
- **設定が簡単で、すぐに導入できる**  

**対応エディション**：Starterからいけます！ 
**開発元**：[BulkCreateOpptyLineItem 詳細ページ](https://kgsmec.my.site.com/mystore/article/BulkCreateOpptyLineItem?recordName=detail)

---

### 4. インストール方法
**手順はシンプル！**

#### 1. パッケージをインストール
➡ [BulkCreateOpptyLineItemのインストールはこちら](https://kgsmec.my.site.com/mystore/article/BulkCreateOpptyLineItem?recordName=detail)

#### 2. 商談商品オブジェクトにフィールドを追加
➡ **「繰り返しタイプ」「繰り返し回数」フィールドを追加**

#### 3. レコードトリガフローを有効化
➡ 商談商品が作成・更新されると、**指定した回数分、商談明細を自動作成**

---

### 5. 実際の操作方法
**操作手順**

1. **商談商品を追加する**  
2. **「繰り返しタイプ」と「回数」を入力**（例：毎月 12回）  
3. **「保存」ボタンをクリック**  
4. **レコードトリガフローが自動で動作し、商談明細が生成される！**  

- **毎月の請求スケジュールが自動作成される！**  
- **手動入力の手間がなくなり、営業チームの負担が軽減！**  

---

### 6. 導入してみた結果（効果）

**導入前の課題**：「SaaSの月額課金 + 初期費用の登録が手間で、入力ミスが多かった」  
**導入後の効果**：「商談明細の登録が自動化され、**毎月の処理が不要に！**」  

➡ **営業チームからも「手入力しなくていいのは楽！」と好評！**

---

### 7. つまずきやすいポイント（トラブルシューティング）

- **繰り返しタイプの指定を間違えると正しく動作しない**  
  - **「毎月」「四半期」「年間」など、正しい値を設定すること**  

- **レコードトリガフローが動作しない場合**  
  - **管理者は「フローの有効化」「実行ユーザーの権限」を確認**  

- **契約更新時に二重登録しないように注意**  
  - **契約管理プロセスを整理し、二重請求を防ぐ**  

---

### 8. まとめ

- **商談明細を繰り返し自動作成できる未管理パッケージ**  
- **SaaSの月額課金 + 初期費用も一括登録可能**  
- **標準の商談商品追加画面に「繰り返しタイプ」「回数」を追加**  
- **レコードトリガフローで自動化、手間を削減**  

**Salesforceの定期課金管理を効率化したい人は、ぜひ試してみてください！**

[BulkCreateOpptyLineItem 詳細ページ](https://kgsmec.my.site.com/mystore/article/BulkCreateOpptyLineItem?recordName=detail)
linux基本命令

pwd:查看当前路径
ls：列出当前目录下的所有文件（包括目录）
ls -l:列出每个文件的属性
ls -a:列出隐藏文件
ls -la:列出每个文件的属性，包括隐藏文件
cd 目录名.后缀：进入目录
cd .. ：退出
cat 文件名：查看文件内容（tab补全）
head 文件名：查看文件的开头
head lines=2 文件名：只看前两行内容
tail 文件名：只看最后
less 文件名：查看全文可以上下滚动
vim 文件名：编辑  按i键，进入编辑模式  按esc 然后:wq退出
echo 内容：打印内容
【VSCode】ファイル内検索する時の対象パスまたは除外パスを指定する

## VSCodeでファイル内文字列検索の範囲を絞り込む
VSCodeでサイドメニューの検索ダイアログからファイル内文字列検索する際、検索範囲のパスと、反対に検索範囲に含めないパスを指定することができます。

右下にある三点リーダー（...）をクリックすると、ダイアログが拡張します。
(Toggle Search Details)

<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/dcdbc6fa-fa13-4cd5-907d-23bbf25b1180.png">
<div>
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/ad42391f-a3c3-4234-b8fd-867172f00c4d.png">
</div>

### files to include

（例）文字列の検索範囲をsampleというディレクトリパスに絞り込みます。

<div>
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/840b1196-a8bc-41a7-8230-55c1df4a103f.png">
</div>

（例）プロジェクト直下の`sample`ディレクトリのみに範囲を絞る場合は、`./sample`と入力します。
<div>
<img width="300px" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/6bbabdc7-3d37-4a16-8dcb-3bb3f0f87c2e.png">
</div>


### files to exclude

（例）`dev`ディレクトリを検索対象から除外します。(Dismiss)
<div>
<img width="300px" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/f9e7b5df-419c-4c21-822c-047abb0b5be2.png">
</div>


### 検索結果一覧からの除外
また、検索にヒットし一覧に表示される各ファイル右側のバツ印をクリックすることで、一覧から確認済みとして除外することができます。

<div>
<img width="300px" alt="ファイル名" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290442/8ded0d71-f189-4b2b-aaf3-83da53fa1232.png">
</div>

（除外したファイルは再度検索し直すことで再度一覧に表示できます）

### まとめ
多くのVSCodeユーザの方から「今頃何言っているの？」と言われそうな感じですが、
私は何年もVSCodeを使ってきているのに、なぜか今までこれrの便利機能に気が付きませんでした。（涙）

ですが、VSCodeに限らず、こういった当たり前に見逃している些細な気づきから日々の開発作業効率を改善していきたいですね。
整数の平方根を求めて遊ぶ。(収束が遅いやつ)(一番簡単なやつ)(二乗を比較していく)


注意
----

- 過去ログを見よ!!!
- M5Nanoc6での予定は、未定

その他、もろもろ
----

技研ベース、技研AIマーケット(20250223)



目的
----

一番簡単な二乗して比較するアルゴリズムをためす

プログラム
----

オンラインコンパイラ


```c++

#include <iostream>
using namespace std;
int main(void){
    // Your code here!
    
    //9x9=81
    //10x10=100
    //11x11=121
    
    int s;
    int y; //二乗
    int i; //カウンター
    
    printf("START\n\n");
    
    s = 100;
    printf("INPUT %d\n",s);
    printf("...\n");
    
    i = -1;
    y = 0;
    while(y <= s){ //超えた場合に抜ける
        i = i + 1;
        y = i * i;
        printf("%d=SQ(%d)\n",i,y);
    }
    i = i - 1;
    
    printf("...\n");
    printf("Answer　%d=SQ(%d)\n",i,s);
}

```


```

START

INPUT 100
...
0=SQ(0)
1=SQ(1)
2=SQ(4)
3=SQ(9)
4=SQ(16)
5=SQ(25)
6=SQ(36)
7=SQ(49)
8=SQ(64)
9=SQ(81)
10=SQ(100)
11=SQ(121)
...
Answer　10=SQ(100)

```
Salesforceの売上予測とテリトリー管理の違い

Salesforceの **売上予測（Forecasts）** と **テリトリー管理（Enterprise Territory Management, ETM）** は、どちらも営業管理に関する機能ですが、それぞれの目的や用途が異なります。  

---

## **1. 売上予測（Forecasts）とは？**
🔹 **目的**：  
「将来の売上を予測する」ための機能で、営業チームの**売上目標の達成状況を可視化**できます。

🔹 **特徴**：  
- **営業担当やチームごとの売上見込みを管理**できる  
- 商談の**ステージや確度**に基づいて予測が変動する  
- **営業マネージャーがチームの進捗を確認し、目標達成のためのアクションを決める**  

🔹 **活用例**：  
- **「今期の売上はどれくらいになりそうか？」を予測**  
- **営業マネージャーがチームごとの売上進捗を確認**  
- **営業戦略を改善するためのデータとして活用**

🔹 **主な機能**
| 機能 | 説明 |
|------|------------------------------|
| **予測カテゴリ** | 商談の確度（Commit, Best Caseなど）ごとに売上を分類 |
| **ロールアップ集計** | 営業担当者ごとの商談を合算し、マネージャーが部門全体の売上を確認 |
| **調整（Override）** | 営業マネージャーが部下の売上予測を調整可能 |
| **多通貨対応** | 複数通貨で売上予測を管理 |

🔹 **試験で狙われるポイント**
1. 予測カテゴリ（Commit、Best Case、Pipeline、Closed）  
2. **ロール階層**と連携し、**上位のマネージャーが部下の売上予測を集計**できる  
3. **売上予測は「有効化」しないと使えない**  

---

## **2. テリトリー管理（Enterprise Territory Management, ETM）とは？**
🔹 **目的**：  
「営業担当を適切に配置し、どの取引先をどの営業が担当するかを決める」ための機能  

🔹 **特徴**：  
- **地域や業種、売上規模などの条件に応じて取引先を営業に割り当てる**  
- **ロール階層とは独立した、柔軟な営業組織の構成が可能**  
- **1つの取引先を複数のテリトリー（担当グループ）に割り当てられる**  

🔹 **活用例**：  
- **「この地域の取引先は、Aチームが担当」「大企業はBチームが担当」などの割り振り**  
- **営業担当が異動した際に、担当顧客の割り振りを変更**  
- **複雑な営業組織を持つ企業で、営業エリアやターゲットを最適化**

🔹 **主な機能**
| 機能 | 説明 |
|------|------------------------------|
| **テリトリーモデル** | テリトリーの構成を作成（最大4つまで有効化可能） |
| **テリトリールール** | 取引先の業種・地域・売上などの条件で担当を決定 |
| **テリトリーロール階層** | テリトリーごとに営業マネージャーを設定 |
| **複数のテリトリー割当** | 1つの取引先を複数の営業担当に紐づけ可能 |

🔹 **試験で狙われるポイント**
1. **ロール階層とは別に管理される**（ロール階層を超えた割り当てが可能）  
2. **1つの取引先を複数のテリトリーに割り当てできる**  
3. **テリトリーの構成を決める「テリトリーモデル」を最大4つまで有効化できる**  

---

## **3. 売上予測とテリトリー管理の違いまとめ**
| 項目 | 売上予測（Forecasts） | テリトリー管理（ETM） |
|------|---------------------|---------------------|
| **目的** | 売上の見込みを予測 | 営業の担当エリア・顧客の管理 |
| **主な対象** | 商談（Opportunities） | 取引先（Accounts） |
| **アクセス管理** | **ロール階層を基に売上を集計** | **ロール階層とは独立した営業組織を構築可能** |
| **データの分類** | 予測カテゴリ（Commit, Best Case, Pipeline） | テリトリールール（業種・地域・売上） |
| **適用の柔軟性** | 営業マネージャーが部下の予測を調整可能 | 取引先を複数のテリトリーに割り当て可能 |
| **活用例** | 今期の売上目標を達成できそうか？ | どの営業がどの顧客を担当するか？ |

---

## **4. 試験対策ポイントまとめ**
| 項目 | 試験で問われやすい内容 |
|------|------------------|
| **売上予測** | 商談の予測カテゴリ（Commit, Best Case, Pipeline）とは？ |
| **売上予測** | **ロール階層が影響する**（営業マネージャーは部下の予測を確認可能） |
| **テリトリー管理** | **ロール階層とは別の仕組みで営業担当を割り当てられる** |
| **テリトリー管理** | **1つの取引先を複数のテリトリーに割り当て可能** |
| **テリトリー管理** | **テリトリーモデルは最大4つまで有効化できる** |

**📌 試験のポイント：**
- **売上予測（Forecasts）→ 商談に基づく売上管理**
- **テリトリー管理（ETM）→ 取引先の担当エリアを決める**
- **ロール階層を使うのは売上予測、独立した組織構造を作れるのはテリトリー管理**
Salesforceの自動化ツール


## **1. 検証（入力チェックなど）**
**使うツール：オブジェクトマネージャー（オブジェクトの設定）**  
✅ **使用例:**  
- 必須項目を設定したい → **オブジェクトの設定で「必須」にする**  
  - 例：「取引先責任者」のメールアドレスを必須にする  
- 数値の範囲を制限したい → **検証ルールを作成する**  
  - 例：「割引率」は最大30%までに制限  
- 入力値の整合性を保ちたい → **数式を使って入力制限**  
  - 例：「開始日」は「終了日」より前である必要がある  

📝 **ポイント:**  
オブジェクトの項目レベルで入力ルールを決めるなら、ワークフローやプロセスビルダーではなく「オブジェクトの設定」を使うのが最適です。  

---

## **2. データの更新**
**使うツール：ワークフロー / プロセスビルダー**  

✅ **使用例:**  
- 特定の項目を自動で更新したい  
  - 例：商談のステータスが「成立」になったら、取引先の「顧客ランク」を「A」に変更  
- 他の項目の値を基に計算値を設定したい  
  - 例：取引の「割引率」に応じて「利益率」を自動計算  

📌 **どのツールを選ぶべき？**  
- **ワークフロー → 簡単な項目更新向け**（シンプルな条件でOK）  
- **プロセスビルダー → 複数の条件を組み合わせる場合に最適**（「AかつBならCを変更」など）  

📝 **ポイント:**  
単純な更新ならワークフロー、複雑な条件付き更新ならプロセスビルダーが便利です。  

---

## **3. 所有者の自動割り当て**
**使うツール：ワークフロー / プロセスビルダー / エスカレーションルール**  

✅ **使用例:**  
- **ケース（問い合わせ）を特定の担当者に自動割り当て**  
  - 例：「VIP顧客」からの問い合わせは「上級サポートチーム」に自動で割り振る  
- **商談の所有者を自動で変更**  
  - 例：「金額が100万円以上」の商談は、シニア営業担当者に自動アサイン  

📌 **どのツールを選ぶべき？**  
- **エスカレーションルール → ケース（問い合わせ）に適用**  
- **ワークフロー / プロセスビルダー → 取引先や商談の所有者変更などに活用**  

📝 **ポイント:**  
「ケース（問い合わせ）」の割り当てならエスカレーションルール、それ以外のオブジェクトならワークフローやプロセスビルダーを活用。  

---

## **4. レコードの作成**
**使うツール：ワークフロー / プロセスビルダー / フロー**  

✅ **使用例:**  
- **特定の条件を満たしたらToDo（タスク）を自動作成**  
  - 例：商談のステージが「提案済み」になったら、営業担当者に「フォローアップのToDo」を自動作成  
- **メール通知やケースを自動作成**  
  - 例：「重要なフィードバック」がChatterに投稿されたら、カスタマーサポートのケースを作成  

📌 **どのツールを選ぶべき？**  
- **ワークフロー → 単純なToDo作成ならOK**  
- **プロセスビルダー → 複数の条件に基づくレコード作成なら便利**  
- **フロー → より複雑な処理（画面フローなど）を含めたい場合に活用**  

📝 **ポイント:**  
単純な「条件付きレコード作成」ならワークフロー、複数条件ならプロセスビルダー、複雑なロジックが必要ならフロー。  

---

## **5. レコードの削除**
**使うツール：フロー**  

✅ **使用例:**  
- 一定期間が経過したデータを自動削除  
  - 例：「3年以上更新されていないリード」を自動削除  

📝 **ポイント:**  
ワークフローやプロセスビルダーではレコード削除ができないため、削除の自動化には**フロー**を使用する必要があります。  

---

## **6. クロスオブジェクト項目自動更新**
**使うツール：ワークフロー**  

✅ **使用例:**  
- 商談が成立したら、取引先の「ステータス」を自動で「顧客」に更新  
- 「サポート契約」の有効期限が切れたら、関連する「契約ステータス」を「無効」にする  

📝 **ポイント:**  
ワークフローは**「主オブジェクト」と「従オブジェクト」の関係を利用して、他のオブジェクトの項目を自動更新できる**。  
例：商談が「成立」すると、取引先の「種類」を自動変更するなど。  

---

## **まとめ**
| 自動化したいアクション | 適したツール |
|----------------|------------------|
| 必須項目・入力チェック | **オブジェクトの設定** |
| 項目の自動更新 | **ワークフロー / プロセスビルダー** |
| 所有者の自動割り当て | **ワークフロー / プロセスビルダー / エスカレーションルール** |
| レコードの自動作成 | **ワークフロー / プロセスビルダー / フロー** |
| レコードの自動削除 | **フロー** |
| クロスオブジェクト項目更新 | **ワークフロー** |

### **ツールの選び方のポイント**
- **ワークフロー** → シンプルな処理（単純な更新、ToDo作成など）  
- **プロセスビルダー** → 複数の条件が絡む自動化（複雑なデータ更新、通知など）  
- **フロー** → 画面フロー、レコード削除、より高度な自動化が必要な場合  
- **エスカレーションルール** → ケース（問い合わせ）関連の自動割り当て  

---

これでSalesforceの自動化ツールの選び方がより明確になったと思います。どのツールを使うべきか迷ったら、**「シンプルならワークフロー、複雑ならプロセスビルダー、さらに高度ならフロー」**という基準で選ぶと良いでしょう！
Apexの例外処理


https://qiita.com/nmatsuo63/items/c1f2ee797379854a63ea

https://qiita.com/nmatsuo63/items/795a84b1f6fb6cf23006

https://qiita.com/nmatsuo63/items/d12b10edaa16218b6c1b

https://qiita.com/nmatsuo63/items/99e50de3073a7c3b9379

https://qiita.com/nmatsuo63/items/6ad0d35565b7431469a2

https://qiita.com/nmatsuo63/items/32d1537936308b7eba9c

https://qiita.com/nmatsuo63/items/bd6ad7d2cc8e5cfff758

https://qiita.com/nmatsuo63/items/9ccc5e864b7d67237268

https://qiita.com/nmatsuo63/items/dad1cde086403fce5f2a

https://qiita.com/nmatsuo63/items/f878ae1243f410988c22

https://qiita.com/nmatsuo63/items/67aafa98a2934d5587dc

https://qiita.com/nmatsuo63/items/aa00f7a6876e0abe7633
Part 1: Apexにおける例外の基本

以下では、Apexの例外処理について、初心者にもわかりやすい形で**複数回に分けて**解説していきます。  
**Part 1** では「Apexの例外とは何か」「例外を処理する基本的な方法」などの導入を行い、  
**Part 2** では「組み込み例外クラスの詳細」について解説します。  
その後、**Part 3** では「具体的な実装例（try-catchブロック、DMLExceptionの扱いなど）」、  
**Part 4** では「カスタム例外の作り方」を説明していきます。

---

## **Part 1: Apexにおける例外の基本**

### **1-1. 例外(Exception)とは？**
- **定義:** プログラム実行中に発生したエラーや異常状態を示すオブジェクトのことです。  
- **目的:** 予期しない事態が起きた際に、処理を中断し、エラー内容を通知することで、開発者が正しく対処できるようにするための仕組みです。

### **1-2. Apexでの例外の基本構文**
Apexでは、**try-catch**ブロックを使って例外を捕捉し、処理を行います。  
```apex
try {
    // エラーが発生する可能性のある処理
} catch (Exception e) {
    // エラー時に実行する処理
    // 例外オブジェクトeからメッセージ等を取得してログを残すなど
}
```

- **tryブロック:** 例外が発生する可能性のあるコードを入れる
- **catchブロック:** 例外が実際に発生したときに行う処理を入れる
- 必要に応じて、`finally`ブロックで「例外の有無に関わらず実行したい処理」を書くことも可能です。

### **1-3. 例外処理が重要な理由**
1. **ユーザー体験向上:** 予期しないエラーが画面上に生のまま表示されるのを防ぎ、適切なメッセージを表示できる  
2. **データ整合性維持:** 途中でエラーが起きても不完全なデータが保存されないように制御できる  
3. **ログ取得・監視:** システム管理者が何が起こったかをすばやく把握し、問題を特定しやすくなる  

### **1-4. 例外の種類（大きく2つ）**
1. **組み込み例外**  
   Salesforceが標準で提供している例外クラス。  
   例: `DmlException`, `NullPointerException`, `LimitException`, `QueryException` など
2. **カスタム例外**  
   開発者が独自に定義する例外クラス。  
   例: `MyCustomException extends Exception { ... }`

---

これで「例外とは何か」「なぜ必要か」「どう使うか」のイメージがつかめたと思います。  
次の **Part 2** では、組み込み例外クラスを一覧で見ながら、具体的な特徴を解説します。