意識低いエンジニアの一念発起ブログ

意識低くたってたまにはブログだって書くんだ。

Eclipseでコーディング規約のインデントやら空白やらを保存時に自動で修正する

ご無沙汰しております。意識低いエンジニアです。


  • 概要

今回はEclipseで自動でコーディング規約を適用して
インデントを適正化したり(タブ→スペースの統一とか、インデントの幅を揃えたりとか)
不要な空白、空行を削除したりできるようにする方法を紹介します。(紹介とか言っていますが備忘ログですw)
トピックは以下な感じです。
googleのコーディング規約の適用
・保存時に自動でコーディング規約を適用(Java/C++)

コーディング規約と言っていますが、
あくまでコードの見栄えに関する部分だけで、
変数名とか禁止された記法とかまではチェックしてくれません。

  • 問題の発生

コーディング規約あるけど、いちいち守ってらんないですよね。
たとえば
if(hoge==fuga){

if (hoge==fuga) {
にするとか (※if後、丸閉括弧後に空白が入っています。)
if ( hoge == fuga ) {
にするとかさ。 (※ == の前後にも空白が入っていたりします。)
あとはインデントをタブで埋めるかスペースで埋めるかとかさ。
あとは1行に詰め込みすぎるやつがいたりさ。
自動化しないと、統一できないじゃないですか。
でもこういうの守らないと地味に気になって集中力がマイクロ秒単位で消費されていく気がする。

で時々

「タブでインデントしやがったタコは誰だよ!」

みたいな感じで発狂したりする。

→自動化したい。

  • 背景1

google先生がコーディング規約公開してる。
かの有名なgoogle先生だし、さぞかし素晴らしいコーディング規約なのだろう。使ってみたい。
(別にディスってないです。本当にそうなんだろうと思っています。ちゃんと読んでないけどw)

googleのコーディング規約はリポジトリで管理されています。
google-styleguide - Style guides for Google-originated open-source projects - Google Project Hosting

web上でそのまま確認することもできます。(たとえばJava
Google Java Style


  • 背景2

EclipseにはFormatter機能(ショートカットキー:Ctrl + Shift + F)があり、
インデントやら、空白やらを、指定したコーディング規約(xml形式でインポートされているもの)
にしたがって、修正してくれます。
これは便利。しかもJavaの場合、保存時に自動でフォーマットかけてくれる機能もあります。



  • 実践1(googleのコーディング規約のチェックアウトする)

Eclipseワークスペース作ったら真っ先にチェックアウトしましょう。
https://code.google.com/p/google-styleguide/

Eclipsesvnパースペクティブを開いて、以下のような感じでチェックアウト。
f:id:sgr1120:20141124012832p:plain


  • 実践2(Formatterをインポートする)

EclipseのPreferencesでFormatterで検索かけてみましょう
f:id:sgr1120:20141124014005p:plain
でてきました。

ここでImportをクリックして、先ほどチェックアウトした
コーディング規約のプロジェクトのうち、
Javaなら「eclipse-java-google-style.xml
C++なら「eclipse-cpp-google-style.xml
を選択してインポートします。


  • 実践3(保存時にFormatterをかけるようにする)

Javaの場合は簡単。Preferencesでsaveで検索。
f:id:sgr1120:20141124014600p:plain
このように
Perform the selected action on save
にチェックを入れればよい。保存するたびに自動で修正してくれる。
C++の場合はこれがない。残念。コミットする前にCtrl + Shift + Fを忘れないようにしましょう。

Eclipseでネイティブライブラリをビルドパスに組み込む

今まで、すでにビルドパスが設定済みのプロジェクト(Java)を用いて開発してばかりだったので、
実はビルドパスの設定とかは詳しくないです。

jarをビルドパスに追加するくらいなら私にも経験がありました。(JUnitのライブラリ組み込んだり)

でもビルドパスにネイティブライブラリを組み込むという経験はなかったのでちょっと苦戦しました。
苦戦したので、きっと他にも苦戦する人がいるかもしれない。ということでここに書き記しておきましょう。(本当は自分の備忘ですが)

※ネイティブライブラリという言葉は、それぞれのOS用にコンパイルされたライブラリ、、、くらいの認識です。Windowsだと拡張子がdllだったり、MacOSXだとdylibだったり、Linuxだとsoだったりするやつです。(と思っています。)
EclipseはKeplerです。
※今回のOSはMacです。(追加したいライブラリは○○○.dylibです。)

まずネイティブライブラリが組み込まれていないと

こんなメッセージが出ます。
Exception in thread "main" java.lang.UnsatisfiedLinkError: no ○○○○○○ in java.library.path

またはこんなメッセージが出たりします。
Library not loaded: /opt/local/lib/○○○.dylib
Referenced from: /usr/local/lib/×××dylib

ネイティブライブラリを組み込んでみましょう(@Eclipse)

Configure Build Pathをクリック
f:id:sgr1120:20140427035751p:plain

Add Libraryをクリック(Add JARsはよくお世話になってました)
f:id:sgr1120:20140427040019p:plain

User Libraryを選んでNext
f:id:sgr1120:20140427040215p:plain

まだUser Libraryは何もないのでUser Libraryを追加します。
User Librariesを押します。
f:id:sgr1120:20140427040345p:plain

まず、Newをクリックしてこれから追加するユーザライブラリのセットを名づけます。(自分で定義してよいです。)
f:id:sgr1120:20140427040508p:plain

自分の場合は「fxrobolib」にしました。名付け終えたらそこでOKをクリック、Finishをクリックします。
f:id:sgr1120:20140427040734p:plain

f:id:sgr1120:20140427042417p:plain

Java Build Pathの一覧に出てきたUserLibraryを選択してnative library locationにフォーカスをあてて Editをクリックします。
f:id:sgr1120:20140427042453p:plain

ライブラリがワークスペースにある場合は、Workspaceを。そうでなければExternal Folderをクリック。
当該ライブラリがある場所を選択します。(ディレクトリごと選択できます。)
f:id:sgr1120:20140427042608p:plain

これにて完了。

RMySQLのインストールに失敗する件

64bit MacOSX(Marvericks)に64bitのR入れて

> install.packages('RMySQL')

これをすると以下のエラーに見舞われた。

installing to /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs
** R
** inst
** preparing package for lazy loading
Creating a generic function for ‘format’ from package ‘base’ in package ‘RMySQL’
Creating a generic function for ‘print’ from package ‘base’ in package ‘RMySQL’
** help
*** installing help indices
** building package indices
** installing vignettes
** testing if installed package can be loaded
Error : .onLoad failed in loadNamespace() for 'RMySQL', details:
  call: dyn.load(file, DLLpath = DLLpath, ...)
  error:  共有ライブラリ '/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so' を読み込めません: 
  dlopen(/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so, 6): Symbol not found: _mysql_affected_rows
  Referenced from: /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so
  Expected in: flat namespace
 in /usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL/libs/RMySQL.so 
 エラー:  ロードに失敗しました 
 実行が停止されました 
ERROR: loading failed
* removing ‘/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library/RMySQL’

対処法として、cranのサイトから直接RMySQLをダウンロードしたソースを使ったらうまくいきました。
以下のサイトから最新のRMySQLのソースをダウンロードしましょう。
http://cran.r-project.org/bin/macosx/contrib/

RMySQLのインストールの下準備に$MYSQL_HOMEを設定します。~/.zshrc (.bashrc)などにいれといてもいいでしょう。

% export $MYSQL_HOME=/usr/local/opt/mysql

(ちなみにMySQLのインストールにはbrewを使っています。 "/usr/local/opt/mysql"はmysqlのhomeディレクトリを向くシンボリックリンクになっているので、バージョン番号が入った絶対パスなど使わず、そちらを利用しましょう。)

上記RMySQL〜〜.tgzを保存した場所で以下を実行

% R CMD INSTALL --configure-args="--with-mysql-dir=$MYSQL_HOME --with-mysql-inc=$MYSQL_HOME/include --with-mysql-lib=$MYSQL_HOME/lib" RMySQL_0.9-3.tgz  
* installing to library ‘/usr/local/Cellar/r/3.0.2/R.framework/Versions/3.0/Resources/library’
* installing *binary* package ‘RMySQL’ ...
* DONE (RMySQL)

このように出力されて成功しました。

install.packages('RMySQL')でダウンロードしてくるソースとは相性がよろしくなかったようです。

macの初期設定ですべきこと(特にエンジニア向け)

・アップデート

とりあえず最新化する。

f:id:sgr1120:20140202020040p:plain

 

・コンピュータ名を変える。

「◯◯のMacBook Air」みたいなださい名前を変える。

f:id:sgr1120:20140202021746p:plain

 

・システムフォルダ名を英語にする

これしないとターミナル使いにくい。↓見て万事解決

Macのシステムフォルダを英語にする方法 - Qiita [キータ]

 

・F7〜F10とかで半全カナ変換のショートカットを利用できるようにする。

windowsではおなじみのショートカットをmacでも

f:id:sgr1120:20140202021423p:plain

KeyRemap4MacBook

KeyRemap4MacBook - OS X用のソフトウェア
PCKeyboardHack - OS X用のソフトウェア (↑の追加ソフト)

  • 英数キー + hjklで左右移動できるようにする(vimライクで個人的にはかなり便利。必須レベル)
  • 英数キー + uでbackspace、英数キー + iでdelete
  • KeyRepeatも適当に自分好みに設定
  • capsキーをcommandキーにチェンジ(capsキー使いたい人はやっちゃだめだけど)

f:id:sgr1120:20140202022358p:plain

f:id:sgr1120:20140202022726p:plain

 

・ターミナルのログインシェルをzshにする

ここをみて万事解決した
初めて Mac で zsh を使う人のためのチュートリアル - mollifier delta blog

 

・その他

  •  xcode入れてmacportいれて(homebrewに一本化しました2014.02.04)云々
  • google日本語入力が好きなのでいれておく
  • missioncontrolで仮想デスクトップは4つくらいにしておく

 

こんなかんじで(自分は)かなり快適な仕様になりました。