LolipoでGitのBareリポジトリを使う

ようやくLolpopサーバでベアリポジトリ管理する方法が理解できたので備忘録として投稿

まず、Lolipopサーバのスタンダードに契約している物の、ホームページなんて大した容量を使ってないので相当余っている。

スタンダードの容量は120GBあるのでWordPressだけで使うのはかなりもったいない。

そこで、GitのリポジトリをLolipopに設置できるかみてみるとマニュアルがあって、Gitのリポジトリの設置が可能でSSH接続もroot権限は出来ないが可能と言う事を確認した。

ならば、Gitのリポジトリ構築を自分の契約しているサーバにすればGithubとかの公開リポジトリにする必要は無く、ちゃんとバージョン管理もできてありがたい。

今迄、適当にプログラムの修正をしていたので、いつ何の変更をしていたのか忘れてしまって、メモとか残してはいたのだがPCクラッシュとかリカバリーとかでクリーンインストールしたりとにかくずさんで記憶頼りでしかなかった。

ソース中にコメントを残してはいるので、それをみてなんとかしのいでいるわけだが、そうなると、変更内容によって、ユーザに見積もったり請求したりする際、自分自身の裁量でやるしかなく、まぁ人間関係出来ているユーザなので多めには見てくれるが、親しき仲にも礼儀ありだし、第三者にもちゃんと合理性を検証出来る様にしたかった。

そんな問題を一気に解決してくれるのがGitとGitKrakenでこのおかげでさらに開発が楽しくなってきたのだ。

そこで、Lolipopにベアリポジトリを設置して管理出来する方法を備忘録として書いてみた。

前提条件として、LilipopのSSH接続オプションをEnavleにしてSSH接続に関してはOKと言う事で、さらに公開キーでの接続も何のそのと言ったレベルを前提条件とし、さらにFilezillaを使ってSSH接続でファイルを転送したりパーミッションを変更出来るものとする。

まず、やることはLilipopにSSHでつないでプル、プッシュするためのベアリポジトリとノンベアリポジトリを作る事から始める。

1.LolipopにSSHクライアント(俺はRroginを使っている)で接続

2.Filzillraでつないでフォルダーを作っても良いし、1のコマンドを打ち込む
そのときのパーミッションは705(775)でFilezillaなら右クリックで簡単に設定確認できる。

3.1で重要なのはbareオプションをつけてgit initをする
ベアリポジトリにする開発用のPCからプッシュするリポジトリをrepos/project-vb6.gitにするのだが、ベアリポジトリの場合フォルダーの最後に「.git」とつけるのが慣習との事だが俺はそんな慣習なんか継承する気はさらさら無いが、自分でもわかるように一応そうした。

4.ベアリポジトリにプッシュした際にリモートに実態のファイルが転送されるノンベアリポジトリにプルするためのコマンドファイルを用意する。
ここが結構やっかいなところではあったのだが、要するに、ベアリポジトリにローカルからプッシュされた際に、実態のファイルをワーキングディレクトリに転送しないといつまでたっても他のパソコンでプル出来ない事になるわけだ。

ベアリポジトリはプッシュしたファイルの変更履歴などのデータだけを登録するサーバで実態のファイルは保存されず無視されてしまう。

このまま使うと、実態のある自分ローカルPCのローカルコミットと同じことで、コミット情報をプッシュするだけのリポジトリで、他のパソコンからこのリポジトリに接続してもコミット情報は得られる物の、プルしてもファイルは空のままになってしまうわけだ。

なので、ベアリポジトリにプッシュされた場合、リモート側のフォルダーにファイルを転送するコマンドを自動で実行するのがhooksフォルダーに保存したスクリプトと言う事になる。

このスクリプトは色々とかけるし、Pythonでもかけるみたいだが、単純にリモート側のノンリポジトリフォルダーでGitのプルコマンドをたたくスクリプトを設置している。

この中身はリモートのノンベアリポジトリにしたwork/project-vb6にCDして、そのフォルダー内でgit pull origin master:masterと言うコマンドを打ち込むと言うだけの事なのだ。

手動でやる場合、SSHで接続してノンベアリポジトリに入ってプルする事になる。

その際、ローカルでファイルをテキストエディターで作って拡張子無しでファイルを保存してFilezillaで転送するのが簡単でその後パーミッションを755にするだけだ。
3番のコマンドを打ち込むのと同じ事だ。

