Pastalablog in はてな

時代はブログ! 日記もあるよ→http://pastak-diary.hatenadiary.com

CentOS6.4にGitlab入れて、さらにpushされたらftpでデプロイ出来るようにした話

この記事はKMCアドベントカレンダーの1日目の記事です。

というわけで、初日は言いだしっぺの法則で予告通りKMC入りたてほやほやなのに、「老師」と呼ばれだしている若者代表の僕が、

Gitlab導入情報とGitでFTPをゴニョゴニョする方法を、主に便利スクリプトへのリンクを貼ってごまかしながら紹介をします。

参考情報:http://pastak-diary.hatenadiary.com/entry/2013/10/10/004510

Gitlabを導入する

CentOSRubyのバージョンを上げる

まずはCentOSRubyのバージョンを上げる。Ruby1.9.3くらいを入れとくと良いです。
Ruby1.9.3の入れ方はここに載ってるので、丁寧にコピペして実行するとなんとかなる。
CentOS 6.3 に Ruby 1.9.3 をインストールする - パンダのメモ帳

便利スクリプトを実行する

便利スクリプトを公開してくださってる方がいるので、これを実行して、ボーっとしてたら入る。
CentOS 6.4 用の GitLab 自動インストールスクリプトを書いた : あかぎメモ

コケるからディレクトリをつくったりする

Gitlabのインストールが成功したかどうかは

  • $ sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
  • $ sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

を実行したら分かる。
ぼくの環境だとrepositoryディレクトリがないとか言われから、それを作って権限を与えたりした。

これでGitlabは動くようになる。便利。

Gitlabのレポジトリにhookを登録して差分があるファイルをFTPで飛ばす方法

古き良きFTPで本番用サーバにアップロードをしていることも多いと思う。
そういう時、サーバサイドでgitコマンドを叩けないとかもあるので、なんとかFTPしたい気持ちになる。
その時に便利なスクリプトがgit-ftp.pyです。

git-ftp.pyを使う

本体はここにある。

ezyang/git-ftp · GitHub

みんなだいすきgit cloneコマンドを叩くと降ってくる。

  • git clone git@github.com:git-ftp/git-ftp.git

あと、pythonからgitを扱うためのライブラリが必要なので、それも入れます。

  • easy_install gitpython

レポジトリに設定ファイルを置く

Gitlabで作ったレポジトリ/home/git/repojitory以下に作成されます。
このレポジトリに対して*.git/ftpdataを作成します。

masterブランチにpushされたら本番用に、developブランチにpushされたら開発用サーバにFTPアップロードするように書いた例を示します。

[master]
username=user
password=thisismyPassW0rd
hostname=ftp.myservice.com
remotepath=/root/dir/to/myservice.com/
[develop]
username=user
password=thisismyPassW0rd
hostname=ftp.myservice.com
remotepath=/root/dir/to/dev.myservice.com/

remotepathに書いたディレクトリ以下に配置されます。

  • masterブランチでapp/model/hoge.phpをcommitすると、リモートサーバの/root/dir/to/myservice.com/app/model/hoge.phpにアップロードされます。
  • developブランチでpublic_html/index.htmlをcommitすると、リモートサーバの/root/dir/to/dev.myservice.com/public_html/index.htmlにアップロードされます。

後述するgitftpignoreを利用する場合は各ブランチの設定に1行足して、gitftpignore=.my_gitftpignoreを追記します。

レポジトリpost-receiveを編集する

*.git/hooks/post-receivegit-ftp/post-receiveシンボリックリンクを貼ります。これでpushした時にgit-ftp.pyが呼ばれるようになります。

.gitftpignoreを作成する。

作業ディレクトリの中に.gitftpignoreファイルを作ります。
書き方は.gitignoreと同じです。
これに書いたファイルはFTPアップロードの対象にならなくなります。
レポジトリ内にvagrantの設定ファイルやReadmeがある場合など良しなに利用してください。
これを利用する場合は*.git/ftpdataに前述の1行を追加する必要があります。

リモートサーバにgit-rev.txtを配置する

