ENTRANCE

都内でエンジニアやってます。主にRubyとJavaを書いて遊んでる人のブログ。楽しくのんびりとがモットー。

【Ruby on Rails】.erbを.hamlに変換するのは簡単だよ。って話

こんにちはかっつんです!

erbファイルをhamlファイルに変換する方法を紹介します!


Gemの追加

Gemfileに以下を追加します!

gem 'haml-rails'

ターミナルでbundle installを実行します!

$ bundle install


.erbを.hamlに変換する

ターミナルで次のコマンドを実行すると、全てのerbファイルがhamlに変換されます!

$ rails haml:erb2haml


最後に

qiitaなどでerb2hamlをインストールする旨の記載を見かけると思います。
しかし、haml-railsをインストールすれば、erb2hamlをgemfileに記載(インストール)する必要はないんですよね。。。

一度GitHubのソースを見られてもいいかもしれません! それでは!!

【Git】よく使うGitコマンド一覧

Gitコマンドをすぐ忘れてしまうので備忘録

初期設定からプッシュまで

$ git config --global user.name "User Name"
$ git config --global user.email email@example.com
// 一回だけでOK
$ git init
// プロジェクトのルートディレクトリで
$ git add -A
$ git commit -m "コミットメッセージ"
$ git remote add origin https://<github 又は bitbucket のリモートディレクトリ>
$ git push -u origin --all

git config のいろいろ

configの確認
【一覧表示】
$ git config -l

【個別表示】
$ git config '設定名'
例)$ git config user.name
configの設定・変更
【一つを指定して設定・変更】
$ git config '設定名' '設定したい値'
例)$ git config user.name hogehoge

【configファイルを直接編集】
$ git config -e

ブランチのいろいろ

【ローカルブランチを確認】

$ git branch
// *が付いているブランチが現在のブランチです!!

【リモートブランチを確認】

$ git branch -r

【全てのブランチを確認】

$ git branch -a
// 全てのローカル・リモートブランチを表示
// あるはずなのに表示されない場合は次のコマンドで、ローカルの更新をしてください!
$ git fetch

【ブランチ名で検索して表示】

$ git branch | grep '検索ワード'

【ブランチの作成】

$ git branch "作りたいブランチ名"
例)git branch "feature/sample"

【ブランチの切り替え】

$ git checkout "切り替えたいブランチ名"

【ブランチの作成&切り替え】

$ git checkout -b "ブランチ名"

【ブランチの複製(コピー)】

$ git checkout "コピー元のブランチ"

$ git branch -c  "作成するブランチ名"

【ブランチの名前を変更する】

$git branch -m "変更前のブランチ名" "変更後のブランチ名"
// 変更したいブランチ上にいる場合は、'変更前のブランチ名'は省略可能です!!

【ローカルブランチを削除する】

$ git branch -d "ブランチ名"
// マージ前のブランチは -d を -Dに変更して実行してください!!

コミットのログをみる

$ git log

// こんな感じに出力されます↓
commit **c7*****9b*a928***0f1b8******e65eb***0 // コミット番号
Author: ユーザーネーム <メールアドレス>
Date:   Thu Dec 27 00:56:13 2018 +0900

    コミットメッセージ

【コンパクトに表示】

$ git log --oneline
// こんな感じに出力されます↓
00afad4 (HEAD -> feature_hoge) hogeをhogehoge
コミットのハッシュ値 (ブランチ) コミットメッセージ

git add を取り消したい

【全て取り消し】

$ git reset

【指定ファイルを取り消し】

$ git reset 'ファイル名' 
例)$ git reset index.html

git commit を取り消したい

【直前のコミット取り消し】

$ git reset --'オプション' HEAD^
// オプションはhard 又は soft から選択可能
// hardを選択するとファイルの編集内容も取り消され、softの場合はファイルの編集内容は残る(git add された状態になります)。

【特定のコミットを取り消す】

$ git revert 'コミット番号'

