英語版の「幸せなら手を叩こう」でスクリプトを組んでみた

# はじめに
## 前置き
* 本記事は [Qiita Advent Calendar 2023](https://qiita.com/advent-calendar/2023) の [FileMaker Advent Calendar 2023](https://qiita.com/advent-calendar/2023/filemaker)  17 日目記事です。

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

https://qiita.com/advent-calendar/2023/filemaker

## 対象読者
* [Claris FileMaker](https://www.claris.com/ja/) ユーザ
* ネタをネタとして許容できる人

## FileMaker とは？
https://www.claris.com/ja/

> モダンで幅広い業務に対応できる拡張性の高いカスタム App を作成

することが可能なもの、とのことです。
ただ、本記事ではまったく「幅広い業務に対応」する気はありません。

## FileMaker 動作環境
* FileMaker Pro 20.3.x
  * 19 以前でも動作するはずです

## 自己紹介
* 株式会社きみよりで代表をしています 野口啓之 / Hiroyuki Noguchi / Hi-Noguchi です
    * IT を中心とした DX コンサル／顧問などやっております
    * FileMaker については、内製化支援・トレーニングや 1on1 でのペアプロなど対応しています

https://kimi-yori.co.jp/

# 「幸せなら手をたたこう」とは
## 日本語版
みんな大好き Wikipedia によると、

> 日本では1964年に坂本九が歌ってヒットした。童謡としても親しまれている。

> 作詞は早稲田大学人間科学部名誉教授の木村利人。元々は木村が学生時代フィリピンでボランティア活動をしていた際に原曲を耳にし、木村が帰国の途に着いた際に、旧約聖書の詩篇47篇を参考にして詞をつけたものが元になっている。

https://ja.wikipedia.org/wiki/%E5%B9%B8%E3%81%9B%E3%81%AA%E3%82%89%E6%89%8B%E3%82%92%E3%81%9F%E3%81%9F%E3%81%93%E3%81%86

とのことです。
作詞をされた木村さんはまだご存命のようで、詞の著作権も存続されていますね。

## 英語版
では英語版を見てみるとどうでしょう。

> Like many children's songs, there are many versions of the lyrics. A popular version goes as follows:

として、

> If you're happy and you know it, clap your hands!
If you're happy and you know it, clap your hands!
If you're happy and you know it, and you really want to show it;
If you're happy and you know it, clap your hands!

一般的な歌詞が公開されていました。
はい、これを使えば著作権問題は回避されるはず！
引用元は Wikipedia です（むかしむかしはこんなこと言うと怒られる時代があったものです）

https://en.wikipedia.org/wiki/If_You%27re_Happy_and_You_Know_It

## で？　結局なに？
If 文ですよね、これ。この詞。

なので（？）　FileMaker で If 文の実装をおこなって、再現してみましょう！
という、深夜のおかしなテンションで書かれる記事です。

# データベースの準備
テーブルに `is_happy` フィールドを作る。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/7d80729e-46cb-2029-f18a-c86b78900474.png)

# レコードの準備
`is_happy` フィールドが `1` のものとそうでないものを用意する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/ca3a3bcf-1ce8-c855-a6cf-3397edf9ce17.png)


# スクリプト作成
## 最初の確認
それでは、歌詞に従ってスクリプトを作っていくわけですが……
よく歌詞を見てみてください。

> If you're happy and you know it, clap your hands!

条件文です。
`If you're happy` だけではないのですよね。
かつ `you know it` なのですよね。
この二つの条件が満たされなければ、手を叩いてはいけません！

英語のニュアンスや語用ではないのです、ここは厳密に書かれている通りに解釈するのです！

従って `is_happy` の値が確認できるようにしなくてはなりません。
また、値が確認できないにもかかわらず手を叩いたら、違反ということでスクリプトを終了させるべきだと思いました、はい。

## 第 1, 2 フレーズ
ということで、以下のように作ります！　まず最初の二つのフレーズです。

> If you're happy and you know it, clap your hands!
If you're happy and you know it, clap your hands!

一つ目の判定は以下のようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/1bdf338a-e9de-b2d1-14b3-f95fa073d52b.png)

二つ目の判定は以下のように。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/2441a3a8-5e3a-e1ad-ec6d-63df089f64e6.png)

