{"title":"Writing your first contribution for Django","version":"5.0","locale":"ja","docname":"intro/contributing","url":"/ja/5.0/intro/contributing/","canonical":"https://djangodocs.dev/ja/5.0/intro/contributing/","summary":"はじめに Link to this heading # 小さなものでも、コミュニティへ恩返しすることに興味がありますか？ たとえば、Django に直してほしいバグを見つけたり、ちょっとした機能を追加してほしいと思っているかもしれません。 その願いを叶える一番の方法は Django…","html":"<h1>Writing your first contribution for Django<a class=\"heading-anchor\" href=\"#writing-your-first-contribution-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/5.0/internals/contributing/writing-code/\"><span class=\"doc\">Writing code</span></a> ドキュメントを参照してください。</p>\n</aside>\n<p>このチュートリアルでは、少なくとも Django がどのように動作するかについて基本的な理解を持っていることを期待します。つまり、 <a class=\"reference internal\" href=\"/ja/5.0/intro/tutorial01/\"><span class=\"doc\">はじめての Django アプリ作成</span></a> にある既存のチュートリアルを一通り読んで慣れている必要があります。加えて、Python 自体をよく理解している必要があります。しかし、もしそうでなければ、 <a class=\"reference external\" href=\"https://diveintopython3.net/\">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/5.0/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>We'll be walking you through contributing to Django for the first time.\nBy the end of this tutorial, you should have a basic understanding of both the\ntools and the processes involved. Specifically, we'll be covering the following:</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>Writing a test for your changes.</p></li>\n<li><p>Writing the code for your changes.</p></li>\n<li><p>Testing your changes.</p></li>\n<li><p>プルリクエストを送る</p></li>\n<li><p>より多くの情報を得る方法</p></li>\n</ul>\n<p>チュートリアルを終えたら、次は <a class=\"reference internal\" href=\"/ja/5.0/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 をサポートしません。<a class=\"reference external\" href=\"https://www.python.org/downloads/\">Python のダウンロードページ</a> や 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/5.0/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 へ貢献を行う上では、Django コミュニティをオープンで誰にでも開かれたものに保つよう心がけてください。 <a class=\"reference external\" href=\"https://www.djangoproject.com/conduct/\">行動規範</a> をよく読み、それに従ってください。</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>For this tutorial, you'll need Git installed to download the current\ndevelopment version of Django and to generate a branch for the changes you\nmake.</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>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 contribution.</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>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 contribution, especially if testing\nany changes to the UI.</p>\n<p>Djangoプロジェクトの作り方については、 <a class=\"reference internal\" href=\"/ja/5.0/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/5.0/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/5.0/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/5.0/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/5.0/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">他のデータベースでテストを実行する</span></a> を参照してください。 UIを変更する場合は、 <a class=\"reference internal\" href=\"/ja/5.0/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\">\n<h2>Creating a branch<a class=\"heading-anchor\" href=\"#creating-a-branch\"><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>In most cases, for a contribution to be accepted into Django it has to include\ntests. For bug fix contributions, this means writing a regression test to\nensure that  the bug is never reintroduced into Django later on. A regression\ntest should be written in such a way that it will fail while the bug still\nexists and pass once the bug has been fixed. For contributions containing new\nfeatures, you'll need to include tests which ensure that the new features are\nworking correctly. They too should fail when the new feature is not present,\nand then pass once it has been implemented.</p>\n<p>A good way to do this is to write your new tests first, before making any\nchanges to the code. This style of development is called\n<a class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Test-driven_development\">test-driven development</a> and can be applied to both entire projects and\nsingle changes. After writing your tests, you then run them to make sure that\nthey do indeed fail (since you haven't fixed that bug or added that feature\nyet). If your new tests don't fail, you'll need to fix them so that they do.\nAfter all, a regression test that passes regardless of whether a bug is present\nis not very helpful at preventing that bug from reoccurring down the road.</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/5.0/topics/testing/overview/\"><span class=\"doc\">テストを書いて実行する</span></a> のドキュメントに記載されています。</p></li>\n<li><p>Dive Into Python (Python初心者のための､オンラインの無料の本) には素晴らしい <a class=\"reference external\" href=\"https://diveintopython3.net/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>Once you've verified that your changes and test are working correctly, it's\na good idea to run the entire Django test suite to verify that your change\nhasn't introduced any bugs into other areas of Django. While successfully\npassing the entire test suite doesn't guarantee your code is bug free, it does\nhelp identify many bugs and regressions that might otherwise go unnoticed.</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/5.0/internals/contributing/writing-documentation/\"><span class=\"doc\">ドキュメントを書く</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>Now it's time to review the changes made in the branch. To stage all the\nchanges ready for commit, run:</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>When you're done previewing the changes, hit the <code class=\"docutils literal notranslate\"><span class=\"pre\">q</span></code> key to return to the\ncommand line. If the diff looked okay, it's time to commit the changes.</p>\n</section>\n<section id=\"committing-the-changes\">\n<h2>Committing the changes<a class=\"heading-anchor\" href=\"#committing-the-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-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/5.0/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>After committing the changes, send it to your fork on GitHub (substitute\n&quot;ticket_99999&quot; with the name of your branch if it's different):</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>Please don't do it for this tutorial, but on the next page that displays a\npreview of the changes, you would click &quot;Create pull request&quot;.</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/5.0/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>Before you get too into contributing to Django, there's a little more\ninformation on contributing that you should probably take a look at:</p>\n<ul class=\"simple\">\n<li><p>You should make sure to read Django's documentation on\n<a class=\"reference internal\" href=\"/ja/5.0/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">claiming tickets and submitting pull requests</span></a>.\nIt covers Trac etiquette, how to claim tickets for yourself, expected\ncoding style (both for code and docs), and many other important details.</p></li>\n<li><p>Django への初めてのコントリビューターは <a class=\"reference internal\" href=\"/ja/5.0/internals/contributing/new-contributors/\"><span class=\"doc\">初めてのコントリビューターへのドキュメント</span></a> を読んでください｡Django に初めて協力する人たちへの良いアドバイスがあります｡</p></li>\n<li><p>貢献について､より多くの情報を知りたいなら､ <a class=\"reference internal\" href=\"/ja/5.0/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>Once you've looked through some of that information, you'll be ready to go out\nand find a ticket of your own to contribute to. Pay special attention to\ntickets with the &quot;easy pickings&quot; criterion. These tickets are often much\nsimpler in nature and are great for first time contributors. Once you're\nfamiliar with contributing to Django, you can start working on more difficult\nand complicated tickets.</p>\n<p>If you just want to get started already (and nobody would blame you!), try\ntaking a look at the list of <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\">easy tickets without a branch</a> and the\n<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\">easy tickets that have branches which need improvement</a>. If you're familiar\nwith writing tests, you can also look at the list of\n<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\">easy tickets that need tests</a>. Remember to follow the guidelines about\nclaiming tickets that were mentioned in the link to Django's documentation on\n<a class=\"reference internal\" href=\"/ja/5.0/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">claiming tickets and submitting branches</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>After a ticket has a branch, it needs to be reviewed by a second set of eyes.\nAfter submitting a pull request, update the ticket metadata by setting the\nflags on the ticket to say &quot;has patch&quot;, &quot;doesn't need tests&quot;, etc, so others\ncan find it for review. Contributing doesn't necessarily always mean writing\ncode from scratch. Reviewing open pull requests is also a very helpful\ncontribution. See <a class=\"reference internal\" href=\"/ja/5.0/internals/contributing/triaging-tickets/\"><span class=\"doc\">チケットをトリアージする</span></a> for details.</p>\n</section>\n</section>","rootId":"writing-your-first-contribution-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":"Creating a branch","anchor":"creating-a-branch","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":"Committing the changes","anchor":"committing-the-changes","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/5.0/intro/"}],"prev":{"docname":"intro/whatsnext","title":"次のステップへ","url":"/ja/5.0/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Django を使う","url":"/ja/5.0/topics/"},"formats":{"html":"/ja/5.0/intro/contributing/","markdown":"/ja/5.0/intro/contributing.md","json":"/ja/5.0/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/5.0.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/ja/5.0/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"]}