コミット番号の調べ方はコミットのログをみるを参照してください

コミットメッセージを変更したい

【直前のコミットメッセージを変更】

$ git commit --amend -m "修正後のメッセージ"
// もしgit push後であれば、修正後にもう一度
$ git push -f
強制的にプッシュしましょう!

【過去のコミットメッセージを修正】

コマンド一つで編集が出来ない?ので別の機会に!

【コマンド】プロセスを終了する

こんにちは、かっつんです!

書くこと

プロセスを確認して終了するコマンド(備忘録)

手順

アプリケーション名でプロセスを確認

$  ps aux | grep アプリケーション名
 # 例) ps aux | grep mysql

レスポンスはこんな感じ

username              912   0.0  0.0  4919280   1436   ??  S    10 219    1:19.62 /usr/local/opt/mysql@5.6/bin/mysqld --basedir=/usr/local/opt/mysql@5.6 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/opt/mysql@5.6/lib/plugin --log-error=****.err --pid-file=******.pid
username              798   0.0  0.0  4288056      8   ??  S    10 219    0:00.05 /bin/sh /usr/local/opt/mysql@5.6/bin/mysqld_safe --datadir=/usr/local/var/mysql

ポート番号でプロセスを確認

$ lsof -i:ポート番号
 # 例) lsof -i:8080

レスポンスはこんな感じ

COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    43419 *****   11u  IPv4 0xfea8bced90d768f9      0t0  TCP *:hbci (LISTEN)

プロセスを終了させる

$ kill -TERM プロセス番号
 # 終了

または

$ kill -9 プロセス番号
 # 強制終了

【MySQL】mysql.server start/stopが出来ない

こんにちは、かっつんです。

MySQLのスタート、ストップが出来なくなってしまったので、その時の対応、備忘録。

mysql.server stopコマンドで止めてみる。

$ mysql.server stop
 ERROR! MySQL server process #905 is not running!

あれ、、、止まらない。 そもそも動いていないのかな?スタートしてみよう。

