カテゴリー別アーカイブ: ツール

参加しました「第二回 JetBrainsユーザーグループ in 大阪 #jbugj」


1/30(水) 第二回 JetBrainsユーザーグループ in 大阪 #jbugj に参加しました。

vimとかemacsをメインに使っている会社ではなかなか IDEのネタを共有することがないので、IntelliJ IDEAのかゆいところにも手が届く感じとかとても勉強になったし、楽しかった。


講演者の方のスライドまとめてみました

  • JetBrains製品のライセンス形態 や Community、Ultimate の違いなどとても分かりやすいです。13ページ目にUltimate Editionにしか存在しない機能の説明があります。使えない機能が結構あるのでUltimate Editionを買うべきなんだろうなー!


気になったことのメモ

  • IDEAの読み方は「イデア」じゃなくて「アイデア」

  • Commercial License $499
    業務用

  • Personal License $199
    個人用 (個人で購入してねという事, 業務で使用してもいい)

  • ひとりIntelliJ IDEA Advent Calendar 2012 インデックス

  • ピンチアウト、ピンチインでコードのビューを拡大縮小出来る!

  • Option + Enter => 出来る操作の候補を出す(テスト)

  • Productivity Guide を使おう
    help -> Productivity Guid
    IDEA内でよく使っている機能を抽出してヘルプを一覧できる。
    各ユーザによって表示される機能が違う。
    @mumoshuさんはコードナビゲーション(Goto系)の機能をよく使う

    • Cmd + n => クラス、ファイルを開く
    • Option + Shift + Cmd + n => メソッド名変数名など検索してジャンプ
    • Cmd + b => メソッド、変数の定義元へジャンプする
    • Cmd + Option + F7 => このメソッドを使用している箇所を特定する
    • Cmd + Shift + a => Goto Action (何かしらの機能(Action)を検索する)
    • Cmd + e => 最近使ったファイルを開く
       
  • Docコードのサポートが手厚い

  • Gitの操作

    • ステータスやDiffが見やすい (Cmd + d)

気になるツイートまとめてみました


* やっぱりそういうことかー

MacでJava7環境の日本語扱いの問題について(eclipse, IntelliJ IDEA)


Macに標準でインストールされているJavaはAppleから提供されているJDK1.6系のものです。JDK1.7系はすでにリリースされているのでその最新のJDK1.7(java7)を利用するようにしたいと思いますよねー!!
Oracleのサイトから最新のJavaをインストールするには、以下を確認すればインストールできると思います。
http://www.java.com/ja/download/faq/java_mac.xml

■インストール後にバージョンを確認してみる

% java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

これで、java7系が無事インストールできていると思います。

そこでテストコードを書く時などをわかりやすくするために、 日本語でテストメソッド を書くことも多いと思います。そんな時に日本語がうまく認識できずに「ClassNotFoundException」となってしまいます。どうにか解決するようにちょっと試行錯誤してみました。

EclipseやIntellij IDEAなどのIDEからテストを実行する時に発生する問題で、コマンドラインからテストを実行すればとくに問題はおきません。

自分の場合はMavenを利用してHogeTestというテストを実行するために「mvn test -Dtest=HogeTest」のコマンドを実行しても問題無く実行することが出来ました。


Eclipseでの日本語問題の解決方法

以下の様なテストクラスがあったとします。

public class HogeTest {

    @Test
    public void テストメソッド() {
        assertTrue(true);
    }

}

単純に実行した時点では「ClassNotFoundException」になってしまいます。
次の記事を参考にEclipseで実行時に使用するVMの引数に「-Dsun.jnu.encoding=UTF-8」というオプションを指定してあげれば日本語メソッドも解決出来ます。
JUnit のテストメソッド名に日本語を使ったときの問題の解決法 (Java 7)

しかし、以下のようにEnclosedを用いてネストしたテストクラス名を日本語とした場合

同じく「ClassNotFoundException」になってしまいます。

@RunWith(Enclosed.class)
public class HogeTest { 
    public static class ネストしたテストクラス {
        @Test
        public void ネストテストメソッド() {
            assertTrue(true);
        }
    }
}

