表題のとおりですが、放置していた LT Slide の回収を進めています。 元々 GitPitch で公開していたのですが、GitPitch のサービスが終了してしまったので事実上放置状態でした。
今回はこれを SpeakerDeck に移行するために試行錯誤しました。
リポジトリ
表題のとおりですが、放置していた LT Slide の回収を進めています。 元々 GitPitch で公開していたのですが、GitPitch のサービスが終了してしまったので事実上放置状態でした。
今回はこれを SpeakerDeck に移行するために試行錯誤しました。
リポジトリ
やった作業
ブランチから markdown ファイルを回収する
まず、GitPitch ではブランチごとにパスを変更して資料を表示できる形式でした。 そのためブランチごとに同じファイル名の markdown ファイルや config ファイルが存在している状態でした。
それをまずは shell で回収します。 幸い、自分が公開していた GitPitch のリポジトリでは画像を利用していなかったためか、markdown ファイルを回収するだけで済みました。
#!/bin/bash # masterブランチに切り替え git checkout master # 作業用ディレクトリを作成 mkdir -p branches # すべてのブランチを取得 branches=$(git branch -r | grep -v '\->' | grep -v 'origin/HEAD' | sed 's/origin\///') for branch in $branches; do echo "Processing branch: $branch" # ブランチをチェックアウト git checkout $branch # PITCHME.md が存在するか確認 if [ -f "PITCHME.md" ]; then # 保存先ディレクトリを作成 mkdir -p "branches/$branch" # PITCHME.md をコピー cp PITCHME.md "branches/$branch/$branch.md" else echo "PITCHME.md not found in branch: $branch" fi done # masterブランチに戻る git checkout master # 取得したファイルを master に追加 cp -r branches/* . rm -rf branches git add . # git commit -m "Add PITCHME.md files from all branches"
これはほぼ GihHub Copilot Agent が書いてくれたので助かりました。
markdown ファイルを PDF 変換する
次に、markdown ファイルを PDF に変換します。 形式が類似している marp を使っての変換を検討しました。
当初は GitHub CodeSpaces 直下で npm インストールして変換を試みましたが、ブラウザ周りのインストールなどを試したものの、うまく動作しませんでした。
そのため公開されている Docker イメージを利用して変換を行いました。 幸いにも marp のプロジェクトチームは Docker イメージを公式で公開しています。
これをせっかくなので podman で動かしてみました。 ただ GitHub Codespaces では podman を動作させるハードルが少し高い問題がありました。
- CodeSpaces がデフォルトで Ubuntu 20.04 であること
- podman のインストールでは Ubuntu 20.10 以降のものしか公開されていない
- https://podman.io/docs/installation#ubuntu
- そのため CodeSpaces で Dockerfile を利用し、Ubuntu 22.04 をインストールするように変更
- podman の動作に少し問題がある
- ネットワーク周りの取り扱いがデフォルトだと通らない
- こちらの issue をもとに対応
この問題を解決したところ、GitHub Codespaces 上で podman を動作させることができました。 その状態で下記を実行(これも GitHub Copilot Agent が書いてくれました)。
#!/bin/bash # Podman を使用して Marp CLI コンテナを実行し、Markdown を PDF に変換するスクリプト # イメージが存在しない場合はビルド if ! podman image exists local/marp-cli; then echo "Building Marp CLI image..." podman build -t local/marp-cli . fi # ワークスペースのルートディレクトリ workspace_dir="$(pwd)" # Markdown ファイルを検索して PDF に変換 find "$workspace_dir" -type f -name "*.md" | while read -r markdown_file; do # ファイルのディレクトリと名前を取得 dir_name="$(dirname "$markdown_file")" base_name="$(basename "$markdown_file" .md)" # 出力 PDF ファイルのパス output_pdf="$dir_name/$base_name.pdf" # Podman コマンドで Marp CLI を実行(ローカルイメージを使用) echo "Converting $markdown_file to $output_pdf using Podman..." podman run --rm --security-opt label=disable \ -v "$workspace_dir:$workspace_dir:Z" \ -w "$workspace_dir" \ local/marp-cli \ "$markdown_file" --pdf -o "$output_pdf" if [ $? -eq 0 ]; then echo "Successfully converted: $output_pdf" else echo "Failed to convert: $markdown_file" >&2 fi done
Dockerfile は下記のような内容です。
# ベースイメージとして Marp CLI を使用 FROM ghcr.io/marp-team/marp-cli:latest # 作業ディレクトリを設定 WORKDIR /slides # 必要なファイルをコンテナにコピー COPY . /slides # デフォルトのコマンドを設定 CMD ["marp"]
これを実行したところ、日本語の文字化けもなく PDF に変換されていました。
まとめ
いろいろと試行錯誤しましたが、無事に PDF に変換することができました。 環境構築の大変さを省くために CodeSpaces 上で行っていましたが、Copilot Agent の力を借りて無事やりたいことを実現できました。
PDF の内容はあまり確認できていないので、後日確認して問題なければどんどん SpeakerDeck にアップしていこうと思います。