Synology NAS の Git Server でローカル開発しているコードを Taskfile で管理する 🗄️
ある程度仕上がったコードはGitHubで管理していますが、ちょっとした検証や試作はローカルのディレクトリで行っています 💻 Macユーザーなら ~/Developer ディレクトリを作成して作業している方も多いかもしれません。
私の場合、ローカルボリュームの容量が限られているため、NASの共有フォルダに保存して作業していました。しかし、この方法には以下の問題がありました 😓
- NAS切断時の作業再開が面倒です
- ディレクトリの移動し直し
- CLIで実行しているAI Agentなどの再起動
- ファイル書き込み速度が遅いです
- パッケージインストールに時間がかかります
これらの問題から、開発作業はローカルで行うように方針を変更しました。
Git Serverの導入を決めた理由 🤔
ローカルボリュームは容量に限りがあるため、NASをバックアップ用途として活用することを検討しました。
- ローカル作業の場所
~/Developer- アクティブなプロジェクトのみ配置します
- バックアップの場所
/Volumes/Developer- NASマウント先
- 過去のプロジェクトやアーカイブを保存します
バックアップとリストアの手順を考えていく中で、「Gitを使えばもっとシンプルになるのでは?」と気づきました 💡
調べてみると、Synology NASは標準でGit Serverに対応していることがわかりました。Giteaなどのコンテナソリューションも検討しましたが、シンプルで軽量な標準機能を使うことにしました。
前提条件 📋
~/.ssh/configでNASへのSSH接続を設定済みですHost nas Hostname nas.yumenomatayume.home # Synology NASのIPまたはドメイン User yumenomatayume IdentityFile ~/.ssh/nas.id_rsa- miseで必要なツールをグローバルインストール済みです
mise use -g task ghq peco
設定手順 ⚙️
Git Serverのインストール
Synology NASのパッケージセンターからGit Serverをインストールします。
初期設定
初回のみ、NASにSSHしてGitのデフォルトブランチを設定します。
git config --global init.defaultBranch main
ディレクトリ構成
以下のディレクトリを作成します。
- NAS側:Git Serverのリポジトリ保存先
- 例:
/volume1/homes/yumenomatayume/git
- 例:
- ローカル側:ghqの管理ディレクトリ
- 例:
~/.ghq/nas/volume1/homes/yumenomatayume/git - ghqでSSH経由でクローンすると、このパス構造になります
- クローンコマンド例:
git clone ssh://user@nas/path/to/repo.git
- 例:
設定ファイルの作成
ローカルのghqディレクトリに README.md と Taskfile.yml を作成します。Taskfileで操作を自動化し、READMEに使い方を記載します。
Taskfileの実装 📝
Taskfile.ymlで主要な操作を実装しました。
version: '3'
vars:
NAS_USER: yumenomatayume
NAS_HOST: nas
NAS_GIT_SERVER_PATH: /volume1/homes/yumenomatayume/git
GHQ_NAS_ROOT: "{{.HOME}}/.ghq/{{.NAS_HOST}}{{.NAS_GIT_SERVER_PATH}}"
CONFIG_FILES: README.md Taskfile.yml
tasks:
init:
desc: "Create local project directory and remote repository"
silent: true
prompt: "Create {{.CLI_ARGS}} repository?"
cmds:
- mkdir -p {{.GHQ_NAS_ROOT}}/{{.CLI_ARGS}}
- ssh {{.NAS_USER}}@{{.NAS_HOST}} "mkdir -p {{.NAS_GIT_SERVER_PATH}}/{{.CLI_ARGS}}.git && cd {{.NAS_GIT_SERVER_PATH}}/{{.CLI_ARGS}}.git && git init --bare"
clone:
desc: "Clone from remote"
cmds:
- ghq get ssh://{{.NAS_USER}}@{{.NAS_HOST}}{{.NAS_GIT_SERVER_PATH}}/{{.PROJECT}}.git
list:
desc: "List local and remote repositories"
cmds:
- task: list:local
- task: list:remote
主なタスク:
init:ローカルディレクトリとNAS上のベアリポジトリを作成しますclone:NASからリポジトリをクローンしますlist:ローカルとリモートのリポジトリ一覧を表示します
使い方 🚀
リポジトリの初期化
task init -- myproject
リポジトリのクローン
task clone -- myproject
リポジトリ一覧の表示
task list
設定ファイルのバックアップ
task config:backup
開発が終わったら 🎉
開発が完了したら、GitHubにリポジトリを移行します。
# GitHubにリポジトリを作成
gh repo create
# リモートURLをGitHubに変更
git remote set-url origin ssh://git@github.com/ymmmtym/name-of-repository.git
# プッシュ
git push
注意点 ⚠️
親ディレクトリに mise.toml が存在すると、配下のリポジトリがそれを参照してしまいます。
例えば /volume1/homes/yumenomatayume/git/mise.toml が存在する状態で、/volume1/homes/yumenomatayume/git/hoge ディレクトリで mise use task を実行すると、親ディレクトリの mise.toml に設定が書き込まれてしまいます。
このため、Git Serverのルートディレクトリには mise.toml を配置しないようにしましょう。
まとめ ✨
Synology NASのGit Serverを活用することで、ローカル開発のコードを効率的に管理できるようになりました。
Taskfileによる自動化により、リポジトリの作成・クローン・一覧表示などの操作が簡単になり、開発体験が大きく向上しました 🎯 GitHubに公開するまでもない試作コードやプライベートなプロジェクトの管理に最適です。