<form.io>は,フォームを使ったAPI定義を実現するオープンソースプロダクトだ。APIに加えて,フォームのユーザインターフェースも高いレベルで生成してくれる。
<form.io>の基本となる構成エンティティは,属性を持ったリソースである。この属性はフォームを使って追加され,フォームの評価ルールで設定される。リソースへのアクセス管理はパーミッションを使用して,適切なレベルで行われる。ビジネスロジックを持たないAPIでは用途が限られることから,リソースレベルでのロジックを持つことが可能だ。認証やパスワードリセット,サードパーティサービスに統合するためのWebフックなどをここで実現することができる。office365とhubspot, Eメール,SQLクエリとの統合が最初から用意されている。API生成の一部として,Swaggerドキュメントを生成することも可能だ。プラットフォーム開発の理由などを聞くため,InfoQでは,共同開発者でCTOのTravis Tidwell氏にインタビューした。
InfoQ: <form.io>を開発した動機は何ですか?対象としているのは誰なのでしょう?
Travis Tidwell: Web 3.0が登場して,現在では新世代のアプリケーションが中心になりつつあります。その一方,アプリケーション開発者たちは,それに伴った新たな要求という難題に悩まされ続けています。対象とするデバイスインターフェースの拡大,マシン対マシンのコミュニケーション,サードパーティプラットフォームとのデータ共有,レガシシステムへの統合といった問題のすべてが開発者に負わされています。アプリケーションの設計や開発の根本的な変更が必要なのです。このように,Web 3.0へのパラダイムシフトの結果として,APIの生成と管理の重要性が急激に高まっています。アプリケーションそれ自体より重要な場合さえも少なくはありません。APIはアプリケーションデータに可搬性と統合性というパワーを提供しますが,その実装は難しく,多くの時間を必要とします。フロントエンド開発者はアプリケーション開発経験は豊富ですが,API開発については長らくバックエンド開発者の領域にありました – これまでは。
<form.io>はフロントエンド開発者のために開発されたツールで,従来のAPI開発と管理に必要であった負担を軽くしてくれます。FORMとAPIを自然な形で結合した,オープンソースのプラットフォームなのです。
InfoQ: 実用性に優れたAPI設計を可能にする上で,どのようなアフォーダンス(affordance)が提供されているのでしょう?
Travis Tidwell: まず第一に,すべてのRESTfulなAPIには,リソースやデータフィールドを定義するためのインターフェーススキーマが必要です。明確に定義されたデータ検証基準がこれに組み合わされます。このスキーマを提供するため,API設計においては,インターフェースに対する正常および無効な要求の両方について,必要な応答をすべて組込んでおく必要があります。結局のところ,これらの要件や定義は,そのすべてがHTMLフォーム定義で簡単に表現できるのです。ですから,優秀な開発者の持つ高度なフォーム構築技術を利用すれば,堅牢なAPIインターフェースを視覚的に開発が実現できます。
ここで肝心なのは,この2つのイノベーションを,コンフィギュレーション可能なアクションと組み合わせることです。そうすれば,フォームの送信時に,独自の動作を実行できるようになります。これらのイノベーションを統合することで,バックエンドのビジネスロジックを記述することなく複雑なアプリケーションを開発可能な,パワフルなツールを開発者に提供します。
InfoQ: 内部はどのようになっているのでしょう?ハイレベルでは,どのように動作するのですか?
Travis Tidwell: Form.ioは最新の技術的進歩の数々を活用することで,これまでのテクノロジでは極めて難しい開発成果を実現しています。最初に挙げられるのは,スタック全体がJavaScriptであることです。フロントエンドアプリケーションからバックエンドAPIプラットフォームまで,すべてNode.jsで記述されています。データベースでさえJavaScriptベースのNoSQLを使用して,それぞれのデータレコードを完全なJSONエンティティとして保持しているのです。このような技術スタックは一般にM.E.A.Nスタックと呼ばれるもので,最近ではWeb 3.0アプリケーションを実現するテクノロジとして注目を集めています。
これらすべてが,フロントエンドアプリケーションとバックエンドAPIプラットフォームに厳密に分離されています。多くのソフトウェアプラットフォームでは,サーバは一般的にHTMLインターフェースをクライアントに送信する役割を持っています。ユーザが次ページを選択すると,毎回サーバの処理が起動される仕組みです。この方法はこれまで長く活用されてきました。ですが,現代のWebアプリケーションは,人とのインタラクションのためにだけ開発されるのではありません。マシンや人など,複数のインターフェースを処理可能なように対応しなくてはならないのです。
Form.ioは大きく違います。サーバがクライアントにインターフェースを送信することはありません。実際に,当社のhttps://form.ioアプリケーションはCDN上でホストされていますが,サーバとの通信はRESTful APIを通じてのみです。このような分離も,実はForm.ioで生成されたフォームによる,大きな技術的アドバンテージのひとつなのです。すべてのフォームにひとつのJSONスキーマを使用します。これはRESTful APIを自動的に設定するだけでなく,フロントエンドアプリケーション上での動的なフォーム生成にも利用されます。その結果が,サーバとクライアントの分離を自分自身で意識する必要がないという,開発者にとって非常に自然な動作となります。開発者は,素晴らしいアプリの開発に注意のすべてを集中することができるのです。
InfoQ: リソース認証には,どのような認証メカニズムが使用されているのでしょう?
Travis Tidwell: もう間もなく,OAuthが提供できる予定です。私たちは開発者に対して,フレキシブルでカスタマイズ可能な認証システムを提供しています。開発者が作成したリソースに基づいて,任意の認証方法が定義可能です。例えばEメールアドレスではなくMember IDをベースとした認証が必要な場合,Form.ioでは,開発者のリソースフォームのフィールドを参照して認証を行うように設定することもできるのです。
さらにForm.ioでは,任意のリソースを対象とした認証をシステム内で行うことができます。グローバルな”ユーザ”テーブルを用意して,すべての認証をそちらに向ける必要はありません。この機能は,ロールおよびパーミッションシステムだけでなく,リソースシステムを通じても提供可能です。リソースシステムでは,リソースの送信に対してロールを割り当てます。その関係を,認証されたユーザがどのRESTfulエンドポイントをアクセス可能かを判断するメカニズムとして使用するのです。
InfoQ: JWTトークンのセキュリティはどのように確保されているのでしょう?
Travis Tidwell: 当社の認証システムでは,セキュアなHMAC SHA256アルゴリズムで署名されたJWTトークンを使用しています。ここで生成された各トークンは,認証されたリソースに加えて,システム内でのロールに関する情報もプラットフォームに伝えます。
InfoQ: サードパーティAPIと統合する場合,どのような実施手順を推奨していますか?
Travis Tidwell:私たちのオープンソースプラットフォームでは,フォームシステムにサードパーティAPIと統合するアクションのコントリビューションを,開発者から広く受け入れています。各フォームにはWebhook機能も提供していますので,フォーム送信を開発者自身のバックエンドアプリケーションにフックして,任意のサードパーティAPIへのプロキシとして機能することも可能です。
InfoQ: <form.io>をサポートする上で,アプリ側にはどのような前提条件がありますか?
Travis Tidwell: 現時点で<form.io>と統合するアプリケーションは,Angular.jsをフレームワークとして使用している必要があります。この依存関係の管理にはBowerを使用しています。私たちのbowerファイルについての詳細な情報がこちらにあります。 https://github.com/formio/ngFormio/blob/develop/bower.json
RefletやjQueryなど,他のフレームワークもサポートする予定ですので,今後に注目してください!
InfoQ: GitHubでオープンソース公開したのはなぜですか?どのオープンソースライセンスでしょう?
Travis Tidwell: <form.io>はオープンソースソフトウェア開発の原理に則って開発を始めたので,オープンソースコミュニティに貢献したいのです。オープンソースのビジネス戦略に基づいた開発こそが,開発者に最も広く受け入れられる方法だと,私たちは強く信じています。そうすることで,コミュニティによるサポートというビジネス上のメリットがあると同時に,私たちのオープンソース製品のさらなる拡大が可能になるのです。私たちはこのことをとても真剣に捉えていますし,オープンソースを提供していることに誇りを持っています。ライセンスに関しては,今のところ,フロントエンドライブラリにはMITライセンスを,バックエンドのコアプラットフォームについてはGPLライセンスを適用する予定です。
InfoQ: 今後予定されている機能の中で,InfoQコミュニティに伝えておきたいものは何かありますか?
Travis Tidwell: <form.io>では,当社の持つロールとパーミッションに関する機能を総合的に活用した,堅牢な”チーム”機能を新たに市場提供します。これにより,プロジェクト単位で選び出された開発者チームとの相互同期的な開発が実現します。
詳細な分析情報とデータ管理ツールを提供することで,開発者が自らのアプリケーションを効率的に管理できるような,従来よりも包括的なダッシュボードも提供します。さらに,オープンソースソフトウェアの共有の概念を発展させるために,開発者同士がアプリケーションのさまざまな要素を共有する方法を変えるような,新機能を導入する計画があります。そして最後に,既存の機能をさらに深めて,数多くのセキュリティツールやクロスプラットフォームのデータ統合ツールを展開していきたいと思っています。