最初のビルドを実機で開いた瞬間、画面の色が昼・夕・夜の3段階でカクンと切り替わりました。時刻に合わせて色温度が静かに転調していく——そう構想していた「祈りのモード」が、スナップ切替として実装されていたのです。アート作品を扱うアプリにとって、このなめらかさの欠落は機能の不足ではなく、表現の破綻を意味します。
ここ数週間、Rorkにアート系アプリの試作を任せてきました。構図・余白・色彩を一つの言葉として扱う作家としての立場と、個人でアプリを作り続けてきた開発者としての立場。その両方を行き来しながら、「アート系のアプリにRorkは耐えられるのか」という問いを実作業で検証した記録です。見えてきた強みと弱みを、率直にお伝えします。
何を試作したか — 「祈りの作品集」アプリ
試作の題材は、私のアート作品テーマである「日本特有の祈りを背景に、集団心理と認知世界の構造、根源意識を探る」をそのままアプリ化したものです。具体的には次の3つの体験を1本のアプリにまとめる構想にしました。
- 作品ギャラリー(縦スクロール・ピンチズーム・余白を活かしたレイアウト)
- 作品ごとの音声朗読(私自身の声で制作背景を語る・stand.fmからの音声を組み込む想定)
- 「祈りのモード」(時刻と気象に応じて画面の色温度と余白量が静かに変化する)
このうち、特に3つ目の「祈りのモード」は、UIフレームワークの設計が浅いと表現しきれません。アート系アプリでもっとも譲れないのは、ピクセル単位の余白と、色温度の微妙な転調です。Rorkがこの領域にどこまで応えるかが、今回の検証の核心でした。
最初の30分で出てきたものの率直な評価
プロンプトに上記の3つの体験を箇条書きで渡し、生成を待ちました。30分ほどで出てきた最初のアプリは、構造としては想像以上に整っていました。
- React Native(Expo)ベースのプロジェクトとして一式そろっていた
- 作品ギャラリーがFlatListで実装され、ピンチズームのライブラリ(react-native-image-zoom-viewer相当)が組み込まれていた
- 朗読音声のスタブ画面があり、再生・一時停止・シークが動く状態だった
- 「祈りのモード」用のテーマ切替ロジックがContext API経由で組まれていた
これは正直、長く個人開発を続けてきた感覚から言って、初期構造としてかなり良い水準です。ただし、ここからが本題でした。Rorkの生成物は「アプリの骨格」としては及第点でしたが、「アート作品としての細部」に踏み込むと、人間が手を入れる余白がはっきり残っていました。
// Rorkが最初に生成したThemeProviderの抜粋(素のままだとアート用途には浅い)
const ThemeContext = createContext({ mode: "day", setMode: (_: string) => {} });
export function ThemeProvider({ children }: { children: ReactNode }) {
const [mode, setMode] = useState<"day" | "dusk" | "night">("day");
// ❌ 色温度の変化が3段階のスナップでしかない
const palette = {
day: { bg: "#FFFFFF", fg: "#111111" },
dusk: { bg: "#F2E8D5", fg: "#3A2B1B" },
night:{ bg: "#0E0F14", fg: "#E8E4D8" },
}[mode];
return (
<ThemeContext.Provider value={{ mode, setMode }}>
<View style={{ flex: 1, backgroundColor: palette.bg }}>{children}</View>
</ThemeContext.Provider>
);
}私が望んでいたのは、時刻に応じて色温度が連続的に滑らかに転調していく挙動です。3段階のスナップ切替では、そもそもアートとしての所作になりません。ここを書き換えていく作業が、Rorkとの対話で最も時間を要した部分でした。
アート文脈をプロンプトでどこまで届けられるか
最初のプロンプトでは「祈りのモード」とだけ書いていたため、Rorkは安全な解釈として3段階の切替を選んだのだと思います。そこで2回目のプロンプトでは、自分の中の言語をできるだけ翻訳して伝え直しました。
「祈りのモード」は、時刻と気象データから連続的に色温度・彩度・余白量を補間します。スナップ切替ではなく、4分ごとに静かに変化します。日没前後の30分は彩度を意図的に高め、深夜0時から3時は余白を画面の20%まで広げる。
この具体性で投げ直すと、Rorkは補間ロジックを書いてくれました。色温度はrequestAnimationFrameでHSLを補間するコードに、余白はuseEffectで時刻に応じてpaddingを更新するコードに、それぞれ落ちました。
// 改善後: 時刻に応じて連続的に色温度を補間
import { useEffect, useState } from "react";
function interpolateHSL(t: number) {
// 0時=深い藍 / 6時=朝霞色 / 12時=純白寄り / 18時=琥珀 / 24時=深い藍へ戻る
const phases = [
{ h: 220, s: 30, l: 8 },
{ h: 30, s: 25, l: 92 },
{ h: 0, s: 0, l: 98 },
{ h: 28, s: 60, l: 70 },
{ h: 220, s: 30, l: 8 },
];
const idx = Math.floor(t / 6);
const local = (t % 6) / 6;
const a = phases[idx], b = phases[idx + 1];
const h = a.h + (b.h - a.h) * local;
const s = a.s + (b.s - a.s) * local;
const l = a.l + (b.l - a.l) * local;
return `hsl(${h}, ${s}%, ${l}%)`;
}
export function usePrayerPalette() {
const [bg, setBg] = useState(interpolateHSL(new Date().getHours()));
useEffect(() => {
const id = setInterval(() => {
const now = new Date();
const t = now.getHours() + now.getMinutes() / 60;
setBg(interpolateHSL(t));
}, 4 * 60 * 1000); // 4分ごとに静かに更新
return () => clearInterval(id);
}, []);
return bg;
}ここで気づいたことが、今回の検証で最大の発見でした。Rorkは「アート文脈を持つ言葉」を曖昧にしか受け取らない代わりに、数値や時間を含む具体的な指示には驚くほど忠実に応えるのです。アーティスト側で自分の感覚を「数式・時間軸・割合」に翻訳して渡せば、Rorkは想像以上に細部まで応えてくれます。逆に「もっと余白を活かして」「もっと祈りらしく」のような形容詞だけのプロンプトでは、無難な解釈で止まる傾向がありました。
日々運用する側の視点で「実用に耐えるか」を見る
ここからは、ストアに出したアプリを運用し続けてきた個人開発者の視点で見ます。アート系アプリは、見栄えだけで判断してはいけません。日々動かして、ストアに出して、ユーザーの手元で問題なく動き続けるかを問う必要があります。
- 起動時間: Rork生成のままでは初回起動が約2.6秒。FlatListの初期レンダリング件数を絞り、画像をexpo-imageに置き換えて1.4秒まで短縮
- メモリ使用量: 高解像度作品を100点表示する設計なので、初期実装ではiPhone SE(第2世代)でクラッシュ。
recyclerlistview系への置き換えで安定 - アクセシビリティ: ピンチズーム時のVoiceOver読み上げが最初は機能していなかったため、
accessibilityLabelとaccessibilityHintを作品ごとに付与 - ストア審査: アプリ内に音声朗読を含めるため、プライバシーマニフェストと録音目的の記述が必要だった
これらは、Rorkが一発で解決してくれる類の問題ではありません。私が壁紙アプリや癒し系アプリで何度もやってきた手作業が、依然として必要でした。ストアで長くアプリを運用するほど身に染みてくるのは、生き残るアプリは「最初の構造」だけでは作れず、「日々の小さな手当て」の積み重ねでしか作れないということです。Rorkはその出発点を3週間ぶん早めてくれましたが、ゴールまで運んでくれるわけではありませんでした。
収益化や運用まで含めた実際の工程は、Rorkで作る「はじめて収益化するアプリ」の全工程 で別途整理しています。今回の「実用に耐えるか」という視点の背景として、あわせて読んでいただければ立体的に掴めるはずです。
アート系アプリの試作にRorkを使うべき5つの場面
3週間の試作を経て、自分なりに「Rorkに任せたほうがよい場面」と「人間が握ったほうがよい場面」が見えてきました。アート系アプリに限定して、判断基準を共有します。
- ✅ 構造を立ち上げる初期24時間: ナビゲーション、画面遷移、状態管理の素地はRorkに任せて構わない
- ✅ 標準的なUI部品の実装: ボタン、フォーム、シート、リストなどの土台はRorkで十分
- ✅ アクセシビリティの素地づくり: ラベル付けやコントラスト比は最初の網としてRorkに掛けてもらうとよい
- ❌ 余白・色温度・タイポグラフィの最終調整: ここは作家本人が握る領域。プロンプトで「数値」に翻訳して渡しても、最終確認は手作業
- ❌ 静的アセットの選定: 写真・音声・フォントの選定は作家の感性領域。AIに任せてはいけない
念のため書き添えておくと、今回Rorkに任せたのはアプリという「器」の実装だけです。ギャラリーに収める作品そのものは、これまでと変わらず完全に手作業で制作しています。器にはAIを全面的に使い、中身には一切使わない。この距離の取り方が、私にとっての作家としての線引きです。
Rorkのような道具は、技術と表現の境界を静かに溶かしていきます。ただ、便利さに任せきると、その人の作品は「誰にでも作れるもの」に近づいてしまいます。便利な部分は遠慮なく任せ、作家の輪郭を決める部分だけは自分の手で磨く。この切り分けを意識するだけで、Rorkとの付き合い方は確実に変わります。
追記: Rork Max のネイティブ Swift 出力で判断は変わるか
この試作で使ったのは、React Native(Expo)のプロジェクトを出力する通常のRorkでした。その後、AppleプラットフォームむけにネイティブSwiftを出力するRork Maxが登場し、iPhoneだけでなくiPad・Apple Watch・Vision Proまでが射程に入りました。アート系アプリの観点で見逃せないのは、Metalによる描画やホーム画面ウィジェット、Live Activitiesといった、React Nativeからは扱いづらかった表現領域に手が届くことです。
「祈りのモード」のような連続的な色の転調も、SwiftUIならTimelineViewで素直に書けます。RN版のsetIntervalと違い、更新のタイミング管理をシステム側に預けられるのが利点です。
// Rork Max(Swift出力)へ同じ発想を移植する場合の骨格
import SwiftUI
struct PrayerBackground: View {
// 0時=深い藍 / 6時=朝霞 / 12時=純白寄り / 18時=琥珀 / 24時=深い藍(RN版と同じキーフレーム)
private let phases: [(h: Double, s: Double, b: Double)] = [
(0.61, 0.30, 0.20),
(0.08, 0.25, 0.95),
(0.00, 0.00, 0.99),
(0.08, 0.60, 0.85),
(0.61, 0.30, 0.20),
]
var body: some View {
TimelineView(.periodic(from: .now, by: 240)) { context in // 4分ごとに静かに更新
let comps = Calendar.current.dateComponents([.hour, .minute], from: context.date)
let t = Double(comps.hour ?? 0) + Double(comps.minute ?? 0) / 60.0
let idx = min(Int(t / 6), 3)
let local = (t - Double(idx) * 6.0) / 6.0
let a = phases[idx]
let b = phases[idx + 1]
Color(hue: a.h + (b.h - a.h) * local,
saturation: a.s + (b.s - a.s) * local,
brightness: a.b + (b.b - a.b) * local)
.ignoresSafeArea()
.animation(.easeInOut(duration: 8), value: t)
}
}
}ただし、判断の軸は変わりませんでした。数値・時間・割合に翻訳して渡すほど忠実に応える性質はSwift出力でも同じで、最終の色と余白を決めるのが作家の手であることも同じです。器の性能が上がるほど、任せる部分と握る部分の線引きは、むしろ重要になっていきます。
料金面では、Rork Maxは月200ドル前後のプランが基本で、時期によって期間限定の無料トライアルが開放されることがあります。クレジット制で翌月への繰り越しがないため、試すなら「検証したい題材を1つ決めて、期間内に通しで作り切る」使い方が現実的です。料金やクレジット数は変わりやすいため、試す前に公式の一次情報を確認してください。Rork Maxを実アプリで検証した記録としては、Rork Max の SwiftUI 機能を壁紙アプリ開発で検証した結果 もあわせて参考になるはずです。
まずはあなたの作品の中の「数値で語れる部分」を1つ書き出してみる
もしあなたが作家として、あるいは個人開発者としてアート系アプリを作りたい場合、最初の一歩としておすすめしたいのは「自分の作品の中で、数値や時間で語れる部分を1つだけ書き出す」ことです。色温度なら何度から何度まで、余白なら画面比率の何%、リズムなら何秒間隔。たった1行でいいので、自分の感覚を数値に翻訳してみてください。それが揃った瞬間、Rorkは想像以上の応答を返してくれます。
最後までお読みいただき、ありがとうございました。今回の試作で引いた線は、私自身まだ引き直しの途中にあります。あなたの作品づくりの一助になれば幸いです。