SlideShare a Scribd company logo
1 of 16
Download to read offline
DJANGO製CMS
WAGTAILでBLOGを
作ってみる
⾃分のブログをリニューアルする際にDJANGO製CMSである
WAGTAILを選び、GATSBYJSで静的HTML化しつつさらにはサーバー
レスにも⼿を出すというあくなき挑戦の記録。
BY IOSIF TAKAKURA
⾃⼰紹介
• 1981年、東京⽣まれ。
• 修⼠(史学)。専攻は中国とモンゴルの祭祀史。
• 発達障がい当事者。ADHDと⾃閉スペクトラム、多分両⽅ある。
• プログラミング歴は社会に出てから。
• 現在の所属:株式会社サザビーリーグHR
• Pythonは今回の個⼈開発がほぼ始めて。
• 簡単な分析系プログラムは書いたことがある。
• 業務での開発では主に.NET(C#)を使⽤。
• 他に興味あるのはRuby、JavaScript/TypeScriptなど。
• 同⼈で評論も書いていたり。
• ちょっとカウボーイの気がある……
今回のキーワード
$30
30秒
5分
今回の⽬的
• Middleman(Ruby製)で作ったブログのリニューアル
• Markdownをファイルで書く⽅式からの脱却
• モバイル環境でMarkdownのファイル管理はやりづらい
• 将来的に執筆者を増やす際、CMSがあると便利
• 技術的負債がたまりにたまっていたのでリプレース
• ⾃社HPリニューアルに向け技術PR
• やっていることは現⾏ブログと同じ
• リニューアルの計画がある模様
現在のブログサイト。Middleman製。
https://huideyeren.info/
WAGTAILとは?
• Django製CMS
• 制作にはDjangoの知識が必要
• 基本的にModelを書けばCMSになるようになっている。
• 今回もほとんどModelの編集で事⾜りた
• 拡張もDjangoの流儀に則って⾏えば⼗分
• Djangoベースなので情報が得やすい
• akiyokoさんの『現場で使えるDjangoの教科書』シリーズに
はお世話になりました
• ⽇本語化、いやi18n対応されている
• ITリテラシーと英語⼒が⼗分でない⼈にも使いやすい
• その気になればHeadless CMSにする事も可能
• 今回はここが最重要
• モバイルでも使えないことはない
今回の構成図
AWS Cloud
VPC
Amazon API
Gateway
AWS
Lambda
Amazon Aurora
Serverless
Amazon Simple
Storage Service
NetlifyReaders
Writer
Trigger at
11:30
Request for build
WAGTAILを選んだ理由
ちょうどよいCMS
がWagtailだった
Pythonで何か作ってみる
のにちょうどよい
Headless CMSにできるの
にちょうどよい
Django Rest Frameworkも
あるし、APIとして使うの
は⼗分
他の⾔語で要件を満
たすCMSがなかっ
た
Rubyでは良さそうな物が
なかった
ちょっとSquidex(.NET
製)が気になったが採⽤
しなかった
運⽤代はかかっても
よいのでインストー
ル型の⽅がよい
でも、かかって$30ぐらい
までが理想
HEADLESS CMSの⻑所と短所
PROS
• 表⽰とバックエンドを分離できる
• 疎結合になるので、技術の進歩に追随しやすい
• JavaScriptエコシステムの恩恵を受けやすい
• サーバーサイドがサーバーレスだから
• バックエンドにアクセスするのは編集者のみとする事で、
サーバーレスのコストダウンの恩恵を受けられる
• フロントエンドは静的コンテンツのみを配信する設計とする
ことで、負荷に耐えやすい構成を取ることができる
CONS
• 設計が⼤変になる
• Python側で⾏うかJavaScript側で⾏うか考えなければいけない
• 連携させることによって複雑さが増す
• Pythonだけではなく、JavaScriptやアプリ開発の知識が
別途必要になる
• フロントエンドとの連携がうまくいかないと使い物に
ならない
サーバーレスへの挑戦
• 更新頻度はそれほど⾼くない
• どうせ⽉に1~2回ぐらいしか更新しないし……
• 常時サーバーを動かしておくのはコストがかかる
サーバーレスアーキテクチャーの採⽤を決定
(ただし、負荷に関しては考慮しない)
• 開発中の⽉額コスト:$13~$14
• 運⽤時の⽉額コスト:$30以内におさまることを想定
• ⽉額コスト上限:$40までに収まってくれればよい
そこで、WSGIアプリケーションをサーバーレス化できる
Zappaを採⽤することで開発体験が普通のDjango開発からそ
れないことを⾒込んだ。
ZAPPAとAPI GATEWAY、
そしてLAMBDA、
AMAZON AURORA SERVERLESS
• ZappaはAWS LambdaとAPI Gatewayを使って、WSGIに
対応するアプリケーションをAWSにデプロイできる
ツール
• 当然のことながらDjangoにも対応
• コマンドを実⾏することによってデプロイ
• Djangoのマイグレーション等も拡張でできる
• ただし、デバッグがめんどくさい
• ログを吐いて確認していくしかない
• API Gatewayにある30秒制限がきつい
• 30秒かかるとリクエストは失敗になってしまう
• なおDBはAmazon Aurora Serverlessを採⽤
• Serverlessタイプなのでそんなに使わなければ安い!
• リクエストを受けると約30秒のタイムラグの後起動するが、
最後のリクエストから5分経つと⽌まってしまう
• なのでDBが⽌まっているときに管理画⾯にアクセスする
と最初の1回は必ずエラーになる!!
GRAPHQLとの格闘
• WagtailとGatsbyの間のインターフェイスはGraphQLを
使⽤することに
• WagtailでGraphQLを扱うプラグインはwagtail-graphql-
api (https://pypi.org/project/wagtail-graphql-api/)を使⽤
• これもModelにGraphQLで扱う項⽬を書き込む事でGraphQLの
スキーマに加えることができる。
• なので、最初Django Rest Frameworkを使ったときよりサー
バーサイドの実装は楽になった
• が、⼤量のSQL⽂、とりわけSelect⽂が出⼒されてい
る
• GraphQLのクエリをDjangoのO/R Mapperが上⼿に作れていな
い可能性がある
• パフォーマンスに関わる問題なので、PyCon JP後に改めて対応
したい。
• とりわけ記事が多くなってくると30秒でリクエストを完
遂できるかが⼼配
• ⾃分の書いたコード以外のところに原因があるとしたら、
できればコントリビュートしたい
責務を分ける
• サーバーサイドとフロントエンドで分割されたシステ
ムを作るには、サーバーサイドで何をするか、フロン
トエンドで何をするかしっかり決めないといけない
• サーバーサイド(Wagtail)でする事
• 全ての記事の内容を保持
• ブログ記事以外のURL管理
• 画像やドキュメントなどの静的ファイルの保持
• GraphQL APIの配信
• フロントエンドサイド(Gatsby)でする事
• HTML、CSS、JavaScript、Markdownのレンダリング
• ブログ記事のURL管理
• 年別、⽉別の記事⼀覧の⽣成
• RSSの⽣成
• このRSSをもとにSNSに新着記事を投稿する
• sitemap.xmlの⽣成
クライアントサイドとの連携
• 当初は、記事をWagtailに登録したらWebhooksを
Netlifyに投げる予定だった。
• Wagtailに内蔵されている、DjangoのSignalsを使うつもりだった
• しかし、リクエストが⾶ばない……
• AWS LambdaでVPCを使っている場合は外部のインターネット
に送る通信ができないと判明
• NAT Gatewayを使えば通信できるようにはなるが……
• これだけに⽉$30かける余裕はない!
• これだけで当初の予算を軽くオーバーしてしまう
• そこで、Wagtailから即時にWebhooksを送ることをあ
きらめた
• NetlifyはURLにPOSTリクエストを投げるとビルドが⾛る仕様
• ということは即時の更新が必要でなければ、Wagtailから
直接Webhooksを送らなくても良い
• Google Apps Scriptで毎⽇11:28と11:30にリクエストを送る
ことで1⽇1回定期的に更新されるようにした
クライアントサイドの進捗と今後
の⽅向性
• 正直、進捗ダメです
• Wagtailサイドはほぼ出来上がっていても、Gatsbyに関しては
まったくと⾔っていいほどできていない
• テンプレートへのデータの連係ができた程度
• デザインすらまだできていない
• できればユニバーサルWebデザインを⼼がけたい
• けっこう多くのことをGatsby頼りにする予定
• そもそも、1回Reactに挑戦しようとして痛い⽬にあっ
た経験あり
• 業務でアンケートフォームを作ったときに採⽤しようとした
• その時は完全に感覚だけで進もうとしていた
• Reactは、概念を理解していかないと痛い⽬を⾒る
• 問題は、動きの速いフロントエンドとそのコミュニ
ティの動きにどれだけ追随できるか
技術的負債の問題をどうするか
• どうも私は技術的負債を抱えるコードを書きやすい
• 社内向けのSphinxのドキュメントを技術的負債にして
しまった悲しい過去がある
• 過去の発表『社内のマニュアルをSphinxで作ってみた』参照
• https://www.slideshare.net/iosiftakakurayusuke/sphinx-
82892226
• なのに、docstringも書けてない
• 追って対応予定
• そもそもTestが書けてない
• ⽇頃からTestを書く習慣を付けなければ……
• データの作り⽅も綿密に設計されていない
• Userクラスとは別に著者情報を持つことに
• 投稿⽇もWagtailの投稿⽇を使っていない
• インポート記事の扱いもあるのでこれは仕⽅ない
• というか、どういう情報を載せたいのか明確にならないまま
開発を始めてしまった
• フロントエンドに⾄っては未完成
PYTHONでのWEB開発に挑戦して
みてどう考えたのか?
(とりわけC#との違いとか)
• 選択肢は豊富にある感じ
• PEP-8やdocstringからのドキュメント⾃動⽣成など、
Pythonは「読まれる」コードの共有というところに重
きが置かれている感じがした
• docstring、書かなきゃなぁ……
• 現在業務で書いているC#は「レガシーコード」
• モノリシックな構造で、ユニットテストもない
• ユニットテストのないのは全て「レガシーコード」
• 今回フロントエンドとバックエンドを分けて作ったことが、
今後のシステム作りに対してよい経験になると思う
• C#の実⼒を活かすとまた違ったプログラムになる
• C#⼤統⼀理論
• クライアントもサーバーサイドもC#でまとめて開発
• コードも共有できる
• JavaScriptに頼らざるを得ない以上、JavaScriptでできる
ことはJavaScriptにやった⽅がよいと思う。
• Pythonでクライアントサイドを書くのはまだ実⽤的ではない

More Related Content

What's hot

モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはモダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはTakuya Tejima
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだNarichika Kajihara
 
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話infinite_loop
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニアakira6592
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018Yusuke Suzuki
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~torisoup
 
Pythonの非同期処理を始める前に
Pythonの非同期処理を始める前にPythonの非同期処理を始める前に
Pythonの非同期処理を始める前にkoralle
 
SharePointリストのフォームのカスタマイズを利用したときにハマること
SharePointリストのフォームのカスタマイズを利用したときにハマることSharePointリストのフォームのカスタマイズを利用したときにハマること
SharePointリストのフォームのカスタマイズを利用したときにハマることた な
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていることonozaty
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ増田 亨
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019Tokoroten Nakayama
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案樽八 仲川
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlinRyota Murohoshi
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方uchan_nos
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説するTaishiYamada1
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例gree_tech
 

What's hot (20)

Marp Tutorial
Marp TutorialMarp Tutorial
Marp Tutorial
 
モダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとはモダンフロントエンド開発者に求められるスキルとは
モダンフロントエンド開発者に求められるスキルとは
 
JIRA / Confluence の 必須プラグインはこれだ
JIRA / Confluence の必須プラグインはこれだJIRA / Confluence の必須プラグインはこれだ
JIRA / Confluence の 必須プラグインはこれだ
 
リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話リファクタリングで実装が○○分短縮した話
リファクタリングで実装が○○分短縮した話
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア新人研修資料 向き合うエンジニア
新人研修資料 向き合うエンジニア
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
マイクロサービス化デザインパターン - #AWSDevDay Tokyo 2018
 
MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~MagicOnion~C#でゲームサーバを開発しよう~
MagicOnion~C#でゲームサーバを開発しよう~
 
Pythonの非同期処理を始める前に
Pythonの非同期処理を始める前にPythonの非同期処理を始める前に
Pythonの非同期処理を始める前に
 
SharePointリストのフォームのカスタマイズを利用したときにハマること
SharePointリストのフォームのカスタマイズを利用したときにハマることSharePointリストのフォームのカスタマイズを利用したときにハマること
SharePointリストのフォームのカスタマイズを利用したときにハマること
 
40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること40歳過ぎてもエンジニアでいるためにやっていること
40歳過ぎてもエンジニアでいるためにやっていること
 
マイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチマイクロサービス 4つの分割アプローチ
マイクロサービス 4つの分割アプローチ
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
脱RESTful API設計の提案
脱RESTful API設計の提案脱RESTful API設計の提案
脱RESTful API設計の提案
 
普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin普段C#を使っている僕から見たKotlin
普段C#を使っている僕から見たKotlin
 
30分で分かる!OSの作り方
30分で分かる!OSの作り方30分で分かる!OSの作り方
30分で分かる!OSの作り方
 
GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出GitLab から GitLab に移行したときの思い出
GitLab から GitLab に移行したときの思い出
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例Amazon EKS によるスマホゲームのバックエンド運用事例
Amazon EKS によるスマホゲームのバックエンド運用事例
 

Similar to Django 製 CMS Wagtail で Blog を作ってみる

Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかKakigi Katuyuki
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5jToshiaki Maki
 
Cmsdou oosaka
Cmsdou oosakaCmsdou oosaka
Cmsdou oosakaonagatani
 
はじめよう!MovableType.net ハンズオン
はじめよう!MovableType.net ハンズオンはじめよう!MovableType.net ハンズオン
はじめよう!MovableType.net ハンズオンHajime Fujimoto
 
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるPython と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるShuhei Iitsuka
 
a-sap08「a-blog cmsとMovable Type」
a-sap08「a-blog cmsとMovable Type」a-sap08「a-blog cmsとMovable Type」
a-sap08「a-blog cmsとMovable Type」Seiko Kuchida
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2Ryohei Kamiya
 

Similar to Django 製 CMS Wagtail で Blog を作ってみる (7)

Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうか
 
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
 
Cmsdou oosaka
Cmsdou oosakaCmsdou oosaka
Cmsdou oosaka
 
はじめよう!MovableType.net ハンズオン
はじめよう!MovableType.net ハンズオンはじめよう!MovableType.net ハンズオン
はじめよう!MovableType.net ハンズオン
 
Python と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめるPython と Xpath で ウェブからデータをあつめる
Python と Xpath で ウェブからデータをあつめる
 
a-sap08「a-blog cmsとMovable Type」
a-sap08「a-blog cmsとMovable Type」a-sap08「a-blog cmsとMovable Type」
a-sap08「a-blog cmsとMovable Type」
 
人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2人工知能のコードをハックする会 #2
人工知能のコードをハックする会 #2
 

More from Iosif Takakura

取り込んだネガ画像の色を変換する Python スクリプトを書いてみた
取り込んだネガ画像の色を変換する Python スクリプトを書いてみた取り込んだネガ画像の色を変換する Python スクリプトを書いてみた
取り込んだネガ画像の色を変換する Python スクリプトを書いてみたIosif Takakura
 
Marp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライドMarp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライドIosif Takakura
 
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化する
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化するscikit-image でフィルムスキャナで取り込んだネガ画像をポジ化する
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化するIosif Takakura
 
Zappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるZappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるIosif Takakura
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSIosif Takakura
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントIosif Takakura
 
DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!Iosif Takakura
 
技術的負債との戦い方
技術的負債との戦い方技術的負債との戦い方
技術的負債との戦い方Iosif Takakura
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみたIosif Takakura
 
C#初心者がxamarinに手を出してみた
C#初心者がxamarinに手を出してみたC#初心者がxamarinに手を出してみた
C#初心者がxamarinに手を出してみたIosif Takakura
 
Sphinxで同人誌を書いてみた
Sphinxで同人誌を書いてみたSphinxで同人誌を書いてみた
Sphinxで同人誌を書いてみたIosif Takakura
 
ようこそ先輩 - 2014年8月2日
ようこそ先輩 - 2014年8月2日ようこそ先輩 - 2014年8月2日
ようこそ先輩 - 2014年8月2日Iosif Takakura
 
Osuncが終わったら帰りは警察署に行きましょう
Osuncが終わったら帰りは警察署に行きましょうOsuncが終わったら帰りは警察署に行きましょう
Osuncが終わったら帰りは警察署に行きましょうIosif Takakura
 

More from Iosif Takakura (13)

取り込んだネガ画像の色を変換する Python スクリプトを書いてみた
取り込んだネガ画像の色を変換する Python スクリプトを書いてみた取り込んだネガ画像の色を変換する Python スクリプトを書いてみた
取り込んだネガ画像の色を変換する Python スクリプトを書いてみた
 
Marp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライドMarp for VS Code で作る PowerPoint スライド
Marp for VS Code で作る PowerPoint スライド
 
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化する
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化するscikit-image でフィルムスキャナで取り込んだネガ画像をポジ化する
scikit-image でフィルムスキャナで取り込んだネガ画像をポジ化する
 
Zappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみるZappa で Serverless CMS を作ってみる
Zappa で Serverless CMS を作ってみる
 
Django と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMSDjango と Wagtail で作る Headless CMS
Django と Wagtail で作る Headless CMS
 
Sphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメントSphinxでまとめる多言語環境APIドキュメント
Sphinxでまとめる多言語環境APIドキュメント
 
DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!DocFXで脱Excel方眼紙!
DocFXで脱Excel方眼紙!
 
技術的負債との戦い方
技術的負債との戦い方技術的負債との戦い方
技術的負債との戦い方
 
社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた社内のマニュアルをSphinxで作ってみた
社内のマニュアルをSphinxで作ってみた
 
C#初心者がxamarinに手を出してみた
C#初心者がxamarinに手を出してみたC#初心者がxamarinに手を出してみた
C#初心者がxamarinに手を出してみた
 
Sphinxで同人誌を書いてみた
Sphinxで同人誌を書いてみたSphinxで同人誌を書いてみた
Sphinxで同人誌を書いてみた
 
ようこそ先輩 - 2014年8月2日
ようこそ先輩 - 2014年8月2日ようこそ先輩 - 2014年8月2日
ようこそ先輩 - 2014年8月2日
 
Osuncが終わったら帰りは警察署に行きましょう
Osuncが終わったら帰りは警察署に行きましょうOsuncが終わったら帰りは警察署に行きましょう
Osuncが終わったら帰りは警察署に行きましょう
 

Django 製 CMS Wagtail で Blog を作ってみる