{"title":"Djangoにはじめて貢献する","version":"6.1","locale":"ja","docname":"intro/contributing","url":"/ja/6.1/intro/contributing/","canonical":"https://djangodocs.dev/ja/6.1/intro/contributing/","summary":"コミュニティに少し貢献してみませんか？たとえばあなたは、Django のバグを見つけて修正してほしいと思っていたり、ちょっとした機能を追加したいと考えているかもしれ…","html":"<h1>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 のバグを見つけて修正してほしいと思っていたり、ちょっとした機能を追加したいと考えているかもしれません（ただし、新機能の提案は <a class=\"reference internal\" href=\"/ja/6.1/internals/contributing/bugs-and-features/#requesting-features\"><span class=\"std std-ref\">新機能の提案方法</span></a> に従ってくださいね）。</p>\n<p>その願いを叶える一番の方法は Django 自体にコントリビュートすることです。最初はすごく大変なことだと想像するかもしれませんが、あなたを助けてくれるドキュメント、ツール、コミュニティとともに多くの人が通る道でもあります。これからコントリビュートのプロセス全体を順番に詳しく解説していくので、例を通して理解できると思います。</p>\n<section id=\"who-s-this-tutorial-for\">\n<h3>このチュートリアルの対象者は誰ですか？<a class=\"heading-anchor\" href=\"#who-s-this-tutorial-for\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<aside class=\"admonition admonition-seealso\" role=\"note\">\n<p class=\"admonition-title\">参考</p>\n<p>パッチを書く方法の細かい参照文献を探しているなら <a class=\"reference internal\" href=\"/ja/6.1/internals/contributing/writing-code/\"><span class=\"doc\">Contributing code</span></a> ドキュメントを参照してください。</p>\n</aside>\n<p>このチュートリアルでは、少なくとも Django がどのように動作するかについて基本的な理解を持っていることを期待します。つまり、 <a class=\"reference internal\" href=\"/ja/6.1/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\" role=\"note\">\n<p class=\"admonition-title\">困ったときは:</p>\n<p>このチュートリアルを進める中で問題が生じた場合は、 <a class=\"reference external\" href=\"https://forum.djangoproject.com/\">Django Forum</a> にメッセージを投稿するか、 <a class=\"reference external\" href=\"https://chat.djangoproject.com\">Django Discord server</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>Once you're done with the tutorial, you can look through the rest of\n<a class=\"reference internal\" href=\"/ja/6.1/internals/contributing/\"><span class=\"doc\">Django's documentation on contributing</span></a>.\nIt contains lots of great information and is a must-read for anyone who'd like\nto become a regular contributor to Django. If you've got questions, it's\nprobably got the answers.</p>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">Windows を使用している方へ</p>\n<p>Windowsのドキュメントの <a class=\"reference internal\" href=\"/ja/6.1/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>このチュートリアルでは、Djangoの現在の開発バージョンをダウンロードし、変更内容に対応するブランチを作成するために、Git をインストールしておく必要があります。</p>\n<p>Git がインストールされているかどうかを確認するために、コマンドラインで <code class=\"docutils literal notranslate\">git</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\">git help</code> と入力するとコマンドの使い方を確認できます。</p>\n</section>\n<section id=\"getting-a-copy-of-django-s-development-version\">\n<h2>Django 開発版の複製を取得<a class=\"heading-anchor\" href=\"#getting-a-copy-of-django-s-development-version\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>Django へ貢献するためのはじめの一歩は、ソースコードのコピーです。まず、 <a class=\"reference external\" href=\"https://github.com/django/django/fork\">GitHub で Django をフォーク</a> して、コマンドラインからリポジトリのクローンを作り、 <code class=\"docutils literal notranslate\">cd</code> コマンドで Django のローカルコピーのディレクトリに移動しましょう。</p>\n<p>以下のコマンドで Django のソースコードリポジトリをダウンロードします:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-0-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git clone https://github.com/YourGitHubName/django.git\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-0-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git clone https://github.com/YourGitHubName/django.git\n</code></pre></div></div></div>\n<aside class=\"admonition-low-bandwidth-connection admonition\" role=\"note\">\n<p class=\"admonition-title\">低帯域の回線をご利用ですか？</p>\n<p>You can add the <code class=\"docutils literal notranslate\">--depth 1</code> argument to <code class=\"docutils literal notranslate\">git clone</code> to skip downloading\nall of Django's commit history, which reduces data transfer from ~250 MB\nto ~70 MB.</p>\n</aside>\n<p>Django のローカルコピーがあるので、 <code class=\"docutils literal notranslate\">pip</code> を使ってパッケージをインストールするのと同じようにインストールすることができます。そのための最も便利な方法は、Python に組み込まれている機能である <em>仮想環境</em> を使用することです。これにより、相互に干渉しないようにプロジェクトごとにインストールされたパッケージの別々のディレクトリを保つことができます。</p>\n<p>例えばホームディレクトリ下の <code class=\"docutils literal notranslate\">.virtualenvs/</code> にすべての仮想環境を置くことが出来ます。</p>\n<p id=\"intro-contributing-install-local-copy\">次のコマンドで、新しい仮想環境を作成します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-1-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>python3 -m venv ~/.virtualenvs/djangodev\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-1-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m venv <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\n</code></pre></div></div></div>\n<p>新しい環境があるパスはコンピュータに保存されました。</p>\n<p>最後のステップとして仮想環境を有効化します：</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span><span class=\"nb\">source</span> ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>もし <code class=\"docutils literal notranslate\">source</code> コマンドが使えない場合、代わりに <code class=\"docutils literal notranslate\">.</code> を試してみてください:</p>\n<div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>. ~/.virtualenvs/djangodev/bin/activate\n</code></pre></div>\n<p>新しいターミナルウィンドウを開くたびに仮想環境を有効にする必要があります。</p>\n<aside class=\"admonition-for-windows-users admonition\" role=\"note\">\n<p class=\"admonition-title\">Windows を使用している方へ</p>\n<p>実行してWindowsでの仮想環境を有効化します：</p>\n<div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows code\"><code><span class=\"gp\">...\\&gt;</span> <span class=\"nv\">%HOMEPATH%</span>\\.virtualenvs\\djangodev\\Scripts\\activate.bat\n</code></pre></div>\n</aside>\n<p>その時点で有効な仮想環境の名前がコマンドライン上に表示されます。これによってどの仮想環境を利用しているのかが分かります。仮想環境のもとで <code class=\"docutils literal notranslate\">pip</code> によるインストールを行うと、表示されている仮想環境内にインストールされます。他の仮想環境やパッケージインストールによるシステムとは区別されます。</p>\n<p>先に進んで、以前にクローンした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 -m pip install -e /path/to/your/local/clone/django/\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-2-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -e \\path\\to\\your\\local\\clone\\django\\\n</code></pre></div></div></div>\n<p>インストールされる Django のバージョンは、編集可能モードでローカルコピーを指すようになりました。これにより、あなたが加えた変更は即座に反映されるため、最初のコントリビューションをテストする際に大いに役立ちます。</p>\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\">cd tests</code> コマンドを使って Django の <code class=\"docutils literal notranslate\">tests/</code> ディレクトリに移動し、次を実行してテストの依存関係をインストールします:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-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 -m pip install -r requirements/py3.txt\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-3-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> py -m pip install -r requirements\\py3.txt\n</code></pre></div></div></div>\n<p>もしこのインストールの間にエラーが発生した場合は、システムが Python のうちの 1 つ以上の依存パッケージが見つからない可能性があります。失敗したパッケージのドキュメントを調べるか、発生したエラーメッセージをウェブで検索してください。</p>\n<p>これでテストスイートを実行する準備が整いました:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-4-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-4-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n<p>さあ、座ってリラックスしてください。Django のテストスイート全体には何千ものテストがあり、コンピュータの速度にもよりますが、実行には少なくとも数分かかります。</p>\n<p>Django のテストスイートを実行中に、各テストの完了時のステータスを表す一連の文字が表示されます。 <code class=\"docutils literal notranslate\">E</code> はテストにエラーが発生したことを表し、 <code class=\"docutils literal notranslate\">F</code> はテストのアサーションが失敗したことを表しています。これらは共にテスト失敗となります。<code class=\"docutils literal notranslate\">x</code> と <code class=\"docutils literal notranslate\">s</code> はそれぞれ期待する失敗とスキップを表しています。ドットはテストの成功を表しています。</p>\n<p>スキップされたテストは、テストを実行するために必要な外部ライブラリがインストールされていないことが原因です; 依存については <a class=\"reference internal\" href=\"/ja/6.1/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/6.1/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/6.1/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/6.1/internals/contributing/writing-code/unit-tests/#running-unit-tests-settings\"><span class=\"std std-ref\">他のデータベースでテストを実行する</span></a> を参照してください。 UIを変更する場合は、 <a class=\"reference internal\" href=\"/ja/6.1/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-an-approved-new-feature\">\n<h2>承認済みの新機能に取りかかる<a class=\"heading-anchor\" href=\"#working-on-an-approved-new-feature\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>このチュートリアルでは、ケーススタディとして「架空の承認済みチケット」に取り組みます。以下はその架空の詳細です。</p>\n<aside class=\"admonition-ticket-99999-allow-making-toast admonition\" role=\"note\">\n<p class=\"admonition-title\">チケット #99999 -- トーストを焼くようにする</p>\n<p>Django は、<code class=\"docutils literal notranslate\">toast</code> を返す関数 <code class=\"docutils literal notranslate\">django.shortcuts.make_toast()</code> を提供しなければなりません。</p>\n</aside>\n<p>これよりこの機能と関連するテストを実装します。</p>\n</section>\n<section id=\"creating-a-branch\">\n<h2>ブランチを作る<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 checkout -b ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-5-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git checkout -b ticket_99999\n</code></pre></div></div></div>\n<p>ブランチ名は好きな名前で構いません。&quot;ticket_99999&quot; は一例です。新しいブランチ内で行ったすべての変更は、先ほどクローンしたコードのマスターコピーには影響しません。</p>\n</section>\n<section id=\"writing-some-tests-for-your-ticket\">\n<h2>チケットにテストを書く<a class=\"heading-anchor\" href=\"#writing-some-tests-for-your-ticket\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>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 class=\"reference external\" href=\"https://en.wikipedia.org/wiki/Test-driven_development\">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\">make_toast()</code> 関数に <code class=\"docutils literal notranslate\">django.shortcuts</code> モジュールに追加します。まずはこの関数を使うためのテストを書いて、関数の出力が正しいことを確認しましょう。</p>\n<p>Djangoの <code class=\"docutils literal notranslate\">tests/shortcuts/</code> フォルダへ移動して <code class=\"docutils literal notranslate\">test_make_toast.py</code> というファイルを新たに作ります。以下のコードを追加してください。</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"kn\">from</span> <span class=\"nn\">django.shortcuts</span> <span class=\"kn\">import</span> make_toast\n<span class=\"kn\">from</span> <span class=\"nn\">django.test</span> <span class=\"kn\">import</span> SimpleTestCase\n\n\n<span class=\"k\">class</span> <span class=\"nc\">MakeToastTests</span><span class=\"p\">(</span>SimpleTestCase<span class=\"p\">):</span>\n    <span class=\"k\">def</span> <span class=\"nf\">test_make_toast</span><span class=\"p\">(</span><span class=\"bp\">self</span><span class=\"p\">):</span>\n        <span class=\"bp\">self</span><span class=\"o\">.</span>assertEqual<span class=\"p\">(</span>make_toast<span class=\"p\">(),</span> <span class=\"s2\">&quot;toast&quot;</span><span class=\"p\">)</span>\n</code></pre></div>\n<p>このテストは <code class=\"docutils literal notranslate\">make_toast()</code> が <code class=\"docutils literal notranslate\">toast</code> を返すかを確認します。</p>\n<aside class=\"admonition-but-this-testing-thing-looks-kinda-hard admonition\" role=\"note\">\n<p class=\"admonition-title\">でもテストをするのはすこし難しそうです……</p>\n<p>テストを書いたことがない場合は、最初は難しく見えるかもしれません。ですが実は、テストすることはプログラミングにおいて <em>とても</em> 重要なことです。ここではテストについて詳細に紹介します。</p>\n<ul class=\"simple\">\n<li><p>Django のための良いテストの書き方は <a class=\"reference internal\" href=\"/ja/6.1/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\">unittest</code></a> のドキュメントを参照してください｡</p></li>\n</ul>\n</aside>\n</section>\n<section id=\"running-your-new-test\">\n<h3>新しいテストを走らせる<a class=\"heading-anchor\" href=\"#running-your-new-test\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h3>\n<p>まだ <code class=\"docutils literal notranslate\">django.shortcuts</code> に変更を加えていないため、テストは失敗します。 <code class=\"docutils literal notranslate\">shortcuts</code> フォルダ内の全てのテストを実行して、どうなるか見てみましょう。 <code class=\"docutils literal notranslate\">cd</code> でDjangoの <code class=\"docutils literal notranslate\">tests/</code> ディレクトリへと移動してから実行してください。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-6-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-6-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>テストが正しく実行されれば追加したテストメソッドに対して、こちらのエラーとともに１つテストが失敗しているはずです。</p>\n<div class=\"code-block\" data-language=\"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\">make_toast()</code> 関数を追加します。</p>\n<p><code class=\"docutils literal notranslate\">django/</code> フォルダに移動して <code class=\"docutils literal notranslate\">shortcuts.py</code> ファイルを開きます。最下行に以下を追加します:</p>\n<div class=\"code-block\" data-language=\"default\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Code</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Code code\"><code><span class=\"k\">def</span> <span class=\"nf\">make_toast</span><span class=\"p\">():</span>\n    <span class=\"k\">return</span> <span class=\"s2\">&quot;toast&quot;</span>\n</code></pre></div>\n<p>さて、先ほど書いたテストが成功したことを確認する必要があるので、追加したコードが正しく機能しているかどうかを確認できます。もう一度、Django の <code class=\"docutils literal notranslate\">tests/</code> ディレクトリに移動して以下を実行します:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-7-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py shortcuts\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-7-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py shortcuts\n</code></pre></div></div></div>\n<p>テストはすべて成功するはずです。失敗した場合は、正しいファイルに対して正しく関数を追加しているかどうかを確認してください。</p>\n</section>\n<section id=\"running-django-s-test-suite-for-the-second-time\">\n<h2>Django の テストスイートをもう一度走らせる<a class=\"heading-anchor\" href=\"#running-django-s-test-suite-for-the-second-time\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>変更内容とテストが正しく動作していることを確認したら、Django全体のテストスイートを実行するのがおすすめです。これにより、あなたの変更がDjangoの他の部分にバグを引き起こしていないことを確認できます。テストスイートをすべて成功させることがコードの完全なバグ修正を保証するわけではありませんが、多くのバグや見逃されがちなリグレッションを特定するのに役立ちます。</p>\n<p>Django の全てのテストスイートを走らせるには <code class=\"docutils literal notranslate\">cd</code> で Django の <code class=\"docutils literal notranslate\">tests/</code> ディレクトリ移動して実行してください:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-8-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>./runtests.py\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-8-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> runtests.py \n</code></pre></div></div></div>\n</section>\n<section id=\"writing-documentation\">\n<h2>ドキュメントを書く<a class=\"heading-anchor\" href=\"#writing-documentation\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>これは新たな機能です。したがってドキュメントを作る必要があります。ファイル <code class=\"docutils literal notranslate\">docs/topics/http/shortcuts.txt</code> を開いて、このファイルの最終行に以下を加えます。</p>\n<div class=\"code-block\" data-language=\"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> 6.2\n\nReturns <span class=\"s\">``&#39;toast&#39;``</span>.\n</code></pre></div>\n<p>Since this new feature will be in an upcoming release it is also added to the\nrelease notes for the next version of Django. Open the release notes for the\nlatest version in <code class=\"docutils literal notranslate\">docs/releases/</code>, which at time of writing is <code class=\"docutils literal notranslate\">6.2.txt</code>.\nAdd a note under the &quot;Minor Features&quot; header:</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/6.1/internals/contributing/writing-documentation/\"><span class=\"doc\">ドキュメントを書く</span></a> を参照してください｡ここでは､ <code class=\"docutils literal notranslate\">versionadded</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 add --all\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-9-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git add --all\n</code></pre></div></div></div>\n<p>上により Django のカレントコピー (修正内容を含む) と、チュートリアル冒頭において行っていたチェックアウトリビジョンとの違いが表示されます。</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-10-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git diff --cached\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-10-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git diff --cached\n</code></pre></div></div></div>\n<p>ページを進めるには上下キーを使います。</p>\n<div class=\"code-block\" data-language=\"diff\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Diff</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Diff code\"><code><span class=\"gh\">diff --git a/django/shortcuts.py b/django/shortcuts.py</span>\n<span class=\"gh\">index 7ab1df0e9d..8dde9e28d9 100644</span>\n<span class=\"gd\">--- a/django/shortcuts.py</span>\n<span class=\"gi\">+++ b/django/shortcuts.py</span>\n<span class=\"gu\">@@ -156,3 +156,7 @@ def resolve_url(to, *args, **kwargs):</span>\n\n     # Finally, fall back and assume it&#39;s a URL\n     return to\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+def make_toast():</span>\n<span class=\"gi\">+    return &#39;toast&#39;</span>\n<span class=\"gh\">diff --git a/docs/releases/6.2.txt b/docs/releases/6.2.txt</span>\n<span class=\"gh\">index 7d85d30c4a..81518187b3 100644</span>\n<span class=\"gd\">--- a/docs/releases/6.2.txt</span>\n<span class=\"gi\">+++ b/docs/releases/6.2.txt</span>\n<span class=\"gu\">@@ -34,6 +34,11 @@</span>\n Minor features\n --------------\n\n<span class=\"gi\">+:mod:`django.shortcuts`</span>\n<span class=\"gi\">+~~~~~~~~~~~~~~~~~~~~~~~</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+* The new :func:`django.shortcuts.make_toast` function returns ``&#39;toast&#39;``.</span>\n<span class=\"gi\">+</span>\n :mod:`django.contrib.admin`\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n<span class=\"gh\">diff --git a/docs/topics/http/shortcuts.txt b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gh\">index 7b3a3a2c00..711bf6bb6d 100644</span>\n<span class=\"gd\">--- a/docs/topics/http/shortcuts.txt</span>\n<span class=\"gi\">+++ b/docs/topics/http/shortcuts.txt</span>\n<span class=\"gu\">@@ -271,3 +271,12 @@ This example is equivalent to::</span>\n         my_objects = list(MyModel.objects.filter(published=True))\n         if not my_objects:\n             raise Http404(&quot;No MyModel matches the given query.&quot;)\n<span class=\"gi\">+</span>\n<span class=\"gi\">+``make_toast()``</span>\n<span class=\"gi\">+================</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. function:: make_toast()</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+.. versionadded:: 6.2</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+Returns ``&#39;toast&#39;``.</span>\n<span class=\"gh\">diff --git a/tests/shortcuts/test_make_toast.py b/tests/shortcuts/test_make_toast.py</span>\nnew file mode 100644\n<span class=\"gh\">index 0000000000..6f4c627b6e</span>\n<span class=\"gd\">--- /dev/null</span>\n<span class=\"gi\">+++ b/tests/shortcuts/test_make_toast.py</span>\n<span class=\"gu\">@@ -0,0 +1,7 @@</span>\n<span class=\"gi\">+from django.shortcuts import make_toast</span>\n<span class=\"gi\">+from django.test import SimpleTestCase</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+</span>\n<span class=\"gi\">+class MakeToastTests(SimpleTestCase):</span>\n<span class=\"gi\">+    def test_make_toast(self):</span>\n<span class=\"gi\">+        self.assertEqual(make_toast(), &#39;toast&#39;)</span>\n</code></pre></div>\n<p>変更内容のプレビューが終わったら、<code class=\"docutils literal notranslate\">q</code> キーを押してコマンドラインに戻ります。差分が問題なさそうであれば、変更をコミットする準備が整いました。</p>\n</section>\n<section id=\"committing-the-changes\">\n<h2>変更をコミットする<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 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/6.1/internals/contributing/committing-code/#committing-guidelines\"><span class=\"std std-ref\">コミットメッセージガイドライン</span></a> に従って、次のようにメッセージを入力します。</p>\n<div class=\"code-block\" data-language=\"text\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Text</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Text code\"><code>Fixed #99999 -- Added a shortcut function to make toast.\n</code></pre></div>\n</section>\n<section id=\"pushing-the-commit-and-making-a-pull-request\">\n<h2>コミットのプッシュとプルリクエストの作成<a class=\"heading-anchor\" href=\"#pushing-the-commit-and-making-a-pull-request\"><span class=\"visually-hidden\">Link to this heading</span><span aria-hidden=\"true\">#</span></a></h2>\n<p>変更をコミットした後、それをGitHubのフォークに送信します（ブランチ名が異なる場合は、&quot;ticket_99999&quot; をその名前に置き換えてください）:</p>\n<div class=\"console\" data-console><div class=\"console-panel\" data-platform=\"unix\"><p class=\"console-label\" id=\"console-12-unix-label\">Linux / macOS</p><div class=\"code-block\" data-language=\"console\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Shell</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Shell code\"><code><span class=\"gp\">$ </span>git push origin ticket_99999\n</code></pre></div>\n</div><div class=\"console-panel\" data-platform=\"windows\"><p class=\"console-label\" id=\"console-12-windows-label\">Windows</p><div class=\"code-block\" data-language=\"doscon\"><div class=\"code-block-toolbar\"><span class=\"code-block-language\">Windows</span><button type=\"button\" class=\"copy-button\" data-copy hidden><span class=\"copy-button-label\">Copy</span></button></div><pre role=\"group\" tabindex=\"0\" aria-label=\"Windows shell\"><code><span class=\"gp\">...\\&gt;</span> git push origin ticket_99999\n</code></pre></div></div></div>\n<p>プルリクエストは <a class=\"reference external\" href=\"https://github.com/django/django/\">Django の GitHub ページ</a> から作成できます。&quot;Your recently pushed branches&quot; の下にあなたのブランチが表示されているはずです。その下の &quot;Compare &amp; pull request&quot; ボタンをクリックします。</p>\n<p>このチュートリアルでは実行してはいけませんが、次のページで変更のプレビューが表示されたら、「Create pull request」ボタンをクリックします。</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/6.1/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 internal\" href=\"/ja/6.1/internals/contributing/writing-code/submitting-patches/\"><span class=\"doc\">チケットの取得とプルリクエストの送信</span></a> に関するドキュメントを必ず読んでください。このドキュメントでは、Tracのエチケット、チケットの取得方法、コードとドキュメントのコーディングスタイルの期待事項、その他の重要な詳細について説明しています。</p></li>\n<li><p>Django への初めてのコントリビューターは <a class=\"reference internal\" href=\"/ja/6.1/internals/contributing/new-contributors/\"><span class=\"doc\">初めてのコントリビューターへのドキュメント</span></a> を読んでください｡Django に初めて協力する人たちへの良いアドバイスがあります｡</p></li>\n<li><p>貢献について､より多くの情報を知りたいなら､ <a class=\"reference internal\" href=\"/ja/6.1/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>これらの情報に目を通したら、自分で取り組むチケットを見つける準備が整います。「easy pickings」のラベルが付いたチケットに特に注目してください。これらのチケットは、内容が比較的簡単で、初めてのコントリビューションに最適です。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\">easy tickets without a branch</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\">easy tickets that have branches which need improvement</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\">easy tickets that need tests</a> のリストも参考にするとよいでしょう。チケットを取得する際は、<a class=\"reference internal\" href=\"/ja/6.1/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/6.1/internals/contributing/triaging-tickets/\"><span class=\"doc\">チケットをトリアージする</span></a> を参照してください。</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":"running-django-s-test-suite-for-the-first-time","children":[]},{"title":"承認済みの新機能に取りかかる","anchor":"working-on-an-approved-new-feature","children":[]},{"title":"ブランチを作る","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":"変更をコミットする","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/6.1/intro/"}],"prev":{"docname":"intro/whatsnext","title":"次のステップへ","url":"/ja/6.1/intro/whatsnext/"},"next":{"docname":"topics/index","title":"Django を使う","url":"/ja/6.1/topics/"},"formats":{"html":"/ja/6.1/intro/contributing/","markdown":"/ja/6.1/intro/contributing.md","json":"/ja/6.1/intro/contributing.json"},"source":"https://github.com/django/django/blob/stable/6.1.x/docs/intro/contributing.txt","official":"https://docs.djangoproject.com/ja/6.1/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","sv","zh-hans","ga","fr","ja","id","it","pt-br","ko","es","el","pl"]}