フォントサイズを1px変更するだけで、直帰率が2%前後下がった

タイトルの通りです。 こんな効果あるのか?と思い、正直ビックリしました。 期間は6/4~6/6(比較は5/28~5/30) 運営しているサイトはbookwithという読書管理サイトです。 きっかけは、サルワカさんのサルワカという個人メディアを250万PV/月にまで育てた方法…

「続きを読む」ボタンの文章の高さを可変的にしてボタンを設置する方法

「続きを読む」ボタンの情報を探していましたが、どうも高さが固定前提です。 下記のようなやつです。 ------- 表示する文章←ここの高さ固定 「続きを読む」ボタン 隠す文章 ------- ただ、自分はその文章の量が変動かつ、さらに少ない場合もあります。 なの…

「エンジニアのための図解思考 再入門講座」を読んだ

図解で物事を理解する経験を何度も繰り返してきた。 その割には、自分が図解して説明することができなかった。 なぜなら、図解するには物事がどういう構造になっているかのかを理解しないと説明できないからだ。 図解する行為自体は興味があり、そんな折に翔…

書誌情報を取得するAPI(openBD)のラッパーのgemを作成した

個人で読書管理サイトを作成しており、書誌の情報が欲しいと思い、利用できる場所を探していた時に出会いました。 openBD | 書誌情報・書影を自由に 調べたところ、goのライブラリはあったのですが、ruby用がなかったので作成しました。 isbnを送信するだけ…

webのスマホサイトとアプリのUIの壁

webのスマホサイトも段々アプリのようなUIをする動きが増えてきました。 ユーザーからしてみると、普段はアプリを利用しているので、できるだけアプリの動きに近い方が馴染みやすいです。 アプリのようなUIに合わせるのは当たり前の流れなのかもしれません。…

Intersection Observerを使ってみた

JavaScriptのIntersection Observerが便利じゃないのか?と気づき、ちょっと利用しました。 Intersection Observerとは 直訳すると、「交差点の監視」という意味でしょうか。 Intersection Observerの何が便利かというと、対象物が画面に入る時に処理を実行…

JavaScriptのdebuggerでデバッグが楽になる

やっとconsole.logから脱出できそうな気がしてきました。 今までずっとconsole.logを利用してきました。 これからも使っていくでしょう。 ただし、debuggerの存在に気づいたので、debuggerを利用していきたいと思います。 何がいいかっていうと、実行時にブ…

インターフェースデザインの心理学を読んだ

デザインによって、人は使いやすいかどうかを判断するので、役に立つかなと思い読んでみました。 正直内容が心理学的の話をしており、インタフェースの話(ホームページのデザイン)じゃないの?って思ったのが正直な感想です。 微妙に騙されたな・・・って思…

vueを使っている時のディレクトリ構成

vue

みなさん、ディレクトリ構成は気になったりしませんか? 自分は割とディレクトリ構成を気にします。 どこにどういうコードが書いてあるのかすぐに探すことができるからです。 自分は普段railsでコードを書いているので、railsのレールに則って書くとディレク…

Deviseのログイン後のページ先をユーザーフレンドリーにする

せっかくログインしたのに、トップページに戻ると、なんだこれ?ってなってしまいます。 それを回避する方法です。 class ApplicationController < ActionController::Base before_action :store_user_location!, if: :storable_location? private def stora…

railsで今月・先月の期間を取得する方法

all_monthを使いましょう。 今月の場合 [1] pry(main)> Time.current.all_month => Fri, 01 Dec 2017 00:00:00 JST +09:00..Sun, 31 Dec 2017 23:59:59 JST +09:00 先月の場合 [2] pry(main)> Time.current.last_month.all_month => Wed, 01 Nov 2017 00:00:…

railsの本番サイトのデータベースを別サーバーで行うための方法

今回やりたいことです。 app/dbサーバーを分けて運用する そんなの当たり前だろ!って感じですが、デプロイするときに詰まったので、忘れないために書いておきます。 なお、今回のお話はmysqlでの運用にしておりますが、他のデータベースでも同じ感じでいけ…

chromeで簡易的にパフォーマンスチェックする方法

「推測するな、計測せよ!」ってよく言われるけど、どうやって計測すればいいんだよ!ってパターンはあります。 自分はサーバーサイドをメインでやることが多いのですが、最近話題のフロント側のパフォーマンスについては、どうやって計測するのかわかってお…

最小限の機能で作成していく方法

よく、最小限の機能でリリースしろ!なんて巷で言われますよね。 けど、気がついたらガッツリ思い込みでガチガチに仕様を固めています。 自分はよくそうなるので、どうすればそうならないかを考えました。 というか、最小限の機能で作成する能力って技術の一…

railsのroutesのid以外にする方法

railsはdefaultのresourcesは:idになっています。 config/routes.rb resources :users URIのパターンです。 Prefix Verb URI Pattern Controller#Action new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit u…

railsでssl設定をした場合にしておいた方がいい設定