注意するのはローカル環境のエディターでファイルを作った場合、改行コードがCR+LFになっていると、hooksフォルダーにファイルを転送してもgitがファイルを見つけることが出来ないので、必ず改行コードはLFにして保存しないと駄目なのでご注意を(ちょっとはまった)

SSHのこまんどでviなんかでファイルを作る場合は改行コードがLFになっているので問題ないと思うけど確認した方が良いと思う。

5.リモート側のノンベアリポジトリを設定する
リモート側に作った実態のファイルを管理するリポジトリをwork/project-vb6として作成し、そのフォルダーにCDして、git initをオプションなしで実行する。

これで、実態ファイルを格納、バージョン管理するリポジトリが構築出来る。

このフォルダーを公開フォルダーにする事でプッシュするとwebサイトも更新出来るデプロイと言う事も出来る様になると言う事だが、Lolipopの場合公開パスはsshで最初につながるパス内にあるwebと言うフォルダーで、これを知らずに思わずsshでつないでwebと言うディレクトリを削除してしまった事があって、一気に公開しているサイトを削除した事があったので双頭にご注意を。

俺の場合、たまたま直前にざっくりとバックアップしていたので復旧出来たけどバックアップしてなかったら最初から構築し直しと言う事になる。

なのでLolipopでデプロイ環境を構築する場合、hookでプルするフォルダーをwebフォルダー以下に設置してそこにデプロイすればgitのブランチとしてdevelopを使ってプッシュした場合はworkフォルダーを更新して、masterでプッシュした場合はweb以下の公開フォルダーにすると言った書き方をすればそれも可能になってくるが、まだ、webシステムの提供には至ってないので、それはまだ先の事だが一応出来る事を確認した。

5.リモート側で最後に実施するのは4番の設定でgit remote -vでベアリポジトリのパスが表示されたらOK

後は、空のコミットをリモートのノンベアリポジトリで実施して、「git add .」と「git commit -m “Initial commit”」して「git push origin master:master」してちゃんと設定できたか確認する。

6.今度は自分のローカル環境での設定だけど、お好きなGitクライアントを使っても良いだろうし、直接bashで作っても良いし、好きなように構築すれば良い。

GitKrakenの場合はローカルリポジトリを作るのは簡単

7.ローカルリポジトリを作ったらリモートリポジトリを設定する必要がある。

Lolipoの場合は「ssh://xxx.jp-xxx@sshxxx.lolipop.jp:2222」がsshサーバなので、ユーザコンソールで自分のsshサーバを確認してユーザ名とセットで確認する必要がある。

その後、設置したリモートリポジトリのベアリポジトリのパスを続けて設定する。
「/home/users/2/xxx.jp-xxx/repos/project-vb6.git/」

上記をつなげた長い文字列がリモートリポジトリとなるのでそれを設定して後はプルしてやれば準備完了だ。

8.管理したいソースをローカルからプッシュするか、FTPでリモート側に置くかしてフェッチして実態のファイルがローカル環境にもリモート環境にもあればgit管理がスタート出来る。

その際、日本語のファイル名とかあっても気にする必要は無く、エクセルファイルでも画像ファイルでもなでもかんでもプロジェクトのフォルダーをまるごと入れても問題ない。

一応、ignoreしているのはexeファイルやlogファイルとかプログラムの開発環境に合わせたiniファイルとかは無視する設定にしている。

俺のアプリの作り方として、iniファイルの情報で色々とDB接続先とかを管理しているので、iniファイルまでcommitしてしまうと、プルした環境で動作しなくなっていちいち書き換えなくてはならないので、アプリの作りに依存するが、環境ファイルはignoreする必要がある。

他、画像なんかをignoreしても良いが、プルした側でアイコンがなくなったりローカルでコピー0するファイルが多いのも面倒なので、ignoreは必要最低限で良いと思っている。

便利なのは画像を変更してもその履歴がビジュアルで確認出来るのでそれもありで、ホームページ管理でgitを利用する場合、画像の管理が結構重要だったりするので適宜調整する事になる。

あまりおすすめしないのはパワーポイントとかエクセルなんかのdiffでバイナリ扱いされて比較出来ないファイルはgit管理には向かないのでそういったファイルはDropbox等のクラウドで共有した方が良いのではと思う。

