はじめに
前書き
-
@Nemesis さんの Javaで湯婆婆を実装してみる
記事に端を発した流行から早一ヶ月ほど経った今さらのリスペクト記事になります -
FileMaker Advent Calendar 2020 の 4 日目記事です
- ちなみに 湯婆婆 Advent Calendar 2020
というのもありました!
- ちなみに 湯婆婆 Advent Calendar 2020
注意書き
-
@Nemesis さんの Javaで湯婆婆を実装してみる
記事より引用
この記事は映画「千と千尋の神隠し」のネタバレになる可能性があります。「大丈夫!」って人だけ下に進んでください。
対象読者
- Claris FileMaker Pro ユーザー/興味ある方
- 湯婆婆ネタマニア
FileMaker Pro の tips として学べること
- スクリプト作成の基本
- カスタムダイアログによる入力受け付け
- If 分岐と早期終了
- ローカル変数/グローバル変数/マージ変数の使い方
- Random 関数 と Middle 関数
- スクリプトトリガの使い方
実行環境
- Windows 10 Pro
- FileMaker Pro 19.1.3.315
仕様
基本要件の確認
- 名前の入力を受け付ける
- 入力された文字列の中から一文字だけ抽出する
- 抽出された一文字を返す
- 入力値が空欄の場合はクラッシュさせるというのが元ネタへの厳密なるリスペクトになるが、今回はエラー処理まで入れることとする
フローをもう少し具体的に
- テキストの表示
- 湯婆婆「契約書だよ。そこに名前を書きな。」
- ユーザー操作
- 名前の入力
- バックグラウンドの処理
- 名前が空欄だったら入力を受け付けないようにする
- 空欄でなければ次へ進む
- テキストの表示
- 名前が二文字以上の場合
- 湯婆婆「フン。●●●●というのかい。贅沢な名だねぇ。」
- 次へ進む
- 名前が一文字以下の場合
- 湯婆婆「フン。●というのかい。」
- ここで終わらせる
- 名前が二文字以上の場合
- バックグラウンドの処理
- 入力された名前の中から一文字だけ抽出
- テキストの表示
- 湯婆婆「今からお前の名前は●だ。いいかい、●だよ。分かったら返事をするんだ、●」
実装
カスタムダイアログでの入力と表示
- まずはカスタムダイアログだけで入力を受け付け、結果の表示をします
最初に完成形と結果
- スクリプト全体
- 名前を入力
- 贅沢な名と言われる
- 新たなる名を与えられる
- 新たなる名はランダムで付与される
- 名前が一文字の時はそのまま
- さて、では実際の実装を一つずつおこなっていくことにしましょう
テーブルとフィールドの用意
-
yubaba
テーブルに、グローバルのテキストフィールドg_txt
を用意します
スクリプトの作成
-
湯婆婆_カスタムダイアログ
スクリプトを作成 - スクリプトステップ
カスタムダイアログを表示
追記- 一般 タブ
- タイトルに
"湯婆婆"
- メッセージに
"「契約書だよ。そこに名前を書きな。」"
- デフォルトボタンのみ
- キャンセルは受け付けない! 質問には答える。
- タイトルに
- 入力フィールド タブ
- 入力フィールド 1 に
yubaba
テーブルのg_txt
フィールドを指定
- 入力フィールド 1 に
- 一般 タブ
- スクリプトステップ
変数を設定
追記- 名前に
$input_name
- 値に
yubaba
テーブルのg_txt
- 名前に
- スクリプトステップ
フィールド設定
追記
*yubaba
テーブルのg_txt
- 計算式を
""
にして早々に値リセットしておく
- 計算式を
- スクリプトステップ
変数を設定
追記- 名前に
$count_input_name
- 値に
Length ( $input_name )
- 名前に
- スクリプトステップ
変数を設定
追記- 名前に
$interruption
- 値に以下計算式
- 名前に
If (
$count_input_name ≤ 1;
True;
False
)
- スクリプトステップ
変数を設定
追記- 名前に
$yubaba_output_1
- 値に以下計算式
- 名前に
"「フン。" & $input_name & "というのかい。" &
If (
not $interruption;
"贅沢な名だねぇ。"
) &
"」"
- スクリプトステップ
カスタムダイアログを表示
追記- 一般 タブ
- タイトルに
"湯婆婆"
- メッセージに
$yubaba_output_1
- デフォルトボタンのみ
- 頷くのみ。
- タイトルに
- 一般 タブ
- スクリプトステップ
If
End If
追記- If 条件は
$interruption
- スクリプトステップ
現在のスクリプト終了
追記
- If 条件は
- スクリプトステップ
変数を設定
追記- 名前に
$output_name
- 値に以下計算式
- 名前に
Let (
[
pos = Int ( $count_input_name * Random ) + 1
];
Middle ( $input_name ; pos ; 1 )
)
- スクリプトステップ
変数を設定
追記- 名前に
$yubaba_output_2
- 値に以下計算式
- 名前に
"「今からお前の名前は" & $output_name & "だ。いいかい、" & $output_name & "だよ。分かったら返事をするんだ、" & $output_name & "」"
- スクリプトステップ
カスタムダイアログを表示
追記- 一般 タブ
- タイトルに
"湯婆婆"
- メッセージに
$yubaba_output_2
- デフォルトボタンのみ
- 頷くのみ。
- タイトルに
- 一般 タブ
- 以上で完了!
レイアウトでの入力と表示
- 次にレイアウトで入力を受け付け、結果の表示をするようにしてみます
最初に完成形と結果
- スクリプト全体
- 名前を入力する前
- 名前を入力して確定すると(フィールドからカーソルを外すと)贅沢な名と言われ、新たなる名を与えられる
- 新たなる名はランダムで付与される
- 名前が一文字の時はそのまま
- さて、では実際の実装を一つずつおこなっていくことにしましょう
レイアウト作成
- 湯婆婆の素材画像を 公式サイト から拝借する
※画像は常識の範囲でご自由にお使いください。
- 湯婆婆の素材画像をレイアウトに貼り付ける
- 名前入力のために
g_txt
フィールドを置く- 適当に白い背景をセットしたりラベルテキストを付けたりする
- マージ変数
<<$$yubaba_output>>
を置く - レイアウトモードで確認
- もっと契約書っぽいレイアウトにしたければしてもヨシ
スクリプトの作成
- スクリプトステップ
If
End If
追記- If 条件は
IsEmpty ( yubaba::g_txt )
- スクリプトステップ
変数を設定
追記- 名前に
$$yubaba_output
- 値に
"「契約書だよ。そこに名前を書きな。」"
- 名前に
- スクリプトステップ
ウインドウ内容の再表示
追記 - スクリプトステップ
現在のスクリプト終了
追記
- If 条件は
-
$input_name
,$count_input_name
変数を設定するスクリプトステップを、先にカスタムダイアログで作成したスクリプトからコピーしてきてペースト- 中身はそのまま
- スクリプトステップ
If
End If
追記- If 条件は
$count_input_name ≤ 1
- スクリプトステップ
変数を設定
追記- 名前に
$$yubaba_output
- 値に
"「フン。" & $input_name & "というのかい。」"
- 名前に
- スクリプトステップ
ウインドウ内容の再表示
追記 - スクリプトステップ
現在のスクリプト終了
追記
- If 条件は
-
$output_name
変数を設定するスクリプトステップを、先にカスタムダイアログで作成したスクリプトからコピーしてきてペースト- 中身はそのまま
- スクリプトステップ
変数を設定
追記- 名前に
$$yubaba_output
- 値の計算式は以下
- 名前に
"「フン。" & $input_name & "というのかい。贅沢な名だねぇ。」" & ¶ &
"「今からお前の名前は" & $output_name & "だ。いいかい、" & $output_name & "だよ。分かったら返事をするんだ、" & $output_name & "」"
- スクリプトステップ
ウインドウ内容の再表示
追記
スクリプトトリガの設定
-
レイアウト設定
のスクリプトトリガ
タブにてOnLayoutEnter
でスクリプト湯婆婆_レイアウト
- 設置したフィールド
g_txt
のスクリプトトリガ設定にてOnObjectExit
でスクリプト湯婆婆_レイアウト
- 以上!
おわりに
雑感
- 私はいったい何をやっているんだろう……?
- FileMaker Pro 楽しいと思っていただけたら幸い!
2020/12/15 追記
- @tyuma さんによる FileMaker Go の QR コードを使ったさらに素敵で楽しい実装例の記事はこちらです!