Lynx

概要
クロスプラットフォーム開発用のフレームワーク「Lynx」を使ってみる。
とりあえずQuick Start
https://lynxjs.org/guide/start/quick-start.html
プロジェクトの作成
npm create rspeedy@latest
◆ Create Rspeedy Project│◇ Project name or path│ prayground <= 任意の名前│◇ Select language│ TypeScript│◆ Select additional tools (Use <space> to select, <enter> to continue)│ ◼ Add Biome for code linting and formatting│ ◼ Add ESLint for code linting│ ◼ Add Prettier for code formatting│◇ Next steps ─────────────╮│ ││ 1. cd prayground ││ 2. git init (optional) ││ 3. npm install ││ 4. npm run dev ││ │├──────────────────────────╯│└ All set, happy coding!
以下の警告が出たが、とりあえず無視。
npm warn deprecated acorn-import-assertions@1.9.0: package has been renamed to acorn-import-attributes
Xcode
XcodeはApp Storeから取得する。Componentなし(Built-inだけ)でインストールしたらこの後のSimulator部分で進めなくなったので、[Xcode] - [Settings] - [Components]から「iOS 18.2 + iOS 18.3.1 Simulato」を選択してインストールした。
Simulator
Xcodeを起動したら[Open Developer Tool]からSimulatorを起動。[File] - [Open Simulator] - [iPhone 16 Pro]を選択すればiPhoneが立ち上がる。
LynxExplorer
LynxExplorerをダウンロードして解凍。
mkdir -p LynxExplorer-arm64.app && tar -zxf LynxExplorer-arm64.app.tar.gz -C LynxExplorer-arm64.app/
LynxExplorer-arm64.app
ディレクトリは破損した見た目になるが気にしない。作成したディレクトリをiPhoneにドラッグアンドドロップすると、ホーム画面にLynxExplorerが追加される。
開発サーバを起動する
npm run dev
起動したらGRコードとURLが表示されるので、LynxExplorerを起動して「Card URL」に当該URLを貼り付けて「Go」するとローカルが確認できた。Lynxのロゴはかっこいい。
/src/App.tsxを編集してみて、ホットリロードされることも確認できた。コードを見ると<text></text>
や<view></view>
などの、HTMLライクな独自要素を使って構築できるみたい。
import { useCallback, useEffect, useState } from '@lynx-js/react'
import './App.css'import arrow from './assets/arrow.png'import lynxLogo from './assets/lynx-logo.png'import reactLynxLogo from './assets/react-logo.png'
export function App() { const [alterLogo, setAlterLogo] = useState(false)
useEffect(() => { console.info('Hello, ReactLynx') }, [])
const onTap = useCallback(() => { 'background only' setAlterLogo(!alterLogo) }, [alterLogo])
return ( <view> <view className='Background' /> <view className='App'> <view className='Banner'> <view className='Logo' bindtap={onTap}> {alterLogo ? <image src={reactLynxLogo} className='Logo--react' /> : <image src={lynxLogo} className='Logo--lynx' />} </view> <text className='Title'>React</text> <text className='Subtitle'>on Lynx</text> </view> <view className='Content'> <image src={arrow} className='Arrow' /> <text className='Description'>Tap the logo and have fun!</text> <text className='Hint'> Edit<text style={{ fontStyle: 'italic' }}>{' src/App.tsx '}</text> to see updates! </text> </view> <view style={{ flex: 1 }}></view> </view> </view> )}
また時間ある時にドキュメントを読み進めてみる。
続く...かもね