DjangoでクリーンなURL設計にするベストプラクティス|初心者向けURLルーティング入門
生徒
「WebサイトのURLって、どうやって決めたらいいんですか?英語がたくさん並んでいて難しそうです…」
先生
「URLは、家の住所と同じで、人にもコンピュータにも分かりやすい形にするのが大切です。Djangoでは、その設計をとてもきれいに作れます。」
生徒
「分かりやすいURLって、検索にも強くなるって本当ですか?」
先生
「本当です。今回はDjangoでクリーンなURL設計をする考え方と書き方を、超初心者向けに説明します。」
1. クリーンなURL設計とは何か?
クリーンなURL設計とは、人が見て内容を想像できるURLを作ることです。例えば /blog/1/ よりも /blog/how-to-use-django/ のほうが、どんなページか分かります。
DjangoのURLルーティングでは、URLと処理を結びつける設定を行います。この設定を整理すると、Webアプリ全体が読みやすく、修正もしやすくなります。
検索エンジン対策(SEO)の面でも、意味のある単語をURLに含めることは重要です。
2. なぜDjangoではURL設計が重要なのか
DjangoはURLルーティングをコードで管理します。そのため、最初に設計を間違えると、後から直すのが大変になります。
URLが整理されていると、プログラム初心者でも「このURLはこのページだな」と理解できます。これはチーム開発だけでなく、将来の自分を助けることにもつながります。
Djangoの特徴は、URL・ビュー・テンプレートが役割ごとに分かれている点です。この分離を意識すると、自然とクリーンなURLになります。
3. URLには名詞を使うのが基本
URLには動作ではなく、対象となるもの(名詞)を使うのが基本です。これはREST設計と呼ばれる考え方にもつながります。
例えば「記事一覧」を表すなら /posts/、「記事の詳細」なら /posts/1/ のようにします。
# project/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('posts/', views.post_list),
path('posts/<int:id>/', views.post_detail),
]
このようにURLを見るだけで、何を表示するか想像できる形が理想です。
4. URLに日本語や動詞を入れない理由
URLには英数字とハイフンを使うのが基本です。日本語URLは読みにくく、コピーしたときに長い文字列に変換されてしまいます。
また /getPost/ や /showArticle/ のような動詞は避けます。URLは「何をするか」ではなく「何であるか」を表すからです。
# 悪い例
path('getPost/', views.post_list)
# 良い例
path('posts/', views.post_list)
この小さなルールを守るだけで、URLが一気に洗練されます。
5. アプリごとにURLを分割する設計
Djangoでは、アプリごとに urls.py を分けるのがベストプラクティスです。これにより、URLが整理され、管理しやすくなります。
# project/urls.py
from django.urls import path, include
urlpatterns = [
path('blog/', include('blog.urls')),
]
# blog/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.post_list),
]
この構造は、URL設計とプロジェクト構成が自然につながるため、初心者にもおすすめです。
6. pathと<int:id>の意味を理解しよう
path はURLと処理を結びつける関数です。<int:id> は「数値を受け取る場所」を意味します。
これは、マンションの部屋番号のようなものです。同じ建物でも、番号によって部屋が違います。
path('posts/<int:id>/', views.post_detail)
この仕組みを使うことで、1つのURLルールで複数のページを表現できます。
7. SEOを意識したURL設計のポイント
検索エンジンはURLもページ内容の判断材料にします。そのため、意味のある英単語をURLに含めることが大切です。
短く、分かりやすく、階層を深くしすぎないことも重要です。DjangoのURLルーティングは、この設計を柔軟に実現できます。
クリーンなURL設計は、SEO対策・保守性・学習効率のすべてに効果があります。