RORK LABEN
NATIVE — Rork Max は純粋な Swift と SwiftUI を生成するため、AR や LiDAR、Metal を使った 3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで手が届きますCHOICE — 逆にいえば、こうした Apple 固有の機能を使わないアプリならクロスプラットフォームの通常の Rork で足ります。Max を選ぶ理由はこの一点に集約されますPLAY — 8月31日から、Google Play の新規アプリと既存アプリの更新は対象 API レベル36(Android 16)が必要になります。残り9日ですPLAY — 更新を出さない既存アプリでも、より新しい Android を載せた端末の新規ユーザーへ配信を続けるには対象 API レベル35 以上が要ります。見落とすと新規インストールだけが止まりますGRACE — Play Console の延長フォームから申請すれば11月1日まで猶予されます。自動ではないため、8月31日までに申請そのものを済ませておく必要がありますEXPO — expo prebuild がネイティブディレクトリを破棄して再生成するのが既定になりました。手を入れている場合は no-clean を渡します。API 36 対応の最中は事故になりやすい箇所ですNATIVE — Rork Max は純粋な Swift と SwiftUI を生成するため、AR や LiDAR、Metal を使った 3D、ウィジェット、Dynamic Island、Live Activities、HealthKit、NFC、Core ML まで手が届きますCHOICE — 逆にいえば、こうした Apple 固有の機能を使わないアプリならクロスプラットフォームの通常の Rork で足ります。Max を選ぶ理由はこの一点に集約されますPLAY — 8月31日から、Google Play の新規アプリと既存アプリの更新は対象 API レベル36(Android 16)が必要になります。残り9日ですPLAY — 更新を出さない既存アプリでも、より新しい Android を載せた端末の新規ユーザーへ配信を続けるには対象 API レベル35 以上が要ります。見落とすと新規インストールだけが止まりますGRACE — Play Console の延長フォームから申請すれば11月1日まで猶予されます。自動ではないため、8月31日までに申請そのものを済ませておく必要がありますEXPO — expo prebuild がネイティブディレクトリを破棄して再生成するのが既定になりました。手を入れている場合は no-clean を渡します。API 36 対応の最中は事故になりやすい箇所です
記事一覧/開発ツール
開発ツール/2026-08-22上級

一括置換は全ファイル成功しました。壊れたのは、消さなかった行のほうです

生成コードに一括置換をかけると、一致した行ではなく隣の行が壊れます。運用中のプロジェクトで実際に起きた破損と、置換の不変条件を検査する20行のガードスクリプトをまとめました。

Rork541Expo177React Native228リファクタリング5運用8

プレミアム記事

運営している技術サイトの記事ファイルから、アフィリエイトの定型誘導文をまとめて削除しました。行を指定して消すだけの、sed 一行で済む作業です。終了コードは 0。差分を眺めて、消えるべき行が消えたことも確認しました。

破損に気づいたのは、それから数週間後です。

しかも、壊れていたのは私が消した行ではありませんでした。

全件成功したあとに、後から見つかったもの

同じリポジトリの記事ファイル 975 本を、いまあらためて機械的に検査した結果が次の表です。すべて、あの一括削除より後に混入したものです。

検出した症状件数原因
本文が文の途中で終わっている36 本削除対象の直前にあった導入句だけが残った
見出しは残っているのに中身が空48 本見出しの下の段落だけが削除条件に一致した
コードブロックが閉じていない2 本閉じる側のフェンスが削除範囲に入った
本文に \ + ! のエスケープが残存36 本別の一括書き込みで混入し、そのまま気づかれなかった

48 本の「空の見出し」は、全部が同じ文言の見出しでした。段落を消す条件が、たまたまその見出しの直下だけに当たっていたわけです。見出しが残っているので、目次にも記事一覧にも普通に出てきます。開いて初めて何もないと分かる。

いちばん堪えたのは、この 4 種類のどれも、置換した瞬間には一切の兆候を出さなかったことです。

同じ1行の削除が、ファイルによって3通りに分かれます

この構造を最小の形で再現しました。Rork が出力するような Expo プロジェクトの断片を 4 つ用意して、legacy を含む行を消すだけの置換をかけます。実際にコードを整理するとき、誰もが一度は書く条件です。

for f in src/PaywallScreen.tsx src/LegacyBanner.tsx src/useCredits.ts locales/ja.json; do
  sed -i '/legacy/Id' "$f"; echo "$f exit=$?"
done

結果はこうなりました。

src/PaywallScreen.tsx exit=0
src/LegacyBanner.tsx  exit=0
src/useCredits.ts     exit=0
locales/ja.json       exit=0

4 ファイルすべて成功です。ところが中身は 3 通りに分かれていました。

無害だったものPaywallScreen.tsx の該当行は単なる // TODO: legacy analytics のコメントで、消えても何も起きません。

