🚀 はじめに:この記事でできること

Android端末上のTermux環境で、Git/GitHubを安全に使うための実践フローを、SSH鍵作成→GitHub登録→ghログイン→clone/commit/pushまで手順化します。
さらに、Hugo(PaperMod) の記事を GitHub Actions → GitHub Pages で自動公開する最小構成も併せて整えます。

補足
本記事は 初心者が混乱しやすい前提(Termux独自パッケージ、共有ストレージ権限、拡張Hugoの有無)を先に明示し、各Stepを 操作 → 目的 → 結果 → 注意/補足 の順で進めます。


🧭 前提:環境と基本方針

Termuxは通常のLinuxと異なる点があり、公式パッケージ(pkg)優先外部配布物を直接入れないことが安全運用の鍵です。共有ストレージ権限やパスの違いも混乱の元になるため、最初に整理します。

操作

  • Termuxアプリをインストールし、起動
  • 以降のセットアップは pkg を用いる(aptは可能だが推奨はpkg)

目的

  • Termux環境を最新化し、Git/SSH/gh を公式ビルドで導入して安定運用する

前提

  • Android端末でTermuxが正常動作(ネット接続可)
  • ファイル操作は $HOME(例:~/)を基本に行う

結果(この時点でできること)

  • 後続のインストールや鍵作成が 権限・互換性の問題を回避 しながら進められる

注意
Termuxで外部レポジトリや他ディストリのdebを直接導入すると破損の原因になります。必ず Termux公式のパッケージ を利用しましょう。


📱 Step 1:Termuxの初期セットアップ(更新・権限・導入)

Termuxを最新化し、共有ストレージ権限を付与、必要なパッケージを導入します。

操作(目的/前提を読んでから実行)

目的

  • パッケージを最新化し、ストレージ操作とGit/GitHubに必要なコマンド群を整える

前提

  • Termuxが起動可能
  • インターネット接続が安定している
# パッケージの最新化
pkg update && pkg upgrade -y

# 共有ストレージへのアクセス(初回のみ)
termux-setup-storage
ls ~/storage/shared

# 必要パッケージの導入(Git / OpenSSH / GitHub CLI)
pkg install git openssh gh -y

# (任意)クリップボード操作を使う場合
pkg install termux-api -y

結果(この時点でできること)

  • git, ssh, gh が利用可能
  • ~/storage/shared に共有ストレージのリンクが見える(初回許可後)

注意/補足

  • termux-setup-storage 後に権限再許可が必要になることがあります。ダイアログが出たら 必ず許可 してください。
  • termux-clipboard-set/get は公開鍵のコピー等で便利(Termux:APIが必要)。

⚙️ Step 2:Git/GitHubの基本設定(ユーザー情報・SSH鍵・接続テスト)

Gitの利用者情報を設定し、GitHub向けのed25519鍵を作成して登録、SSH接続を確認します。

操作(目的/前提を読んでから実行)

目的

  • すべてのリポジトリで共通の署名情報を設定し、パスワード不要のSSH認証でGitHubへ安全に接続する

前提

  • Git/GitHubのアカウントを保有
  • Step 1で git, ssh が導入済み
# Gitの初期設定(グローバル)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
git config --global core.editor "nano"

結果(この時点でできること)

  • 以降のコミットに正しい署名情報が付与される

補足
git config はグローバル(~/.gitconfig)とローカル(./.git/config)で階層が分かれます。まず グローバル を設定しましょう。

操作(目的/前提を読んでから実行)

目的

  • GitHub推奨の ed25519 で鍵を作成し、公開鍵をGitHubに登録する

前提

  • GitHubへログイン可能(ブラウザ準備)
  • ~/.ssh ディレクトリが作成可能
# ed25519鍵の作成(メールはGitHub登録メール推奨)
ssh-keygen -t ed25519 -C "your.email@example.com"

# 公開鍵の表示(手動コピー)
cat ~/.ssh/id_ed25519.pub

# (任意)クリップボードへ送る場合
cat ~/.ssh/id_ed25519.pub | termux-clipboard-set

結果(この時点でできること)

  • GitHubアカウントの Settings > SSH and GPG keys で公開鍵を登録し、SSH接続準備が整う

