SlideShare a Scribd company logo
1 of 33
Download to read offline
Pelican による www.python.jp の構築 
2014/9/13 PyCon JP 2014 
Atsuo Ishimoto
自己紹介 
2 
いしもと 
石本 
敦夫 
あつお 
python.jp 管理人
㈱ UNCOVER TRUTH勤務 
3 
社員募集中!
Python本を書きました 
4 
Python文法詳解 ← NEW 
パーフェクトPython
5 
python.jp の歴史 Zope(2001年9月 ~) 
Zope2 
Squishdot 
DTML
python.org専用ツール (2012/9 ~) 
6 
YAML 
reStructuredText 
mako
Pelican (2014/5 ~) 
7 
reStructuredText 
Markdown 
AsciiDoc 
jinja2
Pelican 
Static Site Generator, Powered by Python 
8 
コンテンツ 
(reStructuredText, 
Markdown., 
HTML…) 
テンプレート 
(jinj2) 
HTML 
RSS 
CSS 
etc., 
http://docs.getpelican.com 
設定ファイル
Pelican 
9 
非技術者でも使えるサイト構築ツール
コンテンツ 
10 
ブログのエントリ 
日付・カテゴリ・タグなどを設定 
サイトを構成する静的なページ 
著者紹介、Aboutなど 
アーティクル 
ページ
テンプレート 
11 
Pelican テーマ集 
https://github.com/getpelican/pelican-themes
Pelicanのインストール 
12 
pip3 install pelican 
Markdownを使う場合は、 
pip3 install Markdown 
を追加
Pelicanサイトの作成 
13 
$ pelican-quickstart 
Welcome to pelican-quickstart v3.3.0. 
This script will help you create a new Pelican-based website. 
Please answer the following questions so this script can generate the files needed by Pelican. 
Where do you want to create your new web site? [.] 
> What will be the title of this web site? Test Site 
> Who will be the author of this web site? Atsuo Ishimoto 
… 
pelican-quickstart コマンドでひな形を作成
pelican-quickstart で生成されるファイル 
14 
プロジェクトディレクトリ 
├── content 作成した記事を格納 
│ └── (pages) 
├── output 記事を変換したHTMLなど 
│ └── (html, css, etc.,) 
├── develop_server.sh テスト用HTTPサーバ 
├── fabfile.py サイト構築用fabfile 
├── Makefile ビルド用 Makefile 
├── pelicanconf.py 設定ファイル 
└── publishconf.py 本番環境用設定ファイル
contentディレクトリ 
15 
content 
│ 
├─ アーティクルA.rst 作成した記事 
├─ カテゴリ1 カテゴリ1の記事 
│ ├── アーティクルA.rst 
│ └── アーティクルB.rst 
├─ カテゴリ2 格納カテゴリ2の記事 
│ └── アーティクルC.rst 
├─ pages ページを格納 
│ ├── ページ1.rst 
│ └── ページ2.rst 
├─ images 画像ファイル等 
│ └── picture1.png
reStructuredText 
16 
Python公式ドキュメントで採用 
高機能 
拡張性 
デフォルト設定が、Pythonドキュメントの記述用 
西洋語向けのマークアップ
Markdown 
17 
Githubなどでおなじみ 
シンプル・覚えやすい
記事のメタデータ 
18 
記事タイトル 
############## 
:date: 2014-09-14 12:00 
:tags: Python, プレゼン 
:category: python 
:slug: file_name 
rstのサンプル 
本文中や、ファイル名にメタデータを記述 
•タイトル 
•日付 
•タグ 
•著者 
•urlのパス 
•etc
メタデータでURL/ファイル名を指定 
19 
記事タイトル ############## :save_as: path/to/save/index.html :url: path/to/save/ 
output/path/to/save/index.html を作成 
ページへのリンクは、 path/to/save/ となる
カテゴリ 
20 
pelicanconf.py で設定 DEFAULT_CATEGORY = "blog" 
メタデータで指定 
記事タイトル 
############## 
:category: python 
ディレクトリで指定 
Contentディレクトリの、サブディレ クトリ名をカテゴリとする ex) ./content/python/article.rst 
デフォルトカテゴリ
ページ間リンク 
21 
ページ間リンクの記述方法 ######################### rstでの `相対リンク <{filename}page1.rst>`_ と `絶対リンク <{filename}/page1.rst>`_
構文ハイライト 
22 
.. code-block:: python3 
def say(): 
print('hello') 
Pygmentsで構文ハイライト
ページ 
23 
作成方法 
content/pages ディレクトリに作成 
ブログエントリ以外の、Aboutや著作権表示など 
表示方法 
•DEFAULT_CATEGORY = True ならリンクを表示 
•リンクしないページは、メタデータで :status: hidden
スタティックファイル 
24 
content 
│ 
├─ images 
│ └── picture1.png 
./content/imagesに配置 
./output/images/ にコピーされる 
./content/images/picture1.png → ./ountput/images/picture1.png
サイトのビルド 
25 
コマンド 
機能 
make html 
プロジェクトをローカル環境用にビルドします 
(pelicanconf.pyを実行) 
make publish 
プロジェクトをプロダクション環境用にビルド します (pelicanconf.py + publishconf.py を実行) 
make regenerate 
ファイルの変更を検出すると自動的にビルド します 
make devserver 
develop_server.sh を実行し、プロジェクト の自動ビルド・テスト用HTTPサーバを起動 します
設定ファイル 
26 
pelicanconf.py 
publishconf.py 
•make html と make publish で使用 
•make publish でのみ使用 
•プロダクション環境用
テーマ 
27 
pelican-themesコマンド 
指定方法 
pelicanconf.py で、ディレクトリ名を指定 
THEME = "my_theme" 
テーマ設定コマンド 
$ pelican-themes --list notmyidea two-column@ simple
記事インデックスページ 
28 
インデックスページ /index.html 
すべてのアーティクルのインデックス 
カテゴリ別インデックスページ 
/category/カテゴリ名/index.html 
カテゴリごとに作成される、アーティクルの インデックス 
その他、タグ別・ 著者別・年別など
アーティクルの保存パスとURL 
29 
ARTICLE_SAVE_AS 
【例】 ARTICLE_SAVE_AS = 'articles/{slug}/index.html' 
アーティクルの保存ディレクトリを指定 
ARTICLE_URL 
【例】 
ARTICLE_URL = 'articles/{slug}/' 
アーティクルのURLを指定
SLUGIFY_SOURCE = 'basename' 
30 
•デフォルトは、SLUGIFY_SOURCE = 'title' 
•アーティクルのタイトルから、slugを生成 
•日本語のタイトルだと、カオスなURLに 
:title: Zipファイル一個で実行可能なPythonアプリケー ションを作ってみる 
ziphuairu-ge-deshi-xing-ke-neng- napythonapurikeshiyonwozuo-tsutemiru.html 
•SLUGIFY_SOURCE = 'basename' なら、ファ イル名からslugを作成できる
スタティックファイルのコピー先 
31 
EXTRA_PATH_METADATA = { 
'images/favicon.ico': {'path': 'favicon.ico'}, 
} 
EXTRA_PATH_METADATAで、ファイルを配 置するパスを指定する
フォーム 
Python関連ニュースなどの登録 
------------------------- 
:url: news/submit.html 
:save_as: news/submit.html 
:category: news 
ニュース登録フォーム 
++++++++++++++++++ 
.. raw:: html 
<form method="POST" action="/cgi-bin/submit_news.py"> 
<p> 
<label>タイトル <i>(必須)</i></label> 
<input name="title" id="input_title" size=80> 
<span class='form_sample'> 例: Python関連書籍 出版のお知らせ 
32 
submit_news.rst
www.python.jp 
33 
https://github.com/pyjug/pelican.python.jp

