Markdownに書いたコマンドをコピーして、ターミナルへ貼り付ける。結果を確認したら手順書へ戻り、次のコマンドをコピーする。環境構築やサーバーの調査では、こうした操作を繰り返すことがあります。
この往復を減らせるのが、Markdownノートの中でコードを実行できるOSSアプリ「Ledge」です。コードブロックのRunボタンを押すと、アプリ内に結果が表示されます。
今回は手元のMacで、シェルコマンドの実行と、別のブロックへの作業ディレクトリ・環境変数の引き継ぎを確認しました。まずその手順を紹介し、後半でPythonやSSHなどの機能にも触れます。
実機で確認したのは、Mac上でのローカルのシェル実行と状態の引き継ぎです。Python・Node・SSH・実行前の確認機能は、公式資料に記載されている機能として紹介します。今回は実機では検証していません。公式資料の確認日:2026年10月2日。
Ledgeで何が変わる?
Ledgeは、説明文と実行するコードを同じMarkdownノートに置けるアプリです。例えば「作業ディレクトリへ移動する」という説明の下にコードブロックを書き、その場所で実行できます。
手順書を見ながらターミナルへコピーする方法と比べると、コードを選択してコピーし、別の窓へ貼り付ける操作を減らせます。短い調査用コマンドや、結果を見ながら一つずつ進める作業に使い道がありそうです。
Makefileやシェルスクリプトで、すでに一連の処理を自動化している場合もあります。そうした方法に対してLedgeの利点が出るのは、途中の説明を読み、結果を見て次の操作を選びたい場面です。実行できるノートにしただけで、手順の依存関係や失敗時の判断が自動化されるわけではありません。
ノートは普通の .md ファイルなので、他のエディターで読んだり、Gitで管理したりできます。ただし、Ledgeの実行ボタンなどの操作にはLedgeが必要です。
Macにインストールする
公式READMEでは、Mac版の条件は Apple Silicon搭載・macOS 13以降です。まずは配布アプリを使うと、Bunなどの開発環境を用意せずに試せます。
- 公式サイトのMac向けダウンロードからDMGを取得します。
- DMGを開き、Ledgeを「アプリケーション」へ移します。
- 「アプリケーション」からLedgeを起動します。
- サイドバーの「New Note」で、確認用のノートを作ります。
LedgeはApache License 2.0で公開されており、ローカル利用のためのアカウント登録は不要です。配布条件やインストール方法は、公式READMEでも確認できます。
3つのブロックで動作を確認する
新しいノートへ、次のMarkdownを貼り付けます。今回の確認では、ファイルを作成・削除するコマンドや外部通信は使いません。
# Ledgeの最小動作確認
## 1. コマンドを実行する
```sh
printf 'Ledge test OK\n'
```
## 2. 作業場所と環境変数を設定する
```sh
cd /tmp
export LEDGE_TEST_VALUE="hello-ledge"
pwd
```
## 3. 別のブロックで状態を確認する
```sh
pwd
printf '%s\n' "$LEDGE_TEST_VALUE"
```
上から順番に、各ブロックのRunボタンを押します。ブロック内にカーソルを置いて ⌘+Enter でも実行できます。
最初の printf は文字列を表示するコマンドです。2つ目では cd /tmp で作業ディレクトリを変え、export で環境変数を設定します。pwd は現在の作業ディレクトリを表示します。
3つ目は別のコードブロックです。ここでも同じディレクトリと環境変数が使えるかを確認します。
実機で確認した結果
手元のMacでは、次の結果が表示されました。
| ブロック | 出力 | 確認できたこと |
|---|---|---|
| 1 | Ledge test OK |
シェルコマンドを実行し、結果を表示できる |
| 2 | /tmp |
作業ディレクトリを変更できる |
| 3 |
/tmp と hello-ledge
|
別のブロックでも作業ディレクトリと環境変数が引き継がれる |
Mac上での実行結果。3つの出力に Ledge test OK、/tmp、hello-ledge が表示されています。
コマンドを別のターミナルへ貼り付けず、ノート内から実行できました。説明と操作を同じ場所に置けることが、この小さな例でも分かります。
画像内には実行時間も表示されていますが、起動速度や他のアプリとの性能比較は測定していません。この表示を根拠に「起動が一瞬」「他のアプリより軽い」とは評価しません。
状態が引き継がれる範囲
公式のRunning Codeによると、sh・bash・zsh のブロックは、ノートごとの継続したシェルで動きます。今回の例で cd と export の状態が引き継がれたのは、この仕組みによるものです。
一方、ノートに付属するターミナルドロワーと、インライン実行のシェルは別です。インラインのブロックで設定した状態が、ドロワーにもそのまま移るとは扱わないでください。
シェルを再起動した後まで、実行中に設定した変数が保存されるという意味でもありません。毎回使う作業場所や環境変数は、ノート先頭のfrontmatterに設定できます。frontmatterは、Markdownの先頭を --- で囲んだ設定欄です。
例えば、公式資料には次のような設定があります。これは今回は未検証です。
---
cwd: ~/Projects/my-app
env:
APP_ENV: development
---
cwd はシェルの開始ディレクトリ、env は開始時に渡す環境変数です。~/Projects/my-app は、自分の環境に存在するディレクトリへ置き換えます。設定変更は新しく作られるシェルに適用されるため、すでに動いているシェルでは再起動が必要な場合があります。
詳しくはFrontmatter and Environmentsを参照してください。
ほかにできること:今回は未検証
以下は公式資料に記載されている機能です。ローカルでのシェル実行とは分けて紹介します。
PythonやNodeのコードを実行する
PythonやNodeなどのコードブロックも実行できます。Pythonなら、例えば次のようなブロックです。
import platform
print(platform.python_version())
実行先で対応するインタープリターを使える必要があります。どのコマンドで実行するかは、Ledgeの設定で変更できます。
PythonやNodeなどは、実行ごとに新しいプロセスで動きます。 前のPythonブロックで定義した変数が、次のPythonブロックに残るJupyter Notebookのカーネルと同じ仕組みではありません。シェルからPythonへの環境変数・作業ディレクトリの引き継ぎも、今回は確認していません。
SSH経由で別のマシン上のコマンドを実行する
ノート先頭のfrontmatterに host を指定すると、コードの実行先をSSH接続先へ切り替えられます。
---
host: user@example.com
---
# リモートの基本情報を確認する
```sh
hostname
pwd
```
user@example.com は、実際にSSH接続できるユーザー名とホストへ置き換えます。SSHの設定ファイルで定義した接続先の別名も使えます。
この方法では、ノートの保存場所は変わらず、コードの実行先を変更します。ノート自体をサーバーに置いて利用する機能もありますが、それは別の構成です。
実行先を取り違えないよう、最初は hostname などの確認用コマンドで試すとよさそうです。設定と接続方法はRun Code on Remote Hostsにまとまっています。
実行前に確認を表示する
コードフェンスの言語名の後ろに confirm を付けると、実行前の確認を表示できます。次は、文字列を表示するだけの例です。
```sh confirm
printf '確認してから実行します\n'
```
引用や説明用で実行させたくないブロックには、norun を付けてRunボタンを出さない指定もできます。
どちらも、ノートを編集できる人は指定を外せます。誤操作を減らす機能であり、実行権限を制限する仕組みではありません。詳細はRunning Codeを参照してください。
技術的にはBunとElectrobunを使っている
公式READMEによると、LedgeはデスクトップアプリのフレームワークにElectrobunを使い、ファイルやシェルの処理をBun側が担当しています。編集画面はReactとCodeMirrorで構成され、OSのWebView上で動きます。
Electronとは異なる構成ですが、この違いだけでメモリ使用量や起動速度は決められません。今回は実行機能を確認することに絞りました。
ソースから動かしたい場合、MacではBunとXcode Command Line Toolsが必要です。公式の開発用手順は次のとおりです。今回の実機確認は、ソースからのビルドを検証したものではありません。
git clone https://github.com/ledgesh/ledge.git
cd ledge
bun install
bun run dev
初回起動ではElectrobunのコアをダウンロードし、アプリのビルドを行います。詳しくは公式READMEのBuild from sourceを確認してください。
使うときに気を付けたいこと
Ledgeで実行するコマンドは、ファイルやサーバーの状態を変更できます。ノートに書かれているから安全というわけではありません。外部から取得したノートやAIが書いたブロックは、実行する前に内容と接続先を確認します。
APIキーやパスワードを本文に書くと、ノートの共有やGit管理で一緒に公開してしまうおそれがあります。公式にはノートの外に秘密情報を置くプロファイル機能もあります。今回は未検証ですが、運用に使うならProfiles and Secretsも確認したいところです。
実行結果を画面で確認できることと、監査用のログとして永続保存できることも別です。今回は、再起動後の出力保持やレポートへの書き出しを検証していません。保存したい結果は、必要に応じてコピーして記録してください。
対話型のプログラムについては、現行の公式資料で入力や全画面ツールの扱いも説明されています。今回は vim や htop などの動作は確認していないため、対応範囲や表示の安定性は実機で試す必要があります。
まずは短いコマンドメモから
今回の確認では、ノート内でシェルコマンドを実行し、別のブロックでも作業ディレクトリと環境変数を使えました。
まずは pwd や printf のような確認用コマンドを、説明付きのノートに置いてみると使い方が分かります。既存の手順書を移す場合も、短く、結果を確認しやすい部分から試すのがよさそうです。

