Obsidianで日本語小説を書く設定

Obsidian
Obsidian小説用設定サンプル

はじめに

 この記事は以下のような方を対象に書いています。

  • Obsidian? 何それ知らん……
  • PCやモバイルをまたぐ環境で小説を書きたい
  • 小説を書くのはプレーンテキストエディタで十分 

なぜObsidian?

 長らく小説のWeb連載をしています。

 本にする時などは最終的には一太郎で推敲しますが、そこまでしないような話はプレーンテキストベースで完結します。

 出先ではAndroidのJota+、家ではPCのサクラエディタで、テキストファイル自体はクラウドストレージに置いて編集していたのですが、連載が長引いて30万字を超えて来た時、思いました――もうアウトラインがないと無理、と。

 サクラエディタはルールファイルを書けば好きな行頭文字を見出しとして扱い、見出しを抜き出したアウトラインを表示してジャンプすることができます。
 しかしJota+には、そういう機能はありません。Jota+は本当に素晴らしいテキストエディタなので、Androidで数十万字の小説を単一ファイルで書こうとするほうがおかしいのだと思います。

 でも検索とか考えるとォ……一つのファイルにしておきたくてェ……

 ということで、長い長い模索の果てに、Obsidianに辿り着きました。

求めた執筆環境

  • PCとAndroid間で同期出来ること。
  • アウトライン化 / そこからのジャンプを扱えること。
  • プレーンテキストとして見てコピペ投稿するのに支障がないこと。
  • 単一のプレーンテキストとして保存出来ること。

 Androidのアウトラインプロセッサは幾つか存在しますが、独自形式で保存するものが多く、この最後の要求を中々満たしてくれませんでした。

 しかし今日の我々にはあるのだ、Obsidianが……!

 とはいえ、Obsidianは本来Markdownを扱う為に作られているソフトウェアですので、

「見出しでのアウトライン化をしたいけど、
 基本はプレーンテキストとして扱いたいんだよね、改行やスペースとかもさ」

 という我が儘を満たすには、多少の調整が必要になります。

 というわけで、その調整方法についての記事になります。

 ※ちなみにこの記事はあくまで一つの長編を単一ファイルで書く前提でまとめていますが、章ごとにファイルを分けたい需要にももちろんObsidianは対応できます。

小説執筆のためのObsidian設定

基礎知識

 そもそもObsidianとは?

 簡単に言うと、Markdown形式で色々なメモを取るためのソフトウェアです。幅広いプラットフォーム向けにリリースされており、基本的に無料で利用できます。詳しくは公式へどうぞ。

 https://obsidian.md/

 公式サイトや関連情報は英語ですが、アプリ内で日本語に簡単に切り換えられます。

 さて、ObsidianはVault(保管庫)という概念を持ちます。
 実際に書くファイルだけでなく、あらゆる設定もこのVaultごとに保存されます。

 これはとても大きな利点でして、どういう意味かというと、Markdown形式でバリバリ色々な装飾や書式を使ってメモを書きたい! というVaultと、日本語小説を書くためのVaultを分ければ、小説のために行う色々な(Markdownエディタからすると邪道な)設定は、他のVaultには影響しないのです。やったね、やり放題だ。

 プラグインでさえVault単位で管理され、もし同じ設定にしたい場合は、隠しフォルダを丸ごとコピーするだけでOKです。なんて美しい設計なんでしょうか。

 ということで、「novel」みたいなVaultを作って(作品ごとでももちろんヨシ)、心置きなく小説向けにカスタマイズをするのがオススメです。

 Vaultの中に作ったファイルは拡張子は「.md」となりますが、中身は完璧なプレーンテキストですので、引き続きテキストエディタでも直接編集可能です。

日本語小説を書くときの問題

 Obsidianはデフォルト設定のままだと、以下のような問題があって、あまり日本語の小説を書くのには向きません。

  • 字下げ変問題:編集モードで行頭に全角スペースを入れると、折り返しを含めてインデントされる(つまり、段落の頭だけの字下げができない)
  • 字下げ変問題2:閲覧モードでは、前に空行がない場合、行頭の全角スペースが無視される
  • 他は好み次第のところもありますが
    • 制御文字が見えない:スペース、改行コードなどが表示されない
    • セクション(見出し)ごとの文字数が分からない
    • 行番号領域がデカい / 1行の文字数を指定したい
    • Mobile版のサイドバーの幅がデカい

 これらは設定、テーマ導入、CSSスニペットを書く、プラグインを入れることで解決できます。

 今回書いた設定が終わると、こんな感じになります(画像はPC版)。
 ※比較用にそのままにしていますが、色などの設定はテーマで好きにカスタム出来ます。

▼設定前

▼設定後

 また、デフォルトではクラウトストレージへの保存が出来ませんが、これもプラグインで簡単に解決します。(ちなみにObsidian Syncという有料サービスも存在しますが、今回行う設定はすべて無料です)

 一つずつ解決策を解説します。