ssl対応をやってみました。 はてなブログもssl対応を行っているし、今となっては当たり前になりましたね。 なぜ、そんなことが起こっているかというと、chromeで安全なサイトではないという警告が出るからですね。 そんなsslですが、let's encryptで行うこと…

railsのARに対するpresent?とexists?のパフォーマンスの差

exists?の方がいいですという指摘を受けた。 なので、ここで確認する。 [4] pry(main)> Work.where(id: [*1..100]).exists? Work Exists (0.5ms) SELECT 1 AS one FROM `works` WHERE `works`.`id` IN (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, …

nginxのmoduleを追加する

nginxにはmoduleという概念があります。 これは、各機能がmodule単位で実装されており、moduleを組み合わせた構成になっています。 moduleには「静的module」と「動的module」の二種類があります。 「静的module」はビルドした時にしか組み込みができません…

debianでmysqlの最新版をインストールする

何も考えずにapt-get install mysql-serverとすると、5.5系になります。 パッケージを更新しないといけません。 https://dev.mysql.com/downloads/repo/apt/ ここに書いてある場所からダウンロードして、更新します。 #wget https://dev.mysql.com/get/mysql…

管理画面に他人の人がアクセスされてきた場合の対処方法

何も考えずにリダイレクトをしていました。 リダイレクトが悪い理由 リダイレクトをするということは、ページがあるということがバレます。 ページがないのなら、404を返すのがベターです。 ということは、404ページを作成して、それを返すのがいいです。 今…

webpackerを使用した時にcssをどこに置くのかについて

webpackerを使用していて、cssをどうするか悩みました。 いや、そもそも何に悩んでいるの?という話だと思います。 jsファイルは原則javascript/packsに存在する→jsから読み込むcssファイルはどこに置く?→javascript/stylesを作成して、そこから使用するよ…

railsでboolean値のvalidationをする方法

ちょっと罠にかかりました。 validates :publish, presence: true いつも通りpresence: trueを書いていました。 こうすると、errorになります。 なぜ、そんなことが起こるかです。 rails/presence.rb at d57356bd5ad0d64ed3fb530d722f32107ea60cdf · rails/r…

SQLでクロス集計をしてみる

SQLって表も簡単に作成できるんだなって最近感動しております。 今回やろうとしていることは、クロス集計です。 年 春 夏 秋 冬 2000 10 10 8 9 2001 9 10 8 9 2002 10 10 8 10 年毎の作品を集計したいとかありそうじゃないですか。 ということで、やってみ…

Deviseでユーザー登録後のリダイレクト先を変更する

Deviseのカスタマイズに少し苦労しました。 大体標準通りに使えば問題ないのかもしれませんが、少し加工しようとするとちょっと調べないといけないですね。 今回行うことは、Deviseでユーザー登録後に、Thanksページに飛ばすことです。 リダイレクト自体は割…

find_by_カラム名のメソッドが動的に生成されていたという事実

例えば、Fooモデルにtitleというカラムがあるとする。 Foo.find_by(titile: "foo") Foo.find_by_title("foo") 下でも検索できる。 いつも上ばっかり使っていたので、下のパターンがあるとは知らなかった。 補足 rubocop的には上の方がいい。 Class: RuboCop:…

ttyとptsについて

dokcer runのオプションで意味不明だったので、調べていました。 docker run -it ←こいつ % docker run --help -i, --interactive Keep STDIN open even if not attached -t, --tty Allocate a pseudo-TTY ここでTTYが出てきました。 TTYとは ttyとは、標準…

ローカル環境のURLをlocalhost以外にする方法

localhostってださいなって思う時があるじゃないですか? そんな時に名前をhostを変える方法です。 /etc/hostsがあると思います。 この設定ファイルに付け足します。 127.0.0.1 foo.com これでrails sするとhttp:foo.com:3000でアクセスできます。 :3000がい…

CSVでファイルを保存するなら、jsonで保存する方が楽ということに気づいた

CSVでhashの値を保存する場合分解しないといけないじゃないですか? めんどくさいですよね。 例えばこういうデータです。 class FooApi HEADER = %w(foo bar baz) def export CSV.open('foo.csv', 'w:utf-8', headers: HEADERS, write_headers: true, force_…

正規表現で〜から〜までのパターン

こういうやつです。 宮藤官九郎(第1話、第2話、最終話)で名前と後ろを分けたい場合。 (?<name>.[^((]*)(?<supplement>.*)? 否定を間に挟んで、それ以外までにする。 これがミソ。 このパターン多いと思うし、覚えておこ。</supplement></name>

正規表現で名前付きキャプチャが便利だった

これがあれば何にマッチさせているかわかるじゃん!って感動しました。 正規表現でキャプチャするときに$1で変数格納されますが、この場合何にマッチさせているのかがわかりづらいときがあります。 何より量が増えてくるとしんどいです。 使い方 (?<name>正規表現</name>…