俺の場合、アプリがエクセルファイルを使って帳票の原紙しているロジックがあるので、帳票ひながたを変更した場合、そのエクセルは更新対象にしないと別の環境で同期がとれないのでignoreには含めていない。

後はVB6のプロジェクトはVScodeで開く事は無いが、開いてしまうと.vscodeと言うフォルダーが作られるのでそれはignoreしている。

他にも勝手に作られる管理外のフォルダーなんかはgitクライアント上で上がってくるのでその都度ignoreするか判断している感じだな。

まぁこれでlolipoの容量を余すことなくベアリポジトリとして活用出来る事ができてレンタルサーバーの空き容量も無駄にする事無く使い切ることが出来る。

もう一つlolipopのスタンダード契約しているので、そっちはミラーや実験に使ったりして活用出来る。

サブバージョンにはないローカルコミットがGitの良いところだし、Gitのクライアントも豊富にあるので好きなクライアントを選べるのがすごく良い。

SVNのクライアントを探してみたのだがtortoiseSVN位が関の山でMacでは見つける事が出来なかった。

なので、MacもWindowsも使う場合はGitにした方がベストチョイスなんだろうな。

今迄Gitの事がよくわからず遠回しにしてきたが、やっぱり必要で導入のメリットは大きい。

■使ったツールやおすすめ開発ツール

SSHクライアント:Rlogin(SI屋ではTelnetやwinscpを未だに使っているが俺は絶対に使わないSSHクライアントはrlogion一本)

FTPクライアント:FilezillaかMacではTransmit5(FFFTPがおそらく有名だろうが、SI屋に手伝いに行ったときにいやいや使ったくらいで基本使わない。Fileziilaも無料だと突っ込まれそうだけど、オープンソースだし良いんです。前にNextFTP使った時期はあったけど、これ有料のくせに、未だにSFTPだったかFTPSだったか使えなくて出来悪すぎなのでやめ)

GITクライアント:GitKraken pro(多くはSoucetreeだと思うけど使いにくいし重いのでやめた。なんせMacにインストールしたFusonでWindows10をうごかしていて、そのバーチャル環境では起動すらしない重たさでかなり時間かけたり、何度かやり直してやっと起動出来るので使う事にストレスが生じたのでやめた。trtoiseGITはインストールしているけどね。)

エディター:秀丸エディターとMIFES10とVscode、MacではBBedit12(サクラエディターは絶対使わない。無料ツールで有償アプリを開発するのに抵抗があって、拾った材料で料理出す料理やってある?VScodeも無料と言えば無料なんだが、Microsoftだから許す)

DBクライアント:Navicat premiumとそれぞれのDB付属のクライアント(A5、SQLmanager、Querybookなんかは業務では恥ずかしくて絶対使わない。作者には申し訳ないし敬意ははらうけど使えないものは使えないのだ)

ファイラー:秀丸ファイラーClassicとMacではPathFinder8(開発で結構重要なツールだと思うけどエクスプローラーとかファインダー使ってるやつ多すぎだろ)

HP作成:HPBで十分、MacではCoda2(Dreamweaverとかも使うけどなぁ...)

弘法筆を選ばずとは言う物の、弘法さんはかなり筆に拘っていたとも聞くわけで、なんでも使うけど、道具には拘りが必要だと言う事と認識している。

100円ショップの包丁でプロの料理人に料理してくれとは誰も頼まないはずだ。出来なくはないけど...と言う事だ。

この道具一つでサラリーマンエンジニアかプロのエンジニアか直ぐにわかるわけで、サラリーマンエンジニアはプログラムを仕事としているので仕事を仕上げる道具は会社で用意した道具に限られると言う風潮があって本来のソフトウェア開発を行っていない。

ソフトウェア開発と言うのは本来想像力のたまもので、設計書があって仕様書があってとか言うものではなく、粘土のようなもので、職人の勘で一般ユーザがパソコンを楽しく業務に生かせるソフトを開発することで、仕様をユーザに押しつけたりするやり方はどうにもなじめないし、ユーザ側もそれを受け入れるから業界全体がおかしくなっているわけだ。

もっと自由に頭の中もアップデートしないと日本からは良いソフトウェアは生まれない