コンポーネントごと消えたものLegacyBanner.tsx は、スタイルオブジェクトの内側にこう書かれていました。

    <View
      style={{
        // legacy spacing, keep until redesign
        padding: 12,
      }}
    />

消えたのはコメント 1 行だけです。それなのに、このファイルは中括弧の対応が 1 つ足りない状態になりました。理由は単純で、削除条件の大文字小文字を無視する指定(I)が、ファイル名由来の識別子 LegacyBanner を含む export function LegacyBanner() { の行にも当たっていたからです。開き括弧を持つ行が消え、閉じ括弧だけが残りました。

データとして壊れたものlocales/ja.json が最悪でした。

{
  "paywall.title": "すべての機能を解放",
  "paywall.cta": "続ける",
}

末尾のキーが消えて、その手前の行のカンマが取り残されています。TypeScript ならビルド時に落ちますが、JSON は import の仕方によっては実行時まで露見しません。i18n の辞書やテーマ定義、app.config の付随ファイルは、この形の破損に対してもっとも無防備です。

辞書のキーが欠けたまま本番に出ると、画面には翻訳されていないキー文字列がそのまま並びます。App Store の審査で必ず弾かれる類の不具合でもないため、スクリーンショット付きの低評価レビューで初めて知る、という順序になりがちです。回避したいのは破損そのものというより、この気づく順序のほうでした。

同じ 1 行の条件が、コメント削除にも、コンポーネント消失にも、辞書の破壊にもなる。これが一括置換の実際の姿でした。

ここまでお読みいただきありがとうございます。

この記事の続きを読む

この先には、実装コードやベンチマーク結果など、実務でお役に立てる内容をご用意しています。このサイトは広告を掲載しておらず、サーバーや開発にかかる費用はメンバーの皆様のご支援で成り立っています。もしお役に立てていましたら、ご支援いただけますと大変ありがたいです。

この記事で得られること
一括置換をかける前に、自分のプロジェクトのどのファイルが「消した行の隣で壊れる」形をしているかを見分けられるようになります
置換が成功したことと、成果物が健全であることを切り分けて検査する仕組みを、依存ゼロのスクリプト1本で組み込めるようになります
破損に数週間気づかないという事態そのものを、置換のたびに止められるようになります
Stripe による安全な決済 · いつでもキャンセル可能

この記事を購入する

この先の内容をすべてお読みいただけます。一度のご購入で、いつでも何度でもアクセスできます。このサイトは広告を掲載しておらず、皆さまのご支援がサーバー費用などの運営を支えています。

または
メンバーシップなら全記事が読み放題 →
シェア

お読みいただきありがとうございます

Rork Lab は広告なしで運営しており、サーバー費用などの運営コストはメンバーシップのご支援で賄っています。実装コード・ベンチマーク・本番設計パターンなど、実務でお役立ていただける記事を毎日更新しています。もし読んでよかったと感じていただけましたら、ぜひご覧ください。

  • コピー&ペーストで使える実装コード付き
  • 毎日新しい上級ガイドを追加
  • ¥580/月 または ¥2,480 の永久アクセス
メンバーシップを見る →

関連記事

開発ツール2026-07-30
Renovate が触ってよい依存と、触ってはいけない依存 — Expo SDK 57 の123パッケージを機械的に切り分ける
Rork 生成アプリに依存の自動更新を入れると、Expo が版を管理している123パッケージまで巻き込まれます。2026年7月30日時点の実測では、うち6件が npm の最新版へメジャー更新される差でした。除外リストを手で書かず SDK から機械生成する手順をまとめます。
開発ツール2026-07-28
prebuild --clean で消える手入れを、上げる前に数える — Expo SDK 57 移行の棚卸し
Expo SDK 57 への移行前に、ios/ へ加えた手入れが prebuild の再生成でいくつ失われるかを数える手順をまとめました。素の差分649行のうち意味を持つのは3行。ノイズを正規化して実質的な変更だけを抽出するスクリプトと、config plugin への移し替えを実測つきで共有します。
開発ツール2026-07-27
最低サポート iOS をいつ上げるか — 利用率ではなく、コードに残った分岐の数で決める
最低サポート OS の引き上げを利用率で判断すると、毎年同じ結論になって先送りが続きます。OS 分岐に注記を付けて棚卸しし、引き上げ先ごとに消せる分岐を数えるスクリプトと、引き上げ後に見る指標をまとめました。
📚RECOMMENDED BOOKS
大規模言語モデル入門
山田育矢
LLM開発
生成AIプロンプトエンジニアリング入門
我妻幸長
プロンプト
Claude CodeによるAI駆動開発入門
平川知秀
AI駆動開発
※ アフィリエイトリンクを含みます
もっと見る →