注意
DSA鍵は非対応、RSAはSHA‑2署名など要件があり、初心者は ed25519 が安全・簡単です。

操作(目的/前提を読んでから実行)

目的

  • GitHubへのSSH接続が成功するかを検証する

前提

  • 公開鍵がGitHubに登録済み
# SSH接続のテスト(初回は指紋確認あり)
ssh -T git@github.com
# 成功例:
# "Hi <USERNAME>! You've successfully authenticated, but GitHub does not provide shell access."

結果(この時点でできること)

  • 成功メッセージが出れば SSH認証が正しく構成 されている

注意/補足
Permission denied (publickey) が出る場合、公開鍵の未登録/別鍵 の可能性。GitHubのキー一覧を再確認してください。


🧩 Step 3:リポジトリ操作(clone/commit/push/gh)

SSH経由でリポジトリを操作し、gh を併用して認証・作成・クローンまで実施します。

操作(目的/前提を読んでから実行)

目的

  • 既存リポジトリをクローンし、変更をコミットしてリモートへ push する基本フローを習得する

前提

  • Step 2のSSHテストが成功
  • 対象リポジトリのURL(SSH形式)を把握
# リポジトリのクローン(SSH形式)
git clone git@github.com:<username>/<repo>.git
cd <repo>

# 変更作成・ステージング・コミット
echo "# Hello Termux" > README.md
git add README.md
git commit -m "Add README from Termux"

# リモートへpush(mainブランチ)
git push origin main

結果(この時点でできること)

  • 端末から安全に変更を反映できる(移動中の軽微な修正に最適)

補足
共有ストレージ配下で fatal: detected dubious ownership in repository が出たら safe.directory の設定を追加します。

git config --global --add safe.directory /storage/emulated/0/your-repo

操作(目的/前提を読んでから実行)

目的

  • GitHub CLI(gh)でログインし、リポジトリ作成〜クローンまで対話的に行う

前提

  • Step 1で gh 導入済み
  • ブラウザによる認証が可能
# GitHub CLIにログイン(対話式)
gh auth login

# 新規リポジトリ作成&クローン(例)
gh repo create my-sample --public --clone

結果(この時点でできること)

  • PR/Issueなどをターミナルから操作できるようになり、開発効率が向上する

注意/補足
ghブラウザ連携認証 が簡便。Termuxでは外部インストールスクリプトではなく pkg導入 が確実です。


🛠️ Step 4:実用例(Hugo+PaperModをGitHub Pagesで自動公開)

スマホ側では記事編集と git push に集中し、ビルドはGitHub Actionsで行い、Pagesに公開します。

操作(目的/前提を読んでから実行)

目的

  • GitHub Pagesのソースを GitHub Actions に設定し、Hugoのビルド成果物を自動で公開する

前提

  • Hugoサイトのリポジトリを保有
  • Pages設定にアクセス可能(権限あり)
# GitHubのWeb UI上で設定(説明用)
# Settings > Pages > Build and deployment > Source: GitHub Actions に変更

結果(この時点でできること)

  • Actionsのワークフローが成功すると、Pagesが自動更新される

注意/補足
PaperModHugo Extended を必要とする構成が一般的。Actionsで extended ビルドを用いるYAMLを配置します。

操作(目的/前提を読んでから実行)

目的

  • Pages公開用のActionsワークフローを設置し、push トリガーで自動ビルド・デプロイする

前提

  • リポジトリのルートで .github/workflows/ を作成可能
  • Hugoバージョンは適宜更新(Extended版)
# .github/workflows/hugo.yaml(一例)
name: Build and deploy

on:
  push:
    branches: ["main"]
  workflow_dispatch:

permissions:
  contents: read
  pages: write
  id-token: write

concurrency:
  group: "pages"
  cancel-in-progress: false

