0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PAF v1 開発進捗報告(C版完成・Python整理)

Posted at

🚀 PAF v1 開発進捗報告(C版完成・Python整理)

PAFのおさらい

zipファイル、便利なんですが──
社内SEとしてサポートをしていると、こんな会話を何度も繰り返します。

  • 「あ、それ圧縮された状態で開いてるので、一度解凍してください」
  • 「あ、それzipフォルダから直接操作しちゃうとエラーになります」
  • 「フリーズしてる?たぶん展開してからドラッグしないと動きません」

このやり取りを繰り返すたび、ふと思いました。

「そもそも、なんでそんなに圧縮してるの?」

  • 回線速度:十分に速い
  • ストレージ容量:困っていない
  • CPU性能:むしろ解凍処理が無駄

そこで生まれたのが、**圧縮しないアーカイブ形式「PAF(Parallel Archive Format)」**です。


PAFとは?

PAFは、圧縮を一切しないことを前提としたアーカイブ形式です。

特徴

  • 圧縮しない → 解凍不要、展開高速
  • CRC32による整合性チェック
  • フォルダ再帰構造に対応
  • ウイルススキャンがそのまま通る
  • Cで軽量実装、PythonからもCLIで操作可能
  • .pafignore(除外リスト)やGUI、FUSEマウントなど将来対応予定

今回の進捗と変更点【v1】

✅ 完了したこと

  • Cによるアーカイブ処理(作成・展開・一覧・抽出)を完成
  • .pafignore による再帰的除外パターン処理を実装(fnmatch()ベース)
  • Windowsでも動作する統合テスト test_all.c を実装
  • パストラバーサル防止(is_safe_path())で安全性を強化

🔄 修正・整理したこと

項目 内容
libpaf_core.c の肥大化 → 処理を libpaf_list.c / libpaf_extract.c に分割
paf_create() paf_create_binary() に統一(安全設計)
Pythonバインディング 全削除。再構築予定のためGitHubから除外
README.md Cライブラリのみテスト済みである旨を明記
tools/python/ → 今回のコミットで完全に削除済み
GitHub Actions → 今後 .dll/.so/.dylib を自動ビルド予定(現在準備中)

技術スタックと現状

📦 Cライブラリ(libpaf)

構成:

libpaf/
├── libpaf_core.c
├── libpaf_list.c
├── libpaf_extract.c
├── libpaf_exists.c
├── libpaf_extra.c
├── libpaf.h
├── fnmatch.c / fnmatch.h

テスト:

make
./test/test_all

出力:

[ok] paf_create_binary success
[ok] paf_extract_binary success
[ok] paf_list_binary success
...

今後の計画

  • ✅ C版の安定運用を継続
  • 🛠 GitHub Actions で .dll/.so/.dylib 自動生成(全OS対応)
  • 🔁 Python CLI を再設計(ctypes再構築 or cffi検討中)
  • 📦 PyPI 対応 / GUI展開(Tkinter or PyQt)も予定
  • 🌐 ブラウザだけで展開できる WASMビューア も視野に

まとめ

前回の記事で予告していた機能のうち、
Cベースのアーカイブ作成・展開機能はすべて完了しました。
PythonやGUIまわりは一旦整理し、今後の展開に向けて地盤を固めた段階です。


GitHub(最新版)

🔗 https://github.com/mati0516/paf-archive


おまけ:PAFを使ったサンプル処理(C)

const char* inputs[] = {"folder1", "file2.txt"};
paf_create_binary("output.paf", inputs, 2, ".pafignore", 1);

展開:

paf_extract_binary("output.paf", "out_dir", 0);

開発の経緯と想い(note)

この記事は技術的なまとめですが、
なぜPAFを作ったのか?どういう課題意識があったのか?
といった背景を、もう少しストーリー形式で書いたnoteもあります:

👉 開発の経緯と想い(note)はこちら

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?