コマンドライン
無料の marsdawn コマンドラインツール:シェルや LLM エージェントから Markdown を PDF に書き出せます。MarsDawn アプリがインストールされていれば、そのアプリでファイルを開くこともできます。
marsdawn は無料で、Mac App Store とは別に配布されています。Homebrew でインストールすると、Apple シリコンの Mac では、すぐに実行できる状態でインストールされます。export は単独で動作し、open には MarsDawn アプリが必要です。
AI エージェントやスクリプトから marsdawn を呼び出しますか?JSON 出力とそのスキーマ、すべての終了コードについてはAI エージェント向け marsdawnをご覧ください。
インストール
Homebrew を使う場合:
brew tap redtear1115/tap && brew install marsdawn
コーディングエージェントを使っていますか?marsdawn skill --install を実行してmarsdawn スキルを追加してください。自分が書いたものを MarsDawn で開いてあなたに確認してもらう方法と、PDF の書き出しを教える、1つのファイルです。
Apple シリコンの Mac では、Homebrew がビルド済みのコピーを数秒でインストールし、他に何もインストールする必要はありません。Intel Mac では代わりにソースから marsdawn をビルドするため数分かかり、Xcode 26 以降(Swift 6.2)が必要です。このツールは macOS 15 以降で動作します。
または、Swift Package Manager でソースからビルドします。
git clone https://github.com/redtear1115/mars-dawn-kit.git
cd mars-dawn-kit
swift build -c release --product marsdawn
インストールされているバージョンは marsdawn --version で確認できます。
コマンド
marsdawn open
1つ以上の Markdown ファイルを MarsDawn アプリで開いて確認できます。アプリのインストールが必要です。インストールされていない場合、marsdawn open はコード 3 で終了し、MarsDawn がインストールされていないことを知らせます。export にはアプリは不要です。アプリは Mac App Store で配信中です。
marsdawn open notes.md
marsdawn open notes.md:120
marsdawn open notes.md --line 120
marsdawn open .
marsdawn open notes.md --folder .
path:line:MarsDawn にその行に移動するよう指定します。その後にコロンが続く場合、たとえばnotes.md:120:8の列部分は無視されます。引数全体と一致するファイル名が存在する場合、その引数はそのファイルとして扱われます。--line <n>:単一ファイルに対して同じ指定ができ、それ自体がコロンと数字で終わるパスに対して行を指定する方法でもあります。ファイルは1つだけ指定できます。- 行番号は 1 から 999999999 までです。
- MarsDawn 1.0 はその行にジャンプしてファイルを開きます。
- フォルダを引数にすると、書類としてではなくウインドウのサイドバーに開きます:
marsdawn open .で現在のフォルダを表示します。--folder <path>はファイルと一緒に同じことをします。ウインドウのサイドバーに表示できるフォルダは1つなので、2つ指定すると使用方法のエラーになります。 --wait <n>:結果を返す MarsDawn 1.0.2 以降では、--folderはフォルダについてのアプリの回答を最大 n 秒(0〜30、初期値 2)待ちます。--wait 0の場合や、結果を返さないアプリでは待たず、これまでとまったく同じリクエストを送ります。--waitに 0〜30 以外の値を指定すると使用方法のエラー(コード 64)です。負の値は--wait=-1と書きます。--jsonでは、フォルダは「表示済み」ではなく「依頼済み」として返ります。決めるのはアプリだからです。--waitを付けると、フォルダがどうなったかも返ります。一覧は AI エージェント向け marsdawn にあります。--background:MarsDawn を前面に出さずに開きます。--json:テキストではなく JSON の結果を出力します。
行の指定は marsdawn 0.3.0 で、フォルダと --background は 0.5.1 で、--wait とフォルダの状態は 0.5.3 で追加されました。
marsdawn export
Markdown ファイルを、MarsDawn 自身の PDF 書き出しと同じ書き出しエンジンで、ページ分割された PDF にレンダリングします。MarsDawn アプリは不要です。相対パスの画像は、入力ファイルのあるフォルダを基準に解決されます。
marsdawn export notes.md -o notes.pdf --theme classic --paper a4
-o, --output <path>:PDF の書き出し先。デフォルトは入力パスの拡張子を.pdfにしたものです。--theme <dawn|classic|modern|vivid>:プレビューテーマのライトパレット。デフォルトは$MARSDAWN_THEME、それもなければdawnです。--paper <a4|letter>:用紙サイズ。デフォルトはa4です。--breaks:HackMD と同じように、段落内の改行をすべて改行として表示します。付けないときは、中国語や日本語の文字どうしのあいだの改行を取り除き、前後の行を 1 つの文としてつなげます。--layout <document|handbook>:ページのレイアウト。初期値はdocument。handbookはハンドブックとして書き出します。余白を広くして綴じ側を取り、レベル 1 の見出しごとに改ページし、ページ番号付きの目次ページ、フッターのページ番号、PDF のしおりを付けます。front matter にtitleがあれば表紙も付けます。--toc-title <text>:ハンドブックの目次ページの見出し。初期値はContents。- 1 行だけの
<!--BREAK-->で改ページします。どちらのレイアウトでも使えます。 --allow-remote-images:レンダリング時にウェブから画像を読み込みます。デフォルトはオフです。--force:出力ファイルがすでに存在する場合に置き換えます。--json:テキストではなく JSON の結果を出力します。- 16 MiB を超えるファイルは書き出しません。
exportはコード 5 で終了し、何も書き出しません。
--breaks は marsdawn 0.7.0 で、--layout と --toc-title は 0.7.1 で、handbook という名前は 0.7.2 で追加されました。0.7.1 の名前 manual も使えます。
marsdawn theme
テーマファイル(theme.json)を共有する前に、チェックして見た目を確かめます。MarsDawn アプリは不要です。テーマの項目は エージェントとテーマを作る を参照してください。
marsdawn theme validate my-theme.json
marsdawn theme css my-theme.json
marsdawn theme preview my-theme.json --appearance dark -o preview.png
validate <file>:アプリと同じバリデータで、MarsDawn のテーマが満たすべきすべてのルールに照らしてチェックします。有効ならコード 0、無効ならコード 1 で終了し、問題を 1 つずつ示します。--require-completeを付けると、公開するテーマに必要なシンタックスと図の色も必須になります。css <file>:有効なテーマに対してプレビューが使う CSS を出力します。preview <file> --appearance <light|dark> -o <out.png>:そのテーマでサンプルの書類を PNG に描画します。--widthで幅をピクセルで指定します(600〜2000、初期値 1200)。既存のファイルは--forceを付けたときだけ置き換えます。--json:テキストの代わりに JSON の結果を出力します。
theme コマンドは marsdawn 0.6.1 で追加されました。
$MARSDAWN_THEME 環境変数
--theme が指定されない場合、export は $MARSDAWN_THEME 環境変数を読み取ります。値は dawn、classic、modern、vivid のいずれかである必要があり、それ以外は dawn にフォールバックします。CLI はアプリ自身のテーマ設定を読み取りません。他のアプリのコンテナを読み取ると、macOS のプライバシープロンプトが表示されることがあるためです。
ファイルの上書き
export は、--force を指定しない限り、既存の出力ファイルを置き換えません。
終了コード
| コード | 意味 | 対処 |
|---|---|---|
0 | 成功。 | --json を付けた場合は、stdout の1行の JSON を読む |
2 | 入力が見つからない。 | パスとファイル名を確認する |
3 | MarsDawn がインストールされていない(open のみ)。 | アプリをインストールするか、アプリが不要な export を使う |
4 | 出力先がすでに存在する(--force を指定してください)。 | --force で上書きするか、-o で別の場所に書き出す |
5 | 書き出しに失敗。 | JSON の結果の message を読む |
6 | この MarsDawn はまだフォルダを表示できないため、何も開かなかった(open のみ)。 | |
64 | 使用方法のエラー。範囲外の行、複数ファイルやフォルダに対する --line の指定、複数のフォルダの指定などを含みます。 | オプションや値を直す。このエラーは --json を付けても stderr にテキストで出力される |
--json 出力
成功時、marsdawn open --json は ok、opened(各ファイルの path、行が指定されていれば line も含む)、app(アプリのパス)、フォルダが指定されていれば folder を出力します。marsdawn export --json は ok、output、pages、theme、paper、diagramErrors を出力します。失敗時はどちらも ok、error、message を出力します。