IntelliJでファイル保存時にコードフォマット&import文の整理を自動実行する

f:id:tmknom:20141012113732p:plain

IntelliJのコードフォーマット

IntelliJを使っていると、リアルタイムに大体いい感じにフォーマットしてくれるけど、括弧類の前後に空白を入れるかどうかとか細かいところまでは面倒見てくれない。

かといって、手動でいちいちコードフォーマットするのも面倒だよね。

というわけで、ファイル保存時にコードフォーマットしてくれるように設定してみたのでそのメモを共有するよ。

設定方法

1.マクロの記録を開始する

Edit -> Macros -> Start Macro Recording

2.コードフォーマットの設定をする

Code -> Reformat Code

全てのチェックボックスにチェックを入れて、「Run」ボタンを押す

f:id:tmknom:20140911002503p:plain

  • Optimize imports
    • import文をいい感じに並べてくれる
  • Rearrange entries
    • メソッドの定義順序などをいい感じにしてくれる
  • Only VCS changed text
    • 未コミットの編集箇所のみフォーマット適応する
  • Do not show this dialog in the future
    • いちいちダイアログで確認されるとウザいので消しとく

3.全てのファイルを保存

File -> Save all

4.マクロの記録を終了する

Edit -> Macros -> Stop Macro Recording

5.記録したマクロを名前をつけて保存

「Enter Macro Name」 ダイアログに適当に名前を入力して(例:formatted save)、「OK」ボタンを押す

f:id:tmknom:20140911002510p:plain

6.IntelliJの設定画面を開く

IntelliJ IDEA -> Preferences

7.キーボードショートカットへの割り当て設定を開始

Keymap -> Macros -> formatted save(手順5で入力した名前)を選択して右クリック

f:id:tmknom:20140911002550p:plain

8.キーボードショートカットへの割り当て設定を実行

「add keyboard shorcut」 を選択し、First Strokeで「Command + s」(実際のキーボード操作が反映される)

「Assigned to [Main menu | File | Save All]」と赤文字で表示されるが無視して「OK」ボタンを押す

f:id:tmknom:20140911002559p:plain

9.Warningダイアログが出るが、気にせず「Remove」ボタンを押す

f:id:tmknom:20140911002604p:plain

設定結果を確認する

設定が終わったら、早速試してみよう!

コードフォーマットだけでなく、import文などもいい感じにしてくれて、とってもナイスだ。

チーム開発している人は、ぜひチーム全員で設定して、快適なIntelliJライフを送ろう!!

MacのRubyをアップデートして、knife-solo入れたった

f:id:tmknom:20140322170825p:plain

Chef-Soloをやるにあたって、とりあえずknife-soloを入れとけって、「入門Chef Solo」に書いてあったので、入れてみることにしたよ。

knife-soloのインストールを試みる

$ sudo gem install knife-solo
ERROR:  Error installing knife-solo:
    mime-types requires Ruby version >= 1.9.2.

いきなり玉砕(笑)

Rubyのバージョンを1.9.2以上にしろって怒られた。

バージョンを確認してみる。

$ ruby -v
ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]

うむ、確かに古い。

rbenvのインストール

rbenvを入れると、Rubyのバージョンを切り替えて使えるようになるので、まずコイツからインストールする。

$ brew install rbenv
$ brew install ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

で、rbenvでインストール可能なRubyのバージョンを調べてみる。

$ rbenv install -l
...
  2.0.0-rc2
  2.1.0
  2.1.0-dev

ずらずら出てくるけど、2.1.0を入れることにした。

knife-soloが目的なら1.9.2以上なら、どれでも大丈夫だと思う。

Ruby本体のインストール

インストールするバージョンを決めたので早速入れてみる。

$ rbenv install 2.1.0
$ rbenv rehash
$ rbenv global 2.1.0

では、確認。

$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin12.0]

OK、ちゃんと入ったようだ。

ついでにgemをupdateしておく。

$ sudo gem update

knife-soloをインストール

準備が整ったのでお目当てのknife-soloをインストールする。

$ sudo gem install knife-solo
$ rbenv rehash

今度はちゃんと入った。

動作確認をしてみよう。

