入社から1ヶ月ぐらいで Claris FileMaker オンライン学習中級編を観た話

# 概要
* 新人研修の教材として [Claris FileMaker オンライン学習 中級編](https://content.claris.com/ja-e-learning-b-index) の動画を Youtube で視聴した
* ユーザーから開発者見習いレベルまでの知識を身につけられる 
* ユーザーとしてはしっかり自立して FileMaker を活用できるようになる
* 初級編で未解決・もやもやとしていた部分がかなり解決された（個人の感想）


参考（前回）：[入社から1ヶ月で Claris FileMaker オンライン学習 初級編を観た話](https://qiita.com/s_yarma/items/8cd4a26a71eefcb80d3f)

# この記事について

この記事は[過去の記事](https://qiita.com/s_yarma/items/8cd4a26a71eefcb80d3f)の続編で、 
Claris FileMaker（以下 FileMaker）について Claris 社が公開しているオンライン学習動画のレビュー記事です。

前置きのお話を少しだけしたのちに、いくつかの章を 1 つのまとまりにして（時には 1 つの章でひとまとまり）演習を一部引用しながら内容の要約をしていきます。


初級の際にも書きましたが、動画中で扱う演習に関しては公式が提供している演習ファイルが
ほぼ必須になるので、どうしてもダウンロードしたくない人以外は是非活用してください。

# 中級編のレベル感〜初級編と比べて〜
初級編は**「とりあえずどこに何があるかがわかる」**ことが目標になっていました。

FileMaker を使う上で、基本的な検索の他にレイアウト上でボタンを設置するなど、
見た目でわかりやすい部分についてはしっかりとフォローされていましたが、
一方でリレーションという概念についてや、（比較的）高度なスクリプトや集計など
データそのものについてのやりとりについては初級編ではあまり深いところまで触れられていませんでした。

「ユーザーとして最低限の操作ができて、ちょっと高度なことについては単語は知ってて
どこからいじれるかはわかっておきましょう」が初級編のゴールのレベル感です。

それに対して中級編では FileMaker ではどのようにデータが扱われ、どのように活用するべきかという設計レベルの視点を持つために必要な事項を学習します。

**「ユーザーとしては十分独り立ちできて、比較的複雑なデータベースの構造についても思考の大枠が完成する」**レベルが中級のゴールです。

野球で例えると、

初級編
* キャッチボールができる
* バットの素振りができる
* 簡単なフライとゴロの処理ができる
* 必要最低限のルールを覚えている

中級編
* 実際のプレーでフライとゴロの処理、守備の連携の動きができる
* マウンドからピッチャーが投げたボールに反応できる
* 状況ごとにどの戦略を取るべきかを考えられる
（ただし各項目のクオリティーはプロレベルまでは問わない）

といった感じでしょうか。（逆にわかりにくい……？）

上級編は監督やコーチなど首脳陣として働く際に必要な事項があるように見受けられます。

# 中級の内容の概説

## イントロダクション（ はじめに・1 ~ 3 章、 No. 1 ~ 4 ）
河村さんの自己紹介と開発者として気にしなければならないことについて。

演習がない分、しっかりとテキストを読むことを推奨。

## リレーションシップ（ 4, 5 章、 No. 5 ~ 19 ）
リレーションシップについて初級編で説明しきれなかったところまでしっかりと解説。

テーブル、テーブルオカレンス、レイアウトの違いと役割や、一対多、多対多の関係などリレーションシップに関する必須知識を整理できます。

初級編ではあまり深く説明せずに演習を通して経験ベースで学んでいきましたが、ここで座学的に概念を理解していきましょう。

ユーザーだから中級編はいいか……と思った方でも、**中級編は全部見なくてもいいので、初級編を見終わったら 5 章までは見た方が確実に理解が深まります。**

絶対にここまでは見ましょう、絶対に（初級編だけで終わる人へ届かない願い）。

### 演習の例

5 章 No. 16 より。
料理と材料、そして食材に関する演習ファイルを用います。
料理はカレー、ハンバーグなど。食材はにんじん、たまねぎなど。
材料は料理の外部キーと食材の外部キーを持ち、どの料理にどの食材をどれだけの分量や調理法の説明の情報を持ちます。
![スクリーンショット 2021-05-20 11.10.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/7d5c0482-0ade-3d7b-6a5f-c3a8d058ae7b.png)

テーブルオカレンスの命名法やリレーションの結び方もアンカー・ブイモデルを採用して見やすくすることを演習中で強く意識しています。

さて、「料理」テーブルオカレンス上にあるレイアウト「料理と食材」に食材についてのポータルを作成します。

![スクリーンショット 2021-05-20 11.08.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/c9f366d5-731d-5889-1082-c34eb08ead72.png)

アンカー・ブイモデルに従って命名しているので、親子孫の関係が一目瞭然です。

こうしてできたポータルの「説明」と「分量」にそれっぽい値を入力してみます。

すると主キーと料理外部キーが自動で入力され、
![スクリーンショット 2021-05-20 11.41.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/daf19fc2-4f2a-99cb-86c8-33f77554b832.png)

「料理_材料」レイアウトを表形式で確認すると（フィールドは適宜追加）、
先ほど入力した内容のレコードが作成されていることがわかります。

![スクリーンショット 2021-05-20 11.43.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/8b985996-7d02-48bf-bb21-43ec4f65bb18.png)

ここで、料理外部キーは自動で入力されている一方で、食材外部キーにはなにも入力されていないことを確認しておきましょう。

料理と材料レイアウトの食材外部キーに値を入力すると、
食材外部キーで対応している食材名が自動で入力されることがわかります。

![スクリーンショット 2021-05-20 11.45.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/028aba7d-07b0-cbea-53ba-7d27a02ddb3a.png)

（かぼちゃのみじん切り……？？？）

一方で、ポータルの 2 行目の食材外部キーを最初に入力すると、
主キー、料理外部キーだけでなく、食材名も自動で入力されています。
![スクリーンショット 2021-05-20 11.47.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/61f6a654-813b-0a72-06dc-5b6d7715cc69.png)

どのフィールドが自動で入力できるのか、どのフィールドを入力するべきなのかはリレーションの親子関係の方向性とどのテーブルオカレンス上のレイアウトであるかで決まってくるのでしたね。

## フィールド中級編（ 6, 7 章、 No. 20 ~ 37 ）
フィールドについて、初級編では「数字やテキスト、計算などの形式がある」程度の最低限の説明でしたが、
ここではもう少し踏み込んで、入力の自動化と制限や、索引やグローバル格納についてなど、
目的に沿ったフィールドの設定とその仕組みを理解できるようになることを目的とします。

### 演習の例
7 章 No. 28 より。
フィールドの索引設定について確認します。
様々な商品情報を管理する「商品情報」テーブルの中の「商品説明」テーブルについて見てみます。

「索引」の設定を見てみると、デフォルトでは索引設定が「なし」で言語が「日本語」になっています。

![スクリーンショット 2021-05-20 11.57.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/49c7061d-f8f6-e510-4f74-c2594e002882.png)

一度データベース管理を閉じ、検索モードに行きます。
商品説明フィールドに「翌日」というワードで検索をすると 4 件が対象レコードとなります。

ここでもう一度フィールドの索引設定を見てみると、索引設定が「最小限」になっています。ここでは単語の索引が付与されている状態になっています。

![スクリーンショット 2021-05-20 12.00.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/a15c1c70-4ef1-6c49-46d1-3a7a6c71e026.png)

索引の内容を確認してみましょう。
すべてのレコードを表示し、商品説明のフィールドにカーソルを入れて 挿入 > 索引一覧 を開きます。

![スクリーンショット 2021-05-20 12.04.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/3e3fe2b6-d631-d0d3-d893-16a32e2199c8.png)

「単語一語で表示」にチェックを入れると、大量の索引があることがわかります。

## レイアウト中級編（ 8, 9 章、 No. 38 ~ 70 ）
初級編でもレイアウトについてはしっかりと扱いましたが、開発者の目線で

**どのようにすればすべてのユーザーがわかりやすく正しい操作ができるか**

という問題意識のもとでレイアウトに関する事項を学びます。

### 演習の例
9 章、 No. 55 より。

「見積管理」テーブルオカレンス上にある「見積詳細」レイアウトで動作をする値一覧を考えます。

ファイル > 管理 > 値一覧 から新規に「商品リスト」という値一覧を作成します。
フィールドの値を使用するので、「フィールドの指定」ボタンを押して使用するフィールドを設定していきます。

![スクリーンショット 2021-05-20 12.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/64299681-4e73-58ee-92b2-af44fce25738.png)


値としては商品管理テーブルオカレンスの主キー、表示する値としては主キーのままだとわかりずらいので、新たにフィールドを設定します。


「商品情報」テーブルにc_商品番号と商品名（商品番号と商品名を連結した計算フィールド）を作成します。

値一覧の設定としては、すべての値を含め、最初の値（主キー）を使ってソートしている。

「すべての値を含める」とした場合にはどのレイアウトにいても使える値一覧であるということに注意しましょう。

## 関数と計算式（ 10 章、 No. 71 ~ 105 ）
フィールドの様々な設定に注意をしながら、主に実用的な計算（フィルタや条件分岐など）や変数の扱い方について学習します。

### 演習の例
10 章、 No. 77 より。
「見積詳細」レイアウトについてレイアウトモードに入ります。

右側にある「注文あり　注文なし」のラジオボタンについて表示/非表示の切り替えを関数を用いて実装してみます。

![スクリーンショット 2021-05-20 12.35.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/76357b43-62cf-25a9-f9f5-811a712f61dd.png)

右パネルのデータタブ内、「次の場合にオブジェクトを隠す」からオブジェクトを隠す条件を編集します。

一致しているかどうかを ```Exact``` 関数で判定します。比較する 2 つの値は
見積管理::見積状況 と "結果確定済" という値に設定します。

しかしこのままだと一致するときに隠してしまうので、逆に一致していないときに隠すように ```Exact``` の前に ```not``` を入れて否定をします。

![スクリーンショット 2021-05-20 12.34.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/6042e058-00d1-1520-339d-6f2315525e15.png)


こうすることで見積状況が「結果確定済」**ではない**場合にオブジェクトを隠すようになります。

表示したい条件を書いて、```not``` で否定をすると思い通りの挙動になるわけですね。



## ここまで前半戦
長いですね〜、長い。

単純に動画数を比較するだけでも前半だけで初級編以上の動画数があります。

もちろん内容も初級編に比べて高度なものになっているのでじっくりと腰を据えて取り組みましょう。

時間に十分見合った能力がつくはずです。

それでは後半戦です。

## スクリプト中級編（ 11 章、No. 106 ~ 157 ）
初級編ではボタンに単一ステップのスクリプトを割り当てるのがほとんどで、たまに長くて 3 行ぐらいのスクリプトを書きましたが、
ここでは各スクリプトステップの詳細に加え、条件分岐やループ処理、スクリプトでの検索など思い描いた機能を実現するためにおさえておくべき事項について学習します。

### 演習の例
11 章、 No. 132, 133 より。
見積表の印刷について、ユーザーの入力と対話をしながら条件分岐をします。

「見積詳細」レイアウトのプリンターマークのボタンを押すと印刷をするようにすることを考えます。

カスタムダイアログを表示して、印刷、PDF、印刷しないの 3 つのボタンを設定します。

![スクリーンショット 2021-05-20 12.42.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/ad0ad6a6-dba0-2c74-314d-5d224281a3ea.png)

カスタムダイアログでの入力に対して分岐処理をして入力に対応するスクリプトを書いていきます。

## 集計とグラフ（ 12 章、 No. 158 ~ 171 ）
よく表計算ソフトで行うような条件を満たすレコードを対象にした集計などの集計の方法と、
集計結果をグラフとして表示する方法について学習します。

### 演習の例
12 章、 No. 168 より。

「見積詳細円グラフ」を見るとデフォルトだとなんだかうまく行ってなさそうな円グラフが出てます。

![スクリーンショット 2021-05-20 12.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/b97a2534-34bb-0989-0649-592618faac82.png)

このグラフは見積明細上にあることに注意して、鉛筆で検索をします。

検索しただけでは未ソートのままなので変わりませんが、

![スクリーンショット 2021-05-20 12.56.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/942b6f17-b76d-5e63-ff54-02ca4e833ae0.png)


ソートを入れることできちんと集計レポートに基づいた目的の円グラフが得られます。

![スクリーンショット 2021-05-20 12.57.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/4f542676-62ff-b44f-ad6e-2313bfe66325.png)

集計においてソートがきちんとなされてなければいけないことの確認になります。

## モバイル（ 13 章、 No. 172 ~ 175 ）
FileMaker Go を使用する上での注意点について学習します。
FileMaker Go の利用を考えていない場合はパスしても大丈夫でしょう。

## 運用とセキュリティ（ 14 ~ 16 章、 No. 176 ~ 198 ）
複数人数で運用する際に、アカウント権限とファイル管理について知っておくべきことを学びます。

### 演習の例
15 章、 No.182 より。

ファイルからファイルオプションを開きます。

「次のアカウントを使用してログイン」を見てみるとデフォルトではアカウントが「Admin」、パスワードがなしで設定されています。

![スクリーンショット 2021-05-20 13.01.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/499ce9ae-8f43-20dd-f1ed-3296c0df2094.png)


ここのチェックを外すことで再度このファイルを開いたときにユーザー情報を求められるようになります。

![スクリーンショット 2021-05-20 13.03.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/ac628e8c-e678-0eb6-f20a-4e9a085dd1bf.png)


## 終わりに・番外編（ 終わりに・番外編、 No. 199 ~ 208）
番外編は初登場のデータモデリングおじさんが担当されます。
過去の演習で使ったファイルを用いながらより実践的に学習した内容を活用します。
番外編は本編と比べて 1 動画あたりの時間が長め。

# 最後に
初級編と比べ、質と量ともにヘビーな中級編でした。
ユーザーとして必要な知識はバッチリつきますし、開発者としても必要最低限の知識は揃えられるでしょう。

私は中級編を観終わった段階で、勤怠管理を行うファイルに新たに残業時間のアラートを実装しました。
（所定の残業時間を超過したらその人にメールが送信されるスクリプトです）

もちろんこの実務の中で学ぶことも多かったですが、中級編を一通り観たことで気をつけなければならないことや基本的な解決の方針は自分で立てられるようになっていました。

分量が多いですが消化不良にならないスピード感で進めてみてはどうでしょうか。