More Related Content

What's hot

すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!Genya Murakami
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Masashi Shibata
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門Norishige Fukushima
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたMITSUNARI Shigeo
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないことNorishige Fukushima
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかYuki Miyatake
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてalwei
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケットTakaaki Hoyo
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングAkihiko Matuura
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチンyohhoy
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはHideki Takase
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門masayoshi takahashi
 
Stack Buffer OverFlow
Stack Buffer OverFlowStack Buffer OverFlow
Stack Buffer OverFlowsounakano
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt AffinityについてTakuya ASADA
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Hiro H.
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミングYuma Ohgami
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2uchan_nos
 
Python 学習教材
Python 学習教材Python 学習教材
Python 学習教材Jun MITANI
 

What's hot (20)

すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!すごい constexpr たのしくレイトレ!
すごい constexpr たのしくレイトレ!
 
Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018Django REST Framework における API 実装プラクティス | PyCon JP 2018
Django REST Framework における API 実装プラクティス | PyCon JP 2018
 
組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門組み込み関数(intrinsic)によるSIMD入門
組み込み関数(intrinsic)によるSIMD入門
 
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみたIntro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
 
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと画像処理ライブラリ OpenCV で 出来ること・出来ないこと
画像処理ライブラリ OpenCV で 出来ること・出来ないこと
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうかBoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
 
カスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについてカスタムメモリマネージャと高速なメモリアロケータについて
カスタムメモリマネージャと高速なメモリアロケータについて
 
