「Org-mode」タグアーカイブ

Org-modeでリンクのfont-lockがおかしくなる問題とその対策

Org-modeで日本語を書いていると、リンクのfont-lockがおかしいことになります。
リンクの終端が空白か改行文字まで伸びてしまうのです。

http://i.imgur.com/VMS3x.png

現象からして空白で単語を区切らない日本語特有の問題だしなーと半ば諦めていたのですが、一念発起、あのorg.elの正規表現樹海を散々さまよった結果、どうにかなったので書き留めておくことにします。

といっても、たいしたことはしなくてよくて

(setq org-activate-links '(date bracket radio tag date footnote angle))

とするだけです。

詳しく知りたい方は、org-activate-linksのDocstringをどうぞ。

ずっと悶々としていたのでかなりすっきりです。

Org-modeとMS Wordの連携

突然ですが、Microsoft Wordをご存知ですか。とってもお節介で、そのくせ肝心なところに気が回ってなくて、もう本当に素敵です。これだけ素敵なアプリケーションだから「書類はwordで作成してください。」とついお願いしてしまうようなファンがたくさんいるんですね。

こうなると、Org-modeで作った文章もWordにエクスポートしたくなるというのが人情というものです。

Org-modeは7.6からOpenDocumentText形式でのエクスポートをサポートしているので、ワープロソフトとの連携もスムーズに行えます。というわけで、今回はOrg-modeとODTの連携を試してみます。

準備

Org-modeは頻繁にバージョンアップするので、まずは、手元のOrg-modeのバージョンを確認しておきます。(org-version) を評価することで確認できます。バージョンが古ければ、アップデートする必要があります。こちらからダウンロードしてインストールしておきましょう。

Org-modeをインストールしてもODTのエクスポート機能はすぐに使えません。この機能はまだ開発半ばであるということで、contrib扱いとなっていますので、Org-modeのcontribディレクトリの中のlispディレクトリにロードパスを通してからorg-modulesにorg-odtを追加します。

(setq org-modules (append org-modules '(org-odt)))

これで、準備は完了です。

エクスポート

実際にODTでエクスポートしてみます。お題はこの日記にしましょう。この日記もorg2blogを使ってorg-modeで書いているので、そのままエクスポートすればよいです。

せっかくなのでいろいろ試してみましょう。んー例えば画像とか。

http://sheephead.homelinux.org/wp-content/uploads/2011/11/wpid-org-mode-unicorn.png

表とかはどうでしょう

Org-mode AAA BBB
Word CCC DDD
Writer EEE FFF

早速、エクスポート。Org-modeでは、どんな形式のエクスポートでも最初はC-c C-e となってます。そう押したらば、すかさず「o」。これでODT形式のファイルが出力されているはずです。

出力したファイルがこちらになります。
画像や表もうまく出力されてますね。srcブロックもうまく表現されています。これで、Wordのお世話になることもだいぶ減りそうです。

スタイルを変更したい時は、Org-mode/contrib/odt/styles の中にあるxmlに手を加えることになりますが、膨大な量です。少なくとも、事前にODTの仕様についてはある程度理解しておく必要がありそうです。

Org-modeはこの他にもASCII、Freemind、Docbook、iCal等々多くの形式へのエクスポートが可能です。詳しくは、M-x org-info で Exportingの章を参考にしてください。

また、現在有志の方々でOrg-modeのinfoの翻訳作業を進めています。まだ査読作業が残っていますが、英語がつらいという方は参考にされてください。

org-mode-doc-ja/org-ja – GitHub

ちなみに、Exportingの章の翻訳は私が担当しました。原文の方が読みやすい可能性もありますが悪しからず。

org-modeのマニュアル翻訳プロジェクトに参加してみた

公私ともども、とてもお世話になっているorg-mode。この日記もorg-modeを使って書いています。

Org-Mode: Your Life in Plain Text

ひっじょーに多機能なのですが、当然その分マニュアルも膨大で、簡単に読めるような代物でありません。
この膨大なマニュアルの日本語訳を公開されているのがmobilememoさん。僕もかなりお世話になっております。

OrgMode – Emacs上のアウトライナー

しかし、org-modeがかなり活発に開発が進められていることもあって、mobilememoさんが訳されたものと現行のマニュアルではかなり差異が出てきています。ちなみにmobilememoさんが訳された時のマニュアルはだいたい100ページくらいだったそうですが、現在(Ver7.5)のマニュアルは200ページ越え。この数年で倍近く増えています。

そのような中、twitterで@takaxpさんがorg-modeのマニュアル翻訳作業を開始するというのを見まして、力になるのかわかりませんがプロジェクトに参加してみることにしてみました。

プロジェクトに参加するには

org-modeのマニュアルが膨大な事もあり、現在も翻訳の協力者を募集しているところです。興味を持たれた方は、まずMLに登録してみてください。
Org2ja-devel 案内ページ

twitterアカウントをお持ちの方は、#org2jaハッシュタグも購読するのをおすすめします。
Twitter / Search – #org2ja

プロジェクトに参加している皆さんのリストもありますので、そちらをフォローするのも良いかもです。
Twitter / @myuhe/org2ja

実際の翻訳作業はgithub上で行なうことなっていまして、現在は翻訳フローの試行作業も兼ねた翻訳が始まっています。翻訳のやり方はgithub上にとても丁寧な説明がありますので読んでみてください。
org-mode-doc-ja/org-ja – GitHub

org2jaハッシュタグをつけてtwitterでつぶやくとどなたかが答えてくれるかもしれません。
githubアカウントをお持ちの方で、翻訳作業を手伝っていける方はauthorのtakaxpさんにorganization登録の依頼をしてみましょう。登録が完了すれば早速翻訳作業を始められます。
githubの使い方がわからないという方でも大丈夫です。メンテナーにリポジトリへの登録作業を依頼することで翻訳作業を行なうことができます。まずは、MLなどを通じて担当分の翻訳ファイルを入手してみてください。

オープンソースソフトウェアと、ドキュメントの翻訳

僕のPCの中には、R、Emacsをはじめオープンソースコミュティによって開発されたソフトウェアが溢れています。そういったソフトウェアのおかげで楽しい日々を過させてもらってるわけで、恩返しというとおこがましいですが僕にもなにかできないものかなーとぼんやり考えていました。

それと合わせて、感じていたのが日本語ドキュメントの保守について。RやEmacsも優れたドキュメントが無償で公開されていて、すでに日本語に翻訳されているのですが、最新のバージョンに追随できていないものがほとんどです。とはいうもののドキュメントの保守作業というのはつらい作業なので多くの方の協力が必要です。

今回のorg-modeのドキュメント翻訳プロジェクトを契機に、オープンソースソフトウェアのドキュメントをみんなで翻訳してシェアしよう!! という雰囲気になってくると素敵だなーと思います。

というわけで、興味のある方、少しの翻訳作業からでも参加可能なので、是非参加してみてください。

cacoo.elをorg-modeで使ってみた

遅ればせながら、最近になってcacoo.elを使わせてもらってます。実はずっとcacoo専用のものだと思いこんでいたのですが、とても汎用性のあるツールだということに気づきました。

Emacsでスムーズに図形編集ができるようになるcacoo.elを作ってみた – 技術日記@kiwanami

というわけで、早速org-modeで快適に使えるようにしてみました。

まずは、org-modeのリンクの記法に対応するよう、cacoo:img-regexpに追加します。

(setq cacoo:img-regexp 
     '("$latex displaystyle img:\(.*\)$[^]nr]*$latex " ; imgのデフォルト記法
       "$latex displaystyle f:\(.*\)$[^]nt]*$"   ; はてなフォトライフ記法
       "<img src=["']\(.*\)["'][ ]*\/>[^nt]*$latex " ; HTMLのimgタグ
       "$latex displaystyle .*\[\(.*\)$\][^]nr]*$" ;org-modeの記法
       ))

そのままだと、リンクのアンダーラインが表示されてすごく見にくいので次ようなdefadviceを書いて対処。

(defadvice toggle-cacoo-minor-mode
    (around my-toggle-cacoo-minor activate)
    (if (string-equal mode-name "Org")
        (if cacoo-minor-mode
            (progn
              ad-do-it
              (set-face-underline-p 'org-link t))
          (progn
            (set-face-underline-p 'org-link nil)
            ad-do-it))
      ad-do-it))

これで、使い勝手が良くなりました。 画像をよく出力する、例えばRとかとcacoo.elの相性はとても良さそうです。もう少し活用法を考えてみます。

統合執筆環境 org-mode (Emacs Advent Calendar 22日目)

この日記は、Emacs Advent Calendarの22日目です。
Emacs Advent Calendar jp: 2010 : ATND

昨日はhitode909さんでした。 zizo.elのご紹介です – hitode909のダイアリー

さて、org-modeについては、Emacs Advent Calendarでもid:handlenameさん、id:t_rakaishiさんが素晴しい記事を書かれています。

org-modeでTODO管理 – handlename::blog

org-modeとAnythingが交差するとき,物語は始まる – r_takaishiの日記

この期に及んで、さらにorg-modeのことを書くという暴挙に出たわけですが、もともと空気読むのは得意でもないので気にせず書くことにします。

Born to be org-mode !!

このところ、メモとり、アイデア出し、などなど諸々の書きものは全てorg-modeで書いています。org-modeで書くメリットとしては、様々なフォーマットでエクスポートできるというところがあります。

さらに、以前にも書いたorg-babelを使えば、いろいろなプログラミング言語をorg-mode上で実行できるようになります。

Emacs上のマルチな実行環境、Org-babel

いろいろな言語をorg-modeで統合的に扱い、必要に応じて任意のフォーマットにエクスポート、てな感じでとても柔軟に使えることがorg-modeの魅力だと思います。

ただ、org-modeは、エクスポートするまではすでに十分すぎるほどの機能があるのですが、いざ公開しようとなると結構面倒です。 org-publishというものもあるのですが、いかんせん設定が面倒でいまだに試していません。

というわけで、今回はお手軽に公開する方法をいくつか紹介しながら、org-modeの便利機能にも触れていこうかなと思います。

org-modeでブログを書こう

お手軽に文書を公開するならば、やっぱりブログですよね。org-modeでは、ブログに投稿するのもすこぶるお手軽にできます。 ちなみにこの文章もorg-modeで書いています。

org-modeからブログに投稿するには、org2blog.elが便利です。READMEにはwordpress用と書いてますが、XML-RPCに対応したブログならどうにかしたら使えるんではないかと思います。

まずは、githubからorg2blog.el、metaweblog.elを落としてきます。

punchagan/org2blog – GitHub

ちなみに、blogger/blogspotにはorg-googleclというのがあるようですね。

rileyrg/org-googlecl – GitHub

閑話休題、以下のように.emacsあたりに書いておきます。

なお、org2blog.elはorg2blog-blog-alistに追加することで、複数のブログに対応させることもできます。

(require 'org2blog)                                                                                  

 (setq org2blog-blog-alist
       '(("Blog-name" ;ブログの名前
          :url "http://yourdomain/xmlrpc.php" ;; xmlrpc.phpのURLを書く
          :username "myname"
          :default-title "Hello"
          :default-categories ("default")
          :tags-as-categories nil)))

実際に使ってみます。まずはM-x org2blog-loginでログインして、M-x org2blog-new-entryでテンプレートを呼びだします。

この時点でorg2blogで定義されているマイナーモードが動いていて、次のようなキーバインドが使えます。

・ 下書きとして保存 C-c d
・ 公開 C-c p

編集している時のメジャーモードはorg-modeでorg2blog-modeはマイナーモードでしかありません。

つまり、ふつーのorg-modeとして使えるわけで、公開や下書きを保存しなくともローカルにファイルとして保存しておくこともできます。

僕の使い方としては、雑多なメモを.orgでdropboxに保存しておいて、まとまりそうなものはorg2blogでブログに公開、という使い方をしてます。

また、内容を確認したい時は、M-x org-export-as-html-and-open してブラウザで確認するのが便利です。下書きとして保存してプレビューなど、まどろっこしいことをせずにサクッと確認できます。

org2blogとorg-babelの連携

投稿して公開できるならどこぞのブログエディタとたいして変わりません。org-modeでブログを書けることのメリットはorg-modeの便利な機能と連携できるところにあります。

特にorg-babelとの連携はとても素晴らしいです。例えばフロー図を書きたい時は、ditaaがあります。

http://sheephead.homelinux.org/wp-content/uploads/2010/12/wpid-ditaa1.png

Graphvizでも書いてみましょう。

http://sheephead.homelinux.org/wp-content/uploads/2010/12/wpid-Graphviz1.png

こういった作図はわざわざ、他のアプリで作った画像を貼りつけたり、他のバッファに移動する必要すらありません。全てorg-modeの中で完結してしまいます。

また、ブログにソースコードを貼りつける時も、シンタックスハイライトはorg-modeの機能でできますし、org-babelを使えばソースコードを貼りつけた時点ですぐ実行することもできます。

対応する言語もどんどん増えていってるようですね。

Babel: Languages

org-modeをまだ使ってない方もこれを期にorg-modeでブログを書いてみると良いんではないかと思います。

org-modeでドキュメントを書こう

さて、先ほど紹介したorg2blogのgithubを見てみた方、気づいたでしょうか。READMEがorg-modeで書かれていることを!!

githubはorg-modeの記法に一部対応しているのです。そう、githubに公開している作品のドキュメントを慣れ親しんだorg-modeで書くことができるのです。

githubだけではありません。gistでも当然org-modeが使えます。

というわけで、gistでどういうふうに書けるのか試してみました。画像の表示やbegin_srcタグなど対応できていないものもありますが、簡単なドキュメントならば十分なんではないでしょうか。

gist: 723303 – GitHub

gistをもっと使いたくなってきましたね!!そんな方は拙作anything-gistなんていかがでしょうか。anything-gistはみんな大好きanythingのインターフェイスでgistを閲覧し、ローカルで変更した内容をサーバサイドにpushできる機能を付加したelispです。詳しくは以下の日記でどうぞ。

Emacs上でgistを編集して、サクッと更新するためのanything-gist.el

org-modeは止まらない

ちょっと長くなってしまいましたが、いかがだっだでしょうか。ドキュメント生成ツールとしては、Sphinx など便利なツールもありますが、Emacsで使うには、org-modeかなり分があると思います。

org-modeは積極的に開発がされていて、広大なEmacsの中においても最も勢いがある分野の一つでしょう。

しかも、org-mode自体もすでに非常に大規模なので、一息に全てを把握することは最早不可能です。これからorg-modeを始める方はTODO管理やブログ書きなど目的を絞って勉強しはじめると良いかもしれないですね。

さて、明日はkozo2さんです。楽しみ!!

The Org Mode 7 Reference Manual - Organize Your Life with GNU Emacs

著者/訳者:Carsten Dominik

出版社:Network Theory.( 2010-11-26 )

定価:¥ 1,648

Amazon価格:¥ 1,779

ペーパーバック ( 282 ページ )

ISBN-10 : 1906966087

ISBN-13 : 9781906966089


Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

著者/訳者:るびきち

出版社:技術評論社( 2010-08-03 )

定価:

Amazon価格:¥ 21,293

単行本(ソフトカバー) ( 384 ページ )

ISBN-10 : 4774143278

ISBN-13 : 9784774143279


Emacs上のマルチな実行環境、Org-babel

いきなりですが、 Org-modeをご存知でしょうか。
Org-modeはEmacsで動作する高機能のアウトラインツール。何それ、Org-modeな方は r_takaishiさんの資料を一読される事をおすすめします。
org-mode を使おう

もっと知りたいという方は、以下のサイトを読んでOrg沼にはまってみるのもいいかもしれません。
OrgMode – Emacs上のアウトライナー

Org-modeはとにかく機能が豊富で、マニュアルも 200ページ近い大著です。実際、僕もごく一部の機能しか使いこなせていません。
にも関わらず、そのOrg-modeのフレームワークを利用した、これまた便利なツールを発見してしまいました。

Org-babel

Org-babelは、Org-modeを拡張するツールで、あらゆるプログラミング言語をorg-mode内で実行可能にします。圧巻なのは対応している言語の数で、なんと22の言語に対応しています。
Org-babel: Reference
聞いたこともないような言語もちらほらと。
ちなみに、名前にもなっているbabelですが、自然言語がバラバラになったきっかけの伝承として有名なバベルの塔のことを指しています。あらゆる言語をOrg-modeで実行可能にする、といった意味が込められているみたいです。
さらにちなみに、babelと名の付くプロジェクトって結構ありますね。GPSBabelもその一つですけど、やはりオレオレ仕様の固まりであるGPSのデータフォーマットを相互変換させるというとても素晴らしいプロジェクトで個人的にもかなりお世話になっています。つか、そろそろGoogleかGarminあたりが共通仕様提案すべきだと思うんですけどね。あ、ESRIはそんなことしたら駄目ですからね。糞フォーマットしか出さないから。
GPSBabel: convert, upload, download data from GPS and Map programs

設定

まずはOrg-modeがないと始まりません。Emacs23だとデフォルトで入っているのですが、バージョンが古いです。せっかくなので最新版使いましょう。
Org-Mode: Your Life in Plain Text
そしたら、Org-modeのファイル群にあるcontrib/lispディレクトリにload-pathを通しておいて.emacs辺りに(require ‘org-babel-init)と書いておけば良いです。
デフォルトで、使える言語はR,emacs-lisp,sh,perlpython,rubyなので、その他の言語を使いたい時は(require ‘org-babel-hogehoge)などとしておけば良いようです。

org-babelでは、ブロックを頻用します。yasnippetをすでに使っている方は使ってみると効率があがるかもしれないですね。
まずは、githubからorg-mode用のsnippetを取ってきます。
RickMoynihan’s yasnippet-org-mode at master – GitHub

yasnippetが新しめのバージョンであれば(0.6.0以上?)、以下のコードを.emacsあたりに書いておきます。
[cpp]
(defun yas/org-very-safe-expand ()
(let ((yas/fallback-behavior ‘return-nil)) (yas/expand)))

(add-hook ‘org-mode-hook
(lambda ()
;;yasnippet (using the new org-cycle hooks)
(setq ac-use-overriding-local-map t)
(make-variable-frame-local ‘yas/trigger-key)
(setq yas/trigger-key [tab])
(add-to-list ‘org-tab-first-hook ‘yas/org-very-safe-expand)
(define-key yas/keymap [tab] ‘yas/next-field)))

[/cpp]

1分で始めるOrg-babel

使い方はとても簡単。#+BEGIN_SRCで始まり#+END_SRCで終るブロック内に何がしかのコードを書いていきます。emacs-lispだと例えばこんな感じ。

[cpp]
#+BEGIN_SRC emacs-lisp
"hoge"
#+END_SRC
[/cpp]

ブロック内でC-c ‘ とすると編集用のバッファが各言語のモードで開きます。使いなれたモードでコーディングできるのですこぶる便利。
ひとしきり書きおわったなら、同じくブロック内でC-c C-cすると実行結果が返ってきます。こんだけです。

言語間で連携

これだけだとあんまりなので、応用編。各言語の実行結果はいったんorg-modeのテーブルなどに置きかえられることによって、共有することが可能です。というわけで、簡単な例を何個か。シェルスクリプトとelispの実行結果をRに渡しています。orgファイルからコピペしただけなのでちょっとわかりづらいかも。。。
[cpp]
* 複数言語連携の例
** ホームディレクトリの容量割合を円グラフにする。
シェルスクリプトの結果をRで描画

#+srcname: sh2R
#+BEGIN_SRC sh
cd ~ && du -sc * |grep -v total
#+END_SRC

#+results: sh2R
| 1284 | Desktop |
| 1147760 | Documents |
| 649640 | Downloads |
| 8 | Mail |
| 4 | Music |
| 4 | Pictures |
| 4 | Public |
| 4 | Templates |
| 4 | Videos |
| 4 | examples.desktop |
| 15032 | workspace |
| 1813748 | 合計 |

#+BEGIN_SRC R :session ex :file dirs.png :var dirs=sh2R
pie(dirs[,1], labels = dirs[,2])
#+END_SRC
出力結果
#+results: pie-chart
[[file:dirs.png]]

** 行列のたし算
emacs lispのリストをRに渡す。
#+srcname: elisp2R
#+BEGIN_SRC emacs-lisp
‘((1 2 3)
(4 5 6)
(7 8 9))
#+END_SRC

受けとったリストを使って計算
#+BEGIN_SRC R :session ex :var e2r=elisp2R
e2r + e2r
#+END_SRC

出力結果
#+results:
| 2 | 4 | 6 |
| 8 | 10 | 12 |
| 14 | 16 | 18 |

[/cpp]

さくっと公開してみる

org-modeの良いところとして、HTMLやpdfなどいろいろな媒体でさくっと公開できるというのもあると思います。当然Org-babelもその機能を存分に生かせるようになってます。次のorgファイルは、先ほどの例に何個加筆したものですが。。。
[cpp]
#+TITLE: Org-babelの使い方
#+AUTHOR: myuhe

* Rで使ってみる
簡単な計算をしてみる。
#+BEGIN_SRC R
x <- 1:10
mean(sqrt(x))
#+END_SRC

ブロック内でC-c C-cすると実行される。
#+results:
: 2.24682781862041

グラフの出力も可能。埋めこんだ形で出力される。
#+BEGIN_SRC R :file density.png
plot(density(rnorm(100)))
#+END_SRC
出力結果
#+results:
[[file:density.png]]

* Pythonの例
単純な計算
#+begin_src python
a = 1
b = 2
return a + b
#+end_src
pythonの場合、出力には明示的にreturnしてあげる必要がある。
#+results:#+results:
: 3

* 複数言語連携の例
** ホームディレクトリの容量割合を円グラフにする。
シェルスクリプトの結果をRで描画

#+srcname: sh2R
#+BEGIN_SRC sh
cd ~ && du -sc * |grep -v total
#+END_SRC

#+results: sh2R
| 1284 | Desktop |
| 1147760 | Documents |
| 649640 | Downloads |
| 8 | Mail |
| 4 | Music |
| 4 | Pictures |
| 4 | Public |
| 4 | Templates |
| 4 | Videos |
| 4 | examples.desktop |
| 15032 | workspace |
| 1813748 | 合計 |

#+BEGIN_SRC R :session ex :file dirs.png :var dirs=sh2R
pie(dirs[,1], labels = dirs[,2])
#+END_SRC
出力結果
#+results: pie-chart
[[file:dirs.png]]

** 行列のたし算
emacs lispのリストをRに渡す。
#+srcname: elisp2R
#+BEGIN_SRC emacs-lisp
‘((1 2 3)
(4 5 6)
(7 8 9))
#+END_SRC

受けとったリストを使って計算
#+BEGIN_SRC R :session ex :var e2r=elisp2R
e2r + e2r
#+END_SRC

出力結果
#+results:
| 2 | 4 | 6 |
| 8 | 10 | 12 |
| 14 | 16 | 18 |

[/cpp]
これをhtmlに変換すると以下のようになります。ちなみに変換はorg-export-as-htmlを実行しただけ。楽ちん。

Org-babelの使い方

Org-babelはマルチな実行環境

Org-babelはorg-modeを常用する人にとっては、Org-modeがお手軽な実行環境にもなるわけですので、導入しといて損はないと思います。後、メリットがありそうな人といえば。。。
・Rでレポートを書いている学生さん
Org-babelでは、かなりR関連の機能が充実しています。これを使えば、出力したグラフなどを切り貼りすることなく、ひたすら org-modeを編集していくだけで素晴らしいレポートができるんではないかな、と思います。
・オレオレWikiとかでコーディングメモを取っている人。
本業がアウトラインツールであるOrg-modeなので、整理しながら編集していくことがとても得意です。 Org-babelではその上に実行環境まで付いてくるので、ちょこちょこコード書いては実行してまとめていくなんてこともできます。個人的にはこういった使い方をしていこうかな、と思っています。

Org-babelはまだ できたばかりでもあって、実は結構バギーだったりしますが、それでもこのお手軽感は魅力。 org-mode使ってない、という方もこれを機に試してみるといいかもですね。

参考

Org-babel: Introduction
Org-babel: Reference
Emacs org-modeを使ってみる: (40) org-babel-Rを使う1/2 – 屯遁のパズルとプログラミングの日記
Emacs org-modeを使ってみる: (41) org-babel-Rを使う2/2 – 屯遁のパズルとプログラミングの日記

The Org Mode 7 Reference Manual - Organize Your Life with GNU Emacs

著者/訳者:Carsten Dominik

出版社:Network Theory.( 2010-11-26 )

定価:¥ 1,648

Amazon価格:¥ 1,779

ペーパーバック ( 282 ページ )

ISBN-10 : 1906966087

ISBN-13 : 9781906966089


Emacsテクニックバイブル ~作業効率をカイゼンする200の技~

著者/訳者:るびきち

出版社:技術評論社( 2010-08-03 )

定価:

Amazon価格:¥ 21,293

単行本(ソフトカバー) ( 384 ページ )

ISBN-10 : 4774143278

ISBN-13 : 9784774143279