tmicha’s blog

エンジニアを目指す文系学生が、RubyとかRailsとかハイブリッドアプリの話とか思ったことを綴ります

HerokuのDBをPostgreSQLからMySQLに変更する


Railsでアプリ作ってて、デフォルトのPostgreSQLを使ってたけど
中身をSequelで見たいなあと思ったのでPostgreSQLからMySQLに変更することにした。


ググったらたくさん記事が出てくるからラクショーじゃん!と思っていたけどかなり時間がかかってしまったし、
次も同じ目に遭いそうだなと思ったのでメモ。

Gemfileにmysqlを追加する

#gemfile
gem 'mysql2',       '~> 0.3.20'

database.ymlの設定を変更する

#database.yml
default: &default
  adapter: mysql2
  pool: 5
  timeout: 5000

development:
  <<: *default
  adapter: mysql2
  database: appname_development
  pool: 5
  timeout: 5000

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default

production:
  <<: *default
  adapter: mysql2
  pool: 5
  timeout: 5000

bundle installする

$ bundle install

ここでGemfile.lockに差分ができるので、Gemfileとともにコミットする。
私はこれをやってなくて2日くらい悩んでいた。なんと無駄な・・・
うまくいったらHerokuにpushする。

HerkouのアドオンにClearDBを追加する

$ heroku addons:add cleardb 

もしかしたらアプリ名指定しろよって言われるかも?

DATABASEの設定を削除する

$ heroku addons:destroy heroku-postgresql -a appname

ググった時に出てくる記事だとheroku addons:detach DATABASE -a appnameでもいいっぽいのだけど、それだとなぜか通らなかった。 destroyだといけた。 アプリの名前入れてくれーって言われるので入れてあげると削除してくれる。

DATABASE_URLをCLEARDATABASE_URLのものに書き換える

$  heroku config:set DATABASE_URL='mysql2://xxxxx?reconnect=true' --app appname

mysqlmysql2に変えることを忘れずに。

いちおうdb:migrateしてheroku openする

$ rails db:migrate
$ heorku open




おわり。
大変だった…また次もつまづきそうだ…

Herokuにデプロイしたら背景が真っ白になった話

 

久しぶりにHerokuにサイトをデプロイしたら背景が真っ白になった。

あーこれ知ってる。アセットプリコンパイルだ。
でも背景以外の画像はちゃんと表示できてる。

とりあえずコマンド叩いてみた。 

~/w/r_portfolio ❯❯❯ heroku run rake assets:precompile
Running rake assets:precompile on ⬢ tsumi-portfolio... up, run.9433 (Free)
Error waiting for network: Resource temporarily unavailable
~/w/r_portfolio ❯❯❯ heroku run rake assets:precompile
Running rake assets:precompile on ⬢ tsumi-portfolio... up, run.7788 (Free)


実はこのコマンド叩いたの1年前が最初で最後で、
記憶を頼りに適当に叩いたら合っててびっくりした。

まあ、うまくいかなかったけど。

一応ググったら環境変数指定しないといけなかったっぽい。
それのせいなのか、怒られているリソースがなんとかってせいなのかはわからない。


production.rbの設定変えるらしい

ということがわかったので、production.rbを開いてconfig.assets.compileを確認。


falseになってた・・・

f:id:tmicha:20170918163844p:plain

なおして再びpush。

解決!

Rubyの練習問題を解いた話【累乗】


あるサイトの、Rubyの練習問題を解きました。
正解率90%超えの問題を選んだんだけど、まあまあ難しかった気がします。

2つの数字が入力されるので、それぞれを3乗した数字の差を求めなさいという問題。

自分の書いたコード↓

input_lines = gets
r = input_lines.split("\s")
r_1 = r[0].to_i
r_2 = r[1].to_i
puts (r_1 ** 3) - (r_2 ** 3)


まずinput_lines = getsで入力されたものを変数に入れる。 input_linesはStringなので、.splitで指定した文字ごとに区切って配列にする。なので、rはArrayになる。
ただ、Arrayの要素ひとつひとつは文字列なので、to_iしてから計算する。


