SlideShare a Scribd company logo
1 of 41
Download to read offline
WagtailとPelicanで
JAMstack環境作ってみた
アジェンダ
● JAMStackとは
● 利用したもの
● 成果物
● 感想、考察、展望
お前誰よ
● Makoto Mochizuki
● @nyo3q1
● Python歴5年
● 三島駅近郊の会社でPython/Djangoを触っていた
● 数ヶ月のニートを経てフリーランスに
● 妻と娘がいます、家庭と勉強の両立...
JAMstackとは
ごめんなさい、少し長いです
JAMstackとは
JavaScript
API
Markup
stack
JAMstackとは
静的にビルドされたHTML、動的な処理はJavaScriptとAPI通
信だけな構成。
JAMstackとは
● DjangoやWordPressのようなサーバーサイドでHTMLを出力
しているアプリケーション
● SPAの発展のSSR(サーバーサイドレンダリング)している
アプリケーション
サーバーサイドでのHTML生成はNG
JAMstackとは
極端な話、一般的なWebアプリケーションや、SSRしたHTMLを
静的なHTMLにして保存すればJAMstak!
動的なHTMLを静的ファイルにすればOK
Rendering on the Web
JAMstackってなに?実践に学ぶ高速表示を実現するアーキテクチャの構成
項目
 概要
 静的ファイルのみで構成

Server Rendering
 サーバーサイドでアクセスのたびにレ
ンダリングする。いわゆる旧来の
CGI、PHP、サーブレットなど

×

Static SSR
 サーバーサイドで事前にレンダリング
して、すべて静的なHTMLとして変換
したもの。Ruby製の Jekyll(ジキル)
など

○

SSR
 ユニバーサルJavaScriptとして構成し
たSPA。サーバーサイドのNode.jsで、
レンダリングするものとクライアントサ
イドでレンダリングするものを組み合
わせたもの

×

CSR with Prerendering
 事前にページを静的なHTMLとして変
換しておくSPA。

「JAMstack」はここに該当

○

Full CSR
 クライアントサイドでレンダリングする
SPA

○

