3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

フロントじゃなくてサーバー?! LiveViewNativeのサーバーをlivebookで一瞬で構築するKinoLiveViewNativeの紹介

Last updated at Posted at 2025-04-02

はじめに

本記事はLivebook上にLiveViewNativeのサーバーを構築するライブラリLiveViewNativeKinoを紹介します

LiveViewNativeとは

Phoenixで構築したWebアプリケーションから、
websocketとLiveViewのスタックを介してiOS,Android,Flutterの各プラットフォームの
データの一覧追加更新、イベントハンドリング、ステート管理、画面構成を行うライブラリです

Livebookとは

Automate code & data workflows with interactive notebooks

データ処理・描画やAIタスク、最近はPythonの実行まで出来るインタラクティブ実行環境です

アプリのインストール、ソースコードからサーバーの起動でも利用できます

Kinoとは

Client-driven interactive widgets for Livebook

Livebookで使用するインタラクティブなウィジェットです
主に画面等描画、インプットフォームや動画の再生など色々できます

KinoLiveViewNative

 livebookのスマートセル上にLiveViewNativeを組み込んだPhoenixサーバーを起動し
各クライアント(iOS,Android,Flutter)と通信を行います

利点としては、Phoenixのプロジェクトを作成することなく
LiveViewNativeを試すことができます

開発状況

6ヶ月ほど前から止まっており、破壊的変更が行われたLiveViewNativeの最新版の対応がされていないため、最新のライブラリを使おうとするとうまく動きません

forkしました

@RyoWakabayashi さんがliveview_native 0.4対応を行ってくれたので最新のバージョンでも動くようになりました

flutter対応しました

さらにforkしてflutterも組み込みました

準備

実際に動かそうと思いますが、その前に下準備としてlivebook,flutterのインストールとAndroidまたはiOSのシミュレーターを起動できるようにしておきます

Livebookのインストール

Windows,Macの方はこちらからインストールバイナリを落としてインストールをしてください

Linuxの方は
ソースから実行するか

git clone git@github.com:livebook-dev/livebook.git
cd livebook
mix deps.get --only prod

# Run the Livebook server
MIX_ENV=prod mix phx.server

dockerから起動してください

Flutterの開発環境の構築

こちらの記事のリンクを参考にしてください

iOS Simulatorの準備

以下の記事のXcodeのインストールを参考にしてください

Android Emulatorの準備

以下の記事のAndroidStudioのインストールを参考にしてください

サーバー側の起動

以下のコマンドでリポジトリをcloneします

git clone https://github.com/thehaigo/kino_live_view_native.git

完了したら、Livebookを起動してopenを押してサンプルのノートブックを開きます

スクリーンショット 2025-04-02 16.26.44.png

スクリーンショット 2025-04-02 16.27.55.png

ノートブックを開くとすでに設定と使用するライブラリの指定はされているので、setup(または Reconnected and setup)を押してセットアップを開始します

スクリーンショット 2025-04-02 16.30.28.png

1つ目のセルを実行します

こちらにはSwiftUIとFlutterの画面を定義しています

スクリーンショット 2025-04-02 16.34.26.png

:okが返ってくるとPhoenixサーバーが起動してログが流れるようになります

スクリーンショット 2025-04-02 16.34.40.png

クライアントアプリの作成

こちらのFlutterに沿って行います

flutter create my_flutter_app

ライブラリの追加

pubspec.yaml:L30
dependencies:
  flutter:
    sdk: flutter

  # The following adds the Cupertino Icons font to your application.
  # Use with the CupertinoIcons class for iOS style icons.
  cupertino_icons: ^1.0.8
+ liveview_flutter:
+   git:
+     url: git@github.com:alex-min/live_view_native_flutter_client.git
+     ref: master

以下のコマンドで取得します

flutter pub get

main.dartを次のように書き換えます

lib/main.dart
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:liveview_flutter/liveview_flutter.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final LiveView view = LiveView();

  @override
  initState() {
    Future.microtask(boot);
    super.initState();
  }

  void boot() async {
    if (kIsWeb) {
      view.connectToDocs();
      return;
    }

    await view.connect(
      Platform.isAndroid
          ?
          // android emulator
          'http://10.0.2.2:4000'
          // computer
          : 'http://localhost:4000/',
    );
  }

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return view.rootView;
  }
}

保存したら以下を実行します

flutter run

実行する端末を指定してAndroid,iOSの両方で表示されるのを確認できました

スクリーンショット 2025-04-02 16.43.25.png

最後に

KinoのイメージからLivebook上で画面が描画されると勘違いしましたが、
Livebookからノートブックをベースに起動して、コンポーネント等を簡単に試せるなど色々便利ではありますね

本記事は以上になりますありがとうございました

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?