これを置かないとgit pushするたびにgitで管理しているファイルが全てアップロードされてしまいます。
初めてのデプロイの場合は中身は空で問題無いです。
もし、差分のみをアップロードしたい場合はgit-rev.txtに最新コミットのハッシュを書き込みます。
最新コミットのハッシュを書き込んでおくと、次にgit pushした時にコミットとの差分のあるファイルのみをアップロードするようになります。便利。

git-rev.txtの配置場所ですが、先ほどの例だと、

  • /root/dir/to/myservice.com/
  • /root/dir/to/dev.myservice.com/

にそれぞれ配置すると良い感じになります。

まとめ

社内などのローカルのCentOSにGitlabを入れて、git pushにhookしてリモートの本番用サーバなどにFTPでアップロードする方法を実現するための各種便利スクリプトや便利記事を紹介しました。

もし、今はFTPでやっているけども将来的にGitなどに移行したいなどの考えがある場合でも、いきなりGitに移行するのは難しいと思いますが、実験的に1プロジェクトなどでGitlabを利用し、Merge Requestを試してみることで徐々に利用エリアを増やしていくなどの利用法が考えられると思います。

よろしくお願いします。

明日のKMCアドベントカレンダー2日目はmonadさんが「CentOSときたのでGentooネタでなにかひとつ…。」とのことです。

楽しみですね!!。

ではでは。

宣伝

ちなみにKMCでは今度のコミックマーケット85でも部誌を出します。
過去の部誌はここで読めます → http://www.kmc.gr.jp/projects/press/
僕も何かを書く予定*1ですので、よろしくお願いします。

場所は3日目西地区 "し" ブロック 42bです。

新入部員も無限に募集しています。よろしくお願いします。

入部案内 — 京大マイコンクラブ (KMC)

*1:まだ1文字も書いてないとは絶対に言えない…

#GITHUBJP でGitの話を聞いてきた。−大学の授業とGithubについて聞いてきた

GitHub トレーニングチームから学ぶ Git の内部構造 @京都 : ATND に参加してきた。

内容は他の人がまとめてくれる*1と思うので、そっちにお任せして、表題の話をTwitterにpostしたらめっちゃRTされたので、ブログに書いておこうと思った次第です。

話の流れ

大学の先輩とかと「ビールが少ない」とかそういう話をしてたら、GithubトレーニングチームのJohnが質問あるか?って来てくれた。

GitとかGithubについて何でも質問して良いって感じだったんだけど、Gitの構造の話を大量に聞いて脳のリソースが追いついてなかったから、トークの最中に一瞬出てた大学でGithubを活用する話(MITとかでは既にプログラミングの課題をGithubを活用して学生がPull Requestで提出してるという話)について聞いた。
ざっくり言うと「うちの大学では毎週毎週課題を未だにメールで送信していて、不便だ。なんとかしてくれないか?」みたいな質問をした。
Johnの解答は「オープンで理解のある先生はいるなら、その人を紹介してくれれば大学の授業でのGithub導入のメリットや手順ややり取りは僕の仕事だから全部やるよ」というものだった。
実際世界中の多くの大学が利用してて、7万人以上の学生が利用していると聞いた。
そのあともずっとGithubを利用するメリットについて熱くJohnは語ってくれた。

ざっくりまとめると、

Githubを使ってれば、github.comのユーザーページをそのまま履歴書にも出来る。その学生がどんなコードを書いてきて(大学の授業で学んできて)、普段どれくらいの頻度でコードを書いているかもユーザーページを見れば緑が濃いとめっちゃcommitしてるって分かるし、どんなプロジェクトにcontributeしてきたかも一目で分かる。
バージョン管理システムを使える学生と使えない学生、どっちが会社にとって魅力的かも明白だ。

