{"id":13409556,"url":"https://github.com/air-verse/air","last_synced_at":"2026-01-16T02:42:45.130Z","repository":{"id":37381820,"uuid":"106704041","full_name":"air-verse/air","owner":"air-verse","description":"☁️ Live reload for Go apps","archived":false,"fork":false,"pushed_at":"2025-03-07T07:19:05.000Z","size":33610,"stargazers_count":20270,"open_issues_count":175,"forks_count":854,"subscribers_count":72,"default_branch":"master","last_synced_at":"2025-05-06T16:11:05.368Z","etag":null,"topics":["docker","file-watcher","gin","go","live-reload","task-runner","tools","watcher"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/air-verse.png","metadata":{"files":{"readme":"README-ja.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":null,"patreon":"cosmtrek","open_collective":null,"ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":null}},"created_at":"2017-10-12T14:31:40.000Z","updated_at":"2025-05-06T10:59:45.000Z","dependencies_parsed_at":"2023-02-14T23:46:01.395Z","dependency_job_id":"2c8d1b51-f6d7-44c9-8c68-0b144ba66edc","html_url":"https://github.com/air-verse/air","commit_stats":{"total_commits":333,"total_committers":88,"mean_commits":3.784090909090909,"dds":0.7057057057057057,"last_synced_commit":"6403f4d1e069e4a6eeb49639c8cafb168c28a523"},"previous_names":["air-verse/air","cosmtrek/air"],"tags_count":53,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/air-verse%2Fair","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/air-verse%2Fair/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/air-verse%2Fair/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/air-verse%2Fair/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/air-verse","download_url":"https://codeload.github.com/air-verse/air/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253990449,"owners_count":21995773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","file-watcher","gin","go","live-reload","task-runner","tools","watcher"],"created_at":"2024-07-30T20:01:01.911Z","updated_at":"2026-01-04T17:16:43.071Z","avatar_url":"https://github.com/air-verse.png","language":"Go","funding_links":["https://patreon.com/cosmtrek","https://www.buymeacoffee.com/cosmtrek"],"categories":["Go","Build Automation","\u003ca name=\"programming\"\u003e\u003c/a\u003eProgramming"],"sub_categories":[],"readme":"# :cloud: Air - Go アプリケーションのためのライブリロード\n\n[![Go](https://github.com/air-verse/air/actions/workflows/release.yml/badge.svg)](https://github.com/air-verse/air/actions?query=workflow%3AGo+branch%3Amaster) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/dcb95264cc504cad9c2a3d8b0795a7f8)](https://www.codacy.com/gh/air-verse/air/dashboard?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=air-verse/air\u0026amp;utm_campaign=Badge_Grade) [![Go Report Card](https://goreportcard.com/badge/github.com/air-verse/air)](https://goreportcard.com/report/github.com/air-verse/air) [![codecov](https://codecov.io/gh/air-verse/air/branch/master/graph/badge.svg)](https://codecov.io/gh/air-verse/air)\n\n![air](docs/air.png)\n\nEnglish | [简体中文](README-zh_cn.md) | [繁體中文](README-zh_tw.md) | [日本語](README-ja.md)\n\n## 動機\n\nGo でウェブサイトを開発し始め、 [gin](https://github.com/gin-gonic/gin) を使っていた時、gin にはライブリロード機能がないのが残念でした。\n\nそこで探し回って [fresh](https://github.com/pilu/fresh) を試してみましたが、あまり柔軟ではないようでした。なので、もっと良いものを書くことにしました。そうして、 Air が誕生しました。\n\n加えて、 [pilu](https:///github.com/pilu) に感謝します。fresh がなければ、 Air もありませんでした。:)\n\nAir は Go アプリケーション開発用のライブリロードコマンドラインユーティリティです。プロジェクトのルートディレクトリで `air` を実行し、放置し、コードに集中してください。\n\n注：このツールは本番環境へのホットデプロイとは無関係です。\n\n## 特徴\n\n- カラフルなログ出力\n- ビルドやその他のコマンドをカスタマイズ\n- サブディレクトリを除外することをサポート\n- Air 起動後は新しいディレクトリを監視します\n- より良いビルドプロセス\n\n### 引数から指定された設定を上書き\n\nair は引数による設定をサポートします:\n\n利用可能なコマンドライン引数を以下のコマンドで確認できます：\n\n```\nair -h\n```\nまたは\n```\nair --help\n```\n\nもしビルドコマンドと起動コマンドを設定したい場合は、設定ファイルを使わずに以下のようにコマンドを使うことができます:\n\n```shell\nair --build.cmd \"go build -o bin/api cmd/run.go\" --build.entrypoint \"./bin/api\"\n```\n\n入力値としてリストを取る引数には、アイテムを区切るためにコンマを使用します:\n\n```shell\nair --build.cmd \"go build -o bin/api cmd/run.go\" --build.entrypoint \"./bin/api\" --build.exclude_dir \"templates,build\"\n```\n\n従来の `build.bin` フィールドは非推奨で、今後のリリースで削除される予定です。代わりに `build.entrypoint` を使ってください。\n\n## インストール\n\n### `go install` を使う場合（推奨）\n\ngo 1.25以上を使う場合:\n\n```shell\ngo install github.com/air-verse/air@latest\n```\n\n### `go get -tool` を使う場合\n\ngo 1.24以上を使う場合:\n\n```shell\ngo get -tool github.com/air-verse/air@latest\n\n# 使い方は以下の通りです:\ngo tool air -v\n```\n\n### `install.sh` を使う場合\n\n```shell\n# バイナリは $(go env GOPATH)/bin/air にインストールされます\ncurl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s -- -b $(go env GOPATH)/bin\n\n# または./bin/にインストールすることもできます\ncurl -sSfL https://raw.githubusercontent.com/air-verse/air/master/install.sh | sh -s\n\nair -v\n```\n\n### [goblin.run](https://goblin.run) を使う場合\n\n```shell\n# バイナリは /usr/local/bin/air にインストールされます\ncurl -sSfL https://goblin.run/github.com/air-verse/air | sh\n\n# 任意のパスに配置することもできます\ncurl -sSfL https://goblin.run/github.com/air-verse/air | PREFIX=/tmp sh\n```\n\n### ソフトウェアパッケージマネージャー [mise](https://github.com/jdx/mise) を使う場合\n\n```shell\nmise use -g air\n```\n\n### Docker/Podman\n\n[cosmtrek/air](https://hub.docker.com/r/cosmtrek/air) という Docker イメージをプルしてください。\n\n```shell\ndocker/podman run -it --rm \\\n    -w \"\u003cPROJECT\u003e\" \\\n    -e \"air_wd=\u003cPROJECT\u003e\" \\\n    -v $(pwd):\u003cPROJECT\u003e \\\n    -p \u003cPORT\u003e:\u003cAPP SERVER PORT\u003e \\\n    cosmtrek/air\n    -c \u003cCONF\u003e\n```\n\n#### Docker/Podman .${SHELL}rc\n\n通常のアプリケーションのように継続的に air を使いたい場合は、 ${SHELL}rc (Bash, Zsh, etc…)に関数を作成してください。\n\n```shell\nair() {\n  podman/docker run -it --rm \\\n    -w \"$PWD\" -v \"$PWD\":\"$PWD\" \\\n    -p \"$AIR_PORT\":\"$AIR_PORT\" \\\n    docker.io/cosmtrek/air \"$@\"\n}\n```\n\n`\u003cPROJECT\u003e`はコンテナ内のプロジェクトのパスです。 例：`/go/example`\nコンテナに接続したい場合は、 `--entrypoint=bash` を追加してください。\n\n\u003cdetails\u003e\n  \u003csummary\u003e例\u003c/summary\u003e\n\nDocker で動作するとあるプロジェクト：\n\n```shell\ndocker run -it --rm \\\n  -w \"/go/src/github.com/cosmtrek/hub\" \\\n  -v $(pwd):/go/src/github.com/cosmtrek/hub \\\n  -p 9090:9090 \\\n  cosmtrek/air\n```\n\n別の例:\n\n```shell\ncd /go/src/github.com/cosmtrek/hub\nAIR_PORT=8080 air -c \"config.toml\"\n```\n\nこれは `$PWD` を現在のディレクトリに置き換え、 `$AIR_PORT` は公開するポートを指定し、 `$@` は-cのようなアプリケーション自体の引数を受け取るためのものです。\n\n\u003c/details\u003e\n\n## 使い方\n\n`.bashrc` または `.zshrc` に `alias air='~/.air'` を追加すると、入力の手間が省けます。\n\nまずプロジェクトを移動します。\n\n```shell\ncd /path/to/your_project\n```\n\n最もシンプルな使い方は以下の通りです。\n\n```shell\n# カレントディレクトリに`.air.toml`が見つからない場合は、デフォルト値を使用します\nair -c .air.toml\n```\n\n次のコマンドを実行することで、カレントディレクトリに `.air.toml` 設定ファイルを初期化できます。\n\n```shell\nair init\n```\n\nその次に、追加の引数なしで `air` コマンドを実行すると、 `.air.toml` ファイルが設定として使用されます。\n\n```shell\nair\n```\n\n[air_example.toml](air_example.toml)を参考にして設定を編集します。\n\n### 実行時引数\n\nair コマンドの後に引数を追加することで、ビルドしたバイナリを実行するための引数を渡すことができる。\n\n```shell\n# ./tmp/main benchを実行します\nair bench\n\n# ./tmp/main server --port 8080を実行します\nair server --port 8080\n```\n\nair コマンドに渡す引数とビルドするバイナリを `--` 引数で区切ることができる。\n\n```shell\n# ./tmp/main -hを実行します\nair -- -h\n\n# カスタム設定で air を実行し、ビルドされたバイナリに -h 引数を渡す\nair -c .air.toml -- -h\n```\n\n### Docker Compose\n\n```yaml\nservices:\n  my-project-with-air:\n    image: cosmtrek/air\n    # working_dir の値はマップされたボリュームの値と同じでなければなりません\n    working_dir: /project-package\n    ports:\n      - \u003cany\u003e:\u003cany\u003e\n    environment:\n      - ENV_A=${ENV_A}\n      - ENV_B=${ENV_B}\n      - ENV_C=${ENV_C}\n    volumes:\n      - ./project-relative-path/:/project-package/\n```\n\n### デバッグ\n\n`air -d`は全てのログを出力します。\n\n## air イメージを使いたくない Docker ユーザーのためのインストールと使い方\n\n`Dockerfile`\n\n```Dockerfile\n# 1.16以上の利用したいバージョンを選択してください\nFROM golang:1.25-alpine\n\nWORKDIR /app\n\nRUN go install github.com/air-verse/air@latest\n\nCOPY go.mod go.sum ./\nRUN go mod download\n\nCMD [\"air\", \"-c\", \".air.toml\"]\n```\n\n`docker-compose.yaml`\n\n```yaml\nversion: \"3.8\"\nservices:\n  web:\n    build:\n      context: .\n      # Dockerfile へのパスを正してください\n      dockerfile: Dockerfile\n    ports:\n      - 8080:3000\n    # ライブリロードのために、コードベースディレクトリを /app ディレクトリにバインド/マウントすることが重要です\n    volumes:\n      - ./:/app\n```\n\n## Q\u0026A\n\n### \"command not found: air\" または \"No such file or directory\"\n\n```shell\nexport GOPATH=$HOME/xxxxx\nexport PATH=$PATH:$GOROOT/bin:$GOPATH/bin\nexport PATH=$PATH:$(go env GOPATH)/bin #この設定を .profile で確認し、追加した場合は .profile を source するのを忘れないでください!!!\n```\n\n### bin に ' が含まれる場合の wsl でのエラー\n\nbin の\\`'をエスケープするには`\\`を使用したほうが良いです。関連する issue: [#305](https://github.com/air-verse/air/issues/305)\n\n### 質問: ホットコンパイルのみを行い、何も実行しない方法は？\n\n[#365](https://github.com/air-verse/air/issues/365)\n\n```toml\n[build]\n  cmd = \"/usr/bin/true\"\n```\n\n### 静的ファイルの変更時にブラウザを自動的にリロードする方法\n\n詳細のために [#512](https://github.com/air-verse/air/issues/512) の issue を参照してください。\n\n- 静的ファイルを `include_dir` 、`include_ext` 、`include_file` に配置していることを確かめてください。\n- HTML に `\u003c/body\u003e` タグがあることを確かめてください。\n- プロキシを有効にするには、以下の設定を行います：\n\n```toml\n[proxy]\n  enabled = true\n  proxy_port = \u003cair proxy port\u003e\n  app_port = \u003cyour server port\u003e\n```\n\n## 開発\n\n依存関係を管理するために `go mod` を使っているので、 Go 1.16+ が必要であることに注意してください。\n\n```shell\n# プロジェクトをフォークしてください\n\n# クローンしてください\nmkdir -p $GOPATH/src/github.com/cosmtrek\ncd $GOPATH/src/github.com/cosmtrek\ngit clone git@github.com:\u003cYOUR USERNAME\u003e/air.git\n\n# 依存関係をインストールしてください\ncd air\nmake ci\n\n# コードを探検してコーディングを楽しんでください！\nmake install\n```\n\nPull Request を受け付けています。\n\n### リリース\n\n```shell\n# master にチェックアウトします\ngit checkout master\n\n# リリースに必要なバージョンタグを付与します\ngit tag v1.xx.x\n\n# リモートにプッシュします\ngit push origin v1.xx.x\n\n# CI が実行され、新しいバージョンがリリースされます。約5分待つと最新バージョンを取得できます\n```\n\n## スターヒストリー\n\n[![Star History Chart](https://api.star-history.com/svg?repos=air-verse/air\u0026type=Date)](https://star-history.com/#air-verse/air\u0026Date)\n\n## スポンサー\n\n[![Buy Me A Coffee](https://cdn.buymeacoffee.com/buttons/default-orange.png)](https://www.buymeacoffee.com/cosmtrek)\n\n多くのサポーターの方々に心から感謝します。私はいつも皆さんの優しさを忘れません。\n\n## ライセンス\n\n[GNU General Public License v3.0](LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fair-verse%2Fair","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fair-verse%2Fair","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fair-verse%2Fair/lists"}