Scapyで作る・解析するパケット
Scapyで作る・解析するパケットScapyで作る・解析するパケット
Scapyで作る・解析するパケット
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
マルチコア時代の並列プログラミング
マルチコア時代の並列プログラミングマルチコア時代の並列プログラミング
マルチコア時代の並列プログラミング
 
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
 
FPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うにはFPGAをロボット(ROS)で「やわらかく」使うには
FPGAをロボット(ROS)で「やわらかく」使うには
 
何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門何となく勉強した気分になれるパーサ入門
何となく勉強した気分になれるパーサ入門
 
Stack Buffer OverFlow
Stack Buffer OverFlowStack Buffer OverFlow
Stack Buffer OverFlow
 
Interrupt Affinityについて
Interrupt AffinityについてInterrupt Affinityについて
Interrupt Affinityについて
 
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
 
UEFIベアメタルプログラミング
UEFIベアメタルプログラミングUEFIベアメタルプログラミング
UEFIベアメタルプログラミング
 
30分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.230分で分かる!OSの作り方 ver.2
30分で分かる!OSの作り方 ver.2
 
Python 学習教材
Python 学習教材Python 学習教材
Python 学習教材
 

Similar to Pelicanによる www.python.jpの構築

Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botdcubeio
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはkenhys
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of PythonTakanori Suzuki
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python Yasuhiro Matsuo
 
ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらsoishino
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門Tomoya Kawanishi
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大openrtm
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12Takanori Suzuki
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Pythonロフト くん
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころJunya Hayashi
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力ThinReports
 
Contao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてContao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてTakahiro Kambe
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Takayuki Shimizukawa
 
Contao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうContao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうTakahiro Kambe
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01Takeshi Komiya
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01BKohei KaiGai
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验Ryan Poy
 
Metahub for github
Metahub for githubMetahub for github
Metahub for githubSuguru Oho
 

Similar to Pelicanによる www.python.jpの構築 (20)

Python × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack botPython × Herokuで作る 雑談slack bot
Python × Herokuで作る 雑談slack bot
 
debexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするにはdebexpo(mentors.d.n)をハックするには
debexpo(mentors.d.n)をハックするには
 
「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python「Python言語」はじめの一歩 / First step of Python
「Python言語」はじめの一歩 / First step of Python
 
How to run P4 BMv2
How to run P4 BMv2How to run P4 BMv2
How to run P4 BMv2
 
Programming AWS with Python
Programming AWS with Python  Programming AWS with Python
Programming AWS with Python
 
ドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながらドキュメントの継続的改善―Sphinxを使いながら
ドキュメントの継続的改善―Sphinxを使いながら
 
いまさら聞けないRake入門
いまさら聞けないRake入門いまさら聞けないRake入門
いまさら聞けないRake入門
 
160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大160705-03 RTミドルウエア講習会・名城大
160705-03 RTミドルウエア講習会・名城大
 
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
「Python言語」はじめの一歩 / First step of Python / 2016 Jan 12
 
Tekton 入門
Tekton 入門Tekton 入門
Tekton 入門
 
Getting Started with Graph Database with Python
Getting Started with Graph Database with PythonGetting Started with Graph Database with Python
Getting Started with Graph Database with Python
 
Python におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころPython におけるドメイン駆動設計(戦術面)の勘どころ
Python におけるドメイン駆動設計(戦術面)の勘どころ
 
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
Ruby向け帳票ソリューション「ThinReports」の開発で知るOSSの威力
 
Contao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えてContao Open Source CMS / Contao 3.3を越えて
Contao Open Source CMS / Contao 3.3を越えて
 
Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018Sphinx customization for OGP support at SphinxCon JP 2018
Sphinx customization for OGP support at SphinxCon JP 2018
 
Contao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こうContao Open Source CMS / 3.3と、その向こう
Contao Open Source CMS / 3.3と、その向こう
 
ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01ドキュメントの話、しませんか? #428rk01
ドキュメントの話、しませんか? #428rk01
 
OSS開発勉強会-01B
OSS開発勉強会-01BOSS開発勉強会-01B
OSS開発勉強会-01B
 
Sohu邮箱的python经验
Sohu邮箱的python经验Sohu邮箱的python经验
Sohu邮箱的python经验
 
Metahub for github
Metahub for githubMetahub for github
Metahub for github
 

More from Atsuo Ishimoto

NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】Atsuo Ishimoto
 
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン行列演算とPythonの言語デザイン
行列演算とPythonの言語デザインAtsuo Ishimoto
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Atsuo Ishimoto
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティAtsuo Ishimoto
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cythonAtsuo Ishimoto
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールAtsuo Ishimoto
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみるAtsuo Ishimoto
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理Atsuo Ishimoto
 
