{"title":"静的ファイルのデプロイ","version":"1.10","locale":"ja","docname":"howto/static-files/deployment","url":"/ja/1.10/howto/static-files/deployment/","canonical":"https://djangodocs.dev/ja/1.10/howto/static-files/deployment/","summary":"製品で静的 (static) ファイルを配置する基本的な流れは、次のように単純なものです。まず、静的ファイルが変更された時に、collectstatic コマンドを実行します。","html":"<h1>静的ファイルのデプロイ<a class=\"heading-anchor\" href=\"#deploying-static-files\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p><a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a> の使い方の基本に関しては、<a class=\"reference internal\" href=\"/ja/1.10/howto/static-files/\"><span class=\"doc\">静的ファイル (画像、JavaScript、CSS など) の管理</span></a> を読んでください。</p>\n</aside>\n<section id=\"serving-static-files-in-production\">\n<span id=\"staticfiles-production\"></span><h2>製品における静的ファイルの配信<a class=\"heading-anchor\" href=\"#serving-static-files-in-production\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>製品で静的 (static) ファイルを配置する基本的な流れは、次のように単純なものです。まず、静的ファイルが変更された時に、<a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> コマンドを実行します。そして、静的ファイル用のサーバへ移動する、収集 (collect) された静的ファイルのディレクトリ (<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a>) を用意し、ファイルを配信 (serve) できるようにします。setting:STATICFILES_STORAGE の設定によっては、ファイルを手動で新しい場所へ移動する必要があるかもしれません。ただし、<code class=\"docutils literal notranslate\">Storage</code> クラスの <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django.contrib.staticfiles.storage.StaticFilesStorage.post_process\" title=\"django.contrib.staticfiles.storage.StaticFilesStorage.post_process\"><code class=\"xref py py-func docutils literal notranslate\">post_process</code></a> メソッドが面倒を見てくれる場合もあります。</p>\n<p>どんなデプロイのタスクでも、悪魔は細部に宿るものです。(訳注: Devil's in the detail。神は細部に宿る (God is in the detail) から派生したことわざ) それぞれの製品ごとにセットアップには僅かな違いがあるものなので、基本的な流れに沿うように多少の手直しが必要になるかもしれません。以下によくあるパターンを紹介しているので、参考にしてください。</p>\n<section id=\"serving-the-site-and-your-static-files-from-the-same-server\">\n<h3>サイトと静的ファイルを同じサーバから配信する<a class=\"heading-anchor\" href=\"#serving-the-site-and-your-static-files-from-the-same-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>静的ファイルをすでにサイトを配信しているのと同じサーバから配信したい場合、配信の手順は次のようになります。</p>\n<ul class=\"simple\">\n<li><p>デプロイするサーバにコードを push する。</p></li>\n<li><p>サーバ側で、 <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> を実行することで、すべての静的ファイルを  <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> で設定したディレクトリに集める。</p></li>\n<li><p><a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> に置かれたファイルを <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATIC_URL\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_URL</code></a> から配信するように、Web サーバの設定を行う。たとえば、Apache と mod_wsgi を使用している場合、<a class=\"reference internal\" href=\"/ja/1.10/howto/deployment/wsgi/modwsgi/#serving-files\"><span class=\"std std-ref\">Apache と mod_wsgi を使用したファイルの配信</span></a> が参考になると思います。</p></li>\n</ul>\n<p>きっとあなたは、このプロセスを自動化したくなりますよね。特に複数の Web サーバを管理しているならなおさらです。この自動化を達成するには様々な方法がありますが、Django 利用者には <a class=\"reference external\" href=\"http://fabfile.org/\">Fabric</a> が人気です。</p>\n<p>以下、続く数セクションで、fabfile (たとえば、Fabric スクリプト) の例をいくつかお見せします。fabfile によって、上で説明したファイルのデプロイを自動化できます。fabfile のシンタックスはひと目で分かるほど簡単なものですが、ここでは説明しないので、完全な文法について知りたければ、<a class=\"reference external\" href=\"http://docs.fabfile.org/\">Fabric's documentation</a> を参照してください。</p>\n<p>それでは、2台の Web サーバへ静的ファイルをデプロイする fabfile は、次のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">fabric.api</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n\n<span class=\"c1\"># Hosts to deploy onto</span>\nenv<span class=\"o\">.</span>hosts <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&#39;www1.example.com&#39;</span><span class=\"p\">,</span> <span class=\"s1\">&#39;www2.example.com&#39;</span><span class=\"p\">]</span>\n\n<span class=\"c1\"># Where your project code lives on the server</span>\nenv<span class=\"o\">.</span>project_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/home/www/myproject&#39;</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">deploy_static</span><span class=\"p\">():</span>\n    <span class=\"k\">with</span> cd<span class=\"p\">(</span>env<span class=\"o\">.</span>project_root<span class=\"p\">):</span>\n        run<span class=\"p\">(</span><span class=\"s1\">&#39;./manage.py collectstatic -v0 --noinput&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"serving-static-files-from-a-dedicated-server\">\n<h3>専用のサーバから静的ファイルを配信する<a class=\"heading-anchor\" href=\"#serving-static-files-from-a-dedicated-server\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>比較的大きな Django サイトでは、Django を実行しているのとは異なる専用のサーバを用意して、静的ファイルを配信するのがふつうです。こうした専用サーバでは、高速なサーバや機能を限定したサーバなど、普通の Web サーバとは異なる種類のサーバを利用します。よくある選択肢としては、次のものが挙げられます。</p>\n<ul class=\"simple\">\n<li><p><a class=\"reference external\" href=\"http://wiki.nginx.org/Main\">Nginx</a></p></li>\n<li><p><a class=\"reference external\" href=\"https://httpd.apache.org/\">Apache</a> の機能縮小版</p></li>\n</ul>\n<p>これらのサーバの設定方法は、このドキュメントの範囲外です。それぞれのサーバのドキュメントを参考に設定してください。</p>\n<p>静的ファイルサーバでは Django が実行されていないので、次のようにデプロイの戦略を変更する必要があります。</p>\n<ul class=\"simple\">\n<li><p>静的ファイルが変更されたら、ローカル側で <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> を実行する。</p></li>\n<li><p>ローカル側の <a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATIC_ROOT\"><code class=\"xref std std-setting docutils literal notranslate\">STATIC_ROOT</code></a> を静的ファイルサーバのファイル配信ディレクトリにアップロードします。これには、<a class=\"reference external\" href=\"https://rsync.samba.org/\">rsync</a> を使用するのが一般的です。rsync を利用すれば、変更された静的ファイルの情報だけを転送することができます。</p></li>\n</ul>\n<p>以上の手順を fabfile にすると、次のようになります。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">fabric.api</span> <span class=\"kn\">import</span> <span class=\"o\">*</span>\n<span class=\"kn\">from</span> <span class=\"nn\">fabric.contrib</span> <span class=\"kn\">import</span> project\n\n<span class=\"c1\"># Where the static files get collected locally. Your STATIC_ROOT setting.</span>\nenv<span class=\"o\">.</span>local_static_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/path/to/static&#39;</span>\n\n<span class=\"c1\"># Where the static files should go remotely</span>\nenv<span class=\"o\">.</span>remote_static_root <span class=\"o\">=</span> <span class=\"s1\">&#39;/home/www/static.example.com&#39;</span>\n\n<span class=\"nd\">@roles</span><span class=\"p\">(</span><span class=\"s1\">&#39;static&#39;</span><span class=\"p\">)</span>\n<span class=\"k\">def</span> <span class=\"nf\">deploy_static</span><span class=\"p\">():</span>\n    local<span class=\"p\">(</span><span class=\"s1\">&#39;./manage.py collectstatic&#39;</span><span class=\"p\">)</span>\n    project<span class=\"o\">.</span>rsync_project<span class=\"p\">(</span>\n        remote_dir<span class=\"o\">=</span>env<span class=\"o\">.</span>remote_static_root<span class=\"p\">,</span>\n        local_dir<span class=\"o\">=</span>env<span class=\"o\">.</span>local_static_root<span class=\"p\">,</span>\n        delete<span class=\"o\">=</span><span class=\"kc\">True</span><span class=\"p\">,</span>\n    <span class=\"p\">)</span>\n</code></pre></div>\n</section>\n<section id=\"serving-static-files-from-a-cloud-service-or-cdn\">\n<span id=\"staticfiles-from-cdn\"></span><h3>クラウドサービスや CDN から静的ファイルを配信する<a class=\"heading-anchor\" href=\"#serving-static-files-from-a-cloud-service-or-cdn\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Another common tactic is to serve static files from a cloud storage provider\nlike Amazon's S3 and/or a CDN (content delivery network). This lets you\nignore the problems of serving static files and can often make for\nfaster-loading Web pages (especially when using a CDN).</p>\n<p>これらのサービスを使う場合でも、基本的なワークフローは上で説明した通りです。ただし、<code class=\"docutils literal notranslate\">rsync</code> を使って静的ファイルをサーバに転送する代わりに、ストレージプロバイダや CDN に転送する必要があります。</p>\n<p>そのための方法はいろいろありますが、プロバイダが API を提供している場合、<a class=\"reference internal\" href=\"/ja/1.10/howto/custom-file-storage/\"><span class=\"doc\">custom file storage backend</span></a> を使えば、プロセスを非常に簡単にすることができます。すでに自分でこれを書いているか、サードパーティの custom file storage backend を使っているなら、<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_STORAGE</code></a> をストレージエンジンに設定するだけで、<a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> でストレージプロバイダを使用することができます。</p>\n<p>たとえば、S3 storage backend を <code class=\"docutils literal notranslate\">myproject.storage.S3Storage</code> としてすでに書いていれば、次のように書くだけでこのストレージを利用できます。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code>STATICFILES_STORAGE <span class=\"o\">=</span> <span class=\"s1\">&#39;myproject.storage.S3Storage&#39;</span>\n</code></pre></div>\n<p>一度これを設定すれば、あとは <a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#django-admin-collectstatic\"><code class=\"xref std std-djadmin docutils literal notranslate\">collectstatic</code></a> を実行するだけで、ストレージパッケージ経由で静的ファイルを S3 へアップロードすることができます。後で別のストレージプロバイダに乗り換えることになったとしても、<a class=\"reference internal\" href=\"/ja/1.10/ref/settings/#std-setting-STATICFILES_STORAGE\"><code class=\"xref std std-setting docutils literal notranslate\">STATICFILES_STORAGE</code></a> の設定を書き換えるだけで、簡単にプロバイダを変更できます。</p>\n<p>バックエンドの書き方については、詳しくは <a class=\"reference internal\" href=\"/ja/1.10/howto/custom-file-storage/\"><span class=\"doc\">Writing a custom storage system</span></a> を参照してください。しかし、よく利用されるファイルストレージの API については、すでにサードパーティのアプリが書かれています。それらを探すには次のサイトをチェックしてください。 <a class=\"reference external\" href=\"https://www.djangopackages.com/grids/g/storage-backends/\">overview at djangopackages.com</a>.</p>\n</section>\n</section>\n<section id=\"learn-more\">\n<h2>さらに学ぶ<a class=\"heading-anchor\" href=\"#learn-more\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>すべての設定、コマンド、テンプレートタグなどの詳細と、<a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/#module-django.contrib.staticfiles\" title=\"django.contrib.staticfiles: An app for handling static files.\"><code class=\"xref py py-mod docutils literal notranslate\">django.contrib.staticfiles</code></a> に含まれているその他の機能については、<a class=\"reference internal\" href=\"/ja/1.10/ref/contrib/staticfiles/\"><span class=\"doc\">staticfiles リファレンス</span></a> を読んでください。</p>\n</section>","rootId":"deploying-static-files","toc":[{"title":"製品における静的ファイルの配信","anchor":"serving-static-files-in-production","children":[{"title":"サイトと静的ファイルを同じサーバから配信する","anchor":"serving-the-site-and-your-static-files-from-the-same-server","children":[]},{"title":"専用のサーバから静的ファイルを配信する","anchor":"serving-static-files-from-a-dedicated-server","children":[]},{"title":"クラウドサービスや CDN から静的ファイルを配信する","anchor":"serving-static-files-from-a-cloud-service-or-cdn","children":[]}]},{"title":"さらに学ぶ","anchor":"learn-more","children":[]}],"breadcrumbs":[{"docname":"howto/index","title":"「How-to」ガイド","url":"/ja/1.10/howto/"}],"prev":{"docname":"howto/static-files/index","title":"静的ファイル (画像、JavaScript、CSS など) の管理","url":"/ja/1.10/howto/static-files/"},"next":{"docname":"howto/windows","title":"Windows での Django のインストール方法","url":"/ja/1.10/howto/windows/"},"formats":{"html":"/ja/1.10/howto/static-files/deployment/","markdown":"/ja/1.10/howto/static-files/deployment.md","json":"/ja/1.10/howto/static-files/deployment.json"},"source":"https://github.com/django/django/blob/stable/1.10.x/docs/howto/static-files/deployment.txt","official":"https://docs.djangoproject.com/ja/1.10/howto/static-files/deployment/","inVersions":["6.1","6.0","5.2","5.1","5.0","4.2","4.1","4.0","3.2","3.1","3.0","2.2","2.1","2.0","1.11","1.10","1.9"],"inLocales":["en","fr","ja","id","pt-br","es","el","pl"]}