単一ファイルで、ポータブルで、自動更新される純粋なHTMLウェブアプリ
(hyperclay.com)- Hyperclay は、すべてのUI、ロジック、データが1つの HTMLファイル に統合される方式のウェブアプリ制作を支援する
- ファイル自体を変更すると即座に その場で修正・リアルタイム共有 が可能で、アプリの見た目や挙動、編集方法まで直接制御できる
- 別個のビルド・デプロイ工程、データベース、または複雑なバックエンドなしで 即時実行・保存 の構造を提供する
- HTMLファイル1つだけで ブラウザ、サーバー、オフラインなどどこでも アプリを実行でき、すべての変更はバージョン管理および復元が可能
- 現代のウェブ開発の複雑さ を減らし、リアルタイムに生きているインタラクティブなアプリを誰でも簡単に作れるよう設計されている
紹介: HTMLファイル1つで作る、生きたウェブアプリ Hyperclay
- Hyperclayは、プログラマーが 複雑なインフラ管理なしに、1つの ポータブルなHTMLファイル で製品を形作るようにウェブアプリを作る体験を提供する
- 従来のウェブ開発で必須だった 設定ファイル、ビルド、フレームワーク、デプロイパイプライン をなくし、ファイル1つで完結する構造を目指している
コアコンセプトと利点
- アプリが 1つのHTMLファイルで構成 される
- 視覚的UIを通じてファイル自体をリアルタイムに編集でき、その編集内容がそのまま アプリの状態として永続保存 される
- UI、ロジック、データがすべて1つのファイル内に動的に含まれている
- ユーザーは文書のようにアプリを 即座に修正し、変更をそのまま共有・ダウンロードしてオフライン利用 することもできる
- 「interactive codeのためのGoogle Docs」という比喩のように、共有、修正、所有権の制御を自由に行える
主な機能の要約
- 直接操作: アプリの実行中にそのまま編集できる。コンパイルやリロードなしで変更が即時反映される
- What you see is what you build: UIを修正したりソースコードを直接編集したりすると、すぐにアプリが変わり、中間レイヤーがない
- 真のポータビリティ: アプリをHTMLファイルとして書き出し、どこでも(サーバー・オフライン)同じように実行できる。保存のたびにバージョン管理が適用され、復元できる
- これらすべてが 特別な技術なしに、標準のHTMLファイル1つだけで実現される
技術的な構造
- Hyperclayは NodeJSサーバー とクライアント側の JSライブラリ で構成される
- HTMLページが自らDOMを変更すると、変更後の
document.body.outerHTMLをサーバーへ送り、そのHTMLファイル自体が更新される - チェックボックスのchecked属性など、アプリ内での変更が永続的にHTMLコードへ保存され、次回アクセス時にも同じ状態を再現できる
- バージョン管理 と 読み取り/書き込み権限管理 をサポート
実際の例
- 直接編集可能なブログ、勤務時間チェックリストなど、あらゆるアプリを1つのHTMLファイルで作成・保存できる
contenteditable属性や、`` の形で、そのままアプリの状態を文書に記録する
背景と問題意識
- 毎年数十のウェブサイトを制作する中で、ウェブアプリのコーディングが文章を書くことのように自然であってほしい というニーズがあった
- 従来の静的ウェブサイトでは、変更が揮発的である(ユーザーの行為が保存されない)
- データ永続性 をウェブ上で実現するには、データベース、API、テンプレート、アカウントシステムの構築など過剰な作業が必要になる
- プロトタイプ、簡単なツール、個人開発ログ、ブログなど、素早く作ってリアルタイムに修正・共有したい需要 に対して非効率的だった
Hyperclayの解決方法
- HTMLファイル1つにUI・状態・動作が統合される
- まるでデスクトップアプリを開くように 簡単に開いてすぐ修正 し、結果をオンラインにそのまま反映できる
- 永続的な(shared, cloneable, persistent)デジタルオブジェクトという概念を提示する
- ウェブサイトビルダー、ドキュメント・図表・プレゼンテーションツール、ダッシュボード、ブログ、アンケート・クイズ作成、データ可視化など多様なツールに適用できる
全体コンセプトの要約
- ほとんどのウェブアプリはすでにHTMLを使っている
- 中間段階を省けば、HTMLファイルが 完全なデータベース / API / UI の役割を担い、スタックはわずか数行にまで単純化される
- 開発者は複雑さを減らし、最小限のコード でも使いやすく保守しやすいアプリを作れる
Hyperclayの使用例
- ブログ、チェックリストなど、どんなアプリでもたった1つのHTMLで作成・配布・共有・編集できる
- `私のブログ!
` の形ですぐ使え、`` によって各状態が文書に永続記録される
結論
- Hyperclayは、ウェブ開発の煩雑さなしに、誰でも軽量でポータビリティに優れたインタラクティブなウェブアプリを制作し、リアルタイムで共有・保存・復元できる新しい方法を提示する
- 開発者やデザイナーだけでなく誰でも簡単に使える 次世代のウェブアプリプラットフォーム である
7件のコメント
興味深いですね
これは、以前あちこちにあったWebエディタと動作原理は似ていますが、HTMLファイル1つだけで成立するという点が興味深いですね。個人的には、これも一種のProof-of-Conceptのようにも思えますが、正直これをうまく活用したらどうなるのか気になるところでもあります。
これの動作方式って、単に https://ja.news.hada.io/topic?id=19611 に以前上がっていたエディタの動作方式と同じでは? ここに私も、サーバーでのセルフホスティングのために Node.js で簡単なバックエンドを付けて、エディタで作成した post を保存できるようにし、
index.htmlに一覧を読み込んで表示する機能の2つを付けて、簡単なブログ掲示板として使っていますが、見て回ると同じような感じですね。面白いですね!
セキュリティがどうなのか気になります。
面白いアイデアですね。tiddlyWikiも面白かったですが
興味深いですね..
Hacker Newsの意見
.htmlソースを置き換えることで、ページを継続的に最新状態に保てるたとえばチェックボックスをクリックすると
checked属性が追加され、この状態のdocument.body.outerHTMLをHyperclayでグローバルに保存しておけば、次回の訪問時にもそのまま反映される自動バージョン管理と読み書き権限の管理にも対応している
開発者とコンテンツ編集者の役割が同一である場合に最も有用だと思うが、複数の編集者が同時に使うと変更を互いに上書きしてしまう可能性があるので
ちなみに、開発者がforkしたすべてのアプリに「DOMベースのスキーママイグレーション」をpushできる仕組みを実装中とのこと
実際、簡単なWebアプリを作っていると結局サーバーが必要になる場面は出てくるが、サーバーレスなアプローチとサーバー結合はやや矛盾しているようにも感じる
それでも利点としてはクロスデバイスでのアクセス性向上があり、オンライン編集はしやすそうだ
私の場合はテキストエディタでスマホから編集し、同期アプリでラップトップへ同期している
file://プロトコルで実行されるローカルファイルのページをもっと手厚くサポートしてほしいシンプルなHTML/Vueミニアプリを作るたびにいろいろ問題が起き、いつも回避策を探さなければならなかった
たとえばローカルHTMLファイルではローカルJSモジュールをimportできなかったり、別のローカルファイル(オーディオなど)を開けなかったりする
無制限なアクセスを防ぐために制限が必要なのは理解できるが、特定の拡張子やディレクトリを明示して許可するような方式があるとうれしい
毎回Webサーバーを立ち上げるのは面倒すぎて大げさに感じるので、URLを入力するだけでそのままアプリが動くのが理想だ
file:///ではコピー機能が動かないビルドも依存関係もない完全オフラインアプリでも、この制限のせいでボタンの代わりにテキストエリアへ置き換えなければならず面倒だ
ローカルサーバーの起動にはVS Code devcontainerを使えば自動でサーバーが立ち上がり、コマンドを追加すればローカルでもHTTPS化できる
セキュリティ的には脆弱だったが、今ならElectronベースでフォルダやsqlite db程度にアクセスできる現代版があっても使い道はありそうだ
OrcaのようにブラウザやDOMなしでキャンバスだけを提供するwasmアプリビルダーも代案になる
完全な解決にはならないとしても、シンプルで直感的な形でブラウザを制限付きローカルサーバーとして使えるので、十分有用だと思う
それでもオーディオやJavaScriptなどはある程度動くし、Webサーバーを立ち上げるのも
python/nodeですぐ実行できるので、それほど難しくはないターミナルに
webserver_hereコマンドを追加するか常駐させておけば解決するむしろローカルHTMLの危険性が高まっているので、より厳格な境界を求めるようになった
今のところ代替手段は
localStorageと手動のエクスポート/インポートしかないHyperclayから着想を得て、Electron Fiddle のように1回だけインストールして複数のミニアプリを読み込むElectronアプリの構想に関心がある
単に
localStorageの話なのか、それともFileSystemAPIでファイルを直接上書きするのかなど、詳しい動作原理の説明が不足していたユーザーが保存するときに、「名前を付けて保存」ダイアログなしで自動反映されるのかも気になる
/saveエンドポイントを呼び出してHTMLを保存・上書きする(バックアップ・バージョン管理あり)/saveエンドポイントを呼び出してバックアップでき、サーバーを自分でカスタマイズしてホストすることも可能(authだけ実装すればよい)システムが多層化してどんどん複雑になり、実質的な改善というより負担が増える循環のようにも感じた
私が望む体験は、核となる説明と、流れのある背景説明、そして本当に必要な部分だけのダイアグラムだ
つまりJSONで変更分だけを別保存するのではなく、HTML全体を各時点ごとに保存するイメージだ
フォーム、属性、タグなどの変更履歴がHTMLソースへ直接反映される構造だ
初期のWebブラウザ(NeXT向けのTim Berners-Leeのアプリ)にもエディタ機能が含まれていた
初期のHTML編集がWebから消えていった理由は、
PUTメソッドがなく、編集したHTMLをWebへ保存できずローカルにしか保存できなかったことHyperclayのように各ページごとに独自ツールキットを作るのも素晴らしいが、本当に望ましいのは、ブラウザ(ユーザーエージェント)レベルでどこでも使える標準ツールが提供されることだと思う
良いアイデアだったし、テストベッドとしての役割も十分に果たしていたと思う
なくなってしまって残念だが、初期ビジョンには明確に合致していた
大学のワークステーションでNFSなどのネットワーク共有を使い、実質的にファイルが公開保存され、同じマシンのアドレスでアクセスできた
SGIワークステーションではネットワーク設定さえすれば完全にそのまま動作した
さらにWebの焦点は情報を構造化することにあり、見た目より内容のほうが重要だった
時が経つにつれてWYSIWYGモデルやテーブル/divの乱用など、見た目への執着が強まり、初心が薄れていった
誰にでも理解できるシンプルな設計をするのは本当に難しいが、今では少数の専門家集団しか理解できないかなり複雑な構造になってしまった
HTMLは今でも簡単に使えるのに、現代の開発では複雑な専門技術になってしまったことが惜しい
元々TBLが志向していた文脈を本当に理解している人は、ごく少数しか残っていないように思える
今のブラウザはどれも開発者ツールでHTML/JS/CSSをライブ編集できるので、みんなエディタではないかとも思う
みんなdevtoolsを使わないのか、それともvanilla JS/HTMLではなくReactやTSだけを使っているのか気になる
Chrome・Firefox・Safari系はどれもブラウザ内蔵IDEと言えるレベルの機能を提供しており、直接コーディングも可能だ
Shopify風のポリシーや法的案内も少し追加されるとさらによいと思う
私のHNプロフィールを見れば、なぜこれがクールだと思う一方で法的な部分も必要だと感じるのか分かるはずだ
1行目は
<!DOCTYPE html><html><head><script>const rawData =のような形で、2行目に全状態を入れる保存ボタンを押すと
document.documentElement.outerHTMLを取得し、最新状態で2行目を書き換えてダウンロードするサーバーなしでも動作する
関連コード
data:URLブックマークを作っておくと、1つのタブにメモ帳風エディタを開いて、タブを閉じない限りstateが維持されるテキストを編集したあと、新しいローカル版として保存できる
Android+Braveブラウザでは問題なく動くが、iOS+Safariではサポートされていない
Hyperclayは、マルチユーザー/マルチテナンシーとDBベースの永続性により重点を置く構造に見える
TiddlyWiki も参考になる
HTA wiki
ただし昔のIE環境ではデバッグが地獄だった
見た目はただのWebページだが、IE専用でローカルプロセス実行権限まで持っていた
永続性の管理が問題で、類似性もかなり限定的だ
Outlook on the web
サイトも見てみたが全体的に気に入った一方で、現実的にどこで限界が見えてくるのか気になる
セキュリティ面では、自分がページを変えられるなら他人も可能なのか? 権限はどう管理するのか?
コード量やロジックが増えたとき、どの時点で管理が難しくなるのか? データ量が増えるとどうなるのか?
たとえば私がビール管理アプリを作った場合、他のユーザーは私のデータ抜きでアプリだけを複製して別個に使えるのか気になる
ユーザーは自分のサイトを自由に変更できる
もしユーザーが信頼を裏切れば、有料アカウントへのアクセス権や、他人に損害を与えた場合の責任が伴う
signups機能を有効にすると、他のユーザーもそのアプリを簡単にforkでき、元のアプリへ追跡できるforkしたアプリへのアップデートpush機能も実装中だ
index.phpだけで月額 $60k のアプリを運営しているのだから、結局はコードをどう整理するか、不要な部分をどう受け入れるか次第だと思う将来的にはコラボレーション機能も入れる予定だが、現時点では1人ユーザーに最も向いている
Webstrates プロジェクトでも似たことを試している
DOMを永続化レイヤーとして使い、小規模グループ向けの協働ソフトウェアを作っているが、Hyperclayはこの仕組みを従来型のWebページにそのまま適用している点が違う
最近では MyWebstrates のようにローカルファースト方式も試みている
Webworkerを使ってHyperclayでもオフライン編集をサポートできるのか気になる
去年Hyperclayを構想していたときに初めて知った
Hyperclayのローカルファースト版はぜひやってみたいし、オフライン編集はパーソナルソフトウェアの柱だと考えている
もしよければビデオ通話で意見交換できないだろうか