Flipper Zero Zig テンプレート

2026/06/01 22:20

Flipper Zero Zig テンプレート

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

このテキストは、Flipper Zero デバイス向けアプリケーションの開発を目的とした、最新の生産準備済み Zig テンプレートを紹介する。macOS および Linux の両プラットフォームでシームレスに動作する完全なクロスプラットフォーム開発セットアップを提供し、必須条件として Zig 0.15.1 以上と Python 3 のみを必要とする。アーキテクチャは 2 段階のビルドプロセスを通じて動作する:第一段階では、Zig が Thumb ABI と ReleaseSmall オプティマイゼーションを使用してソースコードを ARM Cortex-M4 オブジェクトファイルにコンパイルし、第二段階では統合された UFBT ツールが Flipper Zero SDK とのリンキングを扱う。この自動化されたシステムは、STM32WB55 HAL および mbedTLS 暗号化ライブラリといった複雑な必須条件を手動介入なしで管理する。

開始するには、ユーザーは pip を介して ufbt をインストールし、テンプレートを取得し、インタラクティブスクリプトを実行して App ID、表示名、著者などの基本メタデータを設定する。プロジェクトは

src/root.zig
(エントリーポイント)、
application.fam
(メタデータとスタックサイズの管理)、
build.zig
といったコアファイルを依存している。主要なコマンドには、オブジェクトファイルをコンパイルするための
zig build
および最終的な
.fap
ファイルをパッケージ化しリンキングするための
zig build fap
が含まれる。デプロイメントは、コンパイルされたアプリケーションをハードウェアに転送するか、配布用にパッケージ化するかを選択して USB を介して直接トリガーすることが可能である。SDK は、
@cImport
を通じて FURI ライブラリ、Sub-GHz/NFC/RFID プロトコル、および外設(GPIO/SPI/I2C/UART)へのアクセスを許可する。ただし、安定したデプロイメントには ARM AAPCS(または AAPCS-VFP)関数エクスポート基準の厳格な遵守が必要であり、コールバックでこれらのシグネチャが一致しない場合、クラッシュを引き起こす。トラブルシューティングについては、欠落しているヘッダーを解決するために
ufbt update
を実行するか、リンキングエラーを修正するために
zig build fap
を使用するか、スタックオーバーフローを防ぐために
application.fam
内の
stack_size
を調整することができる。

本文

Flipper Zero Zig テンプレート

Zig プログラミング言語を用いて Flipper Zero アプリケーションを開発するための、現代的で生産環境に即したテンプレートです。本プロジェクトは、Zig と Flipper Zero SDK を統合した簡潔なビルドシステムを提供し、開発者が 型安全かつメモリ安全なアプリケーションを作成することを可能にします。

概要

このテンプレートは、Zig の強力なビルドシステムおよび言語機能を、Flipper Zero のファームウェア開発キットと結び付けます。

  • Zig の ARM Cortex-M4 クロスコンパイル
  • Flipper SDK との複雑な統合を処理
  • カスタムアプリケーションのための清潔なスタートポイントを提供

主な機能

  • ネイティブ Zig サポート: コンパイル時の安全性保証および C 言語との互換性を活かし、Flipper アプリケーションを完全に Zig で記述できます。
  • 自動化されたビルドパイプライン: FAP ファイルのパッケージングのために ufbt(非公式ビルドツール) とシームレスに統合されています。
  • クロスプラットフォーム開発: Zig がサポートする macOS、Linux および他のプラットフォームで動作します。
  • SDK 統合: 完全な Flipper SDK(F7 ターゲット)のためのプリ構成済み include パスおよびコンパイラフラグが用意されています。
  • インタラクティブなセットアップ: アプリメタデータをカスタマイズするためのガイドされた初期化スクリプトが含まれています。
  • クイックローンチ: Flipper デバイスへビルド、パッケージ化、デプロイするための組み込みコマンドが用意されています。

アーキテクチャ

本テンプレートは、2 つ段階のビルドプロセスを採用しています。