jobs:
  build:
    runs-on: ubuntu-latest
    env:
      HUGO_VERSION: 0.154.4  # 例:PaperModは extended が必要
    steps:
      - name: Checkout
        uses: actions/checkout@v4
        with:
          submodules: recursive
          fetch-depth: 0

      - name: Setup Pages
        id: pages
        uses: actions/configure-pages@v5

      - name: Install Hugo (extended)
        run: |
          curl -sLJO "https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz"
          mkdir -p "$HOME/.local/hugo"
          tar -C "$HOME/.local/hugo" -xf "hugo_extended_${HUGO_VERSION}_linux-amd64.tar.gz"
          echo "$HOME/.local/hugo" >> "$GITHUB_PATH"

      - name: Build with Hugo
        env:
          HUGO_ENVIRONMENT: production
          HUGO_ENV: production
        run: |
          hugo --gc --minify --baseURL "${{ steps.pages.outputs.base_url }}/"

      - name: Upload artifact
        uses: actions/upload-pages-artifact@v2
        with:
          path: ./public

  deploy:
    environment:
      name: github-pages
    runs-on: ubuntu-latest
    needs: build
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v3

結果(この時点でできること)

  • mainpush するだけで、Hugoビルド→Pages公開まで自動化される

注意/補足
Hugoの バージョン更新Extended版 の維持に留意。PaperModのサブモジュール利用時は submodules: recursive が必要です。

操作(目的/前提を読んでから実行)

目的

  • PaperModの記事をページバンドルで追加し、OGP画像や相対参照を安定させる

前提

  • リポジトリ構成はHugo標準
  • PaperModのcover画像を用意済み
# 記事ページバンドル(推奨)
mkdir -p content/posts/termux-git-flow-intro/
mv path/to/local/index.md content/posts/termux-git-flow-intro/index.md

# カバー画像を同フォルダに配置(相対参照)
cp cover-termux-git-flow.png content/posts/termux-git-flow-intro/

# 変更をコミット&push(Actionsが自動ビルド)
git add .
git commit -m "Add new post from Termux"
git push origin main

結果(この時点でできること)

  • 記事追加〜公開までスマホから完結し、OGP画像の崩れ(404)も起きにくい

注意/補足
cover.relative: true を用いると、ページバンドル内の画像参照が安定します。


⚠️ よくある注意点(Termuxと通常Linuxの違い)

Termuxのパッケージ・権限・ビルド要件には独自仕様があり、以下に留意します。

操作

  • pkg を優先し、外部スクリプトや他ディストリ向け手順の流用を避ける
  • 共有ストレージ配下でのGit操作は safe.directory を適宜設定する

目的

  • 破損リスク・権限エラーを回避し、継続運用できる環境を保つ

結果(この時点でできること)

  • インストール失敗や権限問題を未然に防ぎ、安定した開発フローを維持

補足
公開Wi‑Fiでは VPNの併用 を検討。SSH鍵には 強固なパスフレーズ を設定すると安全性が高まります。


✅ つまずきポイント(チェックリスト)

  • ssh -T git@github.com成功メッセージ を返す(SSH鍵がGitHubに登録済み)
  • Permission denied (publickey) の場合、公開鍵の未登録/別鍵 の可能性を再確認した
  • 共有ストレージ配下で fatal: detected dubious ownershipsafe.directory を設定した
  • ghpkg導入 の上、ブラウザ連携認証 でログインした
  • 公開鍵コピーに Termux:API + termux-clipboard-set を利用できる
  • PaperModの cover画像 はページバンドル内に配置し、relative: true を設定した
  • GitHub Pagesの SourceGitHub Actions に切り替えた
  • ActionsのYAMLで Hugo Extended を用い、submodules: recursive を指定した
  • push 後、Pagesが 200応答 で公開されることを確認した
  • エラー時は pkg更新 → 権限再付与 → SSH鍵/設定再確認 → 実URLチェック の順で復旧した

📚 参考リンク


🎯 まとめ

  • Termux + Git/GitHub で、スマホから安全な開発フローを構築できます。
  • ed25519鍵 + SSH認証 を基本に、ssh -T の成功を起点に進めましょう。
  • ghpkg導入ブラウザ認証 が簡便で確実。
  • Hugo(PaperMod)Actions + Pages で自動公開するとスマホ運用と相性良好。
  • 本記事の手順に沿えば、記事編集 → push → 自動公開 の一連がスマホだけで完結します。