$ knife solo init chef-repo
WARNING: No knife configuration file found
Creating kitchen...
Creating knife.rb in kitchen...
Creating cupboards...

なんかWarningが表示されたが、とりあえず動いてはいそうだ。

$ tree
.
└── chef-repo
    ├── cookbooks
    ├── data_bags
    ├── environments
    ├── nodes
    ├── roles
    └── site-cookbooks

tree コマンドで確認してみると、ちゃんとディレクトリが作成されている。

ちゃんと動いていることが確認できた。これでインストール完了だ。

ちなみに、さっきのWarningは

$ knife configure

とすることで、解消できる。

設定は全てデフォルトでOKなので、色々聞かれるがひたすらEnterを押せばOKだ。

Vagrant+VirtualBox+CentOS環境でMySQL5.6が起動しない場合の対処法

f:id:tmknom:20140322105543p:plain

発生した現象

Vagrant+VirtualBox+CentOSって環境にMySQL5.6をインストールして起動しようとしたところ

$ sudo service mysqld start
MySQL Daemon failed to start.
Starting mysqld:                                 [FAILED]

とこんな感じで起動できなかったので調べてみたよ。

まず、ログの場所を確認。

$ cat /etc/my.cnf
...
[mysqld_safe]
log-error=/var/log/mysqld.log

/var/log/mysqld.logにログがあるようだ。

エラーメッセージ確認

というわけで、ログからエラーメッセージを探してみる。

$ sudo cat /var/log/mysqld.log
...
2014-03-21 15:21:46 2492 [Note] InnoDB: Initializing buffer pool, size = 128.0M
InnoDB: mmap(137363456 bytes) failed; errno 12
2014-03-21 15:21:46 2492 [ERROR] InnoDB: Cannot allocate memory for the buffer pool
2014-03-21 15:21:46 2492 [ERROR] Plugin 'InnoDB' init function returned error.
2014-03-21 15:21:46 2492 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
2014-03-21 15:21:46 2492 [ERROR] Unknown/unsupported storage engine: InnoDB
2014-03-21 15:21:46 2492 [ERROR] Aborting
...

原因っぽいメッセージ発見→ InnoDB: Cannot allocate memory for the buffer pool

どうもメモリの確保に失敗しているらしい。

メモリの状況を確認。

$ free
             total       used       free     shared    buffers     cached
Mem:        603580     140024     463556          0       5484      83680
-/+ buffers/cache:      50860     552720
Swap:            0          0          0

結構空きがあるように見えるが、まだ足りないらしい。

解決法1:仮想OSのメモリサイズを増やす

一番簡単なのは、仮想OSのメモリサイズを増やすことだ。

Vagrantfileにこれを記述する。

config.vm.provider :virtualbox do |v|
  v.customize ["modifyvm", :id, "--memory", 1024]
end

ここでは、仮想OSのメモリを1024MBに設定した。

これでもう一度仮想OSを立ち上げて確認してみると

$ sudo service mysqld start
Starting mysqld:                                 [  OK  ]

正常にMySQLを起動できた。

解決法2:スワップ領域の確保

解決法1が採用できるならそうすべきだが、それが無理な場合は、スワップ領域を確保することで解決できる。

まずは、現状スワップ領域がどうなっているか見てよう。

$ swapon -s
Filename    Type  Size Used Priority

スワップ領域は存在しないらしい。

というわけでスワップ用のファイルを作成する。

$ sudo dd if=/dev/zero of=/swapfile bs=1M count=1024

とりあえず、サイズは1024MBとした。

次に作成したファイルをスワップ領域として初期化する。

$ sudo mkswap /swapfile

それではスワップ領域を有効にしよう。

$ sudo swapon /swapfile

では、確認。

$ swapon -s
Filename                Type        Size    Used    Priority
/swapfile                               file        1048568 0   -1

正常にスワップ領域が有効になった。

最後に、再起動時にもスワップ領域が使えるように /etc/fstab に設定しておけばOK。

$ sudo sh -c "echo '/swapfile swap swap defaults 0 0' >> /etc/fstab"

では、MySQLを起動してみよう。

