{"title":"Django への初めてのパッチを書く","version":"2.2","locale":"ja","docname":"intro/contributing","url":"/ja/2.2/intro/contributing/","canonical":"https://djangodocs.dev/ja/2.2/intro/contributing/","summary":"小さなものでも、コミュニティへ恩返しすることに興味がありますか？たとえば、Django に直してほしいバグを見つけたり、ちょっとした機能を追加してほしいと思っている…","html":"<h1>Django への初めてのパッチを書く<a class=\"heading-anchor\" href=\"#writing-your-first-patch-for-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h1>\n<section id=\"introduction\">\n<h2>はじめに<a class=\"heading-anchor\" href=\"#introduction\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>小さなものでも、コミュニティへ恩返しすることに興味がありますか？ たとえば、Django に直してほしいバグを見つけたり、ちょっとした機能を追加してほしいと思っているかもしれません。</p>\n<p>その願いを叶える一番の方法は Django 自体にコントリビュートすることです。最初はすごく大変なことだと想像するかもしれませんが、実際はとても簡単です。これからコントリビュートのプロセス全体を順番に詳しく解説していくので、例を通して理解できると思います。</p>\n<section id=\"who-s-this-tutorial-for\">\n<h3>このチュートリアルの対象者は誰ですか？<a class=\"heading-anchor\" href=\"#who-s-this-tutorial-for\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p>パッチの送り方について知りたい方は、 <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">Submitting patches</span></a> をご覧ください。</p>\n</aside>\n<p>このチュートリアルは、少なくとも Django が動作に関して基本的な理解があることを想定しています。つまりチュートリアル <a class=\"reference internal\" href=\"/ja/2.2/intro/tutorial01/\"><span class=\"doc\">初めての Django アプリ</span></a> を十分に理解していることを想定しています。また、Python 自体もよく理解している必要があります。もしそうでない場合、 <a href=\"#id12\"><span class=\"problematic\" id=\"id13\">`Dive Into Python`__</span></a> というガイドがあります。これは Python プログラマーになるための素晴らしい (かつ無料の) オンラインドキュメントです。</p>\n<p>バージョン管理システムや Trac をよく知らない方でも、このチュートリアルとリンク先から、コントリビュートに必要な情報は十分得られます。しかし、Django に定期的に貢献したい場合は、このツールの詳細を知っておいた方がいいでしょう。</p>\n<p>このチュートリアルでは、できるだけ多くの方が使用できるように、可能な限り詳しく説明したいと思います。</p>\n<aside class=\"admonition-where-to-get-help admonition\" role=\"note\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>If you're having trouble going through this tutorial, please post a message\nto <a class=\"reference internal\" href=\"/ja/2.2/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> or drop by <a href=\"#id12\"><span class=\"problematic\" id=\"id14\">`#django-dev on irc.libera.chat`__</span></a> to\nchat with other Django users who might be able to help.</p>\n</aside>\n</section>\n<section id=\"what-does-this-tutorial-cover\">\n<h3>このチュートリアルはどの範囲をカバーしていますか？<a class=\"heading-anchor\" href=\"#what-does-this-tutorial-cover\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>初めて Django にパッチを送る手順までを詳しく解説しています。このチュートリアルを終えると、関連するツールとプロセス両方について基本的な理解が得られます。具体的には次が対象とする範囲です。</p>\n<ul class=\"simple\">\n<li><p>Git のインストール</p></li>\n<li><p>Django 開発版の複製をダウンロードする</p></li>\n<li><p>Django のテストスイートの実行</p></li>\n<li><p>パッチへのテストを書く</p></li>\n<li><p>パッチのコードを書く</p></li>\n<li><p>パッチをテスト</p></li>\n<li><p>プルリクエストを送る</p></li>\n<li><p>より多くの情報を得る方法</p></li>\n</ul>\n<p>チュートリアルを終えたら、次は <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/\"><span class=\"doc\">Django への貢献</span></a> を参照してください。このドキュメントには、多くの重要な情報が含まれており、Django に定期的に貢献したい方は是非一読してください。あなたの疑問への答えが見つかるはずです。</p>\n<aside class=\"admonition-python-3-required admonition\" role=\"note\">\n<p class=\"admonition-title\">3系の Python が必要です！</p>\n<p>Django の現在のバージョンは、Python 2.7 をサポートしません。Python のダウンロードページ &lt;https://www.python.org/downloads/&gt; や OS のパッケージ管理システムを用いて Python 3 をインストールしてください。</p>\n</aside>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">Windows を使用している方へ</p>\n<p>Windows に Python をインストールする際、 &quot;Add python.exe to Path&quot; のオプションにチェックを入れると、コマンドラインからいつでも利用できるようになります。</p>\n</aside>\n</section>\n</section>\n<section id=\"code-of-conduct\">\n<h2>ソースコードの管理<a class=\"heading-anchor\" href=\"#code-of-conduct\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>あなたはコントリビューターとして私たちDjangoコミュニティをオープンかつ包摂的なものでありつづけることを援助できます。私たちの ソースコードの管理 &lt;https://www.djangoproject.com/conduct/&gt; を参照し、フォローして下さい。</p>\n</section>\n<section id=\"installing-git\">\n<h2>Git のインストール<a class=\"heading-anchor\" href=\"#installing-git\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>このチュートリアルでは、最新の Django 開発版のダウンロードとその変更のパッチファイルを生成するために Git をインストールする必要があります。</p>\n<p>Git がインストールされているかどうかを確認するために、コマンドラインで <code class=\"docutils literal notranslate\">git</code> を入力します。もし入っていない場合は、ダウンロード及びインストールするために、 <a href=\"#id12\"><span class=\"problematic\" id=\"id15\">`Git's download page`__</span></a> を参照してください。</p>\n<p>もし Git について詳しく知らない場合は、(インストール後に) コマンドラインから <code class=\"docutils literal notranslate\">git help</code> と入力するとコマンドの使い方を確認できます。</p>\n</section>\n<section id=\"getting-a-copy-of-django-s-development-version\">\n<h2>Django 開発版の複製を取得<a class=\"heading-anchor\" href=\"#getting-a-copy-of-django-s-development-version\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django へ貢献するためのはじめの一歩は、ソースコードのコピーです。まず、 <a class=\"reference external\" href=\"https://github.com/django/django/fork\">GitHub で Django をフォーク</a> して、コマンドラインからリポジトリのクローンを作り、 <code class=\"docutils literal notranslate\">cd</code> コマンドで Django のローカルコピーのディレクトリに移動しましょう。</p>\n<p>以下のコマンドで Django のソースコードリポジトリをダウンロードします:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git clone https://github.com/YourGitHubName/django.git\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git clone https://github.com/YourGitHubName/django.git\n</code></pre></div></div></div>\n<aside class=\"admonition-low-bandwidth-connection admonition\" role=\"note\">\n<p class=\"admonition-title\">低帯域の回線をご利用ですか？</p>\n<p><code class=\"docutils literal notranslate\">git clone``に</code>--depth 1``という引数を追加すると、Djangoのコミット履歴のダウンロードをスキップすることができます。これによってデータの転送量が70〜250MB程度減ります。</p>\n</aside>\n<p>Django のローカルコピーがあるので、`` pip`` を使ってパッケージをインストールするのと同じようにインストールすることができます。そのための最も便利な方法は、Python に組み込まれている機能である <em>仮想環境</em> を使用することです。これにより、相互に干渉しないようにプロジェクトごとにインストールされたパッケージの別々のディレクトリを保つことができます。</p>\n<p>例えばホームディレクトリ下の``.virtualenvs/`` にすべての仮想環境を置くことが出来ます。</p>\n<p>実行することによって、新しい仮想環境を作成します：</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>python3 -m venv ~/.virtualenvs/djangodev\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m venv <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\n</code></pre></div></div></div>\n<p>新しい環境があるパスはコンピュータに保存されました。</p>\n<p>最後のステップとして仮想環境を有効化します：</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">source</span> ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\">source</code> コマンドが使えない場合、代わりに <code class=\"docutils literal notranslate\">.</code> を試してみてください:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>. ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">Windows を使用している方へ</p>\n<p>実行してWindowsでの仮想環境を有効化します：</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\\Scripts\\activate.bat\n</code></pre></div>\n</aside>\n<p>仮想環境の有効化は、ターミナルを新しいウィンドウで開く度に行わなければいけません。virtualenvwrapper__はこの作業をより簡単に行うための便利なツールです。</p>\n<p>その時点で有効な仮想環境の名前がコマンドライン上に表示されます。これによってどの仮想環境を利用しているのかが分かります。仮想環境のもとで <code class=\"docutils literal notranslate\">pip</code> によるインストールを行うと、表示されている仮想環境内にインストールされます。他の仮想環境やパッケージインストールによるシステムとは区別されます。</p>\n<p id=\"intro-contributing-install-local-copy\">先に進んで、以前にクローンしたDjangoのコピーをインストールしてください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-2-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>pip install -e /path/to/your/local/clone/django/\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> pip install -e \\path\\to\\your\\local\\clone\\django\\\n</code></pre></div></div></div>\n<p>The installed version of Django is now pointing at your local copy by installing\nin editable mode. You will immediately see any changes you make to it, which is\nof great help when writing your first patch.</p>\n<section id=\"creating-projects-with-a-local-copy-of-django\">\n<h3>Creating projects with a local copy of Django<a class=\"heading-anchor\" href=\"#creating-projects-with-a-local-copy-of-django\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>It may be helpful to test your local changes with a Django project. First you\nhave to create a new virtual environment, <a class=\"reference internal\" href=\"#intro-contributing-install-local-copy\"><span class=\"std std-ref\">install the previously cloned\nlocal copy of Django in editable mode</span></a>,\nand create a new Django project outside of your local copy of Django. You will\nimmediately see any changes you make to Django in your new project, which is\nof great help when writing your first patch.</p>\n</section>\n</section>\n<section id=\"running-django-s-test-suite-for-the-first-time\">\n<h2>最初に Django のテストスイートを実行する<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-first-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Djangoへ貢献する際、あなたが変更を加えたコードがDjangoのほかの領域でバグを起さないことがとても重要です。コードを変更したあとも、Djangoが動作するか確認する方法の１つとして、Djangoのテストスイートを実行することが挙げられます。全てのテストが通ったら、おそらくあなたの加えた変更は動作しており、Djangoのほかの部分を破損していないことも確かです。これまでDjangoのテストスイートを一度も実行したことがない場合は、事前にテストを実行して出力結果を把握しておくことを推奨します。</p>\n<p>Django のテストスイートを実行する前に、Djangoの <code class=\"docutils literal notranslate\">tests/</code> ディレクトリに <code class=\"docutils literal notranslate\">cd</code> で移動して、依存関係をインストールしてから実行してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-3-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>pip install -r requirements/py3.txt\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> pip install -r requirements\\py3.txt\n</code></pre></div></div></div>\n<p>もしこのインストールの間にエラーが発生した場合は、システムが Python のうちの 1 つ以上の依存パッケージが見つからない可能性があります。失敗したパッケージのドキュメントを調べるか、発生したエラーメッセージをウェブで検索してください。</p>\n<p>テストスイートを実効する準備が出来ました。もし GNU/Linux, macOS 等 Unix 系OSを使用している場合、下記のコマンドを実行します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>今すぐ座ってリラックスしてください。Django のテストスイート全体には何千ものテストがあり、コンピュータの速度によっては少なくとも数分かかることがあります。</p>\n<p>Django のテストスイートを実行中に、各テストの完了時のステータスを表す一連の文字が表示されます。 <code class=\"docutils literal notranslate\">E</code> はテストにエラーが発生したことを表し、 <code class=\"docutils literal notranslate\">F</code> はテストのアサーションが失敗したことを表しています。これらは共にテスト失敗となります。<code class=\"docutils literal notranslate\">x</code> と <code class=\"docutils literal notranslate\">s</code> はそれぞれ期待する失敗とスキップを表しています。ドットはテストの成功を表しています。</p>\n<p>スキップされたテストは、テストを実行するために必要な外部ライブラリがインストールされていないことが原因です; 依存については <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-dependencies\"><span class=\"std std-ref\">Running all the tests</span></a> を参照し、あなたの変更に関連するテストにする依存ライブラリがインストールしてください (このチュートリアルでは必要ありません)。いくつかのテストは、特定のデータベースバックエンドに固有であり、そのバックエンドでテストされない場合はスキップされます。 SQLite は、デフォルト設定のバックエンドです。別のバックエンドを使用してテストを実行するには、 <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">Using another settings module</span></a> を参照してください。</p>\n<p>テストが終了するとテストが成功したか､失敗したかを知らせるメッセージが表示されます｡まだ Django のコードに変更を加えていなければ､テストは全て <strong>パスするはずです</strong> ｡もし失敗するかエラーが起こる場合は､これまでの全ステップを適切に実行してください｡ <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/unit-tests/#running-unit-tests\"><span class=\"std std-ref\">Running the unit tests</span></a> で､よりテストについて知れます｡</p>\n<p>最新の Django の master は常に安定しているとは限りません。 master バージョンで開発を行う場合、 <a href=\"#id12\"><span class=\"problematic\" id=\"id16\">`Django の継続インテグレーションビルド`__</span></a> をチェックしてください。これで、テストの失敗があなたのマシンだけのものか､ Django 公式のビルドによるものかが分かります。各ビルドについてのリンクをクリックすれば､ &quot;Configuration Matrix&quot; という、各 Python のバージョン、 DB バックエンドに対応したテストの失敗を閲覧できます｡</p>\n<aside class=\"admonition admonition-note\" role=\"note\">\n<p class=\"admonition-title\">注釈</p>\n<p>このチュートリアルや、各チケットで作業する際は､ SQLite のテストで十分です。しかし可能（か必要）な場合は <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">他のデータベースでテストを実行する</span></a> を参照してください。</p>\n</aside>\n</section>\n<section id=\"working-on-a-feature\">\n<h2>取りかかる<a class=\"heading-anchor\" href=\"#working-on-a-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>このチュートリアルでは、ケーススタディとして「架空のチケット」を使って作業を進めます。以下はその架空の詳細です。</p>\n<aside class=\"admonition-ticket-99999-allow-making-toast admonition\" role=\"note\">\n<p class=\"admonition-title\">チケット #99999 -- トーストを焼くようにする</p>\n<p>Django は、<code class=\"docutils literal notranslate\">toast</code> を返す関数 <code class=\"docutils literal notranslate\">django.shortcuts.make_toast()</code> を提供しなければなりません。</p>\n</aside>\n<p>これよりこの機能と関連するテストを実装します。</p>\n</section>\n<section id=\"creating-a-branch-for-your-patch\">\n<h2>パッチ用のブランチを作る<a class=\"heading-anchor\" href=\"#creating-a-branch-for-your-patch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>変更を加える前に、チケット用に新しいブランチを作ります。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-5-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git checkout -b ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git checkout -b ticket_99999\n</code></pre></div></div></div>\n<p>ブランチ名は好きな名前で構いません。&quot;ticket_99999&quot; は一例です。新しいブランチ内で行ったすべての変更は、先ほどクローンしたコードのマスターコピーには影響しません。</p>\n</section>\n<section id=\"writing-some-tests-for-your-ticket\">\n<h2>チケットにテストを書く<a class=\"heading-anchor\" href=\"#writing-some-tests-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>大抵の場合、 Django にアクセプトされるパッチはテストを含んでいます。バグフィックス修正の場合、リグレッションテストを書くことで、 Django にバグを再混入していないと後に保証できます。リグレッションテストは、バグが存在しているときに落ちるように書き、バグが修正された後にパスするように書かれるべきです。新機能を含むパッチでは、その新機能が正しく動作すると保証するためにテストが必要です。その際も同じように、テストは、新機能がない段階では落ち、実装されたら通るべきです。</p>\n<p>これをするには、コードに変更を加える前に先にテストを書くのが良いでしょう。この開発手法は <a href=\"#id12\"><span class=\"problematic\" id=\"id17\">`テスト駆動開発`__</span></a> と呼ばれ、プロジェクト全体にも単一のパッチにも適応可能です。テストを書いた後には、テストを走らせて確かに落ちることを確認します (バグ修正や機能の追加はまだしてないので落ちます)。新しいテストが落ちない場合は落ちるよう修正しましょう。ともかく、バグが存在していようとも通るテストは将来バグが再発するのを防ぐのに何の役にもたちません｡</p>\n<p>ハンズオンでの例題に移りましょう。</p>\n<section id=\"writing-a-test-for-ticket-99999\">\n<h3>チケット #99999 に対するテストの実装<a class=\"heading-anchor\" href=\"#writing-a-test-for-ticket-99999\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>このチケットを解決するために、これからb``django``モジュールのトップレベルに``make_toast()``という関数を追加します。まずはこの関数を使うためのテストを書いて、関数の出力が正しいことを確認しましょう。</p>\n<p>Djangoの``tests/shortcuts/<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>フォルダへ移動して``test_make_toast.py``というファイルを新たに作ります\n。以下のコードを追加してください。</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\">django.shortcuts</span> <span class=\"kn\">import</span> make_toast\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MakeToastTests</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_make_toast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>make_toast<span class=\"p\">(),</span> <span class=\"s1\">&#39;toast&#39;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このテストは``make_toast()``が``toast``を返すかを確認します。</p>\n<aside class=\"admonition-but-this-testing-thing-looks-kinda-hard admonition\" role=\"note\">\n<p class=\"admonition-title\">でもテストをするのはすこし難しそうです……</p>\n<p>テストを書いたことがない場合は、最初は難しく見えるかもしれません。ですが実は、テストすることはプログラミングにおいて <em>とても</em> 重要なことです。ここではテストについて詳細に紹介します。</p>\n<ul class=\"simple\">\n<li><p>Django のための良いテストの書き方は <a class=\"reference internal\" href=\"/ja/2.2/topics/testing/overview/\"><span class=\"doc\">テストを書いて実行する</span></a> のドキュメントに記載されています。</p></li>\n<li><p>Dive Into Python (Python初心者のための､オンラインの無料の本) では素晴らしい <a href=\"#id12\"><span class=\"problematic\" id=\"id18\">`初めてのユニットテスト`__</span></a> という章があります｡</p></li>\n<li><p>Dive Into Python を読んだあと、もう少し情報が欲しい場合は、Python の <a class=\"reference external\" href=\"https://docs.python.org/3/library/unittest.html#module-unittest\" title=\"(in Python v3.14)\"><code class=\"xref py py-mod docutils literal notranslate\">unittest</code></a> のドキュメントを参照してください｡</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"running-your-new-test\">\n<h3>新しいテストを走らせる<a class=\"heading-anchor\" href=\"#running-your-new-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>まだ``django.shortcuts``に変更を加えていないため、テストは失敗します。<a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>shortcuts``フォルダ内の全てのテストを実行して、どうなるか見てみましょう。<a href=\"#id3\"><span class=\"problematic\" id=\"id4\">``</span></a>cd``でDjangoの``tests/<a href=\"#id5\"><span class=\"problematic\" id=\"id6\">``</span></a>ディレクトリへと移動してから実行してください。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>テストが正しく実行されれば追加したテストメソッドに対して、こちらのエラーとともに１つテストが失敗しているはずです。</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=\"ne\">ImportError</span><span class=\"p\">:</span> cannot <span class=\"kn\">import</span> <span class=\"nn\">name</span> <span class=\"s1\">&#39;make_toast&#39;</span> <span class=\"kn\">from</span> <span class=\"s1\">&#39;django.shortcuts&#39;</span>\n</code></pre></div>\n<p>テストがすべて通れば､上記した新しいテストを正しいフォルダ､クラスに追加したことを確認してください｡</p>\n</section>\n</section>\n<section id=\"writing-the-code-for-your-ticket\">\n<h2>チケットにコードを書く<a class=\"heading-anchor\" href=\"#writing-the-code-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>続いては``make_toast()``関数を追加します。</p>\n<p><code class=\"docutils literal notranslate\">django/</code> フォルダに移動して <code class=\"docutils literal notranslate\">shortcuts.py</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><span class=\"k\">def</span> <span class=\"nf\">make_toast</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"s1\">&#39;toast&#39;</span>\n</code></pre></div>\n<p>さて、先ほど書いたテストが成功したことを確認する必要があるので、追加したコードが正しく機能しているかどうかを確認できます。もう一度、Django の <code class=\"docutils literal notranslate\">tests/</code> ディレクトリに移動して以下を実行します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>テストはすべて成功するはずです。失敗した場合は、正しいファイルに対して正しく関数を追加しているかどうかを確認してください。</p>\n</section>\n<section id=\"running-django-s-test-suite-for-the-second-time\">\n<h2>Django の テストスイートをもう一度走らせる<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-second-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>パッチとテストが正しく動作していることを確認できたら､ Django のテストをすべて走らせて､変更が Django の別の場所にバグを仕込んでいないか確認しましょう｡すべてのテストが通るという事は､追加したコードがバグフリーだと保証します｡大量のバグや手戻りを発見できます｡そうでないとバグを見逃してしまうでしょう｡</p>\n<p>Django の全てのテストスイートを走らせるには <code class=\"docutils literal notranslate\">cd</code> で Django の <code class=\"docutils literal notranslate\">tests/</code> ディレクトリ移動して実行してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n</section>\n<section id=\"writing-documentation\">\n<h2>ドキュメントを書く<a class=\"heading-anchor\" href=\"#writing-documentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>これは新たな機能です。したがってドキュメントを作る必要があります。ファイル <code class=\"docutils literal notranslate\">docs/topics/http/shortcuts.txt</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>``make_toast()``\n================\n\n.. versionadded:: 2.2\n\nReturns ``&#39;toast&#39;``.\n</code></pre></div>\n<p>この新機能は将来のリリースとともに、Django 次期バージョンのリリースノートにも含まれます。ファイル <code class=\"docutils literal notranslate\">docs/releases/</code> の最新バージョン (これを書いてる時点では <code class=\"docutils literal notranslate\">2.2.txt</code>) のリリースノートを開き、&quot;Minor Feature&quot; ヘッダの下にノートを追記してください。</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>:mod:`django.shortcuts`\n~~~~~~~~~~~~~~~~~~~~~~~\n\n* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.\n</code></pre></div>\n<p>ドキュメントの書き方についてもっと知りたい場合は <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-documentation/\"><span class=\"doc\">Writing documentation</span></a> を参照してください｡ここでは､ <a href=\"#id1\"><span class=\"problematic\" id=\"id2\">``</span></a>versionadded` の書き方についてや､ ドキュメントのコピーをローカルでビルドしてみて､ HTML をプレビューする方法などが書かれています｡</p>\n</section>\n<section id=\"previewing-your-changes\">\n<h2>変更点を確認する<a class=\"heading-anchor\" href=\"#previewing-your-changes\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>パッチに加えた修正をすべて確認することにしましょう。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-9-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git add --all\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git add --all\n</code></pre></div></div></div>\n<p>上により Django のカレントコピー (修正内容を含む) と、チュートリアル冒頭において行っていたチェックアウトリビジョンとの違いが表示されます。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git diff --cached\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git diff --cached\n</code></pre></div></div></div>\n<p>ページを進めるには上下キーを使います。</p>\n<div class=\"code-block\" data-language=\"diff\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Diff</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=\"Diff code\"><code><span class=\"gh\">diff --git a/django/shortcuts.py b/django/shortcuts.py</span>\n<span class=\"gh\">index 7ab1df0e9d..8dde9e28d9 100644</span>\n<span class=\"gd\">--- a/django/shortcuts.py</span>\n<span class=\"gi\">+++ b/django/shortcuts.py</span>\n<span class=\"gu\">@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):</span>\n\n     # Finally, fall back and assume it&#39;s a URL\n     return to\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+def make_toast():</span>\n<span class=\"gi\">+    return &#39;toast&#39;</span>\n<span class=\"gh\">diff --git a/docs/releases/2.2.txt b/docs/releases/2.2.txt</span>\n<span class=\"gh\">index 7d85d30c4a..81518187b3 100644</span>\n<span class=\"gd\">--- a/docs/releases/2.2.txt</span>\n<span class=\"gi\">+++ b/docs/releases/2.2.txt</span>\n<span class=\"gu\">@@ -40,6 +40,11 @@ database constraints. Constraints are added to models using the</span>\n Minor features\n --------------\n\n<span class=\"gi\">+:mod:`django.shortcuts`</span>\n<span class=\"gi\">+~~~~~~~~~~~~~~~~~~~~~~~</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.</span>\n<span class=\"gi\">+</span>\n :mod:`django.contrib.admin`\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<span class=\"gh\">diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gh\">index 7b3a3a2c00..711bf6bb6d 100644</span>\n<span class=\"gd\">--- a/docs/topics/http/shortcuts.txt</span>\n<span class=\"gi\">+++ b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gu\">@@ -271,3 +271,12 @@ This example is equivalent to::</span>\n         my_objects = list(MyModel.objects.filter(published=True))\n         if not my_objects:\n             raise Http404(&quot;No MyModel matches the given query.&quot;)\n<span class=\"gi\">+</span>\n<span class=\"gi\">+``make_toast()``</span>\n<span class=\"gi\">+================</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. function:: make_toast()</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. versionadded:: 2.2</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+Returns ``&#39;toast&#39;``.</span>\n<span class=\"gh\">diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py</span>\nnew file mode 100644\n<span class=\"gh\">index 0000000000..6f4c627b6e</span>\n<span class=\"gd\">--- /dev/null</span>\n<span class=\"gi\">+++ b/tests/shortcuts/test_make_toast.py</span>\n<span class=\"gu\">@@ -0,0 +1,7 @@</span>\n<span class=\"gi\">+from django.shortcuts import make_toast</span>\n<span class=\"gi\">+from django.test import SimpleTestCase</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+class MakeToastTests(SimpleTestCase):</span>\n<span class=\"gi\">+    def test_make_toast(self):</span>\n<span class=\"gi\">+        self.assertEqual(make_toast(), &#39;toast&#39;)</span>\n</code></pre></div>\n<p>パッチのプレビューが終わったら <code class=\"docutils literal notranslate\">q</code> キーを押してコマンドラインに戻ります。パッチに問題がなければ、変更をコミットしましょう。</p>\n</section>\n<section id=\"committing-the-changes-in-the-patch\">\n<h2>パッチの変更点をコミットする<a class=\"heading-anchor\" href=\"#committing-the-changes-in-the-patch\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>変更点をコミットするには、次のコマンドを実行します。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-11-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git commit\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-11-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git commit\n</code></pre></div></div></div>\n<p>すると、コミットメッセージを入力するためのテキストエディタが開きます。 <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">コミットメッセージガイドライン</span></a> に従って、次のようにメッセージを入力します。</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</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=\"Text code\"><code>Fixed #99999 -- Added a shortcut function to make toast.\n</code></pre></div>\n</section>\n<section id=\"pushing-the-commit-and-making-a-pull-request\">\n<h2>コミットのプッシュとプルリクエストの作成<a class=\"heading-anchor\" href=\"#pushing-the-commit-and-making-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>パッチをコミットしたら、そのコミットを GitHub 上のあなたのフォークに送りましょう (ブランチ名を変えた場合には &quot;ticket_99999&quot; の部分を置き換えてください)。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</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=\"Shell code\"><code><span class=\"gp\">$ </span>git push origin ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</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=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git push origin ticket_99999\n</code></pre></div></div></div>\n<p>プルリクエストは <a class=\"reference external\" href=\"https://github.com/django/django/\">Django の GitHub ページ</a> から作成できます。&quot;Your recently pushed branches&quot; の下にあなたのブランチが表示されているはずです。その下の &quot;Compare &amp; pull request&quot; ボタンをクリックします。</p>\n<p>このチュートリアルでは行ってはいけませんが、次のページにパッチのプレビューが表示されるので、&quot;Create pull request&quot; をクリックすれば、Django プロジェクトに実際にプルリクエストを送ることができます。</p>\n</section>\n<section id=\"next-steps\">\n<h2>次のステップ<a class=\"heading-anchor\" href=\"#next-steps\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>おめでとうございます！ これで Django へのプルリクエストの作成方法を学ぶことができました。応用テクニックについて詳しくは <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/working-with-git/\"><span class=\"doc\">Working with Git and GitHub</span></a> を読んでください。</p>\n<p>これで、Django のコードベースを改良する手助けができるようになりました。</p>\n<section id=\"more-information-for-new-contributors\">\n<h3>新しい貢献者のための情報<a class=\"heading-anchor\" href=\"#more-information-for-new-contributors\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>Django へのパッチを書き始める前に､貢献するために見ておいたほうがいい情報があります:</p>\n<ul class=\"simple\">\n<li><p>Django のドキュメントの <a class=\"reference external\" href=\"/ja/2.2/internals/contributing/writing-code/submitting-patches/\">チケットをクレームして､パッチを送信する</a> を読んでください｡ Trac でのエチケットやチケットをクレームする方法やパッチに適切なコーディングスタイルなど､重要なことを網羅できます｡</p></li>\n<li><p>Django への初めての貢献者は <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/new-contributors/\"><span class=\"doc\">初めての貢献者へのドキュメント</span></a> を読んでください｡Django に初めて協力する人たちへの良いアドバイスがあります｡</p></li>\n<li><p>貢献について､より多くの情報を知りたいなら､ <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/\"><span class=\"doc\">貢献についての Django のドキュメント</span></a> を参照してください｡そこにはたくさん有用な情報がありまし､質問があれば､このドキュメントが1番役に立ちます｡</p></li>\n</ul>\n</section>\n<section id=\"finding-your-first-real-ticket\">\n<h3>実際にチケットを探してみましょう<a class=\"heading-anchor\" href=\"#finding-your-first-real-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>ドキュメントをたくさん読んだ後は､実際のパッチを書けるのでチケットを探してみましょう｡ &quot;easy picking&quot; タグが付いたチケットを見つけてください｡このチケットは大抵はより簡単なものなので､初めての貢献者には適切でしょう｡ Django への貢献に慣れてきたあとは､難しく､複雑なチケットを書き始めれるでしょう｡</p>\n<p>今すぐ始めたいなら (責める人はいません！)、　<a href=\"#id12\"><span class=\"problematic\" id=\"id19\">`パッチが必要な簡単なチケット`__</span></a> か <a href=\"#id12\"><span class=\"problematic\" id=\"id20\">`パッチに改善が必要な簡単なチケット`__</span></a> を見つけましょう。テストを書きなれているなら <a href=\"#id12\"><span class=\"problematic\" id=\"id21\">`テストが必要な簡単なチケット`__</span></a> でもよいでしょう。ただ、チケットのクレームに関するガイドラインに従ってください。 Django ドキュメントの <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">チケットをクレームしてパッチを送る</span></a> で記述されています。</p>\n</section>\n<section id=\"what-s-next-after-creating-a-pull-request\">\n<h3>プルリクエストを作ったあとは？<a class=\"heading-anchor\" href=\"#what-s-next-after-creating-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>チケットに対してパッチを作ったら、他の人によるレビューが必要です。プルリクエストを送った後は、チケットのメタデータを &quot;has patch&quot;、&quot;doesn't need tests&quot; などのフラグを付けてアップデートして、他の人にレビューが必要だと分かるようにしてください。プロジェクトへの貢献は、必ずしもパッチを書くことだけではありません。すでに書かれたパッチをレビューのレビューもとても助かります。詳しくは  <a class=\"reference internal\" href=\"/ja/2.2/internals/contributing/triaging-tickets/\"><span class=\"doc\">Triaging tickets</span></a> を見てください。</p>\n</section>\n</section>","rootId":"writing-your-first-patch-for-django","toc":[{"title":"はじめに","anchor":"introduction","children":[{"title":"このチュートリアルの対象者は誰ですか？","anchor":"who-s-this-tutorial-for","children":[]},{"title":"このチュートリアルはどの範囲をカバーしていますか？","anchor":"what-does-this-tutorial-cover","children":[]}]},{"title":"ソースコードの管理","anchor":"code-of-conduct","children":[]},{"title":"Git のインストール","anchor":"installing-git","children":[]},{"title":"Django 開発版の複製を取得","anchor":"getting-a-copy-of-django-s-development-version","children":[{"title":"Creating projects with a local copy of Django","anchor":"creating-projects-with-a-local-copy-of-django","children":[]}]},{"title":"最初に Django のテストスイートを実行する","anchor":"running-django-s-test-suite-for-the-first-time","children":[]},{"title":"取りかかる","anchor":"working-on-a-feature","children":[]},{"title":"パッチ用のブランチを作る","anchor":"creating-a-branch-for-your-patch","children":[]},{"title":"チケットにテストを書く","anchor":"writing-some-tests-for-your-ticket","children":[{"title":"チケット #99999 に対するテストの実装","anchor":"writing-a-test-for-ticket-99999","children":[]},{"title":"新しいテストを走らせる","anchor":"running-your-new-test","children":[]}]},{"title":"チケットにコードを書く","anchor":"writing-the-code-for-your-ticket","children":[]},{"title":"Django の テストスイートをもう一度走らせる","anchor":"running-django-s-test-suite-for-the-second-time","children":[]},{"title":"ドキュメントを書く","anchor":"writing-documentation","children":[]},{"title":"変更点を確認する","anchor":"previewing-your-changes","children":[]},{"title":"パッチの変更点をコミットする","anchor":"committing-the-changes-in-the-patch","children":[]},{"title":"コミットのプッシュとプルリクエストの作成","anchor":"pushing-the-commit-and-making-a-pull-request","children":[]},{"title":"次のステップ","anchor":"next-steps","children":[{"title":"新しい貢献者のための情報","anchor":"more-information-for-new-contributors","children":[]},{"title":"実際にチケットを探してみましょう","anchor":"finding-your-first-real-ticket","children":[]},{"title":"プルリクエストを作ったあとは？","anchor":"what-s-next-after-creating-a-pull-request","children":[]}]}],"breadcrumbs":[{"docname":"intro/index","title":"さぁ始めましょう","url":"/ja/2.2/intro/"}],"prev":{"docname":"intro/whatsnext","title":"次のステップへ","url":"/ja/2.2/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Django を使う","url":"/ja/2.2/topics/"},"formats":{"html":"/ja/2.2/intro/contributing/","markdown":"/ja/2.2/intro/contributing.md","json":"/ja/2.2/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/2.2.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/ja/2.2/intro/contributing/","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","zh-hans","fr","ja","id","pt-br","ko","es","el","pl"]}