この二つのフレーズは単純な繰り返しになるので、一つ目のカスタムダイアログでは `is_happy` の値をダイアログ内に表示しますが、二回目では表示させないようにしてみました。
これにより、ダイアログで手を叩いてよいかどうかの判定が変わります。

そして、手を叩くべきでないのに叩いたら、`アウトォーッ！` というスクリプトを実行させます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/22c9ed3e-dfbb-0e54-51a8-0b5983dc45fd.png)

## 第 3 フレーズ
さて、三フレーズ目はどう解釈して実装しましょうか。

> If you're happy and you know it, and you really want to show it;
If you're happy and you know it, clap your hands!

本当に示したいなら、という条件であり、ここに命令文はないのですね。
つまり、最終的な命令文は四フレーズ目の最後に来るので、手を叩かせる前に最終確認をおこなうようにすればよいと解釈できます。
ということで、以下のようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/3bd7756a-c1db-56ba-3743-8c5a68bf4953.png)

本当に幸せであることを示したいかどうか尋ねているのに、手を叩いたらアウトです。
また、幸せでないのに、頷いてはいけません。
そして、幸せであることを示さないという意思を選んだ場合には `is_silent` 変数に `1` を入れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/72290bd3-d6bc-6644-a8c4-38ab37992888.png)

## 第 4 フレーズ
最後の第四フレーズです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/74fbeee3-98fa-3bec-cd8c-ca1c5161a904.png)

幸せなのに手を叩かないのはいけませんし、幸せでないのに手を叩いてもいけません。
また、先ほど幸せであることを示さなかったのに手を叩くのもアウトです！

ということで、スクリプトは完成しました！


# 動作確認
## 幸せである場合
### 第 1 フレーズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/edb03b75-7955-fbad-2bf7-5ea23aa5945f.png)

手を叩くと進む。
手を叩かないと終了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/523f1887-1d6b-77dd-f444-5293468a70b2.png)

### 第 2 フレーズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/c34e5ee6-d82c-3183-1b71-5ab820e52173.png)

手を叩くと終了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/523f1887-1d6b-77dd-f444-5293468a70b2.png)

手を叩かないと進む。


### 第 3 フレーズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/2e8d9c54-33ed-d1f4-0e8e-08303e5d0e91.png)

手を叩くと終了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/523f1887-1d6b-77dd-f444-5293468a70b2.png)

`はい` で進む。
黙ってると `is_silent` 状態になる。

### 第 4 フレーズ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/edb03b75-7955-fbad-2bf7-5ea23aa5945f.png)

`is_silent` 状態でなく、手を叩くと完了！

手を叩かないと終了。
または `is_silent` 状態なのに手を叩くと終了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/37739/523f1887-1d6b-77dd-f444-5293468a70b2.png)


## 幸せでない場合
ちゃんと動きまして、上記の逆になります！


# 後書き
## 雑感
* 別の記事を書く予定だったのですが、時間がなくて代替で変な記事を書きました。
* ……で、手抜き記事にしようと思ったのに、どうして一時間かけてるんだろう🤔
* 書いた後でちょっと検索してみたら、何と似たようなことを考えていた人が過去にもいらっしゃいました。人類ー！

https://qiita.com/AnPanda/items/80a679770917dd79ea68

## 紹介
※2023/12/20 追記

元後輩 @hosaka_ が 20 日目の記事として別のものを叩いていました。
OpenAI API を叩く方がだいぶ実用的ですね。

[OpenAI APIをFileMakerから叩いて遊ぶ（JSONモード／Vision API（画像認識）／DALL-Eの画像生成）](https://qiita.com/hosaka_/items/c50eb5ece324f7b8bec2)

https://qiita.com/hosaka_/items/c50eb5ece324f7b8bec2

> APIを「叩く」という表現、ちょっと暴力的ですね。本記事では肩をトントンとするように、APIは優しく叩くことを心がけています。

確かに、叩いたり蹴ったり kill したり色々と物騒ですよね IT 界隈。

[不思議の国のSE用語](https://qiita.com/t_nakayama0714/items/478a8ed3a9ae143ad854)

https://qiita.com/t_nakayama0714/items/478a8ed3a9ae143ad854

私は最近しばしば「食べさせる」を使っています。
例文としては、

> ChatGPT の GPTs にナレッジを登録する

↓

> ちゃっぴーに食べさせる

こんな感じです。「チャッピー、エサ」（某南国少年風に）