ねこ元帥の中の人@リウマチ

日々の覚書など。ブログ名はオンラインゲームのアカウント名をいつも「ねこ元帥」にしているから。そして、2013年11月リウマチと診断されたとです。(2012年11月から時々手足に原因不明の痛みが発生、2013年9月以降は足の痛みが常態化、2013年12月30日からMTX服用開始、4月過ぎるころにはわずかの痛みが残る程度まで回復して現在に至る。)

ツールディレクトリとsbtリポジトリの配置変更

ツールディレクトリ配置変更

アーカイブ解凍するだけで使用できるツールはホームディレクトリの下に配置していたが、パブリックディレクトリの下に移動することにした。

変更前
$Home
├─tool/
│  └─≪基本的なツール≫
└─apps/
    └─≪追加のツール≫
変更後
$Env:PUBLIC
├─tool/
│  ├─7-Zip/
│  ├─Log Parser 2.2/
│  ├─LogExpert_1_4_4566/
│  ├─rktools/
│  ├─SUPPORT/
│  ├─SysinternalsSuite/
│  ├─teraterm-4.78/
│  ├─vim/
│  ├─WinMerge/
│  ├─WinSCP/
│  ├─baretail.exe
│  ├─fossil.exe
│  ├─pcinfo.bgi
│  ├─pcinfo.cmd
│  └─sqlite3.exe
└─apps/
    ├─apache-ant-1.9.2/
    ├─apache-ivy-2.3.0/
    ├─apache-maven-3.1.0/
    ├─astah_community/
    ├─clojure-1.5.1/
    ├─pleiades/
    ├─gradle-1.7/
    ├─mongodb-win32-x86_64-2008plus-2.4.5/
    ├─PortableGit-1.8.3-preview20130601/
    ├─python-2.7.5.amd64/
    ├─ruby-2.0.0-p247-x64-mingw32/
    ├─svn-win32-1.8.0/
    └─veracity_2.5.0.11065_x64/

sbtのbootディレクトリとivy2リポジトリ位置変更

sbt起動スクリプトを以下の通りに変更し、bootディレクトリとivy2リポジトリの位置を変更した。

gvim $PROFILE.CurrentUserAllHosts

Function sbt {
    $sbtLaunch = Get-LatestPath "$APPSDIR\sbt\sbt-launch*.jar"
    If ($sbtLaunch -ne $null) {
$argList = @" 
$Env:JAVA_OPTS -Xms512M -Xmx1024M -Xss1M
-XX:MaxPermSize=200M -XX:ReservedCodeCacheSize=60M
-XX:+CMSClassUnloadingEnabled -XX:-UseGCOverheadLimit
-Dsbt.boot.directory="$APPSDIR\sbt\boot"
-Dsbt.ivy.home="$APPSDIR\sbt\repository"
-jar $sbtLaunch
"@ -split "`r*`n" + $args

        start java $argList -NoNewWindow -Wait
    }
}
変更前
$Home
├─.ivy2
├─.sbt
│  └─boot
└─apps/
    └─bin/
        ├─sbt.bat
        └─sbt-launch-0.13.1-SNAPSHOT.jar
変更後
$Env:PUBLIC
└─apps/           ⇒ $APPSDIR = $Env:PUBLIC\apps
    └─sbt/
        ├─boot            ← $Home/.sbt/boot から移動
        ├─repository      ← $Home/.ivy2 から移動
        └─sbt-launch-0.13.1-SNAPSHOT.jar

エポック秒の計算

このブログで技術的なメモを書くとき、記入する日時を気にすることはないけど、ある日の出来事について記録を残しておく内容の場合だと、昨日の出来事みたいな書き方をすると後でわからなくなるので、日時指定して記入しておきたい。
日付は詳細編集画面で指定できるが、時刻の指定はタイトルの先頭部分の数字を変更する必要がありちょっと面倒。ここの数字はエポック秒を使用しているようなので、日時指定してエポック秒を算出するPowerShellスクリプトを調べてみた。


コミットログのエンコーティング指定

追記(2016/11/05)

プロセス間を流れる文字列のエンコーディングは以下のようになっている。

PS> git log {(1)UTF8で出力⇒(2)SHIFT_JISで入力} | {(3)ASCIIで出力} tee.exe git-log.txt

(1) gitが出力する文字列のエンコーディングi18n.logoutputencodingパラメータで指定可能。
(2) PowerShellがコンソールアプリケーションの出力を入力する際に使用するエンコーディング。[Console]::OutputEncodingで指定する。
(3) PowerShellの出力を他のアプリケーションに対して渡す際に使用するエンコーディング。$OutputEncodingで指定する。


以下のように使用すると、テキストファイルにutf-8の文字列が格納される。

