SSブログ

文章管理にMacでgitを使おうとしたら、少し困難があった。 [プログラミング]

基本、gitはプログラミングに使うのですが、その応用で文章をgitで管理しようと思った。それほど利点はないのですが、テキストで文章管理をしているので、やればいいじゃん、的にやってみました。プログラミングとは違うので、あんまりうれしい事はありません。ありません、というか、ないだろうですね。

 
そもそも、Mac上でTimeMachineを使っていれば一時間ごとぐらいにバックアップをとる事も可能なので、別にgitで履歴をとる必要もないのかもしれない。実際そうなんだけど、変更の時にコミットで変更点を書けるし、意図する状況でバックアップを取れるしね。メリットはないわけではないけど、gitだと基本コマンドベースで良いGUIのソフトがあんまりないのと、細かい事ができすぎて正直実際の利用の時に困る、という状態です。

毎回gitコマンドを打つのも面倒なので、Rubyでスクリプトを作って楽しようと思った。作ってみたら案外楽じゃなかったりするけど、あ~あのコマンドの引数ってなんだっけとか、いちいち考えたり調べたりするのも面倒なので、少しは良かったのかもしれない。

Ruby on Rails以外では案外久しぶりかも、のRubyですが、やっぱり言語は使わないと結構忘れちゃうもんですね。変なオブジェクト指向言語のJavaScriptをやっていると、書き方がすごく楽で直感的な言語なんだなと思う。筋が通っていて、それでいて便利っていうのは、文法を強いるような他の言語とは違いますね。





git initははじめに一回だけでいいはずなので、手動でやればいいとして、後はある程度自動化した。

・git add .
・git commit -a -m 'コメント 変更したファイル名'

という事をやるだけです。git addはファイルを加えてなければ、やってもそれほど影響は出ない(git diffなどで出るけど…)。基本的にcommit時のコメントを取ればいいだけなんだけど、使ったファイル名もコメントに入れときたいなぁと思ったり、結構やることが多くなって面倒が増えた。


あんまりgetsとかでコマンドラインで文字列を入れたことがないんだけど、間違うと修正が効かないのね。バックスペースとか矢印キーとかが効かず、変な文字が入る。今調べたんだけど、WindowsのPuTTYからUbuntuのRubyを使ったら問題なかった。これって、Macのコンソール(ターミナル.app)がダメダメなんじゃ? 設定でなんとかならないものか。というか、修正が効かないコマンドラインっていつの時代の話だよ。日本語をコマンドに突っ込める副作用とか? とはいえ、ターミナル.appで日本語が大丈夫なのに、Rubyの中に入ると日本語入力の扱いがおかしくなる。

ちょっとMacにSSHでつないでgetsがどうなるか見てみる。うわ、PuTTYだと普通に使えるよ。マルチバイトなので二回バックスペース打たないとダメだけど。Macでターミナル.appを開いて、Rubyのgetsを使うとやっぱり前と同じ、バックスペースなどが効かない状態。設定で対応してみると、ターミナル.appの環境設定で少し改善する事ができた。「設定ウインドウの設定」(バカみたいな項目名だ)で「DeleteキーでCtrl-Hを送信」にチェックを外すとバックスペースで文字を削除できるようになる。

しかし、問題は残る。バックスペースを打っても日本語がきちんと消えないのだ。半角全角の問題で文字はバックスペースで一文字分消えるのだが、二回目から実質の文字を消せているのに、表示上では二文字目が消えない。三打目は後ろから三文字消えた状態なのだが、表示では二文字分しか消えてない。Delキーの打っただけ、文字が消えないし、PuTTYでバイト数だけBackSpaceを打って消えるような相関もない。

元々、ターミナル.appは日本語の扱いが雑で、日本語などの多言語対応の別アプリケーションがあったくらいで、初めからマルチバイトを考えた作りじゃないので、こういう事があっても全然不思議ではない。UTF-8対応を謳った時点で、そういう事を考えられるのが普通の最近のプログラマなのだが、英語以外の他言語を話せもしないロートルアメリカ人ばかりしかいないと思われても仕方ない。

もう、普通に日本語使えるようにしてくれ。というか、そのくらいのバグ、日本法人の技術者が気にしてパッチでも送ってやれよ。最近使ってないのでうろ覚えだけど、Xcodeはgit対応してるんじゃなかったっけ? ただの妄想か? もはや面倒でネイティブアプリの開発してないからねぇ。そういやMacRubyってどうなったんだろう。gccからLLVMの移行も見届けなかったな。もう、Mac自体への興味があまり無い。最近sshとfirefoxとthunderbirdとiPhotoぐらいしか使ってない。




他のSSH接続がまともじゃなかったら、Ruby/Tkとかでも使った方がいいんじゃないか、とまで思っていたけど、前にtcl/tk使った時に、日本語入力が話にならなかったから、状況は変わってないな、恐らく。とりあえず、バックスペースを使える状態にして、入れる変数を一回表示してみる。それでダメだったら再入力すればいい。何だかgitコマンドを履歴から呼び出した方がいい気がしてきた。

まぁgit add . を間違いなく実行できる点と、
 git diff HEAD --name-only
の変更ファイルをコメントに書き込めるだけ良しとします。

git diffの引数は図示された素晴らしいページがGoogleで一番頭に出てきた。
 http://d.hatena.ne.jp/murank/20110320/1300619118
正直、細かくは状態遷移を理解できなかったけど、わりとどの状態でもいけそうな引数にしてみました。本気で使うなら、そういうのもつっこんで調べた方がいいんだろうけど、正直自分の進捗を残せたらいいだけなので、いつものように深く立ち入らない事にした。



あと、ダブルクリックで実行できるところ。ここは前にハマったところなのですが、

 http://miff.blog.so-net.ne.jp/2010-11-25-1

ファイルの関連付けをターミナル.appにしたら実行できた。chmod a+x hoge.rb もやったんだけど、それが影響しているのかは分からない。あとshebangも付けたけど、それはRubyだから#!/usr/bin/env ruby って書かないとダメだろうね。シェルスクリプトとかだったらOKかもしれないけどね。




それと、gitでは改行文字がMacのCRでは改行文字と認められないので、LFに変換しないといけなかったのでした。そうしないと全文が一行だと見なされてしまい、diffベースらしいgitにとってはバイナリファイルの変更と扱いは同じなようになってしまうと推測されます。

なので、Macのmiで全文を選択状態にして、LFに変換しました。前もWindowsでもCRLFになっていたので、それでハマった時があったのですが、Macにしても改行があからさまに文字化けするので、git diffを見た時には普通は気付くものですね。他のファイルもいずれ変換しなきゃいけないので、コマンドで変更できる方法を調べておきたいとは思っています。


問題になるのはそんなもんかなぁ。問題がなくなったらRubyスクリプトをGitHubにでも上げようかなぁ。数分で書ける程度のものなんだけども、わりと教訓を含んだものにはなっているので。

タグ:Ruby
コメント(0) 
共通テーマ:パソコン・インターネット

コメント 0