OmniAICreator/Qiita-1.07M huggingface dataset:
API Gateway＋Lambda レスポンスがJSON文字列化される問題の対処法

# はじめに
Lambdaと統合させたAPI Gatewayのエンドポイントを叩いたときに、JSONオブジェクトではなくJSON文字列が返ってくる事がありました。本記事ではその原因と対応方法についてまとめています。


# 結論

APIのエンドポイントを叩いてJSONオブジェクトを返り値として取得したい場合は、Lambdaのレスポンスはdict型のレスポンスを返すようにする。



# 環境

- API Gateway（GETメソッド）
- 統合タイプ：Lambda関数
- Lambda プロキシ統合：False

# 事象
APIのエンドポイントにGETリクエスト送った時に、本来だとJSONオブジェクトが返ってくる想定が、JSON文字列が返ってきました。

```json:本来返ってくる想定のJSONオブジェクト
{"statusCode": 200, "body": {"message": "Hello, World!", "status": "success"}}
```

```json:実際に返ってきたJSON文字列
{"statusCode": 200, "body": "{\"message\": \"Hello, World!\", \"status\": \"success\"}"}
```


# 原因
Lambda関数内でjson.dumps()を使用し、レスポンスボディを文字列化していたことでした。

```python
import json

def lambda_handler(event, context):
    response = {
        "message": "Hello, World!",
        "status": "success"
    }
    

    return {
        'statusCode': 200,
        'body': json.dumps(response)  # このdumpsが不要
    }
```


# 解決策

json.dumpsは不要でした。dumpsのラップを削除し、Lambdaのレスポンスとしてdict型の変数 `response` を返すようにしました。

```python
import json

def lambda_handler(event, context):
    response = {
        "message": "Hello, World!",
        "status": "success"
    }
    
    return {
        'statusCode': 200,
        'body': response  # 文字列化せずにそのまま返す
    }
```

API Gatewayのエンドポイントを叩くと、想定通りのレスポンスが返ってきました。

```json
{"statusCode": 200, "body": {"message": "Hello, World!", "status": "success"}}
```
【脱AE】RiPLについて

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１８日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

プラグインのリソースシステムである、RiPLについて深堀りしました。
ぼっちAdventCalendarをやって感じた感想

# はじめに
この記事は[Hamster Output Advent Calendar 2024](https://qiita.com/advent-calendar/2024/game_hamster)の25日目の記事です！

いよいよ個人アドカレの最終回です。今回はぼっちアドカレをやった感想を書きます！

# 短期間の記事連続投稿は想像以上に辛い
1人で25記事投稿するのは想像以上に辛いです。いや...本当に。特に自分が辛かったことは、記事を出す度に内容が薄くなっていくことです。今回の個人アドカレは10日を過ぎたあたりから本当にひどい内容になってます。

折り返し地点から、短い記事でも伝えたいことを書こうと考えるようになったので多少はマシになったと思います。

学生の自分が辛いということは社会人で挑戦する場合かなり苦行では...

# 短期間アウトプットは難しい
普段、自分が記事を書く時は数日～1週間くらい時間をかけて記事を書いています。そして月の投稿頻度は大体1~3記事くらいなので、1ヵ月で25記事は本当に苦行でした。

特に感じたのが短期間アウトプットの難しさです。自分は理解力が優れている訳でもなく、勉強の方法も効率的かと言われるとそんなことはなく、亀見たいにスローペースだと思っています。

そのため、短い時間で誰かに説明できるくらいの知識を身に着けるというのは本当に苦しかったです。(全然できなかった)

# 参加して良かったこと
僕は25年卒なので今年や来年の初めにやること全てが、学生時代の最後の思い出になります。そういった意味では今回のアドカレに挑戦して苦しい気持ちもありましたが、達成できたことは良い思い出になったと思っています。

そして、アドカレを途中で投げ出さなかったことから2年前の自分よりも多少は成長したんだなと実感できて良かったです。
【C#】try~catchを2重にして通信の処理を待機する

O'Reilly『C#クックブック』 p.96「レシピ3.9 信頼性の高いネットワーク通信を構築する」が勉強になったのでまとめる。

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

p.96-97よりソースコード引用＋本記事用にコメント

## 例外をスローするメソッド

``` C#
static async Task GetOrdersAsync(){
    //取り出した例外オブジェクトをスロー
    //Taskクラスによって完了済みのタスクを作成
    throw await Task.FromResult (
        new HttpRequestException (
            "Timeout", null, HttpStatusCode.RequestTimeout));
}
```

**HttpRequestExceptionクラス**
HttpClient と HttpMessageHandler クラスによってスローされる例外の基本クラス。
HTTPリクエストに失敗した場合に発生する。

https://learn.microsoft.com/ja-jp/dotnet/api/system.net.http.httprequestexception?view=net-8.0

**Taskクラス**
非同期操作を表すクラス。

https://learn.microsoft.com/ja-jp/dotnet/api/system.threading.tasks.task?view=net-8.0

https://qiita.com/hiki_neet_p/items/d6b3addda6c248e53ef0


## ネットワークエラーを処理

```C#
public static await Task Main(){
    //処理中に例外が発生した時の待機ミリ秒を設定
    const int DelayMilliseconds = 500;
    //処理中に例外が発生した時の再接続リトライ回数を設定
    const int RetryCount = 3;

    bool success = false;
    int tryCount = 0;

    try {
        do {
        
            //tryを2重入れ子にする
            try {
                Console.WriteLine("注文を取得中");
                await GetOrdersAsync();
                success = true;
                break;
            } catch (HttpRequestException hre) {
                when (hre.StatusCode == HttpStatusCode.RequestTimeout)
            }
            //処理にトライした回数を1インクリメント
            tryCount++;

            int millsecondsToDelay = DelayMilliseconds * tryCount;
            Console.WriteLine($"処理中に例外が発生しました -" +
                              $"{millisexondToDelay}ミリ秒待機します");
            //待ち
            await Task.Delay(millisecondsToDelay);
            
        //リトライする回数の上限まで繰り返し処理にトライ
        } while (tryCount < RetryCount);

    //リトライした結果、処理の成功/失敗を判別
    } finally {
        if(success == true){
            Console.WriteLine("処理が成功しました");
        } else {
            Console.WriteLine("処理が失敗しました");
        }
    }
}
```

## 結果（例）

```
注文を取得中
処理中に例外が発生しました - 500 ミリ秒待機します
注文を取得中
処理中に例外が発生しました - 1000 ミリ秒待機します
注文を取得中
処理中に例外が発生しました - 1500 ミリ秒待機します
処理が失敗しました

```

## 使用シーン

- 通信が安定しないバックエンドサービスと連携するアプリケーションと通信を行う際、処理が失敗しないように指定回数通信に失敗しても処理をリトライさせたい時。

- 一部のサードパーティー製APIはクライアントのリクエスト回数を制限していることがあり、リクエストを即座に繰り返すとすぐに回数を超過してしまうことになる
    - このように、処理に失敗した時に一定時間保留するような実装にするとよい

<br>
【脱AE】リファクタリング編

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１６日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

コードがごちゃごちゃしてきたので、C++の勉強も兼ねて、リファクタリングを行いました。
bashとzshの違い

ターミナルを使った作業に欠かせないシェル環境。
LinuxやmacOSでよく使われるシェルとして、**Bash**（Bourne Again Shell）と**Zsh**（Z Shell）の2つが挙げられます。どちらもコマンドを実行するための環境ですが、それぞれに特徴や違いがあります。本記事では、BashとZshの違いを（macOSユーザーなのでzshを贔屓目に）解説します。

ちなみに、自分がどちらを使っているか確認するには、以下のコマンドを試してください。

```
echo $SHELL
```

/bin/bash → bashを使用中
/bin/zsh → zshを使用中

# **1.  BashとZshの概要**

**Bash（**Bourne Again Shell**）とは？**

POSIX準拠の標準的なシェルで、多くのLinuxディストリビューションのデフォルトシェル。

採用例: Ubuntu、CentOS、macOS（2019年まで）。

**Zsh（**Z Shell**）とは？**

Bashの拡張版といえるシェルで、豊富なカスタマイズ性とプラグイン対応が特徴。

採用例: macOS（Catalina以降でデフォルト）。

# 2. 両者の違い

1. 設定ファイル
    
    Bashは`~/.bashrc`に対し、zshは`~/.zshrc`に記述します。
    
2. コマンド補完
    
    Bashでcdコマンドでディレクトリを移動する際、Tabキーで部分補完が可能です。ただし、途中のディレクトリ名を省略する機能はありません。
    
    ```
    cd /Desktop/Development/
    ```
    ![Screenshot 2024-12-26 at 12.20.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/35a10c95-77cd-48cf-7c54-5b32596cca8c.png)

    一方、zshのcdコマンドでは**パスの一部を入力するだけで自動補完が可能**です。
    ```
    cd /D<tab>
    ```
    tabを1回押下で候補の表示、2回以降の押下で自動補完がされます。
    ![Screenshot 2024-12-26 at 12.23.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/6833aa44-1a5c-4821-ffb1-ff013bac4761.png)

    cdコマンド以外にも、gitコマンドやオプションにも適用されます。
    ```
    // カレントディレクトリ内のファイルやディレクトリを補完
    ls Doc<Tab>
    
    // コマンド名の補完
    git ch<Tab>
    
    // コマンドのオプションを補完
    ls -<Tab>
    ```
    
    なお、自動補完機能はデフォルトではOFFなので、ONにするためには`.zshrc`で設定変更してください。
    
    ```
    vim ~/.zshrc
    
    #以下追記
    autoload -Uz compinit
    compinit
    #
    
    source ~/.zshrc
    ```
    

zshのコマンド補完は地味に便利なので、知らなかった時間がもったいなく感じますね。
【脱AE】PF_RENDERをエミュレートする

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１４日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

AEXのコマンドである、```PF_RENDER```をエミュレートできました。
Testflightのアプリアップロード時に”App Encryption Documentation”に遭遇

TestFlightでアプリアップロードをする際に、突然`App Encryption Documentation`（アプリ暗号化ドキュメント）の画面が表示されることがあります。このメッセージは何を意味するのか、どのように対応すればよいのかを解説します。

# **“App Encryption Documentation”とは？**

この画面は、Appleが**米国の輸出管理法**および**各国の暗号化技術に関する法律**を遵守するために表示するものです。アプリに暗号化技術が含まれている場合、Appleに対してそれを申告する必要があります。

**具体的に何を確認しているのか？**

- アプリが暗号化を利用しているかどうか。
- 暗号化が利用されている場合、その内容が輸出管理法に違反していないか。

# **暗号化技術が含まれるアプリの例**

一般的には以下の場合に、暗号化技術が含まれるとみなされることがあります：

- **HTTPS通信の使用**（TLS/SSLを利用）
- **サードパーティの暗号化ライブラリ**を利用
- **独自の暗号化ロジック**を実装
- **セキュリティ機能**（認証、データ暗号化）を搭載

しかし、公式によると「export compliance requirements（輸出コンプライアンス要件）」を満たせば"NO"として、特段申請なしで良いそうです。

> Set the value for this key to `NO` in your app’s [`Information Property List`](https://developer.apple.com/documentation/bundleresources/information-property-list) file to indicate that your app—including any third-party libraries you link against—either uses no encryption, or only uses encryption that’s exempt from export compliance requirements, as described in [Determine your export compliance requirements](https://help.apple.com/app-store-connect/#/dev63c95e436). Set the value to `YES` to indicate that your app uses non-exempt encryption.
> 

（訳）アプリの情報プロパティ・リスト・ファイルでこのキーの値をNOに設定すると、リンク先のサードパーティ・ライブラリを含め、アプリが暗号化を使用していないか、または「輸出コンプライアンス要件の決定」で説明するように輸出コンプライアンス要件から免除される暗号化のみを使用していることを示します。 この値をYESに設定すると、アプリが非適用の暗号化を使用していることを示します。

**対応が不要な場合**

- アプリが単に**標準的な暗号化（HTTPSなど）**を使用しているだけの場合。

　→この場合、「標準暗号化を使用しているが輸出管理対象ではない」と回答すれば問題ない

**対応が必要な場合**

- アプリに**カスタムの暗号化ロジック**や**特殊な暗号化技術**が含まれる場合。

　→Appleへの申告が必要

詳しくは以下も併せて確認してください。

https://developer.apple.com/help/app-store-connect/reference/export-compliance-documentation-for-encryption

# 対応
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/1771dc16-3b39-3622-4e0c-450824a9c546.png)


適当にNone of ~を選択すると
![image(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/9c353c0a-ec31-a6e0-9bdd-c3f3e98e1ebe.png)


> It is your responsibility to comply with export regulations, and you should revisit these questions if your encryption or exemption status changes. Since your build doesn't contain encryption, you can specify this in the information property list (Info.plist) in your Xcode project to avoid answering encryption questions with each app submission.
> 

（訳）暗号化または免除のステータスが変更された場合は、これらの質問を再検討する必要があります。 あなたのビルドは暗号化を含まないので、あなたは、各アプリの提出で暗号化の質問に答えることを避けるために、Xcodeプロジェクトの情報プロパティリスト（Info.plist）でこれを指定することができます。

info.plistにキー`App Uses Non-Exempt Encryption`とバリュー`NO`を追加すれば、次のアップロードから聞かれなくなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/493f1cf1-8a3b-b612-e3a6-ee0f0d0ace50.png)


# 参考

https://developer.apple.com/documentation/bundleresources/information-property-list/itsappusesnonexemptencryption
【脱AE】PF_PARAM_SETUPをエミュレートする

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１３日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

AEXのコマンドである、```PF_PARAM_SETUP```をエミュレートできました。
【脱AE】PF_GLOBAL_SETUPをエミュレートする

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１２日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

AEXのコマンドである、```PF_GLOBAL_SETUP```をエミュレートできました。
【脱AE】プラグインからリソースを抽出する

# はじめに
みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１９日目の記事です。
（前回の記事は[こちら](https://qiita.com/drafts)）
:::

前回の記事では、AEXプラグインに格納されるRiPLリソースについて解説しました。
そして今回では、実際にAEXプラグインに格納されているリソースを抽出してみます。

# リソースを見つける
Win32 APIである、```FindResourceA```関数を使用します。

そして出来た最終的なコードは以下になります。

```cpp
auto resource = FindResourceA (this->module, MAKEINTRESOURCEA(16000), TEXT("PiPL"));

if (resource == NULL) {
    throw std::runtime_error ("Failed to locate resources");
}

auto handle = LoadResource (this->module, resource);

if (handle == NULL) {
    throw std::runtime_error ("Failed to load resources");
}

auto lock = LockResource (handle);

if (lock == NULL) {
    throw std::runtime_error ("Failed to lock resources");
}
```
【脱AE】PF_ABOUTを実行する

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)１１日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

AEXのコマンドである```PF_ABOUT```をエミュレートしました。
Archive Distributeで詰まったところ（Bundle Document Types編）

Archive時に、CFBundleDocumentTypesに関するエラーが発生

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/82b2d6c2-8dda-9d6a-0dca-81dafe35152c.png)