字下げをCSSで整える

 Markdownでは、「#」で始まる行が大見出しとして扱われます。

 これくらいはプレーンテキストとして見るときも許容できるので、アウトライン化のためにこの法則を取り入れます。

 以下のように見出しを書き、改行して、行頭に全角スペースを入れる、いわゆるふつうの日本語小説の作法で書いてみます。(右上のメニューから「ソースモード」を選んでおきます)

# 1. はじまりの見出し

 長い日本語の文章を書きたくなる日だった。日本語の文章は段落の頭に全角スペースが入る。
 しかしObsidianは「厳密な改行」がOFFのとき、この全角スペースを勝手に削除してしまうのだ。

 ふつうのテキストエディタでも読みやすい形式ですね。本文はプレーンテキストなので、コピペで投稿するとかも簡単。見出しは右サイドバーに一覧されて、ジャンプできます。

 しかしこうして右端での折り返しがある長文を書いたとき、前述の字下げ変問題が起きます。

↑そうじゃないんだよな……。

 これを直すというか小説向けに違和感がないようにするには、以下のように設定します。

CSSスニペットを追加する

 ObsidianはCSSスニペットを書くことで外見の多くの要素をカスタムできます。

 Vaultを作ると、その下に隠しフォルダ「.obsidian」が作られます。
 CSSスニペットを使うには、この中に自分で「snippets」というフォルダを作ってください。

 ※スマートフォンのデフォルトのファイラーでは隠しフォルダが見られないかもしれません。私は古来よりFX File Explorerを愛用しています。

 そこに、テキストエディタなどで以下の内容をコピペしたファイルを入れます。
 名前は適当でいいのですが、拡張子は「.css」にしてください。novel-indent.css とか。

/* remove text indent in source-view */
.markdown-source-view:not(.is-live-preview) .cm-line{
	text-indent: 0 !important;
	padding-inline-start: 0 !important;
}
/* force plain-text-like view in preview-view p */
.markdown-preview-view p{
	white-space:pre-line;
}

 ファイルを保存したら、Obsidian側の設定を行います。

Obsidian側のインデント関連設定

 Obsidianアプリから設定を開き、「外観」を選んで一番下までスクロールすると、上の手順で作成したCSSファイルが「CSSスニペット」として表示されているはずですので、ONにしてください。

 もう一つ、「設定>エディタ>表示>厳密な改行」を探して、これもONにしてください。
 するとこうなります。↓

 右上の本のマークをクリックして閲覧モードに切り替えてみても、インデントは正常なはずです。

 字下げ関連の問題はこれで解決です。

 ※上のCSSをどうやって調べたのか、つまりCSSを適用する要素をどうやって調べるのか? は多少突っ込んだ話になるので、後日別の記事にまとめようかと思います。

 ちなみに日本語小説を書くためには「設定>エディタ>スマートインデント」をONにしておくことをオススメします。これがONだと全角スペースを入れた次の行は同じように全角スペースを自動で入れてくれますが、OFFだと変な半角スペースが入ったりします。

制御文字の可視化

改行文字の可視化だけでOKな方は Obsidian Tips:改行をCSSだけで可視化する も参考にしてみて下さい。

 Jota+のようなテキストエディタは、全角を含むスペースや改行をマークで可視化し、変な文字が紛れ込まないようにできます。好み次第かと思いますが、個人的に必須機能です。

 Obsidianでは、以下のプラグインでこれを行えます。 

 Control Characters
 https://github.com/joethei/obsidian-control-characters

 使いたい方は「設定>コミュニティプラグイン」を有効化し、「閲覧」から上記名称で検索してインストールしてみてください。

 ちなみに同様にしてStyle Settingsプラグインを入れると、制御文字を代替するSVG画像や色を好きな感じに変えられます。

 ただしControl Charactersプラグインには、日本語IMEを介する時、全角/半角スペースなどに続けた文字が入力を確定するまで表示されない(正確に言うと制御文字可視化用の絵と被って描画される感じの)バグがあります。

 この現象は以下のCSSスニペットを適用することで解決出来ます。適当な名前で保存して、先に説明したのと同様にsnippetsフォルダに入れて、Obsidianの設定から有効化してみてください。(面倒であれば字下げ用のCSSファイルに足して上書きしてもOK)

/* for control-character plugin with IME */
.control-character[type="other"] {
  background: rgba(100 100 100 / 0.06) !important;
  mask: unset !important;
}
.control-character[type="space"] {
  background: rgba(100 100 100 / 0.06) !important;
  mask: unset !important;
}

 簡単に言うと、悪さをしている「制御文字の絵による置き換え」を無効化して、背景色だけで制御文字の領域を示す感じに変更しています。

 rgbaで色と透明度を指定しています。概ね汎用的に使える値ですが、お使いのテーマによってお好きに変えてください。透明度0.06をいじるのがたぶん一番楽です。

↑こんな感じになります。

 ついでに改行を示す記号がデフォルトだと結構ど派手で圧倒される可能性があるので、「←」のSVGコードを置いておきます。Style Settingsプラグインを入れて「Symbol for newline」のところに貼り付けるだけで使えます。