これはちょっと、謎なんですが、以下のコマンドでeclipseを起動してあげると解決します。今のところこの方法で起動するようにすればとりあえず日本語のクラス名やメソッド名でも問題無く実行できるようになります。

% open /Application/eclipse/Eclipse.app

なんとなく、腑に落ちないのですがとり上記コマンドをエイリアス貼って起動するようにしています。


Intellij IDEAでの日本語問題の解決方法

基本的にはEclipseと同様に日本語のクラス名やメソッドがある場合「ClassNotFoundException」となってしまいます。
以下の2つの手順を実行すれば解決します!

  1. IntelliJ IDEA の日本語テストメソッド名の実行で再度ハマった話
    Run => Edit Configrations => Defaults => JUnit の VM options に “-Dsun.jnu.encoding=UTF-8” を追加する。

  2. IntelliJ IDEA + Spock で日本語テストメソッド実行時にハマった話
    「/Applications/IntelliJ\ IDEA\ 12\ CE.app/Contents/Info.plist」ファイル(Info.plist)を開いて、VMOptions の string の最後に「-Dgroovy.source.encoding=UTF-8 -Dfile.encoding=UTF-8」を追加する。 IntelliJ IDEAまでのPathは環境に合わせて適宜変更してください。

「1」 についてはEclipseのVM引数と同じですねー。
「2」 については記事内にもあるのですが、テストクラスでテストメソッドを指定して実行しようとした時の対処です。この設定を入れなくてもテストクラス全体を一気に実行する場合は問題無く実行できます。

これでそれぞれのIDE上でとりあえず日本語の問題は解決できると思います!

[git]タグの打ち方・消し方


githubを使ってソースを管理している時にあるタイミングでタグを打ちたいと思うことってありますよねー。僕はあリます。
ということで、中々タグを打つ機会ってないので、調べてみました!!

タグの打ち方

以下のようにtestという名前でタグを作ります

% git tag -a test -m "create test tag"

タグの確認

以下のようにすると現在のタグを確認することができます。

% git tag
test

作ったタグをリモートgitサーバへ転送する(githubなど)

リモートサーバ側にもtagを作成することができます。

% git push --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 162 bytes, done.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/yusabana/pratter.git
 * [new tag]         test -> test

タグのチェックアウト

作成したタグをチェックアウトしたりする。

単純にチェックアウトしてタグの中身を見る
この場合、ブランチは no branch 状態になる

% git checkout tags/test


tag から branch を生成してチェックアウトする
testタグからtest-branchというブランチを生成する

% git checkout -b test-branch tags/test

タグを削除する

ローカルからtagを削除するには以下のようにする

% git tag -d test

ローカルでtagを削除した状態でpushするとリモートにあるタグも削除することが出来る

% git push origin :test
To https://github.com/yusabana/pratter.git
 - [deleted]         test

タグを確認する

リモートにあるタグを一覧する

git ls-remote --tags

gistを便利に使うためのコマンドラインツール「gist」


githubのgistって便利ですよねー。ソースコード単位で変更管理が出来る。
サンプルなどを載せるのには最適ですね。
ただ、毎回ブラウザでアクセスして、テキストエリアに貼り付けてって面倒臭いですねー。それを解消するためのツールが「gist」

    【インストール方法】
    自分はMacでbrewを使っているので
    % brew install gist

以下のようにやるとちゃちゃっとgistにアップできます。gistのmanページに記載されていますー!!

    % gist < file.txt
    % echo secret | gist --private
    % echo "puts :hi" | gist -t rb
    % gist script.py
    % gist -
    この場合、ユーザの設定もしていないのであれば Anonymous としてアップされる

githubのアカウントの設定方法とアカウント情報をgitconfigに直で書くのではなく、includeを使って別ファイルを用いた処理について書きます!!
ちょっとハマった部分もありメモ代わりに


gistコマンドにgithubのアカウント設定

事前にgithubのアカウントは所持していることが前提となります。githubのアカウントを設定することで設定したアカウントでgistに投稿することができます。
単純に $HOME/.gitconfig に以下の内容を入れればOK

    % vi ~/.gitconfig
    [github]
    user     = USERNAME
    password = PASSWORD