1. Zig ビルドステージ

  • Zig ソースを ARM Cortex-M4 オブジェクトファイル
    app.o
    )へコンパイルします。
  • ターゲット: ARM Thumb アーキテクチャ、Cortex-M4 CPU モデル
  • ABI: EABIHF(Embedded Application Binary Interface, Hard Float)
  • 最適化: 最小二値サイズの取得を目指した
    ReleaseSmall

2. UFBT パッケージステージ

  • オブジェクトファイルを SDK とリンカーし、
    .fap
    フォーマット
    へパッケージ化します。
  • 公式 Flipper ビルドツールチェーンによって処理されます。
  • デプロイ可能なアプリケーションパッケージを生成します。

必要条件

必要なツール

  • Zig: バージョン 0.15.1 以降(ダウンロード)
  • UFBT: Unofficial Flipper Build Tool(インストールガイド参照)
  • Python 3: ufbt コマンドを実行するために必須です。
  • Flipper Zero SDK: ufbt によって自動的に管理され、
    ~/.ufbt
    にインストールされます。

プラットフォーム固有のセットアップ

macOS 本テンプレートは ARM64 macOS 向けに事前構成されており、ARM ツールチェーンパスは以下の通りです。

  • ~/.ufbt/toolchain/arm64-darwin/arm-none-eabi/include

異なるプラットフォームでお使いの場合には、

build.zig:31
arm_libc_include
パスを調整し、お使いのツールチェーンの場所に合わせてください。

インストール手順

UFBT をインストールする:

python3 -m pip install --upgrade ufbt
ufbt update

テンプレートをクローンまたはダウンロードする:

git clone https://github.com/yourusername/flipper-template.git
cd flipper-template

