GITリポジトリの自動管理

2020年1月7日

テクノロジー

普段は自宅のリビングで仕事をしていて、運営している会社の事務所にはほぼいないので、電話はいつも留守電にしている、ユゲタです。 しかし最近は携帯電話があれば、事務所電話なんてほぼ必要ないのであまり困ることは無いのですが、先日とある病院から留守電が入っていて、その内容というのが、「保険証を置き忘れていったので取りに来てください」という間違い電話。 3日ぐらい連発して掛かってきており、非常に早口で喋っているので、どこの病院なのかもわからず、折り返すことも出来なくて、残念な経験をして、電話転送を考え始めているんですが、転送電話代も無駄に感じてしまい、改めて、こうした固定電話もWEBに誘導することができないものかと、考えています。 色々なシステムアイデアがどんどん湧いてきて、片っ端から作っていっている状態ですが、今回は、自作しているWEBサイトフレームワークのgitリポジトリを自動更新できるようにしたいと思い、先日から研究していたのですが、ようやくOSSレベルになったので、公開しておきます。

Auto-Plugin

すでにgithubにアップしているので、最初にリンクを紹介しておきます。 https://github.com/yugeta/auto_plugin READMEにも書いている内容とかぶる点もありますが、簡単にツールの紹介をしておきます。 基本機能は、Gitリポジトリを複数プラグインとしてvendorディレクトリ(任意可能)に一括ダウンロード、一括アップデート、更新確認をコマンド1つで管理できるphpのcomposerの簡易版を構築してみました。 利点としては、rootにあるauto.shと設定ファイル(jsonかcsv)のみで動作できるので、モジュールの無駄なインストールや、容量を費やすこともほぼありません。 linuxのbashではなく、shで動くことを前提として構築してみたので、ほとんどのwebサーバーで動作できると思います。 ただし、jsonデータを扱う場合に、jqコマンドを必要とするので、jqがインストールされていない環境では、csvファイルで行うことも可能です。 jq以外でもphpでjsonパースする方法もあったのですが、あくまでコマンドラインで完結したかったので、とりあえずの救済策としてのcsv使用としています。

使い方

最初にモジュール(auto.sh)をroot階層に設置したら、設定ファイルを作成します。 ※設置する場所は同じサーバーでauto.shからアクセスできればどこでも構いません。(同じ階層にしておくと、管理しやすいです) [ { "name" : "ライブラリ名(plugin/***/の文字列)", "git" : "gitリポジトリのアドレス(url)" }, { "name" : "table_sort", "git" : "https://github.com/yugeta/table_sort.git" } ] %name,$git-repository table_numcal,https://github.com/yugeta/table_numcal.git (注意) 1. csvデータのそれぞれのラインには必ず改行コードを加えてください。 2. jsonとcsvのサンプルを掲載していますが、1つ目は説明データなのでそのまま使わないようにしてください。 基本的な使い方は、auto.shに対して、以下の3つのコマンドを引数に与えることで動作するようにしています。 -m : 動作モード [ (default) auto , check ] auto @ 自動ダウンロード(clone)、自動アップデート check @ 更新確認 -f : 設定ファイルのパス -d : 格納先ディレクトリ (default : vendor) さほど説明はいらないと思いますが、注意点としては、auto.shは必ずサイトのrootに設置するようにしてください。 別の階層に設置する際は、その階層からの相対パス(またはサーバー内の絶対パス)をーfコマンド、-dコマンドに登録してください。

自動ダウンロード

sh auto.sh -m auto -f sample.json -d vendor auto None : vendor/table_sort Cloning into 'vendor/table_sort'... remote: Enumerating objects: 62, done. remote: Counting objects: 100% (62/62), done. remote: Compressing objects: 100% (35/35), done. remote: Total 62 (delta 33), reused 55 (delta 26), pack-reused 0 Unpacking objects: 100% (62/62), done. Checking connectivity... done. sh auto.sh -m auto -f sample.csv -d vendor auto None : vendor/table_numcal Cloning into 'vendor/table_numcal'... remote: Enumerating objects: 49, done. remote: Counting objects: 100% (49/49), done. remote: Compressing objects: 100% (32/32), done. remote: Total 49 (delta 14), reused 49 (delta 14), pack-reused 0 Unpacking objects: 100% (49/49), done. Checking connectivity... done. jsonとcsvがそれぞれgithibからcloneされていることが確認できました。

アップデート確認

$ sh auto.sh -m check -f sample.json -d vendor check Same : vendor/table_sort $ sh auto.sh -m check -f sample.csv -d vendor check Same : vendor/table_numcal ローカルリポジトリと、githubリポジトリが同じ場合(アップデートがない場合)は"Same"という文字を返します。 もしアップデートがある場合は"Diff"という文字になりますが、"-m auto"モードにしておくと、diffの場合は自動で更新されます。

あとがき

このツールは、自作したフレームワークで使うことを目的にしていますが、ライブラリを任意ディレクトリで一括管理しているwebサイトなどでは、普通に使えると思います。 githubだけでなくても、独自で構築した公開型GITリポジトリでも、git設定にアクセスできるurlを書き込めば問題なくclone,pullできるはずです。 phpのcompopserなども同時に一括管理できれば、幅も広がるかもしれませんが、今の所githubのみを推奨にしておきます。 このツールをライブラリ更新チェックとして使ってもいいし、1日1回のcron処理をさせてもいいし、フレームワークなどの更新ページで、ユーザーに任意更新されるフックにしてもいいですし・・・ とりあえず、この機能があれば、結構WEBサイト開発は捗るはずです。 そして、自分の構築しているモジュール(機能)もできるだけOSS化しておけば、それぞれの機能の管理が非常に効率化出来ることもイメージできました。 企業で複数人で管理しているプロジェクトでも、ミニマムサイズの開発に切り分けで効率のいい管理と、開発運用が出来ることも容易に想像できますね。 vendorフォルダを別の階層に切り替えて、全てをgithub管理にすることも可能かもしれませんね。 Must 効率!

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。