Nwht0xn1

レシピベースでWebアプリを自動生成するアイデアCreated on 2016-05-09 by r7kamura

Serverkit

Serverkit という、YAMLやJSONでレシピを書いて適用するとサーバの状態が定義した状態になる、というツールがある。Serverkitは、何もプラグインを入れない状態では、ファイル作成やPermissionの変更などの簡単な処理しかできない。しかし、プラグインを入れるとレシピで表現できる操作を追加することが出来て、例えばGemのインストールや、Macのログイン項目の変更などが記述できるようになる。

Webアプリへの応用

この構成を応用して、Webアプリもレシピを記述して適用すると動くという形にできないかなと少し考えてみた。Railsを利用していると「Rails Wayから脱線しないように」と念を押されることが度々ある。それならいっそ、全てのRails Wayのやり方をレシピとして記述するようにすれば、脱線などやろうとしても出来ないし、良い矯正具になるのではと考えた。

現状の一般的なRailsアプリのコードをChefのレシピのようなDSLベースの表現方法だと考えると、それをServerkitのようなスキーマ表現形式に置き換えていくようなもの、と捉えると考えやすいかもしれない。

プロトタイプの実装案

多分実装してみると、初期の段階では、Scaffoldで生成できるような基本的なCRUD処理を行うアプリケーションをレシピで記述して実行できるようになると思う。足りないところはプラグインで好きに拡張できるようにするということにすれば、最初の段階ではプラグインだらけになるものの、徐々にレシピで表現できる箇所が増えてきて、最終的には「Rails Wayに沿った」Webアプリが記述可能になるのではないか、という考え。

現実的に役に立つものを早めにつくらないとモチベーションが湧かずに開発が進みにくいという問題があるが、ジェネレーションギャップパターンを使えば、既存のRailsアプリで使うControllerの親クラスを自動生成するぐらいのことは出来るんじゃないかと思う。

失敗しそうなところ

頓挫する可能性が高いところとして、最初からリッチなアプリをつくろうとしすぎて、レシピの表現力が追いつかずに何も完成しない、ということが大いにありそう。

理想的な未来

仮にこのアイデアが成功した場合の理想的な未来としては、レシピのプラグインが豊富にあり、開発者は一切コードを書くことなくプラグインを組み合わせるだけで何らかのアプリが出来るようになる、という状態だと思う。Unity界隈では一切コードを書かずにつくられた3Dゲームなどが観測されていて、そういう状態に近い。

参考実装

昔REST APIを用意するときに似たようなことを考えたことがあって、そのときには r7kamura/restaurant: A rails plugin to auto-define RESTful API というのをつくった。MongoDBがバックエンドにあると仮定して、自動的にCRUD操作を実装してくれるRackアプリを定義するというライブラリ。