新しいRailsプロジェクトを作成する
何も思い出せなかったので、自分のメモ用です。
こうしたほうがいいよって部分があれば教えていただきたいです。
前提
実際の作業
現在のRubyのバージョンを確認。
$ rbenv versions system 2.1.2 * 2.1.5 2.2.2
2.3.0がインストールできるバージョンの一覧にない。
$ rbenv install -l Available versions: 1.8.6-p383 1.8.6-p420 ・・・(略)・・・ 2.2.0 2.2.1 2.2.2 2.2.3 2.3.0-dev jruby-master+graal-dev jruby-1.5.6 ・・・(略)・・・
ruby-buildをupdateする。
$ brew upgrade ruby-build ==> Upgrading 1 outdated package, with result: ruby-build 20160130 ==> Upgrading ruby-build ==> Installing dependencies for ruby-build: pkg-config, openssl ・・・(略)・・・ 🍺 /usr/local/Cellar/ruby-build/20160130: 196 files, 110.1K, built in 4 seconds
2.3.0がインストールできるバージョンの一覧に出た!
$ rbenv install -l Available versions: 1.8.6-p383 1.8.6-p420 ・・・(略)・・・ 2.2.4 2.3.0-dev 2.3.0-preview1 2.3.0-preview2 2.3.0 2.4.0-dev jruby-1.5.6 jruby-1.6.3 ・・・(略)・・・
Ruby 2.3.0をインストール
$ rbenv install 2.3.0 Downloading ruby-2.3.0.tar.bz2... -> https://cache.ruby-lang.org/pub/ruby/2.3/ruby-2.3.0.tar.bz2 Installing ruby-2.3.0... Installed ruby-2.3.0 to /Users/****/.rbenv/versions/2.3.0
インストールされたことを確認
$ rbenv versions system 2.1.2 * 2.1.5 2.2.2 2.3.0
使用するRubyのバージョンを2.3.0に切り替える
$ rbenv global 2.1.5 $ rbenv global 2.3.0 $ $ rbenv versions system 2.1.2 2.1.5 2.2.2 * 2.3.0
Railsのgemをインストール(最新が欲しかったので、バージョン指定なし)
$ gem install rails --no-document Fetching: railties-4.2.5.1.gem (100%) Successfully installed railties-4.2.5.1 Fetching: rails-4.2.5.1.gem (100%) Successfully installed rails-4.2.5.1 2 gems installed
--no-document
については下記URLを参照。
gemのインストールで`--no-document`を付けると77倍早い - Qiita
カレントディレクトリにRailsアプリケーションを作成(READMEのみのリポジトリが作成されていたため、事前にgit cloneしておいた)
$ rails new . -d mysql exist create README.rdoc create Rakefile create config.ru create .gitignore create Gemfile create app create app/assets/javascripts/application.js create app/assets/stylesheets/application.css create app/controllers/application_controller.rb create app/helpers/application_helper.rb ・・・(略)・・・ run bundle install Fetching gem metadata from https://rubygems.org/........... Fetching version metadata from https://rubygems.org/... Fetching dependency metadata from https://rubygems.org/.. Resolving dependencies..... Installing rake 10.5.0 ・・・(略)・・・
起動してみる
$ rails s => Booting WEBrick => Rails 4.2.5.1 application starting in development on http://localhost:3000 ・・・(略)・・・
ActiveRecord::NoDatabaseErrorになる。
→まだDBを作成してないから当たり前。
DBを作成する。
$ rake db:create $ $ #databeseが作成されたことを、mysqlコンソールから確認する。 $ mysql -u root Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 22 Server version: 5.6.27 Homebrew Copyright (c) 2000, 2015, 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> show databases; +----------------------------------------+ | Database | +----------------------------------------+ | mysql | | hoge_development | | hoge_test | +----------------------------------------+
再度 rails s
で起動し、http://localhost:3000/ にアクセスすると、下記のような画面が表示される。
アプリケーションの作成はここまで。
Geek Women New Years Party 2016 でLTをしました
Geek Women New Years Party 2016というイベントが先週の金曜日(1/15)に開催され、 イベントの中でLTをさせていただきました。
LT内容について
www.slideshare.net
私が働いている会社のCTOについてお話しました。
発表後に「CTO素敵ですね!」と声をかけていただいたのが嬉しかったです。
ほんとうに、うちのCTOは素敵なんですよ!!!
ペコッターについて
よくお声がけしていただくのですが、 私はペコッターの開発者ではありません。
ペコッターのキャラクター「はらぺこ君」が大好きすぎて、はらぺこエヴァンジェリストを勝手に名乗っています。
お菓子神社について
下記の記事を参考に、社内にオフィスグリコのようなお菓子置き場を作っています。
チーム開発 - 3年くらいお菓子神社運営してきた - Qiita
オフィスグリコよりも、もっと少量を気軽に食べられる状態をつくりたいと思って始めました。
女性がたくさん集まったキラキラしたイベントでした(・∀・)
女性のコミュニティ、色々あるんですねー。
重複したレコードのINSERTを防止する
前にやっていたブログから移行してきた記事です。
idとcreated_atだけが異なるレコードが重複して登録されることがあって困っていた。
同じレコードがないときはINSERT、同じレコードがある場合はUPDATEが実行されるようにしたい。
例として以下の様なテーブルを用いて説明する。
work_itemsテーブル
id | created_at | work | item | user |
---|---|---|---|---|
1 | 2015-08-25 14:59:00 | 1 | ホチキス | やまだ |
2 | 2015-08-28 19:04:00 | 1 | はさみ | たなか |
3 | 2015-08-28 19:35:00 | 2 | はさみ | やまだ |
4 | 2015-08-28 21:15:00 | 2 | はさみ | たなか |
※例のためのテーブルなので構成がテーブルとしておかしいです。
下記を参考に実装する。
MySQL で INSERT と UPDATE を1文で実現する ~ ON DUPLICATE KEY UPDATE 編~ | UB Lab.
MySQLのユニーク制約とは?
ユニークキー制約(UNIQUE) - テーブルの作成 - MySQLの使い方
今回はworkとitem両方が同じものは登録したくない。
→workとitemの2つでユニークになるようにしたい。
複数カラムにユニーク制約をつけたい!
ActiveRecord4のバリデーションで複数カラムにユニーク制約を付ける方法
Rails でユニーク制約 - @tmtms のメモ
元々存在するテーブルなので、ユニーク制約を追加する。
class AddUniqueToWorkItem < ActiveRecord::Migration def change add_index :work_items, [:work, :item], :unique=>true end end
・・・ちょっとまった!!!
元々workとitemが重複しているレコードがあるのに後からユニーク制約つけようとしたらmigrateはどうなるんだ?!?!
実際にやってみた!
Mysql2::Error: Duplicate entry '21-3' for key 'index_chat_work_items_on_work_and_item': CREATE UNIQUE INDEX `index_chat_work_items_on_work_and_item` ON `work_items` (`work`, `item`) /test/db/migrate/20150831000000_add_unique_to_work_items.rb:3:in `change'
わーい(∩´∀`)∩ワーイ
落ちたー!
『ALTER IGNORE』を使えば大丈夫そうだ!
複数カラムでユニークキーを作る - 揮発性のメモ
過去データが書き換わってしまう(重複していた場合は先にあるほうが残る)がOKであるかはサービスやプロジェクトによると思います!
class AddUniqueToWorkItem < ActiveRecord::Migration def up sql = "ALTER IGNORE TABLE work_item ADD UNIQUE duplicate_prevent (work, item);" ActiveRecord::Base.connection.execute(sql) end def down sql = "ALTER TABLE work_item DROP INDEX duplicate_prevent;" ActiveRecord::Base.connection.execute(sql) end end
- 上記はindexに「duplicate_prevent」という名前をつけています。
ALTER TABLE構文 - bnote - upはdb:migrateするときに呼び出され、downはdb:rollback するときに呼び出されるらしい。
マイグレーション機能とは - Ruby on Rails入門
これであとはINSERTするときにON DUPLICATE KEY UPDATEすればOKだ♪
now = Time.now.strftime("%Y-%m-%d %H:%M:%S") query = "INSERT INTO `work_items` (`created_at`, `work`, `item`, `user`) VALUES ('%s', %d, %s, %s) ON DUPLICATE KEY UPDATE created_at = `%s`" query = query % [ now, [workの値], [itemの値], [userの値], now ] ActiveRecord::Base.connection.execute(query)
・・・と思ったら、パーティションロックがかかるらしいorz
MySQL :: MySQL 5.6 リファレンスマニュアル :: 13.2.5.3 INSERT ... ON DUPLICATE KEY UPDATE 構文
該当テーブルのINSERTでユニーク制約違反例外が発生したときに無視する、という方針に変更。
begin WorkItem.create( work: [workの値], item: [itemの値], user: [userの値] ) rescue ActiveRecord::RecordNotUnique => exception # ユニーク制約違反は無視する end
これで重複記録はなくなるはず。
メモ
mysqlのコンソールから手動で追加したユニークキーを削除する方法
mysql: 設定した unique キーを削除する | BmathLogRubyでsprintf的なことをしたい
ruby の sprintf書式文字列の、あまり使われていないような気がする機能 - Qiitaparamsの値からクエリを組み立てるときはSQLインジェクション対策もしたほうがいいらしい
15分でできるSQLインジェクション
hubotをHerokuからAWSのEC2へお引っ越し、そして常駐化
前にやっていたブログから移行してきた記事です。
Herokuが課金されちゃうよ☆というメールが来るのでEC2へお引っ越しすることに。
EC2はセットアップ済みでした。
こちらを参考にしました。
Hubot を Amazon EC2 にセットアップし、Slack と連携する! - Qiita
Amazon Linuxにログインする。
hubot用のディレクトリを作成し、botのコードをgithubからpull。
Node.jsをインストール
$ sudo yum -y install nodejs npm --enablerepo=epel
※npmがないとhubotさんやCoffeScriptがインストールできない。
HubotとCoffeeScriptをインストール
$ npm install -g hubot coffee-script
botのディレクトリでnpm install
$ npm install
下記のようなエラーが出たので、node-gypをインストール
> node-gyp rebuild Traceback (most recent call last): File "/usr/bin/gyp", line 15, in <module> import gyp ImportError: No module named gyp gyp ERR! configure error gyp ERR! stack Error: `gyp` failed with exit code: 1 gyp ERR! stack at ChildProcess.onCpExit ・・・
$ npm install -g node-gyp
bin/hubotで起動しようとしたらWarningが出て起動しないので、momentをインストール。
hubot> [Wed Aug 12 2015 03:14:08 GMT+0000 (UTC)] ERROR Unable to load /home/ec2-user/mybot/scripts/example: Error: Cannot find module 'moment' at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) ・・・
※下記を参考にしました。
Node.js - throw new Error("Cannot find module '" + request + "'"); - Stack Overflow
$ npm install moment --save
無事起動!!ヽ(=´▽`=)ノ
Slack用アダプタをインストール
$ npm install hubot-slack --save
Slackのトークンを設定
一番上に貼ったQiitaの記事だとSlack側の設定画面とか内容がちょっと古いので下記を参考にしました。
SlackのHubot Integrationが知らぬ間にアップデートされてた - Qiita
$ export HUBOT_SLACK_TOKEN=Slackの設定画面で指定されたトークン
hubotを起動
$ bin/hubot -a slack
これで引っ越し完了!
・・・と思ったらこいつ常駐化しない∑(゚д゚lll)ガーン
定期的に落ちるorz
下記を参考に常駐化させます。
Hubotをインストール、hipchatと連携し、foreverでデーモン化(CentOS6.4) - Qiita
foreverをインストール
$ npm install forever -g
起動用のシェルrun.shを作成
#!/bin/bash export HUBOT_SLACK_TOKEN=Slackの設定画面で指定されたトークン forever start -c coffee node_modules/.bin/hubot --name hubot -a slack
※botのディレクトリ直下に作成しました。
run.shを実行するとhubotが常駐化します。
$ ./run.sh
プロジェクトのRubyバージョンがアップデートされていたときにやったこと
前にやっていたブログから移行してきた記事です。
しばらく見ていない間にプロジェクトのRubyバージョンがアップデートされていました。
どうすればいいか分からなくなって焦ったのでまとめておきます。
rbenvやらHomebrewやらはインストールされている前提。
# バージョン一覧の表示 $ rbenv install --list Available versions: 1.8.6-p383 1.8.6-p420 ・・・ 2.1.5 ←今回は2.1.5をインストールします 2.1.6 2.2.0-dev # Rubyのインストール $ rbenv install -v 2.1.5 Downloading ruby-2.1.5.tar.gz... HTTP/1.1 200 OK ・・・ Installing ruby-2.1.5... checking build system type... checking xxxxxxx ・・・ # bundlerをインストール $ gem install bundler Fetching: bundler-1.10.6.gem (100%) ・・・ # 必要なバージョンのgemをinstall $ bundle install Fetching gem metadata from http://rubygems.org/........ ・・・ Installing rake 10.3.2 Installing i18n 0.6.9 Installing xxxxxxxxx ・・・ # 使用するRubyのバージョンを切り替える $ rbenv rehash $ rbenv versions system * 2.1.2 2.1.5 (set by /Users/hoge/.rbenv/version) $ rbenv global 2.1.5 $ rbenv versions system 2.1.2 * 2.1.5 (set by /Users/hoge/.rbenv/version)
以上です!
上記とは別の話ですが、各アプリはこまめにアップデートしたほうがよいのですね。
# Homebrewでインストールしたものをアップデート $ brew upgrade
レディなエンジニアへ!ネイルのススメ♡
この記事は Geek Women Advent Calendar 2015 - Adventar 2日目の記事です。
みなさんは「ネイル」というとどのようなことを思い浮かべますか? 私は「ネイル=キラキラ女子がするもの」というイメージを持っていました。 しかし、今年の8月頃に何事もチャレンジ!という思いでジェルネイルをしてみたところ、キラキラ女子じゃないエンジニアとしてもメリットがあったので女性エンジニアのみなさんにオススメしたいと思います。
筆者情報
- 女性エンジニア
- ベンチャー企業勤務
- 最近オフィスが表参道になりました
- キラキラ女子度: 低めです 具体例)週の半分くらいはほぼスッピンで出社しています
ネイルをしてよかったこと
綺麗とか可愛いという利点は置いていて、それ以外の良かったことを書き出します。 ちなみに、ネイルをしたおかげで昨日まで動かなかったコードが動くようになったというような奇跡は起こりませんでした。
爪をむいたり噛んだりする癖がなくなった
ジェルネイルは爪にジェルを塗り、専用のライトをあてて硬質化させます。 そのため、そのままの爪に比べ、爪が丈夫になるのです。 私には小さい頃から、考え事をしたりイライラしたりすると爪をむいたり噛んだりしてしまう癖がありました。 残念なことにそれは就職してからも直らず、エラーログを追いながら爪をむく、思い通りに動かないスクリプトをデバッグしながら爪を噛むなどしており、1ヶ月の半分くらいは爪がボロボロという状態でした。 しかし、ジェルネイルをしてからは硬くてつるつるの爪なのでむくことも噛むこともしなくなりました。
ネイルが女性と話すきっかけになる
爪を綺麗にしていると、女性と話すきっかけになります。 「わーネイル可愛いですね」と話しかけてもらったときは、ファッション誌でしか見たことなかった会話が自分の身にも起こった!と感動しました。
タイピングで爪が割れなくなった
私はタイピングが荒い上に爪が弱くて、タイピング中に爪が欠けたり割れたりすることがありました。 ネイルを始めてからはまだ1回も割れていないです。 残念ながら、タイピングがソフトになったわけではなさそうです。 (たまにEnterキーを押す勢いで机が揺れています)
ネイルを続ける方法
でもネイルサロンってこまめに通わなきゃいけないんでしょ?面倒だなぁ・・・。と思ったあなた! はい、通うのは面倒です。 ここでは面倒くさがりな私なりに考えたネイルを続ける方法を紹介します。
自宅最寄り駅からの帰り道中にあるネイルサロンに通う
帰宅途中に寄れるのであれば、通う面倒くささが1/3くらい減ります。
ネイルブックでデザインをあらかじめ選ぶ
ネイルサロンでかかる時間を短縮するために、デザインをあらかじめ決めてからサロンに向かうのがオススメです。 ネイルをオフ(落とす)時間や爪をケアする時間は減らせませんが、デザインを決める時間は減らせます。 私は、ネイルブックというネイルデザインを集めたアプリを使用して、こういうデザインにチャレンジしたいというのを隙間時間に考えておきました。 ネイルブックは、自分の気に入ったデザインをクリップ(お気に入り登録)しておくことができるので便利です。
Web予約
電話をしなくて済むので予約の気持ち的なハードルが下がります。
チャレンジしたネイル
ここでは私がチャレンジしたネイルのデザインを紹介します。 初回の写真は撮っていなかったのでありません。
2回目 | 3回目 |
---|---|
4回目 | 5回目 |
---|---|
6回目 |
---|
まとめ
可愛いだけじゃない、女性エンジニアとしてもメリットがあるネイル。 皆さんもはじめてみませんか? 綺麗な指先から生み出されるコードはきっと美しいはず・・・!
女性エンジニア+ネイル=レディなエンジニア を目指したいと思います♡
♡おまけ♡
ネイルで爪を綺麗にしたら、ちょっと良いお店にご飯を食べに行きましょう! そんなときにはペコッターというグルメQ&Aアプリでお店を探すのがオススメです☆ 素敵なネイルで楽しい女子会♡というのもいいかもしれないですね。