(今調べたら、サイバーエージェントがGithub採用をはじめるらしい サイバーエージェント、2015年新卒採用において「GitHub採用」実施 | マイナビニュース

tyageが実際の活用例を見たいと言ったら、連絡してくれたら見せれるし、近々そういうサイトを公開する用意があるみたいなことも言ってた。

日本の大学ではまだGithubを授業で導入した事例を聞いたことがないけど、1クラス単位でレポジトリ作ったりして活用できるなら便利そうだし、日本でも是非始まってほしいと思った。
関係各位におかれましてはよろしくお願いしたい次第です。

Johnに連絡したい人は https://github.com/edu からメッセージを送ってくれとのことでしたので、ここに記しておきます。

*1:こことかめっちゃ充実してる。https://gist.github.com/OrgaChem/7482397

Scheme書くためにVimの環境を整えたメモ

前の記事にも関連して、授業でSICPをやってるので、SchemeVimで書いたりするために環境を整えたりしたので、メモがてら導入したものを書いておきます。(と言っても2つだけだった)

前の記事: Schemeを実行するChrome拡張「chroscheme」を作った - Pastalablog in はてな

vim-niji

気がしたので、紹介しておきます。

Vimにはオプションでlisp_rainbowというのがあって、これを有効化すると、Lispを書く時に大量に出てくる( )の色を対応する物毎に変えてくれるから、対応関係の見分けが付きやすくなる。
あとカラフルになるから少しだけ楽しい気持ちになる。
でもこのオプションを有効にしても、filetypelispじゃないと適用されないから、拡張子が.scmだとfiletypeが異なるから適用されない。
そこでこのvim-nijiの出番である。
これを導入すると、filetypelisp以外でもSchemeとかClojureとかでもlisp_rainbowと似たようなことが出来て便利。

vim_goshrepl

これでgoshREPLをVim内で呼び出せるようになる。
neocomplcacheとかの補完も聞くし、ソースコードの一部だけを選択して実行とかも出来る。
便利。

その他

おまけ

SICPの授業はレポートをLaTeXで書くことが要請されているので、Vim-LaTeX入れたりもした。

Schemeを実行するChrome拡張「chroscheme」を作った

jsScheme - Scheme interpreter in JavaScriptというサイトがある。
このページではSchemeをブラウザ上で実行できる。
どういうことかというと、つまりはScheme処理系がJavaScriptで実装されてる。
GPLライセンスで自由に使って良いとのことだったので、一部だけ手を加えて、Chrome拡張に移植した。

授業でちょうど今、『計算機プログラムの構造と解釈』(Structure and Interpretation of Computer Programs)を読んでて、英語版はリンク先で全部公開されてるから、これを読んでるとSICPにサンプルコードを見つけると、自分の場合はそれをコピーしてVimに貼り付けて実行するとか、大体の人なら授業指定の処理系Jakldに貼り付けたりして実行している。
学習的には丁寧に写経したりするんだろうけど、どう動くかとか、数字変えたらどうなるかとか、そういうのするにはJakldとかに貼るのはちょっと不便な感じもある。
そもそもコピペが手間。

そこでさっきのサイトの処理系をGoogle Chrome拡張で利用できるようにした。
https://github.com/pastak/chroscheme

追記:Chrome Web Storeに載せました。ここからダウンロードするとアップデートもされるし便利

https://chrome.google.com/webstore/detail/chroscheme/phjmhmnadabpccnocbkiafljcjajbmjf

ブラウザ内で文字列を選択している状態でポップアップを開くと選択文字列をSchemeのコードとして処理して結果を出力する。
そのままテキストエリアに自動で挿入されるので、テキストエリアを編集することで、数字を変えたりして再実行が出来る。

便利にご利用ください。

追記:バージョンアップ情報

  • Version 0.1.5 (2013/10/30)
    • テキストエリアのフォントサイズの変更用のセレクトボックスを追加
  • Version 0.2.0 (2013/10/30)
    • ポップアップを閉じる前のテキストエリアの状態を保存

Google Maps API v2が2013年11月19日に廃止になる話

追記

日本語でもちゃんと書かれてた。
Google Maps JavaScript V2(非推奨) - Google Maps JavaScript API v2(サポート終了) — Google Developers

Google Maps JavaScript API バージョン 2(V2)は、2010 年 5 月 19 日に正式にサポートが終了しました。V2 の廃止スケジュールは 2013 年 5 月 19 日の予定でしたが、2013 年 11 月 19 日(太平洋時間、日本時間では 2013 年 11 月 18 日)まで延期することになりました。この日以降は V2 を使っている地図は、下位互換機能を持たせた V3 の地図に自動的に切り替わる予定です。この下位互換機能により、大部分のシンプルな地図は機能すると考えますが、この日以前に V3 へ移行を完了することを強く推奨いたします。

API Keyを取得しているからかGoogleからメールが来ていた。
公式ブログがに詳細が書かれてる。
Google Geo Developers Blog: An update on the JavaScript Maps API v2 deprecation

Therefore, we’re extending the deprecation timeline for JavaScript Maps API v2 by six months, to November 19, 2013. On that date, we will attempt to automagically turn remaining v2 maps into v3 maps, by way of a JavaScript wrapper we will deploy. We expect this wrapper to work for most simple maps, but to avoid any last minute surprises we strongly encourage sites to complete their migration to v3 ahead of this date. We have prepared an upgrade guide to help make the migration process as painless as possible.

まぁつまり、11月19日にv2が廃止になった後に、今までのv2のAPIが無効になるのではなくて、v3で動くようにラッパー用のJSが配信されるようになるから、シンプルなMapsアプリケーションなら動くかもしれないけど、複雑だとカバーし切れないから公式ドキュメントのv2からv3への変更方法を参考に頑張ってくれとのこと。
Upgrading Your Google Maps JavaScript Application To v3 - Google Maps API — Google Developers

中3の時に作って公開して、未だに毎月結構なアクセスを稼いでるガソリンスタンド情報マップがv2で動いてるので、これをキッカケにJS自体も当時は全然書けなくて、PHPでJS生成したりしてて泥臭い感じなので良い感じに書き換えたりしたいかもしれない。

SafariはプライベートブラウジングモードだとlocalStorageが使えない

割と前から既知だったようだけど、今日ちょうど直面した。
詳細については及川さんのブログが詳しい。
HTML5のストレージ技術とプライベートブラウジング - Nothing ventured, nothing gained.

ブラウザがプライベートブラウジングモードかどうかは当然知られたくない情報だろうから、UAとかから分かることもなくて、localStorageに書き込もうとしたら、エラーになるから分かる。

make a record of…: [iPhone] プライベートブラウズモードだとストレージが使えないとかでも書かれてるように、localStorage.setItemとかする部分をtry{~~}catch{~~}で囲んでやるしかない。

認証ボタンを押したことをクライアント側で知っておきたいというために利用していたので、プライベートブラウジングモードだとlocalStorageに書き込めなくて認証画面が無限ループする状態だった。

スマートフォン向け実装だから、極力サーバとの通信回数を減らすべくlocalStorageを使う選択をしたのに思わぬところでサーバと通信させないといけなくなったという感じ。

京都大学のKULASISに背景画像を設定するための拡張をFirefoxに移植しました

先日、京都大学のKULASISに背景画像を設定するGoogle Chrome拡張を作ったのだけど、インターネットで一部、Firefox化を望む声があったので、この度対応したことをお知らせします。

使い方などは、Chrome拡張と同様です。
オプション設定画面はメニューからアドオン管理画面を開いて、kulasis-happy-background <version>詳細または設定を押すとOpen preferencesというボタンが表示されるので、そのボタンを押すと設定画面がパネルで開きます。

移植に関しては、autopagerizeのFirefox版のソースコードを参考にしつつ、Add-on SDKを利用しました。
Add-on SDKについてはMozillaのサイトにチュートリアルなどがあります。
-Add-on SDK Documentation

また、アドオンの配布に関しては別に記事を書いたので、そちらをご覧ください。

インストールは以下のリンク先にXPIファイルが置いてあるので、リンクをFirefoxで開くとインストールが始まります。
http://pastalablog.s3.zmx.jp/kulasis_happy_bg/kulasis-happy-background.xpi

こちらもオープンソースになっています。
よろしくお願いします。
https://github.com/pastak/kulasis-happy-background-for-firefox