PS> [Console]::OutputEncoding = [Text.Encoding]::UTF8
PS> $OutputEncoding = [Text.Encoding]::UTF8
PS> git log | tee.exe git-log.txt
PS> [Console]::OutputEncoding = [Text.Encoding]::Default
PS> $OutputEncoding = [Text.Encoding]::ASCII

PowerShellの$OutputEncodingについての説明を読むと、PowerShellがテキストを他のアプリケーションに渡すときに使用するエンコーディングとなっている。
以下のコマンドの結果からすると、PowerShellがgit logの結果のテキストを受け取るときにどのようになっているかは分からないが、nkf32にはUTF8で渡していることが分かる。

PS C:\repo> git log | nkf32 -g
ASCII

PS C:\repo> $OutputEncoding = [Text.Encoding]::UTF8
PS C:\repo> git log | nkf32 -g
UTF-8

処理結果はというと、やはり文字化けする。nkfの処理結果をPowerShellが表示のエンコーディングであるシフトJISに変換して化けてるのか???

コンソール表示のエンコーディングは以下の通り。

PS C:\repo> [Console]::OutputEncoding

BodyName          : iso-2022-jp
EncodingName      : 日本語 (シフト JIS)
HeaderName        : iso-2022-jp
WebName           : shift_jis
WindowsCodePage   : 932
IsBrowserDisplay  : True
IsBrowserSave     : True
IsMailNewsDisplay : True
IsMailNewsSave    : True
IsSingleByte      : False
EncoderFallback   : System.Text.InternalEncoderBestFitFallback
DecoderFallback   : System.Text.InternalDecoderBestFitFallback
IsReadOnly        : True
CodePage          : 932

コードページ変更。操作しているとPowerShellコンソールが異常終了する。

chcp 65001

コンソール表示のエンコーディングをUTF8に変更。数文字入力したらブルースクリーンで死亡。

[Console]::OutputEncoding = [Text.Encoding]::UTF8

いろいろ試してみての推測になるが、git logの出力はpager設定していなくてもデフォルトでlessを通しているようである。
lessを日本語対応のものに変更し、gitのログ出力エンコーディング設定をcp932に変更すると、UTF8のコミットログも文字化けせずに表示されるようになる。

git config --global i18n.logoutputencoding cp932

さらにいくつか組み合わせを変更して、最終的には以下の通り、gitのログ出力エンコーディングutf-8にして、ページャ指定でnkf32に変換させるのが最も文字化けが少ない設定だった。
gitのログ出力エンコーディングはgitkやgit guiも使用するようなので、utf-8にしておいたほうがよい。

git config --global core.pager 'nkf32 | less'
git config --global i18n.logoutputencoding utf-8

PowerShellコンソール上でgit logの日本語が文字化けする件について調べてみた

gitリポジトリへのコミットログをUTF8とし、PowerShellコンソール上でコミットログを表示すると文字化けする。

PS C:\repo> git log
⇒文字化け

コマンドプロンプト上でコミットログを表示しても同じく文字化けする。

C:\repo> git log
⇒文字化け

UTF8をSJISに変換してやればよいはずなので、nkfを使用してみたところ、コマンドプロンプトでは正しく表示できたが、PowerShellコンソールでは文字化けしてしまった。
nkfで入力文字コードを調べたところ、以下のような結果だった。

PowerShell

PS C:\repo> git log | nkf32 -g
ASCII

コマンドプロンプト

C:\repo>git log | nkf32 -g
UTF-8

以下のコマンドを記入したbatファイルを作成してPowerShell上で実行したら、日本語が正しく表示された。

git log | nkf32

PowerShellのパイプラインあたりに何かがありそう。

端末作業環境設定

git-bashの設定

vi ~/.profile
. ~/.bashrc

vi ~/.bashrc
alias ls='ls --color=auto --show-control-chars'
alias la='ls -a'
alias ll='ls -l'
alias l='ls -CF'
alias vi='vim'

export LANG=ja_JP.utf-8

gitの設定

git config --global user.name "TAKAMATSU,Makoto"
git config --global user.email メールアドレス

git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto

git config --global core.autocrlf false
git config --global core.pager 'nkf32 | less'

git config --global gui.encoding = utf-8

git config --global i18n.commitencoding utf-8
git config --global i18n.logoutputencoding utf-8

PowerShellの設定
PowerShellコンソールからgit-bashを起動すると、カラー設定がコンソールの背景色と相性悪くて見づらい。以下の設定でPowerShellコンソールの背景色を黒に変更できる。

vi $PROFILE.CurrentProfile

$Host.UI.RawUI.BackgroundColor="Black"

上のコマンドでの設定変更では文字表示部分だけにしか反映されない。cls実行するとコンソール全体に色設定変更が反映されるけど、起動スクリプトにclsはなんとなく書きたくないし。表示クリアせずに色設定変更を反映させる方法はないものか。

ちなみに色設定に使用できる文字列は以下のコマンドで一覧表示できる。

[System.ConsoleColor].GetEnumValues()