今日は、Pulumi を使って開発しているときに誰もが一度は発狂しそうになる「あの瞬間」をなくすための、ちょっとした(でも効果絶大な)TIPSをシェアしたいと思います。

こんな経験ありませんか?

気合を入れて書いたインフラコード。

「よし、これで完璧だ!」と意気揚々とコマンドを叩きます。

$ pulumi up

Pulumi がクラウドの認証情報を読み込み、現在のスタックの状態を確認し、依存関係を計算し……(ここで数分経過)。

コーヒーを一口飲んで画面に戻ると、そこには無情な赤い文字が。

SyntaxError: unexpected EOF while parsing

……えっ、そこ?

括弧を一個閉じ忘れただけ? そのために今の3分間待ってたの?

この「実行してみないとミスがわからない」という状況は、精神衛生上よろしくありません。特に Pulumi のような IaC (Infrastructure as Code) ツールは、実行=クラウドへのアクセスが発生するため、どうしても初動が重くなりがちです。

そこでオススメしたいのが、Python 標準の py_compile を使った事前チェックです。

救世主「py_compile」とは

py_compile は、その名の通り Python ファイルをバイトコード(.pyc)にコンパイルするモジュールです。

通常は Python が実行時に勝手にやってくれることですが、これを手動でやることで、「コードを実行せずに(=クラウドに繋ぎに行かずに)」 文法ミスだけを炙り出すことができます。

いわば、「提出ボタンを押す前の赤ペン先生」 です。

使い方は超シンプル

特別なツールのインストールは不要です。Python が入っていればすぐに使えます。

1. 単一ファイルをチェックしたい時

一番手軽な方法です。

python -m py_compile __main__.py

何も表示されなければ、文法は完璧です(おめでとうございます!)。

もしミスがあれば、即座に(本当に0.1秒で)エラー箇所を指摘してくれます。

2. プロジェクト全体をまとめてチェックしたい時

Pulumi プロジェクトが複数のファイルに分かれている場合は、compileall という親戚を使うのが便利です。

# ドット(.) はカレントディレクトリの意味
# -q をつけるとエラーの時だけ喋ってくれるので静かで良いです
python -m compileall . -q

これを pulumi up の前に一発叩くだけ。これだけの習慣で、あの無駄な待ち時間がゼロになります。

ここが素晴らしい!3つのメリット

  1. とにかく速いクラウドへのAPIリクエストが発生しないので、一瞬で終わります。「待ち時間」という概念がありません。
  2. 安全(これ重要)コードを「実行」するわけではないので、間違って変なリソースを作ってしまったり、設定を上書きしてしまうリスクが皆無です。
  3. 環境を汚さないLinter ツールなどを別途入れなくても、Python 標準機能だけで完結するのが地味に嬉しいポイントです。

↑ 上記は通常のフローとpy_compileを利用した場合でのイメージ図です。

ただし「万能」ではありません

py_compile はあくまで「文法チェック」です。

「インデントがおかしい」「括弧が足りない」といったミスは見つけてくれますが、以下のようなミスはスルーしてしまいます。

  • import pulumii (ライブラリ名のタイポ)
  • bucket = s3.Bucket(bucket_name) (未定義の変数の使用)

これらは文法的には間違っていないからです。

なので、「まずは py_compile で門前払いを防ぎ、その後にプレビューで内容を確認する」 という二段構えにするのが最強の布陣です。

まとめ:開発リズムを整えよう

Pulumi は強力なツールですが、フィードバックループ(書いて→確認して→直す)が長くなりがちです。

「括弧の閉じ忘れ」みたいな凡ミスで思考を中断されるのはもったいない。

ぜひ py_compile を手元で叩く癖をつけるか、Makefile や CI に仕込んで、サクサク快適な IaC ライフを送ってください!

(おまけ)Makefile の例

毎回コマンドを打つのが面倒な人は、こんな Makefile を置いておくと幸せになれます。

check:
	@echo "🔍 文法チェック中..."
	@python -m compileall . -q
	@echo "✅ OK! 文法は完璧です"

deploy: check
	pulumi up

これで make deploy と打つだけで、勝手にチェックしてからデプロイしてくれるようになりますよ。


この記事が気に入ったら『目黒で働く分析担当の作業メモ』ご支援をお願いします!

※OFUSEに飛びます


おすすめの記事