サイトだとプログラムがテストデータで計算してくれるようなので、自分でもコンソールで叩いてみた。↓

irb(main):001:0> input_lines = gets
5 3
=> "5 3\n"
irb(main):002:0> r = input_lines.split("\s")
=> ["5", "3"]
irb(main):003:0> r_1 = r[0].to_i
=> 5
irb(main):004:0> r_2 = r[1].to_i
=> 3
irb(main):005:0> puts (r_1 ** 3) - (r_2 ** 3)
98
=> nil

べき乗(累乗)ってアスタリスク2つつけるの知らなかった。
いや、見たことはあるけど使ったことなかったからすっかり忘れてた…

良い勉強になりました!

グロースハックについて調べてまとめた話

 

 

31日ぶりの更新になってしまった。
TEDはというと、見てノートに書いてはいるもののこっちに投稿できていない…

そのままでもいいんだけど、考えや頭の中を整理できてない感じがしてよくない気がするのでそのうちちゃんと書こうと思ってます。

 

ところで今日は、インターン先でグロースハックについて学びました。

最近ネットでよく見かけはしていたものの、IoTとかデザイン思考みたいに「なんか使ってるとかっこいいしそれっぽい流行語」みたいな感じがして勝手に抵抗感を感じていたけど、
これから大事になる概念だと言われたのでこの機会にしっかり理解しておこうと思い、そして忘れないようにここに書き留めようと思ったのです。

 

なお、今回はVASILY社のブログを参考にさせていただきました。
とてもわかりやすかった。

 

growthhack.vasily.jp

  

そもそもグロースハックとは?

一言でいえば、 「数値やユーザーの声を分析し、ユーザーの数や質をGrowthさせる仕組みをプロダクトの中に組み込んでしまうこと

 

数値をもとに分析してサービスを成長させようという手法のことらしい。
サービスをある程度運営させていくとデータが溜まってくるし、それを使って改善すべきところを改善すれば利益も上がりそう。ふむふむ。

 

グロースハックのための分析フレームワーク"AARRRモデル"

 

なんかすごい名前だけど、グロースハックのための分析フレームワークがあるらしい。

・Acquisition(ユーザー獲得:登録や訪問など)
・Activation(ユーザー活性化:初めての利用でユーザーにプロダクトを面白い!と感じてもらう)
・Retention(継続:ユーザーが繰り返しサービスを使うようにする)
・Referral(紹介:ユーザーがサービスを周りに紹介するようにする)
・Revenue(収益:ユーザーがより多く課金行動を取るようにする)

 

ざっくり言うと、この5つの中で改善の優先順位をつけて、そこにフォーカスして高速にPDCAを回していく。
なので最初にどこがネックになっているのかを分析して、仮説とKPIを設定し、設計して検証して…、ということのよう。

マーケティングに関してだけでなく、開発に関してもこれが適用できる。というか、一緒に考えないと意味がない。
UIだったりUXだったり、極論言うとサービスの仕様がガラッと変わったりすることもある。

 

この手法で成功しているのが、TwitterFacebookDropboxなど(探すとたくさん出てくる)。
Twitterなんか最近アップデートするたびに改悪だのなんだのボロクソ言われているけれど、やっぱりすごいサービスなんだな。

 

おわりに

 

どんなサービスでも成長し続けていかないといけないので、この手法や概念は会社やサービスの大小に関わらず大事だな、と感じましたし、よくわからない先入観で好き嫌いするの意味わかんないしやめた方がいいな…と反省しました。

自分がこれからエンジニアとして働く時にも意識していきたいです。

とりあえず今回は軽くまとめたので、時間がある時に勉強したり、インターン先でも実務と共にさらに勉強できたらいいなと思います。

 

あと、こちらの記事も参考になりました(図がとてもわかりやすかったです)

dentsu-ho.com

 

 

 

【TED】The mind behind Linux

 

初めてのTEDはこちら。

"The mind behind LinuxLinuxの背後にある精神)"

www.ted.com

 

リーナス・トーバルズ
LinuxとGitを作った人。

その彼に質問者がいろいろ聞いていくという、対話形式のTEDだった(珍しい)。

 

