ツールディレクトリと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
文字化け対応(続き)
%GIT_HOME%/bin/less.exe をUTF8対応版のものに置き換えたら、PowerShellコンソール上でも文字化けせずに正常に表示できるようになった。
PowerShellコンソール上でgit logの日本語が文字化けする件について調べてみた
gitリポジトリへのコミットログをUTF8とし、PowerShellコンソール上でコミットログを表示すると文字化けする。
PS C:\repo> git log ⇒文字化け
コマンドプロンプト上でコミットログを表示しても同じく文字化けする。
C:\repo> git log ⇒文字化け
UTF8をSJISに変換してやればよいはずなので、nkfを使用してみたところ、コマンドプロンプトでは正しく表示できたが、PowerShellコンソールでは文字化けしてしまった。
nkfで入力文字コードを調べたところ、以下のような結果だった。
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()