url("data:image/svg+xml,%3Csvg height='15' width='15' xmlns='http://www.w3.org/2000/svg'%3E%3Ctext x='5' y='15'%3E←%3C/text%3E%3C/svg%3E");

クラウドストレージ経由で同期する

 Remotely Saveという神プラグインが存在します。

 これはOneDriveなどいくつかのメジャーなストレージサービスに接続してVaultごとに同期を可能にするプラグインで、PCとモバイルを行ったりきたりしながら文章を書きたいときに非常に便利です。

 特に画像などを含まないプレーンテキストベースのVaultでは、同期もほとんど一瞬で終わりますので、シームレスに環境を替えて執筆を続けられます。

 プラグインを検索/導入/有効化し、Authから好きなサービスに接続してみてください。
 S3 / Dropbox / OneDrive for personal / webdav(つまり、owncloudも)が使えます。

 使い方はVault名を同じにして同期をかけるだけです。

Remotely Saveでの同期構成

 パスは一例ですが、だいたい下図のような構成になります。
 (実はこの図もExcalidrawというObsidianプラグインで描いています)

 Obsidianはファイルリカバリーというバックアップ機能をデフォルトで持っています。これ自体はローカルに保存されるもの(下記のsnapshot)で、Remotely Saveでは最新版だけがクラウドに保存されます。シンプルですね。

 このプラグインでの同期は基本的に更新日時が新しいものが勝つ上書き形式で行われるようです。

 これは理解しておけば便利でもある仕様です。

 例えば、クラウド側のテキスト(上記の真ん中のstory.md)を使い慣れたテキストエディタで直接開いて編集し、保存した後でObsidian側を操作して同期すると、ちゃんとその内容が反映されるのです。

 編集は使い慣れたエディタで行い、アウトラインを駆使した閲覧はObsidianで行う、なんて使い方ができます。

同期タイミングに関する注意

 更新日時による上書きを仕様とするため、Remotely Saveは競合を解決する必要があるような複雑な使い方には向きません。

 必ず作業の初めに最新を取り、終わりに保存するように意識する必要があります。(よほど変なことをしない限り小説を書くだけなら十分だと思います)

 差分を取ったりしながら高度に使いたい場合、また色々な都合で他のクラウドストレージを使いづらい場合は、結構導入のハードルが上がるのですが、Self-hosted LiveSyncプラグインの使用を視野に入れるのも良いかなと思います。

見出しごとの文字数を表示する

 特にWeb連載だと、一話ごとの文字数をある程度意識することが多いと思います。

 「Better Word Count」というプラグインを入れて「Display Section Word Count」をONにすると、見出しの横に、次の見出しとの間にある文字数を表示できます。便利~

1行の文字数を指定 / 行番号を小さく

 細かい外観を弄りたい場合、「Minimal Theme」と「Minimal Theme Plugin」を導入するのがおすすめです。

 「設定>コミュニティプラグイン>Minimal Theme Settings>Normal line width」あたりを弄ると1行の文字数を指定出来ます(半角ベースなので2倍にしてね)。
 ※折り返しを有効にしている場合、同時に文字サイズもいじらないと端末の表示幅以上には増えません。

 Style Settingsプラグインを入れて、「Minimal Advanced settings > Smaller font size」を変えると、行番号をもっと小さく出来ます。(特にMobileで5桁とかになると邪魔でですね)

Mobile: サイドバーを狭くする

 Androidなどでサイドバーが妙に幅を取って邪魔なときは、以下のようなCSSスニペットで幅を変えられます。幅はお使いの環境に合わせて適当にいじってみてください。(CSS適用後に書き換えると基本的にリアルタイムで反映されます。便利)

.is-mobile {
	--mobile-sidebar-width: 250px !important;
	--mobile-sidebar-max-width: 250px !important;
}

Templaterでもっと便利に

 Templaterプラグインを使うとさらに快適な執筆環境を作れます。
 今回紹介した構成を前提にしたスクリプトを色々書いているので、使えそうなら他の記事もどうぞ。

おわりに

 Obsidianは非常に優れたソフトウェアですが、日本語環境でのユーザーはおそらくまだまだ少ないため、不具合があったり、初めは少し情報を取るのに苦労するかもしれません。今はまだまだエンジニア向けのソフトウェアという印象が強いと思います。

 しかし、少し調べれば多彩なプラグインで、今回のように色々な用途に使える力を秘めています。ちょっと邪道でも、自分なりの使い方を模索してみるのも楽しいと思いますので、ぜひ色々試してみてください。

今後の課題

  • 折り返しを考慮した行番号を表示したい
    • プラグインを作る必要がありますが、ちょっと難しそう
  • ふりがな用プラグインは存在するが、青空文庫形式のものがない
    • そのうち作ってみるつもりです
  • アウトラインにセクションごとの文字数を表示したいナァ……
    • これもプラグインを作ってみたい

 長い記事を読んで下さってありがとうございました。
 それではよきObsidianライフをʕ ·ᴥ·ʔ

コメント

  1. […] Obsidianで日本語小説を書く設定 | こたつろぐ […]

タイトルとURLをコピーしました