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

#概要

* 新人研修の教材として [Claris FileMaker オンライン学習 初級編](https://content.claris.com/ja-e-learning-b-index) の動画を Youtube で視聴した。
* 各機能の場所と説明、使用上で最低限守らないければならないことなどをざっくりと説明。
* 大体の機能がどこにあるかはわかるようになる。
* 深掘りしないので逆に抽象的で「とにかくこうなんです」のような説明になってしまうところもある。
* とにかく「丁寧なチュートリアル」な初級編


#はじめに
## Claris FileMaker（以下 FileMaker）とは
[Claris公式HP](https://www.claris.com/ja/)

データベースソフトの 1 つ。

リレーショナルデータベースとしての機能に加え、
特にユーザーインターフェース面に力を入れていて、
プログラミング経験がない人でも簡単に使えることを目指している気持ちを感じます。

さらに、もちろん変数を定義できたりスクリプトを書けたりするわけですが、
日本語ローカライズがちょっと怖くなるぐらいまでされています。

- 変数がひらがなカタカナ漢字でもよかったり、
- 公式の関数に当たり前のように日本語があったり、
- 全角と半角が混ざっていても大丈夫な時があったり。

確かによくあるプログラミング言語のように英語メインじゃないのは
経験のない人の参入障壁を減らせるので、そういう意味では意義のあるローカライズかも。 

それにしては、関数とかのドキュメントが他のプログラミング言語並にお堅い気も……。


## Claris FileMaker オンライン学習
FileMaker を開発している [Claris 社による公式のテキストと動画](https://content.claris.com/ja-e-learning-b-index)があります。

内容の深度ごとに初級編、中級編、上級編に分かれており、
初級編と中級編ではオンライン講義のような動画が Youtube にアップされています。

新人研修として、経験を問わず新人全員が初級編の動画を見ることになりました。


##[演習ファイル（とテキスト）](https://content.claris.com/fmb19_reg-ja)
**ほぼ必須です。**

動画ではほとんどの章において
1. 章の初めの概説
2. 実際に公式演習ファイルを用いた実践演習
3. 章の終わりのまとめ
で構成されているので、自分で手を動かさなくても大丈夫な人以外は公式の演習ファイルを
手元に用意しておく方が無難かと思います。

ただし、テキストと演習ファイルをダウンロードするには Claris で無料登録が必要なので注意。

# オンライン学習初級編の感想
## これまでの個人的なプログラミング経験
何事も誰が見たかによってその見え方が変わると思うので、
参考程度に私のプログラミング経験をざっくりと書いておきます。

大学から大学院まで、主に物理・生物の数値計算をしていました。

- C, C++: 細胞増殖系で集団サイズが大きくなったときの数値計算（5年ぐらい）
- python: 軽めの数値計算、たまに画像処理とそれに関する機械学習（3年ぐらい）
- MATLAB: 数値計算（2年ぐらい、あまり使ってない）

このような感じで、4 月頭ではデータベースに関してはほとんど知識はない状態でした。


## 説明の速さ
河村さん（いつも説明をしてくれるおじさん。ヘヴィメタが好き。定期的にTシャツが変わる）がとてもゆっくりと説明してくれます。
ある程度プログラミング経験がある人は 1.25倍速（あるいは 1.5 倍速）でもよさそうなぐらいゆったりとしています。

あまり経験がなく、演習ファイルの操作をゆっくりとしたい人でも等速でも追いつけるスピードです。
もちろん動画なので、必要に応じて停止や巻き戻しも自由にできます（それはそう）。


## 内容の概説
FileMaker オンライン学習　初級編は基本的に
1. 既存のデータベースをきちんと活用する
2. 既存のデータベースに簡単な機能を追加する
ことを目的としています。

なので、**きちんと機能を理解して使いこなすためには中級編に進むか、
OJT 的に内容を叩き込む必要があります。**


初級編が終わった段階で

「あなたは 1 からテーブルを作って
きちんとリレーションさせることもできないんですか？ 」

などと言われるとかなり心にきます。

確かにそれらの操作を一通り演習で行うのですが、
目的の操作より手前の部分はもう完成しているファイルに対して演習をするので、
1 から何かを作ることは初級編で扱う内容だけではなかなか厳しいです。

具材を煮ている鍋が用意されていて、ここにルーを入れましょうみたいな
演習をしただけの人に1からカレーを作ってくださいと言っても
料理経験がない人にはそれなりに難しい課題になってしまうのと同じです。


プログラミングに関する経験がない人が一人できるようになるのは、
簡単な検索、簡単なリレーション、ちょっとしたスクリプトのボタンの設置ぐらいと考えた方がいいです。

ただ、それ以上のことをできるようになるための基礎的な言葉・概念はしっかり身につくので、
OJTでのより実践的な内容の理解の補助には確実になります。

お作法的な内容をしっかりと扱うので、ならず者的な開発をしなくなる教材としてかなり機能するはずです。

初級編ですので、本当にとにかくひたすら土台作りをしていると考えてください。

### イントロダクション（ 1 ~ 6 章、No. 1 ~ 19）
河村さんの自己紹介の他に、レコードの検索・移動・新規作成、レイアウトの移動など簡単な操作。

####【演習の例】
No.8、 3 章データベースの世界 - レイアウトタイプによる表現の違い (2) よりレイアウトを切り替えるボタンの設置。
![No8_list_bottun_before.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/595cd843-259f-2221-80dd-f807e6c57a8a.png)
↓↓
![No8_list_bottun_after.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/bf5b53b0-23c3-aa1c-e7d2-770ea2672c04.png)
ラベルフィールドが揃っているファイルが用意されていて、そこにボタンを設置するスペースを確保して、単一ステップのボタンを設置する。

### リレーション（ 7 章、No. 20 ~ 26）
リレーションについて。内容を噛み砕いて話しているけれど
どうしても抽象的になってしまってます（誰にでも通じる説明をするためには仕方ない）。
演習も少なく、概念の説明が中心です。

理解してから見ればある程度納得できるのですが、
初見だとどうしても「こういうものです」感が残ってしまうと思います。

なので、**身近なものや実際の業務で扱うデータにどのような
リレーションが入れられるか考える**演習を動画外で必ず挟んだ方がいいと思います。

例えば

- 小説家と作品
- 学生番号と本の貸し出し記録
- 麻雀プロ団体と所属雀士
- ポケモンとわざ

など、いろいろな例を考えてみる会があるとリレーションともっと仲良くなれる……かも？

プログラミング経験のない新人同期からもリレーションは特にわからなかった、
という意見が多く、実際の業務で出てくる例を見せたらすぐに納得できた様子だったので、
とにかく**身近なもので例示して抽象的な概念を体に染み込ませることが動画外で補助的に必要**です。

また、中級の序盤で補足されていて、確実にそちらの方がわかりやすいです。
この章が終わった段階で先にちらっと中級編を覗き見するのがもしかすると最短ルートになるかもしれません。

【演習の例】
No.26、 7 章データと構造 - 基礎工事に必要な作法を - データの世界で必要な作法 (5)  より多対多のリレーションの設定の確認。
![スクリーンショット 2021-04-27 9.59.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/47b75587-baf9-0394-eb4a-b61c8d234dd7.png)
既存のファイルに設定されている「タスク」と「担当者」が多対多の関連であることを確認し、そのリレーションを実現するために「割り当て」テーブルが用意されていることを確認します。
確認する以上の操作はなく、あくまで概念とどのように実装されているかの説明のみになります。


### テーブルとレイアウトの設計の基礎（ 8 ~ 10 章、No. 27 ~ 42）
目的のレイアウトを実現するために必要なテーブル・フィールドの作り方と
レイアウト上での様々な表現方法を扱います。

レイアウトが視覚的にわかりやすい反面、
テーブルやフィールドのお作法についてはちょっと取っつきづらいかもしれません。
（でもこれは数をこなして慣れるしか……？）

また、10 章ではポータルの作成などの演習でリレーションを実践的に扱うので、7 章でもやもやしていてもここで多少は解決するかと思います。
特にテーブルとテーブルオカレンスの違いについては、ここでゆっくりと手を動かしながら理解するとよさそうです。

#### 【演習の例】
No.36, 37、 10 章レイアウトを作ろう - 構造設計の上にレイアウトを作成しよう (3), (4) より、タスクに関連する添付ファイルのポータルを作成する演習。

![スクリーンショット 2021-04-27 10.08.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/9456c475-e082-46b6-c9c7-41dbe599546d.png)
この「タスク詳細」レイアウトに
![スクリーンショット 2021-04-27 10.08.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/45ecbca0-0c0b-4b5b-e484-07c96b8848a6.png)
関連する添付ファイルを表示するようにリレーションを設定することを目的とします。

##### (3) リレーションの設定

![スクリーンショット 2021-04-27 10.10.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/f12e1d7f-babe-183a-c935-ea0049a10c7e.png)
「添付ファイル」テーブルを新規に作成し、必要なフィールドを追加します。

![スクリーンショット 2021-04-27 10.13.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/8362402f-3b25-3b1d-4c74-4cea59a477e0.png)
その上でリレーションシップグラフ上に新規で「タスク添付ファイル」というテーブルオカレンスを追加して、「タスク詳細レイアウト」のテーブルオカレンスである「タスク管理」からリレーションを結びます。

##### (4) リレーションに基づくポータルの設置!

まず、「タスク管理」レイアウト上に関連テーブルの「タスク添付ファイル」テーブルから、添付ファイルと説明を設置します。

次にポータルを設定します。
タスク添付ファイルのレコードを参照することを宣言し、

![スクリーンショット 2021-04-27 10.28.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/1a6f9666-ac95-387c-c7ff-192ccf4b7a99.png)

タスク添付ファイルから、「タスク外部キー」、「添付ファイル」、「説明」のフィールドをポータル上に表示するフィールドとして選択します。

![スクリーンショット 2021-04-27 10.29.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/70193f36-0b4e-9c56-f9a6-8b8e66d6fb54.png)

あとは適当に大きさを適当に調節して完成です。

### スクリプトと入力の方法、簡単な計算（ 11 ~ 13 章、No. 43 ~ 67）
数行程度の簡単なスクリプト作成と、スクリプトが割り当てられたボタンの設置、
値一覧による入力値の表示など、ちょっとプログラミング的な要素があるセクション。

日本語でスクリプトを書けるので、初めてのプログラミングとしては最適かもしれなません。
（個人的には本当に日本語で書いたり全角入力をする際になにか不思議な感覚がします）

#### 【演習の例】
No.50 、第12章　機能を作ろう（入力） - 入力のしやすさは正しいデータにつながる (4) より、ポータル内で新規関連レコードを作成するスクリプトの実装。

![スクリーンショット 2021-04-27 10.55.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/3568b32b-df8c-fee3-f32e-cbbf08d010df.png)
このようなリレーションがある際に、「タスク管理」上の「タスク詳細」にある「タスク添付ファイル」を参照しているポータルに、新規関連レコードを作成するボタンを設置します。

スクリプトでは最初にポータル内の「::説明」フィールドに移動したのちに、最後の行へ移動します。

最後の行にいる状態でファイルの挿入をすることで、「タスク外部キー」に「タスク管理」の「主キー」が入っている新規関連レコードが作成されます。



### 出力と集計（ 14 章、No. 68 ~ 88）
印刷用のレイアウトや、リレーションに基づく集計、グラフの作成など、
これまでに扱えなかったことを雑多に詰め込んだ章です。

とにかく内容が転々とします。

概念の説明というより実用的な内容なので、ここはOJTで理解するのが一番かもしれません。

#### 【演習の例】
No.69 第14章　機能を作ろう（出力と集計） - 便利→感動があなたの株を上げる！ (2) より、検索で該当するレコードがない場合に自身で設定したカスタムダイアログを表示する演習。

![スクリーンショット 2021-04-27 11.06.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/bcf71d46-12ac-b936-b220-64c72ebb243c.png)
このスクリプトで、ステータスが「進行中」であるレコードを検索します（進行中検索ボタンより実行）。

その上で、スクリプトの検索条件を「進行中」から「延期」に変更します。
![スクリーンショット 2021-04-27 11.09.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/7d312f6c-7f71-0e49-a91d-111e06bf47c0.png)

この状態でこのスクリプトを実行すると、
![スクリーンショット 2021-04-27 11.11.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1346492/fd99f871-1e21-f5c5-4c3c-4f36a8bde905.png)
スクリプト上で設定したカスタムダイアログで生じた現象を伝えることができます。

エラーが想定される場合、エラー処理をして、開発する側が事前に想定してそのエラーに関するわかりやすいダイアログを表示する演習になります。


# 最後に
初級編だけではすぐに業務で活躍できるようになるというものではありません。
実戦投入には必ずその後のフォローなりさらなる学習が必要になります。

ですが、そのフォローやさらなる学習のために必要な知識や概念、
操作については確実に身につきます。
正しく「丁寧なチュートリアル」という感じです。


[初級編が終わった段階で勤怠管理システムを作ってみた](https://github.com/ShumpeiYamauchi/test_attendance_FM)ので、
ある程度プログラミング経験がある初見の人は初級編を見終わって
いろいろ調べながらこれぐらいのものが作れるんだなぁと言う感じで参考にしてください。