どこの部分を変えるのか⁇

# 対応

まずどの部分の話かということですが、以下の画像、Custom iOS Target Propertiesの下にあるDocument Typesの中身に関することです。

![image(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/86d1cffb-4e0e-6c3e-2b15-306bdf75e511.png)


infoタブで+すると消せなくなるので（さまざまなフォーラムを見る限りバグ）、Finderからinfo.plistを開くと改めてxcodでinfoタブが開かれるので、そこで削除が可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/31b6569f-6e2f-e06b-dadb-058b89ea8c4a.png)

Documentは一つを残し、残りは削除。そしてName, Types, Handler Rankを埋めて保存

![image(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/f0b85504-fa22-2ba5-5c83-7ec2b49545b9.png)

Xcodeを再起動してinfo.plistの内容がinfoタブに反映されていることを確認

アップロードは完了。

ここで疑問が出てきますね。「そもそもファイルいじらないならDocumentTypes自体いらないんじゃね。。⁇」と。

ということで、info.plistにてDocumentTypesを全削除した結果、AppStoreConnectWarningは無くなり、DistributeAppもできたことなので、当初の目的は達成しました。

Xcodeの設定は慣れないと手間取りますね。特にInfo.plistはXcode13以降スクリプトが廃止されていますが、上記で見たようにGUI上で削除できない項目があったり。


他にも`Upload Symbols Failed`が発生したので、時間があるときWarningの解消法やdSYMについて記事を書こうと思います。
2024年 私のDTM

この記事は[技術チャレンジ部アドベントカレンダー2024](https://qiita.com/advent-calendar/2024/challenge_club)の20日目の記事です。投稿が遅れてしまい大変申し訳ありません。

本当はもっとAI寄りの内容にしようと思っていたのですが、時間がないので普段やっていることを書きます。

最近、といっても2ヶ月くらい前からバイオリンを弾き出したので、練習の動機づけのために課題曲が欲しいです。この曲が演奏したいと思った曲の楽譜を探しても、ネットにバイオリン用の譜面があることもあればないこともあります。そこで、自分でバイオリン用の楽譜を作ってみることにしました。

最初に、ピアノ用の楽譜をヤマハの[ぷりんと楽譜](https://www.print-gakufu.com/)や[Musescore](https://musescore.com/)などで手に入れます。MusescoreはPDFとMusicXML、MIDIが手に入ることが多く、楽譜編集ソフトに取り込みやすいです。ここではPDFを入手した際のフローを紹介します。

まずPDFをOCRソフトにかけて楽譜データへと電子化します。私はMacの[ScanScore](https://scan-score.com/en/)という有償のソフトを使っています。今回は[Credens Justitiam](https://dic.nicovideo.jp/a/%E3%83%9E%E3%83%9F%E3%81%95%E3%82%93%E3%81%AE%E3%83%86%E3%83%BC%E3%83%9E)という楽曲を電子化してみます。

<iframe width="560" height="315" src="https://www.youtube.com/embed/S01UPRsPA0o?si=p2IxHRy94U13ejhf" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

ScanScoreでPDFないしは画像を読み取ると良い感じに電子データ化されます。ScanScoreの中でMIDIの演奏もできるので、音を聞きながら楽譜を修正します。（正直ScanScoreの楽譜エディタは使いづらいです。）

![ScanScoreのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25047/c9e1fc4f-3760-e5a9-e7d2-403e392344a9.png)
*ScanScoreの画面。左ペインがPDF/画像で、右ペインが電子楽譜。*

良い感じになったらMusicXML形式でエクスポートします。

MusicXMLのファイル（拡張子が `.xml` または `.mxml`）を今度は楽譜制作ソフトに取り込みます。私はSteinbergの[Dorico SE](https://www.steinberg.net/ja/dorico/se/)という無料のソフトウェアを使っています。

Doricoでピアノの譜面から良い感じにバイオリンの譜面を切り取ります。著作権の都合でモザイクをかけていますが、雰囲気はなんとなく伝わるかなと思います。ピアノの高音部のメロディーラインをバイオリンにもってくる感じです。

![Dorico SEのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25047/18749e0c-772f-5d40-deae-69aec2376382.png)
*Dorico SEの楽譜編集画面。*

Doricoにはバイオリンの音源が入っているので、適当に設定するとバイオリンの音を鳴らせます。良い感じにしましょう。

![スクリーンショット 2024-12-25 23.07.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25047/bf6a6b79-70d3-9518-78bf-033b1ccc1ccb.png)
*Dorico SEの再生画面。*

良い感じにした音源を紹介したいのですが、これもまた著作権があるのでお聴かせできません。

iPadをお持ちの方はiPadにDoricoアプリをインストールすると、譜面台に載せることができてそのまま演奏に使えます。あとiPadは手書きできるモードが用意されているので、楽譜に注釈をちゃちゃっと書き込めます。

![IMG_0225 01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/25047/e3425124-a77a-8b0f-5c30-d412aa78dab7.png)
*iPad版Doricoの読譜モード。赤がバイオリンの先生の注釈。*

というわけで、私のDTM（？）の使い方を紹介しました。本当はもっとDAWっぽいことを書きたかったのですが、今日はここまで。ありがとうございました。
【Mac】Ollamaの導入方法

## HomebrewでOllamaをインストールする

以下のコマンドを実行してOllamaをインストールします。

```terminal
brew install ollama
```

## サーバーを起動する

以下のコマンドを実行してOllamaのサーバーを起動します。

```terminal
ollama serve
```

以下のコマンドを実行するとログイン時に起動されるようになります。

```terminal
brew services start ollama
```

## Llama 3.2を使用する

 Llama 3.2を使用する場合には以下のようにコマンドを実行します。

 ```terminal
 ollama run llama3.2
 ```

## その他のコマンド

```terminal
$ ollama -h
Large language model runner

Usage:
  ollama [flags]
  ollama [command]

Available Commands:
  serve       Start ollama
  create      Create a model from a Modelfile
  show        Show information for a model
  run         Run a model
  stop        Stop a running model
  pull        Pull a model from a registry
  push        Push a model to a registry
  list        List models
  ps          List running models
  cp          Copy a model
  rm          Remove a model
  help        Help about any command

Flags:
  -h, --help      help for ollama
  -v, --version   Show version information
```

## 参考

https://github.com/ollama/ollama
【脱AE】SmartFX

# はじめに

みなさんこんにちは！
POTIです！🤗
Adobeを破壊するために日々奮闘しています。

:::note info
この記事は、[脱After Effectsアドベントカレンダー](https://qiita.com/advent-calendar/2024/no-more-ae)２４日目の記事です。
（前回は[こちら](https://qiita.com/drafts)）
:::

# なにをした

AEXの機能である、SmartFXについて調べました。
Spring '26 でプロファイルから権限が廃止されるってホント？

# この投稿で伝えたいこと
1. 2023年1月16日 のブログ投稿において、プロファイルの権限のサポート終了との投稿があった
1. その後、同ブログにおいて、Spring '26 では、プロファイルの権限のサポート終了を実施しないことに決定した旨の追記があった。要は直近でのプロファイルからの権限の廃止はない
1. １次ソースからきちんと情報を得ましょう

# プロファイルの権限のサポート終了！？
ことの始まりは以下のブログからでした。
[Permissions Updates | Learn MOAR Spring ’23](https://admin.salesforce.com/blog/2023/permissions-updates-learn-moar-spring-23)

> ついに到来です! プロファイルの権限のサポート終了 (EOL) をお知らせします。これは Spring '26 リリースで行われます。今後数週間で、公式発表が公開される予定です。
※Google翻訳（原文は英語）

なんてインパクトのある発表でしょうか。
Salesforceを利用している人でプロファイルや権限設定を使っていない人はいません。そして、古くからSalesforceを利用している会社ほどプロファイル主体で権限を管理しているかと思います。
かくいう私もその一人で、権限セットや権限セットグループ主体の権限管理のベストプラクティスってどんな感じだ？と慌てたものです。

そして案件では権限セット主体の設計に移っていったわけですが・・・

# プロファイルの権限のサポート終了を実施しないことに決定しました

ある日、お世話になっているサークレイスさんの記事を拝見しました。

https://x.com/gildetech4SF/status/1755858390667174222

[プロファイルを使い続けても大丈夫そうだけれど権限セットも進化するらしい！？](https://sf.forum.circlace.com/articles/975839329056239616)

記事の中では、これまたお世話になっている Mark Hammer さんからのタレコミで、１年越しで元ブログが更新されており、プロファイルの権限のEOL期限は取り消しされ、EOLはしないと発表されている、なんていうビッグニュースが！！！

発表内容は上記ブログを参照いただければと思いますが、「廃止するまえに私達にはまだやれることがある、今後プロファイルに機能追加はしない、権限セットへの移行に向けての必要な機能開発に注力するからよろしく！（意訳）」っていうような内容でした。

Learn MOAR Spring ’23 のブログは Trailhead などから遷移して読んだ方も多かったのではないでしょうか？なので廃止を認識している人も多いかと思います。
それに対して EOL 期限の廃止のアナウンスは目立つところでは行われてはおらず、未だに「プロファイルの権限は廃止される」と認識している人も多いように見受けられます。

そんなもやもや感を発散したく、当投稿をするに至りました。

# １次ソースを確認しよう

ブログでの発表と撤回、結局なんだったの？状態だったのですが、

https://x.com/atskimura/status/1868936553281802376

[プロファイルの権限の有効期限の延期](https://help.salesforce.com/s/articleView?id=003834041&type=1)

上記投稿より、ようやく公式ヘルプから案内がでていることを知りました。

> 以前、このブログ投稿やその他のコミュニケーションで、Spring '26 でのプロファイルの権限のサポート終了を発表しました。ただし、Spring '26 ではこの廃止を実施しないことに決定しました。権限セットを完全に使用できるようになる前に、埋めなければならない機能ギャップがまだあるというフィードバックに基づいて、この決定を下しました。私たちは、管理者エクスペリエンスを全体的に改善および向上させることに注力しており、セットアップのユーザー ページ、概要ビュー、権限セット、権限セット グループなどの機能に投資しています。
※Google翻訳（原文は英語）

公式ヘルプの情報なので、廃止？中止？論はこれで結末を迎えたと言えそうです。

# 最後に

EOL 期限は撤回されましたが、プロファイルから権限を廃止する流れは変わらない、ということも分かっていただけたのではないかと思います。
私は権限セット主体の権限管理に運用を切り替えましたが、正直プロファイルでの権限管理にはもう戻りたくない、と思うくらい、プロファイル管理でのデメリット、権限セット管理でのメリットを感じています。

これを機に既存の権限管理の見直しを行い、いつかくる EOL に向けて準備していきましょう！
ひとりアドカレ、完走 -振り返りと学び-

こんにちは、ふるすです。
アドカレ最終日、なんとか25記事書き切りました…！:santa_tone1:
※弊社のアドカレと技術広報アドカレの2記事含む。

![スクリーンショット 2024-12-25 233457.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/7697ff95-1566-21f0-85c1-c322047babd1.png)


https://qiita.com/advent-calendar/2024/advent_hitori

## 振り返り
アドカレ埋めることを決めたのが12月も半ばだったのと、その直後にインフルエンザになってしまいまして(今年めちゃくちゃ流行ってますね)、それまでに書き溜めていたネタを後半に大放出する形になりました。
弊社では記事を書くと専用のslackチャンネルに連携される+開発のXアカウントから自動で投稿されるようになっているので、きっと社内の方からは「**なんでこんなに一日にたくさんの記事を出しているんだ**」と思われたことでしょう。荒らしてすみませんでした。。

## 学び
さて、25記事書いてみて学びがたくさんありましたので書いてみます。

**・新たなメディアに出会うきっかけになった**
書きたいことについて調べているうちに、見たことのなかったメディアやコンテンツに触れる機会ができ、いい出会いになりました。
特にDevRelConや他社様のオウンドメディアやテックブログはこの機会がなければこんなに一生懸命毎日見ることはなかったと思います。

**・よく見かける技術関連のキーワードを書き溜めて調べることが増え、勉強になった**
最初はよくわからないなと思ってスルーしていたワードを何度も目にするうちだんだん気になるようになってきて、調べる機会が増えました。
非エンジニアということもありお恥ずかしながら知らない技術ワードばかりなのですが、この1ヶ月で自分で説明できるワードがかなり増えました。

**・よく使うマークダウンの書き方が自然と身についた**
**この太字いっぱい使った。**

**・いい記事を書かねばというプレッシャーから解き放たれた**
もちろんいい記事を書ければそれに越したことはないのですが、そのせいで発信できなくなるくらいなら不完全でも出しちゃうのがいいなと思いました。自分の理想どおり完璧にやれないとストレスがたまる難儀な性格のわたしですが、この期間で少し克服できた気がします。

**・思考がかなり深まった**
**・もっともっとインプットしたくなった**

そして1番思ったことは、
**毎日投稿するのはなかなかしんどい**
ということです。いまわたしは出涸らしと化しています。
世の中には1ヶ月どころではなく毎日アウトプットし続けている方がいることを考えると本当に尊敬します。
ですがこの期間をやりきったことでもっともっとインプットしてもっともっとアウトプットしたくなりました！

おまけ:25記事達成のバッジをもらえました！わーい🙌
自分の名前の横とかにくっつけられるようになるといいな。ポケポケのエンブレムみたいな感じで…

![IMG_0969.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827898/3eefa363-e5f5-d9ed-28e2-4dd36cfba1b8.jpeg)


ここまでお読みいただきありがとうございました！
DevRel/Japan CONFERENCE 2023のコンテンツから学んだこと-エンジニアのみなさんと協働するためにできること-

こんにちは、ふるすです。
昨年3月に行われた「DevRel/Japan CONFERENCE 2023」のアーカイブを視聴している中で学びがありましたのでシェアしたいなと思います。
特に非エンジニアの方で、エンジニアのみなさんとのコミュニケーションに悩みや不安のある方に読んでいただけると解決のヒントになるのでは、と思います。

## 視聴したコンテンツ

鍋島理人さんにより「非エンジニアの私が、エンジニアと「協働」するために心がけていること」というコンテンツです。
資料や動画は下記をご覧ください。

https://devrel.tokyo/japan-2023/speakers/nabemasat/

https://youtu.be/yQWBxR9T-j8?si=uEtm65hNoVriN7_D

## 感じたこと

まず、非エンジニアの私にとっては思わず「うんうん」と頷きたくなるような内容ばかりでした。フロント部門から開発部門に異動してきて最初に思ったことは、「同じ会社で働いているのに、こんなに文化が違うんだ…」ということでした。
同じ言葉を違っていても全く別の定義であったり、物事を進めるという点においてもその進め方や納期に対する感覚が大きく違うんだとカルチャーショックを感じることもありました。
こういった思いを抱えているのは私だけではなく、少なからずギャップを感じている方はほかにもいらっしゃるのだなと少し安心しました。
また私のコミュニケーションの取り方は、もしかしたらストレスを与えてしまっていたのかもしれないと、反省するきっかけにもなりました。

## エンジニアのみなさんと協働するために

**ギャップを認識しあう**

鍋島さんの発表の中では、「まずはツールを同じにしてみよう」という解決策をご提案されていました。
私はその一歩手前の、「**私たち、なんだか合わないね…？**」という意識をお互いに確認しあうフェーズも非常に大事なのかなと思いました。
もしぎすぎすしてしまったり、なかなか噛み合わない部分があっても、どちらか一方が悪いというわけではなく、それは使っている言葉や文化の違いによるものが大きいのだと思います。まずはその部分を認識しあい、そのギャップをひとつひとつ埋めていければ、非常に良い「協働」ができるのではないかと感じました。

なのでそういったシーンがあった際には、「**ちょっと確認させてほしいのですが、どういった意味で仰っていますか？**」と恐れずに確認してみようかなと思います。

**エンジニアの仕事を体験し、技術について知ってみる**

こちらは鍋島さんの発表にもあったとおり、商業レベルはなくとも、開発体験をすべきだと感じました。
一緒に働くのであれば自分のやり方を押し付けるのではなく、少しでも理解を進めることが必要だと思います。そのためにはやはり「開発」をしてみるのが一番よいと思いました。

私も自社のオンボーディング課題で開発を体験してみることで、理解できる領域が増えたことを実感しています。
今はハンズオン形式の講座もいろいろとあるので、まずはやってみるのがよさそうです。
私ももっとエンジニアのみなさんを理解して、良いお仕事ができるよう技術の勉強を進めたいと思っています。

ここまでお読みいただきありがとうございました。
もしおひとりで悩まれている方がいらっしゃいましたら一緒に良いやりかたを考えられるとうれしいです。

https://x.com/Devrel_yulah
応用情報R6秋　問70

問題の34ページをめくったら、急に中二病のような単語が並んでいたので、調べてみました。

# キャズム

「キャズム」（Chasm）は、技術革新や製品の普及に関する概念で、特に「**技術採用ライフサイクル**」において重要な意味を持つ用語です。この概念は、ジェフリー・ムーア（Geoffrey A. Moore）の著書『クロッシング・ザ・キャズム』（*Crossing the Chasm*）で広く知られるようになりました。

## キャズムの意味

キャズムは、**新しい技術や製品が初期の市場（イノベーターや初期採用者）から主流市場（初期多数派や後期多数派）へ移行する際に生じる「ギャップ」** を指します。このギャップは、革新的な技術や製品が早期の支持者に受け入れられる一方で、一般の消費者に普及するのが難しくなる現象を表しています。

具体的には、製品やサービスが最初の熱心な支持者（イノベーターや初期採用者）によって採用されるものの、その後の多数派（後期多数派や遅滞者）に対しては、広く普及するためにはさらに多くの努力が必要だということです。キャズムを越えられないと、技術や製品は広がらず、市場で成功することができません。

## 技術採用ライフサイクル

技術採用ライフサイクルは、以下の5つの段階に分けられます：

1. **イノベーター（Innovators）**  
   新技術を最初に採用する少数の人々。リスクを取ることを厭わず、革新に興味を持っています。

2. **初期採用者（Early Adopters）**  
   技術に敏感で、イノベーターに続いて採用する人々。新しい技術に対する関心が高く、その製品の可能性を評価します。

3. **初期多数派（Early Majority）**  
   技術に対して慎重で、他人が使用して成功しているのを見てから採用を決める人々。この段階でキャズムが現れます。

4. **後期多数派（Late Majority）**  
   技術が広く普及してから採用を決める、より保守的な人々。

5. **遅滞者（Laggards）**  
   新技術に対して非常に保守的で、最も遅く採用する人々。

## キャズムを越える重要性

キャズムは、主に「初期採用者」と「初期多数派」の間に現れるギャップです。このギャップを越えることができると、製品や技術は急速に普及し、商業的に成功する可能性が高くなります。逆にキャズムを越えられないと、製品は主流市場に届かず、衰退してしまうことがあります。

# 魔の川、死の谷、ダーウィンの海

「魔の川」「死の谷」「ダーウィンの海」は、ビジネスや技術開発において製品や技術の普及過程で直面する困難を表現するメタファーです。これらの概念を視覚的に理解するために、以下にそれぞれを説明します。

## 1. 魔の川

- **意味**:  
  基礎研究→開発の障壁。
  研究成果を実用化するのに、市場ニーズや資金調達、技術課題を満たさなければならない。

## 2. 死の谷

- **意味**:  
  開発→事業化の障壁。
  製品開発して事業化するまでに、スポンサーがつかなかったり、事業化までのコストがかさむなどして断念することがある。
  

## 3. ダーウィンの海

- **意味**:  
  事業化→産業化
  販売までこぎつけたとしても売れなければ生き残れない。
  製品の生存競争や変化するニーズに応えなければならない。
レガシーシステムからモダンなローコードツールへの移行PJで学んだこと

ローコードツールへの移行を考えるとき、単に「便利そうだから導入してみよう」という姿勢だけではうまくいきません。とくに、既存のシステムを使い続けている場合は、以下のようなポイントを押さえておくことが大切です。

---

## 1. リテラシーが何よりも重要
ローコードツールを使うには、ある程度の知識やスキルが欠かせません。プログラムをゼロから書くほどではないにせよ、最低限のプログラミングの考え方や、データベースの概念を把握しておく必要があります。  
さらに、業務プロセス自体をきちんと理解しているかどうかも重要です。自社の流れを分かっていないと、どこを自動化すべきか、どう組み合わせるべきか判断できません。導入前には、ユーザーの研修や社内メンターのサポート体制を整えておくと、トラブルを減らせます。

---

## 2. 完璧主義は禁物
ローコードツールは「すべての要望に応える万能ツール」ではありません。あれもこれも実現しようとすると、結局はツールの制限にぶつかってしまいます。  
はじめから完璧なシステムを目指すのではなく、まずは最小限の機能でスタートし、使いながら徐々に改良していく方が、結果的に満足度の高いシステムになります。ツールの強みと弱みを見極めつつ、上手に折り合いをつけることが大事です。

---

## 3. 現行プロセスをそのまま持ち込まない
今使っているシステムやフローを、完全に踏襲するのはおすすめしません。ローコードツール独自のやり方や制限があるため、無理やり既存の流れを当てはめると、せっかくの利点が台無しになることも。  
導入の際には、まず業務プロセスを洗い出して「どこを自動化できそうか」「どこがツールの制限に引っかかるか」を整理しましょう。代替手段を考えるなど、ある程度プロセス自体を柔軟に変える気持ちが必要です。

---

## 4. 保守と運用の体制づくり
「導入して終わり」には絶対になりません。ローコードツールだからこそ、アップデートや機能追加をどんどん試したくなるもの。  
- **誰が運用責任を持つのか**  
- **どのくらいのコストをかけられるのか**  
- **利用者からの改善要望にどう対応するか**  

これらを事前に決めておかないと、あとから混乱してしまいます。小規模でも運用チームを設けて、定期的にメンテナンスやユーザーサポートができるようにしておくと安心です。

---

## 5. まとめ
ローコードツールは、従来の開発スタイルに比べてスピード感があり、業務効率を上げる大きな可能性を秘めています。しかし、導入に当たっては以下の点に気をつけましょう。  

1. **ユーザーリテラシーを高める**  
2. **完璧を求めすぎず、ツールの制限を受け入れる**  
3. **既存フローをそのまま持ち込まず、業務プロセスを再構築する**  
4. **保守・運用のコストや責任分担を明確にしておく**  

組織全体でこのプロセスに取り組み、定期的に情報共有しながら使いこなすことで、ローコード開発の利点を最大限に引き出すことができます。バランス良く導入・運用することで、レガシーシステムからの移行をスムーズに進め、より柔軟で効率的な開発体制を築いていきましょう。
どうやったらゲームの開発効率は上がるのか

# はじめに
この記事は[Hamster Output Advent Calendar 2024](https://qiita.com/advent-calendar/2024/game_hamster)の24日目の記事です！

最近フィットネスバイクを購入したハムスターです。今回、ゲーム開発の効率が上がる方法を自分なりにやったことを踏まて色々書きたいと思います。

# 自分的に開発効率が下がる原因を考えた

### ・ 運動する時間が減った
僕は、2年ほど前は1日に体をかなり動かしていました。具体的には下の通りです。

・1日10000万歩歩く
・週3回ジムで筋トレ

この習慣と+a食事管理をして一時期、体重が物凄い速度で落ちたこともありました。

話が大分それましたが、1年前からゲーム開発に、没頭するようになってから体を動かす頻度が圧倒的に下がったことによって、2年前よりも集中力がかなり落ちたと思います。

### ・スマホにSNSやYoutubeが入っている
最近、自分の行動を分析して感じたことは1日にXやYoutubeを見ている時間が異様に長いということです。Xはゲームに関する情報が沢山流れてくるので...見たいのですが...

### ・スマホやゲーム機が視界に入る
これも個人的にはかなりあると考えていて、スマホが目に入った時は通知や色々確認したり、PS5のコントローラーが置いてあるとゲームがしたくなるんですよね...

# 自分で色々実験した

### ・運動をする
長時間作業をした後に、散歩や軽い運動を挟むことで長時間作業しても疲れにくくなった

### ・スマホからSNS等の削除
スマホを開いても見る物が無いので通知を確認したら自然と離れるようになった

### ・作業する時はゲーム機が見えないようにする
自宅でやらなければ正直解決する所もあります。自分の場合、PS5を作業机よりも下の方に配置して視界に入らないように工夫しました。

### ・ポモドーロータイマーを利用する
25分集中して、5分休憩するというサイクルを行うんですが、個人的にはかなり効果を感じました。

### ・シアター効果(映画館)
部屋を真っ暗にして、光っている物をモニターやパソコンだけにします。周りが暗く、自然と光に目が行くので効果を感じましたが、暗い所で作業をすると少し寝つきが悪くなった感じがありました。

# 色々やって効率は上がったのか
結果としては、上がりました。特に、効果を感じたのが運動、ポモドロータイマー、スマホからSNS等の削除です。

# 運動しながらゲーム開発が最強なのでは
最近自宅で使えるフィットネスバイクを購入して思ったことが、漕ぎながら開発をしたら最強かも知れないということです。

漕ぎながら開発をしたいのですが、残念ながらバイクの椅子の高さと作業机の高さに差があり、ノートパソコンに触るのが難しくて現状は本を読んだり、スマホで記事を読むのが限界でした。

そのうち昇降デスクを買いたいと思ってます。
Archive Distributeで詰まったところ（app icon編）

XcodeからArchiveしようとしたら、AppIcon関連のエラーが出たので備忘録。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/c57198c9-9402-59fd-65be-82255f49c155.png)
![image(1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/81ce5901-d7c2-0e41-31d9-4fe030571970.png)
![image(2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/6af573f7-6ae5-8ac0-6da5-40df24204ad3.png)

# Appアイコン追加の手順

1. Xcodeの左タブからImagesを選択
![image(4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/3c3a1246-0daa-00f4-95fa-2428d90bc1d7.png)

    
2. 画像のようにアイコン画像を設定できる画面が表示されるので、青枠の二箇所にそれぞれ120*120px、1024*1024pxのpng画像を設定
    
![image(5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/271354bd-e4a1-de07-b62a-2d548878946f.png)

    
3. Info.plistにキー”IconName”と値”AppIcon”（2.の左タブにある名前）を追加で完了
![image(6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/36e331cb-8afe-f842-ccc2-6899c2250635.png)



# 余談

一つ目のエラー「A value for the Info.plist key “CFBundleIconName’ is missing in the bundle ‘~’.」に従って、Info.plistのキーにCFBundleIconNameを追加すると、すでにあると怒られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/376078/008f8a9c-7c13-d0df-b587-27c198fa4b64.png)


ちゃんとドキュメントを確認すると、”Name: Icon Name”、つまりInfo.plistのキーが”Icon Name”ってことですね。紛らわしい（他責）。

https://developer.apple.com/documentation/bundleresources/information-property-list/cfbundleiconname

# 参考
https://help.apple.com/xcode/mac/current/#/dev10510b1f7

https://developer.apple.com/documentation/bundleresources/user-interface
Notion AI, GensparkなどのAIをフル活用して記事作成を超効率化

# 記事作成を効率化するツール活用術  

ブログや情報発信のネタが思いついたときに、スムーズに整理するための工夫として、**Notionでのネタ管理**と**Genspark・ChatGPT**などのツールを組み合わせた記事作成フローを紹介します。  

ちょっとした工夫で、タップ数に応じて新規データを追加したり、要約や骨子づくりを自動化できるため、時間の節約につながります。  

---

## Notionでネタをサッと保存する  

まず、アイデアをすぐに記録する仕組みとして、**Notion**を活用しています。  

- **ショートカットの設定**  
  iPhoneのショートカットアプリを使い、タップ数に応じてNotionへ新しいデータを追加できるようにしています。  
  例えば、1回タップで「新しい記事アイデア」、2回タップで「リンク付きのメモ」を登録する、といった形です。

- **記録のコツ**  
  思いついたことをタイトルと簡単なメモとして記録します。出先ではスマホから登録し、PC作業時に詳細を肉付けします。  

https://powerplatformnikki.com/shortcutsactionsapp

## Notion AIで手軽にGensparkへのプロンプト作成 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/16cb2a81-ea97-07f2-ce68-1418249bb310.png)

内容がある程度書けたら、Notion AIの「AIカスタム自動入力」を使い、Genspark用のプロンプトを生成します。

https://www.notion.com/ja/help/autofill

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/88a6e637-541e-ad65-6b5c-a71b8c379743.png)
 *月に20回まで無料で利用可能*  

上記のようなプロンプトで記事の内容をある程度考えてもらいます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/b6a5cc30-e205-7a06-c0ad-2e74167974d7.png)

## Gensparkで骨子づくり

Notion AIだけだと最新情報に弱いので、様々なサイトから情報を取得しつつ要約できる**Genspark**というサービスで骨子を作成します。  

https://www.genspark.ai

**Gensparkの検索機能**  
`https://www.genspark.ai/search?query=` の後ろに検索対象の文字列を指定すると検索結果のページへのリンクになります。

この特性を生かして**Notionの数式列**を用いて検索結果のURLを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/23063edd-c21c-c802-55c8-c0597392d238.png)

## 手直し＆ChatGPTなどの生成AIでクオリティを上げる

Gensparkで骨子ができたら、人間の手で手直しや画像の追加をします。  
正直ほとんど手直しが必要ですが、一から書くのはなかなか骨が折れるので私は助かっています。

また、手直しの中で以下の生成AIサービスを利用しています。

### ChatGPTやClaudeなど
Gensparkの生成結果の質が低い場合、**ChatGPT**などで再度整理することがあります。  
そのほかにも観点や内容の抜け漏れチェックに利用しています。

### v0
HTMLで動作するちょっとしたツールを作ったり、Mermaid図を作ったりしています。  

https://powerplatformnikki.com/v0devsupporttool

### Napkin AI
図解イラストを作成するために利用しています。  

https://powerplatformnikki.com/deathmarchpowerapps

## まとめ

ネタの管理から文章化までを一連の作業としてシームレスに進められるので、少しだけ記事を書く効率が向上した気がしています。  
特に最近は様々なツールが林立しているので、それらをうまく使いながらスイッチングコストを小さくする工夫が必要だと考えています。

自分好みにプロセスをカスタマイズしながら効率化を試してみてください。

## 元記事

https://powerplatformnikki.com/streamliningarticlecreation/
ControlDeskでInstrumentの値をPythonで参照する

## 1. はじめに
Simulinkモデルと連動していない`Numeric Input` InstrumentをPythonの変数の代入に使用することができます．
例えば，Pythonスクリプトの中に一定周期で繰り返す部分があり，その周期を可変にしたいときの入力インタフェースとして使えます．

## 2. 記述
あるInstrumentのオブジェクトは以下のコマンドで取得できます．
```python
HogeInst = Application.LayoutManagement.Layouts[レイアウト名].Instruments["Instrument名"]
```
Instrument名はPropertiesから取得できます．

Numeric Inputに入力していある数値の抽出↓
```python
value = HogeInst.Value
```

Simulinkモデルの変数であるVariableを呼び出すときはActiveVariableDescriptionを参照するのに対してLayoutManagementを参照する点が異なります．

## 3. 注意事項
Instrument名を変えない場合のデフォルトの名前がNumeric Inputだと"Numeric Input_1"みたいにNumericとInputの間にスペースが入るのでそれを忘れがちです．

## 4. おわりに
カスタムインストラメントを作って登録するところまでやりたいです．
2024年のQiitaアドベントカレンダーを振り返ってみる

こんにちは、Sakuです！
本記事は2024年アドベントカレンダー最終日の記事となります。

最終日であれば感想文でも許されるだろうということで、今回のアドベントカレンダーを簡単に振り返ってみようと思います。

## そもそもなぜ参加したか
今回アドベントカレンダーに参加したのは、以下が理由でした。
正直単純な理由ですが、笑わないでやってください:relaxed:
- たくさんアウトプットをしたい
- 面白そうだから
- 完走って響きがいい

このような機会でもないとアウトプットをすることが少なく、インプットに偏っている日常に刺激を加えるために取り組みました。

## 今回のアドベントカレンダーの成果
1人で「25記事投稿」（別のカレンダーに1記事投稿しました）
![スクリーンショット 2024-12-25 23.03.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624902/573f4597-45e8-5f51-379c-58a9cb7ef2d6.png)

ジャンルとしては、フロントエンドに関する記事が主になりました。


## 感想・学び
今回のアドベントカレンダーを通して学んだことは7つあります。
正直捻り出せばいくらでも出てきそうですが、今回のアドベントカレンダーを通してたくさんの気づきがありました。

- ネタを常日頃書き溜めておく
- キャッチアップ速度を高める
- ブログ記事のアウトラインテンプレートを作る
- とりあえず書き始める
- クリスマスは暇なくらいでちょうどいい
- 1回置いていかれるとしんどくなる
- 自分の書きたいと他の人が求めているものは違う

参加してみて特に良かったなと思えたのは、キャッチアップの重要性に改めて気づけたことです。
ブログ記事作成というアウトプットを行うためにはインプットという過程を経ることが必要ですし、高速で記事を書くためには、素早いキャッチアップが必要になります。

昨今は生成AIも普及しているためキャッチアップのハードルは下がったように見えますが、精度が100%では無い以上検証という過程が必要になります。

それらをどのように素早く行うかを考えるのが非常に楽しかったです。
ただ、質はまだまだだと思うので、今後の課題として取り組んでいきたいです。

また、もう一つ思ったことですが、「**クリスマスは暇なくらいでちょうどいい**」ということです。

正直記事作成に追われ12月あっという間に過ぎました。来年はもう少しゆったりと過ごそうとそう心に固く誓ったところで本記事を締めたいと思います。

Sakuのアドカレを読んでいただきありがとうございました！
まと次回でお会いしましょう:raised_hand:
【2024年12月】Google Colaboratory 上で mise から Erlang と Elixir をインストールして Livebook を起動する

## はじめに

以前の記事で Google Colaboratory 上に Livebook の環境を構築しました

https://qiita.com/RyoWakabayashi/items/b1d91ee5a1664ab1499d

その際には asdf を使っていましたが、 mise で同じことをやってみます

https://mise.jdx.dev/

:::note info
asdf 版と違うところだけを記載します
:::

実装したノートブックはこちら

https://github.com/RyoWakabayashi/elixir-learning/blob/main/colab/Livebook_mise.ipynb

## mise のインストール

以下のコードを実行し、mise をインストールします

```
!sudo apt update -y && sudo apt install -y gpg sudo wget curl
!sudo install -dm 755 /etc/apt/keyrings
!wget -qO - https://mise.jdx.dev/gpg-key.pub | gpg --dearmor | sudo tee /etc/apt/keyrings/mise-archive-keyring.gpg 1> /dev/null
!echo "deb [signed-by=/etc/apt/keyrings/mise-archive-keyring.gpg arch=amd64] https://mise.jdx.dev/deb stable main" | sudo tee /etc/apt/sources.list.d/mise.list
!sudo apt update
!sudo apt install -y mise
```

mise でインストールした Elixir と、 Hex でインストールした Livebook へのパスを通します

```python
import os

os.environ['PATH'] = "/root/.local/share/mise/shims:/root/.mix/escripts:" + os.environ['PATH']
```

## Erlang のインストール

Erlang の 27.2 をインストールします

```
!mise use -g erlang@27.2
```

## Elixir のインストール

Elixir の 1.18.1 OTP 27 をインストールし、バージョン確認をします

```
!mise use -g elixir@1.18.1-otp-27
!elixir -v
```

## Livebook のインストール

Livebook をインストールし、バージョン番号を確認します

```
!mix local.hex --force
!mix local.rebar --force
!mix escript.install hex livebook --force
!livebook -v
```

これ以降は asdf 版と同じです

## まとめ

mise を使うことで、 Google Colab 上の環境構築も asdf よりシンプルになりました
React nativeでアプリ名を変更

react-nativeでプロジェクトを作成したとき、iosのディレクトリ名がtempになっているので変えたい。

かといって、ios直下の変えたいディレクトリ名(temp)を変えればいいというわけではなく、他にもファイル内記述や.xcodeprojなども変えなければいけないので手動は面倒＆危険。

なのでライブラリに頼るが吉。以下を使用。

https://www.npmjs.com/package/react-native-rename

導入はいつもの如く、`npm install`で。
```
npm install react-native-rename
```
使い方は至ってシンプルですが、念の為チェックアウトしておくことと、ステージされた変更はない状態にしておいてください。自分は**コミットしていないことでエラー**が出ました。

```
git checkout -b rename-app
npx react-native-rename <新しいアプリ名>
```
または
```
git add .
git commit -m "コミットメッセージ"
git push
```

このアプリ名はXcodeでビルドするときにも関係するので、意外と重要な点になります。
特にフォルダの名前を直書きするとファイルの参照や人為的ミスにつながるので、ぜひこのライブラリを使用して安全にアプリ名を書き換えてください。

# 参考
https://qiita.com/wktq/items/1be1cf581945b06a436b
iPhoneショートカット活用術:アクションボタン編

iPhoneを使っていて、「もう少しラクできたらいいのに」と思うことはありませんか？今回は、私が実際に使っているショートカットレシピの中でも、アクションボタンに複数の機能を割り当てる方法をご紹介します。ポイントは、現在地や起動中のアプリなど、状況に合わせて違う動きをさせられるところ。ちょっとした工夫で、いろんな操作を一つのボタンにまとめられるので、QOLがぐっと上がりますよ。

---

## アクションボタンって何？
アクションボタンは、最新のiPhoneモデルに搭載されている機能で、ショートカットやアプリの起動などを瞬時に呼び出せるボタンです。標準では「無音モード」や「カメラ起動」などが設定できますが、ショートカットと組み合わせると、より自分好みにカスタマイズできます。

---

## 設定の基本手順
1. **設定アプリを開く**  
   ホーム画面から「設定」をタップします。

2. **アクションボタンを選ぶ**  
   設定メニューの中に「アクションボタン」という項目があるので、そちらをタップ。

3. **「ショートカット」を選択**  
   ここでは「ショートカット」を割り当てることで、ボタンを押したときに複数の機能をまとめて呼び出せます。

4. **ショートカットアプリで新しいレシピを作成**  
   ショートカットアプリが自動的に起動するので、「＋」ボタンなどから新規ショートカットを作ります。

---

## 条件を活用するコツ
今回のテーマは、単に「ボタンを押すと何かが起動する」だけでなく、**現在地**や**起動中のアプリ**など、状況に合わせて動きを変えること。これを実現するには、ショートカット作成画面で**「条件付きアクション」**を設定します。

- **現在地（位置情報）を条件にする**  
  たとえば、お気に入りのカフェにいるときは音楽を再生し、家に帰ったら照明をつける、といった感じで場所に合わせて動きを分岐させられます。  
  - 「位置情報」を選んで特定の場所を登録  
  - 場所が一致したら実行したいアクション（音楽や家電操作など）を設定

- **起動中のアプリを条件にする**  
  Safariが開いているときに特定のウェブサイトを開く、あるいは仕事用アプリが開いているときは通知音量を下げる、といった操作もまとめられます。  
  - 「アプリ」を選んで特定のアプリを指定  
  - アプリが起動している／いない状況で行う操作を振り分ける

---

## 具体的なレシピ例
### カフェで音楽スタート
1. **位置情報をカフェの住所に設定**  
2. **アクション**で音楽アプリを起動 & お気に入りのプレイリストを再生  
3. ボタンを押すだけで、「今いる場所がカフェなら音楽スタート」という流れを作れます。

### 仕事中は音量ダウン
1. **特定の仕事用アプリが起動していたら**という条件を設定  
2. **アクション**で「着信音量を自動的に半分にする」などの操作を追加  
3. ボタンを押すと、仕事に集中したいときの環境にワンタップで切り替わります。

---

## まとめ
アクションボタンにショートカットを設定すると、ただボタンを押すだけで複数の操作を一気にこなせます。さらに「条件付きアクション」を組み合わせれば、現在地や起動中のアプリに応じて動作を変えられるので、格段に便利になります。最初は簡単なアクションから試してみて、慣れてきたら少しずつ応用してみるのがおすすめです。

iPhoneをもっと自分好みにカスタマイズして、日常のちょっとした手間を減らしてみませんか？ぜひアクションボタンとショートカットを活用して、自分だけの快適レシピを作り上げてください。私も今後、さらに便利な組み合わせを探っていきたいと思います。
iPhoneのショートカットをActionsアプリでネクストレベルへ！

iPhoneのショートカットアプリを使って日常の作業をもっとラクにしたいという方に向けて、私が実際に活用しているアイデアのひとつをご紹介します。

今回は「Actions」アプリを使って、“タップした回数”によって実行するアクションを変えるショートカットの作り方です。たとえば、1回タップでGoogleマップを開き、2回タップで自宅への経路を検索、3回タップでLINEで到着時間を共有するといった使い分けが可能になります。

## 参考記事

より詳しい仕組みや設定方法は以下の記事をご覧ください。  

https://blog.thetheorier.com/entry/shortcuts-multitap

https://apps.apple.com/jp/app/actions/id1586435171?uo=4

## アイコンのタップ数に応じてGoogleマップで実行される処理を変える

### ショートカットの全体

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/98c43c19-f8d8-14f5-307e-fe4599028739.png)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/1bbc4e02-f6a3-2c7d-b0e7-24a5359b8f7b.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/b21d740e-2c8f-5d79-588e-0786939d7918.png)

https://www.icloud.com/shortcuts/0ba4b1a8d6e14186be84144850d49b84

上記のリンクからご自身のiPhoneに取り込むことができます。  
ChatGPTとActionsアプリをインストールしたうえで、後述の説明を参考に設定してください。

---

### 1回タップでGoogleマップを起動

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/1768f48e-93fc-6f04-0059-5de143713a9e.png)

一回タップで通常通りGoogleマップのアプリを開きます。  
このケースでは問題ないのでIfの入れ子を少なくするために分岐させていませんが、他のアプリを起動する可能性がある場合は参考記事通り条件分岐させてください。

また参考記事にもある通り、慣れるまではWaitを長めに設定しておいた方がいいです。  
とはいえ逆に300ミリ秒でも普通にアプリを起動したいときだと遅いので、頻繁に使うようなアプリだと別でアイコンを設定した方がいいかもしれません。

---

### 2回タップで自宅までの経路を表示

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/0840e831-8917-1187-f6c6-1b654d6c3722.png)  

2回タップの場合は現在地から自宅までの経路を表示します。  
初期設定の際は二つ目の現在地に自宅を設定してください。

Googleマップを利用している方でデフォルトのマップアプリをアンインストールしているとGoogleマップが選択できないので、デフォルトのマップアプリをインストールしてから初期設定をしましょう。

https://apps.apple.com/jp/app/%25E3%2583%259E%25E3%2583%2583%25E3%2583%2597/id915056765?uo=4

### 3回タップで家への到着予定をLINEで報告

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/52eb0910-3a63-0c5d-665b-cbecfe520fb0.png)
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/0d0be3cc-3431-1b82-d827-2ab6a8d3c601.png)

少し複雑ですが、まあまあ便利です。  
特にスクリーンショットからテキストを抽出→ChatGPTの流れは汎用性が高いので他のショートカットレシピでも使えると思います。

以下画像左側のスクリーンショットからテキストを抽出してChatGPTに投げると、きちんと読み込んで「16:31に帰る」という文字が返されるのでそれを家族に送ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/ad632e75-a0a3-0e98-76cd-fd274f3978e5.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618051/b46e6a23-935e-9590-f857-17f2d64d0943.png)

たまに到着時刻ではなく出発時刻を送信することがあるので、実行後は正しく出力されているか確認する必要があります。  
必要に応じてプロンプトやショートカットの処理を見直してみてください！

---

## 元記事

https://powerplatformnikki.com/shortcutsactionsapp/
米田の補題 #25 米田の補題振り返り

# 米田の補題は、圏論でもっとも重要な定理です（繰り返し）
圏論は、数学の基礎理論です。いままで、[万物の理論](https://amzn.to/3ZLmCJH)
といわれていましたが、[数理科学 11月号](https://amzn.to/4iz6NgM)では、なんと　<font color="Red">万物・万事・万人</font>のための数学理論とまでいわれるようになりました
このAdventCalendar は、体験的に圏論の最も重要な定理である米田の補題を体験的に理解してもらうためにかいています

参考にしているのは、[圏論の道案内](https://amzn.to/4iH2Rus)です

 # 米田の補題振り返り
 設定より規約が重要です。
記法がバラバラで理解困難になっています。
まず、記法をそろえましょう
（補足はまたあとで）
米田の補題 #24 自然変換の例 米田の補題

# 米田の補題は、圏論でもっとも重要な定理です（繰り返し）
圏論は、数学の基礎理論です。いままで、[万物の理論](https://amzn.to/3ZLmCJH)
といわれていましたが、[数理科学 11月号](https://amzn.to/4iz6NgM)では、なんと　<font color="Red">万物・万事・万人</font>のための数学理論とまでいわれるようになりました
このAdventCalendar は、体験的に圏論の最も重要な定理である米田の補題を体験的に理解してもらうためにかいています

参考にしているのは、[圏論の道案内](https://amzn.to/4iH2Rus)です

# 自然変換の例 米田の補題

本命の米田の補題です。
実際上は、**関係は内容よりも重要だ**の川柳を効果的につかうことが重要です。
（補足はあとで）
生成AIとウェブアプリケーションのセキュリティ分野での連携

![マインドマップ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/79373/f151cf6c-8ff9-9257-a7f5-485073695c74.png)


# 生成AIがサイバーセキュリティを強化する方法とその可能性

近年、生成AI（生成型AI）は、その高度なデータ解析能力により、サイバーセキュリティの分野で大きな注目を集めています。生成AIは、機械学習や自然言語処理を駆使して、大量のデータを解析し、複雑なパターンを検出する能力を持っています。これにより、従来のセキュリティ対策が抱える限界を補完し、より効率的で効果的なセキュリティ強化が可能となります。

本記事では、生成AIとウェブアプリケーションのセキュリティ分野における連携方法について、具体的な利用シーンとその利点を探ります。

---

## 1. 生成AIによる脅威検出と予測

### 1.1. サイバー攻撃の予測

生成AIは、過去のサイバー攻撃データを学習し、新たな攻撃パターンを予測することで、事前に対策を講じることが可能です。

- **異常検知の自動化**: サーバーログ、トラフィックデータ、ユーザー行動を監視し、通常のパターンから外れた動きを即座に検出。
- **攻撃者の行動予測**: AIモデルを利用して、攻撃者が使用する可能性のある手法やツールを分析し、予防措置を講じる。

### 1.2. 自動化された脅威インテリジェンスの提供

- **リアルタイムのインテリジェンス**: セキュリティイベントの兆候をリアルタイムで報告し迅速に対応。
- **脅威データの自動分析**: ログやトラフィックデータから攻撃パターンを抽出し、攻撃手法を予測。

---

## 2. 生成AIとウェブアプリケーションのセキュリティ対策

### 2.1. 自動化されたセキュリティテストの実行

生成AIは、ウェブアプリケーションのセキュリティテストを自動化し、効率化します。

- **コード解析の自動化**: アプリケーションコードの脆弱性を検出し、リリース前に修正。
- **動的脆弱性スキャン**: 稼働中のアプリケーションをシミュレーション攻撃で検証し、攻撃者の視点でセキュリティホールを発見。

### 2.2. フィッシング攻撃の検出

生成AIはフィッシング攻撃の検出にも役立ちます。

- **不審なドメインやメールの検出**: Webサイトやメールのコンテンツを解析し、偽のサイトやドメインを特定。
- **行動パターン分析**: ユーザー行動を学習し、通常とは異なるパターンを検出して攻撃を早期発見。

---

## 3. 生成AIによるセキュリティ教育と意識向上

### 3.1. インタラクティブなセキュリティトレーニング

生成AIは、セキュリティ教育においても重要な役割を果たします。

- **セキュリティシミュレーション**: 生成AIが作成した攻撃シナリオを通じて、開発者がリアルタイムで攻撃対処の練習を行う。
- **個別化された学習体験**: 各ユーザーのスキルに合わせてカスタマイズされたトレーニングを提供。

---

## 4. 生成AIのセキュリティリスクとその対策

### 4.1. AIによる攻撃の増加

生成AIを悪用した攻撃手法の開発が進む可能性があり、これに対処するための新たなセキュリティ対策が必要です。

### 4.2. AIセキュリティの強化

生成AIを安全に使用するには、AIシステムの監視や学習データの精査が必要です。さらに、悪用防止のためのセキュリティ層の構築も重要です。

---

## 5. まとめ

生成AIは、Webアプリケーションのセキュリティを強化する強力なツールとして、今後さらにその重要性が高まることが予想されます。脅威検出、セキュリティテスト、フィッシング攻撃の検出、セキュリティ教育など、さまざまな分野で活用可能です。ただし、利用には慎重な管理が求められ、AIが悪用されるリスクにも対応する必要があります。

生成AIをセキュリティ対策に活用することで、迅速かつ効果的な攻撃予防が可能となり、セキュリティの強化に大いに役立つでしょう。

---

## 参考リンク：生成AIとウェブアプリケーションセキュリティ

1. [OWASP: Open Web Application Security Project](https://owasp.org/)
2. [OWASP API Security Project](https://owasp.org/www-project-api-security/)
3. [MIT Technology Review - AI Security](https://www.technologyreview.com/)
4. [AI and Cybersecurity - Challenges and Opportunities](https://www.cio.com/article/284729/ai-and-cybersecurity-challenges-and-opportunities.html)
5. [Google AI Blog](https://ai.googleblog.com/)
6. [AI for Cybersecurity - A Guide to Integrating AI into Security Practices](https://www.sans.org/cyber-security-courses/ai-in-cybersecurity/)
7. [AI and Machine Learning for Cybersecurity](https://www.udemy.com/course/ai-and-machine-learning-for-cybersecurity/)
8. [Generative Adversarial Networks (GANs) and Cybersecurity](https://www.gartner.com/en/newsroom/press-releases/2020-02-25)
9. [Securing Machine Learning Systems Against Adversarial Attacks](https://www.securityweek.com/securing-machine-learning-systems-against-adversarial-attacks)
10. [Artificial Intelligence in Cybersecurity](https://www.ibm.com/security/artificial-intelligence)
関数の呼び方（名前空間の参照 vs 関数名そのまま）

ReactNativeで開発している時ふと感じた、関数呼び出しに関する疑問を解消するため備忘録。

（tts機能を例に、）関数呼び出しの仕方が次の二つで何が違うのかをみていきたいと思います。
（名前空間の参照か、関数名そのまま使いたいかによる違い）
```typescript
// {}内関数名を呼び出し
import { speakText, stopText, initializeTts, removeTtsListeners } from './utils/ttsUtils';

// ttsUtils.tsに記述されている関数名をそのまま呼び出し
import * from './utils/ttsUtils';
```

# import * as を使用する例

import * as を使用することで、モジュール内のすべてのエクスポートを名前空間としてまとめてインポートすることができる。その場合、ttsUtils.ts 内の関数を名前空間から参照して呼び出す形になる。

```tsx
import * as TTSUtils from './utils/ttsUtils';

const AnotherComponent: React.FC = () => {
  return (
    <View>
      <Button title="Speak" onPress={() => TTSUtils.speakText('Hello, world!')} />
      <Button title="Stop" onPress={TTSUtils.stopText} />
    </View>
  );
};
```

メリット：競合防止

他のモジュールから同じ名前の関数をインポートする場合、名前空間を使うことで競合を回避できます。

```tsx
TTSUtils.speakText(); // text-to-speech
ITSUtils.speakText(); // image-to-speech
GTSUtils.speakText(); // gesture-to-speech
```

デメリット：冗長になる可能性

関数を呼び出すたびに名前空間を明示する必要があり、文字列が長くなる場合が多い（例: `TextToSpeechUtilities.speakText()`）。

# 関数名をそのまま使いたい場合

もし関数名をそのまま呼び出したい場合は、`import * as`ではなく、個別にインポートする方法が適切である。

```tsx
import { speakText, stopText } from './utils/ttsUtils';

const AnotherComponent: React.FC = () => {
  return (
    <View>
      <Button title="Speak" onPress={() => speakText('Hello, world!')} />
      <Button title="Stop" onPress={stopText} />
    </View>
  );
};
```

**メリット：コードの簡潔さ**

直接インポートして使用するため、読みやすく記述量が減る。

デメリット：**依存の明示性が低下**

関数が外部依存であることがコンポーネント内部から見えにくい。

# どちらを使うべきか

少数の関数や値を使う場合は、個別インポート`import { speakText, stopText }`を使う方がシンプル。

多くの関数や値を使う場合は、名前空間インポート`import * as TTSUtils`を使うほうが管理しやすそう。

というように、実装時のニーズに応じて使い分けると良いでしょう。
iPhoneショートカット活用術：ショートカット編

iPhoneのショートカットアプリを活用すると、ちょっとした操作をまとめて自動化できるので、日常生活がぐんと楽になります。今回は、私が実際に使っているレシピをいくつかご紹介します。どれも簡単に作れるので、ぜひ試してみてください。

---

## ショートカットアプリとは？
iPhoneに標準搭載されている「ショートカット」アプリは、複数の操作をまとめて一度に実行できる便利なツールです。たとえば、特定の時間に音楽を再生したり、位置情報をきっかけにしてメッセージを送信したりといったことが、ワンタップや自動でできるようになります。私の場合は、ちょっとした手間を省いて生活の質（QOL）を上げることを目標にレシピを作っています。

---

## 私が実際に使っているショートカットレシピ

### 1. 「おはよう」ショートカット
**朝の時間を効率化するためのショートカット**です。私は以下のアクションをまとめています。

1. 現在地の天気予報を読み上げる  
2. 今日のカレンダー予定を表示  
3. 好きな音楽プレイリストを再生  

朝のルーチンを一括でスタートできるので、目覚めから活動開始までがスムーズになります。

---

### 2. 「家事リマインダー」ショートカット
家事のやり忘れがないように工夫したショートカットです。たとえば、掃除や洗濯の曜日・時間が近づくと、自動で通知を受け取れるようにしています。

- **アクション例**  
  - 毎週◯曜日の午前中に「洗濯物は大丈夫？」と通知を送る  
  - 毎週◯曜日の夜に「明日ゴミ出しの日だよ」と知らせる  

通知を受け取ると、そのままタップしてタスクアプリに飛べるように設定しておくと忘れにくくて便利です。

---

### 3. 「移動をスマート化」ショートカット
出先での移動を効率的にするために作りました。たとえば、職場を出るときに自動で家族へメッセージを送るようにしています。

- **トリガー**  
  - 職場を離れた位置情報をきっかけに実行  
- **アクション例**  
  - 現在地から自宅までの所要時間を計算  
  - 家族へ「今から帰るよ」とメッセージ送信  

毎回手動で連絡する手間が省けて、家族にも帰宅時間を伝えやすくなりました。

---

### 4. 「お気に入りアプリ起動」ショートカット
よく使うアプリをワンタップで開けるようにしています。これだけだと大したことないように見えますが、複数のアクションを追加すると意外と便利です。

- **アクション例**  
  1. 指定のアプリを起動  
  2. 同時に通知音量を少し下げる（会議中でも使える）  
  3. さらに必要があればメモ帳にスムーズに移動  

「アプリを開くだけ」でも、必要に応じてまとめられるアクションが多いので、自分好みにカスタマイズしてみてください。

---

## ショートカットで気をつけるポイント
- **アクションの順序**  
  - レシピの流れが正しいか、動作が止まる部分がないかを確認しましょう。  
- **権限設定**  
  - 位置情報や通知など、必要な権限が許可されているかチェックしてください。  
- **トリガー（自動化のきっかけ）**  
  - 時間、位置情報、アプリの操作など、自分が使いやすいトリガーをうまく選ぶとさらに快適になります。

---

## まとめ
iPhoneのショートカットアプリは、ちょっとした工夫で驚くほど生活を便利にしてくれます。最初は既存のレシピを試してみて、そこに少しずつアクションを追加するのもおすすめです。慣れてきたら、毎日の習慣やちょっとした手間を自動化して、自分だけの“QOL向上ショートカット”を作ってみてください。  

今回紹介したレシピも、ぜひ参考にしてもらえたらうれしいです。自分の生活スタイルに合わせたショートカットを見つけて、日々の効率をアップさせてみましょう。
米田の補題 #23 自然変換の例 hom関手間の自然変換

# 米田の補題は、圏論でもっとも重要な定理です（繰り返し）
圏論は、数学の基礎理論です。いままで、[万物の理論](https://amzn.to/3ZLmCJH)
といわれていましたが、[数理科学 11月号](https://amzn.to/4iz6NgM)では、なんと　<font color="Red">万物・万事・万人</font>のための数学理論とまでいわれるようになりました
このAdventCalendar は、体験的に圏論の最も重要な定理である米田の補題を体験的に理解してもらうためにかいています

参考にしているのは、[圏論の道案内](https://amzn.to/4iH2Rus)です

# 自然変換の例 hom関手間の自然変換
自然変換は、対象２の圏の間のhom関手で考えるがいいとわりきりましょう。
（補足はあとで）
スコア記録Chrome拡張の作り方（構想）

## 1. はじめに
Webサイト上のタイピングスコアなどの数値データをタイムスタンプ付きでスプレッドシートに保存するプロジェクトです．

タイピングは速ければ速いほどいいという信念のもと，寿司打とかPoPタイピングとかちょくちょくやっています．
このままでもゲーム感覚で楽しめるのですが，成長記録があるとより一層打ち込めると思う今日この頃．
[Typing Club](https://www.typingclub.com/sportal/)というサイトは記録が残るので良いのですが，日本語入力の練習にはならないのが残念なところ...（日本語コースは1つあるのですが入力方式が固定されていて不愉快）
数値がhtml内に埋め込まれればいいのですがjavascriptベースだと見えないので一筋縄に行かないんですよね．

一端構想で止めておきます．

## 2. 構想
(1) Chrome拡張起動
　↓
(2) html画面表示
　モード選択
　- スコア数値の範囲選択機能
　- 既定のサイトはhtmlタグあたりから自動設定
　↓
(3) OCR
tesseract.min.jsを使用
(4) スプレッドシートに送信
- サイトごとにシートを分ける

## 3. 手順
### (1) スプレッドシート用意
### (2) GAS
### (3) ライブラリダウンロード
### (4) フォルダ

## 3. 注意事項
- ×インラインスクリプト
<TouchableOpacity>と<Button>の違い、使い分け

React Nativeでボタンを作成する際、**TouchableOpacity**と**Button**のどちらを使うべきか迷うことがあります。それぞれのコンポーネントには異なる特徴と用途があり、シーンに応じて適切に選ぶことが重要です。本記事では、その違いを詳しく解説します。

# **1. 概要**

**TouchableOpacity**

- **カスタマイズ性が高いタッチ可能エリア**
- タッチすると、不透明度が変化するアニメーションが適用される
- 中にカスタムコンポーネント（例えば、TextやImage）を自由に配置可能

**Button**

- **シンプルなプリセットボタン**
- プラットフォームごとにネイティブの見た目が適用され、基本的なボタンとしての動作がすぐに利用可能

# 2. 両者の違い
記法の違いは以下。
```jsx
<View>
	<TouchableOpacity style={styles.button} onPress={() => alert('Pressed!')}>
         <Icon name="sound" size={24} color="#007bff" />
	</TouchableOpacity>
	
	<TouchableOpacity style={styles.button} onPress={() => alert('Pressed!')}>
         <Text style={styles.text}>Title: Open</Text>
    </TouchableOpacity>
	
	<Button
        title='Open'
		onPress={() => toggle(index)}
		color="#007bff"
	/>
</View>
```

**TouchableOpacityを選ぶべき場合**

- ボタンのデザインをカスタマイズしたい（styleの適用）
- テキストだけでなく、アイコンや画像を含めたい（<Icon>の追加等）
- ボタン以外の要素（例えばカスタムカードやリストアイテム）でタッチ可能な領域を作りたい

**Buttonを選ぶべき場合**
- シンプルなボタンで十分な時
- ネイティブなプラットフォームのスタイルをそのまま利用したい。
- カスタマイズが不要で、すぐに使えるボタンが欲しい（プロト開発等）
# まとめ
TouchableOpacityは柔軟性が高く、ボタン以外の用途にも利用可能です。一方、Buttonは迅速に実装できる標準的なボタンとして便利です。どちらを使うかによって使えるオプションも異なるので、**UIデザインの要件**と**開発効率**に応じて選びましょう！！