GRUGスタックは Hypermedia-Driven Applicationsの構築に使用される開発環境です。以下の要素から構成されています:
- ウェブフレームワークのバックエンド、例えば Django
- HTMX
- _hyperscript
- TailwindCSS
一部の人々は、_hyperscriptの代わりに Alpine.jsを好むことがあります。これらは技術的に異なりますが、GRUGスタック内の位置は同じです。両方のインストール方法を教説します。
最速の方法
もし、すぐにスタック全体を試したいと思ったら、Django(または他のバックエンドフレームワーク)をインストールし、以下のようなbase.html
テンプレートを作ります:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 | <!DOCTYPE html>
<html lang="en">
<head>
<title>The GRUG Stack</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<!-- HTMXライブラリ -->
<script src="https://unpkg.com/htmx.org@1.8.0"
integrity="sha384-cZuAZ+ZbwkNRnrKi05G/fjBX+azI9DNOkNYysZ0I/X5ZFgsmMiBXgDZof30F5ofc"
crossorigin="anonymous"></script>
<!-- _hyperscriptまたはAlpine.jsを選択 -->
<!-- _hyperscript ライブラリ -->
<script src="https://unpkg.com/hyperscript.org@0.9.7"></script>
<!-- Alpine.js ライブラリ -->
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
<!-- TailwindCSSのスタイル -->
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body>
{% block content %} {% endblock %}
</body>
</html>
|
これで、最新のHypermedia-Driven Applicationsの開発を始める準備ができました。
しかし、後で本番環境で使える環境を作りたい場合は、このチュートリアルの残りの部分に従ってください。
概要
忙しい開発者のための手順:
- ソフトウェアをインストール
pip install ...
- それらのインストールおよび設定手順に従う。
- django-tailwindが
base.html
テンプレートを提供します。HTMLのhead部分に_hyperscriptまたはAlpine.jsのスクリプトを追加します。
完成したら、base.html
ファイルは次のようになるべきです:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | {% load static tailwind_tags %}
{% load static %}
{% load django_htmx %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Django Tailwind</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
{% tailwind_css %}
<!-- _hyperscriptまたはAlpine.jsを選択 -->
<!-- _hyperscript ライブラリ -->
<script src="https://unpkg.com/hyperscript.org@0.9.7"></script>
<!-- Alpine.js ライブラリ -->
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
<script src="{% static 'core/htmx.min.js' %}" defer></script>
</head>
<body class="bg-gray-50 font-serif leading-normal tracking-normal">
<div class="container mx-auto">
<section class="flex items-center justify-center h-screen">
<h1 class="text-5xl">Django + Tailwind = ❤️</h1>
</section>
</div>
</body>
</html>
|
詳細な指示
pip
を介してすべてをインストールした後、以下の内容を引き続き行います:
新しいアプリケーションの作成
python manage.py startapp core
スタティックディレクトリの作成
core
アプリディレクトリにstatic
という名前のディレクトリを作成します。
static
アプリディレクトリにcore
という名前のディレクトリを作成します(本当にです)。
このディレクトリは後ほど使用します。まだ設定が必要です。
テンプレートディレクトリの作成
core
アプリにtemplates
という名前のディレクトリを作成します。
templates
フォルダのなかにcore
という名前のディレクトリを作成します(さらに質問せずに進めてください)。
このディレクトリは後ほど使用します。まだ設定が必要です。
INSTALLED_APPS
に追加する
1
2
3
4
5
6
7
8
9
10
11
12 | INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
+ 'core',
+ 'django_htmx',
+ 'tailwind',
+ 'widget_tweaks',
]
|
HTMX: Middlewareを追加する
| MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
...
'django.middleware.clickjacking.XFrameOptionsMiddleware',
+ 'django_htmx.middleware.HtmxMiddleware',
]
|
HTMX: ダウンロードし、staticフォルダに追加する
- HTMXをここからダウンロードします。
- それを
core
アプリのstaticディレクトリに置きます(core/static/core/htmx.min.js
に配置します)。
当面、HTMXの設定は以上です。
Tailwind: Tailwind CSSアプリを作る
django-tailwindの初期化スクリプトを実行します。
python manage.py tailwind init
指示に従ってください。アプリのデフォルト名はtheme
を使います。
Tailwind: settings.py
を変更する
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | INSTALLED_APPS = [
...,
'core',
'django_htmx',
'tailwind',
'widget_tweaks',
+ 'theme',
+ 'django_browser_reload',
]
+ TAILWIND_APP_NAME = 'theme'
+ INTERNAL_IPS = [ '127.0.0.1' ]
MIDDLEWARE = [
...,
'django_htmx.middleware.HtmxMiddleware',
+ 'django_browser_reload.middleware.BrowserReloadMiddleware',
]
|
Tailwind: TailwindCSSの依存関係をインストールする
python manage.py tailwind install
Tailwind: django_browser_reload
をurls.py
に追加する
| ## contact/contact/urls.py
# 'include'をインポート追加
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path("__reload__/", include("django_browser_reload.urls")),
]
|
python manage.py tailwind init
でtheme
アプリを作ったとき、django-tailwind
は親切にもtheme/templates
フォルダ内にbase.html
ファイルを提供してくれました。これを編集しましょう。
最終設定
django-tailwind
から提供されたデフォルトのbase.html
ファイルは次のようになっています:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 | {% load static tailwind_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Django Tailwind</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
{% tailwind_css %}
</head>
<body class="bg-gray-50 font-serif leading-normal tracking-normal">
<div class="container mx-auto">
<section class="flex items-center justify-center h-screen">
<h1 class="text-5xl">Django + Tailwind = ❤️</h1>
</section>
</div>
</body>
</html>
|
このファイルにHTMXと_hyperscript(またはAlpine.js)を追加する必要があります。{% load static tailwind_tags %}
の下に、さらに2行追加します:
| {% load static %}
{% load django_htmx %}
|
<head>
の中に、{% tailwind_css %}
の下に以下を追加します:
| <script src="https://unpkg.com/hyperscript.org@0.9.7"></script>
<script src="{% static 'htmx.min.js' %}" defer></script>
|
これが_hyperscript(またはAlpine.js)の唯一のインストール手順です。
base.html
ファイルは次のようになるべきです:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 | {% load static tailwind_tags %}
{% load static %}
{% load django_htmx %}
<!DOCTYPE html>
<html lang="en">
<head>
<title>Django Tailwind</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
{% tailwind_css %}
<!-- _hyperscriptまたはAlpine.jsを選択 -->
<!-- _hyperscript ライブラリ -->
<script src="https://unpkg.com/hyperscript.org@0.9.7"></script>
<!-- Alpine.js ライブラリ -->
<script defer src="https://unpkg.com/alpinejs@3.x.x/dist/cdn.min.js"></script>
<script src="{% static 'core/htmx.min.js' %}" defer></script>
</head>
<body class="bg-gray-50 font-serif leading-normal tracking-normal">
<div class="container mx-auto">
<section class="flex items-center justify-center h-screen">
<h1 class="text-5xl">Django + Tailwind = ❤️</h1>
</section>
</div>
</body>
</html>
|
やった!設定完了です。あなたは次のHypermedia-Driven Applicationを構築する準備が整いました。
ひとつだけ最後に
django-widget-tweaks
とdjango-render-block
のインストールについては触れていません。
将来のガイドでこれらがどのように使用され、なぜGRUGスタックの開発環境の一部であるのかについての実用的な例を見ることができます。簡単に説明すると:
django-widget-tweaks
は、forms.py
ファイルではなくテンプレート内でDjangoフォームをスタイルすることを可能にします。これにより、私たちはLocality of Behaviorの原則に従うことができます。また、Tailwindを使用するのを大幅に簡略化します。
django-render-block
も同様に、主要なテンプレートファイル内にテンプレートフラグメントを含めることを可能にし、Locality of Behaviorの原則に従うことができます。
Hypermedia-Driven Applicationのアクションの大部分がハイパーメディア(つまりHTML)に存在するため、これらの二つのDjango拡張をインストールして、Djangoテンプレートでの作業を容易にすることは重要です。