ただ私の場合、設定ファイルはdotfilesとしてgithubで管理しています。gitconfigもgithub上に上げているので生パスワードを.gitconfigに書くのには抵抗が。。。

そこで、 Include ですよねーー。ユーザ名とパスワードは別ファイルにしてincludeさせる。別ファイルはgitignoreに設定してリポジトリへの更新対象外にする。ということです。
設定方法はこれまた単純に、.gitconfigに[Include]ディレクティブを追加するだけです。

    【gitconfigでインクルードする設定】
    % vi ~/.gitconfig
    [include]
    path = ~/dotfiles/.gitconfig.local

更に.gitconifg.localに [github]ディレクティブを設定します。

    【インクルードするファイルの設定】
    % vi ~/.gitconfig.local
    [github]
    user     = USERNAME
    password = PASSWORD

gistにアップして試してみる

いざ、やってみましょう。ちゃんとアカウントに紐付いてアップできるかなー

    % echo "Hello World" | gist -o

あれーー??Anonymousになってる。。。???

Includeの設定が効いてないのか??
ということで調べてみよう。。。


gistコマンドのコードを見てみる

gistはRubyのスクリプトで書かれているので何となく分かるだろうということで調査してみる!!!
brewでインストールしたので、「/usr/local/bin/gist」というファイルが実行ファイルになる。

    % vi /usr/local/bin/gist
    …略
    def config(key)
      env_key = ENV[key.upcase.gsub(/\./, '_')]
      return env_key if env_key and not env_key.strip.empty?
      str_to_bool `git config --global #{key}`.strip
    end
    …略

なるほどなー「git config –global」で情報を取得しているんだなーというところで確認してみる。

    % git config --global -l
    include.path=~/dotfiles/.gitconfig.local
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略
    % git config -l
    include.path=~/dotfiles/.gitconfig.local
    github.user=********
    github.password=*******
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略

上記2つの出力を見比べてみると「–global」の場合、「github.user」, 「github.password」の2つの設定includeのファイルの中身が展開されていない?!!!!これが原因じゃないか??
更に調べてみると、「–includes」 というオプションがあるではないか

    % git config --global --includes -l
    include.path=~/dotfiles/.gitconfig.local
    github.user=********
    github.password=*******
    user.name=yusabana
    user.email=EMAIL
    color.ui=auto
    alias.st=status
    …略

ちゃんとgithub.user, github.passwordが展開されていますねー
ということで、gistの実行ファイルを書き換えてみました。

    % vi /usr/local/bin/gist
    …略
    def config(key)
      env_key = ENV[key.upcase.gsub(/\./, '_')]
      return env_key if env_key and not env_key.strip.empty?
      str_to_bool `git config --global --includes #{key}`.strip
    end
    …略

これで修正は完了!!


もう一度gistを使って試してみる

今度こそ、、ちゃんとアカウントに紐付いてアップできるかなー

    % echo "Hello World" | gist -o

良し!!!いけました!!!

何とかコード修正も普通にgitコマンドを使っているところだったから問題なくいけましたねー!!
ちょっとgistコマンドのgithubのpull request 見ると同様の事を上げている方がいたので、自分もコメント入れておきました。

https://github.com/defunkt/gist/pull/113

ただ、これ見ると5ヶ月以上も更新してくれていないので、更新されるのを待つのもあれなので、スクリプトを修正しておこう。
また、これらを調べているうちに、「gisty」ってコマンドもあることを知った。これのほうが変更管理も出来るようで便利そう。gistコマンドは初回アップロードのみしか出来ないので。。。

今度はgistyを使ってみます!:)

git-diff で知っておくと役立つオプション


 

そんなこんなで、gitを使うようになって約3ヶ月ほど、ソースをマージしたり、管理することが多くなったので、diffについて良い感じのオプションを出してみますー

% git diff [option] [対象]

-b (インデントの空白を無視する(インデントの違いはdiffの差分に出さない))
-w (whitespaceを完全に無視)
-B (空の改行を無視)
–cached (addしたものステージングしたファイルと現在の差分を見る)
–word-diff (diffをwordごとに出来る)