$ mysql.server start
 Starting MySQL
 ........... ERROR! The server quit without updating PID file /usr/local/var/mysql/******.pid).

動いてくれない、、。

プロセス調べてみる。

$  ps aux | grep mysql

   {USERNAME}    50797   0.0  0.1  4734472  14684   ??  S    30 119    8:32.19 /usr/local/Cellar/mysql@5.7/5.7.24/bin/mysqld ...(中略)...local/var/mysql/********.local.pid
   {USERNAME}    50578   0.0  0.0  4279864      8   ??  S    30 119    0:00.03 /bin/sh /usr/local/Cellar/mysql@5.7/5.7.24/bin/m...(中略)...file=/usr/local/var/mysql/****.local.pid
   {USERNAME}    62131   0.0  0.0  4286452    832 s001  S+    3:30PM   0:00.00 grep mysql

スタート/ストップ出来ないけど、どうやらプロセスは生きてるみたい。 キルしてみる!

$ kill -9 プロセス番号
 # 上の例だと、50797や50578がプロセス番号です。

で、プロセスを終了出来ます。

確認してみましょう!

$ ps aux | grep mysql
 # ↓これは出てきて大丈夫なやつです
   {USERNAME}    62135   0.0  0.0  4287476    836 s001  U+    3:31PM   0:00.00 grep mysql

これでMySQLのプロセスを止めました! もう一度mysql.server stopを入力してみる。

$ mysql.server stop
 ERROR! MySQL server PID file could not be found!

エラーが変わりました!これは起動してないよってことなので、起動してみましょう!

$ mysql.server start
   Starting MySQL
   ... SUCCESS! 

動いた!もちろんストップも出来ます!

$ mysql.server stop
   Shutting down MySQL
   .... SUCCESS! 

そういえば前にMySQLが異常終了してたのが原因だったのかな。。。

【Java】MacでJavaの開発環境を構築しよーよ!

こんにちは、かっつんです!

今日はJavaの開発環境の構築手順について紹介します!

Java8 + MySQL + SpringBoot + IntelliJで構築します!

ミドルウェアのインストール

まずはApple IDを取得(アカウントを持っていない場合のみ)しましょう!
- https://appleid.apple.com/account#!&page=create から登録出来ます!
- ID/Passwordは忘れ無いように気をつけてくださいね!
Apple IDが取得出来たら、ここからは、ターミナルを開いてコマンドラインから実行しましょう!
Xcodeをインストールします!(取得した Apple ID の ID/Password の入力を求められます)

$ xcode-select --install

続いては、HomeBrewインストールです!

$ /usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”
$ brew update && brew cleanup
$ brew tap caskroom/cask
$ brew tap caskroom/versions

HomeBrewのインストールが完了したら、Javaをインストールします!!
今回はJava8のインストールです!

$ brew cask install java8
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

続いて、
MySQL, maven, gradle, sbtをインストールします!
MySQLはデータベース、maven, gradle, sbtはビルドツールです!

$ brew install mysql@5.7
$ brew install maven
$ brew install sbt
$ brew install gradle

環境変数を設定しましょう!

以下まとめてコピペして実行してください!!
bashを利用する場合の手順です!他のシェルを使う場合は自力でお願いします。。。)

$ cat <<EOL >> ~/.bash_profile
 export JAVA_HOME=`/usr/libexec/java_home -v 1.8`
 export PATH=$JAVA_HOME/bin:/usr/local/bin:$PATH
 export PATH=“/usr/local/opt/mysql@5.7/bin:$PATH”
 EOL
 source ~/.bash_profile

MySQL自動起動(任意)

brew installした時点で MySQL自動起動される設定になっています。
この設定が邪魔になる場合は自動起動を無効化してください。

$ brew services stop mysql
$ brew services start mysql

MySQL の起動・停止方法と設定ファイルの例

※インストール完了時点で自動起動が有効になっている場合は start/stop コマンドは失敗します

  • 起動
$ mysql.server start
  • 停止
$ mysql.server stop
  • MySQLコンソールへのログイン
$ mysql -uroot
  • MySQL に root パス無しでログイン出来るように設定
$ mysql -uroot

mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED WITH mysql_native_password BY ‘’;
  • 設定ファイル~/.my.cnf を編集
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init-connect=‘SET NAMES utf8mb4;SET AUTOCOMMIT=0’
skip-character-set-client-handshake
lower_case_table_names=1
sql_mode=NO_ENGINE_SUBSTITUTION
#log-slow-queries=/tmp/slow.log
#long-query-time=30
#log-queries-not-using-indexes
#log-slow-admin-statements
#log=/tmp/query.log
max_allowed_packet=32MB

IntelliJ IDEA の各種設定

IntelliJをインストールしましょう!

https://www.jetbrains.com/idea/download/#section=macからダウンロード出来ます!
トライアル期間中は無料で使用可能です!

DevTools でホットリロード(Spring Boot利用時)

pom.xml に spring-boot-devtools を追加

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-devtools</artifactId>
   <version>2.0.1.RELEASE</version>
</dependency>

gradle を使っている場合は build.gradle に runtime(実行時) の依存ライブラリとして追加

dependencies {
   runtime(‘org.springframework.boot:spring-boot-devtools’)
}

Preferences -> Compiler -> Build project automaticallyにチェックを入れる
Shift+Command+Aregistryを選択したうえで、compiler.automake.allow.when.app.runningにチェックを入れ有効にする

自動インポート

Preference -> Editor > General > Auto Import -> Add unambiguous imports on the fly
Preference -> Editor > General > Auto Import -> Optimize imports on the fly

Scala プラグイン導入

IntelliJ IDEA -> Preferences -> Plugins で Scala を検索してインストール

Lombok プラグイン導入

IntelliJ IDEA -> Preferences -> Plugins で Lombok を検索してインストール
このままだとコンパイルエラーが発生するので下記も
Preferences -> Build, Execution, Deployment –> Compiler –> Annotation Processors -> Enable annotation processing をチェック

Save Actions プラグイン導入

保存時に自動フォーマット+αしてくれるプラグインです。プロジェクト単位で都度設定が必要です

Preference -> Plugins -> Browse Repositories...Save Actionsを検索しインストール
`Preferences -> Other Settings -> Save Actions -> “Compile fileとAdd static modifier to methods 以外“にチェックを入れて OK 押す
# Add class qualifier to static member access
# Add class qualifier to static member access outside declaring class only

の2つは片方しか選択できません。下の “outside declaring class only” がついている方にチェックを入れてください

Codic プラグイン導入(オプション)

Preference -> Plugins -> Browse Repositories... で Codic Plugin を検索しインストール
https://codic.jp/signup から GitHub などのアカウントでユーザー登録し、プロジェクト作成 & API アクセスキー取得を済ませておく
取得したアクセスキーを Preference -> Otther Settings -> Codic Plugin に 1 のアクセスキーとプロジェクト名を入力

Inspection

特定のコードに対して警告やエラーとして表示してくれる機能
※警告やエラーがあってもコンパイルは通ります

以下設定は Severity を Warning から Error に変更してください

  • マジックナンバー禁止
    Preferences > Editor > Inspections > Java > Abstraction Issue > Magic number

  • {} の省略を禁止
    Preferences > Editor > Inspections > Java > Code style issues > Control flow statement without braces

  • Stringの固定値を比較する場合、“固定値“.equals(string)と強制する
    Preferences > Editor > Inspections > Java > Code style issues > ‘expression.equals(“literal”)’ rather than “literal”.equals(expression)'

  • 条件文を&&や||を使ってシンプルにする
    Preferences > Editor > Inspections > Java > Code style issues > ‘if’ statement may be replaced with && or || expression

【Ruby on Rails】同名のDBを作ることが出来ない時にやること

みなさんこんにちは、かっつんです!

rake db:createがうまく行かず、次のようなレスポンスが返ってくることありませんか?

$ rails db:create
Database 'sample_app_development' already exists
Database 'sample_app_test' already exists


(前提として、次のコマンドでアプリを作り始めた場合を想定して、説明をします。)

 $ rails new sample_app -d mysql
 # sample_appという名前のプロジェクトをmysqlのデータベースを使って新規作成という意味です。


already existsとあるように、同じ名前のデータベースが既に存在していることを意味しています。

MySQLでは同じ名称のデータベースを作成することは出来ないため、このようなレスポンスが返ってきます。

ですので、次のいずれかの方法で解決する必要があります。


それでは、順番に説明をしていきます!!


名前を変えて作成する方法

ところで、rake(rails) db:createコマンドを入力した時、
どうやってデータベースの名前が決まっているのでしょうか?

感覚的にプロジェクト名と同じ名前で生成されているな〜っと認識されているかもしれませんが、
データベースの名前を設定しているファイルがプロジェクト内に存在するのです。

それは、
(app名)/config/database.ymlというファイルで定義されています。
中身は次の通りです(一部省略)。

default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password:
  socket: /tmp/mysql.sock

development:  #開発環境
  <<: *default
  database: sample_app_development #生成されるデータベース名

test: #テスト環境
  <<: *default
  database: sample_app_test

production: #本番環境
  <<: *default
  database: sample_app_production
  username: sample_app
  password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>

ここで注目するのが、databese:この部分です!!
ここに続く部分が、データベースの名前になります!
デフォルトでは、プロジェクト名_環境名というルールで命名がされています。
このことから、以前作成したことのあるプロジェクト名と同名のプロジェクト名でDBを作ろうとすると、
既にありますよ!!!って言われてしまう訳です!


では、実際に変えてみましょう!!

development:  #開発環境
  <<: *default
  database: rename_sample_app_development #生成されるデータベース名

test: #テスト環境
  <<: *default
  database: rename_sample_app_test

このようにdatabase.ymlを編集し、もう一度rails db:createを試してみましょう!!

$ rails db:create
Created database 'rename_sample_app_development'
Created database 'rename_sample_app_test'


はい!!出来た!





既存のデータベースを消して、新たに作る方法

database.ymlを編集する方法でも説明した通り、デフォルトの状態での
データベースの名前は、プロジェクト名_環境名というルールで作成されます。
そのため、以前に作成したことのあるプロジェクトと同名のプロジェクトでデータベースを作成しようとすると失敗します。

であれば、既に存在しているDBを消せば、もう一度作成することも可能ということです!
(ただし、既存のDBを使うのであれば、この方法は使わないことをオススメします!)


では早速!次のコマンドで、MySQLに入ります!

$ mysql -u root

うまく入れていれば、次のように表示されるはずです。
(お使いのPCに入っているMySQLのバージョンによって、表示は多少異なるかもしれませんが、
最後の行のmysql>が表示されていればOKです。)

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.41 Homebrew

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 


では、次にデータベースを消すコマンドです。
データベースを消せば、その中のテーブルも同時に消去されます。(レコードも同様。)
(もし誤って削除してしまった場合も、ここでは説明しませんが復元することは可能です。)

mysql> drop database sample_app;

mysql>の部分は入力しないでください!(うまくMySQLに入れていれば既にターミナルに表示されています。)
最後のセミコロン(;)の入力も忘れないでくださいね!

これで消えるはずですが、、、、
こんなエラー出てる方もいるのでは??

mysql> drop database sample-app_development;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'sample-app_development' at line 1



実は一つ注意しなければいけないことがあります。
それは、プロジェクト名に
-(ハイフン)が入ってる場合、これでは消えません。
プロジェクト名を`(バッククオート)で囲みましょう!!!

mysql> drop database `sample-app_development`;

うまく消せましたか?
うまく削除することができれば、次のような表示がされます!

Query OK, 0 rows affected (0.02 sec)


次のコマンドを入力することで、データベースを一覧表示して確認することも出来ます!

mysql>show databases;

消したかったDBがなければOKです!


以上です!
これで先ほどまで通らなかったrails(rake) db:createが通るようになってます!!

【Ruby on Rails】Railsで余計なファイルを作らない

こんにちは、かっつんです!

 

Railsコマンドなどを入力した時に、デフォルトで勝手に生成されるファイルに不要なものってありますよね?

そういったファイルを生成しないようにする方法を紹介します!

例えば、rails g コマンドを使って「Sample」という名前のモデルを作る場合、
ターミナルでrails g model sampleと入力すると、
デフォルトでは以下のように、不要なファイルまで作られてしまいます。

ターミナル

$ rails g model sample
   Running via Spring preloader in process 23555
               invoke  active_record
               create    db/migrate/20190210142639_create_samples.rb
               create    app/models/sample.rb
               invoke    test_unit
               create    test/models/sample_test.rb
               create    test/fixtures/samples.yml

出来るだけ、余計なファイルは作りたくないですよね。
そんな時には、config/application.rbに設定を書き加えましょう!!!

config/application.rb

...省略
module SampleApp
  class Application < Rails::Application
    config.generators do |g|
      g.stylesheets false   #styleシート
      g.javascripts false   #javascript
      g.helper false         #ヘルパー
      g.test_framework false #テストファイル 
    end
  end
end

上の記述では、styleシート、avascript、ヘルパー、テストファイル の自動生成を止めてくれます!  

では試しに、もう一度モデルを作ってみます!
今度は「sample2」という名前のモデルを作ります。
入力するコマンドは、rails g model sample2です。


結果は.....

ターミナル

$ rails g model sample2
   Running via Spring preloader in process 23668
               invoke  active_record
               create    db/migrate/20190210144242_create_sample2s.rb
               create    app/models/sample2.rb

はい、先ほど指定したファイルが生成されなくなりました!