FileMaker Go 開発・利用者の為のiOSアプリ構築ハンズオン(day6)
FileMaker Go 開発・利用者の為のiOSアプリ構築ハンズオン(day5)
2025/06/29 09:00 札幌市生涯学習センターちえりあ

日頃、FileMaker Pro を利用してiOSでの実行環境である FileMaker Go アプリを提供している開発者が、よりネイティブアプリに近い環境での開発体験を通じてiOSアプリの動作の理解を進めることを目標としたハンズオン。FileMaker GoアプリをFileMaker Pro アプリのiOS動作版、と捉えるのではなく、あくまで、iOSアプリとして、iOSユーザーが日ごろ接しているiOSの流儀に従ったiOSアプリはどう作るのか、という基礎を学んだ上で、FileMaker GoアプリをよりiOSネイティブに近いアプリとなる構築手法を学ぼう、というのがこのワークショップの趣旨。講師として、主催のDBPowers のビジネスパートナーである、ソーコネクト社より井口氏を招聘しての基礎編は番外編を含めて全4回を予定していましたが、急きょ1回増やし、更に1回増やして当初の全4回から2回増えての全6回となった
前回の後半と今回とは、それまでの単なるアプリ開発、というだけではなくネットワーク越しにODataを利用してFileMakerServerに接続し、レコードを出し入れする、という部分に当たる。前回はかなり学ことも多くリモート越しの作業の部分でかなり混乱してしまった部分もあったことから、今回はODataの基礎編から再度、知識を整理した。また、Gitを如何に効果的に使用できるかはかなり大きな要素になることからまずは、Gitの復習を兼ねて前回までの未OData接続ブランチをメインにMergeすることから始めた。過去3回程、このGitを利用した開発を実施してきてはいるが、特にFileMaker プラットフォームでのApp開発ではこの途上版で本番環境とのMergeはDeveloper Toolを利用することで、3rdPartyに依存するしかなかったそれ以前とは比べものにならない程の環境は実現できている一方で、Gitの持つ削除しない限りは、どのCommit Pointへも容易に戻る環境を再現するには、そのタイミングでのファイルを残しておく以外にはできない為に少々不便さを感じてしまう。
さて、メインに一本化されたモデルを元にして、OData接続用のBranchを作成し、そこから今回の開発を始めるのだが、ここで1つ実験的な作業をしてみる。現在2系統ある、メインとOData接続用のBranchをそれぞれ同じところを別の内容に修正した上でMergeしようとするとどうなるか、というもの。所謂、conflict を作為的に発生させる、という実験になる。当然といえば、当然だが、Diffの画面を見るかの様に異なるコードを示し、どちらを採用するかの選択を求められる。勿論、こうした作業の前のポイントには戻れる為に、改変、改修履歴といった独自に管理するにはかなり面倒な作業を一元管理してくれる機能、というのはかなりありがたい。
Gitでの実験的な復習はここまでにして、ここからはODataに話の中心に戻す。
FileMakerServerを利用してのデータ共有は、日常的にFileMaker network protocol を使っている分には、そのデータの整合性に意識をせずとも大抵のケースでは上手く処理が実施される。それは、ほとんどの場合、レコードを排他的にロックすることで、多重書き込みを排除し、データの整合性を担保するような仕掛けが標準で提供されており、その仕様を開発者は利用しているから、同期処理が実施されるということになる。一方で、ODataは、データ通信のためのProtocolであり、多様な環境での実装を可能とする非同期通信での仕様となる。つまりそこでは、基本、Server側にあるデータとローカル側(今回はiPhone)のデータは違っている、ということを常に意識する必要がある。
そうした知識は置いておいて、まずは取りあえずまずはファイルを作りましょう、と実作業ファイルを作成する。前回は、提供された資料から該当するコードのテキストを抜き出して書き写したり、貼付けたりする中でミスが続発し、なかなか上手く機能しなかった面が少なからず存在していたために、今回は講師の井口氏により事前にコード部分だけ、予めテキストファイルで別提供されており、コード部分の再利用が容易となって効率的に進むことができた。
FileMaker開発をメインにしていると、コマンド、関数、変数などが羅列しているコードは網羅的に今の段階から理解することはそもそも困難、という前提でここまできているので、基本「写経」スタイルで進み、可能な範囲で理解に努める、という方針からまずは、用意されたテキストを該当する場所に確実に挿入し、必要な部分のみを必要な内容に書き換えていく、作業を続けた。
その書き写したコードが実際に機能しているのか、は、xcode上で記載されているFileMaker Server へのアクセスの結果をFileMaker Proや、SwiftUIのシュミレーター上で確認する。
ODataを介したアクセスを試行する局面では、セキュリティ上の観点から、本来なら許可されないコード記載などを採用しながら、その場で個々人がデータ更新を体感できるように進めた。
挿入されたデータがきちんと入っているかどうかの確認には、iOSならではの画面を上部から引き下げるようなアクションで実施。サードパーティで生まれたこの画面引き下げによるデータ更新が、その後程なく本家に採用され、今や、多くのアプリにその画面再描画の基本機能として認識されている動きが、僅か数行、書き方によっては1行のコードでできてしまうのは、FileMaker Developerには羨望以外のなにものでもない。
一方で、受取った異なる型式のデータフォーマットを然るべき形に整えて格納していく作業は、FileMakerでの開発作業と型式こそ違うものの基本的な考え方はそれほど変わらない為に、理解もしやすい処理ではある。
いずれにしても、Macの画面上にiPhoneの形をしたシュミュレーターが表示され、それをマウス越しとは言え、実機を動かしている様に操作できる検証環境は、FIleMaker開発環境に是非にも欲しい環境。特定の方式で作成したレイアウトでは、FileMaker Goがシュミュレートされる、といった機能は是非採用してほしい。
ここ迄で、見よう見まねとはいえ、FileMakerServer からODataを利用してデータを受信し、画面上に表示することまではできた。残るはServerへODataを通じてデータの流し込みの処理となる。まずは、通信そのものを(新規登録、更新登録、削除登録とにわけてそれぞれの処理別のfunctionを予め準備してもらったコードのテキストを読みながら書き込んでみた。
それらのコードを新規登録、更新登録、はこれまでの保存ボタンに、削除登録は、該当レコードのSwipeでの処理に加え、更にその後のメッセージを記載。また、FileMaker App同様にエラーとして上手く処理が完結しなかった場合のメッセージも加えた。特に削除処理は、該当するデータをIDで探して、見つかったら削除する。更に加えて、ローカルにあるデータも忘れずに削除処理する。一見、回り道をしているような処理ではあるものの、FileMaker Server で共有しているファイルと直接繋げて処理をしているのではなく、ローカルとServerにそれぞれファイルが存在する非同期でのデータ処理なので、これはある意味仕方がない。このコードを書くことで、日常的にFileMaker プロトコルを利用した共有環境で簡単に削除をしているFileMakerのScriptStepが、実は結構面倒なことを代替してくれていることに気づく
ここ迄でデータの送受信が完了したので、シミュレーターで確認。
更に、手持ちのiPhoneを開発モードを有効にして、ここまで書いてきたコードをアプリとしてMacからiPhoneに転送しての実機テスト。自分で書いたコードが、ヌルと画面上部を引っ張ってデータ更新されたり、一覧上でのスワイプ動作でレコードがサーバーからも削除されることが確認できるとなかなかの感動を実感できる。
こうして、当初4回完結する予定だったFileMaker Go 開発・利用者の為のiOSアプリ構築ハンズオンは、1.5倍の開講クラスにはなってしまったものの、Xcodeでコードを書き、シュミュレータイで動作確認をし、ODataでFileMaker Serverを介したデータの送受信を実現し、手持ちのiPhoneで初めての自分の初めてのネイティブアプリを動かす、ところまででたどり着くことができた。
最後まで投げ出さずにほぼ(!)脱略者なしで最終コーナーを回り切ることができたのは、講師役を勤めてくれた井口氏に改めて謝意を申し上げたい。
今回でFileMaker Go 開発・利用者の為のiOSアプリ構築ハンズオンのSeason1は終了。
次回は一旦半日でこれまでのSeason1の総集編、その後8月からは機能を限定したアプリ開発をするSeason2が始まる予定。
今後もお楽しみに。