プロジェクトを初期化する: このインタラクティブスクリプトは、以下の情報をユーザーに確認します。

  • アプリ ID(例:
    my_custom_app
  • ディスプレイ名(Flipper メニューに表示されます)
  • 説明
  • 著者名
  • GitHub リポジトリ URL

使用方法

アプリケーションのビルド

Zig ソースをオブジェクトファイルへコンパイルします。これにより、

zig-out/bin/app.o
にすべてのコンパイル済みのアプリケーションコードが作成されます。

FAP パッケージの作成

完全なアプリケーションをビルドしてパッケージ化します。このコマンドは以下のフルパイプラインを実行します。

  1. Zig ソースをオブジェクトファイルへコンパイルする。
  2. SDK とリンケージを行うために ufbt を呼出す。
  3. dist/
    ディレクトリに
    .fap
    ファイル
    を生成する。

Flipper へのデプロイ

接続された Flipper Zero で直接アプリを起動します。これはビルド、パッケージ化、および USB を介した転送を行い、自動的に起動を実行します。

プロジェクト構造

flipper-template/
├── application.fam       # Flipper アプリマニフェスト(メタデータ、エントリーポイント)
├── build.zig            # Zig ビルドシステムの構成
├── build.zig.zon        # Zig パッケージマニフェスト
├── icon.png             # アプリアイコン(推奨サイズ 10x10px)
├── setup.sh             # インタラクティブなプロジェクト初期化スクリプト
├── src/
│   └── root.zig         # メインアプリケーションのソースコード
└── zig-out/             # ビルドアサート(自動生成)
    └── bin/
        └── app.o        # コンパイル済みのオブジェクトファイル

主要なファイル

  • src/root.zig
    : エントリーポイントで、
    start()
    関数およびアプリケーションロジックを含む。
  • application.fam
    : Flipper 固有の設定(アプリ ID、カテゴリ、依存関係、スタックサイズなど)。
  • build.zig
    : コンパイルターゲット、SDK パス、ビルドコマンドを定義する。

開発ガイド

最小限のアプリケーション構造

テンプレートにはコア Flipper API を使用した「Hello World」例が含まれています。

// Flipper SDK 関数をインポート
const flipper = @cImport({
    @cInclude("furi.h");
    @cInclude("gui/gui.h");
    @cInclude("gui/canvas.h");
    @cInclude("gui/view_port.h");
});

// アプリケーションのエントリーポイント("start" という名前である必要があります)
export fn start(_: ?*anyopaque) callconv(.{ .arm_aapcs = .{} }) i32 {
    // GUI ビューポートを初期化
    const gui = flipper.furi_record_open("gui");
    const view_port = flipper.view_port_alloc();

    // コールバックと UI を設定
    // ... (完全な実装については src/root.zig を参照してください)

    // イベントループ
    _ = flipper.furi_thread_flags_wait(1, flipper.FuriFlagWaitAny, flipper.FuriWaitForever);

    return 0;
}

SDK の統合

ビルドシステムは自動的に以下の include パスを設定します。

  • コア SDK: FURI(Flipper Universal Runtime Interface)
  • HAL: STM32WB55 ハードウェアのアブストラクション層
  • 標準ライブラリ: mbedTLS、nanopb、mlib
  • プロトコルライブラリ: Sub-GHz、NFC、RFID、赤外線
  • パイプライン API: GPIO、SPI、I2C、UART

すべてのヘッダーファイルは、Zig コード内の

@cImport()
を通じて利用可能です。

呼出し規約に関する注意点

Flipper SDK は ARM AAPCS 呼出し規約を使用しています。

  • AAPCS: 標準的な ARM プロシージャコール(例:
    start()
    エントリーポイント)
  • AAPCS-VFP: 浮動小数点/ベクトルサポート付き(例:コールバック)

export された関数が期待される呼出し規約と一致していることを確認してください:

export fn start(_: ?*anyopaque) callconv(.{ .arm_aapcs = .{} }) i32
export fn draw_callback(canvas: ?*Canvas, ctx: ?*anyopaque) callconv(.{ .arm_aapcs_vfp = .{} }) void

SDK インポートの扱い

一部の SDK ヘッダーには、Zig の C 変換器が処理できない構造体が含まれている場合があります(例:

input/input.h
の不透明型を持つユニオン)。これらの場合のために、extern 関数を手動で宣言してください:

extern fn view_port_input_callback_set(
    view_port: ?*flipper.ViewPort,
    callback: ?*const fn (?*anyopaque, ?*anyopaque) callconv(.{ .arm_aapcs_vfp = .{} }) void,
    context: ?*anyopaque
) callconv(.{ .arm_aapcs = .{} }) void;

トラブルシューティング

ビルドエラー

  • 問題: ヘッダー
    'furi.h'
    が見つからない
    • 原因:UFBT SDK がインストールされていない、または
      ~/.ufbt
      のパスが正しくない。
    • 解決策:SDK ヘッダーをインストールするために
      ufbt update
      を実行してください。
  • 問題:
    'view_port_alloc'
    に未定義の参照
    • 原因:オブジェクトファイルを SDK と適切にリンクしていない。
    • 解決策:リンケージを完了させるために
      zig build fap
      を使用し、単なる
      zig build
      は避けてください。

デプロイの問題

  • 問題: Flipper デバイスが検出されません
    • 原因:デバイスが接続されていないか、DFU モードに入っている。
    • 解決策:USB を介して接続し、メインメニューでデバイスのロックを解除していることを確認してください。
  • 問題: 起動時にアプリがクラッシュする
    • 原因:スタックオーバーフローまたは不適切な呼出し規約。
    • 解決策:
      application.fam
      stack_size
      を増やしたり、関数のシグネチャを確認してください。

高度な設定

コンパイラフラグ

プリプロセッサマクロを調整するために、

build.zig
addFlipperDefines()
を変更します。

obj.root_module.addCMacro("FAP_VERSION", "\\\"1.0\\\"");
obj.root_module.addCMacro("CUSTOM_DEFINE", "value");

最適化設定

build.zig:11
で最適化レベルを変更します。

const optimize = b.standardOptimizeOption(.{
    .preferred_optimize_mode = .ReleaseFast,  // または .ReleaseSmall, .Debug
});

ターゲットアーキテクチャ

本テンプレートは Flipper Zero の STM32WB55(ARM Cortex-M4F) をターゲットとしています。他の ARM デバイスへのポータビリティを変更するには、

build.zig:4-9
を調整します。

const target = b.resolveTargetQuery(.{
    .cpu_arch = .thumb,
    .cpu_model = .{ .explicit = &std.Target.arm.cpu.cortex_m4 },
    .os_tag = .freestanding,
    .abi = .eabihf,
});

コントリビューション

コントリビューションを歓迎します!本テンプレートは Flipper Zero 向けの Zig 開発を簡素化することを目的としています。SDK の互換性問題が発生したか、ビルドプロセスの改善に関するご提案があれば、issue または pull request をお願いします。

改善の余地がある点

  • Windows ツールチェーンパスへの対応
  • SDK バージョンの自動検出
  • Flipper アプリケーションカタログとの統合
  • 追加の SDK ラッパー抽象化

リソース

ライセンス

本プロジェクトは MIT ライセンスの下で配布されています。詳細は LICENSE ファイルを参照してください。

謝辞

  • UFBT ツールチェーンを提供してくれた Flipper Devices チームへ
  • ARM クロスコンパイルサポートを提供してくれた Zig コミュニティへ
  • Flipper Zero SDK にコントリビューションされた方々へ

※本テンプレートは非公式であり、Flipper Devices Inc. とは関係ありません。必ず実装デバイスへのデプロイ前に、アプリケーションを慎重にテストしてください。

同じ日のほかのニュース

一覧に戻る →

2026/06/02 1:31

最新のインスタグラムの「 exploits(バグ)」で最もユニークなのは私がこれまでに見た中で一番奇妙なものです。

## 日本語翻訳: 洗練されたセキュリティ上の不備により、ハッカーらは警報を触発することなく Instagram のアカウントを乗っ取り、@obamawhitehouse や @ocmssf のような高価値なユーザー名を対象に Meta の「Takeover Flow」を利用した。攻撃者は被害者のユーザー名を使用してプロセスを開始し、VPN または代理サーバーを介して請求をアカウントの報告された都市の近くから経路化することで、位置情報に基づくセキュリティを回避した。彼らは Meta の AI サポートチャットボットに連絡し、アカウントが侵害されたことをごりごしくれ、検証コードを受信するメールアドレスを任意で指定することを要求した。Instagram のシステムは、この要求されたメールアドレスが以前にそのアカウントと関連付けられていたかどうかを検証しなかった。AI がコードを送信すると、それはパスワードリセットリンクのトリガーとしての検証に使われ、完全な所有権が付与された。Meta のサポート AI はビデオでの自己撮影(生真面目)を身分証明として要求する可能性があるが、ターゲットのフィードから単純に AI でアニメーション化された公開写真は、このチェックを成功裡に回避した。回復フローは、そのリクエストを「本当の」所有者による完全なアカウントリセットとして扱い、2FA を完全に回避し、メール、テキスト、またはプッシュ通知を触発することなく進んだ。正当なユーザーのセッションは沈黙的に破棄され、連絡先情報が攻撃者の情報で置換されたため、標準的なチャネルでの回復は不可能になった。ブラックマーケットの Telegram グループが「アカウント乗っ取り」サービスを提供し始め、高価値なハンドルを利活用した。この脆弱性は数週間、あるいは数ヶ月間 Meta が修復するまで稼働していたと報告されており、その地下市場は一瞬で消え失せた。実験的な AI サポートグループに参加しているユーザーは、自動化されたアシスタンスを手動で無効化できないため、引き続き曝されている。この事象は、将来的な回復プロセスが人工知能や位置情報に基づく回避技術によって容易に操作されるのを防ぐためには、自動的なりすましおよびリモートスプーフィング攻撃に対するより強力な検証プロトコルの強化を強く示唆している。

2026/06/02 5:40

デバッグプロジェクト

## 日本語訳: Debug は、地球上で最も致命的な動物の一つである*Aedes aegypti*蚊の個体群を安全に抑制し、デング熱、ジカ熱、黄熱病、チクングニア熱といった致死性の疾患に対する革命的な対策を開拓しています。化学物質や遺伝子改変に依存する従来のアプローチとは異なり、当社の技術は自然存在する細菌*Wolbachia*を運ぶ雄性不稔の雌蚊を放出します。この生物は、これらの雄蚊が野生の雌蚊と繁殖することを妨げ、毒物を導入することなく個体群を自然に減少させます。吸血せず病気を媒介しない雄蚊であるため、「良い虫」としてこれを放出することは、立ち枯れた水の撤去や効果低下しつつ毒性が強まり過ぎる殺虫剤の使用といった陳腐な手法の持続可能な代替手段を提供します。現在、ほとんどの蚊媒感染症には効果的なワクチンがないことを考慮すると、この解決策は不可欠な新たなアプローチとなります。科学専門知識を国際パートナーと組み合わせ、Debug は地域コミュニティおよび政府との協力のもとで放出規模の拡大を目指しています。その最終的な影響は大きいです:刺す蚊の数を減らして病気の伝播率を下げ、安全でスケーラブルな生物学的制御戦略を通じて数百万人の人々がより長く健康な生活を送るのを支援します。 ## 元テキスト: ## Summary: Debug is pioneering a revolutionary method to combat deadly diseases like dengue, Zika, yellow fever, and chikungunya by safely suppressing populations of *Aedes aegypti* mosquitoes, which are among the deadliest animals on Earth. Unlike traditional approaches relying on chemicals or genetic modification, their technology releases sterile male mosquitoes carrying the natural bacterium *Wolbachia*. This organism prevents these males from reproducing with wild female counterparts, naturally causing population decline without introducing toxins. Since male mosquitoes do not bite or spread disease, releasing these "good bugs" offers a sustainable alternative to outdated methods like clearing standing water and using pesticides that are losing efficacy or becoming too toxic. Given that most mosquito-borne illnesses currently lack effective vaccines, this solution provides a vital new approach. By leveraging scientific expertise alongside international partners, Debug aims to scale up releases in collaboration with local communities and governments. The ultimate impact is significant: reducing biting mosquitoes to lower disease transmission rates, thereby helping millions of people live longer, healthier lives through a safe and scalable biological control strategy.

2026/06/02 1:41

スタンフォード大学CS336コース用 AI エージェントガイドライン

## 日本語翻訳: 本ドキュメントは、スタンフォード大学の CS336 コースにおいて AI コーディングアシスタントが従う厳格な倫理的境界線を設定する:すなわち、これらは何らかのコードを書いたり課題を直接解決したりしてはならない。むしろ、これらのエージェントは、学生による学習体験を維持することを目的とした教学補助手段としてのみ機能すべきである。本コースが手動作業としての Python と PyTorch の実装に大きく依存し、かつ支援枠組みが限られていることを考慮すると、AI の主たる役割は、公式の講義資料とデバッグツールの活用を通じて背後にある理論を説明し、エッジケースにおけるロジックを検証し、学生を導くことにある。 ユーザーから直接の修正、TODO 節の完了、またはリポジトリへの編集といった要請を受けた場合、エージェントはその要求を拒否し、概念の説明や、shape アサーションやアブレーションなどの健全性チェックを提案することで方向転換しなければならない。この方針は、学生がトラン스포ーマー、最適化アルゴリズム、トレーニングループなど複雑なコンポーネントの習得という核心的学習目標を回避することを防止するものである。システムはこの方針を強制するためには、明確な質問を投げかけ、公式ドキュメントを参照し、単に「如何做るか」を届けるのではなく、技術的決定の背後にある「なぜか」を説明することで、デバッグと概念的理解を通じて真の能力を確保するよう求める。

Flipper Zero Zig テンプレート | そっか~ニュース