
preflight v0.22.0
GoベースのCLIツールで、コードベースをスキャンしてリリース準備状況を確認し、本番デプロイ前に設定漏れ、セキュリティ衛生問題、機密情報漏洩、統合のギャップを検出します。
Preflight.sh
Preflight.sh は、コードベースを本番環境へのデプロイ前にスキャンして、起動準備が整っているかを確認するコマンドラインツールです。設定の欠落、統合の問題、セキュリティ上の懸念、SEOメタデータの欠落、その他のよくあるミスを検出します。
本番環境で恥をかかないように。コマンドを実行するだけです。
インストール
Homebrew (macOS/Linux)
brew install preflightsh/preflight/preflight
npm
npm install -g @preflightsh/preflight
Go
go install github.com/preflightsh/preflight@latest
Docker
docker pull ghcr.io/preflightsh/preflight
シェルスクリプト
curl -sSL https://preflight.sh/install.sh | sh
手動ダウンロード
GitHub Releases から最新リリースをダウンロードしてください。
クイックスタート
# プロジェクトディレクトリで初期化
cd your-project
preflight init
# すべてのチェックを実行
preflight scan
# 特定のディレクトリをスキャン
preflight scan /path/to/project
# 詳細出力で実行(各チェックに一致したファイルを表示)
preflight scan --verbose
preflight scan -v # 短縮形
# CIモードでJSON出力を使用して実行
preflight scan --ci --format json
# 特定のチェックのみを実行、または一部をスキップして素早く反復
# (一時的な指定。`preflight ignore` とは異なり preflight.yml は変更されません)
preflight scan --only seo_meta,og_twitter
preflight scan --skip vulnerability,secrets
# チェックを無効化
preflight ignore sitemap
# チェックを再有効化
preflight unignore sitemap
# すべてのチェックIDを一覧表示
preflight checks
エージェントスキル
このリポジトリには、skills/preflight/SKILL.md に skills.sh 互換のエージェントスキルが含まれています。コーディングエージェントに再現可能な Preflight ワークフローを提供します: preflight.yml の検査、CI セーフなスキャンの実行、結果のトリアージ、安全でない ignore の回避、再検証の実行、残存する起動リスクの報告。
このリポジトリからスキルを一覧表示:
# Bun を使用
bunx --yes skills add preflightsh/preflight --list
# または npm を使用
npx --yes skills add preflightsh/preflight --list
Preflight スキルのみをインストール:
# Bun を使用
bunx --yes skills add preflightsh/preflight --skill preflight
# または npm を使用
npx --yes skills add preflightsh/preflight --skill preflight
ダッシュボードとAI提案
Preflight はアカウントなしでコマンドラインから完全に使用できます。app.preflight.sh のオプションのダッシュボードでは、スキャンのホスト型履歴と、各検出結果に対する AI 生成の修正提案が追加されます。コードがマシンの外に出ることはありません: スキャンはローカルで実行され、公開時に送信されるのは結果の編集済みサマリー(チェックID、ステータス、メッセージのみ。シークレット値やファイル内容は決して送信されません)のみです。
無料アカウントを作成し、CLI を接続します:
preflight auth login # ブラウザを開いてこのCLIを認証
preflight auth status # ログイン中のユーザーを表示
preflight auth logout # 保存された認証情報を削除
--publish を使用してスキャンをダッシュボードに公開します。実行結果を表示するリンクが出力されます。公開はベストエフォート方式です: オフラインまたは未ログインの場合でも、スキャンは実行され、正常に終了します。
preflight scan --publish
ダッシュボードでは、各実行の pass/warn/fail の内訳、検出結果の完全なリスト、プロジェクトごとの履歴を確認でき、デプロイ間の変更点を把握できます。
また、preflight history を使用してターミナルからその履歴を読むこともできます:
preflight history # 全プロジェクトの最近の実行
preflight history --here # 現在のプロジェクトの実行のみ
preflight history <run-id> # 1回の実行の完全なチェック結果
preflight history --here --format json # 機械可読形式(エージェント用)
preflight auth login が必要です。--here は git リモートを使用して実行を現在のリポジトリに一致させます。これは公開時と同じキーです。
公開された実行で失敗または警告のチェックを開くと、検出されたスタックに合わせたステップバイステップの修正が生成され、コピーしてすぐ使えるコマンドとコードが提供されます。
- 無料 には月5回の公開実行が含まれます。
- 独自キーの使用: ダッシュボード設定で OpenAI または Anthropic API キーを追加すると、公開は無料で無制限になります(プロバイダーに直接支払います)。
- マネージド ($5/月): AI コストを当社が負担し、実行は無制限。API キーは不要です。
チェック内容
| チェック | 説明 |
|---|---|
| ENV Parity | .env と .env.example を比較して欠落している変数を検出 |
| Health Endpoint | サイトに到達可能か検証。/health、/healthz、/api/health を自動検出し、見つからない場合はルートにフォールバック |
| Vulnerability Scan | 依存関係の脆弱性をチェック(bundle audit、npm audit など) |
| SEO Metadata | title、description、Open Graph タグをチェック |
| OG & Twitter Cards | og:image、twitter:card、ソーシャル共有メタデータを検証 |
| Canonical URL | canonical リンクタグの存在を検証 |
| Viewport | モバイル用の適切な viewport メタタグをチェック |
| Lang Attribute | アクセシビリティ用の html lang 属性を検証 |
| Structured Data | JSON-LD Schema.org マークアップをチェック |
| Security Headers | 本番環境とステージング環境の両方で HSTS、CSP、X-Content-Type-Options を検証 |
| SSL Certificate | SSL の有効性をチェックし、期限切れ前に警告 |
| WWW Redirect | www/non-www が canonical URL にリダイレクトされるか検証 |
| Email Auth | メール配信性のための SPF/DMARC DNS レコードをチェック(オプトイン) |
| Secret Scanning | コード内の漏洩した API キーと認証情報を検出 |
| Debug Statements | コードに残された console.log、var_dump、debugger を検出 |
| Error Pages | カスタム 404/500 エラーページをチェック |
| Image Optimization | 読み込み時間に悪影響を与える大きな画像(>500KB)を検出 |
| Legal Pages | プライバシーポリシーと利用規約のページをチェック |
| Cookie Consent | Cookie 同意ソリューションを検出(GDPR/CCPA 準拠) |
| Favicon & Icons | favicon、apple-touch-icon(.png、.webp、.svg)、web manifest をチェック |
| robots.txt | robots.txt が存在し、コンテンツがあるか検証 |
| sitemap.xml | sitemap の存在またはジェネレーターをチェック |
| llms.txt | LLM クローラーガイダンスファイルをチェック |
| ads.txt | 広告サポートサイト用の ads.txt を検証(オプトイン) |
| humans.txt | チームへのクレジット用の humans.txt をチェック(オプトイン) |
| IndexNow | 検索インデックス高速化用の IndexNow キーファイルを検証(オプトイン) |
| LICENSE | ライセンスファイルをチェック(オプトイン、オープンソースプロジェクト用) |
サポート対象サービス (72)
Preflight は以下のサービスの設定を自動検出して検証します:
決済
- Stripe、PayPal、Braintree、Paddle、LemonSqueezy
エラー追跡と監視
- Sentry、Bugsnag、Rollbar、Honeybadger、Datadog、New Relic、LogRocket
メールとニュースレター
- Postmark、SendGrid、Mailgun、AWS SES、Resend、Mailchimp、Kit、Beehiiv、AWeber、ActiveCampaign、Campaign Monitor、Drip、Klaviyo、Buttondown
アナリティクス
- Plausible、Fathom、Umami、Fullres Analytics、Datafa.st Analytics、Google Analytics、PostHog、Mixpanel、Amplitude、Segment、Hotjar
認証
- Auth0、Clerk、WorkOS
チャット
- Intercom、Crisp
通知
- Slack、Discord、Twilio
インフラストラクチャ
- Firebase、Supabase、Redis、Sidekiq、RabbitMQ、Elasticsearch、Convex
ストレージとCDN
- AWS S3、Cloudinary、Cloudflare
検索
- Algolia
SEO
- IndexNow
AI / LLM
- OpenAI、Anthropic Claude、Google AI (Gemini)、Mistral、Cohere、Replicate、Hugging Face、Grok (X/Twitter)、Perplexity、Together AI
設定
Preflight はプロジェクトルートの preflight.yml ファイルを使用します:
projectName: my-app
stack: rails # rails, next, react, vite, laravel, etc.
urls:
staging: "https://staging.example.com"
production: "https://example.com"
services:
stripe:
declared: true
sentry:
declared: true
checks:
envParity:
enabled: true
envFile: ".env"
exampleFile: ".env.example"
healthEndpoint:
enabled: true
path: "/health" # オプション - 未設定の場合は一般的なパスを自動検出
stripeWebhook:
enabled: true
url: "https://api.example.com/webhooks/stripe" # オプション - GETでプローブ。404または応答なしが報告されます
seoMeta:
enabled: true
mainLayout: "app/views/layouts/application.html.erb"
security:
enabled: true
secrets:
enabled: true
# シークレットスキャン用のファイル単位の許可リスト。チェック全体を
# 無効にせずに個別の検出結果(例: リファラー制限付き公開キー)を
# 抑制するために使用します。
allowlist:
- path: web/js/golden-hour.js
fingerprint: "sha256:<hex>" # 推奨 - 正確なシークレットに固定
reason: "HTTPリファラー制限付きGoogle Timezoneキー"
- path: "web/tools/**/*.php" # doublestar グロブがサポートされています
indexNow:
enabled: true
key: "your32characterhexkeyhere00000"
emailAuth:
enabled: true # オプトイン、本番ドメインのSPF/DMARCをチェック
humansTxt:
enabled: false # オプトイン、チームへのクレジット
license:
enabled: false # オプトイン、オープンソースプロジェクト用
# IDで特定のチェックまたはサービスを無効化
ignore:
- sitemap
- llms_txt
- google_analytics
チェックとサービスの無効化
preflight ignore <id> を使用して特定のチェックまたはサービスを無効化します:
preflight ignore sitemap # sitemapチェックを無効化
preflight ignore sentry # Sentryサービスの検証を無効化
preflight unignore sitemap # sitemapチェックを再有効化
preflight checks # 無効化可能なすべてのIDを一覧表示
単一のシークレット検出結果の許可リスト登録
secrets チェック全体を無効化するよりも、個別の検出結果を許可リストに登録することをお勧めします。コマンドラインから一時的な例外を追加します:
preflight ignore secrets web/js/golden-hour.js
これにより、preflight.yml の checks.secrets.allowlist にパスエントリが追加されます。path フィールドは doublestar グロブ(** はディレクトリをまたいで一致)で、プロジェクト相対ファイルパスに対して解決されます。
フィンガープリントを固定してください。 パスのみの許可リストは、そのファイルに将来追加されるあらゆるシークレットを黙って受け入れます。エントリを編集して fingerprint: "sha256:<hex>" を追加してください — これは検出されたシークレット値の SHA-256 です。これで、キーがローテーションされたり、同じファイルに別のシークレットが出現した場合、preflight は再び警告します。
検出結果はパス + フィンガープリントで照合され、ファイル全体ではありません。ファイル内の許可リスト登録されたフィンガープリントは、同じファイルの他の行にある他のシークレットを抑制しません。
無効化可能なチェックID
SEOとソーシャル:
seo_meta、canonical、structured_data、index_now(オプトイン)、og_twitter、viewport、lang
セキュリティとインフラストラクチャ:
security_headers、ssl、www_redirect、email_auth(オプトイン)、secrets
環境とヘルス:
env_parity、health_endpoint
コード品質とパフォーマンス:
vulnerability、debug_statements、error_pages、image_optimization
法務とコンプライアンス:
legal_pages
Web標準ファイル:
favicon、robots_txt、sitemap、llms_txt、ads_txt(オプトイン)、humans_txt(オプトイン)、license(オプトイン)
0.22でリネームされたチェックID
すべてのチェックIDは現在 snake_case です。以前の camelCase 名は、ID が受け入れられるすべての場所(ignore: リスト、--only、--skip、preflight ignore)で 1.x 系を通じて引き続き機能し、stderr にメモが表示され、2.0 で削除されます。preflight ignore は新しい名前を書き込みます。preflight.yml の checks: の下のキー(healthEndpoint、seoMeta、...)は別のスキーマであり、変更されていません。
| 旧 | 新 |
|---|---|
seoMeta | seo_meta |
ogTwitter | og_twitter |
securityHeaders | security_headers |
envParity | env_parity |
healthEndpoint | health_endpoint |
robotsTxt | robots_txt |
llmsTxt | llms_txt |
adsTxt | ads_txt |
humansTxt | humans_txt |
indexNow | index_now |
信頼できないコードのスキャンに関する注意
すべてのチェックはファイルを読み取ります。1つはプログラムを実行します。vulnerability チェックは、プロジェクトディレクトリ内でプロジェクト自身のパッケージマネージャー(npm audit、yarn audit、composer audit、bundle audit、pip-audit、govulncheck、cargo audit)を、環境をスクラブし、一時的なホームディレクトリを使用して実行するため、トークンを読み取ることはできません。パッケージマネージャーはプロジェクトローカルの設定を尊重し続けますが、その設定の一部はリポジトリからコードを実行できます(Yarn の yarnPath、Cargo エイリアス、Composer プラグイン)。自分のプロジェクトをスキャンすることが Preflight の目的です。フォークのプルリクエストなど、信頼できないリポジトリを CI でスキャンする場合は、--skip vulnerability を追加してください。
無効化可能なサービスID
すべてのサービスには、適切な統合(環境変数、SDKパターン、設定ファイル)を検証するチェックがあります:
決済: stripe、paypal、braintree、paddle、lemonsqueezy
エラー追跡: sentry、bugsnag、rollbar、honeybadger、datadog、newrelic、logrocket
トランザクションメール: postmark、sendgrid、mailgun、aws_ses、resend
メールマーケティング: mailchimp、convertkit、beehiiv、aweber、activecampaign、campaignmonitor、drip、klaviyo、buttondown
アナリティクス: plausible、fathom、google_analytics、fullres、datafast、posthog、mixpanel、amplitude、segment、hotjar
認証: auth0、clerk、workos、firebase、supabase
コミュニケーション: twilio、slack、discord、intercom、crisp
インフラストラクチャ: redis、sidekiq、rabbitmq、elasticsearch、convex
ストレージとCDN: aws_s3、cloudinary、cloudflare
検索: algolia
AI: openai、anthropic、google_ai、mistral、cohere、replicate、huggingface、grok、perplexity、together_ai
SEO: index_now
Cookie同意: cookieconsent、cookiebot、onetrust、termly、cookieyes、iubenda
終了コード
| コード | 意味 |
|---|---|
| 0 | すべてのチェックが合格 |
| 1 | 警告のみ |
| 2 | エラーが検出された |
| 64 | Preflight を実行できなかった(パスが不正、設定が読み取れない、不明なチェックID) |
| 130 | スキャンがキャンセルされた(Ctrl-C / SIGTERM) |
コード 1 と 2 は、スキャンが実行され、何かが報告されたことを意味します。コード 64 は、そこに到達しなかったことを意味するため、CI は「このプロジェクトに問題がある」と「この呼び出しが間違っていた」を区別できます。
シェル補完
コマンド、フラグ、チェックID(--only と --skip の値も含む)のタブ補完:
# bash (~/.bashrc に追加)
source <(preflight completion bash)
# zsh (~/.zshrc に追加)
source <(preflight completion zsh)
# fish
preflight completion fish | source
出力は NO_COLOR 環境変数も尊重します。
サポート対象スタック
バックエンドフレームワーク
- Ruby on Rails、Laravel、PHP、Go、Python/Django、Rust、Node.js
フロントエンドフレームワーク
- Next.js、Nuxt、Remix、React、Vue.js、Vite、Svelte、Angular
従来型CMS
- WordPress、Craft CMS、Drupal、Ghost
静的サイトジェネレーター
- Hugo、Jekyll、Gatsby、Eleventy (11ty)、Astro
ヘッドレスCMS
- Strapi、Sanity、Contentful、Prismic
その他
- 静的サイト
CI統合
# GitHub Actions の例 (curl)
- name: Run Preflight
run: |
curl -sSL https://preflight.sh/install.sh | sh
preflight scan --ci --format json
# GitHub Actions の例 (Docker)
- name: Run Preflight
run: docker run -v ${{ github.workspace }}:/app ghcr.io/preflightsh/preflight scan --ci --format json
ライセンス
MIT