$ sudo service mysqld start
Starting mysqld:                                 [  OK  ]

問題なく起動した。

本日の戦利品:GitHub実践入門 /シェルスクリプト基本リファレンス/エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

GitHub実践入門 ~Pull Requestによる開発の変革

http://www.amazon.co.jp/dp/477416366X

GitHubを最近真面目に使い出したので購入。

コンパクトにGithubの活用法が書かれていて非常に勉強になった。

CI連携や、チーム開発のフローの提案も記述されていて、実践で使える内容になっている。

シェルスクリプト基本リファレンス  --#!/bin/shで、ここまでできる

http://www.amazon.co.jp/dp/4774146439/

Vagrantでプロビジョニングスクリプトを記述する時に、シェルスクリプトを書く力が不足していることを実感したので購入。

その名前のとおり、リファレンスとして活用予定。

エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド

http://www.amazon.co.jp/dp/4774142948/

MySQLはXAMPPやMAMPで適当にインストールして使ってたが、自力でDBサーバを立てようとすると全然知識が足りないので購入。

ぶっちゃけ個人サイトだとなくてもいいレベルの知識だが、いい機会なので勉強することにした。

インストール直後にどのような設定を行うべきか、というところから丁寧に書かれているので、まずはこれを羅針盤にしていきたい。

本日の戦利品:入門vi 第6版・データベース徹底攻略・Redis入門・MongoDBイン・アクション

入門vi 第6版

http://www.amazon.co.jp/dp/4873110831/

これまでなんとなく敬遠してきたviを習得すべく購入。