Pythonのガベージコレクション
PythonのガベージコレクションPythonのガベージコレクション
PythonのガベージコレクションAtsuo Ishimoto
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Atsuo Ishimoto
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3kAtsuo Ishimoto
 

More from Atsuo Ishimoto (14)

Pythonの紹介
Pythonの紹介Pythonの紹介
Pythonの紹介
 
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
NumPyの歴史とPythonの並行処理【PyData.tokyo One-day Conference 2018】
 
行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン行列演算とPythonの言語デザイン
行列演算とPythonの言語デザイン
 
Django pgroonga
Django pgroongaDjango pgroonga
Django pgroonga
 
Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料Python 3.6 リリースパーティー 発表資料
Python 3.6 リリースパーティー 発表資料
 
tse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティtse - Pythonによるテキスト整形ユーティリティ
tse - Pythonによるテキスト整形ユーティリティ
 
python.jpの使い方
python.jpの使い方python.jpの使い方
python.jpの使い方
 
Introduction to cython
Introduction to cythonIntroduction to cython
Introduction to cython
 
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツールPyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
PyCon JP 2012 hands-on セッション/ FlaskによるWebアプリケーションの実装とプログラミングツール
 
Python3と向かい合ってみる
Python3と向かい合ってみるPython3と向かい合ってみる
Python3と向かい合ってみる
 
Pythonのシグナル処理
Pythonのシグナル処理Pythonのシグナル処理
Pythonのシグナル処理
 
Pythonのガベージコレクション
PythonのガベージコレクションPythonのガベージコレクション
Pythonのガベージコレクション
 
Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29Slide at PyCon mini JP on 2011/1/29
Slide at PyCon mini JP on 2011/1/29
 
String representation in py3k
String representation in py3kString representation in py3k
String representation in py3k
 