3点まとめ

LinuxやGitは自分のために作っていたプロジェクトだった。

オープンソースの好きな点は、「異なる人が一緒に働けること」

・彼は、自分が「ビジョナリー」ではなく「エンジニア」なので、技術やトレンドがこの先どうなるかを予想するのではなく、今目の前の問題を解決したいと思っている

 

感想

まず彼の人柄がいい。


すごいことをやっている人なのに、傲ることもなく、かといって卑下するわけでもなく。

それと少し気になったのが、彼のワークスペースがとてもシンプル。
動画の中に写真が出てくるんだけど、机の上にディスプレイとキーボードとライトだけ置いてあって、本体は離れた場所にある。

壁は薄い緑色で(本人はこれを「精神病院で使われる色」と言ってた(笑))、とても目に優しい。

これらは彼がそうしたくてやっていることで、
例えばPC本体のファンの音が嫌だから遠くに置いていたり、目への刺激を少なくするために薄緑色の壁にしている。
しかも机は、立って操作するような高さにある。立って作業する派なんでしょうね。

 

思ったより「プログラミングが楽しいと思っている普通のエンジニア」だった

Linuxはもともと彼自身が自分のためにやっていたプロジェクトだった。
自分が欲しくて、あるいはやってみたくて作っていた。

でもやっているうちに「これ作ったから見て!」と周りに見せてフィードバックが欲しくなった。
公開していたらいろんな人が集まって来てフィードバックくれていい感じになって、ついにオープンソース化。
プロジェクトに関わる人数も増えていき、徐々に成長していった。

 

この流れって、エンジニアだけじゃなくクリエイターなら誰でもありえるというか、「わかる」ってなることだと思う。
さすがにオープンソース化まではそうそう行かないけど。

でも自分が作ったものを見せたくなるのも、フィードバックもらってブラッシュアップしていくのも、ものづくりもする人ならやりたくなることだと思うのでとても共感できた。

それ以外にも彼が普通にエンジニアだなあと思える部分がいくつかあって、
例えば彼はもともとプログラミングを楽しみながらやっていたこと。
最初から偉大ですごいもの作るぞ!って決めて始めたんじゃなく、楽しいから、好きだからという気持ちでやっていた。

あとは技術にまっすぐで、リアルなコミュニケーションがあまり好きではないところ。
理系やエンジニアにはいわゆる「コミュ障」みたいなイメージが持たれているし実際そういう人は多いんだろうけど、彼も人付き合いは得意ではないらしくて、
「やり取りはメールの方がいい」と言っていたし、なんというかそれっぽさがあった笑。

 LinuxとかGitなんてすごいもの作った人なんだから、もっとこうジョブズみたく堂々としている人で、大きな問題解決に積極的に取り組んでいる人だと勝手に想像してた…

 

彼の見習いたい部分

私が彼のことを見習いたいと思ったところは、彼自身が言っていた「諦めない、頑固なところ」。
作っている途中で「もういいや、他のいけてるものを作ろう」とはならないらしい。

これ結構大事だと思うし私はそこまで我慢強くないので真似したいなあと思った。

  

プログラミングにおける「センス」

って私みたいな理系じゃないのにプログラミングをやっている人にとってとてもひやりとすることで、
楽しくてやっているけど向いていない可能性もある。

彼は、プログラミングにおけるセンスとは「ある問題を、違った見方をして書き換えることで、特殊ケースを一般ケースに変えられること(=いいコードを書くこと)。また、大きなパターンを見て取って、直感的に正しいやり方がわかること」って言ってる。

前者は少し難しいけど、後者はわかる。
わからないとクソコード量産することになるし…

彼はセンスと言ってるけど、私は磨いて伸ばせる部分だと思うんですけどね。

オープンソースという考え方はもうすっかり実現されているか

彼は「どっちとも言えないな〜」って言っている。

個人的には、ただ動くコードを公開したりするだけでなく、新しいオープンソースの形が生まれるんじゃないかなと思っている。