JAMstackの基本構成
HeadlessCMS
● Contentful
● microCMS
● NetlifyCMS
HeadlessCMS X サイトジェネレーター
サイトジェネレーター
● Netlify
● Gatsby
● Nuxt
JAMstackとは
● CMS, API, HTML生成機能が疎結合になる
○ CMS, API部分は1つのサービスでも良いと思いますが...
● ユーザーに渡すのはHTML, JavaScriptのみなので高速
○ ファイルをCDNに配置すればより高速に!
● 管理コストが低い
○ HTML, JavaScript, APIのみなので脆弱性も生まれにくい
メリット
JAMstackとは
● プレビューが出来ない
○ 出来なくはないが、有償のSaaS、対応しているOSSのCMSを利用する必要
がある
● 大量にコンテンツがあるとビルドに時間がかかる
○ 対策
■ 徹底的にビルドを並列化
■ 差分ビルド出来るようにコードを書く
デメリット
Wagtailには、新規コンテンツが追加された際追加で処理を行える(Djangoの機能
の)Signalがある。
https://docs.wagtail.io/en/latest/reference/signals.html
複雑にページコンテンツが他のコンテンツと絡み合う事がなければ、利用できる
かも?
差分ビルドについて
● JAMstack.org
● JAMstackってなに?実践に学ぶ高速表示を実現するアーキテクチャの構成
● Shizuoka.js#5 JAMstack_conf_2019 JAMstack at scale Report
JAMstack参考資料
利用したもの
● Wagtail
○ Django製CMS
● Pelican
○ Python製静的サイ
トジェネレーター
なぜこの2つを利用したのか
通常のJAMstackだと有償サービス、Node.js製のOSSを利用する事が多いように感
じる。
あえてDjango製CMSを利用する事で、コストを下げ、要望に柔軟に対応する。
サイトジェネレーターもPython製ツールを利用する事でPythonistaに優しい環境
を目指す。
2つともOSS、ソースコードが見れる。
1. WagtailをHeadlessCMSとして設定
2. PelicanでWagtailのコンテンツを取得
道のり
● Wagtail API v2 Configuration Guide を参考に設定していくだけ
https://docs.wagtail.io/en/latest/advanced_topics/api/v2/configuratio
n.html
● APIドキュメントも充実している
https://docs.wagtail.io/en/latest/advanced_topics/api/v2/usage.html#e
xample-response
WagtailをHeadlessCMSとして設定
おすすめ設定: Django REST frameworkも利用できるようにする
Wagtail(Django)からAPIを生やしやすくする
Headless CMS + APIをオールインワンで提供!
# settings.py
INSTALLED_APPS = [ ...
'wagtail.api.v2',
'rest_framework', # !!!!! ...
]
出力するAPIもカスタマイズ可能
# models.py
from rest_framework.fields import DateField
class BlogPage(Page):
api_fields = [
APIField('published_date'),
APIField('published_date_display',
serializer=DateField(format='%A $d %B %Y', source='published_date')
),
]
{
"published_date": "2017-04-06",
"published_date_display": "Thursday 06 April 2017"
}
PelicanでWagtailの
コンテンツを取得する
問題発生
Pelicanは
動的コンテンツからサイトを
生成する事は出来ない
● 静的ファイル(Markdown, reStructuredText, html)からサイトコンテンツを
生成するツール
● 動的コンテンツからサイト生成する機能がない、Pelican用プラグインを自作
しないといけない
Pelicanは...
WagtailとPelicanでJAMstack環境作ってみた
github.com/ButterCMS/buttercms-pelican
● 有償Headless CMSを提供している会社
● CMSに登録してあるコンテンツをPelicanでコンテンツ生成可能
ありがとうBitterCMS
もしGatsbyを選択していたら
Wagtailの公式ページに情報があるので導入は容易
● Using Gatsby for a Wagtail build - a case study
● Getting Started with Wagtail and GraphQL
むしろWagtail + Pelicanより情報が多いのでやりやすいと思います
1. Wagtailでコンテンツを作成
● DBはSQLiteにしてあるのでリポジトリに全部上がる
● 肥大化...
2. リポジトリにPush
3. CI/C(GitHub Actions)D発火
a. Wagtail起動
b. PelicanがWagtailのコンテンツを取得しビルド
c. 指定のサイトにデプロイ
4. 完成
成果物
WagtailとPelicanでJAMstack環境作ってみた
ソースコード
https://github.com/nyo3q1/wagtail-pelican
HTML生成の1部分エラーを吐いていますごめんなさい
● ローコストを目指すため、WagtailのDBにSQLiteを利用したが、このやりかた
では業務では使えない
○ Netlify cmsのようなにGitリポジトリにコンテンツを保存していくやり方が非常に素晴らし
い方法だと身に染みて分かった
● Pelicanは静的ファイルからサイトを生成するツール、動的コンテンツからサ
イト生成には...
○ 今回Wagtailのコンテンツインポートプラグインを自作した、ツールの適材適所を見極めてい
きたい
感想
考察
個人的な最適解
考察
● バックエンド
○ WagtailでREST API対応
● フロントエンド(静的サイトジェネレーターとしても利用)
○ (Next.js, Gatsby.js) or Nuxt.js
考察
● SPA
○ 管理画面系
○ 速度、インデックスを犠牲にできる
● JAMstack
○ 動的な変化の少ないサイト
○ OGP, インデックス, 速度を犠牲に出来ないサイ
ト
移行しやすい
JAMstackはこれからもっと賑わっていく構成。
● Django単体でJAMstack出来るようにするプラグイン
○ いくつかプラグインはありますが...
● Pelicanが動的コンテンツの取得に対応
● Jinja2を利用したサイト生成ツール
などが出てくると思います
展望
質疑応答
ご清聴ありがとうございました

More Related Content

What's hot

ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないCarnot Inc.
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜Kosaku Ono
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICSしくみ製作所
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計Takahiro Kubo
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうRyuji Tsutsui
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチYoshiki Hayama
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門ESM SEC
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜Megagon Labs
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みMasahiro Sakai
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術Takuto Wada
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Sho Yoshida
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014Takuto Wada
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話Yuta Shimada
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Naoaki Okazaki
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIShota Imai
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Preferred Networks
 

What's hot (20)

ChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くないChatGPTは思ったほど賢くない
ChatGPTは思ったほど賢くない
 
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
PyCon2020 Pythonで競プロをしよう! 〜入門者が知っておくべき高速化Tips〜
 
解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS解説!30分で分かるLEAN ANALYTICS
解説!30分で分かるLEAN ANALYTICS
 
機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計機械学習で泣かないためのコード設計
機械学習で泣かないためのコード設計
 
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそうPython 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
 
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
「のどが渇いた」というユーザーに何を出す? ユーザーの「欲しい」に惑わされない、本当のインサイトを見つけるUXデザイン・UXリサーチ
 