Pelicanによる www.python.jpの構築

  • 1. Pelican による www.python.jp の構築 2014/9/13 PyCon JP 2014 Atsuo Ishimoto
  • 2. 自己紹介 2 いしもと 石本 敦夫 あつお python.jp 管理人
  • 3. ㈱ UNCOVER TRUTH勤務 3 社員募集中!
  • 4. Python本を書きました 4 Python文法詳解 ← NEW パーフェクトPython
  • 5. 5 python.jp の歴史 Zope(2001年9月 ~) Zope2 Squishdot DTML
  • 6. python.org専用ツール (2012/9 ~) 6 YAML reStructuredText mako
  • 7. Pelican (2014/5 ~) 7 reStructuredText Markdown AsciiDoc jinja2
  • 8. Pelican Static Site Generator, Powered by Python 8 コンテンツ (reStructuredText, Markdown., HTML…) テンプレート (jinj2) HTML RSS CSS etc., http://docs.getpelican.com 設定ファイル
  • 10. コンテンツ 10 ブログのエントリ 日付・カテゴリ・タグなどを設定 サイトを構成する静的なページ 著者紹介、Aboutなど アーティクル ページ
  • 11. テンプレート 11 Pelican テーマ集 https://github.com/getpelican/pelican-themes
  • 12. Pelicanのインストール 12 pip3 install pelican Markdownを使う場合は、 pip3 install Markdown を追加
  • 13. Pelicanサイトの作成 13 $ pelican-quickstart Welcome to pelican-quickstart v3.3.0. This script will help you create a new Pelican-based website. Please answer the following questions so this script can generate the files needed by Pelican. Where do you want to create your new web site? [.] > What will be the title of this web site? Test Site > Who will be the author of this web site? Atsuo Ishimoto … pelican-quickstart コマンドでひな形を作成
  • 14. pelican-quickstart で生成されるファイル 14 プロジェクトディレクトリ ├── content 作成した記事を格納 │ └── (pages) ├── output 記事を変換したHTMLなど │ └── (html, css, etc.,) ├── develop_server.sh テスト用HTTPサーバ ├── fabfile.py サイト構築用fabfile ├── Makefile ビルド用 Makefile ├── pelicanconf.py 設定ファイル └── publishconf.py 本番環境用設定ファイル
  • 15. contentディレクトリ 15 content │ ├─ アーティクルA.rst 作成した記事 ├─ カテゴリ1 カテゴリ1の記事 │ ├── アーティクルA.rst │ └── アーティクルB.rst ├─ カテゴリ2 格納カテゴリ2の記事 │ └── アーティクルC.rst ├─ pages ページを格納 │ ├── ページ1.rst │ └── ページ2.rst ├─ images 画像ファイル等 │ └── picture1.png
  • 16. reStructuredText 16 Python公式ドキュメントで採用 高機能 拡張性 デフォルト設定が、Pythonドキュメントの記述用 西洋語向けのマークアップ
  • 17. Markdown 17 Githubなどでおなじみ シンプル・覚えやすい
  • 18. 記事のメタデータ 18 記事タイトル ############## :date: 2014-09-14 12:00 :tags: Python, プレゼン :category: python :slug: file_name rstのサンプル 本文中や、ファイル名にメタデータを記述 •タイトル •日付 •タグ •著者 •urlのパス •etc
  • 19. メタデータでURL/ファイル名を指定 19 記事タイトル ############## :save_as: path/to/save/index.html :url: path/to/save/ output/path/to/save/index.html を作成 ページへのリンクは、 path/to/save/ となる
  • 20. カテゴリ 20 pelicanconf.py で設定 DEFAULT_CATEGORY = "blog" メタデータで指定 記事タイトル ############## :category: python ディレクトリで指定 Contentディレクトリの、サブディレ クトリ名をカテゴリとする ex) ./content/python/article.rst デフォルトカテゴリ
  • 21. ページ間リンク 21 ページ間リンクの記述方法 ######################### rstでの `相対リンク <{filename}page1.rst>`_ と `絶対リンク <{filename}/page1.rst>`_
  • 22. 構文ハイライト 22 .. code-block:: python3 def say(): print('hello') Pygmentsで構文ハイライト
  • 23. ページ 23 作成方法 content/pages ディレクトリに作成 ブログエントリ以外の、Aboutや著作権表示など 表示方法 •DEFAULT_CATEGORY = True ならリンクを表示 •リンクしないページは、メタデータで :status: hidden
  • 24. スタティックファイル 24 content │ ├─ images │ └── picture1.png ./content/imagesに配置 ./output/images/ にコピーされる ./content/images/picture1.png → ./ountput/images/picture1.png
  • 25. サイトのビルド 25 コマンド 機能 make html プロジェクトをローカル環境用にビルドします (pelicanconf.pyを実行) make publish プロジェクトをプロダクション環境用にビルド します (pelicanconf.py + publishconf.py を実行) make regenerate ファイルの変更を検出すると自動的にビルド します make devserver develop_server.sh を実行し、プロジェクト の自動ビルド・テスト用HTTPサーバを起動 します
  • 26. 設定ファイル 26 pelicanconf.py publishconf.py •make html と make publish で使用 •make publish でのみ使用 •プロダクション環境用
  • 27. テーマ 27 pelican-themesコマンド 指定方法 pelicanconf.py で、ディレクトリ名を指定 THEME = "my_theme" テーマ設定コマンド $ pelican-themes --list notmyidea two-column@ simple
  • 28. 記事インデックスページ 28 インデックスページ /index.html すべてのアーティクルのインデックス カテゴリ別インデックスページ /category/カテゴリ名/index.html カテゴリごとに作成される、アーティクルの インデックス その他、タグ別・ 著者別・年別など
  • 29. アーティクルの保存パスとURL 29 ARTICLE_SAVE_AS 【例】 ARTICLE_SAVE_AS = 'articles/{slug}/index.html' アーティクルの保存ディレクトリを指定 ARTICLE_URL 【例】 ARTICLE_URL = 'articles/{slug}/' アーティクルのURLを指定
  • 30. SLUGIFY_SOURCE = 'basename' 30 •デフォルトは、SLUGIFY_SOURCE = 'title' •アーティクルのタイトルから、slugを生成 •日本語のタイトルだと、カオスなURLに :title: Zipファイル一個で実行可能なPythonアプリケー ションを作ってみる ziphuairu-ge-deshi-xing-ke-neng- napythonapurikeshiyonwozuo-tsutemiru.html •SLUGIFY_SOURCE = 'basename' なら、ファ イル名からslugを作成できる
  • 31. スタティックファイルのコピー先 31 EXTRA_PATH_METADATA = { 'images/favicon.ico': {'path': 'favicon.ico'}, } EXTRA_PATH_METADATAで、ファイルを配 置するパスを指定する
  • 32. フォーム Python関連ニュースなどの登録 ------------------------- :url: news/submit.html :save_as: news/submit.html :category: news ニュース登録フォーム ++++++++++++++++++ .. raw:: html <form method="POST" action="/cgi-bin/submit_news.py"> <p> <label>タイトル <i>(必須)</i></label> <input name="title" id="input_title" size=80> <span class='form_sample'> 例: Python関連書籍 出版のお知らせ 32 submit_news.rst