それはIT・エンジニアリングの世界だけでなく、他の業界でもありえることだし、
もっと世の中にオープンソースのものが増えればさらに多くの画期的なコンテンツが生まれて豊かになるんじゃないかなと。

利益やビジネスの問題は置いといて。

 

最後に

この動画、16分くらいあって実は途中で寝ながら聞いてた笑。

それと書いていて思ったのは、文章書くの下手だなーってことと語彙力がないなってこと。

そもそも考えたことを吐き出しているだけなので美しくて読みやすいものでないのはそうなんだけど、
伝わりやすいようにどういった書き方をするのか、ってことが全く考えられていないような感じがする。。
動画見終わってからはうお〜〜〜ってたくさん頭の中で思考がぐるぐるするんだけど、それをうまく言語化してアウトプットできない。
文系なのに相手に伝わる文章書けないとか終わってる(文系理系の問題ではないが)。

 

でもまあ、それはおいおい書きながら訓練していきたい。

 

おわり

TEDを見まくって感想を書くことにした話

 

 

少し前に、大学の授業でTEDを見ました。
いろいろな人がプレゼンテーションをするやつです。

www.ted.com

 

で、他にもどんな動画があるのかなーと思って見ていたんですが、これが結構面白そうなものがたくさんあるんですね!

なるべくたくさんの動画を見たいですし、見た後いろいろ自分で考えることも多いので、
見たものの感想やら考察をちょこちょこ投稿することにしてみます。

 

すごく意識高そうなことやってますが、
単純に自分が何を見たのか記録したいのと、あとは何かを習慣化させたいというのもあり…

飽きっぽいので毎日続いたことがない。
ダイエットとか。
ブログも結局気が向いた時にしかやらないし。

 

頑張ります。

【git】revretしたcommitをまたrevertして戻した話


最初に間違えてpushした

先日家にいる時、インターン先の上司に「localにコミットしといてね」って言われた。

localにコミット…?リモートにpushしとけってことかなと思いcommitしてpushしました

$ git commit - 'xxxxxxxx'

$ git push



不安になってrevertした

で、その後 「いやでももし自分のところにcommitしとけってことだったらどうしよう?誰かにpullされたらコンフリクトするぞ…」と思い、commitを取り消してpushし直した。

まず取り消したいcommitの番号を取得します

$ git log --oneline
42cdd131 メール機能追加
ff0be1e1 SNS共有昨日のバグ修正

メール機能追加を取り消したいのでrevertしましょう

$git revert 42cdd131
[local 42cdd131] Revert "メール機能追加"
 11 files changed, 428 insertions(+), 82 deletions(-)
・
・
・

これで一安心。

ところが上司から「もうcommitした?」と追加で連絡が…



revertをrevertした

結局リモートにあげろってことか!と焦りながら「revertを戻すにはどうしたら…!?」と激焦りした。

結論言うと、「revertをrevertすれば良い」。

もう一度ログを見てみる。

$ git log --oneline
7d146881 Revert "メール機能追加"
42cdd131 メール機能追加
ff0be1e1 SNS共有機能のバグ修正

なんと、revertにもちゃんと番号がついている…! 冷静に考えたら当たり前なんだけど、その時は焦っててそこまで頭回らなかった。

で、この番号を使ってrevertをrevertしよう

$ git revert 7d146881
[local 9ad403ba] Revert "Revert Revert "メール機能追加""
 11 files changed, 428 insertions(+), 82 deletions(-)
 rewrite app/views/pc/xxx/index.html.erb (100%)
 rewrite app/views/pc/yyy/index.html.erb (100%)
 rewrite app/views/pc/zzz/edit.html.erb (100%)
・
・
・

よかった!できたっぽい。

で、これをpushする。

$ git push
Counting objects: 24, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (21/21), done.
Writing objects: 100% (24/24), 5.16 KiB | 0 bytes/s, done.
Total 24 (delta 13), reused 0 (delta 0)
remote: Resolving deltas: 100% (13/13), completed with 11 local objects.
To github.com:xxx/xxx.git
   7d146881..9ad403ba  local -> local




めでたしめでたし。

言葉の意味がわからなかったらちゃんと上司に確かめるようにしよう。