パーソナルツール
現在の場所: ホーム takalog Sphinx Advent Calendar 7日目: 異なった環境で Sphinx と blockdiag とかを使う
書いた本
Plone 完全活用ガイド の Chapter 1, 2, 3, 11 を執筆しました。
plone のインストール、使い方から、機能・デザインのカスタマイズ、プロダクトの作り方まで、 plone のすべてがぎゅっと詰まっている書籍になっていると思います。
plone に興味がある人から、すでに使いこなしている方まで、ぜひ読んでみてください。
Plone 完全活用ガイドのサポートページ
« 2017March »
Su Mo Tu We Th Fr Sa
      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 29 30 31  
このBlogについて
鈴木たかのりです。とりあえず日記っぽく雑多なことを書き込んでいこうと思っています。 zope/plone関係の技術的な内容については http://takanory.net の方にまとめていこうと思います。 コメント・ツッコミはご自由にどうぞ。
twitter facebook linkedin foursquare
カテゴリ
android (16)
av (27)
books (35)
coreblog (49)
ds (22)
emacs (8)
ferret (24)
google (34)
icecream (44)
lego (71)
mac (22)
misc (75)
moblog (277)
movie (33)
pc (44)
plone (339)
puzzle (43)
python (66)
server (67)
snowscoot (9)
software (125)
sports (40)
suidou (30)
winds (47)
 
文書操作

Sphinx Advent Calendar 7日目: 異なった環境で Sphinx と blockdiag とかを使う

作成者 takanori投稿日 2012年12月08日 00時02分 最終変更日時 2012年12月13日 11時40分

Sphinx Advent Calendar 2012 の7日目です。 昨日は @GoingMyWayNet さんの Sphinx と MeCAB でナレッジベース風ツールを作る | GoingMyWay でした。

おそらくみなさんはたくさんの人でリレーするこのアドベントカレンダーよりも Sphinx Advent Calendar 2012 (全部俺) の方が気になっていると思いますが、少しお付き合いください。

私は今年の9月に成功裏のうちに開催された PyCon JP 2012 の併設イベント SphinxCon JP 2012 で「社内でのSphinx、reSTの広め方」と題して発表をしました。 以下が発表資料ですが、ここではその内容のフォローをちょっとしようと思います。

Sphinx を使ったことがないチームで、みんなで Sphinx を使って基本設計書を書くことにしました。 Sphinx だけでなく、画面遷移図とかを書くための blockdiag と、シーケンス図を書くための seqdiag も使いました。

先ほどの発表資料の19ページ目で説明したんですが、以下のようなさまざまな環境が混在している状況で、それぞれの人が快適に書けるようにする方法を模索していました。

  • Windows(メンバー)/Linux(ドキュメントをbuildするサーバー)
  • Sphinx なし/Sphinx のみ/Sphinx + blockdiag + seqdiag

ここで問題になるのは、Sphinx のみの人とSphinx + *diag 環境の人で問題が出なくすることと、Windows 環境と Linux 環境で *diag が正常に動くようにすることでした。

Sphinx のみと *diag ありの切り分け

blockdiag とか使うときは blockdiag ディレクティブを指定しますが、blockdiag が入っていない環境でも警告は出ますがエラーは特に出ません。

.. blockdiag::

   blockdiag admin {
     top_page -> config -> config_edit -> config_confirm -> top_page;
   }

しかし、blockdiag を使用するためには conf.py に以下のように記述する必要があります。

extensions = ['sphinxcontrib.blockdiag']

blockdiag_fontpath = '/usr/share/fonts/truetype/ipafont/ipagp.ttf'

この状態で blockdiag が入っていない環境で make html を実行すると以下の様にエラーとなります。

$ make html
sphinx-build -b html -d _build/doctrees   . _build/html
Running Sphinx v1.1.3

Extension error:
Could not import extension sphinxcontrib.blockdiag (exception: No module named sphinxcontrib.blockdiag)
make: *** [html] Error 1

これを回避するためには、blockdiag があるかどうかを import で調べてから、設定を行うと回避できます。seqdiag も同様に設定すればOKです。

extensions = []
try:
    import sphinxcontrib.blockdiag
    extensions.append('sphinxcontrib.blockdiag')
    blockdiag_fontpath = '/usr/share/fonts/truetype/ipafont/ipagp.ttf'
except:
    pass

Windows 環境と Linux 環境

Windows 環境と Linux 環境で *diag を使用するためには、それぞれの環境で正しいフォントを指定する必要があります。

そこで、python の sys.platform を使って環境の切り分けを行います。 あとはここで設定した fontpath を blockdiag_fontpath, seqdiag_fontpath に指定すればOKです。(ここでは Mac にも対応しています)

import sys
if sys.platform == 'win32':
    fontpath = 'C:\Windows\Fonts\msmincho.ttc'
elif sys.platform == 'darwin': # Mac
    fontpath = '/Library/Fonts/Osaka.ttf'
else: # linux
    fontpath = '/usr/share/fonts/truetype/ipafont/ipagp.ttf'

(12月13日)追記

blockdiag_fontpath には パス文字列の配列を指定することで環境の違いを吸収することができ るそうなので、上記のようなめんどくさいことはしなくていいようです。:

fontpath = ['C:\Windows\Fonts\msmincho.ttc', # for Windows
            '/Library/Fonts/Osaka.ttf', # for Mac OS
            '/usr/share/fonts/truetype/ipafont/ipagp.ttf', # for Linux
           ]

このあたりは実際に会社であーでもないこーでもないとやっていたときに、現会長の @tk0miya さんと現副会長の @shimizukawa さんに教えてもらいました。

明日はその清水川先生の出番です。よろしくおねがいします。

カテゴリ
python python
トラックバック用URL:
http://takanory.net/takalog/1293/tbping
コメントを追加

下のフォームに記入してコメントを追加できます。平文テキスト形式。

(必須)
(必須)
(必須)
(Required)
Enter the word

Powered by vine linux, python, zope, plone, coreblog