Techtouch Developers Blog

テックタッチ株式会社の開発チームによるテックブログです

Puter という Web ベースの OS 上でアプリをつくってみた

テックタッチアドベントカレンダー8日目を担当する kenyu です。 今回は Puter という Web ベースの OS 上でアプリをつくってみました。

Puter ってなに?

Puter とは Web ブラウザ上で動作するデスクトップ OS のようなサービスです。

puter.com

これまでも Web ベースの OS はありましたが、Puter は JavaScript の SDK が提供されており、開発した Web アプリケーションを Puter 上のデスクトップアプリケーションのように使えるところが特徴です。

作成したアプリケーションは他の Puter ユーザーも利用できます。面白そうなのでさっそく試してみました。

とりあえず ToDo アプリつくってみるか

ということで、Next.js で ToDo アプリをつくってみます。 なぜ Next.js?React でもよくない?と思われるかもしれませんが、いまのところ SDK は script タグで読み込む方法しかなく、その script タグがプリレンダリングされた HTML に含まれている必要があるからです。

ではチャチャッとつくるために、今回は StackBlitz を使います。

stackblitz.com

StackBlitz は Web ベースの IDE で、特に設定する必要なく Next.js の開発用サーバも用意してくれます。早速サインアップして React.js のプロジェクトを新規作成します。

はじめての方は GitHub の SSO で簡単にサインアップできます。

Next.js を選択して新規プロジェクトを作成

するといきなり Next.js のビルドがはじまり、終わると開発用サーバへのデプロイまで完了した状態になります。すごい!

右上にデプロイされたアプリケーションの URL があります。

ではさっそく雑に ToDo アプリをつくってみます→できました。コードはこちら

ポイントをピックアップして説明します。まず SDK のインポート。先に説明したとおり npm などはなく、script タグでインポートする形になります。

https://github.com/mxxxxkxxxx/puter-nextjs-todolist/blob/main/pages/index.js#L26

 return (
    <>
      <Head>
        <title>ToDoList</title>
        <script src="https://puter.com/cloud.js"></script>
      </Head>

今回 SDK を利用するのはアプリケーションの終了部分のみとします。SDK 利用箇所においてはサーバサイドで実行できないので、クライアントのみで実行するようにしておきます。

https://github.com/mxxxxkxxxx/puter-nextjs-todolist/blob/main/pages/index.js#L8

  const exit = useCallback(() => {
    // アプリケーションの終了
    // クライアントサイドでのみ実行可能
    if (process.browser) {
      const cloud = new Cloud();
      cloud.exit();
    }
  }, [process.browser]);

はい。これで Puter から終了可能な(雑な)ToDo アプリが完成しました!次は Puter から参照できるように作業しますが、StackBlitz は開いたままにしておいてください。閉じると開発用サーバも落ちてしまい、Puter 上でアプリを動かせなくなってしまいます。

Puter にアプリを登録する

まず Puter を開き、アカウントをつくりましょう。

https://puter.com/

次に Dev Center を開き、「Create an App」をクリックします。

Index URL には先ほどの Next.js の URL を入力し、作成します。

デスクトップ上にアイコンができるので、それをダブルクリックすると ToDo アプリが起動します。「終了」ボタンを押すと期待通りアプリが終了してくれます。

以上をもって Puter 上にアプリをつくることができました!(パチパチパチ!)

さいごに

まーこれがなんの役に立つの?っていう気は正直するんですが笑、発想としてはこれまでにないものだなと思いましたし(いまは亡き Firefox OS に近い感じはありますね)、純粋な技術的な興味でためしてみた感じでした。もしご興味あればぜひお試しください!