プレゼンの全文と補足を掲載します。構造変更テーブルやフィールド、レイアウトなどの設計変更ができない。ファイルのホストGoがファイル共有の親にはなれない。前項と合わせて、ランタイムと同じだと思えば良い。将来はともかく、現時点ではiOS端末上のGoは、MacやWindows上のProに比べ、様々な処理性能で劣る。スクリプトステップや関数ProにあるOSに依存するものは、Goでは使えない。Goのデバイス依存なLocation()などはProで使えない。同じUI要素は、ほぼ同じ役割を果たすが、挙動が異なる。最初はひどい状態だったが、iOSへの最適化が進み、ポータルなど徐々に良くなっている。オブジェクトフィールドGoの方が、デバイスと密接な分、写真や音声の取り込みがシームレス。プラグインGoではProのようにプラグインが使えない。FileMakerを超えた要求は、他の方法で対処が必要。ウインドウGoではiOSアプリ風に、常に1つのウインドウが全画面を占有する。複数ウインドウを並べるような設計はできない。その他ファイルの修復や、アクセス権設定、インポートなどなど、その他にも小さな差異は多い。FileMakerのナレッジベースを参照。「仕事メモ」さん既存のFileMakerソリューションからの延長ではなく、はじめからiOSの開発環境としてGoを使っている捉えた実践例をご紹介します。Goを試行しています。現時点では繁殖管理用ソリューションと、Yes/Noクイズ式のナレッジツールを制作しています。「Yes/Noクイズ式のナレッジツール」は、データベースアプリケーションとしてのFileMakerありきではなく、iOS端末を活用するツールという視点で作られています。FileMakerを使い始めて日が浅くとも、充分実用的なツールになっています。私自身はiOSアプリの開発も行いますが、ちまちまと試行錯誤していきたい自分個人用の単語帳や、表には出せないデータ込みの仕組み(色んな原価を持たせた計算ツールとか、特定の顧客に合わせた業務用のものなど)を持ち歩きたい場合には、まずはGoで作ってみるのは良い流れだと感じています。Goの拡張方法GoでできることはFileMakerのそれに制限される。大半はその範囲内で事足りたとしても、一部分だけでも、それ以上の事ができれば、用途はぐっと広がるかも。Proでのプラグインのように、Goだけではできないことを、補う形で実現する方法を把握しておく。2プラグイン開発で有名なFactory社が公開この方法の最大の問題は、iOSでの複数アプリの連携が非常にもたつく点です。連続してスキャンしたいバーコードリーダーや、大小様々な計算をさせたいといった目的では、切り替えの遅さに辟易します。Factoryさんのマーカーツールの様に、ある程度大きな作業を切り替えて行うのであれば、そう気になりません。ネイティブアプリでしかできない事も多々あるので、規模や難易度の大きな用途に向いています。重たい演算をWeb側で処理Webから直接ファイルを取得GET限定ならTwitter等々の各種APIをシンプルに使えるこの方法は、単純なリソースの取得だけでなく、GETで呼べるAPIの活用をシンプルにしてくれます。YahooデベロッパーネットワークやTwitterのAPIでGETのものなど、使えるシーンは色々あります。取得したデータの活用にはFileMakerでは面倒が多く、次に紹介するdataスキームを使った方法でパースした方が便利です。POSTやPUTが必要な場合や、OAuthなど何らかのトークンを必要とするケースでも、dataスキームでformを組み立ててPOSTといった工夫が必要になります。dataスキームを使った拡張方法の例として、簡単なお絵かきツールのデモを行いました。お絵かき機能の部分は非常にシンプルな作りで、とにかくcanvasへの描画をiOSで動くようにして、結果をbase64で任意のDOMに書き出す、というだけのものです。こいつのファイルは乱暴な部分が大きすぎるので、ここではリンクしません。いずれは簡単な手順で誰でもそこそこのペイント機能をGoに追加できるよう公開したいと思います。イベント前には見落としてましたが、実は株式会社スプラッシュさんが、ほぼ同じ方法で実装されている風なペイントソリューション『FMCanvas』を販売していました。他にも、FileMaker社のGo用プロモーションサイトにあるサンプルファイルの一覧には、同様の方法で実現された、ブラウザのメリットを生かしたソリューションが色々登録されています(株式会社寿商会が積極的に活用されているみたい)。拡張方法は一長一短で色々ありますが、Goの可能性上重要なのは、これらの方法がデベロッパの小道具に終わらず、FileMakerのエンドユーザーの手にきちんと収まることだと思います。プラグインの様に、中身の作りを知らなくても、そこそこ容易に組み込む事が可能になれば、Goでツールを作ってみる需要を潰さずに済むんじゃないでしょうか。JavaScript等の方法が最も有望でしょうか。エンドユーザーが所定の手順でソースをコピーするだけで、Goを拡張できる可能性があります。まとめFileMakerとiOS端末があるなら、Goでツールを作ってみると面白い。FileMakerだけではできないことも、拡張方法がわかっていれば、案外すんなり実現できるかもしれない。既存のFileMakerソリューションとは切り離して、iOS端末のモビリティを自社内や顧客や自分個人に活用できるシーンが無いか検討してみれば、色々と考えられると思います。Goで応えられる範囲内ならば、これほど手軽な開発環境は他にありません。今回、FM-Kyushuでは初めて、ワークショップスタイルでの勉強会を実施。ワークショップは、次のような大まかなルールだけ決めて、手探りの実践でした。結果30分という短時間もあってか、出来上がったものは予想以上に似ていました。実際の.fmp12ファイルは下記からダウンロードできます。FM-Kyushu_20120609_workshop.zip見ためはやや違っても、リレーションシップの構造はほぼ同じ、機能も基本的に同じでした。マスタテーブルが用意されていたこと、見積書という揺れにくい題材、30分という時間もあってでしょうか。スタッフが勝手に予想していた以上に、どのグループもしっかり見積書に必要な要件を考え、短時間で形にしていました。発表も、滞りなく各グループの意図が伝えられ、ジョークがあったり、本当はもっとこうしたかったという声が出たり、良い雰囲気でした。惜しいのは、本来発表を紹介と展望の2巡するはずが、進行の仕切りが悪く、ちょっと本題から離れた質問に時間をとってしまった点です。質問が出て様々な意見が飛び交うのは良い事ですが、参加者によってはついていきにくい場合もあるので、もっと上手に進行するよう考えていく必要を感じました。各グループの発表中には、以下のような質問がありました。ポータル内レコードの削除についてどうやって削除するのですか?スクリプトステップで行えます(実演)。その際に削除確認ダイアログが必要では?そのオプションもあります。その削除確認ダイアログはあったほうが良い?データの削除になりますのであった方が良いと思われます。テーマ機能とレイアウトスタイルについてテーマ設定時にレイアウトスタイルは初期化されますか?されます。マウスオーバーなどの設定も?されてしまいます。見積書のデータモデリングについて集計を実装する際にルックアップとリレーションの二つの方式が考えられますがどちらが正解ですか?過去のデータを固定する場合はルックアップを使います。今回のお題は見積書となっていますのでルックアップの方がより適していると考えられます。常にルックアップすれば良いのですか?用途に応じた選択が必要です。リレーションによる集計とすれば、後日のデータ修正にも自動対応できる場合があります。(補足)今回の例であれば日々の売り上げをリレーションで動的生成し、月集計はルックアップで固定化など複合的に利用するケースも考えられます。データを固定する方法のひとつにスクリプトを使って検索〜集計する方法もあります。ワークショップを実践してみてFM-Kyushuはじめてのワークショップスタイルということで、色々と拙さや戸惑いがありましたが、得るものもたくさんありました。難しいと考えていたグループ分けは、座っていたテーブルの列単位で別れるだけで、自然と上手く行きました。各グループに、見積書に必要なモデルをしっかり把握している方がいたのは大きかったです。手探りの初回で、形にならなかったグループが出なかったのは大きな成果で、実務で日々活用されている参加者の雰囲気も感じ取れました。今回は課題の設定もあって、違いが出にくい結果になりました。今後はもっと驚く実装の出てくるような課題を考え、ワークショップを続けようと思います。アンケートについて今回はアンケート用紙を用意し忘れてしまったため、実施できず申し訳ありません。次回は内容を少し見なおして、実施いたします。次回のFM-Kyushu勉強会について次回の勉強会は2012年8月4日を予定しています。内容はまだ確定していませんが、勉強会だからこそ可能な企画を検討中です。決まり次第、このブログやメーリングリストでお知らせします。ver.12レビュー)』の、開催レポートをお届けいたします。12シリーズの発売開始となったため、本来のテーマはやや縮小し、ver.12のオーバービューを追加した今回。いつもより多くの方にご参加いただけたのは、ver.12への関心の高さからでしょうか。-メインテーマ1本目は、FM-Kyushuの本田による、変数の基本を紹介するプレゼン。プレゼン資料の準備不足でほとんどアドリブとなってしまい、まとまりが無く申し訳ありませんでした。内容は以下のような構成でした。何に使う?複数回使うデータを入れる一つのスクリプトの中で複数使う値を、一旦変数に入れてから使う。しておくと、無駄な計算が減り、スクリプトの修正も容易になる。覚えておきたいデータを入れるループの回数や、長くややこしい計算を分割する場合など、一時的な値の置き場が欲しいことはままある。グローバル格納の代わり(※$$グローバル変数を使う)レコードを超えて1つの値を保持しておくグローバル格納は、便利な反面、テーブル定義が必要。変数はその代わりも出来る(完全ではない)。変数の使い方スクリプトで変数を使うのは、非常に簡単。変数の使用:計算式に変数名を書くだけどんな使い方も、基本的にこの3つから組み立てられる。スクリプトで使う変数にはこの名前に規則があり、「$」または「$$」が必ず先頭に付く。「$」と「$$」によって、変数はその有効範囲と寿命が変わる。作成時点からファイルを完全に閉じるまでローカル変数は作成したスクリプト内でのみ有効なため、他のスクリプトと競合しない分安全な反面、複数のスクリプトで連動して値をやり取りするのは不便。値のやり取りは、グローバル格納フィールドやスクリプト引数、そしてグローバル変数などを使う必要がある。グローバル変数は、従来のグローバル格納と同じ感覚で使えるが、複数ファイル間でのやり取りには、やはり不便がある。こちらもファイルをまたいだ値のやり取りには、グローバル格納フィールドやスクリプト引数を使う。変数には名前が必要だが、フィールドの様に一覧する方法が用意されていない。スクリプト変数は、それを使うスクリプトの先頭にコメントで名前と用途を残すなど、工夫が必要。グローバル変数は、ver.11以上なら、マージ変数機能を使って、一覧するレイアウトを作ると良い。ファイルパスの生成エクスポートやPDF保存時などに指定するファイルパスの指定は、動的に行いたい場合、必ず変数を使う必要がある。".pdf"」などいう値を設定しておいた変数を指定すると、動的なファイル名で保存が可能。まとめ今回は触れませんでしたが、計算式中でLet()を通じて使う変数は、もっと面白い特徴があり強力です(代償に、把握すべき変数の種類が4種類に増えます...)。触れられなかった話題として、グローバル変数とグローバル格納フィールドの違いも、バージョンによって異なり、使い分けも注意が必要です。今後のFM-Kyushuの勉強会でも、引き続きこのような変数の解説をしていきたいと思います。条件付き書式の基礎Excelに同等の機能がありますので利用されている方も多いかと思いますが、似た機能をFileMakerで利用出来ます。真と評価された式に事前に決めた書式を適用する機能です。この辺り、使えても良さそうな気がします。文字書式の設定が出来るオブジェクト背景色の設定が出来る複数の条件を設定できる初心者でも短時間で習得できる共に「初心者でも短時間で習得出来る」点は共通していますが、何ができるかについては差があるように感じます。ユーザーとしては計算式やスクリプトで操作出来ないオブジェクトの背景色に条件付き書式を適用したい場合が多いと思われますが、ファイルメーカー社としてはあくまでも「文字書式の設定が出来る」あたりで実装が停止しているようです。線の書式が拡張されたため、今後拡張される。-飛び入りテーマですが、最も関心の高かったver.12のレビュー。今回はFM-Kyushuの本田による、重要な変更点の紹介と、簡単な移行についての紹介となりました。プレゼンテーションを全文掲載します。遅くなっている筈なので、使い物にならなくなっている箇所が無いか確認する。プレゼン内容は以上です。以降は、当日触れた内容も含んだ補足です。レイアウトエンジンについて12の変更点として重要なのは、やはりレイアウトエンジンが新しくなった事です。これによって制作効率は向上し、より質の高いレイアウトの実現につながります。今後のバージョンで追加されるであろうレイアウト関連の機能への布石ともなっている筈です。この変更は、新たなバグや互換性の問題にもつながっています。このようなバグや互換性の問題は、大きな変更時には付き物ですが、変換後のテストを慎重に行うといった事しかほとんど対応手段がありません。早いアップデータの公開を期待しています。手軽にレイアウトのビジュアルを変更できるテーマ機能は、レイアウトエンジン変更の最大の効果です。テーマを編集するツールが提供されていないのは、もったいないです。自社用のテーマが手軽に作れてこそ、テーマ機能は本領を発揮できるのではないでしょうか。この点はFM-Kyushuのメンバーでも、何かツールを作れないかと検討しています。外部保存に対応した事によって、従来は対応しにくかった大規模なファイルのデータベースでも、FileMakerが選択肢に入れられるようになりました。アップロードされない。)が確認されています。Goの無料化マーケティング上のインパクトが最も大きかったのは、この話題でしょうか。Goが、完全に無料化される事で、iOSの開発プラットフォームとして名乗りを上げよう、という意図がありそうです。この方向性が定着するかは、FileMaker社がどれだけGoを快適な環境に改善していけるかにかかっていそうです。少なくとも、現在の12用Goは、従来のものと大きな差が見られません。iOSネイティブの使い勝手に近づけること、ロケーションやイメージング以外のデバイスとの連携を強化すること、そして何より、レスポンスを上げること。いった努力が続けば、本格的にiOSアプリの開発環境として認知されていくのではないでしょうか。中で12を実際に試している方は0でした。受託開発ではなく、インハウスツールの構築手段としてFileMakerを利用されている方が多いため、当然だと思います。勉強会は次回6月に予定していますので、その頃には、実際に移行した方や、計画を立てている方の参加がありそうです。移行の中で出てきた疑問や実例を元に、FM-Kyushuで応えていけたらと思います。質問タイムアンケートでのリクエストなどから、FM-Kyushuでは今後、質問時間を長く取ろうと考えています。その始めとして、今回は最後の45分程度を質問タイムに充てました。下記のように、面白い質問も出たのですが、スムーズとはいえず、もっと進行の工夫が必要だと感じました。現状はフィールドを毎月増やす必要がある。大掛かりな変更になります。次回にでも実際のソリューションを確認させてください。レコードの移動をトリガで拾って(OnRecordLoad)、Get(レコード番号)を使ってそのレコードを特定する番号をグローバル変数等に取得。アンケートの集計結果FM-Kyushuではよりニーズにあった勉強会を行うために、前々回より勉強会参加者の方にアンケートを行っています。今回のアンケートは以下のような結果となりました。16勉強会の評価と今後の要望アンケートでは、自分にとって勉強会の難易度もお訊きしています。今回は多くの方が「ちょうど良かった」、数名の方が「難しかった」との回答でした。幸いなことに、「簡単すぎた」と感じた方はいらっしゃいませんでした。次回以降の勉強会でも、今回のような難易度の内容を、より分かりやすくお届けしたいと思います。次回以降のテーマの要望には、やはりGoを挙げられる方が複数いらっしゃいました。他に、リレーションや計算式の基礎的なもの、チャートやエクスポート、SQLなどの実務的なものもありました。様々な分野の方が参加しているため、求められる内容も様々です。全ての方のご要望に応えるのは難しいですが、基礎と実践をバランスよく扱いつつ、勉強会だからこそ出来る交流やデモも試みていきたいと思います。次回のFM-Kyushu勉強会について次回の勉強会は2012年6月9日を予定しています。内容はまだ確定していませんが、勉強会だからこそ可能な企画を検討中です。決まり次第、このブログやメーリングリストでお知らせします。検索の基礎として検索演算子をはじめスクリプトによる自動化のデモを行いました。その上でリレーションによるインクリメンタルサーチの紹介を行いました。Go活用によるスタンアローンコンプレックスなソリューション。災害時電子カルテのと二次元バーコードの活用)に加え、索引の最適化(チューニング)についての説明をいただきました。いう文字列についての索引は不要と言う考え方です。この最適化を行う事で、数百万レコードなど大量のレコードの検索時においても適切な速度を維持出来るとの事です。山本先生のお話をオーカワなりに実装してみましたので、ぜひサンプルファイルをご確認ください。コメントをいただきましたので追記いたします。_)m福岡県を対象とする住所検索で、最初から福岡県を対象にしない場合はsubstitute(検索文字;"福岡県";"")としてから検索します。この検索文字を検索するフィールドも別に牽引設定をしてsubstitute(住所;”福岡県";"")という計算フィールドにします。これの応用として完璧な検索をもとめず、曖昧な検索をするためにあえて、「丁目」であるとか「町」という文字を削除した前処理を行い、索引を前もって作成するなどの工夫もありえます。正規表現とはひと味違った独自の検索が可能です。FileMakerの場合、索引作成に癖があり初期状態ではフィールド全部に索引設定がされていまいます。レコードが固定であれば問題ありませんが、レコードが増加する場合、索引の更新にマシンパワーが必要で、レコード追加や更新の速度が落ちる場合があります。数百万、あるいは数千万レコードのハンドリングを行う場合は、索引設定の最適化が求められます。関数の実装例紹介を行いました。関数が存在しない場合においてはスクリプトでの実装が無難です。オーカワ作のしょうもないデモと併せてご覧ください。関数による値の取得と言うことになります。最後は本田さんによる「込み入った計算式作成の補助ツール」の紹介です。公開されていますので併せてご確認ください。関数による再帰呼び出しについての考察を行いました。・非常にややこしく難しいが・関数だけでループ処理が行える・動作も早く・カスタム関数として利用もできる・しかし、非常にデバッグしずらい・関数型言語としての可能性は未知数かも?目的:0+1+2+3+.....+97+98+99+100上の計算を行う場合に再帰呼び出しを利用した計算式で実現します。関数を利用して、変数「$文字タイプの数式」の評価を繰り返します。「FM-Kyushu」で実装方法がわからない検索や、こんな検索は出来ないの?と言った事例を挙げていただければと思います。等の発表があればそちらに流れる可能性もあります。豊原さんによる、死亡届〜クリティカルパスは、普段触れることのない、電子カルテについて学ぶことの出来る貴重な機会となりました。移行に関する貴重な事例となりました。千々岩さんによる、生徒さんへの年賀状を、いかに個別カスタマイズを施しつつ省力化する手法については斬新な部分も多く、仕事で携わる方にとっても新しい発見があったと思います。・03_標準機能でガントチャート・05_FileMakerでリバーシご興味のある方はご確認&コメントをぜひ!オーカワ作のしょうもないデモも公開させていただきます。FileMakerは(正しい構造かどうかはともかく)出力画面においてもデータをテーブルに書き込むことが出来ます。プリンタが異なると印刷がずれてしまいます。スライド印刷機能で余白を調整できます。「FM-Kyushu」で使いこなしたい関数を挙げていただければと思います。会議室テーマ:関数を使いこなそう(仮)今年も残すところあとわずかです。来年も優しい笑顔をお目にかかるのを楽しみにしております。自分のソリューションを参加者に添削してもらおう!が開催されました。アプリケーション」が開催されました。基礎講習」が開催されました。作り直す場合にはどうしたらいいかなど、参加者全員でワイワイ協力しながら盛り上がりました。途中で東京からの飛び入り参加もあって、さらに盛り上がった勉強会となりました。作ろう分離モデルの請求書」が開催されました。