{"title":"Django への初めてのパッチを書く","version":"4.2","locale":"ja","docname":"intro/contributing","url":"/ja/4.2/intro/contributing/","canonical":"https://djangodocs.dev/ja/4.2/intro/contributing/","summary":"はじめに Link to this heading # 小さなものでも、コミュニティへ恩返しすることに興味がありますか？ たとえば、Django に直してほしいバグを見つけたり、ちょっとした機能を追加してほしいと思っているかもしれません。 その願いを叶える一番の方法は 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\">\n<p class=\"admonition-title\">参考</p>\n<p>パッチを書く方法の細かい参照文献を探しているなら <a class=\"reference internal\" href=\"/ja/4.2/internals/contributing/writing-code/\"><span class=\"doc\">Writing code</span></a> ドキュメントを参照してください。</p>\n</aside>\n<p>このチュートリアルは、少なくとも Django が動作に関して基本的な理解があることを想定しています。つまりチュートリアル <a class=\"reference internal\" href=\"/ja/4.2/intro/tutorial01/\"><span class=\"doc\">初めての Django アプリ</span></a> を十分に理解していることを想定しています。また、Python 自体もよく理解している必要があります。もしそうでない場合、 <a class=\"reference external\" href=\"https://diveinto.org/python3/table-of-contents.html\">Dive Into Python</a> というガイドがあります。これは Python プログラマーになるための素晴らしい (かつ無料の) オンラインドキュメントです。</p>\n<p>バージョン管理システムや Trac をよく知らない方でも、このチュートリアルとリンク先から、コントリビュートに必要な情報は十分得られます。しかし、Django に定期的に貢献したい場合は、このツールの詳細を知っておいた方がいいでしょう。</p>\n<p>このチュートリアルでは、できるだけ多くの方が使用できるように、可能な限り詳しく説明したいと思います。</p>\n<aside class=\"admonition-where-to-get-help admonition\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>このチュートリアルで問題が発生したときは、<a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a> 、 <a class=\"reference internal\" href=\"/ja/4.2/internals/mailing-lists/#django-developers-mailing-list\"><span class=\"std std-ref\">django-developers</span></a> にメッセージを投稿するか、<a class=\"reference external\" href=\"https://web.libera.chat/#django-dev\">irc.libera.chat の #django-dev</a> でチャットすることで、他のDjangoユーザの助けを得ることができます。</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/4.2/internals/contributing/\"><span class=\"doc\">Django への貢献</span></a> を参照してください。このドキュメントには、多くの重要な情報が含まれており、Django に定期的に貢献したい方は是非一読してください。あなたの疑問への答えが見つかるはずです。</p>\n<aside class=\"admonition-python-3-required admonition\">\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\">\n<p class=\"admonition-title\">Windows を使用している方へ</p>\n<p>Windowsのドキュメントの <a class=\"reference internal\" href=\"/ja/4.2/howto/windows/#install-python-windows\"><span class=\"std std-ref\">Python をインストールする</span></a> をみてください。</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\"><span class=\"pre\">git</span></code> を入力します。もし入っていない場合は、ダウンロード及びインストールするために、 <a class=\"reference external\" href=\"https://git-scm.com/download\">Git's download page</a> を参照してください。</p>\n<p>もし Git について詳しく知らない場合は、(インストール後に) コマンドラインから <code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">help</span></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\"><span class=\"pre\">cd</span></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<span class=\"w\"> </span>clone<span class=\"w\"> </span>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\">\n<p class=\"admonition-title\">低帯域の回線をご利用ですか？</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">git</span> <span class=\"pre\">clone</span></code> に <code class=\"docutils literal notranslate\"><span class=\"pre\">--depth</span> <span class=\"pre\">1</span></code> という引数を追加すると、Djangoのコミット履歴のダウンロードをスキップすることができます。これによってデータの転送量が70〜250MB程度減ります。</p>\n</aside>\n<p>Django のローカルコピーがあるので、 <code class=\"docutils literal notranslate\"><span class=\"pre\">pip</span></code> を使ってパッケージをインストールするのと同じようにインストールすることができます。そのための最も便利な方法は、Python に組み込まれている機能である <em>仮想環境</em> を使用することです。これにより、相互に干渉しないようにプロジェクトごとにインストールされたパッケージの別々のディレクトリを保つことができます。</p>\n<p>例えばホームディレクトリ下の <code class=\"docutils literal notranslate\"><span class=\"pre\">.virtualenvs/</span></code> にすべての仮想環境を置くことが出来ます。</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<span class=\"w\"> </span>-m<span class=\"w\"> </span>venv<span class=\"w\"> </span>~/.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><span class=\"w\"> </span>~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\"><span class=\"pre\">source</span></code> コマンドが使えない場合、代わりに <code class=\"docutils literal notranslate\"><span class=\"pre\">.</span></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>.<span class=\"w\"> </span>~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>新しいターミナルウィンドウを開くたびに仮想環境を有効にする必要があります。</p>\n<aside class=\"admonition-for-windows-users admonition\">\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>その時点で有効な仮想環境の名前がコマンドライン上に表示されます。これによってどの仮想環境を利用しているのかが分かります。仮想環境のもとで <code class=\"docutils literal notranslate\"><span class=\"pre\">pip</span></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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-e<span class=\"w\"> </span>/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> py -m pip install -e \\path\\to\\your\\local\\clone\\django\\\n</code></pre></div></div></div>\n<p>Django のインストール済みバージョンは、編集可能モードでインストールすることにより、ローカルコピーを指すようになりました。変更内容はすぐに反映されます。これは最初のパッチを作成する際に非常に役立ちます。</p>\n<section id=\"creating-projects-with-a-local-copy-of-django\">\n<h3>ローカルに複製した 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>Djangoプロジェクトでローカルの変更をテストすると役立つ場合があります。 最初に、新しい仮想環境を作成する必要があります <a class=\"reference internal\" href=\"#intro-contributing-install-local-copy\"><span class=\"std std-ref\">install the previously cloned local copy of Django in editable mode</span></a>、ローカルにコピーしたDjangoの外部に新しいDjangoプロジェクトを作成します。 新しいプロジェクトでDjangoに加えた変更はすぐに表示されます。これは、最初のパッチを作成するときに、特にUIの変更をテストするときに非常に役立ちます。</p>\n<p>Djangoプロジェクトの作り方については、 <a class=\"reference internal\" href=\"/ja/4.2/intro/tutorial01/\"><span class=\"doc\">tutorial</span></a> を参照してください。</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が動作するかどうかを確認する方法の1つは、Djangoのテストスイートを実行することです。すべてのテストに合格していれば、あなたの変更が機能し、Django の他の部分を壊していないことを合理的に確認することができます。 Django のテストスイートを実行したことがない人は、事前に一度実行して出力に慣れておくと良いでしょう。</p>\n<p>テストスイートを実行するする前に <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span> <span class=\"pre\">tests</span></code> コマンドを使って Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></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>python<span class=\"w\"> </span>-m<span class=\"w\"> </span>pip<span class=\"w\"> </span>install<span class=\"w\"> </span>-r<span class=\"w\"> </span>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> py -m 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\"><span class=\"pre\">E</span></code> はテストにエラーが発生したことを表し、 <code class=\"docutils literal notranslate\"><span class=\"pre\">F</span></code> はテストのアサーションが失敗したことを表しています。これらは共にテスト失敗となります。<code class=\"docutils literal notranslate\"><span class=\"pre\">x</span></code> と <code class=\"docutils literal notranslate\"><span class=\"pre\">s</span></code> はそれぞれ期待する失敗とスキップを表しています。ドットはテストの成功を表しています。</p>\n<p>スキップされたテストは、テストを実行するために必要な外部ライブラリがインストールされていないことが原因です; 依存については <a class=\"reference internal\" href=\"/ja/4.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/4.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/4.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 の main ブランチは常に安定しているとは限りません。 main バージョンで開発を行う場合、 <a class=\"reference external\" href=\"https://djangoci.com\">Django の継続インテグレーションビルド</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/4.2/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">他のデータベースでテストを実行する</span></a> を参照してください。 UIを変更する場合は、 <a class=\"reference internal\" href=\"/ja/4.2/internals/contributing/writing-code/unit-tests/#running-selenium-tests\"><span class=\"std std-ref\">Seleniumのテストを実行する</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\">\n<p class=\"admonition-title\">チケット #99999 -- トーストを焼くようにする</p>\n<p>Django は、<code class=\"docutils literal notranslate\"><span class=\"pre\">toast</span></code> を返す関数 <code class=\"docutils literal notranslate\"><span class=\"pre\">django.shortcuts.make_toast()</span></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<span class=\"w\"> </span>checkout<span class=\"w\"> </span>-b<span class=\"w\"> </span>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 class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Test-driven_development\">テスト駆動開発</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>このチケットを解決するために、 <code class=\"docutils literal notranslate\"><span class=\"pre\">make_toast()</span></code> 関数に <code class=\"docutils literal notranslate\"><span class=\"pre\">django.shortcuts</span></code> モジュールに追加します。まずはこの関数を使うためのテストを書いて、関数の出力が正しいことを確認しましょう。</p>\n<p>Djangoの <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/shortcuts/</span></code> フォルダへ移動して <code class=\"docutils literal notranslate\"><span class=\"pre\">test_make_toast.py</span></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=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.shortcuts</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">make_toast</span>\n<span class=\"kn\">from</span><span class=\"w\"> </span><span class=\"nn\">django.test</span><span class=\"w\"> </span><span class=\"kn\">import</span> <span class=\"n\">SimpleTestCase</span>\n\n\n<span class=\"k\">class</span><span class=\"w\"> </span><span class=\"nc\">MakeToastTests</span><span class=\"p\">(</span><span class=\"n\">SimpleTestCase</span><span class=\"p\">):</span>\n    <span class=\"k\">def</span><span class=\"w\"> </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><span class=\"n\">assertEqual</span><span class=\"p\">(</span><span class=\"n\">make_toast</span><span class=\"p\">(),</span> <span class=\"s2\">&quot;toast&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このテストは <code class=\"docutils literal notranslate\"><span class=\"pre\">make_toast()</span></code> が <code class=\"docutils literal notranslate\"><span class=\"pre\">toast</span></code> を返すかを確認します。</p>\n<aside class=\"admonition-but-this-testing-thing-looks-kinda-hard admonition\">\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/4.2/topics/testing/overview/\"><span class=\"doc\">テストを書いて実行する</span></a> のドキュメントに記載されています。</p></li>\n<li><p>Dive Into Python (Python初心者のための､オンラインの無料の本) には素晴らしい <a class=\"reference external\" href=\"https://diveinto.org/python3/unit-testing.html\">初めてのユニットテスト</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\"><span class=\"pre\">unittest</span></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>まだ <code class=\"docutils literal notranslate\"><span class=\"pre\">django.shortcuts</span></code> に変更を加えていないため、テストは失敗します。 <code class=\"docutils literal notranslate\"><span class=\"pre\">shortcuts</span></code> フォルダ内の全てのテストを実行して、どうなるか見てみましょう。 <code class=\"docutils literal notranslate\"><span class=\"pre\">cd</span></code> でDjangoの <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></code> ディレクトリへと移動してから実行してください。</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<span class=\"w\"> </span>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=\"pytb\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Pytb</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=\"Pytb code\"><code><span class=\"x\">ImportError: cannot import name &#39;make_toast&#39; from &#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>続いては <code class=\"docutils literal notranslate\"><span class=\"pre\">make_toast()</span></code> 関数を追加します。</p>\n<p><code class=\"docutils literal notranslate\"><span class=\"pre\">django/</span></code> フォルダに移動して <code class=\"docutils literal notranslate\"><span class=\"pre\">shortcuts.py</span></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=\"w\"> </span><span class=\"nf\">make_toast</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;toast&quot;</span>\n</code></pre></div>\n<p>さて、先ほど書いたテストが成功したことを確認する必要があるので、追加したコードが正しく機能しているかどうかを確認できます。もう一度、Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></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<span class=\"w\"> </span>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\"><span class=\"pre\">cd</span></code> で Django の <code class=\"docutils literal notranslate\"><span class=\"pre\">tests/</span></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\"><span class=\"pre\">docs/topics/http/shortcuts.txt</span></code> を開いて、このファイルの最終行に以下を加えます。</p>\n<div class=\"code-block\" data-language=\"rst\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Rst</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=\"Rst code\"><code><span class=\"gh\">``make_toast()``</span>\n<span class=\"gh\">================</span>\n\n<span class=\"p\">..</span> <span class=\"ow\">function</span><span class=\"p\">::</span> make_toast()\n\n<span class=\"p\">..</span> <span class=\"ow\">versionadded</span><span class=\"p\">::</span> 2.2\n\nReturns <span class=\"s\">``&#39;toast&#39;``</span>.\n</code></pre></div>\n<p>この新機能は将来のリリースとともに、Django 次期バージョンのリリースノートにも含まれます。ファイル <code class=\"docutils literal notranslate\"><span class=\"pre\">docs/releases/</span></code> の最新バージョン、このページの執筆時点では <code class=\"docutils literal notranslate\"><span class=\"pre\">2.2.txt</span></code> のリリースノートを開き、&quot;Minor Feature&quot; ヘッダの下にノートを追記してください。</p>\n<div class=\"code-block\" data-language=\"rst\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Rst</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=\"Rst code\"><code><span class=\"gh\">:mod:`django.shortcuts`</span>\n<span class=\"gh\">~~~~~~~~~~~~~~~~~~~~~~~</span>\n\n<span class=\"m\">*</span> The new <span class=\"na\">:func:</span><span class=\"nv\">`django.shortcuts.make_toast`</span> function returns <span class=\"s\">``&#39;toast&#39;``</span>.\n</code></pre></div>\n<p>ドキュメントの書き方についてもっと知りたい場合は <a class=\"reference internal\" href=\"/ja/4.2/internals/contributing/writing-documentation/\"><span class=\"doc\">Writing documentation</span></a> を参照してください｡ここでは､ <code class=\"docutils literal notranslate\"><span class=\"pre\">versionadded</span></code> の書き方についてや､ ドキュメントのコピーをローカルでビルドしてみて､ 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<span class=\"w\"> </span>add<span class=\"w\"> </span>--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<span class=\"w\"> </span>diff<span class=\"w\"> </span>--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<span class=\"w\"> </span>    # Finally, fall back and assume it&#39;s a URL\n<span class=\"w\"> </span>    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<span class=\"w\"> </span>Minor features\n<span class=\"w\"> </span>--------------\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<span class=\"w\"> </span>:mod:`django.contrib.admin`\n<span class=\"w\"> </span>~~~~~~~~~~~~~~~~~~~~~~~~~~~\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<span class=\"w\"> </span>        my_objects = list(MyModel.objects.filter(published=True))\n<span class=\"w\"> </span>        if not my_objects:\n<span class=\"w\"> </span>            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\"><span class=\"pre\">q</span></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<span class=\"w\"> </span>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/4.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<span class=\"w\"> </span>push<span class=\"w\"> </span>origin<span class=\"w\"> </span>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/4.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/4.2/internals/contributing/writing-code/submitting-patches/\">チケットをクレームして､パッチを送信する</a> を読んでください｡ Trac でのエチケットやチケットをクレームする方法やパッチに適切なコーディングスタイルなど､重要なことを網羅できます｡</p></li>\n<li><p>Django への初めての貢献者は <a class=\"reference internal\" href=\"/ja/4.2/internals/contributing/new-contributors/\"><span class=\"doc\">初めての貢献者へのドキュメント</span></a> を読んでください｡Django に初めて協力する人たちへの良いアドバイスがあります｡</p></li>\n<li><p>貢献について､より多くの情報を知りたいなら､ <a class=\"reference internal\" href=\"/ja/4.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 class=\"reference external\" href=\"https://code.djangoproject.com/query?status=new&amp;status=reopened&amp;has_patch=0&amp;easy=1&amp;col=id&amp;col=summary&amp;col=status&amp;col=owner&amp;col=type&amp;col=milestone&amp;order=priority\">パッチが必要な簡単なチケット</a> か <a class=\"reference external\" href=\"https://code.djangoproject.com/query?status=new&amp;status=reopened&amp;needs_better_patch=1&amp;easy=1&amp;col=id&amp;col=summary&amp;col=status&amp;col=owner&amp;col=type&amp;col=milestone&amp;order=priority\">パッチに改善が必要な簡単なチケット</a> を見つけましょう。テストを書きなれているなら <a class=\"reference external\" href=\"https://code.djangoproject.com/query?status=new&amp;status=reopened&amp;needs_tests=1&amp;easy=1&amp;col=id&amp;col=summary&amp;col=status&amp;col=owner&amp;col=type&amp;col=milestone&amp;order=priority\">テストが必要な簡単なチケット</a> でもよいでしょう。ただ、チケットのクレームに関するガイドラインに従うことを忘れないでください。 Django ドキュメントの <a class=\"reference internal\" href=\"/ja/4.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/4.2/internals/contributing/triaging-tickets/\"><span class=\"doc\">チケットをトリアージする</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":"ローカルに複製した 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/4.2/intro/"}],"prev":{"docname":"intro/whatsnext","title":"次のステップへ","url":"/ja/4.2/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Django を使う","url":"/ja/4.2/topics/"},"formats":{"html":"/ja/4.2/intro/contributing/","markdown":"/ja/4.2/intro/contributing.md","json":"/ja/4.2/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/4.2.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/ja/4.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","it","pt-br","ko","es","el","pl"]}