これからちょっとずつ、viに慣れていく予定。(頑張れ自分!

データベース徹底攻略

http://www.amazon.co.jp/dp/4774163651/

立ち読みしたら結構興味深かったので購入。

RedisとかMongoDBとか、名前は知ってるけど、どういうものかよく知らないって状態だったので、手短に特徴やユースケースを説明してもらえるのはありがたい。

すでに使い倒している人向けではなく、あまり触ったことがない人向けっぽい。

あと、全然知らなかったんだけど、MySQL5.6ではmemcachedプラグインなるものが追加されたようで、手軽にMySQLmemcachedを連携させた構成が作れるようだね。

Redis入門 インメモリKVSによる高速データ管理

http://www.amazon.co.jp/dp/4048917358/

データベース徹底攻略を読んでて興味をもったのでついでに購入。

memcachedと違って、文字列以外の型があるということで、wktkしてる。

これは後日試す予定。

MongoDBイン・アクション

http://www.amazon.co.jp/dp/4873115906/

Redis同様、データベース徹底攻略を読んでて興味をもったので購入。

データベース徹底攻略を読んだ感じだと、MongoDBは少し使いこなすのにコツがいりそうな印象。

これも後日試す予定。

MacへPHP5.5+Composerをインストール

f:id:tmknom:20140322174133p:plain

ちょっと久々にPHPのコード書きたいなぁと思ったのでその時のインストールメモだよ!

PHP5.5

コマンド一発でサクッとインストールできる。

$ curl -s http://php-osx.liip.ch/install.sh | bash -s 5.5

さらに、~/.bash_profile ファイルの最後に下記を追加。

export PATH=/usr/local/php5/bin:$PATH

これでPHP5.5が使えるようになるはずだ!

$ source .bash_profile
$ php -v
PHP 5.5.8 (cli) (built: Jan 12 2014 18:50:29)

思いのほか、楽々インストール完了してしまった!

Composer

依存関係の制御を自分でやるのは面倒なのでComposerを導入。

$ curl -s https://getcomposer.org/installer | php
$ sudo mv composer.phar /usr/local/bin/composer

これでインストールできたはずだ。では、確認。

$ composer --version
Composer version 604a65cc31f3e5d8a2b96802135ac24434e87678 2014-03-06 09:26:16

うん、OKだね!

Laravel

せっかくなんで、Composerを使ってLaravelを入れてみた。

Composerでプロジェクト作成すると、必要なファイル全部拾ってきてくれるよ!

$ composer create-project laravel/laravel <project_name> --prefer-dist

ビルトインサーバを立ち上げて確認。

$ cd <project_name>
$ php artisan serve

http://localhost:8000/をブラウザで開いて、 You have arrived. と表示されればOKだ!

ちなみに

最初は、Homebrewで入れようとしたんだけど、なぜかうまくいかなかったので方針転換してるのだ。

面倒なので、真面目に調べなかったけど、Homebrewで入れようとしてうまくいかなかった人はここで紹介した方法をぜひ試してみてね!

Vagrant CloudのVagrant Shareを試してみたら凄すぎて鼻血出た

Vagrant 1.5がリリースされたと思ったら、Vagrant Cloudなんてのが登場してますね!

で、Vagrant Cloudの中にVagrant Shareってのがあるんだけど、試してみたらとんでもなかったので、早速やり方をシェアするよ!

Vagrant Cloudにユーザ登録

Vagrant Cloudのページにアクセスして、まずはユーザ登録しよう。

迷うことはないと思うけど、「JOIN VAGRANT CLOUD」ってボタンをクリックすれば登録ページに飛べる。

Join Vagrant Cloud

次に、ユーザ名、メールアドレス、パスワードを入力したらユーザ登録は完了だ。

Vagrant Cloud Sign Up

Vagrant1.5のインストール

Macの場合は普通にダウンロードページからdmgファイルを落として、ダブルクリックでインストール。

念のため、確認。

$ vagrant -v
Vagrant 1.5.0

Vagrantfile作成&仮想マシンの立ち上げ

HTTPサーバが必要なので、Vagrantfileにその設定を記述しよう。

ついでに、ここでは確認用のindex.htmlも作ってるよ。

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "precise64"
  config.vm.box_url = "http://files.vagrantup.com/precise64.box"

  config.vm.network :forwarded_port, guest: 80, host: 8080
  config.vm.provision "shell", inline: <<-EOT
    apt-get update
    apt-get install -y apache2
    rm -rf /var/www
    ln -fs /vagrant /var/www
    echo "<h1>Hello, Vagrant Cloud.</h1>" > /vagrant/index.html
  EOT
end

Vagrantfileを作成したら、いつも通り

$ vagrant up

で、仮想マシンを立ち上げる。

vagrant login

事前準備が整ったので、vagrant login コマンドを叩こう。

$ vagrant login
......
If you don't have a Vagrant Cloud account, sign up at vagrantcloud.com

Username or Email: <ユーザ名入力>
Password (will be hidden):<パスワード入力>
You're now logged in!

もちろんユーザ名とパスワードは、Vagrant Cloudに登録したものだ。

You're now logged in! って表示されてればログインOK。

vagrant share

では、vagrant share コマンドでシェアしてみよう。

$ vagrant share
......
==> default: Checking authentication and authorization...
==> default: Creating Vagrant Share session...
    default: Share will be at: lively-bunny-1387
==> default: Your Vagrant Share is running! Name: lively-bunny-1387
==> default: URL: http://lively-bunny-1387.vagrantshare.com
==> default:
==> default: You're sharing your Vagrant machine in "restricted" mode. This
==> default: means that only the ports listed above will be accessible by
==> default: other users (either via the web URL or using `vagrant connect`).

なんか色々出てくると思うけど、一番下の方にURLが書いてあるはずだ。

この例だと http://lively-bunny-1387.vagrantshare.com がそれだね。

このURLは毎回変わるので、試すときは、実際に手元で表示されてるURLを使ってね。

動作確認

じゃあ、URLをコピってブラウザで表示してみよう。

Hello, Vagrant Cloud. って表示されてれば成功だ!

Vagrant Share Result

普通にスマホとかからもアクセスできて超絶便利。

終了方法

いらなくなったら停止しよう。

Ctrl + C

これで、さっきのURLにアクセスしても何も出なくなるはずだ。簡単だね!

感想

ちょっとしたWebアプリケーションのデモ程度だったら、これだけで完結しちゃいそうだよね。

正直恐れいった。これは今後の発展に大いに期待!!

おまけ

まだ作り途中なんだけど、Vagrant入門者向けに資料を作ってるので、よかったら使ってね!

社内勉強会とかでハンズオン学習するときに活用できると思うのだ!!