Pull Request & TDD 入門
Pull Request & TDD 入門Pull Request & TDD 入門
Pull Request & TDD 入門
 
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
GiNZAで始める日本語依存構造解析 〜CaboCha, UDPipe, Stanford NLPとの比較〜
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術組織にテストを書く文化を根付かせる戦略と戦術
組織にテストを書く文化を根付かせる戦略と戦術
 
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
Source Code Management with Pharo Smalltalk - Pharo Smalltalkソースコード管理方法
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
TDD のこころ @ OSH2014
TDD のこころ @ OSH2014TDD のこころ @ OSH2014
TDD のこころ @ OSH2014
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話コンテナにおけるパフォーマンス調査でハマった話
コンテナにおけるパフォーマンス調査でハマった話
 
Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善Word2vecの並列実行時の学習速度の改善
Word2vecの並列実行時の学習速度の改善
 
ChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AIChatGPT 人間のフィードバックから強化学習した対話AI
ChatGPT 人間のフィードバックから強化学習した対話AI
 
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
Pythonの理解を試みる 〜バイトコードインタプリタを作成する〜
 
Lean coffee
Lean coffeeLean coffee
Lean coffee
 

Similar to WagtailとPelicanでJAMstack環境作ってみた

S14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaS14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaTakeshi Akutsu
 
XMPPクライアント・プログラミング
XMPPクライアント・プログラミングXMPPクライアント・プログラミング
XMPPクライアント・プログラミング隆行 神戸
 
ATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発についてATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発についてJustSystems Corporation
 
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使うJMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う隆行 神戸
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャShiroyagi Corporation
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来Atsushi Odagiri
 
Logback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったLogback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったkuro kuro
 
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...Mitsuhiro Yamashita
 
Laravel管理画面ジェネレーター
Laravel管理画面ジェネレーターLaravel管理画面ジェネレーター
Laravel管理画面ジェネレーターTakuya Tejima
 
20170715 高知lt kintoneカスタマイズ
20170715 高知lt kintoneカスタマイズ20170715 高知lt kintoneカスタマイズ
20170715 高知lt kintoneカスタマイズ安隆 沖
 
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpSeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpYahoo!デベロッパーネットワーク
 
Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflowharubelle
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven DevelopmentTakuya Tejima
 
Generating word clouds in python
Generating word clouds in pythonGenerating word clouds in python
Generating word clouds in pythonAyakaHonda1
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Atsushi Harada
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみたKengo Toda
 

Similar to WagtailとPelicanでJAMstack環境作ってみた (20)

S14 t3 yosuke_yamashita
S14 t3 yosuke_yamashitaS14 t3 yosuke_yamashita
S14 t3 yosuke_yamashita
 
XMPPクライアント・プログラミング
XMPPクライアント・プログラミングXMPPクライアント・プログラミング
XMPPクライアント・プログラミング
 
ATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発についてATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発について
 
JMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使うJMeterをWebでしか設定できないサーバの設定自動化に使う
JMeterをWebでしか設定できないサーバの設定自動化に使う
 
My portfolio
My portfolioMy portfolio
My portfolio
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門
 
Goji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャGoji とレイヤ化アーキテクチャ
Goji とレイヤ化アーキテクチャ
 
パッケージングの今と未来
パッケージングの今と未来パッケージングの今と未来
パッケージングの今と未来
 
Logback stackdriver-loggingを作った
Logback stackdriver-loggingを作ったLogback stackdriver-loggingを作った
Logback stackdriver-loggingを作った
 
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
LINEとAWS(Lambda,Step Functions,API Gateway)とTwilioとkintoneでBOTを作ってみるハンズオン(yam...
 
Example using LattePanda
Example  using LattePandaExample  using LattePanda
Example using LattePanda
 
Laravel管理画面ジェネレーター
Laravel管理画面ジェネレーターLaravel管理画面ジェネレーター
Laravel管理画面ジェネレーター
 
20170715 高知lt kintoneカスタマイズ
20170715 高知lt kintoneカスタマイズ20170715 高知lt kintoneカスタマイズ
20170715 高知lt kintoneカスタマイズ
 
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #SeleniumjpSeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
SeleniumE2Eテストフレームワークを使用したテスト自動化事例 #Seleniumjp
 
Introductionof taskflow
Introductionof taskflowIntroductionof taskflow
Introductionof taskflow
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Next.js Storybook Driven Development
Next.js Storybook Driven DevelopmentNext.js Storybook Driven Development
Next.js Storybook Driven Development
 
Generating word clouds in python
Generating word clouds in pythonGenerating word clouds in python
Generating word clouds in python
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
JVMの中身を可視化してみた
JVMの中身を可視化してみたJVMの中身を可視化してみた
JVMの中身を可視化してみた
 

WagtailとPelicanでJAMstack環境作ってみた