ページ

2014/05/22

Android Studio のエディタのタブを切り替えるショートカットキー

Android Studio カスタマイズシリーズ第二弾。
Android Studio のエディタのタブを次のタブ、前のタブに切り替える
ショートカットキーを Sublime Text 2 と一致させたいと思います。

[Preference > Keymap] を開いて Tab で検索。

Select Next Tab: command + shift + ]
Select Previous Tab: command + shift + [

上記のように設定されているが、実際の動きはそうなっていません。

なぜなのか

Keymap shows characters for keys only for english keyboard layout correctly : IDEA-63779
Android Studio のベースである IntelliJ IDEA のバグで Keymap が
US キーボードの配置に依存しているようで
JP キーボードでは記号系の紐付きがおかしくなっているからのようです。
エディタでの入力はタイプしたものが見たままそのまま表示されますが、
Keymap のショートカットキー登録の部分だけが入力したものと異なるキーが表示されます。

[ を入力したら ] と、] を入力したら \ と表示されます。

どうすればいいのか

見た目上は異なるキーですが、結局入力したキーで反応するので

Select Next Tab: command + shift + ]
Select Previous Tab: command + shift + [

上記のように入力して以下のように表示されていれば良いです。

Select Next Tab: command + shift + [
Select Previous Tab: command + shift + \

このバグは混乱するので直して欲しいです。かなり放置されているので期待は薄そうですが…。

2014/05/21

Android Studioでカーソルをワード区切り単位で移動する

Android Studio が使いにくいです。
カーソル移動もままなりません。
これが IDE の移行コストか…と思いながら Keymap を眺める日々です。

さて、愚痴はこのへんにして Android Studio を調教していきましょう。

Android Studio のデフォルトの挙動では alt + , alt +
ワード単位で移動してしまいます。

これ↑をこう↓したいわけです。


どうすればいいのか?

[Preference > Keymap] で 検索バーに [ Move Caret Word Different ] を入力すると
以下の項目が見つかるかと思います。(検索バーの右のボタンを押せばショートカットキーからも検索できます)
Move Caret to Next Word in Different "Camel|Humps" Mode
Move Caret to Previous Word in Different "Camel|Humps" Mode
この項目で右クリックして [ Add Keyboard Shortcut ] を選択後、
割り当てたいショートカットキーを入力します。
ショートカットキーが衝突した場合は既存のショートカット設定を削除して上書きすることができます。

こうして僕は alt + , alt + を設定して幸せになれました。

上記の動きで文字列を選択したい

以下の項目に alt + shift + , alt + shift + を割り当てました。

Move Caret to Next Word with Selection in Different "Camel|Humps" Mode
Move Caret to Previous Word with Selection in Different "Camel|Humps" Mode

2014/05/20

Android Studioのカラーテーマを変更/追加する

Android Studio といえばクールなダークテーマですよね?
ただでさえ新しいビルドシステム Gradle が導入され、
Android Studio で開発 イコール カッコイイ なのに
ダークテーマだなんてかっこ良すぎると思います。

羨ましいので Android Studio を導入してみたところ
別に普通のライトグレーな普通にテーマでした。
あれ?と思いつつ、調べたところ
Android Studio のイメージのクールなダークテーマは
[Preference > Appearance] の Theme で Darcula を設定すれば適用されます。

Appearance を Darcula すると自動的に エディタのカラーテーマも Darcula になるようです。
オレンジ系のカラーテーマはそんなに好きじゃなかったので
Themes for InteliJ IDEA, PhpStorm, PyCharm, RubyMine, WebStorm and AppCode. から
Monokai Sublime Text 3 というカラーテーマをダウンロードしてきました。
Android Studio の [File > Import Settings...] から読み込めばカラーテーマを追加できます。
エディタのカラーテーマは [Preference > Editor > Colors & Fonts] から変更できます。

なんでこれくらいのこと Eclipse でもやってなかったんだろうと思ったら
Eclipse はエディタ部分は変更できても Appearance が変更できないからやめたようです。
like Darcula - Kazzzの日記
Eclipse より Android Studio の方がイケてますね。完全に移行できるよう頑張ります。


参考

第3回 はじめましてのAndroidアプリケーション:Android Studio最速入門~効率的にコーディングするための使い方|gihyo.jp … 技術評論社
How to change or add theme to Android Studio? - Stack Overflow
Color Themes & Fonts

2014/05/17

MacでAndroid Studioが起動できない

JDK6 が入っていない

Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をする | DevAchieve
Brewfile に以下のように記述しているから問題ないはず…!
cask install --appdir=/Applications java


と思ったら Android Studio をダブルクリックをしても反応がない…屍のようだ…

Android Studio.app/Contents/MacOS/studio を直接実行してみると
以下の様なエラーメッセージが出ていました。
JavaVM FATAL: Failed to load the jvm library.

どうやら Mac 版 Android Studio は JDK6 が必要なようです。
参考: Google Play Services SDK のセットアップ(Android Studio) - Qiita

以下のように記述して brew bundle ~/Brewfile を実行したら起動できました。
tap caskroom/versions

# JDK6/JDK7 for Android Studio
cask install --appdir=/Applications java7
cask install --appdir=/Applications java6

2014/05/16

[Git]GitのpullをFast-Forward onlyにする

Git の pull / merge が --no-ff だと
自分の Mac と会社の Mac で wada811/dotfiles を更新/同期していると
以下の画像のようにマージコミットが増えていってコミットグラフも分岐してしまいます。
ただ異なる環境で編集しているだけなのに
このように本質的でないコミットが増えていくのは本意ではありません。

git pull --ff-only で実行すれば良い

上の例では確かにそうです。

しかし、 Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をする | DevAchieve で書いた
HomeBrew / HomeBrew-cask の更新では
brew upgrade で内部的に git pull が実行されるので、
オプションを付けることができません。

個人的な設定により Non Fast-forward なので マージコミットを作成しようとして
コミットメッセージ入力待ちで処理が止まってしまいます。
HomeBrew / HomeBrew-cask の更新処理はそこそこ時間がかかるので
見張っていなければならないという状況は地味にストレスです。
HomeBrew / HomeBrew-cask をこちらで編集する気がないので --ff で merge したいので
デフォルトの pull の挙動を Fast-Forward only にしてしまいます。

Git の pull を Fast-Forward only にする

git config --global pull.ff only
In what cases could `git pull` be harmful? - Stack Overflow
ただし、 Git 2.0 以上から。
ちなみに Git は現在 1.9.3 が最新です。
Git 2.0 は 5月中旬以降にリリース予定らしいです。

つまり、現状では不可能でした。
Git の alias は既存のコマンドを上書きできませんし、
Git の処理自体を書き換えるつもりもないので
おとなしく Git 2.0 がリリースされるのを待ちます。

Git の merge を Fast-Forward にしてしまえば解決しますが、
ブランチのマージの際にブランチが存在したという履歴がなくなってしまうので
こちらのデメリットのほうが大きなってしまうので Fast-Forward にはしません。
参考: 「こわくない Git」というスライドを発表しました - kotas.tech

おまけ

普段 git pull していたけど
カレントブランチとは異なるリモートブランチを pull して事故ることもあったりしたので
git fetch を使うようにしようかな。
参考: Git pullを使うべきでない3つの理由 - DQNEO起業日記

2014/05/13

[Git][GitHub]GitHubにPushする際に認証失敗する

GitHub で2段階認証の設定をしてから push 時に認証が失敗するようになりました。
いつもどおり以下のコマンドを実行すると ID/PW を聞かれます。
git push origin master
Username for 'https://github.com':
Password for 'https://github.com':
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/wada811/AndroidLibrary-wada811.git/'
[Git][GitHub]やっておくと地味に便利なこと2つ | DevAchieve で .netrc に ID/PW を書いているので
聞かれるのはおかしいなぁと思いながら ID/PW を入力しますが上記のようにエラーになってしまいます。

調べてみると Git over HTTPS では Personal access token をパスワードの代わりに使えって言っています。
Two-factor Authentication
How does it work for command-line Git?

If you are using SSH for Git authentication, rest easy: you don't need to do
anything. If you are using HTTPS Git, instead of entering your password, enter
a personal access token. These can be created by going to your
application settings page.

実際に push 時にパスワードではなくアクセストークンを入力してみると問題なく push することができます。

アクセストークンの入力はめんどくさい

ssh プロトコルで push するように変更する

% git remote set-url origin git@github.com:wada811/AndroidLibrary-wada811.git
% git remote -v 
origin  git@github.com:wada811/AndroidLibrary-wada811.git (fetch)
origin  git@github.com:wada811/AndroidLibrary-wada811.git (push)
参考: Githubの2段階認証を有効にしてgitからの認証が弾かれる時の話 - 頼りないニモニック

.netrc に ID と Personal access token を書いておく

machine github.com
login wada811
password xxxpersonalaccesstokenxxx
コレが一番楽な解決方法ですね。
コレにて一件落着。

2014/05/12

Brewfile + Homebrew + Homebrew-caskで Mac の環境構築をする

パッケージ管理システム「Homebrew」とその拡張版「Homebrew Cask」を使って
手に入れた iMac に環境を移行/構築してみました。
また、Homebrew で管理されているパッケージや、
Homebrew-cask で管理されているアプリケーションを
コマンド一発でインストールできる Brewfile も使ってみました。
この Brewfile + Homebrew + Homebrew-cask という構成で
環境構築/環境統一の手間が大幅に省くことができます。

追記(2014/12/05):更新しました

Homebrew + Homebrew-caskで Mac の開発環境を構築する | DevAchieve

Homebrew を導入する

Command Line Tools for Xcode をインストールする

Xcode をインストールする
まずは AppStore から Xcode をインストールして下さい。
Command Line Tools for Xcode をインストールする
[ Xcode > Open Developer Tool > More Developer Tools... ] をクリックすると
Downloads for Apple Developer ページが開くので
Command Line Tools for Xcode をダウンロードしてインストールします。
参考: MavericksでCommand Line Tools for Xcodeをインストールする - Qiita

Homebrew をインストールする

Terminal で以下のコマンドを実行します。
ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"
参考: Homebrew — The missing package manager for OS X
Homebrew が正常にインストールできたか確認する
以下のコマンドを実行してエラーがあれば対処、再度実行します。
brew doctor

Homebrew-cask を導入する

Homebrew-cask をフォーミュラに追加する

Formula(フォーミュラ)は Homebrew で管理されているパッケージのことです。
Homebrew-cask は Homebrew では管理されていないので自分で追加する必要があります。
以下のコマンドで Homebrew-cask を Formula に追加することができます。
brew tap caskroom/cask
参考: これは便利!Homebrewに追加されたtapコマンドはリポジトリを追加して簡単にフォーミュラを増やせる | Macとかの雑記帳

Homebrew-cask をインストールする

Homebrew-cask を追加したら Homebrew の以下のコマンドでインストールします。
brew install brew-cask

おまけ: Homebrew-cask の使い方

アプリケーションを検索する
brew cask search chrome
google-chrome
アプリケーションをインストールする
brew cask install google-chrome
アプリケーションの実体は /opt/homebrew-cask/Caskroom に入り、
~/Applications にシンボリックリンクが作成されます。
それぞれのパスは以下のコマンドオプションで変更することができます。
--caskroom=/my/path, --appdir=/my/path
参考: homebrew-caskが良さそうなので導入してみた - About Digital
アプリケーションをアンインストールする
brew cask uninstall google-chrome
アプリケーションを更新する
brew cask update
古いアプリケーションを削除する
brew cask cleanup
その他の使い方
homebrew-cask/USAGE.md at master · caskroom/homebrew-cask

Brewfile で Homebrew パッケージを管理する

Brewfile を作成する

以下のようなファイルを作成します。
Install Packages と Install Applications の欄は自由にインストールしたいものを記述して下さい。
# Update Homebrew
update

# Upgrade Formulas
upgrade

# Install HomebrewCask
tap caskroom/cask
install brew-cask

####################
# Install Packages #
####################

install zsh

########################
# Install Applications #
########################

cask install google-chrome

# Remove outdated versions
cleanup
cask cleanup
参考までに僕の Brewfile にリンクをはっておきます。
dotfiles/Brewfile at master · wada811/dotfiles

Brewfile でインストールする

Brewfile のある場所で以下のコマンドを実行します。
brew bundle

参考:
BrewfileでHomebrewパッケージを管理する | SOTA
「BrewfileでHomebrewパッケージを管理する」をやってみた - sonots:blog

Brewfile を dotfiles と一緒に GitHub で管理する

環境移行/環境統一するためには他の Mac からアクセスできる場所に Brewfile を置いておかなければなりません。
ということで設定ファイルの dotfiles と一緒に GitHub で管理してしまいましょう。
手順は dotfilesをGitHubで管理する方法 | DevAchieve に書いています。

最後に

全部コマンドで環境構築しちゃう感じ、イケてるエンジニアっぽくて良いと思います。

2014/05/11

dotfilesをGitHubで管理する方法

ドットファイルと呼ばれるファイル名の先頭にドットがある設定ファイル(※)を
GitHub で管理する方法について調べたので書いておきます。(※ .zshrc とか)
Mac の移行時に環境構築で dotfiles リポジトリを clone するだけで
zsh とか git とかの設定が新しい環境でもすぐに反映されるので楽チンみたいです。
イケてるエンジニアがやってるって噂なので僕もやりたいと思います。

1. dotfiles フォルダを作成する

cd ~
mkdir dotfiles

2. dotfiles フォルダにドットファイルを移す

mv .gitconfig dotfiles
mv .gitignore dotfiles
mv .vim dotfiles
mv .vimrc dotfiles
mv .zsh dotfiles
mv .zshrc dotfiles

3. ドットファイルのシンボリックリンクを作成するシェルスクリプトを作成する

cd dotfiles
vi dotfilesInstaller.sh
#! /bin/bash
ln -s ~/dotfiles/.gitconfig ~/.gitconfig
ln -s ~/dotfiles/.gitignore ~/.gitignore
ln -s ~/dotfiles/.vim/ ~/.vim
ln -s ~/dotfiles/.vimrc ~/.vimrc
ln -s ~/dotfiles/.zsh/ ~/.zsh
ln -s ~/dotfiles/.zshrc ~/.zshrc
chmod +x dotfilesInstaller.sh
./dotfilesInstaller.sh

4. dotfiles を GitHub で管理する

git init
hub create
git add .
git commit -m "Initial commit"
git push -u origin master

GitHub で管理された dotfiles リポジトリの完成

wada811/dotfiles
これでイケてるエンジニアの仲間入りですかね!

新しい Mac で dotfiles をインストールする

cd ~
git clone git@github.com:wada811/dotfiles.git
clone したら dotfiles フォルダの dotfilesInstaller.sh を以下のように実行したら移行完了です。
chmod +x dotfilesInstaller.sh
./dotfilesInstaller.sh

参考
dotfilesをGitHubで管理,vimプラグインをNeoBundleで管理する方法メモ - Programming Log

dotfiles を追加する際には dotfilesInstaller.sh に追記しなければなりませんが、
以下のように記述すれば追記の必要もないようです。
なんとなく意味はわかりますが、完全に理解しているわけではないので採用していません。そのうち調べます。
#!/bin/sh
cd $(dirname $0)
for dotfile in .?*
do
    if [ $dotfile != '..' ] && [ $dotfile != '.git' ]
    then
        ln -Fis "$PWD/$dotfile" $HOME
    fi
done
DotfilesをGitHubで管理する | fixture.jp

2014/05/10

シェル変数を一覧表示、設定、削除する

環境移行中なのですが、以下の記事でインストールした Terminal-notifier.app を
新環境で HomeBrew でインストールしなおしたら
移行データのシェル変数が引き継がれてしまいました。
[Mac][zsh]時間のかかるコマンドが終わったら自動で通知する | DevAchieve

SYS_NOTIFIER が旧環境のパスのままだったのでコードから削除しましたが、
設定がそのままになってしまっているようでした。
確認のためにシェル変数を以下のコードで一覧表示してみました。
set
...
SYS_NOTIFIER="/Applications/terminal-notifier.app/Contents/MacOS/terminal-notifier"
...
上記のように設定されていたので削除したい場合は以下のように記述すれば良いです。
unset SYS_NOTIFIER

設定する場合はシェルで以下を実行すれば良いです。イコールの前後は空白あけてはいけません。
SYS_NOTIFIER="/usr/local/bin/terminal-notifier"

参考
シェル変数の一覧を表示するには
シェル変数を定義したり、削除するには

2014/05/09

ディレクトリのシンボリックリンクの作成

ディレクトリのシンボリックリンクの作成で毎回ハマるので備忘録として書いておきます。

うまくいくやつ

ln -s ~/dotfiles/.zsh/ ~/.zsh
ディレクトリが存在していた場合は
ln: ~/.zsh File exists という notice が出ます。

以下のように記述すれば存在しない場合のみ実行することができます。notice を消したいときに?
if [ ! -d ~/.zsh ]; then ln -s ~/dotfiles/.zsh/ ~/.zsh > /dev/null 2>&1; fi

参考
ディレクトリのシンボリックリンクでハマったこと - OpenGroove
linux - Create a symbolic link of Directory in Ubuntu - Stack Overflow

ダメなやつ

ln -s ~/dotfiles/.zsh ~/.zsh/
ln: ~/.zsh/: No such file or directory と表示されてエラー。

ln -s ~/dotfiles/.zsh/ ~/.zsh/
ln: ~/.zsh/: No such file or directory と表示されてエラー。

ln -s ~/dotfiles/.zsh ~/.zsh
→ 作成できるが、再度実行すると~/.zsh/.zshが生成される。

2014/05/08

sudoでリダイレクトをしたい

環境移行中なのですが、ログインシェルを zsh に変更したくなりました。
GitHub の README.md にコマンドを書いておいて
移行時に実行するだけにしたかったので
MacにHomeBrewとzshを導入してみた | DevAchieveの工程を
以下のように変更してみました。
echo '/usr/local/bin/zsh' >> /etc/shells
以下のように見事に拒否されます。
zsh: permission denied: /etc/shells
以下のように sudo を付けても同様に拒否されます。
sudo echo '/usr/local/bin/zsh' >> /etc/shells

shのオプションに-cを付ける

sudoでリダイレクトをしたいとき - Yuta.Kikuchiの日記
回避策1 : shのオプションに-cを付ける

man sudoを見てみます。そうすると以下のように実行せよという記述がありました。-cとして実行したいコマンドを""でくくるみたいです。
To make a usage listing of the directories in the /home partition.
Note that this runs the commands in a sub-shell to make the cd and file
redirection work.

$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
というわけで以下のように記述すると成功しました。
sudo sh -c "echo '/usr/local/bin/zsh' >> /etc/shells"
chsh -s /usr/local/bin/zsh
活用事例:wada811/dotfiles#change-default-shell-to-zsh

2014/05/07

[書評]ノンデザイナーズ・デザインブック

ノンデザイナーズ・デザインブック [フルカラー新装増補版]
著者 : Robin Williams
毎日コミュニケーションズ
発売日 : 2008-11-19
ブクログでレビューを見る»
デザインの基本原則から色彩、タイポグラフィの基礎まで幅広く学べる良い本。
デザインの原理・原則の説明があり、それに従って悪いデザインを変えると
良いデザインになるとビジュアルで体感することができます。
書類やプレゼン資料を作る人や、Webサイトやアプリを製作する人は
読んでおくと今までとは違うデザインが出来ると思います。
プログラマが読むべきデザインの本として良く名前が挙がる本です。
プログラマでなくても読んでおくべき本だと思います。
個人的に興味のある領域だったので面白かったです。

ジョシュア・ツリーの悟り

一度名前を呼ぶことができれば、
あなたはそれを意識し、それを支配し、それを所有し、
それをコントロールできるようになる。

4つの基本原則

  • 近接:関連する項目をグループ化する
  • 整列:すべての項目を視覚的に関連付けて配置する
  • 反復:視覚的な特徴を繰り返し一体化する
  • コントラスト:視覚的に引きつけ情報を組織化する

カラー


色彩センスのいらない配色講座 from Mariko Yamaguchi
Color Scheme Designer 3

タイポグラフィー


はじめての欧文書体 from Shohei Itoh